### FUNC 0015cc10 (20 bytes) name=FUN_0015cc10

void FUN_0015cc10(void)

{
  (*(code *)PTR_004ff440)();
  return;
}


==================================================================

### FUNC 0015cc30 (16 bytes) name=cvCvtSeqToArray

void cvCvtSeqToArray(void)

{
  (*(code *)PTR_cvCvtSeqToArray_004ff448)();
  return;
}


==================================================================

### FUNC 0015cc40 (16 bytes) name=transpose

void __thiscall cv::MatOp::transpose(MatOp *this,MatExpr *param_1,MatExpr *param_2)

{
  (*(code *)PTR_transpose_004ff450)();
  return;
}


==================================================================

### FUNC 0015cc50 (16 bytes) name=strerror

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strerror(int __errnum)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strerror_004ff458)(__errnum);
  return pcVar1;
}


==================================================================

### FUNC 0015cc60 (16 bytes) name=memcpy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memcpy(void *__dest,void *__src,size_t __n)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_memcpy_004ff460)();
  return pvVar1;
}


==================================================================

### FUNC 0015cc70 (16 bytes) name=cvTypeOf

void cvTypeOf(void)

{
  (*(code *)PTR_cvTypeOf_004ff468)();
  return;
}


==================================================================

### FUNC 0015cc80 (16 bytes) name=GetRgnTemperatureInfo

void __thiscall
CFunctions::GetRgnTemperatureInfo
          (CFunctions *this,uint *param_1,uint param_2,int *param_3,int param_4)

{
  (*(code *)PTR_GetRgnTemperatureInfo_004ff470)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015cc90 (16 bytes) name=~Device

void __thiscall cv::ocl::Device::~Device(Device *this)

{
  (*(code *)PTR__Device_004ff478)();
  return;
}


==================================================================

### FUNC 0015cca0 (16 bytes) name=putText

void cv::putText(void)

{
  (*(code *)PTR_putText_004ff480)();
  return;
}


==================================================================

### FUNC 0015ccb0 (16 bytes) name=GetRaw

void __thiscall FStream::GetRaw(FStream *this)

{
  (*(code *)PTR_GetRaw_004ff488)();
  return;
}


==================================================================

### FUNC 0015ccc0 (16 bytes) name=fopen

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

FILE * fopen(char *__filename,char *__modes)

{
  FILE *pFVar1;
  
  pFVar1 = (FILE *)(*(code *)PTR_fopen_004ff490)();
  return pFVar1;
}


==================================================================

### FUNC 0015ccd0 (16 bytes) name=LoadDDT

void __thiscall
CMagDevice::LoadDDT(CMagDevice *this,OutputPara *param_1,char *param_2,
                   _func_void_uint_uint_uint_void_ptr *param_3,void *param_4)

{
  (*(code *)PTR_LoadDDT_004ff498)();
  return;
}


==================================================================

### FUNC 0015cce0 (16 bytes) name=gettimeofday

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int gettimeofday(timeval *__tv,__timezone_ptr_t __tz)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_gettimeofday_004ff4a0)((int)__tv);
  return iVar1;
}


==================================================================

### FUNC 0015ccf0 (16 bytes) name=ApplyNewEffect

void __thiscall CFunctions::ApplyNewEffect(CFunctions *this,int param_1)

{
  (*(code *)PTR_ApplyNewEffect_004ff4a8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015cd00 (16 bytes) name=filter2D

void cv::filter2D(void)

{
  (*(code *)PTR_filter2D_004ff4b0)();
  return;
}


==================================================================

### FUNC 0015cd10 (16 bytes) name=_M_emplace_back_aux<JRect>

void __thiscall
std::vector<JRect,std::allocator<JRect>>::_M_emplace_back_aux<JRect>
          (vector<JRect,std::allocator<JRect>> *this,JRect *param_1)

{
  (*(code *)PTR__M_emplace_back_aux<JRect>_004ff4b8)();
  return;
}


==================================================================

### FUNC 0015cd20 (16 bytes) name=MapTemperature

void CFunctions::MapTemperature(int param_1)

{
  (*(code *)PTR_MapTemperature_004ff4c0)(param_1);
  return;
}


==================================================================

### FUNC 0015cd30 (16 bytes) name=~MatOp

void __thiscall cv::MatOp::~MatOp(MatOp *this)

{
  (*(code *)PTR__MatOp_004ff4c8)();
  return;
}


==================================================================

### FUNC 0015cd40 (16 bytes) name=cos

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double cos(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_cos_004ff4d0)();
  return dVar1;
}


==================================================================

### FUNC 0015cd50 (16 bytes) name=create

void cv::cuda::HostMem::create(int param_1,int param_2,int param_3)

{
  (*(code *)PTR_create_004ff4d8)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015cd60 (16 bytes) name=writev

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t writev(int __fd,iovec *__iovec,int __count)

{
  ssize_t sVar1;
  
  sVar1 = (*(code *)PTR_writev_004ff4e0)(__fd,__iovec,__count);
  return sVar1;
}


==================================================================

### FUNC 0015cd70 (16 bytes) name=_Unwind_GetRegionStart

void _Unwind_GetRegionStart(void)

{
  (*(code *)PTR__Unwind_GetRegionStart_004ff4e8)();
  return;
}


==================================================================

### FUNC 0015cd80 (16 bytes) name=cvReleaseSparseMat

void cvReleaseSparseMat(void)

{
  (*(code *)PTR_cvReleaseSparseMat_004ff4f0)();
  return;
}


==================================================================

### FUNC 0015cd90 (16 bytes) name=cvGetRootFileNode

void cvGetRootFileNode(void)

{
  (*(code *)PTR_cvGetRootFileNode_004ff4f8)();
  return;
}


==================================================================

### FUNC 0015cda0 (16 bytes) name=memchr

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memchr(void *__s,int __c,size_t __n)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_memchr_004ff500)(__s,__c);
  return pvVar1;
}


==================================================================

### FUNC 0015cdb0 (16 bytes) name=get_unexpected

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::get_unexpected(void)

{
  (*(code *)PTR_get_unexpected_004ff508)();
  return;
}


==================================================================

### FUNC 0015cdc0 (16 bytes) name=pow

void cv::pow(_InputArray *param_1,double param_2,_OutputArray *param_3)

{
  (*(code *)PTR_pow_004ff510)();
  return;
}


==================================================================

### FUNC 0015cdd0 (16 bytes) name=Read

void __thiscall FStream::Read(FStream *this,void *param_1,ulong param_2,ulong param_3)

{
  (*(code *)PTR_Read_004ff518)();
  return;
}


==================================================================

### FUNC 0015cde0 (16 bytes) name=MAG_IsProcessingImage

void MAG_IsProcessingImage(void)

{
  (*(code *)PTR_MAG_IsProcessingImage_004ff520)();
  return;
}


==================================================================

### FUNC 0015cdf0 (16 bytes) name=libusb_handle_events_completed

void libusb_handle_events_completed(void)

{
  (*(code *)PTR_libusb_handle_events_completed_004ff528)();
  return;
}


==================================================================

### FUNC 0015ce00 (16 bytes) name=gzclose

void gzclose(void)

{
  (*(code *)PTR_gzclose_004ff530)();
  return;
}


==================================================================

### FUNC 0015ce10 (16 bytes) name=empty

void __thiscall cv::_InputArray::empty(_InputArray *this)

{
  (*(code *)PTR_empty_004ff538)();
  return;
}


==================================================================

### FUNC 0015ce20 (16 bytes) name=cvCreateData

void cvCreateData(void)

{
  (*(code *)PTR_cvCreateData_004ff540)();
  return;
}


==================================================================

### FUNC 0015ce30 (16 bytes) name=__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>

KeyPoint *
std::__uninitialized_copy<false>::__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>
          (KeyPoint *param_1,KeyPoint *param_2,KeyPoint *param_3)

{
  KeyPoint *pKVar1;
  
  pKVar1 = (KeyPoint *)(*(code *)PTR___uninit_copy<cv::KeyPoint*,cv::KeyPoint*>_004ff548)();
  return pKVar1;
}


==================================================================

### FUNC 0015ce40 (16 bytes) name=cvCreateSet

void cvCreateSet(void)

{
  (*(code *)PTR_cvCreateSet_004ff550)();
  return;
}


==================================================================

### FUNC 0015ce50 (16 bytes) name=Logging

void __thiscall mag::Logging::Logging(Logging *this,int param_1)

{
  (*(code *)PTR_Logging_004ff558)(this,param_1);
  return;
}


==================================================================

### FUNC 0015ce60 (16 bytes) name=asprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int asprintf(char **__ptr,char *__fmt,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_asprintf_004ff560)((int)__ptr);
  return iVar1;
}


==================================================================

### FUNC 0015ce70 (16 bytes) name=SaveDDT2Buffer

void CMagDevice::SaveDDT2Buffer(void *param_1,uint param_2)

{
  (*(code *)PTR_SaveDDT2Buffer_004ff568)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015ce80 (16 bytes) name=opendir

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

DIR * opendir(char *__name)

{
  DIR *pDVar1;
  
  pDVar1 = (DIR *)(*(code *)PTR_opendir_004ff570)();
  return pDVar1;
}


==================================================================

### FUNC 0015ce90 (16 bytes) name=GetLocalTime

void GetLocalTime(_SYSTEMTIME *param_1)

{
  (*(code *)PTR_GetLocalTime_004ff578)();
  return;
}


==================================================================

### FUNC 0015cea0 (16 bytes) name=GetTemperatureData_Raw

void CMagDevice::GetTemperatureData_Raw(int *param_1,uint param_2,int param_3)

{
  (*(code *)PTR_GetTemperatureData_Raw_004ff580)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015ceb0 (16 bytes) name=libusb_lock_events

void libusb_lock_events(void)

{
  (*(code *)PTR_libusb_lock_events_004ff588)();
  return;
}


==================================================================

### FUNC 0015cec0 (16 bytes) name=Restart

void __thiscall CAccumulator::Restart(CAccumulator *this)

{
  (*(code *)PTR_Restart_004ff590)();
  return;
}


==================================================================

### FUNC 0015ced0 (16 bytes) name=zeros

void __thiscall cv::Mat::zeros(Mat *this,int param_1,int param_2,int param_3)

{
  (*(code *)PTR_zeros_004ff598)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015cee0 (16 bytes) name=cvRelease

void cvRelease(void)

{
  (*(code *)PTR_cvRelease_004ff5a0)();
  return;
}


==================================================================

### FUNC 0015cef0 (16 bytes) name=__ctype_get_mb_cur_max

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t __ctype_get_mb_cur_max(void)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR___ctype_get_mb_cur_max_004ff5a8)();
  return sVar1;
}


==================================================================

### FUNC 0015cf00 (16 bytes) name=sepFilter2D

void cv::sepFilter2D(void)

{
  (*(code *)PTR_sepFilter2D_004ff5b0)();
  return;
}


==================================================================

### FUNC 0015cf10 (16 bytes) name=cvTreeToNodeSeq

void cvTreeToNodeSeq(void)

{
  (*(code *)PTR_cvTreeToNodeSeq_004ff5b8)();
  return;
}


==================================================================

### FUNC 0015cf20 (16 bytes) name=~PlatformInfo

void __thiscall cv::ocl::PlatformInfo::~PlatformInfo(PlatformInfo *this)

{
  (*(code *)PTR__PlatformInfo_004ff5c0)();
  return;
}


==================================================================

### FUNC 0015cf30 (16 bytes) name=sin

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double sin(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_sin_004ff5c8)();
  return dVar1;
}


==================================================================

### FUNC 0015cf40 (16 bytes) name=logf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float logf(float __x)

{
  float fVar1;
  
  fVar1 = (float)(*(code *)PTR_logf_004ff5d0)();
  return fVar1;
}


==================================================================

### FUNC 0015cf50 (16 bytes) name=dot

void __thiscall cv::Mat::dot(Mat *this,_InputArray *param_1)

{
  (*(code *)PTR_dot_004ff5d8)();
  return;
}


==================================================================

### FUNC 0015cf60 (16 bytes) name=~OFStream

void __thiscall OFStream::~OFStream(OFStream *this)

{
  (*(code *)PTR__OFStream_004ff5e0)();
  return;
}


==================================================================

### FUNC 0015cf70 (16 bytes) name=create

void __thiscall cv::ocl::Kernel::create(Kernel *this,char *param_1,Program *param_2)

{
  (*(code *)PTR_create_004ff5e8)();
  return;
}


==================================================================

### FUNC 0015cf80 (16 bytes) name=fitEllipse

void __thiscall cv::fitEllipse(cv *this,_InputArray *param_1)

{
  (*(code *)PTR_fitEllipse_004ff5f0)();
  return;
}


==================================================================

### FUNC 0015cf90 (16 bytes) name=swap

void __thiscall
std::__exception_ptr::exception_ptr::swap(exception_ptr *this,exception_ptr *param_1)

{
  (*(code *)PTR_swap_004ff5f8)();
  return;
}


==================================================================

### FUNC 0015cfa0 (16 bytes) name=cvCreateStructuringElementEx

void cvCreateStructuringElementEx(void)

{
  (*(code *)PTR_cvCreateStructuringElementEx_004ff600)();
  return;
}


==================================================================

### FUNC 0015cfb0 (16 bytes) name=strncpy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strncpy(char *__dest,char *__src,size_t __n)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strncpy_004ff608)();
  return pcVar1;
}


==================================================================

### FUNC 0015cfc0 (16 bytes) name=MAG_Free

void MAG_Free(void)

{
  (*(code *)PTR_MAG_Free_004ff610)();
  return;
}


==================================================================

### FUNC 0015cfd0 (16 bytes) name=usbi_handle_transfer_completion

void usbi_handle_transfer_completion(void)

{
  (*(code *)PTR_usbi_handle_transfer_completion_004ff618)();
  return;
}


==================================================================

### FUNC 0015cfe0 (16 bytes) name=MAG_GetTemperatureProbe2

void MAG_GetTemperatureProbe2(void)

{
  (*(code *)PTR_MAG_GetTemperatureProbe2_004ff620)();
  return;
}


==================================================================

### FUNC 0015cff0 (16 bytes) name=fixedType

void __thiscall cv::_OutputArray::fixedType(_OutputArray *this)

{
  (*(code *)PTR_fixedType_004ff628)();
  return;
}


==================================================================

### FUNC 0015d000 (16 bytes) name=cvGetSeqElem

void cvGetSeqElem(void)

{
  (*(code *)PTR_cvGetSeqElem_004ff630)();
  return;
}


==================================================================

### FUNC 0015d010 (16 bytes) name=Exception

void __thiscall
cv::Exception::Exception
          (Exception *this,int param_1,String *param_2,String *param_3,String *param_4,int param_5)

{
  (*(code *)PTR_Exception_004ff638)(this,param_1);
  return;
}


==================================================================

### FUNC 0015d020 (16 bytes) name=_Unwind_RaiseException

void _Unwind_RaiseException(void)

{
  (*(code *)PTR__Unwind_RaiseException_004ff640)();
  return;
}


==================================================================

### FUNC 0015d030 (16 bytes) name=SetEXLevel

void CMagDevice::SetEXLevel(void)

{
  (*(code *)PTR_SetEXLevel_004ff648)();
  return;
}


==================================================================

### FUNC 0015d040 (16 bytes) name=libusb_open

void libusb_open(void)

{
  (*(code *)PTR_libusb_open_004ff650)();
  return;
}


==================================================================

### FUNC 0015d050 (16 bytes) name=usleep

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int usleep(__useconds_t __useconds)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_usleep_004ff658)(__useconds);
  return iVar1;
}


==================================================================

### FUNC 0015d060 (16 bytes) name=~Logging

void __thiscall mag::Logging::~Logging(Logging *this)

{
  (*(code *)PTR__Logging_004ff660)();
  return;
}


==================================================================

### FUNC 0015d070 (16 bytes) name=cvSetImageCOI

void cvSetImageCOI(void)

{
  (*(code *)PTR_cvSetImageCOI_004ff668)();
  return;
}


==================================================================

### FUNC 0015d080 (16 bytes) name=compilerAvailable

void __thiscall cv::ocl::Device::compilerAvailable(Device *this)

{
  (*(code *)PTR_compilerAvailable_004ff670)();
  return;
}


==================================================================

### FUNC 0015d090 (16 bytes) name=towlower

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t towlower(wint_t __wc)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_towlower_004ff678)(__wc);
  return wVar1;
}


==================================================================

### FUNC 0015d0a0 (16 bytes) name=cvSetImageROI

void cvSetImageROI(void)

{
  (*(code *)PTR_cvSetImageROI_004ff680)();
  return;
}


==================================================================

### FUNC 0015d0b0 (16 bytes) name=PushFrame

void __thiscall CFunctions::PushFrame(void)

{
  (*(code *)PTR_PushFrame_004ff688)();
  return;
}


==================================================================

### FUNC 0015d0c0 (16 bytes) name=setVisible

void __thiscall MDTHelper::setVisible(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setVisible_004ff690)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d0d0 (16 bytes) name=subtract

void __thiscall cv::MatOp::subtract(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  (*(code *)PTR_subtract_004ff698)();
  return;
}


==================================================================

### FUNC 0015d0e0 (16 bytes) name=~TLSDataContainer

void __thiscall cv::TLSDataContainer::~TLSDataContainer(TLSDataContainer *this)

{
  (*(code *)PTR__TLSDataContainer_004ff6a0)();
  return;
}


==================================================================

### FUNC 0015d0f0 (16 bytes) name=mbrtowc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t mbrtowc(wchar_t *__pwc,char *__s,size_t __n,mbstate_t *__p)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_mbrtowc_004ff6a8)();
  return sVar1;
}


==================================================================

### FUNC 0015d100 (16 bytes) name=GetJstring

void GetJstring(_JNIEnv *param_1,char *param_2,_jobject *param_3,char *param_4,ulong param_5)

{
  (*(code *)PTR_GetJstring_004ff6b0)();
  return;
}


==================================================================

### FUNC 0015d110 (16 bytes) name=reshape

void cv::UMat::reshape(int param_1,int param_2)

{
  (*(code *)PTR_reshape_004ff6b8)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d120 (16 bytes) name=getOGlBuffer

void cv::_InputArray::getOGlBuffer(void)

{
  (*(code *)PTR_getOGlBuffer_004ff6c0)();
  return;
}


==================================================================

### FUNC 0015d130 (16 bytes) name=_Unwind_SetIP

void _Unwind_SetIP(void)

{
  (*(code *)PTR__Unwind_SetIP_004ff6c8)();
  return;
}


==================================================================

### FUNC 0015d140 (16 bytes) name=copySize

void __thiscall cv::Mat::copySize(Mat *this,Mat *param_1)

{
  (*(code *)PTR_copySize_004ff6d0)();
  return;
}


==================================================================

### FUNC 0015d150 (16 bytes) name=dims

void __thiscall cv::_InputArray::dims(_InputArray *this,int param_1)

{
  (*(code *)PTR_dims_004ff6d8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015d160 (16 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 0015d170 (16 bytes) name=btowc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t btowc(int __c)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_btowc_004ff6e8)(__c);
  return wVar1;
}


==================================================================

### FUNC 0015d180 (16 bytes) name=cvFindGraphEdgeByPtr

void cvFindGraphEdgeByPtr(void)

{
  (*(code *)PTR_cvFindGraphEdgeByPtr_004ff6f0)();
  return;
}


==================================================================

### FUNC 0015d190 (16 bytes) name=getMat

void cv::UMat::getMat(int param_1)

{
  (*(code *)PTR_getMat_004ff6f8)(param_1);
  return;
}


==================================================================

### FUNC 0015d1a0 (16 bytes) name=patchNaNs

void cv::patchNaNs(_InputOutputArray *param_1,double param_2)

{
  (*(code *)PTR_patchNaNs_004ff700)();
  return;
}


==================================================================

### FUNC 0015d1b0 (16 bytes) name=getMat_

void cv::_InputArray::getMat_(int param_1)

{
  (*(code *)PTR_getMat__004ff708)(param_1);
  return;
}


==================================================================

### FUNC 0015d1c0 (16 bytes) name=operator=

void __thiscall cv::ocl::ProgramSource::operator=(ProgramSource *this,ProgramSource *param_1)

{
  (*(code *)PTR_operator__004ff710)();
  return;
}


==================================================================

### FUNC 0015d1d0 (16 bytes) name=removeNode

void __thiscall cv::SparseMat::removeNode(SparseMat *this,ulong param_1,ulong param_2,ulong param_3)

{
  (*(code *)PTR_removeNode_004ff718)();
  return;
}


==================================================================

### FUNC 0015d1e0 (16 bytes) name=cvGetFileNode

void cvGetFileNode(void)

{
  (*(code *)PTR_cvGetFileNode_004ff720)();
  return;
}


==================================================================

### FUNC 0015d1f0 (16 bytes) name=~MatExpr

void __thiscall cv::MatExpr::~MatExpr(MatExpr *this)

{
  (*(code *)PTR__MatExpr_004ff728)();
  return;
}


==================================================================

### FUNC 0015d200 (16 bytes) name=getwc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t getwc(__FILE *__stream)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_getwc_004ff730)((int)__stream);
  return wVar1;
}


==================================================================

### FUNC 0015d210 (16 bytes) name=LinkCamera

void CNetComm::LinkCamera
               (uint param_1,char *param_2,char *param_3,uint param_4,uint param_5,char *param_6,
               char *param_7)

{
  (*(code *)PTR_LinkCamera_004ff738)(param_1,param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### FUNC 0015d220 (16 bytes) name=GetTemperatureProbe

void CMagDevice::GetTemperatureProbe(uint param_1,uint param_2,uint param_3)

{
  (*(code *)PTR_GetTemperatureProbe_004ff740)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d230 (16 bytes) name=pthread_mutex_destroy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_destroy(pthread_mutex_t *__mutex)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutex_destroy_004ff748)((int)__mutex);
  return iVar1;
}


==================================================================

### FUNC 0015d240 (16 bytes) name=_Unwind_GetLanguageSpecificData

void _Unwind_GetLanguageSpecificData(void)

{
  (*(code *)PTR__Unwind_GetLanguageSpecificData_004ff750)();
  return;
}


==================================================================

### FUNC 0015d250 (16 bytes) name=ResizeBMP_2X

void __thiscall CFunctions::ResizeBMP_2X(CFunctions *this)

{
  (*(code *)PTR_ResizeBMP_2X_004ff758)();
  return;
}


==================================================================

### FUNC 0015d260 (16 bytes) name=resetColorArray

void cv::ogl::Arrays::resetColorArray(void)

{
  (*(code *)PTR_resetColorArray_004ff760)();
  return;
}


==================================================================

### FUNC 0015d270 (16 bytes) name=CvMatND

void __thiscall CvMatND::CvMatND(CvMatND *this,Mat *param_1)

{
  (*(code *)PTR_CvMatND_004ff768)();
  return;
}


==================================================================

### FUNC 0015d280 (16 bytes) name=getUMat

void cv::Mat::getUMat(void)

{
  (*(code *)PTR_getUMat_004ff770)();
  return;
}


==================================================================

### FUNC 0015d290 (16 bytes) name=GetEXLevel

void __thiscall CMagDevice::GetEXLevel(CMagDevice *this)

{
  (*(code *)PTR_GetEXLevel_004ff778)();
  return;
}


==================================================================

### FUNC 0015d2a0 (16 bytes) name=swap

void cv::swap(Mat *param_1,Mat *param_2)

{
  (*(code *)PTR_swap_004ff780)();
  return;
}


==================================================================

### FUNC 0015d2b0 (16 bytes) name=MAG_SetDetectParameter

void MAG_SetDetectParameter(void)

{
  (*(code *)PTR_MAG_SetDetectParameter_004ff788)();
  return;
}


==================================================================

### FUNC 0015d2c0 (16 bytes) name=erode

void cv::erode(void)

{
  (*(code *)PTR_erode_004ff790)();
  return;
}


==================================================================

### FUNC 0015d2d0 (16 bytes) name=close

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int close(int __fd)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_close_004ff798)(__fd);
  return iVar1;
}


==================================================================

### FUNC 0015d2e0 (16 bytes) name=SetAutoEnlargePara

void CMagDevice::SetAutoEnlargePara(uint param_1,int param_2,int param_3)

{
  (*(code *)PTR_SetAutoEnlargePara_004ff7a0)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d2f0 (16 bytes) name=split

void cv::split(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_split_004ff7a8)();
  return;
}


==================================================================

### FUNC 0015d300 (16 bytes) name=MAG_DelChannel

void MAG_DelChannel(void)

{
  (*(code *)PTR_MAG_DelChannel_004ff7b0)();
  return;
}


==================================================================

### FUNC 0015d310 (16 bytes) name=operator.new[]

void * operator_new__(ulong param_1)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_operator_new___004ff7b8)();
  return pvVar1;
}


==================================================================

### FUNC 0015d320 (16 bytes) name=DoSomething

void __thiscall CFunctions::DoSomething(CFunctions *this,int param_1,uint param_2)

{
  (*(code *)PTR_DoSomething_004ff7c0)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d330 (16 bytes) name=CalTaoAtm

void __thiscall CFunctions::CalTaoAtm(CFunctions *this,struct_FixPara *param_1)

{
  (*(code *)PTR_CalTaoAtm_004ff7c8)();
  return;
}


==================================================================

### FUNC 0015d340 (16 bytes) name=cvDrawContours

void cvDrawContours(void)

{
  (*(code *)PTR_cvDrawContours_004ff7d0)();
  return;
}


==================================================================

### FUNC 0015d350 (16 bytes) name=MAG_NewChannel

void MAG_NewChannel(void)

{
  (*(code *)PTR_MAG_NewChannel_004ff7d8)();
  return;
}


==================================================================

### FUNC 0015d360 (16 bytes) name=setJpg

void __thiscall MDTHelper::setJpg(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setJpg_004ff7e0)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d370 (16 bytes) name=PlatformInfo

void __thiscall cv::ocl::PlatformInfo::PlatformInfo(PlatformInfo *this,void *param_1)

{
  (*(code *)PTR_PlatformInfo_004ff7e8)();
  return;
}


==================================================================

### FUNC 0015d380 (16 bytes) name=create

void __thiscall cv::Mat::create(Mat *this,int param_1,int *param_2,int param_3)

{
  (*(code *)PTR_create_004ff7f0)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d390 (16 bytes) name=vconcat

void cv::vconcat(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  (*(code *)PTR_vconcat_004ff7f8)();
  return;
}


==================================================================

### FUNC 0015d3a0 (16 bytes) name=getProg

void cv::ocl::Context::getProg(ProgramSource *param_1,String *param_2,String *param_3)

{
  (*(code *)PTR_getProg_004ff800)();
  return;
}


==================================================================

### FUNC 0015d3b0 (16 bytes) name=morphologyEx

void cv::morphologyEx(void)

{
  (*(code *)PTR_morphologyEx_004ff808)();
  return;
}


==================================================================

### FUNC 0015d3c0 (16 bytes) name=pthread_mutexattr_settype

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_settype(pthread_mutexattr_t *__attr,int __kind)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutexattr_settype_004ff810)((int)__attr,__kind);
  return iVar1;
}


==================================================================

### FUNC 0015d3d0 (16 bytes) name=wmemmove

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemmove(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
  wchar_t *pwVar1;
  
  pwVar1 = (wchar_t *)(*(code *)PTR_wmemmove_004ff818)();
  return pwVar1;
}


==================================================================

### FUNC 0015d3e0 (16 bytes) name=SetSubsectionEnlargePara

void CMagDevice::SetSubsectionEnlargePara(int param_1,int param_2,uchar param_3,uchar param_4)

{
  (*(code *)PTR_SetSubsectionEnlargePara_004ff820)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015d3f0 (16 bytes) name=unlock

void __thiscall cv::Mutex::unlock(Mutex *this)

{
  (*(code *)PTR_unlock_004ff828)();
  return;
}


==================================================================

### FUNC 0015d400 (16 bytes) name=set

void __thiscall cv::ocl::Device::set(Device *this,void *param_1)

{
  (*(code *)PTR_set_004ff830)();
  return;
}


==================================================================

### FUNC 0015d410 (16 bytes) name=subtract

void cv::subtract(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                 _InputArray *param_4,int param_5)

{
  (*(code *)PTR_subtract_004ff838)();
  return;
}


==================================================================

### FUNC 0015d420 (16 bytes) name=reshape

void cv::Mat::reshape(int param_1,int param_2)

{
  (*(code *)PTR_reshape_004ff840)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d430 (16 bytes) name=getenv

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * getenv(char *__name)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_getenv_004ff848)();
  return pcVar1;
}


==================================================================

### FUNC 0015d440 (16 bytes) name=GetFrameStatisticalData

void __thiscall CMagDevice::GetFrameStatisticalData(CMagDevice *this)

{
  (*(code *)PTR_GetFrameStatisticalData_004ff850)();
  return;
}


==================================================================

### FUNC 0015d450 (16 bytes) name=polarToCart

void cv::polarToCart(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _OutputArray *param_4,bool param_5)

{
  (*(code *)PTR_polarToCart_004ff858)();
  return;
}


==================================================================

### FUNC 0015d460 (16 bytes) name=getVisible

void __thiscall MDTHelper::getVisible(MDTHelper *this,uchar **param_1)

{
  (*(code *)PTR_getVisible_004ff860)();
  return;
}


==================================================================

### FUNC 0015d470 (16 bytes) name=TLSDataContainer

void __thiscall cv::TLSDataContainer::TLSDataContainer(TLSDataContainer *this)

{
  (*(code *)PTR_TLSDataContainer_004ff868)();
  return;
}


==================================================================

### FUNC 0015d480 (16 bytes) name=strftime

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strftime(char *__s,size_t __maxsize,char *__format,tm *__tp)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_strftime_004ff870)();
  return sVar1;
}


==================================================================

### FUNC 0015d490 (16 bytes) name=gzgets

void gzgets(void)

{
  (*(code *)PTR_gzgets_004ff878)();
  return;
}


==================================================================

### FUNC 0015d4a0 (16 bytes) name=exp

void cv::exp(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_exp_004ff880)();
  return;
}


==================================================================

### FUNC 0015d4b0 (16 bytes) name=pthread_join

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_join(pthread_t __th,void **__thread_return)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_join_004ff888)((int)__th);
  return iVar1;
}


==================================================================

### FUNC 0015d4c0 (16 bytes) name=usbi_parse_descriptor

void usbi_parse_descriptor(void)

{
  (*(code *)PTR_usbi_parse_descriptor_004ff890)();
  return;
}


==================================================================

### FUNC 0015d4d0 (16 bytes) name=set

void __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,KernelArg *param_2)

{
  (*(code *)PTR_set_004ff898)(this,param_1);
  return;
}


==================================================================

### FUNC 0015d4e0 (16 bytes) name=create

void __thiscall cv::ocl::Queue::create(Queue *this,Context *param_1,Device *param_2)

{
  (*(code *)PTR_create_004ff8a0)();
  return;
}


==================================================================

### FUNC 0015d4f0 (16 bytes) name=Mat

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Range *param_2,Range *param_3)

{
  (*(code *)PTR_Mat_004ff8a8)();
  return;
}


==================================================================

### FUNC 0015d500 (16 bytes) name=cvPow

void cvPow(void)

{
  (*(code *)PTR_cvPow_004ff8b0)();
  return;
}


==================================================================

### FUNC 0015d510 (16 bytes) name=Write

void __thiscall MStream::Write(MStream *this,__sFILE *param_1)

{
  (*(code *)PTR_Write_004ff8b8)();
  return;
}


==================================================================

### FUNC 0015d520 (16 bytes) name=min

void cv::min(Mat *param_1,Mat *param_2,Mat *param_3)

{
  (*(code *)PTR_min_004ff8c0)();
  return;
}


==================================================================

### FUNC 0015d530 (16 bytes) name=__cxa_end_catch

void __cxa_end_catch(void)

{
  (*(code *)PTR___cxa_end_catch_004ff8c8)();
  return;
}


==================================================================

### FUNC 0015d540 (16 bytes) name=MAG_FixTemperature2

void MAG_FixTemperature2(void)

{
  (*(code *)PTR_MAG_FixTemperature2_004ff8d0)();
  return;
}


==================================================================

### FUNC 0015d550 (16 bytes) name=multiply

void cv::multiply(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,double param_4,
                 int param_5)

{
  (*(code *)PTR_multiply_004ff8d8)();
  return;
}


==================================================================

### FUNC 0015d560 (16 bytes) name=writeScalar

void cv::writeScalar(FileStorage *param_1,float param_2)

{
  (*(code *)PTR_writeScalar_004ff8e0)();
  return;
}


==================================================================

### FUNC 0015d570 (16 bytes) name=operator+=

void __thiscall cv::FileNodeIterator::operator+=(FileNodeIterator *this,int param_1)

{
  (*(code *)PTR_operator___004ff8e8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015d580 (16 bytes) name=GetTickCount

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void GetTickCount(void)

{
  (*(code *)PTR_GetTickCount_004ff8f0)();
  return;
}


==================================================================

### FUNC 0015d590 (16 bytes) name=newOutputObjects

void newOutputObjects(_JNIEnv *param_1,int param_2,int param_3,int param_4,int param_5,int param_6,
                     _jobject *param_7)

{
  (*(code *)PTR_newOutputObjects_004ff8f8)(param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 0015d5a0 (16 bytes) name=usbi_handle_transfer_cancellation

void usbi_handle_transfer_cancellation(void)

{
  (*(code *)PTR_usbi_handle_transfer_cancellation_004ff900)();
  return;
}


==================================================================

### FUNC 0015d5b0 (16 bytes) name=release

void __thiscall cv::_OutputArray::release(_OutputArray *this)

{
  (*(code *)PTR_release_004ff908)();
  return;
}


==================================================================

### FUNC 0015d5c0 (16 bytes) name=fcntl

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fcntl(int __fd,int __cmd,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fcntl_004ff910)(__fd,__cmd);
  return iVar1;
}


==================================================================

### FUNC 0015d5d0 (16 bytes) name=cvSeqPop

void cvSeqPop(void)

{
  (*(code *)PTR_cvSeqPop_004ff918)();
  return;
}


==================================================================

### FUNC 0015d5e0 (16 bytes) name=Init

void CNetComm::Init(void *param_1)

{
  (*(code *)PTR_Init_004ff920)();
  return;
}


==================================================================

### FUNC 0015d5f0 (16 bytes) name=mulTransposed

void cv::mulTransposed(_InputArray *param_1,_OutputArray *param_2,bool param_3,_InputArray *param_4,
                      double param_5,int param_6)

{
  (*(code *)PTR_mulTransposed_004ff928)(param_1,param_2,param_3,param_4,param_6);
  return;
}


==================================================================

### FUNC 0015d600 (16 bytes) name=__cxa_allocate_exception

void __cxa_allocate_exception(void)

{
  (*(code *)PTR___cxa_allocate_exception_004ff930)();
  return;
}


==================================================================

### FUNC 0015d610 (16 bytes) name=MAG_SetDetectMaskPoints

void MAG_SetDetectMaskPoints(void)

{
  (*(code *)PTR_MAG_SetDetectMaskPoints_004ff938)();
  return;
}


==================================================================

### FUNC 0015d620 (16 bytes) name=Mat

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Range *param_2)

{
  (*(code *)PTR_Mat_004ff940)();
  return;
}


==================================================================

### FUNC 0015d630 (16 bytes) name=~Exception

void __thiscall cv::Exception::~Exception(Exception *this)

{
  (*(code *)PTR__Exception_004ff948)();
  return;
}


==================================================================

### FUNC 0015d640 (16 bytes) name=exception_ptr

void __thiscall
std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this,void *param_1)

{
  (*(code *)PTR_exception_ptr_004ff950)();
  return;
}


==================================================================

### FUNC 0015d650 (16 bytes) name=operator++

void __thiscall cv::SparseMatConstIterator::operator++(SparseMatConstIterator *this)

{
  (*(code *)PTR_operator___004ff958)();
  return;
}


==================================================================

### FUNC 0015d660 (16 bytes) name=pthread_mutex_trylock

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_trylock(pthread_mutex_t *__mutex)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutex_trylock_004ff960)((int)__mutex);
  return iVar1;
}


==================================================================

### FUNC 0015d670 (16 bytes) name=wcslen

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcslen(wchar_t *__s)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_wcslen_004ff968)();
  return sVar1;
}


==================================================================

### FUNC 0015d680 (16 bytes) name=setText

void __thiscall MDTHelper::setText(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setText_004ff970)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d690 (16 bytes) name=push_back

void __thiscall
std::vector<std::string,std::allocator<std::string>>::push_back
          (vector<std::string,std::allocator<std::string>> *this,string *param_1)

{
  (*(code *)PTR_push_back_004ff978)();
  return;
}


==================================================================

### FUNC 0015d6a0 (16 bytes) name=size

void __thiscall cv::FileNode::size(FileNode *this)

{
  (*(code *)PTR_size_004ff980)();
  return;
}


==================================================================

### FUNC 0015d6b0 (16 bytes) name=adaptiveThreshold

void cv::adaptiveThreshold
               (_InputArray *param_1,_OutputArray *param_2,double param_3,int param_4,int param_5,
               int param_6,double param_7)

{
  (*(code *)PTR_adaptiveThreshold_004ff988)(param_1,param_2,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 0015d6c0 (16 bytes) name=seek

void __thiscall cv::MatConstIterator::seek(MatConstIterator *this,long param_1,bool param_2)

{
  (*(code *)PTR_seek_004ff990)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d6d0 (16 bytes) name=integral

void cv::integral(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,int param_4,
                 int param_5)

{
  (*(code *)PTR_integral_004ff998)();
  return;
}


==================================================================

### FUNC 0015d6e0 (16 bytes) name=get_new_handler

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::get_new_handler(void)

{
  (*(code *)PTR_get_new_handler_004ff9a0)();
  return;
}


==================================================================

### FUNC 0015d6f0 (16 bytes) name=__android_log_write

void __android_log_write(void)

{
  (*(code *)PTR___android_log_write_004ff9a8)();
  return;
}


==================================================================

### FUNC 0015d700 (16 bytes) name=CAccumulator

void __thiscall CAccumulator::CAccumulator(CAccumulator *this)

{
  (*(code *)PTR_CAccumulator_004ff9b0)();
  return;
}


==================================================================

### FUNC 0015d710 (16 bytes) name=GetChannelIndex

void __thiscall CMagDevice::GetChannelIndex(CMagDevice *this)

{
  (*(code *)PTR_GetChannelIndex_004ff9b8)();
  return;
}


==================================================================

### FUNC 0015d720 (16 bytes) name=Device

void __thiscall cv::ocl::Device::Device(Device *this)

{
  (*(code *)PTR_Device_004ff9c0)();
  return;
}


==================================================================

### FUNC 0015d730 (16 bytes) name=waitForMsecs

void __thiscall Condition::waitForMsecs(Condition *this,int param_1)

{
  (*(code *)PTR_waitForMsecs_004ff9c8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015d740 (16 bytes) name=operator==

void std::__exception_ptr::operator==(exception_ptr *param_1,exception_ptr *param_2)

{
  (*(code *)PTR_operator___004ff9d0)();
  return;
}


==================================================================

### FUNC 0015d750 (16 bytes) name=usbi_clear_event

void usbi_clear_event(void)

{
  (*(code *)PTR_usbi_clear_event_004ff9d8)();
  return;
}


==================================================================

### FUNC 0015d760 (16 bytes) name=_M_emplace_back_aux<MStream_const&>

void __thiscall
std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
          (vector<MStream,std::allocator<MStream>> *this,MStream *param_1)

{
  (*(code *)PTR__M_emplace_back_aux<MStream_const&>_004ff9e0)();
  return;
}


==================================================================

### FUNC 0015d770 (16 bytes) name=cvInitSparseMatIterator

void cvInitSparseMatIterator(void)

{
  (*(code *)PTR_cvInitSparseMatIterator_004ff9e8)();
  return;
}


==================================================================

### FUNC 0015d780 (16 bytes) name=cvCreateMemStorage

void cvCreateMemStorage(void)

{
  (*(code *)PTR_cvCreateMemStorage_004ff9f0)();
  return;
}


==================================================================

### FUNC 0015d790 (16 bytes) name=~bad_alloc

void __thiscall std::bad_alloc::~bad_alloc(bad_alloc *this)

{
  (*(code *)PTR__bad_alloc_004ff9f8)();
  return;
}


==================================================================

### FUNC 0015d7a0 (16 bytes) name=PushFrame

void __thiscall CAccumulator::PushFrame(CAccumulator *this,ushort *param_1)

{
  (*(code *)PTR_PushFrame_004ffa00)();
  return;
}


==================================================================

### FUNC 0015d7b0 (16 bytes) name=cvSetAdd

void cvSetAdd(void)

{
  (*(code *)PTR_cvSetAdd_004ffa08)();
  return;
}


==================================================================

### FUNC 0015d7c0 (16 bytes) name=cvGetElemType

void cvGetElemType(void)

{
  (*(code *)PTR_cvGetElemType_004ffa10)();
  return;
}


==================================================================

### FUNC 0015d7d0 (16 bytes) name=CVideoFunctions

void __thiscall CVideoFunctions::CVideoFunctions(CVideoFunctions *this)

{
  (*(code *)PTR_CVideoFunctions_004ffa18)();
  return;
}


==================================================================

### FUNC 0015d7e0 (16 bytes) name=Program

void __thiscall cv::ocl::Program::Program(Program *this)

{
  (*(code *)PTR_Program_004ffa20)();
  return;
}


==================================================================

### FUNC 0015d7f0 (16 bytes) name=libusb_wrap_fd

void libusb_wrap_fd(void)

{
  (*(code *)PTR_libusb_wrap_fd_004ffa28)();
  return;
}


==================================================================

### FUNC 0015d800 (16 bytes) name=backProject

void cv::PCA::backProject(_InputArray *param_1)

{
  (*(code *)PTR_backProject_004ffa30)();
  return;
}


==================================================================

### FUNC 0015d810 (16 bytes) name=Program

void __thiscall
cv::ocl::Program::Program(Program *this,ProgramSource *param_1,String *param_2,String *param_3)

{
  (*(code *)PTR_Program_004ffa38)();
  return;
}


==================================================================

### FUNC 0015d820 (16 bytes) name=toJString

void toJString(_JNIEnv *param_1,char *param_2)

{
  (*(code *)PTR_toJString_004ffa40)();
  return;
}


==================================================================

### FUNC 0015d830 (16 bytes) name=open

void __thiscall cv::FileStorage::open(FileStorage *this,String *param_1,int param_2,String *param_3)

{
  (*(code *)PTR_open_004ffa48)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d840 (16 bytes) name=cvMemStorageAllocString

void cvMemStorageAllocString(void)

{
  (*(code *)PTR_cvMemStorageAllocString_004ffa50)();
  return;
}


==================================================================

### FUNC 0015d850 (16 bytes) name=preferredVectorWidthFloat

void __thiscall cv::ocl::Device::preferredVectorWidthFloat(Device *this)

{
  (*(code *)PTR_preferredVectorWidthFloat_004ffa58)();
  return;
}


==================================================================

### FUNC 0015d860 (16 bytes) name=cvRawDataToScalar

void cvRawDataToScalar(void)

{
  (*(code *)PTR_cvRawDataToScalar_004ffa60)();
  return;
}


==================================================================

### FUNC 0015d870 (16 bytes) name=cvSeqSlice

void cvSeqSlice(void)

{
  (*(code *)PTR_cvSeqSlice_004ffa68)();
  return;
}


==================================================================

### FUNC 0015d880 (16 bytes) name=InterpolateShort

void __thiscall
CFunctions::InterpolateShort
          (CFunctions *this,short *param_1,short *param_2,short *param_3,uint param_4)

{
  (*(code *)PTR_InterpolateShort_004ffa70)();
  return;
}


==================================================================

### FUNC 0015d890 (16 bytes) name=clock_gettime

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int clock_gettime(clockid_t __clock_id,timespec *__tp)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_clock_gettime_004ffa78)(__clock_id);
  return iVar1;
}


==================================================================

### FUNC 0015d8a0 (16 bytes) name=checkRange

void cv::checkRange(_InputArray *param_1,bool param_2,Point_ *param_3,double param_4,double param_5)

{
  (*(code *)PTR_checkRange_004ffa80)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d8b0 (16 bytes) name=~MDTHelper

void __thiscall MDTHelper::~MDTHelper(MDTHelper *this)

{
  (*(code *)PTR__MDTHelper_004ffa88)();
  return;
}


==================================================================

### FUNC 0015d8c0 (16 bytes) name=cvSeqPopFront

void cvSeqPopFront(void)

{
  (*(code *)PTR_cvSeqPopFront_004ffa90)();
  return;
}


==================================================================

### FUNC 0015d8d0 (16 bytes) name=readlink

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t readlink(char *__path,char *__buf,size_t __len)

{
  ssize_t sVar1;
  
  sVar1 = (*(code *)PTR_readlink_004ffa98)();
  return sVar1;
}


==================================================================

### FUNC 0015d8e0 (16 bytes) name=GetLineTemperatureInfo

void CMagDevice::GetLineTemperatureInfo
               (int *param_1,uint param_2,int *param_3,uint param_4,uint param_5,uint param_6,
               uint param_7)

{
  (*(code *)PTR_GetLineTemperatureInfo_004ffaa0)
            (param_1,param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 0015d8f0 (16 bytes) name=sscanf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int sscanf(char *__s,char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_sscanf_004ffaa8)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 0015d900 (16 bytes) name=calcCovarMatrix

void cv::calcCovarMatrix(Mat *param_1,int param_2,Mat *param_3,Mat *param_4,int param_5,int param_6)

{
  (*(code *)PTR_calcCovarMatrix_004ffab0)(param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 0015d910 (16 bytes) name=free

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void free(void *__ptr)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 0015d920 (16 bytes) name=points

void __thiscall cv::RotatedRect::points(RotatedRect *this,Point_ *param_1)

{
  (*(code *)PTR_points_004ffac0)();
  return;
}


==================================================================

### FUNC 0015d930 (16 bytes) name=sqrt

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double sqrt(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_sqrt_004ffac8)();
  return dVar1;
}


==================================================================

### FUNC 0015d940 (16 bytes) name=cross

void cv::Mat::cross(_InputArray *param_1)

{
  (*(code *)PTR_cross_004ffad0)();
  return;
}


==================================================================

### FUNC 0015d950 (16 bytes) name=usbi_hotplug_deregister_all

void usbi_hotplug_deregister_all(void)

{
  (*(code *)PTR_usbi_hotplug_deregister_all_004ffad8)();
  return;
}


==================================================================

### FUNC 0015d960 (16 bytes) name=fread

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t fread(void *__ptr,size_t __size,size_t __n,FILE *__stream)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_fread_004ffae0)();
  return sVar1;
}


==================================================================

### FUNC 0015d970 (16 bytes) name=completeSymm

void cv::completeSymm(_InputOutputArray *param_1,bool param_2)

{
  (*(code *)PTR_completeSymm_004ffae8)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015d980 (16 bytes) name=resizeHashTab

void __thiscall cv::SparseMat::resizeHashTab(SparseMat *this,ulong param_1)

{
  (*(code *)PTR_resizeHashTab_004ffaf0)();
  return;
}


==================================================================

### FUNC 0015d990 (16 bytes) name=~CSmoother

void __thiscall CSmoother::~CSmoother(CSmoother *this)

{
  (*(code *)PTR__CSmoother_004ffaf8)();
  return;
}


==================================================================

### FUNC 0015d9a0 (16 bytes) name=strchr

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strchr(char *__s,int __c)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strchr_004ffb00)(__s,__c);
  return pcVar1;
}


==================================================================

### FUNC 0015d9b0 (16 bytes) name=cvSliceLength

void cvSliceLength(void)

{
  (*(code *)PTR_cvSliceLength_004ffb08)();
  return;
}


==================================================================

### FUNC 0015d9c0 (16 bytes) name=kind

void __thiscall cv::_InputArray::kind(_InputArray *this)

{
  (*(code *)PTR_kind_004ffb10)();
  return;
}


==================================================================

### FUNC 0015d9d0 (16 bytes) name=setLabel

void __thiscall MDTHelper::setLabel(MDTHelper *this,ROI *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setLabel_004ffb18)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015d9e0 (16 bytes) name=usbi_add_pollfd

void usbi_add_pollfd(void)

{
  (*(code *)PTR_usbi_add_pollfd_004ffb20)();
  return;
}


==================================================================

### FUNC 0015d9f0 (16 bytes) name=operator=

void __thiscall cv::Mat::operator=(Mat *this,Mat *param_1)

{
  (*(code *)PTR_operator__004ffb28)();
  return;
}


==================================================================

### FUNC 0015da00 (16 bytes) name=StopReceiveImg_UnProtected

void __thiscall CNetComm::StopReceiveImg_UnProtected(CNetComm *this,int param_1)

{
  (*(code *)PTR_StopReceiveImg_UnProtected_004ffb30)(this,param_1);
  return;
}


==================================================================

### FUNC 0015da10 (16 bytes) name=strtold

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double strtold(char *__nptr,char **__endptr)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_strtold_004ffb38)();
  return dVar1;
}


==================================================================

### FUNC 0015da20 (16 bytes) name=cvErrorStr

void cvErrorStr(void)

{
  (*(code *)PTR_cvErrorStr_004ffb40)();
  return;
}


==================================================================

### FUNC 0015da30 (16 bytes) name=calloc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * calloc(size_t __nmemb,size_t __size)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_calloc_004ffb48)();
  return pvVar1;
}


==================================================================

### FUNC 0015da40 (16 bytes) name=pthread_key_delete

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_key_delete(pthread_key_t __key)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_key_delete_004ffb50)(__key);
  return iVar1;
}


==================================================================

### FUNC 0015da50 (16 bytes) name=mkdir

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int mkdir(char *__path,__mode_t __mode)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_mkdir_004ffb58)((int)__path,__mode);
  return iVar1;
}


==================================================================

### FUNC 0015da60 (16 bytes) name=getDefault

void cv::ocl::Platform::getDefault(void)

{
  (*(code *)PTR_getDefault_004ffb60)();
  return;
}


==================================================================

### FUNC 0015da70 (16 bytes) name=~MatOp

void __thiscall cv::MatOp::~MatOp(MatOp *this)

{
  (*(code *)PTR__MatOp_004ffb68)();
  return;
}


==================================================================

### FUNC 0015da80 (16 bytes) name=strcmp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strcmp(char *__s1,char *__s2)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_strcmp_004ffb70)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 0015da90 (16 bytes) name=CMagDevice

void __thiscall CMagDevice::CMagDevice(CMagDevice *this)

{
  (*(code *)PTR_CMagDevice_004ffb78)();
  return;
}


==================================================================

### FUNC 0015daa0 (16 bytes) name=UMat

void __thiscall cv::UMat::UMat(UMat *this,UMat *param_1,Range *param_2)

{
  (*(code *)PTR_UMat_004ffb80)();
  return;
}


==================================================================

### FUNC 0015dab0 (16 bytes) name=CorrectTemperature

void CFunctions::CorrectTemperature(int param_1,float param_2,uint param_3)

{
  (*(code *)PTR_CorrectTemperature_004ffb88)(param_1,param_3);
  return;
}


==================================================================

### FUNC 0015dac0 (16 bytes) name=AndroidBitmap_lockPixels

void AndroidBitmap_lockPixels(void)

{
  (*(code *)PTR_AndroidBitmap_lockPixels_004ffb90)();
  return;
}


==================================================================

### FUNC 0015dad0 (16 bytes) name=cvFindNextContour

void cvFindNextContour(void)

{
  (*(code *)PTR_cvFindNextContour_004ffb98)();
  return;
}


==================================================================

### FUNC 0015dae0 (16 bytes) name=malloc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * malloc(size_t __size)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_malloc_004ffba0)();
  return pvVar1;
}


==================================================================

### FUNC 0015daf0 (16 bytes) name=copyFrom

void cv::ogl::Buffer::copyFrom(void)

{
  (*(code *)PTR_copyFrom_004ffba8)();
  return;
}


==================================================================

### FUNC 0015db00 (16 bytes) name=cvWriteRawData

void cvWriteRawData(void)

{
  (*(code *)PTR_cvWriteRawData_004ffbb0)();
  return;
}


==================================================================

### FUNC 0015db10 (16 bytes) name=~ParallelLoopBody

void __thiscall cv::ParallelLoopBody::~ParallelLoopBody(ParallelLoopBody *this)

{
  (*(code *)PTR__ParallelLoopBody_004ffbb8)();
  return;
}


==================================================================

### FUNC 0015db20 (16 bytes) name=read

void cv::read(FileNode *param_1,float *param_2,float param_3)

{
  (*(code *)PTR_read_004ffbc0)();
  return;
}


==================================================================

### FUNC 0015db30 (16 bytes) name=fastMalloc

void cv::fastMalloc(ulong param_1)

{
  (*(code *)PTR_fastMalloc_004ffbc8)();
  return;
}


==================================================================

### FUNC 0015db40 (16 bytes) name=read

void cv::read(FileNode *param_1,String *param_2,String *param_3)

{
  (*(code *)PTR_read_004ffbd0)();
  return;
}


==================================================================

### FUNC 0015db50 (16 bytes) name=cvStartWriteStruct

void cvStartWriteStruct(void)

{
  (*(code *)PTR_cvStartWriteStruct_004ffbd8)();
  return;
}


==================================================================

### FUNC 0015db60 (16 bytes) name=strxfrm

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strxfrm(char *__dest,char *__src,size_t __n)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_strxfrm_004ffbe0)();
  return sVar1;
}


==================================================================

### FUNC 0015db70 (16 bytes) name=contourArea

void cv::contourArea(_InputArray *param_1,bool param_2)

{
  (*(code *)PTR_contourArea_004ffbe8)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015db80 (16 bytes) name=MatExpr

void __thiscall cv::MatExpr::MatExpr(MatExpr *this,Mat *param_1)

{
  (*(code *)PTR_MatExpr_004ffbf0)();
  return;
}


==================================================================

### FUNC 0015db90 (16 bytes) name=setTo

void __thiscall
cv::_OutputArray::setTo(_OutputArray *this,_InputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_setTo_004ffbf8)();
  return;
}


==================================================================

### FUNC 0015dba0 (16 bytes) name=cvFindType

void cvFindType(void)

{
  (*(code *)PTR_cvFindType_004ffc00)();
  return;
}


==================================================================

### FUNC 0015dbb0 (16 bytes) name=wmemset

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemset(wchar_t *__s,wchar_t __c,size_t __n)

{
  wchar_t *pwVar1;
  
  pwVar1 = (wchar_t *)(*(code *)PTR_wmemset_004ffc08)(__s,__c);
  return pwVar1;
}


==================================================================

### FUNC 0015dbc0 (16 bytes) name=nanosleep

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int nanosleep(timespec *__requested_time,timespec *__remaining)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_nanosleep_004ffc10)((int)__requested_time);
  return iVar1;
}


==================================================================

### FUNC 0015dbd0 (16 bytes) name=Queue

void __thiscall cv::ocl::Queue::Queue(Queue *this)

{
  (*(code *)PTR_Queue_004ffc18)();
  return;
}


==================================================================

### FUNC 0015dbe0 (16 bytes) name=FindStrayRadius

void __thiscall
CFunctions::FindStrayRadius
          (CFunctions *this,uint param_1,float param_2,float *param_3,uint *param_4)

{
  (*(code *)PTR_FindStrayRadius_004ffc20)(this,param_1);
  return;
}


==================================================================

### FUNC 0015dbf0 (16 bytes) name=cvMakeSeqHeaderForArray

void cvMakeSeqHeaderForArray(void)

{
  (*(code *)PTR_cvMakeSeqHeaderForArray_004ffc28)();
  return;
}


==================================================================

### FUNC 0015dc00 (16 bytes) name=_Unwind_GetTextRelBase

void _Unwind_GetTextRelBase(void)

{
  (*(code *)PTR__Unwind_GetTextRelBase_004ffc30)();
  return;
}


==================================================================

### FUNC 0015dc10 (16 bytes) name=MAG_IsChannelAvailable

void MAG_IsChannelAvailable(void)

{
  (*(code *)PTR_MAG_IsChannelAvailable_004ffc38)();
  return;
}


==================================================================

### FUNC 0015dc20 (16 bytes) name=IsothermalPalette

void __thiscall CFunctions::IsothermalPalette(CFunctions *this)

{
  (*(code *)PTR_IsothermalPalette_004ffc40)();
  return;
}


==================================================================

### FUNC 0015dc30 (16 bytes) name=getGpuMatRef

void __thiscall cv::_OutputArray::getGpuMatRef(_OutputArray *this)

{
  (*(code *)PTR_getGpuMatRef_004ffc48)();
  return;
}


==================================================================

### FUNC 0015dc40 (16 bytes) name=_M_get

void __thiscall std::__exception_ptr::exception_ptr::_M_get(exception_ptr *this)

{
  (*(code *)PTR__M_get_004ffc50)();
  return;
}


==================================================================

### FUNC 0015dc50 (16 bytes) name=haveOpenCL

void cv::ocl::haveOpenCL(void)

{
  (*(code *)PTR_haveOpenCL_004ffc58)();
  return;
}


==================================================================

### FUNC 0015dc60 (16 bytes) name=pthread_cond_destroy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_destroy(pthread_cond_t *__cond)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_destroy_004ffc60)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 0015dc70 (16 bytes) name=isxdigit

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int isxdigit(int param_1)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_isxdigit_004ffc68)(param_1);
  return iVar1;
}


==================================================================

### FUNC 0015dc80 (16 bytes) name=convertTo

void __thiscall
cv::UMat::convertTo(UMat *this,_OutputArray *param_1,int param_2,double param_3,double param_4)

{
  (*(code *)PTR_convertTo_004ffc70)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015dc90 (16 bytes) name=operator()

void __thiscall
cv::PCA::operator()(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,int param_4)

{
  (*(code *)PTR_operator___004ffc78)();
  return;
}


==================================================================

### FUNC 0015dca0 (16 bytes) name=~PCA

void __thiscall cv::PCA::~PCA(PCA *this)

{
  (*(code *)PTR__PCA_004ffc80)();
  return;
}


==================================================================

### FUNC 0015dcb0 (16 bytes) name=phase

void cv::phase(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,bool param_4)

{
  (*(code *)PTR_phase_004ffc88)();
  return;
}


==================================================================

### FUNC 0015dcc0 (16 bytes) name=sprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int sprintf(char *__s,char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_sprintf_004ffc90)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 0015dcd0 (16 bytes) name=cvSeqSort

void cvSeqSort(void)

{
  (*(code *)PTR_cvSeqSort_004ffc98)();
  return;
}


==================================================================

### FUNC 0015dce0 (16 bytes) name=driverVersion

void cv::ocl::Device::driverVersion(void)

{
  (*(code *)PTR_driverVersion_004ffca0)();
  return;
}


==================================================================

### FUNC 0015dcf0 (16 bytes) name=libusb_release_interface

void libusb_release_interface(void)

{
  (*(code *)PTR_libusb_release_interface_004ffca8)();
  return;
}


==================================================================

### FUNC 0015dd00 (16 bytes) name=preferredVectorWidthShort

void __thiscall cv::ocl::Device::preferredVectorWidthShort(Device *this)

{
  (*(code *)PTR_preferredVectorWidthShort_004ffcb0)();
  return;
}


==================================================================

### FUNC 0015dd10 (16 bytes) name=format

void cv::format(char *param_1,...)

{
  (*(code *)PTR_format_004ffcb8)();
  return;
}


==================================================================

### FUNC 0015dd20 (16 bytes) name=usbi_io_exit

void usbi_io_exit(void)

{
  (*(code *)PTR_usbi_io_exit_004ffcc0)();
  return;
}


==================================================================

### FUNC 0015dd30 (16 bytes) name=resetMatMaskPoints

void __thiscall
ImageProc::resetMatMaskPoints(ImageProc *this,Mat *param_1,uint *param_2,int param_3)

{
  (*(code *)PTR_resetMatMaskPoints_004ffcc8)();
  return;
}


==================================================================

### FUNC 0015dd40 (16 bytes) name=hconcat

void cv::hconcat(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  (*(code *)PTR_hconcat_004ffcd0)();
  return;
}


==================================================================

### FUNC 0015dd50 (16 bytes) name=~bad_exception

void __thiscall std::bad_exception::~bad_exception(bad_exception *this)

{
  (*(code *)PTR__bad_exception_004ffcd8)();
  return;
}


==================================================================

### FUNC 0015dd60 (16 bytes) name=log10

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double log10(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_log10_004ffce0)();
  return dVar1;
}


==================================================================

### FUNC 0015dd70 (16 bytes) name=~Program

void __thiscall cv::ocl::Program::~Program(Program *this)

{
  (*(code *)PTR__Program_004ffce8)();
  return;
}


==================================================================

### FUNC 0015dd80 (16 bytes) name=FileNodeIterator

void __thiscall
cv::FileNodeIterator::FileNodeIterator
          (FileNodeIterator *this,CvFileStorage *param_1,CvFileNode *param_2,ulong param_3)

{
  (*(code *)PTR_FileNodeIterator_004ffcf0)();
  return;
}


==================================================================

### FUNC 0015dd90 (16 bytes) name=minMaxLoc

void cv::minMaxLoc(_InputArray *param_1,double *param_2,double *param_3,Point_ *param_4,
                  Point_ *param_5,_InputArray *param_6)

{
  (*(code *)PTR_minMaxLoc_004ffcf8)();
  return;
}


==================================================================

### FUNC 0015dda0 (16 bytes) name=checkOptimalVectorWidth

void cv::ocl::checkOptimalVectorWidth(void)

{
  (*(code *)PTR_checkOptimalVectorWidth_004ffd00)();
  return;
}


==================================================================

### FUNC 0015ddb0 (16 bytes) name=release

void cv::ogl::Buffer::release(void)

{
  (*(code *)PTR_release_004ffd08)();
  return;
}


==================================================================

### FUNC 0015ddc0 (16 bytes) name=cvGraphAddEdgeByPtr

void cvGraphAddEdgeByPtr(void)

{
  (*(code *)PTR_cvGraphAddEdgeByPtr_004ffd10)();
  return;
}


==================================================================

### FUNC 0015ddd0 (16 bytes) name=MStream

void __thiscall MStream::MStream(MStream *this,ulong param_1)

{
  (*(code *)PTR_MStream_004ffd18)();
  return;
}


==================================================================

### FUNC 0015dde0 (16 bytes) name=GaussianBlur

void cv::GaussianBlur(void)

{
  (*(code *)PTR_GaussianBlur_004ffd20)();
  return;
}


==================================================================

### FUNC 0015ddf0 (16 bytes) name=MAG_SaveDDT

void MAG_SaveDDT(void)

{
  (*(code *)PTR_MAG_SaveDDT_004ffd28)();
  return;
}


==================================================================

### FUNC 0015de00 (16 bytes) name=SaveMGT

void SaveMGT(uint param_1,char *param_2)

{
  (*(code *)PTR_SaveMGT_004ffd30)(param_1);
  return;
}


==================================================================

### FUNC 0015de10 (16 bytes) name=Mat

void __thiscall
cv::Mat::Mat(Mat *this,int param_1,int *param_2,int param_3,void *param_4,ulong *param_5)

{
  (*(code *)PTR_Mat_004ffd38)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015de20 (16 bytes) name=LoadDDT

void LoadDDT(uint param_1,OutputPara *param_2,void *param_3,uint param_4,
            _func_void_uint_uint_uint_void_ptr *param_5,void *param_6)

{
  (*(code *)PTR_LoadDDT_004ffd40)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015de30 (16 bytes) name=HistDeRedundance

void __thiscall CFunctions::HistDeRedundance(CFunctions *this)

{
  (*(code *)PTR_HistDeRedundance_004ffd48)();
  return;
}


==================================================================

### FUNC 0015de40 (16 bytes) name=cvCreateMatHeader

void cvCreateMatHeader(void)

{
  (*(code *)PTR_cvCreateMatHeader_004ffd50)();
  return;
}


==================================================================

### FUNC 0015de50 (16 bytes) name=usbi_alloc_device

void usbi_alloc_device(void)

{
  (*(code *)PTR_usbi_alloc_device_004ffd58)();
  return;
}


==================================================================

### FUNC 0015de60 (16 bytes) name=isOpened

void __thiscall cv::FileStorage::isOpened(FileStorage *this)

{
  (*(code *)PTR_isOpened_004ffd60)();
  return;
}


==================================================================

### FUNC 0015de70 (16 bytes) name=_M_insert_aux

void __thiscall std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux(void)

{
  (*(code *)PTR__M_insert_aux_004ffd68)();
  return;
}


==================================================================

### FUNC 0015de80 (16 bytes) name=cvReadRawData

void cvReadRawData(void)

{
  (*(code *)PTR_cvReadRawData_004ffd70)();
  return;
}


==================================================================

### FUNC 0015de90 (16 bytes) name=Hdr

void __thiscall cv::SparseMat::Hdr::Hdr(Hdr *this,int param_1,int *param_2,int param_3)

{
  (*(code *)PTR_Hdr_004ffd78)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015dea0 (16 bytes) name=__deregister_frame_info_bases

void __deregister_frame_info_bases(void)

{
  (*(code *)PTR___deregister_frame_info_bases_004ffd80)();
  return;
}


==================================================================

### FUNC 0015deb0 (16 bytes) name=ReadPara

void __thiscall
CNetComm::ReadPara(CNetComm *this,BasePara1 *param_1,BasePara2 *param_2,uint param_3)

{
  (*(code *)PTR_ReadPara_004ffd88)();
  return;
}


==================================================================

### FUNC 0015dec0 (16 bytes) name=_Unwind_Resume_or_Rethrow

void _Unwind_Resume_or_Rethrow(void)

{
  (*(code *)PTR__Unwind_Resume_or_Rethrow_004ffd90)();
  return;
}


==================================================================

### FUNC 0015ded0 (16 bytes) name=toChars

void toChars(_JNIEnv *param_1,_jstring *param_2,char *param_3,int param_4)

{
  (*(code *)PTR_toChars_004ffd98)();
  return;
}


==================================================================

### FUNC 0015dee0 (16 bytes) name=pthread_setspecific

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_setspecific(pthread_key_t __key,void *__pointer)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_setspecific_004ffda0)(__key);
  return iVar1;
}


==================================================================

### FUNC 0015def0 (16 bytes) name=GetOutputBMPdata

void CMagDevice::GetOutputBMPdata(uchar **param_1,tagBITMAPINFO **param_2)

{
  (*(code *)PTR_GetOutputBMPdata_004ffda8)();
  return;
}


==================================================================

### FUNC 0015df00 (16 bytes) name=meanStdDev

void cv::meanStdDev(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                   _InputArray *param_4)

{
  (*(code *)PTR_meanStdDev_004ffdb0)();
  return;
}


==================================================================

### FUNC 0015df10 (16 bytes) name=mulSpectrums

void cv::mulSpectrums(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                     bool param_5)

{
  (*(code *)PTR_mulSpectrums_004ffdb8)();
  return;
}


==================================================================

### FUNC 0015df20 (16 bytes) name=cvRestoreMemStoragePos

void cvRestoreMemStoragePos(void)

{
  (*(code *)PTR_cvRestoreMemStoragePos_004ffdc0)();
  return;
}


==================================================================

### FUNC 0015df30 (16 bytes) name=~__foreign_exception

void __thiscall __cxxabiv1::__foreign_exception::~__foreign_exception(__foreign_exception *this)

{
  (*(code *)PTR____foreign_exception_004ffdc8)();
  return;
}


==================================================================

### FUNC 0015df40 (16 bytes) name=__cxa_get_globals_fast

void __cxa_get_globals_fast(void)

{
  (*(code *)PTR___cxa_get_globals_fast_004ffdd0)();
  return;
}


==================================================================

### FUNC 0015df50 (16 bytes) name=integral

void cv::integral(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                 _OutputArray *param_4,int param_5,int param_6)

{
  (*(code *)PTR_integral_004ffdd8)();
  return;
}


==================================================================

### FUNC 0015df60 (16 bytes) name=libusb_get_active_config_descriptor

void libusb_get_active_config_descriptor(void)

{
  (*(code *)PTR_libusb_get_active_config_descriptor_004ffde0)();
  return;
}


==================================================================

### FUNC 0015df70 (16 bytes) name=create

void cv::ogl::Buffer::create(void)

{
  (*(code *)PTR_create_004ffde8)();
  return;
}


==================================================================

### FUNC 0015df80 (16 bytes) name=copyTo

void __thiscall cv::UMat::copyTo(UMat *this,_OutputArray *param_1)

{
  (*(code *)PTR_copyTo_004ffdf0)();
  return;
}


==================================================================

### FUNC 0015df90 (16 bytes) name=__cxa_guard_release

void __cxa_guard_release(void)

{
  (*(code *)PTR___cxa_guard_release_004ffdf8)();
  return;
}


==================================================================

### FUNC 0015dfa0 (16 bytes) name=libusb_close

void libusb_close(void)

{
  (*(code *)PTR_libusb_close_004ffe00)();
  return;
}


==================================================================

### FUNC 0015dfb0 (16 bytes) name=read

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t read(int __fd,void *__buf,size_t __nbytes)

{
  ssize_t sVar1;
  
  sVar1 = (*(code *)PTR_read_004ffe08)(__fd);
  return sVar1;
}


==================================================================

### FUNC 0015dfc0 (16 bytes) name=discovered_devs_append

void discovered_devs_append(void)

{
  (*(code *)PTR_discovered_devs_append_004ffe10)();
  return;
}


==================================================================

### FUNC 0015dfd0 (16 bytes) name=memmove

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memmove(void *__dest,void *__src,size_t __n)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_memmove_004ffe18)();
  return pvVar1;
}


==================================================================

### FUNC 0015dfe0 (16 bytes) name=edgeImage

void edgeImage(uchar *param_1,int param_2,int param_3,uchar *param_4)

{
  (*(code *)PTR_edgeImage_004ffe20)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015dff0 (16 bytes) name=cvAlloc

void cv::cvAlloc(ulong param_1)

{
  (*(code *)PTR_cvAlloc_004ffe28)();
  return;
}


==================================================================

### FUNC 0015e000 (16 bytes) name=setTo

void __thiscall cv::Mat::setTo(Mat *this,_InputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_setTo_004ffe30)();
  return;
}


==================================================================

### FUNC 0015e010 (16 bytes) name=ptr

void __thiscall cv::ocl::Device::ptr(Device *this)

{
  (*(code *)PTR_ptr_004ffe38)();
  return;
}


==================================================================

### FUNC 0015e020 (16 bytes) name=get_terminate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::get_terminate(void)

{
  (*(code *)PTR_get_terminate_004ffe40)();
  return;
}


==================================================================

### FUNC 0015e030 (16 bytes) name=sort

void cv::sort(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_sort_004ffe48)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015e040 (16 bytes) name=MAG_LoadDDT

void MAG_LoadDDT(void)

{
  (*(code *)PTR_MAG_LoadDDT_004ffe50)();
  return;
}


==================================================================

### FUNC 0015e050 (16 bytes) name=create

void __thiscall
cv::ocl::Program::create(Program *this,ProgramSource *param_1,String *param_2,String *param_3)

{
  (*(code *)PTR_create_004ffe58)();
  return;
}


==================================================================

### FUNC 0015e060 (16 bytes) name=pthread_once

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_once(pthread_once_t *__once_control,__init_routine *__init_routine)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_once_004ffe60)((int)__once_control);
  return iVar1;
}


==================================================================

### FUNC 0015e070 (16 bytes) name=createMorphologyFilter

void __thiscall cv::createMorphologyFilter(void)

{
  (*(code *)PTR_createMorphologyFilter_004ffe68)();
  return;
}


==================================================================

### FUNC 0015e080 (16 bytes) name=SetImageTransform

void CMagDevice::SetImageTransform(int param_1,int param_2)

{
  (*(code *)PTR_SetImageTransform_004ffe70)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e090 (16 bytes) name=__google_potentially_blocking_region_end

void __google_potentially_blocking_region_end(void)

{
  (*(code *)PTR___google_potentially_blocking_region_end_004ffe78)();
  return;
}


==================================================================

### FUNC 0015e0a0 (16 bytes) name=~bad_array_length

void __thiscall std::bad_array_length::~bad_array_length(bad_array_length *this)

{
  (*(code *)PTR__bad_array_length_004ffe80)();
  return;
}


==================================================================

### FUNC 0015e0b0 (16 bytes) name=usbi_pipe

void usbi_pipe(void)

{
  (*(code *)PTR_usbi_pipe_004ffe88)();
  return;
}


==================================================================

### FUNC 0015e0c0 (16 bytes) name=PushBaselineRaw

void __thiscall CFunctions::PushBaselineRaw(CFunctions *this,ushort *param_1,int param_2)

{
  (*(code *)PTR_PushBaselineRaw_004ffe90)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e0d0 (16 bytes) name=FilterE2X

void __thiscall CFunctions::FilterE2X(CFunctions *this)

{
  (*(code *)PTR_FilterE2X_004ffe98)();
  return;
}


==================================================================

### FUNC 0015e0e0 (16 bytes) name=NAryMatIterator

void __thiscall
cv::NAryMatIterator::NAryMatIterator
          (NAryMatIterator *this,Mat **param_1,uchar **param_2,int param_3)

{
  (*(code *)PTR_NAryMatIterator_004ffea0)();
  return;
}


==================================================================

### FUNC 0015e0f0 (16 bytes) name=cvClearSet

void cvClearSet(void)

{
  (*(code *)PTR_cvClearSet_004ffea8)();
  return;
}


==================================================================

### FUNC 0015e100 (16 bytes) name=cvPtr2D

void cvPtr2D(void)

{
  (*(code *)PTR_cvPtr2D_004ffeb0)();
  return;
}


==================================================================

### FUNC 0015e110 (16 bytes) name=exception_ptr

void __thiscall
std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this,exception_ptr *param_1)

{
  (*(code *)PTR_exception_ptr_004ffeb8)();
  return;
}


==================================================================

### FUNC 0015e120 (16 bytes) name=medianBlur

void cv::medianBlur(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_medianBlur_004ffec0)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015e130 (16 bytes) name=cvGetFileNodeByName

void cvGetFileNodeByName(void)

{
  (*(code *)PTR_cvGetFileNodeByName_004ffec8)();
  return;
}


==================================================================

### FUNC 0015e140 (16 bytes) name=feof

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int feof(FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_feof_004ffed0)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 0015e150 (16 bytes) name=~bad_typeid

void __thiscall std::bad_typeid::~bad_typeid(bad_typeid *this)

{
  (*(code *)PTR__bad_typeid_004ffed8)();
  return;
}


==================================================================

### FUNC 0015e160 (16 bytes) name=strlen

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strlen(char *__s)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_strlen_004ffee0)();
  return sVar1;
}


==================================================================

### FUNC 0015e170 (16 bytes) name=addWeighted

void cv::addWeighted(_InputArray *param_1,double param_2,_InputArray *param_3,double param_4,
                    double param_5,_OutputArray *param_6,int param_7)

{
  (*(code *)PTR_addWeighted_004ffee8)();
  return;
}


==================================================================

### FUNC 0015e180 (16 bytes) name=wcscoll

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wcscoll(wchar_t *__s1,wchar_t *__s2)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_wcscoll_004ffef0)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 0015e190 (16 bytes) name=MAG_IsPause

void MAG_IsPause(void)

{
  (*(code *)PTR_MAG_IsPause_004ffef8)();
  return;
}


==================================================================

### FUNC 0015e1a0 (16 bytes) name=MAG_LockFrame

void MAG_LockFrame(void)

{
  (*(code *)PTR_MAG_LockFrame_004fff00)();
  return;
}


==================================================================

### FUNC 0015e1b0 (16 bytes) name=~UMatData

void __thiscall cv::UMatData::~UMatData(UMatData *this)

{
  (*(code *)PTR__UMatData_004fff08)();
  return;
}


==================================================================

### FUNC 0015e1c0 (16 bytes) name=cvBoundingRect

void cvBoundingRect(void)

{
  (*(code *)PTR_cvBoundingRect_004fff10)();
  return;
}


==================================================================

### FUNC 0015e1d0 (16 bytes) name=deviceVersionMajor

void __thiscall cv::ocl::Device::deviceVersionMajor(Device *this)

{
  (*(code *)PTR_deviceVersionMajor_004fff18)();
  return;
}


==================================================================

### FUNC 0015e1e0 (16 bytes) name=atan2

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double atan2(double __y,double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_atan2_004fff20)();
  return dVar1;
}


==================================================================

### FUNC 0015e1f0 (16 bytes) name=access

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int access(char *__name,int __type)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_access_004fff28)((int)__name,__type);
  return iVar1;
}


==================================================================

### FUNC 0015e200 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_004fff30)();
  return;
}


==================================================================

### FUNC 0015e210 (16 bytes) name=cvReleaseFileStorage

void cvReleaseFileStorage(void)

{
  (*(code *)PTR_cvReleaseFileStorage_004fff38)();
  return;
}


==================================================================

### FUNC 0015e220 (16 bytes) name=ptr

void __thiscall cv::ocl::Image2D::ptr(Image2D *this)

{
  (*(code *)PTR_ptr_004fff40)();
  return;
}


==================================================================

### FUNC 0015e230 (16 bytes) name=getTickCount

void cv::getTickCount(void)

{
  (*(code *)PTR_getTickCount_004fff48)();
  return;
}


==================================================================

### FUNC 0015e240 (16 bytes) name=gettid

void gettid(void)

{
  (*(code *)PTR_gettid_004fff50)();
  return;
}


==================================================================

### FUNC 0015e250 (16 bytes) name=total

void __thiscall cv::_InputArray::total(_InputArray *this,int param_1)

{
  (*(code *)PTR_total_004fff58)(this,param_1);
  return;
}


==================================================================

### FUNC 0015e260 (16 bytes) name=norm

void cv::norm(_InputArray *param_1,int param_2,_InputArray *param_3)

{
  (*(code *)PTR_norm_004fff60)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e270 (16 bytes) name=operator/

void __thiscall cv::operator/(cv *this,double param_1,Mat *param_2)

{
  (*(code *)PTR_operator__004fff68)();
  return;
}


==================================================================

### FUNC 0015e280 (16 bytes) name=SetEX

void __thiscall CFunctions::SetEX(void)

{
  (*(code *)PTR_SetEX_004fff70)();
  return;
}


==================================================================

### FUNC 0015e290 (16 bytes) name=~MStream

void __thiscall MStream::~MStream(MStream *this)

{
  (*(code *)PTR__MStream_004fff78)();
  return;
}


==================================================================

### FUNC 0015e2a0 (16 bytes) name=MAG_LinkCamera

void MAG_LinkCamera(void)

{
  (*(code *)PTR_MAG_LinkCamera_004fff80)();
  return;
}


==================================================================

### FUNC 0015e2b0 (16 bytes) name=usbi_get_tid

void usbi_get_tid(void)

{
  (*(code *)PTR_usbi_get_tid_004fff88)();
  return;
}


==================================================================

### FUNC 0015e2c0 (16 bytes) name=cartToPolar

void cv::cartToPolar(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _OutputArray *param_4,bool param_5)

{
  (*(code *)PTR_cartToPolar_004fff90)();
  return;
}


==================================================================

### FUNC 0015e2d0 (16 bytes) name=strstr

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strstr(char *__haystack,char *__needle)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strstr_004fff98)();
  return pcVar1;
}


==================================================================

### FUNC 0015e2e0 (16 bytes) name=Mutex

void __thiscall cv::Mutex::Mutex(Mutex *this)

{
  (*(code *)PTR_Mutex_004fffa0)();
  return;
}


==================================================================

### FUNC 0015e2f0 (16 bytes) name=libusb_set_auto_detach_kernel_driver

void libusb_set_auto_detach_kernel_driver(void)

{
  (*(code *)PTR_libusb_set_auto_detach_kernel_driver_004fffa8)();
  return;
}


==================================================================

### FUNC 0015e300 (16 bytes) name=reduce

void cv::reduce(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,int param_5)

{
  (*(code *)PTR_reduce_004fffb0)(param_1,param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### FUNC 0015e310 (16 bytes) name=pthread_mutexattr_destroy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_destroy(pthread_mutexattr_t *__attr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutexattr_destroy_004fffb8)((int)__attr);
  return iVar1;
}


==================================================================

### FUNC 0015e320 (16 bytes) name=BlindCompensation

void __thiscall CFunctions::BlindCompensation(CFunctions *this,ushort *param_1)

{
  (*(code *)PTR_BlindCompensation_004fffc0)();
  return;
}


==================================================================

### FUNC 0015e330 (16 bytes) name=ResizeBMP

void __thiscall CFunctions::ResizeBMP(CFunctions *this)

{
  (*(code *)PTR_ResizeBMP_004fffc8)();
  return;
}


==================================================================

### FUNC 0015e340 (16 bytes) name=usbi_log

void usbi_log(void)

{
  (*(code *)PTR_usbi_log_004fffd0)();
  return;
}


==================================================================

### FUNC 0015e350 (16 bytes) name=Sleep

void Sleep(int param_1)

{
  (*(code *)PTR_Sleep_004fffd8)(param_1);
  return;
}


==================================================================

### FUNC 0015e360 (16 bytes) name=MAG_SetAutoEnlargePara

void MAG_SetAutoEnlargePara(void)

{
  (*(code *)PTR_MAG_SetAutoEnlargePara_004fffe0)();
  return;
}


==================================================================

### FUNC 0015e370 (16 bytes) name=FilterDetailEnhancement

void __thiscall CFunctions::FilterDetailEnhancement(CFunctions *this,uint param_1)

{
  (*(code *)PTR_FilterDetailEnhancement_004fffe8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015e380 (16 bytes) name=fclose

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fclose(FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fclose_004ffff0)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 0015e390 (16 bytes) name=SetIsothermalPara

void CMagDevice::SetIsothermalPara(int param_1,int param_2)

{
  (*(code *)PTR_SetIsothermalPara_004ffff8)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e3a0 (16 bytes) name=vendorID

void __thiscall cv::ocl::Device::vendorID(Device *this)

{
  (*(code *)PTR_vendorID_00500000)();
  return;
}


==================================================================

### FUNC 0015e3b0 (16 bytes) name=Seek

void __thiscall FStream::Seek(void)

{
  (*(code *)PTR_Seek_00500008)();
  return;
}


==================================================================

### FUNC 0015e3c0 (16 bytes) name=GetJfloat

void GetJfloat(_JNIEnv *param_1,char *param_2,_jobject *param_3)

{
  (*(code *)PTR_GetJfloat_00500010)();
  return;
}


==================================================================

### FUNC 0015e3d0 (16 bytes) name=_M_addref

void __thiscall std::__exception_ptr::exception_ptr::_M_addref(exception_ptr *this)

{
  (*(code *)PTR__M_addref_00500018)();
  return;
}


==================================================================

### FUNC 0015e3e0 (16 bytes) name=_Unwind_GetCFA

void _Unwind_GetCFA(void)

{
  (*(code *)PTR__Unwind_GetCFA_00500020)();
  return;
}


==================================================================

### FUNC 0015e3f0 (16 bytes) name=~bad_cast

void __thiscall std::bad_cast::~bad_cast(bad_cast *this)

{
  (*(code *)PTR__bad_cast_00500028)();
  return;
}


==================================================================

### FUNC 0015e400 (16 bytes) name=realloc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * realloc(void *__ptr,size_t __size)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_realloc_00500030)();
  return pvVar1;
}


==================================================================

### FUNC 0015e410 (16 bytes) name=libusb_free_config_descriptor

void libusb_free_config_descriptor(void)

{
  (*(code *)PTR_libusb_free_config_descriptor_00500038)();
  return;
}


==================================================================

### FUNC 0015e420 (16 bytes) name=release

void cv::cuda::HostMem::release(void)

{
  (*(code *)PTR_release_00500040)();
  return;
}


==================================================================

### FUNC 0015e430 (16 bytes) name=lock

void __thiscall cv::Mutex::lock(Mutex *this)

{
  (*(code *)PTR_lock_00500048)();
  return;
}


==================================================================

### FUNC 0015e440 (16 bytes) name=SearchInnerTemp

void __thiscall CFunctions::SearchInnerTemp(CFunctions *this,int param_1)

{
  (*(code *)PTR_SearchInnerTemp_00500050)(this,param_1);
  return;
}


==================================================================

### FUNC 0015e450 (16 bytes) name=cvFindContours

void cvFindContours(void)

{
  (*(code *)PTR_cvFindContours_00500058)();
  return;
}


==================================================================

### FUNC 0015e460 (16 bytes) name=max

void cv::max(Mat *param_1,Mat *param_2,Mat *param_3)

{
  (*(code *)PTR_max_00500060)();
  return;
}


==================================================================

### FUNC 0015e470 (16 bytes) name=ReviseTemperature

void __thiscall
CFunctions::ReviseTemperature(CFunctions *this,ushort param_1,uint param_2,int param_3)

{
  (*(code *)PTR_ReviseTemperature_00500068)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015e480 (16 bytes) name=resetTexCoordArray

void cv::ogl::Arrays::resetTexCoordArray(void)

{
  (*(code *)PTR_resetTexCoordArray_00500070)();
  return;
}


==================================================================

### FUNC 0015e490 (16 bytes) name=copyTo

void __thiscall cv::SparseMat::copyTo(SparseMat *this,SparseMat *param_1)

{
  (*(code *)PTR_copyTo_00500078)();
  return;
}


==================================================================

### FUNC 0015e4a0 (16 bytes) name=setTo

void cv::cuda::GpuMat::setTo(void)

{
  (*(code *)PTR_setTo_00500080)();
  return;
}


==================================================================

### FUNC 0015e4b0 (16 bytes) name=project

void cv::PCA::project(_InputArray *param_1)

{
  (*(code *)PTR_project_00500088)();
  return;
}


==================================================================

### FUNC 0015e4c0 (16 bytes) name=iswctype

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int iswctype(wint_t __wc,wctype_t __desc)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_iswctype_00500090)(__wc);
  return iVar1;
}


==================================================================

### FUNC 0015e4d0 (16 bytes) name=~vector

void __thiscall
std::vector<cv::Mat,std::allocator<cv::Mat>>::~vector(vector<cv::Mat,std::allocator<cv::Mat>> *this)

{
  (*(code *)PTR__vector_00500098)();
  return;
}


==================================================================

### FUNC 0015e4e0 (16 bytes) name=gzeof

void gzeof(void)

{
  (*(code *)PTR_gzeof_005000a0)();
  return;
}


==================================================================

### FUNC 0015e4f0 (16 bytes) name=sortIdx

void cv::sortIdx(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_sortIdx_005000a8)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015e500 (16 bytes) name=MAG_IsLinked

void MAG_IsLinked(void)

{
  (*(code *)PTR_MAG_IsLinked_005000b0)();
  return;
}


==================================================================

### FUNC 0015e510 (16 bytes) name=strtod

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double strtod(char *__nptr,char **__endptr)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_strtod_005000b8)();
  return dVar1;
}


==================================================================

### FUNC 0015e520 (16 bytes) name=scalarToRawData

void cv::scalarToRawData(Scalar_ *param_1,void *param_2,int param_3,int param_4)

{
  (*(code *)PTR_scalarToRawData_005000c0)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015e530 (16 bytes) name=next

void __thiscall cv::RNG_MT19937::next(RNG_MT19937 *this)

{
  (*(code *)PTR_next_005000c8)();
  return;
}


==================================================================

### FUNC 0015e540 (16 bytes) name=libusb_get_config_descriptor

void libusb_get_config_descriptor(void)

{
  (*(code *)PTR_libusb_get_config_descriptor_005000d0)();
  return;
}


==================================================================

### FUNC 0015e550 (16 bytes) name=TransferCaliFile

void __thiscall CNetComm::TransferCaliFile(CNetComm *this)

{
  (*(code *)PTR_TransferCaliFile_005000d8)();
  return;
}


==================================================================

### FUNC 0015e560 (16 bytes) name=MAG_PrepareProcessImage

void MAG_PrepareProcessImage(void)

{
  (*(code *)PTR_MAG_PrepareProcessImage_005000e0)();
  return;
}


==================================================================

### FUNC 0015e570 (16 bytes) name=cvGraphAddVtx

void cvGraphAddVtx(void)

{
  (*(code *)PTR_cvGraphAddVtx_005000e8)();
  return;
}


==================================================================

### FUNC 0015e580 (16 bytes) name=cvEndFindContours

void cvEndFindContours(void)

{
  (*(code *)PTR_cvEndFindContours_005000f0)();
  return;
}


==================================================================

### FUNC 0015e590 (16 bytes) name=imageSupport

void __thiscall cv::ocl::Device::imageSupport(Device *this)

{
  (*(code *)PTR_imageSupport_005000f8)();
  return;
}


==================================================================

### FUNC 0015e5a0 (16 bytes) name=usbi_remove_pollfd

void usbi_remove_pollfd(void)

{
  (*(code *)PTR_usbi_remove_pollfd_00500100)();
  return;
}


==================================================================

### FUNC 0015e5b0 (16 bytes) name=Sobel

void cv::Sobel(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,int param_5,
              int param_6,double param_7,double param_8,int param_9)

{
  (*(code *)PTR_Sobel_00500108)(param_1,param_2,param_3,param_4,param_5,param_6,param_9);
  return;
}


==================================================================

### FUNC 0015e5c0 (16 bytes) name=mul

void cv::Mat::mul(_InputArray *param_1,double param_2)

{
  (*(code *)PTR_mul_00500110)();
  return;
}


==================================================================

### FUNC 0015e5d0 (16 bytes) name=cvReleaseMemStorage

void cvReleaseMemStorage(void)

{
  (*(code *)PTR_cvReleaseMemStorage_00500118)();
  return;
}


==================================================================

### FUNC 0015e5e0 (16 bytes) name=wcsftime

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcsftime(wchar_t *__s,size_t __maxsize,wchar_t *__format,tm *__tp)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_wcsftime_00500120)();
  return sVar1;
}


==================================================================

### FUNC 0015e5f0 (16 bytes) name=cvSeqPushFront

void cvSeqPushFront(void)

{
  (*(code *)PTR_cvSeqPushFront_00500128)();
  return;
}


==================================================================

### FUNC 0015e600 (16 bytes) name=operator.cast.to.double

double __thiscall cv::RNG_MT19937::operator_cast_to_double(RNG_MT19937 *this)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_operator_cast_to_double_00500130)();
  return dVar1;
}


==================================================================

### FUNC 0015e610 (16 bytes) name=dilate

void cv::dilate(void)

{
  (*(code *)PTR_dilate_00500138)();
  return;
}


==================================================================

### FUNC 0015e620 (16 bytes) name=writeScalar

void cv::writeScalar(FileStorage *param_1,int param_2)

{
  (*(code *)PTR_writeScalar_00500140)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e630 (16 bytes) name=cvGetSize

void cvGetSize(void)

{
  (*(code *)PTR_cvGetSize_00500148)();
  return;
}


==================================================================

### FUNC 0015e640 (16 bytes) name=CopyState

void __thiscall CFunctions::CopyState(CFunctions *this)

{
  (*(code *)PTR_CopyState_00500150)();
  return;
}


==================================================================

### FUNC 0015e650 (16 bytes) name=SaveRGB24

void __thiscall CVideoFunctions::SaveRGB24(CVideoFunctions *this,char *param_1)

{
  (*(code *)PTR_SaveRGB24_00500158)();
  return;
}


==================================================================

### FUNC 0015e660 (16 bytes) name=__register_frame_info_table_bases

void __register_frame_info_table_bases(void)

{
  (*(code *)PTR___register_frame_info_table_bases_00500160)();
  return;
}


==================================================================

### FUNC 0015e670 (16 bytes) name=GetCamInfo

void __thiscall CMagDevice::GetCamInfo(CMagDevice *this)

{
  (*(code *)PTR_GetCamInfo_00500168)();
  return;
}


==================================================================

### FUNC 0015e680 (16 bytes) name=GetTemperature

void __thiscall CFunctions::GetTemperature(CFunctions *this,uint param_1,uint param_2,int param_3)

{
  (*(code *)PTR_GetTemperature_00500170)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015e690 (16 bytes) name=EnumCameras

void __thiscall CNetComm::EnumCameras(CNetComm *this)

{
  (*(code *)PTR_EnumCameras_00500178)();
  return;
}


==================================================================

### FUNC 0015e6a0 (16 bytes) name=cvGetFileNodeName

void cvGetFileNodeName(void)

{
  (*(code *)PTR_cvGetFileNodeName_00500180)();
  return;
}


==================================================================

### FUNC 0015e6b0 (16 bytes) name=DoPrepareInBackground

void __thiscall CNetComm::DoPrepareInBackground(CNetComm *this)

{
  (*(code *)PTR_DoPrepareInBackground_00500188)();
  return;
}


==================================================================

### FUNC 0015e6c0 (16 bytes) name=Fmt

void MStream::Fmt(char *param_1,...)

{
  (*(code *)PTR_Fmt_00500190)();
  return;
}


==================================================================

### FUNC 0015e6d0 (16 bytes) name=cvReleaseStructuringElement

void cvReleaseStructuringElement(void)

{
  (*(code *)PTR_cvReleaseStructuringElement_00500198)();
  return;
}


==================================================================

### FUNC 0015e6e0 (16 bytes) name=save

void __thiscall MDTHelper::save(MDTHelper *this,char *param_1)

{
  (*(code *)PTR_save_005001a0)();
  return;
}


==================================================================

### FUNC 0015e6f0 (16 bytes) name=GetLength

void __thiscall IFStream::GetLength(IFStream *this)

{
  (*(code *)PTR_GetLength_005001a8)();
  return;
}


==================================================================

### FUNC 0015e700 (16 bytes) name=Condition

void __thiscall Condition::Condition(Condition *this)

{
  (*(code *)PTR_Condition_005001b0)();
  return;
}


==================================================================

### FUNC 0015e710 (16 bytes) name=getStdAllocator

void cv::Mat::getStdAllocator(void)

{
  (*(code *)PTR_getStdAllocator_005001b8)();
  return;
}


==================================================================

### FUNC 0015e720 (16 bytes) name=munmap

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int munmap(void *__addr,size_t __len)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_munmap_005001c0)((int)__addr);
  return iVar1;
}


==================================================================

### FUNC 0015e730 (16 bytes) name=fprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fprintf(FILE *__stream,char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fprintf_005001c8)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 0015e740 (16 bytes) name=__cxa_free_dependent_exception

void __cxa_free_dependent_exception(void)

{
  (*(code *)PTR___cxa_free_dependent_exception_005001d0)();
  return;
}


==================================================================

### FUNC 0015e750 (16 bytes) name=wctype

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wctype_t wctype(char *__property)

{
  wctype_t wVar1;
  
  wVar1 = (*(code *)PTR_wctype_005001d8)();
  return wVar1;
}


==================================================================

### FUNC 0015e760 (16 bytes) name=~CAccumulator

void __thiscall CAccumulator::~CAccumulator(CAccumulator *this)

{
  (*(code *)PTR__CAccumulator_005001e0)();
  return;
}


==================================================================

### FUNC 0015e770 (16 bytes) name=MAG_LoadBufferedDDT

void MAG_LoadBufferedDDT(uint param_1,OutputPara *param_2,void *param_3,uint param_4,
                        _func_void_uint_uint_uint_void_ptr *param_5,void *param_6)

{
  (*(code *)PTR_MAG_LoadBufferedDDT_005001e8)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015e780 (16 bytes) name=getDefault

void cv::ocl::Context::getDefault(bool param_1)

{
  (*(code *)PTR_getDefault_005001f0)(param_1);
  return;
}


==================================================================

### FUNC 0015e790 (16 bytes) name=MAG_Resume

void MAG_Resume(void)

{
  (*(code *)PTR_MAG_Resume_005001f8)();
  return;
}


==================================================================

### FUNC 0015e7a0 (16 bytes) name=getMatVector

void __thiscall cv::_InputArray::getMatVector(_InputArray *this,vector *param_1)

{
  (*(code *)PTR_getMatVector_00500200)();
  return;
}


==================================================================

### FUNC 0015e7b0 (16 bytes) name=__sfp_handle_exceptions

void __sfp_handle_exceptions(void)

{
  (*(code *)PTR___sfp_handle_exceptions_00500208)();
  return;
}


==================================================================

### FUNC 0015e7c0 (16 bytes) name=GetOutputColorBardata

void CMagDevice::GetOutputColorBardata(uchar **param_1,tagBITMAPINFO **param_2)

{
  (*(code *)PTR_GetOutputColorBardata_00500210)();
  return;
}


==================================================================

### FUNC 0015e7d0 (16 bytes) name=release

void cv::cuda::GpuMat::release(void)

{
  (*(code *)PTR_release_00500218)();
  return;
}


==================================================================

### FUNC 0015e7e0 (16 bytes) name=_M_fill_insert

void __thiscall
std::
vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_00500220)();
  return;
}


==================================================================

### FUNC 0015e7f0 (16 bytes) name=putc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int putc(int __c,FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_putc_00500228)(__c);
  return iVar1;
}


==================================================================

### FUNC 0015e800 (16 bytes) name=Device

void __thiscall cv::ocl::Device::Device(Device *this,void *param_1)

{
  (*(code *)PTR_Device_00500230)();
  return;
}


==================================================================

### FUNC 0015e810 (16 bytes) name=operator()

void __thiscall
cv::PCA::operator()(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,double param_4)

{
  (*(code *)PTR_operator___00500238)();
  return;
}


==================================================================

### FUNC 0015e820 (16 bytes) name=pow

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double pow(double __x,double __y)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_pow_00500240)();
  return dVar1;
}


==================================================================

### FUNC 0015e830 (16 bytes) name=GetCaliFileName

void __thiscall CNetComm::GetCaliFileName(CNetComm *this,char *param_1,int param_2)

{
  (*(code *)PTR_GetCaliFileName_00500248)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015e840 (16 bytes) name=strncmp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strncmp(char *__s1,char *__s2,size_t __n)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_strncmp_00500250)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 0015e850 (16 bytes) name=error

void cv::error(Exception *param_1)

{
  (*(code *)PTR_error_00500258)();
  return;
}


==================================================================

### FUNC 0015e860 (16 bytes) name=fputc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fputc(int __c,FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fputc_00500260)(__c);
  return iVar1;
}


==================================================================

### FUNC 0015e870 (16 bytes) name=lrintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long lrintf(float __x)

{
  long lVar1;
  
  lVar1 = (*(code *)PTR_lrintf_00500268)();
  return lVar1;
}


==================================================================

### FUNC 0015e880 (16 bytes) name=Write

void __thiscall OFStream::Write(OFStream *this,void *param_1,ulong param_2,ulong param_3)

{
  (*(code *)PTR_Write_00500270)();
  return;
}


==================================================================

### FUNC 0015e890 (16 bytes) name=~ParallelLoopBody

void __thiscall cv::ParallelLoopBody::~ParallelLoopBody(ParallelLoopBody *this)

{
  (*(code *)PTR__ParallelLoopBody_00500278)();
  return;
}


==================================================================

### FUNC 0015e8a0 (16 bytes) name=cvFree_

void cv::cvFree_(void *param_1)

{
  (*(code *)PTR_cvFree__00500280)();
  return;
}


==================================================================

### FUNC 0015e8b0 (16 bytes) name=ptr

void __thiscall cv::ocl::Program::ptr(Program *this)

{
  (*(code *)PTR_ptr_00500288)();
  return;
}


==================================================================

### FUNC 0015e8c0 (16 bytes) name=SaveDDT

void CMagDevice::SaveDDT(char *param_1)

{
  (*(code *)PTR_SaveDDT_00500290)();
  return;
}


==================================================================

### FUNC 0015e8d0 (16 bytes) name=cvFlushSeqWriter

void cvFlushSeqWriter(void)

{
  (*(code *)PTR_cvFlushSeqWriter_00500298)();
  return;
}


==================================================================

### FUNC 0015e8e0 (16 bytes) name=cvSeqInsertSlice

void cvSeqInsertSlice(void)

{
  (*(code *)PTR_cvSeqInsertSlice_005002a0)();
  return;
}


==================================================================

### FUNC 0015e8f0 (16 bytes) name=__getf2

void __getf2(void)

{
  (*(code *)PTR___getf2_005002a8)();
  return;
}


==================================================================

### FUNC 0015e900 (16 bytes) name=InterpolateUShort

void __thiscall
CFunctions::InterpolateUShort
          (CFunctions *this,ushort *param_1,ushort *param_2,ushort *param_3,uint param_4)

{
  (*(code *)PTR_InterpolateUShort_005002b0)();
  return;
}


==================================================================

### FUNC 0015e910 (16 bytes) name=free

void __thiscall MDTHelper::free(MDTHelper *this)

{
  (*(code *)PTR_free_005002b8)();
  return;
}


==================================================================

### FUNC 0015e920 (16 bytes) name=StopReceiveImg

void __thiscall CNetComm::StopReceiveImg(CNetComm *this,int param_1)

{
  (*(code *)PTR_StopReceiveImg_005002c0)(this,param_1);
  return;
}


==================================================================

### FUNC 0015e930 (16 bytes) name=setUseOpenCL

void cv::ocl::setUseOpenCL(bool param_1)

{
  (*(code *)PTR_setUseOpenCL_005002c8)(param_1);
  return;
}


==================================================================

### FUNC 0015e940 (16 bytes) name=wmemcpy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemcpy(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
  wchar_t *pwVar1;
  
  pwVar1 = (wchar_t *)(*(code *)PTR_wmemcpy_005002d0)();
  return pwVar1;
}


==================================================================

### FUNC 0015e950 (16 bytes) name=bilateralFilter

void cv::bilateralFilter(_InputArray *param_1,_OutputArray *param_2,int param_3,double param_4,
                        double param_5,int param_6)

{
  (*(code *)PTR_bilateralFilter_005002d8)(param_1,param_2,param_3,param_6);
  return;
}


==================================================================

### FUNC 0015e960 (16 bytes) name=log

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double log(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_log_005002e0)();
  return dVar1;
}


==================================================================

### FUNC 0015e970 (16 bytes) name=__cxa_bad_cast

void __cxa_bad_cast(void)

{
  (*(code *)PTR___cxa_bad_cast_005002e8)();
  return;
}


==================================================================

### FUNC 0015e980 (16 bytes) name=MAG_SetFixPara

void MAG_SetFixPara(void)

{
  (*(code *)PTR_MAG_SetFixPara_005002f0)();
  return;
}


==================================================================

### FUNC 0015e990 (16 bytes) name=MAG_FindDetectTarget

void MAG_FindDetectTarget(void)

{
  (*(code *)PTR_MAG_FindDetectTarget_005002f8)();
  return;
}


==================================================================

### FUNC 0015e9a0 (16 bytes) name=getPrefix

void __thiscall cv::ocl::Program::getPrefix(Program *this,String *param_1)

{
  (*(code *)PTR_getPrefix_00500300)();
  return;
}


==================================================================

### FUNC 0015e9b0 (16 bytes) name=MAG_RevisedTemp2Gray

void MAG_RevisedTemp2Gray(void)

{
  (*(code *)PTR_MAG_RevisedTemp2Gray_00500308)();
  return;
}


==================================================================

### FUNC 0015e9c0 (16 bytes) name=exp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double exp(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_exp_00500310)();
  return dVar1;
}


==================================================================

### FUNC 0015e9d0 (16 bytes) name=operator=

void __thiscall cv::Mat::operator=(Mat *this,Scalar_ *param_1)

{
  (*(code *)PTR_operator__00500318)();
  return;
}


==================================================================

### FUNC 0015e9e0 (16 bytes) name=snprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int snprintf(char *__s,size_t __maxlen,char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_snprintf_00500320)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 0015e9f0 (16 bytes) name=source

void __thiscall cv::ocl::ProgramSource::source(ProgramSource *this)

{
  (*(code *)PTR_source_00500328)();
  return;
}


==================================================================

### FUNC 0015ea00 (16 bytes) name=mixChannels

void cv::mixChannels(_InputArray *param_1,_InputOutputArray *param_2,int *param_3,ulong param_4)

{
  (*(code *)PTR_mixChannels_00500330)();
  return;
}


==================================================================

### FUNC 0015ea10 (16 bytes) name=~CVideoFunctions

void __thiscall CVideoFunctions::~CVideoFunctions(CVideoFunctions *this)

{
  (*(code *)PTR__CVideoFunctions_00500338)();
  return;
}


==================================================================

### FUNC 0015ea20 (16 bytes) name=cvSeqPopMulti

void cvSeqPopMulti(void)

{
  (*(code *)PTR_cvSeqPopMulti_00500340)();
  return;
}


==================================================================

### FUNC 0015ea30 (16 bytes) name=GetLength

void __thiscall OFStream::GetLength(OFStream *this)

{
  (*(code *)PTR_GetLength_00500348)();
  return;
}


==================================================================

### FUNC 0015ea40 (16 bytes) name=getc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int getc(FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_getc_00500350)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 0015ea50 (16 bytes) name=cvSetData

void cvSetData(void)

{
  (*(code *)PTR_cvSetData_00500358)();
  return;
}


==================================================================

### FUNC 0015ea60 (16 bytes) name=_Unwind_GetIPInfo

void _Unwind_GetIPInfo(void)

{
  (*(code *)PTR__Unwind_GetIPInfo_00500360)();
  return;
}


==================================================================

### FUNC 0015ea70 (16 bytes) name=MatExpr

void __thiscall
cv::MatExpr::MatExpr
          (MatExpr *this,MatOp *param_1,int param_2,Mat *param_3,Mat *param_4,Mat *param_5,
          double param_6,double param_7,Scalar_ *param_8)

{
  (*(code *)PTR_MatExpr_00500368)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015ea80 (16 bytes) name=cvCloneGraph

void cvCloneGraph(void)

{
  (*(code *)PTR_cvCloneGraph_00500370)();
  return;
}


==================================================================

### FUNC 0015ea90 (16 bytes) name=Resume

void __thiscall CMagDevice::Resume(CMagDevice *this)

{
  (*(code *)PTR_Resume_00500378)();
  return;
}


==================================================================

### FUNC 0015eaa0 (16 bytes) name=MAG_GetRectTemperatureInfo

void MAG_GetRectTemperatureInfo(void)

{
  (*(code *)PTR_MAG_GetRectTemperatureInfo_00500380)();
  return;
}


==================================================================

### FUNC 0015eab0 (16 bytes) name=type

void __thiscall cv::_InputArray::type(_InputArray *this,int param_1)

{
  (*(code *)PTR_type_00500388)(this,param_1);
  return;
}


==================================================================

### FUNC 0015eac0 (16 bytes) name=cvStartReadSeq

void cvStartReadSeq(void)

{
  (*(code *)PTR_cvStartReadSeq_00500390)();
  return;
}


==================================================================

### FUNC 0015ead0 (16 bytes) name=Reset

void __thiscall CFunctions::Reset(CFunctions *this,struct_IntrinsicPara *param_1)

{
  (*(code *)PTR_Reset_00500398)();
  return;
}


==================================================================

### FUNC 0015eae0 (16 bytes) name=GrayEnlarge

void __thiscall CFunctions::GrayEnlarge(CFunctions *this)

{
  (*(code *)PTR_GrayEnlarge_005003a0)();
  return;
}


==================================================================

### FUNC 0015eaf0 (16 bytes) name=setAutoRelease

void cv::ogl::Buffer::setAutoRelease(bool param_1)

{
  (*(code *)PTR_setAutoRelease_005003a8)(param_1);
  return;
}


==================================================================

### FUNC 0015eb00 (16 bytes) name=ReadRemoteData

void ReadRemoteData(uint param_1,uint param_2)

{
  (*(code *)PTR_ReadRemoteData_005003b0)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015eb10 (16 bytes) name=PrepareProcessImage

void CMagDevice::PrepareProcessImage(_func_void_uint_int_int_void_ptr *param_1,void *param_2)

{
  (*(code *)PTR_PrepareProcessImage_005003b8)();
  return;
}


==================================================================

### FUNC 0015eb20 (16 bytes) name=cvChangeSeqBlock

void cvChangeSeqBlock(void)

{
  (*(code *)PTR_cvChangeSeqBlock_005003c0)();
  return;
}


==================================================================

### FUNC 0015eb30 (16 bytes) name=getMatRef

void __thiscall cv::_OutputArray::getMatRef(_OutputArray *this,int param_1)

{
  (*(code *)PTR_getMatRef_005003c8)(this,param_1);
  return;
}


==================================================================

### FUNC 0015eb40 (16 bytes) name=pthread_attr_setdetachstate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_setdetachstate(pthread_attr_t *__attr,int __detachstate)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_attr_setdetachstate_005003d0)((int)__attr,__detachstate);
  return iVar1;
}


==================================================================

### FUNC 0015eb50 (16 bytes) name=strtol

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long strtol(char *__nptr,char **__endptr,int __base)

{
  long lVar1;
  
  lVar1 = (*(code *)PTR_strtol_005003d8)(__nptr,__endptr,__base);
  return lVar1;
}


==================================================================

### FUNC 0015eb60 (16 bytes) name=ellipse

void cv::ellipse(void)

{
  (*(code *)PTR_ellipse_005003e0)();
  return;
}


==================================================================

### FUNC 0015eb70 (16 bytes) name=NewObject

void _JNIEnv::NewObject(_jclass *param_1,_jmethodID *param_2,...)

{
  (*(code *)PTR_NewObject_005003e8)();
  return;
}


==================================================================

### FUNC 0015eb80 (16 bytes) name=boxFilter

void cv::boxFilter(void)

{
  (*(code *)PTR_boxFilter_005003f0)();
  return;
}


==================================================================

### FUNC 0015eb90 (16 bytes) name=Null

void cv::cuda::Stream::Null(void)

{
  (*(code *)PTR_Null_005003f8)();
  return;
}


==================================================================

### FUNC 0015eba0 (16 bytes) name=~__vmi_class_type_info

void __thiscall
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(__vmi_class_type_info *this)

{
  (*(code *)PTR____vmi_class_type_info_00500400)();
  return;
}


==================================================================

### FUNC 0015ebb0 (16 bytes) name=LoadBufferedDDT

void __thiscall
CMagDevice::LoadBufferedDDT
          (CMagDevice *this,OutputPara *param_1,void *param_2,uint param_3,
          _func_void_uint_uint_uint_void_ptr *param_4,void *param_5)

{
  (*(code *)PTR_LoadBufferedDDT_00500408)();
  return;
}


==================================================================

### FUNC 0015ebc0 (16 bytes) name=cvReleaseImage

void cvReleaseImage(void)

{
  (*(code *)PTR_cvReleaseImage_00500410)();
  return;
}


==================================================================

### FUNC 0015ebd0 (16 bytes) name=deallocate

void __thiscall cv::UMat::deallocate(UMat *this)

{
  (*(code *)PTR_deallocate_00500418)();
  return;
}


==================================================================

### FUNC 0015ebe0 (16 bytes) name=cvCopy

void cvCopy(void)

{
  (*(code *)PTR_cvCopy_00500420)();
  return;
}


==================================================================

### FUNC 0015ebf0 (16 bytes) name=GetRectTemperatureInfo

void CMagDevice::GetRectTemperatureInfo
               (uint param_1,uint param_2,uint param_3,uint param_4,int *param_5)

{
  (*(code *)PTR_GetRectTemperatureInfo_00500428)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015ec00 (16 bytes) name=~bad_alloc

void __thiscall std::bad_alloc::~bad_alloc(bad_alloc *this)

{
  (*(code *)PTR__bad_alloc_00500430)();
  return;
}


==================================================================

### FUNC 0015ec10 (16 bytes) name=getData

void __thiscall cv::TLSDataContainer::getData(TLSDataContainer *this)

{
  (*(code *)PTR_getData_00500438)();
  return;
}


==================================================================

### FUNC 0015ec20 (16 bytes) name=cvCreateMatNDHeader

void cvCreateMatNDHeader(void)

{
  (*(code *)PTR_cvCreateMatNDHeader_00500440)();
  return;
}


==================================================================

### FUNC 0015ec30 (16 bytes) name=FileNodeIterator

void __thiscall
cv::FileNodeIterator::FileNodeIterator(FileNodeIterator *this,FileNodeIterator *param_1)

{
  (*(code *)PTR_FileNodeIterator_00500448)();
  return;
}


==================================================================

### FUNC 0015ec40 (16 bytes) name=unlock

void __thiscall cv::UMatData::unlock(UMatData *this)

{
  (*(code *)PTR_unlock_00500450)();
  return;
}


==================================================================

### FUNC 0015ec50 (16 bytes) name=~__class_type_info

void __thiscall __cxxabiv1::__class_type_info::~__class_type_info(__class_type_info *this)

{
  (*(code *)PTR____class_type_info_00500458)();
  return;
}


==================================================================

### FUNC 0015ec60 (16 bytes) name=cvCreateSeq

void cvCreateSeq(void)

{
  (*(code *)PTR_cvCreateSeq_00500460)();
  return;
}


==================================================================

### FUNC 0015ec70 (16 bytes) name=__android_log_print

void __android_log_print(void)

{
  (*(code *)PTR___android_log_print_00500468)();
  return;
}


==================================================================

### FUNC 0015ec80 (16 bytes) name=~Condition

void __thiscall Condition::~Condition(Condition *this)

{
  (*(code *)PTR__Condition_00500470)();
  return;
}


==================================================================

### FUNC 0015ec90 (16 bytes) name=Image2D

void __thiscall cv::ocl::Image2D::Image2D(Image2D *this,Image2D *param_1)

{
  (*(code *)PTR_Image2D_00500478)();
  return;
}


==================================================================

### FUNC 0015eca0 (16 bytes) name=MAG_SetColorPalette

void MAG_SetColorPalette(void)

{
  (*(code *)PTR_MAG_SetColorPalette_00500480)();
  return;
}


==================================================================

### FUNC 0015ecb0 (16 bytes) name=Get

void __thiscall MStream::Get(MStream *this)

{
  (*(code *)PTR_Get_00500488)();
  return;
}


==================================================================

### FUNC 0015ecc0 (16 bytes) name=ftell

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long ftell(FILE *__stream)

{
  long lVar1;
  
  lVar1 = (*(code *)PTR_ftell_00500490)();
  return lVar1;
}


==================================================================

### FUNC 0015ecd0 (16 bytes) name=getUMat

void cv::_InputArray::getUMat(int param_1)

{
  (*(code *)PTR_getUMat_00500498)(param_1);
  return;
}


==================================================================

### FUNC 0015ece0 (16 bytes) name=GetJint

void GetJint(_JNIEnv *param_1,char *param_2,_jobject *param_3)

{
  (*(code *)PTR_GetJint_005004a0)();
  return;
}


==================================================================

### FUNC 0015ecf0 (16 bytes) name=remove

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int remove(char *__filename)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_remove_005004a8)((int)__filename);
  return iVar1;
}


==================================================================

### FUNC 0015ed00 (16 bytes) name=load

void __thiscall MDTHelper::load(MDTHelper *this,char *param_1)

{
  (*(code *)PTR_load_005004b0)();
  return;
}


==================================================================

### FUNC 0015ed10 (16 bytes) name=SendCmd

void __thiscall CNetComm::SendCmd(CNetComm *this,char *param_1,uint param_2)

{
  (*(code *)PTR_SendCmd_005004b8)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015ed20 (16 bytes) name=fill

void __thiscall
cv::RNG::fill(RNG *this,_InputOutputArray *param_1,int param_2,_InputArray *param_3,
             _InputArray *param_4,bool param_5)

{
  (*(code *)PTR_fill_005004c0)(this,param_1,param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### FUNC 0015ed30 (16 bytes) name=diag

void cv::UMat::diag(int param_1)

{
  (*(code *)PTR_diag_005004c8)(param_1);
  return;
}


==================================================================

### FUNC 0015ed40 (16 bytes) name=towupper

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t towupper(wint_t __wc)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_towupper_005004d0)(__wc);
  return wVar1;
}


==================================================================

### FUNC 0015ed50 (16 bytes) name=GetTemperaturemC

void __thiscall
CFunctions::GetTemperaturemC(CFunctions *this,int *param_1,uint param_2,int param_3,int param_4)

{
  (*(code *)PTR_GetTemperaturemC_005004d8)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015ed60 (16 bytes) name=cvGetHashedKey

void cvGetHashedKey(void)

{
  (*(code *)PTR_cvGetHashedKey_005004e0)();
  return;
}


==================================================================

### FUNC 0015ed70 (16 bytes) name=pthread_mutex_unlock

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_unlock(pthread_mutex_t *__mutex)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutex_unlock_005004e8)((int)__mutex);
  return iVar1;
}


==================================================================

### FUNC 0015ed80 (16 bytes) name=Platform

void __thiscall cv::ocl::Platform::Platform(Platform *this)

{
  (*(code *)PTR_Platform_005004f0)();
  return;
}


==================================================================

### FUNC 0015ed90 (16 bytes) name=libusb_has_capability

void libusb_has_capability(void)

{
  (*(code *)PTR_libusb_has_capability_005004f8)();
  return;
}


==================================================================

### FUNC 0015eda0 (16 bytes) name=MAG_SetImageTransform

void MAG_SetImageTransform(void)

{
  (*(code *)PTR_MAG_SetImageTransform_00500500)();
  return;
}


==================================================================

### FUNC 0015edb0 (16 bytes) name=Mahalanobis

void cv::Mahalanobis(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3)

{
  (*(code *)PTR_Mahalanobis_00500508)();
  return;
}


==================================================================

### FUNC 0015edc0 (16 bytes) name=needed

void __thiscall cv::_OutputArray::needed(_OutputArray *this)

{
  (*(code *)PTR_needed_00500510)();
  return;
}


==================================================================

### FUNC 0015edd0 (16 bytes) name=locateROI

void __thiscall cv::Mat::locateROI(Mat *this,Size_ *param_1,Point_ *param_2)

{
  (*(code *)PTR_locateROI_00500518)();
  return;
}


==================================================================

### FUNC 0015ede0 (16 bytes) name=__dynamic_cast

void __dynamic_cast(void)

{
  (*(code *)PTR___dynamic_cast_00500520)();
  return;
}


==================================================================

### FUNC 0015edf0 (16 bytes) name=sum

void __thiscall cv::sum(cv *this,_InputArray *param_1)

{
  (*(code *)PTR_sum_00500528)();
  return;
}


==================================================================

### FUNC 0015ee00 (16 bytes) name=cvInitTreeNodeIterator

void cvInitTreeNodeIterator(void)

{
  (*(code *)PTR_cvInitTreeNodeIterator_00500530)();
  return;
}


==================================================================

### FUNC 0015ee10 (16 bytes) name=MAG_GetLineTemperatureInfo

void MAG_GetLineTemperatureInfo(void)

{
  (*(code *)PTR_MAG_GetLineTemperatureInfo_00500538)();
  return;
}


==================================================================

### FUNC 0015ee20 (16 bytes) name=operator=

void __thiscall cv::MatExpr::operator=(MatExpr *this,MatExpr *param_1)

{
  (*(code *)PTR_operator__00500540)();
  return;
}


==================================================================

### FUNC 0015ee30 (16 bytes) name=noArray

void cv::noArray(void)

{
  (*(code *)PTR_noArray_00500548)();
  return;
}


==================================================================

### FUNC 0015ee40 (16 bytes) name=dlsym

void dlsym(void)

{
  (*(code *)PTR_dlsym_00500550)();
  return;
}


==================================================================

### FUNC 0015ee50 (16 bytes) name=strcoll

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strcoll(char *__s1,char *__s2)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_strcoll_00500558)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 0015ee60 (16 bytes) name=IFStream

void __thiscall IFStream::IFStream(IFStream *this,char *param_1)

{
  (*(code *)PTR_IFStream_00500560)();
  return;
}


==================================================================

### FUNC 0015ee70 (16 bytes) name=linux_get_device_address

void linux_get_device_address(void)

{
  (*(code *)PTR_linux_get_device_address_00500568)();
  return;
}


==================================================================

### FUNC 0015ee80 (16 bytes) name=ndoffset

void __thiscall cv::UMat::ndoffset(UMat *this,ulong *param_1)

{
  (*(code *)PTR_ndoffset_00500570)();
  return;
}


==================================================================

### FUNC 0015ee90 (16 bytes) name=Write

void __thiscall OFStream::Write(OFStream *this,char *param_1)

{
  (*(code *)PTR_Write_00500578)();
  return;
}


==================================================================

### FUNC 0015eea0 (16 bytes) name=setTo

void __thiscall cv::UMat::setTo(UMat *this,_InputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_setTo_00500580)();
  return;
}


==================================================================

### FUNC 0015eeb0 (16 bytes) name=create

void cv::ocl::Kernel::create(char *param_1,ProgramSource *param_2,String *param_3,String *param_4)

{
  (*(code *)PTR_create_00500588)();
  return;
}


==================================================================

### FUNC 0015eec0 (16 bytes) name=libusb_get_bus_number

void libusb_get_bus_number(void)

{
  (*(code *)PTR_libusb_get_bus_number_00500590)();
  return;
}


==================================================================

### FUNC 0015eed0 (16 bytes) name=MAG_GetCamInfo

void MAG_GetCamInfo(void)

{
  (*(code *)PTR_MAG_GetCamInfo_00500598)();
  return;
}


==================================================================

### FUNC 0015eee0 (16 bytes) name=~OFStream

void __thiscall OFStream::~OFStream(OFStream *this)

{
  (*(code *)PTR__OFStream_005005a0)();
  return;
}


==================================================================

### FUNC 0015eef0 (16 bytes) name=clear

void __thiscall cv::_OutputArray::clear(_OutputArray *this)

{
  (*(code *)PTR_clear_005005a8)();
  return;
}


==================================================================

### FUNC 0015ef00 (16 bytes) name=__cxa_get_globals

void __cxa_get_globals(void)

{
  (*(code *)PTR___cxa_get_globals_005005b0)();
  return;
}


==================================================================

### FUNC 0015ef10 (16 bytes) name=operator<<

void cv::operator<<(FileStorage *param_1,String *param_2)

{
  (*(code *)PTR_operator<<_005005b8)();
  return;
}


==================================================================

### FUNC 0015ef20 (16 bytes) name=cvCreateImage

void cvCreateImage(void)

{
  (*(code *)PTR_cvCreateImage_005005c0)();
  return;
}


==================================================================

### FUNC 0015ef30 (16 bytes) name=GetTemperatureProbe

void CMagDevice::GetTemperatureProbe(uint param_1,uint param_2)

{
  (*(code *)PTR_GetTemperatureProbe_005005c8)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015ef40 (16 bytes) name=pthread_cond_wait

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_wait(pthread_cond_t *__cond,pthread_mutex_t *__mutex)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_wait_005005d0)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 0015ef50 (16 bytes) name=MAG_SaveDDT2Buffer

void MAG_SaveDDT2Buffer(void)

{
  (*(code *)PTR_MAG_SaveDDT2Buffer_005005d8)();
  return;
}


==================================================================

### FUNC 0015ef60 (16 bytes) name=createGpuMatHeader

void __thiscall cv::cuda::HostMem::createGpuMatHeader(HostMem *this)

{
  (*(code *)PTR_createGpuMatHeader_005005e0)();
  return;
}


==================================================================

### FUNC 0015ef70 (16 bytes) name=size

void cv::_InputArray::size(int param_1)

{
  (*(code *)PTR_size_005005e8)(param_1);
  return;
}


==================================================================

### FUNC 0015ef80 (16 bytes) name=operator()

void __thiscall
cv::DefaultDeleter<CvSparseMat>::operator()(DefaultDeleter<CvSparseMat> *this,CvSparseMat *param_1)

{
  (*(code *)PTR_operator___005005f0)();
  return;
}


==================================================================

### FUNC 0015ef90 (16 bytes) name=backProject

void __thiscall cv::PCA::backProject(PCA *this,_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_backProject_005005f8)();
  return;
}


==================================================================

### FUNC 0015efa0 (16 bytes) name=determinant

void cv::determinant(_InputArray *param_1)

{
  (*(code *)PTR_determinant_00500600)();
  return;
}


==================================================================

### FUNC 0015efb0 (16 bytes) name=fillPoly

void cv::fillPoly(void)

{
  (*(code *)PTR_fillPoly_00500608)();
  return;
}


==================================================================

### FUNC 0015efc0 (16 bytes) name=IsLinked

void __thiscall CMagDevice::IsLinked(CMagDevice *this)

{
  (*(code *)PTR_IsLinked_00500610)();
  return;
}


==================================================================

### FUNC 0015efd0 (16 bytes) name=_M_insert_aux

void __thiscall std::vector<std::string,std::allocator<std::string>>::_M_insert_aux(void)

{
  (*(code *)PTR__M_insert_aux_00500618)();
  return;
}


==================================================================

### FUNC 0015efe0 (16 bytes) name=~Queue

void __thiscall cv::ocl::Queue::~Queue(Queue *this)

{
  (*(code *)PTR__Queue_00500620)();
  return;
}


==================================================================

### FUNC 0015eff0 (16 bytes) name=PlatformInfo

void __thiscall cv::ocl::PlatformInfo::PlatformInfo(PlatformInfo *this,PlatformInfo *param_1)

{
  (*(code *)PTR_PlatformInfo_00500628)();
  return;
}


==================================================================

### FUNC 0015f000 (16 bytes) name=deviceVersionMinor

void __thiscall cv::ocl::Device::deviceVersionMinor(Device *this)

{
  (*(code *)PTR_deviceVersionMinor_00500630)();
  return;
}


==================================================================

### FUNC 0015f010 (16 bytes) name=putwc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t putwc(wchar_t __wc,__FILE *__stream)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_putwc_00500638)(__wc);
  return wVar1;
}


==================================================================

### FUNC 0015f020 (16 bytes) name=size

void cv::MatExpr::size(void)

{
  (*(code *)PTR_size_00500640)();
  return;
}


==================================================================

### FUNC 0015f030 (16 bytes) name=StartProcessImage

void StartProcessImage(void)

{
  (*(code *)PTR_StartProcessImage_00500648)();
  return;
}


==================================================================

### FUNC 0015f040 (16 bytes) name=max

void cv::max(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_max_00500650)();
  return;
}


==================================================================

### FUNC 0015f050 (16 bytes) name=cvCreateMatND

void cvCreateMatND(void)

{
  (*(code *)PTR_cvCreateMatND_00500658)();
  return;
}


==================================================================

### FUNC 0015f060 (16 bytes) name=MAG_ProbeDDT

void MAG_ProbeDDT(void)

{
  (*(code *)PTR_MAG_ProbeDDT_00500660)();
  return;
}


==================================================================

### FUNC 0015f070 (16 bytes) name=absdiff

void cv::absdiff(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_absdiff_00500668)();
  return;
}


==================================================================

### FUNC 0015f080 (16 bytes) name=cvCreateGraph

void cvCreateGraph(void)

{
  (*(code *)PTR_cvCreateGraph_00500670)();
  return;
}


==================================================================

### FUNC 0015f090 (16 bytes) name=convertTo

void __thiscall
cv::Mat::convertTo(Mat *this,_OutputArray *param_1,int param_2,double param_3,double param_4)

{
  (*(code *)PTR_convertTo_00500678)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015f0a0 (16 bytes) name=t

void cv::Mat::t(void)

{
  (*(code *)PTR_t_00500680)();
  return;
}


==================================================================

### FUNC 0015f0b0 (16 bytes) name=getTickFrequency

void cv::getTickFrequency(void)

{
  (*(code *)PTR_getTickFrequency_00500688)();
  return;
}


==================================================================

### FUNC 0015f0c0 (16 bytes) name=handle

void __thiscall cv::UMat::handle(UMat *this,int param_1)

{
  (*(code *)PTR_handle_00500690)(this,param_1);
  return;
}


==================================================================

### FUNC 0015f0d0 (16 bytes) name=create

void __thiscall cv::UMat::create(void)

{
  (*(code *)PTR_create_00500698)();
  return;
}


==================================================================

### FUNC 0015f0e0 (16 bytes) name=GetOffset

void GetOffset(char *param_1,ushort *param_2,int param_3,int param_4,int *param_5,int *param_6)

{
  (*(code *)PTR_GetOffset_005006a0)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015f0f0 (16 bytes) name=repeat

void cv::repeat(_InputArray *param_1,int param_2,int param_3,_OutputArray *param_4)

{
  (*(code *)PTR_repeat_005006a8)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f100 (16 bytes) name=gzputs

void gzputs(void)

{
  (*(code *)PTR_gzputs_005006b0)();
  return;
}


==================================================================

### FUNC 0015f110 (16 bytes) name=libusb_get_device_list

void libusb_get_device_list(void)

{
  (*(code *)PTR_libusb_get_device_list_005006b8)();
  return;
}


==================================================================

### FUNC 0015f120 (16 bytes) name=wctob

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wctob(wint_t __c)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_wctob_005006c0)(__c);
  return iVar1;
}


==================================================================

### FUNC 0015f130 (16 bytes) name=dct

void cv::dct(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_dct_005006c8)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f140 (16 bytes) name=diag

void cv::Mat::diag(int param_1)

{
  (*(code *)PTR_diag_005006d0)(param_1);
  return;
}


==================================================================

### FUNC 0015f150 (16 bytes) name=minMaxIdx

void cv::minMaxIdx(_InputArray *param_1,double *param_2,double *param_3,int *param_4,int *param_5,
                  _InputArray *param_6)

{
  (*(code *)PTR_minMaxIdx_005006d8)();
  return;
}


==================================================================

### FUNC 0015f160 (16 bytes) name=UMat

void __thiscall cv::UMat::UMat(UMat *this,UMat *param_1,Range *param_2,Range *param_3)

{
  (*(code *)PTR_UMat_005006e0)();
  return;
}


==================================================================

### FUNC 0015f170 (16 bytes) name=circle

void cv::circle(void)

{
  (*(code *)PTR_circle_005006e8)();
  return;
}


==================================================================

### FUNC 0015f180 (16 bytes) name=cvGraphRemoveEdgeByPtr

void cvGraphRemoveEdgeByPtr(void)

{
  (*(code *)PTR_cvGraphRemoveEdgeByPtr_005006f0)();
  return;
}


==================================================================

### FUNC 0015f190 (16 bytes) name=setUseOptimized

void cv::setUseOptimized(bool param_1)

{
  (*(code *)PTR_setUseOptimized_005006f8)(param_1);
  return;
}


==================================================================

### FUNC 0015f1a0 (16 bytes) name=cvCreateChildMemStorage

void cvCreateChildMemStorage(void)

{
  (*(code *)PTR_cvCreateChildMemStorage_00500700)();
  return;
}


==================================================================

### FUNC 0015f1b0 (16 bytes) name=eye

void __thiscall cv::UMat::eye(void)

{
  (*(code *)PTR_eye_00500708)();
  return;
}


==================================================================

### FUNC 0015f1c0 (16 bytes) name=transform

void cv::transform(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  (*(code *)PTR_transform_00500710)();
  return;
}


==================================================================

### FUNC 0015f1d0 (16 bytes) name=ndevices

void __thiscall cv::ocl::Context::ndevices(Context *this)

{
  (*(code *)PTR_ndevices_00500718)();
  return;
}


==================================================================

### FUNC 0015f1e0 (16 bytes) name=poll

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int poll(pollfd *__fds,nfds_t __nfds,int __timeout)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_poll_00500720)((int)__fds,__nfds,__timeout);
  return iVar1;
}


==================================================================

### FUNC 0015f1f0 (16 bytes) name=pthread_cond_timedwait

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_timedwait(pthread_cond_t *__cond,pthread_mutex_t *__mutex,timespec *__abstime)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_timedwait_00500728)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 0015f200 (16 bytes) name=cvWriteReal

void cvWriteReal(void)

{
  (*(code *)PTR_cvWriteReal_00500730)();
  return;
}


==================================================================

### FUNC 0015f210 (16 bytes) name=clipLine

void cv::clipLine(void)

{
  (*(code *)PTR_clipLine_00500738)();
  return;
}


==================================================================

### FUNC 0015f220 (16 bytes) name=MD5Transform

void md5::MD5Transform(uint *param_1,uchar *param_2)

{
  (*(code *)PTR_MD5Transform_00500740)();
  return;
}


==================================================================

### FUNC 0015f230 (16 bytes) name=mixChannels

void cv::mixChannels(Mat *param_1,ulong param_2,Mat *param_3,ulong param_4,int *param_5,
                    ulong param_6)

{
  (*(code *)PTR_mixChannels_00500748)();
  return;
}


==================================================================

### FUNC 0015f240 (16 bytes) name=pthread_create

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_create(pthread_t *__newthread,pthread_attr_t *__attr,__start_routine *__start_routine,
                  void *__arg)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_create_00500750)((int)__newthread);
  return iVar1;
}


==================================================================

### FUNC 0015f250 (16 bytes) name=log

void cv::log(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_log_00500758)();
  return;
}


==================================================================

### FUNC 0015f260 (16 bytes) name=ResizeBMP_2to3

void __thiscall CFunctions::ResizeBMP_2to3(CFunctions *this)

{
  (*(code *)PTR_ResizeBMP_2to3_00500760)();
  return;
}


==================================================================

### FUNC 0015f270 (16 bytes) name=cvNextTreeNode

void cvNextTreeNode(void)

{
  (*(code *)PTR_cvNextTreeNode_00500768)();
  return;
}


==================================================================

### FUNC 0015f280 (16 bytes) name=add

void __thiscall cv::MatOp::add(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  (*(code *)PTR_add_00500770)();
  return;
}


==================================================================

### FUNC 0015f290 (16 bytes) name=~MatExpr

void __thiscall cv::MatExpr::~MatExpr(MatExpr *this)

{
  (*(code *)PTR__MatExpr_00500778)();
  return;
}


==================================================================

### FUNC 0015f2a0 (16 bytes) name=imageFromBufferSupport

void __thiscall cv::ocl::Device::imageFromBufferSupport(Device *this)

{
  (*(code *)PTR_imageFromBufferSupport_00500780)();
  return;
}


==================================================================

### FUNC 0015f2b0 (16 bytes) name=cvScalarToRawData

void cvScalarToRawData(void)

{
  (*(code *)PTR_cvScalarToRawData_00500788)();
  return;
}


==================================================================

### FUNC 0015f2c0 (16 bytes) name=operator*

void __thiscall cv::operator*(cv *this,Mat *param_1,double param_2)

{
  (*(code *)PTR_operator__00500790)();
  return;
}


==================================================================

### FUNC 0015f2d0 (16 bytes) name=pthread_cond_broadcast

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_broadcast(pthread_cond_t *__cond)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_broadcast_00500798)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 0015f2e0 (16 bytes) name=fwrite

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t fwrite(void *__ptr,size_t __size,size_t __n,FILE *__s)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_fwrite_005007a0)();
  return sVar1;
}


==================================================================

### FUNC 0015f2f0 (16 bytes) name=cvCreateMat

void cvCreateMat(void)

{
  (*(code *)PTR_cvCreateMat_005007a8)();
  return;
}


==================================================================

### FUNC 0015f300 (16 bytes) name=MatExpr

void __thiscall cv::MatExpr::MatExpr(MatExpr *this)

{
  (*(code *)PTR_MatExpr_005007b0)();
  return;
}


==================================================================

### FUNC 0015f310 (16 bytes) name=defaultAllocator

void cv::cuda::GpuMat::defaultAllocator(void)

{
  (*(code *)PTR_defaultAllocator_005007b8)();
  return;
}


==================================================================

### FUNC 0015f320 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_005007c0)();
  return;
}


==================================================================

### FUNC 0015f330 (16 bytes) name=~SVD

void __thiscall cv::SVD::~SVD(SVD *this)

{
  (*(code *)PTR__SVD_005007c8)();
  return;
}


==================================================================

### FUNC 0015f340 (16 bytes) name=SaveBMP

void __thiscall CFunctions::SaveBMP(void)

{
  (*(code *)PTR_SaveBMP_005007d0)();
  return;
}


==================================================================

### FUNC 0015f350 (16 bytes) name=CallObjectMethod

void _JNIEnv::CallObjectMethod(_jobject *param_1,_jmethodID *param_2,...)

{
  (*(code *)PTR_CallObjectMethod_005007d8)();
  return;
}


==================================================================

### FUNC 0015f360 (16 bytes) name=cvEndWriteStruct

void cvEndWriteStruct(void)

{
  (*(code *)PTR_cvEndWriteStruct_005007e0)();
  return;
}


==================================================================

### FUNC 0015f370 (16 bytes) name=EstimateUnderArmTempFromForeheadRect

void CMagDevice::EstimateUnderArmTempFromForeheadRect
               (uint param_1,uint param_2,uint param_3,uint param_4)

{
  (*(code *)PTR_EstimateUnderArmTempFromForeheadRect_005007e8)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015f380 (16 bytes) name=available

void __thiscall cv::ocl::Device::available(Device *this)

{
  (*(code *)PTR_available_005007f0)();
  return;
}


==================================================================

### FUNC 0015f390 (16 bytes) name=cvOpenFileStorage

void cvOpenFileStorage(void)

{
  (*(code *)PTR_cvOpenFileStorage_005007f8)();
  return;
}


==================================================================

### FUNC 0015f3a0 (16 bytes) name=GenerateVolatileLens

void __thiscall CFunctions::GenerateVolatileLens(CFunctions *this)

{
  (*(code *)PTR_GenerateVolatileLens_00500800)();
  return;
}


==================================================================

### FUNC 0015f3b0 (16 bytes) name=GetSTDFrame

void __thiscall CSmoother::GetSTDFrame(CSmoother *this)

{
  (*(code *)PTR_GetSTDFrame_00500808)();
  return;
}


==================================================================

### FUNC 0015f3c0 (16 bytes) name=mmap

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * mmap(void *__addr,size_t __len,int __prot,int __flags,int __fd,__off_t __offset)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_mmap_00500810)(__addr,__len,__prot,__flags,__fd);
  return pvVar1;
}


==================================================================

### FUNC 0015f3d0 (16 bytes) name=line

void cv::line(void)

{
  (*(code *)PTR_line_00500818)();
  return;
}


==================================================================

### FUNC 0015f3e0 (16 bytes) name=reshape

void cv::cuda::HostMem::reshape(int param_1,int param_2)

{
  (*(code *)PTR_reshape_00500820)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015f3f0 (16 bytes) name=libusb_alloc_transfer

void libusb_alloc_transfer(void)

{
  (*(code *)PTR_libusb_alloc_transfer_00500828)();
  return;
}


==================================================================

### FUNC 0015f400 (16 bytes) name=LocalMap7x7_Simple

void __thiscall
CFunctions::LocalMap7x7_Simple(CFunctions *this,int *param_1,ushort *param_2,uint param_3)

{
  (*(code *)PTR_LocalMap7x7_Simple_00500830)();
  return;
}


==================================================================

### FUNC 0015f410 (16 bytes) name=strcpy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strcpy(char *__dest,char *__src)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strcpy_00500838)();
  return pcVar1;
}


==================================================================

### FUNC 0015f420 (16 bytes) name=fileno

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fileno(FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fileno_00500840)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 0015f430 (16 bytes) name=newBitmap

void newBitmap(_JNIEnv *param_1,_jobject **param_2,int param_3,int param_4)

{
  (*(code *)PTR_newBitmap_00500848)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015f440 (16 bytes) name=findTarget

void ImageProc::findTarget
               (uint param_1,uchar *param_2,int param_3,int param_4,int param_5,uint *param_6,
               int param_7)

{
  (*(code *)PTR_findTarget_00500850)(param_1,param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 0015f450 (16 bytes) name=operator=

void __thiscall cv::ocl::PlatformInfo::operator=(PlatformInfo *this,PlatformInfo *param_1)

{
  (*(code *)PTR_operator__00500858)();
  return;
}


==================================================================

### FUNC 0015f460 (16 bytes) name=GetRemoteInfo

void __thiscall CMagDevice::GetRemoteInfo(CMagDevice *this)

{
  (*(code *)PTR_GetRemoteInfo_00500860)();
  return;
}


==================================================================

### FUNC 0015f470 (16 bytes) name=vsnprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int vsnprintf(char *__s,size_t __maxlen,char *__format,__gnuc_va_list __arg)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_vsnprintf_00500868)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 0015f480 (16 bytes) name=Program

void __thiscall cv::ocl::Program::Program(Program *this,Program *param_1)

{
  (*(code *)PTR_Program_00500870)();
  return;
}


==================================================================

### FUNC 0015f490 (16 bytes) name=operator.delete[]

void operator_delete__(void *param_1)

{
  (*(code *)PTR_operator_delete___00500878)();
  return;
}


==================================================================

### FUNC 0015f4a0 (16 bytes) name=_M_insert_aux

void __thiscall std::vector<int,std::allocator<int>>::_M_insert_aux(void)

{
  (*(code *)PTR__M_insert_aux_00500880)();
  return;
}


==================================================================

### FUNC 0015f4b0 (16 bytes) name=Mirror

void __thiscall CFunctions::Mirror(CFunctions *this,uint param_1)

{
  (*(code *)PTR_Mirror_00500888)(this,param_1);
  return;
}


==================================================================

### FUNC 0015f4c0 (16 bytes) name=newNode

void __thiscall cv::SparseMat::newNode(SparseMat *this,int *param_1,ulong param_2)

{
  (*(code *)PTR_newNode_00500890)();
  return;
}


==================================================================

### FUNC 0015f4d0 (16 bytes) name=libusb_error_name

void libusb_error_name(void)

{
  (*(code *)PTR_libusb_error_name_00500898)();
  return;
}


==================================================================

### FUNC 0015f4e0 (16 bytes) name=normalize

void cv::normalize(_InputArray *param_1,_InputOutputArray *param_2,double param_3,double param_4,
                  int param_5,int param_6,_InputArray *param_7)

{
  (*(code *)PTR_normalize_005008a0)(param_1,param_2,param_5,param_6);
  return;
}


==================================================================

### FUNC 0015f4f0 (16 bytes) name=cvCreateSeqBlock

void cvCreateSeqBlock(void)

{
  (*(code *)PTR_cvCreateSeqBlock_005008a8)();
  return;
}


==================================================================

### FUNC 0015f500 (16 bytes) name=libusb_bulk_transfer

void libusb_bulk_transfer(void)

{
  (*(code *)PTR_libusb_bulk_transfer_005008b0)();
  return;
}


==================================================================

### FUNC 0015f510 (16 bytes) name=_S_select<std::allocator<cv::Point_<int>>const,void>

void std::allocator_traits<std::allocator<cv::Point_<int>>>::
     _S_select<std::allocator<cv::Point_<int>>const,void>(allocator_conflict *param_1,...)

{
  (*(code *)PTR__S_select<std::allocator<cv::Point_<int>>const,void>_005008b8)();
  return;
}


==================================================================

### FUNC 0015f520 (16 bytes) name=MAG_TriggerFFC

void MAG_TriggerFFC(void)

{
  (*(code *)PTR_MAG_TriggerFFC_005008c0)();
  return;
}


==================================================================

### FUNC 0015f530 (16 bytes) name=ProgramSource

void __thiscall cv::ocl::ProgramSource::ProgramSource(ProgramSource *this)

{
  (*(code *)PTR_ProgramSource_005008c8)();
  return;
}


==================================================================

### FUNC 0015f540 (16 bytes) name=clear

void __thiscall cv::SparseMat::Hdr::clear(Hdr *this)

{
  (*(code *)PTR_clear_005008d0)();
  return;
}


==================================================================

### FUNC 0015f550 (16 bytes) name=operator()

void __thiscall cv::SVD::operator()(SVD *this,_InputArray *param_1,int param_2)

{
  (*(code *)PTR_operator___005008d8)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015f560 (16 bytes) name=lrint

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long lrint(double __x)

{
  long lVar1;
  
  lVar1 = (*(code *)PTR_lrint_005008e0)();
  return lVar1;
}


==================================================================

### FUNC 0015f570 (16 bytes) name=~CFunctions

void __thiscall CFunctions::~CFunctions(CFunctions *this)

{
  (*(code *)PTR__CFunctions_005008e8)();
  return;
}


==================================================================

### FUNC 0015f580 (16 bytes) name=wmemcmp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wmemcmp(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_wmemcmp_005008f0)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 0015f590 (16 bytes) name=FixTemperature

void CMagDevice::FixTemperature(int param_1,float param_2,uint param_3,uint param_4)

{
  (*(code *)PTR_FixTemperature_005008f8)(param_1,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015f5a0 (16 bytes) name=MAG_SetStorageDir

void MAG_SetStorageDir(void)

{
  (*(code *)PTR_MAG_SetStorageDir_00500900)();
  return;
}


==================================================================

### FUNC 0015f5b0 (16 bytes) name=countNonZero

void cv::countNonZero(_InputArray *param_1)

{
  (*(code *)PTR_countNonZero_00500908)();
  return;
}


==================================================================

### FUNC 0015f5c0 (16 bytes) name=operator++

void __thiscall cv::FileNodeIterator::operator++(FileNodeIterator *this)

{
  (*(code *)PTR_operator___00500910)();
  return;
}


==================================================================

### FUNC 0015f5d0 (16 bytes) name=cvUnregisterType

void cvUnregisterType(void)

{
  (*(code *)PTR_cvUnregisterType_00500918)();
  return;
}


==================================================================

### FUNC 0015f5e0 (16 bytes) name=fixedSize

void __thiscall cv::_OutputArray::fixedSize(_OutputArray *this)

{
  (*(code *)PTR_fixedSize_00500920)();
  return;
}


==================================================================

### FUNC 0015f5f0 (16 bytes) name=UseMask

void __thiscall CFunctions::UseMask(CFunctions *this,int param_1)

{
  (*(code *)PTR_UseMask_00500928)(this,param_1);
  return;
}


==================================================================

### FUNC 0015f600 (16 bytes) name=reshape

void cv::cuda::GpuMat::reshape(int param_1,int param_2)

{
  (*(code *)PTR_reshape_00500930)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015f610 (16 bytes) name=getDDT

void __thiscall MDTHelper::getDDT(MDTHelper *this,uchar **param_1)

{
  (*(code *)PTR_getDDT_00500938)();
  return;
}


==================================================================

### FUNC 0015f620 (16 bytes) name=SetFixPara

void __thiscall CMagDevice::SetFixPara(CMagDevice *this,struct_FixPara *param_1)

{
  (*(code *)PTR_SetFixPara_00500940)();
  return;
}


==================================================================

### FUNC 0015f630 (16 bytes) name=Split

void MStream::Split(char param_1)

{
  (*(code *)PTR_Split_00500948)(param_1);
  return;
}


==================================================================

### FUNC 0015f640 (16 bytes) name=copyToSparseMat

void __thiscall CvSparseMat::copyToSparseMat(CvSparseMat *this,SparseMat *param_1)

{
  (*(code *)PTR_copyToSparseMat_00500950)();
  return;
}


==================================================================

### FUNC 0015f650 (16 bytes) name=LinkCamera

void CMagDevice::LinkCamera(uint param_1)

{
  (*(code *)PTR_LinkCamera_00500958)(param_1);
  return;
}


==================================================================

### FUNC 0015f660 (16 bytes) name=resetVertexArray

void __thiscall cv::ogl::Arrays::resetVertexArray(Arrays *this)

{
  (*(code *)PTR_resetVertexArray_00500960)();
  return;
}


==================================================================

### FUNC 0015f670 (16 bytes) name=_Unwind_Find_FDE

void _Unwind_Find_FDE(void)

{
  (*(code *)PTR__Unwind_Find_FDE_00500968)();
  return;
}


==================================================================

### FUNC 0015f680 (16 bytes) name=drawContours

void cv::drawContours(void)

{
  (*(code *)PTR_drawContours_00500970)();
  return;
}


==================================================================

### FUNC 0015f690 (16 bytes) name=compute

void cv::SVD::compute(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                     _OutputArray *param_4,int param_5)

{
  (*(code *)PTR_compute_00500978)();
  return;
}


==================================================================

### FUNC 0015f6a0 (16 bytes) name=borderInterpolate

void cv::borderInterpolate(int param_1,int param_2,int param_3)

{
  (*(code *)PTR_borderInterpolate_00500980)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f6b0 (16 bytes) name=LoadCalibrationTable

void __thiscall CFunctions::LoadCalibrationTable(CFunctions *this,char *param_1)

{
  (*(code *)PTR_LoadCalibrationTable_00500988)();
  return;
}


==================================================================

### FUNC 0015f6c0 (16 bytes) name=setFilterPara

void __thiscall ImageProc::setFilterPara(ImageProc *this,FilterPara *param_1)

{
  (*(code *)PTR_setFilterPara_00500990)();
  return;
}


==================================================================

### FUNC 0015f6d0 (16 bytes) name=syscall

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long syscall(long __sysno,...)

{
  long lVar1;
  
  lVar1 = (*(code *)PTR_syscall_00500998)();
  return lVar1;
}


==================================================================

### FUNC 0015f6e0 (16 bytes) name=memset

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memset(void *__s,int __c,size_t __n)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_memset_005009a0)(__s,__c);
  return pvVar1;
}


==================================================================

### FUNC 0015f6f0 (16 bytes) name=MAG_GetRgnTemperatureInfo

void MAG_GetRgnTemperatureInfo(void)

{
  (*(code *)PTR_MAG_GetRgnTemperatureInfo_005009a8)();
  return;
}


==================================================================

### FUNC 0015f700 (16 bytes) name=pthread_mutex_init

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_init(pthread_mutex_t *__mutex,pthread_mutexattr_t *__mutexattr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutex_init_005009b0)((int)__mutex);
  return iVar1;
}


==================================================================

### FUNC 0015f710 (16 bytes) name=fdopen

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

FILE * fdopen(int __fd,char *__modes)

{
  FILE *pFVar1;
  
  pFVar1 = (FILE *)(*(code *)PTR_fdopen_005009b8)(__fd);
  return pFVar1;
}


==================================================================

### FUNC 0015f720 (16 bytes) name=setIdentity

void cv::setIdentity(_InputOutputArray *param_1,Scalar_ *param_2)

{
  (*(code *)PTR_setIdentity_005009c0)();
  return;
}


==================================================================

### FUNC 0015f730 (16 bytes) name=divide

void __thiscall cv::MatOp::divide(MatOp *this,double param_1,MatExpr *param_2,MatExpr *param_3)

{
  (*(code *)PTR_divide_005009c8)();
  return;
}


==================================================================

### FUNC 0015f740 (16 bytes) name=__register_frame_info_table

void __register_frame_info_table(void)

{
  (*(code *)PTR___register_frame_info_table_005009d0)();
  return;
}


==================================================================

### FUNC 0015f750 (16 bytes) name=cvGetSeqReaderPos

void cvGetSeqReaderPos(void)

{
  (*(code *)PTR_cvGetSeqReaderPos_005009d8)();
  return;
}


==================================================================

### FUNC 0015f760 (16 bytes) name=usbi_log_v

void usbi_log_v(void)

{
  (*(code *)PTR_usbi_log_v_005009e0)();
  return;
}


==================================================================

### FUNC 0015f770 (16 bytes) name=dlopen

void dlopen(void)

{
  (*(code *)PTR_dlopen_005009e8)();
  return;
}


==================================================================

### FUNC 0015f780 (16 bytes) name=getStructuringElement

void __thiscall cv::getStructuringElement(void)

{
  (*(code *)PTR_getStructuringElement_005009f0)();
  return;
}


==================================================================

### FUNC 0015f790 (16 bytes) name=merge

void cv::merge(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_merge_005009f8)();
  return;
}


==================================================================

### FUNC 0015f7a0 (16 bytes) name=solvePoly

void cv::solvePoly(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_solvePoly_00500a00)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f7b0 (16 bytes) name=pthread_cond_signal

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_signal(pthread_cond_t *__cond)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_signal_00500a08)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 0015f7c0 (16 bytes) name=MAG_GetOutputColorBardata

void MAG_GetOutputColorBardata(void)

{
  (*(code *)PTR_MAG_GetOutputColorBardata_00500a10)();
  return;
}


==================================================================

### FUNC 0015f7d0 (16 bytes) name=name

void cv::ocl::Device::name(void)

{
  (*(code *)PTR_name_00500a18)();
  return;
}


==================================================================

### FUNC 0015f7e0 (16 bytes) name=operator=

void __thiscall cv::ocl::Device::operator=(Device *this,Device *param_1)

{
  (*(code *)PTR_operator__00500a20)();
  return;
}


==================================================================

### FUNC 0015f7f0 (16 bytes) name=MAG_GetTemperatureData

void MAG_GetTemperatureData(void)

{
  (*(code *)PTR_MAG_GetTemperatureData_00500a28)();
  return;
}


==================================================================

### FUNC 0015f800 (16 bytes) name=cvWriteString

void cvWriteString(void)

{
  (*(code *)PTR_cvWriteString_00500a30)();
  return;
}


==================================================================

### FUNC 0015f810 (16 bytes) name=compare

void cv::compare(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  (*(code *)PTR_compare_00500a38)();
  return;
}


==================================================================

### FUNC 0015f820 (16 bytes) name=write

void cv::write(FileStorage *param_1,String *param_2,Mat *param_3)

{
  (*(code *)PTR_write_00500a40)();
  return;
}


==================================================================

### FUNC 0015f830 (16 bytes) name=SearchSeparateLine

void __thiscall CFunctions::SearchSeparateLine(CFunctions *this)

{
  (*(code *)PTR_SearchSeparateLine_00500a48)();
  return;
}


==================================================================

### FUNC 0015f840 (16 bytes) name=cvClearMemStorage

void cvClearMemStorage(void)

{
  (*(code *)PTR_cvClearMemStorage_00500a50)();
  return;
}


==================================================================

### FUNC 0015f850 (16 bytes) name=GetYUV420

void GetYUV420(uchar *param_1,int param_2,int param_3,tagRGBQUAD *param_4,uint *param_5,
              uint *param_6)

{
  (*(code *)PTR_GetYUV420_00500a58)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f860 (16 bytes) name=cvError

void cvError(void)

{
  (*(code *)PTR_cvError_00500a60)();
  return;
}


==================================================================

### FUNC 0015f870 (16 bytes) name=__google_potentially_blocking_region_begin

void __google_potentially_blocking_region_begin(void)

{
  (*(code *)PTR___google_potentially_blocking_region_begin_00500a68)();
  return;
}


==================================================================

### FUNC 0015f880 (16 bytes) name=gzrewind

void gzrewind(void)

{
  (*(code *)PTR_gzrewind_00500a70)();
  return;
}


==================================================================

### FUNC 0015f890 (16 bytes) name=ptr

void __thiscall cv::ocl::Context::ptr(Context *this)

{
  (*(code *)PTR_ptr_00500a78)();
  return;
}


==================================================================

### FUNC 0015f8a0 (16 bytes) name=batchDistance

void cv::batchDistance(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                      _OutputArray *param_5,int param_6,int param_7,_InputArray *param_8,int param_9
                      ,bool param_10)

{
  (*(code *)PTR_batchDistance_00500a80)();
  return;
}


==================================================================

### FUNC 0015f8b0 (16 bytes) name=operator<<

void __thiscall MStream::operator<<(MStream *this,char *param_1)

{
  (*(code *)PTR_operator<<_00500a88)();
  return;
}


==================================================================

### FUNC 0015f8c0 (16 bytes) name=canCreateAlias

void cv::ocl::Image2D::canCreateAlias(UMat *param_1)

{
  (*(code *)PTR_canCreateAlias_00500a90)();
  return;
}


==================================================================

### FUNC 0015f8d0 (16 bytes) name=__deregister_frame_info

void __deregister_frame_info(void)

{
  (*(code *)PTR___deregister_frame_info_00500a98)();
  return;
}


==================================================================

### FUNC 0015f8e0 (16 bytes) name=operator=

void __thiscall cv::UMat::operator=(UMat *this,Scalar_ *param_1)

{
  (*(code *)PTR_operator__00500aa0)();
  return;
}


==================================================================

### FUNC 0015f8f0 (16 bytes) name=__lttf2

void __lttf2(void)

{
  (*(code *)PTR___lttf2_00500aa8)();
  return;
}


==================================================================

### FUNC 0015f900 (16 bytes) name=Calibration

void __thiscall CFunctions::Calibration(CFunctions *this,ushort *param_1)

{
  (*(code *)PTR_Calibration_00500ab0)();
  return;
}


==================================================================

### FUNC 0015f910 (16 bytes) name=stat

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int stat(char *__file,stat *__buf)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_stat_00500ab8)((int)__file);
  return iVar1;
}


==================================================================

### FUNC 0015f920 (16 bytes) name=ReleaseMemory

void __thiscall CFunctions::ReleaseMemory(CFunctions *this)

{
  (*(code *)PTR_ReleaseMemory_00500ac0)();
  return;
}


==================================================================

### FUNC 0015f930 (16 bytes) name=CFunctions

void __thiscall CFunctions::CFunctions(CFunctions *this)

{
  (*(code *)PTR_CFunctions_00500ac8)();
  return;
}


==================================================================

### FUNC 0015f940 (16 bytes) name=integral

void cv::integral(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_integral_00500ad0)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015f950 (16 bytes) name=MutexLock

void __thiscall MutexLock::MutexLock(MutexLock *this)

{
  (*(code *)PTR_MutexLock_00500ad8)();
  return;
}


==================================================================

### FUNC 0015f960 (16 bytes) name=~Mutex

void __thiscall cv::Mutex::~Mutex(Mutex *this)

{
  (*(code *)PTR__Mutex_00500ae0)();
  return;
}


==================================================================

### FUNC 0015f970 (16 bytes) name=pthread_getspecific

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * pthread_getspecific(pthread_key_t __key)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_pthread_getspecific_00500ae8)(__key);
  return pvVar1;
}


==================================================================

### FUNC 0015f980 (16 bytes) name=LineIterator

void __thiscall cv::LineIterator::LineIterator(void)

{
  (*(code *)PTR_LineIterator_00500af0)();
  return;
}


==================================================================

### FUNC 0015f990 (16 bytes) name=wmemchr

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemchr(wchar_t *__s,wchar_t __c,size_t __n)

{
  wchar_t *pwVar1;
  
  pwVar1 = (wchar_t *)(*(code *)PTR_wmemchr_00500af8)(__s,__c);
  return pwVar1;
}


==================================================================

### FUNC 0015f9a0 (16 bytes) name=libusb_set_configuration

void libusb_set_configuration(void)

{
  (*(code *)PTR_libusb_set_configuration_00500b00)();
  return;
}


==================================================================

### FUNC 0015f9b0 (16 bytes) name=error

void cv::error(int param_1,String *param_2,char *param_3,char *param_4,int param_5)

{
  (*(code *)PTR_error_00500b08)(param_1);
  return;
}


==================================================================

### FUNC 0015f9c0 (16 bytes) name=getThreadNum

void cv::getThreadNum(void)

{
  (*(code *)PTR_getThreadNum_00500b10)();
  return;
}


==================================================================

### FUNC 0015f9d0 (16 bytes) name=cvSetSeqBlockSize

void cvSetSeqBlockSize(void)

{
  (*(code *)PTR_cvSetSeqBlockSize_00500b18)();
  return;
}


==================================================================

### FUNC 0015f9e0 (16 bytes) name=__register_frame_info

void __register_frame_info(void)

{
  (*(code *)PTR___register_frame_info_00500b20)();
  return;
}


==================================================================

### FUNC 0015f9f0 (16 bytes) name=divide

void cv::divide(double param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  (*(code *)PTR_divide_00500b28)(param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015fa00 (16 bytes) name=bitwise_or

void cv::bitwise_or(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                   _InputArray *param_4)

{
  (*(code *)PTR_bitwise_or_00500b30)();
  return;
}


==================================================================

### FUNC 0015fa10 (16 bytes) name=ReleaseMemory

void __thiscall CVideoFunctions::ReleaseMemory(CVideoFunctions *this)

{
  (*(code *)PTR_ReleaseMemory_00500b38)();
  return;
}


==================================================================

### FUNC 0015fa20 (16 bytes) name=exception_ptr

void __thiscall std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this)

{
  (*(code *)PTR_exception_ptr_00500b40)();
  return;
}


==================================================================

### FUNC 0015fa30 (16 bytes) name=cvRegisterType

void cvRegisterType(void)

{
  (*(code *)PTR_cvRegisterType_00500b48)();
  return;
}


==================================================================

### FUNC 0015fa40 (16 bytes) name=channels

void __thiscall cv::_InputArray::channels(_InputArray *this,int param_1)

{
  (*(code *)PTR_channels_00500b50)(this,param_1);
  return;
}


==================================================================

### FUNC 0015fa50 (16 bytes) name=split

void cv::split(Mat *param_1,Mat *param_2)

{
  (*(code *)PTR_split_00500b58)();
  return;
}


==================================================================

### FUNC 0015fa60 (16 bytes) name=~bad_array_new_length

void __thiscall std::bad_array_new_length::~bad_array_new_length(bad_array_new_length *this)

{
  (*(code *)PTR__bad_array_new_length_00500b60)();
  return;
}


==================================================================

### FUNC 0015fa70 (16 bytes) name=MAG_Pause

void MAG_Pause(void)

{
  (*(code *)PTR_MAG_Pause_00500b68)();
  return;
}


==================================================================

### FUNC 0015fa80 (16 bytes) name=cvPtr1D

void cvPtr1D(void)

{
  (*(code *)PTR_cvPtr1D_00500b70)();
  return;
}


==================================================================

### FUNC 0015fa90 (16 bytes) name=acos

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double acos(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_acos_00500b78)();
  return dVar1;
}


==================================================================

### FUNC 0015faa0 (16 bytes) name=cvCreateSparseMat

void cvCreateSparseMat(SparseMat *param_1)

{
  (*(code *)PTR_cvCreateSparseMat_00500b80)();
  return;
}


==================================================================

### FUNC 0015fab0 (16 bytes) name=wait

void __thiscall Condition::wait(Condition *this)

{
  (*(code *)PTR_wait_00500b88)();
  return;
}


==================================================================

### FUNC 0015fac0 (16 bytes) name=usbi_handle_disconnect

void usbi_handle_disconnect(void)

{
  (*(code *)PTR_usbi_handle_disconnect_00500b90)();
  return;
}


==================================================================

### FUNC 0015fad0 (16 bytes) name=cvStartReadChainPoints

void cvStartReadChainPoints(void)

{
  (*(code *)PTR_cvStartReadChainPoints_00500b98)();
  return;
}


==================================================================

### FUNC 0015fae0 (16 bytes) name=PushFrameAve

void __thiscall CSmoother::PushFrameAve(CSmoother *this,ushort *param_1,uint param_2)

{
  (*(code *)PTR_PushFrameAve_00500ba0)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015faf0 (16 bytes) name=__cxa_begin_catch

void __cxa_begin_catch(void)

{
  (*(code *)PTR___cxa_begin_catch_00500ba8)();
  return;
}


==================================================================

### FUNC 0015fb00 (16 bytes) name=randShuffle

void cv::randShuffle(_InputOutputArray *param_1,double param_2,RNG *param_3)

{
  (*(code *)PTR_randShuffle_00500bb0)();
  return;
}


==================================================================

### FUNC 0015fb10 (16 bytes) name=OFStream

void __thiscall OFStream::OFStream(OFStream *this,char *param_1,bool param_2)

{
  (*(code *)PTR_OFStream_00500bb8)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015fb20 (16 bytes) name=getStdAllocator

void cv::UMat::getStdAllocator(void)

{
  (*(code *)PTR_getStdAllocator_00500bc0)();
  return;
}


==================================================================

### FUNC 0015fb30 (16 bytes) name=cvInitImageHeader

void cvInitImageHeader(void)

{
  (*(code *)PTR_cvInitImageHeader_00500bc8)();
  return;
}


==================================================================

### FUNC 0015fb40 (16 bytes) name=DecodeCmd

void __thiscall CNetComm::DecodeCmd(void)

{
  (*(code *)PTR_DecodeCmd_00500bd0)();
  return;
}


==================================================================

### FUNC 0015fb50 (16 bytes) name=__cxa_rethrow

void __cxa_rethrow(void)

{
  (*(code *)PTR___cxa_rethrow_00500bd8)();
  return;
}


==================================================================

### FUNC 0015fb60 (16 bytes) name=ioctl

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int ioctl(int __fd,ulong __request,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_ioctl_00500be0)(__fd);
  return iVar1;
}


==================================================================

### FUNC 0015fb70 (16 bytes) name=eigen

void cv::eigen(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_eigen_00500be8)();
  return;
}


==================================================================

### FUNC 0015fb80 (16 bytes) name=GetRgnTemperatureInfo

void CMagDevice::GetRgnTemperatureInfo(uint *param_1,uint param_2,int *param_3)

{
  (*(code *)PTR_GetRgnTemperatureInfo_00500bf0)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0015fb90 (16 bytes) name=boundingRect

void __thiscall cv::boundingRect(cv *this,_InputArray *param_1)

{
  (*(code *)PTR_boundingRect_00500bf8)();
  return;
}


==================================================================

### FUNC 0015fba0 (16 bytes) name=~CMagDevice

void __thiscall CMagDevice::~CMagDevice(CMagDevice *this)

{
  (*(code *)PTR__CMagDevice_00500c00)();
  return;
}


==================================================================

### FUNC 0015fbb0 (16 bytes) name=MAG_GetTemperatureProbe

void MAG_GetTemperatureProbe(void)

{
  (*(code *)PTR_MAG_GetTemperatureProbe_00500c08)();
  return;
}


==================================================================

### FUNC 0015fbc0 (16 bytes) name=_M_insert_aux

void __thiscall std::vector<char,std::allocator<char>>::_M_insert_aux(void)

{
  (*(code *)PTR__M_insert_aux_00500c10)();
  return;
}


==================================================================

### FUNC 0015fbd0 (16 bytes) name=abort

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void abort(void)

{
  (*(code *)PTR_abort_00500c18)();
  return;
}


==================================================================

### FUNC 0015fbe0 (16 bytes) name=WriteStructContext

void __thiscall
cv::internal::WriteStructContext::WriteStructContext
          (WriteStructContext *this,FileStorage *param_1,String *param_2,int param_3,String *param_4
          )

{
  (*(code *)PTR_WriteStructContext_00500c20)();
  return;
}


==================================================================

### FUNC 0015fbf0 (16 bytes) name=__cxa_throw

void __cxa_throw(void)

{
  (*(code *)PTR___cxa_throw_00500c28)();
  return;
}


==================================================================

### FUNC 0015fc00 (16 bytes) name=DisLink

void __thiscall CNetComm::DisLink(CNetComm *this,int param_1,int param_2)

{
  (*(code *)PTR_DisLink_00500c30)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015fc10 (16 bytes) name=solve

void cv::solve(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  (*(code *)PTR_solve_00500c38)();
  return;
}


==================================================================

### FUNC 0015fc20 (16 bytes) name=checkHardwareSupport

void cv::checkHardwareSupport(int param_1)

{
  (*(code *)PTR_checkHardwareSupport_00500c40)(param_1);
  return;
}


==================================================================

### FUNC 0015fc30 (16 bytes) name=type

void __thiscall cv::FileNode::type(FileNode *this)

{
  (*(code *)PTR_type_00500c48)();
  return;
}


==================================================================

### FUNC 0015fc40 (16 bytes) name=lock

void __thiscall cv::UMatData::lock(UMatData *this)

{
  (*(code *)PTR_lock_00500c50)();
  return;
}


==================================================================

### FUNC 0015fc50 (16 bytes) name=operator()

void __thiscall
cv::DefaultDeleter<CvMemStorage>::operator()
          (DefaultDeleter<CvMemStorage> *this,CvMemStorage *param_1)

{
  (*(code *)PTR_operator___00500c58)();
  return;
}


==================================================================

### FUNC 0015fc60 (16 bytes) name=__cxa_atexit

void __cxa_atexit(void)

{
  (*(code *)PTR___cxa_atexit_00500c60)();
  return;
}


==================================================================

### FUNC 0015fc70 (16 bytes) name=merge

void cv::merge(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  (*(code *)PTR_merge_00500c68)();
  return;
}


==================================================================

### FUNC 0015fc80 (16 bytes) name=Reset

void __thiscall CSmoother::Reset(CSmoother *this,uint param_1,uint param_2,int param_3,uint param_4)

{
  (*(code *)PTR_Reset_00500c70)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015fc90 (16 bytes) name=usbi_disconnect_device

void usbi_disconnect_device(void)

{
  (*(code *)PTR_usbi_disconnect_device_00500c78)();
  return;
}


==================================================================

### FUNC 0015fca0 (16 bytes) name=__register_frame_info_bases

void __register_frame_info_bases(void)

{
  (*(code *)PTR___register_frame_info_bases_00500c80)();
  return;
}


==================================================================

### FUNC 0015fcb0 (16 bytes) name=theRNG

void cv::theRNG(void)

{
  (*(code *)PTR_theRNG_00500c88)();
  return;
}


==================================================================

### FUNC 0015fcc0 (16 bytes) name=copyTo

void __thiscall cv::Mat::copyTo(Mat *this,_OutputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_copyTo_00500c90)();
  return;
}


==================================================================

### FUNC 0015fcd0 (16 bytes) name=getDerivKernels

void cv::getDerivKernels(_OutputArray *param_1,_OutputArray *param_2,int param_3,int param_4,
                        int param_5,bool param_6,int param_7)

{
  (*(code *)PTR_getDerivKernels_00500c98)(param_1,param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 0015fce0 (16 bytes) name=MAG_SaveBMP

void MAG_SaveBMP(void)

{
  (*(code *)PTR_MAG_SaveBMP_00500ca0)();
  return;
}


==================================================================

### FUNC 0015fcf0 (16 bytes) name=read

void cv::read(FileNode *param_1,Mat *param_2,Mat *param_3)

{
  (*(code *)PTR_read_00500ca8)();
  return;
}


==================================================================

### FUNC 0015fd00 (16 bytes) name=cvReshape

void cvReshape(void)

{
  (*(code *)PTR_cvReshape_00500cb0)();
  return;
}


==================================================================

### FUNC 0015fd10 (16 bytes) name=formatMessage

void __thiscall cv::Exception::formatMessage(Exception *this)

{
  (*(code *)PTR_formatMessage_00500cb8)();
  return;
}


==================================================================

### FUNC 0015fd20 (16 bytes) name=libusb_handle_events_timeout

void libusb_handle_events_timeout(void)

{
  (*(code *)PTR_libusb_handle_events_timeout_00500cc0)();
  return;
}


==================================================================

### FUNC 0015fd30 (16 bytes) name=~__si_class_type_info

void __thiscall __cxxabiv1::__si_class_type_info::~__si_class_type_info(__si_class_type_info *this)

{
  (*(code *)PTR____si_class_type_info_00500cc8)();
  return;
}


==================================================================

### FUNC 0015fd40 (16 bytes) name=redirectError

void cv::redirectError(_func_int_int_char_ptr_char_ptr_char_ptr_int_void_ptr *param_1,void *param_2,
                      void **param_3)

{
  (*(code *)PTR_redirectError_00500cd0)();
  return;
}


==================================================================

### FUNC 0015fd50 (16 bytes) name=KernelArg

void __thiscall
cv::ocl::KernelArg::KernelArg
          (KernelArg *this,int param_1,UMat *param_2,int param_3,int param_4,void *param_5,
          ulong param_6)

{
  (*(code *)PTR_KernelArg_00500cd8)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0015fd60 (16 bytes) name=atoi

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int atoi(char *__nptr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_atoi_00500ce0)((int)__nptr);
  return iVar1;
}


==================================================================

### FUNC 0015fd70 (16 bytes) name=SetInnertempUnit

void __thiscall CFunctions::SetInnertempUnit(CFunctions *this,uint param_1,int param_2)

{
  (*(code *)PTR_SetInnertempUnit_00500ce8)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015fd80 (16 bytes) name=preferredVectorWidthDouble

void __thiscall cv::ocl::Device::preferredVectorWidthDouble(Device *this)

{
  (*(code *)PTR_preferredVectorWidthDouble_00500cf0)();
  return;
}


==================================================================

### FUNC 0015fd90 (16 bytes) name=_M_release

void __thiscall std::__exception_ptr::exception_ptr::_M_release(exception_ptr *this)

{
  (*(code *)PTR__M_release_00500cf8)();
  return;
}


==================================================================

### FUNC 0015fda0 (16 bytes) name=hostUnifiedMemory

void __thiscall cv::ocl::Device::hostUnifiedMemory(Device *this)

{
  (*(code *)PTR_hostUnifiedMemory_00500d00)();
  return;
}


==================================================================

### FUNC 0015fdb0 (16 bytes) name=kmeans

void __thiscall cv::kmeans(void)

{
  (*(code *)PTR_kmeans_00500d08)();
  return;
}


==================================================================

### FUNC 0015fdc0 (16 bytes) name=LUT

void cv::LUT(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_LUT_00500d10)();
  return;
}


==================================================================

### FUNC 0015fdd0 (16 bytes) name=~CNetComm

void __thiscall CNetComm::~CNetComm(CNetComm *this)

{
  (*(code *)PTR__CNetComm_00500d18)();
  return;
}


==================================================================

### FUNC 0015fde0 (16 bytes) name=project

void __thiscall cv::PCA::project(PCA *this,_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_project_00500d20)();
  return;
}


==================================================================

### FUNC 0015fdf0 (16 bytes) name=MAG_GetRemoteInfo

void MAG_GetRemoteInfo(void)

{
  (*(code *)PTR_MAG_GetRemoteInfo_00500d28)();
  return;
}


==================================================================

### FUNC 0015fe00 (16 bytes) name=__terminate

void __cxxabiv1::__terminate(_func_void *param_1)

{
  (*(code *)PTR___terminate_00500d30)();
  return;
}


==================================================================

### FUNC 0015fe10 (16 bytes) name=usbi_connect_device

void usbi_connect_device(void)

{
  (*(code *)PTR_usbi_connect_device_00500d38)();
  return;
}


==================================================================

### FUNC 0015fe20 (16 bytes) name=trace

void __thiscall cv::trace(cv *this,_InputArray *param_1)

{
  (*(code *)PTR_trace_00500d40)();
  return;
}


==================================================================

### FUNC 0015fe30 (16 bytes) name=LocalMap7x7

void __thiscall CFunctions::LocalMap7x7(CFunctions *this,int *param_1,ushort *param_2,uint param_3)

{
  (*(code *)PTR_LocalMap7x7_00500d48)();
  return;
}


==================================================================

### FUNC 0015fe40 (16 bytes) name=Restart

void __thiscall CSmoother::Restart(CSmoother *this)

{
  (*(code *)PTR_Restart_00500d50)();
  return;
}


==================================================================

### FUNC 0015fe50 (16 bytes) name=predictOptimalVectorWidth

void cv::ocl::predictOptimalVectorWidth(void)

{
  (*(code *)PTR_predictOptimalVectorWidth_00500d58)();
  return;
}


==================================================================

### FUNC 0015fe60 (16 bytes) name=fseek

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fseek(FILE *__stream,long __off,int __whence)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fseek_00500d60)((int)__stream,__off,__whence);
  return iVar1;
}


==================================================================

### FUNC 0015fe70 (16 bytes) name=MAG_EstimateUnderArmTempFromForeheadRect

void MAG_EstimateUnderArmTempFromForeheadRect(void)

{
  (*(code *)PTR_MAG_EstimateUnderArmTempFromForeheadRect_00500d68)();
  return;
}


==================================================================

### FUNC 0015fe80 (16 bytes) name=raw8bitToMat

void __thiscall
ImageProc::raw8bitToMat(ImageProc *this,uchar *param_1,int param_2,int param_3,Mat *param_4)

{
  (*(code *)PTR_raw8bitToMat_00500d70)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015fe90 (16 bytes) name=dEnerge2dTemp

void __thiscall CFunctions::dEnerge2dTemp(CFunctions *this,int param_1,int param_2)

{
  (*(code *)PTR_dEnerge2dTemp_00500d78)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 0015fea0 (16 bytes) name=usbi_hotplug_match

void usbi_hotplug_match(void)

{
  (*(code *)PTR_usbi_hotplug_match_00500d80)();
  return;
}


==================================================================

### FUNC 0015feb0 (16 bytes) name=getNumThreads

void cv::getNumThreads(void)

{
  (*(code *)PTR_getNumThreads_00500d88)();
  return;
}


==================================================================

### FUNC 0015fec0 (16 bytes) name=cubeRoot

void cv::cubeRoot(float param_1)

{
  (*(code *)PTR_cubeRoot_00500d90)();
  return;
}


==================================================================

### FUNC 0015fed0 (16 bytes) name=Laplacian

void cv::Laplacian(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,double param_5
                  ,double param_6,int param_7)

{
  (*(code *)PTR_Laplacian_00500d98)(param_1,param_2,param_3,param_4,param_7);
  return;
}


==================================================================

### FUNC 0015fee0 (16 bytes) name=_Unwind_Resume

void _Unwind_Resume(void)

{
  (*(code *)PTR__Unwind_Resume_00500da0)();
  return;
}


==================================================================

### FUNC 0015fef0 (16 bytes) name=MAG_GetEXLevel

void MAG_GetEXLevel(void)

{
  (*(code *)PTR_MAG_GetEXLevel_00500da8)();
  return;
}


==================================================================

### FUNC 0015ff00 (16 bytes) name=type

void __thiscall cv::MatExpr::type(MatExpr *this)

{
  (*(code *)PTR_type_00500db0)();
  return;
}


==================================================================

### FUNC 0015ff10 (16 bytes) name=sqrtf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float sqrtf(float __x)

{
  float fVar1;
  
  fVar1 = (float)(*(code *)PTR_sqrtf_00500db8)();
  return fVar1;
}


==================================================================

### FUNC 0015ff20 (16 bytes) name=__cxa_current_exception_type

void __cxa_current_exception_type(void)

{
  (*(code *)PTR___cxa_current_exception_type_00500dc0)();
  return;
}


==================================================================

### FUNC 0015ff30 (16 bytes) name=setvbuf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int setvbuf(FILE *__stream,char *__buf,int __modes,size_t __n)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_setvbuf_00500dc8)((int)__stream,__buf,__modes);
  return iVar1;
}


==================================================================

### FUNC 0015ff40 (16 bytes) name=GetLineTemperatureInfo3

void __thiscall
CFunctions::GetLineTemperatureInfo3
          (CFunctions *this,int *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
          uint param_6,uint param_7,int param_8)

{
  (*(code *)PTR_GetLineTemperatureInfo3_00500dd0)
            (this,param_1,param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 0015ff50 (16 bytes) name=getDefault

void cv::ocl::Queue::getDefault(void)

{
  (*(code *)PTR_getDefault_00500dd8)();
  return;
}


==================================================================

### FUNC 0015ff60 (16 bytes) name=~UMat

void __thiscall cv::UMat::~UMat(UMat *this)

{
  (*(code *)PTR__UMat_00500de0)();
  return;
}


==================================================================

### FUNC 0015ff70 (16 bytes) name=libusb_get_device

void libusb_get_device(void)

{
  (*(code *)PTR_libusb_get_device_00500de8)();
  return;
}


==================================================================

### FUNC 0015ff80 (16 bytes) name=resetNormalArray

void cv::ogl::Arrays::resetNormalArray(void)

{
  (*(code *)PTR_resetNormalArray_00500df0)();
  return;
}


==================================================================

### FUNC 0015ff90 (16 bytes) name=read

void cv::read(FileNode *param_1,int *param_2,int param_3)

{
  (*(code *)PTR_read_00500df8)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0015ffa0 (16 bytes) name=~FileStorage

void __thiscall cv::FileStorage::~FileStorage(FileStorage *this)

{
  (*(code *)PTR__FileStorage_00500e00)();
  return;
}


==================================================================

### FUNC 0015ffb0 (16 bytes) name=linux_device_disconnected

void linux_device_disconnected(void)

{
  (*(code *)PTR_linux_device_disconnected_00500e08)();
  return;
}


==================================================================

### FUNC 0015ffc0 (16 bytes) name=cvInsertNodeIntoTree

void cvInsertNodeIntoTree(void)

{
  (*(code *)PTR_cvInsertNodeIntoTree_00500e10)();
  return;
}


==================================================================

### FUNC 0015ffd0 (16 bytes) name=transpose

void cv::transpose(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_transpose_00500e18)();
  return;
}


==================================================================

### FUNC 0015ffe0 (16 bytes) name=RefreshCaliFileNeeded

void __thiscall CNetComm::RefreshCaliFileNeeded(CNetComm *this)

{
  (*(code *)PTR_RefreshCaliFileNeeded_00500e20)();
  return;
}


==================================================================

### FUNC 0015fff0 (16 bytes) name=StartProcessImage

void CMagDevice::StartProcessImage
               (_func_void_uint_uint_uint_void_ptr *param_1,int param_2,int param_3,void *param_4)

{
  (*(code *)PTR_StartProcessImage_00500e28)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160000 (16 bytes) name=operator--

void __thiscall cv::FileNodeIterator::operator--(FileNodeIterator *this)

{
  (*(code *)PTR_operator___00500e30)();
  return;
}


==================================================================

### FUNC 00160010 (16 bytes) name=__convert_to_v<double>

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::__convert_to_v<double>(char *param_1,double *param_2,_Ios_Iostate *param_3,int **param_4)

{
  (*(code *)PTR___convert_to_v<double>_00500e38)();
  return;
}


==================================================================

### FUNC 00160020 (16 bytes) name=gzopen

void gzopen(void)

{
  (*(code *)PTR_gzopen_00500e40)();
  return;
}


==================================================================

### FUNC 00160030 (16 bytes) name=libusb_exit

void libusb_exit(void)

{
  (*(code *)PTR_libusb_exit_00500e48)();
  return;
}


==================================================================

### FUNC 00160040 (16 bytes) name=printf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int printf(char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_printf_00500e50)((int)__format);
  return iVar1;
}


==================================================================

### FUNC 00160050 (16 bytes) name=AndroidBitmap_unlockPixels

void AndroidBitmap_unlockPixels(void)

{
  (*(code *)PTR_AndroidBitmap_unlockPixels_00500e58)();
  return;
}


==================================================================

### FUNC 00160060 (16 bytes) name=~__forced_unwind

void __thiscall __cxxabiv1::__forced_unwind::~__forced_unwind(__forced_unwind *this)

{
  (*(code *)PTR____forced_unwind_00500e60)();
  return;
}


==================================================================

### FUNC 00160070 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<int,std::allocator<int>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_00500e68)();
  return;
}


==================================================================

### FUNC 00160080 (16 bytes) name=create

void __thiscall
cv::_OutputArray::create
          (_OutputArray *this,int param_1,int *param_2,int param_3,int param_4,bool param_5,
          int param_6)

{
  (*(code *)PTR_create_00500e70)(this,param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 00160090 (16 bytes) name=add

void cv::add(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,_InputArray *param_4,
            int param_5)

{
  (*(code *)PTR_add_00500e78)();
  return;
}


==================================================================

### FUNC 001600a0 (16 bytes) name=divide

void cv::divide(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,double param_4,
               int param_5)

{
  (*(code *)PTR_divide_00500e80)();
  return;
}


==================================================================

### FUNC 001600b0 (16 bytes) name=Mat

void __thiscall cv::Mat::Mat(void)

{
  (*(code *)PTR_Mat_00500e88)();
  return;
}


==================================================================

### FUNC 001600c0 (16 bytes) name=fastFree

void cv::fastFree(void *param_1)

{
  (*(code *)PTR_fastFree_00500e90)();
  return;
}


==================================================================

### FUNC 001600d0 (16 bytes) name=libusb_free_transfer

void libusb_free_transfer(void)

{
  (*(code *)PTR_libusb_free_transfer_00500e98)();
  return;
}


==================================================================

### FUNC 001600e0 (16 bytes) name=useOpenCL

void cv::ocl::useOpenCL(void)

{
  (*(code *)PTR_useOpenCL_00500ea0)();
  return;
}


==================================================================

### FUNC 001600f0 (16 bytes) name=lpos

void __thiscall cv::MatConstIterator::lpos(MatConstIterator *this)

{
  (*(code *)PTR_lpos_00500ea8)();
  return;
}


==================================================================

### FUNC 00160100 (16 bytes) name=IsProcessingImage

void __thiscall CMagDevice::IsProcessingImage(CMagDevice *this)

{
  (*(code *)PTR_IsProcessingImage_00500eb0)();
  return;
}


==================================================================

### FUNC 00160110 (16 bytes) name=MAG_StartProcessImage

void MAG_StartProcessImage(void)

{
  (*(code *)PTR_MAG_StartProcessImage_00500eb8)();
  return;
}


==================================================================

### FUNC 00160120 (16 bytes) name=memcmp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int memcmp(void *__s1,void *__s2,size_t __n)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_memcmp_00500ec0)((int)__s1);
  return iVar1;
}


==================================================================

### FUNC 00160130 (16 bytes) name=write

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t write(int __fd,void *__buf,size_t __n)

{
  ssize_t sVar1;
  
  sVar1 = (*(code *)PTR_write_00500ec8)(__fd);
  return sVar1;
}


==================================================================

### FUNC 00160140 (16 bytes) name=libusb_init

void libusb_init(void)

{
  (*(code *)PTR_libusb_init_00500ed0)();
  return;
}


==================================================================

### FUNC 00160150 (16 bytes) name=MAG_Initialize

void MAG_Initialize(void)

{
  (*(code *)PTR_MAG_Initialize_00500ed8)();
  return;
}


==================================================================

### FUNC 00160160 (16 bytes) name=cvReleaseMat

void cvReleaseMat(void)

{
  (*(code *)PTR_cvReleaseMat_00500ee0)();
  return;
}


==================================================================

### FUNC 00160170 (16 bytes) name=MAG_GetFrameStatisticalData

void MAG_GetFrameStatisticalData(void)

{
  (*(code *)PTR_MAG_GetFrameStatisticalData_00500ee8)();
  return;
}


==================================================================

### FUNC 00160180 (16 bytes) name=getLabel

void __thiscall MDTHelper::getLabel(MDTHelper *this,ROI **param_1)

{
  (*(code *)PTR_getLabel_00500ef0)();
  return;
}


==================================================================

### FUNC 00160190 (16 bytes) name=cvRead

void cvRead(void)

{
  (*(code *)PTR_cvRead_00500ef8)();
  return;
}


==================================================================

### FUNC 001601a0 (16 bytes) name=libusb_get_device_descriptor

void libusb_get_device_descriptor(void)

{
  (*(code *)PTR_libusb_get_device_descriptor_00500f00)();
  return;
}


==================================================================

### FUNC 001601b0 (16 bytes) name=typeToStr

void cv::ocl::typeToStr(int param_1)

{
  (*(code *)PTR_typeToStr_00500f08)(param_1);
  return;
}


==================================================================

### FUNC 001601c0 (16 bytes) name=__errno

void __errno(void)

{
  (*(code *)PTR___errno_00500f10)();
  return;
}


==================================================================

### FUNC 001601d0 (16 bytes) name=SearchInnerGray

void __thiscall CFunctions::SearchInnerGray(CFunctions *this,int param_1)

{
  (*(code *)PTR_SearchInnerGray_00500f18)(this,param_1);
  return;
}


==================================================================

### FUNC 001601e0 (16 bytes) name=cvClearSeq

void cvClearSeq(void)

{
  (*(code *)PTR_cvClearSeq_00500f20)();
  return;
}


==================================================================

### FUNC 001601f0 (16 bytes) name=~TLSDataContainer

void __thiscall cv::TLSDataContainer::~TLSDataContainer(TLSDataContainer *this)

{
  (*(code *)PTR__TLSDataContainer_00500f28)();
  return;
}


==================================================================

### FUNC 00160200 (16 bytes) name=~exception

void __thiscall std::exception::~exception(exception *this)

{
  (*(code *)PTR__exception_00500f30)();
  return;
}


==================================================================

### FUNC 00160210 (16 bytes) name=init

void __thiscall
cv::NAryMatIterator::init
          (NAryMatIterator *this,Mat **param_1,Mat *param_2,uchar **param_3,int param_4)

{
  (*(code *)PTR_init_00500f38)();
  return;
}


==================================================================

### FUNC 00160220 (16 bytes) name=cvStartFindContours

void cvStartFindContours(void)

{
  (*(code *)PTR_cvStartFindContours_00500f40)();
  return;
}


==================================================================

### FUNC 00160230 (16 bytes) name=GetCurrentCameraInnerTemperature

void __thiscall CMagDevice::GetCurrentCameraInnerTemperature(CMagDevice *this,uint param_1)

{
  (*(code *)PTR_GetCurrentCameraInnerTemperature_00500f48)(this,param_1);
  return;
}


==================================================================

### FUNC 00160240 (16 bytes) name=cvReleaseData

void cvReleaseData(void)

{
  (*(code *)PTR_cvReleaseData_00500f50)();
  return;
}


==================================================================

### FUNC 00160250 (16 bytes) name=_M_erase

void __thiscall
std::
_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
::_M_erase(_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
           *this,_Rb_tree_node *param_1)

{
  (*(code *)PTR__M_erase_00500f58)();
  return;
}


==================================================================

### FUNC 00160260 (16 bytes) name=preferredVectorWidthInt

void __thiscall cv::ocl::Device::preferredVectorWidthInt(Device *this)

{
  (*(code *)PTR_preferredVectorWidthInt_00500f60)();
  return;
}


==================================================================

### FUNC 00160270 (16 bytes) name=device

void __thiscall cv::ocl::Context::device(Context *this,ulong param_1)

{
  (*(code *)PTR_device_00500f68)();
  return;
}


==================================================================

### FUNC 00160280 (16 bytes) name=tolower

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int tolower(int __c)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_tolower_00500f70)(__c);
  return iVar1;
}


==================================================================

### FUNC 00160290 (16 bytes) name=preferredVectorWidthChar

void __thiscall cv::ocl::Device::preferredVectorWidthChar(Device *this)

{
  (*(code *)PTR_preferredVectorWidthChar_00500f78)();
  return;
}


==================================================================

### FUNC 001602a0 (16 bytes) name=calcCovarMatrix

void cv::calcCovarMatrix(_InputArray *param_1,_OutputArray *param_2,_InputOutputArray *param_3,
                        int param_4,int param_5)

{
  (*(code *)PTR_calcCovarMatrix_00500f80)();
  return;
}


==================================================================

### FUNC 001602b0 (16 bytes) name=libusb_free_device_list

void libusb_free_device_list(void)

{
  (*(code *)PTR_libusb_free_device_list_00500f88)();
  return;
}


==================================================================

### FUNC 001602c0 (16 bytes) name=cvGetErrStatus

void cvGetErrStatus(void)

{
  (*(code *)PTR_cvGetErrStatus_00500f90)();
  return;
}


==================================================================

### FUNC 001602d0 (16 bytes) name=norm

void cv::norm(SparseMat *param_1,int param_2)

{
  (*(code *)PTR_norm_00500f98)(param_1,param_2);
  return;
}


==================================================================

### FUNC 001602e0 (16 bytes) name=StartReceiveImg

void __thiscall CNetComm::StartReceiveImg(void)

{
  (*(code *)PTR_StartReceiveImg_00500fa0)();
  return;
}


==================================================================

### FUNC 001602f0 (16 bytes) name=convertTo

void __thiscall
cv::SparseMat::convertTo(SparseMat *this,SparseMat *param_1,int param_2,double param_3)

{
  (*(code *)PTR_convertTo_00500fa8)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00160300 (16 bytes) name=MAG_ProbeBufferedDDT

void MAG_ProbeBufferedDDT(void)

{
  (*(code *)PTR_MAG_ProbeBufferedDDT_00500fb0)();
  return;
}


==================================================================

### FUNC 00160310 (16 bytes) name=GetEllipseTemperatureInfo

void CMagDevice::GetEllipseTemperatureInfo
               (uint param_1,uint param_2,uint param_3,uint param_4,int *param_5)

{
  (*(code *)PTR_GetEllipseTemperatureInfo_00500fb8)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00160320 (16 bytes) name=pthread_mutexattr_init

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_init(pthread_mutexattr_t *__attr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutexattr_init_00500fc0)((int)__attr);
  return iVar1;
}


==================================================================

### FUNC 00160330 (16 bytes) name=seed

void __thiscall cv::RNG_MT19937::seed(RNG_MT19937 *this,uint param_1)

{
  (*(code *)PTR_seed_00500fc8)(this,param_1);
  return;
}


==================================================================

### FUNC 00160340 (16 bytes) name=libusb_claim_interface

void libusb_claim_interface(void)

{
  (*(code *)PTR_libusb_claim_interface_00500fd0)();
  return;
}


==================================================================

### FUNC 00160350 (16 bytes) name=wcrtomb

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcrtomb(char *__s,wchar_t __wc,mbstate_t *__ps)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_wcrtomb_00500fd8)(__s,__wc);
  return sVar1;
}


==================================================================

### FUNC 00160360 (16 bytes) name=getHostMemRef

void __thiscall cv::_OutputArray::getHostMemRef(_OutputArray *this)

{
  (*(code *)PTR_getHostMemRef_00500fe0)();
  return;
}


==================================================================

### FUNC 00160370 (16 bytes) name=SetColorPalette

void __thiscall CFunctions::SetColorPalette(void)

{
  (*(code *)PTR_SetColorPalette_00500fe8)();
  return;
}


==================================================================

### FUNC 00160380 (16 bytes) name=create

void __thiscall cv::SparseMat::create(SparseMat *this,int param_1,int *param_2,int param_3)

{
  (*(code *)PTR_create_00500ff0)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160390 (16 bytes) name=fastAtan2

void cv::fastAtan2(float param_1,float param_2)

{
  (*(code *)PTR_fastAtan2_00500ff8)();
  return;
}


==================================================================

### FUNC 001603a0 (16 bytes) name=ungetc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int ungetc(int __c,FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_ungetc_00501000)(__c);
  return iVar1;
}


==================================================================

### FUNC 001603b0 (16 bytes) name=sqrt

void cv::sqrt(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_sqrt_00501008)();
  return;
}


==================================================================

### FUNC 001603c0 (16 bytes) name=cvInitMatNDHeader

void cvInitMatNDHeader(void)

{
  (*(code *)PTR_cvInitMatNDHeader_00501010)();
  return;
}


==================================================================

### FUNC 001603d0 (16 bytes) name=cvCreateSparseMat

void cvCreateSparseMat(void)

{
  (*(code *)PTR_cvCreateSparseMat_00501018)();
  return;
}


==================================================================

### FUNC 001603e0 (16 bytes) name=usbi_hotplug_notification

void usbi_hotplug_notification(void)

{
  (*(code *)PTR_usbi_hotplug_notification_00501020)();
  return;
}


==================================================================

### FUNC 001603f0 (16 bytes) name=create

void cv::cuda::GpuMat::create(int param_1,int param_2,int param_3)

{
  (*(code *)PTR_create_00501028)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160400 (16 bytes) name=Available

void __thiscall MStream::Available(MStream *this)

{
  (*(code *)PTR_Available_00501030)();
  return;
}


==================================================================

### FUNC 00160410 (16 bytes) name=CSmoother

void __thiscall CSmoother::CSmoother(CSmoother *this)

{
  (*(code *)PTR_CSmoother_00501038)();
  return;
}


==================================================================

### FUNC 00160420 (16 bytes) name=~recursive_init_error

void __thiscall __gnu_cxx::recursive_init_error::~recursive_init_error(recursive_init_error *this)

{
  (*(code *)PTR__recursive_init_error_00501040)();
  return;
}


==================================================================

### FUNC 00160430 (16 bytes) name=pthread_mutex_lock

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_lock(pthread_mutex_t *__mutex)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_mutex_lock_00501048)((int)__mutex);
  return iVar1;
}


==================================================================

### FUNC 00160440 (16 bytes) name=__do_upcast

void __thiscall
__cxxabiv1::__class_type_info::__do_upcast
          (__class_type_info *this,__class_type_info *param_1,void *param_2,__upcast_result *param_3
          )

{
  (*(code *)PTR___do_upcast_00501050)();
  return;
}


==================================================================

### FUNC 00160450 (16 bytes) name=step

void __thiscall cv::_InputArray::step(_InputArray *this,int param_1)

{
  (*(code *)PTR_step_00501058)(this,param_1);
  return;
}


==================================================================

### FUNC 00160460 (16 bytes) name=scaleAdd

void cv::scaleAdd(_InputArray *param_1,double param_2,_InputArray *param_3,_OutputArray *param_4)

{
  (*(code *)PTR_scaleAdd_00501060)();
  return;
}


==================================================================

### FUNC 00160470 (16 bytes) name=CvType

void __thiscall
CvType::CvType(CvType *this,char *param_1,_func_int_void_ptr *param_2,
              _func_void_void_ptr_ptr *param_3,
              _func_void_ptr_CvFileStorage_ptr_CvFileNode_ptr *param_4,
              _func_void_CvFileStorage_ptr_char_ptr_void_ptr_CvAttrList *param_5,
              _func_void_ptr_void_ptr *param_6)

{
  (*(code *)PTR_CvType_00501068)();
  return;
}


==================================================================

### FUNC 00160480 (16 bytes) name=polylines

void cv::polylines(Mat *param_1,Point_ **param_2,int *param_3,int param_4,bool param_5,
                  Scalar_ *param_6,int param_7,int param_8,int param_9)

{
  (*(code *)PTR_polylines_00501070)();
  return;
}


==================================================================

### FUNC 00160490 (16 bytes) name=toupper

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int toupper(int __c)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_toupper_00501078)(__c);
  return iVar1;
}


==================================================================

### FUNC 001604a0 (16 bytes) name=cvSetSeqReaderPos

void cvSetSeqReaderPos(void)

{
  (*(code *)PTR_cvSetSeqReaderPos_00501080)();
  return;
}


==================================================================

### FUNC 001604b0 (16 bytes) name=MAG_FixTemperature

void MAG_FixTemperature(void)

{
  (*(code *)PTR_MAG_FixTemperature_00501088)();
  return;
}


==================================================================

### FUNC 001604c0 (16 bytes) name=cvStartAppendToSeq

void cvStartAppendToSeq(void)

{
  (*(code *)PTR_cvStartAppendToSeq_00501090)();
  return;
}


==================================================================

### FUNC 001604d0 (16 bytes) name=fillConvexPoly

void cv::fillConvexPoly(Mat *param_1,Point_ *param_2,int param_3,Scalar_ *param_4,int param_5,
                       int param_6)

{
  (*(code *)PTR_fillConvexPoly_00501098)(param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 001604e0 (16 bytes) name=operator.new

void * operator_new(ulong param_1)

{
  void *pvVar1;
  
  pvVar1 = (void *)(*(code *)PTR_operator_new_005010a0)();
  return pvVar1;
}


==================================================================

### FUNC 001604f0 (16 bytes) name=pthread_attr_destroy

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_destroy(pthread_attr_t *__attr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_attr_destroy_005010a8)((int)__attr);
  return iVar1;
}


==================================================================

### FUNC 00160500 (16 bytes) name=create

void __thiscall
cv::_OutputArray::create
          (_OutputArray *this,int param_1,int param_2,int param_3,int param_4,bool param_5,
          int param_6)

{
  (*(code *)PTR_create_005010b0)(this,param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 00160510 (16 bytes) name=MAG_GetCurrentCameraInnerTemperature

void MAG_GetCurrentCameraInnerTemperature(void)

{
  (*(code *)PTR_MAG_GetCurrentCameraInnerTemperature_005010b8)();
  return;
}


==================================================================

### FUNC 00160520 (16 bytes) name=cvReleaseImageHeader

void cvReleaseImageHeader(void)

{
  (*(code *)PTR_cvReleaseImageHeader_005010c0)();
  return;
}


==================================================================

### FUNC 00160530 (16 bytes) name=repeat

void __thiscall cv::repeat(cv *this,Mat *param_1,int param_2,int param_3)

{
  (*(code *)PTR_repeat_005010c8)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160540 (16 bytes) name=MAG_SetSubsectionEnlargePara

void MAG_SetSubsectionEnlargePara(void)

{
  (*(code *)PTR_MAG_SetSubsectionEnlargePara_005010d0)();
  return;
}


==================================================================

### FUNC 00160550 (16 bytes) name=magnitude

void cv::magnitude(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_magnitude_005010d8)();
  return;
}


==================================================================

### FUNC 00160560 (16 bytes) name=MAG_UnLockFrame

void MAG_UnLockFrame(void)

{
  (*(code *)PTR_MAG_UnLockFrame_005010e0)();
  return;
}


==================================================================

### FUNC 00160570 (16 bytes) name=readdir

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

dirent * readdir(DIR *__dirp)

{
  dirent *pdVar1;
  
  pdVar1 = (dirent *)(*(code *)PTR_readdir_005010e8)();
  return pdVar1;
}


==================================================================

### FUNC 00160580 (16 bytes) name=isContinuous

void __thiscall cv::_InputArray::isContinuous(_InputArray *this,int param_1)

{
  (*(code *)PTR_isContinuous_005010f0)(this,param_1);
  return;
}


==================================================================

### FUNC 00160590 (16 bytes) name=GetEX

void __thiscall CFunctions::GetEX(CFunctions *this)

{
  (*(code *)PTR_GetEX_005010f8)();
  return;
}


==================================================================

### FUNC 001605a0 (16 bytes) name=ptr

void __thiscall cv::ocl::Kernel::ptr(Kernel *this)

{
  (*(code *)PTR_ptr_00501100)();
  return;
}


==================================================================

### FUNC 001605b0 (16 bytes) name=_Unwind_SetGR

void _Unwind_SetGR(void)

{
  (*(code *)PTR__Unwind_SetGR_00501108)();
  return;
}


==================================================================

### FUNC 001605c0 (16 bytes) name=cvSaveMemStoragePos

void cvSaveMemStoragePos(void)

{
  (*(code *)PTR_cvSaveMemStoragePos_00501110)();
  return;
}


==================================================================

### FUNC 001605d0 (16 bytes) name=imagePitchAlignment

void __thiscall cv::ocl::Device::imagePitchAlignment(Device *this)

{
  (*(code *)PTR_imagePitchAlignment_00501118)();
  return;
}


==================================================================

### FUNC 001605e0 (16 bytes) name=GetFixPara

void CMagDevice::GetFixPara(struct_FixPara *param_1)

{
  (*(code *)PTR_GetFixPara_00501120)();
  return;
}


==================================================================

### FUNC 001605f0 (16 bytes) name=finish

void __thiscall cv::ocl::Queue::finish(Queue *this)

{
  (*(code *)PTR_finish_00501128)();
  return;
}


==================================================================

### FUNC 00160600 (16 bytes) name=usbi_cond_timedwait

void usbi_cond_timedwait(void)

{
  (*(code *)PTR_usbi_cond_timedwait_00501130)();
  return;
}


==================================================================

### FUNC 00160610 (16 bytes) name=release

void __thiscall cv::Mat::release(Mat *this)

{
  (*(code *)PTR_release_00501138)();
  return;
}


==================================================================

### FUNC 00160620 (16 bytes) name=locateROI

void __thiscall cv::UMat::locateROI(UMat *this,Size_ *param_1,Point_ *param_2)

{
  (*(code *)PTR_locateROI_00501140)();
  return;
}


==================================================================

### FUNC 00160630 (16 bytes) name=usbi_device_cache_descriptor

void usbi_device_cache_descriptor(void)

{
  (*(code *)PTR_usbi_device_cache_descriptor_00501148)();
  return;
}


==================================================================

### FUNC 00160640 (16 bytes) name=rectangle

void cv::rectangle(void)

{
  (*(code *)PTR_rectangle_00501150)();
  return;
}


==================================================================

### FUNC 00160650 (16 bytes) name=~exception_ptr

void __thiscall std::__exception_ptr::exception_ptr::~exception_ptr(exception_ptr *this)

{
  (*(code *)PTR__exception_ptr_00501158)();
  return;
}


==================================================================

### FUNC 00160660 (16 bytes) name=flip

void cv::flip(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_flip_00501160)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160670 (16 bytes) name=deallocate

void __thiscall cv::Mat::deallocate(Mat *this)

{
  (*(code *)PTR_deallocate_00501168)();
  return;
}


==================================================================

### FUNC 00160680 (16 bytes) name=minEnclosingCircle

void cv::minEnclosingCircle(_InputArray *param_1,Point_ *param_2,float *param_3)

{
  (*(code *)PTR_minEnclosingCircle_00501170)();
  return;
}


==================================================================

### FUNC 00160690 (16 bytes) name=push_back

void __thiscall cv::Mat::push_back(Mat *this,Mat *param_1)

{
  (*(code *)PTR_push_back_00501178)();
  return;
}


==================================================================

### FUNC 001606a0 (16 bytes) name=__cxa_finalize

void __cxa_finalize(void)

{
  (*(code *)PTR___cxa_finalize_00501180)();
  return;
}


==================================================================

### FUNC 001606b0 (16 bytes) name=cvarrToMat

void __thiscall
cv::cvarrToMat(cv *this,void *param_1,bool param_2,bool param_3,int param_4,AutoBuffer *param_5)

{
  (*(code *)PTR_cvarrToMat_00501188)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 001606c0 (16 bytes) name=min

void cv::min(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  (*(code *)PTR_min_00501190)();
  return;
}


==================================================================

### FUNC 001606d0 (16 bytes) name=write

void cv::write(FileStorage *param_1,String *param_2,String *param_3)

{
  (*(code *)PTR_write_00501198)();
  return;
}


==================================================================

### FUNC 001606e0 (16 bytes) name=libusb_unlock_events

void libusb_unlock_events(void)

{
  (*(code *)PTR_libusb_unlock_events_005011a0)();
  return;
}


==================================================================

### FUNC 001606f0 (16 bytes) name=SetColorPalette

void CMagDevice::SetColorPalette(void)

{
  (*(code *)PTR_SetColorPalette_005011a8)();
  return;
}


==================================================================

### FUNC 00160700 (16 bytes) name=SparseMatConstIterator

void __thiscall
cv::SparseMatConstIterator::SparseMatConstIterator(SparseMatConstIterator *this,SparseMat *param_1)

{
  (*(code *)PTR_SparseMatConstIterator_005011b0)();
  return;
}


==================================================================

### FUNC 00160710 (16 bytes) name=__unexpected

void __cxxabiv1::__unexpected(_func_void *param_1)

{
  (*(code *)PTR___unexpected_005011b8)();
  return;
}


==================================================================

### FUNC 00160720 (16 bytes) name=threshold

void cv::threshold(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4,
                  int param_5)

{
  (*(code *)PTR_threshold_005011c0)(param_1,param_2,param_5);
  return;
}


==================================================================

### FUNC 00160730 (16 bytes) name=__cxa_allocate_dependent_exception

void __cxa_allocate_dependent_exception(void)

{
  (*(code *)PTR___cxa_allocate_dependent_exception_005011c8)();
  return;
}


==================================================================

### FUNC 00160740 (16 bytes) name=SelectCaliCurve

void __thiscall CFunctions::SelectCaliCurve(CFunctions *this)

{
  (*(code *)PTR_SelectCaliCurve_005011d0)();
  return;
}


==================================================================

### FUNC 00160750 (16 bytes) name=operator.cast.to.float

float __thiscall cv::RNG_MT19937::operator_cast_to_float(RNG_MT19937 *this)

{
  float fVar1;
  
  fVar1 = (float)(*(code *)PTR_operator_cast_to_float_005011d8)();
  return fVar1;
}


==================================================================

### FUNC 00160760 (16 bytes) name=sizend

void __thiscall cv::_InputArray::sizend(_InputArray *this,int *param_1,int param_2)

{
  (*(code *)PTR_sizend_005011e0)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00160770 (16 bytes) name=ConvertResponse2Temperature

void __thiscall CFunctions::ConvertResponse2Temperature(CFunctions *this,ushort *param_1)

{
  (*(code *)PTR_ConvertResponse2Temperature_005011e8)();
  return;
}


==================================================================

### FUNC 00160780 (16 bytes) name=findContours

void cv::findContours(void)

{
  (*(code *)PTR_findContours_005011f0)();
  return;
}


==================================================================

### FUNC 00160790 (16 bytes) name=~exception

void __thiscall std::exception::~exception(exception *this)

{
  (*(code *)PTR__exception_005011f8)();
  return;
}


==================================================================

### FUNC 001607a0 (16 bytes) name=~WriteStructContext

void __thiscall cv::internal::WriteStructContext::~WriteStructContext(WriteStructContext *this)

{
  (*(code *)PTR__WriteStructContext_00501200)();
  return;
}


==================================================================

### FUNC 001607b0 (16 bytes) name=multiply

void __thiscall cv::MatOp::multiply(MatOp *this,MatExpr *param_1,double param_2,MatExpr *param_3)

{
  (*(code *)PTR_multiply_00501208)();
  return;
}


==================================================================

### FUNC 001607c0 (16 bytes) name=copyTo

void __thiscall cv::_InputArray::copyTo(_InputArray *this,_OutputArray *param_1)

{
  (*(code *)PTR_copyTo_00501210)();
  return;
}


==================================================================

### FUNC 001607d0 (16 bytes) name=localtime

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

tm * localtime(time_t *__timer)

{
  tm *ptVar1;
  
  ptVar1 = (tm *)(*(code *)PTR_localtime_00501218)();
  return ptVar1;
}


==================================================================

### FUNC 001607e0 (16 bytes) name=fflush

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fflush(FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fflush_00501220)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 001607f0 (16 bytes) name=libusb_control_transfer

void libusb_control_transfer(void)

{
  (*(code *)PTR_libusb_control_transfer_00501228)();
  return;
}


==================================================================

### FUNC 00160800 (16 bytes) name=cvPtrND

void cvPtrND(void)

{
  (*(code *)PTR_cvPtrND_00501230)();
  return;
}


==================================================================

### FUNC 00160810 (16 bytes) name=FilterDetailEnhancement_Simple

void __thiscall CFunctions::FilterDetailEnhancement_Simple(CFunctions *this,uint param_1)

{
  (*(code *)PTR_FilterDetailEnhancement_Simple_00501238)(this,param_1);
  return;
}


==================================================================

### FUNC 00160820 (16 bytes) name=SaveBMP

void CMagDevice::SaveBMP(uint param_1,char *param_2)

{
  (*(code *)PTR_SaveBMP_00501240)(param_1);
  return;
}


==================================================================

### FUNC 00160830 (16 bytes) name=GetEllipseTemperatureInfo

void __thiscall
CFunctions::GetEllipseTemperatureInfo
          (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
          int param_6)

{
  (*(code *)PTR_GetEllipseTemperatureInfo_00501248)
            (this,param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 00160840 (16 bytes) name=cvSeqRemoveSlice

void cvSeqRemoveSlice(void)

{
  (*(code *)PTR_cvSeqRemoveSlice_00501250)();
  return;
}


==================================================================

### FUNC 00160850 (16 bytes) name=__cxa_guard_abort

void __cxa_guard_abort(void)

{
  (*(code *)PTR___cxa_guard_abort_00501258)();
  return;
}


==================================================================

### FUNC 00160860 (16 bytes) name=pthread_key_create

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_key_create(pthread_key_t *__key,__destr_function *__destr_function)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_key_create_00501260)((int)__key);
  return iVar1;
}


==================================================================

### FUNC 00160870 (16 bytes) name=copySize

void __thiscall cv::UMat::copySize(UMat *this,UMat *param_1)

{
  (*(code *)PTR_copySize_00501268)();
  return;
}


==================================================================

### FUNC 00160880 (16 bytes) name=CNetComm

void __thiscall CNetComm::CNetComm(CNetComm *this)

{
  (*(code *)PTR_CNetComm_00501270)();
  return;
}


==================================================================

### FUNC 00160890 (16 bytes) name=PCA

void __thiscall cv::PCA::PCA(PCA *this)

{
  (*(code *)PTR_PCA_00501278)();
  return;
}


==================================================================

### FUNC 001608a0 (16 bytes) name=getOptimalDFTSize

void cv::getOptimalDFTSize(int param_1)

{
  (*(code *)PTR_getOptimalDFTSize_00501280)(param_1);
  return;
}


==================================================================

### FUNC 001608b0 (16 bytes) name=operator[]

void cv::FileNode::operator[](char *param_1)

{
  (*(code *)PTR_operator___00501288)();
  return;
}


==================================================================

### FUNC 001608c0 (16 bytes) name=MAG_DisLinkCamera

void MAG_DisLinkCamera(void)

{
  (*(code *)PTR_MAG_DisLinkCamera_00501290)();
  return;
}


==================================================================

### FUNC 001608d0 (16 bytes) name=MAG_WillStartImmediately

void MAG_WillStartImmediately(void)

{
  (*(code *)PTR_MAG_WillStartImmediately_00501298)();
  return;
}


==================================================================

### FUNC 001608e0 (16 bytes) name=cvInitNArrayIterator

void cvInitNArrayIterator(void)

{
  (*(code *)PTR_cvInitNArrayIterator_005012a0)();
  return;
}


==================================================================

### FUNC 001608f0 (16 bytes) name=Context

void __thiscall cv::ocl::Context::Context(Context *this)

{
  (*(code *)PTR_Context_005012a8)();
  return;
}


==================================================================

### FUNC 00160900 (16 bytes) name=GetRectTemperatureInfo

void __thiscall
CFunctions::GetRectTemperatureInfo
          (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
          int param_6)

{
  (*(code *)PTR_GetRectTemperatureInfo_005012b0)
            (this,param_1,param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### FUNC 00160910 (16 bytes) name=linux_enumerate_device

void linux_enumerate_device(void)

{
  (*(code *)PTR_linux_enumerate_device_005012b8)();
  return;
}


==================================================================

### FUNC 00160920 (16 bytes) name=ResizeBMP_3to5

void __thiscall CFunctions::ResizeBMP_3to5(CFunctions *this)

{
  (*(code *)PTR_ResizeBMP_3to5_005012c0)();
  return;
}


==================================================================

### FUNC 00160930 (16 bytes) name=abs

void __thiscall cv::MatOp::abs(MatOp *this,MatExpr *param_1,MatExpr *param_2)

{
  (*(code *)PTR_abs_005012c8)();
  return;
}


==================================================================

### FUNC 00160940 (16 bytes) name=LinkCamera_UnProtected

void __thiscall CNetComm::LinkCamera_UnProtected(CNetComm *this,struct_ReConnPara *param_1)

{
  (*(code *)PTR_LinkCamera_UnProtected_005012d0)();
  return;
}


==================================================================

### FUNC 00160950 (16 bytes) name=setUseIPP

void cv::ipp::setUseIPP(bool param_1)

{
  (*(code *)PTR_setUseIPP_005012d8)(param_1);
  return;
}


==================================================================

### FUNC 00160960 (16 bytes) name=getDefaultObjectName

void __thiscall cv::FileStorage::getDefaultObjectName(FileStorage *this,String *param_1)

{
  (*(code *)PTR_getDefaultObjectName_005012e0)();
  return;
}


==================================================================

### FUNC 00160970 (16 bytes) name=operator()

void __thiscall
cv::DefaultDeleter<CvFileStorage>::operator()
          (DefaultDeleter<CvFileStorage> *this,CvFileStorage *param_1)

{
  (*(code *)PTR_operator___005012e8)();
  return;
}


==================================================================

### FUNC 00160980 (16 bytes) name=setNumThreads

void cv::setNumThreads(int param_1)

{
  (*(code *)PTR_setNumThreads_005012f0)(param_1);
  return;
}


==================================================================

### FUNC 00160990 (16 bytes) name=cvThreshold

void cvThreshold(void)

{
  (*(code *)PTR_cvThreshold_005012f8)();
  return;
}


==================================================================

### FUNC 001609a0 (16 bytes) name=setAudio

void __thiscall MDTHelper::setAudio(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setAudio_00501300)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 001609b0 (16 bytes) name=Stream

void __thiscall cv::cuda::Stream::Stream(Stream *this)

{
  (*(code *)PTR_Stream_00501308)();
  return;
}


==================================================================

### FUNC 001609c0 (16 bytes) name=pipe

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pipe(int *__pipedes)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pipe_00501310)((int)__pipedes);
  return iVar1;
}


==================================================================

### FUNC 001609d0 (16 bytes) name=usbi_io_init

void usbi_io_init(void)

{
  (*(code *)PTR_usbi_io_init_00501318)();
  return;
}


==================================================================

### FUNC 001609e0 (16 bytes) name=libusb_submit_transfer

void libusb_submit_transfer(void)

{
  (*(code *)PTR_libusb_submit_transfer_00501320)();
  return;
}


==================================================================

### FUNC 001609f0 (16 bytes) name=operator++

void __thiscall cv::NAryMatIterator::operator++(NAryMatIterator *this)

{
  (*(code *)PTR_operator___00501328)();
  return;
}


==================================================================

### FUNC 00160a00 (16 bytes) name=CallStaticObjectMethod

void _JNIEnv::CallStaticObjectMethod(_jclass *param_1,_jmethodID *param_2,...)

{
  (*(code *)PTR_CallStaticObjectMethod_00501330)();
  return;
}


==================================================================

### FUNC 00160a10 (16 bytes) name=checkVector

void __thiscall cv::Mat::checkVector(Mat *this,int param_1,int param_2,bool param_3)

{
  (*(code *)PTR_checkVector_00501338)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160a20 (16 bytes) name=adjustROI

void __thiscall cv::Mat::adjustROI(Mat *this,int param_1,int param_2,int param_3,int param_4)

{
  (*(code *)PTR_adjustROI_00501340)(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00160a30 (16 bytes) name=lseek

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

__off_t lseek(int __fd,__off_t __offset,int __whence)

{
  __off_t _Var1;
  
  _Var1 = (*(code *)PTR_lseek_00501348)(__fd,__offset,__whence);
  return _Var1;
}


==================================================================

### FUNC 00160a40 (16 bytes) name=MAG_GetDetectSuggestedParameter

void MAG_GetDetectSuggestedParameter(void)

{
  (*(code *)PTR_MAG_GetDetectSuggestedParameter_00501350)();
  return;
}


==================================================================

### FUNC 00160a50 (16 bytes) name=Unlock

void __thiscall CMagDevice::Unlock(CMagDevice *this)

{
  (*(code *)PTR_Unlock_00501358)();
  return;
}


==================================================================

### FUNC 00160a60 (16 bytes) name=usbi_get_device_by_session_id

void usbi_get_device_by_session_id(void)

{
  (*(code *)PTR_usbi_get_device_by_session_id_00501360)();
  return;
}


==================================================================

### FUNC 00160a70 (16 bytes) name=atan

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double atan(double __x)

{
  double dVar1;
  
  dVar1 = (double)(*(code *)PTR_atan_00501368)();
  return dVar1;
}


==================================================================

### FUNC 00160a80 (16 bytes) name=Device

void __thiscall cv::ocl::Device::Device(Device *this,Device *param_1)

{
  (*(code *)PTR_Device_00501370)();
  return;
}


==================================================================

### FUNC 00160a90 (16 bytes) name=clear

void __thiscall cv::SparseMat::clear(SparseMat *this)

{
  (*(code *)PTR_clear_00501378)();
  return;
}


==================================================================

### FUNC 00160aa0 (16 bytes) name=DeInit

void __thiscall CNetComm::DeInit(CNetComm *this)

{
  (*(code *)PTR_DeInit_00501380)();
  return;
}


==================================================================

### FUNC 00160ab0 (16 bytes) name=time

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

time_t time(time_t *__timer)

{
  time_t tVar1;
  
  tVar1 = (*(code *)PTR_time_00501388)();
  return tVar1;
}


==================================================================

### FUNC 00160ac0 (16 bytes) name=gemm

void cv::gemm(_InputArray *param_1,_InputArray *param_2,double param_3,_InputArray *param_4,
             double param_5,_OutputArray *param_6,int param_7)

{
  (*(code *)PTR_gemm_00501390)();
  return;
}


==================================================================

### FUNC 00160ad0 (16 bytes) name=MAG_GetFixPara

void MAG_GetFixPara(void)

{
  (*(code *)PTR_MAG_GetFixPara_00501398)();
  return;
}


==================================================================

### FUNC 00160ae0 (16 bytes) name=pthread_attr_init

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_init(pthread_attr_t *__attr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_attr_init_005013a0)((int)__attr);
  return iVar1;
}


==================================================================

### FUNC 00160af0 (16 bytes) name=MAG_GetTemperatureData_Raw

void MAG_GetTemperatureData_Raw(void)

{
  (*(code *)PTR_MAG_GetTemperatureData_Raw_005013a8)();
  return;
}


==================================================================

### FUNC 00160b00 (16 bytes) name=uname

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int uname(utsname *__name)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_uname_005013b0)((int)__name);
  return iVar1;
}


==================================================================

### FUNC 00160b10 (16 bytes) name=reserve

void __thiscall cv::Mat::reserve(Mat *this,ulong param_1)

{
  (*(code *)PTR_reserve_005013b8)();
  return;
}


==================================================================

### FUNC 00160b20 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_005013c0)();
  return;
}


==================================================================

### FUNC 00160b30 (16 bytes) name=__stack_chk_fail

void __stack_chk_fail(void)

{
  (*(code *)PTR___stack_chk_fail_005013c8)();
  return;
}


==================================================================

### FUNC 00160b40 (16 bytes) name=~ProgramSource

void __thiscall cv::ocl::ProgramSource::~ProgramSource(ProgramSource *this)

{
  (*(code *)PTR__ProgramSource_005013d0)();
  return;
}


==================================================================

### FUNC 00160b50 (16 bytes) name=wcsxfrm

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcsxfrm(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
  size_t sVar1;
  
  sVar1 = (*(code *)PTR_wcsxfrm_005013d8)();
  return sVar1;
}


==================================================================

### FUNC 00160b60 (16 bytes) name=bitwise_xor

void cv::bitwise_xor(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _InputArray *param_4)

{
  (*(code *)PTR_bitwise_xor_005013e0)();
  return;
}


==================================================================

### FUNC 00160b70 (16 bytes) name=cvInitMatHeader

void cvInitMatHeader(void)

{
  (*(code *)PTR_cvInitMatHeader_005013e8)();
  return;
}


==================================================================

### FUNC 00160b80 (16 bytes) name=SubSectionEnlarge

void __thiscall CFunctions::SubSectionEnlarge(CFunctions *this)

{
  (*(code *)PTR_SubSectionEnlarge_005013f0)();
  return;
}


==================================================================

### FUNC 00160b90 (16 bytes) name=FilterE4X

void __thiscall CFunctions::FilterE4X(CFunctions *this)

{
  (*(code *)PTR_FilterE4X_005013f8)();
  return;
}


==================================================================

### FUNC 00160ba0 (16 bytes) name=unexpected

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::unexpected(void)

{
  (*(code *)PTR_unexpected_00501400)();
  return;
}


==================================================================

### FUNC 00160bb0 (16 bytes) name=operator==

void __thiscall cv::MatSize::operator==(MatSize *this,MatSize *param_1)

{
  (*(code *)PTR_operator___00501408)();
  return;
}


==================================================================

### FUNC 00160bc0 (16 bytes) name=getJpg

void __thiscall MDTHelper::getJpg(MDTHelper *this,uchar **param_1)

{
  (*(code *)PTR_getJpg_00501410)();
  return;
}


==================================================================

### FUNC 00160bd0 (16 bytes) name=matmul

void __thiscall cv::MatOp::matmul(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  (*(code *)PTR_matmul_00501418)();
  return;
}


==================================================================

### FUNC 00160be0 (16 bytes) name=IsPause

void __thiscall CMagDevice::IsPause(CMagDevice *this)

{
  (*(code *)PTR_IsPause_00501420)();
  return;
}


==================================================================

### FUNC 00160bf0 (16 bytes) name=getDefault

void cv::ocl::Device::getDefault(void)

{
  (*(code *)PTR_getDefault_00501428)();
  return;
}


==================================================================

### FUNC 00160c00 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_00501430)();
  return;
}


==================================================================

### FUNC 00160c10 (16 bytes) name=_M_insert_aux

void __thiscall
std::vector<cv::ocl::PlatformInfo,std::allocator<cv::ocl::PlatformInfo>>::_M_insert_aux(void)

{
  (*(code *)PTR__M_insert_aux_00501438)();
  return;
}


==================================================================

### FUNC 00160c20 (16 bytes) name=cvMemStorageAlloc

void cvMemStorageAlloc(void)

{
  (*(code *)PTR_cvMemStorageAlloc_00501440)();
  return;
}


==================================================================

### FUNC 00160c30 (16 bytes) name=strtof

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float strtof(char *__nptr,char **__endptr)

{
  float fVar1;
  
  fVar1 = (float)(*(code *)PTR_strtof_00501448)();
  return fVar1;
}


==================================================================

### FUNC 00160c40 (16 bytes) name=GetCurrentPos

void __thiscall FStream::GetCurrentPos(FStream *this)

{
  (*(code *)PTR_GetCurrentPos_00501450)();
  return;
}


==================================================================

### FUNC 00160c50 (16 bytes) name=Reset

void __thiscall CAccumulator::Reset(CAccumulator *this,uint param_1,uint param_2,uint param_3)

{
  (*(code *)PTR_Reset_00501458)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160c60 (16 bytes) name=GetCaliFile

void __thiscall CNetComm::GetCaliFile(CNetComm *this,char *param_1)

{
  (*(code *)PTR_GetCaliFile_00501460)();
  return;
}


==================================================================

### FUNC 00160c70 (16 bytes) name=perspectiveTransform

void cv::perspectiveTransform(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  (*(code *)PTR_perspectiveTransform_00501468)();
  return;
}


==================================================================

### FUNC 00160c80 (16 bytes) name=bitwise_and

void cv::bitwise_and(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _InputArray *param_4)

{
  (*(code *)PTR_bitwise_and_00501470)();
  return;
}


==================================================================

### FUNC 00160c90 (16 bytes) name=Lock

void __thiscall CMagDevice::Lock(CMagDevice *this)

{
  (*(code *)PTR_Lock_00501478)();
  return;
}


==================================================================

### FUNC 00160ca0 (16 bytes) name=getAudio

void __thiscall MDTHelper::getAudio(MDTHelper *this,uchar **param_1)

{
  (*(code *)PTR_getAudio_00501480)();
  return;
}


==================================================================

### FUNC 00160cb0 (16 bytes) name=fputs

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fputs(char *__s,FILE *__stream)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fputs_00501488)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 00160cc0 (16 bytes) name=cvCreateImageHeader

void cvCreateImageHeader(void)

{
  (*(code *)PTR_cvCreateImageHeader_00501490)();
  return;
}


==================================================================

### FUNC 00160cd0 (16 bytes) name=SetShutterState

void CNetComm::SetShutterState(int param_1,uint *param_2)

{
  (*(code *)PTR_SetShutterState_00501498)(param_1);
  return;
}


==================================================================

### FUNC 00160ce0 (16 bytes) name=cvStartWriteSeq

void cvStartWriteSeq(void)

{
  (*(code *)PTR_cvStartWriteSeq_005014a0)();
  return;
}


==================================================================

### FUNC 00160cf0 (16 bytes) name=copyTo

void __thiscall cv::Mat::copyTo(Mat *this,_OutputArray *param_1)

{
  (*(code *)PTR_copyTo_005014a8)();
  return;
}


==================================================================

### FUNC 00160d00 (16 bytes) name=MAG_StopProcessImage

void MAG_StopProcessImage(void)

{
  (*(code *)PTR_MAG_StopProcessImage_005014b0)();
  return;
}


==================================================================

### FUNC 00160d10 (16 bytes) name=__cxa_demangle

void __cxa_demangle(void)

{
  (*(code *)PTR___cxa_demangle_005014b8)();
  return;
}


==================================================================

### FUNC 00160d20 (16 bytes) name=rewind

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void rewind(FILE *__stream)

{
  (*(code *)PTR_rewind_005014c0)();
  return;
}


==================================================================

### FUNC 00160d30 (16 bytes) name=cvAttrValue

void cvAttrValue(void)

{
  (*(code *)PTR_cvAttrValue_005014c8)();
  return;
}


==================================================================

### FUNC 00160d40 (16 bytes) name=create

void __thiscall cv::_OutputArray::create(void)

{
  (*(code *)PTR_create_005014d0)();
  return;
}


==================================================================

### FUNC 00160d50 (16 bytes) name=fgets

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * fgets(char *__s,int __n,FILE *__stream)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_fgets_005014d8)(__s,__n);
  return pcVar1;
}


==================================================================

### FUNC 00160d60 (16 bytes) name=MAG_SetDetailEnhancement

void MAG_SetDetailEnhancement(void)

{
  (*(code *)PTR_MAG_SetDetailEnhancement_005014e0)();
  return;
}


==================================================================

### FUNC 00160d70 (16 bytes) name=libusb_handle_events_timeout_completed

void libusb_handle_events_timeout_completed(void)

{
  (*(code *)PTR_libusb_handle_events_timeout_completed_005014e8)();
  return;
}


==================================================================

### FUNC 00160d80 (16 bytes) name=MAG_SetEXLevel

void MAG_SetEXLevel(void)

{
  (*(code *)PTR_MAG_SetEXLevel_005014f0)();
  return;
}


==================================================================

### FUNC 00160d90 (16 bytes) name=TriggerFFC

void __thiscall CMagDevice::TriggerFFC(CMagDevice *this)

{
  (*(code *)PTR_TriggerFFC_005014f8)();
  return;
}


==================================================================

### FUNC 00160da0 (16 bytes) name=ungetwc

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t ungetwc(wint_t __wc,__FILE *__stream)

{
  wint_t wVar1;
  
  wVar1 = (*(code *)PTR_ungetwc_00501500)(__wc);
  return wVar1;
}


==================================================================

### FUNC 00160db0 (16 bytes) name=bitwise_not

void cv::bitwise_not(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  (*(code *)PTR_bitwise_not_00501508)();
  return;
}


==================================================================

### FUNC 00160dc0 (16 bytes) name=depth

void __thiscall cv::_InputArray::depth(_InputArray *this,int param_1)

{
  (*(code *)PTR_depth_00501510)(this,param_1);
  return;
}


==================================================================

### FUNC 00160dd0 (16 bytes) name=SetDetailEnhancement

void CMagDevice::SetDetailEnhancement(int param_1,int param_2)

{
  (*(code *)PTR_SetDetailEnhancement_00501518)(param_1,param_2);
  return;
}


==================================================================

### FUNC 00160de0 (16 bytes) name=set

void __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,void *param_2,ulong param_3)

{
  (*(code *)PTR_set_00501520)(this,param_1);
  return;
}


==================================================================

### FUNC 00160df0 (16 bytes) name=cvGetImageCOI

void cvGetImageCOI(void)

{
  (*(code *)PTR_cvGetImageCOI_00501528)();
  return;
}


==================================================================

### FUNC 00160e00 (16 bytes) name=matchTemplate

void cv::matchTemplate(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                      _InputArray *param_5)

{
  (*(code *)PTR_matchTemplate_00501530)();
  return;
}


==================================================================

### FUNC 00160e10 (16 bytes) name=pthread_cond_init

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_init(pthread_cond_t *__cond,pthread_condattr_t *__cond_attr)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_pthread_cond_init_00501538)((int)__cond);
  return iVar1;
}


==================================================================

### FUNC 00160e20 (16 bytes) name=cvGetMat

void cvGetMat(void)

{
  (*(code *)PTR_cvGetMat_00501540)();
  return;
}


==================================================================

### FUNC 00160e30 (16 bytes) name=MatOp

void __thiscall cv::MatOp::MatOp(MatOp *this)

{
  (*(code *)PTR_MatOp_00501548)();
  return;
}


==================================================================

### FUNC 00160e40 (16 bytes) name=cvPtr3D

void cvPtr3D(void)

{
  (*(code *)PTR_cvPtr3D_00501550)();
  return;
}


==================================================================

### FUNC 00160e50 (16 bytes) name=StopProcessImage

void __thiscall CMagDevice::StopProcessImage(CMagDevice *this)

{
  (*(code *)PTR_StopProcessImage_00501558)();
  return;
}


==================================================================

### FUNC 00160e60 (16 bytes) name=sameSize

void __thiscall cv::_InputArray::sameSize(_InputArray *this,_InputArray *param_1)

{
  (*(code *)PTR_sameSize_00501560)();
  return;
}


==================================================================

### FUNC 00160e70 (16 bytes) name=MAG_GetOutputBMPdata

void MAG_GetOutputBMPdata(void)

{
  (*(code *)PTR_MAG_GetOutputBMPdata_00501568)();
  return;
}


==================================================================

### FUNC 00160e80 (16 bytes) name=libusb_ref_device

void libusb_ref_device(void)

{
  (*(code *)PTR_libusb_ref_device_00501570)();
  return;
}


==================================================================

### FUNC 00160e90 (16 bytes) name=setDDT

void __thiscall MDTHelper::setDDT(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  (*(code *)PTR_setDDT_00501578)(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160ea0 (16 bytes) name=libusb_unref_device

void libusb_unref_device(void)

{
  (*(code *)PTR_libusb_unref_device_00501580)();
  return;
}


==================================================================

### FUNC 00160eb0 (16 bytes) name=MAG_SetIsothermalPara

void MAG_SetIsothermalPara(void)

{
  (*(code *)PTR_MAG_SetIsothermalPara_00501588)();
  return;
}


==================================================================

### FUNC 00160ec0 (16 bytes) name=extractImageCOI

void cv::extractImageCOI(void *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_extractImageCOI_00501590)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160ed0 (16 bytes) name=invert

void cv::invert(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  (*(code *)PTR_invert_00501598)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00160ee0 (16 bytes) name=MAG_IsInitialized

void MAG_IsInitialized(void)

{
  (*(code *)PTR_MAG_IsInitialized_005015a0)();
  return;
}


==================================================================

### FUNC 00160ef0 (16 bytes) name=NAryMatIterator

void __thiscall
cv::NAryMatIterator::NAryMatIterator(NAryMatIterator *this,Mat **param_1,Mat *param_2,int param_3)

{
  (*(code *)PTR_NAryMatIterator_005015a8)();
  return;
}


==================================================================

### FUNC 00160f00 (16 bytes) name=Buffer

void __thiscall cv::ogl::Buffer::Buffer(Buffer *this)

{
  (*(code *)PTR_Buffer_005015b0)();
  return;
}


==================================================================

### FUNC 00160f10 (16 bytes) name=delGlobalObject

void delGlobalObject(_JNIEnv *param_1,_jobject **param_2)

{
  (*(code *)PTR_delGlobalObject_005015b8)();
  return;
}


==================================================================

### FUNC 00160f20 (16 bytes) name=Canny

void cv::Canny(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4,int param_5,
              bool param_6)

{
  (*(code *)PTR_Canny_005015c0)(param_1,param_2,param_5,param_6);
  return;
}


==================================================================

### FUNC 00160f30 (16 bytes) name=Pause

void __thiscall CMagDevice::Pause(CMagDevice *this)

{
  (*(code *)PTR_Pause_005015c8)();
  return;
}


==================================================================

### FUNC 00160f40 (16 bytes) name=SetLensParameter

void __thiscall CFunctions::SetLensParameter(CFunctions *this,void *param_1,uint param_2)

{
  (*(code *)PTR_SetLensParameter_005015d0)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00160f50 (16 bytes) name=copyTo

void __thiscall cv::UMat::copyTo(UMat *this,_OutputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_copyTo_005015d8)();
  return;
}


==================================================================

### FUNC 00160f60 (16 bytes) name=terminate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::terminate(void)

{
  (*(code *)PTR_terminate_005015e0)();
  return;
}


==================================================================

### FUNC 00160f70 (16 bytes) name=deallocate

void __thiscall cv::String::deallocate(String *this)

{
  (*(code *)PTR_deallocate_005015e8)();
  return;
}


==================================================================

### FUNC 00160f80 (16 bytes) name=mean

void __thiscall cv::mean(cv *this,_InputArray *param_1,_InputArray *param_2)

{
  (*(code *)PTR_mean_005015f0)();
  return;
}


==================================================================

### FUNC 00160f90 (16 bytes) name=mkstemp

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int mkstemp(char *__template)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_mkstemp_005015f8)((int)__template);
  return iVar1;
}


==================================================================

### FUNC 00160fa0 (16 bytes) name=_M_fill_insert

void __thiscall std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert(void)

{
  (*(code *)PTR__M_fill_insert_00501600)();
  return;
}


==================================================================

### FUNC 00160fb0 (16 bytes) name=usbi_sanitize_device

void usbi_sanitize_device(void)

{
  (*(code *)PTR_usbi_sanitize_device_00501608)();
  return;
}


==================================================================

### FUNC 00160fc0 (16 bytes) name=AndroidBitmap_getInfo

void AndroidBitmap_getInfo(void)

{
  (*(code *)PTR_AndroidBitmap_getInfo_00501610)();
  return;
}


==================================================================

### FUNC 00160fd0 (16 bytes) name=~MutexLock

void __thiscall MutexLock::~MutexLock(MutexLock *this)

{
  (*(code *)PTR__MutexLock_00501618)();
  return;
}


==================================================================

### FUNC 00160fe0 (16 bytes) name=StartReceiveImg_UnProtected

void __thiscall CNetComm::StartReceiveImg_UnProtected(CNetComm *this,struct_RePlayPara *param_1)

{
  (*(code *)PTR_StartReceiveImg_UnProtected_00501620)();
  return;
}


==================================================================

### FUNC 00160ff0 (16 bytes) name=~Image2D

void __thiscall cv::ocl::Image2D::~Image2D(Image2D *this)

{
  (*(code *)PTR__Image2D_00501628)();
  return;
}


==================================================================

### FUNC 00161000 (16 bytes) name=setlocale

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * setlocale(int __category,char *__locale)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_setlocale_00501630)(__category);
  return pcVar1;
}


==================================================================

### FUNC 00161010 (16 bytes) name=SaveDDT

void SaveDDT(uint param_1,uchar *param_2,char *param_3)

{
  (*(code *)PTR_SaveDDT_00501638)(param_1);
  return;
}


==================================================================

### FUNC 00161020 (16 bytes) name=cvWrite

void cvWrite(void)

{
  (*(code *)PTR_cvWrite_00501640)();
  return;
}


==================================================================

### FUNC 00161030 (16 bytes) name=cvSeqPushMulti

void cvSeqPushMulti(void)

{
  (*(code *)PTR_cvSeqPushMulti_00501648)();
  return;
}


==================================================================

### FUNC 00161040 (16 bytes) name=cvEndWriteSeq

void cvEndWriteSeq(void)

{
  (*(code *)PTR_cvEndWriteSeq_00501650)();
  return;
}


==================================================================

### FUNC 00161050 (16 bytes) name=CallVoidMethod

void _JNIEnv::CallVoidMethod(_jobject *param_1,_jmethodID *param_2,...)

{
  (*(code *)PTR_CallVoidMethod_00501658)();
  return;
}


==================================================================

### FUNC 00161060 (16 bytes) name=cvSeqRemove

void cvSeqRemove(void)

{
  (*(code *)PTR_cvSeqRemove_00501660)();
  return;
}


==================================================================

### FUNC 00161070 (16 bytes) name=ptr

void __thiscall cv::ocl::Queue::ptr(Queue *this)

{
  (*(code *)PTR_ptr_00501668)();
  return;
}


==================================================================

### FUNC 00161080 (16 bytes) name=create

void __thiscall cv::ocl::Context::create(Context *this,int param_1)

{
  (*(code *)PTR_create_00501670)(this,param_1);
  return;
}


==================================================================

### FUNC 00161090 (16 bytes) name=createSameSize

void __thiscall
cv::_OutputArray::createSameSize(_OutputArray *this,_InputArray *param_1,int param_2)

{
  (*(code *)PTR_createSameSize_00501678)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 001610a0 (16 bytes) name=~__class_type_info

void __thiscall __cxxabiv1::__class_type_info::~__class_type_info(__class_type_info *this)

{
  (*(code *)PTR____class_type_info_00501680)();
  return;
}


==================================================================

### FUNC 001610b0 (16 bytes) name=__convert_to_v<float>

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::__convert_to_v<float>(char *param_1,float *param_2,_Ios_Iostate *param_3,int **param_4)

{
  (*(code *)PTR___convert_to_v<float>_00501688)();
  return;
}


==================================================================

### FUNC 001610c0 (16 bytes) name=parallel_for_

void cv::parallel_for_(Range *param_1,ParallelLoopBody *param_2,double param_3)

{
  (*(code *)PTR_parallel_for__00501690)();
  return;
}


==================================================================

### FUNC 001610d0 (16 bytes) name=FixTemperature

void CMagDevice::FixTemperature(int param_1,float param_2,uint param_3)

{
  (*(code *)PTR_FixTemperature_00501698)(param_1,param_3);
  return;
}


==================================================================

### FUNC 001610e0 (16 bytes) name=rectangle

void cv::rectangle(void)

{
  (*(code *)PTR_rectangle_005016a0)();
  return;
}


==================================================================

### FUNC 001610f0 (16 bytes) name=libusb_get_next_timeout

void libusb_get_next_timeout(void)

{
  (*(code *)PTR_libusb_get_next_timeout_005016a8)();
  return;
}


==================================================================

### FUNC 00161100 (16 bytes) name=dl_iterate_phdr

void dl_iterate_phdr(void)

{
  (*(code *)PTR_dl_iterate_phdr_005016b0)();
  return;
}


==================================================================

### FUNC 00161110 (16 bytes) name=cvWriteInt

void cvWriteInt(void)

{
  (*(code *)PTR_cvWriteInt_005016b8)();
  return;
}


==================================================================

### FUNC 00161120 (16 bytes) name=uncaught_exception

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::uncaught_exception(void)

{
  (*(code *)PTR_uncaught_exception_005016c0)();
  return;
}


==================================================================

### FUNC 00161130 (16 bytes) name=operator-

void __thiscall cv::operator-(cv *this,Mat *param_1,Mat *param_2)

{
  (*(code *)PTR_operator__005016c8)();
  return;
}


==================================================================

### FUNC 00161140 (16 bytes) name=cvStartReadRawData

void cvStartReadRawData(void)

{
  (*(code *)PTR_cvStartReadRawData_005016d0)();
  return;
}


==================================================================

### FUNC 00161150 (16 bytes) name=backSubst

void cv::SVD::backSubst(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                       _InputArray *param_4,_OutputArray *param_5)

{
  (*(code *)PTR_backSubst_005016d8)();
  return;
}


==================================================================

### FUNC 00161160 (16 bytes) name=__cxa_call_unexpected

void __cxa_call_unexpected(void)

{
  (*(code *)PTR___cxa_call_unexpected_005016e0)();
  return;
}


==================================================================

### FUNC 00161170 (16 bytes) name=getText

void __thiscall MDTHelper::getText(MDTHelper *this,uchar **param_1)

{
  (*(code *)PTR_getText_005016e8)();
  return;
}


==================================================================

### FUNC 00161180 (16 bytes) name=libusb_get_device_address

void libusb_get_device_address(void)

{
  (*(code *)PTR_libusb_get_device_address_005016f0)();
  return;
}


==================================================================

### FUNC 00161190 (16 bytes) name=MDTHelper

void __thiscall MDTHelper::MDTHelper(MDTHelper *this)

{
  (*(code *)PTR_MDTHelper_005016f8)();
  return;
}


==================================================================

### FUNC 001611a0 (16 bytes) name=ones

void __thiscall cv::UMat::ones(void)

{
  (*(code *)PTR_ones_00501700)();
  return;
}


==================================================================

### FUNC 001611b0 (16 bytes) name=cvPointSeqFromMat

void cvPointSeqFromMat(void)

{
  (*(code *)PTR_cvPointSeqFromMat_00501708)();
  return;
}


==================================================================

### FUNC 001611c0 (16 bytes) name=vsprintf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int vsprintf(char *__s,char *__format,__gnuc_va_list __arg)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_vsprintf_00501710)((int)__s);
  return iVar1;
}


==================================================================

### FUNC 001611d0 (16 bytes) name=newGlobalObject

void newGlobalObject(_JNIEnv *param_1,_jobject *param_2)

{
  (*(code *)PTR_newGlobalObject_00501718)();
  return;
}


==================================================================

### FUNC 001611e0 (16 bytes) name=GetTemperatureData

void CMagDevice::GetTemperatureData(int *param_1,uint param_2,int param_3)

{
  (*(code *)PTR_GetTemperatureData_00501720)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 001611f0 (16 bytes) name=FileStorage

void __thiscall cv::FileStorage::FileStorage(FileStorage *this,CvFileStorage *param_1,bool param_2)

{
  (*(code *)PTR_FileStorage_00501728)(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00161200 (16 bytes) name=UMatData

void __thiscall cv::UMatData::UMatData(UMatData *this,MatAllocator *param_1)

{
  (*(code *)PTR_UMatData_00501730)();
  return;
}


==================================================================

### FUNC 00161210 (16 bytes) name=solveCubic

void cv::solveCubic(_InputArray *param_1,_OutputArray *param_2)

{
  (*(code *)PTR_solveCubic_00501738)();
  return;
}


==================================================================

### FUNC 00161220 (16 bytes) name=~vector

void __thiscall
std::vector<cv::UMat,std::allocator<cv::UMat>>::~vector
          (vector<cv::UMat,std::allocator<cv::UMat>> *this)

{
  (*(code *)PTR__vector_00501740)();
  return;
}


==================================================================

### FUNC 00161230 (16 bytes) name=open

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int open(char *__file,int __oflag,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_open_00501748)((int)__file,__oflag);
  return iVar1;
}


==================================================================

### FUNC 00161240 (16 bytes) name=cvWriteComment

void cvWriteComment(void)

{
  (*(code *)PTR_cvWriteComment_00501750)();
  return;
}


==================================================================

### FUNC 00161250 (16 bytes) name=locateROI

void __thiscall cv::cuda::GpuMat::locateROI(GpuMat *this,Size_ *param_1,Point_ *param_2)

{
  (*(code *)PTR_locateROI_00501758)();
  return;
}


==================================================================

### FUNC 00161260 (16 bytes) name=cvNextNArraySlice

void cvNextNArraySlice(void)

{
  (*(code *)PTR_cvNextNArraySlice_00501760)();
  return;
}


==================================================================

### FUNC 00161270 (16 bytes) name=cvReadRawDataSlice

void cvReadRawDataSlice(void)

{
  (*(code *)PTR_cvReadRawDataSlice_00501768)();
  return;
}


==================================================================

### FUNC 00161280 (16 bytes) name=cvSeqPush

void cvSeqPush(void)

{
  (*(code *)PTR_cvSeqPush_00501770)();
  return;
}


==================================================================

### FUNC 00161290 (16 bytes) name=inRange

void cv::inRange(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                _OutputArray *param_4)

{
  (*(code *)PTR_inRange_00501778)();
  return;
}


==================================================================

### FUNC 001612a0 (16 bytes) name=ptr

void __thiscall cv::ocl::Platform::ptr(Platform *this)

{
  (*(code *)PTR_ptr_00501780)();
  return;
}


==================================================================

### FUNC 001612b0 (16 bytes) name=Mat

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Rect_ *param_2)

{
  (*(code *)PTR_Mat_00501788)();
  return;
}


==================================================================

### FUNC 001612c0 (16 bytes) name=hash

void __thiscall cv::ocl::ProgramSource::hash(ProgramSource *this)

{
  (*(code *)PTR_hash_00501790)();
  return;
}


==================================================================

### FUNC 001612d0 (16 bytes) name=ellipse2Poly

void cv::ellipse2Poly(void)

{
  (*(code *)PTR_ellipse2Poly_00501798)();
  return;
}


==================================================================

### FUNC 001612e0 (16 bytes) name=fscanf

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fscanf(FILE *__stream,char *__format,...)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fscanf_005017a0)((int)__stream);
  return iVar1;
}


==================================================================

### FUNC 001612f0 (16 bytes) name=threshold_

void __thiscall
ImageProc::threshold_(ImageProc *this,Mat *param_1,Mat *param_2,int param_3,int param_4)

{
  (*(code *)PTR_threshold__005017a8)();
  return;
}


==================================================================

### FUNC 00161300 (16 bytes) name=strdup

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strdup(char *__s)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strdup_005017b0)();
  return pcVar1;
}


==================================================================

### FUNC 00161310 (16 bytes) name=~vector

void __thiscall
std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::~vector
          (vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *this)

{
  (*(code *)PTR__vector_005017b8)();
  return;
}


==================================================================

### FUNC 00161320 (16 bytes) name=__convert_to_v<long_double>

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void std::__convert_to_v<long_double>
               (char *param_1,longdouble *param_2,_Ios_Iostate *param_3,int **param_4)

{
  (*(code *)PTR___convert_to_v<long_double>_005017c0)();
  return;
}


==================================================================

### FUNC 00161330 (16 bytes) name=__cxa_free_exception

void __cxa_free_exception(void)

{
  (*(code *)PTR___cxa_free_exception_005017c8)();
  return;
}


==================================================================

### FUNC 00161340 (16 bytes) name=resize

void __thiscall cv::Mat::resize(Mat *this,ulong param_1)

{
  (*(code *)PTR_resize_005017d0)();
  return;
}


==================================================================

### FUNC 00161350 (16 bytes) name=MAG_GetEllipseTemperatureInfo

void MAG_GetEllipseTemperatureInfo(void)

{
  (*(code *)PTR_MAG_GetEllipseTemperatureInfo_005017d8)();
  return;
}


==================================================================

### FUNC 00161360 (16 bytes) name=strrchr

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strrchr(char *__s,int __c)

{
  char *pcVar1;
  
  pcVar1 = (char *)(*(code *)PTR_strrchr_005017e0)(__s,__c);
  return pcVar1;
}


==================================================================

### FUNC 00161370 (16 bytes) name=localtime_r

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

tm * localtime_r(time_t *__timer,tm *__tp)

{
  tm *ptVar1;
  
  ptVar1 = (tm *)(*(code *)PTR_localtime_r_005017e8)();
  return ptVar1;
}


==================================================================

### FUNC 00161380 (16 bytes) name=libusb_cancel_transfer

void libusb_cancel_transfer(void)

{
  (*(code *)PTR_libusb_cancel_transfer_005017f0)();
  return;
}


==================================================================

### FUNC 00161390 (16 bytes) name=closedir

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int closedir(DIR *__dirp)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_closedir_005017f8)((int)__dirp);
  return iVar1;
}


==================================================================

### FUNC 001613a0 (16 bytes) name=_Unwind_DeleteException

void _Unwind_DeleteException(void)

{
  (*(code *)PTR__Unwind_DeleteException_00501800)();
  return;
}


==================================================================

### FUNC 001613b0 (16 bytes) name=cvGetDims

void cvGetDims(void)

{
  (*(code *)PTR_cvGetDims_00501808)();
  return;
}


==================================================================

### FUNC 001613c0 (16 bytes) name=MAG_GetOutputRawData

void MAG_GetOutputRawData(void)

{
  (*(code *)PTR_MAG_GetOutputRawData_00501810)();
  return;
}


==================================================================

### FUNC 001613d0 (16 bytes) name=getGaussianKernel

void __thiscall cv::getGaussianKernel(cv *this,int param_1,double param_2,int param_3)

{
  (*(code *)PTR_getGaussianKernel_00501818)(this,param_1,param_3);
  return;
}


==================================================================

### FUNC 001613e0 (16 bytes) name=usbi_signal_event

void usbi_signal_event(void)

{
  (*(code *)PTR_usbi_signal_event_00501820)();
  return;
}


==================================================================

### FUNC 001613f0 (16 bytes) name=convertScaleAbs

void cv::convertScaleAbs(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4)

{
  (*(code *)PTR_convertScaleAbs_00501828)();
  return;
}


==================================================================

### FUNC 00161400 (16 bytes) name=fstat

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fstat(int __fd,stat *__buf)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_fstat_00501830)(__fd);
  return iVar1;
}


==================================================================

### FUNC 00161410 (16 bytes) name=__cxa_guard_acquire

void __cxa_guard_acquire(void)

{
  (*(code *)PTR___cxa_guard_acquire_00501838)();
  return;
}


==================================================================

### FUNC 00161420 (16 bytes) name=norm

void cv::norm(_InputArray *param_1,_InputArray *param_2,int param_3,_InputArray *param_4)

{
  (*(code *)PTR_norm_00501840)(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00161430 (16 bytes) name=allocate

void __thiscall cv::String::allocate(String *this,ulong param_1)

{
  (*(code *)PTR_allocate_00501848)();
  return;
}


==================================================================

### FUNC 00161440 (16 bytes) name=_Unwind_GetDataRelBase

void _Unwind_GetDataRelBase(void)

{
  (*(code *)PTR__Unwind_GetDataRelBase_00501850)();
  return;
}


==================================================================

### FUNC 00161450 (16 bytes) name=dft

void cv::dft(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4)

{
  (*(code *)PTR_dft_00501858)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00161460 (16 bytes) name=getTextSize

void __thiscall
cv::getTextSize(cv *this,String *param_1,int param_2,double param_3,int param_4,int *param_5)

{
  (*(code *)PTR_getTextSize_00501860)(this,param_1,param_2,param_4);
  return;
}


==================================================================

### FUNC 00161470 (16 bytes) name=copyMakeBorder

void cv::copyMakeBorder(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,
                       int param_5,int param_6,int param_7,Scalar_ *param_8)

{
  (*(code *)PTR_copyMakeBorder_00501868)(param_1,param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 00161480 (16 bytes) name=offset

void __thiscall cv::_InputArray::offset(_InputArray *this,int param_1)

{
  (*(code *)PTR_offset_00501870)(this,param_1);
  return;
}


==================================================================

### FUNC 00161490 (32 bytes) name=entry

void entry(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 001614b0 (32 bytes) name=FUN_001614b0

void FUN_001614b0(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 001614d0 (172 bytes) name=FUN_001614d0

void FUN_001614d0(Mat *param_1,Mat *param_2)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  
  for (; param_1 != param_2; param_1 = param_1 + 0x60) {
    if (*(long *)(param_1 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(param_1 + 0x38) + 0x14);
      do {
        iVar2 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar2 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar2 == 1) {
        cv::Mat::deallocate(param_1);
      }
    }
    *(undefined8 *)(param_1 + 0x38) = 0;
    *(undefined8 *)(param_1 + 0x10) = 0;
    *(undefined8 *)(param_1 + 0x28) = 0;
    *(undefined8 *)(param_1 + 0x20) = 0;
    *(undefined8 *)(param_1 + 0x18) = 0;
    for (lVar5 = 0; (int)lVar5 < *(int *)(param_1 + 4); lVar5 = lVar5 + 1) {
      *(undefined4 *)(*(long *)(param_1 + 0x40) + lVar5 * 4) = 0;
    }
    if (*(Mat **)(param_1 + 0x48) != param_1 + 0x50) {
      cv::fastFree(*(Mat **)(param_1 + 0x48));
    }
  }
  return;
}


==================================================================

### FUNC 0016157c (124 bytes) name=FUN_0016157c

void FUN_0016157c(long *param_1,long *param_2)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  undefined *puVar4;
  int *piVar5;
  
  for (; param_1 != param_2; param_1 = param_1 + 1) {
    puVar4 = (undefined *)(*param_1 + -0x18);
    if (puVar4 != PTR_DAT_00501f30) {
      piVar5 = (int *)(*param_1 + -8);
      do {
        iVar1 = *piVar5;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar3) {
          *piVar5 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar1 < 1) {
        operator_delete(puVar4);
      }
    }
  }
  return;
}


==================================================================

### FUNC 001615f8 (32 bytes) name=FUN_001615f8

void FUN_001615f8(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00161618 (64 bytes) name=FUN_00161618

void FUN_00161618(void *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar4 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (0 < iVar4) {
    return;
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00161658 (64 bytes) name=FUN_00161658

void FUN_00161658(void *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar4 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (0 < iVar4) {
    return;
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00161698 (64 bytes) name=FUN_00161698

void FUN_00161698(void *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar4 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (0 < iVar4) {
    return;
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001616d8 (12 bytes) name=_FINI_0

void _FINI_0(void)

{
  __cxa_finalize(&DAT_00502000);
  return;
}


==================================================================

### FUNC 001616e4 (60 bytes) name=_INIT_0

void _INIT_0(void)

{
  FUN_003d38d4(&DAT_00509650);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_00509650,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161720 (60 bytes) name=_INIT_1

void _INIT_1(void)

{
  FUN_003d38d4(&DAT_00509688);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_00509688,&DAT_00502000);
  return;
}


==================================================================

### FUNC 0016175c (60 bytes) name=_INIT_2

void _INIT_2(void)

{
  FUN_003d38d4(&DAT_00509690);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_00509690,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161798 (60 bytes) name=_INIT_3

void _INIT_3(void)

{
  FUN_003d38d4(&DAT_0052e934);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_0052e934,&DAT_00502000);
  return;
}


==================================================================

### FUNC 001617d4 (60 bytes) name=_INIT_4

void _INIT_4(void)

{
  FUN_003d38d4(&DAT_0052e935);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_0052e935,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161810 (60 bytes) name=_INIT_5

void _INIT_5(void)

{
  FUN_003d38d4(&DAT_0052fd68);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_0052fd68,&DAT_00502000);
  return;
}


==================================================================

### FUNC 0016184c (524 bytes) name=_INIT_6

void _INIT_6(void)

{
  undefined *puVar1;
  
  puVar1 = PTR_gChannelObj_00501f00;
  *(undefined4 *)(PTR_gChannelObj_00501f00 + 0x38) = 0;
  *(undefined4 *)(puVar1 + 0x78) = 0;
  *(undefined4 *)(puVar1 + 0xb8) = 0;
  *(undefined4 *)(puVar1 + 0xf8) = 0;
  *(undefined4 *)(puVar1 + 0x138) = 0;
  *(undefined4 *)(puVar1 + 0x178) = 0;
  *(undefined4 *)(puVar1 + 0x1b8) = 0;
  *(undefined4 *)(puVar1 + 0x1f8) = 0;
  *(undefined4 *)(puVar1 + 0x238) = 0;
  *(undefined4 *)(puVar1 + 0x278) = 0;
  *(undefined4 *)(puVar1 + 0x2b8) = 0;
  *(undefined4 *)(puVar1 + 0x2f8) = 0;
  *(undefined4 *)(puVar1 + 0x338) = 0;
  *(undefined4 *)(puVar1 + 0x378) = 0;
  *(undefined4 *)(puVar1 + 0x3b8) = 0;
  *(undefined4 *)(puVar1 + 0x3f8) = 0;
  *(undefined4 *)(puVar1 + 0x438) = 0;
  *(undefined4 *)(puVar1 + 0x478) = 0;
  *(undefined4 *)(puVar1 + 0x4b8) = 0;
  *(undefined4 *)(puVar1 + 0x4f8) = 0;
  *(undefined4 *)(puVar1 + 0x538) = 0;
  *(undefined4 *)(puVar1 + 0x578) = 0;
  *(undefined4 *)(puVar1 + 0x5b8) = 0;
  *(undefined4 *)(puVar1 + 0x5f8) = 0;
  *(undefined4 *)(puVar1 + 0x638) = 0;
  *(undefined4 *)(puVar1 + 0x678) = 0;
  *(undefined4 *)(puVar1 + 0x6b8) = 0;
  *(undefined4 *)(puVar1 + 0x6f8) = 0;
  *(undefined4 *)(puVar1 + 0x738) = 0;
  *(undefined4 *)(puVar1 + 0x778) = 0;
  *(undefined4 *)(puVar1 + 0x7b8) = 0;
  *(undefined4 *)(puVar1 + 0x7f8) = 0;
  *(undefined4 *)(puVar1 + 0x838) = 0;
  *(undefined4 *)(puVar1 + 0x878) = 0;
  *(undefined4 *)(puVar1 + 0x8b8) = 0;
  *(undefined4 *)(puVar1 + 0x8f8) = 0;
  *(undefined4 *)(puVar1 + 0x938) = 0;
  *(undefined4 *)(puVar1 + 0x978) = 0;
  *(undefined4 *)(puVar1 + 0x9b8) = 0;
  *(undefined4 *)(puVar1 + 0x9f8) = 0;
  *(undefined4 *)(puVar1 + 0xa38) = 0;
  *(undefined4 *)(puVar1 + 0xa78) = 0;
  *(undefined4 *)(puVar1 + 0xab8) = 0;
  *(undefined4 *)(puVar1 + 0xaf8) = 0;
  *(undefined4 *)(puVar1 + 0xb38) = 0;
  *(undefined4 *)(puVar1 + 0xb78) = 0;
  *(undefined4 *)(puVar1 + 3000) = 0;
  *(undefined4 *)(puVar1 + 0xbf8) = 0;
  *(undefined4 *)(puVar1 + 0xc38) = 0;
  *(undefined4 *)(puVar1 + 0xc78) = 0;
  *(undefined4 *)(puVar1 + 0xcb8) = 0;
  *(undefined4 *)(puVar1 + 0xcf8) = 0;
  *(undefined4 *)(puVar1 + 0xd38) = 0;
  *(undefined4 *)(puVar1 + 0xd78) = 0;
  *(undefined4 *)(puVar1 + 0xdb8) = 0;
  *(undefined4 *)(puVar1 + 0xdf8) = 0;
  *(undefined4 *)(puVar1 + 0xe38) = 0;
  *(undefined4 *)(puVar1 + 0xe78) = 0;
  *(undefined4 *)(puVar1 + 0xeb8) = 0;
  *(undefined4 *)(puVar1 + 0xef8) = 0;
  *(undefined4 *)(puVar1 + 0xf38) = 0;
  *(undefined4 *)(puVar1 + 0xf78) = 0;
  *(undefined4 *)(puVar1 + 0xfb8) = 0;
  *(undefined4 *)(puVar1 + 0xff8) = 0;
  *(undefined4 *)(puVar1 + 0x1038) = 0;
  *(undefined4 *)(puVar1 + 0x1078) = 0;
  *(undefined4 *)(puVar1 + 0x10b8) = 0;
  *(undefined4 *)(puVar1 + 0x10f8) = 0;
  *(undefined4 *)(puVar1 + 0x1138) = 0;
  *(undefined4 *)(puVar1 + 0x1178) = 0;
  *(undefined4 *)(puVar1 + 0x11b8) = 0;
  *(undefined4 *)(puVar1 + 0x11f8) = 0;
  *(undefined4 *)(puVar1 + 0x1238) = 0;
  *(undefined4 *)(puVar1 + 0x1278) = 0;
  *(undefined4 *)(puVar1 + 0x12b8) = 0;
  *(undefined4 *)(puVar1 + 0x12f8) = 0;
  *(undefined4 *)(puVar1 + 0x1338) = 0;
  *(undefined4 *)(puVar1 + 0x1378) = 0;
  *(undefined4 *)(puVar1 + 0x13b8) = 0;
  *(undefined4 *)(puVar1 + 0x13f8) = 0;
  *(undefined4 *)(puVar1 + 0x1438) = 0;
  *(undefined4 *)(puVar1 + 0x1478) = 0;
  *(undefined4 *)(puVar1 + 0x14b8) = 0;
  *(undefined4 *)(puVar1 + 0x14f8) = 0;
  *(undefined4 *)(puVar1 + 0x1538) = 0;
  *(undefined4 *)(puVar1 + 0x1578) = 0;
  *(undefined4 *)(puVar1 + 0x15b8) = 0;
  *(undefined4 *)(puVar1 + 0x15f8) = 0;
  *(undefined4 *)(puVar1 + 0x1638) = 0;
  *(undefined4 *)(puVar1 + 0x1678) = 0;
  *(undefined4 *)(puVar1 + 0x16b8) = 0;
  *(undefined4 *)(puVar1 + 0x16f8) = 0;
  *(undefined4 *)(puVar1 + 0x1738) = 0;
  *(undefined4 *)(puVar1 + 0x1778) = 0;
  *(undefined4 *)(puVar1 + 0x17b8) = 0;
  *(undefined4 *)(puVar1 + 0x17f8) = 0;
  *(undefined4 *)(puVar1 + 0x1838) = 0;
  *(undefined4 *)(puVar1 + 0x1878) = 0;
  *(undefined4 *)(puVar1 + 0x18b8) = 0;
  *(undefined4 *)(puVar1 + 0x18f8) = 0;
  *(undefined4 *)(puVar1 + 0x1938) = 0;
  *(undefined4 *)(puVar1 + 0x1978) = 0;
  *(undefined4 *)(puVar1 + 0x19b8) = 0;
  *(undefined4 *)(puVar1 + 0x19f8) = 0;
  *(undefined4 *)(puVar1 + 0x1a38) = 0;
  *(undefined4 *)(puVar1 + 0x1a78) = 0;
  *(undefined4 *)(puVar1 + 0x1ab8) = 0;
  *(undefined4 *)(puVar1 + 0x1af8) = 0;
  *(undefined4 *)(puVar1 + 0x1b38) = 0;
  *(undefined4 *)(puVar1 + 0x1b78) = 0;
  *(undefined4 *)(puVar1 + 0x1bb8) = 0;
  *(undefined4 *)(puVar1 + 0x1bf8) = 0;
  *(undefined4 *)(puVar1 + 0x1c38) = 0;
  *(undefined4 *)(puVar1 + 0x1c78) = 0;
  *(undefined4 *)(puVar1 + 0x1cb8) = 0;
  *(undefined4 *)(puVar1 + 0x1cf8) = 0;
  *(undefined4 *)(puVar1 + 0x1d38) = 0;
  *(undefined4 *)(puVar1 + 0x1d78) = 0;
  *(undefined4 *)(puVar1 + 0x1db8) = 0;
  *(undefined4 *)(puVar1 + 0x1df8) = 0;
  *(undefined4 *)(puVar1 + 0x1e38) = 0;
  *(undefined4 *)(puVar1 + 0x1e78) = 0;
  *(undefined4 *)(puVar1 + 0x1eb8) = 0;
  *(undefined4 *)(puVar1 + 0x1ef8) = 0;
  *(undefined4 *)(puVar1 + 0x1f38) = 0;
  *(undefined4 *)(puVar1 + 0x1f78) = 0;
  *(undefined4 *)(puVar1 + 0x1fb8) = 0;
  *(undefined4 *)(puVar1 + 0x1ff8) = 0;
  return;
}


==================================================================

### FUNC 00161a60 (68 bytes) name=_INIT_7

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void _INIT_7(void)

{
  uRam0000000000531e58 = _UNK_00161ab8;
  _DAT_00531e50 = _DAT_00161ab0;
  _DAT_00531e88 = _UNK_00161ae8;
  _DAT_00531e80 = _DAT_00161ae0;
  uRam0000000000531e78 = _UNK_00161ad8;
  _DAT_00531e70 = _DAT_00161ad0;
  _DAT_00531e68 = _UNK_00161ac8;
  _DAT_00531e60 = _DAT_00161ac0;
  return;
}


==================================================================

### FUNC 00161af0 (476 bytes) name=_INIT_8

void _INIT_8(void)

{
  cv::MatOp::MatOp((MatOp *)&DAT_00531f80);
  DAT_00531f80 = &PTR_FUN_004fbdb0;
  __cxa_atexit(FUN_002eedb4,&DAT_00531f80,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531fa8);
  DAT_00531fa8 = &PTR_FUN_004fbea0;
  __cxa_atexit(FUN_002eed78,&DAT_00531fa8,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531fb8);
  DAT_00531fb8 = &PTR_FUN_004fbf90;
  __cxa_atexit(FUN_002eed3c,&DAT_00531fb8,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531f90);
  DAT_00531f90 = &PTR_FUN_004fc080;
  __cxa_atexit(FUN_002eed00,&DAT_00531f90,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531f88);
  DAT_00531f88 = &PTR_FUN_004fc260;
  __cxa_atexit(FUN_002eec88,&DAT_00531f88,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531fb0);
  DAT_00531fb0 = &PTR_FUN_004fc350;
  __cxa_atexit(FUN_002eec4c,&DAT_00531fb0,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531fa0);
  DAT_00531fa0 = &PTR_FUN_004fc170;
  __cxa_atexit(FUN_002eecc4,&DAT_00531fa0,&DAT_00502000);
  cv::MatOp::MatOp((MatOp *)&DAT_00531f70);
  DAT_00531f70 = &PTR_FUN_004fc440;
  __cxa_atexit(FUN_002eec10,&DAT_00531f70,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161ccc (52 bytes) name=_INIT_9

void _INIT_9(void)

{
  DAT_00531fd0 = 0;
  DAT_00531fd4 = 0;
  DAT_00531fc8 = 0;
  DAT_00531fc0 = 0x3000000;
  __cxa_atexit(PTR___InputOutputArray_00501fc8,&DAT_00531fc0,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161d00 (60 bytes) name=_INIT_10

void _INIT_10(void)

{
  FUN_003d38d4(&DAT_00532048);
  __cxa_atexit(PTR_FUN_00501b28,&DAT_00532048,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161d3c (32 bytes) name=_INIT_11

void _INIT_11(void)

{
  DAT_005329e8 = 0;
  __cxa_atexit(FUN_003684a0,&DAT_005329e8,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161d5c (616 bytes) name=_INIT_12

void _INIT_12(void)

{
  undefined *puVar1;
  
  CvType::CvType((CvType *)&DAT_005329f0,"opencv-sequence",FUN_0037101c,FUN_00371128,FUN_0037f0ac,
                 FUN_0037af60,FUN_00371258);
  puVar1 = PTR__CvType_00501eb8;
  __cxa_atexit(PTR__CvType_00501eb8,&DAT_005329f0,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_00532a00,"opencv-sequence-tree",FUN_0037101c,FUN_00371128,
                 FUN_00386740,FUN_0037af60,FUN_00371258);
  __cxa_atexit(puVar1,&DAT_00532a00,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_00532a20,"opencv-graph",FUN_00371038,FUN_00371074,FUN_0037dbfc,
                 FUN_00379700,FUN_00371250);
  __cxa_atexit(puVar1,&DAT_00532a20,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_00532a08,"opencv-sparse-matrix",FUN_00370f94,
                 (_func_void_void_ptr_ptr *)PTR_cvReleaseSparseMat_00501898,FUN_0037d574,
                 FUN_003793b4,(_func_void_ptr_void_ptr *)PTR_cvCloneSparseMat_00501fa0);
  __cxa_atexit(puVar1,&DAT_00532a08,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_00532a30,"opencv-image",FUN_00371008,
                 (_func_void_void_ptr_ptr *)PTR_cvReleaseImage_00501be8,FUN_0037bd04,FUN_00379064,
                 (_func_void_ptr_void_ptr *)PTR_cvCloneImage_00501998);
  __cxa_atexit(puVar1,&DAT_00532a30,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_00532a28,"opencv-matrix",FUN_00370f2c,
                 (_func_void_void_ptr_ptr *)PTR_cvReleaseMat_00501e58,FUN_0037d1b8,FUN_00378ef8,
                 (_func_void_ptr_void_ptr *)PTR_cvCloneMat_00501b08);
  __cxa_atexit(puVar1,&DAT_00532a28,&DAT_00502000);
  CvType::CvType((CvType *)&DAT_005329f8,"opencv-nd-matrix",FUN_00370f78,cvReleaseMat,FUN_0037c8f8,
                 FUN_00378d5c,(_func_void_ptr_void_ptr *)PTR_cvCloneMatND_00501e50);
  __cxa_atexit(puVar1,&DAT_005329f8,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00161fc4 (136 bytes) name=_INIT_13

void _INIT_13(void)

{
  memset(&DAT_00532ccc,0,0x100);
  DAT_00532cc8 = 0;
  DAT_00532d30 = 1;
  memset(&DAT_00532a8c,0,0x100);
  DAT_00532a88 = 0;
  DAT_00532a81 = 0;
  DAT_00532a82 = 0;
  DAT_00532a80 = 0;
  DAT_00532a60 = 0;
  return;
}


==================================================================

### FUNC 0016204c (92 bytes) name=_INIT_14

void _INIT_14(void)

{
  long lVar1;
  Mutex *this;
  
  lVar1 = 0x1e;
  this = (Mutex *)&DAT_00532dd0;
  do {
    cv::Mutex::Mutex(this);
    lVar1 = lVar1 + -1;
    this = this + 8;
  } while (lVar1 != -1);
  __cxa_atexit(FUN_003b82a0,0,&DAT_00502000);
  return;
}


==================================================================

### FUNC 001620e0 (24 bytes) name=_INIT_15

void _INIT_15(void)

{
  DAT_00535100 = 0;
  DAT_00535108 = 0;
  DAT_00535110 = 0;
  DAT_00535118 = 0;
  DAT_00535120 = 0;
  return;
}


==================================================================

### FUNC 001620f8 (96 bytes) name=_INIT_16

void _INIT_16(void)

{
  int iVar1;
  
  DAT_0054513c = false;
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    iVar1 = pthread_key_create(&DAT_00545138,FUN_003cf300);
    DAT_0054513c = iVar1 == 0;
  }
  __cxa_atexit(FUN_003cf2e4,&DAT_00545138,&DAT_00502000);
  return;
}


==================================================================

### FUNC 00162158 (244 bytes) name=_INIT_17

void _INIT_17(void)

{
  if ((DAT_005461e0 & 1) == 0) {
    DAT_005461e0 = 1;
  }
  if ((DAT_005461d8 & 1) == 0) {
    DAT_005461d8 = 1;
  }
  if ((DAT_005461d0 & 1) == 0) {
    DAT_005461d0 = 1;
  }
  if ((DAT_005461c8 & 1) == 0) {
    DAT_005461c8 = 1;
  }
  if ((DAT_005461c0 & 1) == 0) {
    DAT_005461c0 = 1;
  }
  if ((DAT_005461b8 & 1) == 0) {
    DAT_005461b8 = 1;
  }
  if ((DAT_005461b0 & 1) == 0) {
    DAT_005461b0 = 1;
  }
  if ((DAT_005461a8 & 1) == 0) {
    DAT_005461a8 = 1;
  }
  if ((DAT_005461a0 & 1) == 0) {
    DAT_005461a0 = 1;
  }
  if ((DAT_00546198 & 1) == 0) {
    DAT_00546198 = 1;
  }
  if ((DAT_00546190 & 1) == 0) {
    DAT_00546190 = 1;
  }
  if ((DAT_00546188 & 1) == 0) {
    DAT_00546188 = 1;
  }
  return;
}


==================================================================

### FUNC 0016224c (244 bytes) name=_INIT_18

void _INIT_18(void)

{
  if ((DAT_005476b8 & 1) == 0) {
    DAT_005476b8 = 1;
  }
  if ((DAT_005476b0 & 1) == 0) {
    DAT_005476b0 = 1;
  }
  if ((DAT_005476a8 & 1) == 0) {
    DAT_005476a8 = 1;
  }
  if ((DAT_005476a0 & 1) == 0) {
    DAT_005476a0 = 1;
  }
  if ((DAT_00547698 & 1) == 0) {
    DAT_00547698 = 1;
  }
  if ((DAT_00547690 & 1) == 0) {
    DAT_00547690 = 1;
  }
  if ((DAT_00547688 & 1) == 0) {
    DAT_00547688 = 1;
  }
  if ((DAT_00547680 & 1) == 0) {
    DAT_00547680 = 1;
  }
  if ((DAT_00547678 & 1) == 0) {
    DAT_00547678 = 1;
  }
  if ((DAT_00547670 & 1) == 0) {
    DAT_00547670 = 1;
  }
  if ((DAT_00547668 & 1) == 0) {
    DAT_00547668 = 1;
  }
  if ((DAT_00547660 & 1) == 0) {
    DAT_00547660 = 1;
  }
  return;
}


==================================================================

### FUNC 00162340 (76 bytes) name=_INIT_19

void _INIT_19(void)

{
  __cxa_atexit(FUN_00414fac,&PTR_PTR_00509628,&DAT_00502000);
  __cxa_atexit(FUN_00414fa8,&PTR_PTR_00509630,&DAT_00502000);
  return;
}


==================================================================

### FUNC 0016238c (24 bytes) name=FUN_0016238c

void FUN_0016238c(code *param_1)

{
  if (param_1 != (code *)0x0) {
    (*param_1)();
  }
  return;
}


==================================================================

### FUNC 001623bc (36 bytes) name=CAccumulator

/* CAccumulator::CAccumulator() */

void __thiscall CAccumulator::CAccumulator(CAccumulator *this)

{
  undefined *puVar1;
  
  puVar1 = PTR_vtable_00501ad0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined **)this = puVar1 + 0x10;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 8) = 0;
  return;
}


==================================================================

### FUNC 001623e0 (80 bytes) name=~CAccumulator

/* CAccumulator::~CAccumulator() */

void __thiscall CAccumulator::~CAccumulator(CAccumulator *this)

{
  *(undefined **)this = PTR_vtable_00501ad0 + 0x10;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
    *(undefined8 *)(this + 0x18) = 0;
  }
  return;
}


==================================================================

### FUNC 00162430 (80 bytes) name=~CAccumulator

/* CAccumulator::~CAccumulator() */

void __thiscall CAccumulator::~CAccumulator(CAccumulator *this)

{
  *(undefined **)this = PTR_vtable_00501ad0 + 0x10;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
  }
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00162480 (200 bytes) name=Reset

/* CAccumulator::Reset(unsigned int, unsigned int, unsigned int) */

undefined8 __thiscall CAccumulator::Reset(CAccumulator *this,uint param_1,uint param_2,uint param_3)

{
  undefined8 uVar1;
  void *pvVar2;
  
  *(undefined4 *)(this + 0x2c) = 0;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
    *(undefined8 *)(this + 0x18) = 0;
  }
  uVar1 = 0;
  if ((param_1 != 0) && (param_2 < 0x41)) {
    if ((param_2 - 1 & param_2) == 0) {
      *(undefined4 *)(this + 0x20) = 0;
      *(uint *)(this + 0x24) = param_1;
      *(uint *)(this + 0x28) = param_2;
      pvVar2 = operator_new__((ulong)param_3 + (ulong)(param_1 >> 1) * 4 + 3 & 0x3fffffffc);
      *(void **)(this + 8) = pvVar2;
      *(ulong *)(this + 0x10) = (long)pvVar2 + (ulong)(param_3 & 0xfffffffe);
      if (2 < param_2) {
        pvVar2 = operator_new__((ulong)param_1 << 2);
        *(void **)(this + 0x18) = pvVar2;
      }
      uVar1 = 1;
      *(undefined4 *)(this + 0x2c) = 1;
    }
    else {
      uVar1 = 0;
    }
  }
  return uVar1;
}


==================================================================

### FUNC 00162548 (988 bytes) name=PushFrame

/* CAccumulator::PushFrame(unsigned short const*) */

undefined8 __thiscall CAccumulator::PushFrame(CAccumulator *this,ushort *param_1)

{
  ushort *puVar1;
  ushort *puVar2;
  ulong *puVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  undefined1 auVar7 [16];
  int iVar8;
  ushort *puVar9;
  ulong *puVar10;
  ulong *puVar11;
  uint uVar12;
  uint uVar13;
  ushort *puVar14;
  ushort *puVar15;
  ulong uVar16;
  long lVar17;
  ushort uVar18;
  ushort uVar19;
  ushort uVar20;
  ushort uVar21;
  ushort uVar22;
  ushort uVar23;
  ushort uVar24;
  undefined2 uVar25;
  ushort uVar26;
  undefined2 uVar27;
  undefined2 uVar28;
  undefined2 uVar29;
  ushort uVar30;
  ushort uVar33;
  ushort uVar34;
  ushort uVar35;
  undefined8 uVar31;
  undefined1 auVar32 [16];
  ushort uVar36;
  ushort uVar37;
  ushort uVar38;
  ushort uVar39;
  ushort uVar40;
  ushort uVar41;
  ushort uVar42;
  ushort uVar43;
  ushort uVar44;
  ushort uVar45;
  ushort uVar46;
  ushort uVar47;
  ushort uVar48;
  ushort uVar49;
  ushort uVar50;
  ushort uVar51;
  ushort uVar52;
  ushort uVar53;
  ushort uVar54;
  ushort uVar55;
  
  if (*(int *)(this + 0x2c) == 0) {
    return 0;
  }
  iVar5 = *(int *)(this + 0x20);
  iVar6 = *(int *)(this + 0x28);
  *(int *)(this + 0x20) = iVar5 + 1;
  if (iVar6 == 2) {
    if (iVar5 != 0) {
      uVar12 = *(uint *)(this + 0x24) >> 2;
      if (uVar12 != 0) {
        puVar14 = *(ushort **)(this + 0x10);
        uVar16 = (ulong)(uVar12 - 1);
        if (7 < uVar16 + 1) {
          uVar13 = *(uint *)(this + 0x24) >> 2 & 7;
          lVar17 = (uVar16 + 1) - (ulong)uVar13;
          if ((lVar17 != 0) &&
             ((param_1 + uVar16 * 4 + 4 <= puVar14 || (puVar14 + uVar16 * 4 + 4 <= param_1)))) {
            uVar12 = uVar12 - (int)lVar17;
            puVar1 = param_1 + lVar17 * 4;
            puVar2 = puVar14 + lVar17 * 4;
            do {
              uVar18 = *param_1;
              uVar30 = param_1[1];
              uVar40 = param_1[2];
              uVar48 = param_1[3];
              uVar19 = param_1[4];
              uVar33 = param_1[5];
              uVar41 = param_1[6];
              uVar49 = param_1[7];
              uVar20 = param_1[8];
              uVar34 = param_1[9];
              uVar42 = param_1[10];
              uVar50 = param_1[0xb];
              uVar21 = param_1[0xc];
              uVar35 = param_1[0xd];
              uVar43 = param_1[0xe];
              uVar51 = param_1[0xf];
              uVar22 = param_1[0x10];
              uVar36 = param_1[0x11];
              uVar44 = param_1[0x12];
              uVar52 = param_1[0x13];
              uVar23 = param_1[0x14];
              uVar37 = param_1[0x15];
              uVar45 = param_1[0x16];
              uVar53 = param_1[0x17];
              uVar24 = param_1[0x18];
              uVar38 = param_1[0x19];
              uVar46 = param_1[0x1a];
              uVar54 = param_1[0x1b];
              uVar26 = param_1[0x1c];
              uVar39 = param_1[0x1d];
              uVar47 = param_1[0x1e];
              uVar55 = param_1[0x1f];
              param_1 = param_1 + 0x20;
              lVar17 = lVar17 + -8;
              *puVar14 = (ushort)((uint)uVar18 + (uint)*puVar14 >> 1);
              puVar14[1] = (ushort)((uint)uVar30 + (uint)puVar14[1] >> 1);
              puVar14[2] = (ushort)((uint)uVar40 + (uint)puVar14[2] >> 1);
              puVar14[3] = (ushort)((uint)uVar48 + (uint)puVar14[3] >> 1);
              puVar14[4] = (ushort)((uint)uVar19 + (uint)puVar14[4] >> 1);
              puVar14[5] = (ushort)((uint)uVar33 + (uint)puVar14[5] >> 1);
              puVar14[6] = (ushort)((uint)uVar41 + (uint)puVar14[6] >> 1);
              puVar14[7] = (ushort)((uint)uVar49 + (uint)puVar14[7] >> 1);
              puVar14[8] = (ushort)((uint)uVar20 + (uint)puVar14[8] >> 1);
              puVar14[9] = (ushort)((uint)uVar34 + (uint)puVar14[9] >> 1);
              puVar14[10] = (ushort)((uint)uVar42 + (uint)puVar14[10] >> 1);
              puVar14[0xb] = (ushort)((uint)uVar50 + (uint)puVar14[0xb] >> 1);
              puVar14[0xc] = (ushort)((uint)uVar21 + (uint)puVar14[0xc] >> 1);
              puVar14[0xd] = (ushort)((uint)uVar35 + (uint)puVar14[0xd] >> 1);
              puVar14[0xe] = (ushort)((uint)uVar43 + (uint)puVar14[0xe] >> 1);
              puVar14[0xf] = (ushort)((uint)uVar51 + (uint)puVar14[0xf] >> 1);
              puVar14[0x10] = (ushort)((uint)uVar22 + (uint)puVar14[0x10] >> 1);
              puVar14[0x11] = (ushort)((uint)uVar36 + (uint)puVar14[0x11] >> 1);
              puVar14[0x12] = (ushort)((uint)uVar44 + (uint)puVar14[0x12] >> 1);
              puVar14[0x13] = (ushort)((uint)uVar52 + (uint)puVar14[0x13] >> 1);
              puVar14[0x14] = (ushort)((uint)uVar23 + (uint)puVar14[0x14] >> 1);
              puVar14[0x15] = (ushort)((uint)uVar37 + (uint)puVar14[0x15] >> 1);
              puVar14[0x16] = (ushort)((uint)uVar45 + (uint)puVar14[0x16] >> 1);
              puVar14[0x17] = (ushort)((uint)uVar53 + (uint)puVar14[0x17] >> 1);
              puVar14[0x18] = (ushort)((uint)uVar24 + (uint)puVar14[0x18] >> 1);
              puVar14[0x19] = (ushort)((uint)uVar38 + (uint)puVar14[0x19] >> 1);
              puVar14[0x1a] = (ushort)((uint)uVar46 + (uint)puVar14[0x1a] >> 1);
              puVar14[0x1b] = (ushort)((uint)uVar54 + (uint)puVar14[0x1b] >> 1);
              puVar14[0x1c] = (ushort)((uint)uVar26 + (uint)puVar14[0x1c] >> 1);
              puVar14[0x1d] = (ushort)((uint)uVar39 + (uint)puVar14[0x1d] >> 1);
              puVar14[0x1e] = (ushort)((uint)uVar47 + (uint)puVar14[0x1e] >> 1);
              puVar14[0x1f] = (ushort)((uint)uVar55 + (uint)puVar14[0x1f] >> 1);
              puVar14 = puVar14 + 0x20;
            } while (lVar17 != 0);
            param_1 = puVar1;
            puVar14 = puVar2;
            if (uVar13 == 0) goto LAB_00162694;
          }
        }
        do {
          uVar12 = uVar12 - 1;
          *puVar14 = (ushort)((uint)*param_1 + (uint)*puVar14 >> 1);
          puVar14[1] = (ushort)((uint)param_1[1] + (uint)puVar14[1] >> 1);
          puVar14[2] = (ushort)((uint)param_1[2] + (uint)puVar14[2] >> 1);
          puVar14[3] = (ushort)((uint)param_1[3] + (uint)puVar14[3] >> 1);
          param_1 = param_1 + 4;
          puVar14 = puVar14 + 4;
        } while (uVar12 != 0);
      }
      goto LAB_00162694;
    }
  }
  else if (iVar6 != 1) {
    puVar10 = *(ulong **)(this + 0x18);
    if (iVar5 == 0) {
      uVar12 = *(uint *)(this + 0x24) >> 2;
      if (uVar12 != 0) {
        uVar16 = (ulong)(uVar12 - 1) + 1;
        if (3 < uVar16) {
          uVar13 = *(uint *)(this + 0x24) >> 2 & 3;
          lVar17 = uVar16 - uVar13;
          if (lVar17 != 0) {
            uVar12 = uVar12 - (int)lVar17;
            puVar14 = param_1 + lVar17 * 4;
            puVar3 = puVar10 + lVar17 * 2;
            do {
              uVar18 = *param_1;
              uVar22 = param_1[1];
              uVar30 = param_1[2];
              uVar36 = param_1[3];
              uVar19 = param_1[4];
              uVar23 = param_1[5];
              uVar33 = param_1[6];
              uVar37 = param_1[7];
              uVar20 = param_1[8];
              uVar24 = param_1[9];
              uVar34 = param_1[10];
              uVar38 = param_1[0xb];
              uVar21 = param_1[0xc];
              uVar26 = param_1[0xd];
              uVar35 = param_1[0xe];
              uVar39 = param_1[0xf];
              param_1 = param_1 + 0x10;
              lVar17 = lVar17 + -4;
              *(uint *)puVar10 = (uint)uVar18;
              *(uint *)((long)puVar10 + 4) = (uint)uVar22;
              *(uint *)(puVar10 + 1) = (uint)uVar30;
              *(uint *)((long)puVar10 + 0xc) = (uint)uVar36;
              *(uint *)(puVar10 + 2) = (uint)uVar19;
              *(uint *)((long)puVar10 + 0x14) = (uint)uVar23;
              *(uint *)(puVar10 + 3) = (uint)uVar33;
              *(uint *)((long)puVar10 + 0x1c) = (uint)uVar37;
              *(uint *)(puVar10 + 4) = (uint)uVar20;
              *(uint *)((long)puVar10 + 0x24) = (uint)uVar24;
              *(uint *)(puVar10 + 5) = (uint)uVar34;
              *(uint *)((long)puVar10 + 0x2c) = (uint)uVar38;
              *(uint *)(puVar10 + 6) = (uint)uVar21;
              *(uint *)((long)puVar10 + 0x34) = (uint)uVar26;
              *(uint *)(puVar10 + 7) = (uint)uVar35;
              *(uint *)((long)puVar10 + 0x3c) = (uint)uVar39;
              puVar10 = puVar10 + 8;
            } while (lVar17 != 0);
            param_1 = puVar14;
            puVar10 = puVar3;
            if (uVar13 == 0) goto LAB_00162694;
          }
        }
        do {
          uVar31 = *(undefined8 *)param_1;
          uVar12 = uVar12 - 1;
          puVar10[1] = (ulong)CONCAT24((short)((ulong)uVar31 >> 0x30),
                                       (uint)(ushort)((ulong)uVar31 >> 0x20));
          *puVar10 = (ulong)CONCAT24((short)((ulong)uVar31 >> 0x10),(uint)(ushort)uVar31);
          param_1 = param_1 + 4;
          puVar10 = puVar10 + 2;
        } while (uVar12 != 0);
      }
      goto LAB_00162694;
    }
    if (iVar5 + 1 != iVar6) {
      uVar12 = *(uint *)(this + 0x24) >> 2;
      if (uVar12 != 0) {
        uVar16 = (ulong)(uVar12 - 1) + 1;
        if (3 < uVar16) {
          uVar13 = *(uint *)(this + 0x24) >> 2 & 3;
          lVar17 = uVar16 - uVar13;
          if (lVar17 != 0) {
            uVar12 = uVar12 - (int)lVar17;
            puVar14 = param_1 + lVar17 * 4;
            puVar3 = puVar10 + lVar17 * 2;
            do {
              uVar18 = *param_1;
              uVar22 = param_1[1];
              uVar30 = param_1[2];
              uVar36 = param_1[3];
              uVar19 = param_1[4];
              uVar23 = param_1[5];
              uVar33 = param_1[6];
              uVar37 = param_1[7];
              uVar20 = param_1[8];
              uVar24 = param_1[9];
              uVar34 = param_1[10];
              uVar38 = param_1[0xb];
              uVar21 = param_1[0xc];
              uVar26 = param_1[0xd];
              uVar35 = param_1[0xe];
              uVar39 = param_1[0xf];
              param_1 = param_1 + 0x10;
              lVar17 = lVar17 + -4;
              *(uint *)puVar10 = (uint)*puVar10 + (uint)uVar18;
              *(uint *)((long)puVar10 + 4) = *(uint *)((long)puVar10 + 4) + (uint)uVar22;
              *(uint *)(puVar10 + 1) = (uint)puVar10[1] + (uint)uVar30;
              *(uint *)((long)puVar10 + 0xc) = *(uint *)((long)puVar10 + 0xc) + (uint)uVar36;
              *(uint *)(puVar10 + 2) = (uint)puVar10[2] + (uint)uVar19;
              *(uint *)((long)puVar10 + 0x14) = *(uint *)((long)puVar10 + 0x14) + (uint)uVar23;
              *(uint *)(puVar10 + 3) = (uint)puVar10[3] + (uint)uVar33;
              *(uint *)((long)puVar10 + 0x1c) = *(uint *)((long)puVar10 + 0x1c) + (uint)uVar37;
              *(uint *)(puVar10 + 4) = (uint)puVar10[4] + (uint)uVar20;
              *(uint *)((long)puVar10 + 0x24) = *(uint *)((long)puVar10 + 0x24) + (uint)uVar24;
              *(uint *)(puVar10 + 5) = (uint)puVar10[5] + (uint)uVar34;
              *(uint *)((long)puVar10 + 0x2c) = *(uint *)((long)puVar10 + 0x2c) + (uint)uVar38;
              *(uint *)(puVar10 + 6) = (uint)puVar10[6] + (uint)uVar21;
              *(uint *)((long)puVar10 + 0x34) = *(uint *)((long)puVar10 + 0x34) + (uint)uVar26;
              *(uint *)(puVar10 + 7) = (uint)puVar10[7] + (uint)uVar35;
              *(uint *)((long)puVar10 + 0x3c) = *(uint *)((long)puVar10 + 0x3c) + (uint)uVar39;
              puVar10 = puVar10 + 8;
            } while (lVar17 != 0);
            param_1 = puVar14;
            puVar10 = puVar3;
            if (uVar13 == 0) goto LAB_00162694;
          }
        }
        do {
          uVar31 = *(undefined8 *)param_1;
          uVar12 = uVar12 - 1;
          iVar5 = (int)(*puVar10 >> 0x20) + (uint)(ushort)((ulong)uVar31 >> 0x10);
          iVar6 = (int)(puVar10[1] >> 0x20) + (uint)(ushort)((ulong)uVar31 >> 0x30);
          puVar10[1] = CONCAT26((short)((uint)iVar6 >> 0x10),
                                CONCAT24((short)iVar6,
                                         (int)puVar10[1] + (uint)(ushort)((ulong)uVar31 >> 0x20)));
          *puVar10 = CONCAT26((short)((uint)iVar5 >> 0x10),
                              CONCAT24((short)iVar5,(int)*puVar10 + ((uint)uVar31 & 0xffff)));
          param_1 = param_1 + 4;
          puVar10 = puVar10 + 2;
        } while (uVar12 != 0);
      }
      goto LAB_00162694;
    }
    puVar14 = *(ushort **)(this + 0x10);
    uVar12 = 2;
    switch(iVar5) {
    case 4:
    case 5:
    case 6:
    case 8:
    case 9:
    case 10:
    case 0xb:
    case 0xc:
    case 0xd:
    case 0xe:
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
    case 0x1a:
    case 0x1b:
    case 0x1c:
    case 0x1d:
    case 0x1e:
switchD_001625b4_caseD_4:
      uVar12 = 0;
      uVar13 = *(uint *)(this + 0x24);
      break;
    case 7:
      uVar12 = 3;
      uVar13 = *(uint *)(this + 0x24);
      break;
    case 0xf:
      uVar12 = 4;
      uVar13 = *(uint *)(this + 0x24);
      break;
    case 0x1f:
      uVar12 = 5;
    case 3:
      uVar13 = *(uint *)(this + 0x24);
      break;
    default:
      if (iVar5 != 0x3f) goto switchD_001625b4_caseD_4;
      uVar12 = 6;
      uVar13 = *(uint *)(this + 0x24);
    }
    if (uVar13 != 0) {
      uVar16 = (ulong)(uVar13 - 1);
      if (3 < uVar16 + 1) {
        uVar4 = uVar13 & 3;
        lVar17 = (uVar16 + 1) - (ulong)uVar4;
        if ((lVar17 != 0) &&
           ((param_1 + uVar16 + 1 <= puVar14 || (puVar14 + uVar16 + 1 <= param_1)))) {
          uVar13 = uVar13 - (int)lVar17;
          puVar3 = (ulong *)((long)puVar10 + lVar17 * 4);
          puVar1 = puVar14 + lVar17;
          puVar2 = param_1 + lVar17;
          puVar9 = param_1;
          puVar11 = puVar10;
          puVar15 = puVar14;
          do {
            uVar31 = *(undefined8 *)puVar9;
            lVar17 = lVar17 + -4;
            iVar5 = (int)*puVar11 + (uint)(ushort)uVar31;
            iVar6 = (int)(*puVar11 >> 0x20) + (uint)(ushort)((ulong)uVar31 >> 0x10);
            uVar25 = (undefined2)iVar6;
            uVar27 = (undefined2)((uint)iVar6 >> 0x10);
            iVar6 = (int)puVar11[1] + (uint)(ushort)((ulong)uVar31 >> 0x20);
            iVar8 = (int)(puVar11[1] >> 0x20) + (uint)(ushort)((ulong)uVar31 >> 0x30);
            uVar28 = (undefined2)iVar8;
            uVar29 = (undefined2)((uint)iVar8 >> 0x10);
            auVar32._4_2_ = (short)-uVar12;
            auVar32._0_4_ = -uVar12;
            auVar32._6_2_ = (short)(-uVar12 >> 0x10);
            auVar32._8_2_ = (short)-uVar12;
            auVar32._10_2_ = (short)(-uVar12 >> 0x10);
            auVar32._12_2_ = (short)-uVar12;
            auVar32._14_2_ = (short)(-uVar12 >> 0x10);
            auVar7._4_2_ = uVar25;
            auVar7._0_4_ = iVar5;
            auVar7._6_2_ = uVar27;
            auVar7._8_2_ = (short)iVar6;
            auVar7._10_2_ = (short)((uint)iVar6 >> 0x10);
            auVar7._12_2_ = uVar28;
            auVar7._14_2_ = uVar29;
            auVar32 = NEON_ushl(auVar7,auVar32,4);
            *(ulong *)puVar15 =
                 CONCAT26(auVar32._12_2_,
                          CONCAT24(auVar32._8_2_,CONCAT22(auVar32._4_2_,auVar32._0_2_)));
            puVar11[1] = CONCAT26(uVar29,CONCAT24(uVar28,iVar6));
            *puVar11 = CONCAT26(uVar27,CONCAT24(uVar25,iVar5));
            puVar9 = puVar9 + 4;
            puVar11 = puVar11 + 2;
            puVar15 = puVar15 + 4;
            puVar10 = puVar3;
            puVar14 = puVar1;
            param_1 = puVar2;
            if (lVar17 == 0) goto joined_r0x0016291c;
          } while( true );
        }
      }
      do {
        uVar13 = uVar13 - 1;
        uVar4 = (uint)*puVar10 + (uint)*param_1;
        *puVar14 = (ushort)(uVar4 >> (ulong)uVar12);
        *(uint *)puVar10 = uVar4;
        puVar10 = (ulong *)((long)puVar10 + 4);
        puVar14 = puVar14 + 1;
        param_1 = param_1 + 1;
        uVar4 = uVar13;
joined_r0x0016291c:
      } while (uVar4 != 0);
    }
    goto LAB_00162694;
  }
  memcpy(*(void **)(this + 0x10),param_1,(ulong)*(uint *)(this + 0x24) << 1);
LAB_00162694:
  if (*(int *)(this + 0x20) != *(int *)(this + 0x28)) {
    return 0;
  }
  *(undefined4 *)(this + 0x20) = 0;
  return 1;
}


==================================================================

### FUNC 00162924 (16 bytes) name=Restart

/* CAccumulator::Restart() */

void __thiscall CAccumulator::Restart(CAccumulator *this)

{
  if (*(int *)(this + 0x2c) != 0) {
    *(undefined4 *)(this + 0x20) = 0;
  }
  return;
}


==================================================================

### FUNC 00162934 (20 bytes) name=FStream

/* FStream::FStream() */

void __thiscall FStream::FStream(FStream *this)

{
  *(undefined **)this = PTR_vtable_00501f08 + 0x10;
  return;
}


==================================================================

### FUNC 00162948 (36 bytes) name=~OFStream

/* OFStream::~OFStream() */

int __thiscall OFStream::~OFStream(OFStream *this)

{
  int iVar1;
  
  *(undefined **)this = PTR_vtable_00501f08 + 0x10;
  if (*(FILE **)(this + 8) != (FILE *)0x0) {
    iVar1 = fclose(*(FILE **)(this + 8));
    return iVar1;
  }
  return 0;
}


==================================================================

### FUNC 0016296c (4 bytes) name=~FStream

/* FStream::~FStream() */

void __thiscall FStream::~FStream(FStream *this)

{
  code *pcVar1;
  
                    /* WARNING: Does not return */
  pcVar1 = (code *)SoftwareBreakpoint(1,0x162970);
  (*pcVar1)();
}


==================================================================

### FUNC 00162970 (8 bytes) name=GetRaw

/* FStream::GetRaw() const */

undefined8 __thiscall FStream::GetRaw(FStream *this)

{
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 00162978 (32 bytes) name=IsEof

/* FStream::IsEof() const */

bool __thiscall FStream::IsEof(FStream *this)

{
  int iVar1;
  
  iVar1 = feof(*(FILE **)(this + 8));
  return iVar1 != 0;
}


==================================================================

### FUNC 00162998 (88 bytes) name=ReadLine

/* FStream::ReadLine(char*, int) const */

bool __thiscall FStream::ReadLine(FStream *this,char *param_1,int param_2)

{
  bool bVar1;
  int iVar2;
  char *pcVar3;
  
  iVar2 = feof(*(FILE **)(this + 8));
  if (iVar2 == 0) {
    pcVar3 = fgets(param_1,param_2,*(FILE **)(this + 8));
    bVar1 = pcVar3 != (char *)0x0;
  }
  else {
    bVar1 = false;
  }
  return bVar1;
}


==================================================================

### FUNC 001629f0 (56 bytes) name=Read

/* FStream::Read(void*, unsigned long, unsigned long) const */

long __thiscall FStream::Read(FStream *this,void *param_1,ulong param_2,ulong param_3)

{
  size_t sVar1;
  
  sVar1 = fread(param_1,param_2,param_3,*(FILE **)(this + 8));
  return sVar1 * param_2;
}


==================================================================

### FUNC 00162a28 (8 bytes) name=GetCurrentPos

/* FStream::GetCurrentPos() const */

void __thiscall FStream::GetCurrentPos(FStream *this)

{
  ftell(*(FILE **)(this + 8));
  return;
}


==================================================================

### FUNC 00162a30 (32 bytes) name=Seek

/* FStream::Seek(long, io::seek) const */

bool __thiscall FStream::Seek(FStream *this,long param_1,int param_3)

{
  int iVar1;
  
  iVar1 = fseek(*(FILE **)(this + 8),param_1,param_3);
  return iVar1 == 0;
}


==================================================================

### FUNC 00162a50 (176 bytes) name=OFStream

/* OFStream::OFStream(char const*, bool) */

void __thiscall OFStream::OFStream(OFStream *this,char *param_1,bool param_2)

{
  FILE *pFVar1;
  undefined8 *puVar2;
  
  *(undefined **)this = PTR_vtable_005019a0 + 0x10;
  if (param_2) {
    pFVar1 = fopen(param_1,"rb+");
    *(FILE **)(this + 8) = pFVar1;
    if (pFVar1 == (FILE *)0x0) {
      puVar2 = (undefined8 *)__cxa_allocate_exception(8);
      *puVar2 = "IOError: open file failed1.[IFStream::IFStream]";
                    /* WARNING: Subroutine does not return */
      __cxa_throw(puVar2,PTR_typeinfo_00501c20,0);
    }
  }
  else {
    pFVar1 = fopen(param_1,"wb");
    *(FILE **)(this + 8) = pFVar1;
    if (pFVar1 == (FILE *)0x0) {
      puVar2 = (undefined8 *)__cxa_allocate_exception(8);
      *puVar2 = "IOError: open file failed2.[IFStream::IFStream]";
                    /* WARNING: Subroutine does not return */
      __cxa_throw(puVar2,PTR_typeinfo_00501c20,0);
    }
  }
  return;
}


==================================================================

### FUNC 00162b2c (60 bytes) name=~OFStream

/* OFStream::~OFStream() */

void __thiscall OFStream::~OFStream(OFStream *this)

{
  *(undefined **)this = PTR_vtable_00501f08 + 0x10;
  if (*(FILE **)(this + 8) != (FILE *)0x0) {
    fclose(*(FILE **)(this + 8));
  }
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00162b68 (32 bytes) name=Flush

/* OFStream::Flush() const */

bool __thiscall OFStream::Flush(OFStream *this)

{
  int iVar1;
  
  iVar1 = fflush(*(FILE **)(this + 8));
  return iVar1 == 0;
}


==================================================================

### FUNC 00162b88 (40 bytes) name=Write

/* OFStream::Write(char const*) const */

uint __thiscall OFStream::Write(OFStream *this,char *param_1)

{
  uint uVar1;
  
  uVar1 = fputs(param_1,*(FILE **)(this + 8));
  return uVar1 >> 0x1f ^ 1;
}


==================================================================

### FUNC 00162bb0 (48 bytes) name=Write

/* OFStream::Write(void const*, unsigned long, unsigned long) */

bool __thiscall OFStream::Write(OFStream *this,void *param_1,ulong param_2,ulong param_3)

{
  size_t sVar1;
  
  sVar1 = fwrite(param_1,param_2,param_3,*(FILE **)(this + 8));
  return sVar1 != 0;
}


==================================================================

### FUNC 00162be0 (80 bytes) name=WriteLine

/* OFStream::WriteLine(char const*) const */

undefined8 __thiscall OFStream::WriteLine(OFStream *this,char *param_1)

{
  int iVar1;
  undefined8 uVar2;
  
  iVar1 = fputs(param_1,*(FILE **)(this + 8));
  if ((iVar1 < 0) || (iVar1 = fputs("\n",*(FILE **)(this + 8)), iVar1 < 0)) {
    uVar2 = 0;
  }
  else {
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### FUNC 00162c30 (136 bytes) name=GetLength

/* OFStream::GetLength() const */

long __thiscall OFStream::GetLength(OFStream *this)

{
  int iVar1;
  long __off;
  long lVar2;
  
  fflush(*(FILE **)(this + 8));
  iVar1 = feof(*(FILE **)(this + 8));
  __off = ftell(*(FILE **)(this + 8));
  if (iVar1 == 0) {
    fseek(*(FILE **)(this + 8),0,2);
    lVar2 = ftell(*(FILE **)(this + 8));
    fseek(*(FILE **)(this + 8),__off,0);
    __off = lVar2;
  }
  return __off;
}


==================================================================

### FUNC 00162cb8 (152 bytes) name=IFStream

/* IFStream::IFStream(char const*) */

int __thiscall IFStream::IFStream(IFStream *this,char *param_1)

{
  undefined *puVar1;
  int iVar2;
  FILE *__stream;
  long lVar3;
  undefined8 *puVar4;
  
  puVar1 = PTR_vtable_00501968;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined **)this = puVar1 + 0x10;
  __stream = fopen(param_1,"rb");
  *(FILE **)(this + 8) = __stream;
  if (__stream != (FILE *)0x0) {
    fseek(__stream,0,2);
    lVar3 = ftell(*(FILE **)(this + 8));
    *(long *)(this + 0x10) = lVar3;
    iVar2 = fseek(*(FILE **)(this + 8),0,0);
    return iVar2;
  }
  puVar4 = (undefined8 *)__cxa_allocate_exception(8);
  *puVar4 = "IOError: open file failed.[IFStream::IFStream]";
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar4,PTR_typeinfo_00501c20,0);
}


==================================================================

### FUNC 00162d78 (60 bytes) name=~IFStream

/* IFStream::~IFStream() */

void __thiscall IFStream::~IFStream(IFStream *this)

{
  *(undefined **)this = PTR_vtable_00501f08 + 0x10;
  if (*(FILE **)(this + 8) != (FILE *)0x0) {
    fclose(*(FILE **)(this + 8));
  }
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00162db4 (8 bytes) name=GetLength

/* IFStream::GetLength() const */

undefined8 __thiscall IFStream::GetLength(IFStream *this)

{
  return *(undefined8 *)(this + 0x10);
}


==================================================================

### FUNC 00162dbc (1464 bytes) name=CFunctions

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CFunctions::CFunctions() */

int __thiscall CFunctions::CFunctions(CFunctions *this)

{
  CFunctions *__src;
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int iVar5;
  
  *(undefined **)this = PTR_vtable_00501e30 + 0x10;
  MutexLock::MutexLock((MutexLock *)(this + 0xf0));
  CAccumulator::CAccumulator((CAccumulator *)(this + 0x1c98));
  CAccumulator::CAccumulator((CAccumulator *)(this + 0x1cc8));
  CAccumulator::CAccumulator((CAccumulator *)(this + 0x1cf8));
  CSmoother::CSmoother((CSmoother *)(this + 0x1d28));
  CSmoother::CSmoother((CSmoother *)(this + 0x1d68));
  memset(this + 8,0,0xa0);
  memset(this + 0x1200,0,0xa94);
  *(undefined8 *)(this + 0x1db0) = 0;
  *(undefined8 *)(this + 0x1da8) = 0;
  *(undefined4 *)(this + 0x1dd8) = 0;
  *(undefined8 *)(this + 0x1dd0) = 0;
  *(undefined8 *)(this + 0x1dc8) = 0;
  *(undefined8 *)(this + 0x1dc0) = 0;
  *(undefined8 *)(this + 0x1db8) = 0;
  memset(this + 0x1de0,0,0x58fc);
  uVar2 = _UNK_00436378;
  uVar1 = _DAT_00436370;
  *(undefined8 *)(this + 0xc4) = 0;
  *(undefined8 *)(this + 0xbc) = 0;
  *(undefined4 *)(this + 0xb8) = 0x41a00000;
  *(undefined8 *)(this + 0xcc) = 0x3f8000003f7f4b1f;
  *(undefined8 *)(this + 0xb0) = uVar2;
  *(undefined8 *)(this + 0xa8) = uVar1;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  memset(this + 0x118,0,0x70);
  *(undefined8 *)(this + 0x76dc) = 0xffff3cb000000008;
  *(undefined4 *)(this + 0x76e4) = 3;
  *(undefined8 *)(this + 0xd8) = 0;
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  uVar3 = _UNK_00436398;
  uVar2 = _DAT_00436390;
  uVar1 = _DAT_00436380;
  *(undefined8 *)(this + 0x1c0) = _DAT_00436388;
  *(undefined8 *)(this + 0x1b8) = uVar1;
  uVar4 = _UNK_004363a8;
  uVar1 = _DAT_004363a0;
  *(undefined8 *)(this + 0x1b0) = uVar3;
  *(undefined8 *)(this + 0x1a8) = uVar2;
  uVar3 = _UNK_004363b8;
  uVar2 = _DAT_004363b0;
  *(undefined8 *)(this + 0x1a0) = uVar4;
  *(undefined8 *)(this + 0x198) = uVar1;
  uVar4 = _UNK_004363c8;
  uVar1 = _DAT_004363c0;
  __src = this + 0x188;
  *(undefined8 *)(this + 400) = uVar3;
  *(undefined8 *)__src = uVar2;
  uVar3 = _UNK_004363d8;
  uVar2 = _DAT_004363d0;
  *(undefined8 *)(this + 0x200) = uVar4;
  *(undefined8 *)(this + 0x1f8) = uVar1;
  uVar4 = _DAT_004363e8;
  uVar1 = _DAT_004363e0;
  *(undefined8 *)(this + 0x1f0) = uVar3;
  *(undefined8 *)(this + 0x1e8) = uVar2;
  uVar3 = _UNK_004363f8;
  uVar2 = _DAT_004363f0;
  *(undefined8 *)(this + 0x1e0) = uVar4;
  *(undefined8 *)(this + 0x1d8) = uVar1;
  uVar4 = _UNK_00436408;
  uVar1 = _DAT_00436400;
  *(undefined8 *)(this + 0x1d0) = uVar3;
  *(undefined8 *)(this + 0x1c8) = uVar2;
  uVar3 = _UNK_00436418;
  uVar2 = _DAT_00436410;
  *(undefined8 *)(this + 0x240) = uVar4;
  *(undefined8 *)(this + 0x238) = uVar1;
  uVar4 = _UNK_00436428;
  uVar1 = _DAT_00436420;
  *(undefined8 *)(this + 0x230) = uVar3;
  *(undefined8 *)(this + 0x228) = uVar2;
  uVar3 = _UNK_00436438;
  uVar2 = _DAT_00436430;
  *(undefined8 *)(this + 0x220) = uVar4;
  *(undefined8 *)(this + 0x218) = uVar1;
  uVar4 = _UNK_00436448;
  uVar1 = _DAT_00436440;
  *(undefined8 *)(this + 0x210) = uVar3;
  *(undefined8 *)(this + 0x208) = uVar2;
  uVar3 = _UNK_00436458;
  uVar2 = _DAT_00436450;
  *(undefined8 *)(this + 0x280) = uVar4;
  *(undefined8 *)(this + 0x278) = uVar1;
  uVar4 = _UNK_00436468;
  uVar1 = _DAT_00436460;
  *(undefined8 *)(this + 0x270) = uVar3;
  *(undefined8 *)(this + 0x268) = uVar2;
  uVar3 = _UNK_00436478;
  uVar2 = _DAT_00436470;
  *(undefined8 *)(this + 0x260) = uVar4;
  *(undefined8 *)(this + 600) = uVar1;
  uVar4 = _UNK_00436488;
  uVar1 = _DAT_00436480;
  *(undefined8 *)(this + 0x250) = uVar3;
  *(undefined8 *)(this + 0x248) = uVar2;
  uVar3 = _UNK_00436498;
  uVar2 = _DAT_00436490;
  *(undefined8 *)(this + 0x2c0) = uVar4;
  *(undefined8 *)(this + 0x2b8) = uVar1;
  uVar4 = _UNK_004364a8;
  uVar1 = _DAT_004364a0;
  *(undefined8 *)(this + 0x2b0) = uVar3;
  *(undefined8 *)(this + 0x2a8) = uVar2;
  uVar3 = _UNK_004364b8;
  uVar2 = _DAT_004364b0;
  *(undefined8 *)(this + 0x2a0) = uVar4;
  *(undefined8 *)(this + 0x298) = uVar1;
  uVar4 = _DAT_004364c8;
  uVar1 = _DAT_004364c0;
  *(undefined8 *)(this + 0x290) = uVar3;
  *(undefined8 *)(this + 0x288) = uVar2;
  uVar3 = _UNK_004364d8;
  uVar2 = _DAT_004364d0;
  *(undefined8 *)(this + 0x300) = uVar4;
  *(undefined8 *)(this + 0x2f8) = uVar1;
  uVar4 = _UNK_004364e8;
  uVar1 = _DAT_004364e0;
  *(undefined8 *)(this + 0x2f0) = uVar3;
  *(undefined8 *)(this + 0x2e8) = uVar2;
  uVar3 = _UNK_004364f8;
  uVar2 = _DAT_004364f0;
  *(undefined8 *)(this + 0x2e0) = uVar4;
  *(undefined8 *)(this + 0x2d8) = uVar1;
  uVar4 = _UNK_00436508;
  uVar1 = _DAT_00436500;
  *(undefined8 *)(this + 0x2d0) = uVar3;
  *(undefined8 *)(this + 0x2c8) = uVar2;
  uVar3 = _UNK_00436518;
  uVar2 = _DAT_00436510;
  *(undefined8 *)(this + 0x340) = uVar4;
  *(undefined8 *)(this + 0x338) = uVar1;
  uVar4 = _UNK_00436528;
  uVar1 = _DAT_00436520;
  *(undefined8 *)(this + 0x330) = uVar3;
  *(undefined8 *)(this + 0x328) = uVar2;
  uVar3 = _UNK_00436538;
  uVar2 = _DAT_00436530;
  *(undefined8 *)(this + 800) = uVar4;
  *(undefined8 *)(this + 0x318) = uVar1;
  uVar4 = _UNK_00436548;
  uVar1 = _DAT_00436540;
  *(undefined8 *)(this + 0x310) = uVar3;
  *(undefined8 *)(this + 0x308) = uVar2;
  uVar3 = _UNK_00436558;
  uVar2 = _DAT_00436550;
  *(undefined8 *)(this + 0x380) = uVar4;
  *(undefined8 *)(this + 0x378) = uVar1;
  uVar4 = _UNK_00436568;
  uVar1 = _DAT_00436560;
  *(undefined8 *)(this + 0x370) = uVar3;
  *(undefined8 *)(this + 0x368) = uVar2;
  uVar3 = _UNK_00436578;
  uVar2 = _DAT_00436570;
  *(undefined8 *)(this + 0x360) = uVar4;
  *(undefined8 *)(this + 0x358) = uVar1;
  uVar4 = _UNK_00436588;
  uVar1 = _DAT_00436580;
  *(undefined8 *)(this + 0x350) = uVar3;
  *(undefined8 *)(this + 0x348) = uVar2;
  uVar3 = _UNK_00436598;
  uVar2 = _DAT_00436590;
  *(undefined8 *)(this + 0x3c0) = uVar4;
  *(undefined8 *)(this + 0x3b8) = uVar1;
  uVar4 = _UNK_004365a8;
  uVar1 = _DAT_004365a0;
  *(undefined8 *)(this + 0x3b0) = uVar3;
  *(undefined8 *)(this + 0x3a8) = uVar2;
  uVar3 = _UNK_004365b8;
  uVar2 = _DAT_004365b0;
  *(undefined8 *)(this + 0x3a0) = uVar4;
  *(undefined8 *)(this + 0x398) = uVar1;
  uVar4 = _UNK_004365c8;
  uVar1 = _DAT_004365c0;
  *(undefined8 *)(this + 0x390) = uVar3;
  *(undefined8 *)(this + 0x388) = uVar2;
  uVar3 = _UNK_004365d8;
  uVar2 = _DAT_004365d0;
  *(undefined8 *)(this + 0x400) = uVar4;
  *(undefined8 *)(this + 0x3f8) = uVar1;
  uVar4 = _UNK_004365e8;
  uVar1 = _DAT_004365e0;
  *(undefined8 *)(this + 0x3f0) = uVar3;
  *(undefined8 *)(this + 1000) = uVar2;
  uVar3 = _UNK_004365f8;
  uVar2 = _DAT_004365f0;
  *(undefined8 *)(this + 0x3e0) = uVar4;
  *(undefined8 *)(this + 0x3d8) = uVar1;
  uVar4 = _UNK_00436608;
  uVar1 = _DAT_00436600;
  *(undefined8 *)(this + 0x3d0) = uVar3;
  *(undefined8 *)(this + 0x3c8) = uVar2;
  uVar3 = _UNK_00436618;
  uVar2 = _DAT_00436610;
  *(undefined8 *)(this + 0x440) = uVar4;
  *(undefined8 *)(this + 0x438) = uVar1;
  uVar4 = _UNK_00436628;
  uVar1 = _DAT_00436620;
  *(undefined8 *)(this + 0x430) = uVar3;
  *(undefined8 *)(this + 0x428) = uVar2;
  uVar3 = _UNK_00436638;
  uVar2 = _DAT_00436630;
  *(undefined8 *)(this + 0x420) = uVar4;
  *(undefined8 *)(this + 0x418) = uVar1;
  uVar4 = _UNK_00436648;
  uVar1 = _DAT_00436640;
  *(undefined8 *)(this + 0x410) = uVar3;
  *(undefined8 *)(this + 0x408) = uVar2;
  uVar3 = _UNK_00436658;
  uVar2 = _DAT_00436650;
  *(undefined8 *)(this + 0x480) = uVar4;
  *(undefined8 *)(this + 0x478) = uVar1;
  uVar4 = _UNK_00436668;
  uVar1 = _DAT_00436660;
  *(undefined8 *)(this + 0x470) = uVar3;
  *(undefined8 *)(this + 0x468) = uVar2;
  uVar3 = _UNK_00436678;
  uVar2 = _DAT_00436670;
  *(undefined8 *)(this + 0x460) = uVar4;
  *(undefined8 *)(this + 0x458) = uVar1;
  uVar4 = _UNK_00436688;
  uVar1 = _DAT_00436680;
  *(undefined8 *)(this + 0x450) = uVar3;
  *(undefined8 *)(this + 0x448) = uVar2;
  uVar3 = _UNK_00436698;
  uVar2 = _DAT_00436690;
  *(undefined8 *)(this + 0x4c0) = uVar4;
  *(undefined8 *)(this + 0x4b8) = uVar1;
  uVar4 = _DAT_004366a8;
  uVar1 = _DAT_004366a0;
  *(undefined8 *)(this + 0x4b0) = uVar3;
  *(undefined8 *)(this + 0x4a8) = uVar2;
  uVar3 = _UNK_004366b8;
  uVar2 = _DAT_004366b0;
  *(undefined8 *)(this + 0x4a0) = uVar4;
  *(undefined8 *)(this + 0x498) = uVar1;
  uVar4 = _UNK_004366c8;
  uVar1 = _DAT_004366c0;
  *(undefined8 *)(this + 0x490) = uVar3;
  *(undefined8 *)(this + 0x488) = uVar2;
  uVar3 = _UNK_004366d8;
  uVar2 = _DAT_004366d0;
  *(undefined8 *)(this + 0x500) = uVar4;
  *(undefined8 *)(this + 0x4f8) = uVar1;
  uVar4 = _UNK_004366e8;
  uVar1 = _DAT_004366e0;
  *(undefined8 *)(this + 0x4f0) = uVar3;
  *(undefined8 *)(this + 0x4e8) = uVar2;
  uVar3 = _UNK_004366f8;
  uVar2 = _DAT_004366f0;
  *(undefined8 *)(this + 0x4e0) = uVar4;
  *(undefined8 *)(this + 0x4d8) = uVar1;
  uVar4 = _UNK_00436708;
  uVar1 = _DAT_00436700;
  *(undefined8 *)(this + 0x4d0) = uVar3;
  *(undefined8 *)(this + 0x4c8) = uVar2;
  uVar3 = _UNK_00436718;
  uVar2 = _DAT_00436710;
  *(undefined8 *)(this + 0x540) = uVar4;
  *(undefined8 *)(this + 0x538) = uVar1;
  uVar4 = _UNK_00436728;
  uVar1 = _DAT_00436720;
  *(undefined8 *)(this + 0x530) = uVar3;
  *(undefined8 *)(this + 0x528) = uVar2;
  uVar3 = _UNK_00436738;
  uVar2 = _DAT_00436730;
  *(undefined8 *)(this + 0x520) = uVar4;
  *(undefined8 *)(this + 0x518) = uVar1;
  uVar4 = _UNK_00436748;
  uVar1 = _DAT_00436740;
  *(undefined8 *)(this + 0x510) = uVar3;
  *(undefined8 *)(this + 0x508) = uVar2;
  uVar3 = _UNK_00436758;
  uVar2 = _DAT_00436750;
  *(undefined8 *)(this + 0x580) = uVar4;
  *(undefined8 *)(this + 0x578) = uVar1;
  uVar4 = _UNK_00436768;
  uVar1 = _DAT_00436760;
  *(undefined8 *)(this + 0x570) = uVar3;
  *(undefined8 *)(this + 0x568) = uVar2;
  *(undefined8 *)(this + 0x560) = uVar4;
  *(undefined8 *)(this + 0x558) = uVar1;
  uVar1 = _DAT_00436770;
  *(undefined8 *)(this + 0x550) = _UNK_00436778;
  *(undefined8 *)(this + 0x548) = uVar1;
  memcpy(this + 0x5b0,__src,0x400);
  memcpy(this + 0x9d8,__src,0x400);
  memcpy(this + 0xe00,__src,0x400);
  iVar5 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return iVar5;
}


==================================================================

### FUNC 001643e8 (220 bytes) name=MutexLock

/* MutexLock::MutexLock() */

void __thiscall MutexLock::MutexLock(MutexLock *this)

{
  long lVar1;
  int iVar2;
  undefined8 *puVar3;
  char *pcVar4;
  pthread_mutexattr_t apStack_30 [2];
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  iVar2 = pthread_mutexattr_init(apStack_30);
  if (iVar2 == 0) {
    iVar2 = pthread_mutexattr_settype(apStack_30,1);
    if (iVar2 == 0) {
      iVar2 = pthread_mutex_init((pthread_mutex_t *)this,apStack_30);
      if (iVar2 == 0) {
        iVar2 = pthread_mutexattr_destroy(apStack_30);
        if (iVar2 == 0) {
          if (*(long *)(lVar1 + 0x28) == local_28) {
            return;
          }
                    /* WARNING: Subroutine does not return */
          __stack_chk_fail();
        }
        puVar3 = (undefined8 *)__cxa_allocate_exception(8);
        pcVar4 = "pthread_mutexattr_destroy failed\n";
      }
      else {
        puVar3 = (undefined8 *)__cxa_allocate_exception(8);
        pcVar4 = "pthread_mutex_init failed\n";
      }
    }
    else {
      puVar3 = (undefined8 *)__cxa_allocate_exception(8);
      pcVar4 = "pthread_mutexattr_settype failed\n";
    }
  }
  else {
    puVar3 = (undefined8 *)__cxa_allocate_exception(8);
    pcVar4 = "pthread_mutexattr_init failed\n";
  }
  *puVar3 = pcVar4;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar3,PTR_typeinfo_00501c20,0);
}


==================================================================

### FUNC 001644c4 name=SetColorPalette DECOMPILE FAILED

### FUNC 00168c60 (20 bytes) name=~MutexLock

/* MutexLock::~MutexLock() */

int __thiscall MutexLock::~MutexLock(MutexLock *this)

{
  int iVar1;
  
  iVar1 = pthread_mutex_destroy((pthread_mutex_t *)this);
  return iVar1;
}


==================================================================

### FUNC 00168c78 (128 bytes) name=~CFunctions

/* CFunctions::~CFunctions() */

int __thiscall CFunctions::~CFunctions(CFunctions *this)

{
  int iVar1;
  
  *(undefined **)this = PTR_vtable_00501e30 + 0x10;
  ReleaseMemory(this);
  CSmoother::~CSmoother((CSmoother *)(this + 0x1d68));
  CSmoother::~CSmoother((CSmoother *)(this + 0x1d28));
  CAccumulator::~CAccumulator((CAccumulator *)(this + 0x1cf8));
  CAccumulator::~CAccumulator((CAccumulator *)(this + 0x1cc8));
  CAccumulator::~CAccumulator((CAccumulator *)(this + 0x1c98));
  iVar1 = pthread_mutex_destroy((pthread_mutex_t *)(this + 0xf0));
  return iVar1;
}


==================================================================

### FUNC 00168d50 (460 bytes) name=ReleaseMemory

/* CFunctions::ReleaseMemory() */

int __thiscall CFunctions::ReleaseMemory(CFunctions *this)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  *(undefined4 *)(this + 0x1dd0) = 0;
  *(undefined4 *)(this + 0x1200) = 0;
  *(undefined4 *)(this + 0x1638) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  if (*(void **)(this + 0x118) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x118));
    *(undefined8 *)(this + 0x118) = 0;
  }
  if (*(void **)(this + 0x120) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x120));
    *(undefined8 *)(this + 0x120) = 0;
  }
  if (*(void **)(this + 0x128) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x128));
    *(undefined8 *)(this + 0x128) = 0;
  }
  *(undefined8 *)(this + 0x138) = 0;
  *(undefined8 *)(this + 0x130) = 0;
  *(undefined8 *)(this + 0x148) = 0;
  *(undefined8 *)(this + 0x140) = 0;
  if (*(void **)(this + 0x150) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x150));
    *(undefined8 *)(this + 0x150) = 0;
  }
  *(undefined8 *)(this + 0x158) = 0;
  if (*(void **)(this + 0x170) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x170));
    *(undefined8 *)(this + 0x170) = 0;
  }
  if (*(void **)(this + 0x178) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x178));
    *(undefined8 *)(this + 0x178) = 0;
  }
  if (*(void **)(this + 0xd8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0xd8));
    *(undefined8 *)(this + 0xd8) = 0;
  }
  if (*(void **)(this + 0x180) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x180));
    *(undefined8 *)(this + 0x180) = 0;
  }
  if (*(void **)(this + 0x160) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x160));
    *(undefined8 *)(this + 0x160) = 0;
  }
  if (*(void **)(this + 0x168) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x168));
    *(undefined8 *)(this + 0x168) = 0;
  }
  if (*(void **)(this + 0x1458) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1458));
    *(undefined8 *)(this + 0x1458) = 0;
  }
  if (*(void **)(this + 0x1460) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1460));
    *(undefined8 *)(this + 0x1460) = 0;
  }
  if (*(void **)(this + 0x1468) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1468));
    *(undefined8 *)(this + 0x1468) = 0;
  }
  memset(this + 0x1200,0,0x438);
  CAccumulator::Reset((CAccumulator *)(this + 0x1c98),0,0,0);
  CAccumulator::Reset((CAccumulator *)(this + 0x1cc8),0,0,0);
  CAccumulator::Reset((CAccumulator *)(this + 0x1cf8),0,0,0);
  CSmoother::Reset((CSmoother *)(this + 0x1d28),0,0,0,0);
  CSmoother::Reset((CSmoother *)(this + 0x1d68),0,0,0,0);
  memset(this + 0x1de0,0,0x58f0);
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return iVar1;
}


==================================================================

### FUNC 00168f1c (12 bytes) name=FUN_00168f1c

void FUN_00168f1c(void)

{
  __cxa_begin_catch();
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 00168f28 (36 bytes) name=~CFunctions

/* CFunctions::~CFunctions() */

void __thiscall CFunctions::~CFunctions(CFunctions *this)

{
  ~CFunctions(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00168f4c (180 bytes) name=ChangeBMPSize

/* CFunctions::ChangeBMPSize(unsigned int, unsigned int) */

undefined8 __thiscall CFunctions::ChangeBMPSize(CFunctions *this,uint param_1,uint param_2)

{
  uint uVar1;
  void *pvVar2;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  if ((((*(int *)(this + 0xe0) != 0) && (param_2 != 0)) && (3 < param_1)) && ((param_1 & 3) == 0)) {
    uVar1 = param_2 * param_1;
    if ((uint)(*(int *)(this + 0x1db4) * *(int *)(this + 0x1db0)) < uVar1) {
      if (*(void **)(this + 0xd8) != (void *)0x0) {
        operator_delete__(*(void **)(this + 0xd8));
        *(undefined8 *)(this + 0xd8) = 0;
      }
      pvVar2 = operator_new__((ulong)uVar1);
      *(void **)(this + 0xd8) = pvVar2;
    }
    *(uint *)(this + 0x1db0) = param_1;
    *(uint *)(this + 0x1db4) = param_2;
    *(uint *)(this + 0x76d4) = uVar1;
    *(uint *)(this + 0x9b4) = param_1;
    *(uint *)(this + 0x9b8) = param_2;
  }
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return 1;
}


==================================================================

### FUNC 00169000 (1188 bytes) name=Reset

/* CFunctions::Reset(struct_IntrinsicPara const*) */

void __thiscall CFunctions::Reset(CFunctions *this,struct_IntrinsicPara *param_1)

{
  pthread_mutex_t *__mutex;
  CFunctions *pCVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  long lVar6;
  int iVar7;
  undefined4 uVar8;
  void *pvVar9;
  void *pvVar10;
  CFunctions *this_00;
  Logging *this_01;
  undefined4 *puVar11;
  ulong uVar12;
  ulong uVar13;
  undefined8 uVar14;
  Logging aLStack_f8 [24];
  Logging aLStack_e0 [24];
  Logging aLStack_c8 [24];
  Logging aLStack_b0 [24];
  Logging aLStack_98 [24];
  Logging aLStack_80 [24];
  long local_68;
  
  lVar6 = tpidr_el0;
  local_68 = *(long *)(lVar6 + 0x28);
  ReleaseMemory(this);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  *(undefined8 *)(this + 0x76dc) = 0xffff3cb000000008;
  *(undefined4 *)(this + 0x76e4) = 3;
  uVar14 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0x1dc0) = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0x1db8) = uVar14;
  *(undefined8 *)(this + 0x1dc8) = *(undefined8 *)(param_1 + 0x20);
  uVar14 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 0x1db0) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)(this + 0x1da8) = uVar14;
  uVar2 = *(uint *)(this + 0x1dc0);
  if ((((((uVar2 - 4 < 0x3d) && ((uVar2 - 1 & uVar2) == 0)) &&
        ((*(uint *)(this + 0x1dc4) - 1 & (*(uint *)(this + 0x1dc4) | 0xffffffc0)) == 0)) &&
       ((*(int *)(this + 0x1dc8) - 1U < 2 && (*(int *)(this + 0x1dcc) != 0)))) &&
      ((uVar3 = *(uint *)(this + 0x1da8), 3 < uVar3 &&
       (((uVar3 & 3) == 0 && (*(int *)(this + 0x1dac) != 0)))))) &&
     ((uVar4 = *(uint *)(this + 0x1db0), 3 < uVar4 &&
      (((((uVar4 & 3) == 0 && (*(int *)(this + 0x1db4) != 0)) &&
        (uVar5 = *(uint *)(this + 0x1db8), 3 < uVar5)) &&
       (((uVar5 & 3) == 0 && (*(int *)(this + 0x1dbc) != 0)))))))) {
    uVar3 = *(int *)(this + 0x1dac) * uVar3;
    uVar12 = (ulong)uVar3;
    uVar5 = *(int *)(this + 0x1dbc) * uVar5;
    pCVar1 = this + 0x76d0;
    iVar7 = *(int *)(this + 0x1db4) * uVar4;
    *(uint *)pCVar1 = uVar3;
    *(int *)(this + 0x76d4) = iVar7;
    *(uint *)(this + 0x76d8) = uVar5;
    pvVar9 = operator_new__((ulong)(uVar3 * 3) << 1);
    uVar13 = uVar12 * 2;
    *(void **)(this + 0x128) = pvVar9;
    pvVar10 = operator_new__(uVar13);
    *(void **)(this + 0x168) = pvVar10;
    pvVar10 = operator_new__(uVar12);
    *(void **)(this + 0x170) = pvVar10;
    pvVar10 = operator_new__(uVar12 << 2);
    *(void **)(this + 0x178) = pvVar10;
    pvVar10 = operator_new__(uVar12);
    *(void **)(this + 0x160) = pvVar10;
    pvVar10 = operator_new__((ulong)uVar5);
    *(void **)(this + 0x180) = pvVar10;
    pvVar10 = operator_new__(uVar13);
    *(void **)(this + 0x118) = pvVar10;
    pvVar10 = operator_new__(uVar12 << 2);
    *(void **)(this + 0x120) = pvVar10;
    pvVar10 = operator_new__((ulong)(uVar4 * 3 + iVar7));
    *(void **)(this + 0xd8) = pvVar10;
    *(void **)(this + 0x130) = pvVar9;
    *(void **)(this + 0x138) = (void *)((long)pvVar9 + uVar13);
    *(void **)(this + 0x148) = (void *)((long)((long)pvVar9 + uVar13) + uVar13);
    iVar7 = CAccumulator::Reset((CAccumulator *)(this + 0x1c98),uVar3,uVar2,0);
    if (iVar7 == 0) {
      mag::Logging::Logging(aLStack_98,4);
      MStream::operator<<((MStream *)aLStack_98,"Failed to create baseline accmulator");
      this_01 = aLStack_98;
    }
    else {
      this_00 = (CFunctions *)
                CAccumulator::Reset((CAccumulator *)(this + 0x1cc8),*(uint *)pCVar1,
                                    *(uint *)(this + 0x1dc4),0);
      if ((int)this_00 == 0) {
        mag::Logging::Logging(aLStack_b0,4);
        MStream::operator<<((MStream *)aLStack_b0,"Failed to create frame accmulator");
        this_01 = aLStack_b0;
      }
      else if ((*(uint *)(this + 0x1dc4) < 2) ||
              (this_00 = (CFunctions *)
                         CAccumulator::Reset((CAccumulator *)(this + 0x1cf8),*(uint *)pCVar1,
                                             *(uint *)(this + 0x1dc4),0), (int)this_00 != 0)) {
        if ((*(uint *)(this + 0x1dc8) < 2) ||
           (this_00 = (CFunctions *)
                      CSmoother::Reset((CSmoother *)(this + 0x1d28),*(uint *)pCVar1,
                                       *(uint *)(this + 0x1dc8) - 1,0,0), (int)this_00 != 0)) {
          if ((*(uint *)(this + 0x1dcc) < 2) ||
             (this_00 = (CFunctions *)
                        CSmoother::Reset((CSmoother *)(this + 0x1d68),*(uint *)pCVar1,
                                         *(uint *)(this + 0x1dcc),1,0), (int)this_00 != 0)) {
            *(undefined4 *)(this + 0x5ac) = 0;
            *(undefined8 *)(this + 0x5a4) = 0;
            *(undefined8 *)(this + 0x59c) = 0;
            *(undefined4 *)(this + 0x58c) = *(undefined4 *)(this + 0x1da8);
            *(undefined4 *)(this + 0x590) = *(undefined4 *)(this + 0x1dac);
            *(undefined4 *)(this + 0x588) = 0x28;
            *(undefined8 *)(this + 0x594) = 0x80001;
            *(undefined4 *)(this + 0x9d4) = 0;
            *(undefined8 *)(this + 0x9cc) = 0;
            *(undefined8 *)(this + 0x9c4) = 0;
            *(undefined4 *)(this + 0x9b0) = 0x28;
            *(undefined4 *)(this + 0x9b4) = *(undefined4 *)(this + 0x1db0);
            *(undefined4 *)(this + 0x9b8) = *(undefined4 *)(this + 0x1db4);
            *(undefined8 *)(this + 0x9bc) = 0x80001;
            *(undefined4 *)(this + 0xdfc) = 0;
            *(undefined8 *)(this + 0xdf4) = 0;
            *(undefined8 *)(this + 0xdec) = 0;
            *(undefined4 *)(this + 0xdd8) = 0x28;
            *(undefined4 *)(this + 0xddc) = *(undefined4 *)(this + 0x1db8);
            *(undefined4 *)(this + 0xde0) = *(undefined4 *)(this + 0x1dbc);
            *(undefined8 *)(this + 0xde4) = 0x80001;
            CalTaoAtm(this_00,(struct_FixPara *)(this + 0xa8));
            *(undefined4 *)(this + 0xe0) = 1;
            pthread_mutex_unlock(__mutex);
            uVar8 = *(undefined4 *)(this + 0xe0);
            goto LAB_001693a0;
          }
          mag::Logging::Logging(aLStack_f8,4);
          MStream::operator<<((MStream *)aLStack_f8,"Failed to create std smoother");
          this_01 = aLStack_f8;
        }
        else {
          mag::Logging::Logging(aLStack_e0,4);
          MStream::operator<<((MStream *)aLStack_e0,"Failed to create temperature smoother");
          this_01 = aLStack_e0;
        }
      }
      else {
        mag::Logging::Logging(aLStack_c8,4);
        MStream::operator<<((MStream *)aLStack_c8,"Failed to create frame accmulator");
        this_01 = aLStack_c8;
      }
    }
    mag::Logging::~Logging(this_01);
    iVar7 = pthread_mutex_unlock(__mutex);
    puVar11 = (undefined4 *)__errno(iVar7);
    uVar8 = 0;
    *puVar11 = 0xe4ae0003;
  }
  else {
    mag::Logging::Logging(aLStack_80,4);
    MStream::operator<<((MStream *)aLStack_80,
                        "Failed to configurate CFunctions due to parameter error");
    mag::Logging::~Logging(aLStack_80);
    iVar7 = pthread_mutex_unlock(__mutex);
    puVar11 = (undefined4 *)__errno(iVar7);
    uVar8 = 0;
    *puVar11 = 0xe4ae0001;
  }
LAB_001693a0:
  if (*(long *)(lVar6 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar8);
}


==================================================================

### FUNC 001694f4 (392 bytes) name=CalTaoAtm

/* CFunctions::CalTaoAtm(struct_FixPara*) */

float __thiscall CFunctions::CalTaoAtm(CFunctions *this,struct_FixPara *param_1)

{
  float fVar1;
  undefined4 *puVar2;
  int iVar3;
  float fVar4;
  float fVar5;
  double dVar6;
  double dVar7;
  double dVar8;
  float fVar9;
  
  if (param_1 == (struct_FixPara *)0x0) {
    puVar2 = (undefined4 *)__errno();
    *puVar2 = 0xe4ae0001;
    fVar4 = 0.0;
  }
  else if ((((*(float *)param_1 <= 0.0) || (*(float *)(param_1 + 0x10) <= 0.0)) ||
           (fVar4 = *(float *)(param_1 + 0xc), fVar4 < 0.0)) || (1.0 < fVar4)) {
    *(undefined4 *)(param_1 + 0x24) = 0x3f800000;
    puVar2 = (undefined4 *)__errno();
    *puVar2 = 0xe4ae0001;
    fVar4 = 1.0;
  }
  else {
    iVar3 = (int)*(float *)(param_1 + 8);
    if (0x22 < iVar3) {
      iVar3 = 0x23;
    }
    if (iVar3 < -0x18) {
      iVar3 = -0x19;
    }
    fVar5 = SQRT(fVar4 * *(float *)(&UNK_00439b74 + (long)iVar3 * 4));
    if (NAN(fVar5)) {
      fVar5 = sqrtf(fVar4 * *(float *)(&UNK_00439b74 + (long)iVar3 * 4));
    }
    dVar6 = DAT_00439510;
    fVar1 = DAT_004394ec;
    fVar4 = DAT_004394e8;
    fVar9 = *(float *)(param_1 + 0x10);
    dVar8 = 0.0;
    fVar5 = fVar5 * DAT_004394e4;
    dVar7 = 0.0;
    if (0.0 < *(float *)(param_1 + 0x14)) {
      dVar7 = pow((double)*(float *)(param_1 + 0x14),DAT_00439510);
      dVar7 = dVar7 * dVar6;
    }
    if (0.0 < *(float *)(param_1 + 0x18)) {
      dVar8 = pow((double)*(float *)(param_1 + 0x18),DAT_00439518);
      dVar8 = dVar8 * 6.5;
    }
    dVar6 = exp((double)(*(float *)param_1 *
                         (fVar5 + fVar4 + fVar1 / fVar9 + (float)(dVar7 + dVar8)) * DAT_004394f0));
    fVar4 = (float)dVar6;
    *(float *)(param_1 + 0x24) = fVar4;
  }
  return fVar4;
}


==================================================================

### FUNC 0016967c (244 bytes) name=PushBaselineRaw

/* CFunctions::PushBaselineRaw(unsigned short const*, int) */

int __thiscall CFunctions::PushBaselineRaw(CFunctions *this,ushort *param_1,int param_2)

{
  pthread_mutex_t *__mutex;
  int iVar1;
  
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  if (*(int *)(this + 0xe0) == 0) {
    pthread_mutex_unlock(__mutex);
    iVar1 = 0;
  }
  else {
    if (param_2 != 0) {
      *(undefined4 *)(this + 0xe4) = 0;
      *(undefined8 *)(this + 0x1dec) = 0;
      *(undefined8 *)(this + 0x1de4) = 0;
      CAccumulator::Restart((CAccumulator *)(this + 0x1c98));
      CAccumulator::Restart((CAccumulator *)(this + 0x1cc8));
      if (1 < *(uint *)(this + 0x1dc4)) {
        CAccumulator::Restart((CAccumulator *)(this + 0x1cf8));
      }
      if (1 < *(uint *)(this + 0x1dc8)) {
        CSmoother::Restart((CSmoother *)(this + 0x1d28));
      }
      CSmoother::Restart((CSmoother *)(this + 0x1d68));
    }
    iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x1c98),param_1);
    if (iVar1 != 0) {
      *(undefined4 *)(this + 0xe4) = 1;
    }
    pthread_mutex_unlock(__mutex);
  }
  return iVar1;
}


==================================================================

### FUNC 00169770 (620 bytes) name=SelectCaliCurve

/* CFunctions::SelectCaliCurve() */

CFunctions * __thiscall CFunctions::SelectCaliCurve(CFunctions *this)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  FILE *__stream;
  size_t sVar5;
  size_t sVar6;
  ulong uVar7;
  int iVar8;
  ulong uVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  CFunctions *pCVar4;
  
  *(undefined4 *)(this + 0x1208) = 0;
  uVar9 = 0;
  do {
    uVar7 = uVar9;
    uVar3 = (uint)uVar7;
    if (*(int *)(this + 0x1310) - 2 <= uVar7) {
      uVar9 = (ulong)(uVar3 + 1);
      break;
    }
    uVar9 = uVar7 + 1;
  } while (*(int *)(this + (uVar9 & 0xffffffff) * 4 + 0x131c) < *(int *)(this + 0x3c));
  *(uint *)(this + 0x15f8) = uVar3;
  iVar11 = *(int *)(this + 0x130c);
  iVar8 = *(int *)(this + 0x76d0);
  uVar2 = *(uint *)(this + 0x1314);
  pCVar4 = this;
  if (uVar3 <= (uint)uVar9) {
    uVar3 = *(int *)(this + 0x1318) + uVar2 + iVar8 * (iVar11 * 3 + -1) * 2;
    uVar9 = uVar7 & 0xffffffff;
    do {
      if (*(int *)(this + uVar9 * 4 + 0x1470) == 0) {
        uVar2 = access((char *)(this + 0x120c),0);
        pCVar4 = (CFunctions *)(ulong)uVar2;
        if (uVar2 != 0) {
LAB_001699a8:
          *(undefined4 *)(this + 0x1200) = 0;
          return pCVar4;
        }
        __stream = fopen((char *)(this + 0x120c),"rb");
        fseek(__stream,(ulong)*(uint *)(this + uVar9 * 4 + 0x14c0),0);
        sVar5 = fread((void *)(*(long *)(this + 0x1458) +
                              (ulong)*(uint *)(this + uVar9 * 4 + 0x1510)),1,(ulong)uVar3,__stream);
        if ((*(int *)(this + uVar9 * 4 + 0x140c) != 0) &&
           ((uint)uVar9 <= *(int *)(this + 0x1310) - 2U)) {
          fseek(__stream,(ulong)*(uint *)(this + uVar9 * 4 + 0x1560),0);
          sVar6 = fread((void *)(*(long *)(this + 0x1468) +
                                (ulong)*(uint *)(this + uVar9 * 4 + 0x15ac)),4,
                        (ulong)(uint)(*(int *)(this + uVar9 * 4 + 0x140c) * 10),__stream);
          if ((sVar6 & 0xffffffff) << 2 !=
              (ulong)(uint)(*(int *)(this + uVar9 * 4 + 0x140c) * 10) * 4) {
            uVar3 = fclose(__stream);
            *(undefined4 *)(this + 0x1200) = 0;
            return (CFunctions *)(ulong)uVar3;
          }
        }
        uVar2 = fclose(__stream);
        pCVar4 = (CFunctions *)(ulong)uVar2;
        if (uVar3 != (uint)sVar5) goto LAB_001699a8;
        *(undefined4 *)(this + uVar9 * 4 + 0x1470) = 1;
        uVar7 = (ulong)*(uint *)(this + 0x15f8);
      }
      uVar2 = (uint)uVar9 + 1;
      uVar9 = (ulong)uVar2;
    } while (uVar2 <= (int)uVar7 + 1U);
    iVar11 = *(int *)(this + 0x130c);
    uVar2 = *(uint *)(this + 0x1314);
    iVar8 = *(int *)(this + 0x76d0);
  }
  lVar12 = (uVar7 & 0xffffffff) * 4;
  lVar10 = (ulong)(uint)((iVar11 + -1) * iVar8) * 2;
  lVar1 = *(long *)(this + 0x1458) + (ulong)*(uint *)(this + lVar12 + 0x1510);
  *(long *)(this + 0x1600) = lVar1;
  *(ulong *)(this + 0x1618) = lVar1 + lVar10 + (ulong)(uVar2 & 0xfffffffe);
  lVar1 = *(long *)(this + 0x1458) + (ulong)*(uint *)(this + (ulong)((int)uVar7 + 1) * 4 + 0x1510);
  *(long *)(this + 0x1608) = lVar1;
  *(ulong *)(this + 0x1620) = lVar1 + lVar10 + (ulong)(uVar2 & 0xfffffffe);
  *(ulong *)(this + 0x1630) = *(long *)(this + 0x1468) + (ulong)*(uint *)(this + lVar12 + 0x15ac);
  return pCVar4;
}


==================================================================

### FUNC 001699dc (484 bytes) name=DoSomething

/* CFunctions::DoSomething(int, unsigned int) */

int __thiscall CFunctions::DoSomething(CFunctions *this,int param_1,uint param_2)

{
  uint uVar1;
  int iVar2;
  ulong uVar3;
  uint uVar4;
  long lVar5;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  if ((*(int *)(this + 0xe0) == 0) || (*(int *)(this + 0x1200) == 0)) goto LAB_00169ba8;
  if (param_1 == 0) {
    SelectCaliCurve(this);
    if ((*(int *)(this + 0x1200) != 0) && (*(int *)(this + 0x1204) != 0)) {
      GenerateVolatileLens(this);
    }
    goto LAB_00169ba8;
  }
  if ((param_1 == 1) && (1 < param_2)) {
    DAT_00509654 = 0;
    uVar4 = (*(int *)(this + 0x130c) + -1) * *(int *)(this + 0x76d0);
    DAT_00509660 = *(int *)(this + 0x130c) * *(int *)(this + 0x76d0) * 2;
    uVar1 = 0;
    if (param_2 - 1 != 0) {
      uVar1 = ((param_2 + DAT_00509660 + uVar4) - 2) / (param_2 - 1);
    }
    DAT_00509664 = uVar1 + 7 & 0xfffffff8;
    uVar3 = 0;
    DAT_00509658 = 0;
    DAT_0050965c = uVar4;
    if (0 < (int)uVar4) goto LAB_00169a98;
LAB_00169b28:
    uVar4 = 0;
  }
  else {
    if (param_1 < 1) goto LAB_00169ba8;
    uVar3 = (ulong)DAT_00509654;
    uVar4 = DAT_0050965c - DAT_00509654;
    if (uVar4 == 0 || (int)DAT_0050965c < (int)DAT_00509654) goto LAB_00169b28;
LAB_00169a98:
    uVar3 = -(uVar3 >> 0x1f) & 0xfffffffe00000000 | uVar3 << 1;
    if ((int)DAT_00509664 <= (int)uVar4) {
      uVar4 = DAT_00509664;
    }
    InterpolateShort(this,(short *)(*(long *)(this + 0x1600) + uVar3),
                     (short *)(*(long *)(this + 0x1608) + uVar3),
                     (short *)(*(long *)(this + 0x1610) + uVar3),uVar4);
    DAT_00509654 = DAT_00509654 + uVar4;
  }
  uVar1 = DAT_00509664 - uVar4;
  if (uVar1 != 0 && (int)uVar4 <= (int)DAT_00509664) {
    if (DAT_00509658 < DAT_00509660) {
      lVar5 = (long)DAT_00509658 * 2;
      uVar4 = DAT_00509660 - DAT_00509658;
      if ((int)uVar1 <= DAT_00509660 - DAT_00509658) {
        uVar4 = uVar1;
      }
      InterpolateUShort(this,(ushort *)(*(long *)(this + 0x1618) + lVar5),
                        (ushort *)(*(long *)(this + 0x1620) + lVar5),
                        (ushort *)(*(long *)(this + 0x1628) + lVar5),uVar4);
      DAT_00509658 = DAT_00509658 + uVar4;
      if (DAT_00509658 == DAT_00509660) {
        *(undefined4 *)(this + 0x1208) = 1;
      }
    }
  }
LAB_00169ba8:
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return iVar2;
}


==================================================================

### FUNC 00169bc0 (720 bytes) name=GenerateVolatileLens

/* CFunctions::GenerateVolatileLens() */

void __thiscall CFunctions::GenerateVolatileLens(CFunctions *this)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  int iVar7;
  long lVar8;
  float fVar9;
  uint local_70 [11];
  int local_44 [11];
  long local_18;
  
  lVar6 = tpidr_el0;
  local_18 = *(long *)(lVar6 + 0x28);
  if ((*(int *)(this + 0x1200) != 0) && (*(int *)(this + 0x1204) != 0)) {
    iVar1 = *(int *)(this + 0x131c) + *(int *)(this + 0x1320);
    if (iVar1 < 0) {
      iVar1 = iVar1 + 1;
    }
    iVar1 = iVar1 >> 1;
    if (*(float *)(this + 0x74) == 0.0) {
      *(undefined4 *)(this + 0x167c) = 1;
      *(undefined4 *)(this + 0x1714) = *(undefined4 *)(this + 0x76dc);
      *(int *)(this + 0x1718) = (*(int *)(this + 0x76e0) - iVar1) + *(int *)(this + 0x3c);
    }
    else {
      iVar3 = *(int *)(this + 0x3c);
      fVar9 = (*(float *)(this + 0x74) * (float)(iVar3 - iVar1)) / DAT_004394f4;
      *(undefined4 *)(this + 0x167c) = 10;
      fVar9 = fVar9 + 1.0;
      iVar4 = *(int *)(this + 0x76e0);
      uVar5 = *(uint *)(this + 0x76e4);
      iVar7 = 0;
      lVar8 = 0;
      if (fVar9 <= DAT_004394f8) {
        fVar9 = DAT_004394f8;
      }
      do {
        uVar2 = (iVar1 - iVar4) + (int)(fVar9 * (float)(iVar7 - iVar3)) >> (uVar5 & 0x1f);
        uVar2 = uVar2 & ((int)uVar2 >> 0x1f ^ 0xffffffffU);
        if (0xfffe < (int)uVar2) {
          uVar2 = 0xffff;
        }
        *(int *)((long)local_44 + lVar8) = iVar7;
        *(uint *)((long)local_70 + lVar8) = uVar2;
        lVar8 = lVar8 + 4;
        iVar7 = iVar7 + 10000;
      } while (lVar8 != 0x2c);
      uVar5 = local_70[1] - local_70[0];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[1] - local_44[0]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x1680) = local_70[1];
      *(uint *)(this + 0x1714) = uVar2;
      *(uint *)(this + 0x1718) = local_44[0] - local_70[0] * uVar2;
      *(uint *)(this + 0x1684) = local_70[2];
      uVar5 = local_70[2] - local_70[1];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[2] - local_44[1]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x171c) = uVar2;
      *(uint *)(this + 0x1720) = local_44[1] - local_70[1] * uVar2;
      *(uint *)(this + 0x1688) = local_70[3];
      uVar5 = local_70[3] - local_70[2];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[3] - local_44[2]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x1724) = uVar2;
      *(uint *)(this + 0x1728) = local_44[2] - local_70[2] * uVar2;
      *(uint *)(this + 0x168c) = local_70[4];
      uVar5 = local_70[4] - local_70[3];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[4] - local_44[3]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x172c) = uVar2;
      *(uint *)(this + 0x1730) = local_44[3] - local_70[3] * uVar2;
      *(uint *)(this + 0x1690) = local_70[5];
      uVar5 = local_70[5] - local_70[4];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[5] - local_44[4]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x1734) = uVar2;
      *(uint *)(this + 0x1738) = local_44[4] - local_70[4] * uVar2;
      *(uint *)(this + 0x1694) = local_70[6];
      uVar5 = local_70[6] - local_70[5];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[6] - local_44[5]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x173c) = uVar2;
      *(uint *)(this + 0x1740) = local_44[5] - local_70[5] * uVar2;
      *(uint *)(this + 0x1698) = local_70[7];
      uVar5 = local_70[7] - local_70[6];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[7] - local_44[6]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x1744) = uVar2;
      *(uint *)(this + 0x1748) = local_44[6] - local_70[6] * uVar2;
      *(uint *)(this + 0x169c) = local_70[8];
      uVar5 = local_70[8] - local_70[7];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[8] - local_44[7]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x174c) = uVar2;
      *(uint *)(this + 0x1750) = local_44[7] - local_70[7] * uVar2;
      *(uint *)(this + 0x16a0) = local_70[9];
      uVar5 = local_70[9] - local_70[8];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[9] - local_44[8]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x1754) = uVar2;
      *(uint *)(this + 0x1758) = local_44[8] - local_70[8] * uVar2;
      *(uint *)(this + 0x16a4) = local_70[10];
      uVar5 = local_70[10] - local_70[9];
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = ((local_44[10] - local_44[9]) + (uVar5 >> 1)) / uVar5;
      }
      *(uint *)(this + 0x175c) = uVar2;
      *(uint *)(this + 0x1760) = local_44[9] - local_70[9] * uVar2;
    }
  }
  if (*(long *)(lVar6 + 0x28) == local_18) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00169e90 (648 bytes) name=InterpolateShort

/* CFunctions::InterpolateShort(short const*, short const*, short*, unsigned int) */

void __thiscall
CFunctions::InterpolateShort
          (CFunctions *this,short *param_1,short *param_2,short *param_3,uint param_4)

{
  short *psVar1;
  short *psVar2;
  short *psVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined1 auVar10 [16];
  undefined8 uVar11;
  undefined8 uVar12;
  undefined1 auVar13 [16];
  bool bVar14;
  ulong uVar15;
  long lVar16;
  short sVar17;
  short sVar18;
  short sVar19;
  short sVar20;
  short sVar21;
  short sVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  
  iVar5 = *(int *)(this + 0x3c);
  if ((iVar5 < *(int *)(this + 0x131c)) ||
     (*(int *)(this + (ulong)(*(int *)(this + 0x1310) - 1) * 4 + 0x131c) < iVar5)) {
    bVar14 = false;
  }
  else {
    bVar14 = true;
  }
  iVar7 = *(int *)(this + (ulong)(*(uint *)(this + 0x15f8) + 1) * 4 + 0x131c) -
          *(int *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x131c);
  iVar6 = 0;
  if (iVar7 != 0) {
    iVar6 = ((iVar5 - *(int *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x131c)) * 0x1000) /
            iVar7;
  }
  if (iVar6 < -0x3ffe) {
    iVar6 = -0x3fff;
  }
  if (0x3ffe < iVar6) {
    iVar6 = 0x3fff;
  }
  if (bVar14) {
    if (param_4 != 0) {
      uVar15 = (ulong)(param_4 - 1);
      if (7 < uVar15 + 1) {
        uVar4 = param_4 & 7;
        lVar16 = (uVar15 + 1) - (ulong)uVar4;
        if (lVar16 != 0) {
          if ((param_1 + uVar15 + 1 <= param_3 || param_3 + uVar15 + 1 <= param_1) &&
             (param_2 + uVar15 + 1 <= param_3 || param_3 + uVar15 + 1 <= param_2)) {
            param_4 = param_4 - (int)lVar16;
            psVar1 = param_1 + lVar16;
            psVar2 = param_2 + lVar16;
            psVar3 = param_3 + lVar16;
            do {
              uVar9 = *(undefined8 *)(param_1 + 4);
              sVar22 = (short)((ulong)uVar9 >> 0x30);
              uVar8 = *(undefined8 *)param_1;
              sVar19 = (short)((ulong)uVar8 >> 0x10);
              sVar20 = (short)((ulong)uVar8 >> 0x20);
              sVar21 = (short)((ulong)uVar8 >> 0x30);
              uVar12 = *(undefined8 *)(param_2 + 4);
              uVar11 = *(undefined8 *)param_2;
              lVar16 = lVar16 + -8;
              sVar17 = (short)((ulong)uVar9 >> 0x10);
              sVar18 = (short)((ulong)uVar9 >> 0x20);
              *(ulong *)(param_3 + 4) =
                   CONCAT26((short)((uint)(((int)(short)((ulong)uVar12 >> 0x30) - (int)sVar22) *
                                          iVar6) >> 0xc) + sVar22,
                            CONCAT24((short)((uint)(((int)(short)((ulong)uVar12 >> 0x20) -
                                                    (int)sVar18) * iVar6) >> 0xc) + sVar18,
                                     CONCAT22((short)((uint)(((int)(short)((ulong)uVar12 >> 0x10) -
                                                             (int)sVar17) * iVar6) >> 0xc) + sVar17,
                                              (short)((uint)(((int)(short)uVar12 - (int)(short)uVar9
                                                             ) * iVar6) >> 0xc) + (short)uVar9)));
              *(ulong *)param_3 =
                   CONCAT26(sVar21 + (short)((uint)(((int)(short)((ulong)uVar11 >> 0x30) -
                                                    (int)sVar21) * iVar6) >> 0xc),
                            CONCAT24(sVar20 + (short)((uint)(((int)(short)((ulong)uVar11 >> 0x20) -
                                                             (int)sVar20) * iVar6) >> 0xc),
                                     CONCAT22(sVar19 + (short)((uint)(((int)(short)((ulong)uVar11 >>
                                                                                   0x10) -
                                                                      (int)sVar19) * iVar6) >> 0xc),
                                              (short)uVar8 +
                                              (short)((uint)(((int)(short)uVar11 - (int)(short)uVar8
                                                             ) * iVar6) >> 0xc))));
              param_1 = param_1 + 8;
              param_2 = param_2 + 8;
              param_3 = param_3 + 8;
            } while (lVar16 != 0);
            param_1 = psVar1;
            param_2 = psVar2;
            param_3 = psVar3;
            if (uVar4 == 0) {
              return;
            }
          }
        }
      }
      do {
        param_4 = param_4 - 1;
        *param_3 = *param_1 + (short)((uint)(((int)*param_2 - (int)*param_1) * iVar6) >> 0xc);
        param_1 = param_1 + 1;
        param_2 = param_2 + 1;
        param_3 = param_3 + 1;
      } while (param_4 != 0);
    }
  }
  else if (param_4 != 0) {
    uVar15 = (ulong)(param_4 - 1);
    if (7 < uVar15 + 1) {
      uVar4 = param_4 & 7;
      lVar16 = (uVar15 + 1) - (ulong)uVar4;
      if (lVar16 != 0) {
        if ((param_1 + uVar15 + 1 <= param_3 || param_3 + uVar15 + 1 <= param_1) &&
           (param_2 + uVar15 + 1 <= param_3 || param_3 + uVar15 + 1 <= param_2)) {
          param_4 = param_4 - (int)lVar16;
          psVar1 = param_1 + lVar16;
          psVar2 = param_2 + lVar16;
          psVar3 = param_3 + lVar16;
          do {
            lVar16 = lVar16 + -8;
            auVar23._0_4_ = (((int)param_2[4] - (int)param_1[4]) * iVar6 >> 0xc) + (int)param_1[4];
            auVar23._4_4_ = (((int)param_2[5] - (int)param_1[5]) * iVar6 >> 0xc) + (int)param_1[5];
            auVar23._8_4_ = (((int)param_2[6] - (int)param_1[6]) * iVar6 >> 0xc) + (int)param_1[6];
            auVar23._12_4_ = (((int)param_2[7] - (int)param_1[7]) * iVar6 >> 0xc) + (int)param_1[7];
            auVar24._8_2_ = 0x8000;
            auVar24._0_8_ = 0xffff8000ffff8000;
            auVar24._10_2_ = 0xffff;
            auVar24._12_2_ = 0x8000;
            auVar24._14_2_ = 0xffff;
            auVar13._4_4_ = (int)param_1[1] + (((int)param_2[1] - (int)param_1[1]) * iVar6 >> 0xc);
            auVar13._0_4_ = (int)*param_1 + (((int)*param_2 - (int)*param_1) * iVar6 >> 0xc);
            auVar13._8_4_ = (int)param_1[2] + (((int)param_2[2] - (int)param_1[2]) * iVar6 >> 0xc);
            auVar13._12_4_ = (int)param_1[3] + (((int)param_2[3] - (int)param_1[3]) * iVar6 >> 0xc);
            auVar25 = NEON_smax(auVar13,auVar24,4);
            auVar26._8_2_ = 0x8000;
            auVar26._0_8_ = 0xffff8000ffff8000;
            auVar26._10_2_ = 0xffff;
            auVar26._12_2_ = 0x8000;
            auVar26._14_2_ = 0xffff;
            auVar24 = NEON_smax(auVar23,auVar26,4);
            auVar10._8_2_ = 0x7fff;
            auVar10._0_8_ = 0x7fff00007fff;
            auVar10._10_2_ = 0;
            auVar10._12_2_ = 0x7fff;
            auVar10._14_2_ = 0;
            auVar26 = NEON_smin(auVar25,auVar10,4);
            auVar25._8_2_ = 0x7fff;
            auVar25._0_8_ = 0x7fff00007fff;
            auVar25._10_2_ = 0;
            auVar25._12_2_ = 0x7fff;
            auVar25._14_2_ = 0;
            auVar24 = NEON_smin(auVar24,auVar25,4);
            param_3[4] = auVar24._0_2_;
            param_3[5] = auVar24._4_2_;
            param_3[6] = auVar24._8_2_;
            param_3[7] = auVar24._12_2_;
            *param_3 = auVar26._0_2_;
            param_3[1] = auVar26._4_2_;
            param_3[2] = auVar26._8_2_;
            param_3[3] = auVar26._12_2_;
            param_1 = param_1 + 8;
            param_2 = param_2 + 8;
            param_3 = param_3 + 8;
          } while (lVar16 != 0);
          param_1 = psVar1;
          param_2 = psVar2;
          param_3 = psVar3;
          if (uVar4 == 0) {
            return;
          }
        }
      }
    }
    do {
      param_4 = param_4 - 1;
      iVar5 = (int)*param_1 + (((int)*param_2 - (int)*param_1) * iVar6 >> 0xc);
      if (iVar5 < -0x7fff) {
        iVar5 = -0x8000;
      }
      if (0x7ffe < iVar5) {
        iVar5 = 0x7fff;
      }
      *param_3 = (short)iVar5;
      param_1 = param_1 + 1;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
    } while (param_4 != 0);
  }
  return;
}


==================================================================

### FUNC 0016a118 (640 bytes) name=InterpolateUShort

/* CFunctions::InterpolateUShort(unsigned short const*, unsigned short const*, unsigned short*,
   unsigned int) */

void __thiscall
CFunctions::InterpolateUShort
          (CFunctions *this,ushort *param_1,ushort *param_2,ushort *param_3,uint param_4)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort *puVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  bool bVar12;
  ulong uVar13;
  long lVar14;
  ushort uVar15;
  ushort uVar16;
  ushort uVar17;
  ushort uVar18;
  ushort uVar19;
  ushort uVar20;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  
  iVar5 = *(int *)(this + 0x3c);
  if ((iVar5 < *(int *)(this + 0x131c)) ||
     (*(int *)(this + (ulong)(*(int *)(this + 0x1310) - 1) * 4 + 0x131c) < iVar5)) {
    bVar12 = false;
  }
  else {
    bVar12 = true;
  }
  iVar7 = *(int *)(this + (ulong)(*(uint *)(this + 0x15f8) + 1) * 4 + 0x131c) -
          *(int *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x131c);
  iVar6 = 0;
  if (iVar7 != 0) {
    iVar6 = ((iVar5 - *(int *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x131c)) * 0x1000) /
            iVar7;
  }
  if (iVar6 < -0x3ffe) {
    iVar6 = -0x3fff;
  }
  if (0x3ffe < iVar6) {
    iVar6 = 0x3fff;
  }
  if (bVar12) {
    if (param_4 != 0) {
      uVar13 = (ulong)(param_4 - 1);
      if (7 < uVar13 + 1) {
        uVar4 = param_4 & 7;
        lVar14 = (uVar13 + 1) - (ulong)uVar4;
        if (lVar14 != 0) {
          if ((param_1 + uVar13 + 1 <= param_3 || param_3 + uVar13 + 1 <= param_1) &&
             (param_2 + uVar13 + 1 <= param_3 || param_3 + uVar13 + 1 <= param_2)) {
            param_4 = param_4 - (int)lVar14;
            puVar1 = param_1 + lVar14;
            puVar2 = param_2 + lVar14;
            puVar3 = param_3 + lVar14;
            do {
              uVar9 = *(undefined8 *)(param_1 + 4);
              uVar20 = (ushort)((ulong)uVar9 >> 0x30);
              uVar8 = *(undefined8 *)param_1;
              uVar17 = (ushort)((ulong)uVar8 >> 0x10);
              uVar18 = (ushort)((ulong)uVar8 >> 0x20);
              uVar19 = (ushort)((ulong)uVar8 >> 0x30);
              uVar11 = *(undefined8 *)(param_2 + 4);
              uVar10 = *(undefined8 *)param_2;
              lVar14 = lVar14 + -8;
              uVar15 = (ushort)((ulong)uVar9 >> 0x10);
              uVar16 = (ushort)((ulong)uVar9 >> 0x20);
              *(ulong *)(param_3 + 4) =
                   CONCAT26((short)(((uint)(ushort)((ulong)uVar11 >> 0x30) - (uint)uVar20) * iVar6
                                   >> 0xc) + uVar20,
                            CONCAT24((short)(((uint)(ushort)((ulong)uVar11 >> 0x20) - (uint)uVar16)
                                             * iVar6 >> 0xc) + uVar16,
                                     CONCAT22((short)(((uint)(ushort)((ulong)uVar11 >> 0x10) -
                                                      (uint)uVar15) * iVar6 >> 0xc) + uVar15,
                                              (short)(((uint)(ushort)uVar11 - (uint)(ushort)uVar9) *
                                                      iVar6 >> 0xc) + (ushort)uVar9)));
              *(ulong *)param_3 =
                   CONCAT26(uVar19 + (short)(((uint)(ushort)((ulong)uVar10 >> 0x30) - (uint)uVar19)
                                             * iVar6 >> 0xc),
                            CONCAT24(uVar18 + (short)(((uint)(ushort)((ulong)uVar10 >> 0x20) -
                                                      (uint)uVar18) * iVar6 >> 0xc),
                                     CONCAT22(uVar17 + (short)(((uint)(ushort)((ulong)uVar10 >> 0x10
                                                                              ) - (uint)uVar17) *
                                                               iVar6 >> 0xc),
                                              (ushort)uVar8 +
                                              (short)((((uint)uVar10 & 0xffff) - (uint)(ushort)uVar8
                                                      ) * iVar6 >> 0xc))));
              param_1 = param_1 + 8;
              param_2 = param_2 + 8;
              param_3 = param_3 + 8;
            } while (lVar14 != 0);
            param_1 = puVar1;
            param_2 = puVar2;
            param_3 = puVar3;
            if (uVar4 == 0) {
              return;
            }
          }
        }
      }
      do {
        param_4 = param_4 - 1;
        *param_3 = *param_1 + (short)(((uint)*param_2 - (uint)*param_1) * iVar6 >> 0xc);
        param_1 = param_1 + 1;
        param_2 = param_2 + 1;
        param_3 = param_3 + 1;
      } while (param_4 != 0);
    }
  }
  else if (param_4 != 0) {
    uVar13 = (ulong)(param_4 - 1);
    if (7 < uVar13 + 1) {
      uVar4 = param_4 & 7;
      lVar14 = (uVar13 + 1) - (ulong)uVar4;
      if (lVar14 != 0) {
        if ((param_1 + uVar13 + 1 <= param_3 || param_3 + uVar13 + 1 <= param_1) &&
           (param_2 + uVar13 + 1 <= param_3 || param_3 + uVar13 + 1 <= param_2)) {
          param_4 = param_4 - (int)lVar14;
          puVar1 = param_1 + lVar14;
          puVar2 = param_2 + lVar14;
          puVar3 = param_3 + lVar14;
          do {
            lVar14 = lVar14 + -8;
            auVar24._0_4_ =
                 ((int)(((uint)param_2[4] - (uint)param_1[4]) * iVar6) >> 0xc) + (uint)param_1[4];
            auVar24._4_4_ =
                 ((int)(((uint)param_2[5] - (uint)param_1[5]) * iVar6) >> 0xc) + (uint)param_1[5];
            auVar24._8_4_ =
                 ((int)(((uint)param_2[6] - (uint)param_1[6]) * iVar6) >> 0xc) + (uint)param_1[6];
            auVar24._12_4_ =
                 ((int)(((uint)param_2[7] - (uint)param_1[7]) * iVar6) >> 0xc) + (uint)param_1[7];
            auVar21._4_4_ =
                 (uint)param_1[1] + ((int)(((uint)param_2[1] - (uint)param_1[1]) * iVar6) >> 0xc);
            auVar21._0_4_ =
                 (uint)*param_1 + ((int)(((uint)*param_2 - (uint)*param_1) * iVar6) >> 0xc);
            auVar21._8_4_ =
                 (uint)param_1[2] + ((int)(((uint)param_2[2] - (uint)param_1[2]) * iVar6) >> 0xc);
            auVar21._12_4_ =
                 (uint)param_1[3] + ((int)(((uint)param_2[3] - (uint)param_1[3]) * iVar6) >> 0xc);
            auVar23 = NEON_smax(auVar21,ZEXT416(0),4);
            auVar21 = NEON_smax(auVar24,ZEXT416(0),4);
            auVar22._8_2_ = 0xffff;
            auVar22._0_8_ = 0xffff0000ffff;
            auVar22._10_2_ = 0;
            auVar22._12_2_ = 0xffff;
            auVar22._14_2_ = 0;
            auVar24 = NEON_smin(auVar23,auVar22,4);
            auVar23._8_2_ = 0xffff;
            auVar23._0_8_ = 0xffff0000ffff;
            auVar23._10_2_ = 0;
            auVar23._12_2_ = 0xffff;
            auVar23._14_2_ = 0;
            auVar22 = NEON_smin(auVar21,auVar23,4);
            param_3[4] = auVar22._0_2_;
            param_3[5] = auVar22._4_2_;
            param_3[6] = auVar22._8_2_;
            param_3[7] = auVar22._12_2_;
            *param_3 = auVar24._0_2_;
            param_3[1] = auVar24._4_2_;
            param_3[2] = auVar24._8_2_;
            param_3[3] = auVar24._12_2_;
            param_1 = param_1 + 8;
            param_2 = param_2 + 8;
            param_3 = param_3 + 8;
          } while (lVar14 != 0);
          param_1 = puVar1;
          param_2 = puVar2;
          param_3 = puVar3;
          if (uVar4 == 0) {
            return;
          }
        }
      }
    }
    do {
      param_4 = param_4 - 1;
      uVar4 = (uint)*param_1 + ((int)(((uint)*param_2 - (uint)*param_1) * iVar6) >> 0xc);
      uVar4 = uVar4 & ((int)uVar4 >> 0x1f ^ 0xffffffffU);
      if (0xfffe < (int)uVar4) {
        uVar4 = 0xffff;
      }
      *param_3 = (ushort)uVar4;
      param_1 = param_1 + 1;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
    } while (param_4 != 0);
  }
  return;
}


==================================================================

### FUNC 0016a398 (132 bytes) name=Raw2Temperature

/* CFunctions::Raw2Temperature(unsigned short const*) */

void __thiscall CFunctions::Raw2Temperature(CFunctions *this,ushort *param_1)

{
  int iVar1;
  int iVar2;
  ushort *puVar3;
  
  iVar1 = *(int *)(this + 0x1dc4);
  iVar2 = CAccumulator::PushFrame((CAccumulator *)(this + 0x1cc8),param_1);
  if (iVar1 == 1) {
    if (*(int *)(this + 0x1cf4) == 0) {
      puVar3 = (ushort *)0x0;
      *(undefined8 *)(this + 0x4a50) = 0;
    }
    else {
      puVar3 = *(ushort **)(this + 0x1cd8);
      *(ushort **)(this + 0x4a50) = puVar3;
    }
  }
  else {
    *(int *)(this + 0x1de4) = iVar2;
    if (iVar2 == 0) {
      return;
    }
    *(undefined4 *)(this + 0x1de4) = 0;
    if (*(int *)(this + 0x1cf4) == 0) {
      puVar3 = (ushort *)0x0;
    }
    else {
      puVar3 = *(ushort **)(this + 0x1cd8);
    }
  }
  Calibration(this,puVar3);
  *(undefined4 *)(this + 0x1dec) = 1;
  return;
}


==================================================================

### FUNC 0016a41c (200 bytes) name=Calibration

/* CFunctions::Calibration(unsigned short const*) */

void __thiscall CFunctions::Calibration(CFunctions *this,ushort *param_1)

{
  ushort *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  ushort *puVar6;
  long lVar7;
  ushort *puVar8;
  int iVar9;
  long lVar10;
  ushort *puVar11;
  
  if ((*(int *)(this + 0x1200) == 0) || (*(int *)(this + 0x1208) == 0)) {
    ConvertResponse2Temperature(this,param_1);
    return;
  }
  lVar7 = *(long *)(this + 0x1610);
  if (*(int *)(this + 0x1cc4) == 0) {
    puVar8 = (ushort *)0x0;
  }
  else {
    puVar8 = *(ushort **)(this + 0x1ca8);
  }
  iVar9 = *(int *)(this + 0x76d0);
  puVar6 = *(ushort **)(this + 0x130);
  if (iVar9 != 0) {
    lVar10 = *(long *)(this + 0x1628);
    iVar3 = iVar9 * 2;
    uVar4 = *(int *)(this + 0x130c) - 1;
    puVar11 = puVar6;
    do {
      iVar2 = (int)((uint)*param_1 - (uint)*puVar8) >> 1;
      uVar5 = 0;
      if (uVar4 != 0) {
        do {
          if (iVar2 <= *(short *)(lVar7 + (ulong)uVar5 * 2)) break;
          uVar5 = uVar5 + 1;
        } while (uVar5 < uVar4);
      }
      puVar1 = (ushort *)(lVar10 + (ulong)(iVar3 * uVar5) * 2);
      lVar7 = lVar7 + (ulong)uVar4 * 2;
      lVar10 = lVar10 + 4;
      uVar5 = (uint)puVar1[1] + ((int)(iVar2 * (uint)*puVar1) >> 0xc);
      uVar5 = uVar5 & ((int)uVar5 >> 0x1f ^ 0xffffffffU);
      if (0xfffe < (int)uVar5) {
        uVar5 = 0xffff;
      }
      iVar9 = iVar9 + -1;
      *puVar11 = (ushort)uVar5;
      param_1 = param_1 + 1;
      puVar8 = puVar8 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar9 != 0);
  }
  BlindCompensation(this,puVar6);
  return;
}


==================================================================

### FUNC 0016a4e4 (1888 bytes) name=PushFrame

/* CFunctions::PushFrame(unsigned short const*, SrcDataType, int, int, int) */

undefined4 __thiscall
CFunctions::PushFrame
          (CFunctions *this,ushort *param_1,int param_3,int param_4,int param_5,int param_6)

{
  undefined2 *puVar1;
  ushort *puVar2;
  pthread_mutex_t *__mutex;
  ushort *puVar3;
  uint uVar4;
  uint uVar5;
  short sVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined8 uVar9;
  undefined8 uVar10;
  int iVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined8 uVar14;
  int iVar15;
  int iVar16;
  undefined8 uVar17;
  int iVar18;
  unkbyte10 Var19;
  int iVar20;
  long lVar21;
  undefined2 *puVar22;
  void *__src;
  int iVar23;
  undefined4 uVar24;
  uint uVar25;
  long lVar26;
  undefined2 *puVar27;
  ushort *puVar28;
  ushort uVar29;
  ushort uVar30;
  undefined2 *puVar31;
  ushort uVar32;
  ushort *puVar33;
  int iVar34;
  long lVar35;
  ulong uVar36;
  ushort uVar37;
  int iVar38;
  undefined2 *puVar39;
  ushort uVar40;
  double dVar41;
  double __x;
  undefined1 auVar42 [16];
  short sVar43;
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  lVar21 = GetTickCount();
  if ((param_1 == (ushort *)0x0) || (*(int *)(this + 0xe0) == 0)) {
LAB_0016ac18:
    pthread_mutex_unlock(__mutex);
    return 0;
  }
  if (param_3 == 0) {
    if (*(int *)(this + 0xe4) == 0) goto LAB_0016ac18;
    *(undefined8 *)(this + 0x1e24) = 0;
    iVar23 = *(int *)(this + 0x1dc4);
    *(undefined4 *)(this + 0x1e2c) = 0;
    iVar20 = CAccumulator::PushFrame((CAccumulator *)(this + 0x1cc8),param_1);
    if (iVar23 == 1) {
      if (*(int *)(this + 0x1cf4) == 0) {
        puVar33 = (ushort *)0x0;
        *(undefined8 *)(this + 0x4a50) = 0;
      }
      else {
        puVar33 = *(ushort **)(this + 0x1cd8);
        *(ushort **)(this + 0x4a50) = puVar33;
      }
LAB_0016a5f4:
      Calibration(this,puVar33);
      goto LAB_0016a5fc;
    }
    *(int *)(this + 0x1de4) = iVar20;
    if (iVar20 != 0) {
      *(undefined4 *)(this + 0x1de4) = 0;
      if (*(int *)(this + 0x1cf4) == 0) {
        puVar33 = (ushort *)0x0;
      }
      else {
        puVar33 = *(ushort **)(this + 0x1cd8);
      }
      goto LAB_0016a5f4;
    }
    if (*(int *)(this + 0x1dec) == 0) {
      if ((*(int *)(this + 0x1df0) == 0) || (*(int *)(this + 0x1de4) == 0)) {
        CopyState(this);
        goto LAB_0016ac18;
      }
      lVar26 = 1;
    }
    else {
      lVar26 = 0;
    }
  }
  else {
    *(undefined8 *)(this + 0x1e24) = 0;
    *(undefined4 *)(this + 0x1e2c) = 0;
    if (param_3 != 1) goto LAB_0016ac18;
    memcpy(*(void **)(this + 0x130),param_1,(ulong)*(uint *)(this + 0x76d0) << 1);
LAB_0016a5fc:
    lVar26 = 0;
    *(undefined4 *)(this + 0x1dec) = 1;
  }
  __src = *(void **)(this + lVar26 * 8 + 0x130);
  *(void **)(this + 0x140) = __src;
  *(undefined4 *)(this + lVar26 * 4 + 0x1dec) = 0;
  *(undefined4 *)(this + 19000) = 0;
  if (*(int *)(this + 0x7c) == 1) {
    memcpy(*(void **)(this + 0x168),__src,(ulong)*(uint *)(this + 0x76d0) << 1);
    iVar23 = *(int *)(this + 0x1da8);
    if (iVar23 != 0) {
      uVar25 = *(uint *)(this + 0x1dac);
      puVar27 = *(undefined2 **)(this + 0x168);
      iVar20 = uVar25 * iVar23;
      uVar5 = uVar25 + 3;
      if (-1 < (int)uVar25) {
        uVar5 = uVar25;
      }
      puVar31 = (undefined2 *)(*(long *)(this + 0x140) + (long)(int)((uVar25 - 1) * iVar23) * 2);
      uVar36 = (ulong)(((int)uVar5 >> 2) - 1);
      lVar26 = (long)iVar23;
      do {
        puVar22 = puVar31;
        puVar39 = puVar27;
        iVar38 = (int)uVar5 >> 2;
        if (6 < uVar25 + 3) {
          do {
            iVar38 = iVar38 + -1;
            *puVar22 = *puVar39;
            puVar22 = puVar22 + -lVar26;
            *puVar22 = puVar39[1];
            puVar22 = puVar22 + -lVar26;
            *puVar22 = puVar39[2];
            puVar1 = puVar39 + 3;
            puVar39 = puVar39 + 4;
            puVar22[-lVar26] = *puVar1;
            puVar22 = puVar22 + -lVar26 + -lVar26;
          } while (iVar38 != 0);
          puVar31 = (undefined2 *)((long)puVar31 + (uVar36 * -8 + -8) * lVar26);
          puVar27 = puVar27 + uVar36 * 4 + 4;
        }
        iVar23 = iVar23 + -1;
        puVar31 = puVar31 + (iVar20 + 1);
      } while (iVar23 != 0);
    }
  }
  if (*(uint *)(this + 0x78) != 0) {
    Mirror(this,*(uint *)(this + 0x78));
  }
  if (*(int *)(this + 0x50) == 0 && param_4 == 0) {
    if (*(int *)(this + 0x5c) != 0) {
      puVar33 = *(ushort **)(this + 0x140);
      iVar23 = *(int *)(this + 0x76d0);
      uVar40 = *puVar33;
      if ((iVar23 != 0) && (iVar20 = iVar23 + -1, iVar20 != 0)) {
        uVar36 = (ulong)(iVar23 - 2) + 1;
        puVar28 = puVar33;
        uVar30 = uVar40;
        if (0xf < uVar36) {
          uVar5 = iVar23 + 0xfU & 0xf;
          lVar26 = uVar36 - uVar5;
          if (lVar26 != 0) {
            auVar44._0_8_ = CONCAT26(uVar40,CONCAT24(uVar40,CONCAT22(uVar40,uVar40)));
            auVar44._8_2_ = uVar40;
            auVar44._10_2_ = uVar40;
            auVar44._12_2_ = uVar40;
            auVar44._14_2_ = uVar40;
            iVar20 = iVar20 - (int)lVar26;
            puVar28 = puVar33 + lVar26;
            puVar33 = puVar33 + 9;
            auVar45._8_8_ = auVar44._8_8_;
            auVar45._0_8_ = auVar44._0_8_;
            do {
              puVar2 = puVar33 + -8;
              uVar9 = *(undefined8 *)(puVar33 + -4);
              uVar10 = *(undefined8 *)(puVar33 + 4);
              Var19 = *(unkbyte10 *)puVar33;
              lVar26 = lVar26 + -0x10;
              puVar33 = puVar33 + 0x10;
              auVar8[9] = (char)((ulong)uVar9 >> 8);
              auVar8._0_9_ = *(unkbyte9 *)puVar2;
              auVar8[10] = (char)((ulong)uVar9 >> 0x10);
              auVar8[0xb] = (char)((ulong)uVar9 >> 0x18);
              auVar8[0xc] = (char)((ulong)uVar9 >> 0x20);
              auVar8[0xd] = (char)((ulong)uVar9 >> 0x28);
              auVar8[0xe] = (char)((ulong)uVar9 >> 0x30);
              auVar8[0xf] = (char)((ulong)uVar9 >> 0x38);
              auVar44 = NEON_umax(auVar44,auVar8,2);
              auVar13._10_2_ = (short)((ulong)uVar10 >> 0x10);
              auVar13._0_10_ = Var19;
              auVar13._12_2_ = (short)((ulong)uVar10 >> 0x20);
              auVar13._14_2_ = (short)((ulong)uVar10 >> 0x30);
              auVar45 = NEON_umax(auVar45,auVar13,2);
            } while (lVar26 != 0);
            auVar44 = NEON_umax(auVar44,auVar45,2);
            uVar40 = NEON_umaxv(auVar44,2);
            uVar30 = uVar40;
            if (uVar5 == 0) goto LAB_0016a8f8;
          }
        }
        do {
          uVar40 = puVar28[1];
          iVar20 = iVar20 + -1;
          if (uVar40 <= uVar30) {
            uVar40 = uVar30;
          }
          puVar28 = puVar28 + 1;
          uVar30 = uVar40;
        } while (iVar20 != 0);
      }
LAB_0016a8f8:
      *(uint *)(this + 0x1df8) = (uint)uVar40;
    }
    *(undefined4 *)(this + 0x1e20) = 0;
    goto LAB_0016ab68;
  }
  if ((param_5 == 0) && (1 < *(uint *)(this + 0x1dc8))) {
    uVar5 = *(uint *)(this + 0x38) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
    if (0xfffe < uVar5) {
      uVar5 = 0xffff;
    }
    CSmoother::PushFrameAve((CSmoother *)(this + 0x1d28),*(ushort **)(this + 0x140),uVar5);
    uVar24 = 1;
  }
  else {
    uVar24 = 0;
  }
  *(undefined4 *)(this + 0x1e20) = uVar24;
  if (*(int *)(this + 0xe8) != 0) {
    uVar25 = *(uint *)(this + 0x76d0);
    uVar5 = -*(int *)(this + 0x76e0) >> (*(uint *)(this + 0x76e4) & 0x1f);
    uVar5 = uVar5 & ((int)uVar5 >> 0x1f ^ 0xffffffffU);
    if (0xfffe < (int)uVar5) {
      uVar5 = 0xffff;
    }
    if (uVar25 != 0) {
      puVar33 = *(ushort **)(this + 0x140);
      puVar28 = *(ushort **)(this + 0x158);
      uVar36 = (ulong)(uVar25 - 1);
      if (7 < uVar36 + 1) {
        uVar4 = uVar25 & 7;
        lVar26 = (uVar36 + 1) - (ulong)uVar4;
        if ((lVar26 != 0) &&
           ((puVar28 + uVar36 + 1 <= puVar33 || (puVar33 + uVar36 + 1 <= puVar28)))) {
          uVar25 = uVar25 - (int)lVar26;
          puVar2 = puVar33 + lVar26;
          puVar3 = puVar28 + lVar26;
          auVar42._8_8_ = 0xffff0000ffff;
          auVar42._0_8_ = 0xffff0000ffff;
          do {
            uVar10 = *(undefined8 *)(puVar33 + 4);
            uVar9 = *(undefined8 *)puVar33;
            uVar17 = *(undefined8 *)(puVar28 + 4);
            uVar14 = *(undefined8 *)puVar28;
            lVar26 = lVar26 + -8;
            iVar23 = ((uint)(ushort)uVar9 - (uint)(ushort)uVar14) + uVar5;
            iVar20 = ((uint)(ushort)((ulong)uVar9 >> 0x10) - (uint)(ushort)((ulong)uVar14 >> 0x10))
                     + uVar5;
            iVar38 = ((uint)(ushort)((ulong)uVar9 >> 0x20) - (uint)(ushort)((ulong)uVar14 >> 0x20))
                     + uVar5;
            iVar11 = ((uint)(ushort)((ulong)uVar9 >> 0x30) - (uint)(ushort)((ulong)uVar14 >> 0x30))
                     + uVar5;
            iVar34 = ((uint)(ushort)uVar10 - (uint)(ushort)uVar17) + uVar5;
            iVar15 = ((uint)(ushort)((ulong)uVar10 >> 0x10) - (uint)(ushort)((ulong)uVar17 >> 0x10))
                     + uVar5;
            iVar16 = ((uint)(ushort)((ulong)uVar10 >> 0x20) - (uint)(ushort)((ulong)uVar17 >> 0x20))
                     + uVar5;
            iVar18 = ((uint)(ushort)((ulong)uVar10 >> 0x30) - (uint)(ushort)((ulong)uVar17 >> 0x30))
                     + uVar5;
            auVar7[4] = (char)iVar20;
            auVar7._0_4_ = iVar23;
            auVar7[5] = (char)((uint)iVar20 >> 8);
            auVar7[6] = (char)((uint)iVar20 >> 0x10);
            auVar7[7] = (char)((uint)iVar20 >> 0x18);
            auVar7[8] = (char)iVar38;
            auVar7[9] = (char)((uint)iVar38 >> 8);
            auVar7[10] = (char)((uint)iVar38 >> 0x10);
            auVar7[0xb] = (char)((uint)iVar38 >> 0x18);
            auVar7[0xc] = (char)iVar11;
            auVar7[0xd] = (char)((uint)iVar11 >> 8);
            auVar7[0xe] = (char)((uint)iVar11 >> 0x10);
            auVar7[0xf] = (char)((uint)iVar11 >> 0x18);
            auVar45 = NEON_smin(auVar7,auVar42,4);
            sVar6 = -(ushort)(0 < iVar23);
            auVar12._4_2_ = (short)iVar15;
            auVar12._0_4_ = iVar34;
            auVar12._6_2_ = (short)((uint)iVar15 >> 0x10);
            auVar12._8_2_ = (short)iVar16;
            auVar12._10_2_ = (short)((uint)iVar16 >> 0x10);
            auVar12._12_2_ = (short)iVar18;
            auVar12._14_2_ = (short)((uint)iVar18 >> 0x10);
            auVar44 = NEON_smin(auVar12,auVar42,4);
            sVar43 = -(ushort)(0 < iVar34);
            *(ulong *)(puVar33 + 4) =
                 CONCAT17(auVar44[0xd] & (byte)((ushort)-(ushort)(0 < iVar18) >> 8),
                          CONCAT16(auVar44[0xc] & (byte)-(ushort)(0 < iVar18),
                                   CONCAT15(auVar44[9] & (byte)((ushort)-(ushort)(0 < iVar16) >> 8),
                                            CONCAT14(auVar44[8] & (byte)-(ushort)(0 < iVar16),
                                                     CONCAT13(auVar44[5] &
                                                              (byte)((ushort)-(ushort)(0 < iVar15)
                                                                    >> 8),
                                                              CONCAT12(auVar44[4] &
                                                                       (byte)-(ushort)(0 < iVar15),
                                                                       CONCAT11(auVar44[1] &
                                                                                (byte)((ushort)
                                                  sVar43 >> 8),auVar44[0] & (byte)sVar43)))))));
            *(ulong *)puVar33 =
                 CONCAT17(auVar45[0xd] & (byte)((ushort)-(ushort)(0 < iVar11) >> 8),
                          CONCAT16(auVar45[0xc] & (byte)-(ushort)(0 < iVar11),
                                   CONCAT15(auVar45[9] & (byte)((ushort)-(ushort)(0 < iVar38) >> 8),
                                            CONCAT14(auVar45[8] & (byte)-(ushort)(0 < iVar38),
                                                     CONCAT13(auVar45[5] &
                                                              (byte)((ushort)-(ushort)(0 < iVar20)
                                                                    >> 8),
                                                              CONCAT12(auVar45[4] &
                                                                       (byte)-(ushort)(0 < iVar20),
                                                                       CONCAT11(auVar45[1] &
                                                                                (byte)((ushort)sVar6
                                                                                      >> 8),
                                                                                auVar45[0] &
                                                                                (byte)sVar6)))))));
            puVar28 = puVar28 + 8;
            puVar33 = puVar33 + 8;
          } while (lVar26 != 0);
          puVar33 = puVar2;
          puVar28 = puVar3;
          if (uVar4 == 0) goto LAB_0016a824;
        }
      }
      do {
        uVar25 = uVar25 - 1;
        iVar23 = ((uint)*puVar33 - (uint)*puVar28) + uVar5;
        iVar20 = iVar23;
        if (0xfffe < iVar23) {
          iVar20 = -1;
        }
        uVar40 = (ushort)iVar20;
        if (iVar23 < 1) {
          uVar40 = 0;
        }
        *puVar33 = uVar40;
        puVar33 = puVar33 + 1;
        puVar28 = puVar28 + 1;
      } while (uVar25 != 0);
    }
  }
LAB_0016a824:
  if (param_6 == 0) goto switchD_0016a848_default;
  switch(*(undefined4 *)(this + 0x1dd0)) {
  case 1:
    FilterE2X(this);
    goto switchD_0016a848_default;
  case 2:
    break;
  case 3:
    FilterE2X(this);
    break;
  case 4:
    FilterE4X(this);
    break;
  default:
    goto switchD_0016a848_default;
  }
  FilterE4X(this);
switchD_0016a848_default:
  uVar5 = *(uint *)(this + 0x76d0);
  uVar36 = (ulong)uVar5;
  uVar40 = **(ushort **)(this + 0x140);
  if (uVar5 == 0) {
    iVar20 = 0;
    iVar23 = 0;
    lVar26 = 0;
    uVar30 = uVar40;
  }
  else {
    lVar35 = 0;
    lVar26 = 0;
    iVar23 = 0;
    iVar20 = 0;
    uVar32 = uVar40;
    uVar37 = uVar40;
    uVar29 = uVar40;
    while( true ) {
      lVar26 = lVar26 + (ulong)uVar32;
      iVar34 = (int)lVar35;
      uVar40 = uVar32;
      uVar30 = uVar29;
      iVar38 = iVar23;
      iVar11 = iVar34;
      if ((uVar32 <= uVar37) &&
         (uVar40 = uVar37, uVar30 = uVar32, iVar38 = iVar34, iVar11 = iVar20, uVar29 <= uVar32)) {
        uVar30 = uVar29;
        iVar38 = iVar23;
      }
      iVar20 = iVar11;
      iVar23 = iVar38;
      if (uVar5 <= iVar34 + 1U) break;
      uVar32 = (*(ushort **)(this + 0x140))[lVar35 + 1];
      lVar35 = lVar35 + 1;
      uVar37 = uVar40;
      uVar29 = uVar30;
    }
  }
  *(int *)(this + 0x1e0c) = iVar23;
  uVar24 = 0;
  if (uVar36 != 0) {
    uVar24 = (undefined4)(lVar26 / (long)uVar36);
  }
  __x = (0.0 - ((double)lVar26 * (double)lVar26) / (double)uVar36) / (double)(uVar5 - 1);
  dVar41 = SQRT(__x);
  *(int *)(this + 0x1e08) = iVar20;
  *(uint *)(this + 0x1df8) = (uint)uVar40;
  *(uint *)(this + 0x1dfc) = (uint)uVar30;
  *(undefined4 *)(this + 0x1e00) = uVar24;
  if (NAN(dVar41)) {
    dVar41 = sqrt(__x);
  }
  *(int *)(this + 0x1e04) = (int)dVar41;
  GrayEnlarge(this);
  if (((*(int *)(this + 0x1e24) != 0) && (*(int *)(this + 0x2c) != 0)) &&
     ((*(int *)(this + 0x28) == 0 || (*(int *)(this + 0x10) != 0)))) {
    uVar5 = *(int *)(this + 0x2c) << 3;
    if (*(int *)(this + 0x60) == 0) {
      FilterDetailEnhancement(this,uVar5);
    }
    else {
      FilterDetailEnhancement_Simple(this,uVar5);
    }
  }
  if (param_4 == 0) {
LAB_0016ab68:
    lVar26 = GetTickCount();
    *(long *)(this + 0x1e30) = lVar26 - lVar21;
    CopyState(this);
    uVar24 = 1;
    *(undefined4 *)(this + 0xec) = 1;
    pthread_mutex_unlock(__mutex);
  }
  else {
    uVar5 = *(uint *)(this + 0x1db0);
    uVar25 = *(uint *)(this + 0x1da8);
    if ((uVar5 == uVar25) && (*(int *)(this + 0x1db4) == *(int *)(this + 0x1dac))) {
      memcpy(*(void **)(this + 0xd8),*(void **)(this + 0x170),(ulong)*(uint *)(this + 0x76d0));
    }
    else if ((uVar5 == uVar25 * 2) && (*(int *)(this + 0x1db4) == *(int *)(this + 0x1dac) * 2)) {
      ResizeBMP_2X(this);
    }
    else if ((uVar5 << 1 == uVar25 * 3) &&
            (*(int *)(this + 0x1db4) << 1 == *(int *)(this + 0x1dac) * 3)) {
      ResizeBMP_2to3(this);
    }
    else if ((uVar5 * 3 == uVar25 * 5) &&
            (*(int *)(this + 0x1db4) * 3 == *(int *)(this + 0x1dac) * 5)) {
      ResizeBMP_3to5(this);
    }
    else if ((uVar25 < uVar5) && (*(uint *)(this + 0x1dac) < *(uint *)(this + 0x1db4))) {
      ResizeBMP(this);
    }
    lVar26 = GetTickCount();
    *(long *)(this + 0x1e30) = lVar26 - lVar21;
    CopyState(this);
    *(undefined4 *)(this + 0xec) = 1;
    pthread_mutex_unlock(__mutex);
    uVar24 = 3;
  }
  return uVar24;
}


==================================================================

### FUNC 0016ac44 (440 bytes) name=CopyState

/* CFunctions::CopyState() */

void __thiscall CFunctions::CopyState(CFunctions *this)

{
  CFunctions *pCVar1;
  CFunctions *pCVar2;
  CFunctions *pCVar3;
  uint uVar4;
  undefined4 uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  
  memcpy(this + 0x4a58,this + 0x1de0,0x2c78);
  *(uint *)(this + 0x4a94) =
       (uint)*(ushort *)(this + 0x1e1c) << (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  *(uint *)(this + 0x4a7c) =
       (uint)*(ushort *)(this + 0x1e04) << (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  uVar4 = ReviseTemperature(this,(ushort)*(undefined4 *)(this + 0x1e00),
                            (*(uint *)(this + 0x1da8) >> 1) + (*(uint *)(this + 0x76d0) >> 1),0);
  pCVar1 = this + 0x4a78;
  *(uint *)pCVar1 = uVar4;
  uVar5 = ReviseTemperature(this,(ushort)*(undefined4 *)(this + 0x1e14),
                            (*(uint *)(this + 0x1da8) >> 1) + (*(uint *)(this + 0x76d0) >> 1),0);
  *(undefined4 *)(this + 0x4a8c) = uVar5;
  uVar4 = ReviseTemperature(this,(ushort)*(undefined4 *)(this + 0x1df8),*(uint *)(this + 0x4a80),1);
  pCVar2 = this + 0x4a70;
  *(uint *)pCVar2 = uVar4;
  uVar5 = ReviseTemperature(this,(ushort)*(undefined4 *)(this + 0x1e18),
                            (*(uint *)(this + 0x1da8) >> 1) + (*(uint *)(this + 0x76d0) >> 1),0);
  *(undefined4 *)(this + 0x4a90) = uVar5;
  uVar4 = ReviseTemperature(this,(ushort)*(undefined4 *)(this + 0x1dfc),*(uint *)(this + 0x4a84),1);
  pCVar3 = this + 0x4a74;
  *(uint *)pCVar3 = uVar4;
  if (*(int *)(this + 0x58) == 0) {
    uVar7 = *(uint *)pCVar2;
    if ((int)uVar4 <= (int)uVar7) goto LAB_0016adbc;
  }
  else {
    iVar6 = (int)this;
    uVar4 = CorrectTemperature(iVar6,*(float *)(this + 0xac),*(uint *)pCVar1);
    *(uint *)pCVar1 = uVar4;
    uVar4 = CorrectTemperature(iVar6,*(float *)(this + 0xac),*(uint *)pCVar3);
    *(uint *)pCVar3 = uVar4;
    uVar7 = CorrectTemperature(iVar6,*(float *)(this + 0xac),*(uint *)pCVar2);
    *(uint *)pCVar2 = uVar7;
    uVar4 = *(uint *)pCVar3;
    if ((int)uVar4 <= (int)uVar7) goto LAB_0016adbc;
  }
  uVar7 = uVar4;
  *(uint *)pCVar2 = uVar7;
  uVar4 = uVar7;
LAB_0016adbc:
  uVar8 = *(uint *)pCVar1;
  if ((int)uVar7 < (int)*(uint *)pCVar1) {
    *(uint *)pCVar1 = uVar7;
    uVar8 = uVar7;
  }
  if ((int)uVar8 < (int)uVar4) {
    *(uint *)pCVar1 = uVar4;
  }
  return;
}


==================================================================

### FUNC 0016adfc (252 bytes) name=Rotate

/* CFunctions::Rotate(unsigned int) */

void __thiscall CFunctions::Rotate(CFunctions *this,uint param_1)

{
  undefined2 *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  undefined2 *puVar5;
  int iVar6;
  undefined2 *puVar7;
  ulong uVar8;
  long lVar9;
  undefined2 *puVar10;
  undefined2 *puVar11;
  int iVar12;
  
  if (param_1 == 1) {
    memcpy(*(void **)(this + 0x168),*(void **)(this + 0x140),(ulong)*(uint *)(this + 0x76d0) << 1);
    iVar6 = *(int *)(this + 0x1da8);
    if (iVar6 != 0) {
      uVar3 = *(uint *)(this + 0x1dac);
      puVar7 = *(undefined2 **)(this + 0x168);
      uVar2 = uVar3 + 3;
      if (-1 < (int)uVar3) {
        uVar2 = uVar3;
      }
      iVar4 = uVar3 * iVar6;
      puVar10 = (undefined2 *)(*(long *)(this + 0x140) + (long)(int)((uVar3 - 1) * iVar6) * 2);
      uVar8 = (ulong)(((int)uVar2 >> 2) - 1);
      lVar9 = (long)iVar6;
      do {
        puVar11 = puVar10;
        if (6 < uVar3 + 3) {
          puVar11 = (undefined2 *)((long)puVar10 + (uVar8 * -8 + -8) * lVar9);
          puVar5 = puVar7;
          iVar12 = (int)uVar2 >> 2;
          do {
            iVar12 = iVar12 + -1;
            *puVar10 = *puVar5;
            puVar10 = puVar10 + -lVar9;
            *puVar10 = puVar5[1];
            puVar10 = puVar10 + -lVar9;
            *puVar10 = puVar5[2];
            puVar1 = puVar5 + 3;
            puVar5 = puVar5 + 4;
            puVar10[-lVar9] = *puVar1;
            puVar10 = puVar10 + -lVar9 + -lVar9;
          } while (iVar12 != 0);
          puVar7 = puVar7 + uVar8 * 4 + 4;
        }
        iVar6 = iVar6 + -1;
        puVar10 = puVar11 + (iVar4 + 1);
      } while (iVar6 != 0);
    }
  }
  return;
}


==================================================================

### FUNC 0016aef8 (376 bytes) name=Mirror

/* CFunctions::Mirror(unsigned int) */

void __thiscall CFunctions::Mirror(CFunctions *this,uint param_1)

{
  bool bVar1;
  void *__src;
  void *__src_00;
  uint uVar2;
  int iVar3;
  long lVar4;
  uint *puVar5;
  uint *puVar6;
  uint *puVar7;
  int iVar8;
  size_t __n;
  int iVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  ulong uVar13;
  undefined1 auStack_868 [2048];
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  iVar3 = *(int *)(this + 0x1da8);
  lVar10 = (long)iVar3;
  iVar8 = *(int *)(this + 0x1dac);
  if (((param_1 >> 1 & 1) != 0) && (1 < iVar8)) {
    iVar9 = iVar8;
    if (iVar8 < 0) {
      iVar9 = iVar8 + 1;
    }
    lVar12 = 0;
    __n = lVar10 * 2;
    uVar13 = (ulong)(uint)(iVar9 >> 1);
    iVar9 = iVar3 * (iVar8 + -1);
    do {
      __src_00 = (void *)(*(long *)(this + 0x140) + lVar12);
      __src = (void *)(*(long *)(this + 0x140) + (long)iVar9 * 2);
      memcpy(auStack_868,__src_00,__n);
      memcpy(__src_00,__src,__n);
      memcpy(__src,auStack_868,__n);
      iVar9 = iVar9 - iVar3;
      uVar13 = uVar13 - 1;
      lVar12 = lVar12 + __n;
    } while (uVar13 != 0);
  }
  if (((param_1 & 1) != 0) && (0 < iVar8)) {
    lVar12 = *(long *)(this + 0x140);
    iVar9 = iVar3 + 3;
    if (-1 < iVar3) {
      iVar9 = iVar3;
    }
    puVar5 = (uint *)(lVar12 + (((long)iVar8 + -1) * lVar10 + (long)((iVar9 >> 2) << 1) * 2) * 2 +
                     -4);
    lVar11 = (long)iVar8;
    do {
      if (6 < iVar3 + 3U) {
        puVar6 = (uint *)(lVar12 + (lVar11 + -1) * lVar10 * 2);
        puVar7 = puVar5;
        iVar8 = iVar9 >> 2;
        do {
          uVar2 = *puVar7;
          iVar8 = iVar8 + -1;
          *puVar7 = *puVar6 >> 0x10 | *puVar6 << 0x10;
          *puVar6 = uVar2 >> 0x10 | uVar2 << 0x10;
          puVar6 = puVar6 + 1;
          puVar7 = puVar7 + -1;
        } while (iVar8 != 0);
      }
      puVar5 = (uint *)((long)puVar5 + lVar10 * -2);
      bVar1 = 1 < lVar11;
      lVar11 = lVar11 + -1;
    } while (bVar1);
  }
  if (*(long *)(lVar4 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0016b070 (160 bytes) name=FindMaxTemperature

/* CFunctions::FindMaxTemperature() */

void __thiscall CFunctions::FindMaxTemperature(CFunctions *this)

{
  undefined1 (*pauVar1) [16];
  ulong uVar2;
  uint uVar3;
  int iVar4;
  undefined1 auVar5 [16];
  ushort uVar6;
  int iVar7;
  ushort *puVar8;
  undefined1 (*pauVar9) [16];
  long lVar10;
  ushort *puVar11;
  ushort uVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  puVar11 = *(ushort **)(this + 0x140);
  iVar4 = *(int *)(this + 0x76d0);
  uVar12 = *puVar11;
  if ((iVar4 != 0) && (iVar7 = iVar4 + -1, iVar7 != 0)) {
    uVar2 = (ulong)(iVar4 - 2) + 1;
    puVar8 = puVar11 + 1;
    if (0xf < uVar2) {
      uVar3 = iVar4 + 0xfU & 0xf;
      lVar10 = uVar2 - uVar3;
      if (lVar10 != 0) {
        auVar13._0_8_ = CONCAT26(uVar12,CONCAT24(uVar12,CONCAT22(uVar12,uVar12)));
        auVar13._8_2_ = uVar12;
        auVar13._10_2_ = uVar12;
        auVar13._12_2_ = uVar12;
        auVar13._14_2_ = uVar12;
        iVar7 = iVar7 - (int)lVar10;
        puVar8 = puVar8 + lVar10;
        pauVar9 = (undefined1 (*) [16])(puVar11 + 9);
        auVar14._8_8_ = auVar13._8_8_;
        auVar14._0_8_ = auVar13._0_8_;
        do {
          pauVar1 = pauVar9 + -1;
          auVar5 = *pauVar9;
          lVar10 = lVar10 + -0x10;
          pauVar9 = pauVar9 + 2;
          auVar13 = NEON_umax(auVar13,*pauVar1,2);
          auVar14 = NEON_umax(auVar14,auVar5,2);
        } while (lVar10 != 0);
        auVar13 = NEON_umax(auVar13,auVar14,2);
        uVar12 = NEON_umaxv(auVar13,2);
        if (uVar3 == 0) goto LAB_0016b104;
      }
    }
    do {
      iVar7 = iVar7 + -1;
      uVar6 = *puVar8;
      if (*puVar8 <= uVar12) {
        uVar6 = uVar12;
      }
      uVar12 = uVar6;
      puVar8 = puVar8 + 1;
    } while (iVar7 != 0);
  }
LAB_0016b104:
  *(uint *)(this + 0x1df8) = (uint)uVar12;
  return;
}


==================================================================

### FUNC 0016b110 (28 bytes) name=ConvertDeltamC2InnerTemp

/* CFunctions::ConvertDeltamC2InnerTemp(unsigned int) const */

uint __thiscall CFunctions::ConvertDeltamC2InnerTemp(CFunctions *this,uint param_1)

{
  uint uVar1;
  
  uVar1 = param_1 >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  if (0xfffe < uVar1) {
    uVar1 = 0xffff;
  }
  return uVar1;
}


==================================================================

### FUNC 0016b12c (284 bytes) name=SubMask

/* CFunctions::SubMask() */

void __thiscall CFunctions::SubMask(CFunctions *this)

{
  int iVar1;
  ushort *puVar2;
  ushort *puVar3;
  uint uVar4;
  uint uVar5;
  ushort uVar6;
  undefined1 auVar8 [16];
  short sVar9;
  undefined8 uVar10;
  int iVar11;
  undefined8 uVar12;
  int iVar13;
  undefined1 auVar14 [16];
  int iVar15;
  undefined8 uVar16;
  int iVar17;
  int iVar18;
  undefined8 uVar19;
  int iVar20;
  uint uVar21;
  ulong uVar22;
  ushort *puVar23;
  ushort *puVar24;
  long lVar25;
  short sVar26;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  int iVar7;
  
  uVar21 = *(uint *)(this + 0x76d0);
  uVar5 = -*(int *)(this + 0x76e0) >> (*(uint *)(this + 0x76e4) & 0x1f);
  uVar5 = uVar5 & ((int)uVar5 >> 0x1f ^ 0xffffffffU);
  if (0xfffe < (int)uVar5) {
    uVar5 = 0xffff;
  }
  if (uVar21 != 0) {
    puVar24 = *(ushort **)(this + 0x140);
    puVar23 = *(ushort **)(this + 0x158);
    uVar22 = (ulong)(uVar21 - 1);
    if (7 < uVar22 + 1) {
      uVar4 = uVar21 & 7;
      lVar25 = (uVar22 + 1) - (ulong)uVar4;
      if ((lVar25 != 0) && ((puVar23 + uVar22 + 1 <= puVar24 || (puVar24 + uVar22 + 1 <= puVar23))))
      {
        uVar21 = uVar21 - (int)lVar25;
        puVar2 = puVar24 + lVar25;
        puVar3 = puVar23 + lVar25;
        do {
          uVar12 = *(undefined8 *)(puVar24 + 4);
          uVar10 = *(undefined8 *)puVar24;
          uVar19 = *(undefined8 *)(puVar23 + 4);
          uVar16 = *(undefined8 *)puVar23;
          lVar25 = lVar25 + -8;
          iVar1 = ((uint)(ushort)uVar10 - (uint)(ushort)uVar16) + uVar5;
          iVar7 = ((uint)(ushort)((ulong)uVar10 >> 0x10) - (uint)(ushort)((ulong)uVar16 >> 0x10)) +
                  uVar5;
          iVar11 = ((uint)(ushort)((ulong)uVar10 >> 0x20) - (uint)(ushort)((ulong)uVar16 >> 0x20)) +
                   uVar5;
          iVar13 = ((uint)(ushort)((ulong)uVar10 >> 0x30) - (uint)(ushort)((ulong)uVar16 >> 0x30)) +
                   uVar5;
          iVar15 = ((uint)(ushort)uVar12 - (uint)(ushort)uVar19) + uVar5;
          iVar17 = ((uint)(ushort)((ulong)uVar12 >> 0x10) - (uint)(ushort)((ulong)uVar19 >> 0x10)) +
                   uVar5;
          iVar18 = ((uint)(ushort)((ulong)uVar12 >> 0x20) - (uint)(ushort)((ulong)uVar19 >> 0x20)) +
                   uVar5;
          iVar20 = ((uint)(ushort)((ulong)uVar12 >> 0x30) - (uint)(ushort)((ulong)uVar19 >> 0x30)) +
                   uVar5;
          auVar27._8_8_ = 0xffff0000ffff;
          auVar27._0_8_ = 0xffff0000ffff;
          auVar28[4] = (char)iVar7;
          auVar28._0_4_ = iVar1;
          auVar28[5] = (char)((uint)iVar7 >> 8);
          auVar28[6] = (char)((uint)iVar7 >> 0x10);
          auVar28[7] = (char)((uint)iVar7 >> 0x18);
          auVar28[8] = (char)iVar11;
          auVar28[9] = (char)((uint)iVar11 >> 8);
          auVar28[10] = (char)((uint)iVar11 >> 0x10);
          auVar28[0xb] = (char)((uint)iVar11 >> 0x18);
          auVar28[0xc] = (char)iVar13;
          auVar28[0xd] = (char)((uint)iVar13 >> 8);
          auVar28[0xe] = (char)((uint)iVar13 >> 0x10);
          auVar28[0xf] = (char)((uint)iVar13 >> 0x18);
          auVar28 = NEON_smin(auVar28,auVar27,4);
          sVar9 = -(ushort)(0 < iVar1);
          auVar8._8_8_ = 0xffff0000ffff;
          auVar8._0_8_ = 0xffff0000ffff;
          auVar14._4_2_ = (short)iVar17;
          auVar14._0_4_ = iVar15;
          auVar14._6_2_ = (short)((uint)iVar17 >> 0x10);
          auVar14._8_2_ = (short)iVar18;
          auVar14._10_2_ = (short)((uint)iVar18 >> 0x10);
          auVar14._12_2_ = (short)iVar20;
          auVar14._14_2_ = (short)((uint)iVar20 >> 0x10);
          auVar27 = NEON_smin(auVar14,auVar8,4);
          sVar26 = -(ushort)(0 < iVar15);
          *(ulong *)(puVar24 + 4) =
               CONCAT17(auVar27[0xd] & (byte)((ushort)-(ushort)(0 < iVar20) >> 8),
                        CONCAT16(auVar27[0xc] & (byte)-(ushort)(0 < iVar20),
                                 CONCAT15(auVar27[9] & (byte)((ushort)-(ushort)(0 < iVar18) >> 8),
                                          CONCAT14(auVar27[8] & (byte)-(ushort)(0 < iVar18),
                                                   CONCAT13(auVar27[5] &
                                                            (byte)((ushort)-(ushort)(0 < iVar17) >>
                                                                  8),CONCAT12(auVar27[4] &
                                                                              (byte)-(ushort)(0 < 
                                                  iVar17),CONCAT11(auVar27[1] &
                                                                   (byte)((ushort)sVar26 >> 8),
                                                                   auVar27[0] & (byte)sVar26)))))));
          *(ulong *)puVar24 =
               CONCAT17(auVar28[0xd] & (byte)((ushort)-(ushort)(0 < iVar13) >> 8),
                        CONCAT16(auVar28[0xc] & (byte)-(ushort)(0 < iVar13),
                                 CONCAT15(auVar28[9] & (byte)((ushort)-(ushort)(0 < iVar11) >> 8),
                                          CONCAT14(auVar28[8] & (byte)-(ushort)(0 < iVar11),
                                                   CONCAT13(auVar28[5] &
                                                            (byte)((ushort)-(ushort)(0 < iVar7) >> 8
                                                                  ),CONCAT12(auVar28[4] &
                                                                             (byte)-(ushort)(0 < 
                                                  iVar7),CONCAT11(auVar28[1] &
                                                                  (byte)((ushort)sVar9 >> 8),
                                                                  auVar28[0] & (byte)sVar9)))))));
          puVar23 = puVar23 + 8;
          puVar24 = puVar24 + 8;
        } while (lVar25 != 0);
        puVar24 = puVar2;
        puVar23 = puVar3;
        if (uVar4 == 0) {
          return;
        }
      }
    }
    do {
      uVar21 = uVar21 - 1;
      iVar1 = ((uint)*puVar24 - (uint)*puVar23) + uVar5;
      iVar7 = iVar1;
      if (0xfffe < iVar1) {
        iVar7 = -1;
      }
      uVar6 = (ushort)iVar7;
      if (iVar1 < 1) {
        uVar6 = 0;
      }
      *puVar24 = uVar6;
      puVar24 = puVar24 + 1;
      puVar23 = puVar23 + 1;
    } while (uVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 0016b248 (368 bytes) name=FilterE2X

/* CFunctions::FilterE2X() */

void __thiscall CFunctions::FilterE2X(CFunctions *this)

{
  uint uVar1;
  ushort uVar2;
  uint *puVar3;
  uint *puVar4;
  ushort *puVar5;
  ulong uVar6;
  uint uVar7;
  ushort *puVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  void *__dest;
  void *__src;
  uint uVar12;
  
  uVar6 = (ulong)*(uint *)(this + 0x1da8);
  __dest = *(void **)(this + 0x168);
  __src = (void *)(*(long *)(this + 0x140) +
                   (ulong)(*(uint *)(this + 0x1da8) * *(int *)(this + 0x1dd8)) * 2 +
                  (ulong)*(uint *)(this + 0x1dd4) * 2);
  uVar12 = *(uint *)(this + 0x1dac) >> 1 ^ 0xffffffff;
  do {
    memcpy(__dest,__src,(ulong)((int)(uVar6 >> 1) + 2) << 1);
    uVar7 = *(uint *)(this + 0x1da8);
    uVar6 = (ulong)uVar7;
    uVar12 = uVar12 + 1;
    __src = (void *)((long)__src + uVar6 * 2);
    __dest = (void *)((long)__dest + (ulong)((uVar7 >> 1) + 2) * 2);
  } while (uVar12 != 0);
  uVar12 = *(uint *)(this + 0x1dac) >> 1;
  if (uVar12 != 0) {
    puVar3 = *(uint **)(this + 0x140);
    puVar5 = *(ushort **)(this + 0x168);
    while( true ) {
      uVar7 = uVar7 >> 1;
      if (uVar7 != 0) {
        iVar10 = -uVar7;
        puVar4 = puVar3;
        puVar8 = puVar5;
        uVar11 = (uint)*puVar5;
        do {
          puVar8 = puVar8 + 1;
          uVar2 = *puVar8;
          iVar10 = iVar10 + 1;
          *puVar4 = uVar11 | (uVar2 + uVar11 >> 1) << 0x10;
          puVar4 = puVar4 + 1;
          uVar11 = (uint)uVar2;
        } while (iVar10 != 0);
        uVar6 = (ulong)*(uint *)(this + 0x1da8);
        puVar5 = puVar5 + (ulong)(uVar7 - 1) + 1;
        puVar3 = puVar3 + (ulong)(uVar7 - 1) + 1;
      }
      uVar6 = uVar6 >> 1;
      puVar8 = puVar5 + -uVar6;
      iVar10 = (int)uVar6;
      if (iVar10 != 0) {
        uVar7 = (uint)*puVar8;
        uVar11 = (uint)puVar5[2];
        iVar9 = -iVar10;
        puVar4 = puVar3;
        puVar8 = puVar5;
        do {
          uVar1 = uVar11 + uVar7;
          uVar7 = (uint)puVar8[1 - uVar6];
          uVar11 = (uint)puVar8[3];
          iVar9 = iVar9 + 1;
          *puVar4 = uVar1 >> 1 | (uVar1 + uVar7 + uVar11 >> 2) << 0x10;
          puVar8 = puVar8 + 1;
          puVar4 = puVar4 + 1;
        } while (iVar9 != 0);
        puVar8 = puVar5 + ((iVar10 - 1) - uVar6) + 1;
        puVar3 = puVar3 + (ulong)(iVar10 - 1) + 1;
      }
      uVar12 = uVar12 - 1;
      if (uVar12 == 0) break;
      uVar7 = *(uint *)(this + 0x1da8);
      uVar6 = (ulong)uVar7;
      puVar5 = puVar8 + 2;
    }
  }
  return;
}


==================================================================

### FUNC 0016b3b8 (832 bytes) name=FilterE4X

/* CFunctions::FilterE4X() */

void __thiscall CFunctions::FilterE4X(CFunctions *this)

{
  int iVar1;
  int iVar2;
  ushort uVar3;
  ulong uVar4;
  int iVar5;
  int iVar6;
  uint *puVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  int iVar14;
  int iVar15;
  uint *puVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  void *__dest;
  void *__src;
  uint uVar20;
  
  uVar13 = (ulong)*(uint *)(this + 0x1da8);
  __dest = *(void **)(this + 0x168);
  __src = (void *)(*(long *)(this + 0x140) +
                   (ulong)(*(uint *)(this + 0x1da8) * *(int *)(this + 0x1dd8)) * 2 +
                  (ulong)*(uint *)(this + 0x1dd4) * 2);
  uVar20 = *(uint *)(this + 0x1dac) >> 2 ^ 0xffffffff;
  do {
    memcpy(__dest,__src,(ulong)(((uint)(uVar13 >> 1) & 0x7ffffffe) + 4));
    uVar11 = *(uint *)(this + 0x1da8);
    uVar13 = (ulong)uVar11;
    uVar20 = uVar20 + 1;
    __src = (void *)((long)__src + uVar13 * 2);
    __dest = (void *)((long)__dest + (ulong)((uVar11 >> 2) + 2) * 2);
  } while (uVar20 != 0);
  uVar20 = *(uint *)(this + 0x1dac) >> 2;
  if (uVar20 != 0) {
    puVar7 = *(uint **)(this + 0x140);
    puVar8 = *(ushort **)(this + 0x168);
    while( true ) {
      uVar11 = uVar11 >> 2;
      if (uVar11 != 0) {
        puVar10 = puVar8 + 1;
        uVar3 = *puVar8;
        iVar15 = -uVar11;
        puVar8 = puVar10 + (uVar11 - 1);
        puVar16 = puVar7;
        uVar19 = (uint)uVar3;
        do {
          uVar3 = *puVar10;
          iVar15 = iVar15 + 1;
          uVar12 = (uint)uVar3;
          *puVar16 = uVar19 | (uVar19 * 3 + (uint)uVar3 >> 2) << 0x10;
          puVar16[1] = uVar12 + uVar19 >> 1 | (uVar12 + (uint)uVar3 * 2 + uVar19 >> 2) << 0x10;
          puVar10 = puVar10 + 1;
          puVar16 = puVar16 + 2;
          uVar19 = uVar12;
        } while (iVar15 != 0);
        uVar13 = (ulong)*(uint *)(this + 0x1da8);
        puVar7 = puVar7 + (ulong)(uVar11 - 1) * 2 + 2;
      }
      uVar4 = uVar13 >> 2;
      puVar10 = puVar8 + -uVar4;
      iVar15 = (int)uVar4;
      if (iVar15 != 0) {
        uVar3 = *puVar10;
        iVar14 = -iVar15;
        puVar10 = puVar8 + ((iVar15 - 1) - uVar4) + 1;
        puVar16 = puVar7;
        uVar11 = (uint)uVar3;
        uVar19 = (uint)puVar8[2];
        do {
          uVar17 = (uint)puVar8[3];
          uVar12 = (uint)puVar8[1 - uVar4];
          puVar8 = puVar8 + 1;
          iVar14 = iVar14 + 1;
          *puVar16 = (uVar11 * 9 + uVar17 + (uVar12 + uVar19) * 3) * 0x1000 & 0xffff0000 |
                     uVar11 * 3 + uVar19 >> 2;
          puVar16[1] = (uVar12 * 9 + uVar19 + (uVar17 + uVar11) * 3) * 0x1000 & 0xffff0000 |
                       (uVar12 + uVar11) * 3 + uVar19 + uVar17 >> 3;
          puVar16 = puVar16 + 2;
          uVar11 = uVar12;
          uVar19 = uVar17;
        } while (iVar14 != 0);
        uVar13 = (ulong)*(uint *)(this + 0x1da8);
        puVar7 = puVar7 + (ulong)(iVar15 - 1) * 2 + 2;
      }
      uVar4 = uVar13 >> 2;
      puVar9 = puVar10 + -uVar4;
      iVar15 = (int)uVar4;
      if (iVar15 != 0) {
        uVar3 = *puVar9;
        iVar14 = -iVar15;
        puVar9 = puVar10 + ((iVar15 - 1) - uVar4) + 1;
        puVar16 = puVar7;
        uVar11 = (uint)uVar3;
        uVar19 = (uint)puVar10[2];
        do {
          uVar18 = (uint)puVar10[1 - uVar4];
          uVar17 = (uint)puVar10[3];
          uVar12 = uVar19 + uVar11;
          puVar10 = puVar10 + 1;
          iVar14 = iVar14 + 1;
          *puVar16 = uVar12 >> 1 | (uVar12 * 3 + uVar18 + uVar17 >> 3) << 0x10;
          puVar16[1] = (uVar12 + (uVar17 + uVar18) * 3) * 0x2000 & 0xffff0000 |
                       uVar18 + uVar11 + uVar19 + uVar17 >> 2;
          puVar16 = puVar16 + 2;
          uVar11 = uVar18;
          uVar19 = uVar17;
        } while (iVar14 != 0);
        uVar13 = (ulong)*(uint *)(this + 0x1da8);
        puVar7 = puVar7 + (ulong)(iVar15 - 1) * 2 + 2;
      }
      uVar13 = uVar13 >> 2;
      puVar8 = puVar9 + -uVar13;
      iVar15 = (int)uVar13;
      if (iVar15 != 0) {
        uVar3 = *puVar8;
        uVar19 = (uint)puVar9[2];
        iVar14 = -iVar15;
        puVar8 = puVar9 + ((iVar15 - 1) - uVar13) + 1;
        puVar16 = puVar7;
        uVar11 = (uint)uVar3;
        do {
          uVar3 = puVar9[3];
          uVar12 = (uint)puVar9[1 - uVar13];
          iVar6 = uVar19 * 3;
          iVar5 = uVar19 * 9;
          iVar1 = uVar3 + uVar19;
          iVar2 = uVar19 + uVar12;
          uVar19 = (uint)uVar3;
          iVar14 = iVar14 + 1;
          puVar9 = puVar9 + 1;
          *puVar16 = (iVar5 + uVar12 + (uVar3 + uVar11) * 3) * 0x1000 & 0xffff0000 |
                     iVar6 + uVar11 >> 2;
          puVar16[1] = (iVar2 * 3 + uVar11 + uVar19 * 9) * 0x1000 & 0xffff0000 |
                       uVar12 + uVar11 + iVar1 * 3 >> 3;
          puVar16 = puVar16 + 2;
          uVar11 = uVar12;
        } while (iVar14 != 0);
        puVar7 = puVar7 + (ulong)(iVar15 - 1) * 2 + 2;
      }
      uVar20 = uVar20 - 1;
      if (uVar20 == 0) break;
      uVar11 = *(uint *)(this + 0x1da8);
      uVar13 = (ulong)uVar11;
      puVar8 = puVar8 + 2;
    }
  }
  return;
}


==================================================================

### FUNC 0016b6f8 (260 bytes) name=TempRangeStat

/* CFunctions::TempRangeStat(unsigned short const*) */

void __thiscall CFunctions::TempRangeStat(CFunctions *this,ushort *param_1)

{
  uint uVar1;
  undefined4 uVar2;
  int iVar3;
  int iVar4;
  ulong uVar5;
  long lVar6;
  int iVar7;
  int iVar8;
  ushort uVar9;
  ushort uVar10;
  ushort uVar11;
  ushort uVar12;
  int iVar13;
  long lVar14;
  ushort uVar15;
  double dVar16;
  double __x;
  
  uVar1 = *(uint *)(this + 0x76d0);
  uVar5 = (ulong)uVar1;
  uVar12 = *param_1;
  if (uVar1 == 0) {
    iVar8 = 0;
    iVar7 = 0;
    lVar6 = 0;
    uVar10 = uVar12;
  }
  else {
    lVar14 = 0;
    lVar6 = 0;
    iVar7 = 0;
    iVar8 = 0;
    uVar11 = uVar12;
    uVar15 = uVar12;
    uVar9 = uVar12;
    while( true ) {
      lVar6 = lVar6 + (ulong)uVar11;
      iVar13 = (int)lVar14;
      uVar12 = uVar11;
      uVar10 = uVar9;
      iVar3 = iVar7;
      iVar4 = iVar13;
      if ((uVar11 <= uVar15) &&
         (uVar12 = uVar15, uVar10 = uVar11, iVar3 = iVar13, iVar4 = iVar8, uVar9 <= uVar11)) {
        uVar10 = uVar9;
        iVar3 = iVar7;
      }
      iVar8 = iVar4;
      iVar7 = iVar3;
      if (uVar1 <= iVar13 + 1U) break;
      uVar11 = param_1[lVar14 + 1];
      lVar14 = lVar14 + 1;
      uVar15 = uVar12;
      uVar9 = uVar10;
    }
  }
  *(int *)(this + 0x1e0c) = iVar7;
  uVar2 = 0;
  if (uVar5 != 0) {
    uVar2 = (undefined4)(lVar6 / (long)uVar5);
  }
  __x = (0.0 - ((double)lVar6 * (double)lVar6) / (double)uVar5) / (double)(uVar1 - 1);
  dVar16 = SQRT(__x);
  *(int *)(this + 0x1e08) = iVar8;
  *(uint *)(this + 0x1df8) = (uint)uVar12;
  *(uint *)(this + 0x1dfc) = (uint)uVar10;
  *(undefined4 *)(this + 0x1e00) = uVar2;
  if (NAN(dVar16)) {
    dVar16 = sqrt(__x);
  }
  *(int *)(this + 0x1e04) = (int)dVar16;
  return;
}


==================================================================

### FUNC 0016b7fc (720 bytes) name=GrayEnlarge

/* CFunctions::GrayEnlarge() */

void __thiscall CFunctions::GrayEnlarge(CFunctions *this)

{
  CFunctions *pCVar1;
  int iVar2;
  uint uVar3;
  undefined4 uVar4;
  long lVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  
  iVar6 = *(int *)(this + 0x1dfc);
  if (iVar6 == *(int *)(this + 0x1df8)) {
    *(int *)(this + 0x1e18) = iVar6;
    *(int *)(this + 0x1e14) = iVar6;
    memset(this + 0x2638,0x80,0x400);
    memset(*(void **)(this + 0x170),0x80,(ulong)*(uint *)(this + 0x76d0));
    memset(this + 0x1e38,0,0x400);
    *(undefined4 *)(this + 0x2038) = *(undefined4 *)(this + 0x76d0);
    memset(*(void **)(this + 0x180),0x80,(ulong)*(uint *)(this + 0x76d8));
    *(undefined4 *)(this + 0x1e24) = 1;
    return;
  }
  if (*(int *)(this + 0x10) != 0) {
    SubSectionEnlarge(this);
    if (*(int *)(this + 0x4a3c) != 0) {
      pCVar1 = this + 0x188;
      memcpy(this + 0x5b0,pCVar1,0x400);
      memcpy(this + 0x9d8,pCVar1,0x400);
      memcpy(this + 0xe00,pCVar1,0x400);
      *(int *)(this + 0x4a3c) = 0;
    }
    goto LAB_0016bab8;
  }
  if (*(int *)(this + 100) == 0) {
    lVar5 = 0x1e00;
  }
  else {
    SearchSeparateLine(this);
    lVar5 = 0x4a44;
  }
  iVar6 = *(int *)(this + 0x34);
  uVar7 = (uint)(*(int *)(this + 0x24) * 1000) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  if (0xfffe < uVar7) {
    uVar7 = 0xffff;
  }
  iVar8 = iVar6;
  if (iVar6 < -99) {
    iVar8 = -100;
  }
  iVar2 = iVar6;
  if (99 < iVar6) {
    iVar2 = 100;
  }
  if (iVar6 < 0) {
    iVar2 = iVar8;
  }
  iVar6 = (iVar6 >> 0x1f & 0xffffff9cU) + 0x96;
  iVar8 = 0;
  if (iVar6 != 0) {
    iVar8 = (int)(uVar7 * iVar2) / iVar6;
  }
  uVar7 = uVar7 - iVar8;
  if ((*(int *)(this + 0x1200) != 0) && (0.0 < *(float *)(this + 0x74))) {
    if (*(int *)(this + 0x1310) == 2) {
      iVar6 = *(int *)(this + 0x1320);
      iVar8 = *(int *)(this + 0x131c);
      if (iVar6 - iVar8 == 50000) goto LAB_0016b9c0;
    }
    else if (*(int *)(this + 0x1310) == 1) {
      iVar6 = *(int *)(this + 0x1320);
      iVar8 = *(int *)(this + 0x131c);
LAB_0016b9c0:
      iVar6 = iVar6 + iVar8;
      if (iVar6 < 0) {
        iVar6 = iVar6 + 1;
      }
      uVar7 = uVar7 + (int)((*(float *)(this + 0x74) *
                            (float)(int)((*(int *)(this + 0x3c) - (iVar6 >> 1)) * uVar7)) /
                           DAT_004394f4);
    }
  }
  if ((int)uVar7 < 0x81) {
    uVar7 = 0x80;
  }
  uVar3 = *(int *)(this + lVar5) - (uVar7 >> 1);
  uVar7 = (uVar7 >> 1) + *(int *)(this + lVar5);
  if (*(uint *)(this + 0x1dfc) <= uVar3) {
    uVar3 = *(uint *)(this + 0x1dfc);
  }
  if (uVar7 <= *(uint *)(this + 0x1df8)) {
    uVar7 = *(uint *)(this + 0x1df8);
  }
  *(uint *)(this + 0x1e18) = uVar3;
  *(uint *)(this + 0x1e14) = uVar7;
  if ((int)uVar3 < 0) {
    *(undefined4 *)(this + 0x1e18) = 0;
  }
  if (0xffff < (int)uVar7) {
    *(undefined4 *)(this + 0x1e14) = 0xffff;
  }
  HistDeRedundance(this);
  if (*(int *)(this + 0x28) == 0) {
    if (*(int *)(this + 0x4a3c) == 0) goto LAB_0016bab8;
    pCVar1 = this + 0x188;
    memcpy(this + 0x5b0,pCVar1,0x400);
    memcpy(this + 0x9d8,pCVar1,0x400);
    memcpy(this + 0xe00,pCVar1,0x400);
    uVar4 = 0;
  }
  else {
    IsothermalPalette(this);
    uVar4 = 1;
  }
  *(undefined4 *)(this + 0x4a3c) = uVar4;
LAB_0016bab8:
  MapTemperature((int)this);
  return;
}


==================================================================

### FUNC 0016bacc (476 bytes) name=FilterDetailEnhancement_Simple

/* CFunctions::FilterDetailEnhancement_Simple(unsigned int) */

void __thiscall CFunctions::FilterDetailEnhancement_Simple(CFunctions *this,uint param_1)

{
  int iVar1;
  int *piVar2;
  ushort *puVar3;
  int iVar4;
  byte *pbVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  
  if (param_1 != 0) {
    uVar6 = (uint)(*(int *)(this + 0x24) * 1000) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
    if (0xfffe < uVar6) {
      uVar6 = 0xffff;
    }
    uVar7 = 0;
    uVar6 = param_1 * uVar6 >> 7 & 0xffffff;
    do {
      iVar4 = *(int *)(this + 0x1da8);
      if (iVar4 != 6) {
        iVar8 = 6 - iVar4;
        piVar2 = (int *)(*(long *)(this + 0x178) + (ulong)(iVar4 * (uVar7 + 3)) * 4 + 0xc);
        puVar3 = (ushort *)(*(long *)(this + 0x140) + (ulong)(iVar4 * uVar7) * 2);
        do {
          LocalMap7x7_Simple(this,piVar2,puVar3,uVar6);
          iVar8 = iVar8 + 1;
          piVar2 = piVar2 + 1;
          puVar3 = puVar3 + 1;
        } while (iVar8 != 0);
      }
      iVar4 = *(int *)(this + 0x1dac);
      uVar7 = uVar7 + 2;
    } while (uVar7 <= iVar4 - 7U);
    if (iVar4 != 7) {
      uVar7 = 1;
      do {
        iVar8 = *(int *)(this + 0x1da8);
        if (iVar8 != 6) {
          iVar4 = 6 - iVar8;
          piVar2 = (int *)(*(long *)(this + 0x178) + (ulong)(iVar8 * (uVar7 + 3)) * 4 + 0xc);
          puVar3 = (ushort *)(*(long *)(this + 0x140) + (ulong)(iVar8 * uVar7) * 2);
          do {
            LocalMap7x7_Simple(this,piVar2,puVar3,uVar6);
            iVar4 = iVar4 + 1;
            piVar2 = piVar2 + 1;
            puVar3 = puVar3 + 1;
          } while (iVar4 != 0);
          iVar4 = *(int *)(this + 0x1dac);
        }
        uVar7 = uVar7 + 2;
      } while (uVar7 <= iVar4 - 7U);
      if (iVar4 - 3U < 4) {
        return;
      }
    }
    uVar6 = 3;
    do {
      iVar8 = *(int *)(this + 0x1da8);
      if (iVar8 != 6) {
        iVar4 = 6 - iVar8;
        pbVar5 = (byte *)(*(long *)(this + 0x170) + (ulong)(iVar8 * uVar6) + 3);
        piVar2 = (int *)(*(long *)(this + 0x178) + (ulong)(iVar8 * uVar6) * 4 + 0xc);
        do {
          iVar4 = iVar4 + 1;
          iVar1 = *piVar2 * param_1;
          iVar8 = iVar1 + 0x7fff;
          if (-1 < iVar1) {
            iVar8 = iVar1;
          }
          uVar7 = (uint)*pbVar5 + (iVar8 >> 0xf);
          uVar7 = uVar7 & ((int)uVar7 >> 0x1f ^ 0xffffffffU);
          if (0xfe < (int)uVar7) {
            uVar7 = 0xff;
          }
          *pbVar5 = (byte)uVar7;
          pbVar5 = pbVar5 + 1;
          piVar2 = piVar2 + 1;
        } while (iVar4 != 0);
        iVar4 = *(int *)(this + 0x1dac);
      }
      uVar6 = uVar6 + 1;
    } while (uVar6 < iVar4 - 3U);
  }
  return;
}


==================================================================

### FUNC 0016bca8 (496 bytes) name=FilterDetailEnhancement

/* CFunctions::FilterDetailEnhancement(unsigned int) */

void __thiscall CFunctions::FilterDetailEnhancement(CFunctions *this,uint param_1)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  int *piVar5;
  int *piVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  ulong uVar11;
  int iVar12;
  
  if (param_1 != 0) {
    memset(*(void **)(this + 0x178),0,(ulong)*(uint *)(this + 0x76d0) << 2);
    uVar3 = (uint)(*(int *)(this + 0x24) * 1000) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
    if (0xfffe < uVar3) {
      uVar3 = 0xffff;
    }
    uVar7 = 6;
    if (*(uint *)(this + 0x1dac) != 6) {
      uVar9 = 0;
      uVar7 = *(uint *)(this + 0x1dac);
      do {
        iVar12 = *(int *)(this + 0x1da8);
        if (iVar12 != 6) {
          uVar7 = iVar12 * uVar9;
          uVar10 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar7 << 2;
          uVar11 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar7 << 1;
          iVar12 = 6 - iVar12;
          do {
            LocalMap7x7(this,(int *)(*(long *)(this + 0x178) + uVar10),
                        (ushort *)(*(long *)(this + 0x140) + uVar11),param_1 * uVar3 >> 7 & 0xffffff
                       );
            uVar10 = uVar10 + 4;
            iVar12 = iVar12 + 1;
            uVar11 = uVar11 + 2;
          } while (iVar12 != 0);
          uVar7 = *(uint *)(this + 0x1dac);
        }
        uVar9 = uVar9 + 1;
      } while (uVar9 < uVar7 - 6);
      if (uVar7 == 0) {
        return;
      }
    }
    lVar4 = *(long *)(this + 0x170);
    piVar6 = *(int **)(this + 0x178);
    uVar3 = 0;
    do {
      if (uVar3 < 6) {
        uVar9 = (uVar3 >> 1) + 1;
        uVar8 = *(uint *)(this + 0x1da8);
      }
      else if (uVar7 < uVar3 + 7) {
        uVar9 = (1 - uVar3) + uVar7 >> 1;
        uVar8 = *(uint *)(this + 0x1da8);
      }
      else {
        uVar9 = 4;
        uVar8 = *(uint *)(this + 0x1da8);
      }
      if (uVar8 != 0) {
        uVar10 = 0;
        iVar12 = 1;
        piVar5 = piVar6;
        do {
          if ((uint)uVar10 < 6) {
            uVar7 = ((uint)(uVar10 >> 1) & 0x7fffffff) + 1;
          }
          else if (uVar8 < (uint)uVar10 + 7) {
            uVar7 = uVar8 + iVar12 >> 1;
          }
          else {
            uVar7 = 4;
          }
          piVar6 = piVar5 + 1;
          iVar1 = 0x80000;
          if (uVar7 * uVar9 != 0x10) {
            iVar1 = uVar7 * uVar9 * 0x8000;
          }
          iVar2 = 0;
          if (iVar1 != 0) {
            iVar2 = (int)(*piVar5 * param_1) / iVar1;
          }
          uVar7 = iVar2 + (uint)*(byte *)(lVar4 + uVar10);
          uVar7 = uVar7 & ((int)uVar7 >> 0x1f ^ 0xffffffffU);
          if (0xfe < (int)uVar7) {
            uVar7 = 0xff;
          }
          *(char *)(lVar4 + uVar10) = (char)uVar7;
          uVar8 = *(uint *)(this + 0x1da8);
          uVar10 = uVar10 + 1;
          iVar12 = iVar12 + -1;
          piVar5 = piVar6;
        } while ((uint)uVar10 < uVar8);
        uVar7 = *(uint *)(this + 0x1dac);
        lVar4 = lVar4 + uVar10;
      }
      uVar3 = uVar3 + 1;
    } while (uVar3 < uVar7);
  }
  return;
}


==================================================================

### FUNC 0016be98 (916 bytes) name=ResizeBMP_2X

/* CFunctions::ResizeBMP_2X() */

void __thiscall CFunctions::ResizeBMP_2X(CFunctions *this)

{
  long lVar1;
  byte *pbVar2;
  uint uVar3;
  byte bVar4;
  int iVar5;
  long lVar6;
  uint *puVar7;
  byte *pbVar8;
  uint *puVar9;
  long lVar10;
  long lVar11;
  uint *puVar12;
  uint uVar13;
  long lVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  ulong uVar18;
  int iVar19;
  long lVar20;
  byte *pbVar21;
  
  uVar3 = *(uint *)(this + 0x1da8);
  lVar11 = (long)(int)uVar3;
  iVar17 = *(int *)(this + 0x1dac);
  lVar14 = *(long *)(this + 0x170);
  puVar12 = *(uint **)(this + 0xd8);
  iVar5 = uVar3 * 2;
  if (iVar17 - 1U != 0 && 0 < iVar17) {
    uVar15 = uVar3;
    if ((int)uVar3 < 0) {
      uVar15 = uVar3 + 1;
    }
    uVar18 = 0;
    lVar20 = lVar14 + 2;
    puVar7 = puVar12;
    lVar6 = lVar14;
    do {
      lVar6 = lVar6 + lVar11;
      if (2 < (int)uVar3) {
        lVar10 = 0;
        puVar9 = puVar7;
        do {
          pbVar8 = (byte *)(lVar20 + lVar10);
          bVar4 = pbVar8[-1];
          lVar1 = lVar10 + 4;
          pbVar2 = (byte *)(lVar6 + lVar10);
          *puVar9 = (uint)bVar4 << 0x10 |
                    (uint)pbVar8[-2] | ((uint)bVar4 + (uint)pbVar8[-2] >> 1) << 8 |
                    ((uint)*pbVar8 + (uint)bVar4 >> 1) << 0x18;
          iVar16 = (uint)pbVar2[1] + (uint)pbVar8[-1];
          lVar10 = lVar10 + 2;
          puVar9[(long)((ulong)uVar15 << 0x20) >> 0x21] =
               ((uint)*pbVar2 + (uint)pbVar8[-2] >> 1 |
               ((uint)*pbVar2 + (uint)pbVar8[-2] + (uint)pbVar8[-1] + (uint)pbVar2[1] >> 2) << 8) +
               (iVar16 * 0x8000 & 0xff0000U) +
               ((iVar16 + (uint)*pbVar8 + (uint)pbVar2[2]) * 0x400000 & 0xff000000);
          puVar9 = puVar9 + 1;
        } while (lVar1 < lVar11);
      }
      lVar10 = uVar18 * lVar11 + lVar11 + -2;
      pbVar8 = (byte *)(lVar14 + lVar10);
      iVar16 = (int)(lVar11 + -2) + iVar5 * (int)uVar18;
      pbVar2 = (byte *)(lVar14 + lVar10 + lVar11);
      *(ushort *)((long)puVar12 + (long)iVar16 * 2) =
           (ushort)*pbVar8 | (ushort)(((uint)pbVar8[1] + (uint)*pbVar8 >> 1) << 8);
      uVar18 = uVar18 + 1;
      uVar13 = (uint)*pbVar2 + (uint)*pbVar8;
      puVar7 = puVar7 + lVar11;
      lVar20 = lVar20 + lVar11;
      *(ushort *)((long)puVar12 + (long)(int)(iVar16 + uVar3) * 2) =
           (ushort)(uVar13 >> 1) | (ushort)((uVar13 + pbVar8[1] + (uint)pbVar2[1] >> 2 & 0xff) << 8)
      ;
    } while (uVar18 != iVar17 - 1U);
    uVar18 = (ulong)(iVar17 - 1U);
    if (iVar17 - 1U != 0 && 0 < iVar17) {
      iVar19 = uVar3 * 4;
      iVar16 = 0;
      pbVar8 = (byte *)(lVar14 + (int)(uVar3 - 1));
      do {
        pbVar2 = pbVar8 + lVar11;
        uVar18 = uVar18 - 1;
        *(byte *)((long)puVar12 + (long)(int)((uVar3 - 1) * 2 + iVar16)) = *pbVar8;
        *(byte *)((long)puVar12 + (long)(iVar5 + -1 + iVar16)) =
             (char)((uint)*pbVar8 * 3 >> 2) + (pbVar8[-1] >> 2);
        *(char *)((long)puVar12 + (long)(iVar19 + -2 + iVar16)) =
             (char)((uint)*pbVar2 + (uint)*pbVar8 >> 1);
        *(char *)((long)puVar12 + (long)(iVar19 + -1 + iVar16)) =
             (char)((uint)pbVar2[-1] + (uint)pbVar8[-1] + ((uint)*pbVar2 + (uint)*pbVar8) * 3 >> 3);
        iVar16 = iVar16 + iVar19;
        pbVar8 = pbVar2;
      } while (uVar18 != 0);
    }
  }
  iVar17 = iVar17 + -1;
  uVar15 = uVar3 - 1;
  iVar16 = uVar3 * iVar17 * 4;
  if (1 < (int)uVar3) {
    uVar18 = (ulong)uVar15;
    iVar19 = iVar16 + 1;
    uVar13 = uVar3 * (iVar17 * 4 | 2U) | 1;
    pbVar8 = (byte *)(lVar14 + (int)(iVar17 * uVar3));
    do {
      uVar18 = uVar18 - 1;
      *(byte *)((long)puVar12 + (long)(iVar19 + -1)) = *pbVar8;
      pbVar21 = pbVar8 + 1;
      *(char *)((long)puVar12 + (long)iVar19) = (char)((uint)*pbVar21 + (uint)*pbVar8 >> 1);
      pbVar2 = pbVar8 + -lVar11;
      iVar19 = iVar19 + 2;
      *(byte *)((long)puVar12 + (long)(int)(uVar13 - 1)) =
           (char)((uint)*pbVar8 * 3 >> 2) + (*pbVar2 >> 2);
      *(char *)((long)puVar12 + (long)(int)uVar13) =
           (char)((uint)pbVar2[1] + (uint)*pbVar2 + ((uint)*pbVar21 + (uint)*pbVar8) * 3 >> 3);
      uVar13 = uVar13 + 2;
      pbVar8 = pbVar21;
    } while (uVar18 != 0);
  }
  lVar14 = (long)(int)(iVar17 * uVar3) + (long)(int)uVar15;
  uVar3 = iVar16 + uVar15 * 2;
  uVar15 = uVar3 + iVar5;
  *(undefined1 *)(*(long *)(this + 0xd8) + (long)(int)uVar3) =
       *(undefined1 *)(*(long *)(this + 0x170) + lVar14);
  *(char *)(*(long *)(this + 0xd8) + (long)(int)(uVar3 | 1)) =
       (char)((uint)*(byte *)(*(long *)(this + 0x170) + lVar14) * 3 +
              (uint)((byte *)(*(long *)(this + 0x170) + lVar14))[-1] >> 2);
  *(char *)(*(long *)(this + 0xd8) + (long)(int)uVar15) =
       (char)((uint)*(byte *)(*(long *)(this + 0x170) + lVar14) * 3 +
              (uint)*(byte *)(*(long *)(this + 0x170) + ((int)lVar14 - lVar11)) >> 2);
  lVar11 = *(long *)(this + 0xd8);
  *(char *)(lVar11 + (int)(uVar15 | 1)) =
       (char)(((uint)*(byte *)(lVar11 + (int)(uVar3 | 1)) + (uint)*(byte *)(lVar11 + (int)uVar3) +
              (uint)*(byte *)(lVar11 + (int)uVar15)) / 3);
  return;
}


==================================================================

### FUNC 0016c22c (964 bytes) name=ResizeBMP_2to3

/* CFunctions::ResizeBMP_2to3() */

void __thiscall CFunctions::ResizeBMP_2to3(CFunctions *this)

{
  ulong uVar1;
  long lVar2;
  undefined1 *puVar3;
  byte *pbVar4;
  byte bVar5;
  byte bVar6;
  byte bVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  byte *pbVar14;
  uint uVar15;
  byte *pbVar16;
  byte *pbVar17;
  size_t __n;
  undefined1 *puVar18;
  uint uVar19;
  int iVar20;
  long lVar21;
  ulong uVar22;
  undefined1 *puVar23;
  void *__src;
  undefined1 *puVar24;
  uint uVar25;
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  
  uVar15 = *(uint *)(this + 0x1da8);
  __n = (size_t)uVar15;
  puVar24 = (undefined1 *)
            ((*(long *)(this + 0xd8) +
             (ulong)(uint)((*(int *)(this + 0x1db4) + 3) * *(int *)(this + 0x1db0))) -
            (ulong)((*(int *)(this + 0x1dac) + 1) * (uVar15 + 8)));
  puVar18 = puVar24;
  if (*(int *)(this + 0x1dac) == 0) {
    uVar19 = 0;
  }
  else {
    __src = *(void **)(this + 0x170);
    uVar25 = 0;
    do {
      memcpy(puVar18,__src,__n);
      uVar19 = *(uint *)(this + 0x1da8);
      uVar25 = uVar25 + 1;
      uVar15 = (uint)*(byte *)((long)__src + (ulong)(uVar19 - 1)) * 2 -
               (uint)*(byte *)((long)__src + (ulong)(uVar19 - 2));
      uVar15 = uVar15 & ((int)uVar15 >> 0x1f ^ 0xffffffffU);
      if (0xfe < (int)uVar15) {
        uVar15 = 0xff;
      }
      puVar18[uVar19] = (char)uVar15;
      uVar15 = *(uint *)(this + 0x1da8);
      __n = (size_t)uVar15;
      uVar19 = *(uint *)(this + 0x1dac);
      __src = (void *)((long)__src + __n);
      puVar18 = puVar18 + (uVar15 + 8);
    } while (uVar25 < uVar19);
  }
  uVar25 = uVar15 + 1;
  if (uVar25 != 0) {
    uVar22 = (ulong)(uVar15 + 8);
    pbVar16 = puVar18 + -uVar22;
    uVar1 = (ulong)uVar15 + 1;
    pbVar17 = pbVar16 + -uVar22;
    if (uVar1 < 0x10) goto LAB_0016c424;
    uVar19 = uVar15 + 1 & 0xf;
    lVar21 = uVar1 - uVar19;
    if (lVar21 == 0) goto LAB_0016c424;
    lVar2 = (ulong)uVar15 + 1;
    if (puVar18 < puVar18 + lVar2 + uVar22 * -2 && pbVar17 < puVar18 + lVar2) goto LAB_0016c424;
    if (puVar18 < puVar18 + (lVar2 - uVar22) && pbVar16 < puVar18 + lVar2) goto LAB_0016c424;
    puVar3 = puVar18 + lVar21;
    pbVar16 = pbVar16 + lVar21;
    pbVar17 = pbVar17 + lVar21;
    uVar25 = uVar25 - (int)lVar21;
    puVar23 = puVar18;
    do {
      pbVar4 = puVar23 + -uVar22;
      pbVar14 = puVar23 + uVar22 * -2;
      lVar21 = lVar21 + -0x10;
      auVar32._0_4_ = (uint)pbVar4[4] * 2 - (uint)pbVar14[4];
      auVar32._4_4_ = (uint)pbVar4[5] * 2 - (uint)pbVar14[5];
      auVar32._8_4_ = (uint)pbVar4[6] * 2 - (uint)pbVar14[6];
      auVar32._12_4_ = (uint)pbVar4[7] * 2 - (uint)pbVar14[7];
      auVar28._0_4_ =
           (CONCAT12(pbVar4[1],(ushort)*pbVar4) & 0xffff) * 2 -
           (CONCAT12(pbVar14[1],(ushort)*pbVar14) & 0xffff);
      auVar28._4_4_ = (uint)pbVar4[1] * 2 - (uint)pbVar14[1];
      auVar28._8_4_ = (uint)pbVar4[2] * 2 - (uint)pbVar14[2];
      auVar28._12_4_ = (uint)pbVar4[3] * 2 - (uint)pbVar14[3];
      auVar31._0_4_ = (uint)pbVar4[0xc] * 2 - (uint)pbVar14[0xc];
      auVar31._4_4_ = (uint)pbVar4[0xd] * 2 - (uint)pbVar14[0xd];
      auVar31._8_4_ = (uint)pbVar4[0xe] * 2 - (uint)pbVar14[0xe];
      auVar31._12_4_ = (uint)pbVar4[0xf] * 2 - (uint)pbVar14[0xf];
      auVar29._0_4_ =
           (CONCAT12(pbVar4[9],(ushort)pbVar4[8]) & 0xffff) * 2 -
           (CONCAT12(pbVar14[9],(ushort)pbVar14[8]) & 0xffff);
      auVar29._4_4_ = (uint)pbVar4[9] * 2 - (uint)pbVar14[9];
      auVar29._8_4_ = (uint)pbVar4[10] * 2 - (uint)pbVar14[10];
      auVar29._12_4_ = (uint)pbVar4[0xb] * 2 - (uint)pbVar14[0xb];
      auVar30 = NEON_smax(auVar29,ZEXT816(0),4);
      auVar26 = NEON_smax(auVar28,ZEXT816(0),4);
      auVar28 = NEON_smax(auVar31,ZEXT816(0),4);
      auVar33 = NEON_smax(auVar32,ZEXT816(0),4);
      auVar27._8_8_ = 0xff000000ff;
      auVar27._0_8_ = 0xff000000ff;
      auVar27 = NEON_smin(auVar26,auVar27,4);
      auVar26._8_8_ = 0xff000000ff;
      auVar26._0_8_ = 0xff000000ff;
      auVar31 = NEON_smin(auVar30,auVar26,4);
      auVar30._8_8_ = 0xff000000ff;
      auVar30._0_8_ = 0xff000000ff;
      auVar30 = NEON_smin(auVar33,auVar30,4);
      auVar33._8_8_ = 0xff000000ff;
      auVar33._0_8_ = 0xff000000ff;
      auVar26 = NEON_smin(auVar28,auVar33,4);
      puVar23[8] = auVar31[0];
      puVar23[9] = auVar31[4];
      puVar23[10] = auVar31[8];
      puVar23[0xb] = auVar31[0xc];
      puVar23[0xc] = auVar26[0];
      puVar23[0xd] = auVar26[4];
      puVar23[0xe] = auVar26[8];
      puVar23[0xf] = auVar26[0xc];
      *puVar23 = auVar27[0];
      puVar23[1] = auVar27[4];
      puVar23[2] = auVar27[8];
      puVar23[3] = auVar27[0xc];
      puVar23[4] = auVar30[0];
      puVar23[5] = auVar30[4];
      puVar23[6] = auVar30[8];
      puVar23[7] = auVar30[0xc];
      puVar23 = puVar23 + 0x10;
      puVar18 = puVar3;
    } while (lVar21 != 0);
    while (uVar19 != 0) {
LAB_0016c424:
      uVar25 = uVar25 - 1;
      uVar15 = (uint)*pbVar16 * 2 - (uint)*pbVar17;
      uVar15 = uVar15 & ((int)uVar15 >> 0x1f ^ 0xffffffffU);
      if (0xfe < (int)uVar15) {
        uVar15 = 0xff;
      }
      *puVar18 = (char)uVar15;
      puVar18 = puVar18 + 1;
      pbVar16 = pbVar16 + 1;
      pbVar17 = pbVar17 + 1;
      uVar19 = uVar25;
    }
    uVar19 = *(uint *)(this + 0x1dac);
  }
  if (uVar19 != 0) {
    uVar15 = 0;
    do {
      uVar25 = *(uint *)(this + 0x1da8);
      if (uVar25 >> 1 != 0) {
        pbVar17 = puVar24 + (uVar25 + 8) * uVar15;
        pbVar16 = (byte *)(*(long *)(this + 0xd8) +
                          (ulong)(*(int *)(this + 0x1db0) * (uVar15 * 3 >> 1)));
        iVar20 = -(uVar25 >> 1);
        while( true ) {
          iVar20 = iVar20 + 1;
          bVar5 = *pbVar17;
          bVar6 = pbVar17[2];
          iVar10 = (uint)pbVar17[1] * 2;
          bVar7 = pbVar17[(ulong)uVar25 + 8];
          iVar11 = (uint)pbVar17[1] * 6;
          bVar8 = pbVar17[(ulong)uVar25 + 9];
          bVar9 = pbVar17[(ulong)uVar25 + 10];
          *pbVar16 = bVar5;
          iVar12 = (uint)bVar7 * 2;
          pbVar16[1] = (byte)((iVar11 + (uint)bVar5 * 3) * 0x39 >> 9);
          pbVar16[2] = (byte)(((uint)bVar6 * 3 + iVar11) * 0x39 >> 9);
          iVar11 = (uint)bVar8 * 4;
          iVar13 = (uint)bVar7 * 6;
          pbVar4 = pbVar16 + *(uint *)(this + 0x1db0);
          *pbVar4 = (byte)((iVar13 + (uint)bVar5 * 3) * 0x39 >> 9);
          pbVar4[1] = (byte)((iVar10 + (uint)bVar5 + iVar12 + iVar11) * 0x39 >> 9);
          pbVar4[2] = (byte)((iVar10 + (uint)bVar6 + iVar11 + (uint)bVar9 * 2) * 0x39 >> 9);
          pbVar4 = pbVar17 + (*(int *)(this + 0x1da8) * 2 + 0x10);
          bVar5 = *pbVar4;
          bVar6 = pbVar4[1];
          bVar7 = pbVar4[2];
          pbVar4 = pbVar16 + (uint)(*(int *)(this + 0x1db0) << 1);
          *pbVar4 = (byte)(((uint)bVar5 * 3 + iVar13) * 0x39 >> 9);
          pbVar4[1] = (byte)((iVar11 + iVar12 + (uint)bVar5 + (uint)bVar6 * 2) * 0x39 >> 9);
          pbVar4[2] = (byte)(((uint)bVar9 * 2 + iVar11 + (uint)bVar6 * 2 + (uint)bVar7) * 0x39 >> 9)
          ;
          if (iVar20 == 0) break;
          uVar25 = *(uint *)(this + 0x1da8);
          pbVar17 = pbVar17 + 2;
          pbVar16 = pbVar16 + 3;
        }
        uVar19 = *(uint *)(this + 0x1dac);
      }
      uVar15 = uVar15 + 2;
    } while (uVar15 < uVar19);
  }
  return;
}


==================================================================

### FUNC 0016c5f0 (1524 bytes) name=ResizeBMP_3to5

/* CFunctions::ResizeBMP_3to5() */

void __thiscall CFunctions::ResizeBMP_3to5(CFunctions *this)

{
  ulong uVar1;
  long lVar2;
  int iVar3;
  undefined1 *puVar4;
  byte *pbVar5;
  byte bVar6;
  byte bVar7;
  byte bVar8;
  byte bVar9;
  byte bVar10;
  byte bVar11;
  byte bVar12;
  byte bVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  byte *pbVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  uint uVar21;
  uint uVar22;
  uint uVar23;
  byte *pbVar24;
  byte *pbVar25;
  size_t __n;
  undefined1 *puVar26;
  long lVar27;
  ulong uVar28;
  int iVar29;
  uint uVar30;
  undefined1 *puVar31;
  uint uVar32;
  void *__src;
  undefined1 *puVar33;
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  
  uVar23 = *(uint *)(this + 0x1da8);
  __n = (size_t)uVar23;
  puVar33 = (undefined1 *)
            ((*(long *)(this + 0xd8) +
             (ulong)(uint)((*(int *)(this + 0x1db4) + 3) * *(int *)(this + 0x1db0))) -
            (ulong)((*(int *)(this + 0x1dac) + 1) * (uVar23 + 8)));
  puVar26 = puVar33;
  if (*(int *)(this + 0x1dac) == 0) {
    uVar19 = 0;
  }
  else {
    __src = *(void **)(this + 0x170);
    uVar20 = 0;
    do {
      memcpy(puVar26,__src,__n);
      uVar19 = *(uint *)(this + 0x1da8);
      uVar20 = uVar20 + 1;
      uVar23 = (uint)*(byte *)((long)__src + (ulong)(uVar19 - 1)) * 2 -
               (uint)*(byte *)((long)__src + (ulong)(uVar19 - 2));
      uVar23 = uVar23 & ((int)uVar23 >> 0x1f ^ 0xffffffffU);
      if (0xfe < (int)uVar23) {
        uVar23 = 0xff;
      }
      puVar26[uVar19] = (char)uVar23;
      uVar23 = *(uint *)(this + 0x1da8);
      __n = (size_t)uVar23;
      uVar19 = *(uint *)(this + 0x1dac);
      __src = (void *)((long)__src + __n);
      puVar26 = puVar26 + (uVar23 + 8);
    } while (uVar20 < uVar19);
  }
  uVar20 = uVar23 + 1;
  if (uVar20 != 0) {
    uVar28 = (ulong)(uVar23 + 8);
    pbVar24 = puVar26 + -uVar28;
    uVar1 = (ulong)uVar23 + 1;
    pbVar25 = pbVar24 + -uVar28;
    if (uVar1 < 0x10) goto LAB_0016c7f0;
    uVar19 = uVar23 + 1 & 0xf;
    lVar27 = uVar1 - uVar19;
    if (lVar27 == 0) goto LAB_0016c7f0;
    lVar2 = (ulong)uVar23 + 1;
    if (puVar26 < puVar26 + lVar2 + uVar28 * -2 && pbVar25 < puVar26 + lVar2) goto LAB_0016c7f0;
    if (puVar26 < puVar26 + (lVar2 - uVar28) && pbVar24 < puVar26 + lVar2) goto LAB_0016c7f0;
    puVar4 = puVar26 + lVar27;
    pbVar24 = pbVar24 + lVar27;
    pbVar25 = pbVar25 + lVar27;
    uVar20 = uVar20 - (int)lVar27;
    puVar31 = puVar26;
    do {
      pbVar5 = puVar31 + -uVar28;
      pbVar17 = puVar31 + uVar28 * -2;
      lVar27 = lVar27 + -0x10;
      auVar40._0_4_ = (uint)pbVar5[4] * 2 - (uint)pbVar17[4];
      auVar40._4_4_ = (uint)pbVar5[5] * 2 - (uint)pbVar17[5];
      auVar40._8_4_ = (uint)pbVar5[6] * 2 - (uint)pbVar17[6];
      auVar40._12_4_ = (uint)pbVar5[7] * 2 - (uint)pbVar17[7];
      auVar36._0_4_ =
           (CONCAT12(pbVar5[1],(ushort)*pbVar5) & 0xffff) * 2 -
           (CONCAT12(pbVar17[1],(ushort)*pbVar17) & 0xffff);
      auVar36._4_4_ = (uint)pbVar5[1] * 2 - (uint)pbVar17[1];
      auVar36._8_4_ = (uint)pbVar5[2] * 2 - (uint)pbVar17[2];
      auVar36._12_4_ = (uint)pbVar5[3] * 2 - (uint)pbVar17[3];
      auVar39._0_4_ = (uint)pbVar5[0xc] * 2 - (uint)pbVar17[0xc];
      auVar39._4_4_ = (uint)pbVar5[0xd] * 2 - (uint)pbVar17[0xd];
      auVar39._8_4_ = (uint)pbVar5[0xe] * 2 - (uint)pbVar17[0xe];
      auVar39._12_4_ = (uint)pbVar5[0xf] * 2 - (uint)pbVar17[0xf];
      auVar37._0_4_ =
           (CONCAT12(pbVar5[9],(ushort)pbVar5[8]) & 0xffff) * 2 -
           (CONCAT12(pbVar17[9],(ushort)pbVar17[8]) & 0xffff);
      auVar37._4_4_ = (uint)pbVar5[9] * 2 - (uint)pbVar17[9];
      auVar37._8_4_ = (uint)pbVar5[10] * 2 - (uint)pbVar17[10];
      auVar37._12_4_ = (uint)pbVar5[0xb] * 2 - (uint)pbVar17[0xb];
      auVar38 = NEON_smax(auVar37,ZEXT816(0),4);
      auVar34 = NEON_smax(auVar36,ZEXT816(0),4);
      auVar36 = NEON_smax(auVar39,ZEXT816(0),4);
      auVar41 = NEON_smax(auVar40,ZEXT816(0),4);
      auVar35._8_8_ = 0xff000000ff;
      auVar35._0_8_ = 0xff000000ff;
      auVar35 = NEON_smin(auVar34,auVar35,4);
      auVar34._8_8_ = 0xff000000ff;
      auVar34._0_8_ = 0xff000000ff;
      auVar39 = NEON_smin(auVar38,auVar34,4);
      auVar38._8_8_ = 0xff000000ff;
      auVar38._0_8_ = 0xff000000ff;
      auVar38 = NEON_smin(auVar41,auVar38,4);
      auVar41._8_8_ = 0xff000000ff;
      auVar41._0_8_ = 0xff000000ff;
      auVar34 = NEON_smin(auVar36,auVar41,4);
      puVar31[8] = auVar39[0];
      puVar31[9] = auVar39[4];
      puVar31[10] = auVar39[8];
      puVar31[0xb] = auVar39[0xc];
      puVar31[0xc] = auVar34[0];
      puVar31[0xd] = auVar34[4];
      puVar31[0xe] = auVar34[8];
      puVar31[0xf] = auVar34[0xc];
      *puVar31 = auVar35[0];
      puVar31[1] = auVar35[4];
      puVar31[2] = auVar35[8];
      puVar31[3] = auVar35[0xc];
      puVar31[4] = auVar38[0];
      puVar31[5] = auVar38[4];
      puVar31[6] = auVar38[8];
      puVar31[7] = auVar38[0xc];
      puVar31 = puVar31 + 0x10;
      puVar26 = puVar4;
    } while (lVar27 != 0);
    while (uVar19 != 0) {
LAB_0016c7f0:
      uVar20 = uVar20 - 1;
      uVar23 = (uint)*pbVar24 * 2 - (uint)*pbVar25;
      uVar23 = uVar23 & ((int)uVar23 >> 0x1f ^ 0xffffffffU);
      if (0xfe < (int)uVar23) {
        uVar23 = 0xff;
      }
      *puVar26 = (char)uVar23;
      puVar26 = puVar26 + 1;
      pbVar24 = pbVar24 + 1;
      pbVar25 = pbVar25 + 1;
      uVar19 = uVar20;
    }
    uVar19 = *(uint *)(this + 0x1dac);
  }
  if (uVar19 != 0) {
    uVar23 = 0;
    do {
      uVar20 = *(uint *)(this + 0x1da8);
      if (2 < uVar20) {
        pbVar25 = puVar33 + (uVar20 + 8) * uVar23;
        pbVar24 = (byte *)(*(long *)(this + 0xd8) +
                          (ulong)(*(int *)(this + 0x1db0) * ((uVar23 * 5) / 3)));
        iVar29 = -(uVar20 / 3);
        while( true ) {
          iVar29 = iVar29 + 1;
          bVar6 = *pbVar25;
          bVar7 = pbVar25[2];
          bVar8 = pbVar25[(ulong)uVar20 + 9];
          bVar9 = pbVar25[1];
          bVar10 = pbVar25[(ulong)uVar20 + 8];
          bVar11 = pbVar25[(ulong)uVar20 + 10];
          bVar12 = pbVar25[3];
          bVar13 = pbVar25[(ulong)uVar20 + 0xb];
          *pbVar24 = bVar6;
          uVar21 = (uint)bVar9;
          uVar19 = (uint)bVar11;
          uVar20 = (uint)bVar8;
          iVar14 = ((uint)bVar6 * 4 + (uint)bVar6) * 2;
          uVar30 = (uint)bVar10;
          iVar3 = (uint)bVar11 + uVar19 * 2;
          pbVar24[2] = (byte)(((uint)bVar7 * 5 + (uint)bVar9 * 0x14) * 0x29 >> 10);
          pbVar24[3] = (byte)((uVar21 * 5 + (uint)bVar7 * 0x14) * 0x29 >> 10);
          pbVar24[4] = (byte)(((uint)bVar7 * 0xf + (uint)bVar12 * 10) * 0x29 >> 10);
          pbVar24[1] = (byte)((((uint)bVar9 * 0x10 - uVar21) + iVar14) * 0x29 >> 10);
          pbVar5 = pbVar24 + *(uint *)(this + 0x1db0);
          *pbVar5 = (byte)(((uint)bVar10 * 0xf + iVar14) * 0x29 >> 10);
          pbVar5[1] = (byte)(((uint)bVar8 * 9 + (uint)bVar6 * 4 + (uVar30 + bVar9) * 6) * 0x29 >> 10
                            );
          pbVar5[2] = (byte)(((uint)bVar7 * 2 + uVar21 * 8 + uVar20 * 0xc + iVar3) * 0x29 >> 10);
          pbVar5[3] = (byte)(((uint)bVar7 * 8 + (uint)bVar9 * 2 + uVar20 * 3 + iVar3 * 4) * 0x29 >>
                            10);
          pbVar5[4] = (byte)(((uint)bVar11 * 9 + (uint)bVar12 * 4 + ((uint)bVar13 + (uint)bVar7) * 6
                             ) * 0x29 >> 10);
          pbVar5 = pbVar25 + (*(int *)(this + 0x1da8) * 2 + 0x10);
          bVar6 = *pbVar5;
          bVar7 = pbVar5[1];
          bVar9 = pbVar5[2];
          bVar11 = pbVar5[3];
          iVar15 = (uint)bVar7 * 4;
          iVar18 = (uint)bVar9 * 3;
          uVar21 = (uint)bVar6;
          uVar22 = (uint)bVar7;
          iVar14 = uVar22 + (uint)bVar7 * 2;
          uVar32 = (uint)bVar9;
          pbVar5 = pbVar24 + (uint)(*(int *)(this + 0x1db0) << 1);
          *pbVar5 = (byte)(((uint)bVar6 * 5 + (uint)bVar10 * 0x14) * 0x29 >> 10);
          pbVar5[1] = (byte)((uVar20 * 0xc + (uint)bVar10 * 8 + uVar21 * 2 + iVar14) * 0x29 >> 10);
          pbVar5[3] = (byte)(((uint)bVar8 * 4 + uVar19 * 0x10 + uVar22 + uVar32 * 4) * 0x29 >> 10);
          pbVar5[2] = (byte)((uVar19 * 4 + uVar20 * 0x10 + iVar15 + uVar32) * 0x29 >> 10);
          pbVar5[4] = (byte)((iVar3 * 4 + (uint)bVar13 * 8 + iVar18 + (uint)bVar11 * 2) * 0x29 >> 10
                            );
          iVar16 = (uint)bVar9 * 0xc;
          pbVar5 = pbVar24 + (uint)(*(int *)(this + 0x1db0) * 3);
          *pbVar5 = (byte)((uVar30 * 5 + uVar21 * 0x14) * 0x29 >> 10);
          pbVar5[1] = (byte)((uVar20 * 3 + uVar30 * 2 + uVar21 * 8 + iVar14 * 4) * 0x29 >> 10);
          pbVar5[2] = (byte)(((uint)bVar8 * 4 + uVar19 + uVar22 * 0x10 + uVar32 * 4) * 0x29 >> 10);
          pbVar5[3] = (byte)((uVar19 * 4 + uVar20 + iVar15 + (uint)bVar9 * 0x10) * 0x29 >> 10);
          pbVar5[4] = (byte)((iVar3 + (uint)bVar13 * 2 + iVar16 + (uint)bVar11 * 8) * 0x29 >> 10);
          pbVar5 = pbVar25 + (*(int *)(this + 0x1da8) * 3 + 0x18);
          bVar8 = *pbVar5;
          bVar9 = pbVar5[1];
          bVar10 = pbVar5[2];
          bVar12 = pbVar5[3];
          pbVar5 = pbVar24 + (uint)(*(int *)(this + 0x1db0) << 2);
          *pbVar5 = (byte)((((uint)bVar6 * 0x10 - (uint)bVar6) + (uint)bVar8 * 10) * 0x29 >> 10);
          pbVar5[1] = (byte)(((uint)bVar7 + uVar22 * 8 + (uint)bVar8 * 4 +
                             ((uint)bVar9 + (uint)bVar6) * 6) * 0x29 >> 10);
          pbVar5[2] = (byte)((iVar18 + iVar14 * 4 + (uint)bVar9 * 8 + (uint)bVar10 * 2) * 0x29 >> 10
                            );
          pbVar5[3] = (byte)((iVar16 + iVar14 + (uint)bVar9 * 2 + (uint)bVar10 * 8) * 0x29 >> 10);
          pbVar5[4] = (byte)((uVar32 * 9 + (uint)bVar12 * 4 + ((uint)bVar10 + (uint)bVar11) * 6) *
                             0x29 >> 10);
          if (iVar29 == 0) break;
          uVar20 = *(uint *)(this + 0x1da8);
          pbVar25 = pbVar25 + 3;
          pbVar24 = pbVar24 + 5;
        }
        uVar19 = *(uint *)(this + 0x1dac);
      }
      uVar23 = uVar23 + 3;
    } while (uVar23 < uVar19);
  }
  return;
}


==================================================================

### FUNC 0016cbe4 (448 bytes) name=ResizeBMP

/* CFunctions::ResizeBMP() */

void __thiscall CFunctions::ResizeBMP(CFunctions *this)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  byte bVar9;
  long lVar10;
  uint uVar11;
  ulong uVar12;
  uint uVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  
  uVar3 = *(uint *)(this + 0x1db0);
  if (uVar3 != 0) {
    uVar4 = *(uint *)(this + 0x1da8);
    uVar5 = *(uint *)(this + 0x1dac);
    uVar6 = *(uint *)(this + 0x1db4);
    uVar11 = 0;
    fVar14 = (float)uVar4 + -1.0;
    fVar15 = (float)uVar5 + -1.0;
    do {
      fVar16 = ((float)uVar4 / (float)uVar3) * (float)uVar11;
      fVar17 = fVar14;
      if (fVar16 <= fVar14) {
        fVar17 = fVar16;
      }
      if (uVar6 != 0) {
        uVar13 = (uint)fVar17;
        uVar1 = uVar13 + 1;
        fVar17 = fVar17 - (float)uVar13;
        uVar12 = 0;
        uVar2 = uVar11;
        do {
          fVar18 = ((float)uVar5 / (float)uVar6) * (float)(uVar12 & 0xffffffff);
          fVar16 = fVar15;
          if (fVar18 <= fVar15) {
            fVar16 = fVar18;
          }
          uVar7 = (uint)fVar16;
          uVar8 = uVar7 + 1;
          if ((uVar1 < uVar4) && (uVar8 < uVar5)) {
            lVar10 = *(long *)(this + 0x170);
            uVar8 = uVar13 + uVar4 * uVar7;
            fVar18 = (float)NEON_ucvtf((uint)*(byte *)(lVar10 + (ulong)uVar8));
            fVar19 = (float)NEON_ucvtf((uint)*(byte *)(lVar10 + (ulong)(uVar8 + 1)));
            fVar20 = (float)NEON_ucvtf((uint)*(byte *)(lVar10 + (ulong)(uVar8 + uVar4)));
            fVar21 = (float)NEON_ucvtf((uint)*(byte *)(lVar10 + (ulong)(uVar8 + uVar4 + 1)));
            fVar18 = (1.0 - (fVar16 - (float)uVar7)) * ((1.0 - fVar17) * fVar18 + fVar17 * fVar19);
            fVar16 = (fVar16 - (float)uVar7) * ((1.0 - fVar17) * fVar20 + fVar17 * fVar21);
LAB_0016cd68:
            fVar18 = fVar18 + fVar16;
LAB_0016cd6c:
            uVar8 = (uint)(fVar18 + 0.5);
            if (0xfe < uVar8) {
              uVar8 = 0xff;
            }
            bVar9 = (byte)uVar8;
          }
          else {
            if (uVar8 == uVar5 && uVar1 < uVar4) {
              uVar8 = uVar13 + uVar4 * uVar7;
              bVar9 = *(byte *)(*(long *)(this + 0x170) + (ulong)uVar8);
              fVar16 = (float)bVar9;
              fVar18 = fVar17 * (float)(int)((uint)*(byte *)(*(long *)(this + 0x170) +
                                                            (ulong)(uVar8 + 1)) - (uint)bVar9);
              goto LAB_0016cd68;
            }
            bVar9 = *(byte *)(*(long *)(this + 0x170) + (ulong)(uVar13 + uVar4 * uVar7));
            if ((uVar1 == uVar4) && (uVar8 < uVar5)) {
              fVar18 = (fVar16 - (float)uVar7) *
                       (float)(int)((uint)*(byte *)(*(long *)(this + 0x170) +
                                                   (ulong)(uVar13 + uVar8 * uVar4)) - (uint)bVar9) +
                       (float)bVar9;
              goto LAB_0016cd6c;
            }
          }
          uVar12 = uVar12 + 1;
          *(byte *)(*(long *)(this + 0xd8) + (ulong)uVar2) = bVar9;
          uVar2 = uVar2 + uVar3;
        } while (uVar6 != uVar12);
      }
      uVar11 = uVar11 + 1;
    } while (uVar11 != uVar3);
  }
  return;
}


==================================================================

### FUNC 0016cda4 (20 bytes) name=ConvertDeltaInnerTemp2mC

/* CFunctions::ConvertDeltaInnerTemp2mC(unsigned short) const */

int __thiscall CFunctions::ConvertDeltaInnerTemp2mC(CFunctions *this,ushort param_1)

{
  return (uint)param_1 << (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
}


==================================================================

### FUNC 0016cdb8 (2296 bytes) name=ReviseTemperature

/* CFunctions::ReviseTemperature(unsigned short, unsigned int, int) */

void __thiscall
CFunctions::ReviseTemperature(CFunctions *this,ushort param_1,uint param_2,int param_3)

{
  ulong uVar1;
  CFunctions *pCVar2;
  CFunctions *pCVar3;
  CFunctions *pCVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  long lVar9;
  CFunctions *pCVar10;
  long lVar11;
  bool bVar12;
  bool bVar13;
  int iVar14;
  uint uVar15;
  long lVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  int iVar21;
  float fVar22;
  float fVar23;
  ushort local_80 [2];
  float local_7c;
  long local_78;
  
  uVar15 = (uint)param_1;
  lVar9 = tpidr_el0;
  local_78 = *(long *)(lVar9 + 0x28);
  if (*(int *)(this + 0x1638) == 0) {
    iVar14 = ((uint)param_1 << (ulong)(*(uint *)(this + 0x76e4) & 0x1f)) + *(int *)(this + 0x76e0);
    goto LAB_0016d678;
  }
  uVar1 = 0;
  if (*(uint *)(this + 0x70) < *(uint *)(this + 0x163c)) {
    uVar1 = (ulong)*(uint *)(this + 0x70);
  }
  fVar22 = *(float *)(this + uVar1 * 0x21c + 0x1844);
  if ((fVar22 <= DAT_004394fc) || (DAT_00439500 <= fVar22)) {
    if ((param_3 != 0) &&
       ((((1.0 <= *(float *)(this + uVar1 * 0x21c + 0x16ec) &&
          (1.0 <= *(float *)(this + uVar1 * 0x21c + 0x16f0))) &&
         (0.0 < *(float *)(this + uVar1 * 0x21c + 0x16f4))) &&
        ((0.0 < *(float *)(this + uVar1 * 0x21c + 0x16fc) &&
         (iVar14 = FindStrayRadius(this,param_2,*(float *)(this + uVar1 * 0x21c + 0x16f0),&local_7c,
                                   (uint *)local_80), iVar14 != 0)))))) {
      fVar22 = *(float *)(this + uVar1 * 0x21c + 0x16f0);
      fVar23 = *(float *)(this + uVar1 * 0x21c + 0x16ec);
      pCVar2 = this + uVar1 * 0x21c + 0x1700;
      pCVar10 = this + uVar1 * 0x21c + 0x16fc;
      if (local_7c <= fVar22) {
        pCVar2 = this + uVar1 * 0x21c + 0x16f8;
        pCVar10 = this + uVar1 * 0x21c + 0x16f4;
      }
      uVar15 = *(uint *)(this + 0x76e4);
      iVar18 = *(int *)(this + 0x76e0);
      iVar14 = ((uint)param_1 << (ulong)(uVar15 & 0x1f)) + iVar18;
      pCVar3 = this + uVar1 * 0x21c + 0x16fc;
      if (fVar23 <= fVar22) {
        pCVar3 = this + uVar1 * 0x21c + 0x16f4;
      }
      iVar21 = iVar14 + 50000;
      pCVar4 = this + uVar1 * 0x21c + 0x1700;
      if (fVar23 <= fVar22) {
        pCVar4 = this + uVar1 * 0x21c + 0x16f8;
      }
      iVar17 = iVar14 + 0xe34f;
      if (-1 < iVar21) {
        iVar17 = iVar21;
      }
      uVar19 = iVar17 >> 0xd;
      if (0x110 < uVar19) {
        uVar19 = 0x111;
      }
      uVar20 = 0;
      if (-0xe350 < iVar14) {
        uVar20 = uVar19;
      }
      iVar21 = (iVar21 + uVar20 * -0x2000) *
               (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
               *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4));
      iVar14 = iVar21 + 0x1fff;
      if (-1 < iVar21) {
        iVar14 = iVar21;
      }
      iVar14 = *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4) + (iVar14 >> 0xd);
      iVar21 = ((uint)local_80[0] << (ulong)(uVar15 & 0x1f)) + iVar18;
      iVar17 = iVar21 + 50000;
      iVar5 = iVar21 + 0xe34f;
      if (-1 < iVar17) {
        iVar5 = iVar17;
      }
      uVar19 = iVar5 >> 0xd;
      if (0x110 < uVar19) {
        uVar19 = 0x111;
      }
      uVar20 = 0;
      if (-0xe350 < iVar21) {
        uVar20 = uVar19;
      }
      iVar17 = (iVar17 + uVar20 * -0x2000) *
               (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
               *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4));
      iVar21 = iVar17 + 0x1fff;
      if (-1 < iVar17) {
        iVar21 = iVar17;
      }
      uVar19 = 0;
      iVar14 = (int)((1.0 - (local_7c * *(float *)pCVar10 + *(float *)pCVar2) /
                            (fVar23 * *(float *)pCVar3 + *(float *)pCVar4)) *
                     (float)((iVar14 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) -
                            (iVar21 >> 0xd)) + (float)iVar14);
      uVar20 = 0x112;
      do {
        uVar7 = uVar20 + uVar19 >> 1;
        uVar6 = uVar7;
        if (*(int *)(PTR_T2E_00501dc0 + (ulong)uVar7 * 4) <= iVar14) {
          uVar6 = uVar20;
          uVar19 = uVar7;
        }
        uVar20 = uVar6;
      } while (uVar19 + 1 < uVar6);
      uVar15 = (int)(((uVar19 * 0x2000 + -50000) - iVar18) +
                    ((iVar14 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar19 * 4)) *
                     *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar19 * 4) >> 10)) >> (uVar15 & 0x1f)
      ;
      uVar15 = uVar15 & ((int)uVar15 >> 0x1f ^ 0xffffffffU);
      if (0xfffe < (int)uVar15) {
        uVar15 = 0xffff;
      }
    }
  }
  else {
    iVar14 = ((uint)param_1 << (ulong)(*(uint *)(this + 0x76e4) & 0x1f)) + *(int *)(this + 0x76e0);
    iVar18 = iVar14 + 50000;
    iVar21 = iVar14 + 0xe34f;
    if (-1 < iVar18) {
      iVar21 = iVar18;
    }
    uVar15 = iVar21 >> 0xd;
    if (0x110 < uVar15) {
      uVar15 = 0x111;
    }
    uVar19 = 0;
    if (-0xe350 < iVar14) {
      uVar19 = uVar15;
    }
    iVar18 = (iVar18 + uVar19 * -0x2000) *
             (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar19 + 1) * 4) -
             *(int *)(PTR_T2E_00501dc0 + (ulong)uVar19 * 4));
    iVar14 = iVar18 + 0x1fff;
    if (-1 < iVar18) {
      iVar14 = iVar18;
    }
    iVar17 = *(int *)(this + 0x44);
    iVar18 = iVar17 + 50000;
    iVar21 = iVar17 + 0xe34f;
    if (-1 < iVar18) {
      iVar21 = iVar18;
    }
    uVar15 = iVar21 >> 0xd;
    if (0x110 < uVar15) {
      uVar15 = 0x111;
    }
    uVar20 = 0;
    if (-0xe350 < iVar17) {
      uVar20 = uVar15;
    }
    uVar15 = 0;
    iVar21 = (iVar18 + uVar20 * -0x2000) *
             (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
             *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4));
    iVar18 = iVar21 + 0x1fff;
    if (-1 < iVar21) {
      iVar18 = iVar21;
    }
    iVar18 = (int)(((float)(*(int *)(PTR_T2E_00501dc0 + (ulong)uVar19 * 4) + (iVar14 >> 0xd)) -
                   (1.0 - fVar22) *
                   (float)(*(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4) + (iVar18 >> 0xd))) /
                  fVar22);
    iVar14 = *(int *)PTR_T2E_00501dc0;
    if (*(int *)PTR_T2E_00501dc0 <= iVar18) {
      iVar14 = iVar18;
    }
    uVar19 = 0x112;
    do {
      uVar6 = uVar19 + uVar15 >> 1;
      uVar20 = uVar6;
      if (*(int *)(PTR_T2E_00501dc0 + (ulong)uVar6 * 4) <= iVar14) {
        uVar20 = uVar19;
        uVar15 = uVar6;
      }
      uVar19 = uVar20;
    } while (uVar15 + 1 < uVar20);
    uVar15 = (int)(((uVar15 * 0x2000 + -50000) - *(int *)(this + 0x76e0)) +
                  ((iVar14 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar15 * 4)) *
                   *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar15 * 4) >> 10)) >>
             (*(uint *)(this + 0x76e4) & 0x1f);
  }
  if (*(int *)(this + uVar1 * 0x21c + 0x167c) == 1) {
    lVar16 = 0;
  }
  else {
    lVar16 = 0;
    do {
      if ((int)uVar15 <= *(int *)(this + lVar16 * 4 + uVar1 * 0x21c + 0x1680)) break;
      lVar16 = lVar16 + 1;
    } while ((uint)lVar16 < *(int *)(this + uVar1 * 0x21c + 0x167c) - 1U);
  }
  lVar11 = uVar1 * 0x21c + 0x1714;
  iVar18 = *(int *)(this + 0x40);
  iVar14 = (*(int *)(this + uVar1 * 0x21c + 0x1678) - *(int *)(this + uVar1 * 0x21c + 0x1674)) +
           *(int *)(this + 0x3c);
  if (*(int *)(this + 0x4c) == 0) {
    iVar14 = iVar18 - iVar14;
    if (iVar14 < 0x3e9) {
      bVar12 = SCARRY4(iVar14,1000);
      iVar21 = iVar14 + 1000;
      bVar13 = iVar14 == -1000;
      iVar17 = -1000;
      goto LAB_0016d2dc;
    }
LAB_0016d2cc:
    iVar14 = 1000;
  }
  else {
    iVar14 = iVar14 - iVar18;
    if (1000 < iVar14) goto LAB_0016d2cc;
    iVar17 = -5000;
    bVar12 = SBORROW4(iVar14,-5000);
    iVar21 = iVar14 + 5000;
    bVar13 = iVar14 == -5000;
LAB_0016d2dc:
    if (bVar13 || iVar21 < 0 != bVar12) {
      iVar14 = iVar17;
    }
  }
  iVar14 = (iVar14 - *(int *)(this + 0x48)) + iVar18 +
           (*(int *)(this + 0x44) - *(int *)(this + 0x3c)) * 2;
  iVar21 = iVar18 + 50000;
  iVar17 = iVar18 + 0xe34f;
  if (-1 < iVar21) {
    iVar17 = iVar21;
  }
  uVar19 = iVar17 >> 0xd;
  if (0x110 < uVar19) {
    uVar19 = 0x111;
  }
  iVar17 = iVar14 + iVar21;
  uVar20 = 0;
  if (-0xe350 < iVar18) {
    uVar20 = uVar19;
  }
  iVar18 = iVar17 + 0x1fff;
  if (-1 < iVar17) {
    iVar18 = iVar17;
  }
  uVar19 = iVar18 >> 0xd;
  if (0x110 < uVar19) {
    uVar19 = 0x111;
  }
  uVar6 = 0;
  if (-0x2000 < iVar17) {
    uVar6 = uVar19;
  }
  if (uVar20 == uVar6) {
    iVar14 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
             *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) * iVar14;
    iVar18 = iVar14 + 0x1fff;
    if (-1 < iVar14) {
      iVar18 = iVar14;
    }
    iVar18 = iVar18 >> 0xd;
  }
  else {
    iVar18 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar6 + 1) * 4) -
             *(int *)(PTR_T2E_00501dc0 + (ulong)uVar6 * 4)) * (iVar17 + uVar6 * -0x2000);
    iVar21 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
             *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) * (iVar21 + uVar20 * -0x2000);
    iVar14 = iVar18 + 0x1fff;
    if (-1 < iVar18) {
      iVar14 = iVar18;
    }
    iVar18 = iVar21 + 0x1fff;
    if (-1 < iVar21) {
      iVar18 = iVar21;
    }
    iVar18 = ((*(int *)(PTR_T2E_00501dc0 + (ulong)uVar6 * 4) -
              *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) - (iVar18 >> 0xd)) + (iVar14 >> 0xd);
  }
  if ((param_3 != 0) && (*(float *)(this + 0x84) != 0.0)) {
    iVar14 = *(int *)(this + 0x4a78);
    if (*(int *)(this + uVar1 * 0x21c + 0x184c) - *(int *)(this + uVar1 * 0x21c + 0x1848) < 0xc351)
    {
      if (39999 < iVar14) {
        iVar14 = 40000;
      }
      iVar21 = 5000;
    }
    else {
      if (59999 < iVar14) {
        iVar14 = 60000;
      }
      iVar21 = -40000;
    }
    if (iVar14 <= iVar21) {
      iVar14 = iVar21;
    }
    iVar17 = (int)(*(float *)(this + 0x84) * (float)(iVar14 - *(int *)(this + 0x80)));
    iVar14 = iVar17 + 85000;
    iVar21 = iVar17 + 0x16c07;
    if (-1 < iVar14) {
      iVar21 = iVar14;
    }
    uVar19 = iVar21 >> 0xd;
    if (0x110 < uVar19) {
      uVar19 = 0x111;
    }
    uVar20 = 0;
    if (-0x16c08 < iVar17) {
      uVar20 = uVar19;
    }
    if (uVar20 == 10) {
      iVar17 = (*(int *)(PTR_T2E_00501dc0 + 0x2c) - *(int *)(PTR_T2E_00501dc0 + 0x28)) * iVar17;
      iVar14 = iVar17 + 0x1fff;
      if (-1 < iVar17) {
        iVar14 = iVar17;
      }
      iVar14 = iVar14 >> 0xd;
    }
    else {
      iVar21 = (*(int *)(PTR_T2E_00501dc0 + 0x2c) - *(int *)(PTR_T2E_00501dc0 + 0x28)) * 0xc08;
      iVar17 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
               *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) * (iVar14 + uVar20 * -0x2000);
      iVar14 = iVar17 + 0x1fff;
      if (-1 < iVar17) {
        iVar14 = iVar17;
      }
      iVar17 = iVar21 + 0x1fff;
      if (-1 < iVar21) {
        iVar17 = iVar21;
      }
      iVar14 = ((*(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4) - *(int *)(PTR_T2E_00501dc0 + 0x28))
               - (iVar17 >> 0xd)) + (iVar14 >> 0xd);
    }
    iVar18 = iVar14 + iVar18;
  }
  iVar21 = *(int *)(this + (ulong)((int)lVar16 << 1 | 1) * 4 + lVar11) +
           (int)((long)*(int *)(this + (ulong)(uint)((int)lVar16 << 1) * 4 + lVar11) *
                 (long)(int)uVar15 >> ((ulong)*(uint *)(this + uVar1 * 0x21c + 0x1670) & 0x3f));
  if (*(float *)(this + uVar1 * 0x21c + 0x1854) != 0.0) {
    uVar15 = *(uint *)(this + 0x1da8);
    uVar19 = 0;
    if (uVar15 != 0) {
      uVar19 = param_2 / uVar15;
    }
    iVar14 = uVar19 - (*(uint *)(this + 0x1dac) >> 1);
    iVar17 = (param_2 - uVar19 * uVar15) - (uVar15 >> 1);
    fVar23 = (float)(iVar14 * iVar14 + iVar17 * iVar17);
    fVar22 = SQRT(fVar23);
    if (NAN(fVar22)) {
      fVar22 = sqrtf(fVar23);
    }
    iVar14 = iVar21 + 50000;
    iVar17 = iVar21 + 0xe34f;
    if (-1 < iVar14) {
      iVar17 = iVar14;
    }
    uVar15 = iVar17 >> 0xd;
    if (0x110 < uVar15) {
      uVar15 = 0x111;
    }
    uVar19 = 0;
    if (-0xe350 < iVar21) {
      uVar19 = uVar15;
    }
    iVar5 = *(int *)(this + 0x48);
    iVar8 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar19 + 1) * 4) -
            *(int *)(PTR_T2E_00501dc0 + (ulong)uVar19 * 4)) * (iVar14 + uVar19 * -0x2000);
    iVar14 = iVar5 + 50000;
    iVar17 = iVar8 + 0x1fff;
    if (-1 < iVar8) {
      iVar17 = iVar8;
    }
    iVar8 = iVar5 + 0xe34f;
    if (-1 < iVar14) {
      iVar8 = iVar14;
    }
    uVar15 = iVar8 >> 0xd;
    if (0x110 < uVar15) {
      uVar15 = 0x111;
    }
    uVar20 = 0;
    if (-0xe350 < iVar5) {
      uVar20 = uVar15;
    }
    iVar5 = (iVar14 + uVar20 * -0x2000) *
            (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar20 + 1) * 4) -
            *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4));
    iVar14 = iVar5 + 0x1fff;
    if (-1 < iVar5) {
      iVar14 = iVar5;
    }
    iVar18 = iVar18 + (int)-(fVar22 * *(float *)(this + uVar1 * 0x21c + 0x1854) *
                            (float)(((*(int *)(PTR_T2E_00501dc0 + (ulong)uVar19 * 4) -
                                     *(int *)(PTR_T2E_00501dc0 + (ulong)uVar20 * 4)) +
                                    (iVar17 >> 0xd)) - (iVar14 >> 0xd)));
  }
  iVar14 = dEnerge2dTemp(this,iVar21,iVar18);
  iVar14 = iVar14 + iVar21;
LAB_0016d678:
  if (*(long *)(lVar9 + 0x28) != local_78) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(iVar14);
  }
  return;
}


==================================================================

### FUNC 0016d6b0 (600 bytes) name=CorrectTemperature

/* CFunctions::CorrectTemperature(int, float, unsigned int) const */

uint CFunctions::CorrectTemperature(int param_1,float param_2,uint param_3)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  ulong uVar5;
  undefined4 *puVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  float fVar12;
  
  uVar5 = (ulong)(uint)param_1;
  fVar12 = *(float *)(uVar5 + 0xcc);
  if ((((fVar12 <= 0.0) || (1.0 < param_2)) || (param_2 <= 0.0)) || (1.0 < fVar12)) {
    puVar6 = (undefined4 *)__errno();
    *puVar6 = 0xe4ae0001;
  }
  else {
    iVar8 = param_3 + 50000;
    iVar4 = param_3 + 0xe34f;
    if (-1 < iVar8) {
      iVar4 = iVar8;
    }
    uVar7 = iVar4 >> 0xd;
    if (0x110 < uVar7) {
      uVar7 = 0x111;
    }
    uVar10 = 0;
    if (-0xe350 < (int)param_3) {
      uVar10 = uVar7;
    }
    iVar4 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar10 + 1) * 4) -
            *(int *)(PTR_T2E_00501dc0 + (ulong)uVar10 * 4)) * (iVar8 + uVar10 * -0x2000);
    iVar8 = iVar4 + 0x1fff;
    if (-1 < iVar4) {
      iVar8 = iVar4;
    }
    iVar11 = (int)(*(float *)(uVar5 + 0xb0) * DAT_004394f4);
    iVar4 = iVar11 + 50000;
    iVar9 = iVar11 + 0xe34f;
    if (-1 < iVar4) {
      iVar9 = iVar4;
    }
    uVar7 = iVar9 >> 0xd;
    if (0x110 < uVar7) {
      uVar7 = 0x111;
    }
    uVar2 = 0;
    if (-0xe350 < iVar11) {
      uVar2 = uVar7;
    }
    iVar9 = (iVar4 + uVar2 * -0x2000) *
            (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar2 + 1) * 4) -
            *(int *)(PTR_T2E_00501dc0 + (ulong)uVar2 * 4));
    iVar4 = iVar9 + 0x1fff;
    if (-1 < iVar9) {
      iVar4 = iVar9;
    }
    fVar12 = fVar12 * *(float *)(uVar5 + 0xd0) * param_2;
    uVar7 = 0;
    iVar8 = (int)(((float)(*(int *)(PTR_T2E_00501dc0 + (ulong)uVar10 * 4) + (iVar8 >> 0xd)) -
                  (1.0 - fVar12) *
                  (float)(*(int *)(PTR_T2E_00501dc0 + (ulong)uVar2 * 4) + (iVar4 >> 0xd))) / fVar12)
    ;
    uVar10 = 0x112;
    do {
      uVar3 = uVar10 + uVar7 >> 1;
      uVar2 = uVar3;
      if (*(int *)(PTR_T2E_00501dc0 + (ulong)uVar3 * 4) <= iVar8) {
        uVar2 = uVar10;
        uVar7 = uVar3;
      }
      uVar10 = uVar2;
    } while (uVar7 + 1 < uVar2);
    iVar4 = *(int *)(uVar5 + 0x44);
    iVar8 = uVar7 * 0x2000 +
            ((iVar8 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar7 * 4)) *
             *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar7 * 4) >> 10) + -50000;
    if (iVar8 < -0x42afd) {
      iVar8 = -0x42afe;
    }
    if (iVar4 < 0x2711) {
      iVar9 = 0;
    }
    else {
      iVar9 = 6;
      if (iVar4 < 50000) {
        iVar9 = (iVar4 + -15000) / 5000;
      }
    }
    lVar1 = uVar5 + (long)iVar9 * 4;
    iVar11 = *(int *)(lVar1 + 0x88);
    iVar8 = iVar11 + iVar8 +
            ((*(int *)(lVar1 + 0x8c) - iVar11) * (iVar4 + -15000 + iVar9 * -5000)) / 5000;
    param_3 = iVar8 + (int)(*(float *)(uVar5 + 200) * DAT_004394f4) +
              (int)(*(float *)(uVar5 + 0xc4) * (float)iVar8);
  }
  return param_3;
}


==================================================================

### FUNC 0016d908 (44 bytes) name=ConvertmC2InnerTemp

/* CFunctions::ConvertmC2InnerTemp(int) const */

uint __thiscall CFunctions::ConvertmC2InnerTemp(CFunctions *this,int param_1)

{
  uint uVar1;
  
  uVar1 = param_1 - *(int *)(this + 0x76e0) >> (*(uint *)(this + 0x76e4) & 0x1f);
  uVar1 = uVar1 & ((int)uVar1 >> 0x1f ^ 0xffffffffU);
  if (0xfffe < (int)uVar1) {
    uVar1 = 0xffff;
  }
  return uVar1;
}


==================================================================

### FUNC 0016d934 (236 bytes) name=CalContrastOffsetedAutoEnlargeRange

/* CFunctions::CalContrastOffsetedAutoEnlargeRange() */

int __thiscall CFunctions::CalContrastOffsetedAutoEnlargeRange(CFunctions *this)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  
  iVar4 = *(int *)(this + 0x34);
  uVar1 = (uint)(*(int *)(this + 0x24) * 1000) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  if (0xfffe < uVar1) {
    uVar1 = 0xffff;
  }
  iVar3 = iVar4;
  if (iVar4 < -99) {
    iVar3 = -100;
  }
  iVar2 = iVar4;
  if (99 < iVar4) {
    iVar2 = 100;
  }
  if (iVar4 < 0) {
    iVar2 = iVar3;
  }
  iVar4 = (iVar4 >> 0x1f & 0xffffff9cU) + 0x96;
  iVar3 = 0;
  if (iVar4 != 0) {
    iVar3 = (int)(uVar1 * iVar2) / iVar4;
  }
  iVar3 = uVar1 - iVar3;
  if ((*(int *)(this + 0x1200) != 0) && (0.0 < *(float *)(this + 0x74))) {
    if (*(int *)(this + 0x1310) == 2) {
      iVar2 = *(int *)(this + 0x1320);
      iVar4 = *(int *)(this + 0x131c);
      if (iVar2 - iVar4 != 50000) goto LAB_0016da10;
    }
    else {
      if (*(int *)(this + 0x1310) != 1) goto LAB_0016da10;
      iVar2 = *(int *)(this + 0x1320);
      iVar4 = *(int *)(this + 0x131c);
    }
    iVar4 = iVar4 + iVar2;
    if (iVar4 < 0) {
      iVar4 = iVar4 + 1;
    }
    iVar3 = iVar3 + (int)((*(float *)(this + 0x74) *
                          (float)((*(int *)(this + 0x3c) - (iVar4 >> 1)) * iVar3)) / DAT_004394f4);
  }
LAB_0016da10:
  if (iVar3 < 0x81) {
    iVar3 = 0x80;
  }
  return iVar3;
}


==================================================================

### FUNC 0016da20 (1416 bytes) name=SubSectionEnlarge

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CFunctions::SubSectionEnlarge() */

void __thiscall CFunctions::SubSectionEnlarge(CFunctions *this)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  bool bVar8;
  bool bVar9;
  bool bVar10;
  bool bVar11;
  bool bVar12;
  bool bVar13;
  bool bVar14;
  bool bVar15;
  bool bVar16;
  bool bVar17;
  bool bVar18;
  bool bVar19;
  bool bVar20;
  bool bVar21;
  bool bVar22;
  bool bVar23;
  bool bVar24;
  bool bVar25;
  bool bVar26;
  bool bVar27;
  CFunctions *pCVar28;
  undefined1 auVar29 [16];
  long lVar30;
  long lVar31;
  uint uVar32;
  ulong uVar33;
  byte bVar34;
  byte bVar35;
  byte bVar36;
  byte bVar37;
  byte bVar38;
  byte bVar39;
  byte bVar40;
  byte bVar41;
  byte bVar42;
  byte bVar43;
  byte bVar44;
  byte bVar45;
  uint uVar46;
  uint uVar47;
  long lVar48;
  uint uVar49;
  uint uVar50;
  uint uVar51;
  uint uVar52;
  uint uVar53;
  ulong uVar54;
  ulong uVar55;
  ulong uVar56;
  int iVar57;
  long lVar58;
  int iVar60;
  int iVar61;
  long lVar62;
  undefined1 auVar59 [16];
  int iVar63;
  undefined1 auVar64 [16];
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  int iVar67;
  int iVar69;
  undefined8 uVar68;
  int iVar70;
  int iVar72;
  undefined8 uVar71;
  byte bVar73;
  byte bVar74;
  byte bVar75;
  byte bVar76;
  byte bVar77;
  byte bVar78;
  int iVar80;
  undefined8 uVar79;
  int iVar82;
  undefined8 uVar81;
  int iVar83;
  byte bVar84;
  byte bVar85;
  int iVar86;
  int iVar87;
  int iVar88;
  int iVar89;
  int iVar90;
  ulong uVar91;
  ulong uVar92;
  ulong uVar93;
  ulong uVar94;
  ulong uVar95;
  ulong uVar96;
  ulong uVar97;
  ulong uVar98;
  ulong uVar99;
  ulong uVar100;
  ulong uVar101;
  ulong uVar102;
  ulong uVar103;
  ulong uVar104;
  int iVar105;
  int iVar107;
  undefined8 uVar106;
  int iVar108;
  int iVar110;
  undefined8 uVar109;
  int iVar111;
  int iVar112;
  int iVar113;
  int iVar114;
  int local_e0;
  int iStack_dc;
  int iStack_d8;
  int iStack_d4;
  undefined8 uStack_d0;
  undefined8 uStack_c8;
  
  if (*(uint *)(this + 0x20) <= *(uint *)(this + 0x1c)) {
    return;
  }
  iVar57 = *(int *)(this + 0x14);
  if (*(int *)(this + 0x18) <= iVar57) {
    return;
  }
  uVar50 = *(uint *)(this + 0x1da8);
  uVar1 = *(uint *)(this + 0x76d0);
  uVar51 = 0;
  uVar53 = 0xffff;
  uVar49 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar46 = ReviseTemperature(this,(ushort)uVar49,(uVar50 >> 1) + (uVar1 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar46 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar46);
    }
    if ((int)uVar46 <= iVar57) {
      uVar51 = uVar49;
      uVar49 = uVar53;
    }
    uVar53 = uVar49;
    uVar49 = uVar51 + uVar53 >> 1;
  } while (uVar51 + 1 < uVar53);
  uVar1 = *(uint *)(this + 0x1da8);
  uVar49 = *(uint *)(this + 0x76d0);
  iVar57 = *(int *)(this + 0x18);
  uVar50 = 0;
  uVar52 = 0xffff;
  uVar46 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar47 = ReviseTemperature(this,(ushort)uVar46,(uVar1 >> 1) + (uVar49 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar47 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar47);
    }
    if ((int)uVar47 <= iVar57) {
      uVar50 = uVar46;
      uVar46 = uVar52;
    }
    uVar52 = uVar46;
    uVar46 = uVar50 + uVar52 >> 1;
  } while (uVar50 + 1 < uVar52);
  uVar50 = uVar50 + uVar52 >> 1;
  uVar1 = uVar51 + uVar53 >> 1;
  uVar51 = uVar50;
  if ((int)uVar50 <= (int)*(uint *)(this + 0x1df8)) {
    uVar51 = *(uint *)(this + 0x1df8);
  }
  uVar49 = uVar1;
  if ((int)*(uint *)(this + 0x1dfc) <= (int)uVar1) {
    uVar49 = *(uint *)(this + 0x1dfc);
  }
  iVar57 = *(int *)(this + 0x1c);
  *(uint *)(this + 0x1e14) = uVar51;
  *(uint *)(this + 0x1e18) = uVar49;
  uVar51 = uVar51 - uVar49;
  uVar53 = (uVar1 - uVar49) * 0x3ff;
  uVar1 = 0;
  if (uVar51 != 0) {
    uVar1 = uVar53 / uVar51;
  }
  uVar46 = 0;
  if (uVar51 != 0) {
    uVar46 = ((uVar50 - uVar49) * 0x3ff) / uVar51;
  }
  if (uVar53 < uVar51) {
    uVar51 = 0;
  }
  else {
    uVar51 = 0;
    if (uVar1 != 0) {
      uVar51 = (uint)(iVar57 << 0x18) / uVar1;
    }
  }
  iVar2 = iVar57 * 4;
  uVar50 = uVar46 - uVar1;
  iVar3 = *(int *)(this + 0x20) * 4;
  if (uVar46 < uVar1 || uVar50 == 0) {
    uVar49 = 0;
  }
  else {
    uVar49 = 0;
    if (uVar50 != 0) {
      uVar49 = (uint)((iVar3 + iVar57 * -4) * 0x400000) / uVar50;
    }
  }
  if (uVar46 < 0x3ff) {
    uVar50 = 0;
    if (0x3ff - uVar46 != 0) {
      uVar50 = (uint)((*(int *)(this + 0x20) * -4 + 0x3ff) * 0x400000) / (0x3ff - uVar46);
    }
  }
  else {
    uVar50 = 0;
  }
  uVar33 = (ulong)uVar1;
  lVar48 = 0;
  uVar54 = (ulong)uVar1;
  local_e0 = _DAT_004393f0;
  iStack_dc = _UNK_004393f4;
  iStack_d8 = _UNK_004393f8;
  iStack_d4 = _UNK_004393fc;
  uStack_c8 = _UNK_004393e8;
  uStack_d0 = _DAT_004393e0;
  uVar68 = _DAT_004393e0;
  uVar71 = _UNK_004393e8;
  uVar79 = _DAT_00439400;
  uVar81 = _UNK_00439408;
  uVar91 = _DAT_00439430;
  uVar92 = _UNK_00439438;
  uVar93 = _DAT_00439440;
  uVar94 = _UNK_00439448;
  uVar95 = _DAT_00439450;
  uVar96 = _UNK_00439458;
  uVar97 = _DAT_00439460;
  uVar98 = _UNK_00439468;
  uVar99 = _DAT_00439470;
  uVar100 = _UNK_00439478;
  uVar101 = _DAT_00439480;
  uVar102 = _UNK_00439488;
  uVar103 = _DAT_00439490;
  uVar104 = _UNK_00439498;
  uVar106 = _DAT_00439400;
  uVar109 = _UNK_00439408;
  uVar55 = _DAT_00439420;
  uVar56 = _UNK_00439428;
  iVar57 = _DAT_00439410;
  iVar60 = _UNK_00439414;
  iVar61 = _UNK_00439418;
  iVar63 = _UNK_0043941c;
  iVar87 = _DAT_00439410;
  iVar88 = _UNK_00439414;
  iVar89 = _UNK_00439418;
  iVar90 = _UNK_0043941c;
  iVar111 = _DAT_004393f0;
  iVar112 = _UNK_004393f4;
  iVar113 = _UNK_004393f8;
  iVar114 = _UNK_004393fc;
  do {
    bVar4 = uVar33 < uVar103;
    bVar10 = uVar54 < uVar104;
    bVar5 = uVar33 < uVar101;
    bVar11 = uVar54 < uVar102;
    bVar6 = uVar33 < uVar99;
    bVar12 = uVar54 < uVar100;
    bVar7 = uVar33 < uVar97;
    bVar13 = uVar54 < uVar98;
    bVar8 = uVar33 < uVar95;
    bVar14 = uVar54 < uVar96;
    bVar9 = uVar33 < uVar93;
    bVar15 = uVar54 < uVar94;
    lVar30 = -(ulong)(uVar33 < uVar55);
    bVar73 = (byte)((ulong)lVar30 >> 8);
    bVar74 = (byte)((ulong)lVar30 >> 0x10);
    bVar75 = (byte)((ulong)lVar30 >> 0x18);
    lVar31 = -(ulong)(uVar54 < uVar56);
    bVar76 = (byte)((ulong)lVar31 >> 8);
    bVar77 = (byte)((ulong)lVar31 >> 0x10);
    bVar78 = (byte)((ulong)lVar31 >> 0x18);
    auVar64[0] = -(uVar91 < uVar46) & -(uVar33 < uVar91);
    bVar84 = (byte)-(ulong)(uVar54 < uVar92);
    bVar85 = (byte)(-(ulong)(uVar54 < uVar92) >> 0x18);
    auVar64._1_3_ = 0;
    auVar64._4_4_ =
         (int)(CONCAT14((byte)(-(ulong)(uVar92 < uVar46) >> 0x18) & bVar85,
                        (uint)((byte)-(ulong)(uVar92 < uVar46) & bVar84) << 8) >> 8);
    lVar58 = -(ulong)(uVar55 < uVar46);
    lVar62 = -(ulong)(uVar56 < uVar46);
    auVar64[9] = (byte)((ulong)lVar58 >> 8) & bVar73;
    auVar64[8] = (byte)lVar58 & (byte)lVar30;
    auVar64[10] = (byte)((ulong)lVar58 >> 0x10) & bVar74;
    auVar64[0xb] = (byte)((ulong)lVar58 >> 0x18) & bVar75;
    auVar64[0xd] = (byte)((ulong)lVar62 >> 8) & bVar76;
    auVar64[0xc] = (byte)lVar62 & (byte)lVar31;
    auVar64[0xe] = (byte)((ulong)lVar62 >> 0x10) & bVar77;
    auVar64[0xf] = (byte)((ulong)lVar62 >> 0x18) & bVar78;
    bVar34 = (byte)(uVar51 * iVar87 >> 0x18);
    bVar35 = (byte)(uVar51 * iVar88 >> 0x18);
    bVar36 = (byte)(uVar51 * iVar89 >> 0x18);
    bVar37 = (byte)(uVar51 * iVar90 >> 0x18);
    bVar34 = bVar34 ^ (bVar34 ^ (byte)(iVar2 + ((iVar57 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar103 < uVar46) & -bVar4;
    bVar35 = bVar35 ^ (bVar35 ^ (byte)(iVar2 + ((iVar60 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar104 < uVar46) & -bVar10;
    bVar36 = bVar36 ^ (bVar36 ^ (byte)(iVar2 + ((iVar61 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar101 < uVar46) & -bVar5;
    bVar37 = bVar37 ^ (bVar37 ^ (byte)(iVar2 + ((iVar63 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar102 < uVar46) & -bVar11;
    iVar105 = (int)uVar106;
    iVar107 = (int)((ulong)uVar106 >> 0x20);
    iVar108 = (int)uVar109;
    iVar110 = (int)((ulong)uVar109 >> 0x20);
    iVar80 = (int)((ulong)uVar79 >> 0x20);
    iVar82 = (int)((ulong)uVar81 >> 0x20);
    bVar38 = (byte)(uVar51 * (int)uVar79 >> 0x18);
    bVar39 = (byte)(uVar51 * iVar80 >> 0x18);
    bVar40 = (byte)(uVar51 * (int)uVar81 >> 0x18);
    bVar41 = (byte)(uVar51 * iVar82 >> 0x18);
    bVar38 = bVar38 ^ (bVar38 ^ (byte)(iVar2 + ((iVar105 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar99 < uVar46) & -bVar6;
    bVar39 = bVar39 ^ (bVar39 ^ (byte)(iVar2 + ((iVar107 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar100 < uVar46) & -bVar12;
    bVar40 = bVar40 ^ (bVar40 ^ (byte)(iVar2 + ((iVar108 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar97 < uVar46) & -bVar7;
    bVar41 = bVar41 ^ (bVar41 ^ (byte)(iVar2 + ((iVar110 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar98 < uVar46) & -bVar13;
    bVar42 = (byte)(uVar51 * local_e0 >> 0x18);
    bVar43 = (byte)(uVar51 * iStack_dc >> 0x18);
    bVar44 = (byte)(uVar51 * iStack_d8 >> 0x18);
    bVar45 = (byte)(uVar51 * iStack_d4 >> 0x18);
    bVar42 = bVar42 ^ (bVar42 ^ (byte)(iVar2 + ((iVar111 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar95 < uVar46) & -bVar8;
    bVar43 = bVar43 ^ (bVar43 ^ (byte)(iVar2 + ((iVar112 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar96 < uVar46) & -bVar14;
    bVar44 = bVar44 ^ (bVar44 ^ (byte)(iVar2 + ((iVar113 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar93 < uVar46) & -bVar9;
    bVar45 = bVar45 ^ (bVar45 ^ (byte)(iVar2 + ((iVar114 - uVar1) * uVar49 >> 0x16) >> 2)) &
                      -(uVar94 < uVar46) & -bVar15;
    iVar67 = (int)uVar68;
    iVar69 = (int)((ulong)uVar68 >> 0x20);
    iVar70 = (int)uVar71;
    iVar72 = (int)((ulong)uVar71 >> 0x20);
    iVar83 = (int)((ulong)uStack_d0 >> 0x20);
    iVar86 = (int)((ulong)uStack_c8 >> 0x20);
    auVar65._0_4_ = uVar51 * (int)uStack_d0 >> 0x18;
    auVar65._4_4_ = uVar51 * iVar83 >> 0x18;
    auVar65._8_4_ = uVar51 * (int)uStack_c8 >> 0x18;
    auVar65._12_4_ = uVar51 * iVar86 >> 0x18;
    auVar66._0_4_ = iVar2 + ((iVar67 - uVar1) * uVar49 >> 0x16) >> 2;
    auVar66._4_4_ = iVar2 + ((iVar69 - uVar1) * uVar49 >> 0x16) >> 2;
    auVar66._8_4_ = iVar2 + ((iVar70 - uVar1) * uVar49 >> 0x16) >> 2;
    auVar66._12_4_ = iVar2 + ((iVar72 - uVar1) * uVar49 >> 0x16) >> 2;
    auVar65 = auVar65 ^ (auVar65 ^ auVar66) & auVar64;
    bVar16 = uVar46 <= uVar101;
    bVar22 = uVar46 <= uVar102;
    bVar17 = uVar46 <= uVar103;
    bVar23 = uVar46 <= uVar104;
    bVar18 = uVar46 <= uVar97;
    bVar24 = uVar46 <= uVar98;
    bVar19 = uVar46 <= uVar99;
    bVar25 = uVar46 <= uVar100;
    bVar20 = uVar46 <= uVar93;
    bVar26 = uVar46 <= uVar94;
    bVar21 = uVar46 <= uVar95;
    bVar27 = uVar46 <= uVar96;
    lVar58 = -(ulong)(uVar46 <= uVar55);
    lVar62 = -(ulong)(uVar46 <= uVar56);
    auVar59[0] = -(uVar33 < uVar91) & -(uVar46 <= uVar91);
    auVar59[9] = bVar73 & (byte)((ulong)lVar58 >> 8);
    auVar59[8] = (byte)lVar30 & (byte)lVar58;
    auVar59[10] = bVar74 & (byte)((ulong)lVar58 >> 0x10);
    auVar59[0xb] = bVar75 & (byte)((ulong)lVar58 >> 0x18);
    auVar59[0xd] = bVar76 & (byte)((ulong)lVar62 >> 8);
    auVar59[0xc] = (byte)lVar31 & (byte)lVar62;
    auVar59[0xe] = bVar77 & (byte)((ulong)lVar62 >> 0x10);
    auVar59[0xf] = bVar78 & (byte)((ulong)lVar62 >> 0x18);
    uVar53 = iVar3 + ((iVar70 - uVar46) * uVar50 >> 0x16);
    uVar47 = iVar3 + ((iVar72 - uVar46) * uVar50 >> 0x16);
    auVar59._1_3_ = 0;
    auVar59._4_4_ =
         (int)(CONCAT14(bVar85 & (byte)(-(ulong)(uVar46 <= uVar92) >> 0x18),
                        (uint)(bVar84 & (byte)-(ulong)(uVar46 <= uVar92)) << 8) >> 8);
    uVar52 = uVar53 >> 2;
    uVar32 = uVar47 >> 2;
    auVar29._6_2_ = 0;
    auVar29._0_6_ =
         (uint6)CONCAT14((char)(iVar3 + ((iVar69 - uVar46) * uVar50 >> 0x16) >> 2),
                         iVar3 + ((iVar67 - uVar46) * uVar50 >> 0x16) >> 2) & 0xffff0000ffff;
    auVar29[8] = (char)uVar52;
    auVar29[9] = (char)(uVar52 >> 8);
    auVar29[10] = (char)(uVar52 >> 0x10);
    auVar29[0xb] = (byte)(uVar53 >> 0x1a);
    auVar29[0xc] = (char)uVar32;
    auVar29[0xd] = (char)(uVar32 >> 8);
    auVar29[0xe] = (char)(uVar32 >> 0x10);
    auVar29[0xf] = (byte)(uVar47 >> 0x1a);
    auVar65 = auVar65 ^ (auVar65 ^ auVar29) & auVar59;
    uVar99 = uVar99 + 0x10;
    uVar100 = uVar100 + 0x10;
    uVar101 = uVar101 + 0x10;
    uVar102 = uVar102 + 0x10;
    uVar103 = uVar103 + 0x10;
    uVar104 = uVar104 + 0x10;
    uVar97 = uVar97 + 0x10;
    uVar98 = uVar98 + 0x10;
    uVar95 = uVar95 + 0x10;
    uVar96 = uVar96 + 0x10;
    uVar93 = uVar93 + 0x10;
    uVar94 = uVar94 + 0x10;
    uVar91 = uVar91 + 0x10;
    uVar92 = uVar92 + 0x10;
    uVar55 = uVar55 + 0x10;
    uVar56 = uVar56 + 0x10;
    pCVar28 = this + lVar48 + 0x2638;
    pCVar28[8] = (CFunctions)
                 (bVar42 ^ (bVar42 ^ (byte)(iVar3 + ((iVar111 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar8 & -bVar21);
    pCVar28[9] = (CFunctions)
                 (bVar43 ^ (bVar43 ^ (byte)(iVar3 + ((iVar112 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar14 & -bVar27);
    pCVar28[10] = (CFunctions)
                  (bVar44 ^ (bVar44 ^ (byte)(iVar3 + ((iVar113 - uVar46) * uVar50 >> 0x16) >> 2)) &
                            -bVar9 & -bVar20);
    pCVar28[0xb] = (CFunctions)
                   (bVar45 ^ (bVar45 ^ (byte)(iVar3 + ((iVar114 - uVar46) * uVar50 >> 0x16) >> 2)) &
                             -bVar15 & -bVar26);
    pCVar28[0xc] = auVar65[0];
    pCVar28[0xd] = auVar65[4];
    pCVar28[0xe] = auVar65[8];
    pCVar28[0xf] = auVar65[0xc];
    *pCVar28 = (CFunctions)
               (bVar34 ^ (bVar34 ^ (byte)(iVar3 + ((iVar57 - uVar46) * uVar50 >> 0x16) >> 2)) &
                         -bVar4 & -bVar17);
    pCVar28[1] = (CFunctions)
                 (bVar35 ^ (bVar35 ^ (byte)(iVar3 + ((iVar60 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar10 & -bVar23);
    pCVar28[2] = (CFunctions)
                 (bVar36 ^ (bVar36 ^ (byte)(iVar3 + ((iVar61 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar5 & -bVar16);
    pCVar28[3] = (CFunctions)
                 (bVar37 ^ (bVar37 ^ (byte)(iVar3 + ((iVar63 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar11 & -bVar22);
    pCVar28[4] = (CFunctions)
                 (bVar38 ^ (bVar38 ^ (byte)(iVar3 + ((iVar105 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar6 & -bVar19);
    pCVar28[5] = (CFunctions)
                 (bVar39 ^ (bVar39 ^ (byte)(iVar3 + ((iVar107 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar12 & -bVar25);
    pCVar28[6] = (CFunctions)
                 (bVar40 ^ (bVar40 ^ (byte)(iVar3 + ((iVar108 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar7 & -bVar18);
    pCVar28[7] = (CFunctions)
                 (bVar41 ^ (bVar41 ^ (byte)(iVar3 + ((iVar110 - uVar46) * uVar50 >> 0x16) >> 2)) &
                           -bVar13 & -bVar24);
    lVar48 = lVar48 + 0x10;
    iVar87 = iVar87 + 0x10;
    iVar88 = iVar88 + 0x10;
    iVar89 = iVar89 + 0x10;
    iVar90 = iVar90 + 0x10;
    uVar79 = CONCAT44(iVar80 + 0x10,(int)uVar79 + 0x10);
    uVar81 = CONCAT44(iVar82 + 0x10,(int)uVar81 + 0x10);
    local_e0 = local_e0 + 0x10;
    iStack_dc = iStack_dc + 0x10;
    iStack_d8 = iStack_d8 + 0x10;
    iStack_d4 = iStack_d4 + 0x10;
    uStack_d0 = CONCAT44(iVar83 + 0x10,(int)uStack_d0 + 0x10);
    uStack_c8 = CONCAT44(iVar86 + 0x10,(int)uStack_c8 + 0x10);
    iVar57 = iVar57 + 0x10;
    iVar60 = iVar60 + 0x10;
    iVar61 = iVar61 + 0x10;
    iVar63 = iVar63 + 0x10;
    uVar106 = CONCAT44(iVar107 + 0x10,iVar105 + 0x10);
    uVar109 = CONCAT44(iVar110 + 0x10,iVar108 + 0x10);
    iVar111 = iVar111 + 0x10;
    iVar112 = iVar112 + 0x10;
    iVar113 = iVar113 + 0x10;
    iVar114 = iVar114 + 0x10;
    uVar68 = CONCAT44(iVar69 + 0x10,iVar67 + 0x10);
    uVar71 = CONCAT44(iVar72 + 0x10,iVar70 + 0x10);
  } while (lVar48 != 0x400);
  return;
}


==================================================================

### FUNC 0016dfa8 (1396 bytes) name=SearchSeparateLine

/* CFunctions::SearchSeparateLine() */

void __thiscall CFunctions::SearchSeparateLine(CFunctions *this)

{
  undefined8 *puVar1;
  uint uVar2;
  long lVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  ushort *puVar6;
  ushort *puVar21;
  ushort *puVar36;
  ushort *puVar37;
  long lVar38;
  ushort *puVar39;
  ulong uVar40;
  uint uVar41;
  uint uVar42;
  ulong uVar43;
  ulong uVar44;
  uint uVar45;
  ushort *puVar46;
  uint uVar47;
  uint *puVar48;
  bool bVar49;
  undefined8 *puVar50;
  ulong uVar51;
  long lVar52;
  ulong uVar53;
  int iVar54;
  uint uVar55;
  uint uVar56;
  uint uVar57;
  int iVar58;
  int iVar59;
  int iVar60;
  int iVar61;
  int iVar62;
  int iVar63;
  int iVar64;
  ushort uVar65;
  float fVar66;
  undefined8 uVar67;
  float fVar68;
  float afStack_2038 [1024];
  uint local_1038 [2];
  undefined8 uStack_1030;
  undefined1 auStack_1024 [4076];
  long local_38;
  ushort *puVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  ushort *puVar11;
  ushort *puVar12;
  ushort *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  ushort *puVar16;
  ushort *puVar17;
  ushort *puVar18;
  ushort *puVar19;
  ushort *puVar20;
  ushort *puVar22;
  ushort *puVar23;
  ushort *puVar24;
  ushort *puVar25;
  ushort *puVar26;
  ushort *puVar27;
  ushort *puVar28;
  ushort *puVar29;
  ushort *puVar30;
  ushort *puVar31;
  ushort *puVar32;
  ushort *puVar33;
  ushort *puVar34;
  ushort *puVar35;
  
  lVar3 = tpidr_el0;
  local_38 = *(long *)(lVar3 + 0x28);
  uVar42 = *(uint *)(this + 0x1dac);
  uVar40 = (ulong)uVar42;
  if (uVar42 == 0) {
    uVar45 = 0;
    uVar41 = 0;
LAB_0016e108:
    uVar56 = 0;
  }
  else {
    uVar45 = *(uint *)(this + 0x1da8);
    puVar46 = *(ushort **)(this + 0x140);
    uVar43 = 0;
    uVar41 = uVar45 >> 2;
    uVar56 = uVar45 >> 2 & 7;
    uVar44 = (ulong)(uVar41 - 1) + 1;
    lVar52 = uVar44 - uVar56;
    do {
      if (uVar41 == 0) {
        uVar55 = 0;
      }
      else {
        if ((uVar44 < 8) || (lVar52 == 0)) {
          uVar55 = 0;
          puVar36 = puVar46;
          uVar57 = uVar41;
          goto LAB_0016e08c;
        }
        puVar36 = puVar46 + lVar52 * 4;
        puVar37 = puVar46 + 0x10;
        iVar54 = 0;
        iVar58 = 0;
        iVar59 = 0;
        iVar60 = 0;
        iVar61 = 0;
        iVar62 = 0;
        iVar63 = 0;
        iVar64 = 0;
        lVar38 = lVar52;
        do {
          puVar39 = puVar37 + -0x10;
          uVar65 = *puVar37;
          puVar6 = puVar37 + 1;
          puVar7 = puVar37 + 2;
          puVar8 = puVar37 + 3;
          puVar9 = puVar37 + 4;
          puVar10 = puVar37 + 5;
          puVar11 = puVar37 + 6;
          puVar12 = puVar37 + 7;
          puVar13 = puVar37 + 8;
          puVar14 = puVar37 + 9;
          puVar15 = puVar37 + 10;
          puVar16 = puVar37 + 0xb;
          puVar17 = puVar37 + 0xc;
          puVar18 = puVar37 + 0xd;
          puVar19 = puVar37 + 0xe;
          puVar20 = puVar37 + 0xf;
          puVar21 = puVar37 + -0xf;
          puVar22 = puVar37 + -0xe;
          puVar23 = puVar37 + -0xd;
          puVar24 = puVar37 + -0xc;
          puVar25 = puVar37 + -0xb;
          puVar26 = puVar37 + -10;
          puVar27 = puVar37 + -9;
          puVar28 = puVar37 + -8;
          puVar29 = puVar37 + -7;
          puVar30 = puVar37 + -6;
          puVar31 = puVar37 + -5;
          puVar32 = puVar37 + -4;
          puVar33 = puVar37 + -3;
          puVar34 = puVar37 + -2;
          puVar35 = puVar37 + -1;
          lVar38 = lVar38 + -8;
          puVar37 = puVar37 + 0x20;
          iVar61 = iVar61 + (uint)uVar65 + (uint)*puVar6 + (uint)*puVar7 + (uint)*puVar8;
          iVar62 = iVar62 + (uint)*puVar9 + (uint)*puVar10 + (uint)*puVar11 + (uint)*puVar12;
          iVar63 = iVar63 + (uint)*puVar13 + (uint)*puVar14 + (uint)*puVar15 + (uint)*puVar16;
          iVar64 = iVar64 + (uint)*puVar17 + (uint)*puVar18 + (uint)*puVar19 + (uint)*puVar20;
          iVar54 = iVar54 + (uint)*puVar39 + (uint)*puVar21 + (uint)*puVar22 + (uint)*puVar23;
          iVar58 = iVar58 + (uint)*puVar24 + (uint)*puVar25 + (uint)*puVar26 + (uint)*puVar27;
          iVar59 = iVar59 + (uint)*puVar28 + (uint)*puVar29 + (uint)*puVar30 + (uint)*puVar31;
          iVar60 = iVar60 + (uint)*puVar32 + (uint)*puVar33 + (uint)*puVar34 + (uint)*puVar35;
        } while (lVar38 != 0);
        uVar55 = iVar61 + iVar54 + iVar62 + iVar58 + iVar63 + iVar59 + iVar64 + iVar60;
        uVar57 = uVar41 - (int)lVar52;
        uVar2 = uVar56;
        while (uVar2 != 0) {
LAB_0016e08c:
          uVar55 = uVar55 + *puVar36 + (uint)puVar36[1] + (uint)puVar36[2] + (uint)puVar36[3];
          puVar36 = puVar36 + 4;
          uVar57 = uVar57 - 1;
          uVar2 = uVar57;
        }
        puVar46 = puVar46 + (ulong)(uVar41 - 1) * 4 + 4;
      }
      uVar57 = 0;
      if (uVar45 != 0) {
        uVar57 = uVar55 / uVar45;
      }
      local_1038[uVar43] = uVar57;
      uVar43 = uVar43 + 1;
    } while (uVar43 < uVar40);
    uVar41 = uVar42 >> 2;
    uVar45 = uVar42 * 7 >> 3;
    if (uVar41 == 0) goto LAB_0016e108;
    if (uVar42 < 0x20) {
      lVar52 = 0;
LAB_0016e160:
      uVar56 = 0;
LAB_0016e164:
      lVar38 = (ulong)uVar41 - lVar52;
      puVar48 = local_1038 + lVar52;
      do {
        lVar38 = lVar38 + -1;
        uVar56 = *puVar48 + uVar56;
        puVar48 = puVar48 + 1;
      } while (lVar38 != 0);
    }
    else {
      uVar55 = uVar42 >> 2 & 7;
      lVar52 = (ulong)uVar41 - (ulong)uVar55;
      if (lVar52 == 0) goto LAB_0016e160;
      iVar54 = 0;
      iVar58 = 0;
      iVar59 = 0;
      iVar60 = 0;
      puVar50 = (undefined8 *)&stack0xffffffffffffefd8;
      iVar61 = 0;
      iVar62 = 0;
      iVar63 = 0;
      iVar64 = 0;
      lVar38 = lVar52;
      do {
        puVar1 = puVar50 + -2;
        puVar4 = puVar50 + -1;
        puVar5 = puVar50 + 1;
        uVar67 = *puVar50;
        lVar38 = lVar38 + -8;
        puVar50 = puVar50 + 4;
        iVar54 = (int)*puVar1 + iVar54;
        iVar58 = (int)((ulong)*puVar1 >> 0x20) + iVar58;
        iVar59 = (int)*puVar4 + iVar59;
        iVar60 = (int)((ulong)*puVar4 >> 0x20) + iVar60;
        iVar61 = (int)uVar67 + iVar61;
        iVar62 = (int)((ulong)uVar67 >> 0x20) + iVar62;
        iVar63 = (int)*puVar5 + iVar63;
        iVar64 = (int)((ulong)*puVar5 >> 0x20) + iVar64;
      } while (lVar38 != 0);
      uVar56 = iVar61 + iVar54 + iVar62 + iVar58 + iVar63 + iVar59 + iVar64 + iVar60;
      if (uVar55 != 0) goto LAB_0016e164;
    }
  }
  uVar44 = (ulong)uVar41;
  if (uVar41 < uVar42) {
    uVar43 = uVar40 - uVar44;
    if ((uVar43 < 8) || (uVar51 = uVar43 & 0xfffffffffffffff8, uVar51 == 0)) {
      uVar55 = 0;
      uVar53 = uVar44;
    }
    else {
      iVar54 = 0;
      iVar58 = 0;
      iVar59 = 0;
      iVar60 = 0;
      puVar50 = (undefined8 *)(auStack_1024 + uVar44 * 4 + -4);
      iVar61 = 0;
      iVar62 = 0;
      iVar63 = 0;
      iVar64 = 0;
      uVar53 = uVar51;
      do {
        puVar1 = puVar50 + -2;
        puVar4 = puVar50 + -1;
        puVar5 = puVar50 + 1;
        uVar67 = *puVar50;
        uVar53 = uVar53 - 8;
        puVar50 = puVar50 + 4;
        iVar54 = (int)*puVar1 + iVar54;
        iVar58 = (int)((ulong)*puVar1 >> 0x20) + iVar58;
        iVar59 = (int)*puVar4 + iVar59;
        iVar60 = (int)((ulong)*puVar4 >> 0x20) + iVar60;
        iVar61 = (int)uVar67 + iVar61;
        iVar62 = (int)((ulong)uVar67 >> 0x20) + iVar62;
        iVar63 = (int)*puVar5 + iVar63;
        iVar64 = (int)((ulong)*puVar5 >> 0x20) + iVar64;
      } while (uVar53 != 0);
      uVar55 = iVar61 + iVar54 + iVar62 + iVar58 + iVar63 + iVar59 + iVar64 + iVar60;
      uVar53 = uVar51 + uVar44;
      if (uVar43 == uVar51) goto joined_r0x0016e1fc;
    }
    do {
      uVar43 = uVar53 + 1;
      uVar55 = local_1038[uVar53] + uVar55;
      uVar53 = uVar43;
    } while (uVar43 < uVar40);
  }
  else {
    uVar55 = 0;
  }
joined_r0x0016e1fc:
  if (uVar41 <= uVar45) {
    uVar57 = (uVar42 - 1) - uVar41;
    lVar52 = 0;
    do {
      fVar66 = (float)(uVar41 + (int)lVar52 + 1);
      fVar68 = fVar66 / (float)uVar42;
      uVar56 = local_1038[uVar44 + lVar52] + uVar56;
      uVar55 = uVar55 - local_1038[uVar44 + lVar52];
      fVar66 = (float)uVar56 / fVar66 - (float)uVar55 / (float)uVar57;
      lVar38 = lVar52 + 1;
      uVar57 = uVar57 - 1;
      afStack_2038[uVar44 + lVar52] = fVar66 * fVar68 * (1.0 - fVar68) * fVar66;
      lVar52 = lVar38;
    } while ((uVar45 + 1) - uVar44 != lVar38);
    if (uVar41 <= uVar45) {
      uVar40 = uVar44 + 1;
      if (uVar40 != uVar45 + 1) {
        fVar66 = afStack_2038[uVar44];
        bVar49 = NAN(fVar66);
        uVar44 = (ulong)uVar41;
        fVar68 = fVar66;
        do {
          if (!bVar49) {
            fVar66 = fVar68;
          }
          fVar68 = afStack_2038[uVar40];
          uVar56 = (uint)uVar44;
          if (fVar66 <= fVar68) {
            uVar56 = (uint)uVar40;
          }
          uVar44 = (ulong)uVar56;
          uVar40 = uVar40 + 1;
          bVar49 = fVar68 < fVar66;
        } while ((1 - (ulong)(uVar45 + 1)) + uVar40 != 1);
      }
      uVar56 = (uint)uVar44;
      if ((uVar56 != uVar41) && (uVar56 != uVar45)) {
        uVar45 = 0;
        uVar55 = 0;
        do {
          uVar40 = (ulong)uVar45;
          uVar45 = uVar45 + 1;
          uVar55 = local_1038[uVar40] + uVar55;
        } while (uVar45 <= uVar56);
        uVar45 = uVar56 + 1;
        if (uVar45 < uVar42) {
          uVar57 = (uVar42 - 2) - uVar56;
          uVar40 = (ulong)uVar57 + 1;
          if (uVar40 < 8) {
LAB_0016e3e8:
            uVar57 = 0;
            uVar40 = uVar44;
            uVar47 = uVar45;
          }
          else {
            uVar2 = uVar57 + 1 & 7;
            lVar52 = uVar40 - uVar2;
            if (lVar52 == 0) goto LAB_0016e3e8;
            uVar40 = lVar52 + uVar44;
            uVar47 = uVar45 + (int)lVar52;
            iVar54 = 0;
            iVar58 = 0;
            iVar59 = 0;
            iVar60 = 0;
            puVar50 = (undefined8 *)(auStack_1024 + uVar44 * 4);
            iVar61 = 0;
            iVar62 = 0;
            iVar63 = 0;
            iVar64 = 0;
            do {
              puVar1 = puVar50 + -2;
              puVar4 = puVar50 + -1;
              puVar5 = puVar50 + 1;
              uVar67 = *puVar50;
              lVar52 = lVar52 + -8;
              puVar50 = puVar50 + 4;
              iVar54 = (int)*puVar1 + iVar54;
              iVar58 = (int)((ulong)*puVar1 >> 0x20) + iVar58;
              iVar59 = (int)*puVar4 + iVar59;
              iVar60 = (int)((ulong)*puVar4 >> 0x20) + iVar60;
              iVar61 = (int)uVar67 + iVar61;
              iVar62 = (int)((ulong)uVar67 >> 0x20) + iVar62;
              iVar63 = (int)*puVar5 + iVar63;
              iVar64 = (int)((ulong)*puVar5 >> 0x20) + iVar64;
            } while (lVar52 != 0);
            uVar57 = iVar61 + iVar54 + iVar62 + iVar58 + iVar63 + iVar59 + iVar64 + iVar60;
            if (uVar2 == 0) goto LAB_0016e414;
          }
          puVar48 = local_1038 + uVar40;
          do {
            puVar48 = puVar48 + 1;
            uVar47 = uVar47 + 1;
            uVar57 = *puVar48 + uVar57;
          } while (uVar47 < uVar42);
        }
        else {
          uVar57 = 0;
        }
LAB_0016e414:
        uVar2 = 0;
        if (uVar45 != 0) {
          uVar2 = uVar55 / uVar45;
        }
        uVar45 = 0;
        if (uVar42 + ~uVar56 != 0) {
          uVar45 = uVar57 / (uVar42 + ~uVar56);
        }
        iVar58 = uVar2 - uVar45;
        iVar54 = -iVar58;
        if (-1 < iVar58) {
          iVar54 = iVar58;
        }
        if (((int)uVar45 <= (int)uVar2) && ((int)(uVar45 + uVar2) <= iVar54 * 0x80)) {
          *(uint *)(this + 0x4a48) = local_1038[uVar44];
          uVar45 = *(uint *)(this + 0x4a40);
          if ((uVar41 < uVar45) && (uVar45 <= uVar42 - 1)) {
            uVar42 = uVar42 >> 7;
            if (uVar42 < 2) {
              uVar42 = 1;
            }
            uVar41 = uVar42 + uVar45;
            if (uVar56 <= uVar42 + uVar45) {
              uVar41 = uVar56;
            }
            uVar56 = uVar45 - uVar42;
            if (uVar45 - uVar42 <= uVar41) {
              uVar56 = uVar41;
            }
          }
          uVar42 = 0;
          uVar45 = 0;
          do {
            uVar40 = (ulong)uVar42;
            uVar42 = uVar42 + 1;
            uVar45 = local_1038[uVar40] + uVar45;
          } while (uVar42 <= uVar56);
          uVar42 = 0;
          if (uVar56 + 1 != 0) {
            uVar42 = uVar45 / (uVar56 + 1);
          }
          *(uint *)(this + 0x4a40) = uVar56;
          *(uint *)(this + 0x4a44) = uVar42;
          goto LAB_0016e4f0;
        }
      }
    }
  }
  *(uint *)(this + 0x4a40) = uVar42 - 1;
  *(undefined4 *)(this + 0x4a44) = *(undefined4 *)(this + 0x1e00);
  *(undefined4 *)(this + 0x4a48) = 0;
LAB_0016e4f0:
  if (*(long *)(lVar3 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0016e51c (2032 bytes) name=HistDeRedundance

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CFunctions::HistDeRedundance() */

void __thiscall CFunctions::HistDeRedundance(CFunctions *this)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  uint uVar4;
  long lVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  size_t __n;
  uint uVar9;
  ushort *puVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  long lVar14;
  CFunctions *pCVar15;
  long lVar16;
  long lVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  int iVar21;
  uint uVar22;
  int iVar24;
  undefined1 auVar23 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  uint uVar33;
  int iVar34;
  uint uVar35;
  int iVar36;
  uint uVar37;
  int iVar38;
  uint uVar39;
  int iVar40;
  int iVar41;
  int iVar42;
  int iVar43;
  int iVar44;
  int iVar45;
  int iVar46;
  int iVar47;
  int iVar48;
  int iVar49;
  int iVar50;
  int iVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  int iVar55;
  uint local_1068 [2];
  long alStack_1060 [512];
  
  lVar5 = tpidr_el0;
  alStack_1060[0x1ff] = *(long *)(lVar5 + 0x28);
  iVar46 = *(int *)(this + 100);
  uVar33 = *(uint *)(this + 0x76d0);
  if ((iVar46 != 0) && (*(int *)(this + 0x10) == 0)) {
    uVar33 = (*(int *)(this + 0x4a40) + 1) * *(int *)(this + 0x1da8);
  }
  iVar27 = *(int *)(this + 0x1e18);
  uVar4 = uVar33 >> 0xc;
  if (uVar4 < 2) {
    uVar4 = 1;
  }
  uVar35 = *(int *)(this + 0x1e14) - iVar27;
  memset(this + 0x2a38,0,0x1000);
  if (uVar33 != 0) {
    puVar10 = *(ushort **)(this + 0x140);
    uVar37 = 0;
    if (uVar35 != 0) {
      uVar37 = 0xffc00000 / uVar35;
    }
    do {
      uVar33 = uVar33 - 1;
      uVar9 = ((uint)*puVar10 - iVar27) * uVar37 >> 0x16;
      *(int *)(this + (ulong)uVar9 * 4 + 0x2a38) = *(int *)(this + (ulong)uVar9 * 4 + 0x2a38) + 1;
      puVar10 = puVar10 + 1;
    } while (uVar33 != 0);
  }
  if (((iVar46 != 0) && (*(int *)(this + 0x10) == 0)) &&
     (*(uint *)(this + 0x4a40) < *(int *)(this + 0x1dac) - 1U)) {
    iVar18 = *(int *)(this + 0x4a48) * 0x20;
    if (iVar18 < *(int *)(this + 0x4a44) * 0x1f) {
      uVar33 = (*(int *)(this + 0x4a48) - iVar27) * 0x3ff;
      if (uVar35 <= uVar33) {
        uVar37 = 0;
        if (uVar35 != 0) {
          uVar37 = uVar33 / uVar35;
        }
        if (uVar37 < 2) {
          uVar37 = 1;
        }
        __n = (ulong)(uVar37 - 1) * 4 + 4;
LAB_0016e66c:
        memset(this + 0x2a38,0,__n);
      }
    }
    else if (*(int *)(this + 0x4a44) * 0x21 < iVar18) {
      __n = 0x1000;
      goto LAB_0016e66c;
    }
  }
  pCVar15 = this + 0x1e00;
  if (iVar46 != 0) {
    pCVar15 = this + 0x4a44;
  }
  uVar37 = (*(int *)pCVar15 - iVar27) * 0x3ff;
  uVar33 = 0;
  if (uVar35 != 0) {
    uVar33 = uVar37 / uVar35;
  }
  uVar9 = uVar33;
  if (*(int *)(this + 0x68) != 0) {
    if (uVar37 < uVar35) {
      uVar37 = 0;
      uVar35 = 0;
    }
    else {
      uVar2 = (ulong)uVar33;
      if (uVar33 < 2) {
        uVar2 = 1;
      }
      if (uVar2 < 8) {
        uVar13 = 0;
LAB_0016e760:
        uVar35 = 0;
        uVar37 = 0;
      }
      else {
        uVar13 = uVar2 & 0xfffffff8;
        if (uVar13 == 0) goto LAB_0016e760;
        uVar11 = 0;
        iVar21 = 0;
        iVar41 = 0;
        iVar43 = 0;
        iVar45 = 0;
        pCVar15 = this + 0x2a48;
        iVar47 = 0;
        iVar24 = 0;
        iVar28 = 0;
        iVar29 = 0;
        iVar30 = 0;
        iVar31 = 0;
        iVar32 = 0;
        iVar34 = 0;
        iVar36 = 0;
        iVar38 = 0;
        iVar40 = 0;
        iVar42 = 0;
        iVar46 = _DAT_00439410;
        iVar27 = _UNK_00439414;
        iVar18 = _UNK_00439418;
        iVar20 = _UNK_0043941c;
        do {
          uVar11 = uVar11 + 8;
          iVar44 = (int)*(undefined8 *)(pCVar15 + -0x10);
          iVar21 = iVar44 + iVar21;
          iVar48 = (int)((ulong)*(undefined8 *)(pCVar15 + -0x10) >> 0x20);
          iVar41 = iVar48 + iVar41;
          iVar49 = (int)*(undefined8 *)(pCVar15 + -8);
          iVar43 = iVar49 + iVar43;
          iVar50 = (int)((ulong)*(undefined8 *)(pCVar15 + -8) >> 0x20);
          iVar45 = iVar50 + iVar45;
          iVar51 = (int)*(undefined8 *)pCVar15;
          iVar47 = iVar51 + iVar47;
          iVar52 = (int)((ulong)*(undefined8 *)pCVar15 >> 0x20);
          iVar24 = iVar52 + iVar24;
          iVar53 = (int)*(undefined8 *)(pCVar15 + 8);
          iVar28 = iVar53 + iVar28;
          iVar54 = (int)((ulong)*(undefined8 *)(pCVar15 + 8) >> 0x20);
          iVar29 = iVar54 + iVar29;
          iVar30 = iVar30 + iVar44 * iVar46;
          iVar31 = iVar31 + iVar48 * iVar27;
          iVar32 = iVar32 + iVar49 * iVar18;
          iVar34 = iVar34 + iVar50 * iVar20;
          iVar36 = iVar36 + iVar51 * (iVar46 + 4);
          iVar38 = iVar38 + iVar52 * (iVar27 + 4);
          iVar40 = iVar40 + iVar53 * (iVar18 + 4);
          iVar42 = iVar42 + iVar54 * (iVar20 + 4);
          iVar46 = iVar46 + 8;
          iVar27 = iVar27 + 8;
          iVar18 = iVar18 + 8;
          iVar20 = iVar20 + 8;
          pCVar15 = pCVar15 + 0x20;
        } while (uVar11 != uVar13);
        uVar37 = iVar36 + iVar30 + iVar38 + iVar31 + iVar40 + iVar32 + iVar42 + iVar34;
        uVar35 = iVar47 + iVar21 + iVar24 + iVar41 + iVar28 + iVar43 + iVar29 + iVar45;
        if (uVar2 == uVar13) goto LAB_0016e788;
      }
      do {
        lVar17 = uVar13 * 4;
        uVar37 = uVar37 + *(int *)(this + lVar17 + 0x2a38) * (int)uVar13;
        uVar13 = uVar13 + 1;
        uVar35 = *(int *)(this + lVar17 + 0x2a38) + uVar35;
      } while (uVar13 < uVar33);
    }
LAB_0016e788:
    iVar46 = uVar33 + 1;
    if (iVar46 < 0x400) {
      uVar2 = (ulong)(-uVar33 + 0x3fe) + 1;
      lVar17 = (long)iVar46;
      if (uVar2 < 8) {
LAB_0016e85c:
        uVar22 = 0;
        uVar19 = 0;
        lVar12 = lVar17;
        iVar27 = iVar46;
LAB_0016e864:
        iVar27 = 0x400 - iVar27;
        do {
          iVar27 = iVar27 + -1;
          uVar19 = *(int *)(this + lVar12 * 4 + 0x2a38) + uVar19;
          uVar22 = uVar22 + *(int *)(this + lVar12 * 4 + 0x2a38) * (int)lVar12;
          lVar12 = lVar12 + 1;
        } while (iVar27 != 0);
      }
      else {
        uVar39 = -uVar33 + 0x3ff & 7;
        lVar14 = uVar2 - uVar39;
        if (lVar14 == 0) goto LAB_0016e85c;
        lVar16 = 0;
        lVar12 = lVar14 + lVar17;
        iVar27 = iVar46 + (int)lVar14;
        iVar18 = 0;
        iVar20 = 0;
        iVar21 = 0;
        iVar41 = 0;
        iVar43 = 0;
        iVar45 = 0;
        iVar47 = 0;
        iVar24 = 0;
        iVar28 = 0;
        iVar29 = 0;
        iVar30 = 0;
        iVar31 = 0;
        iVar40 = iVar46 + _DAT_00439410;
        iVar42 = iVar46 + _UNK_00439414;
        iVar44 = iVar46 + _UNK_00439418;
        iVar46 = iVar46 + _UNK_0043941c;
        iVar32 = 0;
        iVar34 = 0;
        iVar36 = 0;
        iVar38 = 0;
        do {
          lVar3 = lVar16 + lVar17;
          lVar16 = lVar16 + 8;
          iVar48 = (int)*(undefined8 *)(this + lVar3 * 4 + 0x2a38);
          iVar18 = iVar48 + iVar18;
          iVar49 = (int)((ulong)*(undefined8 *)(this + lVar3 * 4 + 0x2a38) >> 0x20);
          iVar20 = iVar49 + iVar20;
          iVar50 = (int)*(undefined8 *)(this + lVar3 * 4 + 0x2a40);
          iVar21 = iVar50 + iVar21;
          iVar51 = (int)((ulong)*(undefined8 *)(this + lVar3 * 4 + 0x2a40) >> 0x20);
          iVar41 = iVar51 + iVar41;
          iVar52 = (int)*(undefined8 *)(this + lVar3 * 4 + 0x2a48);
          iVar43 = iVar52 + iVar43;
          iVar53 = (int)((ulong)*(undefined8 *)(this + lVar3 * 4 + 0x2a48) >> 0x20);
          iVar45 = iVar53 + iVar45;
          iVar54 = (int)*(undefined8 *)(this + lVar3 * 4 + 0x2a50);
          iVar47 = iVar54 + iVar47;
          iVar55 = (int)((ulong)*(undefined8 *)(this + lVar3 * 4 + 0x2a50) >> 0x20);
          iVar24 = iVar55 + iVar24;
          iVar28 = iVar28 + iVar48 * iVar40;
          iVar29 = iVar29 + iVar49 * iVar42;
          iVar30 = iVar30 + iVar50 * iVar44;
          iVar31 = iVar31 + iVar51 * iVar46;
          iVar32 = iVar32 + iVar52 * (iVar40 + 4);
          iVar34 = iVar34 + iVar53 * (iVar42 + 4);
          iVar36 = iVar36 + iVar54 * (iVar44 + 4);
          iVar38 = iVar38 + iVar55 * (iVar46 + 4);
          iVar40 = iVar40 + 8;
          iVar42 = iVar42 + 8;
          iVar44 = iVar44 + 8;
          iVar46 = iVar46 + 8;
        } while (lVar16 != lVar14);
        uVar22 = iVar32 + iVar28 + iVar34 + iVar29 + iVar36 + iVar30 + iVar38 + iVar31;
        uVar19 = iVar43 + iVar18 + iVar45 + iVar20 + iVar47 + iVar21 + iVar24 + iVar41;
        if (uVar39 != 0) goto LAB_0016e864;
      }
      if ((uVar35 != 0) && (uVar19 != 0)) {
        uVar9 = 0;
        if (uVar35 != 0) {
          uVar9 = uVar37 / uVar35;
        }
        uVar35 = 0;
        if (uVar19 != 0) {
          uVar35 = uVar22 / uVar19;
        }
        uVar9 = uVar35 + uVar9 >> 1;
        if (uVar9 <= uVar33) {
          uVar9 = uVar33;
        }
      }
    }
  }
  iVar46 = *(int *)(this + 0x30);
  iVar27 = *(int *)(this + 0x2a38);
  if (99 < iVar46) {
    iVar46 = 100;
  }
  if (iVar46 < -99) {
    iVar46 = -100;
  }
  pCVar15 = this + 0x2a4c;
  lVar17 = 0x3f8;
  iVar18 = iVar27;
  iVar20 = iVar27;
  iVar21 = iVar27;
  do {
    auVar26 = *(undefined1 (*) [16])(pCVar15 + -0x10);
    lVar17 = lVar17 + -8;
    auVar25._4_4_ = iVar18;
    auVar25._0_4_ = iVar27;
    auVar25._8_4_ = iVar20;
    auVar25._12_4_ = iVar21;
    auVar25 = NEON_ext(auVar25,auVar26,0xc,1);
    iVar20 = (int)*(undefined8 *)(pCVar15 + 8);
    iVar21 = (int)((ulong)*(undefined8 *)(pCVar15 + 8) >> 0x20);
    iVar27 = (int)*(undefined8 *)pCVar15;
    iVar18 = (int)((ulong)*(undefined8 *)pCVar15 >> 0x20);
    *(uint *)(pCVar15 + -0xc) = (uint)(auVar26._8_4_ + auVar25._8_4_) >> 1;
    *(uint *)(pCVar15 + -8) = (uint)(auVar26._12_4_ + auVar25._12_4_) >> 1;
    *(uint *)(pCVar15 + -0x14) = (uint)(auVar26._0_4_ + auVar25._0_4_) >> 1;
    *(uint *)(pCVar15 + -0x10) = (uint)(auVar26._4_4_ + auVar25._4_4_) >> 1;
    auVar6._12_4_ = iVar21;
    auVar6._0_12_ = *(undefined1 (*) [12])pCVar15;
    auVar25 = NEON_ext(auVar26,auVar6,0xc,1);
    *(uint *)(pCVar15 + 4) = (uint)(iVar20 + auVar25._8_4_) >> 1;
    *(uint *)(pCVar15 + 8) = (uint)(iVar21 + auVar25._12_4_) >> 1;
    *(uint *)(pCVar15 + -4) = (uint)(iVar27 + auVar25._0_4_) >> 1;
    *(uint *)pCVar15 = (uint)(iVar18 + auVar25._4_4_) >> 1;
    pCVar15 = pCVar15 + 0x20;
  } while (lVar17 != 0);
  *(uint *)(this + 0x3a18) = (uint)(*(int *)(this + 0x3a1c) + iVar21) >> 1;
  *(uint *)(this + 0x3a1c) = (uint)(*(int *)(this + 0x3a20) + *(int *)(this + 0x3a1c)) >> 1;
  *(uint *)(this + 0x3a20) = (uint)(*(int *)(this + 0x3a24) + *(int *)(this + 0x3a20)) >> 1;
  *(uint *)(this + 0x3a24) = (uint)(*(int *)(this + 0x3a28) + *(int *)(this + 0x3a24)) >> 1;
  *(uint *)(this + 0x3a28) = (uint)(*(int *)(this + 0x3a2c) + *(int *)(this + 0x3a28)) >> 1;
  *(uint *)(this + 0x3a2c) = (uint)(*(int *)(this + 0x3a30) + *(int *)(this + 0x3a2c)) >> 1;
  uVar33 = (uint)(*(int *)(this + 0x3a34) + *(int *)(this + 0x3a30)) >> 1;
  uVar35 = 0;
  if (uVar4 != 0) {
    uVar35 = 0x10000 / uVar4;
  }
  *(uint *)(this + 0x3a30) = uVar33;
  *(uint *)(this + 0x3a34) = uVar33;
  if (-1 < (int)uVar9) {
    uVar33 = 0;
    iVar27 = 0;
    lVar17 = (long)(int)uVar9 + 1;
    pCVar15 = this + (long)(int)uVar9 * 4 + 0x2a38;
    do {
      lVar17 = lVar17 + -1;
      uVar33 = *(int *)pCVar15 + uVar33;
      if (uVar4 <= uVar33) {
        iVar27 = iVar27 + 1;
        uVar33 = 0;
      }
      *(uint *)(pCVar15 + 0x1000) = iVar27 * 0x100 + (uVar33 * uVar35 >> 8);
      pCVar15 = pCVar15 + -4;
    } while (0 < lVar17);
  }
  iVar27 = uVar9 + 1;
  if (iVar27 < 0x400) {
    uVar33 = 0;
    iVar18 = 0;
    lVar17 = (long)iVar27 + -1;
    pCVar15 = this + (long)iVar27 * 4 + 0x2a38;
    do {
      uVar33 = *(int *)pCVar15 + uVar33;
      if (uVar33 < uVar4 << 3) {
        if (uVar4 <= uVar33) {
          iVar18 = iVar18 + 1;
          uVar33 = 0;
        }
      }
      else {
        uVar33 = 0;
        iVar18 = iVar18 + 2;
      }
      lVar17 = lVar17 + 1;
      *(uint *)(pCVar15 + 0x1000) = (uVar33 * uVar35 >> 8) + iVar18 * 0x100;
      pCVar15 = pCVar15 + 4;
    } while (lVar17 < 0x3ff);
  }
  iVar18 = *(int *)(this + 0x34);
  uVar33 = (uint)(*(int *)(this + 0x24) * 1000) >> (ulong)(*(uint *)(this + 0x76e4) & 0x1f);
  if (0xfffe < uVar33) {
    uVar33 = 0xffff;
  }
  iVar20 = iVar18;
  if (iVar18 < -99) {
    iVar20 = -100;
  }
  iVar21 = iVar18;
  if (99 < iVar18) {
    iVar21 = 100;
  }
  if (iVar18 < 0) {
    iVar21 = iVar20;
  }
  iVar18 = (iVar18 >> 0x1f & 0xffffff9cU) + 0x96;
  iVar20 = 0;
  if (iVar18 != 0) {
    iVar20 = (int)(uVar33 * iVar21) / iVar18;
  }
  uVar33 = uVar33 - iVar20;
  if ((*(int *)(this + 0x1200) != 0) && (0.0 < *(float *)(this + 0x74))) {
    if (*(int *)(this + 0x1310) == 2) {
      iVar18 = *(int *)(this + 0x1320);
      iVar20 = *(int *)(this + 0x131c);
      if (iVar18 - iVar20 != 50000) goto LAB_0016eb54;
    }
    else {
      if (*(int *)(this + 0x1310) != 1) goto LAB_0016eb54;
      iVar18 = *(int *)(this + 0x1320);
      iVar20 = *(int *)(this + 0x131c);
    }
    iVar18 = iVar18 + iVar20;
    if (iVar18 < 0) {
      iVar18 = iVar18 + 1;
    }
    uVar33 = uVar33 + (int)((*(float *)(this + 0x74) *
                            (float)(int)((*(int *)(this + 0x3c) - (iVar18 >> 1)) * uVar33)) /
                           DAT_004394f4);
  }
LAB_0016eb54:
  iVar46 = (iVar46 * 0x1bf) / 200;
  if ((int)uVar33 < 0x81) {
    uVar33 = 0x80;
  }
  uVar35 = (*(int *)(this + 0x1e14) - *(int *)(this + 0x1e18)) * 0x10;
  uVar4 = 0;
  if (uVar33 != 0) {
    uVar4 = uVar35 / uVar33;
  }
  if (0x1ff < uVar4) {
    uVar4 = 0x200;
  }
  auVar26._4_4_ = _UNK_00439414;
  auVar26._0_4_ = _DAT_00439410;
  auVar26._8_4_ = _UNK_00439418;
  auVar26._12_4_ = _UNK_0043941c;
  if (uVar35 < uVar33) {
    uVar4 = 1;
  }
  lVar17 = 0;
  auVar23._8_4_ = 1;
  auVar23._0_8_ = 0x100000001;
  auVar23._12_4_ = 1;
  do {
    iVar18 = auVar26._4_4_;
    iVar20 = auVar26._8_4_;
    iVar21 = auVar26._12_4_;
    uVar33 = (auVar26._0_4_ * 4 + 0x1800) * uVar4 >> 0xd;
    uVar35 = (iVar18 * 4 + 0x1800) * uVar4 >> 0xd;
    uVar37 = (iVar20 * 4 + 0x1800) * uVar4 >> 0xd;
    uVar39 = (iVar21 * 4 + 0x1800) * uVar4 >> 0xd;
    iVar41 = -(uint)(uVar33 == 0);
    iVar43 = -(uint)(uVar35 == 0);
    iVar45 = -(uint)(uVar37 == 0);
    iVar47 = -(uint)(uVar39 == 0);
    auVar8[1] = ~(byte)((uint)iVar41 >> 8);
    auVar8[0] = ~(byte)iVar41;
    auVar8[2] = ~(byte)((uint)iVar41 >> 0x10);
    auVar8[3] = ~(byte)((uint)iVar41 >> 0x18);
    auVar8[4] = ~(byte)iVar43;
    auVar8[5] = ~(byte)((uint)iVar43 >> 8);
    auVar8[6] = ~(byte)((uint)iVar43 >> 0x10);
    auVar8[7] = ~(byte)((uint)iVar43 >> 0x18);
    auVar8[8] = ~(byte)iVar45;
    auVar8[9] = ~(byte)((uint)iVar45 >> 8);
    auVar8[10] = ~(byte)((uint)iVar45 >> 0x10);
    auVar8[0xb] = ~(byte)((uint)iVar45 >> 0x18);
    auVar8[0xc] = ~(byte)iVar47;
    auVar8[0xd] = ~(byte)((uint)iVar47 >> 8);
    auVar8[0xe] = ~(byte)((uint)iVar47 >> 0x10);
    auVar7._4_4_ = uVar35;
    auVar7._0_4_ = uVar33;
    auVar7._8_4_ = uVar37;
    auVar7._12_4_ = uVar39;
    auVar8[0xf] = 0;
    auVar25 = auVar23 ^ (auVar23 ^ auVar7) & auVar8;
    *(long *)((long)alStack_1060 + lVar17) = auVar25._8_8_;
    *(long *)((long)alStack_1060 + lVar17 + -8) = auVar25._0_8_;
    lVar17 = lVar17 + 0x10;
    auVar26._0_4_ = auVar26._0_4_ + 4;
    auVar26._4_4_ = iVar18 + 4;
    auVar26._8_4_ = iVar20 + 4;
    auVar26._12_4_ = iVar21 + 4;
  } while (lVar17 != 0x1000);
  uVar33 = *(uint *)(this + 0x3a38);
  if ((uVar33 != 0) && (-1 < (int)uVar9)) {
    uVar4 = (iVar46 + 0x1c0) * 0x10;
    lVar17 = (long)(int)uVar9;
    uVar35 = 0;
    uVar37 = uVar4;
    if (uVar33 != 0) {
      uVar35 = (uint)((iVar46 + 0x1c0) * 0x40000) / uVar33;
    }
    do {
      uVar9 = *(uint *)((long)alStack_1060 + lVar17 * 4 + -8);
      uVar39 = uVar4 - (*(int *)(this + lVar17 * 4 + 0x3a38) * uVar35 >> 0xe);
      uVar33 = uVar37 - uVar9;
      if (uVar37 - uVar39 <= uVar9) {
        uVar33 = uVar39;
      }
      this[lVar17 + 0x2638] = SUB41(uVar33 >> 6,0);
      bVar1 = 0 < lVar17;
      lVar17 = lVar17 + -1;
      uVar37 = uVar33;
    } while (bVar1);
  }
  uVar33 = *(uint *)(this + 0x4a34);
  if ((uVar33 != 0) && (iVar27 < 0x400)) {
    lVar17 = (long)iVar27;
    uVar4 = iVar46 * 0x10 + 0x1bf0;
    uVar35 = 0;
    uVar37 = uVar4;
    if (uVar33 != 0) {
      uVar35 = (uint)((0x240 - iVar46) * 0x40000) / uVar33;
    }
    do {
      uVar39 = *(uint *)((long)alStack_1060 + lVar17 * 4 + -8);
      uVar33 = uVar4 + (*(int *)(this + lVar17 * 4 + 0x3a38) * uVar35 >> 0xe);
      uVar9 = uVar39 + uVar37;
      if (uVar33 - uVar37 <= uVar39) {
        uVar9 = uVar33;
      }
      this[lVar17 + 0x2638] = SUB41(uVar9 >> 6,0);
      bVar1 = lVar17 < 0x3ff;
      lVar17 = lVar17 + 1;
      uVar37 = uVar9;
    } while (bVar1);
  }
  if (*(long *)(lVar5 + 0x28) == alStack_1060[0x1ff]) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0016ed0c (684 bytes) name=IsothermalPalette

/* CFunctions::IsothermalPalette() */

void __thiscall CFunctions::IsothermalPalette(CFunctions *this)

{
  CFunctions *__dest;
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  ulong uVar7;
  long lVar8;
  ulong uVar9;
  CFunctions *pCVar10;
  ulong uVar11;
  ulong uVar12;
  ulong uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  
  uVar16 = *(uint *)(this + 0x1da8);
  uVar1 = *(uint *)(this + 0x76d0);
  uVar2 = *(uint *)(this + 0x1e14);
  uVar3 = *(uint *)(this + 0x1e18);
  iVar4 = *(int *)(this + 0x18);
  uVar15 = 0;
  uVar18 = 0xffff;
  uVar14 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar5 = ReviseTemperature(this,(ushort)uVar14,(uVar16 >> 1) + (uVar1 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar5 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar5);
    }
    if ((int)uVar5 <= iVar4) {
      uVar15 = uVar14;
      uVar14 = uVar18;
    }
    uVar18 = uVar14;
    uVar14 = uVar15 + uVar18 >> 1;
  } while (uVar15 + 1 < uVar18);
  uVar1 = *(uint *)(this + 0x1da8);
  uVar14 = *(uint *)(this + 0x76d0);
  iVar4 = *(int *)(this + 0x14);
  uVar16 = 0;
  uVar17 = 0xffff;
  uVar5 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar6 = ReviseTemperature(this,(ushort)uVar5,(uVar1 >> 1) + (uVar14 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar6 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar6);
    }
    if ((int)uVar6 <= iVar4) {
      uVar16 = uVar5;
      uVar5 = uVar17;
    }
    uVar17 = uVar5;
    uVar5 = uVar16 + uVar17 >> 1;
  } while (uVar16 + 1 < uVar17);
  uVar15 = uVar15 + uVar18 >> 1;
  uVar16 = uVar16 + uVar17 >> 1;
  if (uVar2 < uVar15) {
    uVar15 = 0x100;
joined_r0x0016eeac:
    if (uVar2 < uVar16) goto LAB_0016ee60;
LAB_0016ee7c:
    if (uVar16 < uVar3) {
      uVar16 = 0xffffffff;
    }
    else {
      uVar1 = 0;
      if (uVar2 - uVar3 != 0) {
        uVar1 = ((uVar16 - uVar3) * 0x3ff) / (uVar2 - uVar3);
      }
      uVar16 = (uint)(byte)this[(ulong)uVar1 + 0x2638];
    }
  }
  else {
    if (uVar3 <= uVar15) {
      uVar1 = 0;
      if (uVar2 - uVar3 != 0) {
        uVar1 = ((uVar15 - uVar3) * 0x3ff) / (uVar2 - uVar3);
      }
      uVar15 = (uint)(byte)this[(ulong)uVar1 + 0x2638];
      goto joined_r0x0016eeac;
    }
    uVar15 = 0xffffffff;
    if (uVar16 <= uVar2) goto LAB_0016ee7c;
LAB_0016ee60:
    uVar16 = 0x100;
  }
  __dest = this + 0x5b0;
  memcpy(__dest,this + 0x188,0x400);
  uVar16 = uVar16 & ((int)uVar16 >> 0x1f ^ 0xffffffffU);
  uVar12 = (ulong)uVar16;
  if (0xfe < (int)uVar15) {
    uVar15 = 0xff;
  }
  if ((int)uVar16 <= (int)uVar15) {
    uVar7 = (ulong)(int)uVar15;
    uVar9 = uVar7;
    if ((long)uVar7 <= (long)uVar12) {
      uVar9 = uVar12;
    }
    uVar9 = (uVar9 + 1) - uVar12;
    if ((0x1f < uVar9) && (uVar11 = uVar9 & 0xffffffffffffffe0, uVar11 != 0)) {
      pCVar10 = this + uVar12 * 4 + 0x5f0;
      uVar13 = uVar11;
      do {
        *(undefined8 *)(pCVar10 + -0x18) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x20) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -8) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x10) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x38) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x40) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x28) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + -0x30) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x28) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x20) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x38) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x30) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 8) = 0xff000000ff00;
        *(undefined8 *)pCVar10 = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x18) = 0xff000000ff00;
        *(undefined8 *)(pCVar10 + 0x10) = 0xff000000ff00;
        uVar13 = uVar13 - 0x20;
        pCVar10 = pCVar10 + 0x80;
      } while (uVar13 != 0);
      uVar12 = uVar11 + uVar12;
      if (uVar9 == uVar11) goto LAB_0016ef80;
    }
    lVar8 = uVar12 - 1;
    pCVar10 = this + uVar12 * 4 + 0x5b3;
    do {
      lVar8 = lVar8 + 1;
      *(undefined4 *)(pCVar10 + -3) = 0xff00;
      pCVar10 = pCVar10 + 4;
    } while (lVar8 < (long)uVar7);
  }
LAB_0016ef80:
  memcpy(this + 0x9d8,__dest,0x400);
  memcpy(this + 0xe00,__dest,0x400);
  return;
}


==================================================================

### FUNC 0016efb8 (488 bytes) name=MapTemperature

/* CFunctions::MapTemperature(int) */

void CFunctions::MapTemperature(int param_1)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  ulong uVar5;
  int iVar6;
  uint uVar7;
  undefined1 *puVar8;
  long lVar9;
  int iVar10;
  uint uVar11;
  ushort *puVar12;
  uint uVar13;
  uint uVar14;
  
  uVar5 = (ulong)(uint)param_1;
  iVar2 = *(int *)(uVar5 + 0x1e14);
  iVar3 = *(int *)(uVar5 + 0x1e18);
  puVar8 = *(undefined1 **)(uVar5 + 0x170);
  puVar12 = *(ushort **)(uVar5 + 0x140);
  memset((void *)(uVar5 + 0x1e38),0,0x400);
  iVar6 = *(int *)(uVar5 + 0x76d0);
  if (iVar6 != 0) {
    uVar4 = iVar2 - iVar3;
    uVar7 = 0;
    if (uVar4 != 0) {
      uVar7 = 0xffc00000 / uVar4;
    }
    do {
      iVar6 = iVar6 + -1;
      uVar4 = ((uint)*puVar12 - iVar3) * uVar7;
      lVar9 = uVar5 + 0x1de0 + (ulong)(uVar4 >> 0x18) * 4;
      *puVar8 = *(undefined1 *)(uVar5 + 0x1de0 + (ulong)(uVar4 >> 0x16) + 0x858);
      *(int *)(lVar9 + 0x58) = *(int *)(lVar9 + 0x58) + 1;
      puVar8 = puVar8 + 1;
      puVar12 = puVar12 + 1;
    } while (iVar6 != 0);
  }
  uVar4 = *(uint *)(uVar5 + 0x1db8);
  lVar9 = *(long *)(uVar5 + 0x180);
  *(undefined4 *)(uVar5 + 0x1e24) = 1;
  if (*(int *)(uVar5 + 0x6c) == 0) {
    uVar7 = *(uint *)(uVar5 + 0x1dbc) - 1;
    if (*(uint *)(uVar5 + 0x1dbc) < 2) {
      uVar11 = 0;
    }
    else {
      uVar11 = 0;
      if (uVar7 != 0) {
        uVar11 = 0xff0000 / uVar7;
      }
    }
    if (-1 < (int)uVar7) {
      uVar13 = uVar11 * uVar7;
      uVar14 = uVar4 * uVar7;
      do {
        memset((void *)(lVar9 + (ulong)uVar14),uVar13 >> 0x10,(ulong)uVar4);
        uVar7 = uVar7 - 1;
        uVar13 = uVar13 - uVar11;
        uVar14 = uVar14 - uVar4;
      } while (-1 < (int)uVar7);
    }
  }
  else {
    iVar2 = *(int *)(uVar5 + 0x1e18);
    iVar3 = *(int *)(uVar5 + 0x1dfc) - iVar2;
    if ((iVar3 == 0) || (iVar6 = *(int *)(uVar5 + 0x1e14) - iVar2, iVar6 == 0)) {
      iVar10 = 0;
    }
    else {
      iVar10 = 0;
      if (iVar6 != 0) {
        iVar10 = (iVar3 * 0x3ff) / iVar6;
      }
    }
    iVar3 = *(int *)(uVar5 + 0x1df8) - iVar2;
    if ((iVar3 == 0) || (iVar2 = *(int *)(uVar5 + 0x1e14) - iVar2, iVar2 == 0)) {
      iVar6 = 0x3ff;
    }
    else {
      iVar6 = 0;
      if (iVar2 != 0) {
        iVar6 = (iVar3 * 0x3ff) / iVar2;
      }
    }
    uVar7 = *(int *)(uVar5 + 0x1dbc) - 1;
    if (*(int *)(uVar5 + 0x1dbc) == 0 || uVar7 == 0) {
      uVar11 = 0;
    }
    else {
      uVar11 = 0;
      if (uVar7 != 0) {
        uVar11 = (uint)((iVar6 - iVar10) * 0x10000) / uVar7;
      }
    }
    if (-1 < (int)uVar7) {
      uVar13 = uVar7 * uVar11;
      uVar14 = uVar7 * uVar4;
      do {
        uVar1 = iVar10 + (uVar13 >> 0x10);
        if (0x3fe < uVar1) {
          uVar1 = 0x3ff;
        }
        memset((void *)(lVar9 + (ulong)uVar14),(uint)*(byte *)(uVar5 + uVar1 + 0x2638),(ulong)uVar4)
        ;
        uVar7 = uVar7 - 1;
        uVar13 = uVar13 - uVar11;
        uVar14 = uVar14 - uVar4;
      } while (-1 < (int)uVar7);
    }
  }
  return;
}


==================================================================

### FUNC 0016f1a0 (184 bytes) name=SearchInnerTemp

/* CFunctions::SearchInnerTemp(int) */

uint __thiscall CFunctions::SearchInnerTemp(CFunctions *this,int param_1)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  
  uVar1 = *(uint *)(this + 0x1da8);
  uVar2 = *(uint *)(this + 0x76d0);
  uVar5 = 0;
  uVar6 = 0xffff;
  uVar4 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar3 = ReviseTemperature(this,(ushort)uVar4,(uVar1 >> 1) + (uVar2 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar3 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar3);
    }
    if ((int)uVar3 <= param_1) {
      uVar5 = uVar4;
      uVar4 = uVar6;
    }
    uVar6 = uVar4;
    uVar4 = uVar5 + uVar6 >> 1;
  } while (uVar5 + 1 < uVar6);
  return uVar4;
}


==================================================================

### FUNC 0016f258 (268 bytes) name=SearchInnerGray

/* CFunctions::SearchInnerGray(int) */

ulong __thiscall CFunctions::SearchInnerGray(CFunctions *this,int param_1)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  ulong uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  
  uVar1 = *(uint *)(this + 0x1da8);
  uVar3 = *(uint *)(this + 0x76d0);
  uVar7 = 0;
  uVar8 = 0xffff;
  uVar6 = 0x7fff;
  *(undefined4 *)(this + 0x54) = 1;
  do {
    uVar4 = ReviseTemperature(this,(ushort)uVar6,(uVar1 >> 1) + (uVar3 >> 1),0);
    if ((*(int *)(this + 0x54) != 0) || (*(int *)(this + 0x58) != 0)) {
      uVar4 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar4);
    }
    if ((int)uVar4 <= param_1) {
      uVar7 = uVar6;
      uVar6 = uVar8;
    }
    uVar8 = uVar6;
    uVar6 = uVar7 + uVar8 >> 1;
  } while (uVar7 + 1 < uVar8);
  uVar7 = uVar7 + uVar8 >> 1;
  if ((*(int *)(this + 0x1e14) < (int)uVar7) || (*(int *)(this + 0x1df8) < (int)uVar7)) {
    uVar5 = 0x100;
  }
  else {
    iVar2 = *(int *)(this + 0x1e18);
    if ((int)uVar7 < iVar2) {
      uVar5 = 0;
    }
    else {
      uVar1 = *(int *)(this + 0x1e14) - iVar2;
      uVar3 = 0;
      if (uVar1 != 0) {
        uVar3 = 0xffc00000 / uVar1;
      }
      uVar5 = (ulong)(byte)this[(ulong)(uVar3 * (uVar7 - iVar2) >> 0x16) + 0x2638];
    }
  }
  return uVar5;
}


==================================================================

### FUNC 0016f364 (72 bytes) name=GetOriginalBMPDataPointer

/* CFunctions::GetOriginalBMPDataPointer() */

undefined8 __thiscall CFunctions::GetOriginalBMPDataPointer(CFunctions *this)

{
  undefined8 uVar1;
  
  if ((*(int *)(this + 0xe0) == 0) || (*(int *)(this + 0xec) == 0)) {
    uVar1 = 0;
  }
  else {
    if (*(int *)(this + 0x1e24) == 0) {
      MapTemperature((int)this);
    }
    uVar1 = *(undefined8 *)(this + 0x170);
  }
  return uVar1;
}


==================================================================

### FUNC 0016f3ac (276 bytes) name=CalResponse

/* CFunctions::CalResponse(unsigned short const*, unsigned short const*) */

void __thiscall CFunctions::CalResponse(CFunctions *this,ushort *param_1,ushort *param_2)

{
  ushort *puVar1;
  ushort uVar2;
  undefined2 *puVar3;
  int iVar4;
  ulong uVar5;
  
  memset(this + 0x2238,0,0x400);
  if (*(uint *)(this + 0x76d0) >> 2 != 0) {
    puVar3 = *(undefined2 **)(this + 0x118);
    iVar4 = -(*(uint *)(this + 0x76d0) >> 2);
    do {
      uVar2 = *param_1;
      iVar4 = iVar4 + 1;
      uVar5 = (ulong)(uVar2 >> 6) & 0x3fc;
      *(int *)(this + uVar5 + 0x2238) = *(int *)(this + uVar5 + 0x2238) + 1;
      *puVar3 = (short)((uint)uVar2 - (uint)*param_2 >> 1);
      uVar2 = param_1[1];
      uVar5 = (ulong)(uVar2 >> 6) & 0x3fc;
      *(int *)(this + uVar5 + 0x2238) = *(int *)(this + uVar5 + 0x2238) + 1;
      puVar3[1] = (short)((uint)uVar2 - (uint)param_2[1] >> 1);
      uVar2 = param_1[2];
      uVar5 = (ulong)(uVar2 >> 6) & 0x3fc;
      *(int *)(this + uVar5 + 0x2238) = *(int *)(this + uVar5 + 0x2238) + 1;
      puVar3[2] = (short)((uint)uVar2 - (uint)param_2[2] >> 1);
      uVar2 = param_1[3];
      param_1 = param_1 + 4;
      uVar5 = (ulong)(uVar2 >> 6) & 0x3fc;
      *(int *)(this + uVar5 + 0x2238) = *(int *)(this + uVar5 + 0x2238) + 1;
      puVar1 = param_2 + 3;
      param_2 = param_2 + 4;
      puVar3[3] = (short)((uint)uVar2 - (uint)*puVar1 >> 1);
      puVar3 = puVar3 + 4;
    } while (iVar4 != 0);
  }
  return;
}


==================================================================

### FUNC 0016f4c0 (504 bytes) name=CalResponse

/* CFunctions::CalResponse(unsigned int const*, unsigned int const*) */

void __thiscall CFunctions::CalResponse(CFunctions *this,uint *param_1,uint *param_2)

{
  uint *puVar1;
  uint *puVar2;
  uint *puVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  uint *puVar12;
  uint *puVar20;
  uint uVar35;
  uint uVar36;
  uint uVar37;
  ulong uVar38;
  uint *puVar39;
  long lVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  uint uVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  uint *puVar13;
  uint *puVar14;
  uint *puVar15;
  uint *puVar16;
  uint *puVar17;
  uint *puVar18;
  uint *puVar19;
  uint *puVar21;
  uint *puVar22;
  uint *puVar23;
  uint *puVar24;
  uint *puVar25;
  uint *puVar26;
  uint *puVar27;
  uint *puVar28;
  uint *puVar29;
  uint *puVar30;
  uint *puVar31;
  uint *puVar32;
  uint *puVar33;
  uint *puVar34;
  
  uVar35 = 4;
  switch(*(int *)(this + 0x1dc0)) {
  case 4:
    break;
  case 5:
  case 6:
  case 7:
  case 9:
  case 10:
  case 0xb:
  case 0xc:
  case 0xd:
  case 0xe:
  case 0xf:
  case 0x11:
  case 0x12:
  case 0x13:
  case 0x14:
  case 0x15:
  case 0x16:
  case 0x17:
  case 0x18:
  case 0x19:
  case 0x1a:
  case 0x1b:
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
    goto switchD_0016f4e4_caseD_5;
  case 8:
    uVar35 = 3;
    break;
  case 0x10:
    uVar35 = 2;
    break;
  case 0x20:
    uVar35 = 1;
    break;
  default:
    if (*(int *)(this + 0x1dc0) != 0x40) {
      return;
    }
    uVar35 = 0;
  }
  uVar36 = 4;
  switch(*(int *)(this + 0x1dc4)) {
  case 4:
    break;
  case 5:
  case 6:
  case 7:
  case 9:
  case 10:
  case 0xb:
  case 0xc:
  case 0xd:
  case 0xe:
  case 0xf:
  case 0x11:
  case 0x12:
  case 0x13:
  case 0x14:
  case 0x15:
  case 0x16:
  case 0x17:
  case 0x18:
  case 0x19:
  case 0x1a:
  case 0x1b:
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
    goto switchD_0016f4e4_caseD_5;
  case 8:
    uVar36 = 3;
    break;
  case 0x10:
    uVar36 = 2;
    break;
  case 0x20:
    uVar36 = 1;
    break;
  default:
    if (*(int *)(this + 0x1dc4) != 0x40) {
      return;
    }
    uVar36 = 0;
  }
  uVar37 = *(uint *)(this + 0x76d0) >> 2;
  if (uVar37 != 0) {
    puVar39 = *(uint **)(this + 0x120);
    uVar38 = (ulong)(uVar37 - 1);
    if (3 < uVar38 + 1) {
      uVar4 = *(uint *)(this + 0x76d0) >> 2 & 3;
      lVar40 = (uVar38 + 1) - (ulong)uVar4;
      if (lVar40 != 0) {
        if ((param_1 + uVar38 * 4 + 4 <= puVar39 || puVar39 + uVar38 * 4 + 4 <= param_1) &&
           (param_2 + uVar38 * 4 + 4 <= puVar39 || puVar39 + uVar38 * 4 + 4 <= param_2)) {
          uVar37 = uVar37 - (int)lVar40;
          puVar1 = puVar39 + lVar40 * 4;
          puVar2 = param_2 + lVar40 * 4;
          puVar3 = param_1 + lVar40 * 4;
          do {
            auVar44._0_4_ = *param_1;
            auVar42._0_4_ = param_1[1];
            puVar12 = param_1 + 2;
            puVar13 = param_1 + 3;
            auVar44._4_4_ = param_1[4];
            auVar42._4_4_ = param_1[5];
            puVar14 = param_1 + 6;
            puVar15 = param_1 + 7;
            auVar44._8_4_ = param_1[8];
            auVar42._8_4_ = param_1[9];
            puVar16 = param_1 + 10;
            puVar17 = param_1 + 0xb;
            auVar44._12_4_ = param_1[0xc];
            auVar42._12_4_ = param_1[0xd];
            puVar18 = param_1 + 0xe;
            puVar19 = param_1 + 0xf;
            param_1 = param_1 + 0x10;
            uVar46 = *param_2;
            puVar20 = param_2 + 1;
            puVar21 = param_2 + 2;
            puVar22 = param_2 + 3;
            puVar23 = param_2 + 4;
            puVar24 = param_2 + 5;
            puVar25 = param_2 + 6;
            puVar26 = param_2 + 7;
            puVar27 = param_2 + 8;
            puVar28 = param_2 + 9;
            puVar29 = param_2 + 10;
            puVar30 = param_2 + 0xb;
            puVar31 = param_2 + 0xc;
            puVar32 = param_2 + 0xd;
            puVar33 = param_2 + 0xe;
            puVar34 = param_2 + 0xf;
            param_2 = param_2 + 0x10;
            lVar40 = lVar40 + -4;
            auVar41._4_4_ = uVar36;
            auVar41._0_4_ = uVar36;
            auVar41._8_4_ = uVar36;
            auVar41._12_4_ = uVar36;
            auVar44 = NEON_ushl(auVar44,auVar41,4);
            auVar45._4_4_ = uVar35;
            auVar45._0_4_ = uVar35;
            auVar45._8_4_ = uVar35;
            auVar45._12_4_ = uVar35;
            auVar47._4_4_ = *puVar23;
            auVar47._0_4_ = uVar46;
            auVar47._8_4_ = *puVar27;
            auVar47._12_4_ = *puVar31;
            auVar45 = NEON_ushl(auVar47,auVar45,4);
            auVar43._4_4_ = uVar36;
            auVar43._0_4_ = uVar36;
            auVar43._8_4_ = uVar36;
            auVar43._12_4_ = uVar36;
            auVar47 = NEON_ushl(auVar42,auVar43,4);
            auVar48._4_4_ = uVar35;
            auVar48._0_4_ = uVar35;
            auVar48._8_4_ = uVar35;
            auVar48._12_4_ = uVar35;
            auVar9._4_4_ = *puVar24;
            auVar9._0_4_ = *puVar20;
            auVar9._8_4_ = *puVar28;
            auVar9._12_4_ = *puVar32;
            auVar48 = NEON_ushl(auVar9,auVar48,4);
            auVar49._4_4_ = uVar36;
            auVar49._0_4_ = uVar36;
            auVar49._8_4_ = uVar36;
            auVar49._12_4_ = uVar36;
            auVar7._4_4_ = *puVar14;
            auVar7._0_4_ = *puVar12;
            auVar7._8_4_ = *puVar16;
            auVar7._12_4_ = *puVar18;
            auVar49 = NEON_ushl(auVar7,auVar49,4);
            auVar50._4_4_ = uVar36;
            auVar50._0_4_ = uVar36;
            auVar50._8_4_ = uVar36;
            auVar50._12_4_ = uVar36;
            auVar8._4_4_ = *puVar15;
            auVar8._0_4_ = *puVar13;
            auVar8._8_4_ = *puVar17;
            auVar8._12_4_ = *puVar19;
            auVar41 = NEON_ushl(auVar8,auVar50,4);
            auVar5._4_4_ = uVar35;
            auVar5._0_4_ = uVar35;
            auVar5._8_4_ = uVar35;
            auVar5._12_4_ = uVar35;
            auVar10._4_4_ = *puVar25;
            auVar10._0_4_ = *puVar21;
            auVar10._8_4_ = *puVar29;
            auVar10._12_4_ = *puVar33;
            auVar50 = NEON_ushl(auVar10,auVar5,4);
            auVar6._4_4_ = uVar35;
            auVar6._0_4_ = uVar35;
            auVar6._8_4_ = uVar35;
            auVar6._12_4_ = uVar35;
            auVar11._4_4_ = *puVar26;
            auVar11._0_4_ = *puVar22;
            auVar11._8_4_ = *puVar30;
            auVar11._12_4_ = *puVar34;
            auVar43 = NEON_ushl(auVar11,auVar6,4);
            *puVar39 = auVar44._0_4_ - auVar45._0_4_;
            puVar39[1] = auVar47._0_4_ - auVar48._0_4_;
            puVar39[2] = auVar49._0_4_ - auVar50._0_4_;
            puVar39[3] = auVar41._0_4_ - auVar43._0_4_;
            puVar39[4] = auVar44._4_4_ - auVar45._4_4_;
            puVar39[5] = auVar47._4_4_ - auVar48._4_4_;
            puVar39[6] = auVar49._4_4_ - auVar50._4_4_;
            puVar39[7] = auVar41._4_4_ - auVar43._4_4_;
            puVar39[8] = auVar44._8_4_ - auVar45._8_4_;
            puVar39[9] = auVar47._8_4_ - auVar48._8_4_;
            puVar39[10] = auVar49._8_4_ - auVar50._8_4_;
            puVar39[0xb] = auVar41._8_4_ - auVar43._8_4_;
            puVar39[0xc] = auVar44._12_4_ - auVar45._12_4_;
            puVar39[0xd] = auVar47._12_4_ - auVar48._12_4_;
            puVar39[0xe] = auVar49._12_4_ - auVar50._12_4_;
            puVar39[0xf] = auVar41._12_4_ - auVar43._12_4_;
            puVar39 = puVar39 + 0x10;
          } while (lVar40 != 0);
          puVar39 = puVar1;
          param_2 = puVar2;
          param_1 = puVar3;
          if (uVar4 == 0) {
            return;
          }
        }
      }
    }
    do {
      uVar37 = uVar37 - 1;
      *puVar39 = (*param_1 << (ulong)uVar36) - (*param_2 << (ulong)uVar35);
      puVar39[1] = (param_1[1] << (ulong)uVar36) - (param_2[1] << (ulong)uVar35);
      puVar39[2] = (param_1[2] << (ulong)uVar36) - (param_2[2] << (ulong)uVar35);
      puVar1 = param_1 + 3;
      puVar2 = param_2 + 3;
      param_1 = param_1 + 4;
      param_2 = param_2 + 4;
      puVar39[3] = (*puVar1 << (ulong)uVar36) - (*puVar2 << (ulong)uVar35);
      puVar39 = puVar39 + 4;
    } while (uVar37 != 0);
  }
switchD_0016f4e4_caseD_5:
  return;
}


==================================================================

### FUNC 0016f6b8 (668 bytes) name=SaveBMP

/* CFunctions::SaveBMP(CacheData, char const*) */

undefined4 __thiscall CFunctions::SaveBMP(CFunctions *this,int param_2,char *param_3)

{
  pthread_mutex_t *__mutex;
  CFunctions *__src;
  long lVar1;
  uint uVar2;
  undefined1 uVar3;
  undefined1 uVar4;
  long lVar5;
  int iVar6;
  void *__dest;
  undefined4 *puVar7;
  char *pcVar8;
  undefined4 uVar9;
  long lVar10;
  undefined4 uVar11;
  ulong __n;
  void *__src_00;
  OFStream aOStack_4c8 [16];
  undefined2 local_4b8;
  int local_4b6;
  undefined2 local_4b2;
  undefined2 local_4b0;
  undefined4 local_4ae;
  MStream aMStack_4a8 [24];
  ushort local_490;
  ushort local_48e;
  ushort local_48a;
  ushort local_488;
  ushort local_486;
  ushort local_484;
  undefined1 local_468 [1024];
  long local_68;
  
  lVar5 = tpidr_el0;
  local_68 = *(long *)(lVar5 + 0x28);
  MStream::MStream(aMStack_4a8,0x100);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  if ((*(int *)(this + 0xe0) == 0) || (*(int *)(this + 0xec) == 0)) {
    iVar6 = pthread_mutex_unlock(__mutex);
    puVar7 = (undefined4 *)__errno(iVar6);
    uVar9 = 0xe4ae0006;
  }
  else {
    if (param_2 == 2) {
      uVar2 = *(uint *)(this + 0x76d8);
      __src = this + 0xdd8;
      __src_00 = *(void **)(this + 0x180);
    }
    else if (param_2 == 1) {
      uVar2 = *(uint *)(this + 0x76d4);
      __src = this + 0x9b0;
      __src_00 = *(void **)(this + 0xd8);
    }
    else {
      if (param_2 != 0) {
        iVar6 = pthread_mutex_unlock(__mutex);
        puVar7 = (undefined4 *)__errno(iVar6);
        uVar11 = 0;
        *puVar7 = 0xe4ae0001;
        goto LAB_0016f914;
      }
      uVar2 = *(uint *)(this + 0x76d0);
      __src = this + 0x588;
      if (*(int *)(this + 0x1e24) == 0) {
        MapTemperature((int)this);
      }
      __src_00 = *(void **)(this + 0x170);
    }
    if (__src_00 != (void *)0x0) {
      __n = (ulong)uVar2;
      __dest = operator_new__(__n);
      memcpy(__dest,__src_00,__n);
      pthread_mutex_unlock(__mutex);
      if (param_3 == (char *)0x0) {
        GetLocalTime((_SYSTEMTIME *)&local_490);
        MStream::Fmt((char *)aMStack_4a8,"%d-%d-%d %d-%d-%d.bmp",(ulong)local_490,(ulong)local_48e,
                     (ulong)local_48a,(ulong)local_488,(ulong)local_486,(ulong)local_484);
      }
      else {
        MStream::operator<<(aMStack_4a8,param_3);
      }
      local_4b6 = uVar2 + 0x436;
      local_4b8 = 0x4d42;
      local_4b2 = 0;
      local_4b0 = 0;
      local_4ae = 0x436;
      memcpy(&local_490,__src,0x428);
      lVar10 = 0;
      do {
        uVar3 = local_468[lVar10 + 2];
        uVar4 = local_468[lVar10 + 6];
        lVar1 = lVar10 + 8;
        local_468[lVar10 + 2] = local_468[lVar10];
        local_468[lVar10 + 6] = local_468[lVar10 + 4];
        local_468[lVar10] = uVar3;
        local_468[lVar10 + 4] = uVar4;
        lVar10 = lVar1;
      } while (lVar1 != 0x400);
      pcVar8 = (char *)MStream::Get(aMStack_4a8);
      OFStream::OFStream(aOStack_4c8,pcVar8,false);
      OFStream::Write(aOStack_4c8,&local_4b8,0xe,1);
      OFStream::Write(aOStack_4c8,&local_490,0x428,1);
      OFStream::Write(aOStack_4c8,__dest,__n,1);
      OFStream::~OFStream(aOStack_4c8);
      operator_delete__(__dest);
      uVar11 = 1;
      goto LAB_0016f914;
    }
    iVar6 = pthread_mutex_unlock(__mutex);
    puVar7 = (undefined4 *)__errno(iVar6);
    uVar9 = 0xe4ae0003;
  }
  uVar11 = 0;
  *puVar7 = uVar9;
LAB_0016f914:
  MStream::~MStream(aMStack_4a8);
  if (*(long *)(lVar5 + 0x28) == local_68) {
    return uVar11;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0016f9ac (3828 bytes) name=LoadCalibrationTable

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CFunctions::LoadCalibrationTable(char const*) */

undefined4 __thiscall CFunctions::LoadCalibrationTable(CFunctions *this,char *param_1)

{
  long lVar1;
  CFunctions *pCVar2;
  pthread_mutex_t *__mutex;
  long lVar3;
  CFunctions *__s;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  CFunctions *pCVar8;
  CFunctions *pCVar9;
  undefined8 uVar10;
  float fVar11;
  float fVar12;
  int iVar13;
  uint uVar14;
  int iVar15;
  ulong uVar16;
  long lVar17;
  void *pvVar18;
  void *pvVar19;
  ulong uVar20;
  size_t sVar21;
  ulong uVar22;
  CFunctions *pCVar23;
  CFunctions *pCVar24;
  uint uVar25;
  undefined4 uVar26;
  long *plVar27;
  CFunctions *pCVar28;
  uint uVar29;
  float fVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  int iVar35;
  int iVar36;
  int iVar37;
  undefined8 uVar38;
  int local_b8;
  int local_b4;
  IFStream aIStack_b0 [24];
  undefined4 local_98;
  uint local_94;
  int local_90;
  int local_8c;
  long local_88;
  
  lVar7 = tpidr_el0;
  local_88 = *(long *)(lVar7 + 0x28);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  if (*(void **)(this + 0x1458) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1458));
    *(undefined8 *)(this + 0x1458) = 0;
  }
  __s = this + 0x1200;
  if (*(void **)(this + 0x1460) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1460));
    *(undefined8 *)(this + 0x1460) = 0;
  }
  if (*(void **)(this + 0x1468) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x1468));
    *(undefined8 *)(this + 0x1468) = 0;
  }
  memset(__s,0,0xa94);
  if (((*(int *)(this + 0xe0) == 0) || (*param_1 == '\0')) ||
     (iVar13 = access(param_1,0), iVar13 != 0)) {
    uVar14 = pthread_mutex_unlock(__mutex);
    uVar16 = (ulong)uVar14;
    uVar26 = 0;
    goto LAB_0016fa68;
  }
  IFStream::IFStream(aIStack_b0,param_1);
  strncpy((char *)(this + 0x120c),param_1,0x100);
  this[0x130b] = (CFunctions)0x0;
  local_b4 = 0;
  FStream::Read((FStream *)aIStack_b0,&local_b4,4,1);
  FStream::Read((FStream *)aIStack_b0,&local_8c,4,1);
  FStream::Read((FStream *)aIStack_b0,&local_90,4,1);
  pCVar24 = this + 0x1310;
  FStream::Read((FStream *)aIStack_b0,pCVar24,4,1);
  pCVar23 = this + 0x130c;
  FStream::Read((FStream *)aIStack_b0,pCVar23,4,1);
  FStream::Read((FStream *)aIStack_b0,&local_94,4,1);
  FStream::Read((FStream *)aIStack_b0,&local_98,4,1);
  FStream::Read((FStream *)aIStack_b0,this + 0x1314,4,1);
  FStream::Read((FStream *)aIStack_b0,this + 0x1318,4,1);
  if (((local_b4 == 0x5aa50003) && (*(uint *)pCVar24 - 2 < 0x12)) &&
     ((*(int *)pCVar23 != 0 && ((local_94 != 0 && ((local_94 - 1 & local_94) == 0)))))) {
    if (*(int *)(this + 0x7c) == 1) {
      if (local_8c == *(int *)(this + 0x1dac)) {
        iVar13 = *(int *)(this + 0x1da8);
joined_r0x0016fc64:
        if (local_90 == iVar13) {
LAB_0016fc68:
          FStream::Read((FStream *)aIStack_b0,this + 0x131c,(ulong)*(uint *)pCVar24 << 2,1);
          FStream::Read((FStream *)aIStack_b0,this + 0x136c,(ulong)*(uint *)(this + 0x1310) << 2,1);
          FStream::Read((FStream *)aIStack_b0,this + 0x13bc,(ulong)*(uint *)(this + 0x1310) << 2,1);
          FStream::Read((FStream *)aIStack_b0,this + 0x140c,
                        (ulong)(*(int *)(this + 0x1310) - 1) << 2,1);
          uVar14 = *(uint *)(this + 0x1310);
          uVar16 = 1;
          pCVar28 = this + 0x76d0;
          uVar25 = uVar14 - 1;
LAB_0016fcfc:
          uVar6 = (int)uVar16 - 1;
          if (uVar6 < uVar25) goto code_r0x0016fd08;
          uVar6 = *(uint *)pCVar28;
          uVar4 = *(uint *)(this + 0x1314);
          iVar13 = *(int *)pCVar23;
          uVar5 = *(uint *)(this + 0x1318);
          if (uVar14 == 1) {
            uVar29 = 0;
            goto LAB_0016fe38;
          }
          uVar16 = (ulong)uVar25;
          if (uVar25 < 2) {
            uVar16 = 1;
          }
          if (uVar16 < 8) {
            uVar20 = 0;
LAB_0016fe14:
            uVar29 = 0;
            goto LAB_0016fe24;
          }
          uVar20 = uVar16 & 0xfffffff8;
          if (uVar20 == 0) goto LAB_0016fe14;
          iVar15 = 0;
          iVar31 = 0;
          iVar32 = 0;
          iVar33 = 0;
          pCVar23 = this + 0x141c;
          iVar34 = 0;
          iVar35 = 0;
          iVar36 = 0;
          iVar37 = 0;
          uVar22 = uVar20;
          do {
            pCVar2 = pCVar23 + -0x10;
            pCVar8 = pCVar23 + -8;
            pCVar9 = pCVar23 + 8;
            uVar38 = *(undefined8 *)pCVar23;
            uVar22 = uVar22 - 8;
            pCVar23 = pCVar23 + 0x20;
            iVar15 = iVar15 + (int)*(undefined8 *)pCVar2 * 0x28;
            iVar31 = iVar31 + (int)((ulong)*(undefined8 *)pCVar2 >> 0x20) * 0x28;
            iVar32 = iVar32 + (int)*(undefined8 *)pCVar8 * 0x28;
            iVar33 = iVar33 + (int)((ulong)*(undefined8 *)pCVar8 >> 0x20) * 0x28;
            iVar34 = iVar34 + (int)uVar38 * 0x28;
            iVar35 = iVar35 + (int)((ulong)uVar38 >> 0x20) * 0x28;
            iVar36 = iVar36 + (int)*(undefined8 *)pCVar9 * 0x28;
            iVar37 = iVar37 + (int)((ulong)*(undefined8 *)pCVar9 >> 0x20) * 0x28;
          } while (uVar22 != 0);
          uVar29 = iVar34 + iVar15 + iVar35 + iVar31 + iVar36 + iVar32 + iVar37 + iVar33;
          if (uVar16 != uVar20) {
LAB_0016fe24:
            do {
              lVar1 = uVar20 * 4;
              uVar20 = uVar20 + 1;
              uVar29 = uVar29 + *(int *)(this + lVar1 + 0x140c) * 0x28;
            } while (uVar20 < uVar25);
          }
LAB_0016fe38:
          lVar17 = IFStream::GetLength(aIStack_b0);
          iVar13 = iVar13 * 3 + -1;
          uVar16 = (ulong)uVar29;
          lVar1 = (ulong)uVar5 + (ulong)uVar4 + (ulong)(iVar13 * uVar6) * 2;
          lVar3 = uVar16 + lVar1 * (ulong)uVar14 + (ulong)(uVar14 * 4 - 1) * 4 + 0x24;
          if (lVar17 < lVar3) {
            FUN_003f1ad0(PTR_DAT_00501a38,"The calibration table length is not correct.\n",0x2d);
            pthread_mutex_unlock(__mutex);
            goto LAB_0016fc04;
          }
          lVar17 = IFStream::GetLength(aIStack_b0);
          pvVar18 = operator_new__(lVar1 * (ulong)*(uint *)pCVar24 + 3 & 0xfffffffffffffffc);
          *(void **)(this + 0x1458) = pvVar18;
          pvVar18 = operator_new__(lVar1 + 3U & 0x7fffffffc);
          *(void **)(this + 0x1460) = pvVar18;
          if (uVar29 != 0) {
            pvVar19 = operator_new__(uVar16);
            *(void **)(this + 0x1468) = pvVar19;
          }
          *(void **)(this + 0x1610) = pvVar18;
          *(ulong *)(this + 0x1628) =
               (long)pvVar18 +
               ((ulong)*(uint *)(this + 0x1314) & 0xfffffffe) +
               (ulong)((*(int *)(this + 0x130c) + -1) * *(uint *)pCVar28) * 2;
          uVar20 = FStream::GetCurrentPos((FStream *)aIStack_b0);
          uVar14 = *(uint *)(this + 0x1310);
          iVar15 = (int)uVar20;
          *(int *)(this + 0x14c0) = iVar15;
          *(undefined4 *)(this + 0x1510) = 0;
          if (1 < uVar14) {
            iVar15 = *(int *)(this + 0x1510);
            uVar25 = 1;
            pCVar23 = this + 0x1514;
            do {
              uVar20 = lVar1 + (uVar20 & 0xffffffff);
              iVar31 = (int)lVar1 + iVar15;
              uVar25 = uVar25 + 1;
              iVar15 = iVar15 + uVar5 + uVar4 + uVar6 * iVar13 * 2;
              *(int *)(pCVar23 + -0x50) = (int)uVar20;
              *(int *)pCVar23 = iVar31;
              pCVar23 = pCVar23 + 4;
            } while (uVar25 < uVar14);
            iVar15 = *(int *)(this + 0x14c0);
          }
          iVar15 = (int)(lVar1 * (ulong)uVar14) + iVar15;
          *(int *)(this + 0x1560) = iVar15;
          *(undefined4 *)(this + 0x15ac) = 0;
          if (1 < uVar14 - 1) {
            iVar13 = *(int *)(this + 0x15ac);
            pCVar23 = this + 0x140c;
            uVar25 = 1;
            do {
              uVar25 = uVar25 + 1;
              iVar15 = *(int *)pCVar23 * 0x28 + iVar15;
              iVar13 = *(int *)pCVar23 * 0x28 + iVar13;
              *(int *)(pCVar23 + 0x158) = iVar15;
              *(int *)(pCVar23 + 0x1a4) = iVar13;
              pCVar23 = pCVar23 + 4;
            } while (uVar25 < uVar14 - 1);
          }
          FStream::Read((FStream *)aIStack_b0,*(void **)(this + 0x1458),lVar1 * (ulong)uVar14,1);
          if (uVar29 != 0) {
            FStream::Read((FStream *)aIStack_b0,*(void **)(this + 0x1468),uVar16,1);
          }
          uVar14 = *(uint *)pCVar24;
          if (uVar14 == 0) {
            if (lVar17 <= lVar3) goto LAB_0017002c;
LAB_001700a0:
            iVar13 = IFStream::GetLength(aIStack_b0);
            iVar15 = FStream::GetCurrentPos((FStream *)aIStack_b0);
            iVar13 = iVar13 - iVar15;
            *(undefined4 *)(this + 0x163c) = 0;
            fVar12 = DAT_00439508;
            fVar11 = DAT_00439504;
            if (0x43 < iVar13) {
              while( true ) {
                local_b8 = 0;
                FStream::Read((FStream *)aIStack_b0,&local_b8,4,1);
                if (local_b8 != 0x6bb60001) break;
                uVar16 = (ulong)*(uint *)(this + 0x163c);
                pCVar24 = this + uVar16 * 0x21c + 0x1640;
                FStream::Read((FStream *)aIStack_b0,pCVar24,0x20,1);
                *(undefined2 *)(this + uVar16 * 0x21c + 0x165e) = 0;
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1660,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1664,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1668,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x166c,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1670,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1678,4,1);
                FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1674,4,1);
                pCVar23 = this + uVar16 * 0x21c + 0x167c;
                FStream::Read((FStream *)aIStack_b0,pCVar23,4,1);
                if (0xf < *(uint *)(this + uVar16 * 0x21c + 0x1670)) break;
                uVar14 = *(uint *)pCVar23 - 1;
                if (0x18 < uVar14) break;
                if (iVar13 < 0x21c) {
                  if (*(uint *)pCVar23 < 2) {
                    uVar14 = 1;
                  }
                  else {
                    FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1680,
                                  (ulong)uVar14 << 2,1);
                    uVar14 = *(uint *)pCVar23;
                  }
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1714,
                                (ulong)(uVar14 << 1) << 2,1);
                  pCVar28 = this + uVar16 * 0x21c + 0x1844;
                  iVar13 = iVar13 + *(uint *)pCVar23 * -0xc + -0x40;
                  *(undefined4 *)(this + uVar16 * 0x21c + 0x1844) = 0x3f800000;
                  fVar30 = 1.0;
LAB_00170464:
                  if (1.0 < fVar30) goto LAB_0017046c;
                }
                else {
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1680,100,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x16e4,8,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x16ec,4,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x16f0,4,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x16f4,8,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x16fc,8,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1704,0x10,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1714,200,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x17dc,0x68,1);
                  pCVar28 = this + uVar16 * 0x21c + 0x1844;
                  FStream::Read((FStream *)aIStack_b0,pCVar28,4,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1848,8,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1850,4,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1854,4,1);
                  FStream::Read((FStream *)aIStack_b0,this + uVar16 * 0x21c + 0x1858,4,1);
                  fVar30 = *(float *)pCVar28;
                  iVar13 = iVar13 + -0x220;
                  if (0.0 < fVar30) goto LAB_00170464;
LAB_0017046c:
                  *(undefined4 *)pCVar28 = 0x3f800000;
                }
                if ((*(float *)(this + uVar16 * 0x21c + 0x1854) < fVar11) ||
                   (fVar12 < *(float *)(this + uVar16 * 0x21c + 0x1854))) {
                  *(undefined4 *)(this + uVar16 * 0x21c + 0x1854) = 0;
                }
                *(int *)(this + 0x163c) = *(int *)(this + 0x163c) + 1;
                *(undefined4 *)(this + 0x1638) = 1;
                FUN_003f1ad0(PTR_DAT_00501a38,"Found Lens: ",0xc);
                sVar21 = strlen((char *)pCVar24);
                FUN_003f1ad0(PTR_DAT_00501a38,pCVar24,sVar21);
                plVar27 = *(long **)(PTR_DAT_00501a38 +
                                    *(long *)(*(long *)PTR_DAT_00501a38 + -0x18) + 0xf0);
                if (plVar27 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
                  FUN_0040f118();
                }
                if ((char)plVar27[7] == '\0') {
                  FUN_003d14e0(plVar27);
                  uVar14 = (**(code **)(*plVar27 + 0x30))(plVar27,10);
                }
                else {
                  uVar14 = (uint)*(byte *)((long)plVar27 + 0x43);
                }
                FUN_003f1564(PTR_DAT_00501a38,uVar14);
                FUN_003f0db8();
                if ((iVar13 < 0x44) || (2 < *(uint *)(this + 0x163c))) break;
              }
            }
          }
          else {
            if (uVar14 < 8) {
              uVar16 = 0;
LAB_00170084:
              do {
                *(undefined4 *)(this + uVar16 * 4 + 0x1470) = 1;
                uVar16 = uVar16 + 1;
              } while (uVar16 < uVar14);
            }
            else {
              uVar16 = (ulong)uVar14 - (ulong)(uVar14 & 7);
              if (uVar16 == 0) goto LAB_00170084;
              pCVar24 = this + 0x1480;
              uVar20 = uVar16;
              do {
                *(undefined8 *)(pCVar24 + -8) = 0x100000001;
                *(undefined8 *)(pCVar24 + -0x10) = 0x100000001;
                *(undefined8 *)(pCVar24 + 8) = 0x100000001;
                *(undefined8 *)pCVar24 = 0x100000001;
                uVar20 = uVar20 - 8;
                pCVar24 = pCVar24 + 0x20;
              } while (uVar20 != 0);
              if ((uVar14 & 7) != 0) goto LAB_00170084;
            }
            if (lVar3 < lVar17) goto LAB_001700a0;
LAB_0017002c:
            if (uVar14 == 2) {
              iVar15 = *(int *)(this + 0x1320);
              iVar13 = *(int *)(this + 0x131c);
              if (iVar15 - iVar13 == 50000) goto LAB_00170580;
            }
            else if (uVar14 == 1) {
              iVar15 = *(int *)(this + 0x1320);
              iVar13 = *(int *)(this + 0x131c);
LAB_00170580:
              *(undefined4 *)(this + 0x1204) = 1;
              memset(this + 0x1638,0,0x65c);
              uVar38 = CONCAT53(s_Default_Lens_004399e8._8_5_,s_Default_Lens_004399e8._5_3_);
              iVar13 = iVar13 + iVar15;
              *(undefined8 *)(this + 0x1638) = 0x100000001;
              *(undefined8 *)(this + 0x1645) = uVar38;
              uVar10 = _UNK_004394a8;
              uVar38 = _DAT_004394a0;
              if (iVar13 < 0) {
                iVar13 = iVar13 + 1;
              }
              *(ulong *)(this + 0x1640) =
                   CONCAT35(s_Default_Lens_004399e8._5_3_,s_Default_Lens_004399e8._0_5_);
              *(undefined8 *)(this + 0x1668) = uVar10;
              *(undefined8 *)(this + 0x1660) = uVar38;
              *(int *)(this + 0x1674) = iVar13 >> 1;
              *(int *)(this + 0x1678) = (iVar13 >> 1) + -500;
              *(undefined4 *)(this + 0x167c) = 1;
              *(undefined4 *)(this + 0x1844) = 0x3f800000;
              *(undefined4 *)(this + 0x1714) = *(undefined4 *)(this + 0x76dc);
              *(undefined8 *)(this + 0x1848) = 0x186a000000000;
              *(undefined4 *)(this + 0x1718) = *(undefined4 *)(this + 0x76e0);
            }
          }
          *(uint *)(this + 0x76dc) = local_94;
          *(undefined4 *)(this + 0x76e0) = local_98;
          if (0x1ff < (int)local_94) {
            if ((int)local_94 < 0x2000) {
              if ((int)local_94 < 0x800) {
                if (local_94 == 0x200) {
                  uVar26 = 9;
                }
                else {
                  if (local_94 != 0x400) goto switchD_00170654_caseD_3;
                  uVar26 = 10;
                }
              }
              else if (local_94 == 0x800) {
                uVar26 = 0xb;
              }
              else {
                if (local_94 != 0x1000) goto switchD_00170654_caseD_3;
                uVar26 = 0xc;
              }
            }
            else if ((int)local_94 < 0x8000) {
              if (local_94 == 0x2000) {
                uVar26 = 0xd;
              }
              else {
                if (local_94 != 0x4000) goto switchD_00170654_caseD_3;
                uVar26 = 0xe;
              }
            }
            else if (local_94 == 0x8000) {
              uVar26 = 0xf;
            }
            else if (local_94 == 0x10000) {
              uVar26 = 0x10;
            }
            else {
              if (local_94 != 0x20000) goto switchD_00170654_caseD_3;
              uVar26 = 0x11;
            }
            goto switchD_00170654_caseD_1;
          }
          uVar26 = 0;
          switch(local_94) {
          case 1:
            break;
          case 2:
            uVar26 = 1;
            break;
          case 3:
          case 5:
          case 6:
          case 7:
          case 9:
          case 10:
          case 0xb:
          case 0xc:
          case 0xd:
          case 0xe:
          case 0xf:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
          case 0x1a:
          case 0x1b:
          case 0x1c:
          case 0x1d:
          case 0x1e:
          case 0x1f:
          case 0x21:
          case 0x22:
          case 0x23:
          case 0x24:
          case 0x25:
          case 0x26:
          case 0x27:
          case 0x28:
          case 0x29:
          case 0x2a:
          case 0x2b:
          case 0x2c:
          case 0x2d:
          case 0x2e:
          case 0x2f:
          case 0x30:
          case 0x31:
          case 0x32:
          case 0x33:
          case 0x34:
          case 0x35:
          case 0x36:
          case 0x37:
          case 0x38:
          case 0x39:
          case 0x3a:
          case 0x3b:
          case 0x3c:
          case 0x3d:
          case 0x3e:
          case 0x3f:
switchD_00170654_caseD_3:
            if (0xffffff < (int)local_94) {
              if ((int)local_94 < 0x8000000) {
                if (local_94 == 0x1000000) {
                  uVar26 = 0x18;
                }
                else if (local_94 == 0x2000000) {
                  uVar26 = 0x19;
                }
                else {
                  if (local_94 != 0x4000000) goto LAB_00170784;
                  uVar26 = 0x1a;
                }
              }
              else if ((int)local_94 < 0x20000000) {
                if (local_94 == 0x8000000) {
                  uVar26 = 0x1b;
                }
                else {
                  if (local_94 != 0x10000000) goto LAB_00170784;
                  uVar26 = 0x1c;
                }
              }
              else if (local_94 == 0x20000000) {
                uVar26 = 0x1d;
              }
              else {
                if (local_94 != 0x40000000) goto LAB_00170784;
                uVar26 = 0x1e;
              }
              break;
            }
            if ((int)local_94 < 0x100000) {
              if (local_94 == 0x80000000) {
                uVar26 = 0x1f;
              }
              else if (local_94 == 0x40000) {
                uVar26 = 0x12;
              }
              else {
                if (local_94 != 0x80000) goto LAB_00170784;
                uVar26 = 0x13;
              }
              break;
            }
            if (0x3fffff < (int)local_94) {
              if (local_94 == 0x400000) {
                uVar26 = 0x16;
              }
              else {
                if (local_94 != 0x800000) goto LAB_00170784;
                uVar26 = 0x17;
              }
              break;
            }
            if (local_94 == 0x100000) {
              uVar26 = 0x14;
              break;
            }
            if (local_94 == 0x200000) {
              uVar26 = 0x15;
              break;
            }
            goto LAB_00170784;
          case 4:
            uVar26 = 2;
            break;
          case 8:
            uVar26 = 3;
            break;
          case 0x10:
            uVar26 = 4;
            break;
          case 0x20:
            uVar26 = 5;
            break;
          case 0x40:
            uVar26 = 6;
            break;
          default:
            if (local_94 == 0x80) {
              uVar26 = 7;
            }
            else {
              if (local_94 != 0x100) goto switchD_00170654_caseD_3;
              uVar26 = 8;
            }
          }
switchD_00170654_caseD_1:
          *(undefined4 *)(this + 0x76e4) = uVar26;
LAB_00170784:
          *(undefined4 *)__s = 1;
          pthread_mutex_unlock(__mutex);
          uVar26 = *(undefined4 *)__s;
          goto LAB_0016fc08;
        }
      }
    }
    else {
      if (*(int *)(this + 0x7c) != 0) goto LAB_0016fc68;
      if (local_8c == *(int *)(this + 0x1da8)) {
        iVar13 = *(int *)(this + 0x1dac);
        goto joined_r0x0016fc64;
      }
    }
    FUN_003f1ad0(PTR_DAT_00501a38,"The calibration table size mismatch FPA.\n",0x29);
    pthread_mutex_unlock(__mutex);
  }
  else {
    FUN_003f1ad0(PTR_DAT_00501a38,"The calibration table data is not correct1.\n",0x2c);
    pthread_mutex_unlock(__mutex);
  }
LAB_0016fc04:
  uVar26 = 0;
LAB_0016fc08:
  uVar16 = OFStream::~OFStream((OFStream *)aIStack_b0);
LAB_0016fa68:
  if (*(long *)(lVar7 + 0x28) == local_88) {
    return uVar26;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar16);
code_r0x0016fd08:
  if ((*(uint *)pCVar28 <= *(uint *)(this + (ulong)uVar6 * 4 + 0x140c)) ||
     (lVar1 = uVar16 * 4, uVar16 = (ulong)((int)uVar16 + 1),
     *(int *)(this + lVar1 + 0x131c) <= *(int *)(this + (ulong)uVar6 * 4 + 0x131c)))
  goto LAB_0016fd34;
  goto LAB_0016fcfc;
LAB_0016fd34:
  FUN_003f1ad0(PTR_DAT_00501a38,"The calibration table data is not correct2.\n",0x2c);
  pthread_mutex_unlock(__mutex);
  goto LAB_0016fc04;
}


==================================================================

### FUNC 001708c8 (920 bytes) name=SaveRaw

/* CFunctions::SaveRaw(CacheData, char const*) */

undefined4 __thiscall CFunctions::SaveRaw(CFunctions *this,undefined4 param_2,char *param_3)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  int iVar2;
  undefined4 *puVar3;
  void *__dest;
  char *pcVar4;
  CFunctions *__src;
  undefined4 uVar5;
  uint uVar6;
  long lVar7;
  undefined4 uVar8;
  ulong __n;
  ushort local_90;
  ushort local_8e;
  ushort local_8a;
  ushort local_88;
  ushort local_86;
  ushort local_84;
  undefined8 local_80;
  undefined4 local_78;
  undefined4 local_74;
  MStream aMStack_70 [24];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  MStream::MStream(aMStack_70,0x100);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  local_80 = 0;
  pthread_mutex_lock(__mutex);
  if ((*(int *)(this + 0xe0) == 0) || (*(int *)(this + 0xec) == 0)) {
    iVar2 = pthread_mutex_unlock(__mutex);
    puVar3 = (undefined4 *)__errno(iVar2);
    uVar5 = 0xe4ae0006;
    goto LAB_001709a0;
  }
  switch(param_2) {
  case 3:
    local_74 = *(undefined4 *)(this + 0x1da8);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x3c),*(undefined4 *)(this + 0x40));
    if (*(int *)(this + 0x1cc4) != 0) {
      __src = *(CFunctions **)(this + 0x1ca8);
      uVar6 = *(int *)(this + 0x76d0) << 1;
      break;
    }
    goto LAB_00170a68;
  case 4:
    local_74 = *(undefined4 *)(this + 0x1da8);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x3c),*(undefined4 *)(this + 0x40));
    __src = *(CFunctions **)(this + 0x148);
    uVar6 = *(int *)(this + 0x76d0) << 1;
    if (__src == (CFunctions *)0x0) goto LAB_00170a68;
    goto LAB_00170ae0;
  case 5:
    local_74 = *(undefined4 *)(this + 0x1da8);
    iVar2 = *(int *)(this + 0x76d0);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x44),*(undefined4 *)(this + 0x48));
    __src = *(CFunctions **)(this + 0x118);
    goto joined_r0x00170aac;
  case 6:
    local_74 = *(undefined4 *)(this + 0x1da8);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x44),*(undefined4 *)(this + 0x48));
    __src = *(CFunctions **)(this + 0x120);
    uVar6 = *(int *)(this + 0x76d0) << 2;
    break;
  case 7:
    local_74 = *(undefined4 *)(this + 0x1da8);
    iVar2 = *(int *)(this + 0x76d0);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x44),*(undefined4 *)(this + 0x48));
    __src = *(CFunctions **)(this + 0x140);
joined_r0x00170aac:
    uVar6 = iVar2 << 1;
    break;
  case 8:
    lVar7 = 0x2238;
    goto LAB_00170ad0;
  case 9:
    lVar7 = 0x1e38;
LAB_00170ad0:
    local_78 = 1;
    local_74 = 0x100;
    __src = this + lVar7;
    uVar6 = 0x400;
    break;
  case 10:
    local_74 = *(undefined4 *)(this + 0x1da8);
    iVar2 = *(int *)(this + 0x76d0);
    local_78 = *(undefined4 *)(this + 0x1dac);
    local_80 = CONCAT44(*(undefined4 *)(this + 0x44),*(undefined4 *)(this + 0x48));
    __src = (CFunctions *)CSmoother::GetSTDFrame((CSmoother *)(this + 0x1d68));
    uVar6 = iVar2 << 1;
    break;
  default:
    iVar2 = pthread_mutex_unlock(__mutex);
    puVar3 = (undefined4 *)__errno(iVar2);
    uVar8 = 0;
    *puVar3 = 0xe4ae0001;
    goto LAB_00170be0;
  }
  if (__src == (CFunctions *)0x0) {
LAB_00170a68:
    iVar2 = pthread_mutex_unlock(__mutex);
    puVar3 = (undefined4 *)__errno(iVar2);
    uVar5 = 0xe4ae0003;
LAB_001709a0:
    uVar8 = 0;
    *puVar3 = uVar5;
  }
  else {
LAB_00170ae0:
    __n = (ulong)uVar6;
    __dest = operator_new__(__n);
    memcpy(__dest,__src,__n);
    pthread_mutex_unlock(__mutex);
    if (param_3 == (char *)0x0) {
      GetLocalTime((_SYSTEMTIME *)&local_90);
      MStream::Fmt((char *)aMStack_70,"%d-%02d-%02d %02d-%02d-%02d.raw",(ulong)local_90,
                   (ulong)local_8e,(ulong)local_8a,(ulong)local_88,(ulong)local_86,(ulong)local_84);
    }
    else {
      MStream::operator<<(aMStack_70,param_3);
    }
    pcVar4 = (char *)MStream::Get(aMStack_70);
    OFStream::OFStream((OFStream *)&local_90,pcVar4,false);
    OFStream::Write((OFStream *)&local_90,&local_74,4,1);
    OFStream::Write((OFStream *)&local_90,&local_78,4,1);
    OFStream::Write((OFStream *)&local_90,&local_80,4,1);
    OFStream::Write((OFStream *)&local_90,(void *)((ulong)&local_80 | 4),4,1);
    OFStream::Write((OFStream *)&local_90,__dest,__n,1);
    OFStream::~OFStream((OFStream *)&local_90);
    operator_delete__(__dest);
    uVar8 = 1;
  }
LAB_00170be0:
  MStream::~MStream(aMStack_70);
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return uVar8;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00170cb4 (668 bytes) name=GetRectTemperatureInfo

/* CFunctions::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*,
   int) */

undefined8 __thiscall
CFunctions::GetRectTemperatureInfo
          (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
          int param_6)

{
  uint uVar1;
  undefined4 uVar2;
  int iVar3;
  ushort uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  undefined4 *puVar9;
  undefined8 uVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  ushort uVar20;
  ushort uVar21;
  CFunctions *pCVar8;
  
  pCVar8 = this;
  if (param_6 != 0) {
    uVar5 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar8 = (CFunctions *)(ulong)uVar5;
  }
  if (((((param_3 < param_1) || (*(int *)(this + 0xec) == 0)) || (param_4 < param_2)) ||
      ((uVar5 = *(uint *)(this + 0x1da8), uVar5 <= param_3 || (param_5 == (int *)0x0)))) ||
     (*(uint *)(this + 0x1dac) <= param_4)) {
    uVar2 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar2 = 0xe4ae0001;
    }
    puVar9 = (undefined4 *)__errno(pCVar8);
    *puVar9 = uVar2;
    if (param_6 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar10 = 0;
  }
  else {
    if (((param_2 == 0 && param_1 == 0) && (uVar5 - 1 == param_3)) &&
       (*(uint *)(this + 0x1dac) - 1 == param_4)) {
      uVar12 = *(uint *)(this + 0x1dfc);
      uVar21 = (ushort)*(undefined4 *)(this + 0x1df8);
      uVar17 = *(uint *)(this + 0x1e0c);
      uVar19 = *(uint *)(this + 0x1e08);
      lVar16 = (ulong)*(uint *)(this + 0x76d0) * (long)*(int *)(this + 0x1e00);
    }
    else {
      lVar16 = 0;
      uVar19 = 0;
      uVar17 = 0;
      uVar21 = 0;
      uVar14 = uVar5 * param_2;
      uVar12 = 0xffffffff;
      uVar15 = param_2;
      do {
        uVar13 = (ulong)param_1;
        uVar11 = uVar12;
        uVar18 = uVar19;
        uVar20 = uVar21;
        do {
          uVar4 = *(ushort *)(*(long *)(this + 0x140) + (ulong)uVar14 * 2 + uVar13 * 2);
          uVar1 = uVar14 + (int)uVar13;
          uVar13 = uVar13 + 1;
          uVar19 = uVar1;
          uVar21 = uVar4;
          if (uVar4 <= uVar20) {
            uVar19 = uVar18;
            uVar21 = uVar20;
          }
          uVar12 = (uint)uVar4;
          if (uVar11 <= uVar4) {
            uVar12 = uVar11;
            uVar1 = uVar17;
          }
          uVar17 = uVar1;
          lVar16 = lVar16 + (ulong)uVar4;
          uVar11 = uVar12;
          uVar18 = uVar19;
          uVar20 = uVar21;
        } while ((uint)uVar13 <= param_3);
        uVar15 = uVar15 + 1;
        uVar14 = uVar14 + uVar5;
      } while (uVar15 <= param_4);
    }
    iVar6 = ReviseTemperature(this,(ushort)uVar12,uVar17,1);
    *param_5 = iVar6;
    iVar6 = ReviseTemperature(this,uVar21,uVar19,1);
    param_5[1] = iVar6;
    uVar13 = (ulong)(((1 - param_2) + param_4) * ((1 - param_1) + param_3));
    uVar21 = 0;
    if (uVar13 != 0) {
      uVar21 = (ushort)(lVar16 / (long)uVar13);
    }
    iVar6 = ReviseTemperature(this,uVar21,
                              (uVar5 * (param_4 + param_2) >> 1) + (param_3 + param_1 >> 1),1);
    param_5[2] = iVar6;
    param_5[3] = uVar17;
    param_5[4] = uVar19;
    if (*(int *)(this + 0x58) != 0) {
      iVar7 = (int)this;
      iVar6 = CorrectTemperature(iVar7,*(float *)(this + 0xac),*param_5);
      *param_5 = iVar6;
      iVar6 = CorrectTemperature(iVar7,*(float *)(this + 0xac),param_5[1]);
      param_5[1] = iVar6;
      iVar6 = CorrectTemperature(iVar7,*(float *)(this + 0xac),param_5[2]);
      param_5[2] = iVar6;
    }
    iVar7 = *param_5;
    iVar3 = param_5[1];
    if (iVar3 < iVar7) {
      param_5[1] = iVar7;
      iVar3 = iVar7;
    }
    if (iVar3 < iVar6) {
      param_5[2] = iVar3;
      iVar6 = iVar3;
    }
    if (iVar6 < iVar7) {
      param_5[2] = iVar7;
    }
    if (param_6 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar10 = 1;
  }
  return uVar10;
}


==================================================================

### FUNC 00170f50 (1964 bytes) name=GetEllipseTemperatureInfo

/* CFunctions::GetEllipseTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int,
   int*, int) */

undefined8 __thiscall
CFunctions::GetEllipseTemperatureInfo
          (CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
          int param_6)

{
  undefined4 uVar1;
  uint uVar2;
  uint uVar3;
  undefined4 *puVar4;
  ushort uVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  ushort *puVar13;
  ushort *puVar14;
  uint uVar15;
  uint uVar16;
  long lVar17;
  uint uVar18;
  int iVar19;
  uint uVar20;
  uint uVar21;
  ushort uVar22;
  uint uVar23;
  int iVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  int local_d0;
  uint local_98;
  uint uStack_94;
  uint local_78;
  
  if (param_6 != 0) {
    pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  }
  uVar3 = param_3 - param_1;
  if ((((param_3 < param_1 || uVar3 == 0) || (*(int *)(this + 0xec) == 0)) ||
      (uVar7 = param_4 - param_2, param_4 < param_2 || uVar7 == 0)) ||
     (((*(uint *)(this + 0x1da8) <= param_3 || (param_5 == (int *)0x0)) ||
      (*(uint *)(this + 0x1dac) <= param_4)))) {
    uVar1 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar1 = 0xe4ae0001;
    }
    puVar4 = (undefined4 *)__errno();
    *puVar4 = uVar1;
    if (param_6 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    return 0;
  }
  if (uVar3 < uVar7) {
    fVar27 = (float)(int)(uVar7 * uVar7 - uVar3 * uVar3);
    fVar26 = SQRT(fVar27);
    fVar25 = fVar26;
    if (NAN(fVar26)) {
      fVar25 = sqrtf(fVar27);
    }
    iVar8 = (int)((float)(param_4 + param_2) - fVar25);
    if (iVar8 < 0) {
      iVar8 = iVar8 + 1;
    }
    if (NAN(fVar26)) {
      fVar26 = sqrtf(fVar27);
    }
    iVar9 = (int)(fVar26 + (float)(param_4 + param_2));
    if (iVar9 < 0) {
      iVar9 = iVar9 + 1;
    }
    if (param_4 < param_2) {
      lVar17 = 0;
      uStack_94 = 0;
      local_98 = 0;
      uVar20 = 0;
      uVar22 = 0;
      uVar5 = 0xffff;
      goto LAB_001715f0;
    }
    uVar22 = 0;
    uVar20 = 0;
    lVar17 = 0;
    uVar6 = 0xffffffff;
    local_98 = 0;
    uStack_94 = 0;
    uVar16 = param_2;
    do {
      if (param_1 <= param_3) {
        iVar19 = uVar16 - (iVar8 >> 1);
        iVar24 = uVar16 - (iVar9 >> 1);
        uVar12 = 0;
        puVar13 = (ushort *)
                  (*(long *)(this + 0x140) + (ulong)(*(int *)(this + 0x1da8) * uVar16) * 2 +
                  (ulong)param_1 * 2);
        uVar23 = param_1 << 1;
        uVar21 = param_1 - param_3;
        uVar15 = uVar3;
        uVar18 = param_1;
        do {
          uVar2 = uVar21;
          if ((int)uVar21 < 0) {
            uVar2 = uVar15;
          }
          if ((int)uVar12 < (int)uVar2) {
            fVar25 = (float)(uVar21 * uVar21 + iVar19 * iVar19 * 4);
            fVar26 = SQRT(fVar25);
            if (NAN(fVar26)) {
              fVar26 = sqrtf(fVar25);
            }
            fVar27 = (float)(uVar21 * uVar21 + iVar24 * iVar24 * 4);
            fVar25 = SQRT(fVar27);
            if (NAN(fVar25)) {
              fVar25 = sqrtf(fVar27);
            }
            iVar10 = 0xd;
            if (param_3 + param_1 <= uVar23) {
              iVar10 = 0xb;
            }
            puVar14 = puVar13 + 1;
            if ((int)(fVar26 + fVar25) <= (int)(uVar7 * 2)) {
              iVar10 = 0;
              uVar12 = uVar2;
              puVar14 = puVar13;
            }
            puVar13 = puVar14;
            puVar14 = puVar13;
            if (iVar10 != 0xd) {
              if (iVar10 == 0) goto LAB_00171344;
              break;
            }
          }
          else {
LAB_00171344:
            puVar14 = puVar13 + 1;
            uVar5 = *puVar13;
            uVar20 = uVar20 + 1;
            lVar17 = lVar17 + (ulong)uVar5;
            if (uVar22 < uVar5) {
              uStack_94 = uVar18 + uVar16 * *(int *)(this + 0x1da8);
              uVar22 = uVar5;
            }
            if ((uint)uVar5 < (uint)uVar6) {
              local_98 = uVar18 + uVar16 * *(int *)(this + 0x1da8);
              uVar6 = (ulong)uVar5;
            }
          }
          uVar18 = uVar18 + 1;
          uVar21 = uVar21 + 2;
          uVar15 = uVar15 - 2;
          uVar23 = uVar23 + 2;
          puVar13 = puVar14;
        } while (uVar18 <= param_3);
      }
      uVar16 = uVar16 + 1;
    } while (uVar16 <= param_4);
  }
  else {
    fVar27 = (float)(int)(uVar3 * uVar3 - uVar7 * uVar7);
    fVar26 = SQRT(fVar27);
    fVar28 = (float)(param_3 + param_1);
    fVar25 = fVar26;
    if (NAN(fVar26)) {
      fVar25 = sqrtf(fVar27);
    }
    iVar8 = (int)(fVar28 - fVar25);
    if (iVar8 < 0) {
      iVar8 = iVar8 + 1;
    }
    if (NAN(fVar26)) {
      fVar26 = sqrtf(fVar27);
    }
    iVar9 = (int)(fVar26 + fVar28);
    if (iVar9 < 0) {
      iVar9 = iVar9 + 1;
    }
    if (param_4 < param_2) {
      lVar17 = 0;
      uStack_94 = 0;
      local_98 = 0;
      uVar20 = 0;
      uVar22 = 0;
      uVar5 = 0xffff;
      goto LAB_001715f0;
    }
    uVar22 = 0;
    uVar20 = 0;
    lVar17 = 0;
    uVar6 = 0xffffffff;
    local_98 = 0;
    uStack_94 = 0;
    uVar7 = param_2;
    do {
      if (param_1 <= param_3) {
        iVar10 = uVar7 * 2 - (param_4 + param_2);
        iVar10 = iVar10 * iVar10;
        uVar23 = 0;
        puVar13 = (ushort *)
                  (*(long *)(this + 0x140) + (ulong)(*(int *)(this + 0x1da8) * uVar7) * 2 +
                  (ulong)param_1 * 2);
        uVar12 = uVar3;
        uVar21 = param_1 << 1;
        uVar18 = param_1 - param_3;
        iVar24 = param_1 * 4 + (iVar9 >> 1) * -4;
        iVar19 = param_1 * 4 + (iVar8 >> 1) * -4;
        uVar16 = param_1;
        do {
          uVar15 = uVar18;
          if ((int)uVar18 < 0) {
            uVar15 = uVar12;
          }
          if ((int)uVar23 < (int)uVar15) {
            fVar25 = (float)(iVar10 + iVar19 * (uVar16 - (iVar8 >> 1)));
            fVar26 = SQRT(fVar25);
            if (NAN(fVar26)) {
              fVar26 = sqrtf(fVar25);
            }
            fVar27 = (float)(iVar10 + iVar24 * (uVar16 - (iVar9 >> 1)));
            fVar25 = SQRT(fVar27);
            if (NAN(fVar25)) {
              fVar25 = sqrtf(fVar27);
            }
            iVar11 = 7;
            if (param_3 + param_1 <= uVar21) {
              iVar11 = 5;
            }
            puVar14 = puVar13 + 1;
            if ((int)(fVar26 + fVar25) <= (int)(uVar3 * 2)) {
              iVar11 = 0;
              uVar23 = uVar15;
              puVar14 = puVar13;
            }
            puVar13 = puVar14;
            puVar14 = puVar13;
            if (iVar11 != 7) {
              if (iVar11 == 0) goto LAB_00171564;
              break;
            }
          }
          else {
LAB_00171564:
            puVar14 = puVar13 + 1;
            uVar5 = *puVar13;
            uVar20 = uVar20 + 1;
            lVar17 = lVar17 + (ulong)uVar5;
            if (uVar22 < uVar5) {
              uStack_94 = uVar16 + uVar7 * *(int *)(this + 0x1da8);
              uVar22 = uVar5;
            }
            if ((uint)uVar5 < (uint)uVar6) {
              local_98 = uVar16 + uVar7 * *(int *)(this + 0x1da8);
              uVar6 = (ulong)uVar5;
            }
          }
          uVar16 = uVar16 + 1;
          iVar19 = iVar19 + 4;
          iVar24 = iVar24 + 4;
          uVar18 = uVar18 + 2;
          uVar12 = uVar12 - 2;
          uVar21 = uVar21 + 2;
          puVar13 = puVar14;
        } while (uVar16 <= param_3);
      }
      uVar7 = uVar7 + 1;
    } while (uVar7 <= param_4);
  }
  uVar5 = (ushort)uVar6;
LAB_001715f0:
  local_78 = param_3 + param_1;
  local_d0 = param_4 + param_2;
  iVar8 = *(int *)(this + 0x1da8);
  iVar9 = ReviseTemperature(this,uVar5,local_98,1);
  *param_5 = iVar9;
  iVar9 = ReviseTemperature(this,uVar22,uStack_94,1);
  param_5[1] = iVar9;
  uVar22 = 0;
  if ((ulong)uVar20 != 0) {
    uVar22 = (ushort)(lVar17 / (long)(ulong)uVar20);
  }
  iVar8 = ReviseTemperature(this,uVar22,((uint)(iVar8 * local_d0) >> 1) + (local_78 >> 1),1);
  param_5[2] = iVar8;
  param_5[3] = local_98;
  param_5[4] = uStack_94;
  if (*(int *)(this + 0x58) != 0) {
    iVar9 = (int)this;
    iVar8 = CorrectTemperature(iVar9,*(float *)(this + 0xac),*param_5);
    *param_5 = iVar8;
    iVar8 = CorrectTemperature(iVar9,*(float *)(this + 0xac),param_5[1]);
    param_5[1] = iVar8;
    iVar8 = CorrectTemperature(iVar9,*(float *)(this + 0xac),param_5[2]);
    param_5[2] = iVar8;
  }
  iVar9 = *param_5;
  iVar19 = param_5[1];
  if (param_5[1] < iVar9) {
    param_5[1] = iVar9;
    iVar19 = iVar9;
  }
  if (iVar19 < iVar8) {
    param_5[2] = iVar19;
    iVar8 = iVar19;
  }
  if (iVar8 < iVar9) {
    param_5[2] = iVar9;
  }
  if (param_6 != 0) {
    pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  }
  return 1;
}


==================================================================

### FUNC 001716fc (716 bytes) name=GetLineTemperatureInfo

/* CFunctions::GetLineTemperatureInfo(unsigned short*, unsigned int, int*, unsigned int, unsigned
   int, int, int) */

uint __thiscall
CFunctions::GetLineTemperatureInfo
          (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
          int param_6,int param_7)

{
  ulong uVar1;
  undefined4 uVar2;
  ushort uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  undefined4 *puVar9;
  uint uVar10;
  uint uVar11;
  long lVar12;
  uint uVar13;
  ulong uVar14;
  ushort *puVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  CFunctions *local_68;
  CFunctions *pCVar8;
  
  pCVar8 = this;
  if (param_7 != 0) {
    uVar5 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar8 = (CFunctions *)(ulong)uVar5;
  }
  if (*(int *)(this + 0xec) != 0) {
    if (param_6 == 0) {
      uVar5 = *(uint *)(this + 0x1da8);
      if ((((param_4 < uVar5) && (param_5 < *(uint *)(this + 0x1dac))) && (1 < param_2)) &&
         ((param_1 != (ushort *)0x0 && (param_3 != (int *)0x0)))) {
        uVar16 = *(int *)(this + 0x1dac) - param_5;
        if (param_2 >> 1 <= *(int *)(this + 0x1dac) - param_5) {
          uVar16 = param_2 >> 1;
        }
        if (param_5 < uVar16 + param_5) {
          lVar12 = *(long *)(this + 0x140);
          uVar14 = (ulong)param_5;
          uVar11 = param_4 + uVar5 * param_5;
          puVar15 = param_1;
          do {
            uVar1 = (ulong)uVar11;
            uVar14 = uVar14 + 1;
            uVar11 = uVar11 + uVar5;
            *puVar15 = *(ushort *)(lVar12 + uVar1 * 2);
            puVar15 = puVar15 + 1;
          } while (uVar14 < uVar16 + param_5);
        }
        goto LAB_001717b8;
      }
    }
    else if (((param_4 < *(uint *)(this + 0x1dac)) && (1 < param_2)) &&
            ((param_1 != (ushort *)0x0 &&
             ((param_3 != (int *)0x0 && (param_5 < *(uint *)(this + 0x1da8))))))) {
      uVar16 = *(int *)(this + 0x1da8) - param_5;
      if (param_2 >> 1 <= *(int *)(this + 0x1da8) - param_5) {
        uVar16 = param_2 >> 1;
      }
      memcpy(param_1,(void *)(*(long *)(this + 0x140) +
                              (ulong)(*(uint *)(this + 0x1da8) * param_4) * 2 + (ulong)param_5 * 2),
             (ulong)(uVar16 << 1));
LAB_001717b8:
      local_68 = this + 0x1da8;
      if (uVar16 == 0) {
        uVar17 = 0;
        uVar5 = 0;
        uVar11 = 0;
        uVar13 = 0xffffffff;
      }
      else {
        uVar5 = 0;
        uVar17 = 0;
        uVar10 = 0;
        uVar18 = 0xffffffff;
        uVar4 = uVar16;
        do {
          uVar3 = *param_1;
          uVar11 = uVar4;
          uVar13 = (uint)uVar3;
          if (uVar3 <= uVar17) {
            uVar11 = uVar10;
            uVar13 = uVar17;
          }
          uVar17 = uVar13;
          uVar13 = (uint)uVar3;
          uVar5 = uVar5 + uVar13;
          uVar4 = uVar4 - 1;
          if (uVar18 <= uVar13) {
            uVar13 = uVar18;
          }
          param_1 = param_1 + 1;
          uVar10 = uVar11;
          uVar18 = uVar13;
        } while (uVar4 != 0);
      }
      if (param_6 == 0) {
        iVar7 = *(uint *)local_68 * (uVar16 - uVar11) + (*(uint *)local_68 >> 1);
        uVar11 = *(uint *)(this + 0x76d0) >> 1;
      }
      else {
        iVar7 = (uVar16 - uVar11) + (*(uint *)(this + 0x76d0) >> 1);
        uVar11 = *(uint *)local_68 * param_4;
        param_4 = *(uint *)local_68 >> 1;
      }
      uVar11 = uVar11 + param_4;
      iVar6 = ReviseTemperature(this,(ushort)uVar13,uVar11,0);
      *param_3 = iVar6;
      iVar6 = ReviseTemperature(this,(ushort)uVar17,uVar11,0);
      param_3[1] = iVar6;
      uVar3 = 0;
      if (uVar16 != 0) {
        uVar3 = (ushort)(uVar5 / uVar16);
      }
      iVar6 = ReviseTemperature(this,uVar3,uVar11,0);
      param_3[2] = iVar6;
      param_3[3] = uVar13;
      param_3[4] = uVar17;
      param_3[5] = iVar7;
      if (*(int *)(this + 0x58) != 0) {
        iVar6 = (int)this;
        iVar7 = CorrectTemperature(iVar6,*(float *)(this + 0xac),*param_3);
        *param_3 = iVar7;
        iVar7 = CorrectTemperature(iVar6,*(float *)(this + 0xac),param_3[1]);
        param_3[1] = iVar7;
        iVar7 = CorrectTemperature(iVar6,*(float *)(this + 0xac),param_3[2]);
        param_3[2] = iVar7;
      }
      if (param_7 != 0) {
        pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
      }
      return uVar16;
    }
  }
  uVar2 = 0xe4ae0005;
  if (*(int *)(this + 0xec) != 0) {
    uVar2 = 0xe4ae0001;
  }
  puVar9 = (undefined4 *)__errno(pCVar8);
  *puVar9 = uVar2;
  if (param_7 != 0) {
    pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  }
  return 0;
}


==================================================================

### FUNC 001719c8 (1116 bytes) name=GetLineTemperatureInfo2

/* CFunctions::GetLineTemperatureInfo2(unsigned short*, unsigned int, int*, unsigned int, unsigned
   int, unsigned int, unsigned int, int) */

uint __thiscall
CFunctions::GetLineTemperatureInfo2
          (CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
          uint param_6,uint param_7,int param_8)

{
  ulong uVar1;
  ushort *puVar2;
  uint uVar3;
  undefined4 uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  uint uVar10;
  int iVar11;
  ushort *puVar13;
  undefined4 *puVar14;
  uint uVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  uint uVar19;
  ushort uVar20;
  ushort uVar21;
  ushort uVar22;
  ushort uVar23;
  ushort uVar24;
  ushort uVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  uint uVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined8 uVar39;
  undefined8 uVar40;
  uint uVar41;
  uint uVar42;
  CFunctions *pCVar12;
  
  pCVar12 = this;
  if (param_8 != 0) {
    uVar10 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar12 = (CFunctions *)(ulong)uVar10;
  }
  if ((((*(int *)(this + 0xec) == 0) || (uVar10 = *(uint *)(this + 0x1da8), uVar10 <= param_4)) ||
      (uVar10 <= param_6)) ||
     ((*(uint *)(this + 0x1dac) <= param_5 || (*(uint *)(this + 0x1dac) <= param_7)))) {
LAB_00171b28:
    uVar4 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar4 = 0xe4ae0001;
    }
    puVar14 = (undefined4 *)__errno(pCVar12);
    *puVar14 = uVar4;
    if (param_8 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    return 0;
  }
  if (param_4 == param_6) {
    if ((((param_2 < 2) || (param_1 == (ushort *)0x0)) || (param_3 == (int *)0x0)) ||
       (param_5 == param_7)) goto LAB_00171b28;
  }
  else if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || (param_3 == (int *)0x0))
  goto LAB_00171b28;
  iVar11 = param_4 - param_6;
  uVar41 = param_6;
  uVar31 = param_7;
  uVar42 = param_5;
  uVar3 = param_4;
  if (param_4 < param_6 || iVar11 == 0) {
    uVar41 = param_4;
    uVar31 = param_5;
    uVar42 = param_7;
    uVar3 = param_6;
  }
  iVar26 = -iVar11;
  if (-1 < iVar11) {
    iVar26 = iVar11;
  }
  iVar28 = param_5 - param_7;
  iVar27 = -iVar28;
  if (-1 < iVar28) {
    iVar27 = iVar28;
  }
  if (iVar26 < iVar27) {
    iVar11 = iVar28;
  }
  iVar28 = -iVar11;
  if (-1 < iVar11) {
    iVar28 = iVar11;
  }
  uVar16 = param_2 >> 1;
  uVar5 = uVar16;
  if (iVar28 + 1 < (int)uVar16) {
    uVar5 = iVar28 + 1;
  }
  if (iVar26 < iVar27) {
    iVar11 = uVar42 - uVar31;
    if (iVar11 == 0 || (int)uVar42 < (int)uVar31) {
      if ((int)uVar42 < (int)((uVar31 - uVar5) + 1)) {
        uVar42 = (uVar31 - uVar5) + 1;
      }
      if ((int)uVar42 <= (int)uVar31) {
        lVar17 = *(long *)(this + 0x140);
        uVar41 = ~param_4;
        lVar18 = (long)(int)uVar31 + 1;
        if (uVar41 < ~param_6) {
          uVar41 = ~param_6;
        }
        iVar26 = 0;
        iVar27 = (uVar31 * uVar10 + -1) - uVar41;
        puVar13 = param_1;
        do {
          iVar29 = 0;
          if (iVar11 != 0) {
            iVar29 = iVar26 / iVar11;
          }
          lVar18 = lVar18 + -1;
          iVar26 = iVar26 + (~uVar3 - uVar41);
          *puVar13 = *(ushort *)(lVar17 + (ulong)(uint)(iVar27 + iVar29) * 2);
          iVar27 = iVar27 - uVar10;
          puVar13 = puVar13 + 1;
        } while ((int)uVar42 < lVar18);
      }
    }
    else {
      uVar15 = (uVar31 + uVar5) - 1;
      if ((int)uVar42 <= (int)uVar15) {
        uVar15 = uVar42;
      }
      if ((int)uVar31 <= (int)uVar15) {
        lVar17 = *(long *)(this + 0x140);
        uVar42 = ~param_4;
        lVar18 = (long)(int)uVar31 + -1;
        if (uVar42 < ~param_6) {
          uVar42 = ~param_6;
        }
        iVar26 = 0;
        iVar27 = (uVar31 * uVar10 + -1) - uVar42;
        puVar13 = param_1;
        do {
          iVar29 = 0;
          if (iVar11 != 0) {
            iVar29 = iVar26 / iVar11;
          }
          lVar18 = lVar18 + 1;
          iVar26 = iVar26 + (uVar3 - uVar41);
          *puVar13 = *(ushort *)(lVar17 + (ulong)(uint)(iVar27 + iVar29) * 2);
          iVar27 = iVar27 + uVar10;
          puVar13 = puVar13 + 1;
        } while (lVar18 < (int)uVar15);
      }
    }
  }
  else {
    uVar15 = (uVar41 + uVar5) - 1;
    if ((int)uVar3 <= (int)uVar15) {
      uVar15 = uVar3;
    }
    if ((int)uVar41 <= (int)uVar15) {
      lVar17 = *(long *)(this + 0x140);
      iVar11 = 0;
      iVar26 = uVar3 - uVar41;
      lVar18 = (long)(int)uVar41 + -1;
      puVar13 = param_1;
      do {
        iVar27 = 0;
        if (iVar26 != 0) {
          iVar27 = iVar11 / iVar26;
        }
        lVar18 = lVar18 + 1;
        iVar11 = iVar11 + (uVar42 - uVar31);
        *puVar13 = *(ushort *)(lVar17 + (ulong)(uVar41 + uVar10 * (iVar27 + uVar31)) * 2);
        uVar41 = uVar41 + 1;
        puVar13 = puVar13 + 1;
      } while (lVar18 < (int)uVar15);
    }
  }
  if (uVar5 == 0) {
    uVar42 = 0;
    uVar41 = 0;
    uVar31 = 0xffff;
    goto LAB_00171d70;
  }
  uVar41 = -iVar28 - 2;
  if ((int)uVar41 < (int)~uVar16) {
    uVar41 = ~uVar16;
  }
  uVar1 = (ulong)(-uVar41 - 2) + 1;
  if (uVar1 < 8) {
LAB_00171d2c:
    uVar41 = 0;
    uVar19 = 0;
    uVar15 = 0xffffffff;
    uVar16 = uVar5;
  }
  else {
    uVar3 = -uVar41 - 1 & 7;
    lVar18 = uVar1 - uVar3;
    if (lVar18 == 0) goto LAB_00171d2c;
    puVar2 = param_1 + lVar18;
    iVar11 = (int)lVar18;
    puVar13 = param_1 + 4;
    auVar35._8_8_ = 0xffffffffffffffff;
    auVar35._0_8_ = 0xffffffffffffffff;
    iVar26 = 0;
    iVar27 = 0;
    iVar28 = 0;
    iVar29 = 0;
    iVar30 = 0;
    iVar32 = 0;
    iVar33 = 0;
    iVar34 = 0;
    auVar36 = ZEXT816(0);
    auVar37 = ZEXT816(0);
    auVar38._8_8_ = 0xffffffffffffffff;
    auVar38._0_8_ = 0xffffffffffffffff;
    do {
      uVar39 = *(undefined8 *)(puVar13 + -4);
      uVar40 = *(undefined8 *)puVar13;
      lVar18 = lVar18 + -8;
      puVar13 = puVar13 + 8;
      uVar41 = CONCAT22(0,(ushort)uVar39);
      uVar20 = (ushort)((ulong)uVar39 >> 0x10);
      uVar22 = (ushort)((ulong)uVar39 >> 0x20);
      uVar24 = (ushort)((ulong)uVar39 >> 0x30);
      uVar42 = CONCAT22(0,(ushort)uVar40);
      uVar21 = (ushort)((ulong)uVar40 >> 0x10);
      uVar23 = (ushort)((ulong)uVar40 >> 0x20);
      uVar25 = (ushort)((ulong)uVar40 >> 0x30);
      iVar26 = iVar26 + ((uint)uVar39 & 0xffff);
      iVar27 = iVar27 + (uint)uVar20;
      iVar28 = iVar28 + (uint)uVar22;
      iVar29 = iVar29 + (uint)uVar24;
      iVar30 = iVar30 + ((uint)uVar40 & 0xffff);
      iVar32 = iVar32 + (uint)uVar21;
      iVar33 = iVar33 + (uint)uVar23;
      iVar34 = iVar34 + (uint)uVar25;
      auVar6._4_2_ = uVar20;
      auVar6._0_4_ = uVar41;
      auVar6._6_2_ = 0;
      auVar6._8_2_ = uVar22;
      auVar6._10_2_ = 0;
      auVar6._12_2_ = uVar24;
      auVar6._14_2_ = 0;
      auVar36 = NEON_umax(auVar36,auVar6,4);
      auVar8._4_2_ = uVar21;
      auVar8._0_4_ = uVar42;
      auVar8._6_2_ = 0;
      auVar8._8_2_ = uVar23;
      auVar8._10_2_ = 0;
      auVar8._12_2_ = uVar25;
      auVar8._14_2_ = 0;
      auVar37 = NEON_umax(auVar37,auVar8,4);
      auVar7._4_2_ = uVar20;
      auVar7._0_4_ = uVar41;
      auVar7._6_2_ = 0;
      auVar7._8_2_ = uVar22;
      auVar7._10_2_ = 0;
      auVar7._12_2_ = uVar24;
      auVar7._14_2_ = 0;
      auVar35 = NEON_umin(auVar35,auVar7,4);
      auVar9._4_2_ = uVar21;
      auVar9._0_4_ = uVar42;
      auVar9._6_2_ = 0;
      auVar9._8_2_ = uVar23;
      auVar9._10_2_ = 0;
      auVar9._12_2_ = uVar25;
      auVar9._14_2_ = 0;
      auVar38 = NEON_umin(auVar38,auVar9,4);
    } while (lVar18 != 0);
    auVar35 = NEON_umin(auVar35,auVar38,4);
    auVar36 = NEON_umax(auVar36,auVar37,4);
    uVar31 = NEON_uminv(auVar35,4);
    uVar42 = NEON_umaxv(auVar36,4);
    uVar41 = iVar30 + iVar26 + iVar32 + iVar27 + iVar33 + iVar28 + iVar34 + iVar29;
    param_1 = puVar2;
    uVar16 = uVar5 - iVar11;
    uVar15 = uVar31;
    uVar19 = uVar42;
    if (uVar3 == 0) goto LAB_00171d70;
  }
  do {
    uVar20 = *param_1;
    uVar16 = uVar16 - 1;
    uVar42 = (uint)uVar20;
    if (uVar20 <= uVar19) {
      uVar42 = uVar19;
    }
    uVar31 = (uint)uVar20;
    uVar41 = uVar41 + uVar31;
    if (uVar15 <= uVar31) {
      uVar31 = uVar15;
    }
    param_1 = param_1 + 1;
    uVar15 = uVar31;
    uVar19 = uVar42;
  } while (uVar16 != 0);
LAB_00171d70:
  uVar10 = (uVar10 * (param_7 + param_5) >> 1) + (param_6 + param_4 >> 1);
  iVar11 = ReviseTemperature(this,(ushort)uVar31,uVar10,0);
  *param_3 = iVar11;
  iVar11 = ReviseTemperature(this,(ushort)uVar42,uVar10,0);
  param_3[1] = iVar11;
  uVar20 = 0;
  if (uVar5 != 0) {
    uVar20 = (ushort)(uVar41 / uVar5);
  }
  iVar11 = ReviseTemperature(this,uVar20,uVar10,0);
  param_3[2] = iVar11;
  if (*(int *)(this + 0x58) != 0) {
    iVar26 = (int)this;
    iVar11 = CorrectTemperature(iVar26,*(float *)(this + 0xac),*param_3);
    *param_3 = iVar11;
    iVar11 = CorrectTemperature(iVar26,*(float *)(this + 0xac),param_3[1]);
    param_3[1] = iVar11;
    iVar11 = CorrectTemperature(iVar26,*(float *)(this + 0xac),param_3[2]);
    param_3[2] = iVar11;
  }
  if (param_8 == 0) {
    return uVar5;
  }
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return uVar5;
}


==================================================================

### FUNC 00171e24 (1300 bytes) name=GetLineTemperatureInfo3

/* CFunctions::GetLineTemperatureInfo3(int*, unsigned int, int*, unsigned int, unsigned int,
   unsigned int, unsigned int, int) */

uint __thiscall
CFunctions::GetLineTemperatureInfo3
          (CFunctions *this,int *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
          uint param_6,uint param_7,int param_8)

{
  ulong uVar1;
  undefined4 uVar2;
  uint uVar3;
  int iVar4;
  ushort uVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  undefined4 *puVar10;
  uint uVar11;
  uint uVar12;
  uint *puVar13;
  long lVar14;
  uint uVar15;
  int *piVar16;
  long lVar17;
  uint uVar18;
  uint uVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  undefined8 uVar24;
  uint uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  CFunctions *pCVar9;
  
  pCVar9 = this;
  if (param_8 != 0) {
    uVar7 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar9 = (CFunctions *)(ulong)uVar7;
  }
  if ((((*(int *)(this + 0xec) == 0) || (uVar7 = *(uint *)(this + 0x1da8), uVar7 <= param_4)) ||
      (uVar7 <= param_6)) ||
     ((*(uint *)(this + 0x1dac) <= param_5 || (*(uint *)(this + 0x1dac) <= param_7)))) {
LAB_00171f9c:
    uVar2 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar2 = 0xe4ae0001;
    }
    puVar10 = (undefined4 *)__errno(pCVar9);
    *puVar10 = uVar2;
    if (param_8 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    return 0;
  }
  if (param_4 == param_6) {
    if ((((param_2 < 4) || (param_1 == (int *)0x0)) || (param_3 == (int *)0x0)) ||
       (param_5 == param_7)) goto LAB_00171f9c;
  }
  else if (((param_2 < 4) || (param_1 == (int *)0x0)) || (param_3 == (int *)0x0)) goto LAB_00171f9c;
  iVar8 = param_4 - param_6;
  uVar12 = param_6;
  uVar15 = param_7;
  uVar19 = param_5;
  uVar25 = param_4;
  if (param_4 < param_6 || iVar8 == 0) {
    uVar12 = param_4;
    uVar15 = param_5;
    uVar19 = param_7;
    uVar25 = param_6;
  }
  iVar20 = -iVar8;
  if (-1 < iVar8) {
    iVar20 = iVar8;
  }
  iVar4 = param_5 - param_7;
  iVar21 = -iVar4;
  if (-1 < iVar4) {
    iVar21 = iVar4;
  }
  if (iVar20 < iVar21) {
    iVar8 = iVar4;
  }
  iVar4 = -iVar8;
  if (-1 < iVar8) {
    iVar4 = iVar8;
  }
  uVar6 = param_2 >> 2;
  uVar3 = uVar6;
  if (iVar4 + 1 < (int)uVar6) {
    uVar3 = iVar4 + 1;
  }
  if (iVar20 < iVar21) {
    iVar8 = uVar19 - uVar15;
    if (iVar8 == 0 || (int)uVar19 < (int)uVar15) {
      if ((int)uVar19 < (int)((uVar15 - uVar3) + 1)) {
        uVar19 = (uVar15 - uVar3) + 1;
      }
      if ((int)uVar19 <= (int)uVar15) {
        lVar14 = *(long *)(this + 0x140);
        *param_1 = (uint)*(ushort *)(lVar14 + (ulong)(uVar12 + uVar7 * uVar15) * 2);
        if ((int)uVar19 < (int)uVar15) {
          uVar7 = ~param_4;
          if (uVar7 < ~param_6) {
            uVar7 = ~param_6;
          }
          lVar17 = (long)(int)uVar15;
          iVar20 = ~uVar25 - uVar7;
          puVar13 = (uint *)param_1;
          do {
            uVar15 = uVar15 - 1;
            puVar13 = puVar13 + 1;
            iVar21 = 0;
            if (iVar8 != 0) {
              iVar21 = iVar20 / iVar8;
            }
            lVar17 = lVar17 + -1;
            iVar20 = iVar20 + (~uVar25 - uVar7);
            *puVar13 = (uint)*(ushort *)
                              (lVar14 + (ulong)(iVar21 + uVar12 + *(int *)(this + 0x1da8) * uVar15)
                                        * 2);
          } while ((int)uVar19 < lVar17);
        }
      }
    }
    else {
      uVar11 = (uVar15 + uVar3) - 1;
      if ((int)uVar19 <= (int)uVar11) {
        uVar11 = uVar19;
      }
      if ((int)uVar15 <= (int)uVar11) {
        lVar14 = *(long *)(this + 0x140);
        *param_1 = (uint)*(ushort *)(lVar14 + (ulong)(uVar12 + uVar7 * uVar15) * 2);
        if ((int)uVar15 < (int)uVar11) {
          lVar17 = (long)(int)uVar15;
          iVar20 = uVar25 - uVar12;
          puVar13 = (uint *)param_1;
          do {
            uVar15 = uVar15 + 1;
            puVar13 = puVar13 + 1;
            iVar21 = 0;
            if (iVar8 != 0) {
              iVar21 = iVar20 / iVar8;
            }
            lVar17 = lVar17 + 1;
            iVar20 = iVar20 + (uVar25 - uVar12);
            *puVar13 = (uint)*(ushort *)
                              (lVar14 + (ulong)(iVar21 + uVar12 + *(int *)(this + 0x1da8) * uVar15)
                                        * 2);
          } while (lVar17 < (int)uVar11);
        }
      }
    }
  }
  else {
    uVar11 = (uVar12 + uVar3) - 1;
    if ((int)uVar25 <= (int)uVar11) {
      uVar11 = uVar25;
    }
    if ((int)uVar12 <= (int)uVar11) {
      lVar14 = *(long *)(this + 0x140);
      *param_1 = (uint)*(ushort *)(lVar14 + (ulong)(uVar12 + uVar7 * uVar15) * 2);
      if ((int)uVar12 < (int)uVar11) {
        iVar20 = uVar25 - uVar12;
        lVar17 = (long)(int)uVar12;
        iVar8 = uVar19 - uVar15;
        puVar13 = (uint *)param_1;
        do {
          uVar12 = uVar12 + 1;
          puVar13 = puVar13 + 1;
          iVar21 = 0;
          if (iVar20 != 0) {
            iVar21 = iVar8 / iVar20;
          }
          lVar17 = lVar17 + 1;
          iVar8 = iVar8 + (uVar19 - uVar15);
          *puVar13 = (uint)*(ushort *)
                            (lVar14 + (ulong)(uVar12 + *(int *)(this + 0x1da8) * (iVar21 + uVar15))
                                      * 2);
        } while (lVar17 < (int)uVar11);
      }
    }
  }
  if (uVar3 == 0) {
    uVar19 = 0;
    uVar7 = 0;
    uVar12 = 0xffff;
    goto LAB_0017221c;
  }
  uVar7 = -iVar4 - 2;
  if ((int)uVar7 < (int)~uVar6) {
    uVar7 = ~uVar6;
  }
  uVar1 = (ulong)(-uVar7 - 2) + 1;
  if (uVar1 < 4) {
LAB_001721d8:
    uVar7 = 0;
    uVar18 = 0;
    uVar11 = 0xffffffff;
    puVar13 = (uint *)param_1;
    uVar25 = uVar3;
  }
  else {
    uVar15 = -uVar7 - 1 & 3;
    lVar14 = uVar1 - uVar15;
    if (lVar14 == 0) goto LAB_001721d8;
    puVar13 = (uint *)(param_1 + lVar14);
    iVar8 = (int)lVar14;
    piVar16 = param_1 + 2;
    uVar27 = 0xffffffffffffffff;
    iVar20 = 0;
    iVar21 = 0;
    iVar22 = 0;
    iVar23 = 0;
    uVar24 = 0;
    uVar26 = 0;
    uVar28 = 0xffffffffffffffff;
    do {
      uVar29 = *(undefined8 *)(piVar16 + -2);
      uVar30 = *(undefined8 *)piVar16;
      lVar14 = lVar14 + -4;
      piVar16 = piVar16 + 4;
      iVar20 = (int)uVar29 + iVar20;
      iVar21 = (int)((ulong)uVar29 >> 0x20) + iVar21;
      iVar22 = (int)uVar30 + iVar22;
      iVar23 = (int)((ulong)uVar30 >> 0x20) + iVar23;
      uVar24 = NEON_umax(uVar29,uVar24,4);
      uVar26 = NEON_umax(uVar30,uVar26,4);
      uVar27 = NEON_umin(uVar29,uVar27,4);
      uVar28 = NEON_umin(uVar30,uVar28,4);
    } while (lVar14 != 0);
    uVar27 = NEON_umin(uVar27,uVar28,4);
    uVar7 = (uint)((ulong)uVar27 >> 0x20);
    uVar24 = NEON_umax(uVar24,uVar26,4);
    uVar25 = (uint)((ulong)uVar24 >> 0x20);
    uVar12 = (uint)uVar27;
    if (uVar7 <= (uint)uVar27) {
      uVar12 = uVar7;
    }
    uVar7 = iVar22 + iVar20 + iVar23 + iVar21;
    uVar19 = (uint)uVar24;
    if ((uint)uVar24 <= uVar25) {
      uVar19 = uVar25;
    }
    uVar25 = uVar3 - iVar8;
    uVar11 = uVar12;
    uVar18 = uVar19;
    if (uVar15 == 0) goto LAB_0017221c;
  }
  do {
    uVar12 = *puVar13;
    uVar25 = uVar25 - 1;
    uVar19 = uVar12;
    if (uVar12 <= uVar18) {
      uVar19 = uVar18;
    }
    uVar7 = uVar12 + uVar7;
    if (uVar11 <= uVar12) {
      uVar12 = uVar11;
    }
    puVar13 = puVar13 + 1;
    uVar11 = uVar12;
    uVar18 = uVar19;
  } while (uVar25 != 0);
LAB_0017221c:
  uVar15 = (*(int *)(this + 0x1da8) * (param_7 + param_5) >> 1) + (param_6 + param_4 >> 1);
  iVar8 = ReviseTemperature(this,(ushort)uVar12,uVar15,0);
  *param_3 = iVar8;
  iVar8 = ReviseTemperature(this,(ushort)uVar19,uVar15,0);
  param_3[1] = iVar8;
  uVar5 = 0;
  if (uVar3 != 0) {
    uVar5 = (ushort)(uVar7 / uVar3);
  }
  iVar8 = ReviseTemperature(this,uVar5,uVar15,0);
  param_3[2] = iVar8;
  iVar8 = (int)this;
  if (*(int *)(this + 0x58) != 0) {
    iVar20 = CorrectTemperature(iVar8,*(float *)(this + 0xac),*param_3);
    *param_3 = iVar20;
    iVar20 = CorrectTemperature(iVar8,*(float *)(this + 0xac),param_3[1]);
    param_3[1] = iVar20;
    iVar20 = CorrectTemperature(iVar8,*(float *)(this + 0xac),param_3[2]);
    param_3[2] = iVar20;
  }
  if (uVar3 != 0) {
    uVar7 = -iVar4 - 2;
    if ((int)uVar7 < (int)~uVar6) {
      uVar7 = ~uVar6;
    }
    iVar20 = uVar7 + 1;
    do {
      uVar7 = ReviseTemperature(this,(ushort)*param_1,uVar15,0);
      *param_1 = uVar7;
      if (*(int *)(this + 0x58) != 0) {
        uVar7 = CorrectTemperature(iVar8,*(float *)(this + 0xac),uVar7);
        *param_1 = uVar7;
      }
      iVar20 = iVar20 + 1;
      param_1 = param_1 + 1;
    } while (iVar20 != 0);
  }
  if (param_8 == 0) {
    return uVar3;
  }
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return uVar3;
}


==================================================================

### FUNC 00172338 (500 bytes) name=GetRgnTemperatureInfo

/* CFunctions::GetRgnTemperatureInfo(unsigned int const*, unsigned int, int*, int) */

undefined8 __thiscall
CFunctions::GetRgnTemperatureInfo
          (CFunctions *this,uint *param_1,uint param_2,int *param_3,int param_4)

{
  ushort uVar1;
  uint uVar2;
  undefined4 uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  ushort uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  undefined8 uVar13;
  undefined4 *puVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  ushort uVar20;
  long lVar21;
  CFunctions *pCVar12;
  
  pCVar12 = this;
  if (param_4 != 0) {
    uVar9 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar12 = (CFunctions *)(ulong)uVar9;
  }
  if ((((param_2 == 0) || (param_1 == (uint *)0x0)) || (param_3 == (int *)0x0)) ||
     (*(int *)(this + 0xec) == 0)) {
    uVar3 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar3 = 0xe4ae0001;
    }
    puVar14 = (undefined4 *)__errno(pCVar12);
    *puVar14 = uVar3;
    if (param_4 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar13 = 0;
  }
  else {
    uVar5 = *(uint *)(this + 0x1da8);
    uVar19 = 0;
    uVar18 = 0;
    lVar21 = 0;
    uVar9 = 0;
    uVar16 = 0;
    uVar17 = param_2;
    uVar15 = 0xffffffff;
    uVar20 = 0;
    do {
      uVar6 = *param_1;
      uVar17 = uVar17 - 1;
      uVar7 = *(ushort *)(*(long *)(this + 0x140) + (ulong)uVar6 * 2);
      uVar8 = 0;
      if (uVar5 != 0) {
        uVar8 = uVar6 / uVar5;
      }
      uVar16 = (uVar6 + uVar16) - uVar8 * uVar5;
      uVar2 = uVar6;
      uVar1 = uVar7;
      if (uVar7 <= uVar20) {
        uVar2 = uVar18;
        uVar1 = uVar20;
      }
      uVar18 = uVar2;
      lVar21 = lVar21 + (ulong)uVar7;
      uVar2 = (uint)uVar7;
      if (uVar15 <= uVar7) {
        uVar2 = uVar15;
        uVar6 = uVar19;
      }
      uVar19 = uVar6;
      uVar9 = uVar8 + uVar9;
      param_1 = param_1 + 1;
      uVar15 = uVar2;
      uVar20 = uVar1;
    } while (uVar17 != 0);
    uVar17 = 0;
    if (param_2 != 0) {
      uVar17 = uVar16 / param_2;
    }
    uVar16 = 0;
    if (param_2 != 0) {
      uVar16 = uVar9 / param_2;
    }
    iVar10 = ReviseTemperature(this,(ushort)uVar2,uVar19,1);
    *param_3 = iVar10;
    iVar10 = ReviseTemperature(this,uVar1,uVar18,1);
    param_3[1] = iVar10;
    uVar20 = 0;
    if ((ulong)param_2 != 0) {
      uVar20 = (ushort)(lVar21 / (long)(ulong)param_2);
    }
    iVar10 = ReviseTemperature(this,uVar20,uVar17 + uVar5 * uVar16,1);
    param_3[2] = iVar10;
    param_3[3] = uVar19;
    param_3[4] = uVar18;
    if (*(int *)(this + 0x58) != 0) {
      iVar11 = (int)this;
      iVar10 = CorrectTemperature(iVar11,*(float *)(this + 0xac),*param_3);
      *param_3 = iVar10;
      iVar10 = CorrectTemperature(iVar11,*(float *)(this + 0xac),param_3[1]);
      param_3[1] = iVar10;
      iVar10 = CorrectTemperature(iVar11,*(float *)(this + 0xac),param_3[2]);
      param_3[2] = iVar10;
    }
    iVar11 = *param_3;
    iVar4 = param_3[1];
    if (iVar4 < iVar11) {
      param_3[1] = iVar11;
      iVar4 = iVar11;
    }
    if (iVar4 < iVar10) {
      param_3[2] = iVar4;
      iVar10 = iVar4;
    }
    if (iVar10 < iVar11) {
      param_3[2] = iVar11;
    }
    if (param_4 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar13 = 1;
  }
  return uVar13;
}


==================================================================

### FUNC 0017252c (388 bytes) name=GetTemperature

/* CFunctions::GetTemperature(unsigned int, unsigned int, int) */

uint __thiscall CFunctions::GetTemperature(CFunctions *this,uint param_1,uint param_2,int param_3)

{
  bool bVar1;
  undefined4 uVar2;
  int iVar3;
  ushort uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  undefined4 *puVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  CFunctions *pCVar9;
  
  pCVar9 = this;
  if (param_3 != 0) {
    uVar8 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar9 = (CFunctions *)(ulong)uVar8;
  }
  if ((*(int *)(this + 0xec) == 0) || (*(uint *)(this + 0x76d0) <= param_1)) {
    uVar2 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar2 = 0xe4ae0001;
    }
    puVar10 = (undefined4 *)__errno(pCVar9);
    *puVar10 = uVar2;
    if (param_3 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar8 = 0x80000001;
  }
  else {
    if (param_2 - 1 < 5) {
      iVar14 = *(int *)(&DAT_00439c20 + (long)(int)(param_2 - 1) * 4);
    }
    else {
      iVar14 = 3;
    }
    uVar8 = *(uint *)(this + 0x1da8);
    uVar5 = 0;
    if (uVar8 != 0) {
      uVar5 = param_1 / uVar8;
    }
    iVar3 = param_1 - uVar5 * uVar8;
    iVar13 = iVar3 - iVar14;
    iVar3 = iVar3 + iVar14;
    if (iVar3 < iVar13) {
      uVar11 = 0;
      uVar12 = 0;
    }
    else {
      uVar12 = 0;
      uVar11 = 0;
      uVar15 = param_1 + iVar14 * ~uVar8;
      do {
        if (((-1 < iVar13) && (iVar13 < (int)uVar8)) &&
           (uVar6 = uVar15, iVar7 = uVar5 - iVar14, (int)(uVar5 - iVar14) <= (int)(uVar5 + iVar14)))
        {
          do {
            if ((-1 < iVar7) && (iVar7 < *(int *)(this + 0x1dac))) {
              uVar11 = uVar11 + 1;
              uVar12 = uVar12 + *(ushort *)(*(long *)(this + 0x140) + (ulong)uVar6 * 2);
            }
            bVar1 = iVar7 < (int)(uVar5 + iVar14);
            uVar6 = uVar6 + uVar8;
            iVar7 = iVar7 + 1;
          } while (bVar1);
        }
        uVar15 = uVar15 + 1;
        bVar1 = iVar13 < iVar3;
        iVar13 = iVar13 + 1;
      } while (bVar1);
    }
    uVar4 = 0;
    if (uVar11 != 0) {
      uVar4 = (ushort)(uVar12 / uVar11);
    }
    uVar8 = ReviseTemperature(this,uVar4,param_1,1);
    if (*(int *)(this + 0x58) != 0) {
      uVar8 = CorrectTemperature((int)this,*(float *)(this + 0xac),uVar8);
    }
    if (param_3 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
  }
  return uVar8;
}


==================================================================

### FUNC 001726b0 (108 bytes) name=Temp2Energe

/* CFunctions::Temp2Energe(int) const */

int __thiscall CFunctions::Temp2Energe(CFunctions *this,int param_1)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  
  iVar1 = param_1 + 50000;
  iVar4 = param_1 + 0xe34f;
  if (-1 < iVar1) {
    iVar4 = iVar1;
  }
  uVar2 = iVar4 >> 0xd;
  if (0x110 < uVar2) {
    uVar2 = 0x111;
  }
  uVar3 = 0;
  if (-0xe350 < param_1) {
    uVar3 = uVar2;
  }
  iVar4 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar3 + 1) * 4) -
          *(int *)(PTR_T2E_00501dc0 + (ulong)uVar3 * 4)) * (iVar1 + uVar3 * -0x2000);
  iVar1 = iVar4 + 0x1fff;
  if (-1 < iVar4) {
    iVar1 = iVar4;
  }
  return *(int *)(PTR_T2E_00501dc0 + (ulong)uVar3 * 4) + (iVar1 >> 0xd);
}


==================================================================

### FUNC 0017271c (248 bytes) name=dTemp2dEnerge

/* CFunctions::dTemp2dEnerge(int, int) const */

int __thiscall CFunctions::dTemp2dEnerge(CFunctions *this,int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  
  iVar1 = param_1 + 50000;
  iVar2 = param_1 + 0xe34f;
  if (-1 < iVar1) {
    iVar2 = iVar1;
  }
  uVar3 = iVar2 >> 0xd;
  if (0x110 < uVar3) {
    uVar3 = 0x111;
  }
  iVar2 = iVar1 + param_2;
  uVar4 = 0;
  if (-0xe350 < param_1) {
    uVar4 = uVar3;
  }
  iVar6 = iVar2 + 0x1fff;
  if (-1 < iVar2) {
    iVar6 = iVar2;
  }
  uVar3 = iVar6 >> 0xd;
  if (0x110 < uVar3) {
    uVar3 = 0x111;
  }
  uVar5 = 0;
  if (-0x2000 < iVar2) {
    uVar5 = uVar3;
  }
  if (uVar4 == uVar5) {
    iVar2 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar4 + 1) * 4) -
            *(int *)(PTR_T2E_00501dc0 + (ulong)uVar4 * 4)) * param_2;
    iVar1 = iVar2 + 0x1fff;
    if (-1 < iVar2) {
      iVar1 = iVar2;
    }
    return iVar1 >> 0xd;
  }
  iVar6 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar4 + 1) * 4) -
          *(int *)(PTR_T2E_00501dc0 + (ulong)uVar4 * 4)) * (iVar1 + uVar4 * -0x2000);
  iVar2 = (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar5 + 1) * 4) -
          *(int *)(PTR_T2E_00501dc0 + (ulong)uVar5 * 4)) * (iVar2 + uVar5 * -0x2000);
  iVar1 = iVar2 + 0x1fff;
  if (-1 < iVar2) {
    iVar1 = iVar2;
  }
  iVar2 = iVar6 + 0x1fff;
  if (-1 < iVar6) {
    iVar2 = iVar6;
  }
  return ((*(int *)(PTR_T2E_00501dc0 + (ulong)uVar5 * 4) -
          *(int *)(PTR_T2E_00501dc0 + (ulong)uVar4 * 4)) - (iVar2 >> 0xd)) + (iVar1 >> 0xd);
}


==================================================================

### FUNC 00172814 (260 bytes) name=dEnerge2dTemp

/* CFunctions::dEnerge2dTemp(int, int) const */

int __thiscall CFunctions::dEnerge2dTemp(CFunctions *this,int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  
  iVar1 = param_1 + 50000;
  iVar2 = -param_2;
  if (-1 < param_2) {
    iVar2 = param_2;
  }
  iVar4 = param_1 + 0xe34f;
  if (-1 < iVar1) {
    iVar4 = iVar1;
  }
  uVar7 = iVar4 >> 0xd;
  if (0x110 < uVar7) {
    uVar7 = 0x111;
  }
  uVar8 = 0;
  if (-0xe350 < param_1) {
    uVar8 = uVar7;
  }
  iVar4 = *(int *)(PTR_T2E_00501dc0 + (ulong)uVar8 * 4);
  iVar6 = *(int *)(PTR_T2E_00501dc0 + (ulong)(uVar8 + 1) * 4) - iVar4;
  if (iVar6 < iVar2 * 2) {
    iVar6 = iVar6 * (iVar1 + uVar8 * -0x2000);
    iVar1 = iVar6 + 0x1fff;
    if (-1 < iVar6) {
      iVar1 = iVar6;
    }
    iVar1 = iVar4 + param_2 + (iVar1 >> 0xd);
    if ((iVar1 < iVar4) || (*(int *)(PTR_T2E_00501dc0 + (ulong)(uVar8 + 1) * 4) < iVar1)) {
      uVar7 = 0;
      uVar8 = 0x112;
      do {
        uVar5 = uVar8 + uVar7 >> 1;
        uVar3 = uVar5;
        if (*(int *)(PTR_T2E_00501dc0 + (ulong)uVar5 * 4) <= iVar1) {
          uVar3 = uVar8;
          uVar7 = uVar5;
        }
        uVar8 = uVar3;
      } while (uVar7 + 1 < uVar3);
      return (-50000 - param_1) + uVar7 * 0x2000 +
             ((iVar1 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar7 * 4)) *
              *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar7 * 4) >> 10);
    }
  }
  return *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar8 * 4) * param_2 >> 10;
}


==================================================================

### FUNC 00172918 (104 bytes) name=Energe2Temp

/* CFunctions::Energe2Temp(int) const */

int __thiscall CFunctions::Energe2Temp(CFunctions *this,int param_1)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  
  uVar3 = 0;
  uVar4 = 0x112;
  do {
    uVar2 = uVar3 + uVar4 >> 1;
    uVar1 = uVar2;
    if (*(int *)(PTR_T2E_00501dc0 + (ulong)uVar2 * 4) <= param_1) {
      uVar1 = uVar4;
      uVar3 = uVar2;
    }
    uVar4 = uVar1;
  } while (uVar3 + 1 < uVar1);
  return uVar3 * 0x2000 +
         ((param_1 - *(int *)(PTR_T2E_00501dc0 + (ulong)uVar3 * 4)) *
          *(int *)(PTR_E2TAccQ10_00501f60 + (ulong)uVar3 * 4) >> 10) + -50000;
}


==================================================================

### FUNC 00172980 (52 bytes) name=Radius2StrayEnery

/* CFunctions::Radius2StrayEnery(struct_LensParam const*, float) */

float __thiscall
CFunctions::Radius2StrayEnery(CFunctions *this,struct_LensParam *param_1,float param_2)

{
  struct_LensParam *psVar1;
  struct_LensParam *psVar2;
  
  psVar1 = param_1 + 0xc0;
  psVar2 = param_1 + 0xbc;
  if (param_2 <= *(float *)(param_1 + 0xb0)) {
    psVar1 = param_1 + 0xb8;
    psVar2 = param_1 + 0xb4;
  }
  return *(float *)psVar2 * param_2 + *(float *)psVar1;
}


==================================================================

### FUNC 001729b4 (1180 bytes) name=FindStrayRadius

/* CFunctions::FindStrayRadius(unsigned int, float, float*, unsigned int*) */

undefined8 __thiscall
CFunctions::FindStrayRadius
          (CFunctions *this,uint param_1,float param_2,float *param_3,uint *param_4)

{
  bool bVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  ushort uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  ushort *puVar12;
  long lVar13;
  ulong uVar14;
  long lVar15;
  uint uVar16;
  long lVar17;
  uint uVar18;
  ulong uVar19;
  ulong uVar20;
  ulong uVar21;
  int iVar22;
  uint uVar23;
  float fVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  uint uVar34;
  undefined8 uVar35;
  uint uVar36;
  undefined8 uVar37;
  int iVar38;
  undefined8 uVar39;
  int iVar40;
  int iVar41;
  int iVar42;
  undefined8 uVar43;
  uint uVar44;
  uint uVar45;
  uint uVar46;
  uint uVar47;
  uint uVar48;
  uint uVar49;
  uint uVar50;
  int iVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  int iVar55;
  int iVar56;
  
  uVar16 = *(uint *)(this + 19000);
  if (uVar16 == 0) {
    uVar16 = *(uint *)(this + 0x1e00);
    if ((int)(((*(uint *)(this + 0x1df8) & 0xffff) << (ulong)(*(uint *)(this + 0x76e4) & 0x1f)) -
             ((uVar16 & 0xffff) << (ulong)(*(uint *)(this + 0x76e4) & 0x1f))) < 10000) {
      uVar16 = 0xffff;
    }
    else {
      uVar16 = (int)(*(uint *)(this + 0x1df8) - uVar16) / 3 + uVar16;
    }
    *(uint *)(this + 19000) = uVar16;
  }
  lVar17 = *(long *)(this + 0x140);
  uVar7 = *(ushort *)(lVar17 + (ulong)param_1 * 2);
  if (uVar16 < uVar7) {
    uVar5 = *(uint *)(this + 0x1dd0);
    if (uVar5 != 0) {
      param_2 = (float)(1 << (ulong)(uVar5 & 0x1f)) * param_2;
    }
    uVar6 = *(uint *)(this + 0x1da8);
    uVar10 = 0;
    if (uVar6 != 0) {
      uVar10 = param_1 / uVar6;
    }
    uVar8 = param_1 - uVar10 * uVar6;
    uVar36 = (uVar6 - 1) - uVar8;
    uVar4 = *(int *)(this + 0x1dac) + ~uVar10;
    if (uVar36 <= *(int *)(this + 0x1dac) + ~uVar10) {
      uVar4 = uVar36;
    }
    uVar36 = uVar10;
    if ((int)uVar8 <= (int)uVar10) {
      uVar36 = uVar8;
    }
    if ((int)uVar36 <= (int)uVar4) {
      uVar4 = uVar36;
    }
    if (0 < (int)uVar4) {
      iVar29 = 0;
      iVar31 = 1;
      uVar36 = (uint)uVar7;
      do {
        if (iVar31 < 0) {
          uVar23 = 0;
        }
        else {
          uVar34 = iVar31 * 2;
          uVar14 = (ulong)(int)uVar34;
          uVar21 = uVar14 & ((long)uVar14 >> 0x3f ^ 0xffffffffffffffffU);
          lVar11 = lVar17 + (ulong)(uVar6 * (uVar10 - iVar31)) * 2 + (long)(int)uVar8 * 2 +
                   (long)iVar31 * -2;
          uVar18 = uVar6 * uVar34;
          if ((uVar21 < 8) || (uVar19 = uVar21 & 0x7ffffffffffffff8, uVar19 == 0)) {
            uVar20 = 0;
            uVar23 = 0;
          }
          else {
            uVar23 = 0;
            uVar20 = 0;
            if ((!CARRY4(uVar18,(uint)uVar21)) && (uVar21 >> 0x20 == 0)) {
              lVar13 = 0;
              iVar22 = 0;
              iVar25 = 0;
              iVar26 = 0;
              iVar27 = 0;
              iVar28 = 0;
              iVar30 = 0;
              iVar32 = 0;
              iVar33 = 0;
              uVar21 = uVar19;
              uVar23 = uVar18;
              do {
                puVar3 = (undefined8 *)(lVar11 + lVar13 * 2);
                puVar2 = (undefined8 *)(lVar11 + (ulong)uVar23 * 2);
                uVar35 = *puVar3;
                uVar37 = puVar3[1];
                uVar39 = *puVar2;
                uVar43 = puVar2[1];
                lVar13 = lVar13 + 8;
                uVar21 = uVar21 - 8;
                iVar22 = iVar22 + ((uint)uVar35 & 0xffff) + ((uint)uVar39 & 0xffff);
                iVar25 = iVar25 + (uint)(ushort)((ulong)uVar35 >> 0x10) +
                         (uint)(ushort)((ulong)uVar39 >> 0x10);
                iVar26 = iVar26 + (uint)(ushort)((ulong)uVar35 >> 0x20) +
                         (uint)(ushort)((ulong)uVar39 >> 0x20);
                iVar27 = iVar27 + (uint)(ushort)((ulong)uVar35 >> 0x30) +
                         (uint)(ushort)((ulong)uVar39 >> 0x30);
                iVar28 = iVar28 + ((uint)uVar37 & 0xffff) + ((uint)uVar43 & 0xffff);
                iVar30 = iVar30 + (uint)(ushort)((ulong)uVar37 >> 0x10) +
                         (uint)(ushort)((ulong)uVar43 >> 0x10);
                iVar32 = iVar32 + (uint)(ushort)((ulong)uVar37 >> 0x20) +
                         (uint)(ushort)((ulong)uVar43 >> 0x20);
                iVar33 = iVar33 + (uint)(ushort)((ulong)uVar37 >> 0x30) +
                         (uint)(ushort)((ulong)uVar43 >> 0x30);
                uVar23 = uVar23 + 8;
              } while (uVar21 != 0);
              uVar23 = iVar28 + iVar22 + iVar30 + iVar25 + iVar32 + iVar26 + iVar33 + iVar27;
              uVar20 = uVar19;
            }
          }
          do {
            uVar23 = uVar23 + *(ushort *)(lVar11 + uVar20 * 2) +
                     (uint)*(ushort *)(lVar11 + (ulong)(uVar18 + (int)uVar20) * 2);
            bVar1 = (long)uVar20 < (long)uVar14;
            uVar20 = uVar20 + 1;
          } while (bVar1);
          if (0 < iVar31) {
            lVar15 = (long)(int)uVar34;
            lVar13 = lVar15;
            if (lVar15 < 3) {
              lVar13 = 2;
            }
            if ((lVar13 - 1U < 8) || (uVar14 = lVar13 - 1U & 0xfffffffffffffff8, uVar14 == 0)) {
LAB_00172c30:
              uVar21 = 1;
            }
            else {
              lVar13 = lVar15;
              if (lVar15 < 3) {
                lVar13 = 2;
              }
              if ((uVar6 != 1) || (CARRY4(uVar34 | 1,(uint)(lVar13 - 2U)))) goto LAB_00172c30;
              uVar21 = 1;
              if (lVar13 - 2U >> 0x20 == 0) {
                iVar25 = 0;
                iVar26 = 0;
                uVar21 = uVar14 | 1;
                iVar22 = 0;
                iVar27 = 0;
                iVar28 = 0;
                iVar30 = 0;
                iVar32 = 0;
                uVar18 = 1;
                do {
                  puVar2 = (undefined8 *)(lVar11 + (ulong)uVar18 * 2);
                  uVar35 = *puVar2;
                  uVar37 = puVar2[1];
                  puVar2 = (undefined8 *)(lVar11 + (ulong)(uVar34 + uVar18) * 2);
                  uVar39 = *puVar2;
                  uVar43 = puVar2[1];
                  uVar14 = uVar14 - 8;
                  uVar23 = uVar23 + ((uint)uVar35 & 0xffff) + ((uint)uVar39 & 0xffff);
                  iVar22 = iVar22 + (uint)(ushort)((ulong)uVar35 >> 0x10) +
                           (uint)(ushort)((ulong)uVar39 >> 0x10);
                  iVar25 = iVar25 + (uint)(ushort)((ulong)uVar35 >> 0x20) +
                           (uint)(ushort)((ulong)uVar39 >> 0x20);
                  iVar26 = iVar26 + (uint)(ushort)((ulong)uVar35 >> 0x30) +
                           (uint)(ushort)((ulong)uVar39 >> 0x30);
                  iVar27 = iVar27 + ((uint)uVar37 & 0xffff) + ((uint)uVar43 & 0xffff);
                  iVar28 = iVar28 + (uint)(ushort)((ulong)uVar37 >> 0x10) +
                           (uint)(ushort)((ulong)uVar43 >> 0x10);
                  iVar30 = iVar30 + (uint)(ushort)((ulong)uVar37 >> 0x20) +
                           (uint)(ushort)((ulong)uVar43 >> 0x20);
                  iVar32 = iVar32 + (uint)(ushort)((ulong)uVar37 >> 0x30) +
                           (uint)(ushort)((ulong)uVar43 >> 0x30);
                  uVar18 = uVar18 + 8;
                } while (uVar14 != 0);
                uVar23 = iVar27 + uVar23 + iVar28 + iVar22 + iVar30 + iVar25 + iVar32 + iVar26;
              }
            }
            uVar18 = uVar6 * (int)uVar21;
            do {
              uVar21 = uVar21 + 1;
              uVar23 = uVar23 + *(ushort *)(lVar11 + (ulong)uVar18 * 2) +
                       (uint)*(ushort *)(lVar11 + (ulong)(uVar34 + uVar18) * 2);
              uVar18 = uVar18 + uVar6;
            } while ((long)uVar21 < lVar15);
          }
        }
        uVar34 = 0;
        if (iVar31 << 3 != 0) {
          uVar34 = uVar23 / (uint)(iVar31 << 3);
        }
        if ((int)uVar34 <= (int)uVar16) {
          fVar24 = (float)(int)((uVar16 - uVar36) * (iVar31 - iVar29)) /
                   (float)(int)(uVar34 - uVar36) + (float)iVar29;
          if (fVar24 != 0.0) goto LAB_00172ce8;
          break;
        }
        iVar29 = iVar31 + 1;
        iVar22 = iVar29;
        if (param_2 < (float)iVar31) {
          iVar22 = iVar31 * 9;
          iVar25 = iVar22 + 7;
          if (-1 < iVar22) {
            iVar25 = iVar22;
          }
          iVar22 = iVar25 >> 3;
          if (iVar25 >> 3 <= iVar29) {
            iVar22 = iVar29;
          }
        }
        iVar29 = iVar31;
        iVar31 = iVar22;
        uVar36 = uVar34;
      } while (iVar22 <= (int)uVar4);
    }
    fVar24 = (float)(int)uVar4;
    if (param_2 < fVar24) {
LAB_00172ce8:
      if ((int)(fVar24 + 2.5) <= (int)uVar4) {
        uVar4 = (int)(fVar24 + 2.5);
      }
      if (-1 < (int)uVar4) {
        uVar18 = uVar4 * 2;
        uVar23 = uVar18 & ((int)uVar18 >> 0x1f ^ 0xffffffffU);
        uVar9 = uVar23 | 1;
        uVar34 = 0;
        uVar36 = 0;
        lVar13 = (ulong)uVar9 - (ulong)(uVar23 & 7 | 1);
        lVar11 = 0;
        do {
          puVar12 = (ushort *)
                    (lVar17 + (ulong)(uVar6 * ((uVar10 - uVar4) + (int)lVar11)) * 2 +
                     (long)(int)uVar8 * 2 + (long)(int)uVar4 * -2);
          if ((uVar9 < 8) || (lVar13 == 0)) {
            iVar29 = 0;
          }
          else {
            iVar32 = 0;
            iVar33 = 0;
            iVar27 = 0;
            iVar28 = 0;
            lVar15 = 0;
            iVar29 = 0;
            iVar31 = 0;
            iVar22 = 0;
            iVar25 = 0;
            iVar30 = 0;
            iVar26 = 0;
            iVar38 = 0;
            iVar40 = 0;
            iVar41 = 0;
            iVar42 = 0;
            do {
              uVar35 = *(undefined8 *)(puVar12 + lVar15);
              uVar37 = *(undefined8 *)(puVar12 + lVar15 + 4);
              lVar15 = lVar15 + 8;
              uVar23 = (uint)uVar35 & 0xffff;
              uVar45 = (uint)(ushort)((ulong)uVar35 >> 0x20);
              uVar47 = (uint)uVar37 & 0xffff;
              uVar49 = (uint)(ushort)((ulong)uVar37 >> 0x20);
              uVar44 = (uint)(ushort)((ulong)uVar35 >> 0x10);
              iVar51 = -(uint)(uVar16 < uVar44);
              iVar52 = -(uint)(uVar16 < uVar45);
              uVar46 = (uint)(ushort)((ulong)uVar35 >> 0x30);
              iVar53 = -(uint)(uVar16 < uVar46);
              uVar48 = (uint)(ushort)((ulong)uVar37 >> 0x10);
              iVar54 = -(uint)(uVar16 < uVar48);
              iVar55 = -(uint)(uVar16 < uVar49);
              uVar50 = (uint)(ushort)((ulong)uVar37 >> 0x30);
              iVar56 = -(uint)(uVar16 < uVar50);
              uVar34 = uVar34 + (uVar23 <= uVar16);
              iVar26 = iVar26 + (uint)(uVar44 <= uVar16);
              iVar27 = iVar27 + (uint)(uVar45 <= uVar16);
              iVar28 = iVar28 + (uint)(uVar46 <= uVar16);
              uVar36 = CONCAT11((byte)(uVar23 >> 8) & ~(byte)(-(uint)(uVar16 < uVar23) >> 8),
                                (byte)uVar23 & ~(byte)-(uint)(uVar16 < uVar23)) + uVar36;
              iVar30 = (uint)CONCAT11((byte)((ulong)uVar35 >> 0x18) & ~(byte)((uint)iVar51 >> 8),
                                      (byte)((ulong)uVar35 >> 0x10) & ~(byte)iVar51) + iVar30;
              iVar32 = (uint)CONCAT11((byte)((ulong)uVar35 >> 0x28) & ~(byte)((uint)iVar52 >> 8),
                                      (byte)((ulong)uVar35 >> 0x20) & ~(byte)iVar52) + iVar32;
              iVar33 = (uint)CONCAT11((byte)((ulong)uVar35 >> 0x38) & ~(byte)((uint)iVar53 >> 8),
                                      (byte)((ulong)uVar35 >> 0x30) & ~(byte)iVar53) + iVar33;
              iVar38 = (uint)CONCAT11((byte)(uVar47 >> 8) & ~(byte)(-(uint)(uVar16 < uVar47) >> 8),
                                      (byte)uVar47 & ~(byte)-(uint)(uVar16 < uVar47)) + iVar38;
              iVar40 = (uint)CONCAT11((byte)((ulong)uVar37 >> 0x18) & ~(byte)((uint)iVar54 >> 8),
                                      (byte)((ulong)uVar37 >> 0x10) & ~(byte)iVar54) + iVar40;
              iVar41 = (uint)CONCAT11((byte)((ulong)uVar37 >> 0x28) & ~(byte)((uint)iVar55 >> 8),
                                      (byte)((ulong)uVar37 >> 0x20) & ~(byte)iVar55) + iVar41;
              iVar42 = (uint)CONCAT11((byte)((ulong)uVar37 >> 0x38) & ~(byte)((uint)iVar56 >> 8),
                                      (byte)((ulong)uVar37 >> 0x30) & ~(byte)iVar56) + iVar42;
              iVar29 = iVar29 + (uint)(uVar47 <= uVar16);
              iVar31 = iVar31 + (uint)(uVar48 <= uVar16);
              iVar22 = iVar22 + (uint)(uVar49 <= uVar16);
              iVar25 = iVar25 + (uint)(uVar50 <= uVar16);
            } while (lVar15 != lVar13);
            uVar36 = iVar38 + uVar36 + iVar40 + iVar30 + iVar41 + iVar32 + iVar42 + iVar33;
            uVar34 = iVar29 + uVar34 + iVar31 + iVar26 + iVar22 + iVar27 + iVar25 + iVar28;
            iVar29 = (int)lVar13;
            puVar12 = puVar12 + lVar13;
          }
          iVar29 = iVar29 + -1;
          do {
            iVar29 = iVar29 + 1;
            uVar23 = 0;
            if (*puVar12 <= uVar16) {
              uVar34 = uVar34 + 1;
              uVar23 = (uint)*puVar12;
            }
            uVar36 = uVar23 + uVar36;
            puVar12 = puVar12 + 1;
          } while (iVar29 < (int)uVar18);
          bVar1 = lVar11 < (int)uVar18;
          lVar11 = lVar11 + 1;
        } while (bVar1);
        if (uVar34 != 0) {
          if (uVar5 != 0) {
            fVar24 = fVar24 / (float)(1 << (ulong)(uVar5 & 0x1f));
          }
          uVar16 = 0;
          if (uVar34 != 0) {
            uVar16 = uVar36 / uVar34;
          }
          *param_3 = fVar24;
          *param_4 = uVar16;
          return 1;
        }
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00172e50 (32 bytes) name=ConvertInnerTemp2mC

/* CFunctions::ConvertInnerTemp2mC(unsigned short) const */

int __thiscall CFunctions::ConvertInnerTemp2mC(CFunctions *this,ushort param_1)

{
  return ((uint)param_1 << (ulong)(*(uint *)(this + 0x76e4) & 0x1f)) + *(int *)(this + 0x76e0);
}


==================================================================

### FUNC 00172e70 (8 bytes) name=GetEX

/* CFunctions::GetEX() */

undefined4 __thiscall CFunctions::GetEX(CFunctions *this)

{
  return *(undefined4 *)(this + 0x1dd0);
}


==================================================================

### FUNC 00172e78 (184 bytes) name=CalibrationMain_RTV

/* CFunctions::CalibrationMain_RTV(unsigned short const*) */

void __thiscall CFunctions::CalibrationMain_RTV(CFunctions *this,ushort *param_1)

{
  ushort *puVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  ushort *puVar7;
  int iVar8;
  undefined2 *puVar9;
  long lVar10;
  long lVar11;
  
  lVar6 = *(long *)(this + 0x1610);
  if (*(int *)(this + 0x1cc4) == 0) {
    puVar7 = (ushort *)0x0;
  }
  else {
    puVar7 = *(ushort **)(this + 0x1ca8);
  }
  iVar8 = *(int *)(this + 0x76d0);
  if (iVar8 != 0) {
    lVar10 = *(long *)(this + 0x1628);
    iVar4 = iVar8 * 2;
    uVar5 = *(int *)(this + 0x130c) - 1;
    puVar9 = *(undefined2 **)(this + 0x130);
    do {
      iVar3 = (int)((uint)*param_1 - (uint)*puVar7) >> 1;
      if (uVar5 == 0) {
        lVar11 = 0;
      }
      else {
        lVar11 = 0;
        do {
          if (iVar3 <= *(short *)(lVar6 + lVar11 * 2)) break;
          lVar11 = lVar11 + 1;
        } while ((uint)lVar11 < uVar5);
      }
      puVar1 = (ushort *)(lVar10 + (ulong)(uint)(iVar4 * (int)lVar11) * 2);
      iVar8 = iVar8 + -1;
      lVar10 = lVar10 + 4;
      uVar2 = (uint)puVar1[1] + ((int)(iVar3 * (uint)*puVar1) >> 0xc);
      uVar2 = uVar2 & ((int)uVar2 >> 0x1f ^ 0xffffffffU);
      if (0xfffe < (int)uVar2) {
        uVar2 = 0xffff;
      }
      *puVar9 = (short)uVar2;
      lVar6 = lVar6 + (ulong)uVar5 * 2;
      param_1 = param_1 + 1;
      puVar7 = puVar7 + 1;
      puVar9 = puVar9 + 1;
    } while (iVar8 != 0);
  }
  return;
}


==================================================================

### FUNC 00172f30 (500 bytes) name=BlindCompensation

/* CFunctions::BlindCompensation(unsigned short*) */

void __thiscall CFunctions::BlindCompensation(CFunctions *this,ushort *param_1)

{
  uint *puVar1;
  uint uVar2;
  uint uVar3;
  uint *puVar4;
  ushort uVar5;
  
  uVar2 = *(uint *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x140c);
  if (uVar2 != 0) {
    uVar3 = 0;
    puVar4 = (uint *)(*(long *)(this + 0x1630) + 0x14);
    do {
      switch(puVar4[-4]) {
      case 3:
        uVar5 = (ushort)(((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                         (uint)param_1[puVar4[-1]]) / 3);
        break;
      case 4:
        uVar5 = (ushort)((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                         (uint)param_1[puVar4[-1]] + (uint)param_1[*puVar4] >> 2);
        break;
      case 5:
        uVar5 = (ushort)(((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                          (uint)param_1[puVar4[-1]] + (uint)param_1[*puVar4] +
                         (uint)param_1[puVar4[1]]) / 5);
        break;
      case 6:
        uVar5 = (ushort)(((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                          (uint)param_1[puVar4[-1]] + (uint)param_1[*puVar4] +
                          (uint)param_1[puVar4[1]] + (uint)param_1[puVar4[2]]) / 6);
        break;
      case 7:
        uVar5 = (ushort)(((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                          (uint)param_1[puVar4[-1]] + (uint)param_1[*puVar4] +
                          (uint)param_1[puVar4[1]] + (uint)param_1[puVar4[2]] +
                         (uint)param_1[puVar4[3]]) / 7);
        break;
      case 8:
        uVar5 = (ushort)((int)((uint)param_1[puVar4[-2]] + (uint)param_1[puVar4[-3]] +
                               (uint)param_1[puVar4[-1]] + (uint)param_1[*puVar4] +
                               (uint)param_1[puVar4[1]] + (uint)param_1[puVar4[2]] +
                               (uint)param_1[puVar4[3]] + (uint)param_1[puVar4[4]]) >> 3);
        break;
      default:
        goto switchD_00172f84_default;
      }
      puVar1 = puVar4 + -5;
      uVar3 = uVar3 + 1;
      puVar4 = puVar4 + 10;
      param_1[*puVar1] = uVar5;
    } while (uVar3 < uVar2);
  }
switchD_00172f84_default:
  return;
}


==================================================================

### FUNC 00173124 (816 bytes) name=ConvertResponse2Temperature

/* CFunctions::ConvertResponse2Temperature(unsigned short const*) */

void __thiscall CFunctions::ConvertResponse2Temperature(CFunctions *this,ushort *param_1)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  char cVar4;
  long lVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined8 uVar9;
  undefined1 auVar10 [16];
  undefined8 uVar11;
  long lVar12;
  bool bVar13;
  uint uVar14;
  char *pcVar15;
  long lVar16;
  char *pcVar17;
  uint uVar18;
  ushort *puVar19;
  ushort *puVar20;
  ushort uVar21;
  ushort *puVar22;
  long lVar23;
  ulong uVar24;
  ushort *puVar25;
  ushort *puVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  undefined8 uVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined8 uVar38;
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  byte bVar41;
  byte bVar42;
  byte bVar43;
  byte bVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  byte bVar49;
  byte bVar50;
  byte bVar51;
  byte bVar52;
  Logging aLStack_50 [16];
  char *local_40;
  long local_38;
  
  iVar2 = DAT_005028a4;
  lVar5 = tpidr_el0;
  local_38 = *(long *)(lVar5 + 0x28);
  if (*(int *)(this + 0x1cc4) == 0) {
    puVar19 = (ushort *)0x0;
  }
  else {
    puVar19 = *(ushort **)(this + 0x1ca8);
  }
  uVar14 = *(uint *)(this + 0x76d0);
  uVar18 = 50000 - *(int *)(this + 0x76e0) >> (*(uint *)(this + 0x76e4) & 0x1f);
  uVar18 = uVar18 & ((int)uVar18 >> 0x1f ^ 0xffffffffU);
  if (0xfffe < (int)uVar18) {
    uVar18 = 0xffff;
  }
  iVar27 = DAT_005028a4;
  if (uVar14 != 0) {
    puVar20 = *(ushort **)(this + 0x130);
    uVar24 = (ulong)(uVar14 - 1);
    if (7 < uVar24 + 1) {
      uVar1 = uVar14 & 7;
      lVar23 = (uVar24 + 1) - (ulong)uVar1;
      if (lVar23 != 0) {
        iVar28 = 0;
        if (puVar20 < param_1 + uVar24 + 1 && param_1 < puVar20 + uVar24 + 1) goto LAB_001732d8;
        if (puVar20 < puVar19 + uVar24 + 1 && puVar19 < puVar20 + uVar24 + 1) goto LAB_001732d8;
        uVar14 = uVar14 - (int)lVar23;
        puVar22 = puVar20 + 4;
        puVar25 = puVar19 + 4;
        puVar26 = param_1 + 4;
        iVar27 = 0;
        iVar28 = 0;
        iVar29 = 0;
        iVar30 = 0;
        param_1 = param_1 + lVar23;
        puVar19 = puVar19 + lVar23;
        puVar20 = puVar20 + lVar23;
        iVar31 = 0;
        iVar32 = 0;
        iVar33 = 0;
        iVar34 = 0;
        do {
          uVar35 = *(undefined8 *)(puVar26 + -4);
          uVar38 = *(undefined8 *)puVar26;
          uVar9 = *(undefined8 *)(puVar25 + -4);
          uVar11 = *(undefined8 *)puVar25;
          puVar25 = puVar25 + 8;
          auVar45._0_4_ = uVar18 + ((uint)(ushort)uVar35 - (uint)(ushort)uVar9) * iVar2;
          auVar45._4_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar35 >> 0x10) -
                        (uint)(ushort)((ulong)uVar9 >> 0x10)) * iVar2;
          auVar45._8_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar35 >> 0x20) -
                        (uint)(ushort)((ulong)uVar9 >> 0x20)) * iVar2;
          auVar45._12_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar35 >> 0x30) -
                        (uint)(ushort)((ulong)uVar9 >> 0x30)) * iVar2;
          auVar47._0_4_ = uVar18 + ((uint)(ushort)uVar38 - (uint)(ushort)uVar11) * iVar2;
          auVar47._4_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar38 >> 0x10) -
                        (uint)(ushort)((ulong)uVar11 >> 0x10)) * iVar2;
          auVar47._8_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar38 >> 0x20) -
                        (uint)(ushort)((ulong)uVar11 >> 0x20)) * iVar2;
          auVar47._12_4_ =
               uVar18 + ((uint)(ushort)((ulong)uVar38 >> 0x30) -
                        (uint)(ushort)((ulong)uVar11 >> 0x30)) * iVar2;
          auVar36._0_4_ = -(uint)(0xffff < auVar45._0_4_);
          auVar36._4_4_ = -(uint)(0xffff < auVar45._4_4_);
          auVar36._8_4_ = -(uint)(0xffff < (int)auVar45._8_4_);
          auVar36._12_4_ = -(uint)(0xffff < (int)auVar45._12_4_);
          auVar39._0_4_ = -(uint)(0xffff < auVar47._0_4_);
          auVar39._4_4_ = -(uint)(0xffff < auVar47._4_4_);
          auVar39._8_4_ = -(uint)(0xffff < (int)auVar47._8_4_);
          auVar39._12_4_ = -(uint)(0xffff < (int)auVar47._12_4_);
          bVar41 = (byte)((uint)auVar45._0_4_ >> 0x1f);
          bVar42 = (byte)((uint)auVar45._4_4_ >> 0x1f);
          bVar43 = (byte)((uint)auVar47._0_4_ >> 0x1f);
          bVar44 = (byte)((uint)auVar47._4_4_ >> 0x1f);
          auVar46 = NEON_smax(auVar45,ZEXT816(0),4);
          auVar48 = NEON_smax(auVar47,ZEXT816(0),4);
          auVar6._8_4_ = 1;
          auVar6._0_8_ = 0x100000001;
          auVar6._12_4_ = 1;
          auVar8._1_3_ = 0;
          auVar8[0] = bVar41;
          auVar8[4] = bVar42;
          auVar8._5_3_ = 0;
          auVar8._8_4_ = auVar45._8_4_ >> 0x1f;
          auVar8._12_4_ = auVar45._12_4_ >> 0x1f;
          auVar37._1_3_ = 0;
          auVar37[0] = bVar41;
          auVar37[4] = bVar42;
          auVar37._5_3_ = 0;
          auVar37._8_4_ = auVar45._8_4_ >> 0x1f;
          auVar37._12_4_ = auVar45._12_4_ >> 0x1f;
          auVar37 = auVar37 ^ (auVar8 ^ auVar6) & auVar36;
          auVar7._8_4_ = 1;
          auVar7._0_8_ = 0x100000001;
          auVar7._12_4_ = 1;
          auVar10._1_3_ = 0;
          auVar10[0] = bVar43;
          auVar10[4] = bVar44;
          auVar10._5_3_ = 0;
          auVar10._8_4_ = auVar47._8_4_ >> 0x1f;
          auVar10._12_4_ = auVar47._12_4_ >> 0x1f;
          auVar40._1_3_ = 0;
          auVar40[0] = bVar43;
          auVar40[4] = bVar44;
          auVar40._5_3_ = 0;
          auVar40._8_4_ = auVar47._8_4_ >> 0x1f;
          auVar40._12_4_ = auVar47._12_4_ >> 0x1f;
          auVar40 = auVar40 ^ (auVar10 ^ auVar7) & auVar39;
          iVar27 = iVar27 + auVar37._0_4_;
          iVar28 = iVar28 + auVar37._4_4_;
          iVar29 = iVar29 + auVar37._8_4_;
          iVar30 = iVar30 + auVar37._12_4_;
          iVar31 = iVar31 + auVar40._0_4_;
          iVar32 = iVar32 + auVar40._4_4_;
          iVar33 = iVar33 + auVar40._8_4_;
          iVar34 = iVar34 + auVar40._12_4_;
          bVar41 = (byte)((uint)auVar36._0_4_ >> 8);
          bVar42 = (byte)((uint)auVar36._4_4_ >> 8);
          bVar43 = (byte)((uint)auVar36._8_4_ >> 8);
          bVar44 = (byte)((uint)auVar36._12_4_ >> 8);
          bVar49 = (byte)((uint)auVar39._0_4_ >> 8);
          bVar50 = (byte)((uint)auVar39._4_4_ >> 8);
          bVar51 = (byte)((uint)auVar39._8_4_ >> 8);
          bVar52 = (byte)((uint)auVar39._12_4_ >> 8);
          lVar23 = lVar23 + -8;
          *(ulong *)(puVar22 + -4) =
               CONCAT17(bVar44 | auVar46[0xd] & ~bVar44,
                        CONCAT16((byte)auVar36._12_4_ | auVar46[0xc] & ~(byte)auVar36._12_4_,
                                 CONCAT15(bVar43 | auVar46[9] & ~bVar43,
                                          CONCAT14((byte)auVar36._8_4_ |
                                                   auVar46[8] & ~(byte)auVar36._8_4_,
                                                   CONCAT13(bVar42 | auVar46[5] & ~bVar42,
                                                            CONCAT12((byte)auVar36._4_4_ |
                                                                     auVar46[4] &
                                                                     ~(byte)auVar36._4_4_,
                                                                     CONCAT11(bVar41 | auVar46[1] &
                                                                                       ~bVar41,
                                                                              (byte)auVar36._0_4_ |
                                                                              auVar46[0] &
                                                                              ~(byte)auVar36._0_4_))
                                                           )))));
          *(ulong *)puVar22 =
               CONCAT17(bVar52 | auVar48[0xd] & ~bVar52,
                        CONCAT16((byte)auVar39._12_4_ | auVar48[0xc] & ~(byte)auVar39._12_4_,
                                 CONCAT15(bVar51 | auVar48[9] & ~bVar51,
                                          CONCAT14((byte)auVar39._8_4_ |
                                                   auVar48[8] & ~(byte)auVar39._8_4_,
                                                   CONCAT13(bVar50 | auVar48[5] & ~bVar50,
                                                            CONCAT12((byte)auVar39._4_4_ |
                                                                     auVar48[4] &
                                                                     ~(byte)auVar39._4_4_,
                                                                     CONCAT11(bVar49 | auVar48[1] &
                                                                                       ~bVar49,
                                                                              (byte)auVar39._0_4_ |
                                                                              auVar48[0] &
                                                                              ~(byte)auVar39._0_4_))
                                                           )))));
          puVar22 = puVar22 + 8;
          puVar26 = puVar26 + 8;
        } while (lVar23 != 0);
        iVar28 = iVar31 + iVar27 + iVar32 + iVar28 + iVar33 + iVar29 + iVar34 + iVar30;
        iVar27 = DAT_005028a4;
        while (DAT_005028a4 = iVar27, uVar1 != 0) {
LAB_001732d8:
          iVar27 = uVar18 + ((uint)*param_1 - (uint)*puVar19) * iVar2;
          if (iVar27 < 0x10000) {
            iVar28 = iVar28 - (iVar27 >> 0x1f);
            uVar21 = (ushort)iVar27 & ((ushort)(iVar27 >> 0x1f) ^ 0xffff);
          }
          else {
            iVar28 = iVar28 + 1;
            uVar21 = 0xffff;
          }
          *puVar20 = uVar21;
          uVar14 = uVar14 - 1;
          param_1 = param_1 + 1;
          puVar19 = puVar19 + 1;
          puVar20 = puVar20 + 1;
          iVar27 = DAT_005028a4;
          uVar1 = uVar14;
        }
        if ((0x100 < iVar28) && (DAT_005028a4 = iVar2 + -1, DAT_005028a4 != 0 && 0 < iVar2)) {
          mag::Logging::Logging(aLStack_50,2);
          MStream::operator<<((MStream *)aLStack_50,"Conversation ratio adjusted to ");
          iVar27 = DAT_005028a4;
          iVar2 = *(int *)(this + 0x76dc);
          uVar24 = MStream::Available((MStream *)aLStack_50);
          if (0x18 < uVar24) {
            lVar23 = 0;
            lVar12 = 0;
            uVar18 = iVar2 * iVar27;
            do {
              lVar16 = lVar12;
              cVar3 = "0123456789"[uVar18 % 10];
              lVar23 = lVar23 + 0x100000000;
              local_40[lVar16] = cVar3;
              bVar13 = 9 < uVar18;
              lVar12 = lVar16 + 1;
              uVar18 = uVar18 / 10;
            } while (bVar13);
            if (0 < lVar16) {
              cVar4 = *local_40;
              *local_40 = cVar3;
              local_40[lVar16] = cVar4;
              if (2 < lVar16) {
                pcVar15 = local_40 + 2;
                pcVar17 = local_40 + lVar16 + -1;
                do {
                  cVar3 = pcVar15[-1];
                  pcVar15[-1] = *pcVar17;
                  *pcVar17 = cVar3;
                  bVar13 = pcVar15 < pcVar17 + -1;
                  pcVar15 = pcVar15 + 1;
                  pcVar17 = pcVar17 + -1;
                } while (bVar13);
              }
            }
            local_40[lVar23 >> 0x20] = '\0';
            local_40 = local_40 + (lVar23 >> 0x20);
          }
          MStream::operator<<((MStream *)aLStack_50,"mK/LSB");
          mag::Logging::~Logging(aLStack_50);
          iVar27 = DAT_005028a4;
        }
        goto LAB_0017342c;
      }
    }
    iVar28 = 0;
    goto LAB_001732d8;
  }
LAB_0017342c:
  DAT_005028a4 = iVar27;
  if (*(long *)(lVar5 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00173468 (340 bytes) name=EvaluateNetdt

/* CFunctions::EvaluateNetdt() */

void __thiscall CFunctions::EvaluateNetdt(CFunctions *this)

{
  long lVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  ulong uVar5;
  undefined8 *puVar6;
  ulong uVar7;
  ulong uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  
  lVar3 = CSmoother::GetSTDFrame((CSmoother *)(this + 0x1d68));
  if (lVar3 == 0) {
    return;
  }
  uVar4 = *(uint *)(this + 0x76d0);
  uVar5 = (ulong)uVar4;
  if (*(int *)(this + 0x1200) == 0) {
    if (uVar4 == 0) {
      uVar10 = 0;
      goto LAB_001735a8;
    }
    if (uVar4 < 8) {
      uVar7 = 0;
LAB_00173590:
      uVar10 = 0;
    }
    else {
      uVar7 = uVar5 - (uVar4 & 7);
      if (uVar7 == 0) goto LAB_00173590;
      puVar6 = (undefined8 *)(lVar3 + 8);
      iVar9 = 0;
      iVar11 = 0;
      iVar12 = 0;
      iVar13 = 0;
      iVar14 = 0;
      iVar15 = 0;
      iVar16 = 0;
      iVar17 = 0;
      uVar8 = uVar7;
      do {
        uVar18 = puVar6[-1];
        uVar19 = *puVar6;
        uVar8 = uVar8 - 8;
        puVar6 = puVar6 + 2;
        iVar9 = iVar9 + (uint)(ushort)uVar18;
        iVar11 = iVar11 + (uint)(ushort)((ulong)uVar18 >> 0x10);
        iVar12 = iVar12 + (uint)(ushort)((ulong)uVar18 >> 0x20);
        iVar13 = iVar13 + (uint)(ushort)((ulong)uVar18 >> 0x30);
        iVar14 = iVar14 + (uint)(ushort)uVar19;
        iVar15 = iVar15 + (uint)(ushort)((ulong)uVar19 >> 0x10);
        iVar16 = iVar16 + (uint)(ushort)((ulong)uVar19 >> 0x20);
        iVar17 = iVar17 + (uint)(ushort)((ulong)uVar19 >> 0x30);
      } while (uVar8 != 0);
      uVar10 = iVar14 + iVar9 + iVar15 + iVar11 + iVar16 + iVar12 + iVar17 + iVar13;
      if ((uVar4 & 7) == 0) goto LAB_001735a8;
    }
    do {
      lVar1 = uVar7 * 2;
      uVar7 = uVar7 + 1;
      uVar10 = uVar10 + *(ushort *)(lVar3 + lVar1);
    } while (uVar7 < uVar5);
    goto LAB_001735a8;
  }
  if (uVar4 == 0) {
    uVar10 = 0;
  }
  else {
    if (uVar4 < 8) {
      uVar7 = 0;
LAB_00173510:
      uVar10 = 0;
    }
    else {
      uVar7 = uVar5 - (uVar4 & 7);
      if (uVar7 == 0) goto LAB_00173510;
      puVar6 = (undefined8 *)(lVar3 + 8);
      iVar9 = 0;
      iVar11 = 0;
      iVar12 = 0;
      iVar13 = 0;
      iVar14 = 0;
      iVar15 = 0;
      iVar16 = 0;
      iVar17 = 0;
      uVar8 = uVar7;
      do {
        uVar18 = puVar6[-1];
        uVar19 = *puVar6;
        uVar8 = uVar8 - 8;
        puVar6 = puVar6 + 2;
        iVar9 = iVar9 + (uint)(ushort)uVar18;
        iVar11 = iVar11 + (uint)(ushort)((ulong)uVar18 >> 0x10);
        iVar12 = iVar12 + (uint)(ushort)((ulong)uVar18 >> 0x20);
        iVar13 = iVar13 + (uint)(ushort)((ulong)uVar18 >> 0x30);
        iVar14 = iVar14 + (uint)(ushort)uVar19;
        iVar15 = iVar15 + (uint)(ushort)((ulong)uVar19 >> 0x10);
        iVar16 = iVar16 + (uint)(ushort)((ulong)uVar19 >> 0x20);
        iVar17 = iVar17 + (uint)(ushort)((ulong)uVar19 >> 0x30);
      } while (uVar8 != 0);
      uVar10 = iVar14 + iVar9 + iVar15 + iVar11 + iVar16 + iVar12 + iVar17 + iVar13;
      if ((uVar4 & 7) == 0) goto LAB_00173528;
    }
    do {
      lVar1 = uVar7 * 2;
      uVar7 = uVar7 + 1;
      uVar10 = uVar10 + *(ushort *)(lVar3 + lVar1);
    } while (uVar7 < uVar5);
  }
LAB_00173528:
  uVar4 = uVar4 - *(int *)(this + (ulong)*(uint *)(this + 0x15f8) * 4 + 0x140c);
  if (uVar4 == 0) {
    return;
  }
LAB_001735a8:
  uVar2 = 0;
  if (uVar4 != 0) {
    uVar2 = uVar10 / uVar4;
  }
  *(uint *)(this + 0x1e1c) = uVar2;
  return;
}


==================================================================

### FUNC 001735bc (316 bytes) name=UseMask

/* CFunctions::UseMask(int) */

void __thiscall CFunctions::UseMask(CFunctions *this,int param_1)

{
  pthread_mutex_t *__mutex;
  char *pcVar1;
  long lVar2;
  int iVar3;
  void *__dest;
  undefined4 *puVar4;
  ulong uVar5;
  Logging aLStack_50 [24];
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  if ((*(int *)(this + 0xe0) == 0) || (*(int *)(this + 0xec) == 0)) {
    iVar3 = pthread_mutex_unlock(__mutex);
    puVar4 = (undefined4 *)__errno(iVar3);
    iVar3 = 0;
    *puVar4 = 0xe4ae0006;
  }
  else {
    if (param_1 == 0) {
      *(undefined4 *)(this + 0xe8) = 0;
      if (*(void **)(this + 0x150) != (void *)0x0) {
        operator_delete__(*(void **)(this + 0x150));
        *(undefined8 *)(this + 0x150) = 0;
      }
    }
    else {
      if (*(long *)(this + 0x150) == 0) {
        uVar5 = (ulong)*(uint *)(this + 0x76d0);
        __dest = operator_new__(uVar5 << 1);
        *(void **)(this + 0x150) = __dest;
        *(void **)(this + 0x158) = __dest;
      }
      else {
        __dest = *(void **)(this + 0x158);
        uVar5 = (ulong)*(uint *)(this + 0x76d0);
      }
      memcpy(__dest,*(void **)(this + 0x140),uVar5 << 1);
      *(undefined4 *)(this + 0xe8) = 1;
    }
    mag::Logging::Logging(aLStack_50,2);
    pcVar1 = "Add Temperature Mask";
    if (*(int *)(this + 0xe8) == 0) {
      pcVar1 = "Delete Temperature Mask";
    }
    MStream::operator<<((MStream *)aLStack_50,pcVar1);
    mag::Logging::~Logging(aLStack_50);
    pthread_mutex_unlock(__mutex);
    iVar3 = *(int *)(this + 0xe8);
  }
  if (*(long *)(lVar2 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar3);
}


==================================================================

### FUNC 0017370c (272 bytes) name=GetTemperaturemC

/* CFunctions::GetTemperaturemC(int*, unsigned int, int, int) */

undefined8 __thiscall
CFunctions::GetTemperaturemC(CFunctions *this,int *param_1,uint param_2,int param_3,int param_4)

{
  undefined4 uVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar5;
  undefined4 *puVar6;
  long lVar7;
  long lVar8;
  float fVar9;
  CFunctions *pCVar4;
  
  pCVar4 = this;
  if (param_4 != 0) {
    uVar2 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar4 = (CFunctions *)(ulong)uVar2;
  }
  if ((param_1 == (int *)0x0) || (*(int *)(this + 0xec) == 0)) {
    uVar1 = 0xe4ae0005;
    if (*(int *)(this + 0xec) != 0) {
      uVar1 = 0xe4ae0001;
    }
    puVar6 = (undefined4 *)__errno(pCVar4);
    *puVar6 = uVar1;
    if (param_4 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar5 = 0;
  }
  else {
    uVar2 = *(uint *)(this + 0x76d0);
    if (param_2 >> 2 <= *(uint *)(this + 0x76d0)) {
      uVar2 = param_2 >> 2;
    }
    if (uVar2 != 0) {
      fVar9 = *(float *)(this + 0xac);
      lVar8 = *(long *)(this + 0x140);
      lVar7 = 0;
      do {
        uVar3 = ReviseTemperature(this,*(ushort *)(lVar8 + lVar7 * 2),(uint)lVar7,1);
        if ((param_3 != 0) || (*(int *)(this + 0x58) != 0)) {
          uVar3 = CorrectTemperature((int)this,fVar9,uVar3);
        }
        param_1[lVar7] = uVar3;
        lVar7 = lVar7 + 1;
      } while ((uint)lVar7 < uVar2);
    }
    if (param_4 != 0) {
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    }
    uVar5 = 1;
  }
  return uVar5;
}


==================================================================

### FUNC 0017381c (592 bytes) name=GetCenterTemperatureSharpness

/* CFunctions::GetCenterTemperatureSharpness(unsigned int, unsigned int) */

uint __thiscall
CFunctions::GetCenterTemperatureSharpness(CFunctions *this,uint param_1,uint param_2)

{
  ushort *puVar1;
  pthread_mutex_t *__mutex;
  ulong uVar2;
  undefined8 *puVar3;
  ushort *puVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  ushort *puVar10;
  undefined8 *puVar11;
  long lVar12;
  uint uVar13;
  ulong uVar14;
  uint uVar15;
  long lVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  uint uVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  uint uVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  ushort uVar33;
  ushort uVar36;
  int iVar34;
  ushort uVar37;
  undefined8 uVar35;
  ushort uVar39;
  int iVar38;
  int iVar40;
  int iVar41;
  ushort uVar42;
  ushort uVar45;
  int iVar43;
  ushort uVar46;
  undefined8 uVar44;
  ushort uVar48;
  int iVar47;
  int iVar49;
  int iVar50;
  ushort uVar53;
  int iVar51;
  ushort uVar54;
  undefined8 uVar52;
  ushort uVar56;
  int iVar55;
  int iVar57;
  int iVar58;
  ushort uVar61;
  int iVar59;
  ushort uVar62;
  undefined8 uVar60;
  ushort uVar64;
  int iVar63;
  int iVar65;
  int iVar66;
  ushort uVar68;
  ushort uVar69;
  undefined8 uVar67;
  ushort uVar70;
  ushort uVar72;
  ushort uVar73;
  undefined8 uVar71;
  ushort uVar74;
  undefined8 uVar75;
  undefined8 uVar76;
  
  if (param_1 < 0x10) {
    uVar25 = 0x10;
  }
  else {
    uVar25 = *(uint *)(this + 0x1da8) >> 1;
    if (param_1 <= *(uint *)(this + 0x1da8) >> 1) {
      uVar25 = param_1;
    }
  }
  uVar15 = *(uint *)(this + 0x1dac);
  if (param_2 < 9) {
    uVar21 = 9;
  }
  else {
    uVar21 = uVar15 >> 1;
    if (param_2 <= uVar15 >> 1) {
      uVar21 = param_2;
    }
  }
  iVar6 = *(int *)(this + 0x1da8);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  pthread_mutex_lock(__mutex);
  if (*(int *)(this + 0xec) != 0) {
    uVar7 = uVar15 + uVar21 >> 1;
    uVar15 = uVar15 - uVar21 >> 1;
    if (uVar15 < uVar7) {
      uVar8 = iVar6 - uVar25 >> 1;
      uVar25 = iVar6 + uVar25 >> 1;
      iVar6 = *(int *)(this + 0x1da8);
      iVar9 = uVar25 - uVar8;
      uVar14 = (ulong)uVar15;
      uVar25 = (uVar25 - 1) - uVar8;
      uVar2 = (ulong)uVar25 + 1;
      uVar5 = uVar25 + 1 & 7;
      lVar16 = uVar2 - uVar5;
      uVar21 = 0;
      uVar25 = 0;
      uVar15 = iVar6 * (uVar15 - 1);
      do {
        if (iVar9 != 0) {
          puVar10 = (ushort *)
                    (*(long *)(this + 0x140) + (ulong)(uint)(iVar6 * ((int)uVar14 + -1)) * 2 +
                    (ulong)(uVar8 - 1) * 2);
          iVar17 = iVar9;
          if ((7 < uVar2) && (lVar16 != 0)) {
            iVar27 = 0;
            iVar28 = 0;
            iVar23 = 0;
            iVar24 = 0;
            puVar11 = (undefined8 *)
                      (*(long *)(this + 0x140) + (ulong)(uVar8 - 1) * 2 + (ulong)uVar15 * 2);
            puVar10 = puVar10 + lVar16;
            iVar17 = 0;
            iVar18 = 0;
            iVar19 = 0;
            iVar20 = 0;
            iVar26 = 0;
            iVar22 = 0;
            iVar29 = 0;
            iVar30 = 0;
            iVar31 = 0;
            iVar32 = 0;
            lVar12 = lVar16;
            do {
              uVar35 = *puVar11;
              uVar44 = puVar11[1];
              uVar52 = *(undefined8 *)((long)puVar11 + 4);
              uVar60 = *(undefined8 *)((long)puVar11 + 0xc);
              puVar3 = (undefined8 *)((long)puVar11 + (ulong)(uint)(iVar6 << 1) * 2);
              uVar67 = *puVar3;
              uVar71 = puVar3[1];
              uVar75 = *(undefined8 *)((long)puVar3 + 4);
              uVar76 = *(undefined8 *)((long)puVar3 + 0xc);
              uVar53 = (ushort)((ulong)uVar52 >> 0x10);
              uVar54 = (ushort)((ulong)uVar52 >> 0x20);
              uVar56 = (ushort)((ulong)uVar52 >> 0x30);
              uVar33 = (ushort)uVar35;
              uVar36 = (ushort)((ulong)uVar35 >> 0x10);
              uVar37 = (ushort)((ulong)uVar35 >> 0x20);
              uVar39 = (ushort)((ulong)uVar35 >> 0x30);
              uVar61 = (ushort)((ulong)uVar60 >> 0x10);
              uVar62 = (ushort)((ulong)uVar60 >> 0x20);
              uVar64 = (ushort)((ulong)uVar60 >> 0x30);
              uVar42 = (ushort)uVar44;
              uVar45 = (ushort)((ulong)uVar44 >> 0x10);
              uVar46 = (ushort)((ulong)uVar44 >> 0x20);
              uVar48 = (ushort)((ulong)uVar44 >> 0x30);
              iVar51 = MP_INT_ABS((uint)uVar33 - (uint)(ushort)uVar52);
              iVar55 = MP_INT_ABS((uint)uVar36 - (uint)uVar53);
              iVar57 = MP_INT_ABS((uint)uVar37 - (uint)uVar54);
              iVar58 = MP_INT_ABS((uint)uVar39 - (uint)uVar56);
              iVar59 = MP_INT_ABS((uint)uVar42 - (uint)(ushort)uVar60);
              iVar63 = MP_INT_ABS((uint)uVar45 - (uint)uVar61);
              iVar65 = MP_INT_ABS((uint)uVar46 - (uint)uVar62);
              iVar66 = MP_INT_ABS((uint)uVar48 - (uint)uVar64);
              uVar68 = (ushort)((ulong)uVar67 >> 0x10);
              uVar69 = (ushort)((ulong)uVar67 >> 0x20);
              uVar70 = (ushort)((ulong)uVar67 >> 0x30);
              uVar72 = (ushort)((ulong)uVar71 >> 0x10);
              uVar73 = (ushort)((ulong)uVar71 >> 0x20);
              uVar74 = (ushort)((ulong)uVar71 >> 0x30);
              iVar34 = MP_INT_ABS((uint)uVar33 - (uint)(ushort)uVar67);
              iVar38 = MP_INT_ABS((uint)uVar36 - (uint)uVar68);
              iVar40 = MP_INT_ABS((uint)uVar37 - (uint)uVar69);
              iVar41 = MP_INT_ABS((uint)uVar39 - (uint)uVar70);
              iVar43 = MP_INT_ABS((uint)uVar42 - (uint)(ushort)uVar71);
              iVar47 = MP_INT_ABS((uint)uVar45 - (uint)uVar72);
              iVar49 = MP_INT_ABS((uint)uVar46 - (uint)uVar73);
              iVar50 = MP_INT_ABS((uint)uVar48 - (uint)uVar74);
              lVar12 = lVar12 + -8;
              uVar25 = uVar25 + ((uint)(ushort)uVar52 + (uint)uVar33 + (uint)(ushort)uVar67 +
                                 (uint)(ushort)uVar75 >> 2);
              iVar26 = iVar26 + ((uint)uVar53 + (uint)uVar36 + (uint)uVar68 +
                                 (uint)(ushort)((ulong)uVar75 >> 0x10) >> 2);
              iVar27 = iVar27 + ((uint)uVar54 + (uint)uVar37 + (uint)uVar69 +
                                 (uint)(ushort)((ulong)uVar75 >> 0x20) >> 2);
              iVar28 = iVar28 + ((uint)uVar56 + (uint)uVar39 + (uint)uVar70 +
                                 (uint)(ushort)((ulong)uVar75 >> 0x30) >> 2);
              iVar29 = iVar29 + ((uint)(ushort)uVar60 + (uint)uVar42 + (uint)(ushort)uVar71 +
                                 (uint)(ushort)uVar76 >> 2);
              iVar30 = iVar30 + ((uint)uVar61 + (uint)uVar45 + (uint)uVar72 +
                                 (uint)(ushort)((ulong)uVar76 >> 0x10) >> 2);
              iVar31 = iVar31 + ((uint)uVar62 + (uint)uVar46 + (uint)uVar73 +
                                 (uint)(ushort)((ulong)uVar76 >> 0x20) >> 2);
              iVar32 = iVar32 + ((uint)uVar64 + (uint)uVar48 + (uint)uVar74 +
                                 (uint)(ushort)((ulong)uVar76 >> 0x30) >> 2);
              uVar21 = uVar21 + ((uint)(iVar34 + iVar51) >> 1);
              iVar22 = iVar22 + ((uint)(iVar38 + iVar55) >> 1);
              iVar23 = iVar23 + ((uint)(iVar40 + iVar57) >> 1);
              iVar24 = iVar24 + ((uint)(iVar41 + iVar58) >> 1);
              iVar17 = iVar17 + ((uint)(iVar43 + iVar59) >> 1);
              iVar18 = iVar18 + ((uint)(iVar47 + iVar63) >> 1);
              iVar19 = iVar19 + ((uint)(iVar49 + iVar65) >> 1);
              iVar20 = iVar20 + ((uint)(iVar50 + iVar66) >> 1);
              puVar11 = puVar11 + 2;
            } while (lVar12 != 0);
            uVar25 = iVar29 + uVar25 + iVar30 + iVar26 + iVar31 + iVar27 + iVar32 + iVar28;
            uVar21 = iVar17 + uVar21 + iVar18 + iVar22 + iVar19 + iVar23 + iVar20 + iVar24;
            iVar17 = iVar9 - (int)lVar16;
            if (uVar5 == 0) goto LAB_00173a20;
          }
          do {
            uVar33 = *puVar10;
            puVar1 = puVar10 + 2;
            puVar4 = puVar10 + (uint)(iVar6 << 1);
            iVar19 = (uint)uVar33 - (uint)*puVar1;
            iVar18 = -iVar19;
            if (-1 < iVar19) {
              iVar18 = iVar19;
            }
            uVar13 = (uint)*puVar4;
            iVar20 = uVar33 - uVar13;
            iVar19 = -iVar20;
            if (-1 < iVar20) {
              iVar19 = iVar20;
            }
            puVar10 = puVar10 + 1;
            uVar25 = uVar25 + ((uint)*puVar1 + (uint)uVar33 + uVar13 + (uint)puVar4[2] >> 2);
            iVar17 = iVar17 + -1;
            uVar21 = uVar21 + ((uint)(iVar19 + iVar18) >> 1);
          } while (iVar17 != 0);
        }
LAB_00173a20:
        uVar14 = uVar14 + 1;
        uVar15 = uVar15 + iVar6;
        if (uVar14 == uVar7) {
          pthread_mutex_unlock(__mutex);
          uVar15 = uVar25 >> 0x10;
          if (uVar15 == 0) {
            return uVar25;
          }
          if (uVar15 == 0) {
            return 0;
          }
          return uVar21 / uVar15;
        }
      } while( true );
    }
  }
  pthread_mutex_unlock(__mutex);
  return 0;
}


==================================================================

### FUNC 00173a6c (592 bytes) name=CalcSD

/* CFunctions::CalcSD(int, int) */

int __thiscall CFunctions::CalcSD(CFunctions *this,int param_1,int param_2)

{
  pthread_mutex_t *__mutex;
  ulong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  long lVar8;
  ulong uVar9;
  ulong uVar10;
  ushort *puVar11;
  uint uVar12;
  int iVar13;
  ushort *puVar14;
  long lVar15;
  ulong uVar16;
  uint uVar17;
  long lVar18;
  ulong uVar19;
  uint uVar20;
  long lVar21;
  long lVar22;
  double dVar23;
  long lVar24;
  double __x;
  long lVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  
  if (param_1 < 0x10) {
    uVar20 = 0x10;
  }
  else {
    uVar20 = *(uint *)(this + 0x1da8);
    if ((uint)param_1 <= *(uint *)(this + 0x1da8)) {
      uVar20 = param_1;
    }
  }
  uVar3 = *(uint *)(this + 0x1dac);
  iVar6 = *(int *)(this + 0x1da8);
  __mutex = (pthread_mutex_t *)(this + 0xf0);
  uVar17 = uVar3;
  if ((uint)param_2 <= uVar3) {
    uVar17 = param_2;
  }
  uVar4 = 9;
  if (8 < param_2) {
    uVar4 = uVar17;
  }
  pthread_mutex_lock(__mutex);
  if (*(int *)(this + 0xec) == 0) {
    pthread_mutex_unlock(__mutex);
    iVar6 = 0;
  }
  else {
    uVar17 = uVar3 - uVar4 >> 1;
    uVar3 = uVar3 + uVar4 >> 1;
    uVar4 = iVar6 - uVar20 >> 1;
    iVar5 = uVar3 - uVar17;
    uVar20 = iVar6 + uVar20 >> 1;
    if (uVar3 < uVar17 || iVar5 == 0) {
      lVar8 = 0;
      lVar21 = 0;
    }
    else {
      iVar6 = *(int *)(this + 0x1da8);
      uVar7 = (uVar20 - 1) - uVar4;
      uVar1 = (ulong)uVar7 + 1;
      uVar2 = uVar7 + 1 & 3;
      lVar18 = uVar1 - uVar2;
      lVar21 = 0;
      lVar8 = 0;
      uVar7 = iVar6 * uVar17;
      do {
        if (uVar4 < uVar20) {
          puVar11 = (ushort *)
                    (*(long *)(this + 0x140) + (ulong)(iVar6 * uVar17) * 2 + (ulong)uVar4 * 2);
          uVar12 = uVar4;
          if ((3 < uVar1) && (lVar18 != 0)) {
            lVar26 = 0;
            lVar25 = 0;
            puVar14 = (ushort *)(*(long *)(this + 0x140) + (ulong)uVar4 * 2 + 4 + (ulong)uVar7 * 2);
            puVar11 = puVar11 + lVar18;
            lVar22 = 0;
            lVar24 = 0;
            lVar27 = 0;
            lVar28 = 0;
            lVar15 = lVar18;
            do {
              uVar9 = (ulong)puVar14[-2];
              uVar19 = (ulong)puVar14[-1];
              uVar16 = (ulong)*puVar14;
              lVar15 = lVar15 + -4;
              uVar10 = (ulong)puVar14[1];
              lVar8 = lVar8 + uVar9;
              lVar26 = lVar26 + uVar19;
              lVar27 = lVar27 + uVar16;
              lVar28 = lVar28 + uVar10;
              lVar21 = uVar9 * uVar9 + lVar21;
              lVar25 = uVar19 * uVar19 + lVar25;
              lVar22 = uVar16 * uVar16 + lVar22;
              lVar24 = uVar10 * uVar10 + lVar24;
              puVar14 = puVar14 + 4;
            } while (lVar15 != 0);
            lVar8 = lVar27 + lVar8 + lVar28 + lVar26;
            lVar21 = lVar22 + lVar21 + lVar24 + lVar25;
            uVar12 = uVar4 + (int)lVar18;
            if (uVar2 == 0) goto LAB_00173c2c;
          }
          iVar13 = uVar20 - uVar12;
          do {
            uVar9 = (ulong)*puVar11;
            iVar13 = iVar13 + -1;
            lVar8 = lVar8 + uVar9;
            lVar21 = lVar21 + uVar9 * uVar9;
            puVar11 = puVar11 + 1;
          } while (iVar13 != 0);
        }
LAB_00173c2c:
        uVar17 = uVar17 + 1;
        uVar7 = uVar7 + iVar6;
      } while ((int)uVar17 < (int)uVar3);
    }
    uVar20 = (uVar20 - uVar4) * iVar5;
    pthread_mutex_unlock(__mutex);
    __x = ((double)lVar21 - ((double)lVar8 * (double)lVar8) / (double)uVar20) / (double)(uVar20 - 1)
    ;
    dVar23 = SQRT(__x);
    if (NAN(dVar23)) {
      dVar23 = sqrt(__x);
    }
    iVar6 = (int)dVar23;
  }
  return iVar6;
}


==================================================================

### FUNC 00173cbc (928 bytes) name=LocalMap7x7

/* CFunctions::LocalMap7x7(int*, unsigned short const*, unsigned int) */

void __thiscall CFunctions::LocalMap7x7(CFunctions *this,int *param_1,ushort *param_2,uint param_3)

{
  ushort *puVar1;
  uint uVar2;
  uint uVar3;
  ushort uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  ushort *puVar11;
  uint uVar12;
  uint uVar13;
  int *piVar14;
  uint uVar15;
  int *piVar16;
  uint uVar17;
  uint uVar18;
  ulong uVar19;
  uint uVar20;
  uint uVar21;
  uint uVar22;
  uint uVar23;
  uint uVar24;
  uint uVar25;
  
  uVar4 = *param_2;
  uVar5 = (uint)uVar4;
  if ((uint)uVar4 <= (uint)param_2[1]) {
    uVar5 = (uint)param_2[1];
  }
  uVar15 = (uint)param_2[2];
  uVar12 = uVar15;
  if ((uint)uVar4 <= (uint)param_2[2]) {
    uVar12 = (uint)uVar4;
  }
  uVar19 = (ulong)(*(int *)(this + 0x1da8) * 2 - 8);
  uVar13 = uVar15;
  uVar3 = (uint)uVar4;
  if (uVar15 <= uVar5) {
    uVar13 = uVar5;
    uVar3 = uVar12;
  }
  puVar1 = param_2 + uVar19 + 8;
  uVar12 = (uint)param_2[4];
  uVar5 = uVar12;
  if (uVar3 <= param_2[4]) {
    uVar5 = uVar3;
  }
  uVar17 = uVar12;
  if (uVar12 <= uVar13) {
    uVar17 = uVar13;
    uVar3 = uVar5;
  }
  uVar13 = (uint)param_2[6];
  uVar5 = uVar13;
  if (uVar3 <= param_2[6]) {
    uVar5 = uVar3;
  }
  uVar18 = uVar13;
  if (uVar13 <= uVar17) {
    uVar18 = uVar17;
    uVar3 = uVar5;
  }
  uVar17 = (uint)*puVar1;
  uVar5 = uVar17;
  if (uVar3 <= *puVar1) {
    uVar5 = uVar3;
  }
  uVar20 = uVar17;
  if (uVar17 <= uVar18) {
    uVar20 = uVar18;
    uVar3 = uVar5;
  }
  uVar18 = (uint)puVar1[2];
  uVar5 = uVar18;
  if (uVar3 <= puVar1[2]) {
    uVar5 = uVar3;
  }
  uVar21 = uVar18;
  if (uVar18 <= uVar20) {
    uVar21 = uVar20;
    uVar3 = uVar5;
  }
  puVar11 = puVar1 + uVar19 + 8;
  uVar20 = (uint)puVar1[4];
  uVar5 = uVar20;
  if (uVar3 <= puVar1[4]) {
    uVar5 = uVar3;
  }
  uVar22 = uVar20;
  if (uVar20 <= uVar21) {
    uVar22 = uVar21;
    uVar3 = uVar5;
  }
  uVar21 = (uint)puVar1[6];
  uVar5 = uVar21;
  if (uVar3 <= puVar1[6]) {
    uVar5 = uVar3;
  }
  uVar23 = uVar21;
  if (uVar21 <= uVar22) {
    uVar23 = uVar22;
    uVar3 = uVar5;
  }
  uVar22 = (uint)*puVar11;
  uVar5 = uVar22;
  if (uVar3 <= *puVar11) {
    uVar5 = uVar3;
  }
  uVar7 = uVar22;
  if (uVar22 <= uVar23) {
    uVar7 = uVar23;
    uVar3 = uVar5;
  }
  uVar23 = (uint)puVar1[uVar19 + 10];
  uVar5 = uVar23;
  if (uVar3 <= puVar1[uVar19 + 10]) {
    uVar5 = uVar3;
  }
  uVar8 = uVar23;
  if (uVar23 <= uVar7) {
    uVar8 = uVar7;
    uVar3 = uVar5;
  }
  uVar7 = (uint)puVar1[uVar19 + 0xc];
  uVar5 = uVar7;
  if (uVar3 <= puVar1[uVar19 + 0xc]) {
    uVar5 = uVar3;
  }
  uVar9 = uVar7;
  if (uVar7 <= uVar8) {
    uVar9 = uVar8;
    uVar3 = uVar5;
  }
  uVar8 = (uint)puVar1[uVar19 + 0xe];
  uVar5 = uVar8;
  if (uVar3 <= puVar1[uVar19 + 0xe]) {
    uVar5 = uVar3;
  }
  uVar10 = uVar8;
  if (uVar8 <= uVar9) {
    uVar10 = uVar9;
    uVar3 = uVar5;
  }
  uVar9 = (uint)puVar11[uVar19 + 8];
  uVar5 = uVar9;
  if (uVar3 <= puVar11[uVar19 + 8]) {
    uVar5 = uVar3;
  }
  uVar24 = uVar9;
  if (uVar9 <= uVar10) {
    uVar24 = uVar10;
    uVar3 = uVar5;
  }
  uVar10 = (uint)puVar11[uVar19 + 10];
  uVar5 = uVar10;
  if (uVar3 <= puVar11[uVar19 + 10]) {
    uVar5 = uVar3;
  }
  uVar25 = uVar10;
  if (uVar10 <= uVar24) {
    uVar25 = uVar24;
    uVar3 = uVar5;
  }
  uVar24 = (uint)puVar11[uVar19 + 0xc];
  uVar5 = uVar24;
  if (uVar3 <= puVar11[uVar19 + 0xc]) {
    uVar5 = uVar3;
  }
  uVar2 = uVar24;
  if (uVar24 <= uVar25) {
    uVar2 = uVar25;
    uVar3 = uVar5;
  }
  uVar25 = (uint)puVar11[uVar19 + 0xe];
  uVar5 = uVar25;
  if (uVar3 <= puVar11[uVar19 + 0xe]) {
    uVar5 = uVar3;
  }
  uVar6 = uVar25;
  if (uVar25 <= uVar2) {
    uVar3 = uVar5;
    uVar6 = uVar2;
  }
  if (param_3 <= (uVar6 - uVar3) * 0x20) {
    uVar12 = uVar4 + uVar15 + uVar12 + uVar13 + uVar17 + uVar18 + uVar20 + uVar21 + uVar22 + uVar23
             + uVar7 + uVar8 + uVar9 + uVar10 + uVar24 + uVar25 >> 4;
    uVar5 = uVar6 - uVar12;
    if (uVar6 - uVar12 <= param_3) {
      uVar5 = param_3;
    }
    uVar15 = uVar12 - uVar3;
    if (uVar12 - uVar3 <= uVar5) {
      uVar15 = uVar5;
    }
    uVar5 = 0;
    if (uVar15 != 0) {
      uVar5 = 0x8000 / uVar15;
    }
    *param_1 = *param_1 + (*param_2 - uVar12) * uVar5;
    param_1[2] = param_1[2] + (param_2[2] - uVar12) * uVar5;
    param_1[4] = param_1[4] + (param_2[4] - uVar12) * uVar5;
    param_1[6] = param_1[6] + (param_2[6] - uVar12) * uVar5;
    uVar15 = *(int *)(this + 0x1da8) * 2 - 8;
    puVar1 = param_2 + (ulong)uVar15 + 8;
    piVar16 = param_1 + (ulong)uVar15 + 8;
    *piVar16 = *piVar16 + (*puVar1 - uVar12) * uVar5;
    param_1[(ulong)uVar15 + 10] = param_1[(ulong)uVar15 + 10] + (puVar1[2] - uVar12) * uVar5;
    param_1[(ulong)uVar15 + 0xc] = param_1[(ulong)uVar15 + 0xc] + (puVar1[4] - uVar12) * uVar5;
    param_1[(ulong)uVar15 + 0xe] = param_1[(ulong)uVar15 + 0xe] + (puVar1[6] - uVar12) * uVar5;
    uVar15 = *(int *)(this + 0x1da8) * 2 - 8;
    puVar11 = puVar1 + (ulong)uVar15 + 8;
    piVar14 = piVar16 + (ulong)uVar15 + 8;
    *piVar14 = *piVar14 + (*puVar11 - uVar12) * uVar5;
    piVar16[(ulong)uVar15 + 10] =
         piVar16[(ulong)uVar15 + 10] + (puVar1[(ulong)uVar15 + 10] - uVar12) * uVar5;
    piVar16[(ulong)uVar15 + 0xc] =
         piVar16[(ulong)uVar15 + 0xc] + (puVar1[(ulong)uVar15 + 0xc] - uVar12) * uVar5;
    piVar16[(ulong)uVar15 + 0xe] =
         piVar16[(ulong)uVar15 + 0xe] + (puVar1[(ulong)uVar15 + 0xe] - uVar12) * uVar5;
    uVar15 = *(int *)(this + 0x1da8) * 2 - 8;
    piVar14[(ulong)uVar15 + 8] =
         piVar14[(ulong)uVar15 + 8] + (puVar11[(ulong)uVar15 + 8] - uVar12) * uVar5;
    piVar14[(ulong)uVar15 + 10] =
         piVar14[(ulong)uVar15 + 10] + (puVar11[(ulong)uVar15 + 10] - uVar12) * uVar5;
    piVar14[(ulong)uVar15 + 0xc] =
         piVar14[(ulong)uVar15 + 0xc] + (puVar11[(ulong)uVar15 + 0xc] - uVar12) * uVar5;
    piVar14[(ulong)uVar15 + 0xe] =
         piVar14[(ulong)uVar15 + 0xe] + (puVar11[(ulong)uVar15 + 0xe] - uVar12) * uVar5;
  }
  return;
}


==================================================================

### FUNC 0017405c (572 bytes) name=LocalMap7x7_Simple

/* CFunctions::LocalMap7x7_Simple(int*, unsigned short const*, unsigned int) */

void __thiscall
CFunctions::LocalMap7x7_Simple(CFunctions *this,int *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  ushort uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  ushort *puVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  ulong uVar17;
  uint uVar18;
  uint uVar19;
  uint uVar20;
  ushort *puVar21;
  uint uVar22;
  uint uVar23;
  uint uVar24;
  
  uVar3 = *param_2;
  uVar4 = (uint)uVar3;
  if ((uint)uVar3 <= (uint)param_2[1]) {
    uVar4 = (uint)param_2[1];
  }
  uVar17 = (ulong)(*(int *)(this + 0x1da8) * 2 - 8);
  uVar14 = (uint)param_2[2];
  uVar12 = uVar14;
  if ((uint)uVar3 <= (uint)param_2[2]) {
    uVar12 = (uint)uVar3;
  }
  uVar13 = uVar14;
  uVar2 = (uint)uVar3;
  if (uVar14 <= uVar4) {
    uVar13 = uVar4;
    uVar2 = uVar12;
  }
  puVar21 = param_2 + uVar17 + 8;
  uVar12 = (uint)param_2[4];
  uVar4 = uVar12;
  if (uVar2 <= param_2[4]) {
    uVar4 = uVar2;
  }
  uVar15 = uVar12;
  if (uVar12 <= uVar13) {
    uVar15 = uVar13;
    uVar2 = uVar4;
  }
  uVar13 = (uint)param_2[6];
  uVar4 = uVar13;
  if (uVar2 <= param_2[6]) {
    uVar4 = uVar2;
  }
  uVar16 = uVar13;
  if (uVar13 <= uVar15) {
    uVar16 = uVar15;
    uVar2 = uVar4;
  }
  uVar15 = (uint)*puVar21;
  uVar4 = uVar15;
  if (uVar2 <= *puVar21) {
    uVar4 = uVar2;
  }
  uVar18 = uVar15;
  if (uVar15 <= uVar16) {
    uVar18 = uVar16;
    uVar2 = uVar4;
  }
  uVar16 = (uint)param_2[uVar17 + 10];
  uVar4 = uVar16;
  if (uVar2 <= param_2[uVar17 + 10]) {
    uVar4 = uVar2;
  }
  uVar19 = uVar16;
  if (uVar16 <= uVar18) {
    uVar19 = uVar18;
    uVar2 = uVar4;
  }
  puVar9 = puVar21 + uVar17 + 8;
  uVar18 = (uint)param_2[uVar17 + 0xc];
  uVar4 = uVar18;
  if (uVar2 <= param_2[uVar17 + 0xc]) {
    uVar4 = uVar2;
  }
  uVar20 = uVar18;
  if (uVar18 <= uVar19) {
    uVar20 = uVar19;
    uVar2 = uVar4;
  }
  uVar19 = (uint)param_2[uVar17 + 0xe];
  uVar4 = uVar19;
  if (uVar2 <= param_2[uVar17 + 0xe]) {
    uVar4 = uVar2;
  }
  uVar22 = uVar19;
  if (uVar19 <= uVar20) {
    uVar22 = uVar20;
    uVar2 = uVar4;
  }
  uVar20 = (uint)*puVar9;
  uVar4 = uVar20;
  if (uVar2 <= *puVar9) {
    uVar4 = uVar2;
  }
  uVar23 = uVar20;
  if (uVar20 <= uVar22) {
    uVar23 = uVar22;
    uVar2 = uVar4;
  }
  uVar22 = (uint)puVar21[uVar17 + 10];
  uVar4 = uVar22;
  if (uVar2 <= puVar21[uVar17 + 10]) {
    uVar4 = uVar2;
  }
  uVar6 = uVar22;
  if (uVar22 <= uVar23) {
    uVar6 = uVar23;
    uVar2 = uVar4;
  }
  uVar23 = (uint)puVar21[uVar17 + 0xc];
  uVar4 = uVar23;
  if (uVar2 <= puVar21[uVar17 + 0xc]) {
    uVar4 = uVar2;
  }
  uVar7 = uVar23;
  if (uVar23 <= uVar6) {
    uVar7 = uVar6;
    uVar2 = uVar4;
  }
  uVar6 = (uint)puVar21[uVar17 + 0xe];
  uVar4 = uVar6;
  if (uVar2 <= puVar21[uVar17 + 0xe]) {
    uVar4 = uVar2;
  }
  uVar8 = uVar6;
  if (uVar6 <= uVar7) {
    uVar8 = uVar7;
    uVar2 = uVar4;
  }
  uVar7 = (uint)puVar9[uVar17 + 8];
  uVar4 = uVar7;
  if (uVar2 <= puVar9[uVar17 + 8]) {
    uVar4 = uVar2;
  }
  uVar10 = uVar7;
  if (uVar7 <= uVar8) {
    uVar10 = uVar8;
    uVar2 = uVar4;
  }
  uVar8 = (uint)puVar9[uVar17 + 10];
  uVar4 = uVar8;
  if (uVar2 <= puVar9[uVar17 + 10]) {
    uVar4 = uVar2;
  }
  uVar24 = uVar8;
  if (uVar8 <= uVar10) {
    uVar24 = uVar10;
    uVar2 = uVar4;
  }
  uVar10 = (uint)puVar9[uVar17 + 0xc];
  uVar4 = uVar10;
  if (uVar2 <= puVar9[uVar17 + 0xc]) {
    uVar4 = uVar2;
  }
  uVar1 = uVar10;
  if (uVar10 <= uVar24) {
    uVar1 = uVar24;
    uVar2 = uVar4;
  }
  uVar24 = (uint)puVar9[uVar17 + 0xe];
  uVar4 = uVar24;
  if (uVar2 <= puVar9[uVar17 + 0xe]) {
    uVar4 = uVar2;
  }
  uVar5 = uVar24;
  if (uVar24 <= uVar1) {
    uVar2 = uVar4;
    uVar5 = uVar1;
  }
  if ((uVar5 - uVar2) * 0x20 < param_3) {
    iVar11 = 0;
  }
  else {
    uVar12 = uVar3 + uVar14 + uVar12 + uVar13 + uVar15 + uVar16 + uVar18 + uVar19 + uVar20 + uVar22
             + uVar23 + uVar6 + uVar7 + uVar8 + uVar10 + uVar24 >> 4;
    uVar4 = uVar5 - uVar12;
    if (uVar5 - uVar12 <= param_3) {
      uVar4 = param_3;
    }
    uVar14 = uVar12 - uVar2;
    if (uVar12 - uVar2 <= uVar4) {
      uVar14 = uVar4;
    }
    uVar4 = 0;
    if (uVar14 != 0) {
      uVar4 = 0x8000 / uVar14;
    }
    iVar11 = (param_2[(ulong)(uint)(*(int *)(this + 0x1da8) * 3) + 3] - uVar12) * uVar4;
  }
  *param_1 = iVar11;
  return;
}


==================================================================

### FUNC 00174298 (380 bytes) name=ApplyNewEffect

/* CFunctions::ApplyNewEffect(int) */

CFunctions * __thiscall CFunctions::ApplyNewEffect(CFunctions *this,int param_1)

{
  uint uVar1;
  uint uVar2;
  CFunctions *pCVar3;
  
  pCVar3 = this;
  if (param_1 != 0) {
    uVar2 = pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    pCVar3 = (CFunctions *)(ulong)uVar2;
  }
  if (*(int *)(this + 0xec) != 0) {
    pCVar3 = (CFunctions *)GrayEnlarge(this);
    if (((*(int *)(this + 0x1e24) != 0) && (*(int *)(this + 0x2c) != 0)) &&
       ((*(int *)(this + 0x28) == 0 || (*(int *)(this + 0x10) != 0)))) {
      uVar2 = *(int *)(this + 0x2c) << 3;
      if (*(int *)(this + 0x60) == 0) {
        pCVar3 = (CFunctions *)FilterDetailEnhancement(this,uVar2);
      }
      else {
        pCVar3 = (CFunctions *)FilterDetailEnhancement_Simple(this,uVar2);
      }
    }
    uVar2 = *(uint *)(this + 0x1db0);
    uVar1 = *(uint *)(this + 0x1da8);
    if ((uVar2 == uVar1) && (*(int *)(this + 0x1db4) == *(int *)(this + 0x1dac))) {
      pCVar3 = memcpy(*(void **)(this + 0xd8),*(void **)(this + 0x170),
                      (ulong)*(uint *)(this + 0x76d0));
    }
    else if ((uVar2 == uVar1 * 2) && (*(int *)(this + 0x1db4) == *(int *)(this + 0x1dac) * 2)) {
      pCVar3 = (CFunctions *)ResizeBMP_2X(this);
    }
    else if ((uVar2 << 1 == uVar1 * 3) &&
            (*(int *)(this + 0x1db4) << 1 == *(int *)(this + 0x1dac) * 3)) {
      pCVar3 = (CFunctions *)ResizeBMP_2to3(this);
    }
    else if ((uVar2 * 3 == uVar1 * 5) &&
            (*(int *)(this + 0x1db4) * 3 == *(int *)(this + 0x1dac) * 5)) {
      pCVar3 = (CFunctions *)ResizeBMP_3to5(this);
    }
    else if ((uVar1 < uVar2) && (*(uint *)(this + 0x1dac) < *(uint *)(this + 0x1db4))) {
      pCVar3 = (CFunctions *)ResizeBMP(this);
    }
  }
  if (param_1 == 0) {
    return pCVar3;
  }
  uVar2 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return (CFunctions *)(ulong)uVar2;
}


==================================================================

### FUNC 00174414 (192 bytes) name=SetEX

/* CFunctions::SetEX(EX, int, int) */

int __thiscall CFunctions::SetEX(CFunctions *this,uint param_2,int param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  if (param_2 - 1 < 4) {
    uVar5 = *(uint *)(this + 0x1da8);
    uVar4 = *(uint *)(this + 0x1dac);
    *(uint *)(this + 0x1dd0) = param_2;
    uVar1 = param_3 - (uVar5 >> (ulong)(param_2 + 1 & 0x1f));
    uVar2 = param_4 - (uVar4 >> (ulong)(param_2 + 1 & 0x1f));
    uVar1 = uVar1 & ((int)uVar1 >> 0x1f ^ 0xffffffffU);
    uVar5 = (uVar5 - (uVar5 >> (ulong)(param_2 & 0x1f))) - 2;
    uVar2 = uVar2 & ((int)uVar2 >> 0x1f ^ 0xffffffffU);
    uVar4 = (uVar4 - (uVar4 >> (ulong)(param_2 & 0x1f))) - 1;
    if (uVar1 <= uVar5) {
      uVar5 = uVar1;
    }
    uVar5 = uVar5 & 0xfffffffe;
    if (uVar2 <= uVar4) {
      uVar4 = uVar2;
    }
  }
  else {
    uVar5 = 0;
    *(undefined4 *)(this + 0x1dd0) = 0;
    uVar4 = 0;
  }
  *(uint *)(this + 0x1dd4) = uVar5;
  *(uint *)(this + 0x1dd8) = uVar4;
  iVar3 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return iVar3;
}


==================================================================

### FUNC 001744d4 (152 bytes) name=SetLensParameter

/* CFunctions::SetLensParameter(void const*, unsigned int) */

undefined4 __thiscall CFunctions::SetLensParameter(CFunctions *this,void *param_1,uint param_2)

{
  undefined4 uVar1;
  
  if (param_2 == 0x21c) {
    pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    if (*(int *)((long)param_1 + 0x3c) - 1U < 0x19) {
      memcpy(this + 0x1640,param_1,0x21c);
      *(undefined4 *)(this + 0x163c) = 1;
      *(undefined4 *)(this + 0x1638) = 1;
      *(undefined4 *)(this + 0x70) = 0;
    }
    pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
    uVar1 = *(undefined4 *)(this + 0x1638);
  }
  else {
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### FUNC 0017456c (784 bytes) name=SetInnertempUnit

/* CFunctions::SetInnertempUnit(unsigned int, int) */

undefined8 __thiscall CFunctions::SetInnertempUnit(CFunctions *this,uint param_1,int param_2)

{
  int iVar1;
  undefined4 uVar2;
  
  if ((*(int *)(this + 0x1638) != 0) &&
     (iVar1 = strcmp((char *)(this + 0x1640),"Shutterless Default"), iVar1 == 0)) {
    pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
    *(uint *)(this + 0x1714) = param_1;
    *(int *)(this + 0x1718) = param_2;
    goto switchD_00174624_caseD_2;
  }
  if ((param_1 == 0) || ((param_1 - 1 & param_1) != 0)) {
    return 0;
  }
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xf0));
  *(uint *)(this + 0x76dc) = param_1;
  *(int *)(this + 0x76e0) = param_2;
  if ((int)param_1 < 0x8000) {
    if ((int)param_1 < 0x80) {
      uVar2 = 0;
      switch(param_1 - 1) {
      case 0:
        break;
      case 1:
        uVar2 = 1;
        break;
      case 2:
      case 4:
      case 5:
      case 6:
      case 8:
      case 9:
      case 10:
      case 0xb:
      case 0xc:
      case 0xd:
      case 0xe:
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
      case 0x1a:
      case 0x1b:
      case 0x1c:
      case 0x1d:
      case 0x1e:
      case 0x20:
      case 0x21:
      case 0x22:
      case 0x23:
      case 0x24:
      case 0x25:
      case 0x26:
      case 0x27:
      case 0x28:
      case 0x29:
      case 0x2a:
      case 0x2b:
      case 0x2c:
      case 0x2d:
      case 0x2e:
      case 0x2f:
      case 0x30:
      case 0x31:
      case 0x32:
      case 0x33:
      case 0x34:
      case 0x35:
      case 0x36:
      case 0x37:
      case 0x38:
      case 0x39:
      case 0x3a:
      case 0x3b:
      case 0x3c:
      case 0x3d:
      case 0x3e:
        goto switchD_00174624_caseD_2;
      case 3:
        uVar2 = 2;
        break;
      case 7:
        uVar2 = 3;
        break;
      case 0xf:
        uVar2 = 4;
        break;
      case 0x1f:
        uVar2 = 5;
        break;
      case 0x3f:
        uVar2 = 6;
        break;
      default:
        if (param_1 != 0x80000000) goto switchD_00174624_caseD_2;
        uVar2 = 0x1f;
      }
    }
    else if ((int)param_1 < 0x800) {
      if ((int)param_1 < 0x200) {
        if (param_1 == 0x80) {
          uVar2 = 7;
        }
        else {
          if (param_1 != 0x100) goto switchD_00174624_caseD_2;
          uVar2 = 8;
        }
      }
      else if (param_1 == 0x200) {
        uVar2 = 9;
      }
      else {
        if (param_1 != 0x400) goto switchD_00174624_caseD_2;
        uVar2 = 10;
      }
    }
    else if ((int)param_1 < 0x2000) {
      if (param_1 == 0x800) {
        uVar2 = 0xb;
      }
      else {
        if (param_1 != 0x1000) goto switchD_00174624_caseD_2;
        uVar2 = 0xc;
      }
    }
    else if (param_1 == 0x2000) {
      uVar2 = 0xd;
    }
    else {
      if (param_1 != 0x4000) goto switchD_00174624_caseD_2;
      uVar2 = 0xe;
    }
  }
  else if ((int)param_1 < 0x800000) {
    if ((int)param_1 < 0x80000) {
      if ((int)param_1 < 0x20000) {
        if (param_1 == 0x8000) {
          uVar2 = 0xf;
        }
        else {
          if (param_1 != 0x10000) goto switchD_00174624_caseD_2;
          uVar2 = 0x10;
        }
      }
      else if (param_1 == 0x20000) {
        uVar2 = 0x11;
      }
      else {
        if (param_1 != 0x40000) goto switchD_00174624_caseD_2;
        uVar2 = 0x12;
      }
    }
    else if ((int)param_1 < 0x200000) {
      if (param_1 == 0x80000) {
        uVar2 = 0x13;
      }
      else {
        if (param_1 != 0x100000) goto switchD_00174624_caseD_2;
        uVar2 = 0x14;
      }
    }
    else if (param_1 == 0x200000) {
      uVar2 = 0x15;
    }
    else {
      if (param_1 != 0x400000) goto switchD_00174624_caseD_2;
      uVar2 = 0x16;
    }
  }
  else if ((int)param_1 < 0x8000000) {
    if ((int)param_1 < 0x2000000) {
      if (param_1 == 0x800000) {
        uVar2 = 0x17;
      }
      else {
        if (param_1 != 0x1000000) goto switchD_00174624_caseD_2;
        uVar2 = 0x18;
      }
    }
    else if (param_1 == 0x2000000) {
      uVar2 = 0x19;
    }
    else {
      if (param_1 != 0x4000000) goto switchD_00174624_caseD_2;
      uVar2 = 0x1a;
    }
  }
  else if ((int)param_1 < 0x20000000) {
    if (param_1 == 0x8000000) {
      uVar2 = 0x1b;
    }
    else {
      if (param_1 != 0x10000000) goto switchD_00174624_caseD_2;
      uVar2 = 0x1c;
    }
  }
  else if (param_1 == 0x20000000) {
    uVar2 = 0x1d;
  }
  else {
    if (param_1 != 0x40000000) goto switchD_00174624_caseD_2;
    uVar2 = 0x1e;
  }
  *(undefined4 *)(this + 0x76e4) = uVar2;
switchD_00174624_caseD_2:
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
  return 1;
}


==================================================================

### FUNC 0017487c (116 bytes) name=isDDTValid

/* isDDTValid(unsigned char*, int) */

bool isDDTValid(uchar *param_1,int param_2)

{
  if (((((0x373 < param_2) && (0.0 < *(float *)(param_1 + 0x2c4))) &&
       (*(float *)(param_1 + 0x2c4) <= 1.0)) &&
      ((0.0 < *(float *)(param_1 + 0x2cc) && (*(float *)(param_1 + 0x2cc) <= 1.0)))) &&
     ((0.0 < *(float *)(param_1 + 0x2d0) &&
      ((*(float *)(param_1 + 0x2d0) <= 1.0 && (*(int *)(param_1 + 0x2f0) + 100U < 0xc9)))))) {
    return *(int *)(param_1 + 0x2f4) + 100U < 0xc9;
  }
  return false;
}


==================================================================

### FUNC 001748f0 (76 bytes) name=MDTHelper

/* MDTHelper::MDTHelper() */

void __thiscall MDTHelper::MDTHelper(MDTHelper *this)

{
  *(undefined8 *)this = 0;
  *(undefined4 *)(this + 8) = 0;
  this[0xc] = (MDTHelper)0x0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  this[0x1c] = (MDTHelper)0x0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined4 *)(this + 0x28) = 0;
  this[0x2c] = (MDTHelper)0x0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined4 *)(this + 0x38) = 0;
  this[0x3c] = (MDTHelper)0x0;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined4 *)(this + 0x48) = 0;
  this[0x4c] = (MDTHelper)0x0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined4 *)(this + 0x58) = 0;
  this[0x5c] = (MDTHelper)0x0;
  return;
}


==================================================================

### FUNC 0017493c (4 bytes) name=~MDTHelper

/* MDTHelper::~MDTHelper() */

void __thiscall MDTHelper::~MDTHelper(MDTHelper *this)

{
  (*(code *)PTR_free_005002b8)();
  return;
}


==================================================================

### FUNC 00174940 (220 bytes) name=free

/* MDTHelper::free() */

void __thiscall MDTHelper::free(MDTHelper *this)

{
  if (*(void **)this != (void *)0x0) {
    if (this[0xc] != (MDTHelper)0x0) {
      operator_delete__(*(void **)this);
      this[0xc] = (MDTHelper)0x0;
    }
    *(undefined8 *)this = 0;
    *(undefined4 *)(this + 8) = 0;
  }
  if (*(void **)(this + 0x10) != (void *)0x0) {
    if (this[0x1c] != (MDTHelper)0x0) {
      operator_delete__(*(void **)(this + 0x10));
      this[0x1c] = (MDTHelper)0x0;
    }
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined4 *)(this + 0x18) = 0;
  }
  if (*(void **)(this + 0x20) != (void *)0x0) {
    if (this[0x2c] != (MDTHelper)0x0) {
      operator_delete__(*(void **)(this + 0x20));
      this[0x2c] = (MDTHelper)0x0;
    }
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined4 *)(this + 0x28) = 0;
  }
  if (*(void **)(this + 0x30) != (void *)0x0) {
    if (this[0x3c] != (MDTHelper)0x0) {
      operator_delete__(*(void **)(this + 0x30));
      this[0x3c] = (MDTHelper)0x0;
    }
    *(undefined8 *)(this + 0x30) = 0;
    *(undefined4 *)(this + 0x38) = 0;
  }
  if (*(void **)(this + 0x40) != (void *)0x0) {
    if (this[0x4c] != (MDTHelper)0x0) {
      operator_delete__(*(void **)(this + 0x40));
      this[0x4c] = (MDTHelper)0x0;
    }
    *(undefined8 *)(this + 0x40) = 0;
    *(undefined4 *)(this + 0x48) = 0;
  }
  if (*(void **)(this + 0x50) != (void *)0x0) {
    if (this[0x5c] != (MDTHelper)0x0) {
      operator_delete__(*(void **)(this + 0x50));
      this[0x5c] = (MDTHelper)0x0;
    }
    *(undefined8 *)(this + 0x50) = 0;
    *(undefined4 *)(this + 0x58) = 0;
  }
  return;
}


==================================================================

### FUNC 00174a1c (1660 bytes) name=load

/* MDTHelper::load(char const*) */

void __thiscall MDTHelper::load(MDTHelper *this,char *param_1)

{
  ulong uVar1;
  long lVar2;
  FILE *__stream;
  long lVar3;
  size_t sVar4;
  void *pvVar5;
  undefined8 uVar6;
  int iVar7;
  ulong uVar8;
  int local_3b0;
  int local_3ac;
  int local_3a8;
  int local_3a4;
  int local_3a0;
  int local_39c;
  int local_318;
  int local_314;
  int local_290;
  int local_28c;
  int local_208;
  int local_204;
  int local_178;
  int local_174;
  int local_f0;
  int local_ec;
  long local_68;
  
  lVar2 = tpidr_el0;
  local_68 = *(long *)(lVar2 + 0x28);
  free(this);
  __stream = fopen(param_1,"rb");
  uVar6 = 0;
  if (__stream == (FILE *)0x0) goto LAB_00174c54;
  fseek(__stream,0,2);
  lVar3 = ftell(__stream);
  iVar7 = (int)lVar3;
  if (iVar7 < 0x400) {
LAB_00174c48:
    fclose(__stream);
  }
  else {
    memset(&local_f0,0,0x88);
    memset(&local_178,0,0x88);
    memset(&local_208,0,0x90);
    memset(&local_290,0,0x88);
    memset(&local_318,0,0x88);
    memset(&local_3b0,0,0x98);
    fseek(__stream,(lVar3 << 0x20) + -0x9800000000 >> 0x20,0);
    sVar4 = fread(&local_3b0,1,0x98,__stream);
    if (sVar4 != 0x98) goto LAB_00174c48;
    if (local_3b0 == 0x5bb5b57b) {
      if (((-1 < local_3ac) && (-1 < local_3a8)) &&
         ((-1 < local_3a4 && ((-1 < local_3a0 && (-1 < local_39c)))))) {
        if (local_3ac < 1) {
          uVar8 = 0;
LAB_00174d60:
          fseek(__stream,uVar8,0);
          local_f0 = 0;
          sVar4 = fread(&local_f0,1,0x88,__stream);
          if ((sVar4 == 0x88) && (local_f0 == 0x5bb5b55b)) {
            sVar4 = (size_t)local_ec;
            *(int *)(this + 0x18) = local_ec;
            if (local_ec - 1U < 10000000) {
              uVar8 = sVar4;
              if ((long)sVar4 < 0) {
                uVar8 = 0xffffffffffffffff;
              }
              pvVar5 = operator_new__(uVar8);
              *(void **)(this + 0x10) = pvVar5;
              this[0x1c] = (MDTHelper)0x1;
              sVar4 = fread(pvVar5,1,sVar4,__stream);
              if ((sVar4 == (long)*(int *)(this + 0x18)) && (0x373 < *(int *)(this + 0x18))) {
                lVar3 = *(long *)(this + 0x10);
                if (((0.0 < *(float *)(lVar3 + 0x2c4)) &&
                    (((*(float *)(lVar3 + 0x2c4) <= 1.0 && (0.0 < *(float *)(lVar3 + 0x2cc))) &&
                     (*(float *)(lVar3 + 0x2cc) <= 1.0)))) &&
                   ((((0.0 < *(float *)(lVar3 + 0x2d0) && (*(float *)(lVar3 + 0x2d0) <= 1.0)) &&
                     (*(int *)(lVar3 + 0x2f0) + 100U < 0xc9)) &&
                    (*(int *)(lVar3 + 0x2f4) + 100U < 0xc9)))) {
                  if (local_3a8 < 1) {
LAB_00174edc:
                    if (local_3a4 < 1) {
LAB_00174f68:
                      if (local_3a0 < 1) {
LAB_00174ff4:
                        if (local_39c < 1) goto LAB_00174d4c;
                        fseek(__stream,(long)local_39c,0);
                        sVar4 = fread(&local_318,1,0x88,__stream);
                        if ((sVar4 == 0x88) && (local_318 == 0x5bb5b55f)) {
                          sVar4 = (size_t)local_314;
                          *(int *)(this + 0x58) = local_314;
                          if (local_314 - 1U < 10000000) {
                            uVar8 = sVar4;
                            if ((long)sVar4 < 0) {
                              uVar8 = 0xffffffffffffffff;
                            }
                            pvVar5 = operator_new__(uVar8);
                            *(void **)(this + 0x50) = pvVar5;
                            this[0x5c] = (MDTHelper)0x1;
                            sVar4 = fread(pvVar5,1,sVar4,__stream);
                            if (sVar4 == (long)*(int *)(this + 0x58)) goto LAB_00174d4c;
                          }
                        }
                      }
                      else {
                        fseek(__stream,(long)local_3a0,0);
                        sVar4 = fread(&local_290,1,0x88,__stream);
                        if ((sVar4 == 0x88) && (local_290 == 0x5bb5b55e)) {
                          sVar4 = (size_t)local_28c;
                          *(int *)(this + 0x48) = local_28c;
                          if (local_28c - 1U < 10000000) {
                            uVar8 = sVar4;
                            if ((long)sVar4 < 0) {
                              uVar8 = 0xffffffffffffffff;
                            }
                            pvVar5 = operator_new__(uVar8);
                            *(void **)(this + 0x40) = pvVar5;
                            this[0x4c] = (MDTHelper)0x1;
                            sVar4 = fread(pvVar5,1,sVar4,__stream);
                            if (sVar4 == (long)*(int *)(this + 0x48)) goto LAB_00174ff4;
                          }
                        }
                      }
                    }
                    else {
                      fseek(__stream,(long)local_3a4,0);
                      sVar4 = fread(&local_208,1,0x90,__stream);
                      if ((sVar4 == 0x90) && (local_208 == 0x5bb5b55d)) {
                        sVar4 = (size_t)local_204;
                        *(int *)(this + 0x38) = local_204;
                        if (local_204 - 1U < 10000000) {
                          uVar8 = sVar4;
                          if ((long)sVar4 < 0) {
                            uVar8 = 0xffffffffffffffff;
                          }
                          pvVar5 = operator_new__(uVar8);
                          *(void **)(this + 0x30) = pvVar5;
                          this[0x3c] = (MDTHelper)0x1;
                          sVar4 = fread(pvVar5,1,sVar4,__stream);
                          if (sVar4 == (long)*(int *)(this + 0x38)) goto LAB_00174f68;
                        }
                      }
                    }
                  }
                  else {
                    fseek(__stream,(long)local_3a8,0);
                    sVar4 = fread(&local_178,1,0x88,__stream);
                    if ((sVar4 == 0x88) && (local_178 == 0x5bb5b55c)) {
                      sVar4 = (size_t)local_174;
                      *(int *)(this + 0x28) = local_174;
                      if (local_174 - 1U < 10000000) {
                        uVar8 = sVar4;
                        if ((long)sVar4 < 0) {
                          uVar8 = 0xffffffffffffffff;
                        }
                        pvVar5 = operator_new__(uVar8);
                        *(void **)(this + 0x20) = pvVar5;
                        this[0x2c] = (MDTHelper)0x1;
                        sVar4 = fread(pvVar5,1,sVar4,__stream);
                        if (sVar4 == (long)*(int *)(this + 0x28)) goto LAB_00174edc;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else {
          *(int *)(this + 8) = local_3ac;
          if (local_3ac - 1U < 10000000) {
            uVar8 = (ulong)local_3ac;
            uVar1 = uVar8;
            if ((long)uVar8 < 0) {
              uVar1 = 0xffffffffffffffff;
            }
            pvVar5 = operator_new__(uVar1);
            *(void **)this = pvVar5;
            this[0xc] = (MDTHelper)0x1;
            fseek(__stream,0,0);
            sVar4 = fread(*(void **)this,1,(long)*(int *)(this + 8),__stream);
            if (sVar4 == (long)*(int *)(this + 8)) goto LAB_00174d60;
          }
        }
      }
    }
    else {
      fseek(__stream,0,0);
      sVar4 = fread(&local_f0,1,0x88,__stream);
      if (sVar4 != 0x88) goto LAB_00174c48;
      if (local_f0 == 0x5bb5b55b) {
        sVar4 = (size_t)local_ec;
        *(int *)(this + 0x18) = local_ec;
        if (local_ec - 1U < 10000000) {
          uVar8 = sVar4;
          if ((long)sVar4 < 0) {
            uVar8 = 0xffffffffffffffff;
          }
          pvVar5 = operator_new__(uVar8);
          *(void **)(this + 0x10) = pvVar5;
          this[0x1c] = (MDTHelper)0x1;
LAB_00174ccc:
          sVar4 = fread(pvVar5,1,sVar4,__stream);
          if ((sVar4 == (long)*(int *)(this + 0x18)) && (0x373 < *(int *)(this + 0x18))) {
            lVar3 = *(long *)(this + 0x10);
            if ((((0.0 < *(float *)(lVar3 + 0x2c4)) &&
                 ((((*(float *)(lVar3 + 0x2c4) <= 1.0 && (0.0 < *(float *)(lVar3 + 0x2cc))) &&
                   (*(float *)(lVar3 + 0x2cc) <= 1.0)) &&
                  ((0.0 < *(float *)(lVar3 + 0x2d0) && (*(float *)(lVar3 + 0x2d0) <= 1.0)))))) &&
                (*(int *)(lVar3 + 0x2f0) + 100U < 0xc9)) && (*(int *)(lVar3 + 0x2f4) + 100U < 0xc9))
            {
LAB_00174d4c:
              fclose(__stream);
              uVar6 = 1;
              goto LAB_00174c54;
            }
          }
        }
      }
      else {
        *(int *)(this + 0x18) = iVar7;
        if (iVar7 - 1U < 10000000) {
          uVar8 = (lVar3 << 0x20) >> 0x20;
          if ((long)uVar8 < 0) {
            uVar8 = 0xffffffffffffffff;
          }
          pvVar5 = operator_new__(uVar8);
          *(void **)(this + 0x10) = pvVar5;
          this[0x1c] = (MDTHelper)0x1;
          fseek(__stream,0,0);
          pvVar5 = *(void **)(this + 0x10);
          sVar4 = (size_t)*(int *)(this + 0x18);
          goto LAB_00174ccc;
        }
      }
    }
    fclose(__stream);
    free(this);
  }
  uVar6 = 0;
LAB_00174c54:
  if (*(long *)(lVar2 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar6);
}


==================================================================

### FUNC 00175098 (24 bytes) name=isSizeValid

/* MDTHelper::isSizeValid(int) */

bool __thiscall MDTHelper::isSizeValid(MDTHelper *this,int param_1)

{
  return param_1 - 1U < 10000000;
}


==================================================================

### FUNC 001750b0 (1056 bytes) name=save

/* MDTHelper::save(char const*) */

undefined4 __thiscall MDTHelper::save(MDTHelper *this,char *param_1)

{
  long lVar1;
  uint uVar2;
  FILE *__s;
  long lVar3;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  undefined4 local_180;
  uint local_17c;
  undefined4 local_178;
  int local_174 [33];
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  long local_58;
  MDTHelper *pMVar4;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  pMVar4 = this;
  if ((((*(long *)(this + 0x10) == 0) ||
       ((((*(long *)this != 0 && (9999999 < *(int *)(this + 8) - 1U)) ||
         (9999999 < *(int *)(this + 0x18) - 1U)) ||
        ((*(long *)(this + 0x20) != 0 && (9999999 < *(int *)(this + 0x28) - 1U)))))) ||
      ((*(long *)(this + 0x30) != 0 && (9999999 < *(int *)(this + 0x38) - 1U)))) ||
     ((((*(long *)(this + 0x40) != 0 && (9999999 < *(int *)(this + 0x48) - 1U)) ||
       ((*(long *)(this + 0x50) != 0 && (9999999 < *(int *)(this + 0x58) - 1U)))) ||
      (__s = fopen(param_1,"wb"), pMVar4 = (MDTHelper *)0x0, __s == (FILE *)0x0)))) {
    uVar5 = 0;
  }
  else {
    memset((void *)((ulong)&local_f0 | 4),0,0x94);
    local_f0 = 0x5bb5b57b;
    if (*(void **)this != (void *)0x0) {
      iVar7 = *(int *)(this + 8);
      iVar6 = (iVar7 + 3U & 0xfffffffc) - iVar7;
      fwrite(*(void **)this,1,(long)iVar7,__s);
      if (0 < iVar6) {
        do {
          fputc(0,__s);
          iVar6 = iVar6 + -1;
        } while (iVar6 != 0);
      }
    }
    if (*(long *)(this + 0x10) != 0) {
      uVar2 = *(int *)(this + 0x18) + 3U & 0xfffffffc;
      iVar7 = uVar2 - *(int *)(this + 0x18);
      memset(&local_178,0,0x80);
      local_180 = 0x5bb5b55b;
      local_17c = uVar2;
      lVar3 = ftell(__s);
      local_ec = (undefined4)lVar3;
      fwrite(&local_180,0x88,1,__s);
      fwrite(*(void **)(this + 0x10),1,(long)*(int *)(this + 0x18),__s);
      if (0 < iVar7) {
        do {
          fputc(0,__s);
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
      }
    }
    if (*(long *)(this + 0x20) != 0) {
      uVar2 = *(int *)(this + 0x28) + 3U & 0xfffffffc;
      iVar7 = uVar2 - *(int *)(this + 0x28);
      memset(&local_178,0,0x80);
      local_180 = 0x5bb5b55c;
      local_17c = uVar2;
      lVar3 = ftell(__s);
      local_e8 = (undefined4)lVar3;
      fwrite(&local_180,0x88,1,__s);
      fwrite(*(void **)(this + 0x20),1,(long)*(int *)(this + 0x28),__s);
      if (0 < iVar7) {
        do {
          fputc(0,__s);
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
      }
    }
    if (*(long *)(this + 0x30) != 0) {
      memset(&local_178,0,0x88);
      local_180 = 0x5bb5b55d;
      local_174[0] = (int)*(uint *)(this + 0x38) >> 8;
      local_17c = *(uint *)(this + 0x38) & 0xffffff00;
      lVar3 = ftell(__s);
      local_e4 = (undefined4)lVar3;
      fwrite(&local_180,0x90,1,__s);
      fwrite(*(void **)(this + 0x30),1,(long)(int)local_17c,__s);
    }
    if (*(long *)(this + 0x40) != 0) {
      uVar2 = *(int *)(this + 0x48) + 3U & 0xfffffffc;
      iVar7 = uVar2 - *(int *)(this + 0x48);
      memset(local_174,0,0x7c);
      local_180 = 0x5bb5b55e;
      local_178 = 2;
      local_17c = uVar2;
      lVar3 = ftell(__s);
      local_e0 = (undefined4)lVar3;
      fwrite(&local_180,0x88,1,__s);
      fwrite(*(void **)(this + 0x40),1,(long)*(int *)(this + 0x48),__s);
      if (0 < iVar7) {
        do {
          fputc(0,__s);
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
      }
    }
    if (*(long *)(this + 0x50) != 0) {
      uVar2 = *(int *)(this + 0x58) + 3U & 0xfffffffc;
      iVar7 = uVar2 - *(int *)(this + 0x58);
      memset(&local_178,0,0x80);
      local_180 = 0x5bb5b55f;
      local_17c = uVar2;
      lVar3 = ftell(__s);
      local_dc = (undefined4)lVar3;
      fwrite(&local_180,0x88,1,__s);
      fwrite(*(void **)(this + 0x50),1,(long)*(int *)(this + 0x58),__s);
      if (0 < iVar7) {
        do {
          fputc(0,__s);
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
      }
    }
    uVar5 = 1;
    fwrite(&local_f0,0x98,1,__s);
    uVar2 = fclose(__s);
    pMVar4 = (MDTHelper *)(ulong)uVar2;
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return uVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(pMVar4);
}


==================================================================

### FUNC 001754d0 (4 bytes) name=unload

/* MDTHelper::unload() */

void MDTHelper::unload(void)

{
  (*(code *)PTR_free_005002b8)();
  return;
}


==================================================================

### FUNC 001754d4 (140 bytes) name=set

/* MDTHelper::set(MDT const*) */

void __thiscall MDTHelper::set(MDTHelper *this,MDT *param_1)

{
  if (param_1 != (MDT *)0x0) {
    free(this);
    *(undefined8 *)this = *(undefined8 *)param_1;
    *(undefined4 *)(this + 8) = *(undefined4 *)(param_1 + 8);
    *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
    *(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18);
    *(undefined8 *)(this + 0x20) = *(undefined8 *)(param_1 + 0x20);
    *(undefined4 *)(this + 0x28) = *(undefined4 *)(param_1 + 0x28);
    *(undefined8 *)(this + 0x30) = *(undefined8 *)(param_1 + 0x30);
    *(undefined4 *)(this + 0x38) = *(undefined4 *)(param_1 + 0x38);
    *(undefined8 *)(this + 0x40) = *(undefined8 *)(param_1 + 0x40);
    *(undefined4 *)(this + 0x48) = *(undefined4 *)(param_1 + 0x48);
    *(undefined8 *)(this + 0x50) = *(undefined8 *)(param_1 + 0x50);
    *(undefined4 *)(this + 0x58) = *(undefined4 *)(param_1 + 0x58);
  }
  return;
}


==================================================================

### FUNC 00175560 (104 bytes) name=get

/* MDTHelper::get(MDT*) */

void __thiscall MDTHelper::get(MDTHelper *this,MDT *param_1)

{
  if (param_1 != (MDT *)0x0) {
    *(undefined8 *)param_1 = *(undefined8 *)this;
    *(undefined4 *)(param_1 + 8) = *(undefined4 *)(this + 8);
    *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(this + 0x10);
    *(undefined4 *)(param_1 + 0x18) = *(undefined4 *)(this + 0x18);
    *(undefined8 *)(param_1 + 0x20) = *(undefined8 *)(this + 0x20);
    *(undefined4 *)(param_1 + 0x28) = *(undefined4 *)(this + 0x28);
    *(undefined8 *)(param_1 + 0x30) = *(undefined8 *)(this + 0x30);
    *(undefined4 *)(param_1 + 0x38) = *(undefined4 *)(this + 0x38);
    *(undefined8 *)(param_1 + 0x40) = *(undefined8 *)(this + 0x40);
    *(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(this + 0x48);
    *(undefined8 *)(param_1 + 0x50) = *(undefined8 *)(this + 0x50);
    *(undefined4 *)(param_1 + 0x58) = *(undefined4 *)(this + 0x58);
  }
  return;
}


==================================================================

### FUNC 001755c8 (164 bytes) name=setJpg

/* MDTHelper::setJpg(unsigned char*, int, bool) */

undefined8 __thiscall MDTHelper::setJpg(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  ulong uVar1;
  void *__dest;
  undefined8 uVar2;
  size_t __n;
  
  if (param_2 - 1U < 10000000) {
    if ((*(void **)this != (void *)0x0) && (this[0xc] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)this);
    }
    if (param_3) {
      __n = (size_t)param_2;
      uVar1 = __n;
      if ((long)__n < 0) {
        uVar1 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar1);
      *(void **)this = __dest;
      memcpy(__dest,param_1,__n);
    }
    else {
      *(uchar **)this = param_1;
    }
    uVar2 = 1;
    this[0xc] = (MDTHelper)param_3;
    *(int *)(this + 8) = param_2;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 0017566c (164 bytes) name=setDDT

/* MDTHelper::setDDT(unsigned char*, int, bool) */

undefined8 __thiscall MDTHelper::setDDT(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  ulong uVar1;
  void *__dest;
  undefined8 uVar2;
  size_t __n;
  
  if (param_2 - 1U < 10000000) {
    if ((*(void **)(this + 0x10) != (void *)0x0) && (this[0x1c] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)(this + 0x10));
    }
    if (param_3) {
      __n = (size_t)param_2;
      uVar1 = __n;
      if ((long)__n < 0) {
        uVar1 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar1);
      *(void **)(this + 0x10) = __dest;
      memcpy(__dest,param_1,__n);
    }
    else {
      *(uchar **)(this + 0x10) = param_1;
    }
    uVar2 = 1;
    this[0x1c] = (MDTHelper)param_3;
    *(int *)(this + 0x18) = param_2;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 00175710 (164 bytes) name=setVisible

/* MDTHelper::setVisible(unsigned char*, int, bool) */

undefined8 __thiscall MDTHelper::setVisible(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  ulong uVar1;
  void *__dest;
  undefined8 uVar2;
  size_t __n;
  
  if (param_2 - 1U < 10000000) {
    if ((*(void **)(this + 0x20) != (void *)0x0) && (this[0x2c] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)(this + 0x20));
    }
    if (param_3) {
      __n = (size_t)param_2;
      uVar1 = __n;
      if ((long)__n < 0) {
        uVar1 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar1);
      *(void **)(this + 0x20) = __dest;
      memcpy(__dest,param_1,__n);
    }
    else {
      *(uchar **)(this + 0x20) = param_1;
    }
    uVar2 = 1;
    this[0x2c] = (MDTHelper)param_3;
    *(int *)(this + 0x28) = param_2;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 001757b4 (180 bytes) name=setLabel

/* MDTHelper::setLabel(ROI*, int, bool) */

undefined8 __thiscall MDTHelper::setLabel(MDTHelper *this,ROI *param_1,int param_2,bool param_3)

{
  uint uVar1;
  ulong uVar2;
  void *__dest;
  undefined8 uVar3;
  
  uVar1 = param_2 + 0xff;
  if (-1 < param_2) {
    uVar1 = param_2;
  }
  uVar1 = uVar1 & 0xffffff00;
  if (uVar1 - 1 < 10000000) {
    if ((*(void **)(this + 0x30) != (void *)0x0) && (this[0x3c] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)(this + 0x30));
    }
    if (param_3) {
      uVar2 = (long)(int)uVar1;
      if (param_2 < -0xff) {
        uVar2 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar2);
      *(void **)(this + 0x30) = __dest;
      memcpy(__dest,param_1,(long)(int)uVar1);
    }
    else {
      *(ROI **)(this + 0x30) = param_1;
    }
    uVar3 = 1;
    this[0x3c] = (MDTHelper)param_3;
    *(uint *)(this + 0x38) = uVar1;
  }
  else {
    uVar3 = 0;
  }
  return uVar3;
}


==================================================================

### FUNC 00175868 (164 bytes) name=setText

/* MDTHelper::setText(unsigned char*, int, bool) */

undefined8 __thiscall MDTHelper::setText(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  ulong uVar1;
  void *__dest;
  undefined8 uVar2;
  size_t __n;
  
  if (param_2 - 1U < 10000000) {
    if ((*(void **)(this + 0x40) != (void *)0x0) && (this[0x4c] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)(this + 0x40));
    }
    if (param_3) {
      __n = (size_t)param_2;
      uVar1 = __n;
      if ((long)__n < 0) {
        uVar1 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar1);
      *(void **)(this + 0x40) = __dest;
      memcpy(__dest,param_1,__n);
    }
    else {
      *(uchar **)(this + 0x40) = param_1;
    }
    uVar2 = 1;
    this[0x4c] = (MDTHelper)param_3;
    *(int *)(this + 0x48) = param_2;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 0017590c (164 bytes) name=setAudio

/* MDTHelper::setAudio(unsigned char*, int, bool) */

undefined8 __thiscall MDTHelper::setAudio(MDTHelper *this,uchar *param_1,int param_2,bool param_3)

{
  ulong uVar1;
  void *__dest;
  undefined8 uVar2;
  size_t __n;
  
  if (param_2 - 1U < 10000000) {
    if ((*(void **)(this + 0x50) != (void *)0x0) && (this[0x5c] != (MDTHelper)0x0)) {
      operator_delete__(*(void **)(this + 0x50));
    }
    if (param_3) {
      __n = (size_t)param_2;
      uVar1 = __n;
      if ((long)__n < 0) {
        uVar1 = 0xffffffffffffffff;
      }
      __dest = operator_new__(uVar1);
      *(void **)(this + 0x50) = __dest;
      memcpy(__dest,param_1,__n);
    }
    else {
      *(uchar **)(this + 0x50) = param_1;
    }
    uVar2 = 1;
    this[0x5c] = (MDTHelper)param_3;
    *(int *)(this + 0x58) = param_2;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 001759b0 (28 bytes) name=getJpg

/* MDTHelper::getJpg(unsigned char**) */

undefined4 __thiscall MDTHelper::getJpg(MDTHelper *this,uchar **param_1)

{
  if (param_1 != (uchar **)0x0) {
    *param_1 = *(uchar **)this;
    return *(undefined4 *)(this + 8);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 001759cc (28 bytes) name=getDDT

/* MDTHelper::getDDT(unsigned char**) */

undefined4 __thiscall MDTHelper::getDDT(MDTHelper *this,uchar **param_1)

{
  if (param_1 != (uchar **)0x0) {
    *param_1 = *(uchar **)(this + 0x10);
    return *(undefined4 *)(this + 0x18);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 001759e8 (28 bytes) name=getVisible

/* MDTHelper::getVisible(unsigned char**) */

undefined4 __thiscall MDTHelper::getVisible(MDTHelper *this,uchar **param_1)

{
  if (param_1 != (uchar **)0x0) {
    *param_1 = *(uchar **)(this + 0x20);
    return *(undefined4 *)(this + 0x28);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 00175a04 (28 bytes) name=getLabel

/* MDTHelper::getLabel(ROI**) */

undefined4 __thiscall MDTHelper::getLabel(MDTHelper *this,ROI **param_1)

{
  if (param_1 != (ROI **)0x0) {
    *param_1 = *(ROI **)(this + 0x30);
    return *(undefined4 *)(this + 0x38);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 00175a20 (28 bytes) name=getText

/* MDTHelper::getText(unsigned char**) */

undefined4 __thiscall MDTHelper::getText(MDTHelper *this,uchar **param_1)

{
  if (param_1 != (uchar **)0x0) {
    *param_1 = *(uchar **)(this + 0x40);
    return *(undefined4 *)(this + 0x48);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 00175a3c (28 bytes) name=getAudio

/* MDTHelper::getAudio(unsigned char**) */

undefined4 __thiscall MDTHelper::getAudio(MDTHelper *this,uchar **param_1)

{
  if (param_1 != (uchar **)0x0) {
    *param_1 = *(uchar **)(this + 0x50);
    return *(undefined4 *)(this + 0x58);
  }
  return 0xffffffff;
}


==================================================================

### FUNC 00175a58 (88 bytes) name=MStream

/* MStream::MStream(unsigned long) */

void __thiscall MStream::MStream(MStream *this,ulong param_1)

{
  void *pvVar1;
  undefined8 *puVar2;
  
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(ulong *)this = param_1;
  if (param_1 != 0) {
    pvVar1 = operator_new__(param_1);
    *(void **)(this + 8) = pvVar1;
    *(void **)(this + 0x10) = pvVar1;
    return;
  }
  puVar2 = (undefined8 *)__cxa_allocate_exception(8);
  *puVar2 = "ParamError: Invalid array size.[MStream::MStream]";
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar2,PTR_typeinfo_00501c20,0);
}


==================================================================

### FUNC 00175ab0 (116 bytes) name=MStream

/* MStream::MStream(char const*, unsigned long) */

void __thiscall MStream::MStream(MStream *this,char *param_1,ulong param_2)

{
  ulong uVar1;
  size_t sVar2;
  void *__dest;
  
  if (param_2 == 0) {
    sVar2 = strlen(param_1);
    param_2 = sVar2 + 1;
  }
  uVar1 = param_2 + 1;
  *(ulong *)this = uVar1;
  __dest = operator_new__(uVar1);
  *(void **)(this + 8) = __dest;
  memcpy(__dest,param_1,param_2);
  *(undefined1 *)((long)__dest + param_2) = 0;
  *(ulong *)(this + 0x10) = (long)__dest + uVar1;
  return;
}


==================================================================

### FUNC 00175b24 (100 bytes) name=MStream

/* MStream::MStream(std::string const&) */

void __thiscall MStream::MStream(MStream *this,string *param_1)

{
  ulong uVar1;
  void *__dest;
  void *__src;
  size_t __n;
  
  __src = *(void **)param_1;
  __n = *(size_t *)((long)__src + -0x18);
  uVar1 = __n + 1;
  *(ulong *)this = uVar1;
  __dest = operator_new__(uVar1);
  *(void **)(this + 8) = __dest;
  memcpy(__dest,__src,__n);
  *(undefined1 *)((long)__dest + __n) = 0;
  *(ulong *)(this + 0x10) = (long)__dest + uVar1;
  return;
}


==================================================================

### FUNC 00175b88 (20 bytes) name=MStream

/* MStream::MStream(MStream const&) */

void __thiscall MStream::MStream(MStream *this,MStream *param_1)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)this = uVar1;
  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
  return;
}


==================================================================

### FUNC 00175b9c (64 bytes) name=operator=

/* MStream::TEMPNAMEPLACEHOLDERVALUE(MStream const&) */

void __thiscall MStream::operator=(MStream *this,MStream *param_1)

{
  void *pvVar1;
  
  *(undefined8 *)this = *(undefined8 *)param_1;
  pvVar1 = (void *)0x0;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    pvVar1 = operator_new__(*(ulong *)this);
    *(void **)(this + 8) = pvVar1;
  }
  *(void **)(this + 0x10) = pvVar1;
  return;
}


==================================================================

### FUNC 00175bdc (16 bytes) name=~MStream

/* MStream::~MStream() */

void __thiscall MStream::~MStream(MStream *this)

{
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    return;
  }
  return;
}


==================================================================

### FUNC 00175bec (456 bytes) name=Split

/* MStream::Split(char) */

void MStream::Split(char param_1)

{
  ulong uVar1;
  ulong *puVar2;
  long lVar3;
  ulong uVar4;
  void *pvVar5;
  char in_w1;
  vector<MStream,std::allocator<MStream>> *in_x8;
  char *pcVar6;
  ulong *puVar7;
  char *__s;
  size_t sVar8;
  char *pcVar9;
  ulong local_98;
  void *local_90;
  ulong local_88;
  ulong local_80;
  void *local_78;
  ulong local_70;
  long local_68;
  
  uVar4 = (ulong)(byte)param_1;
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined8 *)in_x8 = 0;
  __s = *(char **)(uVar4 + 8);
  pcVar6 = *(char **)(uVar4 + 0x10);
  pcVar9 = __s;
  if (__s < pcVar6) {
    do {
      while (*pcVar9 == in_w1) {
        sVar8 = (long)pcVar9 - (long)__s;
        if (sVar8 == 0) {
          sVar8 = strlen(__s);
          sVar8 = sVar8 + 1;
        }
        uVar1 = sVar8 + 1;
        local_80 = uVar1;
        pvVar5 = operator_new__(uVar1);
        local_78 = pvVar5;
        memcpy(pvVar5,__s,sVar8);
        puVar7 = *(ulong **)(in_x8 + 8);
        puVar2 = *(ulong **)(in_x8 + 0x10);
        local_70 = (long)pvVar5 + uVar1;
        *(undefined1 *)((long)pvVar5 + sVar8) = 0;
        if (puVar7 == puVar2) {
          std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
                    (in_x8,(MStream *)&local_80);
        }
        else {
          *puVar7 = uVar1;
          puVar7[1] = (ulong)pvVar5;
          puVar7[2] = local_70;
          *(ulong **)(in_x8 + 8) = puVar7 + 3;
        }
        __s = pcVar9 + 1;
        if (local_78 != (void *)0x0) {
          operator_delete__(local_78);
        }
        pcVar6 = *(char **)(uVar4 + 0x10);
        pcVar9 = __s;
        if (pcVar6 <= __s) goto LAB_00175cf8;
      }
      pcVar9 = pcVar9 + 1;
    } while (pcVar9 < pcVar6);
  }
LAB_00175cf8:
  sVar8 = (long)pcVar9 - (long)__s;
  if (1 < (long)sVar8) {
    uVar4 = sVar8 + 1;
    local_98 = uVar4;
    pvVar5 = operator_new__(uVar4);
    local_90 = pvVar5;
    memcpy(pvVar5,__s,sVar8);
    local_88 = (long)pvVar5 + uVar4;
    *(undefined1 *)((long)pvVar5 + sVar8) = 0;
    puVar7 = *(ulong **)(in_x8 + 8);
    if (puVar7 == *(ulong **)(in_x8 + 0x10)) {
      std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
                (in_x8,(MStream *)&local_98);
    }
    else {
      puVar7[2] = local_88;
      *puVar7 = uVar4;
      puVar7[1] = (ulong)pvVar5;
      *(ulong **)(in_x8 + 8) = puVar7 + 3;
    }
    if (local_90 != (void *)0x0) {
      operator_delete__(local_90);
    }
  }
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00175e2c (548 bytes) name=Split

/* MStream::Split(char const*) */

void MStream::Split(char *param_1)

{
  ulong uVar1;
  ulong *puVar2;
  long lVar3;
  size_t sVar4;
  void *pvVar5;
  char *in_x1;
  vector<MStream,std::allocator<MStream>> *in_x8;
  ulong *puVar6;
  char *__s;
  char *pcVar7;
  char *pcVar8;
  ulong local_98;
  void *local_90;
  ulong local_88;
  ulong local_80;
  void *local_78;
  ulong local_70;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  sVar4 = strlen(in_x1);
  if ((int)sVar4 == 2) {
    *(undefined8 *)(in_x8 + 8) = 0;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)in_x8 = 0;
    __s = *(char **)(param_1 + 8);
    pcVar8 = (char *)(*(long *)(param_1 + 0x10) + -1);
    if (__s < pcVar8) {
      do {
        pcVar7 = __s;
        while ((*in_x1 != *pcVar7 || (in_x1[1] != pcVar7[1]))) {
          pcVar7 = pcVar7 + 1;
          if (pcVar8 <= pcVar7) goto LAB_00175f84;
        }
        sVar4 = (long)pcVar7 - (long)__s;
        if (sVar4 == 0) {
          sVar4 = strlen(__s);
          sVar4 = sVar4 + 1;
        }
        uVar1 = sVar4 + 1;
        local_80 = uVar1;
        pvVar5 = operator_new__(uVar1);
        local_78 = pvVar5;
        memcpy(pvVar5,__s,sVar4);
        puVar6 = *(ulong **)(in_x8 + 8);
        puVar2 = *(ulong **)(in_x8 + 0x10);
        local_70 = (long)pvVar5 + uVar1;
        *(undefined1 *)((long)pvVar5 + sVar4) = 0;
        if (puVar6 == puVar2) {
          std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
                    (in_x8,(MStream *)&local_80);
        }
        else {
          *puVar6 = uVar1;
          puVar6[1] = (ulong)pvVar5;
          puVar6[2] = local_70;
          *(ulong **)(in_x8 + 8) = puVar6 + 3;
        }
        __s = pcVar7 + 2;
        if (local_78 != (void *)0x0) {
          operator_delete__(local_78);
        }
      } while (__s < pcVar8);
    }
LAB_00175f84:
    sVar4 = *(long *)(param_1 + 0x10) - (long)__s;
    if (1 < (long)sVar4) {
      uVar1 = sVar4 + 1;
      local_98 = uVar1;
      pvVar5 = operator_new__(uVar1);
      local_90 = pvVar5;
      memcpy(pvVar5,__s,sVar4);
      local_88 = (long)pvVar5 + uVar1;
      *(undefined1 *)((long)pvVar5 + sVar4) = 0;
      puVar6 = *(ulong **)(in_x8 + 8);
      if (puVar6 == *(ulong **)(in_x8 + 0x10)) {
        std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
                  (in_x8,(MStream *)&local_98);
      }
      else {
        puVar6[2] = local_88;
        *puVar6 = uVar1;
        puVar6[1] = (ulong)pvVar5;
        *(ulong **)(in_x8 + 8) = puVar6 + 3;
      }
      if (local_90 != (void *)0x0) {
        operator_delete__(local_90);
      }
    }
  }
  else if ((int)sVar4 == 1) {
    Split((char)param_1);
  }
  else {
    *(undefined8 *)(in_x8 + 8) = 0;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)in_x8 = 0;
  }
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001760e0 (196 bytes) name=hex2str

/* hex2str(unsigned long, char*) */

char * hex2str(ulong param_1,char *param_2)

{
  long lVar1;
  char cVar2;
  ulong uVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  ulong uVar8;
  long lVar9;
  
  uVar3 = 0;
  do {
    uVar8 = param_1 & 0xf;
    param_1 = param_1 >> 4;
    param_2[uVar3] = "FEDCBA9876543210123456789ABCDEF"[uVar8 + 0xf];
    uVar3 = uVar3 + 1;
  } while (param_1 != 0);
  pcVar6 = param_2 + uVar3;
  if (uVar3 < 0x10) {
    lVar9 = 0;
    do {
      lVar1 = uVar3 + lVar9;
      param_2[uVar3 + lVar9] = '0';
      lVar9 = lVar9 + 1;
    } while (lVar1 != 0xf);
    pcVar4 = pcVar6 + (0x11 - uVar3);
    pcVar6 = pcVar6 + (0x10 - uVar3);
  }
  else {
    pcVar4 = pcVar6 + 1;
  }
  *pcVar6 = 'x';
  lVar9 = 2 - (long)param_2;
  *pcVar4 = '0';
  if ((pcVar6 + lVar9 != (char *)0x0) && (pcVar4 = pcVar6 + 1, param_2 < pcVar4)) {
    do {
      pcVar7 = param_2 + 1;
      cVar2 = *param_2;
      *param_2 = *pcVar4;
      pcVar5 = pcVar4 + -1;
      *pcVar4 = cVar2;
      pcVar4 = pcVar5;
      param_2 = pcVar7;
    } while (pcVar7 < pcVar5);
  }
  return pcVar6 + lVar9;
}


==================================================================

### FUNC 001761a4 (20 bytes) name=Available

/* MStream::Available() const */

long __thiscall MStream::Available(MStream *this)

{
  return (*(long *)this - *(long *)(this + 0x10)) + *(long *)(this + 8);
}


==================================================================

### FUNC 001761b8 (200 bytes) name=Fmt

/* MStream::Fmt(char const*, ...) */

void MStream::Fmt(char *param_1,...)

{
  long lVar1;
  int iVar2;
  char *in_x1;
  undefined8 in_x2;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar3;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined1 *local_80;
  undefined1 **ppuStack_78;
  undefined8 *puStack_70;
  undefined8 uStack_68;
  
  lVar1 = tpidr_el0;
  lVar3 = *(long *)(lVar1 + 0x28);
  puStack_70 = &local_b0;
  ppuStack_78 = &local_80;
  uStack_68 = 0xffffff80ffffffd0;
  local_b0 = in_x2;
  uStack_a8 = in_x3;
  local_a0 = in_x4;
  uStack_98 = in_x5;
  local_90 = in_x6;
  uStack_88 = in_x7;
  local_80 = (undefined1 *)register0x00000008;
  iVar2 = vsnprintf(*(char **)(param_1 + 0x10),
                    (*(long *)param_1 - (long)*(char **)(param_1 + 0x10)) + *(long *)(param_1 + 8),
                    in_x1,&local_80);
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 0x10) + (long)iVar2;
  if (*(long *)(lVar1 + 0x28) == lVar3) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00176280 (8 bytes) name=Get

/* MStream::Get() */

undefined8 __thiscall MStream::Get(MStream *this)

{
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 00176288 (8 bytes) name=Get

/* MStream::Get() const */

undefined8 __thiscall MStream::Get(MStream *this)

{
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 00176290 (16 bytes) name=Write

/* MStream::Write(OFStream const&) const */

void __thiscall MStream::Write(MStream *this,OFStream *param_1)

{
  OFStream::Write(param_1,*(char **)(this + 8));
  return;
}


==================================================================

### FUNC 001762a0 (32 bytes) name=Write

/* MStream::Write(__sFILE*) const */

bool __thiscall MStream::Write(MStream *this,__sFILE *param_1)

{
  int iVar1;
  
  iVar1 = fputs(*(char **)(this + 8),(FILE *)param_1);
  return iVar1 == 0;
}


==================================================================

### FUNC 001762c0 (84 bytes) name=Puts

/* MStream::Puts(char const*, unsigned long) */

void __thiscall MStream::Puts(MStream *this,char *param_1,ulong param_2)

{
  long lVar1;
  
  if (param_2 + 1 < (ulong)((*(long *)this - (long)*(void **)(this + 0x10)) + *(long *)(this + 8)))
  {
    memcpy(*(void **)(this + 0x10),param_1,param_2);
    lVar1 = *(long *)(this + 0x10);
    *(ulong *)(this + 0x10) = lVar1 + param_2;
    *(undefined1 *)(lVar1 + param_2) = 0;
  }
  return;
}


==================================================================

### FUNC 00176314 (112 bytes) name=Puts

/* MStream::Puts(char const*) */

void __thiscall MStream::Puts(MStream *this,char *param_1)

{
  size_t sVar1;
  long lVar2;
  
  sVar1 = strlen(param_1);
  sVar1 = (size_t)(int)sVar1;
  if (sVar1 + 1 < (ulong)((*(long *)this - (long)*(void **)(this + 0x10)) + *(long *)(this + 8))) {
    memcpy(*(void **)(this + 0x10),param_1,sVar1);
    lVar2 = *(long *)(this + 0x10);
    *(size_t *)(this + 0x10) = lVar2 + sVar1;
    *(undefined1 *)(lVar2 + sVar1) = 0;
  }
  return;
}


==================================================================

### FUNC 00176384 (12 bytes) name=Reset

/* MStream::Reset() */

void __thiscall MStream::Reset(MStream *this)

{
  *(undefined8 *)(this + 0x10) = *(undefined8 *)(this + 8);
  return;
}


==================================================================

### FUNC 00176390 (16 bytes) name=Empty

/* MStream::Empty() const */

bool __thiscall MStream::Empty(MStream *this)

{
  return *(long *)(this + 0x10) == *(long *)(this + 8);
}


==================================================================

### FUNC 001763a0 (116 bytes) name=operator<<

/* MStream::TEMPNAMEPLACEHOLDERVALUE(char const*) */

MStream * __thiscall MStream::operator<<(MStream *this,char *param_1)

{
  size_t sVar1;
  long lVar2;
  
  sVar1 = strlen(param_1);
  sVar1 = (size_t)(int)sVar1;
  if (sVar1 + 1 < (ulong)((*(long *)this - (long)*(void **)(this + 0x10)) + *(long *)(this + 8))) {
    memcpy(*(void **)(this + 0x10),param_1,sVar1);
    lVar2 = *(long *)(this + 0x10);
    *(size_t *)(this + 0x10) = lVar2 + sVar1;
    *(undefined1 *)(lVar2 + sVar1) = 0;
  }
  return this;
}


==================================================================

### FUNC 00176414 (48 bytes) name=operator<<

/* MStream::TEMPNAMEPLACEHOLDERVALUE(char) */

void __thiscall MStream::operator<<(MStream *this,char param_1)

{
  long lVar1;
  
  if (2 < (ulong)((*(long *)this - (long)*(char **)(this + 0x10)) + *(long *)(this + 8))) {
    **(char **)(this + 0x10) = param_1;
    lVar1 = *(long *)(this + 0x10);
    *(long *)(this + 0x10) = lVar1 + 1;
    *(undefined1 *)(lVar1 + 1) = 0;
  }
  return;
}


==================================================================

### FUNC 00176444 (544 bytes) name=_M_emplace_back_aux<MStream_const&>

/* void std::vector<MStream, std::allocator<MStream> >::_M_emplace_back_aux<MStream const&>(MStream
   const&) */

void __thiscall
std::vector<MStream,std::allocator<MStream>>::_M_emplace_back_aux<MStream_const&>
          (vector<MStream,std::allocator<MStream>> *this,MStream *param_1)

{
  undefined8 *puVar1;
  ulong uVar2;
  ulong uVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  uVar6 = (*(long *)(this + 8) - *(long *)this >> 3) * -0x5555555555555555;
  uVar3 = uVar6;
  if (*(long *)(this + 8) - *(long *)this == 0) {
    uVar3 = 1;
  }
  uVar2 = 0xaaaaaaaaaaaaaaa;
  if (!CARRY8(uVar3,uVar6) && uVar3 + uVar6 < 0xaaaaaaaaaaaaaab) {
    uVar2 = uVar3 + uVar6;
  }
  if (0xaaaaaaaaaaaaaaa < uVar2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f0e4();
  }
  puVar5 = operator_new(uVar2 * 0x18);
  puVar11 = *(undefined8 **)this;
  puVar4 = *(undefined8 **)(this + 8);
  uVar12 = *(undefined8 *)param_1;
  puVar9 = (undefined8 *)((long)puVar5 + ((long)puVar4 - (long)puVar11));
  puVar9[1] = *(undefined8 *)(param_1 + 8);
  *puVar9 = uVar12;
  puVar9[2] = *(undefined8 *)(param_1 + 0x10);
  if (puVar11 == puVar4) {
    puVar9 = puVar5 + 3;
    goto joined_r0x00176658;
  }
  uVar6 = ((long)puVar4 - (long)puVar11) - 0x18;
  uVar3 = uVar6 / 0x18 + 1;
  puVar10 = puVar11;
  puVar9 = puVar5;
  if ((uVar3 < 4) || (uVar7 = uVar3 & 0x1ffffffffffffffc, uVar7 == 0)) {
LAB_001765dc:
    puVar8 = puVar9 + -3;
    do {
      uVar12 = *puVar10;
      puVar9 = puVar8 + 3;
      puVar8[4] = puVar10[1];
      *puVar9 = uVar12;
      puVar1 = puVar10 + 2;
      puVar10 = puVar10 + 3;
      puVar8[5] = *puVar1;
      puVar8 = puVar9;
    } while (puVar10 != puVar4);
  }
  else {
    uVar6 = uVar6 / 0x18;
    if ((puVar5 < puVar11 + uVar6 * 3 + 1 && puVar11 < puVar5 + uVar6 * 3 + 1) ||
       (puVar5 + 1 < puVar11 + uVar6 * 3 + 3 && puVar11 + 1 < puVar5 + uVar6 * 3 + 3))
    goto LAB_001765dc;
    uVar6 = uVar7;
    puVar9 = puVar11;
    puVar10 = puVar5;
    do {
      uVar13 = puVar9[1];
      uVar15 = puVar9[2];
      uVar12 = puVar9[3];
      uVar14 = puVar9[4];
      uVar16 = puVar9[5];
      uVar6 = uVar6 - 4;
      uVar17 = puVar9[6];
      uVar19 = puVar9[7];
      uVar21 = puVar9[8];
      uVar18 = puVar9[9];
      uVar20 = puVar9[10];
      uVar22 = puVar9[0xb];
      *puVar10 = *puVar9;
      puVar10[1] = uVar13;
      puVar10[2] = uVar15;
      puVar10[3] = uVar12;
      puVar10[4] = uVar14;
      puVar10[5] = uVar16;
      puVar10[6] = uVar17;
      puVar10[7] = uVar19;
      puVar10[8] = uVar21;
      puVar10[9] = uVar18;
      puVar10[10] = uVar20;
      puVar10[0xb] = uVar22;
      puVar9 = puVar9 + 0xc;
      puVar10 = puVar10 + 0xc;
    } while (uVar6 != 0);
    puVar10 = puVar11 + uVar7 * 3;
    puVar9 = puVar5 + uVar7 * 3;
    if (uVar3 != uVar7) goto LAB_001765dc;
    puVar9 = puVar5 + uVar7 * 3 + -3;
  }
  puVar9 = puVar9 + 6;
  if (puVar11 != puVar4) {
    do {
      if ((void *)puVar11[1] != (void *)0x0) {
        operator_delete__((void *)puVar11[1]);
      }
      puVar11 = puVar11 + 3;
    } while (puVar4 != puVar11);
    puVar11 = *(undefined8 **)this;
  }
joined_r0x00176658:
  if (puVar11 != (undefined8 *)0x0) {
    operator_delete(puVar11);
  }
  *(undefined8 **)this = puVar5;
  *(undefined8 **)(this + 8) = puVar9;
  *(undefined8 **)(this + 0x10) = puVar5 + uVar2 * 3;
  return;
}


==================================================================

### FUNC 00176664 (116 bytes) name=GetTickCount

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* GetTickCount() */

long GetTickCount(void)

{
  long lVar1;
  int iVar2;
  timespec local_38;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  iVar2 = clock_gettime(1,&local_38);
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return local_38.tv_nsec / 1000000 + local_38.tv_sec * 1000;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar2);
}


==================================================================

### FUNC 001766d8 (12 bytes) name=Sleep

/* Sleep(int) */

int Sleep(int param_1)

{
  int iVar1;
  
  iVar1 = usleep(param_1 * 1000);
  return iVar1;
}


==================================================================

### FUNC 001766e4 (156 bytes) name=GetLocalTime

/* GetLocalTime(_SYSTEMTIME*) */

void GetLocalTime(_SYSTEMTIME *param_1)

{
  int iVar1;
  long lVar2;
  tm *ptVar3;
  time_t tStack_30;
  long local_28;
  
  lVar2 = tpidr_el0;
  local_28 = *(long *)(lVar2 + 0x28);
  time(&tStack_30);
  ptVar3 = localtime(&tStack_30);
  *(short *)param_1 = (short)ptVar3->tm_year + 0x76c;
  *(short *)(param_1 + 2) = (short)ptVar3->tm_mon + 1;
  *(short *)(param_1 + 4) = (short)ptVar3->tm_wday;
  *(short *)(param_1 + 6) = (short)ptVar3->tm_mday;
  *(short *)(param_1 + 8) = (short)ptVar3->tm_hour;
  *(short *)(param_1 + 10) = (short)ptVar3->tm_min;
  iVar1 = ptVar3->tm_sec;
  *(undefined2 *)(param_1 + 0xe) = 400;
  *(short *)(param_1 + 0xc) = (short)iVar1;
  if (*(long *)(lVar2 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00176780 (3224 bytes) name=GetOffset

/* GetOffset(char const*, unsigned short*, int, int, int*, int*) */

void GetOffset(char *param_1,ushort *param_2,int param_3,int param_4,int *param_5,int *param_6)

{
  ushort *puVar1;
  IFStream *pIVar2;
  int *piVar3;
  int *piVar4;
  ushort *puVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  long lVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  ushort *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  ushort *puVar16;
  ushort *puVar17;
  ushort *puVar18;
  ushort *puVar19;
  ushort *puVar20;
  ulong uVar21;
  IFStream *pIVar22;
  int *piVar23;
  ushort *puVar24;
  undefined4 *puVar25;
  int *piVar26;
  int *piVar27;
  int *piVar28;
  IFStream *pIVar29;
  ulong uVar30;
  ulong uVar31;
  ushort *puVar32;
  ushort *puVar33;
  ulong uVar34;
  ushort *puVar35;
  ulong uVar36;
  ushort *puVar37;
  long lVar38;
  long lVar39;
  ushort *puVar40;
  ulong uVar41;
  ushort *puVar42;
  long lVar43;
  undefined8 *puVar44;
  long lVar45;
  ushort *puVar46;
  long lVar47;
  long lVar48;
  int iVar49;
  int iVar50;
  int iVar51;
  int iVar52;
  long lVar53;
  int iVar61;
  int iVar62;
  int iVar64;
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  long lVar63;
  int iVar65;
  undefined8 uVar66;
  ushort uVar73;
  int iVar74;
  int iVar76;
  int iVar77;
  undefined1 auVar67 [16];
  undefined1 auVar68 [16];
  undefined1 auVar69 [16];
  ushort uVar72;
  ushort uVar75;
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  int iVar78;
  ushort uVar80;
  ushort uVar81;
  int iVar82;
  undefined8 uVar79;
  ushort uVar83;
  int iVar84;
  int iVar85;
  undefined8 uVar86;
  undefined8 uVar87;
  int iVar88;
  int iVar89;
  int iVar90;
  int iVar91;
  int local_2368 [480];
  IFStream local_1be8 [4];
  IFStream aIStack_1be4 [4];
  undefined8 auStack_1be0 [319];
  int local_11e8 [480];
  int local_a68 [2];
  undefined8 uStack_a60;
  undefined8 auStack_a58 [318];
  long local_68;
  
  lVar10 = tpidr_el0;
  local_68 = *(long *)(lVar10 + 0x28);
  uVar30 = -(ulong)((uint)(param_4 * param_3) >> 0x1f) & 0xfffffffe00000000 |
           (ulong)(uint)(param_4 * param_3) << 1;
  uVar21 = uVar30 * 2;
  if (CARRY8(uVar30,uVar30)) {
    uVar21 = 0xffffffffffffffff;
  }
  DAT_00509668 = param_3;
  DAT_0050966c = param_4;
  puVar20 = operator_new__(uVar21);
  DAT_00509670 = puVar20;
  DAT_00509678 = operator_new__(uVar21);
  DAT_00509680 = operator_new__(uVar21);
  memset(local_a68,0,0x374);
  IFStream::IFStream(local_1be8,param_1);
  FStream::Read((FStream *)local_1be8,local_a68,0x374,1);
  if (((local_a68[0] == 0x374) && ((uint)uStack_a60 == DAT_00509668)) &&
     (uStack_a60._4_4_ == DAT_0050966c)) {
    uVar21 = FStream::Read((FStream *)local_1be8,puVar20,
                           -(ulong)(uStack_a60._4_4_ * (uint)uStack_a60 >> 0x1f) &
                           0xfffffffe00000000 | (ulong)(uStack_a60._4_4_ * (uint)uStack_a60) << 1,1)
    ;
    uVar21 = uVar21 & 0xffffffff;
  }
  else {
    uVar21 = 0;
  }
  OFStream::~OFStream((OFStream *)local_1be8);
  puVar24 = DAT_00509678;
  puVar20 = DAT_00509670;
  iVar7 = DAT_0050966c;
  uVar9 = DAT_00509668;
  lVar48 = (long)(int)DAT_00509668;
  lVar47 = (long)DAT_0050966c;
  if (uVar21 != (long)(int)(DAT_0050966c * DAT_00509668) * 2) {
    if (DAT_00509670 != (ushort *)0x0) {
      operator_delete__(DAT_00509670);
      DAT_00509670 = (ushort *)0x0;
    }
    if (DAT_00509678 != (ushort *)0x0) {
      operator_delete__(DAT_00509678);
      DAT_00509678 = (ushort *)0x0;
    }
    if (DAT_00509680 != (ushort *)0x0) {
      operator_delete__(DAT_00509680);
      DAT_00509680 = (ushort *)0x0;
    }
    puVar25 = (undefined4 *)__errno();
    uVar66 = 0;
    *puVar25 = 0xe4ae0009;
    goto LAB_00177400;
  }
  uVar21 = (ulong)DAT_00509668;
  FUN_00177438(DAT_00509678,DAT_00509670);
  puVar37 = DAT_00509680;
  FUN_00177438(DAT_00509680,param_2);
  iVar8 = iVar7 + -2;
  iVar52 = iVar8 * uVar9;
  iVar49 = iVar52 + -2;
  if (iVar49 != 0) {
    uVar30 = (ulong)(iVar52 - 3);
    puVar33 = puVar24 + lVar48 * 2;
    puVar32 = puVar24 + lVar48;
    puVar35 = puVar20 + lVar48;
    iVar50 = iVar49;
    puVar40 = puVar24;
    if (7 < uVar30 + 1) {
      uVar6 = iVar52 + 6U & 7;
      lVar39 = (uVar30 + 1) - (ulong)uVar6;
      if (lVar39 != 0) {
        puVar42 = puVar20 + lVar48 + 1;
        puVar46 = puVar20 + lVar48 + uVar30 + 2;
        if (((puVar24 + lVar48 + uVar30 + 3 <= puVar42 || puVar46 <= puVar32) &&
            (puVar24 + lVar48 * 2 + uVar30 + 2 <= puVar42 || puVar46 <= puVar24 + (lVar48 * 2 | 1)))
           && (puVar24 + uVar30 + 2 <= puVar42 || puVar46 <= puVar24 + 1)) {
          iVar50 = (int)lVar39;
          puVar42 = puVar20 + 1;
          puVar40 = puVar24 + lVar39;
          puVar33 = puVar33 + lVar39;
          puVar35 = puVar35 + lVar39;
          puVar32 = puVar32 + lVar39;
          puVar46 = puVar24;
          do {
            puVar1 = puVar46 + lVar48 * 2 + 1;
            puVar13 = puVar46 + lVar48 * 2 + 2;
            puVar14 = puVar46 + lVar48 * 2 + 3;
            puVar15 = puVar46 + lVar48 * 2 + 4;
            puVar16 = puVar46 + lVar48 * 2 + 5;
            puVar17 = puVar46 + lVar48 * 2 + 6;
            puVar18 = puVar46 + lVar48 * 2 + 7;
            puVar19 = puVar46 + lVar48 * 2 + 8;
            puVar5 = puVar46 + lVar48;
            auVar55 = *(undefined1 (*) [16])(puVar46 + 1);
            uVar79 = *(undefined8 *)(puVar5 + 4);
            uVar66 = *(undefined8 *)puVar5;
            uVar87 = *(undefined8 *)(puVar5 + 6);
            uVar86 = *(undefined8 *)(puVar5 + 2);
            puVar46 = puVar46 + 8;
            iVar88 = MP_INT_ABS((auVar55._8_4_ & 0xffff) - (uint)*puVar16);
            iVar89 = MP_INT_ABS((uint)auVar55._10_2_ - (uint)*puVar17);
            iVar90 = MP_INT_ABS((uint)auVar55._12_2_ - (uint)*puVar18);
            iVar91 = MP_INT_ABS((uint)auVar55._14_2_ - (uint)*puVar19);
            iVar51 = MP_INT_ABS((uint)auVar55._0_2_ - (uint)*puVar1);
            iVar61 = MP_INT_ABS((uint)auVar55._2_2_ - (uint)*puVar13);
            iVar62 = MP_INT_ABS((uint)auVar55._4_2_ - (uint)*puVar14);
            iVar64 = MP_INT_ABS((uint)auVar55._6_2_ - (uint)*puVar15);
            iVar65 = MP_INT_ABS(((uint)uVar79 & 0xffff) - (uint)(ushort)uVar87);
            iVar74 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x10) -
                                (uint)(ushort)((ulong)uVar87 >> 0x10));
            iVar76 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x20) -
                                (uint)(ushort)((ulong)uVar87 >> 0x20));
            iVar77 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x30) -
                                (uint)(ushort)((ulong)uVar87 >> 0x30));
            iVar78 = MP_INT_ABS(((uint)uVar66 & 0xffff) - ((uint)uVar86 & 0xffff));
            iVar82 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x10) -
                                (uint)(ushort)((ulong)uVar86 >> 0x10));
            iVar84 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x20) -
                                (uint)(ushort)((ulong)uVar86 >> 0x20));
            iVar85 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x30) -
                                (uint)(ushort)((ulong)uVar86 >> 0x30));
            auVar54._0_4_ = iVar78 + iVar51;
            auVar54._4_4_ = iVar82 + iVar61;
            auVar54._8_4_ = iVar84 + iVar62;
            auVar54._12_4_ = iVar85 + iVar64;
            auVar67._0_4_ = iVar65 + iVar88;
            auVar67._4_4_ = iVar74 + iVar89;
            auVar67._8_4_ = iVar76 + iVar90;
            auVar67._12_4_ = iVar77 + iVar91;
            auVar55._8_4_ = 0xffff;
            auVar55._0_8_ = 0xffff0000ffff;
            auVar55._12_4_ = 0xffff;
            auVar55 = NEON_smin(auVar54,auVar55,4);
            auVar68._8_4_ = 0xffff;
            auVar68._0_8_ = 0xffff0000ffff;
            auVar68._12_4_ = 0xffff;
            auVar68 = NEON_smin(auVar67,auVar68,4);
            auVar56._0_8_ =
                 CONCAT26(auVar55._12_2_,
                          CONCAT24(auVar55._8_2_,CONCAT22(auVar55._4_2_,auVar55._0_2_)));
            auVar56._8_2_ = auVar68._0_2_;
            auVar56._10_2_ = auVar68._4_2_;
            auVar56._12_2_ = auVar68._8_2_;
            auVar56._14_2_ = auVar68._12_2_;
            lVar39 = lVar39 + -8;
            *(long *)(puVar42 + lVar48 + 4) = auVar56._8_8_;
            *(undefined8 *)(puVar42 + lVar48) = auVar56._0_8_;
            puVar42 = puVar42 + 8;
          } while (lVar39 != 0);
          iVar50 = iVar49 - iVar50;
          if (uVar6 == 0) goto LAB_00176a9c;
        }
      }
    }
    do {
      puVar35 = puVar35 + 1;
      puVar33 = puVar33 + 1;
      iVar50 = iVar50 + -1;
      iVar61 = (uint)puVar40[1] - (uint)*puVar33;
      iVar51 = -iVar61;
      if (-1 < iVar61) {
        iVar51 = iVar61;
      }
      iVar62 = (uint)*puVar32 - (uint)puVar32[2];
      iVar61 = -iVar62;
      if (-1 < iVar62) {
        iVar61 = iVar62;
      }
      iVar61 = iVar61 + iVar51;
      if (0xfffe < iVar61) {
        iVar61 = 0xffff;
      }
      *puVar35 = (ushort)iVar61;
      puVar32 = puVar32 + 1;
      puVar40 = puVar40 + 1;
    } while (iVar50 != 0);
  }
LAB_00176a9c:
  uVar30 = lVar48 * 2;
  memset(puVar20,0,uVar30);
  lVar39 = lVar47 + -1;
  iVar50 = (int)lVar39 * uVar9;
  memset(puVar20 + iVar50,0,uVar30);
  if (2 < iVar7) {
    lVar38 = lVar39;
    if (lVar39 < 3) {
      lVar38 = 2;
    }
    uVar34 = lVar38 - 1;
    if (((uVar34 < 0x10) || (uVar36 = uVar34 & 0xfffffffffffffff0, uVar36 == 0)) || (uVar9 != 1)) {
      uVar31 = 1;
    }
    else {
      uVar31 = uVar36 | 1;
      iVar51 = 1;
      puVar32 = puVar20 + 9;
      uVar41 = uVar36;
      do {
        puVar32[-4] = 0;
        puVar32[-3] = 0;
        puVar32[-2] = 0;
        puVar32[-1] = 0;
        puVar32[-8] = 0;
        puVar32[-7] = 0;
        puVar32[-6] = 0;
        puVar32[-5] = 0;
        puVar32[4] = 0;
        puVar32[5] = 0;
        puVar32[6] = 0;
        puVar32[7] = 0;
        puVar32[0] = 0;
        puVar32[1] = 0;
        puVar32[2] = 0;
        puVar32[3] = 0;
        puVar33 = puVar20 + iVar51;
        iVar51 = iVar51 + 0x10;
        uVar41 = uVar41 - 0x10;
        puVar32 = puVar32 + 0x10;
        puVar33[4] = 0;
        puVar33[5] = 0;
        puVar33[6] = 0;
        puVar33[7] = 0;
        puVar33[0] = 0;
        puVar33[1] = 0;
        puVar33[2] = 0;
        puVar33[3] = 0;
        puVar33[0xc] = 0;
        puVar33[0xd] = 0;
        puVar33[0xe] = 0;
        puVar33[0xf] = 0;
        puVar33[8] = 0;
        puVar33[9] = 0;
        puVar33[10] = 0;
        puVar33[0xb] = 0;
      } while (uVar41 != 0);
      if (uVar34 == uVar36) goto LAB_00176b78;
    }
    iVar51 = uVar9 + (int)(uVar31 * lVar48) + -1;
    puVar32 = puVar20 + uVar31 * lVar48;
    do {
      uVar31 = uVar31 + 1;
      *puVar32 = 0;
      puVar20[iVar51] = 0;
      iVar51 = iVar51 + uVar9;
      puVar32 = puVar32 + lVar48;
    } while ((long)uVar31 < lVar39);
  }
LAB_00176b78:
  if (iVar49 != 0) {
    puVar33 = puVar37 + lVar48 * 2;
    puVar32 = puVar37 + lVar48;
    puVar35 = param_2 + lVar48;
    uVar34 = (ulong)(iVar52 - 3);
    if (7 < uVar34 + 1) {
      uVar6 = iVar52 + 6U & 7;
      lVar38 = (uVar34 + 1) - (ulong)uVar6;
      if (lVar38 != 0) {
        puVar40 = param_2 + lVar48 + 1;
        puVar42 = param_2 + lVar48 + uVar34 + 2;
        if (((puVar37 + lVar48 + uVar34 + 3 <= puVar40 || puVar42 <= puVar32) &&
            (puVar37 + uVar30 + uVar34 + 2 <= puVar40 || puVar42 <= puVar37 + (uVar30 | 1))) &&
           (puVar37 + uVar34 + 2 <= puVar40 || puVar42 <= puVar37 + 1)) {
          iVar49 = iVar49 - (int)lVar38;
          puVar40 = param_2 + 1;
          puVar42 = puVar37 + lVar38;
          puVar33 = puVar33 + lVar38;
          puVar35 = puVar35 + lVar38;
          puVar32 = puVar32 + lVar38;
          do {
            puVar46 = puVar37 + lVar48 * 2 + 1;
            puVar5 = puVar37 + lVar48 * 2 + 2;
            puVar13 = puVar37 + lVar48 * 2 + 3;
            puVar14 = puVar37 + lVar48 * 2 + 4;
            puVar15 = puVar37 + lVar48 * 2 + 5;
            puVar16 = puVar37 + lVar48 * 2 + 6;
            puVar17 = puVar37 + lVar48 * 2 + 7;
            puVar18 = puVar37 + lVar48 * 2 + 8;
            puVar1 = puVar37 + lVar48;
            auVar55 = *(undefined1 (*) [16])(puVar37 + 1);
            uVar79 = *(undefined8 *)(puVar1 + 4);
            uVar66 = *(undefined8 *)puVar1;
            uVar87 = *(undefined8 *)(puVar1 + 6);
            uVar86 = *(undefined8 *)(puVar1 + 2);
            puVar37 = puVar37 + 8;
            iVar85 = MP_INT_ABS((auVar55._8_4_ & 0xffff) - (uint)*puVar15);
            iVar88 = MP_INT_ABS((uint)auVar55._10_2_ - (uint)*puVar16);
            iVar89 = MP_INT_ABS((uint)auVar55._12_2_ - (uint)*puVar17);
            iVar90 = MP_INT_ABS((uint)auVar55._14_2_ - (uint)*puVar18);
            iVar52 = MP_INT_ABS((uint)auVar55._0_2_ - (uint)*puVar46);
            iVar51 = MP_INT_ABS((uint)auVar55._2_2_ - (uint)*puVar5);
            iVar61 = MP_INT_ABS((uint)auVar55._4_2_ - (uint)*puVar13);
            iVar62 = MP_INT_ABS((uint)auVar55._6_2_ - (uint)*puVar14);
            iVar64 = MP_INT_ABS(((uint)uVar79 & 0xffff) - (uint)(ushort)uVar87);
            iVar65 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x10) -
                                (uint)(ushort)((ulong)uVar87 >> 0x10));
            iVar74 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x20) -
                                (uint)(ushort)((ulong)uVar87 >> 0x20));
            iVar76 = MP_INT_ABS((uint)(ushort)((ulong)uVar79 >> 0x30) -
                                (uint)(ushort)((ulong)uVar87 >> 0x30));
            iVar77 = MP_INT_ABS(((uint)uVar66 & 0xffff) - ((uint)uVar86 & 0xffff));
            iVar78 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x10) -
                                (uint)(ushort)((ulong)uVar86 >> 0x10));
            iVar82 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x20) -
                                (uint)(ushort)((ulong)uVar86 >> 0x20));
            iVar84 = MP_INT_ABS((uint)(ushort)((ulong)uVar66 >> 0x30) -
                                (uint)(ushort)((ulong)uVar86 >> 0x30));
            auVar57._0_4_ = iVar77 + iVar52;
            auVar57._4_4_ = iVar78 + iVar51;
            auVar57._8_4_ = iVar82 + iVar61;
            auVar57._12_4_ = iVar84 + iVar62;
            auVar69._0_4_ = iVar64 + iVar85;
            auVar69._4_4_ = iVar65 + iVar88;
            auVar69._8_4_ = iVar74 + iVar89;
            auVar69._12_4_ = iVar76 + iVar90;
            auVar11._8_4_ = 0xffff;
            auVar11._0_8_ = 0xffff0000ffff;
            auVar11._12_4_ = 0xffff;
            auVar55 = NEON_smin(auVar57,auVar11,4);
            auVar12._8_4_ = 0xffff;
            auVar12._0_8_ = 0xffff0000ffff;
            auVar12._12_4_ = 0xffff;
            auVar68 = NEON_smin(auVar69,auVar12,4);
            auVar58._0_8_ =
                 CONCAT26(auVar55._12_2_,
                          CONCAT24(auVar55._8_2_,CONCAT22(auVar55._4_2_,auVar55._0_2_)));
            auVar58._8_2_ = auVar68._0_2_;
            auVar58._10_2_ = auVar68._4_2_;
            auVar58._12_2_ = auVar68._8_2_;
            auVar58._14_2_ = auVar68._12_2_;
            lVar38 = lVar38 + -8;
            *(long *)(puVar40 + lVar48 + 4) = auVar58._8_8_;
            *(undefined8 *)(puVar40 + lVar48) = auVar58._0_8_;
            puVar40 = puVar40 + 8;
          } while (lVar38 != 0);
          puVar37 = puVar42;
          if (uVar6 == 0) goto LAB_00176d08;
        }
      }
    }
    do {
      puVar35 = puVar35 + 1;
      puVar33 = puVar33 + 1;
      iVar49 = iVar49 + -1;
      iVar51 = (uint)puVar37[1] - (uint)*puVar33;
      iVar52 = -iVar51;
      if (-1 < iVar51) {
        iVar52 = iVar51;
      }
      iVar61 = (uint)*puVar32 - (uint)puVar32[2];
      iVar51 = -iVar61;
      if (-1 < iVar61) {
        iVar51 = iVar61;
      }
      iVar51 = iVar51 + iVar52;
      if (0xfffe < iVar51) {
        iVar51 = 0xffff;
      }
      *puVar35 = (ushort)iVar51;
      puVar32 = puVar32 + 1;
      puVar37 = puVar37 + 1;
    } while (iVar49 != 0);
  }
LAB_00176d08:
  memset(param_2,0,uVar30);
  memset(param_2 + iVar50,0,uVar30);
  if (2 < iVar7) {
    lVar38 = (long)(int)lVar39;
    lVar39 = lVar38;
    if (lVar38 < 3) {
      lVar39 = 2;
    }
    uVar30 = lVar39 - 1;
    if (((uVar30 < 0x10) || (uVar34 = uVar30 & 0xfffffffffffffff0, uVar34 == 0)) || (uVar9 != 1)) {
      uVar36 = 1;
    }
    else {
      uVar36 = uVar34 | 1;
      iVar52 = 1;
      puVar37 = param_2 + 9;
      uVar31 = uVar34;
      do {
        puVar37[-4] = 0;
        puVar37[-3] = 0;
        puVar37[-2] = 0;
        puVar37[-1] = 0;
        puVar37[-8] = 0;
        puVar37[-7] = 0;
        puVar37[-6] = 0;
        puVar37[-5] = 0;
        puVar37[4] = 0;
        puVar37[5] = 0;
        puVar37[6] = 0;
        puVar37[7] = 0;
        puVar37[0] = 0;
        puVar37[1] = 0;
        puVar37[2] = 0;
        puVar37[3] = 0;
        puVar32 = param_2 + iVar52;
        iVar52 = iVar52 + 0x10;
        uVar31 = uVar31 - 0x10;
        puVar37 = puVar37 + 0x10;
        puVar32[4] = 0;
        puVar32[5] = 0;
        puVar32[6] = 0;
        puVar32[7] = 0;
        puVar32[0] = 0;
        puVar32[1] = 0;
        puVar32[2] = 0;
        puVar32[3] = 0;
        puVar32[0xc] = 0;
        puVar32[0xd] = 0;
        puVar32[0xe] = 0;
        puVar32[0xf] = 0;
        puVar32[8] = 0;
        puVar32[9] = 0;
        puVar32[10] = 0;
        puVar32[0xb] = 0;
      } while (uVar31 != 0);
      if (uVar30 == uVar34) goto LAB_00176dd8;
    }
    iVar52 = uVar9 + (int)(uVar36 * lVar48) + -1;
    puVar37 = param_2 + uVar36 * lVar48;
    do {
      uVar36 = uVar36 + 1;
      *puVar37 = 0;
      param_2[iVar52] = 0;
      iVar52 = iVar52 + uVar9;
      puVar37 = puVar37 + lVar48;
    } while ((long)uVar36 < lVar38);
  }
LAB_00176dd8:
  memset(local_a68,0,0xa00);
  memset(local_11e8,0,0x780);
  memset(local_1be8,0,0xa00);
  memset(local_2368,0,0x780);
  if (0 < iVar7) {
    lVar39 = 0;
    lVar48 = (ulong)(uVar9 - 1) + 1;
    lVar38 = uVar21 - (uVar9 & 7);
    puVar37 = puVar20;
    do {
      if ((int)uVar9 < 1) {
        iVar52 = 0;
      }
      else {
        if ((uVar9 < 8) || (lVar38 == 0)) {
          lVar43 = 0;
          iVar52 = 0;
          puVar32 = puVar37;
LAB_00176ed4:
          lVar45 = uVar21 - lVar43;
          piVar26 = local_a68 + lVar43;
          do {
            lVar45 = lVar45 + -1;
            iVar52 = iVar52 + (uint)*puVar32;
            *piVar26 = *piVar26 + (uint)*puVar32;
            puVar32 = puVar32 + 1;
            piVar26 = piVar26 + 1;
          } while (lVar45 != 0);
        }
        else {
          puVar32 = puVar37 + 4;
          iVar52 = 0;
          iVar49 = 0;
          iVar50 = 0;
          iVar51 = 0;
          lVar43 = lVar38;
          puVar44 = auStack_a58;
          auVar55 = ZEXT816(0);
          do {
            uVar66 = *(undefined8 *)(puVar32 + -4);
            uVar79 = *(undefined8 *)puVar32;
            puVar32 = puVar32 + 8;
            lVar43 = lVar43 + -8;
            uVar72 = (ushort)((ulong)uVar66 >> 0x10);
            uVar73 = (ushort)((ulong)uVar66 >> 0x20);
            uVar75 = (ushort)((ulong)uVar66 >> 0x30);
            iVar52 = iVar52 + (uint)(ushort)uVar66;
            iVar49 = iVar49 + (uint)uVar72;
            iVar50 = iVar50 + (uint)uVar73;
            iVar51 = iVar51 + (uint)uVar75;
            uVar80 = (ushort)((ulong)uVar79 >> 0x10);
            uVar81 = (ushort)((ulong)uVar79 >> 0x20);
            uVar83 = (ushort)((ulong)uVar79 >> 0x30);
            auVar59._0_4_ = auVar55._0_4_ + ((uint)uVar79 & 0xffff);
            auVar59._4_4_ = auVar55._4_4_ + (uint)uVar80;
            auVar59._8_4_ = auVar55._8_4_ + (uint)uVar81;
            auVar59._12_4_ = auVar55._12_4_ + (uint)uVar83;
            auVar70._0_8_ =
                 CONCAT44((int)((ulong)puVar44[-2] >> 0x20) + (uint)uVar72,
                          (int)puVar44[-2] + ((uint)uVar66 & 0xffff));
            auVar70._8_4_ = (int)puVar44[-1] + (uint)uVar73;
            auVar70._12_4_ = (int)((ulong)puVar44[-1] >> 0x20) + (uint)uVar75;
            puVar44[-1] = auVar70._8_8_;
            puVar44[-2] = auVar70._0_8_;
            puVar44[1] = CONCAT44((int)((ulong)puVar44[1] >> 0x20) + (uint)uVar83,
                                  (int)puVar44[1] + (uint)uVar81);
            *puVar44 = CONCAT44((int)((ulong)*puVar44 >> 0x20) + (uint)uVar80,
                                (int)*puVar44 + ((uint)uVar79 & 0xffff));
            puVar44 = puVar44 + 4;
            auVar55 = auVar59;
          } while (lVar43 != 0);
          iVar52 = auVar59._0_4_ + iVar52 + auVar59._4_4_ + iVar49 +
                   auVar59._8_4_ + iVar50 + auVar59._12_4_ + iVar51;
          puVar32 = puVar37 + lVar38;
          lVar43 = lVar38;
          if ((uVar9 & 7) != 0) goto LAB_00176ed4;
        }
        puVar37 = puVar37 + lVar48;
      }
      local_11e8[lVar39] = iVar52;
      lVar39 = lVar39 + 1;
    } while (lVar39 != lVar47);
    lVar39 = 0;
    lVar38 = uVar21 - (uVar9 & 7);
    do {
      if ((int)uVar9 < 1) {
        iVar52 = 0;
      }
      else {
        if ((uVar9 < 8) || (lVar38 == 0)) {
          lVar43 = 0;
          iVar52 = 0;
          puVar37 = param_2;
LAB_00176fa8:
          lVar45 = uVar21 - lVar43;
          pIVar22 = local_1be8 + lVar43 * 4;
          do {
            lVar45 = lVar45 + -1;
            iVar52 = iVar52 + (uint)*puVar37;
            *(uint *)pIVar22 = *(int *)pIVar22 + (uint)*puVar37;
            puVar37 = puVar37 + 1;
            pIVar22 = pIVar22 + 4;
          } while (lVar45 != 0);
        }
        else {
          puVar37 = param_2 + 4;
          iVar52 = 0;
          iVar49 = 0;
          iVar50 = 0;
          iVar51 = 0;
          lVar43 = lVar38;
          puVar44 = auStack_1be0 + 1;
          auVar55 = ZEXT816(0);
          do {
            uVar66 = *(undefined8 *)(puVar37 + -4);
            uVar79 = *(undefined8 *)puVar37;
            puVar37 = puVar37 + 8;
            lVar43 = lVar43 + -8;
            uVar72 = (ushort)((ulong)uVar66 >> 0x10);
            uVar73 = (ushort)((ulong)uVar66 >> 0x20);
            uVar75 = (ushort)((ulong)uVar66 >> 0x30);
            iVar52 = iVar52 + (uint)(ushort)uVar66;
            iVar49 = iVar49 + (uint)uVar72;
            iVar50 = iVar50 + (uint)uVar73;
            iVar51 = iVar51 + (uint)uVar75;
            uVar80 = (ushort)((ulong)uVar79 >> 0x10);
            uVar81 = (ushort)((ulong)uVar79 >> 0x20);
            uVar83 = (ushort)((ulong)uVar79 >> 0x30);
            auVar60._0_4_ = auVar55._0_4_ + ((uint)uVar79 & 0xffff);
            auVar60._4_4_ = auVar55._4_4_ + (uint)uVar80;
            auVar60._8_4_ = auVar55._8_4_ + (uint)uVar81;
            auVar60._12_4_ = auVar55._12_4_ + (uint)uVar83;
            auVar71._0_8_ =
                 CONCAT44((int)((ulong)puVar44[-2] >> 0x20) + (uint)uVar72,
                          (int)puVar44[-2] + ((uint)uVar66 & 0xffff));
            auVar71._8_4_ = (int)puVar44[-1] + (uint)uVar73;
            auVar71._12_4_ = (int)((ulong)puVar44[-1] >> 0x20) + (uint)uVar75;
            puVar44[-1] = auVar71._8_8_;
            puVar44[-2] = auVar71._0_8_;
            puVar44[1] = CONCAT44((int)((ulong)puVar44[1] >> 0x20) + (uint)uVar83,
                                  (int)puVar44[1] + (uint)uVar81);
            *puVar44 = CONCAT44((int)((ulong)*puVar44 >> 0x20) + (uint)uVar80,
                                (int)*puVar44 + ((uint)uVar79 & 0xffff));
            puVar44 = puVar44 + 4;
            auVar55 = auVar60;
          } while (lVar43 != 0);
          iVar52 = auVar60._0_4_ + iVar52 + auVar60._4_4_ + iVar49 +
                   auVar60._8_4_ + iVar50 + auVar60._12_4_ + iVar51;
          puVar37 = param_2 + lVar38;
          lVar43 = lVar38;
          if ((uVar9 & 7) != 0) goto LAB_00176fa8;
        }
        param_2 = param_2 + lVar48;
      }
      local_2368[lVar39] = iVar52;
      lVar39 = lVar39 + 1;
    } while (lVar39 != lVar47);
  }
  iVar49 = uVar9 - 2;
  iVar52 = (int)((ulong)((long)iVar49 * 0x55555555) >> 0x20) - iVar49;
  iVar52 = (iVar52 >> 1) - (iVar52 >> 0x1f);
  iVar50 = iVar52 + -1;
  lVar47 = 0;
  if (iVar52 < iVar49 / 3) {
    lVar39 = (long)iVar52;
    lVar38 = lVar47;
    lVar43 = 0x7fffffffffffffff;
    do {
      iVar51 = (int)lVar39;
      iVar52 = -iVar51;
      if (-1 < lVar39) {
        iVar52 = iVar51;
      }
      iVar61 = iVar49 - iVar52;
      if (iVar61 == 0) {
        lVar48 = 0;
      }
      else {
        uVar6 = (uVar9 - 3) - iVar52;
        uVar21 = (ulong)uVar6 + 1;
        piVar26 = local_a68 + 1 + -iVar51;
        pIVar22 = local_1be8 + 4;
        if (-1 < lVar39) {
          piVar26 = local_a68 + 1;
          pIVar22 = local_1be8 + 4 + lVar39 * 4;
        }
        if (uVar21 < 4) {
LAB_00177114:
          lVar48 = 0;
          iVar52 = iVar61;
        }
        else {
          uVar6 = uVar6 + 1 & 3;
          lVar47 = uVar21 - uVar6;
          if (lVar47 == 0) goto LAB_00177114;
          iVar52 = iVar61 - (int)lVar47;
          piVar23 = piVar26 + 2;
          pIVar29 = pIVar22 + 8;
          lVar48 = 0;
          lVar45 = 0;
          pIVar22 = pIVar22 + lVar47 * 4;
          piVar26 = piVar26 + lVar47;
          lVar53 = 0;
          lVar63 = 0;
          do {
            piVar27 = piVar23 + -2;
            uVar66 = *(undefined8 *)piVar23;
            pIVar2 = pIVar29 + -8;
            uVar79 = *(undefined8 *)pIVar29;
            piVar23 = piVar23 + 4;
            lVar47 = lVar47 + -4;
            pIVar29 = pIVar29 + 0x10;
            iVar62 = (int)*(undefined8 *)piVar27 - (int)*(undefined8 *)pIVar2;
            iVar64 = (int)((ulong)*(undefined8 *)piVar27 >> 0x20) -
                     (int)((ulong)*(undefined8 *)pIVar2 >> 0x20);
            iVar65 = (int)uVar66 - (int)uVar79;
            iVar74 = (int)((ulong)uVar66 >> 0x20) - (int)((ulong)uVar79 >> 0x20);
            lVar48 = lVar48 + (long)iVar62 * (long)iVar62;
            lVar45 = lVar45 + (long)iVar64 * (long)iVar64;
            lVar53 = lVar53 + (long)iVar65 * (long)iVar65;
            lVar63 = lVar63 + (long)iVar74 * (long)iVar74;
          } while (lVar47 != 0);
          lVar48 = lVar53 + lVar48 + lVar63 + lVar45;
          if (uVar6 == 0) goto LAB_00177130;
        }
        do {
          iVar52 = iVar52 + -1;
          lVar48 = lVar48 + ((long)*piVar26 - (long)*(int *)pIVar22) *
                            ((long)*piVar26 - (long)*(int *)pIVar22);
          pIVar22 = pIVar22 + 4;
          piVar26 = piVar26 + 1;
        } while (iVar52 != 0);
      }
LAB_00177130:
      lVar47 = 0;
      if ((long)iVar61 != 0) {
        lVar47 = lVar48 / (long)iVar61;
      }
      lVar48 = lVar47;
      if (lVar43 <= lVar47) {
        lVar48 = lVar43;
        iVar51 = iVar50;
      }
      iVar50 = iVar51;
      lVar39 = lVar39 + 1;
      if (lVar47 <= lVar38) {
        lVar47 = lVar38;
      }
      lVar38 = lVar47;
      lVar43 = lVar48;
    } while (lVar39 != iVar49 / 3);
    lVar48 = lVar48 << 1;
  }
  else {
    lVar48 = -2;
  }
  iVar52 = uVar9 + 1;
  if (-1 < iVar49) {
    iVar52 = iVar49;
  }
  if (((iVar50 < -(iVar52 >> 2)) || (iVar52 >> 2 < iVar50)) || (lVar47 < lVar48)) {
LAB_00177354:
    *param_5 = 0;
    *param_6 = 0;
  }
  else {
    *param_5 = iVar50;
    iVar52 = (int)((ulong)((long)iVar8 * 0x55555555) >> 0x20) - iVar8;
    iVar52 = (iVar52 >> 1) - (iVar52 >> 0x1f);
    iVar49 = iVar52 + -1;
    lVar47 = 0;
    if (iVar52 < iVar8 / 3) {
      lVar39 = (long)iVar52;
      lVar38 = lVar47;
      lVar43 = 0x7fffffffffffffff;
      do {
        iVar50 = (int)lVar39;
        iVar52 = -iVar50;
        if (-1 < lVar39) {
          iVar52 = iVar50;
        }
        iVar51 = iVar8 - iVar52;
        if (iVar51 == 0) {
          lVar48 = 0;
        }
        else {
          uVar9 = (iVar7 + -3) - iVar52;
          uVar21 = (ulong)uVar9 + 1;
          piVar23 = local_11e8 + 1 + -iVar50;
          piVar26 = local_2368 + 1;
          if (-1 < lVar39) {
            piVar23 = local_11e8 + 1;
            piVar26 = local_2368 + 1 + lVar39;
          }
          if (uVar21 < 4) {
LAB_001772c8:
            lVar48 = 0;
            iVar52 = iVar51;
          }
          else {
            uVar9 = uVar9 + 1 & 3;
            lVar47 = uVar21 - uVar9;
            if (lVar47 == 0) goto LAB_001772c8;
            iVar52 = iVar51 - (int)lVar47;
            piVar27 = piVar23 + 2;
            piVar28 = piVar26 + 2;
            lVar48 = 0;
            lVar45 = 0;
            piVar26 = piVar26 + lVar47;
            piVar23 = piVar23 + lVar47;
            lVar53 = 0;
            lVar63 = 0;
            do {
              piVar3 = piVar27 + -2;
              uVar66 = *(undefined8 *)piVar27;
              piVar4 = piVar28 + -2;
              uVar79 = *(undefined8 *)piVar28;
              piVar27 = piVar27 + 4;
              lVar47 = lVar47 + -4;
              piVar28 = piVar28 + 4;
              iVar61 = (int)*(undefined8 *)piVar3 - (int)*(undefined8 *)piVar4;
              iVar62 = (int)((ulong)*(undefined8 *)piVar3 >> 0x20) -
                       (int)((ulong)*(undefined8 *)piVar4 >> 0x20);
              iVar64 = (int)uVar66 - (int)uVar79;
              iVar65 = (int)((ulong)uVar66 >> 0x20) - (int)((ulong)uVar79 >> 0x20);
              lVar48 = lVar48 + (long)iVar61 * (long)iVar61;
              lVar45 = lVar45 + (long)iVar62 * (long)iVar62;
              lVar53 = lVar53 + (long)iVar64 * (long)iVar64;
              lVar63 = lVar63 + (long)iVar65 * (long)iVar65;
            } while (lVar47 != 0);
            lVar48 = lVar53 + lVar48 + lVar63 + lVar45;
            if (uVar9 == 0) goto LAB_001772e4;
          }
          do {
            iVar52 = iVar52 + -1;
            lVar48 = lVar48 + ((long)*piVar23 - (long)*piVar26) * ((long)*piVar23 - (long)*piVar26);
            piVar23 = piVar23 + 1;
            piVar26 = piVar26 + 1;
          } while (iVar52 != 0);
        }
LAB_001772e4:
        lVar47 = 0;
        if ((long)iVar51 != 0) {
          lVar47 = lVar48 / (long)iVar51;
        }
        lVar48 = lVar47;
        if (lVar43 <= lVar47) {
          lVar48 = lVar43;
          iVar50 = iVar49;
        }
        iVar49 = iVar50;
        lVar39 = lVar39 + 1;
        if (lVar47 <= lVar38) {
          lVar47 = lVar38;
        }
        lVar38 = lVar47;
        lVar43 = lVar48;
      } while (lVar39 != iVar8 / 3);
      lVar48 = lVar48 << 1;
    }
    else {
      lVar48 = -2;
    }
    iVar7 = iVar7 + 1;
    if (-1 < iVar8) {
      iVar7 = iVar8;
    }
    if (((iVar49 < -(iVar7 >> 2)) || (iVar7 >> 2 < iVar49)) || (lVar47 < lVar48)) goto LAB_00177354;
    *param_6 = iVar49;
  }
  if (puVar20 != (ushort *)0x0) {
    operator_delete__(puVar20);
    DAT_00509670 = (ushort *)0x0;
    puVar24 = DAT_00509678;
  }
  if (puVar24 != (ushort *)0x0) {
    operator_delete__(puVar24);
    DAT_00509678 = (ushort *)0x0;
  }
  if (DAT_00509680 != (ushort *)0x0) {
    operator_delete__(DAT_00509680);
    DAT_00509680 = (ushort *)0x0;
  }
  uVar66 = 1;
LAB_00177400:
  if (*(long *)(lVar10 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar66);
  }
  return;
}


==================================================================

### FUNC 00177438 (520 bytes) name=FUN_00177438

void FUN_00177438(void *param_1,ushort *param_2)

{
  int iVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  ulong uVar12;
  int iVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  size_t __n;
  long lVar17;
  long lVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  
  iVar7 = DAT_0050966c;
  iVar6 = DAT_00509668;
  lVar18 = (long)DAT_0050966c;
  lVar17 = (long)DAT_00509668;
  iVar4 = (DAT_0050966c + -2) * DAT_00509668;
  __n = lVar17 * 2;
  if (iVar4 != 2) {
    lVar8 = 0;
    iVar1 = (uint)param_2[lVar17 + 1] + (uint)param_2[1] + (uint)param_2[lVar17 * 2 + 1];
    iVar13 = (uint)param_2[lVar17] + (uint)*param_2 + (uint)param_2[lVar17 * 2];
    do {
      iVar14 = iVar1;
      lVar16 = lVar8 * 2;
      iVar1 = (uint)param_2[lVar17 + lVar8 + 2] + (uint)param_2[lVar8 + 2] +
              (uint)param_2[lVar17 * 2 + lVar8 + 2];
      lVar8 = lVar8 + 1;
      *(short *)((long)param_1 + lVar16 + __n + 2) = (short)((uint)(iVar14 + iVar13 + iVar1) / 9);
      iVar13 = iVar14;
    } while (iVar4 + -2 != (int)lVar8);
  }
  memcpy(param_1,param_2,__n);
  lVar18 = lVar18 + -1;
  uVar5 = (int)lVar18 * iVar6;
  uVar9 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
  memcpy((void *)((long)param_1 + uVar9),(void *)((long)param_2 + uVar9),__n);
  if (iVar7 < 3) {
    return;
  }
  lVar8 = lVar18;
  if (lVar18 < 3) {
    lVar8 = 2;
  }
  uVar9 = lVar8 - 1;
  if (0xf < uVar9) {
    uVar11 = uVar9 & 0xfffffffffffffff0;
    uVar10 = 1;
    if ((uVar11 == 0) || (iVar6 != 1)) goto LAB_00177554;
    lVar8 = lVar18;
    if (lVar18 < 3) {
      lVar8 = 2;
    }
    if ((param_2 + lVar8 <= (ushort *)((long)param_1 + 2U)) ||
       ((ushort *)((long)param_1 + lVar8 * 2) <= param_2 + 1)) {
      uVar10 = uVar11 | 1;
      uVar5 = 1;
      lVar8 = 2;
      uVar12 = uVar11;
      do {
        puVar2 = (undefined8 *)((long)param_2 + lVar8);
        uVar19 = *puVar2;
        uVar21 = puVar2[3];
        uVar20 = puVar2[2];
        puVar3 = (undefined8 *)((long)param_1 + lVar8);
        uVar15 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
        uVar5 = uVar5 + 0x10;
        puVar3[1] = puVar2[1];
        *puVar3 = uVar19;
        puVar3[3] = uVar21;
        puVar3[2] = uVar20;
        puVar2 = (undefined8 *)((long)param_2 + uVar15);
        uVar19 = *puVar2;
        uVar21 = puVar2[3];
        uVar20 = puVar2[2];
        uVar12 = uVar12 - 0x10;
        puVar3 = (undefined8 *)((long)param_1 + uVar15);
        lVar8 = lVar8 + 0x20;
        puVar3[1] = puVar2[1];
        *puVar3 = uVar19;
        puVar3[3] = uVar21;
        puVar3[2] = uVar20;
      } while (uVar12 != 0);
      if (uVar9 == uVar11) {
        return;
      }
      goto LAB_00177554;
    }
  }
  uVar10 = 1;
LAB_00177554:
  uVar5 = (iVar6 + (int)(uVar10 * lVar17)) - 1;
  lVar17 = uVar10 * lVar17 * 2;
  do {
    uVar9 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
    uVar10 = uVar10 + 1;
    uVar5 = uVar5 + iVar6;
    *(undefined2 *)((long)param_1 + lVar17) = *(undefined2 *)((long)param_2 + lVar17);
    lVar17 = lVar17 + __n;
    *(undefined2 *)((long)param_1 + uVar9) = *(undefined2 *)((long)param_2 + uVar9);
  } while ((long)uVar10 < lVar18);
  return;
}


==================================================================

### FUNC 00177640 (272 bytes) name=CNetComm

/* CNetComm::CNetComm() */

void __thiscall CNetComm::CNetComm(CNetComm *this)

{
  *(undefined **)this = PTR_vtable_00501fb8 + 0x10;
  MutexLock::MutexLock((MutexLock *)(this + 0x88));
  MutexLock::MutexLock((MutexLock *)(this + 0xb0));
  MutexLock::MutexLock((MutexLock *)(this + 0xd8));
  Condition::Condition((Condition *)(this + 0x100));
  Condition::Condition((Condition *)(this + 0x15c));
  MutexLock::MutexLock((MutexLock *)(this + 0x1b8));
  MutexLock::MutexLock((MutexLock *)(this + 0xabc));
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x7c) = 0;
  *(undefined4 *)(this + 0x80) = 0;
  *(undefined4 *)(this + 0x84) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x68) = 0;
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined4 *)(this + 0x28) = 0;
  *(undefined4 *)(this + 0x2c) = 0;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined4 *)(this + 0x1e0) = 0;
  *(undefined4 *)(this + 0x1e8) = 0;
  *(undefined4 *)(this + 0x2f8) = 0;
  *(undefined8 *)(this + 0x60) = 0;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  memset(this + 800,0,0x798);
  *(undefined4 *)(this + 0xab8) = 0;
  *(undefined4 *)(this + 0xae4) = 0;
  *(undefined8 *)(this + 0xae8) = 0;
  memset(this + 0xaf0,0,0x80);
  return;
}


==================================================================

### FUNC 00177810 (88 bytes) name=Condition

/* Condition::Condition() */

void __thiscall Condition::Condition(Condition *this)

{
  int iVar1;
  undefined8 *puVar2;
  
  MutexLock::MutexLock((MutexLock *)this);
  this[0x58] = (Condition)0x0;
  iVar1 = pthread_cond_init((pthread_cond_t *)(this + 0x28),(pthread_condattr_t *)0x0);
  if (iVar1 == 0) {
    return;
  }
  puVar2 = (undefined8 *)__cxa_allocate_exception(8);
  *puVar2 = "pthread_cond_init failed\n";
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar2,PTR_typeinfo_00501c20,0);
}


==================================================================

### FUNC 00177880 (44 bytes) name=~Condition

/* Condition::~Condition() */

int __thiscall Condition::~Condition(Condition *this)

{
  int iVar1;
  
  pthread_cond_destroy((pthread_cond_t *)(this + 0x28));
  iVar1 = pthread_mutex_destroy((pthread_mutex_t *)this);
  return iVar1;
}


==================================================================

### FUNC 001778c4 (128 bytes) name=~CNetComm

/* CNetComm::~CNetComm() */

int __thiscall CNetComm::~CNetComm(CNetComm *this)

{
  int iVar1;
  
  *(undefined **)this = PTR_vtable_00501fb8 + 0x10;
  DeInit(this);
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0xabc));
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0x1b8));
  pthread_cond_destroy((pthread_cond_t *)(this + 0x184));
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0x15c));
  pthread_cond_destroy((pthread_cond_t *)(this + 0x128));
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0x100));
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0xd8));
  pthread_mutex_destroy((pthread_mutex_t *)(this + 0xb0));
  iVar1 = pthread_mutex_destroy((pthread_mutex_t *)(this + 0x88));
  return iVar1;
}


==================================================================

### FUNC 001779bc (240 bytes) name=DeInit

/* CNetComm::DeInit() */

void __thiscall CNetComm::DeInit(CNetComm *this)

{
  *(undefined4 *)(this + 0x7c) = 0;
  *(undefined4 *)(this + 0x2c) = 0;
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x15c));
  pthread_cond_signal((pthread_cond_t *)(this + 0x184));
  this[0x1b4] = (CNetComm)0x1;
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0x15c));
  if (*(pthread_t *)(this + 0x18) != 0) {
    pthread_join(*(pthread_t *)(this + 0x18),(void **)0x0);
    *(undefined8 *)(this + 0x18) = 0;
  }
  if (*(int *)(this + 0x84) != 0) {
    pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
    StopReceiveImg_UnProtected(this,0);
    pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  }
  if (*(int *)(this + 0x80) != 0) {
    pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
    *(undefined4 *)(this + 0x1e0) = 0;
    if (*(int *)(this + 0x84) != 0) {
      StopReceiveImg_UnProtected(this,0);
    }
    *(undefined4 *)(this + 0x78) = 0;
    *(undefined4 *)(this + 0x80) = 0;
    if (*(long *)(this + 0x68) != 0) {
      libusb_release_interface(*(long *)(this + 0x68),0);
      libusb_close(*(undefined8 *)(this + 0x68));
      *(undefined8 *)(this + 0x68) = 0;
    }
    pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  }
  *(undefined4 *)(this + 0xab8) = 0;
  if (*(long *)(this + 0x70) != 0) {
    libusb_exit();
    *(undefined8 *)(this + 0x70) = 0;
  }
  return;
}


==================================================================

### FUNC 00177ac8 (36 bytes) name=~CNetComm

/* CNetComm::~CNetComm() */

void __thiscall CNetComm::~CNetComm(CNetComm *this)

{
  ~CNetComm(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00177aec (420 bytes) name=Init

/* CNetComm::Init(void*) */

undefined4 CNetComm::Init(void *param_1)

{
  long lVar1;
  undefined1 *puVar2;
  undefined1 uVar3;
  long lVar4;
  bool bVar5;
  int iVar6;
  uint uVar7;
  undefined4 *puVar8;
  ulong uVar9;
  long lVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  undefined4 uVar13;
  Logging aLStack_50 [16];
  undefined1 *local_40;
  long local_38;
  
  lVar4 = tpidr_el0;
  local_38 = *(long *)(lVar4 + 0x28);
  if (*(int *)((long)param_1 + 0x7c) == 0) {
    iVar6 = libusb_init((long)param_1 + 0x70);
    if (iVar6 < 0) {
      mag::Logging::Logging(aLStack_50,4);
      MStream::operator<<((MStream *)aLStack_50,"init usb fail ");
      uVar9 = MStream::Available((MStream *)aLStack_50);
      if (0x18 < uVar9) {
        lVar10 = -1;
        do {
          uVar7 = iVar6 + 9;
          lVar1 = lVar10 + 1;
          local_40[lVar10 + 1] = "0123456789"[iVar6 % 10];
          lVar10 = lVar1;
          iVar6 = iVar6 / 10;
        } while (0x12 < uVar7);
        puVar2 = local_40 + lVar1;
        puVar2[1] = 0x2d;
        if ((lVar1 != -2) && (-1 < lVar1)) {
          uVar3 = *local_40;
          *local_40 = 0x2d;
          puVar2[1] = uVar3;
          if (1 < lVar1) {
            puVar11 = local_40 + 2;
            puVar12 = puVar2;
            do {
              uVar3 = puVar11[-1];
              puVar11[-1] = *puVar12;
              *puVar12 = uVar3;
              bVar5 = puVar11 < puVar12 + -1;
              puVar11 = puVar11 + 1;
              puVar12 = puVar12 + -1;
            } while (bVar5);
          }
        }
        iVar6 = ((int)puVar2 + 2) - (int)local_40;
        local_40[iVar6] = 0;
        local_40 = local_40 + iVar6;
      }
      mag::Logging::~Logging(aLStack_50);
    }
    uVar13 = 1;
    *(undefined4 *)((long)param_1 + 0x1e0) = 0;
    *(undefined4 *)((long)param_1 + 0x1e8) = 0;
    *(undefined4 *)((long)param_1 + 0x2f8) = 0;
    *(undefined4 *)((long)param_1 + 0x2c) = 1;
    uVar7 = pthread_create((pthread_t *)((long)param_1 + 0x18),(pthread_attr_t *)0x0,
                           (__start_routine *)PTR_ThreadMonitor_00501d80,param_1);
    puVar8 = (undefined4 *)(ulong)uVar7;
    *(undefined4 *)((long)param_1 + 0x7c) = 1;
  }
  else {
    puVar8 = (undefined4 *)__errno();
    uVar13 = 0;
    *puVar8 = 0xe4ae0003;
  }
  if (*(long *)(lVar4 + 0x28) == local_38) {
    return uVar13;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(puVar8);
}


==================================================================

### FUNC 00177ca4 (68 bytes) name=ThreadMonitor

/* CNetComm::ThreadMonitor(void*) */

undefined8 CNetComm::ThreadMonitor(void *param_1)

{
  if (param_1 != (void *)0x0) {
    do {
      if (*(int *)((long)param_1 + 0x2c) == 0) {
        return 0;
      }
      Condition::waitForMsecs((Condition *)((long)param_1 + 0x15c),2000);
    } while (*(int *)((long)param_1 + 0x2c) != 0);
  }
  return 0;
}


==================================================================

### FUNC 00177ce8 (68 bytes) name=StopReceiveImg

/* CNetComm::StopReceiveImg(int) */

int __thiscall CNetComm::StopReceiveImg(CNetComm *this,int param_1)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
  StopReceiveImg_UnProtected(this,param_1);
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  return iVar1;
}


==================================================================

### FUNC 00177d2c (132 bytes) name=DisLink

/* CNetComm::DisLink(int, int) */

int __thiscall CNetComm::DisLink(CNetComm *this,int param_1,int param_2)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
  if (param_2 == 0) {
    *(undefined4 *)(this + 0x1e0) = 0;
    iVar1 = *(int *)(this + 0x84);
  }
  else {
    iVar1 = *(int *)(this + 0x84);
  }
  if (iVar1 != 0) {
    StopReceiveImg_UnProtected(this,param_2);
  }
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined4 *)(this + 0x80) = 0;
  if (*(long *)(this + 0x68) != 0) {
    libusb_release_interface(*(long *)(this + 0x68),0);
    libusb_close(*(undefined8 *)(this + 0x68));
    *(undefined8 *)(this + 0x68) = 0;
  }
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  return iVar1;
}


==================================================================

### FUNC 00177db0 (116 bytes) name=SendEmptyCmd

/* CNetComm::SendEmptyCmd(Phone2DeviceCommand) */

void __thiscall CNetComm::SendEmptyCmd(CNetComm *this,undefined4 param_2)

{
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  undefined4 local_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  local_2c = param_2;
  if (*(int *)(this + 0x80) == 0) {
    puVar3 = (undefined4 *)__errno();
    uVar2 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    uVar2 = SendCmd(this,(char *)&local_2c,4);
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00177e24 (268 bytes) name=SendCmd

/* CNetComm::SendCmd(char const*, unsigned int) */

undefined4 __thiscall CNetComm::SendCmd(CNetComm *this,char *param_1,uint param_2)

{
  long lVar1;
  int iVar2;
  long lVar3;
  undefined4 uVar4;
  uint local_105c;
  undefined4 local_1058;
  undefined1 auStack_1054 [4100];
  
  lVar1 = tpidr_el0;
  lVar3 = *(long *)(lVar1 + 0x28);
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
  if (*(int *)(this + 0x80) != 0) {
    iVar2 = libusb_bulk_transfer(*(undefined8 *)(this + 0x68),3,param_1,param_2,&local_105c,500);
    uVar4 = 0;
    if ((iVar2 < 0) || (local_105c != param_2)) goto LAB_00177ed4;
    iVar2 = libusb_bulk_transfer
                      (*(undefined8 *)(this + 0x68),0x82,&local_1058,0x1000,&local_105c,2000);
    if ((-1 < iVar2) && (3 < (int)local_105c)) {
      DecodeCmd(this,local_1058,auStack_1054,local_105c - 4);
      uVar4 = 1;
      goto LAB_00177ed4;
    }
  }
  uVar4 = 0;
LAB_00177ed4:
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
  if (*(long *)(lVar1 + 0x28) == lVar3) {
    return uVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar2);
}


==================================================================

### FUNC 00177f50 (116 bytes) name=SendCmdWith1Para

/* CNetComm::SendCmdWith1Para(Phone2DeviceCommand, unsigned int) */

void __thiscall CNetComm::SendCmdWith1Para(CNetComm *this,undefined4 param_2,undefined4 param_3)

{
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  undefined4 local_30;
  undefined4 uStack_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  if (*(int *)(this + 0x80) == 0) {
    puVar3 = (undefined4 *)__errno();
    uVar2 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    local_30 = param_2;
    uStack_2c = param_3;
    uVar2 = SendCmd(this,(char *)&local_30,8);
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00177fc4 (380 bytes) name=DecodeCmd

/* CNetComm::DecodeCmd(Device2PhoneCommand, char const*, unsigned int) */

int __thiscall CNetComm::DecodeCmd(CNetComm *this,int param_2,undefined8 *param_3,int param_4)

{
  pthread_mutex_t *__mutex;
  int iVar1;
  uint uVar2;
  undefined8 uVar3;
  
  __mutex = (pthread_mutex_t *)(this + 0xd8);
  pthread_mutex_lock(__mutex);
  if (param_2 + 0xa44a4aa3U < 2) {
    uVar3 = *param_3;
    *(undefined8 *)(this + 0xb68) = param_3[1];
    *(undefined8 *)(this + 0xb60) = uVar3;
  }
  else if (param_2 == 0x5bb5b55c) {
    if (param_4 == 0x38) {
      *(undefined8 *)(this + 0xb58) = param_3[6];
      uVar3 = param_3[4];
      *(undefined8 *)(this + 0xb50) = param_3[5];
      *(undefined8 *)(this + 0xb48) = uVar3;
      uVar3 = param_3[2];
      *(undefined8 *)(this + 0xb40) = param_3[3];
      *(undefined8 *)(this + 0xb38) = uVar3;
      uVar3 = *param_3;
      *(undefined8 *)(this + 0xb30) = param_3[1];
      *(undefined8 *)(this + 0xb28) = uVar3;
    }
  }
  else if ((param_2 == 0x5bb5b55b) && (param_4 == 0x38)) {
    uVar3 = param_3[2];
    *(undefined8 *)(this + 0xb08) = param_3[3];
    *(undefined8 *)(this + 0xb00) = uVar3;
    uVar3 = *param_3;
    *(undefined8 *)(this + 0xaf8) = param_3[1];
    *(undefined8 *)(this + 0xaf0) = uVar3;
    *(undefined8 *)(this + 0xb20) = param_3[6];
    uVar3 = param_3[4];
    *(undefined8 *)(this + 0xb18) = param_3[5];
    *(undefined8 *)(this + 0xb10) = uVar3;
    if ((*(int *)(this + 0xb00) != 0) && (*(int *)(this + 0xb04) != 0)) {
      pthread_mutex_unlock(__mutex);
      pthread_mutex_lock((pthread_mutex_t *)(this + 0xabc));
      if (*(int *)(this + 0xab8) != 0) {
        uVar2 = 0;
        do {
          if (*(int *)(this + (ulong)uVar2 * 0x3c + 0x35c) == *(int *)(this + 0x78)) {
            *(undefined4 *)(this + (ulong)uVar2 * 0x3c + 0x360) = *(undefined4 *)(this + 0xaf0);
            sprintf((char *)(this + (ulong)uVar2 * 0x3c + 0x338),"core-%d",
                    (ulong)*(uint *)(this + 0xaf0));
          }
          uVar2 = uVar2 + 1;
        } while (uVar2 < *(uint *)(this + 0xab8));
      }
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xabc));
      pthread_mutex_lock(__mutex);
    }
  }
  iVar1 = pthread_mutex_unlock(__mutex);
  return iVar1;
}


==================================================================

### FUNC 00178140 (104 bytes) name=DisLink_UnProtected

/* CNetComm::DisLink_UnProtected(int, int) */

void __thiscall CNetComm::DisLink_UnProtected(CNetComm *this,int param_1,int param_2)

{
  int iVar1;
  
  if (param_2 == 0) {
    *(undefined4 *)(this + 0x1e0) = 0;
    iVar1 = *(int *)(this + 0x84);
  }
  else {
    iVar1 = *(int *)(this + 0x84);
  }
  if (iVar1 != 0) {
    StopReceiveImg_UnProtected(this,param_2);
  }
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined4 *)(this + 0x80) = 0;
  if (*(long *)(this + 0x68) != 0) {
    libusb_release_interface(*(long *)(this + 0x68),0);
    libusb_close(*(undefined8 *)(this + 0x68));
    *(undefined8 *)(this + 0x68) = 0;
  }
  return;
}


==================================================================

### FUNC 001781a8 (268 bytes) name=StopReceiveImg_UnProtected

/* CNetComm::StopReceiveImg_UnProtected(int) */

void __thiscall CNetComm::StopReceiveImg_UnProtected(CNetComm *this,int param_1)

{
  long lVar1;
  undefined4 *puVar2;
  char local_3c [4];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if (param_1 == 0) {
    *(undefined4 *)(this + 0x2f8) = 0;
  }
  if (*(int *)(this + 0x80) != 0) {
    local_3c[0] = 't';
    local_3c[1] = -0x4a;
    local_3c[2] = -0x4a;
    local_3c[3] = 'k';
    if (*(int *)(this + 0x80) == 0) {
      puVar2 = (undefined4 *)__errno();
      *puVar2 = 0xe4ae0005;
    }
    else {
      SendCmd(this,local_3c,4);
    }
  }
  *(undefined4 *)(this + 0x28) = 0;
  if (*(pthread_t *)(this + 0x10) != 0) {
    pthread_join(*(pthread_t *)(this + 0x10),(void **)0x0);
    *(undefined8 *)(this + 0x10) = 0;
  }
  *(undefined4 *)(this + 0x30) = 0;
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x100));
  pthread_cond_signal((pthread_cond_t *)(this + 0x128));
  this[0x158] = (CNetComm)0x1;
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0x100));
  if (*(pthread_t *)(this + 0x20) != 0) {
    pthread_join(*(pthread_t *)(this + 0x20),(void **)0x0);
    *(undefined8 *)(this + 0x20) = 0;
  }
  if (*(void **)(this + 800) != (void *)0x0) {
    operator_delete__(*(void **)(this + 800));
    *(undefined8 *)(this + 800) = 0;
  }
  if (*(void **)(this + 0x328) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x328));
    *(undefined8 *)(this + 0x328) = 0;
  }
  *(undefined4 *)(this + 0x84) = 0;
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001782d0 (612 bytes) name=EnumCameras

/* CNetComm::EnumCameras() */

undefined4 __thiscall CNetComm::EnumCameras(CNetComm *this)

{
  int iVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined4 *puVar7;
  undefined4 uVar8;
  CNetComm *__dest;
  long lVar9;
  int iVar10;
  long lVar11;
  undefined1 auStack_88 [8];
  short local_80;
  ushort local_7e;
  long *local_70;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  if (*(int *)(this + 0x7c) == 0) {
    puVar7 = (undefined4 *)__errno();
    uVar8 = 0;
    *puVar7 = 0xe4ae0004;
  }
  else {
    iVar4 = libusb_get_device_list(*(undefined8 *)(this + 0x70),&local_70);
    if (iVar4 < 0) {
      puVar7 = (undefined4 *)__errno();
      uVar8 = 0;
      *puVar7 = 0xe4ae0101;
    }
    else {
      pthread_mutex_lock((pthread_mutex_t *)(this + 0xabc));
      iVar4 = *(int *)(this + 0xab8);
      if (-1 < iVar4 + -1) {
        iVar10 = -iVar4;
        __dest = this + (long)(iVar4 + -1) * 0x3c + 0x338;
        do {
          iVar1 = *(int *)(__dest + 0x38);
          *(int *)(__dest + 0x38) = iVar1 + -1;
          if (iVar1 + -1 == 0) {
            if (iVar4 < *(int *)(this + 0xab8)) {
              memmove(__dest,this + (long)iVar4 * 0x3c + 0x338,
                      (ulong)(uint)(iVar10 + *(int *)(this + 0xab8)) * 0x3c);
            }
            *(int *)(this + 0xab8) = *(int *)(this + 0xab8) + -1;
          }
          iVar10 = iVar10 + 1;
          iVar1 = iVar4 + -2;
          iVar4 = iVar4 + -1;
          __dest = __dest + -0x3c;
        } while (-1 < iVar1);
      }
      lVar9 = *local_70;
      if (lVar9 != 0) {
        lVar11 = 1;
        do {
          iVar4 = libusb_get_device_descriptor(lVar9,auStack_88);
          if ((iVar4 == 0) && (local_80 == -0x7cc4)) {
            uVar5 = libusb_get_bus_number(lVar9);
            uVar6 = libusb_get_device_address(lVar9);
            if (*(int *)(this + 0xab8) != 0) {
              iVar4 = *(int *)(this + 0xab8) + -1;
              do {
                uVar2 = *(uint *)(this + (long)iVar4 * 0x3c + 0x35c);
                if (((uVar2 >> 0x10 == (uint)local_7e) && ((uVar6 & 0xff) == (uVar2 & 0xff))) &&
                   ((uVar5 & 0xff) == (uVar2 >> 8 & 0xff))) {
                  *(undefined4 *)(this + (long)iVar4 * 0x3c + 0x370) = 5;
                  goto LAB_001784b0;
                }
                iVar4 = iVar4 + -1;
              } while (iVar4 != -1);
            }
            if (*(uint *)(this + 0xab8) < 0x20) {
              uVar2 = *(uint *)(this + 0xab8);
              *(uint *)(this + (ulong)uVar2 * 0x3c + 0x35c) =
                   uVar6 & 0xff | (uVar5 & 0xff) << 8 | (uint)local_7e << 0x10;
              sprintf((char *)(this + (ulong)uVar2 * 0x3c + 0x338),"%04x-%02x-%02x",(ulong)local_7e,
                      (ulong)(uVar5 & 0xff),(ulong)(uVar6 & 0xff));
              *(undefined8 *)(this + (ulong)uVar2 * 0x3c + 0x36c) = 0x500000000;
              *(undefined8 *)(this + (ulong)uVar2 * 0x3c + 0x364) = 0;
              *(int *)(this + 0xab8) = *(int *)(this + 0xab8) + 1;
            }
          }
LAB_001784b0:
          lVar9 = local_70[lVar11];
          lVar11 = lVar11 + 1;
        } while (lVar9 != 0);
      }
      pthread_mutex_unlock((pthread_mutex_t *)(this + 0xabc));
      uVar8 = 1;
      libusb_free_device_list(local_70,1);
    }
  }
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return uVar8;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00178534 (180 bytes) name=LinkCamera

/* CNetComm::LinkCamera(unsigned int, char const*, char const*, unsigned int, unsigned int, char
   const*, char const*) */

undefined4
CNetComm::LinkCamera
          (uint param_1,char *param_2,char *param_3,uint param_4,uint param_5,char *param_6,
          char *param_7)

{
  undefined4 uVar1;
  CNetComm *this;
  
  this = (CNetComm *)(ulong)param_1;
  memset((struct_ReConnPara *)(this + 0x1e8),0,0x110);
  *(int *)(this + 0x1e8) = (int)param_2;
  *(uint *)(this + 0x1ec) = param_5;
  *(undefined4 *)(this + 0x1f0) = 0;
  strncpy((char *)(this + 500),param_3,0x40);
  *(int *)(this + 0x274) = (int)param_6;
  strncpy((char *)(this + 0x278),param_7,0x40);
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
  uVar1 = LinkCamera_UnProtected(this,(struct_ReConnPara *)(this + 0x1e8));
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  return uVar1;
}


==================================================================

### FUNC 001785e8 (376 bytes) name=LinkCamera_UnProtected

/* CNetComm::LinkCamera_UnProtected(CNetComm::struct_ReConnPara const*) */

void __thiscall CNetComm::LinkCamera_UnProtected(CNetComm *this,struct_ReConnPara *param_1)

{
  CNetComm *pCVar1;
  long lVar2;
  int iVar3;
  undefined4 *puVar4;
  undefined8 uVar5;
  long lVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined1 auStack_60 [8];
  short local_58;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  if (*(int *)(this + 0x7c) == 0) {
    puVar4 = (undefined4 *)__errno();
    uVar7 = 0xe4ae0004;
  }
  else {
    if (*(int *)(this + 0x80) == 0) {
      uVar7 = *(undefined4 *)param_1;
      pCVar1 = this + 0x68;
      iVar3 = libusb_wrap_fd(*(undefined8 *)(this + 0x70),uVar7,pCVar1);
      if (iVar3 < 0) {
        *(undefined8 *)pCVar1 = 0;
        puVar4 = (undefined4 *)__errno();
        uVar5 = 0;
        *puVar4 = 0xe4ae0202;
      }
      else {
        lVar6 = libusb_get_device(*(undefined8 *)pCVar1);
        uVar8 = 0xe4ae0202;
        if (lVar6 != 0) {
          iVar3 = libusb_get_device_descriptor(lVar6,auStack_60);
          uVar8 = 0xe4ae0207;
          if ((iVar3 == 0) && (local_58 == -0x7cc4)) {
            libusb_set_auto_detach_kernel_driver(*(undefined8 *)pCVar1,1);
            iVar3 = libusb_set_configuration(*(undefined8 *)pCVar1,2);
            if ((iVar3 < 0) &&
               (iVar3 = libusb_set_configuration(*(undefined8 *)pCVar1,1), iVar3 < 0)) {
              uVar8 = 0xe4ae0205;
            }
            else {
              iVar3 = libusb_claim_interface(*(undefined8 *)pCVar1,0);
              if (-1 < iVar3) {
                *(undefined4 *)(this + 0x78) = uVar7;
                uVar5 = GetTickCount();
                *(undefined8 *)(this + 0xae8) = uVar5;
                uVar5 = 1;
                *(undefined4 *)(this + 0x1e0) = uVar7;
                *(undefined4 *)(this + 0x80) = 1;
                goto LAB_0017864c;
              }
              uVar8 = 0xe4ae0206;
            }
          }
        }
        puVar4 = (undefined4 *)__errno();
        *puVar4 = uVar8;
        libusb_close(*(undefined8 *)pCVar1);
        uVar5 = 0;
        *(undefined8 *)pCVar1 = 0;
      }
      goto LAB_0017864c;
    }
    puVar4 = (undefined4 *)__errno();
    uVar7 = 0xe4ae0003;
  }
  uVar5 = 0;
  *puVar4 = uVar7;
LAB_0017864c:
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00178760 (800 bytes) name=ThreadReceiveImg

/* CNetComm::ThreadReceiveImg(void*) */

void CNetComm::ThreadReceiveImg(void *param_1)

{
  int iVar1;
  undefined4 uVar2;
  uint uVar3;
  long lVar4;
  bool bVar5;
  bool bVar6;
  int iVar7;
  int *__dest;
  undefined8 uVar8;
  int *__src;
  int *piVar9;
  undefined4 *puVar10;
  int iVar11;
  uint uVar12;
  ulong uVar13;
  size_t __n;
  int iVar14;
  int local_8c;
  undefined8 local_88;
  undefined4 uStack_80;
  undefined4 uStack_7c;
  undefined4 uStack_78;
  undefined4 uStack_74;
  undefined4 uStack_70;
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  if (param_1 == (void *)0x0) {
    uVar8 = 0xffffffffffffffff;
  }
  else {
    uStack_70 = 0;
    uStack_80 = 0;
    uStack_7c = 0;
    uStack_78 = 0;
    uStack_74 = 0;
    local_88 = 0;
    iVar1 = *(int *)((long)param_1 + 0xb00);
    uVar2 = *(undefined4 *)((long)param_1 + 0xb04);
    __dest = *(int **)((long)param_1 + 800);
    local_8c = 0;
    if (*(int *)((long)param_1 + 0x28) != 0) {
      bVar5 = false;
      piVar9 = __dest;
      do {
        while( true ) {
          iVar7 = libusb_bulk_transfer
                            (*(undefined8 *)((long)param_1 + 0x68),0x81,piVar9,
                             ((int)__dest - (int)piVar9) + *(int *)((long)param_1 + 0x330) * 2,
                             &local_8c,500);
          if (*(int *)((long)param_1 + 0x28) == 0) goto LAB_00178a38;
          if (-1 < iVar7) break;
          Sleep(10);
          __dest = *(int **)((long)param_1 + 800);
LAB_0017887c:
          iVar7 = *(int *)((long)param_1 + 0x28);
          piVar9 = __dest;
joined_r0x00178978:
          if (iVar7 == 0) goto LAB_00178a38;
        }
        __dest = *(int **)((long)param_1 + 800);
        iVar7 = (int)(int *)((long)piVar9 + (long)local_8c);
        if (bVar5) {
          uVar12 = iVar7 - (int)__dest;
        }
        else {
          iVar14 = *__dest;
          __src = __dest;
          while (__src < (int *)((long)piVar9 + (long)local_8c)) {
            if (iVar14 == 0x1bb1b11b) goto LAB_00178850;
            __src = __src + 1;
            iVar14 = *__src;
          }
          if (iVar14 != 0x1bb1b11b) goto LAB_0017887c;
LAB_00178850:
          uVar12 = iVar7 - (int)__src;
          if (__dest == __src) {
            bVar5 = true;
          }
          else {
            memmove(__dest,__src,(long)(int)uVar12);
            __dest = *(int **)((long)param_1 + 800);
            bVar5 = true;
          }
        }
        uVar3 = *(uint *)((long)param_1 + 0x330);
        uVar13 = (ulong)uVar3;
        if (uVar13 + 0x38 <= (ulong)(long)(int)uVar12) {
          if ((*__dest == 0x1bb1b11b) && (__dest[2] == uVar3)) {
            piVar9 = (int *)((long)__dest + uVar13 + 0x1c);
            if ((*piVar9 == 0x1bb1b11c) && (*(uint *)((long)__dest + uVar13 + 0x28) < 2)) {
              iVar7 = __dest[1];
              if (iVar1 == 0xa0) {
                iVar11 = *(int *)((long)__dest + uVar13 + 0x24);
                iVar14 = iVar11 + -500;
              }
              else {
                iVar14 = *(int *)((long)__dest + uVar13 + 0x2c);
                if (iVar1 == 0x180) {
                  iVar11 = iVar14 + 500;
                }
                else {
                  iVar11 = *(int *)((long)__dest + uVar13 + 0x24);
                }
              }
              pthread_mutex_lock((pthread_mutex_t *)((long)param_1 + 0x88));
              puVar10 = *(undefined4 **)((long)param_1 + 0x328);
              *puVar10 = 0;
              puVar10[1] = iVar7;
              puVar10[6] = uVar2;
              puVar10[7] = 8;
              puVar10[2] = uVar3;
              puVar10[3] = 1;
              puVar10[4] = 0;
              puVar10[5] = iVar1;
              puVar10[8] = 0xffff3cb0;
              puVar10[9] = 0;
              puVar10[10] = iVar14;
              puVar10[0xb] = iVar11;
              *(ulong *)(puVar10 + 0x11) = CONCAT44(uStack_70,uStack_74);
              *(ulong *)(puVar10 + 0xf) = CONCAT44(uStack_78,uStack_7c);
              *(ulong *)(puVar10 + 0xe) = CONCAT44(uStack_7c,uStack_80);
              *(undefined8 *)(puVar10 + 0xc) = local_88;
              memcpy((void *)(*(long *)((long)param_1 + 0x328) + 0x4c),
                     (void *)(*(long *)((long)param_1 + 800) + 0x1c),
                     (ulong)*(uint *)((long)param_1 + 0x330));
              pthread_mutex_unlock((pthread_mutex_t *)((long)param_1 + 0x88));
              pthread_mutex_lock((pthread_mutex_t *)((long)param_1 + 0x100));
              pthread_cond_signal((pthread_cond_t *)((long)param_1 + 0x128));
              *(undefined1 *)((long)param_1 + 0x158) = 1;
              pthread_mutex_unlock((pthread_mutex_t *)((long)param_1 + 0x100));
              __dest = *(int **)((long)param_1 + 800);
              *(int *)((long)param_1 + 8) = *(int *)((long)param_1 + 8) + 1;
            }
            else if (*piVar9 != 0x1bb1b11c) {
              piVar9 = (int *)((long)__dest + (long)(int)(uVar12 & 0xfffffffc));
              bVar6 = *piVar9 == 0x1bb1b11b;
              if (0 < (int)(uVar12 & 0xfffffffc)) {
                do {
                  if (bVar6) goto LAB_00178958;
                  piVar9 = piVar9 + -1;
                  bVar6 = *piVar9 == 0x1bb1b11b;
                } while (__dest < piVar9);
              }
              if (bVar6) {
LAB_00178958:
                __n = (size_t)(int)((uVar12 - (int)piVar9) + (int)__dest);
                memmove(__dest,piVar9,__n);
                __dest = *(int **)((long)param_1 + 800);
                iVar7 = *(int *)((long)param_1 + 0x28);
                piVar9 = (int *)((long)__dest + __n);
                goto joined_r0x00178978;
              }
            }
          }
          bVar5 = false;
          iVar7 = *(int *)((long)param_1 + 0x28);
          piVar9 = __dest;
          goto joined_r0x00178978;
        }
        piVar9 = (int *)((long)__dest + (long)(int)uVar12);
      } while (*(int *)((long)param_1 + 0x28) != 0);
    }
LAB_00178a38:
    uVar8 = 0;
    *(undefined4 *)((long)param_1 + 0x1e4) = 1;
  }
  if (*(long *)(lVar4 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar8);
  }
  return;
}


==================================================================

### FUNC 00178a9c (176 bytes) name=StartReceiveImg

/* CNetComm::StartReceiveImg(ImgTypes, unsigned int, unsigned int, char*, void (*)(unsigned int,
   void*), unsigned int, int) */

int __thiscall
CNetComm::StartReceiveImg
          (CNetComm *this,undefined4 param_2,undefined4 param_3,undefined4 param_4,
          undefined8 param_5,undefined8 param_6,undefined4 param_7,undefined4 param_8)

{
  struct_RePlayPara *psVar1;
  int iVar2;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
  psVar1 = (struct_RePlayPara *)(this + 0x2f8);
  *(undefined8 *)(this + 0x300) = 0;
  *(undefined8 *)psVar1 = 0;
  *(undefined4 *)(this + 0x31c) = param_8;
  *(undefined4 *)(this + 0x2f8) = param_2;
  *(undefined4 *)(this + 0x300) = param_4;
  *(undefined4 *)(this + 0x2fc) = param_3;
  *(undefined4 *)(this + 0x318) = param_7;
  *(undefined8 *)(this + 0x310) = param_6;
  *(undefined8 *)(this + 0x308) = param_5;
  iVar2 = StartReceiveImg_UnProtected(this,psVar1);
  if (iVar2 == 0) {
    *(undefined4 *)psVar1 = 0;
  }
  pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
  return iVar2;
}


==================================================================

### FUNC 00178b4c (568 bytes) name=StartReceiveImg_UnProtected

/* CNetComm::StartReceiveImg_UnProtected(CNetComm::struct_RePlayPara const*) */

void __thiscall CNetComm::StartReceiveImg_UnProtected(CNetComm *this,struct_RePlayPara *param_1)

{
  long lVar1;
  int iVar2;
  undefined4 *puVar3;
  void *pvVar4;
  void *pvVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  uint uVar8;
  Logging aLStack_68 [28];
  char local_4c [4];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  if (*(int *)(this + 0x80) == 0) {
    puVar3 = (undefined4 *)__errno();
    uVar6 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    if (*(int *)(this + 0x84) == 0) {
      if (((*(int *)param_1 == 0) || (*(long *)(param_1 + 0x10) == 0)) ||
         (*(long *)(param_1 + 0x18) == 0)) {
        puVar3 = (undefined4 *)__errno();
        uVar7 = 0xe4ae0001;
      }
      else {
        uVar8 = *(uint *)(param_1 + 4);
        *(uint *)(this + 0x330) = uVar8;
        if (*(void **)(this + 800) != (void *)0x0) {
          operator_delete__(*(void **)(this + 800));
          uVar8 = *(uint *)(this + 0x330);
          *(undefined8 *)(this + 800) = 0;
        }
        pvVar4 = operator_new__((ulong)uVar8 * 2 + 0x470);
        *(void **)(this + 800) = pvVar4;
        if (*(void **)(this + 0x328) != (void *)0x0) {
          operator_delete__(*(void **)(this + 0x328));
          pvVar4 = *(void **)(this + 800);
          uVar8 = *(uint *)(this + 0x330);
          *(undefined8 *)(this + 0x328) = 0;
        }
        pvVar5 = operator_new__((ulong)uVar8 + 0x4c);
        *(void **)(this + 0x328) = pvVar5;
        if (pvVar4 != (void *)0x0) {
          *(undefined8 *)(this + 8) = 0;
          *(undefined8 *)(this + 0x50) = *(undefined8 *)(param_1 + 0x10);
          *(undefined8 *)(this + 0x48) = *(undefined8 *)(param_1 + 0x18);
          pthread_mutex_lock((pthread_mutex_t *)(this + 0x100));
          this[0x158] = (CNetComm)0x0;
          pthread_mutex_unlock((pthread_mutex_t *)(this + 0x100));
          *(undefined4 *)(this + 0x30) = 1;
          pthread_create((pthread_t *)(this + 0x20),(pthread_attr_t *)0x0,
                         (__start_routine *)PTR_ThreadOutputImg_00501c80,this);
          *(undefined4 *)(this + 0x1e4) = 0;
          *(undefined4 *)(this + 0x28) = 1;
          pthread_create((pthread_t *)(this + 0x10),(pthread_attr_t *)0x0,
                         (__start_routine *)PTR_ThreadReceiveImg_00501ed0,this);
          iVar2 = usleep(50000);
          local_4c[0] = 's';
          local_4c[1] = -0x4a;
          local_4c[2] = -0x4a;
          local_4c[3] = 'k';
          if (*(int *)(this + 0x80) == 0) {
            puVar3 = (undefined4 *)__errno(iVar2);
            *puVar3 = 0xe4ae0005;
          }
          else {
            iVar2 = SendCmd(this,local_4c,4);
            if (iVar2 != 0) {
              uVar6 = 1;
              *(undefined4 *)(this + 0x84) = 1;
              goto LAB_00178cec;
            }
          }
          pthread_mutex_lock((pthread_mutex_t *)(this + 0x1b8));
          StopReceiveImg_UnProtected(this,0);
          pthread_mutex_unlock((pthread_mutex_t *)(this + 0x1b8));
          uVar6 = 0;
          goto LAB_00178cec;
        }
        operator_delete__(pvVar5);
        *(undefined8 *)(this + 0x328) = 0;
        mag::Logging::Logging(aLStack_68,4);
        MStream::operator<<((MStream *)aLStack_68,"Fail to allocate memory");
        mag::Logging::~Logging(aLStack_68);
        puVar3 = (undefined4 *)__errno();
        uVar7 = 0xe4ae0002;
      }
    }
    else {
      puVar3 = (undefined4 *)__errno();
      uVar7 = 0xe4ae0003;
    }
    uVar6 = 0;
    *puVar3 = uVar7;
  }
LAB_00178cec:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar6);
}


==================================================================

### FUNC 00178d9c (164 bytes) name=ThreadOutputImg

/* CNetComm::ThreadOutputImg(void*) */

undefined8 CNetComm::ThreadOutputImg(void *param_1)

{
  undefined8 uVar1;
  
  if (param_1 == (void *)0x0) {
    uVar1 = 1;
  }
  else if (*(long *)((long)param_1 + 0x48) == 0) {
    uVar1 = 2;
  }
  else {
    if (*(int *)((long)param_1 + 0x30) != 0) {
      do {
        Condition::wait((Condition *)((long)param_1 + 0x100));
        if (*(int *)((long)param_1 + 0x30) == 0) break;
        pthread_mutex_lock((pthread_mutex_t *)((long)param_1 + 0x88));
        memcpy(*(void **)((long)param_1 + 0x50),*(void **)((long)param_1 + 0x328),
               (ulong)*(uint *)((long)param_1 + 0x330) + 0x4c);
        pthread_mutex_unlock((pthread_mutex_t *)((long)param_1 + 0x88));
        if (*(code **)((long)param_1 + 0x48) != (code *)0x0) {
          (**(code **)((long)param_1 + 0x48))
                    (*(undefined4 *)((long)param_1 + 0x334),*(undefined8 *)((long)param_1 + 0x50));
        }
      } while (*(int *)((long)param_1 + 0x30) != 0);
    }
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### FUNC 00178e40 (132 bytes) name=SetShutterState

/* CNetComm::SetShutterState(int, unsigned int*) */

void CNetComm::SetShutterState(int param_1,uint *param_2)

{
  long lVar1;
  CNetComm *this;
  undefined8 uVar2;
  undefined4 *puVar3;
  char local_30 [4];
  undefined4 uStack_2c;
  long local_28;
  
  this = (CNetComm *)(ulong)(uint)param_1;
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  if ((*(int *)(this + 0x80) == 0) || (*(int *)(this + 0x80) == 0)) {
    puVar3 = (undefined4 *)__errno();
    uVar2 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    uStack_2c = SUB84(param_2,0);
    local_30[0] = 'r';
    local_30[1] = -0x4a;
    local_30[2] = -0x4a;
    local_30[3] = 'k';
    uVar2 = SendCmd(this,local_30,8);
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00178ec4 (132 bytes) name=SetLaserState

/* CNetComm::SetLaserState(int) */

void __thiscall CNetComm::SetLaserState(CNetComm *this,int param_1)

{
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  char local_30 [4];
  int iStack_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  if ((*(int *)(this + 0x80) == 0) || (*(int *)(this + 0x80) == 0)) {
    puVar3 = (undefined4 *)__errno();
    uVar2 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    local_30[0] = 'v';
    local_30[1] = -0x4a;
    local_30[2] = -0x4a;
    local_30[3] = 'k';
    iStack_2c = param_1;
    uVar2 = SendCmd(this,local_30,8);
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00178f48 (132 bytes) name=AutoPowerSave

/* CNetComm::AutoPowerSave(int) */

void __thiscall CNetComm::AutoPowerSave(CNetComm *this,int param_1)

{
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  char local_30 [4];
  int iStack_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  if ((*(int *)(this + 0x80) == 0) || (*(int *)(this + 0x80) == 0)) {
    puVar3 = (undefined4 *)__errno();
    uVar2 = 0;
    *puVar3 = 0xe4ae0005;
  }
  else {
    local_30[0] = 'w';
    local_30[1] = -0x4a;
    local_30[2] = -0x4a;
    local_30[3] = 'k';
    iStack_2c = param_1;
    uVar2 = SendCmd(this,local_30,8);
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00178fcc (224 bytes) name=ReadCaliInfo

/* CNetComm::ReadCaliInfo(CaliInfo*) */

void __thiscall CNetComm::ReadCaliInfo(CNetComm *this,CaliInfo *param_1)

{
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  undefined8 uVar4;
  char local_3c [4];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if (*(int *)(this + 0x80) != 0) {
    if (param_1 == (CaliInfo *)0x0) {
      puVar3 = (undefined4 *)__errno();
      uVar2 = 0;
      *puVar3 = 0xe4ae0001;
      goto LAB_0017907c;
    }
    *(undefined8 *)(this + 0xb68) = 0;
    *(undefined8 *)(this + 0xb60) = 0;
    local_3c[0] = 'o';
    local_3c[1] = -0x4a;
    local_3c[2] = -0x4a;
    local_3c[3] = 'k';
    if (*(int *)(this + 0x80) != 0) {
      uVar2 = SendCmd(this,local_3c,4);
      if ((int)uVar2 != 0) {
        if (*(int *)(this + 0xb60) == 0) {
          uVar2 = 0;
        }
        else {
          uVar4 = *(undefined8 *)(this + 0xb60);
          uVar2 = 1;
          *(undefined8 *)(param_1 + 8) = *(undefined8 *)(this + 0xb68);
          *(undefined8 *)param_1 = uVar4;
        }
      }
      goto LAB_0017907c;
    }
  }
  puVar3 = (undefined4 *)__errno();
  uVar2 = 0;
  *puVar3 = 0xe4ae0005;
LAB_0017907c:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 001790ac (692 bytes) name=GetCaliFile

/* CNetComm::GetCaliFile(char*) */

void __thiscall CNetComm::GetCaliFile(CNetComm *this,char *param_1)

{
  CNetComm *pCVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  long lVar5;
  int iVar6;
  int iVar7;
  undefined4 uVar8;
  void *pvVar9;
  undefined4 *puVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  code *pcVar13;
  ulong uVar14;
  int iVar15;
  ulong uVar16;
  void *pvVar17;
  undefined4 local_98 [4];
  Logging aLStack_88 [28];
  int local_6c;
  long local_68;
  
  lVar5 = tpidr_el0;
  local_68 = *(long *)(lVar5 + 0x28);
  *(undefined8 *)(this + 0xb68) = 0;
  *(undefined8 *)(this + 0xb60) = 0;
  local_98[0] = 0x6bb6b670;
  if (*(int *)(this + 0x80) == 0) {
    puVar10 = (undefined4 *)__errno();
    *puVar10 = 0xe4ae0005;
LAB_00179240:
    pcVar13 = *(code **)(this + 0x58);
    if (pcVar13 != (code *)0x0) {
      uVar8 = *(undefined4 *)(this + 0x334);
      uVar12 = *(undefined8 *)(this + 0x60);
      uVar11 = 0xffffffff;
      iVar6 = 0;
LAB_00179258:
      (*pcVar13)(uVar8,uVar11,iVar6,uVar12);
    }
  }
  else {
    iVar6 = SendCmd(this,(char *)local_98,4);
    if (((iVar6 == 0) || (pCVar1 = this + 0xb60, *(uint *)pCVar1 == 0)) ||
       (0x6400000 < *(uint *)pCVar1)) goto LAB_00179240;
    uVar2 = *(uint *)pCVar1;
    uVar14 = (ulong)(int)uVar2;
    uVar16 = uVar14;
    if ((long)uVar14 < 0) {
      uVar16 = 0xffffffffffffffff;
    }
    pvVar9 = operator_new__(uVar16);
    local_6c = 0;
    mag::Logging::Logging(aLStack_88,2);
    MStream::operator<<((MStream *)aLStack_88,
                        "First running on new host, it will cost some time for initializing...");
    mag::Logging::~Logging(aLStack_88);
    if (*(code **)(this + 0x58) != (code *)0x0) {
      (**(code **)(this + 0x58))(*(undefined4 *)(this + 0x334),0,0,*(undefined8 *)(this + 0x60));
    }
    if ((int)uVar2 < 1) {
      iVar6 = 0;
      uVar4 = uVar2;
    }
    else {
      uVar16 = (ulong)uVar2;
      pvVar17 = pvVar9;
      iVar6 = 0;
      do {
        while( true ) {
          iVar15 = (int)uVar16;
          iVar7 = iVar15;
          if (0x7ffff < iVar15) {
            iVar7 = 0x80000;
          }
          iVar7 = libusb_bulk_transfer
                            (*(undefined8 *)(this + 0x68),0x84,pvVar17,iVar7,&local_6c,60000);
          if (iVar7 < 0) {
            printf("%p, %d\n",*(undefined8 *)(this + 0x68),uVar16);
            operator_delete__(pvVar9);
            pcVar13 = *(code **)(this + 0x58);
            if (pcVar13 == (code *)0x0) goto LAB_0017925c;
            uVar8 = *(undefined4 *)(this + 0x334);
            uVar12 = *(undefined8 *)(this + 0x60);
            uVar11 = 0xfffffffe;
            goto LAB_00179258;
          }
          pvVar17 = (void *)((long)pvVar17 + (long)local_6c);
          uVar4 = iVar15 - local_6c;
          uVar16 = (ulong)uVar4;
          if (*(code **)(this + 0x58) != (code *)0x0) break;
LAB_00179208:
          if ((int)uVar4 < 1) goto joined_r0x00179298;
        }
        lVar3 = 0;
        if (uVar14 != 0) {
          lVar3 = ((long)(int)(uVar2 - uVar4) * 100) / (long)uVar14;
        }
        iVar7 = (int)lVar3;
        if (0x62 < lVar3) {
          iVar7 = 99;
        }
        if (iVar7 <= iVar6) goto LAB_00179208;
        (**(code **)(this + 0x58))
                  (*(undefined4 *)(this + 0x334),0,iVar7,*(undefined8 *)(this + 0x60));
        iVar6 = iVar7;
      } while (0 < (int)uVar4);
    }
joined_r0x00179298:
    if (uVar4 == 0) {
      OFStream::OFStream((OFStream *)local_98,param_1,false);
      OFStream::Write((OFStream *)local_98,pvVar9,uVar14,1);
      OFStream::~OFStream((OFStream *)local_98);
      if (*(code **)(this + 0x58) != (code *)0x0) {
        (**(code **)(this + 0x58))(*(undefined4 *)(this + 0x334),0,100,*(undefined8 *)(this + 0x60))
        ;
      }
      operator_delete__(pvVar9);
      uVar11 = 1;
      goto LAB_00179260;
    }
    operator_delete__(pvVar9);
    pcVar13 = *(code **)(this + 0x58);
    if (pcVar13 != (code *)0x0) {
      uVar8 = *(undefined4 *)(this + 0x334);
      uVar12 = *(undefined8 *)(this + 0x60);
      uVar11 = 0xfffffffd;
      goto LAB_00179258;
    }
  }
LAB_0017925c:
  uVar11 = 0;
LAB_00179260:
  if (*(long *)(lVar5 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar11);
}


==================================================================

### FUNC 001793d8 (364 bytes) name=RefreshCaliFileNeeded

/* CNetComm::RefreshCaliFileNeeded() */

bool __thiscall CNetComm::RefreshCaliFileNeeded(CNetComm *this)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  uint uVar4;
  undefined4 *puVar5;
  FILE *__stream;
  long lVar6;
  char local_148 [256];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  if (*(int *)(this + 0x80) == 0) {
LAB_00179460:
    puVar5 = (undefined4 *)__errno();
    *puVar5 = 0xe4ae0005;
  }
  else {
    *(undefined8 *)(this + 0xb68) = 0;
    *(undefined8 *)(this + 0xb60) = 0;
    local_148[0] = 'o';
    local_148[1] = -0x4a;
    local_148[2] = -0x4a;
    local_148[3] = 'k';
    if (*(int *)(this + 0x80) == 0) goto LAB_00179460;
    puVar5 = (undefined4 *)SendCmd(this,local_148,4);
    if (((int)puVar5 != 0) && (uVar4 = *(uint *)(this + 0xb60), uVar4 != 0)) {
      if (0x6400000 < uVar4) {
        bVar2 = false;
        goto LAB_0017946c;
      }
      snprintf(local_148,0x100,"%s/cali",PTR_g_sStorageDir_00501cf8);
      iVar3 = access(local_148,0);
      if (iVar3 != 0) {
        mkdir(local_148,0x1c0);
      }
      snprintf(local_148,0x100,"%s/cali/%s.%d.%lld",PTR_g_sStorageDir_00501cf8,"magcore.cali",
               (ulong)*(uint *)(this + 0xaf0),*(undefined8 *)(this + 0xb68));
      __stream = fopen(local_148,"rb");
      puVar5 = (undefined4 *)0x0;
      if (__stream != (FILE *)0x0) {
        fseek(__stream,0,2);
        lVar6 = ftell(__stream);
        bVar2 = uVar4 != (uint)lVar6;
        uVar4 = fclose(__stream);
        puVar5 = (undefined4 *)(ulong)uVar4;
        goto LAB_0017946c;
      }
    }
  }
  bVar2 = true;
LAB_0017946c:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(puVar5);
}


==================================================================

### FUNC 00179544 (140 bytes) name=GetCaliFileName

/* CNetComm::GetCaliFileName(char*, int) const */

int __thiscall CNetComm::GetCaliFileName(CNetComm *this,char *param_1,int param_2)

{
  int iVar1;
  
  snprintf(param_1,(long)param_2,"%s/cali",PTR_g_sStorageDir_00501cf8);
  iVar1 = access(param_1,0);
  if (iVar1 != 0) {
    mkdir(param_1,0x1c0);
  }
  iVar1 = snprintf(param_1,(long)param_2,"%s/cali/%s.%d.%lld",PTR_g_sStorageDir_00501cf8,
                   "magcore.cali",(ulong)*(uint *)(this + 0xaf0),*(undefined8 *)(this + 0xb68));
  return iVar1;
}


==================================================================

### FUNC 001795d0 (204 bytes) name=TransferCaliFile

/* CNetComm::TransferCaliFile() */

void __thiscall CNetComm::TransferCaliFile(CNetComm *this)

{
  long lVar1;
  int iVar2;
  undefined8 uVar3;
  char acStack_138 [256];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  iVar2 = RefreshCaliFileNeeded(this);
  if (iVar2 == 0) {
    uVar3 = 1;
  }
  else {
    snprintf(acStack_138,0x100,"%s/cali",PTR_g_sStorageDir_00501cf8);
    iVar2 = access(acStack_138,0);
    if (iVar2 != 0) {
      mkdir(acStack_138,0x1c0);
    }
    snprintf(acStack_138,0x100,"%s/cali/%s.%d.%lld",PTR_g_sStorageDir_00501cf8,"magcore.cali",
             (ulong)*(uint *)(this + 0xaf0),*(undefined8 *)(this + 0xb68));
    uVar3 = GetCaliFile(this,acStack_138);
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 0017969c (464 bytes) name=ReadPara

/* CNetComm::ReadPara(BasePara1*, BasePara2*, unsigned int) */

void __thiscall
CNetComm::ReadPara(CNetComm *this,BasePara1 *param_1,BasePara2 *param_2,uint param_3)

{
  CNetComm *pCVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  undefined8 uVar6;
  ulong uVar7;
  ulong uVar8;
  undefined4 *puVar9;
  undefined4 uVar10;
  undefined8 uVar11;
  char local_6c [4];
  long local_68;
  
  lVar2 = tpidr_el0;
  local_68 = *(long *)(lVar2 + 0x28);
  if (*(int *)(this + 0x80) == 0) {
LAB_00179814:
    puVar9 = (undefined4 *)__errno();
    uVar6 = 0;
    *puVar9 = 0xe4ae0005;
  }
  else {
    if ((param_1 == (BasePara1 *)0x0) || (param_2 == (BasePara2 *)0x0)) {
      puVar9 = (undefined4 *)__errno();
      uVar10 = 0xe4ae0001;
    }
    else {
      memset(this + 0xaf0,0,0x70);
      local_6c[0] = 'k';
      local_6c[1] = -0x4a;
      local_6c[2] = -0x4a;
      local_6c[3] = 'k';
      if (*(int *)(this + 0x80) == 0) {
        puVar9 = (undefined4 *)__errno();
        iVar3 = 0;
        *puVar9 = 0xe4ae0005;
      }
      else {
        iVar3 = SendCmd(this,local_6c,4);
      }
      local_6c[0] = 'l';
      local_6c[1] = -0x4a;
      local_6c[2] = -0x4a;
      local_6c[3] = 'k';
      if (*(int *)(this + 0x80) == 0) goto LAB_00179814;
      iVar4 = SendCmd(this,local_6c,4);
      uVar6 = 0;
      if ((iVar3 == 0) || (iVar4 == 0)) goto LAB_00179824;
      pCVar1 = this + 0xb28;
      uVar7 = GetTickCount();
      do {
        uVar5 = usleep(10000);
        uVar8 = (ulong)uVar5;
        if ((*(int *)(this + 0xb00) != 0) && (*(int *)pCVar1 != 0)) break;
        uVar8 = GetTickCount();
      } while (uVar8 - (uVar7 & 0xffffffff) < (ulong)param_3);
      if ((*(int *)(this + 0xb00) != 0) && (*(int *)pCVar1 != 0)) {
        uVar6 = 1;
        *(undefined8 *)(param_1 + 0x30) = *(undefined8 *)(this + 0xb20);
        uVar11 = *(undefined8 *)(this + 0xb10);
        *(undefined8 *)(param_1 + 0x28) = *(undefined8 *)(this + 0xb18);
        *(undefined8 *)(param_1 + 0x20) = uVar11;
        uVar11 = *(undefined8 *)(this + 0xb00);
        *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(this + 0xb08);
        *(undefined8 *)(param_1 + 0x10) = uVar11;
        uVar11 = *(undefined8 *)(this + 0xaf0);
        *(undefined8 *)(param_1 + 8) = *(undefined8 *)(this + 0xaf8);
        *(undefined8 *)param_1 = uVar11;
        *(undefined8 *)(param_2 + 0x30) = *(undefined8 *)(this + 0xb58);
        uVar11 = *(undefined8 *)(this + 0xb48);
        *(undefined8 *)(param_2 + 0x28) = *(undefined8 *)(this + 0xb50);
        *(undefined8 *)(param_2 + 0x20) = uVar11;
        uVar11 = *(undefined8 *)(this + 0xb38);
        *(undefined8 *)(param_2 + 0x18) = *(undefined8 *)(this + 0xb40);
        *(undefined8 *)(param_2 + 0x10) = uVar11;
        uVar11 = *(undefined8 *)pCVar1;
        *(undefined8 *)(param_2 + 8) = *(undefined8 *)(this + 0xb30);
        *(undefined8 *)param_2 = uVar11;
        goto LAB_00179824;
      }
      puVar9 = (undefined4 *)__errno(uVar8);
      uVar10 = 0xe4ae0008;
    }
    uVar6 = 0;
    *puVar9 = uVar10;
  }
LAB_00179824:
  if (*(long *)(lVar2 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar6);
}


==================================================================

### FUNC 0017986c (324 bytes) name=SetPara

/* CNetComm::SetPara(BasePara1 const*, BasePara2 const*) */

void __thiscall CNetComm::SetPara(CNetComm *this,BasePara1 *param_1,BasePara2 *param_2)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  undefined4 *puVar5;
  char local_a0 [4];
  undefined8 local_9c;
  undefined8 uStack_94;
  undefined8 local_8c;
  undefined8 uStack_84;
  undefined8 local_7c;
  undefined8 uStack_74;
  undefined8 local_6c;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  if (*(int *)(this + 0x80) == 0) {
    puVar5 = (undefined4 *)__errno();
    bVar2 = false;
    *puVar5 = 0xe4ae0005;
  }
  else if ((param_1 == (BasePara1 *)0x0) || (param_2 == (BasePara2 *)0x0)) {
    puVar5 = (undefined4 *)__errno();
    bVar2 = false;
    *puVar5 = 0xe4ae0001;
  }
  else {
    local_a0[0] = 'm';
    local_a0[1] = -0x4a;
    local_a0[2] = -0x4a;
    local_a0[3] = 'k';
    local_6c = *(undefined8 *)(param_1 + 0x30);
    uStack_74 = *(undefined8 *)(param_1 + 0x28);
    local_7c = *(undefined8 *)(param_1 + 0x20);
    uStack_84 = *(undefined8 *)(param_1 + 0x18);
    local_8c = *(undefined8 *)(param_1 + 0x10);
    uStack_94 = *(undefined8 *)(param_1 + 8);
    local_9c = *(undefined8 *)param_1;
    iVar3 = SendCmd(this,local_a0,0x3c);
    local_a0[0] = 'n';
    local_a0[1] = -0x4a;
    local_a0[2] = -0x4a;
    local_a0[3] = 'k';
    local_6c = *(undefined8 *)(param_2 + 0x30);
    uStack_74 = *(undefined8 *)(param_2 + 0x28);
    local_7c = *(undefined8 *)(param_2 + 0x20);
    uStack_84 = *(undefined8 *)(param_2 + 0x18);
    local_8c = *(undefined8 *)(param_2 + 0x10);
    uStack_94 = *(undefined8 *)(param_2 + 8);
    local_9c = *(undefined8 *)param_2;
    iVar4 = SendCmd(this,local_a0,0x3c);
    bVar2 = iVar3 != 0 && iVar4 != 0;
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(bVar2);
}


==================================================================

### FUNC 001799b0 (24 bytes) name=ThreadPrepare

/* CNetComm::ThreadPrepare(void*) */

undefined8 CNetComm::ThreadPrepare(void *param_1)

{
  TransferCaliFile(param_1);
  return 0;
}


==================================================================

### FUNC 001799c8 (184 bytes) name=DoPrepareInBackground

/* CNetComm::DoPrepareInBackground() */

void __thiscall CNetComm::DoPrepareInBackground(CNetComm *this)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  ulong uVar4;
  pthread_t pStack_78;
  pthread_attr_t pStack_70;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  uVar4 = RefreshCaliFileNeeded(this);
  if ((int)uVar4 != 0) {
    iVar3 = pthread_attr_init(&pStack_70);
    if (iVar3 == 0) {
      iVar3 = pthread_attr_setdetachstate(&pStack_70,1);
      if (iVar3 == 0) {
        iVar3 = pthread_create(&pStack_78,&pStack_70,(__start_routine *)PTR_ThreadPrepare_00501c28,
                               this);
        pthread_attr_destroy(&pStack_70);
        uVar1 = 0xffffffff;
        if (iVar3 == 0) {
          uVar1 = 1;
        }
        uVar4 = (ulong)uVar1;
      }
      else {
        pthread_attr_destroy(&pStack_70);
        uVar4 = 0xffffffff;
      }
    }
    else {
      uVar4 = 0xffffffff;
    }
  }
  if (*(long *)(lVar2 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00179a80 (40 bytes) name=CSmoother

/* CSmoother::CSmoother() */

void __thiscall CSmoother::CSmoother(CSmoother *this)

{
  undefined *puVar1;
  
  puVar1 = PTR_vtable_00501cd8;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined **)this = puVar1 + 0x10;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 8) = 0;
  return;
}


==================================================================

### FUNC 00179aa8 (96 bytes) name=~CSmoother

/* CSmoother::~CSmoother() */

void __thiscall CSmoother::~CSmoother(CSmoother *this)

{
  *(undefined **)this = PTR_vtable_00501cd8 + 0x10;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
    *(undefined8 *)(this + 0x18) = 0;
  }
  if (*(void **)(this + 0x20) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x20));
    *(undefined8 *)(this + 0x20) = 0;
  }
  return;
}


==================================================================

### FUNC 00179b08 (96 bytes) name=~CSmoother

/* CSmoother::~CSmoother() */

void __thiscall CSmoother::~CSmoother(CSmoother *this)

{
  *(undefined **)this = PTR_vtable_00501cd8 + 0x10;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
    *(undefined8 *)(this + 0x18) = 0;
  }
  if (*(void **)(this + 0x20) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x20));
  }
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00179b68 (232 bytes) name=Reset

/* CSmoother::Reset(unsigned int, unsigned int, int, unsigned int) */

undefined8 __thiscall
CSmoother::Reset(CSmoother *this,uint param_1,uint param_2,int param_3,uint param_4)

{
  long lVar1;
  undefined8 uVar2;
  void *pvVar3;
  ulong __n;
  
  *(undefined4 *)(this + 0x3c) = 0;
  if (*(void **)(this + 8) != (void *)0x0) {
    operator_delete__(*(void **)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x10) = 0;
  if (*(void **)(this + 0x18) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x18));
    *(undefined8 *)(this + 0x18) = 0;
  }
  if (*(void **)(this + 0x20) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x20));
    *(undefined8 *)(this + 0x20) = 0;
  }
  uVar2 = 0;
  if ((param_1 != 0) && (param_2 != 0)) {
    *(undefined4 *)(this + 0x30) = 0;
    *(uint *)(this + 0x34) = param_1;
    *(uint *)(this + 0x38) = param_2;
    pvVar3 = operator_new__((ulong)param_4 + (ulong)(param_2 * param_1) * 2 + 1 & 0x3fffffffe);
    lVar1 = (long)pvVar3 + (ulong)(param_4 & 0xfffffffe);
    __n = (ulong)param_1 << 2;
    *(void **)(this + 8) = pvVar3;
    *(long *)(this + 0x10) = lVar1;
    *(long *)(this + 0x28) = lVar1;
    pvVar3 = operator_new__(__n);
    *(void **)(this + 0x18) = pvVar3;
    memset(pvVar3,0,__n);
    if (param_3 != 0) {
      pvVar3 = operator_new__((ulong)param_1 << 1);
      *(void **)(this + 0x20) = pvVar3;
    }
    uVar2 = 1;
    *(undefined4 *)(this + 0x3c) = 1;
  }
  return uVar2;
}


==================================================================

### FUNC 00179c50 (520 bytes) name=PushFrameSum

/* CSmoother::PushFrameSum(unsigned short const*) */

bool __thiscall CSmoother::PushFrameSum(CSmoother *this,ushort *param_1)

{
  ulong uVar1;
  ushort *puVar2;
  int *piVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  uint uVar8;
  int *piVar9;
  ushort *puVar10;
  ushort *puVar11;
  long lVar12;
  ushort uVar13;
  ushort uVar15;
  ushort uVar16;
  ushort uVar17;
  undefined8 uVar14;
  ushort uVar18;
  ushort uVar19;
  ushort uVar20;
  ushort uVar21;
  ushort uVar22;
  ushort uVar23;
  ushort uVar24;
  ushort uVar25;
  ushort uVar26;
  ushort uVar27;
  ushort uVar28;
  ushort uVar29;
  ushort uVar30;
  ushort uVar31;
  ushort uVar32;
  ushort uVar33;
  ushort uVar34;
  ushort uVar35;
  ushort uVar36;
  ushort uVar37;
  ushort uVar38;
  ushort uVar39;
  ushort uVar40;
  ushort uVar41;
  ushort uVar42;
  ushort uVar43;
  ushort uVar44;
  ushort uVar45;
  
  if ((*(int *)(this + 0x3c) == 0) || (piVar9 = *(int **)(this + 0x18), piVar9 == (int *)0x0)) {
    return false;
  }
  iVar4 = *(int *)(this + 0x30);
  uVar5 = *(uint *)(this + 0x34);
  *(uint *)(this + 0x30) = iVar4 + 1U;
  uVar8 = uVar5 >> 2;
  if (*(uint *)(this + 0x38) < iVar4 + 1U) {
    if (uVar8 != 0) {
      puVar11 = *(ushort **)(this + 0x28);
      uVar1 = (ulong)(uVar8 - 1) + 1;
      puVar10 = param_1;
      if (3 < uVar1) {
        uVar5 = uVar5 >> 2 & 3;
        lVar12 = uVar1 - uVar5;
        if (lVar12 != 0) {
          uVar8 = uVar8 - (int)lVar12;
          lVar7 = lVar12 * 4;
          puVar2 = puVar11 + lVar12 * 4;
          piVar3 = piVar9 + lVar12 * 4;
          do {
            uVar13 = *puVar10;
            uVar18 = puVar10[1];
            uVar22 = puVar10[2];
            uVar26 = puVar10[3];
            uVar15 = puVar10[4];
            uVar19 = puVar10[5];
            uVar23 = puVar10[6];
            uVar27 = puVar10[7];
            uVar16 = puVar10[8];
            uVar20 = puVar10[9];
            uVar24 = puVar10[10];
            uVar28 = puVar10[0xb];
            uVar17 = puVar10[0xc];
            uVar21 = puVar10[0xd];
            uVar25 = puVar10[0xe];
            uVar29 = puVar10[0xf];
            puVar10 = puVar10 + 0x10;
            uVar30 = *puVar11;
            uVar34 = puVar11[1];
            uVar38 = puVar11[2];
            uVar42 = puVar11[3];
            uVar31 = puVar11[4];
            uVar35 = puVar11[5];
            uVar39 = puVar11[6];
            uVar43 = puVar11[7];
            uVar32 = puVar11[8];
            uVar36 = puVar11[9];
            uVar40 = puVar11[10];
            uVar44 = puVar11[0xb];
            uVar33 = puVar11[0xc];
            uVar37 = puVar11[0xd];
            uVar41 = puVar11[0xe];
            uVar45 = puVar11[0xf];
            puVar11 = puVar11 + 0x10;
            lVar12 = lVar12 + -4;
            *piVar9 = ((uint)uVar13 - (uint)uVar30) + *piVar9;
            piVar9[1] = ((uint)uVar18 - (uint)uVar34) + piVar9[1];
            piVar9[2] = ((uint)uVar22 - (uint)uVar38) + piVar9[2];
            piVar9[3] = ((uint)uVar26 - (uint)uVar42) + piVar9[3];
            piVar9[4] = ((uint)uVar15 - (uint)uVar31) + piVar9[4];
            piVar9[5] = ((uint)uVar19 - (uint)uVar35) + piVar9[5];
            piVar9[6] = ((uint)uVar23 - (uint)uVar39) + piVar9[6];
            piVar9[7] = ((uint)uVar27 - (uint)uVar43) + piVar9[7];
            piVar9[8] = ((uint)uVar16 - (uint)uVar32) + piVar9[8];
            piVar9[9] = ((uint)uVar20 - (uint)uVar36) + piVar9[9];
            piVar9[10] = ((uint)uVar24 - (uint)uVar40) + piVar9[10];
            piVar9[0xb] = ((uint)uVar28 - (uint)uVar44) + piVar9[0xb];
            piVar9[0xc] = ((uint)uVar17 - (uint)uVar33) + piVar9[0xc];
            piVar9[0xd] = ((uint)uVar21 - (uint)uVar37) + piVar9[0xd];
            piVar9[0xe] = ((uint)uVar25 - (uint)uVar41) + piVar9[0xe];
            piVar9[0xf] = ((uint)uVar29 - (uint)uVar45) + piVar9[0xf];
            piVar9 = piVar9 + 0x10;
          } while (lVar12 != 0);
          puVar10 = param_1 + lVar7;
          puVar11 = puVar2;
          piVar9 = piVar3;
          if (uVar5 == 0) goto LAB_00179e08;
        }
      }
      do {
        uVar8 = uVar8 - 1;
        *piVar9 = ((uint)*puVar10 - (uint)*puVar11) + *piVar9;
        piVar9[1] = ((uint)puVar10[1] - (uint)puVar11[1]) + piVar9[1];
        piVar9[2] = ((uint)puVar10[2] - (uint)puVar11[2]) + piVar9[2];
        puVar2 = puVar11 + 3;
        puVar11 = puVar11 + 4;
        piVar9[3] = ((uint)puVar10[3] - (uint)*puVar2) + piVar9[3];
        piVar9 = piVar9 + 4;
        puVar10 = puVar10 + 4;
      } while (uVar8 != 0);
    }
  }
  else if (uVar8 != 0) {
    uVar1 = (ulong)(uVar8 - 1) + 1;
    puVar11 = param_1;
    if (3 < uVar1) {
      uVar5 = uVar5 >> 2 & 3;
      lVar12 = uVar1 - uVar5;
      if (lVar12 != 0) {
        uVar8 = uVar8 - (int)lVar12;
        lVar7 = lVar12 * 4;
        piVar3 = piVar9 + lVar12 * 4;
        do {
          uVar13 = *puVar11;
          uVar18 = puVar11[1];
          uVar22 = puVar11[2];
          uVar26 = puVar11[3];
          uVar15 = puVar11[4];
          uVar19 = puVar11[5];
          uVar23 = puVar11[6];
          uVar27 = puVar11[7];
          uVar16 = puVar11[8];
          uVar20 = puVar11[9];
          uVar24 = puVar11[10];
          uVar28 = puVar11[0xb];
          uVar17 = puVar11[0xc];
          uVar21 = puVar11[0xd];
          uVar25 = puVar11[0xe];
          uVar29 = puVar11[0xf];
          puVar11 = puVar11 + 0x10;
          lVar12 = lVar12 + -4;
          *piVar9 = *piVar9 + (uint)uVar13;
          piVar9[1] = piVar9[1] + (uint)uVar18;
          piVar9[2] = piVar9[2] + (uint)uVar22;
          piVar9[3] = piVar9[3] + (uint)uVar26;
          piVar9[4] = piVar9[4] + (uint)uVar15;
          piVar9[5] = piVar9[5] + (uint)uVar19;
          piVar9[6] = piVar9[6] + (uint)uVar23;
          piVar9[7] = piVar9[7] + (uint)uVar27;
          piVar9[8] = piVar9[8] + (uint)uVar16;
          piVar9[9] = piVar9[9] + (uint)uVar20;
          piVar9[10] = piVar9[10] + (uint)uVar24;
          piVar9[0xb] = piVar9[0xb] + (uint)uVar28;
          piVar9[0xc] = piVar9[0xc] + (uint)uVar17;
          piVar9[0xd] = piVar9[0xd] + (uint)uVar21;
          piVar9[0xe] = piVar9[0xe] + (uint)uVar25;
          piVar9[0xf] = piVar9[0xf] + (uint)uVar29;
          piVar9 = piVar9 + 0x10;
        } while (lVar12 != 0);
        puVar11 = param_1 + lVar7;
        piVar9 = piVar3;
        if (uVar5 == 0) goto LAB_00179e08;
      }
    }
    do {
      uVar14 = *(undefined8 *)puVar11;
      uVar8 = uVar8 - 1;
      *(ulong *)(piVar9 + 2) =
           CONCAT44((int)((ulong)*(undefined8 *)(piVar9 + 2) >> 0x20) +
                    (uint)(ushort)((ulong)uVar14 >> 0x30),
                    (int)*(undefined8 *)(piVar9 + 2) + (uint)(ushort)((ulong)uVar14 >> 0x20));
      *(ulong *)piVar9 =
           CONCAT44((int)((ulong)*(undefined8 *)piVar9 >> 0x20) +
                    (uint)(ushort)((ulong)uVar14 >> 0x10),
                    (int)*(undefined8 *)piVar9 + (uint)(ushort)uVar14);
      puVar11 = puVar11 + 4;
      piVar9 = piVar9 + 4;
    } while (uVar8 != 0);
  }
LAB_00179e08:
  memcpy(*(void **)(this + 0x28),param_1,(ulong)*(uint *)(this + 0x34) << 1);
  uVar5 = *(uint *)(this + 0x30);
  uVar8 = *(uint *)(this + 0x38);
  uVar6 = 0;
  if (uVar8 != 0) {
    uVar6 = uVar5 / uVar8;
  }
  if (uVar5 == uVar6 * uVar8) {
    lVar12 = *(long *)(this + 0x10);
  }
  else {
    lVar12 = *(long *)(this + 0x28) + (ulong)*(uint *)(this + 0x34) * 2;
  }
  *(long *)(this + 0x28) = lVar12;
  return uVar8 <= uVar5;
}


==================================================================

### FUNC 00179e58 (724 bytes) name=PushFrameAve

/* CSmoother::PushFrameAve(unsigned short*, unsigned int) */

bool __thiscall CSmoother::PushFrameAve(CSmoother *this,ushort *param_1,uint param_2)

{
  ushort *puVar1;
  ushort *puVar2;
  uint uVar3;
  bool bVar4;
  uint uVar5;
  uint uVar6;
  ulong uVar7;
  ushort *puVar8;
  long lVar9;
  ushort *puVar10;
  ushort uVar11;
  ushort uVar12;
  ushort uVar13;
  ushort uVar14;
  ushort uVar15;
  ushort uVar16;
  uint uVar17;
  undefined8 uVar18;
  uint uVar19;
  uint uVar20;
  undefined8 uVar21;
  uint uVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  uint uVar25;
  uint uVar26;
  uint uVar27;
  uint uVar28;
  
  if (*(int *)(this + 0x3c) == 0) {
LAB_00179f24:
    bVar4 = false;
  }
  else {
    uVar5 = *(int *)(this + 0x30) + 1;
    *(uint *)(this + 0x30) = uVar5;
    if (*(uint *)(this + 0x38) < uVar5) {
      if (*(uint *)(this + 0x38) != 1) goto LAB_00179f24;
      uVar6 = *(uint *)(this + 0x34);
      if (uVar6 != 0) {
        puVar8 = *(ushort **)(this + 0x10);
        uVar7 = (ulong)(uVar6 - 1);
        if (7 < uVar7 + 1) {
          uVar3 = uVar6 & 7;
          lVar9 = (uVar7 + 1) - (ulong)uVar3;
          if ((lVar9 != 0) && ((param_1 + uVar7 + 1 <= puVar8 || (puVar8 + uVar7 + 1 <= param_1))))
          {
            uVar6 = uVar6 - (int)lVar9;
            puVar1 = param_1 + lVar9;
            puVar2 = puVar8 + lVar9;
            puVar10 = param_1 + 4;
            do {
              uVar24 = *(undefined8 *)puVar10;
              uVar23 = *(undefined8 *)(puVar10 + -4);
              uVar21 = *(undefined8 *)(puVar8 + 4);
              uVar18 = *(undefined8 *)puVar8;
              uVar11 = (ushort)((ulong)uVar23 >> 0x10);
              uVar13 = (ushort)((ulong)uVar23 >> 0x20);
              uVar15 = (ushort)((ulong)uVar23 >> 0x30);
              uVar25 = ((uint)uVar23 & 0xffff) - ((uint)uVar18 & 0xffff);
              uVar26 = (uint)uVar11 - (uint)(ushort)((ulong)uVar18 >> 0x10);
              uVar27 = (uint)uVar13 - (uint)(ushort)((ulong)uVar18 >> 0x20);
              uVar28 = (uint)uVar15 - (uint)(ushort)((ulong)uVar18 >> 0x30);
              uVar12 = (ushort)((ulong)uVar24 >> 0x10);
              uVar14 = (ushort)((ulong)uVar24 >> 0x20);
              uVar16 = (ushort)((ulong)uVar24 >> 0x30);
              uVar17 = ((uint)uVar24 & 0xffff) - (uint)(ushort)uVar21;
              uVar19 = (uint)uVar12 - (uint)(ushort)((ulong)uVar21 >> 0x10);
              uVar20 = (uint)uVar14 - (uint)(ushort)((ulong)uVar21 >> 0x20);
              uVar22 = (uint)uVar16 - (uint)(ushort)((ulong)uVar21 >> 0x30);
              *(undefined8 *)(puVar8 + 4) = uVar24;
              *(undefined8 *)puVar8 = uVar23;
              if ((bool)((int)-uVar25 <= (int)param_2 & ~(uVar25 == 0) & (int)uVar25 <= (int)param_2
                        )) {
                puVar10[-4] = (short)uVar23 - (short)(uVar25 >> 1);
              }
              if ((bool)((int)-uVar26 <= (int)param_2 & ~(uVar26 == 0) & (int)uVar26 <= (int)param_2
                        )) {
                puVar10[-3] = uVar11 - (short)(uVar26 >> 1);
              }
              if ((bool)((int)-uVar27 <= (int)param_2 & ~(uVar27 == 0) & (int)uVar27 <= (int)param_2
                        )) {
                puVar10[-2] = uVar13 - (short)(uVar27 >> 1);
              }
              if ((bool)((int)-uVar28 <= (int)param_2 & ~(uVar28 == 0) & (int)uVar28 <= (int)param_2
                        )) {
                puVar10[-1] = uVar15 - (short)(uVar28 >> 1);
              }
              if ((bool)((int)-uVar17 <= (int)param_2 & ~(uVar17 == 0) & (int)uVar17 <= (int)param_2
                        )) {
                *puVar10 = (short)uVar24 - (short)(uVar17 >> 1);
              }
              if ((bool)((int)-uVar19 <= (int)param_2 & ~(uVar19 == 0) & (int)uVar19 <= (int)param_2
                        )) {
                puVar10[1] = uVar12 - (short)(uVar19 >> 1);
              }
              if ((bool)((int)-uVar20 <= (int)param_2 & ~(uVar20 == 0) & (int)uVar20 <= (int)param_2
                        )) {
                puVar10[2] = uVar14 - (short)(uVar20 >> 1);
              }
              if ((bool)((int)-uVar22 <= (int)param_2 & ~(uVar22 == 0) & (int)uVar22 <= (int)param_2
                        )) {
                puVar10[3] = uVar16 - (short)(uVar22 >> 1);
              }
              lVar9 = lVar9 + -8;
              puVar10 = puVar10 + 8;
              puVar8 = puVar8 + 8;
            } while (lVar9 != 0);
            param_1 = puVar1;
            puVar8 = puVar2;
            if (uVar3 == 0) goto LAB_00179f1c;
          }
        }
        do {
          uVar11 = *param_1;
          uVar12 = *puVar8;
          *puVar8 = uVar11;
          uVar3 = (uint)uVar11 - (uint)uVar12;
          if ((((int)uVar3 <= (int)param_2) && ((int)-uVar3 <= (int)param_2)) && (uVar3 != 0)) {
            *param_1 = uVar11 - (short)(uVar3 >> 1);
          }
          uVar6 = uVar6 - 1;
          param_1 = param_1 + 1;
          puVar8 = puVar8 + 1;
        } while (uVar6 != 0);
      }
LAB_00179f1c:
      uVar6 = 1;
    }
    else {
      memcpy(*(void **)(this + 0x28),param_1,(ulong)*(uint *)(this + 0x34) << 1);
      uVar5 = *(uint *)(this + 0x30);
      uVar6 = *(uint *)(this + 0x38);
    }
    uVar3 = 0;
    if (uVar6 != 0) {
      uVar3 = uVar5 / uVar6;
    }
    if (uVar5 == uVar3 * uVar6) {
      lVar9 = *(long *)(this + 0x10);
    }
    else {
      lVar9 = *(long *)(this + 0x28) + (ulong)*(uint *)(this + 0x34) * 2;
    }
    bVar4 = uVar6 <= uVar5;
    *(long *)(this + 0x28) = lVar9;
  }
  return bVar4;
}


==================================================================

### FUNC 0017a12c (44 bytes) name=Restart

/* CSmoother::Restart() */

void __thiscall CSmoother::Restart(CSmoother *this)

{
  if (*(int *)(this + 0x3c) != 0) {
    *(undefined4 *)(this + 0x30) = 0;
    *(undefined8 *)(this + 0x28) = *(undefined8 *)(this + 0x10);
    memset(*(void **)(this + 0x18),0,(ulong)*(uint *)(this + 0x34) << 2);
    return;
  }
  return;
}


==================================================================

### FUNC 0017a158 (332 bytes) name=GetSTDFrame

/* CSmoother::GetSTDFrame() */

void * __thiscall CSmoother::GetSTDFrame(CSmoother *this)

{
  int iVar1;
  int iVar2;
  int iVar3;
  void *pvVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  
  if ((*(int *)(this + 0x3c) != 0) && (*(long *)(this + 0x18) != 0)) {
    pvVar4 = *(void **)(this + 0x20);
    if (pvVar4 == (void *)0x0) {
      return (void *)0x0;
    }
    uVar5 = *(uint *)(this + 0x38);
    if (uVar5 <= *(uint *)(this + 0x30)) {
      iVar3 = uVar5 - 1;
      if (uVar5 == 0 || iVar3 == 0) {
        memset(pvVar4,0,(ulong)*(uint *)(this + 0x34) << 1);
        return *(void **)(this + 0x20);
      }
      uVar6 = *(uint *)(this + 0x34);
      if (uVar6 == 0) {
        return pvVar4;
      }
      iVar2 = uVar5 * uVar5;
      uVar9 = 0;
      if (uVar5 != 0) goto LAB_0017a204;
      do {
        uVar10 = (ulong)uVar9;
        dVar11 = 0.0;
        while( true ) {
          dVar11 = (1.0 / (double)(uint)(iVar2 * iVar3)) * dVar11;
          dVar12 = SQRT(dVar11);
          if (NAN(dVar12)) {
            dVar12 = sqrt(dVar11);
          }
          pvVar4 = *(void **)(this + 0x20);
          uVar9 = uVar9 + 1;
          *(short *)((long)pvVar4 + uVar10 * 2) = (short)(int)dVar12;
          uVar6 = *(uint *)(this + 0x34);
          if (uVar6 <= uVar9) {
            return pvVar4;
          }
          uVar5 = *(uint *)(this + 0x38);
          if (uVar5 == 0) break;
LAB_0017a204:
          uVar10 = (ulong)uVar9;
          iVar1 = *(int *)(*(long *)(this + 0x18) + (ulong)uVar9 * 4);
          dVar11 = (double)(int)(uVar5 * *(ushort *)(*(long *)(this + 0x10) + (ulong)uVar9 * 2) -
                                iVar1);
          dVar11 = dVar11 * dVar11 + 0.0;
          if (uVar5 != 1) {
            uVar8 = 1;
            uVar7 = uVar9;
            do {
              uVar7 = uVar6 + uVar7;
              uVar8 = uVar8 + 1;
              dVar12 = (double)(int)(uVar5 * *(ushort *)(*(long *)(this + 0x10) + (ulong)uVar7 * 2)
                                    - iVar1);
              dVar11 = dVar11 + dVar12 * dVar12;
            } while (uVar8 < uVar5);
          }
        }
      } while( true );
    }
  }
  return (void *)0x0;
}


==================================================================

### FUNC 0017a2a4 (212 bytes) name=GetLogFileName

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* GetLogFileName() */

undefined * GetLogFileName(void)

{
  long lVar1;
  int iVar2;
  tm *ptVar3;
  time_t tStack_140;
  char acStack_138 [256];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  time(&tStack_140);
  ptVar3 = localtime(&tStack_140);
  memset(acStack_138,0,0x100);
  snprintf(acStack_138,0x100,"%s/log",PTR_g_sStorageDir_00501cf8);
  iVar2 = access(acStack_138,0);
  if (iVar2 != 0) {
    mkdir(acStack_138,0x1c0);
  }
  iVar2 = sprintf(&DAT_00509791,"%s/coresdk-%d-%02d-%02d.log",acStack_138,
                  (ulong)(ptVar3->tm_year + 0x76c),(ulong)(ptVar3->tm_mon + 1),
                  (ulong)(uint)ptVar3->tm_mday);
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return &DAT_00509791;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar2);
}


==================================================================

### FUNC 0017a378 (176 bytes) name=MAG_RevisedTemp2InnerTemp

uint MAG_RevisedTemp2InnerTemp(uint param_1,int param_2)

{
  uint uVar1;
  CFunctions *this;
  undefined4 *puVar2;
  
  if (0x80 < param_1) {
    return 0xffffffff;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0xffffffff;
  }
  this = (CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (this == (CFunctions *)0x0) {
    return 0xffffffff;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(this + 0xec) != 0) {
      uVar1 = CFunctions::SearchInnerTemp(this,param_2);
      return uVar1 & 0xffff;
    }
    puVar2 = (undefined4 *)__errno();
    *puVar2 = 0xe4ae0005;
    return 0xfffffffe;
  }
  return 0xffffffff;
}


==================================================================

### FUNC 0017a428 (84 bytes) name=MAG_IsChannelAvailable

undefined8 MAG_IsChannelAvailable(uint param_1)

{
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
    return 1;
  }
  return 0;
}


==================================================================

### FUNC 0017a47c (176 bytes) name=MAG_RevisedTemp2Gray

uint MAG_RevisedTemp2Gray(uint param_1,int param_2)

{
  uint uVar1;
  CFunctions *this;
  undefined4 *puVar2;
  
  if (0x80 < param_1) {
    return 0xffffffff;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0xffffffff;
  }
  this = (CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (this == (CFunctions *)0x0) {
    return 0xffffffff;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(this + 0xec) != 0) {
      uVar1 = CFunctions::SearchInnerGray(this,param_2);
      return uVar1 & 0xffff;
    }
    puVar2 = (undefined4 *)__errno();
    *puVar2 = 0xe4ae0005;
    return 0xfffffffe;
  }
  return 0xffffffff;
}


==================================================================

### FUNC 0017a52c (280 bytes) name=MAG_GetCurrentOffset

undefined4 MAG_GetCurrentOffset(uint param_1,char *param_2,int *param_3,int *param_4)

{
  int iVar1;
  int iVar2;
  undefined4 uVar3;
  ushort *__dest;
  undefined4 *puVar4;
  ulong uVar5;
  long lVar6;
  
  if (((param_2 == (char *)0x0) || (param_3 == (int *)0x0)) || (param_4 == (int *)0x0)) {
    puVar4 = (undefined4 *)__errno();
    *puVar4 = 0xe4ae0001;
  }
  else {
    *param_3 = 0;
    *param_4 = 0;
    if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
      uVar5 = (ulong)param_1;
      lVar6 = (&DAT_005098a0)[uVar5 * 0x93];
      if ((lVar6 != 0) && ((&DAT_00509898)[uVar5 * 0x93] != 0)) {
        if (*(int *)(lVar6 + 0xec) != 0) {
          iVar1 = *(int *)(&DAT_00509900 + uVar5 * 0x498);
          iVar2 = *(int *)(&DAT_00509904 + uVar5 * 0x498);
          uVar5 = (ulong)(uint)(iVar2 * iVar1);
          __dest = operator_new__(uVar5 << 2);
          memcpy(__dest,*(void **)(lVar6 + 0x140),uVar5 << 1);
          uVar3 = GetOffset(param_2,__dest,iVar1,iVar2,param_3,param_4);
          operator_delete__(__dest);
          return uVar3;
        }
        puVar4 = (undefined4 *)__errno();
        *puVar4 = 0xe4ae0006;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 0017a644 (76 bytes) name=MAG_SetStorageDir

void MAG_SetStorageDir(char *param_1)

{
  undefined *puVar1;
  size_t sVar2;
  int iVar3;
  
  sVar2 = strlen(param_1);
  puVar1 = PTR_g_sStorageDir_00501cf8;
  iVar3 = 0xff;
  if ((int)sVar2 + 1 < 0xff) {
    iVar3 = (int)sVar2 + 1;
  }
  strncpy(PTR_g_sStorageDir_00501cf8,param_1,(long)iVar3);
  puVar1[0xff] = 0;
  return;
}


==================================================================

### FUNC 0017a690 (124 bytes) name=MAG_GetCurrentCameraInnerTemperature

undefined4 MAG_GetCurrentCameraInnerTemperature(uint param_1)

{
  long lVar1;
  
  if (0x80 < param_1) {
    return 0x80000000;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0x80000000;
  }
  lVar1 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (lVar1 == 0) {
    return 0x80000000;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(lVar1 + 0xec) != 0) {
      return *(undefined4 *)(lVar1 + 0x44);
    }
    return 0x80000000;
  }
  return 0x80000000;
}


==================================================================

### FUNC 0017a70c (360 bytes) name=MAG_NewChannel

undefined8 MAG_NewChannel(uint param_1)

{
  undefined4 *puVar1;
  CVideoFunctions *pCVar2;
  CFunctions *this;
  CNetComm *this_00;
  long *plVar3;
  undefined4 uVar4;
  long *__s;
  long *plVar5;
  long *plVar6;
  
  if (0x80 < param_1) {
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0001;
    return 0;
  }
  __s = &DAT_00509898 + (ulong)param_1 * 0x93;
  plVar5 = &DAT_005098a8 + (ulong)param_1 * 0x93;
  if (((*plVar5 != 0) || (plVar6 = &DAT_005098a0 + (ulong)param_1 * 0x93, *plVar6 != 0)) ||
     (*__s != 0)) {
    puVar1 = (undefined4 *)__errno();
    uVar4 = 0xe4ae0003;
    goto LAB_0017a794;
  }
  memset(__s,0,0x498);
  pCVar2 = operator_new(0x178);
  CVideoFunctions::CVideoFunctions(pCVar2);
  *__s = (long)pCVar2;
  this = operator_new(0x76e8);
  CFunctions::CFunctions(this);
  *plVar6 = (long)this;
  this_00 = operator_new(0xb70);
  CNetComm::CNetComm(this_00);
  *plVar5 = (long)this_00;
  plVar3 = (long *)*plVar6;
  pCVar2 = (CVideoFunctions *)*__s;
  if (plVar3 == (long *)0x0) {
    if (pCVar2 != (CVideoFunctions *)0x0) {
      CVideoFunctions::~CVideoFunctions(pCVar2);
      operator_delete(pCVar2);
      *__s = 0;
      plVar3 = (long *)*plVar6;
      if (plVar3 != (long *)0x0) goto LAB_0017a838;
    }
  }
  else {
    if (pCVar2 != (CVideoFunctions *)0x0) {
      *(uint *)(this_00 + 0x334) = param_1;
      return 1;
    }
LAB_0017a838:
    (**(code **)(*plVar3 + 8))();
    *plVar6 = 0;
  }
  if ((long *)*plVar5 != (long *)0x0) {
    (**(code **)(*(long *)*plVar5 + 8))();
    *plVar5 = 0;
  }
  puVar1 = (undefined4 *)__errno();
  uVar4 = 0xe4ae0002;
LAB_0017a794:
  *puVar1 = uVar4;
  return 0;
}


==================================================================

### FUNC 0017a890 (192 bytes) name=MAG_DelChannel

void MAG_DelChannel(uint param_1)

{
  long *plVar1;
  CVideoFunctions *this;
  long *plVar2;
  
  if (param_1 < 0x81) {
    plVar1 = &DAT_00509898 + (ulong)param_1 * 0x93;
    plVar2 = &DAT_005098a8 + (ulong)param_1 * 0x93;
    if (((*plVar2 != 0) && ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) && (*plVar1 != 0)) {
      MAG_Free();
    }
    this = (CVideoFunctions *)*plVar1;
    if (this != (CVideoFunctions *)0x0) {
      CVideoFunctions::~CVideoFunctions(this);
      operator_delete(this);
      *plVar1 = 0;
    }
    plVar1 = (long *)(&DAT_005098a0)[(ulong)param_1 * 0x93];
    if (plVar1 != (long *)0x0) {
      (**(code **)(*plVar1 + 8))();
      (&DAT_005098a0)[(ulong)param_1 * 0x93] = 0;
    }
    if ((long *)*plVar2 != (long *)0x0) {
      (**(code **)(*(long *)*plVar2 + 8))();
      *plVar2 = 0;
    }
  }
  return;
}


==================================================================

### FUNC 0017a950 (188 bytes) name=MAG_Free

void MAG_Free(uint param_1)

{
  CNetComm *this;
  ulong uVar1;
  long *plVar2;
  
  if (param_1 < 0x81) {
    plVar2 = &DAT_005098a8 + (ulong)param_1 * 0x93;
    this = (CNetComm *)*plVar2;
    if (((this != (CNetComm *)0x0) && (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0))
       && ((&DAT_00509898)[uVar1 * 0x93] != 0)) {
      if (*(int *)(&DAT_005098c0 + uVar1 * 0x498) != 0) {
        MAG_StopProcessImage(param_1);
        this = (CNetComm *)*plVar2;
      }
      if (*(int *)(this + 0x84) != 0) {
        CNetComm::StopReceiveImg(this,0);
        this = (CNetComm *)*plVar2;
      }
      if (*(int *)(this + 0x80) != 0) {
        CNetComm::DisLink(this,0,0);
        this = (CNetComm *)*plVar2;
      }
      if (*(int *)(this + 0x7c) != 0) {
        CNetComm::DeInit(this);
        return;
      }
    }
  }
  return;
}


==================================================================

### FUNC 0017aa0c (108 bytes) name=MAG_IsInitialized

undefined4 MAG_IsInitialized(uint param_1)

{
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_005098a0)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    return *(undefined4 *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x7c);
  }
  return 0;
}


==================================================================

### FUNC 0017aa78 (156 bytes) name=MAG_Initialize

bool MAG_Initialize(uint param_1)

{
  long lVar1;
  int iVar2;
  CNetComm *this;
  ulong uVar3;
  
  if (param_1 < 0x81) {
    this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93];
    if (this == (CNetComm *)0x0) {
      return false;
    }
    uVar3 = (ulong)param_1;
    if (((&DAT_005098a0)[uVar3 * 0x93] != 0) && ((&DAT_00509898)[uVar3 * 0x93] != 0)) {
      lVar1 = uVar3 * 0x498;
      *(undefined8 *)(&DAT_005098c0 + lVar1) = 0;
      *(undefined8 *)(&DAT_005098d0 + lVar1) = 0;
      *(undefined8 *)(&DAT_005098d8 + lVar1) = 0;
      if (*(int *)(this + 0x7c) != 0) {
        CNetComm::DeInit(this);
        this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93];
      }
      iVar2 = CNetComm::Init(this);
      return iVar2 != 0;
    }
  }
  return false;
}


==================================================================

### FUNC 0017ab14 (172 bytes) name=MAG_StopProcessImage

void MAG_StopProcessImage(uint param_1)

{
  long lVar1;
  CNetComm *this;
  void *pvVar2;
  CVideoFunctions *this_00;
  ulong uVar3;
  
  if ((param_1 < 0x81) &&
     (this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93], this != (CNetComm *)0x0)) {
    uVar3 = (ulong)param_1;
    if ((&DAT_005098a0)[uVar3 * 0x93] != 0) {
      this_00 = (CVideoFunctions *)(&DAT_00509898)[uVar3 * 0x93];
      if (this_00 != (CVideoFunctions *)0x0) {
        if (*(int *)(this + 0x84) != 0) {
          CNetComm::StopReceiveImg(this,0);
          this_00 = (CVideoFunctions *)(&DAT_00509898)[uVar3 * 0x93];
        }
        lVar1 = uVar3 * 0x498;
        *(undefined8 *)(&DAT_005098c0 + lVar1) = 0;
        *(undefined8 *)(&DAT_005098d8 + lVar1) = 0;
        CVideoFunctions::ReleaseMemory(this_00);
        CFunctions::ReleaseMemory((CFunctions *)(&DAT_005098a0)[uVar3 * 0x93]);
        pvVar2 = *(void **)(&DAT_005098d0 + lVar1);
        if (pvVar2 != (void *)0x0) {
          operator_delete__(pvVar2);
          *(undefined8 *)(&DAT_005098d0 + lVar1) = 0;
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0017abc0 (8 bytes) name=MAG_GetLocalIp

undefined8 MAG_GetLocalIp(void)

{
  return 0;
}


==================================================================

### FUNC 0017abc8 (12 bytes) name=MAG_SetFilter

void MAG_SetFilter(undefined4 param_1)

{
  DAT_0052e930 = param_1;
  return;
}


==================================================================

### FUNC 0017abd4 (16 bytes) name=MAG_EnableAutoReConnect

void MAG_EnableAutoReConnect(undefined4 param_1)

{
  *(undefined4 *)PTR_m_bEnableMonitor_00501a50 = param_1;
  return;
}


==================================================================

### FUNC 0017abe4 (44 bytes) name=MAG_EnumCameras

undefined8 MAG_EnumCameras(void)

{
  undefined8 uVar1;
  
  if (((DAT_005098a8 != (CNetComm *)0x0) && (DAT_005098a0 != 0)) && (DAT_00509898 != 0)) {
    uVar1 = CNetComm::EnumCameras(DAT_005098a8);
    return uVar1;
  }
  return 0;
}


==================================================================

### FUNC 0017ac10 (108 bytes) name=MAG_IsLinked

undefined4 MAG_IsLinked(uint param_1)

{
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_005098a0)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    return *(undefined4 *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x80);
  }
  return 0;
}


==================================================================

### FUNC 0017ac7c (8 bytes) name=MAG_IsListening

undefined8 MAG_IsListening(void)

{
  return 0;
}


==================================================================

### FUNC 0017ac84 (192 bytes) name=MAG_LinkCamera

bool MAG_LinkCamera(uint param_1,char *param_2)

{
  int iVar1;
  long lVar2;
  uint extraout_w1;
  long *plVar3;
  
  if (param_1 < 0x81) {
    plVar3 = &DAT_005098a8 + (ulong)param_1 * 0x93;
    lVar2 = *plVar3;
    if (lVar2 == 0) {
      return false;
    }
    if ((((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0) &&
        ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) && (*(int *)(lVar2 + 0x80) == 0)) {
      iVar1 = CNetComm::LinkCamera((uint)lVar2,param_2,"",0x43ad5e,0x833c,(char *)0x0,"");
      if ((iVar1 != 0) && (iVar1 = ReadRemoteData(param_1,extraout_w1), iVar1 == 0)) {
        CNetComm::DisLink((CNetComm *)*plVar3,1,0);
      }
      return *(int *)(*plVar3 + 0x80) != 0;
    }
  }
  return false;
}


==================================================================

### FUNC 0017ad44 (192 bytes) name=MAG_LinkCameraEx

bool MAG_LinkCameraEx(uint param_1,char *param_2,uint param_3,char *param_4,undefined8 param_5,
                     char *param_6,char *param_7,uint param_8)

{
  int iVar1;
  long lVar2;
  uint extraout_w1;
  long *plVar3;
  
  if (param_1 < 0x81) {
    plVar3 = &DAT_005098a8 + (ulong)param_1 * 0x93;
    lVar2 = *plVar3;
    if (lVar2 == 0) {
      return false;
    }
    if ((((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0) &&
        ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) && (*(int *)(lVar2 + 0x80) == 0)) {
      iVar1 = CNetComm::LinkCamera
                        ((uint)lVar2,param_2,param_7,param_8,param_3 & 0xffff,param_6,param_4);
      if ((iVar1 != 0) && (iVar1 = ReadRemoteData(param_1,extraout_w1), iVar1 == 0)) {
        CNetComm::DisLink((CNetComm *)*plVar3,1,0);
      }
      return *(int *)(*plVar3 + 0x80) != 0;
    }
  }
  return false;
}


==================================================================

### FUNC 0017ae04 (1088 bytes) name=ReadRemoteData

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* ReadRemoteData(unsigned int, unsigned int) */

void ReadRemoteData(uint param_1,uint param_2)

{
  undefined4 *__s;
  char cVar1;
  bool bVar2;
  long lVar3;
  undefined8 uVar4;
  undefined *puVar5;
  uint uVar6;
  int iVar7;
  undefined8 uVar8;
  int *piVar9;
  long lVar10;
  ulong uVar11;
  long *plVar12;
  char *local_f0;
  Logging aLStack_e8 [24];
  uint local_d0;
  uint uStack_cc;
  undefined4 local_c8;
  undefined4 local_c0;
  undefined4 uStack_bc;
  undefined4 local_b8;
  BasePara2 aBStack_90 [32];
  undefined4 local_70;
  undefined4 local_68;
  float local_64;
  char local_60;
  char local_5f;
  char local_5e;
  char local_5d;
  char local_5c;
  char local_5b;
  char local_5a;
  char local_59;
  long local_58;
  
  lVar3 = tpidr_el0;
  local_58 = *(long *)(lVar3 + 0x28);
  uVar11 = (ulong)param_1;
  iVar7 = CNetComm::ReadPara((CNetComm *)(&DAT_005098a8)[uVar11 * 0x93],(BasePara1 *)&local_d0,
                             aBStack_90,500);
  if ((iVar7 == 0) &&
     (iVar7 = CNetComm::ReadPara((CNetComm *)(&DAT_005098a8)[uVar11 * 0x93],(BasePara1 *)&local_d0,
                                 aBStack_90,1000), iVar7 == 0)) {
    mag::Logging::Logging(aLStack_e8,4);
    MStream::operator<<((MStream *)aLStack_e8,"Failed to get parameters from remote camera");
    mag::Logging::~Logging(aLStack_e8);
    uVar8 = 0;
  }
  else {
    uVar6 = local_d0;
    if ((uStack_cc >> 0x19 == 0) &&
       ((0x12 < local_d0 + 0xf67670e7 ||
        ((1 << (ulong)(local_d0 + 0xf67670e7 & 0x1f) & 0x401cbU) == 0)))) {
      printf("[SDK]unsupported device type %d\n",(ulong)(uStack_cc >> 0x18));
      uVar8 = 0;
    }
    else {
      lVar10 = uVar11 * 0x498;
      __s = (undefined4 *)(&DAT_00509900 + lVar10);
      *(uint *)(&DAT_00509d1c + lVar10) = local_d0;
      *(uint *)(&DAT_00509d24 + lVar10) = uStack_cc & 0xffffff;
      *(undefined4 *)(&DAT_00509d00 + lVar10) = 0;
      *(undefined4 *)(&DAT_00509d20 + lVar10) = local_b8;
      *(undefined4 *)(&DAT_00509d28 + lVar10) = local_c8;
      memset(__s,0,0x50);
      *(uint *)(&DAT_005098f8 + lVar10) = uVar6;
      *(undefined4 *)(&DAT_005098fc + lVar10) = 0;
      *(undefined8 *)(&DAT_00509908 + lVar10) = 0;
      puVar5 = PTR_DAT_00501f30;
      local_f0 = PTR_DAT_00501f30 + 0x18;
      switch((ulong)(uStack_cc >> 0x18)) {
      case 0:
        FUN_00412fdc(&local_f0,&DAT_00439f13,2);
        break;
      case 1:
        FUN_00412fdc(&local_f0,&DAT_00439f2c,2);
        break;
      case 2:
        FUN_00412fdc(&local_f0,"M3Pro",5);
        break;
      case 3:
        FUN_00412fdc(&local_f0,"160Core",7);
        break;
      case 4:
        FUN_00412fdc(&local_f0,&DAT_00439f35,2);
        break;
      case 5:
        FUN_00412fdc(&local_f0,"C1Pro",5);
        break;
      case 6:
        FUN_00412fdc(&local_f0,"C1ProLt",7);
        break;
      default:
        FUN_00412fdc(&local_f0,&DAT_00439f38,2);
      }
      lVar10 = uVar11 * 0x498;
      snprintf(&DAT_00509910 + lVar10,0x20,"%s-%u",local_f0,(ulong)local_d0);
      strcpy(&DAT_00509930 + lVar10,local_f0);
      *__s = local_c0;
      *(undefined4 *)(&DAT_00509904 + lVar10) = uStack_bc;
      *(undefined4 *)(&DAT_00509940 + lVar10) = local_c0;
      *(undefined4 *)(&DAT_00509944 + lVar10) = uStack_bc;
      if ((*(uint *)(&DAT_005098bc + lVar10) | 2) == 3) {
        *__s = uStack_bc;
        *(undefined4 *)(&DAT_00509904 + lVar10) = local_c0;
        *(undefined4 *)(&DAT_00509940 + lVar10) = uStack_bc;
        *(undefined4 *)(&DAT_00509944 + lVar10) = local_c0;
      }
      plVar12 = &DAT_005098a0 + uVar11 * 0x93;
      lVar10 = *plVar12;
      *(undefined4 *)(&DAT_00509938 + uVar11 * 0x498) = local_b8;
      *(undefined4 *)(&DAT_0050993c + uVar11 * 0x498) = local_b8;
      memset((void *)(lVar10 + 8),0,0xa0);
      uVar4 = _UNK_00439d78;
      uVar8 = _DAT_00439d70;
      lVar10 = *plVar12;
      *(undefined4 *)(lVar10 + 0x38) = 200;
      *(undefined4 *)(lVar10 + 8) = 0;
      *(undefined8 *)(lVar10 + 0x20) = 0x5000000ff;
      *(undefined4 *)(lVar10 + 0x68) = 1;
      *(undefined8 *)(lVar10 + 0x18) = uVar4;
      *(undefined8 *)(lVar10 + 0x10) = uVar8;
      *(undefined8 *)(lVar10 + 0x4c) = 0x100000001;
      if (local_64 == 0.0) {
        *(undefined8 *)(lVar10 + 0x80) = 0;
        *(int *)(lVar10 + 0x88) = local_60 * 0x32;
        *(int *)(lVar10 + 0x8c) = local_5f * 0x32;
        *(int *)(lVar10 + 0x90) = local_5e * 0x32;
        *(int *)(lVar10 + 0x94) = local_5d * 0x32;
        *(int *)(lVar10 + 0x98) = local_5c * 0x32;
        *(int *)(lVar10 + 0x9c) = local_5b * 0x32;
        *(int *)(lVar10 + 0xa0) = local_5a * 0x32;
        *(int *)(lVar10 + 0xa4) = local_59 * 0x32;
      }
      else {
        *(float *)(lVar10 + 0x84) = local_64;
        *(undefined8 *)(lVar10 + 0xa0) = 0;
        *(undefined8 *)(lVar10 + 0x98) = 0;
        *(undefined4 *)(lVar10 + 0x80) = local_68;
        *(undefined8 *)(lVar10 + 0x90) = 0;
        *(undefined8 *)(lVar10 + 0x88) = 0;
        lVar10 = *plVar12;
      }
      uVar4 = _UNK_00436378;
      uVar8 = _DAT_00436370;
      *(undefined4 *)(lVar10 + 0xb8) = 0x41a00000;
      *(undefined8 *)(lVar10 + 0xc4) = 0;
      *(undefined8 *)(lVar10 + 0xbc) = 0;
      *(undefined4 *)(lVar10 + 0xcc) = 0x3f7f4b1f;
      *(undefined8 *)(lVar10 + 0xb0) = uVar4;
      *(undefined8 *)(lVar10 + 0xa8) = uVar8;
      *(undefined4 *)(lVar10 + 0x24) = local_70;
      *(undefined4 *)(lVar10 + 0xd0) = 0x3f800000;
      if (local_f0 + -0x18 != puVar5) {
        piVar9 = (int *)(local_f0 + -8);
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          iVar7 = *piVar9;
          *piVar9 = iVar7 + -1;
        }
        else {
          do {
            iVar7 = *piVar9;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
            if (bVar2) {
              *piVar9 = iVar7 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        if (iVar7 < 1) {
          operator_delete(local_f0 + -0x18);
        }
      }
      uVar8 = 1;
    }
  }
  if (*(long *)(lVar3 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar8);
}


==================================================================

### FUNC 0017b2c4 (8 bytes) name=MAG_ListenTo

undefined8 MAG_ListenTo(void)

{
  return 0;
}


==================================================================

### FUNC 0017b2cc (144 bytes) name=MAG_DisLinkCamera

void MAG_DisLinkCamera(uint param_1)

{
  CNetComm *this;
  ulong uVar1;
  
  if (param_1 < 0x81) {
    this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93];
    if (((this != (CNetComm *)0x0) && (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0))
       && ((&DAT_00509898)[uVar1 * 0x93] != 0)) {
      if (*(int *)(&DAT_005098c0 + uVar1 * 0x498) != 0) {
        MAG_StopProcessImage(param_1);
        this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93];
      }
      CNetComm::DisLink(this,1,0);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0017b35c (112 bytes) name=MAG_GetRecentHeartBeat

int MAG_GetRecentHeartBeat(uint param_1)

{
  int iVar1;
  long lVar2;
  
  if ((((param_1 < 0x81) && (lVar2 = (&DAT_005098a8)[(ulong)param_1 * 0x93], lVar2 != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
    iVar1 = GetTickCount();
    iVar1 = iVar1 - (int)*(undefined8 *)(lVar2 + 0xae8);
  }
  else {
    iVar1 = -1;
  }
  return iVar1;
}


==================================================================

### FUNC 0017b3cc (92 bytes) name=MAG_StopListen

void MAG_StopListen(uint param_1)

{
  ulong uVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0)) &&
     (((&DAT_00509898)[uVar1 * 0x93] != 0 && (*(int *)(&DAT_005098c0 + uVar1 * 0x498) != 0)))) {
    MAG_StopProcessImage();
    return;
  }
  return;
}


==================================================================

### FUNC 0017b428 (112 bytes) name=MAG_SetReConnectCallBack

undefined8 MAG_SetReConnectCallBack(uint param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  
  if (0x80 < param_1) {
    return 0;
  }
  lVar1 = (&DAT_005098a8)[(ulong)param_1 * 0x93];
  if (lVar1 == 0) {
    return 0;
  }
  if ((&DAT_005098a0)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    *(undefined8 *)(lVar1 + 0x38) = param_2;
    *(undefined8 *)(lVar1 + 0x40) = param_3;
    return 1;
  }
  return 0;
}


==================================================================

### FUNC 0017b498 (108 bytes) name=MAG_GetCamInfo

void MAG_GetCamInfo(uint param_1,void *param_2,uint param_3)

{
  ulong uVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0)) &&
     ((&DAT_00509898)[uVar1 * 0x93] != 0)) {
    if (0x4f < param_3) {
      param_3 = 0x50;
    }
    memcpy(param_2,&DAT_00509900 + uVar1 * 0x498,(ulong)param_3);
    return;
  }
  return;
}


==================================================================

### FUNC 0017b504 (8 bytes) name=MAG_GetMulticastState

undefined8 MAG_GetMulticastState(void)

{
  return 0;
}


==================================================================

### FUNC 0017b50c (8 bytes) name=MAG_GetCameraTemperature

undefined8 MAG_GetCameraTemperature(void)

{
  return 0;
}


==================================================================

### FUNC 0017b514 (140 bytes) name=MAG_GetTerminalList

int MAG_GetTerminalList(void *param_1,uint param_2)

{
  undefined4 *puVar1;
  int iVar2;
  
  iVar2 = 0;
  if (((DAT_005098a8 != 0) && (DAT_005098a0 != 0)) && (DAT_00509898 != 0)) {
    if (*(int *)(DAT_005098a8 + 0x7c) == 0) {
      puVar1 = (undefined4 *)__errno();
      iVar2 = 0;
      *puVar1 = 0xe4ae0004;
    }
    else {
      iVar2 = *(int *)(DAT_005098a8 + 0xab8);
      if (((param_2 != 0) && (param_1 != (void *)0x0)) && (iVar2 != 0)) {
        if ((uint)(iVar2 * 0x3c) <= param_2) {
          param_2 = iVar2 * 0x3c;
        }
        memcpy(param_1,(void *)(DAT_005098a8 + 0x338),(ulong)param_2);
      }
    }
  }
  return iVar2;
}


==================================================================

### FUNC 0017b5a0 (116 bytes) name=MAG_IsProcessingImage

undefined4 MAG_IsProcessingImage(uint param_1)

{
  ulong uVar1;
  
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  uVar1 = (ulong)param_1;
  if ((&DAT_005098a0)[uVar1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_00509898)[uVar1 * 0x93] != 0) {
    return *(undefined4 *)(&DAT_005098c0 + uVar1 * 0x498);
  }
  return 0;
}


==================================================================

### FUNC 0017b614 (188 bytes) name=MAG_PrepareProcessImage

undefined8 MAG_PrepareProcessImage(uint param_1,long param_2,undefined8 param_3)

{
  CNetComm *this;
  undefined4 *puVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  ulong uVar4;
  
  if ((((param_1 < 0x81) &&
       (this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93], this != (CNetComm *)0x0)) &&
      (uVar4 = (ulong)param_1, (&DAT_005098a0)[uVar4 * 0x93] != 0)) &&
     ((&DAT_00509898)[uVar4 * 0x93] != 0)) {
    if (*(int *)(&DAT_005098c0 + uVar4 * 0x498) == 0) {
      if (*(int *)(this + 0x80) != 0) {
        if (param_2 == 0) {
          puVar1 = (undefined4 *)__errno();
          *puVar1 = 0xe4ae0001;
          return 0xffffffff;
        }
        *(long *)(this + 0x58) = param_2;
        *(undefined8 *)(this + 0x60) = param_3;
        uVar2 = CNetComm::DoPrepareInBackground(this);
        return uVar2;
      }
      puVar1 = (undefined4 *)__errno();
      uVar3 = 0xe4ae0005;
    }
    else {
      puVar1 = (undefined4 *)__errno();
      uVar3 = 0xe4ae0003;
    }
    *puVar1 = uVar3;
  }
  return 0xffffffff;
}


==================================================================

### FUNC 0017b6d0 (96 bytes) name=MAG_StartProcessImage

undefined8 MAG_StartProcessImage(uint param_1)

{
  undefined8 uVar1;
  undefined8 in_x4;
  ulong uVar2;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar2 = (ulong)param_1, (&DAT_005098a0)[uVar2 * 0x93] != 0)) &&
     ((&DAT_00509898)[uVar2 * 0x93] != 0)) {
    *(undefined8 *)(&DAT_005098b0 + uVar2 * 0x498) = in_x4;
    uVar1 = StartProcessImage();
    return uVar1;
  }
  return 0;
}


==================================================================

### FUNC 0017b730 (816 bytes) name=StartProcessImage

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* StartProcessImage(unsigned int, OutputPara const*, void (*)(unsigned int, unsigned int, unsigned
   int, void*), ImgTypes, int) */

undefined4
StartProcessImage(ulong param_1,uint *param_2,long param_3,int param_4,undefined4 param_5)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  undefined4 *puVar4;
  void *pvVar5;
  undefined4 uVar6;
  long lVar7;
  long *plVar8;
  undefined4 uVar9;
  uint uVar10;
  CNetComm *this;
  undefined8 *puVar11;
  undefined8 uVar12;
  uint local_190;
  undefined8 local_18c;
  undefined8 uStack_184;
  uint local_17c;
  undefined8 local_178;
  undefined8 uStack_170;
  char acStack_168 [256];
  long local_68;
  
  lVar2 = tpidr_el0;
  local_68 = *(long *)(lVar2 + 0x28);
  if (((param_2 == (uint *)0x0) || (param_3 == 0)) || (param_4 != 2)) {
LAB_0017b7d0:
    puVar4 = (undefined4 *)__errno();
    uVar6 = 0xe4ae0001;
  }
  else {
    uVar10 = *param_2;
    if ((uVar10 != *(uint *)(&DAT_00509900 + (param_1 & 0xffffffff) * 0x498)) || ((uVar10 & 3) != 0)
       ) goto LAB_0017b7d0;
    param_1 = param_1 & 0xffffffff;
    if ((((param_2[1] != *(uint *)(&DAT_00509904 + param_1 * 0x498)) ||
         (((param_2[2] & 3) != 0 || (param_2[2] < uVar10)))) || ((param_2[4] & 3) != 0)) ||
       ((param_2[3] <= param_2[1] - 1 || (param_2[5] == 0)))) goto LAB_0017b7d0;
    if (*(int *)(&DAT_005098c0 + param_1 * 0x498) != 0) goto LAB_0017b850;
    plVar8 = &DAT_005098a8 + param_1 * 0x93;
    this = (CNetComm *)*plVar8;
    if (*(int *)(this + 0x80) != 0) {
      lVar7 = param_1 * 0x498;
      puVar11 = (undefined8 *)(&DAT_005098d0 + lVar7);
      pvVar5 = (void *)*puVar11;
      *(undefined4 *)(&DAT_005098c4 + lVar7) = 2;
      *(undefined4 *)(&DAT_00509d18 + lVar7) = 0;
      *(undefined4 *)(&DAT_00509d14 + lVar7) = 0;
      *(undefined8 *)(&DAT_005098f0 + lVar7) = *(undefined8 *)(param_2 + 4);
      uVar12 = *(undefined8 *)param_2;
      *(undefined8 *)(lVar7 + 0x5098e8) = *(undefined8 *)(param_2 + 2);
      *(undefined8 *)(&DAT_005098e0 + lVar7) = uVar12;
      uVar1 = uVar10 * param_2[1] * 2;
      if (pvVar5 != (void *)0x0) {
        operator_delete__(pvVar5);
        *puVar11 = 0;
        uVar10 = *param_2;
        this = (CNetComm *)*plVar8;
      }
      pvVar5 = operator_new__((ulong)uVar1 + 0x98);
      *puVar11 = pvVar5;
      uStack_184 = *(undefined8 *)(param_2 + 3);
      local_18c = *(undefined8 *)(param_2 + 1);
      local_17c = param_2[5];
      uStack_170 = _UNK_00439d88;
      local_178 = _DAT_00439d80;
      local_190 = uVar10;
      iVar3 = CNetComm::TransferCaliFile(this);
      if (iVar3 == 0) {
LAB_0017ba54:
        uVar9 = 0;
      }
      else {
        iVar3 = CFunctions::Reset((CFunctions *)(&DAT_005098a0)[param_1 * 0x93],
                                  (struct_IntrinsicPara *)&local_190);
        if (iVar3 == 0) {
          if ((void *)*puVar11 != (void *)0x0) {
            operator_delete__((void *)*puVar11);
            *puVar11 = 0;
          }
        }
        else {
          CNetComm::GetCaliFileName((CNetComm *)*plVar8,acStack_168,0x100);
          iVar3 = CFunctions::LoadCalibrationTable
                            ((CFunctions *)(&DAT_005098a0)[param_1 * 0x93],acStack_168);
          if (iVar3 != 0) {
            lVar7 = param_1 * 0x498;
            *(undefined4 *)(&DAT_00509cf0 + lVar7) = 0xffffffff;
            puVar4 = (undefined4 *)__errno();
            *puVar4 = 0xe4ae0007;
            *(uint *)(&DAT_00509948 + lVar7) = param_2[4];
            *(uint *)(&DAT_0050994c + lVar7) = param_2[5];
            iVar3 = CNetComm::SetShutterState((int)*plVar8,(uint *)0x0);
            if (iVar3 != 0) {
              lVar7 = (&DAT_005098a0)[param_1 * 0x93];
              *(undefined4 *)(lVar7 + 0x3c) = *(undefined4 *)(lVar7 + 0x44);
              *(undefined4 *)(lVar7 + 0x40) = *(undefined4 *)(lVar7 + 0x48);
              *(undefined4 *)(&DAT_00509d10 + param_1 * 0x498) = 0;
            }
            uVar9 = 1;
            iVar3 = CNetComm::StartReceiveImg
                              ((CNetComm *)*plVar8,1,uVar1,0,*puVar11,FUN_0017e7fc,0,param_5);
            if (iVar3 != 0) {
              lVar7 = param_1 * 0x498;
              *(long *)(&DAT_005098d8 + lVar7) = param_3;
              *(undefined4 *)(&DAT_00509cf4 + lVar7) = param_5;
              *(undefined4 *)(&DAT_00509cf8 + lVar7) = 0;
              *(undefined4 *)(&DAT_00509cfc + lVar7) = 0;
              *(undefined8 *)(&DAT_00509d0c + lVar7) = 0xffffffff00000000;
              *(int *)(&DAT_005098c0 + param_1 * 0x498) = 1;
              goto LAB_0017b7e0;
            }
            if ((void *)*puVar11 != (void *)0x0) {
              operator_delete__((void *)*puVar11);
              uVar9 = 0;
              *puVar11 = 0;
              goto LAB_0017b7e0;
            }
            goto LAB_0017ba54;
          }
        }
LAB_0017b850:
        puVar4 = (undefined4 *)__errno();
        uVar9 = 0;
        *puVar4 = 0xe4ae0003;
      }
      goto LAB_0017b7e0;
    }
    puVar4 = (undefined4 *)__errno();
    uVar6 = 0xe4ae0005;
  }
  uVar9 = 0;
  *puVar4 = uVar6;
LAB_0017b7e0:
  if (*(long *)(lVar2 + 0x28) == local_68) {
    return uVar9;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017ba60 (100 bytes) name=MAG_StartProcessPulseImage

undefined8 MAG_StartProcessPulseImage(uint param_1)

{
  undefined8 uVar1;
  undefined8 in_x4;
  ulong uVar2;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar2 = (ulong)param_1, (&DAT_005098a0)[uVar2 * 0x93] != 0)) &&
     ((&DAT_00509898)[uVar2 * 0x93] != 0)) {
    *(undefined8 *)(&DAT_005098b0 + uVar2 * 0x498) = in_x4;
    uVar1 = StartProcessImage();
    return uVar1;
  }
  return 0;
}


==================================================================

### FUNC 0017bac4 (140 bytes) name=MAG_WillStartImmediately

bool MAG_WillStartImmediately(uint param_1)

{
  bool bVar1;
  int iVar2;
  CNetComm *this;
  
  if (0x80 < param_1) {
    return false;
  }
  this = (CNetComm *)(&DAT_005098a8)[(ulong)param_1 * 0x93];
  bVar1 = false;
  if (this != (CNetComm *)0x0) {
    if ((&DAT_005098a0)[(ulong)param_1 * 0x93] == 0) {
      return false;
    }
    if ((&DAT_00509898)[(ulong)param_1 * 0x93] == 0) {
      return false;
    }
    if (*(int *)(this + 0x80) == 0) {
      return false;
    }
    iVar2 = CNetComm::RefreshCaliFileNeeded(this);
    bVar1 = iVar2 == 0;
  }
  return bVar1;
}


==================================================================

### FUNC 0017bb50 (104 bytes) name=MAG_TransferPulseImage

undefined8 MAG_TransferPulseImage(uint param_1)

{
  ulong uVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0)) &&
     ((&DAT_00509898)[uVar1 * 0x93] != 0)) {
    *(undefined4 *)(&DAT_00509cfc + uVar1 * 0x498) = 0;
    *(undefined4 *)(&DAT_00509cf8 + uVar1 * 0x498) = 1;
  }
  return 0;
}


==================================================================

### FUNC 0017bbb8 (112 bytes) name=MAG_Pause

void MAG_Pause(uint param_1)

{
  ulong uVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      (uVar1 = (ulong)param_1, (&DAT_005098a0)[uVar1 * 0x93] != 0)) &&
     ((((&DAT_00509898)[uVar1 * 0x93] != 0 &&
       (*(int *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x84) != 0)) &&
      (*(int *)(&DAT_00509d0c + uVar1 * 0x498) == 0)))) {
    *(undefined4 *)(&DAT_00509d0c + uVar1 * 0x498) = 1;
    return;
  }
  return;
}


==================================================================

### FUNC 0017bc28 (24 bytes) name=MAG_Resume

void MAG_Resume(uint param_1)

{
  *(undefined4 *)(&DAT_00509d0c + (ulong)param_1 * 0x498) = 0;
  return;
}


==================================================================

### FUNC 0017bc40 (24 bytes) name=MAG_IsPause

undefined4 MAG_IsPause(ulong param_1)

{
  return *(undefined4 *)(&DAT_00509d0c + (param_1 & 0xffffffff) * 0x498);
}


==================================================================

### FUNC 0017bc58 (96 bytes) name=FFC

/* FFC(unsigned int) */

undefined8 FFC(uint param_1)

{
  undefined8 uVar1;
  long lVar2;
  ulong uVar3;
  
  uVar3 = (ulong)param_1;
  uVar1 = CNetComm::SetShutterState((int)(&DAT_005098a8)[uVar3 * 0x93],(uint *)0x0);
  if ((int)uVar1 != 0) {
    lVar2 = (&DAT_005098a0)[uVar3 * 0x93];
    uVar1 = 1;
    *(undefined4 *)(lVar2 + 0x3c) = *(undefined4 *)(lVar2 + 0x44);
    *(undefined4 *)(lVar2 + 0x40) = *(undefined4 *)(lVar2 + 0x48);
    *(undefined4 *)(&DAT_00509d10 + uVar3 * 0x498) = 0;
  }
  return uVar1;
}


==================================================================

### FUNC 0017bcb8 (156 bytes) name=MAG_TriggerFFC

undefined8 MAG_TriggerFFC(uint param_1)

{
  undefined8 uVar1;
  long lVar2;
  ulong uVar3;
  
  if (param_1 < 0x81) {
    if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
      return 0;
    }
    uVar3 = (ulong)param_1;
    if (((&DAT_005098a0)[uVar3 * 0x93] != 0) && ((&DAT_00509898)[uVar3 * 0x93] != 0)) {
      uVar1 = CNetComm::SetShutterState((int)(&DAT_005098a8)[(ulong)param_1 * 0x93],(uint *)0x0);
      if ((int)uVar1 == 0) {
        return uVar1;
      }
      lVar2 = (&DAT_005098a0)[uVar3 * 0x93];
      *(undefined4 *)(lVar2 + 0x3c) = *(undefined4 *)(lVar2 + 0x44);
      *(undefined4 *)(lVar2 + 0x40) = *(undefined4 *)(lVar2 + 0x48);
      *(undefined4 *)(&DAT_00509d10 + uVar3 * 0x498) = 0;
      return 1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017bd54 (8 bytes) name=MAG_SetIoAlarmState

undefined8 MAG_SetIoAlarmState(void)

{
  return 0;
}


==================================================================

### FUNC 0017bd5c (96 bytes) name=MAG_SetColorPalette

void MAG_SetColorPalette(uint param_1,uint param_2)

{
  uint uVar1;
  ulong uVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar2 = (ulong)param_1;
    if (((&DAT_005098a0)[uVar2 * 0x93] != 0) && ((&DAT_00509898)[uVar2 * 0x93] != 0)) {
      uVar1 = 0;
      if (param_2 < 0xb) {
        uVar1 = param_2;
      }
      *(uint *)(&DAT_005098c8 + uVar2 * 0x498) = uVar1;
      CFunctions::SetColorPalette();
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0017bdbc (252 bytes) name=MAG_SetSubsectionEnlargePara

undefined8
MAG_SetSubsectionEnlargePara(uint param_1,int param_2,int param_3,uint param_4,uint param_5)

{
  CFunctions *this;
  undefined4 *puVar1;
  long *plVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    plVar2 = &DAT_005098a0 + (ulong)param_1 * 0x93;
    if ((*plVar2 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if ((param_2 < param_3) && ((param_4 & 0xff) < (param_5 & 0xff))) {
        pthread_mutex_lock((pthread_mutex_t *)(*plVar2 + 0xf0));
        this = (CFunctions *)*plVar2;
        *(undefined4 *)(this + 0x10) = 1;
        *(int *)(this + 0x14) = param_2;
        *(int *)(this + 0x18) = param_3;
        *(uint *)(this + 0x1c) = param_4 & 0xff;
        *(uint *)(this + 0x20) = param_5 & 0xff;
        *(undefined4 *)(this + 0x28) = 0;
        if ((*(int *)(this + 0xec) != 0) &&
           (*(int *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x80) == 0)) {
          CFunctions::ApplyNewEffect(this,0);
          this = (CFunctions *)*plVar2;
        }
        pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
        return 1;
      }
      puVar1 = (undefined4 *)__errno();
      *puVar1 = 0xe4ae0001;
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017beb8 (328 bytes) name=MAG_SetImageTransform

undefined8 MAG_SetImageTransform(uint param_1,uint param_2,int param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  long lVar3;
  ulong uVar4;
  long lVar5;
  long *plVar6;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar4 = (ulong)param_1;
    lVar5 = (&DAT_005098a0)[uVar4 * 0x93];
    if (lVar5 != 0) {
      if ((int)param_2 < 0) {
        return 0;
      }
      plVar6 = &DAT_00509898 + uVar4 * 0x93;
      if (*plVar6 == 0) {
        return 0;
      }
      if (3 < param_3) {
        return 0;
      }
      if ((int)param_2 < 4 && -1 < param_3) {
        if (param_3 == 2) {
          param_3 = 0;
          param_2 = param_2 ^ 3;
        }
        else if (param_3 == 3) {
          param_2 = param_2 ^ 3;
          param_3 = 1;
        }
        if (*(int *)(&DAT_005098bc + uVar4 * 0x498) != param_3) {
          if (*(int *)(&DAT_005098c0 + uVar4 * 0x498) != 0) {
            return 0;
          }
          if (*(int *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x80) != 0) {
            lVar3 = uVar4 * 0x498;
            uVar1 = *(undefined4 *)(&DAT_00509900 + lVar3);
            uVar2 = *(undefined4 *)(&DAT_00509940 + lVar3);
            *(undefined4 *)(&DAT_00509900 + lVar3) = *(undefined4 *)(&DAT_00509904 + lVar3);
            *(undefined4 *)(&DAT_00509904 + lVar3) = uVar1;
            *(undefined4 *)(&DAT_00509940 + lVar3) = *(undefined4 *)(&DAT_00509944 + lVar3);
            *(undefined4 *)(&DAT_00509944 + lVar3) = uVar2;
          }
        }
        *(uint *)(&DAT_005098b8 + uVar4 * 0x498) = param_2;
        *(int *)(&DAT_005098bc + uVar4 * 0x498) = param_3;
        pthread_mutex_lock((pthread_mutex_t *)(lVar5 + 0xf0));
        lVar5 = (&DAT_005098a0)[uVar4 * 0x93];
        *(uint *)(lVar5 + 0x78) = param_2;
        *(int *)(lVar5 + 0x7c) = param_3;
        pthread_mutex_unlock((pthread_mutex_t *)(lVar5 + 0xf0));
        pthread_mutex_lock((pthread_mutex_t *)(*plVar6 + 0xa0));
        lVar5 = *plVar6;
        *(uint *)(lVar5 + 0x70) = param_2;
        *(int *)(lVar5 + 0x74) = param_3;
        pthread_mutex_unlock((pthread_mutex_t *)(lVar5 + 0xa0));
        return 1;
      }
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017c000 (240 bytes) name=MAG_SetAutoEnlargePara

ulong MAG_SetAutoEnlargePara(ulong param_1,uint param_2,int param_3,int param_4)

{
  uint uVar1;
  CFunctions *this;
  long *plVar2;
  
  if (((uint)param_1 < 0x81) && ((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] != 0)) {
    plVar2 = &DAT_005098a0 + (param_1 & 0xffffffff) * 0x93;
    if ((*plVar2 != 0) && ((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] != 0)) {
      if (param_2 < 3) {
        param_2 = 2;
      }
      if (param_3 < -99) {
        param_3 = -100;
      }
      if (99 < param_3) {
        param_3 = 100;
      }
      if (param_4 < -99) {
        param_4 = -100;
      }
      if (99 < param_4) {
        param_4 = 100;
      }
      pthread_mutex_lock((pthread_mutex_t *)(*plVar2 + 0xf0));
      this = (CFunctions *)*plVar2;
      *(int *)(this + 0x30) = param_3;
      *(int *)(this + 0x34) = param_4;
      *(undefined4 *)(this + 0x10) = 0;
      *(uint *)(this + 0x24) = param_2;
      *(undefined4 *)(this + 0x28) = 0;
      if ((*(int *)(this + 0xec) != 0) &&
         (*(int *)((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] + 0x80) == 0)) {
        CFunctions::ApplyNewEffect(this,0);
        this = (CFunctions *)*plVar2;
      }
      uVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
      return (ulong)uVar1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0017c0f0 (192 bytes) name=MAG_SetIsothermalPara

ulong MAG_SetIsothermalPara(ulong param_1,int param_2,int param_3)

{
  uint uVar1;
  CFunctions *this;
  long *plVar2;
  
  if (((uint)param_1 < 0x81) && ((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] != 0)) {
    plVar2 = &DAT_005098a0 + (param_1 & 0xffffffff) * 0x93;
    if ((*plVar2 != 0) && ((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] != 0)) {
      pthread_mutex_lock((pthread_mutex_t *)(*plVar2 + 0xf0));
      this = (CFunctions *)*plVar2;
      *(undefined4 *)(this + 0x10) = 0;
      *(int *)(this + 0x14) = param_2;
      *(int *)(this + 0x18) = param_3;
      *(uint *)(this + 0x28) = (uint)(param_2 <= param_3);
      if ((*(int *)(this + 0xec) != 0) &&
         (*(int *)((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] + 0x80) == 0)) {
        CFunctions::ApplyNewEffect(this,0);
        this = (CFunctions *)*plVar2;
      }
      uVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xf0));
      return (ulong)uVar1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0017c1b0 (8 bytes) name=MAG_SetUserROIs

undefined8 MAG_SetUserROIs(void)

{
  return 0;
}


==================================================================

### FUNC 0017c1b8 (8 bytes) name=MAG_ResetCamera

undefined8 MAG_ResetCamera(void)

{
  return 0;
}


==================================================================

### FUNC 0017c1c0 (156 bytes) name=MAG_GetFilteredRaw

undefined8 MAG_GetFilteredRaw(uint param_1)

{
  undefined4 *puVar1;
  long lVar2;
  
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (lVar2 == 0) {
    return 0;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(lVar2 + 0xec) != 0) {
      return *(undefined8 *)(lVar2 + 0x140);
    }
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c25c (192 bytes) name=MAG_GetOutputBMPdata

undefined8 MAG_GetOutputBMPdata(uint param_1,undefined8 *param_2,long *param_3)

{
  undefined4 *puVar1;
  long lVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
    if ((lVar2 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if ((param_2 != (undefined8 *)0x0) && (param_3 != (long *)0x0)) {
        if (*(int *)(lVar2 + 0xec) != 0) {
          *param_2 = *(undefined8 *)(lVar2 + 0xd8);
          *param_3 = (&DAT_005098a0)[(ulong)param_1 * 0x93] + 0x9b0;
          return 1;
        }
        puVar1 = (undefined4 *)__errno();
        *puVar1 = 0xe4ae0006;
        return 0;
      }
      puVar1 = (undefined4 *)__errno();
      *puVar1 = 0xe4ae0001;
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017c31c (156 bytes) name=MAG_GetOutputRawData

undefined8 MAG_GetOutputRawData(uint param_1)

{
  undefined4 *puVar1;
  long lVar2;
  
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (lVar2 == 0) {
    return 0;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(lVar2 + 0xec) != 0) {
      return *(undefined8 *)(lVar2 + 0x140);
    }
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c3b8 (192 bytes) name=MAG_GetOutputColorBardata

undefined8 MAG_GetOutputColorBardata(uint param_1,undefined8 *param_2,long *param_3)

{
  undefined4 *puVar1;
  long lVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
    if ((lVar2 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if ((param_2 != (undefined8 *)0x0) && (param_3 != (long *)0x0)) {
        if (*(int *)(lVar2 + 0xec) != 0) {
          *param_2 = *(undefined8 *)(lVar2 + 0x180);
          *param_3 = (&DAT_005098a0)[(ulong)param_1 * 0x93] + 0xdd8;
          return 1;
        }
        puVar1 = (undefined4 *)__errno();
        *puVar1 = 0xe4ae0006;
        return 0;
      }
      puVar1 = (undefined4 *)__errno();
      *puVar1 = 0xe4ae0001;
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017c478 (192 bytes) name=MAG_GetOutputVideoData

undefined8 MAG_GetOutputVideoData(uint param_1,undefined8 *param_2,long *param_3)

{
  undefined4 *puVar1;
  long lVar2;
  
  if (((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
     ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) {
    lVar2 = (&DAT_00509898)[(ulong)param_1 * 0x93];
    if (lVar2 != 0) {
      if ((param_2 != (undefined8 *)0x0) && (param_3 != (long *)0x0)) {
        if (*(int *)(lVar2 + 0x158) != 0) {
          *param_2 = *(undefined8 *)(lVar2 + 0x160);
          *param_3 = (&DAT_00509898)[(ulong)param_1 * 0x93] + 0x128;
          return 1;
        }
        puVar1 = (undefined4 *)__errno();
        *puVar1 = 0xe4ae0006;
        return 0;
      }
      puVar1 = (undefined4 *)__errno();
      *puVar1 = 0xe4ae0001;
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017c538 (156 bytes) name=MAG_GetOutputVideoYV12

undefined8 MAG_GetOutputVideoYV12(uint param_1)

{
  undefined4 *puVar1;
  long lVar2;
  
  if (0x80 < param_1) {
    return 0;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  if ((&DAT_005098a0)[(ulong)param_1 * 0x93] == 0) {
    return 0;
  }
  lVar2 = (&DAT_00509898)[(ulong)param_1 * 0x93];
  if (lVar2 != 0) {
    if (*(int *)(lVar2 + 0x158) != 0) {
      return *(undefined8 *)(lVar2 + 0x170);
    }
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c5d4 (120 bytes) name=MAG_GetVideoPPS

undefined8 MAG_GetVideoPPS(uint param_1)

{
  undefined4 *puVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     (((&DAT_00509898)[(ulong)param_1 * 0x93] != 0 &&
      (*(int *)((&DAT_00509898)[(ulong)param_1 * 0x93] + 0x158) == 0)))) {
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c64c (120 bytes) name=MAG_GetVideoSPS

undefined8 MAG_GetVideoSPS(uint param_1)

{
  undefined4 *puVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     (((&DAT_00509898)[(ulong)param_1 * 0x93] != 0 &&
      (*(int *)((&DAT_00509898)[(ulong)param_1 * 0x93] + 0x158) == 0)))) {
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c6c4 (120 bytes) name=MAG_GetVideoVCL

undefined8 MAG_GetVideoVCL(uint param_1)

{
  undefined4 *puVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     (((&DAT_00509898)[(ulong)param_1 * 0x93] != 0 &&
      (*(int *)((&DAT_00509898)[(ulong)param_1 * 0x93] + 0x158) == 0)))) {
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0006;
    return 0;
  }
  return 0;
}


==================================================================

### FUNC 0017c73c (84 bytes) name=MAG_GetTemperatureData

undefined8 MAG_GetTemperatureData(uint param_1,int *param_2,uint param_3,int param_4)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetTemperaturemC
                        ((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2,param_3,
                         param_4,0);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017c790 (796 bytes) name=MAG_GetTemperatureData_Raw

undefined8 MAG_GetTemperatureData_Raw(uint param_1,uint *param_2,uint param_3,int param_4)

{
  uint *puVar1;
  ushort *puVar2;
  ushort uVar3;
  ushort uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  undefined4 *puVar8;
  uint uVar9;
  ushort *puVar10;
  long lVar11;
  long lVar12;
  ulong uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar13 = (ulong)param_1;
    lVar12 = (&DAT_005098a0)[uVar13 * 0x93];
    if ((lVar12 != 0) && ((&DAT_00509898)[uVar13 * 0x93] != 0)) {
      if ((param_2 == (uint *)0x0) || (param_3 < 5)) {
        puVar8 = (undefined4 *)__errno();
        *puVar8 = 0xe4ae0001;
        return 0;
      }
      if (*(int *)(lVar12 + 0xec) == 0) {
        puVar8 = (undefined4 *)__errno();
        *puVar8 = 0xe4ae0005;
        return 0;
      }
      puVar10 = *(ushort **)(lVar12 + 0x140);
      uVar6 = *(uint *)(lVar12 + 0x4a74);
      uVar3 = puVar10[*(uint *)(lVar12 + 0x4a84)];
      uVar4 = puVar10[*(uint *)(lVar12 + 0x4a80)];
      uVar7 = *(uint *)(lVar12 + 0x4a70);
      if (param_4 != 0) {
        uVar6 = CFunctions::CorrectTemperature((int)lVar12,*(float *)(lVar12 + 0xac),uVar6);
        uVar7 = CFunctions::CorrectTemperature((int)lVar12,*(float *)(lVar12 + 0xac),uVar7);
      }
      param_3 = param_3 >> 2;
      uVar5 = *(int *)(&DAT_00509904 + uVar13 * 0x498) * *(int *)(&DAT_00509900 + uVar13 * 0x498);
      uVar9 = uVar5;
      if (param_3 <= uVar5) {
        uVar9 = param_3;
      }
      if (uVar3 < uVar4) {
        if (uVar9 != 0) {
          if (param_3 <= uVar5) {
            uVar5 = param_3;
          }
          lVar11 = (ulong)uVar4 - (ulong)uVar3;
          uVar13 = (ulong)(uVar5 - 1) + 1;
          lVar12 = 0;
          if (lVar11 != 0) {
            lVar12 = (long)((ulong)(uVar7 - uVar6) << 0x20) / lVar11;
          }
          if (7 < uVar13) {
            lVar11 = uVar13 - (uVar5 & 7);
            if (lVar11 != 0) {
              puVar1 = param_2 + lVar11;
              uVar9 = uVar9 - (int)lVar11;
              puVar2 = puVar10 + lVar11;
              uVar7 = (uint)uVar3;
              puVar10 = puVar10 + 4;
              param_2 = param_2 + 4;
              do {
                uVar14 = *(undefined8 *)(puVar10 + -4);
                uVar15 = *(undefined8 *)puVar10;
                puVar10 = puVar10 + 8;
                lVar11 = lVar11 + -8;
                *(ulong *)(param_2 + -2) =
                     CONCAT44(uVar6 + (int)((ulong)(lVar12 * (int)((uint)(ushort)((ulong)uVar14 >>
                                                                                 0x30) - (uint)uVar3
                                                                  )) >> 0x20),
                              uVar6 + (int)((ulong)(lVar12 * (int)((ushort)((ulong)uVar14 >> 0x20) -
                                                                  uVar7)) >> 0x20));
                *(ulong *)(param_2 + -4) =
                     CONCAT44(uVar6 + (int)((ulong)(lVar12 * (int)((ushort)((ulong)uVar14 >> 0x10) -
                                                                  uVar7)) >> 0x20),
                              uVar6 + (int)((ulong)(lVar12 * (int)(((uint)uVar14 & 0xffff) - uVar7))
                                           >> 0x20));
                *(ulong *)(param_2 + 2) =
                     CONCAT44(uVar6 + (int)((ulong)(lVar12 * (int)((uint)(ushort)((ulong)uVar15 >>
                                                                                 0x30) - (uint)uVar3
                                                                  )) >> 0x20),
                              uVar6 + (int)((ulong)(lVar12 * (int)((ushort)((ulong)uVar15 >> 0x20) -
                                                                  uVar7)) >> 0x20));
                *(ulong *)param_2 =
                     CONCAT44(uVar6 + (int)((ulong)(lVar12 * (int)((ushort)((ulong)uVar15 >> 0x10) -
                                                                  uVar7)) >> 0x20),
                              uVar6 + (int)((ulong)(lVar12 * (int)(((uint)uVar15 & 0xffff) - uVar7))
                                           >> 0x20));
                param_2 = param_2 + 8;
              } while (lVar11 != 0);
              param_2 = puVar1;
              puVar10 = puVar2;
              if ((uVar5 & 7) == 0) {
                return 1;
              }
            }
          }
          do {
            uVar9 = uVar9 - 1;
            *param_2 = uVar6 + (int)(lVar12 * ((ulong)*puVar10 - (ulong)uVar3) >> 0x20);
            param_2 = param_2 + 1;
            puVar10 = puVar10 + 1;
          } while (uVar9 != 0);
          return 1;
        }
      }
      else if (uVar9 != 0) {
        if (param_3 <= uVar5) {
          uVar5 = param_3;
        }
        uVar13 = (ulong)(uVar5 - 1) + 1;
        if (7 < uVar13) {
          lVar12 = uVar13 - (uVar5 & 7);
          if (lVar12 != 0) {
            puVar1 = param_2 + lVar12;
            uVar9 = uVar9 - (int)lVar12;
            param_2 = param_2 + 4;
            do {
              *(ulong *)(param_2 + -2) = CONCAT44(uVar6,uVar6);
              *(ulong *)(param_2 + -4) = CONCAT44(uVar6,uVar6);
              *(ulong *)(param_2 + 2) = CONCAT44(uVar6,uVar6);
              *(ulong *)param_2 = CONCAT44(uVar6,uVar6);
              lVar12 = lVar12 + -8;
              param_2 = param_2 + 8;
            } while (lVar12 != 0);
            param_2 = puVar1;
            if ((uVar5 & 7) == 0) {
              return 1;
            }
          }
        }
        do {
          *param_2 = uVar6;
          uVar9 = uVar9 - 1;
          param_2 = param_2 + 1;
        } while (uVar9 != 0);
        return 1;
      }
      return 1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017caac (132 bytes) name=MAG_GetFixPara

void MAG_GetFixPara(uint param_1,undefined8 *param_2)

{
  undefined4 *puVar1;
  long lVar2;
  undefined8 uVar3;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
    if ((lVar2 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if (param_2 == (undefined8 *)0x0) {
        puVar1 = (undefined4 *)__errno();
        *puVar1 = 0xe4ae0001;
        return;
      }
      uVar3 = *(undefined8 *)(lVar2 + 0xc4);
      *(undefined8 *)((long)param_2 + 0x24) = *(undefined8 *)(lVar2 + 0xcc);
      *(undefined8 *)((long)param_2 + 0x1c) = uVar3;
      uVar3 = *(undefined8 *)(lVar2 + 0xb8);
      param_2[3] = *(undefined8 *)(lVar2 + 0xc0);
      param_2[2] = uVar3;
      uVar3 = *(undefined8 *)(lVar2 + 0xa8);
      param_2[1] = *(undefined8 *)(lVar2 + 0xb0);
      *param_2 = uVar3;
    }
  }
  return;
}


==================================================================

### FUNC 0017cb30 (216 bytes) name=MAG_SetFixPara

undefined4 * MAG_SetFixPara(undefined4 *param_1,undefined8 *param_2)

{
  uint uVar1;
  long lVar2;
  long *plVar3;
  undefined8 uVar4;
  
  if (((uint)param_1 < 0x81) && ((&DAT_005098a8)[((ulong)param_1 & 0xffffffff) * 0x93] != 0)) {
    plVar3 = &DAT_005098a0 + ((ulong)param_1 & 0xffffffff) * 0x93;
    if ((*plVar3 != 0) && ((&DAT_00509898)[((ulong)param_1 & 0xffffffff) * 0x93] != 0)) {
      if (param_2 == (undefined8 *)0x0) {
        param_1 = (undefined4 *)__errno();
        *param_1 = 0xe4ae0001;
      }
      else {
        pthread_mutex_lock((pthread_mutex_t *)(*plVar3 + 0xf0));
        lVar2 = *plVar3;
        uVar4 = *(undefined8 *)((long)param_2 + 0x1c);
        *(undefined8 *)(lVar2 + 0xcc) = *(undefined8 *)((long)param_2 + 0x24);
        *(undefined8 *)(lVar2 + 0xc4) = uVar4;
        uVar4 = param_2[2];
        *(undefined8 *)(lVar2 + 0xc0) = param_2[3];
        *(undefined8 *)(lVar2 + 0xb8) = uVar4;
        uVar4 = *param_2;
        *(undefined8 *)(lVar2 + 0xb0) = param_2[1];
        *(undefined8 *)(lVar2 + 0xa8) = uVar4;
        CFunctions::CalTaoAtm
                  ((CFunctions *)*plVar3,(struct_FixPara *)((CFunctions *)*plVar3 + 0xa8));
        uVar1 = pthread_mutex_unlock((pthread_mutex_t *)(*plVar3 + 0xf0));
        param_1 = (undefined4 *)(ulong)uVar1;
      }
    }
  }
  return param_1;
}


==================================================================

### FUNC 0017cc08 (76 bytes) name=MAG_SetEXLevel

void MAG_SetEXLevel(uint param_1)

{
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      CFunctions::SetEX();
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0017cc54 (80 bytes) name=MAG_GetEXLevel

undefined8 MAG_GetEXLevel(uint param_1)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetEX((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93]);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017cca4 (88 bytes) name=MAG_SetDetailEnhancement

void MAG_SetDetailEnhancement(uint param_1,uint param_2,undefined4 param_3)

{
  uint uVar1;
  long lVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    lVar2 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
    if ((lVar2 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = 0;
      if (param_2 < 0x21) {
        uVar1 = param_2;
      }
      *(undefined4 *)(lVar2 + 0x60) = param_3;
      *(uint *)(lVar2 + 0x2c) = uVar1;
    }
  }
  return;
}


==================================================================

### FUNC 0017ccfc (96 bytes) name=MAG_FixTemperature

ulong MAG_FixTemperature(float param_1,uint param_2,uint param_3)

{
  ulong uVar1;
  
  if ((param_2 < 0x81) && ((&DAT_005098a8)[(ulong)param_2 * 0x93] != 0)) {
    if (((&DAT_005098a0)[(ulong)param_2 * 0x93] != 0) &&
       ((&DAT_00509898)[(ulong)param_2 * 0x93] != 0)) {
      uVar1 = CFunctions::CorrectTemperature
                        ((int)(&DAT_005098a0)[(ulong)param_2 * 0x93],param_1,param_3);
      return uVar1;
    }
  }
  return (ulong)param_3;
}


==================================================================

### FUNC 0017cd5c (80 bytes) name=MAG_FixTemperature2

ulong MAG_FixTemperature2(float param_1,uint param_2,uint param_3)

{
  ulong uVar1;
  
  if ((param_2 < 0x81) && ((&DAT_005098a8)[(ulong)param_2 * 0x93] != 0)) {
    if (((&DAT_005098a0)[(ulong)param_2 * 0x93] != 0) &&
       ((&DAT_00509898)[(ulong)param_2 * 0x93] != 0)) {
      uVar1 = CFunctions::CorrectTemperature
                        ((int)(&DAT_005098a0)[(ulong)param_2 * 0x93],param_1,param_3);
      return uVar1;
    }
  }
  return (ulong)param_3;
}


==================================================================

### FUNC 0017cdac (116 bytes) name=MAG_GetFrameStatisticalData

long MAG_GetFrameStatisticalData(uint param_1)

{
  CFunctions *this;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    this = (CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93];
    if (this == (CFunctions *)0x0) {
      return 0;
    }
    if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
      CFunctions::CopyState(this);
      return (&DAT_005098a0)[(ulong)param_1 * 0x93] + 0x4a58;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017ce20 (88 bytes) name=MAG_GetRemoteInfo

undefined * MAG_GetRemoteInfo(uint param_1)

{
  undefined *puVar1;
  ulong uVar2;
  
  if (((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
     (uVar2 = (ulong)param_1, (&DAT_005098a0)[uVar2 * 0x93] != 0)) {
    puVar1 = (undefined *)0x0;
    if ((&DAT_00509898)[uVar2 * 0x93] != 0) {
      puVar1 = &DAT_00509d1c + uVar2 * 0x498;
    }
    return puVar1;
  }
  return (undefined *)0x0;
}


==================================================================

### FUNC 0017ce78 (104 bytes) name=MAG_GetTemperatureProbe

undefined8 MAG_GetTemperatureProbe(uint param_1,int param_2,int param_3,uint param_4)

{
  undefined8 uVar1;
  ulong uVar2;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar2 = (ulong)param_1;
    if (((CFunctions *)(&DAT_005098a0)[uVar2 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[uVar2 * 0x93] != 0)) {
      uVar1 = CFunctions::GetTemperature
                        ((CFunctions *)(&DAT_005098a0)[uVar2 * 0x93],
                         param_2 + *(int *)(&DAT_00509900 + uVar2 * 0x498) * param_3,param_4,0);
      return uVar1;
    }
  }
  return 0x80000001;
}


==================================================================

### FUNC 0017cee0 (84 bytes) name=MAG_GetTemperatureProbe2

undefined8 MAG_GetTemperatureProbe2(uint param_1,uint param_2,uint param_3)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetTemperature
                        ((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2,param_3,0);
      return uVar1;
    }
  }
  return 0x80000001;
}


==================================================================

### FUNC 0017cf34 (108 bytes) name=MAG_GetLineTemperatureInfo

undefined8
MAG_GetLineTemperatureInfo
          (uint param_1,int *param_2,uint param_3,int *param_4,uint param_5,uint param_6,
          uint param_7,uint param_8)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetLineTemperatureInfo3
                        ((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2,param_3,
                         param_4,param_5,param_6,param_7,param_8,0);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017cfa0 (96 bytes) name=MAG_GetRectTemperatureInfo

undefined8
MAG_GetRectTemperatureInfo
          (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  CFunctions *this;
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    this = (CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93];
    if ((this != (CFunctions *)0x0) &&
       (((&DAT_00509898)[(ulong)param_1 * 0x93] != 0 && (*(int *)(this + 0xec) != 0)))) {
      uVar1 = CFunctions::GetRectTemperatureInfo(this,param_2,param_3,param_4,param_5,param_6,0);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017d000 (84 bytes) name=MAG_GetEllipseTemperatureInfo

undefined8
MAG_GetEllipseTemperatureInfo
          (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetEllipseTemperatureInfo
                        ((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2,param_3,
                         param_4,param_5,param_6,0);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017d054 (84 bytes) name=MAG_GetRgnTemperatureInfo

undefined8 MAG_GetRgnTemperatureInfo(uint param_1,uint *param_2,uint param_3,int *param_4)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::GetRgnTemperatureInfo
                        ((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2,param_3,
                         param_4,0);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017d0a8 (80 bytes) name=MAG_UseTemperatureMask

undefined8 MAG_UseTemperatureMask(uint param_1,int param_2)

{
  undefined8 uVar1;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93] != (CFunctions *)0x0) &&
       ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      uVar1 = CFunctions::UseMask((CFunctions *)(&DAT_005098a0)[(ulong)param_1 * 0x93],param_2);
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017d0f8 (132 bytes) name=MAG_IsUsingTemperatureMask

bool MAG_IsUsingTemperatureMask(uint param_1)

{
  long lVar1;
  
  if (0x80 < param_1) {
    return false;
  }
  if ((&DAT_005098a8)[(ulong)param_1 * 0x93] == 0) {
    return false;
  }
  lVar1 = (&DAT_005098a0)[(ulong)param_1 * 0x93];
  if (lVar1 == 0) {
    return false;
  }
  if ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0) {
    if (*(int *)(lVar1 + 0xe0) != 0) {
      return *(int *)(lVar1 + 0xe8) != 0;
    }
    return false;
  }
  return false;
}


==================================================================

### FUNC 0017d17c (100 bytes) name=MAG_SaveBMP

undefined8 MAG_SaveBMP(uint param_1,undefined8 param_2,char *param_3)

{
  undefined8 uVar1;
  CVideoFunctions *this;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    if (((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0) &&
       (this = (CVideoFunctions *)(&DAT_00509898)[(ulong)param_1 * 0x93],
       this != (CVideoFunctions *)0x0)) {
      if (*(int *)(this + 0x158) != 0) {
        uVar1 = CVideoFunctions::SaveRGB24(this,param_3);
        return uVar1;
      }
      uVar1 = CFunctions::SaveBMP();
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017d1e0 (8 bytes) name=MAG_SetPTZCmd

undefined8 MAG_SetPTZCmd(void)

{
  return 0;
}


==================================================================

### FUNC 0017d1e8 (8 bytes) name=MAG_QueryPTZState

undefined8 MAG_QueryPTZState(void)

{
  return 0;
}


==================================================================

### FUNC 0017d1f0 (8 bytes) name=MAG_SetSerialCmd

undefined8 MAG_SetSerialCmd(void)

{
  return 0;
}


==================================================================

### FUNC 0017d1f8 (8 bytes) name=MAG_SetVideoContrast

undefined8 MAG_SetVideoContrast(void)

{
  return 0;
}


==================================================================

### FUNC 0017d200 (84 bytes) name=MAG_SetSerialCallBack

bool MAG_SetSerialCallBack(uint param_1)

{
  if (((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
     ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) {
    return (&DAT_00509898)[(ulong)param_1 * 0x93] != 0;
  }
  return false;
}


==================================================================

### FUNC 0017d254 (8 bytes) name=MAG_SetVideoBrightness

undefined8 MAG_SetVideoBrightness(void)

{
  return 0;
}


==================================================================

### FUNC 0017d25c (120 bytes) name=MAG_LockFrame

ulong MAG_LockFrame(ulong param_1)

{
  uint uVar1;
  
  if (((uint)param_1 < 0x81) && ((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] != 0)) {
    if (((&DAT_005098a0)[(param_1 & 0xffffffff) * 0x93] != 0) &&
       ((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] != 0)) {
      pthread_mutex_lock((pthread_mutex_t *)((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] + 0xa0))
      ;
      uVar1 = pthread_mutex_lock((pthread_mutex_t *)
                                 ((&DAT_005098a0)[(param_1 & 0xffffffff) * 0x93] + 0xf0));
      return (ulong)uVar1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0017d2d4 (120 bytes) name=MAG_UnLockFrame

ulong MAG_UnLockFrame(ulong param_1)

{
  uint uVar1;
  
  if (((uint)param_1 < 0x81) && ((&DAT_005098a8)[(param_1 & 0xffffffff) * 0x93] != 0)) {
    if (((&DAT_005098a0)[(param_1 & 0xffffffff) * 0x93] != 0) &&
       ((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] != 0)) {
      pthread_mutex_unlock
                ((pthread_mutex_t *)((&DAT_005098a0)[(param_1 & 0xffffffff) * 0x93] + 0xf0));
      uVar1 = pthread_mutex_unlock
                        ((pthread_mutex_t *)((&DAT_00509898)[(param_1 & 0xffffffff) * 0x93] + 0xa0))
      ;
      return (ulong)uVar1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0017d34c (328 bytes) name=MAG_SaveMGT

undefined4 MAG_SaveMGT(uint param_1,char *param_2)

{
  long lVar1;
  undefined4 uVar2;
  undefined4 *puVar3;
  char *pcVar4;
  long *plVar5;
  ushort local_60;
  ushort local_5e;
  ushort local_5a;
  ushort local_58;
  ushort local_56;
  ushort local_54;
  MStream aMStack_50 [24];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    plVar5 = &DAT_005098a0 + (ulong)param_1 * 0x93;
    if ((*plVar5 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if (*(int *)(*plVar5 + 0xec) == 0) {
        puVar3 = (undefined4 *)__errno();
        uVar2 = 0;
        *puVar3 = 0xe4ae0006;
      }
      else {
        MStream::MStream(aMStack_50,0x100);
        if (param_2 == (char *)0x0) {
          GetLocalTime((_SYSTEMTIME *)&local_60);
          MStream::Fmt((char *)aMStack_50,"%d-%02d-%02d %02d-%02d-%02d.mgt",(ulong)local_60,
                       (ulong)local_5e,(ulong)local_5a,(ulong)local_58,(ulong)local_56,
                       (ulong)local_54);
        }
        else {
          MStream::operator<<(aMStack_50,param_2);
        }
        pthread_mutex_lock((pthread_mutex_t *)(*plVar5 + 0xf0));
        pcVar4 = (char *)MStream::Get(aMStack_50);
        uVar2 = SaveMGT(param_1,pcVar4);
        pthread_mutex_unlock((pthread_mutex_t *)(*plVar5 + 0xf0));
        MStream::~MStream(aMStack_50);
      }
      goto LAB_0017d3e4;
    }
  }
  uVar2 = 0;
LAB_0017d3e4:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017d4b0 (1116 bytes) name=SaveMGT

/* SaveMGT(unsigned int, char const*) */

undefined4 SaveMGT(uint param_1,char *param_2)

{
  int iVar1;
  long lVar2;
  int iVar3;
  undefined4 uVar4;
  char *__src;
  int *piVar5;
  undefined4 *puVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  ulong uVar10;
  long *plVar11;
  OFStream aOStack_488 [16];
  MStream aMStack_478 [24];
  ushort local_460;
  ushort local_45e;
  ushort local_45a;
  ushort local_458;
  ushort local_456;
  ushort local_454;
  tm local_450;
  undefined8 local_418;
  undefined4 local_410;
  char acStack_40c [44];
  char acStack_3e0 [20];
  char acStack_3cc [32];
  char acStack_3ac [32];
  undefined8 local_38c;
  undefined8 uStack_384;
  undefined8 local_368;
  undefined8 uStack_360;
  undefined8 local_358;
  undefined8 uStack_350;
  undefined4 local_348;
  undefined4 local_344;
  undefined4 local_340;
  undefined4 local_278;
  ulong local_274;
  undefined8 uStack_26c;
  undefined8 local_264;
  undefined4 uStack_25c;
  undefined4 uStack_258;
  undefined4 local_254;
  undefined4 uStack_250;
  undefined4 uStack_24c;
  undefined4 uStack_248;
  undefined4 local_244;
  undefined4 local_240;
  undefined4 local_23c;
  undefined4 local_18c;
  undefined4 local_184;
  undefined4 local_180;
  int local_13c;
  int local_138;
  int local_134;
  undefined4 local_12c;
  int local_128;
  int local_124;
  
  lVar2 = tpidr_el0;
  lVar7 = *(long *)(lVar2 + 0x28);
  uVar10 = (ulong)param_1;
  plVar11 = &DAT_005098a0 + uVar10 * 0x93;
  if (*(int *)((CFunctions *)*plVar11 + 0xec) == 0) {
    puVar6 = (undefined4 *)__errno();
    uVar4 = 0;
    *puVar6 = 0xe4ae0006;
  }
  else {
    iVar3 = CFunctions::SaveBMP((CFunctions *)*plVar11,0,param_2);
    if (iVar3 == 0) {
      puVar6 = (undefined4 *)__errno();
      uVar4 = 0;
      *puVar6 = 0xe4ae0009;
    }
    else {
      memset(acStack_40c,0,0x3a0);
      lVar8 = uVar10 * 0x498;
      local_340 = *(undefined4 *)(&DAT_005098fc + lVar8);
      local_418 = 0x10000000003ac;
      local_410 = 0x198;
      sprintf(acStack_40c,"%d",(ulong)*(uint *)(&DAT_005098f8 + lVar8));
      localtime_r((time_t *)(&DAT_00509960 + lVar8),&local_450);
      sprintf(acStack_3e0,"%4d%02d%02d%02d%02d%02d",(ulong)(local_450.tm_year + 0x76c),
              (ulong)(local_450.tm_mon + 1),(ulong)(uint)local_450.tm_mday,
              (ulong)(uint)local_450.tm_hour,(ulong)(uint)local_450.tm_min,
              (ulong)(uint)local_450.tm_sec);
      GetLocalTime((_SYSTEMTIME *)&local_460);
      MStream::MStream(aMStack_478,0x100);
      MStream::Fmt((char *)aMStack_478,"%d-%02d-%02d %02d-%02d-%02d",(ulong)local_460,
                   (ulong)local_45e,(ulong)local_45a,(ulong)local_458,(ulong)local_456,
                   (ulong)local_454);
      __src = (char *)MStream::Get(aMStack_478);
      strncpy(acStack_3e0,__src,0x14);
      lVar8 = uVar10 * 0x498;
      strncpy(acStack_3ac,&DAT_00509910 + lVar8,0x20);
      strncpy(acStack_3cc,&DAT_00509930 + lVar8,0x20);
      uStack_384 = *(undefined8 *)(&DAT_00509958 + lVar8);
      local_38c = *(undefined8 *)(&DAT_00509950 + lVar8);
      lVar8 = *plVar11;
      if (*(uint *)(lVar8 + 0x70) < *(uint *)(lVar8 + 0x163c)) {
        lVar9 = lVar8 + (ulong)*(uint *)(lVar8 + 0x70) * 0x21c;
        uStack_350 = *(undefined8 *)(lVar9 + 0x1658);
        local_358 = *(undefined8 *)(lVar9 + 0x1650);
        uStack_360 = *(undefined8 *)(lVar9 + 0x1648);
        local_368 = *(undefined8 *)(lVar9 + 0x1640);
        local_344 = *(undefined4 *)(lVar9 + 0x1664);
        local_348 = *(undefined4 *)(lVar9 + 0x1660);
      }
      local_278 = 0xe8;
      if ((*(int *)(&DAT_005098c0 + uVar10 * 0x498) == 0) &&
         (0x10001 < *(int *)(&DAT_00509980 + uVar10 * 0x498))) {
        lVar8 = uVar10 * 0x498;
        uStack_26c = *(undefined8 *)(lVar8 + 0x509c40);
        local_274 = *(ulong *)(&DAT_00509c38 + lVar8);
        local_264 = *(undefined8 *)(&DAT_00509c48 + lVar8);
        local_240 = *(undefined4 *)(&DAT_00509c6c + lVar8);
        uStack_25c = (undefined4)*(undefined8 *)(lVar8 + 0x509c50);
        uStack_258 = (undefined4)((ulong)*(undefined8 *)(lVar8 + 0x509c50) >> 0x20);
        local_244 = *(undefined4 *)(&DAT_00509c68 + lVar8);
        puVar6 = (undefined4 *)(&DAT_00509c70 + lVar8);
        uStack_24c = (undefined4)*(undefined8 *)(lVar8 + 0x509c60);
        uStack_248 = (undefined4)((ulong)*(undefined8 *)(lVar8 + 0x509c60) >> 0x20);
        local_254 = (undefined4)*(undefined8 *)(&DAT_00509c58 + lVar8);
        uStack_250 = (undefined4)((ulong)*(undefined8 *)(&DAT_00509c58 + lVar8) >> 0x20);
      }
      else {
        local_274 = (ulong)*(uint *)(&DAT_005098c8 + uVar10 * 0x498);
        uStack_26c = *(undefined8 *)(lVar8 + 0xac);
        local_264 = *(undefined8 *)(lVar8 + 0xcc);
        uStack_25c = *(undefined4 *)(lVar8 + 0xa8);
        uStack_250 = (undefined4)*(undefined8 *)(lVar8 + 0x18);
        uStack_24c = (undefined4)((ulong)*(undefined8 *)(lVar8 + 0x18) >> 0x20);
        uStack_258 = (undefined4)*(undefined8 *)(lVar8 + 0x10);
        local_254 = (undefined4)((ulong)*(undefined8 *)(lVar8 + 0x10) >> 0x20);
        uStack_248 = *(undefined4 *)(lVar8 + 0x20);
        local_244 = *(undefined4 *)(lVar8 + 0x24);
        local_240 = *(undefined4 *)(lVar8 + 0x30);
        puVar6 = (undefined4 *)(lVar8 + 0x34);
      }
      local_23c = *puVar6;
      OFStream::OFStream(aOStack_488,param_2,true);
      FStream::Seek((FStream *)aOStack_488,0,2);
      uVar4 = OFStream::GetLength(aOStack_488);
      OFStream::Write(aOStack_488,&local_418,0x3ac,1);
      iVar3 = *(int *)(&DAT_005098e0 + uVar10 * 0x498);
      iVar1 = *(int *)(&DAT_005098e4 + uVar10 * 0x498);
      piVar5 = operator_new__((ulong)(uint)(iVar1 * iVar3) << 2);
      iVar3 = CFunctions::GetTemperaturemC((CFunctions *)*plVar11,piVar5,iVar3 * iVar1 * 4,0,1);
      if (iVar3 != 0) {
        local_18c = OFStream::GetLength(aOStack_488);
        local_13c = *(int *)(&DAT_005098e0 + uVar10 * 0x498);
        local_138 = *(int *)(&DAT_005098e4 + uVar10 * 0x498);
        local_134 = local_13c * local_138 * 4;
        OFStream::Write(aOStack_488,piVar5,(long)local_134,1);
      }
      operator_delete__(piVar5);
      local_184 = OFStream::GetLength(aOStack_488);
      local_12c = 0x428;
      OFStream::Write(aOStack_488,(void *)(*plVar11 + 0xdd8),0x428,1);
      local_180 = OFStream::GetLength(aOStack_488);
      local_128 = *(int *)(&DAT_005098f0 + uVar10 * 0x498);
      local_124 = *(int *)(&DAT_005098f4 + uVar10 * 0x498);
      OFStream::Write(aOStack_488,*(void **)(*plVar11 + 0x180),(long)(local_128 * local_124),1);
      FStream::Seek((FStream *)aOStack_488,uVar4,0);
      OFStream::Write(aOStack_488,&local_418,0x3ac,1);
      OFStream::~OFStream(aOStack_488);
      uVar4 = 1;
      MStream::~MStream(aMStack_478);
    }
  }
  if (*(long *)(lVar2 + 0x28) == lVar7) {
    return uVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017d9a8 (340 bytes) name=MAG_SaveDDT

bool MAG_SaveDDT(uint param_1,char *param_2)

{
  long lVar1;
  int iVar2;
  undefined4 *puVar3;
  char *pcVar4;
  bool bVar5;
  long *plVar6;
  ushort local_60;
  ushort local_5e;
  ushort local_5a;
  ushort local_58;
  ushort local_56;
  ushort local_54;
  MStream aMStack_50 [24];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    plVar6 = &DAT_005098a0 + (ulong)param_1 * 0x93;
    if ((*plVar6 != 0) && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)) {
      if (*(int *)(*plVar6 + 0xec) == 0) {
        puVar3 = (undefined4 *)__errno();
        bVar5 = false;
        *puVar3 = 0xe4ae0006;
      }
      else {
        MStream::MStream(aMStack_50,0x100);
        if (param_2 == (char *)0x0) {
          GetLocalTime((_SYSTEMTIME *)&local_60);
          MStream::Fmt((char *)aMStack_50,"%d-%02d-%02d %02d-%02d-%02d.ddt",(ulong)local_60,
                       (ulong)local_5e,(ulong)local_5a,(ulong)local_58,(ulong)local_56,
                       (ulong)local_54);
        }
        else {
          MStream::operator<<(aMStack_50,param_2);
        }
        pthread_mutex_lock((pthread_mutex_t *)(*plVar6 + 0xf0));
        pcVar4 = (char *)MStream::Get(aMStack_50);
        iVar2 = SaveDDT(param_1,(uchar *)0x0,pcVar4);
        pthread_mutex_unlock((pthread_mutex_t *)(*plVar6 + 0xf0));
        bVar5 = 0 < iVar2;
        MStream::~MStream(aMStack_50);
      }
      goto LAB_0017da40;
    }
  }
  bVar5 = false;
LAB_0017da40:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return bVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017db18 (640 bytes) name=SaveDDT

/* SaveDDT(unsigned int, unsigned char*, char const*) */

void SaveDDT(uint param_1,uchar *param_2,char *param_3)

{
  long lVar1;
  long lVar2;
  ulong uVar3;
  undefined4 *puVar4;
  long lVar5;
  long *plVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  OFStream aOStack_3f0 [16];
  undefined8 local_3e0;
  int local_3d8;
  int iStack_3d4;
  undefined4 local_3d0;
  undefined4 local_3cc;
  undefined8 local_3c8;
  undefined8 uStack_3c0;
  undefined4 local_3b8;
  undefined4 uStack_3b4;
  undefined8 local_3b0;
  undefined1 local_391;
  undefined8 local_390;
  undefined8 uStack_388;
  undefined8 local_380;
  ulong uStack_378;
  undefined8 local_370;
  undefined4 local_368;
  undefined4 local_364;
  undefined8 local_360;
  undefined8 uStack_358;
  undefined1 auStack_350 [556];
  undefined4 local_124;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110;
  undefined4 local_10c;
  undefined8 local_108;
  undefined8 uStack_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  
  uVar3 = (ulong)param_1;
  lVar2 = tpidr_el0;
  lVar5 = *(long *)(lVar2 + 0x28);
  plVar6 = &DAT_005098a0 + uVar3 * 0x93;
  lVar9 = *plVar6;
  if (*(int *)(lVar9 + 0xec) == 0) {
    puVar4 = (undefined4 *)__errno();
    iVar7 = 0;
    *puVar4 = 0xe4ae0006;
  }
  else {
    memset(&local_3c8,0,0x350);
    lVar1 = uVar3 * 0x498;
    local_368 = *(undefined4 *)(&DAT_005098f8 + lVar1);
    local_70 = *(undefined4 *)(&DAT_005098fc + lVar1);
    local_3e0 = 0x1000200000374;
    local_370 = *(undefined8 *)(&DAT_00509960 + lVar1);
    iVar7 = *(int *)(&DAT_005098e0 + lVar1);
    iVar8 = *(int *)(&DAT_005098e4 + lVar1);
    local_3d0 = *(undefined4 *)(lVar9 + 0x76dc);
    uStack_3c0 = *(undefined8 *)(&DAT_00509958 + lVar1);
    local_3c8 = *(undefined8 *)(&DAT_00509950 + lVar1);
    uStack_388 = *(undefined8 *)(lVar1 + 0x509918);
    local_390 = *(undefined8 *)(&DAT_00509910 + lVar1);
    local_3cc = *(undefined4 *)(lVar9 + 0x76e0);
    local_3b8 = *(undefined4 *)(&DAT_00509908 + lVar1);
    uStack_3b4 = *(undefined4 *)(&DAT_0050990c + lVar1);
    local_380 = *(undefined8 *)(&DAT_00509920 + lVar1);
    local_78 = *(undefined4 *)(lVar9 + 0x3c);
    local_74 = *(undefined4 *)(lVar9 + 0x40);
    local_391 = 0;
    local_3b0 = *(undefined8 *)(&DAT_00509930 + lVar1);
    local_364 = *(undefined4 *)(&DAT_00509978 + lVar1);
    uStack_358 = *(undefined8 *)(&DAT_00509970 + lVar1);
    local_360 = *(undefined8 *)(&DAT_00509968 + lVar1);
    uStack_378 = *(ulong *)(lVar1 + 0x509928) & 0xffffffffffffff;
    local_3d8 = iVar7;
    iStack_3d4 = iVar8;
    if (*(uint *)(lVar9 + 0x70) < *(uint *)(lVar9 + 0x163c)) {
      memcpy(auStack_350,(void *)(lVar9 + (ulong)*(uint *)(lVar9 + 0x70) * 0x21c + 0x1640),0x21c);
    }
    local_124 = *(undefined4 *)(&DAT_005098c8 + uVar3 * 0x498);
    local_120 = 0;
    local_11c = *(undefined4 *)(lVar9 + 0xac);
    local_118 = *(undefined4 *)(lVar9 + 0xb0);
    local_114 = *(undefined4 *)(lVar9 + 0xcc);
    local_110 = *(undefined4 *)(lVar9 + 0xd0);
    local_10c = *(undefined4 *)(lVar9 + 0xa8);
    uStack_100 = *(undefined8 *)(lVar9 + 0x18);
    local_108 = *(undefined8 *)(lVar9 + 0x10);
    local_f8 = *(undefined4 *)(lVar9 + 0x20);
    local_f4 = *(undefined4 *)(lVar9 + 0x24);
    local_f0 = *(undefined4 *)(lVar9 + 0x30);
    local_ec = *(undefined4 *)(lVar9 + 0x34);
    if (param_2 == (uchar *)0x0) {
      OFStream::OFStream(aOStack_3f0,param_3,false);
      OFStream::Write(aOStack_3f0,&local_3e0,0x374,1);
      OFStream::Write(aOStack_3f0,*(void **)(*plVar6 + 0x140),
                      (ulong)(uint)(iStack_3d4 * local_3d8) << 1,1);
      OFStream::~OFStream(aOStack_3f0);
      iVar7 = local_3d8;
      iVar8 = iStack_3d4;
    }
    else {
      memcpy(param_2,&local_3e0,0x374);
      memcpy(param_2 + 0x374,*(void **)(*plVar6 + 0x140),(ulong)(uint)(iVar8 * iVar7) << 1);
    }
    iVar7 = iVar7 * iVar8 * 2 + 0x374;
  }
  if (*(long *)(lVar2 + 0x28) == lVar5) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar7);
}


==================================================================

### FUNC 0017de1c (260 bytes) name=MAG_SaveDDT2Buffer

uint MAG_SaveDDT2Buffer(uint param_1,uchar *param_2,ulong param_3)

{
  uint uVar1;
  undefined4 *puVar2;
  long lVar3;
  ulong uVar4;
  
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar4 = (ulong)param_1;
    lVar3 = (&DAT_005098a0)[uVar4 * 0x93];
    if ((lVar3 != 0) && ((&DAT_00509898)[uVar4 * 0x93] != 0)) {
      if ((param_2 != (uchar *)0x0) &&
         ((ulong)(uint)(*(int *)(&DAT_005098e4 + uVar4 * 0x498) *
                       *(int *)(&DAT_005098e0 + uVar4 * 0x498)) * 2 + 0x374 <=
          (param_3 & 0xffffffff))) {
        if (*(int *)(lVar3 + 0xec) != 0) {
          pthread_mutex_lock((pthread_mutex_t *)(lVar3 + 0xf0));
          uVar1 = SaveDDT(param_1,param_2,"");
          pthread_mutex_unlock((pthread_mutex_t *)((&DAT_005098a0)[uVar4 * 0x93] + 0xf0));
          return uVar1 & ((int)uVar1 >> 0x1f ^ 0xffffffffU);
        }
        puVar2 = (undefined4 *)__errno();
        *puVar2 = 0xe4ae0006;
        return 0;
      }
      puVar2 = (undefined4 *)__errno();
      *puVar2 = 0xe4ae0001;
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 0017df20 (1228 bytes) name=LoadDDT

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* LoadDDT(unsigned int, OutputPara*, void const*, unsigned int, void (*)(unsigned int, unsigned
   int, unsigned int, void*), void*) */

void LoadDDT(uint param_1,OutputPara *param_2,void *param_3,uint param_4,
            _func_void_uint_uint_uint_void_ptr *param_5,void *param_6)

{
  int iVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  int iVar5;
  undefined4 *puVar6;
  long lVar7;
  CFunctions *this;
  ulong uVar8;
  uint *puVar9;
  void *__src;
  undefined4 uVar10;
  long *plVar11;
  uint uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 local_410;
  undefined8 uStack_408;
  undefined4 local_400;
  undefined4 local_3fc;
  undefined8 local_3f8;
  undefined8 uStack_3f0;
  int local_3e0 [2];
  uint local_3d8;
  int iStack_3d4;
  uint local_3d0;
  int iStack_3cc;
  uint local_3c8;
  int iStack_3c4;
  undefined4 local_3c0;
  undefined4 uStack_3bc;
  undefined4 local_3b8;
  undefined4 uStack_3b4;
  char acStack_3b0 [32];
  char acStack_390 [32];
  undefined8 local_370;
  undefined4 local_368;
  undefined4 local_364;
  undefined8 local_360;
  undefined8 uStack_358;
  undefined1 auStack_350 [556];
  undefined4 local_124;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110;
  undefined4 local_10c;
  undefined8 local_108;
  undefined8 uStack_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  int local_78;
  uint local_74;
  int local_70;
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar8 = (ulong)param_1;
    plVar11 = &DAT_005098a0 + uVar8 * 0x93;
    if ((*plVar11 != 0) && ((&DAT_00509898)[uVar8 * 0x93] != 0)) {
      if ((((((param_2 != (OutputPara *)0x0) && (param_3 != (void *)0x0)) &&
            (uVar2 = *(uint *)param_2, (uVar2 & 3) == 0)) &&
           (((*(uint *)(param_2 + 8) & 3) == 0 && (uVar2 <= *(uint *)(param_2 + 8))))) &&
          ((*(uint *)(param_2 + 0x10) & 3) == 0)) &&
         (((iVar5 = *(int *)(param_2 + 4), iVar5 - 1U < *(uint *)(param_2 + 0xc) &&
           (*(int *)(param_2 + 0x14) != 0)) && (0x87 < param_4)))) {
        __src = (void *)((long)param_3 + 0x88);
        uVar12 = param_4 - 0x88;
        if (*(int *)param_3 != 0x5bb5b55b) {
          __src = param_3;
          uVar12 = param_4;
        }
        if (((0x97 < uVar12) && (*(int *)param_3 != 0x5bb5b55b)) &&
           (*(int *)((long)__src + ((ulong)uVar12 - 0x98)) == 0x5bb5b57b)) {
          iVar1 = *(int *)((long)__src + ((ulong)uVar12 - 0x94)) + 0x88;
          __src = (void *)((long)__src + (long)iVar1);
          uVar12 = uVar12 - iVar1;
        }
        if (0x374 < uVar12) {
          if (*(int *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x80) == 0) {
            *(void **)(&DAT_005098b0 + uVar8 * 0x498) = param_6;
            memcpy(local_3e0,__src,0x374);
            if (local_3e0[0] == 0x374) {
              if ((local_3d8 != uVar2) || (iStack_3d4 != iVar5)) {
                *(uint *)param_2 = local_3d8;
                *(int *)(param_2 + 4) = iStack_3d4;
                *(uint *)(param_2 + 8) = local_3d8;
                *(int *)(param_2 + 0xc) = iStack_3d4;
                *(undefined4 *)(param_2 + 0x10) = 0x10;
                *(int *)(param_2 + 0x14) = iStack_3d4;
                iVar5 = iStack_3d4;
              }
              lVar3 = uVar8 * 0x498;
              *(undefined8 *)(&DAT_005098f0 + lVar3) = *(undefined8 *)(param_2 + 0x10);
              iVar1 = DAT_0052e930;
              uVar13 = *(undefined8 *)param_2;
              *(undefined8 *)(lVar3 + 0x5098e8) = *(undefined8 *)(param_2 + 8);
              *(undefined8 *)(&DAT_005098e0 + lVar3) = uVar13;
              if ((iVar1 == 0) || (local_70 == iVar1)) {
                if ((ulong)uVar12 < (ulong)(iVar5 * local_3d8) * 2 + 0x374) {
                  puVar6 = (undefined4 *)__errno();
                  uVar10 = 0;
                  *puVar6 = 0xe4ae0001;
                }
                else {
                  lVar3 = uVar8 * 0x498;
                  *(undefined4 *)(&DAT_005098f8 + lVar3) = local_368;
                  *(int *)(&DAT_005098fc + lVar3) = local_70;
                  memset(&DAT_00509900 + lVar3,0,0x50);
                  *(undefined4 *)(&DAT_00509900 + lVar3) = *(undefined4 *)param_2;
                  *(undefined4 *)(&DAT_00509904 + lVar3) = *(undefined4 *)(param_2 + 4);
                  uVar14 = *(undefined8 *)(param_2 + 0x10);
                  uVar13 = *(undefined8 *)(param_2 + 8);
                  *(undefined8 *)(&DAT_00509938 + lVar3) = 0x100000001;
                  *(undefined4 *)(&DAT_00509908 + lVar3) = local_3b8;
                  *(undefined4 *)(&DAT_0050990c + lVar3) = uStack_3b4;
                  *(undefined8 *)(&DAT_00509948 + lVar3) = uVar14;
                  *(undefined8 *)(&DAT_00509940 + lVar3) = uVar13;
                  strncpy(&DAT_00509910 + lVar3,acStack_390,0x20);
                  (&DAT_0050992f)[lVar3] = 0;
                  strncpy(&DAT_00509930 + lVar3,acStack_3b0,8);
                  *(uint *)(&DAT_00509950 + lVar3) = local_3c8;
                  *(int *)(&DAT_00509954 + lVar3) = iStack_3c4;
                  *(undefined4 *)(&DAT_00509958 + lVar3) = local_3c0;
                  *(undefined4 *)(&DAT_0050995c + lVar3) = uStack_3bc;
                  *(undefined8 *)(&DAT_00509960 + lVar3) = local_370;
                  (&DAT_00509937)[lVar3] = 0;
                  *(undefined8 *)(&DAT_00509970 + lVar3) = uStack_358;
                  *(undefined8 *)(&DAT_00509968 + lVar3) = local_360;
                  *(undefined4 *)(&DAT_00509978 + lVar3) = local_364;
                  memcpy((void *)(lVar3 + 0x50997c),local_3e0,0x374);
                  uStack_408 = *(undefined8 *)(param_2 + 8);
                  local_410 = *(undefined8 *)param_2;
                  local_400 = *(undefined4 *)(param_2 + 0x10);
                  lVar7 = *plVar11;
                  local_3fc = *(undefined4 *)(param_2 + 0x14);
                  uStack_3f0 = _UNK_00439d88;
                  local_3f8 = _DAT_00439d80;
                  *(undefined8 *)(lVar7 + 8) = 0;
                  *(undefined4 *)(lVar7 + 0x50) = 1;
                  *(undefined4 *)(lVar7 + 0x68) = 1;
                  *(undefined4 *)(lVar7 + 0xa8) = local_10c;
                  *(undefined4 *)(lVar7 + 0xac) = local_11c;
                  *(undefined8 *)(lVar7 + 0xc4) = 0;
                  *(undefined8 *)(lVar7 + 0xbc) = 0;
                  *(undefined8 *)(lVar7 + 0xb4) = 0;
                  *(undefined4 *)(lVar7 + 0xb0) = local_118;
                  *(undefined4 *)(lVar7 + 0xcc) = local_114;
                  *(undefined4 *)(lVar7 + 0xd0) = local_110;
                  *(undefined8 *)(lVar7 + 0x18) = uStack_100;
                  *(undefined8 *)(lVar7 + 0x10) = local_108;
                  *(undefined4 *)(lVar7 + 0x20) = local_f8;
                  *(undefined4 *)(lVar7 + 0x24) = local_f4;
                  *(undefined4 *)(lVar7 + 0x30) = local_f0;
                  *(undefined4 *)(lVar7 + 0x34) = local_ec;
                  *(undefined4 *)(&DAT_005098c8 + lVar3) = local_124;
                  CFunctions::SetColorPalette();
                  iVar5 = CFunctions::Reset((CFunctions *)*plVar11,
                                            (struct_IntrinsicPara *)&local_410);
                  if (iVar5 == 0) {
                    puVar6 = (undefined4 *)__errno();
                    uVar10 = 0;
                    *puVar6 = 0xe4ae0003;
                  }
                  else {
                    iVar5 = CFunctions::SetInnertempUnit
                                      ((CFunctions *)*plVar11,local_3d0,iStack_3cc);
                    this = (CFunctions *)*plVar11;
                    *(int *)(this + 0x44) = iStack_3c4;
                    *(uint *)(this + 0x48) = local_3c8;
                    if ((local_78 == 0) || (local_74 == 0)) {
                      puVar9 = &local_3c8;
                      local_78 = iStack_3c4;
                    }
                    else {
                      puVar9 = &local_74;
                    }
                    *(int *)(this + 0x3c) = local_78;
                    *(uint *)(this + 0x40) = *puVar9;
                    CFunctions::SetLensParameter(this,auStack_350,0x21c);
                    if (iVar5 == 0) {
                      uVar10 = 0;
                    }
                    else {
                      uVar10 = 1;
                      CFunctions::PushFrame((CFunctions *)*plVar11,(long)__src + 0x374,1,1,1,1);
                      if (param_5 != (_func_void_uint_uint_uint_void_ptr *)0x0) {
                        (*param_5)(param_1,local_3c8,2,*(void **)(&DAT_005098b0 + uVar8 * 0x498));
                        uVar10 = 1;
                      }
                    }
                  }
                }
              }
              else {
                puVar6 = (undefined4 *)__errno();
                uVar10 = 0;
                *puVar6 = 0xe4ae000c;
              }
              goto LAB_0017dfd0;
            }
          }
          puVar6 = (undefined4 *)__errno();
          uVar10 = 0;
          *puVar6 = 0xe4ae0003;
          goto LAB_0017dfd0;
        }
      }
      puVar6 = (undefined4 *)__errno();
      uVar10 = 0;
      *puVar6 = 0xe4ae0001;
      goto LAB_0017dfd0;
    }
  }
  uVar10 = 0;
LAB_0017dfd0:
  if (*(long *)(lVar4 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar10);
}


==================================================================

### FUNC 0017e3ec (216 bytes) name=MAG_LoadDDT

undefined4
MAG_LoadDDT(uint param_1,OutputPara *param_2,char *param_3,
           _func_void_uint_uint_uint_void_ptr *param_4,void *param_5)

{
  long lVar1;
  uint uVar2;
  undefined4 uVar3;
  void *pvVar4;
  IFStream aIStack_70 [24];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  pvVar4 = operator_new__(4000000);
  IFStream::IFStream(aIStack_70,param_3);
  uVar2 = FStream::Read((FStream *)aIStack_70,pvVar4,1,4000000);
  OFStream::~OFStream((OFStream *)aIStack_70);
  uVar3 = LoadDDT(param_1,param_2,pvVar4,uVar2,param_4,param_5);
  operator_delete__(pvVar4);
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017e4f4 (4 bytes) name=MAG_LoadBufferedDDT

void MAG_LoadBufferedDDT(uint param_1,OutputPara *param_2,void *param_3,uint param_4,
                        _func_void_uint_uint_uint_void_ptr *param_5,void *param_6)

{
  (*(code *)PTR_LoadDDT_004ffd40)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0017e4f8 (356 bytes) name=MAG_ProbeDDT

bool MAG_ProbeDDT(char *param_1,int *param_2)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  IFStream aIStack_150 [24];
  int local_138;
  int local_134;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  bVar2 = false;
  if (param_2 != (int *)0x0) {
    IFStream::IFStream(aIStack_150,param_1);
    iVar3 = FStream::Read((FStream *)aIStack_150,&local_138,0x88,1);
    if ((iVar3 == 0x88) && (local_138 == 0x5bb5b55b)) {
      lVar4 = FStream::Read((FStream *)aIStack_150,param_2,0x374,1);
    }
    else {
      lVar4 = IFStream::GetLength(aIStack_150);
      FStream::Seek((FStream *)aIStack_150,lVar4 + -0x98,0);
      iVar3 = FStream::Read((FStream *)aIStack_150,&local_138,0x98,1);
      if ((iVar3 == 0x98) && (local_138 == 0x5bb5b57b)) {
        FStream::Seek((FStream *)aIStack_150,(long)local_134 + 0x88,0);
        lVar4 = FStream::Read((FStream *)aIStack_150,param_2,0x374,1);
      }
      else {
        FStream::Seek((FStream *)aIStack_150,0,0);
        lVar4 = FStream::Read((FStream *)aIStack_150,param_2,0x374,1);
      }
    }
    if (lVar4 == 0x374) {
      bVar2 = *param_2 == 0x374;
    }
    else {
      bVar2 = false;
    }
    OFStream::~OFStream((OFStream *)aIStack_150);
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017e68c (208 bytes) name=MAG_ProbeBufferedDDT

undefined8 MAG_ProbeBufferedDDT(int *param_1,uint param_2,void *param_3)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  int *__src;
  uint uVar4;
  
  uVar2 = 0;
  if (((0x374 < param_2) && (param_1 != (int *)0x0)) && (param_3 != (void *)0x0)) {
    __src = param_1 + 0x22;
    uVar4 = param_2 - 0x88;
    if (*param_1 != 0x5bb5b55b) {
      __src = param_1;
      uVar4 = param_2;
    }
    if (((0x97 < uVar4) && (*param_1 != 0x5bb5b55b)) &&
       (*(int *)((long)__src + (long)(int)uVar4 + -0x98) == 0x5bb5b57b)) {
      iVar1 = *(int *)((long)__src + (long)(int)uVar4 + -0x94) + 0x88;
      __src = (int *)((long)__src + (long)iVar1);
      uVar4 = uVar4 - iVar1;
    }
    if (uVar4 < 0x375) {
      puVar3 = (undefined4 *)__errno(0);
      *puVar3 = 0xe4ae0001;
      return 0;
    }
    if (*__src != 0x374) {
      return 0;
    }
    memcpy(param_3,__src,0x374);
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### FUNC 0017e75c (8 bytes) name=MAG_SDStorageMGT

undefined8 MAG_SDStorageMGT(void)

{
  return 0;
}


==================================================================

### FUNC 0017e764 (8 bytes) name=MAG_SDStorageBMP

undefined8 MAG_SDStorageBMP(void)

{
  return 0;
}


==================================================================

### FUNC 0017e76c (8 bytes) name=MAG_SDStorageMGSStart

undefined8 MAG_SDStorageMGSStart(void)

{
  return 0;
}


==================================================================

### FUNC 0017e774 (8 bytes) name=MAG_SDStorageMGSStop

undefined8 MAG_SDStorageMGSStop(void)

{
  return 0;
}


==================================================================

### FUNC 0017e77c (8 bytes) name=MAG_SDStorageAviStart

undefined8 MAG_SDStorageAviStart(void)

{
  return 0;
}


==================================================================

### FUNC 0017e784 (8 bytes) name=MAG_SDStorageAviStop

undefined8 MAG_SDStorageAviStop(void)

{
  return 0;
}


==================================================================

### FUNC 0017e78c (112 bytes) name=MAG_SDCardStorage

undefined8 MAG_SDCardStorage(uint param_1,uint param_2)

{
  undefined4 *puVar1;
  
  if ((((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) &&
      ((&DAT_005098a0)[(ulong)param_1 * 0x93] != 0)) &&
     ((4 < param_2 && ((&DAT_00509898)[(ulong)param_1 * 0x93] != 0)))) {
    puVar1 = (undefined4 *)__errno();
    *puVar1 = 0xe4ae0001;
  }
  return 0;
}


==================================================================

### FUNC 0017e7fc (788 bytes) name=FUN_0017e7fc

void FUN_0017e7fc(uint param_1,long param_2)

{
  uint *puVar1;
  short sVar2;
  uint uVar3;
  long lVar4;
  int iVar5;
  int iVar6;
  CFunctions *this;
  time_t tVar7;
  ulong uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  long lVar12;
  long *plVar13;
  ulong uVar14;
  
  if (*(int *)(&DAT_005098c0 + (ulong)param_1 * 0x498) == 0) {
    return;
  }
  uVar14 = (ulong)param_1;
  lVar12 = (&DAT_005098a8)[uVar14 * 0x93];
  uVar10 = *(int *)(&DAT_00509d14 + uVar14 * 0x498) + 1;
  *(uint *)(&DAT_00509d14 + uVar14 * 0x498) = uVar10;
  uVar3 = *(uint *)(lVar12 + 0xaf4) >> 0x18;
  if (uVar3 - 1 < 2) {
    if (uVar10 < 0x14) {
      return;
    }
  }
  else if ((uVar10 < 8) && (uVar3 == 4)) {
    return;
  }
  sVar2 = *(short *)(lVar12 + 0xb36);
  lVar4 = uVar14 * 0x498;
  iVar6 = *(int *)(param_2 + 0x28) + (int)sVar2;
  *(int *)(param_2 + 0x28) = iVar6;
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)sVar2;
  plVar13 = &DAT_005098a0 + uVar14 * 0x93;
  this = (CFunctions *)*plVar13;
  *(int *)(this + 0x48) = iVar6;
  puVar1 = (uint *)(&DAT_00509d10 + lVar4);
  *(undefined4 *)(this + 0x44) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_00509d10 + lVar4);
  *(undefined4 *)(&DAT_00509950 + lVar4) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_00509954 + lVar4) = *(undefined4 *)(param_2 + 0x2c);
  iVar5 = (int)lVar12;
  if (iVar6 < 0) {
    iVar6 = CNetComm::SetShutterState(iVar5,(uint *)0x0);
    if (iVar6 == 0) {
      return;
    }
    lVar12 = *plVar13;
    *(undefined4 *)(lVar12 + 0x3c) = *(undefined4 *)(lVar12 + 0x44);
    *(undefined4 *)(lVar12 + 0x40) = *(undefined4 *)(lVar12 + 0x48);
    *puVar1 = 0;
    return;
  }
  uVar10 = iVar6 + 1;
  *puVar1 = uVar10;
  uVar11 = *(uint *)(lVar12 + 0xb38);
  uVar9 = *(int *)(lVar12 + 0xb28) + uVar11;
  if (uVar10 <= uVar11) {
    uVar9 = uVar9 + *(int *)(lVar12 + 0xb3c);
LAB_0017e9e0:
    CFunctions::DoSomething(this,iVar6,uVar9);
    return;
  }
  if (uVar10 <= uVar9) {
    if (uVar10 == uVar9) {
      CNetComm::SetShutterState(iVar5,(uint *)0x1);
      this = (CFunctions *)*plVar13;
      uVar10 = *puVar1;
      uVar11 = *(uint *)(lVar12 + 0xb38);
    }
    CFunctions::PushBaselineRaw(this,(ushort *)(param_2 + 0x4c),(uint)(uVar10 == uVar11 + 1));
    this = (CFunctions *)*plVar13;
    iVar6 = *puVar1 - 1;
    uVar9 = *(int *)(lVar12 + 0xb28) + *(int *)(lVar12 + 0xb38) + *(int *)(lVar12 + 0xb3c);
    goto LAB_0017e9e0;
  }
  uVar9 = *(int *)(lVar12 + 0xb3c) + uVar9;
  if (uVar10 <= uVar9) goto LAB_0017e9e0;
  if (uVar3 < 7) {
    if ((1 << (ulong)(uVar3 & 0x1f) & 0x69U) == 0) {
      iVar6 = 100;
      if ((4 < *(uint *)(&DAT_00509d18 + uVar14 * 0x498)) || (uVar10 != 0x82 - uVar9))
      goto LAB_0017ea34;
      iVar6 = *(uint *)(&DAT_00509d18 + uVar14 * 0x498) + 1;
    }
    else {
      iVar6 = 0x1e;
      if ((*(int *)(&DAT_00509d18 + uVar14 * 0x498) != 0) || (uVar10 != 0x4b)) goto LAB_0017ea34;
      iVar6 = 1;
    }
    *(int *)(&DAT_00509d18 + uVar14 * 0x498) = iVar6;
  }
  else {
    iVar6 = 100;
LAB_0017ea34:
    if (uVar10 < *(int *)(lVar12 + 0xb40) + uVar9) {
      if (uVar10 < iVar6 + uVar9) goto LAB_0017ea90;
      uVar3 = *(int *)(this + 0x3c) - *(int *)(param_2 + 0x2c);
      uVar10 = -uVar3;
      if (-1 < (int)uVar3) {
        uVar10 = uVar3;
      }
      if (uVar10 <= *(uint *)(lVar12 + 0xb44)) goto LAB_0017ea90;
    }
  }
  iVar6 = CNetComm::SetShutterState(iVar5,(uint *)0x0);
  if (iVar6 != 0) {
    lVar12 = *plVar13;
    *(undefined4 *)(lVar12 + 0x3c) = *(undefined4 *)(lVar12 + 0x44);
    *(undefined4 *)(lVar12 + 0x40) = *(undefined4 *)(lVar12 + 0x48);
    *puVar1 = 0;
  }
LAB_0017ea90:
  if (*(int *)(&DAT_00509d0c + uVar14 * 0x498) == 0) {
    tVar7 = time((time_t *)0x0);
    lVar12 = uVar14 * 0x498;
    *(undefined4 *)(&DAT_00509978 + lVar12) = 0;
    *(undefined8 *)(&DAT_00509968 + lVar12) = 0;
    *(undefined8 *)(&DAT_00509970 + lVar12) = 0;
    *(time_t *)(&DAT_00509960 + lVar12) = tVar7;
    uVar8 = CFunctions::PushFrame((CFunctions *)*plVar13,(ushort *)(param_2 + 0x4c),0,1,0,1);
    if ((uVar8 & 1) != 0) {
                    /* WARNING: Could not recover jumptable at 0x0017eb0c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (**(code **)(&DAT_005098d8 + uVar14 * 0x498))
                (param_1,*(undefined4 *)(param_2 + 0x44),2,
                 *(undefined8 *)(&DAT_005098b0 + uVar14 * 0x498));
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0017eb10 (4 bytes) name=ShiftNotify

/* ShiftNotify(unsigned int, unsigned int) */

uint ShiftNotify(uint param_1,uint param_2)

{
  return param_1;
}


==================================================================

### FUNC 0017eb14 (1420 bytes) name=MAG_EstimateUnderArmTempFromForeheadRect

void MAG_EstimateUnderArmTempFromForeheadRect
               (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5)

{
  int iVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  CFunctions *this;
  long lVar9;
  undefined4 *puVar10;
  long *plVar11;
  ulong uVar12;
  float fVar13;
  float fVar14;
  int local_80 [6];
  char acStack_68 [3];
  undefined1 local_65;
  long local_48;
  
  lVar3 = tpidr_el0;
  local_48 = *(long *)(lVar3 + 0x28);
  if ((param_1 < 0x81) && ((&DAT_005098a8)[(ulong)param_1 * 0x93] != 0)) {
    uVar12 = (ulong)param_1;
    plVar11 = &DAT_005098a0 + uVar12 * 0x93;
    this = (CFunctions *)*plVar11;
    iVar4 = 0;
    if (this == (CFunctions *)0x0) goto LAB_0017ed90;
    if ((&DAT_00509898)[uVar12 * 0x93] != 0) {
      local_80[4] = 0;
      local_80[0] = 0;
      local_80[1] = 0;
      local_80[2] = 0;
      local_80[3] = 0;
      if (*(int *)(this + 0xec) == 0) {
        if (*(int *)((&DAT_005098a8)[(ulong)param_1 * 0x93] + 0x80) == 0) {
          puVar10 = (undefined4 *)__errno();
          *puVar10 = 0xe4ae0006;
          iVar4 = -5;
        }
        else {
          puVar10 = (undefined4 *)__errno();
          *puVar10 = 0xe4ae0008;
          iVar4 = -2;
        }
      }
      else {
        iVar4 = CFunctions::GetRectTemperatureInfo(this,param_2,param_3,param_4,param_5,local_80,0);
        if (iVar4 == 0) {
          puVar10 = (undefined4 *)__errno();
          *puVar10 = 0xe4ae0001;
          iVar4 = -1;
        }
        else {
          uVar5 = CFunctions::GetTemperature((CFunctions *)*plVar11,local_80[4],3,0);
          iVar6 = CFunctions::CorrectTemperature((int)*plVar11,*(float *)(*plVar11 + 0xac),uVar5);
          lVar9 = *plVar11;
          lVar2 = uVar12 * 0x498;
          iVar4 = CFunctions::CorrectTemperature
                            ((int)lVar9,*(float *)(lVar9 + 0xac),*(uint *)(lVar9 + 0x4a78));
          uVar5 = CFunctions::GetTemperature
                            ((CFunctions *)*plVar11,*(uint *)((CFunctions *)*plVar11 + 0x4a84),7,0);
          iVar7 = CFunctions::CorrectTemperature((int)*plVar11,*(float *)(*plVar11 + 0xac),uVar5);
          iVar1 = *(int *)(&DAT_00509950 + lVar2);
          sprintf(acStack_68,"%u",(ulong)*(uint *)(&DAT_005098f8 + lVar2));
          local_65 = 0;
          iVar8 = strcmp(acStack_68,"621");
          if (iVar8 == 0) {
            iVar8 = -12000;
          }
          else {
            iVar8 = strcmp(acStack_68,"620");
            if ((((iVar8 == 0) || (iVar8 = strcmp(acStack_68,"321"), iVar8 == 0)) ||
                (iVar8 = strcmp(acStack_68,"210"), iVar8 == 0)) ||
               ((iVar8 = strcmp(acStack_68,"150"), iVar8 == 0 ||
                (iVar8 = strcmp(acStack_68,"120"), iVar8 == 0)))) {
              iVar8 = -10000;
            }
            else {
              iVar8 = strcmp(acStack_68,"340");
              if ((((iVar8 == 0) || (iVar8 = strcmp(acStack_68,"320"), iVar8 == 0)) ||
                  ((iVar8 = strcmp(acStack_68,"211"), iVar8 == 0 ||
                   (((iVar8 = strcmp(acStack_68,"140"), iVar8 == 0 ||
                     (iVar8 = strcmp(acStack_68,"130"), iVar8 == 0)) ||
                    (iVar8 = strcmp(acStack_68,"160"), iVar8 == 0)))))) ||
                 (iVar8 = strcmp(acStack_68,"100"), iVar8 == 0)) {
                iVar8 = -8000;
              }
              else {
                iVar8 = strcmp(acStack_68,"330");
                if (iVar8 == 0) {
                  iVar8 = -6000;
                }
                else {
                  iVar8 = -10000;
                  if (*(uint *)(&DAT_00509900 + lVar2) < 0x280) {
                    iVar8 = -8000;
                  }
                }
              }
            }
          }
          iVar8 = iVar8 + iVar1;
          if (iVar8 <= iVar4) {
            iVar4 = iVar8;
          }
          if (iVar7 <= iVar8) {
            iVar7 = iVar4;
          }
          if (39999 < iVar7) {
            iVar7 = 40000;
          }
          if (iVar7 < 0x3a99) {
            iVar7 = 15000;
          }
          iVar4 = iVar6 + -500;
          if (iVar6 - 0x5014U < 0x55f1) {
            if (iVar6 < 0x7724) {
              fVar13 = (float)((iVar6 * 0x7c + -0x26c9b0) / 1000 + 34000);
            }
            else if (iVar6 < 0x8bd8) {
              fVar13 = (float)iVar4;
              fVar13 = fVar13 * DAT_00439dbc +
                       fVar13 * DAT_00439db4 * fVar13 * fVar13 + fVar13 * DAT_00439db8 * fVar13 +
                       DAT_00439dc0;
            }
            else {
              fVar13 = (float)(iVar6 + -0x8bd8) * DAT_00439dac + DAT_00439db0;
            }
            fVar13 = *(float *)(&UNK_00439e18 + (ulong)(24999 < iVar7) * 4) * (float)(25000 - iVar7)
                     + fVar13;
            fVar14 = DAT_00439e10;
            if ((((DAT_00439dc4 < fVar13) || (fVar14 = DAT_00439e0c, DAT_00439dc8 < fVar13)) ||
                ((fVar14 = DAT_00439e08, DAT_00439dcc < fVar13 ||
                 ((fVar14 = DAT_00439e04, DAT_00439dd0 < fVar13 ||
                  (fVar14 = DAT_00439e00, DAT_00439dd4 < fVar13)))))) ||
               ((fVar14 = DAT_00439dfc, DAT_00439dd8 < fVar13 ||
                ((((fVar14 = DAT_00439df8, DAT_00439ddc < fVar13 ||
                   (fVar14 = DAT_00439df4, DAT_00439de0 < fVar13)) ||
                  (fVar14 = DAT_00439df0, DAT_00439de4 < fVar13)) ||
                 (fVar14 = DAT_00439dec, DAT_00439de8 < fVar13)))))) {
              fVar13 = fVar13 + fVar14;
            }
            fVar13 = fVar13 + DAT_00439df0;
            if (fVar13 <= DAT_00439de8) {
              fVar13 = (fVar13 + DAT_00439e14) * 0.5 + DAT_00439de8;
            }
            iVar4 = (int)fVar13;
          }
        }
      }
      goto LAB_0017ed90;
    }
  }
  iVar4 = 0;
LAB_0017ed90:
  if (*(long *)(lVar3 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar4);
}


==================================================================

### FUNC 0017f0a0 (88 bytes) name=CVideoFunctions

/* CVideoFunctions::CVideoFunctions() */

void __thiscall CVideoFunctions::CVideoFunctions(CVideoFunctions *this)

{
  MutexLock::MutexLock((MutexLock *)(this + 0xa0));
  memset(this,0,0xa0);
  *(undefined4 *)(this + 0x154) = 0;
  *(undefined4 *)(this + 0x158) = 0;
  *(undefined4 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0x168) = 0;
  *(undefined8 *)(this + 0x170) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 200) = 0;
  *(undefined8 *)(this + 0x160) = 0;
  return;
}


==================================================================

### FUNC 0017f0f8 (112 bytes) name=~CVideoFunctions

/* CVideoFunctions::~CVideoFunctions() */

int __thiscall CVideoFunctions::~CVideoFunctions(CVideoFunctions *this)

{
  pthread_mutex_t *__mutex;
  int iVar1;
  
  __mutex = (pthread_mutex_t *)(this + 0xa0);
  pthread_mutex_lock(__mutex);
  if (*(void **)(this + 0x160) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x160));
    *(undefined8 *)(this + 0x160) = 0;
  }
  if (*(void **)(this + 0x168) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x168));
    *(undefined8 *)(this + 0x168) = 0;
  }
  if (*(void **)(this + 0x170) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x170));
    *(undefined8 *)(this + 0x170) = 0;
  }
  *(undefined8 *)(this + 0x154) = 0;
  pthread_mutex_unlock(__mutex);
  iVar1 = pthread_mutex_destroy(__mutex);
  return iVar1;
}


==================================================================

### FUNC 0017f180 (100 bytes) name=ReleaseMemory

/* CVideoFunctions::ReleaseMemory() */

int __thiscall CVideoFunctions::ReleaseMemory(CVideoFunctions *this)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)(this + 0xa0));
  if (*(void **)(this + 0x160) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x160));
    *(undefined8 *)(this + 0x160) = 0;
  }
  if (*(void **)(this + 0x168) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x168));
    *(undefined8 *)(this + 0x168) = 0;
  }
  if (*(void **)(this + 0x170) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x170));
    *(undefined8 *)(this + 0x170) = 0;
  }
  *(undefined8 *)(this + 0x154) = 0;
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(this + 0xa0));
  return iVar1;
}


==================================================================

### FUNC 0017f1e4 (480 bytes) name=Reset

/* CVideoFunctions::Reset(struct_IntrinsicPara const*) */

void __thiscall CVideoFunctions::Reset(CVideoFunctions *this,struct_IntrinsicPara *param_1)

{
  pthread_mutex_t *__mutex;
  uint uVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  undefined4 uVar5;
  void *pvVar6;
  undefined4 *puVar7;
  undefined8 uVar8;
  Logging aLStack_70 [24];
  long local_58;
  
  lVar3 = tpidr_el0;
  local_58 = *(long *)(lVar3 + 0x28);
  __mutex = (pthread_mutex_t *)(this + 0xa0);
  pthread_mutex_lock(__mutex);
  if (*(void **)(this + 0x160) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x160));
    *(undefined8 *)(this + 0x160) = 0;
  }
  if (*(void **)(this + 0x168) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x168));
    *(undefined8 *)(this + 0x168) = 0;
  }
  if (*(void **)(this + 0x170) != (void *)0x0) {
    operator_delete__(*(void **)(this + 0x170));
    *(undefined8 *)(this + 0x170) = 0;
  }
  *(undefined8 *)(this + 0x154) = 0;
  pthread_mutex_unlock(__mutex);
  pthread_mutex_lock(__mutex);
  uVar8 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 0xd0) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)(this + 200) = uVar8;
  uVar1 = *(uint *)(this + 200);
  *(undefined8 *)(this + 0xe8) = *(undefined8 *)(param_1 + 0x20);
  uVar8 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0xe0) = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0xd8) = uVar8;
  if ((((uVar1 < 4) || ((uVar1 & 3) != 0)) || (iVar4 = *(int *)(this + 0xcc), iVar4 == 0)) ||
     ((uVar1 != *(uint *)(this + 0xd0) || (iVar4 != *(int *)(this + 0xd4))))) {
    mag::Logging::Logging(aLStack_70,4);
    MStream::operator<<((MStream *)aLStack_70,
                        "Failed to configurate CFuncitons due to parameter error");
    mag::Logging::~Logging(aLStack_70);
    iVar4 = pthread_mutex_unlock(__mutex);
    puVar7 = (undefined4 *)__errno(iVar4);
    uVar5 = 0;
    *puVar7 = 0xe4ae0001;
  }
  else {
    iVar2 = iVar4 * uVar1;
    *(int *)(this + 0xf0) = iVar2;
    *(int *)(this + 0xf4) = iVar2;
    pvVar6 = operator_new__((ulong)(uint)(iVar2 * 4));
    *(void **)(this + 0x160) = pvVar6;
    pvVar6 = operator_new__((ulong)(uint)(iVar2 * 4));
    *(void **)(this + 0x168) = pvVar6;
    pvVar6 = operator_new__((ulong)((uint)(iVar2 * 3) >> 1));
    *(void **)(this + 0x170) = pvVar6;
    *(undefined8 *)(this + 0x120) = 0;
    *(int *)(this + 0x104) = iVar4;
    *(undefined4 *)(this + 0x10c) = 0;
    *(undefined8 *)(this + 0x118) = 0;
    *(undefined8 *)(this + 0x110) = 0;
    *(undefined4 *)(this + 0xfc) = 0x28;
    *(uint *)(this + 0x100) = uVar1;
    *(undefined4 *)(this + 0x108) = 0x200001;
    *(undefined8 *)(this + 0x130) = 0;
    *(undefined8 *)(this + 0x128) = 0;
    *(undefined8 *)(this + 0x148) = 0;
    *(undefined8 *)(this + 0x140) = 0;
    *(undefined8 *)(this + 0x138) = 0;
    *(undefined8 *)(this + 0x150) = 0x100000000;
    *(undefined4 *)(this + 0x128) = 0x28;
    *(uint *)(this + 300) = uVar1;
    *(int *)(this + 0x130) = iVar4;
    *(undefined8 *)(this + 0x134) = 0x200001;
    pthread_mutex_unlock(__mutex);
    uVar5 = *(undefined4 *)(this + 0x154);
  }
  if (*(long *)(lVar3 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 0017f3d8 (944 bytes) name=PushYUV

/* CVideoFunctions::PushYUV(unsigned char const*) */

undefined4 __thiscall CVideoFunctions::PushYUV(CVideoFunctions *this,uchar *param_1)

{
  bool bVar1;
  undefined4 *puVar2;
  void *__src;
  pthread_mutex_t *__mutex;
  CVideoFunctions *pCVar3;
  CVideoFunctions *pCVar4;
  uint uVar5;
  uint uVar6;
  void *__src_00;
  CVideoFunctions *pCVar7;
  uint uVar8;
  uint uVar9;
  byte bVar10;
  uint uVar11;
  int iVar12;
  long lVar13;
  CVideoFunctions *pCVar14;
  int iVar15;
  ulong uVar16;
  undefined4 *puVar17;
  undefined1 *puVar18;
  ulong uVar19;
  ulong uVar20;
  uchar *puVar21;
  undefined4 *puVar22;
  undefined4 *puVar23;
  uchar *puVar24;
  long lVar25;
  int iVar26;
  undefined4 *puVar27;
  undefined4 uVar28;
  size_t __n;
  long lVar29;
  undefined1 auStack_1068 [4096];
  long local_68;
  
  lVar13 = tpidr_el0;
  local_68 = *(long *)(lVar13 + 0x28);
  __mutex = (pthread_mutex_t *)(this + 0xa0);
  pthread_mutex_lock(__mutex);
  if ((param_1 == (uchar *)0x0) || (*(int *)(this + 0x154) == 0)) {
    iVar15 = pthread_mutex_unlock(__mutex);
    uVar28 = 0;
  }
  else {
    pCVar3 = this + 0xd0;
    pCVar4 = this + 0xd4;
    pCVar7 = pCVar3;
    pCVar14 = pCVar4;
    if (*(int *)(this + 0x74) != 0) {
      pCVar7 = pCVar4;
      pCVar14 = pCVar3;
    }
    uVar8 = *(uint *)pCVar7;
    uVar9 = *(uint *)pCVar14;
    uVar11 = uVar9 * uVar8;
    memcpy(*(void **)(this + 0x170),param_1,(ulong)(uVar11 * 3 >> 1));
    if (uVar9 != 0) {
      puVar21 = param_1 + uVar11;
      uVar20 = 0;
      puVar24 = puVar21 + (uVar11 >> 2);
      do {
        if (uVar8 != 0) {
          uVar16 = 0;
          puVar18 = (undefined1 *)(*(long *)(this + 0x160) + (ulong)(uVar8 * 4 * (int)uVar20));
          do {
            uVar19 = uVar16 >> 1 & 0x7fffffff;
            bVar10 = param_1[uVar16];
            uVar16 = uVar16 + 1;
            uVar11 = (uint)bVar10 + ((int)((puVar24[uVar19] - 0x80) * 0x15e) >> 8);
            uVar5 = (uint)bVar10 + ((int)((puVar21[uVar19] - 0x80) * 0x1bb) >> 8);
            uVar11 = uVar11 & ((int)uVar11 >> 0x1f ^ 0xffffffffU);
            uVar6 = (uint)bVar10 +
                    ((int)((puVar21[uVar19] - 0x80) * -0x55 + (puVar24[uVar19] - 0x80) * -0xb3) >> 8
                    );
            uVar6 = uVar6 & ((int)uVar6 >> 0x1f ^ 0xffffffffU);
            uVar5 = uVar5 & ((int)uVar5 >> 0x1f ^ 0xffffffffU);
            if (0xfe < (int)uVar11) {
              uVar11 = 0xff;
            }
            if (0xfe < (int)uVar6) {
              uVar6 = 0xff;
            }
            if (0xfe < (int)uVar5) {
              uVar5 = 0xff;
            }
            puVar18[3] = 0xff;
            *puVar18 = (char)uVar11;
            puVar18[1] = (char)uVar6;
            puVar18[2] = (char)uVar5;
            puVar18 = puVar18 + 4;
          } while (uVar8 != (uint)uVar16);
          param_1 = param_1 + (ulong)(uVar8 - 1) + 1;
        }
        uVar16 = uVar20 & 1;
        uVar20 = uVar20 + 1;
        if (uVar16 != 0) {
          puVar24 = puVar24 + (uVar8 >> 1);
          puVar21 = puVar21 + (uVar8 >> 1);
        }
      } while (uVar20 != uVar9);
    }
    if (*(int *)(this + 0x74) == 1) {
      memcpy(*(void **)(this + 0x168),*(void **)(this + 0x160),(ulong)*(uint *)(this + 0xf4) << 2);
      iVar15 = *(int *)(this + 0xd0);
      if (iVar15 != 0) {
        uVar9 = *(uint *)(this + 0xd4);
        lVar25 = (long)iVar15;
        iVar12 = uVar9 * iVar15;
        uVar8 = uVar9 + 3;
        if (-1 < (int)uVar9) {
          uVar8 = uVar9;
        }
        puVar23 = (undefined4 *)(*(long *)(this + 0x160) + (long)(int)((uVar9 - 1) * iVar15) * 4);
        puVar22 = (undefined4 *)(*(long *)(this + 0x168) + (long)iVar12 * 4 + -4);
        uVar11 = ((int)uVar8 >> 2) - 1;
        do {
          puVar17 = puVar23;
          puVar27 = puVar22;
          iVar26 = (int)uVar8 >> 2;
          if (6 < uVar9 + 3) {
            do {
              iVar26 = iVar26 + -1;
              *puVar17 = *puVar27;
              puVar17 = puVar17 + -lVar25;
              *puVar17 = puVar27[-1];
              puVar17 = puVar17 + -lVar25;
              *puVar17 = puVar27[-2];
              puVar2 = puVar27 + -3;
              puVar27 = puVar27 + -4;
              puVar17[-lVar25] = *puVar2;
              puVar17 = puVar17 + -lVar25 + -lVar25;
            } while (iVar26 != 0);
            puVar23 = (undefined4 *)((long)puVar23 + ((ulong)uVar11 * -0x10 + -0x10) * lVar25);
            puVar22 = puVar22 + (ulong)uVar11 * -4 + -4;
          }
          iVar15 = iVar15 + -1;
          puVar23 = puVar23 + (long)iVar12 + 1;
        } while (iVar15 != 0);
      }
    }
    uVar8 = *(uint *)(this + 0x70);
    if (uVar8 != 0) {
      uVar9 = *(uint *)pCVar3;
      lVar25 = (long)(int)uVar9;
      uVar11 = *(uint *)pCVar4;
      uVar20 = (ulong)(int)uVar11;
      if (((uVar8 >> 1 & 1) != 0) && (1 < (int)uVar11)) {
        lVar29 = 0;
        uVar16 = uVar20 >> 1 & 0x7fffffff;
        __n = lVar25 * 4;
        iVar15 = uVar9 * (uVar11 - 1);
        do {
          __src_00 = (void *)(*(long *)(this + 0x160) + lVar29);
          __src = (void *)(*(long *)(this + 0x160) + (long)iVar15 * 4);
          memcpy(auStack_1068,__src_00,__n);
          memcpy(__src_00,__src,__n);
          memcpy(__src,auStack_1068,__n);
          lVar29 = lVar29 + __n;
          uVar16 = uVar16 - 1;
          iVar15 = iVar15 - uVar9;
        } while (uVar16 != 0);
      }
      if (((uVar8 & 1) != 0) && (0 < (int)uVar11)) {
        lVar29 = *(long *)(this + 0x160);
        uVar8 = uVar9;
        if ((int)uVar9 < 0) {
          uVar8 = uVar9 + 1;
        }
        puVar23 = (undefined4 *)
                  (lVar29 + ((uVar20 - 1) * lVar25 + (long)(int)(uVar8 & 0xfffffffe)) * 4 + -4);
        do {
          if (2 < uVar9 + 1) {
            puVar22 = (undefined4 *)(lVar29 + (uVar20 - 1) * lVar25 * 4);
            puVar17 = puVar23;
            iVar15 = (int)uVar8 >> 1;
            do {
              uVar28 = *puVar22;
              iVar15 = iVar15 + -1;
              *puVar22 = *puVar17;
              *puVar17 = uVar28;
              puVar22 = puVar22 + 1;
              puVar17 = puVar17 + -1;
            } while (iVar15 != 0);
          }
          puVar23 = puVar23 + -lVar25;
          bVar1 = 1 < (long)uVar20;
          uVar20 = uVar20 - 1;
        } while (bVar1);
      }
    }
    uVar28 = 1;
    *(undefined4 *)(this + 0x158) = 1;
    iVar15 = pthread_mutex_unlock(__mutex);
  }
  if (*(long *)(lVar13 + 0x28) == local_68) {
    return uVar28;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar15);
}


==================================================================

### FUNC 0017f788 (248 bytes) name=Rotate

/* CVideoFunctions::Rotate(unsigned int) */

void __thiscall CVideoFunctions::Rotate(CVideoFunctions *this,uint param_1)

{
  undefined4 *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 *puVar8;
  long lVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  int iVar12;
  
  if (param_1 == 1) {
    memcpy(*(void **)(this + 0x168),*(void **)(this + 0x160),(ulong)*(uint *)(this + 0xf4) << 2);
    iVar7 = *(int *)(this + 0xd0);
    if (iVar7 != 0) {
      uVar3 = *(uint *)(this + 0xd4);
      lVar9 = (long)iVar7;
      iVar4 = uVar3 * iVar7;
      uVar2 = uVar3 + 3;
      if (-1 < (int)uVar3) {
        uVar2 = uVar3;
      }
      puVar10 = (undefined4 *)(*(long *)(this + 0x160) + (long)(int)((uVar3 - 1) * iVar7) * 4);
      uVar5 = ((int)uVar2 >> 2) - 1;
      puVar8 = (undefined4 *)(*(long *)(this + 0x168) + (long)iVar4 * 4 + -4);
      do {
        puVar11 = puVar10;
        if (6 < uVar3 + 3) {
          puVar11 = (undefined4 *)((long)puVar10 + ((ulong)uVar5 * -0x10 + -0x10) * lVar9);
          puVar6 = puVar8;
          iVar12 = (int)uVar2 >> 2;
          do {
            iVar12 = iVar12 + -1;
            *puVar10 = *puVar6;
            puVar10 = puVar10 + -lVar9;
            *puVar10 = puVar6[-1];
            puVar10 = puVar10 + -lVar9;
            *puVar10 = puVar6[-2];
            puVar1 = puVar6 + -3;
            puVar6 = puVar6 + -4;
            puVar10[-lVar9] = *puVar1;
            puVar10 = puVar10 + -lVar9 + -lVar9;
          } while (iVar12 != 0);
          puVar8 = puVar8 + (ulong)uVar5 * -4 + -4;
        }
        iVar7 = iVar7 + -1;
        puVar10 = puVar11 + (long)iVar4 + 1;
      } while (iVar7 != 0);
    }
  }
  return;
}


==================================================================

### FUNC 0017f880 (368 bytes) name=Mirror

/* CVideoFunctions::Mirror(unsigned int) */

void __thiscall CVideoFunctions::Mirror(CVideoFunctions *this,uint param_1)

{
  bool bVar1;
  void *__src;
  void *__src_00;
  uint uVar2;
  uint uVar3;
  long lVar4;
  undefined4 uVar5;
  long lVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  int iVar10;
  size_t __n;
  int iVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  undefined1 auStack_1068 [4096];
  long local_68;
  
  lVar6 = tpidr_el0;
  local_68 = *(long *)(lVar6 + 0x28);
  uVar3 = *(uint *)(this + 0xd0);
  lVar4 = (long)(int)uVar3;
  iVar10 = *(int *)(this + 0xd4);
  if (((param_1 >> 1 & 1) != 0) && (1 < iVar10)) {
    iVar11 = iVar10;
    if (iVar10 < 0) {
      iVar11 = iVar10 + 1;
    }
    lVar13 = 0;
    __n = lVar4 * 4;
    uVar14 = (ulong)(uint)(iVar11 >> 1);
    iVar11 = uVar3 * (iVar10 + -1);
    do {
      __src_00 = (void *)(*(long *)(this + 0x160) + lVar13);
      __src = (void *)(*(long *)(this + 0x160) + (long)iVar11 * 4);
      memcpy(auStack_1068,__src_00,__n);
      memcpy(__src_00,__src,__n);
      memcpy(__src,auStack_1068,__n);
      iVar11 = iVar11 - uVar3;
      uVar14 = uVar14 - 1;
      lVar13 = lVar13 + __n;
    } while (uVar14 != 0);
  }
  if (((param_1 & 1) != 0) && (0 < iVar10)) {
    lVar13 = *(long *)(this + 0x160);
    uVar2 = uVar3;
    if ((int)uVar3 < 0) {
      uVar2 = uVar3 + 1;
    }
    puVar7 = (undefined4 *)
             (lVar13 + (((long)iVar10 + -1) * lVar4 + (long)(int)(uVar2 & 0xfffffffe)) * 4 + -4);
    lVar12 = (long)iVar10;
    do {
      if (2 < uVar3 + 1) {
        puVar8 = (undefined4 *)(lVar13 + (lVar12 + -1) * lVar4 * 4);
        puVar9 = puVar7;
        iVar10 = (int)uVar2 >> 1;
        do {
          uVar5 = *puVar8;
          iVar10 = iVar10 + -1;
          *puVar8 = *puVar9;
          *puVar9 = uVar5;
          puVar8 = puVar8 + 1;
          puVar9 = puVar9 + -1;
        } while (iVar10 != 0);
      }
      puVar7 = puVar7 + -lVar4;
      bVar1 = 1 < lVar12;
      lVar12 = lVar12 + -1;
    } while (bVar1);
  }
  if (*(long *)(lVar6 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0017f9f0 (428 bytes) name=SaveRGB24

/* CVideoFunctions::SaveRGB24(char const*) */

undefined4 __thiscall CVideoFunctions::SaveRGB24(CVideoFunctions *this,char *param_1)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  int iVar2;
  void *__dest;
  undefined4 *puVar3;
  char *pcVar4;
  undefined4 uVar5;
  ulong __n;
  void *__src;
  undefined2 local_90;
  int local_8e;
  undefined2 local_8a;
  undefined2 local_88;
  undefined4 local_86;
  ushort local_80;
  ushort local_7e;
  ushort local_7a;
  ushort local_78;
  ushort local_76;
  ushort local_74;
  MStream aMStack_70 [24];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  __mutex = (pthread_mutex_t *)(this + 0xa0);
  pthread_mutex_lock(__mutex);
  if ((*(int *)(this + 0x154) == 0) || (*(int *)(this + 0x158) == 0)) {
    iVar2 = pthread_mutex_unlock(__mutex);
    puVar3 = (undefined4 *)__errno(iVar2);
    uVar5 = 0;
    *puVar3 = 0xe4ae0006;
  }
  else {
    iVar2 = *(int *)(this + 0xf0);
    __src = *(void **)(this + 0x160);
    __n = (ulong)(uint)(iVar2 * 4);
    __dest = operator_new__(__n);
    memcpy(__dest,__src,__n);
    pthread_mutex_unlock(__mutex);
    MStream::MStream(aMStack_70,0x100);
    if (param_1 == (char *)0x0) {
      GetLocalTime((_SYSTEMTIME *)&local_80);
      MStream::Fmt((char *)aMStack_70,"%d-%02d-%02d %02d-%02d-%02d.bmp",(ulong)local_80,
                   (ulong)local_7e,(ulong)local_7a,(ulong)local_78,(ulong)local_76,(ulong)local_74);
    }
    else {
      MStream::operator<<(aMStack_70,param_1);
    }
    local_8e = iVar2 * 4 + 0x36;
    local_90 = 0x4d42;
    local_8a = 0;
    local_88 = 0;
    local_86 = 0x36;
    pcVar4 = (char *)MStream::Get(aMStack_70);
    OFStream::OFStream((OFStream *)&local_80,pcVar4,false);
    OFStream::Write((OFStream *)&local_80,&local_90,0xe,1);
    OFStream::Write((OFStream *)&local_80,this + 0xfc,0x28,1);
    OFStream::Write((OFStream *)&local_80,__dest,__n,1);
    OFStream::~OFStream((OFStream *)&local_80);
    operator_delete__(__dest);
    uVar5 = 1;
    MStream::~MStream(aMStack_70);
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return uVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017fbf4 (156 bytes) name=Logging

/* mag::Logging::Logging(int) */

void __thiscall mag::Logging::Logging(Logging *this,int param_1)

{
  long lVar1;
  tm *ptVar2;
  time_t tStack_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  MStream::MStream((MStream *)this,0x400);
  time(&tStack_40);
  ptVar2 = localtime(&tStack_40);
  MStream::Fmt((char *)this,"%d.%02d.%02d %02d:%02d:%02d  %s",(ulong)(ptVar2->tm_year + 0x76c),
               (ulong)(ptVar2->tm_mon + 1),(ulong)(uint)ptVar2->tm_mday,(ulong)(uint)ptVar2->tm_hour
               ,(ulong)(uint)ptVar2->tm_min,(ulong)(uint)ptVar2->tm_sec,
               (&PTR_s_TRACE___004fa088)[param_1]);
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0017fca8 (68 bytes) name=~Logging

/* mag::Logging::~Logging() */

void __thiscall mag::Logging::~Logging(Logging *this)

{
  MStream::operator<<((MStream *)this,"\n");
  MStream::Write((MStream *)this,(__sFILE *)PTR___sF_005028b0);
  fflush((FILE *)PTR___sF_005028b0);
  MStream::~MStream((MStream *)this);
  return;
}


==================================================================

### FUNC 0017fd00 (12 bytes) name=Setfp

/* mag::Logging::Setfp(__sFILE*) */

void mag::Logging::Setfp(__sFILE *param_1)

{
  PTR___sF_005028b0 = param_1;
  return;
}


==================================================================

### FUNC 0017fd0c (28 bytes) name=Setfp

/* mag::Logging::Setfp(OFStream&) */

void mag::Logging::Setfp(OFStream *param_1)

{
  PTR___sF_005028b0 = (pointer_____offset_0x98___)FStream::GetRaw((FStream *)param_1);
  return;
}


==================================================================

### FUNC 0017fd28 (36 bytes) name=MD5Init

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* md5::MD5Init(MD5_CTX*) */

void md5::MD5Init(MD5_CTX *param_1)

{
  undefined8 uVar1;
  
  uVar1 = _DAT_0043a030;
  *(undefined8 *)(param_1 + 8) = _UNK_0043a038;
  *(undefined8 *)param_1 = uVar1;
  *(undefined8 *)(param_1 + 0x10) = 0x1032547698badcfe;
  return;
}


==================================================================

### FUNC 0017fd4c (208 bytes) name=MD5Update

/* md5::MD5Update(MD5_CTX*, unsigned char*, unsigned int) */

void md5::MD5Update(MD5_CTX *param_1,uchar *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  ulong uVar3;
  int iVar4;
  int iVar5;
  ulong __n;
  
  uVar1 = *(uint *)param_1;
  iVar4 = *(int *)(param_1 + 4);
  uVar2 = uVar1 >> 3 & 0x3f;
  uVar3 = (ulong)uVar2;
  iVar5 = -uVar2;
  __n = (ulong)(iVar5 + 0x40U);
  *(uint *)param_1 = uVar1 + param_3 * 8;
  if (CARRY4(uVar1,param_3 * 8)) {
    iVar4 = iVar4 + 1;
    *(int *)(param_1 + 4) = iVar4;
  }
  *(uint *)(param_1 + 4) = iVar4 + (param_3 >> 0x1d);
  if (param_3 < iVar5 + 0x40U) {
    __n = 0;
  }
  else {
    memcpy(param_1 + 0x18 + uVar3,param_2,__n);
    MD5Transform((uint *)(param_1 + 8),(uchar *)(param_1 + 0x18));
    while (iVar5 + 0x80U <= param_3) {
      MD5Transform((uint *)(param_1 + 8),param_2 + __n);
      iVar5 = (int)__n;
      __n = (ulong)(iVar5 + 0x40);
    }
    uVar3 = 0;
  }
  memcpy(param_1 + uVar3 + 0x18,param_2 + __n,(ulong)(param_3 - (int)__n));
  return;
}


==================================================================

### FUNC 0017fe1c (3364 bytes) name=MD5Transform

/* md5::MD5Transform(unsigned int*, unsigned char*) */

void md5::MD5Transform(uint *param_1,uchar *param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  uint3 uVar6;
  uint3 uVar7;
  uint3 uVar8;
  long lVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iStack_15c;
  int iStack_154;
  int iStack_14c;
  int iStack_144;
  int iStack_13c;
  int iStack_134;
  int iStack_12c;
  int iStack_124;
  
  lVar5 = tpidr_el0;
  lVar9 = *(long *)(lVar5 + 0x28);
  uVar15 = *(undefined8 *)param_2;
  uVar4 = param_1[1];
  uVar3 = param_1[2];
  uVar6 = CONCAT12((char)((ulong)uVar15 >> 0x20),(short)uVar15) & 0xff00ff;
  iVar12 = CONCAT13((char)((ulong)uVar15 >> 0x18),
                    CONCAT12((char)((ulong)uVar15 >> 0x10),
                             CONCAT11((char)((ulong)uVar15 >> 8),(char)uVar6)));
  iVar19 = (int)*(undefined8 *)(param_2 + 8);
  uVar16 = *(undefined8 *)(param_2 + 0x10);
  uVar7 = CONCAT12((char)((ulong)uVar16 >> 0x20),(short)uVar16) & 0xff00ff;
  iVar13 = CONCAT13((char)((ulong)uVar16 >> 0x18),
                    CONCAT12((char)((ulong)uVar16 >> 0x10),
                             CONCAT11((char)((ulong)uVar16 >> 8),(char)uVar7)));
  iVar20 = (int)*(undefined8 *)(param_2 + 0x18);
  uVar17 = *(undefined8 *)(param_2 + 0x20);
  uVar8 = CONCAT12((char)((ulong)uVar17 >> 0x20),(short)uVar17) & 0xff00ff;
  iVar14 = CONCAT13((char)((ulong)uVar17 >> 0x18),
                    CONCAT12((char)((ulong)uVar17 >> 0x10),
                             CONCAT11((char)((ulong)uVar17 >> 8),(char)uVar8)));
  iVar21 = (int)*(undefined8 *)(param_2 + 0x28);
  uVar18 = *(undefined8 *)(param_2 + 0x30);
  iStack_15c = (int)(CONCAT17((char)((ulong)uVar15 >> 0x38),
                              CONCAT16((char)((ulong)uVar15 >> 0x30),
                                       CONCAT15((char)((ulong)uVar15 >> 0x28),
                                                CONCAT14((char)(uVar6 >> 0x10),iVar12)))) >> 0x20);
  uVar1 = *param_1 + (param_1[3] & (uVar4 ^ 0xffffffff) | uVar3 & uVar4) + iVar12 + 0xd76aa478;
  uVar1 = (uVar1 >> 0x19 | uVar1 * 0x80) + uVar4;
  uVar2 = param_1[3] + iStack_15c + (uVar1 & uVar4 | uVar3 & (uVar1 ^ 0xffffffff)) + 0xe8c7b756;
  uVar2 = (uVar2 >> 0x14 | uVar2 * 0x1000) + uVar1;
  iStack_154 = (int)((ulong)*(undefined8 *)(param_2 + 8) >> 0x20);
  uVar3 = uVar3 + iVar19 + (uVar2 & uVar1 | uVar4 & (uVar2 ^ 0xffffffff)) + 0x242070db;
  uVar3 = (uVar3 >> 0xf | uVar3 * 0x20000) + uVar2;
  uVar4 = uVar4 + iStack_154 + (uVar3 & uVar2 | uVar1 & (uVar3 ^ 0xffffffff)) + 0xc1bdceee;
  uVar4 = (uVar4 >> 10 | uVar4 * 0x400000) + uVar3;
  iStack_14c = (int)(CONCAT17((char)((ulong)uVar16 >> 0x38),
                              CONCAT16((char)((ulong)uVar16 >> 0x30),
                                       CONCAT15((char)((ulong)uVar16 >> 0x28),
                                                CONCAT14((char)(uVar7 >> 0x10),iVar13)))) >> 0x20);
  uVar1 = iVar13 + uVar1 + (uVar4 & uVar3 | uVar2 & (uVar4 ^ 0xffffffff)) + 0xf57c0faf;
  uVar1 = (uVar1 >> 0x19 | uVar1 * 0x80) + uVar4;
  uVar2 = iStack_14c + uVar2 + (uVar1 & uVar4 | uVar3 & (uVar1 ^ 0xffffffff)) + 0x4787c62a;
  uVar2 = (uVar2 >> 0x14 | uVar2 * 0x1000) + uVar1;
  iStack_144 = (int)((ulong)*(undefined8 *)(param_2 + 0x18) >> 0x20);
  uVar3 = iVar20 + uVar3 + (uVar2 & uVar1 | uVar4 & (uVar2 ^ 0xffffffff)) + 0xa8304613;
  uVar3 = (uVar3 >> 0xf | uVar3 * 0x20000) + uVar2;
  uVar4 = iStack_144 + uVar4 + (uVar3 & uVar2 | uVar1 & (uVar3 ^ 0xffffffff)) + 0xfd469501;
  uVar4 = (uVar4 >> 10 | uVar4 * 0x400000) + uVar3;
  iStack_13c = (int)(CONCAT17((char)((ulong)uVar17 >> 0x38),
                              CONCAT16((char)((ulong)uVar17 >> 0x30),
                                       CONCAT15((char)((ulong)uVar17 >> 0x28),
                                                CONCAT14((char)(uVar8 >> 0x10),iVar14)))) >> 0x20);
  uVar6 = CONCAT12((char)((ulong)uVar18 >> 0x20),(short)uVar18) & 0xff00ff;
  uVar1 = iVar14 + uVar1 + (uVar4 & uVar3 | uVar2 & (uVar4 ^ 0xffffffff)) + 0x698098d8;
  uVar1 = (uVar1 >> 0x19 | uVar1 * 0x80) + uVar4;
  uVar2 = iStack_13c + uVar2 + (uVar1 & uVar4 | uVar3 & (uVar1 ^ 0xffffffff)) + 0x8b44f7af;
  uVar2 = (uVar2 >> 0x14 | uVar2 * 0x1000) + uVar1;
  iStack_134 = (int)((ulong)*(undefined8 *)(param_2 + 0x28) >> 0x20);
  uVar3 = (iVar21 + uVar3 + (uVar2 & uVar1 | uVar4 & (uVar2 ^ 0xffffffff))) - 0xa44f;
  uVar3 = (uVar3 >> 0xf | uVar3 * 0x20000) + uVar2;
  uVar4 = iStack_134 + uVar4 + (uVar3 & uVar2 | uVar1 & (uVar3 ^ 0xffffffff)) + 0x895cd7be;
  iVar10 = CONCAT13((char)((ulong)uVar18 >> 0x18),
                    CONCAT12((char)((ulong)uVar18 >> 0x10),
                             CONCAT11((char)((ulong)uVar18 >> 8),(char)uVar6)));
  iVar11 = (int)*(undefined8 *)(param_2 + 0x38);
  uVar4 = (uVar4 >> 10 | uVar4 * 0x400000) + uVar3;
  iStack_12c = (int)(CONCAT17((char)((ulong)uVar18 >> 0x38),
                              CONCAT16((char)((ulong)uVar18 >> 0x30),
                                       CONCAT15((char)((ulong)uVar18 >> 0x28),
                                                CONCAT14((char)(uVar6 >> 0x10),iVar10)))) >> 0x20);
  uVar1 = iVar10 + uVar1 + (uVar4 & uVar3 | uVar2 & (uVar4 ^ 0xffffffff)) + 0x6b901122;
  uVar1 = (uVar1 >> 0x19 | uVar1 * 0x80) + uVar4;
  uVar2 = iStack_12c + uVar2 + (uVar1 & uVar4 | uVar3 & (uVar1 ^ 0xffffffff)) + 0xfd987193;
  uVar2 = (uVar2 >> 0x14 | uVar2 * 0x1000) + uVar1;
  iStack_124 = (int)((ulong)*(undefined8 *)(param_2 + 0x38) >> 0x20);
  uVar3 = iVar11 + uVar3 + (uVar2 & uVar1 | uVar4 & (uVar2 ^ 0xffffffff)) + 0xa679438e;
  uVar3 = (uVar3 >> 0xf | uVar3 * 0x20000) + uVar2;
  uVar4 = iStack_124 + uVar4 + (uVar3 & uVar2 | uVar1 & (uVar3 ^ 0xffffffff)) + 0x49b40821;
  uVar4 = (uVar4 >> 10 | uVar4 * 0x400000) + uVar3;
  uVar1 = iStack_15c + uVar1 + (uVar4 & uVar2 | uVar3 & (uVar2 ^ 0xffffffff)) + 0xf61e2562;
  uVar1 = (uVar1 >> 0x1b | uVar1 * 0x20) + uVar4;
  uVar2 = iVar20 + uVar2 + (uVar1 & uVar3 | uVar4 & (uVar3 ^ 0xffffffff)) + 0xc040b340;
  uVar2 = (uVar2 >> 0x17 | uVar2 * 0x200) + uVar1;
  uVar3 = iStack_134 + uVar3 + (uVar2 & uVar4 | uVar1 & (uVar4 ^ 0xffffffff)) + 0x265e5a51;
  uVar3 = (uVar3 >> 0x12 | uVar3 * 0x4000) + uVar2;
  uVar4 = iVar12 + uVar4 + (uVar3 & uVar1 | uVar2 & (uVar1 ^ 0xffffffff)) + 0xe9b6c7aa;
  uVar4 = (uVar4 >> 0xc | uVar4 * 0x100000) + uVar3;
  uVar1 = iStack_14c + uVar1 + (uVar4 & uVar2 | uVar3 & (uVar2 ^ 0xffffffff)) + 0xd62f105d;
  uVar1 = (uVar1 >> 0x1b | uVar1 * 0x20) + uVar4;
  uVar2 = iVar21 + uVar2 + (uVar1 & uVar3 | uVar4 & (uVar3 ^ 0xffffffff)) + 0x2441453;
  uVar2 = (uVar2 >> 0x17 | uVar2 * 0x200) + uVar1;
  uVar3 = iStack_124 + uVar3 + (uVar2 & uVar4 | uVar1 & (uVar4 ^ 0xffffffff)) + 0xd8a1e681;
  uVar3 = (uVar3 >> 0x12 | uVar3 * 0x4000) + uVar2;
  uVar4 = iVar13 + uVar4 + (uVar3 & uVar1 | uVar2 & (uVar1 ^ 0xffffffff)) + 0xe7d3fbc8;
  uVar4 = (uVar4 >> 0xc | uVar4 * 0x100000) + uVar3;
  uVar1 = iStack_13c + uVar1 + (uVar4 & uVar2 | uVar3 & (uVar2 ^ 0xffffffff)) + 0x21e1cde6;
  uVar1 = (uVar1 >> 0x1b | uVar1 * 0x20) + uVar4;
  uVar2 = iVar11 + uVar2 + (uVar1 & uVar3 | uVar4 & (uVar3 ^ 0xffffffff)) + 0xc33707d6;
  uVar2 = (uVar2 >> 0x17 | uVar2 * 0x200) + uVar1;
  uVar3 = iStack_154 + uVar3 + (uVar2 & uVar4 | uVar1 & (uVar4 ^ 0xffffffff)) + 0xf4d50d87;
  uVar3 = (uVar3 >> 0x12 | uVar3 * 0x4000) + uVar2;
  uVar4 = iVar14 + uVar4 + (uVar3 & uVar1 | uVar2 & (uVar1 ^ 0xffffffff)) + 0x455a14ed;
  uVar4 = (uVar4 >> 0xc | uVar4 * 0x100000) + uVar3;
  uVar1 = iStack_12c + uVar1 + (uVar4 & uVar2 | uVar3 & (uVar2 ^ 0xffffffff)) + 0xa9e3e905;
  uVar1 = (uVar1 >> 0x1b | uVar1 * 0x20) + uVar4;
  uVar2 = iVar19 + uVar2 + (uVar1 & uVar3 | uVar4 & (uVar3 ^ 0xffffffff)) + 0xfcefa3f8;
  uVar2 = (uVar2 >> 0x17 | uVar2 * 0x200) + uVar1;
  uVar3 = iStack_144 + uVar3 + (uVar2 & uVar4 | uVar1 & (uVar4 ^ 0xffffffff)) + 0x676f02d9;
  uVar3 = (uVar3 >> 0x12 | uVar3 * 0x4000) + uVar2;
  uVar4 = iVar10 + uVar4 + (uVar3 & uVar1 | uVar2 & (uVar1 ^ 0xffffffff)) + 0x8d2a4c8a;
  uVar4 = (uVar4 >> 0xc | uVar4 * 0x100000) + uVar3;
  uVar1 = (iStack_14c + uVar1 + (uVar3 ^ uVar2 ^ uVar4)) - 0x5c6be;
  uVar1 = (uVar1 >> 0x1c | uVar1 * 0x10) + uVar4;
  uVar2 = iVar14 + uVar2 + (uVar4 ^ uVar3 ^ uVar1) + 0x8771f681;
  uVar2 = (uVar2 >> 0x15 | uVar2 * 0x800) + uVar1;
  uVar3 = iStack_134 + uVar3 + (uVar1 ^ uVar4 ^ uVar2) + 0x6d9d6122;
  uVar3 = (uVar3 >> 0x10 | uVar3 * 0x10000) + uVar2;
  uVar4 = iVar11 + uVar4 + (uVar2 ^ uVar1 ^ uVar3) + 0xfde5380c;
  uVar4 = (uVar4 >> 9 | uVar4 * 0x800000) + uVar3;
  uVar1 = iStack_15c + uVar1 + (uVar3 ^ uVar2 ^ uVar4) + 0xa4beea44;
  uVar1 = (uVar1 >> 0x1c | uVar1 * 0x10) + uVar4;
  uVar2 = iVar13 + uVar2 + (uVar4 ^ uVar3 ^ uVar1) + 0x4bdecfa9;
  uVar2 = (uVar2 >> 0x15 | uVar2 * 0x800) + uVar1;
  uVar3 = iStack_144 + uVar3 + (uVar1 ^ uVar4 ^ uVar2) + 0xf6bb4b60;
  uVar3 = (uVar3 >> 0x10 | uVar3 * 0x10000) + uVar2;
  uVar4 = iVar21 + uVar4 + (uVar2 ^ uVar1 ^ uVar3) + 0xbebfbc70;
  uVar4 = (uVar4 >> 9 | uVar4 * 0x800000) + uVar3;
  uVar1 = iStack_12c + uVar1 + (uVar3 ^ uVar2 ^ uVar4) + 0x289b7ec6;
  uVar1 = (uVar1 >> 0x1c | uVar1 * 0x10) + uVar4;
  uVar2 = iVar12 + uVar2 + (uVar4 ^ uVar3 ^ uVar1) + 0xeaa127fa;
  uVar2 = (uVar2 >> 0x15 | uVar2 * 0x800) + uVar1;
  uVar3 = iStack_154 + uVar3 + (uVar1 ^ uVar4 ^ uVar2) + 0xd4ef3085;
  uVar3 = (uVar3 >> 0x10 | uVar3 * 0x10000) + uVar2;
  uVar4 = iVar20 + uVar4 + (uVar2 ^ uVar1 ^ uVar3) + 0x4881d05;
  uVar4 = (uVar4 >> 9 | uVar4 * 0x800000) + uVar3;
  uVar1 = iStack_13c + uVar1 + (uVar3 ^ uVar2 ^ uVar4) + 0xd9d4d039;
  uVar1 = (uVar1 >> 0x1c | uVar1 * 0x10) + uVar4;
  uVar2 = iVar10 + uVar2 + (uVar4 ^ uVar3 ^ uVar1) + 0xe6db99e5;
  uVar2 = (uVar2 >> 0x15 | uVar2 * 0x800) + uVar1;
  uVar3 = iStack_124 + uVar3 + (uVar1 ^ uVar4 ^ uVar2) + 0x1fa27cf8;
  uVar3 = (uVar3 >> 0x10 | uVar3 * 0x10000) + uVar2;
  uVar4 = iVar19 + uVar4 + (uVar2 ^ uVar1 ^ uVar3) + 0xc4ac5665;
  uVar4 = (uVar4 >> 9 | uVar4 * 0x800000) + uVar3;
  uVar1 = iVar12 + uVar1 + ((uVar4 | uVar2 ^ 0xffffffff) ^ uVar3) + 0xf4292244;
  uVar1 = (uVar1 >> 0x1a | uVar1 * 0x40) + uVar4;
  uVar2 = iStack_144 + uVar2 + ((uVar1 | uVar3 ^ 0xffffffff) ^ uVar4) + 0x432aff97;
  uVar2 = (uVar2 >> 0x16 | uVar2 * 0x400) + uVar1;
  uVar3 = iVar11 + uVar3 + ((uVar2 | uVar4 ^ 0xffffffff) ^ uVar1) + 0xab9423a7;
  uVar3 = (uVar3 >> 0x11 | uVar3 * 0x8000) + uVar2;
  uVar4 = iStack_14c + uVar4 + ((uVar3 | uVar1 ^ 0xffffffff) ^ uVar2) + 0xfc93a039;
  uVar4 = (uVar4 >> 0xb | uVar4 * 0x200000) + uVar3;
  uVar1 = iVar10 + uVar1 + ((uVar4 | uVar2 ^ 0xffffffff) ^ uVar3) + 0x655b59c3;
  uVar1 = (uVar1 >> 0x1a | uVar1 * 0x40) + uVar4;
  uVar2 = iStack_154 + uVar2 + ((uVar1 | uVar3 ^ 0xffffffff) ^ uVar4) + 0x8f0ccc92;
  uVar2 = (uVar2 >> 0x16 | uVar2 * 0x400) + uVar1;
  uVar3 = (iVar21 + uVar3 + ((uVar2 | uVar4 ^ 0xffffffff) ^ uVar1)) - 0x100b83;
  uVar3 = (uVar3 >> 0x11 | uVar3 * 0x8000) + uVar2;
  uVar4 = iStack_15c + uVar4 + ((uVar3 | uVar1 ^ 0xffffffff) ^ uVar2) + 0x85845dd1;
  uVar4 = (uVar4 >> 0xb | uVar4 * 0x200000) + uVar3;
  uVar1 = iVar14 + uVar1 + ((uVar4 | uVar2 ^ 0xffffffff) ^ uVar3) + 0x6fa87e4f;
  uVar1 = (uVar1 >> 0x1a | uVar1 * 0x40) + uVar4;
  uVar2 = iStack_124 + uVar2 + ((uVar1 | uVar3 ^ 0xffffffff) ^ uVar4) + 0xfe2ce6e0;
  uVar2 = (uVar2 >> 0x16 | uVar2 * 0x400) + uVar1;
  uVar3 = iVar20 + uVar3 + ((uVar2 | uVar4 ^ 0xffffffff) ^ uVar1) + 0xa3014314;
  uVar3 = (uVar3 >> 0x11 | uVar3 * 0x8000) + uVar2;
  uVar4 = iStack_12c + uVar4 + ((uVar3 | uVar1 ^ 0xffffffff) ^ uVar2) + 0x4e0811a1;
  uVar4 = (uVar4 >> 0xb | uVar4 * 0x200000) + uVar3;
  uVar1 = iVar13 + uVar1 + ((uVar4 | uVar2 ^ 0xffffffff) ^ uVar3) + 0xf7537e82;
  uVar1 = (uVar1 >> 0x1a | uVar1 * 0x40) + uVar4;
  uVar2 = iStack_134 + uVar2 + ((uVar1 | uVar3 ^ 0xffffffff) ^ uVar4) + 0xbd3af235;
  uVar2 = (uVar2 >> 0x16 | uVar2 * 0x400) + uVar1;
  uVar3 = iVar19 + uVar3 + ((uVar2 | uVar4 ^ 0xffffffff) ^ uVar1) + 0x2ad7d2bb;
  uVar3 = (uVar3 >> 0x11 | uVar3 * 0x8000) + uVar2;
  param_1[2] = uVar3 + param_1[2];
  param_1[3] = uVar2 + param_1[3];
  uVar2 = iStack_13c + uVar4 + ((uVar3 | uVar1 ^ 0xffffffff) ^ uVar2) + 0xeb86d391;
  *param_1 = uVar1 + *param_1;
  param_1[1] = uVar3 + param_1[1] + (uVar2 >> 0xb | uVar2 * 0x200000);
  if (*(long *)(lVar5 + 0x28) == lVar9) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00180b40 (592 bytes) name=MD5Final

/* md5::MD5Final(MD5_CTX*) */

void md5::MD5Final(MD5_CTX *param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  uint uVar5;
  long lVar6;
  undefined *puVar7;
  ulong uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  ulong uVar12;
  undefined1 local_60 [4];
  undefined1 local_5c;
  undefined1 local_5b;
  undefined1 local_5a;
  undefined1 local_59;
  long local_58;
  
  lVar6 = tpidr_el0;
  local_58 = *(long *)(lVar6 + 0x28);
  iVar11 = 0x38;
  uVar4 = *(uint *)param_1;
  local_60[1] = (undefined1)(uVar4 >> 8);
  local_60[0] = (undefined1)uVar4;
  local_60[2] = (undefined1)(uVar4 >> 0x10);
  local_60[3] = (undefined1)(uVar4 >> 0x18);
  iVar9 = *(int *)(param_1 + 4);
  uVar10 = uVar4 >> 3 & 0x3f;
  uVar8 = (ulong)uVar10;
  if (0x37 < uVar10) {
    iVar11 = 0x78;
  }
  local_5b = (undefined1)((uint)iVar9 >> 8);
  local_5a = (undefined1)((uint)iVar9 >> 0x10);
  local_59 = (undefined1)((uint)iVar9 >> 0x18);
  uVar5 = iVar11 - uVar10;
  iVar11 = -uVar10;
  uVar10 = iVar11 + 0x40;
  uVar12 = (ulong)uVar10;
  local_5c = (undefined1)iVar9;
  *(uint *)param_1 = uVar4 + uVar5 * 8;
  if (CARRY4(uVar4,uVar5 * 8)) {
    iVar9 = iVar9 + 1;
    *(int *)(param_1 + 4) = iVar9;
  }
  *(uint *)(param_1 + 4) = iVar9 + (uVar5 >> 0x1d);
  puVar7 = PTR_PADDING_00501a78;
  if (uVar5 < uVar10) {
    uVar10 = 0;
  }
  else {
    memcpy(param_1 + 0x18 + uVar8,PTR_PADDING_00501a78,uVar12);
    MD5Transform((uint *)(param_1 + 8),(uchar *)(param_1 + 0x18));
    while (iVar11 + 0x80U <= uVar5) {
      MD5Transform((uint *)(param_1 + 8),puVar7 + uVar12);
      iVar11 = (int)uVar12;
      uVar10 = iVar11 + 0x40;
      uVar12 = (ulong)uVar10;
    }
    uVar8 = 0;
  }
  memcpy(param_1 + uVar8 + 0x18,PTR_PADDING_00501a78 + uVar10,(ulong)(uVar5 - uVar10));
  uVar4 = *(uint *)param_1;
  iVar9 = *(int *)(param_1 + 4);
  uVar10 = uVar4 >> 3 & 0x3f;
  uVar8 = (ulong)uVar10;
  uVar10 = 0x40 - uVar10;
  uVar12 = (ulong)uVar10;
  *(uint *)param_1 = uVar4 + 0x40;
  if (0xffffffbf < uVar4) {
    iVar9 = iVar9 + 1;
    *(int *)(param_1 + 4) = iVar9;
  }
  *(int *)(param_1 + 4) = iVar9;
  if (uVar10 < 9) {
    memcpy(param_1 + 0x18 + uVar8,local_60,uVar12);
    MD5Transform((uint *)(param_1 + 8),(uchar *)(param_1 + 0x18));
    uVar8 = 0;
  }
  else {
    uVar12 = 0;
  }
  memcpy(param_1 + uVar8 + 0x18,local_60 + uVar12,(ulong)(8 - (int)uVar12));
  uVar1 = *(undefined4 *)(param_1 + 8);
  uVar2 = *(undefined4 *)(param_1 + 0xc);
  param_1[0x58] = SUB41(uVar1,0);
  param_1[0x59] = SUB41((uint)uVar1 >> 8,0);
  param_1[0x5a] = SUB41((uint)uVar1 >> 0x10,0);
  param_1[0x5b] = SUB41((uint)uVar1 >> 0x18,0);
  param_1[0x5d] = SUB41((uint)uVar2 >> 8,0);
  param_1[0x5e] = SUB41((uint)uVar2 >> 0x10,0);
  uVar1 = *(undefined4 *)(param_1 + 0x10);
  uVar3 = *(undefined4 *)(param_1 + 0x14);
  param_1[0x5c] = SUB41(uVar2,0);
  param_1[0x5f] = SUB41((uint)uVar2 >> 0x18,0);
  param_1[0x61] = SUB41((uint)uVar1 >> 8,0);
  param_1[0x60] = SUB41(uVar1,0);
  param_1[99] = SUB41((uint)uVar1 >> 0x18,0);
  param_1[0x62] = SUB41((uint)uVar1 >> 0x10,0);
  param_1[0x65] = SUB41((uint)uVar3 >> 8,0);
  param_1[100] = SUB41(uVar3,0);
  param_1[0x66] = SUB41((uint)uVar3 >> 0x10,0);
  param_1[0x67] = SUB41((uint)uVar3 >> 0x18,0);
  if (*(long *)(lVar6 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 00180d90 (84 bytes) name=MD5Encode

/* md5::MD5Encode(unsigned char*, unsigned int*, unsigned int) */

void md5::MD5Encode(uchar *param_1,uint *param_2,uint param_3)

{
  uint *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  
  if (param_3 != 0) {
    uVar3 = 0;
    uVar4 = 0;
    do {
      puVar1 = param_2 + uVar4;
      uVar4 = uVar4 + 1;
      param_1[uVar3] = (uchar)*puVar1;
      param_1[uVar3 + 1] = (uchar)(*puVar1 >> 8);
      param_1[uVar3 + 2] = (uchar)*(undefined2 *)((long)puVar1 + 2);
      uVar2 = uVar3 + 3;
      uVar3 = uVar3 + 4;
      param_1[uVar2] = *(uchar *)((long)puVar1 + 3);
    } while (uVar3 < param_3);
  }
  return;
}


==================================================================

### FUNC 00180de4 (76 bytes) name=MD5Decode

/* md5::MD5Decode(unsigned int*, unsigned char*, unsigned int) */

void md5::MD5Decode(uint *param_1,uchar *param_2,uint param_3)

{
  ulong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  
  if (param_3 != 0) {
    uVar5 = 0;
    uVar6 = 0;
    do {
      uVar2 = uVar5 + 1;
      uVar1 = (ulong)uVar5;
      uVar3 = uVar5 + 2;
      uVar4 = uVar5 + 3;
      uVar5 = uVar5 + 4;
      param_1[uVar6] =
           CONCAT13(param_2[uVar4],CONCAT12(param_2[uVar3],CONCAT11(param_2[uVar2],param_2[uVar1])))
      ;
      uVar6 = uVar6 + 1;
    } while (uVar5 < param_3);
  }
  return;
}


==================================================================

### FUNC 00180e30 (72 bytes) name=wait

/* Condition::wait() */

int __thiscall Condition::wait(Condition *this)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)this);
  while (this[0x58] == (Condition)0x0) {
    pthread_cond_wait((pthread_cond_t *)(this + 0x28),(pthread_mutex_t *)this);
  }
  this[0x58] = (Condition)0x0;
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)this);
  return iVar1;
}


==================================================================

### FUNC 00180e94 (268 bytes) name=waitForMsecs

/* Condition::waitForMsecs(int) */

undefined4 __thiscall Condition::waitForMsecs(Condition *this,int param_1)

{
  long lVar1;
  int iVar2;
  undefined4 uVar3;
  timespec local_58;
  timeval local_48;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  gettimeofday(&local_48,(__timezone_ptr_t)0x0);
  local_58.tv_sec = local_48.tv_sec + param_1 / 1000;
  local_58.tv_nsec = local_48.tv_usec * 1000 + (long)((param_1 % 1000) * 1000000);
  if (1000000000 < local_58.tv_nsec) {
    local_58.tv_sec = local_58.tv_sec + 1;
    local_58.tv_nsec = (ulong)local_58.tv_nsec % 1000000000;
  }
  pthread_mutex_lock((pthread_mutex_t *)this);
  do {
    if (this[0x58] != (Condition)0x0) {
      uVar3 = 0;
      this[0x58] = (Condition)0x0;
      goto LAB_00180f6c;
    }
    iVar2 = pthread_cond_timedwait
                      ((pthread_cond_t *)(this + 0x28),(pthread_mutex_t *)this,&local_58);
  } while (iVar2 != 0x6e);
  uVar3 = 1;
LAB_00180f6c:
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)this);
  if (*(long *)(lVar1 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(iVar2);
  }
  return uVar3;
}


==================================================================

### FUNC 00180fbc (124 bytes) name=CMagDevice

/* CMagDevice::CMagDevice() */

void __thiscall CMagDevice::CMagDevice(CMagDevice *this)

{
  bool bVar1;
  int iVar2;
  undefined4 uVar3;
  int iVar4;
  
  *(undefined8 *)this = 0xffffffff00000000;
  memset(this + 8,0,0x50);
  iVar4 = 1;
  do {
    iVar2 = MAG_IsChannelAvailable(iVar4);
    if (iVar2 == 0) {
      MAG_NewChannel(iVar4);
      *(int *)(this + 4) = iVar4;
      goto LAB_00181010;
    }
    bVar1 = iVar4 < 0x80;
    iVar4 = iVar4 + 1;
  } while (bVar1);
  iVar4 = *(int *)(this + 4);
LAB_00181010:
  if (iVar4 - 1U < 0x80) {
    uVar3 = MAG_Initialize(iVar4,0);
    *(undefined4 *)this = uVar3;
  }
  return;
}


==================================================================

### FUNC 00181038 (144 bytes) name=Initialize

/* CMagDevice::Initialize() */

ulong __thiscall CMagDevice::Initialize(CMagDevice *this)

{
  bool bVar1;
  int iVar2;
  ulong uVar3;
  int iVar4;
  
  if (*(int *)this == 0) {
    iVar4 = *(int *)(this + 4);
    if (0x7f < iVar4 - 1U) {
      iVar4 = 1;
      do {
        iVar2 = MAG_IsChannelAvailable(iVar4);
        if (iVar2 == 0) {
          MAG_NewChannel(iVar4);
          *(int *)(this + 4) = iVar4;
          goto LAB_00181098;
        }
        bVar1 = iVar4 < 0x80;
        iVar4 = iVar4 + 1;
      } while (bVar1);
      iVar4 = *(int *)(this + 4);
    }
LAB_00181098:
    if (iVar4 - 1U < 0x80) {
      uVar3 = MAG_Initialize(iVar4,0);
      *(int *)this = (int)uVar3;
    }
    else {
      uVar3 = (ulong)*(uint *)this;
    }
  }
  else {
    uVar3 = 1;
  }
  return uVar3;
}


==================================================================

### FUNC 001810c8 (120 bytes) name=~CMagDevice

/* CMagDevice::~CMagDevice() */

void __thiscall CMagDevice::~CMagDevice(CMagDevice *this)

{
  int iVar1;
  
  iVar1 = MAG_IsProcessingImage(*(undefined4 *)(this + 4));
  if (iVar1 != 0) {
    MAG_StopProcessImage(*(undefined4 *)(this + 4));
  }
  iVar1 = MAG_IsLinked(*(undefined4 *)(this + 4));
  if (iVar1 != 0) {
    MAG_DisLinkCamera(*(undefined4 *)(this + 4));
  }
  iVar1 = MAG_IsInitialized(*(undefined4 *)(this + 4));
  if (iVar1 != 0) {
    MAG_Free(*(undefined4 *)(this + 4));
    *(undefined4 *)this = 0;
  }
  iVar1 = MAG_IsChannelAvailable(*(undefined4 *)(this + 4));
  if (iVar1 != 0) {
    MAG_DelChannel(*(undefined4 *)(this + 4));
    *(undefined4 *)(this + 4) = 0xffffffff;
  }
  return;
}


==================================================================

### FUNC 00181144 (8 bytes) name=DisLinkCamera

/* CMagDevice::DisLinkCamera() */

void __thiscall CMagDevice::DisLinkCamera(CMagDevice *this)

{
  MAG_DisLinkCamera(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 0018114c (8 bytes) name=GetCamInfo

/* CMagDevice::GetCamInfo() */

CMagDevice * __thiscall CMagDevice::GetCamInfo(CMagDevice *this)

{
  return this + 8;
}


==================================================================

### FUNC 00181154 (8 bytes) name=IsLinked

/* CMagDevice::IsLinked() */

void __thiscall CMagDevice::IsLinked(CMagDevice *this)

{
  MAG_IsLinked(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 0018115c (60 bytes) name=LinkCamera

/* CMagDevice::LinkCamera(unsigned int) */

undefined8 CMagDevice::LinkCamera(uint param_1)

{
  ulong uVar1;
  undefined8 uVar2;
  
  uVar1 = (ulong)param_1;
  uVar2 = MAG_LinkCamera(*(undefined4 *)(uVar1 + 4));
  if ((int)uVar2 != 0) {
    MAG_GetCamInfo(*(undefined4 *)(uVar1 + 4),uVar1 + 8,0x50);
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### FUNC 00181198 (8 bytes) name=TriggerFFC

/* CMagDevice::TriggerFFC() */

void __thiscall CMagDevice::TriggerFFC(CMagDevice *this)

{
  MAG_TriggerFFC(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001811a0 (8 bytes) name=IsProcessingImage

/* CMagDevice::IsProcessingImage() */

void __thiscall CMagDevice::IsProcessingImage(CMagDevice *this)

{
  MAG_IsProcessingImage(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001811a8 (8 bytes) name=PrepareProcessImage

/* CMagDevice::PrepareProcessImage(void (*)(unsigned int, int, int, void*), void*) */

void CMagDevice::PrepareProcessImage(_func_void_uint_int_int_void_ptr *param_1,void *param_2)

{
  MAG_PrepareProcessImage(*(undefined4 *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 001811b0 (168 bytes) name=StartProcessImage

/* CMagDevice::StartProcessImage(void (*)(unsigned int, unsigned int, unsigned int, void*), int,
   int, void*) */

void CMagDevice::StartProcessImage
               (_func_void_uint_uint_uint_void_ptr *param_1,int param_2,int param_3,void *param_4)

{
  long lVar1;
  int iVar2;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  uint local_30;
  int local_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  local_30 = param_3 & 0xfffffffc;
  local_40 = *(undefined4 *)(param_1 + 8);
  if ((param_3 & 0xfffffffcU) == 0) {
    local_30 = 4;
  }
  local_2c = (int)param_4;
  local_3c = *(undefined4 *)(param_1 + 0xc);
  if (local_2c == 0) {
    local_2c = 4;
  }
  local_38 = *(undefined4 *)(param_1 + 0x48);
  local_34 = *(undefined4 *)(param_1 + 0x4c);
  iVar2 = MAG_StartProcessImage(*(undefined4 *)(param_1 + 4),&local_40,param_2,2);
  if (iVar2 != 0) {
    *(uint *)(param_1 + 0x50) = local_30;
    *(int *)(param_1 + 0x54) = local_2c;
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00181258 (8 bytes) name=WillStartImmediately

/* CMagDevice::WillStartImmediately() */

void __thiscall CMagDevice::WillStartImmediately(CMagDevice *this)

{
  MAG_WillStartImmediately(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 00181260 (8 bytes) name=StopProcessImage

/* CMagDevice::StopProcessImage() */

void __thiscall CMagDevice::StopProcessImage(CMagDevice *this)

{
  MAG_StopProcessImage(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 00181268 (8 bytes) name=Pause

/* CMagDevice::Pause() */

void __thiscall CMagDevice::Pause(CMagDevice *this)

{
  MAG_Pause(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 00181270 (8 bytes) name=Resume

/* CMagDevice::Resume() */

void __thiscall CMagDevice::Resume(CMagDevice *this)

{
  MAG_Resume(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 00181278 (8 bytes) name=IsPause

/* CMagDevice::IsPause() */

void __thiscall CMagDevice::IsPause(CMagDevice *this)

{
  MAG_IsPause(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 00181280 (8 bytes) name=SetColorPalette

/* CMagDevice::SetColorPalette(ColorPalette) */

void CMagDevice::SetColorPalette(long param_1)

{
  MAG_SetColorPalette(*(undefined4 *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 00181288 (8 bytes) name=SetSubsectionEnlargePara

/* CMagDevice::SetSubsectionEnlargePara(int, int, unsigned char, unsigned char) */

void CMagDevice::SetSubsectionEnlargePara(int param_1,int param_2,uchar param_3,uchar param_4)

{
  MAG_SetSubsectionEnlargePara(*(undefined4 *)((ulong)(uint)param_1 + 4),param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00181290 (8 bytes) name=SetIsothermalPara

/* CMagDevice::SetIsothermalPara(int, int) */

void CMagDevice::SetIsothermalPara(int param_1,int param_2)

{
  MAG_SetIsothermalPara(*(undefined4 *)((ulong)(uint)param_1 + 4),param_2);
  return;
}


==================================================================

### FUNC 00181298 (8 bytes) name=SetAutoEnlargePara

/* CMagDevice::SetAutoEnlargePara(unsigned int, int, int) */

void CMagDevice::SetAutoEnlargePara(uint param_1,int param_2,int param_3)

{
  MAG_SetAutoEnlargePara(*(undefined4 *)((ulong)param_1 + 4),param_2,param_3);
  return;
}


==================================================================

### FUNC 001812a0 (8 bytes) name=SetEXLevel

/* CMagDevice::SetEXLevel(EX, int, int) */

void CMagDevice::SetEXLevel(long param_1)

{
  MAG_SetEXLevel(*(undefined4 *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 001812a8 (8 bytes) name=GetEXLevel

/* CMagDevice::GetEXLevel() */

void __thiscall CMagDevice::GetEXLevel(CMagDevice *this)

{
  MAG_GetEXLevel(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001812b0 (8 bytes) name=SetDetailEnhancement

/* CMagDevice::SetDetailEnhancement(int, int) */

void CMagDevice::SetDetailEnhancement(int param_1,int param_2)

{
  MAG_SetDetailEnhancement(*(undefined4 *)((ulong)(uint)param_1 + 4),param_2);
  return;
}


==================================================================

### FUNC 001812b8 (8 bytes) name=GetFixPara

/* CMagDevice::GetFixPara(struct_FixPara*) */

void CMagDevice::GetFixPara(struct_FixPara *param_1)

{
  MAG_GetFixPara(*(undefined4 *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 001812c0 (12 bytes) name=SetFixPara

/* CMagDevice::SetFixPara(struct_FixPara const*) */

void __thiscall CMagDevice::SetFixPara(CMagDevice *this,struct_FixPara *param_1)

{
  MAG_SetFixPara(*(undefined4 *)(this + 4),param_1,0);
  return;
}


==================================================================

### FUNC 001812cc (8 bytes) name=GetChannelIndex

/* CMagDevice::GetChannelIndex() */

undefined4 __thiscall CMagDevice::GetChannelIndex(CMagDevice *this)

{
  return *(undefined4 *)(this + 4);
}


==================================================================

### FUNC 001812d4 (8 bytes) name=GetOutputBMPdata

/* CMagDevice::GetOutputBMPdata(unsigned char const**, tagBITMAPINFO const**) */

void CMagDevice::GetOutputBMPdata(uchar **param_1,tagBITMAPINFO **param_2)

{
  MAG_GetOutputBMPdata(*(undefined4 *)((long)param_1 + 4));
  return;
}


==================================================================

### FUNC 001812dc (8 bytes) name=GetOutputColorBardata

/* CMagDevice::GetOutputColorBardata(unsigned char const**, tagBITMAPINFO const**) */

void CMagDevice::GetOutputColorBardata(uchar **param_1,tagBITMAPINFO **param_2)

{
  MAG_GetOutputColorBardata(*(undefined4 *)((long)param_1 + 4));
  return;
}


==================================================================

### FUNC 001812e4 (8 bytes) name=GetOutputRawData

/* CMagDevice::GetOutputRawData() */

void __thiscall CMagDevice::GetOutputRawData(CMagDevice *this)

{
  MAG_GetOutputRawData(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001812ec (8 bytes) name=GetFrameStatisticalData

/* CMagDevice::GetFrameStatisticalData() */

void __thiscall CMagDevice::GetFrameStatisticalData(CMagDevice *this)

{
  MAG_GetFrameStatisticalData(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001812f4 (8 bytes) name=GetRemoteInfo

/* CMagDevice::GetRemoteInfo() */

void __thiscall CMagDevice::GetRemoteInfo(CMagDevice *this)

{
  MAG_GetRemoteInfo(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001812fc (8 bytes) name=FixTemperature

/* CMagDevice::FixTemperature(int, float, unsigned int, unsigned int) */

void CMagDevice::FixTemperature(int param_1,float param_2,uint param_3,uint param_4)

{
  MAG_FixTemperature(*(undefined4 *)((ulong)(uint)param_1 + 4),param_3,param_4);
  return;
}


==================================================================

### FUNC 00181304 (8 bytes) name=FixTemperature

/* CMagDevice::FixTemperature(int, float, unsigned int) */

void CMagDevice::FixTemperature(int param_1,float param_2,uint param_3)

{
  MAG_FixTemperature2(*(undefined4 *)((ulong)(uint)param_1 + 4),param_3);
  return;
}


==================================================================

### FUNC 0018130c (8 bytes) name=GetTemperatureData

/* CMagDevice::GetTemperatureData(int*, unsigned int, int) */

void CMagDevice::GetTemperatureData(int *param_1,uint param_2,int param_3)

{
  MAG_GetTemperatureData(param_1[1],param_2,param_3);
  return;
}


==================================================================

### FUNC 00181314 (8 bytes) name=GetTemperatureData_Raw

/* CMagDevice::GetTemperatureData_Raw(int*, unsigned int, int) */

void CMagDevice::GetTemperatureData_Raw(int *param_1,uint param_2,int param_3)

{
  MAG_GetTemperatureData_Raw(param_1[1],param_2,param_3);
  return;
}


==================================================================

### FUNC 0018131c (8 bytes) name=GetTemperatureProbe

/* CMagDevice::GetTemperatureProbe(unsigned int, unsigned int, unsigned int) */

void CMagDevice::GetTemperatureProbe(uint param_1,uint param_2,uint param_3)

{
  MAG_GetTemperatureProbe(*(undefined4 *)((ulong)param_1 + 4),param_2,param_3);
  return;
}


==================================================================

### FUNC 00181324 (8 bytes) name=GetTemperatureProbe

/* CMagDevice::GetTemperatureProbe(unsigned int, unsigned int) */

void CMagDevice::GetTemperatureProbe(uint param_1,uint param_2)

{
  MAG_GetTemperatureProbe2(*(undefined4 *)((ulong)param_1 + 4),param_2);
  return;
}


==================================================================

### FUNC 0018132c (8 bytes) name=GetLineTemperatureInfo

/* CMagDevice::GetLineTemperatureInfo(int*, unsigned int, int*, unsigned int, unsigned int, unsigned
   int, unsigned int) */

void CMagDevice::GetLineTemperatureInfo
               (int *param_1,uint param_2,int *param_3,uint param_4,uint param_5,uint param_6,
               uint param_7)

{
  MAG_GetLineTemperatureInfo(param_1[1],param_2,param_3,param_4,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 00181334 (8 bytes) name=GetRectTemperatureInfo

/* CMagDevice::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*)
    */

void CMagDevice::GetRectTemperatureInfo
               (uint param_1,uint param_2,uint param_3,uint param_4,int *param_5)

{
  MAG_GetRectTemperatureInfo(*(undefined4 *)((ulong)param_1 + 4),param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0018133c (8 bytes) name=GetEllipseTemperatureInfo

/* CMagDevice::GetEllipseTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int,
   int*) */

void CMagDevice::GetEllipseTemperatureInfo
               (uint param_1,uint param_2,uint param_3,uint param_4,int *param_5)

{
  MAG_GetEllipseTemperatureInfo(*(undefined4 *)((ulong)param_1 + 4),param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00181344 (8 bytes) name=GetRgnTemperatureInfo

/* CMagDevice::GetRgnTemperatureInfo(unsigned int const*, unsigned int, int*) */

void CMagDevice::GetRgnTemperatureInfo(uint *param_1,uint param_2,int *param_3)

{
  MAG_GetRgnTemperatureInfo(param_1[1],param_2);
  return;
}


==================================================================

### FUNC 0018134c (8 bytes) name=SaveDDT2Buffer

/* CMagDevice::SaveDDT2Buffer(void*, unsigned int) */

void CMagDevice::SaveDDT2Buffer(void *param_1,uint param_2)

{
  MAG_SaveDDT2Buffer(*(undefined4 *)((long)param_1 + 4),param_2);
  return;
}


==================================================================

### FUNC 00181354 (136 bytes) name=LoadBufferedDDT

/* CMagDevice::LoadBufferedDDT(OutputPara*, void const*, unsigned int, void (*)(unsigned int,
   unsigned int, unsigned int, void*), void*) */

undefined8 __thiscall
CMagDevice::LoadBufferedDDT
          (CMagDevice *this,OutputPara *param_1,void *param_2,uint param_3,
          _func_void_uint_uint_uint_void_ptr *param_4,void *param_5)

{
  int iVar1;
  undefined8 uVar2;
  
  iVar1 = MAG_IsProcessingImage(*(undefined4 *)(this + 4));
  if (iVar1 == 0) {
    uVar2 = MAG_LoadBufferedDDT(*(uint *)(this + 4),param_1,param_2,param_3,param_4,param_5);
    if ((int)uVar2 != 0) {
      MAG_GetCamInfo(*(undefined4 *)(this + 4),this + 8,0x50);
      uVar2 = 1;
    }
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 001813dc (8 bytes) name=SaveBMP

/* CMagDevice::SaveBMP(unsigned int, char const*) */

void CMagDevice::SaveBMP(uint param_1,char *param_2)

{
  MAG_SaveBMP(*(undefined4 *)((ulong)param_1 + 4));
  return;
}


==================================================================

### FUNC 001813e4 (8 bytes) name=SaveDDT

/* CMagDevice::SaveDDT(char const*) */

void CMagDevice::SaveDDT(char *param_1)

{
  MAG_SaveDDT(*(undefined4 *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 001813ec (128 bytes) name=LoadDDT

/* CMagDevice::LoadDDT(OutputPara*, char const*, void (*)(unsigned int, unsigned int, unsigned int,
   void*), void*) */

undefined8 __thiscall
CMagDevice::LoadDDT(CMagDevice *this,OutputPara *param_1,char *param_2,
                   _func_void_uint_uint_uint_void_ptr *param_3,void *param_4)

{
  int iVar1;
  undefined8 uVar2;
  
  iVar1 = MAG_IsProcessingImage(*(undefined4 *)(this + 4));
  if (iVar1 == 0) {
    uVar2 = MAG_LoadDDT(*(undefined4 *)(this + 4),param_1,param_2,param_3,param_4);
    if ((int)uVar2 != 0) {
      MAG_GetCamInfo(*(undefined4 *)(this + 4),this + 8,0x50);
      uVar2 = 1;
    }
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### FUNC 0018146c (64 bytes) name=SetImageTransform

/* CMagDevice::SetImageTransform(int, int) */

int CMagDevice::SetImageTransform(int param_1,int param_2)

{
  int iVar1;
  ulong uVar2;
  
  uVar2 = (ulong)(uint)param_1;
  iVar1 = MAG_SetImageTransform(*(undefined4 *)(uVar2 + 4),param_2);
  if (iVar1 != 0) {
    MAG_GetCamInfo(*(undefined4 *)(uVar2 + 4),uVar2 + 8,0x50);
  }
  return iVar1;
}


==================================================================

### FUNC 001814ac (8 bytes) name=Lock

/* CMagDevice::Lock() */

void __thiscall CMagDevice::Lock(CMagDevice *this)

{
  MAG_LockFrame(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001814b4 (8 bytes) name=Unlock

/* CMagDevice::Unlock() */

void __thiscall CMagDevice::Unlock(CMagDevice *this)

{
  MAG_UnLockFrame(*(undefined4 *)(this + 4));
  return;
}


==================================================================

### FUNC 001814bc (8 bytes) name=GetCurrentCameraInnerTemperature

/* CMagDevice::GetCurrentCameraInnerTemperature(unsigned int) */

void __thiscall CMagDevice::GetCurrentCameraInnerTemperature(CMagDevice *this,uint param_1)

{
  MAG_GetCurrentCameraInnerTemperature(param_1);
  return;
}


==================================================================

### FUNC 001814c4 (8 bytes) name=EstimateUnderArmTempFromForeheadRect

/* CMagDevice::EstimateUnderArmTempFromForeheadRect(unsigned int, unsigned int, unsigned int,
   unsigned int) */

void CMagDevice::EstimateUnderArmTempFromForeheadRect
               (uint param_1,uint param_2,uint param_3,uint param_4)

{
  MAG_EstimateUnderArmTempFromForeheadRect
            (*(undefined4 *)((ulong)param_1 + 4),param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 001814cc (36 bytes) name=ConvertPos2XY

/* CMagDevice::ConvertPos2XY(unsigned int, unsigned int*, unsigned int*) */

void __thiscall CMagDevice::ConvertPos2XY(CMagDevice *this,uint param_1,uint *param_2,uint *param_3)

{
  uint uVar1;
  uint uVar2;
  
  if (((param_3 != (uint *)0x0) && (param_2 != (uint *)0x0)) &&
     (uVar1 = *(uint *)(this + 8), uVar1 != 0)) {
    uVar2 = 0;
    if (uVar1 != 0) {
      uVar2 = param_1 / uVar1;
    }
    *param_3 = uVar2;
    *param_2 = param_1 - uVar2 * uVar1;
  }
  return;
}


==================================================================

### FUNC 001814f0 (12 bytes) name=ConvertXY2Pos

/* CMagDevice::ConvertXY2Pos(unsigned int, unsigned int) */

int __thiscall CMagDevice::ConvertXY2Pos(CMagDevice *this,uint param_1,uint param_2)

{
  return param_1 + *(int *)(this + 8) * param_2;
}


==================================================================

### FUNC 001814fc (252 bytes) name=newOutputObjects

/* newOutputObjects(_JNIEnv*, int, int, int, int, int, _jobject*) */

undefined8
newOutputObjects(_JNIEnv *param_1,int param_2,int param_3,int param_4,int param_5,int param_6,
                _jobject *param_7)

{
  int iVar1;
  undefined8 uVar2;
  _jobject *p_Var3;
  _jobject **pp_Var4;
  
  pp_Var4 = (_jobject **)(&DAT_0052e948 + (long)param_6 * 0x28);
  uVar2 = newBitmap(param_1,pp_Var4,param_2,param_3);
  if ((int)uVar2 == 0) {
    return uVar2;
  }
  iVar1 = newBitmap(param_1,(_jobject **)(&DAT_0052e950 + (long)param_6 * 0x28),param_4,param_5);
  if (iVar1 == 0) {
LAB_001815d8:
    delGlobalObject(param_1,pp_Var4);
    uVar2 = 0;
  }
  else {
    delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + (long)param_6 * 0x28));
    if (param_7 != (_jobject *)0x0) {
      p_Var3 = (_jobject *)newGlobalObject(param_1,param_7);
      *(_jobject **)(&DAT_0052e940 + (long)param_6 * 0x28) = p_Var3;
      if (p_Var3 == (_jobject *)0x0) {
        delGlobalObject(param_1,pp_Var4);
        pp_Var4 = (_jobject **)(&DAT_0052e950 + (long)param_6 * 0x28);
        goto LAB_001815d8;
      }
    }
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### FUNC 001815f8 (72 bytes) name=delOutputObjects

/* delOutputObjects(_JNIEnv*, int) */

void delOutputObjects(_JNIEnv *param_1,int param_2)

{
  long lVar1;
  
  lVar1 = (long)param_2 * 0x28;
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar1));
  return;
}


==================================================================

### FUNC 00181640 (220 bytes) name=callNewFrameMethod

/* callNewFrameMethod(_JNIEnv*, int, unsigned int, unsigned int) */

undefined8 callNewFrameMethod(_JNIEnv *param_1,int param_2,uint param_3,uint param_4)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *(long *)(&DAT_0052e940 + (long)param_2 * 0x28);
  if (lVar2 != 0) {
    lVar2 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,lVar2,(ulong)param_3,(ulong)param_4);
    if (lVar2 == 0) {
      return 0;
    }
    lVar1 = (**(code **)(*(long *)param_1 + 0x108))(param_1,lVar2,"newFrame","(II)V");
    if (lVar1 != 0) {
      _JNIEnv::CallVoidMethod
                ((_jobject *)param_1,*(_jmethodID **)(&DAT_0052e940 + (long)param_2 * 0x28),lVar1,
                 (ulong)param_3,(ulong)param_4);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar2);
      return 1;
    }
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar2);
  }
  return 0;
}


==================================================================

### FUNC 0018171c (160 bytes) name=CallVoidMethod

/* _JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...) */

void _JNIEnv::CallVoidMethod(_jobject *param_1,_jmethodID *param_2,...)

{
  long lVar1;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar2;
  undefined1 auStack_a0 [8];
  undefined8 local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined1 *local_70;
  undefined1 **ppuStack_68;
  undefined1 *puStack_60;
  undefined8 uStack_58;
  
  lVar1 = tpidr_el0;
  lVar2 = *(long *)(lVar1 + 0x28);
  puStack_60 = auStack_a0;
  ppuStack_68 = &local_70;
  uStack_58 = 0xffffff80ffffffd8;
  local_98 = in_x3;
  local_90 = in_x4;
  uStack_88 = in_x5;
  local_80 = in_x6;
  uStack_78 = in_x7;
  local_70 = (undefined1 *)register0x00000008;
  (**(code **)(*(long *)param_1 + 0x1f0))();
  if (*(long *)(lVar1 + 0x28) == lVar2) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001817bc (360 bytes) name=NewFrameCallBack

/* NewFrameCallBack(unsigned int, unsigned int, unsigned int, void*) */

void NewFrameCallBack(uint param_1,uint param_2,uint param_3,void *param_4)

{
  long lVar1;
  _jobject *p_Var2;
  bool bVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  _jobject *local_60;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  iVar4 = (**(code **)(*DAT_0052fd60 + 0x30))(DAT_0052fd60,&local_60,0x10004);
  if (iVar4 == -2) {
    iVar5 = (**(code **)(*DAT_0052fd60 + 0x20))(DAT_0052fd60,&local_60,0);
    bVar3 = iVar5 == 0;
    p_Var2 = local_60;
  }
  else {
    bVar3 = false;
    p_Var2 = local_60;
  }
  if ((iVar4 == 0) || (bVar3)) {
    if ((*(long *)(&DAT_0052e940 + (long)(int)param_1 * 0x28) != 0) &&
       (lVar6 = (**(code **)(*(long *)p_Var2 + 0xf8))(p_Var2), lVar6 != 0)) {
      lVar7 = (**(code **)(*(long *)p_Var2 + 0x108))(p_Var2,lVar6,"newFrame","(II)V");
      if (lVar7 != 0) {
        _JNIEnv::CallVoidMethod
                  (p_Var2,*(_jmethodID **)(&DAT_0052e940 + (long)(int)param_1 * 0x28),lVar7,
                   (ulong)param_2,(ulong)param_3);
      }
      (**(code **)(*(long *)p_Var2 + 0xb8))(p_Var2,lVar6);
    }
    if (bVar3) {
      (**(code **)(*DAT_0052fd60 + 0x28))();
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00181924 (360 bytes) name=NewFrameForDDTCallBack

/* NewFrameForDDTCallBack(unsigned int, unsigned int, unsigned int, void*) */

void NewFrameForDDTCallBack(uint param_1,uint param_2,uint param_3,void *param_4)

{
  long lVar1;
  _jobject *p_Var2;
  bool bVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  _jobject *local_60;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  iVar4 = (**(code **)(*DAT_0052fd60 + 0x30))(DAT_0052fd60,&local_60,0x10004);
  if (iVar4 == -2) {
    iVar5 = (**(code **)(*DAT_0052fd60 + 0x20))(DAT_0052fd60,&local_60,0);
    bVar3 = iVar5 == 0;
    p_Var2 = local_60;
  }
  else {
    bVar3 = false;
    p_Var2 = local_60;
  }
  if ((iVar4 == 0) || (bVar3)) {
    if ((*(long *)(&DAT_0052e940 + (long)(int)param_1 * 0x28) != 0) &&
       (lVar6 = (**(code **)(*(long *)p_Var2 + 0xf8))(p_Var2), lVar6 != 0)) {
      lVar7 = (**(code **)(*(long *)p_Var2 + 0x108))(p_Var2,lVar6,"newFrame","(II)V");
      if (lVar7 != 0) {
        _JNIEnv::CallVoidMethod
                  (p_Var2,*(_jmethodID **)(&DAT_0052e940 + (long)(int)param_1 * 0x28),lVar7,
                   (ulong)param_2,(ulong)param_3);
      }
      (**(code **)(*(long *)p_Var2 + 0xb8))(p_Var2,lVar6);
    }
    if (bVar3) {
      (**(code **)(*DAT_0052fd60 + 0x28))();
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00181a8c (220 bytes) name=callPrepareTransferMethod

/* callPrepareTransferMethod(_JNIEnv*, int, int, int) */

undefined8 callPrepareTransferMethod(_JNIEnv *param_1,int param_2,int param_3,int param_4)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *(long *)(&DAT_0052e958 + (long)param_2 * 0x28);
  if (lVar2 != 0) {
    lVar2 = (**(code **)(*(long *)param_1 + 0xf8))
                      (param_1,lVar2,(ulong)(uint)param_3,(ulong)(uint)param_4);
    if (lVar2 == 0) {
      return 0;
    }
    lVar1 = (**(code **)(*(long *)param_1 + 0x108))(param_1,lVar2,"prepareInBackground","(II)V");
    if (lVar1 != 0) {
      _JNIEnv::CallVoidMethod
                ((_jobject *)param_1,*(_jmethodID **)(&DAT_0052e958 + (long)param_2 * 0x28),lVar1,
                 (ulong)(uint)param_3,(ulong)(uint)param_4);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar2);
      return 1;
    }
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar2);
  }
  return 0;
}


==================================================================

### FUNC 00181b68 (400 bytes) name=PrepareCallback

/* PrepareCallback(unsigned int, int, int, void*) */

void PrepareCallback(uint param_1,int param_2,int param_3,void *param_4)

{
  long lVar1;
  _jobject *p_Var2;
  bool bVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  _jobject *local_70;
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  iVar4 = (**(code **)(*DAT_0052fd60 + 0x30))(DAT_0052fd60,&local_70,0x10004);
  if (iVar4 == -2) {
    iVar5 = (**(code **)(*DAT_0052fd60 + 0x20))(DAT_0052fd60,&local_70,0);
    bVar3 = iVar5 == 0;
    p_Var2 = local_70;
  }
  else {
    bVar3 = false;
    p_Var2 = local_70;
  }
  if ((iVar4 == 0) || (bVar3)) {
    local_70 = p_Var2;
    if ((*(long *)(&DAT_0052e958 + (long)(int)param_1 * 0x28) != 0) &&
       (lVar6 = (**(code **)(*(long *)p_Var2 + 0xf8))(p_Var2), lVar6 != 0)) {
      lVar7 = (**(code **)(*(long *)p_Var2 + 0x108))(p_Var2,lVar6,"prepareInBackground","(II)V");
      if (lVar7 != 0) {
        _JNIEnv::CallVoidMethod
                  (p_Var2,*(_jmethodID **)(&DAT_0052e958 + (long)(int)param_1 * 0x28),lVar7,
                   (ulong)(uint)param_2,(ulong)(uint)param_3);
      }
      (**(code **)(*(long *)p_Var2 + 0xb8))(p_Var2,lVar6);
    }
    if ((param_2 != 0) || (param_3 == 100)) {
      delGlobalObject((_JNIEnv *)local_70,(_jobject **)(&DAT_0052e958 + (ulong)param_1 * 0x28));
    }
    if (bVar3) {
      (**(code **)(*DAT_0052fd60 + 0x28))();
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00181cf8 (92 bytes) name=JNI_OnLoad

undefined8 JNI_OnLoad(undefined8 param_1)

{
  DAT_0052fd60 = param_1;
  memset(&DAT_0052e938,0,0x1400);
  __android_log_print(3,"magnity",
                      "os: android, version: 1.9.6, product: core sdk, author: jessenxu, date: %s, %s"
                      ,"May  4 2020","19:19:10");
  return 0x10004;
}


==================================================================

### FUNC 00181d54 (296 bytes) name=JNI_OnUnload

void JNI_OnUnload(long *param_1)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  _jobject **pp_Var5;
  CMagDevice *this;
  long lVar6;
  _JNIEnv *local_50;
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  iVar3 = (**(code **)(*param_1 + 0x30))(param_1,&local_50,0x10004);
  if (iVar3 == -2) {
    iVar4 = (**(code **)(*param_1 + 0x20))(param_1,&local_50,0);
    bVar2 = iVar4 == 0;
  }
  else {
    bVar2 = false;
  }
  if ((iVar3 == 0) || (bVar2)) {
    pp_Var5 = (_jobject **)&DAT_0052e980;
    lVar6 = 0x80;
    do {
      this = (CMagDevice *)pp_Var5[-4];
      if (this != (CMagDevice *)0x0) {
        CMagDevice::~CMagDevice(this);
        operator_delete(this);
        pp_Var5[-4] = (_jobject *)0x0;
      }
      delGlobalObject(local_50,pp_Var5 + -3);
      delGlobalObject(local_50,pp_Var5 + -2);
      delGlobalObject(local_50,pp_Var5 + -1);
      delGlobalObject(local_50,pp_Var5);
      lVar6 = lVar6 + -1;
      pp_Var5 = pp_Var5 + 5;
    } while (lVar6 != 0);
    if (bVar2) {
      (**(code **)(*param_1 + 0x28))(param_1);
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00181e7c (96 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_Init

undefined8
Java_cn_com_magnity_coresdk_MagDevice_Init(long *param_1,undefined8 param_2,undefined8 param_3)

{
  undefined8 uVar1;
  
  uVar1 = (**(code **)(*param_1 + 0x548))(param_1,param_3,0);
  MAG_SetStorageDir();
  (**(code **)(*param_1 + 0x550))(param_1,param_3,uVar1);
  return 1;
}


==================================================================

### FUNC 00181edc (160 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_LinkCamera

int Java_cn_com_magnity_coresdk_MagDevice_LinkCamera(void)

{
  int iVar1;
  CMagDevice *this;
  CMagDevice *this_00;
  
  this = operator_new(0x58);
  CMagDevice::CMagDevice(this);
  if ((*(int *)this == 0) || (iVar1 = CMagDevice::LinkCamera((uint)this), iVar1 == 0)) {
    CMagDevice::~CMagDevice(this);
    operator_delete(this);
    iVar1 = -1;
  }
  else {
    iVar1 = CMagDevice::GetChannelIndex(this);
    this_00 = *(CMagDevice **)(&DAT_0052e938 + (long)iVar1 * 0x28);
    if (this_00 != (CMagDevice *)0x0) {
      CMagDevice::~CMagDevice(this_00);
      operator_delete(this_00);
    }
    *(CMagDevice **)(&DAT_0052e938 + (long)iVar1 * 0x28) = this;
  }
  return iVar1;
}


==================================================================

### FUNC 00181f90 (132 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_DislinkCamera

void Java_cn_com_magnity_coresdk_MagDevice_DislinkCamera
               (_JNIEnv *param_1,undefined8 param_2,int param_3)

{
  long lVar1;
  CMagDevice *this;
  
  this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
  if (this != (CMagDevice *)0x0) {
    CMagDevice::~CMagDevice(this);
    operator_delete(this);
    *(undefined8 *)(&DAT_0052e938 + (long)param_3 * 0x28) = 0;
  }
  lVar1 = (long)param_3 * 0x28;
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar1));
  return;
}


==================================================================

### FUNC 00182014 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_IsLinked

void Java_cn_com_magnity_coresdk_MagDevice_IsLinked
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::IsLinked(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
  }
  return;
}


==================================================================

### FUNC 00182040 (176 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_PrepareProcessImage

int Java_cn_com_magnity_coresdk_MagDevice_PrepareProcessImage
              (_JNIEnv *param_1,undefined8 param_2,int param_3,_jobject *param_4)

{
  _jobject **pp_Var1;
  int iVar2;
  _jobject *p_Var3;
  
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) == 0) {
LAB_001820d8:
    iVar2 = 0;
  }
  else {
    pp_Var1 = (_jobject **)(&DAT_0052e958 + (long)param_3 * 0x28);
    delGlobalObject(param_1,pp_Var1);
    if (param_4 != (_jobject *)0x0) {
      p_Var3 = (_jobject *)newGlobalObject(param_1,param_4);
      *pp_Var1 = p_Var3;
      if (p_Var3 == (_jobject *)0x0) goto LAB_001820d8;
    }
    iVar2 = CMagDevice::PrepareProcessImage
                      (*(_func_void_uint_int_int_void_ptr **)(&DAT_0052e938 + (long)param_3 * 0x28),
                       PTR_PrepareCallback_00501af8);
    if (iVar2 + 1U < 2) {
      delGlobalObject(param_1,pp_Var1);
    }
  }
  return iVar2;
}


==================================================================

### FUNC 001820f0 (288 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_StartProcessImage

int Java_cn_com_magnity_coresdk_MagDevice_StartProcessImage
              (_JNIEnv *param_1,undefined8 param_2,int param_3,_jobject *param_4,uint param_5,
              uint param_6)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  undefined8 *puVar5;
  
  puVar5 = (undefined8 *)(&DAT_0052e938 + (long)param_3 * 0x28);
  if ((((CMagDevice *)*puVar5 != (CMagDevice *)0x0) &&
      (iVar3 = CMagDevice::IsLinked((CMagDevice *)*puVar5), iVar3 != 0)) &&
     (iVar3 = CMagDevice::IsProcessingImage((CMagDevice *)*puVar5),
     iVar3 == 0 && ((param_6 | param_5) & 0x80000000) == 0)) {
    lVar4 = CMagDevice::GetCamInfo((CMagDevice *)*puVar5);
    uVar1 = 4;
    if ((param_5 & 0xfffffffc) != 0) {
      uVar1 = param_5 & 0xfffffffc;
    }
    uVar2 = 4;
    if (param_6 != 0) {
      uVar2 = param_6;
    }
    iVar3 = newOutputObjects(param_1,*(int *)(lVar4 + 0x40),*(int *)(lVar4 + 0x44),uVar1,uVar2,
                             param_3,param_4);
    if (iVar3 != 0) {
      iVar3 = CMagDevice::StartProcessImage
                        ((_func_void_uint_uint_uint_void_ptr *)*puVar5,
                         (int)PTR_NewFrameCallBack_00501928,uVar1,(void *)(ulong)uVar2);
      if (iVar3 != 0) {
        return iVar3;
      }
      lVar4 = (long)param_3 * 0x28;
      delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar4));
      delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar4));
      delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar4));
      return 0;
    }
  }
  return 0;
}


==================================================================

### FUNC 00182210 (108 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_StopProcessImage

void Java_cn_com_magnity_coresdk_MagDevice_StopProcessImage
               (_JNIEnv *param_1,undefined8 param_2,int param_3)

{
  long lVar1;
  
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::StopProcessImage(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
  }
  lVar1 = (long)param_3 * 0x28;
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar1));
  return;
}


==================================================================

### FUNC 0018227c (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_IsProcessingImage

void Java_cn_com_magnity_coresdk_MagDevice_IsProcessingImage
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::IsProcessingImage(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
  }
  return;
}


==================================================================

### FUNC 001822a8 (32 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_Pause

void Java_cn_com_magnity_coresdk_MagDevice_Pause(undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::Pause(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    return;
  }
  return;
}


==================================================================

### FUNC 001822c8 (32 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_Resume

void Java_cn_com_magnity_coresdk_MagDevice_Resume(undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::Resume(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    return;
  }
  return;
}


==================================================================

### FUNC 001822e8 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_IsPause

void Java_cn_com_magnity_coresdk_MagDevice_IsPause
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::IsPause(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
  }
  return;
}


==================================================================

### FUNC 00182314 (740 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetCameraInfo

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetCameraInfo
          (_JNIEnv *param_1,undefined8 param_2,int param_3,undefined8 param_4)

{
  undefined4 *puVar1;
  long lVar2;
  undefined8 uVar3;
  long lVar4;
  
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) == (CMagDevice *)0x0) {
    uVar3 = 0;
  }
  else {
    puVar1 = (undefined4 *)
             CMagDevice::GetCamInfo(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    uVar3 = 0;
    if ((puVar1 != (undefined4 *)0x0) &&
       (lVar2 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_4), uVar3 = 0, lVar2 != 0)) {
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"fpaWidth","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,*puVar1);
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"fpaHeight","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,puVar1[1]);
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))
                        (param_1,lVar2,&DAT_0043a0f2,"Ljava/lang/String;");
      lVar4 = toJString(param_1,(char *)(puVar1 + 4));
      if (lVar4 != 0) {
        (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar3,lVar4);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
      }
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))
                        (param_1,lVar2,&DAT_0043a10a,"Ljava/lang/String;");
      lVar4 = toJString(param_1,(char *)(puVar1 + 0xc));
      if (lVar4 != 0) {
        (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar3,lVar4);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
      }
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"maxFps","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,puVar1[0xe]);
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"curFps","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,puVar1[0xf]);
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"bmpWidth","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,puVar1[0x10]);
      uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,lVar2,"bmpHeight","I");
      (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar3,puVar1[0x11]);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar2);
      uVar3 = 1;
    }
  }
  return uVar3;
}


==================================================================

### FUNC 001825f8 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_TriggerFFC

void Java_cn_com_magnity_coresdk_MagDevice_TriggerFFC
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::TriggerFFC(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
  }
  return;
}


==================================================================

### FUNC 00182624 (36 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetColorPalette

void Java_cn_com_magnity_coresdk_MagDevice_SetColorPalette
               (undefined8 param_1,undefined8 param_2,int param_3,undefined4 param_4)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetColorPalette(*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4);
    return;
  }
  return;
}


==================================================================

### FUNC 00182648 (60 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetSubsectionEnlargePara

void Java_cn_com_magnity_coresdk_MagDevice_SetSubsectionEnlargePara
               (undefined8 param_1,undefined8 param_2,int param_3,int param_4,uchar param_5,
               uchar param_6)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetSubsectionEnlargePara
              ((int)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5,param_6);
  }
  return;
}


==================================================================

### FUNC 00182684 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetAutoEnlargePara

void Java_cn_com_magnity_coresdk_MagDevice_SetAutoEnlargePara
               (undefined8 param_1,undefined8 param_2,int param_3,int param_4,int param_5)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetAutoEnlargePara
              ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5);
    return;
  }
  return;
}


==================================================================

### FUNC 001826b0 (40 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetIsothermalPara

void Java_cn_com_magnity_coresdk_MagDevice_SetIsothermalPara
               (undefined8 param_1,undefined8 param_2,int param_3,int param_4)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetIsothermalPara((int)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4);
    return;
  }
  return;
}


==================================================================

### FUNC 001826d8 (52 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetImageTransform

void Java_cn_com_magnity_coresdk_MagDevice_SetImageTransform
               (undefined8 param_1,undefined8 param_2,int param_3,int param_4)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetImageTransform((int)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4);
  }
  return;
}


==================================================================

### FUNC 0018270c (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetEXLevel

void Java_cn_com_magnity_coresdk_MagDevice_SetEXLevel
               (undefined8 param_1,undefined8 param_2,int param_3,undefined4 param_4,
               undefined4 param_5,undefined4 param_6)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetEXLevel(*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5,param_6);
    return;
  }
  return;
}


==================================================================

### FUNC 00182738 (32 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetEXLevel

void Java_cn_com_magnity_coresdk_MagDevice_GetEXLevel
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::GetEXLevel(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    return;
  }
  return;
}


==================================================================

### FUNC 00182758 (40 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetDetailEnhancement

void Java_cn_com_magnity_coresdk_MagDevice_SetDetailEnhancement
               (undefined8 param_1,undefined8 param_2,int param_3,int param_4)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::SetDetailEnhancement((int)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4);
    return;
  }
  return;
}


==================================================================

### FUNC 00182780 (852 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetFixPara

void Java_cn_com_magnity_coresdk_MagDevice_GetFixPara
               (long *param_1,undefined8 param_2,int param_3,undefined8 param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  long lVar4;
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  
  lVar1 = tpidr_el0;
  lVar4 = *(long *)(lVar1 + 0x28);
  if (*(struct_FixPara **)(&DAT_0052e938 + (long)param_3 * 0x28) == (struct_FixPara *)0x0) {
    uVar3 = 0;
  }
  else {
    CMagDevice::GetFixPara(*(struct_FixPara **)(&DAT_0052e938 + (long)param_3 * 0x28));
    lVar2 = (**(code **)(*param_1 + 0xf8))(param_1,param_4);
    uVar3 = 0;
    if (lVar2 != 0) {
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fDistance","F");
      (**(code **)(*param_1 + 0x378))(local_78,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fEmissivity","F");
      (**(code **)(*param_1 + 0x378))(local_74,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fTemp","F");
      (**(code **)(*param_1 + 0x378))(local_70,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,&DAT_0043a14c,"F");
      (**(code **)(*param_1 + 0x378))(local_6c,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fVisDistance","F");
      (**(code **)(*param_1 + 0x378))(local_68,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fRain","F");
      (**(code **)(*param_1 + 0x378))(local_64,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fSnow","F");
      (**(code **)(*param_1 + 0x378))(local_60,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fExtrapara1","F");
      (**(code **)(*param_1 + 0x378))(local_5c,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fExtrapara2","F");
      (**(code **)(*param_1 + 0x378))(local_58,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fTaoAtm","F");
      (**(code **)(*param_1 + 0x378))(local_54,param_1,param_4,uVar3);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"fTaoFilter","F");
      (**(code **)(*param_1 + 0x378))(local_50,param_1,param_4,uVar3);
      (**(code **)(*param_1 + 0xb8))(param_1,lVar2);
      uVar3 = 1;
    }
  }
  if (*(long *)(lVar1 + 0x28) == lVar4) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 00182ad4 (392 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetFixPara

void Java_cn_com_magnity_coresdk_MagDevice_SetFixPara
               (_JNIEnv *param_1,undefined8 param_2,int param_3,_jobject *param_4)

{
  long lVar1;
  undefined4 uVar2;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) == 0) {
    uVar2 = 0;
  }
  else {
    local_68 = GetJfloat(param_1,"fDistance",param_4);
    local_64 = GetJfloat(param_1,"fEmissivity",param_4);
    local_60 = GetJfloat(param_1,"fTemp",param_4);
    local_5c = GetJfloat(param_1,"fRH",param_4);
    local_58 = GetJfloat(param_1,"fVisDistance",param_4);
    local_54 = GetJfloat(param_1,"fRain",param_4);
    local_50 = GetJfloat(param_1,"fSnow",param_4);
    local_4c = GetJfloat(param_1,"fExtrapara1",param_4);
    local_48 = GetJfloat(param_1,"fExtrapara2",param_4);
    local_44 = GetJfloat(param_1,"fTaoAtm",param_4);
    local_40 = GetJfloat(param_1,"fTaoFilter",param_4);
    uVar2 = CMagDevice::SetFixPara
                      (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28),
                       (struct_FixPara *)&local_68);
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00182c5c (424 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputRGBAData

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputRGBAData
               (long *param_1,undefined8 param_2,int param_3,long param_4)

{
  int iVar1;
  long lVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  CMagDevice *this;
  uint *puVar6;
  tagBITMAPINFO *ptVar7;
  int iVar8;
  uint *puVar9;
  int iVar10;
  undefined1 local_5c [4];
  long local_58;
  tagBITMAPINFO *local_50;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  uVar4 = 0;
  if (param_4 != 0) {
    this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
    if ((this != (CMagDevice *)0x0) && (lVar5 = CMagDevice::GetCamInfo(this), uVar4 = 0, lVar5 != 0)
       ) {
      iVar1 = *(int *)(lVar5 + 0x40);
      iVar10 = *(int *)(lVar5 + 0x44);
      iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
      if (iVar3 < iVar10 * iVar1) {
        uVar4 = 0;
      }
      else {
        local_58 = 0;
        local_50 = (tagBITMAPINFO *)0x0;
        uVar4 = CMagDevice::GetOutputBMPdata
                          (*(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28),&local_50);
        if ((int)uVar4 != 0) {
          local_5c[0] = 0;
          lVar5 = (**(code **)(*param_1 + 0x5d8))(param_1,param_4,local_5c);
          uVar4 = 0;
          if (lVar5 != 0) {
            if (iVar10 != 0) {
              iVar3 = iVar1;
              if (iVar1 < 0) {
                iVar3 = iVar1 + 1;
              }
              puVar6 = (uint *)(lVar5 + (long)((iVar10 + -1) * iVar1) * 4);
              do {
                if (2 < iVar1 + 1U) {
                  ptVar7 = local_50 + 1;
                  puVar9 = puVar6;
                  iVar8 = iVar3 >> 1;
                  do {
                    local_50 = ptVar7 + 1;
                    iVar8 = iVar8 + -1;
                    *puVar9 = *(uint *)(local_58 + 0x28 + (ulong)(byte)ptVar7[-1] * 4) | 0xff000000;
                    puVar9[1] = *(uint *)(local_58 + 0x28 + (ulong)(byte)*ptVar7 * 4) | 0xff000000;
                    puVar9 = puVar9 + 2;
                    ptVar7 = ptVar7 + 2;
                  } while (iVar8 != 0);
                  puVar6 = puVar6 + (ulong)((iVar3 >> 1) - 1) * 2 + 2;
                }
                iVar10 = iVar10 + -1;
                puVar6 = puVar6 + (long)iVar1 * -2;
              } while (iVar10 != 0);
            }
            (**(code **)(*param_1 + 0x618))(param_1,param_4,lVar5,0);
            uVar4 = 1;
          }
        }
      }
    }
  }
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00182e04 (284 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputGrayData

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputGrayData
               (long *param_1,undefined8 param_2,int param_3,long param_4)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  undefined8 uVar5;
  long lVar6;
  void *__dest;
  CMagDevice *this;
  size_t __n;
  undefined1 local_5c [4];
  undefined8 local_58;
  tagBITMAPINFO *local_50;
  long local_48;
  
  lVar3 = tpidr_el0;
  local_48 = *(long *)(lVar3 + 0x28);
  uVar5 = 0;
  if (param_4 != 0) {
    this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
    if ((this != (CMagDevice *)0x0) && (lVar6 = CMagDevice::GetCamInfo(this), uVar5 = 0, lVar6 != 0)
       ) {
      iVar1 = *(int *)(lVar6 + 0x40);
      iVar2 = *(int *)(lVar6 + 0x44);
      iVar4 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
      __n = (long)iVar2 * (long)iVar1;
      if (iVar4 < (int)__n) {
        uVar5 = 0;
      }
      else {
        local_58 = 0;
        local_50 = (tagBITMAPINFO *)0x0;
        uVar5 = CMagDevice::GetOutputBMPdata
                          (*(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28),&local_50);
        if ((int)uVar5 != 0) {
          local_5c[0] = 0;
          __dest = (void *)(**(code **)(*param_1 + 0x5c0))(param_1,param_4,local_5c);
          uVar5 = 0;
          if (__dest != (void *)0x0) {
            memcpy(__dest,local_50,__n);
            (**(code **)(*param_1 + 0x600))(param_1,param_4,__dest,0);
            uVar5 = 1;
          }
        }
      }
    }
  }
  if (*(long *)(lVar3 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00182f20 (320 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputYUVData

bool Java_cn_com_magnity_coresdk_MagDevice_GetOutputYUVData
               (long *param_1,undefined8 param_2,int param_3,long param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  bool bVar5;
  int iVar6;
  int iVar7;
  CMagDevice *this;
  long lVar8;
  uint *puVar9;
  undefined1 local_6c [4];
  long local_68;
  tagBITMAPINFO *ptStack_60;
  long local_58;
  
  lVar4 = tpidr_el0;
  local_58 = *(long *)(lVar4 + 0x28);
  bVar5 = false;
  if (param_4 != 0) {
    this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
    if (this != (CMagDevice *)0x0) {
      lVar8 = CMagDevice::GetCamInfo(this);
      if (lVar8 != 0) {
        iVar1 = *(int *)(lVar8 + 0x40);
        iVar2 = *(int *)(lVar8 + 0x44);
        iVar6 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
        iVar3 = iVar2 * iVar1;
        iVar7 = iVar3 * 3;
        if (iVar7 < 0) {
          iVar7 = iVar7 + 1;
        }
        if (iVar7 >> 1 <= iVar6) {
          local_68 = 0;
          ptStack_60 = (tagBITMAPINFO *)0x0;
          iVar7 = CMagDevice::GetOutputBMPdata
                            (*(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28),&ptStack_60);
          if (iVar7 != 0) {
            local_6c[0] = 0;
            puVar9 = (uint *)(**(code **)(*param_1 + 0x5c0))(param_1,param_4,local_6c);
            if (puVar9 != (uint *)0x0) {
              iVar7 = GetYUV420((uchar *)ptStack_60,iVar1,iVar2,(tagRGBQUAD *)(local_68 + 0x28),
                                puVar9,(uint *)((long)puVar9 + (long)iVar3));
              bVar5 = iVar7 != 0;
              (**(code **)(*param_1 + 0x600))(param_1,param_4,puVar9,0);
              goto LAB_0018302c;
            }
          }
        }
      }
      bVar5 = false;
    }
  }
LAB_0018302c:
  if (*(long *)(lVar4 + 0x28) == local_58) {
    return bVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00183060 (424 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputColorBarRGBAData

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputColorBarRGBAData
               (long *param_1,undefined8 param_2,int param_3,long param_4)

{
  int iVar1;
  long lVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  CMagDevice *this;
  uint *puVar6;
  tagBITMAPINFO *ptVar7;
  int iVar8;
  uint *puVar9;
  int iVar10;
  undefined1 local_5c [4];
  long local_58;
  tagBITMAPINFO *local_50;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  uVar4 = 0;
  if (param_4 != 0) {
    this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
    if ((this != (CMagDevice *)0x0) && (lVar5 = CMagDevice::GetCamInfo(this), uVar4 = 0, lVar5 != 0)
       ) {
      iVar1 = *(int *)(lVar5 + 0x48);
      iVar10 = *(int *)(lVar5 + 0x4c);
      iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
      if (iVar3 < iVar10 * iVar1) {
        uVar4 = 0;
      }
      else {
        local_58 = 0;
        local_50 = (tagBITMAPINFO *)0x0;
        uVar4 = CMagDevice::GetOutputColorBardata
                          (*(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28),&local_50);
        if ((int)uVar4 != 0) {
          local_5c[0] = 0;
          lVar5 = (**(code **)(*param_1 + 0x5d8))(param_1,param_4,local_5c);
          uVar4 = 0;
          if (lVar5 != 0) {
            if (iVar10 != 0) {
              iVar3 = iVar1;
              if (iVar1 < 0) {
                iVar3 = iVar1 + 1;
              }
              puVar6 = (uint *)(lVar5 + (long)((iVar10 + -1) * iVar1) * 4);
              do {
                if (2 < iVar1 + 1U) {
                  ptVar7 = local_50 + 1;
                  puVar9 = puVar6;
                  iVar8 = iVar3 >> 1;
                  do {
                    local_50 = ptVar7 + 1;
                    iVar8 = iVar8 + -1;
                    *puVar9 = *(uint *)(local_58 + 0x28 + (ulong)(byte)ptVar7[-1] * 4) | 0xff000000;
                    puVar9[1] = *(uint *)(local_58 + 0x28 + (ulong)(byte)*ptVar7 * 4) | 0xff000000;
                    puVar9 = puVar9 + 2;
                    ptVar7 = ptVar7 + 2;
                  } while (iVar8 != 0);
                  puVar6 = puVar6 + (ulong)((iVar3 >> 1) - 1) * 2 + 2;
                }
                iVar10 = iVar10 + -1;
                puVar6 = puVar6 + (long)iVar1 * -2;
              } while (iVar10 != 0);
            }
            (**(code **)(*param_1 + 0x618))(param_1,param_4,lVar5,0);
            uVar4 = 1;
          }
        }
      }
    }
  }
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00183208 (360 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputImage

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputImage
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  uchar **ppuVar6;
  uint *puVar7;
  uint uVar8;
  tagBITMAPINFO *ptVar9;
  int iVar10;
  uint *puVar11;
  undefined8 *puVar12;
  long local_60;
  long local_58;
  tagBITMAPINFO *local_50;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  ppuVar6 = *(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28);
  if (ppuVar6 != (uchar **)0x0) {
    local_58 = 0;
    local_50 = (tagBITMAPINFO *)0x0;
    iVar3 = CMagDevice::GetOutputBMPdata(ppuVar6,&local_50);
    if (iVar3 != 0) {
      lVar4 = CMagDevice::GetCamInfo(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
      uVar5 = 0;
      if (lVar4 == 0) goto LAB_00183344;
      puVar12 = (undefined8 *)(&DAT_0052e948 + (long)param_3 * 0x28);
      iVar3 = AndroidBitmap_lockPixels(param_1,*puVar12,&local_60);
      if (-1 < iVar3) {
        iVar3 = *(int *)(lVar4 + 0x44);
        if (iVar3 != 0) {
          uVar8 = *(uint *)(lVar4 + 0x40);
          puVar7 = (uint *)(local_60 + (ulong)((iVar3 + -1) * uVar8) * 4);
          do {
            uVar1 = uVar8 >> 1;
            if (uVar1 != 0) {
              iVar10 = -uVar1;
              ptVar9 = local_50 + 1;
              puVar11 = puVar7;
              do {
                local_50 = ptVar9 + 1;
                iVar10 = iVar10 + 1;
                *puVar11 = *(uint *)(local_58 + 0x28 + (ulong)(byte)ptVar9[-1] * 4) | 0xff000000;
                puVar11[1] = *(uint *)(local_58 + 0x28 + (ulong)(byte)*ptVar9 * 4) | 0xff000000;
                puVar11 = puVar11 + 2;
                ptVar9 = ptVar9 + 2;
              } while (iVar10 != 0);
              uVar8 = *(uint *)(lVar4 + 0x40);
              puVar7 = puVar7 + (ulong)(uVar1 - 1) * 2 + 2;
            }
            iVar3 = iVar3 + -1;
            puVar7 = puVar7 + -(ulong)(uVar8 << 1);
          } while (iVar3 != 0);
        }
        AndroidBitmap_unlockPixels(param_1,*puVar12);
        uVar5 = *puVar12;
        goto LAB_00183344;
      }
    }
  }
  uVar5 = 0;
LAB_00183344:
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00183370 (1120 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputImage2

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputImage2
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  tagBITMAPINFO *ptVar5;
  undefined8 uVar6;
  long lVar7;
  uchar **ppuVar8;
  ulong uVar9;
  uint uVar10;
  tagBITMAPINFO *ptVar11;
  uint *puVar12;
  int iVar13;
  uint *puVar14;
  undefined8 *puVar15;
  long local_4a0 [2];
  tagBITMAPINFO *local_490;
  undefined8 local_488;
  undefined8 uStack_480;
  undefined8 local_478;
  undefined8 uStack_470;
  undefined8 local_468;
  undefined8 uStack_460;
  undefined8 local_458;
  undefined8 uStack_450;
  undefined8 local_448;
  undefined8 uStack_440;
  undefined8 local_438;
  undefined8 uStack_430;
  undefined8 local_428;
  undefined8 uStack_420;
  undefined8 local_418;
  undefined8 uStack_410;
  undefined8 local_408;
  undefined8 uStack_400;
  undefined8 uStack_3f8;
  undefined8 uStack_3f0;
  undefined8 local_3e8;
  undefined8 uStack_3e0;
  undefined8 uStack_3d8;
  undefined8 uStack_3d0;
  undefined8 local_3c8;
  undefined8 uStack_3c0;
  undefined8 uStack_3b8;
  undefined8 uStack_3b0;
  undefined8 local_3a8;
  undefined8 uStack_3a0;
  undefined8 uStack_398;
  undefined8 uStack_390;
  undefined8 local_388;
  undefined8 uStack_380;
  undefined8 uStack_378;
  undefined8 uStack_370;
  undefined8 local_368;
  undefined8 uStack_360;
  undefined8 uStack_358;
  undefined8 uStack_350;
  undefined8 local_348;
  undefined8 uStack_340;
  undefined8 uStack_338;
  undefined8 uStack_330;
  undefined8 local_328;
  undefined8 uStack_320;
  undefined8 uStack_318;
  undefined8 uStack_310;
  undefined8 local_308;
  undefined8 uStack_300;
  undefined8 uStack_2f8;
  undefined8 uStack_2f0;
  undefined8 local_2e8;
  undefined8 uStack_2e0;
  undefined8 uStack_2d8;
  undefined8 uStack_2d0;
  undefined8 local_2c8;
  undefined8 uStack_2c0;
  undefined8 uStack_2b8;
  undefined8 uStack_2b0;
  undefined8 local_2a8;
  undefined8 uStack_2a0;
  undefined8 uStack_298;
  undefined8 uStack_290;
  undefined8 local_288;
  undefined8 uStack_280;
  undefined8 uStack_278;
  undefined8 uStack_270;
  undefined8 local_268;
  undefined8 uStack_260;
  undefined8 uStack_258;
  undefined8 uStack_250;
  undefined8 local_248;
  undefined8 uStack_240;
  undefined8 uStack_238;
  undefined8 uStack_230;
  undefined8 local_228;
  undefined8 uStack_220;
  undefined8 uStack_218;
  undefined8 uStack_210;
  undefined8 local_208;
  undefined8 uStack_200;
  undefined8 uStack_1f8;
  undefined8 uStack_1f0;
  undefined8 local_1e8;
  undefined8 uStack_1e0;
  undefined8 uStack_1d8;
  undefined8 uStack_1d0;
  undefined8 local_1c8;
  undefined8 uStack_1c0;
  undefined8 uStack_1b8;
  undefined8 uStack_1b0;
  undefined8 local_1a8;
  undefined8 uStack_1a0;
  undefined8 uStack_198;
  undefined8 uStack_190;
  undefined8 local_188;
  undefined8 uStack_180;
  undefined8 uStack_178;
  undefined8 uStack_170;
  undefined8 local_168;
  undefined8 uStack_160;
  undefined8 uStack_158;
  undefined8 uStack_150;
  undefined8 local_148;
  undefined8 uStack_140;
  undefined8 uStack_138;
  undefined8 uStack_130;
  undefined8 local_128;
  undefined8 uStack_120;
  undefined8 uStack_118;
  undefined8 uStack_110;
  undefined8 local_108;
  undefined8 uStack_100;
  undefined8 uStack_f8;
  undefined8 uStack_f0;
  undefined8 local_e8;
  undefined8 uStack_e0;
  undefined8 uStack_d8;
  undefined8 uStack_d0;
  undefined8 local_c8;
  undefined8 uStack_c0;
  undefined8 uStack_b8;
  undefined8 uStack_b0;
  undefined8 local_a8;
  undefined8 uStack_a0;
  undefined8 uStack_98;
  undefined8 uStack_90;
  
  lVar2 = tpidr_el0;
  lVar7 = *(long *)(lVar2 + 0x28);
  ppuVar8 = *(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28);
  if (ppuVar8 != (uchar **)0x0) {
    local_4a0[1] = 0;
    local_490 = (tagBITMAPINFO *)0x0;
    iVar3 = CMagDevice::GetOutputBMPdata(ppuVar8,&local_490);
    if (iVar3 != 0) {
      lVar4 = CMagDevice::GetCamInfo(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
      uVar6 = 0;
      if (lVar4 == 0) goto LAB_00183794;
      uVar9 = (ulong)(*(int *)(lVar4 + 0x44) * *(int *)(lVar4 + 0x40));
      if ((long)uVar9 < 0) {
        uVar9 = 0xffffffffffffffff;
      }
      ptVar5 = operator_new__(uVar9);
      edgeImage((uchar *)local_490,*(int *)(lVar4 + 0x40),*(int *)(lVar4 + 0x44),(uchar *)ptVar5);
      puVar15 = (undefined8 *)(&DAT_0052e948 + (long)param_3 * 0x28);
      local_490 = ptVar5;
      iVar3 = AndroidBitmap_lockPixels(param_1,*puVar15,local_4a0);
      if (-1 < iVar3) {
        uVar10 = *(uint *)(lVar4 + 0x40);
        iVar3 = *(int *)(lVar4 + 0x44);
        uStack_450 = _DAT_00436388;
        local_458 = _DAT_00436380;
        uStack_460 = _UNK_00436398;
        local_468 = _DAT_00436390;
        uStack_470 = _UNK_004363a8;
        local_478 = _DAT_004363a0;
        uStack_480 = _UNK_004363b8;
        local_488 = _DAT_004363b0;
        uStack_420 = _UNK_004363d8;
        local_428 = _DAT_004363d0;
        uStack_410 = _UNK_004363c8;
        local_418 = _DAT_004363c0;
        uStack_430 = _DAT_004363e8;
        local_438 = _DAT_004363e0;
        uStack_440 = _UNK_004363f8;
        local_448 = _DAT_004363f0;
        uStack_3e0 = _UNK_00436418;
        local_3e8 = _DAT_00436410;
        uStack_3d0 = _UNK_00436408;
        uStack_3d8 = _DAT_00436400;
        uStack_400 = _UNK_00436438;
        local_408 = _DAT_00436430;
        uStack_3f0 = _UNK_00436428;
        uStack_3f8 = _DAT_00436420;
        uStack_3a0 = _UNK_00436458;
        local_3a8 = _DAT_00436450;
        uStack_390 = _UNK_00436448;
        uStack_398 = _DAT_00436440;
        uStack_3c0 = _UNK_00436478;
        local_3c8 = _DAT_00436470;
        uStack_3b0 = _UNK_00436468;
        uStack_3b8 = _DAT_00436460;
        uStack_360 = _UNK_00436498;
        local_368 = _DAT_00436490;
        uStack_350 = _UNK_00436488;
        uStack_358 = _DAT_00436480;
        uStack_380 = _UNK_004364b8;
        local_388 = _DAT_004364b0;
        uStack_370 = _UNK_004364a8;
        uStack_378 = _DAT_004364a0;
        uStack_2a0 = _UNK_00436558;
        local_2a8 = _DAT_00436550;
        uStack_290 = _UNK_00436548;
        uStack_298 = _DAT_00436540;
        uStack_2c0 = _UNK_00436578;
        local_2c8 = _DAT_00436570;
        uStack_2b0 = _UNK_00436568;
        uStack_2b8 = _DAT_00436560;
        uStack_260 = _UNK_00436598;
        local_268 = _DAT_00436590;
        uStack_250 = _UNK_00436588;
        uStack_258 = _DAT_00436580;
        uStack_280 = _UNK_004365b8;
        local_288 = _DAT_004365b0;
        uStack_270 = _UNK_004365a8;
        uStack_278 = _DAT_004365a0;
        uStack_220 = _UNK_004365d8;
        local_228 = _DAT_004365d0;
        uStack_210 = _UNK_004365c8;
        uStack_218 = _DAT_004365c0;
        uStack_240 = _UNK_004365f8;
        local_248 = _DAT_004365f0;
        uStack_230 = _UNK_004365e8;
        uStack_238 = _DAT_004365e0;
        uStack_160 = _UNK_00436698;
        local_168 = _DAT_00436690;
        uStack_150 = _UNK_00436688;
        uStack_158 = _DAT_00436680;
        uStack_180 = _UNK_004366b8;
        local_188 = _DAT_004366b0;
        uStack_170 = _DAT_004366a8;
        uStack_178 = _DAT_004366a0;
        uStack_e0 = _UNK_00436718;
        local_e8 = _DAT_00436710;
        uStack_d0 = _UNK_00436708;
        uStack_d8 = _DAT_00436700;
        uStack_100 = _UNK_00436738;
        local_108 = _DAT_00436730;
        uStack_f0 = _UNK_00436728;
        uStack_f8 = _DAT_00436720;
        uStack_320 = _UNK_004364d8;
        local_328 = _DAT_004364d0;
        uStack_310 = _DAT_004364c8;
        uStack_318 = _DAT_004364c0;
        uStack_340 = _UNK_004364f8;
        local_348 = _DAT_004364f0;
        uStack_330 = _UNK_004364e8;
        uStack_338 = _DAT_004364e0;
        uStack_2e0 = _UNK_00436518;
        local_2e8 = _DAT_00436510;
        uStack_2d0 = _UNK_00436508;
        uStack_2d8 = _DAT_00436500;
        uStack_300 = _UNK_00436538;
        local_308 = _DAT_00436530;
        uStack_2f8 = _DAT_00436520;
        uStack_2f0 = _UNK_00436528;
        uStack_1e0 = _UNK_00436618;
        local_1e8 = _DAT_00436610;
        uStack_1d0 = _UNK_00436608;
        uStack_1d8 = _DAT_00436600;
        uStack_200 = _UNK_00436638;
        local_208 = _DAT_00436630;
        uStack_1f0 = _UNK_00436628;
        uStack_1f8 = _DAT_00436620;
        uStack_1a0 = _UNK_00436658;
        local_1a8 = _DAT_00436650;
        uStack_190 = _UNK_00436648;
        uStack_198 = _DAT_00436640;
        uStack_1c0 = _UNK_00436678;
        local_1c8 = _DAT_00436670;
        uStack_1b0 = _UNK_00436668;
        uStack_1b8 = _DAT_00436660;
        uStack_120 = _UNK_004366d8;
        local_128 = _DAT_004366d0;
        uStack_110 = _UNK_004366c8;
        uStack_118 = _DAT_004366c0;
        uStack_140 = _UNK_004366f8;
        local_148 = _DAT_004366f0;
        uStack_130 = _UNK_004366e8;
        uStack_138 = _DAT_004366e0;
        uStack_a0 = _UNK_00436758;
        local_a8 = _DAT_00436750;
        uStack_90 = _UNK_00436748;
        uStack_98 = _DAT_00436740;
        uStack_c0 = _UNK_00436778;
        local_c8 = _DAT_00436770;
        uStack_b0 = _UNK_00436768;
        uStack_b8 = _DAT_00436760;
        if (iVar3 != 0) {
          puVar12 = (uint *)(local_4a0[0] + (ulong)((iVar3 + -1) * uVar10) * 4);
          do {
            uVar1 = uVar10 >> 1;
            if (uVar1 != 0) {
              iVar13 = -uVar1;
              ptVar11 = local_490 + 1;
              puVar14 = puVar12;
              do {
                local_490 = ptVar11 + 1;
                iVar13 = iVar13 + 1;
                *puVar14 = *(uint *)((long)&local_488 + (ulong)(byte)ptVar11[-1] * 4) | 0xff000000;
                puVar14[1] = *(uint *)((long)&local_488 + (ulong)(byte)*ptVar11 * 4) | 0xff000000;
                puVar14 = puVar14 + 2;
                ptVar11 = ptVar11 + 2;
              } while (iVar13 != 0);
              uVar10 = *(uint *)(lVar4 + 0x40);
              puVar12 = puVar12 + (ulong)(uVar1 - 1) * 2 + 2;
            }
            iVar3 = iVar3 + -1;
            puVar12 = puVar12 + -(ulong)(uVar10 << 1);
          } while (iVar3 != 0);
        }
        AndroidBitmap_unlockPixels(param_1,*puVar15);
        operator_delete__(ptVar5);
        uVar6 = *puVar15;
        goto LAB_00183794;
      }
      operator_delete__(ptVar5);
    }
  }
  uVar6 = 0;
LAB_00183794:
  if (*(long *)(lVar2 + 0x28) == lVar7) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar6);
}


==================================================================

### FUNC 001837d0 (360 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetOutputColorBarImage

void Java_cn_com_magnity_coresdk_MagDevice_GetOutputColorBarImage
               (undefined8 param_1,undefined8 param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  uchar **ppuVar6;
  uint *puVar7;
  uint uVar8;
  tagBITMAPINFO *ptVar9;
  int iVar10;
  uint *puVar11;
  undefined8 *puVar12;
  long local_60;
  long local_58;
  tagBITMAPINFO *local_50;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  ppuVar6 = *(uchar ***)(&DAT_0052e938 + (long)param_3 * 0x28);
  if (ppuVar6 != (uchar **)0x0) {
    local_58 = 0;
    local_50 = (tagBITMAPINFO *)0x0;
    iVar3 = CMagDevice::GetOutputColorBardata(ppuVar6,&local_50);
    if (iVar3 != 0) {
      lVar4 = CMagDevice::GetCamInfo(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
      uVar5 = 0;
      if (lVar4 == 0) goto LAB_0018390c;
      puVar12 = (undefined8 *)(&DAT_0052e950 + (long)param_3 * 0x28);
      iVar3 = AndroidBitmap_lockPixels(param_1,*puVar12,&local_60);
      if (-1 < iVar3) {
        iVar3 = *(int *)(lVar4 + 0x4c);
        if (iVar3 != 0) {
          uVar8 = *(uint *)(lVar4 + 0x48);
          puVar7 = (uint *)(local_60 + (ulong)((iVar3 + -1) * uVar8) * 4);
          do {
            uVar1 = uVar8 >> 1;
            if (uVar1 != 0) {
              iVar10 = -uVar1;
              ptVar9 = local_50 + 1;
              puVar11 = puVar7;
              do {
                local_50 = ptVar9 + 1;
                iVar10 = iVar10 + 1;
                *puVar11 = *(uint *)(local_58 + 0x28 + (ulong)(byte)ptVar9[-1] * 4) | 0xff000000;
                puVar11[1] = *(uint *)(local_58 + 0x28 + (ulong)(byte)*ptVar9 * 4) | 0xff000000;
                puVar11 = puVar11 + 2;
                ptVar9 = ptVar9 + 2;
              } while (iVar10 != 0);
              uVar8 = *(uint *)(lVar4 + 0x48);
              puVar7 = puVar7 + (ulong)(uVar1 - 1) * 2 + 2;
            }
            iVar3 = iVar3 + -1;
            puVar7 = puVar7 + -(ulong)(uVar8 << 1);
          } while (iVar3 != 0);
        }
        AndroidBitmap_unlockPixels(param_1,*puVar12);
        uVar5 = *puVar12;
        goto LAB_0018390c;
      }
    }
  }
  uVar5 = 0;
LAB_0018390c:
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00183938 (516 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetFrameStatisticalData

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetFrameStatisticalData
          (long *param_1,undefined8 param_2,int param_3,undefined8 param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) == (CMagDevice *)0x0) {
    uVar3 = 0;
  }
  else {
    lVar1 = CMagDevice::GetFrameStatisticalData
                      (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    uVar3 = 0;
    if ((lVar1 != 0) &&
       (lVar2 = (**(code **)(*param_1 + 0xf8))(param_1,param_4), uVar3 = 0, lVar2 != 0)) {
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"maxTemperature","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x18));
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"minTemperature","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x1c));
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"aveTemperature","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x20));
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"maxPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x28));
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"minPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x2c));
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"aveNETDt","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*(undefined4 *)(lVar1 + 0x3c));
      (**(code **)(*param_1 + 0xb8))(param_1,lVar2);
      uVar3 = 1;
    }
  }
  return uVar3;
}


==================================================================

### FUNC 00183b3c (396 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetRemoteInfo

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetRemoteInfo
          (long *param_1,undefined8 param_2,int param_3,undefined8 param_4)

{
  undefined4 *puVar1;
  long lVar2;
  undefined8 uVar3;
  
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) == (CMagDevice *)0x0) {
    uVar3 = 0;
  }
  else {
    puVar1 = (undefined4 *)
             CMagDevice::GetRemoteInfo(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    uVar3 = 0;
    if ((puVar1 != (undefined4 *)0x0) &&
       (lVar2 = (**(code **)(*param_1 + 0xf8))(param_1,param_4), uVar3 = 0, lVar2 != 0)) {
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"serialNumber","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,*puVar1);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,&DAT_0043a1e5,"I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,puVar1[1]);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"hwVersion","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,puVar1[2]);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar2,"swVersion","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,puVar1[3]);
      (**(code **)(*param_1 + 0xb8))(param_1,lVar2);
      uVar3 = 1;
    }
  }
  return uVar3;
}


==================================================================

### FUNC 00183cc8 (48 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_FixTemperature__IIFII

ulong Java_cn_com_magnity_coresdk_MagDevice_FixTemperature__IIFII
                (float param_1,undefined8 param_2,undefined8 param_3,int param_4,uint param_5,
                uint param_6)

{
  ulong uVar1;
  
  if (*(long *)(&DAT_0052e938 + (long)param_4 * 0x28) != 0) {
    uVar1 = CMagDevice::FixTemperature
                      ((int)*(long *)(&DAT_0052e938 + (long)param_4 * 0x28),param_1,param_5,param_6)
    ;
    return uVar1;
  }
  return (ulong)param_5;
}


==================================================================

### FUNC 00183cf8 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_FixTemperature__IIFI

ulong Java_cn_com_magnity_coresdk_MagDevice_FixTemperature__IIFI
                (float param_1,undefined8 param_2,undefined8 param_3,int param_4,uint param_5)

{
  ulong uVar1;
  
  if (*(long *)(&DAT_0052e938 + (long)param_4 * 0x28) != 0) {
    uVar1 = CMagDevice::FixTemperature
                      ((int)*(long *)(&DAT_0052e938 + (long)param_4 * 0x28),param_1,param_5);
    return uVar1;
  }
  return (ulong)param_5;
}


==================================================================

### FUNC 00183d24 (340 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureData

void Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureData
               (long *param_1,undefined8 param_2,int param_3,long param_4,char param_5)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  int *piVar5;
  long lVar6;
  CMagDevice *this;
  undefined1 local_5c [4];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  uVar4 = 0;
  if (param_4 != 0) {
    this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
    if (this != (CMagDevice *)0x0) {
      piVar5 = (int *)CMagDevice::GetCamInfo(this);
      uVar4 = 0;
      if (piVar5 != (int *)0x0) {
        uVar2 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
        if ((uint)(piVar5[1] * *piVar5) <= uVar2) {
          local_5c[0] = 0;
          lVar6 = (**(code **)(*param_1 + 0x5d8))(param_1,param_4,local_5c);
          uVar4 = 0;
          if (lVar6 == 0) goto LAB_00183e20;
          piVar5 = *(int **)(&DAT_0052e938 + (long)param_3 * 0x28);
          if (param_5 == '\0') {
            iVar3 = CMagDevice::GetTemperatureData_Raw(piVar5,(uint)lVar6,uVar2 << 2);
          }
          else {
            iVar3 = CMagDevice::GetTemperatureData(piVar5,(uint)lVar6,uVar2 << 2);
          }
          if (iVar3 != 0) {
            (**(code **)(*param_1 + 0x618))(param_1,param_4,lVar6,0);
            uVar4 = 1;
            goto LAB_00183e20;
          }
          (**(code **)(*param_1 + 0x618))(param_1,param_4,lVar6,0);
        }
        uVar4 = 0;
      }
    }
  }
LAB_00183e20:
  if (*(long *)(lVar1 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar4);
  }
  return;
}


==================================================================

### FUNC 00183e78 (48 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureProbe__IIII

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureProbe__IIII
          (undefined8 param_1,undefined8 param_2,int param_3,uint param_4,uint param_5)

{
  undefined8 uVar1;
  
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    uVar1 = CMagDevice::GetTemperatureProbe
                      ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5);
    return uVar1;
  }
  return 0x80000001;
}


==================================================================

### FUNC 00183ea8 (44 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureProbe__III

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetTemperatureProbe__III
          (undefined8 param_1,undefined8 param_2,int param_3,uint param_4)

{
  undefined8 uVar1;
  
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    uVar1 = CMagDevice::GetTemperatureProbe
                      ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4);
    return uVar1;
  }
  return 0x80000001;
}


==================================================================

### FUNC 00183ed4 (312 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetLineTemperatureInfo

bool Java_cn_com_magnity_coresdk_MagDevice_GetLineTemperatureInfo
               (long *param_1,undefined8 param_2,int param_3,uint param_4,uint param_5,uint param_6,
               undefined8 param_7,long param_8)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  undefined1 local_406c [4];
  undefined1 auStack_4068 [16392];
  
  lVar1 = tpidr_el0;
  lVar5 = *(long *)(lVar1 + 0x28);
  bVar2 = false;
  if ((param_8 != 0) && (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0)) {
    iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_8);
    if (iVar3 < 3) {
      bVar2 = false;
    }
    else {
      local_406c[0] = 0;
      uVar4 = (**(code **)(*param_1 + 0x5d8))(param_1,param_8,local_406c);
      iVar3 = CMagDevice::GetLineTemperatureInfo
                        (*(int **)(&DAT_0052e938 + (long)param_3 * 0x28),(uint)auStack_4068,
                         (int *)0x4000,(uint)uVar4,param_4,param_5,param_6);
      bVar2 = iVar3 != 0;
      (**(code **)(*param_1 + 0x618))(param_1,param_8,uVar4,0);
    }
  }
  if (*(long *)(lVar1 + 0x28) == lVar5) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018400c (292 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetRectTemperatureInfo

bool Java_cn_com_magnity_coresdk_MagDevice_GetRectTemperatureInfo
               (long *param_1,undefined8 param_2,int param_3,uint param_4,uint param_5,uint param_6,
               uint param_7,long param_8)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  undefined8 uVar4;
  undefined1 local_6c [4];
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  bVar2 = false;
  if ((param_8 != 0) && (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0)) {
    iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_8);
    if (iVar3 < 5) {
      bVar2 = false;
    }
    else {
      local_6c[0] = 0;
      uVar4 = (**(code **)(*param_1 + 0x5d8))(param_1,param_8,local_6c);
      iVar3 = CMagDevice::GetRectTemperatureInfo
                        ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5,
                         param_6,(int *)(ulong)param_7);
      bVar2 = iVar3 != 0;
      (**(code **)(*param_1 + 0x618))(param_1,param_8,uVar4,0);
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00184130 (292 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetEllipseTemperatureInfo

bool Java_cn_com_magnity_coresdk_MagDevice_GetEllipseTemperatureInfo
               (long *param_1,undefined8 param_2,int param_3,uint param_4,uint param_5,uint param_6,
               uint param_7,long param_8)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  undefined8 uVar4;
  undefined1 local_6c [4];
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  bVar2 = false;
  if ((param_8 != 0) && (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0)) {
    iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_8);
    if (iVar3 < 5) {
      bVar2 = false;
    }
    else {
      local_6c[0] = 0;
      uVar4 = (**(code **)(*param_1 + 0x5d8))(param_1,param_8,local_6c);
      iVar3 = CMagDevice::GetEllipseTemperatureInfo
                        ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5,
                         param_6,(int *)(ulong)param_7);
      bVar2 = iVar3 != 0;
      (**(code **)(*param_1 + 0x618))(param_1,param_8,uVar4,0);
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00184254 (348 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetRgnTemperatureInfo

bool Java_cn_com_magnity_coresdk_MagDevice_GetRgnTemperatureInfo
               (long *param_1,undefined8 param_2,int param_3,long param_4,long param_5)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined1 local_5c [4];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  bVar2 = false;
  if (((param_5 != 0) && (param_4 != 0)) && (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0))
  {
    iVar3 = (**(code **)(*param_1 + 0x558))(param_1,param_5);
    if (iVar3 < 5) {
      bVar2 = false;
    }
    else {
      uVar4 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
      local_5c[0] = 0;
      uVar5 = (**(code **)(*param_1 + 0x5d8))(param_1,param_4,local_5c);
      uVar6 = (**(code **)(*param_1 + 0x5d8))(param_1,param_5,local_5c);
      iVar3 = CMagDevice::GetRgnTemperatureInfo
                        (*(uint **)(&DAT_0052e938 + (long)param_3 * 0x28),(uint)uVar5,
                         (int *)(uVar4 & 0xffffffff));
      bVar2 = iVar3 != 0;
      (**(code **)(*param_1 + 0x618))(param_1,param_4,uVar5,0);
      (**(code **)(*param_1 + 0x618))(param_1,param_5,uVar6,0);
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return bVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001843b0 (160 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SaveBMP

void Java_cn_com_magnity_coresdk_MagDevice_SaveBMP
               (_JNIEnv *param_1,undefined8 param_2,int param_3,uint param_4,_jstring *param_5)

{
  long lVar1;
  undefined8 uVar2;
  long lVar3;
  char acStack_14c [268];
  
  lVar1 = tpidr_el0;
  lVar3 = *(long *)(lVar1 + 0x28);
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) == 0) {
    uVar2 = 0;
  }
  else {
    uVar2 = toChars(param_1,param_5,acStack_14c,0x104);
    if ((int)uVar2 != 0) {
      uVar2 = CMagDevice::SaveBMP((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),
                                  (char *)(ulong)param_4);
    }
  }
  if (*(long *)(lVar1 + 0x28) == lVar3) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 00184450 (148 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SaveDDT

void Java_cn_com_magnity_coresdk_MagDevice_SaveDDT
               (_JNIEnv *param_1,undefined8 param_2,int param_3,_jstring *param_4)

{
  long lVar1;
  undefined8 uVar2;
  long lVar3;
  char acStack_13c [268];
  
  lVar1 = tpidr_el0;
  lVar3 = *(long *)(lVar1 + 0x28);
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) == 0) {
    uVar2 = 0;
  }
  else {
    uVar2 = toChars(param_1,param_4,acStack_13c,0x104);
    if ((int)uVar2 != 0) {
      uVar2 = CMagDevice::SaveDDT(*(char **)(&DAT_0052e938 + (long)param_3 * 0x28));
    }
  }
  if (*(long *)(lVar1 + 0x28) == lVar3) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 001844e4 (240 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SaveDDT2Buffer

void Java_cn_com_magnity_coresdk_MagDevice_SaveDDT2Buffer
               (long *param_1,undefined8 param_2,int param_3,undefined8 param_4)

{
  long lVar1;
  int iVar2;
  long lVar3;
  void *pvVar4;
  undefined1 local_4c [4];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    local_4c[0] = 0;
    lVar3 = (**(code **)(*param_1 + 0x5c0))(param_1,param_4,local_4c);
    if (lVar3 != 0) {
      pvVar4 = *(void **)(&DAT_0052e938 + (long)param_3 * 0x28);
      (**(code **)(*param_1 + 0x558))(param_1,param_4);
      iVar2 = CMagDevice::SaveDDT2Buffer(pvVar4,(uint)lVar3);
      (**(code **)(*param_1 + 0x600))(param_1,param_4,lVar3,0);
      if (iVar2 < 1) {
        iVar2 = -1;
      }
      goto LAB_001845a8;
    }
  }
  iVar2 = -1;
LAB_001845a8:
  if (*(long *)(lVar1 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(iVar2);
  }
  return;
}


==================================================================

### FUNC 001845d4 (2316 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_LoadBufferedDDT

int Java_cn_com_magnity_coresdk_MagDevice_LoadBufferedDDT
              (_JNIEnv *param_1,undefined8 param_2,uint param_3,uint param_4,undefined8 param_5,
              _jobject *param_6,long param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  CMagDevice *pCVar7;
  void *pvVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  long lVar11;
  undefined8 *puVar12;
  CMagDevice *this;
  int local_3f8;
  int iStack_3f4;
  int local_3f0;
  int iStack_3ec;
  uint local_3e8;
  uint uStack_3e4;
  undefined1 auStack_3e0 [4];
  undefined4 local_3dc;
  int local_3d8;
  int local_3d4;
  char acStack_3b0 [32];
  char acStack_390 [32];
  undefined8 local_370;
  undefined4 local_368;
  undefined4 local_364;
  undefined8 local_360;
  undefined8 local_358;
  undefined4 local_124;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  uVar1 = 4;
  if (0 < (int)(param_3 & 0xfffffffc)) {
    uVar1 = param_3 & 0xfffffffc;
  }
  uVar2 = 4;
  if (0 < (int)param_4) {
    uVar2 = param_4;
  }
  pCVar7 = operator_new(0x58);
  CMagDevice::CMagDevice(pCVar7);
  if (*(int *)pCVar7 == 0) {
LAB_00184658:
    CMagDevice::~CMagDevice(pCVar7);
    operator_delete(pCVar7);
  }
  else {
    iVar4 = CMagDevice::GetChannelIndex(pCVar7);
    if (0x7f < iVar4 - 1U) goto LAB_00184658;
    puVar12 = (undefined8 *)(&DAT_0052e938 + (long)iVar4 * 0x28);
    this = (CMagDevice *)*puVar12;
    if (this != (CMagDevice *)0x0) {
      CMagDevice::~CMagDevice(this);
      operator_delete(this);
    }
    *puVar12 = pCVar7;
    pvVar8 = (void *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,param_5,0);
    uVar5 = (**(code **)(*(long *)param_1 + 0x558))(param_1,param_5);
    iVar6 = MAG_ProbeBufferedDDT(pvVar8,uVar5,auStack_3e0);
    if ((iVar6 != 0) && (local_3d8 - 0x50U < 0x9d1)) {
      if (local_3d4 - 0x3cU < 0x75d) {
        if (param_7 != 0) {
          uVar9 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_7);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"version","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_3dc);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"fpaWidth","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_3d8);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"fpaHeight","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_3d4);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"serialNumber","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_368);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))
                             (param_1,uVar9,"cameraType","Ljava/lang/String;");
          lVar11 = toJString(param_1,acStack_3b0);
          if (lVar11 != 0) {
            (**(code **)(*(long *)param_1 + 0x340))(param_1,param_7,uVar10,lVar11);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar11);
          }
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))
                             (param_1,uVar9,"cameraName","Ljava/lang/String;");
          lVar11 = toJString(param_1,acStack_390);
          if (lVar11 != 0) {
            (**(code **)(*(long *)param_1 + 0x340))(param_1,param_7,uVar10,lVar11);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar11);
          }
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"fileTime",&DAT_0043a224);
          (**(code **)(*(long *)param_1 + 0x370))(param_1,param_7,uVar10,local_370);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"altitude","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_364,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"latitude","D");
          (**(code **)(*(long *)param_1 + 0x380))(local_360,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"longitude","D");
          (**(code **)(*(long *)param_1 + 0x380))(local_358,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"paletteIndex","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_124);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"tempUnit","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_120);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"emissivity","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_11c,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"airTemp","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_118,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"taoAtm","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_114,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"taoFilter","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_110,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"objDistance","F");
          (**(code **)(*(long *)param_1 + 0x378))(local_10c,param_1,param_7,uVar10);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))
                             (param_1,uVar9,"usingManualEnlarge",&DAT_0043a29b);
          (**(code **)(*(long *)param_1 + 0x348))(param_1,param_7,uVar10,local_108);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"lowerLimitTemp","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_104);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"upperLimitTemp","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_100);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"grayScale1","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_fc);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"grayScale2","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_f8);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"autoEnlargeRange","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_f4);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"brightOffset","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_f0);
          uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar9,"contrastOffset","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar10,local_ec);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar9);
        }
        iVar6 = newOutputObjects(param_1,local_3d8,local_3d4,uVar1,uVar2,iVar4,param_6);
        if (iVar6 != 0) {
          local_3f8 = local_3d8;
          iStack_3f4 = local_3d4;
          local_3f0 = local_3d8;
          iStack_3ec = local_3d4;
          local_3e8 = uVar1;
          uStack_3e4 = uVar2;
          iVar6 = CMagDevice::LoadBufferedDDT
                            ((CMagDevice *)*puVar12,(OutputPara *)&local_3f8,pvVar8,uVar5,
                             (_func_void_uint_uint_uint_void_ptr *)
                             PTR_NewFrameForDDTCallBack_00501910,(void *)0x0);
          if (iVar6 != 0) {
            (**(code **)(*(long *)param_1 + 0x600))(param_1,param_5,pvVar8,0);
            goto LAB_00184ea8;
          }
          lVar11 = (long)iVar4 * 0x28;
          delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar11));
          delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar11));
          delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar11));
        }
      }
    }
    pCVar7 = (CMagDevice *)*puVar12;
    if (pCVar7 != (CMagDevice *)0x0) {
      CMagDevice::~CMagDevice(pCVar7);
      operator_delete(pCVar7);
    }
    *puVar12 = 0;
    (**(code **)(*(long *)param_1 + 0x600))(param_1,param_5,pvVar8,0);
  }
  iVar4 = -1;
LAB_00184ea8:
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return iVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00184ef4 (2184 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_LoadDDT

int Java_cn_com_magnity_coresdk_MagDevice_LoadDDT
              (_JNIEnv *param_1,undefined8 param_2,_jstring *param_3,uint param_4,uint param_5,
              _jobject *param_6,long param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  CMagDevice *pCVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long lVar9;
  undefined8 *puVar10;
  CMagDevice *this;
  int local_4f8;
  int iStack_4f4;
  int local_4f0;
  int iStack_4ec;
  uint local_4e8;
  uint uStack_4e4;
  undefined1 auStack_4e0 [4];
  undefined4 local_4dc;
  int local_4d8;
  int local_4d4;
  char acStack_4b0 [32];
  char acStack_490 [32];
  undefined8 local_470;
  undefined4 local_468;
  undefined4 local_464;
  undefined8 local_460;
  undefined8 local_458;
  undefined4 local_224;
  undefined4 local_220;
  undefined4 local_21c;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210;
  undefined4 local_20c;
  undefined4 local_208;
  undefined4 local_204;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined4 local_1f8;
  undefined4 local_1f4;
  undefined4 local_1f0;
  undefined4 local_1ec;
  char acStack_16c [260];
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  iVar4 = toChars(param_1,param_3,acStack_16c,0x104);
  if (iVar4 != 0) {
    uVar1 = 4;
    if (0 < (int)(param_4 & 0xfffffffc)) {
      uVar1 = param_4 & 0xfffffffc;
    }
    uVar2 = 4;
    if (0 < (int)param_5) {
      uVar2 = param_5;
    }
    pCVar6 = operator_new(0x58);
    CMagDevice::CMagDevice(pCVar6);
    if (*(int *)pCVar6 == 0) {
      CMagDevice::~CMagDevice(pCVar6);
      operator_delete(pCVar6);
    }
    else {
      iVar4 = CMagDevice::GetChannelIndex(pCVar6);
      puVar10 = (undefined8 *)(&DAT_0052e938 + (long)iVar4 * 0x28);
      this = (CMagDevice *)*puVar10;
      if (this != (CMagDevice *)0x0) {
        CMagDevice::~CMagDevice(this);
        operator_delete(this);
      }
      *puVar10 = pCVar6;
      iVar5 = MAG_ProbeDDT(acStack_16c,auStack_4e0);
      if ((iVar5 != 0) && (local_4d8 - 0x50U < 0x9d1)) {
        if (local_4d4 - 0x3cU < 0x75d) {
          if (param_7 != 0) {
            uVar7 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_7);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"version","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_4dc);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"fpaWidth","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_4d8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"fpaHeight","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_4d4);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"serialNumber","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_468);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))
                              (param_1,uVar7,"cameraType","Ljava/lang/String;");
            lVar9 = toJString(param_1,acStack_4b0);
            if (lVar9 != 0) {
              (**(code **)(*(long *)param_1 + 0x340))(param_1,param_7,uVar8,lVar9);
              (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar9);
            }
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))
                              (param_1,uVar7,"cameraName","Ljava/lang/String;");
            lVar9 = toJString(param_1,acStack_490);
            if (lVar9 != 0) {
              (**(code **)(*(long *)param_1 + 0x340))(param_1,param_7,uVar8,lVar9);
              (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar9);
            }
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"fileTime",&DAT_0043a224);
            (**(code **)(*(long *)param_1 + 0x370))(param_1,param_7,uVar8,local_470);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"altitude","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_464,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"latitude","D");
            (**(code **)(*(long *)param_1 + 0x380))(local_460,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"longitude","D");
            (**(code **)(*(long *)param_1 + 0x380))(local_458,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"paletteIndex","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_224);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"tempUnit","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_220);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"emissivity","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_21c,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"airTemp","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_218,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"taoAtm","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_214,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"taoFilter","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_210,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"objDistance","F");
            (**(code **)(*(long *)param_1 + 0x378))(local_20c,param_1,param_7,uVar8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))
                              (param_1,uVar7,"usingManualEnlarge",&DAT_0043a29b);
            (**(code **)(*(long *)param_1 + 0x348))(param_1,param_7,uVar8,local_208);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"lowerLimitTemp","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_204);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"upperLimitTemp","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_200);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"grayScale1","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_1fc);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"grayScale2","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_1f8);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"autoEnlargeRange","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_1f4);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"brightOffset","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_1f0);
            uVar8 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar7,"contrastOffset","I");
            (**(code **)(*(long *)param_1 + 0x368))(param_1,param_7,uVar8,local_1ec);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          }
          iVar5 = newOutputObjects(param_1,local_4d8,local_4d4,uVar1,uVar2,iVar4,param_6);
          if (iVar5 != 0) {
            local_4f8 = local_4d8;
            iStack_4f4 = local_4d4;
            local_4f0 = local_4d8;
            iStack_4ec = local_4d4;
            local_4e8 = uVar1;
            uStack_4e4 = uVar2;
            iVar5 = CMagDevice::LoadDDT((CMagDevice *)*puVar10,(OutputPara *)&local_4f8,acStack_16c,
                                        (_func_void_uint_uint_uint_void_ptr *)
                                        PTR_NewFrameForDDTCallBack_00501910,(void *)0x0);
            if (iVar5 != 0) goto LAB_00185744;
            lVar9 = (long)iVar4 * 0x28;
            delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar9));
            delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar9));
            delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar9));
          }
        }
      }
      pCVar6 = (CMagDevice *)*puVar10;
      if (pCVar6 != (CMagDevice *)0x0) {
        CMagDevice::~CMagDevice(pCVar6);
        operator_delete(pCVar6);
      }
      *puVar10 = 0;
    }
  }
  iVar4 = -1;
LAB_00185744:
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return iVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00185790 (132 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_UnloadDDT

void Java_cn_com_magnity_coresdk_MagDevice_UnloadDDT
               (_JNIEnv *param_1,undefined8 param_2,int param_3)

{
  long lVar1;
  CMagDevice *this;
  
  this = *(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28);
  if (this != (CMagDevice *)0x0) {
    CMagDevice::~CMagDevice(this);
    operator_delete(this);
    *(undefined8 *)(&DAT_0052e938 + (long)param_3 * 0x28) = 0;
  }
  lVar1 = (long)param_3 * 0x28;
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e940 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e948 + lVar1));
  delGlobalObject(param_1,(_jobject **)(&DAT_0052e950 + lVar1));
  return;
}


==================================================================

### FUNC 00185814 (228 bytes) name=getMDTObject

/* getMDTObject(_JNIEnv*, _jobject*, char const*, char const*, char const*, int*) */

undefined8
getMDTObject(_JNIEnv *param_1,_jobject *param_2,char *param_3,char *param_4,char *param_5,
            int *param_6)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  
  uVar2 = (**(code **)(*(long *)param_1 + 0xf8))();
  uVar3 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar2,param_3,param_4);
  uVar3 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_2,uVar3);
  uVar4 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar2,param_5,"I");
  iVar1 = (**(code **)(*(long *)param_1 + 800))(param_1,param_2,uVar4);
  *param_6 = iVar1;
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar2);
  return uVar3;
}


==================================================================

### FUNC 001858f8 (2612 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_nativeSaveMDT

uint Java_cn_com_magnity_coresdk_MagDevice_nativeSaveMDT
               (_JNIEnv *param_1,undefined8 param_2,long param_3,_jstring *param_4)

{
  ulong uVar1;
  undefined1 auVar2 [16];
  long lVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined4 uVar8;
  int iVar9;
  int iVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  long lVar13;
  uchar *puVar14;
  long lVar15;
  long lVar16;
  long lVar17;
  _jobject *p_Var18;
  long lVar19;
  uchar *puVar20;
  long lVar21;
  uchar *puVar22;
  long lVar23;
  ulong __n;
  ROI *pRVar24;
  int local_22c;
  int local_224;
  ROI *local_218;
  uchar *local_1f8;
  uchar *local_1e8;
  undefined1 local_1d4 [4];
  MDTHelper aMStack_1d0 [100];
  char acStack_16c [268];
  
  lVar3 = tpidr_el0;
  lVar23 = *(long *)(lVar3 + 0x28);
  if ((param_3 != 0) && (iVar4 = toChars(param_1,param_4,acStack_16c,0x104), iVar4 != 0)) {
    local_1d4[0] = 0;
    uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
    uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"ddtBuf","[B");
    lVar13 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
    uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"ddtSize","I");
    iVar4 = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
    if (lVar13 != 0) {
      iVar5 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar13);
      if (iVar5 <= iVar4) {
        iVar4 = iVar5;
      }
      puVar14 = (uchar *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar13,local_1d4);
      uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"jpgBuf","[B");
      lVar15 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"jpgSize","I");
      local_224 = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
      if (lVar15 == 0) {
        local_1e8 = (uchar *)0x0;
      }
      else {
        iVar5 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar15);
        if (iVar5 <= local_224) {
          local_224 = iVar5;
        }
        local_1e8 = (uchar *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar15,local_1d4);
      }
      uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"visBuf","[B");
      lVar16 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"visSize","I");
      local_22c = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
      if (lVar16 == 0) {
        local_1f8 = (uchar *)0x0;
      }
      else {
        iVar5 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar16);
        if (iVar5 <= local_22c) {
          local_22c = iVar5;
        }
        local_1f8 = (uchar *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar16,local_1d4);
      }
      uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))
                         (param_1,uVar11,"labBuf","[Lcn/com/magnity/coresdk/types/ROI;");
      lVar17 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"labSize","I");
      uVar6 = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
      if (lVar17 == 0) {
        local_218 = (ROI *)0x0;
      }
      else {
        uVar7 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar17);
        if ((int)uVar7 <= (int)uVar6) {
          uVar6 = uVar7;
        }
        auVar2._8_8_ = 0;
        auVar2._0_8_ = (long)(int)uVar6;
        __n = -(ulong)(uVar6 >> 0x1f) & 0xffffff0000000000 | (ulong)uVar6 << 8;
        uVar1 = __n;
        if (SUB168(auVar2 * ZEXT816(0x100),8) != 0) {
          uVar1 = 0xffffffffffffffff;
        }
        local_218 = operator_new__(uVar1);
        memset(local_218,0,__n);
        if (0 < (int)uVar6) {
          iVar5 = 0;
          pRVar24 = local_218;
          do {
            p_Var18 = (_jobject *)(**(code **)(*(long *)param_1 + 0x568))(param_1,lVar17,iVar5);
            uVar8 = GetJint(param_1,"type",p_Var18);
            *(undefined4 *)pRVar24 = uVar8;
            uVar8 = GetJint(param_1,"targetType",p_Var18);
            *(undefined4 *)(pRVar24 + 4) = uVar8;
            uVar8 = GetJint(param_1,"maxTemp",p_Var18);
            *(undefined4 *)(pRVar24 + 8) = uVar8;
            uVar8 = GetJint(param_1,"minTemp",p_Var18);
            *(undefined4 *)(pRVar24 + 0xc) = uVar8;
            uVar8 = GetJint(param_1,"aveTemp",p_Var18);
            *(undefined4 *)(pRVar24 + 0x10) = uVar8;
            uVar8 = GetJint(param_1,"maxPos",p_Var18);
            *(undefined4 *)(pRVar24 + 0x14) = uVar8;
            uVar8 = GetJint(param_1,"minPos",p_Var18);
            *(undefined4 *)(pRVar24 + 0x18) = uVar8;
            uVar8 = GetJint(param_1,"x0",p_Var18);
            *(undefined4 *)(pRVar24 + 0x1c) = uVar8;
            uVar8 = GetJint(param_1,"y0",p_Var18);
            *(undefined4 *)(pRVar24 + 0x20) = uVar8;
            uVar8 = GetJint(param_1,"x1",p_Var18);
            *(undefined4 *)(pRVar24 + 0x24) = uVar8;
            uVar8 = GetJint(param_1,"y1",p_Var18);
            *(undefined4 *)(pRVar24 + 0x28) = uVar8;
            uVar8 = GetJint(param_1,"color",p_Var18);
            *(undefined4 *)(pRVar24 + 0x2c) = uVar8;
            uVar8 = GetJfloat(param_1,"emissivity",p_Var18);
            *(undefined4 *)(pRVar24 + 0x30) = uVar8;
            uVar8 = GetJint(param_1,"lowerAlarmTemp",p_Var18);
            *(undefined4 *)(pRVar24 + 0x34) = uVar8;
            uVar8 = GetJint(param_1,"upperAlarmTemp",p_Var18);
            *(undefined4 *)(pRVar24 + 0x38) = uVar8;
            GetJstring(param_1,"name",p_Var18,(char *)(pRVar24 + 0x3c),0x40);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var18);
            iVar5 = iVar5 + 1;
            pRVar24 = pRVar24 + 0x100;
          } while (iVar5 < (int)uVar6);
        }
      }
      uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"txtBuf","[B");
      lVar19 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"txtSize","I");
      iVar5 = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
      if (lVar19 == 0) {
        puVar20 = (uchar *)0x0;
      }
      else {
        iVar9 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar19);
        if (iVar9 <= iVar5) {
          iVar5 = iVar9;
        }
        puVar20 = (uchar *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar19,local_1d4);
      }
      uVar11 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"audBuf","[B");
      lVar21 = (**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar12);
      uVar12 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar11,"audSize","I");
      iVar9 = (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar12);
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar11);
      if (lVar21 == 0) {
        puVar22 = (uchar *)0x0;
      }
      else {
        iVar10 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar21);
        if (iVar10 <= iVar9) {
          iVar9 = iVar10;
        }
        puVar22 = (uchar *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar21,local_1d4);
      }
      MDTHelper::MDTHelper(aMStack_1d0);
      MDTHelper::setJpg(aMStack_1d0,local_1e8,local_224,false);
      MDTHelper::setDDT(aMStack_1d0,puVar14,iVar4,false);
      MDTHelper::setVisible(aMStack_1d0,local_1f8,local_22c,false);
      MDTHelper::setLabel(aMStack_1d0,local_218,uVar6 << 8,false);
      MDTHelper::setText(aMStack_1d0,puVar20,iVar5,false);
      MDTHelper::setAudio(aMStack_1d0,puVar22,iVar9,false);
      uVar6 = MDTHelper::save(aMStack_1d0,acStack_16c);
      if (local_1e8 != (uchar *)0x0) {
        (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar15,local_1e8,0);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar15);
      }
      if (puVar14 != (uchar *)0x0) {
        (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar13,puVar14,0);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar13);
      }
      if (local_1f8 != (uchar *)0x0) {
        (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar16,local_1f8,0);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar16);
      }
      if (local_218 != (ROI *)0x0) {
        operator_delete__(local_218);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar17);
      }
      if (puVar20 != (uchar *)0x0) {
        (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar19,puVar20,0);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar19);
      }
      if (puVar22 != (uchar *)0x0) {
        (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar21,puVar22,0);
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar21);
      }
      uVar6 = uVar6 & 1;
      MDTHelper::~MDTHelper(aMStack_1d0);
      goto LAB_001862f4;
    }
  }
  uVar6 = 0;
LAB_001862f4:
  if (*(long *)(lVar3 + 0x28) != lVar23) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar6;
}


==================================================================

### FUNC 00186340 (3252 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_nativeLoadMDT

undefined8
Java_cn_com_magnity_coresdk_MagDevice_nativeLoadMDT
          (_JNIEnv *param_1,undefined8 param_2,_jstring *param_3,long param_4)

{
  long lVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  _jmethodID *p_Var8;
  undefined8 uVar9;
  undefined8 uVar10;
  long lVar11;
  long lVar12;
  long local_208;
  uchar *local_200;
  uchar *local_1f8;
  ROI *local_1f0;
  uchar *local_1e8;
  uchar *local_1e0;
  uchar *local_1d8;
  MDTHelper aMStack_1d0 [100];
  char acStack_16c [260];
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  uVar5 = 0;
  if (param_4 != 0) {
    iVar2 = toChars(param_1,param_3,acStack_16c,0x104);
    if (iVar2 == 0) {
      uVar5 = 0;
    }
    else {
      MDTHelper::MDTHelper(aMStack_1d0);
      uVar4 = MDTHelper::load(aMStack_1d0,acStack_16c);
      if ((uVar4 & 1) == 0) {
        uVar5 = 0;
      }
      else {
        uVar5 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_4);
        local_1d8 = (uchar *)0x0;
        iVar2 = MDTHelper::getJpg(aMStack_1d0,&local_1d8);
        if (0 < iVar2) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"jpgBuf","[B");
          uVar7 = (**(code **)(*(long *)param_1 + 0x580))(param_1,iVar2);
          (**(code **)(*(long *)param_1 + 0x680))(param_1,uVar7,0,iVar2,local_1d8);
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"jpgSize","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar6,iVar2);
        }
        local_1e0 = (uchar *)0x0;
        iVar2 = MDTHelper::getDDT(aMStack_1d0,&local_1e0);
        if (0 < iVar2) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"ddtBuf","[B");
          uVar7 = (**(code **)(*(long *)param_1 + 0x580))(param_1,iVar2);
          (**(code **)(*(long *)param_1 + 0x680))(param_1,uVar7,0,iVar2,local_1e0);
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"ddtSize","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar6,iVar2);
        }
        local_1e8 = (uchar *)0x0;
        iVar2 = MDTHelper::getVisible(aMStack_1d0,&local_1e8);
        if (0 < iVar2) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"visBuf","[B");
          uVar7 = (**(code **)(*(long *)param_1 + 0x580))(param_1,iVar2);
          (**(code **)(*(long *)param_1 + 0x680))(param_1,uVar7,0,iVar2,local_1e8);
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"visSize","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar6,iVar2);
        }
        local_1f0 = (ROI *)0x0;
        uVar3 = MDTHelper::getLabel(aMStack_1d0,&local_1f0);
        if (0 < (int)uVar3) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"labSize","I");
          uVar4 = (ulong)(uVar3 >> 8);
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar6,uVar4);
          p_Var8 = (_jmethodID *)
                   (**(code **)(*(long *)param_1 + 0x30))
                             (param_1,"cn/com/magnity/coresdk/types/ROI");
          uVar6 = (**(code **)(*(long *)param_1 + 0x108))(param_1,p_Var8,"<init>",&DAT_0043a3f7);
          uVar7 = (**(code **)(*(long *)param_1 + 0x560))(param_1,uVar4,p_Var8,0);
          if (uVar3 >> 8 != 0) {
            lVar12 = 0;
            local_208 = 0;
            do {
              uVar9 = _JNIEnv::NewObject((_jclass *)param_1,p_Var8,uVar6);
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,&DAT_0043a10a,"I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"targetType","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 4));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"maxTemp","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 8));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"minTemp","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0xc));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"aveTemp","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x10));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"maxPos","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x14));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"minPos","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x18));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,&DAT_0043a381,"I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x1c));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,&DAT_0043a384,"I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x20));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,&DAT_0043a387,"I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x24));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,&DAT_0043a38a,"I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x28));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"color","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x2c));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"emissivity","F");
              (**(code **)(*(long *)param_1 + 0x378))
                        (*(undefined4 *)(local_1f0 + lVar12 + 0x30),param_1,uVar9,uVar10);
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"lowerAlarmTemp","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x34));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"upperAlarmTemp","I");
              (**(code **)(*(long *)param_1 + 0x368))
                        (param_1,uVar9,uVar10,*(undefined4 *)(local_1f0 + lVar12 + 0x38));
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))
                                 (param_1,p_Var8,&DAT_0043a0f2,"Ljava/lang/String;");
              lVar11 = toJString(param_1,(char *)(local_1f0 + lVar12 + 0x3c));
              if (lVar11 != 0) {
                (**(code **)(*(long *)param_1 + 0x340))(param_1,uVar9,uVar10,lVar11);
                (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar11);
              }
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"reserved1","I");
              (**(code **)(*(long *)param_1 + 0x368))(param_1,uVar9,uVar10,0);
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"reserved2","I");
              (**(code **)(*(long *)param_1 + 0x368))(param_1,uVar9,uVar10,0);
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"reserved3","I");
              (**(code **)(*(long *)param_1 + 0x368))(param_1,uVar9,uVar10,0);
              uVar10 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,p_Var8,"reserved4","I");
              (**(code **)(*(long *)param_1 + 0x368))(param_1,uVar9,uVar10,0);
              (**(code **)(*(long *)param_1 + 0x570))(param_1,uVar7,local_208,uVar9);
              lVar12 = lVar12 + 0x100;
              local_208 = local_208 + 1;
            } while (local_208 < (long)uVar4);
          }
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))
                            (param_1,uVar5,"labBuf","[Lcn/com/magnity/coresdk/types/ROI;");
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var8);
        }
        local_1f8 = (uchar *)0x0;
        iVar2 = MDTHelper::getText(aMStack_1d0,&local_1f8);
        if (0 < iVar2) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"txtBuf","[B");
          uVar7 = (**(code **)(*(long *)param_1 + 0x580))(param_1,iVar2);
          (**(code **)(*(long *)param_1 + 0x680))(param_1,uVar7,0,iVar2,local_1f8);
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"txtSize","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar6,iVar2);
        }
        local_200 = (uchar *)0x0;
        iVar2 = MDTHelper::getAudio(aMStack_1d0,&local_200);
        if (0 < iVar2) {
          uVar6 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"audBuf","[B");
          uVar7 = (**(code **)(*(long *)param_1 + 0x580))(param_1,iVar2);
          (**(code **)(*(long *)param_1 + 0x680))(param_1,uVar7,0,iVar2,local_200);
          (**(code **)(*(long *)param_1 + 0x340))(param_1,param_4,uVar6,uVar7);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar7);
          uVar5 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar5,"audSize","I");
          (**(code **)(*(long *)param_1 + 0x368))(param_1,param_4,uVar5,iVar2);
        }
        uVar5 = 1;
      }
      MDTHelper::~MDTHelper(aMStack_1d0);
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return uVar5;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00187080 (160 bytes) name=NewObject

/* _JNIEnv::NewObject(_jclass*, _jmethodID*, ...) */

void _JNIEnv::NewObject(_jclass *param_1,_jmethodID *param_2,...)

{
  long lVar1;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar2;
  undefined1 auStack_a0 [8];
  undefined8 local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined1 *local_70;
  undefined1 **ppuStack_68;
  undefined1 *puStack_60;
  undefined8 uStack_58;
  
  lVar1 = tpidr_el0;
  lVar2 = *(long *)(lVar1 + 0x28);
  puStack_60 = auStack_a0;
  ppuStack_68 = &local_70;
  uStack_58 = 0xffffff80ffffffd8;
  local_98 = in_x3;
  local_90 = in_x4;
  uStack_88 = in_x5;
  local_80 = in_x6;
  uStack_78 = in_x7;
  local_70 = (undefined1 *)register0x00000008;
  (**(code **)(*(long *)param_1 + 0xe8))();
  if (*(long *)(lVar1 + 0x28) == lVar2) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00187120 (32 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_Lock

void Java_cn_com_magnity_coresdk_MagDevice_Lock(undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::Lock(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    return;
  }
  return;
}


==================================================================

### FUNC 00187140 (32 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_Unlock

void Java_cn_com_magnity_coresdk_MagDevice_Unlock(undefined8 param_1,undefined8 param_2,int param_3)

{
  if (*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28) != (CMagDevice *)0x0) {
    CMagDevice::Unlock(*(CMagDevice **)(&DAT_0052e938 + (long)param_3 * 0x28));
    return;
  }
  return;
}


==================================================================

### FUNC 00187160 (40 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetCurrentCameraInnerTemperature

undefined8
Java_cn_com_magnity_coresdk_MagDevice_GetCurrentCameraInnerTemperature
          (undefined8 param_1,undefined8 param_2,uint param_3)

{
  undefined8 uVar1;
  
  if (*(CMagDevice **)(&DAT_0052e938 + (long)(int)param_3 * 0x28) != (CMagDevice *)0x0) {
    uVar1 = CMagDevice::GetCurrentCameraInnerTemperature
                      (*(CMagDevice **)(&DAT_0052e938 + (long)(int)param_3 * 0x28),param_3);
    return uVar1;
  }
  return 0x80000000;
}


==================================================================

### FUNC 00187188 (320 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_nativeCopyBitmap

void Java_cn_com_magnity_coresdk_MagDevice_nativeCopyBitmap
               (undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  long lVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 local_78;
  undefined8 local_70;
  undefined4 local_68;
  void *local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined4 local_48;
  void *local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  iVar2 = AndroidBitmap_lockPixels(param_1,param_4,&local_40);
  if (-1 < iVar2) {
    local_48 = 0;
    local_58 = 0;
    local_50 = 0;
    AndroidBitmap_getInfo(param_1,param_4,&local_58);
    iVar2 = AndroidBitmap_lockPixels(param_1,param_3,&local_60);
    if (-1 < iVar2) {
      local_68 = 0;
      local_78 = 0;
      local_70 = 0;
      AndroidBitmap_getInfo(param_1,param_3,&local_78);
      if (local_50._4_4_ == local_70._4_4_) {
        if ((int)local_58 == (int)local_78) {
          if (local_58._4_4_ == local_78._4_4_) {
            if ((int)local_50 == (int)local_70) {
              memcpy(local_60,local_40,(ulong)(uint)((int)local_50 * local_58._4_4_));
              AndroidBitmap_unlockPixels(param_1,param_4);
              AndroidBitmap_unlockPixels(param_1,param_3);
              uVar3 = 1;
              goto LAB_001872a0;
            }
          }
        }
      }
      AndroidBitmap_unlockPixels(param_1,param_4);
      param_4 = param_3;
    }
    AndroidBitmap_unlockPixels(param_1,param_4);
  }
  uVar3 = 0;
LAB_001872a0:
  if (*(long *)(lVar1 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar3);
  }
  return;
}


==================================================================

### FUNC 001872c8 (588 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_nativeBlendBitmap

void Java_cn_com_magnity_coresdk_MagDevice_nativeBlendBitmap
               (undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               int param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  int iVar8;
  undefined8 uVar9;
  uint uVar10;
  uint *puVar11;
  uint uVar12;
  undefined8 local_88;
  undefined8 local_80;
  undefined4 local_78;
  long local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined4 local_58;
  uint *local_50;
  long local_48;
  
  lVar7 = tpidr_el0;
  local_48 = *(long *)(lVar7 + 0x28);
  if (param_5 < 1) {
LAB_001874e4:
    uVar9 = 1;
  }
  else {
    if (0x1f < param_5) {
      param_5 = 0x20;
    }
    iVar8 = AndroidBitmap_lockPixels(param_1,param_4,&local_50);
    if (iVar8 < 0) {
LAB_001873c0:
      uVar9 = 0;
      goto LAB_001874e8;
    }
    local_58 = 0;
    local_68 = 0;
    local_60 = 0;
    AndroidBitmap_getInfo(param_1,param_4,&local_68);
    iVar8 = AndroidBitmap_lockPixels(param_1,param_3,&local_70);
    if (-1 < iVar8) {
      local_78 = 0;
      local_88 = 0;
      local_80 = 0;
      AndroidBitmap_getInfo(param_1,param_3,&local_88);
      if (local_60._4_4_ == local_80._4_4_) {
        if ((uint)local_68 == (uint)local_88) {
          if (local_68._4_4_ == local_88._4_4_) {
            if ((uint)local_60 == (uint)local_80) {
              if (local_60._4_4_ < 9) {
                if ((1 << (ulong)(local_60._4_4_ & 0x1f) & 0x191U) != 0) goto LAB_001873c0;
                if (((local_60._4_4_ == 1) && ((uint)local_60 >> 2 == (uint)local_68)) &&
                   (0 < local_68._4_4_)) {
                  uVar10 = 0;
                  iVar8 = 0;
                  iVar4 = 0x20 - param_5;
                  do {
                    puVar11 = local_50;
                    uVar12 = (uint)local_68;
                    uVar1 = uVar10;
                    if ((uint)local_68 != 0) {
                      do {
                        uVar2 = *puVar11;
                        uVar5 = uVar2 >> 8 & 0xff;
                        uVar6 = uVar2 >> 0x10 & 0xff;
                        if (0xf2 < uVar5 + (uVar2 & 0xff) + uVar6) {
                          uVar3 = *(uint *)(local_70 + (ulong)uVar1 * 4);
                          *(uint *)(local_70 + (ulong)uVar1 * 4) =
                               (uVar5 * param_5 + (uVar3 >> 8 & 0xff) * iVar4) * 8 & 0xffff00 |
                               (uVar2 & 0xff) * param_5 + (uVar3 & 0xff) * iVar4 >> 5 |
                               (uVar6 * param_5 + (uVar3 >> 0x10 & 0xff) * iVar4) * 0x800 & 0xff0000
                               | 0xff000000;
                        }
                        uVar12 = uVar12 - 1;
                        uVar1 = uVar1 + 1;
                        puVar11 = puVar11 + 1;
                      } while (uVar12 != 0);
                      local_50 = local_50 + (ulong)((uint)local_68 - 1) + 1;
                      uVar10 = uVar10 + (uint)local_68;
                    }
                    iVar8 = iVar8 + 1;
                  } while (iVar8 != local_68._4_4_);
                }
              }
              AndroidBitmap_unlockPixels(param_1,param_4);
              AndroidBitmap_unlockPixels(param_1,param_3);
              goto LAB_001874e4;
            }
          }
        }
      }
      AndroidBitmap_unlockPixels(param_1,param_4);
      param_4 = param_3;
    }
    AndroidBitmap_unlockPixels(param_1,param_4);
    uVar9 = 0;
  }
LAB_001874e8:
  if (*(long *)(lVar7 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar9);
  }
  return;
}


==================================================================

### FUNC 00187514 (8 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_StartStitching

undefined8 Java_cn_com_magnity_coresdk_MagDevice_StartStitching(void)

{
  return 0;
}


==================================================================

### FUNC 0018751c (8 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_TriggerStitching

undefined8 Java_cn_com_magnity_coresdk_MagDevice_TriggerStitching(void)

{
  return 0;
}


==================================================================

### FUNC 00187524 (4 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_StopStitching

void Java_cn_com_magnity_coresdk_MagDevice_StopStitching(void)

{
  return;
}


==================================================================

### FUNC 00187528 (8 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_isStitching

undefined8 Java_cn_com_magnity_coresdk_MagDevice_isStitching(void)

{
  return 0;
}


==================================================================

### FUNC 00187530 (376 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetDetectParameter

void Java_cn_com_magnity_coresdk_MagDevice_SetDetectParameter
               (_JNIEnv *param_1,undefined8 param_2,undefined4 param_3,_jobject *param_4)

{
  long lVar1;
  uint uVar2;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if (param_4 == (_jobject *)0x0) {
    uVar2 = 0;
  }
  else {
    local_68 = GetJint(param_1,"targetLowTemp",param_4);
    local_64 = GetJint(param_1,"targetHighTemp",param_4);
    local_60 = GetJint(param_1,"targetMinArea",param_4);
    local_5c = GetJint(param_1,"targetMaxArea",param_4);
    local_58 = GetJint(param_1,"targetMinLength",param_4);
    local_54 = GetJint(param_1,"minHorJointDist",param_4);
    local_50 = GetJint(param_1,"minVerJointDist",param_4);
    local_4c = GetJint(param_1,"rangeLeftPos",param_4);
    local_48 = GetJint(param_1,"rangeTopPos",param_4);
    local_44 = GetJint(param_1,"rangeRightPos",param_4);
    local_40 = GetJint(param_1,"rangeBottomPos",param_4);
    uVar2 = MAG_SetDetectParameter(param_3,&local_68);
    uVar2 = uVar2 & 1;
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 001876a8 (864 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_GetDetectSuggestedParameter

void Java_cn_com_magnity_coresdk_MagDevice_GetDetectSuggestedParameter
               (long *param_1,undefined8 param_2,undefined4 param_3,long param_4)

{
  long lVar1;
  ulong uVar2;
  undefined8 uVar3;
  long lVar4;
  undefined8 local_78;
  undefined8 uStack_70;
  undefined8 local_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined4 local_50;
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  if (param_4 == 0) {
    uVar3 = 0;
  }
  else {
    local_50 = 0;
    local_58 = 0;
    uStack_60 = 0;
    local_68 = 0;
    uStack_70 = 0;
    local_78 = 0;
    uVar2 = MAG_GetDetectSuggestedParameter(param_3,&local_78);
    uVar3 = 0;
    if (((uVar2 & 1) != 0) &&
       (lVar4 = (**(code **)(*param_1 + 0xf8))(param_1,param_4), uVar3 = 0, lVar4 != 0)) {
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"targetLowTemp","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_78 & 0xffffffff);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"targetHighTemp","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_78._4_4_);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"targetMinArea","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,uStack_70 & 0xffffffff);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"targetMaxArea","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,uStack_70._4_4_);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"targetMinLength","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_68 & 0xffffffff);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"minHorJointDist","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_68._4_4_);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"minVerJointDist","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,uStack_60 & 0xffffffff);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"rangeLeftPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,uStack_60._4_4_);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"rangeTopPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_58 & 0xffffffff);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"rangeRightPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_58._4_4_);
      uVar3 = (**(code **)(*param_1 + 0x2f0))(param_1,lVar4,"rangeBottomPos","I");
      (**(code **)(*param_1 + 0x368))(param_1,param_4,uVar3,local_50);
      (**(code **)(*param_1 + 0xb8))(param_1,lVar4);
      uVar3 = 1;
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 00187a08 (196 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_SetDetectMaskPoints

uint Java_cn_com_magnity_coresdk_MagDevice_SetDetectMaskPoints
               (long *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  long lVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 uVar4;
  undefined1 local_4c [4];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  uVar2 = (**(code **)(*param_1 + 0x558))(param_1,param_4);
  local_4c[0] = 0;
  uVar4 = (**(code **)(*param_1 + 0x5d8))(param_1,param_4,local_4c);
  uVar3 = MAG_SetDetectMaskPoints(param_3,uVar4,uVar2);
  (**(code **)(*param_1 + 0x618))(param_1,param_4,uVar4,0);
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return uVar3 & 1;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00187acc (560 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_FindDetectTarget

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int Java_cn_com_magnity_coresdk_MagDevice_FindDetectTarget
              (_jclass *param_1,undefined8 param_2,undefined4 param_3,long param_4,
              undefined4 param_5,undefined4 param_6,long param_7)

{
  long lVar1;
  int iVar2;
  int iVar3;
  undefined8 uVar4;
  _jmethodID *p_Var5;
  long lVar6;
  long lVar7;
  long lVar8;
  ulong uVar9;
  int *piVar10;
  undefined1 local_206c [4];
  uint local_2068 [2];
  undefined8 uStack_2060;
  undefined8 auStack_2058 [1023];
  
  lVar1 = tpidr_el0;
  lVar8 = *(long *)(lVar1 + 0x28);
  iVar2 = -1;
  if ((param_4 != 0) && (param_7 != 0)) {
    local_206c[0] = 0;
    uVar4 = (**(code **)(*(long *)param_1 + 0x5c0))(param_1,param_4,local_206c);
    lVar6 = 0;
    do {
      lVar7 = lVar6 + 0x80;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x18) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x10) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x28) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x20) = _DAT_0043a040;
      *(undefined8 *)((long)&uStack_2060 + lVar6) = _UNK_0043a048;
      *(undefined8 *)((long)local_2068 + lVar6) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 8) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x58) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x50) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x68) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x60) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x38) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x30) = _DAT_0043a040;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x48) = _UNK_0043a048;
      *(undefined8 *)((long)auStack_2058 + lVar6 + 0x40) = _DAT_0043a040;
      lVar6 = lVar7;
    } while (lVar7 != 0x2000);
    iVar2 = MAG_FindDetectTarget(param_3,uVar4,param_5,param_6,local_2068,0x200);
    (**(code **)(*(long *)param_1 + 0x600))(param_1,param_4,uVar4,0);
    if (0 < iVar2) {
      iVar3 = (**(code **)(*(long *)param_1 + 0x558))(param_1,param_7);
      if (iVar2 <= iVar3) {
        iVar3 = iVar2;
      }
      p_Var5 = (_jmethodID *)
               (**(code **)(*(long *)param_1 + 0x30))(param_1,"cn/com/magnity/coresdk/types/JRect");
      lVar6 = (**(code **)(*(long *)param_1 + 0x108))(param_1,p_Var5,"<init>","(IIII)V");
      iVar2 = -1;
      if ((p_Var5 != (_jmethodID *)0x0) && (lVar6 != 0)) {
        if (0 < iVar3) {
          uVar9 = 0;
          piVar10 = (int *)&uStack_2060;
          do {
            lVar7 = _JNIEnv::NewObject(param_1,p_Var5,lVar6,(ulong)(uint)piVar10[-2],
                                       (ulong)(uint)piVar10[-1],
                                       (ulong)(uint)((1 - piVar10[-2]) + *piVar10),
                                       (ulong)(uint)((1 - piVar10[-1]) + piVar10[1]));
            if (lVar7 == 0) break;
            (**(code **)(*(long *)param_1 + 0x570))(param_1,param_7,uVar9 & 0xffffffff,lVar7);
            uVar9 = uVar9 + 1;
            piVar10 = piVar10 + 4;
          } while ((long)uVar9 < (long)iVar3);
        }
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var5);
        iVar2 = iVar3;
      }
    }
  }
  if (*(long *)(lVar1 + 0x28) == lVar8) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00187cfc (48 bytes) name=Java_cn_com_magnity_coresdk_MagDevice_EstimateUnderArmTempFromForeheadRect

void Java_cn_com_magnity_coresdk_MagDevice_EstimateUnderArmTempFromForeheadRect
               (undefined8 param_1,undefined8 param_2,int param_3,uint param_4,uint param_5,
               uint param_6)

{
  if (*(long *)(&DAT_0052e938 + (long)param_3 * 0x28) != 0) {
    CMagDevice::EstimateUnderArmTempFromForeheadRect
              ((uint)*(long *)(&DAT_0052e938 + (long)param_3 * 0x28),param_4,param_5,param_6);
    return;
  }
  return;
}


==================================================================

### FUNC 00187d2c (364 bytes) name=toJString

/* toJString(_JNIEnv*, char const*) */

undefined8 toJString(_JNIEnv *param_1,char *param_2)

{
  _jmethodID *p_Var1;
  long lVar2;
  size_t sVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  
  p_Var1 = (_jmethodID *)(**(code **)(*(long *)param_1 + 0x30))(param_1,"java/lang/String");
  if (p_Var1 != (_jmethodID *)0x0) {
    lVar2 = (**(code **)(*(long *)param_1 + 0x108))
                      (param_1,p_Var1,"<init>","([BLjava/lang/String;)V");
    if (lVar2 != 0) {
      sVar3 = strlen(param_2);
      lVar4 = (**(code **)(*(long *)param_1 + 0x580))(param_1,sVar3 & 0xffffffff);
      if (lVar4 != 0) {
        (**(code **)(*(long *)param_1 + 0x680))(param_1,lVar4,0,sVar3 & 0xffffffff,param_2);
        lVar5 = (**(code **)(*(long *)param_1 + 0x538))(param_1,&DAT_0043a516);
        if (lVar5 != 0) {
          uVar6 = _JNIEnv::NewObject((_jclass *)param_1,p_Var1,lVar2,lVar4,lVar5);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar5);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
          (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var1);
          return uVar6;
        }
        (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
      }
    }
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var1);
  }
  return 0;
}


==================================================================

### FUNC 00187e98 (520 bytes) name=toChars

/* toChars(_JNIEnv*, _jstring*, char*, int) */

int toChars(_JNIEnv *param_1,_jstring *param_2,char *param_3,int param_4)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  void *__src;
  long lVar6;
  undefined1 local_6c [4];
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  lVar3 = (**(code **)(*(long *)param_1 + 0x30))(param_1,"java/lang/String");
  if (lVar3 != 0) {
    lVar4 = (**(code **)(*(long *)param_1 + 0x538))(param_1,"utf-8");
    if (lVar4 != 0) {
      lVar5 = (**(code **)(*(long *)param_1 + 0x108))
                        (param_1,lVar3,"getBytes","(Ljava/lang/String;)[B");
      if (lVar5 != 0) {
        lVar5 = _JNIEnv::CallObjectMethod((_jobject *)param_1,(_jmethodID *)param_2,lVar5,lVar4);
        if (lVar5 == 0) {
          lVar6 = *(long *)param_1;
          lVar5 = 0;
        }
        else {
          iVar2 = (**(code **)(*(long *)param_1 + 0x558))(param_1,lVar5);
          local_6c[0] = 0;
          if (param_4 <= iVar2) {
            iVar2 = param_4 + -1;
          }
          __src = (void *)(**(code **)(*(long *)param_1 + 0x5c0))(param_1,lVar5,local_6c);
          if (__src != (void *)0x0) {
            if (0 < iVar2) {
              memcpy(param_3,__src,(long)iVar2);
            }
            param_3[iVar2] = '\0';
            (**(code **)(*(long *)param_1 + 0x600))(param_1,lVar5,__src,0);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar5);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
            (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar3);
            goto LAB_00188068;
          }
          lVar6 = *(long *)param_1;
        }
        (**(code **)(lVar6 + 0xb8))(param_1,lVar5);
      }
      (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
    }
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar3);
  }
  iVar2 = 0;
LAB_00188068:
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001880a0 (160 bytes) name=CallObjectMethod

/* _JNIEnv::CallObjectMethod(_jobject*, _jmethodID*, ...) */

void _JNIEnv::CallObjectMethod(_jobject *param_1,_jmethodID *param_2,...)

{
  long lVar1;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar2;
  undefined1 auStack_a0 [8];
  undefined8 local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined1 *local_70;
  undefined1 **ppuStack_68;
  undefined1 *puStack_60;
  undefined8 uStack_58;
  
  lVar1 = tpidr_el0;
  lVar2 = *(long *)(lVar1 + 0x28);
  puStack_60 = auStack_a0;
  ppuStack_68 = &local_70;
  uStack_58 = 0xffffff80ffffffd8;
  local_98 = in_x3;
  local_90 = in_x4;
  uStack_88 = in_x5;
  local_80 = in_x6;
  uStack_78 = in_x7;
  local_70 = (undefined1 *)register0x00000008;
  (**(code **)(*(long *)param_1 + 0x118))();
  if (*(long *)(lVar1 + 0x28) == lVar2) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00188140 (140 bytes) name=GetJint

/* GetJint(_JNIEnv*, char const*, _jobject*) */

void GetJint(_JNIEnv *param_1,char *param_2,_jobject *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  
  uVar1 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
  uVar2 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar1,param_2,"I");
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
                    /* WARNING: Could not recover jumptable at 0x001881c8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(long *)param_1 + 800))(param_1,param_3,uVar2);
  return;
}


==================================================================

### FUNC 001881cc (140 bytes) name=GetJbool

/* GetJbool(_JNIEnv*, char const*, _jobject*) */

void GetJbool(_JNIEnv *param_1,char *param_2,_jobject *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  
  uVar1 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
  uVar2 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar1,param_2,&DAT_0043a29b);
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
                    /* WARNING: Could not recover jumptable at 0x00188254. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(long *)param_1 + 0x300))(param_1,param_3,uVar2);
  return;
}


==================================================================

### FUNC 00188258 (140 bytes) name=GetJfloat

/* GetJfloat(_JNIEnv*, char const*, _jobject*) */

void GetJfloat(_JNIEnv *param_1,char *param_2,_jobject *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  
  uVar1 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
  uVar2 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar1,param_2,"F");
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
                    /* WARNING: Could not recover jumptable at 0x001882e0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(long *)param_1 + 0x330))(param_1,param_3,uVar2);
  return;
}


==================================================================

### FUNC 001882e4 (224 bytes) name=GetJstring

/* GetJstring(_JNIEnv*, char const*, _jobject*, char*, unsigned long) */

void GetJstring(_JNIEnv *param_1,char *param_2,_jobject *param_3,char *param_4,ulong param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _jstring *p_Var3;
  
  uVar1 = (**(code **)(*(long *)param_1 + 0xf8))(param_1,param_3);
  uVar2 = (**(code **)(*(long *)param_1 + 0x2f0))(param_1,uVar1,param_2,"Ljava/lang/String;");
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
  p_Var3 = (_jstring *)(**(code **)(*(long *)param_1 + 0x2f8))(param_1,param_3,uVar2);
  if (p_Var3 != (_jstring *)0x0) {
    toChars(param_1,p_Var3,param_4,(int)param_5);
                    /* WARNING: Could not recover jumptable at 0x001883ac. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var3);
    return;
  }
  return;
}


==================================================================

### FUNC 001883c4 (188 bytes) name=createJObject

/* createJObject(char const*, _JNIEnv*, _jclass**, _jobject**) */

undefined8 createJObject(char *param_1,_JNIEnv *param_2,_jclass **param_3,_jobject **param_4)

{
  _jclass *p_Var1;
  long lVar2;
  _jobject *p_Var3;
  _jmethodID *p_Var4;
  
  p_Var1 = (_jclass *)(**(code **)(*(long *)param_2 + 0x30))(param_2,param_1);
  *param_3 = p_Var1;
  if (p_Var1 != (_jclass *)0x0) {
    lVar2 = (**(code **)(*(long *)param_2 + 0x108))(param_2,p_Var1,"<init>",&DAT_0043a3f7);
    p_Var4 = (_jmethodID *)*param_3;
    if (lVar2 == 0) {
      lVar2 = *(long *)param_2;
    }
    else {
      p_Var3 = (_jobject *)_JNIEnv::NewObject((_jclass *)param_2,p_Var4,lVar2);
      *param_4 = p_Var3;
      if (p_Var3 != (_jobject *)0x0) {
        return 1;
      }
      lVar2 = *(long *)param_2;
      p_Var4 = (_jmethodID *)*param_3;
    }
    (**(code **)(lVar2 + 0xb8))(param_2,p_Var4);
  }
  return 0;
}


==================================================================

### FUNC 00188480 (280 bytes) name=createBitmap

/* createBitmap(_JNIEnv*, int, int, char const*) */

undefined8 createBitmap(_JNIEnv *param_1,int param_2,int param_3,char *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _jmethodID *p_Var3;
  
  uVar1 = (**(code **)(*(long *)param_1 + 0x30))
                    (param_1,"android/graphics/Bitmap$Config",(ulong)(uint)param_3);
  uVar2 = (**(code **)(*(long *)param_1 + 0x480))
                    (param_1,uVar1,param_4,"Landroid/graphics/Bitmap$Config;");
  uVar2 = (**(code **)(*(long *)param_1 + 0x488))(param_1,uVar1,uVar2);
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
  p_Var3 = (_jmethodID *)(**(code **)(*(long *)param_1 + 0x30))(param_1,"android/graphics/Bitmap");
  uVar1 = (**(code **)(*(long *)param_1 + 0x388))
                    (param_1,p_Var3,"createBitmap",
                     "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
  uVar1 = _JNIEnv::CallStaticObjectMethod
                    ((_jclass *)param_1,p_Var3,uVar1,(ulong)(uint)param_2,(ulong)(uint)param_3,uVar2
                    );
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var3);
  return uVar1;
}


==================================================================

### FUNC 00188598 (160 bytes) name=CallStaticObjectMethod

/* _JNIEnv::CallStaticObjectMethod(_jclass*, _jmethodID*, ...) */

void _JNIEnv::CallStaticObjectMethod(_jclass *param_1,_jmethodID *param_2,...)

{
  long lVar1;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar2;
  undefined1 auStack_a0 [8];
  undefined8 local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined1 *local_70;
  undefined1 **ppuStack_68;
  undefined1 *puStack_60;
  undefined8 uStack_58;
  
  lVar1 = tpidr_el0;
  lVar2 = *(long *)(lVar1 + 0x28);
  puStack_60 = auStack_a0;
  ppuStack_68 = &local_70;
  uStack_58 = 0xffffff80ffffffd8;
  local_98 = in_x3;
  local_90 = in_x4;
  uStack_88 = in_x5;
  local_80 = in_x6;
  uStack_78 = in_x7;
  local_70 = (undefined1 *)register0x00000008;
  (**(code **)(*(long *)param_1 + 0x398))();
  if (*(long *)(lVar1 + 0x28) == lVar2) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00188638 (24 bytes) name=newGlobalObject

/* newGlobalObject(_JNIEnv*, _jobject*) */

undefined8 newGlobalObject(_JNIEnv *param_1,_jobject *param_2)

{
  undefined8 uVar1;
  
  if (param_2 != (_jobject *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x00188644. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (**(code **)(*(long *)param_1 + 0xa8))();
    return uVar1;
  }
  return 0;
}


==================================================================

### FUNC 00188650 (56 bytes) name=delGlobalObject

/* delGlobalObject(_JNIEnv*, _jobject**) */

void delGlobalObject(_JNIEnv *param_1,_jobject **param_2)

{
  if ((param_2 != (_jobject **)0x0) && (*param_2 != (_jobject *)0x0)) {
    (**(code **)(*(long *)param_1 + 0xb0))();
    *param_2 = (_jobject *)0x0;
  }
  return;
}


==================================================================

### FUNC 00188688 (380 bytes) name=newBitmap

/* newBitmap(_JNIEnv*, _jobject**, int, int) */

undefined8 newBitmap(_JNIEnv *param_1,_jobject **param_2,int param_3,int param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _jmethodID *p_Var3;
  long lVar4;
  _jobject *p_Var5;
  
  if ((param_2 != (_jobject **)0x0) && (*param_2 != (_jobject *)0x0)) {
    (**(code **)(*(long *)param_1 + 0xb0))
              (param_1,*param_2,(ulong)(uint)param_3,(ulong)(uint)param_4);
    *param_2 = (_jobject *)0x0;
  }
  uVar1 = (**(code **)(*(long *)param_1 + 0x30))(param_1,"android/graphics/Bitmap$Config");
  uVar2 = (**(code **)(*(long *)param_1 + 0x480))
                    (param_1,uVar1,"ARGB_8888","Landroid/graphics/Bitmap$Config;");
  uVar2 = (**(code **)(*(long *)param_1 + 0x488))(param_1,uVar1,uVar2);
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,uVar1);
  p_Var3 = (_jmethodID *)(**(code **)(*(long *)param_1 + 0x30))(param_1,"android/graphics/Bitmap");
  uVar1 = (**(code **)(*(long *)param_1 + 0x388))
                    (param_1,p_Var3,"createBitmap",
                     "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
  lVar4 = _JNIEnv::CallStaticObjectMethod
                    ((_jclass *)param_1,p_Var3,uVar1,(ulong)(uint)param_3,(ulong)(uint)param_4,uVar2
                    );
  (**(code **)(*(long *)param_1 + 0xb8))(param_1,p_Var3);
  if (lVar4 != 0) {
    p_Var5 = (_jobject *)(**(code **)(*(long *)param_1 + 0xa8))(param_1,lVar4);
    *param_2 = p_Var5;
    if (p_Var5 != (_jobject *)0x0) {
      return 1;
    }
    (**(code **)(*(long *)param_1 + 0xb8))(param_1,lVar4);
  }
  return 0;
}


==================================================================

### FUNC 00188804 (212 bytes) name=GenerateQuickPalette

/* GenerateQuickPalette(tagRGBQUAD const*, unsigned int*) */

void GenerateQuickPalette(tagRGBQUAD *param_1,uint *param_2)

{
  int iVar1;
  tagRGBQUAD *ptVar2;
  tagRGBQUAD tVar3;
  tagRGBQUAD tVar4;
  tagRGBQUAD tVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  
  lVar9 = 0;
  do {
    ptVar2 = param_1 + lVar9;
    tVar3 = ptVar2[2];
    tVar4 = ptVar2[1];
    tVar5 = *ptVar2;
    iVar6 = (uint)(byte)tVar4 * -0x57 + (uint)(byte)tVar3 * -0x2c + (uint)(byte)tVar5 * 0x83;
    iVar1 = iVar6 + 0x8000;
    if (iVar1 < -0xff) {
      iVar7 = 0;
    }
    else {
      iVar6 = iVar6 + 0x80ff;
      if (-1 < iVar1) {
        iVar6 = iVar1;
      }
      iVar7 = 0xff;
      if (iVar1 < 0x10000) {
        iVar7 = iVar6 >> 8;
      }
    }
    iVar6 = (uint)(byte)tVar4 * -0x6e + (uint)(byte)tVar3 * 0x83 + (uint)(byte)tVar5 * -0x15;
    iVar1 = iVar6 + 0x8000;
    if (iVar1 < -0xff) {
      iVar8 = 0;
    }
    else {
      iVar6 = iVar6 + 0x80ff;
      if (-1 < iVar1) {
        iVar6 = iVar1;
      }
      iVar8 = 0xff;
      if (iVar1 < 0x10000) {
        iVar8 = iVar6 >> 8;
      }
    }
    *(uint *)((long)param_2 + lVar9) =
         (uint)(byte)tVar3 * 0x4d + (uint)(byte)tVar4 * 0x96 + (uint)(byte)tVar5 * 0x1d >> 8 |
         iVar7 << 0x10 | iVar8 << 0x18;
    lVar9 = lVar9 + 4;
  } while (lVar9 != 0x400);
  return;
}


==================================================================

### FUNC 001888d8 (548 bytes) name=GetYUV420

/* GetYUV420(unsigned char const*, int, int, tagRGBQUAD const*, unsigned int*, unsigned int*) */

undefined8
GetYUV420(uchar *param_1,int param_2,int param_3,tagRGBQUAD *param_4,uint *param_5,uint *param_6)

{
  byte *pbVar1;
  int iVar2;
  tagRGBQUAD *ptVar3;
  uint uVar4;
  uint uVar5;
  tagRGBQUAD tVar6;
  tagRGBQUAD tVar7;
  tagRGBQUAD tVar8;
  byte bVar9;
  long lVar10;
  bool bVar11;
  int iVar12;
  ulong uVar13;
  ulong uVar14;
  undefined8 uVar15;
  long lVar16;
  uint *puVar17;
  byte *pbVar18;
  uint *puVar19;
  int iVar20;
  int iVar21;
  uint local_448 [256];
  long local_48;
  
  uVar14 = (ulong)(uint)param_3;
  lVar10 = tpidr_el0;
  local_48 = *(long *)(lVar10 + 0x28);
  uVar15 = 0;
  if ((param_5 != (uint *)0x0) && (param_6 != (uint *)0x0)) {
    lVar16 = 0;
    do {
      ptVar3 = param_4 + lVar16;
      tVar6 = ptVar3[2];
      tVar7 = ptVar3[1];
      tVar8 = *ptVar3;
      iVar12 = (uint)(byte)tVar7 * -0x57 + (uint)(byte)tVar6 * -0x2c + (uint)(byte)tVar8 * 0x83;
      iVar2 = iVar12 + 0x8000;
      if (iVar2 < -0xff) {
        iVar20 = 0;
      }
      else {
        iVar12 = iVar12 + 0x80ff;
        if (-1 < iVar2) {
          iVar12 = iVar2;
        }
        iVar20 = 0xff;
        if (iVar2 < 0x10000) {
          iVar20 = iVar12 >> 8;
        }
      }
      iVar12 = (uint)(byte)tVar7 * -0x6e + (uint)(byte)tVar6 * 0x83 + (uint)(byte)tVar8 * -0x15;
      iVar2 = iVar12 + 0x8000;
      if (iVar2 < -0xff) {
        iVar21 = 0;
      }
      else {
        iVar12 = iVar12 + 0x80ff;
        if (-1 < iVar2) {
          iVar12 = iVar2;
        }
        iVar21 = 0xff;
        if (iVar2 < 0x10000) {
          iVar21 = iVar12 >> 8;
        }
      }
      *(uint *)((long)local_448 + lVar16) =
           (uint)(byte)tVar6 * 0x4d + (uint)(byte)tVar7 * 0x96 + (uint)(byte)tVar8 * 0x1d >> 8 |
           iVar20 << 0x10 | iVar21 << 0x18;
      lVar16 = lVar16 + 4;
    } while (lVar16 != 0x400);
    if (0 < param_3) {
      iVar2 = param_2;
      if (param_2 < 0) {
        iVar2 = param_2 + 1;
      }
      iVar2 = iVar2 >> 1;
      lVar16 = (ulong)(iVar2 - 1) * 2 + 2;
      do {
        while( true ) {
          uVar13 = (long)(int)uVar14;
          puVar17 = param_5;
          while( true ) {
            uVar14 = uVar13 - 1;
            pbVar18 = param_1 + uVar14 * (long)param_2;
            bVar11 = 2 < param_2 + 1U;
            if ((uVar14 & 1) == 0) break;
            puVar19 = puVar17;
            iVar12 = iVar2;
            if (bVar11) {
              do {
                bVar9 = *pbVar18;
                pbVar1 = pbVar18 + 1;
                iVar12 = iVar12 + -1;
                pbVar18 = pbVar18 + 2;
                uVar4 = local_448[*pbVar1];
                *(char *)puVar19 = (char)local_448[bVar9];
                *(char *)((long)puVar19 + 1) = (char)uVar4;
                puVar19 = (uint *)((long)puVar19 + 2);
              } while (iVar12 != 0);
              puVar17 = (uint *)((long)puVar17 + lVar16);
            }
            bVar11 = (long)uVar13 < 2;
            uVar13 = uVar14;
            if (bVar11) goto LAB_00188ac8;
          }
          if (bVar11) break;
          param_5 = puVar17;
          if ((int)uVar13 < 2) goto LAB_00188ac8;
        }
        param_5 = (uint *)((long)puVar17 + lVar16);
        puVar19 = param_6;
        iVar12 = iVar2;
        do {
          bVar9 = *pbVar18;
          pbVar1 = pbVar18 + 1;
          iVar12 = iVar12 + -1;
          pbVar18 = pbVar18 + 2;
          uVar4 = local_448[bVar9];
          uVar5 = local_448[*pbVar1];
          *(char *)puVar17 = (char)uVar4;
          *(char *)((long)puVar17 + 1) = (char)uVar5;
          *(short *)puVar19 = (short)(uVar4 >> 0x10);
          puVar17 = (uint *)((long)puVar17 + 2);
          puVar19 = (uint *)((long)puVar19 + 2);
        } while (iVar12 != 0);
        param_6 = (uint *)((long)param_6 + ((ulong)(iVar2 - 1) + 1) * 2);
      } while (1 < (int)uVar13);
    }
LAB_00188ac8:
    uVar15 = 1;
  }
  if (*(long *)(lVar10 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar15;
}


==================================================================

### FUNC 00188afc (244 bytes) name=bufferToMat

/* bufferToMat(unsigned char const*, cv::Mat&) */

void bufferToMat(uchar *param_1,Mat *param_2)

{
  ulong uVar1;
  uchar *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  ulong uVar8;
  long lVar9;
  uchar *puVar10;
  uchar *puVar12;
  uchar *puVar13;
  uint uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  uchar *puVar11;
  
  uVar3 = *(uint *)(param_2 + 8);
  uVar4 = *(uint *)(param_2 + 0xc);
  if (((byte)param_2[1] >> 6 & 1) != 0) {
    memcpy(*(void **)(param_2 + 0x10),param_1,(long)(int)(uVar4 * uVar3));
    return;
  }
  if (0 < (int)uVar3) {
    uVar1 = (ulong)(uVar4 - 1) + 1;
    lVar9 = uVar1 - (uVar4 & 0x1f);
    uVar8 = 0;
    do {
      if (uVar4 != 0) {
        puVar12 = (uchar *)(*(long *)(param_2 + 0x10) + **(long **)(param_2 + 0x48) * uVar8);
        puVar11 = param_1;
        uVar14 = uVar4;
        if (uVar1 < 0x20) goto LAB_00188bb8;
        if (lVar9 == 0) goto LAB_00188bb8;
        if ((puVar12 < param_1 + uVar1) &&
           (param_1 < (uchar *)(*(long *)(param_2 + 0x10) + uVar1 +
                               **(long **)(param_2 + 0x48) * uVar8))) goto LAB_00188bb8;
        puVar2 = puVar12 + lVar9;
        puVar10 = param_1 + lVar9;
        puVar11 = param_1 + 0x10;
        puVar13 = puVar12 + 0x10;
        lVar7 = lVar9;
        do {
          puVar12 = puVar11 + -8;
          uVar15 = *(undefined8 *)(puVar11 + -0x10);
          uVar17 = *(undefined8 *)(puVar11 + 8);
          uVar16 = *(undefined8 *)puVar11;
          puVar11 = puVar11 + 0x20;
          lVar7 = lVar7 + -0x20;
          *(undefined8 *)(puVar13 + -8) = *(undefined8 *)puVar12;
          *(undefined8 *)(puVar13 + -0x10) = uVar15;
          *(undefined8 *)(puVar13 + 8) = uVar17;
          *(undefined8 *)puVar13 = uVar16;
          puVar13 = puVar13 + 0x20;
          uVar5 = uVar4 - (int)lVar9;
          puVar12 = puVar2;
          uVar6 = uVar4 & 0x1f;
        } while (lVar7 != 0);
        while (puVar11 = puVar10, uVar14 = uVar5, uVar6 != 0) {
LAB_00188bb8:
          puVar10 = puVar11 + 1;
          *puVar12 = *puVar11;
          uVar5 = uVar14 - 1;
          puVar12 = puVar12 + 1;
          uVar6 = uVar14 - 1;
        }
        param_1 = param_1 + uVar1;
      }
      uVar8 = uVar8 + 1;
    } while (uVar8 != uVar3);
  }
  return;
}


==================================================================

### FUNC 00188bf0 (244 bytes) name=matToBuffer

/* matToBuffer(cv::Mat const&, unsigned char*) */

void matToBuffer(Mat *param_1,uchar *param_2)

{
  ulong uVar1;
  uchar *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  ulong uVar8;
  long lVar9;
  uchar *puVar10;
  uchar *puVar11;
  uchar *puVar12;
  uchar *puVar13;
  uint uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  
  uVar3 = *(uint *)(param_1 + 8);
  uVar4 = *(uint *)(param_1 + 0xc);
  if (((byte)param_1[1] >> 6 & 1) != 0) {
    memcpy(param_2,*(void **)(param_1 + 0x10),(long)(int)(uVar4 * uVar3));
    return;
  }
  if (0 < (int)uVar3) {
    uVar1 = (ulong)(uVar4 - 1) + 1;
    lVar9 = uVar1 - (uVar4 & 0x1f);
    uVar8 = 0;
    do {
      if (uVar4 != 0) {
        puVar12 = (uchar *)(*(long *)(param_1 + 0x10) + **(long **)(param_1 + 0x48) * uVar8);
        puVar10 = param_2;
        uVar14 = uVar4;
        if (uVar1 < 0x20) goto LAB_00188ca8;
        if (lVar9 == 0) goto LAB_00188ca8;
        if ((param_2 < (uchar *)(*(long *)(param_1 + 0x10) + uVar1 +
                                **(long **)(param_1 + 0x48) * uVar8)) && (puVar12 < param_2 + uVar1)
           ) goto LAB_00188ca8;
        puVar2 = puVar12 + lVar9;
        puVar11 = param_2 + lVar9;
        puVar10 = param_2 + 0x10;
        puVar13 = puVar12 + 0x10;
        lVar7 = lVar9;
        do {
          puVar12 = puVar13 + -8;
          uVar15 = *(undefined8 *)(puVar13 + -0x10);
          uVar17 = *(undefined8 *)(puVar13 + 8);
          uVar16 = *(undefined8 *)puVar13;
          lVar7 = lVar7 + -0x20;
          puVar13 = puVar13 + 0x20;
          *(undefined8 *)(puVar10 + -8) = *(undefined8 *)puVar12;
          *(undefined8 *)(puVar10 + -0x10) = uVar15;
          *(undefined8 *)(puVar10 + 8) = uVar17;
          *(undefined8 *)puVar10 = uVar16;
          puVar10 = puVar10 + 0x20;
          uVar5 = uVar4 - (int)lVar9;
          puVar12 = puVar2;
          uVar6 = uVar4 & 0x1f;
        } while (lVar7 != 0);
        while (puVar10 = puVar11, uVar14 = uVar5, uVar6 != 0) {
LAB_00188ca8:
          puVar11 = puVar10 + 1;
          *puVar10 = *puVar12;
          uVar5 = uVar14 - 1;
          puVar12 = puVar12 + 1;
          uVar6 = uVar14 - 1;
        }
        param_2 = param_2 + uVar1;
      }
      uVar8 = uVar8 + 1;
    } while (uVar8 != uVar3);
  }
  return;
}


==================================================================

### FUNC 00188ce4 (172 bytes) name=matMaxMin

/* matMaxMin(cv::Mat const&, int&, int&) */

void matMaxMin(Mat *param_1,int *param_2,int *param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  byte bVar4;
  ulong uVar5;
  long lVar6;
  long lVar7;
  uint uVar8;
  byte *pbVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  
  uVar3 = *(uint *)param_1;
  uVar1 = *(uint *)(param_1 + 8);
  iVar2 = *(int *)(param_1 + 0xc);
  *param_2 = -0x7fffffff;
  if ((uVar3 & 0x4000) == 0) {
    uVar3 = 1;
  }
  else {
    uVar3 = uVar1;
    uVar1 = 1;
  }
  *param_3 = 0x7fffffff;
  if (0 < (int)uVar1) {
    lVar6 = *(long *)(param_1 + 0x10);
    uVar5 = 0;
    lVar7 = **(long **)(param_1 + 0x48);
    uVar8 = 0x7fffffff;
    do {
      if (uVar3 * iVar2 != 0) {
        pbVar9 = (byte *)(lVar6 + lVar7 * uVar5);
        iVar10 = -(uVar3 * iVar2);
        do {
          while( true ) {
            bVar4 = *pbVar9;
            uVar11 = (uint)bVar4;
            uVar12 = (uint)bVar4;
            if ((int)(uint)bVar4 <= *param_2) break;
            *param_2 = uVar12;
            uVar8 = *param_3;
            if (uVar8 != uVar11 && (int)uVar12 <= (int)uVar8) goto LAB_00188d70;
LAB_00188d54:
            iVar10 = iVar10 + 1;
            pbVar9 = pbVar9 + 1;
            if (iVar10 == 0) goto LAB_00188d80;
          }
          if ((int)uVar8 <= (int)uVar11) goto LAB_00188d54;
LAB_00188d70:
          *param_3 = uVar12;
          iVar10 = iVar10 + 1;
          pbVar9 = pbVar9 + 1;
          uVar8 = uVar11;
        } while (iVar10 != 0);
      }
LAB_00188d80:
      uVar5 = uVar5 + 1;
    } while (uVar5 != uVar1);
  }
  return;
}


==================================================================

### FUNC 00188d90 (1836 bytes) name=edgeImage

/* edgeImage(unsigned char const*, int, int, unsigned char*) */

void edgeImage(uchar *param_1,int param_2,int param_3,uchar *param_4)

{
  ulong uVar1;
  int *piVar2;
  uchar *puVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  ulong uVar12;
  long lVar13;
  uchar *puVar14;
  uchar *puVar15;
  uchar *puVar16;
  uchar *puVar17;
  uint uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined4 local_420;
  undefined4 local_41c;
  undefined4 auStack_418 [2];
  undefined4 *local_410;
  undefined8 uStack_408;
  undefined4 local_400 [2];
  undefined4 *local_3f8;
  undefined8 uStack_3f0;
  undefined4 local_3e8 [2];
  undefined4 *local_3e0;
  undefined8 uStack_3d8;
  undefined8 local_3d0;
  undefined4 *puStack_3c8;
  undefined8 uStack_3c0;
  undefined8 uStack_3b8;
  undefined4 local_3a8;
  int local_3a4;
  undefined8 uStack_3a0;
  undefined4 uStack_398;
  undefined4 uStack_394;
  undefined4 uStack_390;
  undefined4 uStack_38c;
  undefined4 uStack_388;
  undefined4 local_384;
  undefined4 uStack_380;
  undefined4 uStack_37c;
  undefined4 uStack_378;
  undefined4 local_374;
  undefined4 uStack_370;
  undefined4 local_36c;
  undefined8 *local_368;
  long *local_360;
  long local_358;
  undefined8 uStack_350;
  undefined4 local_348;
  int local_344;
  undefined8 uStack_340;
  undefined4 uStack_338;
  undefined4 local_334;
  undefined4 uStack_330;
  undefined4 uStack_32c;
  undefined4 uStack_328;
  undefined4 local_324;
  undefined4 uStack_320;
  undefined4 uStack_31c;
  undefined4 uStack_318;
  undefined4 local_314;
  undefined4 uStack_310;
  undefined4 local_30c;
  undefined8 *local_308;
  undefined8 *local_300;
  undefined8 local_2f8;
  undefined8 uStack_2f0;
  undefined4 local_2e8;
  int local_2e4;
  undefined8 uStack_2e0;
  undefined4 uStack_2d8;
  undefined4 local_2d4;
  undefined4 uStack_2d0;
  undefined4 uStack_2cc;
  undefined4 uStack_2c8;
  undefined4 local_2c4;
  undefined4 uStack_2c0;
  undefined4 uStack_2bc;
  undefined4 uStack_2b8;
  undefined4 local_2b4;
  undefined4 uStack_2b0;
  undefined4 local_2ac;
  undefined8 *local_2a8;
  undefined8 *local_2a0;
  undefined8 local_298;
  undefined8 uStack_290;
  undefined4 local_288;
  undefined8 local_284;
  undefined4 uStack_27c;
  undefined4 uStack_278;
  undefined4 local_274;
  undefined4 uStack_270;
  undefined4 uStack_26c;
  undefined4 uStack_268;
  undefined4 local_264;
  undefined4 uStack_260;
  undefined4 uStack_25c;
  undefined4 uStack_258;
  undefined4 local_254;
  undefined4 uStack_250;
  undefined4 local_24c;
  long local_248;
  undefined8 *local_240;
  undefined8 local_238;
  undefined8 local_230;
  long *local_228 [44];
  undefined4 local_c8;
  undefined8 local_c4;
  uint uStack_bc;
  undefined4 uStack_b8;
  undefined4 uStack_b4;
  undefined4 uStack_b0;
  undefined4 uStack_ac;
  undefined4 uStack_a8;
  undefined4 local_a4;
  undefined4 uStack_a0;
  undefined4 uStack_9c;
  undefined4 uStack_98;
  undefined4 local_94;
  undefined4 uStack_90;
  undefined4 local_8c;
  long local_88;
  long *local_80;
  long local_78;
  undefined8 local_70;
  
  lVar7 = tpidr_el0;
  lVar11 = *(long *)(lVar7 + 0x28);
  cv::Mat::zeros((Mat *)(ulong)(uint)param_3,param_2,0,(int)param_4);
  local_88 = (long)&local_c4 + 4;
  local_c8 = 0x42ff0000;
  local_94 = 0;
  uStack_90 = 0;
  uStack_bc = 0;
  uStack_b8 = 0;
  local_c4 = 0;
  uStack_9c = 0;
  uStack_98 = 0;
  local_a4 = 0;
  uStack_a0 = 0;
  uStack_ac = 0;
  uStack_a8 = 0;
  uStack_b4 = 0;
  uStack_b0 = 0;
  local_8c = 0;
  local_78 = 0;
  local_70 = 0;
  local_80 = &local_78;
  (**(code **)(*local_228[0] + 0x18))(local_228[0],local_228,&local_c8,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_228);
  if ((local_c8._1_1_ >> 6 & 1) == 0) {
    if (0 < (int)local_c4._4_4_) {
      uVar1 = (ulong)(uStack_bc - 1) + 1;
      lVar13 = uVar1 - (uStack_bc & 0x1f);
      uVar12 = 0;
      do {
        if (uStack_bc != 0) {
          puVar16 = (uchar *)(CONCAT44(uStack_b4,uStack_b8) + *local_80 * uVar12);
          puVar14 = param_1;
          uVar18 = uStack_bc;
          if (uVar1 < 0x20) goto LAB_00188ef4;
          if (lVar13 == 0) goto LAB_00188ef4;
          if ((puVar16 < param_1 + uVar1) &&
             (param_1 < (uchar *)(CONCAT44(uStack_b4,uStack_b8) + uVar1 + *local_80 * uVar12)))
          goto LAB_00188ef4;
          puVar3 = puVar16 + lVar13;
          puVar15 = param_1 + lVar13;
          puVar14 = param_1 + 0x10;
          puVar17 = puVar16 + 0x10;
          lVar10 = lVar13;
          do {
            puVar16 = puVar14 + -8;
            uVar19 = *(undefined8 *)(puVar14 + -0x10);
            uVar21 = *(undefined8 *)(puVar14 + 8);
            uVar20 = *(undefined8 *)puVar14;
            puVar14 = puVar14 + 0x20;
            lVar10 = lVar10 + -0x20;
            *(undefined8 *)(puVar17 + -8) = *(undefined8 *)puVar16;
            *(undefined8 *)(puVar17 + -0x10) = uVar19;
            *(undefined8 *)(puVar17 + 8) = uVar21;
            *(undefined8 *)puVar17 = uVar20;
            puVar17 = puVar17 + 0x20;
            uVar8 = uStack_bc - (int)lVar13;
            puVar16 = puVar3;
            uVar9 = uStack_bc & 0x1f;
          } while (lVar10 != 0);
          while (puVar14 = puVar15, uVar18 = uVar8, uVar9 != 0) {
LAB_00188ef4:
            puVar15 = puVar14 + 1;
            *puVar16 = *puVar14;
            uVar8 = uVar18 - 1;
            puVar16 = puVar16 + 1;
            uVar9 = uVar18 - 1;
          }
          param_1 = param_1 + uVar1;
        }
        uVar12 = uVar12 + 1;
      } while (uVar12 != local_c4._4_4_);
    }
  }
  else {
    memcpy((void *)CONCAT44(uStack_b4,uStack_b8),param_1,(long)(int)(uStack_bc * local_c4._4_4_));
  }
  uStack_2e0 = &local_c8;
  local_248 = (long)&local_284 + 4;
  uStack_2d8 = 0;
  local_2d4 = 0;
  local_288 = 0x42ff0000;
  local_254 = 0;
  uStack_250 = 0;
  uStack_338 = 0;
  local_334 = 0;
  uStack_25c = 0;
  uStack_258 = 0;
  local_264 = 0;
  uStack_260 = 0;
  uStack_26c = 0;
  uStack_268 = 0;
  local_274 = 0;
  uStack_270 = 0;
  uStack_27c = 0;
  uStack_278 = 0;
  local_284 = 0;
  local_24c = 0;
  local_2e8 = 0x1010000;
  local_348 = 0x2010000;
  local_238 = 0;
  local_230 = 0;
  local_240 = &local_238;
  uStack_340 = &local_288;
  cv::medianBlur((_InputArray *)&local_2e8,(_OutputArray *)&local_348,3);
  local_2a8 = &uStack_2e0;
  local_2e8 = 0x42ff0000;
  uStack_338 = 0;
  local_334 = 0;
  local_348 = 0x1010000;
  uStack_398 = 0;
  uStack_394 = 0;
  local_3a8 = 0x2010000;
  local_2b4 = 0;
  uStack_2b0 = 0;
  uStack_2bc = 0;
  uStack_2b8 = 0;
  local_2c4 = 0;
  uStack_2c0 = 0;
  uStack_2cc = 0;
  uStack_2c8 = 0;
  local_2d4 = 0;
  uStack_2d0 = 0;
  uStack_2e0._4_4_ = 0;
  uStack_2d8 = 0;
  local_2e4 = 0;
  uStack_2e0._0_4_ = 0;
  local_2ac = 0;
  local_298 = 0;
  uStack_290 = 0;
  local_2a0 = &local_298;
  uStack_3a0 = &local_2e8;
  uStack_340 = &local_288;
  cv::Canny((_InputArray *)&local_348,(_OutputArray *)&local_3a8,30.0,DAT_0043a5f0,3,true);
  local_308 = &uStack_340;
  local_348 = 0x42ff0000;
  local_314 = 0;
  uStack_310 = 0;
  uStack_31c = 0;
  uStack_318 = 0;
  local_324 = 0;
  uStack_320 = 0;
  uStack_32c = 0;
  uStack_328 = 0;
  local_334 = 0;
  uStack_330 = 0;
  uStack_340._4_4_ = 0;
  uStack_338 = 0;
  local_344 = 0;
  uStack_340._0_4_ = 0;
  local_368 = &uStack_3a0;
  uStack_408 = 0;
  local_3e0 = &local_2e8;
  local_3a8 = 0x42ff0000;
  uStack_38c = 0;
  uStack_388 = 0;
  uStack_394 = 0;
  uStack_390 = 0;
  uStack_3a0._4_4_ = 0;
  uStack_398 = 0;
  local_3a4 = 0;
  uStack_3a0._0_4_ = 0;
  local_374 = 0;
  uStack_370 = 0;
  uStack_37c = 0;
  uStack_378 = 0;
  local_384 = 0;
  uStack_380 = 0;
  local_30c = 0;
  uStack_3d8 = 0;
  uStack_2f0 = 0;
  local_2f8 = 0;
  local_3e8[0] = 0x1010000;
  uStack_3f0 = 0;
  local_400[0] = 0x2010000;
  local_36c = 0;
  local_358 = 0;
  uStack_350 = 0;
  local_420 = 0xffffffff;
  local_41c = 0xffffffff;
  auStack_418[0] = 0x1010000;
  puStack_3c8 = (undefined4 *)0x7fefffffffffffff;
  local_3d0 = 0x7fefffffffffffff;
  uStack_3b8 = 0x7fefffffffffffff;
  uStack_3c0 = 0x7fefffffffffffff;
  local_410 = &local_3a8;
  local_3f8 = &local_348;
  local_360 = &local_358;
  local_300 = &local_2f8;
  cv::dilate(local_3e8,local_400,auStack_418,&local_420,1,0,&local_3d0);
  if (CONCAT44(local_36c,uStack_370) != 0) {
    piVar2 = (int *)(CONCAT44(local_36c,uStack_370) + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_3a8);
    }
  }
  uStack_370 = 0;
  local_36c = 0;
  uStack_390 = 0;
  uStack_38c = 0;
  uStack_398 = 0;
  uStack_394 = 0;
  uStack_380 = 0;
  uStack_37c = 0;
  uStack_388 = 0;
  local_384 = 0;
  if (0 < local_3a4) {
    lVar13 = 0;
    do {
      *(undefined4 *)((long)local_368 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < local_3a4);
  }
  if (local_360 != &local_358) {
    cv::fastFree(local_360);
  }
  local_3e0 = &local_3a8;
  local_3a8 = 0x42ff0000;
  puStack_3c8 = &local_348;
  local_368 = &uStack_3a0;
  local_374 = 0;
  uStack_370 = 0;
  local_3d0 = CONCAT44(local_3d0._4_4_,0x1010000);
  uStack_3d8 = 0;
  local_3e8[0] = 0x2010000;
  uStack_37c = 0;
  uStack_378 = 0;
  local_384 = 0;
  uStack_380 = 0;
  uStack_38c = 0;
  uStack_388 = 0;
  uStack_394 = 0;
  uStack_390 = 0;
  uStack_3a0._4_4_ = 0;
  uStack_398 = 0;
  local_3a4 = 0;
  uStack_3a0._0_4_ = 0;
  local_36c = 0;
  uStack_3c0 = 0;
  local_358 = 0;
  uStack_350 = 0;
  local_360 = &local_358;
  cv::medianBlur((_InputArray *)&local_3d0,(_OutputArray *)local_3e8,3);
  if ((local_3a8._1_1_ >> 6 & 1) == 0) {
    if (0 < (int)(uint)uStack_3a0) {
      uVar1 = (ulong)(uStack_3a0._4_4_ - 1) + 1;
      lVar13 = uVar1 - (uStack_3a0._4_4_ & 0x1f);
      uVar12 = 0;
      do {
        if (uStack_3a0._4_4_ != 0) {
          puVar16 = (uchar *)(CONCAT44(uStack_394,uStack_398) + *local_360 * uVar12);
          puVar14 = param_4;
          uVar18 = uStack_3a0._4_4_;
          if (uVar1 < 0x20) goto LAB_0018921c;
          if (lVar13 == 0) goto LAB_0018921c;
          if ((param_4 < (uchar *)(CONCAT44(uStack_394,uStack_398) + uVar1 + *local_360 * uVar12))
             && (puVar16 < param_4 + uVar1)) goto LAB_0018921c;
          puVar3 = puVar16 + lVar13;
          puVar15 = param_4 + lVar13;
          puVar14 = param_4 + 0x10;
          puVar17 = puVar16 + 0x10;
          lVar10 = lVar13;
          do {
            puVar16 = puVar17 + -8;
            uVar19 = *(undefined8 *)(puVar17 + -0x10);
            uVar21 = *(undefined8 *)(puVar17 + 8);
            uVar20 = *(undefined8 *)puVar17;
            lVar10 = lVar10 + -0x20;
            puVar17 = puVar17 + 0x20;
            *(undefined8 *)(puVar14 + -8) = *(undefined8 *)puVar16;
            *(undefined8 *)(puVar14 + -0x10) = uVar19;
            *(undefined8 *)(puVar14 + 8) = uVar21;
            *(undefined8 *)puVar14 = uVar20;
            puVar14 = puVar14 + 0x20;
            uVar8 = uStack_3a0._4_4_ - (int)lVar13;
            puVar16 = puVar3;
            uVar9 = uStack_3a0._4_4_ & 0x1f;
          } while (lVar10 != 0);
          while (puVar14 = puVar15, uVar18 = uVar8, uVar9 != 0) {
LAB_0018921c:
            puVar15 = puVar14 + 1;
            *puVar14 = *puVar16;
            uVar8 = uVar18 - 1;
            puVar16 = puVar16 + 1;
            uVar9 = uVar18 - 1;
          }
          param_4 = param_4 + uVar1;
        }
        uVar12 = uVar12 + 1;
      } while (uVar12 != (uint)uStack_3a0);
    }
    lVar13 = CONCAT44(local_36c,uStack_370);
  }
  else {
    memcpy(param_4,(void *)CONCAT44(uStack_394,uStack_398),
           (long)(int)(uStack_3a0._4_4_ * (uint)uStack_3a0));
    lVar13 = CONCAT44(local_36c,uStack_370);
  }
  if (lVar13 != 0) {
    piVar2 = (int *)(lVar13 + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_3a8);
    }
  }
  uStack_370 = 0;
  local_36c = 0;
  uStack_390 = 0;
  uStack_38c = 0;
  uStack_398 = 0;
  uStack_394 = 0;
  uStack_380 = 0;
  uStack_37c = 0;
  uStack_388 = 0;
  local_384 = 0;
  if (0 < local_3a4) {
    lVar13 = 0;
    do {
      *(undefined4 *)((long)local_368 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < local_3a4);
  }
  if (local_360 != &local_358) {
    cv::fastFree(local_360);
  }
  if (CONCAT44(local_30c,uStack_310) != 0) {
    piVar2 = (int *)(CONCAT44(local_30c,uStack_310) + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_348);
    }
  }
  uStack_310 = 0;
  local_30c = 0;
  uStack_330 = 0;
  uStack_32c = 0;
  uStack_338 = 0;
  local_334 = 0;
  uStack_320 = 0;
  uStack_31c = 0;
  uStack_328 = 0;
  local_324 = 0;
  if (0 < local_344) {
    lVar13 = 0;
    do {
      *(undefined4 *)((long)local_308 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < local_344);
  }
  if (local_300 != &local_2f8) {
    cv::fastFree(local_300);
  }
  if (CONCAT44(local_2ac,uStack_2b0) != 0) {
    piVar2 = (int *)(CONCAT44(local_2ac,uStack_2b0) + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_2e8);
    }
  }
  uStack_2b0 = 0;
  local_2ac = 0;
  uStack_2d0 = 0;
  uStack_2cc = 0;
  uStack_2d8 = 0;
  local_2d4 = 0;
  uStack_2c0 = 0;
  uStack_2bc = 0;
  uStack_2c8 = 0;
  local_2c4 = 0;
  if (0 < local_2e4) {
    lVar13 = 0;
    do {
      *(undefined4 *)((long)local_2a8 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < local_2e4);
  }
  if (local_2a0 != &local_298) {
    cv::fastFree(local_2a0);
  }
  if (CONCAT44(local_24c,uStack_250) != 0) {
    piVar2 = (int *)(CONCAT44(local_24c,uStack_250) + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_288);
    }
  }
  uStack_250 = 0;
  local_24c = 0;
  uStack_270 = 0;
  uStack_26c = 0;
  uStack_278 = 0;
  local_274 = 0;
  uStack_260 = 0;
  uStack_25c = 0;
  uStack_268 = 0;
  local_264 = 0;
  if (0 < (int)local_284) {
    lVar13 = 0;
    do {
      *(undefined4 *)(local_248 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < (int)local_284);
  }
  if (local_240 != &local_238) {
    cv::fastFree(local_240);
  }
  if (CONCAT44(local_8c,uStack_90) != 0) {
    piVar2 = (int *)(CONCAT44(local_8c,uStack_90) + 0x14);
    do {
      iVar4 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar4 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar4 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_c8);
    }
  }
  uStack_90 = 0;
  local_8c = 0;
  uStack_b0 = 0;
  uStack_ac = 0;
  uStack_b8 = 0;
  uStack_b4 = 0;
  uStack_a0 = 0;
  uStack_9c = 0;
  uStack_a8 = 0;
  local_a4 = 0;
  if (0 < (int)local_c4) {
    lVar13 = 0;
    do {
      *(undefined4 *)(local_88 + lVar13 * 4) = 0;
      lVar13 = lVar13 + 1;
    } while (lVar13 < (int)local_c4);
  }
  if (local_80 != &local_78) {
    cv::fastFree(local_80);
  }
  if (*(long *)(lVar7 + 0x28) != lVar11) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0018982c (364 bytes) name=~MatExpr

/* cv::MatExpr::~MatExpr() */

void __thiscall cv::MatExpr::~MatExpr(MatExpr *this)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  long lVar6;
  
  if (*(long *)(this + 0x108) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x108) + 0x14);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar2 + -1 == 0) {
      Mat::deallocate((Mat *)(this + 0xd0));
    }
  }
  *(undefined8 *)(this + 0x108) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  if (0 < *(int *)(this + 0xd4)) {
    lVar5 = *(long *)(this + 0x110);
    lVar6 = 0;
    do {
      *(undefined4 *)(lVar5 + lVar6 * 4) = 0;
      lVar6 = lVar6 + 1;
    } while (lVar6 < *(int *)(this + 0xd4));
  }
  if (*(MatExpr **)(this + 0x118) != this + 0x120) {
    fastFree(*(MatExpr **)(this + 0x118));
  }
  if (*(long *)(this + 0xa8) != 0) {
    piVar1 = (int *)(*(long *)(this + 0xa8) + 0x14);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar2 + -1 == 0) {
      Mat::deallocate((Mat *)(this + 0x70));
    }
  }
  *(undefined8 *)(this + 0xa8) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  if (0 < *(int *)(this + 0x74)) {
    lVar5 = *(long *)(this + 0xb0);
    lVar6 = 0;
    do {
      *(undefined4 *)(lVar5 + lVar6 * 4) = 0;
      lVar6 = lVar6 + 1;
    } while (lVar6 < *(int *)(this + 0x74));
  }
  if (*(MatExpr **)(this + 0xb8) != this + 0xc0) {
    fastFree(*(MatExpr **)(this + 0xb8));
  }
  if (*(long *)(this + 0x48) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x48) + 0x14);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar2 + -1 == 0) {
      Mat::deallocate((Mat *)(this + 0x10));
    }
  }
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  if (0 < *(int *)(this + 0x14)) {
    lVar5 = *(long *)(this + 0x50);
    lVar6 = 0;
    do {
      *(undefined4 *)(lVar5 + lVar6 * 4) = 0;
      lVar6 = lVar6 + 1;
    } while (lVar6 < *(int *)(this + 0x14));
  }
  if (*(MatExpr **)(this + 0x58) != this + 0x60) {
    fastFree(*(MatExpr **)(this + 0x58));
  }
  return;
}


==================================================================

### FUNC 001899a4 (2388 bytes) name=labelImage

/* labelImage(unsigned char const*, int, int, float, unsigned char*) */

void labelImage(uchar *param_1,int param_2,int param_3,float param_4,uchar *param_5)

{
  int *piVar1;
  uchar *puVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  uint uVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 *puVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  ulong uVar14;
  long lVar15;
  uchar *puVar16;
  uchar *puVar17;
  uchar *puVar18;
  uchar *puVar19;
  uint uVar20;
  ulong uVar21;
  undefined8 uVar22;
  double dVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined8 local_5d0;
  undefined4 local_5c8 [2];
  void **local_5c0;
  undefined8 uStack_5b8;
  undefined4 local_5b0 [2];
  undefined8 **local_5a8;
  undefined8 uStack_5a0;
  undefined8 local_598;
  undefined4 local_590;
  undefined4 uStack_58c;
  undefined4 local_588 [2];
  void **local_580;
  undefined8 uStack_578;
  void *local_570;
  undefined4 *local_568;
  undefined8 local_560;
  undefined8 *local_558;
  undefined8 *local_550;
  undefined8 local_548;
  long *local_540 [44];
  undefined8 local_3e0;
  undefined8 **ppuStack_3d8;
  undefined8 local_3d0;
  undefined8 uStack_3c8;
  undefined8 local_3b8;
  undefined8 uStack_3b0;
  undefined4 uStack_3a8;
  undefined4 uStack_3a4;
  undefined4 uStack_3a0;
  undefined4 uStack_39c;
  undefined4 uStack_398;
  undefined4 local_394;
  undefined4 uStack_390;
  undefined4 uStack_38c;
  undefined4 uStack_388;
  undefined4 local_384;
  undefined4 uStack_380;
  undefined4 local_37c;
  undefined8 *local_378;
  long *local_370;
  long local_368;
  undefined8 local_360;
  undefined4 local_358;
  int local_354;
  undefined8 uStack_350;
  undefined4 uStack_348;
  undefined4 uStack_344;
  undefined4 uStack_340;
  undefined4 uStack_33c;
  undefined4 uStack_338;
  undefined4 local_334;
  undefined4 uStack_330;
  undefined4 uStack_32c;
  undefined4 uStack_328;
  undefined4 local_324;
  undefined4 uStack_320;
  undefined4 local_31c;
  undefined8 *local_318;
  undefined8 *local_310;
  undefined8 local_308;
  undefined8 uStack_300;
  undefined4 local_2f8;
  int local_2f4;
  undefined8 uStack_2f0;
  undefined4 uStack_2e8;
  undefined4 uStack_2e4;
  undefined4 uStack_2e0;
  undefined4 uStack_2dc;
  undefined4 uStack_2d8;
  undefined4 local_2d4;
  undefined4 uStack_2d0;
  undefined4 uStack_2cc;
  undefined4 uStack_2c8;
  undefined4 local_2c4;
  undefined4 uStack_2c0;
  undefined4 local_2bc;
  undefined8 *local_2b8;
  undefined8 *local_2b0;
  undefined8 local_2a8;
  undefined8 local_2a0;
  undefined4 local_298;
  undefined8 local_294;
  undefined4 uStack_28c;
  undefined4 uStack_288;
  undefined4 local_284;
  undefined4 uStack_280;
  undefined4 uStack_27c;
  undefined4 uStack_278;
  undefined4 local_274;
  undefined4 uStack_270;
  undefined4 uStack_26c;
  undefined4 uStack_268;
  undefined4 local_264;
  undefined4 uStack_260;
  undefined4 local_25c;
  long local_258;
  undefined8 *local_250;
  undefined8 local_248;
  undefined8 local_240;
  long *local_238 [44];
  undefined4 local_d8;
  undefined8 local_d4;
  uint uStack_cc;
  undefined4 uStack_c8;
  undefined4 uStack_c4;
  undefined4 uStack_c0;
  undefined4 uStack_bc;
  undefined4 uStack_b8;
  undefined4 local_b4;
  undefined4 uStack_b0;
  undefined4 uStack_ac;
  undefined4 uStack_a8;
  undefined4 local_a4;
  undefined4 uStack_a0;
  undefined4 local_9c;
  long local_98;
  long *local_90;
  long local_88;
  undefined8 uStack_80;
  
  lVar5 = tpidr_el0;
  lVar12 = *(long *)(lVar5 + 0x28);
  cv::Mat::zeros((Mat *)(ulong)(uint)param_3,param_2,0,(int)param_5);
  local_98 = (long)&local_d4 + 4;
  local_d8 = 0x42ff0000;
  local_a4 = 0;
  uStack_a0 = 0;
  uStack_cc = 0;
  uStack_c8 = 0;
  local_d4 = 0;
  uStack_ac = 0;
  uStack_a8 = 0;
  local_b4 = 0;
  uStack_b0 = 0;
  uStack_bc = 0;
  uStack_b8 = 0;
  uStack_c4 = 0;
  uStack_c0 = 0;
  local_9c = 0;
  local_88 = 0;
  uStack_80 = 0;
  local_90 = &local_88;
  (**(code **)(*local_238[0] + 0x18))(local_238[0],local_238,&local_d8,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_238);
  if ((local_d8._1_1_ >> 6 & 1) == 0) {
    if (0 < (int)local_d4._4_4_) {
      uVar21 = (ulong)(uStack_cc - 1) + 1;
      lVar15 = uVar21 - (uStack_cc & 0x1f);
      uVar14 = 0;
      do {
        if (uStack_cc != 0) {
          puVar18 = (uchar *)(CONCAT44(uStack_c4,uStack_c8) + *local_90 * uVar14);
          puVar16 = param_1;
          uVar20 = uStack_cc;
          if (uVar21 < 0x20) goto LAB_00189b0c;
          if (lVar15 == 0) goto LAB_00189b0c;
          if ((puVar18 < param_1 + uVar21) &&
             (param_1 < (uchar *)(CONCAT44(uStack_c4,uStack_c8) + uVar21 + *local_90 * uVar14)))
          goto LAB_00189b0c;
          puVar2 = puVar18 + lVar15;
          puVar17 = param_1 + lVar15;
          puVar16 = param_1 + 0x10;
          puVar19 = puVar18 + 0x10;
          lVar11 = lVar15;
          do {
            puVar18 = puVar16 + -8;
            uVar22 = *(undefined8 *)(puVar16 + -0x10);
            uVar25 = *(undefined8 *)(puVar16 + 8);
            uVar24 = *(undefined8 *)puVar16;
            puVar16 = puVar16 + 0x20;
            lVar11 = lVar11 + -0x20;
            *(undefined8 *)(puVar19 + -8) = *(undefined8 *)puVar18;
            *(undefined8 *)(puVar19 + -0x10) = uVar22;
            *(undefined8 *)(puVar19 + 8) = uVar25;
            *(undefined8 *)puVar19 = uVar24;
            puVar19 = puVar19 + 0x20;
            uVar6 = uStack_cc - (int)lVar15;
            puVar18 = puVar2;
            uVar9 = uStack_cc & 0x1f;
          } while (lVar11 != 0);
          while (puVar16 = puVar17, uVar20 = uVar6, uVar9 != 0) {
LAB_00189b0c:
            puVar17 = puVar16 + 1;
            *puVar18 = *puVar16;
            uVar6 = uVar20 - 1;
            puVar18 = puVar18 + 1;
            uVar9 = uVar20 - 1;
          }
          param_1 = param_1 + uVar21;
        }
        uVar14 = uVar14 + 1;
      } while (uVar14 != local_d4._4_4_);
    }
  }
  else {
    memcpy((void *)CONCAT44(uStack_c4,uStack_c8),param_1,(long)(int)(uStack_cc * local_d4._4_4_));
  }
  uStack_2f0 = &local_d8;
  local_258 = (long)&local_294 + 4;
  local_298 = 0x42ff0000;
  local_264 = 0;
  uStack_260 = 0;
  uStack_2e8 = 0;
  uStack_2e4 = 0;
  uStack_348 = 0;
  uStack_344 = 0;
  uStack_26c = 0;
  uStack_268 = 0;
  local_274 = 0;
  uStack_270 = 0;
  uStack_27c = 0;
  uStack_278 = 0;
  local_284 = 0;
  uStack_280 = 0;
  uStack_28c = 0;
  uStack_288 = 0;
  local_294 = 0;
  local_25c = 0;
  local_2f8 = 0x1010000;
  local_358 = 0x2010000;
  local_248 = 0;
  local_240 = 0;
  local_250 = &local_248;
  uStack_350 = &local_298;
  cv::threshold((_InputArray *)&local_2f8,(_OutputArray *)&local_358,0.0,DAT_0043a5f8,8);
  local_2b8 = &uStack_2f0;
  local_2f8 = 0x42ff0000;
  uStack_348 = 0;
  uStack_344 = 0;
  local_358 = 0x1010000;
  uStack_3a8 = 0;
  uStack_3a4 = 0;
  local_3b8._0_4_ = 0x2010000;
  local_2c4 = 0;
  uStack_2c0 = 0;
  uStack_2cc = 0;
  uStack_2c8 = 0;
  local_2d4 = 0;
  uStack_2d0 = 0;
  uStack_2dc = 0;
  uStack_2d8 = 0;
  uStack_2e4 = 0;
  uStack_2e0 = 0;
  uStack_2f0._4_4_ = 0;
  uStack_2e8 = 0;
  local_2f4 = 0;
  uStack_2f0._0_4_ = 0;
  local_2bc = 0;
  local_2a8 = 0;
  local_2a0 = 0;
  local_2b0 = &local_2a8;
  uStack_3b0 = &local_2f8;
  uStack_350 = &local_298;
  cv::medianBlur((_InputArray *)&local_358,(_OutputArray *)&local_3b8,3);
  local_318 = &uStack_350;
  local_358 = 0x42ff0000;
  local_324 = 0;
  uStack_320 = 0;
  uStack_32c = 0;
  uStack_328 = 0;
  local_334 = 0;
  uStack_330 = 0;
  uStack_33c = 0;
  uStack_338 = 0;
  uStack_344 = 0;
  uStack_340 = 0;
  uStack_350._4_4_ = 0;
  uStack_348 = 0;
  local_354 = 0;
  uStack_350._0_4_ = 0;
  local_558 = (undefined8 *)CONCAT44(local_558._4_4_,0x1010000);
  local_550 = (undefined8 *)&local_2f8;
  local_3b8._0_4_ = 0x42ff0000;
  local_378 = &uStack_3b0;
  local_588[0] = 0x1010000;
  local_31c = 0;
  uStack_300 = 0;
  local_308 = 0;
  uStack_39c = 0;
  uStack_398 = 0;
  uStack_3a4 = 0;
  uStack_3a0 = 0;
  uStack_3b0._4_4_ = 0;
  uStack_3a8 = 0;
  local_3b8._4_4_ = 0;
  uStack_3b0._0_4_ = 0;
  uStack_38c = 0;
  uStack_388 = 0;
  local_394 = 0;
  uStack_390 = 0;
  local_548 = 0;
  local_560 = 0;
  local_570 = (void *)CONCAT44(local_570._4_4_,0x2010000);
  local_384 = 0;
  uStack_380 = 0;
  uStack_578 = 0;
  local_37c = 0;
  local_368 = 0;
  local_360 = 0;
  local_590 = 0xffffffff;
  uStack_58c = 0xffffffff;
  ppuStack_3d8 = (undefined8 **)0x7fefffffffffffff;
  local_3e0 = 0x7fefffffffffffff;
  uStack_3c8 = 0x7fefffffffffffff;
  local_3d0 = 0x7fefffffffffffff;
  local_580 = (void **)&local_3b8;
  local_568 = &local_358;
  local_370 = &local_368;
  local_310 = &local_308;
  cv::dilate(&local_558,&local_570,local_588,&local_590,1,0,&local_3e0);
  if (CONCAT44(local_37c,uStack_380) != 0) {
    piVar1 = (int *)(CONCAT44(local_37c,uStack_380) + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_3b8);
    }
  }
  uStack_380 = 0;
  local_37c = 0;
  uStack_3a0 = 0;
  uStack_39c = 0;
  uStack_3a8 = 0;
  uStack_3a4 = 0;
  uStack_390 = 0;
  uStack_38c = 0;
  uStack_398 = 0;
  local_394 = 0;
  if (0 < local_3b8._4_4_) {
    lVar15 = 0;
    do {
      *(undefined4 *)((long)local_378 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < local_3b8._4_4_);
  }
  if (local_370 != &local_368) {
    cv::fastFree(local_370);
  }
  uStack_3b0 = &local_358;
  local_3e0 = CONCAT44(local_3e0._4_4_,0x8204000c);
  ppuStack_3d8 = &local_558;
  local_588[0] = 0x8203001c;
  local_580 = &local_570;
  local_550 = (undefined8 *)0x0;
  local_548 = 0;
  local_560 = 0;
  local_558 = (undefined8 *)0x0;
  local_570 = (void *)0x0;
  local_568 = (undefined4 *)0x0;
  uStack_3a8 = 0;
  uStack_3a4 = 0;
  local_3d0 = 0;
  local_3b8._0_4_ = 0x3010000;
  local_598 = 0;
  uStack_578 = 0;
  iVar13 = 0;
  cv::findContours(&local_3b8,&local_3e0,local_588,0,2,&local_598);
  cv::Mat::zeros((Mat *)(ulong)(uint)param_3,param_2,0,iVar13);
  local_378 = &uStack_3b0;
  local_3b8._0_4_ = 0x42ff0000;
  local_384 = 0;
  uStack_380 = 0;
  uStack_3b0._4_4_ = 0;
  uStack_3a8 = 0;
  local_3b8._4_4_ = 0;
  uStack_3b0._0_4_ = 0;
  uStack_38c = 0;
  uStack_388 = 0;
  local_394 = 0;
  uStack_390 = 0;
  uStack_39c = 0;
  uStack_398 = 0;
  uStack_3a4 = 0;
  uStack_3a0 = 0;
  local_37c = 0;
  local_368 = 0;
  local_360 = 0;
  local_370 = &local_368;
  (**(code **)(*local_540[0] + 0x18))(local_540[0],local_540,&local_3b8,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_540);
  iVar13 = (int)((long)local_550 - (long)local_558 >> 3) * -0x55555555;
  if (0 < iVar13) {
    lVar15 = 0;
    uVar21 = 0;
    while( true ) {
      ppuStack_3d8 = (undefined8 **)((long)local_558 + lVar15);
      local_3d0 = 0;
      local_3e0 = CONCAT44(local_3e0._4_4_,0x8103000c);
      dVar23 = (double)cv::contourArea((_InputArray *)&local_3e0,false);
      if ((double)param_4 <= dVar23) {
        local_588[0] = 0x3010000;
        local_580 = (void **)&local_3b8;
        uStack_578 = 0;
        local_5b0[0] = 0x8104000c;
        uStack_5a0 = 0;
        local_3e0 = 0x406fe00000000000;
        local_3d0 = 0;
        uStack_3c8 = 0;
        ppuStack_3d8 = (undefined8 **)0x0;
        uStack_5b8 = 0;
        local_5d0 = 0;
        local_5c8[0] = 0x8103001c;
        local_5c0 = &local_570;
        local_5a8 = &local_558;
        cv::drawContours(local_588,local_5b0,uVar21 & 0xffffffff,&local_3e0,0xffffffff,8,local_5c8,
                         0x7fffffff,&local_5d0);
      }
      uVar21 = uVar21 + 1;
      if ((long)iVar13 <= (long)uVar21) break;
      lVar15 = lVar15 + 0x18;
    }
  }
  if ((local_3b8._1_1_ >> 6 & 1) == 0) {
    if (0 < (int)(uint)uStack_3b0) {
      uVar21 = (ulong)(uStack_3b0._4_4_ - 1) + 1;
      lVar15 = uVar21 - (uStack_3b0._4_4_ & 0x1f);
      uVar14 = 0;
      do {
        if (uStack_3b0._4_4_ != 0) {
          puVar18 = (uchar *)(CONCAT44(uStack_3a4,uStack_3a8) + *local_370 * uVar14);
          puVar16 = param_5;
          uVar20 = uStack_3b0._4_4_;
          if (uVar21 < 0x20) goto LAB_0018a000;
          if (lVar15 == 0) goto LAB_0018a000;
          if ((param_5 < (uchar *)(CONCAT44(uStack_3a4,uStack_3a8) + uVar21 + *local_370 * uVar14))
             && (puVar18 < param_5 + uVar21)) goto LAB_0018a000;
          puVar2 = puVar18 + lVar15;
          puVar17 = param_5 + lVar15;
          puVar16 = param_5 + 0x10;
          puVar19 = puVar18 + 0x10;
          lVar11 = lVar15;
          do {
            puVar18 = puVar19 + -8;
            uVar22 = *(undefined8 *)(puVar19 + -0x10);
            uVar25 = *(undefined8 *)(puVar19 + 8);
            uVar24 = *(undefined8 *)puVar19;
            lVar11 = lVar11 + -0x20;
            puVar19 = puVar19 + 0x20;
            *(undefined8 *)(puVar16 + -8) = *(undefined8 *)puVar18;
            *(undefined8 *)(puVar16 + -0x10) = uVar22;
            *(undefined8 *)(puVar16 + 8) = uVar25;
            *(undefined8 *)puVar16 = uVar24;
            puVar16 = puVar16 + 0x20;
            uVar6 = uStack_3b0._4_4_ - (int)lVar15;
            puVar18 = puVar2;
            uVar9 = uStack_3b0._4_4_ & 0x1f;
          } while (lVar11 != 0);
          while (puVar16 = puVar17, uVar20 = uVar6, uVar9 != 0) {
LAB_0018a000:
            puVar17 = puVar16 + 1;
            *puVar16 = *puVar18;
            uVar6 = uVar20 - 1;
            puVar18 = puVar18 + 1;
            uVar9 = uVar20 - 1;
          }
          param_5 = param_5 + uVar21;
        }
        uVar14 = uVar14 + 1;
      } while (uVar14 != (uint)uStack_3b0);
    }
    lVar15 = CONCAT44(local_37c,uStack_380);
  }
  else {
    memcpy(param_5,(void *)CONCAT44(uStack_3a4,uStack_3a8),
           (long)(int)(uStack_3b0._4_4_ * (uint)uStack_3b0));
    lVar15 = CONCAT44(local_37c,uStack_380);
  }
  if (lVar15 != 0) {
    piVar1 = (int *)(lVar15 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_3b8);
    }
  }
  uStack_380 = 0;
  local_37c = 0;
  uStack_3a0 = 0;
  uStack_39c = 0;
  uStack_3a8 = 0;
  uStack_3a4 = 0;
  uStack_390 = 0;
  uStack_38c = 0;
  uStack_398 = 0;
  local_394 = 0;
  if (0 < local_3b8._4_4_) {
    lVar15 = 0;
    do {
      *(undefined4 *)((long)local_378 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < local_3b8._4_4_);
  }
  if (local_370 != &local_368) {
    cv::fastFree(local_370);
  }
  puVar7 = local_558;
  puVar8 = local_550;
  if (local_570 != (void *)0x0) {
    operator_delete(local_570);
    puVar7 = local_558;
    puVar8 = local_550;
  }
  for (; puVar10 = local_550, puVar7 != local_550; puVar7 = puVar7 + 3) {
    local_550 = puVar8;
    if ((void *)*puVar7 != (void *)0x0) {
      operator_delete((void *)*puVar7);
    }
    puVar8 = local_550;
    local_550 = puVar10;
  }
  local_550 = puVar8;
  if (local_558 != (undefined8 *)0x0) {
    operator_delete(local_558);
  }
  if (CONCAT44(local_31c,uStack_320) != 0) {
    piVar1 = (int *)(CONCAT44(local_31c,uStack_320) + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_358);
    }
  }
  uStack_320 = 0;
  local_31c = 0;
  uStack_340 = 0;
  uStack_33c = 0;
  uStack_348 = 0;
  uStack_344 = 0;
  uStack_330 = 0;
  uStack_32c = 0;
  uStack_338 = 0;
  local_334 = 0;
  if (0 < local_354) {
    lVar15 = 0;
    do {
      *(undefined4 *)((long)local_318 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < local_354);
  }
  if (local_310 != &local_308) {
    cv::fastFree(local_310);
  }
  if (CONCAT44(local_2bc,uStack_2c0) != 0) {
    piVar1 = (int *)(CONCAT44(local_2bc,uStack_2c0) + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_2f8);
    }
  }
  uStack_2c0 = 0;
  local_2bc = 0;
  uStack_2e0 = 0;
  uStack_2dc = 0;
  uStack_2e8 = 0;
  uStack_2e4 = 0;
  uStack_2d0 = 0;
  uStack_2cc = 0;
  uStack_2d8 = 0;
  local_2d4 = 0;
  if (0 < local_2f4) {
    lVar15 = 0;
    do {
      *(undefined4 *)((long)local_2b8 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < local_2f4);
  }
  if (local_2b0 != &local_2a8) {
    cv::fastFree(local_2b0);
  }
  if (CONCAT44(local_25c,uStack_260) != 0) {
    piVar1 = (int *)(CONCAT44(local_25c,uStack_260) + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_298);
    }
  }
  uStack_260 = 0;
  local_25c = 0;
  uStack_280 = 0;
  uStack_27c = 0;
  uStack_288 = 0;
  local_284 = 0;
  uStack_270 = 0;
  uStack_26c = 0;
  uStack_278 = 0;
  local_274 = 0;
  if (0 < (int)local_294) {
    lVar15 = 0;
    do {
      *(undefined4 *)(local_258 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < (int)local_294);
  }
  if (local_250 != &local_248) {
    cv::fastFree(local_250);
  }
  if (CONCAT44(local_9c,uStack_a0) != 0) {
    piVar1 = (int *)(CONCAT44(local_9c,uStack_a0) + 0x14);
    do {
      iVar13 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_d8);
    }
  }
  uStack_a0 = 0;
  local_9c = 0;
  uStack_c0 = 0;
  uStack_bc = 0;
  uStack_c8 = 0;
  uStack_c4 = 0;
  uStack_b0 = 0;
  uStack_ac = 0;
  uStack_b8 = 0;
  local_b4 = 0;
  if (0 < (int)local_d4) {
    lVar15 = 0;
    do {
      *(undefined4 *)(local_98 + lVar15 * 4) = 0;
      lVar15 = lVar15 + 1;
    } while (lVar15 < (int)local_d4);
  }
  if (local_90 != &local_88) {
    cv::fastFree(local_90);
  }
  if (*(long *)(lVar5 + 0x28) != lVar12) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0018a7b8 (4 bytes) name=labelImageRect

/* labelImageRect(char const*, int, int, float, char*) */

void labelImageRect(char *param_1,int param_2,int param_3,float param_4,char *param_5)

{
  return;
}


==================================================================

### FUNC 0018a7bc (28 bytes) name=ImageProc

/* ImageProc::ImageProc(FilterPara const&) */

void __thiscall ImageProc::ImageProc(ImageProc *this,FilterPara *param_1)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0x1c);
  *(undefined8 *)(this + 0x24) = *(undefined8 *)(param_1 + 0x24);
  *(undefined8 *)(this + 0x1c) = uVar1;
  uVar1 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0x18) = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0x10) = uVar1;
  uVar1 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)this = uVar1;
  return;
}


==================================================================

### FUNC 0018a7d8 (28 bytes) name=setFilterPara

/* ImageProc::setFilterPara(FilterPara const&) */

void __thiscall ImageProc::setFilterPara(ImageProc *this,FilterPara *param_1)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0x1c);
  *(undefined8 *)(this + 0x24) = *(undefined8 *)(param_1 + 0x24);
  *(undefined8 *)(this + 0x1c) = uVar1;
  uVar1 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0x18) = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0x10) = uVar1;
  uVar1 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)this = uVar1;
  return;
}


==================================================================

### FUNC 0018a7f4 (3548 bytes) name=findTarget

/* WARNING: Type propagation algorithm not settling */
/* ImageProc::findTarget(unsigned int, unsigned char const*, int, int, int, unsigned int const*,
   int) */

void ImageProc::findTarget
               (uint param_1,uchar *param_2,int param_3,int param_4,int param_5,uint *param_6,
               int param_7)

{
  int *piVar1;
  _InputArray *p_Var2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  char cVar10;
  bool bVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  undefined8 ******ppppppuVar17;
  undefined8 ******ppppppuVar18;
  int iVar19;
  ImageProc *this;
  ImageProc *this_00;
  ImageProc *this_01;
  _InputArray *p_Var20;
  undefined8 *puVar21;
  uint uVar22;
  _InputArray *extraout_x1;
  _InputArray *extraout_x1_00;
  _InputArray *p_Var23;
  int in_w7;
  vector<JRect,std::allocator<JRect>> *in_x8;
  long lVar24;
  undefined8 *******pppppppuVar25;
  long lVar26;
  _InputArray *p_Var27;
  _InputArray *p_Var28;
  _InputArray *p_Var29;
  _InputArray *p_Var30;
  ulong uVar31;
  undefined8 *******pppppppuVar32;
  int iVar33;
  allocator_conflict *paVar34;
  ulong uVar35;
  ulong uVar36;
  undefined8 uVar37;
  undefined8 ******ppppppuVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  undefined8 uVar42;
  undefined8 uVar43;
  undefined8 uVar44;
  uint local_360;
  uint uStack_35c;
  int iStack_358;
  int iStack_354;
  undefined8 *******local_350;
  undefined8 *******pppppppuStack_348;
  undefined8 *******local_340;
  undefined8 *******pppppppuStack_338;
  undefined8 local_330;
  undefined4 uStack_328;
  undefined4 uStack_324;
  undefined8 *******local_320;
  undefined8 *******local_318;
  undefined8 local_310;
  undefined4 uStack_308;
  undefined4 uStack_304;
  undefined8 *******local_300;
  undefined8 *******local_2f8;
  undefined8 local_2f0;
  undefined8 ******local_2e8;
  undefined8 ******local_2e0;
  undefined8 local_2d8;
  undefined8 ******local_2d0;
  undefined8 ******ppppppuStack_2c8;
  undefined8 uStack_2c0;
  undefined8 uStack_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined8 local_2a0;
  undefined4 uStack_298;
  undefined4 uStack_294;
  undefined4 uStack_290;
  undefined4 local_28c;
  undefined4 uStack_288;
  undefined4 uStack_284;
  undefined4 uStack_280;
  undefined4 local_27c;
  undefined4 uStack_278;
  undefined4 local_274;
  undefined8 *local_270;
  undefined8 *local_268;
  undefined8 local_260;
  undefined8 uStack_258;
  undefined4 local_248;
  undefined8 local_244;
  undefined4 uStack_23c;
  undefined4 uStack_238;
  undefined4 local_234;
  undefined4 uStack_230;
  undefined4 uStack_22c;
  undefined4 uStack_228;
  undefined4 local_224;
  undefined4 uStack_220;
  undefined4 uStack_21c;
  undefined4 uStack_218;
  undefined4 local_214;
  undefined4 uStack_210;
  undefined4 local_20c;
  long local_208;
  undefined8 *local_200;
  undefined8 local_1f8;
  undefined8 uStack_1f0;
  undefined4 local_1e8;
  int local_1e4;
  undefined8 uStack_1e0;
  undefined4 uStack_1d8;
  undefined4 local_1d4;
  undefined4 uStack_1d0;
  undefined4 uStack_1cc;
  undefined4 uStack_1c8;
  undefined4 local_1c4;
  undefined4 uStack_1c0;
  undefined4 uStack_1bc;
  undefined4 uStack_1b8;
  undefined4 local_1b4;
  undefined4 uStack_1b0;
  undefined4 local_1ac;
  undefined8 *local_1a8;
  undefined8 *local_1a0;
  undefined8 local_198;
  undefined8 uStack_190;
  undefined4 local_188;
  int local_184;
  undefined8 uStack_180;
  undefined4 uStack_178;
  undefined4 uStack_174;
  undefined4 uStack_170;
  undefined4 uStack_16c;
  undefined4 uStack_168;
  undefined4 local_164;
  undefined4 uStack_160;
  undefined4 uStack_15c;
  undefined4 uStack_158;
  undefined4 local_154;
  undefined4 uStack_150;
  undefined4 local_14c;
  undefined8 *local_148;
  undefined8 *local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined4 local_128;
  undefined8 local_124;
  undefined4 uStack_11c;
  undefined4 uStack_118;
  undefined4 local_114;
  undefined4 uStack_110;
  undefined4 uStack_10c;
  undefined4 uStack_108;
  undefined4 local_104;
  undefined4 uStack_100;
  undefined4 uStack_fc;
  undefined4 uStack_f8;
  undefined4 local_f4;
  undefined4 uStack_f0;
  undefined4 local_ec;
  long local_e8;
  undefined8 *local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined4 local_c8;
  undefined8 local_c4;
  undefined4 uStack_bc;
  undefined4 uStack_b8;
  undefined4 local_b4;
  undefined4 uStack_b0;
  undefined4 uStack_ac;
  undefined4 uStack_a8;
  undefined4 local_a4;
  undefined4 uStack_a0;
  undefined4 uStack_9c;
  undefined4 uStack_98;
  undefined4 local_94;
  undefined4 uStack_90;
  undefined4 local_8c;
  long local_88;
  undefined8 *local_80;
  undefined8 local_78;
  undefined8 local_70;
  
  this = (ImageProc *)(ulong)param_1;
  lVar16 = tpidr_el0;
  lVar24 = *(long *)(lVar16 + 0x28);
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined8 *)in_x8 = 0;
  iVar19 = MAG_RevisedTemp2Gray((ulong)param_2 & 0xffffffff,*(undefined4 *)this);
  this_00 = (ImageProc *)MAG_RevisedTemp2Gray((ulong)param_2 & 0xffffffff,*(undefined4 *)(this + 4))
  ;
  local_88 = (long)&local_c4 + 4;
  local_c8 = 0x42ff0000;
  local_94 = 0;
  uStack_90 = 0;
  uStack_9c = 0;
  uStack_98 = 0;
  local_a4 = 0;
  uStack_a0 = 0;
  uStack_ac = 0;
  uStack_a8 = 0;
  local_b4 = 0;
  uStack_b0 = 0;
  uStack_bc = 0;
  uStack_b8 = 0;
  local_c4 = 0;
  local_8c = 0;
  local_78 = 0;
  local_70 = 0;
  local_80 = &local_78;
  raw8bitToMat(this_00,(uchar *)(ulong)(uint)param_3,param_4,param_5,(Mat *)&local_c8);
  uStack_1e0 = &local_128;
  local_e8 = (long)&local_124 + 4;
  local_128 = 0x42ff0000;
  uStack_178 = 0;
  uStack_174 = 0;
  uStack_1d8 = 0;
  local_1d4 = 0;
  local_f4 = 0;
  uStack_f0 = 0;
  uStack_fc = 0;
  uStack_f8 = 0;
  local_104 = 0;
  uStack_100 = 0;
  uStack_10c = 0;
  uStack_108 = 0;
  local_114 = 0;
  uStack_110 = 0;
  uStack_11c = 0;
  uStack_118 = 0;
  local_124 = 0;
  local_ec = 0;
  local_188 = 0x1010000;
  local_1e8 = 0x2010000;
  local_d8 = 0;
  local_d0 = 0;
  local_e0 = &local_d8;
  uStack_180 = &local_c8;
  this_01 = (ImageProc *)cv::medianBlur((_InputArray *)&local_188,(_OutputArray *)&local_1e8,3);
  local_148 = &uStack_180;
  local_188 = 0x42ff0000;
  local_154 = 0;
  uStack_150 = 0;
  uStack_15c = 0;
  uStack_158 = 0;
  local_164 = 0;
  uStack_160 = 0;
  uStack_16c = 0;
  uStack_168 = 0;
  uStack_174 = 0;
  uStack_170 = 0;
  uStack_180._4_4_ = 0;
  uStack_178 = 0;
  local_184 = 0;
  uStack_180._0_4_ = 0;
  local_14c = 0;
  local_138 = 0;
  local_130 = 0;
  local_140 = &local_138;
  threshold_(this_01,(Mat *)&local_128,(Mat *)&local_188,iVar19,(int)this_00);
  ppppppuStack_2c8 = (undefined8 ******)&local_188;
  local_2e0 = (undefined8 ******)&local_1e8;
  uStack_2c0 = 0;
  uStack_308 = 0xffffffff;
  uStack_304 = 0xffffffff;
  local_300 = (undefined8 *******)CONCAT44(local_300._4_4_,0x1010000);
  local_1a8 = &uStack_1e0;
  local_1e8 = 0x42ff0000;
  local_2f8 = (undefined8 *******)&local_248;
  local_1b4 = 0;
  uStack_1b0 = 0;
  uStack_1bc = 0;
  uStack_1b8 = 0;
  local_1c4 = 0;
  uStack_1c0 = 0;
  uStack_1cc = 0;
  uStack_1c8 = 0;
  local_1d4 = 0;
  uStack_1d0 = 0;
  uStack_1e0._4_4_ = 0;
  uStack_1d8 = 0;
  local_1e4 = 0;
  uStack_1e0._0_4_ = 0;
  local_2d8 = 0;
  local_248 = 0x42ff0000;
  local_1ac = 0;
  uStack_22c = 0;
  uStack_228 = 0;
  local_234 = 0;
  uStack_230 = 0;
  uStack_23c = 0;
  uStack_238 = 0;
  local_244 = 0;
  uStack_21c = 0;
  uStack_218 = 0;
  local_224 = 0;
  uStack_220 = 0;
  uStack_190 = 0;
  local_198 = 0;
  local_208 = (long)&local_244 + 4;
  local_2d0 = (undefined8 ******)CONCAT44(local_2d0._4_4_,0x1010000);
  local_2e8 = (undefined8 ******)CONCAT44(local_2e8._4_4_,0x2010000);
  local_2f0 = 0;
  local_214 = 0;
  uStack_210 = 0;
  local_20c = 0;
  local_1f8 = 0;
  uStack_1f0 = 0;
  uStack_2a8._0_4_ = 0xffffffff;
  uStack_2a8._4_4_ = 0x7fefffff;
  local_2b0._0_4_ = 0xffffffff;
  local_2b0._4_4_ = 0x7fefffff;
  uStack_298 = 0xffffffff;
  uStack_294 = 0x7fefffff;
  local_2a0._0_4_ = 0xffffffff;
  local_2a0._4_4_ = 0x7fefffff;
  local_200 = &local_1f8;
  local_1a0 = &local_198;
  cv::dilate(&local_2d0,&local_2e8,&local_300,&uStack_308,1,0,&local_2b0);
  if (CONCAT44(local_20c,uStack_210) != 0) {
    piVar1 = (int *)(CONCAT44(local_20c,uStack_210) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_248);
    }
  }
  uStack_210 = 0;
  local_20c = 0;
  uStack_220 = 0;
  uStack_21c = 0;
  uStack_228 = 0;
  local_224 = 0;
  uStack_230 = 0;
  uStack_22c = 0;
  uStack_238 = 0;
  local_234 = 0;
  if (0 < (int)local_244) {
    lVar26 = 0;
    do {
      *(undefined4 *)(local_208 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < (int)local_244);
  }
  if (local_200 != &local_1f8) {
    cv::fastFree(local_200);
  }
  local_2f8 = (undefined8 *******)&local_248;
  local_300 = (undefined8 *******)CONCAT44(local_300._4_4_,0x2010000);
  local_318 = (undefined8 *******)&local_2b0;
  local_208 = (long)&local_244 + 4;
  local_248 = 0x42ff0000;
  local_214 = 0;
  uStack_210 = 0;
  local_2e8 = (undefined8 ******)CONCAT44(local_2e8._4_4_,0x1010000);
  local_2e0 = (undefined8 ******)&local_1e8;
  local_2f0 = 0;
  local_2b0._0_4_ = 0x42ff0000;
  local_320 = (undefined8 *******)CONCAT44(local_320._4_4_,0x1010000);
  uStack_21c = 0;
  uStack_218 = 0;
  local_224 = 0;
  uStack_220 = 0;
  uStack_22c = 0;
  uStack_228 = 0;
  local_234 = 0;
  uStack_230 = 0;
  uStack_23c = 0;
  uStack_238 = 0;
  local_244 = 0;
  local_20c = 0;
  local_270 = &uStack_2a8;
  uStack_294 = 0;
  uStack_290 = 0;
  local_2a0._4_4_ = 0;
  uStack_298 = 0;
  uStack_2a8._4_4_ = 0;
  local_2a0._0_4_ = 0;
  local_2b0._4_4_ = 0;
  uStack_2a8._0_4_ = 0;
  uStack_284 = 0;
  uStack_280 = 0;
  local_28c = 0;
  uStack_288 = 0;
  uStack_1f0 = 0;
  local_1f8 = 0;
  local_27c = 0;
  uStack_278 = 0;
  local_310 = 0;
  local_2d8 = 0;
  local_274 = 0;
  uStack_328 = 0xffffffff;
  uStack_324 = 0xffffffff;
  local_260 = 0;
  uStack_258 = 0;
  ppppppuStack_2c8 = (undefined8 ******)0x7fefffffffffffff;
  local_2d0 = (undefined8 ******)0x7fefffffffffffff;
  uStack_2b8 = 0x7fefffffffffffff;
  uStack_2c0 = 0x7fefffffffffffff;
  local_268 = &local_260;
  local_200 = &local_1f8;
  cv::erode(&local_2e8,&local_300,&local_320,&uStack_328,1,0,&local_2d0);
  if (CONCAT44(local_274,uStack_278) != 0) {
    piVar1 = (int *)(CONCAT44(local_274,uStack_278) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_2b0);
    }
  }
  uStack_278 = 0;
  local_274 = 0;
  uStack_298 = 0;
  uStack_294 = 0;
  local_2a0._0_4_ = 0;
  local_2a0._4_4_ = 0;
  uStack_288 = 0;
  uStack_284 = 0;
  uStack_290 = 0;
  local_28c = 0;
  if (0 < local_2b0._4_4_) {
    lVar26 = 0;
    do {
      *(undefined4 *)((long)local_270 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < local_2b0._4_4_);
  }
  if (local_268 != &local_260) {
    cv::fastFree(local_268);
  }
  resetMatMaskPoints(this,(Mat *)&local_248,(uint *)(ulong)(uint)param_7,in_w7);
  local_2b0._0_4_ = 0x3010000;
  local_2f8 = &local_2d0;
  local_300 = (undefined8 *******)CONCAT44(local_300._4_4_,0x8204000c);
  local_2f0 = 0;
  local_318 = &local_2e8;
  ppppppuStack_2c8 = (undefined8 ******)0x0;
  uStack_2c0 = 0;
  local_2d8 = 0;
  local_2d0 = (undefined8 ******)0x0;
  local_2e8 = (undefined8 ******)0x0;
  local_2e0 = (undefined8 ******)0x0;
  local_2a0._0_4_ = 0;
  local_2a0._4_4_ = 0;
  local_330 = 0;
  local_320 = (undefined8 *******)CONCAT44(local_320._4_4_,0x8203001c);
  local_310 = 0;
  uStack_2a8 = &local_248;
  cv::findContours(&local_2b0,&local_300,&local_320,0,2,&local_330);
  if (local_2e0 != local_2e8) {
    iVar33 = 0;
    iVar19 = 0;
    local_320 = &local_320;
    local_318 = local_320;
    do {
      paVar34 = (allocator_conflict *)(local_2d0 + (long)iVar33 * 3);
      uVar35 = *(long *)(paVar34 + 8) - *(long *)paVar34;
      uVar36 = (long)uVar35 >> 3;
      std::allocator_traits<std::allocator<cv::Point_<int>>>::
      _S_select<std::allocator<cv::Point_<int>>const,void>(paVar34,&local_300,0);
      uStack_2a8._0_4_ = 0;
      uStack_2a8._4_4_ = 0;
      local_2a0._0_4_ = 0;
      local_2a0._4_4_ = 0;
      local_2b0._0_4_ = 0;
      local_2b0._4_4_ = 0;
      if (uVar36 == 0) {
        p_Var20 = (_InputArray *)0x0;
        p_Var23 = extraout_x1;
      }
      else {
        if (uVar36 >> 0x3d != 0) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f0e4();
        }
        p_Var20 = operator_new(uVar35);
        p_Var23 = extraout_x1_00;
      }
      local_2a0 = p_Var20 + uVar36 * 8;
      local_2b0._0_4_ = (int)p_Var20;
      local_2b0._4_4_ = (int)((ulong)p_Var20 >> 0x20);
      p_Var28 = *(_InputArray **)paVar34;
      p_Var27 = *(_InputArray **)(paVar34 + 8);
      if ((long)p_Var27 - (long)p_Var28 != 0) {
        uVar35 = ((ulong)(p_Var27 + (-8 - (long)p_Var28)) >> 3) + 1;
        p_Var29 = p_Var28;
        p_Var30 = p_Var20;
        if ((uVar35 < 8) || (uVar36 = uVar35 & 0x3ffffffffffffff8, uVar36 == 0)) {
LAB_0018b070:
          do {
            *(undefined4 *)p_Var30 = *(undefined4 *)p_Var29;
            p_Var2 = p_Var29 + 8;
            *(undefined4 *)(p_Var30 + 4) = *(undefined4 *)(p_Var29 + 4);
            p_Var29 = p_Var2;
            p_Var30 = p_Var30 + 8;
          } while (p_Var2 != p_Var27);
        }
        else {
          uVar31 = ((long)p_Var27 - (long)p_Var28) - 8U & 0xfffffffffffffff8;
          p_Var23 = p_Var28 + 4 + uVar31;
          if ((p_Var20 < p_Var23 && p_Var28 < p_Var20 + 4 + uVar31) ||
             (p_Var20 + 4 < p_Var28 + uVar31 + 8 && p_Var28 + 4 < p_Var20 + uVar31 + 8))
          goto LAB_0018b070;
          p_Var29 = p_Var28 + 0x20;
          p_Var30 = p_Var20 + 0x20;
          uVar31 = uVar36;
          do {
            uVar37 = *(undefined8 *)(p_Var29 + -0x20);
            uVar40 = *(undefined8 *)(p_Var29 + -8);
            uVar39 = *(undefined8 *)(p_Var29 + -0x10);
            uVar42 = *(undefined8 *)(p_Var29 + 8);
            uVar41 = *(undefined8 *)p_Var29;
            uVar44 = *(undefined8 *)(p_Var29 + 0x18);
            uVar43 = *(undefined8 *)(p_Var29 + 0x10);
            uVar31 = uVar31 - 8;
            *(undefined8 *)(p_Var30 + -0x18) = *(undefined8 *)(p_Var29 + -0x18);
            *(undefined8 *)(p_Var30 + -0x20) = uVar37;
            *(undefined8 *)(p_Var30 + -8) = uVar40;
            *(undefined8 *)(p_Var30 + -0x10) = uVar39;
            *(undefined8 *)(p_Var30 + 8) = uVar42;
            *(undefined8 *)p_Var30 = uVar41;
            *(undefined8 *)(p_Var30 + 0x18) = uVar44;
            *(undefined8 *)(p_Var30 + 0x10) = uVar43;
            p_Var29 = p_Var29 + 0x40;
            p_Var30 = p_Var30 + 0x40;
          } while (uVar31 != 0);
          p_Var29 = p_Var28 + uVar36 * 8;
          p_Var30 = p_Var20 + uVar36 * 8;
          if (uVar35 != uVar36) goto LAB_0018b070;
        }
        p_Var20 = p_Var20 + ((ulong)(p_Var27 + (-8 - (long)p_Var28)) & 0xfffffffffffffff8) + 8;
      }
      uStack_2a8._0_4_ = SUB84(p_Var20,0);
      uStack_2a8._4_4_ = (undefined4)((ulong)p_Var20 >> 0x20);
      local_2f0 = 0;
      local_300 = (undefined8 *******)CONCAT44(local_300._4_4_,0x8103000c);
      local_2f8 = (undefined8 *******)&local_2b0;
      cv::boundingRect((cv *)&local_300,p_Var23);
      puVar21 = operator_new(0x20);
      *puVar21 = 0;
      puVar21[1] = 0;
      puVar21[3] = pppppppuStack_338;
      puVar21[2] = local_340;
      FUN_003dbfec(puVar21,&local_320);
      if ((void *)CONCAT44(local_2b0._4_4_,(int)local_2b0) != (void *)0x0) {
        operator_delete((void *)CONCAT44(local_2b0._4_4_,(int)local_2b0));
      }
      if (0x12 < iVar19) break;
      iVar19 = iVar19 + 1;
      iVar33 = *(int *)(local_2e8 + (long)iVar33 * 2);
    } while (-1 < iVar33);
    local_340 = &local_340;
    pppppppuVar32 = local_320;
    pppppppuStack_338 = local_340;
    local_300 = &local_300;
    local_2f8 = &local_300;
    if (&local_320 != (undefined8 ********)local_320) {
      do {
        puVar21 = operator_new(0x20);
        *puVar21 = 0;
        puVar21[1] = 0;
        ppppppuVar38 = pppppppuVar32[2];
        puVar21[3] = pppppppuVar32[3];
        puVar21[2] = ppppppuVar38;
        FUN_003dbfec(puVar21,&local_340);
        pppppppuVar32 = (undefined8 *******)*pppppppuVar32;
      } while (&local_320 != (undefined8 ********)pppppppuVar32);
      if ((undefined8 ********)local_340 != &local_340) {
        do {
          pppppppuVar32 = pppppppuStack_338;
          puVar21 = operator_new(0x20);
          *puVar21 = 0;
          puVar21[1] = 0;
          ppppppuVar38 = pppppppuVar32[2];
          puVar21[3] = pppppppuVar32[3];
          puVar21[2] = ppppppuVar38;
          FUN_003dbfec(puVar21,&local_300);
          pppppppuVar32 = pppppppuStack_338;
          FUN_003dc008(pppppppuStack_338);
          operator_delete(pppppppuVar32);
          pppppppuVar32 = local_2f8;
          if (&local_340 == (undefined8 ********)local_340) break;
          bVar11 = false;
          do {
            iVar6 = *(int *)(pppppppuVar32 + 2);
            iVar7 = *(int *)((long)pppppppuVar32 + 0x14);
            iVar19 = *(int *)(pppppppuVar32 + 3) + iVar6;
            iVar33 = *(int *)((long)pppppppuVar32 + 0x1c) + iVar7;
            pppppppuVar25 = local_340;
            while( true ) {
              iVar8 = *(int *)(pppppppuVar25 + 2);
              uVar12 = iVar6 - iVar8;
              iVar3 = *(int *)(pppppppuVar25 + 3) + iVar8;
              uVar13 = iVar19 - iVar3;
              uVar14 = iVar6 - iVar3;
              uVar22 = iVar19 - iVar8;
              if ((((((int)uVar13 < 1) || ((int)uVar22 < 1)) || ((int)uVar12 < 1)) ||
                  ((int)uVar14 < 1)) && (-1 < (int)(uVar22 & uVar12 & uVar14 & uVar13))) {
                uVar22 = 0;
              }
              else {
                uVar15 = -uVar12;
                if (-1 < (int)uVar12) {
                  uVar15 = uVar12;
                }
                uVar12 = -uVar14;
                if (-1 < (int)uVar14) {
                  uVar12 = uVar14;
                }
                uVar14 = -uVar22;
                if (-1 < (int)uVar22) {
                  uVar14 = uVar22;
                }
                uVar22 = -uVar13;
                if (-1 < (int)uVar13) {
                  uVar22 = uVar13;
                }
                if ((int)uVar14 <= (int)uVar22) {
                  uVar22 = uVar14;
                }
                if ((int)uVar15 <= (int)uVar12) {
                  uVar12 = uVar15;
                }
                if ((int)uVar12 <= (int)uVar22) {
                  uVar22 = uVar12;
                }
              }
              iVar9 = *(int *)((long)pppppppuVar25 + 0x14);
              uVar12 = iVar7 - iVar9;
              iVar4 = *(int *)((long)pppppppuVar25 + 0x1c) + iVar9;
              uVar13 = iVar33 - iVar4;
              uVar14 = iVar7 - iVar4;
              uVar15 = iVar33 - iVar9;
              if (((((int)uVar13 < 1) || ((int)uVar15 < 1)) ||
                  (((int)uVar12 < 1 || ((int)uVar14 < 1)))) &&
                 (-1 < (int)(uVar15 & uVar12 & uVar14 & uVar13))) {
                uVar15 = 0;
              }
              else {
                uVar5 = -uVar12;
                if (-1 < (int)uVar12) {
                  uVar5 = uVar12;
                }
                uVar12 = -uVar14;
                if (-1 < (int)uVar14) {
                  uVar12 = uVar14;
                }
                uVar14 = -uVar15;
                if (-1 < (int)uVar15) {
                  uVar14 = uVar15;
                }
                uVar15 = -uVar13;
                if (-1 < (int)uVar13) {
                  uVar15 = uVar13;
                }
                if ((int)uVar14 <= (int)uVar15) {
                  uVar15 = uVar14;
                }
                if ((int)uVar5 <= (int)uVar12) {
                  uVar12 = uVar5;
                }
                if ((int)uVar12 <= (int)uVar15) {
                  uVar15 = uVar12;
                }
              }
              if (((int)uVar22 < *(int *)(this + 0x14)) && ((int)uVar15 < *(int *)(this + 0x18)))
              break;
              pppppppuVar25 = (undefined8 *******)*pppppppuVar25;
              if (&local_340 == (undefined8 ********)pppppppuVar25) {
                pppppppuVar32 = local_340;
                if (bVar11) goto LAB_0018b398;
                goto LAB_0018b3b0;
              }
            }
            if (iVar8 <= iVar6) {
              iVar6 = iVar8;
            }
            if (iVar9 <= iVar7) {
              iVar7 = iVar9;
            }
            if (iVar19 <= iVar3) {
              iVar19 = iVar3;
            }
            if (iVar33 <= iVar4) {
              iVar33 = iVar4;
            }
            iVar3 = iVar19;
            if (iVar6 <= iVar19) {
              iVar3 = iVar6;
            }
            iVar8 = iVar33;
            if (iVar7 <= iVar33) {
              iVar8 = iVar7;
            }
            if (iVar19 <= iVar6) {
              iVar19 = iVar6;
            }
            if (iVar33 <= iVar7) {
              iVar33 = iVar7;
            }
            *(int *)(pppppppuVar32 + 2) = iVar3;
            *(int *)((long)pppppppuVar32 + 0x14) = iVar8;
            *(int *)(pppppppuVar32 + 3) = iVar19 - iVar3;
            *(int *)((long)pppppppuVar32 + 0x1c) = iVar33 - iVar8;
            FUN_003dc008(pppppppuVar25);
            operator_delete(pppppppuVar25);
            bVar11 = true;
          } while (&local_340 != (undefined8 ********)local_340);
          pppppppuVar32 = &local_340;
LAB_0018b398:
          if ((undefined8 ********)local_300 != &local_300) {
            FUN_003dbf94(pppppppuVar32,local_300,&local_300);
            pppppppuVar32 = local_340;
          }
LAB_0018b3b0:
        } while ((undefined8 ********)pppppppuVar32 != &local_340);
      }
    }
    if (&local_300 != (undefined8 ********)local_300) {
      pppppppuVar32 = local_300;
      do {
        if ((((*(int *)(pppppppuVar32 + 3) < *(int *)(this + 0x10)) ||
             (*(int *)((long)pppppppuVar32 + 0x1c) < *(int *)(this + 0x10))) ||
            (iVar19 = *(int *)((long)pppppppuVar32 + 0x1c) * *(int *)(pppppppuVar32 + 3),
            iVar19 <= *(int *)(this + 8))) || (*(int *)(this + 0xc) <= iVar19)) {
          pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
          FUN_003dc008(pppppppuVar32);
          operator_delete(pppppppuVar32);
        }
        else {
          pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
        }
        pppppppuVar32 = pppppppuVar25;
      } while (&local_300 != (undefined8 ********)pppppppuVar25);
    }
    local_350 = &local_350;
    pppppppuStack_348 = &local_350;
    FUN_003dbef4(&local_350,&local_300);
    memset(&local_2b0,0,0x48);
    MAG_GetCamInfo((int)param_2,&local_2b0,0x48);
    if (&local_350 != (undefined8 ********)local_350) {
      pppppppuVar32 = local_350;
      do {
        local_360 = 0;
        if (param_4 != 0) {
          local_360 = (uint)((int)local_2b0 * *(int *)(pppppppuVar32 + 2)) / (uint)param_4;
        }
        uVar12 = 0;
        if (param_4 != 0) {
          uVar12 = (uint)((*(int *)(pppppppuVar32 + 3) + *(int *)(pppppppuVar32 + 2)) *
                         (int)local_2b0) / (uint)param_4;
        }
        uStack_35c = 0;
        if (param_5 != 0) {
          uStack_35c = (uint)(local_2b0._4_4_ * *(int *)((long)pppppppuVar32 + 0x14)) /
                       (uint)param_5;
        }
        uVar13 = 0;
        if (param_5 != 0) {
          uVar13 = (uint)((*(int *)((long)pppppppuVar32 + 0x1c) +
                          *(int *)((long)pppppppuVar32 + 0x14)) * local_2b0._4_4_) / (uint)param_5;
        }
        iVar19 = (int)local_2b0;
        if ((int)((uVar12 - local_360) + 1) <= (int)local_2b0) {
          iVar19 = (uVar12 - local_360) + 1;
        }
        puVar21 = *(undefined8 **)(in_x8 + 8);
        iVar33 = local_2b0._4_4_;
        if ((int)((uVar13 - uStack_35c) + 1) <= local_2b0._4_4_) {
          iVar33 = (uVar13 - uStack_35c) + 1;
        }
        iStack_358 = local_360 + iVar19 + -1;
        iStack_354 = uStack_35c + iVar33 + -1;
        if (puVar21 == *(undefined8 **)(in_x8 + 0x10)) {
          std::vector<JRect,std::allocator<JRect>>::_M_emplace_back_aux<JRect>
                    (in_x8,(JRect *)&local_360);
        }
        else {
          puVar21[1] = CONCAT44(iStack_354,iStack_358);
          *puVar21 = CONCAT44(uStack_35c,local_360);
          *(long *)(in_x8 + 8) = *(long *)(in_x8 + 8) + 0x10;
        }
        pppppppuVar32 = (undefined8 *******)*pppppppuVar32;
      } while (&local_350 != (undefined8 ********)pppppppuVar32);
    }
    pppppppuVar32 = local_350;
    while ((undefined8 ********)pppppppuVar32 != &local_350) {
      pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
      operator_delete(pppppppuVar32);
      pppppppuVar32 = pppppppuVar25;
    }
    pppppppuVar32 = local_340;
    while ((undefined8 ********)pppppppuVar32 != &local_340) {
      pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
      operator_delete(pppppppuVar32);
      pppppppuVar32 = pppppppuVar25;
    }
    pppppppuVar32 = local_300;
    while ((undefined8 ********)pppppppuVar32 != &local_300) {
      pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
      operator_delete(pppppppuVar32);
      pppppppuVar32 = pppppppuVar25;
    }
    pppppppuVar32 = local_320;
    while ((undefined8 ********)pppppppuVar32 != &local_320) {
      pppppppuVar25 = (undefined8 *******)*pppppppuVar32;
      operator_delete(pppppppuVar32);
      pppppppuVar32 = pppppppuVar25;
    }
  }
  ppppppuVar38 = local_2d0;
  ppppppuVar17 = ppppppuStack_2c8;
  if (local_2e8 != (undefined8 ******)0x0) {
    operator_delete(local_2e8);
    ppppppuVar38 = local_2d0;
    ppppppuVar17 = ppppppuStack_2c8;
  }
  for (; ppppppuVar18 = ppppppuStack_2c8, ppppppuVar38 != ppppppuStack_2c8;
      ppppppuVar38 = ppppppuVar38 + 3) {
    ppppppuStack_2c8 = ppppppuVar17;
    if (*ppppppuVar38 != (undefined8 *****)0x0) {
      operator_delete(*ppppppuVar38);
    }
    ppppppuVar17 = ppppppuStack_2c8;
    ppppppuStack_2c8 = ppppppuVar18;
  }
  ppppppuStack_2c8 = ppppppuVar17;
  if (local_2d0 != (undefined8 ******)0x0) {
    operator_delete(local_2d0);
  }
  if (CONCAT44(local_20c,uStack_210) != 0) {
    piVar1 = (int *)(CONCAT44(local_20c,uStack_210) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_248);
    }
  }
  uStack_210 = 0;
  local_20c = 0;
  uStack_220 = 0;
  uStack_21c = 0;
  uStack_228 = 0;
  local_224 = 0;
  uStack_230 = 0;
  uStack_22c = 0;
  uStack_238 = 0;
  local_234 = 0;
  if (0 < (int)local_244) {
    lVar26 = 0;
    do {
      *(undefined4 *)(local_208 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < (int)local_244);
  }
  if (local_200 != &local_1f8) {
    cv::fastFree(local_200);
  }
  if (CONCAT44(local_1ac,uStack_1b0) != 0) {
    piVar1 = (int *)(CONCAT44(local_1ac,uStack_1b0) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_1e8);
    }
  }
  uStack_1b0 = 0;
  local_1ac = 0;
  uStack_1d0 = 0;
  uStack_1cc = 0;
  uStack_1d8 = 0;
  local_1d4 = 0;
  uStack_1c0 = 0;
  uStack_1bc = 0;
  uStack_1c8 = 0;
  local_1c4 = 0;
  if (0 < local_1e4) {
    lVar26 = 0;
    do {
      *(undefined4 *)((long)local_1a8 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < local_1e4);
  }
  if (local_1a0 != &local_198) {
    cv::fastFree(local_1a0);
  }
  if (CONCAT44(local_14c,uStack_150) != 0) {
    piVar1 = (int *)(CONCAT44(local_14c,uStack_150) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_188);
    }
  }
  uStack_150 = 0;
  local_14c = 0;
  uStack_170 = 0;
  uStack_16c = 0;
  uStack_178 = 0;
  uStack_174 = 0;
  uStack_160 = 0;
  uStack_15c = 0;
  uStack_168 = 0;
  local_164 = 0;
  if (0 < local_184) {
    lVar26 = 0;
    do {
      *(undefined4 *)((long)local_148 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < local_184);
  }
  if (local_140 != &local_138) {
    cv::fastFree(local_140);
  }
  if (CONCAT44(local_ec,uStack_f0) != 0) {
    piVar1 = (int *)(CONCAT44(local_ec,uStack_f0) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_128);
    }
  }
  uStack_f0 = 0;
  local_ec = 0;
  uStack_110 = 0;
  uStack_10c = 0;
  uStack_118 = 0;
  local_114 = 0;
  uStack_100 = 0;
  uStack_fc = 0;
  uStack_108 = 0;
  local_104 = 0;
  if (0 < (int)local_124) {
    lVar26 = 0;
    do {
      *(undefined4 *)(local_e8 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < (int)local_124);
  }
  if (local_e0 != &local_d8) {
    cv::fastFree(local_e0);
  }
  if (CONCAT44(local_8c,uStack_90) != 0) {
    piVar1 = (int *)(CONCAT44(local_8c,uStack_90) + 0x14);
    do {
      iVar19 = *piVar1;
      cVar10 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar19 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar19 + -1 == 0) {
      cv::Mat::deallocate((Mat *)&local_c8);
    }
  }
  uStack_90 = 0;
  local_8c = 0;
  uStack_b0 = 0;
  uStack_ac = 0;
  uStack_b8 = 0;
  local_b4 = 0;
  uStack_a0 = 0;
  uStack_9c = 0;
  uStack_a8 = 0;
  local_a4 = 0;
  if (0 < (int)local_c4) {
    lVar26 = 0;
    do {
      *(undefined4 *)(local_88 + lVar26 * 4) = 0;
      lVar26 = lVar26 + 1;
    } while (lVar26 < (int)local_c4);
  }
  if (local_80 != &local_78) {
    cv::fastFree(local_80);
  }
  if (*(long *)(lVar16 + 0x28) == lVar24) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018bb1c (392 bytes) name=raw8bitToMat

/* ImageProc::raw8bitToMat(unsigned char const*, int, int, cv::Mat*) */

void __thiscall
ImageProc::raw8bitToMat(ImageProc *this,uchar *param_1,int param_2,int param_3,Mat *param_4)

{
  ulong uVar1;
  uchar *puVar2;
  long lVar3;
  uint uVar4;
  uint uVar5;
  Mat *pMVar6;
  long lVar7;
  uchar *puVar8;
  uchar *puVar10;
  uchar *puVar11;
  uint uVar12;
  long lVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  long *local_1a8 [44];
  long local_48;
  uchar *puVar9;
  
  lVar3 = tpidr_el0;
  local_48 = *(long *)(lVar3 + 0x28);
  cv::Mat::zeros((Mat *)(ulong)(uint)param_3,param_2,0,param_3);
  (**(code **)(*local_1a8[0] + 0x18))(local_1a8[0],local_1a8,param_4,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_1a8);
  if (((byte)param_4[1] >> 6 & 1) == 0) {
    if (0 < param_3) {
      uVar1 = (ulong)(param_2 - 1) + 1;
      lVar7 = uVar1 - (param_2 & 0x1fU);
      pMVar6 = (Mat *)0x0;
      do {
        if (param_2 != 0) {
          puVar10 = (uchar *)(*(long *)(param_4 + 0x10) + **(long **)(param_4 + 0x48) * (long)pMVar6
                             );
          puVar9 = param_1;
          uVar12 = param_2;
          if (uVar1 < 0x20) goto LAB_0018bc40;
          if (lVar7 == 0) goto LAB_0018bc40;
          if ((puVar10 < param_1 + uVar1) &&
             (param_1 < (uchar *)(*(long *)(param_4 + 0x10) + uVar1 +
                                 **(long **)(param_4 + 0x48) * (long)pMVar6))) goto LAB_0018bc40;
          puVar2 = puVar10 + lVar7;
          puVar8 = param_1 + lVar7;
          puVar9 = param_1 + 0x10;
          puVar11 = puVar10 + 0x10;
          lVar13 = lVar7;
          do {
            puVar10 = puVar9 + -8;
            uVar14 = *(undefined8 *)(puVar9 + -0x10);
            uVar16 = *(undefined8 *)(puVar9 + 8);
            uVar15 = *(undefined8 *)puVar9;
            puVar9 = puVar9 + 0x20;
            lVar13 = lVar13 + -0x20;
            *(undefined8 *)(puVar11 + -8) = *(undefined8 *)puVar10;
            *(undefined8 *)(puVar11 + -0x10) = uVar14;
            *(undefined8 *)(puVar11 + 8) = uVar16;
            *(undefined8 *)puVar11 = uVar15;
            puVar11 = puVar11 + 0x20;
            uVar4 = param_2 - (int)lVar7;
            puVar10 = puVar2;
            uVar5 = param_2 & 0x1fU;
          } while (lVar13 != 0);
          while (puVar9 = puVar8, uVar12 = uVar4, uVar5 != 0) {
LAB_0018bc40:
            puVar8 = puVar9 + 1;
            *puVar10 = *puVar9;
            uVar4 = uVar12 - 1;
            puVar10 = puVar10 + 1;
            uVar5 = uVar12 - 1;
          }
          param_1 = param_1 + uVar1;
        }
        pMVar6 = pMVar6 + 1;
      } while (pMVar6 != (Mat *)(ulong)(uint)param_3);
    }
  }
  else {
    memcpy(*(void **)(param_4 + 0x10),param_1,(long)(param_3 * param_2));
  }
  if (*(long *)(lVar3 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0018bcb8 (876 bytes) name=threshold_

/* ImageProc::threshold_(cv::Mat const&, cv::Mat&, int, int) */

void __thiscall
ImageProc::threshold_(ImageProc *this,Mat *param_1,Mat *param_2,int param_3,int param_4)

{
  ulong uVar1;
  byte *pbVar2;
  byte *pbVar3;
  uint uVar4;
  long lVar5;
  uint3 uVar6;
  long lVar7;
  uint uVar8;
  Mat *pMVar9;
  long lVar10;
  byte *pbVar11;
  byte *pbVar12;
  char *pcVar13;
  char *pcVar14;
  uint uVar15;
  undefined8 *puVar16;
  long lVar17;
  byte bVar18;
  ushort uVar19;
  byte bVar20;
  byte bVar21;
  uint uVar22;
  undefined8 uVar23;
  uint uVar24;
  undefined8 uVar25;
  uint uVar26;
  uint uVar27;
  uint uVar28;
  uint uVar29;
  uint uVar30;
  uint uVar31;
  uint uVar32;
  uint uVar33;
  long *local_1b8 [44];
  long local_58;
  
  lVar5 = tpidr_el0;
  local_58 = *(long *)(lVar5 + 0x28);
  uVar8 = *(uint *)(param_1 + 8);
  uVar4 = *(uint *)(param_1 + 0xc);
  cv::Mat::zeros((Mat *)(ulong)uVar8,uVar4,0,param_3);
  (**(code **)(*local_1b8[0] + 0x18))(local_1b8[0],local_1b8,param_2,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_1b8);
  if ((((byte)param_1[1] >> 6 & 1) == 0) || (((byte)param_2[1] >> 6 & 1) == 0)) {
    if (0 < (int)uVar8) {
      uVar1 = (ulong)(uVar4 - 1) + 1;
      lVar10 = uVar1 - (uVar4 & 0xf);
      pMVar9 = (Mat *)0x0;
      do {
        if (uVar4 != 0) {
          lVar17 = *(long *)(param_1 + 0x10);
          lVar7 = **(long **)(param_1 + 0x48) * (long)pMVar9;
          pcVar13 = (char *)(*(long *)(param_2 + 0x10) + **(long **)(param_2 + 0x48) * (long)pMVar9)
          ;
          pbVar12 = (byte *)(lVar17 + lVar7);
          uVar15 = uVar4;
          if (((0xf < uVar1) && (lVar10 != 0)) &&
             (((char *)(lVar17 + uVar1 + lVar7) <= pcVar13 ||
              ((byte *)(*(long *)(param_2 + 0x10) + uVar1 +
                       **(long **)(param_2 + 0x48) * (long)pMVar9) <= pbVar12)))) {
            pcVar14 = pcVar13;
            puVar16 = (undefined8 *)(lVar17 + **(long **)(param_1 + 0x48) * (long)pMVar9);
            lVar7 = lVar10;
            do {
              uVar25 = puVar16[1];
              uVar23 = *puVar16;
              lVar7 = lVar7 + -0x10;
              bVar18 = (byte)((ulong)uVar23 >> 8);
              bVar20 = (byte)((ulong)uVar23 >> 0x28);
              uVar27 = (uint)CONCAT12(bVar20,(ushort)(byte)((ulong)uVar23 >> 0x20));
              uVar6 = CONCAT12((char)((ulong)uVar25 >> 8),(short)uVar25) & 0xff00ff;
              bVar21 = (byte)((ulong)uVar25 >> 0x28);
              uVar19 = (ushort)(byte)(uVar6 >> 0x10);
              uVar32 = (uint)(byte)((ulong)uVar25 >> 0x10);
              uVar22 = CONCAT12(bVar21,(ushort)(byte)((ulong)uVar25 >> 0x20)) & 0xffff;
              uVar24 = (uint)(byte)((ulong)uVar25 >> 0x30);
              uVar26 = (uint)(byte)((ulong)uVar25 >> 0x38);
              uVar33 = (uint)(byte)((ulong)uVar25 >> 0x18);
              uVar15 = (uint)CONCAT12(bVar18,(ushort)(byte)uVar23);
              uVar30 = (uint)(byte)((ulong)uVar23 >> 0x10);
              uVar28 = (uint)(byte)((ulong)uVar23 >> 0x30);
              uVar29 = (uint)(byte)((ulong)uVar23 >> 0x38);
              uVar31 = (uint)(byte)((ulong)uVar23 >> 0x18);
              *(ulong *)(pcVar14 + 8) =
                   CONCAT17((char)((-(param_3 <= (int)uVar26) & -((int)uVar26 < param_4)) << 7) >> 7
                            ,CONCAT16((char)((param_3 <= (int)uVar24) * -0x80 &
                                            ((int)uVar24 < param_4) * -0x80) >> 7,
                                      CONCAT15((char)((param_3 <= (int)(uint)bVar21) * -0x80 &
                                                     ((int)(uint)bVar21 < param_4) * -0x80) >> 7,
                                               CONCAT14((char)((param_3 <= (int)uVar22) * -0x80 &
                                                              ((int)uVar22 < param_4) * -0x80) >> 7,
                                                        CONCAT13((char)((param_3 <= (int)uVar33) *
                                                                        -0x80 & ((int)uVar33 <
                                                                                param_4) * -0x80) >>
                                                                 7,CONCAT12((char)((param_3 <=
                                                                                   (int)uVar32) *
                                                                                   -0x80 & ((int)
                                                  uVar32 < param_4) * -0x80) >> 7,
                                                  CONCAT11((char)((param_3 <= (int)(uint)uVar19) *
                                                                  -0x80 & ((int)(uint)uVar19 <
                                                                          param_4) * -0x80) >> 7,
                                                           (char)((param_3 <= (int)(uVar6 & 0xffff))
                                                                  * -0x80 &
                                                                 ((int)(uVar6 & 0xffff) < param_4) *
                                                                 -0x80) >> 7)))))));
              *(ulong *)pcVar14 =
                   CONCAT17((char)((param_3 <= (int)uVar29) * -0x80 &
                                  ((int)uVar29 < param_4) * -0x80) >> 7,
                            CONCAT16((char)((-(param_3 <= (int)uVar28) & -((int)uVar28 < param_4))
                                           << 7) >> 7,
                                     CONCAT15((char)((-(param_3 <= (int)(uint)(ushort)bVar20) &
                                                     -((int)(uint)(ushort)bVar20 < param_4)) << 7)
                                              >> 7,CONCAT14((char)((-(param_3 <=
                                                                     (int)(uVar27 & 0xffff)) &
                                                                   -((int)(uVar27 & 0xffff) <
                                                                    param_4)) << 7) >> 7,
                                                            CONCAT13((char)((-(param_3 <=
                                                                              (int)uVar31) &
                                                                            -((int)uVar31 < param_4)
                                                                            ) << 7) >> 7,
                                                                     CONCAT12((char)((-(param_3 <=
                                                                                       (int)uVar30)
                                                                                     & -((int)uVar30
                                                                                        < param_4))
                                                                                    << 7) >> 7,
                                                                              CONCAT11((char)((-(
                                                  param_3 <= (int)(uint)(ushort)bVar18) &
                                                  -((int)(uint)(ushort)bVar18 < param_4)) << 7) >> 7
                                                  ,(char)((-(param_3 <= (int)(uVar15 & 0xffff)) &
                                                          -((int)(uVar15 & 0xffff) < param_4)) << 7)
                                                   >> 7)))))));
              pcVar14 = pcVar14 + 0x10;
              puVar16 = puVar16 + 2;
            } while (lVar7 != 0);
            pcVar13 = pcVar13 + lVar10;
            pbVar12 = pbVar12 + lVar10;
            uVar15 = uVar4 - (int)lVar10;
            if ((uVar4 & 0xf) == 0) goto LAB_0018beac;
          }
          do {
            uVar15 = uVar15 - 1;
            *pcVar13 = -(param_3 <= (int)(uint)*pbVar12 && (int)(uint)*pbVar12 < param_4);
            pcVar13 = pcVar13 + 1;
            pbVar12 = pbVar12 + 1;
          } while (uVar15 != 0);
        }
LAB_0018beac:
        pMVar9 = pMVar9 + 1;
      } while (pMVar9 != (Mat *)(ulong)uVar8);
    }
  }
  else {
    uVar8 = uVar8 * uVar4;
    if (uVar8 != 0) {
      pbVar11 = *(byte **)(param_2 + 0x10);
      pbVar12 = *(byte **)(param_1 + 0x10);
      uVar1 = (ulong)(uVar8 - 1) + 1;
      if (0xf < uVar1) {
        uVar4 = uVar8 & 0xf;
        lVar10 = uVar1 - uVar4;
        if ((lVar10 != 0) &&
           ((lVar7 = (ulong)(uVar8 - 1) + 1, pbVar12 + lVar7 <= pbVar11 ||
            (pbVar11 + lVar7 <= pbVar12)))) {
          pbVar2 = pbVar12 + lVar10;
          pbVar3 = pbVar11 + lVar10;
          uVar8 = uVar8 - (int)lVar10;
          do {
            uVar25 = *(undefined8 *)(pbVar12 + 8);
            uVar23 = *(undefined8 *)pbVar12;
            lVar10 = lVar10 + -0x10;
            bVar18 = (byte)((ulong)uVar23 >> 8);
            bVar20 = (byte)((ulong)uVar23 >> 0x28);
            uVar27 = (uint)CONCAT12(bVar20,(ushort)(byte)((ulong)uVar23 >> 0x20));
            uVar6 = CONCAT12((char)((ulong)uVar25 >> 8),(short)uVar25) & 0xff00ff;
            bVar21 = (byte)((ulong)uVar25 >> 0x28);
            uVar19 = (ushort)(byte)(uVar6 >> 0x10);
            uVar32 = (uint)(byte)((ulong)uVar25 >> 0x10);
            uVar22 = CONCAT12(bVar21,(ushort)(byte)((ulong)uVar25 >> 0x20)) & 0xffff;
            uVar24 = (uint)(byte)((ulong)uVar25 >> 0x30);
            uVar26 = (uint)(byte)((ulong)uVar25 >> 0x38);
            uVar33 = (uint)(byte)((ulong)uVar25 >> 0x18);
            uVar15 = (uint)CONCAT12(bVar18,(ushort)(byte)uVar23);
            uVar30 = (uint)(byte)((ulong)uVar23 >> 0x10);
            uVar28 = (uint)(byte)((ulong)uVar23 >> 0x30);
            uVar29 = (uint)(byte)((ulong)uVar23 >> 0x38);
            uVar31 = (uint)(byte)((ulong)uVar23 >> 0x18);
            *(ulong *)(pbVar11 + 8) =
                 CONCAT17((char)((-(param_3 <= (int)uVar26) & -((int)uVar26 < param_4)) << 7) >> 7,
                          CONCAT16((char)((param_3 <= (int)uVar24) * -0x80 &
                                         ((int)uVar24 < param_4) * -0x80) >> 7,
                                   CONCAT15((char)((param_3 <= (int)(uint)bVar21) * -0x80 &
                                                  ((int)(uint)bVar21 < param_4) * -0x80) >> 7,
                                            CONCAT14((char)((param_3 <= (int)uVar22) * -0x80 &
                                                           ((int)uVar22 < param_4) * -0x80) >> 7,
                                                     CONCAT13((char)((param_3 <= (int)uVar33) *
                                                                     -0x80 & ((int)uVar33 < param_4)
                                                                             * -0x80) >> 7,
                                                              CONCAT12((char)((param_3 <=
                                                                              (int)uVar32) * -0x80 &
                                                                             ((int)uVar32 < param_4)
                                                                             * -0x80) >> 7,
                                                                       CONCAT11((char)((param_3 <=
                                                                                       (int)(uint)
                                                  uVar19) * -0x80 &
                                                  ((int)(uint)uVar19 < param_4) * -0x80) >> 7,
                                                  (char)((param_3 <= (int)(uVar6 & 0xffff)) * -0x80
                                                        & ((int)(uVar6 & 0xffff) < param_4) * -0x80)
                                                  >> 7)))))));
            *(ulong *)pbVar11 =
                 CONCAT17((char)((param_3 <= (int)uVar29) * -0x80 & ((int)uVar29 < param_4) * -0x80)
                          >> 7,CONCAT16((char)((-(param_3 <= (int)uVar28) & -((int)uVar28 < param_4)
                                               ) << 7) >> 7,
                                        CONCAT15((char)((-(param_3 <= (int)(uint)(ushort)bVar20) &
                                                        -((int)(uint)(ushort)bVar20 < param_4)) << 7
                                                       ) >> 7,
                                                 CONCAT14((char)((-(param_3 <=
                                                                   (int)(uVar27 & 0xffff)) &
                                                                 -((int)(uVar27 & 0xffff) < param_4)
                                                                 ) << 7) >> 7,
                                                          CONCAT13((char)((-(param_3 <= (int)uVar31)
                                                                          & -((int)uVar31 < param_4)
                                                                          ) << 7) >> 7,
                                                                   CONCAT12((char)((-(param_3 <=
                                                                                     (int)uVar30) &
                                                                                   -((int)uVar30 <
                                                                                    param_4)) << 7)
                                                                            >> 7,CONCAT11((char)((-(
                                                  param_3 <= (int)(uint)(ushort)bVar18) &
                                                  -((int)(uint)(ushort)bVar18 < param_4)) << 7) >> 7
                                                  ,(char)((-(param_3 <= (int)(uVar15 & 0xffff)) &
                                                          -((int)(uVar15 & 0xffff) < param_4)) << 7)
                                                   >> 7)))))));
            pbVar11 = pbVar11 + 0x10;
            pbVar12 = pbVar12 + 0x10;
          } while (lVar10 != 0);
          pbVar12 = pbVar2;
          pbVar11 = pbVar3;
          if (uVar4 == 0) goto LAB_0018bf34;
        }
      }
      do {
        uVar8 = uVar8 - 1;
        *pbVar11 = -(param_3 <= (int)(uint)*pbVar12 && (int)(uint)*pbVar12 < param_4);
        pbVar12 = pbVar12 + 1;
        pbVar11 = pbVar11 + 1;
      } while (uVar8 != 0);
    }
  }
LAB_0018bf34:
  if (*(long *)(lVar5 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0018c038 (660 bytes) name=resetMatMaskPoints

/* ImageProc::resetMatMaskPoints(cv::Mat&, unsigned int const*, int) */

void __thiscall
ImageProc::resetMatMaskPoints(ImageProc *this,Mat *param_1,uint *param_2,int param_3)

{
  bool bVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  ulong __n;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  
  uVar6 = *(uint *)param_1;
  iVar4 = *(int *)(param_1 + 8);
  uVar5 = *(uint *)(param_1 + 0xc);
  __n = (ulong)uVar5;
  uVar13 = **(ulong **)(param_1 + 0x48);
  uVar8 = uVar5 - 1;
  uVar7 = (int)(*(int *)(this + 0x1c) * uVar5) / 100;
  uVar10 = (int)(*(int *)(this + 0x24) * uVar5) / 100;
  iVar9 = iVar4 + -1;
  iVar11 = (*(int *)(this + 0x20) * iVar4) / 100;
  uVar2 = uVar8;
  if ((int)uVar7 <= (int)uVar8) {
    uVar2 = uVar7;
  }
  iVar12 = (*(int *)(this + 0x28) * iVar4) / 100;
  if ((int)uVar10 <= (int)uVar8) {
    uVar8 = uVar10;
  }
  iVar3 = iVar9;
  if (iVar11 <= iVar9) {
    iVar3 = iVar11;
  }
  if (iVar12 <= iVar9) {
    iVar9 = iVar12;
  }
  if ((-1 < iVar3) && (memset(*(void **)(param_1 + 0x10),0,__n), iVar3 != 0)) {
    lVar15 = 1;
    do {
      memset((void *)(*(long *)(param_1 + 0x10) + **(long **)(param_1 + 0x48) * lVar15),0,__n);
      bVar1 = lVar15 < iVar3;
      lVar15 = lVar15 + 1;
    } while (bVar1);
  }
  if (iVar9 < iVar4) {
    lVar15 = (long)(iVar9 + 1) + -1;
    do {
      memset((void *)(*(long *)(param_1 + 0x10) + **(long **)(param_1 + 0x48) * lVar15),0,__n);
      lVar15 = lVar15 + 1;
    } while (lVar15 < iVar4);
  }
  lVar15 = *(long *)(param_1 + 0x10);
  if (iVar3 + 1 < iVar9) {
    uVar7 = -uVar5;
    lVar16 = (long)(iVar3 + 1);
    if ((int)uVar7 <= (int)~uVar10) {
      uVar7 = ~uVar10;
    }
    do {
      lVar14 = **(long **)(param_1 + 0x48);
      if (-1 < (int)uVar2) {
        memset((void *)(lVar15 + lVar14 * lVar16),0,(ulong)uVar2 + 1);
        lVar15 = *(long *)(param_1 + 0x10);
        lVar14 = **(long **)(param_1 + 0x48);
      }
      if ((int)uVar8 < (int)uVar5) {
        memset((void *)(lVar15 + lVar14 * lVar16 + (long)(int)uVar8),0,(ulong)(uVar5 + uVar7) + 1);
        lVar15 = *(long *)(param_1 + 0x10);
      }
      lVar16 = lVar16 + 1;
    } while (lVar16 < iVar9);
  }
  if (((byte)param_1[1] >> 6 & 1) == 0) {
    if (0 < param_3) {
      uVar2 = 0x88442211 >> ((uVar6 & 7) << 2);
      iVar9 = 0;
      if ((uVar2 & 0xf) != 0) {
        iVar9 = (int)(uVar13 / ((ulong)uVar2 & 0xf));
      }
      do {
        param_3 = param_3 + -1;
        iVar4 = 0;
        if (uVar5 != 0) {
          iVar4 = (int)*param_2 / (int)uVar5;
        }
        *(undefined1 *)(lVar15 + iVar4 * iVar9 + (long)(int)(*param_2 - iVar4 * uVar5)) = 0;
        param_2 = param_2 + 1;
      } while (param_3 != 0);
    }
  }
  else if (0 < param_3) {
    do {
      param_3 = param_3 + -1;
      *(undefined1 *)(lVar15 + (ulong)*param_2) = 0;
      param_2 = param_2 + 1;
    } while (param_3 != 0);
  }
  return;
}


==================================================================

### FUNC 0018c2cc (156 bytes) name=calcRectMinHorDistance

/* ImageProc::calcRectMinHorDistance(cv::Rect_<int>, cv::Rect_<int>) */

uint __thiscall ImageProc::calcRectMinHorDistance(undefined8 param_1,int *param_2,int *param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  
  iVar2 = *param_2;
  iVar3 = *param_3;
  uVar4 = iVar2 - iVar3;
  uVar5 = iVar2 - (param_3[2] + iVar3);
  uVar6 = (param_2[2] + iVar2) - (param_3[2] + iVar3);
  uVar7 = (param_2[2] + iVar2) - iVar3;
  if ((((((int)uVar6 < 1) || ((int)uVar4 < 1)) || ((int)uVar5 < 1)) || ((int)uVar7 < 1)) &&
     (-1 < (int)(uVar5 & uVar4 & uVar7 & uVar6))) {
    return 0;
  }
  uVar1 = -uVar4;
  if (-1 < (int)uVar4) {
    uVar1 = uVar4;
  }
  uVar4 = -uVar5;
  if (-1 < (int)uVar5) {
    uVar4 = uVar5;
  }
  uVar5 = -uVar7;
  if (-1 < (int)uVar7) {
    uVar5 = uVar7;
  }
  uVar7 = -uVar6;
  if (-1 < (int)uVar6) {
    uVar7 = uVar6;
  }
  if ((int)uVar5 <= (int)uVar7) {
    uVar7 = uVar5;
  }
  if ((int)uVar1 <= (int)uVar4) {
    uVar4 = uVar1;
  }
  if ((int)uVar4 <= (int)uVar7) {
    uVar7 = uVar4;
  }
  return uVar7;
}


==================================================================

### FUNC 0018c368 (156 bytes) name=calcRectMinVerDistance

/* ImageProc::calcRectMinVerDistance(cv::Rect_<int>, cv::Rect_<int>) */

uint __thiscall ImageProc::calcRectMinVerDistance(undefined8 param_1,long param_2,long param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  
  iVar4 = *(int *)(param_2 + 4);
  iVar5 = *(int *)(param_3 + 4);
  uVar6 = iVar4 - iVar5;
  iVar1 = *(int *)(param_3 + 0xc) + iVar5;
  iVar2 = *(int *)(param_2 + 0xc) + iVar4;
  uVar7 = iVar4 - iVar1;
  uVar8 = iVar2 - iVar1;
  uVar9 = iVar2 - iVar5;
  if ((((((int)uVar8 < 1) || ((int)uVar6 < 1)) || ((int)uVar7 < 1)) || ((int)uVar9 < 1)) &&
     (-1 < (int)(uVar7 & uVar6 & uVar9 & uVar8))) {
    return 0;
  }
  uVar3 = -uVar6;
  if (-1 < (int)uVar6) {
    uVar3 = uVar6;
  }
  uVar6 = -uVar7;
  if (-1 < (int)uVar7) {
    uVar6 = uVar7;
  }
  uVar7 = -uVar9;
  if (-1 < (int)uVar9) {
    uVar7 = uVar9;
  }
  uVar9 = -uVar8;
  if (-1 < (int)uVar8) {
    uVar9 = uVar8;
  }
  if ((int)uVar7 <= (int)uVar9) {
    uVar9 = uVar7;
  }
  if ((int)uVar3 <= (int)uVar6) {
    uVar6 = uVar3;
  }
  if ((int)uVar6 <= (int)uVar9) {
    uVar9 = uVar6;
  }
  return uVar9;
}


==================================================================

### FUNC 0018c404 (416 bytes) name=raw32bitToMat

/* ImageProc::raw32bitToMat(unsigned int const*, int, int, cv::Mat*) */

void __thiscall
ImageProc::raw32bitToMat(ImageProc *this,uint *param_1,int param_2,int param_3,Mat *param_4)

{
  ulong uVar1;
  long lVar2;
  uint *puVar3;
  uint uVar4;
  uint uVar5;
  uint *puVar6;
  uint uVar8;
  long lVar9;
  undefined8 *puVar10;
  Mat *pMVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  undefined8 *puVar15;
  uint *puVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  long *local_1a8 [44];
  long local_48;
  uint *puVar7;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  cv::Mat::zeros((Mat *)(ulong)(uint)param_3,param_2,0x18,param_3);
  (**(code **)(*local_1a8[0] + 0x18))(local_1a8[0],local_1a8,param_4,0xffffffff);
  cv::MatExpr::~MatExpr((MatExpr *)local_1a8);
  if (((byte)param_4[1] >> 6 & 1) == 0) {
    if (0 < param_3) {
      lVar12 = *(long *)(param_4 + 0x10);
      uVar1 = (ulong)(param_2 - 1) + 1;
      lVar13 = **(long **)(param_4 + 0x48);
      lVar14 = uVar1 - (param_2 & 7U);
      pMVar11 = (Mat *)0x0;
      puVar15 = (undefined8 *)(lVar12 + 0x10);
      do {
        if (param_2 != 0) {
          puVar16 = (uint *)(lVar12 + lVar13 * (long)pMVar11);
          puVar6 = param_1;
          uVar8 = param_2;
          if (uVar1 < 8) goto LAB_0018c538;
          if (lVar14 == 0) goto LAB_0018c538;
          if (((uint *)(lVar12 + lVar13 * (long)pMVar11) < param_1 + uVar1) &&
             (param_1 < (uint *)(lVar12 + (ulong)(param_2 - 1) * 4 + 4 + lVar13 * (long)pMVar11)))
          goto LAB_0018c538;
          puVar16 = puVar16 + lVar14;
          puVar7 = param_1 + lVar14;
          puVar6 = param_1 + 4;
          lVar9 = lVar14;
          puVar10 = puVar15;
          do {
            puVar3 = puVar6 + -2;
            uVar17 = *(undefined8 *)(puVar6 + -4);
            uVar19 = *(undefined8 *)(puVar6 + 2);
            uVar18 = *(undefined8 *)puVar6;
            puVar6 = puVar6 + 8;
            lVar9 = lVar9 + -8;
            puVar10[-1] = *(undefined8 *)puVar3;
            puVar10[-2] = uVar17;
            puVar10[1] = uVar19;
            *puVar10 = uVar18;
            puVar10 = puVar10 + 4;
            uVar4 = param_2 - (int)lVar14;
            uVar5 = param_2 & 7U;
          } while (lVar9 != 0);
          while (puVar6 = puVar7, uVar8 = uVar4, uVar5 != 0) {
LAB_0018c538:
            puVar7 = puVar6 + 1;
            *puVar16 = *puVar6;
            uVar4 = uVar8 - 1;
            puVar16 = puVar16 + 1;
            uVar5 = uVar8 - 1;
          }
          param_1 = param_1 + uVar1;
        }
        pMVar11 = pMVar11 + 1;
        puVar15 = (undefined8 *)((long)puVar15 + lVar13);
      } while (pMVar11 != (Mat *)(ulong)(uint)param_3);
    }
  }
  else {
    memcpy(*(void **)(param_4 + 0x10),param_1,(long)(param_2 * param_3 * 4));
  }
  if (*(long *)(lVar2 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018c5b8 (128 bytes) name=putValue

/* ImageProc::putValue(unsigned char*, int, int, int, int, int) */

ImageProc * __thiscall
ImageProc::putValue(ImageProc *this,uchar *param_1,int param_2,int param_3,int param_4,int param_5,
                   int param_6)

{
  long lVar1;
  int iVar2;
  
  if (0 < param_6) {
    lVar1 = (long)param_4;
    iVar2 = param_4 * param_2;
    do {
      if (param_5 != 0) {
        this = memset(param_1 + (long)iVar2 + (long)param_3,0xff,(ulong)(param_5 - 1) + 1);
      }
      lVar1 = lVar1 + 1;
      iVar2 = iVar2 + param_2;
    } while (lVar1 < param_6 + param_4);
  }
  return this;
}


==================================================================

### FUNC 0018c638 (248 bytes) name=calcImageProportion

/* ImageProc::calcImageProportion(cv::Mat, cv::Rect_<int>) */

int __thiscall ImageProc::calcImageProportion(undefined8 param_1,long param_2,int *param_3)

{
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  char *pcVar6;
  int iVar7;
  ulong uVar8;
  char *pcVar9;
  int iVar10;
  int iVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  
  iVar4 = param_3[3];
  if (iVar4 < 1) {
    iVar11 = param_3[2];
    iVar10 = 0;
  }
  else {
    iVar11 = param_3[2];
    lVar13 = **(long **)(param_2 + 0x48);
    uVar2 = (ulong)(iVar11 - 1U) + 1;
    uVar3 = ~(iVar11 - 1U) & 1;
    lVar12 = 0;
    iVar10 = 0;
    uVar14 = uVar2 - uVar3;
    pcVar5 = (char *)(*(long *)(param_2 + 0x10) + (long)*param_3 + lVar13 * param_3[1] + 1);
    do {
      if (0 < iVar11) {
        pcVar6 = (char *)(*(long *)(param_2 + 0x10) + lVar13 * (lVar12 + param_3[1]) +
                         (long)*param_3);
        if ((uVar2 < 2) || (uVar14 == 0)) {
          uVar8 = 0;
        }
        else {
          iVar7 = 0;
          uVar8 = uVar14;
          pcVar9 = pcVar5;
          do {
            uVar8 = uVar8 - 2;
            if (pcVar9[-1] != '\0') {
              iVar10 = iVar10 + 1;
            }
            if (*pcVar9 != '\0') {
              iVar7 = iVar7 + 1;
            }
            pcVar9 = pcVar9 + 2;
          } while (uVar8 != 0);
          iVar10 = iVar7 + iVar10;
          uVar8 = uVar14 & 0xffffffff;
          pcVar6 = pcVar6 + uVar14;
          if (uVar3 == 0) goto LAB_0018c700;
        }
        do {
          uVar1 = (int)uVar8 + 1;
          uVar8 = (ulong)uVar1;
          if (*pcVar6 != '\0') {
            iVar10 = iVar10 + 1;
          }
          pcVar6 = pcVar6 + 1;
        } while ((int)uVar1 < iVar11);
      }
LAB_0018c700:
      lVar12 = lVar12 + 1;
      pcVar5 = pcVar5 + lVar13;
    } while (lVar12 < iVar4);
  }
  iVar7 = 0;
  if (iVar11 * iVar4 != 0) {
    iVar7 = (iVar10 * 100) / (iVar11 * iVar4);
  }
  return iVar7;
}


==================================================================

### FUNC 0018c730 (4 bytes) name=showImage

/* ImageProc::showImage(cv::Mat const&, std::list<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >,
   std::string) */

void ImageProc::showImage(void)

{
  return;
}


==================================================================

### FUNC 0018c734 (44 bytes) name=_S_select<std::allocator<cv::Point_<int>>const,void>

/* std::allocator<cv::Point_<int> > const std::allocator_traits<std::allocator<cv::Point_<int> >
   >::_S_select<std::allocator<cv::Point_<int> > const, void>(std::allocator<cv::Point_<int> >
   const&, ...) */

void std::allocator_traits<std::allocator<cv::Point_<int>>>::
     _S_select<std::allocator<cv::Point_<int>>const,void>(allocator_conflict *param_1,...)

{
  return;
}


==================================================================

### FUNC 0018c760 (248 bytes) name=_M_emplace_back_aux<JRect>

/* void std::vector<JRect, std::allocator<JRect> >::_M_emplace_back_aux<JRect>(JRect&&) */

void __thiscall
std::vector<JRect,std::allocator<JRect>>::_M_emplace_back_aux<JRect>
          (vector<JRect,std::allocator<JRect>> *this,JRect *param_1)

{
  ulong uVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong uVar5;
  ulong uVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar10;
  undefined8 *puVar9;
  
  puVar4 = *(undefined8 **)this;
  puVar3 = *(undefined8 **)(this + 8);
  uVar6 = (long)puVar3 - (long)puVar4 >> 4;
  uVar5 = uVar6;
  if (uVar6 == 0) {
    uVar5 = 1;
  }
  uVar1 = 0xfffffffffffffff;
  if (!CARRY8(uVar5,uVar6) && uVar5 + uVar6 >> 0x3c == 0) {
    uVar1 = uVar5 + uVar6;
  }
  if (uVar1 == 0) {
    puVar2 = (undefined8 *)0x0;
  }
  else {
    if (uVar1 >> 0x3c != 0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
    puVar2 = operator_new(uVar1 << 4);
    puVar4 = *(undefined8 **)this;
    puVar3 = *(undefined8 **)(this + 8);
  }
  uVar10 = *(undefined8 *)param_1;
  puVar7 = (undefined8 *)((long)puVar2 + ((long)puVar3 - (long)puVar4));
  puVar7[1] = *(undefined8 *)(param_1 + 8);
  *puVar7 = uVar10;
  puVar7 = puVar2;
  puVar8 = puVar4;
  if (puVar4 == puVar3) {
    puVar4 = puVar2 + 2;
  }
  else {
    do {
      puVar9 = puVar8 + 2;
      uVar10 = *puVar8;
      puVar7[1] = puVar8[1];
      *puVar7 = uVar10;
      puVar7 = puVar7 + 2;
      puVar8 = puVar9;
    } while (puVar3 != puVar9);
    uVar5 = (long)puVar3 + (-0x10 - (long)puVar4);
    puVar3 = *(undefined8 **)this;
    puVar4 = (undefined8 *)((long)puVar2 + (uVar5 & 0xfffffffffffffff0) + 0x20);
  }
  if (puVar3 != (undefined8 *)0x0) {
    operator_delete(puVar3);
  }
  *(undefined8 **)this = puVar2;
  *(undefined8 **)(this + 8) = puVar4;
  *(undefined8 **)(this + 0x10) = puVar2 + uVar1 * 2;
  return;
}


==================================================================

### FUNC 0018c858 (68 bytes) name=MAG_SetDetectParameter

undefined8 MAG_SetDetectParameter(ulong param_1,FilterPara *param_2)

{
  undefined8 uVar1;
  
  uVar1 = MAG_IsInitialized();
  if ((int)uVar1 != 0) {
    ImageProc::setFilterPara
              ((ImageProc *)(PTR_gChannelObj_00501f00 + (param_1 & 0xffffffff) * 0x40),param_2);
    uVar1 = 1;
  }
  return uVar1;
}


==================================================================

### FUNC 0018c89c (256 bytes) name=MAG_GetDetectSuggestedParameter

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void MAG_GetDetectSuggestedParameter(undefined4 param_1,undefined8 *param_2)

{
  uint uVar1;
  long lVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int local_80 [16];
  int local_40;
  int iStack_3c;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  uVar5 = MAG_IsLinked();
  if ((int)uVar5 != 0) {
    MAG_GetCamInfo(param_1,local_80,0x48);
    *param_2 = 0xa41000006978;
    uVar4 = _UNK_0043a608;
    uVar3 = _DAT_0043a600;
    *(uint *)(param_2 + 1) = ((uint)(iStack_3c * local_40 * 5) >> 8 & 0xfffff) / 0x1b;
    *(int *)((long)param_2 + 0xc) = iStack_3c * local_40;
    *(uint *)(param_2 + 3) = (uint)(iStack_3c * 0x32) / 0x120;
    uVar1 = local_40 << 5;
    if (local_80[0] != 0xa0) {
      uVar1 = local_40 * 6;
    }
    uVar5 = 1;
    *(undefined8 *)((long)param_2 + 0x24) = uVar4;
    *(undefined8 *)((long)param_2 + 0x1c) = uVar3;
    *(uint *)(param_2 + 2) = uVar1 / 0x180;
    *(uint *)((long)param_2 + 0x14) = (uint)(local_40 * 0x19) / 0x180;
  }
  if (*(long *)(lVar2 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 0018c99c (80 bytes) name=MAG_SetDetectMaskPoints

undefined8 MAG_SetDetectMaskPoints(ulong param_1,undefined8 param_2,undefined4 param_3)

{
  undefined *puVar1;
  undefined8 uVar2;
  
  uVar2 = MAG_IsInitialized();
  puVar1 = PTR_gChannelObj_00501f00;
  if ((int)uVar2 != 0) {
    uVar2 = 1;
    *(undefined8 *)(PTR_gChannelObj_00501f00 + (param_1 & 0xffffffff) * 0x40 + 0x30) = param_2;
    *(undefined4 *)(puVar1 + (param_1 & 0xffffffff) * 0x40 + 0x38) = param_3;
  }
  return uVar2;
}


==================================================================

### FUNC 0018c9ec (288 bytes) name=MAG_FindDetectTarget

int MAG_FindDetectTarget
              (uint param_1,long param_2,int param_3,int param_4,undefined8 *param_5,int param_6)

{
  long lVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  undefined8 *puVar5;
  undefined8 uVar6;
  undefined8 *local_b8;
  long lStack_b0;
  uint local_a0 [18];
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  iVar2 = -1;
  if (((param_2 != 0) && (param_5 != (undefined8 *)0x0)) && (-1 < param_6)) {
    iVar2 = MAG_IsProcessingImage(param_1);
    if (iVar2 == 0) {
      iVar2 = -1;
    }
    else {
      MAG_GetCamInfo(param_1,local_a0,0x48);
      ImageProc::findTarget
                ((uint)(PTR_gChannelObj_00501f00 + (ulong)param_1 * 0x40),(uchar *)(ulong)param_1,
                 (int)param_2,param_3,param_4,(uint *)(ulong)local_a0[0],
                 (int)*(undefined8 *)(PTR_gChannelObj_00501f00 + (ulong)param_1 * 0x40 + 0x30));
      iVar3 = (int)((ulong)(lStack_b0 - (long)local_b8) >> 4);
      iVar2 = param_6;
      if (iVar3 <= param_6) {
        iVar2 = iVar3;
      }
      if (0 < iVar2) {
        lVar4 = 0;
        puVar5 = local_b8;
        do {
          uVar6 = *puVar5;
          lVar4 = lVar4 + 1;
          param_5[1] = puVar5[1];
          *param_5 = uVar6;
          puVar5 = puVar5 + 2;
          param_5 = param_5 + 2;
        } while (lVar4 < iVar2);
      }
      if (local_b8 != (undefined8 *)0x0) {
        operator_delete(local_b8);
      }
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018cb0c (288 bytes) name=discovered_devs_append

ulong * discovered_devs_append(ulong *param_1,pthread_mutex_t *param_2)

{
  ulong *puVar1;
  ulong uVar2;
  ulong uVar3;
  
  uVar3 = *param_1;
  if (uVar3 < param_1[1]) {
    pthread_mutex_lock(param_2);
    param_2[1].__data.__lock = param_2[1].__data.__lock + 1;
    pthread_mutex_unlock(param_2);
    param_1[uVar3 + 2] = (ulong)param_2;
    *param_1 = *param_1 + 1;
    puVar1 = param_1;
  }
  else {
    usbi_log(0,4,"discovered_devs_append","need to increase capacity");
    uVar2 = param_1[1];
    puVar1 = realloc(param_1,(uVar2 + 8) * 8 + 0x10);
    if (puVar1 == (ulong *)0x0) {
      if (*param_1 != 0) {
        uVar3 = 0;
        do {
          libusb_unref_device(param_1[uVar3 + 2]);
          uVar3 = uVar3 + 1;
        } while (uVar3 < *param_1);
      }
      free(param_1);
      puVar1 = (ulong *)0x0;
    }
    else {
      puVar1[1] = uVar2 + 8;
      pthread_mutex_lock(param_2);
      param_2[1].__data.__lock = param_2[1].__data.__lock + 1;
      pthread_mutex_unlock(param_2);
      puVar1[uVar3 + 2] = (ulong)param_2;
      *puVar1 = *puVar1 + 1;
    }
  }
  return puVar1;
}


==================================================================

### FUNC 0018cc2c (56 bytes) name=libusb_ref_device

pthread_mutex_t * libusb_ref_device(pthread_mutex_t *param_1)

{
  pthread_mutex_lock(param_1);
  param_1[1].__data.__lock = param_1[1].__data.__lock + 1;
  pthread_mutex_unlock(param_1);
  return param_1;
}


==================================================================

### FUNC 0018cc64 (148 bytes) name=usbi_log

void usbi_log(void)

{
  long lVar1;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  long lVar2;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined1 *local_70;
  undefined1 **ppuStack_68;
  undefined8 *puStack_60;
  undefined8 uStack_58;
  
  lVar1 = tpidr_el0;
  lVar2 = *(long *)(lVar1 + 0x28);
  puStack_60 = &local_90;
  ppuStack_68 = &local_70;
  uStack_58 = 0xffffff80ffffffe0;
  local_90 = in_x4;
  uStack_88 = in_x5;
  local_80 = in_x6;
  uStack_78 = in_x7;
  local_70 = (undefined1 *)register0x00000008;
  usbi_log_v();
  if (*(long *)(lVar1 + 0x28) == lVar2) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018ccf8 (192 bytes) name=usbi_alloc_device

pthread_mutex_t * usbi_alloc_device(long param_1,undefined8 param_2)

{
  undefined *puVar1;
  int iVar2;
  pthread_mutex_t *__mutex;
  long lVar3;
  undefined8 uVar4;
  
  puVar1 = PTR_linux_usbfs_backend_00501f10;
  __mutex = calloc(1,*(long *)(PTR_linux_usbfs_backend_00501f10 + 0x110) + 0x80);
  if (__mutex != (pthread_mutex_t *)0x0) {
    iVar2 = pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
    if (iVar2 == 0) {
      lVar3 = *(long *)(puVar1 + 0x20);
      *(long *)((long)__mutex + 0x30) = param_1;
      __mutex[1].__data.__lock = 1;
      *(undefined8 *)((long)__mutex + 0x60) = param_2;
      *(undefined4 *)((long)__mutex + 0x4c) = 0;
      if (lVar3 != 0) {
        *(undefined4 *)((long)__mutex + 0x7c) = 1;
        pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x20));
        lVar3 = *(long *)((long)__mutex + 0x30);
        uVar4 = *(undefined8 *)(lVar3 + 0x18);
        __mutex[2].__align = lVar3 + 0x10;
        *(undefined8 *)((long)__mutex + 0x58) = uVar4;
        **(long **)(lVar3 + 0x18) = (long)(__mutex + 2);
        *(pthread_mutex_t **)(lVar3 + 0x18) = __mutex + 2;
        pthread_mutex_unlock((pthread_mutex_t *)(*(long *)((long)__mutex + 0x30) + 0x20));
      }
    }
    else {
      free(__mutex);
      __mutex = (pthread_mutex_t *)0x0;
    }
  }
  return __mutex;
}


==================================================================

### FUNC 0018cdb8 (116 bytes) name=libusb_has_capability

uint libusb_has_capability(int param_1)

{
  if (param_1 < 0x100) {
    if (param_1 == 0) {
      return 1;
    }
    if (param_1 == 1) {
      return (uint)(*(long *)(PTR_linux_usbfs_backend_00501f10 + 0x20) == 0);
    }
  }
  else {
    if (param_1 == 0x100) {
      return *(uint *)(PTR_linux_usbfs_backend_00501f10 + 8) & 0x10000;
    }
    if (param_1 == 0x101) {
      return *(uint *)(PTR_linux_usbfs_backend_00501f10 + 8) & 0x20000;
    }
  }
  return 0;
}


==================================================================

### FUNC 0018ce2c (144 bytes) name=usbi_connect_device

ulong usbi_connect_device(long param_1)

{
  uint uVar1;
  ulong uVar2;
  long lVar3;
  undefined8 uVar4;
  long lVar5;
  
  lVar5 = *(long *)(param_1 + 0x30);
  *(undefined4 *)(param_1 + 0x7c) = 1;
  pthread_mutex_lock((pthread_mutex_t *)(lVar5 + 0x20));
  lVar3 = *(long *)(param_1 + 0x30);
  uVar4 = *(undefined8 *)(lVar3 + 0x18);
  *(long *)(param_1 + 0x50) = lVar3 + 0x10;
  *(undefined8 *)(param_1 + 0x58) = uVar4;
  **(long **)(lVar3 + 0x18) = param_1 + 0x50;
  *(long *)(lVar3 + 0x18) = param_1 + 0x50;
  uVar1 = pthread_mutex_unlock((pthread_mutex_t *)(*(long *)(param_1 + 0x30) + 0x20));
  if ((*(long *)(PTR_linux_usbfs_backend_00501f10 + 0x20) == 0) &&
     (*(long *)(*(long *)(param_1 + 0x30) + 0x1e8) != 0)) {
    uVar2 = usbi_hotplug_notification(lVar5,param_1,1);
    return uVar2;
  }
  return (ulong)uVar1;
}


==================================================================

### FUNC 0018cebc (152 bytes) name=usbi_disconnect_device

ulong usbi_disconnect_device(pthread_mutex_t *param_1)

{
  pthread_mutex_t *__mutex;
  long *plVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  
  lVar4 = *(long *)((long)param_1 + 0x30);
  pthread_mutex_lock(param_1);
  *(undefined4 *)((long)param_1 + 0x7c) = 0;
  pthread_mutex_unlock(param_1);
  __mutex = (pthread_mutex_t *)(lVar4 + 0x20);
  pthread_mutex_lock(__mutex);
  plVar1 = *(long **)((long)param_1 + 0x58);
  *plVar1 = param_1[2].__align;
  *(long **)(param_1[2].__align + 8) = plVar1;
  param_1[2].__align = 0;
  *(undefined8 *)((long)param_1 + 0x58) = 0;
  uVar2 = pthread_mutex_unlock(__mutex);
  if ((*(long *)(PTR_linux_usbfs_backend_00501f10 + 0x20) == 0) &&
     (*(long *)(*(long *)((long)param_1 + 0x30) + 0x1e8) != 0)) {
    uVar3 = usbi_hotplug_notification(lVar4,param_1,2);
    return uVar3;
  }
  return (ulong)uVar2;
}


==================================================================

### FUNC 0018cf54 (124 bytes) name=usbi_sanitize_device

undefined8 usbi_sanitize_device(long param_1)

{
  byte bVar1;
  undefined8 uVar2;
  
  uVar2 = usbi_device_cache_descriptor();
  if (-1 < (int)uVar2) {
    bVar1 = *(byte *)(param_1 + 0x79);
    if (bVar1 < 9) {
      if (bVar1 == 0) {
        usbi_log(0,4,"usbi_sanitize_device","zero configurations, maybe an unauthorized device");
      }
      uVar2 = 0;
      *(byte *)(param_1 + 0x49) = bVar1;
    }
    else {
      usbi_log(*(undefined8 *)(param_1 + 0x30),1,"usbi_sanitize_device","too many configurations");
      uVar2 = 0xffffffff;
    }
  }
  return uVar2;
}


==================================================================

### FUNC 0018cfd0 (148 bytes) name=usbi_get_device_by_session_id

pthread_mutex_t * usbi_get_device_by_session_id(long param_1,long param_2)

{
  long lVar1;
  pthread_mutex_t *__mutex;
  
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x20));
  lVar1 = *(long *)(param_1 + 0x18);
  do {
    if (lVar1 == param_1 + 0x10) {
      __mutex = (pthread_mutex_t *)0x0;
LAB_0018d048:
      pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x20));
      return __mutex;
    }
    __mutex = (pthread_mutex_t *)(lVar1 + -0x50);
    if (*(long *)(lVar1 + 0x10) == param_2) {
      pthread_mutex_lock(__mutex);
      *(int *)(lVar1 + -0x28) = *(int *)(lVar1 + -0x28) + 1;
      pthread_mutex_unlock(__mutex);
      goto LAB_0018d048;
    }
    lVar1 = *(long *)(lVar1 + 8);
  } while( true );
}


==================================================================

### FUNC 0018d064 (596 bytes) name=libusb_get_device_list

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ulong libusb_get_device_list(long param_1,undefined8 *param_2)

{
  long lVar1;
  int iVar2;
  ulong *puVar3;
  undefined8 *puVar4;
  long lVar5;
  ulong uVar6;
  ulong uVar7;
  pthread_mutex_t *ppVar8;
  long lVar9;
  ulong *local_70;
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  puVar3 = malloc(0x50);
  uVar6 = _DAT_0043a610;
  if (puVar3 != (ulong *)0x0) {
    puVar3[1] = _UNK_0043a618;
    *puVar3 = uVar6;
  }
  lVar9 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar9 = param_1;
  }
  local_70 = puVar3;
  usbi_log(0,4,"libusb_get_device_list","");
  if (puVar3 == (ulong *)0x0) {
    uVar6 = 0xfffffffffffffff5;
    goto LAB_0018d1e8;
  }
  if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0x20) == (code *)0x0) {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0x28) != (code *)0x0) {
      (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x28))();
    }
    pthread_mutex_lock((pthread_mutex_t *)(lVar9 + 0x20));
    lVar5 = *(long *)(lVar9 + 0x18);
    if (lVar5 == lVar9 + 0x10) {
      iVar2 = 0;
    }
    else {
      do {
        puVar3 = (ulong *)discovered_devs_append(puVar3,lVar5 + -0x50);
        if (puVar3 == (ulong *)0x0) {
          local_70 = (ulong *)0x0;
          iVar2 = -0xb;
          goto LAB_0018d298;
        }
        lVar5 = *(long *)(lVar5 + 8);
      } while (lVar5 != lVar9 + 0x10);
      iVar2 = 0;
      local_70 = puVar3;
    }
LAB_0018d298:
    pthread_mutex_unlock((pthread_mutex_t *)(lVar9 + 0x20));
    if (iVar2 < 0) goto LAB_0018d2a4;
LAB_0018d110:
    puVar3 = local_70;
    uVar6 = *local_70;
    puVar4 = calloc(uVar6 + 1,8);
    if (puVar4 == (undefined8 *)0x0) {
      uVar6 = 0xfffffffffffffff5;
      puVar3 = local_70;
    }
    else {
      if (0 < (long)uVar6) {
        ppVar8 = (pthread_mutex_t *)puVar3[2];
        pthread_mutex_lock(ppVar8);
        ppVar8[1].__data.__lock = ppVar8[1].__data.__lock + 1;
        pthread_mutex_unlock(ppVar8);
        *puVar4 = ppVar8;
        if (uVar6 != 1) {
          lVar9 = 0;
          do {
            ppVar8 = (pthread_mutex_t *)local_70[lVar9 + 3];
            pthread_mutex_lock(ppVar8);
            ppVar8[1].__data.__lock = ppVar8[1].__data.__lock + 1;
            pthread_mutex_unlock(ppVar8);
            lVar5 = lVar9 + 1;
            puVar4[lVar9 + 1] = ppVar8;
            lVar9 = lVar5;
          } while (uVar6 - 1 != lVar5);
        }
      }
      *param_2 = puVar4;
      puVar3 = local_70;
    }
  }
  else {
    iVar2 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x20))(lVar9,&local_70);
    if (-1 < iVar2) goto LAB_0018d110;
LAB_0018d2a4:
    uVar6 = (ulong)iVar2;
    puVar3 = local_70;
  }
  local_70 = puVar3;
  if (puVar3 != (ulong *)0x0) {
    if (*puVar3 != 0) {
      uVar7 = 0;
      do {
        libusb_unref_device(puVar3[uVar7 + 2]);
        uVar7 = uVar7 + 1;
      } while (uVar7 < *puVar3);
    }
    free(puVar3);
  }
LAB_0018d1e8:
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return uVar6;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018d2b8 (76 bytes) name=libusb_free_device_list

void libusb_free_device_list(long *param_1,int param_2)

{
  long lVar1;
  long *plVar2;
  
  if (param_1 != (long *)0x0) {
    if (param_2 != 0) {
      lVar1 = *param_1;
      plVar2 = param_1;
      while (lVar1 != 0) {
        plVar2 = plVar2 + 1;
        libusb_unref_device();
        lVar1 = *plVar2;
      }
    }
    free(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 0018d304 (172 bytes) name=libusb_unref_device

ulong libusb_unref_device(pthread_mutex_t *param_1)

{
  int iVar1;
  undefined *puVar2;
  uint uVar3;
  ulong extraout_x0;
  ulong uVar4;
  
  uVar4 = 0;
  if (param_1 != (pthread_mutex_t *)0x0) {
    pthread_mutex_lock(param_1);
    iVar1 = param_1[1].__data.__lock + -1;
    param_1[1].__data.__lock = iVar1;
    uVar3 = pthread_mutex_unlock(param_1);
    uVar4 = (ulong)uVar3;
    if (iVar1 == 0) {
      usbi_log(0,4,"libusb_unref_device","destroy device %d.%d",
               *(undefined1 *)((long)param_1 + 0x38),*(undefined1 *)((long)param_1 + 0x48));
      libusb_unref_device(*(undefined8 *)((long)param_1 + 0x40));
      puVar2 = PTR_linux_usbfs_backend_00501f10;
      if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xd8) != (code *)0x0) {
        (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xd8))(param_1);
      }
      if (*(long *)(puVar2 + 0x20) != 0) {
        usbi_disconnect_device(param_1);
      }
      pthread_mutex_destroy(param_1);
      free(param_1);
      return extraout_x0;
    }
  }
  return uVar4;
}


==================================================================

### FUNC 0018d3b0 (8 bytes) name=libusb_get_bus_number

undefined1 libusb_get_bus_number(long param_1)

{
  return *(undefined1 *)(param_1 + 0x38);
}


==================================================================

### FUNC 0018d3b8 (8 bytes) name=libusb_get_port_number

undefined1 libusb_get_port_number(long param_1)

{
  return *(undefined1 *)(param_1 + 0x39);
}


==================================================================

### FUNC 0018d3c0 (180 bytes) name=libusb_get_port_numbers

int libusb_get_port_numbers(long param_1,void *param_2,int param_3)

{
  undefined8 uVar1;
  ulong uVar2;
  int iVar3;
  int iVar4;
  
  if (param_3 < 1) {
    param_3 = -2;
  }
  else {
    uVar1 = *(undefined8 *)(param_1 + 0x30);
    uVar2 = (ulong)param_3;
    do {
      if (*(char *)(param_1 + 0x39) == '\0') {
        iVar3 = (int)uVar2;
        uVar2 = uVar2 & 0xffffffff;
        goto joined_r0x0018d43c;
      }
      if ((long)uVar2 < 1) {
        usbi_log(uVar1,2,"libusb_get_port_numbers","port numbers array is too small");
        return -8;
      }
      *(char *)((long)param_2 + (uVar2 - 1)) = *(char *)(param_1 + 0x39);
      param_1 = *(long *)(param_1 + 0x40);
      uVar2 = uVar2 - 1;
    } while (param_1 != 0);
    iVar3 = (int)uVar2;
joined_r0x0018d43c:
    iVar4 = (int)uVar2;
    if (iVar3 < param_3) {
      param_3 = param_3 - iVar4;
      memmove(param_2,(void *)((long)param_2 + (long)iVar4),(long)param_3);
    }
    else {
      param_3 = param_3 - iVar4;
    }
  }
  return param_3;
}


==================================================================

### FUNC 0018d474 (176 bytes) name=libusb_get_port_path

int libusb_get_port_path(undefined8 param_1,long param_2,void *param_3,uint param_4)

{
  undefined8 uVar1;
  ulong uVar2;
  int iVar3;
  int iVar4;
  
  param_4 = param_4 & 0xff;
  uVar2 = (ulong)param_4;
  if (param_4 == 0) {
    iVar3 = -2;
  }
  else {
    uVar1 = *(undefined8 *)(param_2 + 0x30);
    do {
      if (*(char *)(param_2 + 0x39) == '\0') {
        iVar3 = (int)uVar2;
        uVar2 = uVar2 & 0xffffffff;
        goto joined_r0x0018d4ec;
      }
      if ((long)uVar2 < 1) {
        usbi_log(uVar1,2,"libusb_get_port_numbers","port numbers array is too small");
        return -8;
      }
      *(char *)((long)param_3 + (uVar2 - 1)) = *(char *)(param_2 + 0x39);
      param_2 = *(long *)(param_2 + 0x40);
      uVar2 = uVar2 - 1;
    } while (param_2 != 0);
    iVar3 = (int)uVar2;
joined_r0x0018d4ec:
    iVar4 = (int)uVar2;
    if (iVar3 < (int)param_4) {
      iVar3 = param_4 - iVar4;
      memmove(param_3,(void *)((long)param_3 + (long)iVar4),(long)iVar3);
    }
    else {
      iVar3 = param_4 - iVar4;
    }
  }
  return iVar3;
}


==================================================================

### FUNC 0018d524 (8 bytes) name=libusb_get_parent

undefined8 libusb_get_parent(long param_1)

{
  return *(undefined8 *)(param_1 + 0x40);
}


==================================================================

### FUNC 0018d52c (8 bytes) name=libusb_get_device_address

undefined1 libusb_get_device_address(long param_1)

{
  return *(undefined1 *)(param_1 + 0x48);
}


==================================================================

### FUNC 0018d534 (8 bytes) name=libusb_get_device_speed

undefined4 libusb_get_device_speed(long param_1)

{
  return *(undefined4 *)(param_1 + 0x4c);
}


==================================================================

### FUNC 0018d53c (292 bytes) name=libusb_get_max_packet_size

uint libusb_get_max_packet_size(long param_1,char param_2)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  ushort *puVar7;
  long lVar8;
  uint uVar9;
  long local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  iVar2 = libusb_get_active_config_descriptor(param_1,&local_40);
  if (iVar2 < 0) {
    usbi_log(*(undefined8 *)(param_1 + 0x30),1,"libusb_get_max_packet_size",
             "could not retrieve active config descriptor");
    uVar9 = 0xffffff9d;
  }
  else {
    if ((ulong)*(byte *)(local_40 + 4) != 0) {
      lVar3 = 0;
      do {
        iVar2 = *(int *)(*(long *)(local_40 + 0x10) + lVar3 * 0x10 + 8);
        if (0 < iVar2) {
          lVar4 = *(long *)(*(long *)(local_40 + 0x10) + lVar3 * 0x10);
          lVar5 = 0;
          do {
            uVar6 = (ulong)*(byte *)(lVar4 + lVar5 * 0x28 + 4);
            if (uVar6 != 0) {
              lVar8 = 0;
              puVar7 = (ushort *)(*(long *)(lVar4 + lVar5 * 0x28 + 0x10) + 4);
              do {
                if ((char)puVar7[-1] == param_2) {
                  if (puVar7 == (ushort *)0x4) goto LAB_0018d608;
                  uVar9 = (uint)*puVar7;
                  goto LAB_0018d60c;
                }
                lVar8 = lVar8 + 1;
                puVar7 = puVar7 + 0x10;
              } while (lVar8 < (long)uVar6);
            }
            lVar5 = lVar5 + 1;
          } while (lVar5 < iVar2);
        }
        lVar3 = lVar3 + 1;
      } while (lVar3 < (long)(ulong)*(byte *)(local_40 + 4));
    }
LAB_0018d608:
    uVar9 = 0xfffffffb;
LAB_0018d60c:
    libusb_free_config_descriptor();
  }
  if (*(long *)(lVar1 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar9;
}


==================================================================

### FUNC 0018d660 (328 bytes) name=libusb_get_max_iso_packet_size

uint libusb_get_max_iso_packet_size(long param_1,char param_2)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  ushort *puVar7;
  long lVar8;
  uint uVar9;
  long local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  iVar2 = libusb_get_active_config_descriptor(param_1,&local_40);
  if (iVar2 < 0) {
    usbi_log(*(undefined8 *)(param_1 + 0x30),1,"libusb_get_max_iso_packet_size",
             "could not retrieve active config descriptor");
    uVar9 = 0xffffff9d;
  }
  else {
    if ((ulong)*(byte *)(local_40 + 4) != 0) {
      lVar3 = 0;
      do {
        iVar2 = *(int *)(*(long *)(local_40 + 0x10) + lVar3 * 0x10 + 8);
        if (0 < iVar2) {
          lVar4 = *(long *)(*(long *)(local_40 + 0x10) + lVar3 * 0x10);
          lVar5 = 0;
          do {
            uVar6 = (ulong)*(byte *)(lVar4 + lVar5 * 0x28 + 4);
            if (uVar6 != 0) {
              lVar8 = 0;
              puVar7 = (ushort *)(*(long *)(lVar4 + lVar5 * 0x28 + 0x10) + 4);
              do {
                if ((char)puVar7[-1] == param_2) {
                  if (puVar7 == (ushort *)0x4) goto LAB_0018d750;
                  uVar9 = *puVar7 & 0x7ff;
                  if ((*(byte *)((long)puVar7 + -1) & 1 | 2) == 3) {
                    uVar9 = ((*puVar7 >> 0xb & 3) + 1) * uVar9;
                  }
                  goto LAB_0018d754;
                }
                lVar8 = lVar8 + 1;
                puVar7 = puVar7 + 0x10;
              } while (lVar8 < (long)uVar6);
            }
            lVar5 = lVar5 + 1;
          } while (lVar5 < iVar2);
        }
        lVar3 = lVar3 + 1;
      } while (lVar3 < (long)(ulong)*(byte *)(local_40 + 4));
    }
LAB_0018d750:
    uVar9 = 0xfffffffb;
LAB_0018d754:
    libusb_free_config_descriptor();
  }
  if (*(long *)(lVar1 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar9;
}


==================================================================

### FUNC 0018d7a8 (140 bytes) name=usbi_signal_event

void usbi_signal_event(long param_1)

{
  long lVar1;
  ssize_t sVar2;
  undefined8 uVar3;
  undefined1 local_2c [4];
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  local_2c[0] = 1;
  sVar2 = write(*(int *)(param_1 + 0xc),local_2c,1);
  if (sVar2 == 1) {
    uVar3 = 0;
  }
  else {
    usbi_log(param_1,2,"usbi_signal_event","internal signalling write failed");
    uVar3 = 0xffffffff;
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 0018d834 (132 bytes) name=usbi_clear_event

void usbi_clear_event(long param_1)

{
  long lVar1;
  ssize_t sVar2;
  undefined8 uVar3;
  undefined1 auStack_2c [4];
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  sVar2 = read(*(int *)(param_1 + 8),auStack_2c,1);
  if (sVar2 == 1) {
    uVar3 = 0;
  }
  else {
    usbi_log(param_1,2,"usbi_clear_event","internal signalling read failed");
    uVar3 = 0xffffffff;
  }
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 0018d8b8 (360 bytes) name=libusb_wrap_fd

int libusb_wrap_fd(long param_1,undefined4 param_2,undefined8 *param_3)

{
  long lVar1;
  undefined *puVar2;
  int iVar3;
  pthread_mutex_t *__mutex;
  long *plVar4;
  size_t __n;
  code *pcVar5;
  
  puVar2 = PTR_linux_usbfs_backend_00501f10;
  usbi_log(0,4,"libusb_wrap_fd","wrap %d",param_2);
  pcVar5 = *(code **)(puVar2 + 0x30);
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  if (pcVar5 == (code *)0x0) {
    iVar3 = -0xc;
  }
  else {
    __n = *(size_t *)(puVar2 + 0x118);
    __mutex = malloc(__n + 0x50);
    if (__mutex == (pthread_mutex_t *)0x0) {
      iVar3 = -0xb;
    }
    else {
      iVar3 = pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
      if (iVar3 == 0) {
        *(undefined8 *)((long)__mutex + 0x40) = 0;
        *(undefined4 *)((long)__mutex + 0x48) = 0;
        __mutex[1].__align = 0;
        memset((void *)((long)__mutex + 0x4c),0,__n);
        iVar3 = (*pcVar5)(lVar1,__mutex,param_2);
        if (iVar3 < 0) {
          usbi_log(0,4,"libusb_wrap_fd","wrap %d returns %d",param_2,iVar3);
          pthread_mutex_destroy(__mutex);
          free(__mutex);
        }
        else {
          pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x58));
          *(undefined8 *)((long)__mutex + 0x38) = *(undefined8 *)(lVar1 + 0x50);
          plVar4 = (long *)((long)__mutex + 0x30);
          *plVar4 = lVar1 + 0x48;
          **(undefined8 **)(lVar1 + 0x50) = plVar4;
          *(long **)(lVar1 + 0x50) = plVar4;
          pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x58));
          iVar3 = 0;
          *param_3 = __mutex;
        }
      }
      else {
        free(__mutex);
        iVar3 = -99;
      }
    }
  }
  return iVar3;
}


==================================================================

### FUNC 0018da20 (380 bytes) name=libusb_open

int libusb_open(pthread_mutex_t *param_1,undefined8 *param_2)

{
  undefined *puVar1;
  int iVar2;
  pthread_mutex_t *__mutex;
  long *plVar3;
  size_t __n;
  long lVar4;
  
  lVar4 = *(long *)((long)param_1 + 0x30);
  usbi_log(0,4,"libusb_open","open %d.%d",*(undefined1 *)((long)param_1 + 0x38),
           *(undefined1 *)((long)param_1 + 0x48));
  puVar1 = PTR_linux_usbfs_backend_00501f10;
  if (*(int *)((long)param_1 + 0x7c) == 0) {
    iVar2 = -4;
  }
  else {
    __n = *(size_t *)(PTR_linux_usbfs_backend_00501f10 + 0x118);
    __mutex = malloc(__n + 0x50);
    if (__mutex == (pthread_mutex_t *)0x0) {
      iVar2 = -0xb;
    }
    else {
      iVar2 = pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
      if (iVar2 == 0) {
        pthread_mutex_lock(param_1);
        param_1[1].__data.__lock = param_1[1].__data.__lock + 1;
        pthread_mutex_unlock(param_1);
        *(pthread_mutex_t **)((long)__mutex + 0x40) = param_1;
        *(undefined4 *)((long)__mutex + 0x48) = 0;
        __mutex[1].__align = 0;
        memset((void *)((long)__mutex + 0x4c),0,__n);
        iVar2 = (**(code **)(puVar1 + 0x38))(__mutex);
        if (iVar2 < 0) {
          usbi_log(0,4,"libusb_open","open %d.%d returns %d",*(undefined1 *)((long)param_1 + 0x38),
                   *(undefined1 *)((long)param_1 + 0x48),iVar2);
          libusb_unref_device(param_1);
          pthread_mutex_destroy(__mutex);
          free(__mutex);
        }
        else {
          pthread_mutex_lock((pthread_mutex_t *)(lVar4 + 0x58));
          *(undefined8 *)((long)__mutex + 0x38) = *(undefined8 *)(lVar4 + 0x50);
          plVar3 = (long *)((long)__mutex + 0x30);
          *plVar3 = lVar4 + 0x48;
          **(undefined8 **)(lVar4 + 0x50) = plVar3;
          *(long **)(lVar4 + 0x50) = plVar3;
          pthread_mutex_unlock((pthread_mutex_t *)(lVar4 + 0x58));
          iVar2 = 0;
          *param_2 = __mutex;
        }
      }
      else {
        free(__mutex);
        iVar2 = -99;
      }
    }
  }
  return iVar2;
}


==================================================================

### FUNC 0018db9c (240 bytes) name=libusb_open_device_with_vid_pid

void libusb_open_device_with_vid_pid(undefined8 param_1,short param_2,short param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  undefined8 uVar4;
  long *plVar5;
  undefined1 auStack_70 [8];
  short local_68;
  short local_66;
  undefined8 local_58;
  long *local_50;
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  local_58 = 0;
  lVar3 = libusb_get_device_list(param_1,&local_50);
  if (lVar3 < 0) {
    uVar4 = 0;
  }
  else {
    lVar3 = *local_50;
    plVar5 = local_50;
    if (lVar3 == 0) {
LAB_0018dc38:
      uVar4 = local_58;
      if (local_50 == (long *)0x0) goto LAB_0018dc60;
    }
    else {
      do {
        iVar2 = libusb_get_device_descriptor(lVar3,auStack_70);
        if (iVar2 < 0) goto LAB_0018dc38;
        if ((local_68 == param_2) && (local_66 == param_3)) {
          iVar2 = libusb_open(lVar3,&local_58);
          if (iVar2 < 0) {
            local_58 = 0;
          }
          goto LAB_0018dc38;
        }
        lVar3 = plVar5[1];
        plVar5 = plVar5 + 1;
      } while (lVar3 != 0);
    }
    lVar3 = *local_50;
    plVar5 = local_50;
    while (lVar3 != 0) {
      plVar5 = plVar5 + 1;
      libusb_unref_device();
      lVar3 = *plVar5;
    }
    free(local_50);
    uVar4 = local_58;
  }
LAB_0018dc60:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 0018dc8c (448 bytes) name=libusb_close

void libusb_close(long param_1)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  void *pvVar2;
  ssize_t sVar3;
  int iVar4;
  long lVar5;
  undefined1 local_40 [4];
  undefined1 auStack_3c [4];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  if (param_1 == 0) goto LAB_0018ddb8;
  usbi_log(0,4,"libusb_close","");
  lVar5 = *(long *)(*(long *)(param_1 + 0x40) + 0x30);
  pvVar2 = pthread_getspecific(*(pthread_key_t *)(lVar5 + 0x134));
  if (pvVar2 != (void *)0x0) {
    FUN_0018de4c(lVar5,param_1);
    goto LAB_0018ddb8;
  }
  __mutex = (pthread_mutex_t *)(lVar5 + 400);
  pthread_mutex_lock(__mutex);
  if ((*(int *)(lVar5 + 0x1b8) == 0) && (*(int *)(lVar5 + 0x1bc) == 0)) {
    if (*(long *)(lVar5 + 0x1e8) != lVar5 + 0x1e0) {
      iVar4 = 1;
      goto LAB_0018dd14;
    }
    *(undefined4 *)(lVar5 + 0x1bc) = 1;
    if (*(long *)(lVar5 + 0x1f8) == lVar5 + 0x1f0) {
      local_40[0] = 1;
      sVar3 = write(*(int *)(lVar5 + 0xc),local_40,1);
      if (sVar3 != 1) {
        usbi_log(lVar5,2,"usbi_signal_event","internal signalling write failed");
      }
    }
  }
  else {
    iVar4 = *(int *)(lVar5 + 0x1bc) + 1;
LAB_0018dd14:
    *(int *)(lVar5 + 0x1bc) = iVar4;
  }
  pthread_mutex_unlock(__mutex);
  libusb_lock_events(lVar5);
  FUN_0018de4c(lVar5,param_1);
  pthread_mutex_lock(__mutex);
  iVar4 = *(int *)(lVar5 + 0x1bc) + -1;
  *(int *)(lVar5 + 0x1bc) = iVar4;
  if ((((*(int *)(lVar5 + 0x1b8) == 0 && iVar4 == 0) && (*(long *)(lVar5 + 0x1e8) == lVar5 + 0x1e0))
      && (*(long *)(lVar5 + 0x1f8) == lVar5 + 0x1f0)) &&
     (sVar3 = read(*(int *)(lVar5 + 8),auStack_3c,1), sVar3 != 1)) {
    usbi_log(lVar5,2,"usbi_clear_event","internal signalling read failed");
  }
  pthread_mutex_unlock(__mutex);
  libusb_unlock_events(lVar5);
LAB_0018ddb8:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018de4c (412 bytes) name=FUN_0018de4c

void FUN_0018de4c(long param_1,pthread_mutex_t *param_2)

{
  undefined8 *puVar1;
  long *plVar2;
  undefined8 uVar3;
  char *pcVar4;
  long *plVar5;
  long *plVar6;
  
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 200));
  plVar5 = *(long **)(param_1 + 0xc0);
  while (plVar2 = plVar5, plVar2 != (long *)(param_1 + 0xb8)) {
    plVar5 = (long *)plVar2[1];
    if ((pthread_mutex_t *)plVar2[0xd] == param_2) {
      pthread_mutex_lock((pthread_mutex_t *)((long)plVar2 + 0x3c));
      if ((*(byte *)(plVar2 + 7) >> 2 & 1) == 0) {
        usbi_log(param_1,1,"do_close",
                 "Device handle closed while transfer was still being processed, but the device is still connected as far as we know"
                );
        if ((*(byte *)(plVar2 + 7) >> 1 & 1) == 0) {
          uVar3 = 1;
          pcVar4 = 
          "A cancellation hasn\'t even been scheduled on the transfer for which the device is closing"
          ;
        }
        else {
          uVar3 = 2;
          pcVar4 = 
          "A cancellation for an in-flight transfer hasn\'t completed but closing the device handle"
          ;
        }
        usbi_log(param_1,uVar3,"do_close",pcVar4);
      }
      pthread_mutex_unlock((pthread_mutex_t *)((long)plVar2 + 0x3c));
      plVar6 = (long *)plVar2[1];
      *plVar6 = *plVar2;
      *(long **)(*plVar2 + 8) = plVar6;
      *plVar2 = 0;
      plVar2[1] = 0;
      plVar2[0xd] = 0;
      usbi_log(0,4,"do_close",
               "Removed transfer %p from the in-flight list because device handle %p closed",
               plVar2 + 0xd,param_2);
    }
  }
  pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 200));
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x58));
  puVar1 = *(undefined8 **)((long)param_2 + 0x38);
  *puVar1 = *(undefined8 *)((long)param_2 + 0x30);
  *(undefined8 **)(*(long *)((long)param_2 + 0x30) + 8) = puVar1;
  *(undefined8 *)((long)param_2 + 0x30) = 0;
  *(undefined8 *)((long)param_2 + 0x38) = 0;
  pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x58));
  (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x40))(param_2);
  libusb_unref_device(*(undefined8 *)((long)param_2 + 0x40));
  pthread_mutex_destroy(param_2);
  free(param_2);
  return;
}


==================================================================

### FUNC 0018dfe8 (8 bytes) name=libusb_get_device

undefined8 libusb_get_device(long param_1)

{
  return *(undefined8 *)(param_1 + 0x40);
}


==================================================================

### FUNC 0018dff0 (368 bytes) name=libusb_get_configuration

int libusb_get_configuration(long param_1,uint *param_2)

{
  long lVar1;
  int iVar2;
  byte local_3c [4];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  usbi_log(0,4,"libusb_get_configuration","");
  if ((*(code **)(PTR_linux_usbfs_backend_00501f10 + 0x68) == (code *)0x0) ||
     (iVar2 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x68))(param_1,param_2), iVar2 == -0xc
     )) {
    local_3c[0] = 0;
    usbi_log(0,4,"libusb_get_configuration","falling back to control message");
    iVar2 = libusb_control_transfer(param_1,0x80,8,0,0,local_3c,1,1000);
    if (iVar2 != 1) {
      if (iVar2 == 0) {
        usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"libusb_get_configuration",
                 "zero bytes returned in ctrl transfer?");
        iVar2 = -1;
      }
      else {
        usbi_log(0,4,"libusb_get_configuration","control failed, error %d",iVar2);
      }
      goto joined_r0x0018e154;
    }
    iVar2 = 0;
    *param_2 = (uint)local_3c[0];
  }
  else {
joined_r0x0018e154:
    if (iVar2 != 0) goto LAB_0018e0f8;
  }
  usbi_log(0,4,"libusb_get_configuration","active config %d",*param_2);
LAB_0018e0f8:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018e160 (84 bytes) name=libusb_set_configuration

void libusb_set_configuration(undefined8 param_1,undefined4 param_2)

{
  usbi_log(0,4,"libusb_set_configuration","configuration %d",param_2);
                    /* WARNING: Could not recover jumptable at 0x0018e1b0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x70))(param_1,param_2);
  return;
}


==================================================================

### FUNC 0018e1b4 (204 bytes) name=libusb_claim_interface

int libusb_claim_interface(pthread_mutex_t *param_1,uint param_2)

{
  int iVar1;
  ulong uVar2;
  
  usbi_log(0,4,"libusb_claim_interface","interface %d",param_2);
  if ((int)param_2 < 0x20) {
    if (*(int *)(*(long *)((long)param_1 + 0x40) + 0x7c) == 0) {
      iVar1 = -4;
    }
    else {
      pthread_mutex_lock(param_1);
      uVar2 = (ulong)(1 << (ulong)(param_2 & 0x1f));
      if ((param_1[1].__align & uVar2) == 0) {
        iVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x78))(param_1,param_2);
        if (iVar1 == 0) {
          param_1[1].__align = param_1[1].__align | uVar2;
        }
      }
      else {
        iVar1 = 0;
      }
      pthread_mutex_unlock(param_1);
    }
  }
  else {
    iVar1 = -2;
  }
  return iVar1;
}


==================================================================

### FUNC 0018e280 (192 bytes) name=libusb_release_interface

int libusb_release_interface(pthread_mutex_t *param_1,uint param_2)

{
  uint uVar1;
  int iVar2;
  
  usbi_log(0,4,"libusb_release_interface","interface %d",param_2);
  if ((int)param_2 < 0x20) {
    pthread_mutex_lock(param_1);
    uVar1 = 1 << (ulong)(param_2 & 0x1f);
    if ((param_1[1].__align & (long)(int)uVar1) == 0) {
      iVar2 = -5;
    }
    else {
      iVar2 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x80))(param_1,param_2);
      if (iVar2 == 0) {
        param_1[1].__align = param_1[1].__align & (long)(int)~uVar1;
      }
    }
    pthread_mutex_unlock(param_1);
  }
  else {
    iVar2 = -2;
  }
  return iVar2;
}


==================================================================

### FUNC 0018e340 (208 bytes) name=libusb_set_interface_alt_setting

undefined8
libusb_set_interface_alt_setting(pthread_mutex_t *param_1,uint param_2,undefined4 param_3)

{
  undefined8 uVar1;
  ulong uVar2;
  
  usbi_log(0,4,"libusb_set_interface_alt_setting","interface %d altsetting %d",param_2,param_3);
  if ((int)param_2 < 0x20) {
    pthread_mutex_lock(param_1);
    if (*(int *)(*(long *)((long)param_1 + 0x40) + 0x7c) == 0) {
      pthread_mutex_unlock(param_1);
      uVar1 = 0xfffffffc;
    }
    else {
      uVar2 = param_1[1].__align;
      pthread_mutex_unlock(param_1);
      if ((uVar2 & (long)(1 << (ulong)(param_2 & 0x1f))) != 0) {
                    /* WARNING: Could not recover jumptable at 0x0018e3e8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x88))(param_1,param_2,param_3);
        return uVar1;
      }
      uVar1 = 0xfffffffb;
    }
  }
  else {
    uVar1 = 0xfffffffe;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e410 (112 bytes) name=libusb_clear_halt

undefined8 libusb_clear_halt(long param_1,uint param_2)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_clear_halt","endpoint %x",param_2 & 0xff);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) != 0) {
                    /* WARNING: Could not recover jumptable at 0x0018e46c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x90))(param_1,param_2);
    return uVar1;
  }
  return 0xfffffffc;
}


==================================================================

### FUNC 0018e480 (100 bytes) name=libusb_reset_device

undefined8 libusb_reset_device(long param_1)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_reset_device","");
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) != 0) {
                    /* WARNING: Could not recover jumptable at 0x0018e4d0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x98))(param_1);
    return uVar1;
  }
  return 0xfffffffc;
}


==================================================================

### FUNC 0018e4e4 (156 bytes) name=libusb_alloc_streams

undefined8
libusb_alloc_streams(long param_1,undefined4 param_2,undefined8 param_3,undefined4 param_4)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_alloc_streams","streams %u eps %d",param_2,param_4);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) == 0) {
    uVar1 = 0xfffffffc;
  }
  else {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xa0) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e560. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xa0))
                        (param_1,param_2,param_3,param_4);
      return uVar1;
    }
    uVar1 = 0xfffffff4;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e580 (144 bytes) name=libusb_free_streams

undefined8 libusb_free_streams(long param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_free_streams","eps %d",param_3);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) == 0) {
    uVar1 = 0xfffffffc;
  }
  else {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xa8) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e5f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xa8))(param_1,param_2,param_3);
      return uVar1;
    }
    uVar1 = 0xfffffff4;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e610 (40 bytes) name=libusb_dev_mem_alloc

undefined8 libusb_dev_mem_alloc(long param_1)

{
  undefined8 uVar1;
  
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) != 0) {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xb0) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e62c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xb0))();
      return uVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0018e638 (28 bytes) name=libusb_dev_mem_free

undefined8 libusb_dev_mem_free(void)

{
  undefined8 uVar1;
  
  if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xb8) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e648. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xb8))();
    return uVar1;
  }
  return 0xfffffff4;
}


==================================================================

### FUNC 0018e654 (124 bytes) name=libusb_kernel_driver_active

undefined8 libusb_kernel_driver_active(long param_1,undefined4 param_2)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_kernel_driver_active","interface %d",param_2);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) == 0) {
    uVar1 = 0xfffffffc;
  }
  else {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xc0) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e6b4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xc0))(param_1,param_2);
      return uVar1;
    }
    uVar1 = 0xfffffff4;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e6d0 (124 bytes) name=libusb_detach_kernel_driver

undefined8 libusb_detach_kernel_driver(long param_1,undefined4 param_2)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_detach_kernel_driver","interface %d",param_2);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) == 0) {
    uVar1 = 0xfffffffc;
  }
  else {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 200) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e730. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 200))(param_1,param_2);
      return uVar1;
    }
    uVar1 = 0xfffffff4;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e74c (124 bytes) name=libusb_attach_kernel_driver

undefined8 libusb_attach_kernel_driver(long param_1,undefined4 param_2)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_attach_kernel_driver","interface %d",param_2);
  if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) == 0) {
    uVar1 = 0xfffffffc;
  }
  else {
    if (*(code **)(PTR_linux_usbfs_backend_00501f10 + 0xd0) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x0018e7ac. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      uVar1 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0xd0))(param_1,param_2);
      return uVar1;
    }
    uVar1 = 0xfffffff4;
  }
  return uVar1;
}


==================================================================

### FUNC 0018e7c8 (40 bytes) name=libusb_set_auto_detach_kernel_driver

undefined8 libusb_set_auto_detach_kernel_driver(long param_1,undefined4 param_2)

{
  if (((byte)PTR_linux_usbfs_backend_00501f10[10] >> 1 & 1) == 0) {
    return 0xfffffff4;
  }
  *(undefined4 *)(param_1 + 0x48) = param_2;
  return 0;
}


==================================================================

### FUNC 0018e7f0 (40 bytes) name=libusb_set_debug

void libusb_set_debug(undefined4 *param_1,undefined4 param_2)

{
  undefined4 *puVar1;
  
  puVar1 = *(undefined4 **)PTR_usbi_default_context_00501e08;
  if (param_1 != (undefined4 *)0x0) {
    puVar1 = param_1;
  }
  if (puVar1[1] != 0) {
    return;
  }
  *puVar1 = param_2;
  return;
}


==================================================================

### FUNC 0018e818 (848 bytes) name=libusb_init

int libusb_init(undefined8 *param_1)

{
  pthread_mutex_t *__mutex;
  long *plVar1;
  int *piVar2;
  long *plVar3;
  undefined *puVar4;
  undefined *puVar5;
  int iVar6;
  char *__nptr;
  int *__ptr;
  undefined8 *puVar7;
  long *plVar8;
  long lVar9;
  
  __nptr = getenv("LIBUSB_DEBUG");
  pthread_mutex_lock((pthread_mutex_t *)&DAT_00531da4);
  if (DAT_00531dd0 == 0) {
    gettimeofday((timeval *)&DAT_00531dd0,(__timezone_ptr_t)0x0);
  }
  puVar5 = PTR_usbi_default_context_00501e08;
  lVar9 = *(long *)PTR_usbi_default_context_00501e08;
  if ((param_1 == (undefined8 *)0x0) && (lVar9 != 0)) {
    usbi_log(0,4,"libusb_init","reusing default context");
    DAT_00531de0 = DAT_00531de0 + 1;
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531da4);
    iVar6 = 0;
  }
  else {
    __ptr = calloc(1,0x210);
    if (__ptr == (int *)0x0) {
      iVar6 = -0xb;
    }
    else {
      if (__nptr != (char *)0x0) {
        iVar6 = atoi(__nptr);
        *__ptr = iVar6;
        if (iVar6 != 0) {
          __ptr[1] = 1;
        }
      }
      if (lVar9 == 0) {
        DAT_00531de0 = DAT_00531de0 + 1;
        *(int **)puVar5 = __ptr;
        usbi_log(0,4,"libusb_init","created default context");
      }
      usbi_log(0,4,"libusb_init","libusb v%u.%u.%u.%u%s",1,0,0x15,0x2b94,"");
      __mutex = (pthread_mutex_t *)(__ptr + 8);
      pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
      pthread_mutex_init((pthread_mutex_t *)(__ptr + 0x16),(pthread_mutexattr_t *)0x0);
      pthread_mutex_init((pthread_mutex_t *)(__ptr + 0x24),(pthread_mutexattr_t *)0x0);
      plVar1 = (long *)(__ptr + 4);
      *(long **)(__ptr + 4) = plVar1;
      *(long **)(__ptr + 6) = plVar1;
      *(int **)(__ptr + 0x12) = __ptr + 0x12;
      *(int **)(__ptr + 0x14) = __ptr + 0x12;
      *(int **)(__ptr + 0x20) = __ptr + 0x20;
      *(int **)(__ptr + 0x22) = __ptr + 0x20;
      pthread_mutex_lock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
      puVar7 = (undefined8 *)PTR_active_contexts_list_00501b88;
      if (DAT_00531da0 == '\x01') {
        puVar7 = *(undefined8 **)(PTR_active_contexts_list_00501b88 + 8);
      }
      else {
        DAT_00531da0 = '\x01';
        *(undefined **)(PTR_active_contexts_list_00501b88 + 8) = PTR_active_contexts_list_00501b88;
        *puVar7 = puVar7;
      }
      *(undefined8 **)(__ptr + 0x82) = puVar7;
      puVar4 = PTR_active_contexts_list_00501b88;
      piVar2 = __ptr + 0x80;
      *(undefined **)(__ptr + 0x80) = PTR_active_contexts_list_00501b88;
      *puVar7 = piVar2;
      *(int **)(puVar4 + 8) = piVar2;
      pthread_mutex_unlock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
      puVar4 = PTR_linux_usbfs_backend_00501f10;
      if ((*(code **)(PTR_linux_usbfs_backend_00501f10 + 0x10) == (code *)0x0) ||
         (iVar6 = (**(code **)(PTR_linux_usbfs_backend_00501f10 + 0x10))(__ptr), iVar6 == 0)) {
        iVar6 = usbi_io_init(__ptr);
        if (-1 < iVar6) {
          pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531da4);
          if (param_1 == (undefined8 *)0x0) {
            return 0;
          }
          *param_1 = __ptr;
          return 0;
        }
        if (*(code **)(puVar4 + 0x18) != (code *)0x0) {
          (**(code **)(puVar4 + 0x18))();
        }
      }
      if (*(int **)puVar5 == __ptr) {
        *(undefined8 *)puVar5 = 0;
        DAT_00531de0 = DAT_00531de0 + -1;
      }
      puVar5 = PTR_active_contexts_lock_00501e28;
      pthread_mutex_lock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
      puVar7 = *(undefined8 **)(__ptr + 0x82);
      *puVar7 = *(undefined8 *)(__ptr + 0x80);
      *(undefined8 **)(*(long *)(__ptr + 0x80) + 8) = puVar7;
      piVar2[0] = 0;
      piVar2[1] = 0;
      __ptr[0x82] = 0;
      __ptr[0x83] = 0;
      pthread_mutex_unlock((pthread_mutex_t *)puVar5);
      pthread_mutex_lock(__mutex);
      plVar3 = *(long **)(__ptr + 6);
      while (plVar3 != plVar1) {
        plVar8 = (long *)plVar3[1];
        *plVar8 = *plVar3;
        *(long **)(*plVar3 + 8) = plVar8;
        *plVar3 = 0;
        plVar3[1] = 0;
        libusb_unref_device();
        plVar3 = plVar8;
      }
      pthread_mutex_unlock(__mutex);
      pthread_mutex_destroy((pthread_mutex_t *)(__ptr + 0x16));
      pthread_mutex_destroy(__mutex);
      pthread_mutex_destroy((pthread_mutex_t *)(__ptr + 0x24));
      free(__ptr);
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531da4);
  }
  return iVar6;
}


==================================================================

### FUNC 0018eb68 (616 bytes) name=libusb_exit

void libusb_exit(void *param_1)

{
  void *__ptr;
  long lVar1;
  long *plVar2;
  undefined *puVar3;
  undefined8 *puVar4;
  long *plVar5;
  undefined8 local_68;
  undefined8 uStack_60;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  local_68 = 0;
  uStack_60 = 0;
  usbi_log(0,4,"libusb_exit","");
  puVar3 = PTR_usbi_default_context_00501e08;
  __ptr = *(void **)PTR_usbi_default_context_00501e08;
  if (param_1 != (void *)0x0) {
    __ptr = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)&DAT_00531da4);
  if (__ptr == *(void **)puVar3) {
    if (1 < DAT_00531de0) {
      DAT_00531de0 = DAT_00531de0 + -1;
      usbi_log(0,4,"libusb_exit","not destroying default context");
      pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531da4);
      goto LAB_0018eda0;
    }
    DAT_00531de0 = DAT_00531de0 + -1;
    usbi_log(0,4,"libusb_exit","destroying default context");
    *(undefined8 *)puVar3 = 0;
  }
  pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531da4);
  puVar3 = PTR_active_contexts_lock_00501e28;
  pthread_mutex_lock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
  puVar4 = *(undefined8 **)((long)__ptr + 0x208);
  *puVar4 = *(undefined8 *)((long)__ptr + 0x200);
  *(undefined8 **)(*(long *)((long)__ptr + 0x200) + 8) = puVar4;
  *(undefined8 *)((long)__ptr + 0x208) = 0;
  *(undefined8 *)((long)__ptr + 0x200) = 0;
  pthread_mutex_unlock((pthread_mutex_t *)puVar3);
  puVar3 = PTR_linux_usbfs_backend_00501f10;
  if (*(long *)(PTR_linux_usbfs_backend_00501f10 + 0x20) == 0) {
    usbi_hotplug_deregister_all(__ptr);
    if (*(long *)((long)__ptr + 0x50) == (long)__ptr + 0x48) {
      libusb_handle_events_timeout(__ptr,&local_68);
    }
    pthread_mutex_lock((pthread_mutex_t *)((long)__ptr + 0x20));
    plVar2 = *(long **)((long)__ptr + 0x18);
    while (plVar2 != (long *)((long)__ptr + 0x10)) {
      plVar5 = (long *)plVar2[1];
      *plVar5 = *plVar2;
      *(long **)(*plVar2 + 8) = plVar5;
      *plVar2 = 0;
      plVar2[1] = 0;
      libusb_unref_device();
      plVar2 = plVar5;
    }
    pthread_mutex_unlock((pthread_mutex_t *)((long)__ptr + 0x20));
  }
  if (*(long *)((long)__ptr + 0x18) != (long)__ptr + 0x10) {
    usbi_log(__ptr,2,"libusb_exit","some libusb_devices were leaked");
  }
  if (*(long *)((long)__ptr + 0x50) != (long)__ptr + 0x48) {
    usbi_log(__ptr,2,"libusb_exit","application left some devices open");
  }
  usbi_io_exit(__ptr);
  if (*(code **)(puVar3 + 0x18) != (code *)0x0) {
    (**(code **)(puVar3 + 0x18))();
  }
  pthread_mutex_destroy((pthread_mutex_t *)((long)__ptr + 0x58));
  pthread_mutex_destroy((pthread_mutex_t *)((long)__ptr + 0x20));
  pthread_mutex_destroy((pthread_mutex_t *)((long)__ptr + 0x90));
  free(__ptr);
LAB_0018eda0:
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018edd0 (724 bytes) name=usbi_log_v

void usbi_log_v(int *param_1,int param_2,undefined8 param_3,char *param_4,undefined8 *param_5)

{
  uint uVar1;
  int *piVar2;
  int iVar3;
  long lVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  ulong uVar8;
  char *pcVar9;
  size_t __maxlen;
  ulong uVar10;
  ulong uVar11;
  undefined8 local_4a0;
  undefined8 uStack_498;
  undefined8 local_490;
  undefined8 uStack_488;
  timeval local_478;
  char local_468 [1024];
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  piVar2 = *(int **)PTR_usbi_default_context_00501e08;
  if (param_1 != (int *)0x0) {
    piVar2 = param_1;
  }
  if (piVar2 == (int *)0x0) {
    pcVar9 = getenv("LIBUSB_DEBUG");
    if (pcVar9 == (char *)0x0) goto switchD_0018ef18_caseD_0;
    iVar6 = atoi(pcVar9);
  }
  else {
    iVar6 = *piVar2;
  }
  if ((((iVar6 != 0) && ((param_2 != 2 || (1 < iVar6)))) && ((param_2 != 3 || (2 < iVar6)))) &&
     ((param_2 != 4 || (3 < iVar6)))) {
    uVar5 = gettimeofday(&local_478,(__timezone_ptr_t)0x0);
    uVar8 = (ulong)uVar5;
    if (((DAT_00531de4 & 1) == 0) && (iVar6 == 4)) {
      DAT_00531de4 = 1;
      __android_log_write(3,"libusb",
                          "[timestamp] [threadID] facility level [function call] <message>\n");
      uVar8 = __android_log_write(3,"libusb",
                                  "--------------------------------------------------------------------------------\n"
                                 );
    }
    if (local_478.tv_usec < DAT_00531dd8) {
      local_478.tv_sec = local_478.tv_sec - 1;
      local_478.tv_usec = local_478.tv_usec + 1000000;
    }
    uVar10 = local_478.tv_usec - DAT_00531dd8;
    uVar11 = local_478.tv_sec - DAT_00531dd0;
    pcVar9 = "info";
    local_478.tv_sec = uVar11;
    local_478.tv_usec = uVar10;
    switch(param_2) {
    case 0:
      goto switchD_0018ef18_caseD_0;
    case 1:
      pcVar9 = "error";
      break;
    case 2:
      pcVar9 = "warning";
      break;
    case 4:
      pcVar9 = "debug";
    case 3:
      break;
    default:
      pcVar9 = "unknown";
    }
    if (iVar6 == 4) {
      uVar8 = usbi_get_tid(uVar8);
      uVar5 = snprintf(local_468,0x400,"[%2d.%06d] [%08x] libusb: %s [%s] ",uVar11 & 0xffffffff,
                       uVar10 & 0xffffffff,uVar8 & 0xffffffff,pcVar9,param_3);
    }
    else {
      uVar5 = snprintf(local_468,0x400,"libusb: %s [%s] ",pcVar9,param_3);
    }
    uVar1 = 0;
    if (uVar5 < 0x400) {
      uVar1 = uVar5;
    }
    pcVar9 = local_468 + (int)uVar1;
    *pcVar9 = '\0';
    uStack_488 = param_5[3];
    local_490 = param_5[2];
    uStack_498 = param_5[1];
    local_4a0 = *param_5;
    __maxlen = 0x400 - (long)(int)uVar1;
    iVar7 = vsnprintf(pcVar9,__maxlen,param_4,&local_4a0);
    iVar6 = (int)__maxlen;
    if ((int)(iVar7 + uVar1) < 0x400 && -1 < iVar7) {
      iVar6 = iVar7;
    }
    iVar7 = iVar6 + uVar1 + -0x3fe;
    iVar3 = 7 - param_2;
    if ((long)(int)(iVar6 + uVar1) + 2U < 0x400) {
      iVar7 = 0;
    }
    if (3 < param_2 - 1U) {
      iVar3 = 0;
    }
    (pcVar9 + (iVar6 - iVar7))[0] = '\n';
    (pcVar9 + (iVar6 - iVar7))[1] = '\0';
    __android_log_write(iVar3,"libusb",local_468);
  }
switchD_0018ef18_caseD_0:
  if (*(long *)(lVar4 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 0018f0a4 (280 bytes) name=libusb_error_name

char * libusb_error_name(undefined4 param_1)

{
  char *pcVar1;
  
  pcVar1 = "LIBUSB_ERROR_IO";
  switch(param_1) {
  case 0:
    return "LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED";
  case 1:
    return "LIBUSB_TRANSFER_ERROR";
  case 2:
    return "LIBUSB_TRANSFER_TIMED_OUT";
  case 3:
    return "LIBUSB_TRANSFER_CANCELLED";
  case 4:
    return "LIBUSB_TRANSFER_STALL";
  case 5:
    return "LIBUSB_TRANSFER_NO_DEVICE";
  case 6:
    return "LIBUSB_TRANSFER_OVERFLOW";
  case 0xffffff9d:
    return "LIBUSB_ERROR_OTHER";
  default:
    pcVar1 = "**UNKNOWN**";
switchD_0018f0c8_caseD_ffffffff:
    return pcVar1;
  case 0xfffffff4:
    return "LIBUSB_ERROR_NOT_SUPPORTED";
  case 0xfffffff5:
    return "LIBUSB_ERROR_NO_MEM";
  case 0xfffffff6:
    return "LIBUSB_ERROR_INTERRUPTED";
  case 0xfffffff7:
    return "LIBUSB_ERROR_PIPE";
  case 0xfffffff8:
    return "LIBUSB_ERROR_OVERFLOW";
  case 0xfffffff9:
    return "LIBUSB_ERROR_TIMEOUT";
  case 0xfffffffa:
    return "LIBUSB_ERROR_BUSY";
  case 0xfffffffb:
    return "LIBUSB_ERROR_NOT_FOUND";
  case 0xfffffffc:
    return "LIBUSB_ERROR_NO_DEVICE";
  case 0xfffffffd:
    return "LIBUSB_ERROR_ACCESS";
  case 0xfffffffe:
    return "LIBUSB_ERROR_INVALID_PARAM";
  case 0xffffffff:
    goto switchD_0018f0c8_caseD_ffffffff;
  }
}


==================================================================

### FUNC 0018f1bc (12 bytes) name=libusb_get_version

undefined * libusb_get_version(void)

{
  return &DAT_004fa0c0;
}


==================================================================

### FUNC 0018f1c8 (176 bytes) name=usbi_parse_descriptor

int usbi_parse_descriptor(undefined8 *param_1,char *param_2,undefined8 *param_3,int param_4)

{
  undefined4 *puVar1;
  undefined2 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 uVar6;
  
  puVar5 = param_1;
LAB_0018f1dc:
  puVar3 = param_3;
  puVar4 = puVar5;
  switch(*param_2) {
  case 'b':
    param_2 = param_2 + 1;
    *(undefined1 *)param_3 = *(undefined1 *)puVar5;
    param_3 = (undefined8 *)((long)param_3 + 1);
    puVar5 = (undefined8 *)((long)puVar5 + 1);
    goto LAB_0018f1dc;
  case 'c':
  case 'e':
  case 'f':
  case 'g':
  case 'h':
  case 'i':
  case 'j':
  case 'k':
  case 'l':
  case 'm':
  case 'n':
  case 'o':
  case 'p':
  case 'q':
  case 'r':
  case 's':
  case 't':
  case 'v':
    break;
  case 'd':
    puVar1 = (undefined4 *)((long)param_3 + ((ulong)param_3 & 1));
    *puVar1 = *(undefined4 *)puVar5;
    param_2 = param_2 + 1;
    param_3 = (undefined8 *)(puVar1 + 1);
    puVar5 = (undefined8 *)((long)puVar5 + 4);
    goto LAB_0018f1dc;
  case 'u':
    puVar4 = puVar5 + 2;
    uVar6 = *puVar5;
    puVar3 = param_3 + 2;
    param_3[1] = puVar5[1];
    *param_3 = uVar6;
    break;
  case 'w':
    goto switchD_0018f1f4_caseD_77;
  default:
    if (*param_2 == '\0') {
      return (int)puVar5 - (int)param_1;
    }
  }
  param_2 = param_2 + 1;
  param_3 = puVar3;
  puVar5 = puVar4;
  goto LAB_0018f1dc;
switchD_0018f1f4_caseD_77:
  puVar2 = (undefined2 *)((long)param_3 + ((ulong)param_3 & 1));
  if (param_4 == 0) {
    *puVar2 = *(undefined2 *)puVar5;
  }
  else {
    *puVar2 = *(undefined2 *)puVar5;
  }
  param_2 = param_2 + 1;
  param_3 = (undefined8 *)(puVar2 + 1);
  puVar5 = (undefined8 *)((long)puVar5 + 2);
  goto LAB_0018f1dc;
}


==================================================================

### FUNC 0018f278 (100 bytes) name=usbi_device_cache_descriptor

uint usbi_device_cache_descriptor(long param_1)

{
  long lVar1;
  uint uVar2;
  undefined4 local_2c;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  local_2c = 0;
  uVar2 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0x48))(param_1,param_1 + 0x68,&local_2c)
  ;
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return uVar2 & (int)uVar2 >> 0x1f;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0018f2dc (80 bytes) name=libusb_get_device_descriptor

undefined8 libusb_get_device_descriptor(long param_1,undefined8 *param_2)

{
  undefined8 uVar1;
  
  usbi_log(0,4,"libusb_get_device_descriptor","");
  *(undefined2 *)(param_2 + 2) = *(undefined2 *)(param_1 + 0x78);
  uVar1 = *(undefined8 *)(param_1 + 0x68);
  param_2[1] = *(undefined8 *)(param_1 + 0x70);
  *param_2 = uVar1;
  return 0;
}


==================================================================

### FUNC 0018f32c (464 bytes) name=libusb_get_active_config_descriptor

int libusb_get_active_config_descriptor(long param_1,undefined8 param_2)

{
  undefined4 *puVar1;
  undefined2 *puVar2;
  long lVar3;
  int iVar4;
  void *__ptr;
  undefined8 *puVar5;
  undefined8 *puVar6;
  char *pcVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 uVar11;
  int local_84;
  undefined8 uStack_80;
  undefined8 local_54;
  long local_48;
  
  lVar3 = tpidr_el0;
  local_48 = *(long *)(lVar3 + 0x28);
  lVar10 = *(long *)PTR_usbi_backend_00501a30;
  local_84 = 0;
  iVar4 = (**(code **)(lVar10 + 0x50))(param_1,&local_54,9,&local_84);
  if (-1 < iVar4) {
    if (8 < iVar4) {
      pcVar7 = "bbw";
      puVar6 = &local_54;
      puVar9 = &uStack_80;
LAB_0018f3dc:
      puVar5 = puVar6;
      puVar8 = puVar9;
      switch(*pcVar7) {
      case 'b':
        pcVar7 = pcVar7 + 1;
        *(undefined1 *)puVar9 = *(undefined1 *)puVar6;
        puVar6 = (undefined8 *)((long)puVar6 + 1);
        puVar9 = (undefined8 *)((long)puVar9 + 1);
        goto LAB_0018f3dc;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
        break;
      case 'd':
        puVar1 = (undefined4 *)((long)puVar9 + ((ulong)puVar9 & 1));
        pcVar7 = pcVar7 + 1;
        *puVar1 = *(undefined4 *)puVar6;
        puVar6 = (undefined8 *)((long)puVar6 + 4);
        puVar9 = (undefined8 *)(puVar1 + 1);
        goto LAB_0018f3dc;
      case 'u':
        puVar5 = puVar6 + 2;
        uVar11 = *puVar6;
        puVar8 = puVar9 + 2;
        puVar9[1] = puVar6[1];
        *puVar9 = uVar11;
        break;
      case 'w':
        goto switchD_0018f3f4_caseD_77;
      default:
        if (*pcVar7 == '\0') goto LAB_0018f46c;
      }
      pcVar7 = pcVar7 + 1;
      puVar6 = puVar5;
      puVar9 = puVar8;
      goto LAB_0018f3dc;
    }
    usbi_log(*(undefined8 *)(param_1 + 0x30),1,"libusb_get_active_config_descriptor",
             "short config descriptor read %d/%d",iVar4,9);
    iVar4 = -1;
  }
LAB_0018f4cc:
  if (*(long *)(lVar3 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar4;
LAB_0018f46c:
  __ptr = malloc((ulong)uStack_80._2_2_);
  if (__ptr == (void *)0x0) {
    iVar4 = -0xb;
  }
  else {
    iVar4 = (**(code **)(lVar10 + 0x50))(param_1,__ptr,(ulong)uStack_80._2_2_,&local_84);
    if (-1 < iVar4) {
      iVar4 = FUN_0018f4fc(*(undefined8 *)(param_1 + 0x30),__ptr,iVar4,local_84,param_2);
    }
    free(__ptr);
  }
  goto LAB_0018f4cc;
switchD_0018f3f4_caseD_77:
  puVar2 = (undefined2 *)((long)puVar9 + ((ulong)puVar9 & 1));
  if (local_84 == 0) {
    *puVar2 = *(undefined2 *)puVar6;
  }
  else {
    *puVar2 = *(undefined2 *)puVar6;
  }
  pcVar7 = pcVar7 + 1;
  puVar6 = (undefined8 *)((long)puVar6 + 2);
  puVar9 = (undefined8 *)(puVar2 + 1);
  goto LAB_0018f3dc;
}


==================================================================

### FUNC 0018f4fc (3732 bytes) name=FUN_0018f4fc

ulong FUN_0018f4fc(undefined8 param_1,byte *param_2,uint param_3,int param_4,undefined8 *param_5)

{
  undefined8 *puVar1;
  byte bVar2;
  long lVar3;
  byte *__ptr;
  void *pvVar4;
  void *pvVar5;
  undefined8 uVar6;
  undefined8 *puVar7;
  char *pcVar8;
  char *pcVar9;
  uint uVar10;
  uint uVar11;
  ulong uVar12;
  byte bVar13;
  int *piVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  long lVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  byte *pbVar24;
  ulong uVar25;
  int *piVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  ulong uVar30;
  long lVar31;
  void *pvVar32;
  long local_c8;
  uint local_bc;
  uint local_94;
  byte *local_90;
  byte local_80;
  byte local_7f;
  byte local_78;
  byte local_77;
  byte local_70;
  byte local_6f;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  __ptr = malloc(0x28);
  if (__ptr == (byte *)0x0) {
    uVar30 = 0xfffffff5;
    goto LAB_0018f6bc;
  }
  if (8 < (int)param_3) {
    pcVar9 = "bbwbbbbb";
    pbVar21 = param_2;
    pbVar20 = __ptr;
LAB_0018f5b0:
    pbVar16 = pbVar21;
    pbVar15 = pbVar20;
    switch(*pcVar9) {
    case 'b':
      pcVar9 = pcVar9 + 1;
      *pbVar20 = *pbVar21;
      pbVar21 = pbVar21 + 1;
      pbVar20 = pbVar20 + 1;
      goto LAB_0018f5b0;
    case 'c':
    case 'e':
    case 'f':
    case 'g':
    case 'h':
    case 'i':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'o':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'v':
      break;
    case 'd':
      pcVar9 = pcVar9 + 1;
      *(undefined4 *)(pbVar20 + ((ulong)pbVar20 & 1)) = *(undefined4 *)pbVar21;
      pbVar21 = pbVar21 + 4;
      pbVar20 = pbVar20 + ((ulong)pbVar20 & 1) + 4;
      goto LAB_0018f5b0;
    case 'u':
      pbVar16 = pbVar21 + 0x10;
      uVar6 = *(undefined8 *)pbVar21;
      pbVar15 = pbVar20 + 0x10;
      *(undefined8 *)(pbVar20 + 8) = *(undefined8 *)(pbVar21 + 8);
      *(undefined8 *)pbVar20 = uVar6;
      break;
    case 'w':
      goto switchD_0018f5c8_caseD_77;
    default:
      if (*pcVar9 == '\0') goto LAB_0018f634;
    }
    pcVar9 = pcVar9 + 1;
    pbVar21 = pbVar16;
    pbVar20 = pbVar15;
    goto LAB_0018f5b0;
  }
  pcVar9 = "short config descriptor read %d/%d";
  uVar11 = 9;
  uVar10 = param_3;
LAB_0018f68c:
  usbi_log(param_1,1,"parse_configuration",pcVar9,uVar10,uVar11);
LAB_0018f690:
  uVar30 = 0xffffffff;
  goto LAB_0018f694;
code_r0x0018f834:
  uVar10 = (uint)local_80;
  if (local_80 < 2) {
    usbi_log(param_1,1,"parse_configuration","invalid extra config desc len (%d)",uVar10);
    uVar30 = 0xffffffff;
    pvVar4 = *(void **)(__ptr + 0x10);
    goto joined_r0x00190294;
  }
  if (iVar29 < (int)uVar10) {
    usbi_log(param_1,2,"parse_configuration","short extra config desc read %d/%d",uVar30,uVar10);
    goto LAB_001901f8;
  }
  if ((local_7f < 6) && ((1 << (ulong)(local_7f & 0x1f) & 0x36U) != 0)) goto LAB_0018f898;
  usbi_log(0,4,"parse_configuration","skipping descriptor 0x%x");
  uVar10 = iVar29 - (uint)local_80;
  uVar30 = (ulong)uVar10;
  pbVar20 = pbVar20 + local_80;
  goto joined_r0x0018f7a0;
switchD_0018f7e4_caseD_77:
  pcVar9 = pcVar9 + 1;
  *(undefined2 *)(pbVar21 + ((ulong)pbVar21 & 1)) = *(undefined2 *)pbVar16;
  pbVar21 = pbVar21 + ((ulong)pbVar21 & 1) + 2;
  pbVar16 = pbVar16 + 2;
  goto LAB_0018f7cc;
code_r0x0018f9f4:
  bVar2 = *(byte *)((long)pvVar5 + lVar18 * 0x28 + 1);
  uVar12 = (ulong)bVar2;
  if (bVar2 != 4) {
    uVar6 = 1;
    uVar10 = 4;
    pcVar9 = "unexpected descriptor %x (expected %x)";
LAB_00190144:
    usbi_log(param_1,uVar6,"parse_interface",pcVar9,uVar12,uVar10);
    goto joined_r0x001900fc;
  }
  bVar2 = *pbVar15;
  uVar12 = (ulong)bVar2;
  if (bVar2 < 9) {
    pcVar9 = "invalid interface bLength (%d)";
LAB_00190270:
    pcVar8 = "parse_interface";
LAB_0019027c:
    usbi_log(param_1,1,pcVar8,pcVar9,uVar12);
LAB_00190280:
    uVar12 = 0xffffffff;
    goto LAB_00190284;
  }
  uVar10 = (uint)bVar2;
  uVar11 = iVar27 - uVar10;
  if (iVar27 < (int)uVar10) {
    uVar6 = 2;
    pcVar9 = "short intf descriptor read %d/%d";
    uVar12 = uVar25;
    goto LAB_00190144;
  }
  pbVar21 = (byte *)((long)pvVar5 + lVar18 * 0x28 + 4);
  if (0x20 < *pbVar21) {
    pcVar8 = "parse_interface";
    pcVar9 = "too many endpoints (%d)";
    uVar12 = (ulong)(uint)*pbVar21;
    goto LAB_0019027c;
  }
  iVar27 = *piVar14;
  puVar7 = (undefined8 *)((long)pvVar5 + lVar18 * 0x28 + 0x18);
  *puVar7 = 0;
  piVar26 = (int *)((long)pvVar5 + lVar18 * 0x28 + 0x20);
  *piVar26 = 0;
  puVar22 = (undefined8 *)((long)pvVar5 + lVar18 * 0x28 + 0x10);
  *puVar22 = 0;
  *piVar14 = iVar27 + 1;
  if (local_bc == 0xffffffff) {
    local_bc = (uint)*(byte *)((long)pvVar5 + lVar18 * 0x28 + 2);
  }
  pbVar16 = local_90 + uVar12;
  local_94 = local_94 + uVar10;
  uVar25 = (ulong)uVar11;
  local_90 = pbVar16;
  if (1 < (int)uVar11) {
    uVar12 = (ulong)local_78;
LAB_0018fa90:
    pcVar9 = "bb";
    pbVar15 = &local_78;
    pbVar17 = local_90;
LAB_0018fab8:
    pbVar24 = pbVar15;
    pbVar23 = pbVar17;
    switch(*pcVar9) {
    case 'b':
      pcVar9 = pcVar9 + 1;
      *pbVar15 = *pbVar17;
      pbVar15 = pbVar15 + 1;
      pbVar17 = pbVar17 + 1;
      goto LAB_0018fab8;
    case 'c':
    case 'e':
    case 'f':
    case 'g':
    case 'h':
    case 'i':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'o':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'v':
      break;
    case 'd':
      pcVar9 = pcVar9 + 1;
      *(undefined4 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined4 *)pbVar17;
      pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 4;
      pbVar17 = pbVar17 + 4;
      goto LAB_0018fab8;
    case 'u':
      pbVar23 = pbVar17 + 0x10;
      uVar6 = *(undefined8 *)pbVar17;
      pbVar24 = pbVar15 + 0x10;
      *(undefined8 *)(pbVar15 + 8) = *(undefined8 *)(pbVar17 + 8);
      *(undefined8 *)pbVar15 = uVar6;
      break;
    case 'w':
      goto switchD_0018fad0_caseD_77;
    default:
      if (*pcVar9 == '\0') goto code_r0x0018fb20;
    }
    pcVar9 = pcVar9 + 1;
    pbVar15 = pbVar24;
    pbVar17 = pbVar23;
    goto LAB_0018fab8;
  }
LAB_0018fb70:
  iVar28 = (int)local_90 - (int)pbVar16;
  iVar27 = (int)uVar25;
  if (iVar28 == 0) {
LAB_0018fbc4:
    if ((ulong)*pbVar21 == 0) {
joined_r0x0019003c:
      if (((iVar27 < 9) || (local_90[1] != 4)) || (local_bc != local_90[2]))
      goto joined_r0x001900fc;
      goto LAB_0018f900;
    }
    pvVar5 = calloc((ulong)*pbVar21,0x20);
    *puVar22 = pvVar5;
    if (pvVar5 != (void *)0x0) {
      lVar18 = 0;
LAB_0018fc04:
      uVar10 = (uint)uVar25;
      if (1 < (int)uVar10) {
        pbVar16 = (byte *)((long)pvVar5 + lVar18 * 0x20);
        pcVar9 = "bb";
        pbVar15 = &local_70;
        pbVar17 = local_90;
LAB_0018fc44:
        pbVar24 = pbVar15;
        pbVar23 = pbVar17;
        switch(*pcVar9) {
        case 'b':
          pcVar9 = pcVar9 + 1;
          *pbVar15 = *pbVar17;
          pbVar15 = pbVar15 + 1;
          pbVar17 = pbVar17 + 1;
          goto LAB_0018fc44;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar9 = pcVar9 + 1;
          *(undefined4 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined4 *)pbVar17;
          pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 4;
          pbVar17 = pbVar17 + 4;
          goto LAB_0018fc44;
        case 'u':
          pbVar23 = pbVar17 + 0x10;
          uVar6 = *(undefined8 *)pbVar17;
          pbVar24 = pbVar15 + 0x10;
          *(undefined8 *)(pbVar15 + 8) = *(undefined8 *)(pbVar17 + 8);
          *(undefined8 *)pbVar15 = uVar6;
          break;
        case 'w':
          goto switchD_0018fc5c_caseD_77;
        default:
          if (*pcVar9 == '\0') goto code_r0x0018fcac;
        }
        pcVar9 = pcVar9 + 1;
        pbVar15 = pbVar24;
        pbVar17 = pbVar23;
        goto LAB_0018fc44;
      }
      usbi_log(param_1,1,"parse_endpoint","short endpoint descriptor read %d/%d",uVar25,2);
      goto LAB_00190280;
    }
  }
  else {
    pvVar5 = malloc((long)iVar28);
    *puVar7 = pvVar5;
    if (pvVar5 != (void *)0x0) {
      memcpy(pvVar5,pbVar16,(long)iVar28);
      *piVar26 = iVar28;
      goto LAB_0018fbc4;
    }
  }
LAB_00190364:
  uVar12 = 0xfffffff5;
LAB_00190284:
  FUN_00191604(puVar1);
  pvVar4 = *(void **)(__ptr + 0x10);
  uVar30 = uVar12;
  goto joined_r0x00190294;
code_r0x0018fb20:
  if (bVar13 < 2) {
    pcVar9 = "invalid extra intf desc len (%d)";
    goto LAB_00190270;
  }
  uVar11 = (uint)bVar13;
  uVar10 = (int)uVar25 - uVar11;
  if ((int)uVar25 < (int)uVar11) {
    usbi_log(param_1,2,"parse_interface","short extra intf desc read %d/%d",uVar25,uVar11);
    goto joined_r0x001900fc;
  }
  if ((local_77 < 6) && ((1 << (ulong)(local_77 & 0x1f) & 0x36U) != 0)) goto LAB_0018fb70;
  local_90 = local_90 + uVar12;
  local_94 = local_94 + uVar11;
  uVar25 = (ulong)uVar10;
  if ((int)uVar10 < 2) goto LAB_0018fb70;
  goto LAB_0018fa90;
switchD_0018fad0_caseD_77:
  pcVar9 = pcVar9 + 1;
  *(undefined2 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined2 *)pbVar17;
  pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 2;
  pbVar17 = pbVar17 + 2;
  goto LAB_0018fab8;
code_r0x0018fcac:
  uVar11 = (uint)local_6f;
  if (local_6f == 5) {
    if ((int)(uint)local_70 <= (int)uVar10) {
      uVar11 = (uint)local_70;
      if (8 < uVar11) {
        pcVar9 = "bbbbwbbb";
        pbVar15 = local_90;
LAB_0018fcf4:
        pbVar17 = pbVar16;
        pbVar24 = pbVar15;
        switch(*pcVar9) {
        case 'b':
          pcVar9 = pcVar9 + 1;
          *pbVar16 = *pbVar15;
          pbVar16 = pbVar16 + 1;
          pbVar15 = pbVar15 + 1;
          goto LAB_0018fcf4;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar9 = pcVar9 + 1;
          *(undefined4 *)(pbVar16 + ((ulong)pbVar16 & 1)) = *(undefined4 *)pbVar15;
          pbVar16 = pbVar16 + ((ulong)pbVar16 & 1) + 4;
          pbVar15 = pbVar15 + 4;
          goto LAB_0018fcf4;
        case 'u':
          pbVar24 = pbVar15 + 0x10;
          uVar6 = *(undefined8 *)pbVar15;
          pbVar17 = pbVar16 + 0x10;
          *(undefined8 *)(pbVar16 + 8) = *(undefined8 *)(pbVar15 + 8);
          *(undefined8 *)pbVar16 = uVar6;
          break;
        case 'w':
          goto switchD_0018fd0c_caseD_77;
        default:
          if (*pcVar9 == '\0') goto LAB_0018fe28;
        }
        pcVar9 = pcVar9 + 1;
        pbVar16 = pbVar17;
        pbVar15 = pbVar24;
        goto LAB_0018fcf4;
      }
      if (6 < uVar11) {
        pcVar9 = "bbbbwb";
        pbVar15 = local_90;
LAB_0018fda4:
        pbVar17 = pbVar16;
        pbVar24 = pbVar15;
        switch(*pcVar9) {
        case 'b':
          pcVar9 = pcVar9 + 1;
          *pbVar16 = *pbVar15;
          pbVar16 = pbVar16 + 1;
          pbVar15 = pbVar15 + 1;
          goto LAB_0018fda4;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar9 = pcVar9 + 1;
          *(undefined4 *)(pbVar16 + ((ulong)pbVar16 & 1)) = *(undefined4 *)pbVar15;
          pbVar16 = pbVar16 + ((ulong)pbVar16 & 1) + 4;
          pbVar15 = pbVar15 + 4;
          goto LAB_0018fda4;
        case 'u':
          pbVar24 = pbVar15 + 0x10;
          uVar6 = *(undefined8 *)pbVar15;
          pbVar17 = pbVar16 + 0x10;
          *(undefined8 *)(pbVar16 + 8) = *(undefined8 *)(pbVar15 + 8);
          *(undefined8 *)pbVar16 = uVar6;
          break;
        case 'w':
          goto switchD_0018fdbc_caseD_77;
        default:
          if (*pcVar9 == '\0') goto LAB_0018fe28;
        }
        pcVar9 = pcVar9 + 1;
        pbVar16 = pbVar17;
        pbVar15 = pbVar24;
        goto LAB_0018fda4;
      }
      pcVar8 = "parse_endpoint";
      pcVar9 = "invalid endpoint bLength (%d)";
      uVar12 = (ulong)uVar11;
      goto LAB_0019027c;
    }
    uVar6 = 2;
    pcVar9 = "short endpoint descriptor read %d/%d";
    bVar13 = local_70;
    uVar11 = uVar10;
  }
  else {
    uVar6 = 1;
    bVar13 = 5;
    pcVar9 = "unexpected descriptor %x (expected %x)";
  }
  usbi_log(param_1,uVar6,"parse_endpoint",pcVar9,uVar11,bVar13);
  goto LAB_00190090;
switchD_0018fd0c_caseD_77:
  pbVar16 = pbVar16 + ((ulong)pbVar16 & 1);
  if (param_4 == 0) {
    *(undefined2 *)pbVar16 = *(undefined2 *)pbVar15;
  }
  else {
    *(undefined2 *)pbVar16 = *(undefined2 *)pbVar15;
  }
  pcVar9 = pcVar9 + 1;
  pbVar16 = pbVar16 + 2;
  pbVar15 = pbVar15 + 2;
  goto LAB_0018fcf4;
LAB_0018fe28:
  uVar12 = (ulong)local_70;
  pbVar16 = local_90 + uVar12;
  iVar27 = uVar10 - local_70;
  pbVar15 = pbVar16;
joined_r0x0018fe44:
  iVar28 = (int)uVar12;
  if (1 < iVar27) {
    pcVar9 = "bb";
    pbVar17 = &local_70;
    pbVar24 = pbVar15;
LAB_0018fe70:
    pbVar23 = pbVar17;
    pbVar19 = pbVar24;
    switch(*pcVar9) {
    case 'b':
      pcVar9 = pcVar9 + 1;
      *pbVar17 = *pbVar24;
      pbVar17 = pbVar17 + 1;
      pbVar24 = pbVar24 + 1;
      goto LAB_0018fe70;
    case 'c':
    case 'e':
    case 'f':
    case 'g':
    case 'h':
    case 'i':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'o':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'v':
      break;
    case 'd':
      pcVar9 = pcVar9 + 1;
      *(undefined4 *)(pbVar17 + ((ulong)pbVar17 & 1)) = *(undefined4 *)pbVar24;
      pbVar17 = pbVar17 + ((ulong)pbVar17 & 1) + 4;
      pbVar24 = pbVar24 + 4;
      goto LAB_0018fe70;
    case 'u':
      pbVar19 = pbVar24 + 0x10;
      uVar6 = *(undefined8 *)pbVar24;
      pbVar23 = pbVar17 + 0x10;
      *(undefined8 *)(pbVar17 + 8) = *(undefined8 *)(pbVar24 + 8);
      *(undefined8 *)pbVar17 = uVar6;
      break;
    case 'w':
      goto switchD_0018fe88_caseD_77;
    default:
      if (*pcVar9 == '\0') goto code_r0x0018fed8;
    }
    pcVar9 = pcVar9 + 1;
    pbVar17 = pbVar23;
    pbVar24 = pbVar19;
    goto LAB_0018fe70;
  }
LAB_0018ff48:
  iVar27 = (int)pbVar15 - (int)pbVar16;
  if (iVar27 == 0) {
    *(undefined8 *)((long)pvVar5 + lVar18 * 0x20 + 0x10) = 0;
    *(undefined4 *)((long)pvVar5 + lVar18 * 0x20 + 0x18) = 0;
  }
  else {
    pvVar32 = malloc((long)iVar27);
    *(void **)((long)pvVar5 + lVar18 * 0x20 + 0x10) = pvVar32;
    if (pvVar32 == (void *)0x0) {
      *(undefined4 *)((long)pvVar5 + lVar18 * 0x20 + 0x18) = 0;
      goto LAB_00190364;
    }
    memcpy(pvVar32,pbVar16,(long)iVar27);
    *(int *)((long)pvVar5 + lVar18 * 0x20 + 0x18) = iVar27;
  }
LAB_0018ffe0:
  if (iVar28 < 0) goto LAB_00190284;
  if (iVar28 != 0) {
    lVar18 = lVar18 + 1;
    local_90 = local_90 + iVar28;
    local_94 = iVar28 + local_94;
    uVar25 = (ulong)(uVar10 - iVar28);
    if ((long)(ulong)*pbVar21 <= lVar18) goto LAB_00190098;
    goto LAB_0018fc04;
  }
LAB_00190090:
  *pbVar21 = (byte)lVar18;
  goto LAB_00190098;
code_r0x0018fed8:
  uVar11 = (uint)local_70;
  if (local_70 < 2) {
    pcVar8 = "parse_endpoint";
    pcVar9 = "invalid extra ep desc len (%d)";
    uVar12 = (ulong)uVar11;
    goto LAB_0019027c;
  }
  if (iVar27 < (int)uVar11) {
    usbi_log(param_1,2,"parse_endpoint","short extra ep desc read %d/%d",iVar27,uVar11);
    goto LAB_0018ffe0;
  }
  if ((local_6f < 6) && ((1 << (ulong)(local_6f & 0x1f) & 0x36U) != 0)) goto LAB_0018ff48;
  usbi_log(0,4,"parse_endpoint","skipping descriptor %x");
  iVar27 = iVar27 - (uint)local_70;
  pbVar15 = pbVar15 + local_70;
  uVar12 = (ulong)(iVar28 + (uint)local_70);
  goto joined_r0x0018fe44;
switchD_0018fe88_caseD_77:
  pcVar9 = pcVar9 + 1;
  *(undefined2 *)(pbVar17 + ((ulong)pbVar17 & 1)) = *(undefined2 *)pbVar24;
  pbVar17 = pbVar17 + ((ulong)pbVar17 & 1) + 2;
  pbVar24 = pbVar24 + 2;
  goto LAB_0018fe70;
switchD_0018fdbc_caseD_77:
  pbVar16 = pbVar16 + ((ulong)pbVar16 & 1);
  if (param_4 == 0) {
    *(undefined2 *)pbVar16 = *(undefined2 *)pbVar15;
  }
  else {
    *(undefined2 *)pbVar16 = *(undefined2 *)pbVar15;
  }
  pcVar9 = pcVar9 + 1;
  pbVar16 = pbVar16 + 2;
  pbVar15 = pbVar15 + 2;
  goto LAB_0018fda4;
LAB_00190098:
  iVar27 = (int)uVar25;
  goto joined_r0x0019003c;
switchD_0018fc5c_caseD_77:
  pcVar9 = pcVar9 + 1;
  *(undefined2 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined2 *)pbVar17;
  pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 2;
  pbVar17 = pbVar17 + 2;
  goto LAB_0018fc44;
switchD_0018f9a4_caseD_77:
  pcVar9 = pcVar9 + 1;
  *(undefined2 *)(pbVar21 + ((ulong)pbVar21 & 1)) = *(undefined2 *)pbVar16;
  pbVar21 = pbVar21 + ((ulong)pbVar21 & 1) + 2;
  pbVar16 = pbVar16 + 2;
  goto LAB_0018f98c;
code_r0x00190158:
  param_2 = pbVar20 + (int)local_94;
  uVar30 = (ulong)(iVar29 - local_94);
  local_c8 = local_c8 + 1;
  if ((long)(ulong)__ptr[4] <= local_c8) goto LAB_001902e8;
  goto LAB_0018f798;
switchD_0018f5c8_caseD_77:
  pbVar20 = pbVar20 + ((ulong)pbVar20 & 1);
  if (param_4 == 0) {
    *(undefined2 *)pbVar20 = *(undefined2 *)pbVar21;
  }
  else {
    *(undefined2 *)pbVar20 = *(undefined2 *)pbVar21;
  }
  pcVar9 = pcVar9 + 1;
  pbVar21 = pbVar21 + 2;
  pbVar20 = pbVar20 + 2;
  goto LAB_0018f5b0;
LAB_0018f634:
  uVar10 = (uint)__ptr[1];
  if (__ptr[1] != 2) {
    pcVar9 = "unexpected descriptor %x (expected %x)";
    uVar11 = 2;
    goto LAB_0018f68c;
  }
  bVar13 = *__ptr;
  if (bVar13 < 9) {
    pcVar9 = "invalid config bLength (%d)";
    uVar30 = (ulong)bVar13;
LAB_0018f668:
    usbi_log(param_1,1,"parse_configuration",pcVar9,uVar30);
    goto LAB_0018f690;
  }
  uVar11 = (uint)bVar13;
  if ((int)param_3 < (int)uVar11) {
    pcVar9 = "short config descriptor read %d/%d";
    uVar10 = param_3;
    goto LAB_0018f68c;
  }
  bVar2 = __ptr[4];
  uVar30 = (ulong)bVar2;
  if (0x20 < bVar2) {
    pcVar9 = "too many interfaces (%d)";
    goto LAB_0018f668;
  }
  pvVar4 = calloc(uVar30,0x10);
  *(void **)(__ptr + 0x10) = pvVar4;
  if (pvVar4 == (void *)0x0) {
    uVar30 = 0xfffffff5;
  }
  else {
    uVar30 = (ulong)(param_3 - uVar11);
    __ptr[0x18] = 0;
    __ptr[0x19] = 0;
    __ptr[0x1a] = 0;
    __ptr[0x1b] = 0;
    __ptr[0x1c] = 0;
    __ptr[0x1d] = 0;
    __ptr[0x1e] = 0;
    __ptr[0x1f] = 0;
    __ptr[0x20] = 0;
    __ptr[0x21] = 0;
    __ptr[0x22] = 0;
    __ptr[0x23] = 0;
    if (bVar2 != 0) {
      param_2 = param_2 + bVar13;
      local_c8 = 0;
LAB_0018f798:
      uVar10 = (uint)uVar30;
      pbVar20 = param_2;
joined_r0x0018f7a0:
      iVar29 = (int)uVar30;
      if (1 < (int)uVar10) {
        pcVar9 = "bb";
        pbVar21 = &local_80;
        pbVar16 = pbVar20;
LAB_0018f7cc:
        pbVar15 = pbVar21;
        pbVar17 = pbVar16;
        switch(*pcVar9) {
        case 'b':
          pcVar9 = pcVar9 + 1;
          *pbVar21 = *pbVar16;
          pbVar21 = pbVar21 + 1;
          pbVar16 = pbVar16 + 1;
          goto LAB_0018f7cc;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar9 = pcVar9 + 1;
          *(undefined4 *)(pbVar21 + ((ulong)pbVar21 & 1)) = *(undefined4 *)pbVar16;
          pbVar21 = pbVar21 + ((ulong)pbVar21 & 1) + 4;
          pbVar16 = pbVar16 + 4;
          goto LAB_0018f7cc;
        case 'u':
          pbVar17 = pbVar16 + 0x10;
          uVar6 = *(undefined8 *)pbVar16;
          pbVar15 = pbVar21 + 0x10;
          *(undefined8 *)(pbVar21 + 8) = *(undefined8 *)(pbVar16 + 8);
          *(undefined8 *)pbVar21 = uVar6;
          break;
        case 'w':
          goto switchD_0018f7e4_caseD_77;
        default:
          if (*pcVar9 == '\0') goto code_r0x0018f834;
        }
        pcVar9 = pcVar9 + 1;
        pbVar21 = pbVar15;
        pbVar16 = pbVar17;
        goto LAB_0018f7cc;
      }
LAB_0018f898:
      iVar27 = (int)pbVar20 - (int)param_2;
      if ((iVar27 != 0) && (*(int *)(__ptr + 0x20) == 0)) {
        pvVar5 = malloc((long)iVar27);
        *(void **)(__ptr + 0x18) = pvVar5;
        if (pvVar5 != (void *)0x0) {
          memcpy(pvVar5,param_2,(long)iVar27);
          *(int *)(__ptr + 0x20) = iVar27;
          goto LAB_0018f8d4;
        }
        uVar30 = 0xfffffff5;
        pvVar4 = *(void **)(__ptr + 0x10);
joined_r0x00190294:
        if ((pvVar4 != (void *)0x0) && (__ptr[4] != 0)) {
          FUN_00191604();
          if (1 < __ptr[4]) {
            lVar18 = 1;
            lVar31 = 0x10;
            do {
              FUN_00191604(*(long *)(__ptr + 0x10) + lVar31);
              lVar18 = lVar18 + 1;
              lVar31 = lVar31 + 0x10;
            } while (lVar18 < (long)(ulong)__ptr[4]);
          }
          pvVar4 = *(void **)(__ptr + 0x10);
        }
        free(pvVar4);
        free(*(void **)(__ptr + 0x18));
        goto LAB_001902e8;
      }
LAB_0018f8d4:
      local_94 = 0;
      puVar1 = (undefined8 *)((long)pvVar4 + local_c8 * 0x10);
      piVar14 = (int *)(puVar1 + 1);
      *piVar14 = 0;
      local_bc = 0xffffffff;
      uVar25 = uVar30;
      local_90 = pbVar20;
LAB_0018f900:
      iVar27 = (int)uVar25;
      if (8 < iVar27) {
        pvVar32 = (void *)*puVar1;
        pvVar5 = realloc(pvVar32,(long)*piVar14 * 0x28 + 0x28);
        bVar13 = local_78;
        if (pvVar5 != (void *)0x0) {
          *puVar1 = pvVar5;
          lVar18 = (long)*piVar14;
          pbVar15 = (byte *)((long)pvVar5 + lVar18 * 0x28);
          pcVar9 = "bbbbbbbbb";
          pbVar21 = pbVar15;
          pbVar16 = local_90;
LAB_0018f98c:
          pbVar17 = pbVar21;
          pbVar24 = pbVar16;
          switch(*pcVar9) {
          case 'b':
            pcVar9 = pcVar9 + 1;
            *pbVar21 = *pbVar16;
            pbVar21 = pbVar21 + 1;
            pbVar16 = pbVar16 + 1;
            goto LAB_0018f98c;
          case 'c':
          case 'e':
          case 'f':
          case 'g':
          case 'h':
          case 'i':
          case 'j':
          case 'k':
          case 'l':
          case 'm':
          case 'n':
          case 'o':
          case 'p':
          case 'q':
          case 'r':
          case 's':
          case 't':
          case 'v':
            break;
          case 'd':
            pcVar9 = pcVar9 + 1;
            *(undefined4 *)(pbVar21 + ((ulong)pbVar21 & 1)) = *(undefined4 *)pbVar16;
            pbVar21 = pbVar21 + ((ulong)pbVar21 & 1) + 4;
            pbVar16 = pbVar16 + 4;
            goto LAB_0018f98c;
          case 'u':
            pbVar24 = pbVar16 + 0x10;
            uVar6 = *(undefined8 *)pbVar16;
            pbVar17 = pbVar21 + 0x10;
            *(undefined8 *)(pbVar21 + 8) = *(undefined8 *)(pbVar16 + 8);
            *(undefined8 *)pbVar21 = uVar6;
            break;
          case 'w':
            goto switchD_0018f9a4_caseD_77;
          default:
            if (*pcVar9 == '\0') goto code_r0x0018f9f4;
          }
          pcVar9 = pcVar9 + 1;
          pbVar21 = pbVar17;
          pbVar16 = pbVar24;
          goto LAB_0018f98c;
        }
        free(pvVar32);
        uVar12 = 0xfffffff5;
        goto LAB_00190284;
      }
joined_r0x001900fc:
      if ((int)local_94 < 0) {
        uVar30 = (ulong)local_94;
        pvVar4 = *(void **)(__ptr + 0x10);
        goto joined_r0x00190294;
      }
      if (local_94 != 0) goto code_r0x00190158;
LAB_001901f8:
      __ptr[4] = (byte)local_c8;
      goto joined_r0x00190200;
    }
LAB_001902e8:
    iVar29 = (int)uVar30;
joined_r0x00190200:
    if (-1 < iVar29) {
      if (iVar29 != 0) {
        usbi_log(param_1,2,"raw_desc_to_config","still %d bytes of descriptor data left",iVar29);
      }
      uVar30 = 0;
      *param_5 = __ptr;
      goto LAB_0018f6bc;
    }
  }
LAB_0018f694:
  usbi_log(param_1,1,"raw_desc_to_config","parse_configuration failed with error %d",uVar30);
  free(__ptr);
LAB_0018f6bc:
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return uVar30;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00190390 (544 bytes) name=libusb_get_config_descriptor

int libusb_get_config_descriptor(long param_1,uint param_2,undefined8 param_3)

{
  undefined4 *puVar1;
  undefined2 *puVar2;
  long lVar3;
  int iVar4;
  void *__ptr;
  undefined8 *puVar5;
  undefined8 *puVar6;
  char *pcVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 uVar11;
  int local_94;
  undefined8 uStack_90;
  undefined8 local_64;
  long local_58;
  
  lVar3 = tpidr_el0;
  local_58 = *(long *)(lVar3 + 0x28);
  local_94 = 0;
  usbi_log(0,4,"libusb_get_config_descriptor","index %d",param_2 & 0xff);
  if ((param_2 & 0xff) < (uint)*(byte *)(param_1 + 0x49)) {
    lVar10 = *(long *)PTR_usbi_backend_00501a30;
    iVar4 = (**(code **)(lVar10 + 0x58))(param_1,param_2,&local_64,9,&local_94);
    if (-1 < iVar4) {
      if (8 < iVar4) {
        pcVar7 = "bbw";
        puVar6 = &local_64;
        puVar9 = &uStack_90;
LAB_001904b4:
        puVar5 = puVar6;
        puVar8 = puVar9;
        switch(*pcVar7) {
        case 'b':
          pcVar7 = pcVar7 + 1;
          *(undefined1 *)puVar9 = *(undefined1 *)puVar6;
          puVar6 = (undefined8 *)((long)puVar6 + 1);
          puVar9 = (undefined8 *)((long)puVar9 + 1);
          goto LAB_001904b4;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          puVar1 = (undefined4 *)((long)puVar9 + ((ulong)puVar9 & 1));
          pcVar7 = pcVar7 + 1;
          *puVar1 = *(undefined4 *)puVar6;
          puVar6 = (undefined8 *)((long)puVar6 + 4);
          puVar9 = (undefined8 *)(puVar1 + 1);
          goto LAB_001904b4;
        case 'u':
          puVar5 = puVar6 + 2;
          uVar11 = *puVar6;
          puVar8 = puVar9 + 2;
          puVar9[1] = puVar6[1];
          *puVar9 = uVar11;
          break;
        case 'w':
          goto switchD_001904cc_caseD_77;
        default:
          if (*pcVar7 == '\0') goto LAB_00190544;
        }
        pcVar7 = pcVar7 + 1;
        puVar6 = puVar5;
        puVar9 = puVar8;
        goto LAB_001904b4;
      }
      usbi_log(*(undefined8 *)(param_1 + 0x30),1,"libusb_get_config_descriptor",
               "short config descriptor read %d/%d",iVar4,9);
      iVar4 = -1;
    }
  }
  else {
    iVar4 = -5;
  }
LAB_00190460:
  if (*(long *)(lVar3 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar4;
LAB_00190544:
  __ptr = malloc((ulong)uStack_90._2_2_);
  if (__ptr == (void *)0x0) {
    iVar4 = -0xb;
  }
  else {
    iVar4 = (**(code **)(lVar10 + 0x58))(param_1,param_2,__ptr,(ulong)uStack_90._2_2_,&local_94);
    if (-1 < iVar4) {
      iVar4 = FUN_0018f4fc(*(undefined8 *)(param_1 + 0x30),__ptr,iVar4,local_94,param_3);
    }
    free(__ptr);
  }
  goto LAB_00190460;
switchD_001904cc_caseD_77:
  puVar2 = (undefined2 *)((long)puVar9 + ((ulong)puVar9 & 1));
  if (local_94 == 0) {
    *puVar2 = *(undefined2 *)puVar6;
  }
  else {
    *puVar2 = *(undefined2 *)puVar6;
  }
  pcVar7 = pcVar7 + 1;
  puVar6 = (undefined8 *)((long)puVar6 + 2);
  puVar9 = (undefined8 *)(puVar2 + 1);
  goto LAB_001904b4;
}


==================================================================

### FUNC 001905b0 (244 bytes) name=usbi_get_config_index_by_value

void usbi_get_config_index_by_value(long param_1,char param_2,uint *param_3)

{
  long lVar1;
  undefined8 uVar2;
  uint uVar3;
  long lVar4;
  undefined1 auStack_54 [4];
  undefined1 auStack_50 [5];
  char local_4b;
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  usbi_log(0,4,"usbi_get_config_index_by_value","value %d",param_2);
  if (*(char *)(param_1 + 0x49) != '\0') {
    uVar3 = 0;
    lVar4 = *(long *)PTR_usbi_backend_00501a30;
    do {
      uVar2 = (**(code **)(lVar4 + 0x58))(param_1,uVar3,auStack_50,6,auStack_54);
      if ((int)uVar2 < 0) {
        uVar3 = 0xffffffff;
LAB_00190674:
        *param_3 = uVar3;
        goto LAB_00190678;
      }
      if (local_4b == param_2) {
        uVar2 = 0;
        goto LAB_00190674;
      }
      uVar3 = uVar3 + 1 & 0xff;
    } while (uVar3 < *(byte *)(param_1 + 0x49));
  }
  uVar2 = 0;
  *param_3 = 0xffffffff;
LAB_00190678:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar2);
}


==================================================================

### FUNC 001906a4 (316 bytes) name=libusb_get_config_descriptor_by_value

int libusb_get_config_descriptor_by_value(long param_1,uint param_2,undefined8 param_3)

{
  long lVar1;
  int iVar2;
  code *pcVar3;
  byte bVar4;
  long lVar5;
  undefined8 local_60;
  undefined1 auStack_54 [4];
  undefined4 local_50;
  byte local_4b;
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  lVar5 = *(long *)PTR_usbi_backend_00501a30;
  local_60 = 0;
  pcVar3 = *(code **)(lVar5 + 0x60);
  if (pcVar3 == (code *)0x0) {
    usbi_log(0,4,"usbi_get_config_index_by_value","value %d",param_2 & 0xff);
    if (*(char *)(param_1 + 0x49) != '\0') {
      bVar4 = 0;
      do {
        iVar2 = (**(code **)(lVar5 + 0x58))(param_1,bVar4,&local_50,6,auStack_54);
        if (iVar2 < 0) goto LAB_0019079c;
        if ((uint)local_4b == (param_2 & 0xff)) {
          iVar2 = libusb_get_config_descriptor(param_1,bVar4,param_3);
          goto LAB_0019079c;
        }
        bVar4 = bVar4 + 1;
      } while (bVar4 < *(byte *)(param_1 + 0x49));
    }
    iVar2 = -5;
  }
  else {
    iVar2 = (*pcVar3)(param_1,param_2,&local_60,&local_50);
    if (-1 < iVar2) {
      iVar2 = FUN_0018f4fc(*(undefined8 *)(param_1 + 0x30),local_60,iVar2,local_50,param_3);
    }
  }
LAB_0019079c:
  if (*(long *)(lVar1 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar2;
}


==================================================================

### FUNC 001907e0 (148 bytes) name=libusb_free_config_descriptor

void libusb_free_config_descriptor(void *param_1)

{
  void *__ptr;
  long lVar1;
  long lVar2;
  
  if (param_1 != (void *)0x0) {
    __ptr = *(void **)((long)param_1 + 0x10);
    if ((__ptr != (void *)0x0) && (*(char *)((long)param_1 + 4) != '\0')) {
      FUN_00191604();
      if (1 < *(byte *)((long)param_1 + 4)) {
        lVar1 = 1;
        lVar2 = 0x10;
        do {
          FUN_00191604(*(long *)((long)param_1 + 0x10) + lVar2);
          lVar1 = lVar1 + 1;
          lVar2 = lVar2 + 0x10;
        } while (lVar1 < (long)(ulong)*(byte *)((long)param_1 + 4));
      }
      __ptr = *(void **)((long)param_1 + 0x10);
    }
    free(__ptr);
    free(*(void **)((long)param_1 + 0x18));
    free(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 00190874 (436 bytes) name=libusb_get_ss_endpoint_companion_descriptor

void libusb_get_ss_endpoint_companion_descriptor
               (undefined8 param_1,long param_2,undefined8 *param_3)

{
  undefined4 *puVar1;
  undefined2 *puVar2;
  int iVar3;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  undefined8 uStack_40;
  long local_38;
  
  lVar4 = tpidr_el0;
  local_38 = *(long *)(lVar4 + 0x28);
  iVar3 = *(int *)(param_2 + 0x18);
  puVar11 = *(undefined8 **)(param_2 + 0x10);
  *param_3 = 0;
  if (iVar3 < 2) {
    uVar7 = 0xfffffffb;
  }
  else {
    puVar5 = &uStack_40;
    pcVar8 = "bb";
    puVar6 = puVar11;
LAB_001908d0:
    do {
      puVar9 = puVar5;
      puVar10 = puVar6;
      switch(*pcVar8) {
      case 'b':
        *(undefined1 *)puVar5 = *(undefined1 *)puVar6;
        puVar5 = (undefined8 *)((long)puVar5 + 1);
        pcVar8 = pcVar8 + 1;
        puVar6 = (undefined8 *)((long)puVar6 + 1);
        goto LAB_001908d0;
      case 'd':
        puVar1 = (undefined4 *)((long)puVar5 + ((ulong)puVar5 & 1));
        *puVar1 = *(undefined4 *)puVar6;
        puVar5 = (undefined8 *)(puVar1 + 1);
        pcVar8 = pcVar8 + 1;
        puVar6 = (undefined8 *)((long)puVar6 + 4);
        goto LAB_001908d0;
      case 'u':
        puVar10 = puVar6 + 2;
        uVar7 = *puVar6;
        puVar9 = puVar5 + 2;
        puVar5[1] = puVar6[1];
        *puVar5 = uVar7;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
switchD_001908e8_caseD_63:
        puVar5 = puVar9;
        pcVar8 = pcVar8 + 1;
        puVar6 = puVar10;
        goto LAB_001908d0;
      case 'w':
        puVar2 = (undefined2 *)((long)puVar5 + ((ulong)puVar5 & 1));
        *puVar2 = *(undefined2 *)puVar6;
        puVar5 = (undefined8 *)(puVar2 + 1);
        pcVar8 = pcVar8 + 1;
        puVar6 = (undefined8 *)((long)puVar6 + 2);
        goto LAB_001908d0;
      }
      if (*pcVar8 != '\0') goto switchD_001908e8_caseD_63;
      puVar5 = &uStack_40;
      pcVar8 = "bb";
      puVar6 = puVar11;
    } while (uStack_40._1_1_ != '0');
    puVar5 = malloc(6);
    *param_3 = puVar5;
    if (puVar5 != (undefined8 *)0x0) {
      pcVar8 = "bbbbw";
LAB_00190978:
      puVar6 = puVar5;
      puVar9 = puVar11;
      switch(*pcVar8) {
      case 'b':
        pcVar8 = pcVar8 + 1;
        *(undefined1 *)puVar5 = *(undefined1 *)puVar11;
        puVar5 = (undefined8 *)((long)puVar5 + 1);
        puVar11 = (undefined8 *)((long)puVar11 + 1);
        goto LAB_00190978;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
        break;
      case 'd':
        puVar1 = (undefined4 *)((long)puVar5 + ((ulong)puVar5 & 1));
        pcVar8 = pcVar8 + 1;
        *puVar1 = *(undefined4 *)puVar11;
        puVar5 = (undefined8 *)(puVar1 + 1);
        puVar11 = (undefined8 *)((long)puVar11 + 4);
        goto LAB_00190978;
      case 'u':
        puVar9 = puVar11 + 2;
        uVar7 = *puVar11;
        puVar6 = puVar5 + 2;
        puVar5[1] = puVar11[1];
        *puVar5 = uVar7;
        break;
      case 'w':
        goto switchD_00190990_caseD_77;
      default:
        if (*pcVar8 == '\0') goto code_r0x001909ec;
      }
      pcVar8 = pcVar8 + 1;
      puVar5 = puVar6;
      puVar11 = puVar9;
      goto LAB_00190978;
    }
    uVar7 = 0xfffffff5;
  }
LAB_00190a00:
  if (*(long *)(lVar4 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar7);
  }
  return;
code_r0x001909ec:
  uVar7 = 0;
  goto LAB_00190a00;
switchD_00190990_caseD_77:
  puVar2 = (undefined2 *)((long)puVar5 + ((ulong)puVar5 & 1));
  pcVar8 = pcVar8 + 1;
  *puVar2 = *(undefined2 *)puVar11;
  puVar5 = (undefined8 *)(puVar2 + 1);
  puVar11 = (undefined8 *)((long)puVar11 + 2);
  goto LAB_00190978;
}


==================================================================

### FUNC 00190a28 (4 bytes) name=libusb_free_ss_endpoint_companion_descriptor

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void libusb_free_ss_endpoint_companion_descriptor(void *__ptr)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 00190a2c (1648 bytes) name=libusb_get_bos_descriptor

uint libusb_get_bos_descriptor(long param_1,undefined8 *param_2)

{
  undefined4 *puVar1;
  undefined2 *puVar2;
  long lVar3;
  uint uVar4;
  byte *__ptr;
  byte *pbVar5;
  void *__dest;
  char *pcVar6;
  uint uVar7;
  uint uVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  byte *pbVar11;
  byte *pbVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  undefined8 uVar18;
  ulong __size;
  long lVar19;
  undefined8 uVar20;
  undefined8 local_88;
  undefined8 uStack_80;
  byte local_78;
  byte local_77;
  byte local_70;
  byte local_6f;
  byte local_6c;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  local_88._4_1_ = 0;
  local_88._0_4_ = 0;
  uVar4 = libusb_control_transfer(param_1,0x80,6,0xf00,0,&local_88,5,1000);
  if ((int)uVar4 < 0) {
    if (uVar4 != 0xfffffff7) {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"libusb_get_bos_descriptor",
               "failed to read BOS (%d)",uVar4);
    }
  }
  else {
    if (4 < (int)uVar4) {
      pcVar6 = "bbwb";
      puVar10 = &local_88;
      puVar14 = &uStack_80;
LAB_00190b28:
      puVar9 = puVar10;
      puVar13 = puVar14;
      switch(*pcVar6) {
      case 'b':
        pcVar6 = pcVar6 + 1;
        *(undefined1 *)puVar14 = *(undefined1 *)puVar10;
        puVar10 = (undefined8 *)((long)puVar10 + 1);
        puVar14 = (undefined8 *)((long)puVar14 + 1);
        goto LAB_00190b28;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
        break;
      case 'd':
        puVar1 = (undefined4 *)((long)puVar14 + ((ulong)puVar14 & 1));
        pcVar6 = pcVar6 + 1;
        *puVar1 = *(undefined4 *)puVar10;
        puVar10 = (undefined8 *)((long)puVar10 + 4);
        puVar14 = (undefined8 *)(puVar1 + 1);
        goto LAB_00190b28;
      case 'u':
        puVar9 = puVar10 + 2;
        uVar18 = *puVar10;
        puVar13 = puVar14 + 2;
        puVar14[1] = puVar10[1];
        *puVar14 = uVar18;
        break;
      case 'w':
        goto switchD_00190b40_caseD_77;
      default:
        if (*pcVar6 == '\0') goto code_r0x00190b90;
      }
      pcVar6 = pcVar6 + 1;
      puVar10 = puVar9;
      puVar14 = puVar13;
      goto LAB_00190b28;
    }
    usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"libusb_get_bos_descriptor",
             "short BOS read %d/%d",uVar4,5);
    uVar4 = 0xffffffff;
  }
  goto LAB_00190d58;
code_r0x00190b90:
  usbi_log(0,4,"libusb_get_bos_descriptor","found BOS descriptor: size %d bytes, %d capabilities",
           uStack_80._2_2_,uStack_80._4_1_);
  __ptr = calloc((ulong)uStack_80._2_2_,1);
  if (__ptr == (byte *)0x0) {
    uVar4 = 0xfffffff5;
    goto LAB_00190d58;
  }
  uVar4 = libusb_control_transfer(param_1,0x80,6,0xf00,0,__ptr,(ulong)uStack_80._2_2_,1000);
  uVar18 = *(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30);
  if (-1 < (int)uVar4) {
    if (4 < (int)uVar4) {
      pcVar6 = "bbwb";
      pbVar5 = &local_70;
      pbVar15 = __ptr;
LAB_00190c88:
      pbVar12 = pbVar5;
      pbVar17 = pbVar15;
      switch(*pcVar6) {
      case 'b':
        pcVar6 = pcVar6 + 1;
        *pbVar5 = *pbVar15;
        pbVar5 = pbVar5 + 1;
        pbVar15 = pbVar15 + 1;
        goto LAB_00190c88;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
        break;
      case 'd':
        pcVar6 = pcVar6 + 1;
        *(undefined4 *)(pbVar5 + ((ulong)pbVar5 & 1)) = *(undefined4 *)pbVar15;
        pbVar5 = pbVar5 + ((ulong)pbVar5 & 1) + 4;
        pbVar15 = pbVar15 + 4;
        goto LAB_00190c88;
      case 'u':
        pbVar17 = pbVar15 + 0x10;
        uVar20 = *(undefined8 *)pbVar15;
        pbVar12 = pbVar5 + 0x10;
        *(undefined8 *)(pbVar5 + 8) = *(undefined8 *)(pbVar15 + 8);
        *(undefined8 *)pbVar5 = uVar20;
        break;
      case 'w':
        goto switchD_00190ca0_caseD_77;
      default:
        if (*pcVar6 == '\0') goto code_r0x00190cf0;
      }
      pcVar6 = pcVar6 + 1;
      pbVar5 = pbVar12;
      pbVar15 = pbVar17;
      goto LAB_00190c88;
    }
    pcVar6 = "short bos descriptor read %d/%d";
    uVar8 = 5;
    uVar7 = uVar4;
    goto LAB_00190d48;
  }
  usbi_log(uVar18,1,"libusb_get_bos_descriptor","failed to read BOS (%d)",uVar4);
  goto LAB_00190d50;
code_r0x00190cf0:
  uVar7 = (uint)local_6f;
  if (local_6f == 0xf) {
    uVar8 = (uint)local_70;
    if (local_70 < 5) {
      usbi_log(uVar18,1,"parse_bos","invalid bos bLength (%d)",uVar8);
      goto LAB_00190d4c;
    }
    if ((int)uVar8 <= (int)uVar4) {
      pbVar5 = calloc(1,(ulong)local_6c * 8 + 8);
      if (pbVar5 != (byte *)0x0) {
        pcVar6 = "bbwb";
        pbVar15 = pbVar5;
        pbVar12 = __ptr;
LAB_00190e04:
        pbVar17 = pbVar15;
        pbVar11 = pbVar12;
        switch(*pcVar6) {
        case 'b':
          pcVar6 = pcVar6 + 1;
          *pbVar15 = *pbVar12;
          pbVar15 = pbVar15 + 1;
          pbVar12 = pbVar12 + 1;
          goto LAB_00190e04;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar6 = pcVar6 + 1;
          *(undefined4 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined4 *)pbVar12;
          pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 4;
          pbVar12 = pbVar12 + 4;
          goto LAB_00190e04;
        case 'u':
          pbVar11 = pbVar12 + 0x10;
          uVar20 = *(undefined8 *)pbVar12;
          pbVar17 = pbVar15 + 0x10;
          *(undefined8 *)(pbVar15 + 8) = *(undefined8 *)(pbVar12 + 8);
          *(undefined8 *)pbVar15 = uVar20;
          break;
        case 'w':
          goto switchD_00190e1c_caseD_77;
        default:
          if (*pcVar6 == '\0') goto code_r0x00190e6c;
        }
        pcVar6 = pcVar6 + 1;
        pbVar15 = pbVar17;
        pbVar12 = pbVar11;
        goto LAB_00190e04;
      }
      uVar4 = 0xfffffff5;
      goto LAB_00190d50;
    }
    pcVar6 = "short bos descriptor read %d/%d";
    uVar7 = uVar4;
  }
  else {
    pcVar6 = "unexpected descriptor %x (expected %x)";
    uVar8 = 0xf;
  }
LAB_00190d48:
  usbi_log(uVar18,1,"parse_bos",pcVar6,uVar7,uVar8);
LAB_00190d4c:
  uVar4 = 0xffffffff;
  goto LAB_00190d50;
code_r0x00190f2c:
  if (local_77 != 0x10) {
    pcVar6 = "unexpected descriptor %x (expected %x)";
    uVar7 = 0x10;
    uVar4 = (uint)local_77;
LAB_0019104c:
    usbi_log(uVar18,2,"parse_bos",pcVar6,uVar4,uVar7);
    goto LAB_00191050;
  }
  __size = (ulong)local_78;
  uVar7 = (uint)local_78;
  if (local_78 < 3) {
    usbi_log(uVar18,1,"parse_bos","invalid dev-cap bLength (%d)",uVar7);
    if (pbVar5[4] != 0) {
      lVar19 = 0;
      do {
        free(*(void **)(pbVar5 + (lVar19 + 1) * 8));
        lVar19 = lVar19 + 1;
      } while (lVar19 < (long)(ulong)pbVar5[4]);
    }
    free(pbVar5);
    goto LAB_00190d4c;
  }
  if ((int)uVar4 < (int)uVar7) {
    pcVar6 = "short dev-cap descriptor read %d/%d";
    goto LAB_0019104c;
  }
  __dest = malloc(__size);
  *(void **)(pbVar5 + (lVar19 + 1) * 8) = __dest;
  if (__dest != (void *)0x0) {
    memcpy(__dest,pbVar15,__size);
    lVar19 = lVar19 + 1;
    pbVar15 = pbVar15 + __size;
    uVar4 = uVar4 - uVar7;
    if ((long)(ulong)local_6c <= lVar19) goto LAB_00191050;
    goto LAB_00190e94;
  }
  if (pbVar5[4] != 0) {
    lVar19 = 0;
    do {
      free(*(void **)(pbVar5 + (lVar19 + 1) * 8));
      lVar19 = lVar19 + 1;
    } while (lVar19 < (long)(ulong)pbVar5[4]);
  }
  free(pbVar5);
  uVar4 = 0xfffffff5;
  goto LAB_00190d50;
switchD_00190edc_caseD_77:
  pcVar6 = pcVar6 + 1;
  *(undefined2 *)(pbVar12 + ((ulong)pbVar12 & 1)) = *(undefined2 *)pbVar17;
  pbVar12 = pbVar12 + ((ulong)pbVar12 & 1) + 2;
  pbVar17 = pbVar17 + 2;
  goto LAB_00190ec4;
switchD_00190e1c_caseD_77:
  pcVar6 = pcVar6 + 1;
  *(undefined2 *)(pbVar15 + ((ulong)pbVar15 & 1)) = *(undefined2 *)pbVar12;
  pbVar15 = pbVar15 + ((ulong)pbVar15 & 1) + 2;
  pbVar12 = pbVar12 + 2;
  goto LAB_00190e04;
switchD_00190ca0_caseD_77:
  pcVar6 = pcVar6 + 1;
  *(undefined2 *)(pbVar5 + ((ulong)pbVar5 & 1)) = *(undefined2 *)pbVar15;
  pbVar5 = pbVar5 + ((ulong)pbVar5 & 1) + 2;
  pbVar15 = pbVar15 + 2;
  goto LAB_00190c88;
switchD_00190b40_caseD_77:
  puVar2 = (undefined2 *)((long)puVar14 + ((ulong)puVar14 & 1));
  pcVar6 = pcVar6 + 1;
  *puVar2 = *(undefined2 *)puVar10;
  puVar10 = (undefined8 *)((long)puVar10 + 2);
  puVar14 = (undefined8 *)(puVar2 + 1);
  goto LAB_00190b28;
code_r0x00190e6c:
  if (local_6c != 0) {
    lVar19 = 0;
    pbVar15 = __ptr + local_70;
    uVar4 = uVar4 - local_70;
LAB_00190e94:
    if (2 < (int)uVar4) {
      pcVar6 = "bbb";
      pbVar12 = &local_78;
      pbVar17 = pbVar15;
LAB_00190ec4:
      pbVar11 = pbVar12;
      pbVar16 = pbVar17;
      switch(*pcVar6) {
      case 'b':
        pcVar6 = pcVar6 + 1;
        *pbVar12 = *pbVar17;
        pbVar12 = pbVar12 + 1;
        pbVar17 = pbVar17 + 1;
        goto LAB_00190ec4;
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'v':
        break;
      case 'd':
        pcVar6 = pcVar6 + 1;
        *(undefined4 *)(pbVar12 + ((ulong)pbVar12 & 1)) = *(undefined4 *)pbVar17;
        pbVar12 = pbVar12 + ((ulong)pbVar12 & 1) + 4;
        pbVar17 = pbVar17 + 4;
        goto LAB_00190ec4;
      case 'u':
        pbVar16 = pbVar17 + 0x10;
        uVar20 = *(undefined8 *)pbVar17;
        pbVar11 = pbVar12 + 0x10;
        *(undefined8 *)(pbVar12 + 8) = *(undefined8 *)(pbVar17 + 8);
        *(undefined8 *)pbVar12 = uVar20;
        break;
      case 'w':
        goto switchD_00190edc_caseD_77;
      default:
        if (*pcVar6 == '\0') goto code_r0x00190f2c;
      }
      pcVar6 = pcVar6 + 1;
      pbVar12 = pbVar11;
      pbVar17 = pbVar16;
      goto LAB_00190ec4;
    }
    pcVar6 = "short dev-cap descriptor read %d/%d";
    uVar7 = 3;
    goto LAB_0019104c;
  }
  lVar19 = 0;
LAB_00191050:
  uVar4 = 0;
  pbVar5[4] = (byte)lVar19;
  *param_2 = pbVar5;
LAB_00190d50:
  free(__ptr);
LAB_00190d58:
  if (*(long *)(lVar3 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar4;
}


==================================================================

### FUNC 0019109c (100 bytes) name=libusb_free_bos_descriptor

void libusb_free_bos_descriptor(void *param_1)

{
  long lVar1;
  
  if (param_1 != (void *)0x0) {
    if (*(char *)((long)param_1 + 4) != '\0') {
      lVar1 = 0;
      do {
        free(*(void **)((long)param_1 + lVar1 * 8 + 8));
        lVar1 = lVar1 + 1;
      } while (lVar1 < (long)(ulong)*(byte *)((long)param_1 + 4));
    }
    free(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 00191100 (304 bytes) name=libusb_get_usb_2_0_extension_descriptor

undefined4
libusb_get_usb_2_0_extension_descriptor(undefined8 param_1,byte *param_2,undefined8 *param_3)

{
  byte *pbVar1;
  undefined4 uVar2;
  char *pcVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  undefined8 uVar7;
  
  if (param_2[2] == 2) {
    if (*param_2 < 7) {
      usbi_log(param_1,1,"libusb_get_usb_2_0_extension_descriptor",
               "short dev-cap descriptor read %d/%d",*param_2,7);
      uVar2 = 0xffffffff;
    }
    else {
      pbVar1 = malloc(8);
      if (pbVar1 != (byte *)0x0) {
        pcVar3 = "bbbd";
        pbVar4 = pbVar1;
LAB_0019119c:
        pbVar5 = pbVar4;
        pbVar6 = param_2;
        switch(*pcVar3) {
        case 'b':
          pcVar3 = pcVar3 + 1;
          *pbVar4 = *param_2;
          pbVar4 = pbVar4 + 1;
          param_2 = param_2 + 1;
          goto LAB_0019119c;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar3 = pcVar3 + 1;
          *(undefined4 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined4 *)param_2;
          pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 4;
          param_2 = param_2 + 4;
          goto LAB_0019119c;
        case 'u':
          pbVar6 = param_2 + 0x10;
          uVar7 = *(undefined8 *)param_2;
          pbVar5 = pbVar4 + 0x10;
          *(undefined8 *)(pbVar4 + 8) = *(undefined8 *)(param_2 + 8);
          *(undefined8 *)pbVar4 = uVar7;
          break;
        case 'w':
          goto switchD_001911b4_caseD_77;
        default:
          if (*pcVar3 == '\0') {
            *param_3 = pbVar1;
            return 0;
          }
        }
        pcVar3 = pcVar3 + 1;
        pbVar4 = pbVar5;
        param_2 = pbVar6;
        goto LAB_0019119c;
      }
      uVar2 = 0xfffffff5;
    }
  }
  else {
    usbi_log(param_1,1,"libusb_get_usb_2_0_extension_descriptor",
             "unexpected bDevCapabilityType %x (expected %x)",param_2[2],2);
    uVar2 = 0xfffffffe;
  }
  return uVar2;
switchD_001911b4_caseD_77:
  pcVar3 = pcVar3 + 1;
  *(undefined2 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined2 *)param_2;
  pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 2;
  param_2 = param_2 + 2;
  goto LAB_0019119c;
}


==================================================================

### FUNC 00191230 (4 bytes) name=libusb_free_usb_2_0_extension_descriptor

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void libusb_free_usb_2_0_extension_descriptor(void *__ptr)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 00191234 (304 bytes) name=libusb_get_ss_usb_device_capability_descriptor

undefined4
libusb_get_ss_usb_device_capability_descriptor(undefined8 param_1,byte *param_2,undefined8 *param_3)

{
  byte *pbVar1;
  undefined4 uVar2;
  char *pcVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  undefined8 uVar7;
  
  if (param_2[2] == 3) {
    if (*param_2 < 10) {
      usbi_log(param_1,1,"libusb_get_ss_usb_device_capability_descriptor",
               "short dev-cap descriptor read %d/%d",*param_2,10);
      uVar2 = 0xffffffff;
    }
    else {
      pbVar1 = malloc(10);
      if (pbVar1 != (byte *)0x0) {
        pcVar3 = "bbbbwbbw";
        pbVar4 = pbVar1;
LAB_001912d0:
        pbVar5 = pbVar4;
        pbVar6 = param_2;
        switch(*pcVar3) {
        case 'b':
          pcVar3 = pcVar3 + 1;
          *pbVar4 = *param_2;
          pbVar4 = pbVar4 + 1;
          param_2 = param_2 + 1;
          goto LAB_001912d0;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar3 = pcVar3 + 1;
          *(undefined4 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined4 *)param_2;
          pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 4;
          param_2 = param_2 + 4;
          goto LAB_001912d0;
        case 'u':
          pbVar6 = param_2 + 0x10;
          uVar7 = *(undefined8 *)param_2;
          pbVar5 = pbVar4 + 0x10;
          *(undefined8 *)(pbVar4 + 8) = *(undefined8 *)(param_2 + 8);
          *(undefined8 *)pbVar4 = uVar7;
          break;
        case 'w':
          goto switchD_001912e8_caseD_77;
        default:
          if (*pcVar3 == '\0') {
            *param_3 = pbVar1;
            return 0;
          }
        }
        pcVar3 = pcVar3 + 1;
        pbVar4 = pbVar5;
        param_2 = pbVar6;
        goto LAB_001912d0;
      }
      uVar2 = 0xfffffff5;
    }
  }
  else {
    usbi_log(param_1,1,"libusb_get_ss_usb_device_capability_descriptor",
             "unexpected bDevCapabilityType %x (expected %x)",param_2[2],3);
    uVar2 = 0xfffffffe;
  }
  return uVar2;
switchD_001912e8_caseD_77:
  pcVar3 = pcVar3 + 1;
  *(undefined2 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined2 *)param_2;
  pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 2;
  param_2 = param_2 + 2;
  goto LAB_001912d0;
}


==================================================================

### FUNC 00191364 (4 bytes) name=libusb_free_ss_usb_device_capability_descriptor

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void libusb_free_ss_usb_device_capability_descriptor(void *__ptr)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 00191368 (304 bytes) name=libusb_get_container_id_descriptor

undefined4 libusb_get_container_id_descriptor(undefined8 param_1,byte *param_2,undefined8 *param_3)

{
  byte *pbVar1;
  undefined4 uVar2;
  char *pcVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  undefined8 uVar7;
  
  if (param_2[2] == 4) {
    if (*param_2 < 0x14) {
      usbi_log(param_1,1,"libusb_get_container_id_descriptor","short dev-cap descriptor read %d/%d",
               *param_2,0x14);
      uVar2 = 0xffffffff;
    }
    else {
      pbVar1 = malloc(0x14);
      if (pbVar1 != (byte *)0x0) {
        pcVar3 = "bbbbu";
        pbVar4 = pbVar1;
LAB_00191404:
        pbVar5 = pbVar4;
        pbVar6 = param_2;
        switch(*pcVar3) {
        case 'b':
          pcVar3 = pcVar3 + 1;
          *pbVar4 = *param_2;
          pbVar4 = pbVar4 + 1;
          param_2 = param_2 + 1;
          goto LAB_00191404;
        case 'c':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
          break;
        case 'd':
          pcVar3 = pcVar3 + 1;
          *(undefined4 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined4 *)param_2;
          pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 4;
          param_2 = param_2 + 4;
          goto LAB_00191404;
        case 'u':
          pbVar6 = param_2 + 0x10;
          uVar7 = *(undefined8 *)param_2;
          pbVar5 = pbVar4 + 0x10;
          *(undefined8 *)(pbVar4 + 8) = *(undefined8 *)(param_2 + 8);
          *(undefined8 *)pbVar4 = uVar7;
          break;
        case 'w':
          goto switchD_0019141c_caseD_77;
        default:
          if (*pcVar3 == '\0') {
            *param_3 = pbVar1;
            return 0;
          }
        }
        pcVar3 = pcVar3 + 1;
        pbVar4 = pbVar5;
        param_2 = pbVar6;
        goto LAB_00191404;
      }
      uVar2 = 0xfffffff5;
    }
  }
  else {
    usbi_log(param_1,1,"libusb_get_container_id_descriptor",
             "unexpected bDevCapabilityType %x (expected %x)",param_2[2],4);
    uVar2 = 0xfffffffe;
  }
  return uVar2;
switchD_0019141c_caseD_77:
  pcVar3 = pcVar3 + 1;
  *(undefined2 *)(pbVar4 + ((ulong)pbVar4 & 1)) = *(undefined2 *)param_2;
  pbVar4 = pbVar4 + ((ulong)pbVar4 & 1) + 2;
  param_2 = param_2 + 2;
  goto LAB_00191404;
}


==================================================================

### FUNC 00191498 (4 bytes) name=libusb_free_container_id_descriptor

/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void libusb_free_container_id_descriptor(void *__ptr)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 0019149c (360 bytes) name=libusb_get_string_descriptor_ascii

void libusb_get_string_descriptor_ascii(undefined8 param_1,byte param_2,long param_3,int param_4)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  char cVar6;
  byte local_148;
  char local_147;
  undefined2 local_146;
  long local_48;
  
  lVar2 = tpidr_el0;
  local_48 = *(long *)(lVar2 + 0x28);
  if (param_2 == 0) {
    lVar3 = 0xfffffffe;
  }
  else {
    lVar3 = libusb_control_transfer(param_1,0x80,6,0x300,0,&local_148,0xff,1000);
    if (-1 < (int)lVar3) {
      if (3 < (int)lVar3) {
        lVar3 = libusb_control_transfer
                          (param_1,0x80,6,param_2 | 0x300,local_146,&local_148,0xff,1000);
        if ((int)lVar3 < 0) goto LAB_00191560;
        if ((local_147 == '\x03') && ((int)(uint)local_148 <= (int)lVar3)) {
          lVar3 = 0;
          if ((1 < param_4) && (2 < local_148)) {
            lVar4 = 0;
            lVar5 = 0;
            do {
              cVar6 = *(char *)((long)&local_146 + lVar4);
              if (cVar6 < '\0') {
                cVar6 = '?';
              }
              else if (*(char *)((long)&local_146 + lVar4 + 1) != '\0') {
                cVar6 = '?';
              }
              lVar3 = lVar5 + 1;
              *(char *)(param_3 + lVar5) = cVar6;
            } while ((lVar3 < param_4 + -1) &&
                    (lVar1 = lVar4 + 4, lVar4 = lVar4 + 2, lVar5 = lVar3,
                    lVar1 < (long)(ulong)local_148));
          }
          *(undefined1 *)(param_3 + (int)lVar3) = 0;
          goto LAB_00191560;
        }
      }
      lVar3 = 0xffffffff;
    }
  }
LAB_00191560:
  if (*(long *)(lVar2 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(lVar3);
  }
  return;
}


==================================================================

### FUNC 00191604 (224 bytes) name=FUN_00191604

void FUN_00191604(long *param_1)

{
  void *__ptr;
  void *__ptr_00;
  byte *pbVar1;
  long lVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  
  __ptr_00 = (void *)*param_1;
  if ((__ptr_00 != (void *)0x0) && (0 < (int)param_1[1])) {
    lVar2 = 0;
    while( true ) {
      free(*(void **)((long)__ptr_00 + lVar2 * 0x28 + 0x18));
      plVar3 = (long *)((long)__ptr_00 + lVar2 * 0x28 + 0x10);
      __ptr = (void *)*plVar3;
      if ((__ptr != (void *)0x0) &&
         (pbVar1 = (byte *)((long)__ptr_00 + lVar2 * 0x28 + 4), *pbVar1 != 0)) {
        free(*(void **)((long)__ptr + 0x10));
        if (1 < *pbVar1) {
          lVar4 = 0x30;
          lVar5 = 1;
          do {
            free(*(void **)(*plVar3 + lVar4));
            lVar5 = lVar5 + 1;
            lVar4 = lVar4 + 0x20;
          } while (lVar5 < (long)(ulong)*pbVar1);
        }
        __ptr = (void *)*plVar3;
      }
      free(__ptr);
      lVar2 = lVar2 + 1;
      if ((int)param_1[1] <= lVar2) break;
      __ptr_00 = (void *)*param_1;
    }
    __ptr_00 = (void *)*param_1;
  }
  free(__ptr_00);
  *param_1 = 0;
  return;
}


==================================================================

### FUNC 001916e4 (332 bytes) name=usbi_hotplug_match

int usbi_hotplug_match(long param_1,long param_2,uint param_3)

{
  pthread_mutex_t *__mutex;
  long *plVar1;
  int iVar2;
  long *plVar3;
  long *plVar4;
  
  __mutex = (pthread_mutex_t *)(param_1 + 0x90);
  pthread_mutex_lock(__mutex);
  plVar4 = *(long **)(param_1 + 0x88);
  plVar3 = (long *)plVar4[1];
  iVar2 = pthread_mutex_unlock(__mutex);
  do {
    plVar1 = plVar3;
    if (plVar4 == (long *)(param_1 + 0x80)) {
      return iVar2;
    }
    if ((int)plVar4[-1] == 0) {
      if (((((*(uint *)(plVar4 + -5) & param_3) == 0) ||
           ((*(uint *)(plVar4 + -7) != 0xffffffff &&
            (*(uint *)(plVar4 + -7) != (uint)*(ushort *)(param_2 + 0x70))))) ||
          ((*(uint *)((long)plVar4 + -0x34) != 0xffffffff &&
           (*(uint *)((long)plVar4 + -0x34) != (uint)*(ushort *)(param_2 + 0x72))))) ||
         ((*(uint *)(plVar4 + -6) != 0xffffffff &&
          (*(uint *)(plVar4 + -6) != (uint)*(byte *)(param_2 + 0x6c))))) {
        pthread_mutex_lock(__mutex);
      }
      else {
        iVar2 = (*(code *)plVar4[-4])(param_1,param_2,param_3,plVar4[-2]);
        pthread_mutex_lock(__mutex);
        if (iVar2 != 0) goto LAB_0019174c;
      }
    }
    else {
      pthread_mutex_lock(__mutex);
LAB_0019174c:
      plVar3 = (long *)plVar4[1];
      *plVar3 = *plVar4;
      *(long **)(*plVar4 + 8) = plVar3;
      *plVar4 = 0;
      plVar4[1] = 0;
      free(plVar4 + -8);
    }
    plVar3 = (long *)plVar1[1];
    iVar2 = pthread_mutex_unlock(__mutex);
    plVar4 = plVar1;
  } while( true );
}


==================================================================

### FUNC 00191830 (264 bytes) name=usbi_hotplug_notification

ulong usbi_hotplug_notification(long param_1,undefined8 param_2,undefined4 param_3)

{
  long *plVar1;
  uint uVar2;
  undefined4 *puVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  
  puVar3 = calloc(1,0x20);
  if (puVar3 != (undefined4 *)0x0) {
    *(undefined8 *)(puVar3 + 2) = param_2;
    *puVar3 = param_3;
    pthread_mutex_lock((pthread_mutex_t *)(param_1 + 400));
    if ((*(int *)(param_1 + 0x1b8) == 0) && (*(int *)(param_1 + 0x1bc) == 0)) {
      plVar1 = (long *)(param_1 + 0x1e0);
      if (*(long **)(param_1 + 0x1e8) == plVar1) {
        lVar6 = *(long *)(param_1 + 0x1f8);
        *(long **)(puVar3 + 6) = plVar1;
        lVar5 = *(long *)(param_1 + 0x1e0);
        *(long *)(puVar3 + 4) = lVar5;
        *(undefined4 **)(lVar5 + 8) = puVar3 + 4;
        *(undefined4 **)(param_1 + 0x1e0) = puVar3 + 4;
        if (lVar6 == param_1 + 0x1f0) {
          usbi_signal_event(param_1);
        }
      }
      else {
        lVar5 = *plVar1;
        *(long *)(puVar3 + 4) = lVar5;
        *(long **)(puVar3 + 6) = plVar1;
        *(undefined4 **)(lVar5 + 8) = puVar3 + 4;
        *plVar1 = (long)(puVar3 + 4);
      }
    }
    else {
      *(long *)(puVar3 + 6) = param_1 + 0x1e0;
      lVar5 = *(long *)(param_1 + 0x1e0);
      *(long *)(puVar3 + 4) = lVar5;
      *(undefined4 **)(lVar5 + 8) = puVar3 + 4;
      *(undefined4 **)(param_1 + 0x1e0) = puVar3 + 4;
    }
    uVar2 = pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 400));
    return (ulong)uVar2;
  }
  uVar4 = usbi_log(param_1,1,"usbi_hotplug_notification","error allocating hotplug message");
  return uVar4;
}


==================================================================

### FUNC 00191938 (672 bytes) name=libusb_hotplug_register_callback

int libusb_hotplug_register_callback
              (long param_1,undefined4 param_2,uint param_3,uint param_4,uint param_5,uint param_6,
              long param_7,long param_8,undefined4 *param_9)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  long lVar2;
  uint uVar3;
  int iVar4;
  ulong uVar5;
  long *plVar6;
  long lVar7;
  long lVar8;
  long *plVar9;
  long lVar10;
  long local_70;
  long local_68;
  
  lVar2 = tpidr_el0;
  local_68 = *(long *)(lVar2 + 0x28);
  uVar5 = libusb_has_capability(1);
  if ((int)uVar5 == 0) {
    iVar4 = -0xc;
    goto LAB_001919bc;
  }
  if (((param_4 == 0xffffffff) || (param_4 >> 0x10 == 0)) &&
     ((param_5 == 0xffffffff || (param_5 >> 0x10 == 0)))) {
    if (param_6 == 0xffffffff) {
      if (param_7 == 0) goto LAB_001919b0;
    }
    else {
      iVar4 = -2;
      if ((0xff < param_6) || (param_7 == 0)) goto LAB_001919bc;
    }
    lVar1 = *(long *)PTR_usbi_default_context_00501e08;
    if (param_1 != 0) {
      lVar1 = param_1;
    }
    plVar6 = calloc(1,0x50);
    if (plVar6 == (long *)0x0) {
      iVar4 = -0xb;
      uVar5 = 0;
    }
    else {
      plVar6[6] = param_8;
      __mutex = (pthread_mutex_t *)(lVar1 + 0x90);
      *plVar6 = lVar1;
      *(uint *)(plVar6 + 1) = param_4;
      *(uint *)((long)plVar6 + 0xc) = param_5;
      *(uint *)(plVar6 + 2) = param_6;
      *(uint *)((long)plVar6 + 0x14) = param_3;
      *(undefined4 *)(plVar6 + 3) = param_2;
      plVar6[4] = param_7;
      pthread_mutex_lock(__mutex);
      *(int *)(plVar6 + 5) = DAT_005028f8;
      lVar8 = *(long *)(lVar1 + 0x88);
      plVar9 = plVar6 + 8;
      DAT_005028f8 = DAT_005028f8 + 1;
      *plVar9 = lVar1 + 0x80;
      plVar6[9] = lVar8;
      **(undefined8 **)(lVar1 + 0x88) = plVar9;
      *(long **)(lVar1 + 0x88) = plVar9;
      uVar3 = pthread_mutex_unlock(__mutex);
      uVar5 = (ulong)uVar3;
      if ((param_3 & 1) != 0) {
        iVar4 = libusb_get_device_list(lVar1,&local_70);
        if (iVar4 < 0) {
          lVar8 = plVar6[5];
          uVar5 = libusb_has_capability(1);
          if ((int)uVar5 != 0) {
            pthread_mutex_lock(__mutex);
            for (lVar10 = *(long *)(lVar1 + 0x88); lVar10 != lVar1 + 0x80;
                lVar10 = *(long *)(lVar10 + 8)) {
              if (*(int *)(lVar10 + -0x18) == (int)lVar8) {
                *(undefined4 *)(lVar10 + -8) = 1;
              }
            }
            pthread_mutex_unlock(__mutex);
            uVar5 = usbi_hotplug_notification(lVar1,0,0);
          }
          goto LAB_001919bc;
        }
        lVar8 = local_70;
        if (iVar4 != 0) {
          lVar10 = 0;
          do {
            if (((int)plVar6[7] == 0) && ((*(byte *)(plVar6 + 3) & 1) != 0)) {
              lVar7 = *(long *)(lVar8 + lVar10 * 8);
              if ((((*(uint *)(plVar6 + 1) == 0xffffffff) ||
                   (*(uint *)(plVar6 + 1) == (uint)*(ushort *)(lVar7 + 0x70))) &&
                  ((*(uint *)((long)plVar6 + 0xc) == 0xffffffff ||
                   (*(uint *)((long)plVar6 + 0xc) == (uint)*(ushort *)(lVar7 + 0x72))))) &&
                 ((*(uint *)(plVar6 + 2) == 0xffffffff ||
                  (*(uint *)(plVar6 + 2) == (uint)*(byte *)(lVar7 + 0x6c))))) {
                (*(code *)plVar6[4])(lVar1,lVar7,1,plVar6[6]);
                lVar8 = local_70;
              }
            }
            lVar10 = lVar10 + 1;
          } while (lVar10 < iVar4);
        }
        uVar5 = libusb_free_device_list(lVar8,1);
      }
      iVar4 = 0;
      if (param_9 != (undefined4 *)0x0) {
        *param_9 = (int)plVar6[5];
      }
    }
  }
  else {
LAB_001919b0:
    iVar4 = -2;
  }
LAB_001919bc:
  if (*(long *)(lVar2 + 0x28) == local_68) {
    return iVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00191bd8 (176 bytes) name=libusb_hotplug_deregister_callback

void libusb_hotplug_deregister_callback(long param_1,int param_2)

{
  long lVar1;
  int iVar2;
  long lVar3;
  
  iVar2 = libusb_has_capability(1);
  if (iVar2 != 0) {
    lVar1 = *(long *)PTR_usbi_default_context_00501e08;
    if (param_1 != 0) {
      lVar1 = param_1;
    }
    pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x90));
    for (lVar3 = *(long *)(lVar1 + 0x88); lVar3 != lVar1 + 0x80; lVar3 = *(long *)(lVar3 + 8)) {
      if (*(int *)(lVar3 + -0x18) == param_2) {
        *(undefined4 *)(lVar3 + -8) = 1;
      }
    }
    pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x90));
    usbi_hotplug_notification(lVar1,0,0);
    return;
  }
  return;
}


==================================================================

### FUNC 00191c88 (124 bytes) name=usbi_hotplug_deregister_all

int usbi_hotplug_deregister_all(long param_1)

{
  long *plVar1;
  int iVar2;
  long *plVar3;
  
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x90));
  plVar1 = *(long **)(param_1 + 0x88);
  while (plVar1 != (long *)(param_1 + 0x80)) {
    plVar3 = (long *)plVar1[1];
    *plVar3 = *plVar1;
    *(long **)(*plVar1 + 8) = plVar3;
    *plVar1 = 0;
    plVar1[1] = 0;
    free(plVar1 + -8);
    plVar1 = plVar3;
  }
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x90));
  return iVar2;
}


==================================================================

### FUNC 00191d04 (300 bytes) name=usbi_io_init

int usbi_io_init(long param_1)

{
  int iVar1;
  
  pthread_mutex_init((pthread_mutex_t *)(param_1 + 200),(pthread_mutexattr_t *)0x0);
  pthread_mutex_init((pthread_mutex_t *)(param_1 + 0x108),(pthread_mutexattr_t *)0x0);
  pthread_mutex_init((pthread_mutex_t *)(param_1 + 0x138),(pthread_mutexattr_t *)0x0);
  pthread_cond_init((pthread_cond_t *)(param_1 + 0x160),(pthread_condattr_t *)0x0);
  pthread_mutex_init((pthread_mutex_t *)(param_1 + 400),(pthread_mutexattr_t *)0x0);
  pthread_key_create((pthread_key_t *)(param_1 + 0x134),(__destr_function *)0x0);
  *(long *)(param_1 + 0xb8) = param_1 + 0xb8;
  *(long *)(param_1 + 0xc0) = param_1 + 0xb8;
  *(long *)(param_1 + 0x1c0) = param_1 + 0x1c0;
  *(long *)(param_1 + 0x1c8) = param_1 + 0x1c0;
  *(long *)(param_1 + 0x1e0) = param_1 + 0x1e0;
  *(long *)(param_1 + 0x1e8) = param_1 + 0x1e0;
  *(long *)(param_1 + 0x1f0) = param_1 + 0x1f0;
  *(long *)(param_1 + 0x1f8) = param_1 + 0x1f0;
  iVar1 = usbi_pipe(param_1 + 8);
  if (iVar1 < 0) {
    iVar1 = -99;
  }
  else {
    iVar1 = usbi_add_pollfd(param_1,*(undefined4 *)(param_1 + 8),1);
    if (-1 < iVar1) {
      return 0;
    }
    close(*(int *)(param_1 + 8));
    close(*(int *)(param_1 + 0xc));
  }
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 200));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 0x108));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 0x138));
  pthread_cond_destroy((pthread_cond_t *)(param_1 + 0x160));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 400));
  pthread_key_delete(*(pthread_key_t *)(param_1 + 0x134));
  return iVar1;
}


==================================================================

### FUNC 00191e30 (292 bytes) name=usbi_add_pollfd

undefined8 usbi_add_pollfd(long param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 *puVar1;
  uint uVar2;
  long lVar3;
  
  puVar1 = malloc(0x18);
  if (puVar1 == (undefined4 *)0x0) {
    return 0xfffffff5;
  }
  usbi_log(0,4,"usbi_add_pollfd","add fd %d events %d",param_2,(int)(short)param_3);
  *puVar1 = param_2;
  *(short *)(puVar1 + 1) = (short)param_3;
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 400));
  *(long *)(puVar1 + 4) = param_1 + 0x1c0;
  lVar3 = *(long *)(param_1 + 0x1c0);
  *(long *)(puVar1 + 2) = lVar3;
  *(undefined4 **)(lVar3 + 8) = puVar1 + 2;
  *(undefined4 **)(param_1 + 0x1c0) = puVar1 + 2;
  *(int *)(param_1 + 0x1d8) = *(int *)(param_1 + 0x1d8) + 1;
  if (*(uint *)(param_1 + 0x1b8) == 0) {
    if ((*(int *)(param_1 + 0x1bc) == 0) && (*(long *)(param_1 + 0x1e8) == param_1 + 0x1e0)) {
      *(undefined4 *)(param_1 + 0x1b8) = 1;
      if (*(long *)(param_1 + 0x1f8) == param_1 + 0x1f0) {
        usbi_signal_event(param_1);
      }
      goto LAB_00191ef8;
    }
    uVar2 = 1;
  }
  else {
    uVar2 = *(uint *)(param_1 + 0x1b8) | 1;
  }
  *(uint *)(param_1 + 0x1b8) = uVar2;
LAB_00191ef8:
  pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 400));
  if (*(code **)(param_1 + 0xf0) != (code *)0x0) {
    (**(code **)(param_1 + 0xf0))(param_2,param_3,*(undefined8 *)(param_1 + 0x100));
  }
  return 0;
}


==================================================================

### FUNC 00191f54 (120 bytes) name=usbi_io_exit

void usbi_io_exit(long param_1)

{
  usbi_remove_pollfd(param_1,*(undefined4 *)(param_1 + 8));
  close(*(int *)(param_1 + 8));
  close(*(int *)(param_1 + 0xc));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 200));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 0x108));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 0x138));
  pthread_cond_destroy((pthread_cond_t *)(param_1 + 0x160));
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 400));
  pthread_key_delete(*(pthread_key_t *)(param_1 + 0x134));
  if (*(void **)(param_1 + 0x1d0) != (void *)0x0) {
    free(*(void **)(param_1 + 0x1d0));
    return;
  }
  return;
}


==================================================================

### FUNC 00191fcc (352 bytes) name=usbi_remove_pollfd

ulong usbi_remove_pollfd(long param_1,int param_2)

{
  pthread_mutex_t *__mutex;
  uint uVar1;
  ulong extraout_x0;
  ulong uVar2;
  long *plVar3;
  long *plVar4;
  
  usbi_log(0,4,"usbi_remove_pollfd","remove fd %d",param_2);
  __mutex = (pthread_mutex_t *)(param_1 + 400);
  pthread_mutex_lock(__mutex);
  plVar3 = *(long **)(param_1 + 0x1c8);
  while( true ) {
    if (plVar3 == (long *)(param_1 + 0x1c0)) {
      usbi_log(0,4,"usbi_remove_pollfd","couldn\'t find fd %d to remove",param_2);
      uVar1 = pthread_mutex_unlock(__mutex);
      return (ulong)uVar1;
    }
    if ((int)plVar3[-1] == param_2) break;
    plVar3 = (long *)plVar3[1];
  }
  plVar4 = (long *)plVar3[1];
  *plVar4 = *plVar3;
  *(long **)(*plVar3 + 8) = plVar4;
  *plVar3 = 0;
  plVar3[1] = 0;
  *(int *)(param_1 + 0x1d8) = *(int *)(param_1 + 0x1d8) + -1;
  if (*(uint *)(param_1 + 0x1b8) == 0) {
    if ((*(int *)(param_1 + 0x1bc) == 0) && (*(long *)(param_1 + 0x1e8) == param_1 + 0x1e0)) {
      *(undefined4 *)(param_1 + 0x1b8) = 1;
      if (*(long *)(param_1 + 0x1f8) == param_1 + 0x1f0) {
        usbi_signal_event(param_1);
      }
      goto LAB_001920c8;
    }
    uVar1 = 1;
  }
  else {
    uVar1 = *(uint *)(param_1 + 0x1b8) | 1;
  }
  *(uint *)(param_1 + 0x1b8) = uVar1;
LAB_001920c8:
  pthread_mutex_unlock(__mutex);
  free(plVar3 + -1);
  if (*(code **)(param_1 + 0xf8) != (code *)0x0) {
                    /* WARNING: Could not recover jumptable at 0x001920f4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar2 = (**(code **)(param_1 + 0xf8))(param_2,*(undefined8 *)(param_1 + 0x100));
    return uVar2;
  }
  return extraout_x0;
}


==================================================================

### FUNC 0019212c (136 bytes) name=libusb_alloc_transfer

int * libusb_alloc_transfer(int param_1)

{
  int *piVar1;
  int *piVar2;
  
  piVar1 = calloc(1,*(long *)(*(long *)PTR_usbi_backend_00501a30 + 0x120) + (long)param_1 * 0xc +
                    0xb0);
  if (piVar1 == (int *)0x0) {
    piVar2 = (int *)0x0;
  }
  else {
    piVar2 = piVar1 + 0x1c;
    *piVar1 = param_1;
    pthread_mutex_init((pthread_mutex_t *)(piVar1 + 0x11),(pthread_mutexattr_t *)0x0);
    usbi_log(0,4,"libusb_alloc_transfer","transfer %p",piVar2);
  }
  return piVar2;
}


==================================================================

### FUNC 001921b4 (112 bytes) name=libusb_free_transfer

void libusb_free_transfer(long param_1)

{
  if (param_1 != 0) {
    usbi_log(0,4,"libusb_free_transfer","transfer %p",param_1);
    if (((*(byte *)(param_1 + 8) >> 1 & 1) != 0) && (*(void **)(param_1 + 0x30) != (void *)0x0)) {
      free(*(void **)(param_1 + 0x30));
    }
    pthread_mutex_destroy((pthread_mutex_t *)(param_1 + -0x2c));
    free((void *)(param_1 + -0x70));
    return;
  }
  return;
}


==================================================================

### FUNC 00192224 (824 bytes) name=libusb_submit_transfer

int libusb_submit_transfer(long *param_1)

{
  pthread_mutex_t *__mutex;
  long *plVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  undefined4 *puVar6;
  ulong uVar7;
  long *plVar8;
  long *plVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  long lVar13;
  pthread_mutex_t *__mutex_00;
  undefined8 uVar14;
  long local_68;
  ulong uStack_60;
  long local_58;
  
  lVar3 = tpidr_el0;
  local_58 = *(long *)(lVar3 + 0x28);
  lVar13 = *(long *)(*(long *)(*param_1 + 0x40) + 0x30);
  usbi_log(0,4,"libusb_submit_transfer","transfer %p",param_1);
  __mutex = (pthread_mutex_t *)(lVar13 + 200);
  pthread_mutex_lock(__mutex);
  __mutex_00 = (pthread_mutex_t *)((long)param_1 + -0x2c);
  pthread_mutex_lock(__mutex_00);
  if ((*(byte *)(param_1 + -6) & 1) != 0) {
    pthread_mutex_unlock(__mutex);
    iVar5 = pthread_mutex_unlock(__mutex_00);
    iVar4 = -6;
    goto LAB_00192528;
  }
  *(undefined4 *)(param_1 + -7) = 0;
  *(undefined2 *)(param_1 + -6) = 0;
  uVar2 = *(uint *)((long)param_1 + 0xc);
  lVar13 = *(long *)(*(long *)(*param_1 + 0x40) + 0x30);
  if (uVar2 == 0) {
LAB_00192388:
    plVar8 = *(long **)(lVar13 + 0xc0);
    plVar1 = (long *)(lVar13 + 0xb8);
    if (plVar8 == plVar1) {
      plVar9 = param_1 + -0xd;
      *plVar9 = (long)plVar1;
      param_1[-0xc] = (long)plVar8;
      **(undefined8 **)(lVar13 + 0xc0) = plVar9;
      *(long **)(lVar13 + 0xc0) = plVar9;
    }
    else {
      lVar13 = param_1[-9];
      if ((lVar13 != 0) || (param_1[-8] != 0)) {
        for (; plVar8 != plVar1; plVar8 = (long *)plVar8[1]) {
          lVar11 = plVar8[4];
          if (lVar11 == 0) {
            if ((-1 < lVar13) && (plVar8[5] != 0)) goto LAB_001923c4;
LAB_001923fc:
            param_1[-0xc] = (long)plVar8;
            param_1[-0xd] = *plVar8;
            *(long **)(*plVar8 + 8) = param_1 + -0xd;
            *plVar8 = (long)(param_1 + -0xd);
            goto LAB_0019246c;
          }
          if (lVar13 < lVar11) goto LAB_001923fc;
LAB_001923c4:
          if ((lVar11 == lVar13) && (param_1[-8] < plVar8[5])) goto LAB_001923fc;
        }
      }
      param_1[-0xc] = (long)plVar1;
      param_1[-0xd] = *plVar1;
      *(long **)(*plVar1 + 8) = param_1 + -0xd;
      *plVar1 = (long)(param_1 + -0xd);
    }
LAB_0019246c:
    pthread_mutex_unlock(__mutex);
    iVar4 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0xe0))(param_1 + -0xe);
    if (iVar4 == 0) {
      *(byte *)(param_1 + -6) = *(byte *)(param_1 + -6) | 1;
      libusb_ref_device(*(undefined8 *)(*param_1 + 0x40));
    }
    else {
      pthread_mutex_unlock(__mutex_00);
      __mutex_00 = (pthread_mutex_t *)(*(long *)(*(long *)(*param_1 + 0x40) + 0x30) + 200);
      pthread_mutex_lock(__mutex_00);
      plVar1 = (long *)param_1[-0xc];
      *plVar1 = param_1[-0xd];
      *(long **)(param_1[-0xd] + 8) = plVar1;
      param_1[-0xd] = 0;
      param_1[-0xc] = 0;
    }
  }
  else {
    iVar4 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0x108))(0,&local_68);
    if (-1 < iVar4) {
      local_68 = local_68 + (ulong)uVar2 / 1000;
      uVar10 = (ulong)((uVar2 % 1000) * 1000000);
      uVar7 = uStack_60 + uVar10;
      if (999999999 < (long)uVar7) {
        uVar12 = 0xffffffff88ca6c00;
        if (-2000000000 < (long)~uVar7) {
          uVar12 = ~uVar7;
        }
        uVar10 = (uVar10 + 1000000000 + uStack_60 + uVar12) / 1000000000;
        uVar7 = (uVar7 + uVar10 * -1000000000) - 1000000000;
        local_68 = local_68 + uVar10 + 1;
      }
      param_1[-9] = local_68;
      param_1[-8] = (long)uVar7 / 1000;
      uStack_60 = uVar7;
      goto LAB_00192388;
    }
    uVar14 = *(undefined8 *)(*(long *)(*param_1 + 0x40) + 0x30);
    puVar6 = (undefined4 *)__errno();
    usbi_log(uVar14,1,"calculate_timeout","failed to read monotonic clock, errno=%d",*puVar6);
    pthread_mutex_unlock(__mutex);
  }
  iVar5 = pthread_mutex_unlock(__mutex_00);
LAB_00192528:
  if (*(long *)(lVar3 + 0x28) == local_58) {
    return iVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar5);
}


==================================================================

### FUNC 0019255c (264 bytes) name=libusb_cancel_transfer

int libusb_cancel_transfer(long *param_1)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  
  usbi_log(0,4,"libusb_cancel_transfer","transfer %p",param_1);
  pthread_mutex_lock((pthread_mutex_t *)((long)param_1 + -0x2c));
  if ((*(byte *)(param_1 + -6) & 3) == 1) {
    iVar1 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0xe8))(param_1 + -0xe);
    if (iVar1 < 0) {
      if (iVar1 + 5U < 2) {
        uVar3 = 4;
        uVar2 = 0;
      }
      else {
        uVar3 = 1;
        uVar2 = *(undefined8 *)(*(long *)(*param_1 + 0x40) + 0x30);
      }
      usbi_log(uVar2,uVar3,"libusb_cancel_transfer","cancel transfer failed error %d",iVar1);
      if (iVar1 == -4) {
        *(byte *)(param_1 + -6) = *(byte *)(param_1 + -6) | 4;
      }
    }
    *(byte *)(param_1 + -6) = *(byte *)(param_1 + -6) | 2;
  }
  else {
    iVar1 = -5;
  }
  pthread_mutex_unlock((pthread_mutex_t *)((long)param_1 + -0x2c));
  return iVar1;
}


==================================================================

### FUNC 00192664 (8 bytes) name=libusb_transfer_set_stream_id

void libusb_transfer_set_stream_id(long param_1,undefined4 param_2)

{
  *(undefined4 *)(param_1 + -0x34) = param_2;
  return;
}


==================================================================

### FUNC 0019266c (8 bytes) name=libusb_transfer_get_stream_id

undefined4 libusb_transfer_get_stream_id(long param_1)

{
  return *(undefined4 *)(param_1 + -0x34);
}


==================================================================

### FUNC 00192674 (372 bytes) name=usbi_handle_transfer_completion

undefined8 usbi_handle_transfer_completion(void *param_1,int param_2)

{
  pthread_mutex_t *__mutex;
  int iVar1;
  undefined8 *puVar2;
  byte bVar3;
  long *plVar4;
  long lVar5;
  
  plVar4 = (long *)((long)param_1 + 0x70);
  lVar5 = *plVar4;
  __mutex = (pthread_mutex_t *)(*(long *)(*(long *)(lVar5 + 0x40) + 0x30) + 200);
  pthread_mutex_lock(__mutex);
  puVar2 = *(undefined8 **)((long)param_1 + 0x10);
  *puVar2 = *(undefined8 *)((long)param_1 + 8);
  *(undefined8 **)(*(long *)((long)param_1 + 8) + 8) = puVar2;
  *(undefined8 *)((long)param_1 + 8) = 0;
  *(undefined8 *)((long)param_1 + 0x10) = 0;
  pthread_mutex_unlock(__mutex);
  pthread_mutex_lock((pthread_mutex_t *)((long)param_1 + 0x44));
  *(byte *)((long)param_1 + 0x40) = *(byte *)((long)param_1 + 0x40) & 0xfe;
  pthread_mutex_unlock((pthread_mutex_t *)((long)param_1 + 0x44));
  if (param_2 == 0) {
    if ((*(byte *)((long)param_1 + 0x78) & 1) != 0) {
      iVar1 = *(int *)((long)param_1 + 0x84) + -8;
      if (*(char *)((long)param_1 + 0x7a) != '\0') {
        iVar1 = *(int *)((long)param_1 + 0x84);
      }
      if (iVar1 != *(int *)((long)param_1 + 0x38)) {
        usbi_log(0,4,"usbi_handle_transfer_completion","interpreting short transfer as error");
        param_2 = 1;
        goto LAB_0019273c;
      }
    }
    param_2 = 0;
  }
LAB_0019273c:
  bVar3 = *(byte *)((long)param_1 + 0x78);
  *(int *)((long)param_1 + 0x80) = param_2;
  *(undefined4 *)((long)param_1 + 0x88) = *(undefined4 *)((long)param_1 + 0x38);
  usbi_log(0,4,"usbi_handle_transfer_completion","transfer %p has callback %p",plVar4,
           *(undefined8 *)((long)param_1 + 0x90));
  if (*(code **)((long)param_1 + 0x90) != (code *)0x0) {
    (**(code **)((long)param_1 + 0x90))(plVar4);
  }
  if ((bVar3 >> 2 & 1) != 0) {
    usbi_log(0,4,"libusb_free_transfer","transfer %p",plVar4);
    if (((*(byte *)((long)param_1 + 0x78) >> 1 & 1) != 0) &&
       (*(void **)((long)param_1 + 0xa0) != (void *)0x0)) {
      free(*(void **)((long)param_1 + 0xa0));
    }
    pthread_mutex_destroy((pthread_mutex_t *)((long)param_1 + 0x44));
    free(param_1);
  }
  libusb_unref_device(*(undefined8 *)(lVar5 + 0x40));
  return 0;
}


==================================================================

### FUNC 001927e8 (128 bytes) name=usbi_handle_transfer_cancellation

undefined8 usbi_handle_transfer_cancellation(long param_1)

{
  pthread_mutex_t *__mutex;
  byte bVar1;
  undefined8 uVar2;
  
  __mutex = (pthread_mutex_t *)(*(long *)(*(long *)(*(long *)(param_1 + 0x70) + 0x40) + 0x30) + 200)
  ;
  pthread_mutex_lock(__mutex);
  bVar1 = *(byte *)(param_1 + 0x41);
  pthread_mutex_unlock(__mutex);
  if ((bVar1 >> 2 & 1) == 0) {
    uVar2 = 3;
  }
  else {
    usbi_log(0,4,"usbi_handle_transfer_cancellation","detected timeout cancellation");
    uVar2 = 2;
  }
  usbi_handle_transfer_completion(param_1,uVar2);
  return 0;
}


==================================================================

### FUNC 00192868 (184 bytes) name=usbi_signal_transfer_completion

int usbi_signal_transfer_completion(long param_1)

{
  int iVar1;
  long lVar2;
  long lVar3;
  
  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x70) + 0x40) + 0x30);
  pthread_mutex_lock((pthread_mutex_t *)(lVar3 + 400));
  if (((*(int *)(lVar3 + 0x1b8) == 0) && (*(int *)(lVar3 + 0x1bc) == 0)) &&
     (*(long *)(lVar3 + 0x1e8) == lVar3 + 0x1e0)) {
    lVar2 = *(long *)(lVar3 + 0x1f8);
    *(long *)(param_1 + 0x20) = lVar3 + 0x1f0;
    *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(lVar3 + 0x1f0);
    *(long *)(*(long *)(lVar3 + 0x1f0) + 8) = param_1 + 0x18;
    *(long *)(lVar3 + 0x1f0) = param_1 + 0x18;
    if (lVar2 == lVar3 + 0x1f0) {
      usbi_signal_event(lVar3);
    }
  }
  else {
    *(long *)(param_1 + 0x20) = lVar3 + 0x1f0;
    *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(lVar3 + 0x1f0);
    *(long *)(*(long *)(lVar3 + 0x1f0) + 8) = param_1 + 0x18;
    *(long *)(lVar3 + 0x1f0) = param_1 + 0x18;
  }
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(lVar3 + 400));
  return iVar1;
}


==================================================================

### FUNC 00192920 (144 bytes) name=libusb_try_lock_events

undefined8 libusb_try_lock_events(long param_1)

{
  long lVar1;
  int iVar2;
  undefined8 uVar3;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
  iVar2 = *(int *)(lVar1 + 0x1bc);
  pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
  if (iVar2 == 0) {
    iVar2 = pthread_mutex_trylock((pthread_mutex_t *)(lVar1 + 0x108));
    uVar3 = 1;
    if (iVar2 == 0) {
      *(undefined4 *)(lVar1 + 0x130) = 1;
      uVar3 = 0;
    }
  }
  else {
    usbi_log(0,4,"libusb_try_lock_events","someone else is closing a device");
    uVar3 = 1;
  }
  return uVar3;
}


==================================================================

### FUNC 001929b0 (60 bytes) name=libusb_lock_events

int libusb_lock_events(long param_1)

{
  long lVar1;
  int iVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  iVar2 = pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x108));
  *(undefined4 *)(lVar1 + 0x130) = 1;
  return iVar2;
}


==================================================================

### FUNC 001929ec (80 bytes) name=libusb_unlock_events

int libusb_unlock_events(long param_1)

{
  long lVar1;
  int iVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  *(undefined4 *)(lVar1 + 0x130) = 0;
  pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x108));
  pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x138));
  pthread_cond_broadcast((pthread_cond_t *)(lVar1 + 0x160));
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x138));
  return iVar2;
}


==================================================================

### FUNC 00192a3c (112 bytes) name=libusb_event_handling_ok

bool libusb_event_handling_ok(long param_1)

{
  bool bVar1;
  long lVar2;
  int iVar3;
  
  lVar2 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar2 = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 400));
  iVar3 = *(int *)(lVar2 + 0x1bc);
  pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 400));
  bVar1 = iVar3 == 0;
  if (!bVar1) {
    usbi_log(0,4,"libusb_event_handling_ok","someone else is closing a device");
  }
  return bVar1;
}


==================================================================

### FUNC 00192aac (120 bytes) name=libusb_event_handler_active

undefined4 libusb_event_handler_active(long param_1)

{
  long lVar1;
  int iVar2;
  undefined4 uVar3;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
  iVar2 = *(int *)(lVar1 + 0x1bc);
  pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
  if (iVar2 == 0) {
    uVar3 = *(undefined4 *)(lVar1 + 0x130);
  }
  else {
    usbi_log(0,4,"libusb_event_handler_active","someone else is closing a device");
    uVar3 = 1;
  }
  return uVar3;
}


==================================================================

### FUNC 00192b24 (152 bytes) name=libusb_interrupt_event_handler

int libusb_interrupt_event_handler(long param_1)

{
  long lVar1;
  int iVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  usbi_log(0,4,"libusb_interrupt_event_handler","");
  pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
  if ((((*(int *)(lVar1 + 0x1b8) == 0) && (*(int *)(lVar1 + 0x1bc) == 0)) &&
      (*(long *)(lVar1 + 0x1e8) == lVar1 + 0x1e0)) && (*(long *)(lVar1 + 0x1f8) == lVar1 + 0x1f0)) {
    *(undefined4 *)(lVar1 + 0x1b8) = 2;
    usbi_signal_event(lVar1);
  }
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
  return iVar2;
}


==================================================================

### FUNC 00192bbc (28 bytes) name=libusb_lock_event_waiters

int libusb_lock_event_waiters(long param_1)

{
  long lVar1;
  int iVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  iVar2 = pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x138));
  return iVar2;
}


==================================================================

### FUNC 00192bd8 (28 bytes) name=libusb_unlock_event_waiters

int libusb_unlock_event_waiters(long param_1)

{
  long lVar1;
  int iVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x138));
  return iVar2;
}


==================================================================

### FUNC 00192bf4 (88 bytes) name=libusb_wait_for_event

ulong libusb_wait_for_event(long param_1,long param_2)

{
  long lVar1;
  ulong uVar2;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  if (param_2 != 0) {
    uVar2 = usbi_cond_timedwait((pthread_cond_t *)(lVar1 + 0x160),(pthread_mutex_t *)(lVar1 + 0x138)
                                ,param_2);
    if (-1 < (int)uVar2) {
      uVar2 = (ulong)((int)uVar2 == 0x6e);
    }
    return uVar2;
  }
  pthread_cond_wait((pthread_cond_t *)(lVar1 + 0x160),(pthread_mutex_t *)(lVar1 + 0x138));
  return 0;
}


==================================================================

### FUNC 00192c4c (704 bytes) name=libusb_handle_events_timeout_completed

ulong libusb_handle_events_timeout_completed(long param_1,long *param_2,int *param_3)

{
  long lVar1;
  long lVar2;
  long lVar3;
  undefined *puVar4;
  bool bVar5;
  int iVar6;
  uint uVar7;
  ulong uVar8;
  long lVar9;
  ulong uVar10;
  long local_80;
  long lStack_78;
  long local_68;
  long lStack_60;
  long local_58;
  
  puVar4 = PTR_usbi_default_context_00501e08;
  lVar3 = tpidr_el0;
  local_58 = *(long *)(lVar3 + 0x28);
  lVar2 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar2 = param_1;
  }
  iVar6 = libusb_get_next_timeout(lVar2,&local_68);
  if (iVar6 == 0) {
LAB_00192cd4:
    lStack_78 = param_2[1];
    local_80 = *param_2;
LAB_00192d10:
    while( true ) {
      lVar1 = *(long *)puVar4;
      if (lVar2 != 0) {
        lVar1 = lVar2;
      }
      pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
      iVar6 = *(int *)(lVar1 + 0x1bc);
      pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
      if (iVar6 == 0) {
        iVar6 = pthread_mutex_trylock((pthread_mutex_t *)(lVar1 + 0x108));
        if (iVar6 == 0) {
          *(undefined4 *)(lVar1 + 0x130) = 1;
          if ((param_3 == (int *)0x0) || (*param_3 == 0)) {
            usbi_log(0,4,"libusb_handle_events_timeout_completed","doing our own event handling");
            uVar10 = FUN_001930ac(lVar2,&local_80);
            uVar10 = uVar10 & 0xffffffff;
          }
          else {
            uVar10 = 0;
          }
          lVar1 = *(long *)puVar4;
          if (lVar2 != 0) {
            lVar1 = lVar2;
          }
          *(undefined4 *)(lVar1 + 0x130) = 0;
          pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x108));
          pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x138));
          pthread_cond_broadcast((pthread_cond_t *)(lVar1 + 0x160));
          uVar7 = pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x138));
          uVar8 = (ulong)uVar7;
          goto LAB_00192ed8;
        }
      }
      else {
        usbi_log(0,4,"libusb_try_lock_events","someone else is closing a device");
      }
      lVar1 = *(long *)puVar4;
      if (lVar2 != 0) {
        lVar1 = lVar2;
      }
      pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 0x138));
      if ((param_3 != (int *)0x0) && (*param_3 != 0)) {
        uVar10 = 0;
        goto LAB_00192e24;
      }
      lVar1 = *(long *)puVar4;
      if (lVar2 != 0) {
        lVar1 = lVar2;
      }
      pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
      iVar6 = *(int *)(lVar1 + 0x1bc);
      pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
      if (iVar6 != 0) break;
      if (*(int *)(lVar1 + 0x130) != 0) goto LAB_00192dd4;
      lVar1 = *(long *)puVar4;
      if (lVar2 != 0) {
        lVar1 = lVar2;
      }
      pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x138));
      usbi_log(0,4,"libusb_handle_events_timeout_completed",
               "event handler was active but went away, retrying");
    }
    usbi_log(0,4,"libusb_event_handler_active","someone else is closing a device");
LAB_00192dd4:
    usbi_log(0,4,"libusb_handle_events_timeout_completed","another thread is doing event handling");
    lVar1 = *(long *)puVar4;
    if (lVar2 != 0) {
      lVar1 = lVar2;
    }
    uVar8 = usbi_cond_timedwait(lVar1 + 0x160,lVar1 + 0x138,&local_80);
    uVar10 = uVar8 & 0xffffffff;
    if (-1 < (int)uVar8) {
      uVar10 = (ulong)((int)uVar8 == 0x6e);
    }
LAB_00192e24:
    lVar1 = *(long *)puVar4;
    if (lVar2 != 0) {
      lVar1 = lVar2;
    }
    uVar7 = pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 0x138));
    uVar8 = (ulong)uVar7;
    if ((int)uVar10 < 0) goto LAB_00192ed8;
    if ((int)uVar10 != 1) {
      uVar10 = 0;
      goto LAB_00192ed8;
    }
  }
  else if ((local_68 != 0) || (lStack_60 != 0)) {
    lVar9 = *param_2;
    bVar5 = SBORROW8(local_68,lVar9);
    lVar1 = local_68 - lVar9;
    if (local_68 == lVar9) {
      bVar5 = SBORROW8(lStack_60,param_2[1]);
      lVar1 = lStack_60 - param_2[1];
    }
    local_80 = local_68;
    lStack_78 = lStack_60;
    if (lVar1 < 0 == bVar5) goto LAB_00192cd4;
    goto LAB_00192d10;
  }
  uVar8 = FUN_00192f0c(lVar2);
  uVar10 = uVar8 & 0xffffffff;
LAB_00192ed8:
  if (*(long *)(lVar3 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar8);
  }
  return uVar10;
}


==================================================================

### FUNC 00192f0c (416 bytes) name=FUN_00192f0c

int FUN_00192f0c(long param_1)

{
  long lVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  undefined4 *puVar6;
  long lVar7;
  long lVar8;
  undefined8 uVar9;
  long local_78;
  long lStack_70;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  lVar2 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar2 = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 200));
  lVar1 = lVar2 + 0xb8;
  if (*(long *)(lVar2 + 0xc0) != lVar1) {
    iVar4 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0x108))(0,&local_78);
    if (iVar4 < 0) goto LAB_0019306c;
    lVar7 = *(long *)(lVar2 + 0xc0);
    if (lVar7 != lVar1) {
      do {
        lVar8 = *(long *)(lVar7 + 0x20);
        if ((lVar8 == 0) && (*(long *)(lVar7 + 0x28) == 0)) break;
        if ((*(byte *)(lVar7 + 0x39) & 3) == 0) {
          if ((local_78 < lVar8) ||
             ((lVar8 == local_78 && (lStack_70 / 1000 < *(long *)(lVar7 + 0x28))))) break;
          *(byte *)(lVar7 + 0x39) = *(byte *)(lVar7 + 0x39) | 2;
          iVar4 = libusb_cancel_transfer((long *)(lVar7 + 0x68));
          if (iVar4 == 0) {
            *(byte *)(lVar7 + 0x39) = *(byte *)(lVar7 + 0x39) | 4;
          }
          else {
            uVar9 = *(undefined8 *)(*(long *)(*(long *)(lVar7 + 0x68) + 0x40) + 0x30);
            puVar6 = (undefined4 *)__errno();
            usbi_log(uVar9,2,"handle_timeout","async cancel failed %d errno=%d",iVar4,*puVar6);
          }
        }
        lVar7 = *(long *)(lVar7 + 8);
      } while (lVar7 != lVar1);
    }
  }
  iVar4 = 0;
LAB_0019306c:
  iVar5 = pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 200));
  if (*(long *)(lVar3 + 0x28) == local_68) {
    return iVar4;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(iVar5);
}


==================================================================

### FUNC 001930ac (1300 bytes) name=FUN_001930ac

int FUN_001930ac(void *param_1,long *param_2)

{
  pthread_mutex_t *__mutex;
  uint uVar1;
  int iVar2;
  bool bVar3;
  bool bVar4;
  int iVar5;
  int iVar6;
  void *pvVar7;
  int *piVar8;
  long *plVar9;
  long *plVar10;
  long lVar11;
  undefined2 *puVar12;
  long lVar13;
  pollfd *__fds;
  long lVar14;
  long *__ptr;
  
  pvVar7 = pthread_getspecific(*(pthread_key_t *)((long)param_1 + 0x134));
  if (pvVar7 != (void *)0x0) {
    return -6;
  }
  pthread_setspecific(*(pthread_key_t *)((long)param_1 + 0x134),param_1);
  __mutex = (pthread_mutex_t *)((long)param_1 + 400);
  pthread_mutex_lock(__mutex);
  if ((*(byte *)((long)param_1 + 0x1b8) & 1) != 0) {
    usbi_log(0,4,"handle_events","poll fds modified, reallocating");
    if (*(void **)((long)param_1 + 0x1d0) != (void *)0x0) {
      free(*(void **)((long)param_1 + 0x1d0));
      *(undefined8 *)((long)param_1 + 0x1d0) = 0;
    }
    pvVar7 = calloc((ulong)*(uint *)((long)param_1 + 0x1d8),8);
    *(void **)((long)param_1 + 0x1d0) = pvVar7;
    if (pvVar7 == (void *)0x0) {
      pthread_mutex_unlock(__mutex);
      iVar6 = -0xb;
      goto LAB_00193590;
    }
    lVar11 = *(long *)((long)param_1 + 0x1c8);
    if (lVar11 != (long)param_1 + 0x1c0) {
      puVar12 = (undefined2 *)((long)pvVar7 + 4);
      do {
        *(undefined4 *)(puVar12 + -2) = *(undefined4 *)(lVar11 + -8);
        *puVar12 = *(undefined2 *)(lVar11 + -4);
        lVar11 = *(long *)(lVar11 + 8);
        puVar12 = puVar12 + 4;
      } while (lVar11 != (long)param_1 + 0x1c0);
    }
    uVar1 = *(uint *)((long)param_1 + 0x1b8) & 0xfffffffe;
    *(uint *)((long)param_1 + 0x1b8) = uVar1;
    if ((((uVar1 == 0) && (*(int *)((long)param_1 + 0x1bc) == 0)) &&
        (*(long *)((long)param_1 + 0x1e8) == (long)param_1 + 0x1e0)) &&
       (*(long *)((long)param_1 + 0x1f8) == (long)param_1 + 0x1f0)) {
      usbi_clear_event(param_1);
    }
  }
  __fds = *(pollfd **)((long)param_1 + 0x1d0);
  uVar1 = *(uint *)((long)param_1 + 0x1d8);
  pthread_mutex_unlock(__mutex);
  lVar11 = param_2[1];
  lVar13 = lVar11 / 1000 + (lVar11 >> 0x3f);
  lVar14 = *(long *)PTR_usbi_backend_00501a30;
  iVar5 = (int)((ulong)(*param_2 * 0x3e800000000) >> 0x20) +
          ((int)lVar13 - (SUB164(SEXT816(lVar11) * SEXT816(0x20c49ba5e353f7cf),0xc) >> 0x1f));
  if (lVar11 + (lVar13 - (lVar11 >> 0x3f)) * -1000 != 0) {
    iVar5 = iVar5 + 1;
  }
  do {
    usbi_log(0,4,"handle_events","poll() %d fds with timeout in %dms",uVar1,iVar5);
    iVar5 = poll(__fds,(ulong)uVar1,iVar5);
    usbi_log(0,4,"handle_events","poll() returned %d",iVar5);
    if (iVar5 == -1) {
      piVar8 = (int *)__errno();
      if (*piVar8 == 4) {
        iVar6 = -10;
      }
      else {
        iVar5 = -1;
LAB_00193568:
        usbi_log(param_1,1,"handle_events","poll failed %d err=%d",iVar5,*piVar8);
        iVar6 = -1;
      }
      break;
    }
    if (iVar5 == 0) {
      iVar6 = FUN_00192f0c(param_1);
      break;
    }
    if (iVar5 < 0) {
      piVar8 = (int *)__errno();
      goto LAB_00193568;
    }
    if (__fds->revents == 0) {
      bVar4 = false;
LAB_001934d0:
      iVar6 = (**(code **)(lVar14 + 0xf8))(param_1,__fds + 1,uVar1 - 1,iVar5);
      if (iVar6 != 0) {
        usbi_log(param_1,1,"handle_events","backend handle_events failed with error %d",iVar6);
        break;
      }
    }
    else {
      usbi_log(0,4,"handle_events","caught a fish on the event pipe");
      pthread_mutex_lock(__mutex);
      if ((*(uint *)((long)param_1 + 0x1b8) & 1) == 0) {
        if ((*(uint *)((long)param_1 + 0x1b8) >> 1 & 1) == 0) goto LAB_00193304;
LAB_00193398:
        usbi_log(0,4,"handle_events","someone purposely interrupted");
        *(uint *)((long)param_1 + 0x1b8) = *(uint *)((long)param_1 + 0x1b8) & 0xfffffffd;
        iVar6 = *(int *)((long)param_1 + 0x1bc);
      }
      else {
        usbi_log(0,4,"handle_events","someone updated the poll fds");
        if ((*(uint *)((long)param_1 + 0x1b8) >> 1 & 1) != 0) goto LAB_00193398;
LAB_00193304:
        iVar6 = *(int *)((long)param_1 + 0x1bc);
      }
      if (iVar6 != 0) {
        usbi_log(0,4,"handle_events","someone is closing a device");
      }
      if (*(long *)((long)param_1 + 0x1e8) == (long)param_1 + 0x1e0) {
        bVar4 = false;
        __ptr = (long *)0x0;
      }
      else {
        usbi_log(0,4,"handle_events","hotplug message received");
        plVar9 = *(long **)((long)param_1 + 0x1e8);
        bVar4 = true;
        plVar10 = (long *)plVar9[1];
        __ptr = plVar9 + -2;
        *plVar10 = *plVar9;
        *(long **)(*plVar9 + 8) = plVar10;
        *plVar9 = 0;
        plVar9[1] = 0;
      }
      while (plVar10 = *(long **)((long)param_1 + 0x1f8), plVar10 != (long *)((long)param_1 + 0x1f0)
            ) {
        plVar9 = (long *)plVar10[1];
        *plVar9 = *plVar10;
        *(long **)(*plVar10 + 8) = plVar9;
        *plVar10 = 0;
        plVar10[1] = 0;
        pthread_mutex_unlock(__mutex);
        iVar6 = (**(code **)(lVar14 + 0x100))(plVar10 + -3);
        if (iVar6 != 0) {
          usbi_log(param_1,1,"handle_events",
                   "backend handle_transfer_completion failed with error %d",iVar6);
          pthread_mutex_lock(__mutex);
          bVar3 = false;
          iVar2 = *(int *)((long)param_1 + 0x1b8);
          goto joined_r0x00193488;
        }
        pthread_mutex_lock(__mutex);
      }
      iVar6 = 0;
      bVar3 = true;
      iVar2 = *(int *)((long)param_1 + 0x1b8);
joined_r0x00193488:
      if (((iVar2 == 0) && (*(int *)((long)param_1 + 0x1bc) == 0)) &&
         ((*(long *)((long)param_1 + 0x1e8) == (long)param_1 + 0x1e0 &&
          (*(long **)((long)param_1 + 0x1f8) == (long *)((long)param_1 + 0x1f0))))) {
        usbi_clear_event(param_1);
      }
      pthread_mutex_unlock(__mutex);
      if (__ptr != (long *)0x0) {
        usbi_hotplug_match(param_1,__ptr[1],(int)*__ptr);
        if ((int)*__ptr == 2) {
          libusb_unref_device(__ptr[1]);
        }
        free(__ptr);
      }
      if (!bVar3) break;
      iVar5 = iVar5 + -1;
      if (iVar5 != 0) goto LAB_001934d0;
    }
    iVar5 = 0;
    iVar6 = 0;
  } while (bVar4);
LAB_00193590:
  pthread_setspecific(*(pthread_key_t *)((long)param_1 + 0x134),(void *)0x0);
  return iVar6;
}


==================================================================

### FUNC 001935c0 (8 bytes) name=libusb_handle_events_timeout

void libusb_handle_events_timeout(undefined8 param_1,undefined8 param_2)

{
  libusb_handle_events_timeout_completed(param_1,param_2,0);
  return;
}


==================================================================

### FUNC 001935c8 (88 bytes) name=libusb_handle_events

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void libusb_handle_events(undefined8 param_1)

{
  long lVar1;
  undefined8 local_40;
  undefined8 uStack_38;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  uStack_38 = _UNK_0043bd58;
  local_40 = _DAT_0043bd50;
  libusb_handle_events_timeout_completed(param_1,&local_40,0);
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00193620 (92 bytes) name=libusb_handle_events_completed

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void libusb_handle_events_completed(undefined8 param_1,undefined8 param_2)

{
  long lVar1;
  undefined8 local_40;
  undefined8 uStack_38;
  long local_28;
  
  lVar1 = tpidr_el0;
  local_28 = *(long *)(lVar1 + 0x28);
  uStack_38 = _UNK_0043bd58;
  local_40 = _DAT_0043bd50;
  libusb_handle_events_timeout_completed(param_1,&local_40,param_2);
  if (*(long *)(lVar1 + 0x28) == local_28) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 0019367c (196 bytes) name=libusb_handle_events_locked

void libusb_handle_events_locked(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  long lVar3;
  bool bVar4;
  int iVar5;
  long lVar6;
  long local_60;
  long lStack_58;
  long local_48;
  long lStack_40;
  long local_38;
  
  lVar3 = tpidr_el0;
  local_38 = *(long *)(lVar3 + 0x28);
  lVar2 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar2 = param_1;
  }
  iVar5 = libusb_get_next_timeout(lVar2,&local_48);
  if (iVar5 == 0) {
LAB_001936f8:
    lStack_40 = param_2[1];
    local_48 = *param_2;
  }
  else {
    if ((local_48 == 0) && (lStack_40 == 0)) {
      FUN_00192f0c(lVar2);
      goto LAB_0019370c;
    }
    lVar6 = *param_2;
    bVar4 = SBORROW8(local_48,lVar6);
    lVar1 = local_48 - lVar6;
    if (local_48 == lVar6) {
      bVar4 = SBORROW8(lStack_40,param_2[1]);
      lVar1 = lStack_40 - param_2[1];
    }
    if (lVar1 < 0 == bVar4) goto LAB_001936f8;
  }
  local_60 = local_48;
  lStack_58 = lStack_40;
  FUN_001930ac(lVar2,&local_60);
LAB_0019370c:
  if (*(long *)(lVar3 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return;
}


==================================================================

### FUNC 00193740 (8 bytes) name=libusb_pollfds_handle_timeouts

undefined8 libusb_pollfds_handle_timeouts(void)

{
  return 0;
}


==================================================================

### FUNC 00193748 (508 bytes) name=libusb_get_next_timeout

void libusb_get_next_timeout(long param_1,long *param_2)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  bool bVar5;
  int iVar6;
  undefined4 *puVar7;
  undefined8 uVar8;
  char *pcVar9;
  long lVar10;
  long lVar11;
  long local_58;
  long lStack_50;
  long local_48;
  
  lVar4 = tpidr_el0;
  local_48 = *(long *)(lVar4 + 0x28);
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  __mutex = (pthread_mutex_t *)(lVar1 + 200);
  pthread_mutex_lock(__mutex);
  lVar10 = *(long *)(lVar1 + 0xc0);
  if (lVar10 == lVar1 + 0xb8) {
    pthread_mutex_unlock(__mutex);
    pcVar9 = "no URBs, no timeout!";
  }
  else {
    for (; lVar10 != lVar1 + 0xb8; lVar10 = *(long *)(lVar10 + 8)) {
      if ((*(byte *)(lVar10 + 0x39) & 3) == 0) {
        lVar2 = *(long *)(lVar10 + 0x20);
        lVar3 = *(long *)(lVar10 + 0x28);
        lVar10 = 0;
        if (lVar2 != 0 || lVar3 != 0) {
          lVar10 = lVar3;
        }
        lVar11 = 0;
        if (lVar2 != 0 || lVar3 != 0) {
          lVar11 = lVar2;
        }
        goto LAB_00193804;
      }
    }
    lVar10 = 0;
    lVar11 = 0;
LAB_00193804:
    pthread_mutex_unlock(__mutex);
    if (lVar11 != 0 || lVar10 != 0) {
      iVar6 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0x108))(0,&local_58);
      if (iVar6 < 0) {
        puVar7 = (undefined4 *)__errno();
        usbi_log(lVar1,1,"libusb_get_next_timeout","failed to read monotonic clock, errno=%d",
                 *puVar7);
        uVar8 = 0;
      }
      else {
        lStack_50 = lStack_50 / 1000;
        bVar5 = SBORROW8(lVar11,local_58);
        lVar11 = lVar11 - local_58;
        lVar1 = lVar11;
        if (lVar11 == 0) {
          bVar5 = SBORROW8(lVar10,lStack_50);
          lVar1 = lVar10 - lStack_50;
        }
        if (lVar11 == 0 && lVar10 == lStack_50 || lVar1 < 0 != bVar5) {
          usbi_log(0,4,"libusb_get_next_timeout","first timeout already expired");
          *param_2 = 0;
          param_2[1] = 0;
        }
        else {
          lVar10 = lVar10 - lStack_50;
          *param_2 = lVar11;
          param_2[1] = lVar10;
          if (lVar10 < 0) {
            *param_2 = lVar11 + -1;
            param_2[1] = lVar10 + 1000000;
          }
          usbi_log(0,4,"libusb_get_next_timeout","next timeout in %d.%06ds");
        }
        uVar8 = 1;
      }
      goto LAB_00193918;
    }
    pcVar9 = "no URB with timeout or all handled by OS; no timeout!";
  }
  usbi_log(0,4,"libusb_get_next_timeout",pcVar9);
  uVar8 = 0;
LAB_00193918:
  if (*(long *)(lVar4 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar8);
  }
  return;
}


==================================================================

### FUNC 00193944 (32 bytes) name=libusb_set_pollfd_notifiers

void libusb_set_pollfd_notifiers
               (long param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  long lVar1;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  *(undefined8 *)(lVar1 + 0xf0) = param_2;
  *(undefined8 *)(lVar1 + 0xf8) = param_3;
  *(undefined8 *)(lVar1 + 0x100) = param_4;
  return;
}


==================================================================

### FUNC 00193964 (148 bytes) name=libusb_get_pollfds

long * libusb_get_pollfds(long param_1)

{
  long lVar1;
  uint uVar2;
  long *plVar3;
  long *plVar4;
  long lVar5;
  
  lVar1 = *(long *)PTR_usbi_default_context_00501e08;
  if (param_1 != 0) {
    lVar1 = param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(lVar1 + 400));
  uVar2 = *(uint *)(lVar1 + 0x1d8);
  plVar4 = calloc((ulong)(uVar2 + 1),8);
  if (plVar4 != (long *)0x0) {
    plVar3 = plVar4;
    for (lVar5 = *(long *)(lVar1 + 0x1c8); lVar5 != lVar1 + 0x1c0; lVar5 = *(long *)(lVar5 + 8)) {
      *plVar3 = lVar5 + -8;
      plVar3 = plVar3 + 1;
    }
    plVar4[uVar2] = 0;
  }
  pthread_mutex_unlock((pthread_mutex_t *)(lVar1 + 400));
  return plVar4;
}


==================================================================

### FUNC 001939f8 (12 bytes) name=libusb_free_pollfds

void libusb_free_pollfds(void *param_1)

{
  if (param_1 != (void *)0x0) {
    free(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 00193a04 (356 bytes) name=usbi_handle_disconnect

int usbi_handle_disconnect(long param_1)

{
  byte bVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  
  usbi_log(0,4,"usbi_handle_disconnect","device %d.%d",
           *(undefined1 *)(*(long *)(param_1 + 0x40) + 0x38),
           *(undefined1 *)(*(long *)(param_1 + 0x40) + 0x48));
  pthread_mutex_lock((pthread_mutex_t *)(*(long *)(*(long *)(param_1 + 0x40) + 0x30) + 200));
  lVar3 = *(long *)(param_1 + 0x40);
  lVar4 = *(long *)(lVar3 + 0x30);
  lVar5 = *(long *)(lVar4 + 0xc0);
  if (lVar5 != lVar4 + 0xb8) {
    lVar6 = *(long *)PTR_usbi_backend_00501a30;
    do {
      lVar4 = lVar5 + -8;
      if (*(long *)(lVar5 + 0x68) == param_1) {
        pthread_mutex_lock((pthread_mutex_t *)(lVar5 + 0x3c));
        bVar1 = *(byte *)(lVar5 + 0x38);
        pthread_mutex_unlock((pthread_mutex_t *)(lVar5 + 0x3c));
        lVar3 = *(long *)(param_1 + 0x40);
        if (((bVar1 & 1) == 0) || (lVar4 == 0)) goto LAB_00193b34;
        pthread_mutex_unlock((pthread_mutex_t *)(*(long *)(lVar3 + 0x30) + 200));
        usbi_log(0,4,"usbi_handle_disconnect","cancelling transfer %p from disconnect",lVar5 + 0x68)
        ;
        pthread_mutex_lock((pthread_mutex_t *)(lVar5 + 0x3c));
        (**(code **)(lVar6 + 0xf0))(lVar4);
        pthread_mutex_unlock((pthread_mutex_t *)(lVar5 + 0x3c));
        usbi_handle_transfer_completion(lVar4,5);
        pthread_mutex_lock((pthread_mutex_t *)(*(long *)(*(long *)(param_1 + 0x40) + 0x30) + 200));
        lVar3 = *(long *)(param_1 + 0x40);
        lVar4 = *(long *)(lVar3 + 0x30);
        lVar5 = *(long *)(lVar4 + 0xc0);
      }
      else {
LAB_00193b34:
        lVar4 = *(long *)(lVar3 + 0x30);
        lVar5 = *(long *)(lVar5 + 8);
      }
    } while (lVar5 != lVar4 + 0xb8);
  }
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)(lVar4 + 200));
  return iVar2;
}


==================================================================

### FUNC 00193b68 (588 bytes) name=libusb_control_transfer

int libusb_control_transfer
              (long param_1,char param_2,char param_3,undefined2 param_4,undefined2 param_5,
              void *param_6,ushort param_7,undefined4 param_8)

{
  ushort uVar1;
  long lVar2;
  int iVar3;
  void *pvVar4;
  long *plVar5;
  char *pcVar6;
  undefined8 uVar7;
  int *piVar8;
  undefined8 uVar9;
  undefined4 local_6c;
  long local_68;
  
  lVar2 = tpidr_el0;
  local_68 = *(long *)(lVar2 + 0x28);
  local_6c = 0;
  pvVar4 = pthread_getspecific(*(pthread_key_t *)
                                (*(long *)(*(long *)(param_1 + 0x40) + 0x30) + 0x134));
  if (pvVar4 == (void *)0x0) {
    plVar5 = (long *)libusb_alloc_transfer();
    if (plVar5 == (long *)0x0) {
      iVar3 = -0xb;
    }
    else {
      pcVar6 = malloc((ulong)param_7 + 8);
      if (pcVar6 == (char *)0x0) {
        libusb_free_transfer(plVar5);
        iVar3 = -0xb;
      }
      else {
        *pcVar6 = param_2;
        pcVar6[1] = param_3;
        *(undefined2 *)(pcVar6 + 2) = param_4;
        *(undefined2 *)(pcVar6 + 4) = param_5;
        *(ushort *)(pcVar6 + 6) = param_7;
        if (-1 < param_2) {
          memcpy(pcVar6 + 8,param_6,(ulong)param_7);
        }
        *plVar5 = param_1;
        *(undefined2 *)((long)plVar5 + 9) = 0;
        *(undefined4 *)((long)plVar5 + 0xc) = param_8;
        plVar5[6] = (long)pcVar6;
        uVar1 = *(ushort *)(pcVar6 + 6);
        plVar5[4] = (long)FUN_00193db4;
        plVar5[5] = (long)&local_6c;
        *(uint *)((long)plVar5 + 0x14) = uVar1 + 8;
        *(undefined1 *)(plVar5 + 1) = 2;
        iVar3 = libusb_submit_transfer(plVar5);
        if (-1 < iVar3) {
          piVar8 = (int *)plVar5[5];
          if (*piVar8 == 0) {
            uVar9 = *(undefined8 *)(*(long *)(*plVar5 + 0x40) + 0x30);
            do {
              iVar3 = libusb_handle_events_completed(uVar9,piVar8);
              if ((iVar3 < 0) && (iVar3 != -10)) {
                uVar7 = libusb_error_name();
                usbi_log(uVar9,1,"sync_transfer_wait_for_completion",
                         "libusb_handle_events failed: %s, cancelling transfer and retrying",uVar7);
                libusb_cancel_transfer(plVar5);
              }
            } while (*piVar8 == 0);
          }
          if (param_2 < '\0') {
            memcpy(param_6,(void *)(plVar5[6] + 8),(long)(int)plVar5[3]);
          }
          iVar3 = -7;
          switch((int)plVar5[2]) {
          case 0:
            iVar3 = (int)plVar5[3];
            break;
          case 1:
          case 3:
            iVar3 = -1;
            break;
          case 2:
            break;
          case 4:
            iVar3 = -9;
            break;
          case 5:
            iVar3 = -4;
            break;
          case 6:
            iVar3 = -8;
            break;
          default:
            usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),2,"libusb_control_transfer",
                     "unrecognised status code %d");
            iVar3 = -99;
          }
        }
        libusb_free_transfer(plVar5);
      }
    }
  }
  else {
    iVar3 = -6;
  }
  if (*(long *)(lVar2 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar3;
}


==================================================================

### FUNC 00193db4 (44 bytes) name=FUN_00193db4

void FUN_00193db4(long param_1)

{
  **(undefined4 **)(param_1 + 0x28) = 1;
  usbi_log(0,4,"sync_transfer_cb","actual_length=%d",*(undefined4 *)(param_1 + 0x18));
  return;
}


==================================================================

### FUNC 00193de0 (8 bytes) name=libusb_bulk_transfer

void libusb_bulk_transfer(void)

{
  FUN_00193de8();
  return;
}


==================================================================

### FUNC 00193de8 (428 bytes) name=FUN_00193de8

int FUN_00193de8(long param_1,undefined1 param_2,long param_3,undefined4 param_4,undefined4 *param_5
                ,undefined4 param_6,undefined1 param_7)

{
  long lVar1;
  int iVar2;
  void *pvVar3;
  long *plVar4;
  undefined8 uVar5;
  int *piVar6;
  undefined8 uVar7;
  undefined4 local_6c;
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  local_6c = 0;
  pvVar3 = pthread_getspecific(*(pthread_key_t *)
                                (*(long *)(*(long *)(param_1 + 0x40) + 0x30) + 0x134));
  if (pvVar3 == (void *)0x0) {
    plVar4 = (long *)libusb_alloc_transfer();
    if (plVar4 == (long *)0x0) {
      iVar2 = -0xb;
    }
    else {
      *plVar4 = param_1;
      *(undefined1 *)((long)plVar4 + 9) = param_2;
      *(undefined4 *)((long)plVar4 + 0xc) = param_6;
      *(undefined4 *)((long)plVar4 + 0x14) = param_4;
      plVar4[4] = (long)FUN_00193db4;
      plVar4[5] = (long)&local_6c;
      plVar4[6] = param_3;
      *(undefined1 *)((long)plVar4 + 10) = param_7;
      iVar2 = libusb_submit_transfer(plVar4);
      if (-1 < iVar2) {
        piVar6 = (int *)plVar4[5];
        if (*piVar6 == 0) {
          uVar7 = *(undefined8 *)(*(long *)(*plVar4 + 0x40) + 0x30);
          do {
            iVar2 = libusb_handle_events_completed(uVar7,piVar6);
            if ((iVar2 < 0) && (iVar2 != -10)) {
              uVar5 = libusb_error_name();
              usbi_log(uVar7,1,"sync_transfer_wait_for_completion",
                       "libusb_handle_events failed: %s, cancelling transfer and retrying",uVar5);
              libusb_cancel_transfer(plVar4);
            }
          } while (*piVar6 == 0);
        }
        if (param_5 != (undefined4 *)0x0) {
          *param_5 = (int)plVar4[3];
        }
        if (*(uint *)(plVar4 + 2) < 7) {
          iVar2 = *(int *)(&DAT_0043c390 + (long)(int)*(uint *)(plVar4 + 2) * 4);
        }
        else {
          usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),2,"do_sync_bulk_transfer",
                   "unrecognised status code %d");
          iVar2 = -99;
        }
      }
      libusb_free_transfer(plVar4);
    }
  }
  else {
    iVar2 = -6;
  }
  if (*(long *)(lVar1 + 0x28) == local_68) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00193f94 (8 bytes) name=libusb_interrupt_transfer

void libusb_interrupt_transfer(void)

{
  FUN_00193de8();
  return;
}


==================================================================

### FUNC 00193f9c (512 bytes) name=linux_get_device_address

void linux_get_device_address
               (undefined8 param_1,int param_2,undefined1 *param_3,undefined1 *param_4,char *param_5
               ,long param_6,uint param_7)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  ssize_t sVar5;
  char *__format;
  char acStack_2068 [4096];
  char acStack_1068 [4096];
  long local_68;
  
  lVar1 = tpidr_el0;
  local_68 = *(long *)(lVar1 + 0x28);
  usbi_log(0,4,"linux_get_device_address","getting address for device: %s detached: %d",param_6,
           param_2);
  if (((param_6 == 0) || (param_2 != 0)) || (DAT_005028fc == 0)) {
    if ((param_5 == (char *)0x0) && (-1 < (int)param_7)) {
      param_5 = acStack_2068;
      snprintf(acStack_1068,0x1000,"/proc/self/fd/%d",(ulong)param_7);
      sVar5 = readlink(acStack_1068,acStack_2068,0x1000);
      if (0 < sVar5) {
LAB_001940d8:
        iVar3 = strncmp(param_5,"/dev/bus/usb",0xc);
        if (iVar3 == 0) {
          __format = "/dev/bus/usb/%hhu/%hhu";
        }
        else {
          iVar3 = strncmp(param_5,"/proc/bus/usb",0xd);
          if (iVar3 != 0) goto LAB_00194108;
          __format = "/proc/bus/usb/%hhu/%hhu";
        }
        sscanf(param_5,__format,param_3,param_4);
        goto LAB_00194160;
      }
    }
    else if (param_5 != (char *)0x0) goto LAB_001940d8;
LAB_00194108:
    uVar4 = 0xffffff9d;
  }
  else {
    usbi_log(0,4,"linux_get_device_address","scan %s",param_6);
    uVar4 = FUN_0019419c(param_1,param_6,"busnum");
    if ((int)uVar4 < 0) goto LAB_00194164;
    if (0xff < (int)uVar4) {
LAB_00194084:
      uVar4 = 0xfffffffe;
      goto LAB_00194164;
    }
    *param_3 = (char)uVar4;
    uVar4 = FUN_0019419c(param_1,param_6,"devnum");
    uVar2 = (uint)uVar4;
    if ((int)uVar2 < 0) goto LAB_00194164;
    if (0xff < (int)uVar2) goto LAB_00194084;
    *param_4 = (char)uVar4;
    usbi_log(0,4,"linux_get_device_address","bus=%d dev=%d",*param_3,uVar2 & 0xff);
LAB_00194160:
    uVar4 = 0;
  }
LAB_00194164:
  if (*(long *)(lVar1 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar4);
  }
  return;
}


==================================================================

### FUNC 0019419c (368 bytes) name=FUN_0019419c

void FUN_0019419c(undefined8 param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  int iVar2;
  int iVar3;
  FILE *__stream;
  int *piVar4;
  undefined4 *puVar5;
  long lVar6;
  int local_105c;
  char acStack_1058 [4104];
  
  lVar1 = tpidr_el0;
  lVar6 = *(long *)(lVar1 + 0x28);
  snprintf(acStack_1058,0x1000,"%s/%s/%s","/sys/bus/usb/devices",param_2,param_3);
  __stream = fopen(acStack_1058,"r");
  if (__stream == (FILE *)0x0) {
    piVar4 = (int *)__errno();
    if (*piVar4 == 2) {
      local_105c = -4;
      goto LAB_001942d8;
    }
    usbi_log(param_1,1,"__read_sysfs_attr","open %s failed errno=%d",acStack_1058);
  }
  else {
    iVar2 = fscanf(__stream,"%d",&local_105c);
    iVar3 = fclose(__stream);
    if (iVar2 != 1) {
      puVar5 = (undefined4 *)__errno(iVar3);
      usbi_log(param_1,1,"__read_sysfs_attr","fscanf %s returned %d, errno=%d",param_3,iVar2,*puVar5
              );
      local_105c = -4;
      goto LAB_001942d8;
    }
    if (-1 < local_105c) goto LAB_001942d8;
    usbi_log(param_1,1,"__read_sysfs_attr","%s contains a negative value",acStack_1058);
  }
  local_105c = -1;
LAB_001942d8:
  if (*(long *)(lVar1 + 0x28) == lVar6) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(local_105c);
}


==================================================================

### FUNC 0019430c (848 bytes) name=linux_enumerate_device

int linux_enumerate_device(undefined8 param_1,uint param_2,uint param_3,char *param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  bool bVar5;
  int iVar6;
  long lVar7;
  char *pcVar8;
  char *pcVar9;
  undefined8 uVar10;
  long lVar11;
  long lVar12;
  char *local_78;
  undefined1 local_70 [4];
  undefined1 local_6c [4];
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  uVar1 = param_3 & 0xff;
  uVar2 = param_2 & 0xff;
  uVar3 = uVar1 | uVar2 << 8;
  usbi_log(0,4,"linux_enumerate_device","busnum %d devaddr %d session_id %ld",uVar2,uVar1,uVar3);
  lVar7 = usbi_get_device_by_session_id(param_1,uVar3);
  if (lVar7 == 0) {
    usbi_log(0,4,"linux_enumerate_device","allocating new device for %d/%d (session %ld)",uVar2,
             uVar1,uVar3);
    lVar7 = usbi_alloc_device(param_1,uVar3);
    if (lVar7 == 0) {
      iVar6 = -0xb;
      goto LAB_001943c0;
    }
    iVar6 = FUN_0019465c(lVar7,param_2,param_3,param_4,0xffffffff);
    if ((iVar6 < 0) || (iVar6 = usbi_sanitize_device(lVar7), iVar6 < 0)) {
LAB_00194624:
      libusb_unref_device(lVar7);
      goto LAB_001943c0;
    }
    if (param_4 != (char *)0x0) {
      lVar12 = *(long *)(lVar7 + 0x30);
      iVar6 = strncmp(param_4,"usb",3);
      if (iVar6 != 0) {
        pcVar8 = strdup(param_4);
        local_78 = pcVar8;
        if (pcVar8 != (char *)0x0) {
          pcVar9 = strrchr(pcVar8,0x2e);
          if ((pcVar9 == (char *)0x0) && (pcVar9 = strrchr(pcVar8,0x2d), pcVar9 == (char *)0x0)) {
            usbi_log(lVar12,2,"linux_get_parent_info","Can not parse sysfs_dir: %s, no parent info",
                     pcVar8);
            goto LAB_00194610;
          }
          iVar6 = atoi(pcVar9 + 1);
          pcVar8 = local_78;
          *(char *)(lVar7 + 0x39) = (char)iVar6;
          *pcVar9 = '\0';
          pcVar9 = strchr(local_78,0x2d);
          if (pcVar9 != (char *)0x0) {
LAB_001944f8:
            bVar5 = true;
            do {
              pthread_mutex_lock((pthread_mutex_t *)(lVar12 + 0x20));
              pcVar8 = local_78;
              for (lVar11 = *(long *)(lVar12 + 0x18); lVar11 != lVar12 + 0x10;
                  lVar11 = *(long *)(lVar11 + 8)) {
                if ((*(char **)(lVar11 + 0x30) != (char *)0x0) &&
                   (iVar6 = strcmp(*(char **)(lVar11 + 0x30),pcVar8), iVar6 == 0)) {
                  uVar10 = libusb_ref_device(lVar11 + -0x50);
                  *(undefined8 *)(lVar7 + 0x40) = uVar10;
                  break;
                }
              }
              pthread_mutex_unlock((pthread_mutex_t *)(lVar12 + 0x20));
              if ((!bVar5) || (*(long *)(lVar7 + 0x40) != 0)) goto LAB_001945dc;
              usbi_log(0,4,"linux_get_parent_info",
                       "parent_dev %s not enumerated yet, enumerating now",local_78);
              pcVar8 = local_78;
              iVar6 = linux_get_device_address(lVar12,0,local_6c,local_70,0,local_78,0xffffffff);
              if (iVar6 == 0) {
                linux_enumerate_device(lVar12,local_6c[0],local_70[0],pcVar8);
              }
              bVar5 = false;
            } while( true );
          }
          iVar6 = asprintf(&local_78,"usb%s",pcVar8);
          free(pcVar8);
          if (-1 < iVar6) goto LAB_001944f8;
        }
        iVar6 = -0xb;
        goto LAB_00194624;
      }
    }
LAB_00194614:
    usbi_connect_device(lVar7);
  }
  else {
    usbi_log(0,4,"linux_enumerate_device","session_id %ld already exists",uVar3);
    libusb_unref_device(lVar7);
  }
  iVar6 = 0;
LAB_001943c0:
  if (*(long *)(lVar4 + 0x28) == local_68) {
    return iVar6;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
LAB_001945dc:
  usbi_log(0,4,"linux_get_parent_info","Dev %p (%s) has parent %p (%s) port %d",lVar7,param_4,
           *(long *)(lVar7 + 0x40),local_78,*(undefined1 *)(lVar7 + 0x39));
  pcVar8 = local_78;
LAB_00194610:
  free(pcVar8);
  goto LAB_00194614;
}


==================================================================

### FUNC 0019465c (1004 bytes) name=FUN_0019465c

int FUN_0019465c(long param_1,undefined1 param_2,undefined1 param_3,char *param_4,int param_5)

{
  int iVar1;
  ulong uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  undefined4 *puVar7;
  __off_t _Var8;
  void *pvVar9;
  ssize_t sVar10;
  undefined4 uVar11;
  uint uVar12;
  undefined8 uVar13;
  void *__ptr;
  long lVar14;
  ulong uVar15;
  char acStack_1068 [5];
  byte local_1063;
  long local_68;
  
  lVar3 = tpidr_el0;
  local_68 = *(long *)(lVar3 + 0x28);
  uVar13 = *(undefined8 *)(param_1 + 0x30);
  *(undefined1 *)(param_1 + 0x38) = param_2;
  *(undefined1 *)(param_1 + 0x48) = param_3;
  if (param_4 == (char *)0x0) {
LAB_001947c0:
    if (param_5 < 0) {
      iVar4 = FUN_00196af0(param_1,0,0);
      goto LAB_00194824;
    }
    _Var8 = lseek(param_5,0,0);
    iVar4 = param_5;
    if (_Var8 < 0) {
      puVar7 = (undefined4 *)__errno();
      usbi_log(uVar13,1,"initialize_device","seek failed ret=%d errno=%d",_Var8,*puVar7);
      iVar4 = -1;
      goto LAB_00194a0c;
    }
  }
  else {
    pcVar6 = strdup(param_4);
    *(char **)(param_1 + 0x80) = pcVar6;
    if (pcVar6 == (char *)0x0) {
LAB_001948f0:
      iVar4 = -0xb;
      goto LAB_00194a0c;
    }
    iVar4 = FUN_0019419c(*(undefined8 *)(param_1 + 0x30),param_4,"speed");
    if (-1 < iVar4) {
      if (iVar4 < 0x1e0) {
        uVar11 = 1;
        if (iVar4 != 1) {
          if (iVar4 != 0xc) {
LAB_00194710:
            usbi_log(*(undefined8 *)(param_1 + 0x30),2,"initialize_device",
                     "Unknown device speed: %d Mbps",iVar4);
            goto LAB_0019473c;
          }
          uVar11 = 2;
        }
      }
      else if (iVar4 == 0x1e0) {
        uVar11 = 3;
      }
      else {
        if (iVar4 != 5000) goto LAB_00194710;
        uVar11 = 4;
      }
      *(undefined4 *)(param_1 + 0x4c) = uVar11;
    }
LAB_0019473c:
    if (DAT_00502900 == 0) goto LAB_001947c0;
    snprintf(acStack_1068,0x1000,"%s/%s/%s","/sys/bus/usb/devices",*(undefined8 *)(param_1 + 0x80),
             "descriptors");
    iVar4 = open(acStack_1068,0);
    if (iVar4 < 0) {
      uVar13 = *(undefined8 *)(param_1 + 0x30);
      puVar7 = (undefined4 *)__errno();
      usbi_log(uVar13,1,"_open_sysfs_attr","open %s failed ret=%d errno=%d",acStack_1068,iVar4,
               *puVar7);
      iVar4 = -1;
      goto LAB_00194a0c;
    }
LAB_00194824:
    if (iVar4 < 0) goto LAB_00194a0c;
  }
  uVar15 = 0x200;
  do {
    __ptr = *(void **)(param_1 + 0x88);
    uVar2 = (uVar15 & 0xffffffff) << 1;
    uVar15 = -(uVar15 >> 0x1f & 1) & 0xfffffffe00000000 | uVar2;
    iVar5 = (int)uVar2;
    pvVar9 = realloc(__ptr,(long)iVar5);
    if (pvVar9 == (void *)0x0) {
      free(__ptr);
      *(undefined8 *)(param_1 + 0x88) = 0;
      if (iVar4 == param_5) goto LAB_001948f0;
      close(iVar4);
      iVar4 = -0xb;
      goto LAB_00194a0c;
    }
    iVar1 = *(int *)(param_1 + 0x90);
    lVar14 = (long)iVar1;
    *(void **)(param_1 + 0x88) = pvVar9;
    if ((param_4 == (char *)0x0) || (DAT_00502900 == 0)) {
      memset((void *)((long)pvVar9 + lVar14),0,uVar15 - lVar14);
    }
    sVar10 = read(iVar4,(void *)((long)pvVar9 + lVar14),(long)(iVar5 - iVar1));
    if (sVar10 < 0) {
      puVar7 = (undefined4 *)__errno();
      usbi_log(uVar13,1,"initialize_device","read descriptor failed ret=%d errno=%d",iVar4,*puVar7);
      if (iVar4 == param_5) {
        iVar4 = -1;
      }
      else {
        close(iVar4);
        iVar4 = -1;
      }
      goto LAB_00194a0c;
    }
    iVar1 = (int)sVar10 + *(int *)(param_1 + 0x90);
    *(int *)(param_1 + 0x90) = iVar1;
  } while (iVar5 == iVar1);
  if (iVar4 != param_5) {
    close(iVar4);
    iVar1 = *(int *)(param_1 + 0x90);
  }
  if (iVar1 < 0x12) {
    usbi_log(uVar13,1,"initialize_device","short descriptor read (%d)");
    iVar4 = -1;
  }
  else if ((param_4 == (char *)0x0) || (DAT_005028fc == 0)) {
    if (param_5 < 0) {
      iVar5 = FUN_00196af0(param_1,2,1);
      if (iVar5 < 0) {
        usbi_log(uVar13,2,"initialize_device",
                 "Missing rw usbfs access; cannot determine active configuration descriptor");
        if (*(int *)(param_1 + 0x90) < 0x1b) {
          uVar12 = 0xffffffff;
        }
        else {
          usbi_parse_descriptor(*(long *)(param_1 + 0x88) + 0x12,&DAT_0043ba7c,acStack_1068,0);
          uVar12 = (uint)local_1063;
        }
        iVar4 = 0;
        *(uint *)(param_1 + 0x94) = uVar12;
      }
      else {
        iVar4 = FUN_00196c88(param_1,iVar5);
        close(iVar5);
      }
    }
    else {
      iVar4 = FUN_00196c88(param_1,param_5);
    }
  }
  else {
    iVar4 = 0;
  }
LAB_00194a0c:
  if (*(long *)(lVar3 + 0x28) != local_68) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar4;
}


==================================================================

### FUNC 00194a48 (132 bytes) name=linux_hotplug_enumerate

int linux_hotplug_enumerate(undefined4 param_1,undefined4 param_2,undefined8 param_3)

{
  undefined *puVar1;
  int iVar2;
  undefined *puVar3;
  
  pthread_mutex_lock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
  puVar1 = PTR_active_contexts_list_00501b88;
  for (puVar3 = *(undefined **)(PTR_active_contexts_list_00501b88 + 8); puVar3 != puVar1;
      puVar3 = *(undefined **)(puVar3 + 8)) {
    linux_enumerate_device(puVar3 + -0x200,param_1,param_2,param_3);
  }
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
  return iVar2;
}


==================================================================

### FUNC 00194acc (196 bytes) name=linux_device_disconnected

int linux_device_disconnected(uint param_1,uint param_2)

{
  uint uVar1;
  undefined *puVar2;
  int iVar3;
  long lVar4;
  undefined *puVar5;
  
  pthread_mutex_lock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
  puVar2 = PTR_active_contexts_list_00501b88;
  puVar5 = *(undefined **)(PTR_active_contexts_list_00501b88 + 8);
  if (puVar5 != PTR_active_contexts_list_00501b88) {
    uVar1 = param_2 & 0xff | (param_1 & 0xff) << 8;
    do {
      lVar4 = usbi_get_device_by_session_id(puVar5 + -0x200,uVar1);
      if (lVar4 == 0) {
        usbi_log(0,4,"linux_device_disconnected","device not found for session %x",uVar1);
      }
      else {
        usbi_disconnect_device(lVar4);
        libusb_unref_device(lVar4);
      }
      puVar5 = *(undefined **)(puVar5 + 8);
    } while (puVar5 != puVar2);
  }
  iVar3 = pthread_mutex_unlock((pthread_mutex_t *)PTR_active_contexts_lock_00501e28);
  return iVar3;
}


==================================================================

### FUNC 00194b90 (1624 bytes) name=FUN_00194b90

void FUN_00194b90(undefined8 param_1)

{
  char *pcVar1;
  long lVar2;
  undefined *__mutex;
  int iVar3;
  DIR *pDVar4;
  dirent *pdVar5;
  undefined4 *puVar6;
  undefined8 uVar7;
  char *pcVar8;
  long lVar9;
  int local_1ec;
  int local_1e8;
  int local_1e4;
  utsname uStack_1e0;
  
  lVar2 = tpidr_el0;
  lVar9 = *(long *)(lVar2 + 0x28);
  pDVar4 = opendir("/dev/bus/usb");
  if (pDVar4 == (DIR *)0x0) {
LAB_00194c0c:
    pDVar4 = opendir("/proc/bus/usb");
    if (pDVar4 == (DIR *)0x0) {
LAB_00194c54:
      pDVar4 = opendir("/dev");
      if (pDVar4 == (DIR *)0x0) {
        pcVar8 = (char *)0x0;
      }
      else {
        pdVar5 = readdir(pDVar4);
        while (pdVar5 != (dirent *)0x0) {
          iVar3 = sscanf(pdVar5->d_name,"usbdev%d.%d",&uStack_1e0,&local_1e4);
          if (iVar3 == 2) {
            usbi_log(0,4,"_is_usbdev_entry","found: %s",pdVar5->d_name);
            pcVar8 = "/dev";
            DAT_00531e10 = 1;
            goto LAB_00194cec;
          }
          pdVar5 = readdir(pDVar4);
        }
        pcVar8 = (char *)0x0;
LAB_00194cec:
        closedir(pDVar4);
      }
    }
    else {
      do {
        pdVar5 = readdir(pDVar4);
        if (pdVar5 == (dirent *)0x0) {
          closedir(pDVar4);
          goto LAB_00194c54;
        }
      } while (pdVar5->d_name[0] == '.');
      closedir(pDVar4);
      pcVar8 = "/proc/bus/usb";
    }
  }
  else {
    do {
      pdVar5 = readdir(pDVar4);
      if (pdVar5 == (dirent *)0x0) {
        closedir(pDVar4);
        goto LAB_00194c0c;
      }
    } while (pdVar5->d_name[0] == '.');
    closedir(pDVar4);
    pcVar8 = "/dev/bus/usb";
  }
  pcVar1 = "/dev/bus/usb";
  if (pcVar8 != (char *)0x0) {
    pcVar1 = pcVar8;
  }
  usbi_log(0,4,"find_usbfs_path","found usbfs at %s",pcVar1);
  DAT_00531e18 = pcVar1;
  if (DAT_00502904 == 0xffffffff) {
    iVar3 = clock_gettime(1,(timespec *)&uStack_1e0);
    if (iVar3 != 0) {
      puVar6 = (undefined4 *)__errno();
      usbi_log(0,4,"find_monotonic_clock","monotonic clock doesn\'t work, errno %d",*puVar6);
    }
    DAT_00502904 = (uint)(iVar3 == 0);
  }
  if (DAT_00502908 == 0xffffffff) {
    iVar3 = uname(&uStack_1e0);
    if ((iVar3 < 0) ||
       (iVar3 = sscanf(uStack_1e0.release,"%d.%d.%d",&local_1e4,&local_1e8,&local_1ec), iVar3 < 1))
    {
      DAT_00502908 = 0xffffffff;
    }
    else if (local_1e4 < 3) {
      DAT_00502908 = 0;
      if ((1 < iVar3) && (local_1e4 == 2)) {
        if (6 < local_1e8) goto LAB_00194dc4;
        DAT_00502908 = 0;
        if ((2 < iVar3) && (local_1e8 == 6)) {
          DAT_00502908 = (uint)(0x1f < local_1ec);
        }
      }
    }
    else {
LAB_00194dc4:
      DAT_00502908 = 1;
    }
    if (DAT_00502908 != 0xffffffff) goto LAB_00194ddc;
    pcVar8 = "error checking for bulk continuation support";
LAB_00195098:
    usbi_log(param_1,1,"op_init",pcVar8);
    uVar7 = 0xffffff9d;
    goto LAB_001950a8;
  }
LAB_00194ddc:
  if (DAT_00502908 != 0) {
    usbi_log(0,4,"op_init","bulk continuation flag supported");
  }
  if (DAT_0050290c == 0xffffffff) {
    iVar3 = uname(&uStack_1e0);
    if ((iVar3 < 0) ||
       (iVar3 = sscanf(uStack_1e0.release,"%d.%d.%d",&local_1e4,&local_1e8,&local_1ec), iVar3 < 1))
    {
      DAT_0050290c = 0xffffffff;
    }
    else if (local_1e4 < 3) {
      DAT_0050290c = 0;
      if ((1 < iVar3) && (local_1e4 == 2)) {
        if (6 < local_1e8) goto LAB_00194e4c;
        DAT_0050290c = 0;
        if ((2 < iVar3) && (local_1e8 == 6)) {
          DAT_0050290c = (uint)(0x1e < local_1ec);
        }
      }
    }
    else {
LAB_00194e4c:
      DAT_0050290c = 1;
    }
    if (DAT_0050290c == 0xffffffff) {
      pcVar8 = "error checking for zero length packet support";
      goto LAB_00195098;
    }
  }
  if (DAT_0050290c != 0) {
    usbi_log(0,4,"op_init","zero length packet flag supported");
  }
  if (DAT_00502900 == 0xffffffff) {
    iVar3 = uname(&uStack_1e0);
    if ((iVar3 < 0) ||
       (iVar3 = sscanf(uStack_1e0.release,"%d.%d.%d",&local_1e4,&local_1e8,&local_1ec), iVar3 < 1))
    {
      DAT_00502900 = 0xffffffff;
    }
    else if (local_1e4 < 3) {
      DAT_00502900 = 0;
      if ((1 < iVar3) && (DAT_00502900 = 0, local_1e4 == 2)) {
        if (6 < local_1e8) goto LAB_00194ed4;
        DAT_00502900 = 0;
        if ((2 < iVar3) && (local_1e8 == 6)) {
          DAT_00502900 = (uint)(0x19 < local_1ec);
        }
      }
    }
    else {
LAB_00194ed4:
      DAT_00502900 = 1;
    }
    if (DAT_00502900 == 0xffffffff) {
      pcVar8 = "error checking for sysfs descriptors";
      goto LAB_00195098;
    }
  }
  if (DAT_005028fc == 0xffffffff) {
    iVar3 = uname(&uStack_1e0);
    if ((iVar3 < 0) ||
       (iVar3 = sscanf(uStack_1e0.release,"%d.%d.%d",&local_1e4,&local_1e8,&local_1ec), iVar3 < 1))
    {
      DAT_005028fc = 0xffffffff;
    }
    else if (local_1e4 < 3) {
      DAT_005028fc = 0;
      if ((1 < iVar3) && (DAT_005028fc = 0, local_1e4 == 2)) {
        if (6 < local_1e8) goto LAB_00194f9c;
        DAT_005028fc = 0;
        if ((2 < iVar3) && (local_1e8 == 6)) {
          DAT_005028fc = (uint)(0x15 < local_1ec);
        }
      }
    }
    else {
LAB_00194f9c:
      DAT_005028fc = 1;
    }
    if (DAT_005028fc == 0xffffffff) {
      pcVar8 = "error checking for sysfs busnum";
      goto LAB_00195098;
    }
    if (DAT_00502900 != 0 || DAT_005028fc != 0) goto LAB_00194f04;
joined_r0x00194fc0:
    if (DAT_005028fc != 0) {
      usbi_log(0,4,"op_init","sysfs can relate devices");
    }
    if (DAT_00502900 != 0) {
      usbi_log(0,4,"op_init","sysfs has complete descriptors");
    }
  }
  else {
    if (DAT_00502900 == 0 && DAT_005028fc == 0) goto joined_r0x00194fc0;
LAB_00194f04:
    iVar3 = stat("/sys/bus/usb/devices",(stat *)&uStack_1e0);
    if ((iVar3 == 0) && ((uStack_1e0.sysname._16_4_ & 0xf000) == 0x4000)) goto joined_r0x00194fc0;
    usbi_log(param_1,2,"op_init","sysfs not mounted");
    DAT_005028fc = 0;
    DAT_00502900 = 0;
  }
  pthread_mutex_lock((pthread_mutex_t *)&DAT_00531e20);
  __mutex = PTR_linux_hotplug_lock_00501b58;
  pthread_mutex_lock((pthread_mutex_t *)PTR_linux_hotplug_lock_00501b58);
  pthread_mutex_unlock((pthread_mutex_t *)__mutex);
  DAT_00531e48 = DAT_00531e48 + 1;
  pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531e20);
  uVar7 = 0;
LAB_001950a8:
  if (*(long *)(lVar2 + 0x28) != lVar9) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar7);
  }
  return;
}


==================================================================

### FUNC 001951e8 (60 bytes) name=FUN_001951e8

int FUN_001951e8(void)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)&DAT_00531e20);
  DAT_00531e48 = DAT_00531e48 + -1;
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00531e20);
  return iVar1;
}


==================================================================

### FUNC 00195224 (4 bytes) name=FUN_00195224

void FUN_00195224(void)

{
  return;
}


==================================================================

### FUNC 00195228 (360 bytes) name=FUN_00195228

int FUN_00195228(undefined8 param_1,long param_2,int param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined1 local_58 [8];
  undefined1 local_50 [4];
  undefined1 local_4c [4];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  iVar2 = linux_get_device_address(param_1,1,local_4c,local_50,0,0,param_3);
  if (iVar2 < 0) {
    iVar2 = ioctl(param_3,0x40085511,local_58);
    if (iVar2 < 0) {
      puVar4 = (undefined4 *)__errno();
      usbi_log(param_1,1,"op_wrap_fd","connectinfo failed (%d)",*puVar4);
      iVar2 = -1;
      goto LAB_00195360;
    }
    local_4c[0] = 0;
    local_50[0] = local_58[0];
  }
  usbi_log(0,4,"op_wrap_fd","allocating new device for fd %d",param_3);
  lVar3 = usbi_alloc_device(param_1,0);
  if (lVar3 == 0) {
    iVar2 = -0xb;
  }
  else {
    iVar2 = FUN_0019465c(lVar3,local_4c[0],local_50[0],0,param_3);
    if (-1 < iVar2) {
      iVar2 = usbi_sanitize_device(lVar3);
      if (-1 < iVar2) {
        *(undefined4 *)(lVar3 + 0x7c) = 1;
        *(long *)(param_2 + 0x40) = lVar3;
        iVar2 = FUN_00196d80(param_2,param_3);
        *(undefined4 *)(param_2 + 0x54) = 1;
        if (-1 < iVar2) goto LAB_00195360;
      }
    }
    libusb_unref_device(lVar3);
  }
LAB_00195360:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 00195390 (184 bytes) name=FUN_00195390

int FUN_00195390(long param_1)

{
  int __fd;
  int iVar1;
  
  __fd = FUN_00196af0(*(undefined8 *)(param_1 + 0x40),2,0);
  if (__fd < 0) {
    iVar1 = __fd;
    if (__fd == -4) {
      pthread_mutex_lock((pthread_mutex_t *)PTR_linux_hotplug_lock_00501b58);
      if (*(int *)(*(long *)(param_1 + 0x40) + 0x7c) != 0) {
        usbi_log(0,4,"op_open","open failed with no device, but device still attached");
        linux_device_disconnected
                  (*(undefined1 *)(*(long *)(param_1 + 0x40) + 0x38),
                   *(undefined1 *)(*(long *)(param_1 + 0x40) + 0x48));
      }
      pthread_mutex_unlock((pthread_mutex_t *)PTR_linux_hotplug_lock_00501b58);
      iVar1 = -4;
    }
  }
  else {
    iVar1 = FUN_00196d80(param_1,__fd);
    if (iVar1 < 0) {
      close(__fd);
    }
  }
  return iVar1;
}


==================================================================

### FUNC 00195448 (84 bytes) name=FUN_00195448

ulong FUN_00195448(ulong param_1)

{
  int iVar1;
  uint uVar2;
  ulong uVar3;
  
  if (*(int *)(param_1 + 0x50) == 0) {
    uVar3 = usbi_remove_pollfd(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),
                               *(undefined4 *)(param_1 + 0x4c));
    iVar1 = *(int *)(param_1 + 0x54);
  }
  else {
    iVar1 = *(int *)(param_1 + 0x54);
    uVar3 = param_1;
  }
  if (iVar1 != 0) {
    return uVar3;
  }
  uVar2 = close(*(int *)(param_1 + 0x4c));
  return (ulong)uVar2;
}


==================================================================

### FUNC 0019549c (64 bytes) name=FUN_0019549c

undefined8 FUN_0019549c(long param_1,undefined8 *param_2,uint *param_3)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  
  *param_3 = (uint)(*(long *)(param_1 + 0x80) == 0 || DAT_00502900 == 0);
  puVar1 = *(undefined8 **)(param_1 + 0x88);
  *(undefined2 *)(param_2 + 2) = *(undefined2 *)(puVar1 + 2);
  uVar2 = *puVar1;
  param_2[1] = puVar1[1];
  *param_2 = uVar2;
  return 0;
}


==================================================================

### FUNC 001954dc (280 bytes) name=FUN_001954dc

ulong FUN_001954dc(long param_1,void *param_2,ulong param_3,undefined4 *param_4)

{
  long lVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  int iVar5;
  size_t __n;
  void *__src;
  int iVar6;
  uint local_5c;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  if ((*(long *)(param_1 + 0x80) == 0) || (DAT_005028fc == 0)) {
    uVar2 = *(uint *)(param_1 + 0x94);
  }
  else {
    uVar3 = FUN_00196e48(param_1,&local_5c);
    __n = uVar3 & 0xffffffff;
    uVar2 = local_5c;
    if ((int)uVar3 < 0) goto LAB_001955c0;
  }
  local_5c = uVar2;
  if (uVar2 == 0xffffffff) {
    __n = 0xfffffffb;
  }
  else {
    lVar4 = *(long *)(param_1 + 0x88);
    iVar6 = *(int *)(param_1 + 0x90);
    *param_4 = 0;
    __src = (void *)(lVar4 + 0x12);
    iVar6 = iVar6 + -0x12;
    while( true ) {
      uVar3 = FUN_00197048(param_1,__src,iVar6);
      __n = uVar3 & 0xffffffff;
      iVar5 = (int)uVar3;
      if (iVar5 < 0) break;
      if ((uint)*(byte *)((long)__src + 5) == (uVar2 & 0xff)) {
        __n = param_3;
        if ((ulong)(long)iVar5 <= param_3) {
          __n = (long)iVar5;
        }
        memcpy(param_2,__src,__n);
        break;
      }
      iVar6 = iVar6 - iVar5;
      __src = (void *)((long)__src + (long)iVar5);
    }
  }
LAB_001955c0:
  if (*(long *)(lVar1 + 0x28) == local_58) {
    return __n & 0xffffffff;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


==================================================================

### FUNC 001955f4 (188 bytes) name=FUN_001955f4

ulong FUN_001955f4(long param_1,uint param_2,void *param_3,ulong param_4,undefined4 *param_5)

{
  ulong uVar1;
  void *__src;
  int iVar2;
  size_t __n;
  int iVar3;
  int iVar4;
  
  __src = (void *)(*(long *)(param_1 + 0x88) + 0x12);
  iVar3 = *(int *)(param_1 + 0x90) + -0x12;
  *param_5 = 0;
  uVar1 = FUN_00197048(param_1,__src,iVar3);
  __n = uVar1 & 0xffffffff;
  if (-1 < (int)uVar1) {
    iVar4 = (param_2 & 0xff) + 1;
    do {
      iVar4 = iVar4 + -1;
      iVar2 = (int)__n;
      if (iVar4 == 0) {
        __n = param_4;
        if ((ulong)(long)iVar2 <= param_4) {
          __n = (long)iVar2;
        }
        memcpy(param_3,__src,__n);
        break;
      }
      iVar3 = iVar3 - iVar2;
      __src = (void *)((long)__src + (long)iVar2);
      uVar1 = FUN_00197048(param_1,__src,iVar3);
      __n = uVar1 & 0xffffffff;
    } while (-1 < (int)uVar1);
  }
  return __n & 0xffffffff;
}


==================================================================

### FUNC 001956b0 (124 bytes) name=FUN_001956b0

void FUN_001956b0(long param_1,char param_2,long *param_3,undefined4 *param_4)

{
  int iVar1;
  long lVar2;
  int iVar3;
  
  lVar2 = *(long *)(param_1 + 0x88) + 0x12;
  iVar3 = *(int *)(param_1 + 0x90) + -0x12;
  *param_3 = 0;
  *param_4 = 0;
  while( true ) {
    iVar1 = FUN_00197048(param_1,lVar2,iVar3);
    if (iVar1 < 0) {
      return;
    }
    if (*(char *)(lVar2 + 5) == param_2) break;
    iVar3 = iVar3 - iVar1;
    lVar2 = lVar2 + iVar1;
  }
  *param_3 = lVar2;
  return;
}


==================================================================

### FUNC 0019572c (176 bytes) name=FUN_0019572c

undefined8 FUN_0019572c(long param_1,int *param_2)

{
  int iVar1;
  undefined8 uVar2;
  long lVar3;
  
  lVar3 = *(long *)(param_1 + 0x40);
  if (*(long *)(lVar3 + 0x80) == 0 || DAT_005028fc == 0) {
    uVar2 = FUN_00196c88(lVar3,*(undefined4 *)(param_1 + 0x4c));
    if ((int)uVar2 == 0) {
      iVar1 = *(int *)(lVar3 + 0x94);
      *param_2 = iVar1;
      goto joined_r0x001957c4;
    }
  }
  else {
    uVar2 = FUN_00196e48(lVar3,param_2);
  }
  if ((int)uVar2 < 0) {
    return uVar2;
  }
  iVar1 = *param_2;
joined_r0x001957c4:
  if (iVar1 == -1) {
    usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_get_configuration",
             "device unconfigured");
    *param_2 = 0;
  }
  return 0;
}


==================================================================

### FUNC 001957dc (220 bytes) name=FUN_001957dc

void FUN_001957dc(long param_1,undefined4 param_2)

{
  int iVar1;
  long lVar2;
  int iVar3;
  undefined4 uVar4;
  int *piVar5;
  long lVar6;
  undefined4 local_3c;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  lVar6 = *(long *)(param_1 + 0x40);
  local_3c = param_2;
  iVar3 = ioctl(*(int *)(param_1 + 0x4c),0x80045505,&local_3c);
  if (iVar3 == 0) {
    *(undefined4 *)(lVar6 + 0x94) = local_3c;
    uVar4 = 0;
  }
  else {
    piVar5 = (int *)__errno();
    iVar1 = *piVar5;
    if (iVar1 == 0x16) {
      uVar4 = 0xfffffffb;
    }
    else if (iVar1 == 0x13) {
      uVar4 = 0xfffffffc;
    }
    else if (iVar1 == 0x10) {
      uVar4 = 0xfffffffa;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_set_configuration",
               "failed, error %d errno %d",iVar3);
      uVar4 = 0xffffff9d;
    }
  }
  if (*(long *)(lVar2 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 001958b8 (224 bytes) name=FUN_001958b8

void FUN_001958b8(long param_1,undefined4 param_2)

{
  int iVar1;
  long lVar2;
  uint uVar3;
  ulong uVar4;
  int *piVar5;
  undefined4 local_3c;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  if (*(int *)(param_1 + 0x48) == 0) {
    local_3c = param_2;
    uVar3 = ioctl(*(int *)(param_1 + 0x4c),0x8004550f,&local_3c);
    uVar4 = (ulong)uVar3;
    if (uVar3 != 0) {
      piVar5 = (int *)__errno();
      iVar1 = *piVar5;
      if (iVar1 == 2) {
        uVar4 = 0xfffffffb;
      }
      else if (iVar1 == 0x13) {
        uVar4 = 0xfffffffc;
      }
      else if (iVar1 == 0x10) {
        uVar4 = 0xfffffffa;
      }
      else {
        usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"claim_interface",
                 "claim interface failed, error %d errno %d",uVar3);
        uVar4 = 0xffffff9d;
      }
    }
  }
  else {
    uVar4 = FUN_00197280(param_1);
  }
  if (*(long *)(lVar2 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00195998 (312 bytes) name=FUN_00195998

void FUN_00195998(long param_1,undefined4 param_2)

{
  long lVar1;
  int iVar2;
  int *piVar3;
  undefined8 uVar4;
  uint *puVar5;
  undefined4 local_48;
  undefined4 uStack_44;
  undefined8 local_40;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  local_48 = param_2;
  iVar2 = ioctl(*(int *)(param_1 + 0x4c),0x80045510,&local_48);
  if (iVar2 == 0) {
    if (*(int *)(param_1 + 0x48) != 0) {
      uStack_44 = 0x5517;
      local_40 = 0;
      local_48 = param_2;
      iVar2 = ioctl(*(int *)(param_1 + 0x4c),0xc0105512,&local_48);
      if (iVar2 < 0) {
        puVar5 = (uint *)__errno();
        if ((0x3d < *puVar5) || ((1L << ((ulong)*puVar5 & 0x3f) & 0x2000000000490000U) == 0)) {
          usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_attach_kernel_driver",
                   "attach failed error %d errno %d",iVar2);
        }
      }
    }
    uVar4 = 0;
  }
  else {
    piVar3 = (int *)__errno();
    if (*piVar3 == 0x13) {
      uVar4 = 0xfffffffc;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"release_interface",
               "release interface failed, error %d errno %d",iVar2);
      uVar4 = 0xffffff9d;
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00195ad0 (188 bytes) name=FUN_00195ad0

void FUN_00195ad0(long param_1,undefined4 param_2,undefined4 param_3)

{
  long lVar1;
  int iVar2;
  undefined4 uVar3;
  int *piVar4;
  undefined4 local_40;
  undefined4 uStack_3c;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  local_40 = param_2;
  uStack_3c = param_3;
  iVar2 = ioctl(*(int *)(param_1 + 0x4c),0x80085504,&local_40);
  uVar3 = 0;
  if (iVar2 != 0) {
    piVar4 = (int *)__errno();
    if (*piVar4 == 0x16) {
      uVar3 = 0xfffffffb;
    }
    else if (*piVar4 == 0x13) {
      uVar3 = 0xfffffffc;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_set_interface",
               "setintf failed error %d errno %d",iVar2);
      uVar3 = 0xffffff9d;
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 00195b8c (192 bytes) name=FUN_00195b8c

void FUN_00195b8c(long param_1,uint param_2)

{
  long lVar1;
  int iVar2;
  undefined4 uVar3;
  int *piVar4;
  uint local_3c;
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  local_3c = param_2 & 0xff;
  iVar2 = ioctl(*(int *)(param_1 + 0x4c),0x80045515,&local_3c);
  uVar3 = 0;
  if (iVar2 != 0) {
    piVar4 = (int *)__errno();
    if (*piVar4 == 2) {
      uVar3 = 0xfffffffb;
    }
    else if (*piVar4 == 0x13) {
      uVar3 = 0xfffffffc;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_clear_halt",
               "clear_halt failed error %d errno %d",iVar2);
      uVar3 = 0xffffff9d;
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar3);
}


==================================================================

### FUNC 00195c4c (464 bytes) name=FUN_00195c4c

undefined4 FUN_00195c4c(pthread_mutex_t *param_1)

{
  long lVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined8 uVar7;
  ulong uVar8;
  ulong uVar9;
  undefined4 local_5c;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  iVar3 = *(int *)((long)param_1 + 0x4c);
  uVar8 = 0;
  do {
    if ((param_1[1].__align & 1L << (uVar8 & 0x3f)) != 0) {
      local_5c = (undefined4)uVar8;
      iVar2 = ioctl(*(int *)((long)param_1 + 0x4c),0x80045510,&local_5c);
      if ((iVar2 != 0) && (piVar4 = (int *)__errno(), *piVar4 != 0x13)) {
        usbi_log(*(undefined8 *)(*(long *)((long)param_1 + 0x40) + 0x30),1,"release_interface",
                 "release interface failed, error %d errno %d",iVar2);
      }
    }
    uVar8 = uVar8 + 1;
  } while (uVar8 != 0x20);
  pthread_mutex_lock(param_1);
  iVar3 = ioctl(iVar3,0x5514,0);
  if (iVar3 == 0) {
    uVar8 = 0;
    uVar6 = 0;
    do {
      uVar9 = 1L << (uVar8 & 0x3f);
      if (((param_1[1].__align & uVar9) != 0) &&
         (iVar3 = FUN_00197280(param_1,uVar8 & 0xffffffff), iVar3 != 0)) {
        uVar7 = *(undefined8 *)(*(long *)((long)param_1 + 0x40) + 0x30);
        uVar5 = libusb_error_name();
        usbi_log(uVar7,2,"op_reset_device","failed to re-claim interface %d after reset: %s",
                 uVar8 & 0xffffffff,uVar5);
        uVar6 = 0xfffffffb;
        param_1[1].__align = param_1[1].__align & (uVar9 ^ 0xffffffffffffffff);
      }
      uVar8 = uVar8 + 1;
    } while (uVar8 != 0x20);
  }
  else {
    piVar4 = (int *)__errno();
    if (*piVar4 == 0x13) {
      uVar6 = 0xfffffffb;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)((long)param_1 + 0x40) + 0x30),1,"op_reset_device",
               "reset failed error %d errno %d",iVar3);
      uVar6 = 0xffffff9d;
    }
  }
  iVar3 = pthread_mutex_unlock(param_1);
  if (*(long *)(lVar1 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(iVar3);
  }
  return uVar6;
}


==================================================================

### FUNC 00195e1c (36 bytes) name=FUN_00195e1c

void FUN_00195e1c(undefined8 param_1,undefined4 param_2,undefined8 param_3,undefined4 param_4)

{
  FUN_00197400(param_1,0x8008551c,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00195e40 (32 bytes) name=FUN_00195e40

void FUN_00195e40(undefined8 param_1,undefined8 param_2,undefined4 param_3)

{
  FUN_00197400(param_1,0x8008551d,0,param_2,param_3);
  return;
}


==================================================================

### FUNC 00195e60 (108 bytes) name=FUN_00195e60

void * FUN_00195e60(long param_1,size_t param_2)

{
  void *pvVar1;
  undefined4 *puVar2;
  undefined8 uVar3;
  
  pvVar1 = mmap((void *)0x0,param_2,3,1,*(int *)(param_1 + 0x4c),0);
  if (pvVar1 == (void *)0xffffffffffffffff) {
    uVar3 = *(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30);
    puVar2 = (undefined4 *)__errno();
    usbi_log(uVar3,1,"op_dev_mem_alloc","alloc dev mem failed errno %d",*puVar2);
    pvVar1 = (void *)0x0;
  }
  return pvVar1;
}


==================================================================

### FUNC 00195ecc (92 bytes) name=FUN_00195ecc

undefined4 FUN_00195ecc(long param_1,void *param_2,size_t param_3)

{
  int iVar1;
  undefined4 uVar2;
  undefined4 *puVar3;
  undefined8 uVar4;
  
  iVar1 = munmap(param_2,param_3);
  uVar2 = 0;
  if (iVar1 != 0) {
    uVar4 = *(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30);
    puVar3 = (undefined4 *)__errno();
    usbi_log(uVar4,1,"op_dev_mem_free","free dev mem failed errno %d",*puVar3);
    uVar2 = 0xffffff9d;
  }
  return uVar2;
}


==================================================================

### FUNC 00195f28 (228 bytes) name=FUN_00195f28

void FUN_00195f28(long param_1,undefined4 param_2)

{
  long lVar1;
  int iVar2;
  int *piVar3;
  ulong uVar4;
  undefined4 local_150 [66];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  local_150[0] = param_2;
  iVar2 = ioctl(*(int *)(param_1 + 0x4c),0x41045508,local_150);
  if (iVar2 == 0) {
    iVar2 = strcmp((char *)((ulong)local_150 | 4),"usbfs");
    uVar4 = (ulong)(iVar2 != 0);
  }
  else {
    piVar3 = (int *)__errno();
    if (*piVar3 == 0x3d) {
      uVar4 = 0;
    }
    else if (*piVar3 == 0x13) {
      uVar4 = 0xfffffffc;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_kernel_driver_active",
               "get driver failed error %d errno %d",iVar2);
      uVar4 = 0xffffff9d;
    }
  }
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 0019600c (276 bytes) name=FUN_0019600c

void FUN_0019600c(long param_1,undefined4 param_2)

{
  long lVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  int *piVar5;
  undefined4 local_160;
  undefined4 uStack_15c;
  undefined8 local_158;
  undefined4 local_150 [66];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  iVar3 = *(int *)(param_1 + 0x4c);
  uStack_15c = 0x5516;
  local_158 = 0;
  local_160 = param_2;
  local_150[0] = param_2;
  iVar2 = ioctl(iVar3,0x41045508,local_150);
  if ((iVar2 != 0) || (iVar2 = strcmp((char *)((ulong)local_150 | 4),"usbfs"), iVar2 != 0)) {
    iVar3 = ioctl(iVar3,0xc0105512,&local_160);
    uVar4 = 0;
    if (iVar3 == 0) goto LAB_001960f4;
    piVar5 = (int *)__errno();
    iVar2 = *piVar5;
    if (iVar2 == 0x13) {
      uVar4 = 0xfffffffc;
      goto LAB_001960f4;
    }
    if (iVar2 != 0x3d) {
      if (iVar2 == 0x16) {
        uVar4 = 0xfffffffe;
      }
      else {
        usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_detach_kernel_driver",
                 "detach failed error %d errno %d",iVar3);
        uVar4 = 0xffffff9d;
      }
      goto LAB_001960f4;
    }
  }
  uVar4 = 0xfffffffb;
LAB_001960f4:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00196120 (252 bytes) name=FUN_00196120

void FUN_00196120(long param_1,undefined4 param_2)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int *piVar4;
  undefined4 uVar5;
  undefined4 local_48;
  undefined4 uStack_44;
  undefined8 local_40;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  uStack_44 = 0x5517;
  local_40 = 0;
  local_48 = param_2;
  iVar3 = ioctl(*(int *)(param_1 + 0x4c),0xc0105512,&local_48);
  if (-1 < iVar3) {
    uVar5 = 0xfffffffb;
    if (iVar3 != 0) {
      uVar5 = 0;
    }
    goto LAB_00196178;
  }
  piVar4 = (int *)__errno();
  iVar1 = *piVar4;
  if (iVar1 < 0x16) {
    if (iVar1 == 0x10) {
      uVar5 = 0xfffffffa;
      goto LAB_00196178;
    }
    if (iVar1 == 0x13) {
      uVar5 = 0xfffffffc;
      goto LAB_00196178;
    }
  }
  else {
    if (iVar1 == 0x3d) {
      uVar5 = 0xfffffffb;
      goto LAB_00196178;
    }
    if (iVar1 == 0x16) {
      uVar5 = 0xfffffffe;
      goto LAB_00196178;
    }
  }
  usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"op_attach_kernel_driver",
           "attach failed error %d errno %d",iVar3);
  uVar5 = 0xffffff9d;
LAB_00196178:
  if (*(long *)(lVar2 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar5);
  }
  return;
}


==================================================================

### FUNC 0019621c (60 bytes) name=FUN_0019621c

void FUN_0019621c(long param_1)

{
  if (*(void **)(param_1 + 0x88) != (void *)0x0) {
    free(*(void **)(param_1 + 0x88));
  }
  if (*(void **)(param_1 + 0x80) != (void *)0x0) {
    free(*(void **)(param_1 + 0x80));
    return;
  }
  return;
}


==================================================================

### FUNC 00196258 (1384 bytes) name=FUN_00196258

ulong FUN_00196258(int *param_1)

{
  undefined8 *puVar1;
  long *plVar2;
  long lVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  undefined1 uVar7;
  int iVar8;
  int iVar9;
  ulong uVar10;
  long *__ptr;
  undefined1 *puVar11;
  int *piVar12;
  undefined8 uVar13;
  void *pvVar14;
  int iVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  uint *puVar19;
  ulong uVar20;
  int *piVar21;
  ulong uVar22;
  int iVar23;
  size_t __nmemb;
  long *plVar24;
  long lVar25;
  long lVar26;
  uint uVar27;
  long lVar28;
  int iVar29;
  
  switch(*(undefined1 *)((long)param_1 + 0x7a)) {
  case 0:
    iVar8 = *param_1;
    plVar24 = (long *)(param_1 + 0x1c);
    lVar25 = *plVar24;
    if (0x1000 < (long)param_1[0x21] - 8U) goto LAB_001963fc;
    puVar11 = calloc(1,0x38);
    if (puVar11 == (undefined1 *)0x0) goto LAB_00196600;
    puVar1 = (undefined8 *)((long)plVar24 + (long)iVar8 * 0xc + 0x40);
    *puVar1 = puVar11;
    *(undefined8 *)((long)plVar24 + (long)iVar8 * 0xc + 0x48) = 0x100000000;
    *(int **)(puVar11 + 0x30) = param_1;
    *puVar11 = 2;
    puVar11[1] = *(undefined1 *)((long)param_1 + 0x79);
    *(undefined8 *)(puVar11 + 0x10) = *(undefined8 *)(param_1 + 0x28);
    *(int *)(puVar11 + 0x18) = param_1[0x21];
    iVar8 = ioctl(*(int *)(lVar25 + 0x4c),0x8038550a,puVar11);
    if (iVar8 < 0) {
      free(puVar11);
      *puVar1 = 0;
      piVar12 = (int *)__errno();
      if (*piVar12 == 0x13) {
        uVar27 = 0xfffffffc;
      }
      else {
        usbi_log(*(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30),1,
                 "submit_control_transfer","submiturb failed error %d errno=%d",iVar8);
        uVar27 = 0xffffffff;
      }
      goto LAB_001966ec;
    }
    break;
  case 1:
    iVar8 = *param_1;
    plVar24 = (long *)(param_1 + 0x1c);
    lVar28 = *plVar24;
    lVar25 = *(long *)(param_1 + 0x28);
    if (param_1[0x2a] < 1) {
      iVar23 = 1;
    }
    else {
      lVar18 = 0;
      uVar27 = 0;
      puVar19 = (uint *)(param_1 + 0x2b);
      iVar23 = 1;
      do {
        uVar4 = *puVar19;
        if (0x600000 - uVar27 < uVar4) {
          if (0x600000 < (int)uVar4) goto LAB_001963fc;
          iVar23 = iVar23 + 1;
          uVar27 = uVar4;
        }
        else {
          uVar27 = uVar4 + uVar27;
        }
        lVar18 = lVar18 + 1;
        puVar19 = puVar19 + 3;
      } while (lVar18 < param_1[0x2a]);
    }
    usbi_log(0,4,"submit_iso_transfer","need %d %dk URBs for transfer",iVar23,0x1800);
    __nmemb = (size_t)iVar23;
    __ptr = calloc(__nmemb,8);
    if (__ptr == (long *)0x0) {
LAB_00196600:
      uVar27 = 0xfffffff5;
      goto LAB_001966ec;
    }
    plVar2 = (long *)((long)plVar24 + (long)iVar8 * 0xc + 0x40);
    *plVar2 = (long)__ptr;
    *(undefined4 *)((long)plVar24 + (long)iVar8 * 0xc + 0x48) = 0;
    *(int *)((long)plVar24 + (long)iVar8 * 0xc + 0x4c) = iVar23;
    *(undefined4 *)((long)plVar24 + (long)iVar8 * 0xc + 0x50) = 0;
    *(undefined4 *)((long)plVar24 + (long)iVar8 * 0xc + 0x58) = 0;
    if (0 < iVar23) {
      iVar9 = param_1[0x2a];
      lVar18 = 0;
      iVar15 = 0;
      do {
        iVar29 = 0;
        lVar26 = lVar25;
        if (iVar15 < iVar9) {
          lVar16 = (long)iVar15;
          uVar27 = 0x600000;
          puVar19 = (uint *)(param_1 + (long)iVar15 * 3 + 0x2b);
          do {
            uVar4 = *puVar19;
            if (uVar27 < uVar4) break;
            lVar16 = lVar16 + 1;
            iVar29 = iVar29 + 1;
            uVar27 = uVar27 - uVar4;
            lVar26 = lVar26 + (ulong)uVar4;
            puVar19 = puVar19 + 3;
          } while (lVar16 < iVar9);
          iVar15 = (int)lVar16;
        }
        puVar11 = calloc(1,(long)iVar29 * 0xc + 0x38);
        if (puVar11 == (undefined1 *)0x0) {
          pvVar14 = (void *)*__ptr;
          if (pvVar14 == (void *)0x0) goto LAB_001966dc;
          lVar25 = 1;
          goto LAB_00196620;
        }
        __ptr[lVar18] = (long)puVar11;
        if (0 < iVar29) {
          lVar16 = (long)(iVar15 - iVar29);
          lVar17 = (long)iVar15;
          lVar3 = lVar17;
          if (lVar17 < lVar16 + 1) {
            lVar3 = lVar16 + 1;
          }
          uVar10 = lVar3 - lVar16;
          if (uVar10 < 2) {
            uVar20 = 0;
          }
          else {
            uVar20 = uVar10 & 0xfffffffffffffffe;
            if (uVar20 != 0) {
              piVar12 = param_1 + lVar16 * 3 + 0x2b;
              piVar21 = (int *)(puVar11 + 0x44);
              uVar22 = uVar20;
              do {
                iVar5 = *piVar12;
                iVar6 = piVar12[3];
                piVar12 = piVar12 + 6;
                uVar22 = uVar22 - 2;
                piVar21[-3] = iVar5;
                *piVar21 = iVar6;
                piVar21 = piVar21 + 6;
              } while (uVar22 != 0);
              lVar16 = uVar20 + lVar16;
              if (uVar10 == uVar20) goto LAB_0019659c;
            }
          }
          piVar12 = (int *)(puVar11 + uVar20 * 0xc + 0x38);
          piVar21 = param_1 + lVar16 * 3 + 0x2b;
          do {
            lVar16 = lVar16 + 1;
            *piVar12 = *piVar21;
            piVar12 = piVar12 + 3;
            piVar21 = piVar21 + 3;
          } while (lVar16 < lVar17);
        }
LAB_0019659c:
        *(int **)(puVar11 + 0x30) = param_1;
        *puVar11 = 0;
        *(undefined4 *)(puVar11 + 8) = 2;
        uVar7 = *(undefined1 *)((long)param_1 + 0x79);
        lVar18 = lVar18 + 1;
        *(int *)(puVar11 + 0x24) = iVar29;
        puVar11[1] = uVar7;
        *(long *)(puVar11 + 0x10) = lVar25;
        lVar25 = lVar26;
      } while (lVar18 < (long)__nmemb);
      uVar10 = 0;
      do {
        iVar9 = ioctl(*(int *)(lVar28 + 0x4c),0x8038550a,__ptr[uVar10]);
        if (iVar9 < 0) {
          piVar12 = (int *)__errno();
          if (*piVar12 == 0x13) {
            uVar27 = 0xfffffffc;
          }
          else {
            uVar13 = *(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30);
            if (*piVar12 == 0x16) {
              usbi_log(uVar13,2,"submit_iso_transfer","submiturb failed, transfer too large");
              uVar27 = 0xfffffffe;
            }
            else {
              usbi_log(uVar13,1,"submit_iso_transfer","submiturb failed error %d errno=%d",iVar9);
              uVar27 = 0xffffffff;
            }
          }
          if ((int)uVar10 == 0) {
            usbi_log(0,4,"submit_iso_transfer","first URB failed, easy peasy");
            if (*(int *)((long)plVar24 + (long)iVar8 * 0xc + 0x4c) < 1) goto LAB_00196790;
            lVar25 = 0;
            goto LAB_00196770;
          }
          *(undefined4 *)((long)plVar24 + (long)iVar8 * 0xc + 0x48) = 1;
          *(int *)((long)plVar24 + (long)iVar8 * 0xc + 0x50) = iVar23 - (int)uVar10;
          FUN_001978b0(param_1,0,uVar10 & 0xffffffff);
          usbi_log(0,4,"submit_iso_transfer",
                   "reporting successful submission but waiting for %d discards before reporting error"
                   ,uVar10 & 0xffffffff);
          uVar27 = 0;
          break;
        }
        uVar10 = uVar10 + 1;
        uVar27 = 0;
      } while ((long)uVar10 < (long)__nmemb);
      goto LAB_001966ec;
    }
    break;
  case 2:
  case 3:
  case 4:
    uVar10 = FUN_00197504(param_1);
    return uVar10;
  default:
    usbi_log(*(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30),1,
             "op_submit_transfer","unknown endpoint type %d");
LAB_001963fc:
    uVar27 = 0xfffffffe;
    goto LAB_001966ec;
  }
  uVar27 = 0;
  goto LAB_001966ec;
  while( true ) {
    __ptr = (long *)*plVar2;
    pvVar14 = (void *)__ptr[lVar25];
    lVar25 = lVar25 + 1;
    if (pvVar14 == (void *)0x0) break;
LAB_00196620:
    free(pvVar14);
    if (*(int *)((long)plVar24 + (long)iVar8 * 0xc + 0x4c) <= lVar25) {
      __ptr = (long *)*plVar2;
      break;
    }
  }
LAB_001966dc:
  free(__ptr);
  *plVar2 = 0;
  uVar27 = 0xfffffff5;
  goto LAB_001966ec;
  while( true ) {
    free(pvVar14);
    lVar25 = lVar25 + 1;
    if (*(int *)((long)plVar24 + (long)iVar8 * 0xc + 0x4c) <= lVar25) break;
LAB_00196770:
    pvVar14 = *(void **)(*plVar2 + lVar25 * 8);
    if (pvVar14 == (void *)0x0) break;
  }
LAB_00196790:
  free((void *)*plVar2);
  *plVar2 = 0;
LAB_001966ec:
  return (ulong)uVar27;
}


==================================================================

### FUNC 001967c0 (132 bytes) name=FUN_001967c0

undefined8 FUN_001967c0(int *param_1)

{
  int iVar1;
  undefined8 uVar2;
  
  iVar1 = *param_1;
  if (*(long *)(param_1 + (long)iVar1 * 3 + 0x2c) == 0) {
    uVar2 = 0xfffffffb;
  }
  else {
    uVar2 = FUN_001978b0(param_1,0,param_1[(long)iVar1 * 3 + 0x2f]);
    if ((int)uVar2 == 0) {
      if (((*(char *)((long)param_1 + 0x7a) == '\x02') ||
          (*(char *)((long)param_1 + 0x7a) == '\x04')) && (param_1[(long)iVar1 * 3 + 0x2e] == 4)) {
        uVar2 = 0;
      }
      else {
        uVar2 = 0;
        param_1[(long)iVar1 * 3 + 0x2e] = 2;
      }
    }
  }
  return uVar2;
}


==================================================================

### FUNC 00196844 (208 bytes) name=FUN_00196844

void FUN_00196844(int *param_1)

{
  long *plVar1;
  byte bVar2;
  int iVar3;
  long *__ptr;
  void *__ptr_00;
  long lVar4;
  
  iVar3 = *param_1;
  bVar2 = *(byte *)((long)param_1 + 0x7a);
  plVar1 = (long *)(param_1 + (long)iVar3 * 3 + 0x2c);
  if (2 < bVar2 - 2) {
    if (bVar2 == 1) {
      __ptr = (long *)*plVar1;
      if (__ptr == (long *)0x0) {
        return;
      }
      if ((0 < param_1[(long)iVar3 * 3 + 0x2f]) &&
         (__ptr_00 = (void *)*__ptr, __ptr_00 != (void *)0x0)) {
        lVar4 = 1;
        do {
          free(__ptr_00);
          if (param_1[(long)iVar3 * 3 + 0x2f] <= lVar4) {
            __ptr = (long *)*plVar1;
            break;
          }
          __ptr = (long *)*plVar1;
          __ptr_00 = (void *)__ptr[lVar4];
          lVar4 = lVar4 + 1;
        } while (__ptr_00 != (void *)0x0);
      }
      goto LAB_00196884;
    }
    if (bVar2 != 0) {
      usbi_log(*(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30),1,
               "op_clear_transfer_priv","unknown endpoint type %d");
      return;
    }
  }
  __ptr = (long *)*plVar1;
  if (__ptr == (long *)0x0) {
    return;
  }
LAB_00196884:
  free(__ptr);
  *plVar1 = 0;
  return;
}


==================================================================

### FUNC 00196914 (436 bytes) name=FUN_00196914

int FUN_00196914(long param_1,long param_2,uint param_3,int param_4)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x58));
  iVar2 = 0;
  if ((param_4 < 1) || (param_3 == 0)) {
LAB_00196a9c:
    pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x58));
    return iVar2;
  }
  uVar6 = 0;
LAB_001969e8:
  piVar1 = (int *)(param_2 + uVar6 * 8);
  if (*(ushort *)((long)piVar1 + 6) != 0) {
    param_4 = param_4 + -1;
    if (*(long *)(param_1 + 0x50) != param_1 + 0x48) {
      lVar5 = *(long *)(param_1 + 0x50) + -0x30;
      do {
        lVar4 = lVar5;
        lVar5 = lVar4;
        if (*(int *)(lVar4 + 0x4c) == *piVar1) break;
        lVar5 = *(long *)(lVar4 + 0x38) + -0x30;
      } while (*(long *)(lVar4 + 0x38) != param_1 + 0x48);
      if (*(int *)(lVar4 + 0x4c) == *piVar1) {
        if ((*(ushort *)((long)piVar1 + 6) >> 3 & 1) != 0) {
          usbi_remove_pollfd(*(undefined8 *)(*(long *)(lVar5 + 0x40) + 0x30));
          *(undefined4 *)(lVar4 + 0x50) = 1;
          pthread_mutex_lock((pthread_mutex_t *)PTR_linux_hotplug_lock_00501b58);
          lVar3 = *(long *)(lVar5 + 0x40);
          if (*(int *)(lVar3 + 0x7c) != 0) {
            linux_device_disconnected(*(undefined1 *)(lVar3 + 0x38),*(undefined1 *)(lVar3 + 0x48));
          }
          pthread_mutex_unlock((pthread_mutex_t *)PTR_linux_hotplug_lock_00501b58);
          if ((*(byte *)(lVar4 + 0x58) >> 4 & 1) != 0) {
            do {
              iVar2 = FUN_00197a04(lVar5);
            } while (iVar2 == 0);
          }
          usbi_handle_disconnect(lVar5);
          goto LAB_00196a84;
        }
        do {
          iVar2 = FUN_00197a04(lVar5);
        } while (iVar2 == 0);
        if (((iVar2 != -4) && (iVar2 != 1)) && (iVar2 < 0)) goto LAB_00196a9c;
        goto LAB_00196a84;
      }
    }
    usbi_log(param_1,1,"op_handle_events","cannot find handle for fd %d");
  }
LAB_00196a84:
  iVar2 = 0;
  if ((param_4 < 1) || (uVar6 = uVar6 + 1, param_3 <= uVar6)) goto LAB_00196a9c;
  goto LAB_001969e8;
}


==================================================================

### FUNC 00196ac8 (40 bytes) name=FUN_00196ac8

int FUN_00196ac8(int param_1,timespec *param_2)

{
  int iVar1;
  
  if (param_1 == 1) {
    iVar1 = clock_gettime(0,param_2);
    return iVar1;
  }
  if (param_1 == 0) {
    iVar1 = clock_gettime(DAT_00502904,param_2);
    return iVar1;
  }
  return -2;
}


==================================================================

### FUNC 00196af0 (408 bytes) name=FUN_00196af0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00196af0(long param_1,int param_2,int param_3)

{
  long lVar1;
  int iVar2;
  int *piVar3;
  char *pcVar4;
  int iVar5;
  undefined8 uVar6;
  timespec local_1060;
  char acStack_1048 [4096];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  uVar6 = *(undefined8 *)(param_1 + 0x30);
  if (DAT_00531e10 == '\x01') {
    pcVar4 = "%s/usbdev%d.%d";
  }
  else {
    pcVar4 = "%s/%03d/%03d";
  }
  snprintf(acStack_1048,0x1000,pcVar4,DAT_00531e18,(ulong)*(byte *)(param_1 + 0x38),
           (ulong)*(byte *)(param_1 + 0x48));
  iVar2 = open(acStack_1048,param_2);
  if (iVar2 == -1) {
    piVar3 = (int *)__errno();
    if (*piVar3 == 2) {
      if (param_3 == 0) {
        usbi_log(uVar6,1,"_get_usbfs_fd","File doesn\'t exist, wait %d ms and try again",10);
      }
      local_1060.tv_nsec = _UNK_0043c3c8;
      local_1060.tv_sec = _DAT_0043c3c0;
      nanosleep(&local_1060,(timespec *)0x0);
      iVar2 = open(acStack_1048,param_2);
      if (iVar2 != -1) goto LAB_00196c58;
    }
    if (param_3 == 0) {
      pcVar4 = strerror(*piVar3);
      usbi_log(uVar6,1,"_get_usbfs_fd","libusb couldn\'t open USB device %s: %s",acStack_1048,pcVar4
              );
      if ((param_2 == 2) && (*piVar3 == 0xd)) {
        usbi_log(uVar6,1,"_get_usbfs_fd","libusb requires write access to USB device nodes.");
      }
    }
    iVar5 = -4;
    if (*piVar3 != 2) {
      iVar5 = -1;
    }
    iVar2 = -3;
    if (*piVar3 != 0xd) {
      iVar2 = iVar5;
    }
  }
LAB_00196c58:
  if (*(long *)(lVar1 + 0x28) != local_48) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(iVar2);
  }
  return;
}


==================================================================

### FUNC 00196c88 (248 bytes) name=FUN_00196c88

void FUN_00196c88(long param_1,int param_2)

{
  long lVar1;
  int iVar2;
  int *piVar3;
  undefined8 uVar4;
  uint uVar5;
  undefined8 local_58;
  undefined4 local_50;
  byte *local_48;
  byte local_3c [4];
  long local_38;
  
  lVar1 = tpidr_el0;
  local_38 = *(long *)(lVar1 + 0x28);
  local_48 = local_3c;
  local_3c[0] = 0;
  local_58 = 0x1000000000880;
  local_50 = 1000;
  iVar2 = ioctl(param_2,0xc0185500,&local_58);
  if (iVar2 < 0) {
    piVar3 = (int *)__errno();
    if (*piVar3 == 0x13) {
      uVar4 = 0xfffffffc;
      goto LAB_00196d58;
    }
    usbi_log(*(undefined8 *)(param_1 + 0x30),2,"usbfs_get_active_config",
             "get_configuration failed ret=%d errno=%d",iVar2);
LAB_00196d4c:
    uVar5 = 0xffffffff;
  }
  else {
    uVar5 = (uint)local_3c[0];
    if (local_3c[0] == 0) {
      usbi_log(*(undefined8 *)(param_1 + 0x30),2,"usbfs_get_active_config",
               "active cfg 0? assuming unconfigured device");
      goto LAB_00196d4c;
    }
  }
  uVar4 = 0;
  *(uint *)(param_1 + 0x94) = uVar5;
LAB_00196d58:
  if (*(long *)(lVar1 + 0x28) == local_38) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00196d80 (200 bytes) name=FUN_00196d80

void FUN_00196d80(long param_1,int param_2)

{
  uint *puVar1;
  bool bVar2;
  int iVar3;
  int *piVar4;
  
  puVar1 = (uint *)(param_1 + 0x58);
  *(int *)(param_1 + 0x4c) = param_2;
  iVar3 = ioctl(param_2,0x8004551a,puVar1);
  if (iVar3 < 0) {
    piVar4 = (int *)__errno();
    if (*piVar4 == 0x19) {
      usbi_log(0,4,"initialize_handle","getcap not available");
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"initialize_handle",
               "getcap failed (%d)");
    }
    bVar2 = DAT_0050290c != 0;
    *puVar1 = (uint)bVar2;
    if (DAT_00502908 != 0) {
      *puVar1 = bVar2 | 2;
    }
  }
  usbi_add_pollfd(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),*(undefined4 *)(param_1 + 0x4c),
                  4);
  return;
}


==================================================================

### FUNC 00196e48 (512 bytes) name=FUN_00196e48

void FUN_00196e48(long param_1,undefined4 *param_2)

{
  long lVar1;
  int iVar2;
  ssize_t sVar3;
  undefined8 uVar4;
  undefined4 *puVar5;
  long lVar6;
  char *pcVar7;
  char local_1050 [8];
  char *local_1048 [512];
  long local_48;
  
  lVar1 = tpidr_el0;
  local_48 = *(long *)(lVar1 + 0x28);
  local_1050[4] = '\0';
  local_1050[0] = '\0';
  local_1050[1] = '\0';
  local_1050[2] = '\0';
  local_1050[3] = '\0';
  snprintf((char *)local_1048,0x1000,"%s/%s/%s","/sys/bus/usb/devices",
           *(undefined8 *)(param_1 + 0x80),"bConfigurationValue");
  iVar2 = open((char *)local_1048,0);
  if (iVar2 < 0) {
    uVar4 = *(undefined8 *)(param_1 + 0x30);
    puVar5 = (undefined4 *)__errno();
    usbi_log(uVar4,1,"_open_sysfs_attr","open %s failed ret=%d errno=%d",local_1048,iVar2,*puVar5);
    uVar4 = 0xffffffff;
  }
  else {
    sVar3 = read(iVar2,local_1050,5);
    iVar2 = close(iVar2);
    if (sVar3 < 0) {
      uVar4 = *(undefined8 *)(param_1 + 0x30);
      puVar5 = (undefined4 *)__errno(iVar2);
      usbi_log(uVar4,1,"sysfs_get_active_config","read bConfigurationValue failed ret=%d errno=%d",
               sVar3,*puVar5);
      uVar4 = 0xffffffff;
    }
    else if (sVar3 == 0) {
      usbi_log(0,4,"sysfs_get_active_config","device unconfigured");
      uVar4 = 0;
      *param_2 = 0xffffffff;
    }
    else {
      if (local_1050[4] == '\0') {
        if (local_1050[0] != '\0') {
          lVar6 = strtol(local_1050,local_1048,10);
          if (local_1048[0] == local_1050) {
            usbi_log(*(undefined8 *)(param_1 + 0x30),1,"sysfs_get_active_config",
                     "error converting \'%s\' to integer",local_1050);
            uVar4 = 0xffffffff;
          }
          else {
            uVar4 = 0;
            *param_2 = (int)lVar6;
          }
          goto LAB_00196fa0;
        }
        uVar4 = *(undefined8 *)(param_1 + 0x30);
        pcVar7 = "no configuration value?";
      }
      else {
        uVar4 = *(undefined8 *)(param_1 + 0x30);
        pcVar7 = "not null-terminated?";
      }
      usbi_log(uVar4,1,"sysfs_get_active_config",pcVar7);
      uVar4 = 0xffffffff;
    }
  }
LAB_00196fa0:
  if (*(long *)(lVar1 + 0x28) == local_48) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar4);
}


==================================================================

### FUNC 00197048 (568 bytes) name=FUN_00197048

uint FUN_00197048(long param_1,long param_2,uint param_3)

{
  long lVar1;
  char *pcVar2;
  ushort uVar3;
  uint uVar4;
  uint uVar5;
  undefined8 uVar6;
  undefined1 uStack_88;
  byte local_87;
  ushort local_86;
  byte local_60;
  char local_5f;
  long local_58;
  
  lVar1 = tpidr_el0;
  local_58 = *(long *)(lVar1 + 0x28);
  if (param_3 == 0) {
    uVar5 = 0xfffffffb;
    goto LAB_00197184;
  }
  uVar6 = *(undefined8 *)(param_1 + 0x30);
  if ((int)param_3 < 9) {
    usbi_log(uVar6,1,"seek_to_next_config","short descriptor read %d/%d",param_3,9);
  }
  else {
    usbi_parse_descriptor(param_2,&DAT_0043ba7c,&uStack_88,0);
    uVar3 = (ushort)local_87;
    if (local_87 == 2) {
      if ((*(long *)(param_1 + 0x80) == 0) || (DAT_00502900 == 0)) {
        if (local_86 < 9) {
          pcVar2 = "invalid wTotalLength %d";
          uVar3 = local_86;
          goto LAB_0019717c;
        }
        uVar5 = (uint)local_86;
        if ((int)uVar5 <= (int)param_3) goto LAB_00197184;
        pcVar2 = "short descriptor read %d/%d";
        uVar4 = param_3;
      }
      else {
        uVar5 = 0;
        uVar4 = param_3;
        do {
          if (uVar4 == 0) {
            uVar5 = 0xfffffffb;
            goto LAB_00197238;
          }
          if ((int)uVar4 < 2) {
            pcVar2 = "short descriptor read %d/2";
            goto LAB_00197230;
          }
          usbi_parse_descriptor(param_2 + (int)uVar5,"bb",&local_60,0);
          if ((uVar5 != 0) && (local_5f == '\x02')) goto LAB_00197238;
          uVar4 = uVar4 - local_60;
          uVar5 = uVar5 + local_60;
        } while (-1 < (int)uVar4);
        uVar4 = -uVar4;
        pcVar2 = "bLength overflow by %d bytes";
LAB_00197230:
        usbi_log(uVar6,1,"seek_to_next_descriptor",pcVar2,uVar4);
        uVar5 = 0xffffffff;
LAB_00197238:
        if (uVar5 != 0xfffffffb) {
          param_3 = uVar5;
        }
        uVar5 = param_3;
        if (((int)param_3 < 0) || (param_3 == local_86)) goto LAB_00197184;
        pcVar2 = "config length mismatch wTotalLength %d real %d";
        uVar4 = (uint)local_86;
      }
      usbi_log(uVar6,2,"seek_to_next_config",pcVar2,uVar4,uVar5);
      uVar5 = param_3;
      goto LAB_00197184;
    }
    pcVar2 = "descriptor is not a config desc (type 0x%02x)";
LAB_0019717c:
    usbi_log(uVar6,1,"seek_to_next_config",pcVar2,uVar3);
  }
  uVar5 = 0xffffffff;
LAB_00197184:
  if (*(long *)(lVar1 + 0x28) != local_58) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar5;
}


==================================================================

### FUNC 00197280 (384 bytes) name=FUN_00197280

void FUN_00197280(long param_1,undefined4 param_2)

{
  int iVar1;
  long lVar2;
  uint uVar3;
  int *piVar4;
  ulong uVar5;
  long lVar6;
  undefined4 local_154;
  undefined4 local_150;
  undefined4 uStack_14c;
  undefined4 local_148;
  undefined2 local_144;
  
  lVar2 = tpidr_el0;
  lVar6 = *(long *)(lVar2 + 0x28);
  local_148 = 0x66627375;
  local_144 = 0x73;
  uStack_14c = 2;
  local_150 = param_2;
  uVar3 = ioctl(*(int *)(param_1 + 0x4c),0x8108551b,&local_150);
  uVar5 = (ulong)uVar3;
  if (uVar3 == 0) goto switchD_00197310_caseD_10;
  piVar4 = (int *)__errno();
  uVar5 = 0xfffffffa;
  switch(*piVar4) {
  case 0x10:
    break;
  default:
    usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"detach_kernel_driver_and_claim",
             "disconnect-and-claim failed errno %d");
    goto LAB_00197344;
  case 0x13:
switchD_00197310_caseD_13:
    uVar5 = 0xfffffffc;
    break;
  case 0x16:
    uVar5 = 0xfffffffe;
    break;
  case 0x19:
    uVar5 = FUN_0019600c(param_1,param_2);
    if (((int)uVar5 != 0) && ((int)uVar5 != -5)) break;
    local_154 = param_2;
    uVar3 = ioctl(*(int *)(param_1 + 0x4c),0x8004550f,&local_154);
    uVar5 = (ulong)uVar3;
    if (uVar3 == 0) break;
    iVar1 = *piVar4;
    if (iVar1 == 2) {
      uVar5 = 0xfffffffb;
      break;
    }
    if (iVar1 == 0x13) goto switchD_00197310_caseD_13;
    if (iVar1 == 0x10) {
      uVar5 = 0xfffffffa;
      break;
    }
    usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"claim_interface",
             "claim interface failed, error %d errno %d",uVar3);
LAB_00197344:
    uVar5 = 0xffffff9d;
  }
switchD_00197310_caseD_10:
  if (*(long *)(lVar2 + 0x28) == lVar6) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar5);
}


==================================================================

### FUNC 00197400 (260 bytes) name=FUN_00197400

int FUN_00197400(long param_1,ulong param_2,undefined4 param_3,void *param_4,int param_5)

{
  int iVar1;
  int iVar2;
  undefined4 *__ptr;
  int *piVar3;
  
  if (param_5 < 0x1f) {
    iVar2 = *(int *)(param_1 + 0x4c);
    __ptr = malloc((long)param_5 + 8);
    if (__ptr == (undefined4 *)0x0) {
      return -0xb;
    }
    *__ptr = param_3;
    __ptr[1] = param_5;
    memcpy(__ptr + 2,param_4,(long)param_5);
    iVar2 = ioctl(iVar2,param_2 & 0xffffffff,__ptr);
    free(__ptr);
    if (-1 < iVar2) {
      return iVar2;
    }
    piVar3 = (int *)__errno();
    iVar1 = *piVar3;
    if (iVar1 == 0x13) {
      return -4;
    }
    if (iVar1 == 0x19) {
      return -0xc;
    }
    if (iVar1 != 0x16) {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"do_streams_ioctl",
               "streams-ioctl failed error %d errno %d",iVar2);
      return -99;
    }
  }
  return -2;
}


==================================================================

### FUNC 00197504 (940 bytes) name=FUN_00197504

undefined4 FUN_00197504(int *param_1)

{
  bool bVar1;
  undefined8 *puVar2;
  uint *puVar3;
  undefined1 *puVar4;
  uint uVar5;
  char cVar6;
  char cVar7;
  int iVar8;
  bool bVar9;
  int iVar10;
  void *__ptr;
  int *piVar11;
  int iVar12;
  long lVar13;
  long *plVar14;
  ulong uVar15;
  int iVar16;
  undefined4 uVar17;
  long lVar18;
  long lVar19;
  ulong uVar20;
  int iVar21;
  
  iVar8 = *param_1;
  plVar14 = (long *)(param_1 + 0x1c);
  lVar13 = *plVar14;
  cVar7 = *(char *)((long)param_1 + 0x79);
  if (((-1 < cVar7) && ((*(byte *)(param_1 + 0x1e) >> 3 & 1) != 0)) &&
     ((*(byte *)(lVar13 + 0x58) & 1) == 0)) {
    return 0xfffffff4;
  }
  uVar5 = *(uint *)(lVar13 + 0x58);
  if ((uVar5 >> 3 & 1) == 0) {
    if ((uVar5 >> 1 & 1) == 0) {
      if ((uVar5 >> 2 & 1) != 0) goto LAB_0019757c;
      bVar9 = false;
    }
    else {
      bVar9 = true;
    }
    iVar21 = 0x4000;
    iVar10 = param_1[0x21];
  }
  else {
LAB_0019757c:
    bVar9 = false;
    iVar21 = param_1[0x21];
    if (iVar21 == 0) {
      iVar21 = 1;
    }
    iVar10 = param_1[0x21];
  }
  if (iVar10 == 0) {
    bVar1 = false;
    iVar16 = 1;
  }
  else {
    iVar16 = 0;
    if (iVar21 != 0) {
      iVar16 = iVar10 / iVar21;
    }
    iVar10 = iVar10 - iVar16 * iVar21;
    bVar1 = 0 < iVar10;
    if (0 < iVar10) {
      iVar16 = iVar16 + 1;
    }
  }
  usbi_log(0,4,"submit_bulk_transfer","need %d urbs for new transfer with length %d",iVar16);
  __ptr = calloc((long)iVar16,0x38);
  if (__ptr == (void *)0x0) {
    uVar17 = 0xfffffff5;
  }
  else {
    uVar20 = (ulong)(iVar16 - 1U);
    puVar2 = (undefined8 *)((long)plVar14 + (long)iVar8 * 0xc + 0x40);
    *puVar2 = __ptr;
    *(undefined4 *)((long)plVar14 + (long)iVar8 * 0xc + 0x48) = 0;
    *(int *)((long)plVar14 + (long)iVar8 * 0xc + 0x4c) = iVar16;
    *(undefined8 *)((long)plVar14 + (long)iVar8 * 0xc + 0x50) = 0;
    if (0 < iVar16) {
      lVar18 = 0;
      lVar19 = 0;
      uVar15 = 0;
      puVar3 = (uint *)((long)__ptr + uVar20 * 0x38 + 8);
      do {
        puVar4 = (undefined1 *)((long)__ptr + lVar19);
        *(int **)(puVar4 + 0x30) = param_1;
        cVar6 = *(char *)((long)param_1 + 0x7a);
        if (cVar6 == '\x04') {
          *puVar4 = 3;
          *(int *)(puVar4 + 0x24) = param_1[0xf];
        }
        else if (cVar6 == '\x03') {
          *(undefined1 *)((long)__ptr + lVar19) = 1;
        }
        else if (cVar6 == '\x02') {
          *(undefined1 *)((long)__ptr + lVar19) = 3;
          *(undefined4 *)((undefined1 *)((long)__ptr + lVar19) + 0x24) = 0;
        }
        *(undefined1 *)((long)__ptr + lVar19 + 1) = *(undefined1 *)((long)param_1 + 0x79);
        *(long *)((long)__ptr + lVar19 + 0x10) = *(long *)(param_1 + 0x28) + lVar18;
        if ((long)uVar15 < (long)(int)(iVar16 - 1U) && (cVar7 < '\0' && bVar9)) {
          *(undefined4 *)((long)__ptr + lVar19 + 8) = 1;
        }
        iVar10 = param_1[0x21];
        if ((bVar1) && (uVar20 == uVar15)) {
          iVar12 = 0;
          if (iVar21 != 0) {
            iVar12 = iVar10 / iVar21;
          }
          iVar12 = iVar10 - iVar12 * iVar21;
        }
        else {
          iVar12 = 0;
          if (iVar10 != 0) {
            iVar12 = iVar21;
          }
        }
        *(int *)((long)__ptr + lVar19 + 0x18) = iVar12;
        if ((bVar9) && (0 < (long)uVar15)) {
          *(uint *)((long)__ptr + lVar19 + 8) = *(uint *)((long)__ptr + lVar19 + 8) | 4;
        }
        if (((-1 < cVar7) && (uVar20 == uVar15)) && ((*(byte *)(param_1 + 0x1e) >> 3 & 1) != 0)) {
          *puVar3 = *puVar3 | 0x40;
        }
        iVar10 = ioctl(*(int *)(lVar13 + 0x4c),0x8038550a);
        if (iVar10 < 0) {
          piVar11 = (int *)__errno();
          if (*piVar11 == 0x13) {
            uVar17 = 0xfffffffc;
          }
          else {
            usbi_log(*(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30),1,
                     "submit_bulk_transfer","submiturb failed error %d errno=%d",iVar10);
            uVar17 = 0xffffffff;
          }
          if ((int)uVar15 == 0) {
            usbi_log(0,4,"submit_bulk_transfer","first URB failed, easy peasy");
            free(__ptr);
            *puVar2 = 0;
            return uVar17;
          }
          iVar21 = *(int *)((long)plVar14 + (long)iVar8 * 0xc + 0x50);
          iVar10 = *piVar11;
          uVar17 = 3;
          if (iVar10 != 0x79) {
            uVar17 = 1;
          }
          *(undefined4 *)((long)plVar14 + (long)iVar8 * 0xc + 0x48) = uVar17;
          *(int *)((long)plVar14 + (long)iVar8 * 0xc + 0x50) = (iVar16 + iVar21) - (int)uVar15;
          if (iVar10 != 0x79) {
            FUN_001978b0(param_1,0,uVar15 & 0xffffffff);
            usbi_log(0,4,"submit_bulk_transfer",
                     "reporting successful submission but waiting for %d discards before reporting error"
                     ,uVar15 & 0xffffffff);
          }
          break;
        }
        uVar15 = uVar15 + 1;
        lVar19 = lVar19 + 0x38;
        lVar18 = lVar18 + iVar21;
      } while ((long)uVar15 < (long)iVar16);
    }
    uVar17 = 0;
  }
  return uVar17;
}


==================================================================

### FUNC 001978b0 (340 bytes) name=FUN_001978b0

undefined4 FUN_001978b0(int *param_1,int param_2,int param_3)

{
  int iVar1;
  undefined4 uVar2;
  int iVar3;
  int *piVar4;
  long lVar5;
  undefined4 uVar6;
  long lVar7;
  int iVar8;
  long lVar9;
  long lVar10;
  
  iVar1 = *param_1;
  if (param_2 < param_3) {
    lVar9 = *(long *)(param_1 + 0x1c);
    iVar8 = 0;
    uVar6 = 0;
    lVar10 = (long)param_3;
    lVar7 = (long)param_3 * 0x38;
    do {
      lVar7 = lVar7 + -0x38;
      if (*(char *)((long)param_1 + 0x7a) == '\x01') {
        lVar5 = *(long *)(*(long *)(param_1 + (long)iVar1 * 3 + 0x2c) + lVar10 * 8 + -8);
      }
      else {
        lVar5 = *(long *)(param_1 + (long)iVar1 * 3 + 0x2c) + lVar7;
      }
      lVar10 = lVar10 + -1;
      iVar3 = ioctl(*(int *)(lVar9 + 0x4c),0x550b,lVar5);
      uVar2 = uVar6;
      if (iVar3 != 0) {
        piVar4 = (int *)__errno();
        if (*piVar4 == 0x13) {
          usbi_log(0,4,"discard_urbs","Device not found for URB --> assuming ready to be reaped");
          uVar2 = 0xfffffffc;
        }
        else if (*piVar4 == 0x16) {
          usbi_log(0,4,"discard_urbs","URB not found --> assuming ready to be reaped");
          uVar2 = 0xfffffffb;
          if (iVar8 != 0) {
            uVar2 = uVar6;
          }
        }
        else {
          usbi_log(*(undefined8 *)(*(long *)(*(long *)(param_1 + 0x1c) + 0x40) + 0x30),2,
                   "discard_urbs","unrecognised discard errno %d");
          uVar2 = 0xffffff9d;
        }
      }
      uVar6 = uVar2;
      iVar8 = iVar8 + 1;
    } while (param_2 < lVar10);
  }
  else {
    uVar6 = 0;
  }
  return uVar6;
}


==================================================================

### FUNC 00197a04 (2564 bytes) name=FUN_00197a04

void FUN_00197a04(long param_1)

{
  int *piVar1;
  byte bVar2;
  int iVar3;
  long lVar4;
  int iVar5;
  void *pvVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char *pcVar9;
  int iVar10;
  int iVar11;
  pthread_mutex_t *ppVar12;
  ulong uVar13;
  long *plVar14;
  long lVar15;
  int *piVar16;
  undefined4 *puVar17;
  undefined1 *local_70;
  long local_68;
  
  lVar4 = tpidr_el0;
  local_68 = *(long *)(lVar4 + 0x28);
  iVar5 = ioctl(*(int *)(param_1 + 0x4c),0x4008550d,&local_70);
  if (iVar5 == -1) {
    piVar16 = (int *)__errno();
    iVar11 = *piVar16;
    if (iVar11 == 0xb) {
      uVar7 = 1;
      goto LAB_00198334;
    }
LAB_00197c1c:
    if (iVar11 == 0x13) {
      uVar7 = 0xfffffffc;
    }
    else {
      usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"reap_for_handle",
               "reap failed error %d errno=%d",iVar5);
      uVar7 = 0xffffffff;
    }
    goto LAB_00198334;
  }
  if (iVar5 < 0) {
    piVar16 = (int *)__errno();
    iVar11 = *piVar16;
    goto LAB_00197c1c;
  }
  piVar16 = *(int **)(local_70 + 0x30);
  usbi_log(0,4,"reap_for_handle","urb type=%d status=%d transferred=%d",*local_70,
           *(undefined4 *)(local_70 + 4),*(undefined4 *)(local_70 + 0x1c));
  bVar2 = *(byte *)((long)piVar16 + 0x7a);
  if (2 < bVar2 - 2) {
    if (bVar2 != 0) {
      if (bVar2 != 1) {
        usbi_log(*(undefined8 *)(*(long *)(param_1 + 0x40) + 0x30),1,"reap_for_handle",
                 "unrecognised endpoint type %x");
        uVar7 = 0xffffff9d;
        goto LAB_00198334;
      }
      ppVar12 = (pthread_mutex_t *)(piVar16 + 0x11);
      iVar5 = *piVar16;
      iVar11 = piVar16[(long)iVar5 * 3 + 0x2f];
      plVar14 = (long *)(piVar16 + (long)iVar5 * 3 + 0x2c);
      pthread_mutex_lock(ppVar12);
      uVar13 = 0;
      do {
        if ((long)iVar11 <= (long)uVar13) goto LAB_0019800c;
        lVar15 = uVar13 * 8;
        uVar13 = uVar13 + 1;
      } while (*(undefined1 **)(*plVar14 + lVar15) != local_70);
      if ((int)uVar13 == 0) {
LAB_0019800c:
        usbi_log(*(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30),1,
                 "handle_iso_completion","could not locate urb!");
        pthread_mutex_unlock(ppVar12);
        uVar7 = 0xfffffffb;
        goto LAB_00198334;
      }
      usbi_log(0,4,"handle_iso_completion","handling completion status %d of iso urb %d/%d",
               *(undefined4 *)(local_70 + 4),uVar13 & 0xffffffff,iVar11);
      if (0 < *(int *)(local_70 + 0x24)) {
        lVar15 = 0;
        puVar17 = (undefined4 *)(local_70 + 0x40);
        do {
          iVar3 = piVar16[(long)iVar5 * 3 + 0x32];
          piVar16[(long)iVar5 * 3 + 0x32] = iVar3 + 1;
          piVar16[(long)iVar3 * 3 + 0x2d] = 0;
          switch(*puVar17) {
          case 0xffffff94:
          case 0xffffffed:
            usbi_log(0,4,"handle_iso_completion","device removed");
            iVar10 = 5;
            break;
          default:
            uVar8 = 2;
            pcVar9 = "unrecognised urb status %d";
            uVar7 = *(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30);
            goto LAB_00197d50;
          case 0xffffff98:
          case 0xfffffffe:
          case 0:
            goto switchD_00197d34_caseD_ffffff98;
          case 0xffffffac:
          case 0xffffffb9:
          case 0xffffffba:
          case 0xffffffc1:
          case 0xffffffc2:
          case 0xffffffee:
            uVar8 = 4;
            uVar7 = 0;
            pcVar9 = "low-level USB error %d";
LAB_00197d50:
            usbi_log(uVar7,uVar8,"handle_iso_completion",pcVar9);
            iVar10 = 1;
            break;
          case 0xffffffb5:
            usbi_log(0,4,"handle_iso_completion","overflow error");
            iVar10 = 6;
            break;
          case 0xffffffe0:
            usbi_log(0,4,"handle_iso_completion","detected endpoint stall");
            iVar10 = 4;
          }
          piVar16[(long)iVar3 * 3 + 0x2d] = iVar10;
switchD_00197d34_caseD_ffffff98:
          piVar1 = puVar17 + -1;
          lVar15 = lVar15 + 1;
          puVar17 = puVar17 + 3;
          piVar16[(long)iVar3 * 3 + 0x2c] = *piVar1;
        } while (lVar15 < *(int *)(local_70 + 0x24));
      }
      piVar16[(long)iVar5 * 3 + 0x30] = piVar16[(long)iVar5 * 3 + 0x30] + 1;
      iVar3 = *(int *)(local_70 + 4);
      if (piVar16[(long)iVar5 * 3 + 0x2e] == 0) {
        iVar10 = 0;
        if (iVar3 < -2) {
          if (iVar3 == -0x6c) {
            usbi_log(0,4,"handle_iso_completion","device removed");
            iVar10 = 5;
          }
          else if (iVar3 != -0x68) goto LAB_00198268;
        }
        else if ((iVar3 != -2) && (iVar3 != 0)) {
LAB_00198268:
          usbi_log(*(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30),2,
                   "handle_iso_completion","unrecognised urb status %d");
          iVar10 = 1;
        }
        if (iVar11 != (int)uVar13) goto LAB_00198250;
        usbi_log(0,4,"handle_iso_completion","last URB in transfer --> complete!");
        if (0 < piVar16[(long)iVar5 * 3 + 0x2f]) {
          lVar15 = 0;
          do {
            pvVar6 = *(void **)(*plVar14 + lVar15 * 8);
            if (pvVar6 == (void *)0x0) break;
            free(pvVar6);
            lVar15 = lVar15 + 1;
          } while (lVar15 < piVar16[(long)iVar5 * 3 + 0x2f]);
        }
        free((void *)*plVar14);
        *plVar14 = 0;
        pthread_mutex_unlock(ppVar12);
      }
      else {
        usbi_log(0,4,"handle_iso_completion","CANCEL: urb status %d");
        if (piVar16[(long)iVar5 * 3 + 0x30] != iVar11) goto LAB_00198250;
        usbi_log(0,4,"handle_iso_completion","CANCEL: last URB handled, reporting");
        if (0 < piVar16[(long)iVar5 * 3 + 0x2f]) {
          lVar15 = 0;
          do {
            pvVar6 = *(void **)(*plVar14 + lVar15 * 8);
            if (pvVar6 == (void *)0x0) break;
            free(pvVar6);
            lVar15 = lVar15 + 1;
          } while (lVar15 < piVar16[(long)iVar5 * 3 + 0x2f]);
        }
        free((void *)*plVar14);
        *plVar14 = 0;
        iVar5 = piVar16[(long)iVar5 * 3 + 0x2e];
        pthread_mutex_unlock(ppVar12);
        if (iVar5 == 2) {
          uVar7 = usbi_handle_transfer_cancellation(piVar16);
          goto LAB_00198334;
        }
        iVar10 = 1;
      }
      goto LAB_00198330;
    }
    iVar11 = *piVar16;
    ppVar12 = (pthread_mutex_t *)(piVar16 + 0x11);
    piVar1 = piVar16 + (long)iVar11 * 3 + 0x2c;
    pthread_mutex_lock(ppVar12);
    usbi_log(0,4,"handle_control_completion","handling completion status %d",
             *(undefined4 *)(local_70 + 4));
    piVar16[0xe] = piVar16[0xe] + *(int *)(local_70 + 0x1c);
    iVar5 = *(int *)(local_70 + 4);
    if (piVar16[(long)iVar11 * 3 + 0x2e] == 2) {
      if ((iVar5 != -2) && (iVar5 != 0)) {
        usbi_log(*(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30),2,
                 "handle_control_completion","cancel: unrecognised urb status %d");
      }
      free(*(void **)piVar1);
      piVar1[0] = 0;
      piVar1[1] = 0;
      pthread_mutex_unlock(ppVar12);
      goto LAB_00198228;
    }
    iVar10 = 0;
    switch(iVar5) {
    case 0:
      break;
    case -0x6c:
    case -0x13:
      usbi_log(0,4,"handle_control_completion","device removed");
      iVar10 = 5;
      break;
    default:
      usbi_log(*(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30),2,
               "handle_control_completion","unrecognised urb status %d");
      goto LAB_00198080;
    case -0x54:
    case -0x47:
    case -0x46:
    case -0x3f:
    case -0x3e:
      usbi_log(0,4,"handle_control_completion","low-level bus error occurred");
LAB_00198080:
      iVar10 = 1;
      break;
    case -0x4b:
      usbi_log(0,4,"handle_control_completion","control overflow error");
      iVar10 = 6;
      break;
    case -0x20:
      iVar10 = 4;
      usbi_log(0,4,"handle_control_completion","unsupported control request");
      break;
    case -2:
      iVar10 = 3;
    }
    free(*(void **)piVar1);
    piVar1[0] = 0;
    piVar1[1] = 0;
    pthread_mutex_unlock(ppVar12);
    goto LAB_00198330;
  }
  iVar3 = *piVar16;
  plVar14 = (long *)(piVar16 + (long)iVar3 * 3 + 0x2c);
  iVar10 = (int)((ulong)((long)local_70 - *plVar14) >> 3) * -0x49249249;
  pthread_mutex_lock((pthread_mutex_t *)(piVar16 + 0x11));
  iVar5 = iVar10 + 1;
  usbi_log(0,4,"handle_bulk_completion","handling completion status %d of bulk urb %d/%d",
           *(undefined4 *)(local_70 + 4),iVar5,piVar16[(long)iVar3 * 3 + 0x2f]);
  iVar11 = piVar16[(long)iVar3 * 3 + 0x2e];
  piVar16[(long)iVar3 * 3 + 0x30] = piVar16[(long)iVar3 * 3 + 0x30] + 1;
  if (iVar11 != 0) {
    usbi_log(0,4,"handle_bulk_completion","abnormal reap: urb status %d",
             *(undefined4 *)(local_70 + 4));
    if (0 < *(int *)(local_70 + 0x1c)) {
      pvVar6 = (void *)(*(long *)(piVar16 + 0x28) + (long)piVar16[0xe]);
      usbi_log(0,4,"handle_bulk_completion","received %d bytes of surplus data");
      if (*(void **)(local_70 + 0x10) != pvVar6) {
        usbi_log(0,4,"handle_bulk_completion","moving surplus data from offset %d to offset %d",
                 (long)*(void **)(local_70 + 0x10) - *(long *)(piVar16 + 0x28),
                 (long)pvVar6 - *(long *)(piVar16 + 0x28));
        memmove(pvVar6,*(void **)(local_70 + 0x10),(long)*(int *)(local_70 + 0x1c));
      }
      piVar16[0xe] = piVar16[0xe] + *(int *)(local_70 + 0x1c);
    }
    if (piVar16[(long)iVar3 * 3 + 0x30] == piVar16[(long)iVar3 * 3 + 0x2f]) {
      usbi_log(0,4,"handle_bulk_completion","abnormal reap: last URB handled, reporting");
      if ((piVar16[(long)iVar3 * 3 + 0x2e] != 3) && (piVar16[(long)iVar3 * 3 + 0x31] == 0)) {
        iVar5 = 1;
LAB_00197bf4:
        piVar16[(long)iVar3 * 3 + 0x31] = iVar5;
      }
      goto LAB_00198208;
    }
    goto LAB_00198250;
  }
  iVar11 = *(int *)(local_70 + 0x1c);
  piVar16[0xe] = piVar16[0xe] + iVar11;
  switch(*(undefined4 *)(local_70 + 4)) {
  case 0xffffff87:
  case 0xffffff98:
  case 0xfffffffe:
  case 0:
    if (piVar16[(long)iVar3 * 3 + 0x2f] + -1 == iVar10) {
      usbi_log(0,4,"handle_bulk_completion","last URB in transfer --> complete!");
      goto LAB_00198208;
    }
    if (*(int *)(local_70 + 0x18) <= iVar11) goto LAB_00198250;
    usbi_log(0,4,"handle_bulk_completion","short transfer %d/%d --> complete!");
    iVar11 = piVar16[(long)iVar3 * 3 + 0x2e];
    if (iVar11 != 0) goto LAB_001981e4;
    piVar16[(long)iVar3 * 3 + 0x2e] = 3;
    goto LAB_001981fc;
  default:
    pcVar9 = "unrecognised urb status %d";
    uVar8 = 2;
    uVar7 = *(undefined8 *)(*(long *)(*(long *)(piVar16 + 0x1c) + 0x40) + 0x30);
    break;
  case 0xffffff94:
  case 0xffffffed:
    usbi_log(0,4,"handle_bulk_completion","device removed");
    piVar16[(long)iVar3 * 3 + 0x31] = 5;
    goto LAB_001981e0;
  case 0xffffffac:
  case 0xffffffb9:
  case 0xffffffba:
  case 0xffffffc1:
  case 0xffffffc2:
    pcVar9 = "low level error %d";
    uVar8 = 4;
    uVar7 = 0;
    break;
  case 0xffffffb5:
    usbi_log(0,4,"handle_bulk_completion","overflow, actual_length=%d");
    if (piVar16[(long)iVar3 * 3 + 0x31] == 0) {
      iVar5 = 6;
      goto LAB_00197bf4;
    }
    goto LAB_00198208;
  case 0xffffffe0:
    usbi_log(0,4,"handle_bulk_completion","detected endpoint stall");
    if (piVar16[(long)iVar3 * 3 + 0x31] == 0) {
      piVar16[(long)iVar3 * 3 + 0x31] = 4;
    }
LAB_001981e0:
    iVar11 = piVar16[(long)iVar3 * 3 + 0x2e];
LAB_001981e4:
    if (iVar11 == 4) {
      iVar11 = piVar16[(long)iVar3 * 3 + 0x31];
      goto joined_r0x00197f34;
    }
    goto LAB_001981fc;
  }
  usbi_log(uVar7,uVar8,"handle_bulk_completion",pcVar9,*(undefined4 *)(local_70 + 4));
  piVar16[(long)iVar3 * 3 + 0x2e] = 4;
  iVar11 = piVar16[(long)iVar3 * 3 + 0x31];
joined_r0x00197f34:
  if (iVar11 == 0) {
    piVar16[(long)iVar3 * 3 + 0x31] = 1;
  }
LAB_001981fc:
  if (piVar16[(long)iVar3 * 3 + 0x30] == piVar16[(long)iVar3 * 3 + 0x2f]) {
LAB_00198208:
    free((void *)*plVar14);
    *plVar14 = 0;
    pthread_mutex_unlock((pthread_mutex_t *)(piVar16 + 0x11));
    if (piVar16[(long)iVar3 * 3 + 0x2e] == 2) {
LAB_00198228:
      uVar7 = usbi_handle_transfer_cancellation(piVar16);
    }
    else {
      iVar10 = piVar16[(long)iVar3 * 3 + 0x31];
LAB_00198330:
      uVar7 = usbi_handle_transfer_completion(piVar16,iVar10);
    }
  }
  else {
    FUN_001978b0(piVar16,iVar5);
LAB_00198250:
    pthread_mutex_unlock((pthread_mutex_t *)(piVar16 + 0x11));
    uVar7 = 0;
  }
LAB_00198334:
  if (*(long *)(lVar4 + 0x28) == local_68) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail(uVar7);
}


==================================================================

### FUNC 00198408 (188 bytes) name=usbi_pipe

int usbi_pipe(int *param_1)

{
  int iVar1;
  uint uVar2;
  undefined4 *puVar3;
  
  iVar1 = pipe(param_1);
  if (iVar1 == 0) {
    uVar2 = fcntl(param_1[1],3);
    if (uVar2 == 0xffffffff) {
      puVar3 = (undefined4 *)__errno();
      usbi_log(0,4,"usbi_pipe","Failed to get pipe fd flags: %d",*puVar3);
      iVar1 = -1;
    }
    else {
      iVar1 = fcntl(param_1[1],4,(ulong)(uVar2 | 0x800));
      if (iVar1 == 0) {
        return 0;
      }
      puVar3 = (undefined4 *)__errno();
      usbi_log(0,4,"usbi_pipe","Failed to set non-blocking on new pipe: %d",*puVar3);
    }
    close(*param_1);
    close(param_1[1]);
  }
  return iVar1;
}


==================================================================

### FUNC 001984c4 (248 bytes) name=usbi_cond_timedwait

void usbi_cond_timedwait(pthread_cond_t *param_1,pthread_mutex_t *param_2,long *param_3)

{
  ulong uVar1;
  long lVar2;
  uint uVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  timespec local_48;
  long local_38;
  
  lVar2 = tpidr_el0;
  local_38 = *(long *)(lVar2 + 0x28);
  uVar4 = (**(code **)(*(long *)PTR_usbi_backend_00501a30 + 0x108))(1,&local_48);
  if (-1 < (int)uVar4) {
    lVar5 = param_3[1] * 1000;
    local_48.tv_sec = local_48.tv_sec + *param_3;
    uVar4 = local_48.tv_nsec + lVar5;
    if (999999999 < (long)uVar4) {
      lVar6 = ~local_48.tv_nsec + param_3[1] * -1000;
      if (lVar6 < -1999999999) {
        lVar6 = -2000000000;
      }
      uVar1 = (local_48.tv_nsec + lVar6 + lVar5 + 1000000000U) / 1000000000;
      local_48.tv_sec = local_48.tv_sec + uVar1 + 1;
      uVar4 = (uVar4 + uVar1 * -1000000000) - 1000000000;
    }
    local_48.tv_nsec = uVar4;
    uVar3 = pthread_cond_timedwait(param_1,param_2,&local_48);
    uVar4 = (ulong)uVar3;
  }
  if (*(long *)(lVar2 + 0x28) != local_38) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(uVar4);
  }
  return;
}


==================================================================

### FUNC 001985bc (4 bytes) name=usbi_get_tid

void usbi_get_tid(void)

{
  (*(code *)PTR_gettid_004fff50)();
  return;
}


==================================================================

### FUNC 001985c0 (128 bytes) name=release

/* cv::Mat::release() */

void __thiscall cv::Mat::release(Mat *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      deallocate(this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (0 < *(int *)(this + 4)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(this + 0x40);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(this + 4));
  }
  return;
}


==================================================================

### FUNC 00198640 (6848 bytes) name=Canny

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::Canny(cv::_InputArray const&, cv::_OutputArray const&, double, double, int, bool) */

void cv::Canny(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4,int param_5,
              bool param_6)

{
  int *piVar1;
  uint uVar2;
  undefined4 *__s;
  undefined8 *puVar3;
  ulong uVar4;
  long lVar5;
  ushort uVar6;
  ushort uVar7;
  char cVar8;
  bool bVar9;
  uint uVar10;
  ulong uVar11;
  undefined4 uVar12;
  undefined2 uVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  ulong uVar18;
  char *pcVar19;
  long *plVar20;
  size_t __n;
  undefined8 *puVar21;
  int iVar22;
  size_t __n_00;
  void *__s_00;
  undefined8 *puVar23;
  int *piVar24;
  Mat *pMVar25;
  long lVar26;
  int *piVar27;
  undefined8 *puVar28;
  long lVar29;
  undefined1 *puVar30;
  undefined8 *puVar31;
  long lVar32;
  long lVar33;
  int iVar34;
  long *plVar35;
  long *plVar36;
  size_t __n_01;
  long *plVar37;
  long lVar38;
  undefined4 *puVar39;
  long lVar40;
  long lVar41;
  uint uVar42;
  undefined4 *puVar43;
  long *__dest;
  long lVar44;
  undefined4 *puVar45;
  ulong uVar46;
  short sVar47;
  short sVar48;
  short sVar49;
  short sVar50;
  short sVar51;
  short sVar52;
  int iVar53;
  short sVar55;
  short sVar56;
  size_t __n_02;
  undefined8 uVar54;
  int iVar57;
  short sVar58;
  int iVar59;
  undefined8 uVar60;
  int iVar61;
  int iVar62;
  short sVar64;
  short sVar65;
  undefined8 uVar63;
  int iVar66;
  short sVar67;
  int iVar68;
  undefined8 uVar69;
  int iVar70;
  int iVar71;
  int iVar72;
  int iVar73;
  int iVar74;
  int iVar75;
  int iVar76;
  int iVar77;
  int iVar78;
  double dVar79;
  undefined1 *puVar80;
  ulong local_650;
  undefined4 *local_648;
  undefined4 *local_640;
  uint local_634;
  Mat *local_628;
  int local_620;
  int local_618;
  int local_614;
  long *local_5f0;
  undefined8 local_5d0;
  int local_5c8;
  int local_5c4;
  int local_5c0;
  int local_5bc;
  undefined4 *local_5b8;
  Mat *local_5b0;
  undefined4 *local_5a8;
  undefined8 local_5a0;
  undefined8 uStack_598;
  long local_590;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  long local_568;
  undefined8 *local_560;
  long *local_558;
  long local_550 [2];
  undefined8 local_540;
  undefined8 uStack_538;
  long local_530;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  long local_508;
  undefined8 *local_500;
  long *local_4f8;
  long local_4f0 [3];
  undefined4 local_4d8;
  int local_4d4;
  int local_4d0;
  int local_4cc;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  undefined4 local_478;
  int local_474;
  undefined4 local_470;
  undefined4 local_46c;
  long local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  undefined4 *local_438;
  long *local_430;
  long local_428 [2];
  undefined4 *local_418;
  Mat *local_410;
  undefined4 local_408;
  undefined4 local_404;
  
  local_634 = (uint)param_6;
  uVar18 = _InputArray::type(param_1,-1);
  uVar15 = (uint)((uVar18 & 0xffffffff) >> 3) & 0x1ff;
  iVar34 = uVar15 + 1;
  _InputArray::size((int)param_1);
  if ((uVar18 & 7) != 0) {
    local_418 = (undefined4 *)0x0;
    local_410 = (Mat *)0x0;
    pcVar19 = (char *)String::allocate((String *)&local_418,0xe);
    uVar13 = s_depth____CV_8U_0043daf8._12_2_;
    uVar12 = s_depth____CV_8U_0043daf8._8_4_;
    *(undefined8 *)pcVar19 = s_depth____CV_8U_0043daf8._0_8_;
    *(undefined4 *)(pcVar19 + 8) = uVar12;
    *(undefined2 *)(pcVar19 + 0xc) = uVar13;
    error(-0xd7,(String *)&local_418,
          "void cv::Canny(cv::InputArray, cv::OutputArray, double, double, int, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/canny.cpp",0x24b);
    String::deallocate((String *)&local_418);
  }
  local_418 = (undefined4 *)local_5d0;
  _OutputArray::create(param_2,(String *)&local_418,0,0xffffffff,0,0);
  if (local_634 < (uint)param_5 >> 0x1f) {
    param_5 = param_5 & 0x7fffffff;
    local_634 = 1;
  }
  if (((param_5 & 1U) == 0) || ((4 < param_5 - 3U && (param_5 != 0xffffffff)))) {
    local_418 = (undefined4 *)0x0;
    local_410 = (Mat *)0x0;
    pcVar19 = (char *)String::allocate((String *)&local_418,0x1b);
    cVar8 = s_Aperture_size_should_be_odd_0043db50[0x1a];
    uVar13 = s_Aperture_size_should_be_odd_0043db50._24_2_;
    uVar60 = s_Aperture_size_should_be_odd_0043db50._8_8_;
    uVar54 = s_Aperture_size_should_be_odd_0043db50._0_8_;
    *(undefined8 *)(pcVar19 + 0x10) = s_Aperture_size_should_be_odd_0043db50._16_8_;
    *(undefined2 *)(pcVar19 + 0x18) = uVar13;
    pcVar19[0x1a] = cVar8;
    *(undefined8 *)pcVar19 = uVar54;
    *(undefined8 *)(pcVar19 + 8) = uVar60;
    error(-0xce,(String *)&local_418,
          "void cv::Canny(cv::InputArray, cv::OutputArray, double, double, int, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/canny.cpp",0x256);
    String::deallocate((String *)&local_418);
  }
  dVar79 = param_3;
  if (param_4 < param_3) {
    dVar79 = param_4;
    param_4 = param_3;
  }
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x10000) {
    pMVar25 = *(Mat **)(param_1 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(undefined4 *)pMVar25;
    local_4d4 = *(int *)(pMVar25 + 4);
    local_4d0 = *(int *)(pMVar25 + 8);
    local_4cc = *(int *)(pMVar25 + 0xc);
    local_4c8 = *(undefined8 *)(pMVar25 + 0x10);
    local_4c0 = *(undefined8 *)(pMVar25 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar25 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar25 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar25 + 0x30);
    local_4a0 = *(long *)(pMVar25 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar24 = (int *)(local_4a0 + 0x14);
      do {
        cVar8 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar9) {
          *piVar24 = *piVar24 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar25 + 4) < 3) {
      local_488 = **(undefined8 **)(pMVar25 + 0x48);
      local_480 = (*(undefined8 **)(pMVar25 + 0x48))[1];
    }
    else {
      local_4d4 = 0;
      Mat::copySize((Mat *)&local_4d8,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar14 = _InputArray::kind((_InputArray *)param_2);
  if (iVar14 == 0x10000) {
    pMVar25 = *(Mat **)(param_2 + 8);
    local_438 = &local_470;
    local_430 = local_428;
    local_478 = *(undefined4 *)pMVar25;
    local_474 = *(int *)(pMVar25 + 4);
    local_470 = *(undefined4 *)(pMVar25 + 8);
    local_46c = *(undefined4 *)(pMVar25 + 0xc);
    local_468 = *(long *)(pMVar25 + 0x10);
    local_460 = *(undefined8 *)(pMVar25 + 0x18);
    local_458 = *(undefined8 *)(pMVar25 + 0x20);
    local_450 = *(undefined8 *)(pMVar25 + 0x28);
    local_448 = *(undefined8 *)(pMVar25 + 0x30);
    local_440 = *(long *)(pMVar25 + 0x38);
    local_428[1] = 0;
    local_428[0] = 0;
    if (local_440 != 0) {
      piVar24 = (int *)(local_440 + 0x14);
      do {
        cVar8 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar9) {
          *piVar24 = *piVar24 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (2 < *(int *)(pMVar25 + 4)) {
      local_474 = 0;
      Mat::copySize((Mat *)&local_478,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_628 = (Mat *)&local_478;
  local_558 = local_550;
  iVar14 = uVar15 * 8 + 3;
  local_560 = &uStack_598;
  uStack_598 = _UNK_0019a208;
  local_5a0 = _DAT_0019a200;
  local_590 = 0;
  local_588 = 0;
  local_580 = 0;
  local_550[1] = 0;
  local_550[0] = 0;
  local_578 = 0;
  local_570 = 0;
  local_568 = 0;
  local_5c8 = local_4d0;
  local_5c4 = local_4cc;
  Mat::create((Mat *)&local_5a0,2,&local_5c8,iVar14);
  local_4f8 = local_4f0;
  local_500 = &uStack_538;
  uStack_538 = _UNK_0019a208;
  local_540 = _DAT_0019a200;
  local_530 = 0;
  local_528 = 0;
  local_4f0[1] = 0;
  local_4f0[0] = 0;
  local_520 = 0;
  local_518 = 0;
  local_510 = 0;
  local_508 = 0;
  local_5c0 = local_4d0;
  local_5bc = local_4cc;
  Mat::create((Mat *)&local_540,2,&local_5c0,iVar14);
  local_5b8._0_4_ = 0x1010000;
  local_5a8 = (undefined4 *)0x0;
  local_408 = 0;
  local_404 = 0;
                    /* WARNING: Ignoring partial resolution of indirect */
  local_418._0_4_ = 0x2010000;
  local_5b0 = (Mat *)&local_4d8;
  local_410 = (Mat *)&local_5a0;
  Sobel((_InputArray *)&local_5b8,(_OutputArray *)&local_418,3,1,0,param_5,1.0,0.0,1);
  local_5b8 = (undefined4 *)CONCAT44(local_5b8._4_4_,0x1010000);
  local_5a8 = (undefined4 *)0x0;
  local_408 = 0;
  local_404 = 0;
                    /* WARNING: Ignoring partial resolution of indirect */
  local_418._0_4_ = 0x2010000;
  local_5b0 = (Mat *)&local_4d8;
  local_410 = (Mat *)&local_540;
  Sobel((_InputArray *)&local_5b8,(_OutputArray *)&local_418,3,0,1,param_5,1.0,0.0,1);
  if (local_634 == 0) {
    local_618 = (int)param_4 - (uint)(param_4 < (double)(int)param_4);
    iVar14 = (int)dVar79 - (uint)(dVar79 < (double)(int)dVar79);
  }
  else if (dVar79 < DAT_0019a1f8) {
    if (param_4 < DAT_0019a1f8) {
      if (0.0 < dVar79) {
        dVar79 = dVar79 * dVar79;
      }
      iVar14 = (int)dVar79 - (uint)(dVar79 < (double)(int)dVar79);
      goto LAB_00199d40;
    }
    if (0.0 < dVar79) goto LAB_00199cb0;
    local_618 = 0x3fff0001;
    iVar14 = (int)dVar79 - (uint)(dVar79 < (double)(int)dVar79);
  }
  else {
    dVar79 = DAT_0019a1f8;
    if (param_4 < DAT_0019a1f8) {
      iVar14 = 0x3fff0001;
LAB_00199d40:
      if (0.0 < param_4) {
        param_4 = param_4 * param_4;
      }
    }
    else {
LAB_00199cb0:
      iVar14 = (int)(dVar79 * dVar79);
      param_4 = DAT_0019a1f8 * DAT_0019a1f8;
      iVar14 = iVar14 - (uint)(dVar79 * dVar79 < (double)iVar14);
    }
    local_618 = (int)param_4 - (uint)(param_4 < (double)(int)param_4);
  }
  iVar17 = local_4cc + 2;
  lVar44 = (long)iVar34 * (long)iVar17;
  local_418 = &local_408;
  local_410 = (Mat *)0x408;
  __n_00 = (size_t)iVar17;
  uVar18 = lVar44 * 0xc + (long)(iVar17 * (local_4d0 + 2));
  if (0x408 < uVar18) {
    local_418 = operator_new__(uVar18);
  }
  __n_02 = NEON_shl(__n_00,2);
  puVar45 = local_418 + lVar44;
  local_5a8 = puVar45 + lVar44;
  __s = local_5a8 + lVar44;
  local_5b8 = local_418;
  local_5b0 = (Mat *)puVar45;
  local_410 = (Mat *)uVar18;
  memset(local_418,0,__n_02);
  memset(__s,1,__n_00);
  memset((undefined4 *)((long)__s + (long)(local_4d0 + 1) * (long)iVar17),1,__n_00);
  iVar17 = (local_4cc * local_4d0) / 10;
  local_650 = (ulong)iVar17;
  if (iVar17 < 0x400) {
    local_650 = 0x400;
  }
  local_614 = (int)local_650;
  plVar20 = operator_new(local_650 * 8);
  plVar35 = plVar20 + local_650;
  memset(plVar20,0,local_650 * 8);
  if (-1 < local_4d0) {
    puVar80 = (undefined1 *)((long)__s + 1);
    lVar44 = 0;
    __dest = plVar20;
    local_5f0 = plVar35;
    if (local_4d0 < 1) goto LAB_001992bc;
LAB_00198af8:
    piVar24 = puVar45 + 1;
    iVar17 = iVar34 * local_4cc;
    iVar16 = iVar17 + -7;
    lVar38 = lVar44 * *local_558;
    lVar32 = lVar44 * *local_4f8;
    puVar23 = (undefined8 *)(local_590 + lVar38);
    puVar3 = (undefined8 *)(local_530 + lVar32);
    if (local_634 == 0) {
      if (iVar16 < 1) {
        iVar22 = 0;
      }
      else {
        puVar21 = (undefined8 *)(puVar45 + 5);
        iVar22 = 0;
        puVar28 = puVar3;
        puVar31 = puVar23;
        do {
          uVar69 = puVar28[1];
          uVar63 = *puVar28;
          uVar60 = puVar31[1];
          uVar54 = *puVar31;
          iVar22 = iVar22 + 8;
          iVar62 = MP_INT_ABS((int)(short)uVar54);
          iVar66 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x10));
          iVar68 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x20));
          iVar70 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x30));
          iVar53 = MP_INT_ABS((int)(short)uVar63);
          iVar57 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x10));
          iVar59 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x20));
          iVar61 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x30));
          iVar71 = MP_INT_ABS((int)(short)uVar60);
          iVar72 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x10));
          iVar73 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x20));
          iVar74 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x30));
          iVar75 = MP_INT_ABS((int)(short)uVar69);
          iVar76 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x10));
          iVar77 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x20));
          iVar78 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x30));
          puVar21[-1] = CONCAT44(iVar70 + iVar61,iVar68 + iVar59);
          puVar21[-2] = CONCAT44(iVar66 + iVar57,iVar62 + iVar53);
          puVar21[1] = CONCAT44(iVar74 + iVar78,iVar73 + iVar77);
          *puVar21 = CONCAT44(iVar72 + iVar76,iVar71 + iVar75);
          puVar21 = puVar21 + 4;
          puVar28 = puVar28 + 2;
          puVar31 = puVar31 + 2;
        } while (iVar22 < iVar16);
      }
      if (iVar22 < iVar17) {
        lVar41 = (long)iVar22;
        uVar10 = iVar17 - iVar22;
        uVar15 = -((uint)((ulong)(puVar45 + lVar41 + 1) >> 2) & 3) & 3;
        uVar18 = (ulong)uVar15;
        if (uVar10 < uVar15) {
          uVar18 = (ulong)uVar10;
        }
        if (uVar10 < 9) {
          uVar18 = (ulong)uVar10;
        }
        uVar15 = (uint)uVar18;
        if (uVar15 != 0) {
          iVar16 = iVar22 + 1;
          piVar24[lVar41] =
               (int)*(short *)((long)puVar23 + lVar41 * 2) +
               (int)*(short *)((long)puVar3 + lVar41 * 2);
          if (uVar15 != 1) {
            lVar29 = (long)iVar16 * 2;
            iVar53 = iVar22 + 2;
            piVar24[iVar16] =
                 (int)*(short *)((long)puVar23 + lVar29) + (int)*(short *)((long)puVar3 + lVar29);
            iVar16 = iVar53;
            if (uVar15 != 2) {
              lVar29 = (long)iVar53 * 2;
              iVar16 = iVar22 + 3;
              piVar24[iVar53] =
                   (int)*(short *)((long)puVar23 + lVar29) + (int)*(short *)((long)puVar3 + lVar29);
              if (uVar15 != 3) {
                lVar29 = (long)iVar16 * 2;
                iVar53 = iVar22 + 4;
                piVar24[iVar16] =
                     (int)*(short *)((long)puVar23 + lVar29) +
                     (int)*(short *)((long)puVar3 + lVar29);
                iVar16 = iVar53;
                if (uVar15 != 4) {
                  lVar29 = (long)iVar53 * 2;
                  iVar16 = iVar22 + 5;
                  piVar24[iVar53] =
                       (int)*(short *)((long)puVar23 + lVar29) +
                       (int)*(short *)((long)puVar3 + lVar29);
                  if (uVar15 != 5) {
                    lVar29 = (long)iVar16 * 2;
                    iVar53 = iVar22 + 6;
                    piVar24[iVar16] =
                         (int)*(short *)((long)puVar23 + lVar29) +
                         (int)*(short *)((long)puVar3 + lVar29);
                    iVar16 = iVar53;
                    if (uVar15 != 6) {
                      lVar29 = (long)iVar53 * 2;
                      iVar16 = iVar22 + 7;
                      piVar24[iVar53] =
                           (int)*(short *)((long)puVar23 + lVar29) +
                           (int)*(short *)((long)puVar3 + lVar29);
                      if (uVar15 == 8) {
                        lVar29 = (long)iVar16 * 2;
                        piVar24[iVar16] =
                             (int)*(short *)((long)puVar23 + lVar29) +
                             (int)*(short *)((long)puVar3 + lVar29);
                        iVar16 = iVar22 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar22 = iVar16;
          if (uVar10 == uVar15) goto joined_r0x001996cc;
        }
        uVar2 = ((uVar10 - uVar15) - 8 >> 3) + 1;
        iVar16 = uVar2 * 8;
        if (6 < (uVar10 - 1) - uVar15) {
          lVar29 = (lVar41 + uVar18) * 2;
          uVar42 = 0;
          puVar21 = (undefined8 *)(puVar45 + lVar41 + 1 + uVar18);
          puVar28 = (undefined8 *)(local_590 + lVar29 + lVar38);
          puVar31 = (undefined8 *)(local_530 + lVar29 + lVar32);
          do {
            uVar60 = puVar28[1];
            uVar54 = *puVar28;
            uVar69 = puVar31[1];
            uVar63 = *puVar31;
            uVar42 = uVar42 + 1;
            iVar75 = MP_INT_ABS((int)(short)uVar54);
            iVar76 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x10));
            iVar77 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x20));
            iVar78 = MP_INT_ABS((int)(short)((ulong)uVar54 >> 0x30));
            iVar71 = MP_INT_ABS((int)(short)uVar63);
            iVar72 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x10));
            iVar73 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x20));
            iVar74 = MP_INT_ABS((int)(short)((ulong)uVar63 >> 0x30));
            iVar53 = MP_INT_ABS((int)(short)uVar60);
            iVar57 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x10));
            iVar59 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x20));
            iVar61 = MP_INT_ABS((int)(short)((ulong)uVar60 >> 0x30));
            iVar62 = MP_INT_ABS((int)(short)uVar69);
            iVar66 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x10));
            iVar68 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x20));
            iVar70 = MP_INT_ABS((int)(short)((ulong)uVar69 >> 0x30));
            puVar21[1] = CONCAT44(iVar78 + iVar74,iVar77 + iVar73);
            *puVar21 = CONCAT44(iVar76 + iVar72,iVar75 + iVar71);
            puVar21[3] = CONCAT44(iVar61 + iVar70,iVar59 + iVar68);
            puVar21[2] = CONCAT44(iVar57 + iVar66,iVar53 + iVar62);
            puVar21 = puVar21 + 4;
            puVar28 = puVar28 + 2;
            puVar31 = puVar31 + 2;
          } while (uVar42 < uVar2);
          iVar22 = iVar22 + iVar16;
          if (iVar16 == uVar10 - uVar15) goto joined_r0x001996cc;
        }
        iVar16 = iVar22 + 1;
        lVar32 = (long)iVar22 * 2;
        piVar24[iVar22] =
             (int)*(short *)((long)puVar23 + lVar32) + (int)*(short *)((long)puVar3 + lVar32);
        if (iVar16 < iVar17) {
          iVar53 = iVar22 + 2;
          lVar32 = (long)iVar16 * 2;
          piVar24[iVar16] =
               (int)*(short *)((long)puVar23 + lVar32) + (int)*(short *)((long)puVar3 + lVar32);
          if (iVar53 < iVar17) {
            iVar16 = iVar22 + 3;
            lVar32 = (long)iVar53 * 2;
            piVar24[iVar53] =
                 (int)*(short *)((long)puVar23 + lVar32) + (int)*(short *)((long)puVar3 + lVar32);
            if (iVar16 < iVar17) {
              iVar53 = iVar22 + 4;
              lVar32 = (long)iVar16 * 2;
              piVar24[iVar16] =
                   (int)*(short *)((long)puVar23 + lVar32) + (int)*(short *)((long)puVar3 + lVar32);
              if (iVar53 < iVar17) {
                iVar16 = iVar22 + 5;
                lVar32 = (long)iVar53 * 2;
                piVar24[iVar53] =
                     (int)*(short *)((long)puVar23 + lVar32) +
                     (int)*(short *)((long)puVar3 + lVar32);
                if (iVar16 < iVar17) {
                  iVar22 = iVar22 + 6;
                  lVar32 = (long)iVar16 * 2;
                  piVar24[iVar16] =
                       (int)*(short *)((long)puVar23 + lVar32) +
                       (int)*(short *)((long)puVar3 + lVar32);
                  if (iVar22 < iVar17) {
                    lVar32 = (long)iVar22 * 2;
                    piVar24[iVar22] =
                         (int)*(short *)((long)puVar23 + lVar32) +
                         (int)*(short *)((long)puVar3 + lVar32);
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      if (iVar16 < 1) {
        iVar22 = 0;
      }
      else {
        puVar21 = (undefined8 *)(puVar45 + 5);
        iVar22 = 0;
        puVar28 = puVar3;
        puVar31 = puVar23;
        do {
          uVar60 = puVar31[1];
          uVar54 = *puVar31;
          uVar69 = puVar28[1];
          uVar63 = *puVar28;
          iVar22 = iVar22 + 8;
          sVar47 = (short)((ulong)uVar54 >> 0x10);
          sVar48 = (short)((ulong)uVar54 >> 0x20);
          sVar49 = (short)((ulong)uVar54 >> 0x30);
          sVar50 = (short)((ulong)uVar63 >> 0x10);
          sVar51 = (short)((ulong)uVar63 >> 0x20);
          sVar52 = (short)((ulong)uVar63 >> 0x30);
          puVar21[-1] = CONCAT44((int)sVar49 * (int)sVar49 + (int)sVar52 * (int)sVar52,
                                 (int)sVar48 * (int)sVar48 + (int)sVar51 * (int)sVar51);
          puVar21[-2] = CONCAT44((int)sVar47 * (int)sVar47 + (int)sVar50 * (int)sVar50,
                                 (int)(short)uVar54 * (int)(short)uVar54 +
                                 (int)(short)uVar63 * (int)(short)uVar63);
          sVar47 = (short)((ulong)uVar60 >> 0x10);
          sVar48 = (short)((ulong)uVar60 >> 0x20);
          sVar49 = (short)((ulong)uVar60 >> 0x30);
          sVar50 = (short)((ulong)uVar69 >> 0x10);
          sVar51 = (short)((ulong)uVar69 >> 0x20);
          sVar52 = (short)((ulong)uVar69 >> 0x30);
          puVar21[1] = CONCAT44((int)sVar49 * (int)sVar49 + (int)sVar52 * (int)sVar52,
                                (int)sVar48 * (int)sVar48 + (int)sVar51 * (int)sVar51);
          *puVar21 = CONCAT44((int)sVar47 * (int)sVar47 + (int)sVar50 * (int)sVar50,
                              (int)(short)uVar60 * (int)(short)uVar60 +
                              (int)(short)uVar69 * (int)(short)uVar69);
          puVar21 = puVar21 + 4;
          puVar28 = puVar28 + 2;
          puVar31 = puVar31 + 2;
        } while (iVar22 < iVar16);
      }
      if (iVar22 < iVar17) {
        lVar41 = (long)iVar22;
        uVar10 = iVar17 - iVar22;
        uVar15 = -((uint)((ulong)(puVar45 + lVar41 + 1) >> 2) & 3) & 3;
        uVar18 = (ulong)uVar15;
        if (uVar10 < uVar15) {
          uVar18 = (ulong)uVar10;
        }
        if (uVar10 < 9) {
          uVar18 = (ulong)uVar10;
        }
        uVar15 = (uint)uVar18;
        if (uVar15 != 0) {
          iVar16 = iVar22 + 1;
          iVar57 = (int)*(short *)((long)puVar3 + lVar41 * 2);
          iVar53 = (int)*(short *)((long)puVar23 + lVar41 * 2);
          piVar24[lVar41] = iVar57 * iVar57 + iVar53 * iVar53;
          if (uVar15 != 1) {
            lVar29 = (long)iVar16 * 2;
            iVar53 = iVar22 + 2;
            iVar59 = (int)*(short *)((long)puVar3 + lVar29);
            iVar57 = (int)*(short *)((long)puVar23 + lVar29);
            piVar24[iVar16] = iVar59 * iVar59 + iVar57 * iVar57;
            iVar16 = iVar53;
            if (uVar15 != 2) {
              lVar29 = (long)iVar53 * 2;
              iVar16 = iVar22 + 3;
              iVar59 = (int)*(short *)((long)puVar3 + lVar29);
              iVar57 = (int)*(short *)((long)puVar23 + lVar29);
              piVar24[iVar53] = iVar59 * iVar59 + iVar57 * iVar57;
              if (uVar15 != 3) {
                lVar29 = (long)iVar16 * 2;
                iVar53 = iVar22 + 4;
                iVar59 = (int)*(short *)((long)puVar3 + lVar29);
                iVar57 = (int)*(short *)((long)puVar23 + lVar29);
                piVar24[iVar16] = iVar59 * iVar59 + iVar57 * iVar57;
                iVar16 = iVar53;
                if (uVar15 != 4) {
                  lVar29 = (long)iVar53 * 2;
                  iVar16 = iVar22 + 5;
                  iVar59 = (int)*(short *)((long)puVar3 + lVar29);
                  iVar57 = (int)*(short *)((long)puVar23 + lVar29);
                  piVar24[iVar53] = iVar59 * iVar59 + iVar57 * iVar57;
                  if (uVar15 != 5) {
                    lVar29 = (long)iVar16 * 2;
                    iVar53 = iVar22 + 6;
                    iVar59 = (int)*(short *)((long)puVar3 + lVar29);
                    iVar57 = (int)*(short *)((long)puVar23 + lVar29);
                    piVar24[iVar16] = iVar59 * iVar59 + iVar57 * iVar57;
                    iVar16 = iVar53;
                    if (uVar15 != 6) {
                      lVar29 = (long)iVar53 * 2;
                      iVar16 = iVar22 + 7;
                      iVar59 = (int)*(short *)((long)puVar3 + lVar29);
                      iVar57 = (int)*(short *)((long)puVar23 + lVar29);
                      piVar24[iVar53] = iVar59 * iVar59 + iVar57 * iVar57;
                      if (uVar15 == 8) {
                        lVar29 = (long)iVar16 * 2;
                        iVar57 = (int)*(short *)((long)puVar3 + lVar29);
                        iVar53 = (int)*(short *)((long)puVar23 + lVar29);
                        piVar24[iVar16] = iVar57 * iVar57 + iVar53 * iVar53;
                        iVar16 = iVar22 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar22 = iVar16;
          if (uVar15 == uVar10) goto joined_r0x001996cc;
        }
        uVar2 = ((uVar10 - uVar15) - 8 >> 3) + 1;
        iVar16 = uVar2 * 8;
        if (6 < (uVar10 - 1) - uVar15) {
          lVar29 = (uVar18 + lVar41) * 2;
          uVar42 = 0;
          puVar21 = (undefined8 *)(puVar45 + uVar18 + lVar41 + 1);
          puVar28 = (undefined8 *)(local_590 + lVar29 + lVar38);
          puVar31 = (undefined8 *)(local_530 + lVar32 + lVar29);
          do {
            uVar60 = puVar31[1];
            uVar54 = *puVar31;
            uVar69 = puVar28[1];
            uVar63 = *puVar28;
            uVar42 = uVar42 + 1;
            sVar55 = (short)((ulong)uVar54 >> 0x10);
            sVar56 = (short)((ulong)uVar54 >> 0x20);
            sVar58 = (short)((ulong)uVar54 >> 0x30);
            sVar47 = (short)((ulong)uVar60 >> 0x10);
            sVar49 = (short)((ulong)uVar60 >> 0x20);
            sVar51 = (short)((ulong)uVar60 >> 0x30);
            sVar64 = (short)((ulong)uVar63 >> 0x10);
            sVar65 = (short)((ulong)uVar63 >> 0x20);
            sVar67 = (short)((ulong)uVar63 >> 0x30);
            sVar48 = (short)((ulong)uVar69 >> 0x10);
            sVar50 = (short)((ulong)uVar69 >> 0x20);
            sVar52 = (short)((ulong)uVar69 >> 0x30);
            puVar21[1] = CONCAT44((int)sVar58 * (int)sVar58 + (int)sVar67 * (int)sVar67,
                                  (int)sVar56 * (int)sVar56 + (int)sVar65 * (int)sVar65);
            *puVar21 = CONCAT44((int)sVar55 * (int)sVar55 + (int)sVar64 * (int)sVar64,
                                (int)(short)uVar54 * (int)(short)uVar54 +
                                (int)(short)uVar63 * (int)(short)uVar63);
            puVar21[3] = CONCAT44((int)sVar51 * (int)sVar51 + (int)sVar52 * (int)sVar52,
                                  (int)sVar49 * (int)sVar49 + (int)sVar50 * (int)sVar50);
            puVar21[2] = CONCAT44((int)sVar47 * (int)sVar47 + (int)sVar48 * (int)sVar48,
                                  (int)(short)uVar60 * (int)(short)uVar60 +
                                  (int)(short)uVar69 * (int)(short)uVar69);
            puVar21 = puVar21 + 4;
            puVar28 = puVar28 + 2;
            puVar31 = puVar31 + 2;
          } while (uVar42 < uVar2);
          iVar22 = iVar22 + iVar16;
          if (iVar16 == uVar10 - uVar15) goto joined_r0x001996cc;
        }
        iVar16 = iVar22 + 1;
        lVar32 = (long)iVar22 * 2;
        iVar57 = (int)*(short *)((long)puVar3 + lVar32);
        iVar53 = (int)*(short *)((long)puVar23 + lVar32);
        piVar24[iVar22] = iVar57 * iVar57 + iVar53 * iVar53;
        if (iVar16 < iVar17) {
          iVar53 = iVar22 + 2;
          lVar32 = (long)iVar16 * 2;
          iVar59 = (int)*(short *)((long)puVar3 + lVar32);
          iVar57 = (int)*(short *)((long)puVar23 + lVar32);
          piVar24[iVar16] = iVar59 * iVar59 + iVar57 * iVar57;
          if (iVar53 < iVar17) {
            iVar16 = iVar22 + 3;
            lVar32 = (long)iVar53 * 2;
            iVar59 = (int)*(short *)((long)puVar3 + lVar32);
            iVar57 = (int)*(short *)((long)puVar23 + lVar32);
            piVar24[iVar53] = iVar59 * iVar59 + iVar57 * iVar57;
            if (iVar16 < iVar17) {
              iVar53 = iVar22 + 4;
              lVar32 = (long)iVar16 * 2;
              iVar59 = (int)*(short *)((long)puVar3 + lVar32);
              iVar57 = (int)*(short *)((long)puVar23 + lVar32);
              piVar24[iVar16] = iVar59 * iVar59 + iVar57 * iVar57;
              if (iVar53 < iVar17) {
                iVar16 = iVar22 + 5;
                lVar32 = (long)iVar53 * 2;
                iVar59 = (int)*(short *)((long)puVar3 + lVar32);
                iVar57 = (int)*(short *)((long)puVar23 + lVar32);
                piVar24[iVar53] = iVar59 * iVar59 + iVar57 * iVar57;
                if (iVar16 < iVar17) {
                  iVar22 = iVar22 + 6;
                  lVar32 = (long)iVar16 * 2;
                  iVar57 = (int)*(short *)((long)puVar3 + lVar32);
                  iVar53 = (int)*(short *)((long)puVar23 + lVar32);
                  piVar24[iVar16] = iVar57 * iVar57 + iVar53 * iVar53;
                  if (iVar22 < iVar17) {
                    lVar32 = (long)iVar22 * 2;
                    iVar16 = (int)*(short *)((long)puVar3 + lVar32);
                    iVar17 = (int)*(short *)((long)puVar23 + lVar32);
                    piVar24[iVar22] = iVar16 * iVar16 + iVar17 * iVar17;
                  }
                }
              }
            }
          }
        }
      }
    }
joined_r0x001996cc:
    plVar36 = plVar35;
    plVar37 = __dest;
    if (iVar34 == 1) {
      piVar24[local_4cc] = 0;
      *puVar45 = 0;
    }
    else {
      if (0 < local_4cc) {
        lVar32 = 0;
        lVar38 = 1;
        iVar17 = 0;
        puVar43 = puVar45;
        piVar27 = piVar24;
        do {
          iVar22 = puVar43[1];
          iVar16 = 1;
          puVar39 = puVar43;
          lVar41 = lVar38;
          iVar53 = iVar17;
          do {
            piVar1 = puVar39 + 2;
            iVar57 = iVar16 + iVar17;
            lVar29 = (long)iVar53;
            iVar16 = iVar16 + 1;
            puVar39 = puVar39 + 1;
            if (iVar22 < *piVar1) {
              iVar22 = *piVar1;
              lVar29 = lVar41;
              iVar53 = iVar57;
            }
            lVar41 = lVar41 + 1;
          } while (iVar16 < iVar34);
          *piVar27 = iVar22;
          iVar16 = (int)lVar32;
          iVar17 = iVar17 + iVar34;
          puVar43 = puVar43 + iVar34;
          lVar38 = lVar38 + iVar34;
          *(undefined2 *)((long)puVar23 + lVar32 * 2) = *(undefined2 *)((long)puVar23 + lVar29 * 2);
          *(undefined2 *)((long)puVar3 + lVar32 * 2) = *(undefined2 *)((long)puVar3 + lVar29 * 2);
          lVar32 = lVar32 + 1;
          piVar27 = piVar27 + 1;
        } while (iVar16 + 1 < local_4cc);
      }
      piVar24[local_4cc] = 0;
      *puVar45 = 0;
    }
    do {
      iVar17 = local_4cc;
      lVar38 = local_530;
      lVar32 = local_590;
      pMVar25 = local_5b0;
      plVar35 = plVar36;
      __dest = plVar37;
      if (lVar44 != 0) {
        lVar26 = (long)plVar20 - (long)plVar37 >> 3;
        puVar80[local_4cc] = 1;
        puVar80[-1] = 1;
        lVar29 = *local_558;
        local_648 = local_5b8;
        piVar24 = (int *)((long)local_5b0 + 4);
        local_640 = local_5a8;
        lVar41 = *local_4f8;
        lVar40 = (long)local_5a8 - (long)local_5b0 >> 2;
        lVar33 = (long)local_5b8 - (long)local_5b0 >> 2;
        if ((long)local_650 < lVar26 + local_4cc) {
          __n = (long)plVar36 - (long)plVar37;
          local_620 = (int)lVar26;
          iVar16 = (local_614 * 3) / 2;
          local_614 = local_4cc + local_620;
          if (local_4cc + local_620 < iVar16) {
            local_614 = iVar16;
          }
          uVar18 = NEON_sshr(__n,3);
          local_650 = (ulong)local_614;
          if (uVar18 < local_650) {
            uVar11 = local_650 - uVar18;
            if (uVar11 != 0) {
              if ((ulong)((long)local_5f0 - (long)plVar36 >> 3) < uVar11) {
                if (0x1fffffffffffffff - uVar18 < uVar11) {
                    /* WARNING: Subroutine does not return */
                  FUN_0040f39c("vector::_M_fill_insert");
                }
                uVar4 = uVar11;
                if (uVar11 < uVar18) {
                  uVar4 = uVar18;
                }
                uVar4 = uVar4 + uVar18;
                if ((uVar4 < uVar18) || (0x1fffffffffffffff < uVar4)) {
                  local_5f0 = (long *)0xfffffffffffffff8;
LAB_00199dcc:
                  __dest = operator_new((ulong)local_5f0);
                }
                else {
                  __dest = (long *)0x0;
                  local_5f0 = (long *)0x0;
                  if (uVar4 != 0) {
                    local_5f0 = (long *)(uVar4 * 8);
                    goto LAB_00199dcc;
                  }
                }
                __n_01 = uVar11 * 8;
                memset((void *)((long)__dest + __n),0,__n_01);
                if (uVar18 == 0) {
                  plVar35 = (long *)((long)__dest + __n + __n_01);
                  if (plVar37 != (long *)0x0) goto LAB_00199c68;
                }
                else {
                  __dest = memmove(__dest,plVar37,__n);
                  plVar35 = (long *)((long)__dest + __n + __n_01);
LAB_00199c68:
                  operator_delete(plVar37);
                }
                local_5f0 = (long *)((long)__dest + (long)local_5f0);
                iVar17 = local_4cc;
              }
              else {
                plVar35 = plVar36 + uVar11;
                memset(plVar36,0,uVar11 * 8);
              }
            }
          }
          else if (local_650 < uVar18) {
            plVar35 = plVar37 + local_650;
          }
          plVar20 = __dest + local_620;
        }
        if (0 < iVar17) {
          lVar26 = 0;
          bVar9 = false;
          piVar27 = piVar24;
          puVar30 = puVar80;
          do {
            while( true ) {
              iVar17 = *piVar27;
              iVar16 = (int)lVar26;
              if (iVar17 <= iVar14) goto LAB_00199230;
              uVar6 = *(ushort *)(lVar38 + (lVar44 + -1) * lVar41 + lVar26 * 2);
              uVar7 = *(ushort *)(lVar32 + (lVar44 + -1) * lVar29 + lVar26 * 2);
              uVar15 = (int)(short)uVar6 >> 0x1f;
              iVar22 = (((int)(short)uVar6 ^ uVar15) - uVar15) * 0x8000;
              uVar15 = (int)(short)uVar7 >> 0x1f;
              iVar53 = ((int)(short)uVar7 ^ uVar15) - uVar15;
              if (iVar22 < iVar53 * 0x3505) break;
              if (iVar53 * 0x13505 < iVar22) {
                if ((piVar27[lVar33] < iVar17) && (piVar27[lVar40] <= iVar17)) {
                  if (local_618 < iVar17) goto LAB_001991e4;
                  goto LAB_00199318;
                }
LAB_00199230:
                *puVar30 = 1;
              }
              else {
                lVar5 = -1;
                if (-1 < (short)(uVar6 ^ uVar7)) {
                  lVar5 = 1;
                }
                if (iVar17 <= piVar24[(lVar26 + lVar33) - lVar5]) goto LAB_00199230;
                if (piVar24[lVar40 + lVar26 + lVar5] < iVar17) goto LAB_001991d8;
                *puVar30 = 1;
              }
              bVar9 = false;
              piVar27 = piVar27 + 1;
              lVar26 = lVar26 + 1;
              puVar30 = puVar30 + 1;
              if (local_4cc <= iVar16 + 1) goto LAB_00199254;
            }
            if ((iVar17 <= *(int *)((long)pMVar25 + lVar26 * 4)) || (iVar17 < piVar27[1]))
            goto LAB_00199230;
LAB_001991d8:
            if (local_618 < iVar17) {
LAB_001991e4:
              if ((bVar9) || (puVar30[-__n_00] == '\x02')) goto LAB_00199318;
              *puVar30 = 2;
              bVar9 = true;
              *plVar20 = (long)puVar30;
              plVar20 = plVar20 + 1;
            }
            else {
LAB_00199318:
              *puVar30 = 0;
            }
            piVar27 = piVar27 + 1;
            lVar26 = lVar26 + 1;
            puVar30 = puVar30 + 1;
          } while (iVar16 + 1 < local_4cc);
LAB_00199254:
          local_648 = local_5b8;
          local_640 = local_5a8;
          pMVar25 = local_5b0;
        }
        local_5b0 = (Mat *)local_640;
        local_5a8 = local_648;
        local_5b8 = (undefined4 *)pMVar25;
      }
      iVar17 = (int)lVar44 + 1;
      if (local_4d0 < iVar17) {
        if (plVar20 <= __dest) goto LAB_00199930;
        lVar32 = 1 - __n_00;
        lVar44 = __n_00 - 1;
        plVar36 = __dest;
        goto LAB_00199864;
      }
      iVar16 = 2;
      if (iVar17 < 1) {
        iVar16 = 1;
      }
      lVar44 = lVar44 + 1;
      puVar80 = puVar80 + __n_00;
      puVar45 = *(undefined4 **)((_InputArray *)&local_5b8 + (long)iVar16 * 8);
      if ((int)lVar44 < local_4d0) goto LAB_00198af8;
LAB_001992bc:
      memset(puVar45,0,__n_02);
      plVar36 = plVar35;
      plVar37 = __dest;
    } while( true );
  }
LAB_001999a0:
  if (plVar20 != (long *)0x0) {
    operator_delete(plVar20);
  }
  if ((local_418 != &local_408) && (local_418 != (undefined4 *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_508 != 0) {
    piVar24 = (int *)(local_508 + 0x14);
    do {
      iVar34 = *piVar24;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar9) {
        *piVar24 = iVar34 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar34 == 1) {
      Mat::deallocate((Mat *)&local_540);
    }
  }
  local_508 = 0;
  local_530 = 0;
  local_518 = 0;
  local_520 = 0;
  local_528 = 0;
  if (0 < local_540._4_4_) {
    iVar34 = 0;
    puVar23 = local_500;
    do {
      *(undefined4 *)puVar23 = 0;
      iVar34 = iVar34 + 1;
      puVar23 = (undefined8 *)((long)puVar23 + 4);
    } while (iVar34 < local_540._4_4_);
  }
  if (local_4f8 != local_4f0) {
    fastFree(local_4f8);
  }
  if (local_568 != 0) {
    piVar24 = (int *)(local_568 + 0x14);
    do {
      iVar34 = *piVar24;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar9) {
        *piVar24 = iVar34 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar34 == 1) {
      Mat::deallocate((Mat *)&local_5a0);
    }
  }
  local_568 = 0;
  local_590 = 0;
  local_578 = 0;
  local_580 = 0;
  local_588 = 0;
  if (0 < local_5a0._4_4_) {
    iVar34 = 0;
    puVar23 = local_560;
    do {
      *(undefined4 *)puVar23 = 0;
      iVar34 = iVar34 + 1;
      puVar23 = (undefined8 *)((long)puVar23 + 4);
    } while (iVar34 < local_5a0._4_4_);
  }
  if (local_558 != local_550) {
    fastFree(local_558);
  }
  if (local_440 != 0) {
    piVar24 = (int *)(local_440 + 0x14);
    do {
      iVar34 = *piVar24;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar9) {
        *piVar24 = iVar34 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar34 == 1) {
      Mat::deallocate(local_628);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar34 = 0;
    puVar45 = local_438;
    do {
      iVar34 = iVar34 + 1;
      *puVar45 = 0;
      puVar45 = puVar45 + 1;
    } while (iVar34 < local_474);
  }
  if (local_430 != local_428) {
    fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar24 = (int *)(local_4a0 + 0x14);
    do {
      iVar34 = *piVar24;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar9) {
        *piVar24 = iVar34 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar34 == 1) {
      Mat::deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar34 = 0;
    piVar24 = local_498;
    do {
      *piVar24 = 0;
      iVar34 = iVar34 + 1;
      piVar24 = piVar24 + 1;
    } while (iVar34 < local_4d4);
  }
  if (local_490 != &local_488) {
    fastFree(local_490);
  }
  return;
  while( true ) {
    lVar38 = plVar20[-1];
    if (*(char *)(lVar38 + -1) == '\0') {
      *(undefined1 *)(lVar38 + -1) = 2;
      plVar20[-1] = lVar38 + -1;
    }
    else {
      plVar20 = plVar20 + -1;
    }
    plVar35 = plVar20;
    if (*(char *)(lVar38 + 1) == '\0') {
      plVar35 = plVar20 + 1;
      *(undefined1 *)(lVar38 + 1) = 2;
      *plVar20 = lVar38 + 1;
    }
    uVar18 = ~__n_00;
    plVar20 = plVar35;
    if (*(char *)(lVar38 + uVar18) == '\0') {
      plVar20 = plVar35 + 1;
      *(undefined1 *)(lVar38 + uVar18) = 2;
      *plVar35 = lVar38 + uVar18;
    }
    pcVar19 = (char *)(lVar38 - __n_00);
    if (*pcVar19 == '\0') {
      *pcVar19 = '\x02';
      *plVar20 = (long)pcVar19;
      plVar20 = plVar20 + 1;
    }
    plVar35 = plVar20;
    if (*(char *)(lVar38 + lVar32) == '\0') {
      plVar35 = plVar20 + 1;
      *(undefined1 *)(lVar38 + lVar32) = 2;
      *plVar20 = lVar38 + lVar32;
    }
    if (*(char *)(lVar38 + lVar44) == '\0') {
      *(undefined1 *)(lVar38 + lVar44) = 2;
      *plVar35 = lVar38 + lVar44;
      plVar35 = plVar35 + 1;
    }
    plVar20 = plVar35;
    if (*(char *)(lVar38 + __n_00) == '\0') {
      plVar20 = plVar35 + 1;
      *(undefined1 *)(lVar38 + __n_00) = 2;
      *plVar35 = lVar38 + __n_00;
    }
    lVar41 = __n_00 + 1;
    if (*(char *)(lVar38 + lVar41) == '\0') {
      *(undefined1 *)(lVar38 + lVar41) = 2;
      *plVar20 = lVar38 + lVar41;
      plVar20 = plVar20 + 1;
    }
    plVar35 = plVar37;
    plVar36 = __dest;
    if (plVar20 <= __dest) break;
LAB_00199864:
    lVar38 = (long)plVar20 - (long)plVar36 >> 3;
    plVar37 = plVar35;
    __dest = plVar36;
    if ((long)local_650 <= lVar38 + 7) {
      __s_00 = (void *)((long)plVar35 - (long)plVar36);
      uVar18 = (long)__s_00 >> 3;
      local_614 = (local_614 * 3) / 2;
      local_650 = (ulong)local_614;
      if (uVar18 < local_650) {
        uVar11 = local_650 - uVar18;
        if (uVar11 != 0) {
          if ((ulong)((long)local_5f0 - (long)plVar35 >> 3) < uVar11) {
            if (0x1fffffffffffffff - uVar18 < uVar11) {
                    /* WARNING: Subroutine does not return */
              FUN_0040f39c("vector::_M_fill_insert");
            }
            uVar4 = uVar11;
            if (uVar11 < uVar18) {
              uVar4 = uVar18;
            }
            uVar4 = uVar4 + uVar18;
            if ((uVar4 < uVar18) || (0x1fffffffffffffff < uVar4)) {
              uVar46 = 0xfffffffffffffff8;
LAB_00199e98:
              __dest = operator_new(uVar46);
              memset((void *)((long)__dest + (long)__s_00),0,uVar11 * 8);
              if (uVar18 == 0) goto LAB_00199e60;
LAB_00199ec0:
              memmove(__dest,plVar36,(size_t)__s_00);
              plVar37 = (long *)((long)__dest + (long)(uVar11 * 8 + (long)__s_00));
LAB_00199e74:
              operator_delete(plVar36);
            }
            else {
              uVar46 = 0;
              __dest = (long *)0x0;
              if (uVar4 != 0) {
                uVar46 = uVar4 * 8;
                goto LAB_00199e98;
              }
              memset(__s_00,0,uVar11 * 8);
              if (uVar18 != 0) goto LAB_00199ec0;
LAB_00199e60:
              plVar37 = (long *)((long)__dest + (long)(uVar11 * 8 + (long)__s_00));
              if (plVar36 != (long *)0x0) goto LAB_00199e74;
            }
            local_5f0 = (long *)((long)__dest + uVar46);
          }
          else {
            plVar37 = plVar35 + uVar11;
            memset(plVar35,0,uVar11 * 8);
          }
        }
      }
      else if (local_650 < uVar18) {
        plVar37 = plVar36 + local_650;
      }
      plVar20 = __dest + (int)lVar38;
    }
  }
LAB_00199930:
  lVar44 = (long)__s + __n_00 + 1;
  plVar20 = __dest;
  if (0 < local_4d0) {
    iVar34 = 0;
    lVar32 = local_468;
    do {
      lVar38 = 0;
      if (0 < local_4cc) {
        do {
          iVar14 = (int)lVar38;
          *(byte *)(lVar32 + lVar38) = -(*(byte *)(lVar44 + lVar38) >> 1);
          lVar38 = lVar38 + 1;
        } while (iVar14 + 1 < local_4cc);
      }
      iVar34 = iVar34 + 1;
      lVar44 = lVar44 + __n_00;
      lVar32 = lVar32 + local_428[0];
    } while (iVar34 < local_4d0);
  }
  goto LAB_001999a0;
}


==================================================================

### FUNC 0019a210 (732 bytes) name=cvCanny

void cvCanny(double param_1,double param_2,cv *param_3,cv *param_4,uint param_5,undefined8 param_6,
            undefined8 param_7,AutoBuffer *param_8)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  char *pcVar11;
  int *piVar12;
  int iVar13;
  int *piVar14;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
  iVar13 = local_80[-1];
  if (iVar13 == local_20[-1]) {
    if (iVar13 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_0019a4a8;
    }
    else if (iVar13 < 1) {
LAB_0019a4a8:
      if (((local_c0 & 7) == 0) && ((local_60 & 0xfff) == 0)) goto LAB_0019a304;
    }
    else if (*local_80 == *local_20) {
      piVar12 = local_80;
      piVar14 = local_20;
      do {
        piVar14 = piVar14 + 1;
        if (piVar12 == local_80 + (iVar13 - 1)) goto LAB_0019a4a8;
        piVar12 = piVar12 + 1;
      } while (*piVar12 == *piVar14);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_d8,0x43);
  cVar1 = s_src_size____dst_size____src_dept_0043db88[0x42];
  uVar10 = s_src_size____dst_size____src_dept_0043db88._56_8_;
  uVar9 = s_src_size____dst_size____src_dept_0043db88._48_8_;
  uVar8 = s_src_size____dst_size____src_dept_0043db88._40_8_;
  uVar7 = s_src_size____dst_size____src_dept_0043db88._32_8_;
  uVar6 = s_src_size____dst_size____src_dept_0043db88._24_8_;
  uVar5 = s_src_size____dst_size____src_dept_0043db88._16_8_;
  uVar4 = s_src_size____dst_size____src_dept_0043db88._8_8_;
  uVar3 = s_src_size____dst_size____src_dept_0043db88._0_8_;
  *(undefined2 *)(pcVar11 + 0x40) = s_src_size____dst_size____src_dept_0043db88._64_2_;
  pcVar11[0x42] = cVar1;
  *(undefined8 *)pcVar11 = uVar3;
  *(undefined8 *)(pcVar11 + 8) = uVar4;
  *(undefined8 *)(pcVar11 + 0x10) = uVar5;
  *(undefined8 *)(pcVar11 + 0x18) = uVar6;
  *(undefined8 *)(pcVar11 + 0x20) = uVar7;
  *(undefined8 *)(pcVar11 + 0x28) = uVar8;
  *(undefined8 *)(pcVar11 + 0x30) = uVar9;
  *(undefined8 *)(pcVar11 + 0x38) = uVar10;
  cv::error(-0xd7,(String *)&local_d8,"void cvCanny(const CvArr*, CvArr*, double, double, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/canny.cpp",0x3c7);
  cv::String::deallocate((String *)&local_d8);
LAB_0019a304:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::Canny((_InputArray *)local_f0,(_OutputArray *)&local_d8,param_1,param_2,param_5 & 0xff,
            SUB41(param_5 >> 0x1f,0));
  if (local_28 != 0) {
    piVar12 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar12 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0019a54c (4 bytes) name=FUN_0019a54c

void FUN_0019a54c(void)

{
  return;
}


==================================================================

### FUNC 0019a550 (148 bytes) name=FUN_0019a550

void FUN_0019a550(long param_1)

{
  long lVar1;
  long local_10;
  int local_8;
  
  lVar1 = *(long *)(param_1 + 0x88);
  if (lVar1 != 0) {
    if (*(int *)(param_1 + 0x17c) != 0) {
      cvSaveMemStoragePos(*(undefined8 *)(param_1 + 8),&local_10);
      if ((local_10 == *(long *)(param_1 + 0x40)) && (local_8 == *(int *)(param_1 + 0x48))) {
        cvRestoreMemStoragePos(*(undefined8 *)(param_1 + 8),param_1 + 0x30);
        *(undefined4 *)(param_1 + 0x17c) = 0;
      }
      else {
        *(undefined4 *)(param_1 + 0x17c) = 0;
      }
    }
    if (*(long *)(lVar1 + 0x18) != 0) {
      cvInsertNodeIntoTree
                (*(long *)(lVar1 + 0x18),*(undefined8 *)(*(long *)(lVar1 + 0x10) + 0x18),
                 param_1 + 0x110);
    }
    *(undefined8 *)(param_1 + 0x88) = 0;
  }
  return;
}


==================================================================

### FUNC 0019a5e4 (1304 bytes) name=FUN_0019a5e4

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0019a5e4(byte *param_1,uint param_2,ulong param_3,uint *param_4,int param_5,byte param_6,
                 undefined8 *param_7)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  byte *pbVar6;
  byte *pbVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  uint uVar11;
  ulong uVar12;
  ulong uVar13;
  uint uVar14;
  ulong uVar15;
  uint uVar17;
  ulong uVar18;
  undefined1 auStack_70 [24];
  uint *local_58;
  uint *local_48;
  uint local_40 [4];
  undefined4 local_30;
  int iStack_2c;
  uint local_28;
  uint local_24;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  ulong uVar16;
  
  iStack_2c = param_2 - 1;
  iVar2 = param_5 + -1;
  local_30 = 0xffffffff;
  local_40[0] = 1;
  local_40[2] = -param_2;
  local_40[1] = 1 - param_2;
  uVar5 = param_2 + 1;
  uVar3 = ~param_2;
  uVar12 = param_3 & 0xffffffff;
  uVar17 = (uint)param_3;
  uVar13 = (long)param_3 >> 0x20;
  uVar14 = (uint)(param_3 >> 0x20);
  local_20 = CONCAT44(local_40[1],1);
  uStack_18 = CONCAT44(uVar3,local_40[2]);
  local_10 = CONCAT44(iStack_2c,0xffffffff);
  uStack_8 = CONCAT44(uVar5,param_2);
  local_40[3] = uVar3;
  local_28 = param_2;
  local_24 = uVar5;
  cvStartAppendToSeq(param_4,auStack_70);
  if (iVar2 < 0) {
    param_4[0x18] = uVar17;
    param_4[0x19] = uVar14;
  }
  if ((*param_4 & 0x8000) == 0) {
    uVar5 = uVar3;
  }
  uVar3 = 0;
  if ((*param_4 & 0x8000) == 0) {
    uVar3 = 4;
  }
  uVar4 = uVar3 - 1;
  while( true ) {
    uVar11 = uVar4 & 7;
    uVar4 = uVar11 - 1;
    if (param_1[(int)uVar5] != 0) break;
    if (uVar3 == uVar11) goto LAB_0019aa94;
    uVar5 = local_40[(int)(uVar4 & 7)];
  }
  if (uVar3 != uVar11) {
    uVar18 = param_3 & 0xffffffff;
    uVar10 = uVar13 & 0xffffffff;
    pbVar6 = param_1;
    uVar15 = uVar13 & 0xffffffff;
    uVar3 = uVar11 ^ 4;
    do {
      uVar4 = uVar11 + 1;
      pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
      if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
        uVar4 = uVar11 + 2;
        pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
        if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
          uVar4 = uVar11 + 3;
          pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
          if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
            uVar4 = uVar11 + 4;
            pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
            if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
              uVar4 = uVar11 + 5;
              pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
              if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                uVar4 = uVar11 + 6;
                pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                  uVar4 = uVar11 + 7;
                  pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                  if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                    uVar4 = uVar11 + 8;
                    pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                    if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                      uVar4 = uVar11 + 9;
                      pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                      if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                        uVar4 = uVar11 + 10;
                        pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                        if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                          uVar4 = uVar11 + 0xb;
                          pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                          if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                            uVar4 = uVar11 + 0xc;
                            pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                            if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                              uVar4 = uVar11 + 0xd;
                              pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                              if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                                uVar4 = uVar11 + 0xe;
                                pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                                if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                                  uVar4 = uVar11 + 0xf;
                                  pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                                  if (pbVar6[(int)local_40[(int)uVar4]] == 0) {
                                    uVar4 = uVar11 + 0x10;
                                    pbVar7 = pbVar6 + (int)local_40[(int)uVar4];
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      uVar4 = uVar4 & 7;
      uVar8 = (uint)param_3;
      uVar9 = (uint)uVar10;
      uVar16 = uVar15;
      if (uVar4 - 1 < uVar11) {
        *pbVar6 = param_6 | 0x80;
LAB_0019a874:
        if (-1 < iVar2) goto LAB_0019a878;
LAB_0019a8d4:
        if (local_48 <= local_58) {
          cvCreateSeqBlock(auStack_70);
        }
        *(char *)local_58 = (char)uVar4;
LAB_0019a920:
        if (uVar4 != uVar3) {
          if ((int)uVar8 < (int)uVar18) {
            uVar18 = param_3 & 0xffffffff;
          }
          else {
            uVar3 = (uint)uVar12;
            if ((int)(uint)uVar12 < (int)uVar8) {
              uVar3 = uVar8;
            }
            uVar12 = (ulong)uVar3;
          }
          uVar16 = uVar10;
          if ((int)uVar15 <= (int)uVar9) {
            uVar3 = (uint)uVar13;
            if ((int)(uint)uVar13 < (int)uVar9) {
              uVar3 = uVar9;
            }
            uVar13 = (ulong)uVar3;
            uVar16 = uVar15;
          }
        }
      }
      else {
        if (*pbVar6 != 1) goto LAB_0019a874;
        *pbVar6 = param_6;
        if (iVar2 < 0) goto LAB_0019a8d4;
LAB_0019a878:
        if ((uVar4 != uVar3) || (param_5 == 1)) {
          if (local_48 <= local_58) {
            cvCreateSeqBlock(auStack_70);
          }
          *local_58 = uVar8;
          local_58[1] = uVar9;
          goto LAB_0019a920;
        }
      }
      uVar14 = (uint)uVar16;
      uVar17 = (uint)uVar18;
      param_3 = (ulong)(uVar8 + (&DAT_00531e50)[(ulong)uVar4 * 2]);
      uVar10 = (ulong)(uVar9 + (&DAT_00531e54)[(ulong)uVar4 * 2]);
      if ((param_1 == pbVar7) &&
         (uVar3 = (uint)uVar13, uVar11 = (uint)uVar12, pbVar6 == param_1 + (int)uVar5))
      goto LAB_0019a968;
      uVar11 = uVar4 + 4 & 7;
      pbVar6 = pbVar7;
      uVar15 = uVar16;
      uVar3 = uVar4;
    } while( true );
  }
LAB_0019aa94:
  *param_1 = param_6 | 0x80;
  uVar3 = uVar14;
  uVar11 = uVar17;
  if (-1 < iVar2) {
    if (local_48 <= local_58) {
      cvCreateSeqBlock(auStack_70);
    }
    *local_58 = uVar17;
    local_58[1] = uVar14;
    local_58 = local_58 + 2;
  }
LAB_0019a968:
  iVar2 = uVar3 + (1 - uVar14);
  iVar1 = uVar11 + (1 - uVar17);
  cvEndWriteSeq(auStack_70);
  if (param_5 != 0) {
    *(ulong *)(param_4 + 0x1a) = CONCAT44(iVar2,iVar1);
    *(ulong *)(param_4 + 0x18) = CONCAT44(uVar14,uVar17);
  }
  if (param_7 != (undefined8 *)0x0) {
    param_7[1] = CONCAT44(iVar2,iVar1);
    *param_7 = CONCAT44(uVar14,uVar17);
  }
  return;
}


==================================================================

### FUNC 0019aafc (1012 bytes) name=FUN_0019aafc

void FUN_0019aafc(char *param_1,uint param_2,ulong param_3,uint *param_4,int param_5)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  ulong uVar4;
  ulong uVar5;
  uint uVar6;
  uint uVar7;
  ulong uVar8;
  char *pcVar9;
  char *pcVar10;
  uint uVar11;
  ulong uVar12;
  undefined1 auStack_70 [24];
  uint *local_58;
  uint *local_48;
  uint local_40 [4];
  undefined4 local_30;
  int iStack_2c;
  uint local_28;
  uint local_24;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  iStack_2c = param_2 - 1;
  uVar5 = param_3 & 0xffffffff;
  local_40[0] = 1;
  local_40[1] = 1 - param_2;
  local_40[2] = -param_2;
  uVar6 = ~param_2;
  uVar7 = param_2 + 1;
  iVar1 = param_5 + -1;
  local_30 = 0xffffffff;
  local_20 = CONCAT44(local_40[1],1);
  uStack_18 = CONCAT44(uVar6,local_40[2]);
  local_10 = CONCAT44(iStack_2c,0xffffffff);
  uStack_8 = CONCAT44(uVar7,param_2);
  uVar12 = (long)param_3 >> 0x20;
  local_40[3] = uVar6;
  local_28 = param_2;
  local_24 = uVar7;
  cvStartAppendToSeq(param_4,auStack_70);
  uVar11 = (uint)(param_3 >> 0x20);
  if (iVar1 < 0) {
    param_4[0x18] = (uint)param_3;
    param_4[0x19] = uVar11;
  }
  if ((*param_4 & 0x8000) == 0) {
    uVar7 = uVar6;
  }
  uVar6 = 0;
  if ((*param_4 & 0x8000) == 0) {
    uVar6 = 4;
  }
  uVar3 = uVar6 - 1;
  while( true ) {
    uVar2 = uVar3 & 7;
    uVar3 = uVar2 - 1;
    if (param_1[(int)uVar7] != '\0') break;
    if (uVar6 == uVar2) goto LAB_0019ae08;
    uVar7 = local_40[(int)(uVar3 & 7)];
  }
  uVar4 = (ulong)(uVar2 ^ 4);
  pcVar9 = param_1;
  if (uVar6 == uVar2) {
LAB_0019ae08:
    *param_1 = -0x7e;
    if (-1 < iVar1) {
      if (local_48 <= local_58) {
        cvCreateSeqBlock(auStack_70);
      }
      *local_58 = (uint)param_3;
      local_58[1] = uVar11;
      local_58 = local_58 + 2;
    }
LAB_0019ae44:
    cvEndWriteSeq(auStack_70);
    if (param_5 != 0) {
      cvBoundingRect(param_4,1);
    }
    return;
  }
  do {
    uVar6 = uVar2 + 1;
    pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
    if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
      uVar6 = uVar2 + 2;
      pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
      if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
        uVar6 = uVar2 + 3;
        pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
        if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
          uVar6 = uVar2 + 4;
          pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
          if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
            uVar6 = uVar2 + 5;
            pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
            if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
              uVar6 = uVar2 + 6;
              pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
              if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                uVar6 = uVar2 + 7;
                pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                  uVar6 = uVar2 + 8;
                  pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                  if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                    uVar6 = uVar2 + 9;
                    pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                    if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                      uVar6 = uVar2 + 10;
                      pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                      if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                        uVar6 = uVar2 + 0xb;
                        pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                        if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                          uVar6 = uVar2 + 0xc;
                          pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                          if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                            uVar6 = uVar2 + 0xd;
                            pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                            if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                              uVar6 = uVar2 + 0xe;
                              pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                              if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                                uVar6 = uVar2 + 0xf;
                                pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                                if (pcVar9[(int)local_40[(int)uVar6]] == '\0') {
                                  uVar6 = uVar2 + 0x10;
                                  pcVar10 = pcVar9 + (int)local_40[(int)uVar6];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    uVar6 = uVar6 & 7;
    uVar8 = (ulong)uVar6;
    if (uVar6 - 1 < uVar2) {
      *pcVar9 = -0x7e;
LAB_0019ad54:
      if (iVar1 < 0) goto LAB_0019adb4;
LAB_0019ad58:
      if ((uVar6 != (uint)uVar4) || (param_5 == 1)) {
        if (local_48 <= local_58) {
          cvCreateSeqBlock(auStack_70);
        }
        *local_58 = (uint)uVar5;
        local_58[1] = (uint)uVar12;
        local_58 = local_58 + 2;
        uVar4 = uVar8;
      }
      uVar5 = (ulong)((uint)uVar5 + (&DAT_00531e50)[uVar8 * 2]);
      uVar12 = (ulong)((uint)uVar12 + (&DAT_00531e54)[uVar8 * 2]);
    }
    else {
      if (*pcVar9 != '\x01') goto LAB_0019ad54;
      *pcVar9 = '\x02';
      if (-1 < iVar1) goto LAB_0019ad58;
LAB_0019adb4:
      if (local_48 <= local_58) {
        cvCreateSeqBlock(auStack_70);
      }
      *(char *)local_58 = (char)uVar6;
      local_58 = (uint *)((long)local_58 + 1);
    }
    if ((param_1 == pcVar10) && (pcVar9 == param_1 + (int)uVar7)) goto LAB_0019ae44;
    uVar2 = uVar6 + 4 & 7;
    pcVar9 = pcVar10;
  } while( true );
}


==================================================================

### FUNC 0019aef0 (52 bytes) name=FUN_0019aef0

void FUN_0019aef0(long *param_1)

{
  cv::DefaultDeleter<CvMemStorage>::operator()
            ((DefaultDeleter<CvMemStorage> *)(param_1 + 3),(CvMemStorage *)param_1[2]);
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 0019af24 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 0019af28 (296 bytes) name=cvStartReadChainPoints

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvStartReadChainPoints(long param_1,long param_2)

{
  undefined1 uVar1;
  undefined1 uVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  undefined1 uVar7;
  undefined1 uVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvStartReadChainPoints(CvChain*, CvChainPtReader*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x3b);
    cv::String::deallocate((String *)&local_10);
  }
  if ((*(int *)(param_1 + 0x2c) != 1) || (*(int *)(param_1 + 4) < 0x68)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"void cvStartReadChainPoints(CvChain*, CvChainPtReader*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x3e);
    cv::String::deallocate((String *)&local_10);
  }
  cvStartReadSeq(param_1,param_2,0);
  *(undefined8 *)(param_2 + 0x44) = *(undefined8 *)(param_1 + 0x60);
  uVar1 = (undefined1)_DAT_00531e50;
  uVar3 = (ulong)_DAT_00531e50 >> 0x20;
  uVar2 = (undefined1)uRam0000000000531e58;
  uVar4 = (ulong)uRam0000000000531e58 >> 0x20;
  uVar7 = (undefined1)_DAT_00531e60;
  uVar5 = (ulong)_DAT_00531e60 >> 0x20;
  uVar8 = (undefined1)_DAT_00531e68;
  uVar6 = (ulong)_DAT_00531e68 >> 0x20;
  *(ulong *)(param_2 + 0x54) =
       CONCAT17((char)((ulong)_DAT_00531e88 >> 0x20),
                CONCAT16((char)_DAT_00531e88,
                         CONCAT15((char)((ulong)_DAT_00531e80 >> 0x20),
                                  CONCAT14((char)_DAT_00531e80,
                                           CONCAT13((char)((ulong)uRam0000000000531e78 >> 0x20),
                                                    CONCAT12((char)uRam0000000000531e78,
                                                             CONCAT11((char)((ulong)_DAT_00531e70 >>
                                                                            0x20),
                                                                      (char)_DAT_00531e70)))))));
  *(ulong *)(param_2 + 0x4c) =
       CONCAT17((char)uVar6,
                CONCAT16(uVar8,CONCAT15((char)uVar5,
                                        CONCAT14(uVar7,CONCAT13((char)uVar4,
                                                                CONCAT12(uVar2,CONCAT11((char)uVar3,
                                                                                        uVar1)))))))
  ;
  return;
}


==================================================================

### FUNC 0019b078 (228 bytes) name=cvReadChainPoint

undefined8 cvReadChainPoint(long param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  char cVar4;
  undefined8 uVar5;
  char *pcVar6;
  char *pcVar7;
  ulong uVar8;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvPoint cvReadChainPoint(CvChainPtReader*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x54);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar6 = *(char **)(param_1 + 0x18);
  iVar1 = *(int *)(param_1 + 0x44);
  iVar2 = *(int *)(param_1 + 0x48);
  uVar5 = *(undefined8 *)(param_1 + 0x44);
  if (pcVar6 != (char *)0x0) {
    pcVar7 = pcVar6 + 1;
    cVar4 = *pcVar6;
    if (*(char **)(param_1 + 0x28) <= pcVar7) {
      cvChangeSeqBlock(param_1,1);
      pcVar7 = *(char **)(param_1 + 0x18);
    }
    uVar8 = -((ulong)(long)cVar4 >> 0x1f & 1) & 0xfffffff800000000 |
            ((long)cVar4 & 0xffffffffU) << 3;
    *(char **)(param_1 + 0x18) = pcVar7;
    *(char *)(param_1 + 0x40) = cVar4;
    iVar3 = *(int *)((long)&DAT_00531e54 + uVar8);
    *(int *)(param_1 + 0x44) = *(int *)((long)&DAT_00531e50 + uVar8) + iVar1;
    *(int *)(param_1 + 0x48) = iVar2 + iVar3;
  }
  return uVar5;
}


==================================================================

### FUNC 0019b170 (1896 bytes) name=cvStartFindContours

long * cvStartFindContours(undefined8 param_1,long param_2,int param_3,int param_4,uint param_5,
                          undefined8 param_6)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  undefined4 uVar8;
  uint *puVar9;
  long *__s;
  long lVar10;
  undefined8 *puVar11;
  long lVar12;
  undefined1 *puVar13;
  uint uVar14;
  int iVar15;
  undefined8 *puVar16;
  uint uVar17;
  undefined1 *puVar18;
  long lVar19;
  uint uVar20;
  void *pvVar21;
  uint uVar22;
  uint local_44;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  long local_20;
  
  if (param_2 == 0) {
    local_28 = param_2;
    local_20 = param_2;
    cv::String::allocate((String *)&local_28,0);
    cv::error(-0x1b,(String *)&local_28,
              "_CvContourScanner* cvStartFindContours(void*, CvMemStorage*, int, int, int, CvPoint)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0xbb);
    cv::String::deallocate((String *)&local_28);
  }
  puVar9 = (uint *)cvGetMat(param_1,(String *)&local_28,0,0);
  uVar22 = *puVar9 & 0xfff;
  if ((param_4 == 2) && (uVar22 == 4)) {
    param_4 = 4;
LAB_0019b1f4:
    uVar22 = puVar9[9];
    uVar20 = puVar9[1];
    pvVar21 = *(void **)(puVar9 + 6);
    local_44 = puVar9[8];
    if (param_5 < 5) goto LAB_0019b214;
LAB_0019b820:
    local_38 = 0;
    local_30 = 0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xd3,(String *)&local_38,
              "_CvContourScanner* cvStartFindContours(void*, CvMemStorage*, int, int, int, CvPoint)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0xcd);
    cv::String::deallocate((String *)&local_38);
    iVar7 = 0x80;
  }
  else {
    if (((param_4 < 4) && ((*puVar9 & 0xffe) == 0)) || ((param_4 == 4 && (uVar22 == 4))))
    goto LAB_0019b1f4;
    local_38 = 0;
    local_30 = 0;
    pvVar21 = (void *)cv::String::allocate((String *)&local_38,0x77);
    memcpy(pvVar21,
           "[Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only"
           ,0x77);
    cv::error(-0xd2,(String *)&local_38,
              "_CvContourScanner* cvStartFindContours(void*, CvMemStorage*, int, int, int, CvPoint)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0xc6);
    cv::String::deallocate((String *)&local_38);
    uVar20 = puVar9[1];
    uVar22 = puVar9[9];
    pvVar21 = *(void **)(puVar9 + 6);
    local_44 = puVar9[8];
    if (4 < param_5) goto LAB_0019b820;
LAB_0019b214:
    iVar7 = 0x80;
    if (param_5 == 0) {
      iVar7 = 0x68;
    }
  }
  if (param_3 < iVar7) {
    local_38 = 0;
    local_30 = 0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xc9,(String *)&local_38,
              "_CvContourScanner* cvStartFindContours(void*, CvMemStorage*, int, int, int, CvPoint)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0xd0);
    cv::String::deallocate((String *)&local_38);
  }
  lVar19 = (long)(int)uVar20;
  iVar7 = local_44 - 1;
  puVar18 = (undefined1 *)((long)pvVar21 + lVar19);
  __s = (long *)cv::cvAlloc(0x598);
  memset(__s,0,0x598);
  __s[1] = param_2;
  __s[0x1d] = (long)(__s + 0x22);
  *(undefined4 *)((long)__s + 0x84) = 2;
  *__s = param_2;
  __s[10] = (long)pvVar21;
  __s[0xb] = (long)puVar18;
  *(uint *)(__s + 0xc) = uVar20;
  *(uint *)((long)__s + 100) = uVar22 - 1;
  *(int *)(__s + 0xd) = iVar7;
  *(int *)(__s + 0x2f) = param_4;
  *(undefined8 *)((long)__s + 0x6c) = param_6;
  *(undefined4 *)(__s + 0xf) = 1;
  *(undefined4 *)((long)__s + 0x74) = 1;
  *(undefined4 *)(__s + 0x10) = 1;
  *(undefined4 *)(__s + 0x21) = 1;
  *(uint *)(__s + 0x1f) = uVar22;
  *(uint *)((long)__s + 0xfc) = local_44;
  *(undefined4 *)(__s + 0x22) = 0x8000;
  *(uint *)(__s + 0x2e) = param_5;
  *(uint *)((long)__s + 0x174) = param_5;
  if (param_5 - 3 < 2) {
    *(undefined4 *)(__s + 0x2e) = 0;
    *(undefined4 *)((long)__s + 0x184) = 0x68;
    uVar8 = 0x5000;
    *(undefined4 *)(__s + 0x31) = 1;
    *(int *)(__s + 0x32) = param_3;
    *(undefined4 *)((long)__s + 0x194) = 8;
LAB_0019b32c:
    *(undefined4 *)(__s + 0x30) = uVar8;
    if (param_5 != 0) {
      *(undefined4 *)((long)__s + 0x18c) = 0x500c;
      cvSaveMemStoragePos(param_2,__s + 4);
      if (2 < (int)param_5) {
        lVar10 = cvCreateChildMemStorage(__s[1]);
        *__s = lVar10;
      }
      goto LAB_0019b35c;
    }
  }
  else {
    if (param_5 != 0) {
      *(int *)((long)__s + 0x184) = param_3;
      *(undefined4 *)(__s + 0x31) = 8;
      uVar8 = 0x500c;
      *(int *)(__s + 0x32) = param_3;
      *(undefined4 *)((long)__s + 0x194) = 8;
      goto LAB_0019b32c;
    }
    *(int *)((long)__s + 0x184) = param_3;
    *(undefined4 *)(__s + 0x31) = 1;
    *(int *)(__s + 0x32) = param_3;
    *(undefined4 *)((long)__s + 0x194) = 1;
    *(undefined4 *)(__s + 0x30) = 0x5000;
  }
  *(undefined4 *)((long)__s + 0x18c) = 0x5000;
  cvSaveMemStoragePos(param_2,__s + 4);
LAB_0019b35c:
  if (1 < param_4) {
    lVar10 = cvCreateChildMemStorage(__s[1]);
    __s[2] = lVar10;
    lVar10 = cvCreateSet(0,0x70,0x40,lVar10);
    __s[3] = lVar10;
  }
  uVar3 = (*puVar9 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((*puVar9 & 7) << 1)) & 3);
  iVar5 = uVar22 * uVar3;
  memset(pvVar21,0,(long)iVar5);
  memset((void *)((long)pvVar21 + (long)(int)(uVar20 * iVar7)),0,(long)iVar5);
  if (1 < iVar7) {
    iVar5 = iVar5 - uVar3;
    iVar15 = 1;
    lVar10 = (long)iVar5;
    puVar13 = puVar18 + lVar10;
    uVar22 = -(int)puVar13;
    do {
      if ((puVar13 < puVar18 + 0x10 && 0 < lVar10 + 0x10) || (uVar3 < 0x17)) {
        lVar12 = 0;
        do {
          puVar13[lVar12] = 0;
          puVar18[lVar12] = 0;
          lVar12 = lVar12 + 1;
        } while ((int)lVar12 < (int)uVar3);
      }
      else {
        uVar6 = uVar22 & 0xf;
        if (uVar3 < (uVar22 & 0xf)) {
          uVar6 = uVar3;
        }
        uVar14 = uVar6;
        if (uVar6 != 0) {
          *puVar13 = 0;
          *puVar18 = 0;
          if (uVar6 != 1) {
            puVar13[1] = 0;
            puVar18[1] = 0;
            if (uVar6 != 2) {
              puVar13[2] = 0;
              puVar18[2] = 0;
              if (uVar6 != 3) {
                puVar13[3] = 0;
                puVar18[3] = 0;
                if (uVar6 != 4) {
                  puVar13[4] = 0;
                  puVar18[4] = 0;
                  if (uVar6 != 5) {
                    puVar13[5] = 0;
                    puVar18[5] = 0;
                    if (uVar6 != 6) {
                      puVar13[6] = 0;
                      puVar18[6] = 0;
                      if (uVar6 == 7) {
                        uVar14 = 7;
                      }
                      else {
                        puVar13[7] = 0;
                        puVar18[7] = 0;
                        if (uVar6 != 8) {
                          puVar13[8] = 0;
                          puVar18[8] = 0;
                          if (uVar6 != 9) {
                            puVar13[9] = 0;
                            puVar18[9] = 0;
                            if (uVar6 != 10) {
                              puVar13[10] = 0;
                              puVar18[10] = 0;
                              if (uVar6 != 0xb) {
                                puVar13[0xb] = 0;
                                puVar18[0xb] = 0;
                                if (uVar6 != 0xc) {
                                  puVar13[0xc] = 0;
                                  puVar18[0xc] = 0;
                                  if (uVar6 != 0xd) {
                                    puVar13[0xd] = 0;
                                    puVar18[0xd] = 0;
                                    if (uVar6 == 0xf) {
                                      puVar13[0xe] = 0;
                                      puVar18[0xe] = 0;
                                    }
                                    else {
                                      uVar14 = 0xe;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar1 = ((uVar3 - uVar6) - 0x10 >> 4) + 1;
        iVar4 = uVar1 * 0x10;
        if (0xe < (uVar3 - 1) - uVar6) {
          uVar17 = 0;
          puVar11 = (undefined8 *)(puVar18 + uVar6);
          puVar16 = (undefined8 *)(puVar18 + (ulong)uVar6 + lVar10);
          do {
            puVar16[1] = 0;
            *puVar16 = 0;
            uVar17 = uVar17 + 1;
            puVar11[1] = 0;
            *puVar11 = 0;
            puVar11 = puVar11 + 2;
            puVar16 = puVar16 + 2;
          } while (uVar17 < uVar1);
          uVar14 = uVar14 + iVar4;
          if (iVar4 == uVar3 - uVar6) goto LAB_0019b6d0;
        }
        iVar4 = uVar14 + 1;
        puVar18[(int)(uVar14 + iVar5)] = 0;
        puVar18[(int)uVar14] = 0;
        if (iVar4 < (int)uVar3) {
          iVar2 = uVar14 + 2;
          puVar18[iVar4 + iVar5] = 0;
          puVar18[iVar4] = 0;
          if (iVar2 < (int)uVar3) {
            iVar4 = uVar14 + 3;
            puVar18[iVar5 + iVar2] = 0;
            puVar18[iVar2] = 0;
            if (iVar4 < (int)uVar3) {
              iVar2 = uVar14 + 4;
              puVar18[iVar5 + iVar4] = 0;
              puVar18[iVar4] = 0;
              if (iVar2 < (int)uVar3) {
                iVar4 = uVar14 + 5;
                puVar18[iVar5 + iVar2] = 0;
                puVar18[iVar2] = 0;
                if (iVar4 < (int)uVar3) {
                  iVar2 = uVar14 + 6;
                  puVar18[iVar5 + iVar4] = 0;
                  puVar18[iVar4] = 0;
                  if (iVar2 < (int)uVar3) {
                    iVar4 = uVar14 + 7;
                    puVar18[iVar5 + iVar2] = 0;
                    puVar18[iVar2] = 0;
                    if (iVar4 < (int)uVar3) {
                      iVar2 = uVar14 + 8;
                      puVar18[iVar5 + iVar4] = 0;
                      puVar18[iVar4] = 0;
                      if (iVar2 < (int)uVar3) {
                        iVar4 = uVar14 + 9;
                        puVar18[iVar5 + iVar2] = 0;
                        puVar18[iVar2] = 0;
                        if (iVar4 < (int)uVar3) {
                          iVar2 = uVar14 + 10;
                          puVar18[iVar5 + iVar4] = 0;
                          puVar18[iVar4] = 0;
                          if (iVar2 < (int)uVar3) {
                            iVar4 = uVar14 + 0xb;
                            puVar18[iVar5 + iVar2] = 0;
                            puVar18[iVar2] = 0;
                            if (iVar4 < (int)uVar3) {
                              iVar2 = uVar14 + 0xc;
                              puVar18[iVar5 + iVar4] = 0;
                              puVar18[iVar4] = 0;
                              if (iVar2 < (int)uVar3) {
                                iVar4 = uVar14 + 0xd;
                                puVar18[iVar5 + iVar2] = 0;
                                puVar18[iVar2] = 0;
                                if (iVar4 < (int)uVar3) {
                                  iVar2 = uVar14 + 0xe;
                                  puVar18[iVar5 + iVar4] = 0;
                                  puVar18[iVar4] = 0;
                                  if (iVar2 < (int)uVar3) {
                                    puVar18[iVar5 + iVar2] = 0;
                                    puVar18[iVar2] = 0;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0019b6d0:
      iVar15 = iVar15 + 1;
      puVar18 = puVar18 + lVar19;
      puVar13 = puVar13 + lVar19;
      uVar22 = uVar22 - uVar20;
    } while (iVar15 != iVar7);
  }
  if ((*puVar9 & 0xfff) != 4) {
    cvThreshold(0,0x3ff0000000000000,puVar9,puVar9,0);
  }
  return __s;
}


==================================================================

### FUNC 0019b928 (144 bytes) name=cvSubstituteContour

void cvSubstituteContour(long param_1,long param_2)

{
  long lVar1;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSubstituteContour(CvContourScanner, CvSeq*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x1e1);
    cv::String::deallocate((String *)&local_10);
  }
  lVar1 = *(long *)(param_1 + 0x88);
  if (((lVar1 != 0) && (*(long *)(lVar1 + 0x18) != param_2)) && (*(long *)(lVar1 + 0x18) != 0)) {
    *(long *)(lVar1 + 0x18) = param_2;
    *(undefined4 *)(param_1 + 0x17c) = 1;
  }
  return;
}


==================================================================

### FUNC 0019b9cc (4952 bytes) name=cvFindNextContour

long cvFindNextContour(long *param_1)

{
  long lVar1;
  long lVar2;
  uint *puVar3;
  long lVar4;
  long lVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  char cVar9;
  int iVar10;
  uint uVar11;
  code *pcVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  ulong uVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  uint *puVar21;
  char *pcVar22;
  long lVar23;
  long lVar24;
  uint uVar25;
  uint uVar26;
  int iVar27;
  long lVar28;
  long *plVar29;
  uint uVar30;
  int iVar31;
  uint uVar32;
  uint uVar33;
  uint uVar34;
  uint uVar35;
  int iVar36;
  long lVar37;
  uint *puVar38;
  uint uVar39;
  uint *puVar40;
  int iVar41;
  long *plVar42;
  long *plVar43;
  int iVar44;
  uint uVar45;
  int iVar46;
  int iVar47;
  uint local_1dc;
  long *local_1d8;
  long local_1c8;
  uint local_1bc;
  uint local_1b0;
  uint local_13c;
  long *local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined1 auStack_70 [24];
  uint *local_58;
  uint *local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined4 local_30;
  int iStack_2c;
  uint local_28;
  uint local_24;
  long *local_20;
  long *plStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (param_1 == (long *)0x0) {
    local_40 = param_1;
    local_38 = param_1;
    cv::String::allocate((String *)&local_40,0);
    cv::error(-0x1b,(String *)&local_40,"CvSeq* cvFindNextContour(CvContourScanner)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x3e1);
    cv::String::deallocate((String *)&local_40);
  }
  FUN_0019a550(param_1);
  iVar41 = *(int *)((long)param_1 + 0x74);
  uVar6 = *(uint *)(param_1 + 0xc);
  iVar7 = (int)param_1[0x2f];
  lVar28 = param_1[0xb];
  lVar24 = param_1[10];
  iVar47 = (int)param_1[0xf];
  iVar8 = *(int *)((long)param_1 + 100);
  lVar23 = param_1[0xd];
  iVar27 = *(int *)((long)param_1 + 0x7c);
  uVar30 = (uint)*(byte *)(lVar28 + iVar41 + -1);
  local_13c = *(uint *)((long)param_1 + 0x84);
  uVar45 = (uint)((ulong)(long)(int)uVar6 >> 2);
  if (iVar7 == 4) {
    uVar13 = 0xc0000000;
    local_1bc = 0xc0000000;
    uVar30 = *(uint *)(lVar28 + (long)iVar41 * 4 + -4);
    local_1dc = 0x3fffffff;
  }
  else {
    uVar13 = 0xfffffffe;
    local_1bc = 0xfffffffe;
    local_1dc = 1;
  }
  if (iVar47 < (int)lVar23) {
    lVar4 = lVar24;
    if (iVar7 != 4) {
      lVar4 = 0;
    }
    iVar46 = (int)param_1[0x10];
    do {
      lVar5 = lVar28;
      if (iVar7 != 4) {
        lVar5 = 0;
      }
      if (iVar41 < iVar8) {
        if (lVar5 == 0) goto LAB_0019c5a8;
LAB_0019bb24:
        puVar21 = (uint *)(lVar5 + (long)iVar41 * 4);
        while ((uVar15 = *puVar21, uVar25 = uVar30, uVar15 == uVar30 ||
               (uVar25 = uVar15, ((uVar15 ^ uVar30) & local_1dc) == 0))) {
          uVar30 = uVar25;
          iVar41 = iVar41 + 1;
          puVar21 = puVar21 + 1;
          if (iVar8 <= iVar41) goto LAB_0019bb44;
        }
        if (iVar41 < iVar8) {
          uVar25 = uVar30 & uVar13;
          iVar44 = iVar27;
          if (((uVar25 != 0) || (uVar30 == 0)) && ((uVar15 & uVar13) == 0)) goto joined_r0x0019c664;
          uVar34 = uVar15 | uVar30;
          uVar30 = uVar15;
          if ((uVar34 & local_1bc) != 0) goto LAB_0019c58c;
LAB_0019bbc0:
          iVar31 = iVar41 + -1;
          iVar44 = iVar31;
          if (uVar25 == 0) {
            iVar44 = iVar27;
          }
          if (iVar7 == 0) goto LAB_0019c58c;
          lVar37 = 1;
          if (iVar7 < 2) {
            plVar43 = param_1 + 0x1a;
            iVar36 = 1;
            iVar44 = iVar31;
            goto LAB_0019bfb4;
          }
          iVar36 = 1;
          iVar27 = iVar44;
joined_r0x0019bbf4:
          iVar44 = iVar31;
          if (iVar27 < 1) {
            plVar43 = param_1 + 0x1a;
            goto LAB_0019bfb4;
          }
          if (lVar4 == 0) {
            uVar15 = (uint)*(byte *)(lVar24 + (int)(uVar6 * iVar46 + iVar27));
          }
          else {
            uVar15 = *(uint *)(lVar4 + (long)(int)(iVar46 * uVar45 + iVar27) * 4);
          }
          plVar29 = (long *)param_1[(long)(int)(uVar15 & 0x7f) + 0x33];
          if (plVar29 == (long *)0x0) {
                    /* WARNING: Does not return */
            pcVar12 = (code *)SoftwareBreakpoint(1000,0x19ca5c);
            (*pcVar12)();
          }
          lVar20 = lVar5 + (long)iVar27 * 4;
          uVar15 = uVar6 + 1;
          lVar1 = lVar28 + iVar27;
          uVar25 = uVar45 + 1;
          plVar43 = (long *)0x0;
          do {
            plVar42 = plVar43;
            if ((((uint)(iVar27 - (int)plVar29[4]) < *(uint *)(plVar29 + 5)) &&
                ((uint)(iVar46 - *(int *)((long)plVar29 + 0x24)) < *(uint *)((long)plVar29 + 0x2c)))
               && (plVar42 = plVar29, plVar43 != (long *)0x0)) {
              uVar34 = 4;
              if (lVar4 == 0) {
                iVar31 = (int)plVar43[7];
                local_40 = (long *)CONCAT44(1 - uVar6,1);
                uVar32 = ~uVar6;
                if (iVar31 != 0) {
                  uVar32 = uVar15;
                }
                local_38 = (long *)CONCAT44(~uVar6,-uVar6);
                local_30 = 0xffffffff;
                lVar2 = lVar24 + (long)(int)plVar43[6] +
                                 (long)(int)(*(int *)((long)plVar43 + 0x34) * uVar6);
                iStack_2c = uVar6 - 1;
                if (iVar31 != 0) {
                  uVar34 = 0;
                }
                local_28 = uVar6;
                uVar26 = uVar34 - 1;
                local_24 = uVar15;
                local_20 = local_40;
                plStack_18 = local_38;
                local_10 = CONCAT44(uVar6 - 1,0xffffffff);
                uStack_8 = CONCAT44(uVar15,uVar6);
                while( true ) {
                  uVar26 = uVar26 & 7;
                  if (*(char *)(lVar2 + (int)uVar32) != '\0') break;
                  if (uVar26 == uVar34) goto LAB_0019cc94;
                  uVar26 = uVar26 - 1;
                  uVar32 = *(uint *)((long)&local_40 + (long)(int)(uVar26 & 7) * 4);
                }
                lVar16 = lVar2;
                if (uVar34 == uVar26) {
LAB_0019cc94:
                  if (lVar2 == lVar1) goto LAB_0019bfa0;
                }
                else {
                  while( true ) {
                    lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 1) * 4);
                    lVar18 = lVar16 + lVar19;
                    uVar34 = uVar26;
                    if (*(char *)(lVar16 + lVar19) == '\0') {
                      lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 2) * 4);
                      lVar18 = lVar16 + lVar19;
                      uVar34 = uVar26 + 1;
                      if (*(char *)(lVar16 + lVar19) == '\0') {
                        lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 3) * 4);
                        lVar18 = lVar16 + lVar19;
                        uVar34 = uVar26 + 2;
                        if (*(char *)(lVar16 + lVar19) == '\0') {
                          lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 4) * 4);
                          lVar18 = lVar16 + lVar19;
                          uVar34 = uVar26 + 3;
                          if (*(char *)(lVar16 + lVar19) == '\0') {
                            lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 5) * 4);
                            lVar18 = lVar16 + lVar19;
                            uVar34 = uVar26 + 4;
                            if (*(char *)(lVar16 + lVar19) == '\0') {
                              lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar26 + 6) * 4)
                              ;
                              lVar18 = lVar16 + lVar19;
                              uVar34 = uVar26 + 5;
                              if (*(char *)(lVar16 + lVar19) == '\0') {
                                lVar19 = (long)*(int *)((long)&local_40 +
                                                       (long)(int)(uVar26 + 7) * 4);
                                lVar18 = lVar16 + lVar19;
                                uVar34 = uVar26 + 6;
                                if (*(char *)(lVar16 + lVar19) == '\0') {
                                  lVar19 = (long)*(int *)((long)&local_40 +
                                                         (long)(int)(uVar26 + 8) * 4);
                                  lVar18 = lVar16 + lVar19;
                                  uVar34 = uVar26 + 7;
                                  if (*(char *)(lVar16 + lVar19) == '\0') {
                                    lVar19 = (long)*(int *)((long)&local_40 +
                                                           (long)(int)(uVar26 + 9) * 4);
                                    lVar18 = lVar16 + lVar19;
                                    uVar34 = uVar26 + 8;
                                    if (*(char *)(lVar16 + lVar19) == '\0') {
                                      lVar19 = (long)*(int *)((long)&local_40 +
                                                             (long)(int)(uVar26 + 10) * 4);
                                      lVar18 = lVar16 + lVar19;
                                      uVar34 = uVar26 + 9;
                                      if (*(char *)(lVar16 + lVar19) == '\0') {
                                        lVar19 = (long)*(int *)((long)&local_40 +
                                                               (long)(int)(uVar26 + 0xb) * 4);
                                        lVar18 = lVar16 + lVar19;
                                        uVar34 = uVar26 + 10;
                                        if (*(char *)(lVar16 + lVar19) == '\0') {
                                          lVar19 = (long)*(int *)((long)&local_40 +
                                                                 (long)(int)(uVar26 + 0xc) * 4);
                                          lVar18 = lVar16 + lVar19;
                                          uVar34 = uVar26 + 0xb;
                                          if (*(char *)(lVar16 + lVar19) == '\0') {
                                            lVar19 = (long)*(int *)((long)&local_40 +
                                                                   (long)(int)(uVar26 + 0xd) * 4);
                                            lVar18 = lVar16 + lVar19;
                                            uVar34 = uVar26 + 0xc;
                                            if (*(char *)(lVar16 + lVar19) == '\0') {
                                              lVar19 = (long)*(int *)((long)&local_40 +
                                                                     (long)(int)(uVar26 + 0xe) * 4);
                                              lVar18 = lVar16 + lVar19;
                                              uVar34 = uVar26 + 0xd;
                                              if (*(char *)(lVar16 + lVar19) == '\0') {
                                                lVar19 = (long)*(int *)((long)&local_40 +
                                                                       (long)(int)(uVar26 + 0xf) * 4
                                                                       );
                                                lVar18 = lVar16 + lVar19;
                                                uVar34 = uVar26 + 0xe;
                                                if (*(char *)(lVar16 + lVar19) == '\0') {
                                                  lVar18 = lVar16 + *(int *)((long)&local_40 +
                                                                            (long)(int)(uVar26 + 
                                                  0x10) * 4);
                                                  uVar34 = uVar26 + 0xf;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                    if (lVar1 == lVar16) goto LAB_0019bfa0;
                    if ((lVar2 == lVar18) && (lVar16 == lVar2 + (int)uVar32)) break;
                    uVar26 = uVar34 + 5 & 7;
                    lVar16 = lVar18;
                  }
                }
              }
              else {
                iVar31 = (int)plVar43[7];
                lVar16 = ((long)(int)plVar43[6] +
                         (long)(int)(uVar45 * *(int *)((long)plVar43 + 0x34))) * 4;
                lVar2 = lVar4 + lVar16;
                uVar32 = ~uVar45;
                if (iVar31 != 0) {
                  uVar32 = uVar25;
                }
                if (iVar31 != 0) {
                  uVar34 = 0;
                }
                uVar26 = *(uint *)(lVar4 + lVar16) & 0x3fffffff;
                local_40 = (long *)CONCAT44(1 - uVar45,1);
                uVar33 = uVar34 - 1;
                local_38 = (long *)CONCAT44(~uVar45,-uVar45);
                local_30 = 0xffffffff;
                iStack_2c = uVar45 - 1;
                local_28 = uVar45;
                local_24 = uVar25;
                local_20 = local_40;
                plStack_18 = local_38;
                local_10 = CONCAT44(uVar45 - 1,0xffffffff);
                uStack_8 = CONCAT44(uVar25,uVar45);
                while( true ) {
                  uVar17 = -(ulong)(uVar32 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar32 << 2;
                  uVar33 = uVar33 & 7;
                  if (uVar26 == (*(uint *)(lVar2 + uVar17) & 0x3fffffff)) break;
                  if (uVar33 == uVar34) goto LAB_0019bf88;
                  uVar33 = uVar33 - 1;
                  uVar32 = *(uint *)((long)&local_40 + (long)(int)(uVar33 & 7) * 4);
                }
                lVar16 = lVar2;
                if (uVar34 == uVar33) {
LAB_0019bf88:
                  if (lVar2 == lVar20) goto LAB_0019bfa0;
                }
                else {
                  while( true ) {
                    lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 1) * 4) * 4;
                    lVar18 = lVar16 + lVar19;
                    uVar34 = uVar33;
                    if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                      lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 2) * 4) * 4;
                      lVar18 = lVar16 + lVar19;
                      uVar34 = uVar33 + 1;
                      if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                        lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 3) * 4) * 4;
                        lVar18 = lVar16 + lVar19;
                        uVar34 = uVar33 + 2;
                        if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                          lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 4) * 4) * 4
                          ;
                          lVar18 = lVar16 + lVar19;
                          uVar34 = uVar33 + 3;
                          if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                            lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 5) * 4) *
                                     4;
                            lVar18 = lVar16 + lVar19;
                            uVar34 = uVar33 + 4;
                            if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                              lVar19 = (long)*(int *)((long)&local_40 + (long)(int)(uVar33 + 6) * 4)
                                       * 4;
                              lVar18 = lVar16 + lVar19;
                              uVar34 = uVar33 + 5;
                              if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                lVar19 = (long)*(int *)((long)&local_40 +
                                                       (long)(int)(uVar33 + 7) * 4) * 4;
                                lVar18 = lVar16 + lVar19;
                                uVar34 = uVar33 + 6;
                                if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                  lVar19 = (long)*(int *)((long)&local_40 +
                                                         (long)(int)(uVar33 + 8) * 4) * 4;
                                  lVar18 = lVar16 + lVar19;
                                  uVar34 = uVar33 + 7;
                                  if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                    lVar19 = (long)*(int *)((long)&local_40 +
                                                           (long)(int)(uVar33 + 9) * 4) * 4;
                                    lVar18 = lVar16 + lVar19;
                                    uVar34 = uVar33 + 8;
                                    if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                      lVar19 = (long)*(int *)((long)&local_40 +
                                                             (long)(int)(uVar33 + 10) * 4) * 4;
                                      lVar18 = lVar16 + lVar19;
                                      uVar34 = uVar33 + 9;
                                      if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                        lVar19 = (long)*(int *)((long)&local_40 +
                                                               (long)(int)(uVar33 + 0xb) * 4) * 4;
                                        lVar18 = lVar16 + lVar19;
                                        uVar34 = uVar33 + 10;
                                        if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                          lVar19 = (long)*(int *)((long)&local_40 +
                                                                 (long)(int)(uVar33 + 0xc) * 4) * 4;
                                          lVar18 = lVar16 + lVar19;
                                          uVar34 = uVar33 + 0xb;
                                          if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff)) {
                                            lVar19 = (long)*(int *)((long)&local_40 +
                                                                   (long)(int)(uVar33 + 0xd) * 4) *
                                                     4;
                                            lVar18 = lVar16 + lVar19;
                                            uVar34 = uVar33 + 0xc;
                                            if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff))
                                            {
                                              lVar19 = (long)*(int *)((long)&local_40 +
                                                                     (long)(int)(uVar33 + 0xe) * 4)
                                                       * 4;
                                              lVar18 = lVar16 + lVar19;
                                              uVar34 = uVar33 + 0xd;
                                              if (uVar26 != (*(uint *)(lVar16 + lVar19) & 0x3fffffff
                                                            )) {
                                                lVar19 = (long)*(int *)((long)&local_40 +
                                                                       (long)(int)(uVar33 + 0xf) * 4
                                                                       ) * 4;
                                                lVar18 = lVar16 + lVar19;
                                                uVar34 = uVar33 + 0xe;
                                                if (uVar26 != (*(uint *)(lVar16 + lVar19) &
                                                              0x3fffffff)) {
                                                  lVar18 = lVar16 + (long)*(int *)((long)&local_40 +
                                                                                  (long)(int)(uVar33
                                                                                             + 0x10)
                                                                                  * 4) * 4;
                                                  uVar34 = uVar33 + 0xf;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                    if (lVar20 == lVar16) goto LAB_0019bfa0;
                    if ((lVar2 == lVar18) && (lVar16 == lVar2 + uVar17)) break;
                    uVar33 = uVar34 + 5 & 7;
                    lVar16 = lVar18;
                  }
                }
              }
            }
            plVar29 = (long *)plVar29[1];
            plVar43 = plVar42;
          } while (plVar29 != (long *)0x0);
          iVar31 = (int)plVar42[7];
LAB_0019bfa0:
          if (iVar36 == iVar31) {
            plVar29 = plVar43 + 2;
            plVar43 = (long *)*plVar29;
            if ((long *)*plVar29 == (long *)0x0) {
              plVar43 = param_1 + 0x1a;
            }
            lVar20 = plVar43[3];
          }
          else {
            lVar20 = plVar43[3];
          }
          if (lVar20 != 0) goto LAB_0019bfb4;
          if ((uVar30 & 0xfffffffe) != 0) {
            iVar27 = iVar41;
          }
          iVar41 = iVar41 + 1;
          if (iVar41 < iVar8) {
            do {
              if (lVar5 != 0) goto LAB_0019bb24;
LAB_0019c5a8:
              pcVar22 = (char *)(lVar28 + iVar41);
              while( true ) {
                cVar9 = *pcVar22;
                if ((int)cVar9 != uVar30) break;
                iVar41 = iVar41 + 1;
                pcVar22 = pcVar22 + 1;
                if (iVar8 <= iVar41) goto LAB_0019bb44;
              }
              if (iVar8 <= iVar41) break;
              if (((int)cVar9 == 1) && (uVar30 == 0)) {
                iVar44 = iVar27;
                uVar15 = 1;
joined_r0x0019c664:
                uVar30 = uVar15;
                if (iVar7 == 0) {
                  if (*(char *)(lVar24 + (int)(uVar6 * iVar46 + iVar44)) < '\x01')
                  goto LAB_0019c684;
                }
                else {
                  if ((2 < iVar7) && (lVar37 = 0, iVar7 != 4)) goto code_r0x0019c5f8;
LAB_0019c684:
                  lVar37 = 0;
                  plVar43 = param_1 + 0x1a;
                  iVar36 = 0;
                  iVar44 = iVar41;
LAB_0019bfb4:
                  cvSaveMemStoragePos(param_1[1]);
                  puVar21 = (uint *)cvCreateSeq((int)param_1[0x30],
                                                (long)*(int *)((long)param_1 + 0x184),
                                                (long)(int)param_1[0x31],*param_1);
                  *puVar21 = *puVar21 | iVar36 << 0xf;
                  if (iVar7 < 2) {
                    plVar29 = param_1 + 0x12;
                    local_80 = CONCAT44(iVar47 + (int)((ulong)*(undefined8 *)((long)param_1 + 0x6c)
                                                      >> 0x20),
                                        iVar44 + (int)*(undefined8 *)((long)param_1 + 0x6c));
                    FUN_0019aafc(lVar28 + (iVar41 - lVar37),uVar6,local_80,puVar21,
                                 (int)param_1[0x2e]);
                  }
                  else {
                    local_88 = (long *)0x0;
                    cvSetAdd(param_1[3],0,&local_88);
                    plVar29 = local_88;
                    if (lVar5 == 0) {
                      uVar30 = local_13c + 1 & 0x7f;
                      local_78 = CONCAT44(iVar47 + (int)((ulong)*(undefined8 *)
                                                                 ((long)param_1 + 0x6c) >> 0x20),
                                          iVar44 + (int)*(undefined8 *)((long)param_1 + 0x6c));
                      iVar27 = 3;
                      if (uVar30 != 0) {
                        iVar27 = 0;
                      }
                      local_1b0 = local_13c;
                      FUN_0019a5e4(lVar28 + (iVar41 - lVar37),uVar6,local_78,puVar21,
                                   (int)param_1[0x2e],local_13c,local_88 + 4);
                      uVar15 = *(uint *)(plVar29 + 4);
                      uVar25 = *(uint *)((long)plVar29 + 0x24);
                      local_13c = iVar27 + uVar30;
                    }
                    else {
                      lVar37 = (iVar41 - lVar37) * 4;
                      iStack_2c = uVar45 - 1;
                      local_1b0 = *(uint *)(lVar5 + (long)iVar44 * 4) & 0x7f;
                      local_30 = 0xffffffff;
                      uVar30 = uVar45 + 1;
                      local_40 = (long *)CONCAT44(1 - uVar45,1);
                      uVar26 = *(uint *)(lVar5 + lVar37) & 0x3fffffff;
                      uVar34 = iVar47 + (int)param_1[0xe];
                      plVar42 = local_88 + 4;
                      local_38 = (long *)CONCAT44(~uVar45,-uVar45);
                      puVar3 = (uint *)(lVar5 + lVar37);
                      iVar27 = (int)param_1[0x2e];
                      iVar31 = iVar27 + -1;
                      uVar32 = iVar44 + *(int *)((long)param_1 + 0x6c);
                      local_10 = CONCAT44(iStack_2c,0xffffffff);
                      uStack_8 = CONCAT44(uVar30,uVar45);
                      local_20 = local_40;
                      plStack_18 = local_38;
                      local_28 = uVar45;
                      local_24 = uVar30;
                      cvStartAppendToSeq(puVar21,auStack_70);
                      if (iVar31 < 0) {
                        puVar21[0x18] = uVar32;
                        puVar21[0x19] = uVar34;
                      }
                      if ((*puVar21 & 0x8000) == 0) {
                        uVar30 = ~uVar45;
                      }
                      uVar33 = 0;
                      if ((*puVar21 & 0x8000) == 0) {
                        uVar33 = 4;
                      }
                      uVar14 = uVar33 - 1;
                      while( true ) {
                        uVar17 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
                        uVar14 = uVar14 & 7;
                        uVar25 = uVar34;
                        uVar35 = uVar34;
                        uVar15 = uVar32;
                        uVar30 = uVar32;
                        if (uVar26 == (*(uint *)((long)puVar3 + uVar17) & 0x3fffffff)) break;
                        if (uVar14 == uVar33) goto LAB_0019c3e8;
                        uVar14 = uVar14 - 1;
                        uVar30 = *(uint *)((long)&local_40 + (long)(int)(uVar14 & 7) * 4);
                      }
                      if (uVar33 != uVar14) {
                        puVar40 = puVar3;
                        uVar33 = uVar14 ^ 4;
                        do {
                          uVar39 = uVar14 + 1;
                          iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                          puVar38 = puVar40 + iVar10;
                          if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                            uVar39 = uVar14 + 2;
                            iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                            puVar38 = puVar40 + iVar10;
                            if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                              uVar39 = uVar14 + 3;
                              iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                              puVar38 = puVar40 + iVar10;
                              if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                uVar39 = uVar14 + 4;
                                iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                                puVar38 = puVar40 + iVar10;
                                if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                  uVar39 = uVar14 + 5;
                                  iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                                  puVar38 = puVar40 + iVar10;
                                  if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                    uVar39 = uVar14 + 6;
                                    iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                                    puVar38 = puVar40 + iVar10;
                                    if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                      uVar39 = uVar14 + 7;
                                      iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                                      puVar38 = puVar40 + iVar10;
                                      if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                        uVar39 = uVar14 + 8;
                                        iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4);
                                        puVar38 = puVar40 + iVar10;
                                        if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                          uVar39 = uVar14 + 9;
                                          iVar10 = *(int *)((long)&local_40 + (long)(int)uVar39 * 4)
                                          ;
                                          puVar38 = puVar40 + iVar10;
                                          if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                            uVar39 = uVar14 + 10;
                                            iVar10 = *(int *)((long)&local_40 +
                                                             (long)(int)uVar39 * 4);
                                            puVar38 = puVar40 + iVar10;
                                            if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                              uVar39 = uVar14 + 0xb;
                                              iVar10 = *(int *)((long)&local_40 +
                                                               (long)(int)uVar39 * 4);
                                              puVar38 = puVar40 + iVar10;
                                              if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                                uVar39 = uVar14 + 0xc;
                                                iVar10 = *(int *)((long)&local_40 +
                                                                 (long)(int)uVar39 * 4);
                                                puVar38 = puVar40 + iVar10;
                                                if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                                  uVar39 = uVar14 + 0xd;
                                                  iVar10 = *(int *)((long)&local_40 +
                                                                   (long)(int)uVar39 * 4);
                                                  puVar38 = puVar40 + iVar10;
                                                  if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                                    uVar39 = uVar14 + 0xe;
                                                    iVar10 = *(int *)((long)&local_40 +
                                                                     (long)(int)uVar39 * 4);
                                                    puVar38 = puVar40 + iVar10;
                                                    if (uVar26 != (puVar40[iVar10] & 0x3fffffff)) {
                                                      uVar39 = uVar14 + 0xf;
                                                      iVar10 = *(int *)((long)&local_40 +
                                                                       (long)(int)uVar39 * 4);
                                                      puVar38 = puVar40 + iVar10;
                                                      if (uVar26 != (puVar40[iVar10] & 0x3fffffff))
                                                      {
                                                        uVar39 = uVar14 + 0x10;
                                                        puVar38 = puVar40 + *(int *)((long)&local_40
                                                                                    + (long)(int)
                                                  uVar39 * 4);
                                                  }
                                                  }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                          uVar39 = uVar39 & 7;
                          uVar11 = uVar25;
                          if (uVar39 - 1 < uVar14) {
                            *puVar40 = uVar26 | 0xc0000000;
LAB_0019c390:
                            if (iVar31 < 0) goto LAB_0019c62c;
LAB_0019c394:
                            if ((uVar39 != uVar33) || (iVar27 == 1)) {
                              if (local_48 <= local_58) {
                                cvCreateSeqBlock(auStack_70);
                              }
                              *local_58 = uVar32;
                              local_58[1] = uVar34;
                              local_58 = local_58 + 2;
                              goto LAB_0019c6b8;
                            }
                          }
                          else {
                            if (uVar26 != *puVar40) goto LAB_0019c390;
                            *puVar40 = uVar26 | 0x40000000;
                            if (-1 < iVar31) goto LAB_0019c394;
LAB_0019c62c:
                            if (local_48 <= local_58) {
                              cvCreateSeqBlock(auStack_70);
                            }
                            *(char *)local_58 = (char)uVar39;
                            local_58 = (uint *)((long)local_58 + 1);
LAB_0019c6b8:
                            if (uVar39 != uVar33) {
                              uVar33 = uVar32;
                              if (((int)uVar15 <= (int)uVar32) &&
                                 (uVar33 = uVar15, (int)uVar30 < (int)uVar32)) {
                                uVar30 = uVar32;
                              }
                              uVar15 = uVar33;
                              uVar11 = uVar34;
                              if (((int)uVar25 <= (int)uVar34) &&
                                 (uVar11 = uVar25, (int)uVar35 < (int)uVar34)) {
                                uVar35 = uVar34;
                              }
                            }
                          }
                          uVar25 = uVar11;
                          uVar32 = uVar32 + (&DAT_00531e50)[(ulong)uVar39 * 2];
                          uVar34 = uVar34 + (&DAT_00531e54)[(ulong)uVar39 * 2];
                          if ((puVar3 == puVar38) && (puVar40 == (uint *)((long)puVar3 + uVar17)))
                          goto LAB_0019c454;
                          uVar14 = uVar39 + 4 & 7;
                          puVar40 = puVar38;
                          uVar33 = uVar39;
                        } while( true );
                      }
LAB_0019c3e8:
                      *(uint *)(lVar5 + lVar37) = uVar26 | 0xc0000000;
                      if (-1 < iVar31) {
                        if (local_48 <= local_58) {
                          cvCreateSeqBlock(auStack_70);
                        }
                        *local_58 = uVar32;
                        local_58[1] = uVar34;
                        local_58 = local_58 + 2;
                      }
LAB_0019c454:
                      iVar31 = (1 - uVar15) + uVar30;
                      iVar10 = (1 - uVar25) + uVar35;
                      cvEndWriteSeq(auStack_70);
                      if (iVar27 != 0) {
                        *(ulong *)(puVar21 + 0x1a) = CONCAT44(iVar10,iVar31);
                        *(ulong *)(puVar21 + 0x18) = CONCAT44(uVar25,uVar15);
                      }
                      if (plVar42 == (long *)0x0) {
                        uVar15 = *(uint *)(plVar29 + 4);
                        uVar25 = *(uint *)((long)plVar29 + 0x24);
                      }
                      else {
                        plVar29[5] = CONCAT44(iVar10,iVar31);
                        *plVar42 = CONCAT44(uVar25,uVar15);
                      }
                    }
                    local_1d8 = plVar29 + 4;
                    *local_1d8 = CONCAT44(uVar25 - (int)((ulong)*(undefined8 *)
                                                                 ((long)param_1 + 0x6c) >> 0x20),
                                          uVar15 - (int)*(undefined8 *)((long)param_1 + 0x6c));
                    plVar29[1] = param_1[(long)(int)local_1b0 + 0x33];
                    param_1[(long)(int)local_1b0 + 0x33] = (long)plVar29;
                  }
                  local_1c8 = (long)iVar41;
                  *(int *)(plVar29 + 6) = iVar44;
                  *(int *)((long)plVar29 + 0x34) = iVar47;
                  *(int *)(plVar29 + 7) = iVar36;
                  iVar27 = *(int *)((long)param_1 + 0x174);
                  lVar37 = param_1[0x2e];
                  plVar29[3] = (long)puVar21;
                  plVar29[2] = (long)plVar43;
                  if ((int)lVar37 == iVar27) {
                    lVar37 = plVar43[3];
                    *(long *)(puVar21 + 6) = plVar43[3];
                  }
                  else {
                    lVar37 = FUN_002229f0(puVar21,(int)param_1[0x32],param_1[1]);
                    plVar29[3] = lVar37;
                    cvClearMemStorage(*param_1);
                    lVar37 = plVar43[3];
                    *(undefined8 *)(plVar29[3] + 0x18) = *(undefined8 *)(plVar29[2] + 0x18);
                  }
                  if (lVar37 != 0) {
                    iVar41 = iVar41 + 1;
                    cvSaveMemStoragePos(param_1[1],param_1 + 8);
                    param_1[0x11] = (long)plVar29;
                    if (lVar5 != 0) {
                      iVar41 = iVar41 - iVar36;
                    }
                    lVar23 = plVar29[3];
                    *(ulong *)((long)param_1 + 0x74) = CONCAT44(iVar47,iVar41);
                    *(ulong *)((long)param_1 + 0x7c) = CONCAT44(iVar46,iVar44);
                    param_1[0xb] = lVar28;
                    *(uint *)((long)param_1 + 0x84) = local_13c;
                    return lVar23;
                  }
                  lVar37 = *param_1;
                  lVar20 = param_1[1];
                  plVar29[3] = 0;
                  if (lVar37 == lVar20) {
                    cvRestoreMemStoragePos(lVar37,param_1 + 6);
                  }
                  else {
                    cvClearMemStorage();
                  }
                  uVar30 = (uint)*(char *)(lVar28 + local_1c8);
                }
LAB_0019c58c:
                iVar27 = iVar44;
                if ((uVar30 & 0xfffffffe) != 0) {
                  iVar27 = iVar41;
                }
              }
              else {
                uVar15 = (uint)cVar9;
                if ((uVar15 == 0) && (0 < (int)uVar30)) {
                  uVar25 = uVar30 & uVar13;
                  uVar30 = 0;
                  goto LAB_0019bbc0;
                }
                uVar30 = uVar15;
                if ((uVar15 & 0xfffffffe) != 0) {
                  iVar27 = iVar41;
                }
              }
              iVar41 = iVar41 + 1;
              if (iVar8 <= iVar41) break;
            } while( true );
          }
        }
      }
LAB_0019bb44:
      uVar30 = 0;
      iVar41 = 1;
      iVar27 = 0;
      iVar47 = iVar47 + 1;
      lVar28 = lVar28 + (int)uVar6;
      iVar46 = iVar47;
    } while (iVar47 != (int)lVar23);
  }
  return 0;
code_r0x0019c5f8:
  iVar36 = 0;
  iVar31 = iVar41;
  iVar27 = iVar44;
  goto joined_r0x0019bbf4;
}


==================================================================

### FUNC 0019cd38 (288 bytes) name=cvEndFindContours

long cvEndFindContours(undefined8 *param_1)

{
  long *plVar1;
  long lVar2;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvSeq* cvEndFindContours(_CvContourScanner**)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x4e7);
    cv::String::deallocate((String *)&local_10);
  }
  plVar1 = (long *)*param_1;
  lVar2 = 0;
  if (plVar1 != (long *)0x0) {
    lVar2 = plVar1[0x11];
    if (lVar2 != 0) {
      if (*(int *)((long)plVar1 + 0x17c) != 0) {
        cvSaveMemStoragePos(plVar1[1],&local_10);
        if ((local_10 == (undefined8 *)plVar1[8]) && ((int)local_8 == (int)plVar1[9])) {
          cvRestoreMemStoragePos(plVar1[1],plVar1 + 6);
          *(undefined4 *)((long)plVar1 + 0x17c) = 0;
        }
        else {
          *(undefined4 *)((long)plVar1 + 0x17c) = 0;
        }
      }
      if (*(long *)(lVar2 + 0x18) != 0) {
        cvInsertNodeIntoTree
                  (*(long *)(lVar2 + 0x18),*(undefined8 *)(*(long *)(lVar2 + 0x10) + 0x18),
                   plVar1 + 0x22);
      }
      plVar1[0x11] = 0;
    }
    if (*plVar1 != plVar1[1]) {
      cvReleaseMemStorage(plVar1);
    }
    if (plVar1[2] != 0) {
      cvReleaseMemStorage(plVar1 + 2);
    }
    lVar2 = plVar1[0x26];
    cv::cvFree_((void *)*param_1);
    *param_1 = 0;
  }
  return lVar2;
}


==================================================================

### FUNC 0019ce6c (3168 bytes) name=cvFindContours

int cvFindContours(undefined8 param_1,long param_2,undefined8 *param_3,int param_4,
                  undefined4 param_5,int param_6,undefined8 param_7)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined2 uVar13;
  int iVar14;
  int iVar15;
  char *pcVar16;
  long lVar17;
  undefined8 *puVar18;
  long lVar19;
  uint *puVar20;
  long *plVar21;
  undefined8 uVar22;
  long *plVar23;
  undefined8 *puVar24;
  undefined8 *puVar25;
  undefined8 *puVar26;
  uint uVar27;
  undefined8 *puVar28;
  int iVar29;
  long lVar30;
  int iVar31;
  uint *puVar32;
  long *plVar33;
  int iVar34;
  long lVar35;
  long lVar36;
  uint *puVar37;
  uint *puVar38;
  int iVar39;
  int iVar40;
  undefined8 *local_150;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  long local_108;
  long local_100;
  undefined1 auStack_f8 [40];
  undefined1 auStack_d0 [24];
  undefined8 *local_b8;
  undefined8 *local_a8;
  undefined1 auStack_a0 [24];
  undefined8 *local_88;
  undefined8 *local_78;
  undefined1 auStack_70 [8];
  long local_68;
  long *local_58;
  long *local_48;
  undefined8 *local_40;
  undefined8 *local_38;
  undefined8 *local_28;
  undefined8 *local_18;
  
  local_130 = 0;
  if (param_3 == (undefined8 *)0x0) {
    local_40 = param_3;
    local_38 = param_3;
    pcVar16 = (char *)cv::String::allocate((String *)&local_40,0x19);
    cVar6 = s_NULL_double_CvSeq_pointer_0043df90[0x18];
    uVar8 = s_NULL_double_CvSeq_pointer_0043df90._8_8_;
    uVar22 = s_NULL_double_CvSeq_pointer_0043df90._0_8_;
    *(undefined8 *)(pcVar16 + 0x10) = s_NULL_double_CvSeq_pointer_0043df90._16_8_;
    pcVar16[0x18] = cVar6;
    *(undefined8 *)pcVar16 = uVar22;
    *(undefined8 *)(pcVar16 + 8) = uVar8;
    cv::error(-0x1b,(String *)&local_40,
              "int cvFindContours(void*, CvMemStorage*, CvSeq**, int, int, int, CvPoint)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x683);
    cv::String::deallocate((String *)&local_40);
  }
  *param_3 = 0;
  if (param_6 == 5) {
    if (((int)param_7 != 0) || ((int)((ulong)param_7 >> 0x20) != 0)) {
      local_40 = (undefined8 *)0x0;
      local_38 = (undefined8 *)0x0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_40,0x33);
      uVar13 = s_Nonzero_offset_is_not_supported_i_0043dfb0._48_2_;
      uVar12 = s_Nonzero_offset_is_not_supported_i_0043dfb0._40_8_;
      uVar11 = s_Nonzero_offset_is_not_supported_i_0043dfb0._32_8_;
      uVar10 = s_Nonzero_offset_is_not_supported_i_0043dfb0._24_8_;
      uVar9 = s_Nonzero_offset_is_not_supported_i_0043dfb0._16_8_;
      uVar8 = s_Nonzero_offset_is_not_supported_i_0043dfb0._8_8_;
      uVar22 = s_Nonzero_offset_is_not_supported_i_0043dfb0._0_8_;
      pcVar16[0x32] = s_Nonzero_offset_is_not_supported_i_0043dfb0[0x32];
      *(undefined2 *)(pcVar16 + 0x30) = uVar13;
      *(undefined8 *)pcVar16 = uVar22;
      *(undefined8 *)(pcVar16 + 8) = uVar8;
      *(undefined8 *)(pcVar16 + 0x10) = uVar9;
      *(undefined8 *)(pcVar16 + 0x18) = uVar10;
      *(undefined8 *)(pcVar16 + 0x20) = uVar11;
      *(undefined8 *)(pcVar16 + 0x28) = uVar12;
      cv::error(-0xd3,(String *)&local_40,
                "int cvFindContours(void*, CvMemStorage*, CvSeq**, int, int, int, CvPoint)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x68b);
      cv::String::deallocate((String *)&local_40);
    }
    if (param_2 == 0) {
      local_108 = param_2;
      local_100 = param_2;
      pcVar16 = (char *)cv::String::allocate((String *)&local_108,0x14);
      uVar8 = s_NULL_storage_pointer_0043dfe8._8_8_;
      uVar22 = s_NULL_storage_pointer_0043dfe8._0_8_;
      *(undefined4 *)(pcVar16 + 0x10) = s_NULL_storage_pointer_0043dfe8._16_4_;
      *(undefined8 *)pcVar16 = uVar22;
      *(undefined8 *)(pcVar16 + 8) = uVar8;
      cv::error(-0x1b,(String *)&local_108,
                "int icvFindContoursInInterval(const CvArr*, CvMemStorage*, CvSeq**, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x538);
      cv::String::deallocate((String *)&local_108);
    }
    if (param_4 < 0x80) {
      local_118 = 0;
      local_110 = 0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_118,0x30);
      uVar11 = s_Contour_header_size_must_be_>__s_0043e000._40_8_;
      uVar10 = s_Contour_header_size_must_be_>__s_0043e000._32_8_;
      uVar9 = s_Contour_header_size_must_be_>__s_0043e000._24_8_;
      uVar8 = s_Contour_header_size_must_be_>__s_0043e000._16_8_;
      uVar22 = s_Contour_header_size_must_be_>__s_0043e000._8_8_;
      *(undefined8 *)pcVar16 = s_Contour_header_size_must_be_>__s_0043e000._0_8_;
      *(undefined8 *)(pcVar16 + 8) = uVar22;
      *(undefined8 *)(pcVar16 + 0x10) = uVar8;
      *(undefined8 *)(pcVar16 + 0x18) = uVar9;
      *(undefined8 *)(pcVar16 + 0x20) = uVar10;
      *(undefined8 *)(pcVar16 + 0x28) = uVar11;
      cv::error(-0xc9,(String *)&local_118,
                "int icvFindContoursInInterval(const CvArr*, CvMemStorage*, CvSeq**, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x53e);
      cv::String::deallocate((String *)&local_118);
    }
    lVar17 = cvCreateChildMemStorage(param_2);
    if (lVar17 == 0) {
      puVar18 = (undefined8 *)0x0;
    }
    else {
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = lVar17;
      *puVar18 = &PTR_FUN_004f3420;
    }
    lVar19 = cvCreateChildMemStorage(param_2);
    if (lVar19 == 0) {
      local_150 = (undefined8 *)0x0;
    }
    else {
      local_150 = operator_new(0x20);
      *(undefined4 *)(local_150 + 1) = 1;
      local_150[2] = lVar19;
      *local_150 = &PTR_FUN_004f3420;
    }
    puVar20 = (uint *)cvGetMat(param_1,auStack_f8,0,0);
    if ((*puVar20 & 0xffe) != 0) {
      local_128 = 0;
      local_120 = 0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_128,0x20);
      uVar9 = s_Input_array_must_be_8uC1_or_8sC1_0043e038._24_8_;
      uVar8 = s_Input_array_must_be_8uC1_or_8sC1_0043e038._16_8_;
      uVar22 = s_Input_array_must_be_8uC1_or_8sC1_0043e038._8_8_;
      *(undefined8 *)pcVar16 = s_Input_array_must_be_8uC1_or_8sC1_0043e038._0_8_;
      *(undefined8 *)(pcVar16 + 8) = uVar22;
      *(undefined8 *)(pcVar16 + 0x10) = uVar8;
      *(undefined8 *)(pcVar16 + 0x18) = uVar9;
      cv::error(-5,(String *)&local_128,
                "int icvFindContoursInInterval(const CvArr*, CvMemStorage*, CvSeq**, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x547);
      cv::String::deallocate((String *)&local_128);
    }
    uVar2 = puVar20[8];
    lVar36 = *(long *)(puVar20 + 6);
    uVar3 = puVar20[1];
    uVar4 = puVar20[9];
    lVar17 = cvCreateSeq(0,0x60,0x18,lVar17);
    cvStartAppendToSeq(lVar17,auStack_70);
    cvStartWriteSeq(0,0x60,8,lVar19,auStack_d0);
    cvStartWriteSeq(0,0x60,8,lVar19,auStack_a0);
    if (local_48 <= local_58) {
      cvCreateSeqBlock(auStack_70);
    }
    *local_58 = 0;
    uVar27 = 0;
    local_58[1] = 0;
    *(undefined4 *)(local_58 + 2) = 0;
    *(undefined4 *)((long)local_58 + 0x14) = 0;
    local_58 = local_58 + 3;
    lVar30 = (long)local_58 - (long)*(int *)(local_68 + 0x2c);
    lVar19 = lVar30;
    if (0 < (int)uVar4) {
      do {
        pcVar16 = (char *)(lVar36 + (int)uVar27);
        do {
          if (*pcVar16 != '\0') {
            if (local_58 < local_48) goto LAB_0019d1a8;
            goto LAB_0019d504;
          }
          uVar27 = uVar27 + 1;
          pcVar16 = pcVar16 + 1;
        } while ((int)uVar27 < (int)uVar4);
        if (uVar4 == uVar27) break;
        if (local_48 <= local_58) {
LAB_0019d504:
          cvCreateSeqBlock(auStack_70);
        }
LAB_0019d1a8:
        *local_58 = 0;
        local_58[1] = 0;
        *(uint *)(local_58 + 2) = uVar27;
        *(undefined4 *)((long)local_58 + 0x14) = 0;
        local_58 = local_58 + 3;
        plVar33 = (long *)((long)local_58 - (long)*(int *)(local_68 + 0x2c));
        *(long **)(lVar19 + 8) = plVar33;
        if ((int)uVar27 < (int)uVar4) {
          pcVar16 = (char *)(lVar36 + (int)uVar27);
          cVar6 = *(char *)(lVar36 + (int)uVar27);
          while ((cVar6 != '\0' && (uVar27 = uVar27 + 1, uVar27 != uVar4))) {
            pcVar16 = pcVar16 + 1;
            cVar6 = *pcVar16;
          }
        }
        if (local_48 <= local_58) {
          cvCreateSeqBlock(auStack_70);
        }
        *local_58 = 0;
        local_58[1] = 0;
        *(uint *)(local_58 + 2) = uVar27 - 1;
        *(undefined4 *)((long)local_58 + 0x14) = 0;
        local_58 = local_58 + 3;
        lVar19 = (long)local_58 - (long)*(int *)(local_68 + 0x2c);
        plVar33[1] = lVar19;
        *plVar33 = lVar19;
        if (local_a8 <= local_b8) {
          cvCreateSeqBlock(auStack_d0);
        }
        *local_b8 = plVar33;
        lVar19 = plVar33[1];
        local_b8 = local_b8 + 1;
      } while ((int)uVar27 < (int)uVar4);
    }
    cvFlushSeqWriter(auStack_70);
    iVar39 = *(int *)(lVar17 + 0x28);
    puVar24 = *(undefined8 **)(lVar30 + 8);
    *(undefined8 *)(lVar19 + 8) = 0;
    if (1 < (int)uVar2) {
      plVar33 = (long *)0x0;
      iVar15 = 1;
      puVar25 = puVar24;
      iVar29 = iVar39 + -1;
LAB_0019d2b8:
      uVar27 = 0;
      lVar36 = lVar36 + (int)uVar3;
      lVar30 = lVar19;
      if (0 < (int)uVar4) {
        do {
          pcVar16 = (char *)(lVar36 + (int)uVar27);
          do {
            if (*pcVar16 != '\0') goto LAB_0019d2f0;
            uVar27 = uVar27 + 1;
            pcVar16 = pcVar16 + 1;
          } while (uVar4 != uVar27 && (int)uVar27 <= (int)uVar4);
          if (uVar4 == uVar27) break;
LAB_0019d2f0:
          if (local_48 <= local_58) {
            cvCreateSeqBlock(auStack_70);
          }
          *local_58 = 0;
          local_58[1] = 0;
          *(uint *)(local_58 + 2) = uVar27;
          *(int *)((long)local_58 + 0x14) = iVar15;
          local_58 = local_58 + 3;
          lVar35 = (long)local_58 - (long)*(int *)(local_68 + 0x2c);
          *(long *)(lVar30 + 8) = lVar35;
          if ((int)uVar27 < (int)uVar4) {
            pcVar16 = (char *)(lVar36 + (int)uVar27);
            cVar6 = *(char *)(lVar36 + (int)uVar27);
            while ((cVar6 != '\0' && (uVar27 = uVar27 + 1, uVar27 != uVar4))) {
              pcVar16 = pcVar16 + 1;
              cVar6 = *pcVar16;
            }
          }
          if (local_48 <= local_58) {
            cvCreateSeqBlock(auStack_70);
          }
          *local_58 = 0;
          local_58[1] = 0;
          *(uint *)(local_58 + 2) = uVar27 - 1;
          *(int *)((long)local_58 + 0x14) = iVar15;
          local_58 = local_58 + 3;
          lVar30 = (long)local_58 - (long)*(int *)(local_68 + 0x2c);
          *(long *)(lVar35 + 8) = lVar30;
        } while ((int)uVar27 < (int)uVar4);
      }
      cvFlushSeqWriter(auStack_70);
      puVar24 = *(undefined8 **)(lVar19 + 8);
      iVar31 = 0;
      iVar5 = *(int *)(lVar17 + 0x28);
      *(undefined8 *)(lVar30 + 8) = 0;
      iVar5 = iVar5 - iVar39;
      iVar29 = iVar29 / 2;
      iVar34 = 0;
      iVar39 = 0;
      iVar40 = iVar5 / 2;
      puVar28 = puVar24;
LAB_0019d3f0:
      iVar14 = iVar31;
      if (iVar34 < iVar29) {
        while( true ) {
          iVar31 = iVar14;
          if (iVar40 <= iVar39) {
            if (iVar31 == 0) goto LAB_0019d5d4;
            puVar25 = (undefined8 *)puVar25[1];
            iVar34 = iVar34 + 1;
            *puVar25 = plVar33;
            puVar25 = (undefined8 *)puVar25[1];
            if (iVar34 != iVar29) goto LAB_0019d5d4;
            goto LAB_0019d4bc;
          }
          if (iVar31 == 0) {
            plVar23 = (long *)puVar25[1];
            plVar21 = (long *)puVar28[1];
            if ((int)plVar23[2] < (int)plVar21[2]) {
              if ((int)plVar23[2] < *(int *)(puVar28 + 2) + -1) {
                *plVar23 = (long)puVar25;
              }
              else {
                *puVar28 = puVar25;
                iVar31 = 1;
                plVar33 = plVar23;
              }
              iVar34 = iVar34 + 1;
              puVar25 = (undefined8 *)plVar23[1];
            }
            else {
              if ((int)plVar21[2] + 1 < *(int *)(puVar25 + 2)) {
                *puVar28 = plVar21;
                if (local_a8 <= local_b8) {
                  cvCreateSeqBlock(auStack_d0);
                }
                *local_b8 = puVar28;
                plVar21 = (long *)puVar28[1];
                local_b8 = local_b8 + 1;
              }
              else {
                *puVar28 = puVar25;
                iVar31 = -1;
                plVar33 = plVar21;
              }
              iVar39 = iVar39 + 1;
              puVar28 = (undefined8 *)plVar21[1];
            }
            goto LAB_0019d3f0;
          }
          if (iVar31 != 1) {
            puVar26 = (undefined8 *)puVar25[1];
            if (*(int *)(puVar26 + 2) + 1 < *(int *)(puVar28 + 2)) {
              *puVar26 = plVar33;
              iVar34 = iVar34 + 1;
              puVar25 = (undefined8 *)puVar26[1];
              iVar31 = 0;
            }
            else {
              if (local_78 <= local_88) {
                cvCreateSeqBlock(auStack_a0);
              }
              *local_88 = puVar28;
              plVar23 = (long *)puVar25[1];
              local_88 = local_88 + 1;
              plVar21 = (long *)puVar28[1];
              *puVar28 = plVar33;
              if ((int)plVar21[2] < (int)plVar23[2]) {
                iVar39 = iVar39 + 1;
                iVar31 = -1;
                puVar28 = (undefined8 *)plVar21[1];
                plVar33 = plVar21;
              }
              else {
                puVar25 = (undefined8 *)plVar23[1];
                iVar34 = iVar34 + 1;
                iVar31 = 1;
                plVar33 = plVar23;
              }
            }
            goto LAB_0019d3f0;
          }
          plVar21 = (long *)puVar28[1];
          lVar19 = plVar21[2];
          if (*(int *)(puVar25 + 2) <= (int)lVar19 + 1) break;
          puVar28 = (undefined8 *)plVar21[1];
          iVar39 = iVar39 + 1;
          iVar31 = 0;
          *plVar33 = (long)plVar21;
          iVar14 = 0;
          if (iVar29 <= iVar34) goto LAB_0019d450;
        }
        *plVar33 = (long)puVar25;
        plVar33 = (long *)puVar25[1];
        if ((int)plVar33[2] < (int)lVar19) {
          iVar34 = iVar34 + 1;
          puVar25 = (undefined8 *)plVar33[1];
        }
        else {
          iVar39 = iVar39 + 1;
          puVar28 = (undefined8 *)plVar21[1];
          iVar31 = -1;
          plVar33 = plVar21;
        }
        goto LAB_0019d3f0;
      }
LAB_0019d450:
      if (iVar39 < iVar40) {
        if (iVar31 != 0) {
          plVar21 = puVar28 + 1;
          iVar39 = iVar39 + 1;
          puVar28 = *(undefined8 **)(*plVar21 + 8);
          *plVar33 = *plVar21;
          if (iVar39 == iVar40) goto LAB_0019d4bc;
        }
        do {
          *puVar28 = puVar28[1];
          if (local_a8 <= local_b8) {
            cvCreateSeqBlock(auStack_d0);
          }
          *local_b8 = puVar28;
          iVar39 = iVar39 + 1;
          local_b8 = local_b8 + 1;
          puVar28 = *(undefined8 **)(puVar28[1] + 8);
        } while (iVar39 != iVar40);
      }
LAB_0019d4bc:
      if (iVar15 + 1U != uVar2) goto LAB_0019d4d4;
      goto LAB_0019d608;
    }
    iVar40 = (iVar39 + -1) / 2;
LAB_0019d608:
    iVar39 = 0;
    if (0 < iVar40) {
      do {
        iVar39 = iVar39 + 1;
        puVar25 = (undefined8 *)puVar24[1];
        *puVar25 = puVar24;
        puVar24 = (undefined8 *)puVar25[1];
      } while (iVar39 != iVar40);
    }
    lVar17 = cvEndWriteSeq(auStack_d0);
    lVar19 = cvEndWriteSeq(auStack_a0);
    puVar20 = (uint *)0x0;
    puVar37 = (uint *)0x0;
    bVar7 = false;
    iVar29 = 0;
    while( true ) {
      cvStartReadSeq(lVar17,&local_40,0);
      iVar39 = iVar29;
      if (0 < *(int *)(lVar17 + 0x28)) {
        iVar15 = 0;
        puVar32 = puVar20;
        puVar38 = puVar37;
        do {
          puVar24 = local_28 + 1;
          plVar33 = (long *)*local_28;
          local_28 = puVar24;
          if (local_18 <= puVar24) {
            cvChangeSeqBlock(&local_40,1);
          }
          puVar20 = puVar32;
          puVar37 = puVar38;
          if (*plVar33 != 0) {
            cvStartWriteSeq(0x500c,param_4,8,param_2,auStack_70);
            plVar21 = plVar33;
            do {
              if (local_48 <= local_58) {
                cvCreateSeqBlock(auStack_70);
              }
              *local_58 = plVar21[2];
              plVar23 = (long *)*plVar21;
              local_58 = local_58 + 1;
              *plVar21 = 0;
              plVar21 = plVar23;
            } while (plVar33 != plVar23);
            puVar20 = (uint *)cvEndWriteSeq(auStack_70);
            cvBoundingRect(puVar20,1);
            if (bVar7) {
              *puVar20 = *puVar20 | 0x8000;
            }
            puVar37 = puVar20;
            if (puVar38 != (uint *)0x0) {
              *(uint **)(puVar20 + 2) = puVar32;
              *(uint **)(puVar32 + 4) = puVar20;
              puVar37 = puVar38;
            }
          }
          iVar15 = iVar15 + 1;
          puVar32 = puVar20;
          puVar38 = puVar37;
          iVar39 = iVar15 + iVar29;
        } while (iVar15 < *(int *)(lVar17 + 0x28));
      }
      if (bVar7) break;
      bVar7 = true;
      lVar17 = lVar19;
      iVar29 = iVar39;
    }
    if (puVar37 == (uint *)0x0) {
      iVar39 = -1;
    }
    *param_3 = puVar37;
    if (local_150 != (undefined8 *)0x0) {
      piVar1 = (int *)(local_150 + 1);
      do {
        iVar29 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar29 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar29 == 1) {
        entry(local_150);
      }
    }
    if (puVar18 != (undefined8 *)0x0) {
      piVar1 = (int *)(puVar18 + 1);
      do {
        iVar29 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar29 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar29 == 1) {
        entry(puVar18);
      }
    }
  }
  else {
    local_130 = cvStartFindContours(param_1,param_2,param_4,param_5,param_6,param_7);
    iVar39 = -1;
    do {
      iVar39 = iVar39 + 1;
      lVar17 = cvFindNextContour(local_130);
    } while (lVar17 != 0);
    uVar22 = cvEndFindContours(&local_130);
    *param_3 = uVar22;
  }
  return iVar39;
LAB_0019d5d4:
  do {
    puVar28 = (undefined8 *)puVar25[1];
    iVar34 = iVar34 + 1;
    *puVar28 = puVar25;
    puVar25 = (undefined8 *)puVar28[1];
  } while (iVar34 != iVar29);
  if (iVar15 + 1U == uVar2) goto LAB_0019d608;
LAB_0019d4d4:
  iVar15 = iVar15 + 1;
  iVar39 = *(int *)(lVar17 + 0x28);
  lVar19 = lVar30;
  puVar25 = puVar24;
  iVar29 = iVar5;
  goto LAB_0019d2b8;
}


==================================================================

### FUNC 0019dbe0 (2684 bytes) name=findContours

/* cv::findContours(cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&,
   int, int, cv::Point_<int>) */

void cv::findContours(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                     undefined4 param_4,undefined4 param_5,ulong *param_6)

{
  int *piVar1;
  long *plVar2;
  uint uVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  char cVar10;
  int iVar11;
  int iVar12;
  void *pvVar13;
  long lVar14;
  long *plVar15;
  char *pcVar16;
  undefined4 *puVar17;
  undefined8 *puVar18;
  Mat *pMVar19;
  undefined4 uVar20;
  undefined4 uVar21;
  undefined4 uVar22;
  int iVar23;
  undefined4 uVar24;
  undefined8 *puVar25;
  long lVar26;
  long local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  uint local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined4 local_168;
  undefined8 local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined8 local_150;
  long local_148;
  undefined8 local_140;
  long *local_138;
  undefined8 local_130;
  long *local_128;
  undefined8 local_120;
  undefined8 uStack_118;
  int local_110;
  undefined8 local_108;
  long lStack_100;
  undefined8 local_f8;
  long *plStack_f0;
  undefined8 local_e8;
  long *plStack_e0;
  undefined8 local_d8;
  undefined8 uStack_d0;
  undefined4 local_c8;
  uint local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar11 = _InputArray::kind(param_2);
  if (((iVar11 != 0x40000) && (iVar11 = _InputArray::kind(param_2), iVar11 != 0x50000)) &&
     (iVar11 = _InputArray::kind(param_2), iVar11 != 0xb0000)) {
    local_60 = 0;
    local_58 = 0;
    pvVar13 = (void *)String::allocate((String *)&local_60,0x9b);
    memcpy(pvVar13,
           "(_contours.kind() == _InputArray::STD_VECTOR_VECTOR || _contours.kind() == _InputArray::STD_VECTOR_MAT || _contours.kind() == _InputArray::STD_VECTOR_UMAT)"
           ,0x9b);
    error(-0xd7,(String *)&local_60,
          "void cv::findContours(cv::InputOutputArray, cv::OutputArrayOfArrays, cv::OutputArray, int, int, cv::Point)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x6ae);
    String::deallocate((String *)&local_60);
  }
  cVar10 = _InputArray::empty(param_2);
  if ((cVar10 == '\0') &&
     ((iVar11 = _InputArray::channels(param_2,-1), iVar11 != 2 ||
      (iVar11 = _InputArray::depth(param_2,-1), iVar11 != 4)))) {
    local_60 = 0;
    local_58 = 0;
    pvVar13 = (void *)String::allocate((String *)&local_60,0x4f);
    memcpy(pvVar13,"_contours.empty() || (_contours.channels() == 2 && _contours.depth() == CV_32S)"
           ,0x4f);
    error(-0xd7,(String *)&local_60,
          "void cv::findContours(cv::InputOutputArray, cv::OutputArrayOfArrays, cv::OutputArray, int, int, cv::Point)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x6b0);
    String::deallocate((String *)&local_60);
  }
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar19 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar19;
    local_bc = *(int *)(pMVar19 + 4);
    local_b8 = *(undefined4 *)(pMVar19 + 8);
    local_b4 = *(undefined4 *)(pMVar19 + 0xc);
    local_b0 = *(undefined8 *)(pMVar19 + 0x10);
    local_a8 = *(undefined8 *)(pMVar19 + 0x18);
    local_a0 = *(undefined8 *)(pMVar19 + 0x20);
    local_98 = *(undefined8 *)(pMVar19 + 0x28);
    local_90 = *(undefined8 *)(pMVar19 + 0x30);
    local_88 = *(long *)(pMVar19 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar10 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
    }
    if (*(int *)(pMVar19 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar19 + 0x48);
      local_68 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar19);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  lVar14 = cvCreateMemStorage(0);
  if (lVar14 == 0) {
    plVar15 = (long *)0x0;
  }
  else {
    plVar15 = operator_new(0x20);
    *(undefined4 *)(plVar15 + 1) = 1;
    plVar15[2] = lVar14;
    *plVar15 = (long)&PTR_FUN_004f3420;
  }
  local_170 = 0;
  local_154 = local_b4;
  if (local_bc == 1) {
    local_154 = 1;
  }
  local_178 = local_c0 & 0x4fff | 0x42420000;
  local_160 = local_b0;
  local_168 = 0;
  local_158 = local_b8;
  local_174 = (undefined4)*local_78;
  local_1a0 = 0;
  cVar10 = _OutputArray::needed(param_3);
  if (cVar10 != '\0') {
    _OutputArray::clear(param_3);
  }
  local_60 = *param_6;
  cvFindContours(&local_178,lVar14,&local_1a0,0x80,param_4,param_5,local_60);
  if (local_1a0 == 0) {
    _OutputArray::clear((_OutputArray *)param_2);
    if (plVar15 != (long *)0x0) {
      plVar2 = plVar15 + 1;
      do {
        lVar14 = *plVar2;
        cVar10 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(plVar2,0x10);
        if (bVar4) {
          *(int *)plVar2 = (int)lVar14 + -1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
      if ((int)lVar14 == 1) {
        if (*(code **)(*plVar15 + 0x10) == FUN_0019aef0) {
          DefaultDeleter<CvMemStorage>::operator()
                    ((DefaultDeleter<CvMemStorage> *)(plVar15 + 3),(CvMemStorage *)plVar15[2]);
          (**(code **)(*plVar15 + 8))(plVar15);
        }
        else {
          (**(code **)(*plVar15 + 0x10))(plVar15);
        }
      }
    }
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar10 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    if (0 < local_bc) {
      iVar11 = 0;
      puVar17 = local_80;
      do {
        *puVar17 = 0;
        iVar11 = iVar11 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar11 < local_bc);
    }
  }
  else {
    lVar14 = cvTreeToNodeSeq(local_1a0,0x60,lVar14);
    if (lVar14 == 0) {
      iVar11 = 0;
    }
    else {
      if (*(int *)(lVar14 + 0x2c) != 8) {
        local_188 = 0;
        local_180 = 0;
        pcVar16 = (char *)String::allocate((String *)&local_188,0x27);
        cVar10 = s___seq_____seq_>elem_size____size_0043e060[0x26];
        uVar9 = s___seq_____seq_>elem_size____size_0043e060._36_2_;
        uVar8 = s___seq_____seq_>elem_size____size_0043e060._24_8_;
        uVar7 = s___seq_____seq_>elem_size____size_0043e060._16_8_;
        uVar6 = s___seq_____seq_>elem_size____size_0043e060._8_8_;
        uVar5 = s___seq_____seq_>elem_size____size_0043e060._0_8_;
        *(undefined4 *)(pcVar16 + 0x20) = s___seq_____seq_>elem_size____size_0043e060._32_4_;
        *(undefined2 *)(pcVar16 + 0x24) = uVar9;
        pcVar16[0x26] = cVar10;
        *(undefined8 *)pcVar16 = uVar5;
        *(undefined8 *)(pcVar16 + 8) = uVar6;
        *(undefined8 *)(pcVar16 + 0x10) = uVar7;
        *(undefined8 *)(pcVar16 + 0x18) = uVar8;
        error(-0xd7,(String *)&local_188,
              "cv::Seq<_Tp>::Seq(const CvSeq*) [with _Tp = CvSeq*; CvSeq = CvSeq]",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/core_c.h",0xb7e)
        ;
        String::deallocate((String *)&local_188);
      }
      iVar11 = *(int *)(lVar14 + 0x28);
    }
    _OutputArray::create((_OutputArray *)param_2,iVar11,1,0,-1,true,0);
    cvStartReadSeq(lVar14,&local_150,0);
    local_110 = 0;
    iVar12 = 0;
    if (0 < iVar11) {
      do {
        lVar26 = *local_138;
        *(int *)(lVar26 + 0x70) = iVar12;
        _OutputArray::create((_OutputArray *)param_2,*(int *)(lVar26 + 0x28),1,0xc,iVar12,true,0);
        _InputArray::kind(param_2);
        _InputArray::getMat_((int)param_2);
        if (((uint)local_60 >> 0xe & 1) == 0) {
          local_198 = 0;
          local_190 = 0;
          pcVar16 = (char *)String::allocate((String *)&local_198,0x11);
          uVar6 = s_ci_isContinuous___0043e0d8._8_8_;
          uVar5 = s_ci_isContinuous___0043e0d8._0_8_;
          pcVar16[0x10] = s_ci_isContinuous___0043e0d8[0x10];
          *(undefined8 *)pcVar16 = uVar5;
          *(undefined8 *)(pcVar16 + 8) = uVar6;
          error(-0xd7,(String *)&local_198,
                "void cv::findContours(cv::InputOutputArray, cv::OutputArrayOfArrays, cv::OutputArray, int, int, cv::Point)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/contours.cpp",0x6c8);
          String::deallocate((String *)&local_198);
        }
        cvCvtSeqToArray(lVar26,local_50,0x3fffffff00000000);
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            iVar23 = *piVar1;
            cVar10 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = iVar23 + -1;
              cVar10 = ExclusiveMonitorsStatus();
            }
          } while (cVar10 != '\0');
          if (iVar23 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        local_28 = 0;
        local_50 = (undefined8 *)0x0;
        local_38 = 0;
        local_40 = 0;
        local_48 = 0;
        if (0 < local_60._4_4_) {
          iVar23 = 0;
          puVar25 = local_20;
          do {
            *(undefined4 *)puVar25 = 0;
            iVar23 = iVar23 + 1;
            puVar25 = (undefined8 *)((long)puVar25 + 4);
          } while (iVar23 < local_60._4_4_);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
        iVar12 = iVar12 + 1;
        local_138 = local_138 + 1;
        if (local_128 <= local_138) {
          cvChangeSeqBlock(&local_150,1);
        }
        local_110 = local_110 + 1;
        if (*(int *)(local_148 + 0x28) * 2 <= local_110) {
          local_110 = 0;
        }
      } while (iVar12 != iVar11);
    }
    cVar10 = _OutputArray::needed(param_3);
    if (cVar10 != '\0') {
      _OutputArray::create(param_3,1,iVar11,0x1c,-1,true,0);
      iVar12 = _InputArray::kind((_InputArray *)param_3);
      if (iVar12 == 0x10000) {
        pMVar19 = *(Mat **)(param_3 + 8);
        local_20 = &local_58;
        local_18 = &local_10;
        uVar3 = *(uint *)pMVar19;
        local_50 = *(undefined8 **)(pMVar19 + 0x10);
        local_60 = *(ulong *)pMVar19;
        local_58 = *(undefined8 *)(pMVar19 + 8);
        local_48 = *(undefined8 *)(pMVar19 + 0x18);
        local_40 = *(undefined8 *)(pMVar19 + 0x20);
        local_38 = *(undefined8 *)(pMVar19 + 0x28);
        local_30 = *(undefined8 *)(pMVar19 + 0x30);
        local_28 = *(long *)(pMVar19 + 0x38);
        local_8 = 0;
        local_10 = 0;
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            cVar10 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = *piVar1 + 1;
              cVar10 = ExclusiveMonitorsStatus();
            }
          } while (cVar10 != '\0');
        }
        if (*(int *)(pMVar19 + 4) < 3) {
          local_10 = **(undefined8 **)(pMVar19 + 0x48);
          local_8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
        }
        else {
          local_60 = (ulong)uVar3;
          Mat::copySize((Mat *)&local_60,pMVar19);
        }
      }
      else {
        _InputArray::getMat_((int)param_3);
      }
      puVar25 = local_50;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar10 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar12 + -1;
            cVar10 = ExclusiveMonitorsStatus();
          }
        } while (cVar10 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = (undefined8 *)0x0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_60._4_4_) {
        iVar12 = 0;
        puVar18 = local_20;
        do {
          *(undefined4 *)puVar18 = 0;
          iVar12 = iVar12 + 1;
          puVar18 = (undefined8 *)((long)puVar18 + 4);
        } while (iVar12 < local_60._4_4_);
      }
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      cvStartReadSeq(lVar14,&local_108,0);
      local_150 = local_108;
      local_148 = lStack_100;
      local_c8 = 0;
      local_110 = 0;
      local_140 = local_f8;
      local_138 = plStack_f0;
      local_130 = local_e8;
      local_128 = plStack_e0;
      local_120 = local_d8;
      uStack_118 = uStack_d0;
      if (0 < iVar11) {
        puVar18 = puVar25 + ((ulong)(iVar11 - 1) + 1) * 2;
        do {
          lVar14 = *local_138;
          if (*(long *)(lVar14 + 0x10) == 0) {
            uVar24 = 0xffffffff;
          }
          else {
            uVar24 = *(undefined4 *)(*(long *)(lVar14 + 0x10) + 0x70);
          }
          if (*(long *)(lVar14 + 8) == 0) {
            uVar20 = 0xffffffff;
          }
          else {
            uVar20 = *(undefined4 *)(*(long *)(lVar14 + 8) + 0x70);
          }
          if (*(long *)(lVar14 + 0x20) == 0) {
            uVar22 = 0xffffffff;
          }
          else {
            uVar22 = *(undefined4 *)(*(long *)(lVar14 + 0x20) + 0x70);
          }
          if (*(long *)(lVar14 + 0x18) == 0) {
            uVar21 = 0xffffffff;
          }
          else {
            uVar21 = *(undefined4 *)(*(long *)(lVar14 + 0x18) + 0x70);
          }
          local_138 = local_138 + 1;
          *puVar25 = CONCAT44(uVar20,uVar24);
          puVar25[1] = CONCAT44(uVar21,uVar22);
          if (local_128 <= local_138) {
            cvChangeSeqBlock(&local_150,1);
          }
          local_110 = local_110 + 1;
          if (*(int *)(local_148 + 0x28) * 2 <= local_110) {
            local_110 = 0;
          }
          puVar25 = puVar25 + 2;
        } while (puVar25 != puVar18);
      }
    }
    if (plVar15 != (long *)0x0) {
      plVar2 = plVar15 + 1;
      do {
        lVar14 = *plVar2;
        cVar10 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(plVar2,0x10);
        if (bVar4) {
          *(int *)plVar2 = (int)lVar14 + -1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
      if ((int)lVar14 == 1) {
        if (*(code **)(*plVar15 + 0x10) == FUN_0019aef0) {
          DefaultDeleter<CvMemStorage>::operator()
                    ((DefaultDeleter<CvMemStorage> *)(plVar15 + 3),(CvMemStorage *)plVar15[2]);
          (**(code **)(*plVar15 + 8))(plVar15);
        }
        else {
          (**(code **)(*plVar15 + 0x10))(plVar15);
        }
      }
    }
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar10 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    if (0 < local_bc) {
      iVar11 = 0;
      puVar17 = local_80;
      do {
        *puVar17 = 0;
        iVar11 = iVar11 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar11 < local_bc);
    }
  }
  local_88 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  local_b0 = 0;
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0019e728 (100 bytes) name=findContours

/* cv::findContours(cv::_InputOutputArray const&, cv::_OutputArray const&, int, int,
   cv::Point_<int>) */

void cv::findContours(undefined8 param_1,undefined8 param_2,undefined4 param_3,undefined4 param_4,
                     undefined4 *param_5)

{
  undefined8 uVar1;
  undefined4 local_8;
  undefined4 local_4;
  
  uVar1 = noArray();
  local_8 = *param_5;
  local_4 = param_5[1];
  findContours(param_1,param_2,uVar1,param_3,param_4,&local_8);
  return;
}


==================================================================

### FUNC 0019e790 (1496 bytes) name=FUN_0019e790

void FUN_0019e790(_OutputArray *param_1,_OutputArray *param_2,int param_3,int param_4,byte param_5,
                 int param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  bool bVar4;
  double dVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  char *pcVar11;
  undefined4 *puVar12;
  Mat *pMVar13;
  undefined8 *puVar14;
  double dVar15;
  undefined4 local_148 [4];
  undefined4 local_138 [2];
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined4 *local_50;
  undefined4 *local_48;
  undefined4 *local_40;
  undefined4 *local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  ulong *local_18;
  ulong local_10 [2];
  
  if (1 < param_6 - 5U) {
    local_60 = 0;
    local_58 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_60,0x22);
    uVar9 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._24_8_;
    uVar8 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._16_8_;
    uVar7 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._8_8_;
    uVar6 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._0_8_;
    *(undefined2 *)(pcVar11 + 0x20) = s_ktype____CV_32F____ktype____CV_6_0043e3a0._32_2_;
    *(undefined8 *)pcVar11 = uVar6;
    *(undefined8 *)(pcVar11 + 8) = uVar7;
    *(undefined8 *)(pcVar11 + 0x10) = uVar8;
    *(undefined8 *)(pcVar11 + 0x18) = uVar9;
    cv::error(-0xd7,(String *)&local_60,
              "void cv::getScharrKernels(cv::OutputArray, cv::OutputArray, int, int, bool, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x3e);
    cv::String::deallocate((String *)&local_60);
  }
  cv::_OutputArray::create(param_1,3,1,param_6,-1,true,0);
  cv::_OutputArray::create(param_2,3,1,param_6,-1,true,0);
  iVar10 = cv::_InputArray::kind((_InputArray *)param_1);
  if (iVar10 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(undefined4 *)pMVar13;
    local_11c = *(int *)(pMVar13 + 4);
    local_118 = *(undefined4 *)(pMVar13 + 8);
    local_114 = *(undefined4 *)(pMVar13 + 0xc);
    local_110 = *(undefined8 *)(pMVar13 + 0x10);
    local_108 = *(undefined8 *)(pMVar13 + 0x18);
    local_100 = *(undefined8 *)(pMVar13 + 0x20);
    local_f8 = *(undefined8 *)(pMVar13 + 0x28);
    local_f0 = *(undefined8 *)(pMVar13 + 0x30);
    local_e8 = *(long *)(pMVar13 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar1 = (int *)(local_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar13 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_11c = 0;
      cv::Mat::copySize((Mat *)&local_120,pMVar13);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  iVar10 = cv::_InputArray::kind((_InputArray *)param_2);
  if (iVar10 == 0x10000) {
    pMVar13 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_b0 = *(undefined8 *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_c0 = *(undefined4 *)pMVar13;
    local_bc = *(int *)(pMVar13 + 4);
    local_b8 = *(undefined4 *)(pMVar13 + 8);
    local_b4 = *(undefined4 *)(pMVar13 + 0xc);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar13 + 0x48);
      local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_bc = 0;
      cv::Mat::copySize((Mat *)&local_c0,pMVar13);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  if (((param_3 < 0) || (param_4 < 0)) || (param_3 + param_4 != 1)) {
    local_60 = 0;
    local_58 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_60,0x20);
    uVar8 = s_dx_>__0____dy_>__0____dx_dy____1_0043e410._24_8_;
    uVar7 = s_dx_>__0____dy_>__0____dx_dy____1_0043e410._16_8_;
    uVar6 = s_dx_>__0____dy_>__0____dx_dy____1_0043e410._8_8_;
    *(undefined8 *)pcVar11 = s_dx_>__0____dy_>__0____dx_dy____1_0043e410._0_8_;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_60,
              "void cv::getScharrKernels(cv::OutputArray, cv::OutputArray, int, int, bool, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x44);
    cv::String::deallocate((String *)&local_60);
  }
  dVar5 = DAT_0019ee08;
  bVar4 = false;
  local_130 = (Mat *)&local_120;
  if (param_3 != 0) goto LAB_0019eba4;
  do {
    local_148[0] = 3;
    local_148[1] = 10;
    local_148[2] = 3;
    while( true ) {
      local_58 = *(undefined8 *)(local_130 + 8);
      local_10[0] = -(ulong)(*(uint *)(local_130 + 0xc) >> 0x1f) & 0xfffffffc00000000 |
                    (ulong)*(uint *)(local_130 + 0xc) << 2;
      local_18 = local_10;
      local_60 = 0x242ff4004;
      local_30 = 0;
      local_28 = 0;
      local_10[1] = 4;
      local_40 = (undefined4 *)((long)local_148 + local_10[0] * (long)*(int *)(local_130 + 8));
      dVar15 = 1.0;
      if ((param_3 == 1) < param_5) {
        dVar15 = dVar5;
      }
      local_128 = 0;
      local_124 = 0;
      local_138[0] = 0x2010000;
      local_50 = local_148;
      local_48 = local_148;
      local_38 = local_40;
      local_20 = &local_58;
      cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)local_138,param_6,dVar15,0.0);
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          iVar10 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar10 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = (undefined4 *)0x0;
      local_38 = (undefined4 *)0x0;
      local_40 = (undefined4 *)0x0;
      local_48 = (undefined4 *)0x0;
      if (0 < local_60._4_4_) {
        iVar10 = 0;
        puVar14 = local_20;
        do {
          *(undefined4 *)puVar14 = 0;
          iVar10 = iVar10 + 1;
          puVar14 = (undefined8 *)((long)puVar14 + 4);
        } while (iVar10 < local_60._4_4_);
      }
      if (local_18 != local_10) {
        cv::fastFree(local_18);
      }
      if (bVar4) {
        if (local_88 != 0) {
          piVar1 = (int *)(local_88 + 0x14);
          do {
            iVar10 = *piVar1;
            cVar2 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = iVar10 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar10 == 1) {
            cv::Mat::deallocate((Mat *)&local_c0);
          }
        }
        local_88 = 0;
        local_b0 = 0;
        local_98 = 0;
        local_a0 = 0;
        local_a8 = 0;
        if (0 < local_bc) {
          iVar10 = 0;
          puVar12 = local_80;
          do {
            *puVar12 = 0;
            iVar10 = iVar10 + 1;
            puVar12 = puVar12 + 1;
          } while (iVar10 < local_bc);
        }
        if (local_78 != &local_70) {
          cv::fastFree(local_78);
        }
        if (local_e8 != 0) {
          piVar1 = (int *)(local_e8 + 0x14);
          do {
            iVar10 = *piVar1;
            cVar2 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = iVar10 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar10 == 1) {
            cv::Mat::deallocate((Mat *)&local_120);
          }
        }
        local_e8 = 0;
        local_110 = 0;
        local_f8 = 0;
        local_100 = 0;
        local_108 = 0;
        if (0 < local_11c) {
          iVar10 = 0;
          puVar12 = local_e0;
          do {
            *puVar12 = 0;
            iVar10 = iVar10 + 1;
            puVar12 = puVar12 + 1;
          } while (iVar10 < local_11c);
        }
        if (local_d8 != &local_d0) {
          cv::fastFree(local_d8);
        }
        return;
      }
      bVar4 = true;
      local_130 = (Mat *)&local_c0;
      param_3 = param_4;
      if (param_4 == 0) break;
LAB_0019eba4:
      if (param_3 == 1) {
        local_148[1] = 0;
        local_148[0] = 0xffffffff;
        local_148[2] = 1;
      }
    }
  } while( true );
}


==================================================================

### FUNC 0019ee10 (2316 bytes) name=FUN_0019ee10

void FUN_0019ee10(_OutputArray *param_1,_OutputArray *param_2,int param_3,int param_4,uint param_5,
                 char param_6,int param_7)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  bool bVar5;
  ulong uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  undefined2 uVar14;
  int iVar15;
  uint uVar16;
  char *pcVar17;
  uint *__s;
  uint uVar18;
  uint *puVar19;
  uint *puVar20;
  undefined8 *puVar21;
  undefined4 *puVar22;
  Mat *pMVar23;
  int iVar24;
  uint uVar25;
  uint uVar26;
  double dVar27;
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  uint *local_50;
  uint *local_48;
  uint *local_40;
  uint *local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  ulong *local_18;
  ulong local_10;
  undefined8 local_8;
  
  if ((((param_5 != 1) || (uVar25 = 3, param_3 < 1)) && (uVar25 = param_5, param_5 != 1)) ||
     (uVar26 = 3, param_4 < 1)) {
    uVar26 = param_5;
  }
  if (1 < param_7 - 5U) {
    local_60 = 0;
    local_58 = 0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_60,0x22);
    uVar10 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._24_8_;
    uVar9 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._16_8_;
    uVar8 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._8_8_;
    uVar7 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._0_8_;
    *(undefined2 *)(pcVar17 + 0x20) = s_ktype____CV_32F____ktype____CV_6_0043e3a0._32_2_;
    *(undefined8 *)pcVar17 = uVar7;
    *(undefined8 *)(pcVar17 + 8) = uVar8;
    *(undefined8 *)(pcVar17 + 0x10) = uVar9;
    *(undefined8 *)(pcVar17 + 0x18) = uVar10;
    cv::error(-0xd7,(String *)&local_60,
              "void cv::getSobelKernels(cv::OutputArray, cv::OutputArray, int, int, int, bool, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x61);
    cv::String::deallocate((String *)&local_60);
  }
  cv::_OutputArray::create(param_1,uVar25,1,param_7,-1,true,0);
  cv::_OutputArray::create(param_2,uVar26,1,param_7,-1,true,0);
  iVar15 = cv::_InputArray::kind((_InputArray *)param_1);
  if (iVar15 == 0x10000) {
    pMVar23 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(undefined4 *)pMVar23;
    local_11c = *(int *)(pMVar23 + 4);
    local_118 = *(undefined4 *)(pMVar23 + 8);
    local_114 = *(undefined4 *)(pMVar23 + 0xc);
    local_110 = *(undefined8 *)(pMVar23 + 0x10);
    local_108 = *(undefined8 *)(pMVar23 + 0x18);
    local_100 = *(undefined8 *)(pMVar23 + 0x20);
    local_f8 = *(undefined8 *)(pMVar23 + 0x28);
    local_f0 = *(undefined8 *)(pMVar23 + 0x30);
    local_e8 = *(long *)(pMVar23 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar1 = (int *)(local_e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar23 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_11c = 0;
      cv::Mat::copySize((Mat *)&local_120,pMVar23);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  iVar15 = cv::_InputArray::kind((_InputArray *)param_2);
  if (iVar15 == 0x10000) {
    pMVar23 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_b0 = *(undefined8 *)(pMVar23 + 0x10);
    local_a8 = *(undefined8 *)(pMVar23 + 0x18);
    local_a0 = *(undefined8 *)(pMVar23 + 0x20);
    local_98 = *(undefined8 *)(pMVar23 + 0x28);
    local_90 = *(undefined8 *)(pMVar23 + 0x30);
    local_88 = *(long *)(pMVar23 + 0x38);
    local_c0 = *(undefined4 *)pMVar23;
    local_bc = *(int *)(pMVar23 + 4);
    local_b8 = *(undefined4 *)(pMVar23 + 8);
    local_b4 = *(undefined4 *)(pMVar23 + 0xc);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar23 + 0x48);
      local_68 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_bc = 0;
      cv::Mat::copySize((Mat *)&local_c0,pMVar23);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  uVar16 = uVar26;
  if (((param_5 & 1) == 0) || (0x1f < (int)param_5)) {
    local_148 = 0;
    local_140 = 0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_148,0x32);
    uVar12 = s_The_kernel_size_must_be_odd_and_n_0043e438._40_8_;
    uVar11 = s_The_kernel_size_must_be_odd_and_n_0043e438._32_8_;
    uVar10 = s_The_kernel_size_must_be_odd_and_n_0043e438._24_8_;
    uVar9 = s_The_kernel_size_must_be_odd_and_n_0043e438._16_8_;
    uVar8 = s_The_kernel_size_must_be_odd_and_n_0043e438._8_8_;
    uVar7 = s_The_kernel_size_must_be_odd_and_n_0043e438._0_8_;
    *(undefined2 *)(pcVar17 + 0x30) = s_The_kernel_size_must_be_odd_and_n_0043e438._48_2_;
    *(undefined8 *)pcVar17 = uVar7;
    *(undefined8 *)(pcVar17 + 8) = uVar8;
    *(undefined8 *)(pcVar17 + 0x10) = uVar9;
    *(undefined8 *)(pcVar17 + 0x18) = uVar10;
    *(undefined8 *)(pcVar17 + 0x20) = uVar11;
    *(undefined8 *)(pcVar17 + 0x28) = uVar12;
    cv::error(-0xd3,(String *)&local_148,
              "void cv::getSobelKernels(cv::OutputArray, cv::OutputArray, int, int, int, bool, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x69);
    cv::String::deallocate((String *)&local_148);
    if ((int)uVar26 < (int)uVar25) {
      uVar16 = uVar25;
    }
  }
  else if ((int)uVar26 < (int)uVar25) {
    uVar16 = uVar25;
  }
  uVar6 = (ulong)(int)(uVar16 + 1);
  if (uVar6 == 0) {
    __s = (uint *)0x0;
  }
  else {
    if (0x3fffffffffffffff < uVar6) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
    __s = operator_new(uVar6 << 2);
    memset(__s,0,uVar6 << 2);
  }
  if (((param_3 < 0) || (param_4 < 0)) || (param_3 + param_4 == 0)) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_138,0x1f);
    cVar3 = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470[0x1e];
    uVar14 = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470._28_2_;
    uVar13 = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470._24_4_;
    uVar8 = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470._8_8_;
    uVar7 = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470._0_8_;
    *(undefined8 *)(pcVar17 + 0x10) = s_dx_>__0____dy_>__0____dx_dy_>_0_0043e470._16_8_;
    *(undefined4 *)(pcVar17 + 0x18) = uVar13;
    *(undefined2 *)(pcVar17 + 0x1c) = uVar14;
    pcVar17[0x1e] = cVar3;
    *(undefined8 *)pcVar17 = uVar7;
    *(undefined8 *)(pcVar17 + 8) = uVar8;
    cv::error(-0xd7,(String *)&local_138,
              "void cv::getSobelKernels(cv::OutputArray, cv::OutputArray, int, int, int, bool, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x6c);
    cv::String::deallocate((String *)&local_138);
  }
  bVar5 = false;
  pMVar23 = (Mat *)&local_120;
  bVar4 = bVar5;
  if ((int)uVar25 <= param_3) goto LAB_0019f260;
LAB_0019efe8:
  bVar5 = bVar4;
  if (uVar25 == 1) goto LAB_0019f2b8;
  do {
    if (uVar25 == 3) {
      if (param_3 == 0) {
        *__s = 1;
        __s[1] = 2;
        __s[2] = 1;
      }
      else if (param_3 == 1) {
        __s[1] = 0;
        *__s = 0xffffffff;
        __s[2] = 1;
      }
      else {
        *__s = 1;
        __s[1] = 0xfffffffe;
        __s[2] = 1;
      }
    }
    else {
      *__s = 1;
      if (0 < (int)uVar25) {
        memset(__s + 1,0,((ulong)(uVar25 - 1) + 1) * 4);
      }
      if (1 < (int)(uVar25 - param_3)) {
        iVar15 = 0;
        do {
          uVar16 = *__s;
          if (0 < (int)uVar25) {
            if ((int)uVar25 < 3) {
              iVar24 = 1;
            }
            else {
              iVar24 = 1;
              puVar19 = __s + 1;
              uVar18 = uVar16;
              do {
                uVar2 = *puVar19;
                iVar24 = iVar24 + 2;
                puVar19[-1] = uVar16;
                uVar16 = uVar2 + uVar18;
                uVar18 = puVar19[1];
                puVar20 = puVar19 + 2;
                *puVar19 = uVar16;
                uVar16 = uVar2 + uVar18;
                puVar19 = puVar20;
              } while (puVar20 != __s + (ulong)(uVar25 - 3 >> 1) * 2 + 3);
            }
            puVar19 = __s + iVar24;
            do {
              iVar24 = iVar24 + 1;
              uVar2 = puVar19[-1];
              uVar18 = *puVar19;
              puVar19[-1] = uVar16;
              puVar19 = puVar19 + 1;
              uVar16 = uVar18 + uVar2;
            } while (iVar24 <= (int)uVar25);
          }
          iVar15 = iVar15 + 1;
        } while (iVar15 != (uVar25 - param_3) + -1);
      }
      if (0 < param_3) {
        iVar15 = 0;
        do {
          uVar16 = -*__s;
          puVar19 = __s + 1;
          uVar18 = *__s;
          if (0 < (int)uVar25) {
            do {
              uVar2 = *puVar19;
              puVar20 = puVar19 + 1;
              puVar19[-1] = uVar16;
              uVar16 = uVar18 - uVar2;
              puVar19 = puVar20;
              uVar18 = uVar2;
            } while (puVar20 != __s + (ulong)(uVar25 - 1) + 2);
          }
          iVar15 = iVar15 + 1;
        } while (iVar15 != param_3);
      }
    }
    while( true ) {
      local_58 = *(undefined8 *)(pMVar23 + 8);
      local_10 = -(ulong)(*(uint *)(pMVar23 + 0xc) >> 0x1f) & 0xfffffffc00000000 |
                 (ulong)*(uint *)(pMVar23 + 0xc) << 2;
      local_20 = &local_58;
      local_60 = 0x242ff4004;
      local_18 = &local_10;
      local_30 = 0;
      local_28 = 0;
      local_40 = (uint *)((long)__s + local_10 * (long)*(int *)(pMVar23 + 8));
      local_8 = 4;
      dVar27 = 1.0;
      if (param_6 != '\0') {
        dVar27 = 1.0 / (double)(1 << (ulong)((uVar25 - param_3) - 1 & 0x1f));
      }
      local_128 = 0;
      local_124 = 0;
      local_138 = CONCAT44(local_138._4_4_,0x2010000);
      local_130 = pMVar23;
      local_50 = __s;
      local_48 = __s;
      local_38 = local_40;
      cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_138,param_7,dVar27,0.0);
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          iVar15 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar15 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar15 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = (uint *)0x0;
      local_38 = (uint *)0x0;
      local_40 = (uint *)0x0;
      local_48 = (uint *)0x0;
      if (0 < local_60._4_4_) {
        iVar15 = 0;
        puVar21 = local_20;
        do {
          *(undefined4 *)puVar21 = 0;
          iVar15 = iVar15 + 1;
          puVar21 = (undefined8 *)((long)puVar21 + 4);
        } while (iVar15 < local_60._4_4_);
      }
      if (local_18 != &local_10) {
        cv::fastFree(local_18);
      }
      if (bVar5) {
        if (__s != (uint *)0x0) {
          operator_delete(__s);
        }
        if (local_88 != 0) {
          piVar1 = (int *)(local_88 + 0x14);
          do {
            iVar15 = *piVar1;
            cVar3 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
            cv::Mat::deallocate((Mat *)&local_c0);
          }
        }
        local_88 = 0;
        local_b0 = 0;
        local_98 = 0;
        local_a0 = 0;
        local_a8 = 0;
        if (0 < local_bc) {
          iVar15 = 0;
          puVar22 = local_80;
          do {
            *puVar22 = 0;
            iVar15 = iVar15 + 1;
            puVar22 = puVar22 + 1;
          } while (iVar15 < local_bc);
        }
        if (local_78 != &local_70) {
          cv::fastFree(local_78);
        }
        if (local_e8 != 0) {
          piVar1 = (int *)(local_e8 + 0x14);
          do {
            iVar15 = *piVar1;
            cVar3 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
            cv::Mat::deallocate((Mat *)&local_120);
          }
        }
        local_e8 = 0;
        local_110 = 0;
        local_f8 = 0;
        local_100 = 0;
        local_108 = 0;
        if (0 < local_11c) {
          iVar15 = 0;
          puVar22 = local_e0;
          do {
            *puVar22 = 0;
            iVar15 = iVar15 + 1;
            puVar22 = puVar22 + 1;
          } while (iVar15 < local_11c);
        }
        if (local_d8 != &local_d0) {
          cv::fastFree(local_d8);
        }
        return;
      }
      bVar5 = true;
      pMVar23 = (Mat *)&local_c0;
      param_3 = param_4;
      uVar25 = uVar26;
      bVar4 = true;
      if (param_4 < (int)uVar26) goto LAB_0019efe8;
LAB_0019f260:
      local_60 = 0;
      local_58 = 0;
      pcVar17 = (char *)cv::String::allocate((String *)&local_60,0xd);
      cVar3 = s_ksize_>_order_0043e490[0xc];
      uVar13 = s_ksize_>_order_0043e490._8_4_;
      *(undefined8 *)pcVar17 = s_ksize_>_order_0043e490._0_8_;
      *(undefined4 *)(pcVar17 + 8) = uVar13;
      pcVar17[0xc] = cVar3;
      cv::error(-0xd7,(String *)&local_60,
                "void cv::getSobelKernels(cv::OutputArray, cv::OutputArray, int, int, int, bool, int)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x74);
      cv::String::deallocate((String *)&local_60);
      if (uVar25 != 1) break;
LAB_0019f2b8:
      *__s = uVar25;
    }
  } while( true );
}


==================================================================

### FUNC 0019f7e4 (28 bytes) name=getDerivKernels

/* cv::getDerivKernels(cv::_OutputArray const&, cv::_OutputArray const&, int, int, int, bool, int)
    */

void cv::getDerivKernels(_OutputArray *param_1,_OutputArray *param_2,int param_3,int param_4,
                        int param_5,bool param_6,int param_7)

{
  if (0 < param_5) {
    FUN_0019ee10();
    return;
  }
  FUN_0019e790(param_1,param_2,param_3,param_4,param_6,param_7);
  return;
}


==================================================================

### FUNC 0019f800 (624 bytes) name=FUN_0019f800

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8
FUN_0019f800(undefined8 param_1,undefined4 param_2,undefined4 param_3,int param_4,int param_5,
            int param_6,undefined4 param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 *puVar5;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110 [2];
  Mat *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  Mat *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_78 = &local_70;
  local_18 = &local_10;
  local_80 = &uStack_b8;
  local_20 = &uStack_58;
  uStack_b8 = _UNK_0019fac8;
  local_c0 = _DAT_0019fac0;
  uStack_68 = 0;
  local_70 = 0;
  uStack_58 = _UNK_0019fac8;
  local_60 = _DAT_0019fac0;
  uStack_8 = 0;
  local_10 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_e8 = 0;
  local_e4 = 0;
  local_f8[0] = 0x2010000;
  local_d0 = 0;
  local_e0 = CONCAT44(local_e0._4_4_,0x2010000);
  local_f0 = (Mat *)&local_c0;
  local_d8 = (Mat *)&local_60;
  cv::getDerivKernels((_OutputArray *)local_f8,(_OutputArray *)&local_e0,param_4,param_5,param_6,
                      false,5);
  local_d8 = (Mat *)0x0;
  local_e0 = 0;
  uStack_c8 = 0;
  local_d0 = 0;
  local_100 = 0;
  local_fc = 0;
  local_110[0] = 0x1010000;
  local_e8 = 0;
  local_e4 = 0;
  local_f8[0] = 0x1010000;
  local_118 = 0xffffffff;
  local_114 = 0xffffffff;
  local_108 = (Mat *)&local_c0;
  local_f0 = (Mat *)&local_60;
  FUN_001d5c50(param_1,0,param_2,param_3,local_110,(_OutputArray *)local_f8,&local_118,param_7,
               0xffffffff,(_OutputArray *)&local_e0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar4 = 0;
    puVar5 = local_20;
    do {
      *(undefined4 *)puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = (undefined8 *)((long)puVar5 + 4);
    } while (iVar4 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar4 = 0;
    puVar5 = local_80;
    do {
      *(undefined4 *)puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = (undefined8 *)((long)puVar5 + 4);
    } while (iVar4 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  return param_1;
}


==================================================================

### FUNC 0019fad0 (876 bytes) name=Sobel

/* cv::Sobel(cv::_InputArray const&, cv::_OutputArray const&, int, int, int, int, double, double,
   int) */

void cv::Sobel(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,int param_5,
              int param_6,double param_7,double param_8,int param_9)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  Mat *local_e8;
  int local_e0;
  int local_dc;
  undefined4 local_d8 [2];
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar5 = _InputArray::type(param_1,-1);
  uVar2 = uVar5 & 7;
  if (param_3 < 0) {
    param_3 = uVar2;
  }
  _InputArray::size((int)param_1);
  _OutputArray::create(param_2,(Mat *)&local_60,(param_3 & 7U) + (uVar5 & 0xff8),0xffffffff,0,0);
  local_bc = 0;
  if (uVar2 < 5) {
    uVar2 = 5;
  }
  local_80 = &local_b8;
  local_78 = &local_70;
  local_20 = &local_58;
  local_18 = &local_10;
  if ((int)uVar2 < param_3) {
    uVar2 = param_3;
  }
  local_c0 = 0x42ff0000;
  local_b8 = 0;
  local_b4 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_68 = 0;
  local_70 = 0;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  local_e0 = 0;
  local_dc = 0;
  local_f0[0] = 0x2010000;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x2010000;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  getDerivKernels((_OutputArray *)local_f0,(_OutputArray *)local_d8,param_4,param_5,param_6,false,
                  uVar2);
  if (param_7 != 1.0) {
    if (param_4 == 0) {
      local_f0[0] = 0x2010000;
      local_e8 = (Mat *)&local_c0;
      local_e0 = param_4;
      local_dc = param_4;
      Mat::convertTo((Mat *)&local_c0,(_OutputArray *)local_f0,-1,param_7,0.0);
    }
    else {
      local_c8 = 0;
      local_c4 = 0;
      local_d8[0] = 0x2010000;
      local_d0 = (Mat *)&local_60;
      Mat::convertTo((Mat *)&local_60,(_OutputArray *)local_d8,-1,param_7,0.0);
    }
  }
  local_e0 = 0;
  local_dc = 0;
  local_f0[0] = 0x1010000;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x1010000;
  local_f8 = 0xffffffff;
  local_f4 = 0xffffffff;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  sepFilter2D(param_8,param_1,param_2,param_3,(_OutputArray *)local_f0,(_OutputArray *)local_d8,
              &local_f8,param_9);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar7 = 0;
    puVar6 = local_20;
    do {
      *puVar6 = 0;
      iVar7 = iVar7 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar7 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    puVar6 = local_80;
    do {
      *puVar6 = 0;
      iVar7 = iVar7 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0019fe8c (868 bytes) name=Scharr

/* cv::Scharr(cv::_InputArray const&, cv::_OutputArray const&, int, int, int, double, double, int)
    */

void cv::Scharr(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,int param_5,
               double param_6,double param_7,int param_8)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  Mat *local_e8;
  int local_e0;
  int local_dc;
  undefined4 local_d8 [2];
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar5 = _InputArray::type(param_1,-1);
  uVar2 = uVar5 & 7;
  if (param_3 < 0) {
    param_3 = uVar2;
  }
  _InputArray::size((int)param_1);
  _OutputArray::create(param_2,(Mat *)&local_60,(param_3 & 7U) + (uVar5 & 0xff8),0xffffffff,0,0);
  local_bc = 0;
  if (uVar2 < 5) {
    uVar2 = 5;
  }
  local_80 = &local_b8;
  local_78 = &local_70;
  local_20 = &local_58;
  local_18 = &local_10;
  if ((int)uVar2 < param_3) {
    uVar2 = param_3;
  }
  local_c0 = 0x42ff0000;
  local_b8 = 0;
  local_b4 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_68 = 0;
  local_70 = 0;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  local_e0 = 0;
  local_dc = 0;
  local_f0[0] = 0x2010000;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x2010000;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  FUN_0019e790((_OutputArray *)local_f0,(_OutputArray *)local_d8,param_4,param_5,0,uVar2);
  if (param_6 != 1.0) {
    if (param_4 == 0) {
      local_f0[0] = 0x2010000;
      local_e8 = (Mat *)&local_c0;
      local_e0 = param_4;
      local_dc = param_4;
      Mat::convertTo((Mat *)&local_c0,(_OutputArray *)local_f0,-1,param_6,0.0);
    }
    else {
      local_c8 = 0;
      local_c4 = 0;
      local_d8[0] = 0x2010000;
      local_d0 = (Mat *)&local_60;
      Mat::convertTo((Mat *)&local_60,(_OutputArray *)local_d8,-1,param_6,0.0);
    }
  }
  local_e0 = 0;
  local_dc = 0;
  local_f0[0] = 0x1010000;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x1010000;
  local_f8 = 0xffffffff;
  local_f4 = 0xffffffff;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  sepFilter2D(param_7,param_1,param_2,param_3,(_OutputArray *)local_f0,(_OutputArray *)local_d8,
              &local_f8,param_8);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar7 = 0;
    puVar6 = local_20;
    do {
      *puVar6 = 0;
      iVar7 = iVar7 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar7 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    puVar6 = local_80;
    do {
      *puVar6 = 0;
      iVar7 = iVar7 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 001a0240 (3512 bytes) name=Laplacian

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::Laplacian(cv::_InputArray const&, cv::_OutputArray const&, int, int, double, double, int) */

void cv::Laplacian(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,double param_5
                  ,double param_6,int param_7)

{
  int *piVar1;
  long *plVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  char cVar6;
  bool bVar7;
  int iVar8;
  int iVar9;
  ulong uVar10;
  _InputArray *p_Var11;
  undefined8 *puVar12;
  Mat **ppMVar13;
  Mat *pMVar14;
  ulong uVar15;
  long lVar16;
  int iVar17;
  uint local_340;
  undefined4 local_320;
  undefined4 local_31c;
  int local_318;
  int local_314;
  int local_310;
  int local_30c;
  long *local_308;
  long *local_300;
  long *local_2f8;
  long *local_2f0;
  undefined4 local_2e8 [2];
  Mat *local_2e0;
  undefined4 local_2d8;
  undefined4 local_2d4;
  undefined4 local_2d0 [2];
  Mat *local_2c8;
  undefined4 local_2c0;
  undefined4 local_2bc;
  undefined4 local_2b8 [2];
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined8 local_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  long local_268;
  undefined8 *local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  undefined8 local_210;
  long local_208;
  undefined8 *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  undefined8 *local_1a0;
  ulong *local_198;
  ulong local_190 [2];
  undefined8 local_180;
  undefined8 uStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined8 *local_140;
  ulong *local_138;
  ulong local_130 [2];
  undefined4 local_120;
  int local_11c;
  undefined8 local_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  ulong *local_d8;
  ulong local_d0;
  ulong local_c8;
  int local_c0 [2];
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  Mat **local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 uStack_58;
  int *local_50;
  int *piStack_48;
  long local_40;
  long local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar10 = _InputArray::type(param_1,-1);
  uVar4 = (uint)uVar10 & 7;
  if (param_3 < 0) {
    param_3 = uVar4;
  }
  uVar5 = (uint)((uVar10 & 0xffffffff) >> 3);
  local_340 = uVar5 & 0x1ff;
  iVar8 = (uVar5 & 0x1ff) * 8;
  _InputArray::size((int)param_1);
  _OutputArray::create(param_2,(Mat *)&local_60,(param_3 & 7U) + iVar8,0xffffffff,0,0);
  if ((param_4 & 0xfffffffdU) == 1) {
    local_30 = 0;
    local_18 = &local_10;
    local_20 = &uStack_58;
    local_c0[1] = 0x3f800000;
    uStack_58 = (Mat *)_UNK_001a11b8;
    local_60 = _DAT_001a11b0;
    local_50 = local_c0 + (ulong)(param_4 == 3) * 9;
    local_40 = (long)&local_a0 + (ulong)(param_4 == 3) * 0x24 + 4;
    uStack_8 = _UNK_001a11c8;
    local_10 = _DAT_001a11c0;
    local_28 = 0;
    local_c0[0] = 0;
    local_b8 = (Mat *)0x3f80000000000000;
    local_b0 = 0x3f800000c0800000;
    local_a8 = 0x3f80000000000000;
    local_a0 = 0x4000000000000000;
    local_98 = 0x4000000000000000;
    local_90 = 0xc100000000000000;
    local_88 = 0x4000000000000000;
    local_80 = (Mat **)0x4000000000000000;
    piStack_48 = local_50;
    local_38 = local_40;
    if (param_5 != 1.0) {
      local_110 = 0;
      local_120 = 0x2010000;
      local_118 = (Mat *)&local_60;
      Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_120,-1,param_5,0.0);
    }
    local_110 = 0;
    local_120 = 0x1010000;
    local_180 = 0xffffffffffffffff;
    local_118 = (Mat *)&local_60;
    filter2D(param_6,param_1,param_2,param_3,&local_120,&local_180,param_7);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = (int *)0x0;
    local_38 = 0;
    local_40 = 0;
    piStack_48 = (int *)0x0;
    if (0 < local_60._4_4_) {
      iVar8 = 0;
      puVar12 = local_20;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_60._4_4_);
    }
    puVar12 = local_18;
    if (local_18 == &local_10) {
      return;
    }
  }
  else {
    uVar5 = uVar4;
    if (uVar4 < 5) {
      uVar5 = 5;
    }
    if ((int)uVar5 < param_3) {
      uVar5 = param_3;
    }
    if ((uVar10 & 7) == 0) {
      iVar17 = 3;
      if (5 < param_4) {
        iVar17 = 5;
      }
    }
    else {
      iVar17 = 6;
      if (uVar4 < 6) {
        iVar17 = 5;
      }
    }
    local_258 = &local_250;
    local_1f8 = &local_1f0;
    uStack_248 = 0;
    local_250 = 0;
    uStack_298 = _UNK_001a11d8;
    local_2a0 = _DAT_001a11d0;
    uStack_238 = _UNK_001a11d8;
    local_240 = _DAT_001a11d0;
    uStack_1e8 = 0;
    local_1f0 = 0;
    local_260 = &uStack_298;
    local_200 = &uStack_238;
    iVar17 = iVar17 + iVar8;
    local_290 = 0;
    local_288 = 0;
    local_280 = 0;
    local_278 = 0;
    local_270 = 0;
    local_268 = 0;
    local_230 = 0;
    local_228 = 0;
    local_220 = 0;
    local_218 = 0;
    local_210 = 0;
    local_208 = 0;
    local_b0 = 0;
    local_c0[0] = 0x2010000;
    local_50 = (int *)0x0;
    local_60 = CONCAT44(local_60._4_4_,0x2010000);
    local_b8 = (Mat *)&local_2a0;
    uStack_58 = (Mat *)&local_240;
    FUN_0019ee10((Mat *)local_c0,(Mat *)&local_60,2,0,param_4,0,uVar5);
    uStack_58 = (Mat *)0x0;
    local_60 = 0;
    piStack_48 = (int *)0x0;
    local_50 = (int *)0x0;
    local_110 = 0;
    local_120 = 0x1010000;
    local_b0 = 0;
    local_c0[0] = 0x1010000;
    local_180._0_4_ = 0xffffffff;
    local_180._4_4_ = 0xffffffff;
    local_118 = (Mat *)&local_2a0;
    local_b8 = (Mat *)&local_240;
    FUN_001d5c50(&local_308,0,uVar10 & 0xffffffff,iVar17,(Mat *)&local_120,(Mat *)local_c0,
                 (Mat *)&local_180,param_7,param_7,(Mat *)&local_60);
    uStack_58 = (Mat *)0x0;
    local_60 = 0;
    piStack_48 = (int *)0x0;
    local_50 = (int *)0x0;
    local_110 = 0;
    local_120 = 0x1010000;
    local_b0 = 0;
    local_c0[0] = 0x1010000;
    local_180 = 0xffffffffffffffff;
    local_118 = (Mat *)&local_240;
    local_b8 = (Mat *)&local_2a0;
    FUN_001d5c50(&local_2f8,0,uVar10 & 0xffffffff,iVar17,(Mat *)&local_120,(Mat *)local_c0,
                 (Mat *)&local_180,param_7,param_7,(Mat *)&local_60);
    iVar8 = _InputArray::kind(param_1);
    if (iVar8 == 0x10000) {
      pMVar14 = *(Mat **)(param_1 + 8);
      local_e0 = &local_118;
      local_d8 = &local_d0;
      local_120 = *(undefined4 *)pMVar14;
      local_110 = *(long *)(pMVar14 + 0x10);
      local_11c = *(int *)(pMVar14 + 4);
      local_118 = *(Mat **)(pMVar14 + 8);
      local_108 = *(undefined8 *)(pMVar14 + 0x18);
      local_100 = *(undefined8 *)(pMVar14 + 0x20);
      local_f8 = *(undefined8 *)(pMVar14 + 0x28);
      local_f0 = *(undefined8 *)(pMVar14 + 0x30);
      local_e8 = *(long *)(pMVar14 + 0x38);
      local_c8 = 0;
      local_d0 = 0;
      if (local_e8 != 0) {
        piVar1 = (int *)(local_e8 + 0x14);
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar7) {
            *piVar1 = *piVar1 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
      }
      if (*(int *)(pMVar14 + 4) < 3) {
        local_d0 = **(ulong **)(pMVar14 + 0x48);
        local_c8 = (*(ulong **)(pMVar14 + 0x48))[1];
      }
      else {
        local_11c = 0;
        Mat::copySize((Mat *)&local_120,pMVar14);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    iVar8 = _InputArray::kind((_InputArray *)param_2);
    if (iVar8 == 0x10000) {
      pMVar14 = *(Mat **)(param_2 + 8);
      local_b0 = *(undefined8 *)(pMVar14 + 0x10);
      local_80 = &local_b8;
      local_78 = &local_70;
      local_c0[0] = *(int *)pMVar14;
      local_c0[1] = *(int *)(pMVar14 + 4);
      local_b8 = *(Mat **)(pMVar14 + 8);
      local_a8 = *(undefined8 *)(pMVar14 + 0x18);
      local_a0 = *(undefined8 *)(pMVar14 + 0x20);
      local_98 = *(undefined8 *)(pMVar14 + 0x28);
      local_90 = *(undefined8 *)(pMVar14 + 0x30);
      local_88 = *(long *)(pMVar14 + 0x38);
      local_68 = 0;
      local_70 = 0;
      if (local_88 != 0) {
        piVar1 = (int *)(local_88 + 0x14);
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar7) {
            *piVar1 = *piVar1 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
      }
      if (*(int *)(pMVar14 + 4) < 3) {
        local_70 = **(undefined8 **)(pMVar14 + 0x48);
        local_68 = (*(undefined8 **)(pMVar14 + 0x48))[1];
      }
      else {
        local_c0[1] = 0;
        Mat::copySize((Mat *)local_c0,pMVar14);
      }
    }
    else {
      _InputArray::getMat_((int)param_2);
    }
    local_60 = 0;
    uStack_58._0_4_ = 0xffffffff;
    uStack_58._4_4_ = 0xffffffff;
    iVar8 = (**(code **)(*local_300 + 0x18))
                      (local_300,(Mat *)&local_120,(Mat *)&local_60,0,0xffffffff);
    local_60 = 0;
    uStack_58 = (Mat *)0xffffffffffffffff;
    (**(code **)(*local_2f0 + 0x18))(local_2f0,(Mat *)&local_120,(Mat *)&local_60,0,0xffffffff);
    local_198 = local_190;
    lVar16 = local_110 + (long)iVar8 * *local_d8;
    uVar15 = (ulong)(int)((local_340 + 1 << (ulong)((uint)(0xfa50L >> (uVar4 << 1)) & 3)) *
                         local_118._4_4_);
    uStack_1d8 = _UNK_001a11d8;
    local_1e0 = _DAT_001a11d0;
    uVar10 = 0;
    if (uVar15 != 0) {
      uVar10 = 0x4000 / uVar15;
    }
    local_1a0 = &uStack_1d8;
    iVar8 = (int)uVar10;
    if (uVar10 == 0) {
      iVar8 = 1;
    }
    local_190[1] = 0;
    local_190[0] = 0;
    if ((int)local_118 < iVar8) {
      iVar8 = (int)local_118;
    }
    local_310 = iVar8 + (int)uStack_298 + -1;
    local_1d0 = 0;
    local_1c8 = 0;
    local_1c0 = 0;
    local_1b8 = 0;
    local_1b0 = 0;
    local_1a8 = 0;
    local_30c = local_118._4_4_;
    Mat::create((Mat *)&local_1e0,2,&local_310,iVar17);
    local_138 = local_130;
    local_140 = &uStack_178;
    local_170 = 0;
    local_168 = 0;
    uStack_178 = _UNK_001a11d8;
    local_180 = _DAT_001a11d0;
    local_60 = CONCAT44(local_118._4_4_,iVar8 + (int)uStack_298 + -1);
    local_130[1] = 0;
    local_130[0] = 0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    Mat::create((Mat *)&local_180,2,(int *)&local_60,iVar17);
    if (0 < (int)local_118) {
      iVar17 = 0;
      do {
        while( true ) {
          (**(code **)(*local_300 + 0x20))
                    (local_300,lVar16,local_d0,iVar8,local_1d0,local_190[0] & 0xffffffff);
          iVar9 = (**(code **)(*local_2f0 + 0x20))
                            (local_2f0,lVar16,local_d0 & 0xffffffff,iVar8,local_170,
                             local_130[0] & 0xffffffff);
          if (iVar9 < 1) break;
          iVar3 = iVar17 + iVar9;
          local_320 = 0x80000000;
          local_31c = 0x7fffffff;
          local_318 = iVar17;
          local_314 = iVar3;
          Mat::Mat((Mat *)&local_60,(Mat *)local_c0,(Range *)&local_318,(Range *)&local_320);
          uStack_178 = CONCAT44(uStack_178._4_4_,iVar9);
          uStack_1d8 = CONCAT44(uStack_1d8._4_4_,iVar9);
          local_2b8[0] = 0x1010000;
          local_2d0[0] = 0x1010000;
          local_2a8 = 0;
          local_2a4 = 0;
          local_2c0 = 0;
          local_2bc = 0;
          local_2d8 = 0;
          local_2d4 = 0;
          local_2e8[0] = 0x2010000;
          local_2c8 = (Mat *)&local_180;
          local_2b0 = (Mat *)&local_1e0;
          local_2e0 = (Mat *)&local_1e0;
          p_Var11 = (_InputArray *)noArray();
          add((_InputArray *)local_2b8,(_InputArray *)local_2d0,(_OutputArray *)local_2e8,p_Var11,-1
             );
          local_2a8 = 0;
          local_2a4 = 0;
          local_2b8[0] = 0x2010000;
          local_2b0 = (Mat *)&local_60;
          Mat::convertTo((Mat *)&local_1e0,(_OutputArray *)local_2b8,param_3,param_5,param_6);
          if (local_28 != 0) {
            piVar1 = (int *)(local_28 + 0x14);
            do {
              iVar17 = *piVar1;
              cVar6 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar7) {
                *piVar1 = iVar17 + -1;
                cVar6 = ExclusiveMonitorsStatus();
              }
            } while (cVar6 != '\0');
            if (iVar17 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
          local_28 = 0;
          local_50 = (int *)0x0;
          local_38 = 0;
          local_40 = 0;
          piStack_48 = (int *)0x0;
          if (0 < local_60._4_4_) {
            iVar17 = 0;
            puVar12 = local_20;
            do {
              *(undefined4 *)puVar12 = 0;
              iVar17 = iVar17 + 1;
              puVar12 = (undefined8 *)((long)puVar12 + 4);
            } while (iVar17 < local_60._4_4_);
          }
          if (local_18 != &local_10) {
            fastFree(local_18);
          }
          lVar16 = lVar16 + (long)iVar8 * local_d0;
          iVar17 = iVar3;
          if ((int)local_118 <= iVar3) goto LAB_001a08dc;
        }
        iVar17 = iVar17 + iVar9;
        lVar16 = lVar16 + (long)iVar8 * local_d0;
      } while (iVar17 < (int)local_118);
    }
LAB_001a08dc:
    if (local_148 != 0) {
      piVar1 = (int *)(local_148 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    local_148 = 0;
    local_170 = 0;
    local_158 = 0;
    local_160 = 0;
    local_168 = 0;
    if (0 < local_180._4_4_) {
      iVar8 = 0;
      puVar12 = local_140;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_180._4_4_);
    }
    if (local_138 != local_130) {
      fastFree(local_138);
    }
    if (local_1a8 != 0) {
      piVar1 = (int *)(local_1a8 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    local_1a8 = 0;
    local_1d0 = 0;
    local_1b8 = 0;
    local_1c0 = 0;
    local_1c8 = 0;
    if (0 < local_1e0._4_4_) {
      iVar8 = 0;
      puVar12 = local_1a0;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_1e0._4_4_);
    }
    if (local_198 != local_190) {
      fastFree(local_198);
    }
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_c0[1]) {
      iVar8 = 0;
      ppMVar13 = local_80;
      do {
        *(undefined4 *)ppMVar13 = 0;
        iVar8 = iVar8 + 1;
        ppMVar13 = (Mat **)((long)ppMVar13 + 4);
      } while (iVar8 < local_c0[1]);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar1 = (int *)(local_e8 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = 0;
    local_f8 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_11c) {
      iVar8 = 0;
      puVar12 = local_e0;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_11c);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
    plVar2 = local_2f8 + 1;
    if (local_2f8 != (long *)0x0) {
      do {
        lVar16 = *plVar2;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(plVar2,0x10);
        if (bVar7) {
          *(int *)plVar2 = (int)lVar16 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if ((int)lVar16 == 1) {
        (**(code **)(*local_2f8 + 0x10))();
      }
    }
    plVar2 = local_308 + 1;
    if (local_308 != (long *)0x0) {
      do {
        lVar16 = *plVar2;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(plVar2,0x10);
        if (bVar7) {
          *(int *)plVar2 = (int)lVar16 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if ((int)lVar16 == 1) {
        (**(code **)(*local_308 + 0x10))();
      }
    }
    if (local_208 != 0) {
      piVar1 = (int *)(local_208 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    local_208 = 0;
    local_230 = 0;
    local_218 = 0;
    local_220 = 0;
    local_228 = 0;
    if (0 < local_240._4_4_) {
      iVar8 = 0;
      puVar12 = local_200;
      do {
        iVar8 = iVar8 + 1;
        *(undefined4 *)puVar12 = 0;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_240._4_4_);
    }
    if (local_1f8 != &local_1f0) {
      fastFree(local_1f8);
    }
    if (local_268 != 0) {
      piVar1 = (int *)(local_268 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_2a0);
      }
    }
    local_268 = 0;
    local_290 = 0;
    local_278 = 0;
    local_280 = 0;
    local_288 = 0;
    if (0 < local_2a0._4_4_) {
      iVar8 = 0;
      puVar12 = local_260;
      do {
        iVar8 = iVar8 + 1;
        *(undefined4 *)puVar12 = 0;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_2a0._4_4_);
    }
    puVar12 = local_258;
    if (local_258 == &local_250) {
      return;
    }
  }
  fastFree(puVar12);
  return;
}


==================================================================

### FUNC 001a11e0 (756 bytes) name=cvSobel

void cvSobel(cv *param_1,cv *param_2,int param_3,uint param_4,int param_5,AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  char *pcVar11;
  int iVar12;
  undefined8 local_f0;
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8 [2];
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if (((local_80[1] != local_20[1]) || (*local_80 != *local_20)) ||
     ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1)) {
    local_f0 = 0;
    local_e8 = (Mat *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_f0,0x3c);
    uVar10 = s_src_size______dst_size______src__0043e4a0._56_4_;
    uVar9 = s_src_size______dst_size______src__0043e4a0._40_8_;
    uVar8 = s_src_size______dst_size______src__0043e4a0._32_8_;
    uVar7 = s_src_size______dst_size______src__0043e4a0._24_8_;
    uVar6 = s_src_size______dst_size______src__0043e4a0._16_8_;
    uVar5 = s_src_size______dst_size______src__0043e4a0._8_8_;
    uVar4 = s_src_size______dst_size______src__0043e4a0._0_8_;
    *(undefined8 *)(pcVar11 + 0x30) = s_src_size______dst_size______src__0043e4a0._48_8_;
    *(undefined4 *)(pcVar11 + 0x38) = uVar10;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    *(undefined8 *)(pcVar11 + 0x10) = uVar6;
    *(undefined8 *)(pcVar11 + 0x18) = uVar7;
    *(undefined8 *)(pcVar11 + 0x20) = uVar8;
    *(undefined8 *)(pcVar11 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_f0,"void cvSobel(const void*, void*, int, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x3b5);
    cv::String::deallocate((String *)&local_f0);
  }
  local_f0 = CONCAT44(local_f0._4_4_,0x1010000);
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x2010000;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::Sobel((_InputArray *)&local_f0,(_OutputArray *)local_d8,local_60 & 7,param_3,param_4,param_5,
            1.0,0.0,1);
  if (((param_1 != (cv *)0x0) && (*(int *)param_1 == 0x90)) &&
     ((*(long *)(param_1 + 0x58) != 0 && ((*(int *)(param_1 + 0x20) != 0 && ((param_4 & 1) != 0)))))
     ) {
    local_c8 = 0;
    local_c4 = 0;
    local_d8[0] = 0x2010000;
    local_d0 = (Mat *)&local_60;
    cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)local_d8,-1,-1.0,0.0);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 001a1534 (632 bytes) name=cvLaplace

void cvLaplace(cv *param_1,cv *param_2,int param_3,undefined8 param_4,undefined8 param_5,
              AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  char *pcVar11;
  int iVar12;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if (((local_80[1] != local_20[1]) || (*local_80 != *local_20)) ||
     ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1)) {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_d8,0x3c);
    uVar10 = s_src_size______dst_size______src__0043e4a0._56_4_;
    uVar9 = s_src_size______dst_size______src__0043e4a0._40_8_;
    uVar8 = s_src_size______dst_size______src__0043e4a0._32_8_;
    uVar7 = s_src_size______dst_size______src__0043e4a0._24_8_;
    uVar6 = s_src_size______dst_size______src__0043e4a0._16_8_;
    uVar5 = s_src_size______dst_size______src__0043e4a0._8_8_;
    uVar4 = s_src_size______dst_size______src__0043e4a0._0_8_;
    *(undefined8 *)(pcVar11 + 0x30) = s_src_size______dst_size______src__0043e4a0._48_8_;
    *(undefined4 *)(pcVar11 + 0x38) = uVar10;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    *(undefined8 *)(pcVar11 + 0x10) = uVar6;
    *(undefined8 *)(pcVar11 + 0x18) = uVar7;
    *(undefined8 *)(pcVar11 + 0x20) = uVar8;
    *(undefined8 *)(pcVar11 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_d8,"void cvLaplace(const void*, void*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/deriv.cpp",0x3c2);
    cv::String::deallocate((String *)&local_d8);
  }
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::Laplacian((_InputArray *)local_f0,(_OutputArray *)&local_d8,local_60 & 7,param_3,1.0,0.0,1);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 001a1810 (40 bytes) name=FUN_001a1810

void FUN_001a1810(ulong param_1)

{
  if (param_1 < 0x2000000000000000) {
    operator_new(param_1 << 3);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f0e4();
}


==================================================================

### FUNC 001a1838 (6936 bytes) name=FUN_001a1838

void FUN_001a1838(long param_1,int *param_2,int param_3,undefined1 *param_4)

{
  bool bVar1;
  undefined1 *puVar2;
  undefined1 *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  undefined1 *puVar18;
  long lVar19;
  undefined8 *puVar20;
  ulong uVar21;
  uint uVar22;
  uint uVar23;
  undefined8 *puVar24;
  long lVar25;
  ulong uVar26;
  int iVar27;
  int iVar28;
  uint uVar29;
  int iVar30;
  long lVar31;
  long lVar32;
  int iVar33;
  undefined8 uVar34;
  uint uVar35;
  uint uVar36;
  
  lVar31 = *(long *)(param_1 + 0x50);
  uVar36 = (*(uint **)(param_1 + 0x40))[1];
  uVar35 = **(uint **)(param_1 + 0x40);
  if (*(int *)(param_1 + 4) < 1) {
    uVar14 = 0;
  }
  else {
    uVar14 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  iVar33 = *param_2;
  lVar32 = *(long *)(param_1 + 0x10);
  uVar29 = param_3 * 2 - 1;
  bVar1 = false;
  if (((param_3 <= iVar33) && (iVar33 < (int)(uVar36 - param_3))) && (param_3 <= param_2[1])) {
    bVar1 = param_2[1] < (int)(uVar35 - param_3);
  }
  if (param_3 < 0) {
    return;
  }
  iVar30 = 1;
  uVar5 = -(int)param_4 & 0xf;
  uVar6 = uVar14;
  if (uVar5 < uVar14) {
    uVar6 = uVar5;
  }
  iVar28 = 0;
  iVar9 = uVar14 - uVar6;
  iVar27 = 0;
  uVar10 = (uVar14 - 1) - uVar6;
  uVar5 = (iVar9 - 0x10U >> 4) + 1;
  puVar3 = param_4 + 0x10;
  uVar26 = (ulong)uVar6;
  iVar8 = uVar5 * 0x10;
  do {
    iVar7 = param_2[1];
    iVar11 = iVar33 - param_3;
    uVar16 = param_3 + iVar33;
    iVar12 = iVar33 - iVar27;
    uVar23 = iVar7 - iVar27;
    uVar22 = iVar7 + iVar27;
    uVar13 = iVar7 - param_3;
    uVar15 = iVar27 + iVar33;
    uVar4 = iVar7 + param_3;
    if (bVar1) {
      lVar19 = lVar32 + (int)uVar23 * lVar31;
      for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar11 * uVar14));
          puVar18 <= (undefined1 *)(lVar19 + (int)(uVar16 * uVar14));
          puVar18 = puVar18 + (int)uVar14) {
        if (0 < (int)uVar14) {
          if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
            lVar25 = 0;
            do {
              puVar18[lVar25] = param_4[lVar25];
              lVar25 = lVar25 + 1;
            } while ((int)lVar25 < (int)uVar14);
          }
          else {
            uVar23 = uVar6;
            if (((uVar6 != 0) && (*puVar18 = *param_4, uVar6 != 1)) &&
               ((puVar18[1] = param_4[1], uVar6 != 2 &&
                (((puVar18[2] = param_4[2], uVar6 != 3 && (puVar18[3] = param_4[3], uVar6 != 4)) &&
                 (puVar18[4] = param_4[4], uVar6 != 5)))))) {
              puVar18[5] = param_4[5];
              if (uVar6 == 6) {
                uVar23 = 6;
              }
              else {
                puVar18[6] = param_4[6];
                if ((((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                    ((puVar18[8] = param_4[8], uVar6 != 9 &&
                     ((puVar18[9] = param_4[9], uVar6 != 10 &&
                      (puVar18[10] = param_4[10], uVar6 != 0xb)))))) &&
                   ((puVar18[0xb] = param_4[0xb], uVar6 != 0xc &&
                    (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))) {
                  puVar18[0xd] = param_4[0xd];
                  if (uVar6 == 0xf) {
                    puVar18[0xe] = param_4[0xe];
                  }
                  else {
                    uVar23 = 0xe;
                  }
                }
              }
            }
            if (0xe < uVar10) {
              uVar17 = 0;
              puVar20 = (undefined8 *)(puVar18 + uVar26);
              puVar24 = (undefined8 *)(param_4 + uVar26);
              do {
                uVar34 = *puVar24;
                uVar17 = uVar17 + 1;
                puVar20[1] = puVar24[1];
                *puVar20 = uVar34;
                puVar20 = puVar20 + 2;
                puVar24 = puVar24 + 2;
              } while (uVar17 < uVar5);
              uVar23 = uVar23 + iVar8;
              if (iVar9 == iVar8) goto LAB_001a2870;
            }
            iVar33 = uVar23 + 1;
            puVar18[(int)uVar23] = param_4[(int)uVar23];
            if (iVar33 < (int)uVar14) {
              iVar7 = uVar23 + 2;
              puVar18[iVar33] = param_4[iVar33];
              if (iVar7 < (int)uVar14) {
                iVar33 = uVar23 + 3;
                puVar18[iVar7] = param_4[iVar7];
                if (iVar33 < (int)uVar14) {
                  iVar7 = uVar23 + 4;
                  puVar18[iVar33] = param_4[iVar33];
                  if (iVar7 < (int)uVar14) {
                    iVar33 = uVar23 + 5;
                    puVar18[iVar7] = param_4[iVar7];
                    if (iVar33 < (int)uVar14) {
                      iVar7 = uVar23 + 6;
                      puVar18[iVar33] = param_4[iVar33];
                      if (iVar7 < (int)uVar14) {
                        iVar33 = uVar23 + 7;
                        puVar18[iVar7] = param_4[iVar7];
                        if (iVar33 < (int)uVar14) {
                          iVar7 = uVar23 + 8;
                          puVar18[iVar33] = param_4[iVar33];
                          if (iVar7 < (int)uVar14) {
                            iVar33 = uVar23 + 9;
                            puVar18[iVar7] = param_4[iVar7];
                            if (iVar33 < (int)uVar14) {
                              iVar7 = uVar23 + 10;
                              puVar18[iVar33] = param_4[iVar33];
                              if (iVar7 < (int)uVar14) {
                                iVar33 = uVar23 + 0xb;
                                puVar18[iVar7] = param_4[iVar7];
                                if (iVar33 < (int)uVar14) {
                                  iVar7 = uVar23 + 0xc;
                                  puVar18[iVar33] = param_4[iVar33];
                                  if (iVar7 < (int)uVar14) {
                                    iVar33 = uVar23 + 0xd;
                                    puVar18[iVar7] = param_4[iVar7];
                                    if (iVar33 < (int)uVar14) {
                                      iVar7 = uVar23 + 0xe;
                                      puVar18[iVar33] = param_4[iVar33];
                                      if (iVar7 < (int)uVar14) {
                                        puVar18[iVar7] = param_4[iVar7];
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_001a2870:
      }
      lVar19 = lVar32 + (int)uVar22 * lVar31;
      for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar11 * uVar14));
          puVar18 <= (undefined1 *)(lVar19 + (int)(uVar16 * uVar14));
          puVar18 = puVar18 + (int)uVar14) {
        if (0 < (int)uVar14) {
          if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
            lVar25 = 0;
            do {
              puVar18[lVar25] = param_4[lVar25];
              lVar25 = lVar25 + 1;
            } while ((int)lVar25 < (int)uVar14);
          }
          else {
            uVar22 = uVar6;
            if (((((uVar6 != 0) && (*puVar18 = *param_4, uVar6 != 1)) &&
                 (puVar18[1] = param_4[1], uVar6 != 2)) &&
                ((puVar18[2] = param_4[2], uVar6 != 3 && (puVar18[3] = param_4[3], uVar6 != 4)))) &&
               (puVar18[4] = param_4[4], uVar6 != 5)) {
              puVar18[5] = param_4[5];
              if (uVar6 == 6) {
                uVar22 = 6;
              }
              else {
                puVar18[6] = param_4[6];
                if ((((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                    ((puVar18[8] = param_4[8], uVar6 != 9 &&
                     (((puVar18[9] = param_4[9], uVar6 != 10 &&
                       (puVar18[10] = param_4[10], uVar6 != 0xb)) &&
                      (puVar18[0xb] = param_4[0xb], uVar6 != 0xc)))))) &&
                   (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)) {
                  puVar18[0xd] = param_4[0xd];
                  if (uVar6 == 0xf) {
                    puVar18[0xe] = param_4[0xe];
                  }
                  else {
                    uVar22 = 0xe;
                  }
                }
              }
            }
            if (0xe < uVar10) {
              uVar23 = 0;
              puVar20 = (undefined8 *)(puVar18 + uVar26);
              puVar24 = (undefined8 *)(param_4 + uVar26);
              do {
                uVar34 = *puVar24;
                uVar23 = uVar23 + 1;
                puVar20[1] = puVar24[1];
                *puVar20 = uVar34;
                puVar20 = puVar20 + 2;
                puVar24 = puVar24 + 2;
              } while (uVar23 < uVar5);
              uVar22 = uVar22 + iVar8;
              if (iVar9 == iVar8) goto LAB_001a2b48;
            }
            iVar33 = uVar22 + 1;
            puVar18[(int)uVar22] = param_4[(int)uVar22];
            if (iVar33 < (int)uVar14) {
              iVar11 = uVar22 + 2;
              puVar18[iVar33] = param_4[iVar33];
              if (iVar11 < (int)uVar14) {
                iVar33 = uVar22 + 3;
                puVar18[iVar11] = param_4[iVar11];
                if (iVar33 < (int)uVar14) {
                  iVar11 = uVar22 + 4;
                  puVar18[iVar33] = param_4[iVar33];
                  if (iVar11 < (int)uVar14) {
                    iVar33 = uVar22 + 5;
                    puVar18[iVar11] = param_4[iVar11];
                    if (iVar33 < (int)uVar14) {
                      iVar11 = uVar22 + 6;
                      puVar18[iVar33] = param_4[iVar33];
                      if (iVar11 < (int)uVar14) {
                        iVar33 = uVar22 + 7;
                        puVar18[iVar11] = param_4[iVar11];
                        if (iVar33 < (int)uVar14) {
                          iVar11 = uVar22 + 8;
                          puVar18[iVar33] = param_4[iVar33];
                          if (iVar11 < (int)uVar14) {
                            iVar33 = uVar22 + 9;
                            puVar18[iVar11] = param_4[iVar11];
                            if (iVar33 < (int)uVar14) {
                              iVar11 = uVar22 + 10;
                              puVar18[iVar33] = param_4[iVar33];
                              if (iVar11 < (int)uVar14) {
                                iVar33 = uVar22 + 0xb;
                                puVar18[iVar11] = param_4[iVar11];
                                if (iVar33 < (int)uVar14) {
                                  iVar11 = uVar22 + 0xc;
                                  puVar18[iVar33] = param_4[iVar33];
                                  if (iVar11 < (int)uVar14) {
                                    iVar33 = uVar22 + 0xd;
                                    puVar18[iVar11] = param_4[iVar11];
                                    if (iVar33 < (int)uVar14) {
                                      iVar11 = uVar22 + 0xe;
                                      puVar18[iVar33] = param_4[iVar33];
                                      if (iVar11 < (int)uVar14) {
                                        puVar18[iVar11] = param_4[iVar11];
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_001a2b48:
      }
      lVar19 = lVar32 + (int)uVar13 * lVar31;
      for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar12 * uVar14));
          puVar18 <= (undefined1 *)(lVar19 + (int)(uVar15 * uVar14));
          puVar18 = puVar18 + (int)uVar14) {
        if (0 < (int)uVar14) {
          if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
            lVar25 = 0;
            do {
              puVar18[lVar25] = param_4[lVar25];
              lVar25 = lVar25 + 1;
            } while ((int)lVar25 < (int)uVar14);
          }
          else {
            uVar16 = uVar6;
            if (((uVar6 != 0) && (*puVar18 = *param_4, uVar6 != 1)) &&
               ((puVar18[1] = param_4[1], uVar6 != 2 &&
                (((puVar18[2] = param_4[2], uVar6 != 3 && (puVar18[3] = param_4[3], uVar6 != 4)) &&
                 (puVar18[4] = param_4[4], uVar6 != 5)))))) {
              puVar18[5] = param_4[5];
              if (uVar6 == 6) {
                uVar16 = 6;
              }
              else {
                puVar18[6] = param_4[6];
                if (((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                   ((((puVar18[8] = param_4[8], uVar6 != 9 &&
                      ((puVar18[9] = param_4[9], uVar6 != 10 &&
                       (puVar18[10] = param_4[10], uVar6 != 0xb)))) &&
                     (puVar18[0xb] = param_4[0xb], uVar6 != 0xc)) &&
                    (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))) {
                  puVar18[0xd] = param_4[0xd];
                  if (uVar6 == 0xf) {
                    puVar18[0xe] = param_4[0xe];
                  }
                  else {
                    uVar16 = 0xe;
                  }
                }
              }
            }
            if (0xe < uVar10) {
              uVar22 = 0;
              puVar20 = (undefined8 *)(puVar18 + uVar26);
              puVar24 = (undefined8 *)(param_4 + uVar26);
              do {
                uVar34 = *puVar24;
                uVar22 = uVar22 + 1;
                puVar20[1] = puVar24[1];
                *puVar20 = uVar34;
                puVar20 = puVar20 + 2;
                puVar24 = puVar24 + 2;
              } while (uVar22 < uVar5);
              uVar16 = uVar16 + iVar8;
              if (iVar9 == iVar8) goto LAB_001a2e28;
            }
            iVar33 = uVar16 + 1;
            puVar18[(int)uVar16] = param_4[(int)uVar16];
            if (iVar33 < (int)uVar14) {
              iVar11 = uVar16 + 2;
              puVar18[iVar33] = param_4[iVar33];
              if (iVar11 < (int)uVar14) {
                iVar33 = uVar16 + 3;
                puVar18[iVar11] = param_4[iVar11];
                if (iVar33 < (int)uVar14) {
                  iVar11 = uVar16 + 4;
                  puVar18[iVar33] = param_4[iVar33];
                  if (iVar11 < (int)uVar14) {
                    iVar33 = uVar16 + 5;
                    puVar18[iVar11] = param_4[iVar11];
                    if (iVar33 < (int)uVar14) {
                      iVar11 = uVar16 + 6;
                      puVar18[iVar33] = param_4[iVar33];
                      if (iVar11 < (int)uVar14) {
                        iVar33 = uVar16 + 7;
                        puVar18[iVar11] = param_4[iVar11];
                        if (iVar33 < (int)uVar14) {
                          iVar11 = uVar16 + 8;
                          puVar18[iVar33] = param_4[iVar33];
                          if (iVar11 < (int)uVar14) {
                            iVar33 = uVar16 + 9;
                            puVar18[iVar11] = param_4[iVar11];
                            if (iVar33 < (int)uVar14) {
                              iVar11 = uVar16 + 10;
                              puVar18[iVar33] = param_4[iVar33];
                              if (iVar11 < (int)uVar14) {
                                iVar33 = uVar16 + 0xb;
                                puVar18[iVar11] = param_4[iVar11];
                                if (iVar33 < (int)uVar14) {
                                  iVar11 = uVar16 + 0xc;
                                  puVar18[iVar33] = param_4[iVar33];
                                  if (iVar11 < (int)uVar14) {
                                    iVar33 = uVar16 + 0xd;
                                    puVar18[iVar11] = param_4[iVar11];
                                    if (iVar33 < (int)uVar14) {
                                      iVar11 = uVar16 + 0xe;
                                      puVar18[iVar33] = param_4[iVar33];
                                      if (iVar11 < (int)uVar14) {
                                        puVar18[iVar11] = param_4[iVar11];
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_001a2e28:
      }
      lVar19 = lVar32 + (int)uVar4 * lVar31;
      for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar12 * uVar14));
          puVar18 <= (undefined1 *)(lVar19 + (int)(uVar15 * uVar14));
          puVar18 = puVar18 + (int)uVar14) {
        if (0 < (int)uVar14) {
          if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
            lVar25 = 0;
            do {
              puVar18[lVar25] = param_4[lVar25];
              lVar25 = lVar25 + 1;
            } while ((int)lVar25 < (int)uVar14);
          }
          else {
            uVar16 = uVar6;
            if (uVar6 == 0) {
              uVar21 = 0;
              if (0xe < uVar10) goto LAB_001a2f74;
              iVar33 = 1;
              *puVar18 = *param_4;
            }
            else {
              *puVar18 = *param_4;
              if ((((uVar6 != 1) && (puVar18[1] = param_4[1], uVar6 != 2)) &&
                  (puVar18[2] = param_4[2], uVar6 != 3)) &&
                 ((puVar18[3] = param_4[3], uVar6 != 4 && (puVar18[4] = param_4[4], uVar6 != 5)))) {
                puVar18[5] = param_4[5];
                if (uVar6 == 6) {
                  uVar16 = 6;
                }
                else {
                  puVar18[6] = param_4[6];
                  if ((((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                      ((puVar18[8] = param_4[8], uVar6 != 9 &&
                       (((puVar18[9] = param_4[9], uVar6 != 10 &&
                         (puVar18[10] = param_4[10], uVar6 != 0xb)) &&
                        (puVar18[0xb] = param_4[0xb], uVar6 != 0xc)))))) &&
                     (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)) {
                    puVar18[0xd] = param_4[0xd];
                    if (uVar6 == 0xf) {
                      puVar18[0xe] = param_4[0xe];
                    }
                    else {
                      uVar16 = 0xe;
                    }
                  }
                }
              }
              uVar21 = uVar26;
              if (0xe < uVar10) {
LAB_001a2f74:
                uVar22 = 0;
                puVar20 = (undefined8 *)(param_4 + uVar21);
                puVar24 = (undefined8 *)(puVar18 + uVar21);
                do {
                  uVar34 = *puVar20;
                  uVar22 = uVar22 + 1;
                  puVar24[1] = puVar20[1];
                  *puVar24 = uVar34;
                  puVar20 = puVar20 + 2;
                  puVar24 = puVar24 + 2;
                } while (uVar22 < uVar5);
                uVar16 = uVar16 + iVar8;
                if (iVar9 == iVar8) goto LAB_001a30fc;
              }
              iVar33 = uVar16 + 1;
              puVar18[(int)uVar16] = param_4[(int)uVar16];
              if ((int)uVar14 <= iVar33) goto LAB_001a30fc;
            }
            iVar11 = iVar33 + 1;
            puVar18[iVar33] = param_4[iVar33];
            if (iVar11 < (int)uVar14) {
              iVar12 = iVar33 + 2;
              puVar18[iVar11] = param_4[iVar11];
              if (iVar12 < (int)uVar14) {
                iVar11 = iVar33 + 3;
                puVar18[iVar12] = param_4[iVar12];
                if (iVar11 < (int)uVar14) {
                  iVar12 = iVar33 + 4;
                  puVar18[iVar11] = param_4[iVar11];
                  if (iVar12 < (int)uVar14) {
                    iVar11 = iVar33 + 5;
                    puVar18[iVar12] = param_4[iVar12];
                    if (iVar11 < (int)uVar14) {
                      iVar12 = iVar33 + 6;
                      puVar18[iVar11] = param_4[iVar11];
                      if (iVar12 < (int)uVar14) {
                        iVar11 = iVar33 + 7;
                        puVar18[iVar12] = param_4[iVar12];
                        if (iVar11 < (int)uVar14) {
                          iVar12 = iVar33 + 8;
                          puVar18[iVar11] = param_4[iVar11];
                          if (iVar12 < (int)uVar14) {
                            iVar11 = iVar33 + 9;
                            puVar18[iVar12] = param_4[iVar12];
                            if (iVar11 < (int)uVar14) {
                              iVar12 = iVar33 + 10;
                              puVar18[iVar11] = param_4[iVar11];
                              if (iVar12 < (int)uVar14) {
                                iVar11 = iVar33 + 0xb;
                                puVar18[iVar12] = param_4[iVar12];
                                if (iVar11 < (int)uVar14) {
                                  iVar12 = iVar33 + 0xc;
                                  puVar18[iVar11] = param_4[iVar11];
                                  if (iVar12 < (int)uVar14) {
                                    iVar33 = iVar33 + 0xd;
                                    puVar18[iVar12] = param_4[iVar12];
                                    if (iVar33 < (int)uVar14) {
                                      puVar18[iVar33] = param_4[iVar33];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_001a30fc:
      }
    }
    else if ((((uint)((int)uVar13 < (int)uVar35) & (uint)(iVar11 < (int)uVar36) & ~uVar16 >> 0x1f)
              != 0) && (-1 < (int)uVar4)) {
      if (iVar11 < 0) {
        iVar11 = 0;
      }
      uVar17 = uVar36 - 1;
      if ((int)uVar16 < (int)uVar36) {
        uVar17 = uVar16;
      }
      if (uVar23 < uVar35) {
        lVar19 = lVar32 + (int)uVar23 * lVar31;
        for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar11 * uVar14));
            puVar18 <= (undefined1 *)(lVar19 + (int)(uVar14 * uVar17));
            puVar18 = puVar18 + (int)uVar14) {
          if (0 < (int)uVar14) {
            if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
              lVar25 = 0;
              do {
                puVar18[lVar25] = param_4[lVar25];
                lVar25 = lVar25 + 1;
              } while ((int)lVar25 < (int)uVar14);
            }
            else {
              uVar16 = uVar6;
              if ((((uVar6 != 0) && (*puVar18 = *param_4, uVar6 != 1)) &&
                  (puVar18[1] = param_4[1], uVar6 != 2)) &&
                 (((puVar18[2] = param_4[2], uVar6 != 3 && (puVar18[3] = param_4[3], uVar6 != 4)) &&
                  (puVar18[4] = param_4[4], uVar6 != 5)))) {
                puVar18[5] = param_4[5];
                if (uVar6 == 6) {
                  uVar16 = 6;
                }
                else {
                  puVar18[6] = param_4[6];
                  if (((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                     ((puVar18[8] = param_4[8], uVar6 != 9 &&
                      ((((puVar18[9] = param_4[9], uVar6 != 10 &&
                         (puVar18[10] = param_4[10], uVar6 != 0xb)) &&
                        (puVar18[0xb] = param_4[0xb], uVar6 != 0xc)) &&
                       (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))))) {
                    puVar18[0xd] = param_4[0xd];
                    if (uVar6 == 0xf) {
                      puVar18[0xe] = param_4[0xe];
                    }
                    else {
                      uVar16 = 0xe;
                    }
                  }
                }
              }
              if (0xe < uVar10) {
                uVar23 = 0;
                puVar20 = (undefined8 *)(puVar18 + uVar26);
                puVar24 = (undefined8 *)(param_4 + uVar26);
                do {
                  uVar23 = uVar23 + 1;
                  uVar34 = *puVar24;
                  puVar20[1] = puVar24[1];
                  *puVar20 = uVar34;
                  puVar20 = puVar20 + 2;
                  puVar24 = puVar24 + 2;
                } while (uVar23 < uVar5);
                uVar16 = uVar16 + iVar8;
                if (iVar9 == iVar8) goto LAB_001a1c60;
              }
              iVar33 = uVar16 + 1;
              puVar18[(int)uVar16] = param_4[(int)uVar16];
              if (iVar33 < (int)uVar14) {
                iVar7 = uVar16 + 2;
                puVar18[iVar33] = param_4[iVar33];
                if (iVar7 < (int)uVar14) {
                  iVar33 = uVar16 + 3;
                  puVar18[iVar7] = param_4[iVar7];
                  if (iVar33 < (int)uVar14) {
                    iVar7 = uVar16 + 4;
                    puVar18[iVar33] = param_4[iVar33];
                    if (iVar7 < (int)uVar14) {
                      iVar33 = uVar16 + 5;
                      puVar18[iVar7] = param_4[iVar7];
                      if (iVar33 < (int)uVar14) {
                        iVar7 = uVar16 + 6;
                        puVar18[iVar33] = param_4[iVar33];
                        if (iVar7 < (int)uVar14) {
                          iVar33 = uVar16 + 7;
                          puVar18[iVar7] = param_4[iVar7];
                          if (iVar33 < (int)uVar14) {
                            iVar7 = uVar16 + 8;
                            puVar18[iVar33] = param_4[iVar33];
                            if (iVar7 < (int)uVar14) {
                              iVar33 = uVar16 + 9;
                              puVar18[iVar7] = param_4[iVar7];
                              if (iVar33 < (int)uVar14) {
                                iVar7 = uVar16 + 10;
                                puVar18[iVar33] = param_4[iVar33];
                                if (iVar7 < (int)uVar14) {
                                  iVar33 = uVar16 + 0xb;
                                  puVar18[iVar7] = param_4[iVar7];
                                  if (iVar33 < (int)uVar14) {
                                    iVar7 = uVar16 + 0xc;
                                    puVar18[iVar33] = param_4[iVar33];
                                    if (iVar7 < (int)uVar14) {
                                      iVar33 = uVar16 + 0xd;
                                      puVar18[iVar7] = param_4[iVar7];
                                      if (iVar33 < (int)uVar14) {
                                        iVar7 = uVar16 + 0xe;
                                        puVar18[iVar33] = param_4[iVar33];
                                        if (iVar7 < (int)uVar14) {
                                          puVar18[iVar7] = param_4[iVar7];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_001a1c60:
        }
      }
      if (uVar22 < uVar35) {
        lVar19 = lVar32 + (int)uVar22 * lVar31;
        for (puVar18 = (undefined1 *)(lVar19 + (int)(iVar11 * uVar14));
            puVar18 <= (undefined1 *)(lVar19 + (int)(uVar14 * uVar17));
            puVar18 = puVar18 + (int)uVar14) {
          if (0 < (int)uVar14) {
            if ((param_4 < puVar18 + 0x10 && puVar18 < puVar3) || (uVar14 < 0x16)) {
              lVar25 = 0;
              do {
                puVar18[lVar25] = param_4[lVar25];
                lVar25 = lVar25 + 1;
              } while ((int)lVar25 < (int)uVar14);
            }
            else {
              uVar16 = uVar6;
              if (((uVar6 != 0) && (*puVar18 = *param_4, uVar6 != 1)) &&
                 ((puVar18[1] = param_4[1], uVar6 != 2 &&
                  (((puVar18[2] = param_4[2], uVar6 != 3 && (puVar18[3] = param_4[3], uVar6 != 4))
                   && (puVar18[4] = param_4[4], uVar6 != 5)))))) {
                puVar18[5] = param_4[5];
                if (uVar6 == 6) {
                  uVar16 = 6;
                }
                else {
                  puVar18[6] = param_4[6];
                  if ((((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                      ((puVar18[8] = param_4[8], uVar6 != 9 &&
                       ((puVar18[9] = param_4[9], uVar6 != 10 &&
                        (puVar18[10] = param_4[10], uVar6 != 0xb)))))) &&
                     ((puVar18[0xb] = param_4[0xb], uVar6 != 0xc &&
                      (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))) {
                    puVar18[0xd] = param_4[0xd];
                    if (uVar6 == 0xf) {
                      puVar18[0xe] = param_4[0xe];
                    }
                    else {
                      uVar16 = 0xe;
                    }
                  }
                }
              }
              if (0xe < uVar10) {
                uVar22 = 0;
                puVar20 = (undefined8 *)(puVar18 + uVar26);
                puVar24 = (undefined8 *)(param_4 + uVar26);
                do {
                  uVar34 = *puVar24;
                  uVar22 = uVar22 + 1;
                  puVar20[1] = puVar24[1];
                  *puVar20 = uVar34;
                  puVar20 = puVar20 + 2;
                  puVar24 = puVar24 + 2;
                } while (uVar22 < uVar5);
                uVar16 = uVar16 + iVar8;
                if (iVar9 == iVar8) goto LAB_001a1f48;
              }
              iVar33 = uVar16 + 1;
              puVar18[(int)uVar16] = param_4[(int)uVar16];
              if (iVar33 < (int)uVar14) {
                iVar11 = uVar16 + 2;
                puVar18[iVar33] = param_4[iVar33];
                if (iVar11 < (int)uVar14) {
                  iVar33 = uVar16 + 3;
                  puVar18[iVar11] = param_4[iVar11];
                  if (iVar33 < (int)uVar14) {
                    iVar11 = uVar16 + 4;
                    puVar18[iVar33] = param_4[iVar33];
                    if (iVar11 < (int)uVar14) {
                      iVar33 = uVar16 + 5;
                      puVar18[iVar11] = param_4[iVar11];
                      if (iVar33 < (int)uVar14) {
                        iVar11 = uVar16 + 6;
                        puVar18[iVar33] = param_4[iVar33];
                        if (iVar11 < (int)uVar14) {
                          iVar33 = uVar16 + 7;
                          puVar18[iVar11] = param_4[iVar11];
                          if (iVar33 < (int)uVar14) {
                            iVar11 = uVar16 + 8;
                            puVar18[iVar33] = param_4[iVar33];
                            if (iVar11 < (int)uVar14) {
                              iVar33 = uVar16 + 9;
                              puVar18[iVar11] = param_4[iVar11];
                              if (iVar33 < (int)uVar14) {
                                iVar11 = uVar16 + 10;
                                puVar18[iVar33] = param_4[iVar33];
                                if (iVar11 < (int)uVar14) {
                                  iVar33 = uVar16 + 0xb;
                                  puVar18[iVar11] = param_4[iVar11];
                                  if (iVar33 < (int)uVar14) {
                                    iVar11 = uVar16 + 0xc;
                                    puVar18[iVar33] = param_4[iVar33];
                                    if (iVar11 < (int)uVar14) {
                                      iVar33 = uVar16 + 0xd;
                                      puVar18[iVar11] = param_4[iVar11];
                                      if (iVar33 < (int)uVar14) {
                                        iVar11 = uVar16 + 0xe;
                                        puVar18[iVar33] = param_4[iVar33];
                                        if (iVar11 < (int)uVar14) {
                                          puVar18[iVar11] = param_4[iVar11];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_001a1f48:
        }
      }
      if ((iVar12 < (int)uVar36) && (-1 < (int)uVar15)) {
        if (iVar12 < 0) {
          iVar12 = 0;
        }
        uVar16 = uVar36 - 1;
        if ((int)uVar15 < (int)uVar36) {
          uVar16 = uVar15;
        }
        if (uVar13 < uVar35) {
          lVar19 = lVar32 + (int)uVar13 * lVar31;
          puVar2 = (undefined1 *)(lVar19 + (int)(uVar14 * uVar16));
          for (puVar18 = (undefined1 *)(lVar19 + (int)(uVar14 * iVar12)); puVar18 <= puVar2;
              puVar18 = puVar18 + (int)uVar14) {
            while( true ) {
              if ((int)uVar14 < 1) goto LAB_001a2258;
              if ((puVar18 + 0x10 <= param_4 || puVar3 <= puVar18) && (0x15 < uVar14)) break;
              lVar19 = 0;
              do {
                puVar18[lVar19] = param_4[lVar19];
                lVar19 = lVar19 + 1;
              } while ((int)lVar19 < (int)uVar14);
              puVar18 = puVar18 + (int)uVar14;
              if (puVar2 < puVar18) goto LAB_001a2268;
            }
            uVar22 = uVar6;
            if (((uVar6 != 0) &&
                (((*puVar18 = *param_4, uVar6 != 1 && (puVar18[1] = param_4[1], uVar6 != 2)) &&
                 (puVar18[2] = param_4[2], uVar6 != 3)))) &&
               ((puVar18[3] = param_4[3], uVar6 != 4 && (puVar18[4] = param_4[4], uVar6 != 5)))) {
              puVar18[5] = param_4[5];
              if (uVar6 == 6) {
                uVar22 = 6;
              }
              else {
                puVar18[6] = param_4[6];
                if (((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                   ((puVar18[8] = param_4[8], uVar6 != 9 &&
                    ((((puVar18[9] = param_4[9], uVar6 != 10 &&
                       (puVar18[10] = param_4[10], uVar6 != 0xb)) &&
                      (puVar18[0xb] = param_4[0xb], uVar6 != 0xc)) &&
                     (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))))) {
                  puVar18[0xd] = param_4[0xd];
                  if (uVar6 == 0xf) {
                    puVar18[0xe] = param_4[0xe];
                  }
                  else {
                    uVar22 = 0xe;
                  }
                }
              }
            }
            if (uVar10 < 0xf) goto LAB_001a20fc;
            uVar15 = 0;
            puVar20 = (undefined8 *)(puVar18 + uVar26);
            puVar24 = (undefined8 *)(param_4 + uVar26);
            do {
              uVar34 = *puVar24;
              uVar15 = uVar15 + 1;
              puVar20[1] = puVar24[1];
              *puVar20 = uVar34;
              puVar20 = puVar20 + 2;
              puVar24 = puVar24 + 2;
            } while (uVar15 < uVar5);
            uVar22 = uVar22 + iVar8;
            if (iVar9 != iVar8) {
LAB_001a20fc:
              iVar33 = uVar22 + 1;
              puVar18[(int)uVar22] = param_4[(int)uVar22];
              if (iVar33 < (int)uVar14) {
                iVar11 = uVar22 + 2;
                puVar18[iVar33] = param_4[iVar33];
                if (iVar11 < (int)uVar14) {
                  iVar33 = uVar22 + 3;
                  puVar18[iVar11] = param_4[iVar11];
                  if (iVar33 < (int)uVar14) {
                    iVar11 = uVar22 + 4;
                    puVar18[iVar33] = param_4[iVar33];
                    if (iVar11 < (int)uVar14) {
                      iVar33 = uVar22 + 5;
                      puVar18[iVar11] = param_4[iVar11];
                      if (iVar33 < (int)uVar14) {
                        iVar11 = uVar22 + 6;
                        puVar18[iVar33] = param_4[iVar33];
                        if (iVar11 < (int)uVar14) {
                          iVar33 = uVar22 + 7;
                          puVar18[iVar11] = param_4[iVar11];
                          if (iVar33 < (int)uVar14) {
                            iVar11 = uVar22 + 8;
                            puVar18[iVar33] = param_4[iVar33];
                            if (iVar11 < (int)uVar14) {
                              iVar33 = uVar22 + 9;
                              puVar18[iVar11] = param_4[iVar11];
                              if (iVar33 < (int)uVar14) {
                                iVar11 = uVar22 + 10;
                                puVar18[iVar33] = param_4[iVar33];
                                if (iVar11 < (int)uVar14) {
                                  iVar33 = uVar22 + 0xb;
                                  puVar18[iVar11] = param_4[iVar11];
                                  if (iVar33 < (int)uVar14) {
                                    iVar11 = uVar22 + 0xc;
                                    puVar18[iVar33] = param_4[iVar33];
                                    if (iVar11 < (int)uVar14) {
                                      iVar33 = uVar22 + 0xd;
                                      puVar18[iVar11] = param_4[iVar11];
                                      if (iVar33 < (int)uVar14) {
                                        iVar11 = uVar22 + 0xe;
                                        puVar18[iVar33] = param_4[iVar33];
                                        if (iVar11 < (int)uVar14) {
                                          puVar18[iVar11] = param_4[iVar11];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
LAB_001a2258:
          }
        }
LAB_001a2268:
        if (uVar4 < uVar35) {
          lVar19 = lVar32 + (int)uVar4 * lVar31;
          puVar2 = (undefined1 *)(lVar19 + (int)(uVar14 * uVar16));
          for (puVar18 = (undefined1 *)(lVar19 + (int)(uVar14 * iVar12)); puVar18 <= puVar2;
              puVar18 = puVar18 + (int)uVar14) {
            while( true ) {
              if ((int)uVar14 < 1) goto LAB_001a2544;
              if ((puVar18 + 0x10 <= param_4 || puVar3 <= puVar18) && (0x15 < uVar14)) break;
              lVar19 = 0;
              do {
                puVar18[lVar19] = param_4[lVar19];
                lVar19 = lVar19 + 1;
              } while ((int)lVar19 < (int)uVar14);
              puVar18 = puVar18 + (int)uVar14;
              if (puVar2 < puVar18) goto LAB_001a2550;
            }
            uVar16 = uVar6;
            if (uVar6 == 0) {
              uVar21 = 0;
              if (uVar10 < 0xf) {
                iVar33 = 1;
                *puVar18 = *param_4;
                goto LAB_001a2400;
              }
            }
            else {
              *puVar18 = *param_4;
              if (((uVar6 != 1) && (puVar18[1] = param_4[1], uVar6 != 2)) &&
                 ((puVar18[2] = param_4[2], uVar6 != 3 &&
                  ((puVar18[3] = param_4[3], uVar6 != 4 && (puVar18[4] = param_4[4], uVar6 != 5)))))
                 ) {
                puVar18[5] = param_4[5];
                if (uVar6 == 6) {
                  uVar16 = 6;
                }
                else {
                  puVar18[6] = param_4[6];
                  if ((((uVar6 != 7) && (puVar18[7] = param_4[7], uVar6 != 8)) &&
                      (puVar18[8] = param_4[8], uVar6 != 9)) &&
                     (((puVar18[9] = param_4[9], uVar6 != 10 &&
                       (puVar18[10] = param_4[10], uVar6 != 0xb)) &&
                      ((puVar18[0xb] = param_4[0xb], uVar6 != 0xc &&
                       (puVar18[0xc] = param_4[0xc], uVar6 != 0xd)))))) {
                    puVar18[0xd] = param_4[0xd];
                    if (uVar6 == 0xf) {
                      puVar18[0xe] = param_4[0xe];
                    }
                    else {
                      uVar16 = 0xe;
                    }
                  }
                }
              }
              uVar21 = uVar26;
              if (uVar10 < 0xf) goto LAB_001a23e8;
            }
            uVar22 = 0;
            puVar20 = (undefined8 *)(puVar18 + uVar21);
            puVar24 = (undefined8 *)(param_4 + uVar21);
            do {
              uVar34 = *puVar24;
              uVar22 = uVar22 + 1;
              puVar20[1] = puVar24[1];
              *puVar20 = uVar34;
              puVar20 = puVar20 + 2;
              puVar24 = puVar24 + 2;
            } while (uVar22 < uVar5);
            uVar16 = uVar16 + iVar8;
            if (iVar9 != iVar8) {
LAB_001a23e8:
              iVar33 = uVar16 + 1;
              puVar18[(int)uVar16] = param_4[(int)uVar16];
              if (iVar33 < (int)uVar14) {
LAB_001a2400:
                iVar11 = iVar33 + 1;
                puVar18[iVar33] = param_4[iVar33];
                if (iVar11 < (int)uVar14) {
                  iVar12 = iVar33 + 2;
                  puVar18[iVar11] = param_4[iVar11];
                  if (iVar12 < (int)uVar14) {
                    iVar11 = iVar33 + 3;
                    puVar18[iVar12] = param_4[iVar12];
                    if (iVar11 < (int)uVar14) {
                      iVar12 = iVar33 + 4;
                      puVar18[iVar11] = param_4[iVar11];
                      if (iVar12 < (int)uVar14) {
                        iVar11 = iVar33 + 5;
                        puVar18[iVar12] = param_4[iVar12];
                        if (iVar11 < (int)uVar14) {
                          iVar12 = iVar33 + 6;
                          puVar18[iVar11] = param_4[iVar11];
                          if (iVar12 < (int)uVar14) {
                            iVar11 = iVar33 + 7;
                            puVar18[iVar12] = param_4[iVar12];
                            if (iVar11 < (int)uVar14) {
                              iVar12 = iVar33 + 8;
                              puVar18[iVar11] = param_4[iVar11];
                              if (iVar12 < (int)uVar14) {
                                iVar11 = iVar33 + 9;
                                puVar18[iVar12] = param_4[iVar12];
                                if (iVar11 < (int)uVar14) {
                                  iVar12 = iVar33 + 10;
                                  puVar18[iVar11] = param_4[iVar11];
                                  if (iVar12 < (int)uVar14) {
                                    iVar11 = iVar33 + 0xb;
                                    puVar18[iVar12] = param_4[iVar12];
                                    if (iVar11 < (int)uVar14) {
                                      iVar12 = iVar33 + 0xc;
                                      puVar18[iVar11] = param_4[iVar11];
                                      if (iVar12 < (int)uVar14) {
                                        iVar33 = iVar33 + 0xd;
                                        puVar18[iVar12] = param_4[iVar12];
                                        if (iVar33 < (int)uVar14) {
                                          puVar18[iVar33] = param_4[iVar33];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
LAB_001a2544:
          }
        }
      }
    }
LAB_001a2550:
    iVar28 = iVar28 + iVar30;
    iVar27 = iVar27 + 1;
    iVar30 = iVar30 + 2;
    uVar16 = (uint)(0 < iVar28);
    param_3 = param_3 - uVar16;
    uVar16 = -uVar16;
    iVar28 = iVar28 - (uVar16 & uVar29);
    uVar29 = uVar29 - (uVar16 & 2);
    if (param_3 < iVar27) {
      return;
    }
    iVar33 = *param_2;
  } while( true );
}


==================================================================

### FUNC 001a3350 (500 bytes) name=FUN_001a3350

void FUN_001a3350(long param_1,long param_2,ulong param_3,int *param_4)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  int iVar3;
  bool bVar4;
  long lVar5;
  undefined8 *puVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  int iVar10;
  long lVar11;
  int iVar12;
  int iVar13;
  long lVar14;
  undefined8 uVar15;
  int iVar16;
  
  lVar14 = (long)(param_3 - 1) / 2;
  lVar9 = param_2;
  if (param_2 < lVar14) {
    do {
      lVar8 = (lVar9 + 1) * 2;
      lVar11 = lVar8 + -1;
      lVar7 = (lVar9 + 1) * 0x30;
      lVar5 = lVar11 * 0x18;
      iVar10 = *(int *)(param_1 + lVar7);
      puVar6 = (undefined8 *)(param_1 + lVar7);
      iVar16 = *(int *)(param_1 + lVar5);
      puVar1 = (undefined8 *)(param_1 + lVar5);
      bVar4 = iVar10 < iVar16;
      if ((iVar10 == iVar16) &&
         (bVar4 = *(int *)(puVar6 + 1) < *(int *)(puVar1 + 1),
         *(int *)(puVar6 + 1) == *(int *)(puVar1 + 1))) {
        bVar4 = *(int *)((long)puVar6 + 0xc) < *(int *)((long)puVar1 + 0xc);
      }
      if (bVar4) {
        puVar6 = puVar1;
      }
      puVar1 = (undefined8 *)(param_1 + lVar9 * 0x18);
      lVar9 = lVar8;
      if (bVar4) {
        lVar9 = lVar11;
      }
      uVar15 = puVar6[1];
      *puVar1 = *puVar6;
      puVar1[1] = uVar15;
      puVar1[2] = puVar6[2];
    } while (lVar9 < lVar14);
    if ((param_3 & 1) == 0) goto LAB_001a3408;
  }
  else {
    puVar6 = (undefined8 *)(param_1 + param_2 * 0x18);
    if ((param_3 & 1) != 0) {
      iVar10 = *param_4;
      iVar16 = param_4[1];
      iVar12 = param_4[2];
      iVar13 = param_4[3];
      uVar15 = *(undefined8 *)(param_4 + 4);
      goto LAB_001a3470;
    }
LAB_001a3408:
    if (lVar9 == (long)(param_3 - 2) / 2) {
      lVar9 = lVar9 * 2 + 1;
      puVar1 = (undefined8 *)(param_1 + lVar9 * 0x18);
      uVar15 = puVar1[1];
      *puVar6 = *puVar1;
      puVar6[1] = uVar15;
      puVar6[2] = puVar1[2];
      puVar6 = puVar1;
    }
  }
  iVar10 = *param_4;
  iVar16 = param_4[1];
  iVar12 = param_4[2];
  iVar13 = param_4[3];
  uVar15 = *(undefined8 *)(param_4 + 4);
  if (param_2 < lVar9) {
    lVar14 = (lVar9 + -1) / 2;
    lVar5 = lVar14 * 0x18;
    iVar3 = *(int *)(param_1 + lVar5);
    while( true ) {
      lVar7 = lVar14;
      bVar4 = iVar3 < iVar10;
      puVar6 = (undefined8 *)(param_1 + lVar5);
      if ((iVar3 == iVar10) &&
         (bVar4 = *(int *)(puVar6 + 1) < iVar12, *(int *)(puVar6 + 1) == iVar12)) {
        bVar4 = *(int *)((long)puVar6 + 0xc) < iVar13;
      }
      if (!bVar4) break;
      puVar1 = (undefined8 *)(param_1 + lVar9 * 0x18);
      uVar2 = puVar6[1];
      lVar14 = (lVar7 + -1) / 2;
      *puVar1 = *puVar6;
      puVar1[1] = uVar2;
      puVar1[2] = puVar6[2];
      if (lVar7 <= param_2) goto LAB_001a3470;
      lVar5 = lVar14 * 0x18;
      iVar3 = *(int *)(param_1 + lVar5);
      lVar9 = lVar7;
    }
    puVar6 = (undefined8 *)(param_1 + lVar9 * 0x18);
  }
LAB_001a3470:
  puVar6[2] = uVar15;
  puVar6[1] = CONCAT44(iVar13,iVar12);
  *puVar6 = CONCAT44(iVar16,iVar10);
  return;
}


==================================================================

### FUNC 001a3544 (428 bytes) name=FUN_001a3544

void FUN_001a3544(int *param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  bool bVar3;
  size_t __n;
  int *piVar4;
  int *piVar5;
  int iVar6;
  int *piVar7;
  undefined8 uVar8;
  int iVar9;
  
  if ((param_1 == param_2) || (piVar5 = param_1 + 6, param_2 == piVar5)) {
    return;
  }
  piVar7 = param_1 + 0xc;
LAB_001a3588:
  iVar1 = *piVar5;
  if (iVar1 == *param_1) {
    iVar6 = piVar5[2];
    if (iVar6 == param_1[2]) {
      iVar9 = piVar5[3];
      bVar3 = iVar9 < param_1[3];
    }
    else {
      bVar3 = iVar6 < param_1[2];
      iVar9 = piVar5[3];
    }
  }
  else {
    iVar9 = piVar5[3];
    bVar3 = iVar1 < *param_1;
    iVar6 = piVar5[2];
  }
  if (!bVar3) {
    iVar2 = piVar5[1];
    uVar8 = *(undefined8 *)(piVar5 + 4);
    piVar4 = piVar5;
    do {
      bVar3 = iVar1 < piVar4[-6];
      if ((iVar1 == piVar4[-6]) && (bVar3 = iVar6 < piVar4[-4], piVar4[-4] == iVar6)) {
        if (piVar4[-3] <= iVar9) goto LAB_001a3694;
      }
      else if (!bVar3) goto LAB_001a3694;
      *(undefined8 *)piVar4 = *(undefined8 *)(piVar4 + -6);
      *(undefined8 *)(piVar4 + 2) = *(undefined8 *)(piVar4 + -4);
      *(undefined8 *)(piVar4 + 4) = *(undefined8 *)(piVar4 + -2);
      piVar4 = piVar4 + -6;
    } while( true );
  }
  __n = (long)piVar5 - (long)param_1;
  iVar2 = piVar5[1];
  uVar8 = *(undefined8 *)(piVar5 + 4);
  if (0 < ((long)__n >> 3) * -0x5555555555555555) {
    memmove((void *)((long)piVar5 + (0x18 - __n)),(void *)((long)piVar5 - __n),__n);
  }
  *(undefined8 *)(param_1 + 4) = uVar8;
  *(ulong *)(param_1 + 2) = CONCAT44(iVar9,iVar6);
  *(ulong *)param_1 = CONCAT44(iVar2,iVar1);
  goto LAB_001a35fc;
LAB_001a3694:
  *(undefined8 *)(piVar4 + 4) = uVar8;
  *(ulong *)(piVar4 + 2) = CONCAT44(iVar9,iVar6);
  *(ulong *)piVar4 = CONCAT44(iVar2,iVar1);
LAB_001a35fc:
  bVar3 = param_2 == piVar7;
  piVar5 = piVar5 + 6;
  piVar7 = piVar7 + 6;
  if (bVar3) {
    return;
  }
  goto LAB_001a3588;
}


==================================================================

### FUNC 001a36f0 (628 bytes) name=FUN_001a36f0

void FUN_001a36f0(_InputArray *param_1,ulong param_2,long param_3,int param_4,long *param_5,
                 long *param_6)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  int iVar9;
  undefined4 *puVar10;
  long lVar11;
  long lVar12;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  do {
    if (param_4 < 0) {
      return;
    }
    cv::_InputArray::kind(param_1);
    cv::_InputArray::getMat_((int)param_1);
    if (local_50 == 0) {
      if (2 < local_5c) {
LAB_001a390c:
        lVar6 = local_50;
        goto LAB_001a3910;
      }
LAB_001a3770:
      lVar7 = (long)local_54 * (long)local_58;
      lVar6 = local_50;
    }
    else if (local_5c < 3) {
      lVar7 = 0;
      lVar6 = 0;
      if ((long)local_54 * (long)local_58 != 0) goto LAB_001a3770;
    }
    else {
      lVar6 = 0;
      lVar8 = 1;
      do {
        piVar1 = local_20 + lVar6;
        lVar6 = lVar6 + 1;
        lVar8 = lVar8 * *piVar1;
      } while ((int)lVar6 < local_5c);
      lVar6 = 0;
      if (lVar8 != 0) goto LAB_001a390c;
LAB_001a3910:
      lVar8 = 0;
      lVar7 = 1;
      do {
        piVar1 = local_20 + lVar8;
        lVar8 = lVar8 + 1;
        lVar7 = lVar7 * *piVar1;
      } while ((int)lVar8 < local_5c);
    }
    lVar12 = (long)param_4;
    lVar11 = lVar12 * 0x60;
    cvMakeSeqHeaderForArray(0x500c,0x60,8,lVar6,lVar7,*param_5 + lVar11,*param_6 + lVar12 * 0x20);
    lVar12 = lVar12 * 0x10;
    lVar6 = param_3 + lVar12;
    lVar8 = 0;
    iVar9 = *(int *)(lVar6 + 4);
    iVar2 = *(int *)(lVar6 + 8);
    iVar3 = *(int *)(lVar6 + 0xc);
    if ((ulong)(long)*(int *)(param_3 + lVar12) < param_2) {
      lVar8 = *param_5 + (long)*(int *)(param_3 + lVar12) * 0x60;
    }
    *(long *)(*param_5 + lVar11 + 0x10) = lVar8;
    lVar6 = 0;
    if ((ulong)(long)iVar9 < param_2) {
      lVar6 = *param_5 + (long)iVar9 * 0x60;
    }
    *(long *)(*param_5 + lVar11 + 8) = lVar6;
    lVar6 = 0;
    if ((ulong)(long)iVar2 < param_2) {
      lVar6 = *param_5 + (long)iVar2 * 0x60;
    }
    *(long *)(*param_5 + lVar11 + 0x20) = lVar6;
    lVar6 = 0;
    if ((ulong)(long)iVar3 < param_2) {
      lVar6 = *param_5 + (long)iVar3 * 0x60;
    }
    *(long *)(*param_5 + lVar11 + 0x18) = lVar6;
    if (-1 < iVar2) {
      FUN_001a36f0(param_1,param_2,param_3,iVar2,param_5,param_6);
    }
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar9 = *piVar1;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = iVar9 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar9 == 1) {
        cv::Mat::deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar9 = 0;
      puVar10 = local_20;
      do {
        *puVar10 = 0;
        iVar9 = iVar9 + 1;
        puVar10 = puVar10 + 1;
      } while (iVar9 < local_5c);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
    param_4 = *(int *)(param_3 + lVar12);
  } while( true );
}


==================================================================

### FUNC 001a398c (556 bytes) name=clipLine

/* cv::clipLine(cv::Size_<int>, cv::Point_<int>&, cv::Point_<int>&) */

undefined1 cv::clipLine(int *param_1,int *param_2,int *param_3)

{
  long lVar1;
  long lVar2;
  int iVar3;
  undefined1 uVar4;
  long lVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  
  if (*param_1 < 1 || param_1[1] < 1) {
    return 0;
  }
  iVar3 = *param_1 + -1;
  lVar12 = (long)*param_2;
  lVar14 = (long)param_2[1];
  lVar16 = (long)iVar3;
  lVar13 = (long)*param_3;
  iVar6 = 2;
  if (lVar12 <= lVar16) {
    iVar6 = 0;
  }
  lVar15 = (long)param_3[1];
  iVar6 = iVar6 - (*param_2 >> 0x1f);
  iVar11 = param_1[1] + -1;
  iVar10 = *param_3 >> 0x1f;
  if (lVar14 < 0) {
    uVar8 = iVar6 + 4;
    iVar6 = 2;
    if (lVar13 <= lVar16) {
      iVar6 = 0;
    }
    iVar6 = iVar6 - iVar10;
    if (-1 < lVar15) goto LAB_001a3a0c;
LAB_001a3abc:
    iVar6 = iVar6 + 4;
    iVar10 = 0;
  }
  else {
    iVar9 = 8;
    if (lVar14 <= iVar11) {
      iVar9 = 0;
    }
    uVar8 = iVar6 + iVar9;
    iVar6 = 2;
    if (lVar13 <= lVar16) {
      iVar6 = 0;
    }
    iVar6 = iVar6 - iVar10;
    if (lVar15 < 0) goto LAB_001a3abc;
LAB_001a3a0c:
    iVar10 = 8;
    if (lVar15 <= iVar11) {
      iVar10 = 0;
    }
  }
  lVar5 = (long)iVar11;
  uVar7 = iVar6 + iVar10;
  uVar4 = 0;
  if ((uVar7 & uVar8) != 0) {
    return 0;
  }
  if (uVar7 == 0 && uVar8 == 0) {
    return 1;
  }
  if ((uVar8 & 0xc) == 0) {
    if ((uVar7 & 0xc) != 0) goto LAB_001a3adc;
  }
  else {
    lVar1 = lVar5;
    if ((int)uVar8 < 8) {
      lVar1 = 0;
    }
    lVar2 = 0;
    if (lVar15 - lVar14 != 0) {
      lVar2 = ((lVar1 - lVar14) * (lVar13 - lVar12)) / (lVar15 - lVar14);
    }
    lVar12 = lVar12 + lVar2;
    iVar6 = 2;
    if (lVar12 <= lVar16) {
      iVar6 = 0;
    }
    uVar8 = iVar6 - (int)(lVar12 >> 0x3f);
    lVar14 = lVar1;
    if ((uVar7 & 0xc) != 0) {
LAB_001a3adc:
      if (uVar7 < 8) {
        lVar5 = 0;
      }
      lVar1 = 0;
      if (lVar15 - lVar14 != 0) {
        lVar1 = ((lVar5 - lVar15) * (lVar13 - lVar12)) / (lVar15 - lVar14);
      }
      lVar13 = lVar13 + lVar1;
      iVar6 = 2;
      if (lVar13 <= lVar16) {
        iVar6 = 0;
      }
      uVar7 = iVar6 - (int)(lVar13 >> 0x3f);
      lVar15 = lVar5;
    }
    iVar11 = (int)lVar13;
    iVar6 = (int)lVar12;
    if ((uVar8 & uVar7) != 0) goto LAB_001a3a80;
    if (uVar8 == 0 && uVar7 == 0) {
      uVar4 = 1;
      goto LAB_001a3a80;
    }
  }
  if (uVar8 == 0) {
    iVar6 = (int)lVar12;
    lVar5 = lVar12;
  }
  else {
    lVar5 = lVar16;
    iVar6 = iVar3;
    if (uVar8 == 1) {
      iVar6 = 0;
      lVar5 = 0;
    }
    lVar1 = 0;
    if (lVar13 - lVar12 != 0) {
      lVar1 = ((lVar5 - lVar12) * (lVar15 - lVar14)) / (lVar13 - lVar12);
    }
    lVar14 = lVar1 + lVar14;
  }
  if (uVar7 == 0) {
    iVar11 = (int)lVar13;
    uVar4 = 1;
  }
  else {
    iVar11 = iVar3;
    if (uVar7 == 1) {
      iVar11 = 0;
      lVar16 = 0;
    }
    uVar4 = 1;
    lVar12 = 0;
    if (lVar13 - lVar5 != 0) {
      lVar12 = ((lVar16 - lVar13) * (lVar15 - lVar14)) / (lVar13 - lVar5);
    }
    lVar15 = lVar15 + lVar12;
  }
LAB_001a3a80:
  *param_2 = iVar6;
  param_2[1] = (int)lVar14;
  *param_3 = iVar11;
  param_3[1] = (int)lVar15;
  return uVar4;
}


==================================================================

### FUNC 001a3bb8 (3880 bytes) name=FUN_001a3bb8

void FUN_001a3bb8(long param_1,uint *param_2,uint *param_3,undefined1 *param_4)

{
  int iVar1;
  int iVar2;
  undefined1 *puVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined1 uVar8;
  undefined1 uVar9;
  undefined1 uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  char cVar16;
  int iVar17;
  undefined8 *puVar18;
  uint uVar19;
  uint uVar20;
  undefined8 *puVar21;
  long lVar22;
  long lVar23;
  uint uVar24;
  int iVar25;
  int iVar26;
  uint uVar27;
  uint uVar28;
  long lVar29;
  long lVar30;
  undefined8 uVar31;
  int local_8;
  int local_4;
  
  uVar8 = *param_4;
  uVar9 = param_4[1];
  uVar10 = param_4[2];
  if (*(int *)(param_1 + 4) < 1) {
    uVar20 = 0;
  }
  else {
    uVar20 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  lVar29 = *(long *)(param_1 + 0x10);
  lVar30 = *(long *)(param_1 + 0x50);
  iVar4 = **(int **)(param_1 + 0x40);
  iVar5 = (*(int **)(param_1 + 0x40))[1];
  local_4 = iVar4 << 0x10;
  local_8 = iVar5 << 0x10;
  cVar16 = cv::clipLine(&local_8,param_2,param_3);
  if (cVar16 == '\0') {
    return;
  }
  uVar6 = *param_3;
  uVar27 = *param_2;
  uVar28 = param_3[1];
  uVar7 = param_2[1];
  uVar12 = uVar6 - uVar27;
  uVar14 = (int)uVar12 >> 0x1f;
  uVar13 = uVar28 - uVar7;
  uVar15 = (int)uVar13 >> 0x1f;
  uVar19 = (uVar14 ^ uVar12) + -uVar14;
  uVar24 = (uVar15 ^ uVar13) + -uVar15;
  if ((int)uVar24 < (int)uVar19) {
    uVar27 = uVar14 & uVar6 ^ uVar27;
    uVar7 = uVar14 & uVar28 ^ uVar7;
    uVar6 = uVar27 & uVar14 ^ uVar6;
    uVar28 = uVar7 & uVar14 ^ uVar28;
    uVar27 = uVar6 & uVar14 ^ uVar27;
    uVar12 = (uVar14 ^ uVar13) + -uVar14;
    iVar17 = uVar6 - uVar27;
    *param_3 = uVar6;
    param_3[1] = uVar28;
    *param_2 = uVar27 + 0x8000;
    param_2[1] = (uVar28 & uVar14 ^ uVar7) + 0x8000;
    iVar26 = 0;
    if ((long)(int)(uVar19 | 1) != 0) {
      iVar26 = (int)((long)(-(ulong)(uVar12 >> 0x1f) & 0xffff000000000000 | (ulong)uVar12 << 0x10) /
                    (long)(int)(uVar19 | 1));
    }
    iVar25 = 0x10000;
  }
  else {
    uVar7 = uVar15 & uVar28 ^ uVar7;
    uVar12 = (uVar15 ^ uVar12) + -uVar15;
    uVar28 = uVar7 & uVar15 ^ uVar28;
    uVar27 = uVar15 & uVar6 ^ uVar27;
    uVar7 = uVar28 & uVar15 ^ uVar7;
    uVar6 = uVar27 & uVar15 ^ uVar6;
    iVar17 = uVar28 - uVar7;
    param_3[1] = uVar28;
    *param_3 = uVar6;
    *param_2 = (uVar6 & uVar15 ^ uVar27) + 0x8000;
    param_2[1] = uVar7 + 0x8000;
    iVar25 = 0;
    if ((long)(int)(uVar24 | 1) != 0) {
      iVar25 = (int)((long)(-(ulong)(uVar12 >> 0x1f) & 0xffff000000000000 | (ulong)uVar12 << 0x10) /
                    (long)(int)(uVar24 | 1));
    }
    iVar26 = 0x10000;
  }
  iVar17 = iVar17 >> 0x10;
  uVar27 = (int)(uVar6 + 0x8000) >> 0x10;
  uVar7 = (int)(uVar28 + 0x8000) >> 0x10;
  if (uVar20 == 3) {
    if ((((uint)((int)uVar27 < iVar5) & ~uVar27 >> 0x1f & ~uVar7 >> 0x1f) != 0) &&
       ((int)uVar7 < iVar4)) {
      lVar22 = (int)uVar7 * lVar30 + (long)(int)(uVar27 * 3);
      lVar23 = lVar29 + lVar22;
      *(undefined1 *)(lVar29 + lVar22) = uVar8;
      *(undefined1 *)(lVar23 + 1) = uVar9;
      *(undefined1 *)(lVar23 + 2) = uVar10;
    }
    if ((int)uVar24 < (int)uVar19) {
      uVar20 = (uint)*(short *)((long)param_2 + 2);
      *param_2 = (int)*(short *)((long)param_2 + 2);
      if (iVar17 < 0) {
        return;
      }
      uVar19 = param_2[1];
      do {
        uVar24 = (int)uVar19 >> 0x10;
        iVar17 = iVar17 + -1;
        lVar23 = (long)(int)(uVar20 * 3) + (int)uVar24 * lVar30;
        lVar22 = lVar29 + lVar23;
        if ((((uint)((int)uVar20 < iVar5) & ~uVar20 >> 0x1f & ~uVar24 >> 0x1f) != 0) &&
           ((int)uVar24 < iVar4)) {
          *(undefined1 *)(lVar29 + lVar23) = uVar8;
          *(undefined1 *)(lVar22 + 1) = uVar9;
          *(undefined1 *)(lVar22 + 2) = uVar10;
          uVar20 = *param_2;
          uVar19 = param_2[1];
        }
        uVar20 = uVar20 + 1;
        uVar19 = uVar19 + iVar26;
        *param_2 = uVar20;
        param_2[1] = uVar19;
      } while (iVar17 != -1);
      return;
    }
    uVar20 = (uint)*(short *)((long)param_2 + 6);
    param_2[1] = (int)*(short *)((long)param_2 + 6);
    if (iVar17 < 0) {
      return;
    }
    uVar19 = *param_2;
    do {
      iVar26 = (int)uVar19 >> 0x10;
      lVar22 = (int)uVar20 * lVar30 + (long)(iVar26 * 3);
      iVar17 = iVar17 + -1;
      lVar23 = lVar29 + lVar22;
      if ((((uint)(iVar26 < iVar5) & (uint)((int)uVar20 < iVar4) & ~uVar20 >> 0x1f) != 0) &&
         (-1 < iVar26)) {
        *(undefined1 *)(lVar29 + lVar22) = uVar8;
        *(undefined1 *)(lVar23 + 1) = uVar9;
        *(undefined1 *)(lVar23 + 2) = uVar10;
        uVar19 = *param_2;
        uVar20 = param_2[1];
      }
      uVar19 = uVar19 + iVar25;
      uVar20 = uVar20 + 1;
      *param_2 = uVar19;
      param_2[1] = uVar20;
    } while (iVar17 != -1);
    return;
  }
  if (uVar20 == 1) {
    if ((((uint)((int)uVar27 < iVar5) & ~uVar27 >> 0x1f & ~uVar7 >> 0x1f) != 0) &&
       ((int)uVar7 < iVar4)) {
      *(undefined1 *)(lVar29 + (int)uVar7 * lVar30 + (long)(int)uVar27) = uVar8;
    }
    if ((int)uVar24 < (int)uVar19) {
      uVar20 = (uint)*(short *)((long)param_2 + 2);
      *param_2 = (int)*(short *)((long)param_2 + 2);
      if (iVar17 < 0) {
        return;
      }
      uVar19 = param_2[1];
      do {
        uVar24 = (int)uVar19 >> 0x10;
        iVar17 = iVar17 + -1;
        if ((((uint)((int)uVar20 < iVar5) & ~uVar20 >> 0x1f & ~uVar24 >> 0x1f) != 0) &&
           ((int)uVar24 < iVar4)) {
          *(undefined1 *)(lVar29 + (int)uVar24 * lVar30 + (long)(int)uVar20) = uVar8;
          uVar20 = *param_2;
          uVar19 = param_2[1];
        }
        uVar20 = uVar20 + 1;
        uVar19 = uVar19 + iVar26;
        *param_2 = uVar20;
        param_2[1] = uVar19;
      } while (iVar17 != -1);
      return;
    }
    uVar20 = (uint)*(short *)((long)param_2 + 6);
    param_2[1] = (int)*(short *)((long)param_2 + 6);
    if (iVar17 < 0) {
      return;
    }
    uVar19 = *param_2;
    do {
      iVar26 = (int)uVar19 >> 0x10;
      iVar17 = iVar17 + -1;
      if ((((uint)(iVar26 < iVar5) & (uint)((int)uVar20 < iVar4) & ~uVar20 >> 0x1f) != 0) &&
         (-1 < iVar26)) {
        *(undefined1 *)(lVar29 + iVar26 + (int)uVar20 * lVar30) = uVar8;
        uVar19 = *param_2;
        uVar20 = param_2[1];
      }
      uVar19 = uVar19 + iVar25;
      uVar20 = uVar20 + 1;
      *param_2 = uVar19;
      param_2[1] = uVar20;
    } while (iVar17 != -1);
    return;
  }
  iVar2 = (int)param_4;
  if (((((uint)((int)uVar27 < iVar5) & ~uVar27 >> 0x1f & ~uVar7 >> 0x1f) != 0) &&
      ((int)uVar7 < iVar4)) &&
     (lVar22 = (int)uVar7 * lVar30 + (long)(int)(uVar27 * uVar20), 0 < (int)uVar20)) {
    puVar3 = (undefined1 *)(lVar29 + lVar22);
    if ((param_4 < (undefined1 *)(lVar29 + lVar22 + 0x10) && puVar3 < param_4 + 0x10) ||
       (uVar20 < 0x16)) {
      lVar22 = 0;
      do {
        puVar3[lVar22] = param_4[lVar22];
        lVar22 = lVar22 + 1;
      } while ((int)lVar22 < (int)uVar20);
    }
    else {
      uVar7 = -iVar2 & 0xfU;
      if (uVar20 < (-iVar2 & 0xfU)) {
        uVar7 = uVar20;
      }
      uVar27 = uVar7;
      if ((uVar7 != 0) && (*(undefined1 *)(lVar29 + lVar22) = *param_4, uVar7 != 1)) {
        puVar3[1] = param_4[1];
        if (uVar7 == 2) {
          uVar27 = 2;
        }
        else {
          puVar3[2] = param_4[2];
          if (((((uVar7 != 3) && (puVar3[3] = param_4[3], uVar7 != 4)) &&
               (puVar3[4] = param_4[4], uVar7 != 5)) &&
              (((puVar3[5] = param_4[5], uVar7 != 6 && (puVar3[6] = param_4[6], uVar7 != 7)) &&
               ((puVar3[7] = param_4[7], uVar7 != 8 &&
                ((puVar3[8] = param_4[8], uVar7 != 9 && (puVar3[9] = param_4[9], uVar7 != 10))))))))
             && (puVar3[10] = param_4[10], uVar7 != 0xb)) {
            puVar3[0xb] = param_4[0xb];
            if (uVar7 == 0xc) {
              uVar27 = 0xc;
            }
            else {
              puVar3[0xc] = param_4[0xc];
              if (uVar7 != 0xd) {
                puVar3[0xd] = param_4[0xd];
                if (uVar7 == 0xf) {
                  puVar3[0xe] = param_4[0xe];
                }
                else {
                  uVar27 = 0xe;
                }
              }
            }
          }
        }
      }
      uVar6 = ((uVar20 - uVar7) - 0x10 >> 4) + 1;
      iVar11 = uVar6 * 0x10;
      if (0xe < (uVar20 - 1) - uVar7) {
        uVar28 = 0;
        puVar18 = (undefined8 *)(param_4 + uVar7);
        puVar21 = (undefined8 *)(lVar29 + lVar22 + (ulong)uVar7);
        do {
          uVar31 = *puVar18;
          uVar28 = uVar28 + 1;
          puVar21[1] = puVar18[1];
          *puVar21 = uVar31;
          puVar18 = puVar18 + 2;
          puVar21 = puVar21 + 2;
        } while (uVar28 < uVar6);
        uVar27 = uVar27 + iVar11;
        if (iVar11 == uVar20 - uVar7) goto LAB_001a4038;
      }
      iVar11 = uVar27 + 1;
      puVar3[(int)uVar27] = param_4[(int)uVar27];
      if (iVar11 < (int)uVar20) {
        iVar1 = uVar27 + 2;
        puVar3[iVar11] = param_4[iVar11];
        if (iVar1 < (int)uVar20) {
          iVar11 = uVar27 + 3;
          puVar3[iVar1] = param_4[iVar1];
          if (iVar11 < (int)uVar20) {
            iVar1 = uVar27 + 4;
            puVar3[iVar11] = param_4[iVar11];
            if (iVar1 < (int)uVar20) {
              iVar11 = uVar27 + 5;
              puVar3[iVar1] = param_4[iVar1];
              if (iVar11 < (int)uVar20) {
                iVar1 = uVar27 + 6;
                puVar3[iVar11] = param_4[iVar11];
                if (iVar1 < (int)uVar20) {
                  iVar11 = uVar27 + 7;
                  puVar3[iVar1] = param_4[iVar1];
                  if (iVar11 < (int)uVar20) {
                    iVar1 = uVar27 + 8;
                    puVar3[iVar11] = param_4[iVar11];
                    if (iVar1 < (int)uVar20) {
                      iVar11 = uVar27 + 9;
                      puVar3[iVar1] = param_4[iVar1];
                      if (iVar11 < (int)uVar20) {
                        iVar1 = uVar27 + 10;
                        puVar3[iVar11] = param_4[iVar11];
                        if (iVar1 < (int)uVar20) {
                          iVar11 = uVar27 + 0xb;
                          puVar3[iVar1] = param_4[iVar1];
                          if (iVar11 < (int)uVar20) {
                            iVar1 = uVar27 + 0xc;
                            puVar3[iVar11] = param_4[iVar11];
                            if (iVar1 < (int)uVar20) {
                              iVar11 = uVar27 + 0xd;
                              puVar3[iVar1] = param_4[iVar1];
                              if (iVar11 < (int)uVar20) {
                                iVar1 = uVar27 + 0xe;
                                puVar3[iVar11] = param_4[iVar11];
                                if (iVar1 < (int)uVar20) {
                                  puVar3[iVar1] = param_4[iVar1];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_001a4038:
  if ((int)uVar24 < (int)uVar19) {
    uVar19 = (uint)*(short *)((long)param_2 + 2);
    *param_2 = (int)*(short *)((long)param_2 + 2);
    if (-1 < iVar17) {
      uVar24 = param_2[1];
      uVar7 = uVar20;
      if ((-iVar2 & 0xfU) < uVar20) {
        uVar7 = -iVar2 & 0xfU;
      }
      uVar27 = ((uVar20 - uVar7) - 0x10 >> 4) + 1;
      iVar25 = uVar27 * 0x10;
      do {
        uVar6 = (int)uVar24 >> 0x10;
        if ((((uint)((int)uVar19 < iVar5) & ~uVar19 >> 0x1f & ~uVar6 >> 0x1f) != 0) &&
           ((int)uVar6 < iVar4)) {
          lVar22 = (int)uVar6 * lVar30 + (long)(int)(uVar20 * uVar19);
          if (0 < (int)uVar20) {
            puVar3 = (undefined1 *)(lVar29 + lVar22);
            if ((param_4 < (undefined1 *)
                           (lVar29 + (long)(int)(uVar20 * uVar19) + 0x10 + (int)uVar6 * lVar30) &&
                 puVar3 < param_4 + 0x10) || (uVar20 < 0x16)) {
              lVar22 = 0;
              do {
                puVar3[lVar22] = param_4[lVar22];
                lVar22 = lVar22 + 1;
              } while ((int)lVar22 < (int)uVar20);
            }
            else {
              uVar19 = uVar7;
              if ((((uVar7 != 0) && (*(undefined1 *)(lVar29 + lVar22) = *param_4, uVar7 != 1)) &&
                  (puVar3[1] = param_4[1], uVar7 != 2)) && (puVar3[2] = param_4[2], uVar7 != 3)) {
                puVar3[3] = param_4[3];
                if (uVar7 == 4) {
                  uVar19 = 4;
                }
                else {
                  puVar3[4] = param_4[4];
                  if ((((uVar7 != 5) && (puVar3[5] = param_4[5], uVar7 != 6)) &&
                      ((puVar3[6] = param_4[6], uVar7 != 7 &&
                       ((puVar3[7] = param_4[7], uVar7 != 8 && (puVar3[8] = param_4[8], uVar7 != 9))
                       )))) && ((puVar3[9] = param_4[9], uVar7 != 10 &&
                                (((puVar3[10] = param_4[10], uVar7 != 0xb &&
                                  (puVar3[0xb] = param_4[0xb], uVar7 != 0xc)) &&
                                 (puVar3[0xc] = param_4[0xc], uVar7 != 0xd)))))) {
                    puVar3[0xd] = param_4[0xd];
                    if (uVar7 == 0xf) {
                      puVar3[0xe] = param_4[0xe];
                      uVar19 = 0xf;
                    }
                    else {
                      uVar19 = 0xe;
                    }
                  }
                }
              }
              if (0xe < (uVar20 - 1) - uVar7) {
                uVar24 = 0;
                puVar18 = (undefined8 *)(lVar29 + lVar22 + (ulong)uVar7);
                puVar21 = (undefined8 *)(param_4 + uVar7);
                do {
                  uVar31 = *puVar21;
                  uVar24 = uVar24 + 1;
                  puVar18[1] = puVar21[1];
                  *puVar18 = uVar31;
                  puVar18 = puVar18 + 2;
                  puVar21 = puVar21 + 2;
                } while (uVar24 < uVar27);
                uVar19 = uVar19 + iVar25;
                if (iVar25 == uVar20 - uVar7) goto LAB_001a4384;
              }
              iVar2 = uVar19 + 1;
              puVar3[(int)uVar19] = param_4[(int)uVar19];
              if (iVar2 < (int)uVar20) {
                iVar11 = uVar19 + 2;
                puVar3[iVar2] = param_4[iVar2];
                if (iVar11 < (int)uVar20) {
                  iVar2 = uVar19 + 3;
                  *(undefined1 *)(lVar29 + iVar11 + lVar22) = param_4[iVar11];
                  if (iVar2 < (int)uVar20) {
                    iVar11 = uVar19 + 4;
                    *(undefined1 *)(lVar29 + iVar2 + lVar22) = param_4[iVar2];
                    if (iVar11 < (int)uVar20) {
                      iVar2 = uVar19 + 5;
                      puVar3[iVar11] = param_4[iVar11];
                      if (iVar2 < (int)uVar20) {
                        iVar11 = uVar19 + 6;
                        puVar3[iVar2] = param_4[iVar2];
                        if (iVar11 < (int)uVar20) {
                          iVar2 = uVar19 + 7;
                          puVar3[iVar11] = param_4[iVar11];
                          if (iVar2 < (int)uVar20) {
                            iVar11 = uVar19 + 8;
                            puVar3[iVar2] = param_4[iVar2];
                            if (iVar11 < (int)uVar20) {
                              iVar2 = uVar19 + 9;
                              puVar3[iVar11] = param_4[iVar11];
                              if (iVar2 < (int)uVar20) {
                                iVar11 = uVar19 + 10;
                                puVar3[iVar2] = param_4[iVar2];
                                if (iVar11 < (int)uVar20) {
                                  iVar2 = uVar19 + 0xb;
                                  puVar3[iVar11] = param_4[iVar11];
                                  if (iVar2 < (int)uVar20) {
                                    iVar11 = uVar19 + 0xc;
                                    puVar3[iVar2] = param_4[iVar2];
                                    if (iVar11 < (int)uVar20) {
                                      iVar2 = uVar19 + 0xd;
                                      puVar3[iVar11] = param_4[iVar11];
                                      if (iVar2 < (int)uVar20) {
                                        iVar11 = uVar19 + 0xe;
                                        puVar3[iVar2] = param_4[iVar2];
                                        if (iVar11 < (int)uVar20) {
                                          puVar3[iVar11] = param_4[iVar11];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
LAB_001a4384:
            uVar19 = *param_2;
            uVar24 = param_2[1];
          }
        }
        iVar17 = iVar17 + -1;
        uVar19 = uVar19 + 1;
        uVar24 = uVar24 + iVar26;
        *param_2 = uVar19;
        param_2[1] = uVar24;
      } while (iVar17 != -1);
    }
  }
  else {
    uVar19 = (uint)*(short *)((long)param_2 + 6);
    param_2[1] = (int)*(short *)((long)param_2 + 6);
    if (-1 < iVar17) {
      uVar24 = *param_2;
      uVar7 = uVar20;
      if ((-iVar2 & 0xfU) < uVar20) {
        uVar7 = -iVar2 & 0xfU;
      }
      uVar27 = ((uVar20 - uVar7) - 0x10 >> 4) + 1;
      iVar26 = uVar27 * 0x10;
      do {
        iVar2 = (int)uVar24 >> 0x10;
        if ((((uint)(iVar2 < iVar5) & (uint)((int)uVar19 < iVar4) & ~uVar19 >> 0x1f) != 0) &&
           (-1 < iVar2)) {
          lVar22 = (long)(int)(iVar2 * uVar20) + (int)uVar19 * lVar30;
          if (0 < (int)uVar20) {
            puVar3 = (undefined1 *)(lVar29 + lVar22);
            if ((param_4 < (undefined1 *)
                           (lVar29 + (int)uVar19 * lVar30 + 0x10 + (long)(int)(iVar2 * uVar20)) &&
                 puVar3 < param_4 + 0x10) || (uVar20 < 0x16)) {
              lVar22 = 0;
              do {
                puVar3[lVar22] = param_4[lVar22];
                lVar22 = lVar22 + 1;
              } while ((int)lVar22 < (int)uVar20);
            }
            else {
              uVar19 = uVar7;
              if ((((uVar7 != 0) && (*(undefined1 *)(lVar29 + lVar22) = *param_4, uVar7 != 1)) &&
                  (puVar3[1] = param_4[1], uVar7 != 2)) && (puVar3[2] = param_4[2], uVar7 != 3)) {
                puVar3[3] = param_4[3];
                if (uVar7 == 4) {
                  uVar19 = 4;
                }
                else {
                  puVar3[4] = param_4[4];
                  if (((((uVar7 != 5) && (puVar3[5] = param_4[5], uVar7 != 6)) &&
                       ((puVar3[6] = param_4[6], uVar7 != 7 &&
                        ((puVar3[7] = param_4[7], uVar7 != 8 && (puVar3[8] = param_4[8], uVar7 != 9)
                         ))))) && (puVar3[9] = param_4[9], uVar7 != 10)) &&
                     (((puVar3[10] = param_4[10], uVar7 != 0xb &&
                       (puVar3[0xb] = param_4[0xb], uVar7 != 0xc)) &&
                      (puVar3[0xc] = param_4[0xc], uVar7 != 0xd)))) {
                    puVar3[0xd] = param_4[0xd];
                    if (uVar7 == 0xf) {
                      puVar3[0xe] = param_4[0xe];
                      uVar19 = 0xf;
                    }
                    else {
                      uVar19 = 0xe;
                    }
                  }
                }
              }
              if (0xe < (uVar20 - 1) - uVar7) {
                uVar24 = 0;
                puVar18 = (undefined8 *)(param_4 + uVar7);
                puVar21 = (undefined8 *)(lVar29 + lVar22 + (ulong)uVar7);
                do {
                  uVar31 = *puVar18;
                  uVar24 = uVar24 + 1;
                  puVar21[1] = puVar18[1];
                  *puVar21 = uVar31;
                  puVar18 = puVar18 + 2;
                  puVar21 = puVar21 + 2;
                } while (uVar24 < uVar27);
                uVar19 = uVar19 + iVar26;
                if (iVar26 == uVar20 - uVar7) goto LAB_001a485c;
              }
              iVar2 = uVar19 + 1;
              puVar3[(int)uVar19] = param_4[(int)uVar19];
              if (iVar2 < (int)uVar20) {
                iVar11 = uVar19 + 2;
                puVar3[iVar2] = param_4[iVar2];
                if (iVar11 < (int)uVar20) {
                  iVar2 = uVar19 + 3;
                  puVar3[iVar11] = param_4[iVar11];
                  if (iVar2 < (int)uVar20) {
                    iVar11 = uVar19 + 4;
                    puVar3[iVar2] = param_4[iVar2];
                    if (iVar11 < (int)uVar20) {
                      iVar2 = uVar19 + 5;
                      puVar3[iVar11] = param_4[iVar11];
                      if (iVar2 < (int)uVar20) {
                        iVar11 = uVar19 + 6;
                        puVar3[iVar2] = param_4[iVar2];
                        if (iVar11 < (int)uVar20) {
                          iVar2 = uVar19 + 7;
                          puVar3[iVar11] = param_4[iVar11];
                          if (iVar2 < (int)uVar20) {
                            iVar11 = uVar19 + 8;
                            puVar3[iVar2] = param_4[iVar2];
                            if (iVar11 < (int)uVar20) {
                              iVar2 = uVar19 + 9;
                              puVar3[iVar11] = param_4[iVar11];
                              if (iVar2 < (int)uVar20) {
                                iVar11 = uVar19 + 10;
                                puVar3[iVar2] = param_4[iVar2];
                                if (iVar11 < (int)uVar20) {
                                  iVar2 = uVar19 + 0xb;
                                  puVar3[iVar11] = param_4[iVar11];
                                  if (iVar2 < (int)uVar20) {
                                    iVar11 = uVar19 + 0xc;
                                    puVar3[iVar2] = param_4[iVar2];
                                    if (iVar11 < (int)uVar20) {
                                      iVar2 = uVar19 + 0xd;
                                      puVar3[iVar11] = param_4[iVar11];
                                      if (iVar2 < (int)uVar20) {
                                        iVar11 = uVar19 + 0xe;
                                        puVar3[iVar2] = param_4[iVar2];
                                        if (iVar11 < (int)uVar20) {
                                          puVar3[iVar11] = param_4[iVar11];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
LAB_001a485c:
            uVar24 = *param_2;
            uVar19 = param_2[1];
          }
        }
        iVar17 = iVar17 + -1;
        uVar24 = uVar24 + iVar25;
        uVar19 = uVar19 + 1;
        *param_2 = uVar24;
        param_2[1] = uVar19;
        if (iVar17 == -1) {
          return;
        }
      } while( true );
    }
  }
  return;
}


==================================================================

### FUNC 001a4ae0 (176 bytes) name=clipLine

/* cv::clipLine(cv::Rect_<int>, cv::Point_<int>&, cv::Point_<int>&) */

void cv::clipLine(int *param_1,int *param_2,int *param_3)

{
  int iVar1;
  int iVar2;
  int local_8;
  int local_4;
  
  iVar1 = *param_1;
  iVar2 = param_1[1];
  *param_2 = *param_2 - iVar1;
  param_2[1] = param_2[1] - iVar2;
  *param_3 = *param_3 - iVar1;
  param_3[1] = param_3[1] - iVar2;
  local_4 = param_1[3];
  local_8 = param_1[2];
  clipLine(&local_8);
  *param_2 = *param_2 + iVar1;
  param_2[1] = param_2[1] + iVar2;
  *param_3 = *param_3 + iVar1;
  param_3[1] = param_3[1] + iVar2;
  return;
}


==================================================================

### FUNC 001a4b90 (744 bytes) name=LineIterator

/* cv::LineIterator::LineIterator(cv::Mat const&, cv::Point_<int>, cv::Point_<int>, int, bool) */

void __thiscall
cv::LineIterator::LineIterator
          (LineIterator *this,long param_1,uint *param_3,uint *param_4,int param_5,char param_6)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  uint uVar8;
  char *pcVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  long lVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  *(undefined4 *)(this + 0x1c) = 0xffffffff;
  if ((param_5 - 4U & 0xfffffffb) != 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_10,0x26);
    uVar6 = s_connectivity____8____connectivit_0043f450._36_2_;
    uVar5 = s_connectivity____8____connectivit_0043f450._24_8_;
    uVar4 = s_connectivity____8____connectivit_0043f450._16_8_;
    uVar3 = s_connectivity____8____connectivit_0043f450._8_8_;
    uVar2 = s_connectivity____8____connectivit_0043f450._0_8_;
    *(undefined4 *)(pcVar9 + 0x20) = s_connectivity____8____connectivit_0043f450._32_4_;
    *(undefined2 *)(pcVar9 + 0x24) = uVar6;
    *(undefined8 *)pcVar9 = uVar2;
    *(undefined8 *)(pcVar9 + 8) = uVar3;
    *(undefined8 *)(pcVar9 + 0x10) = uVar4;
    *(undefined8 *)(pcVar9 + 0x18) = uVar5;
    error(-0xd7,(String *)&local_10,
          "cv::LineIterator::LineIterator(const cv::Mat&, cv::Point, cv::Point, int, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x9e);
    String::deallocate((String *)&local_10);
  }
  uVar14 = *param_3;
  if ((uVar14 < *(uint *)(param_1 + 0xc)) && (uVar10 = *param_4, uVar10 < *(uint *)(param_1 + 0xc)))
  {
    uVar12 = param_3[1];
    if ((uVar12 < *(uint *)(param_1 + 8)) && (uVar15 = param_4[1], uVar15 < *(uint *)(param_1 + 8)))
    goto LAB_001a4c28;
  }
  local_10 = CONCAT44(**(undefined4 **)(param_1 + 0x40),(*(undefined4 **)(param_1 + 0x40))[1]);
  cVar7 = clipLine(&local_10,param_3,param_4);
  if (cVar7 == '\0') {
    *(undefined8 *)this = *(undefined8 *)(param_1 + 0x10);
    *(undefined4 *)(this + 0x1c) = 0;
    *(undefined4 *)(this + 0x28) = 0;
    *(undefined4 *)(this + 0x2c) = 0;
    *(undefined4 *)(this + 0x20) = 0;
    *(undefined4 *)(this + 0x24) = 0;
    *(undefined4 *)(this + 0x18) = 0;
    return;
  }
  uVar10 = *param_4;
  uVar14 = *param_3;
  uVar15 = param_4[1];
  uVar12 = param_3[1];
LAB_001a4c28:
  if (*(int *)(param_1 + 4) < 1) {
    uVar16 = 0;
  }
  else {
    uVar16 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  uVar8 = uVar10 - uVar14;
  lVar17 = *(long *)(param_1 + 0x50);
  uVar13 = (int)uVar8 >> 0x1f;
  iVar1 = -uVar13;
  uVar11 = uVar15 - uVar12;
  if (param_6 == '\0') {
    uVar10 = (uVar16 ^ uVar13) + iVar1;
  }
  else {
    uVar14 = uVar14 ^ uVar13 & (uVar14 ^ uVar10);
    uVar12 = uVar12 ^ uVar13 & (uVar12 ^ uVar15);
    uVar11 = (uVar13 ^ uVar11) + iVar1;
    *param_3 = uVar14;
    param_3[1] = uVar12;
    uVar10 = uVar16;
  }
  uVar8 = (uVar13 ^ uVar8) + iVar1;
  uVar13 = (int)uVar11 >> 0x1f;
  uVar15 = (uVar13 ^ uVar11) - uVar13;
  uVar11 = (uint)lVar17;
  *(long *)this = *(long *)(param_1 + 0x10) + (int)uVar12 * lVar17 + (long)(int)(uVar16 * uVar14);
  uVar13 = (uVar13 ^ uVar11) - uVar13;
  uVar14 = -(uint)((int)uVar8 < (int)uVar15);
  uVar10 = uVar14 & uVar13 ^ uVar10;
  uVar8 = uVar14 & uVar15 ^ uVar8;
  uVar15 = uVar8 & uVar14 ^ uVar15;
  uVar13 = uVar10 & uVar14 ^ uVar13;
  uVar8 = uVar15 & uVar14 ^ uVar8;
  uVar10 = uVar14 & uVar13 ^ uVar10;
  if (param_5 == 8) {
    *(uint *)(this + 0x2c) = uVar13;
    *(uint *)(this + 0x28) = uVar10;
    *(uint *)(this + 0x1c) = uVar8 + 1;
    *(uint *)(this + 0x18) = uVar8 + uVar15 * -2;
    *(uint *)(this + 0x24) = uVar8 << 1;
    *(uint *)(this + 0x20) = uVar15 * -2;
  }
  else {
    *(undefined4 *)(this + 0x18) = 0;
    *(uint *)(this + 0x2c) = uVar13 - uVar10;
    *(uint *)(this + 0x24) = uVar15 * 2 + uVar8 * 2;
    *(uint *)(this + 0x20) = uVar15 * -2;
    *(uint *)(this + 0x28) = uVar10;
    *(uint *)(this + 0x1c) = uVar8 + uVar15 + 1;
  }
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 0x10);
  *(uint *)(this + 0x10) = uVar11;
  *(uint *)(this + 0x14) = uVar16;
  return;
}


==================================================================

### FUNC 001a4e8c (516 bytes) name=FUN_001a4e8c

void FUN_001a4e8c(long param_1,undefined8 *param_2,undefined8 *param_3,undefined1 *param_4,
                 int param_5)

{
  uint uVar1;
  int iVar2;
  size_t __n;
  undefined8 local_40;
  undefined8 local_38;
  undefined1 *local_30 [3];
  int local_18;
  int local_14;
  int local_10;
  uint local_c;
  int local_8;
  uint local_4;
  
  if (param_5 == 0) {
    param_5 = 8;
  }
  else if (param_5 == 1) {
    param_5 = 4;
  }
  local_40 = *param_2;
  local_38 = *param_3;
  cv::LineIterator::LineIterator((LineIterator *)local_30,param_1,&local_40,&local_38,param_5,1);
  if (*(int *)(param_1 + 4) < 1) {
    if (local_14 < 1) {
      return;
    }
    __n = 0;
  }
  else {
    iVar2 = (int)*(undefined8 *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
    __n = (size_t)iVar2;
    if (local_14 < 1) {
      return;
    }
    if (iVar2 == 1) {
      iVar2 = 0;
      do {
        iVar2 = iVar2 + 1;
        *local_30[0] = *param_4;
        uVar1 = local_18 >> 0x1f;
        local_18 = local_18 + (uVar1 & local_c) + local_10;
        local_30[0] = local_30[0] + (int)((uVar1 & local_4) + local_8);
      } while (iVar2 != local_14);
      return;
    }
    if (iVar2 == 3) {
      iVar2 = 0;
      do {
        iVar2 = iVar2 + 1;
        *local_30[0] = *param_4;
        local_30[0][1] = param_4[1];
        local_30[0][2] = param_4[2];
        uVar1 = local_18 >> 0x1f;
        local_18 = local_18 + (uVar1 & local_c) + local_10;
        local_30[0] = local_30[0] + (int)((uVar1 & local_4) + local_8);
      } while (iVar2 != local_14);
      return;
    }
  }
  iVar2 = 0;
  do {
    iVar2 = iVar2 + 1;
    memcpy(local_30[0],param_4,__n);
    uVar1 = local_18 >> 0x1f;
    local_18 = local_18 + (uVar1 & local_c) + local_10;
    local_30[0] = local_30[0] + (int)((uVar1 & local_4) + local_8);
  } while (iVar2 != local_14);
  return;
}


==================================================================

### FUNC 001a5090 (4884 bytes) name=FUN_001a5090

void FUN_001a5090(uint *param_1,uint *param_2,uint *param_3,byte *param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  byte bVar6;
  byte bVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  ulong uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  char cVar17;
  uint uVar18;
  int iVar19;
  byte *pbVar20;
  uint uVar21;
  uint uVar22;
  uint uVar23;
  long lVar24;
  int iVar25;
  uint uVar26;
  int iVar27;
  int iVar28;
  uint uVar29;
  uint uVar30;
  long lVar31;
  size_t __n;
  uint uVar32;
  uint uVar33;
  undefined8 uVar34;
  undefined8 local_40;
  undefined8 local_38;
  byte *local_30;
  int local_28;
  uint local_24;
  int local_20;
  int local_1c;
  int local_18;
  int local_14;
  uint local_10;
  uint local_c;
  int local_8;
  uint local_4;
  
  bVar6 = *param_4;
  uVar30 = *param_1 >> 3 & 0x1ff;
  iVar19 = uVar30 + 1;
  bVar7 = param_4[1];
  bVar8 = param_4[2];
  bVar9 = param_4[3];
  lVar24 = *(long *)(param_1 + 4);
  lVar31 = *(long *)(param_1 + 0x14);
  iVar27 = (*(int **)(param_1 + 0x10))[1];
  iVar28 = **(int **)(param_1 + 0x10);
  if (((uVar30 - 2 < 2) || (iVar19 == 1)) && ((*param_1 & 7) == 0)) {
    uVar34 = *(undefined8 *)param_2;
    *(ulong *)param_3 =
         CONCAT44((int)((ulong)*(undefined8 *)param_3 >> 0x20) + -0x20000,
                  (int)*(undefined8 *)param_3 + -0x20000);
    *(ulong *)param_2 = CONCAT44((int)((ulong)uVar34 >> 0x20) + -0x20000,(int)uVar34 + -0x20000);
    local_30 = (byte *)CONCAT44((iVar28 + -5) * 0x10000 + 1,(iVar27 + -5) * 0x10000 + 1);
    cVar17 = cv::clipLine(&local_30,param_2,param_3);
    if (cVar17 != '\0') {
      uVar30 = *param_3;
      uVar32 = *param_2;
      uVar23 = param_3[1];
      uVar18 = param_2[1];
      uVar21 = uVar30 - uVar32;
      uVar29 = (int)uVar21 >> 0x1f;
      uVar33 = uVar23 - uVar18;
      uVar4 = (int)uVar33 >> 0x1f;
      uVar26 = -uVar29 + (uVar29 ^ uVar21);
      uVar22 = (uVar4 ^ uVar33) + -uVar4;
      if ((int)uVar22 < (int)uVar26) {
        uVar21 = -uVar29 + (uVar29 ^ uVar33);
        uVar32 = uVar29 & uVar30 ^ uVar32;
        uVar12 = 0;
        if ((long)(int)(uVar26 | 1) != 0) {
          uVar12 = (long)(-(ulong)(uVar21 >> 0x1f) & 0xffff000000000000 | (ulong)uVar21 << 0x10) /
                   (long)(int)(uVar26 | 1);
        }
        uVar30 = uVar32 & uVar29 ^ uVar30;
        uVar18 = uVar29 & uVar23 ^ uVar18;
        uVar32 = uVar30 & uVar29 ^ uVar32;
        uVar23 = uVar18 & uVar29 ^ uVar23;
        iVar28 = (int)uVar12;
        uVar21 = 0;
        if (iVar28 < 0) {
          uVar21 = 0x3f;
        }
        uVar30 = uVar30 + 0x10000;
        param_3[1] = uVar23;
        *param_2 = uVar32;
        uVar21 = uVar21 ^ (uint)(uVar12 >> 0xb) & 0x3f;
        *param_3 = uVar30;
        param_2[1] = (uVar23 & uVar29 ^ uVar18) +
                     (int)((ulong)((long)iVar28 * (long)(int)-(uVar32 & 0xffff)) >> 0x10) + 0x8000;
        uVar18 = ((int)uVar30 >> 0x10) - ((int)uVar32 >> 0x10);
        iVar27 = 0x10000;
      }
      else {
        uVar21 = (uVar4 ^ uVar21) + -uVar4;
        uVar18 = uVar4 & uVar23 ^ uVar18;
        uVar12 = 0;
        if ((long)(int)(uVar22 | 1) != 0) {
          uVar12 = (long)(-(ulong)(uVar21 >> 0x1f) & 0xffff000000000000 | (ulong)uVar21 << 0x10) /
                   (long)(int)(uVar22 | 1);
        }
        uVar23 = uVar18 & uVar4 ^ uVar23;
        uVar33 = uVar4 & uVar30 ^ uVar32;
        iVar27 = (int)uVar12;
        uVar32 = uVar23 & uVar4 ^ uVar18;
        uVar18 = uVar33 & uVar4 ^ uVar30;
        uVar21 = 0;
        if (iVar27 < 0) {
          uVar21 = 0x3f;
        }
        uVar30 = uVar23 + 0x10000;
        *param_3 = uVar18;
        param_3[1] = uVar30;
        uVar21 = uVar21 ^ (uint)(uVar12 >> 0xb) & 0x3f;
        param_2[1] = uVar32;
        *param_2 = (uVar18 & uVar4 ^ uVar33) +
                   (int)((ulong)((long)iVar27 * (long)(int)-(uVar32 & 0xffff)) >> 0x10) + 0x8000;
        uVar18 = ((int)uVar30 >> 0x10) - ((int)uVar32 >> 0x10);
        iVar28 = 0x10000;
      }
      uVar23 = (int)uVar30 >> 9 & 0x78;
      uVar30 = (int)uVar32 >> 9 & 0x78;
      if (uVar21 >> 5 == 0) {
        local_10 = (uint)(byte)(&DAT_0043ffa0)[(int)uVar21];
        iVar25 = (uint)(byte)(&DAT_0043ffa0)[(int)uVar21] << 7;
      }
      else {
        iVar25 = 0x8000;
        local_10 = 0x100;
      }
      uVar32 = uVar23 - uVar30;
      iVar10 = local_10 * (0x78 - uVar30 | 4);
      iVar11 = local_10 * (uVar23 | 4);
      local_24 = (int)(local_10 * (uVar32 & 0x78 | 4)) >> 8;
      local_28 = iVar10 >> 8;
      local_30 = (byte *)((ulong)local_24 << 0x20);
      local_20 = (int)(local_10 * (uVar32 + 0x80 | 4)) >> 8;
      lVar24 = lVar24 + lVar31 * 2 + (long)(iVar19 * 2);
      local_1c = iVar10 + iVar25 >> 8;
      local_18 = iVar11 >> 8;
      local_14 = iVar11 + iVar25 >> 8;
      uVar30 = (uint)bVar6;
      uVar23 = (uint)bVar7;
      uVar32 = (uint)bVar8;
      if (iVar19 == 3) {
        if ((int)uVar22 < (int)uVar26) {
          lVar24 = lVar24 + *(short *)((long)param_2 + 2) * 3;
          if (-1 < (int)uVar18) {
            uVar22 = param_2[1];
            uVar26 = 0;
            uVar21 = 1;
            pbVar20 = (byte *)(lVar24 + lVar31 * (((int)uVar22 >> 0x10) + -1));
            while( true ) {
              uVar33 = uVar21 & (uVar26 | 2);
              uVar21 = 2;
              uVar29 = uVar21;
              if ((int)uVar18 < 2) {
                uVar29 = 1;
              }
              uVar22 = uVar22 >> 0xb & 0x1f;
              iVar19 = *(int *)((long)&local_30 +
                               (long)(int)(uVar33 * 3 + (uVar29 & (uVar18 | 2))) * 4);
              lVar16 = lVar31 * 2;
              iVar27 = *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar22) * 4);
              uVar4 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar22 + 0x20) * 4)) >> 8
                      & 0xff;
              uVar18 = uVar18 - 1;
              uVar5 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)uVar22 * 4)) >> 8 & 0xff;
              uVar22 = (uint)pbVar20[1] + ((int)((uVar23 - pbVar20[1]) * uVar4 + 0x7f) >> 8);
              uVar33 = (uint)*pbVar20 + ((int)((uVar30 - *pbVar20) * uVar4 + 0x7f) >> 8);
              uVar29 = (uint)pbVar20[2] + ((int)((uVar32 - pbVar20[2]) * uVar4 + 0x7f) >> 8);
              lVar24 = lVar24 + 3;
              pbVar20[1] = (char)uVar22 + (char)((uVar23 - (uVar22 & 0xff)) * uVar4 + 0x7f >> 8);
              *pbVar20 = (char)uVar33 + (char)((uVar30 - (uVar33 & 0xff)) * uVar4 + 0x7f >> 8);
              uVar26 = uVar26 + 1;
              pbVar20[2] = (char)uVar29 + (char)((uVar32 - (uVar29 & 0xff)) * uVar4 + 0x7f >> 8);
              uVar4 = (uint)(iVar19 * iVar27) >> 8 & 0xff;
              uVar22 = (uint)pbVar20[lVar31] +
                       ((int)((uVar30 - pbVar20[lVar31]) * uVar5 + 0x7f) >> 8);
              uVar33 = (uint)pbVar20[lVar31 + 1] +
                       ((int)((uVar23 - pbVar20[lVar31 + 1]) * uVar5 + 0x7f) >> 8);
              uVar29 = (uint)pbVar20[lVar31 + 2] +
                       ((int)((uVar32 - pbVar20[lVar31 + 2]) * uVar5 + 0x7f) >> 8);
              pbVar20[lVar31] =
                   (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar5 + 0x7f >> 8);
              pbVar20[lVar31 + 1] =
                   (char)uVar33 + (char)((uVar23 - (uVar33 & 0xff)) * uVar5 + 0x7f >> 8);
              pbVar20[lVar31 + 2] =
                   (char)uVar29 + (char)((uVar32 - (uVar29 & 0xff)) * uVar5 + 0x7f >> 8);
              uVar22 = (uint)pbVar20[lVar31 * 2] +
                       ((int)((uVar30 - pbVar20[lVar31 * 2]) * uVar4 + 0x7f) >> 8);
              uVar33 = (uint)pbVar20[lVar16 + 1] +
                       ((int)((uVar23 - pbVar20[lVar16 + 1]) * uVar4 + 0x7f) >> 8);
              uVar29 = (uint)pbVar20[lVar16 + 2] +
                       ((int)((uVar32 - pbVar20[lVar16 + 2]) * uVar4 + 0x7f) >> 8);
              pbVar20[lVar31 * 2] =
                   (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar4 + 0x7f >> 8);
              pbVar20[lVar16 + 2] =
                   (char)uVar29 + (char)((uVar32 - (uVar29 & 0xff)) * uVar4 + 0x7f >> 8);
              pbVar20[lVar16 + 1] =
                   (char)uVar33 + (char)((uVar23 - (uVar33 & 0xff)) * uVar4 + 0x7f >> 8);
              uVar22 = iVar28 + param_2[1];
              param_2[1] = uVar22;
              if (uVar18 == 0xffffffff) break;
              if (uVar26 == 1) {
                uVar21 = 1;
              }
              pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * lVar31);
            }
          }
        }
        else {
          lVar24 = lVar24 + lVar31 * *(short *)((long)param_2 + 6);
          if (-1 < (int)uVar18) {
            uVar22 = *param_2;
            uVar26 = 0;
            uVar21 = 1;
            pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * 3);
            while( true ) {
              uVar33 = uVar26 | 2;
              uVar29 = uVar22 >> 0xb & 0x1f;
              uVar22 = 2;
              lVar24 = lVar24 + lVar31;
              uVar26 = uVar26 + 1;
              if ((int)uVar18 < 2) {
                uVar22 = 1;
              }
              uVar4 = uVar18 | 2;
              uVar18 = uVar18 - 1;
              iVar19 = *(int *)((long)&local_30 +
                               (long)(int)((uVar21 & uVar33) * 3 + (uVar22 & uVar4)) * 4);
              uVar13 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar29 + 0x20) * 4)) >>
                       8 & 0xff;
              uVar14 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)uVar29 * 4)) >> 8 & 0xff;
              uVar15 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar29) * 4)) >>
                       8 & 0xff;
              uVar22 = (uint)*pbVar20 + ((int)((uVar30 - *pbVar20) * uVar13 + 0x7f) >> 8);
              uVar21 = (uint)pbVar20[1] + ((int)((uVar23 - pbVar20[1]) * uVar13 + 0x7f) >> 8);
              uVar33 = (uint)pbVar20[2] + ((int)((uVar32 - pbVar20[2]) * uVar13 + 0x7f) >> 8);
              uVar29 = (uint)pbVar20[5] + ((int)((uVar32 - pbVar20[5]) * uVar14 + 0x7f) >> 8);
              uVar4 = (uint)pbVar20[3] + ((int)((uVar30 - pbVar20[3]) * uVar14 + 0x7f) >> 8);
              uVar5 = (uint)pbVar20[4] + ((int)((uVar23 - pbVar20[4]) * uVar14 + 0x7f) >> 8);
              uVar1 = (uint)pbVar20[6] + ((int)((uVar30 - pbVar20[6]) * uVar15 + 0x7f) >> 8);
              uVar2 = (uint)pbVar20[7] + ((int)((uVar23 - pbVar20[7]) * uVar15 + 0x7f) >> 8);
              uVar3 = (uint)pbVar20[8] + ((int)((uVar32 - pbVar20[8]) * uVar15 + 0x7f) >> 8);
              pbVar20[3] = (char)uVar4 + (char)((uVar30 - (uVar4 & 0xff)) * uVar14 + 0x7f >> 8);
              pbVar20[8] = (char)uVar3 + (char)((uVar32 - (uVar3 & 0xff)) * uVar15 + 0x7f >> 8);
              pbVar20[6] = (char)uVar1 + (char)((uVar30 - (uVar1 & 0xff)) * uVar15 + 0x7f >> 8);
              pbVar20[7] = (char)uVar2 + (char)((uVar23 - (uVar2 & 0xff)) * uVar15 + 0x7f >> 8);
              pbVar20[4] = (char)uVar5 + (char)((uVar23 - (uVar5 & 0xff)) * uVar14 + 0x7f >> 8);
              pbVar20[5] = (char)uVar29 + (char)((uVar32 - (uVar29 & 0xff)) * uVar14 + 0x7f >> 8);
              *pbVar20 = (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar13 + 0x7f >> 8);
              pbVar20[1] = (char)uVar21 + (char)((uVar23 - (uVar21 & 0xff)) * uVar13 + 0x7f >> 8);
              pbVar20[2] = (char)uVar33 + (char)((uVar32 - (uVar33 & 0xff)) * uVar13 + 0x7f >> 8);
              uVar22 = iVar27 + *param_2;
              *param_2 = uVar22;
              if (uVar18 == 0xffffffff) break;
              uVar21 = 2;
              pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * 3);
              if (uVar26 == 1) {
                uVar21 = 1;
              }
            }
          }
        }
      }
      else {
        uVar21 = (uint)bVar6;
        if (iVar19 == 1) {
          if ((int)uVar22 < (int)uVar26) {
            lVar24 = lVar24 + *(short *)((long)param_2 + 2);
            if (-1 < (int)uVar18) {
              uVar22 = param_2[1];
              uVar26 = 0;
              pbVar20 = (byte *)(lVar24 + lVar31 * (((int)uVar22 >> 0x10) + -1));
              uVar23 = 1;
              while( true ) {
                uVar32 = uVar23 & (uVar26 | 2);
                uVar23 = 2;
                uVar33 = uVar23;
                if ((int)uVar18 < 2) {
                  uVar33 = 1;
                }
                uVar22 = uVar22 >> 0xb & 0x1f;
                iVar19 = *(int *)((long)&local_30 +
                                 (long)(int)(uVar32 * 3 + (uVar33 & (uVar18 | 2))) * 4);
                uVar18 = uVar18 - 1;
                lVar24 = lVar24 + 1;
                uVar32 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar22 + 0x20) * 4))
                         >> 8 & 0xff;
                uVar26 = uVar26 + 1;
                uVar33 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)uVar22 * 4)) >> 8 &
                         0xff;
                uVar29 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar22) * 4))
                         >> 8 & 0xff;
                uVar22 = (uint)*pbVar20 + ((int)((uVar30 - *pbVar20) * uVar32 + 0x7f) >> 8);
                *pbVar20 = (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar32 + 0x7f >> 8);
                uVar22 = (uint)pbVar20[lVar31] +
                         ((int)((uVar21 - pbVar20[lVar31]) * uVar33 + 0x7f) >> 8);
                pbVar20[lVar31] =
                     (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar33 + 0x7f >> 8);
                uVar22 = (uint)pbVar20[lVar31 * 2] +
                         ((int)((uVar21 - pbVar20[lVar31 * 2]) * uVar29 + 0x7f) >> 8);
                pbVar20[lVar31 * 2] =
                     (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar29 + 0x7f >> 8);
                uVar22 = iVar28 + param_2[1];
                param_2[1] = uVar22;
                if (uVar18 == 0xffffffff) break;
                if (uVar26 == 1) {
                  uVar23 = 1;
                }
                pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * lVar31);
              }
            }
          }
          else {
            lVar24 = lVar24 + lVar31 * *(short *)((long)param_2 + 6);
            if (-1 < (int)uVar18) {
              uVar22 = *param_2;
              uVar26 = 0;
              pbVar20 = (byte *)(lVar24 + (long)((int)uVar22 >> 0x10) + -1);
              uVar23 = 1;
              while( true ) {
                uVar32 = uVar23 & (uVar26 | 2);
                uVar23 = 2;
                uVar33 = uVar23;
                if ((int)uVar18 < 2) {
                  uVar33 = 1;
                }
                uVar29 = uVar18 | 2;
                uVar22 = uVar22 >> 0xb & 0x1f;
                uVar18 = uVar18 - 1;
                iVar19 = *(int *)((long)&local_30 + (long)(int)(uVar32 * 3 + (uVar33 & uVar29)) * 4)
                ;
                lVar24 = lVar24 + lVar31;
                uVar26 = uVar26 + 1;
                uVar29 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar22 + 0x20) * 4))
                         >> 8 & 0xff;
                uVar4 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)uVar22 * 4)) >> 8 & 0xff
                ;
                uVar5 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar22) * 4)) >>
                        8 & 0xff;
                uVar22 = (uint)pbVar20[2] + ((int)((uVar21 - pbVar20[2]) * uVar5 + 0x7f) >> 8);
                uVar32 = (uint)*pbVar20 + ((int)((uVar21 - *pbVar20) * uVar29 + 0x7f) >> 8);
                uVar33 = (uint)pbVar20[1] + ((int)((uVar21 - pbVar20[1]) * uVar4 + 0x7f) >> 8);
                *pbVar20 = (char)uVar32 + (char)((uVar30 - (uVar32 & 0xff)) * uVar29 + 0x7f >> 8);
                pbVar20[2] = (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar5 + 0x7f >> 8);
                pbVar20[1] = (char)uVar33 + (char)((uVar30 - (uVar33 & 0xff)) * uVar4 + 0x7f >> 8);
                uVar22 = iVar27 + *param_2;
                *param_2 = uVar22;
                if (uVar18 == 0xffffffff) break;
                if (uVar26 == 1) {
                  uVar23 = 1;
                }
                pbVar20 = (byte *)(lVar24 + (long)((int)uVar22 >> 0x10) + -1);
              }
            }
          }
        }
        else {
          uVar33 = (uint)bVar9;
          if ((int)uVar22 < (int)uVar26) {
            lVar24 = lVar24 + ((int)*(short *)((long)param_2 + 2) << 2);
            if (-1 < (int)uVar18) {
              uVar22 = param_2[1];
              uVar26 = 0;
              uVar29 = 1;
              pbVar20 = (byte *)(lVar24 + lVar31 * (((int)uVar22 >> 0x10) + -1));
              while( true ) {
                uVar4 = uVar29 & (uVar26 | 2);
                uVar29 = 2;
                uVar5 = uVar29;
                if ((int)uVar18 < 2) {
                  uVar5 = 1;
                }
                uVar2 = uVar22 >> 0xb & 0x1f;
                iVar19 = *(int *)((long)&local_30 +
                                 (long)(int)(uVar4 * 3 + (uVar5 & (uVar18 | 2))) * 4);
                lVar16 = lVar31 * 2;
                uVar18 = uVar18 - 1;
                uVar3 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar2 + 0x20) * 4)) >>
                        8 & 0xff;
                iVar27 = *(int *)(&DAT_0043fba0 + (long)(int)uVar2 * 4);
                uVar22 = (uint)*pbVar20 +
                         ((int)(((uint)bVar6 - (uint)*pbVar20) * uVar3 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[1] +
                        ((int)(((uint)bVar7 - (uint)pbVar20[1]) * uVar3 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[2] +
                        ((int)(((uint)bVar8 - (uint)pbVar20[2]) * uVar3 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[3] +
                        ((int)(((uint)bVar9 - (uint)pbVar20[3]) * uVar3 + 0x7f) >> 8);
                pbVar20[1] = (char)uVar4 +
                             (char)(((uint)bVar7 - (uVar4 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[2] = (char)uVar5 +
                             (char)(((uint)bVar8 - (uVar5 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[3] = (char)uVar1 +
                             (char)(((uint)bVar9 - (uVar1 & 0xff)) * uVar3 + 0x7f >> 8);
                *pbVar20 = (char)uVar22 +
                           (char)(((uint)bVar6 - (uVar22 & 0xff)) * uVar3 + 0x7f >> 8);
                lVar24 = lVar24 + 4;
                uVar26 = uVar26 + 1;
                uVar3 = (uint)(iVar19 * iVar27) >> 8 & 0xff;
                iVar27 = *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar2) * 4);
                uVar22 = (uint)pbVar20[lVar31] +
                         ((int)((uVar30 - pbVar20[lVar31]) * uVar3 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[lVar31 + 1] +
                        ((int)((uVar23 - pbVar20[lVar31 + 1]) * uVar3 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[lVar31 + 2] +
                        ((int)((uVar32 - pbVar20[lVar31 + 2]) * uVar3 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[lVar31 + 3] +
                        ((int)((uVar33 - pbVar20[lVar31 + 3]) * uVar3 + 0x7f) >> 8);
                pbVar20[lVar31] =
                     (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 2] =
                     (char)uVar5 + (char)((uVar32 - (uVar5 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 3] =
                     (char)uVar1 + (char)((uVar33 - (uVar1 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 1] =
                     (char)uVar4 + (char)((uVar23 - (uVar4 & 0xff)) * uVar3 + 0x7f >> 8);
                uVar2 = (uint)(iVar19 * iVar27) >> 8 & 0xff;
                uVar22 = (uint)pbVar20[lVar31 * 2] +
                         ((int)((uVar21 - pbVar20[lVar31 * 2]) * uVar2 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[lVar16 + 1] +
                        ((int)((uVar23 - pbVar20[lVar16 + 1]) * uVar2 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[lVar16 + 2] +
                        ((int)((uVar32 - pbVar20[lVar16 + 2]) * uVar2 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[lVar16 + 3] +
                        ((int)((uVar33 - pbVar20[lVar16 + 3]) * uVar2 + 0x7f) >> 8);
                pbVar20[lVar31 * 2] =
                     (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 3] =
                     (char)uVar1 + (char)((uVar33 - (uVar1 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 1] =
                     (char)uVar4 + (char)((uVar23 - (uVar4 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 2] =
                     (char)uVar5 + (char)((uVar32 - (uVar5 & 0xff)) * uVar2 + 0x7f >> 8);
                uVar22 = iVar28 + param_2[1];
                param_2[1] = uVar22;
                if (uVar18 == 0xffffffff) break;
                if (uVar26 == 1) {
                  uVar29 = 1;
                }
                pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * lVar31);
              }
            }
          }
          else {
            lVar24 = lVar24 + lVar31 * *(short *)((long)param_2 + 6);
            if (-1 < (int)uVar18) {
              uVar22 = *param_2;
              uVar26 = 0;
              uVar29 = 1;
              pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * 4);
              while( true ) {
                uVar4 = uVar29 & (uVar26 | 2);
                uVar29 = 2;
                uVar5 = uVar29;
                if ((int)uVar18 < 2) {
                  uVar5 = 1;
                }
                uVar2 = uVar22 >> 0xb & 0x1f;
                iVar19 = *(int *)((long)&local_30 +
                                 (long)(int)(uVar4 * 3 + (uVar5 & (uVar18 | 2))) * 4);
                lVar16 = lVar31 * 2;
                uVar18 = uVar18 - 1;
                uVar3 = (uint)(iVar19 * *(int *)(&DAT_0043fba0 + (long)(int)(uVar2 + 0x20) * 4)) >>
                        8 & 0xff;
                iVar28 = *(int *)(&DAT_0043fba0 + (long)(int)uVar2 * 4);
                uVar22 = (uint)*pbVar20 + ((int)((uVar21 - *pbVar20) * uVar3 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[1] + ((int)((uVar23 - pbVar20[1]) * uVar3 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[2] + ((int)((uVar32 - pbVar20[2]) * uVar3 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[3] + ((int)((uVar33 - pbVar20[3]) * uVar3 + 0x7f) >> 8);
                pbVar20[1] = (char)uVar4 + (char)((uVar23 - (uVar4 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[2] = (char)uVar5 + (char)((uVar32 - (uVar5 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[3] = (char)uVar1 + (char)((uVar33 - (uVar1 & 0xff)) * uVar3 + 0x7f >> 8);
                *pbVar20 = (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar3 + 0x7f >> 8);
                lVar24 = lVar24 + lVar31;
                uVar26 = uVar26 + 1;
                uVar3 = (uint)(iVar19 * iVar28) >> 8 & 0xff;
                iVar28 = *(int *)(&DAT_0043fba0 + (long)(int)(0x3f - uVar2) * 4);
                uVar22 = (uint)pbVar20[lVar31] +
                         ((int)((uVar21 - pbVar20[lVar31]) * uVar3 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[lVar31 + 1] +
                        ((int)((uVar23 - pbVar20[lVar31 + 1]) * uVar3 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[lVar31 + 2] +
                        ((int)((uVar32 - pbVar20[lVar31 + 2]) * uVar3 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[lVar31 + 3] +
                        ((int)((uVar33 - pbVar20[lVar31 + 3]) * uVar3 + 0x7f) >> 8);
                pbVar20[lVar31] =
                     (char)uVar22 + (char)((uVar21 - (uVar22 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 2] =
                     (char)uVar5 + (char)((uVar32 - (uVar5 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 3] =
                     (char)uVar1 + (char)((uVar33 - (uVar1 & 0xff)) * uVar3 + 0x7f >> 8);
                pbVar20[lVar31 + 1] =
                     (char)uVar4 + (char)((uVar23 - (uVar4 & 0xff)) * uVar3 + 0x7f >> 8);
                uVar2 = (uint)(iVar19 * iVar28) >> 8 & 0xff;
                uVar22 = (uint)pbVar20[lVar31 * 2] +
                         ((int)((uVar30 - pbVar20[lVar31 * 2]) * uVar2 + 0x7f) >> 8);
                uVar4 = (uint)pbVar20[lVar16 + 1] +
                        ((int)((uVar23 - pbVar20[lVar16 + 1]) * uVar2 + 0x7f) >> 8);
                uVar5 = (uint)pbVar20[lVar16 + 2] +
                        ((int)((uVar32 - pbVar20[lVar16 + 2]) * uVar2 + 0x7f) >> 8);
                uVar1 = (uint)pbVar20[lVar16 + 3] +
                        ((int)((uVar33 - pbVar20[lVar16 + 3]) * uVar2 + 0x7f) >> 8);
                pbVar20[lVar31 * 2] =
                     (char)uVar22 + (char)((uVar30 - (uVar22 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 3] =
                     (char)uVar1 + (char)((uVar33 - (uVar1 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 1] =
                     (char)uVar4 + (char)((uVar23 - (uVar4 & 0xff)) * uVar2 + 0x7f >> 8);
                pbVar20[lVar16 + 2] =
                     (char)uVar5 + (char)((uVar32 - (uVar5 & 0xff)) * uVar2 + 0x7f >> 8);
                uVar22 = iVar27 + *param_2;
                *param_2 = uVar22;
                if (uVar18 == 0xffffffff) break;
                if (uVar26 == 1) {
                  uVar29 = 1;
                }
                pbVar20 = (byte *)(lVar24 + (((int)uVar22 >> 0x10) + -1) * 4);
              }
            }
          }
        }
      }
      return;
    }
    return;
  }
  local_38 = *(undefined8 *)param_3;
  local_40 = *(undefined8 *)param_2;
  cv::LineIterator::LineIterator((LineIterator *)&local_30,param_1,&local_40,&local_38,8,1);
  if ((int)param_1[1] < 1) {
    __n = 0;
    if (local_14 < 1) {
      return;
    }
  }
  else {
    iVar19 = (int)*(undefined8 *)(*(long *)(param_1 + 0x12) + (long)(int)param_1[1] * 8 + -8);
    __n = (size_t)iVar19;
    if (local_14 < 1) {
      return;
    }
    if (iVar19 == 1) {
      iVar19 = 0;
      do {
        iVar19 = iVar19 + 1;
        *local_30 = *param_4;
        uVar30 = local_18 >> 0x1f;
        local_18 = local_18 + (uVar30 & local_c) + local_10;
        local_30 = local_30 + (int)((uVar30 & local_4) + local_8);
      } while (iVar19 != local_14);
      return;
    }
    if (iVar19 == 3) {
      iVar19 = 0;
      do {
        iVar19 = iVar19 + 1;
        *local_30 = *param_4;
        local_30[1] = param_4[1];
        local_30[2] = param_4[2];
        uVar30 = local_18 >> 0x1f;
        local_18 = local_18 + (uVar30 & local_c) + local_10;
        local_30 = local_30 + (int)((uVar30 & local_4) + local_8);
      } while (iVar19 != local_14);
      return;
    }
  }
  iVar19 = 0;
  do {
    iVar19 = iVar19 + 1;
    memcpy(local_30,param_4,__n);
    uVar30 = local_18 >> 0x1f;
    local_18 = local_18 + (uVar30 & local_c) + local_10;
    local_30 = local_30 + (int)((uVar30 & local_4) + local_8);
  } while (iVar19 != local_14);
  return;
}


==================================================================

### FUNC 001a63a4 (2632 bytes) name=FUN_001a63a4

void FUN_001a63a4(long param_1,int *param_2,uint param_3,undefined1 *param_4,int param_5,
                 uint param_6)

{
  undefined1 *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined1 *puVar10;
  uint uVar11;
  size_t __n;
  int iVar12;
  undefined8 *puVar13;
  ulong uVar14;
  int *piVar15;
  uint uVar16;
  long lVar17;
  uint uVar18;
  long lVar19;
  int iVar20;
  int iVar21;
  undefined8 *puVar22;
  long lVar23;
  int *piVar24;
  long lVar25;
  uint uVar26;
  uint uVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  undefined8 uVar32;
  int iVar33;
  int iVar34;
  uint local_70;
  int local_6c;
  int local_50;
  int local_4c;
  int local_40;
  int local_3c;
  int local_38;
  int local_34;
  undefined8 local_30;
  int local_28 [4];
  int local_18;
  int local_14;
  int local_10;
  uint local_c;
  int local_8;
  uint local_4;
  
  iVar34 = 0;
  if (param_6 != 0) {
    iVar34 = 1 << (ulong)(param_6 - 1 & 0x1f);
  }
  lVar17 = *(long *)(param_1 + 0x10);
  iVar5 = (*(int **)(param_1 + 0x40))[1];
  iVar20 = **(int **)(param_1 + 0x40);
  if (*(int *)(param_1 + 4) < 1) {
    local_70 = 0;
  }
  else {
    local_70 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  if (param_5 < 0x10) {
    local_4c = 0x8000;
    local_50 = 0x8000;
  }
  else {
    local_4c = 0;
    local_50 = 0xffff;
  }
  iVar28 = *param_2;
  uVar8 = 0x10 - param_6;
  iVar30 = param_2[1];
  iVar31 = iVar28;
  iVar33 = iVar30;
  if ((int)param_3 < 1) {
    local_6c = 0;
LAB_001a667c:
    uVar2 = iVar34 + iVar30 >> (param_6 & 0x1f);
    iVar30 = iVar33 + iVar34 >> (param_6 & 0x1f);
    if ((iVar31 + iVar34 >> (param_6 & 0x1f) < iVar5 &&
         (2 < (int)param_3 && -1 < (int)(iVar34 + iVar28 | uVar2))) &&
       (uVar26 = (uint)(iVar20 <= iVar30), iVar20 > iVar30)) {
      uVar3 = iVar20 - 1;
      if ((int)uVar2 < iVar20) {
        uVar3 = uVar2;
      }
      uVar2 = -(int)param_4 & 0xf;
      uVar27 = 1;
      uVar4 = local_70;
      if (uVar2 < local_70) {
        uVar4 = uVar2;
      }
      lVar19 = *(long *)(param_1 + 0x50);
      local_28[3] = local_6c;
      lVar17 = lVar17 + iVar30 * lVar19;
      uVar2 = ((local_70 - uVar4) - 0x10 >> 4) + 1;
      local_18 = param_3 - 1;
      uVar9 = (local_70 - 1) - uVar4;
      local_c = iVar30;
      local_28[2] = iVar30;
      local_30 = (undefined1 *)CONCAT44(1,local_6c);
      iVar28 = uVar2 * 0x10;
      iVar20 = iVar30;
      uVar16 = param_3;
      do {
        piVar24 = (int *)&local_30;
        if ((iVar20 < (int)uVar3 || iVar20 == iVar30) || (param_5 < 0x10)) {
          do {
            if (piVar24[4] <= iVar20) {
              iVar33 = *piVar24;
              piVar15 = param_2 + (long)iVar33 * 2;
              iVar31 = iVar34 + piVar15[1] >> (param_6 & 0x1f);
              if ((uVar16 == 0) || (iVar20 < iVar31)) {
                iVar29 = 0;
              }
              else {
                do {
                  iVar29 = *piVar15;
                  uVar16 = uVar16 - 1;
                  iVar33 = (iVar33 + piVar24[1]) -
                           (-(uint)((int)param_3 <= iVar33 + piVar24[1]) & param_3);
                  piVar15 = param_2 + (long)iVar33 * 2;
                  iVar31 = iVar34 + piVar15[1] >> (param_6 & 0x1f);
                  if (iVar20 < iVar31) break;
                } while (uVar16 != 0);
                iVar29 = iVar29 << (ulong)(uVar8 & 0x1f);
              }
              iVar6 = *piVar15;
              if (iVar31 <= iVar20) {
                return;
              }
              piVar24[4] = iVar31;
              iVar7 = (iVar31 - iVar20) * 2;
              *piVar24 = iVar33;
              piVar24[2] = iVar29;
              iVar33 = 0;
              if (iVar7 != 0) {
                iVar33 = ((iVar31 - iVar20) + ((iVar6 << (ulong)(uVar8 & 0x1f)) - iVar29) * 2) /
                         iVar7;
              }
              piVar24[3] = iVar33;
            }
            piVar24 = piVar24 + 5;
          } while (piVar24 != &local_8);
        }
        lVar25 = (long)(int)uVar26;
        lVar23 = (long)(int)uVar27;
        iVar31 = local_28[lVar25 * 5];
        iVar33 = local_28[lVar23 * 5];
        if (iVar33 < iVar31) {
          uVar26 = uVar26 ^ 1;
          uVar27 = uVar27 ^ 1;
          lVar25 = (long)(int)uVar26;
          lVar23 = (long)(int)uVar27;
          iVar31 = local_28[lVar25 * 5];
          iVar33 = local_28[lVar23 * 5];
        }
        if (-1 < iVar20) {
          iVar29 = local_4c + iVar33 >> 0x10;
          iVar6 = local_50 + iVar31 >> 0x10;
          if ((-1 < iVar29) && (iVar6 < iVar5)) {
            if (iVar6 < 0) {
              iVar6 = 0;
            }
            iVar7 = iVar5 + -1;
            if (iVar29 < iVar5) {
              iVar7 = iVar29;
            }
            puVar10 = (undefined1 *)(lVar17 + (int)(iVar6 * local_70));
            puVar1 = (undefined1 *)(lVar17 + (int)(iVar7 * local_70));
            if (puVar10 <= puVar1) {
              do {
                if (0 < (int)local_70) {
                  if ((param_4 < puVar10 + 0x10 && puVar10 < param_4 + 0x10) || (local_70 < 0x16)) {
                    lVar19 = 0;
                    do {
                      puVar10[lVar19] = param_4[lVar19];
                      lVar19 = lVar19 + 1;
                    } while ((int)lVar19 < (int)local_70);
                  }
                  else {
                    uVar11 = uVar4;
                    if (uVar4 == 0) {
                      uVar14 = 0;
                      if (0xe < uVar9) goto LAB_001a6950;
                      iVar29 = 1;
                      *puVar10 = *param_4;
                    }
                    else {
                      *puVar10 = *param_4;
                      if ((((uVar4 != 1) && (puVar10[1] = param_4[1], uVar4 != 2)) &&
                          (puVar10[2] = param_4[2], uVar4 != 3)) &&
                         ((puVar10[3] = param_4[3], uVar4 != 4 &&
                          (puVar10[4] = param_4[4], uVar4 != 5)))) {
                        puVar10[5] = param_4[5];
                        if (uVar4 == 6) {
                          uVar11 = 6;
                        }
                        else {
                          puVar10[6] = param_4[6];
                          if ((((uVar4 != 7) && (puVar10[7] = param_4[7], uVar4 != 8)) &&
                              ((puVar10[8] = param_4[8], uVar4 != 9 &&
                               (((puVar10[9] = param_4[9], uVar4 != 10 &&
                                 (puVar10[10] = param_4[10], uVar4 != 0xb)) &&
                                (puVar10[0xb] = param_4[0xb], uVar4 != 0xc)))))) &&
                             (puVar10[0xc] = param_4[0xc], uVar4 != 0xd)) {
                            puVar10[0xd] = param_4[0xd];
                            if (uVar4 == 0xf) {
                              puVar10[0xe] = param_4[0xe];
                            }
                            else {
                              uVar11 = 0xe;
                            }
                          }
                        }
                      }
                      uVar14 = (ulong)uVar4;
                      if (0xe < uVar9) {
LAB_001a6950:
                        uVar18 = 0;
                        puVar13 = (undefined8 *)(param_4 + uVar14);
                        puVar22 = (undefined8 *)(puVar10 + uVar14);
                        do {
                          uVar32 = *puVar13;
                          uVar18 = uVar18 + 1;
                          puVar22[1] = puVar13[1];
                          *puVar22 = uVar32;
                          puVar13 = puVar13 + 2;
                          puVar22 = puVar22 + 2;
                        } while (uVar18 < uVar2);
                        uVar11 = uVar11 + iVar28;
                        if (iVar28 == local_70 - uVar4) goto LAB_001a6ae4;
                      }
                      iVar29 = uVar11 + 1;
                      puVar10[(int)uVar11] = param_4[(int)uVar11];
                      if ((int)local_70 <= iVar29) goto LAB_001a6ae4;
                    }
                    iVar6 = iVar29 + 1;
                    puVar10[iVar29] = param_4[iVar29];
                    if (iVar6 < (int)local_70) {
                      iVar7 = iVar29 + 2;
                      puVar10[iVar6] = param_4[iVar6];
                      if (iVar7 < (int)local_70) {
                        iVar6 = iVar29 + 3;
                        puVar10[iVar7] = param_4[iVar7];
                        if (iVar6 < (int)local_70) {
                          iVar7 = iVar29 + 4;
                          puVar10[iVar6] = param_4[iVar6];
                          if (iVar7 < (int)local_70) {
                            iVar6 = iVar29 + 5;
                            puVar10[iVar7] = param_4[iVar7];
                            if (iVar6 < (int)local_70) {
                              iVar7 = iVar29 + 6;
                              puVar10[iVar6] = param_4[iVar6];
                              if (iVar7 < (int)local_70) {
                                iVar6 = iVar29 + 7;
                                puVar10[iVar7] = param_4[iVar7];
                                if (iVar6 < (int)local_70) {
                                  iVar7 = iVar29 + 8;
                                  puVar10[iVar6] = param_4[iVar6];
                                  if (iVar7 < (int)local_70) {
                                    iVar6 = iVar29 + 9;
                                    puVar10[iVar7] = param_4[iVar7];
                                    if (iVar6 < (int)local_70) {
                                      iVar7 = iVar29 + 10;
                                      puVar10[iVar6] = param_4[iVar6];
                                      if (iVar7 < (int)local_70) {
                                        iVar6 = iVar29 + 0xb;
                                        puVar10[iVar7] = param_4[iVar7];
                                        if (iVar6 < (int)local_70) {
                                          iVar7 = iVar29 + 0xc;
                                          puVar10[iVar6] = param_4[iVar6];
                                          if (iVar7 < (int)local_70) {
                                            iVar29 = iVar29 + 0xd;
                                            puVar10[iVar7] = param_4[iVar7];
                                            if (iVar29 < (int)local_70) {
                                              puVar10[iVar29] = param_4[iVar29];
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
LAB_001a6ae4:
                puVar10 = puVar10 + (int)local_70;
              } while (puVar10 <= puVar1);
              lVar19 = *(long *)(param_1 + 0x50);
            }
          }
        }
        iVar20 = iVar20 + 1;
        lVar17 = lVar17 + lVar19;
        iVar29 = local_28[lVar23 * 5 + 1];
        local_28[lVar25 * 5] = local_28[lVar25 * 5 + 1] + iVar31;
        local_28[lVar23 * 5] = iVar33 + iVar29;
      } while (iVar20 <= (int)uVar3);
    }
    return;
  }
  iVar29 = 0;
  local_6c = 0;
  piVar24 = param_2;
  local_38 = param_2[(long)(int)param_3 * 2 + -2] << (ulong)(uVar8 & 0x1f);
  local_34 = param_2[(long)(int)param_3 * 2 + -1] << (ulong)(uVar8 & 0x1f);
  do {
    iVar6 = piVar24[1];
    iVar7 = *piVar24;
    if (iVar6 < iVar33) {
      iVar33 = iVar6;
      local_6c = iVar29;
    }
    if (iVar30 < iVar6) {
      iVar30 = iVar6;
    }
    if (iVar28 < iVar7) {
      iVar28 = iVar7;
    }
    if (iVar7 < iVar31) {
      iVar31 = iVar7;
    }
    iVar7 = iVar7 << (ulong)(uVar8 & 0x1f);
    iVar6 = iVar6 << (ulong)(uVar8 & 0x1f);
    if (param_5 < 9) {
      if (param_6 == 0) {
        local_40 = local_38 >> 0x10;
        local_3c = local_34 >> 0x10;
        local_38 = iVar7 >> 0x10;
        local_34 = iVar6 >> 0x10;
        iVar21 = 8;
        if ((param_5 != 0) && (iVar21 = param_5, param_5 == 1)) {
          iVar21 = 4;
        }
        cv::LineIterator::LineIterator
                  ((LineIterator *)&local_30,param_1,&local_40,&local_38,iVar21,1);
        iVar21 = local_14;
        if (*(int *)(param_1 + 4) < 1) {
          if (0 < local_14) {
            __n = 0;
LAB_001a65b4:
            iVar12 = 0;
            do {
              iVar12 = iVar12 + 1;
              memcpy(local_30,param_4,__n);
              uVar2 = local_18 >> 0x1f;
              local_18 = local_18 + (uVar2 & local_c) + local_10;
              local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
            } while (iVar12 != iVar21);
          }
        }
        else {
          iVar12 = (int)*(undefined8 *)
                         (*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
          __n = (size_t)iVar12;
          if (0 < local_14) {
            if (iVar12 == 1) {
              iVar21 = 0;
              do {
                iVar21 = iVar21 + 1;
                *local_30 = *param_4;
                uVar2 = local_18 >> 0x1f;
                local_18 = local_18 + (uVar2 & local_c) + local_10;
                local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
              } while (iVar21 != local_14);
            }
            else {
              if (iVar12 != 3) goto LAB_001a65b4;
              iVar21 = 0;
              do {
                iVar21 = iVar21 + 1;
                *local_30 = *param_4;
                local_30[1] = param_4[1];
                local_30[2] = param_4[2];
                uVar2 = local_18 >> 0x1f;
                local_18 = local_18 + (uVar2 & local_c) + local_10;
                local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
              } while (iVar21 != local_14);
            }
          }
        }
      }
      else {
        local_30 = (undefined1 *)CONCAT44(iVar6,iVar7);
        FUN_001a3bb8(param_1,&local_38,(LineIterator *)&local_30,param_4);
      }
    }
    else {
      local_30 = (undefined1 *)CONCAT44(iVar6,iVar7);
      FUN_001a5090(param_1,&local_38,(LineIterator *)&local_30,param_4);
    }
    if (iVar29 + 1U == param_3) goto LAB_001a667c;
    iVar29 = iVar29 + 1;
    piVar24 = piVar24 + 2;
    local_38 = iVar7;
    local_34 = iVar6;
  } while( true );
}


==================================================================

### FUNC 001a6dec (1660 bytes) name=FUN_001a6dec

void FUN_001a6dec(long param_1,int *param_2,int param_3,undefined8 *param_4,undefined1 *param_5,
                 int param_6,uint param_7,int *param_8)

{
  int *piVar1;
  uint uVar2;
  undefined8 uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 *puVar11;
  ulong uVar12;
  int iVar13;
  long lVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  ulong uVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  ulong uVar21;
  undefined8 *puVar22;
  int iVar23;
  long lVar24;
  int local_40;
  int local_3c;
  int local_38;
  int local_34;
  undefined8 local_30;
  int local_18;
  int local_14;
  int local_10;
  uint local_c;
  int local_8;
  uint local_4;
  
  iVar4 = param_8[1];
  iVar13 = 0;
  if (param_7 != 0) {
    iVar13 = 1 << (ulong)(param_7 - 1 & 0x1f);
  }
  puVar16 = (undefined8 *)*param_4;
  puVar22 = (undefined8 *)param_4[1];
  lVar24 = (long)puVar22 - (long)puVar16;
  iVar18 = *param_8;
  iVar5 = param_2[(long)param_3 * 2 + -2];
  uVar17 = (long)param_3 + (lVar24 >> 3) * -0x5555555555555555;
  iVar20 = param_2[(long)param_3 * 2 + -1];
  if (0xaaaaaaaaaaaaaaa < uVar17) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::reserve");
  }
  if ((ulong)((param_4[2] - (long)puVar16 >> 3) * -0x5555555555555555) < uVar17) {
    if (uVar17 == 0) {
      uVar17 = 0;
      puVar11 = (undefined8 *)0x0;
      puVar7 = puVar11;
      puVar15 = puVar16;
    }
    else {
      uVar17 = uVar17 * 0x18;
      puVar11 = operator_new(uVar17);
      puVar7 = puVar11;
      puVar15 = (undefined8 *)*param_4;
    }
    for (; puVar16 != puVar22; puVar16 = puVar16 + 3) {
      if (puVar11 != (undefined8 *)0x0) {
        uVar3 = puVar16[1];
        *puVar11 = *puVar16;
        puVar11[1] = uVar3;
        puVar11[2] = puVar16[2];
      }
      puVar11 = puVar11 + 3;
    }
    if (puVar15 != (undefined8 *)0x0) {
      operator_delete(puVar15);
    }
    *param_4 = puVar7;
    param_4[1] = (long)puVar7 + lVar24;
    param_4[2] = (long)puVar7 + uVar17;
  }
  if (0 < param_3) {
    piVar1 = param_2 + ((ulong)(param_3 - 1) + 1) * 2;
    iVar18 = iVar18 + iVar5 << (ulong)(0x10 - param_7 & 0x1f);
    iVar20 = iVar4 + iVar13 + iVar20 >> (param_7 & 0x1f);
    do {
      iVar6 = *param_2 + *param_8 << (ulong)(0x10 - param_7 & 0x1f);
      iVar5 = iVar4 + iVar13 + param_2[1] >> (param_7 & 0x1f);
      if (param_6 < 0x10) {
        local_38 = iVar6 + 0x8000 >> 0x10;
        local_40 = iVar18 + 0x8000 >> 0x10;
        iVar19 = 8;
        if ((param_6 != 0) && (iVar19 = param_6, param_6 == 1)) {
          iVar19 = 4;
        }
        local_3c = iVar20;
        local_34 = iVar5;
        cv::LineIterator::LineIterator
                  ((LineIterator *)&local_30,param_1,&local_40,&local_38,iVar19,1);
        iVar19 = local_14;
        if (*(int *)(param_1 + 4) < 1) {
          if (0 < local_14) {
            iVar10 = 0;
LAB_001a6fe0:
            iVar23 = 0;
            do {
              iVar23 = iVar23 + 1;
              memcpy(local_30,param_5,(long)iVar10);
              uVar2 = local_18 >> 0x1f;
              local_18 = local_18 + (uVar2 & local_c) + local_10;
              local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
            } while (iVar23 != iVar19);
          }
        }
        else {
          iVar10 = (int)*(undefined8 *)
                         (*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
          if (0 < local_14) {
            if (iVar10 == 1) {
              iVar19 = 0;
              do {
                iVar19 = iVar19 + 1;
                *local_30 = *param_5;
                uVar2 = local_18 >> 0x1f;
                local_18 = local_18 + (uVar2 & local_c) + local_10;
                local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
              } while (iVar19 != local_14);
            }
            else {
              if (iVar10 != 3) goto LAB_001a6fe0;
              iVar19 = 0;
              do {
                iVar19 = iVar19 + 1;
                *local_30 = *param_5;
                local_30[1] = param_5[1];
                local_30[2] = param_5[2];
                uVar2 = local_18 >> 0x1f;
                local_18 = local_18 + (uVar2 & local_c) + local_10;
                local_30 = local_30 + (int)((uVar2 & local_4) + local_8);
              } while (iVar19 != local_14);
            }
          }
        }
      }
      else {
        local_34 = iVar20 << 0x10;
        local_30 = (undefined1 *)CONCAT44(iVar5 << 0x10,iVar6);
        local_38 = iVar18;
        FUN_001a5090(param_1,&local_38,(LineIterator *)&local_30,param_5);
      }
      if (iVar5 != iVar20) {
        if (iVar20 < iVar5) {
          puVar16 = (undefined8 *)param_4[1];
          iVar19 = 0;
          if (iVar5 - iVar20 != 0) {
            iVar19 = (iVar6 - iVar18) / (iVar5 - iVar20);
          }
          iVar23 = iVar20;
          iVar10 = iVar5;
          if (puVar16 == (undefined8 *)param_4[2]) {
LAB_001a7144:
            puVar22 = (undefined8 *)*param_4;
            lVar14 = (long)puVar16 - (long)puVar22;
            lVar24 = lVar14 >> 3;
            uVar17 = lVar24 * -0x5555555555555555;
            if (uVar17 == 0) {
              uVar21 = 0x18;
LAB_001a740c:
              puVar7 = operator_new(uVar21);
              puVar15 = (undefined8 *)param_4[1];
              puVar11 = puVar7 + 3;
              puVar22 = (undefined8 *)*param_4;
            }
            else {
              uVar12 = lVar24 * 0x5555555555555556;
              uVar21 = 0xfffffffffffffff0;
              if ((uVar12 <= uVar17 && uVar17 != 0) || (0xaaaaaaaaaaaaaaa < uVar12))
              goto LAB_001a740c;
              uVar21 = lVar24 * 0x10;
              puVar11 = (undefined8 *)0x18;
              puVar7 = (undefined8 *)0x0;
              puVar15 = puVar16;
              if (uVar12 != 0) goto LAB_001a740c;
            }
            puVar9 = (undefined8 *)((long)puVar7 + lVar14);
            if (puVar9 != (undefined8 *)0x0) {
              puVar9[2] = 0;
              puVar9[1] = CONCAT44(iVar19,iVar18);
              *puVar9 = CONCAT44(iVar10,iVar20);
            }
            puVar8 = puVar7;
            puVar9 = puVar22;
            if (puVar16 != puVar22) {
              do {
                if (puVar8 != (undefined8 *)0x0) {
                  uVar3 = puVar9[1];
                  *puVar8 = *puVar9;
                  puVar8[1] = uVar3;
                  puVar8[2] = puVar9[2];
                }
                puVar9 = puVar9 + 3;
                puVar8 = puVar8 + 3;
              } while (puVar16 != puVar9);
              puVar11 = puVar7 + ((((ulong)((long)puVar16 - (long)(puVar22 + 3)) >> 3) *
                                   0xaaaaaaaaaaaaaab & 0x1fffffffffffffff) + 1) * 3 + 3;
            }
            puVar9 = puVar16;
            puVar8 = puVar11;
            if (puVar16 != puVar15) {
              do {
                if (puVar8 != (undefined8 *)0x0) {
                  uVar3 = puVar9[1];
                  *puVar8 = *puVar9;
                  puVar8[1] = uVar3;
                  puVar8[2] = puVar9[2];
                }
                puVar9 = puVar9 + 3;
                puVar8 = puVar8 + 3;
              } while (puVar9 != puVar15);
              puVar11 = puVar11 + ((((ulong)((long)puVar9 - (long)(puVar16 + 3)) >> 3) *
                                    0xaaaaaaaaaaaaaab & 0x1fffffffffffffff) + 1) * 3;
            }
            if (puVar22 != (undefined8 *)0x0) {
              operator_delete(puVar22);
            }
            *param_4 = puVar7;
            param_4[1] = puVar11;
            param_4[2] = (long)puVar7 + uVar21;
            goto LAB_001a70a0;
          }
        }
        else {
          puVar16 = (undefined8 *)param_4[1];
          iVar19 = 0;
          if (iVar5 - iVar20 != 0) {
            iVar19 = (iVar6 - iVar18) / (iVar5 - iVar20);
          }
          iVar23 = iVar5;
          iVar10 = iVar20;
          iVar18 = iVar6;
          iVar20 = iVar5;
          if (puVar16 == (undefined8 *)param_4[2]) goto LAB_001a7144;
        }
        if (puVar16 != (undefined8 *)0x0) {
          puVar16[2] = 0;
          puVar16[1] = CONCAT44(iVar19,iVar18);
          *puVar16 = CONCAT44(iVar10,iVar23);
        }
        param_4[1] = puVar16 + 3;
      }
LAB_001a70a0:
      param_2 = param_2 + 2;
      iVar18 = iVar6;
      iVar20 = iVar5;
    } while (param_2 != piVar1);
  }
  return;
}


==================================================================

### FUNC 001a7468 (1304 bytes) name=ellipse2Poly

/* cv::ellipse2Poly(cv::Point_<int>, cv::Size_<int>, int, int, int, int,
   std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >&) */

void cv::ellipse2Poly(int *param_1,int *param_2,int param_3,int param_4,int param_5,int param_6,
                     long *param_7)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  void *pvVar13;
  ulong uVar14;
  ulong uVar15;
  int *piVar16;
  ulong uVar17;
  int *piVar18;
  int iVar19;
  int *piVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  
  iVar1 = *param_2;
  iVar2 = param_2[1];
  iVar3 = *param_1;
  iVar4 = param_1[1];
  if (param_3 < 0) {
    do {
      param_3 = param_3 + 0x168;
    } while (param_3 < 0);
  }
  else {
    for (; 0x168 < param_3; param_3 = param_3 + -0x168) {
    }
  }
  iVar19 = param_4;
  iVar21 = param_5;
  iVar5 = param_5;
  if (param_5 < param_4) {
    iVar19 = param_5;
    iVar21 = param_4;
    iVar5 = param_4;
    param_4 = param_5;
  }
  while (iVar23 = iVar19, iVar10 = iVar21, iVar19 < 0) {
    iVar19 = iVar19 + 0x168;
    iVar21 = (iVar5 + iVar19) - param_4;
  }
  while (0x168 < iVar10) {
    iVar23 = (iVar19 + iVar10 + -0x168) - iVar21;
    iVar10 = iVar10 + -0x168;
  }
  if (0x168 < iVar10 - iVar23) {
    iVar10 = 0x168;
    iVar23 = 0;
  }
  fVar25 = *(float *)(&DAT_00440140 + (long)param_3 * 4);
  fVar26 = *(float *)(&DAT_00440140 + (long)(0x1c2 - param_3) * 4);
  if (param_7[1] - *param_7 >> 3 != 0) {
    param_7[1] = *param_7;
  }
  if (iVar23 < iVar10 + param_6) {
    iVar19 = -0x80000000;
    iVar21 = -0x80000000;
    do {
      iVar5 = iVar23;
      if (iVar10 < iVar23) {
        iVar5 = iVar10;
      }
      iVar22 = iVar5 + 0x168;
      if (-1 < iVar5) {
        iVar22 = iVar5;
      }
      fVar27 = *(float *)(&DAT_00440140 + (long)iVar22 * 4);
      fVar24 = *(float *)(&DAT_00440140 + (long)(0x1c2 - iVar22) * 4);
      lVar6 = lrint(((double)iVar3 + (double)fVar26 * (double)fVar24 * (double)iVar1) -
                    (double)fVar25 * (double)fVar27 * (double)iVar2);
      lVar7 = lrint((double)iVar4 + (double)fVar25 * (double)fVar24 * (double)iVar1 +
                    (double)fVar26 * (double)fVar27 * (double)iVar2);
      iVar22 = (int)lVar6;
      iVar5 = (int)lVar7;
      if ((iVar19 != iVar22) || (iVar21 != iVar5)) {
        piVar20 = (int *)param_7[1];
        iVar19 = iVar22;
        iVar21 = iVar5;
        if (piVar20 == (int *)param_7[2]) {
          piVar8 = (int *)*param_7;
          lVar6 = (long)piVar20 - (long)piVar8;
          uVar15 = lVar6 >> 3;
          if (uVar15 == 0) {
            lVar7 = 8;
            uVar14 = 1;
LAB_001a78c4:
            puVar9 = (undefined8 *)FUN_001a1810(uVar14);
            piVar18 = (int *)param_7[1];
            puVar11 = puVar9 + 1;
            piVar8 = (int *)*param_7;
          }
          else {
            uVar17 = uVar15 * 2;
            lVar7 = -8;
            uVar14 = 0x1fffffffffffffff;
            if (((uVar17 < uVar15) || (0x1fffffffffffffff < uVar17)) ||
               (lVar7 = uVar15 << 4, uVar14 = uVar17, uVar17 != 0)) goto LAB_001a78c4;
            puVar11 = (undefined8 *)0x8;
            puVar9 = (undefined8 *)0x0;
            piVar18 = piVar20;
          }
          if ((long)puVar9 + lVar6 != 0) {
            *(int *)((long)puVar9 + lVar6) = iVar22;
            *(int *)((long)puVar9 + lVar6 + 4) = iVar5;
          }
          puVar12 = puVar9;
          piVar16 = piVar8;
          if (piVar20 != piVar8) {
            do {
              if (puVar12 != (undefined8 *)0x0) {
                *puVar12 = *(undefined8 *)piVar16;
              }
              piVar16 = piVar16 + 2;
              puVar12 = puVar12 + 1;
            } while (piVar20 != piVar16);
            puVar11 = (undefined8 *)
                      ((long)puVar9 +
                      ((long)piVar20 - (long)(piVar8 + 2) & 0xfffffffffffffff8U) + 0x10);
          }
          puVar12 = puVar11;
          piVar16 = piVar20;
          if (piVar18 != piVar20) {
            do {
              if (puVar12 != (undefined8 *)0x0) {
                *puVar12 = *(undefined8 *)piVar16;
              }
              piVar16 = piVar16 + 2;
              puVar12 = puVar12 + 1;
            } while (piVar18 != piVar16);
            puVar11 = (undefined8 *)
                      ((long)puVar11 +
                      ((long)piVar18 - (long)(piVar20 + 2) & 0xfffffffffffffff8U) + 8);
          }
          if (piVar8 != (int *)0x0) {
            operator_delete(piVar8);
          }
          *param_7 = (long)puVar9;
          param_7[1] = (long)puVar11;
          param_7[2] = (long)puVar9 + lVar7;
        }
        else {
          if (piVar20 != (int *)0x0) {
            *piVar20 = iVar22;
            piVar20[1] = iVar5;
          }
          param_7[1] = (long)(piVar20 + 2);
        }
      }
      iVar23 = iVar23 + param_6;
    } while (iVar23 < iVar10 + param_6);
    piVar20 = (int *)*param_7;
    piVar8 = (int *)param_7[1];
    if ((long)piVar8 - (long)piVar20 >> 3 == 1) {
      if ((ulong)(param_7[2] - (long)piVar20) < 0x10) {
        piVar20 = operator_new(0x10);
        iVar1 = *param_1;
        piVar20[1] = param_1[1];
        *piVar20 = iVar1;
        if (piVar20 + 2 != (int *)0x0) {
          *(undefined8 *)(piVar20 + 2) = *(undefined8 *)param_1;
        }
        pvVar13 = (void *)*param_7;
        param_7[1] = (long)(piVar20 + 4);
        *param_7 = (long)piVar20;
        param_7[2] = (long)(piVar20 + 4);
        if (pvVar13 != (void *)0x0) {
          operator_delete(pvVar13);
          return;
        }
      }
      else {
        piVar18 = piVar8;
        if (piVar20 != piVar8) {
          piVar16 = piVar20 + 2;
          uVar14 = (ulong)((long)piVar8 - (long)piVar16) >> 3;
          uVar15 = uVar14 + 1;
          piVar18 = piVar20 + uVar15 * 2;
          if ((param_1 < piVar18 && piVar20 < param_1 + 2) || (uVar15 < 7)) {
            do {
              *(undefined8 *)piVar20 = *(undefined8 *)param_1;
              piVar20 = piVar16 + 2;
              if (piVar16 == piVar8) break;
              *(undefined8 *)piVar16 = *(undefined8 *)param_1;
              piVar16 = piVar16 + 4;
            } while (piVar20 != piVar8);
          }
          else {
            iVar1 = param_1[1];
            iVar2 = *param_1;
            uVar14 = (uVar14 - 3 >> 2) + 1;
            uVar17 = 0;
            piVar16 = piVar20;
            do {
              uVar17 = uVar17 + 1;
              *piVar16 = iVar2;
              piVar16[1] = iVar1;
              piVar16[2] = iVar2;
              piVar16[3] = iVar1;
              piVar16[4] = iVar2;
              piVar16[5] = iVar1;
              piVar16[6] = iVar2;
              piVar16[7] = iVar1;
              piVar16 = piVar16 + 8;
            } while (uVar17 < uVar14);
            piVar20 = piVar20 + uVar14 * 8;
            if (uVar14 * 4 - uVar15 != 0) {
              *(undefined8 *)piVar20 = *(undefined8 *)param_1;
              if (piVar8 != piVar20 + 2) {
                *(undefined8 *)(piVar20 + 2) = *(undefined8 *)param_1;
                if (piVar8 != piVar20 + 4) {
                  *(undefined8 *)(piVar20 + 4) = *(undefined8 *)param_1;
                }
              }
            }
          }
        }
        if (piVar18 != (int *)0x0) {
          *(undefined8 *)piVar18 = *(undefined8 *)param_1;
        }
        param_7[1] = (long)(piVar8 + 2);
      }
    }
  }
  return;
}


==================================================================

### FUNC 001a7980 (300 bytes) name=fillConvexPoly

/* cv::fillConvexPoly(cv::Mat&, cv::Point_<int> const*, int, cv::Scalar_<double> const&, int, int)
    */

void cv::fillConvexPoly(Mat *param_1,Point_ *param_2,int param_3,Scalar_ *param_4,int param_5,
                       int param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  char *pcVar6;
  undefined8 local_20;
  undefined8 local_18;
  
  if ((param_2 != (Point_ *)0x0) && (0 < param_3)) {
    if ((param_5 == 0x10) && ((*(uint *)param_1 & 7) != 0)) {
      param_5 = 8;
    }
    if (0x10 < (uint)param_6) {
      local_20 = 0;
      local_18 = 0;
      pcVar6 = (char *)String::allocate((String *)&local_20,0x1f);
      cVar5 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0[0x1e];
      uVar4 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._28_2_;
      uVar3 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._24_4_;
      uVar2 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._8_8_;
      uVar1 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._0_8_;
      *(undefined8 *)(pcVar6 + 0x10) = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._16_8_;
      *(undefined4 *)(pcVar6 + 0x18) = uVar3;
      *(undefined2 *)(pcVar6 + 0x1c) = uVar4;
      pcVar6[0x1e] = cVar5;
      *(undefined8 *)pcVar6 = uVar1;
      *(undefined8 *)(pcVar6 + 8) = uVar2;
      error(-0xd7,(String *)&local_20,
            "void cv::fillConvexPoly(cv::Mat&, const Point*, int, const Scalar&, int, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x71f);
      String::deallocate((String *)&local_20);
    }
    scalarToRawData(param_4,&local_20,*(uint *)param_1 & 0xfff,0);
    FUN_001a63a4(param_1,param_2,param_3,&local_20,param_5,param_6);
  }
  return;
}


==================================================================

### FUNC 001a7ac0 (928 bytes) name=getTextSize

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::getTextSize(cv::String const&, int, double, int, int*) */

void __thiscall
cv::getTextSize(cv *this,String *param_1,int param_2,double param_3,int param_4,int *param_5)

{
  uint uVar1;
  char cVar2;
  ulong uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  code *pcVar6;
  undefined8 *puVar7;
  long lVar8;
  char *pcVar9;
  uint uVar10;
  byte bVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  undefined4 *in_x8;
  uint *puVar16;
  double dVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  *in_x8 = 0;
  in_x8[1] = 0;
  uVar3 = (ulong)param_1 >> 4;
  switch((uint)param_1 & 0xf) {
  case 0:
    puVar16 = &DAT_0043fca0;
    break;
  case 1:
    if ((uVar3 & 1) == 0) {
      puVar16 = (uint *)&LAB_0043e620;
    }
    else {
      puVar16 = &DAT_0043e800;
    }
    break;
  case 2:
    puVar16 = &DAT_004408c0;
    break;
  case 3:
    if ((uVar3 & 1) == 0) {
      puVar16 = &DAT_00440a40;
    }
    else {
      puVar16 = &DAT_0043ee90;
    }
    break;
  case 4:
    if ((uVar3 & 1) == 0) {
      puVar16 = &DAT_0043f290;
    }
    else {
      puVar16 = &DAT_0043eb20;
    }
    break;
  case 5:
    if ((uVar3 & 1) == 0) {
      puVar16 = &DAT_0043fa20;
    }
    else {
      puVar16 = &DAT_0043fe20;
    }
    break;
  case 6:
    puVar16 = &DAT_0043ed10;
    break;
  case 7:
    puVar16 = &DAT_0043f060;
    break;
  default:
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined8 *)String::allocate((String *)&local_10,0x11);
    uVar5 = DAT_0043f4f8;
    uVar4 = _LAB_0043f4f0;
    *(undefined1 *)(puVar7 + 2) = DAT_0043f500;
    *puVar7 = uVar4;
    puVar7[1] = uVar5;
    error(-0xd3,(String *)&local_10,"const int* cv::getFontData(int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x7f5);
    String::deallocate((String *)&local_10);
                    /* WARNING: Does not return */
    pcVar6 = (code *)SoftwareBreakpoint(1000,0x1a7b64);
    (*pcVar6)();
  }
  uVar1 = *puVar16 & 0xf;
  lVar8 = lrint((double)((param_2 + 1) / 2) + param_3 * (double)((*puVar16 >> 4 & 0xf) + uVar1));
  pcVar9 = *(char **)this;
  in_x8[1] = (int)lVar8;
  uVar12 = (uint)*pcVar9;
  dVar17 = 0.0;
  if (*pcVar9 != '\0') {
    iVar15 = 0;
    do {
      uVar10 = uVar12 & 0xff;
      if ((uVar12 >> 7 & 1) == 0) {
        iVar13 = 0x20;
        iVar14 = iVar15;
        if ((uVar12 & 0xff) < 0x7f) goto LAB_001a7c38;
LAB_001a7bf0:
        iVar14 = iVar15 + 1;
        lVar8 = 0x80;
        uVar12 = (uint)pcVar9[iVar14];
      }
      else {
        if ((uint)param_1 != 3) goto LAB_001a7bf0;
        if (uVar10 == 0xd0) {
          iVar14 = iVar15 + 1;
          bVar11 = pcVar9[iVar14];
          if (0x2f < (bVar11 + 0x70 & 0xff)) {
LAB_001a7dd8:
            iVar14 = iVar15 + 1;
            if (bVar11 != 0) {
LAB_001a7e1c:
              iVar14 = iVar14 + 1;
              cVar2 = pcVar9[iVar14];
              goto LAB_001a7d2c;
            }
            uVar12 = 0;
            if (uVar10 < 0xf0) goto LAB_001a7d40;
            goto LAB_001a7d54;
          }
          uVar10 = bVar11 - 0x11;
          iVar13 = 0x7f;
LAB_001a7c38:
          iVar14 = iVar14 + 1;
          uVar12 = (uint)pcVar9[iVar14];
          if ((int)uVar10 < iVar13) {
            lVar8 = 0x80;
          }
          else {
LAB_001a7cec:
            lVar8 = (long)(int)uVar10 * 4 + -0x7c;
          }
        }
        else {
          if (uVar10 == 0xd1) {
            iVar14 = iVar15 + 1;
            bVar11 = pcVar9[iVar14];
            if (-1 < (char)bVar11) goto LAB_001a7dd8;
            if (0x8f < bVar11) goto LAB_001a7e1c;
            uVar10 = bVar11 + 0x2f;
            iVar13 = 0xaf;
            goto LAB_001a7c38;
          }
          if ((0xbf < uVar10) && (iVar14 = iVar15 + 1, iVar15 = iVar14, pcVar9[iVar14] == '\0')) {
            uVar12 = 0;
            if (uVar10 < 0xf0) {
LAB_001a7cd0:
              uVar12 = 0;
              if (uVar10 < 0xf8) goto LAB_001a7d54;
              uVar12 = 0;
            }
LAB_001a7cdc:
            if (0xfb < uVar10) {
LAB_001a7ce4:
              uVar12 = 0;
            }
LAB_001a7ce8:
            uVar10 = 0x3f;
            goto LAB_001a7cec;
          }
          iVar14 = iVar15;
          if (uVar10 < 0xe0) goto LAB_001a7e1c;
          iVar14 = iVar15 + 1;
          if (pcVar9[iVar14] == '\0') goto LAB_001a7cd0;
          iVar14 = iVar15 + 2;
          cVar2 = pcVar9[iVar14];
LAB_001a7d2c:
          uVar12 = (uint)cVar2;
          if (0xef < uVar10) {
            if (uVar12 == 0) goto LAB_001a7cdc;
            iVar14 = iVar14 + 1;
            uVar12 = (uint)pcVar9[iVar14];
          }
LAB_001a7d40:
          if (0xf7 < uVar10) {
            if (uVar12 == 0) goto LAB_001a7cdc;
            iVar14 = iVar14 + 1;
            uVar12 = (uint)pcVar9[iVar14];
          }
LAB_001a7d54:
          if (uVar10 < 0xfc) goto LAB_001a7ce8;
          if (uVar12 == 0) goto LAB_001a7ce4;
          iVar14 = iVar14 + 1;
          lVar8 = 0x80;
          uVar12 = (uint)pcVar9[iVar14];
        }
      }
      dVar17 = dVar17 + param_3 * (double)(int)((uint)(*(byte **)(PTR_PTR_00501bf0 +
                                                                 (long)*(int *)((long)puVar16 +
                                                                               lVar8) * 8))[1] -
                                               (uint)**(byte **)(PTR_PTR_00501bf0 +
                                                                (long)*(int *)((long)puVar16 + lVar8
                                                                              ) * 8));
      iVar15 = iVar14;
    } while (uVar12 != 0);
  }
  lVar8 = lrint((double)param_2 + dVar17);
  *in_x8 = (int)lVar8;
  if ((undefined4 *)(ulong)(uint)param_4 != (undefined4 *)0x0) {
    lVar8 = lrint((double)param_2 * 0.5 + param_3 * (double)uVar1);
    *(undefined4 *)(ulong)(uint)param_4 = (int)lVar8;
  }
  return;
}


==================================================================

### FUNC 001a7e74 (960 bytes) name=fillConvexPoly

/* cv::fillConvexPoly(cv::_InputOutputArray const&, cv::_InputArray const&, cv::Scalar_<double>
   const&, int, int) */

void cv::fillConvexPoly(_InputOutputArray *param_1,_InputArray *param_2,Scalar_ *param_3,int param_4
                       ,int param_5)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  int iVar7;
  char *pcVar8;
  Mat *pMVar9;
  int *piVar10;
  undefined4 *puVar11;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  Point_ *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar7 = _InputArray::kind((_InputArray *)param_1);
  if (iVar7 == 0x10000) {
    pMVar9 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar9;
    local_bc = *(int *)(pMVar9 + 4);
    local_b8 = *(undefined4 *)(pMVar9 + 8);
    local_b4 = *(undefined4 *)(pMVar9 + 0xc);
    local_b0 = *(undefined8 *)(pMVar9 + 0x10);
    local_a8 = *(undefined8 *)(pMVar9 + 0x18);
    local_a0 = *(undefined8 *)(pMVar9 + 0x20);
    local_98 = *(undefined8 *)(pMVar9 + 0x28);
    local_90 = *(undefined8 *)(pMVar9 + 0x30);
    local_88 = *(long *)(pMVar9 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar10 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar2) {
          *piVar10 = *piVar10 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar9 + 0x48);
      local_68 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar7 = _InputArray::kind(param_2);
  if (iVar7 == 0x10000) {
    pMVar9 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar9;
    local_5c = *(int *)(pMVar9 + 4);
    local_58 = *(int *)(pMVar9 + 8);
    local_54 = *(int *)(pMVar9 + 0xc);
    local_50 = *(Point_ **)(pMVar9 + 0x10);
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar10 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar2) {
          *piVar10 = *piVar10 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar7 = Mat::checkVector((Mat *)&local_60,2,4,true);
  if (iVar7 < 0) {
    local_d0 = 0;
    local_c8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_d0,0x22);
    uVar6 = s_points_checkVector_2__CV_32S__>__0043f508._24_8_;
    uVar5 = s_points_checkVector_2__CV_32S__>__0043f508._16_8_;
    uVar4 = s_points_checkVector_2__CV_32S__>__0043f508._8_8_;
    uVar3 = s_points_checkVector_2__CV_32S__>__0043f508._0_8_;
    *(undefined2 *)(pcVar8 + 0x20) = s_points_checkVector_2__CV_32S__>__0043f508._32_2_;
    *(undefined8 *)pcVar8 = uVar3;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    *(undefined8 *)(pcVar8 + 0x10) = uVar5;
    *(undefined8 *)(pcVar8 + 0x18) = uVar6;
    error(-0xd7,(String *)&local_d0,
          "void cv::fillConvexPoly(cv::InputOutputArray, cv::InputArray, const Scalar&, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x88b);
    String::deallocate((String *)&local_d0);
  }
  fillConvexPoly((Mat *)&local_c0,local_50,
                 (int)(local_58 * local_54 + (local_60 >> 3 & 0x1ff) * local_58 * local_54) / 2,
                 param_3,param_4,param_5);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar7 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (Point_ *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar7 = 0;
    piVar10 = local_20;
    do {
      *piVar10 = 0;
      iVar7 = iVar7 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar7 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar7 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    puVar11 = local_80;
    do {
      *puVar11 = 0;
      iVar7 = iVar7 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 001a8298 (176 bytes) name=cvClipLine

undefined1 cvClipLine(undefined8 param_1,long param_2,long param_3)

{
  undefined2 uVar1;
  undefined1 uVar2;
  undefined8 *puVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_2 == 0) || (param_3 == 0)) {
    local_10 = 0;
    local_8 = 0;
    puVar3 = (undefined8 *)cv::String::allocate((String *)&local_10,10);
    uVar1 = DAT_0043f538;
    *puVar3 = DAT_0043f530;
    *(undefined2 *)(puVar3 + 1) = uVar1;
    cv::error(-0xd7,(String *)&local_10,"int cvClipLine(CvSize, CvPoint*, CvPoint*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x9b5);
    cv::String::deallocate((String *)&local_10);
  }
  local_10 = param_1;
  uVar2 = cv::clipLine((String *)&local_10,param_2,param_3);
  return uVar2;
}


==================================================================

### FUNC 001a835c (136 bytes) name=cvEllipse2Poly

long cvEllipse2Poly(undefined8 param_1,undefined8 param_2)

{
  void *pvVar1;
  void *in_x5;
  size_t __n;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  undefined4 local_1c;
  void *local_18;
  long local_10;
  undefined8 local_8;
  
  local_18 = (void *)0x0;
  local_10 = 0;
  local_8 = 0;
  local_28 = (undefined4)param_1;
  local_24 = (undefined4)((ulong)param_1 >> 0x20);
  local_20 = (undefined4)param_2;
  local_1c = (undefined4)((ulong)param_2 >> 0x20);
  cv::ellipse2Poly(&local_28,&local_20);
  pvVar1 = local_18;
  __n = local_10 - (long)local_18;
  memcpy(in_x5,local_18,__n);
  operator_delete(pvVar1);
  return (long)__n >> 3;
}


==================================================================

### FUNC 001a8400 (372 bytes) name=cvColorToScalar

undefined1  [16] cvColorToScalar(double param_1,ulong param_2)

{
  uint uVar1;
  ulong uVar2;
  long lVar3;
  undefined1 auVar4 [16];
  
  if ((param_2 & 7) == 0) {
    uVar2 = lrint(param_1);
    uVar1 = (uint)uVar2;
    if (((param_2 & 0xffffffff) >> 3 & 0x1ff) == 0) {
      if (0xff < uVar1) {
        uVar2 = (ulong)-(uint)(0 < (int)uVar1);
      }
      param_1 = (double)(uVar2 & 0xff);
    }
    else {
      param_1 = (double)(uVar1 & 0xff);
    }
  }
  else if (((uint)param_2 & 7) == 1) {
    lVar3 = lrint(param_1);
    if (((param_2 & 0xffffffff) >> 3 & 0x1ff) == 0) {
      if ((int)lVar3 + 0x80U < 0x100) {
        param_1 = (double)(int)(char)lVar3;
      }
      else {
        param_1 = DAT_001a8578;
        if (0 < (int)lVar3) {
          param_1 = DAT_001a8580;
        }
      }
    }
    else {
      param_1 = (double)(int)(char)lVar3;
    }
  }
  auVar4._8_8_ = 0;
  auVar4._0_8_ = param_1;
  return auVar4;
}


==================================================================

### FUNC 001a8588 (440 bytes) name=cvInitLineIterator

undefined4
cvInitLineIterator(cv *param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4,
                  undefined4 param_5,AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined4 uVar4;
  char *pcVar5;
  int iVar6;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98;
  undefined4 local_94;
  undefined8 local_90 [3];
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar6 = (int)param_6;
  if (param_4 == (undefined8 *)0x0) {
    local_60 = param_4;
    local_58 = param_4;
    pcVar5 = (char *)cv::String::allocate((String *)&local_60,0xd);
    cVar2 = s_iterator____0_0043f540[0xc];
    uVar4 = s_iterator____0_0043f540._8_4_;
    param_6 = (AutoBuffer *)(ulong)(byte)s_iterator____0_0043f540[0xc];
    *(undefined8 *)pcVar5 = s_iterator____0_0043f540._0_8_;
    *(undefined4 *)(pcVar5 + 8) = uVar4;
    pcVar5[0xc] = cVar2;
    cv::error(-0xd7,(String *)&local_60,
              "int cvInitLineIterator(const CvArr*, CvPoint, CvPoint, CvLineIterator*, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0xa09);
    cv::String::deallocate((String *)&local_60);
  }
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  local_a0 = (undefined4)param_2;
  local_9c = (undefined4)((ulong)param_2 >> 0x20);
  local_98 = (undefined4)param_3;
  local_94 = (undefined4)((ulong)param_3 >> 0x20);
  cv::LineIterator::LineIterator
            ((LineIterator *)local_90,(Mat *)&local_60,&local_a0,&local_98,param_5,iVar6 != 0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  *(undefined4 *)(param_4 + 1) = local_78;
  *(undefined4 *)(param_4 + 2) = local_70;
  *(undefined4 *)((long)param_4 + 0xc) = local_6c;
  *(undefined4 *)(param_4 + 3) = local_68;
  *(undefined4 *)((long)param_4 + 0x14) = local_64;
  *param_4 = local_90[0];
  return local_74;
}


==================================================================

### FUNC 001a877c (288 bytes) name=cvFillConvexPoly

void cvFillConvexPoly(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                     cv *param_5,Point_ *param_6,int param_7,int param_8,uint param_9)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,(AutoBuffer *)(ulong)param_9);
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::fillConvexPoly(aMStack_60,param_6,param_7,(Scalar_ *)&local_80,param_8,param_9);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001a88c4 (600 bytes) name=cvInitFont

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvInitFont(undefined8 param_1,double param_2,double param_3,double param_4,long param_5,
               uint param_6,uint param_7,char *param_8,int *param_9,char param_10,char *param_11,
               undefined2 param_12)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 *puVar7;
  undefined4 *puVar8;
  size_t __n;
  void *__dest;
  String *this;
  String *pSVar9;
  int iVar10;
  char *pcVar11;
  char *pcVar12;
  undefined8 uVar13;
  undefined8 extraout_x8;
  undefined8 in_x9;
  undefined8 extraout_x9;
  String *this_00;
  char *__s;
  String *unaff_x23;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 local_8;
  
  this_00 = (String *)(ulong)param_6;
  __s = (char *)(ulong)param_7;
  if ((((uint)(0.0 < param_2) & (uint)(0.0 < param_3) & ~param_7 >> 0x1f) == 0) ||
     (pcVar12 = param_8, param_5 == 0)) {
    unaff_x23 = (String *)&local_10;
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate(unaff_x23,0x37);
    cVar6 = s_font____0____hscale_>_0____vscal_0043f550[0x36];
    uVar5 = s_font____0____hscale_>_0____vscal_0043f550._52_2_;
    uVar13 = s_font____0____hscale_>_0____vscal_0043f550._40_8_;
    param_11 = (char *)s_font____0____hscale_>_0____vscal_0043f550._32_8_;
    uVar4 = s_font____0____hscale_>_0____vscal_0043f550._24_8_;
    uVar3 = s_font____0____hscale_>_0____vscal_0043f550._16_8_;
    uVar2 = s_font____0____hscale_>_0____vscal_0043f550._8_8_;
    uVar1 = s_font____0____hscale_>_0____vscal_0043f550._0_8_;
    pcVar12 = "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp";
    param_9 = (int *)0xa6e;
    *(undefined4 *)(pcVar11 + 0x30) = s_font____0____hscale_>_0____vscal_0043f550._48_4_;
    *(undefined2 *)(pcVar11 + 0x34) = uVar5;
    pcVar11[0x36] = cVar6;
    *(undefined8 *)pcVar11 = uVar1;
    *(undefined8 *)(pcVar11 + 8) = uVar2;
    *(undefined8 *)(pcVar11 + 0x10) = uVar3;
    *(undefined8 *)(pcVar11 + 0x18) = uVar4;
    *(char **)(pcVar11 + 0x20) = param_11;
    *(undefined8 *)(pcVar11 + 0x28) = uVar13;
    cv::error(-0xd7,unaff_x23,"void cvInitFont(CvFont*, int, double, double, double, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0xa6e);
    param_10 = (char)pcVar11;
    param_12 = (undefined2)uVar13;
    cv::String::deallocate(unaff_x23);
    param_1 = extraout_x8;
    in_x9 = extraout_x9;
  }
  if (7 < (param_6 & 0xf)) {
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined8 *)cv::String::allocate((String *)&local_10,0x11);
    uVar2 = DAT_0043f4f8;
    uVar1 = _LAB_0043f4f0;
    *(undefined1 *)(puVar7 + 2) = DAT_0043f500;
    *puVar7 = uVar1;
    puVar7[1] = uVar2;
    cv::error(-0xd3,(String *)&local_10,"const int* cv::getFontData(int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x7f5);
    cv::String::deallocate((String *)&local_10);
    puVar8 = (undefined4 *)0x0;
    goto LAB_001a898c;
  }
  pcVar11 = (char *)((ulong)(param_6 >> 4) & 1);
  this = (String *)
         ((long)(char)(&switchD_001a8a78::switchdataD_0043e518)[param_6 & 0xf] * 4 + 0x1a8a7c);
  iVar10 = (int)pcVar11;
  pSVar9 = (String *)0x1a8a7c;
  switch(param_6 & 0xf) {
  default:
    puVar8 = &DAT_0043fca0;
    break;
  case 1:
    if (iVar10 == 0) {
      puVar8 = (undefined4 *)&LAB_0043e620;
    }
    else {
      puVar8 = &DAT_0043e800;
    }
    break;
  case 2:
    puVar8 = &DAT_004408c0;
    break;
  case 3:
    if (iVar10 == 0) {
      puVar8 = &DAT_00440a40;
    }
    else {
      puVar8 = &DAT_0043ee90;
    }
    break;
  case 4:
    if (iVar10 == 0) {
      puVar8 = &DAT_0043f290;
    }
    else {
      puVar8 = &DAT_0043eb20;
    }
    break;
  case 5:
    if (iVar10 == 0) {
      puVar8 = &DAT_0043fa20;
    }
    else {
      puVar8 = &DAT_0043fe20;
    }
    break;
  case 6:
    puVar8 = &DAT_0043ed10;
    break;
  case 7:
    puVar8 = &DAT_0043f060;
    break;
  case 8:
    goto LAB_001a8b78;
  case 0xe:
    local_8 = 0;
    param_11 = (char *)cv::String::allocate(this,0x1a8a7c);
    param_10 = s_text____0_____font____0_0043f588[0x16];
    param_12 = s_text____0_____font____0_0043f588._20_2_;
    in_x9 = s_text____0_____font____0_0043f588._8_8_;
    param_1 = s_text____0_____font____0_0043f588._0_8_;
    this = (String *)0xffffff29;
    pcVar11 = "void cvGetTextSize(const char*, const CvFont*, CvSize*, int*)";
    pcVar12 = "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp";
    param_9 = (int *)0xa7d;
    *(undefined4 *)(param_11 + 0x10) = s_text____0_____font____0_0043f588._16_4_;
    pSVar9 = this_00;
  case 0xc:
    *(undefined2 *)(param_11 + 0x14) = param_12;
    param_11[0x16] = param_10;
    *(undefined8 *)param_11 = param_1;
    *(undefined8 *)(param_11 + 8) = in_x9;
    cv::error((int)this,pSVar9,pcVar11,pcVar12,(int)param_9);
  case 10:
    cv::String::deallocate(this_00);
    local_10 = 0;
    local_8 = 0;
    if (__s != (char *)0x0) {
LAB_001a8b78:
      __n = strlen(__s);
      __dest = (void *)cv::String::allocate(this_00,__n);
      memcpy(__dest,__s,__n);
    }
    cv::getTextSize((cv *)this_00,(String *)(ulong)*(uint *)(param_5 + 0x28),
                    *(int *)(param_5 + 0x54),
                    (double)(*(float *)(param_5 + 0x48) + *(float *)(param_5 + 0x4c)) * 0.5,
                    (int)unaff_x23,param_9);
    cv::String::deallocate(this_00);
    if ((undefined8 *)((ulong)param_8 & 0xffffffff) != (undefined8 *)0x0) {
      *(undefined8 *)((ulong)param_8 & 0xffffffff) = uStack_18;
    }
    return;
  }
LAB_001a898c:
  *(undefined4 **)(param_5 + 0x30) = puVar8;
  *(uint *)(param_5 + 0x28) = param_6;
  *(uint *)(param_5 + 0x54) = param_7;
  *(undefined8 *)(param_5 + 0x40) = 0;
  *(undefined8 *)(param_5 + 0x38) = 0;
  *(int *)(param_5 + 0x5c) = (int)param_8;
  *(float *)(param_5 + 0x48) = (float)param_2;
  *(float *)(param_5 + 0x4c) = (float)param_3;
  *(float *)(param_5 + 0x50) = (float)param_4;
  return;
}


==================================================================

### FUNC 001a8b44 (308 bytes) name=cvGetTextSize

void cvGetTextSize(char *param_1,long param_2,undefined8 *param_3,int param_4,int *param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  char cVar4;
  size_t __n;
  void *__dest;
  char *pcVar5;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == (char *)0x0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x17);
    cVar4 = s_text____0_____font____0_0043f588[0x16];
    uVar3 = s_text____0_____font____0_0043f588._20_2_;
    uVar2 = s_text____0_____font____0_0043f588._8_8_;
    uVar1 = s_text____0_____font____0_0043f588._0_8_;
    param_5 = (int *)0xa7d;
    *(undefined4 *)(pcVar5 + 0x10) = s_text____0_____font____0_0043f588._16_4_;
    *(undefined2 *)(pcVar5 + 0x14) = uVar3;
    pcVar5[0x16] = cVar4;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-0xd7,(String *)&local_10,
              "void cvGetTextSize(const char*, const CvFont*, CvSize*, int*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0xa7d);
    cv::String::deallocate((String *)&local_10);
    local_10 = 0;
    local_8 = 0;
    if (param_1 == (char *)0x0) goto LAB_001a8ba0;
  }
  local_8 = 0;
  local_10 = 0;
  __n = strlen(param_1);
  __dest = (void *)cv::String::allocate((String *)&local_10,__n);
  memcpy(__dest,param_1,__n);
LAB_001a8ba0:
  cv::getTextSize((cv *)&local_10,(String *)(ulong)*(uint *)(param_2 + 0x28),
                  *(int *)(param_2 + 0x54),
                  (double)(*(float *)(param_2 + 0x48) + *(float *)(param_2 + 0x4c)) * 0.5,param_4,
                  param_5);
  cv::String::deallocate((String *)&local_10);
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = local_18;
  }
  return;
}


==================================================================

### FUNC 001a8ca0 (364 bytes) name=FUN_001a8ca0

void FUN_001a8ca0(long *param_1,undefined8 *param_2)

{
  undefined8 *puVar1;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  ulong uVar8;
  undefined8 *puVar9;
  ulong uVar10;
  long lVar11;
  long lVar12;
  ulong uVar2;
  
  puVar6 = (undefined8 *)param_1[1];
  if (puVar6 != (undefined8 *)param_1[2]) {
    if (puVar6 != (undefined8 *)0x0) {
      *puVar6 = *param_2;
    }
    param_1[1] = (long)(puVar6 + 1);
    return;
  }
  lVar11 = *param_1;
  uVar8 = (long)puVar6 - lVar11 >> 3;
  if (uVar8 == 0) {
    lVar12 = 8;
    uVar2 = 1;
  }
  else {
    uVar10 = uVar8 * 2;
    lVar12 = -8;
    uVar2 = 0x1fffffffffffffff;
    if ((uVar8 <= uVar10) && (uVar10 < 0x2000000000000000)) {
      lVar12 = uVar8 << 4;
      puVar1 = (undefined8 *)0x0;
      uVar2 = uVar10;
      puVar7 = puVar6;
      if (uVar10 == 0) goto LAB_001a8d20;
    }
  }
  puVar1 = (undefined8 *)FUN_001a1810(uVar2);
  puVar7 = (undefined8 *)param_1[1];
LAB_001a8d20:
  puVar9 = (undefined8 *)((long)puVar1 + ((long)puVar6 - lVar11));
  if (puVar9 != (undefined8 *)0x0) {
    *puVar9 = *param_2;
  }
  puVar3 = (undefined8 *)*param_1;
  puVar4 = puVar1;
  puVar9 = puVar3;
  if (puVar6 != puVar3) {
    do {
      if (puVar4 != (undefined8 *)0x0) {
        *puVar4 = *puVar9;
      }
      puVar9 = puVar9 + 1;
      puVar4 = puVar4 + 1;
    } while (puVar6 != puVar9);
    puVar4 = (undefined8 *)
             ((long)puVar1 + ((long)puVar6 - (long)(puVar3 + 1) & 0xfffffffffffffff8U) + 8);
  }
  puVar4 = puVar4 + 1;
  puVar5 = puVar4;
  puVar9 = puVar6;
  if (puVar6 != puVar7) {
    do {
      if (puVar5 != (undefined8 *)0x0) {
        *puVar5 = *puVar9;
      }
      puVar9 = puVar9 + 1;
      puVar5 = puVar5 + 1;
    } while (puVar7 != puVar9);
    puVar4 = (undefined8 *)
             ((long)puVar4 + ((long)puVar7 - (long)(puVar6 + 1) & 0xfffffffffffffff8U) + 8);
  }
  if (puVar3 != (undefined8 *)0x0) {
    operator_delete(puVar3);
  }
  *param_1 = (long)puVar1;
  param_1[1] = (long)puVar4;
  param_1[2] = (long)puVar1 + lVar12;
  return;
}


==================================================================

### FUNC 001a8e0c (904 bytes) name=FUN_001a8e0c

void FUN_001a8e0c(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  undefined4 uVar2;
  long lVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  ulong uVar10;
  ulong uVar11;
  long lVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  ulong uVar18;
  
  if (param_3 == 0) {
    return;
  }
  puVar16 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar16 >> 3)) {
    lVar17 = (long)puVar16 - (long)param_2;
    uVar1 = *(undefined4 *)param_4;
    uVar2 = *(undefined4 *)((long)param_4 + 4);
    uVar7 = *param_4;
    uVar6 = *param_4;
    uVar5 = *param_4;
    uVar4 = *param_4;
    if (param_3 < (ulong)(lVar17 >> 3)) {
      puVar15 = puVar16 + -param_3;
      puVar9 = puVar16;
      for (puVar8 = puVar15; puVar16 != puVar8; puVar8 = puVar8 + 1) {
        if (puVar9 != (undefined8 *)0x0) {
          *puVar9 = *puVar8;
        }
        puVar9 = puVar9 + 1;
      }
      param_1[1] = puVar16 + param_3;
      puVar8 = puVar16;
      puVar9 = puVar15;
      if (7 < (long)puVar15 - (long)param_2) {
        do {
          puVar14 = puVar8 + -1;
          *(undefined4 *)puVar14 = *(undefined4 *)(puVar9 + -1);
          *(undefined4 *)((long)puVar8 + -4) = *(undefined4 *)((long)puVar9 + -4);
          puVar8 = puVar14;
          puVar9 = puVar9 + -1;
        } while (puVar14 != (undefined8 *)((long)puVar16 - ((long)puVar15 - (long)param_2)));
      }
      if (param_2 != param_2 + param_3) {
        uVar10 = (ulong)((long)(param_2 + param_3) - (long)(param_2 + 1)) >> 3;
        uVar18 = (uVar10 - 1 >> 1) + 1;
        if (uVar10 != 0) {
          uVar11 = 0;
          puVar16 = param_2;
          do {
            puVar16[1] = uVar5;
            *puVar16 = uVar4;
            uVar11 = uVar11 + 1;
            puVar16 = puVar16 + 2;
          } while (uVar11 < uVar18);
          param_2 = param_2 + uVar18 * 2;
          if (uVar18 * 2 - (uVar10 + 1) == 0) {
            return;
          }
        }
LAB_001a9000:
        *(undefined4 *)param_2 = uVar1;
        *(undefined4 *)((long)param_2 + 4) = uVar2;
        return;
      }
    }
    else {
      lVar12 = param_3 - (lVar17 >> 3);
      puVar8 = puVar16;
      for (lVar3 = lVar12; lVar3 != 0; lVar3 = lVar3 + -1) {
        if (puVar8 != (undefined8 *)0x0) {
          *(undefined4 *)puVar8 = uVar1;
          *(undefined4 *)((long)puVar8 + 4) = uVar2;
        }
        puVar8 = puVar8 + 1;
      }
      puVar15 = puVar16 + lVar12;
      param_1[1] = puVar15;
      puVar9 = puVar15;
      puVar8 = param_2;
      if (puVar16 != param_2) {
        do {
          if (puVar9 != (undefined8 *)0x0) {
            *puVar9 = *puVar8;
          }
          puVar8 = puVar8 + 1;
          puVar9 = puVar9 + 1;
        } while (puVar16 != puVar8);
        param_1[1] = (long)puVar15 + lVar17;
        uVar10 = (ulong)((long)puVar16 - (long)(param_2 + 1)) >> 3;
        uVar18 = (uVar10 - 1 >> 1) + 1;
        if (uVar10 != 0) {
          uVar11 = 0;
          puVar16 = param_2;
          do {
            puVar16[1] = uVar7;
            *puVar16 = uVar6;
            uVar11 = uVar11 + 1;
            puVar16 = puVar16 + 2;
          } while (uVar11 < uVar18);
          param_2 = param_2 + uVar18 * 2;
          if (uVar10 + 1 == uVar18 * 2) {
            return;
          }
        }
        goto LAB_001a9000;
      }
      param_1[1] = (long)puVar15 + lVar17;
    }
    return;
  }
  puVar8 = (undefined8 *)*param_1;
  uVar18 = (long)puVar16 - (long)puVar8 >> 3;
  if (0x1fffffffffffffff - uVar18 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar10 = uVar18;
  if (uVar18 < param_3) {
    uVar10 = param_3;
  }
  uVar10 = uVar10 + uVar18;
  if ((uVar10 < uVar18) || (0x1fffffffffffffff < uVar10)) {
    lVar17 = (long)param_2 - (long)puVar8;
    uVar10 = 0xfffffffffffffff8;
  }
  else {
    lVar17 = (long)param_2 - (long)puVar8;
    if (uVar10 == 0) {
      uVar10 = 0;
      puVar9 = (undefined8 *)0x0;
      goto LAB_001a9098;
    }
    uVar10 = uVar10 * 8;
  }
  puVar9 = operator_new(uVar10);
  puVar16 = (undefined8 *)param_1[1];
  puVar8 = (undefined8 *)*param_1;
LAB_001a9098:
  puVar15 = (undefined8 *)((long)puVar9 + lVar17);
  uVar18 = param_3;
  do {
    if (puVar15 != (undefined8 *)0x0) {
      *puVar15 = *param_4;
    }
    uVar18 = uVar18 - 1;
    puVar15 = puVar15 + 1;
  } while (uVar18 != 0);
  puVar14 = puVar9;
  puVar15 = puVar8;
  if (param_2 != puVar8) {
    do {
      if (puVar14 != (undefined8 *)0x0) {
        *puVar14 = *puVar15;
      }
      puVar15 = puVar15 + 1;
      puVar14 = puVar14 + 1;
    } while (param_2 != puVar15);
    puVar14 = (undefined8 *)
              ((long)puVar9 + ((long)param_2 - (long)(puVar8 + 1) & 0xfffffffffffffff8U) + 8);
  }
  puVar14 = puVar14 + param_3;
  puVar13 = puVar14;
  puVar15 = param_2;
  if (param_2 != puVar16) {
    do {
      if (puVar13 != (undefined8 *)0x0) {
        *puVar13 = *puVar15;
      }
      puVar15 = puVar15 + 1;
      puVar13 = puVar13 + 1;
    } while (puVar16 != puVar15);
    puVar14 = (undefined8 *)
              ((long)puVar14 + ((long)puVar16 - (long)(param_2 + 1) & 0xfffffffffffffff8U) + 8);
  }
  if (puVar8 != (undefined8 *)0x0) {
    operator_delete(puVar8);
  }
  *param_1 = puVar9;
  param_1[1] = puVar14;
  param_1[2] = (long)puVar9 + uVar10;
  return;
}


==================================================================

### FUNC 001a9194 (1040 bytes) name=FUN_001a9194

void FUN_001a9194(int *param_1,int *param_2,long param_3,undefined4 param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int *piVar5;
  bool bVar6;
  bool bVar7;
  int *piVar8;
  undefined8 uVar9;
  long lVar10;
  int *piVar11;
  int *piVar12;
  int *piVar13;
  long lVar14;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  undefined8 local_18;
  undefined8 uStack_10;
  undefined8 local_8;
  
  lVar10 = (long)param_2 - (long)param_1;
  if (0x197 < lVar10) {
    if (param_3 != 0) {
      piVar13 = param_1 + 6;
      piVar8 = param_2;
LAB_001a91d8:
      iVar1 = *piVar13;
      param_3 = param_3 + -1;
      lVar10 = (((long)piVar8 - (long)param_1 >> 3) * -0x5555555555555555) / 2;
      piVar5 = param_1 + lVar10 * 6;
      iVar4 = param_1[lVar10 * 6];
      bVar6 = SBORROW4(iVar1,iVar4);
      bVar7 = iVar1 - iVar4 < 0;
      if (iVar1 == iVar4) {
        iVar3 = param_1[8];
        iVar2 = piVar5[2];
        bVar6 = SBORROW4(iVar3,iVar2);
        bVar7 = iVar3 - iVar2 < 0;
        if (iVar3 == iVar2) {
          bVar6 = SBORROW4(param_1[9],piVar5[3]);
          bVar7 = param_1[9] - piVar5[3] < 0;
        }
      }
      iVar3 = piVar8[-6];
      piVar11 = piVar13;
      piVar12 = piVar8;
      if (bVar7 == bVar6) {
        bVar6 = SBORROW4(iVar1,iVar3);
        bVar7 = iVar1 - iVar3 < 0;
        if (iVar1 == iVar3) {
          iVar1 = param_1[8];
          iVar2 = piVar8[-4];
          bVar6 = SBORROW4(iVar1,iVar2);
          bVar7 = iVar1 - iVar2 < 0;
          if (iVar1 == iVar2) {
            bVar6 = SBORROW4(param_1[9],piVar8[-3]);
            bVar7 = param_1[9] - piVar8[-3] < 0;
          }
        }
        if (bVar7 == bVar6) {
          bVar6 = SBORROW4(iVar4,iVar3);
          bVar7 = iVar4 - iVar3 < 0;
          if (iVar4 == iVar3) {
            iVar1 = piVar5[2];
            iVar4 = piVar8[-4];
            bVar6 = SBORROW4(iVar1,iVar4);
            bVar7 = iVar1 - iVar4 < 0;
            if (iVar1 == iVar4) {
              bVar6 = SBORROW4(piVar5[3],piVar8[-3]);
              bVar7 = piVar5[3] - piVar8[-3] < 0;
            }
          }
          if (bVar7 != bVar6) goto LAB_001a923c;
          goto LAB_001a93b4;
        }
      }
      else {
        bVar6 = SBORROW4(iVar4,iVar3);
        bVar7 = iVar4 - iVar3 < 0;
        if (iVar4 == iVar3) {
          iVar4 = piVar5[2];
          iVar2 = piVar8[-4];
          bVar6 = SBORROW4(iVar4,iVar2);
          bVar7 = iVar4 - iVar2 < 0;
          if (iVar4 == iVar2) {
            bVar6 = SBORROW4(piVar5[3],piVar8[-3]);
            bVar7 = piVar5[3] - piVar8[-3] < 0;
          }
        }
        if (bVar7 != bVar6) {
LAB_001a93b4:
          uVar9 = *(undefined8 *)(piVar5 + 2);
          iVar1 = *param_1;
          iVar4 = param_1[1];
          iVar3 = param_1[2];
          iVar2 = param_1[3];
          *(undefined8 *)param_1 = *(undefined8 *)piVar5;
          *(undefined8 *)(param_1 + 2) = uVar9;
          uVar9 = *(undefined8 *)(param_1 + 4);
          *(undefined8 *)(param_1 + 4) = *(undefined8 *)(piVar5 + 4);
          param_1[lVar10 * 6] = iVar1;
          piVar5[1] = iVar4;
          piVar5[2] = iVar3;
          piVar5[3] = iVar2;
          *(undefined8 *)(piVar5 + 4) = uVar9;
          goto LAB_001a927c;
        }
        bVar6 = SBORROW4(iVar1,iVar3);
        bVar7 = iVar1 - iVar3 < 0;
        if (iVar1 == iVar3) {
          iVar1 = param_1[8];
          iVar4 = piVar8[-4];
          bVar6 = SBORROW4(iVar1,iVar4);
          bVar7 = iVar1 - iVar4 < 0;
          if (iVar1 == iVar4) {
            bVar6 = SBORROW4(param_1[9],piVar8[-3]);
            bVar7 = param_1[9] - piVar8[-3] < 0;
          }
        }
        if (bVar7 != bVar6) {
LAB_001a923c:
          uVar9 = *(undefined8 *)(piVar8 + -4);
          iVar1 = *param_1;
          iVar4 = param_1[1];
          iVar3 = param_1[2];
          iVar2 = param_1[3];
          *(undefined8 *)param_1 = *(undefined8 *)(piVar8 + -6);
          *(undefined8 *)(param_1 + 2) = uVar9;
          uVar9 = *(undefined8 *)(param_1 + 4);
          *(undefined8 *)(param_1 + 4) = *(undefined8 *)(piVar8 + -2);
          piVar8[-6] = iVar1;
          piVar8[-5] = iVar4;
          piVar8[-4] = iVar3;
          piVar8[-3] = iVar2;
          *(undefined8 *)(piVar8 + -2) = uVar9;
          goto LAB_001a927c;
        }
      }
      iVar1 = *param_1;
      iVar4 = param_1[2];
      *(undefined8 *)param_1 = *(undefined8 *)piVar13;
      *(undefined8 *)(param_1 + 2) = *(undefined8 *)(param_1 + 8);
      uVar9 = *(undefined8 *)(param_1 + 4);
      *(undefined8 *)(param_1 + 4) = *(undefined8 *)(param_1 + 10);
      param_1[6] = iVar1;
      param_1[7] = param_1[1];
      param_1[8] = iVar4;
      param_1[9] = param_1[3];
      *(undefined8 *)(param_1 + 10) = uVar9;
LAB_001a927c:
      do {
        iVar1 = *param_1;
        do {
          while( true ) {
            param_2 = piVar11;
            iVar4 = *param_2;
            bVar7 = iVar4 < iVar1;
            if ((iVar1 != iVar4) || (bVar7 = param_2[2] < param_1[2], param_2[2] != param_1[2]))
            break;
            piVar11 = param_2 + 6;
            if (param_1[3] <= param_2[3]) goto LAB_001a92cc;
          }
          piVar11 = param_2 + 6;
        } while (bVar7);
LAB_001a92cc:
        piVar5 = piVar12 + -6;
        do {
          while ((piVar12 = piVar5, bVar7 = iVar1 < *piVar12, iVar1 == *piVar12 &&
                 (bVar7 = param_1[2] < piVar12[2], param_1[2] == piVar12[2]))) {
            piVar5 = piVar12 + -6;
            if (piVar12[3] <= param_1[3]) goto LAB_001a931c;
          }
          piVar5 = piVar12 + -6;
        } while (bVar7);
LAB_001a931c:
        if (piVar12 <= param_2) goto LAB_001a9360;
        uVar9 = *(undefined8 *)(piVar12 + 2);
        iVar1 = param_2[1];
        iVar3 = param_2[2];
        iVar2 = param_2[3];
        *(undefined8 *)param_2 = *(undefined8 *)piVar12;
        *(undefined8 *)(param_2 + 2) = uVar9;
        uVar9 = *(undefined8 *)(param_2 + 4);
        *(undefined8 *)(param_2 + 4) = *(undefined8 *)(piVar12 + 4);
        *piVar12 = iVar4;
        piVar12[1] = iVar1;
        piVar12[2] = iVar3;
        piVar12[3] = iVar2;
        *(undefined8 *)(piVar12 + 4) = uVar9;
        piVar11 = param_2 + 6;
      } while( true );
    }
LAB_001a9490:
    lVar10 = (lVar10 >> 3) * -0x5555555555555555;
    lVar14 = lVar10 + -2 >> 1;
    piVar13 = param_1 + lVar14 * 6;
    while( true ) {
      local_30 = *(undefined8 *)(piVar13 + 4);
      local_40 = *(undefined8 *)piVar13;
      uStack_38 = *(undefined8 *)(piVar13 + 2);
      piVar13 = piVar13 + -6;
      local_18 = local_40;
      uStack_10 = uStack_38;
      local_8 = local_30;
      FUN_001a3350(param_1,lVar14,lVar10,&local_40);
      if (lVar14 == 0) break;
      lVar14 = lVar14 + -1;
    }
    do {
      piVar13 = param_2 + -6;
      uVar9 = *(undefined8 *)(param_1 + 2);
      local_40 = *(undefined8 *)piVar13;
      uStack_38 = *(undefined8 *)(param_2 + -4);
      local_30 = *(undefined8 *)(param_2 + -2);
      *(undefined8 *)piVar13 = *(undefined8 *)param_1;
      *(undefined8 *)(param_2 + -4) = uVar9;
      *(undefined8 *)(param_2 + -2) = *(undefined8 *)(param_1 + 4);
      local_18 = local_40;
      uStack_10 = uStack_38;
      local_8 = local_30;
      FUN_001a3350(param_1,0,((long)piVar13 - (long)param_1 >> 3) * -0x5555555555555555,&local_40);
      param_2 = piVar13;
    } while (0x2f < (long)piVar13 - (long)param_1);
  }
  return;
LAB_001a9360:
  FUN_001a9194(param_2,piVar8,param_3,param_4);
  lVar10 = (long)param_2 - (long)param_1;
  if (lVar10 < 0x198) {
    return;
  }
  piVar8 = param_2;
  if (param_3 == 0) goto LAB_001a9490;
  goto LAB_001a91d8;
}


==================================================================

### FUNC 001a95a4 (2460 bytes) name=FUN_001a95a4

void FUN_001a95a4(long param_1,long *param_2,undefined1 *param_3)

{
  bool bVar1;
  bool bVar2;
  undefined1 *puVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  undefined8 uVar10;
  int iVar11;
  long lVar12;
  undefined8 *puVar13;
  ulong uVar14;
  int *piVar15;
  int iVar16;
  uint uVar17;
  int *piVar18;
  int *piVar19;
  uint uVar20;
  undefined1 *puVar21;
  undefined8 *puVar22;
  int *piVar23;
  long lVar24;
  int iVar25;
  undefined8 uVar26;
  int *piVar27;
  ulong uVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int *piVar32;
  uint uVar33;
  int iVar34;
  int *piVar35;
  undefined8 uVar36;
  undefined8 local_20;
  undefined8 uStack_18;
  int *local_10;
  
  local_10 = (int *)0x0;
  uStack_18 = 0;
  local_20 = 0;
  piVar35 = (int *)*param_2;
  piVar32 = (int *)param_2[1];
  iVar6 = (*(int **)(param_1 + 0x40))[1];
  iVar31 = **(int **)(param_1 + 0x40);
  lVar12 = ((long)piVar32 - (long)piVar35 >> 3) * -0x5555555555555555;
  iVar9 = (int)lVar12;
  if (*(int *)(param_1 + 4) < 1) {
    uVar33 = 0;
  }
  else {
    uVar33 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  if (iVar9 < 2) {
    return;
  }
  iVar25 = 0x7fffffff;
  iVar29 = -0x80000000;
  iVar30 = 0x7fffffff;
  iVar34 = -0x80000000;
  piVar15 = piVar35 + 2;
  do {
    iVar11 = piVar15[-1];
    piVar19 = piVar15 + 6;
    iVar7 = piVar15[-2];
    iVar16 = *piVar15;
    if (iVar7 < iVar30) {
      iVar30 = iVar7;
    }
    iVar7 = iVar16 + (iVar11 - iVar7) * piVar15[1];
    if (iVar34 < iVar11) {
      iVar34 = iVar11;
    }
    iVar11 = iVar7;
    if (iVar16 < iVar7) {
      iVar11 = iVar16;
    }
    if (iVar11 < iVar25) {
      iVar25 = iVar11;
    }
    if (iVar7 < iVar16) {
      iVar7 = iVar16;
    }
    if (iVar29 < iVar7) {
      iVar29 = iVar7;
    }
    piVar15 = piVar19;
  } while (piVar19 != piVar35 + (ulong)(iVar9 - 1) * 6 + 8);
  if (iVar34 < 0) {
    return;
  }
  if (iVar31 <= iVar30) {
    return;
  }
  if (iVar29 < 0) {
    return;
  }
  if (iVar6 * 0x10000 <= iVar25) {
    return;
  }
  if (piVar35 != piVar32) {
    FUN_001a9194(piVar35,piVar32,(0x3f - LZCOUNT(lVar12)) * 2,0);
    if ((long)piVar32 - (long)piVar35 < 0x198) {
      FUN_001a3544(piVar35,piVar32);
    }
    else {
      piVar15 = piVar35 + 0x60;
      FUN_001a3544(piVar35,piVar15);
      if (piVar32 != piVar15) {
LAB_001a9750:
        iVar30 = *piVar15;
        uVar36 = *(undefined8 *)piVar15;
        iVar25 = piVar15[2];
        iVar29 = piVar15[3];
        uVar10 = *(undefined8 *)(piVar15 + 2);
        uVar26 = *(undefined8 *)(piVar15 + 4);
        piVar35 = piVar15;
        do {
          bVar2 = iVar30 < piVar35[-6];
          if ((iVar30 == piVar35[-6]) && (bVar2 = iVar25 < piVar35[-4], iVar25 == piVar35[-4])) {
            if (piVar35[-3] <= iVar29) goto LAB_001a97c4;
          }
          else if (!bVar2) goto LAB_001a97c4;
          *(undefined8 *)piVar35 = *(undefined8 *)(piVar35 + -6);
          *(undefined8 *)(piVar35 + 2) = *(undefined8 *)(piVar35 + -4);
          *(undefined8 *)(piVar35 + 4) = *(undefined8 *)(piVar35 + -2);
          piVar35 = piVar35 + -6;
        } while( true );
      }
    }
LAB_001a97ec:
    piVar35 = (int *)param_2[1];
  }
  piVar32 = (int *)param_2[2];
  local_20 = CONCAT44(local_20._4_4_,0x7fffffff);
  if (piVar32 != piVar35) {
    if (piVar35 != (int *)0x0) {
      *(int **)(piVar35 + 4) = local_10;
      *(undefined8 *)piVar35 = local_20;
      *(undefined8 *)(piVar35 + 2) = uStack_18;
    }
    piVar27 = (int *)*param_2;
    param_2[1] = (long)(piVar35 + 6);
    goto LAB_001a9824;
  }
  piVar15 = (int *)*param_2;
  lVar24 = (long)piVar35 - (long)piVar15;
  lVar12 = lVar24 >> 3;
  if (lVar12 * -0x5555555555555555 == 0) {
    uVar14 = 0x18;
LAB_001a9dc8:
    piVar27 = operator_new(uVar14);
    piVar19 = piVar27 + 6;
    piVar35 = (int *)param_2[1];
    piVar15 = (int *)*param_2;
  }
  else {
    uVar28 = lVar12 * 0x5555555555555556;
    uVar14 = 0xfffffffffffffff0;
    if (((uVar28 < (ulong)(lVar12 * -0x5555555555555555)) || (0xaaaaaaaaaaaaaaa < uVar28)) ||
       (uVar14 = lVar12 << 4, uVar28 != 0)) goto LAB_001a9dc8;
    piVar19 = (int *)0x18;
    piVar27 = (int *)0x0;
  }
  puVar13 = (undefined8 *)((long)piVar27 + lVar24);
  if (puVar13 != (undefined8 *)0x0) {
    puVar13[2] = local_10;
    *puVar13 = local_20;
    puVar13[1] = uStack_18;
  }
  piVar18 = piVar27;
  piVar23 = piVar15;
  if (piVar32 != piVar15) {
    do {
      if (piVar18 != (int *)0x0) {
        uVar36 = *(undefined8 *)(piVar23 + 2);
        *(undefined8 *)piVar18 = *(undefined8 *)piVar23;
        *(undefined8 *)(piVar18 + 2) = uVar36;
        *(undefined8 *)(piVar18 + 4) = *(undefined8 *)(piVar23 + 4);
      }
      piVar23 = piVar23 + 6;
      piVar18 = piVar18 + 6;
    } while (piVar32 != piVar23);
    piVar19 = piVar27 + ((((ulong)((long)piVar32 - (long)(piVar15 + 6)) >> 3) * 0xaaaaaaaaaaaaaab &
                         0x1fffffffffffffff) + 1) * 6 + 6;
  }
  piVar23 = piVar32;
  piVar18 = piVar19;
  if (piVar32 != piVar35) {
    do {
      if (piVar18 != (int *)0x0) {
        uVar36 = *(undefined8 *)(piVar23 + 2);
        *(undefined8 *)piVar18 = *(undefined8 *)piVar23;
        *(undefined8 *)(piVar18 + 2) = uVar36;
        *(undefined8 *)(piVar18 + 4) = *(undefined8 *)(piVar23 + 4);
      }
      piVar23 = piVar23 + 6;
      piVar18 = piVar18 + 6;
    } while (piVar23 != piVar35);
    piVar19 = piVar19 + ((((ulong)((long)piVar23 - (long)(piVar32 + 6)) >> 3) * 0xaaaaaaaaaaaaaab &
                         0x1fffffffffffffff) + 1) * 6;
  }
  if (piVar15 != (int *)0x0) {
    operator_delete(piVar15);
  }
  *param_2 = (long)piVar27;
  param_2[1] = (long)piVar19;
  param_2[2] = (long)piVar27 + uVar14;
LAB_001a9824:
  iVar30 = *piVar27;
  if (iVar31 < iVar34) {
    iVar34 = iVar31;
  }
  local_10 = (int *)0x0;
  if (iVar30 < iVar34) {
    lVar12 = (long)iVar30;
    uVar4 = -(int)param_3 & 0xf;
    uVar5 = uVar33;
    if (uVar4 < uVar33) {
      uVar5 = uVar4;
    }
    uVar8 = (uVar33 - 1) - uVar5;
    uVar4 = ((uVar33 - uVar5) - 0x10 >> 4) + 1;
    iVar31 = 0;
    iVar29 = uVar4 * 0x10;
    iVar25 = iVar30;
    do {
      bVar2 = false;
      piVar35 = local_10;
      piVar32 = (int *)&local_20;
      while( true ) {
        while (piVar15 = piVar35, piVar15 != (int *)0x0) {
          if (piVar15[1] != iVar30) {
            if ((iVar25 <= iVar30) && (piVar27[2] <= piVar15[2])) goto LAB_001a98c4;
            piVar35 = *(int **)(piVar15 + 4);
            goto LAB_001a98ec;
          }
          *(undefined8 *)(piVar32 + 4) = *(undefined8 *)(piVar15 + 4);
          piVar35 = *(int **)(piVar15 + 4);
        }
        if (iVar30 != iVar25) break;
LAB_001a98c4:
        if (iVar9 <= iVar31) break;
        iVar31 = iVar31 + 1;
        *(int **)(piVar32 + 4) = piVar27;
        *(int **)(piVar27 + 4) = piVar15;
        piVar35 = piVar15;
        piVar15 = piVar27;
        piVar27 = (int *)(*param_2 + (long)iVar31 * 0x18);
LAB_001a98ec:
        if (bVar2) {
          if (iVar30 < 0) {
LAB_001a9c28:
            iVar11 = piVar32[2];
          }
          else {
            iVar11 = piVar32[2];
            iVar7 = piVar15[2];
            iVar25 = iVar7;
            iVar16 = iVar11;
            if (iVar7 < iVar11) {
              iVar25 = iVar11;
              iVar16 = iVar7;
            }
            iVar25 = iVar25 >> 0x10;
            iVar7 = iVar16 + 0xffff >> 0x10;
            if ((iVar7 < iVar6) && (-1 < iVar25)) {
              if (iVar7 < 0) {
                iVar7 = 0;
              }
              iVar16 = iVar6 + -1;
              if (iVar25 < iVar6) {
                iVar16 = iVar25;
              }
              lVar24 = *(long *)(param_1 + 0x10) + **(long **)(param_1 + 0x48) * lVar12;
              puVar21 = (undefined1 *)(lVar24 + (int)(iVar7 * uVar33));
              puVar3 = (undefined1 *)(lVar24 + (int)(iVar16 * uVar33));
              if (puVar21 <= puVar3) {
                do {
                  if (0 < (int)uVar33) {
                    if ((param_3 < puVar21 + 0x10 && puVar21 < param_3 + 0x10) || (uVar33 < 0x16)) {
                      lVar24 = 0;
                      do {
                        puVar21[lVar24] = param_3[lVar24];
                        lVar24 = lVar24 + 1;
                      } while ((int)lVar24 < (int)uVar33);
                    }
                    else {
                      uVar20 = uVar5;
                      if (uVar5 == 0) {
                        uVar14 = 0;
                        if (0xe < uVar8) goto LAB_001a9a94;
                        iVar25 = 1;
                        *puVar21 = *param_3;
                      }
                      else {
                        *puVar21 = *param_3;
                        if ((((uVar5 != 1) && (puVar21[1] = param_3[1], uVar5 != 2)) &&
                            (puVar21[2] = param_3[2], uVar5 != 3)) &&
                           ((puVar21[3] = param_3[3], uVar5 != 4 &&
                            (puVar21[4] = param_3[4], uVar5 != 5)))) {
                          puVar21[5] = param_3[5];
                          if (uVar5 == 6) {
                            uVar20 = 6;
                          }
                          else {
                            puVar21[6] = param_3[6];
                            if ((((uVar5 != 7) && (puVar21[7] = param_3[7], uVar5 != 8)) &&
                                ((puVar21[8] = param_3[8], uVar5 != 9 &&
                                 (((puVar21[9] = param_3[9], uVar5 != 10 &&
                                   (puVar21[10] = param_3[10], uVar5 != 0xb)) &&
                                  (puVar21[0xb] = param_3[0xb], uVar5 != 0xc)))))) &&
                               (puVar21[0xc] = param_3[0xc], uVar5 != 0xd)) {
                              puVar21[0xd] = param_3[0xd];
                              if (uVar5 == 0xf) {
                                puVar21[0xe] = param_3[0xe];
                              }
                              else {
                                uVar20 = 0xe;
                              }
                            }
                          }
                        }
                        uVar14 = (ulong)uVar5;
                        if (0xe < uVar8) {
LAB_001a9a94:
                          uVar17 = 0;
                          puVar13 = (undefined8 *)(param_3 + uVar14);
                          puVar22 = (undefined8 *)(puVar21 + uVar14);
                          do {
                            uVar36 = *puVar13;
                            uVar17 = uVar17 + 1;
                            puVar22[1] = puVar13[1];
                            *puVar22 = uVar36;
                            puVar13 = puVar13 + 2;
                            puVar22 = puVar22 + 2;
                          } while (uVar17 < uVar4);
                          uVar20 = uVar20 + iVar29;
                          if (iVar29 == uVar33 - uVar5) goto LAB_001a9c1c;
                        }
                        iVar25 = uVar20 + 1;
                        puVar21[(int)uVar20] = param_3[(int)uVar20];
                        if ((int)uVar33 <= iVar25) goto LAB_001a9c1c;
                      }
                      iVar11 = iVar25 + 1;
                      puVar21[iVar25] = param_3[iVar25];
                      if (iVar11 < (int)uVar33) {
                        iVar7 = iVar25 + 2;
                        puVar21[iVar11] = param_3[iVar11];
                        if (iVar7 < (int)uVar33) {
                          iVar11 = iVar25 + 3;
                          puVar21[iVar7] = param_3[iVar7];
                          if (iVar11 < (int)uVar33) {
                            iVar7 = iVar25 + 4;
                            puVar21[iVar11] = param_3[iVar11];
                            if (iVar7 < (int)uVar33) {
                              iVar11 = iVar25 + 5;
                              puVar21[iVar7] = param_3[iVar7];
                              if (iVar11 < (int)uVar33) {
                                iVar7 = iVar25 + 6;
                                puVar21[iVar11] = param_3[iVar11];
                                if (iVar7 < (int)uVar33) {
                                  iVar11 = iVar25 + 7;
                                  puVar21[iVar7] = param_3[iVar7];
                                  if (iVar11 < (int)uVar33) {
                                    iVar7 = iVar25 + 8;
                                    puVar21[iVar11] = param_3[iVar11];
                                    if (iVar7 < (int)uVar33) {
                                      iVar11 = iVar25 + 9;
                                      puVar21[iVar7] = param_3[iVar7];
                                      if (iVar11 < (int)uVar33) {
                                        iVar7 = iVar25 + 10;
                                        puVar21[iVar11] = param_3[iVar11];
                                        if (iVar7 < (int)uVar33) {
                                          iVar11 = iVar25 + 0xb;
                                          puVar21[iVar7] = param_3[iVar7];
                                          if (iVar11 < (int)uVar33) {
                                            iVar7 = iVar25 + 0xc;
                                            puVar21[iVar11] = param_3[iVar11];
                                            if (iVar7 < (int)uVar33) {
                                              iVar25 = iVar25 + 0xd;
                                              puVar21[iVar7] = param_3[iVar7];
                                              if (iVar25 < (int)uVar33) {
                                                puVar21[iVar25] = param_3[iVar25];
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
LAB_001a9c1c:
                  puVar21 = puVar21 + (int)uVar33;
                } while (puVar21 <= puVar3);
                goto LAB_001a9c28;
              }
            }
          }
          iVar25 = piVar15[3];
          piVar32[2] = piVar32[3] + iVar11;
          piVar15[2] = piVar15[2] + iVar25;
        }
        iVar25 = *piVar27;
        bVar2 = (bool)(bVar2 ^ 1);
        piVar32 = piVar15;
      }
      bVar2 = false;
      piVar32 = local_10;
      piVar35 = (int *)&local_20;
      piVar15 = (int *)0x0;
      do {
        while ((piVar19 = piVar35, piVar15 != piVar32 &&
               (piVar35 = *(int **)(piVar32 + 4), piVar35 != (int *)0x0))) {
          iVar11 = piVar35[2];
          if (piVar32[2] <= piVar35[2]) {
            do {
              piVar19 = piVar32;
              piVar32 = piVar35;
              if ((piVar15 == piVar32) || (piVar35 = *(int **)(piVar32 + 4), piVar35 == (int *)0x0))
              goto LAB_001a9ce8;
              bVar1 = iVar11 <= piVar35[2];
              iVar11 = piVar35[2];
            } while (bVar1);
          }
          *(int **)(piVar19 + 4) = piVar35;
          bVar2 = true;
          *(undefined8 *)(piVar32 + 4) = *(undefined8 *)(piVar35 + 4);
          *(int **)(piVar35 + 4) = piVar32;
        }
LAB_001a9ce8:
      } while (((bVar2) && (local_10 != piVar19)) &&
              (piVar32 = local_10, piVar35 = (int *)&local_20, piVar15 = piVar19,
              piVar19 != (int *)&local_20));
      iVar30 = iVar30 + 1;
      lVar12 = lVar12 + 1;
    } while (iVar30 != iVar34);
  }
  return;
LAB_001a97c4:
  piVar15 = piVar15 + 6;
  *(undefined8 *)(piVar35 + 4) = uVar26;
  *(undefined8 *)(piVar35 + 2) = uVar10;
  *(undefined8 *)piVar35 = uVar36;
  if (piVar32 == piVar15) goto LAB_001a97ec;
  goto LAB_001a9750;
}


==================================================================

### FUNC 001a9f40 (2944 bytes) name=FUN_001a9f40

void FUN_001a9f40(long param_1,int *param_2,uint *param_3,undefined4 param_4,int param_5,int param_6
                 ,undefined1 *param_7,int param_8,int param_9)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  undefined4 uVar8;
  undefined1 *puVar9;
  int *piVar10;
  int iVar11;
  int iVar12;
  ulong uVar13;
  int *piVar14;
  int *piVar15;
  undefined8 *puVar16;
  ulong uVar17;
  uint uVar18;
  long lVar19;
  ulong uVar20;
  int *piVar21;
  long lVar22;
  int *piVar23;
  long lVar24;
  undefined8 uVar25;
  undefined8 *puVar26;
  uint uVar27;
  uint uVar28;
  int iVar29;
  uint uVar30;
  uint uVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  long lVar35;
  uint uVar36;
  int iVar37;
  int local_80;
  int local_7c;
  int local_68;
  int local_64;
  int local_60;
  int local_5c;
  int local_58;
  int local_54;
  int local_50;
  int local_4c;
  int local_48;
  int local_44;
  int *local_40;
  int *local_38;
  int *local_30;
  undefined8 local_28;
  int local_20 [7];
  int local_4;
  
  uVar8 = 0x5a;
  uVar28 = (int)*param_3 >> 0x1f;
  uVar28 = (*param_3 ^ uVar28) - uVar28;
  uVar27 = (int)param_3[1] >> 0x1f;
  uVar27 = (param_3[1] ^ uVar27) - uVar27;
  *param_3 = uVar28;
  param_3[1] = uVar27;
  uVar3 = uVar27;
  if ((int)uVar27 < (int)uVar28) {
    uVar3 = uVar28;
  }
  iVar11 = (int)(uVar3 + 0x8000) >> 0x10;
  if (((2 < iVar11) && (uVar8 = 0x1e, 9 < iVar11)) && (uVar8 = 0x12, 0xe < iVar11)) {
    uVar8 = 5;
  }
  local_48 = *param_2;
  local_44 = param_2[1];
  local_40 = (int *)0x0;
  local_38 = (int *)0x0;
  local_30 = (int *)0x0;
  local_28 = (void *)CONCAT44(uVar27,uVar28);
  cv::ellipse2Poly(&local_48,&local_28,param_4,param_5,param_6,uVar8,&local_40);
  piVar23 = local_38;
  piVar10 = local_40;
  if (param_8 < 0) {
    if (param_6 - param_5 < 0x168) {
      if (local_38 == local_30) {
        lVar19 = (long)local_38 - (long)local_40;
        uVar20 = lVar19 >> 3;
        if (uVar20 == 0) {
          uVar17 = 1;
LAB_001aa9c0:
          piVar10 = (int *)FUN_001a1810(uVar17);
          uVar20 = uVar17;
        }
        else {
          uVar13 = uVar20 * 2;
          uVar17 = 0x1fffffffffffffff;
          if ((uVar13 < uVar20) || (0x1fffffffffffffff < uVar13)) goto LAB_001aa9c0;
          uVar20 = 0;
          piVar10 = (int *)0x0;
          uVar17 = uVar13;
          if (uVar13 != 0) goto LAB_001aa9c0;
        }
        puVar16 = (undefined8 *)((long)piVar10 + lVar19);
        if (puVar16 != (undefined8 *)0x0) {
          *puVar16 = *(undefined8 *)param_2;
        }
        piVar14 = piVar10;
        piVar21 = local_40;
        if (piVar23 != local_40) {
          do {
            if (piVar14 != (int *)0x0) {
              *(undefined8 *)piVar14 = *(undefined8 *)piVar21;
            }
            piVar21 = piVar21 + 2;
            piVar14 = piVar14 + 2;
          } while (piVar23 != piVar21);
          piVar14 = (int *)((long)piVar10 +
                           ((long)piVar23 - (long)(local_40 + 2) & 0xfffffffffffffff8U) + 8);
        }
        piVar14 = piVar14 + 2;
        piVar15 = piVar14;
        piVar21 = piVar23;
        if (piVar23 != local_38) {
          do {
            if (piVar15 != (int *)0x0) {
              *(undefined8 *)piVar15 = *(undefined8 *)piVar21;
            }
            piVar21 = piVar21 + 2;
            piVar15 = piVar15 + 2;
          } while (local_38 != piVar21);
          piVar14 = (int *)((long)piVar14 +
                           ((long)local_38 - (long)(piVar23 + 2) & 0xfffffffffffffff8U) + 8);
        }
        if (local_40 != (int *)0x0) {
          operator_delete(local_40);
        }
        local_30 = piVar10 + uVar20 * 2;
        local_40 = piVar10;
      }
      else {
        if (local_38 != (int *)0x0) {
          *(undefined8 *)local_38 = *(undefined8 *)param_2;
        }
        piVar14 = local_38 + 2;
      }
      local_28 = (void *)0x0;
      local_20[0] = 0;
      local_20[1] = 0;
      local_20[2] = 0;
      local_20[3] = 0;
      local_48 = 0;
      local_44 = 0;
      local_38 = piVar14;
      FUN_001a6dec(param_1,local_40,(ulong)((long)piVar14 - (long)local_40) >> 3,&local_28,param_7,
                   param_9,0x10,&local_48);
      FUN_001a95a4(param_1,&local_28,param_7);
      if (local_28 != (void *)0x0) {
        operator_delete(local_28);
      }
    }
    else {
      lVar19 = *(long *)(param_1 + 0x10);
      uVar20 = (long)local_38 - (long)local_40 >> 3;
      iVar11 = (*(int **)(param_1 + 0x40))[1];
      iVar29 = **(int **)(param_1 + 0x40);
      uVar3 = (uint)uVar20;
      if (*(int *)(param_1 + 4) < 1) {
        uVar28 = 0;
      }
      else {
        uVar28 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
      }
      if (param_9 < 0x10) {
        local_7c = 0x8000;
        local_80 = 0x8000;
      }
      else {
        local_7c = 0;
        local_80 = 0xffff;
      }
      iVar37 = local_40[1];
      iVar33 = *local_40;
      iVar32 = iVar33;
      iVar34 = iVar37;
      if ((int)uVar3 < 1) {
        uVar27 = 0;
      }
      else if (param_9 < 9) {
        uVar36 = 0;
        uVar27 = 0;
        piVar23 = local_40;
        iVar6 = local_40[(long)(int)uVar3 * 2 + -2];
        iVar12 = local_40[(long)(int)uVar3 * 2 + -1];
        do {
          local_54 = iVar12;
          local_58 = iVar6;
          iVar12 = piVar23[1];
          iVar6 = *piVar23;
          if (iVar12 < iVar37) {
            iVar37 = iVar12;
            uVar27 = uVar36;
          }
          if (iVar34 < iVar12) {
            iVar34 = iVar12;
          }
          if (iVar32 < iVar6) {
            iVar32 = iVar6;
          }
          if (iVar6 < iVar33) {
            iVar33 = iVar6;
          }
          local_50 = iVar6;
          local_4c = iVar12;
          FUN_001a3bb8(param_1,&local_58,&local_50,param_7);
          uVar36 = uVar36 + 1;
          piVar23 = piVar23 + 2;
        } while (uVar36 != uVar3);
      }
      else {
        uVar27 = 0;
        piVar23 = local_40;
        uVar36 = uVar27;
        iVar6 = local_40[(long)(int)uVar3 * 2 + -2];
        iVar12 = local_40[(long)(int)uVar3 * 2 + -1];
        do {
          local_44 = iVar12;
          local_48 = iVar6;
          iVar12 = piVar23[1];
          iVar6 = *piVar23;
          local_28 = *(void **)piVar23;
          if (iVar12 < iVar37) {
            iVar37 = iVar12;
            uVar27 = uVar36;
          }
          if (iVar34 < iVar12) {
            iVar34 = iVar12;
          }
          if (iVar32 < iVar6) {
            iVar32 = iVar6;
          }
          if (iVar6 < iVar33) {
            iVar33 = iVar6;
          }
          FUN_001a5090(param_1,&local_48,&local_28,param_7);
          piVar23 = piVar23 + 2;
          uVar36 = uVar36 + 1;
        } while (uVar36 != uVar3);
      }
      uVar36 = iVar34 + 0x8000 >> 0x10;
      iVar34 = iVar37 + 0x8000 >> 0x10;
      if ((iVar33 + 0x8000 >> 0x10 < iVar11 &&
           (2 < (int)uVar3 && -1 < (int)(iVar32 + 0x8000U | uVar36))) &&
         (uVar30 = (uint)(iVar29 <= iVar34), iVar29 > iVar34)) {
        uVar4 = iVar29 - 1;
        if ((int)uVar36 < iVar29) {
          uVar4 = uVar36;
        }
        uVar36 = -(int)param_7 & 0xf;
        lVar35 = *(long *)(param_1 + 0x50);
        uVar5 = uVar28;
        if (uVar36 < uVar28) {
          uVar5 = uVar36;
        }
        uVar31 = 1;
        local_20[4] = uVar3 - 1;
        lVar19 = lVar19 + iVar34 * lVar35;
        uVar36 = ((uVar28 - uVar5) - 0x10 >> 4) + 1;
        uVar7 = (uVar28 - 1) - uVar5;
        uVar20 = uVar20 & 0xffffffff;
        local_4 = iVar34;
        local_20[3] = uVar27;
        local_20[2] = iVar34;
        iVar33 = uVar36 * 0x10;
        local_28 = (void *)CONCAT44(1,uVar27);
        iVar29 = iVar34;
        do {
          piVar23 = (int *)&local_28;
          if ((iVar29 < (int)uVar4 || iVar34 == iVar29) || (param_9 < 0x10)) {
            do {
              if (piVar23[4] <= iVar29) {
                iVar37 = *piVar23;
                piVar14 = piVar10 + (long)iVar37 * 2;
                iVar32 = piVar14[1] + 0x8000 >> 0x10;
                if (((int)uVar20 == 0) || (iVar29 < iVar32)) {
                  iVar12 = 0;
                }
                else {
                  do {
                    iVar12 = *piVar14;
                    uVar27 = (int)uVar20 - 1;
                    uVar20 = (ulong)uVar27;
                    iVar37 = (piVar23[1] + iVar37) -
                             (-(uint)((int)uVar3 <= piVar23[1] + iVar37) & uVar3);
                    piVar14 = piVar10 + (long)iVar37 * 2;
                    iVar32 = piVar14[1] + 0x8000 >> 0x10;
                    if (iVar29 < iVar32) break;
                  } while (uVar27 != 0);
                }
                iVar6 = *piVar14;
                if (iVar32 <= iVar29) goto LAB_001aa0b8;
                piVar23[4] = iVar32;
                iVar2 = (iVar32 - iVar29) * 2;
                *piVar23 = iVar37;
                piVar23[2] = iVar12;
                iVar37 = 0;
                if (iVar2 != 0) {
                  iVar37 = ((iVar32 - iVar29) + (iVar6 - iVar12) * 2) / iVar2;
                }
                piVar23[3] = iVar37;
              }
              piVar23 = piVar23 + 5;
            } while (piVar23 != &param_9);
          }
          lVar24 = (long)(int)uVar30;
          lVar22 = (long)(int)uVar31;
          iVar32 = local_20[lVar24 * 5];
          iVar37 = local_20[lVar22 * 5];
          if (iVar37 < iVar32) {
            uVar30 = uVar30 ^ 1;
            uVar31 = uVar31 ^ 1;
            lVar24 = (long)(int)uVar30;
            lVar22 = (long)(int)uVar31;
            iVar32 = local_20[lVar24 * 5];
            iVar37 = local_20[lVar22 * 5];
          }
          if (-1 < iVar29) {
            iVar12 = local_7c + iVar37 >> 0x10;
            iVar6 = local_80 + iVar32 >> 0x10;
            if ((-1 < iVar12) && (iVar6 < iVar11)) {
              if (iVar6 < 0) {
                iVar6 = 0;
              }
              iVar2 = iVar11 + -1;
              if (iVar12 < iVar11) {
                iVar2 = iVar12;
              }
              puVar9 = (undefined1 *)(lVar19 + (int)(iVar6 * uVar28));
              puVar1 = (undefined1 *)(lVar19 + (int)(iVar2 * uVar28));
              if (puVar9 <= puVar1) {
                do {
                  if (0 < (int)uVar28) {
                    if ((param_7 < puVar9 + 0x10 && puVar9 < param_7 + 0x10) || (uVar28 < 0x16)) {
                      lVar35 = 0;
                      do {
                        puVar9[lVar35] = param_7[lVar35];
                        lVar35 = lVar35 + 1;
                      } while ((int)lVar35 < (int)uVar28);
                    }
                    else {
                      uVar27 = uVar5;
                      if (uVar5 == 0) {
                        uVar17 = 0;
                        if (0xe < uVar7) goto LAB_001aa558;
                        iVar12 = 1;
                        *puVar9 = *param_7;
                      }
                      else {
                        *puVar9 = *param_7;
                        if ((((uVar5 != 1) && (puVar9[1] = param_7[1], uVar5 != 2)) &&
                            (puVar9[2] = param_7[2], uVar5 != 3)) &&
                           ((puVar9[3] = param_7[3], uVar5 != 4 &&
                            (puVar9[4] = param_7[4], uVar5 != 5)))) {
                          puVar9[5] = param_7[5];
                          if (uVar5 == 6) {
                            uVar27 = 6;
                          }
                          else {
                            puVar9[6] = param_7[6];
                            if ((((uVar5 != 7) && (puVar9[7] = param_7[7], uVar5 != 8)) &&
                                ((puVar9[8] = param_7[8], uVar5 != 9 &&
                                 (((puVar9[9] = param_7[9], uVar5 != 10 &&
                                   (puVar9[10] = param_7[10], uVar5 != 0xb)) &&
                                  (puVar9[0xb] = param_7[0xb], uVar5 != 0xc)))))) &&
                               (puVar9[0xc] = param_7[0xc], uVar5 != 0xd)) {
                              puVar9[0xd] = param_7[0xd];
                              if (uVar5 == 0xf) {
                                puVar9[0xe] = param_7[0xe];
                              }
                              else {
                                uVar27 = 0xe;
                              }
                            }
                          }
                        }
                        uVar17 = (ulong)uVar5;
                        if (0xe < uVar7) {
LAB_001aa558:
                          uVar18 = 0;
                          puVar16 = (undefined8 *)(param_7 + uVar17);
                          puVar26 = (undefined8 *)(puVar9 + uVar17);
                          do {
                            uVar25 = *puVar16;
                            uVar18 = uVar18 + 1;
                            puVar26[1] = puVar16[1];
                            *puVar26 = uVar25;
                            puVar16 = puVar16 + 2;
                            puVar26 = puVar26 + 2;
                          } while (uVar18 < uVar36);
                          uVar27 = uVar27 + iVar33;
                          if (iVar33 == uVar28 - uVar5) goto LAB_001aa6ec;
                        }
                        iVar12 = uVar27 + 1;
                        puVar9[(int)uVar27] = param_7[(int)uVar27];
                        if ((int)uVar28 <= iVar12) goto LAB_001aa6ec;
                      }
                      iVar6 = iVar12 + 1;
                      puVar9[iVar12] = param_7[iVar12];
                      if (iVar6 < (int)uVar28) {
                        iVar2 = iVar12 + 2;
                        puVar9[iVar6] = param_7[iVar6];
                        if (iVar2 < (int)uVar28) {
                          iVar6 = iVar12 + 3;
                          puVar9[iVar2] = param_7[iVar2];
                          if (iVar6 < (int)uVar28) {
                            iVar2 = iVar12 + 4;
                            puVar9[iVar6] = param_7[iVar6];
                            if (iVar2 < (int)uVar28) {
                              iVar6 = iVar12 + 5;
                              puVar9[iVar2] = param_7[iVar2];
                              if (iVar6 < (int)uVar28) {
                                iVar2 = iVar12 + 6;
                                puVar9[iVar6] = param_7[iVar6];
                                if (iVar2 < (int)uVar28) {
                                  iVar6 = iVar12 + 7;
                                  puVar9[iVar2] = param_7[iVar2];
                                  if (iVar6 < (int)uVar28) {
                                    iVar2 = iVar12 + 8;
                                    puVar9[iVar6] = param_7[iVar6];
                                    if (iVar2 < (int)uVar28) {
                                      iVar6 = iVar12 + 9;
                                      puVar9[iVar2] = param_7[iVar2];
                                      if (iVar6 < (int)uVar28) {
                                        iVar2 = iVar12 + 10;
                                        puVar9[iVar6] = param_7[iVar6];
                                        if (iVar2 < (int)uVar28) {
                                          iVar6 = iVar12 + 0xb;
                                          puVar9[iVar2] = param_7[iVar2];
                                          if (iVar6 < (int)uVar28) {
                                            iVar2 = iVar12 + 0xc;
                                            puVar9[iVar6] = param_7[iVar6];
                                            if (iVar2 < (int)uVar28) {
                                              iVar12 = iVar12 + 0xd;
                                              puVar9[iVar2] = param_7[iVar2];
                                              if (iVar12 < (int)uVar28) {
                                                puVar9[iVar12] = param_7[iVar12];
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
LAB_001aa6ec:
                  puVar9 = puVar9 + (int)uVar28;
                } while (puVar9 <= puVar1);
                lVar35 = *(long *)(param_1 + 0x50);
              }
            }
          }
          iVar29 = iVar29 + 1;
          lVar19 = lVar19 + lVar35;
          iVar12 = local_20[lVar22 * 5 + 1];
          local_20[lVar24 * 5] = local_20[lVar24 * 5 + 1] + iVar32;
          local_20[lVar22 * 5] = iVar37 + iVar12;
        } while (iVar29 <= (int)uVar4);
      }
    }
  }
  else {
    iVar11 = (int)((long)local_38 - (long)local_40 >> 3);
    if ((0 < iVar11) && (local_40 != (int *)0x0)) {
      if (iVar11 == 1) goto LAB_001aa0bc;
      piVar10 = local_40 + 3;
      uVar25 = 3;
      piVar23 = local_40 + (ulong)(iVar11 - 2) * 2 + 5;
      iVar29 = *local_40;
      iVar11 = local_40[1];
      do {
        iVar34 = piVar10[-1];
        iVar33 = *piVar10;
        local_68 = iVar29;
        local_64 = iVar11;
        local_60 = iVar34;
        local_5c = iVar33;
        FUN_001aaaf0(param_1,&local_68,&local_60,param_7,param_8,param_9,uVar25,0x10);
        piVar10 = piVar10 + 2;
        uVar25 = 2;
        iVar29 = iVar34;
        iVar11 = iVar33;
      } while (piVar10 != piVar23);
    }
  }
LAB_001aa0b8:
  if (local_40 == (int *)0x0) {
    return;
  }
LAB_001aa0bc:
  operator_delete(local_40);
  return;
}


==================================================================

### FUNC 001aaaf0 (2772 bytes) name=FUN_001aaaf0

void FUN_001aaaf0(long param_1,int *param_2,int *param_3,undefined1 *param_4,uint param_5,
                 int param_6,uint param_7,int param_8)

{
  undefined1 *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  long lVar11;
  long lVar12;
  undefined8 *puVar13;
  ulong uVar14;
  int *piVar15;
  long lVar16;
  uint uVar17;
  int *piVar18;
  uint uVar19;
  long lVar20;
  undefined1 *puVar21;
  int iVar22;
  undefined8 *puVar23;
  int iVar24;
  int iVar25;
  uint uVar26;
  int iVar27;
  uint uVar28;
  int iVar29;
  uint uVar30;
  int iVar31;
  undefined8 uVar32;
  double dVar33;
  double __x;
  double dVar34;
  int iVar35;
  double dVar36;
  int iVar37;
  int iVar38;
  undefined8 local_58;
  int local_50 [10];
  undefined8 local_28;
  int local_20 [4];
  undefined4 local_10;
  int local_4;
  
  uVar30 = 0x10 - param_8;
  iVar31 = param_2[1] << (ulong)(uVar30 & 0x1f);
  iVar29 = param_3[1];
  iVar9 = *param_3 << (ulong)(uVar30 & 0x1f);
  iVar37 = *param_2 << (ulong)(uVar30 & 0x1f);
  param_2[1] = iVar31;
  iVar29 = iVar29 << (ulong)(uVar30 & 0x1f);
  *param_2 = iVar37;
  *param_3 = iVar9;
  param_3[1] = iVar29;
  if ((int)param_5 < 2) {
    if (0xf < param_6) {
      local_50[1] = iVar31;
      local_50[0] = iVar37;
      local_28 = CONCAT44(iVar29,iVar9);
      FUN_001a5090(param_1,local_50,&local_28);
      return;
    }
    if ((param_6 != 4 && param_6 != 1) && (param_8 != 0)) {
      local_50[1] = iVar31;
      local_50[0] = iVar37;
      local_28 = CONCAT44(iVar29,iVar9);
      FUN_001a3bb8(param_1,local_50,&local_28);
      return;
    }
    local_50[0] = iVar37 + 0x8000 >> 0x10;
    local_50[1] = iVar31 + 0x8000 >> 0x10;
    iVar31 = iVar9 + 0x8000 >> 0x10;
    iVar29 = iVar29 + 0x8000 >> 0x10;
    *param_2 = local_50[0];
    param_2[1] = local_50[1];
    *param_3 = iVar31;
    param_3[1] = iVar29;
    local_28 = CONCAT44(iVar29,iVar31);
    FUN_001a4e8c(param_1,local_50,&local_28,param_4,param_6);
    return;
  }
  iVar7 = param_5 * 0x8000;
  local_50[2] = 0;
  local_50[3] = 0;
  local_50[0] = 0;
  local_50[1] = 0;
  dVar36 = (double)(iVar29 - iVar31) * DAT_001ab5c8;
  dVar34 = (double)(iVar37 - iVar9) * DAT_001ab5c8;
  local_50[6] = 0;
  local_50[7] = 0;
  local_50[4] = 0;
  local_50[5] = 0;
  __x = dVar36 * dVar36 + dVar34 * dVar34;
  if (ABS(__x) <= DAT_001ab5d0) goto LAB_001aabc4;
  dVar33 = SQRT(__x);
  if (NAN(dVar33)) {
    dVar33 = sqrt(__x);
  }
  dVar33 = ((double)iVar7 + (double)((param_5 & 1) << 0x10) * 0.5) / dVar33;
  lVar11 = lrint(dVar36 * dVar33);
  lVar12 = lrint(dVar34 * dVar33);
  iVar37 = (int)lVar11;
  iVar29 = *param_2 + iVar37;
  iVar9 = (int)lVar12;
  iVar31 = param_2[1] + iVar9;
  local_50[1] = iVar31;
  local_50[0] = iVar29;
  local_50[5] = param_3[1] - iVar9;
  local_50[4] = *param_3 - iVar37;
  local_50[6] = *param_3 + iVar37;
  local_50[3] = param_2[1] - iVar9;
  local_50[2] = *param_2 - iVar37;
  local_50[7] = param_3[1] + iVar9;
  lVar11 = *(long *)(param_1 + 0x10);
  iVar9 = **(int **)(param_1 + 0x40);
  iVar37 = (*(int **)(param_1 + 0x40))[1];
  if (*(int *)(param_1 + 4) < 1) {
    uVar30 = 0;
  }
  else {
    uVar30 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  iVar22 = iVar29;
  iVar38 = iVar31;
  if (param_6 < 0x10) {
    iVar10 = 0x8000;
    iVar35 = iVar10;
    if (8 < param_6) goto LAB_001ab3e8;
    iVar24 = 0;
    iVar27 = 0;
    piVar18 = local_50;
    iVar25 = local_50[6];
    do {
      iVar5 = piVar18[1];
      iVar6 = *piVar18;
      piVar18 = piVar18 + 2;
      if (iVar5 < iVar38) {
        iVar38 = iVar5;
        iVar27 = iVar24;
      }
      iVar24 = iVar24 + 1;
      if (iVar31 < iVar5) {
        iVar31 = iVar5;
      }
      if (iVar29 < iVar6) {
        iVar29 = iVar6;
      }
      if (iVar6 < iVar22) {
        iVar22 = iVar6;
      }
                    /* WARNING: Ignoring partial resolution of indirect */
      local_58._0_4_ = iVar25;
      FUN_001a3bb8(param_1,&local_58,&local_28,param_4);
      iVar25 = iVar6;
    } while (iVar24 != 4);
  }
  else {
    iVar10 = 0;
    iVar35 = 0xffff;
LAB_001ab3e8:
    iVar24 = 0;
    iVar27 = 0;
    piVar18 = local_50;
    iVar25 = local_50[6];
    do {
      iVar5 = piVar18[1];
      iVar6 = *piVar18;
      piVar18 = piVar18 + 2;
      if (iVar5 < iVar38) {
        iVar38 = iVar5;
        iVar27 = iVar24;
      }
      iVar24 = iVar24 + 1;
      if (iVar31 < iVar5) {
        iVar31 = iVar5;
      }
      if (iVar29 < iVar6) {
        iVar29 = iVar6;
      }
      if (iVar6 < iVar22) {
        iVar22 = iVar6;
      }
                    /* WARNING: Ignoring partial resolution of indirect */
      local_58._0_4_ = iVar25;
      FUN_001a5090(param_1,&local_58,&local_28,param_4);
      iVar25 = iVar6;
    } while (iVar24 != 4);
  }
  uVar2 = iVar31 + 0x8000 >> 0x10;
  iVar31 = iVar38 + 0x8000 >> 0x10;
  if ((iVar22 + 0x8000 >> 0x10 < iVar37 && -1 < (int)(iVar29 + 0x8000U | uVar2)) &&
     (uVar26 = (uint)(iVar9 <= iVar31), iVar9 > iVar31)) {
    uVar3 = iVar9 - 1;
    if ((int)uVar2 < iVar9) {
      uVar3 = uVar2;
    }
    uVar2 = -(int)param_4 & 0xf;
    uVar28 = 1;
    lVar12 = *(long *)(param_1 + 0x50);
    local_20[3] = iVar27;
    uVar4 = uVar30;
    if (uVar2 < uVar30) {
      uVar4 = uVar2;
    }
    uVar8 = (uVar30 - 1) - uVar4;
    local_4 = iVar31;
    uVar2 = ((uVar30 - uVar4) - 0x10 >> 4) + 1;
    iVar22 = 4;
    iVar9 = uVar2 * 0x10;
    local_20[2] = iVar31;
    local_10 = 3;
    lVar11 = lVar11 + iVar31 * lVar12;
    local_28 = CONCAT44(1,iVar27);
    iVar29 = iVar31;
    do {
      piVar18 = (int *)&local_28;
      if ((iVar29 < (int)uVar3 || iVar31 == iVar29) || (param_6 < 0x10)) {
        do {
          if (piVar18[4] <= iVar29) {
            iVar24 = *piVar18;
            piVar15 = local_50 + (long)iVar24 * 2;
            iVar38 = local_50[(long)iVar24 * 2 + 1] + 0x8000 >> 0x10;
            if ((iVar22 == 0) || (iVar29 < iVar38)) {
              iVar25 = 0;
            }
            else {
              do {
                iVar25 = *piVar15;
                iVar22 = iVar22 + -1;
                iVar24 = piVar18[1] + iVar24 + (uint)(3 < piVar18[1] + iVar24) * -4;
                piVar15 = local_50 + (long)iVar24 * 2;
                iVar38 = local_50[(long)iVar24 * 2 + 1] + 0x8000 >> 0x10;
                if (iVar29 < iVar38) break;
              } while (iVar22 != 0);
            }
            iVar27 = *piVar15;
            if (iVar38 <= iVar29) goto LAB_001aabc4;
            piVar18[4] = iVar38;
            iVar5 = (iVar38 - iVar29) * 2;
            piVar18[2] = iVar25;
            *piVar18 = iVar24;
            iVar24 = 0;
            if (iVar5 != 0) {
              iVar24 = ((iVar38 - iVar29) + (iVar27 - iVar25) * 2) / iVar5;
            }
            piVar18[3] = iVar24;
          }
          piVar18 = piVar18 + 5;
        } while (piVar18 != (int *)&stack0x00000000);
      }
      lVar16 = (long)(int)uVar26;
      lVar20 = (long)(int)uVar28;
      iVar38 = local_20[lVar16 * 5];
      iVar24 = local_20[lVar20 * 5];
      if (iVar24 < iVar38) {
        uVar26 = uVar26 ^ 1;
        uVar28 = uVar28 ^ 1;
        lVar16 = (long)(int)uVar26;
        lVar20 = (long)(int)uVar28;
        iVar38 = local_20[lVar16 * 5];
        iVar24 = local_20[lVar20 * 5];
      }
      if (-1 < iVar29) {
        iVar25 = iVar10 + iVar24 >> 0x10;
        iVar27 = iVar35 + iVar38 >> 0x10;
        if ((-1 < iVar25) && (iVar27 < iVar37)) {
          if (iVar27 < 0) {
            iVar27 = 0;
          }
          iVar5 = iVar37 + -1;
          if (iVar25 < iVar37) {
            iVar5 = iVar25;
          }
          puVar21 = (undefined1 *)(lVar11 + (int)(iVar27 * uVar30));
          puVar1 = (undefined1 *)(lVar11 + (int)(iVar5 * uVar30));
          if (puVar21 <= puVar1) {
            do {
              if (0 < (int)uVar30) {
                if ((param_4 < puVar21 + 0x10 && puVar21 < param_4 + 0x10) || (uVar30 < 0x16)) {
                  lVar12 = 0;
                  do {
                    puVar21[lVar12] = param_4[lVar12];
                    lVar12 = lVar12 + 1;
                  } while ((int)lVar12 < (int)uVar30);
                }
                else {
                  uVar19 = uVar4;
                  if (uVar4 == 0) {
                    uVar14 = 0;
                    if (0xe < uVar8) goto LAB_001ab1a8;
                    iVar25 = 1;
                    *puVar21 = *param_4;
                  }
                  else {
                    *puVar21 = *param_4;
                    if ((((uVar4 != 1) && (puVar21[1] = param_4[1], uVar4 != 2)) &&
                        (puVar21[2] = param_4[2], uVar4 != 3)) &&
                       ((puVar21[3] = param_4[3], uVar4 != 4 &&
                        (puVar21[4] = param_4[4], uVar4 != 5)))) {
                      puVar21[5] = param_4[5];
                      if (uVar4 == 6) {
                        uVar19 = 6;
                      }
                      else {
                        puVar21[6] = param_4[6];
                        if ((((uVar4 != 7) && (puVar21[7] = param_4[7], uVar4 != 8)) &&
                            ((puVar21[8] = param_4[8], uVar4 != 9 &&
                             (((puVar21[9] = param_4[9], uVar4 != 10 &&
                               (puVar21[10] = param_4[10], uVar4 != 0xb)) &&
                              (puVar21[0xb] = param_4[0xb], uVar4 != 0xc)))))) &&
                           (puVar21[0xc] = param_4[0xc], uVar4 != 0xd)) {
                          puVar21[0xd] = param_4[0xd];
                          if (uVar4 == 0xf) {
                            puVar21[0xe] = param_4[0xe];
                          }
                          else {
                            uVar19 = 0xe;
                          }
                        }
                      }
                    }
                    uVar14 = (ulong)uVar4;
                    if (0xe < uVar8) {
LAB_001ab1a8:
                      uVar17 = 0;
                      puVar13 = (undefined8 *)(param_4 + uVar14);
                      puVar23 = (undefined8 *)(puVar21 + uVar14);
                      do {
                        uVar32 = *puVar13;
                        uVar17 = uVar17 + 1;
                        puVar23[1] = puVar13[1];
                        *puVar23 = uVar32;
                        puVar13 = puVar13 + 2;
                        puVar23 = puVar23 + 2;
                      } while (uVar17 < uVar2);
                      uVar19 = uVar19 + iVar9;
                      if (iVar9 == uVar30 - uVar4) goto LAB_001ab338;
                    }
                    iVar25 = uVar19 + 1;
                    puVar21[(int)uVar19] = param_4[(int)uVar19];
                    if ((int)uVar30 <= iVar25) goto LAB_001ab338;
                  }
                  iVar27 = iVar25 + 1;
                  puVar21[iVar25] = param_4[iVar25];
                  if (iVar27 < (int)uVar30) {
                    iVar5 = iVar25 + 2;
                    puVar21[iVar27] = param_4[iVar27];
                    if (iVar5 < (int)uVar30) {
                      iVar27 = iVar25 + 3;
                      puVar21[iVar5] = param_4[iVar5];
                      if (iVar27 < (int)uVar30) {
                        iVar5 = iVar25 + 4;
                        puVar21[iVar27] = param_4[iVar27];
                        if (iVar5 < (int)uVar30) {
                          iVar27 = iVar25 + 5;
                          puVar21[iVar5] = param_4[iVar5];
                          if (iVar27 < (int)uVar30) {
                            iVar5 = iVar25 + 6;
                            puVar21[iVar27] = param_4[iVar27];
                            if (iVar5 < (int)uVar30) {
                              iVar27 = iVar25 + 7;
                              puVar21[iVar5] = param_4[iVar5];
                              if (iVar27 < (int)uVar30) {
                                iVar5 = iVar25 + 8;
                                puVar21[iVar27] = param_4[iVar27];
                                if (iVar5 < (int)uVar30) {
                                  iVar27 = iVar25 + 9;
                                  puVar21[iVar5] = param_4[iVar5];
                                  if (iVar27 < (int)uVar30) {
                                    iVar5 = iVar25 + 10;
                                    puVar21[iVar27] = param_4[iVar27];
                                    if (iVar5 < (int)uVar30) {
                                      iVar27 = iVar25 + 0xb;
                                      puVar21[iVar5] = param_4[iVar5];
                                      if (iVar27 < (int)uVar30) {
                                        iVar5 = iVar25 + 0xc;
                                        puVar21[iVar27] = param_4[iVar27];
                                        if (iVar5 < (int)uVar30) {
                                          iVar25 = iVar25 + 0xd;
                                          puVar21[iVar5] = param_4[iVar5];
                                          if (iVar25 < (int)uVar30) {
                                            puVar21[iVar25] = param_4[iVar25];
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
LAB_001ab338:
              puVar21 = puVar21 + (int)uVar30;
            } while (puVar21 <= puVar1);
            lVar12 = *(long *)(param_1 + 0x50);
          }
        }
      }
      iVar29 = iVar29 + 1;
      lVar11 = lVar11 + lVar12;
      iVar25 = local_20[lVar20 * 5 + 1];
      local_20[lVar16 * 5] = local_20[lVar16 * 5 + 1] + iVar38;
      local_20[lVar20 * 5] = iVar24 + iVar25;
    } while (iVar29 <= (int)uVar3);
  }
LAB_001aabc4:
  iVar29 = 0;
  do {
    uVar30 = iVar29 + 1;
    if ((param_7 & uVar30) != 0) {
      uVar32 = *(undefined8 *)param_2;
      if (param_6 < 0x10) {
        local_28 = CONCAT44((int)((ulong)uVar32 >> 0x20) + 0x8000 >> 0x10,
                            (int)uVar32 + 0x8000 >> 0x10);
        FUN_001a1838(param_1,&local_28,iVar7 + 0x8000 >> 0x10,param_4);
      }
      else {
        local_58 = uVar32;
        local_28 = CONCAT44(iVar7,iVar7);
        FUN_001a9f40(param_1,&local_58,&local_28,0,0,0x168,param_4,0xffffffff,param_6);
      }
    }
    iVar29 = 1;
    *(undefined8 *)param_2 = *(undefined8 *)param_3;
  } while (uVar30 != 2);
  return;
}


==================================================================

### FUNC 001ab5d8 (816 bytes) name=line

/* cv::line(cv::_InputOutputArray const&, cv::Point_<int>, cv::Point_<int>, cv::Scalar_<double>
   const&, int, int, int) */

void cv::line(_InputArray *param_1,undefined8 *param_2,undefined8 *param_3,Scalar_ *param_4,
             uint param_5,int param_6,uint param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  char *pcVar11;
  undefined4 *puVar12;
  Mat *pMVar13;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined1 auStack_80 [32];
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar13;
    local_5c = *(int *)(pMVar13 + 4);
    local_58 = *(undefined4 *)(pMVar13 + 8);
    local_54 = *(undefined4 *)(pMVar13 + 0xc);
    local_50 = *(undefined8 *)(pMVar13 + 0x10);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar13 + 0x48);
      local_8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((param_6 == 0x10) && ((local_60 & 7) != 0)) {
    param_6 = 8;
  }
  if (0x7fff < param_5) {
    local_a0 = 0;
    local_98 = 0;
    pcVar11 = (char *)String::allocate((String *)&local_a0,0x2c);
    uVar6 = s_0_<__thickness_&&_thickness_<__M_0043f5a0._40_4_;
    uVar9 = s_0_<__thickness_&&_thickness_<__M_0043f5a0._24_8_;
    uVar8 = s_0_<__thickness_&&_thickness_<__M_0043f5a0._16_8_;
    uVar5 = s_0_<__thickness_&&_thickness_<__M_0043f5a0._8_8_;
    uVar4 = s_0_<__thickness_&&_thickness_<__M_0043f5a0._0_8_;
    *(undefined8 *)(pcVar11 + 0x20) = s_0_<__thickness_&&_thickness_<__M_0043f5a0._32_8_;
    *(undefined4 *)(pcVar11 + 0x28) = uVar6;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    *(undefined8 *)(pcVar11 + 0x10) = uVar8;
    *(undefined8 *)(pcVar11 + 0x18) = uVar9;
    error(-0xd7,(String *)&local_a0,
          "void cv::line(cv::InputOutputArray, cv::Point, cv::Point, const Scalar&, int, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x685);
    String::deallocate((String *)&local_a0);
  }
  if (0x10 < param_7) {
    local_90 = 0;
    local_88 = 0;
    pcVar11 = (char *)String::allocate((String *)&local_90,0x1f);
    cVar2 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0[0x1e];
    uVar7 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._28_2_;
    uVar6 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._24_4_;
    uVar5 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._8_8_;
    uVar4 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._0_8_;
    *(undefined8 *)(pcVar11 + 0x10) = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._16_8_;
    *(undefined4 *)(pcVar11 + 0x18) = uVar6;
    *(undefined2 *)(pcVar11 + 0x1c) = uVar7;
    pcVar11[0x1e] = cVar2;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    error(-0xd7,(String *)&local_90,
          "void cv::line(cv::InputOutputArray, cv::Point, cv::Point, const Scalar&, int, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x686);
    String::deallocate((String *)&local_90);
  }
  scalarToRawData(param_4,auStack_80,local_60 & 0xfff,0);
  local_a0 = *param_2;
  local_90 = *param_3;
  FUN_001aaaf0((Mat *)&local_60,&local_a0,&local_90,auStack_80,param_5,param_6,3,param_7);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    puVar12 = local_20;
    do {
      *puVar12 = 0;
      iVar10 = iVar10 + 1;
      puVar12 = puVar12 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001ab950 (516 bytes) name=arrowedLine

/* cv::arrowedLine(cv::_InputOutputArray const&, cv::Point_<int>, cv::Point_<int>,
   cv::Scalar_<double> const&, int, int, int, double) */

void cv::arrowedLine(double param_1_00,undefined8 param_1,int *param_3,int *param_4,
                    undefined8 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)

{
  long lVar1;
  long lVar2;
  double dVar3;
  double dVar4;
  double dVar5;
  double __x;
  int local_10;
  int local_c;
  int local_8;
  int local_4;
  
  local_c = param_3[1];
  local_4 = param_4[1];
  local_10 = *param_3;
  local_8 = *param_4;
  dVar5 = (double)(local_c - local_4) * (double)(local_c - local_4) +
          (double)(local_10 - local_8) * (double)(local_10 - local_8);
  dVar3 = SQRT(dVar5);
  if (NAN(dVar3)) {
    dVar3 = ::sqrt(dVar5);
    local_10 = *param_3;
    local_8 = *param_4;
    local_c = param_3[1];
    local_4 = param_4[1];
  }
  param_1_00 = param_1_00 * dVar3;
  line(param_1,&local_10,&local_8,param_5,param_6,param_7,param_8);
  dVar5 = atan2((double)param_3[1] - (double)param_4[1],(double)*param_3 - (double)*param_4);
  dVar3 = DAT_001abb58;
  __x = dVar5 + DAT_001abb58;
  dVar4 = cos(__x);
  lVar1 = lrint((double)*param_4 + param_1_00 * dVar4);
  dVar4 = sin(__x);
  lVar2 = lrint((double)param_4[1] + param_1_00 * dVar4);
  local_c = (int)lVar2;
  local_8 = *param_4;
  local_4 = param_4[1];
  local_10 = (int)lVar1;
  line(param_1,&local_10,&local_8,param_5,param_6,param_7,param_8);
  dVar4 = cos(dVar5 - dVar3);
  lVar1 = lrint((double)*param_4 + param_1_00 * dVar4);
  dVar3 = sin(dVar5 - dVar3);
  lVar2 = lrint((double)param_4[1] + param_1_00 * dVar3);
  local_c = (int)lVar2;
  local_8 = *param_4;
  local_4 = param_4[1];
  local_10 = (int)lVar1;
  line(param_1,&local_10,&local_8,param_5,param_6,param_7,param_8);
  return;
}


==================================================================

### FUNC 001abb60 (340 bytes) name=cvLine

void cvLine(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
           undefined8 param_6,undefined8 param_7,undefined4 param_8,undefined4 param_9,
           AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_9c = (undefined4)((ulong)param_7 >> 0x20);
  local_88 = 0;
  local_84 = 0;
  local_98[0] = 0x3010000;
  local_a8 = (undefined4)param_6;
  local_a4 = (undefined4)((ulong)param_6 >> 0x20);
  local_a0 = (undefined4)param_7;
  local_90 = aMStack_60;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::line(local_98,&local_a8,&local_a0,&local_80,param_8,param_9,(ulong)param_10 & 0xffffffff);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001abcdc (792 bytes) name=polylines

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::polylines(cv::Mat&, cv::Point_<int> const* const*, int const*, int, bool, cv::Scalar_<double>
   const&, int, int, int) */

void cv::polylines(Mat *param_1,Point_ **param_2,int *param_3,int param_4,bool param_5,
                  Scalar_ *param_6,int param_7,int param_8,int param_9)

{
  undefined4 *puVar1;
  uint uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  uint uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  void *__dest;
  Point_ *pPVar13;
  undefined8 *puVar14;
  undefined4 uVar15;
  undefined4 uVar16;
  int iVar17;
  ulong uVar18;
  undefined4 *puVar19;
  long lVar20;
  long lVar21;
  undefined4 local_38;
  undefined4 local_34;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  if ((param_8 == 0x10) && ((*(uint *)param_1 & 7) != 0)) {
    param_8 = 8;
  }
  if ((((param_2 == (Point_ **)0x0) || (param_3 == (int *)0x0)) || (param_4 < 0)) ||
     ((0x7fff < (uint)param_7 || (0x10 < (uint)param_9)))) {
    local_20 = 0;
    local_18 = 0;
    __dest = (void *)String::allocate((String *)&local_20,0x70);
    memcpy(__dest,
           "pts && npts && ncontours >= 0 && 0 <= thickness && thickness <= MAX_THICKNESS && 0 <= shift && shift <= XY_SHIFT"
           ,0x70);
    error(-0xd7,(String *)&local_20,
          "void cv::polylines(cv::Mat&, const Point* const*, const int*, int, bool, const Scalar&, int, int, int)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x747);
    String::deallocate((String *)&local_20);
  }
  scalarToRawData(param_6,&local_20,*(uint *)param_1 & 0xfff,0);
  if (0 < param_4) {
    lVar21 = 0;
    uVar2 = param_5 ^ 1;
    lVar20 = NEON_shl((ulong)(byte)uVar2,3);
    do {
      iVar5 = param_3[lVar21];
      pPVar13 = param_2[lVar21];
      if ((0 < iVar5) && (pPVar13 != (Point_ *)0x0)) {
        uVar6 = iVar5 - 1;
        if (param_5 == 0) {
          uVar6 = 0;
        }
        if (((uint)((uint)param_9 < 0x11) & (uint)~param_7 >> 0x1f) == 0) {
          local_30 = 0;
          local_28 = 0;
          puVar14 = (undefined8 *)String::allocate((String *)&local_30,0x31);
          uVar12 = DAT_0043f670;
          uVar11 = DAT_0043f668;
          uVar10 = DAT_0043f660;
          uVar9 = DAT_0043f658;
          uVar8 = DAT_0043f650;
          uVar7 = _DAT_0043f648;
          *(undefined1 *)(puVar14 + 6) = DAT_0043f678;
          *puVar14 = uVar7;
          puVar14[1] = uVar8;
          puVar14[2] = uVar9;
          puVar14[3] = uVar10;
          puVar14[4] = uVar11;
          puVar14[5] = uVar12;
          error(-0xd7,(String *)&local_30,
                "void cv::PolyLine(cv::Mat&, const Point*, int, bool, const void*, int, int, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x66d);
          String::deallocate((String *)&local_30);
        }
        uVar18 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
        if ((int)uVar2 < iVar5) {
          puVar19 = (undefined4 *)(pPVar13 + lVar20);
          iVar17 = uVar2 + 2;
          uVar16 = *(undefined4 *)(pPVar13 + uVar18);
          uVar15 = *(undefined4 *)(pPVar13 + uVar18 + 4);
          do {
            uVar3 = *puVar19;
            puVar1 = puVar19 + 2;
            uVar4 = puVar19[1];
            local_30 = CONCAT44(uVar15,uVar16);
            local_38 = uVar3;
            local_34 = uVar4;
            FUN_001aaaf0(param_1,&local_30,&local_38,&local_20,param_7,param_8,iVar17,param_9);
            puVar19 = puVar1;
            iVar17 = 2;
            uVar16 = uVar3;
            uVar15 = uVar4;
          } while (puVar1 != (undefined4 *)
                             (pPVar13 + ((ulong)(byte)uVar2 + 1 + (ulong)(~uVar2 + iVar5)) * 8));
        }
      }
      lVar21 = lVar21 + 1;
    } while (lVar21 != (ulong)(param_4 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 001ac01c (1704 bytes) name=polylines

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::polylines(cv::_InputOutputArray const&, cv::_InputArray const&, bool, cv::Scalar_<double>
   const&, int, int, int) */

void cv::polylines(_InputOutputArray *param_1,_InputArray *param_2,bool param_3,Scalar_ *param_4,
                  int param_5,int param_6,int param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  Point_ **ppPVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  long lVar12;
  char *pcVar13;
  ulong uVar14;
  long lVar15;
  undefined4 *puVar16;
  int *piVar17;
  Mat *pMVar18;
  ulong uVar19;
  long lVar20;
  undefined8 local_950;
  undefined8 local_948;
  undefined4 local_940;
  int local_93c;
  undefined4 local_938;
  undefined4 local_934;
  undefined8 local_930;
  undefined8 local_928;
  undefined8 local_920;
  undefined8 local_918;
  undefined8 local_910;
  long local_908;
  undefined4 *local_900;
  undefined8 *local_8f8;
  undefined8 local_8f0;
  undefined8 local_8e8;
  uint local_8e0;
  int local_8dc;
  int local_8d8;
  int local_8d4;
  Point_ *local_8d0;
  undefined8 local_8c8;
  undefined8 local_8c0;
  undefined8 local_8b8;
  undefined8 local_8b0;
  long local_8a8;
  int *local_8a0;
  undefined8 *local_898;
  undefined8 local_890;
  undefined8 local_888;
  int *local_880;
  ulong local_878;
  int local_870 [264];
  Point_ **local_450;
  ulong local_448;
  Point_ *local_440 [136];
  
  iVar9 = _InputArray::kind((_InputArray *)param_1);
  if (iVar9 == 0x10000) {
    pMVar18 = *(Mat **)(param_1 + 8);
    local_900 = &local_938;
    local_8f8 = &local_8f0;
    local_940 = *(undefined4 *)pMVar18;
    local_93c = *(int *)(pMVar18 + 4);
    local_938 = *(undefined4 *)(pMVar18 + 8);
    local_934 = *(undefined4 *)(pMVar18 + 0xc);
    local_930 = *(undefined8 *)(pMVar18 + 0x10);
    local_928 = *(undefined8 *)(pMVar18 + 0x18);
    local_920 = *(undefined8 *)(pMVar18 + 0x20);
    local_918 = *(undefined8 *)(pMVar18 + 0x28);
    local_910 = *(undefined8 *)(pMVar18 + 0x30);
    local_908 = *(long *)(pMVar18 + 0x38);
    local_8e8 = 0;
    local_8f0 = 0;
    if (local_908 != 0) {
      piVar1 = (int *)(local_908 + 0x14);
      do {
        cVar2 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar18 + 4) < 3) {
      local_8f0 = **(undefined8 **)(pMVar18 + 0x48);
      local_8e8 = (*(undefined8 **)(pMVar18 + 0x48))[1];
    }
    else {
      local_93c = 0;
      Mat::copySize((Mat *)&local_940,pMVar18);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar9 = _InputArray::kind(param_2);
  if ((iVar9 == 0x40000) || (iVar9 = _InputArray::kind(param_2), iVar9 == 0x50000)) {
    iVar9 = _InputArray::total(param_2,-1);
    if (iVar9 == 0) {
      if (local_908 != 0) {
        piVar1 = (int *)(local_908 + 0x14);
        do {
          iVar9 = *piVar1;
          cVar2 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar9 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar9 == 1) {
          Mat::deallocate((Mat *)&local_940);
        }
      }
      if (0 < local_93c) {
        iVar9 = 0;
        puVar16 = local_900;
        do {
          *puVar16 = 0;
          iVar9 = iVar9 + 1;
          puVar16 = puVar16 + 1;
        } while (iVar9 < local_93c);
      }
      local_908 = 0;
      local_918 = 0;
      local_920 = 0;
      local_928 = 0;
      local_930 = 0;
      if (local_8f8 == &local_8f0) {
        s_p_checkVector_2__CV_32S__>__0_0043f680[0] =
             (char)s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_;
        s_p_checkVector_2__CV_32S__>__0_0043f680[1] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,1);
        s_p_checkVector_2__CV_32S__>__0_0043f680[2] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,2);
        s_p_checkVector_2__CV_32S__>__0_0043f680[3] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,3);
        s_p_checkVector_2__CV_32S__>__0_0043f680[4] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,4);
        s_p_checkVector_2__CV_32S__>__0_0043f680[5] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,5);
        s_p_checkVector_2__CV_32S__>__0_0043f680[6] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,6);
        s_p_checkVector_2__CV_32S__>__0_0043f680[7] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_,7);
        s_p_checkVector_2__CV_32S__>__0_0043f680[8] =
             (char)s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_;
        s_p_checkVector_2__CV_32S__>__0_0043f680[9] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,1);
        s_p_checkVector_2__CV_32S__>__0_0043f680[10] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,2);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0xb] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,3);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0xc] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,4);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0xd] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,5);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0xe] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,6);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0xf] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_,7);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x10] =
             (char)s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_;
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x11] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,1);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x12] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,2);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x13] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,3);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x14] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,4);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x15] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,5);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x16] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,6);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x17] =
             SUB81(s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_,7);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x18] =
             (char)s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_;
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x19] =
             SUB41(s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_,1);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x1a] =
             SUB41(s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_,2);
        s_p_checkVector_2__CV_32S__>__0_0043f680[0x1b] =
             SUB41(s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_,3);
        return;
      }
      goto LAB_001ac264;
    }
    uVar19 = (ulong)iVar9;
    local_450 = local_440;
    local_448 = 0x88;
    if (uVar19 < 0x89) {
      bVar4 = true;
      goto LAB_001ac0d0;
    }
    uVar14 = uVar19 << 3;
    if (0xfe0000000000000 < uVar19) {
      uVar14 = 0xffffffffffffffff;
    }
    local_450 = operator_new__(uVar14);
    local_880 = local_870;
    local_878 = 0x108;
    if (uVar19 < 0x109) {
      bVar4 = true;
      goto LAB_001ac0f0;
    }
    uVar14 = uVar19 << 2;
    if (0x1fc0000000000000 < uVar19) {
      uVar14 = 0xffffffffffffffff;
    }
    local_448 = uVar19;
    local_880 = operator_new__(uVar14);
    bVar4 = true;
    local_878 = uVar19;
  }
  else {
    bVar4 = false;
    iVar9 = 1;
    uVar19 = 1;
LAB_001ac0d0:
    local_450 = local_440;
LAB_001ac0f0:
    local_880 = local_870;
    local_878 = uVar19;
    local_448 = uVar19;
  }
  ppPVar8 = local_450;
  piVar1 = local_880;
  lVar20 = 0;
  if (0 < iVar9) {
    do {
      iVar11 = (int)lVar20;
      if (!bVar4) {
        iVar11 = -1;
      }
      iVar10 = _InputArray::kind(param_2);
      if ((iVar10 == 0x10000) && (iVar11 < 0)) {
        pMVar18 = *(Mat **)(param_2 + 8);
        local_898 = &local_890;
        local_8e0 = *(uint *)pMVar18;
        local_8dc = *(int *)(pMVar18 + 4);
        local_8d8 = *(int *)(pMVar18 + 8);
        local_8d4 = *(int *)(pMVar18 + 0xc);
        local_8d0 = *(Point_ **)(pMVar18 + 0x10);
        local_8c8 = *(undefined8 *)(pMVar18 + 0x18);
        local_8c0 = *(undefined8 *)(pMVar18 + 0x20);
        local_8b8 = *(undefined8 *)(pMVar18 + 0x28);
        local_8b0 = *(undefined8 *)(pMVar18 + 0x30);
        local_8a8 = *(long *)(pMVar18 + 0x38);
        local_888 = 0;
        local_890 = 0;
        if (local_8a8 != 0) {
          piVar17 = (int *)(local_8a8 + 0x14);
          do {
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar17,0x10);
            if (bVar3) {
              *piVar17 = *piVar17 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
        }
        local_8a0 = &local_8d8;
        if (*(int *)(pMVar18 + 4) < 3) {
          local_890 = **(undefined8 **)(pMVar18 + 0x48);
          local_888 = (*(undefined8 **)(pMVar18 + 0x48))[1];
        }
        else {
          local_8dc = 0;
          Mat::copySize((Mat *)&local_8e0,pMVar18);
        }
      }
      else {
        _InputArray::getMat_((int)param_2);
      }
      if (local_8dc < 3) {
        lVar15 = (long)local_8d4 * (long)local_8d8;
      }
      else {
        lVar12 = 0;
        lVar15 = 1;
        do {
          piVar17 = local_8a0 + lVar12;
          lVar12 = lVar12 + 1;
          lVar15 = lVar15 * *piVar17;
        } while ((int)lVar12 < local_8dc);
      }
      if (lVar15 == 0) {
        piVar1[lVar20] = 0;
        if (local_8a8 != 0) {
          piVar17 = (int *)(local_8a8 + 0x14);
          do {
            iVar11 = *piVar17;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar17,0x10);
            if (bVar3) {
              *piVar17 = iVar11 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar11 == 1) {
            Mat::deallocate((Mat *)&local_8e0);
          }
        }
        if (0 < local_8dc) {
          iVar11 = 0;
          piVar17 = local_8a0;
          do {
            *piVar17 = 0;
            iVar11 = iVar11 + 1;
            piVar17 = piVar17 + 1;
          } while (iVar11 < local_8dc);
        }
      }
      else {
        iVar11 = Mat::checkVector((Mat *)&local_8e0,2,4,true);
        if (iVar11 < 0) {
          local_950 = 0;
          local_948 = 0;
          pcVar13 = (char *)String::allocate((String *)&local_950,0x1d);
          cVar2 = s_p_checkVector_2__CV_32S__>__0_0043f680[0x1c];
          uVar7 = s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_;
          *(undefined8 *)(pcVar13 + 0x10) = s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_;
          *(undefined4 *)(pcVar13 + 0x18) = uVar7;
          uVar6 = s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_;
          uVar5 = s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_;
          pcVar13[0x1c] = cVar2;
          *(undefined8 *)pcVar13 = uVar5;
          *(undefined8 *)(pcVar13 + 8) = uVar6;
          error(-0xd7,(String *)&local_950,
                "void cv::polylines(cv::InputOutputArray, cv::InputArrayOfArrays, bool, const Scalar&, int, int, int)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x8be);
          String::deallocate((String *)&local_950);
        }
        ppPVar8[lVar20] = local_8d0;
        piVar1[lVar20] =
             (int)(local_8d8 * local_8d4 + (local_8e0 >> 3 & 0x1ff) * local_8d8 * local_8d4) / 2;
        if (local_8a8 != 0) {
          piVar17 = (int *)(local_8a8 + 0x14);
          do {
            iVar11 = *piVar17;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar17,0x10);
            if (bVar3) {
              *piVar17 = iVar11 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar11 == 1) {
            Mat::deallocate((Mat *)&local_8e0);
          }
        }
        if (0 < local_8dc) {
          iVar11 = 0;
          piVar17 = local_8a0;
          do {
            *piVar17 = 0;
            iVar11 = iVar11 + 1;
            piVar17 = piVar17 + 1;
          } while (iVar11 < local_8dc);
        }
      }
      local_8a8 = 0;
      local_8b8 = 0;
      local_8c0 = 0;
      local_8c8 = 0;
      local_8d0 = (Point_ *)0x0;
      if (local_898 != &local_890) {
        fastFree(local_898);
      }
      lVar20 = lVar20 + 1;
    } while ((int)lVar20 < iVar9);
  }
  polylines((Mat *)&local_940,ppPVar8,piVar1,iVar9,param_3,param_4,param_5,param_6,param_7);
  if ((local_880 != local_870) && (local_880 != (int *)0x0)) {
    operator_delete__(local_880);
  }
  if ((local_450 != local_440) && (local_450 != (Point_ **)0x0)) {
    operator_delete__(local_450);
  }
  Mat::release((Mat *)&local_940);
  if (local_8f8 == &local_8f0) {
    return;
  }
LAB_001ac264:
  fastFree(local_8f8);
  return;
}


==================================================================

### FUNC 001ac764 (324 bytes) name=cvPolyLine

void cvPolyLine(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               cv *param_5,Point_ **param_6,int *param_7,int param_8,int param_9,
               AutoBuffer *param_10,int param_11,int param_12)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::polylines(aMStack_60,param_6,param_7,param_8,param_9 != 0,(Scalar_ *)&local_80,(int)param_10,
                param_11,param_12);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001ac8d0 (1076 bytes) name=rectangle

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::rectangle(cv::_InputOutputArray const&, cv::Point_<int>, cv::Point_<int>, cv::Scalar_<double>
   const&, int, int, int) */

void cv::rectangle(_InputArray *param_1,undefined4 *param_2,undefined4 *param_3,Scalar_ *param_4,
                  int param_5,int param_6,uint param_7)

{
  int *piVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  undefined8 *puVar15;
  undefined4 *puVar16;
  Mat *pMVar17;
  undefined4 uVar18;
  undefined4 *puVar19;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined4 local_a0 [16];
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar17 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar17;
    local_5c = *(int *)(pMVar17 + 4);
    local_58 = *(undefined4 *)(pMVar17 + 8);
    local_54 = *(undefined4 *)(pMVar17 + 0xc);
    local_50 = *(undefined8 *)(pMVar17 + 0x10);
    local_48 = *(undefined8 *)(pMVar17 + 0x18);
    local_40 = *(undefined8 *)(pMVar17 + 0x20);
    local_38 = *(undefined8 *)(pMVar17 + 0x28);
    local_30 = *(undefined8 *)(pMVar17 + 0x30);
    local_28 = *(long *)(pMVar17 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar17 + 0x48);
      local_8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((param_6 == 0x10) && ((local_60 & 7) != 0)) {
    param_6 = 8;
  }
  if (0x7fff < param_5) {
    local_d0 = 0;
    local_c8 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_d0,0x1a);
    uVar8 = s_thickness_<__MAX_THICKNESS_0043f6a0._24_2_;
    uVar7 = s_thickness_<__MAX_THICKNESS_0043f6a0._8_8_;
    uVar6 = s_thickness_<__MAX_THICKNESS_0043f6a0._0_8_;
    *(undefined8 *)(pcVar14 + 0x10) = s_thickness_<__MAX_THICKNESS_0043f6a0._16_8_;
    *(undefined2 *)(pcVar14 + 0x18) = uVar8;
    *(undefined8 *)pcVar14 = uVar6;
    *(undefined8 *)(pcVar14 + 8) = uVar7;
    error(-0xd7,(String *)&local_d0,
          "void cv::rectangle(cv::InputOutputArray, cv::Point, cv::Point, const Scalar&, int, int, int)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x6a8);
    String::deallocate((String *)&local_d0);
  }
  if (0x10 < param_7) {
    local_c0 = 0;
    local_b8 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_c0,0x1f);
    cVar4 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0[0x1e];
    uVar8 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._28_2_;
    uVar3 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._24_4_;
    uVar7 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._8_8_;
    uVar6 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._0_8_;
    *(undefined8 *)(pcVar14 + 0x10) = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._16_8_;
    *(undefined4 *)(pcVar14 + 0x18) = uVar3;
    *(undefined2 *)(pcVar14 + 0x1c) = uVar8;
    pcVar14[0x1e] = cVar4;
    *(undefined8 *)pcVar14 = uVar6;
    *(undefined8 *)(pcVar14 + 8) = uVar7;
    error(-0xd7,(String *)&local_c0,
          "void cv::rectangle(cv::InputOutputArray, cv::Point, cv::Point, const Scalar&, int, int, int)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x6a9);
    String::deallocate((String *)&local_c0);
  }
  puVar16 = local_a0 + 8;
  scalarToRawData(param_4,puVar16,local_60 & 0xfff,0);
  puVar19 = local_a0;
  local_a0[0] = *param_2;
  local_a0[1] = param_2[1];
  local_a0[2] = *param_3;
  local_a0[3] = param_2[1];
  local_a0[4] = *param_3;
  local_a0[5] = param_3[1];
  local_a0[6] = *param_2;
  local_a0[7] = param_3[1];
  if (param_5 < 0) {
    FUN_001a63a4((Mat *)&local_60,puVar19,4,puVar16,param_6,param_7);
  }
  else {
    if (0x10 < param_7) {
      local_b0 = 0;
      local_a8 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_b0,0x31);
      uVar12 = DAT_0043f670;
      uVar11 = DAT_0043f668;
      uVar10 = DAT_0043f660;
      uVar9 = DAT_0043f658;
      uVar7 = DAT_0043f650;
      uVar6 = _DAT_0043f648;
      *(undefined1 *)(puVar15 + 6) = DAT_0043f678;
      *puVar15 = uVar6;
      puVar15[1] = uVar7;
      puVar15[2] = uVar9;
      puVar15[3] = uVar10;
      puVar15[4] = uVar11;
      puVar15[5] = uVar12;
      error(-0xd7,(String *)&local_b0,
            "void cv::PolyLine(cv::Mat&, const Point*, int, bool, const void*, int, int, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x66d);
      String::deallocate((String *)&local_b0);
    }
    uVar18 = local_a0[6];
    uVar3 = local_a0[7];
    do {
      local_d4 = uVar3;
      uVar2 = *puVar19;
      uVar3 = puVar19[1];
      local_e0 = uVar2;
      local_dc = uVar3;
      local_d8 = uVar18;
      FUN_001aaaf0((Mat *)&local_60,&local_d8,&local_e0,puVar16,param_5,param_6,2,param_7);
      puVar19 = puVar19 + 2;
      uVar18 = uVar2;
    } while (puVar19 != local_a0 + 8);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar13 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    puVar16 = local_20;
    do {
      *puVar16 = 0;
      iVar13 = iVar13 + 1;
      puVar16 = puVar16 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001acd64 (316 bytes) name=rectangle

/* cv::rectangle(cv::Mat&, cv::Rect_<int>, cv::Scalar_<double> const&, int, int, int) */

void cv::rectangle(undefined8 param_1,int *param_2,undefined8 param_3,undefined4 param_4,
                  undefined4 param_5,uint param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  char *pcVar6;
  int local_28;
  int local_24;
  int local_20;
  int local_1c;
  undefined8 local_18;
  undefined8 local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  if (0x10 < param_6) {
    local_18 = 0;
    local_10 = 0;
    pcVar6 = (char *)String::allocate((String *)&local_18,0x1f);
    cVar5 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0[0x1e];
    uVar4 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._28_2_;
    uVar3 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._24_4_;
    uVar2 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._8_8_;
    uVar1 = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._0_8_;
    *(undefined8 *)(pcVar6 + 0x10) = s_0_<__shift_&&_shift_<__XY_SHIFT_0043f4d0._16_8_;
    *(undefined4 *)(pcVar6 + 0x18) = uVar3;
    *(undefined2 *)(pcVar6 + 0x1c) = uVar4;
    pcVar6[0x1e] = cVar5;
    *(undefined8 *)pcVar6 = uVar1;
    *(undefined8 *)(pcVar6 + 8) = uVar2;
    error(-0xd7,(String *)&local_18,
          "void cv::rectangle(cv::Mat&, cv::Rect, const Scalar&, int, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x6c2);
    String::deallocate((String *)&local_18);
  }
  if (0 < param_2[2] * param_2[3]) {
    local_28 = *param_2;
    local_24 = param_2[1];
    local_1c = 1 << (ulong)(param_6 & 0x1f);
    local_20 = (param_2[2] + local_28) - local_1c;
    local_1c = (param_2[3] + local_24) - local_1c;
    local_8 = 0;
    local_4 = 0;
    local_18 = CONCAT44(local_18._4_4_,0x3010000);
    local_10 = param_1;
    rectangle(&local_18,&local_28,&local_20,param_3,param_4,param_5,param_6);
  }
  return;
}


==================================================================

### FUNC 001aceb4 (312 bytes) name=cvRectangleR

void cvRectangleR(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 cv *param_5,undefined8 param_6,undefined8 param_7,undefined4 param_8,
                 undefined4 param_9,AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_90;
  undefined4 local_8c;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_84 = (undefined4)((ulong)param_7 >> 0x20);
  local_90 = (undefined4)param_6;
  local_8c = (undefined4)((ulong)param_6 >> 0x20);
  local_88 = (undefined4)param_7;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::rectangle(aMStack_60,&local_90,&local_80,param_8,param_9,param_10);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001ad014 (340 bytes) name=cvRectangle

void cvRectangle(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                cv *param_5,undefined8 param_6,undefined8 param_7,undefined4 param_8,
                undefined4 param_9,AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_9c = (undefined4)((ulong)param_7 >> 0x20);
  local_88 = 0;
  local_84 = 0;
  local_98[0] = 0x3010000;
  local_a8 = (undefined4)param_6;
  local_a4 = (undefined4)((ulong)param_6 >> 0x20);
  local_a0 = (undefined4)param_7;
  local_90 = aMStack_60;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::rectangle(local_98,&local_a8,&local_a0,&local_80,param_8,param_9,(ulong)param_10 & 0xffffffff)
  ;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001ad190 (2028 bytes) name=putText

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, double,
   cv::Scalar_<double>, int, int, bool) */

void cv::putText(double param_1_00,_InputArray *param_1,undefined8 *param_2,int *param_4,
                uint param_5,Scalar_ *param_6,int param_7,int param_8,byte param_9)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  undefined8 *puVar16;
  long lVar17;
  int *piVar18;
  long lVar19;
  byte *pbVar20;
  ulong uVar21;
  int *piVar22;
  uint uVar23;
  int *piVar24;
  Mat *pMVar25;
  char *pcVar26;
  int *piVar27;
  byte bVar28;
  undefined8 uVar29;
  int iVar30;
  byte bVar31;
  int iVar32;
  byte *pbVar33;
  int iVar34;
  ulong uVar35;
  int *piVar36;
  int *piVar37;
  int local_e4;
  uint *local_c8;
  int local_b0;
  int local_ac;
  int local_a8;
  int local_a4;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined1 auStack_80 [32];
  uint local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar25 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar25;
    local_5c = *(undefined4 *)(pMVar25 + 4);
    local_58 = *(undefined4 *)(pMVar25 + 8);
    local_54 = *(undefined4 *)(pMVar25 + 0xc);
    local_50 = *(undefined8 *)(pMVar25 + 0x10);
    local_48 = *(undefined8 *)(pMVar25 + 0x18);
    local_40 = *(undefined8 *)(pMVar25 + 0x20);
    local_38 = *(undefined8 *)(pMVar25 + 0x28);
    local_30 = *(undefined8 *)(pMVar25 + 0x30);
    local_28 = *(long *)(pMVar25 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar18 = (int *)(local_28 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar7) {
          *piVar18 = *piVar18 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar25 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar25 + 0x48);
      local_8 = (*(undefined8 **)(pMVar25 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar1 = param_5 >> 4 & 1;
  switch(param_5 & 0xf) {
  case 0:
    local_c8 = &DAT_0043fca0;
    break;
  case 1:
    if (uVar1 == 0) {
      local_c8 = (uint *)&LAB_0043e620;
    }
    else {
      local_c8 = &DAT_0043e800;
    }
    break;
  case 2:
    local_c8 = &DAT_004408c0;
    break;
  case 3:
    if (uVar1 == 0) {
      local_c8 = &DAT_00440a40;
    }
    else {
      local_c8 = &DAT_0043ee90;
    }
    break;
  case 4:
    if (uVar1 == 0) {
      local_c8 = &DAT_0043f290;
    }
    else {
      local_c8 = &DAT_0043eb20;
    }
    break;
  case 5:
    if (uVar1 == 0) {
      local_c8 = &DAT_0043fa20;
    }
    else {
      local_c8 = &DAT_0043fe20;
    }
    break;
  case 6:
    local_c8 = &DAT_0043ed10;
    break;
  case 7:
    local_c8 = &DAT_0043f060;
    break;
  default:
    local_a0 = 0;
    local_98 = 0;
    puVar16 = (undefined8 *)String::allocate((String *)&local_a0,0x11);
    uVar8 = DAT_0043f4f8;
    uVar29 = _LAB_0043f4f0;
    *(undefined1 *)(puVar16 + 2) = DAT_0043f500;
    *puVar16 = uVar29;
    puVar16[1] = uVar8;
    error(-0xd3,(String *)&local_a0,"const int* cv::getFontData(int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x7f5);
    String::deallocate((String *)&local_a0);
    local_c8 = (uint *)0x0;
  }
  scalarToRawData(param_6,auStack_80,local_60 & 0xfff,0);
  uVar1 = *local_c8;
  lVar17 = lrint(param_1_00 * DAT_001ad9e0);
  uVar14 = (uint)lVar17;
  if ((param_8 == 0x10) && ((local_60 & 7) != 0)) {
    param_8 = 8;
  }
  iVar2 = param_4[1];
  iVar13 = (-(uint)param_9 ^ uVar14) + (uint)param_9;
  iVar32 = *param_4 << 0x10;
  piVar18 = operator_new(0x2000);
  pcVar26 = (char *)*param_2;
  piVar37 = piVar18 + 0x800;
  uVar15 = (uint)*pcVar26;
  piVar36 = piVar18;
  if (*pcVar26 == '\0') {
LAB_001ad5e4:
    operator_delete(piVar36);
    Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    return;
  }
  local_e4 = 0;
  lVar17 = 0;
LAB_001ad344:
  uVar23 = uVar15 & 0xff;
  if ((uVar15 >> 7 & 1) == 0) {
    iVar34 = 0x20;
    if (0x7e < (uVar15 & 0xff)) {
      lVar19 = 0x80;
      goto LAB_001ad35c;
    }
  }
  else {
    lVar19 = 0x80;
    if (param_5 != 3) goto LAB_001ad35c;
    uVar15 = uVar15 & 0xff;
    if (uVar15 != 0xd0) {
      if (uVar15 == 0xd1) {
        iVar34 = local_e4 + 1;
        bVar28 = pcVar26[iVar34];
        if (-1 < (char)bVar28) {
LAB_001ad770:
          iVar34 = local_e4;
          local_e4 = local_e4 + 1;
          if (bVar28 != 0) goto LAB_001ad680;
          goto LAB_001ad69c;
        }
        local_e4 = iVar34;
        if (bVar28 < 0x90) {
          uVar23 = bVar28 + 0x2f;
          iVar34 = 0xaf;
          goto LAB_001ad648;
        }
      }
      else {
        if (0xbf < uVar15) {
          bVar28 = pcVar26[local_e4 + 1];
          goto LAB_001ad770;
        }
LAB_001ad680:
        iVar34 = local_e4;
        if ((uVar23 < 0xe0) || (iVar34 = local_e4 + 1, pcVar26[local_e4 + 1] != '\0')) {
LAB_001ad69c:
          local_e4 = iVar34;
          iVar34 = local_e4;
          if (((uVar23 < 0xf0) || (iVar34 = local_e4 + 1, pcVar26[local_e4 + 1] != '\0')) &&
             ((local_e4 = iVar34, 0xf7 < uVar23 && (pcVar26[local_e4 + 1] != '\0')))) {
            local_e4 = local_e4 + 1;
          }
        }
        if ((0xfb < uVar23) && (pcVar26[local_e4 + 1] != '\0')) {
          lVar19 = 0x80;
          local_e4 = local_e4 + 1;
          goto LAB_001ad35c;
        }
      }
      lVar19 = 0x80;
      goto LAB_001ad35c;
    }
    bVar28 = pcVar26[local_e4 + 1];
    if (0x2f < (bVar28 + 0x70 & 0xff)) goto LAB_001ad770;
    uVar23 = bVar28 - 0x11;
    iVar34 = 0x7f;
    local_e4 = local_e4 + 1;
  }
LAB_001ad648:
  lVar19 = 0x80;
  if (iVar34 <= (int)uVar23) {
    lVar19 = (long)(int)uVar23 * 4 + -0x7c;
  }
LAB_001ad35c:
  if (lVar17 >> 3 != 0) {
    piVar18 = piVar36;
  }
  pbVar20 = *(byte **)(PTR_PTR_00501bf0 + (long)*(int *)((long)local_c8 + lVar19) * 8);
  bVar28 = pbVar20[1];
  pbVar33 = pbVar20 + 2;
  iVar32 = iVar32 - (*pbVar20 - 0x52) * uVar14;
  do {
    bVar31 = *pbVar33;
    while (((long)(char)bVar31 & 0xffffffdfU) == 0) {
      lVar17 = (long)piVar18 - (long)piVar36;
      uVar35 = lVar17 >> 3;
      if ((1 < uVar35) && (iVar34 = (int)uVar35, 0 < iVar34)) {
        if (param_7 < 0) {
          local_90 = 0;
          local_88 = 0;
          puVar16 = (undefined8 *)String::allocate((String *)&local_90,0x31);
          uVar12 = DAT_0043f670;
          uVar11 = DAT_0043f668;
          uVar10 = DAT_0043f660;
          uVar9 = DAT_0043f658;
          uVar8 = DAT_0043f650;
          uVar29 = _DAT_0043f648;
          *(undefined1 *)(puVar16 + 6) = DAT_0043f678;
          *puVar16 = uVar29;
          puVar16[1] = uVar8;
          puVar16[2] = uVar9;
          puVar16[3] = uVar10;
          puVar16[4] = uVar11;
          puVar16[5] = uVar12;
          error(-0xd7,(String *)&local_90,
                "void cv::PolyLine(cv::Mat&, const Point*, int, bool, const void*, int, int, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x66d);
          String::deallocate((String *)&local_90);
        }
        if (iVar34 != 1) {
          piVar22 = piVar36 + 3;
          uVar29 = 3;
          iVar30 = *piVar36;
          iVar5 = piVar36[1];
          do {
            iVar4 = piVar22[-1];
            iVar3 = *piVar22;
            local_b0 = iVar30;
            local_ac = iVar5;
            local_a8 = iVar4;
            local_a4 = iVar3;
            FUN_001aaaf0((Mat *)&local_60,&local_b0,&local_a8,auStack_80,param_7,param_8,uVar29,0x10
                        );
            piVar22 = piVar22 + 2;
            uVar29 = 2;
            iVar30 = iVar4;
            iVar5 = iVar3;
          } while (piVar22 != piVar36 + (ulong)(iVar34 - 2) * 2 + 5);
        }
        bVar31 = *pbVar33;
      }
      pbVar33 = pbVar33 + 1;
      if (bVar31 == 0) {
        local_e4 = local_e4 + 1;
        pcVar26 = (char *)*param_2;
        uVar15 = (uint)pcVar26[local_e4];
        iVar32 = iVar32 + (bVar28 - 0x52) * uVar14;
        if (uVar15 == 0) goto LAB_001ad5e4;
        goto LAB_001ad344;
      }
      bVar31 = *pbVar33;
      if (uVar35 != 0) {
        piVar18 = piVar36;
      }
    }
    pbVar20 = pbVar33 + 1;
    pbVar33 = pbVar33 + 2;
    iVar34 = iVar32 + (bVar31 - 0x52) * uVar14;
    iVar5 = -(uVar1 & 0xf) * iVar13 + iVar2 * 0x10000 + (*pbVar20 - 0x52) * iVar13;
    if (piVar37 == piVar18) {
      uVar35 = 8;
      lVar17 = (long)piVar37 - (long)piVar36;
      uVar21 = lVar17 >> 3;
      if (uVar21 != 0) {
        uVar35 = 0xfffffffffffffff8;
        if ((uVar21 <= uVar21 * 2) && (uVar35 = uVar21 << 4, 0x1fffffffffffffff < uVar21 * 2)) {
          uVar35 = 0xfffffffffffffff8;
        }
      }
      piVar22 = operator_new(uVar35);
      piVar18 = piVar22 + 2;
      if ((long)piVar22 + lVar17 != 0) {
        *(int *)((long)piVar22 + lVar17) = iVar34;
        *(int *)((long)piVar22 + lVar17 + 4) = iVar5;
      }
      piVar24 = piVar36;
      piVar27 = piVar22;
      if (piVar37 != piVar36) {
        do {
          if (piVar27 != (int *)0x0) {
            *(undefined8 *)piVar27 = *(undefined8 *)piVar24;
          }
          piVar24 = piVar24 + 2;
          piVar27 = piVar27 + 2;
        } while (piVar37 != piVar24);
        piVar18 = (int *)((long)piVar22 +
                         ((long)piVar37 - (long)(piVar36 + 2) & 0xfffffffffffffff8U) + 0x10);
      }
      piVar37 = (int *)((long)piVar22 + uVar35);
      operator_delete(piVar36);
      piVar36 = piVar22;
    }
    else {
      if (piVar18 != (int *)0x0) {
        *piVar18 = iVar34;
        piVar18[1] = iVar5;
      }
      piVar18 = piVar18 + 2;
    }
  } while( true );
}


==================================================================

### FUNC 001ad9e8 (616 bytes) name=cvPutText

void cvPutText(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
              cv *param_5,char *param_6,undefined8 param_7,long param_8,undefined8 param_9,
              AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  bool bVar6;
  size_t __n;
  void *__dest;
  char *pcVar7;
  int iVar8;
  undefined4 local_b0;
  undefined4 local_ac;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_90 = aMStack_60;
  if ((param_6 == (char *)0x0) || (param_8 == 0)) {
    local_80 = 0;
    local_78 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_80,0x17);
    cVar2 = s_text____0_____font____0_0043f588[0x16];
    uVar5 = s_text____0_____font____0_0043f588._20_2_;
    uVar4 = s_text____0_____font____0_0043f588._8_8_;
    uVar3 = s_text____0_____font____0_0043f588._0_8_;
    *(undefined4 *)(pcVar7 + 0x10) = s_text____0_____font____0_0043f588._16_4_;
    *(undefined2 *)(pcVar7 + 0x14) = uVar5;
    pcVar7[0x16] = cVar2;
    *(undefined8 *)pcVar7 = uVar3;
    *(undefined8 *)(pcVar7 + 8) = uVar4;
    cv::error(-0xd7,(String *)&local_80,
              "void cvPutText(CvArr*, const char*, CvPoint, const CvFont*, CvScalar)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0xa63);
    cv::String::deallocate((String *)&local_80);
    local_88 = 0;
    local_84 = 0;
    local_98[0] = 0x3010000;
    local_a8 = 0;
    local_a0 = 0;
    if (param_6 == (char *)0x0) goto LAB_001ada88;
  }
  local_84 = 0;
  local_88 = 0;
  local_98[0] = 0x3010000;
  local_a0 = 0;
  local_a8 = 0;
  __n = strlen(param_6);
  __dest = (void *)cv::String::allocate((String *)&local_a8,__n);
  memcpy(__dest,param_6,__n);
LAB_001ada88:
  local_b0 = (undefined4)param_7;
  local_ac = (undefined4)((ulong)param_7 >> 0x20);
  if (param_5 == (cv *)0x0) {
    bVar6 = false;
  }
  else {
    bVar6 = false;
    if ((*(int *)param_5 == 0x90) && (*(long *)(param_5 + 0x58) != 0)) {
      bVar6 = *(int *)(param_5 + 0x20) != 0;
    }
  }
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  uStack_68 = param_4;
  cv::putText((double)(*(float *)(param_8 + 0x48) + *(float *)(param_8 + 0x4c)) * 0.5,local_98,
              (String *)&local_a8,&local_b0,*(undefined4 *)(param_8 + 0x28),&local_80,
              *(undefined4 *)(param_8 + 0x54),*(undefined4 *)(param_8 + 0x5c),bVar6);
  cv::String::deallocate((String *)&local_a8);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001adc98 (8168 bytes) name=circle

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::circle(cv::_InputOutputArray const&, cv::Point_<int>, int, cv::Scalar_<double> const&, int,
   int, int) */

void cv::circle(_InputArray *param_1,uint *param_2,int param_3,Scalar_ *param_4,int param_5,
               int param_6,uint param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int *piVar15;
  undefined1 *puVar16;
  undefined1 *puVar17;
  undefined1 *puVar18;
  undefined1 *puVar19;
  undefined1 *puVar20;
  undefined1 *puVar21;
  undefined1 *puVar22;
  undefined1 *puVar23;
  undefined1 *puVar24;
  undefined1 *puVar25;
  undefined1 *puVar26;
  undefined1 *puVar27;
  undefined1 *puVar28;
  undefined1 *puVar29;
  undefined1 *puVar30;
  undefined1 *puVar31;
  undefined8 *puVar32;
  uint uVar33;
  uint uVar34;
  uint uVar35;
  uint uVar36;
  uint uVar37;
  uint uVar38;
  char cVar39;
  bool bVar40;
  uint uVar41;
  uint uVar42;
  int iVar43;
  int iVar44;
  undefined8 uVar45;
  undefined8 uVar46;
  undefined8 uVar47;
  undefined8 uVar48;
  undefined8 uVar49;
  undefined8 uVar50;
  undefined8 uVar51;
  undefined8 uVar52;
  long lVar53;
  long lVar54;
  int iVar55;
  uint uVar56;
  char *pcVar57;
  long lVar58;
  long lVar59;
  long lVar60;
  long lVar61;
  long lVar62;
  uint *puVar63;
  long lVar64;
  Mat *pMVar65;
  uint uVar66;
  size_t __n;
  long lVar67;
  long lVar68;
  uint uVar69;
  long lVar70;
  long lVar71;
  long lVar72;
  long lVar73;
  long lVar74;
  long lVar75;
  uint uVar76;
  long lVar77;
  long lVar78;
  long lVar79;
  long lVar80;
  long lVar81;
  uint uVar82;
  undefined8 uVar83;
  int local_198;
  uint local_194;
  long local_188;
  long local_180;
  long local_178;
  long local_170;
  uint local_168;
  int local_160;
  uint local_15c;
  Mat *local_c0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80 [2];
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  uint local_58;
  undefined4 local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  uint *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  iVar55 = _InputArray::kind(param_1);
  if (iVar55 == 0x10000) {
    pMVar65 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar65;
    local_5c = *(int *)(pMVar65 + 4);
    local_58 = *(uint *)(pMVar65 + 8);
    local_54 = *(undefined4 *)(pMVar65 + 0xc);
    local_50 = *(long *)(pMVar65 + 0x10);
    local_48 = *(undefined8 *)(pMVar65 + 0x18);
    local_40 = *(undefined8 *)(pMVar65 + 0x20);
    local_38 = *(undefined8 *)(pMVar65 + 0x28);
    local_30 = *(undefined8 *)(pMVar65 + 0x30);
    local_28 = *(long *)(pMVar65 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar15 = (int *)(local_28 + 0x14);
      do {
        cVar39 = '\x01';
        bVar40 = (bool)ExclusiveMonitorPass(piVar15,0x10);
        if (bVar40) {
          *piVar15 = *piVar15 + 1;
          cVar39 = ExclusiveMonitorsStatus();
        }
      } while (cVar39 != '\0');
    }
    if (*(int *)(pMVar65 + 4) < 3) {
      local_10 = **(long **)(pMVar65 + 0x48);
      local_8 = (*(long **)(pMVar65 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar65);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((param_6 == 0x10) && ((local_60 & 7) != 0)) {
    param_6 = 8;
  }
  local_c0 = (Mat *)&local_60;
  if (((param_3 < 0) || (0x7fff < param_5)) || (0x10 < param_7)) {
    local_90 = 0;
    local_88 = 0;
    pcVar57 = (char *)String::allocate((String *)&local_90,0x4c);
    uVar52 = s_radius_>__0____thickness_<__MAX__0043f6c0._64_8_;
    uVar51 = s_radius_>__0____thickness_<__MAX__0043f6c0._56_8_;
    uVar50 = s_radius_>__0____thickness_<__MAX__0043f6c0._48_8_;
    uVar49 = s_radius_>__0____thickness_<__MAX__0043f6c0._40_8_;
    uVar48 = s_radius_>__0____thickness_<__MAX__0043f6c0._32_8_;
    uVar47 = s_radius_>__0____thickness_<__MAX__0043f6c0._24_8_;
    uVar46 = s_radius_>__0____thickness_<__MAX__0043f6c0._16_8_;
    uVar45 = s_radius_>__0____thickness_<__MAX__0043f6c0._8_8_;
    uVar83 = s_radius_>__0____thickness_<__MAX__0043f6c0._0_8_;
    *(undefined4 *)(pcVar57 + 0x48) = s_radius_>__0____thickness_<__MAX__0043f6c0._72_4_;
    *(undefined8 *)(pcVar57 + 0x40) = uVar52;
    *(undefined8 *)pcVar57 = uVar83;
    *(undefined8 *)(pcVar57 + 8) = uVar45;
    *(undefined8 *)(pcVar57 + 0x10) = uVar46;
    *(undefined8 *)(pcVar57 + 0x18) = uVar47;
    *(undefined8 *)(pcVar57 + 0x20) = uVar48;
    *(undefined8 *)(pcVar57 + 0x28) = uVar49;
    *(undefined8 *)(pcVar57 + 0x30) = uVar50;
    *(undefined8 *)(pcVar57 + 0x38) = uVar51;
    error(-0xd7,(String *)&local_90,
          "void cv::circle(cv::InputOutputArray, cv::Point, int, const Scalar&, int, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x6d2);
    String::deallocate((String *)&local_90);
  }
  scalarToRawData(param_4,local_80,local_60 & 0xfff,0);
  lVar54 = local_10;
  lVar53 = local_50;
  bVar40 = 0xf < param_6 || 1 < param_5;
  if (0xf < param_6 || 1 < param_5) {
    uVar83 = CONCAT44(0x10 - param_7,0x10 - param_7);
    local_90 = NEON_sshl(*(undefined8 *)param_2,uVar83,4);
    local_98 = NEON_sshl(CONCAT44(param_3,param_3),uVar83,4);
    *(undefined8 *)param_2 = local_90;
    FUN_001a9f40(local_c0,&local_90,&local_98,0,0,0x168,local_80,param_5,param_6);
  }
  else {
    uVar35 = *param_2;
    uVar36 = param_2[1];
    uVar37 = local_20[1];
    uVar38 = *local_20;
    if (local_5c < 1) {
      uVar76 = 0;
    }
    else {
      uVar76 = *(uint *)(local_18 + (long)local_5c + -1);
    }
    local_15c = param_3 * 2 - 1;
    if ((param_3 <= (int)uVar35) &&
       (bVar40 = false, (int)uVar35 < (int)(uVar37 - param_3) && param_3 <= (int)uVar36)) {
      bVar40 = (int)uVar36 < (int)(uVar38 - param_3);
    }
    if (-1 < param_3) {
      uVar1 = (uVar76 - 0x10 >> 4) + 1;
      uVar41 = uVar76 - 1;
      local_178 = local_50 + (int)uVar36 * local_10;
      uVar82 = uVar1 * 0x10;
      local_188 = (long)(int)(uVar35 * uVar76);
      __n = (size_t)(int)uVar76;
      uVar69 = uVar82;
      if (uVar41 < 0xf) {
        uVar69 = 0;
      }
      iVar55 = uVar69 + 1;
      iVar44 = 0;
      iVar2 = uVar69 + 2;
      lVar70 = (long)(int)uVar69;
      iVar3 = uVar69 + 3;
      lVar58 = (long)iVar55;
      iVar4 = uVar69 + 4;
      local_160 = 0;
      iVar5 = uVar69 + 5;
      lVar67 = (long)iVar3;
      iVar6 = uVar69 + 6;
      lVar68 = (long)iVar4;
      iVar7 = uVar69 + 7;
      lVar71 = (long)iVar5;
      iVar8 = uVar69 + 8;
      iVar9 = uVar69 + 9;
      puVar16 = (undefined1 *)((long)local_80 + lVar67);
      lVar72 = (long)iVar7;
      iVar10 = uVar69 + 10;
      iVar11 = uVar69 + 0xb;
      lVar73 = (long)iVar8;
      puVar17 = (undefined1 *)((long)local_80 + lVar68);
      iVar12 = uVar69 + 0xc;
      lVar75 = (long)iVar6;
      puVar18 = (undefined1 *)((long)local_80 + lVar70);
      lVar74 = (long)iVar9;
      puVar19 = (undefined1 *)((long)local_80 + lVar71);
      iVar13 = uVar69 + 0xd;
      lVar77 = (long)iVar10;
      puVar20 = (undefined1 *)((long)local_80 + lVar75);
      lVar64 = (long)iVar2;
      iVar14 = uVar69 + 0xe;
      puVar21 = (undefined1 *)((long)local_80 + lVar72);
      lVar80 = (long)iVar11;
      puVar22 = (undefined1 *)((long)local_80 + lVar58);
      puVar23 = (undefined1 *)((long)local_80 + lVar73);
      lVar81 = (long)iVar14;
      lVar78 = (long)iVar12;
      puVar24 = (undefined1 *)((long)local_80 + lVar74);
      lVar79 = (long)iVar13;
      puVar25 = (undefined1 *)((long)local_80 + lVar64);
      puVar26 = (undefined1 *)((long)local_80 + lVar77);
      puVar27 = (undefined1 *)((long)local_80 + lVar80);
      puVar28 = (undefined1 *)((long)local_80 + lVar78);
      puVar29 = (undefined1 *)((long)local_80 + lVar79);
      puVar30 = (undefined1 *)((long)local_80 + lVar81);
      local_198 = param_3;
      local_194 = uVar35;
      local_180 = local_188;
      local_170 = local_178;
      local_168 = uVar35;
      do {
        uVar42 = uVar36 - local_198;
        uVar69 = uVar36 + local_198;
        iVar43 = uVar35 - local_198;
        uVar56 = uVar35 + local_198;
        if (bVar40) {
          if (param_5 < 0) {
            for (puVar31 = (undefined1 *)(local_178 + (int)(iVar43 * uVar76));
                puVar31 <= (undefined1 *)(local_178 + (int)(uVar56 * uVar76));
                puVar31 = puVar31 + __n) {
              if (0 < (int)uVar76) {
                if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                  lVar59 = 0;
                  do {
                    puVar31[lVar59] = *(undefined1 *)((long)local_80 + lVar59);
                    lVar59 = lVar59 + 1;
                  } while ((int)lVar59 < (int)uVar76);
                }
                else {
                  if (0xe < uVar41) {
                    lVar59 = 0;
                    uVar66 = 0;
                    do {
                      uVar66 = uVar66 + 1;
                      lVar60 = lVar59 + -8;
                      uVar83 = *(undefined8 *)((long)local_80 + lVar59);
                      puVar32 = (undefined8 *)(puVar31 + lVar59);
                      lVar59 = lVar59 + 0x10;
                      puVar32[1] = *(undefined8 *)(auStack_70 + lVar60);
                      *puVar32 = uVar83;
                    } while (uVar66 < uVar1);
                    if (uVar82 == uVar76) goto LAB_001aede0;
                  }
                  puVar31[lVar70] = *puVar18;
                  if (((((((iVar55 < (int)uVar76) &&
                          (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)) &&
                         (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                        ((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                         (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)))) &&
                       ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                        ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                         (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))) &&
                      (puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76)) &&
                     ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                        (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                       (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                      ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                       (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))) {
                    puVar31[lVar81] = *puVar30;
                  }
                }
              }
LAB_001aede0:
            }
            for (puVar31 = (undefined1 *)(local_170 + (int)(iVar43 * uVar76));
                puVar31 <= (undefined1 *)(local_170 + (int)(uVar56 * uVar76));
                puVar31 = puVar31 + __n) {
              if (0 < (int)uVar76) {
                if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                  lVar59 = 0;
                  do {
                    puVar31[lVar59] = *(undefined1 *)((long)local_80 + lVar59);
                    lVar59 = lVar59 + 1;
                  } while ((int)lVar59 < (int)uVar76);
                }
                else {
                  if (0xe < uVar41) {
                    lVar59 = 0;
                    uVar66 = 0;
                    do {
                      uVar66 = uVar66 + 1;
                      lVar60 = lVar59 + -8;
                      uVar83 = *(undefined8 *)((long)local_80 + lVar59);
                      puVar32 = (undefined8 *)(puVar31 + lVar59);
                      lVar59 = lVar59 + 0x10;
                      puVar32[1] = *(undefined8 *)(auStack_70 + lVar60);
                      *puVar32 = uVar83;
                    } while (uVar66 < uVar1);
                    if (uVar82 == uVar76) goto LAB_001af044;
                  }
                  puVar31[lVar70] = *puVar18;
                  if (((((iVar55 < (int)uVar76) && (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)
                        ) && (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                      (((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                        (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)) &&
                       ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                        ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                         (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))))) &&
                     ((puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76 &&
                      ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                         (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                        (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                       ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                        (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))))) {
                    puVar31[lVar81] = *puVar30;
                  }
                }
              }
LAB_001af044:
            }
            lVar59 = lVar53 + (int)uVar69 * lVar54;
            lVar60 = lVar53 + (int)uVar42 * lVar54;
            for (puVar31 = (undefined1 *)(lVar60 + local_188);
                puVar31 <= (undefined1 *)(lVar60 + local_180); puVar31 = puVar31 + __n) {
              if (0 < (int)uVar76) {
                if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                  lVar61 = 0;
                  do {
                    puVar31[lVar61] = *(undefined1 *)((long)local_80 + lVar61);
                    lVar61 = lVar61 + 1;
                  } while ((int)lVar61 < (int)uVar76);
                }
                else {
                  if (0xe < uVar41) {
                    lVar61 = 0;
                    uVar69 = 0;
                    do {
                      uVar69 = uVar69 + 1;
                      lVar62 = lVar61 + -8;
                      uVar83 = *(undefined8 *)((long)local_80 + lVar61);
                      puVar32 = (undefined8 *)(puVar31 + lVar61);
                      lVar61 = lVar61 + 0x10;
                      puVar32[1] = *(undefined8 *)(auStack_70 + lVar62);
                      *puVar32 = uVar83;
                    } while (uVar69 < uVar1);
                    if (uVar82 == uVar76) goto LAB_001af2c4;
                  }
                  puVar31[lVar70] = *puVar18;
                  if ((((iVar55 < (int)uVar76) && (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76))
                      && (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                     (((((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                         (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)) &&
                        ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                         ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                          (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))) &&
                       (puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76)) &&
                      ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                         (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                        (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                       ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                        (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))))) {
                    puVar31[lVar81] = *puVar30;
                  }
                }
              }
LAB_001af2c4:
            }
            for (puVar31 = (undefined1 *)(lVar59 + local_188);
                puVar31 <= (undefined1 *)(lVar59 + local_180); puVar31 = puVar31 + __n) {
              if (0 < (int)uVar76) {
                if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                  lVar60 = 0;
                  do {
                    puVar31[lVar60] = *(undefined1 *)((long)local_80 + lVar60);
                    lVar60 = lVar60 + 1;
                  } while ((int)lVar60 < (int)uVar76);
                }
                else {
                  if (0xe < uVar41) {
                    lVar60 = 0;
                    uVar69 = 0;
                    do {
                      uVar69 = uVar69 + 1;
                      lVar61 = lVar60 + -8;
                      uVar83 = *(undefined8 *)((long)local_80 + lVar60);
                      puVar32 = (undefined8 *)(puVar31 + lVar60);
                      lVar60 = lVar60 + 0x10;
                      puVar32[1] = *(undefined8 *)(auStack_70 + lVar61);
                      *puVar32 = uVar83;
                    } while (uVar69 < uVar1);
                    if (uVar82 == uVar76) goto LAB_001af528;
                  }
                  puVar31[lVar70] = *puVar18;
                  if ((((((((iVar55 < (int)uVar76) &&
                           (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)) &&
                          (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                         ((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                          (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)))) &&
                        (puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76)) &&
                       ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                        (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))) &&
                      ((puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76 &&
                       (((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                         (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                        (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)))))) &&
                     ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                      (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))) {
                    puVar31[lVar81] = *puVar30;
                  }
                }
              }
LAB_001af528:
            }
          }
          else {
            memcpy((void *)(local_178 + (int)(iVar43 * uVar76)),local_80,__n);
            memcpy((void *)(local_170 + (int)(iVar43 * uVar76)),local_80,__n);
            memcpy((void *)(local_178 + (int)(uVar56 * uVar76)),local_80,__n);
            memcpy((void *)(local_170 + (int)(uVar56 * uVar76)),local_80,__n);
            lVar60 = lVar53 + (int)uVar69 * lVar54;
            lVar59 = lVar53 + (int)uVar42 * lVar54;
            memcpy((void *)(lVar59 + local_188),local_80,__n);
            memcpy((void *)(lVar60 + local_188),local_80,__n);
            memcpy((void *)(lVar59 + local_180),local_80,__n);
            memcpy((void *)(lVar60 + local_180),local_80,__n);
          }
        }
        else if ((((uint)((int)uVar42 < (int)uVar38) &
                  (uint)(iVar43 < (int)uVar37) & ~uVar56 >> 0x1f) != 0) && (-1 < (int)uVar69)) {
          uVar34 = local_194;
          uVar66 = local_168;
          if (param_5 < 0) {
            if (iVar43 < 0) {
              iVar43 = 0;
            }
            uVar33 = uVar37 - 1;
            if ((int)uVar56 < (int)uVar37) {
              uVar33 = uVar56;
            }
            if (uVar36 - iVar44 < uVar38) {
              lVar59 = (long)(int)(iVar43 * uVar76);
              lVar60 = (long)(int)(uVar33 * uVar76);
              for (puVar31 = (undefined1 *)(local_178 + lVar59);
                  puVar31 <= (undefined1 *)(local_178 + lVar60); puVar31 = puVar31 + __n) {
                if (0 < (int)uVar76) {
                  if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                    lVar61 = 0;
                    do {
                      puVar31[lVar61] = *(undefined1 *)((long)local_80 + lVar61);
                      lVar61 = lVar61 + 1;
                    } while ((int)lVar61 < (int)uVar76);
                  }
                  else {
                    if (0xe < uVar41) {
                      uVar56 = 0;
                      lVar61 = 0;
                      do {
                        uVar56 = uVar56 + 1;
                        uVar83 = *(undefined8 *)((long)local_80 + lVar61);
                        *(undefined8 *)((long)(puVar31 + lVar61) + 8) =
                             *(undefined8 *)(auStack_70 + lVar61 + -8);
                        *(undefined8 *)(puVar31 + lVar61) = uVar83;
                        lVar61 = lVar61 + 0x10;
                      } while (uVar56 < uVar1);
                      if (uVar82 == uVar76) goto LAB_001ae4d4;
                    }
                    puVar31[lVar70] = *puVar18;
                    if (((((iVar55 < (int)uVar76) &&
                          (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)) &&
                         (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                        (((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                          (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)) &&
                         ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                          ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                           (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))))) &&
                       ((puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76 &&
                        ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                           (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                          (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                         ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                          (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))))) {
                      puVar31[lVar81] = *puVar30;
                    }
                  }
                }
LAB_001ae4d4:
              }
              if (iVar44 + uVar36 < uVar38) {
LAB_001ae4f8:
                for (puVar31 = (undefined1 *)(local_170 + lVar59);
                    puVar31 <= (undefined1 *)(local_170 + lVar60); puVar31 = puVar31 + __n) {
                  if (0 < (int)uVar76) {
                    if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                      lVar59 = 0;
                      do {
                        puVar31[lVar59] = *(undefined1 *)((long)local_80 + lVar59);
                        lVar59 = lVar59 + 1;
                      } while ((int)lVar59 < (int)uVar76);
                    }
                    else {
                      if (0xe < uVar41) {
                        uVar56 = 0;
                        lVar59 = 0;
                        do {
                          uVar56 = uVar56 + 1;
                          uVar83 = *(undefined8 *)((long)local_80 + lVar59);
                          *(undefined8 *)((long)(puVar31 + lVar59) + 8) =
                               *(undefined8 *)(auStack_70 + lVar59 + -8);
                          *(undefined8 *)(puVar31 + lVar59) = uVar83;
                          lVar59 = lVar59 + 0x10;
                        } while (uVar56 < uVar1);
                        if (uVar82 == uVar76) goto LAB_001ae714;
                      }
                      puVar31[lVar70] = *puVar18;
                      if ((((iVar55 < (int)uVar76) &&
                           (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)) &&
                          (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                         ((((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                            (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)) &&
                           ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                            ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                             (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))) &&
                          ((puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76 &&
                           ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                              (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                             (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                            ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                             (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))))))) {
                        puVar31[lVar81] = *puVar30;
                      }
                    }
                  }
LAB_001ae714:
                }
              }
              if (((int)uVar37 <= (int)local_168) || ((int)local_194 < 0)) goto LAB_001aeac8;
            }
            else {
              if (iVar44 + uVar36 < uVar38) {
                lVar59 = (long)(int)(iVar43 * uVar76);
                lVar60 = (long)(int)(uVar33 * uVar76);
                goto LAB_001ae4f8;
              }
LAB_001af924:
              if (((int)uVar37 <= (int)local_168) || ((int)local_194 < 0)) goto LAB_001aeac8;
              if (-1 < param_5) goto LAB_001af718;
            }
            if ((int)local_168 < 0) {
              uVar66 = 0;
            }
            uVar34 = uVar37 - 1;
            if ((int)local_194 < (int)uVar37) {
              uVar34 = local_194;
            }
            if (uVar42 < uVar38) {
              lVar60 = (long)(int)(uVar66 * uVar76);
              lVar61 = (long)(int)(uVar34 * uVar76);
              lVar59 = lVar53 + (int)uVar42 * lVar54;
              for (puVar31 = (undefined1 *)(lVar59 + lVar60);
                  puVar31 <= (undefined1 *)(lVar59 + lVar61); puVar31 = puVar31 + __n) {
                if (0 < (int)uVar76) {
                  if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                    lVar62 = 0;
                    do {
                      puVar31[lVar62] = *(undefined1 *)((long)local_80 + lVar62);
                      lVar62 = lVar62 + 1;
                    } while ((int)lVar62 < (int)uVar76);
                  }
                  else {
                    if (0xe < uVar41) {
                      uVar56 = 0;
                      lVar62 = 0;
                      do {
                        uVar56 = uVar56 + 1;
                        uVar83 = *(undefined8 *)((long)local_80 + lVar62);
                        *(undefined8 *)((long)(puVar31 + lVar62) + 8) =
                             *(undefined8 *)(auStack_70 + lVar62 + -8);
                        *(undefined8 *)(puVar31 + lVar62) = uVar83;
                        lVar62 = lVar62 + 0x10;
                      } while (uVar56 < uVar1);
                      if (uVar82 == uVar76) goto LAB_001ae9ac;
                    }
                    puVar31[lVar70] = *puVar18;
                    if (((((((iVar55 < (int)uVar76) &&
                            (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)) &&
                           (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                          ((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                           (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)))) &&
                         ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                          ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                           (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))) &&
                        ((puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76 &&
                         (((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                           (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                          (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)))))) &&
                       ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                        (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))) {
                      puVar31[lVar81] = *puVar30;
                    }
                  }
                }
LAB_001ae9ac:
              }
              if (uVar38 <= uVar69) goto LAB_001aeac8;
              lVar59 = lVar53 + (int)uVar69 * lVar54;
            }
            else {
LAB_001af7a8:
              if (uVar38 <= uVar69) goto LAB_001aeac8;
              lVar59 = lVar53 + (int)uVar69 * lVar54;
              if (-1 < param_5) goto LAB_001af7d0;
              lVar60 = (long)(int)(uVar66 * uVar76);
              lVar61 = (long)(int)(uVar34 * uVar76);
            }
            for (puVar31 = (undefined1 *)(lVar59 + lVar60);
                puVar31 <= (undefined1 *)(lVar59 + lVar61); puVar31 = puVar31 + __n) {
              if (0 < (int)uVar76) {
                if ((local_80 < puVar31 + 0x10 && puVar31 < auStack_70) || (uVar76 < 0x10)) {
                  lVar60 = 0;
                  do {
                    puVar31[lVar60] = *(undefined1 *)((long)local_80 + lVar60);
                    lVar60 = lVar60 + 1;
                  } while ((int)lVar60 < (int)uVar76);
                }
                else {
                  if (0xe < uVar41) {
                    uVar69 = 0;
                    lVar60 = 0;
                    do {
                      uVar69 = uVar69 + 1;
                      uVar83 = *(undefined8 *)((long)local_80 + lVar60);
                      *(undefined8 *)((long)(puVar31 + lVar60) + 8) =
                           *(undefined8 *)(auStack_70 + lVar60 + -8);
                      *(undefined8 *)(puVar31 + lVar60) = uVar83;
                      lVar60 = lVar60 + 0x10;
                    } while (uVar69 < uVar1);
                    if (uVar82 == uVar76) goto LAB_001afbc8;
                  }
                  puVar31[lVar70] = *puVar18;
                  if (((((iVar55 < (int)uVar76) && (puVar31[lVar58] = *puVar22, iVar2 < (int)uVar76)
                        ) && (puVar31[lVar64] = *puVar25, iVar3 < (int)uVar76)) &&
                      ((((puVar31[lVar67] = *puVar16, iVar4 < (int)uVar76 &&
                         (puVar31[lVar68] = *puVar17, iVar5 < (int)uVar76)) &&
                        ((puVar31[lVar71] = *puVar19, iVar6 < (int)uVar76 &&
                         ((puVar31[lVar75] = *puVar20, iVar7 < (int)uVar76 &&
                          (puVar31[lVar72] = *puVar21, iVar8 < (int)uVar76)))))) &&
                       (puVar31[lVar73] = *puVar23, iVar9 < (int)uVar76)))) &&
                     ((((puVar31[lVar74] = *puVar24, iVar10 < (int)uVar76 &&
                        (puVar31[lVar77] = *puVar26, iVar11 < (int)uVar76)) &&
                       (puVar31[lVar80] = *puVar27, iVar12 < (int)uVar76)) &&
                      ((puVar31[lVar78] = *puVar28, iVar13 < (int)uVar76 &&
                       (puVar31[lVar79] = *puVar29, iVar14 < (int)uVar76)))))) {
                    puVar31[lVar81] = *puVar30;
                  }
                }
              }
LAB_001afbc8:
            }
          }
          else if (uVar36 - iVar44 < uVar38) {
            if (-1 < iVar43) {
              memcpy((void *)(local_178 + (int)(iVar43 * uVar76)),local_80,__n);
            }
            if ((int)uVar56 < (int)uVar37) {
              memcpy((void *)(local_178 + (int)(uVar56 * uVar76)),local_80,__n);
            }
            if (iVar44 + uVar36 < uVar38) goto LAB_001af850;
            if (((int)uVar37 <= (int)local_168) || ((int)local_194 < 0)) goto LAB_001aeac8;
LAB_001af718:
            if (uVar42 < uVar38) {
LAB_001af8b4:
              lVar59 = lVar53 + (int)uVar42 * lVar54;
              if (-1 < (int)local_168) {
                memcpy((void *)(lVar59 + local_188),local_80,__n);
              }
              if ((int)local_194 < (int)uVar37) {
                memcpy((void *)(lVar59 + local_180),local_80,__n);
              }
            }
            if (uVar69 < uVar38) {
              lVar59 = lVar53 + (int)uVar69 * lVar54;
LAB_001af7d0:
              if (-1 < (int)uVar66) {
                memcpy((void *)(lVar59 + (int)(uVar66 * uVar76)),local_80,__n);
              }
              if ((int)uVar34 < (int)uVar37) {
                memcpy((void *)(lVar59 + (int)(uVar34 * uVar76)),local_80,__n);
              }
            }
          }
          else {
            if (uVar38 <= iVar44 + uVar36) goto LAB_001af924;
LAB_001af850:
            if (-1 < iVar43) {
              memcpy((void *)(local_170 + (int)(iVar43 * uVar76)),local_80,__n);
            }
            if ((int)uVar56 < (int)uVar37) {
              memcpy((void *)(local_170 + (int)(uVar56 * uVar76)),local_80,__n);
            }
            if (((int)local_168 < (int)uVar37) && (-1 < (int)local_194)) {
              if (uVar42 < uVar38) goto LAB_001af8b4;
              goto LAB_001af7a8;
            }
          }
        }
LAB_001aeac8:
        local_160 = local_160 + iVar44 * 2 + 1;
        iVar43 = iVar44 + 1;
        local_178 = local_178 - lVar54;
        iVar44 = iVar44 + 1;
        uVar56 = (uint)(0 < local_160);
        local_198 = local_198 - uVar56;
        uVar56 = -uVar56;
        uVar69 = uVar56 & local_15c;
        local_15c = local_15c - (uVar56 & 2);
        local_160 = local_160 - uVar69;
        local_170 = local_170 + lVar54;
        local_188 = local_188 + (int)-uVar76;
        local_180 = local_180 + __n;
        local_194 = local_194 + 1;
        local_168 = local_168 - 1;
      } while (iVar43 <= local_198);
    }
  }
  if (local_28 != 0) {
    piVar15 = (int *)(local_28 + 0x14);
    do {
      iVar55 = *piVar15;
      cVar39 = '\x01';
      bVar40 = (bool)ExclusiveMonitorPass(piVar15,0x10);
      if (bVar40) {
        *piVar15 = iVar55 + -1;
        cVar39 = ExclusiveMonitorsStatus();
      }
    } while (cVar39 != '\0');
    if (iVar55 == 1) {
      Mat::deallocate(local_c0);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar55 = 0;
    puVar63 = local_20;
    do {
      *puVar63 = 0;
      iVar55 = iVar55 + 1;
      puVar63 = puVar63 + 1;
    } while (iVar55 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001afcbc (328 bytes) name=cvCircle

void cvCircle(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
             cv *param_5,undefined8 param_6,undefined4 param_7,undefined4 param_8,undefined4 param_9
             ,AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_9c = (undefined4)((ulong)param_6 >> 0x20);
  local_88 = 0;
  local_84 = 0;
  local_98[0] = 0x3010000;
  local_a0 = (undefined4)param_6;
  local_90 = aMStack_60;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::circle(local_98,&local_a0,param_7,&local_80,param_8,param_9,(ulong)param_10 & 0xffffffff);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001afe2c (768 bytes) name=ellipse

/* cv::ellipse(cv::_InputOutputArray const&, cv::Point_<int>, cv::Size_<int>, double, double,
   double, cv::Scalar_<double> const&, int, int, int) */

void cv::ellipse(double param_1_00,double param_2,double param_3,_InputArray *param_1,
                undefined8 *param_5,int *param_6,Scalar_ *param_7,int param_8,int param_9,
                uint param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  void *__dest;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  undefined4 *puVar8;
  Mat *pMVar9;
  undefined8 uVar10;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined1 auStack_80 [32];
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar9 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar9;
    local_5c = *(int *)(pMVar9 + 4);
    local_58 = *(undefined4 *)(pMVar9 + 8);
    local_54 = *(undefined4 *)(pMVar9 + 0xc);
    local_50 = *(undefined8 *)(pMVar9 + 0x10);
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((param_9 == 0x10) && ((local_60 & 7) != 0)) {
    param_9 = 8;
  }
  if ((((*param_6 < 0) || (param_6[1] < 0)) || (0x7fff < param_8)) || (0x10 < param_10)) {
    local_90 = 0;
    local_88 = 0;
    __dest = (void *)String::allocate((String *)&local_90,100);
    memcpy(__dest,
           "axes.width >= 0 && axes.height >= 0 && thickness <= MAX_THICKNESS && 0 <= shift && shift <= XY_SHIFT"
           ,100);
    error(-0xd7,(String *)&local_90,
          "void cv::ellipse(cv::InputOutputArray, cv::Point, cv::Size, double, double, double, const Scalar&, int, int, int)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x6ee);
    String::deallocate((String *)&local_90);
  }
  scalarToRawData(param_7,auStack_80,local_60 & 0xfff,0);
  uVar5 = lrint(param_1_00);
  uVar6 = lrint(param_2);
  lVar7 = lrint(param_3);
  uVar10 = CONCAT44(0x10 - param_10,0x10 - param_10);
  local_98 = NEON_sshl(*param_5,uVar10,4);
  local_90 = NEON_sshl(*(undefined8 *)param_6,uVar10,4);
  *param_5 = local_98;
  *(undefined8 *)param_6 = local_90;
  FUN_001a9f40((Mat *)&local_60,&local_98,&local_90,uVar5 & 0xffffffff,uVar6 & 0xffffffff,lVar7,
               auStack_80,param_8,param_9);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    puVar8 = local_20;
    do {
      *puVar8 = 0;
      iVar4 = iVar4 + 1;
      puVar8 = puVar8 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001b0164 (364 bytes) name=cvEllipse

void cvEllipse(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
              undefined8 param_5,undefined8 param_6,undefined8 param_7,cv *param_8,
              undefined8 param_9,undefined8 param_10,undefined4 param_11,undefined4 param_12,
              AutoBuffer *param_13)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_8,(void *)0x0,true,false,0,param_13);
  local_9c = (undefined4)((ulong)param_10 >> 0x20);
  local_88 = 0;
  local_84 = 0;
  local_98[0] = 0x3010000;
  local_a8 = (undefined4)param_9;
  local_a4 = (undefined4)((ulong)param_9 >> 0x20);
  local_a0 = (undefined4)param_10;
  local_90 = aMStack_60;
  local_80 = param_4;
  local_78 = param_5;
  local_70 = param_6;
  local_68 = param_7;
  cv::ellipse(param_1,param_2,param_3,local_98,&local_a8,&local_a0,&local_80,param_11,param_12,
              (ulong)param_13 & 0xffffffff);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001b02f8 (796 bytes) name=ellipse

/* cv::ellipse(cv::_InputOutputArray const&, cv::RotatedRect const&, cv::Scalar_<double> const&,
   int, int) */

void cv::ellipse(_InputOutputArray *param_1,RotatedRect *param_2,Scalar_ *param_3,int param_4,
                int param_5)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  float fVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  char *pcVar20;
  Mat *pMVar21;
  undefined4 *puVar22;
  undefined4 local_98;
  undefined4 local_94;
  undefined8 local_90;
  undefined8 local_88;
  undefined1 auStack_80 [32];
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar14 = _InputArray::kind((_InputArray *)param_1);
  if (iVar14 == 0x10000) {
    pMVar21 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar21;
    local_5c = *(int *)(pMVar21 + 4);
    local_58 = *(undefined4 *)(pMVar21 + 8);
    local_54 = *(undefined4 *)(pMVar21 + 0xc);
    local_50 = *(undefined8 *)(pMVar21 + 0x10);
    local_48 = *(undefined8 *)(pMVar21 + 0x18);
    local_40 = *(undefined8 *)(pMVar21 + 0x20);
    local_38 = *(undefined8 *)(pMVar21 + 0x28);
    local_30 = *(undefined8 *)(pMVar21 + 0x30);
    local_28 = *(long *)(pMVar21 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar21 + 0x48);
      local_8 = (*(undefined8 **)(pMVar21 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar21);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((param_5 == 0x10) && ((local_60 & 7) != 0)) {
    param_5 = 8;
  }
  if (((*(float *)(param_2 + 8) < 0.0) || (0x7fff < param_4)) || (*(float *)(param_2 + 0xc) < 0.0))
  {
    local_90 = 0;
    local_88 = 0;
    pcVar20 = (char *)String::allocate((String *)&local_90,0x49);
    uVar13 = s_box_size_width_>__0____box_size__0043f778._64_8_;
    uVar12 = s_box_size_width_>__0____box_size__0043f778._56_8_;
    uVar11 = s_box_size_width_>__0____box_size__0043f778._48_8_;
    uVar10 = s_box_size_width_>__0____box_size__0043f778._40_8_;
    uVar9 = s_box_size_width_>__0____box_size__0043f778._32_8_;
    uVar8 = s_box_size_width_>__0____box_size__0043f778._24_8_;
    uVar7 = s_box_size_width_>__0____box_size__0043f778._16_8_;
    uVar6 = s_box_size_width_>__0____box_size__0043f778._8_8_;
    uVar5 = s_box_size_width_>__0____box_size__0043f778._0_8_;
    pcVar20[0x48] = s_box_size_width_>__0____box_size__0043f778[0x48];
    *(undefined8 *)(pcVar20 + 0x40) = uVar13;
    *(undefined8 *)pcVar20 = uVar5;
    *(undefined8 *)(pcVar20 + 8) = uVar6;
    *(undefined8 *)(pcVar20 + 0x10) = uVar7;
    *(undefined8 *)(pcVar20 + 0x18) = uVar8;
    *(undefined8 *)(pcVar20 + 0x20) = uVar9;
    *(undefined8 *)(pcVar20 + 0x28) = uVar10;
    *(undefined8 *)(pcVar20 + 0x30) = uVar11;
    *(undefined8 *)(pcVar20 + 0x38) = uVar12;
    error(-0xd7,(String *)&local_90,
          "void cv::ellipse(cv::InputOutputArray, const cv::RotatedRect&, const Scalar&, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x708);
    String::deallocate((String *)&local_90);
  }
  scalarToRawData(param_3,auStack_80,local_60 & 0xfff,0);
  uVar15 = lrintf(*(float *)(param_2 + 0x10));
  fVar4 = DAT_001b064c;
  lVar16 = lrintf(*(float *)param_2 * DAT_001b064c);
  lVar17 = lrintf(*(float *)(param_2 + 4) * fVar4);
  fVar4 = DAT_001b0650;
  lVar18 = lrintf(*(float *)(param_2 + 8) * DAT_001b0650);
  lVar19 = lrintf(*(float *)(param_2 + 0xc) * fVar4);
  local_98 = (undefined4)lVar16;
  local_94 = (undefined4)lVar17;
  local_90 = CONCAT44((int)lVar19,(int)lVar18);
  FUN_001a9f40((Mat *)&local_60,&local_98,&local_90,uVar15 & 0xffffffff,0,0x168,auStack_80,param_4,
               param_5);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar14 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar14 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar14 = 0;
    puVar22 = local_20;
    do {
      *puVar22 = 0;
      iVar14 = iVar14 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar14 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001b0658 (2668 bytes) name=FUN_001b0658

void FUN_001b0658(long param_1,int *param_2,int *param_3,undefined1 *param_4,uint param_5,
                 int param_6)

{
  undefined1 *puVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  int iVar15;
  long lVar16;
  int *piVar17;
  undefined8 *puVar18;
  ulong uVar19;
  uint uVar20;
  uint uVar21;
  int *piVar22;
  undefined8 *puVar23;
  int iVar24;
  undefined1 *puVar25;
  uint uVar26;
  uint uVar27;
  int iVar28;
  uint uVar29;
  int iVar30;
  double dVar31;
  double __x;
  int iVar32;
  double dVar33;
  int iVar34;
  double dVar35;
  undefined8 uVar36;
  int iVar37;
  int local_58;
  int local_54;
  int local_50 [10];
  int local_28;
  int local_24;
  int local_20 [4];
  undefined4 local_10;
  int local_4;
  
  iVar15 = param_2[1];
  iVar9 = *param_3;
  local_28 = *param_2 * 0x10000;
  iVar28 = param_3[1];
  local_24 = iVar15 * 0x10000;
  iVar10 = iVar9 * 0x10000;
  *param_2 = local_28;
  iVar28 = iVar28 * 0x10000;
  param_2[1] = local_24;
  *param_3 = iVar10;
  param_3[1] = iVar28;
  if ((int)param_5 < 2) {
    if (param_6 < 0x10) {
      local_28 = local_28 >> 0x10;
      local_24 = local_24 >> 0x10;
      *param_2 = local_28;
      param_2[1] = local_24;
      *param_3 = iVar10 >> 0x10;
      param_3[1] = iVar28 >> 0x10;
      local_50[1] = iVar28 >> 0x10;
      local_50[0] = iVar10 >> 0x10;
      FUN_001a4e8c(param_1,&local_28,local_50);
      return;
    }
    local_50[1] = iVar28;
    local_50[0] = iVar10;
    FUN_001a5090(param_1,&local_28,local_50);
    return;
  }
  iVar7 = param_5 * 0x8000;
  local_50[2] = 0;
  local_50[3] = 0;
  local_50[0] = 0;
  local_50[1] = 0;
  dVar35 = (double)(iVar28 + iVar15 * -0x10000) * DAT_001b10c8;
  dVar33 = (double)(local_28 + iVar9 * -0x10000) * DAT_001b10c8;
  local_50[6] = 0;
  local_50[7] = 0;
  local_50[4] = 0;
  local_50[5] = 0;
  __x = dVar35 * dVar35 + dVar33 * dVar33;
  if (ABS(__x) <= DAT_001b10d0) goto LAB_001b0728;
  dVar31 = SQRT(__x);
  if (NAN(dVar31)) {
    dVar31 = sqrt(__x);
  }
  dVar31 = ((double)iVar7 + (double)((param_5 & 1) << 0x10) * 0.5) / dVar31;
  lVar12 = lrint(dVar35 * dVar31);
  lVar13 = lrint(dVar33 * dVar31);
  iVar28 = (int)lVar12;
  iVar15 = *param_2 + iVar28;
  iVar10 = (int)lVar13;
  iVar9 = param_2[1] + iVar10;
  local_50[1] = iVar9;
  local_50[0] = iVar15;
  local_50[5] = param_3[1] - iVar10;
  local_50[4] = *param_3 - iVar28;
  local_50[3] = param_2[1] - iVar10;
  local_50[2] = *param_2 - iVar28;
  local_50[7] = param_3[1] + iVar10;
  local_50[6] = *param_3 + iVar28;
  lVar12 = *(long *)(param_1 + 0x10);
  iVar10 = (*(int **)(param_1 + 0x40))[1];
  iVar28 = **(int **)(param_1 + 0x40);
  if (*(int *)(param_1 + 4) < 1) {
    uVar29 = 0;
  }
  else {
    uVar29 = *(uint *)(*(long *)(param_1 + 0x48) + (long)*(int *)(param_1 + 4) * 8 + -8);
  }
  iVar24 = iVar15;
  iVar32 = iVar9;
  if (param_6 < 0x10) {
    iVar11 = 0x8000;
    iVar37 = iVar11;
    if (8 < param_6) goto LAB_001b0f0c;
    iVar34 = 0;
    iVar30 = 0;
    piVar17 = local_50;
    do {
      iVar5 = piVar17[1];
      iVar6 = *piVar17;
      piVar17 = piVar17 + 2;
      if (iVar5 < iVar32) {
        iVar34 = iVar30;
        iVar32 = iVar5;
      }
      iVar30 = iVar30 + 1;
      if (iVar9 < iVar5) {
        iVar9 = iVar5;
      }
      if (iVar15 < iVar6) {
        iVar15 = iVar6;
      }
      if (iVar6 < iVar24) {
        iVar24 = iVar6;
      }
      FUN_001a3bb8(param_1,&local_58,&local_28,param_4);
    } while (iVar30 != 4);
  }
  else {
    iVar11 = 0;
    iVar37 = 0xffff;
LAB_001b0f0c:
    iVar34 = 0;
    iVar30 = 0;
    piVar17 = local_50;
    do {
      iVar5 = piVar17[1];
      iVar6 = *piVar17;
      piVar17 = piVar17 + 2;
      if (iVar5 < iVar32) {
        iVar34 = iVar30;
        iVar32 = iVar5;
      }
      iVar30 = iVar30 + 1;
      if (iVar9 < iVar5) {
        iVar9 = iVar5;
      }
      if (iVar15 < iVar6) {
        iVar15 = iVar6;
      }
      if (iVar6 < iVar24) {
        iVar24 = iVar6;
      }
      FUN_001a5090(param_1,&local_58,&local_28,param_4);
    } while (iVar30 != 4);
  }
  uVar2 = iVar9 + 0x8000 >> 0x10;
  iVar9 = iVar32 + 0x8000 >> 0x10;
  if ((iVar24 + 0x8000 >> 0x10 < iVar10 && -1 < (int)(iVar15 + 0x8000U | uVar2)) &&
     (uVar26 = (uint)(iVar28 <= iVar9), iVar28 > iVar9)) {
    uVar3 = iVar28 - 1;
    if ((int)uVar2 < iVar28) {
      uVar3 = uVar2;
    }
    uVar2 = -(int)param_4 & 0xf;
    lVar13 = *(long *)(param_1 + 0x50);
    uVar27 = 1;
    local_20[3] = iVar34;
    local_28 = iVar34;
    uVar4 = uVar29;
    if (uVar2 < uVar29) {
      uVar4 = uVar2;
    }
    uVar8 = (uVar29 - 1) - uVar4;
    local_4 = iVar9;
    uVar2 = ((uVar29 - uVar4) - 0x10 >> 4) + 1;
    iVar24 = 4;
    iVar28 = uVar2 * 0x10;
    local_20[2] = iVar9;
    local_10 = 3;
    lVar12 = lVar12 + iVar9 * lVar13;
    local_24 = 1;
    iVar15 = iVar9;
    do {
      piVar17 = &local_28;
      if ((iVar15 < (int)uVar3 || iVar9 == iVar15) || (param_6 < 0x10)) {
        do {
          if (piVar17[4] <= iVar15) {
            iVar30 = *piVar17;
            piVar22 = local_50 + (long)iVar30 * 2;
            iVar32 = local_50[(long)iVar30 * 2 + 1] + 0x8000 >> 0x10;
            if ((iVar24 == 0) || (iVar15 < iVar32)) {
              iVar34 = 0;
            }
            else {
              do {
                iVar34 = *piVar22;
                iVar24 = iVar24 + -1;
                iVar30 = piVar17[1] + iVar30 + (uint)(3 < piVar17[1] + iVar30) * -4;
                piVar22 = local_50 + (long)iVar30 * 2;
                iVar32 = local_50[(long)iVar30 * 2 + 1] + 0x8000 >> 0x10;
                if (iVar15 < iVar32) break;
              } while (iVar24 != 0);
            }
            iVar5 = *piVar22;
            if (iVar32 <= iVar15) goto LAB_001b0ea8;
            piVar17[4] = iVar32;
            iVar6 = (iVar32 - iVar15) * 2;
            piVar17[2] = iVar34;
            *piVar17 = iVar30;
            iVar30 = 0;
            if (iVar6 != 0) {
              iVar30 = ((iVar32 - iVar15) + (iVar5 - iVar34) * 2) / iVar6;
            }
            piVar17[3] = iVar30;
          }
          piVar17 = piVar17 + 5;
        } while (piVar17 != (int *)&stack0x00000000);
      }
      lVar16 = (long)(int)uVar26;
      lVar14 = (long)(int)uVar27;
      iVar32 = local_20[lVar16 * 5];
      iVar30 = local_20[lVar14 * 5];
      if (iVar30 < iVar32) {
        uVar26 = uVar26 ^ 1;
        uVar27 = uVar27 ^ 1;
        lVar16 = (long)(int)uVar26;
        lVar14 = (long)(int)uVar27;
        iVar32 = local_20[lVar16 * 5];
        iVar30 = local_20[lVar14 * 5];
      }
      if (-1 < iVar15) {
        iVar34 = iVar11 + iVar30 >> 0x10;
        iVar5 = iVar37 + iVar32 >> 0x10;
        if ((-1 < iVar34) && (iVar5 < iVar10)) {
          if (iVar5 < 0) {
            iVar5 = 0;
          }
          iVar6 = iVar10 + -1;
          if (iVar34 < iVar10) {
            iVar6 = iVar34;
          }
          puVar25 = (undefined1 *)(lVar12 + (int)(iVar5 * uVar29));
          puVar1 = (undefined1 *)(lVar12 + (int)(iVar6 * uVar29));
          if (puVar25 <= puVar1) {
            do {
              if (0 < (int)uVar29) {
                if ((param_4 < puVar25 + 0x10 && puVar25 < param_4 + 0x10) || (uVar29 < 0x16)) {
                  lVar13 = 0;
                  do {
                    puVar25[lVar13] = param_4[lVar13];
                    lVar13 = lVar13 + 1;
                  } while ((int)lVar13 < (int)uVar29);
                }
                else {
                  uVar20 = uVar4;
                  if (uVar4 == 0) {
                    uVar19 = 0;
                    if (0xe < uVar8) goto LAB_001b0cc4;
                    iVar34 = 1;
                    *puVar25 = *param_4;
                  }
                  else {
                    *puVar25 = *param_4;
                    if ((((uVar4 != 1) && (puVar25[1] = param_4[1], uVar4 != 2)) &&
                        (puVar25[2] = param_4[2], uVar4 != 3)) &&
                       ((puVar25[3] = param_4[3], uVar4 != 4 &&
                        (puVar25[4] = param_4[4], uVar4 != 5)))) {
                      puVar25[5] = param_4[5];
                      if (uVar4 == 6) {
                        uVar20 = 6;
                      }
                      else {
                        puVar25[6] = param_4[6];
                        if ((((uVar4 != 7) && (puVar25[7] = param_4[7], uVar4 != 8)) &&
                            ((puVar25[8] = param_4[8], uVar4 != 9 &&
                             (((puVar25[9] = param_4[9], uVar4 != 10 &&
                               (puVar25[10] = param_4[10], uVar4 != 0xb)) &&
                              (puVar25[0xb] = param_4[0xb], uVar4 != 0xc)))))) &&
                           (puVar25[0xc] = param_4[0xc], uVar4 != 0xd)) {
                          puVar25[0xd] = param_4[0xd];
                          if (uVar4 == 0xf) {
                            puVar25[0xe] = param_4[0xe];
                          }
                          else {
                            uVar20 = 0xe;
                          }
                        }
                      }
                    }
                    uVar19 = (ulong)uVar4;
                    if (0xe < uVar8) {
LAB_001b0cc4:
                      uVar21 = 0;
                      puVar18 = (undefined8 *)(param_4 + uVar19);
                      puVar23 = (undefined8 *)(puVar25 + uVar19);
                      do {
                        uVar36 = *puVar18;
                        uVar21 = uVar21 + 1;
                        puVar23[1] = puVar18[1];
                        *puVar23 = uVar36;
                        puVar18 = puVar18 + 2;
                        puVar23 = puVar23 + 2;
                      } while (uVar21 < uVar2);
                      uVar20 = uVar20 + iVar28;
                      if (iVar28 == uVar29 - uVar4) goto LAB_001b0e54;
                    }
                    iVar34 = uVar20 + 1;
                    puVar25[(int)uVar20] = param_4[(int)uVar20];
                    if ((int)uVar29 <= iVar34) goto LAB_001b0e54;
                  }
                  iVar5 = iVar34 + 1;
                  puVar25[iVar34] = param_4[iVar34];
                  if (iVar5 < (int)uVar29) {
                    iVar6 = iVar34 + 2;
                    puVar25[iVar5] = param_4[iVar5];
                    if (iVar6 < (int)uVar29) {
                      iVar5 = iVar34 + 3;
                      puVar25[iVar6] = param_4[iVar6];
                      if (iVar5 < (int)uVar29) {
                        iVar6 = iVar34 + 4;
                        puVar25[iVar5] = param_4[iVar5];
                        if (iVar6 < (int)uVar29) {
                          iVar5 = iVar34 + 5;
                          puVar25[iVar6] = param_4[iVar6];
                          if (iVar5 < (int)uVar29) {
                            iVar6 = iVar34 + 6;
                            puVar25[iVar5] = param_4[iVar5];
                            if (iVar6 < (int)uVar29) {
                              iVar5 = iVar34 + 7;
                              puVar25[iVar6] = param_4[iVar6];
                              if (iVar5 < (int)uVar29) {
                                iVar6 = iVar34 + 8;
                                puVar25[iVar5] = param_4[iVar5];
                                if (iVar6 < (int)uVar29) {
                                  iVar5 = iVar34 + 9;
                                  puVar25[iVar6] = param_4[iVar6];
                                  if (iVar5 < (int)uVar29) {
                                    iVar6 = iVar34 + 10;
                                    puVar25[iVar5] = param_4[iVar5];
                                    if (iVar6 < (int)uVar29) {
                                      iVar5 = iVar34 + 0xb;
                                      puVar25[iVar6] = param_4[iVar6];
                                      if (iVar5 < (int)uVar29) {
                                        iVar6 = iVar34 + 0xc;
                                        puVar25[iVar5] = param_4[iVar5];
                                        if (iVar6 < (int)uVar29) {
                                          iVar34 = iVar34 + 0xd;
                                          puVar25[iVar6] = param_4[iVar6];
                                          if (iVar34 < (int)uVar29) {
                                            puVar25[iVar34] = param_4[iVar34];
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
LAB_001b0e54:
              puVar25 = puVar25 + (int)uVar29;
            } while (puVar25 <= puVar1);
            lVar13 = *(long *)(param_1 + 0x50);
          }
        }
      }
      iVar15 = iVar15 + 1;
      lVar12 = lVar12 + lVar13;
      iVar34 = local_20[lVar14 * 5 + 1];
      local_20[lVar16 * 5] = local_20[lVar16 * 5 + 1] + iVar32;
      local_20[lVar14 * 5] = iVar30 + iVar34;
    } while (iVar15 <= (int)uVar3);
  }
LAB_001b0ea8:
  iVar10 = *param_3;
  iVar28 = param_3[1];
LAB_001b0728:
  *param_2 = iVar10;
  param_2[1] = iVar28;
  if (param_6 < 0x10) {
    local_28 = iVar10 + 0x8000 >> 0x10;
    local_24 = iVar28 + 0x8000 >> 0x10;
    FUN_001a1838(param_1,&local_28,iVar7 + 0x8000 >> 0x10,param_4);
    iVar15 = *param_3;
    iVar9 = param_3[1];
  }
  else {
    local_58 = iVar7;
    local_54 = iVar7;
    local_28 = iVar10;
    local_24 = iVar28;
    FUN_001a9f40(param_1,&local_28,&local_58,0,0,0x168,param_4,0xffffffff,param_6);
    iVar15 = *param_3;
    iVar9 = param_3[1];
  }
  *param_2 = iVar15;
  param_2[1] = iVar9;
  return;
}


==================================================================

### FUNC 001b10d8 (852 bytes) name=fillPoly

/* cv::fillPoly(cv::Mat&, cv::Point_<int> const**, int const*, int, cv::Scalar_<double> const&, int,
   int, cv::Point_<int>) */

void cv::fillPoly(uint *param_1,long param_2,int *param_3,uint param_4,Scalar_ *param_5,int param_6,
                 uint param_7,undefined4 *param_8)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  char *pcVar11;
  void *pvVar12;
  uint uVar13;
  int *piVar14;
  ulong uVar15;
  ulong uVar16;
  uint uVar17;
  long lVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  undefined4 local_40;
  undefined4 local_3c;
  void *local_38;
  void *local_30;
  long local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  if ((param_6 == 0x10) && ((*param_1 & 7) != 0)) {
    param_6 = 8;
  }
  if ((((param_2 == 0) || (param_3 == (int *)0x0)) || ((int)param_4 < 0)) || (0x10 < param_7)) {
    local_20 = 0;
    local_18 = 0;
    pcVar11 = (char *)String::allocate((String *)&local_20,0x40);
    uVar9 = s_pts____npts____ncontours_>__0____0043f7c8._56_8_;
    uVar8 = s_pts____npts____ncontours_>__0____0043f7c8._48_8_;
    uVar7 = s_pts____npts____ncontours_>__0____0043f7c8._40_8_;
    uVar6 = s_pts____npts____ncontours_>__0____0043f7c8._32_8_;
    uVar5 = s_pts____npts____ncontours_>__0____0043f7c8._24_8_;
    uVar4 = s_pts____npts____ncontours_>__0____0043f7c8._16_8_;
    uVar3 = s_pts____npts____ncontours_>__0____0043f7c8._8_8_;
    *(undefined8 *)pcVar11 = s_pts____npts____ncontours_>__0____0043f7c8._0_8_;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    *(undefined8 *)(pcVar11 + 0x10) = uVar4;
    *(undefined8 *)(pcVar11 + 0x18) = uVar5;
    *(undefined8 *)(pcVar11 + 0x20) = uVar6;
    *(undefined8 *)(pcVar11 + 0x28) = uVar7;
    *(undefined8 *)(pcVar11 + 0x30) = uVar8;
    *(undefined8 *)(pcVar11 + 0x38) = uVar9;
    error(-0xd7,(String *)&local_20,
          "void cv::fillPoly(cv::Mat&, const Point**, const int*, int, const Scalar&, int, int, cv::Point)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x72c);
    String::deallocate((String *)&local_20);
  }
  scalarToRawData(param_5,&local_20,*param_1 & 0xfff,0);
  local_38 = (void *)0x0;
  local_30 = (void *)0x0;
  local_28 = 0;
  if ((int)param_4 < 1) {
    uVar16 = 0x18;
LAB_001b13c8:
    pvVar12 = operator_new(uVar16);
    if (local_38 != (void *)0x0) {
      operator_delete(local_38);
    }
    local_28 = (long)pvVar12 + uVar16;
    local_38 = pvVar12;
    local_30 = pvVar12;
    if ((int)param_4 < 1) goto LAB_001b1360;
  }
  else {
    uVar13 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    if (param_4 < uVar13) {
      uVar13 = param_4;
    }
    uVar1 = param_4;
    if ((int)param_4 < 7) {
LAB_001b11f4:
      uVar13 = uVar1;
      iVar10 = *param_3;
      if (((uVar13 == 1) || (iVar10 = iVar10 + param_3[1], uVar13 == 2)) ||
         ((iVar10 = iVar10 + param_3[2], uVar13 == 3 || (iVar10 = iVar10 + param_3[3], uVar13 == 4))
         )) {
        uVar16 = (ulong)uVar13;
      }
      else {
        iVar10 = iVar10 + param_3[4];
        if (uVar13 == 6) {
          uVar16 = 6;
          iVar10 = iVar10 + param_3[5];
        }
        else {
          uVar16 = 5;
        }
      }
      if (uVar13 != param_4) goto LAB_001b1254;
    }
    else {
      iVar10 = 0;
      uVar16 = 0;
      uVar1 = uVar13;
      if (uVar13 != 0) goto LAB_001b11f4;
LAB_001b1254:
      uVar1 = ((param_4 - uVar13) - 4 >> 2) + 1;
      iVar2 = uVar1 * 4;
      if (2 < (param_4 - 1) - uVar13) {
        iVar19 = 0;
        iVar20 = 0;
        iVar21 = 0;
        iVar22 = 0;
        uVar17 = 0;
        piVar14 = param_3 + uVar13;
        do {
          uVar17 = uVar17 + 1;
          iVar19 = iVar19 + (int)*(undefined8 *)piVar14;
          iVar20 = iVar20 + (int)((ulong)*(undefined8 *)piVar14 >> 0x20);
          iVar21 = iVar21 + (int)*(undefined8 *)(piVar14 + 2);
          iVar22 = iVar22 + (int)((ulong)*(undefined8 *)(piVar14 + 2) >> 0x20);
          piVar14 = piVar14 + 4;
        } while (uVar17 < uVar1);
        uVar16 = (ulong)(uint)((int)uVar16 + iVar2);
        iVar10 = iVar10 + iVar19 + iVar20 + iVar21 + iVar22;
        if (param_4 - uVar13 == iVar2) goto LAB_001b12e8;
      }
      uVar15 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
      iVar10 = iVar10 + *(int *)((long)param_3 + uVar15);
      if ((int)uVar16 + 1 < (int)param_4) {
        iVar10 = iVar10 + *(int *)((long)param_3 + uVar15 + 4);
        if ((int)uVar16 + 2 < (int)param_4) {
          iVar10 = iVar10 + *(int *)((long)param_3 + uVar15 + 8);
        }
      }
    }
LAB_001b12e8:
    uVar16 = (ulong)(iVar10 + 1);
    if (0xaaaaaaaaaaaaaaa < uVar16) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f39c("vector::reserve");
    }
    if (uVar16 != 0) {
      uVar16 = uVar16 * 0x18;
      goto LAB_001b13c8;
    }
  }
  lVar18 = 0;
  local_38 = local_30;
  do {
    local_40 = *param_8;
    local_3c = param_8[1];
    FUN_001a6dec(param_1,*(undefined8 *)(param_2 + lVar18 * 8),param_3[lVar18],&local_38,&local_20,
                 param_6,param_7,&local_40);
    lVar18 = lVar18 + 1;
  } while (lVar18 != (ulong)(param_4 - 1) + 1);
LAB_001b1360:
  FUN_001a95a4(param_1,&local_38,&local_20);
  if (local_38 != (void *)0x0) {
    operator_delete(local_38);
  }
  return;
}


==================================================================

### FUNC 001b145c (1248 bytes) name=fillPoly

/* cv::fillPoly(cv::_InputOutputArray const&, cv::_InputArray const&, cv::Scalar_<double> const&,
   int, int, cv::Point_<int>) */

void cv::fillPoly(_InputArray *param_1,_InputArray *param_2,undefined8 param_3,undefined4 param_4,
                 undefined4 param_5,undefined8 *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined1 *puVar7;
  undefined1 *puVar8;
  int iVar9;
  int iVar10;
  ulong uVar11;
  char *pcVar12;
  undefined4 *puVar13;
  Mat *pMVar14;
  ulong uVar15;
  long lVar16;
  undefined8 local_950;
  undefined8 local_948;
  undefined4 local_940;
  int local_93c;
  undefined4 local_938;
  undefined4 local_934;
  undefined8 local_930;
  undefined8 local_928;
  undefined8 local_920;
  undefined8 local_918;
  undefined8 local_910;
  long local_908;
  undefined4 *local_900;
  undefined8 *local_8f8;
  undefined8 local_8f0;
  undefined8 local_8e8;
  undefined8 local_8e0;
  int local_8d8;
  int local_8d4;
  undefined8 local_8d0;
  undefined8 local_8c8;
  undefined8 local_8c0;
  undefined8 local_8b8;
  long local_8a8;
  undefined4 *local_8a0;
  undefined1 *local_898;
  undefined1 auStack_890 [16];
  undefined1 *local_880;
  ulong local_878;
  undefined1 auStack_870 [1056];
  undefined1 *local_450;
  ulong local_448;
  undefined1 auStack_440 [1088];
  
  iVar9 = _InputArray::kind(param_1);
  if (iVar9 == 0x10000) {
    pMVar14 = *(Mat **)(param_1 + 8);
    local_900 = &local_938;
    local_8f8 = &local_8f0;
    local_940 = *(undefined4 *)pMVar14;
    local_93c = *(int *)(pMVar14 + 4);
    local_938 = *(undefined4 *)(pMVar14 + 8);
    local_934 = *(undefined4 *)(pMVar14 + 0xc);
    local_930 = *(undefined8 *)(pMVar14 + 0x10);
    local_928 = *(undefined8 *)(pMVar14 + 0x18);
    local_920 = *(undefined8 *)(pMVar14 + 0x20);
    local_918 = *(undefined8 *)(pMVar14 + 0x28);
    local_910 = *(undefined8 *)(pMVar14 + 0x30);
    local_908 = *(long *)(pMVar14 + 0x38);
    local_8e8 = 0;
    local_8f0 = 0;
    if (local_908 != 0) {
      piVar1 = (int *)(local_908 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_8f0 = **(undefined8 **)(pMVar14 + 0x48);
      local_8e8 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    }
    else {
      local_93c = 0;
      Mat::copySize((Mat *)&local_940,pMVar14);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar9 = _InputArray::total(param_2,-1);
  if (iVar9 == 0) {
    if (local_908 != 0) {
      piVar1 = (int *)(local_908 + 0x14);
      do {
        iVar9 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar9 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar9 == 1) {
        Mat::deallocate((Mat *)&local_940);
      }
    }
    local_908 = 0;
    local_930 = 0;
    local_918 = 0;
    local_920 = 0;
    local_928 = 0;
    if (0 < local_93c) {
      iVar9 = 0;
      puVar13 = local_900;
      do {
        *puVar13 = 0;
        iVar9 = iVar9 + 1;
        puVar13 = puVar13 + 1;
      } while (iVar9 < local_93c);
    }
    if (local_8f8 == &local_8f0) {
      return;
    }
    goto LAB_001b16fc;
  }
  uVar15 = (ulong)iVar9;
  local_450 = auStack_440;
  local_448 = 0x88;
  if (uVar15 < 0x89) {
LAB_001b17d0:
    local_880 = auStack_870;
    local_448 = uVar15;
  }
  else {
    uVar11 = uVar15 << 3;
    if (0xfe0000000000000 < uVar15) {
      uVar11 = 0xffffffffffffffff;
    }
    local_450 = operator_new__(uVar11);
    local_880 = auStack_870;
    local_878 = 0x108;
    if (uVar15 < 0x109) goto LAB_001b17d0;
    uVar11 = uVar15 << 2;
    if (0x1fc0000000000000 < uVar15) {
      uVar11 = 0xffffffffffffffff;
    }
    local_448 = uVar15;
    local_880 = operator_new__(uVar11);
  }
  puVar8 = local_450;
  puVar7 = local_880;
  lVar16 = 0;
  local_878 = uVar15;
  if (0 < iVar9) {
    do {
      _InputArray::kind(param_2);
      _InputArray::getMat_((int)param_2);
      iVar10 = Mat::checkVector((Mat *)&local_8e0,2,4,true);
      if (iVar10 < 0) {
        local_950 = 0;
        local_948 = 0;
        pcVar12 = (char *)String::allocate((String *)&local_950,0x1d);
        cVar2 = s_p_checkVector_2__CV_32S__>__0_0043f680[0x1c];
        uVar6 = s_p_checkVector_2__CV_32S__>__0_0043f680._24_4_;
        *(undefined8 *)(pcVar12 + 0x10) = s_p_checkVector_2__CV_32S__>__0_0043f680._16_8_;
        *(undefined4 *)(pcVar12 + 0x18) = uVar6;
        uVar5 = s_p_checkVector_2__CV_32S__>__0_0043f680._8_8_;
        uVar4 = s_p_checkVector_2__CV_32S__>__0_0043f680._0_8_;
        pcVar12[0x1c] = cVar2;
        *(undefined8 *)pcVar12 = uVar4;
        *(undefined8 *)(pcVar12 + 8) = uVar5;
        error(-0xd7,(String *)&local_950,
              "void cv::fillPoly(cv::InputOutputArray, cv::InputArrayOfArrays, const Scalar&, int, int, cv::Point)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x89f);
        String::deallocate((String *)&local_950);
      }
      *(undefined8 *)(puVar8 + lVar16 * 8) = local_8d0;
      *(int *)(puVar7 + lVar16 * 4) =
           (int)(local_8d8 * local_8d4 + ((uint)local_8e0 >> 3 & 0x1ff) * local_8d8 * local_8d4) / 2
      ;
      if (local_8a8 != 0) {
        piVar1 = (int *)(local_8a8 + 0x14);
        do {
          iVar10 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar10 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar10 == 1) {
          Mat::deallocate((Mat *)&local_8e0);
        }
      }
      local_8a8 = 0;
      local_8d0 = 0;
      local_8b8 = 0;
      local_8c0 = 0;
      local_8c8 = 0;
      if (0 < local_8e0._4_4_) {
        iVar10 = 0;
        puVar13 = local_8a0;
        do {
          *puVar13 = 0;
          iVar10 = iVar10 + 1;
          puVar13 = puVar13 + 1;
        } while (iVar10 < local_8e0._4_4_);
      }
      if (local_898 != auStack_890) {
        fastFree(local_898);
      }
      lVar16 = lVar16 + 1;
    } while ((int)lVar16 < iVar9);
  }
  local_8e0 = *param_6;
  fillPoly((Mat *)&local_940,puVar8,puVar7,iVar9,param_3,param_4,param_5,&local_8e0);
  if ((local_880 != auStack_870) && (local_880 != (undefined1 *)0x0)) {
    operator_delete__(local_880);
  }
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  Mat::release((Mat *)&local_940);
  if (local_8f8 == &local_8f0) {
    return;
  }
LAB_001b16fc:
  fastFree(local_8f8);
  return;
}


==================================================================

### FUNC 001b19e0 (308 bytes) name=cvFillPoly

void cvFillPoly(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               cv *param_5,undefined8 param_6,undefined8 param_7,undefined4 param_8,
               undefined4 param_9,AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  local_88 = 0;
  local_84 = 0;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::fillPoly(aMStack_60,param_6,param_7,param_8,&local_80,param_9,(ulong)param_10 & 0xffffffff,
               &local_88);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001b1b40 (5140 bytes) name=cvDrawContours

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void cvDrawContours(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                   undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8,
                   cv *param_9,long param_10,int param_11,uint param_12,int param_13,
                   AutoBuffer *param_14)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined1 *puVar4;
  int iVar5;
  int iVar6;
  char cVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  undefined8 uVar12;
  undefined2 uVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  char *pcVar17;
  uint *puVar18;
  long lVar19;
  long lVar20;
  uint *puVar21;
  uint *puVar22;
  int iVar23;
  uint uVar24;
  long lVar25;
  uint *puVar26;
  uint *puVar27;
  uint *puVar28;
  undefined8 *puVar29;
  int *piVar30;
  ulong uVar31;
  uint uVar32;
  int iVar33;
  String *pSVar34;
  int iVar35;
  int iVar36;
  uint uVar37;
  long lVar38;
  uint uVar39;
  int iVar40;
  int iVar41;
  uint uVar42;
  uint uVar43;
  int iVar44;
  ulong uVar45;
  int iVar46;
  undefined8 *puVar47;
  ulong uVar48;
  char cVar49;
  int iVar50;
  double dVar51;
  double __x;
  undefined8 uVar52;
  int iVar53;
  double dVar54;
  uint uVar55;
  double dVar56;
  int local_2f0;
  int local_2e0;
  int local_2d4;
  int local_2b4;
  long local_278;
  undefined8 local_210;
  undefined8 local_208;
  int local_200;
  int local_1fc;
  int local_1f8;
  int local_1f4;
  int local_1f0;
  int local_1ec;
  int local_1e8;
  int local_1e4;
  int local_1e0;
  int local_1dc;
  int local_1d8;
  int local_1d4;
  int local_1d0;
  int local_1cc;
  int local_1c8;
  int local_1c4;
  int local_1c0;
  int local_1bc;
  int local_1b8;
  int local_1b4;
  undefined1 auStack_1b0 [16];
  void *local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  uint *local_188;
  uint *local_180;
  uint *local_178;
  undefined8 uStack_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 uStack_150;
  undefined8 uStack_148;
  undefined8 local_140;
  undefined8 uStack_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined1 local_108 [32];
  undefined1 auStack_e8 [32];
  undefined8 local_c8;
  int local_c0 [4];
  undefined4 local_b0;
  int local_a4;
  undefined8 local_a0;
  undefined8 local_98;
  char *local_88;
  char *local_78;
  uint local_60;
  int local_5c;
  long local_50;
  int *local_20;
  long *local_18;
  long local_10 [2];
  
  local_1a0 = (void *)0x0;
  local_198 = 0;
  local_190 = 0;
  local_188 = (uint *)0x0;
  local_180 = (uint *)0x0;
  local_178 = (uint *)0x0;
  uStack_170 = param_1;
  uStack_168 = param_2;
  local_160 = param_3;
  uStack_158 = param_4;
  uStack_150 = param_5;
  uStack_148 = param_6;
  local_140 = param_7;
  uStack_138 = param_8;
  cv::cvarrToMat(param_9,(void *)0x0,true,false,0,param_14);
  iVar40 = (int)param_14;
  local_2e0 = param_13;
  if ((param_13 == 0x10) && ((local_60 & 7) != 0)) {
    local_2e0 = 8;
  }
  if (param_10 != 0) {
    if (0x7fff < (int)param_12) {
      local_a0 = 0;
      local_98 = 0;
      pcVar17 = (char *)cv::String::allocate((String *)&local_a0,0x1a);
      uVar13 = s_thickness_<__MAX_THICKNESS_0043f6a0._24_2_;
      uVar12 = s_thickness_<__MAX_THICKNESS_0043f6a0._8_8_;
      uVar52 = s_thickness_<__MAX_THICKNESS_0043f6a0._0_8_;
      *(undefined8 *)(pcVar17 + 0x10) = s_thickness_<__MAX_THICKNESS_0043f6a0._16_8_;
      *(undefined2 *)(pcVar17 + 0x18) = uVar13;
      *(undefined8 *)pcVar17 = uVar52;
      *(undefined8 *)(pcVar17 + 8) = uVar12;
      cv::error(-0xd7,(String *)&local_a0,
                "void cvDrawContours(void*, CvSeq*, CvScalar, CvScalar, int, int, int, CvPoint)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x94f);
      cv::String::deallocate((String *)&local_a0);
    }
    cv::scalarToRawData((Scalar_ *)&uStack_170,local_108,local_60 & 0xfff,0);
    cv::scalarToRawData((Scalar_ *)&uStack_150,auStack_e8,local_60 & 0xfff,0);
    local_278 = 0;
    if (param_11 < -0x7ffffffe) {
      param_11 = -0x7ffffffe;
    }
    if (param_11 == 0x7fffffff) {
      param_11 = 0x7ffffffe;
    }
    else if (param_11 < 0) {
      local_278 = *(long *)(param_10 + 0x10);
      param_11 = 1 - param_11;
      *(undefined8 *)(param_10 + 0x10) = 0;
    }
    cvInitTreeNodeIterator(auStack_1b0,param_10,param_11);
    iVar50 = param_12 * 0x8000;
LAB_001b1db4:
    puVar18 = (uint *)cvNextTreeNode(auStack_1b0);
    if (puVar18 != (uint *)0x0) {
      uVar42 = *puVar18;
      uVar43 = puVar18[10];
      puVar4 = auStack_e8;
      if ((uVar42 & 0x8000) == 0) {
        puVar4 = local_108;
      }
      cvStartReadSeq(puVar18,(String *)&local_a0);
      if (((int)param_12 < 0) && ((long)local_180 - (long)local_188 >> 3 != 0)) {
        local_180 = local_188;
      }
      uVar14 = *puVar18;
      if ((uVar14 & 0x3000) == 0x1000) {
        local_2f0 = (int)((ulong)param_14 >> 0x20);
        if ((puVar18[0xb] == 1) && ((uVar14 >> 0xe & 1) != 0)) {
          uVar42 = puVar18[0x18];
          uVar14 = puVar18[0x19];
          if (local_88 == (char *)0x0) {
            cVar49 = '\0';
          }
          else {
            cVar49 = *local_88;
          }
          uVar37 = iVar40 + uVar42;
          uVar55 = local_2f0 + uVar14;
          if (0 < (int)uVar43) {
            uVar39 = 0;
            do {
              pcVar17 = local_88 + 1;
              cVar7 = *local_88;
              local_88 = pcVar17;
              if (local_78 <= pcVar17) {
                cvChangeSeqBlock((String *)&local_a0,1);
              }
              puVar26 = local_180;
              if (cVar49 != cVar7) {
                if ((int)param_12 < 0) {
                  if (local_180 == local_178) {
                    lVar38 = (long)local_180 - (long)local_188;
                    uVar31 = lVar38 >> 3;
                    if (uVar31 == 0) {
                      uVar45 = 1;
LAB_001b2e94:
                      puVar22 = (uint *)FUN_001a1810(uVar45);
                      puVar21 = puVar22 + 2;
                    }
                    else {
                      uVar48 = uVar31 * 2;
                      uVar45 = 0x1fffffffffffffff;
                      if (((uVar48 < uVar31) || (0x1fffffffffffffff < uVar48)) ||
                         (uVar45 = uVar48, uVar48 != 0)) goto LAB_001b2e94;
                      puVar21 = (uint *)0x8;
                      puVar22 = (uint *)0x0;
                    }
                    if ((long)puVar22 + lVar38 != 0) {
                      *(uint *)((long)puVar22 + lVar38) = uVar42;
                      *(uint *)((long)puVar22 + lVar38 + 4) = uVar14;
                    }
                    puVar28 = puVar22;
                    puVar27 = local_188;
                    if (puVar26 != local_188) {
                      do {
                        if (puVar28 != (uint *)0x0) {
                          *(undefined8 *)puVar28 = *(undefined8 *)puVar27;
                        }
                        puVar27 = puVar27 + 2;
                        puVar28 = puVar28 + 2;
                      } while (puVar26 != puVar27);
                      puVar21 = (uint *)((long)puVar22 +
                                        ((long)puVar26 - (long)(local_188 + 2) & 0xfffffffffffffff8U
                                        ) + 0x10);
                    }
                    puVar27 = puVar26;
                    puVar28 = puVar21;
                    if (puVar26 != local_180) {
                      do {
                        if (puVar28 != (uint *)0x0) {
                          *(undefined8 *)puVar28 = *(undefined8 *)puVar27;
                        }
                        puVar27 = puVar27 + 2;
                        puVar28 = puVar28 + 2;
                      } while (puVar27 != local_180);
                      puVar21 = (uint *)((long)puVar21 +
                                        ((long)puVar27 - (long)(puVar26 + 2) & 0xfffffffffffffff8U)
                                        + 8);
                    }
                    if (local_188 != (uint *)0x0) {
                      operator_delete(local_188);
                    }
                    local_178 = puVar22 + uVar45 * 2;
                    uVar37 = uVar42;
                    uVar55 = uVar14;
                    local_188 = puVar22;
                    local_180 = puVar21;
                  }
                  else {
                    if (local_180 != (uint *)0x0) {
                      *local_180 = uVar42;
                      local_180[1] = uVar14;
                    }
                    uVar37 = uVar42;
                    uVar55 = uVar14;
                    local_180 = local_180 + 2;
                  }
                }
                else {
                  local_c8 = (AutoBuffer *)CONCAT44(uVar14,uVar42);
                  local_130 = CONCAT44(uVar55,uVar37);
                  FUN_001b0658((Mat *)&local_60,&local_130,(String *)&local_c8,puVar4,param_12,
                               local_2e0);
                  uVar37 = uVar42;
                  uVar55 = uVar14;
                }
              }
              uVar31 = -((ulong)(long)cVar7 >> 0x1f & 1) & 0xfffffff800000000 |
                       ((long)cVar7 & 0xffffffffU) << 3;
              uVar39 = uVar39 + 1;
              uVar42 = uVar42 + *(int *)(&DAT_0043f410 + uVar31);
              uVar14 = uVar14 + *(int *)(&DAT_0043f414 + uVar31);
              cVar49 = cVar7;
            } while (uVar39 != uVar43);
          }
          if ((int)param_12 < 0) {
            local_c8 = param_14;
            FUN_001a6dec((Mat *)&local_60,local_188,(ulong)((long)local_180 - (long)local_188) >> 3,
                         &local_1a0,local_108,local_2e0,0,(String *)&local_c8);
          }
          else {
            local_c8 = (AutoBuffer *)CONCAT44(uVar55,uVar37);
            local_130 = CONCAT44(local_2f0 + (int)((ulong)*(undefined8 *)(puVar18 + 0x18) >> 0x20),
                                 iVar40 + (int)*(undefined8 *)(puVar18 + 0x18));
            FUN_001b0658((Mat *)&local_60,(String *)&local_c8,&local_130,puVar4,param_12,local_2e0);
          }
          goto LAB_001b1db4;
        }
        if (1 < (uVar14 & 0xfff) - 0xc) goto LAB_001b1db4;
        if ((uVar42 & 0xfff) != 0xc) {
          local_c8 = (AutoBuffer *)0x0;
          local_c0[0] = 0;
          local_c0[1] = 0;
          pcVar17 = (char *)cv::String::allocate((String *)&local_c8,0x15);
          uVar12 = s_elem_type____CV_32SC2_0043f810._8_8_;
          uVar52 = s_elem_type____CV_32SC2_0043f810._0_8_;
          *(undefined4 *)(pcVar17 + 0x10) = s_elem_type____CV_32SC2_0043f810._16_4_;
          pcVar17[0x14] = s_elem_type____CV_32SC2_0043f810[0x14];
          *(undefined8 *)pcVar17 = uVar52;
          *(undefined8 *)(pcVar17 + 8) = uVar12;
          cv::error(-0xd7,(String *)&local_c8,
                    "void cvDrawContours(void*, CvSeq*, CvScalar, CvScalar, int, int, int, CvPoint)"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x991);
          cv::String::deallocate((String *)&local_c8);
          uVar14 = *puVar18;
        }
        iVar10 = uVar43 - ((uVar14 & 0x4000) == 0);
        pcVar17 = local_88 + 8;
        local_210 = *(undefined8 *)local_88;
        local_208 = 0;
        local_88 = pcVar17;
        if (local_78 <= pcVar17) {
          cvChangeSeqBlock((String *)&local_a0,1);
        }
        local_210 = CONCAT44(local_210._4_4_ + local_2f0,iVar40 + (int)local_210);
        if ((int)param_12 < 0) {
          FUN_001a8ca0(&local_188,&local_210);
          if (0 < iVar10) goto LAB_001b1f0c;
        }
        else {
          if (iVar10 < 1) goto LAB_001b1db4;
LAB_001b1f0c:
          uVar42 = -(int)puVar4 & 0xf;
          iVar2 = 0;
          do {
            while( true ) {
              pcVar17 = local_88 + 8;
              local_208 = *(undefined8 *)local_88;
              local_88 = pcVar17;
              if (local_78 <= pcVar17) {
                cvChangeSeqBlock((String *)&local_a0,1);
              }
              puVar18 = local_180;
              uVar43 = iVar40 + (uint)local_208;
              uVar14 = local_2f0 + local_208._4_4_;
              local_208 = CONCAT44(uVar14,uVar43);
              if ((int)param_12 < 0) break;
              iVar36 = (int)local_210 * 0x10000;
              iVar53 = local_210._4_4_ * 0x10000;
              iVar8 = uVar43 * 0x10000;
              iVar9 = uVar14 * 0x10000;
              if ((int)param_12 < 2) {
                if (local_2e0 < 0x10) {
                  local_1d8 = iVar36 >> 0x10;
                  local_1d4 = iVar53 >> 0x10;
                  local_1e0 = iVar8 >> 0x10;
                  local_1dc = iVar9 >> 0x10;
                  FUN_001a4e8c((Mat *)&local_60,&local_1d8,&local_1e0,puVar4);
                }
                else {
                  local_1f0 = iVar8;
                  local_1ec = iVar9;
                  local_1e8 = iVar36;
                  local_1e4 = iVar53;
                  FUN_001a5090((Mat *)&local_60,&local_1e8,&local_1f0,puVar4);
                }
              }
              else {
                local_128 = 0;
                local_130 = 0;
                dVar56 = (double)(iVar9 + local_210._4_4_ * -0x10000) * DAT_001b2fc8;
                uStack_118 = 0;
                local_120 = 0;
                dVar54 = (double)(int)(iVar36 + uVar43 * -0x10000) * DAT_001b2fc8;
                __x = dVar56 * dVar56 + dVar54 * dVar54;
                if (DAT_001b2fd0 < ABS(__x)) {
                  dVar51 = SQRT(__x);
                  if (NAN(dVar51)) {
                    dVar51 = sqrt(__x);
                  }
                  dVar51 = ((double)iVar50 + (double)((param_12 & 1) << 0x10) * 0.5) / dVar51;
                  lVar19 = lrint(dVar56 * dVar51);
                  lVar20 = lrint(dVar54 * dVar51);
                  lVar38 = local_50;
                  iVar41 = (int)lVar19;
                  iVar15 = (int)lVar20;
                  iVar44 = iVar53 + iVar15;
                  iVar46 = iVar36 + iVar41;
                  iVar33 = iVar9 + iVar15;
                  local_130 = CONCAT44(iVar44,iVar46);
                  iVar35 = iVar8 + iVar41;
                  local_128 = CONCAT44(iVar53 - iVar15,iVar36 - iVar41);
                  local_120 = CONCAT44(iVar9 - iVar15,iVar8 - iVar41);
                  uStack_118 = CONCAT44(iVar33,iVar35);
                  iVar36 = *local_20;
                  iVar53 = local_20[1];
                  if (local_5c < 1) {
                    uVar43 = 0;
                  }
                  else {
                    uVar43 = *(uint *)(local_18 + (long)local_5c + -1);
                  }
                  iVar15 = iVar46;
                  iVar41 = iVar44;
                  if (local_2e0 < 0x10) {
                    iVar16 = 0x8000;
                    local_2b4 = 0x8000;
                    if (8 < local_2e0) goto LAB_001b290c;
                    iVar23 = 0;
                    local_2d4 = 0;
                    piVar30 = (int *)&local_130;
                    do {
                      iVar5 = piVar30[1];
                      iVar6 = *piVar30;
                      if (iVar5 < iVar41) {
                        iVar41 = iVar5;
                        local_2d4 = iVar23;
                      }
                      if (iVar44 < iVar5) {
                        iVar44 = iVar5;
                      }
                      if (iVar15 < iVar6) {
                        iVar15 = iVar6;
                      }
                      if (iVar6 < iVar46) {
                        iVar46 = iVar6;
                      }
                      local_1d0 = iVar35;
                      local_1cc = iVar33;
                      local_1c8 = iVar6;
                      local_1c4 = iVar5;
                      FUN_001a3bb8((Mat *)&local_60,&local_1d0,&local_1c8,puVar4);
                      iVar23 = iVar23 + 1;
                      piVar30 = piVar30 + 2;
                      iVar33 = iVar5;
                      iVar35 = iVar6;
                    } while (iVar23 != 4);
                  }
                  else {
                    iVar16 = 0;
                    local_2b4 = 0xffff;
LAB_001b290c:
                    iVar23 = 0;
                    local_2d4 = 0;
                    piVar30 = (int *)&local_130;
                    do {
                      iVar5 = piVar30[1];
                      iVar6 = *piVar30;
                      if (iVar5 < iVar41) {
                        iVar41 = iVar5;
                        local_2d4 = iVar23;
                      }
                      if (iVar44 < iVar5) {
                        iVar44 = iVar5;
                      }
                      if (iVar15 < iVar6) {
                        iVar15 = iVar6;
                      }
                      if (iVar6 < iVar46) {
                        iVar46 = iVar6;
                      }
                      local_1c0 = iVar35;
                      local_1bc = iVar33;
                      local_1b8 = iVar6;
                      local_1b4 = iVar5;
                      FUN_001a5090((Mat *)&local_60,&local_1c0,&local_1b8,puVar4);
                      iVar23 = iVar23 + 1;
                      piVar30 = piVar30 + 2;
                      iVar33 = iVar5;
                      iVar35 = iVar6;
                    } while (iVar23 != 4);
                  }
                  uVar14 = iVar44 + 0x8000 >> 0x10;
                  iVar44 = iVar41 + 0x8000 >> 0x10;
                  if ((iVar46 + 0x8000 >> 0x10 < iVar53 && -1 < (int)(iVar15 + 0x8000U | uVar14)) &&
                     (uVar37 = (uint)(iVar36 <= iVar44), iVar36 > iVar44)) {
                    uVar55 = iVar36 - 1;
                    if ((int)uVar14 < iVar36) {
                      uVar55 = uVar14;
                    }
                    uVar39 = 1;
                    iVar36 = 4;
                    uVar14 = uVar43;
                    if (uVar42 < uVar43) {
                      uVar14 = uVar42;
                    }
                    uVar11 = (uVar43 - 1) - uVar14;
                    lVar38 = lVar38 + iVar44 * local_10[0];
                    local_c0[3] = local_2d4;
                    uVar3 = ((uVar43 - uVar14) - 0x10 >> 4) + 1;
                    local_a4 = iVar44;
                    local_c0[2] = iVar44;
                    local_c8 = (AutoBuffer *)CONCAT44(1,local_2d4);
                    iVar33 = uVar3 * 0x10;
                    local_b0 = 3;
                    pSVar34 = (String *)&local_c8;
                    iVar46 = iVar44;
LAB_001b2808:
                    if (*(int *)(pSVar34 + 0x10) <= iVar46) {
                      iVar15 = *(int *)pSVar34;
                      piVar30 = (int *)((long)&local_130 + (long)iVar15 * 2 * 4);
                      iVar35 = *(int *)((long)&local_130 + (long)iVar15 * 8 + 4) + 0x8000 >> 0x10;
                      if ((iVar36 == 0) || (iVar46 < iVar35)) {
                        iVar41 = 0;
                      }
                      else {
                        do {
                          iVar41 = *piVar30;
                          iVar36 = iVar36 + -1;
                          iVar15 = *(int *)(pSVar34 + 4) + iVar15 +
                                   (uint)(3 < *(int *)(pSVar34 + 4) + iVar15) * -4;
                          piVar30 = (int *)((long)&local_130 + (long)iVar15 * 2 * 4);
                          iVar35 = *(int *)((long)&local_130 + (long)iVar15 * 8 + 4) + 0x8000 >>
                                   0x10;
                          if (iVar46 < iVar35) break;
                        } while (iVar36 != 0);
                      }
                      iVar23 = *piVar30;
                      if (iVar35 <= iVar46) goto LAB_001b1fcc;
                      *(int *)(pSVar34 + 0x10) = iVar35;
                      iVar5 = (iVar35 - iVar46) * 2;
                      *(int *)pSVar34 = iVar15;
                      *(int *)(pSVar34 + 8) = iVar41;
                      iVar15 = 0;
                      if (iVar5 != 0) {
                        iVar15 = ((iVar35 - iVar46) + (iVar23 - iVar41) * 2) / iVar5;
                      }
                      *(int *)(pSVar34 + 0xc) = iVar15;
                    }
                    pSVar34 = pSVar34 + 0x14;
                    if (pSVar34 == (String *)&local_a0) {
                      do {
                        lVar20 = (long)(int)uVar37;
                        lVar19 = (long)(int)uVar39;
                        iVar35 = local_c0[lVar20 * 5];
                        iVar15 = local_c0[lVar19 * 5];
                        if (iVar15 < iVar35) {
                          uVar37 = uVar37 ^ 1;
                          uVar39 = uVar39 ^ 1;
                          lVar20 = (long)(int)uVar37;
                          lVar19 = (long)(int)uVar39;
                          iVar35 = local_c0[lVar20 * 5];
                          iVar15 = local_c0[lVar19 * 5];
                        }
                        if (-1 < iVar46) {
                          iVar41 = iVar16 + iVar15 >> 0x10;
                          iVar23 = local_2b4 + iVar35 >> 0x10;
                          if ((-1 < iVar41) && (iVar23 < iVar53)) {
                            if (iVar23 < 0) {
                              iVar23 = 0;
                            }
                            puVar1 = (undefined1 *)(lVar38 + (int)(iVar23 * uVar43));
                            iVar23 = iVar53 + -1;
                            if (iVar41 < iVar53) {
                              iVar23 = iVar41;
                            }
                            for (; puVar1 <= (undefined1 *)(lVar38 + (int)(iVar23 * uVar43));
                                puVar1 = puVar1 + (int)uVar43) {
                              if (0 < (int)uVar43) {
                                if ((puVar4 < puVar1 + 0x10 && puVar1 < puVar4 + 0x10) ||
                                   (uVar43 < 0x16)) {
                                  lVar25 = 0;
                                  do {
                                    puVar1[lVar25] = puVar4[lVar25];
                                    lVar25 = lVar25 + 1;
                                  } while ((int)lVar25 < (int)uVar43);
                                }
                                else {
                                  uVar24 = uVar14;
                                  if (uVar14 == 0) {
                                    uVar31 = 0;
                                    if (0xe < uVar11) goto LAB_001b2614;
                                    iVar41 = 1;
                                    *puVar1 = *puVar4;
                                  }
                                  else {
                                    *puVar1 = *puVar4;
                                    if ((((uVar14 != 1) && (puVar1[1] = puVar4[1], uVar14 != 2)) &&
                                        (puVar1[2] = puVar4[2], uVar14 != 3)) &&
                                       ((puVar1[3] = puVar4[3], uVar14 != 4 &&
                                        (puVar1[4] = puVar4[4], uVar14 != 5)))) {
                                      puVar1[5] = puVar4[5];
                                      if (uVar14 == 6) {
                                        uVar24 = 6;
                                      }
                                      else {
                                        puVar1[6] = puVar4[6];
                                        if ((((uVar14 != 7) && (puVar1[7] = puVar4[7], uVar14 != 8))
                                            && ((puVar1[8] = puVar4[8], uVar14 != 9 &&
                                                (((puVar1[9] = puVar4[9], uVar14 != 10 &&
                                                  (puVar1[10] = puVar4[10], uVar14 != 0xb)) &&
                                                 (puVar1[0xb] = puVar4[0xb], uVar14 != 0xc)))))) &&
                                           (puVar1[0xc] = puVar4[0xc], uVar14 != 0xd)) {
                                          puVar1[0xd] = puVar4[0xd];
                                          if (uVar14 == 0xf) {
                                            puVar1[0xe] = puVar4[0xe];
                                          }
                                          else {
                                            uVar24 = 0xe;
                                          }
                                        }
                                      }
                                    }
                                    uVar31 = (ulong)uVar14;
                                    if (0xe < uVar11) {
LAB_001b2614:
                                      uVar32 = 0;
                                      puVar29 = (undefined8 *)(puVar4 + uVar31);
                                      puVar47 = (undefined8 *)(puVar1 + uVar31);
                                      do {
                                        uVar52 = *puVar29;
                                        uVar32 = uVar32 + 1;
                                        puVar47[1] = puVar29[1];
                                        *puVar47 = uVar52;
                                        puVar29 = puVar29 + 2;
                                        puVar47 = puVar47 + 2;
                                      } while (uVar32 < uVar3);
                                      uVar24 = uVar24 + iVar33;
                                      if (iVar33 == uVar43 - uVar14) goto LAB_001b27a0;
                                    }
                                    iVar41 = uVar24 + 1;
                                    puVar1[(int)uVar24] = puVar4[(int)uVar24];
                                    if ((int)uVar43 <= iVar41) goto LAB_001b27a0;
                                  }
                                  iVar5 = iVar41 + 1;
                                  puVar1[iVar41] = puVar4[iVar41];
                                  if (iVar5 < (int)uVar43) {
                                    iVar6 = iVar41 + 2;
                                    puVar1[iVar5] = puVar4[iVar5];
                                    if (iVar6 < (int)uVar43) {
                                      iVar5 = iVar41 + 3;
                                      puVar1[iVar6] = puVar4[iVar6];
                                      if (iVar5 < (int)uVar43) {
                                        iVar6 = iVar41 + 4;
                                        puVar1[iVar5] = puVar4[iVar5];
                                        if (iVar6 < (int)uVar43) {
                                          iVar5 = iVar41 + 5;
                                          puVar1[iVar6] = puVar4[iVar6];
                                          if (iVar5 < (int)uVar43) {
                                            iVar6 = iVar41 + 6;
                                            puVar1[iVar5] = puVar4[iVar5];
                                            if (iVar6 < (int)uVar43) {
                                              iVar5 = iVar41 + 7;
                                              puVar1[iVar6] = puVar4[iVar6];
                                              if (iVar5 < (int)uVar43) {
                                                iVar6 = iVar41 + 8;
                                                puVar1[iVar5] = puVar4[iVar5];
                                                if (iVar6 < (int)uVar43) {
                                                  iVar5 = iVar41 + 9;
                                                  puVar1[iVar6] = puVar4[iVar6];
                                                  if (iVar5 < (int)uVar43) {
                                                    iVar6 = iVar41 + 10;
                                                    puVar1[iVar5] = puVar4[iVar5];
                                                    if (iVar6 < (int)uVar43) {
                                                      iVar5 = iVar41 + 0xb;
                                                      puVar1[iVar6] = puVar4[iVar6];
                                                      if (iVar5 < (int)uVar43) {
                                                        iVar6 = iVar41 + 0xc;
                                                        puVar1[iVar5] = puVar4[iVar5];
                                                        if (iVar6 < (int)uVar43) {
                                                          iVar41 = iVar41 + 0xd;
                                                          puVar1[iVar6] = puVar4[iVar6];
                                                          if (iVar41 < (int)uVar43) {
                                                            puVar1[iVar41] = puVar4[iVar41];
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
LAB_001b27a0:
                            }
                          }
                        }
                        iVar46 = iVar46 + 1;
                        lVar38 = lVar38 + local_10[0];
                        iVar41 = local_c0[lVar19 * 5 + 1];
                        local_c0[lVar20 * 5] = local_c0[lVar20 * 5 + 1] + iVar35;
                        local_c0[lVar19 * 5] = iVar15 + iVar41;
                        if ((int)uVar55 < iVar46) goto LAB_001b1fcc;
                        pSVar34 = (String *)&local_c8;
                      } while (((int)uVar55 <= iVar46 && iVar44 != iVar46) && (0xf < local_2e0));
                    }
                    goto LAB_001b2808;
                  }
                }
LAB_001b1fcc:
                if (local_2e0 < 0x10) {
                  local_c8 = (AutoBuffer *)CONCAT44(iVar9 >> 0x10,iVar8 >> 0x10);
                  FUN_001a1838((Mat *)&local_60,(String *)&local_c8,iVar50 + 0x8000 >> 0x10,puVar4);
                }
                else {
                  local_200 = iVar50;
                  local_1fc = iVar50;
                  local_1f8 = iVar8;
                  local_1f4 = iVar9;
                  FUN_001a9f40((Mat *)&local_60,&local_1f8,&local_200,0,0,0x168,puVar4,0xffffffff,
                               local_2e0);
                }
                uVar43 = (uint)local_208;
                uVar14 = local_208._4_4_;
              }
LAB_001b2040:
              iVar2 = iVar2 + 1;
              local_210 = CONCAT44(uVar14,uVar43);
              if (iVar10 <= iVar2) goto LAB_001b20d8;
            }
            if (local_180 == local_178) {
              lVar38 = (long)local_180 - (long)local_188;
              uVar31 = lVar38 >> 3;
              if (uVar31 == 0) {
                uVar45 = 8;
LAB_001b2cb8:
                puVar21 = operator_new(uVar45);
                puVar26 = puVar21 + 2;
              }
              else {
                uVar48 = uVar31 * 2;
                uVar45 = 0xfffffffffffffff8;
                if ((uVar48 < uVar31) || (0x1fffffffffffffff < uVar48)) goto LAB_001b2cb8;
                uVar45 = uVar31 << 4;
                puVar26 = (uint *)0x8;
                puVar21 = (uint *)0x0;
                if (uVar48 != 0) goto LAB_001b2cb8;
              }
              if ((long)puVar21 + lVar38 != 0) {
                *(uint *)((long)puVar21 + lVar38) = uVar43;
                *(uint *)((long)puVar21 + lVar38 + 4) = uVar14;
              }
              puVar27 = puVar21;
              puVar22 = local_188;
              if (puVar18 != local_188) {
                do {
                  if (puVar27 != (uint *)0x0) {
                    *(undefined8 *)puVar27 = *(undefined8 *)puVar22;
                  }
                  puVar22 = puVar22 + 2;
                  puVar27 = puVar27 + 2;
                } while (puVar18 != puVar22);
                puVar26 = (uint *)((long)puVar21 +
                                  ((long)puVar18 - (long)(local_188 + 2) & 0xfffffffffffffff8U) +
                                  0x10);
              }
              puVar22 = puVar18;
              puVar27 = puVar26;
              if (puVar18 != local_180) {
                do {
                  if (puVar27 != (uint *)0x0) {
                    *(undefined8 *)puVar27 = *(undefined8 *)puVar22;
                  }
                  puVar22 = puVar22 + 2;
                  puVar27 = puVar27 + 2;
                } while (puVar22 != local_180);
                puVar26 = (uint *)((long)puVar26 +
                                  ((long)puVar22 - (long)(puVar18 + 2) & 0xfffffffffffffff8U) + 8);
              }
              if (local_188 != (uint *)0x0) {
                operator_delete(local_188);
              }
              local_178 = (uint *)((long)puVar21 + uVar45);
              local_188 = puVar21;
              local_180 = puVar26;
              goto LAB_001b2040;
            }
            if (local_180 != (uint *)0x0) {
              *local_180 = uVar43;
              local_180[1] = uVar14;
            }
            local_180 = local_180 + 2;
            local_210 = CONCAT44(uVar14,uVar43);
            iVar2 = iVar2 + 1;
          } while (iVar2 < iVar10);
LAB_001b20d8:
          if (-1 < (int)param_12) goto LAB_001b1db4;
        }
        local_c8 = (AutoBuffer *)0x0;
        FUN_001a6dec((Mat *)&local_60,local_188,(ulong)((long)local_180 - (long)local_188) >> 3,
                     &local_1a0,local_108,local_2e0,0,(String *)&local_c8);
      }
      goto LAB_001b1db4;
    }
    if ((int)param_12 < 0) {
      FUN_001a95a4((Mat *)&local_60,&local_1a0,local_108);
    }
    if (local_278 != 0) {
      *(long *)(param_10 + 0x10) = local_278;
    }
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != local_10) {
    cv::fastFree(local_18);
  }
  if (local_188 != (uint *)0x0) {
    operator_delete(local_188);
  }
  if (local_1a0 != (void *)0x0) {
    operator_delete(local_1a0);
  }
  return;
}


==================================================================

### FUNC 001b2fd8 (940 bytes) name=FUN_001b2fd8

void FUN_001b2fd8(long *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  long lVar13;
  long lVar14;
  void *__dest;
  undefined8 *puVar15;
  void *pvVar16;
  ulong uVar17;
  undefined8 *puVar18;
  size_t sVar19;
  undefined8 *__src;
  ulong uVar20;
  size_t __n;
  
  if (param_3 == 0) {
    return;
  }
  puVar18 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar18 >> 5) * -0x5555555555555555)) {
    sVar19 = (long)puVar18 - (long)param_2;
    uVar1 = *param_4;
    uVar7 = param_4[1];
    uVar17 = ((long)sVar19 >> 5) * -0x5555555555555555;
    uVar2 = param_4[2];
    uVar8 = param_4[3];
    uVar3 = param_4[4];
    uVar9 = param_4[5];
    uVar4 = param_4[6];
    uVar10 = param_4[7];
    uVar5 = param_4[8];
    uVar11 = param_4[9];
    uVar6 = param_4[10];
    uVar12 = param_4[0xb];
    if (param_3 < uVar17) {
      __src = puVar18 + param_3 * -0xc;
      puVar15 = puVar18;
      if (((long)puVar18 - (long)__src >> 5) * -0x5555555555555555 != 0) {
        memmove(puVar18,__src,(long)puVar18 - (long)__src);
        puVar15 = (undefined8 *)param_1[1];
      }
      sVar19 = (long)__src - (long)param_2;
      param_1[1] = (long)(puVar15 + param_3 * 0xc);
      if (((long)sVar19 >> 5) * -0x5555555555555555 != 0) {
        memmove((void *)((long)puVar18 - sVar19),param_2,sVar19);
      }
      puVar18 = param_2 + param_3 * 0xc;
      for (; param_2 != puVar18; param_2 = param_2 + 0xc) {
        *param_2 = uVar1;
        param_2[1] = uVar7;
        param_2[2] = uVar2;
        param_2[3] = uVar8;
        param_2[4] = uVar3;
        param_2[5] = uVar9;
        param_2[6] = uVar4;
        param_2[7] = uVar10;
        param_2[8] = uVar5;
        param_2[9] = uVar11;
        param_2[10] = uVar6;
        param_2[0xb] = uVar12;
      }
      return;
    }
    lVar13 = param_3 + ((long)sVar19 >> 5) * 0x5555555555555555;
    puVar15 = puVar18;
    for (lVar14 = lVar13; lVar14 != 0; lVar14 = lVar14 + -1) {
      *puVar15 = uVar1;
      puVar15[1] = uVar7;
      puVar15[2] = uVar2;
      puVar15[3] = uVar8;
      puVar15[4] = uVar3;
      puVar15[5] = uVar9;
      puVar15[6] = uVar4;
      puVar15[7] = uVar10;
      puVar15[8] = uVar5;
      puVar15[9] = uVar11;
      puVar15[10] = uVar6;
      puVar15[0xb] = uVar12;
      puVar15 = puVar15 + 0xc;
    }
    puVar15 = puVar18 + lVar13 * 0xc;
    param_1[1] = (long)puVar15;
    if (uVar17 != 0) {
      memmove(puVar15,param_2,sVar19);
      puVar15 = (undefined8 *)param_1[1];
    }
    param_1[1] = (long)puVar15 + sVar19;
    if (puVar18 == param_2) {
      return;
    }
    do {
      puVar15 = param_2 + 0xc;
      *param_2 = uVar1;
      param_2[1] = uVar7;
      param_2[2] = uVar2;
      param_2[3] = uVar8;
      param_2[4] = uVar3;
      param_2[5] = uVar9;
      param_2[6] = uVar4;
      param_2[7] = uVar10;
      param_2[8] = uVar5;
      param_2[9] = uVar11;
      param_2[10] = uVar6;
      param_2[0xb] = uVar12;
      param_2 = puVar15;
    } while (puVar18 != puVar15);
    return;
  }
  pvVar16 = (void *)*param_1;
  lVar14 = (long)puVar18 - (long)pvVar16 >> 5;
  uVar17 = lVar14 * -0x5555555555555555;
  if (lVar14 * 0x5555555555555555 + 0x2aaaaaaaaaaaaaaU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar20 = uVar17;
  if (uVar17 < param_3) {
    uVar20 = param_3;
  }
  uVar20 = uVar20 + uVar17;
  if ((uVar17 < uVar20 || uVar17 - uVar20 == 0) && (uVar20 < 0x2aaaaaaaaaaaaab)) {
    sVar19 = (long)param_2 - (long)pvVar16;
    if (uVar20 == 0) {
      uVar20 = 0;
      __dest = (void *)0x0;
      __n = sVar19;
      goto LAB_001b318c;
    }
    uVar20 = uVar20 * 0x60;
  }
  else {
    sVar19 = (long)param_2 - (long)pvVar16;
    uVar20 = 0xffffffffffffffc0;
  }
  __dest = operator_new(uVar20);
  pvVar16 = (void *)*param_1;
  __n = (long)param_2 - (long)pvVar16;
LAB_001b318c:
  puVar18 = (undefined8 *)((long)__dest + sVar19);
  uVar17 = param_3;
  do {
    uVar17 = uVar17 - 1;
    uVar1 = param_4[1];
    *puVar18 = *param_4;
    puVar18[1] = uVar1;
    uVar1 = param_4[3];
    puVar18[2] = param_4[2];
    puVar18[3] = uVar1;
    uVar1 = param_4[5];
    puVar18[4] = param_4[4];
    puVar18[5] = uVar1;
    uVar1 = param_4[7];
    puVar18[6] = param_4[6];
    puVar18[7] = uVar1;
    uVar1 = param_4[9];
    puVar18[8] = param_4[8];
    puVar18[9] = uVar1;
    uVar1 = param_4[0xb];
    puVar18[10] = param_4[10];
    puVar18[0xb] = uVar1;
    puVar18 = puVar18 + 0xc;
  } while (uVar17 != 0);
  if (((long)__n >> 5) * -0x5555555555555555 != 0) {
    memmove(__dest,pvVar16,__n);
  }
  sVar19 = param_1[1] - (long)param_2;
  pvVar16 = (void *)((long)__dest + __n + param_3 * 0x60);
  if (((long)sVar19 >> 5) * -0x5555555555555555 != 0) {
    memmove(pvVar16,param_2,sVar19);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)__dest;
  param_1[1] = (long)pvVar16 + sVar19;
  param_1[2] = (long)__dest + uVar20;
  return;
}


==================================================================

### FUNC 001b3384 (736 bytes) name=FUN_001b3384

void FUN_001b3384(long *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  undefined4 uVar2;
  long lVar3;
  ulong uVar4;
  undefined8 *puVar5;
  void *__dest;
  void *pvVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  ulong uVar9;
  size_t __n;
  undefined8 uVar10;
  undefined8 *puVar11;
  size_t sVar12;
  undefined8 *__src;
  
  if (param_3 == 0) {
    return;
  }
  puVar11 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar11 >> 5)) {
    sVar12 = (long)puVar11 - (long)param_2;
    uVar8 = *param_4;
    uVar4 = (long)sVar12 >> 5;
    uVar10 = param_4[1];
    uVar1 = *(undefined4 *)(param_4 + 2);
    uVar2 = *(undefined4 *)((long)param_4 + 0x14);
    uVar7 = param_4[3];
    if (param_3 < uVar4) {
      __src = puVar11 + param_3 * -4;
      puVar5 = puVar11;
      if ((long)puVar11 - (long)__src >> 5 != 0) {
        memmove(puVar11,__src,(long)puVar11 - (long)__src);
        puVar5 = (undefined8 *)param_1[1];
      }
      sVar12 = (long)__src - (long)param_2;
      param_1[1] = (long)(puVar5 + param_3 * 4);
      if ((long)sVar12 >> 5 != 0) {
        memmove((void *)((long)puVar11 - sVar12),param_2,sVar12);
      }
      puVar11 = param_2 + param_3 * 4;
      for (; param_2 != puVar11; param_2 = param_2 + 4) {
        *param_2 = uVar8;
        param_2[1] = uVar10;
        *(undefined4 *)(param_2 + 2) = uVar1;
        *(undefined4 *)((long)param_2 + 0x14) = uVar2;
        param_2[3] = uVar7;
      }
      return;
    }
    puVar5 = puVar11;
    for (lVar3 = param_3 - uVar4; lVar3 != 0; lVar3 = lVar3 + -1) {
      *puVar5 = uVar8;
      puVar5[1] = uVar10;
      *(undefined4 *)(puVar5 + 2) = uVar1;
      *(undefined4 *)((long)puVar5 + 0x14) = uVar2;
      puVar5[3] = uVar7;
      puVar5 = puVar5 + 4;
    }
    puVar5 = puVar11 + (param_3 - uVar4) * 4;
    param_1[1] = (long)puVar5;
    if (uVar4 != 0) {
      memmove(puVar5,param_2,sVar12);
      puVar5 = (undefined8 *)param_1[1];
    }
    param_1[1] = (long)puVar5 + sVar12;
    if (puVar11 == param_2) {
      return;
    }
    do {
      *param_2 = uVar8;
      puVar5 = param_2 + 4;
      param_2[1] = uVar10;
      *(undefined4 *)(param_2 + 2) = uVar1;
      *(undefined4 *)((long)param_2 + 0x14) = uVar2;
      param_2[3] = uVar7;
      param_2 = puVar5;
    } while (puVar11 != puVar5);
    return;
  }
  pvVar6 = (void *)*param_1;
  uVar4 = (long)puVar11 - (long)pvVar6 >> 5;
  if (0x7ffffffffffffff - uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar9 = uVar4;
  if (uVar4 < param_3) {
    uVar9 = param_3;
  }
  uVar9 = uVar9 + uVar4;
  if ((uVar9 < uVar4) || (0x7ffffffffffffff < uVar9)) {
    sVar12 = (long)param_2 - (long)pvVar6;
    uVar9 = 0xffffffffffffffe0;
  }
  else {
    sVar12 = (long)param_2 - (long)pvVar6;
    if (uVar9 == 0) {
      uVar9 = 0;
      __dest = (void *)0x0;
      __n = sVar12;
      goto LAB_001b35a4;
    }
    uVar9 = uVar9 * 0x20;
  }
  __dest = operator_new(uVar9);
  pvVar6 = (void *)*param_1;
  __n = (long)param_2 - (long)pvVar6;
LAB_001b35a4:
  puVar11 = (undefined8 *)((long)__dest + sVar12);
  uVar4 = param_3;
  do {
    uVar4 = uVar4 - 1;
    uVar7 = param_4[1];
    *puVar11 = *param_4;
    puVar11[1] = uVar7;
    uVar7 = param_4[3];
    puVar11[2] = param_4[2];
    puVar11[3] = uVar7;
    puVar11 = puVar11 + 4;
  } while (uVar4 != 0);
  if ((long)__n >> 5 != 0) {
    memmove(__dest,pvVar6,__n);
  }
  pvVar6 = (void *)((long)__dest + __n + param_3 * 0x20);
  sVar12 = param_1[1] - (long)param_2;
  if ((long)sVar12 >> 5 != 0) {
    memmove(pvVar6,param_2,sVar12);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)__dest;
  param_1[1] = (long)pvVar6 + sVar12;
  param_1[2] = (long)__dest + uVar9;
  return;
}


==================================================================

### FUNC 001b3664 (2900 bytes) name=drawContours

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::drawContours(cv::_InputOutputArray const&, cv::_InputArray const&, int, cv::Scalar_<double>
   const&, int, int, cv::_InputArray const&, int, cv::Point_<int>) */

void cv::drawContours(_InputArray *param_1,_InputArray *param_2,uint param_3,ulong *param_4,
                     undefined4 param_5,undefined4 param_6,_InputArray *param_7,uint param_8,
                     undefined8 *param_9)

{
  long lVar1;
  int *piVar2;
  void *pvVar3;
  void *pvVar4;
  void *pvVar5;
  void *pvVar6;
  uint uVar7;
  char cVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined2 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined4 uVar16;
  bool bVar17;
  int iVar18;
  ulong uVar19;
  void *pvVar20;
  ulong uVar21;
  undefined8 *puVar22;
  long lVar23;
  char *pcVar24;
  int *piVar25;
  long lVar26;
  ulong uVar27;
  Mat *pMVar28;
  ulong uVar29;
  void *pvVar30;
  long lVar31;
  long lVar32;
  long local_238;
  undefined8 local_230;
  undefined8 local_228;
  void *local_220;
  undefined8 local_218;
  undefined8 local_210;
  void *local_208;
  void *local_200;
  undefined8 local_1f8;
  ulong local_1f0;
  ulong local_1e8;
  ulong local_1e0;
  ulong uStack_1d8;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined8 local_1b0;
  uint local_1a8;
  undefined4 local_1a4;
  undefined8 local_1a0;
  undefined4 local_198;
  undefined8 local_190;
  undefined4 local_188;
  undefined4 local_184;
  uint local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  ulong local_b0;
  ulong uStack_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  undefined4 local_5c;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar18 = _InputArray::kind(param_1);
  if (iVar18 == 0x10000) {
    pMVar28 = *(Mat **)(param_1 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(uint *)pMVar28;
    local_17c = *(int *)(pMVar28 + 4);
    local_178 = *(undefined4 *)(pMVar28 + 8);
    local_174 = *(undefined4 *)(pMVar28 + 0xc);
    local_170 = *(undefined8 *)(pMVar28 + 0x10);
    local_168 = *(undefined8 *)(pMVar28 + 0x18);
    local_160 = *(undefined8 *)(pMVar28 + 0x20);
    local_158 = *(undefined8 *)(pMVar28 + 0x28);
    local_150 = *(undefined8 *)(pMVar28 + 0x30);
    local_148 = *(long *)(pMVar28 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (local_148 != 0) {
      piVar25 = (int *)(local_148 + 0x14);
      do {
        cVar8 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar17) {
          *piVar25 = *piVar25 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar28 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar28 + 0x48);
      local_128 = (*(undefined8 **)(pMVar28 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar28);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar18 = _InputArray::kind(param_7);
  if (iVar18 == 0x10000) {
    pMVar28 = *(Mat **)(param_7 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar28;
    local_11c = *(int *)(pMVar28 + 4);
    local_118 = *(int *)(pMVar28 + 8);
    local_114 = *(int *)(pMVar28 + 0xc);
    local_110 = *(long *)(pMVar28 + 0x10);
    local_108 = *(undefined8 *)(pMVar28 + 0x18);
    local_100 = *(undefined8 *)(pMVar28 + 0x20);
    local_f8 = *(undefined8 *)(pMVar28 + 0x28);
    local_f0 = *(undefined8 *)(pMVar28 + 0x30);
    local_e8 = *(long *)(pMVar28 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar25 = (int *)(local_e8 + 0x14);
      do {
        cVar8 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar17) {
          *piVar25 = *piVar25 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar28 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar28 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar28 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar28);
    }
  }
  else {
    _InputArray::getMat_((int)param_7);
  }
  local_184 = 1;
  if (local_17c != 1) {
    local_184 = local_174;
  }
  local_1a8 = local_180 & 0x4fff | 0x42420000;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = local_170;
  local_188 = local_178;
  local_1a4 = (undefined4)*local_138;
  uVar19 = _InputArray::total(param_2,-1);
  local_220 = (void *)0x0;
  local_218 = 0;
  local_210 = 0;
  local_208 = (void *)0x0;
  local_200 = (void *)0x0;
  local_1f8 = 0;
  if (uVar19 == 0) goto LAB_001b3b20;
  local_60 = 0;
  local_5c = 0;
  local_58 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_34 = 0;
  local_30 = 0;
  local_28 = 0;
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  FUN_001b2fd8(&local_220,0,uVar19,&local_60);
  local_1c8 = 0;
  local_1c0 = 0;
  uVar29 = (long)local_200 - (long)local_208 >> 5;
  local_1b8 = 0;
  local_1b4 = 0;
  local_1b0 = 0;
  if (uVar29 < uVar19) {
    FUN_001b3384(&local_208,local_200,uVar19 - uVar29);
  }
  else if (uVar19 < uVar29) {
    local_200 = (void *)((long)local_208 + uVar19 * 0x20);
  }
  pvVar20 = local_220;
  do {
    *(undefined8 *)((long)pvVar20 + 0x58) = 0;
    pvVar20 = (void *)((long)pvVar20 + 0x60);
  } while (pvVar20 != (void *)((long)local_220 + uVar19 * 0x60));
  if ((int)param_3 < 0) {
    uVar21 = 0;
    uVar29 = uVar19;
  }
  else {
    if ((int)uVar19 <= (int)param_3) {
      local_230 = 0;
      local_228 = 0;
      pcVar24 = (char *)String::allocate((String *)&local_230,0x29);
      cVar8 = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828[0x28];
      uVar12 = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828._24_8_;
      uVar11 = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828._16_8_;
      uVar10 = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828._8_8_;
      uVar9 = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828._0_8_;
      *(undefined8 *)(pcVar24 + 0x20) = s_0_<__contourIdx_&&_contourIdx_<_(_0043f828._32_8_;
      pcVar24[0x28] = cVar8;
      *(undefined8 *)pcVar24 = uVar9;
      *(undefined8 *)(pcVar24 + 8) = uVar10;
      *(undefined8 *)(pcVar24 + 0x10) = uVar11;
      *(undefined8 *)(pcVar24 + 0x18) = uVar12;
      error(-0xd7,(String *)&local_230,
            "void cv::drawContours(cv::InputOutputArray, cv::InputArrayOfArrays, int, const Scalar&, int, int, cv::InputArray, int, cv::Point)"
            ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x8fb);
      String::deallocate((String *)&local_230);
    }
    uVar21 = (ulong)(int)param_3;
    uVar29 = (long)(int)(param_3 + 1);
  }
  if (uVar29 <= uVar21) {
    if (local_110 != 0) goto LAB_001b39e4;
    goto LAB_001b40e8;
  }
  local_238 = NEON_shl(uVar21,1);
  lVar32 = uVar21 << 5;
  lVar31 = (local_238 + uVar21) * 0x20;
  uVar27 = uVar21;
  do {
    iVar18 = _InputArray::kind(param_2);
    if (((int)uVar27 < 0) && (iVar18 == 0x10000)) {
      pMVar28 = *(Mat **)(param_2 + 8);
      local_78 = &local_70;
      uVar7 = *(uint *)pMVar28;
      local_b0 = *(ulong *)(pMVar28 + 0x10);
      local_c0 = *(ulong *)pMVar28;
      local_b8 = *(ulong *)(pMVar28 + 8);
      uStack_a8 = *(ulong *)(pMVar28 + 0x18);
      local_a0 = *(undefined8 *)(pMVar28 + 0x20);
      local_98 = *(undefined8 *)(pMVar28 + 0x28);
      local_90 = *(undefined8 *)(pMVar28 + 0x30);
      local_88 = *(long *)(pMVar28 + 0x38);
      local_68 = 0;
      local_70 = 0;
      if (local_88 != 0) {
        piVar25 = (int *)(local_88 + 0x14);
        do {
          cVar8 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar17) {
            *piVar25 = *piVar25 + 1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
      }
      local_80 = &local_b8;
      if (*(int *)(pMVar28 + 4) < 3) {
        local_70 = **(undefined8 **)(pMVar28 + 0x48);
        local_68 = (*(undefined8 **)(pMVar28 + 0x48))[1];
      }
      else {
        local_c0 = (ulong)uVar7;
        Mat::copySize((Mat *)&local_c0,pMVar28);
      }
    }
    else {
      _InputArray::getMat_((int)param_2);
    }
    if (local_b0 == 0) {
LAB_001b3d24:
      if (local_88 != 0) {
        piVar25 = (int *)(local_88 + 0x14);
        do {
          iVar18 = *piVar25;
          cVar8 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar17) {
            *piVar25 = iVar18 + -1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_c0);
        }
      }
      if (0 < local_c0._4_4_) {
        iVar18 = 0;
        puVar22 = local_80;
        do {
          *(undefined4 *)puVar22 = 0;
          iVar18 = iVar18 + 1;
          puVar22 = (undefined8 *)((long)puVar22 + 4);
        } while (iVar18 < local_c0._4_4_);
      }
    }
    else {
      if (local_c0._4_4_ < 3) {
        lVar26 = (long)local_b8._4_4_ * (long)(int)local_b8;
      }
      else {
        lVar23 = 0;
        lVar26 = 1;
        do {
          lVar1 = lVar23 * 4;
          lVar23 = lVar23 + 1;
          lVar26 = lVar26 * *(int *)((long)local_80 + lVar1);
        } while ((int)lVar23 < local_c0._4_4_);
      }
      if (lVar26 == 0) goto LAB_001b3d24;
      iVar18 = Mat::checkVector((Mat *)&local_c0,2,4,true);
      if (iVar18 < 1) {
        local_1f0 = 0;
        local_1e8 = 0;
        pcVar24 = (char *)String::allocate((String *)&local_1f0,0xb);
        uVar13 = s_npoints_>_0_0043f858._8_2_;
        *(undefined8 *)pcVar24 = s_npoints_>_0_0043f858._0_8_;
        cVar8 = s_npoints_>_0_0043f858[10];
        *(undefined2 *)(pcVar24 + 8) = uVar13;
        pcVar24[10] = cVar8;
        error(-0xd7,(String *)&local_1f0,
              "void cv::drawContours(cv::InputOutputArray, cv::InputArrayOfArrays, int, const Scalar&, int, int, cv::InputArray, int, cv::Point)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x906);
        String::deallocate((String *)&local_1f0);
      }
      cvMakeSeqHeaderForArray
                (0x500c,0x60,8,local_b0,iVar18,(long)local_220 + lVar31,(long)local_208 + lVar32);
      if (local_88 != 0) {
        piVar25 = (int *)(local_88 + 0x14);
        do {
          iVar18 = *piVar25;
          cVar8 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar17) {
            *piVar25 = iVar18 + -1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_c0);
        }
      }
      if (0 < local_c0._4_4_) {
        iVar18 = 0;
        puVar22 = local_80;
        do {
          *(undefined4 *)puVar22 = 0;
          iVar18 = iVar18 + 1;
          puVar22 = (undefined8 *)((long)puVar22 + 4);
        } while (iVar18 < local_c0._4_4_);
      }
    }
    local_88 = 0;
    local_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    local_b0 = 0;
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    uVar27 = uVar27 + 1;
    lVar31 = lVar31 + 0x60;
    lVar32 = lVar32 + 0x20;
  } while (uVar27 != uVar29);
  if (local_110 == 0) {
LAB_001b3a24:
    uVar19 = uVar21;
    do {
      lVar32 = uVar19 * 0x60;
      lVar31 = (long)local_220 + lVar32 + 0x60;
      pvVar20 = (void *)((long)local_220 + (uVar19 - 1) * 0x60);
      if (uVar29 - 1 <= uVar19) {
        lVar31 = 0;
      }
      bVar17 = uVar19 <= uVar21;
      uVar19 = uVar19 + 1;
      if (bVar17) {
        pvVar20 = (void *)0x0;
      }
      *(long *)((long)local_220 + lVar32 + 0x10) = lVar31;
      *(void **)((long)local_220 + lVar32 + 8) = pvVar20;
    } while (uVar19 < uVar29);
    pvVar20 = (void *)((long)local_220 + (local_238 + uVar21) * 0x20);
  }
  else {
LAB_001b39e4:
    if (local_11c < 3) {
      lVar32 = (long)local_114 * (long)local_118;
    }
    else {
      lVar31 = 0;
      lVar32 = 1;
      do {
        piVar25 = local_e0 + lVar31;
        lVar31 = lVar31 + 1;
        lVar32 = lVar32 * *piVar25;
      } while ((int)lVar31 < local_11c);
    }
    if ((lVar32 == 0) || (param_8 == 0)) {
      if (uVar29 <= uVar21) goto LAB_001b40e8;
      local_238 = NEON_shl(uVar21,1);
      goto LAB_001b3a24;
    }
    if (local_11c < 3) {
      uVar27 = (long)local_114 * (long)local_118;
    }
    else {
      lVar31 = 0;
      uVar27 = 1;
      do {
        piVar25 = local_e0 + lVar31;
        lVar31 = lVar31 + 1;
        uVar27 = uVar27 * (long)*piVar25;
      } while ((int)lVar31 < local_11c);
    }
    if ((uVar19 != uVar27) || ((local_120 & 0xfff) != 0x1c)) {
      local_c0 = 0;
      local_b8 = 0;
      puVar22 = (undefined8 *)String::allocate((String *)&local_c0,0x3e);
      uVar13 = DAT_0043f8a4;
      uVar16 = DAT_0043f8a0;
      uVar15 = _DAT_0043f890;
      uVar14 = DAT_0043f888;
      uVar12 = DAT_0043f880;
      uVar11 = DAT_0043f878;
      uVar10 = DAT_0043f870;
      uVar9 = DAT_0043f868;
      puVar22[6] = _LAB_0043f898;
      *(undefined4 *)(puVar22 + 7) = uVar16;
      *(undefined2 *)((long)puVar22 + 0x3c) = uVar13;
      *puVar22 = uVar9;
      puVar22[1] = uVar10;
      puVar22[2] = uVar11;
      puVar22[3] = uVar12;
      puVar22[4] = uVar14;
      puVar22[5] = uVar15;
      error(-0xd7,(String *)&local_c0,
            "void cv::drawContours(cv::InputOutputArray, cv::InputArrayOfArrays, int, const Scalar&, int, int, cv::InputArray, int, cv::Point)"
            ,"/builds/master_pack-android/opencv/modules/imgproc/src/drawing.cpp",0x914);
      String::deallocate((String *)&local_c0);
    }
    if (uVar19 == uVar29 - uVar21) {
      if (uVar29 <= uVar21) goto LAB_001b40e8;
      pvVar20 = (void *)((long)local_220 + uVar21 * 0x60);
      piVar25 = (int *)(local_110 + uVar21 * 0x10);
      pvVar30 = pvVar20;
      do {
        piVar2 = piVar25 + 4;
        iVar18 = piVar25[3];
        pvVar3 = (void *)((long)local_220 + (long)piVar25[1] * 0x60);
        pvVar4 = (void *)((long)local_220 + (long)*piVar25 * 0x60);
        if (uVar19 <= (ulong)(long)*piVar25) {
          pvVar4 = (void *)0x0;
        }
        if (uVar19 <= (ulong)(long)piVar25[1]) {
          pvVar3 = (void *)0x0;
        }
        pvVar5 = (void *)((long)local_220 + (long)piVar25[2] * 0x60);
        if (uVar19 <= (ulong)(long)piVar25[2]) {
          pvVar5 = (void *)0x0;
        }
        pvVar6 = (void *)((long)local_220 + (long)iVar18 * 0x60);
        *(void **)((long)pvVar30 + 0x10) = pvVar4;
        if (uVar19 <= (ulong)(long)iVar18) {
          pvVar6 = (void *)0x0;
        }
        *(void **)((long)pvVar30 + 8) = pvVar3;
        *(void **)((long)pvVar30 + 0x20) = pvVar5;
        *(void **)((long)pvVar30 + 0x18) = pvVar6;
        piVar25 = piVar2;
        pvVar30 = (void *)((long)pvVar30 + 0x60);
      } while (piVar2 != (int *)(local_110 + uVar29 * 0x10));
    }
    else {
      iVar18 = *(int *)(local_110 + uVar21 * 0x10 + 8);
      if (iVar18 < 0) {
LAB_001b40e8:
        pvVar20 = (void *)((long)local_220 + uVar21 * 0x60);
      }
      else {
        FUN_001a36f0(param_2,uVar19,local_110,iVar18,&local_220,&local_208);
        pvVar20 = (void *)((long)local_220 + uVar21 * 0x60);
        *(void **)((long)pvVar20 + 0x20) = (void *)((long)local_220 + (long)iVar18 * 0x60);
      }
    }
  }
  local_1e8 = param_4[1];
  local_1f0 = *param_4;
  uStack_1d8 = param_4[3];
  local_1e0 = param_4[2];
  local_c0 = local_1f0;
  local_b8 = local_1e8;
  local_b0 = local_1e0;
  uStack_a8 = uStack_1d8;
  cvDrawContours(local_1f0,local_1e8,local_1e0,uStack_1d8,local_1f0,local_1e8,local_1e0,uStack_1d8,
                 &local_1a8,pvVar20,(param_8 ^ (int)~param_3 >> 0x1f) - ((int)~param_3 >> 0x1f),
                 param_5,param_6,*param_9);
  if (local_208 != (void *)0x0) {
    operator_delete(local_208);
  }
  if (local_220 != (void *)0x0) {
    operator_delete(local_220);
  }
LAB_001b3b20:
  Mat::release((Mat *)&local_120);
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  Mat::release((Mat *)&local_180);
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 001b4284 (4 bytes) name=FUN_001b4284

void FUN_001b4284(void)

{
  return;
}


==================================================================

### FUNC 001b4288 (4 bytes) name=FUN_001b4288

void FUN_001b4288(void)

{
  return;
}


==================================================================

### FUNC 001b428c (4 bytes) name=FUN_001b428c

void FUN_001b428c(void)

{
  return;
}


==================================================================

### FUNC 001b4290 (4 bytes) name=FUN_001b4290

void FUN_001b4290(void)

{
  return;
}


==================================================================

### FUNC 001b4294 (4 bytes) name=FUN_001b4294

void FUN_001b4294(void)

{
  return;
}


==================================================================

### FUNC 001b4298 (4 bytes) name=FUN_001b4298

void FUN_001b4298(void)

{
  return;
}


==================================================================

### FUNC 001b429c (4 bytes) name=FUN_001b429c

void FUN_001b429c(void)

{
  return;
}


==================================================================

### FUNC 001b42a0 (4 bytes) name=FUN_001b42a0

void FUN_001b42a0(void)

{
  return;
}


==================================================================

### FUNC 001b42a4 (4 bytes) name=FUN_001b42a4

void FUN_001b42a4(void)

{
  return;
}


==================================================================

### FUNC 001b42a8 (4 bytes) name=FUN_001b42a8

void FUN_001b42a8(void)

{
  return;
}


==================================================================

### FUNC 001b42ac (4 bytes) name=FUN_001b42ac

void FUN_001b42ac(void)

{
  return;
}


==================================================================

### FUNC 001b42b0 (4 bytes) name=FUN_001b42b0

void FUN_001b42b0(void)

{
  return;
}


==================================================================

### FUNC 001b42b4 (4 bytes) name=FUN_001b42b4

void FUN_001b42b4(void)

{
  return;
}


==================================================================

### FUNC 001b42b8 (4 bytes) name=FUN_001b42b8

void FUN_001b42b8(void)

{
  return;
}


==================================================================

### FUNC 001b42bc (4 bytes) name=FUN_001b42bc

void FUN_001b42bc(void)

{
  return;
}


==================================================================

### FUNC 001b42c0 (4 bytes) name=FUN_001b42c0

void FUN_001b42c0(void)

{
  return;
}


==================================================================

### FUNC 001b42c4 (4 bytes) name=FUN_001b42c4

void FUN_001b42c4(void)

{
  return;
}


==================================================================

### FUNC 001b42c8 (4 bytes) name=FUN_001b42c8

void FUN_001b42c8(void)

{
  return;
}


==================================================================

### FUNC 001b42cc (4 bytes) name=FUN_001b42cc

void FUN_001b42cc(void)

{
  return;
}


==================================================================

### FUNC 001b42d0 (4 bytes) name=FUN_001b42d0

void FUN_001b42d0(void)

{
  return;
}


==================================================================

### FUNC 001b42d4 (4 bytes) name=FUN_001b42d4

void FUN_001b42d4(void)

{
  return;
}


==================================================================

### FUNC 001b42d8 (4 bytes) name=FUN_001b42d8

void FUN_001b42d8(void)

{
  return;
}


==================================================================

### FUNC 001b42dc (4 bytes) name=FUN_001b42dc

void FUN_001b42dc(void)

{
  return;
}


==================================================================

### FUNC 001b42e0 (4 bytes) name=FUN_001b42e0

void FUN_001b42e0(void)

{
  return;
}


==================================================================

### FUNC 001b42e4 (4 bytes) name=FUN_001b42e4

void FUN_001b42e4(void)

{
  return;
}


==================================================================

### FUNC 001b42e8 (4 bytes) name=FUN_001b42e8

void FUN_001b42e8(void)

{
  return;
}


==================================================================

### FUNC 001b42ec (4 bytes) name=FUN_001b42ec

void FUN_001b42ec(void)

{
  return;
}


==================================================================

### FUNC 001b42f0 (4 bytes) name=FUN_001b42f0

void FUN_001b42f0(void)

{
  return;
}


==================================================================

### FUNC 001b42f4 (4 bytes) name=FUN_001b42f4

void FUN_001b42f4(void)

{
  return;
}


==================================================================

### FUNC 001b42f8 (4 bytes) name=FUN_001b42f8

void FUN_001b42f8(void)

{
  return;
}


==================================================================

### FUNC 001b42fc (4 bytes) name=FUN_001b42fc

void FUN_001b42fc(void)

{
  return;
}


==================================================================

### FUNC 001b4300 (4 bytes) name=FUN_001b4300

void FUN_001b4300(void)

{
  return;
}


==================================================================

### FUNC 001b4304 (4 bytes) name=FUN_001b4304

void FUN_001b4304(void)

{
  return;
}


==================================================================

### FUNC 001b4308 (4 bytes) name=FUN_001b4308

void FUN_001b4308(void)

{
  return;
}


==================================================================

### FUNC 001b430c (4 bytes) name=FUN_001b430c

void FUN_001b430c(void)

{
  return;
}


==================================================================

### FUNC 001b4310 (4 bytes) name=FUN_001b4310

void FUN_001b4310(void)

{
  return;
}


==================================================================

### FUNC 001b4314 (4 bytes) name=FUN_001b4314

void FUN_001b4314(void)

{
  return;
}


==================================================================

### FUNC 001b4318 (4 bytes) name=FUN_001b4318

void FUN_001b4318(void)

{
  return;
}


==================================================================

### FUNC 001b431c (4 bytes) name=FUN_001b431c

void FUN_001b431c(void)

{
  return;
}


==================================================================

### FUNC 001b4320 (4 bytes) name=FUN_001b4320

void FUN_001b4320(void)

{
  return;
}


==================================================================

### FUNC 001b4324 (4 bytes) name=FUN_001b4324

void FUN_001b4324(void)

{
  return;
}


==================================================================

### FUNC 001b4328 (4 bytes) name=FUN_001b4328

void FUN_001b4328(void)

{
  return;
}


==================================================================

### FUNC 001b432c (4 bytes) name=FUN_001b432c

void FUN_001b432c(void)

{
  return;
}


==================================================================

### FUNC 001b4330 (4 bytes) name=FUN_001b4330

void FUN_001b4330(void)

{
  return;
}


==================================================================

### FUNC 001b4334 (4 bytes) name=FUN_001b4334

void FUN_001b4334(void)

{
  return;
}


==================================================================

### FUNC 001b4338 (4 bytes) name=FUN_001b4338

void FUN_001b4338(void)

{
  return;
}


==================================================================

### FUNC 001b433c (4 bytes) name=FUN_001b433c

void FUN_001b433c(void)

{
  return;
}


==================================================================

### FUNC 001b4340 (4 bytes) name=FUN_001b4340

void FUN_001b4340(void)

{
  return;
}


==================================================================

### FUNC 001b4344 (4 bytes) name=FUN_001b4344

void FUN_001b4344(void)

{
  return;
}


==================================================================

### FUNC 001b4348 (4 bytes) name=FUN_001b4348

void FUN_001b4348(void)

{
  return;
}


==================================================================

### FUNC 001b434c (60 bytes) name=FUN_001b434c

void FUN_001b434c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4388 (60 bytes) name=FUN_001b4388

void FUN_001b4388(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b43c4 (60 bytes) name=FUN_001b43c4

void FUN_001b43c4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4400 (60 bytes) name=FUN_001b4400

void FUN_001b4400(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b443c (60 bytes) name=FUN_001b443c

void FUN_001b443c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4478 (60 bytes) name=FUN_001b4478

void FUN_001b4478(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b44b4 (60 bytes) name=FUN_001b44b4

void FUN_001b44b4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b44f0 (60 bytes) name=FUN_001b44f0

void FUN_001b44f0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b452c (60 bytes) name=FUN_001b452c

void FUN_001b452c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4568 (60 bytes) name=FUN_001b4568

void FUN_001b4568(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b45a4 (60 bytes) name=FUN_001b45a4

void FUN_001b45a4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b45e0 (60 bytes) name=FUN_001b45e0

void FUN_001b45e0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b461c (60 bytes) name=FUN_001b461c

void FUN_001b461c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4658 (60 bytes) name=FUN_001b4658

void FUN_001b4658(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4694 (60 bytes) name=FUN_001b4694

void FUN_001b4694(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b46d0 (60 bytes) name=FUN_001b46d0

void FUN_001b46d0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b470c (60 bytes) name=FUN_001b470c

void FUN_001b470c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4748 (60 bytes) name=FUN_001b4748

void FUN_001b4748(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4784 (60 bytes) name=FUN_001b4784

void FUN_001b4784(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b47c0 (60 bytes) name=FUN_001b47c0

void FUN_001b47c0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b47fc (60 bytes) name=FUN_001b47fc

void FUN_001b47fc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4838 (60 bytes) name=FUN_001b4838

void FUN_001b4838(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4874 (60 bytes) name=FUN_001b4874

void FUN_001b4874(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b48b0 (60 bytes) name=FUN_001b48b0

void FUN_001b48b0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b48ec (60 bytes) name=FUN_001b48ec

void FUN_001b48ec(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4928 (60 bytes) name=FUN_001b4928

void FUN_001b4928(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4964 (60 bytes) name=FUN_001b4964

void FUN_001b4964(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b49a0 (60 bytes) name=FUN_001b49a0

void FUN_001b49a0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b49dc (60 bytes) name=FUN_001b49dc

void FUN_001b49dc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4a18 (60 bytes) name=FUN_001b4a18

void FUN_001b4a18(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4a54 (60 bytes) name=FUN_001b4a54

void FUN_001b4a54(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4a90 (60 bytes) name=FUN_001b4a90

void FUN_001b4a90(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4acc (60 bytes) name=FUN_001b4acc

void FUN_001b4acc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4b08 (60 bytes) name=FUN_001b4b08

void FUN_001b4b08(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4b44 (60 bytes) name=FUN_001b4b44

void FUN_001b4b44(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4b80 (60 bytes) name=FUN_001b4b80

void FUN_001b4b80(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4bbc (60 bytes) name=FUN_001b4bbc

void FUN_001b4bbc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4bf8 (60 bytes) name=FUN_001b4bf8

void FUN_001b4bf8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4c34 (60 bytes) name=FUN_001b4c34

void FUN_001b4c34(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4c70 (60 bytes) name=FUN_001b4c70

void FUN_001b4c70(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4cac (60 bytes) name=FUN_001b4cac

void FUN_001b4cac(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4ce8 (60 bytes) name=FUN_001b4ce8

void FUN_001b4ce8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4d24 (60 bytes) name=FUN_001b4d24

void FUN_001b4d24(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4d60 (60 bytes) name=FUN_001b4d60

void FUN_001b4d60(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4d9c (60 bytes) name=FUN_001b4d9c

void FUN_001b4d9c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4dd8 (60 bytes) name=FUN_001b4dd8

void FUN_001b4dd8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4e14 (60 bytes) name=FUN_001b4e14

void FUN_001b4e14(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001b4e50 (464 bytes) name=FUN_001b4e50

void FUN_001b4e50(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  int iVar10;
  double *pdVar11;
  long lVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  dVar18 = *(double *)(param_1 + 0x60);
  lVar9 = *(long *)(param_1 + 0x30);
  lVar8 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar8 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 8;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar5 = 0;
        iVar10 = 0;
        pdVar11 = param_3;
        do {
          dVar14 = dVar18;
          dVar15 = dVar18;
          dVar16 = dVar18;
          dVar17 = dVar18;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar7 = *(long *)(lVar8 + lVar6 * 8);
              dVar13 = *(double *)(lVar9 + lVar6 * 8);
              lVar6 = lVar6 + 1;
              lVar2 = lVar7 + lVar5;
              dVar14 = dVar14 + dVar13 * *(double *)(lVar7 + lVar5);
              dVar15 = dVar15 + dVar13 * *(double *)(lVar2 + 8);
              dVar16 = dVar16 + dVar13 * *(double *)(lVar2 + 0x10);
              dVar17 = dVar17 + dVar13 * *(double *)(lVar2 + 0x18);
            } while ((int)lVar6 < iVar4);
          }
          iVar10 = iVar10 + 4;
          lVar5 = lVar5 + 0x20;
          pdVar11[1] = dVar15;
          *pdVar11 = dVar14;
          pdVar11[3] = dVar17;
          pdVar11[2] = dVar16;
          pdVar11 = pdVar11 + 4;
        } while (iVar10 < iVar3);
      }
      lVar5 = (long)iVar1 << 3;
      if (iVar1 < param_6) {
        do {
          lVar6 = 0;
          dVar14 = dVar18;
          if (0 < iVar4) {
            do {
              lVar2 = lVar6 * 8;
              lVar7 = lVar6 * 8;
              lVar6 = lVar6 + 1;
              dVar14 = dVar14 + *(double *)(*(long *)(lVar8 + lVar2) + lVar5) *
                                *(double *)(lVar9 + lVar7);
            } while ((int)lVar6 < iVar4);
          }
          *(double *)((long)param_3 + lVar5) = dVar14;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b5020 (436 bytes) name=FUN_001b5020

void FUN_001b5020(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  undefined8 *puVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  fVar18 = *(float *)(param_1 + 0x60);
  lVar10 = *(long *)(param_1 + 0x30);
  lVar9 = *(long *)(param_1 + 0x48);
  iVar5 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar4 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar4 < 1) {
      iVar1 = 0;
    }
    do {
      lVar6 = 0;
      if (0 < iVar5) {
        do {
          *(long *)(lVar9 + lVar6) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar6 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar6)) * 4;
          lVar6 = lVar6 + 8;
        } while (lVar6 != ((ulong)(iVar5 - 1) + 1) * 8);
      }
      if (0 < iVar4) {
        lVar6 = 0;
        iVar11 = 0;
        do {
          fVar14 = fVar18;
          fVar15 = fVar18;
          fVar16 = fVar18;
          fVar17 = fVar18;
          if (0 < iVar5) {
            lVar7 = 0;
            do {
              lVar8 = *(long *)(lVar9 + lVar7 * 8);
              fVar13 = *(float *)(lVar10 + lVar7 * 4);
              lVar7 = lVar7 + 1;
              lVar2 = lVar8 + lVar6;
              fVar14 = fVar14 + fVar13 * *(float *)(lVar8 + lVar6);
              fVar15 = fVar15 + fVar13 * *(float *)(lVar2 + 4);
              fVar16 = fVar16 + fVar13 * *(float *)(lVar2 + 8);
              fVar17 = fVar17 + fVar13 * *(float *)(lVar2 + 0xc);
            } while ((int)lVar7 < iVar5);
          }
          puVar3 = (undefined8 *)(param_3 + lVar6);
          iVar11 = iVar11 + 4;
          lVar6 = lVar6 + 0x10;
          puVar3[1] = CONCAT44(fVar17,fVar16);
          *puVar3 = CONCAT44(fVar15,fVar14);
        } while (iVar11 < iVar4);
      }
      lVar6 = (long)iVar1 << 2;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar14 = fVar18;
          if (0 < iVar5) {
            do {
              lVar2 = lVar7 * 8;
              lVar8 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar14 = fVar14 + *(float *)(*(long *)(lVar9 + lVar2) + lVar6) *
                                *(float *)(lVar10 + lVar8);
            } while ((int)lVar7 < iVar5);
          }
          *(float *)(param_3 + lVar6) = fVar14;
          lVar6 = lVar6 + 4;
        } while (lVar6 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b51d4 (504 bytes) name=FUN_001b51d4

void FUN_001b51d4(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  double *pdVar11;
  long lVar12;
  long lVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  dVar19 = *(double *)(param_1 + 0x60);
  lVar10 = *(long *)(param_1 + 0x30);
  lVar9 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar2 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar2 < 1) {
      iVar1 = 0;
    }
    lVar13 = (long)iVar1;
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar9 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 2;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar2) {
        lVar5 = 0;
        pdVar11 = param_3;
        do {
          dVar15 = dVar19;
          dVar16 = dVar19;
          dVar17 = dVar19;
          dVar18 = dVar19;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar8 = *(long *)(lVar9 + lVar6 * 8);
              dVar14 = *(double *)(lVar10 + lVar6 * 8);
              lVar6 = lVar6 + 1;
              lVar7 = lVar8 + lVar5 * 2;
              dVar15 = dVar15 + dVar14 * (double)(int)*(short *)(lVar8 + lVar5 * 2);
              dVar16 = dVar16 + dVar14 * (double)(int)*(short *)(lVar7 + 2);
              dVar17 = dVar17 + dVar14 * (double)(int)*(short *)(lVar7 + 4);
              dVar18 = dVar18 + dVar14 * (double)(int)*(short *)(lVar7 + 6);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          pdVar11[1] = dVar16;
          *pdVar11 = dVar15;
          pdVar11[3] = dVar18;
          pdVar11[2] = dVar17;
          pdVar11 = pdVar11 + 4;
        } while ((int)lVar5 < iVar2);
      }
      lVar6 = lVar13 << 1;
      lVar5 = lVar13;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          dVar15 = dVar19;
          if (0 < iVar4) {
            do {
              lVar8 = lVar7 * 8;
              lVar3 = lVar7 * 8;
              lVar7 = lVar7 + 1;
              dVar15 = dVar15 + (double)(int)*(short *)(*(long *)(lVar9 + lVar8) + lVar6) *
                                *(double *)(lVar10 + lVar3);
            } while ((int)lVar7 < iVar4);
          }
          param_3[lVar5] = dVar15;
          lVar5 = lVar5 + 1;
          lVar6 = lVar6 + 2;
        } while (lVar5 != lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b53cc (476 bytes) name=FUN_001b53cc

void FUN_001b53cc(long param_1,long param_2,undefined8 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  long lVar12;
  long lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  fVar19 = *(float *)(param_1 + 0x60);
  lVar10 = *(long *)(param_1 + 0x30);
  lVar9 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar2 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar2 < 1) {
      iVar1 = 0;
    }
    lVar13 = (long)iVar1;
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar9 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 2;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar2) {
        lVar5 = 0;
        puVar11 = param_3;
        do {
          fVar15 = fVar19;
          fVar16 = fVar19;
          fVar17 = fVar19;
          fVar18 = fVar19;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar8 = *(long *)(lVar9 + lVar6 * 8);
              fVar14 = *(float *)(lVar10 + lVar6 * 4);
              lVar6 = lVar6 + 1;
              lVar7 = lVar8 + lVar5 * 2;
              fVar15 = fVar15 + fVar14 * (float)(int)*(short *)(lVar8 + lVar5 * 2);
              fVar16 = fVar16 + fVar14 * (float)(int)*(short *)(lVar7 + 2);
              fVar17 = fVar17 + fVar14 * (float)(int)*(short *)(lVar7 + 4);
              fVar18 = fVar18 + fVar14 * (float)(int)*(short *)(lVar7 + 6);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          puVar11[1] = CONCAT44(fVar18,fVar17);
          *puVar11 = CONCAT44(fVar16,fVar15);
          puVar11 = puVar11 + 2;
        } while ((int)lVar5 < iVar2);
      }
      lVar6 = lVar13 << 1;
      lVar5 = lVar13;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar15 = fVar19;
          if (0 < iVar4) {
            do {
              lVar8 = lVar7 * 8;
              lVar3 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar15 = fVar15 + (float)(int)*(short *)(*(long *)(lVar9 + lVar8) + lVar6) *
                                *(float *)(lVar10 + lVar3);
            } while ((int)lVar7 < iVar4);
          }
          *(float *)((long)param_3 + lVar5 * 4) = fVar15;
          lVar5 = lVar5 + 1;
          lVar6 = lVar6 + 2;
        } while (lVar5 != lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (undefined8 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b55a8 (504 bytes) name=FUN_001b55a8

void FUN_001b55a8(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  double *pdVar11;
  long lVar12;
  long lVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  dVar19 = *(double *)(param_1 + 0x60);
  lVar10 = *(long *)(param_1 + 0x30);
  lVar9 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar2 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar2 < 1) {
      iVar1 = 0;
    }
    lVar13 = (long)iVar1;
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar9 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 2;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar2) {
        lVar5 = 0;
        pdVar11 = param_3;
        do {
          dVar15 = dVar19;
          dVar16 = dVar19;
          dVar17 = dVar19;
          dVar18 = dVar19;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar8 = *(long *)(lVar9 + lVar6 * 8);
              dVar14 = *(double *)(lVar10 + lVar6 * 8);
              lVar6 = lVar6 + 1;
              lVar7 = lVar8 + lVar5 * 2;
              dVar15 = dVar15 + dVar14 * (double)*(ushort *)(lVar8 + lVar5 * 2);
              dVar16 = dVar16 + dVar14 * (double)*(ushort *)(lVar7 + 2);
              dVar17 = dVar17 + dVar14 * (double)*(ushort *)(lVar7 + 4);
              dVar18 = dVar18 + dVar14 * (double)*(ushort *)(lVar7 + 6);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          pdVar11[1] = dVar16;
          *pdVar11 = dVar15;
          pdVar11[3] = dVar18;
          pdVar11[2] = dVar17;
          pdVar11 = pdVar11 + 4;
        } while ((int)lVar5 < iVar2);
      }
      lVar6 = lVar13 << 1;
      lVar5 = lVar13;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          dVar15 = dVar19;
          if (0 < iVar4) {
            do {
              lVar8 = lVar7 * 8;
              lVar3 = lVar7 * 8;
              lVar7 = lVar7 + 1;
              dVar15 = dVar15 + (double)*(ushort *)(*(long *)(lVar9 + lVar8) + lVar6) *
                                *(double *)(lVar10 + lVar3);
            } while ((int)lVar7 < iVar4);
          }
          param_3[lVar5] = dVar15;
          lVar5 = lVar5 + 1;
          lVar6 = lVar6 + 2;
        } while (lVar5 != lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b57a0 (476 bytes) name=FUN_001b57a0

void FUN_001b57a0(long param_1,long param_2,undefined8 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  long lVar12;
  long lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  
  param_6 = param_6 * param_7;
  lVar12 = *(long *)(param_1 + 0x18);
  fVar19 = *(float *)(param_1 + 0x60);
  lVar10 = *(long *)(param_1 + 0x30);
  lVar9 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar2 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar2 < 1) {
      iVar1 = 0;
    }
    lVar13 = (long)iVar1;
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar9 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 2;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar2) {
        lVar5 = 0;
        puVar11 = param_3;
        do {
          fVar15 = fVar19;
          fVar16 = fVar19;
          fVar17 = fVar19;
          fVar18 = fVar19;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar8 = *(long *)(lVar9 + lVar6 * 8);
              fVar14 = *(float *)(lVar10 + lVar6 * 4);
              lVar6 = lVar6 + 1;
              lVar7 = lVar8 + lVar5 * 2;
              fVar15 = fVar15 + fVar14 * (float)*(ushort *)(lVar8 + lVar5 * 2);
              fVar16 = fVar16 + fVar14 * (float)*(ushort *)(lVar7 + 2);
              fVar17 = fVar17 + fVar14 * (float)*(ushort *)(lVar7 + 4);
              fVar18 = fVar18 + fVar14 * (float)*(ushort *)(lVar7 + 6);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          puVar11[1] = CONCAT44(fVar18,fVar17);
          *puVar11 = CONCAT44(fVar16,fVar15);
          puVar11 = puVar11 + 2;
        } while ((int)lVar5 < iVar2);
      }
      lVar6 = lVar13 << 1;
      lVar5 = lVar13;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar15 = fVar19;
          if (0 < iVar4) {
            do {
              lVar8 = lVar7 * 8;
              lVar3 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar15 = fVar15 + (float)*(ushort *)(*(long *)(lVar9 + lVar8) + lVar6) *
                                *(float *)(lVar10 + lVar3);
            } while ((int)lVar7 < iVar4);
          }
          *(float *)((long)param_3 + lVar5 * 4) = fVar15;
          lVar5 = lVar5 + 1;
          lVar6 = lVar6 + 2;
        } while (lVar5 != lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (undefined8 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b597c (476 bytes) name=FUN_001b597c

void FUN_001b597c(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  double *pdVar10;
  long lVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  dVar17 = *(double *)(param_1 + 0x60);
  lVar9 = *(long *)(param_1 + 0x30);
  lVar8 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar8 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar5));
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar5 = 0;
        pdVar10 = param_3;
        do {
          dVar13 = dVar17;
          dVar14 = dVar17;
          dVar15 = dVar17;
          dVar16 = dVar17;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar7 = *(long *)(lVar8 + lVar6 * 8);
              dVar12 = *(double *)(lVar9 + lVar6 * 8);
              lVar6 = lVar6 + 1;
              lVar2 = lVar7 + lVar5;
              dVar13 = dVar13 + dVar12 * (double)*(byte *)(lVar7 + lVar5);
              dVar14 = dVar14 + dVar12 * (double)*(byte *)(lVar2 + 1);
              dVar15 = dVar15 + dVar12 * (double)*(byte *)(lVar2 + 2);
              dVar16 = dVar16 + dVar12 * (double)*(byte *)(lVar2 + 3);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          pdVar10[1] = dVar14;
          *pdVar10 = dVar13;
          pdVar10[3] = dVar16;
          pdVar10[2] = dVar15;
          pdVar10 = pdVar10 + 4;
        } while ((int)lVar5 < iVar3);
      }
      lVar5 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          lVar6 = 0;
          dVar13 = dVar17;
          if (0 < iVar4) {
            do {
              lVar2 = lVar6 * 8;
              lVar7 = lVar6 * 8;
              lVar6 = lVar6 + 1;
              dVar13 = dVar13 + (double)*(byte *)(*(long *)(lVar8 + lVar2) + lVar5) *
                                *(double *)(lVar9 + lVar7);
            } while ((int)lVar6 < iVar4);
          }
          param_3[lVar5] = dVar13;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b5b58 (448 bytes) name=FUN_001b5b58

void FUN_001b5b58(long param_1,long param_2,undefined8 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  fVar17 = *(float *)(param_1 + 0x60);
  lVar9 = *(long *)(param_1 + 0x30);
  lVar8 = *(long *)(param_1 + 0x48);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar8 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar5));
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar5 = 0;
        puVar10 = param_3;
        do {
          fVar13 = fVar17;
          fVar14 = fVar17;
          fVar15 = fVar17;
          fVar16 = fVar17;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar7 = *(long *)(lVar8 + lVar6 * 8);
              fVar12 = *(float *)(lVar9 + lVar6 * 4);
              lVar6 = lVar6 + 1;
              lVar2 = lVar7 + lVar5;
              fVar13 = fVar13 + fVar12 * (float)*(byte *)(lVar7 + lVar5);
              fVar14 = fVar14 + fVar12 * (float)*(byte *)(lVar2 + 1);
              fVar15 = fVar15 + fVar12 * (float)*(byte *)(lVar2 + 2);
              fVar16 = fVar16 + fVar12 * (float)*(byte *)(lVar2 + 3);
            } while ((int)lVar6 < iVar4);
          }
          lVar5 = lVar5 + 4;
          puVar10[1] = CONCAT44(fVar16,fVar15);
          *puVar10 = CONCAT44(fVar14,fVar13);
          puVar10 = puVar10 + 2;
        } while ((int)lVar5 < iVar3);
      }
      lVar5 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          lVar6 = 0;
          fVar13 = fVar17;
          if (0 < iVar4) {
            do {
              lVar2 = lVar6 * 8;
              lVar7 = lVar6 * 4;
              lVar6 = lVar6 + 1;
              fVar13 = fVar13 + (float)*(byte *)(*(long *)(lVar8 + lVar2) + lVar5) *
                                *(float *)(lVar9 + lVar7);
            } while ((int)lVar6 < iVar4);
          }
          *(float *)((long)param_3 + lVar5 * 4) = fVar13;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = (undefined8 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001b5d18 (1056 bytes) name=FUN_001b5d18

void FUN_001b5d18(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  double *pdVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  double *pdVar9;
  long lVar10;
  ulong uVar11;
  long *plVar12;
  long *plVar13;
  long *plVar14;
  int iVar15;
  double *pdVar16;
  long *plVar17;
  long *plVar18;
  long lVar19;
  double *pdVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  
  uVar6 = *(int *)(param_1 + 8) / 2;
  uVar11 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
  pdVar2 = (double *)(*(long *)(param_1 + 0x20) + uVar11);
  plVar18 = (long *)(param_2 + uVar11);
  dVar26 = *(double *)(param_1 + 0x78);
  if ((*(uint *)(param_1 + 0x80) & 1) == 0) {
    if (param_5 != 0) {
      iVar8 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar8 < 1) {
        iVar1 = 0;
      }
      plVar17 = plVar18 + -1;
      plVar3 = plVar18 + (param_5 - 1);
      lVar19 = ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8;
      do {
        plVar18 = plVar18 + 1;
        if (0 < iVar8) {
          lVar10 = 0;
          iVar15 = 0;
          pdVar16 = param_3;
          do {
            plVar12 = plVar18;
            plVar14 = plVar17;
            dVar22 = dVar26;
            dVar23 = dVar26;
            dVar24 = dVar26;
            dVar25 = dVar26;
            pdVar20 = pdVar2;
            if (0 < (int)uVar6) {
              do {
                plVar13 = plVar12 + 1;
                lVar4 = *plVar12 + lVar10;
                lVar5 = *plVar14 + lVar10;
                dVar21 = pdVar20[1];
                dVar22 = dVar22 + dVar21 * (*(double *)(*plVar12 + lVar10) -
                                           *(double *)(*plVar14 + lVar10));
                dVar23 = dVar23 + dVar21 * (*(double *)(lVar4 + 8) - *(double *)(lVar5 + 8));
                dVar24 = dVar24 + dVar21 * (*(double *)(lVar4 + 0x10) - *(double *)(lVar5 + 0x10));
                dVar25 = dVar25 + dVar21 * (*(double *)(lVar4 + 0x18) - *(double *)(lVar5 + 0x18));
                plVar12 = plVar13;
                plVar14 = plVar14 + -1;
                pdVar20 = pdVar20 + 1;
              } while (plVar18 + (ulong)(uVar6 - 1) + 1 != plVar13);
            }
            iVar15 = iVar15 + 4;
            lVar10 = lVar10 + 0x20;
            pdVar16[1] = dVar23;
            *pdVar16 = dVar22;
            pdVar16[3] = dVar25;
            pdVar16[2] = dVar24;
            pdVar16 = pdVar16 + 4;
          } while (iVar15 < iVar8);
        }
        lVar10 = (long)iVar1 << 3;
        if (iVar1 < param_6) {
          do {
            while ((int)uVar6 < 1) {
              *(double *)((long)param_3 + lVar10) = dVar26;
              lVar10 = lVar10 + 8;
              if (lVar10 == lVar19) goto LAB_001b5eec;
            }
            pdVar16 = pdVar2 + 1;
            plVar12 = plVar18;
            plVar14 = plVar17;
            dVar22 = dVar26;
            do {
              pdVar20 = pdVar16 + 1;
              dVar22 = dVar22 + (*(double *)(*plVar12 + lVar10) - *(double *)(*plVar14 + lVar10)) *
                                *pdVar16;
              pdVar16 = pdVar20;
              plVar12 = plVar12 + 1;
              plVar14 = plVar14 + -1;
            } while (pdVar20 != pdVar2 + (ulong)(uVar6 - 1) + 2);
            *(double *)((long)param_3 + lVar10) = dVar22;
            lVar10 = lVar10 + 8;
          } while (lVar10 != lVar19);
        }
LAB_001b5eec:
        plVar17 = plVar17 + 1;
        param_3 = (double *)((long)param_3 + (long)param_4);
      } while (plVar17 != plVar3);
    }
  }
  else if (param_5 != 0) {
    uVar7 = param_6 - 4U >> 2;
    iVar1 = (uVar7 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    plVar17 = plVar18 + -1;
    plVar3 = plVar18 + (param_5 - 1);
    do {
      plVar18 = plVar18 + 1;
      if (0 < param_6 + -3) {
        pdVar16 = (double *)plVar17[1];
        lVar19 = 0;
        pdVar20 = param_3;
        do {
          dVar22 = *pdVar2;
          dVar25 = dVar26 + dVar22 * *pdVar16;
          dVar24 = dVar26 + dVar22 * pdVar16[1];
          dVar23 = dVar26 + dVar22 * pdVar16[2];
          dVar22 = dVar26 + dVar22 * pdVar16[3];
          plVar12 = plVar18;
          plVar14 = plVar17;
          pdVar9 = pdVar2;
          if (0 < (int)uVar6) {
            do {
              plVar13 = plVar12 + 1;
              lVar10 = *plVar12 + lVar19;
              lVar4 = *plVar14 + lVar19;
              dVar21 = pdVar9[1];
              dVar25 = dVar25 + dVar21 * (*(double *)(*plVar12 + lVar19) +
                                         *(double *)(*plVar14 + lVar19));
              dVar24 = dVar24 + dVar21 * (*(double *)(lVar10 + 8) + *(double *)(lVar4 + 8));
              dVar23 = dVar23 + dVar21 * (*(double *)(lVar10 + 0x10) + *(double *)(lVar4 + 0x10));
              dVar22 = dVar22 + dVar21 * (*(double *)(lVar10 + 0x18) + *(double *)(lVar4 + 0x18));
              plVar12 = plVar13;
              plVar14 = plVar14 + -1;
              pdVar9 = pdVar9 + 1;
            } while (plVar13 != plVar17 + (ulong)(uVar6 - 1) + 3);
          }
          lVar19 = lVar19 + 0x20;
          pdVar16 = pdVar16 + 4;
          pdVar20[1] = dVar24;
          *pdVar20 = dVar25;
          pdVar20[3] = dVar22;
          pdVar20[2] = dVar23;
          pdVar20 = pdVar20 + 4;
        } while (lVar19 != ((ulong)uVar7 + 1) * 0x20);
      }
      if (iVar1 < param_6) {
        lVar10 = plVar17[1];
        lVar19 = (long)iVar1 << 3;
        do {
          dVar22 = dVar26 + *(double *)(lVar10 + lVar19) * *pdVar2;
          if (0 < (int)uVar6) {
            pdVar16 = pdVar2 + 1;
            plVar12 = plVar18;
            plVar14 = plVar17;
            do {
              pdVar20 = pdVar16 + 1;
              dVar22 = dVar22 + (*(double *)(*plVar12 + lVar19) + *(double *)(*plVar14 + lVar19)) *
                                *pdVar16;
              pdVar16 = pdVar20;
              plVar12 = plVar12 + 1;
              plVar14 = plVar14 + -1;
            } while (pdVar20 != pdVar2 + (ulong)(uVar6 - 1) + 2);
          }
          *(double *)((long)param_3 + lVar19) = dVar22;
          lVar19 = lVar19 + 8;
        } while (lVar19 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      plVar17 = plVar17 + 1;
      param_3 = (double *)((long)param_3 + (long)param_4);
    } while (plVar17 != plVar3);
    return;
  }
  return;
}


==================================================================

### FUNC 001b6138 (1012 bytes) name=FUN_001b6138

void FUN_001b6138(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  float *pfVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  undefined8 *puVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  long lVar11;
  long *plVar12;
  long *plVar13;
  long *plVar14;
  int iVar15;
  float *pfVar16;
  long *plVar17;
  long *plVar18;
  long lVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  
  iVar7 = *(int *)(param_1 + 8) / 2;
  fVar25 = *(float *)(param_1 + 0x74);
  pfVar2 = (float *)(*(long *)(param_1 + 0x20) + (long)iVar7 * 4);
  plVar17 = (long *)(param_2 + (long)iVar7 * 8);
  if ((*(uint *)(param_1 + 0x78) & 1) == 0) {
    if (param_5 != 0) {
      iVar9 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar9 < 1) {
        iVar1 = 0;
      }
      plVar18 = plVar17 + -1;
      plVar3 = plVar17 + (param_5 - 1);
      lVar19 = ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4;
      do {
        plVar17 = plVar17 + 1;
        if (0 < iVar9) {
          lVar11 = 0;
          iVar15 = 0;
          do {
            plVar12 = plVar18;
            plVar13 = plVar17;
            fVar21 = fVar25;
            fVar22 = fVar25;
            fVar23 = fVar25;
            fVar24 = fVar25;
            pfVar16 = pfVar2;
            if (0 < iVar7) {
              do {
                plVar14 = plVar12 + -1;
                lVar4 = *plVar12 + lVar11;
                lVar5 = *plVar13 + lVar11;
                fVar20 = pfVar16[1];
                fVar21 = fVar21 + fVar20 * (*(float *)(*plVar13 + lVar11) -
                                           *(float *)(*plVar12 + lVar11));
                fVar22 = fVar22 + fVar20 * (*(float *)(lVar5 + 4) - *(float *)(lVar4 + 4));
                fVar23 = fVar23 + fVar20 * (*(float *)(lVar5 + 8) - *(float *)(lVar4 + 8));
                fVar24 = fVar24 + fVar20 * (*(float *)(lVar5 + 0xc) - *(float *)(lVar4 + 0xc));
                plVar12 = plVar14;
                plVar13 = plVar13 + 1;
                pfVar16 = pfVar16 + 1;
              } while (plVar17 + (-3 - (ulong)(iVar7 - 1)) != plVar14);
            }
            puVar6 = (undefined8 *)(param_3 + lVar11);
            iVar15 = iVar15 + 4;
            lVar11 = lVar11 + 0x10;
            puVar6[1] = CONCAT44(fVar24,fVar23);
            *puVar6 = CONCAT44(fVar22,fVar21);
          } while (iVar15 < iVar9);
        }
        if (iVar1 < param_6) {
          lVar11 = (long)iVar1 << 2;
          do {
            while (plVar12 = plVar17, plVar13 = plVar18, fVar21 = fVar25, pfVar16 = pfVar2,
                  iVar7 < 1) {
              *(float *)(param_3 + lVar11) = fVar25;
              lVar11 = lVar11 + 4;
              if (lVar11 == lVar19) goto LAB_001b62f8;
            }
            do {
              plVar14 = plVar12 + 1;
              fVar21 = fVar21 + (*(float *)(*plVar12 + lVar11) - *(float *)(*plVar13 + lVar11)) *
                                pfVar16[1];
              plVar12 = plVar14;
              plVar13 = plVar13 + -1;
              pfVar16 = pfVar16 + 1;
            } while (plVar14 != plVar17 + (ulong)(iVar7 - 1) + 1);
            *(float *)(param_3 + lVar11) = fVar21;
            lVar11 = lVar11 + 4;
          } while (lVar11 != lVar19);
        }
LAB_001b62f8:
        plVar18 = plVar18 + 1;
        param_3 = param_3 + param_4;
      } while (plVar18 != plVar3);
    }
  }
  else if (param_5 != 0) {
    uVar8 = param_6 - 4U >> 2;
    iVar1 = (uVar8 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    plVar18 = plVar17 + -1;
    plVar3 = plVar17 + (param_5 - 1);
    do {
      plVar17 = plVar17 + 1;
      if (0 < param_6 + -3) {
        pfVar16 = (float *)plVar18[1];
        lVar19 = 0;
        do {
          fVar21 = *pfVar2;
          fVar24 = fVar25 + fVar21 * *pfVar16;
          fVar23 = fVar25 + fVar21 * pfVar16[1];
          fVar22 = fVar25 + fVar21 * pfVar16[2];
          fVar21 = fVar25 + fVar21 * pfVar16[3];
          plVar12 = plVar18;
          plVar13 = plVar17;
          pfVar10 = pfVar2;
          if (0 < iVar7) {
            do {
              plVar14 = plVar12 + -1;
              lVar11 = *plVar12 + lVar19;
              lVar4 = *plVar13 + lVar19;
              fVar20 = pfVar10[1];
              fVar24 = fVar24 + fVar20 * (*(float *)(*plVar13 + lVar19) +
                                         *(float *)(*plVar12 + lVar19));
              fVar23 = fVar23 + fVar20 * (*(float *)(lVar4 + 4) + *(float *)(lVar11 + 4));
              fVar22 = fVar22 + fVar20 * (*(float *)(lVar4 + 8) + *(float *)(lVar11 + 8));
              fVar21 = fVar21 + fVar20 * (*(float *)(lVar4 + 0xc) + *(float *)(lVar11 + 0xc));
              plVar12 = plVar14;
              plVar13 = plVar13 + 1;
              pfVar10 = pfVar10 + 1;
            } while (plVar18 + (-1 - (ulong)(iVar7 - 1)) != plVar14);
          }
          puVar6 = (undefined8 *)(param_3 + lVar19);
          lVar19 = lVar19 + 0x10;
          pfVar16 = pfVar16 + 4;
          puVar6[1] = CONCAT44(fVar21,fVar22);
          *puVar6 = CONCAT44(fVar23,fVar24);
        } while (lVar19 != ((ulong)uVar8 + 1) * 0x10);
      }
      if (iVar1 < param_6) {
        lVar11 = plVar18[1];
        lVar19 = (long)iVar1 << 2;
        do {
          fVar21 = fVar25 + *(float *)(lVar11 + lVar19) * *pfVar2;
          plVar12 = plVar17;
          plVar13 = plVar18;
          pfVar16 = pfVar2;
          if (0 < iVar7) {
            do {
              plVar14 = plVar12 + 1;
              fVar21 = fVar21 + (*(float *)(*plVar12 + lVar19) + *(float *)(*plVar13 + lVar19)) *
                                pfVar16[1];
              plVar12 = plVar14;
              plVar13 = plVar13 + -1;
              pfVar16 = pfVar16 + 1;
            } while (plVar18 + (ulong)(iVar7 - 1) + 3 != plVar14);
          }
          *(float *)(param_3 + lVar19) = fVar21;
          lVar19 = lVar19 + 4;
        } while (lVar19 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4);
      }
      plVar18 = plVar18 + 1;
      param_3 = param_3 + param_4;
    } while (plVar18 != plVar3);
    return;
  }
  return;
}


==================================================================

### FUNC 001b652c (1416 bytes) name=FUN_001b652c

void FUN_001b652c(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int *piVar2;
  long *plVar3;
  long lVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int *piVar10;
  undefined2 uVar11;
  long *plVar12;
  undefined2 *puVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  long *plVar17;
  long *plVar18;
  long lVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  long lVar24;
  long *plVar25;
  undefined2 uVar26;
  undefined2 uVar27;
  long *plVar28;
  int *piVar29;
  long lVar30;
  
  iVar6 = *(int *)(param_1 + 0x74);
  iVar5 = *(int *)(param_1 + 8) / 2;
  piVar2 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 4);
  plVar28 = (long *)(param_2 + (long)iVar5 * 8);
  if ((*(uint *)(param_1 + 0x78) & 1) == 0) {
    if (param_5 != 0) {
      iVar9 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar9 < 1) {
        iVar1 = 0;
      }
      plVar25 = plVar28 + -1;
      plVar3 = plVar28 + (param_5 - 1);
      lVar16 = (long)iVar1;
      lVar30 = NEON_shl(lVar16,2);
      do {
        plVar28 = plVar28 + 1;
        uVar26 = 0x8000;
        uVar27 = 0x7fff;
        if (0 < iVar9) {
          lVar24 = 0;
          puVar13 = param_3;
          do {
            iVar20 = iVar6;
            iVar21 = iVar6;
            iVar22 = iVar6;
            iVar23 = iVar6;
            if (0 < iVar5) {
              lVar14 = lVar24 * 4;
              plVar12 = plVar28;
              plVar17 = plVar25;
              piVar29 = piVar2;
              do {
                piVar29 = piVar29 + 1;
                plVar18 = plVar17 + -1;
                lVar15 = *plVar17 + lVar14;
                iVar7 = *piVar29;
                lVar19 = *plVar12 + lVar14;
                iVar20 = iVar20 + (*(int *)(*plVar12 + lVar14) - *(int *)(*plVar17 + lVar14)) *
                                  iVar7;
                iVar21 = iVar21 + (*(int *)(lVar19 + 4) - *(int *)(lVar15 + 4)) * iVar7;
                iVar22 = iVar22 + (*(int *)(lVar19 + 8) - *(int *)(lVar15 + 8)) * iVar7;
                iVar23 = iVar23 + (*(int *)(lVar19 + 0xc) - *(int *)(lVar15 + 0xc)) * iVar7;
                plVar12 = plVar12 + 1;
                plVar17 = plVar18;
              } while (plVar28 + (-3 - (ulong)(iVar5 - 1)) != plVar18);
            }
            uVar11 = (short)iVar20;
            if ((0xffff < iVar20 + 0x8000U) && (uVar11 = uVar27, iVar20 < 1)) {
              uVar11 = uVar26;
            }
            *puVar13 = uVar11;
            uVar11 = (short)iVar21;
            if ((0xffff < iVar21 + 0x8000U) && (uVar11 = uVar27, iVar21 < 1)) {
              uVar11 = uVar26;
            }
            puVar13[1] = uVar11;
            uVar11 = (short)iVar22;
            if ((0xffff < iVar22 + 0x8000U) && (uVar11 = 0x7fff, iVar22 < 1)) {
              uVar11 = 0x8000;
            }
            puVar13[2] = uVar11;
            uVar11 = (short)iVar23;
            if ((0xffff < iVar23 + 0x8000U) && (uVar11 = 0x7fff, iVar23 < 1)) {
              uVar11 = 0x8000;
            }
            lVar24 = lVar24 + 4;
            puVar13[3] = uVar11;
            puVar13 = puVar13 + 4;
          } while ((int)lVar24 < iVar9);
        }
        if (iVar1 < param_6) {
          lVar14 = lVar30;
          lVar24 = lVar16;
          do {
            plVar12 = plVar28;
            plVar17 = plVar25;
            iVar20 = iVar6;
            piVar29 = piVar2;
            if (0 < iVar5) {
              do {
                plVar18 = plVar12 + 1;
                iVar20 = iVar20 + (*(int *)(*plVar12 + lVar14) - *(int *)(*plVar17 + lVar14)) *
                                  piVar29[1];
                plVar12 = plVar18;
                plVar17 = plVar17 + -1;
                piVar29 = piVar29 + 1;
              } while (plVar28 + (ulong)(iVar5 - 1) + 1 != plVar18);
            }
            uVar11 = (short)iVar20;
            if ((0xffff < iVar20 + 0x8000U) && (uVar11 = uVar27, iVar20 < 1)) {
              uVar11 = uVar26;
            }
            param_3[lVar24] = uVar11;
            lVar24 = lVar24 + 1;
            lVar14 = lVar14 + 4;
          } while (lVar24 != lVar16 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar25 = plVar25 + 1;
        param_3 = (undefined2 *)((long)param_3 + (long)param_4);
      } while (plVar25 != plVar3);
    }
  }
  else if (param_5 != 0) {
    uVar8 = param_6 - 4U >> 2;
    iVar1 = (uVar8 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    plVar25 = plVar28 + -1;
    plVar3 = plVar28 + (param_5 - 1);
    lVar16 = (long)iVar1;
    lVar14 = NEON_shl((ulong)uVar8 + 1,4);
    lVar24 = NEON_shl(lVar16,1);
    lVar30 = NEON_shl(lVar16,2);
    lVar16 = NEON_shl(lVar16 + 1 + (ulong)(uint)((param_6 + -1) - iVar1),2);
    do {
      plVar28 = plVar28 + 1;
      uVar26 = 0x8000;
      uVar27 = 0x7fff;
      if (0 < param_6 + -3) {
        iVar9 = *piVar2;
        piVar29 = (int *)plVar25[1];
        lVar15 = 0;
        puVar13 = param_3 + 3;
        do {
          iVar20 = iVar6 + iVar9 * *piVar29;
          iVar21 = iVar6 + iVar9 * piVar29[1];
          iVar22 = iVar6 + iVar9 * piVar29[2];
          iVar23 = iVar6 + iVar9 * piVar29[3];
          plVar12 = plVar28;
          plVar17 = plVar25;
          piVar10 = piVar2;
          if (0 < iVar5) {
            do {
              plVar18 = plVar17 + -1;
              lVar19 = *plVar17 + lVar15;
              iVar7 = piVar10[1];
              lVar4 = *plVar12 + lVar15;
              iVar20 = iVar20 + (*(int *)(*plVar12 + lVar15) + *(int *)(*plVar17 + lVar15)) * iVar7;
              iVar21 = iVar21 + (*(int *)(lVar4 + 4) + *(int *)(lVar19 + 4)) * iVar7;
              iVar22 = iVar22 + (*(int *)(lVar4 + 8) + *(int *)(lVar19 + 8)) * iVar7;
              iVar23 = iVar23 + (*(int *)(lVar4 + 0xc) + *(int *)(lVar19 + 0xc)) * iVar7;
              plVar12 = plVar12 + 1;
              plVar17 = plVar18;
              piVar10 = piVar10 + 1;
            } while (plVar18 != plVar25 + (-1 - (ulong)(iVar5 - 1)));
          }
          uVar11 = (short)iVar20;
          if ((0xffff < iVar20 + 0x8000U) && (uVar11 = uVar27, iVar20 < 1)) {
            uVar11 = uVar26;
          }
          puVar13[-3] = uVar11;
          uVar11 = (short)iVar21;
          if ((0xffff < iVar21 + 0x8000U) && (uVar11 = uVar27, iVar21 < 1)) {
            uVar11 = uVar26;
          }
          puVar13[-2] = uVar11;
          uVar11 = (short)iVar22;
          if ((0xffff < iVar22 + 0x8000U) && (uVar11 = 0x7fff, iVar22 < 1)) {
            uVar11 = 0x8000;
          }
          puVar13[-1] = uVar11;
          uVar11 = (short)iVar23;
          if ((0xffff < iVar23 + 0x8000U) && (uVar11 = 0x7fff, iVar23 < 1)) {
            uVar11 = 0x8000;
          }
          *puVar13 = uVar11;
          lVar15 = lVar15 + 0x10;
          piVar29 = piVar29 + 4;
          puVar13 = puVar13 + 4;
        } while (lVar15 != lVar14);
      }
      if (iVar1 < param_6) {
        iVar9 = *piVar2;
        lVar19 = plVar25[1];
        puVar13 = (undefined2 *)((long)param_3 + lVar24);
        lVar15 = lVar30;
        do {
          iVar20 = iVar6 + iVar9 * *(int *)(lVar19 + lVar15);
          plVar12 = plVar28;
          plVar17 = plVar25;
          piVar29 = piVar2;
          if (0 < iVar5) {
            do {
              plVar18 = plVar12 + 1;
              iVar20 = iVar20 + (*(int *)(*plVar12 + lVar15) + *(int *)(*plVar17 + lVar15)) *
                                piVar29[1];
              plVar12 = plVar18;
              plVar17 = plVar17 + -1;
              piVar29 = piVar29 + 1;
            } while (plVar25 + (ulong)(iVar5 - 1) + 3 != plVar18);
          }
          uVar11 = (short)iVar20;
          if ((0xffff < iVar20 + 0x8000U) && (uVar11 = uVar27, iVar20 < 1)) {
            uVar11 = uVar26;
          }
          *puVar13 = uVar11;
          lVar15 = lVar15 + 4;
          puVar13 = puVar13 + 1;
        } while (lVar15 != lVar16);
      }
      plVar25 = plVar25 + 1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
    } while (plVar25 != plVar3);
    return;
  }
  return;
}


==================================================================

### FUNC 001b6ab4 (584 bytes) name=FUN_001b6ab4

void FUN_001b6ab4(long param_1,long *param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  undefined2 uVar8;
  long *plVar9;
  long *plVar10;
  long lVar11;
  long *plVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  undefined2 *puVar16;
  int iVar17;
  long lVar18;
  long lVar19;
  int *piVar20;
  undefined2 uVar21;
  undefined2 uVar22;
  long *plVar23;
  int *piVar24;
  int iVar25;
  long lVar26;
  long lVar27;
  
  iVar25 = param_5 + -1;
  piVar24 = *(int **)(param_1 + 0x20);
  iVar1 = *(int *)(param_1 + 0x74);
  iVar2 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    lVar11 = (long)iVar5;
    plVar10 = param_2 + (ulong)(iVar2 - 2) + 2;
    lVar27 = NEON_shl(lVar11,1);
    lVar26 = NEON_shl(lVar11,2);
    do {
      plVar23 = param_2 + 1;
      uVar21 = 0x8000;
      uVar22 = 0x7fff;
      if (0 < param_6 + -3) {
        iVar3 = *piVar24;
        piVar20 = (int *)*param_2;
        lVar19 = 0;
        puVar16 = (undefined2 *)(param_3 + 6);
        do {
          iVar17 = iVar1 + iVar3 * *piVar20;
          iVar15 = iVar1 + iVar3 * piVar20[1];
          iVar14 = iVar1 + iVar3 * piVar20[2];
          iVar13 = iVar1 + iVar3 * piVar20[3];
          plVar9 = plVar23;
          piVar7 = piVar24;
          if (1 < iVar2) {
            do {
              plVar12 = plVar9 + 1;
              iVar4 = piVar7[1];
              lVar18 = *plVar9 + lVar19;
              iVar17 = iVar17 + iVar4 * *(int *)(*plVar9 + lVar19);
              iVar15 = iVar15 + iVar4 * *(int *)(lVar18 + 4);
              iVar14 = iVar14 + iVar4 * *(int *)(lVar18 + 8);
              iVar13 = iVar13 + iVar4 * *(int *)(lVar18 + 0xc);
              plVar9 = plVar12;
              piVar7 = piVar7 + 1;
            } while (plVar10 != plVar12);
          }
          uVar8 = (short)iVar17;
          if ((0xffff < iVar17 + 0x8000U) && (uVar8 = uVar22, iVar17 < 1)) {
            uVar8 = uVar21;
          }
          puVar16[-3] = uVar8;
          uVar8 = (short)iVar15;
          if ((0xffff < iVar15 + 0x8000U) && (uVar8 = uVar22, iVar15 < 1)) {
            uVar8 = uVar21;
          }
          puVar16[-2] = uVar8;
          uVar8 = (short)iVar14;
          if ((0xffff < iVar14 + 0x8000U) && (uVar8 = 0x7fff, iVar14 < 1)) {
            uVar8 = 0x8000;
          }
          puVar16[-1] = uVar8;
          uVar8 = (short)iVar13;
          if ((0xffff < iVar13 + 0x8000U) && (uVar8 = 0x7fff, iVar13 < 1)) {
            uVar8 = 0x8000;
          }
          lVar19 = lVar19 + 0x10;
          *puVar16 = uVar8;
          piVar20 = piVar20 + 4;
          puVar16 = puVar16 + 4;
        } while (lVar19 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar5 < param_6) {
        iVar3 = *piVar24;
        lVar18 = *param_2;
        lVar19 = lVar26;
        puVar16 = (undefined2 *)(param_3 + lVar27);
        do {
          iVar17 = iVar1 + iVar3 * *(int *)(lVar18 + lVar19);
          plVar9 = plVar23;
          piVar20 = piVar24;
          if (1 < iVar2) {
            do {
              plVar12 = plVar9 + 1;
              iVar17 = iVar17 + piVar20[1] * *(int *)(*plVar9 + lVar19);
              plVar9 = plVar12;
              piVar20 = piVar20 + 1;
            } while (plVar10 != plVar12);
          }
          uVar8 = (short)iVar17;
          if ((0xffff < iVar17 + 0x8000U) && (uVar8 = uVar22, iVar17 < 1)) {
            uVar8 = uVar21;
          }
          lVar19 = lVar19 + 4;
          *puVar16 = uVar8;
          puVar16 = puVar16 + 1;
        } while (lVar19 != (lVar11 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 4);
      }
      iVar25 = iVar25 + -1;
      plVar10 = plVar10 + 1;
      param_3 = param_3 + param_4;
      param_2 = plVar23;
    } while (iVar25 != -1);
  }
  return;
}


==================================================================

### FUNC 001b6cfc (4980 bytes) name=FUN_001b6cfc

void FUN_001b6cfc(long param_1,long param_2,float *param_3,int param_4,int param_5,int param_6)

{
  bool bVar1;
  bool bVar2;
  ulong uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  float *pfVar8;
  ulong *puVar9;
  undefined8 *puVar10;
  long lVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  bool bVar18;
  bool bVar19;
  float *pfVar20;
  ulong *puVar21;
  float *pfVar22;
  long lVar23;
  long lVar24;
  float *pfVar25;
  uint uVar26;
  long lVar27;
  ulong uVar28;
  float *pfVar29;
  long lVar30;
  long lVar31;
  ulong uVar32;
  ulong uVar33;
  uint uVar34;
  float *pfVar35;
  uint uVar36;
  float *pfVar37;
  float *pfVar38;
  ulong uVar39;
  float *pfVar40;
  float fVar41;
  float fVar42;
  float fVar43;
  float fVar44;
  undefined8 uVar45;
  undefined8 uVar46;
  float fVar47;
  float fVar48;
  undefined8 uVar49;
  undefined8 uVar50;
  undefined1 auVar51 [16];
  float fVar52;
  float fVar53;
  int iVar54;
  float fVar55;
  float fVar56;
  undefined8 uVar57;
  undefined8 uVar58;
  bool bVar59;
  
  uVar12 = *(uint *)(param_1 + 0x78);
  lVar23 = (long)(*(int *)(param_1 + 8) / 2);
  lVar24 = lVar23 * 4;
  fVar53 = *(float *)(*(long *)(param_1 + 0x20) + lVar24);
  fVar42 = *(float *)(*(long *)(param_1 + 0x20) + lVar24 + 4);
  if (fVar53 == 2.0) {
    if (fVar42 == 1.0) {
      bVar19 = true;
      fVar42 = 1.0;
LAB_001b6da8:
      bVar18 = false;
      bVar59 = false;
      goto LAB_001b6db0;
    }
  }
  else if (fVar53 == -2.0) {
    bVar19 = false;
    if (fVar42 == 1.0) {
      bVar18 = true;
      bVar59 = bVar19;
      goto LAB_001b6db0;
    }
    goto LAB_001b6da8;
  }
  if ((fVar53 == 0.0) && ((fVar42 == 1.0 || (fVar42 == -1.0)))) {
    bVar18 = false;
    bVar19 = false;
    bVar59 = true;
  }
  else {
    bVar18 = false;
    bVar19 = false;
    bVar59 = false;
  }
LAB_001b6db0:
  fVar41 = *(float *)(param_1 + 0x74);
  puVar21 = (ulong *)(param_2 + lVar23 * 8);
  if (param_5 != 0) {
    iVar15 = param_6 + -3;
    uVar14 = param_6 - 4U >> 2;
    uVar4 = uVar14 + 1;
    uVar13 = uVar4 * 4;
    bVar1 = uVar4 < 3;
    if (iVar15 < 1) {
      uVar13 = 0;
    }
    uVar3 = (ulong)uVar14;
    uVar14 = uVar13 + 1;
    uVar17 = param_6 - uVar13;
    lVar31 = (long)(int)uVar13;
    uVar5 = uVar13 + 2;
    bVar2 = uVar17 < 7;
    lVar23 = lVar31 + 4;
    auVar51 = NEON_fmov(0x40000000,4);
    uVar33 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
    pfVar25 = param_3 + 0x10;
    puVar9 = puVar21 + (ulong)(param_5 - 1) + 1;
    lVar30 = ((ulong)((param_6 + -1) - uVar13) + 1) * 4;
    lVar24 = lVar23 * 4 + -0x10;
    uVar32 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
    uVar6 = uVar13 + 3;
    iVar16 = uVar17 - 1;
    do {
      pfVar20 = (float *)puVar21[-1];
      pfVar37 = (float *)*puVar21;
      pfVar22 = (float *)puVar21[1];
      if ((uVar12 & 1) == 0) {
        if (bVar59) {
          pfVar37 = pfVar20;
          if (fVar42 < 0.0) {
            pfVar37 = pfVar22;
            pfVar22 = pfVar20;
          }
          if (0 < iVar15) {
            if ((bVar1) ||
               (param_3 < pfVar37 + 0x10 && pfVar37 < pfVar25 ||
                param_3 < pfVar22 + 0x10 && pfVar22 < pfVar25)) {
              pfVar20 = pfVar37 + 1;
              pfVar29 = param_3;
              pfVar35 = pfVar22;
              do {
                pfVar38 = pfVar20 + 4;
                fVar44 = *pfVar35;
                fVar55 = pfVar20[-1];
                pfVar29[1] = (pfVar35[1] - *pfVar20) + fVar41;
                *pfVar29 = (fVar44 - fVar55) + fVar41;
                fVar55 = pfVar20[1];
                fVar44 = pfVar35[2];
                pfVar29[3] = (pfVar35[3] - pfVar20[2]) + fVar41;
                pfVar29[2] = (fVar44 - fVar55) + fVar41;
                pfVar20 = pfVar38;
                pfVar29 = pfVar29 + 4;
                pfVar35 = pfVar35 + 4;
              } while (pfVar38 != pfVar37 + uVar3 * 4 + 5);
            }
            else {
              lVar27 = 0;
              uVar34 = 0;
              do {
                puVar10 = (undefined8 *)((long)param_3 + lVar27);
                uVar34 = uVar34 + 1;
                uVar46 = ((undefined8 *)((long)pfVar22 + lVar27))[1];
                uVar45 = *(undefined8 *)((long)pfVar22 + lVar27);
                uVar50 = ((undefined8 *)((long)pfVar37 + lVar27))[1];
                uVar49 = *(undefined8 *)((long)pfVar37 + lVar27);
                lVar27 = lVar27 + 0x10;
                puVar10[1] = CONCAT44(((float)((ulong)uVar46 >> 0x20) -
                                      (float)((ulong)uVar50 >> 0x20)) + fVar41,
                                      ((float)uVar46 - (float)uVar50) + fVar41);
                *puVar10 = CONCAT44(((float)((ulong)uVar45 >> 0x20) - (float)((ulong)uVar49 >> 0x20)
                                    ) + fVar41,((float)uVar45 - (float)uVar49) + fVar41);
              } while (uVar34 < uVar4);
            }
          }
          if ((int)uVar13 < param_6) {
            pfVar20 = param_3 + lVar31;
            pfVar29 = pfVar22 + lVar31;
            if ((pfVar20 < pfVar37 + lVar23 && pfVar37 + lVar31 < param_3 + lVar23 ||
                 pfVar20 < pfVar22 + lVar23 && pfVar29 < param_3 + lVar23) || (uVar17 < 8)) {
              lVar27 = 0;
              do {
                *(float *)((long)pfVar20 + lVar27) =
                     (*(float *)((long)pfVar29 + lVar27) -
                     *(float *)((long)(pfVar37 + lVar31) + lVar27)) + fVar41;
                lVar27 = lVar27 + 4;
              } while (lVar30 - lVar27 != 0);
            }
            else {
              uVar34 = -((uint)((ulong)pfVar29 >> 2) & 3) & 3;
              uVar7 = uVar17;
              if (uVar34 < uVar17) {
                uVar7 = uVar34;
              }
              uVar34 = uVar13;
              if (((uVar7 != 0) &&
                  (param_3[lVar31] = (pfVar22[lVar31] - pfVar37[lVar31]) + fVar41, uVar34 = uVar14,
                  uVar7 != 1)) &&
                 (*(float *)((long)param_3 + uVar33) =
                       (*(float *)((long)pfVar22 + uVar33) - *(float *)((long)pfVar37 + uVar33)) +
                       fVar41, uVar34 = uVar5, uVar7 == 3)) {
                *(float *)((long)param_3 + uVar32) =
                     (*(float *)((long)pfVar22 + uVar32) - *(float *)((long)pfVar37 + uVar32)) +
                     fVar41;
                uVar34 = uVar6;
              }
              uVar36 = 0;
              uVar26 = ((uVar17 - uVar7) - 4 >> 2) + 1;
              iVar54 = uVar26 * 4;
              pfVar20 = param_3 + (ulong)uVar7 + lVar31;
              pfVar29 = pfVar37 + (ulong)uVar7 + lVar31;
              pfVar35 = pfVar22 + (ulong)uVar7 + lVar31;
              do {
                uVar46 = *(undefined8 *)pfVar29;
                uVar36 = uVar36 + 1;
                uVar45 = *(undefined8 *)pfVar35;
                *(ulong *)(pfVar20 + 2) =
                     CONCAT44(((float)((ulong)*(undefined8 *)(pfVar35 + 2) >> 0x20) -
                              (float)((ulong)*(undefined8 *)(pfVar29 + 2) >> 0x20)) + fVar41,
                              ((float)*(undefined8 *)(pfVar35 + 2) -
                              (float)*(undefined8 *)(pfVar29 + 2)) + fVar41);
                *(ulong *)pfVar20 =
                     CONCAT44(((float)((ulong)uVar45 >> 0x20) - (float)((ulong)uVar46 >> 0x20)) +
                              fVar41,((float)uVar45 - (float)uVar46) + fVar41);
                pfVar20 = pfVar20 + 4;
                pfVar29 = pfVar29 + 4;
                pfVar35 = pfVar35 + 4;
              } while (uVar36 < uVar26);
              uVar34 = uVar34 + iVar54;
              if (uVar17 - uVar7 != iVar54) {
                uVar39 = -(ulong)(uVar34 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar34 << 2;
                *(float *)((long)param_3 + uVar39) =
                     (*(float *)((long)pfVar22 + uVar39) - *(float *)((long)pfVar37 + uVar39)) +
                     fVar41;
                if ((int)(uVar34 + 1) < param_6) {
                  lVar27 = uVar39 + 4;
                  *(float *)((long)param_3 + lVar27) =
                       (*(float *)((long)pfVar22 + lVar27) - *(float *)((long)pfVar37 + lVar27)) +
                       fVar41;
                  if ((int)(uVar34 + 2) < param_6) {
                    lVar27 = uVar39 + 8;
                    *(float *)((long)param_3 + lVar27) =
                         (*(float *)((long)pfVar22 + lVar27) - *(float *)((long)pfVar37 + lVar27)) +
                         fVar41;
                  }
                }
              }
            }
          }
        }
        else {
          if (0 < iVar15) {
            if ((bVar1) ||
               (param_3 < pfVar20 + 0x10 && pfVar20 < pfVar25 ||
                param_3 < pfVar22 + 0x10 && pfVar22 < pfVar25)) {
              pfVar37 = pfVar20 + 1;
              pfVar29 = param_3;
              pfVar35 = pfVar22;
              do {
                pfVar38 = pfVar37 + 4;
                fVar44 = *pfVar35;
                fVar55 = pfVar37[-1];
                pfVar29[1] = fVar41 + fVar42 * (pfVar35[1] - *pfVar37);
                *pfVar29 = fVar41 + fVar42 * (fVar44 - fVar55);
                fVar55 = pfVar37[1];
                fVar44 = pfVar35[2];
                pfVar29[3] = fVar41 + fVar42 * (pfVar35[3] - pfVar37[2]);
                pfVar29[2] = fVar41 + fVar42 * (fVar44 - fVar55);
                pfVar37 = pfVar38;
                pfVar29 = pfVar29 + 4;
                pfVar35 = pfVar35 + 4;
              } while (pfVar38 != pfVar20 + uVar3 * 4 + 5);
            }
            else {
              lVar27 = 0;
              uVar34 = 0;
              do {
                puVar10 = (undefined8 *)((long)param_3 + lVar27);
                uVar34 = uVar34 + 1;
                uVar50 = ((undefined8 *)((long)pfVar20 + lVar27))[1];
                uVar49 = *(undefined8 *)((long)pfVar20 + lVar27);
                uVar46 = ((undefined8 *)((long)pfVar22 + lVar27))[1];
                uVar45 = *(undefined8 *)((long)pfVar22 + lVar27);
                lVar27 = lVar27 + 0x10;
                puVar10[1] = CONCAT44(fVar41 + ((float)((ulong)uVar46 >> 0x20) -
                                               (float)((ulong)uVar50 >> 0x20)) * fVar42,
                                      fVar41 + ((float)uVar46 - (float)uVar50) * fVar42);
                *puVar10 = CONCAT44(fVar41 + ((float)((ulong)uVar45 >> 0x20) -
                                             (float)((ulong)uVar49 >> 0x20)) * fVar42,
                                    fVar41 + ((float)uVar45 - (float)uVar49) * fVar42);
              } while (uVar34 < uVar4);
            }
          }
          if ((int)uVar13 < param_6) {
            pfVar37 = param_3 + lVar31;
            pfVar29 = pfVar22 + lVar31;
            if ((uVar17 < 8) ||
               (pfVar37 < pfVar20 + lVar23 && pfVar20 + lVar31 < param_3 + lVar23 ||
                pfVar37 < pfVar22 + lVar23 && pfVar29 < param_3 + lVar23)) {
              lVar27 = 0;
              do {
                *(float *)((long)pfVar37 + lVar27) =
                     fVar41 + fVar42 * (*(float *)((long)pfVar29 + lVar27) -
                                       *(float *)((long)(pfVar20 + lVar31) + lVar27));
                lVar27 = lVar27 + 4;
              } while (lVar30 - lVar27 != 0);
            }
            else {
              uVar34 = -((uint)((ulong)pfVar29 >> 2) & 3) & 3;
              uVar7 = uVar17;
              if (uVar34 < uVar17) {
                uVar7 = uVar34;
              }
              uVar34 = uVar13;
              if (((uVar7 != 0) &&
                  (param_3[lVar31] = fVar41 + fVar42 * (pfVar22[lVar31] - pfVar20[lVar31]),
                  uVar34 = uVar14, uVar7 != 1)) &&
                 (*(float *)((long)param_3 + uVar33) =
                       fVar41 + fVar42 * (*(float *)((long)pfVar22 + uVar33) -
                                         *(float *)((long)pfVar20 + uVar33)), uVar34 = uVar5,
                 uVar7 == 3)) {
                *(float *)((long)param_3 + uVar32) =
                     fVar41 + fVar42 * (*(float *)((long)pfVar22 + uVar32) -
                                       *(float *)((long)pfVar20 + uVar32));
                uVar34 = uVar6;
              }
              uVar36 = 0;
              uVar26 = ((uVar17 - uVar7) - 4 >> 2) + 1;
              iVar54 = uVar26 * 4;
              pfVar37 = param_3 + (ulong)uVar7 + lVar31;
              pfVar29 = pfVar20 + (ulong)uVar7 + lVar31;
              pfVar35 = pfVar22 + (ulong)uVar7 + lVar31;
              do {
                uVar46 = *(undefined8 *)pfVar29;
                uVar45 = *(undefined8 *)pfVar35;
                uVar36 = uVar36 + 1;
                *(ulong *)(pfVar37 + 2) =
                     CONCAT44(fVar41 + ((float)((ulong)*(undefined8 *)(pfVar35 + 2) >> 0x20) -
                                       (float)((ulong)*(undefined8 *)(pfVar29 + 2) >> 0x20)) *
                                       fVar42,
                              fVar41 + ((float)*(undefined8 *)(pfVar35 + 2) -
                                       (float)*(undefined8 *)(pfVar29 + 2)) * fVar42);
                *(ulong *)pfVar37 =
                     CONCAT44(fVar41 + ((float)((ulong)uVar45 >> 0x20) -
                                       (float)((ulong)uVar46 >> 0x20)) * fVar42,
                              fVar41 + ((float)uVar45 - (float)uVar46) * fVar42);
                pfVar37 = pfVar37 + 4;
                pfVar29 = pfVar29 + 4;
                pfVar35 = pfVar35 + 4;
              } while (uVar36 < uVar26);
              uVar34 = uVar34 + iVar54;
              if (uVar17 - uVar7 != iVar54) {
                uVar39 = -(ulong)(uVar34 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar34 << 2;
                *(float *)((long)param_3 + uVar39) =
                     fVar41 + fVar42 * (*(float *)((long)pfVar22 + uVar39) -
                                       *(float *)((long)pfVar20 + uVar39));
                if ((int)(uVar34 + 1) < param_6) {
                  lVar27 = uVar39 + 4;
                  *(float *)((long)param_3 + lVar27) =
                       fVar41 + fVar42 * (*(float *)((long)pfVar22 + lVar27) -
                                         *(float *)((long)pfVar20 + lVar27));
                  if ((int)(uVar34 + 2) < param_6) {
                    lVar27 = uVar39 + 8;
                    *(float *)((long)param_3 + lVar27) =
                         fVar41 + fVar42 * (*(float *)((long)pfVar22 + lVar27) -
                                           *(float *)((long)pfVar20 + lVar27));
                  }
                }
              }
            }
          }
        }
      }
      else {
        fVar44 = auVar51._0_4_;
        fVar55 = auVar51._4_4_;
        fVar56 = auVar51._8_4_;
        fVar52 = auVar51._12_4_;
        if (bVar19) {
          if (0 < iVar15) {
            if ((bVar1 || (param_3 < pfVar20 + 0x10 && pfVar20 < pfVar25 ||
                          param_3 < pfVar22 + 0x10 && pfVar22 < pfVar25)) ||
               (param_3 < pfVar37 + 0x10 && pfVar37 < pfVar25)) {
              pfVar29 = pfVar22 + 1;
              pfVar35 = param_3;
              pfVar38 = pfVar37;
              pfVar40 = pfVar20;
              do {
                pfVar8 = pfVar29 + 4;
                fVar43 = *pfVar38;
                fVar47 = *pfVar40;
                fVar48 = pfVar29[-1];
                pfVar35[1] = pfVar40[1] + pfVar38[1] * 2.0 + *pfVar29 + fVar41;
                *pfVar35 = fVar47 + fVar43 * 2.0 + fVar48 + fVar41;
                fVar43 = pfVar38[2];
                fVar47 = pfVar40[2];
                fVar48 = pfVar29[1];
                pfVar35[3] = pfVar40[3] + pfVar38[3] * 2.0 + pfVar29[2] + fVar41;
                pfVar35[2] = fVar47 + fVar43 * 2.0 + fVar48 + fVar41;
                pfVar29 = pfVar8;
                pfVar35 = pfVar35 + 4;
                pfVar38 = pfVar38 + 4;
                pfVar40 = pfVar40 + 4;
              } while (pfVar8 != pfVar22 + uVar3 * 4 + 5);
            }
            else {
              lVar27 = 0;
              uVar34 = 0;
              do {
                puVar10 = (undefined8 *)((long)param_3 + lVar27);
                uVar58 = ((undefined8 *)((long)pfVar37 + lVar27))[1];
                uVar57 = *(undefined8 *)((long)pfVar37 + lVar27);
                uVar34 = uVar34 + 1;
                uVar46 = ((undefined8 *)((long)pfVar20 + lVar27))[1];
                uVar45 = *(undefined8 *)((long)pfVar20 + lVar27);
                uVar50 = ((undefined8 *)((long)pfVar22 + lVar27))[1];
                uVar49 = *(undefined8 *)((long)pfVar22 + lVar27);
                lVar27 = lVar27 + 0x10;
                puVar10[1] = CONCAT44((float)((ulong)uVar46 >> 0x20) +
                                      (float)((ulong)uVar58 >> 0x20) * fVar52 +
                                      (float)((ulong)uVar50 >> 0x20) + fVar41,
                                      (float)uVar46 + (float)uVar58 * fVar56 + (float)uVar50 +
                                      fVar41);
                *puVar10 = CONCAT44((float)((ulong)uVar45 >> 0x20) +
                                    (float)((ulong)uVar57 >> 0x20) * fVar55 +
                                    (float)((ulong)uVar49 >> 0x20) + fVar41,
                                    (float)uVar45 + (float)uVar57 * fVar44 + (float)uVar49 + fVar41)
                ;
              } while (uVar34 < uVar4);
            }
          }
          if ((int)uVar13 < param_6) {
            pfVar29 = param_3 + lVar31;
            pfVar35 = param_3 + lVar23;
            pfVar38 = pfVar20 + lVar31;
            if ((bVar2 || (pfVar29 < pfVar20 + lVar23 && pfVar38 < pfVar35 ||
                          pfVar29 < pfVar22 + lVar23 && pfVar22 + lVar31 < pfVar35)) ||
               (pfVar29 < pfVar37 + lVar23 && pfVar37 + lVar31 < pfVar35)) {
              lVar27 = 0;
              do {
                *(float *)((long)pfVar29 + lVar27) =
                     *(float *)((long)pfVar38 + lVar27) +
                     *(float *)((long)(pfVar37 + lVar31) + lVar27) * 2.0 +
                     *(float *)((long)(pfVar22 + lVar31) + lVar27) + fVar41;
                lVar27 = lVar27 + 4;
              } while (lVar27 != lVar30);
            }
            else {
              uVar34 = -((uint)((ulong)pfVar38 >> 2) & 3) & 3;
              if (uVar17 < uVar34) {
                uVar34 = uVar17;
              }
              if (uVar34 == 0) {
                uVar39 = (ulong)uVar13;
              }
              else {
                param_3[lVar31] = pfVar20[lVar31] + pfVar37[lVar31] * 2.0 + pfVar22[lVar31] + fVar41
                ;
                if (uVar34 == 1) {
                  uVar39 = (ulong)uVar14;
                }
                else {
                  *(float *)((long)param_3 + uVar33) =
                       *(float *)((long)pfVar20 + uVar33) + *(float *)((long)pfVar37 + uVar33) * 2.0
                       + *(float *)((long)pfVar22 + uVar33) + fVar41;
                  if (uVar34 == 3) {
                    uVar39 = (ulong)uVar6;
                    *(float *)((long)param_3 + uVar32) =
                         *(float *)((long)pfVar20 + uVar32) +
                         *(float *)((long)pfVar37 + uVar32) * 2.0 +
                         *(float *)((long)pfVar22 + uVar32) + fVar41;
                  }
                  else {
                    uVar39 = (ulong)uVar5;
                  }
                }
                if (uVar34 == uVar17) goto LAB_001b717c;
              }
              uVar7 = ((uVar17 - uVar34) - 4 >> 2) + 1;
              iVar54 = uVar7 * 4;
              if (2 < iVar16 - uVar34) {
                lVar27 = 0;
                uVar26 = 0;
                do {
                  uVar26 = uVar26 + 1;
                  lVar11 = lVar27 + lVar24 + (ulong)uVar34 * 4;
                  lVar27 = lVar27 + 0x10;
                  uVar50 = ((undefined8 *)((long)pfVar22 + lVar11))[1];
                  uVar49 = *(undefined8 *)((long)pfVar22 + lVar11);
                  uVar58 = ((undefined8 *)((long)pfVar37 + lVar11))[1];
                  uVar57 = *(undefined8 *)((long)pfVar37 + lVar11);
                  uVar46 = ((undefined8 *)((long)pfVar20 + lVar11))[1];
                  uVar45 = *(undefined8 *)((long)pfVar20 + lVar11);
                  ((undefined8 *)((long)param_3 + lVar11))[1] =
                       CONCAT44((float)((ulong)uVar46 >> 0x20) +
                                (float)((ulong)uVar58 >> 0x20) * fVar52 +
                                (float)((ulong)uVar50 >> 0x20) + fVar41,
                                (float)uVar46 + (float)uVar58 * fVar56 + (float)uVar50 + fVar41);
                  *(undefined8 *)((long)param_3 + lVar11) =
                       CONCAT44((float)((ulong)uVar45 >> 0x20) +
                                (float)((ulong)uVar57 >> 0x20) * fVar55 +
                                (float)((ulong)uVar49 >> 0x20) + fVar41,
                                (float)uVar45 + (float)uVar57 * fVar44 + (float)uVar49 + fVar41);
                } while (uVar26 < uVar7);
                uVar39 = (ulong)(uint)((int)uVar39 + iVar54);
                if (iVar54 == uVar17 - uVar34) goto LAB_001b717c;
              }
              uVar28 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
              *(float *)((long)param_3 + uVar28) =
                   *(float *)((long)pfVar20 + uVar28) + *(float *)((long)pfVar37 + uVar28) * 2.0 +
                   *(float *)((long)pfVar22 + uVar28) + fVar41;
              if ((int)uVar39 + 1 < param_6) {
                lVar27 = uVar28 + 4;
                *(float *)((long)param_3 + lVar27) =
                     *(float *)((long)pfVar20 + lVar27) + *(float *)((long)pfVar37 + lVar27) * 2.0 +
                     *(float *)((long)pfVar22 + lVar27) + fVar41;
                if ((int)uVar39 + 2 < param_6) {
                  lVar27 = uVar28 + 8;
                  *(float *)((long)param_3 + lVar27) =
                       *(float *)((long)pfVar20 + lVar27) + *(float *)((long)pfVar37 + lVar27) * 2.0
                       + *(float *)((long)pfVar22 + lVar27) + fVar41;
                }
              }
            }
          }
        }
        else if (bVar18) {
          if (0 < iVar15) {
            if ((bVar1 || (param_3 < pfVar20 + 0x10 && pfVar20 < pfVar25 ||
                          param_3 < pfVar22 + 0x10 && pfVar22 < pfVar25)) ||
               (param_3 < pfVar37 + 0x10 && pfVar37 < pfVar25)) {
              pfVar29 = pfVar22 + 1;
              pfVar35 = param_3;
              pfVar38 = pfVar37;
              pfVar40 = pfVar20;
              do {
                pfVar8 = pfVar29 + 4;
                fVar43 = *pfVar38;
                fVar47 = *pfVar40;
                fVar48 = pfVar29[-1];
                pfVar35[1] = (pfVar40[1] - pfVar38[1] * 2.0) + *pfVar29 + fVar41;
                *pfVar35 = (fVar47 - fVar43 * 2.0) + fVar48 + fVar41;
                fVar43 = pfVar38[2];
                fVar47 = pfVar40[2];
                fVar48 = pfVar29[1];
                pfVar35[3] = (pfVar40[3] - pfVar38[3] * 2.0) + pfVar29[2] + fVar41;
                pfVar35[2] = (fVar47 - fVar43 * 2.0) + fVar48 + fVar41;
                pfVar29 = pfVar8;
                pfVar35 = pfVar35 + 4;
                pfVar38 = pfVar38 + 4;
                pfVar40 = pfVar40 + 4;
              } while (pfVar8 != pfVar22 + uVar3 * 4 + 5);
            }
            else {
              lVar27 = 0;
              uVar34 = 0;
              do {
                puVar10 = (undefined8 *)((long)param_3 + lVar27);
                uVar58 = ((undefined8 *)((long)pfVar37 + lVar27))[1];
                uVar57 = *(undefined8 *)((long)pfVar37 + lVar27);
                uVar34 = uVar34 + 1;
                uVar46 = ((undefined8 *)((long)pfVar20 + lVar27))[1];
                uVar45 = *(undefined8 *)((long)pfVar20 + lVar27);
                uVar50 = ((undefined8 *)((long)pfVar22 + lVar27))[1];
                uVar49 = *(undefined8 *)((long)pfVar22 + lVar27);
                lVar27 = lVar27 + 0x10;
                puVar10[1] = CONCAT44(((float)((ulong)uVar46 >> 0x20) -
                                      (float)((ulong)uVar58 >> 0x20) * fVar52) +
                                      (float)((ulong)uVar50 >> 0x20) + fVar41,
                                      ((float)uVar46 - (float)uVar58 * fVar56) + (float)uVar50 +
                                      fVar41);
                *puVar10 = CONCAT44(((float)((ulong)uVar45 >> 0x20) -
                                    (float)((ulong)uVar57 >> 0x20) * fVar55) +
                                    (float)((ulong)uVar49 >> 0x20) + fVar41,
                                    ((float)uVar45 - (float)uVar57 * fVar44) + (float)uVar49 +
                                    fVar41);
              } while (uVar34 < uVar4);
            }
          }
          if ((int)uVar13 < param_6) {
            pfVar29 = param_3 + lVar31;
            pfVar35 = param_3 + lVar23;
            pfVar38 = pfVar20 + lVar31;
            if ((bVar2 || (pfVar29 < pfVar20 + lVar23 && pfVar38 < pfVar35 ||
                          pfVar29 < pfVar22 + lVar23 && pfVar22 + lVar31 < pfVar35)) ||
               (pfVar29 < pfVar37 + lVar23 && pfVar37 + lVar31 < pfVar35)) {
              lVar27 = 0;
              do {
                *(float *)((long)pfVar29 + lVar27) =
                     (*(float *)((long)pfVar38 + lVar27) -
                     *(float *)((long)(pfVar37 + lVar31) + lVar27) * 2.0) +
                     *(float *)((long)(pfVar22 + lVar31) + lVar27) + fVar41;
                lVar27 = lVar27 + 4;
              } while (lVar30 - lVar27 != 0);
            }
            else {
              uVar34 = -((uint)((ulong)pfVar38 >> 2) & 3) & 3;
              uVar7 = uVar17;
              if (uVar34 < uVar17) {
                uVar7 = uVar34;
              }
              if (uVar7 == 0) {
                uVar39 = (ulong)uVar13;
              }
              else {
                param_3[lVar31] =
                     (pfVar20[lVar31] - pfVar37[lVar31] * 2.0) + pfVar22[lVar31] + fVar41;
                if (uVar7 == 1) {
                  uVar39 = (ulong)uVar14;
                }
                else {
                  *(float *)((long)param_3 + uVar33) =
                       (*(float *)((long)pfVar20 + uVar33) -
                       *(float *)((long)pfVar37 + uVar33) * 2.0) +
                       *(float *)((long)pfVar22 + uVar33) + fVar41;
                  if (uVar7 == 3) {
                    uVar39 = (ulong)uVar6;
                    *(float *)((long)param_3 + uVar32) =
                         (*(float *)((long)pfVar20 + uVar32) -
                         *(float *)((long)pfVar37 + uVar32) * 2.0) +
                         *(float *)((long)pfVar22 + uVar32) + fVar41;
                  }
                  else {
                    uVar39 = (ulong)uVar5;
                  }
                }
                if (uVar7 == uVar17) goto LAB_001b717c;
              }
              uVar34 = ((uVar17 - uVar7) - 4 >> 2) + 1;
              iVar54 = uVar34 * 4;
              if (2 < iVar16 - uVar7) {
                lVar27 = 0;
                uVar26 = 0;
                do {
                  uVar26 = uVar26 + 1;
                  lVar11 = lVar27 + lVar24 + (ulong)uVar7 * 4;
                  lVar27 = lVar27 + 0x10;
                  uVar50 = ((undefined8 *)((long)pfVar22 + lVar11))[1];
                  uVar49 = *(undefined8 *)((long)pfVar22 + lVar11);
                  uVar58 = ((undefined8 *)((long)pfVar37 + lVar11))[1];
                  uVar57 = *(undefined8 *)((long)pfVar37 + lVar11);
                  uVar46 = ((undefined8 *)((long)pfVar20 + lVar11))[1];
                  uVar45 = *(undefined8 *)((long)pfVar20 + lVar11);
                  ((undefined8 *)((long)param_3 + lVar11))[1] =
                       CONCAT44(((float)((ulong)uVar46 >> 0x20) -
                                (float)((ulong)uVar58 >> 0x20) * fVar52) +
                                (float)((ulong)uVar50 >> 0x20) + fVar41,
                                ((float)uVar46 - (float)uVar58 * fVar56) + (float)uVar50 + fVar41);
                  *(undefined8 *)((long)param_3 + lVar11) =
                       CONCAT44(((float)((ulong)uVar45 >> 0x20) -
                                (float)((ulong)uVar57 >> 0x20) * fVar55) +
                                (float)((ulong)uVar49 >> 0x20) + fVar41,
                                ((float)uVar45 - (float)uVar57 * fVar44) + (float)uVar49 + fVar41);
                } while (uVar26 < uVar34);
                uVar39 = (ulong)(uint)((int)uVar39 + iVar54);
                if (uVar17 - uVar7 == iVar54) goto LAB_001b717c;
              }
              uVar28 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
              *(float *)((long)param_3 + uVar28) =
                   (*(float *)((long)pfVar20 + uVar28) - *(float *)((long)pfVar37 + uVar28) * 2.0) +
                   *(float *)((long)pfVar22 + uVar28) + fVar41;
              if ((int)uVar39 + 1 < param_6) {
                lVar27 = uVar28 + 4;
                *(float *)((long)param_3 + lVar27) =
                     (*(float *)((long)pfVar20 + lVar27) - *(float *)((long)pfVar37 + lVar27) * 2.0)
                     + *(float *)((long)pfVar22 + lVar27) + fVar41;
                if ((int)uVar39 + 2 < param_6) {
                  lVar27 = uVar28 + 8;
                  *(float *)((long)param_3 + lVar27) =
                       (*(float *)((long)pfVar20 + lVar27) -
                       *(float *)((long)pfVar37 + lVar27) * 2.0) +
                       *(float *)((long)pfVar22 + lVar27) + fVar41;
                }
              }
            }
          }
        }
        else {
          if (0 < iVar15) {
            if ((bVar1 || (param_3 < pfVar20 + 0x10 && pfVar20 < pfVar25 ||
                          param_3 < pfVar22 + 0x10 && pfVar22 < pfVar25)) ||
               (param_3 < pfVar37 + 0x10 && pfVar37 < pfVar25)) {
              pfVar29 = pfVar37 + 1;
              pfVar35 = param_3;
              pfVar38 = pfVar22;
              pfVar40 = pfVar20;
              do {
                pfVar8 = pfVar29 + 4;
                fVar56 = *pfVar38;
                fVar55 = pfVar29[-1];
                fVar44 = *pfVar40;
                pfVar35[1] = fVar53 * *pfVar29 + fVar42 * (pfVar40[1] + pfVar38[1]) + fVar41;
                *pfVar35 = fVar53 * fVar55 + fVar42 * (fVar44 + fVar56) + fVar41;
                fVar55 = pfVar29[1];
                fVar44 = pfVar40[2];
                fVar56 = pfVar38[2];
                pfVar35[3] = fVar53 * pfVar29[2] + fVar42 * (pfVar40[3] + pfVar38[3]) + fVar41;
                pfVar35[2] = fVar53 * fVar55 + fVar42 * (fVar44 + fVar56) + fVar41;
                pfVar29 = pfVar8;
                pfVar35 = pfVar35 + 4;
                pfVar38 = pfVar38 + 4;
                pfVar40 = pfVar40 + 4;
              } while (pfVar8 != pfVar37 + uVar3 * 4 + 5);
            }
            else {
              lVar27 = 0;
              uVar34 = 0;
              do {
                puVar10 = (undefined8 *)((long)param_3 + lVar27);
                uVar50 = ((undefined8 *)((long)pfVar20 + lVar27))[1];
                uVar49 = *(undefined8 *)((long)pfVar20 + lVar27);
                uVar34 = uVar34 + 1;
                uVar58 = ((undefined8 *)((long)pfVar22 + lVar27))[1];
                uVar57 = *(undefined8 *)((long)pfVar22 + lVar27);
                uVar46 = ((undefined8 *)((long)pfVar37 + lVar27))[1];
                uVar45 = *(undefined8 *)((long)pfVar37 + lVar27);
                lVar27 = lVar27 + 0x10;
                puVar10[1] = CONCAT44(fVar53 * (float)((ulong)uVar46 >> 0x20) +
                                      ((float)((ulong)uVar50 >> 0x20) +
                                      (float)((ulong)uVar58 >> 0x20)) * fVar42 + fVar41,
                                      fVar53 * (float)uVar46 +
                                      ((float)uVar50 + (float)uVar58) * fVar42 + fVar41);
                *puVar10 = CONCAT44(fVar53 * (float)((ulong)uVar45 >> 0x20) +
                                    ((float)((ulong)uVar49 >> 0x20) + (float)((ulong)uVar57 >> 0x20)
                                    ) * fVar42 + fVar41,
                                    fVar53 * (float)uVar45 +
                                    ((float)uVar49 + (float)uVar57) * fVar42 + fVar41);
              } while (uVar34 < uVar4);
            }
          }
          if ((int)uVar13 < param_6) {
            pfVar29 = param_3 + lVar31;
            pfVar35 = param_3 + lVar23;
            pfVar38 = pfVar20 + lVar31;
            if ((bVar2 || (pfVar29 < pfVar20 + lVar23 && pfVar38 < pfVar35 ||
                          pfVar29 < pfVar22 + lVar23 && pfVar22 + lVar31 < pfVar35)) ||
               (pfVar29 < pfVar37 + lVar23 && pfVar37 + lVar31 < pfVar35)) {
              lVar27 = 0;
              do {
                *(float *)((long)pfVar29 + lVar27) =
                     fVar53 * *(float *)((long)(pfVar37 + lVar31) + lVar27) +
                     fVar42 * (*(float *)((long)pfVar38 + lVar27) +
                              *(float *)((long)(pfVar22 + lVar31) + lVar27)) + fVar41;
                lVar27 = lVar27 + 4;
              } while (lVar30 - lVar27 != 0);
            }
            else {
              uVar34 = -((uint)((ulong)pfVar38 >> 2) & 3) & 3;
              uVar7 = uVar17;
              if (uVar34 < uVar17) {
                uVar7 = uVar34;
              }
              if (uVar7 == 0) {
                uVar39 = (ulong)uVar13;
              }
              else {
                param_3[lVar31] =
                     fVar53 * pfVar37[lVar31] + fVar42 * (pfVar20[lVar31] + pfVar22[lVar31]) +
                     fVar41;
                if (uVar7 == 1) {
                  uVar39 = (ulong)uVar14;
                }
                else {
                  *(float *)((long)param_3 + uVar33) =
                       fVar53 * *(float *)((long)pfVar37 + uVar33) +
                       fVar42 * (*(float *)((long)pfVar20 + uVar33) +
                                *(float *)((long)pfVar22 + uVar33)) + fVar41;
                  if (uVar7 == 3) {
                    uVar39 = (ulong)uVar6;
                    *(float *)((long)param_3 + uVar32) =
                         fVar53 * *(float *)((long)pfVar37 + uVar32) +
                         fVar42 * (*(float *)((long)pfVar20 + uVar32) +
                                  *(float *)((long)pfVar22 + uVar32)) + fVar41;
                  }
                  else {
                    uVar39 = (ulong)uVar5;
                  }
                }
                if (uVar17 == uVar7) goto LAB_001b717c;
              }
              uVar34 = ((uVar17 - uVar7) - 4 >> 2) + 1;
              iVar54 = uVar34 * 4;
              if (2 < iVar16 - uVar7) {
                lVar27 = 0;
                uVar26 = 0;
                do {
                  uVar26 = uVar26 + 1;
                  lVar11 = lVar27 + lVar24 + (ulong)uVar7 * 4;
                  lVar27 = lVar27 + 0x10;
                  uVar46 = ((undefined8 *)((long)pfVar37 + lVar11))[1];
                  uVar45 = *(undefined8 *)((long)pfVar37 + lVar11);
                  uVar50 = ((undefined8 *)((long)pfVar22 + lVar11))[1];
                  uVar49 = *(undefined8 *)((long)pfVar22 + lVar11);
                  uVar58 = ((undefined8 *)((long)pfVar20 + lVar11))[1];
                  uVar57 = *(undefined8 *)((long)pfVar20 + lVar11);
                  ((undefined8 *)((long)param_3 + lVar11))[1] =
                       CONCAT44(fVar53 * (float)((ulong)uVar46 >> 0x20) +
                                ((float)((ulong)uVar50 >> 0x20) + (float)((ulong)uVar58 >> 0x20)) *
                                fVar42 + fVar41,
                                fVar53 * (float)uVar46 + ((float)uVar50 + (float)uVar58) * fVar42 +
                                fVar41);
                  *(undefined8 *)((long)param_3 + lVar11) =
                       CONCAT44(fVar53 * (float)((ulong)uVar45 >> 0x20) +
                                ((float)((ulong)uVar49 >> 0x20) + (float)((ulong)uVar57 >> 0x20)) *
                                fVar42 + fVar41,
                                fVar53 * (float)uVar45 + ((float)uVar49 + (float)uVar57) * fVar42 +
                                fVar41);
                } while (uVar26 < uVar34);
                uVar39 = (ulong)(uint)((int)uVar39 + iVar54);
                if (uVar17 - uVar7 == iVar54) goto LAB_001b717c;
              }
              uVar28 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
              *(float *)((long)param_3 + uVar28) =
                   fVar53 * *(float *)((long)pfVar37 + uVar28) +
                   fVar42 * (*(float *)((long)pfVar20 + uVar28) + *(float *)((long)pfVar22 + uVar28)
                            ) + fVar41;
              if ((int)uVar39 + 1 < param_6) {
                lVar27 = uVar28 + 4;
                *(float *)((long)param_3 + lVar27) =
                     fVar53 * *(float *)((long)pfVar37 + lVar27) +
                     fVar42 * (*(float *)((long)pfVar20 + lVar27) +
                              *(float *)((long)pfVar22 + lVar27)) + fVar41;
                if ((int)uVar39 + 2 < param_6) {
                  lVar27 = uVar28 + 8;
                  *(float *)((long)param_3 + lVar27) =
                       fVar53 * *(float *)((long)pfVar37 + lVar27) +
                       fVar42 * (*(float *)((long)pfVar20 + lVar27) +
                                *(float *)((long)pfVar22 + lVar27)) + fVar41;
                }
              }
            }
          }
        }
      }
LAB_001b717c:
      puVar21 = puVar21 + 1;
      param_3 = (float *)((long)param_3 + (long)param_4);
      pfVar25 = (float *)((long)pfVar25 + (long)param_4);
    } while (puVar21 != puVar9);
  }
  return;
}


==================================================================

### FUNC 001b8070 (1012 bytes) name=FUN_001b8070

void FUN_001b8070(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  float *pfVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  undefined8 *puVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  long lVar11;
  long *plVar12;
  long *plVar13;
  long *plVar14;
  int iVar15;
  float *pfVar16;
  long *plVar17;
  long *plVar18;
  long lVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  
  iVar7 = *(int *)(param_1 + 8) / 2;
  fVar25 = *(float *)(param_1 + 0x74);
  pfVar2 = (float *)(*(long *)(param_1 + 0x20) + (long)iVar7 * 4);
  plVar17 = (long *)(param_2 + (long)iVar7 * 8);
  if ((*(uint *)(param_1 + 0x78) & 1) == 0) {
    if (param_5 != 0) {
      iVar9 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar9 < 1) {
        iVar1 = 0;
      }
      plVar18 = plVar17 + -1;
      plVar3 = plVar17 + (param_5 - 1);
      lVar19 = ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4;
      do {
        plVar17 = plVar17 + 1;
        if (0 < iVar9) {
          lVar11 = 0;
          iVar15 = 0;
          do {
            plVar12 = plVar18;
            plVar13 = plVar17;
            fVar21 = fVar25;
            fVar22 = fVar25;
            fVar23 = fVar25;
            fVar24 = fVar25;
            pfVar16 = pfVar2;
            if (0 < iVar7) {
              do {
                plVar14 = plVar12 + -1;
                lVar4 = *plVar12 + lVar11;
                lVar5 = *plVar13 + lVar11;
                fVar20 = pfVar16[1];
                fVar21 = fVar21 + fVar20 * (*(float *)(*plVar13 + lVar11) -
                                           *(float *)(*plVar12 + lVar11));
                fVar22 = fVar22 + fVar20 * (*(float *)(lVar5 + 4) - *(float *)(lVar4 + 4));
                fVar23 = fVar23 + fVar20 * (*(float *)(lVar5 + 8) - *(float *)(lVar4 + 8));
                fVar24 = fVar24 + fVar20 * (*(float *)(lVar5 + 0xc) - *(float *)(lVar4 + 0xc));
                plVar12 = plVar14;
                plVar13 = plVar13 + 1;
                pfVar16 = pfVar16 + 1;
              } while (plVar17 + (-3 - (ulong)(iVar7 - 1)) != plVar14);
            }
            puVar6 = (undefined8 *)(param_3 + lVar11);
            iVar15 = iVar15 + 4;
            lVar11 = lVar11 + 0x10;
            puVar6[1] = CONCAT44(fVar24,fVar23);
            *puVar6 = CONCAT44(fVar22,fVar21);
          } while (iVar15 < iVar9);
        }
        if (iVar1 < param_6) {
          lVar11 = (long)iVar1 << 2;
          do {
            while (plVar12 = plVar17, plVar13 = plVar18, fVar21 = fVar25, pfVar16 = pfVar2,
                  iVar7 < 1) {
              *(float *)(param_3 + lVar11) = fVar25;
              lVar11 = lVar11 + 4;
              if (lVar11 == lVar19) goto LAB_001b8230;
            }
            do {
              plVar14 = plVar12 + 1;
              fVar21 = fVar21 + (*(float *)(*plVar12 + lVar11) - *(float *)(*plVar13 + lVar11)) *
                                pfVar16[1];
              plVar12 = plVar14;
              plVar13 = plVar13 + -1;
              pfVar16 = pfVar16 + 1;
            } while (plVar14 != plVar17 + (ulong)(iVar7 - 1) + 1);
            *(float *)(param_3 + lVar11) = fVar21;
            lVar11 = lVar11 + 4;
          } while (lVar11 != lVar19);
        }
LAB_001b8230:
        plVar18 = plVar18 + 1;
        param_3 = param_3 + param_4;
      } while (plVar18 != plVar3);
    }
  }
  else if (param_5 != 0) {
    uVar8 = param_6 - 4U >> 2;
    iVar1 = (uVar8 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    plVar18 = plVar17 + -1;
    plVar3 = plVar17 + (param_5 - 1);
    do {
      plVar17 = plVar17 + 1;
      if (0 < param_6 + -3) {
        pfVar16 = (float *)plVar18[1];
        lVar19 = 0;
        do {
          fVar21 = *pfVar2;
          fVar24 = fVar25 + fVar21 * *pfVar16;
          fVar23 = fVar25 + fVar21 * pfVar16[1];
          fVar22 = fVar25 + fVar21 * pfVar16[2];
          fVar21 = fVar25 + fVar21 * pfVar16[3];
          plVar12 = plVar18;
          plVar13 = plVar17;
          pfVar10 = pfVar2;
          if (0 < iVar7) {
            do {
              plVar14 = plVar12 + -1;
              lVar11 = *plVar12 + lVar19;
              lVar4 = *plVar13 + lVar19;
              fVar20 = pfVar10[1];
              fVar24 = fVar24 + fVar20 * (*(float *)(*plVar13 + lVar19) +
                                         *(float *)(*plVar12 + lVar19));
              fVar23 = fVar23 + fVar20 * (*(float *)(lVar4 + 4) + *(float *)(lVar11 + 4));
              fVar22 = fVar22 + fVar20 * (*(float *)(lVar4 + 8) + *(float *)(lVar11 + 8));
              fVar21 = fVar21 + fVar20 * (*(float *)(lVar4 + 0xc) + *(float *)(lVar11 + 0xc));
              plVar12 = plVar14;
              plVar13 = plVar13 + 1;
              pfVar10 = pfVar10 + 1;
            } while (plVar18 + (-1 - (ulong)(iVar7 - 1)) != plVar14);
          }
          puVar6 = (undefined8 *)(param_3 + lVar19);
          lVar19 = lVar19 + 0x10;
          pfVar16 = pfVar16 + 4;
          puVar6[1] = CONCAT44(fVar21,fVar22);
          *puVar6 = CONCAT44(fVar23,fVar24);
        } while (lVar19 != ((ulong)uVar8 + 1) * 0x10);
      }
      if (iVar1 < param_6) {
        lVar11 = plVar18[1];
        lVar19 = (long)iVar1 << 2;
        do {
          fVar21 = fVar25 + *(float *)(lVar11 + lVar19) * *pfVar2;
          plVar12 = plVar17;
          plVar13 = plVar18;
          pfVar16 = pfVar2;
          if (0 < iVar7) {
            do {
              plVar14 = plVar12 + 1;
              fVar21 = fVar21 + (*(float *)(*plVar12 + lVar19) + *(float *)(*plVar13 + lVar19)) *
                                pfVar16[1];
              plVar12 = plVar14;
              plVar13 = plVar13 + -1;
              pfVar16 = pfVar16 + 1;
            } while (plVar18 + (ulong)(iVar7 - 1) + 3 != plVar14);
          }
          *(float *)(param_3 + lVar19) = fVar21;
          lVar19 = lVar19 + 4;
        } while (lVar19 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4);
      }
      plVar18 = plVar18 + 1;
      param_3 = param_3 + param_4;
    } while (plVar18 != plVar3);
    return;
  }
  return;
}


==================================================================

### FUNC 001b8464 (400 bytes) name=FUN_001b8464

void FUN_001b8464(long param_1,long *param_2,long param_3,int param_4,int param_5,int param_6)

{
  undefined8 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  long *plVar6;
  long *plVar7;
  long *plVar8;
  long lVar9;
  long lVar10;
  float *pfVar11;
  float *pfVar12;
  long *plVar13;
  int iVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  
  iVar14 = param_5 + -1;
  pfVar12 = *(float **)(param_1 + 0x20);
  fVar20 = *(float *)(param_1 + 0x74);
  iVar2 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    plVar7 = param_2 + (ulong)(iVar2 - 2) + 2;
    do {
      plVar13 = param_2 + 1;
      if (0 < param_6 + -3) {
        pfVar11 = (float *)*param_2;
        lVar9 = 0;
        do {
          fVar16 = *pfVar12;
          fVar19 = fVar20 + fVar16 * *pfVar11;
          fVar18 = fVar20 + fVar16 * pfVar11[1];
          fVar17 = fVar20 + fVar16 * pfVar11[2];
          fVar16 = fVar20 + fVar16 * pfVar11[3];
          plVar6 = plVar13;
          pfVar5 = pfVar12;
          if (1 < iVar2) {
            do {
              plVar8 = plVar6 + 1;
              fVar15 = pfVar5[1];
              lVar10 = *plVar6 + lVar9;
              fVar19 = fVar19 + fVar15 * *(float *)(*plVar6 + lVar9);
              fVar18 = fVar18 + fVar15 * *(float *)(lVar10 + 4);
              fVar17 = fVar17 + fVar15 * *(float *)(lVar10 + 8);
              fVar16 = fVar16 + fVar15 * *(float *)(lVar10 + 0xc);
              plVar6 = plVar8;
              pfVar5 = pfVar5 + 1;
            } while (plVar7 != plVar8);
          }
          puVar1 = (undefined8 *)(param_3 + lVar9);
          lVar9 = lVar9 + 0x10;
          pfVar11 = pfVar11 + 4;
          puVar1[1] = CONCAT44(fVar16,fVar17);
          *puVar1 = CONCAT44(fVar18,fVar19);
        } while (lVar9 != ((ulong)uVar4 + 1) * 0x10);
      }
      if (iVar3 < param_6) {
        lVar10 = *param_2;
        lVar9 = (long)iVar3 << 2;
        do {
          fVar16 = fVar20 + *(float *)(lVar10 + lVar9) * *pfVar12;
          plVar6 = plVar13;
          pfVar11 = pfVar12;
          if (1 < iVar2) {
            do {
              plVar8 = plVar6 + 1;
              fVar16 = fVar16 + *(float *)(*plVar6 + lVar9) * pfVar11[1];
              plVar6 = plVar8;
              pfVar11 = pfVar11 + 1;
            } while (plVar7 != plVar8);
          }
          *(float *)(param_3 + lVar9) = fVar16;
          lVar9 = lVar9 + 4;
        } while (lVar9 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 4);
      }
      iVar14 = iVar14 + -1;
      param_3 = param_3 + param_4;
      plVar7 = plVar7 + 1;
      param_2 = plVar13;
    } while (iVar14 != -1);
  }
  return;
}


==================================================================

### FUNC 001b85f4 (448 bytes) name=FUN_001b85f4

void FUN_001b85f4(long param_1,long *param_2,double *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  double *pdVar4;
  long *plVar5;
  long *plVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  double *pdVar10;
  double *pdVar11;
  double *pdVar12;
  int iVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  iVar13 = param_5 + -1;
  pdVar11 = *(double **)(param_1 + 0x20);
  dVar19 = *(double *)(param_1 + 0x78);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    do {
      plVar5 = param_2 + 1;
      if (0 < param_6 + -3) {
        pdVar10 = (double *)*param_2;
        lVar8 = 0;
        pdVar12 = param_3;
        do {
          dVar15 = *pdVar11;
          dVar18 = dVar19 + dVar15 * *pdVar10;
          dVar17 = dVar19 + dVar15 * pdVar10[1];
          dVar16 = dVar19 + dVar15 * pdVar10[2];
          dVar15 = dVar19 + dVar15 * pdVar10[3];
          plVar7 = plVar5;
          pdVar4 = pdVar11;
          if (1 < iVar1) {
            do {
              plVar6 = plVar7 + 1;
              dVar14 = pdVar4[1];
              lVar9 = *plVar7 + lVar8;
              dVar18 = dVar18 + dVar14 * *(double *)(*plVar7 + lVar8);
              dVar17 = dVar17 + dVar14 * *(double *)(lVar9 + 8);
              dVar16 = dVar16 + dVar14 * *(double *)(lVar9 + 0x10);
              dVar15 = dVar15 + dVar14 * *(double *)(lVar9 + 0x18);
              plVar7 = plVar6;
              pdVar4 = pdVar4 + 1;
            } while (plVar5 + (ulong)(iVar1 - 2) + 1 != plVar6);
          }
          lVar8 = lVar8 + 0x20;
          pdVar10 = pdVar10 + 4;
          pdVar12[1] = dVar17;
          *pdVar12 = dVar18;
          pdVar12[3] = dVar15;
          pdVar12[2] = dVar16;
          pdVar12 = pdVar12 + 4;
        } while (lVar8 != ((ulong)uVar3 + 1) * 0x20);
      }
      if (iVar2 < param_6) {
        lVar9 = *param_2;
        lVar8 = (long)iVar2 << 3;
        do {
          dVar15 = dVar19 + *(double *)(lVar9 + lVar8) * *pdVar11;
          if (1 < iVar1) {
            pdVar10 = pdVar11 + 1;
            plVar7 = plVar5;
            do {
              pdVar12 = pdVar10 + 1;
              dVar15 = dVar15 + *(double *)(*plVar7 + lVar8) * *pdVar10;
              pdVar10 = pdVar12;
              plVar7 = plVar7 + 1;
            } while (pdVar12 != pdVar11 + (ulong)(iVar1 - 2) + 2);
          }
          *(double *)((long)param_3 + lVar8) = dVar15;
          lVar8 = lVar8 + 8;
        } while (lVar8 != ((long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 8);
      }
      iVar13 = iVar13 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = plVar5;
    } while (iVar13 != -1);
  }
  return;
}


==================================================================

### FUNC 001b87b4 (400 bytes) name=FUN_001b87b4

void FUN_001b87b4(long param_1,long *param_2,long param_3,int param_4,int param_5,int param_6)

{
  undefined8 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  long *plVar6;
  long *plVar7;
  long *plVar8;
  long lVar9;
  long lVar10;
  float *pfVar11;
  float *pfVar12;
  long *plVar13;
  int iVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  
  iVar14 = param_5 + -1;
  pfVar12 = *(float **)(param_1 + 0x20);
  fVar20 = *(float *)(param_1 + 0x74);
  iVar2 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    plVar7 = param_2 + (ulong)(iVar2 - 2) + 2;
    do {
      plVar13 = param_2 + 1;
      if (0 < param_6 + -3) {
        pfVar11 = (float *)*param_2;
        lVar9 = 0;
        do {
          fVar16 = *pfVar12;
          fVar19 = fVar20 + fVar16 * *pfVar11;
          fVar18 = fVar20 + fVar16 * pfVar11[1];
          fVar17 = fVar20 + fVar16 * pfVar11[2];
          fVar16 = fVar20 + fVar16 * pfVar11[3];
          plVar6 = plVar13;
          pfVar5 = pfVar12;
          if (1 < iVar2) {
            do {
              plVar8 = plVar6 + 1;
              fVar15 = pfVar5[1];
              lVar10 = *plVar6 + lVar9;
              fVar19 = fVar19 + fVar15 * *(float *)(*plVar6 + lVar9);
              fVar18 = fVar18 + fVar15 * *(float *)(lVar10 + 4);
              fVar17 = fVar17 + fVar15 * *(float *)(lVar10 + 8);
              fVar16 = fVar16 + fVar15 * *(float *)(lVar10 + 0xc);
              plVar6 = plVar8;
              pfVar5 = pfVar5 + 1;
            } while (plVar7 != plVar8);
          }
          puVar1 = (undefined8 *)(param_3 + lVar9);
          lVar9 = lVar9 + 0x10;
          pfVar11 = pfVar11 + 4;
          puVar1[1] = CONCAT44(fVar16,fVar17);
          *puVar1 = CONCAT44(fVar18,fVar19);
        } while (lVar9 != ((ulong)uVar4 + 1) * 0x10);
      }
      if (iVar3 < param_6) {
        lVar10 = *param_2;
        lVar9 = (long)iVar3 << 2;
        do {
          fVar16 = fVar20 + *(float *)(lVar10 + lVar9) * *pfVar12;
          plVar6 = plVar13;
          pfVar11 = pfVar12;
          if (1 < iVar2) {
            do {
              plVar8 = plVar6 + 1;
              fVar16 = fVar16 + *(float *)(*plVar6 + lVar9) * pfVar11[1];
              plVar6 = plVar8;
              pfVar11 = pfVar11 + 1;
            } while (plVar7 != plVar8);
          }
          *(float *)(param_3 + lVar9) = fVar16;
          lVar9 = lVar9 + 4;
        } while (lVar9 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 4);
      }
      iVar14 = iVar14 + -1;
      param_3 = param_3 + param_4;
      plVar7 = plVar7 + 1;
      param_2 = plVar13;
    } while (iVar14 != -1);
  }
  return;
}


==================================================================

### FUNC 001b8944 (580 bytes) name=FUN_001b8944

void FUN_001b8944(long param_1,long *param_2,undefined1 *param_3,int param_4,int param_5,int param_6
                 )

{
  long lVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int *piVar9;
  uint uVar10;
  long *plVar11;
  long *plVar12;
  long *plVar13;
  long *plVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  undefined1 *puVar18;
  int iVar19;
  long lVar20;
  int *piVar21;
  int iVar22;
  long lVar23;
  long lVar24;
  
  iVar22 = param_5 + -1;
  piVar21 = *(int **)(param_1 + 0x20);
  iVar2 = *(int *)(param_1 + 0x7c);
  iVar3 = *(int *)(param_1 + 8);
  uVar4 = *(uint *)(param_1 + 0x70);
  iVar5 = *(int *)(param_1 + 0x74);
  if (param_5 != 0) {
    uVar8 = param_6 - 4U >> 2;
    iVar7 = (uVar8 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar7 = 0;
    }
    lVar23 = (long)iVar7;
    plVar12 = param_2 + (ulong)(iVar3 - 2) + 2;
    lVar24 = NEON_shl(lVar23,2);
    do {
      plVar13 = param_2 + 1;
      if (0 < param_6 + -3) {
        lVar20 = 0;
        puVar18 = param_3;
        do {
          iVar15 = *piVar21;
          lVar1 = *param_2 + lVar20;
          iVar19 = iVar2 + iVar15 * *(int *)(*param_2 + lVar20);
          iVar17 = iVar2 + iVar15 * *(int *)(lVar1 + 4);
          iVar16 = iVar2 + iVar15 * *(int *)(lVar1 + 8);
          iVar15 = iVar2 + iVar15 * *(int *)(lVar1 + 0xc);
          plVar11 = plVar13;
          piVar9 = piVar21;
          if (1 < iVar3) {
            do {
              plVar14 = plVar11 + 1;
              iVar6 = piVar9[1];
              lVar1 = *plVar11 + lVar20;
              iVar19 = iVar19 + iVar6 * *(int *)(*plVar11 + lVar20);
              iVar17 = iVar17 + iVar6 * *(int *)(lVar1 + 4);
              iVar16 = iVar16 + iVar6 * *(int *)(lVar1 + 8);
              iVar15 = iVar15 + iVar6 * *(int *)(lVar1 + 0xc);
              plVar11 = plVar14;
              piVar9 = piVar9 + 1;
            } while (plVar12 != plVar14);
          }
          uVar10 = iVar19 + iVar5 >> (uVar4 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          *puVar18 = (char)uVar10;
          uVar10 = iVar17 + iVar5 >> (uVar4 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar18[1] = (char)uVar10;
          uVar10 = iVar16 + iVar5 >> (uVar4 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar18[2] = (char)uVar10;
          uVar10 = iVar15 + iVar5 >> (uVar4 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar20 = lVar20 + 0x10;
          puVar18[3] = (char)uVar10;
          puVar18 = puVar18 + 4;
        } while (lVar20 != ((ulong)uVar8 + 1) * 0x10);
      }
      lVar20 = lVar24;
      puVar18 = param_3 + lVar23;
      if (iVar7 < param_6) {
        do {
          iVar15 = iVar2 + *piVar21 * *(int *)(*param_2 + lVar20);
          plVar11 = plVar13;
          piVar9 = piVar21;
          if (1 < iVar3) {
            do {
              plVar14 = plVar11 + 1;
              iVar15 = iVar15 + piVar9[1] * *(int *)(*plVar11 + lVar20);
              plVar11 = plVar14;
              piVar9 = piVar9 + 1;
            } while (plVar12 != plVar14);
          }
          uVar10 = iVar15 + iVar5 >> (uVar4 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar20 = lVar20 + 4;
          *puVar18 = (char)uVar10;
          puVar18 = puVar18 + 1;
        } while (lVar20 != (lVar23 + 1 + (ulong)(uint)((param_6 + -1) - iVar7)) * 4);
      }
      iVar22 = iVar22 + -1;
      param_3 = param_3 + param_4;
      plVar12 = plVar12 + 1;
      param_2 = plVar13;
    } while (iVar22 != -1);
  }
  return;
}


==================================================================

### FUNC 001b8b88 (388 bytes) name=FUN_001b8b88

void FUN_001b8b88(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  double *pdVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  double *pdVar5;
  double *pdVar6;
  double *pdVar7;
  double *pdVar8;
  int iVar10;
  double *pdVar11;
  ulong uVar12;
  double *pdVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double *pdVar9;
  
  param_4 = param_4 * (int)param_5;
  iVar2 = *(int *)(param_1 + 8);
  pdVar13 = *(double **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar3 = param_4 - 4U >> 2;
    uVar12 = -(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3;
    pdVar6 = (double *)(param_2 + 8);
    pdVar7 = param_3;
    do {
      dVar14 = *pdVar13;
      dVar18 = dVar14 * pdVar6[-1];
      dVar17 = dVar14 * *pdVar6;
      dVar16 = dVar14 * pdVar6[1];
      dVar14 = dVar14 * pdVar6[2];
      if (1 < iVar2) {
        pdVar5 = (double *)((uVar12 - 8) + (long)pdVar6);
        pdVar8 = pdVar13 + 1;
        do {
          pdVar11 = pdVar8 + 1;
          dVar15 = *pdVar8;
          dVar19 = *pdVar5;
          pdVar8 = pdVar5 + 1;
          pdVar9 = pdVar5 + 2;
          pdVar1 = pdVar5 + 3;
          pdVar5 = (double *)((long)pdVar5 + uVar12);
          dVar18 = dVar18 + dVar15 * dVar19;
          dVar17 = dVar17 + dVar15 * *pdVar8;
          dVar16 = dVar16 + dVar15 * *pdVar9;
          dVar14 = dVar14 + dVar15 * *pdVar1;
          pdVar8 = pdVar11;
        } while (pdVar11 != pdVar13 + (ulong)(iVar2 - 2) + 2);
      }
      pdVar6 = pdVar6 + 4;
      pdVar7[1] = dVar17;
      *pdVar7 = dVar18;
      pdVar7[3] = dVar14;
      pdVar7[2] = dVar16;
      pdVar7 = pdVar7 + 4;
    } while (pdVar6 != (double *)(param_2 + (ulong)uVar3 * 0x20 + 0x28));
    iVar10 = (uVar3 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar4 = (long)iVar10;
    pdVar6 = (double *)(param_2 + lVar4 * 8);
    pdVar7 = param_3 + lVar4;
    do {
      dVar14 = *pdVar13 * *pdVar6;
      if (1 < iVar2) {
        pdVar5 = pdVar6;
        pdVar8 = pdVar13 + 1;
        do {
          pdVar9 = pdVar8 + 1;
          pdVar5 = (double *)
                   ((long)pdVar5 +
                   (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
          dVar14 = dVar14 + *pdVar5 * *pdVar8;
          pdVar8 = pdVar9;
        } while (pdVar9 != pdVar13 + (ulong)(iVar2 - 2) + 2);
      }
      pdVar6 = pdVar6 + 1;
      *pdVar7 = dVar14;
      pdVar7 = pdVar7 + 1;
    } while (pdVar6 != (double *)
                       (param_2 + (lVar4 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 8));
  }
  return;
}


==================================================================

### FUNC 001b8d0c (420 bytes) name=FUN_001b8d0c

void FUN_001b8d0c(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  float *pfVar7;
  double *pdVar8;
  double *pdVar9;
  int iVar10;
  double *pdVar11;
  float *pfVar12;
  ulong uVar13;
  double *pdVar14;
  double dVar15;
  double dVar16;
  float fVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  
  param_4 = param_4 * (int)param_5;
  iVar4 = *(int *)(param_1 + 8);
  pdVar14 = *(double **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar13 = -(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2;
    uVar5 = param_4 - 4U >> 2;
    pfVar12 = (float *)(param_2 + 4);
    pdVar8 = param_3;
    do {
      dVar15 = *pdVar14;
      dVar20 = (double)pfVar12[-1] * dVar15;
      dVar19 = (double)*pfVar12 * dVar15;
      dVar18 = (double)pfVar12[1] * dVar15;
      dVar15 = (double)pfVar12[2] * dVar15;
      if (1 < iVar4) {
        pfVar7 = (float *)((uVar13 - 4) + (long)pfVar12);
        pdVar9 = pdVar14 + 1;
        do {
          pdVar11 = pdVar9 + 1;
          dVar16 = *pdVar9;
          fVar17 = *pfVar7;
          pfVar1 = pfVar7 + 1;
          pfVar2 = pfVar7 + 2;
          pfVar3 = pfVar7 + 3;
          pfVar7 = (float *)((long)pfVar7 + uVar13);
          dVar20 = dVar20 + dVar16 * (double)fVar17;
          dVar19 = dVar19 + dVar16 * (double)*pfVar1;
          dVar18 = dVar18 + dVar16 * (double)*pfVar2;
          dVar15 = dVar15 + dVar16 * (double)*pfVar3;
          pdVar9 = pdVar11;
        } while (pdVar11 != pdVar14 + (ulong)(iVar4 - 2) + 2);
      }
      pfVar12 = pfVar12 + 4;
      pdVar8[1] = dVar19;
      *pdVar8 = dVar20;
      pdVar8[3] = dVar15;
      pdVar8[2] = dVar18;
      pdVar8 = pdVar8 + 4;
    } while (pfVar12 != (float *)(param_2 + (ulong)uVar5 * 0x10 + 0x14));
    iVar10 = (uVar5 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar6 = (long)iVar10;
    pfVar12 = (float *)(param_2 + lVar6 * 4);
    pdVar8 = param_3 + lVar6;
    do {
      dVar15 = (double)*pfVar12 * *pdVar14;
      if (1 < iVar4) {
        pfVar7 = pfVar12;
        pdVar9 = pdVar14 + 1;
        do {
          pfVar7 = (float *)((long)pfVar7 +
                            (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2));
          pdVar11 = pdVar9 + 1;
          dVar15 = dVar15 + (double)*pfVar7 * *pdVar9;
          pdVar9 = pdVar11;
        } while (pdVar11 != pdVar14 + (ulong)(iVar4 - 2) + 2);
      }
      pfVar12 = pfVar12 + 1;
      *pdVar8 = dVar15;
      pdVar8 = pdVar8 + 1;
    } while (pfVar12 !=
             (float *)(param_2 + (lVar6 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 4));
  }
  return;
}


==================================================================

### FUNC 001b8eb0 (364 bytes) name=FUN_001b8eb0

void FUN_001b8eb0(long param_1,long param_2,undefined8 *param_3,int param_4,ulong param_5)

{
  int iVar1;
  uint uVar2;
  float *pfVar3;
  long lVar4;
  float *pfVar5;
  float *pfVar6;
  float *pfVar7;
  int iVar9;
  float *pfVar10;
  ulong uVar11;
  float *pfVar12;
  undefined8 *puVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float *pfVar8;
  
  param_4 = param_4 * (int)param_5;
  iVar1 = *(int *)(param_1 + 8);
  pfVar12 = *(float **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar9 = 0;
  }
  else {
    uVar11 = -(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2;
    uVar2 = param_4 - 4U >> 2;
    pfVar6 = (float *)(param_2 + 4);
    puVar13 = param_3;
    do {
      fVar14 = *pfVar12;
      fVar18 = fVar14 * pfVar6[-1];
      fVar17 = fVar14 * *pfVar6;
      fVar16 = fVar14 * pfVar6[1];
      fVar14 = fVar14 * pfVar6[2];
      if (1 < iVar1) {
        pfVar3 = (float *)((uVar11 - 4) + (long)pfVar6);
        pfVar5 = pfVar12 + 1;
        do {
          pfVar10 = pfVar5 + 1;
          fVar15 = *pfVar5;
          pfVar5 = pfVar3 + 1;
          pfVar7 = pfVar3 + 2;
          pfVar8 = pfVar3 + 3;
          fVar18 = fVar18 + fVar15 * *pfVar3;
          pfVar3 = (float *)((long)pfVar3 + uVar11);
          fVar17 = fVar17 + fVar15 * *pfVar5;
          fVar16 = fVar16 + fVar15 * *pfVar7;
          fVar14 = fVar14 + fVar15 * *pfVar8;
          pfVar5 = pfVar10;
        } while (pfVar10 != pfVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pfVar6 = pfVar6 + 4;
      puVar13[1] = CONCAT44(fVar14,fVar16);
      *puVar13 = CONCAT44(fVar17,fVar18);
      puVar13 = puVar13 + 2;
    } while (pfVar6 != (float *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    iVar9 = (uVar2 + 1) * 4;
  }
  if (iVar9 < param_4) {
    lVar4 = (long)iVar9 * 4;
    pfVar6 = (float *)(param_2 + lVar4);
    pfVar3 = (float *)((long)param_3 + lVar4);
    do {
      fVar14 = *pfVar12 * *pfVar6;
      if (1 < iVar1) {
        pfVar5 = pfVar6;
        pfVar7 = pfVar12 + 1;
        do {
          pfVar8 = pfVar7 + 1;
          pfVar5 = (float *)((long)pfVar5 +
                            (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2));
          fVar14 = fVar14 + *pfVar5 * *pfVar7;
          pfVar7 = pfVar8;
        } while (pfVar8 != pfVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pfVar6 = pfVar6 + 1;
      *pfVar3 = fVar14;
      pfVar3 = pfVar3 + 1;
    } while (pfVar6 != (float *)(param_2 +
                                ((long)iVar9 + 1 + (ulong)(uint)((param_4 + -1) - iVar9)) * 4));
  }
  return;
}


==================================================================

### FUNC 001b901c (428 bytes) name=FUN_001b901c

void FUN_001b901c(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  short *psVar1;
  short *psVar2;
  short *psVar3;
  int iVar4;
  short sVar5;
  uint uVar6;
  short *psVar7;
  long lVar8;
  double *pdVar9;
  int iVar10;
  double *pdVar11;
  short *psVar12;
  double *pdVar13;
  ulong uVar14;
  double *pdVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  
  param_4 = param_4 * (int)param_5;
  iVar4 = *(int *)(param_1 + 8);
  pdVar15 = *(double **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar14 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    uVar6 = param_4 - 4U >> 2;
    psVar12 = (short *)(param_2 + 2);
    pdVar9 = param_3;
    do {
      dVar17 = *pdVar15;
      dVar20 = (double)(int)psVar12[-1] * dVar17;
      dVar19 = (double)(int)*psVar12 * dVar17;
      dVar18 = (double)(int)psVar12[1] * dVar17;
      dVar17 = (double)(int)psVar12[2] * dVar17;
      if (1 < iVar4) {
        psVar7 = (short *)((uVar14 - 2) + (long)psVar12);
        pdVar11 = pdVar15 + 1;
        do {
          pdVar13 = pdVar11 + 1;
          dVar16 = *pdVar11;
          sVar5 = *psVar7;
          psVar1 = psVar7 + 1;
          psVar2 = psVar7 + 2;
          psVar3 = psVar7 + 3;
          psVar7 = (short *)((long)psVar7 + uVar14);
          dVar20 = dVar20 + dVar16 * (double)(int)sVar5;
          dVar19 = dVar19 + dVar16 * (double)(int)*psVar1;
          dVar18 = dVar18 + dVar16 * (double)(int)*psVar2;
          dVar17 = dVar17 + dVar16 * (double)(int)*psVar3;
          pdVar11 = pdVar13;
        } while (pdVar13 != pdVar15 + (ulong)(iVar4 - 2) + 2);
      }
      psVar12 = psVar12 + 4;
      pdVar9[1] = dVar19;
      *pdVar9 = dVar20;
      pdVar9[3] = dVar17;
      pdVar9[2] = dVar18;
      pdVar9 = pdVar9 + 4;
    } while (psVar12 != (short *)(param_2 + (ulong)uVar6 * 8 + 10));
    iVar10 = (uVar6 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar8 = (long)iVar10;
    psVar12 = (short *)(param_2 + lVar8 * 2);
    pdVar9 = param_3 + lVar8;
    do {
      dVar17 = (double)(int)*psVar12 * *pdVar15;
      if (1 < iVar4) {
        psVar7 = psVar12;
        pdVar11 = pdVar15 + 1;
        do {
          psVar7 = (short *)((long)psVar7 +
                            (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                            (param_5 & 0xffffffff) << 1));
          pdVar13 = pdVar11 + 1;
          dVar17 = dVar17 + (double)(int)*psVar7 * *pdVar11;
          pdVar11 = pdVar13;
        } while (pdVar13 != pdVar15 + (ulong)(iVar4 - 2) + 2);
      }
      psVar12 = psVar12 + 1;
      *pdVar9 = dVar17;
      pdVar9 = pdVar9 + 1;
    } while (psVar12 !=
             (short *)(param_2 + (lVar8 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 2));
  }
  return;
}


==================================================================

### FUNC 001b91c8 (408 bytes) name=FUN_001b91c8

void FUN_001b91c8(long param_1,long param_2,undefined8 *param_3,int param_4,ulong param_5)

{
  short *psVar1;
  short *psVar2;
  short *psVar3;
  int iVar4;
  short sVar5;
  uint uVar6;
  short *psVar7;
  long lVar8;
  float *pfVar9;
  int iVar10;
  float *pfVar11;
  float *pfVar12;
  short *psVar13;
  ulong uVar14;
  float *pfVar15;
  undefined8 *puVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  
  param_4 = param_4 * (int)param_5;
  iVar4 = *(int *)(param_1 + 8);
  pfVar15 = *(float **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar14 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    uVar6 = param_4 - 4U >> 2;
    psVar13 = (short *)(param_2 + 2);
    puVar16 = param_3;
    do {
      fVar18 = *pfVar15;
      fVar21 = (float)(int)psVar13[-1] * fVar18;
      fVar20 = (float)(int)*psVar13 * fVar18;
      fVar19 = (float)(int)psVar13[1] * fVar18;
      fVar18 = (float)(int)psVar13[2] * fVar18;
      if (1 < iVar4) {
        psVar7 = (short *)((uVar14 - 2) + (long)psVar13);
        pfVar9 = pfVar15 + 1;
        do {
          sVar5 = *psVar7;
          psVar1 = psVar7 + 1;
          psVar2 = psVar7 + 2;
          psVar3 = psVar7 + 3;
          psVar7 = (short *)((long)psVar7 + uVar14);
          pfVar11 = pfVar9 + 1;
          fVar17 = *pfVar9;
          fVar21 = fVar21 + fVar17 * (float)(int)sVar5;
          fVar20 = fVar20 + fVar17 * (float)(int)*psVar1;
          fVar19 = fVar19 + fVar17 * (float)(int)*psVar2;
          fVar18 = fVar18 + fVar17 * (float)(int)*psVar3;
          pfVar9 = pfVar11;
        } while (pfVar11 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      psVar13 = psVar13 + 4;
      puVar16[1] = CONCAT44(fVar18,fVar19);
      *puVar16 = CONCAT44(fVar20,fVar21);
      puVar16 = puVar16 + 2;
    } while (psVar13 != (short *)(param_2 + (ulong)uVar6 * 8 + 10));
    iVar10 = (uVar6 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar8 = (long)iVar10;
    psVar13 = (short *)(param_2 + lVar8 * 2);
    pfVar9 = (float *)((long)param_3 + lVar8 * 4);
    do {
      fVar18 = (float)(int)*psVar13 * *pfVar15;
      if (1 < iVar4) {
        psVar7 = psVar13;
        pfVar11 = pfVar15 + 1;
        do {
          psVar7 = (short *)((long)psVar7 +
                            (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                            (param_5 & 0xffffffff) << 1));
          pfVar12 = pfVar11 + 1;
          fVar18 = fVar18 + (float)(int)*psVar7 * *pfVar11;
          pfVar11 = pfVar12;
        } while (pfVar12 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      psVar13 = psVar13 + 1;
      *pfVar9 = fVar18;
      pfVar9 = pfVar9 + 1;
    } while (psVar13 !=
             (short *)(param_2 + (lVar8 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 2));
  }
  return;
}


==================================================================

### FUNC 001b9360 (428 bytes) name=FUN_001b9360

void FUN_001b9360(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort *puVar3;
  int iVar4;
  ushort uVar5;
  uint uVar6;
  ushort *puVar7;
  long lVar8;
  double *pdVar9;
  int iVar10;
  double *pdVar11;
  ushort *puVar12;
  double *pdVar13;
  ulong uVar14;
  double *pdVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  
  param_4 = param_4 * (int)param_5;
  iVar4 = *(int *)(param_1 + 8);
  pdVar15 = *(double **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar14 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    uVar6 = param_4 - 4U >> 2;
    puVar12 = (ushort *)(param_2 + 2);
    pdVar9 = param_3;
    do {
      dVar17 = *pdVar15;
      dVar20 = (double)puVar12[-1] * dVar17;
      dVar19 = (double)*puVar12 * dVar17;
      dVar18 = (double)puVar12[1] * dVar17;
      dVar17 = (double)puVar12[2] * dVar17;
      if (1 < iVar4) {
        puVar7 = (ushort *)((uVar14 - 2) + (long)puVar12);
        pdVar11 = pdVar15 + 1;
        do {
          pdVar13 = pdVar11 + 1;
          dVar16 = *pdVar11;
          uVar5 = *puVar7;
          puVar1 = puVar7 + 1;
          puVar2 = puVar7 + 2;
          puVar3 = puVar7 + 3;
          puVar7 = (ushort *)((long)puVar7 + uVar14);
          dVar20 = dVar20 + dVar16 * (double)uVar5;
          dVar19 = dVar19 + dVar16 * (double)*puVar1;
          dVar18 = dVar18 + dVar16 * (double)*puVar2;
          dVar17 = dVar17 + dVar16 * (double)*puVar3;
          pdVar11 = pdVar13;
        } while (pdVar13 != pdVar15 + (ulong)(iVar4 - 2) + 2);
      }
      puVar12 = puVar12 + 4;
      pdVar9[1] = dVar19;
      *pdVar9 = dVar20;
      pdVar9[3] = dVar17;
      pdVar9[2] = dVar18;
      pdVar9 = pdVar9 + 4;
    } while (puVar12 != (ushort *)(param_2 + (ulong)uVar6 * 8 + 10));
    iVar10 = (uVar6 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar8 = (long)iVar10;
    puVar12 = (ushort *)(param_2 + lVar8 * 2);
    pdVar9 = param_3 + lVar8;
    do {
      dVar17 = (double)*puVar12 * *pdVar15;
      if (1 < iVar4) {
        puVar7 = puVar12;
        pdVar11 = pdVar15 + 1;
        do {
          puVar7 = (ushort *)
                   ((long)puVar7 +
                   (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1));
          pdVar13 = pdVar11 + 1;
          dVar17 = dVar17 + (double)*puVar7 * *pdVar11;
          pdVar11 = pdVar13;
        } while (pdVar13 != pdVar15 + (ulong)(iVar4 - 2) + 2);
      }
      puVar12 = puVar12 + 1;
      *pdVar9 = dVar17;
      pdVar9 = pdVar9 + 1;
    } while (puVar12 !=
             (ushort *)(param_2 + (lVar8 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 2));
  }
  return;
}


==================================================================

### FUNC 001b950c (408 bytes) name=FUN_001b950c

void FUN_001b950c(long param_1,long param_2,undefined8 *param_3,int param_4,ulong param_5)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort *puVar3;
  int iVar4;
  ushort uVar5;
  uint uVar6;
  ushort *puVar7;
  long lVar8;
  float *pfVar9;
  int iVar10;
  float *pfVar11;
  float *pfVar12;
  ushort *puVar13;
  ulong uVar14;
  float *pfVar15;
  undefined8 *puVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  
  param_4 = param_4 * (int)param_5;
  iVar4 = *(int *)(param_1 + 8);
  pfVar15 = *(float **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar10 = 0;
  }
  else {
    uVar14 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    uVar6 = param_4 - 4U >> 2;
    puVar13 = (ushort *)(param_2 + 2);
    puVar16 = param_3;
    do {
      fVar18 = *pfVar15;
      fVar21 = (float)puVar13[-1] * fVar18;
      fVar20 = (float)*puVar13 * fVar18;
      fVar19 = (float)puVar13[1] * fVar18;
      fVar18 = (float)puVar13[2] * fVar18;
      if (1 < iVar4) {
        puVar7 = (ushort *)((uVar14 - 2) + (long)puVar13);
        pfVar9 = pfVar15 + 1;
        do {
          uVar5 = *puVar7;
          puVar1 = puVar7 + 1;
          puVar2 = puVar7 + 2;
          puVar3 = puVar7 + 3;
          puVar7 = (ushort *)((long)puVar7 + uVar14);
          pfVar11 = pfVar9 + 1;
          fVar17 = *pfVar9;
          fVar21 = fVar21 + fVar17 * (float)uVar5;
          fVar20 = fVar20 + fVar17 * (float)*puVar1;
          fVar19 = fVar19 + fVar17 * (float)*puVar2;
          fVar18 = fVar18 + fVar17 * (float)*puVar3;
          pfVar9 = pfVar11;
        } while (pfVar11 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      puVar13 = puVar13 + 4;
      puVar16[1] = CONCAT44(fVar18,fVar19);
      *puVar16 = CONCAT44(fVar20,fVar21);
      puVar16 = puVar16 + 2;
    } while (puVar13 != (ushort *)(param_2 + (ulong)uVar6 * 8 + 10));
    iVar10 = (uVar6 + 1) * 4;
  }
  if (iVar10 < param_4) {
    lVar8 = (long)iVar10;
    puVar13 = (ushort *)(param_2 + lVar8 * 2);
    pfVar9 = (float *)((long)param_3 + lVar8 * 4);
    do {
      fVar18 = (float)*puVar13 * *pfVar15;
      if (1 < iVar4) {
        puVar7 = puVar13;
        pfVar11 = pfVar15 + 1;
        do {
          puVar7 = (ushort *)
                   ((long)puVar7 +
                   (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1));
          pfVar12 = pfVar11 + 1;
          fVar18 = fVar18 + (float)*puVar7 * *pfVar11;
          pfVar11 = pfVar12;
        } while (pfVar12 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      puVar13 = puVar13 + 1;
      *pfVar9 = fVar18;
      pfVar9 = pfVar9 + 1;
    } while (puVar13 !=
             (ushort *)(param_2 + (lVar8 + 1 + (ulong)(uint)((param_4 + -1) - iVar10)) * 2));
  }
  return;
}


==================================================================

### FUNC 001b96a4 (440 bytes) name=FUN_001b96a4

void FUN_001b96a4(long param_1,byte *param_2,long param_3,int param_4,int param_5)

{
  int iVar1;
  byte bVar2;
  uint uVar3;
  byte *pbVar4;
  long lVar5;
  double *pdVar6;
  long lVar7;
  int iVar8;
  double *pdVar9;
  byte *pbVar10;
  double *pdVar11;
  double *pdVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  
  param_4 = param_4 * param_5;
  iVar1 = *(int *)(param_1 + 8);
  pdVar12 = *(double **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar8 = 0;
  }
  else {
    uVar3 = param_4 - 4U >> 2;
    pdVar6 = (double *)(param_3 + 0x10);
    pbVar10 = param_2;
    do {
      dVar14 = *pdVar12;
      dVar17 = (double)*pbVar10 * dVar14;
      dVar16 = (double)pbVar10[1] * dVar14;
      dVar15 = (double)pbVar10[2] * dVar14;
      dVar14 = (double)pbVar10[3] * dVar14;
      if (1 < iVar1) {
        pdVar9 = pdVar12 + 1;
        pbVar4 = pbVar10;
        do {
          pbVar4 = pbVar4 + param_5;
          pdVar11 = pdVar9 + 1;
          dVar13 = *pdVar9;
          dVar17 = dVar17 + dVar13 * (double)*pbVar4;
          dVar16 = dVar16 + dVar13 * (double)pbVar4[1];
          dVar15 = dVar15 + dVar13 * (double)pbVar4[2];
          dVar14 = dVar14 + dVar13 * (double)pbVar4[3];
          pdVar9 = pdVar11;
        } while (pdVar11 != pdVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pbVar10 = pbVar10 + 4;
      pdVar6[-1] = dVar16;
      pdVar6[-2] = dVar17;
      pdVar6[1] = dVar14;
      *pdVar6 = dVar15;
      pdVar6 = pdVar6 + 4;
    } while (pdVar6 != (double *)(param_3 + (ulong)uVar3 * 0x20 + 0x30));
    iVar8 = (uVar3 + 1) * 4;
  }
  if (iVar8 < param_4) {
    lVar7 = (long)param_5;
    lVar5 = (long)iVar8;
    pbVar10 = param_2 + lVar5 + lVar7;
    pdVar6 = (double *)(param_3 + lVar5 * 8);
    do {
      dVar14 = (double)pbVar10[-lVar7] * *pdVar12;
      if (1 < iVar1) {
        pbVar4 = pbVar10;
        pdVar9 = pdVar12 + 1;
        do {
          bVar2 = *pbVar4;
          pbVar4 = pbVar4 + lVar7;
          pdVar11 = pdVar9 + 1;
          dVar14 = dVar14 + (double)bVar2 * *pdVar9;
          pdVar9 = pdVar11;
        } while (pdVar11 != pdVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pbVar10 = pbVar10 + 1;
      *pdVar6 = dVar14;
      pdVar6 = pdVar6 + 1;
    } while (pbVar10 != param_2 + lVar7 + 1 + lVar5 + (ulong)(uint)((param_4 + -1) - iVar8));
  }
  return;
}


==================================================================

### FUNC 001b985c (420 bytes) name=FUN_001b985c

void FUN_001b985c(long param_1,long param_2,undefined8 *param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  int iVar4;
  byte bVar5;
  uint uVar6;
  byte *pbVar7;
  long lVar8;
  float *pfVar9;
  long lVar10;
  int iVar11;
  float *pfVar12;
  float *pfVar13;
  byte *pbVar14;
  float *pfVar15;
  undefined8 *puVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  
  param_4 = param_4 * param_5;
  iVar4 = *(int *)(param_1 + 8);
  pfVar15 = *(float **)(param_1 + 0x20);
  if (param_4 < 4) {
    iVar11 = 0;
  }
  else {
    uVar6 = param_4 - 4U >> 2;
    pbVar14 = (byte *)(param_2 + 1);
    puVar16 = param_3;
    do {
      fVar18 = *pfVar15;
      fVar21 = (float)pbVar14[-1] * fVar18;
      fVar20 = (float)*pbVar14 * fVar18;
      fVar19 = (float)pbVar14[1] * fVar18;
      fVar18 = (float)pbVar14[2] * fVar18;
      if (1 < iVar4) {
        pbVar7 = pbVar14 + (long)param_5 + -1;
        pfVar9 = pfVar15 + 1;
        do {
          bVar5 = *pbVar7;
          pbVar1 = pbVar7 + 1;
          pbVar2 = pbVar7 + 2;
          pbVar3 = pbVar7 + 3;
          pbVar7 = pbVar7 + param_5;
          pfVar12 = pfVar9 + 1;
          fVar17 = *pfVar9;
          fVar21 = fVar21 + fVar17 * (float)bVar5;
          fVar20 = fVar20 + fVar17 * (float)*pbVar1;
          fVar19 = fVar19 + fVar17 * (float)*pbVar2;
          fVar18 = fVar18 + fVar17 * (float)*pbVar3;
          pfVar9 = pfVar12;
        } while (pfVar12 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      pbVar14 = pbVar14 + 4;
      puVar16[1] = CONCAT44(fVar18,fVar19);
      *puVar16 = CONCAT44(fVar20,fVar21);
      puVar16 = puVar16 + 2;
    } while (pbVar14 != (byte *)(param_2 + (ulong)uVar6 * 4 + 5));
    iVar11 = (uVar6 + 1) * 4;
  }
  if (iVar11 < param_4) {
    lVar10 = (long)param_5;
    lVar8 = (long)iVar11;
    pbVar14 = (byte *)(param_2 + lVar8 + lVar10);
    pfVar9 = (float *)((long)param_3 + lVar8 * 4);
    do {
      fVar18 = (float)pbVar14[-lVar10] * *pfVar15;
      if (1 < iVar4) {
        pbVar7 = pbVar14;
        pfVar12 = pfVar15 + 1;
        do {
          bVar5 = *pbVar7;
          pbVar7 = pbVar7 + lVar10;
          pfVar13 = pfVar12 + 1;
          fVar18 = fVar18 + (float)bVar5 * *pfVar12;
          pfVar12 = pfVar13;
        } while (pfVar13 != pfVar15 + (ulong)(iVar4 - 2) + 2);
      }
      pbVar14 = pbVar14 + 1;
      *pfVar9 = fVar18;
      pfVar9 = pfVar9 + 1;
    } while (pbVar14 !=
             (byte *)(param_2 + lVar10 + 1 + lVar8 + (ulong)(uint)((param_4 + -1) - iVar11)));
  }
  return;
}


==================================================================

### FUNC 001b9a00 (6284 bytes) name=FUN_001b9a00

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_001b9a00(long param_1,byte *param_2,undefined8 *param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  uint uVar20;
  uint uVar21;
  int iVar22;
  byte bVar23;
  byte bVar24;
  byte bVar25;
  byte bVar26;
  byte bVar27;
  byte bVar28;
  uint uVar29;
  byte *pbVar30;
  uint3 uVar31;
  long lVar32;
  long lVar33;
  long lVar34;
  long lVar35;
  long lVar36;
  long lVar37;
  long lVar38;
  int iVar39;
  long lVar40;
  long lVar41;
  int *piVar42;
  long lVar43;
  int iVar44;
  long lVar45;
  long lVar46;
  byte *pbVar47;
  long lVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  ulong uVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  ulong uVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar63;
  byte *pbVar64;
  byte *pbVar65;
  byte *pbVar66;
  byte *pbVar67;
  int *piVar68;
  byte *pbVar69;
  uint uVar70;
  byte *pbVar71;
  uint uVar72;
  long lVar73;
  long lVar74;
  int iVar75;
  int iVar76;
  long lVar77;
  int iVar78;
  int iVar79;
  int iVar80;
  int iVar81;
  byte *pbVar82;
  byte *pbVar83;
  long lVar84;
  byte *pbVar85;
  byte *pbVar86;
  int iVar87;
  byte *pbVar88;
  int iVar89;
  int iVar90;
  int iVar91;
  int iVar92;
  int iVar93;
  int iVar94;
  int iVar95;
  int iVar96;
  int iVar97;
  int iVar98;
  int iVar99;
  int iVar100;
  int iVar101;
  int iVar102;
  int iVar103;
  int iVar104;
  int iVar105;
  int iVar106;
  int iVar107;
  byte *pbVar108;
  long lVar109;
  int iVar110;
  byte *pbVar111;
  int iVar112;
  int iVar113;
  int iVar114;
  byte *pbVar115;
  long lVar116;
  byte *pbVar117;
  int iVar118;
  int iVar119;
  int iVar120;
  int iVar121;
  byte *pbVar122;
  byte *local_1f0;
  byte *local_1e8;
  byte *local_1e0;
  byte *local_1d8;
  byte *local_1d0;
  byte *local_1c8;
  byte *local_1c0;
  byte *local_1b8;
  byte *local_1b0;
  int local_1a4;
  undefined8 *local_1a0;
  uint local_198;
  
  param_4 = param_4 * param_5;
  iVar22 = *(int *)(param_1 + 8);
  piVar68 = *(int **)(param_1 + 0x20);
  if (param_4 + -3 < 1) {
    iVar44 = 0;
  }
  else {
    lVar48 = (long)param_5;
    lVar45 = lVar48 * 4;
    lVar43 = lVar48 * 2;
    lVar46 = lVar48 * 0x10;
    lVar32 = lVar48 * 3;
    uVar29 = iVar22 - 1;
    uVar20 = -((uint)((ulong)(piVar68 + 1) >> 2) & 3) & 3;
    if (uVar29 < uVar20) {
      uVar20 = uVar29;
    }
    uVar21 = uVar29;
    if (0x11 < uVar29) {
      uVar21 = uVar20;
    }
    pbVar55 = param_2 + lVar43;
    uVar20 = ((uVar29 - uVar21) - 0x10 >> 4) + 1;
    lVar33 = lVar48 * 5;
    lVar40 = lVar48 * 8;
    uVar72 = uVar20 * 0x10;
    pbVar82 = param_2 + lVar48 * 4;
    pbVar58 = pbVar55 + lVar48;
    pbVar53 = pbVar58 + lVar48;
    pbVar69 = pbVar53 + lVar48;
    lVar73 = NEON_shl(lVar33,1);
    pbVar83 = param_2 + lVar48 * 5;
    pbVar108 = param_2 + lVar48 * 6;
    local_1b0 = pbVar69 + lVar48;
    pbVar47 = local_1b0 + lVar48;
    pbVar67 = pbVar47 + lVar48;
    pbVar66 = pbVar67 + lVar48;
    lVar77 = NEON_shl(lVar32,2);
    lVar74 = NEON_shl(lVar32,1);
    pbVar65 = pbVar66 + lVar48;
    local_1b8 = param_2 + lVar48 * 0x11;
    pbVar64 = pbVar65 + lVar48;
    pbVar63 = pbVar64 + lVar48;
    pbVar62 = pbVar63 + lVar48;
    pbVar88 = pbVar62 + lVar48;
    pbVar115 = param_2 + lVar48 * 7;
    pbVar71 = pbVar88 + lVar48;
    lVar41 = (ulong)uVar21 * lVar48;
    pbVar57 = param_2 + lVar48;
    pbVar111 = param_2 + lVar48 * 0x11;
    pbVar86 = param_2 + lVar32;
    pbVar117 = param_2 + lVar48 * 8;
    pbVar122 = param_2 + lVar48 * 9;
    local_1f0 = param_2 + lVar48 * 10;
    local_1d8 = param_2 + lVar48 * 0xd;
    local_1d0 = param_2 + lVar48 * 0xe;
    local_1c8 = param_2 + lVar48 * 0xf;
    local_1c0 = param_2 + lVar48 * 0x10;
    lVar34 = lVar48 * 7;
    lVar35 = lVar48 * 9;
    local_1e8 = param_2 + lVar48 * 0xb;
    local_1e0 = param_2 + lVar48 * 0xc;
    lVar37 = lVar48 * 0xe;
    lVar109 = lVar73 + lVar48;
    lVar36 = lVar48 * 0xf;
    pbVar85 = pbVar71 + lVar48;
    lVar116 = lVar77 + lVar48;
    local_1a4 = 0;
    pbVar49 = param_2;
    lVar84 = lVar48;
    pbVar60 = pbVar55;
    local_1a0 = param_3;
    do {
      iVar39 = *piVar68;
      iVar79 = (uint)*pbVar49 * iVar39;
      iVar44 = (uint)pbVar49[1] * iVar39;
      iVar76 = (uint)pbVar49[2] * iVar39;
      iVar39 = (uint)pbVar49[3] * iVar39;
      if (1 < iVar22) {
        if (uVar21 == 0) {
          uVar59 = 1;
          pbVar61 = pbVar49;
        }
        else {
          iVar96 = piVar68[1];
          iVar79 = iVar79 + (uint)*pbVar57 * iVar96;
          iVar44 = iVar44 + (uint)pbVar57[1] * iVar96;
          iVar76 = iVar76 + (uint)pbVar57[2] * iVar96;
          iVar39 = iVar39 + (uint)pbVar57[3] * iVar96;
          if (uVar21 == 1) {
            uVar59 = 2;
            pbVar61 = pbVar57;
          }
          else {
            iVar96 = piVar68[2];
            iVar44 = iVar44 + (uint)pbVar55[1] * iVar96;
            iVar79 = iVar79 + (uint)*pbVar60 * iVar96;
            iVar76 = iVar76 + (uint)pbVar55[2] * iVar96;
            iVar39 = iVar39 + (uint)pbVar55[3] * iVar96;
            if (uVar21 == 2) {
              uVar59 = 3;
              pbVar61 = pbVar60;
            }
            else {
              iVar96 = piVar68[3];
              iVar44 = iVar44 + (uint)pbVar58[1] * iVar96;
              iVar79 = iVar79 + (uint)*pbVar86 * iVar96;
              iVar76 = iVar76 + (uint)pbVar58[2] * iVar96;
              iVar39 = iVar39 + (uint)pbVar58[3] * iVar96;
              if (uVar21 == 3) {
                uVar59 = 4;
                pbVar61 = pbVar86;
              }
              else {
                iVar96 = piVar68[4];
                iVar44 = iVar44 + (uint)pbVar53[1] * iVar96;
                iVar79 = iVar79 + (uint)*pbVar82 * iVar96;
                iVar76 = iVar76 + (uint)pbVar53[2] * iVar96;
                iVar39 = iVar39 + (uint)pbVar53[3] * iVar96;
                if (uVar21 == 4) {
                  uVar59 = 5;
                  pbVar61 = pbVar82;
                }
                else {
                  iVar96 = piVar68[5];
                  iVar44 = iVar44 + (uint)pbVar69[1] * iVar96;
                  iVar79 = iVar79 + (uint)*pbVar83 * iVar96;
                  iVar76 = iVar76 + (uint)pbVar69[2] * iVar96;
                  iVar39 = iVar39 + (uint)pbVar69[3] * iVar96;
                  if (uVar21 == 5) {
                    uVar59 = 6;
                    pbVar61 = pbVar83;
                  }
                  else {
                    iVar96 = piVar68[6];
                    iVar79 = iVar79 + (uint)*pbVar108 * iVar96;
                    iVar44 = iVar44 + (uint)local_1b0[1] * iVar96;
                    iVar76 = iVar76 + (uint)local_1b0[2] * iVar96;
                    iVar39 = iVar39 + (uint)local_1b0[3] * iVar96;
                    if (uVar21 == 6) {
                      uVar59 = 7;
                      pbVar61 = pbVar108;
                    }
                    else {
                      iVar96 = piVar68[7];
                      iVar44 = iVar44 + (uint)pbVar47[1] * iVar96;
                      iVar79 = iVar79 + (uint)*pbVar115 * iVar96;
                      iVar76 = iVar76 + (uint)pbVar47[2] * iVar96;
                      iVar39 = iVar39 + (uint)pbVar47[3] * iVar96;
                      if (uVar21 == 7) {
                        uVar59 = 8;
                        pbVar61 = pbVar115;
                      }
                      else {
                        iVar96 = piVar68[8];
                        iVar44 = iVar44 + (uint)pbVar67[1] * iVar96;
                        iVar79 = iVar79 + (uint)*pbVar117 * iVar96;
                        iVar76 = iVar76 + (uint)pbVar67[2] * iVar96;
                        iVar39 = iVar39 + (uint)pbVar67[3] * iVar96;
                        if (uVar21 == 8) {
                          uVar59 = 9;
                          pbVar61 = pbVar117;
                        }
                        else {
                          iVar96 = piVar68[9];
                          iVar44 = iVar44 + (uint)pbVar66[1] * iVar96;
                          iVar79 = iVar79 + (uint)*pbVar122 * iVar96;
                          iVar76 = iVar76 + (uint)pbVar66[2] * iVar96;
                          iVar39 = iVar39 + (uint)pbVar66[3] * iVar96;
                          if (uVar21 == 9) {
                            uVar59 = 10;
                            pbVar61 = pbVar122;
                          }
                          else {
                            iVar96 = piVar68[10];
                            iVar79 = iVar79 + (uint)*local_1f0 * iVar96;
                            iVar44 = iVar44 + (uint)pbVar65[1] * iVar96;
                            iVar76 = iVar76 + (uint)pbVar65[2] * iVar96;
                            iVar39 = iVar39 + (uint)pbVar65[3] * iVar96;
                            if (uVar21 == 10) {
                              uVar59 = 0xb;
                              pbVar61 = local_1f0;
                            }
                            else {
                              iVar96 = piVar68[0xb];
                              iVar79 = iVar79 + (uint)*local_1e8 * iVar96;
                              iVar44 = iVar44 + (uint)pbVar64[1] * iVar96;
                              iVar76 = iVar76 + (uint)pbVar64[2] * iVar96;
                              iVar39 = iVar39 + (uint)pbVar64[3] * iVar96;
                              if (uVar21 == 0xb) {
                                uVar59 = 0xc;
                                pbVar61 = local_1e8;
                              }
                              else {
                                iVar96 = piVar68[0xc];
                                iVar79 = iVar79 + (uint)*local_1e0 * iVar96;
                                iVar44 = iVar44 + (uint)pbVar63[1] * iVar96;
                                iVar76 = iVar76 + (uint)pbVar63[2] * iVar96;
                                iVar39 = iVar39 + (uint)pbVar63[3] * iVar96;
                                if (uVar21 == 0xc) {
                                  uVar59 = 0xd;
                                  pbVar61 = local_1e0;
                                }
                                else {
                                  iVar96 = piVar68[0xd];
                                  iVar79 = iVar79 + (uint)*local_1d8 * iVar96;
                                  iVar44 = iVar44 + (uint)pbVar62[1] * iVar96;
                                  iVar76 = iVar76 + (uint)pbVar62[2] * iVar96;
                                  iVar39 = iVar39 + (uint)pbVar62[3] * iVar96;
                                  if (uVar21 == 0xd) {
                                    uVar59 = 0xe;
                                    pbVar61 = local_1d8;
                                  }
                                  else {
                                    iVar96 = piVar68[0xe];
                                    iVar79 = iVar79 + (uint)*local_1d0 * iVar96;
                                    iVar44 = iVar44 + (uint)pbVar88[1] * iVar96;
                                    iVar76 = iVar76 + (uint)pbVar88[2] * iVar96;
                                    iVar39 = iVar39 + (uint)pbVar88[3] * iVar96;
                                    if (uVar21 == 0xe) {
                                      uVar59 = 0xf;
                                      pbVar61 = local_1d0;
                                    }
                                    else {
                                      iVar96 = piVar68[0xf];
                                      iVar79 = iVar79 + (uint)*local_1c8 * iVar96;
                                      iVar44 = iVar44 + (uint)pbVar71[1] * iVar96;
                                      iVar76 = iVar76 + (uint)pbVar71[2] * iVar96;
                                      iVar39 = iVar39 + (uint)pbVar71[3] * iVar96;
                                      if (uVar21 == 0xf) {
                                        uVar59 = 0x10;
                                        pbVar61 = local_1c8;
                                      }
                                      else {
                                        iVar96 = piVar68[0x10];
                                        iVar79 = iVar79 + (uint)*local_1c0 * iVar96;
                                        iVar44 = iVar44 + (uint)pbVar85[1] * iVar96;
                                        iVar76 = iVar76 + (uint)pbVar85[2] * iVar96;
                                        iVar39 = iVar39 + (uint)pbVar85[3] * iVar96;
                                        if (uVar21 == 0x10) {
                                          uVar59 = 0x11;
                                          pbVar61 = local_1c0;
                                        }
                                        else {
                                          uVar59 = 0x12;
                                          iVar96 = piVar68[0x11];
                                          iVar79 = iVar79 + (uint)*local_1b8 * iVar96;
                                          iVar44 = iVar44 + (uint)pbVar111[1] * iVar96;
                                          iVar76 = iVar76 + (uint)pbVar111[2] * iVar96;
                                          iVar39 = iVar39 + (uint)pbVar111[3] * iVar96;
                                          pbVar61 = local_1b8;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar29 == uVar21) goto LAB_001ba964;
        }
        if (0xe < (iVar22 + -2) - uVar21) {
          iVar104 = 0;
          iVar105 = 0;
          iVar106 = 0;
          iVar107 = 0;
          pbVar56 = param_2 + lVar41 + lVar84;
          pbVar54 = param_2 + lVar41 + 1 + lVar84;
          pbVar51 = param_2 + lVar41 + 2 + lVar84;
          pbVar50 = param_2 + lVar41 + 3 + lVar84;
          local_198 = 0;
          piVar42 = piVar68 + (ulong)uVar21 + 1;
          iVar96 = iVar104;
          iVar97 = iVar105;
          iVar110 = iVar104;
          iVar112 = iVar105;
          iVar118 = iVar104;
          iVar119 = iVar105;
          iVar98 = iVar106;
          iVar99 = iVar107;
          iVar113 = iVar106;
          iVar114 = iVar107;
          iVar120 = iVar106;
          iVar121 = iVar107;
          do {
            local_198 = local_198 + 1;
            bVar23 = *pbVar56;
            bVar25 = pbVar56[lVar48];
            pbVar1 = pbVar56 + lVar43;
            pbVar2 = pbVar56 + lVar32;
            pbVar3 = pbVar56 + lVar45;
            pbVar4 = pbVar56 + lVar33;
            pbVar5 = pbVar56 + lVar74;
            pbVar6 = pbVar56 + lVar34;
            pbVar7 = pbVar56 + lVar40;
            bVar26 = pbVar56[lVar35];
            pbVar8 = pbVar56 + lVar73;
            pbVar9 = pbVar56 + lVar109;
            pbVar10 = pbVar56 + lVar77;
            pbVar11 = pbVar56 + lVar116;
            pbVar12 = pbVar56 + lVar37;
            pbVar30 = pbVar56 + lVar36;
            bVar24 = *pbVar54;
            pbVar56 = pbVar56 + lVar46;
            bVar27 = pbVar54[lVar48];
            pbVar13 = pbVar54 + lVar43;
            pbVar14 = pbVar54 + lVar32;
            pbVar15 = pbVar54 + lVar45;
            pbVar16 = pbVar54 + lVar33;
            iVar100 = (int)*(undefined8 *)piVar42;
            iVar101 = (int)((ulong)*(undefined8 *)piVar42 >> 0x20);
            iVar102 = (int)*(undefined8 *)(piVar42 + 2);
            iVar103 = (int)((ulong)*(undefined8 *)(piVar42 + 2) >> 0x20);
            pbVar17 = pbVar54 + lVar74;
            iVar92 = (int)*(undefined8 *)(piVar42 + 4);
            iVar93 = (int)((ulong)*(undefined8 *)(piVar42 + 4) >> 0x20);
            iVar94 = (int)*(undefined8 *)(piVar42 + 6);
            iVar95 = (int)((ulong)*(undefined8 *)(piVar42 + 6) >> 0x20);
            pbVar18 = pbVar54 + lVar34;
            pbVar19 = pbVar54 + lVar40;
            iVar87 = (int)*(undefined8 *)(piVar42 + 8);
            iVar89 = (int)((ulong)*(undefined8 *)(piVar42 + 8) >> 0x20);
            iVar90 = (int)*(undefined8 *)(piVar42 + 10);
            iVar91 = (int)((ulong)*(undefined8 *)(piVar42 + 10) >> 0x20);
            bVar28 = pbVar54[lVar35];
            iVar75 = (int)*(undefined8 *)(piVar42 + 0xc);
            iVar78 = (int)((ulong)*(undefined8 *)(piVar42 + 0xc) >> 0x20);
            iVar80 = (int)*(undefined8 *)(piVar42 + 0xe);
            iVar81 = (int)((ulong)*(undefined8 *)(piVar42 + 0xe) >> 0x20);
            iVar104 = iVar104 + ((CONCAT12(bVar25,CONCAT11(bVar25,bVar23)) & 0xff00ff) & 0xffff) *
                                iVar100 + (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) * iVar92 +
                      ((CONCAT12(bVar26,CONCAT11(bVar26,*pbVar7)) & 0xff00ff) & 0xffff) * iVar87 +
                      (CONCAT12(*pbVar11,(ushort)*pbVar10) & 0xffff) * iVar75;
            iVar105 = iVar105 + (uint)bVar25 * iVar101 + (uint)*pbVar4 * iVar93 +
                      (uint)bVar26 * iVar89 + (uint)*pbVar11 * iVar78;
            iVar106 = iVar106 + (uint)*pbVar1 * iVar102 + (uint)*pbVar5 * iVar94 +
                      (uint)*pbVar8 * iVar90 + (uint)*pbVar12 * iVar80;
            iVar107 = iVar107 + (uint)*pbVar2 * iVar103 + (uint)*pbVar6 * iVar95 +
                      (uint)*pbVar9 * iVar91 + (uint)*pbVar30 * iVar81;
            pbVar1 = pbVar54 + lVar73;
            pbVar2 = pbVar54 + lVar109;
            pbVar3 = pbVar54 + lVar77;
            pbVar4 = pbVar54 + lVar116;
            pbVar5 = pbVar54 + lVar37;
            pbVar30 = pbVar54 + lVar36;
            pbVar54 = pbVar54 + lVar46;
            bVar23 = *pbVar51;
            bVar25 = pbVar51[lVar48];
            pbVar6 = pbVar51 + lVar43;
            pbVar7 = pbVar51 + lVar32;
            pbVar8 = pbVar51 + lVar45;
            pbVar9 = pbVar51 + lVar33;
            pbVar10 = pbVar51 + lVar74;
            pbVar11 = pbVar51 + lVar34;
            pbVar12 = pbVar51 + lVar40;
            bVar26 = pbVar51[lVar35];
            iVar110 = iVar110 + ((CONCAT12(bVar27,CONCAT11(bVar27,bVar24)) & 0xff00ff) & 0xffff) *
                                iVar100 + (CONCAT12(*pbVar16,(ushort)*pbVar15) & 0xffff) * iVar92 +
                      ((CONCAT12(bVar28,CONCAT11(bVar28,*pbVar19)) & 0xff00ff) & 0xffff) * iVar87 +
                      (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) * iVar75;
            iVar112 = iVar112 + (uint)bVar27 * iVar101 + (uint)*pbVar16 * iVar93 +
                      (uint)bVar28 * iVar89 + (uint)*pbVar4 * iVar78;
            iVar113 = iVar113 + (uint)*pbVar13 * iVar102 + (uint)*pbVar17 * iVar94 +
                      (uint)*pbVar1 * iVar90 + (uint)*pbVar5 * iVar80;
            iVar114 = iVar114 + (uint)*pbVar14 * iVar103 + (uint)*pbVar18 * iVar95 +
                      (uint)*pbVar2 * iVar91 + (uint)*pbVar30 * iVar81;
            pbVar1 = pbVar51 + lVar73;
            pbVar2 = pbVar51 + lVar109;
            pbVar3 = pbVar51 + lVar77;
            pbVar4 = pbVar51 + lVar116;
            pbVar5 = pbVar51 + lVar37;
            pbVar30 = pbVar51 + lVar36;
            pbVar51 = pbVar51 + lVar46;
            bVar24 = *pbVar50;
            bVar27 = pbVar50[lVar48];
            pbVar13 = pbVar50 + lVar43;
            pbVar14 = pbVar50 + lVar32;
            pbVar15 = pbVar50 + lVar45;
            pbVar16 = pbVar50 + lVar33;
            pbVar17 = pbVar50 + lVar74;
            pbVar18 = pbVar50 + lVar34;
            pbVar19 = pbVar50 + lVar40;
            bVar28 = pbVar50[lVar35];
            iVar118 = iVar118 + ((CONCAT12(bVar25,CONCAT11(bVar25,bVar23)) & 0xff00ff) & 0xffff) *
                                iVar100 + (CONCAT12(*pbVar9,(ushort)*pbVar8) & 0xffff) * iVar92 +
                      ((CONCAT12(bVar26,CONCAT11(bVar26,*pbVar12)) & 0xff00ff) & 0xffff) * iVar87 +
                      (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) * iVar75;
            iVar119 = iVar119 + (uint)bVar25 * iVar101 + (uint)*pbVar9 * iVar93 +
                      (uint)bVar26 * iVar89 + (uint)*pbVar4 * iVar78;
            iVar120 = iVar120 + (uint)*pbVar6 * iVar102 + (uint)*pbVar10 * iVar94 +
                      (uint)*pbVar1 * iVar90 + (uint)*pbVar5 * iVar80;
            iVar121 = iVar121 + (uint)*pbVar7 * iVar103 + (uint)*pbVar11 * iVar95 +
                      (uint)*pbVar2 * iVar91 + (uint)*pbVar30 * iVar81;
            pbVar1 = pbVar50 + lVar73;
            pbVar2 = pbVar50 + lVar109;
            pbVar3 = pbVar50 + lVar77;
            pbVar4 = pbVar50 + lVar116;
            pbVar5 = pbVar50 + lVar37;
            pbVar6 = pbVar50 + lVar36;
            pbVar50 = pbVar50 + lVar46;
            iVar96 = iVar96 + ((CONCAT12(bVar27,CONCAT11(bVar27,bVar24)) & 0xff00ff) & 0xffff) *
                              iVar100 + (CONCAT12(*pbVar16,(ushort)*pbVar15) & 0xffff) * iVar92 +
                     ((CONCAT12(bVar28,CONCAT11(bVar28,*pbVar19)) & 0xff00ff) & 0xffff) * iVar87 +
                     (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) * iVar75;
            iVar97 = iVar97 + (uint)bVar27 * iVar101 + (uint)*pbVar16 * iVar93 +
                     (uint)bVar28 * iVar89 + (uint)*pbVar4 * iVar78;
            iVar98 = iVar98 + (uint)*pbVar13 * iVar102 + (uint)*pbVar17 * iVar94 +
                     (uint)*pbVar1 * iVar90 + (uint)*pbVar5 * iVar80;
            iVar99 = iVar99 + (uint)*pbVar14 * iVar103 + (uint)*pbVar18 * iVar95 +
                     (uint)*pbVar2 * iVar91 + (uint)*pbVar6 * iVar81;
            piVar42 = piVar42 + 0x10;
          } while (local_198 < uVar20);
          uVar59 = (ulong)((int)uVar59 + uVar72);
          pbVar61 = pbVar61 + (ulong)uVar72 * lVar48;
          iVar44 = iVar44 + iVar110 + iVar112 + iVar113 + iVar114;
          iVar39 = iVar39 + iVar96 + iVar97 + iVar98 + iVar99;
          iVar76 = iVar76 + iVar118 + iVar119 + iVar120 + iVar121;
          iVar79 = iVar79 + iVar104 + iVar105 + iVar106 + iVar107;
          if (uVar29 - uVar21 == uVar72) goto LAB_001ba964;
        }
        uVar52 = -(uVar59 >> 0x1f) & 0xfffffffc00000000 | uVar59 << 2;
        iVar97 = (int)uVar59;
        iVar96 = *(int *)((long)piVar68 + uVar52);
        iVar79 = iVar79 + (uint)pbVar61[lVar48] * iVar96;
        iVar39 = iVar39 + (uint)pbVar61[lVar48 + 3] * iVar96;
        iVar44 = iVar44 + (uint)pbVar61[lVar48 + 1] * iVar96;
        iVar76 = iVar76 + (uint)pbVar61[lVar48 + 2] * iVar96;
        if (iVar97 + 1 < iVar22) {
          lVar38 = lVar48 * 2;
          iVar96 = *(int *)((long)piVar68 + uVar52 + 4);
          iVar79 = iVar79 + (uint)pbVar61[lVar48 * 2] * iVar96;
          iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
          iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
          iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
          if (iVar97 + 2 < iVar22) {
            lVar38 = lVar48 * 3;
            iVar96 = *(int *)((long)piVar68 + uVar52 + 8);
            iVar79 = iVar79 + (uint)pbVar61[lVar48 * 3] * iVar96;
            iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
            iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
            iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
            if (iVar97 + 3 < iVar22) {
              lVar38 = lVar48 * 4;
              iVar96 = *(int *)((long)piVar68 + uVar52 + 0xc);
              iVar79 = iVar79 + (uint)pbVar61[lVar48 * 4] * iVar96;
              iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
              iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
              iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
              if (iVar97 + 4 < iVar22) {
                lVar38 = lVar48 * 5;
                iVar96 = *(int *)((long)piVar68 + uVar52 + 0x10);
                iVar79 = iVar79 + (uint)pbVar61[lVar48 * 5] * iVar96;
                iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                if (iVar97 + 5 < iVar22) {
                  lVar38 = lVar48 * 6;
                  iVar96 = *(int *)((long)piVar68 + uVar52 + 0x14);
                  iVar79 = iVar79 + (uint)pbVar61[lVar48 * 6] * iVar96;
                  iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                  iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                  iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                  if (iVar97 + 6 < iVar22) {
                    lVar38 = lVar48 * 7;
                    iVar96 = *(int *)((long)piVar68 + uVar52 + 0x18);
                    iVar79 = iVar79 + (uint)pbVar61[lVar48 * 7] * iVar96;
                    iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                    iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                    iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                    if (iVar97 + 7 < iVar22) {
                      lVar38 = lVar48 * 8;
                      iVar96 = *(int *)((long)piVar68 + uVar52 + 0x1c);
                      iVar79 = iVar79 + (uint)pbVar61[lVar48 * 8] * iVar96;
                      iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                      iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                      iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                      if (iVar97 + 8 < iVar22) {
                        lVar38 = lVar48 * 9;
                        iVar96 = *(int *)((long)piVar68 + uVar52 + 0x20);
                        iVar79 = iVar79 + (uint)pbVar61[lVar48 * 9] * iVar96;
                        iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                        iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                        iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                        if (iVar97 + 9 < iVar22) {
                          lVar38 = lVar48 * 10;
                          iVar96 = *(int *)((long)piVar68 + uVar52 + 0x24);
                          iVar79 = iVar79 + (uint)pbVar61[lVar48 * 10] * iVar96;
                          iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                          iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                          iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                          if (iVar97 + 10 < iVar22) {
                            lVar38 = lVar48 * 0xb;
                            iVar96 = *(int *)((long)piVar68 + uVar52 + 0x28);
                            iVar79 = iVar79 + (uint)pbVar61[lVar48 * 0xb] * iVar96;
                            iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                            iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                            iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                            if (iVar97 + 0xb < iVar22) {
                              lVar38 = lVar48 * 0xc;
                              iVar96 = *(int *)((long)piVar68 + uVar52 + 0x2c);
                              iVar79 = iVar79 + (uint)pbVar61[lVar48 * 0xc] * iVar96;
                              iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                              iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                              iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                              if (iVar97 + 0xc < iVar22) {
                                lVar38 = lVar48 * 0xd;
                                iVar96 = *(int *)((long)piVar68 + uVar52 + 0x30);
                                iVar79 = iVar79 + (uint)pbVar61[lVar48 * 0xd] * iVar96;
                                iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                                iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                                iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                                if (iVar97 + 0xd < iVar22) {
                                  lVar38 = lVar48 * 0xe;
                                  iVar96 = *(int *)((long)piVar68 + uVar52 + 0x34);
                                  iVar79 = iVar79 + (uint)pbVar61[lVar48 * 0xe] * iVar96;
                                  iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                                  iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                                  iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                                  if (iVar97 + 0xe < iVar22) {
                                    lVar38 = lVar48 * 0xf;
                                    iVar96 = *(int *)((long)piVar68 + uVar52 + 0x38);
                                    iVar79 = iVar79 + (uint)pbVar61[lVar48 * 0xf] * iVar96;
                                    iVar44 = iVar44 + (uint)pbVar61[lVar38 + 1] * iVar96;
                                    iVar76 = iVar76 + (uint)pbVar61[lVar38 + 2] * iVar96;
                                    iVar39 = iVar39 + (uint)pbVar61[lVar38 + 3] * iVar96;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001ba964:
      pbVar49 = pbVar49 + 4;
      pbVar57 = pbVar57 + 4;
      pbVar55 = pbVar55 + 4;
      local_1b8 = local_1b8 + 4;
      pbVar58 = pbVar58 + 4;
      local_1a4 = local_1a4 + 4;
      pbVar53 = pbVar53 + 4;
      pbVar60 = pbVar60 + 4;
      pbVar69 = pbVar69 + 4;
      pbVar47 = pbVar47 + 4;
      pbVar67 = pbVar67 + 4;
      pbVar66 = pbVar66 + 4;
      pbVar65 = pbVar65 + 4;
      pbVar64 = pbVar64 + 4;
      pbVar63 = pbVar63 + 4;
      pbVar62 = pbVar62 + 4;
      lVar84 = lVar84 + 4;
      pbVar86 = pbVar86 + 4;
      pbVar82 = pbVar82 + 4;
      pbVar83 = pbVar83 + 4;
      pbVar108 = pbVar108 + 4;
      pbVar115 = pbVar115 + 4;
      pbVar117 = pbVar117 + 4;
      pbVar122 = pbVar122 + 4;
      local_1f0 = local_1f0 + 4;
      local_1e8 = local_1e8 + 4;
      local_1a0[1] = CONCAT44(iVar39,iVar76);
      *local_1a0 = CONCAT44(iVar44,iVar79);
      local_1e0 = local_1e0 + 4;
      local_1d8 = local_1d8 + 4;
      local_1d0 = local_1d0 + 4;
      local_1c8 = local_1c8 + 4;
      local_1c0 = local_1c0 + 4;
      pbVar111 = pbVar111 + 4;
      local_1b0 = local_1b0 + 4;
      pbVar88 = pbVar88 + 4;
      pbVar71 = pbVar71 + 4;
      pbVar85 = pbVar85 + 4;
      local_1a0 = local_1a0 + 2;
    } while (local_1a4 < param_4 + -3);
    iVar44 = (param_4 - 4U & 0xfffffffc) + 4;
  }
  if (iVar44 < param_4) {
    lVar43 = (long)param_5;
    uVar29 = iVar22 - 1;
    lVar45 = lVar43 * 2;
    uVar20 = -((uint)((ulong)(piVar68 + 1) >> 2) & 3) & 3;
    lVar32 = lVar43 * 3;
    if (uVar29 < uVar20) {
      uVar20 = uVar29;
    }
    uVar21 = uVar29;
    if (0x11 < uVar29) {
      uVar21 = uVar20;
    }
    lVar48 = (long)iVar44;
    lVar116 = NEON_shl(lVar43,3);
    lVar109 = NEON_shl(lVar43,4);
    uVar20 = ((uVar29 - uVar21) - 0x10 >> 4) + 1;
    uVar72 = uVar20 * 0x10;
    lVar84 = NEON_shl(lVar32,1);
    pbVar49 = param_2 + lVar48;
    pbVar57 = param_2 + lVar48 + lVar43 * 4;
    pbVar55 = param_2 + lVar48 + lVar43 * 7;
    pbVar58 = param_2 + lVar48 + lVar43 * 10;
    pbVar53 = param_2 + lVar48 + lVar43 * 0xc;
    pbVar60 = param_2 + lVar48 + lVar43 * 0x10;
    lVar46 = lVar43 + lVar48;
    do {
      iVar39 = (uint)*pbVar49 * *piVar68;
      if (1 < iVar22) {
        if (uVar21 == 0) {
          uVar59 = 1;
          pbVar69 = pbVar49;
        }
        else {
          pbVar69 = pbVar49 + lVar43;
          iVar39 = iVar39 + (uint)pbVar49[lVar43] * piVar68[1];
          if (uVar21 == 1) {
            uVar59 = 2;
          }
          else {
            pbVar69 = pbVar69 + lVar43;
            iVar39 = iVar39 + (uint)pbVar49[lVar45] * piVar68[2];
            if (uVar21 == 2) {
              uVar59 = 3;
            }
            else {
              pbVar69 = pbVar69 + lVar43;
              iVar39 = iVar39 + (uint)pbVar49[lVar32] * piVar68[3];
              if (uVar21 == 3) {
                uVar59 = 4;
              }
              else {
                iVar39 = iVar39 + (uint)*pbVar57 * piVar68[4];
                if (uVar21 == 4) {
                  uVar59 = 5;
                  pbVar69 = pbVar57;
                }
                else {
                  iVar39 = iVar39 + (uint)pbVar57[lVar43] * piVar68[5];
                  if (uVar21 == 5) {
                    uVar59 = 6;
                    pbVar69 = pbVar57 + lVar43;
                  }
                  else {
                    iVar39 = iVar39 + (uint)pbVar57[lVar45] * piVar68[6];
                    if (uVar21 == 6) {
                      uVar59 = 7;
                      pbVar69 = pbVar57 + lVar43 + lVar43;
                    }
                    else {
                      iVar39 = iVar39 + (uint)*pbVar55 * piVar68[7];
                      if (uVar21 == 7) {
                        uVar59 = 8;
                        pbVar69 = pbVar55;
                      }
                      else {
                        iVar39 = iVar39 + (uint)pbVar55[lVar43] * piVar68[8];
                        if (uVar21 == 8) {
                          uVar59 = 9;
                          pbVar69 = pbVar55 + lVar43;
                        }
                        else {
                          iVar39 = iVar39 + (uint)pbVar55[lVar45] * piVar68[9];
                          if (uVar21 == 9) {
                            uVar59 = 10;
                            pbVar69 = pbVar55 + lVar43 + lVar43;
                          }
                          else {
                            iVar39 = iVar39 + (uint)*pbVar58 * piVar68[10];
                            if (uVar21 == 10) {
                              uVar59 = 0xb;
                              pbVar69 = pbVar58;
                            }
                            else {
                              iVar39 = iVar39 + (uint)pbVar58[lVar43] * piVar68[0xb];
                              if (uVar21 == 0xb) {
                                uVar59 = 0xc;
                                pbVar69 = pbVar58 + lVar43;
                              }
                              else {
                                iVar39 = iVar39 + (uint)*pbVar53 * piVar68[0xc];
                                if (uVar21 == 0xc) {
                                  uVar59 = 0xd;
                                  pbVar69 = pbVar53;
                                }
                                else {
                                  pbVar69 = pbVar53 + lVar43;
                                  iVar39 = iVar39 + (uint)pbVar53[lVar43] * piVar68[0xd];
                                  if (uVar21 == 0xd) {
                                    uVar59 = 0xe;
                                  }
                                  else {
                                    iVar39 = iVar39 + (uint)pbVar53[lVar45] * piVar68[0xe];
                                    if (uVar21 == 0xe) {
                                      uVar59 = 0xf;
                                      pbVar69 = pbVar69 + lVar43;
                                    }
                                    else {
                                      iVar39 = iVar39 + (uint)pbVar53[lVar32] * piVar68[0xf];
                                      if (uVar21 == 0xf) {
                                        uVar59 = 0x10;
                                        pbVar69 = pbVar69 + lVar43 + lVar43;
                                      }
                                      else {
                                        iVar39 = iVar39 + (uint)*pbVar60 * piVar68[0x10];
                                        if (uVar21 == 0x10) {
                                          uVar59 = 0x11;
                                          pbVar69 = pbVar60;
                                        }
                                        else {
                                          uVar59 = 0x12;
                                          iVar39 = iVar39 + (uint)pbVar60[lVar43] * piVar68[0x11];
                                          pbVar69 = pbVar60 + lVar43;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar21 == uVar29) goto LAB_001bb0f0;
        }
        if (0xe < (iVar22 + -2) - uVar21) {
          iVar76 = 0;
          iVar79 = 0;
          iVar96 = 0;
          iVar97 = 0;
          uVar70 = 0;
          pbVar47 = param_2 + lVar43 * (ulong)uVar21 + lVar46;
          pbVar67 = pbVar47 + lVar43 * 10;
          piVar42 = piVar68 + (ulong)uVar21 + 1;
          do {
            bVar23 = *pbVar47;
            uVar70 = uVar70 + 1;
            bVar25 = pbVar47[lVar43];
            pbVar66 = pbVar47 + lVar45;
            pbVar65 = pbVar47 + lVar32;
            pbVar64 = pbVar47 + lVar43 * 4;
            pbVar63 = pbVar47 + lVar43 * 5;
            pbVar62 = pbVar47 + lVar84;
            pbVar86 = pbVar67 + lVar43 * -3;
            pbVar82 = pbVar47 + lVar116;
            pbVar83 = pbVar47 + lVar116 + lVar43;
            pbVar47 = pbVar47 + lVar109;
            bVar24 = *pbVar67;
            pbVar108 = pbVar67 + lVar43;
            pbVar115 = pbVar67 + lVar45;
            pbVar117 = pbVar67 + lVar32;
            pbVar122 = pbVar67 + lVar43 * 4;
            pbVar111 = pbVar67 + lVar43 * 5;
            pbVar67 = pbVar67 + lVar109;
            uVar31 = CONCAT12(*pbVar83,CONCAT11(*pbVar83,*pbVar82)) & 0xff00ff;
            iVar76 = iVar76 + ((CONCAT12(bVar25,CONCAT11(bVar25,bVar23)) & 0xff00ff) & 0xffff) *
                              (int)*(undefined8 *)piVar42 +
                     (CONCAT12(*pbVar63,(ushort)*pbVar64) & 0xffff) *
                     (int)*(undefined8 *)(piVar42 + 4) +
                     (uVar31 & 0xffff) * (int)*(undefined8 *)(piVar42 + 8) +
                     (CONCAT12(*pbVar117,(ushort)*pbVar115) & 0xffff) *
                     (int)*(undefined8 *)(piVar42 + 0xc);
            iVar79 = iVar79 + (uint)bVar25 * (int)((ulong)*(undefined8 *)piVar42 >> 0x20) +
                     (uint)*pbVar63 * (int)((ulong)*(undefined8 *)(piVar42 + 4) >> 0x20) +
                     (uint)(byte)(uVar31 >> 0x10) *
                     (int)((ulong)*(undefined8 *)(piVar42 + 8) >> 0x20) +
                     (uint)*pbVar117 * (int)((ulong)*(undefined8 *)(piVar42 + 0xc) >> 0x20);
            iVar96 = iVar96 + (uint)*pbVar66 * (int)*(undefined8 *)(piVar42 + 2) +
                     (uint)*pbVar62 * (int)*(undefined8 *)(piVar42 + 6) +
                     (uint)bVar24 * (int)*(undefined8 *)(piVar42 + 10) +
                     (uint)*pbVar122 * (int)*(undefined8 *)(piVar42 + 0xe);
            iVar97 = iVar97 + (uint)*pbVar65 * (int)((ulong)*(undefined8 *)(piVar42 + 2) >> 0x20) +
                     (uint)*pbVar86 * (int)((ulong)*(undefined8 *)(piVar42 + 6) >> 0x20) +
                     (uint)*pbVar108 * (int)((ulong)*(undefined8 *)(piVar42 + 10) >> 0x20) +
                     (uint)*pbVar111 * (int)((ulong)*(undefined8 *)(piVar42 + 0xe) >> 0x20);
            piVar42 = piVar42 + 0x10;
          } while (uVar70 < uVar20);
          uVar59 = (ulong)((int)uVar59 + uVar72);
          pbVar69 = pbVar69 + lVar43 * (ulong)uVar72;
          iVar39 = iVar39 + iVar76 + iVar79 + iVar96 + iVar97;
          if (uVar72 == uVar29 - uVar21) goto LAB_001bb0f0;
        }
        uVar52 = -(uVar59 >> 0x1f) & 0xfffffffc00000000 | uVar59 << 2;
        iVar76 = (int)uVar59;
        iVar39 = iVar39 + (uint)pbVar69[lVar43] * *(int *)((long)piVar68 + uVar52);
        if (iVar76 + 1 < iVar22) {
          iVar39 = iVar39 + (uint)pbVar69[lVar43 * 2] * *(int *)((long)piVar68 + uVar52 + 4);
          if (iVar76 + 2 < iVar22) {
            iVar39 = iVar39 + (uint)pbVar69[lVar43 * 3] * *(int *)((long)piVar68 + uVar52 + 8);
            if (iVar76 + 3 < iVar22) {
              iVar39 = iVar39 + (uint)pbVar69[lVar43 * 4] * *(int *)((long)piVar68 + uVar52 + 0xc);
              if (iVar76 + 4 < iVar22) {
                iVar39 = iVar39 + (uint)pbVar69[lVar43 * 5] *
                                  *(int *)((long)piVar68 + uVar52 + 0x10);
                if (iVar76 + 5 < iVar22) {
                  iVar39 = iVar39 + (uint)pbVar69[lVar43 * 6] *
                                    *(int *)((long)piVar68 + uVar52 + 0x14);
                  if (iVar76 + 6 < iVar22) {
                    iVar39 = iVar39 + (uint)pbVar69[lVar43 * 7] *
                                      *(int *)((long)piVar68 + uVar52 + 0x18);
                    if (iVar76 + 7 < iVar22) {
                      iVar39 = iVar39 + (uint)pbVar69[lVar43 * 8] *
                                        *(int *)((long)piVar68 + uVar52 + 0x1c);
                      if (iVar76 + 8 < iVar22) {
                        iVar39 = iVar39 + (uint)pbVar69[lVar43 * 9] *
                                          *(int *)((long)piVar68 + uVar52 + 0x20);
                        if (iVar76 + 9 < iVar22) {
                          iVar39 = iVar39 + (uint)pbVar69[lVar43 * 10] *
                                            *(int *)((long)piVar68 + uVar52 + 0x24);
                          if (iVar76 + 10 < iVar22) {
                            iVar39 = iVar39 + (uint)pbVar69[lVar43 * 0xb] *
                                              *(int *)((long)piVar68 + uVar52 + 0x28);
                            if (iVar76 + 0xb < iVar22) {
                              iVar39 = iVar39 + (uint)pbVar69[lVar43 * 0xc] *
                                                *(int *)((long)piVar68 + uVar52 + 0x2c);
                              if (iVar76 + 0xc < iVar22) {
                                iVar39 = iVar39 + (uint)pbVar69[lVar43 * 0xd] *
                                                  *(int *)((long)piVar68 + uVar52 + 0x30);
                                if (iVar76 + 0xd < iVar22) {
                                  iVar39 = iVar39 + (uint)pbVar69[lVar43 * 0xe] *
                                                    *(int *)((long)piVar68 + uVar52 + 0x34);
                                  if (iVar76 + 0xe < iVar22) {
                                    iVar39 = iVar39 + (uint)pbVar69[lVar43 * 0xf] *
                                                      *(int *)((long)piVar68 + uVar52 + 0x38);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001bb0f0:
      *(int *)((long)param_3 + lVar46 * 4 + lVar43 * -4) = iVar39;
      lVar46 = lVar46 + 1;
      pbVar49 = pbVar49 + 1;
      pbVar57 = pbVar57 + 1;
      pbVar55 = pbVar55 + 1;
      pbVar58 = pbVar58 + 1;
      pbVar53 = pbVar53 + 1;
      pbVar60 = pbVar60 + 1;
    } while (lVar46 != lVar48 + lVar43 + 1 + (ulong)(uint)((param_4 + -1) - iVar44));
  }
  return;
}


==================================================================

### FUNC 001bb28c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb290 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb294 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb298 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb29c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2a0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2a4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2a8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2ac (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2b0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2b4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2b8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2bc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2c0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2c4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2c8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2cc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2d0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2d4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2d8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2dc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2e0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2e4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2e8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2ec (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2f0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2f4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2f8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb2fc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb300 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb304 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb308 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb30c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb310 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb314 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb318 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb31c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb320 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb324 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb328 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb32c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb330 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb334 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb338 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb33c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb340 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb344 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb348 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001bb34c (80 bytes) name=FUN_001bb34c

void FUN_001bb34c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3f10;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb39c (80 bytes) name=FUN_001bb39c

void FUN_001bb39c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3ee0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb3ec (80 bytes) name=FUN_001bb3ec

void FUN_001bb3ec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3eb0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb43c (80 bytes) name=FUN_001bb43c

void FUN_001bb43c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e80;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb48c (80 bytes) name=FUN_001bb48c

void FUN_001bb48c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e50;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb4dc (80 bytes) name=FUN_001bb4dc

void FUN_001bb4dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e20;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb52c (80 bytes) name=FUN_001bb52c

void FUN_001bb52c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3df0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb57c (80 bytes) name=FUN_001bb57c

void FUN_001bb57c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3dc0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb5cc (80 bytes) name=FUN_001bb5cc

void FUN_001bb5cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d90;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb61c (80 bytes) name=FUN_001bb61c

void FUN_001bb61c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d60;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb66c (80 bytes) name=FUN_001bb66c

void FUN_001bb66c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d30;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb6bc (80 bytes) name=FUN_001bb6bc

void FUN_001bb6bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d00;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb70c (80 bytes) name=FUN_001bb70c

void FUN_001bb70c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3cd0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
    return;
  }
  return;
}


==================================================================

### FUNC 001bb75c (812 bytes) name=FUN_001bb75c

void FUN_001bb75c(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  undefined2 uVar7;
  long lVar8;
  undefined2 *puVar9;
  undefined2 uVar10;
  undefined2 uVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float __x;
  float __x_00;
  float __x_01;
  int local_1c;
  
  lVar12 = *(long *)(param_1 + 0x18);
  fVar18 = *(float *)(param_1 + 0x60);
  lVar14 = *(long *)(param_1 + 0x30);
  lVar15 = *(long *)(param_1 + 0x48);
  param_6 = param_6 * param_7;
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar12 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    local_1c = param_5;
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar15 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar12 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar12 + lVar5)) * 2;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      uVar10 = 0x8000;
      uVar11 = 0x7fff;
      if (0 < iVar3) {
        iVar13 = 0;
        lVar5 = 0;
        puVar9 = param_3;
        do {
          fVar16 = fVar18;
          __x_01 = fVar18;
          __x_00 = fVar18;
          __x = fVar18;
          if (0 < iVar4) {
            lVar6 = 0;
            do {
              lVar8 = *(long *)(lVar15 + lVar6 * 8);
              fVar17 = *(float *)(lVar14 + lVar6 * 4);
              lVar6 = lVar6 + 1;
              lVar2 = lVar8 + lVar5;
              fVar16 = fVar16 + fVar17 * (float)(int)*(short *)(lVar8 + lVar5);
              __x = __x + fVar17 * (float)(int)*(short *)(lVar2 + 2);
              __x_00 = __x_00 + fVar17 * (float)(int)*(short *)(lVar2 + 4);
              __x_01 = __x_01 + fVar17 * (float)(int)*(short *)(lVar2 + 6);
            } while ((int)lVar6 < iVar4);
          }
          lVar6 = lrintf(fVar16);
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = uVar11, (int)lVar6 < 1)) {
            uVar7 = uVar10;
          }
          *puVar9 = uVar7;
          lVar6 = lrintf(__x);
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = uVar11, (int)lVar6 < 1)) {
            uVar7 = uVar10;
          }
          puVar9[1] = uVar7;
          lVar6 = lrintf(__x_00);
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar6 < 1)) {
            uVar7 = 0x8000;
          }
          puVar9[2] = uVar7;
          lVar6 = lrintf(__x_01);
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar6 < 1)) {
            uVar7 = 0x8000;
          }
          iVar13 = iVar13 + 4;
          puVar9[3] = uVar7;
          lVar5 = lVar5 + 8;
          puVar9 = puVar9 + 4;
        } while (iVar13 < iVar3);
      }
      lVar5 = (long)iVar1 << 1;
      if (iVar1 < param_6) {
        do {
          lVar6 = 0;
          fVar16 = fVar18;
          if (0 < iVar4) {
            do {
              lVar2 = lVar6 * 8;
              lVar8 = lVar6 * 4;
              lVar6 = lVar6 + 1;
              fVar16 = fVar16 + (float)(int)*(short *)(*(long *)(lVar15 + lVar2) + lVar5) *
                                *(float *)(lVar14 + lVar8);
            } while ((int)lVar6 < iVar4);
          }
          puVar9 = (undefined2 *)((long)param_3 + lVar5);
          lVar6 = lrintf(fVar16);
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = uVar11, (int)lVar6 < 1)) {
            uVar7 = uVar10;
          }
          lVar5 = lVar5 + 2;
          *puVar9 = uVar7;
        } while (lVar5 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 2);
      }
      local_1c = local_1c + -1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (local_1c != 0);
  }
  return;
}


==================================================================

### FUNC 001bba88 (772 bytes) name=FUN_001bba88

void FUN_001bba88(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  undefined2 uVar7;
  long lVar8;
  undefined2 uVar9;
  undefined2 uVar10;
  long lVar11;
  undefined2 *puVar12;
  long lVar13;
  long lVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float __x;
  float __x_00;
  float __x_01;
  int local_1c;
  
  lVar11 = *(long *)(param_1 + 0x18);
  fVar17 = *(float *)(param_1 + 0x60);
  lVar14 = *(long *)(param_1 + 0x30);
  lVar13 = *(long *)(param_1 + 0x48);
  param_6 = param_6 * param_7;
  iVar3 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    iVar2 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar2 < 1) {
      iVar1 = 0;
    }
    local_1c = param_5;
    do {
      lVar4 = 0;
      if (0 < iVar3) {
        do {
          *(long *)(lVar13 + lVar4) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar4 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar4));
          lVar4 = lVar4 + 8;
        } while (lVar4 != ((ulong)(iVar3 - 1) + 1) * 8);
      }
      uVar9 = 0x8000;
      uVar10 = 0x7fff;
      if (0 < iVar2) {
        lVar4 = 0;
        puVar12 = (undefined2 *)(param_3 + 6);
        do {
          fVar15 = fVar17;
          __x_01 = fVar17;
          __x_00 = fVar17;
          __x = fVar17;
          if (0 < iVar3) {
            lVar5 = 0;
            do {
              lVar8 = *(long *)(lVar13 + lVar5 * 8);
              fVar16 = *(float *)(lVar14 + lVar5 * 4);
              lVar5 = lVar5 + 1;
              lVar6 = lVar8 + lVar4;
              fVar15 = fVar15 + fVar16 * (float)*(byte *)(lVar8 + lVar4);
              __x = __x + fVar16 * (float)*(byte *)(lVar6 + 1);
              __x_00 = __x_00 + fVar16 * (float)*(byte *)(lVar6 + 2);
              __x_01 = __x_01 + fVar16 * (float)*(byte *)(lVar6 + 3);
            } while ((int)lVar5 < iVar3);
          }
          lVar5 = lrintf(fVar15);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar10, (int)lVar5 < 1)) {
            uVar7 = uVar9;
          }
          puVar12[-3] = uVar7;
          lVar5 = lrintf(__x);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar10, (int)lVar5 < 1)) {
            uVar7 = uVar9;
          }
          puVar12[-2] = uVar7;
          lVar5 = lrintf(__x_00);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar5 < 1)) {
            uVar7 = 0x8000;
          }
          puVar12[-1] = uVar7;
          lVar5 = lrintf(__x_01);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar5 < 1)) {
            uVar7 = 0x8000;
          }
          lVar4 = lVar4 + 4;
          *puVar12 = uVar7;
          puVar12 = puVar12 + 4;
        } while ((int)lVar4 < iVar2);
      }
      lVar4 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          lVar5 = 0;
          fVar15 = fVar17;
          if (0 < iVar3) {
            do {
              lVar6 = lVar5 * 8;
              lVar8 = lVar5 * 4;
              lVar5 = lVar5 + 1;
              fVar15 = fVar15 + (float)*(byte *)(*(long *)(lVar13 + lVar6) + lVar4) *
                                *(float *)(lVar14 + lVar8);
            } while ((int)lVar5 < iVar3);
          }
          lVar6 = lrintf(fVar15);
          lVar5 = lVar4 * 2;
          uVar7 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar7 = uVar10, (int)lVar6 < 1)) {
            uVar7 = uVar9;
          }
          lVar4 = lVar4 + 1;
          *(undefined2 *)(param_3 + lVar5) = uVar7;
        } while (lVar4 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      local_1c = local_1c + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (local_1c != 0);
  }
  return;
}


==================================================================

### FUNC 001bbd8c (748 bytes) name=FUN_001bbd8c

void FUN_001bbd8c(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined2 *puVar10;
  int iVar11;
  long lVar12;
  long lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float __x;
  float __x_00;
  float __x_01;
  int local_1c;
  
  lVar9 = *(long *)(param_1 + 0x18);
  fVar16 = *(float *)(param_1 + 0x60);
  lVar13 = *(long *)(param_1 + 0x30);
  lVar12 = *(long *)(param_1 + 0x48);
  param_6 = param_6 * param_7;
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar9 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    local_1c = param_5;
    do {
      lVar6 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar12 + lVar6) =
               *(long *)(param_2 + (long)*(int *)(lVar9 + lVar6 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar9 + lVar6)) * 2;
          lVar6 = lVar6 + 8;
        } while (lVar6 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        iVar11 = 0;
        lVar6 = 0;
        puVar10 = param_3;
        do {
          fVar14 = fVar16;
          __x_01 = fVar16;
          __x_00 = fVar16;
          __x = fVar16;
          if (0 < iVar4) {
            lVar7 = 0;
            do {
              lVar8 = *(long *)(lVar12 + lVar7 * 8);
              fVar15 = *(float *)(lVar13 + lVar7 * 4);
              lVar7 = lVar7 + 1;
              lVar2 = lVar8 + lVar6;
              fVar14 = fVar14 + fVar15 * (float)*(ushort *)(lVar8 + lVar6);
              __x = __x + fVar15 * (float)*(ushort *)(lVar2 + 2);
              __x_00 = __x_00 + fVar15 * (float)*(ushort *)(lVar2 + 4);
              __x_01 = __x_01 + fVar15 * (float)*(ushort *)(lVar2 + 6);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar14);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar10 = (short)uVar5;
          lVar7 = lrintf(__x);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[1] = (short)uVar5;
          lVar7 = lrintf(__x_00);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[2] = (short)uVar5;
          lVar7 = lrintf(__x_01);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[3] = (short)uVar5;
          iVar11 = iVar11 + 4;
          lVar6 = lVar6 + 8;
          puVar10 = puVar10 + 4;
        } while (iVar11 < iVar3);
      }
      lVar6 = (long)iVar1 << 1;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar14 = fVar16;
          if (0 < iVar4) {
            do {
              lVar2 = lVar7 * 8;
              lVar8 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar14 = fVar14 + (float)*(ushort *)(*(long *)(lVar12 + lVar2) + lVar6) *
                                *(float *)(lVar13 + lVar8);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar14);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *(short *)((long)param_3 + lVar6) = (short)uVar5;
          lVar6 = lVar6 + 2;
        } while (lVar6 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 2);
      }
      param_2 = param_2 + 8;
      local_1c = local_1c + -1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
    } while (local_1c != 0);
  }
  return;
}


==================================================================

### FUNC 001bc078 (720 bytes) name=FUN_001bc078

void FUN_001bc078(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined2 *puVar10;
  long lVar11;
  long lVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float __x;
  float __x_00;
  float __x_01;
  
  lVar9 = *(long *)(param_1 + 0x18);
  fVar15 = *(float *)(param_1 + 0x60);
  lVar12 = *(long *)(param_1 + 0x30);
  lVar11 = *(long *)(param_1 + 0x48);
  param_6 = param_6 * param_7;
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar9 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar6 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar11 + lVar6) =
               *(long *)(param_2 + (long)*(int *)(lVar9 + lVar6 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar9 + lVar6));
          lVar6 = lVar6 + 8;
        } while (lVar6 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar6 = 0;
        puVar10 = (undefined2 *)(param_3 + 6);
        do {
          fVar13 = fVar15;
          __x_01 = fVar15;
          __x_00 = fVar15;
          __x = fVar15;
          if (0 < iVar4) {
            lVar7 = 0;
            do {
              lVar8 = *(long *)(lVar11 + lVar7 * 8);
              fVar14 = *(float *)(lVar12 + lVar7 * 4);
              lVar7 = lVar7 + 1;
              lVar2 = lVar8 + lVar6;
              fVar13 = fVar13 + fVar14 * (float)*(byte *)(lVar8 + lVar6);
              __x = __x + fVar14 * (float)*(byte *)(lVar2 + 1);
              __x_00 = __x_00 + fVar14 * (float)*(byte *)(lVar2 + 2);
              __x_01 = __x_01 + fVar14 * (float)*(byte *)(lVar2 + 3);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar13);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[-3] = (short)uVar5;
          lVar7 = lrintf(__x);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[-2] = (short)uVar5;
          lVar7 = lrintf(__x_00);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[-1] = (short)uVar5;
          lVar7 = lrintf(__x_01);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar6 = lVar6 + 4;
          *puVar10 = (short)uVar5;
          puVar10 = puVar10 + 4;
        } while ((int)lVar6 < iVar3);
      }
      lVar6 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar13 = fVar15;
          if (0 < iVar4) {
            do {
              lVar2 = lVar7 * 8;
              lVar8 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar13 = fVar13 + (float)*(byte *)(*(long *)(lVar11 + lVar2) + lVar6) *
                                *(float *)(lVar12 + lVar8);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar13);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *(short *)(param_3 + lVar6 * 2) = (short)uVar5;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_2 = param_2 + 8;
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001bc348 (716 bytes) name=FUN_001bc348

void FUN_001bc348(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float __x;
  float __x_00;
  float __x_01;
  
  lVar9 = *(long *)(param_1 + 0x18);
  fVar15 = *(float *)(param_1 + 0x60);
  lVar12 = *(long *)(param_1 + 0x30);
  lVar11 = *(long *)(param_1 + 0x48);
  param_6 = param_6 * param_7;
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar9 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar6 = 0;
      if (0 < iVar4) {
        do {
          *(long *)(lVar11 + lVar6) =
               *(long *)(param_2 + (long)*(int *)(lVar9 + lVar6 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar9 + lVar6));
          lVar6 = lVar6 + 8;
        } while (lVar6 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar6 = 0;
        puVar10 = param_3;
        do {
          fVar13 = fVar15;
          __x_01 = fVar15;
          __x_00 = fVar15;
          __x = fVar15;
          if (0 < iVar4) {
            lVar7 = 0;
            do {
              lVar8 = *(long *)(lVar11 + lVar7 * 8);
              fVar14 = *(float *)(lVar12 + lVar7 * 4);
              lVar7 = lVar7 + 1;
              lVar2 = lVar8 + lVar6;
              fVar13 = fVar13 + fVar14 * (float)*(byte *)(lVar8 + lVar6);
              __x = __x + fVar14 * (float)*(byte *)(lVar2 + 1);
              __x_00 = __x_00 + fVar14 * (float)*(byte *)(lVar2 + 2);
              __x_01 = __x_01 + fVar14 * (float)*(byte *)(lVar2 + 3);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar13);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar10 = (char)uVar5;
          lVar7 = lrintf(__x);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[1] = (char)uVar5;
          lVar7 = lrintf(__x_00);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar10[2] = (char)uVar5;
          lVar7 = lrintf(__x_01);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar6 = lVar6 + 4;
          puVar10[3] = (char)uVar5;
          puVar10 = puVar10 + 4;
        } while ((int)lVar6 < iVar3);
      }
      lVar6 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          lVar7 = 0;
          fVar13 = fVar15;
          if (0 < iVar4) {
            do {
              lVar2 = lVar7 * 8;
              lVar8 = lVar7 * 4;
              lVar7 = lVar7 + 1;
              fVar13 = fVar13 + (float)*(byte *)(*(long *)(lVar11 + lVar2) + lVar6) *
                                *(float *)(lVar12 + lVar8);
            } while ((int)lVar7 < iVar4);
          }
          lVar7 = lrintf(fVar13);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          param_3[lVar6] = (char)uVar5;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_2 = param_2 + 8;
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001bc614 (1460 bytes) name=FUN_001bc614

void FUN_001bc614(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  float *pfVar2;
  long *plVar3;
  long lVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  long lVar10;
  long *plVar11;
  long *plVar12;
  long *plVar13;
  long lVar14;
  float *pfVar15;
  undefined2 *puVar16;
  long lVar17;
  long *plVar18;
  long *plVar19;
  long lVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  
  iVar5 = *(int *)(param_1 + 8) / 2;
  fVar23 = *(float *)(param_1 + 0x74);
  pfVar2 = (float *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 4);
  plVar19 = (long *)(param_2 + (long)iVar5 * 8);
  if ((*(uint *)(param_1 + 0x78) & 1) == 0) {
    if (param_5 != 0) {
      plVar18 = plVar19 + -1;
      plVar3 = plVar19 + (param_5 - 1);
      iVar6 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar6 < 1) {
        iVar1 = 0;
      }
      lVar14 = (long)iVar1;
      lVar20 = NEON_shl(lVar14,2);
      do {
        plVar19 = plVar19 + 1;
        if (0 < iVar6) {
          lVar17 = 0;
          puVar16 = param_3;
          do {
            fVar22 = fVar23;
            fVar26 = fVar23;
            fVar25 = fVar23;
            fVar24 = fVar23;
            if (0 < iVar5) {
              lVar9 = lVar17 * 4;
              plVar11 = plVar18;
              plVar12 = plVar19;
              pfVar15 = pfVar2;
              do {
                pfVar15 = pfVar15 + 1;
                plVar13 = plVar11 + -1;
                lVar10 = *plVar11 + lVar9;
                lVar4 = *plVar12 + lVar9;
                fVar21 = *pfVar15;
                fVar22 = fVar22 + fVar21 * (*(float *)(*plVar12 + lVar9) -
                                           *(float *)(*plVar11 + lVar9));
                fVar24 = fVar24 + fVar21 * (*(float *)(lVar4 + 4) - *(float *)(lVar10 + 4));
                fVar25 = fVar25 + fVar21 * (*(float *)(lVar4 + 8) - *(float *)(lVar10 + 8));
                fVar26 = fVar26 + fVar21 * (*(float *)(lVar4 + 0xc) - *(float *)(lVar10 + 0xc));
                plVar11 = plVar13;
                plVar12 = plVar12 + 1;
              } while (plVar18 + (-1 - (ulong)(iVar5 - 1U)) != plVar13);
            }
            lVar9 = lrintf(fVar22);
            uVar7 = (uint)lVar9;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            *puVar16 = (short)uVar7;
            lVar9 = lrintf(fVar24);
            uVar7 = (uint)lVar9;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar16[1] = (short)uVar7;
            lVar9 = lrintf(fVar25);
            uVar7 = (uint)lVar9;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar16[2] = (short)uVar7;
            lVar9 = lrintf(fVar26);
            uVar7 = (uint)lVar9;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar16[3] = (short)uVar7;
            lVar17 = lVar17 + 4;
            puVar16 = puVar16 + 4;
          } while ((int)lVar17 < iVar6);
        }
        if (iVar1 < param_6) {
          lVar9 = lVar20;
          lVar17 = lVar14;
          do {
            plVar11 = plVar19;
            plVar12 = plVar18;
            fVar22 = fVar23;
            pfVar15 = pfVar2;
            if (0 < iVar5) {
              do {
                plVar13 = plVar11 + 1;
                fVar22 = fVar22 + (*(float *)(*plVar11 + lVar9) - *(float *)(*plVar12 + lVar9)) *
                                  pfVar15[1];
                plVar11 = plVar13;
                plVar12 = plVar12 + -1;
                pfVar15 = pfVar15 + 1;
              } while (plVar18 + (ulong)(iVar5 - 1U) + 3 != plVar13);
            }
            lVar10 = lrintf(fVar22);
            uVar7 = (uint)lVar10;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            param_3[lVar17] = (short)uVar7;
            lVar17 = lVar17 + 1;
            lVar9 = lVar9 + 4;
          } while (lVar17 != lVar14 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar18 = plVar18 + 1;
        param_3 = (undefined2 *)((long)param_3 + (long)param_4);
      } while (plVar18 != plVar3);
    }
  }
  else if (param_5 != 0) {
    plVar18 = plVar19 + -1;
    plVar3 = plVar19 + (param_5 - 1);
    uVar7 = param_6 - 4U >> 2;
    iVar1 = (uVar7 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    lVar14 = (long)iVar1;
    do {
      plVar19 = plVar19 + 1;
      if (0 < param_6 + -3) {
        lVar20 = 0;
        puVar16 = param_3 + 3;
        do {
          fVar26 = *pfVar2;
          lVar17 = plVar18[1] + lVar20;
          fVar22 = fVar23 + fVar26 * *(float *)(plVar18[1] + lVar20);
          fVar24 = fVar23 + fVar26 * *(float *)(lVar17 + 4);
          fVar25 = fVar23 + fVar26 * *(float *)(lVar17 + 8);
          fVar26 = fVar23 + fVar26 * *(float *)(lVar17 + 0xc);
          plVar11 = plVar18;
          plVar12 = plVar19;
          pfVar15 = pfVar2;
          if (0 < iVar5) {
            do {
              plVar13 = plVar11 + -1;
              lVar17 = *plVar11 + lVar20;
              lVar9 = *plVar12 + lVar20;
              fVar21 = pfVar15[1];
              fVar22 = fVar22 + fVar21 * (*(float *)(*plVar12 + lVar20) +
                                         *(float *)(*plVar11 + lVar20));
              fVar24 = fVar24 + fVar21 * (*(float *)(lVar9 + 4) + *(float *)(lVar17 + 4));
              fVar25 = fVar25 + fVar21 * (*(float *)(lVar9 + 8) + *(float *)(lVar17 + 8));
              fVar26 = fVar26 + fVar21 * (*(float *)(lVar9 + 0xc) + *(float *)(lVar17 + 0xc));
              plVar11 = plVar13;
              plVar12 = plVar12 + 1;
              pfVar15 = pfVar15 + 1;
            } while (plVar18 + (-1 - (ulong)(iVar5 - 1)) != plVar13);
          }
          lVar17 = lrintf(fVar22);
          uVar8 = (uint)lVar17;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar16[-3] = (short)uVar8;
          lVar17 = lrintf(fVar24);
          uVar8 = (uint)lVar17;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar16[-2] = (short)uVar8;
          lVar17 = lrintf(fVar25);
          uVar8 = (uint)lVar17;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar16[-1] = (short)uVar8;
          lVar17 = lrintf(fVar26);
          uVar8 = (uint)lVar17;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar16 = (short)uVar8;
          lVar20 = lVar20 + 0x10;
          puVar16 = puVar16 + 4;
        } while (lVar20 != ((ulong)uVar7 + 1) * 0x10);
      }
      if (iVar1 < param_6) {
        lVar20 = lVar14 << 2;
        puVar16 = param_3 + lVar14;
        do {
          fVar22 = fVar23 + *(float *)(plVar18[1] + lVar20) * *pfVar2;
          plVar11 = plVar19;
          plVar12 = plVar18;
          pfVar15 = pfVar2;
          if (0 < iVar5) {
            do {
              plVar13 = plVar11 + 1;
              fVar22 = fVar22 + (*(float *)(*plVar11 + lVar20) + *(float *)(*plVar12 + lVar20)) *
                                pfVar15[1];
              plVar11 = plVar13;
              plVar12 = plVar12 + -1;
              pfVar15 = pfVar15 + 1;
            } while (plVar18 + (ulong)(iVar5 - 1) + 3 != plVar13);
          }
          lVar17 = lrintf(fVar22);
          uVar8 = (uint)lVar17;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar20 = lVar20 + 4;
          *puVar16 = (short)uVar8;
          puVar16 = puVar16 + 1;
        } while (lVar20 != (lVar14 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4);
      }
      plVar18 = plVar18 + 1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
    } while (plVar18 != plVar3);
  }
  return;
}


==================================================================

### FUNC 001bcbc8 (668 bytes) name=FUN_001bcbc8

void FUN_001bcbc8(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  float *pfVar4;
  uint uVar5;
  long lVar6;
  long *plVar7;
  long *plVar8;
  long *plVar9;
  float *pfVar10;
  long *plVar11;
  undefined2 *puVar12;
  long lVar13;
  long lVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float __x;
  float __x_00;
  
  pfVar10 = *(float **)(param_1 + 0x20);
  fVar17 = *(float *)(param_1 + 0x74);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    lVar13 = (long)iVar2;
    plVar9 = (long *)(param_2 + 8);
    plVar11 = (long *)(param_2 + ((ulong)(iVar1 - 2) + 2) * 8);
    do {
      if (0 < param_6 + -3) {
        lVar14 = 0;
        puVar12 = (undefined2 *)(param_3 + 6);
        do {
          fVar18 = *pfVar10;
          lVar6 = plVar9[-1] + lVar14;
          fVar15 = fVar17 + fVar18 * *(float *)(plVar9[-1] + lVar14);
          __x_00 = fVar17 + fVar18 * *(float *)(lVar6 + 4);
          __x = fVar17 + fVar18 * *(float *)(lVar6 + 8);
          fVar18 = fVar17 + fVar18 * *(float *)(lVar6 + 0xc);
          plVar7 = plVar9;
          pfVar4 = pfVar10;
          if (1 < iVar1) {
            do {
              plVar8 = plVar7 + 1;
              fVar16 = pfVar4[1];
              lVar6 = *plVar7 + lVar14;
              fVar15 = fVar15 + fVar16 * *(float *)(*plVar7 + lVar14);
              __x_00 = __x_00 + fVar16 * *(float *)(lVar6 + 4);
              __x = __x + fVar16 * *(float *)(lVar6 + 8);
              fVar18 = fVar18 + fVar16 * *(float *)(lVar6 + 0xc);
              plVar7 = plVar8;
              pfVar4 = pfVar4 + 1;
            } while (plVar11 != plVar8);
          }
          lVar6 = lrintf(fVar15);
          uVar5 = (uint)lVar6;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar12[-3] = (short)uVar5;
          lVar6 = lrintf(__x_00);
          uVar5 = (uint)lVar6;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar12[-2] = (short)uVar5;
          lVar6 = lrintf(__x);
          uVar5 = (uint)lVar6;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar12[-1] = (short)uVar5;
          lVar6 = lrintf(fVar18);
          uVar5 = (uint)lVar6;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar14 = lVar14 + 0x10;
          *puVar12 = (short)uVar5;
          puVar12 = puVar12 + 4;
        } while (lVar14 != ((ulong)uVar3 + 1) * 0x10);
      }
      lVar14 = lVar13 << 2;
      puVar12 = (undefined2 *)(param_3 + lVar13 * 2);
      if (iVar2 < param_6) {
        do {
          fVar15 = fVar17 + *(float *)(plVar9[-1] + lVar14) * *pfVar10;
          plVar7 = plVar9;
          pfVar4 = pfVar10;
          if (1 < iVar1) {
            do {
              plVar8 = plVar7 + 1;
              fVar15 = fVar15 + *(float *)(*plVar7 + lVar14) * pfVar4[1];
              plVar7 = plVar8;
              pfVar4 = pfVar4 + 1;
            } while (plVar11 != plVar8);
          }
          lVar6 = lrintf(fVar15);
          uVar5 = (uint)lVar6;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar14 = lVar14 + 4;
          *puVar12 = (short)uVar5;
          puVar12 = puVar12 + 1;
        } while (lVar14 != (lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 4);
      }
      plVar9 = plVar9 + 1;
      plVar11 = plVar11 + 1;
      param_3 = param_3 + param_4;
    } while (plVar9 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001bce64 (1428 bytes) name=FUN_001bce64

void FUN_001bce64(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  float *pfVar2;
  long *plVar3;
  long lVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  long lVar10;
  long *plVar11;
  long *plVar12;
  long *plVar13;
  long lVar14;
  float *pfVar15;
  undefined1 *puVar16;
  long lVar17;
  long *plVar18;
  long *plVar19;
  long lVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  
  iVar5 = *(int *)(param_1 + 8) / 2;
  fVar23 = *(float *)(param_1 + 0x74);
  pfVar2 = (float *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 4);
  plVar19 = (long *)(param_2 + (long)iVar5 * 8);
  if ((*(uint *)(param_1 + 0x78) & 1) == 0) {
    if (param_5 != 0) {
      plVar18 = plVar19 + -1;
      iVar6 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      plVar3 = plVar19 + (param_5 - 1);
      if (iVar6 < 1) {
        iVar1 = 0;
      }
      lVar14 = (long)iVar1;
      lVar20 = NEON_shl(lVar14,2);
      do {
        plVar19 = plVar19 + 1;
        if (0 < iVar6) {
          lVar17 = 0;
          puVar16 = param_3;
          do {
            fVar22 = fVar23;
            fVar26 = fVar23;
            fVar25 = fVar23;
            fVar24 = fVar23;
            if (0 < iVar5) {
              lVar9 = lVar17 * 4;
              plVar11 = plVar18;
              plVar12 = plVar19;
              pfVar15 = pfVar2;
              do {
                pfVar15 = pfVar15 + 1;
                plVar13 = plVar11 + -1;
                lVar10 = *plVar11 + lVar9;
                lVar4 = *plVar12 + lVar9;
                fVar21 = *pfVar15;
                fVar22 = fVar22 + fVar21 * (*(float *)(*plVar12 + lVar9) -
                                           *(float *)(*plVar11 + lVar9));
                fVar24 = fVar24 + fVar21 * (*(float *)(lVar4 + 4) - *(float *)(lVar10 + 4));
                fVar25 = fVar25 + fVar21 * (*(float *)(lVar4 + 8) - *(float *)(lVar10 + 8));
                fVar26 = fVar26 + fVar21 * (*(float *)(lVar4 + 0xc) - *(float *)(lVar10 + 0xc));
                plVar11 = plVar13;
                plVar12 = plVar12 + 1;
              } while (plVar18 + (-1 - (ulong)(iVar5 - 1)) != plVar13);
            }
            lVar9 = lrintf(fVar22);
            uVar7 = (uint)lVar9;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            *puVar16 = (char)uVar7;
            lVar9 = lrintf(fVar24);
            uVar7 = (uint)lVar9;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar16[1] = (char)uVar7;
            lVar9 = lrintf(fVar25);
            uVar7 = (uint)lVar9;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar16[2] = (char)uVar7;
            lVar9 = lrintf(fVar26);
            uVar7 = (uint)lVar9;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            lVar17 = lVar17 + 4;
            puVar16[3] = (char)uVar7;
            puVar16 = puVar16 + 4;
          } while ((int)lVar17 < iVar6);
        }
        if (iVar1 < param_6) {
          lVar9 = lVar20;
          lVar17 = lVar14;
          do {
            plVar11 = plVar19;
            plVar12 = plVar18;
            fVar22 = fVar23;
            pfVar15 = pfVar2;
            if (0 < iVar5) {
              do {
                plVar13 = plVar11 + 1;
                fVar22 = fVar22 + (*(float *)(*plVar11 + lVar9) - *(float *)(*plVar12 + lVar9)) *
                                  pfVar15[1];
                plVar11 = plVar13;
                plVar12 = plVar12 + -1;
                pfVar15 = pfVar15 + 1;
              } while (plVar18 + (ulong)(iVar5 - 1) + 3 != plVar13);
            }
            lVar10 = lrintf(fVar22);
            uVar7 = (uint)lVar10;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            param_3[lVar17] = (char)uVar7;
            lVar17 = lVar17 + 1;
            lVar9 = lVar9 + 4;
          } while (lVar17 != lVar14 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar18 = plVar18 + 1;
        param_3 = param_3 + param_4;
      } while (plVar18 != plVar3);
    }
  }
  else if (param_5 != 0) {
    plVar18 = plVar19 + -1;
    plVar3 = plVar19 + (param_5 - 1);
    uVar7 = param_6 - 4U >> 2;
    iVar1 = (uVar7 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    lVar14 = (long)iVar1;
    lVar20 = NEON_shl(lVar14,2);
    do {
      plVar19 = plVar19 + 1;
      if (0 < param_6 + -3) {
        lVar17 = 0;
        puVar16 = param_3;
        do {
          fVar26 = *pfVar2;
          lVar9 = plVar18[1] + lVar17;
          fVar22 = fVar23 + fVar26 * *(float *)(plVar18[1] + lVar17);
          fVar24 = fVar23 + fVar26 * *(float *)(lVar9 + 4);
          fVar25 = fVar23 + fVar26 * *(float *)(lVar9 + 8);
          fVar26 = fVar23 + fVar26 * *(float *)(lVar9 + 0xc);
          plVar11 = plVar18;
          plVar12 = plVar19;
          pfVar15 = pfVar2;
          if (0 < iVar5) {
            do {
              plVar13 = plVar11 + -1;
              lVar9 = *plVar11 + lVar17;
              lVar10 = *plVar12 + lVar17;
              fVar21 = pfVar15[1];
              fVar22 = fVar22 + fVar21 * (*(float *)(*plVar12 + lVar17) +
                                         *(float *)(*plVar11 + lVar17));
              fVar24 = fVar24 + fVar21 * (*(float *)(lVar10 + 4) + *(float *)(lVar9 + 4));
              fVar25 = fVar25 + fVar21 * (*(float *)(lVar10 + 8) + *(float *)(lVar9 + 8));
              fVar26 = fVar26 + fVar21 * (*(float *)(lVar10 + 0xc) + *(float *)(lVar9 + 0xc));
              plVar11 = plVar13;
              plVar12 = plVar12 + 1;
              pfVar15 = pfVar15 + 1;
            } while (plVar18 + (-1 - (ulong)(iVar5 - 1)) != plVar13);
          }
          lVar9 = lrintf(fVar22);
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar16 = (char)uVar8;
          lVar9 = lrintf(fVar24);
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar16[1] = (char)uVar8;
          lVar9 = lrintf(fVar25);
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar16[2] = (char)uVar8;
          lVar9 = lrintf(fVar26);
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar17 = lVar17 + 0x10;
          puVar16[3] = (char)uVar8;
          puVar16 = puVar16 + 4;
        } while (lVar17 != ((ulong)uVar7 + 1) * 0x10);
      }
      if (iVar1 < param_6) {
        lVar17 = lVar20;
        puVar16 = param_3 + lVar14;
        do {
          fVar22 = fVar23 + *(float *)(plVar18[1] + lVar17) * *pfVar2;
          plVar11 = plVar19;
          plVar12 = plVar18;
          pfVar15 = pfVar2;
          if (0 < iVar5) {
            do {
              plVar13 = plVar11 + 1;
              fVar22 = fVar22 + (*(float *)(*plVar11 + lVar17) + *(float *)(*plVar12 + lVar17)) *
                                pfVar15[1];
              plVar11 = plVar13;
              plVar12 = plVar12 + -1;
              pfVar15 = pfVar15 + 1;
            } while (plVar18 + (ulong)(iVar5 - 1) + 3 != plVar13);
          }
          lVar9 = lrintf(fVar22);
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar17 = lVar17 + 4;
          *puVar16 = (char)uVar8;
          puVar16 = puVar16 + 1;
        } while (lVar17 != (lVar14 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 4);
      }
      plVar18 = plVar18 + 1;
      param_3 = param_3 + param_4;
    } while (plVar18 != plVar3);
  }
  return;
}


==================================================================

### FUNC 001bd3f8 (656 bytes) name=FUN_001bd3f8

void FUN_001bd3f8(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  float *pfVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  long *plVar8;
  long *plVar9;
  long *plVar10;
  float *pfVar11;
  long *plVar12;
  long lVar13;
  undefined1 *puVar14;
  float fVar15;
  long lVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float __x;
  float __x_00;
  
  pfVar11 = *(float **)(param_1 + 0x20);
  fVar18 = *(float *)(param_1 + 0x74);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    lVar6 = (long)iVar2;
    plVar10 = (long *)(param_2 + 8);
    plVar12 = (long *)(param_2 + ((ulong)(iVar1 - 2) + 2) * 8);
    lVar16 = NEON_shl(lVar6,2);
    do {
      if (0 < param_6 + -3) {
        lVar13 = 0;
        puVar14 = param_3;
        do {
          fVar19 = *pfVar11;
          lVar7 = plVar10[-1] + lVar13;
          fVar15 = fVar18 + fVar19 * *(float *)(plVar10[-1] + lVar13);
          __x_00 = fVar18 + fVar19 * *(float *)(lVar7 + 4);
          __x = fVar18 + fVar19 * *(float *)(lVar7 + 8);
          fVar19 = fVar18 + fVar19 * *(float *)(lVar7 + 0xc);
          plVar8 = plVar10;
          pfVar4 = pfVar11;
          if (1 < iVar1) {
            do {
              plVar9 = plVar8 + 1;
              fVar17 = pfVar4[1];
              lVar7 = *plVar8 + lVar13;
              fVar15 = fVar15 + fVar17 * *(float *)(*plVar8 + lVar13);
              __x_00 = __x_00 + fVar17 * *(float *)(lVar7 + 4);
              __x = __x + fVar17 * *(float *)(lVar7 + 8);
              fVar19 = fVar19 + fVar17 * *(float *)(lVar7 + 0xc);
              plVar8 = plVar9;
              pfVar4 = pfVar4 + 1;
            } while (plVar12 != plVar9);
          }
          lVar7 = lrintf(fVar15);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar14 = (char)uVar5;
          lVar7 = lrintf(__x_00);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar14[1] = (char)uVar5;
          lVar7 = lrintf(__x);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar14[2] = (char)uVar5;
          lVar7 = lrintf(fVar19);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar13 = lVar13 + 0x10;
          puVar14[3] = (char)uVar5;
          puVar14 = puVar14 + 4;
        } while (lVar13 != ((ulong)uVar3 + 1) * 0x10);
      }
      lVar13 = lVar16;
      puVar14 = param_3 + lVar6;
      if (iVar2 < param_6) {
        do {
          fVar15 = fVar18 + *(float *)(plVar10[-1] + lVar13) * *pfVar11;
          plVar8 = plVar10;
          pfVar4 = pfVar11;
          if (1 < iVar1) {
            do {
              plVar9 = plVar8 + 1;
              fVar15 = fVar15 + *(float *)(*plVar8 + lVar13) * pfVar4[1];
              plVar8 = plVar9;
              pfVar4 = pfVar4 + 1;
            } while (plVar12 != plVar9);
          }
          lVar7 = lrintf(fVar15);
          uVar5 = (uint)lVar7;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar13 = lVar13 + 4;
          *puVar14 = (char)uVar5;
          puVar14 = puVar14 + 1;
        } while (lVar13 != (lVar6 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 4);
      }
      plVar10 = plVar10 + 1;
      plVar12 = plVar12 + 1;
      param_3 = param_3 + param_4;
    } while (plVar10 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001bd688 (720 bytes) name=FUN_001bd688

void FUN_001bd688(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  float *pfVar4;
  long lVar5;
  long lVar6;
  long *plVar7;
  undefined2 uVar8;
  long *plVar9;
  undefined2 *puVar10;
  long *plVar11;
  float *pfVar12;
  undefined2 uVar13;
  undefined2 uVar14;
  long lVar15;
  long *plVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float __x;
  float __x_00;
  
  pfVar12 = *(float **)(param_1 + 0x20);
  fVar20 = *(float *)(param_1 + 0x74);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    plVar11 = (long *)(param_2 + 8);
    plVar16 = (long *)(param_2 + ((ulong)(iVar1 - 2) + 2) * 8);
    lVar5 = (long)iVar2;
    do {
      uVar13 = 0x8000;
      uVar14 = 0x7fff;
      if (0 < param_6 + -3) {
        lVar15 = 0;
        puVar10 = (undefined2 *)(param_3 + 6);
        do {
          fVar18 = *pfVar12;
          lVar6 = plVar11[-1] + lVar15;
          fVar17 = fVar20 + fVar18 * *(float *)(plVar11[-1] + lVar15);
          __x_00 = fVar20 + fVar18 * *(float *)(lVar6 + 4);
          __x = fVar20 + fVar18 * *(float *)(lVar6 + 8);
          fVar18 = fVar20 + fVar18 * *(float *)(lVar6 + 0xc);
          plVar7 = plVar11;
          pfVar4 = pfVar12;
          if (1 < iVar1) {
            do {
              plVar9 = plVar7 + 1;
              fVar19 = pfVar4[1];
              lVar6 = *plVar7 + lVar15;
              fVar17 = fVar17 + fVar19 * *(float *)(*plVar7 + lVar15);
              __x_00 = __x_00 + fVar19 * *(float *)(lVar6 + 4);
              __x = __x + fVar19 * *(float *)(lVar6 + 8);
              fVar18 = fVar18 + fVar19 * *(float *)(lVar6 + 0xc);
              plVar7 = plVar9;
              pfVar4 = pfVar4 + 1;
            } while (plVar16 != plVar9);
          }
          lVar6 = lrintf(fVar17);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = uVar14, (int)lVar6 < 1)) {
            uVar8 = uVar13;
          }
          puVar10[-3] = uVar8;
          lVar6 = lrintf(__x_00);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = uVar14, (int)lVar6 < 1)) {
            uVar8 = uVar13;
          }
          puVar10[-2] = uVar8;
          lVar6 = lrintf(__x);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar6 < 1)) {
            uVar8 = 0x8000;
          }
          puVar10[-1] = uVar8;
          lVar6 = lrintf(fVar18);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar6 < 1)) {
            uVar8 = 0x8000;
          }
          lVar15 = lVar15 + 0x10;
          *puVar10 = uVar8;
          puVar10 = puVar10 + 4;
        } while (lVar15 != ((ulong)uVar3 + 1) * 0x10);
      }
      lVar15 = lVar5 << 2;
      puVar10 = (undefined2 *)(param_3 + lVar5 * 2);
      if (iVar2 < param_6) {
        do {
          fVar17 = fVar20 + *(float *)(plVar11[-1] + lVar15) * *pfVar12;
          plVar7 = plVar11;
          pfVar4 = pfVar12;
          if (1 < iVar1) {
            do {
              plVar9 = plVar7 + 1;
              fVar17 = fVar17 + *(float *)(*plVar7 + lVar15) * pfVar4[1];
              plVar7 = plVar9;
              pfVar4 = pfVar4 + 1;
            } while (plVar16 != plVar9);
          }
          lVar6 = lrintf(fVar17);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = uVar14, (int)lVar6 < 1)) {
            uVar8 = uVar13;
          }
          lVar15 = lVar15 + 4;
          *puVar10 = uVar8;
          puVar10 = puVar10 + 1;
        } while (lVar15 != (lVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 4);
      }
      plVar11 = plVar11 + 1;
      plVar16 = plVar16 + 1;
      param_3 = param_3 + param_4;
    } while (plVar11 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001bd958 (1560 bytes) name=FUN_001bd958

void FUN_001bd958(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  double *pdVar2;
  long *plVar3;
  long lVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  ulong uVar8;
  long lVar9;
  double *pdVar10;
  long lVar11;
  double *pdVar12;
  undefined2 uVar13;
  long *plVar14;
  long *plVar15;
  long *plVar16;
  long lVar17;
  undefined2 *puVar18;
  long lVar19;
  long *plVar20;
  undefined2 uVar21;
  undefined2 uVar22;
  long lVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  long *plVar30;
  
  uVar5 = *(int *)(param_1 + 8) / 2;
  dVar26 = *(double *)(param_1 + 0x78);
  uVar8 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
  pdVar2 = (double *)(*(long *)(param_1 + 0x20) + uVar8);
  plVar30 = (long *)(param_2 + uVar8);
  if ((*(uint *)(param_1 + 0x80) & 1) == 0) {
    if (param_5 != 0) {
      iVar7 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar7 < 1) {
        iVar1 = 0;
      }
      lVar17 = (long)iVar1;
      plVar20 = plVar30 + -1;
      plVar3 = plVar30 + (param_5 - 1);
      lVar23 = NEON_shl(lVar17,3);
      do {
        plVar30 = plVar30 + 1;
        uVar21 = 0x8000;
        uVar22 = 0x7fff;
        if (0 < iVar7) {
          lVar19 = 0;
          puVar18 = param_3;
          do {
            dVar25 = dVar26;
            dVar27 = dVar26;
            dVar28 = dVar26;
            dVar29 = dVar26;
            if (0 < (int)uVar5) {
              lVar9 = lVar19 * 8;
              plVar14 = plVar30;
              plVar15 = plVar20;
              pdVar12 = pdVar2;
              do {
                pdVar12 = pdVar12 + 1;
                plVar16 = plVar14 + 1;
                lVar11 = *plVar14 + lVar9;
                lVar4 = *plVar15 + lVar9;
                dVar24 = *pdVar12;
                dVar25 = dVar25 + dVar24 * (*(double *)(*plVar14 + lVar9) -
                                           *(double *)(*plVar15 + lVar9));
                dVar27 = dVar27 + dVar24 * (*(double *)(lVar11 + 8) - *(double *)(lVar4 + 8));
                dVar28 = dVar28 + dVar24 * (*(double *)(lVar11 + 0x10) - *(double *)(lVar4 + 0x10));
                dVar29 = dVar29 + dVar24 * (*(double *)(lVar11 + 0x18) - *(double *)(lVar4 + 0x18));
                plVar14 = plVar16;
                plVar15 = plVar15 + -1;
              } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
            }
            lVar9 = lrint(dVar25);
            uVar13 = (short)lVar9;
            if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar22, (int)lVar9 < 1)) {
              uVar13 = uVar21;
            }
            *puVar18 = uVar13;
            lVar9 = lrint(dVar27);
            uVar13 = (short)lVar9;
            if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar22, (int)lVar9 < 1)) {
              uVar13 = uVar21;
            }
            puVar18[1] = uVar13;
            lVar9 = lrint(dVar28);
            uVar13 = (short)lVar9;
            if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar9 < 1)) {
              uVar13 = 0x8000;
            }
            puVar18[2] = uVar13;
            lVar9 = lrint(dVar29);
            uVar13 = (short)lVar9;
            if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar9 < 1)) {
              uVar13 = 0x8000;
            }
            lVar19 = lVar19 + 4;
            puVar18[3] = uVar13;
            puVar18 = puVar18 + 4;
          } while ((int)lVar19 < iVar7);
        }
        lVar9 = lVar23;
        lVar19 = lVar17;
        if (iVar1 < param_6) {
          do {
            dVar25 = dVar26;
            if (0 < (int)uVar5) {
              pdVar12 = pdVar2 + 1;
              plVar14 = plVar30;
              plVar15 = plVar20;
              do {
                pdVar10 = pdVar12 + 1;
                dVar25 = dVar25 + (*(double *)(*plVar14 + lVar9) - *(double *)(*plVar15 + lVar9)) *
                                  *pdVar12;
                pdVar12 = pdVar10;
                plVar14 = plVar14 + 1;
                plVar15 = plVar15 + -1;
              } while (pdVar10 != pdVar2 + (ulong)(uVar5 - 1) + 2);
            }
            puVar18 = param_3 + lVar19;
            lVar11 = lrint(dVar25);
            uVar13 = (short)lVar11;
            if ((0xffff < (int)lVar11 + 0x8000U) && (uVar13 = uVar22, (int)lVar11 < 1)) {
              uVar13 = uVar21;
            }
            lVar19 = lVar19 + 1;
            *puVar18 = uVar13;
            lVar9 = lVar9 + 8;
          } while (lVar19 != lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar20 = plVar20 + 1;
        param_3 = (undefined2 *)((long)param_3 + (long)param_4);
      } while (plVar20 != plVar3);
    }
  }
  else if (param_5 != 0) {
    uVar6 = param_6 - 4U >> 2;
    plVar20 = plVar30 + -1;
    plVar3 = plVar30 + (param_5 - 1);
    iVar1 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    lVar17 = (long)iVar1;
    do {
      plVar30 = plVar30 + 1;
      uVar21 = 0x8000;
      uVar22 = 0x7fff;
      if (0 < param_6 + -3) {
        lVar23 = 0;
        puVar18 = param_3 + 3;
        do {
          dVar27 = *pdVar2;
          lVar19 = plVar20[1] + lVar23;
          dVar25 = dVar26 + dVar27 * *(double *)(plVar20[1] + lVar23);
          dVar29 = dVar26 + dVar27 * *(double *)(lVar19 + 8);
          dVar28 = dVar26 + dVar27 * *(double *)(lVar19 + 0x10);
          dVar27 = dVar26 + dVar27 * *(double *)(lVar19 + 0x18);
          plVar14 = plVar30;
          plVar15 = plVar20;
          pdVar12 = pdVar2;
          if (0 < (int)uVar5) {
            do {
              plVar16 = plVar14 + 1;
              lVar19 = *plVar14 + lVar23;
              lVar9 = *plVar15 + lVar23;
              dVar24 = pdVar12[1];
              dVar25 = dVar25 + dVar24 * (*(double *)(*plVar14 + lVar23) +
                                         *(double *)(*plVar15 + lVar23));
              dVar29 = dVar29 + dVar24 * (*(double *)(lVar19 + 8) + *(double *)(lVar9 + 8));
              dVar28 = dVar28 + dVar24 * (*(double *)(lVar19 + 0x10) + *(double *)(lVar9 + 0x10));
              dVar27 = dVar27 + dVar24 * (*(double *)(lVar19 + 0x18) + *(double *)(lVar9 + 0x18));
              plVar14 = plVar16;
              plVar15 = plVar15 + -1;
              pdVar12 = pdVar12 + 1;
            } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
          }
          lVar19 = lrint(dVar25);
          uVar13 = (short)lVar19;
          if ((0xffff < (int)lVar19 + 0x8000U) && (uVar13 = uVar22, (int)lVar19 < 1)) {
            uVar13 = uVar21;
          }
          puVar18[-3] = uVar13;
          lVar19 = lrint(dVar29);
          uVar13 = (short)lVar19;
          if ((0xffff < (int)lVar19 + 0x8000U) && (uVar13 = uVar22, (int)lVar19 < 1)) {
            uVar13 = uVar21;
          }
          puVar18[-2] = uVar13;
          lVar19 = lrint(dVar28);
          uVar13 = (short)lVar19;
          if ((0xffff < (int)lVar19 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar19 < 1)) {
            uVar13 = 0x8000;
          }
          puVar18[-1] = uVar13;
          lVar19 = lrint(dVar27);
          uVar13 = (short)lVar19;
          if ((0xffff < (int)lVar19 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar19 < 1)) {
            uVar13 = 0x8000;
          }
          lVar23 = lVar23 + 0x20;
          *puVar18 = uVar13;
          puVar18 = puVar18 + 4;
        } while (lVar23 != ((ulong)uVar6 + 1) * 0x20);
      }
      lVar23 = lVar17 << 3;
      puVar18 = param_3 + lVar17;
      if (iVar1 < param_6) {
        do {
          dVar25 = dVar26 + *(double *)(plVar20[1] + lVar23) * *pdVar2;
          if (0 < (int)uVar5) {
            pdVar12 = pdVar2 + 1;
            plVar14 = plVar30;
            plVar15 = plVar20;
            do {
              pdVar10 = pdVar12 + 1;
              dVar25 = dVar25 + (*(double *)(*plVar14 + lVar23) + *(double *)(*plVar15 + lVar23)) *
                                *pdVar12;
              pdVar12 = pdVar10;
              plVar14 = plVar14 + 1;
              plVar15 = plVar15 + -1;
            } while (pdVar10 != pdVar2 + (ulong)(uVar5 - 1) + 2);
          }
          lVar19 = lrint(dVar25);
          uVar13 = (short)lVar19;
          if ((0xffff < (int)lVar19 + 0x8000U) && (uVar13 = uVar22, (int)lVar19 < 1)) {
            uVar13 = uVar21;
          }
          lVar23 = lVar23 + 8;
          *puVar18 = uVar13;
          puVar18 = puVar18 + 1;
        } while (lVar23 != (lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      plVar20 = plVar20 + 1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
    } while (plVar20 != plVar3);
  }
  return;
}


==================================================================

### FUNC 001bdf70 (748 bytes) name=FUN_001bdf70

void FUN_001bdf70(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  double *pdVar6;
  undefined2 uVar8;
  long *plVar9;
  long *plVar10;
  undefined2 *puVar11;
  long *plVar12;
  double *pdVar13;
  undefined2 uVar14;
  undefined2 uVar15;
  long lVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double __x;
  double __x_00;
  double *pdVar7;
  
  pdVar13 = *(double **)(param_1 + 0x20);
  dVar20 = *(double *)(param_1 + 0x78);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    plVar12 = (long *)(param_2 + 8);
    lVar4 = (long)iVar2;
    do {
      uVar14 = 0x8000;
      uVar15 = 0x7fff;
      if (0 < param_6 + -3) {
        lVar16 = 0;
        puVar11 = (undefined2 *)(param_3 + 6);
        do {
          dVar18 = *pdVar13;
          lVar5 = plVar12[-1] + lVar16;
          dVar17 = dVar20 + dVar18 * *(double *)(plVar12[-1] + lVar16);
          __x_00 = dVar20 + dVar18 * *(double *)(lVar5 + 8);
          __x = dVar20 + dVar18 * *(double *)(lVar5 + 0x10);
          dVar18 = dVar20 + dVar18 * *(double *)(lVar5 + 0x18);
          plVar10 = plVar12;
          pdVar6 = pdVar13;
          if (1 < iVar1) {
            do {
              plVar9 = plVar10 + 1;
              dVar19 = pdVar6[1];
              lVar5 = *plVar10 + lVar16;
              dVar17 = dVar17 + dVar19 * *(double *)(*plVar10 + lVar16);
              __x_00 = __x_00 + dVar19 * *(double *)(lVar5 + 8);
              __x = __x + dVar19 * *(double *)(lVar5 + 0x10);
              dVar18 = dVar18 + dVar19 * *(double *)(lVar5 + 0x18);
              plVar10 = plVar9;
              pdVar6 = pdVar6 + 1;
            } while (plVar9 != plVar12 + (ulong)(iVar1 - 2) + 1);
          }
          lVar5 = lrint(dVar17);
          uVar8 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar8 = uVar15, (int)lVar5 < 1)) {
            uVar8 = uVar14;
          }
          puVar11[-3] = uVar8;
          lVar5 = lrint(__x_00);
          uVar8 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar8 = uVar15, (int)lVar5 < 1)) {
            uVar8 = uVar14;
          }
          puVar11[-2] = uVar8;
          lVar5 = lrint(__x);
          uVar8 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar5 < 1)) {
            uVar8 = 0x8000;
          }
          puVar11[-1] = uVar8;
          lVar5 = lrint(dVar18);
          uVar8 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar5 < 1)) {
            uVar8 = 0x8000;
          }
          lVar16 = lVar16 + 0x20;
          *puVar11 = uVar8;
          puVar11 = puVar11 + 4;
        } while (lVar16 != ((ulong)uVar3 + 1) * 0x20);
      }
      lVar16 = lVar4 << 3;
      puVar11 = (undefined2 *)(param_3 + lVar4 * 2);
      if (iVar2 < param_6) {
        do {
          dVar17 = dVar20 + *(double *)(plVar12[-1] + lVar16) * *pdVar13;
          if (1 < iVar1) {
            pdVar6 = pdVar13 + 1;
            plVar10 = plVar12;
            do {
              pdVar7 = pdVar6 + 1;
              dVar17 = dVar17 + *(double *)(*plVar10 + lVar16) * *pdVar6;
              pdVar6 = pdVar7;
              plVar10 = plVar10 + 1;
            } while (pdVar7 != pdVar13 + (ulong)(iVar1 - 2) + 2);
          }
          lVar5 = lrint(dVar17);
          uVar8 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar8 = uVar15, (int)lVar5 < 1)) {
            uVar8 = uVar14;
          }
          lVar16 = lVar16 + 8;
          *puVar11 = uVar8;
          puVar11 = puVar11 + 1;
        } while (lVar16 != (lVar4 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 8);
      }
      plVar12 = plVar12 + 1;
      param_3 = param_3 + param_4;
    } while (plVar12 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001be25c (1448 bytes) name=FUN_001be25c

void FUN_001be25c(long param_1,long param_2,undefined2 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  double *pdVar2;
  long *plVar3;
  long lVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  ulong uVar9;
  long lVar10;
  double *pdVar11;
  long lVar12;
  double *pdVar13;
  long *plVar14;
  long *plVar15;
  long *plVar16;
  long lVar17;
  undefined2 *puVar18;
  long lVar19;
  long *plVar20;
  long *plVar21;
  long lVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  
  uVar5 = *(int *)(param_1 + 8) / 2;
  dVar25 = *(double *)(param_1 + 0x78);
  uVar9 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
  pdVar2 = (double *)(*(long *)(param_1 + 0x20) + uVar9);
  plVar21 = (long *)(param_2 + uVar9);
  if ((*(uint *)(param_1 + 0x80) & 1) == 0) {
    if (param_5 != 0) {
      plVar20 = plVar21 + -1;
      plVar3 = plVar21 + (param_5 - 1);
      iVar6 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      if (iVar6 < 1) {
        iVar1 = 0;
      }
      lVar17 = (long)iVar1;
      lVar22 = NEON_shl(lVar17,3);
      do {
        plVar21 = plVar21 + 1;
        if (0 < iVar6) {
          lVar19 = 0;
          puVar18 = param_3;
          do {
            dVar24 = dVar25;
            dVar26 = dVar25;
            dVar27 = dVar25;
            dVar28 = dVar25;
            if (0 < (int)uVar5) {
              lVar10 = lVar19 * 8;
              plVar14 = plVar21;
              plVar15 = plVar20;
              pdVar13 = pdVar2;
              do {
                pdVar13 = pdVar13 + 1;
                plVar16 = plVar14 + 1;
                lVar12 = *plVar14 + lVar10;
                lVar4 = *plVar15 + lVar10;
                dVar23 = *pdVar13;
                dVar24 = dVar24 + dVar23 * (*(double *)(*plVar14 + lVar10) -
                                           *(double *)(*plVar15 + lVar10));
                dVar26 = dVar26 + dVar23 * (*(double *)(lVar12 + 8) - *(double *)(lVar4 + 8));
                dVar27 = dVar27 + dVar23 * (*(double *)(lVar12 + 0x10) - *(double *)(lVar4 + 0x10));
                dVar28 = dVar28 + dVar23 * (*(double *)(lVar12 + 0x18) - *(double *)(lVar4 + 0x18));
                plVar14 = plVar16;
                plVar15 = plVar15 + -1;
              } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
            }
            lVar10 = lrint(dVar24);
            uVar7 = (uint)lVar10;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            *puVar18 = (short)uVar7;
            lVar10 = lrint(dVar26);
            uVar7 = (uint)lVar10;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar18[1] = (short)uVar7;
            lVar10 = lrint(dVar27);
            uVar7 = (uint)lVar10;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar18[2] = (short)uVar7;
            lVar10 = lrint(dVar28);
            uVar7 = (uint)lVar10;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar18[3] = (short)uVar7;
            lVar19 = lVar19 + 4;
            puVar18 = puVar18 + 4;
          } while ((int)lVar19 < iVar6);
        }
        lVar10 = lVar22;
        lVar19 = lVar17;
        if (iVar1 < param_6) {
          do {
            dVar24 = dVar25;
            if (0 < (int)uVar5) {
              pdVar13 = pdVar2 + 1;
              plVar14 = plVar21;
              plVar15 = plVar20;
              do {
                pdVar11 = pdVar13 + 1;
                dVar24 = dVar24 + (*(double *)(*plVar14 + lVar10) - *(double *)(*plVar15 + lVar10))
                                  * *pdVar13;
                pdVar13 = pdVar11;
                plVar14 = plVar14 + 1;
                plVar15 = plVar15 + -1;
              } while (pdVar11 != pdVar2 + (ulong)(uVar5 - 1) + 2);
            }
            lVar12 = lrint(dVar24);
            uVar7 = (uint)lVar12;
            if (0xffff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            param_3[lVar19] = (short)uVar7;
            lVar19 = lVar19 + 1;
            lVar10 = lVar10 + 8;
          } while (lVar19 != lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar20 = plVar20 + 1;
        param_3 = (undefined2 *)((long)param_3 + (long)param_4);
      } while (plVar20 != plVar3);
    }
  }
  else if (param_5 != 0) {
    plVar20 = plVar21 + -1;
    plVar3 = plVar21 + (param_5 - 1);
    uVar7 = param_6 - 4U >> 2;
    iVar1 = (uVar7 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    lVar17 = (long)iVar1;
    do {
      plVar21 = plVar21 + 1;
      if (0 < param_6 + -3) {
        lVar22 = 0;
        puVar18 = param_3 + 3;
        do {
          dVar26 = *pdVar2;
          lVar19 = plVar20[1] + lVar22;
          dVar24 = dVar25 + dVar26 * *(double *)(plVar20[1] + lVar22);
          dVar28 = dVar25 + dVar26 * *(double *)(lVar19 + 8);
          dVar27 = dVar25 + dVar26 * *(double *)(lVar19 + 0x10);
          dVar26 = dVar25 + dVar26 * *(double *)(lVar19 + 0x18);
          plVar14 = plVar21;
          plVar15 = plVar20;
          pdVar13 = pdVar2;
          if (0 < (int)uVar5) {
            do {
              plVar16 = plVar14 + 1;
              lVar19 = *plVar14 + lVar22;
              lVar10 = *plVar15 + lVar22;
              dVar23 = pdVar13[1];
              dVar24 = dVar24 + dVar23 * (*(double *)(*plVar14 + lVar22) +
                                         *(double *)(*plVar15 + lVar22));
              dVar28 = dVar28 + dVar23 * (*(double *)(lVar19 + 8) + *(double *)(lVar10 + 8));
              dVar27 = dVar27 + dVar23 * (*(double *)(lVar19 + 0x10) + *(double *)(lVar10 + 0x10));
              dVar26 = dVar26 + dVar23 * (*(double *)(lVar19 + 0x18) + *(double *)(lVar10 + 0x18));
              plVar14 = plVar16;
              plVar15 = plVar15 + -1;
              pdVar13 = pdVar13 + 1;
            } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
          }
          lVar19 = lrint(dVar24);
          uVar8 = (uint)lVar19;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[-3] = (short)uVar8;
          lVar19 = lrint(dVar28);
          uVar8 = (uint)lVar19;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[-2] = (short)uVar8;
          lVar19 = lrint(dVar27);
          uVar8 = (uint)lVar19;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[-1] = (short)uVar8;
          lVar19 = lrint(dVar26);
          uVar8 = (uint)lVar19;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar18 = (short)uVar8;
          lVar22 = lVar22 + 0x20;
          puVar18 = puVar18 + 4;
        } while (lVar22 != ((ulong)uVar7 + 1) * 0x20);
      }
      lVar22 = lVar17 << 3;
      puVar18 = param_3 + lVar17;
      if (iVar1 < param_6) {
        do {
          dVar24 = dVar25 + *(double *)(plVar20[1] + lVar22) * *pdVar2;
          if (0 < (int)uVar5) {
            pdVar13 = pdVar2 + 1;
            plVar14 = plVar21;
            plVar15 = plVar20;
            do {
              pdVar11 = pdVar13 + 1;
              dVar24 = dVar24 + (*(double *)(*plVar14 + lVar22) + *(double *)(*plVar15 + lVar22)) *
                                *pdVar13;
              pdVar13 = pdVar11;
              plVar14 = plVar14 + 1;
              plVar15 = plVar15 + -1;
            } while (pdVar11 != pdVar2 + (ulong)(uVar5 - 1) + 2);
          }
          lVar19 = lrint(dVar24);
          uVar8 = (uint)lVar19;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar18 = (short)uVar8;
          lVar22 = lVar22 + 8;
          puVar18 = puVar18 + 1;
        } while (lVar22 != (lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      plVar20 = plVar20 + 1;
      param_3 = (undefined2 *)((long)param_3 + (long)param_4);
    } while (plVar20 != plVar3);
  }
  return;
}


==================================================================

### FUNC 001be804 (704 bytes) name=FUN_001be804

void FUN_001be804(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  double *pdVar7;
  long *plVar9;
  long *plVar10;
  undefined2 *puVar11;
  long *plVar12;
  double *pdVar13;
  long lVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double __x;
  double __x_00;
  double *pdVar8;
  
  pdVar13 = *(double **)(param_1 + 0x20);
  dVar18 = *(double *)(param_1 + 0x78);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    plVar12 = (long *)(param_2 + 8);
    lVar5 = (long)iVar2;
    do {
      if (0 < param_6 + -3) {
        lVar14 = 0;
        puVar11 = (undefined2 *)(param_3 + 6);
        do {
          dVar16 = *pdVar13;
          lVar6 = plVar12[-1] + lVar14;
          dVar15 = dVar18 + dVar16 * *(double *)(plVar12[-1] + lVar14);
          __x_00 = dVar18 + dVar16 * *(double *)(lVar6 + 8);
          __x = dVar18 + dVar16 * *(double *)(lVar6 + 0x10);
          dVar16 = dVar18 + dVar16 * *(double *)(lVar6 + 0x18);
          plVar10 = plVar12;
          pdVar7 = pdVar13;
          if (1 < iVar1) {
            do {
              plVar9 = plVar10 + 1;
              dVar17 = pdVar7[1];
              lVar6 = *plVar10 + lVar14;
              dVar15 = dVar15 + dVar17 * *(double *)(*plVar10 + lVar14);
              __x_00 = __x_00 + dVar17 * *(double *)(lVar6 + 8);
              __x = __x + dVar17 * *(double *)(lVar6 + 0x10);
              dVar16 = dVar16 + dVar17 * *(double *)(lVar6 + 0x18);
              plVar10 = plVar9;
              pdVar7 = pdVar7 + 1;
            } while (plVar9 != plVar12 + (ulong)(iVar1 - 2) + 1);
          }
          lVar6 = lrint(dVar15);
          uVar4 = (uint)lVar6;
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar11[-3] = (short)uVar4;
          lVar6 = lrint(__x_00);
          uVar4 = (uint)lVar6;
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar11[-2] = (short)uVar4;
          lVar6 = lrint(__x);
          uVar4 = (uint)lVar6;
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar11[-1] = (short)uVar4;
          lVar6 = lrint(dVar16);
          uVar4 = (uint)lVar6;
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar14 = lVar14 + 0x20;
          *puVar11 = (short)uVar4;
          puVar11 = puVar11 + 4;
        } while (lVar14 != ((ulong)uVar3 + 1) * 0x20);
      }
      lVar14 = lVar5 << 3;
      puVar11 = (undefined2 *)(param_3 + lVar5 * 2);
      if (iVar2 < param_6) {
        do {
          dVar15 = dVar18 + *(double *)(plVar12[-1] + lVar14) * *pdVar13;
          if (1 < iVar1) {
            pdVar7 = pdVar13 + 1;
            plVar10 = plVar12;
            do {
              pdVar8 = pdVar7 + 1;
              dVar15 = dVar15 + *(double *)(*plVar10 + lVar14) * *pdVar7;
              pdVar7 = pdVar8;
              plVar10 = plVar10 + 1;
            } while (pdVar8 != pdVar13 + (ulong)(iVar1 - 2) + 2);
          }
          lVar6 = lrint(dVar15);
          uVar4 = (uint)lVar6;
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar14 = lVar14 + 8;
          *puVar11 = (short)uVar4;
          puVar11 = puVar11 + 1;
        } while (lVar14 != (lVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 8);
      }
      plVar12 = plVar12 + 1;
      param_3 = param_3 + param_4;
    } while (plVar12 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001beac4 (1412 bytes) name=FUN_001beac4

void FUN_001beac4(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  double *pdVar2;
  long *plVar3;
  long lVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  ulong uVar9;
  long lVar10;
  double *pdVar11;
  long lVar12;
  double *pdVar13;
  long *plVar14;
  long *plVar15;
  long *plVar16;
  long lVar17;
  undefined1 *puVar18;
  long lVar19;
  long *plVar20;
  long *plVar21;
  long lVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  
  uVar5 = *(int *)(param_1 + 8) / 2;
  dVar25 = *(double *)(param_1 + 0x78);
  uVar9 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
  pdVar2 = (double *)(*(long *)(param_1 + 0x20) + uVar9);
  plVar21 = (long *)(param_2 + uVar9);
  if ((*(uint *)(param_1 + 0x80) & 1) == 0) {
    if (param_5 != 0) {
      plVar20 = plVar21 + -1;
      iVar6 = param_6 + -3;
      iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
      plVar3 = plVar21 + (param_5 - 1);
      if (iVar6 < 1) {
        iVar1 = 0;
      }
      lVar17 = (long)iVar1;
      lVar22 = NEON_shl(lVar17,3);
      do {
        plVar21 = plVar21 + 1;
        if (0 < iVar6) {
          lVar19 = 0;
          puVar18 = param_3;
          do {
            dVar24 = dVar25;
            dVar26 = dVar25;
            dVar27 = dVar25;
            dVar28 = dVar25;
            if (0 < (int)uVar5) {
              lVar10 = lVar19 * 8;
              plVar14 = plVar21;
              plVar15 = plVar20;
              pdVar13 = pdVar2;
              do {
                pdVar13 = pdVar13 + 1;
                plVar16 = plVar14 + 1;
                lVar12 = *plVar14 + lVar10;
                lVar4 = *plVar15 + lVar10;
                dVar23 = *pdVar13;
                dVar24 = dVar24 + dVar23 * (*(double *)(*plVar14 + lVar10) -
                                           *(double *)(*plVar15 + lVar10));
                dVar26 = dVar26 + dVar23 * (*(double *)(lVar12 + 8) - *(double *)(lVar4 + 8));
                dVar27 = dVar27 + dVar23 * (*(double *)(lVar12 + 0x10) - *(double *)(lVar4 + 0x10));
                dVar28 = dVar28 + dVar23 * (*(double *)(lVar12 + 0x18) - *(double *)(lVar4 + 0x18));
                plVar14 = plVar16;
                plVar15 = plVar15 + -1;
              } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
            }
            lVar10 = lrint(dVar24);
            uVar7 = (uint)lVar10;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            *puVar18 = (char)uVar7;
            lVar10 = lrint(dVar26);
            uVar7 = (uint)lVar10;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar18[1] = (char)uVar7;
            lVar10 = lrint(dVar27);
            uVar7 = (uint)lVar10;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            puVar18[2] = (char)uVar7;
            lVar10 = lrint(dVar28);
            uVar7 = (uint)lVar10;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            lVar19 = lVar19 + 4;
            puVar18[3] = (char)uVar7;
            puVar18 = puVar18 + 4;
          } while ((int)lVar19 < iVar6);
        }
        lVar10 = lVar22;
        lVar19 = lVar17;
        if (iVar1 < param_6) {
          do {
            dVar24 = dVar25;
            if (0 < (int)uVar5) {
              pdVar13 = pdVar2 + 1;
              plVar14 = plVar21;
              plVar15 = plVar20;
              do {
                pdVar11 = pdVar13 + 1;
                dVar24 = dVar24 + (*(double *)(*plVar14 + lVar10) - *(double *)(*plVar15 + lVar10))
                                  * *pdVar13;
                pdVar13 = pdVar11;
                plVar14 = plVar14 + 1;
                plVar15 = plVar15 + -1;
              } while (pdVar11 != pdVar2 + (ulong)(uVar5 - 1) + 2);
            }
            lVar12 = lrint(dVar24);
            uVar7 = (uint)lVar12;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            param_3[lVar19] = (char)uVar7;
            lVar19 = lVar19 + 1;
            lVar10 = lVar10 + 8;
          } while (lVar19 != lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
        }
        plVar20 = plVar20 + 1;
        param_3 = param_3 + param_4;
      } while (plVar20 != plVar3);
    }
  }
  else if (param_5 != 0) {
    plVar20 = plVar21 + -1;
    plVar3 = plVar21 + (param_5 - 1);
    uVar7 = param_6 - 4U >> 2;
    iVar1 = (uVar7 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    lVar17 = (long)iVar1;
    lVar22 = NEON_shl(lVar17,3);
    do {
      plVar21 = plVar21 + 1;
      if (0 < param_6 + -3) {
        lVar19 = 0;
        puVar18 = param_3;
        do {
          dVar26 = *pdVar2;
          lVar10 = plVar20[1] + lVar19;
          dVar24 = dVar25 + dVar26 * *(double *)(plVar20[1] + lVar19);
          dVar28 = dVar25 + dVar26 * *(double *)(lVar10 + 8);
          dVar27 = dVar25 + dVar26 * *(double *)(lVar10 + 0x10);
          dVar26 = dVar25 + dVar26 * *(double *)(lVar10 + 0x18);
          plVar14 = plVar21;
          plVar15 = plVar20;
          pdVar13 = pdVar2;
          if (0 < (int)uVar5) {
            do {
              plVar16 = plVar14 + 1;
              lVar10 = *plVar14 + lVar19;
              lVar12 = *plVar15 + lVar19;
              dVar23 = pdVar13[1];
              dVar24 = dVar24 + dVar23 * (*(double *)(*plVar14 + lVar19) +
                                         *(double *)(*plVar15 + lVar19));
              dVar28 = dVar28 + dVar23 * (*(double *)(lVar10 + 8) + *(double *)(lVar12 + 8));
              dVar27 = dVar27 + dVar23 * (*(double *)(lVar10 + 0x10) + *(double *)(lVar12 + 0x10));
              dVar26 = dVar26 + dVar23 * (*(double *)(lVar10 + 0x18) + *(double *)(lVar12 + 0x18));
              plVar14 = plVar16;
              plVar15 = plVar15 + -1;
              pdVar13 = pdVar13 + 1;
            } while (plVar16 != plVar20 + (ulong)(uVar5 - 1) + 3);
          }
          lVar10 = lrint(dVar24);
          uVar8 = (uint)lVar10;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar18 = (char)uVar8;
          lVar10 = lrint(dVar28);
          uVar8 = (uint)lVar10;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[1] = (char)uVar8;
          lVar10 = lrint(dVar27);
          uVar8 = (uint)lVar10;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[2] = (char)uVar8;
          lVar10 = lrint(dVar26);
          uVar8 = (uint)lVar10;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar18[3] = (char)uVar8;
          lVar19 = lVar19 + 0x20;
          puVar18 = puVar18 + 4;
        } while (lVar19 != ((ulong)uVar7 + 1) * 0x20);
      }
      lVar19 = lVar22;
      puVar18 = param_3 + lVar17;
      if (iVar1 < param_6) {
        do {
          dVar24 = dVar25 + *(double *)(plVar20[1] + lVar19) * *pdVar2;
          if (0 < (int)uVar5) {
            pdVar13 = pdVar2 + 1;
            plVar14 = plVar21;
            plVar15 = plVar20;
            do {
              pdVar11 = pdVar13 + 1;
              dVar24 = dVar24 + (*(double *)(*plVar14 + lVar19) + *(double *)(*plVar15 + lVar19)) *
                                *pdVar13;
              pdVar13 = pdVar11;
              plVar14 = plVar14 + 1;
              plVar15 = plVar15 + -1;
            } while (pdVar11 != pdVar2 + (ulong)(uVar5 - 1) + 2);
          }
          lVar10 = lrint(dVar24);
          uVar8 = (uint)lVar10;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar19 = lVar19 + 8;
          *puVar18 = (char)uVar8;
          puVar18 = puVar18 + 1;
        } while (lVar19 != (lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      plVar20 = plVar20 + 1;
      param_3 = param_3 + param_4;
    } while (plVar20 != plVar3);
  }
  return;
}


==================================================================

### FUNC 001bf048 (684 bytes) name=FUN_001bf048

void FUN_001bf048(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  double *pdVar7;
  long *plVar9;
  long *plVar10;
  long *plVar11;
  double *pdVar12;
  long lVar13;
  undefined1 *puVar14;
  long lVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double __x;
  double __x_00;
  double *pdVar8;
  
  pdVar12 = *(double **)(param_1 + 0x20);
  dVar18 = *(double *)(param_1 + 0x78);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    lVar5 = (long)iVar2;
    plVar11 = (long *)(param_2 + 8);
    lVar15 = NEON_shl(lVar5,3);
    do {
      if (0 < param_6 + -3) {
        lVar13 = 0;
        puVar14 = param_3;
        do {
          dVar19 = *pdVar12;
          lVar6 = plVar11[-1] + lVar13;
          dVar16 = dVar18 + dVar19 * *(double *)(plVar11[-1] + lVar13);
          __x_00 = dVar18 + dVar19 * *(double *)(lVar6 + 8);
          __x = dVar18 + dVar19 * *(double *)(lVar6 + 0x10);
          dVar19 = dVar18 + dVar19 * *(double *)(lVar6 + 0x18);
          plVar10 = plVar11;
          pdVar7 = pdVar12;
          if (1 < iVar1) {
            do {
              plVar9 = plVar10 + 1;
              dVar17 = pdVar7[1];
              lVar6 = *plVar10 + lVar13;
              dVar16 = dVar16 + dVar17 * *(double *)(*plVar10 + lVar13);
              __x_00 = __x_00 + dVar17 * *(double *)(lVar6 + 8);
              __x = __x + dVar17 * *(double *)(lVar6 + 0x10);
              dVar19 = dVar19 + dVar17 * *(double *)(lVar6 + 0x18);
              plVar10 = plVar9;
              pdVar7 = pdVar7 + 1;
            } while (plVar9 != plVar11 + (ulong)(iVar1 - 2) + 1);
          }
          lVar6 = lrint(dVar16);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          *puVar14 = (char)uVar4;
          lVar6 = lrint(__x_00);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar14[1] = (char)uVar4;
          lVar6 = lrint(__x);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar14[2] = (char)uVar4;
          lVar6 = lrint(dVar19);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar13 = lVar13 + 0x20;
          puVar14[3] = (char)uVar4;
          puVar14 = puVar14 + 4;
        } while (lVar13 != ((ulong)uVar3 + 1) * 0x20);
      }
      lVar13 = lVar15;
      puVar14 = param_3 + lVar5;
      if (iVar2 < param_6) {
        do {
          dVar16 = dVar18 + *(double *)(plVar11[-1] + lVar13) * *pdVar12;
          if (1 < iVar1) {
            pdVar7 = pdVar12 + 1;
            plVar10 = plVar11;
            do {
              pdVar8 = pdVar7 + 1;
              dVar16 = dVar16 + *(double *)(*plVar10 + lVar13) * *pdVar7;
              pdVar7 = pdVar8;
              plVar10 = plVar10 + 1;
            } while (pdVar8 != pdVar12 + (ulong)(iVar1 - 2) + 2);
          }
          lVar6 = lrint(dVar16);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar13 = lVar13 + 8;
          *puVar14 = (char)uVar4;
          puVar14 = puVar14 + 1;
        } while (lVar13 != (lVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 8);
      }
      plVar11 = plVar11 + 1;
      param_3 = param_3 + param_4;
    } while (plVar11 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001bf2f4 (672 bytes) name=FUN_001bf2f4

void FUN_001bf2f4(long *param_1,uint *param_2,uint *param_3,int *param_4,int *param_5,
                 undefined1 param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  int iVar7;
  char *pcVar8;
  void *__dest;
  long lVar9;
  long lVar10;
  uint uVar11;
  uint uVar12;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((*(uint *)(param_1 + 1) != (*param_2 & 0xfff)) ||
     (*(uint *)((long)param_1 + 0xc) != (*param_3 & 0xfff))) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x2e);
    uVar6 = s_src_type______srcType____dst_typ_00442fa8._44_2_;
    uVar5 = s_src_type______srcType____dst_typ_00442fa8._40_4_;
    uVar4 = s_src_type______srcType____dst_typ_00442fa8._24_8_;
    uVar3 = s_src_type______srcType____dst_typ_00442fa8._16_8_;
    uVar2 = s_src_type______srcType____dst_typ_00442fa8._8_8_;
    uVar1 = s_src_type______srcType____dst_typ_00442fa8._0_8_;
    *(undefined8 *)(pcVar8 + 0x20) = s_src_type______srcType____dst_typ_00442fa8._32_8_;
    *(undefined4 *)(pcVar8 + 0x28) = uVar5;
    *(undefined2 *)(pcVar8 + 0x2c) = uVar6;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    *(undefined8 *)(pcVar8 + 0x10) = uVar3;
    *(undefined8 *)(pcVar8 + 0x18) = uVar4;
    cv::error(-0xd7,(String *)&local_10,
              "virtual void cv::FilterEngine::apply(const cv::Mat&, cv::Mat&, const Rect&, cv::Point, bool)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",399);
    cv::String::deallocate((String *)&local_10);
  }
  uStack_18 = *(undefined8 *)(param_4 + 2);
  local_20 = *(undefined8 *)param_4;
  uVar12 = param_4[3];
  uVar11 = param_4[2];
  if ((uVar12 == 0xffffffff && uVar11 == 0xffffffff) && (param_4[1] == 0 && *param_4 == 0)) {
    uVar11 = param_2[3];
    uVar12 = param_2[2];
    local_20 = 0;
    uStack_18 = CONCAT44(uVar12,uVar11);
  }
  if (uVar11 * uVar12 != 0) {
    if ((((*param_5 < 0) || (param_5[1] < 0)) || ((int)param_3[3] < (int)(*param_5 + uVar11))) ||
       ((int)param_3[2] < (int)(param_5[1] + uVar12))) {
      local_10 = 0;
      local_8 = 0;
      __dest = (void *)cv::String::allocate((String *)&local_10,0x6d);
      memcpy(__dest,&DAT_00442ef0,0x6d);
      cv::error(-0xd7,(String *)&local_10,
                "virtual void cv::FilterEngine::apply(const cv::Mat&, cv::Mat&, const Rect&, cv::Point, bool)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x19a);
      cv::String::deallocate((String *)&local_10);
    }
    iVar7 = (**(code **)(*param_1 + 0x18))(param_1,param_2,&local_20,param_6,0xffffffff);
    if ((int)param_2[1] < 1) {
      lVar9 = 0;
    }
    else {
      lVar9 = (long)(int)local_20 *
              *(long *)(*(long *)(param_2 + 0x12) + (long)(int)param_2[1] * 8 + -8);
    }
    if ((int)param_3[1] < 1) {
      lVar10 = 0;
    }
    else {
      lVar10 = (long)*param_5 * (*(long **)(param_3 + 0x12))[(long)(int)param_3[1] + -1];
    }
    (**(code **)(*param_1 + 0x20))
              (param_1,*(long *)(param_2 + 4) + lVar9 + (long)iVar7 * *(long *)(param_2 + 0x14),
               *(long *)(param_2 + 0x14),
               *(int *)((long)param_1 + 0xdc) - *(int *)((long)param_1 + 0xd4),
               *(long *)(param_3 + 4) + lVar10 + (long)param_5[1] * **(long **)(param_3 + 0x12),
               param_3[0x14]);
  }
  return;
}


==================================================================

### FUNC 001bf5bc (2092 bytes) name=FUN_001bf5bc

int FUN_001bf5bc(long param_1,long param_2,int param_3,int param_4,long param_5,int param_6)

{
  long lVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined2 uVar20;
  char cVar21;
  undefined4 uVar22;
  bool bVar23;
  bool bVar24;
  int iVar25;
  ulong *puVar26;
  long lVar27;
  long *plVar28;
  char *pcVar29;
  long lVar30;
  int iVar31;
  long lVar32;
  int iVar33;
  uint uVar34;
  void *__src;
  ulong *puVar35;
  long lVar36;
  int iVar37;
  int iVar38;
  void *local_48;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((*(int *)(param_1 + 0x28) < 1) || (*(int *)(param_1 + 0x2c) < 1)) {
    local_10 = 0;
    local_8 = 0;
    pcVar29 = (char *)cv::String::allocate((String *)&local_10,0x2b);
    cVar21 = s_wholeSize_width_>_0____wholeSize_00442fd8[0x2a];
    uVar20 = s_wholeSize_width_>_0____wholeSize_00442fd8._40_2_;
    uVar19 = s_wholeSize_width_>_0____wholeSize_00442fd8._24_8_;
    uVar18 = s_wholeSize_width_>_0____wholeSize_00442fd8._16_8_;
    uVar17 = s_wholeSize_width_>_0____wholeSize_00442fd8._8_8_;
    uVar16 = s_wholeSize_width_>_0____wholeSize_00442fd8._0_8_;
    *(undefined8 *)(pcVar29 + 0x20) = s_wholeSize_width_>_0____wholeSize_00442fd8._32_8_;
    *(undefined2 *)(pcVar29 + 0x28) = uVar20;
    pcVar29[0x2a] = cVar21;
    *(undefined8 *)pcVar29 = uVar16;
    *(undefined8 *)(pcVar29 + 8) = uVar17;
    *(undefined8 *)(pcVar29 + 0x10) = uVar18;
    *(undefined8 *)(pcVar29 + 0x18) = uVar19;
    cv::error(-0xd7,(String *)&local_10,
              "virtual int cv::FilterEngine::proceed(const uchar*, int, int, uchar*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",299);
    cv::String::deallocate((String *)&local_10);
  }
  puVar26 = *(ulong **)(param_1 + 0xe8);
  iVar25 = *(int *)(param_1 + 0x30);
  if (*(int *)(param_1 + 0x1c) < *(int *)(param_1 + 0x30)) {
    iVar25 = *(int *)(param_1 + 0x1c);
  }
  iVar10 = (*(uint *)(param_1 + 8) >> 3 & 0x1ff) + 1 <<
           (ulong)((uint)(0xfa50L >> ((*(uint *)(param_1 + 8) & 7) << 1)) & 3);
  iVar4 = *(int *)(param_1 + 0x38);
  bVar23 = *(long *)(param_1 + 0x108) == 0;
  iVar5 = *(int *)(param_1 + 0x44);
  iVar2 = (*(uint *)(param_1 + 0x10) >> 3 & 0x1ff) + 1;
  iVar6 = *(int *)(param_1 + 0x18);
  iVar15 = (int)(*(long *)(param_1 + 0xf0) - (long)puVar26 >> 3);
  iVar37 = *(int *)(param_1 + 0x14);
  iVar7 = *(int *)(param_1 + 0x20);
  lVar36 = *(long *)(param_1 + 0x50);
  iVar8 = *(int *)(param_1 + 0x68);
  iVar9 = *(int *)(param_1 + 0x40);
  if ((0 < iVar5) || (bVar24 = false, 0 < iVar9)) {
    bVar24 = *(int *)(param_1 + 0x48) != 0;
  }
  iVar31 = *(int *)(param_1 + 0xd4);
  iVar33 = *(int *)(param_1 + 0xe0);
  iVar12 = (*(int *)(param_1 + 0xdc) - iVar31) - iVar33;
  if (iVar12 < param_4) {
    param_4 = iVar12;
  }
  local_48 = (void *)(param_2 - iVar10 * iVar25);
  if ((param_5 == 0 || param_4 < 1) || (local_48 == (void *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar29 = (char *)cv::String::allocate((String *)&local_10,0x17);
    cVar21 = s_src____dst____count_>_0_00443008[0x16];
    uVar20 = s_src____dst____count_>_0_00443008._20_2_;
    uVar17 = s_src____dst____count_>_0_00443008._8_8_;
    uVar16 = s_src____dst____count_>_0_00443008._0_8_;
    *(undefined4 *)(pcVar29 + 0x10) = s_src____dst____count_>_0_00443008._16_4_;
    *(undefined2 *)(pcVar29 + 0x14) = uVar20;
    pcVar29[0x16] = cVar21;
    *(undefined8 *)pcVar29 = uVar16;
    *(undefined8 *)(pcVar29 + 8) = uVar17;
    cv::error(-0xd7,(String *)&local_10,
              "virtual int cv::FilterEngine::proceed(const uchar*, int, int, uchar*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x13e);
    cv::String::deallocate((String *)&local_10);
    iVar31 = *(int *)(param_1 + 0xd4);
    iVar33 = *(int *)(param_1 + 0xe0);
  }
  iVar13 = (iVar4 + iVar37 + -1) - iVar5;
  iVar14 = iVar15 - iVar7;
  iVar12 = iVar8 * iVar9;
  iVar11 = iVar10 * iVar9;
  iVar25 = ((iVar14 - iVar31) - iVar33) + *(int *)(param_1 + 0x34);
  iVar37 = 0;
  while( true ) {
    if (iVar25 < 1) {
      iVar25 = (iVar15 - iVar6) + 1;
    }
    if (param_4 < iVar25) {
      iVar25 = param_4;
    }
    param_4 = param_4 - iVar25;
    if (0 < iVar25) {
      lVar30 = (long)param_3;
      __src = local_48;
      uVar34 = iVar25 - 1U;
      while( true ) {
        iVar3 = (iVar31 - *(int *)(param_1 + 0xd8)) + iVar33;
        iVar38 = 0;
        if (iVar15 != 0) {
          iVar38 = iVar3 / iVar15;
        }
        lVar1 = (*(long *)(param_1 + 0x70) + 0xfU & 0xfffffffffffffff0) +
                (long)((iVar3 - iVar38 * iVar15) * *(int *)(param_1 + 0xd0));
        lVar32 = lVar1;
        if (bVar23) {
          lVar32 = *(long *)(param_1 + 0x88);
        }
        if (iVar15 < iVar33 + 1) {
          *(int *)(param_1 + 0xe0) = iVar33;
          *(int *)(param_1 + 0xd4) = iVar31 + 1;
        }
        else {
          *(int *)(param_1 + 0xe0) = iVar33 + 1;
        }
        memcpy((void *)(lVar32 + iVar11),__src,(long)((iVar13 - iVar9) * iVar10));
        if (bVar24) {
          if (iVar8 << 2 == iVar10) {
            lVar27 = 0;
            if (0 < iVar12) {
              do {
                *(undefined4 *)(lVar32 + lVar27 * 4) =
                     *(undefined4 *)((long)__src + (long)*(int *)(lVar36 + lVar27 * 4) * 4);
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < iVar12);
            }
            lVar27 = 0;
            if (0 < iVar8 * iVar5) {
              do {
                *(undefined4 *)
                 (lVar32 + (-(ulong)((uint)(iVar8 * iVar13) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar8 * iVar13) << 2) + lVar27 * 4) =
                     *(undefined4 *)
                      ((long)__src + (long)*(int *)(lVar36 + (long)iVar12 * 4 + lVar27 * 4) * 4);
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < iVar8 * iVar5);
            }
          }
          else {
            lVar27 = 0;
            if (0 < iVar11) {
              do {
                *(undefined1 *)(lVar32 + lVar27) =
                     *(undefined1 *)((long)__src + (long)*(int *)(lVar36 + lVar27 * 4));
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < iVar11);
            }
            lVar27 = 0;
            if (0 < iVar5 * iVar10) {
              do {
                *(undefined1 *)(lVar32 + iVar13 * iVar10 + lVar27) =
                     *(undefined1 *)
                      ((long)__src + (long)*(int *)(lVar36 + (long)iVar11 * 4 + lVar27 * 4));
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < iVar5 * iVar10);
            }
          }
        }
        if (bVar23) {
          (**(code **)(**(long **)(param_1 + 0x118) + 0x10))
                    (*(long **)(param_1 + 0x118),lVar32,lVar1,iVar4,
                     (*(uint *)(param_1 + 8) >> 3 & 0x1ff) + 1);
        }
        if (uVar34 == 0) break;
        uVar34 = uVar34 - 1;
        __src = (void *)((long)__src + lVar30);
        iVar31 = *(int *)(param_1 + 0xd4);
        iVar33 = *(int *)(param_1 + 0xe0);
      }
      local_48 = (void *)((long)local_48 + lVar30 + (ulong)(iVar25 - 1U) * lVar30);
    }
    iVar25 = *(int *)(param_1 + 0xe4) + iVar37;
    iVar31 = (*(int *)(param_1 + 0x3c) - iVar25) + iVar6 + -1;
    if (iVar15 < iVar31) {
      iVar31 = iVar15;
    }
    if (0 < iVar31) break;
    iVar38 = 0;
joined_r0x001bfbe8:
    if (iVar38 < iVar6) {
      iVar25 = iVar37 + *(int *)(param_1 + 0xe4);
      *(int *)(param_1 + 0xe4) = iVar25;
      if (*(int *)(param_1 + 0x3c) < iVar25) {
        local_10 = 0;
        local_8 = 0;
        pcVar29 = (char *)cv::String::allocate((String *)&local_10,0x12);
        uVar17 = s_dstY_<__roi_height_00443030._8_8_;
        uVar16 = s_dstY_<__roi_height_00443030._0_8_;
        *(undefined2 *)(pcVar29 + 0x10) = s_dstY_<__roi_height_00443030._16_2_;
        *(undefined8 *)pcVar29 = uVar16;
        *(undefined8 *)(pcVar29 + 8) = uVar17;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual int cv::FilterEngine::proceed(const uchar*, int, int, uchar*, int)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x187);
        cv::String::deallocate((String *)&local_10);
      }
      return iVar37;
    }
    plVar28 = *(long **)(param_1 + 0x108);
    iVar25 = (iVar38 - iVar6) + 1;
    if (plVar28 == (long *)0x0) {
      (**(code **)(**(long **)(param_1 + 0x128) + 0x10))
                (*(long **)(param_1 + 0x128),puVar26,param_5,param_6,iVar25,
                 iVar2 * *(int *)(param_1 + 0x38));
    }
    else {
      (**(code **)(*plVar28 + 0x10))
                (plVar28,puVar26,param_5,param_6,iVar25,*(undefined4 *)(param_1 + 0x38),iVar2);
    }
    iVar31 = *(int *)(param_1 + 0xd4);
    param_5 = param_5 + param_6 * iVar25;
    iVar33 = *(int *)(param_1 + 0xe0);
    iVar37 = iVar37 + iVar25;
    iVar25 = ((iVar14 - iVar31) - iVar33) + *(int *)(param_1 + 0x34);
  }
  iVar33 = 0;
  puVar35 = puVar26;
  do {
    iVar25 = cv::borderInterpolate
                       ((iVar25 + iVar33 + *(int *)(param_1 + 0x34)) - iVar7,
                        *(int *)(param_1 + 0x2c),*(int *)(param_1 + 0x4c));
    if (iVar25 < 0) {
      *puVar35 = *(long *)(param_1 + 0xb8) + 0xfU & 0xfffffffffffffff0;
    }
    else {
      if (iVar25 < *(int *)(param_1 + 0xd4)) {
        local_10 = 0;
        local_8 = 0;
        pcVar29 = (char *)cv::String::allocate((String *)&local_10,0xe);
        uVar20 = s_srcY_>__startY_00443020._12_2_;
        uVar22 = s_srcY_>__startY_00443020._8_4_;
        *(undefined8 *)pcVar29 = s_srcY_>__startY_00443020._0_8_;
        *(undefined4 *)(pcVar29 + 8) = uVar22;
        *(undefined2 *)(pcVar29 + 0xc) = uVar20;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual int cv::FilterEngine::proceed(const uchar*, int, int, uchar*, int)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x176);
        cv::String::deallocate((String *)&local_10);
        iVar3 = *(int *)(param_1 + 0xd4) + *(int *)(param_1 + 0xe0);
      }
      else {
        iVar3 = *(int *)(param_1 + 0xd4) + *(int *)(param_1 + 0xe0);
      }
      iVar38 = iVar33;
      if (iVar3 <= iVar25) goto joined_r0x001bfbe8;
      iVar25 = iVar25 - *(int *)(param_1 + 0xd8);
      iVar3 = 0;
      if (iVar15 != 0) {
        iVar3 = iVar25 / iVar15;
      }
      *puVar35 = (*(long *)(param_1 + 0x70) + 0xfU & 0xfffffffffffffff0) +
                 (long)((iVar25 - iVar3 * iVar15) * *(int *)(param_1 + 0xd0));
    }
    iVar38 = iVar31;
    if (iVar33 + 1 == iVar31) goto joined_r0x001bfbe8;
    iVar33 = iVar33 + 1;
    puVar35 = puVar35 + 1;
    iVar25 = *(int *)(param_1 + 0xe4) + iVar37;
  } while( true );
}


==================================================================

### FUNC 001bfe38 (452 bytes) name=FUN_001bfe38

int FUN_001bfe38(long *param_1,Mat *param_2,int *param_3,char param_4,undefined4 param_5)

{
  uint uVar1;
  uint uVar2;
  void *__dest;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int local_28;
  int local_24;
  int local_20;
  int local_1c;
  int local_18;
  int local_14;
  int local_10 [4];
  
  iVar3 = *param_3;
  uVar6 = param_3[1];
  uVar4 = param_3[2];
  uVar5 = param_3[3];
  uVar1 = (uint)(uVar5 == 0xffffffff && (uVar4 == 0xffffffff && (iVar3 == 0 && uVar6 == 0)));
  if (uVar1 == 0) {
    if (-1 < iVar3) {
      uVar2 = ~uVar4 & (uVar5 ^ 0xffffffff);
      uVar1 = ~uVar6 >> 0x1f;
      goto joined_r0x001bffa8;
    }
  }
  else {
    uVar4 = *(uint *)(param_2 + 0xc);
    iVar3 = 0;
    uVar5 = *(uint *)(param_2 + 8);
    uVar6 = 0;
    uVar2 = ~uVar4 & (uVar5 ^ 0xffffffff);
joined_r0x001bffa8:
    if (((((int)uVar2 < 0) && (uVar1 != 0)) &&
        (local_20 = *(int *)(param_2 + 0xc), (int)(uVar4 + iVar3) <= local_20)) &&
       (local_1c = *(int *)(param_2 + 8), (int)(uVar5 + uVar6) <= local_1c)) goto LAB_001bff10;
  }
  local_10[0] = 0;
  local_10[1] = 0;
  local_10[2] = 0;
  local_10[3] = 0;
  __dest = (void *)cv::String::allocate((String *)local_10,0x98);
  memcpy(__dest,
         "srcRoi.x >= 0 && srcRoi.y >= 0 && srcRoi.width >= 0 && srcRoi.height >= 0 && srcRoi.x + srcRoi.width <= src.cols && srcRoi.y + srcRoi.height <= src.rows"
         ,0x98);
  cv::error(-0xd7,(String *)local_10,
            "virtual int cv::FilterEngine::start(const cv::Mat&, const Rect&, bool, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x112);
  cv::String::deallocate((String *)local_10);
  local_20 = *(int *)(param_2 + 0xc);
  local_1c = *(int *)(param_2 + 8);
LAB_001bff10:
  local_28 = 0;
  local_24 = 0;
  if (param_4 == '\0') {
    cv::Mat::locateROI(param_2,(Size_ *)&local_20,(Point_ *)&local_28);
  }
  local_10[1] = uVar6 + local_24;
  local_10[0] = iVar3 + local_28;
  local_10[3] = uVar5;
  local_10[2] = uVar4;
  local_18 = local_20;
  local_14 = local_1c;
  (**(code **)(*param_1 + 0x10))(param_1,&local_18,local_10,param_5);
  return *(int *)((long)param_1 + 0xd4) - local_24;
}


==================================================================

### FUNC 001c0010 (32 bytes) name=FUN_001c0010

void FUN_001c0010(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 001c0030 (612 bytes) name=FUN_001c0030

uint FUN_001c0030(uint *param_1,long *param_2,undefined8 *param_3,int param_4)

{
  float *pfVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  int iVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined8 uVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined8 uVar12;
  int iVar13;
  long lVar14;
  float *pfVar15;
  long *plVar16;
  long *plVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  
  fVar27 = (float)param_1[1];
  iVar13 = param_1[4] + param_1[5] + -1;
  iVar5 = iVar13 / 2;
  pfVar1 = (float *)(*(long *)(param_1 + 6) + (long)iVar5 * 4);
  if ((*param_1 & 1) == 0) {
    fVar28 = pfVar1[1];
    if (param_4 < 8) {
      return *param_1 & 1;
    }
    uVar6 = param_4 - 8U >> 3;
    lVar14 = 0;
    do {
      puVar2 = (undefined8 *)(param_2[1] + lVar14);
      puVar3 = (undefined8 *)(param_2[-1] + lVar14);
      fVar22 = fVar27 + ((float)*puVar2 - (float)*puVar3) * fVar28;
      fVar23 = fVar27 + ((float)((ulong)*puVar2 >> 0x20) - (float)((ulong)*puVar3 >> 0x20)) * fVar28
      ;
      fVar24 = fVar27 + ((float)puVar2[1] - (float)puVar3[1]) * fVar28;
      fVar25 = fVar27 + ((float)((ulong)puVar2[1] >> 0x20) - (float)((ulong)puVar3[1] >> 0x20)) *
                        fVar28;
      fVar29 = fVar27 + ((float)puVar2[2] - (float)puVar3[2]) * fVar28;
      fVar19 = fVar27 + ((float)((ulong)puVar2[2] >> 0x20) - (float)((ulong)puVar3[2] >> 0x20)) *
                        fVar28;
      fVar20 = fVar27 + ((float)puVar2[3] - (float)puVar3[3]) * fVar28;
      fVar21 = fVar27 + ((float)((ulong)puVar2[3] >> 0x20) - (float)((ulong)puVar3[3] >> 0x20)) *
                        fVar28;
      if (1 < iVar5) {
        iVar13 = 2;
        pfVar15 = pfVar1 + 2;
        plVar16 = param_2 + -2;
        plVar17 = param_2 + 2;
        do {
          iVar13 = iVar13 + 1;
          puVar2 = (undefined8 *)(*plVar17 + lVar14);
          puVar3 = (undefined8 *)(*plVar16 + lVar14);
          fVar26 = *pfVar15;
          fVar22 = fVar22 + ((float)*puVar2 - (float)*puVar3) * fVar26;
          fVar23 = fVar23 + ((float)((ulong)*puVar2 >> 0x20) - (float)((ulong)*puVar3 >> 0x20)) *
                            fVar26;
          fVar24 = fVar24 + ((float)puVar2[1] - (float)puVar3[1]) * fVar26;
          fVar25 = fVar25 + ((float)((ulong)puVar2[1] >> 0x20) - (float)((ulong)puVar3[1] >> 0x20))
                            * fVar26;
          fVar29 = fVar29 + ((float)puVar2[2] - (float)puVar3[2]) * fVar26;
          fVar19 = fVar19 + ((float)((ulong)puVar2[2] >> 0x20) - (float)((ulong)puVar3[2] >> 0x20))
                            * fVar26;
          fVar20 = fVar20 + ((float)puVar2[3] - (float)puVar3[3]) * fVar26;
          fVar21 = fVar21 + ((float)((ulong)puVar2[3] >> 0x20) - (float)((ulong)puVar3[3] >> 0x20))
                            * fVar26;
          pfVar15 = pfVar15 + 1;
          plVar16 = plVar16 + -1;
          plVar17 = plVar17 + 1;
        } while (iVar13 <= iVar5);
      }
      lVar14 = lVar14 + 0x20;
      auVar11._4_4_ = (int)fVar23;
      auVar11._0_4_ = (int)fVar22;
      auVar11._8_4_ = (int)fVar24;
      auVar11._12_4_ = (int)fVar25;
      uVar12 = NEON_sqxtn(CONCAT44((int)fVar23,(int)fVar22),auVar11,4);
      auVar8._4_4_ = (int)fVar19;
      auVar8._0_4_ = (int)fVar29;
      auVar8._8_4_ = (int)fVar20;
      auVar8._12_4_ = (int)fVar21;
      uVar9 = NEON_sqxtn(CONCAT44((int)fVar19,(int)fVar29),auVar8,4);
      *param_3 = uVar12;
      param_3[1] = uVar9;
      param_3 = param_3 + 2;
    } while (lVar14 != ((ulong)uVar6 + 1) * 0x20);
    return (uVar6 + 1) * 8;
  }
  if (iVar13 != 1) {
    fVar28 = *pfVar1;
    fVar29 = pfVar1[1];
    if (7 < param_4) {
      uVar6 = param_4 - 8U >> 3;
      lVar14 = 0;
      do {
        puVar2 = (undefined8 *)(*param_2 + lVar14);
        puVar3 = (undefined8 *)(param_2[1] + lVar14);
        puVar4 = (undefined8 *)(param_2[-1] + lVar14);
        fVar23 = fVar27 + (float)*puVar2 * fVar28 + ((float)*puVar3 + (float)*puVar4) * fVar29;
        fVar24 = fVar27 + (float)((ulong)*puVar2 >> 0x20) * fVar28 +
                 ((float)((ulong)*puVar3 >> 0x20) + (float)((ulong)*puVar4 >> 0x20)) * fVar29;
        fVar25 = fVar27 + (float)puVar2[1] * fVar28 + ((float)puVar3[1] + (float)puVar4[1]) * fVar29
        ;
        fVar26 = fVar27 + (float)((ulong)puVar2[1] >> 0x20) * fVar28 +
                 ((float)((ulong)puVar3[1] >> 0x20) + (float)((ulong)puVar4[1] >> 0x20)) * fVar29;
        fVar19 = fVar27 + (float)puVar2[2] * fVar28 + ((float)puVar3[2] + (float)puVar4[2]) * fVar29
        ;
        fVar20 = fVar27 + (float)((ulong)puVar2[2] >> 0x20) * fVar28 +
                 ((float)((ulong)puVar3[2] >> 0x20) + (float)((ulong)puVar4[2] >> 0x20)) * fVar29;
        fVar21 = fVar27 + (float)puVar2[3] * fVar28 + ((float)puVar3[3] + (float)puVar4[3]) * fVar29
        ;
        fVar22 = fVar27 + (float)((ulong)puVar2[3] >> 0x20) * fVar28 +
                 ((float)((ulong)puVar3[3] >> 0x20) + (float)((ulong)puVar4[3] >> 0x20)) * fVar29;
        if (1 < iVar5) {
          iVar13 = 2;
          pfVar15 = pfVar1 + 2;
          plVar16 = param_2 + -2;
          plVar17 = param_2 + 2;
          do {
            iVar13 = iVar13 + 1;
            puVar2 = (undefined8 *)(*plVar17 + lVar14);
            puVar3 = (undefined8 *)(*plVar16 + lVar14);
            fVar18 = *pfVar15;
            fVar23 = fVar23 + ((float)*puVar2 + (float)*puVar3) * fVar18;
            fVar24 = fVar24 + ((float)((ulong)*puVar2 >> 0x20) + (float)((ulong)*puVar3 >> 0x20)) *
                              fVar18;
            fVar25 = fVar25 + ((float)puVar2[1] + (float)puVar3[1]) * fVar18;
            fVar26 = fVar26 + ((float)((ulong)puVar2[1] >> 0x20) + (float)((ulong)puVar3[1] >> 0x20)
                              ) * fVar18;
            fVar19 = fVar19 + ((float)puVar2[2] + (float)puVar3[2]) * fVar18;
            fVar20 = fVar20 + ((float)((ulong)puVar2[2] >> 0x20) + (float)((ulong)puVar3[2] >> 0x20)
                              ) * fVar18;
            fVar21 = fVar21 + ((float)puVar2[3] + (float)puVar3[3]) * fVar18;
            fVar22 = fVar22 + ((float)((ulong)puVar2[3] >> 0x20) + (float)((ulong)puVar3[3] >> 0x20)
                              ) * fVar18;
            pfVar15 = pfVar15 + 1;
            plVar16 = plVar16 + -1;
            plVar17 = plVar17 + 1;
          } while (iVar13 <= iVar5);
        }
        lVar14 = lVar14 + 0x20;
        auVar10._4_4_ = (int)fVar24;
        auVar10._0_4_ = (int)fVar23;
        auVar10._8_4_ = (int)fVar25;
        auVar10._12_4_ = (int)fVar26;
        uVar12 = NEON_sqxtn(CONCAT44((int)fVar24,(int)fVar23),auVar10,4);
        auVar7._4_4_ = (int)fVar20;
        auVar7._0_4_ = (int)fVar19;
        auVar7._8_4_ = (int)fVar21;
        auVar7._12_4_ = (int)fVar22;
        uVar9 = NEON_sqxtn(CONCAT44((int)fVar20,(int)fVar19),auVar7,4);
        *param_3 = uVar12;
        param_3[1] = uVar9;
        param_3 = param_3 + 2;
      } while (lVar14 != ((ulong)uVar6 + 1) * 0x20);
      return (uVar6 + 1) * 8;
    }
  }
  return 0;
}


==================================================================

### FUNC 001c0294 (1796 bytes) name=FUN_001c0294

void FUN_001c0294(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  float *pfVar1;
  long *plVar2;
  long lVar3;
  int iVar4;
  char cVar5;
  uint uVar6;
  int iVar7;
  long lVar8;
  long lVar9;
  long *plVar10;
  long *plVar11;
  long *plVar12;
  undefined2 uVar13;
  long *plVar14;
  float *pfVar15;
  long lVar16;
  long lVar17;
  undefined2 *puVar18;
  long *plVar19;
  long lVar20;
  undefined2 uVar21;
  undefined2 uVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  
  iVar4 = *(int *)(param_1 + 8) / 2;
  fVar25 = *(float *)(param_1 + 0xe8);
  pfVar1 = (float *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 4);
  plVar2 = (long *)(param_2 + (long)iVar4 * 8);
  if ((*(uint *)(param_1 + 0xec) & 1) == 0) {
    if (param_5 != 0) {
      plVar19 = plVar2 + -1;
      do {
        plVar10 = plVar19 + 1;
        iVar7 = 0;
        if (*(char *)(param_1 + 0xe0) != '\0') {
          iVar7 = FUN_001c0030(param_1 + 0x78,plVar10,param_3,param_6);
        }
        if (iVar7 < param_6 + -3) {
          lVar16 = (long)iVar7;
          uVar6 = (uint)((param_6 + -4) - iVar7) >> 2;
          lVar20 = lVar16 << 2;
          lVar17 = lVar16;
          lVar9 = lVar16 + 4;
          while( true ) {
            fVar24 = fVar25;
            fVar28 = fVar25;
            fVar27 = fVar25;
            fVar26 = fVar25;
            if (0 < iVar4) {
              plVar11 = plVar19;
              plVar12 = plVar19 + 2;
              pfVar15 = pfVar1;
              do {
                pfVar15 = pfVar15 + 1;
                plVar14 = plVar11 + -1;
                lVar8 = *plVar11 + lVar20;
                lVar3 = *plVar12 + lVar20;
                fVar23 = *pfVar15;
                fVar24 = fVar24 + fVar23 * (*(float *)(*plVar12 + lVar20) -
                                           *(float *)(*plVar11 + lVar20));
                fVar26 = fVar26 + fVar23 * (*(float *)(lVar3 + 4) - *(float *)(lVar8 + 4));
                fVar27 = fVar27 + fVar23 * (*(float *)(lVar3 + 8) - *(float *)(lVar8 + 8));
                fVar28 = fVar28 + fVar23 * (*(float *)(lVar3 + 0xc) - *(float *)(lVar8 + 0xc));
                plVar11 = plVar14;
                plVar12 = plVar12 + 1;
              } while (plVar19 + (-1 - (ulong)(iVar4 - 1U)) != plVar14);
            }
            lVar17 = lVar17 * 2;
            lVar8 = lrintf(fVar24);
            uVar22 = 0x7fff;
            uVar13 = (short)lVar8;
            if ((0xffff < (int)lVar8 + 0x8000U) && (uVar13 = uVar22, (int)lVar8 < 1)) {
              uVar13 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar17) = uVar13;
            lVar8 = lrintf(fVar26);
            uVar13 = (short)lVar8;
            if ((0xffff < (int)lVar8 + 0x8000U) && (uVar13 = uVar22, (int)lVar8 < 1)) {
              uVar13 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar17 + 2) = uVar13;
            lVar8 = lrintf(fVar27);
            uVar13 = (short)lVar8;
            if ((0xffff < (int)lVar8 + 0x8000U) && (uVar13 = uVar22, (int)lVar8 < 1)) {
              uVar13 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar17 + 4) = uVar13;
            lVar8 = lrintf(fVar28);
            uVar13 = (short)lVar8;
            if ((0xffff < (int)lVar8 + 0x8000U) && (uVar13 = uVar22, (int)lVar8 < 1)) {
              uVar13 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar17 + 6) = uVar13;
            lVar20 = lVar20 + 0x10;
            if (lVar9 == lVar16 + 4 + (ulong)uVar6 * 4) break;
            lVar17 = lVar9;
            lVar9 = lVar9 + 4;
          }
          iVar7 = iVar7 + 4 + uVar6 * 4;
        }
        if (iVar7 < param_6) {
          lVar16 = (long)iVar7;
          lVar20 = lVar16 << 2;
          lVar17 = lVar16;
          lVar9 = lVar16 + 1;
          while( true ) {
            fVar24 = fVar25;
            if (0 < iVar4) {
              plVar11 = plVar19 + 2;
              plVar12 = plVar19;
              pfVar15 = pfVar1;
              do {
                pfVar15 = pfVar15 + 1;
                plVar14 = plVar11 + 1;
                fVar24 = fVar24 + (*(float *)(*plVar11 + lVar20) - *(float *)(*plVar12 + lVar20)) *
                                  *pfVar15;
                plVar11 = plVar14;
                plVar12 = plVar12 + -1;
              } while (plVar14 != plVar19 + (ulong)(iVar4 - 1U) + 3);
            }
            lVar8 = lrintf(fVar24);
            uVar13 = (undefined2)lVar8;
            if ((0xffff < (int)lVar8 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar8 < 1)) {
              uVar13 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar17 * 2) = uVar13;
            lVar20 = lVar20 + 4;
            if (lVar9 == lVar16 + 1 + (ulong)(uint)((param_6 + -1) - iVar7)) break;
            lVar17 = lVar9;
            lVar9 = lVar9 + 1;
          }
        }
        param_3 = param_3 + param_4;
        plVar19 = plVar10;
      } while (plVar10 != plVar2 + (param_5 - 1));
    }
  }
  else if (param_5 != 0) {
    cVar5 = *(char *)(param_1 + 0xe0);
    plVar10 = plVar2;
    plVar19 = plVar2 + -1;
    while( true ) {
      plVar11 = plVar10;
      iVar7 = 0;
      if (cVar5 != '\0') {
        iVar7 = FUN_001c0030(param_1 + 0x78,plVar11,param_3,param_6);
      }
      if (iVar7 < param_6 + -3) {
        lVar17 = (long)iVar7;
        lVar20 = lVar17 << 2;
        uVar6 = (uint)((param_6 + -4) - iVar7) >> 2;
        puVar18 = (undefined2 *)(param_3 + lVar17 * 2);
        do {
          fVar28 = *pfVar1;
          lVar9 = plVar19[1] + lVar20;
          fVar24 = fVar25 + fVar28 * *(float *)(plVar19[1] + lVar20);
          fVar26 = fVar25 + fVar28 * *(float *)(lVar9 + 4);
          fVar27 = fVar25 + fVar28 * *(float *)(lVar9 + 8);
          fVar28 = fVar25 + fVar28 * *(float *)(lVar9 + 0xc);
          if (0 < iVar4) {
            plVar10 = plVar19;
            plVar12 = plVar19 + 2;
            pfVar15 = pfVar1;
            do {
              pfVar15 = pfVar15 + 1;
              plVar14 = plVar10 + -1;
              lVar9 = *plVar10 + lVar20;
              lVar16 = *plVar12 + lVar20;
              fVar23 = *pfVar15;
              fVar24 = fVar24 + fVar23 * (*(float *)(*plVar12 + lVar20) +
                                         *(float *)(*plVar10 + lVar20));
              fVar26 = fVar26 + fVar23 * (*(float *)(lVar16 + 4) + *(float *)(lVar9 + 4));
              fVar27 = fVar27 + fVar23 * (*(float *)(lVar16 + 8) + *(float *)(lVar9 + 8));
              fVar28 = fVar28 + fVar23 * (*(float *)(lVar16 + 0xc) + *(float *)(lVar9 + 0xc));
              plVar10 = plVar14;
              plVar12 = plVar12 + 1;
            } while (plVar19 + (-1 - (ulong)(iVar4 - 1U)) != plVar14);
          }
          lVar9 = lrintf(fVar24);
          uVar22 = 0x8000;
          uVar21 = 0x7fff;
          uVar13 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar21, (int)lVar9 < 1)) {
            uVar13 = uVar22;
          }
          *puVar18 = uVar13;
          lVar9 = lrintf(fVar26);
          uVar13 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar21, (int)lVar9 < 1)) {
            uVar13 = uVar22;
          }
          puVar18[1] = uVar13;
          lVar9 = lrintf(fVar27);
          uVar13 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar21, (int)lVar9 < 1)) {
            uVar13 = uVar22;
          }
          puVar18[2] = uVar13;
          lVar9 = lrintf(fVar28);
          uVar13 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = uVar21, (int)lVar9 < 1)) {
            uVar13 = uVar22;
          }
          lVar20 = lVar20 + 0x10;
          puVar18[3] = uVar13;
          puVar18 = puVar18 + 4;
        } while (lVar20 != (lVar17 + 4 + (ulong)uVar6 * 4) * 4);
        iVar7 = iVar7 + 4 + uVar6 * 4;
      }
      if (iVar7 < param_6) {
        lVar17 = (long)iVar7;
        lVar20 = lVar17 << 2;
        puVar18 = (undefined2 *)(param_3 + lVar17 * 2);
        do {
          fVar24 = fVar25 + *(float *)(plVar19[1] + lVar20) * *pfVar1;
          if (0 < iVar4) {
            plVar10 = plVar19 + 2;
            plVar12 = plVar19;
            pfVar15 = pfVar1;
            do {
              pfVar15 = pfVar15 + 1;
              plVar14 = plVar10 + 1;
              fVar24 = fVar24 + (*(float *)(*plVar10 + lVar20) + *(float *)(*plVar12 + lVar20)) *
                                *pfVar15;
              plVar10 = plVar14;
              plVar12 = plVar12 + -1;
            } while (plVar19 + (ulong)(iVar4 - 1U) + 3 != plVar14);
          }
          lVar9 = lrintf(fVar24);
          uVar13 = (undefined2)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar9 < 1)) {
            uVar13 = 0x8000;
          }
          lVar20 = lVar20 + 4;
          *puVar18 = uVar13;
          puVar18 = puVar18 + 1;
        } while (lVar20 != (lVar17 + 1 + (ulong)(uint)((param_6 + -1) - iVar7)) * 4);
      }
      param_3 = param_3 + param_4;
      if (plVar2 + (param_5 - 1) == plVar11) break;
      cVar5 = *(char *)(param_1 + 0xe0);
      plVar10 = plVar11 + 1;
      plVar19 = plVar11;
    }
  }
  return;
}


==================================================================

### FUNC 001c0998 (788 bytes) name=FUN_001c0998

void FUN_001c0998(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  uint uVar2;
  float *pfVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  undefined2 uVar7;
  long *plVar8;
  long lVar9;
  undefined2 *puVar10;
  long *plVar11;
  float *pfVar12;
  undefined2 uVar13;
  undefined2 uVar14;
  long *plVar15;
  long lVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float __x;
  float __x_00;
  
  pfVar12 = *(float **)(param_1 + 0x20);
  fVar20 = *(float *)(param_1 + 0xe8);
  iVar1 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    plVar11 = (long *)(param_2 + 8);
    plVar15 = (long *)(param_2 + ((ulong)(iVar1 - 2) + 2) * 8);
    do {
      iVar4 = 0;
      if (*(char *)(param_1 + 0xe0) != '\0') {
        iVar4 = FUN_001c0030(param_1 + 0x78,plVar11 + -1,param_3,param_6);
      }
      uVar13 = 0x8000;
      uVar14 = 0x7fff;
      if (iVar4 < param_6 + -3) {
        lVar9 = (long)iVar4;
        uVar2 = (uint)((param_6 + -4) - iVar4) >> 2;
        lVar16 = lVar9 << 2;
        puVar10 = (undefined2 *)(param_3 + lVar9 * 2);
        do {
          fVar18 = *pfVar12;
          lVar5 = plVar11[-1] + lVar16;
          fVar17 = fVar20 + fVar18 * *(float *)(plVar11[-1] + lVar16);
          __x_00 = fVar20 + fVar18 * *(float *)(lVar5 + 4);
          __x = fVar20 + fVar18 * *(float *)(lVar5 + 8);
          fVar18 = fVar20 + fVar18 * *(float *)(lVar5 + 0xc);
          plVar6 = plVar11;
          pfVar3 = pfVar12;
          if (1 < iVar1) {
            do {
              plVar8 = plVar6 + 1;
              fVar19 = pfVar3[1];
              lVar5 = *plVar6 + lVar16;
              fVar17 = fVar17 + fVar19 * *(float *)(*plVar6 + lVar16);
              __x_00 = __x_00 + fVar19 * *(float *)(lVar5 + 4);
              __x = __x + fVar19 * *(float *)(lVar5 + 8);
              fVar18 = fVar18 + fVar19 * *(float *)(lVar5 + 0xc);
              plVar6 = plVar8;
              pfVar3 = pfVar3 + 1;
            } while (plVar15 != plVar8);
          }
          lVar5 = lrintf(fVar17);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar14, (int)lVar5 < 1)) {
            uVar7 = uVar13;
          }
          *puVar10 = uVar7;
          lVar5 = lrintf(__x_00);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar14, (int)lVar5 < 1)) {
            uVar7 = uVar13;
          }
          puVar10[1] = uVar7;
          lVar5 = lrintf(__x);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar5 < 1)) {
            uVar7 = 0x8000;
          }
          puVar10[2] = uVar7;
          lVar5 = lrintf(fVar18);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = 0x7fff, (int)lVar5 < 1)) {
            uVar7 = 0x8000;
          }
          lVar16 = lVar16 + 0x10;
          puVar10[3] = uVar7;
          puVar10 = puVar10 + 4;
        } while (lVar16 != (lVar9 + 4 + (ulong)uVar2 * 4) * 4);
        iVar4 = iVar4 + 4 + uVar2 * 4;
      }
      if (iVar4 < param_6) {
        lVar9 = (long)iVar4;
        lVar16 = lVar9 << 2;
        puVar10 = (undefined2 *)(param_3 + lVar9 * 2);
        do {
          fVar17 = fVar20 + *(float *)(plVar11[-1] + lVar16) * *pfVar12;
          plVar6 = plVar11;
          pfVar3 = pfVar12;
          if (1 < iVar1) {
            do {
              plVar8 = plVar6 + 1;
              fVar17 = fVar17 + *(float *)(*plVar6 + lVar16) * pfVar3[1];
              plVar6 = plVar8;
              pfVar3 = pfVar3 + 1;
            } while (plVar15 != plVar8);
          }
          lVar5 = lrintf(fVar17);
          uVar7 = (short)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar14, (int)lVar5 < 1)) {
            uVar7 = uVar13;
          }
          lVar16 = lVar16 + 4;
          *puVar10 = uVar7;
          puVar10 = puVar10 + 1;
        } while (lVar16 != (lVar9 + 1 + (ulong)(uint)((param_6 + -1) - iVar4)) * 4);
      }
      plVar11 = plVar11 + 1;
      plVar15 = plVar15 + 1;
      param_3 = param_3 + param_4;
    } while (plVar11 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001c0cac (692 bytes) name=FUN_001c0cac

uint FUN_001c0cac(uint *param_1,long *param_2,undefined8 *param_3,int param_4)

{
  float *pfVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  float *pfVar6;
  long *plVar7;
  long *plVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  float fVar13;
  float fVar14;
  float fVar17;
  undefined8 uVar15;
  float fVar18;
  undefined1 auVar16 [16];
  float fVar19;
  float fVar20;
  float fVar23;
  undefined8 uVar21;
  float fVar24;
  undefined1 auVar22 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  
  fVar26 = (float)param_1[1];
  iVar4 = param_1[4] + param_1[5] + -1;
  iVar2 = iVar4 / 2;
  pfVar1 = (float *)(*(long *)(param_1 + 6) + (long)iVar2 * 4);
  if ((*param_1 & 1) == 0) {
    fVar27 = pfVar1[1];
    if (param_4 < 8) {
      return *param_1 & 1;
    }
    uVar3 = param_4 - 8U >> 3;
    lVar5 = 0;
    do {
      auVar12 = NEON_scvtf(*(undefined1 (*) [16])(param_2[1] + lVar5),4);
      auVar11 = NEON_scvtf(*(undefined1 (*) [16])(param_2[-1] + lVar5),4);
      auVar10 = NEON_scvtf(((undefined1 (*) [16])(param_2[1] + lVar5))[1],4);
      auVar9 = NEON_scvtf(((undefined1 (*) [16])(param_2[-1] + lVar5))[1],4);
      fVar19 = fVar26 + (auVar12._0_4_ - auVar11._0_4_) * fVar27;
      fVar20 = fVar26 + (auVar12._4_4_ - auVar11._4_4_) * fVar27;
      fVar23 = fVar26 + (auVar12._8_4_ - auVar11._8_4_) * fVar27;
      fVar24 = fVar26 + (auVar12._12_4_ - auVar11._12_4_) * fVar27;
      fVar28 = fVar26 + (auVar10._0_4_ - auVar9._0_4_) * fVar27;
      fVar14 = fVar26 + (auVar10._4_4_ - auVar9._4_4_) * fVar27;
      fVar17 = fVar26 + (auVar10._8_4_ - auVar9._8_4_) * fVar27;
      fVar18 = fVar26 + (auVar10._12_4_ - auVar9._12_4_) * fVar27;
      if (1 < iVar2) {
        iVar4 = 2;
        pfVar6 = pfVar1 + 2;
        plVar7 = param_2 + -2;
        plVar8 = param_2 + 2;
        do {
          iVar4 = iVar4 + 1;
          fVar25 = *pfVar6;
          auVar12 = NEON_scvtf(*(undefined1 (*) [16])(*plVar8 + lVar5),4);
          auVar11 = NEON_scvtf(*(undefined1 (*) [16])(*plVar7 + lVar5),4);
          auVar10 = NEON_scvtf(((undefined1 (*) [16])(*plVar8 + lVar5))[1],4);
          auVar9 = NEON_scvtf(((undefined1 (*) [16])(*plVar7 + lVar5))[1],4);
          fVar19 = fVar19 + (auVar12._0_4_ - auVar11._0_4_) * fVar25;
          fVar20 = fVar20 + (auVar12._4_4_ - auVar11._4_4_) * fVar25;
          fVar23 = fVar23 + (auVar12._8_4_ - auVar11._8_4_) * fVar25;
          fVar24 = fVar24 + (auVar12._12_4_ - auVar11._12_4_) * fVar25;
          fVar28 = fVar28 + (auVar10._0_4_ - auVar9._0_4_) * fVar25;
          fVar14 = fVar14 + (auVar10._4_4_ - auVar9._4_4_) * fVar25;
          fVar17 = fVar17 + (auVar10._8_4_ - auVar9._8_4_) * fVar25;
          fVar18 = fVar18 + (auVar10._12_4_ - auVar9._12_4_) * fVar25;
          pfVar6 = pfVar6 + 1;
          plVar7 = plVar7 + -1;
          plVar8 = plVar8 + 1;
        } while (iVar4 <= iVar2);
      }
      auVar11._0_8_ = CONCAT44((int)fVar20,(int)fVar19);
      auVar11._8_4_ = (int)fVar23;
      auVar11._12_4_ = (int)fVar24;
      lVar5 = lVar5 + 0x20;
      auVar10._0_8_ = CONCAT44((int)fVar14,(int)fVar28);
      auVar10._8_4_ = (int)fVar17;
      auVar10._12_4_ = (int)fVar18;
      uVar21 = NEON_sqxtn(auVar11._0_8_,auVar11,4);
      uVar15 = NEON_sqxtn(auVar10._0_8_,auVar10,4);
      auVar9._8_8_ = uVar15;
      auVar9._0_8_ = uVar21;
      uVar15 = NEON_sqxtun(uVar21,auVar9,2);
      *param_3 = uVar15;
      param_3 = param_3 + 1;
    } while (lVar5 != ((ulong)uVar3 + 1) * 0x20);
    return (uVar3 + 1) * 8;
  }
  if (iVar4 != 1) {
    fVar27 = *pfVar1;
    fVar28 = pfVar1[1];
    if (7 < param_4) {
      uVar3 = param_4 - 8U >> 3;
      lVar5 = 0;
      do {
        auVar22 = NEON_scvtf(*(undefined1 (*) [16])(*param_2 + lVar5),4);
        auVar12 = NEON_scvtf(*(undefined1 (*) [16])(param_2[1] + lVar5),4);
        auVar11 = NEON_scvtf(*(undefined1 (*) [16])(param_2[-1] + lVar5),4);
        auVar16 = NEON_scvtf(((undefined1 (*) [16])(*param_2 + lVar5))[1],4);
        auVar10 = NEON_scvtf(((undefined1 (*) [16])(param_2[1] + lVar5))[1],4);
        auVar9 = NEON_scvtf(((undefined1 (*) [16])(param_2[-1] + lVar5))[1],4);
        fVar20 = fVar26 + auVar22._0_4_ * fVar27 + (auVar12._0_4_ + auVar11._0_4_) * fVar28;
        fVar23 = fVar26 + auVar22._4_4_ * fVar27 + (auVar12._4_4_ + auVar11._4_4_) * fVar28;
        fVar24 = fVar26 + auVar22._8_4_ * fVar27 + (auVar12._8_4_ + auVar11._8_4_) * fVar28;
        fVar25 = fVar26 + auVar22._12_4_ * fVar27 + (auVar12._12_4_ + auVar11._12_4_) * fVar28;
        fVar14 = fVar26 + auVar16._0_4_ * fVar27 + (auVar10._0_4_ + auVar9._0_4_) * fVar28;
        fVar17 = fVar26 + auVar16._4_4_ * fVar27 + (auVar10._4_4_ + auVar9._4_4_) * fVar28;
        fVar18 = fVar26 + auVar16._8_4_ * fVar27 + (auVar10._8_4_ + auVar9._8_4_) * fVar28;
        fVar19 = fVar26 + auVar16._12_4_ * fVar27 + (auVar10._12_4_ + auVar9._12_4_) * fVar28;
        if (1 < iVar2) {
          iVar4 = 2;
          pfVar6 = pfVar1 + 2;
          plVar7 = param_2 + -2;
          plVar8 = param_2 + 2;
          do {
            iVar4 = iVar4 + 1;
            fVar13 = *pfVar6;
            auVar12 = NEON_scvtf(*(undefined1 (*) [16])(*plVar8 + lVar5),4);
            auVar11 = NEON_scvtf(*(undefined1 (*) [16])(*plVar7 + lVar5),4);
            auVar10 = NEON_scvtf(((undefined1 (*) [16])(*plVar8 + lVar5))[1],4);
            auVar9 = NEON_scvtf(((undefined1 (*) [16])(*plVar7 + lVar5))[1],4);
            fVar20 = fVar20 + (auVar12._0_4_ + auVar11._0_4_) * fVar13;
            fVar23 = fVar23 + (auVar12._4_4_ + auVar11._4_4_) * fVar13;
            fVar24 = fVar24 + (auVar12._8_4_ + auVar11._8_4_) * fVar13;
            fVar25 = fVar25 + (auVar12._12_4_ + auVar11._12_4_) * fVar13;
            fVar14 = fVar14 + (auVar10._0_4_ + auVar9._0_4_) * fVar13;
            fVar17 = fVar17 + (auVar10._4_4_ + auVar9._4_4_) * fVar13;
            fVar18 = fVar18 + (auVar10._8_4_ + auVar9._8_4_) * fVar13;
            fVar19 = fVar19 + (auVar10._12_4_ + auVar9._12_4_) * fVar13;
            pfVar6 = pfVar6 + 1;
            plVar7 = plVar7 + -1;
            plVar8 = plVar8 + 1;
          } while (iVar4 <= iVar2);
        }
        auVar22._0_8_ = CONCAT44((int)fVar23,(int)fVar20);
        auVar22._8_4_ = (int)fVar24;
        auVar22._12_4_ = (int)fVar25;
        lVar5 = lVar5 + 0x20;
        auVar16._0_8_ = CONCAT44((int)fVar17,(int)fVar14);
        auVar16._8_4_ = (int)fVar18;
        auVar16._12_4_ = (int)fVar19;
        uVar21 = NEON_sqxtn(auVar22._0_8_,auVar22,4);
        uVar15 = NEON_sqxtn(auVar16._0_8_,auVar16,4);
        auVar12._8_8_ = uVar15;
        auVar12._0_8_ = uVar21;
        uVar15 = NEON_sqxtun(uVar21,auVar12,2);
        *param_3 = uVar15;
        param_3 = param_3 + 1;
      } while (lVar5 != ((ulong)uVar3 + 1) * 0x20);
      return (uVar3 + 1) * 8;
    }
  }
  return 0;
}


==================================================================

### FUNC 001c0f60 (2576 bytes) name=FUN_001c0f60

void FUN_001c0f60(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  undefined1 *puVar1;
  long *plVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  bool bVar14;
  bool bVar15;
  bool bVar16;
  char cVar17;
  int iVar18;
  long lVar19;
  undefined1 *puVar20;
  int *piVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  int *piVar25;
  int *piVar26;
  long lVar27;
  long *plVar28;
  int iVar29;
  
  uVar5 = *(uint *)(param_1 + 0xe4);
  lVar19 = (long)(*(int *)(param_1 + 8) / 2);
  lVar22 = lVar19 * 4;
  iVar9 = *(int *)(*(long *)(param_1 + 0x20) + lVar22);
  lVar22 = *(long *)(param_1 + 0x20) + lVar22;
  if (iVar9 == 2) {
    iVar29 = *(int *)(lVar22 + 4);
    if (iVar29 != 1) {
      bVar14 = false;
      bVar16 = false;
      bVar15 = false;
      goto LAB_001c0ff0;
    }
    bVar15 = true;
  }
  else if (iVar9 == -2) {
    iVar29 = *(int *)(lVar22 + 4);
    bVar15 = false;
    if (iVar29 == 1) {
      bVar14 = false;
      bVar16 = true;
      goto LAB_001c0ff0;
    }
  }
  else {
    iVar29 = *(int *)(lVar22 + 4);
    if (iVar9 != 0) {
      bVar14 = false;
      bVar15 = false;
      bVar16 = bVar15;
      goto LAB_001c0ff0;
    }
    bVar15 = false;
    if ((iVar29 + 1U & 0xfffffffd) == 0) {
      bVar14 = true;
      bVar16 = bVar15;
      goto LAB_001c0ff0;
    }
  }
  bVar14 = false;
  bVar16 = false;
LAB_001c0ff0:
  iVar6 = *(int *)(param_1 + 0xe0);
  plVar28 = (long *)(param_2 + lVar19 * 8);
  uVar7 = *(uint *)(param_1 + 0x70);
  iVar8 = *(int *)(param_1 + 0x74);
  if (param_5 != 0) {
    plVar2 = plVar28 + (ulong)(param_5 - 1) + 1;
    iVar11 = param_6 + -3;
    iVar12 = param_6 + -1;
    iVar13 = param_6 + -4;
    do {
      while( true ) {
        cVar17 = cv::checkHardwareSupport(100);
        iVar18 = 0;
        if (cVar17 != '\0') {
          iVar18 = FUN_001c0cac(param_1 + 0x78,plVar28,param_3,param_6);
        }
        lVar22 = plVar28[-1];
        lVar27 = *plVar28;
        lVar19 = plVar28[1];
        if ((uVar5 & 1) != 0) break;
        if (bVar14) {
          lVar27 = lVar19;
          if (iVar29 < 0) {
            lVar27 = lVar22;
            lVar22 = lVar19;
          }
          if (iVar18 < iVar11) {
            lVar19 = (long)iVar18;
            uVar10 = (uint)(iVar13 - iVar18) >> 2;
            puVar20 = (undefined1 *)(param_3 + lVar19);
            piVar21 = (int *)(lVar22 + lVar19 * 4);
            piVar25 = (int *)(lVar27 + lVar19 * 4);
            do {
              puVar1 = puVar20 + 4;
              uVar3 = (*piVar25 - *piVar21) + iVar6 + iVar8 >> (uVar7 & 0x1f);
              uVar4 = (piVar25[1] - piVar21[1]) + iVar6 + iVar8 >> (uVar7 & 0x1f);
              if (0xff < uVar3) {
                uVar3 = -(uint)(0 < (int)uVar3);
              }
              *puVar20 = (char)uVar3;
              if (0xff < uVar4) {
                uVar4 = -(uint)(0 < (int)uVar4);
              }
              puVar20[1] = (char)uVar4;
              uVar3 = (piVar25[2] - piVar21[2]) + iVar6 + iVar8 >> (uVar7 & 0x1f);
              uVar4 = (piVar25[3] - piVar21[3]) + iVar6 + iVar8 >> (uVar7 & 0x1f);
              if (0xff < uVar3) {
                uVar3 = -(uint)(0 < (int)uVar3);
              }
              if (0xff < uVar4) {
                uVar4 = -(uint)(0 < (int)uVar4);
              }
              puVar20[2] = (char)uVar3;
              puVar20[3] = (char)uVar4;
              puVar20 = puVar1;
              piVar21 = piVar21 + 4;
              piVar25 = piVar25 + 4;
            } while (puVar1 != (undefined1 *)(param_3 + lVar19 + 4 + (ulong)uVar10 * 4));
            iVar18 = iVar18 + 4 + uVar10 * 4;
          }
          if (iVar18 < param_6) {
            lVar19 = 0;
            lVar23 = (long)iVar18 * 4;
            do {
              uVar10 = (*(int *)(lVar27 + lVar23 + lVar19 * 4) -
                       *(int *)(lVar22 + lVar23 + lVar19 * 4)) + iVar6 + iVar8 >> (uVar7 & 0x1f);
              if (0xff < uVar10) {
                uVar10 = -(uint)(0 < (int)uVar10);
              }
              *(char *)(param_3 + iVar18 + lVar19) = (char)uVar10;
              lVar19 = lVar19 + 1;
            } while (lVar19 != (ulong)(uint)(iVar12 - iVar18) + 1);
          }
        }
        else {
          if (iVar18 < iVar11) {
            lVar27 = (long)iVar18;
            uVar10 = (uint)(iVar13 - iVar18) >> 2;
            puVar20 = (undefined1 *)(param_3 + lVar27);
            piVar21 = (int *)(lVar22 + lVar27 * 4);
            piVar25 = (int *)(lVar19 + lVar27 * 4);
            do {
              puVar1 = puVar20 + 4;
              uVar3 = iVar6 + (*piVar25 - *piVar21) * iVar29 + iVar8 >> (uVar7 & 0x1f);
              uVar4 = iVar6 + (piVar25[1] - piVar21[1]) * iVar29 + iVar8 >> (uVar7 & 0x1f);
              if (0xff < uVar3) {
                uVar3 = -(uint)(0 < (int)uVar3);
              }
              *puVar20 = (char)uVar3;
              if (0xff < uVar4) {
                uVar4 = -(uint)(0 < (int)uVar4);
              }
              puVar20[1] = (char)uVar4;
              uVar3 = iVar6 + (piVar25[2] - piVar21[2]) * iVar29 + iVar8 >> (uVar7 & 0x1f);
              uVar4 = iVar6 + (piVar25[3] - piVar21[3]) * iVar29 + iVar8 >> (uVar7 & 0x1f);
              if (0xff < uVar3) {
                uVar3 = -(uint)(0 < (int)uVar3);
              }
              if (0xff < uVar4) {
                uVar4 = -(uint)(0 < (int)uVar4);
              }
              puVar20[2] = (char)uVar3;
              puVar20[3] = (char)uVar4;
              puVar20 = puVar1;
              piVar21 = piVar21 + 4;
              piVar25 = piVar25 + 4;
            } while (puVar1 != (undefined1 *)(param_3 + lVar27 + 4 + (ulong)uVar10 * 4));
            iVar18 = iVar18 + 4 + uVar10 * 4;
          }
          if (iVar18 < param_6) {
            lVar23 = (long)iVar18 * 4;
            lVar27 = 0;
            do {
              uVar10 = iVar6 + (*(int *)(lVar19 + lVar23 + lVar27 * 4) -
                               *(int *)(lVar22 + lVar23 + lVar27 * 4)) * iVar29 + iVar8 >>
                       (uVar7 & 0x1f);
              if (0xff < uVar10) {
                uVar10 = -(uint)(0 < (int)uVar10);
              }
              *(char *)(param_3 + iVar18 + lVar27) = (char)uVar10;
              lVar27 = lVar27 + 1;
            } while (lVar27 != (ulong)(uint)(iVar12 - iVar18) + 1);
          }
        }
joined_r0x001c1750:
        param_3 = param_3 + param_4;
        plVar28 = plVar28 + 1;
        if (plVar28 == plVar2) {
          return;
        }
      }
      if (bVar15) {
        if (iVar18 < iVar11) {
          lVar23 = (long)iVar18;
          lVar24 = lVar23 * 4;
          uVar10 = (uint)(iVar13 - iVar18) >> 2;
          puVar20 = (undefined1 *)(param_3 + lVar23);
          piVar21 = (int *)(lVar19 + lVar24);
          piVar25 = (int *)(lVar27 + lVar24);
          piVar26 = (int *)(lVar22 + lVar24);
          do {
            uVar3 = *piVar26 + *piVar25 * 2 + *piVar21 + iVar6 + iVar8 >> (uVar7 & 0x1f);
            puVar1 = puVar20 + 4;
            uVar4 = piVar26[1] + piVar25[1] * 2 + piVar21[1] + iVar6 + iVar8 >> (uVar7 & 0x1f);
            if (0xff < uVar3) {
              uVar3 = -(uint)(0 < (int)uVar3);
            }
            *puVar20 = (char)uVar3;
            if (0xff < uVar4) {
              uVar4 = -(uint)(0 < (int)uVar4);
            }
            puVar20[1] = (char)uVar4;
            uVar3 = piVar26[2] + piVar25[2] * 2 + piVar21[2] + iVar6 + iVar8 >> (uVar7 & 0x1f);
            uVar4 = piVar26[3] + piVar25[3] * 2 + piVar21[3] + iVar6 + iVar8 >> (uVar7 & 0x1f);
            if (0xff < uVar3) {
              uVar3 = -(uint)(0 < (int)uVar3);
            }
            if (0xff < uVar4) {
              uVar4 = -(uint)(0 < (int)uVar4);
            }
            puVar20[2] = (char)uVar3;
            puVar20[3] = (char)uVar4;
            puVar20 = puVar1;
            piVar21 = piVar21 + 4;
            piVar25 = piVar25 + 4;
            piVar26 = piVar26 + 4;
          } while (puVar1 != (undefined1 *)(param_3 + lVar23 + 4 + (ulong)uVar10 * 4));
          iVar18 = iVar18 + 4 + uVar10 * 4;
        }
        if (iVar18 < param_6) {
          lVar23 = 0;
          lVar24 = (long)iVar18 * 4;
          do {
            uVar10 = *(int *)(lVar22 + lVar24 + lVar23 * 4) +
                     *(int *)(lVar27 + lVar24 + lVar23 * 4) * 2 +
                     *(int *)(lVar19 + lVar24 + lVar23 * 4) + iVar6 + iVar8 >> (uVar7 & 0x1f);
            if (0xff < uVar10) {
              uVar10 = -(uint)(0 < (int)uVar10);
            }
            *(char *)(param_3 + iVar18 + lVar23) = (char)uVar10;
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)(iVar12 - iVar18) + 1);
        }
        goto joined_r0x001c1750;
      }
      if (!bVar16) {
        if (iVar18 < iVar11) {
          lVar23 = (long)iVar18;
          lVar24 = lVar23 * 4;
          uVar10 = (uint)(iVar13 - iVar18) >> 2;
          puVar20 = (undefined1 *)(param_3 + lVar23);
          piVar21 = (int *)(lVar27 + lVar24);
          piVar25 = (int *)(lVar19 + lVar24);
          piVar26 = (int *)(lVar22 + lVar24);
          do {
            puVar1 = puVar20 + 4;
            uVar3 = iVar9 * *piVar21 + (*piVar26 + *piVar25) * iVar29 + iVar6 + iVar8 >>
                    (uVar7 & 0x1f);
            uVar4 = iVar9 * piVar21[1] + (piVar26[1] + piVar25[1]) * iVar29 + iVar6 + iVar8 >>
                    (uVar7 & 0x1f);
            if (0xff < uVar3) {
              uVar3 = -(uint)(0 < (int)uVar3);
            }
            *puVar20 = (char)uVar3;
            if (0xff < uVar4) {
              uVar4 = -(uint)(0 < (int)uVar4);
            }
            puVar20[1] = (char)uVar4;
            uVar3 = iVar9 * piVar21[2] + (piVar26[2] + piVar25[2]) * iVar29 + iVar6 + iVar8 >>
                    (uVar7 & 0x1f);
            uVar4 = iVar9 * piVar21[3] + (piVar26[3] + piVar25[3]) * iVar29 + iVar6 + iVar8 >>
                    (uVar7 & 0x1f);
            if (0xff < uVar3) {
              uVar3 = -(uint)(0 < (int)uVar3);
            }
            if (0xff < uVar4) {
              uVar4 = -(uint)(0 < (int)uVar4);
            }
            puVar20[2] = (char)uVar3;
            puVar20[3] = (char)uVar4;
            puVar20 = puVar1;
            piVar21 = piVar21 + 4;
            piVar25 = piVar25 + 4;
            piVar26 = piVar26 + 4;
          } while (puVar1 != (undefined1 *)(param_3 + lVar23 + 4 + (ulong)uVar10 * 4));
          iVar18 = iVar18 + 4 + uVar10 * 4;
        }
        if (iVar18 < param_6) {
          lVar23 = 0;
          lVar24 = (long)iVar18 * 4;
          do {
            uVar10 = iVar9 * *(int *)(lVar27 + lVar24 + lVar23 * 4) +
                     (*(int *)(lVar22 + lVar24 + lVar23 * 4) +
                     *(int *)(lVar19 + lVar24 + lVar23 * 4)) * iVar29 + iVar6 + iVar8 >>
                     (uVar7 & 0x1f);
            if (0xff < uVar10) {
              uVar10 = -(uint)(0 < (int)uVar10);
            }
            *(char *)(param_3 + iVar18 + lVar23) = (char)uVar10;
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)(iVar12 - iVar18) + 1);
        }
        goto joined_r0x001c1750;
      }
      if (iVar18 < iVar11) {
        lVar23 = (long)iVar18;
        lVar24 = lVar23 * 4;
        uVar10 = (uint)(iVar13 - iVar18) >> 2;
        puVar20 = (undefined1 *)(param_3 + lVar23);
        piVar21 = (int *)(lVar19 + lVar24);
        piVar25 = (int *)(lVar27 + lVar24);
        piVar26 = (int *)(lVar22 + lVar24);
        do {
          uVar3 = *piVar26 + *piVar25 * -2 + *piVar21 + iVar6 + iVar8 >> (uVar7 & 0x1f);
          puVar1 = puVar20 + 4;
          uVar4 = piVar26[1] + piVar25[1] * -2 + piVar21[1] + iVar6 + iVar8 >> (uVar7 & 0x1f);
          if (0xff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          *puVar20 = (char)uVar3;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar20[1] = (char)uVar4;
          uVar3 = piVar26[2] + piVar25[2] * -2 + piVar21[2] + iVar6 + iVar8 >> (uVar7 & 0x1f);
          uVar4 = piVar26[3] + piVar25[3] * -2 + piVar21[3] + iVar6 + iVar8 >> (uVar7 & 0x1f);
          if (0xff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          puVar20[2] = (char)uVar3;
          puVar20[3] = (char)uVar4;
          puVar20 = puVar1;
          piVar21 = piVar21 + 4;
          piVar25 = piVar25 + 4;
          piVar26 = piVar26 + 4;
        } while (puVar1 != (undefined1 *)(param_3 + lVar23 + 4 + (ulong)uVar10 * 4));
        iVar18 = iVar18 + 4 + uVar10 * 4;
      }
      if (param_6 <= iVar18) goto joined_r0x001c1750;
      lVar23 = 0;
      lVar24 = (long)iVar18 * 4;
      do {
        uVar10 = *(int *)(lVar22 + lVar24 + lVar23 * 4) +
                 *(int *)(lVar27 + lVar24 + lVar23 * 4) * -2 +
                 *(int *)(lVar19 + lVar24 + lVar23 * 4) + iVar6 + iVar8 >> (uVar7 & 0x1f);
        if (0xff < uVar10) {
          uVar10 = -(uint)(0 < (int)uVar10);
        }
        *(char *)(param_3 + iVar18 + lVar23) = (char)uVar10;
        lVar23 = lVar23 + 1;
      } while (lVar23 != (ulong)(uint)(iVar12 - iVar18) + 1);
      plVar28 = plVar28 + 1;
      param_3 = param_3 + param_4;
    } while (plVar28 != plVar2);
  }
  return;
}


==================================================================

### FUNC 001c1970 (1620 bytes) name=FUN_001c1970

void FUN_001c1970(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  undefined1 *puVar1;
  int *piVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  char cVar12;
  int iVar13;
  int iVar14;
  long *plVar15;
  uint uVar16;
  uint uVar17;
  long *plVar18;
  long *plVar19;
  long *plVar20;
  long lVar21;
  long lVar22;
  long lVar23;
  undefined1 *puVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  int *piVar28;
  long *plVar29;
  uint uVar30;
  
  iVar8 = *(int *)(param_1 + 0xe0);
  iVar7 = *(int *)(param_1 + 8) / 2;
  uVar9 = *(uint *)(param_1 + 0x70);
  iVar10 = *(int *)(param_1 + 0x74);
  piVar2 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar7 * 4);
  plVar3 = (long *)(param_2 + (long)iVar7 * 8);
  if ((*(uint *)(param_1 + 0xe4) & 1) == 0) {
    if (param_5 != 0) {
      plVar29 = plVar3 + -1;
      do {
        plVar18 = plVar29 + 1;
        cVar12 = cv::checkHardwareSupport(100);
        iVar14 = 0;
        if (cVar12 != '\0') {
          iVar14 = FUN_001c0cac(param_1 + 0x78,plVar18,param_3,param_6);
        }
        if (iVar14 < param_6 + -3) {
          lVar23 = (long)iVar14;
          lVar21 = lVar23 << 2;
          uVar30 = (uint)((param_6 + -4) - iVar14) >> 2;
          lVar22 = lVar23;
          lVar6 = lVar23 + 4;
          while( true ) {
            iVar27 = iVar8;
            iVar13 = iVar8;
            iVar25 = iVar8;
            iVar26 = iVar8;
            if (0 < iVar7) {
              plVar15 = plVar29;
              plVar20 = plVar29 + 2;
              piVar28 = piVar2;
              do {
                piVar28 = piVar28 + 1;
                plVar19 = plVar15 + -1;
                lVar4 = *plVar15 + lVar21;
                iVar11 = *piVar28;
                lVar5 = *plVar20 + lVar21;
                iVar26 = iVar26 + (*(int *)(*plVar20 + lVar21) - *(int *)(*plVar15 + lVar21)) *
                                  iVar11;
                iVar25 = iVar25 + (*(int *)(lVar5 + 4) - *(int *)(lVar4 + 4)) * iVar11;
                iVar13 = iVar13 + (*(int *)(lVar5 + 8) - *(int *)(lVar4 + 8)) * iVar11;
                iVar27 = iVar27 + (*(int *)(lVar5 + 0xc) - *(int *)(lVar4 + 0xc)) * iVar11;
                plVar15 = plVar19;
                plVar20 = plVar20 + 1;
              } while (plVar29 + (-1 - (ulong)(iVar7 - 1)) != plVar19);
            }
            uVar16 = iVar26 + iVar10 >> (uVar9 & 0x1f);
            if (0xff < uVar16) {
              uVar16 = -(uint)(0 < (int)uVar16);
            }
            *(char *)(param_3 + lVar22) = (char)uVar16;
            uVar16 = iVar25 + iVar10 >> (uVar9 & 0x1f);
            if (0xff < uVar16) {
              uVar16 = -(uint)(0 < (int)uVar16);
            }
            *(char *)(param_3 + lVar22 + 1) = (char)uVar16;
            uVar16 = iVar13 + iVar10 >> (uVar9 & 0x1f);
            if (0xff < uVar16) {
              uVar16 = -(uint)(0 < (int)uVar16);
            }
            *(char *)(param_3 + lVar22 + 2) = (char)uVar16;
            uVar16 = iVar27 + iVar10 >> (uVar9 & 0x1f);
            if (0xff < uVar16) {
              uVar16 = -(uint)(0 < (int)uVar16);
            }
            *(char *)(param_3 + lVar22 + 3) = (char)uVar16;
            lVar21 = lVar21 + 0x10;
            if (lVar6 == lVar23 + 4 + (ulong)uVar30 * 4) break;
            lVar22 = lVar6;
            lVar6 = lVar6 + 4;
          }
          iVar14 = iVar14 + 4 + uVar30 * 4;
        }
        if (iVar14 < param_6) {
          lVar23 = (long)iVar14;
          lVar21 = lVar23 << 2;
          lVar22 = lVar23;
          lVar6 = lVar23 + 1;
          while( true ) {
            iVar26 = iVar8;
            if (0 < iVar7) {
              plVar15 = plVar29 + 2;
              plVar20 = plVar29;
              piVar28 = piVar2;
              do {
                piVar28 = piVar28 + 1;
                plVar19 = plVar15 + 1;
                iVar26 = iVar26 + (*(int *)(*plVar15 + lVar21) - *(int *)(*plVar20 + lVar21)) *
                                  *piVar28;
                plVar15 = plVar19;
                plVar20 = plVar20 + -1;
              } while (plVar19 != plVar29 + (ulong)(iVar7 - 1) + 3);
            }
            uVar30 = iVar26 + iVar10 >> (uVar9 & 0x1f);
            if (0xff < uVar30) {
              uVar30 = -(uint)(0 < (int)uVar30);
            }
            *(char *)(param_3 + lVar22) = (char)uVar30;
            lVar21 = lVar21 + 4;
            if (lVar6 == lVar23 + 1 + (ulong)(uint)((param_6 + -1) - iVar14)) break;
            lVar22 = lVar6;
            lVar6 = lVar6 + 1;
          }
        }
        param_3 = param_3 + param_4;
        plVar29 = plVar18;
      } while (plVar18 != plVar3 + (param_5 - 1));
    }
  }
  else if (param_5 != 0) {
    cVar12 = cv::checkHardwareSupport(100);
    plVar18 = plVar3;
    plVar29 = plVar3 + -1;
    while( true ) {
      plVar15 = plVar18;
      iVar14 = 0;
      if (cVar12 != '\0') {
        iVar14 = FUN_001c0cac(param_1 + 0x78,plVar15,param_3,param_6);
      }
      if (iVar14 < param_6 + -3) {
        lVar22 = (long)iVar14;
        uVar30 = (uint)((param_6 + -4) - iVar14) >> 2;
        lVar21 = lVar22 << 2;
        puVar24 = (undefined1 *)(param_3 + lVar22);
        do {
          iVar26 = *piVar2;
          lVar6 = plVar29[1] + lVar21;
          iVar25 = iVar8 + iVar26 * *(int *)(plVar29[1] + lVar21);
          iVar13 = iVar8 + iVar26 * *(int *)(lVar6 + 4);
          iVar27 = iVar8 + iVar26 * *(int *)(lVar6 + 8);
          iVar26 = iVar8 + iVar26 * *(int *)(lVar6 + 0xc);
          if (0 < iVar7) {
            plVar18 = plVar29;
            plVar20 = plVar29 + 2;
            piVar28 = piVar2;
            do {
              piVar28 = piVar28 + 1;
              plVar19 = plVar18 + -1;
              lVar6 = *plVar18 + lVar21;
              iVar11 = *piVar28;
              lVar23 = *plVar20 + lVar21;
              iVar25 = iVar25 + (*(int *)(*plVar20 + lVar21) + *(int *)(*plVar18 + lVar21)) * iVar11
              ;
              iVar13 = iVar13 + (*(int *)(lVar23 + 4) + *(int *)(lVar6 + 4)) * iVar11;
              iVar27 = iVar27 + (*(int *)(lVar23 + 8) + *(int *)(lVar6 + 8)) * iVar11;
              iVar26 = iVar26 + (*(int *)(lVar23 + 0xc) + *(int *)(lVar6 + 0xc)) * iVar11;
              plVar18 = plVar19;
              plVar20 = plVar20 + 1;
            } while (plVar29 + (-1 - (ulong)(iVar7 - 1)) != plVar19);
          }
          uVar16 = iVar25 + iVar10 >> (uVar9 & 0x1f);
          if (0xff < uVar16) {
            uVar16 = -(uint)(0 < (int)uVar16);
          }
          uVar17 = iVar13 + iVar10 >> (uVar9 & 0x1f);
          *puVar24 = (char)uVar16;
          if (0xff < uVar17) {
            uVar17 = -(uint)(0 < (int)uVar17);
          }
          puVar24[1] = (char)uVar17;
          uVar16 = iVar27 + iVar10 >> (uVar9 & 0x1f);
          if (0xff < uVar16) {
            uVar16 = -(uint)(0 < (int)uVar16);
          }
          puVar24[2] = (char)uVar16;
          uVar16 = iVar26 + iVar10 >> (uVar9 & 0x1f);
          if (0xff < uVar16) {
            uVar16 = -(uint)(0 < (int)uVar16);
          }
          puVar1 = puVar24 + 4;
          puVar24[3] = (char)uVar16;
          lVar21 = lVar21 + 0x10;
          puVar24 = puVar1;
        } while (puVar1 != (undefined1 *)(param_3 + lVar22 + 4 + (ulong)uVar30 * 4));
        iVar14 = iVar14 + 4 + uVar30 * 4;
      }
      if (iVar14 < param_6) {
        lVar22 = (long)iVar14;
        lVar21 = lVar22 << 2;
        puVar24 = (undefined1 *)(param_3 + lVar22);
        do {
          iVar26 = iVar8 + *piVar2 * *(int *)(plVar29[1] + lVar21);
          if (0 < iVar7) {
            plVar18 = plVar29 + 2;
            plVar20 = plVar29;
            piVar28 = piVar2;
            do {
              piVar28 = piVar28 + 1;
              plVar19 = plVar18 + 1;
              iVar26 = iVar26 + (*(int *)(*plVar18 + lVar21) + *(int *)(*plVar20 + lVar21)) *
                                *piVar28;
              plVar18 = plVar19;
              plVar20 = plVar20 + -1;
            } while (plVar29 + (ulong)(iVar7 - 1) + 3 != plVar19);
          }
          uVar30 = iVar26 + iVar10 >> (uVar9 & 0x1f);
          if (0xff < uVar30) {
            uVar30 = -(uint)(0 < (int)uVar30);
          }
          lVar21 = lVar21 + 4;
          *puVar24 = (char)uVar30;
          puVar24 = puVar24 + 1;
        } while (lVar21 != (lVar22 + 1 + (ulong)(uint)((param_6 + -1) - iVar14)) * 4);
      }
      param_3 = param_3 + param_4;
      if (plVar3 + (param_5 - 1) == plVar15) break;
      cVar12 = cv::checkHardwareSupport(100);
      plVar18 = plVar15 + 1;
      plVar29 = plVar15;
    }
  }
  return;
}


==================================================================

### FUNC 001c1fc4 (716 bytes) name=FUN_001c1fc4

void FUN_001c1fc4(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  undefined1 *puVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int *piVar8;
  char cVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  long *plVar18;
  int iVar19;
  long *plVar20;
  undefined1 *puVar21;
  int iVar22;
  int *piVar23;
  long *plVar24;
  long *plVar25;
  
  piVar23 = *(int **)(param_1 + 0x20);
  iVar3 = *(int *)(param_1 + 0xe0);
  iVar4 = *(int *)(param_1 + 8);
  uVar5 = *(uint *)(param_1 + 0x70);
  iVar6 = *(int *)(param_1 + 0x74);
  if (param_5 != 0) {
    plVar24 = (long *)(param_2 + 8);
    plVar25 = (long *)(param_2 + ((ulong)(iVar4 - 2) + 2) * 8);
    do {
      cVar9 = cv::checkHardwareSupport(100);
      iVar11 = 0;
      if (cVar9 != '\0') {
        iVar11 = FUN_001c0cac(param_1 + 0x78,plVar24 + -1,param_3,param_6);
      }
      if (iVar11 < param_6 + -3) {
        lVar13 = (long)iVar11;
        uVar10 = (uint)((param_6 + -4) - iVar11) >> 2;
        lVar14 = lVar13 << 2;
        puVar21 = (undefined1 *)(param_3 + lVar13);
        do {
          iVar22 = *piVar23;
          lVar2 = plVar24[-1] + lVar14;
          iVar19 = iVar3 + iVar22 * *(int *)(plVar24[-1] + lVar14);
          iVar15 = iVar3 + iVar22 * *(int *)(lVar2 + 4);
          iVar12 = iVar3 + iVar22 * *(int *)(lVar2 + 8);
          iVar22 = iVar3 + iVar22 * *(int *)(lVar2 + 0xc);
          plVar18 = plVar24;
          piVar8 = piVar23;
          if (1 < iVar4) {
            do {
              plVar20 = plVar18 + 1;
              iVar7 = piVar8[1];
              lVar2 = *plVar18 + lVar14;
              iVar19 = iVar19 + iVar7 * *(int *)(*plVar18 + lVar14);
              iVar15 = iVar15 + iVar7 * *(int *)(lVar2 + 4);
              iVar12 = iVar12 + iVar7 * *(int *)(lVar2 + 8);
              iVar22 = iVar22 + iVar7 * *(int *)(lVar2 + 0xc);
              plVar18 = plVar20;
              piVar8 = piVar8 + 1;
            } while (plVar25 != plVar20);
          }
          uVar17 = iVar19 + iVar6 >> (uVar5 & 0x1f);
          if (0xff < uVar17) {
            uVar17 = -(uint)(0 < (int)uVar17);
          }
          *puVar21 = (char)uVar17;
          uVar17 = iVar15 + iVar6 >> (uVar5 & 0x1f);
          if (0xff < uVar17) {
            uVar17 = -(uint)(0 < (int)uVar17);
          }
          uVar16 = iVar12 + iVar6 >> (uVar5 & 0x1f);
          puVar21[1] = (char)uVar17;
          if (0xff < uVar16) {
            uVar16 = -(uint)(0 < (int)uVar16);
          }
          uVar17 = iVar22 + iVar6 >> (uVar5 & 0x1f);
          puVar21[2] = (char)uVar16;
          if (0xff < uVar17) {
            uVar17 = -(uint)(0 < (int)uVar17);
          }
          puVar1 = puVar21 + 4;
          puVar21[3] = (char)uVar17;
          lVar14 = lVar14 + 0x10;
          puVar21 = puVar1;
        } while (puVar1 != (undefined1 *)(param_3 + lVar13 + 4 + (ulong)uVar10 * 4));
        iVar11 = iVar11 + 4 + uVar10 * 4;
      }
      if (iVar11 < param_6) {
        lVar13 = (long)iVar11;
        lVar14 = lVar13 << 2;
        puVar21 = (undefined1 *)(param_3 + lVar13);
        do {
          iVar22 = iVar3 + *piVar23 * *(int *)(plVar24[-1] + lVar14);
          plVar18 = plVar24;
          piVar8 = piVar23;
          if (1 < iVar4) {
            do {
              plVar20 = plVar18 + 1;
              iVar22 = iVar22 + piVar8[1] * *(int *)(*plVar18 + lVar14);
              plVar18 = plVar20;
              piVar8 = piVar8 + 1;
            } while (plVar25 != plVar20);
          }
          uVar10 = iVar22 + iVar6 >> (uVar5 & 0x1f);
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar14 = lVar14 + 4;
          *puVar21 = (char)uVar10;
          puVar21 = puVar21 + 1;
        } while (lVar14 != (lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar11)) * 4);
      }
      plVar24 = plVar24 + 1;
      plVar25 = plVar25 + 1;
      param_3 = param_3 + param_4;
    } while (plVar24 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001c2290 (464 bytes) name=FUN_001c2290

uint FUN_001c2290(long param_1,long param_2,undefined8 *param_3,int param_4,ulong param_5)

{
  float *pfVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  ulong uVar12;
  long lVar13;
  ulong uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  float fVar19;
  undefined8 uVar20;
  float fVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  float fVar26;
  
  iVar6 = *(int *)(param_1 + 8) + *(int *)(param_1 + 0xc) + -1;
  uVar7 = *(uint *)(param_1 + 0x60) & 1;
  uVar9 = (uint)param_5;
  param_4 = uVar9 * param_4;
  uVar5 = iVar6 / 2;
  uVar12 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
  puVar8 = (undefined8 *)(param_2 + (long)(int)(uVar5 * uVar9) * 4);
  pfVar1 = (float *)(*(long *)(param_1 + 0x10) + uVar12);
  if ((*(uint *)(param_1 + 0x60) & 1) == 0) {
    if (iVar6 == 5) {
      fVar19 = pfVar1[1];
      fVar21 = pfVar1[2];
      if (3 < param_4) {
        lVar13 = (long)(int)uVar9;
        uVar12 = -(ulong)((uVar9 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                 (ulong)(uVar9 << 1) << 2;
        uVar7 = param_4 - 4U >> 2;
        puVar10 = (undefined8 *)((long)puVar8 + lVar13 * -4);
        do {
          puVar11 = (undefined8 *)((long)puVar10 - (uVar12 + lVar13 * -4));
          puVar2 = (undefined8 *)(lVar13 * 4 + uVar12 + (long)puVar10);
          puVar3 = puVar10 + lVar13;
          puVar4 = puVar10 + 1;
          uVar20 = *puVar10;
          uVar23 = puVar11[1];
          uVar22 = *puVar11;
          puVar10 = puVar10 + 2;
          uVar16 = puVar2[1];
          uVar15 = *puVar2;
          uVar18 = puVar3[1];
          uVar17 = *puVar3;
          param_3[1] = CONCAT44(((float)((ulong)uVar16 >> 0x20) - (float)((ulong)uVar23 >> 0x20)) *
                                fVar21 + ((float)((ulong)uVar18 >> 0x20) -
                                         (float)((ulong)*puVar4 >> 0x20)) * fVar19,
                                ((float)uVar16 - (float)uVar23) * fVar21 +
                                ((float)uVar18 - (float)*puVar4) * fVar19);
          *param_3 = CONCAT44(((float)((ulong)uVar15 >> 0x20) - (float)((ulong)uVar22 >> 0x20)) *
                              fVar21 + ((float)((ulong)uVar17 >> 0x20) -
                                       (float)((ulong)uVar20 >> 0x20)) * fVar19,
                              ((float)uVar15 - (float)uVar22) * fVar21 +
                              ((float)uVar17 - (float)uVar20) * fVar19);
          param_3 = param_3 + 2;
        } while (puVar10 != (undefined8 *)((long)puVar8 + lVar13 * -4 + 0x10 + (ulong)uVar7 * 0x10))
        ;
        goto LAB_001c2378;
      }
    }
  }
  else {
    uVar7 = 0;
    if (iVar6 == 5) {
      if (((*(float *)(*(long *)(param_1 + 0x10) + uVar12) == -2.0) && (pfVar1[1] == 0.0)) &&
         (pfVar1[2] == 1.0)) {
        return uVar7;
      }
      fVar19 = *pfVar1;
      fVar26 = pfVar1[2];
      fVar21 = pfVar1[1];
      if (param_4 < 4) {
        return 0;
      }
      uVar7 = param_4 - 4U >> 2;
      uVar12 = -(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2;
      uVar14 = -(ulong)((uVar9 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
               (ulong)(uVar9 << 1) << 2;
      puVar10 = puVar8 + ((ulong)uVar7 + 1) * 2;
      do {
        puVar2 = (undefined8 *)((long)puVar8 - uVar12);
        puVar3 = (undefined8 *)((long)puVar8 + uVar12);
        puVar4 = (undefined8 *)((long)puVar8 - uVar14);
        puVar11 = (undefined8 *)((long)puVar8 + uVar14);
        uVar16 = puVar2[1];
        uVar15 = *puVar2;
        uVar25 = puVar3[1];
        uVar24 = *puVar3;
        puVar2 = puVar8 + 1;
        uVar20 = *puVar8;
        puVar8 = puVar8 + 2;
        uVar18 = puVar4[1];
        uVar17 = *puVar4;
        uVar23 = puVar11[1];
        uVar22 = *puVar11;
        param_3[1] = CONCAT44(((float)((ulong)uVar16 >> 0x20) + (float)((ulong)uVar25 >> 0x20)) *
                              fVar21 + (float)((ulong)*puVar2 >> 0x20) * fVar19 +
                              ((float)((ulong)uVar18 >> 0x20) + (float)((ulong)uVar23 >> 0x20)) *
                              fVar26,((float)uVar16 + (float)uVar25) * fVar21 +
                                     (float)*puVar2 * fVar19 +
                                     ((float)uVar18 + (float)uVar23) * fVar26);
        *param_3 = CONCAT44(((float)((ulong)uVar15 >> 0x20) + (float)((ulong)uVar24 >> 0x20)) *
                            fVar21 + (float)((ulong)uVar20 >> 0x20) * fVar19 +
                            ((float)((ulong)uVar17 >> 0x20) + (float)((ulong)uVar22 >> 0x20)) *
                            fVar26,((float)uVar15 + (float)uVar24) * fVar21 + (float)uVar20 * fVar19
                                   + ((float)uVar17 + (float)uVar22) * fVar26);
        param_3 = param_3 + 2;
      } while (puVar8 != puVar10);
LAB_001c2378:
      return (uVar7 + 1) * 4;
    }
  }
  return uVar7;
}


==================================================================

### FUNC 001c2460 (9768 bytes) name=FUN_001c2460

void FUN_001c2460(long param_1,long param_2,long param_3,int param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  float *pfVar3;
  undefined8 *puVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [12];
  undefined1 auVar8 [12];
  float *pfVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  float *pfVar13;
  char cVar14;
  int iVar15;
  undefined8 *puVar16;
  float *pfVar17;
  float *pfVar18;
  undefined8 *puVar19;
  float *pfVar20;
  long lVar21;
  ulong uVar22;
  float *pfVar23;
  float *pfVar24;
  long lVar25;
  long lVar26;
  long lVar27;
  float *pfVar28;
  float *pfVar29;
  uint uVar30;
  ulong uVar31;
  uint uVar32;
  uint uVar33;
  long lVar34;
  float *pfVar35;
  ulong uVar36;
  long lVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float fVar42;
  float fVar43;
  float fVar44;
  float fVar45;
  float fVar46;
  float fVar47;
  float fVar48;
  float fVar49;
  float fVar50;
  float fVar51;
  float fVar52;
  float fVar53;
  float fVar55;
  float fVar56;
  float fVar57;
  float fVar58;
  float fVar59;
  float fVar60;
  undefined1 auVar54 [16];
  float fVar61;
  float fVar62;
  float fVar63;
  float fVar64;
  undefined8 uVar65;
  float fVar66;
  float fVar67;
  float fVar68;
  float fVar69;
  float fVar70;
  float fVar71;
  float fVar72;
  float fVar73;
  float fVar74;
  float fVar75;
  float fVar76;
  undefined8 uVar77;
  float fVar79;
  undefined8 uVar78;
  float fVar80;
  undefined8 uVar81;
  float fVar82;
  float local_100;
  undefined4 uStack_fc;
  undefined1 uStack_dc;
  undefined1 uStack_db;
  undefined1 uStack_da;
  undefined1 uStack_d9;
  undefined1 uStack_d4;
  undefined1 uStack_d3;
  undefined1 uStack_d2;
  undefined1 uStack_d1;
  float local_d0;
  undefined4 uStack_cc;
  float fStack_c8;
  undefined4 uStack_c4;
  undefined1 uStack_ac;
  undefined1 uStack_ab;
  undefined1 uStack_aa;
  undefined1 uStack_a9;
  undefined1 uStack_a8;
  undefined1 uStack_a7;
  undefined1 uStack_a6;
  undefined1 uStack_a5;
  undefined1 uStack_a4;
  undefined1 uStack_a3;
  undefined1 uStack_a2;
  undefined1 uStack_a1;
  undefined1 uStack_9c;
  undefined1 uStack_9b;
  undefined1 uStack_9a;
  undefined1 uStack_99;
  undefined1 uStack_94;
  undefined1 uStack_93;
  undefined1 uStack_92;
  undefined1 uStack_91;
  float local_90;
  undefined4 uStack_8c;
  float fStack_88;
  undefined4 uStack_84;
  float local_80;
  undefined1 uStack_7c;
  undefined1 uStack_7b;
  undefined1 uStack_7a;
  undefined1 uStack_79;
  float fStack_78;
  undefined1 uStack_74;
  undefined1 uStack_73;
  undefined1 uStack_72;
  undefined1 uStack_71;
  
  uVar32 = *(uint *)(param_1 + 0xd8);
  lVar37 = *(long *)(param_1 + 0x20);
  uVar5 = *(int *)(param_1 + 8) / 2;
  cVar14 = cv::checkHardwareSupport(100);
  uVar36 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
  pfVar3 = (float *)(lVar37 + uVar36);
  if (cVar14 == '\0') {
    uVar31 = 0;
  }
  else {
    iVar15 = FUN_001c2290(param_1 + 0x70,param_2,param_3,param_4,param_5);
    uVar31 = (ulong)iVar15;
  }
  lVar21 = (long)(int)(uVar5 * param_5);
  lVar26 = uVar31 + lVar21;
  param_4 = param_4 * param_5;
  pfVar29 = (float *)(param_2 + lVar26 * 4);
  uVar30 = (uint)uVar31;
  if ((uVar32 & 1) == 0) {
    if (*(int *)(param_1 + 8) == 3) {
      fVar50 = pfVar3[1];
      if ((*(float *)(lVar37 + uVar36) == 0.0) && (fVar50 == 1.0)) {
        iVar15 = param_4 + -1;
        if (iVar15 <= (int)uVar30) goto LAB_001c25c4;
        uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
        lVar21 = (long)(int)-param_5;
        pfVar17 = (float *)(param_3 + uVar36 + 0x20);
        uVar33 = (param_4 + -2) - uVar30;
        pfVar18 = (float *)(param_2 + (lVar26 + lVar21 + 1) * 4);
        pfVar20 = (float *)(param_3 + uVar36);
        uVar32 = uVar33 >> 1;
        pfVar23 = (float *)(param_2 + (lVar26 + lVar21) * 4);
        lVar37 = (long)(int)param_5;
        uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
        pfVar24 = (float *)(param_2 + (lVar26 + lVar37) * 4);
        if (((uVar32 + 1 < 5 ||
             pfVar18 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar26 + lVar21 + 9) * 4)) ||
             pfVar20 < (float *)(param_2 + (lVar26 + lVar21 + 8) * 4) && pfVar23 < pfVar17) ||
           (pfVar20 < (float *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar24 < pfVar17)) {
          pfVar17 = pfVar29 + lVar37;
          do {
            pfVar18 = pfVar17 + 2;
            fVar50 = *pfVar17;
            fVar38 = pfVar17[lVar21 - lVar37];
            pfVar20[1] = pfVar17[1] - *(float *)((long)pfVar17 + uVar36 + lVar37 * -4);
            *pfVar20 = fVar50 - fVar38;
            pfVar20 = pfVar20 + 2;
            pfVar17 = pfVar18;
          } while (pfVar18 != pfVar29 + (ulong)uVar32 * 2 + lVar37 + 2);
        }
        else {
          uVar1 = (uVar32 - 4 >> 2) + 1;
          pfVar17 = pfVar29;
          uVar2 = uVar30;
          if (7 < uVar33) {
            uVar33 = 0;
            do {
              fVar50 = *pfVar24;
              fVar45 = pfVar24[1];
              fVar38 = pfVar24[2];
              fVar46 = pfVar24[3];
              pfVar35 = pfVar24 + 4;
              fVar47 = pfVar24[5];
              pfVar17 = pfVar24 + 6;
              fVar48 = pfVar24[7];
              pfVar24 = pfVar24 + 8;
              uVar33 = uVar33 + 1;
              _local_100 = CONCAT14(SUB41(fVar38,0),fVar50);
              _local_100 = CONCAT15((char)((uint)fVar38 >> 8),_local_100);
              _local_100 = CONCAT16((char)((uint)fVar38 >> 0x10),_local_100);
              _local_100 = CONCAT17((char)((uint)fVar38 >> 0x18),_local_100);
              fVar38 = *pfVar23;
              fVar39 = pfVar23[2];
              fVar42 = pfVar23[4];
              fVar43 = pfVar23[6];
              pfVar23 = pfVar23 + 8;
              fVar75 = *pfVar18;
              fVar40 = pfVar18[2];
              fVar41 = pfVar18[4];
              fVar44 = pfVar18[6];
              pfVar18 = pfVar18 + 8;
              uVar65 = CONCAT17((char)((uint)fVar39 >> 0x18),
                                CONCAT16((char)((uint)fVar39 >> 0x10),
                                         CONCAT15((char)((uint)fVar39 >> 8),
                                                  CONCAT14(SUB41(fVar39,0),fVar38))));
              auVar7[8] = SUB41(fVar42,0);
              auVar7._0_8_ = uVar65;
              auVar7[9] = (char)((uint)fVar42 >> 8);
              auVar7[10] = (char)((uint)fVar42 >> 0x10);
              auVar7[0xb] = (char)((uint)fVar42 >> 0x18);
              auVar6[0xc] = SUB41(fVar43,0);
              auVar6._0_12_ = auVar7;
              auVar6[0xd] = (char)((uint)fVar43 >> 8);
              auVar6[0xe] = (char)((uint)fVar43 >> 0x10);
              auVar6[0xf] = (char)((uint)fVar43 >> 0x18);
              fVar50 = fVar50 - fVar38;
              uStack_fc = uStack_fc - (float)((ulong)uVar65 >> 0x20);
              fVar38 = *pfVar35 - auVar7._8_4_;
              fVar39 = *pfVar17 - auVar6._12_4_;
              uStack_94 = SUB41(fVar39,0);
              uStack_93 = (undefined1)((uint)fVar39 >> 8);
              uStack_92 = (undefined1)((uint)fVar39 >> 0x10);
              uStack_91 = (undefined1)((uint)fVar39 >> 0x18);
              uStack_9c = SUB41(uStack_fc,0);
              uStack_9b = (undefined1)((uint)uStack_fc >> 8);
              uStack_9a = (undefined1)((uint)uStack_fc >> 0x10);
              uStack_99 = (undefined1)((uint)uStack_fc >> 0x18);
              *pfVar20 = fVar50;
              pfVar20[1] = fVar45 - fVar75;
              pfVar20[2] = (float)(CONCAT17(uStack_99,
                                            CONCAT16(uStack_9a,
                                                     CONCAT15(uStack_9b,CONCAT14(uStack_9c,fVar50)))
                                           ) >> 0x20);
              pfVar20[3] = (float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                            CONCAT16((char)((uint)fVar46 >> 0x10),
                                                     CONCAT15((char)((uint)fVar46 >> 8),
                                                              CONCAT14(SUB41(fVar46,0),fVar45)))) >>
                                  0x20) - fVar40;
              pfVar20[4] = fVar38;
              pfVar20[5] = fVar47 - fVar41;
              pfVar20[6] = (float)(CONCAT17(uStack_91,
                                            CONCAT16(uStack_92,
                                                     CONCAT15(uStack_93,CONCAT14(uStack_94,fVar38)))
                                           ) >> 0x20);
              pfVar20[7] = (float)(CONCAT17((char)((uint)fVar48 >> 0x18),
                                            CONCAT16((char)((uint)fVar48 >> 0x10),
                                                     CONCAT15((char)((uint)fVar48 >> 8),
                                                              CONCAT14(SUB41(fVar48,0),fVar47)))) >>
                                  0x20) - fVar44;
              pfVar20 = pfVar20 + 8;
            } while (uVar33 < uVar1);
            pfVar17 = pfVar29 + (ulong)(uVar1 * 4) * 2;
            uVar2 = uVar30 + uVar1 * 8;
            if (uVar32 + 1 == uVar1 * 4) goto LAB_001c4310;
          }
          uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
          fVar50 = pfVar17[lVar37 + 1];
          uVar33 = uVar2 + 2;
          fVar38 = *(float *)((long)pfVar17 + uVar36);
          *(float *)(param_3 + uVar31) = pfVar17[lVar37] - pfVar17[lVar21];
          *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar50 = pfVar17[lVar37 + 3];
            uVar33 = uVar2 + 4;
            fVar38 = *(float *)((long)pfVar17 + uVar36 + 8);
            *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 2] - pfVar17[lVar21 + 2];
            *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar50 = pfVar17[lVar37 + 5];
              uVar33 = uVar2 + 6;
              fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x10);
              *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 4] - pfVar17[lVar21 + 4];
              *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                fVar50 = pfVar17[lVar37 + 7];
                uVar33 = uVar2 + 8;
                fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x18);
                *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 6] - pfVar17[lVar21 + 6];
                *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
                if ((int)uVar33 < iVar15) {
                  uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                  fVar50 = pfVar17[lVar37 + 9];
                  uVar33 = uVar2 + 10;
                  fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x20);
                  *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 8] - pfVar17[lVar21 + 8];
                  *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
                  if ((int)uVar33 < iVar15) {
                    uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                    fVar50 = pfVar17[lVar37 + 0xb];
                    uVar2 = uVar2 + 0xc;
                    fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x28);
                    *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 10] - pfVar17[lVar21 + 10];
                    *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
                    if ((int)uVar2 < iVar15) {
                      uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                      fVar50 = pfVar17[lVar37 + 0xd];
                      fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x30);
                      *(float *)(param_3 + uVar31) = pfVar17[lVar37 + 0xc] - pfVar17[lVar21 + 0xc];
                      *(float *)(param_3 + uVar31 + 4) = fVar50 - fVar38;
                    }
                  }
                }
              }
            }
          }
        }
LAB_001c4310:
        uVar31 = (ulong)(uVar30 + 2 + uVar32 * 2);
        pfVar29 = pfVar29 + ((ulong)uVar32 + 1) * 2;
        goto LAB_001c25c4;
      }
      iVar15 = param_4 + -1;
      if (iVar15 <= (int)uVar30) goto LAB_001c25c4;
      uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
      lVar37 = (long)(int)-param_5;
      pfVar17 = (float *)(param_3 + uVar36 + 0x20);
      uVar33 = (param_4 + -2) - uVar30;
      pfVar18 = (float *)(param_2 + (lVar26 + lVar37 + 1) * 4);
      pfVar20 = (float *)(param_3 + uVar36);
      uVar32 = uVar33 >> 1;
      pfVar23 = (float *)(param_2 + (lVar26 + lVar37) * 4);
      lVar21 = (long)(int)param_5;
      uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
      pfVar24 = (float *)(param_2 + (lVar26 + lVar21) * 4);
      if (((uVar32 + 1 < 5 ||
           pfVar18 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar26 + lVar37 + 9) * 4)) ||
           pfVar20 < (float *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar23 < pfVar17) ||
         (pfVar20 < (float *)(param_2 + (lVar26 + lVar21 + 8) * 4) && pfVar24 < pfVar17)) {
        pfVar17 = pfVar29 + lVar21;
        do {
          pfVar18 = pfVar17 + 2;
          fVar38 = *pfVar17;
          fVar75 = pfVar17[lVar37 - lVar21];
          pfVar20[1] = (pfVar17[1] - *(float *)((long)pfVar17 + uVar36 + lVar21 * -4)) * fVar50;
          *pfVar20 = (fVar38 - fVar75) * fVar50;
          pfVar20 = pfVar20 + 2;
          pfVar17 = pfVar18;
        } while (pfVar18 != pfVar29 + (ulong)uVar32 * 2 + lVar21 + 2);
      }
      else {
        uVar1 = (uVar32 - 4 >> 2) + 1;
        pfVar17 = pfVar29;
        uVar2 = uVar30;
        if (7 < uVar33) {
          uVar33 = 0;
          do {
            fVar38 = *pfVar24;
            pfVar9 = pfVar24 + 1;
            fVar75 = pfVar24[2];
            pfVar28 = pfVar24 + 3;
            fVar43 = pfVar24[4];
            pfVar35 = pfVar24 + 5;
            fVar45 = pfVar24[6];
            pfVar17 = pfVar24 + 7;
            pfVar24 = pfVar24 + 8;
            uVar33 = uVar33 + 1;
            _local_100 = CONCAT14(SUB41(fVar75,0),fVar38);
            _local_100 = CONCAT15((char)((uint)fVar75 >> 8),_local_100);
            _local_100 = CONCAT16((char)((uint)fVar75 >> 0x10),_local_100);
            _local_100 = CONCAT17((char)((uint)fVar75 >> 0x18),_local_100);
            fVar75 = *pfVar23;
            fVar42 = pfVar23[2];
            fVar44 = pfVar23[4];
            fVar46 = pfVar23[6];
            pfVar23 = pfVar23 + 8;
            fVar39 = *pfVar18;
            fVar41 = pfVar18[2];
            pfVar10 = pfVar18 + 4;
            fVar47 = pfVar18[6];
            pfVar18 = pfVar18 + 8;
            fVar40 = (*pfVar9 - fVar39) * fVar50;
            fVar39 = (*pfVar28 -
                     (float)(CONCAT17((char)((uint)fVar41 >> 0x18),
                                      CONCAT16((char)((uint)fVar41 >> 0x10),
                                               CONCAT15((char)((uint)fVar41 >> 8),
                                                        CONCAT14(SUB41(fVar41,0),fVar39)))) >> 0x20)
                     ) * fVar50;
            fVar41 = (*pfVar35 - *pfVar10) * fVar50;
            fVar47 = (*pfVar17 -
                     (float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                      CONCAT16((char)((uint)fVar47 >> 0x10),
                                               CONCAT15((char)((uint)fVar47 >> 8),
                                                        CONCAT14(SUB41(fVar47,0),*pfVar10)))) >>
                            0x20)) * fVar50;
            uStack_a8 = SUB41(fVar41,0);
            uStack_a7 = (undefined1)((uint)fVar41 >> 8);
            uStack_a6 = (undefined1)((uint)fVar41 >> 0x10);
            uStack_a5 = (undefined1)((uint)fVar41 >> 0x18);
            uStack_a4 = SUB41(fVar47,0);
            uStack_a3 = (undefined1)((uint)fVar47 >> 8);
            uStack_a2 = (undefined1)((uint)fVar47 >> 0x10);
            uStack_a1 = (undefined1)((uint)fVar47 >> 0x18);
            uStack_ac = SUB41(fVar39,0);
            uStack_ab = (undefined1)((uint)fVar39 >> 8);
            uStack_aa = (undefined1)((uint)fVar39 >> 0x10);
            uStack_a9 = (undefined1)((uint)fVar39 >> 0x18);
            uVar65 = CONCAT17(uStack_a9,
                              CONCAT16(uStack_aa,CONCAT15(uStack_ab,CONCAT14(uStack_ac,fVar40))));
            auVar8[8] = uStack_a8;
            auVar8._0_8_ = uVar65;
            auVar8[9] = uStack_a7;
            auVar8[10] = uStack_a6;
            auVar8[0xb] = uStack_a5;
            auVar54[0xc] = uStack_a4;
            auVar54._0_12_ = auVar8;
            auVar54[0xd] = uStack_a3;
            auVar54[0xe] = uStack_a2;
            auVar54[0xf] = uStack_a1;
            *pfVar20 = (fVar38 - fVar75) * fVar50;
            pfVar20[1] = fVar40;
            pfVar20[2] = (uStack_fc -
                         (float)(CONCAT17((char)((uint)fVar42 >> 0x18),
                                          CONCAT16((char)((uint)fVar42 >> 0x10),
                                                   CONCAT15((char)((uint)fVar42 >> 8),
                                                            CONCAT14(SUB41(fVar42,0),fVar75)))) >>
                                0x20)) * fVar50;
            pfVar20[3] = (float)((ulong)uVar65 >> 0x20);
            pfVar20[4] = (fVar43 - fVar44) * fVar50;
            pfVar20[5] = auVar8._8_4_;
            pfVar20[6] = (fVar45 - (float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                                    CONCAT16((char)((uint)fVar46 >> 0x10),
                                                             CONCAT15((char)((uint)fVar46 >> 8),
                                                                      CONCAT14(SUB41(fVar46,0),
                                                                               fVar44)))) >> 0x20))
                         * fVar50;
            pfVar20[7] = auVar54._12_4_;
            pfVar20 = pfVar20 + 8;
          } while (uVar33 < uVar1);
          pfVar17 = pfVar29 + (ulong)(uVar1 * 4) * 2;
          uVar2 = uVar30 + uVar1 * 8;
          if (uVar32 + 1 == uVar1 * 4) goto LAB_001c2a04;
        }
        uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        fVar38 = pfVar17[lVar21 + 1];
        uVar33 = uVar2 + 2;
        fVar75 = *(float *)((long)pfVar17 + uVar36);
        *(float *)(param_3 + uVar31) = (pfVar17[lVar21] - pfVar17[lVar37]) * fVar50;
        *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          fVar38 = pfVar17[lVar21 + 3];
          uVar33 = uVar2 + 4;
          fVar75 = *(float *)((long)pfVar17 + uVar36 + 8);
          *(float *)(param_3 + uVar31) = (pfVar17[lVar21 + 2] - pfVar17[lVar37 + 2]) * fVar50;
          *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar38 = pfVar17[lVar21 + 5];
            uVar33 = uVar2 + 6;
            fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x10);
            *(float *)(param_3 + uVar31) = (pfVar17[lVar21 + 4] - pfVar17[lVar37 + 4]) * fVar50;
            *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar38 = pfVar17[lVar21 + 7];
              uVar33 = uVar2 + 8;
              fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x18);
              *(float *)(param_3 + uVar31) = (pfVar17[lVar21 + 6] - pfVar17[lVar37 + 6]) * fVar50;
              *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                fVar38 = pfVar17[lVar21 + 9];
                uVar33 = uVar2 + 10;
                fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x20);
                *(float *)(param_3 + uVar31) = (pfVar17[lVar21 + 8] - pfVar17[lVar37 + 8]) * fVar50;
                *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
                if ((int)uVar33 < iVar15) {
                  uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                  fVar38 = pfVar17[lVar21 + 0xb];
                  uVar2 = uVar2 + 0xc;
                  fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x28);
                  *(float *)(param_3 + uVar31) =
                       (pfVar17[lVar21 + 10] - pfVar17[lVar37 + 10]) * fVar50;
                  *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
                  if ((int)uVar2 < iVar15) {
                    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                    fVar38 = pfVar17[lVar21 + 0xd];
                    fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x30);
                    *(float *)(param_3 + uVar31) =
                         (pfVar17[lVar21 + 0xc] - pfVar17[lVar37 + 0xc]) * fVar50;
                    *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar75) * fVar50;
                  }
                }
              }
            }
          }
        }
      }
      goto LAB_001c2a04;
    }
    if (*(int *)(param_1 + 8) != 5) goto LAB_001c25c4;
    iVar15 = param_4 + -1;
    fVar50 = pfVar3[1];
    fVar38 = pfVar3[2];
    if (iVar15 <= (int)uVar30) goto LAB_001c25c4;
    uVar33 = (param_4 + -2) - uVar30;
    lVar27 = (long)(int)(param_5 << 1);
    uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
    lVar25 = (long)(int)(param_5 * -2);
    pfVar17 = (float *)(param_3 + uVar36);
    pfVar18 = (float *)(param_2 + (lVar26 + lVar27) * 4);
    pfVar20 = (float *)(param_3 + uVar36 + 0x20);
    lVar37 = (long)(int)-param_5;
    uVar32 = uVar33 >> 1;
    pfVar23 = (float *)(param_2 + (lVar26 + lVar25) * 4);
    pfVar24 = (float *)(param_2 + (lVar26 + lVar37 + 1) * 4);
    lVar21 = (long)(int)param_5;
    pfVar35 = (float *)(param_2 + (lVar26 + lVar37) * 4);
    uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
    pfVar28 = (float *)(param_2 + (lVar26 + lVar21) * 4);
    if (((((uVar32 + 1 < 4 ||
           pfVar17 < (float *)(param_2 + (lVar26 + lVar27 + 8) * 4) && pfVar18 < pfVar20) ||
          pfVar17 < (float *)(param_2 + (lVar26 + lVar25 + 8) * 4) && pfVar23 < pfVar20) ||
         pfVar24 < pfVar20 && pfVar17 < (float *)(param_2 + (lVar26 + lVar37 + 9) * 4)) ||
         pfVar17 < (float *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar35 < pfVar20) ||
       (pfVar17 < (float *)(param_2 + (lVar26 + lVar21 + 8) * 4) && pfVar28 < pfVar20)) {
      pfVar18 = pfVar29 + lVar21;
      do {
        pfVar20 = pfVar18 + 2;
        fVar39 = *pfVar18;
        fVar40 = pfVar18[lVar25 - lVar21];
        fVar75 = pfVar18[lVar27 - lVar21];
        fVar42 = pfVar18[lVar37 - lVar21];
        pfVar17[1] = (pfVar18[(lVar27 + 1) - lVar21] - pfVar18[(lVar25 + 1) - lVar21]) * fVar38 +
                     fVar50 * (pfVar18[1] - *(float *)((long)pfVar18 + uVar36 + lVar21 * -4));
        *pfVar17 = (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
        pfVar17 = pfVar17 + 2;
        pfVar18 = pfVar20;
      } while (pfVar20 != pfVar29 + (ulong)uVar32 * 2 + lVar21 + 2);
    }
    else {
      uVar1 = (uVar32 - 4 >> 2) + 1;
      pfVar20 = pfVar29;
      uVar2 = uVar30;
      if (7 < uVar33) {
        uVar33 = 0;
        do {
          fVar75 = *pfVar18;
          fVar45 = pfVar18[1];
          pfVar10 = pfVar18 + 2;
          fVar48 = pfVar18[3];
          pfVar9 = pfVar18 + 4;
          fVar51 = pfVar18[5];
          pfVar20 = pfVar18 + 6;
          fVar55 = pfVar18[7];
          pfVar18 = pfVar18 + 8;
          uVar33 = uVar33 + 1;
          fVar57 = *pfVar35;
          fVar58 = pfVar35[2];
          pfVar11 = pfVar35 + 4;
          fVar59 = pfVar35[6];
          pfVar35 = pfVar35 + 8;
          fVar60 = *pfVar24;
          fVar61 = pfVar24[2];
          fVar62 = pfVar24[4];
          fVar63 = pfVar24[6];
          pfVar24 = pfVar24 + 8;
          fVar39 = *pfVar28;
          fVar46 = pfVar28[1];
          fVar42 = pfVar28[2];
          fVar40 = pfVar28[3];
          pfVar12 = pfVar28 + 4;
          fVar52 = pfVar28[5];
          fVar43 = pfVar28[6];
          fVar41 = pfVar28[7];
          pfVar28 = pfVar28 + 8;
          _local_90 = CONCAT17((char)((uint)fVar40 >> 0x18),
                               CONCAT16((char)((uint)fVar40 >> 0x10),
                                        CONCAT15((char)((uint)fVar40 >> 8),
                                                 CONCAT14(SUB41(fVar40,0),fVar46))));
          _fStack_88 = CONCAT17((char)((uint)fVar41 >> 0x18),
                                CONCAT16((char)((uint)fVar41 >> 0x10),
                                         CONCAT15((char)((uint)fVar41 >> 8),
                                                  CONCAT14(SUB41(fVar41,0),fVar52))));
          fVar40 = *pfVar23;
          fVar47 = pfVar23[1];
          fVar41 = pfVar23[2];
          fVar49 = pfVar23[3];
          pfVar13 = pfVar23 + 4;
          fVar53 = pfVar23[5];
          fVar44 = pfVar23[6];
          fVar56 = pfVar23[7];
          pfVar23 = pfVar23 + 8;
          _local_100 = CONCAT14(SUB41(fVar41,0),fVar40);
          _local_100 = CONCAT15((char)((uint)fVar41 >> 8),_local_100);
          _local_100 = CONCAT16((char)((uint)fVar41 >> 0x10),_local_100);
          _local_100 = CONCAT17((char)((uint)fVar41 >> 0x18),_local_100);
          _local_80 = CONCAT17((char)((uint)fVar58 >> 0x18),
                               CONCAT16((char)((uint)fVar58 >> 0x10),
                                        CONCAT15((char)((uint)fVar58 >> 8),
                                                 CONCAT14(SUB41(fVar58,0),fVar57))));
          _fStack_78 = CONCAT17((char)((uint)fVar59 >> 0x18),
                                CONCAT16((char)((uint)fVar59 >> 0x10),
                                         CONCAT15((char)((uint)fVar59 >> 8),
                                                  CONCAT14(SUB41(fVar59,0),*pfVar11))));
          fVar75 = (fVar75 - fVar40) * fVar38 + (fVar39 - fVar57) * fVar50;
          fVar39 = (*pfVar10 - (float)((ulong)_local_100 >> 0x20)) * fVar38 +
                   ((float)(CONCAT17((char)((uint)fVar42 >> 0x18),
                                     CONCAT16((char)((uint)fVar42 >> 0x10),
                                              CONCAT15((char)((uint)fVar42 >> 8),
                                                       CONCAT14(SUB41(fVar42,0),fVar39)))) >> 0x20)
                   - (float)((ulong)_local_80 >> 0x20)) * fVar50;
          fVar40 = (*pfVar9 - *pfVar13) * fVar38 + (*pfVar12 - *pfVar11) * fVar50;
          fVar42 = (*pfVar20 -
                   (float)(CONCAT17((char)((uint)fVar44 >> 0x18),
                                    CONCAT16((char)((uint)fVar44 >> 0x10),
                                             CONCAT15((char)((uint)fVar44 >> 8),
                                                      CONCAT14(SUB41(fVar44,0),*pfVar13)))) >> 0x20)
                   ) * fVar38 +
                   ((float)(CONCAT17((char)((uint)fVar43 >> 0x18),
                                     CONCAT16((char)((uint)fVar43 >> 0x10),
                                              CONCAT15((char)((uint)fVar43 >> 8),
                                                       CONCAT14(SUB41(fVar43,0),*pfVar12)))) >> 0x20
                           ) - (float)((ulong)_fStack_78 >> 0x20)) * fVar50;
          uStack_d4 = SUB41(fVar42,0);
          uStack_d3 = (undefined1)((uint)fVar42 >> 8);
          uStack_d2 = (undefined1)((uint)fVar42 >> 0x10);
          uStack_d1 = (undefined1)((uint)fVar42 >> 0x18);
          uStack_dc = SUB41(fVar39,0);
          uStack_db = (undefined1)((uint)fVar39 >> 8);
          uStack_da = (undefined1)((uint)fVar39 >> 0x10);
          uStack_d9 = (undefined1)((uint)fVar39 >> 0x18);
          *pfVar17 = fVar75;
          pfVar17[1] = (fVar45 - fVar47) * fVar38 + (fVar46 - fVar60) * fVar50;
          pfVar17[2] = (float)(CONCAT17(uStack_d9,
                                        CONCAT16(uStack_da,
                                                 CONCAT15(uStack_db,CONCAT14(uStack_dc,fVar75)))) >>
                              0x20);
          pfVar17[3] = ((float)(CONCAT17((char)((uint)fVar48 >> 0x18),
                                         CONCAT16((char)((uint)fVar48 >> 0x10),
                                                  CONCAT15((char)((uint)fVar48 >> 8),
                                                           CONCAT14(SUB41(fVar48,0),fVar45)))) >>
                               0x20) -
                       (float)(CONCAT17((char)((uint)fVar49 >> 0x18),
                                        CONCAT16((char)((uint)fVar49 >> 0x10),
                                                 CONCAT15((char)((uint)fVar49 >> 8),
                                                          CONCAT14(SUB41(fVar49,0),fVar47)))) >>
                              0x20)) * fVar38 +
                       (uStack_8c -
                       (float)(CONCAT17((char)((uint)fVar61 >> 0x18),
                                        CONCAT16((char)((uint)fVar61 >> 0x10),
                                                 CONCAT15((char)((uint)fVar61 >> 8),
                                                          CONCAT14(SUB41(fVar61,0),fVar60)))) >>
                              0x20)) * fVar50;
          pfVar17[4] = fVar40;
          pfVar17[5] = (fVar51 - fVar53) * fVar38 + (fVar52 - fVar62) * fVar50;
          pfVar17[6] = (float)(CONCAT17(uStack_d1,
                                        CONCAT16(uStack_d2,
                                                 CONCAT15(uStack_d3,CONCAT14(uStack_d4,fVar40)))) >>
                              0x20);
          pfVar17[7] = ((float)(CONCAT17((char)((uint)fVar55 >> 0x18),
                                         CONCAT16((char)((uint)fVar55 >> 0x10),
                                                  CONCAT15((char)((uint)fVar55 >> 8),
                                                           CONCAT14(SUB41(fVar55,0),fVar51)))) >>
                               0x20) -
                       (float)(CONCAT17((char)((uint)fVar56 >> 0x18),
                                        CONCAT16((char)((uint)fVar56 >> 0x10),
                                                 CONCAT15((char)((uint)fVar56 >> 8),
                                                          CONCAT14(SUB41(fVar56,0),fVar53)))) >>
                              0x20)) * fVar38 +
                       (uStack_84 -
                       (float)(CONCAT17((char)((uint)fVar63 >> 0x18),
                                        CONCAT16((char)((uint)fVar63 >> 0x10),
                                                 CONCAT15((char)((uint)fVar63 >> 8),
                                                          CONCAT14(SUB41(fVar63,0),fVar62)))) >>
                              0x20)) * fVar50;
          pfVar17 = pfVar17 + 8;
        } while (uVar33 < uVar1);
        pfVar20 = pfVar29 + (ulong)(uVar1 * 4) * 2;
        uVar2 = uVar30 + uVar1 * 8;
        if (uVar32 + 1 == uVar1 * 4) goto LAB_001c2a04;
      }
      uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      uVar33 = uVar2 + 2;
      fVar75 = pfVar20[lVar27 + 1];
      fVar40 = pfVar20[lVar25 + 1];
      fVar39 = pfVar20[lVar21 + 1];
      fVar42 = *(float *)((long)pfVar20 + uVar36);
      *(float *)(param_3 + uVar31) =
           (pfVar20[lVar21 * 2] - pfVar20[lVar25]) * fVar38 +
           fVar50 * (pfVar20[lVar21] - pfVar20[lVar37]);
      *(float *)(param_3 + uVar31 + 4) = (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
      if ((int)uVar33 < iVar15) {
        uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
        uVar33 = uVar2 + 4;
        fVar40 = pfVar20[lVar25 + 3];
        fVar75 = pfVar20[lVar27 + 3];
        fVar39 = pfVar20[lVar21 + 3];
        fVar42 = *(float *)((long)pfVar20 + uVar36 + 8);
        *(float *)(param_3 + uVar31) =
             (pfVar20[lVar21 * 2 + 2] - pfVar20[lVar25 + 2]) * fVar38 +
             fVar50 * (pfVar20[lVar21 + 2] - pfVar20[lVar37 + 2]);
        *(float *)(param_3 + uVar31 + 4) = (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          uVar33 = uVar2 + 6;
          fVar40 = pfVar20[lVar25 + 5];
          fVar75 = pfVar20[lVar27 + 5];
          fVar39 = pfVar20[lVar21 + 5];
          fVar42 = *(float *)((long)pfVar20 + uVar36 + 0x10);
          *(float *)(param_3 + uVar31) =
               (pfVar20[lVar21 * 2 + 4] - pfVar20[lVar25 + 4]) * fVar38 +
               fVar50 * (pfVar20[lVar21 + 4] - pfVar20[lVar37 + 4]);
          *(float *)(param_3 + uVar31 + 4) = (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42)
          ;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            uVar33 = uVar2 + 8;
            fVar40 = pfVar20[lVar25 + 7];
            fVar75 = pfVar20[lVar27 + 7];
            fVar39 = pfVar20[lVar21 + 7];
            fVar42 = *(float *)((long)pfVar20 + uVar36 + 0x18);
            *(float *)(param_3 + uVar31) =
                 (pfVar20[lVar21 * 2 + 6] - pfVar20[lVar25 + 6]) * fVar38 +
                 fVar50 * (pfVar20[lVar21 + 6] - pfVar20[lVar37 + 6]);
            *(float *)(param_3 + uVar31 + 4) =
                 (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              uVar33 = uVar2 + 10;
              fVar40 = pfVar20[lVar25 + 9];
              fVar75 = pfVar20[lVar27 + 9];
              fVar39 = pfVar20[lVar21 + 9];
              fVar42 = *(float *)((long)pfVar20 + uVar36 + 0x20);
              *(float *)(param_3 + uVar31) =
                   (pfVar20[lVar21 * 2 + 8] - pfVar20[lVar25 + 8]) * fVar38 +
                   fVar50 * (pfVar20[lVar21 + 8] - pfVar20[lVar37 + 8]);
              *(float *)(param_3 + uVar31 + 4) =
                   (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                uVar2 = uVar2 + 0xc;
                fVar40 = pfVar20[lVar25 + 0xb];
                fVar75 = pfVar20[lVar27 + 0xb];
                fVar39 = pfVar20[lVar21 + 0xb];
                fVar42 = *(float *)((long)pfVar20 + uVar36 + 0x28);
                *(float *)(param_3 + uVar31) =
                     (pfVar20[lVar21 * 2 + 10] - pfVar20[lVar25 + 10]) * fVar38 +
                     fVar50 * (pfVar20[lVar21 + 10] - pfVar20[lVar37 + 10]);
                *(float *)(param_3 + uVar31 + 4) =
                     (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
                if ((int)uVar2 < iVar15) {
                  uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                  fVar75 = pfVar20[lVar27 + 0xd];
                  fVar40 = pfVar20[lVar25 + 0xd];
                  fVar39 = pfVar20[lVar21 + 0xd];
                  fVar42 = *(float *)((long)pfVar20 + uVar36 + 0x30);
                  *(float *)(param_3 + uVar31) =
                       (pfVar20[lVar21 * 2 + 0xc] - pfVar20[lVar25 + 0xc]) * fVar38 +
                       fVar50 * (pfVar20[lVar21 + 0xc] - pfVar20[lVar37 + 0xc]);
                  *(float *)(param_3 + uVar31 + 4) =
                       (fVar75 - fVar40) * fVar38 + fVar50 * (fVar39 - fVar42);
                }
              }
            }
          }
        }
      }
    }
LAB_001c2a04:
    uVar31 = (ulong)(uVar30 + 2 + uVar32 * 2);
    pfVar29 = pfVar29 + ((ulong)uVar32 + 1) * 2;
LAB_001c25c4:
    iVar15 = (int)uVar31;
    if (param_4 <= iVar15) {
      return;
    }
    uVar36 = -(ulong)(param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_5 << 2;
    uVar31 = -(ulong)(-param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_5 << 2;
    lVar37 = 0;
    do {
      fVar50 = *pfVar3 * *(float *)((long)pfVar29 + lVar37);
      if (0 < (int)uVar5) {
        pfVar17 = (float *)((long)pfVar29 + uVar36 + lVar37);
        pfVar18 = (float *)((long)pfVar29 + lVar37 + uVar31);
        pfVar20 = pfVar3 + 1;
        do {
          fVar38 = *pfVar17;
          pfVar17 = (float *)((long)pfVar17 + uVar36);
          fVar75 = *pfVar18;
          pfVar18 = (float *)((long)pfVar18 + uVar31);
          pfVar23 = pfVar20 + 1;
          fVar50 = fVar50 + (fVar38 - fVar75) * *pfVar20;
          pfVar20 = pfVar23;
        } while (pfVar23 != pfVar3 + (ulong)(uVar5 - 1) + 2);
      }
      *(float *)(param_3 + (long)iVar15 * 4 + lVar37) = fVar50;
      lVar37 = lVar37 + 4;
    } while (lVar37 != ((ulong)(uint)((param_4 + -1) - iVar15) + 1) * 4);
    return;
  }
  iVar15 = *(int *)(param_1 + 8);
  uVar22 = uVar31;
  if (iVar15 == 1) {
    if (*(float *)(lVar37 + uVar36) != 1.0) goto LAB_001c24fc;
    if ((int)uVar30 < param_4 + -1) {
      lVar37 = (long)(int)uVar30;
      puVar19 = (undefined8 *)(param_2 + (lVar26 + lVar37) * 4);
      puVar16 = (undefined8 *)(param_3 + lVar37 * 4);
      uVar33 = (param_4 + -2) - uVar30;
      uVar32 = uVar33 >> 1;
      if ((puVar16 < (undefined8 *)(param_2 + (lVar26 + lVar37 + 8) * 4) &&
           puVar19 < (undefined8 *)(param_3 + lVar37 * 4 + 0x20)) || (uVar32 + 1 < 6)) {
        pfVar17 = pfVar29 + lVar37;
        do {
          pfVar18 = pfVar17 + 2;
          *puVar16 = *(undefined8 *)pfVar17;
          puVar16 = puVar16 + 1;
          pfVar17 = pfVar18;
        } while (pfVar18 != pfVar29 + lVar37 + 2 + (ulong)uVar32 * 2);
      }
      else {
        uVar1 = (uVar32 - 1 >> 1) + 1;
        uVar2 = uVar30;
        if (1 < uVar33) {
          uVar33 = 0;
          do {
            uVar65 = *puVar19;
            uVar33 = uVar33 + 1;
            puVar16[1] = puVar19[1];
            *puVar16 = uVar65;
            puVar16 = puVar16 + 2;
            puVar19 = puVar19 + 2;
          } while (uVar33 < uVar1);
          uVar2 = uVar30 + uVar1 * 4;
          if (uVar1 * 2 == uVar32 + 1) goto LAB_001c2adc;
        }
        uVar36 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        *(undefined8 *)(param_3 + uVar36) = *(undefined8 *)((long)pfVar29 + uVar36);
      }
LAB_001c2adc:
      uVar32 = uVar30 + 2 + uVar32 * 2;
      uVar22 = (ulong)uVar32;
      uVar31 = (ulong)(int)uVar32;
    }
    pfVar29 = pfVar29 + uVar31;
    goto LAB_001c24fc;
  }
  if (iVar15 != 3) {
    if (iVar15 != 5) goto LAB_001c24fc;
    fVar38 = pfVar3[1];
    fVar50 = *(float *)(lVar37 + uVar36);
    fVar75 = pfVar3[2];
    if ((fVar38 != 0.0 || fVar50 != -2.0) || (fVar75 != 1.0)) {
      iVar15 = param_4 + -1;
      if (iVar15 <= (int)uVar30) goto LAB_001c24fc;
      uVar33 = (param_4 + -2) - uVar30;
      lVar34 = (long)(int)(param_5 << 1);
      uVar32 = uVar33 >> 1;
      uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
      lVar27 = (long)(int)(param_5 * -2);
      pfVar17 = (float *)(param_3 + uVar36);
      pfVar18 = (float *)(param_3 + uVar36 + 0x20);
      pfVar20 = (float *)(param_2 + (lVar26 + lVar34) * 4);
      lVar25 = (long)(int)-param_5;
      pfVar23 = (float *)(param_2 + (lVar26 + lVar27) * 4);
      pfVar24 = (float *)(param_2 + (lVar26 + lVar25 + 1) * 4);
      lVar37 = (long)(int)param_5;
      pfVar35 = (float *)(param_2 + (lVar26 + lVar25) * 4);
      uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
      pfVar28 = (float *)(param_2 + (lVar26 + lVar37) * 4);
      if ((((((uVar32 + 1 < 4 ||
              pfVar17 < (float *)(param_2 + (lVar26 + lVar34 + 8) * 4) && pfVar20 < pfVar18) ||
             pfVar29 < pfVar18 && pfVar17 < (float *)(param_2 + (lVar21 + 8 + uVar31) * 4)) ||
            pfVar17 < (float *)(param_2 + (lVar26 + lVar27 + 8) * 4) && pfVar23 < pfVar18) ||
           pfVar24 < pfVar18 && pfVar17 < (float *)(param_2 + (lVar26 + lVar25 + 9) * 4)) ||
           pfVar17 < (float *)(param_2 + (lVar26 + lVar25 + 8) * 4) && pfVar35 < pfVar18) ||
         (pfVar17 < (float *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar28 < pfVar18)) {
        pfVar18 = pfVar29;
        do {
          fVar41 = pfVar18[lVar37];
          fVar39 = pfVar18[lVar25];
          fVar42 = pfVar18[lVar27];
          fVar40 = pfVar18[lVar34];
          pfVar20 = pfVar18 + 2;
          fVar43 = *pfVar18;
          pfVar17[1] = (*(float *)((long)pfVar18 + uVar36) + pfVar18[lVar37 + 1]) * fVar38 +
                       fVar50 * pfVar18[1] + fVar75 * (pfVar18[lVar27 + 1] + pfVar18[lVar34 + 1]);
          *pfVar17 = (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
          pfVar18 = pfVar20;
          pfVar17 = pfVar17 + 2;
        } while (pfVar20 != pfVar29 + ((ulong)uVar32 + 1) * 2);
      }
      else {
        uVar1 = (uVar32 - 4 >> 2) + 1;
        pfVar18 = pfVar29;
        uVar2 = uVar30;
        if (7 < uVar33) {
          uVar33 = 0;
          do {
            fVar39 = *pfVar35;
            fVar41 = pfVar35[2];
            fVar44 = pfVar35[4];
            fVar47 = pfVar35[6];
            pfVar35 = pfVar35 + 8;
            uVar33 = uVar33 + 1;
            fVar40 = *pfVar28;
            fVar51 = pfVar28[1];
            fVar42 = pfVar28[2];
            fVar55 = pfVar28[3];
            fVar45 = pfVar28[4];
            fVar58 = pfVar28[5];
            fVar48 = pfVar28[6];
            fVar61 = pfVar28[7];
            pfVar28 = pfVar28 + 8;
            _local_100 = CONCAT14(SUB41(fVar42,0),fVar40);
            _local_100 = CONCAT15((char)((uint)fVar42 >> 8),_local_100);
            _local_100 = CONCAT16((char)((uint)fVar42 >> 0x10),_local_100);
            _local_100 = CONCAT17((char)((uint)fVar42 >> 0x18),_local_100);
            fVar42 = *pfVar18;
            fVar52 = pfVar18[1];
            fVar43 = pfVar18[2];
            fVar56 = pfVar18[3];
            fVar46 = pfVar18[4];
            fVar59 = pfVar18[5];
            fVar49 = pfVar18[6];
            fVar62 = pfVar18[7];
            pfVar18 = pfVar18 + 8;
            fVar53 = *pfVar23;
            fVar64 = pfVar23[1];
            fVar57 = pfVar23[2];
            fVar66 = pfVar23[3];
            fVar60 = pfVar23[4];
            fVar69 = pfVar23[5];
            fVar63 = pfVar23[6];
            fVar72 = pfVar23[7];
            pfVar23 = pfVar23 + 8;
            _local_d0 = CONCAT14(SUB41(fVar66,0),fVar64);
            _local_d0 = CONCAT15((char)((uint)fVar66 >> 8),_local_d0);
            _local_d0 = CONCAT16((char)((uint)fVar66 >> 0x10),_local_d0);
            _local_d0 = CONCAT17((char)((uint)fVar66 >> 0x18),_local_d0);
            _fStack_c8 = CONCAT14(SUB41(fVar72,0),fVar69);
            _fStack_c8 = CONCAT15((char)((uint)fVar72 >> 8),_fStack_c8);
            _fStack_c8 = CONCAT16((char)((uint)fVar72 >> 0x10),_fStack_c8);
            _fStack_c8 = CONCAT17((char)((uint)fVar72 >> 0x18),_fStack_c8);
            fVar66 = *pfVar24;
            fVar67 = pfVar24[2];
            fVar70 = pfVar24[4];
            fVar73 = pfVar24[6];
            pfVar24 = pfVar24 + 8;
            fVar41 = (float)(CONCAT17((char)((uint)fVar41 >> 0x18),
                                      CONCAT16((char)((uint)fVar41 >> 0x10),
                                               CONCAT15((char)((uint)fVar41 >> 8),
                                                        CONCAT14(SUB41(fVar41,0),fVar39)))) >> 0x20)
                     + uStack_fc;
            fVar72 = *pfVar20;
            fVar76 = pfVar20[1];
            fVar68 = pfVar20[2];
            fVar79 = pfVar20[3];
            fVar71 = pfVar20[4];
            fVar80 = pfVar20[5];
            fVar74 = pfVar20[6];
            fVar82 = pfVar20[7];
            pfVar20 = pfVar20 + 8;
            _local_100 = CONCAT14(SUB41(fVar68,0),fVar72);
            _local_100 = CONCAT15((char)((uint)fVar68 >> 8),_local_100);
            _local_100 = CONCAT16((char)((uint)fVar68 >> 0x10),_local_100);
            _local_100 = CONCAT17((char)((uint)fVar68 >> 0x18),_local_100);
            *pfVar17 = (fVar39 + fVar40) * fVar38 + fVar42 * fVar50 + (fVar53 + fVar72) * fVar75;
            pfVar17[1] = (fVar51 + fVar66) * fVar38 + fVar52 * fVar50 + (fVar64 + fVar76) * fVar75;
            pfVar17[2] = fVar41 * fVar38 +
                         (float)(CONCAT17((char)((uint)fVar43 >> 0x18),
                                          CONCAT16((char)((uint)fVar43 >> 0x10),
                                                   CONCAT15((char)((uint)fVar43 >> 8),
                                                            CONCAT14(SUB41(fVar43,0),fVar42)))) >>
                                0x20) * fVar50 +
                         ((float)(CONCAT17((char)((uint)fVar57 >> 0x18),
                                           CONCAT16((char)((uint)fVar57 >> 0x10),
                                                    CONCAT15((char)((uint)fVar57 >> 8),
                                                             CONCAT14(SUB41(fVar57,0),fVar53)))) >>
                                 0x20) + (float)((ulong)_local_100 >> 0x20)) * fVar75;
            pfVar17[3] = (fVar55 + fVar67) * fVar38 +
                         (float)(CONCAT17((char)((uint)fVar56 >> 0x18),
                                          CONCAT16((char)((uint)fVar56 >> 0x10),
                                                   CONCAT15((char)((uint)fVar56 >> 8),
                                                            CONCAT14(SUB41(fVar56,0),fVar52)))) >>
                                0x20) * fVar50 +
                         (uStack_cc +
                         (float)(CONCAT17((char)((uint)fVar79 >> 0x18),
                                          CONCAT16((char)((uint)fVar79 >> 0x10),
                                                   CONCAT15((char)((uint)fVar79 >> 8),
                                                            CONCAT14(SUB41(fVar79,0),fVar76)))) >>
                                0x20)) * fVar75;
            pfVar17[4] = (fVar44 + fVar45) * fVar38 + fVar46 * fVar50 + (fVar60 + fVar71) * fVar75;
            pfVar17[5] = (fVar58 + fVar70) * fVar38 + fVar59 * fVar50 + (fVar69 + fVar80) * fVar75;
            pfVar17[6] = ((float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                           CONCAT16((char)((uint)fVar47 >> 0x10),
                                                    CONCAT15((char)((uint)fVar47 >> 8),
                                                             CONCAT14(SUB41(fVar47,0),fVar44)))) >>
                                 0x20) + fVar48) * fVar38 +
                         (float)(CONCAT17((char)((uint)fVar49 >> 0x18),
                                          CONCAT16((char)((uint)fVar49 >> 0x10),
                                                   CONCAT15((char)((uint)fVar49 >> 8),
                                                            CONCAT14(SUB41(fVar49,0),fVar46)))) >>
                                0x20) * fVar50 +
                         ((float)(CONCAT17((char)((uint)fVar63 >> 0x18),
                                           CONCAT16((char)((uint)fVar63 >> 0x10),
                                                    CONCAT15((char)((uint)fVar63 >> 8),
                                                             CONCAT14(SUB41(fVar63,0),fVar60)))) >>
                                 0x20) +
                         (float)(CONCAT17((char)((uint)fVar74 >> 0x18),
                                          CONCAT16((char)((uint)fVar74 >> 0x10),
                                                   CONCAT15((char)((uint)fVar74 >> 8),
                                                            CONCAT14(SUB41(fVar74,0),fVar71)))) >>
                                0x20)) * fVar75;
            pfVar17[7] = (fVar61 + fVar73) * fVar38 +
                         (float)(CONCAT17((char)((uint)fVar62 >> 0x18),
                                          CONCAT16((char)((uint)fVar62 >> 0x10),
                                                   CONCAT15((char)((uint)fVar62 >> 8),
                                                            CONCAT14(SUB41(fVar62,0),fVar59)))) >>
                                0x20) * fVar50 +
                         (uStack_c4 +
                         (float)(CONCAT17((char)((uint)fVar82 >> 0x18),
                                          CONCAT16((char)((uint)fVar82 >> 0x10),
                                                   CONCAT15((char)((uint)fVar82 >> 8),
                                                            CONCAT14(SUB41(fVar82,0),fVar80)))) >>
                                0x20)) * fVar75;
            pfVar17 = pfVar17 + 8;
          } while (uVar33 < uVar1);
          pfVar18 = pfVar29 + (ulong)(uVar1 * 4) * 2;
          uVar2 = uVar30 + uVar1 * 8;
          if (uVar32 + 1 == uVar1 * 4) goto LAB_001c3294;
        }
        fVar42 = pfVar18[lVar37 + 1];
        uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        fVar39 = *(float *)((long)pfVar18 + uVar36);
        uVar33 = uVar2 + 2;
        fVar41 = pfVar18[1];
        fVar43 = pfVar18[lVar34 + 1];
        fVar40 = pfVar18[lVar27 + 1];
        *(float *)(param_3 + uVar31) =
             (pfVar18[lVar25] + pfVar18[lVar37]) * fVar38 + fVar50 * *pfVar18 +
             fVar75 * (pfVar18[lVar27] + pfVar18[lVar37 * 2]);
        *(float *)(param_3 + uVar31 + 4) =
             (fVar39 + fVar42) * fVar38 + fVar50 * fVar41 + fVar75 * (fVar40 + fVar43);
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          fVar41 = pfVar18[lVar37 + 3];
          fVar39 = *(float *)((long)pfVar18 + uVar36 + 8);
          uVar33 = uVar2 + 4;
          fVar43 = pfVar18[3];
          fVar42 = pfVar18[lVar27 + 3];
          fVar40 = pfVar18[lVar34 + 3];
          *(float *)(param_3 + uVar31) =
               (pfVar18[lVar25 + 2] + pfVar18[lVar37 + 2]) * fVar38 + fVar50 * pfVar18[2] +
               fVar75 * (pfVar18[lVar27 + 2] + pfVar18[lVar37 * 2 + 2]);
          *(float *)(param_3 + uVar31 + 4) =
               (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar41 = pfVar18[lVar37 + 5];
            fVar39 = *(float *)((long)pfVar18 + uVar36 + 0x10);
            uVar33 = uVar2 + 6;
            fVar43 = pfVar18[5];
            fVar42 = pfVar18[lVar27 + 5];
            fVar40 = pfVar18[lVar34 + 5];
            *(float *)(param_3 + uVar31) =
                 (pfVar18[lVar25 + 4] + pfVar18[lVar37 + 4]) * fVar38 + fVar50 * pfVar18[4] +
                 fVar75 * (pfVar18[lVar27 + 4] + pfVar18[lVar37 * 2 + 4]);
            *(float *)(param_3 + uVar31 + 4) =
                 (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar41 = pfVar18[lVar37 + 7];
              fVar39 = *(float *)((long)pfVar18 + uVar36 + 0x18);
              uVar33 = uVar2 + 8;
              fVar43 = pfVar18[7];
              fVar42 = pfVar18[lVar27 + 7];
              fVar40 = pfVar18[lVar34 + 7];
              *(float *)(param_3 + uVar31) =
                   (pfVar18[lVar25 + 6] + pfVar18[lVar37 + 6]) * fVar38 + fVar50 * pfVar18[6] +
                   fVar75 * (pfVar18[lVar27 + 6] + pfVar18[lVar37 * 2 + 6]);
              *(float *)(param_3 + uVar31 + 4) =
                   (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                fVar41 = pfVar18[lVar37 + 9];
                fVar39 = *(float *)((long)pfVar18 + uVar36 + 0x20);
                uVar33 = uVar2 + 10;
                fVar43 = pfVar18[9];
                fVar42 = pfVar18[lVar27 + 9];
                fVar40 = pfVar18[lVar34 + 9];
                *(float *)(param_3 + uVar31) =
                     (pfVar18[lVar25 + 8] + pfVar18[lVar37 + 8]) * fVar38 + fVar50 * pfVar18[8] +
                     fVar75 * (pfVar18[lVar27 + 8] + pfVar18[lVar37 * 2 + 8]);
                *(float *)(param_3 + uVar31 + 4) =
                     (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
                if ((int)uVar33 < iVar15) {
                  uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                  fVar41 = pfVar18[lVar37 + 0xb];
                  fVar39 = *(float *)((long)pfVar18 + uVar36 + 0x28);
                  uVar2 = uVar2 + 0xc;
                  fVar43 = pfVar18[0xb];
                  fVar42 = pfVar18[lVar27 + 0xb];
                  fVar40 = pfVar18[lVar34 + 0xb];
                  *(float *)(param_3 + uVar31) =
                       (pfVar18[lVar25 + 10] + pfVar18[lVar37 + 10]) * fVar38 + fVar50 * pfVar18[10]
                       + fVar75 * (pfVar18[lVar27 + 10] + pfVar18[lVar37 * 2 + 10]);
                  *(float *)(param_3 + uVar31 + 4) =
                       (fVar39 + fVar41) * fVar38 + fVar50 * fVar43 + fVar75 * (fVar42 + fVar40);
                  if ((int)uVar2 < iVar15) {
                    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                    fVar42 = pfVar18[lVar37 + 0xd];
                    fVar39 = *(float *)((long)pfVar18 + uVar36 + 0x30);
                    fVar41 = pfVar18[0xd];
                    fVar40 = pfVar18[lVar27 + 0xd];
                    fVar43 = pfVar18[lVar34 + 0xd];
                    *(float *)(param_3 + uVar31) =
                         (pfVar18[lVar25 + 0xc] + pfVar18[lVar37 + 0xc]) * fVar38 +
                         fVar50 * pfVar18[0xc] +
                         fVar75 * (pfVar18[lVar27 + 0xc] + pfVar18[lVar37 * 2 + 0xc]);
                    *(float *)(param_3 + uVar31 + 4) =
                         (fVar39 + fVar42) * fVar38 + fVar50 * fVar41 + fVar75 * (fVar40 + fVar43);
                  }
                }
              }
            }
          }
        }
      }
LAB_001c3294:
      pfVar29 = pfVar29 + ((ulong)uVar32 + 1) * 2;
      uVar22 = (ulong)(uVar30 + 2 + uVar32 * 2);
      goto LAB_001c24fc;
    }
    if (param_4 + -1 <= (int)uVar30) goto LAB_001c24fc;
    uVar33 = (param_4 + -2) - uVar30;
    uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
    lVar25 = (long)(int)(param_5 << 1);
    uVar32 = uVar33 >> 1;
    puVar19 = (undefined8 *)(param_3 + uVar36);
    pfVar17 = (float *)(param_3 + uVar36 + 0x20);
    pfVar18 = (float *)(param_2 + (lVar26 + lVar25) * 4);
    lVar37 = (long)(int)(param_5 * -2);
    pfVar20 = (float *)(param_2 + (lVar26 + lVar37) * 4);
    if (((uVar32 + 1 < 4 ||
         puVar19 < (undefined8 *)(param_2 + (lVar26 + lVar25 + 8) * 4) && pfVar18 < pfVar17) ||
         pfVar29 < pfVar17 && puVar19 < (undefined8 *)(param_2 + (lVar21 + 8 + uVar31) * 4)) ||
       (puVar19 < (undefined8 *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar20 < pfVar17)) {
      uVar65 = NEON_fmov(0xc0000000,4);
      pfVar17 = pfVar29;
      do {
        pfVar18 = pfVar17 + lVar37;
        uVar78 = *(undefined8 *)pfVar17;
        pfVar20 = pfVar17 + lVar25;
        pfVar17 = pfVar17 + 2;
        *puVar19 = CONCAT44((float)((ulong)*(undefined8 *)pfVar18 >> 0x20) +
                            (float)((ulong)uVar78 >> 0x20) * (float)((ulong)uVar65 >> 0x20) +
                            (float)((ulong)*(undefined8 *)pfVar20 >> 0x20),
                            (float)*(undefined8 *)pfVar18 + (float)uVar78 * (float)uVar65 +
                            (float)*(undefined8 *)pfVar20);
        puVar19 = puVar19 + 1;
      } while (pfVar17 != pfVar29 + ((ulong)uVar32 + 1) * 2);
    }
    else {
      uVar1 = (uVar32 - 1 >> 1) + 1;
      pfVar17 = pfVar29;
      uVar2 = uVar30;
      if (1 < uVar33) {
        auVar54 = NEON_fmov(0xc0000000,4);
        lVar26 = 0;
        uVar33 = 0;
        do {
          puVar16 = (undefined8 *)((long)pfVar20 + lVar26);
          puVar4 = (undefined8 *)((long)puVar19 + lVar26);
          uVar81 = ((undefined8 *)((long)pfVar29 + lVar26))[1];
          uVar77 = *(undefined8 *)((long)pfVar29 + lVar26);
          uVar33 = uVar33 + 1;
          uVar78 = puVar16[1];
          uVar65 = *puVar16;
          auVar6 = *(undefined1 (*) [16])((long)pfVar18 + lVar26);
          lVar26 = lVar26 + 0x10;
          puVar4[1] = CONCAT44((float)((ulong)uVar78 >> 0x20) +
                               (float)((ulong)uVar81 >> 0x20) * auVar54._12_4_ + auVar6._12_4_,
                               (float)uVar78 + (float)uVar81 * auVar54._8_4_ + auVar6._8_4_);
          *puVar4 = CONCAT44((float)((ulong)uVar65 >> 0x20) +
                             (float)((ulong)uVar77 >> 0x20) * auVar54._4_4_ + auVar6._4_4_,
                             (float)uVar65 + (float)uVar77 * auVar54._0_4_ + auVar6._0_4_);
        } while (uVar33 < uVar1);
        pfVar17 = pfVar29 + (ulong)(uVar1 * 2) * 2;
        uVar2 = uVar30 + uVar1 * 4;
        if (uVar32 + 1 == uVar1 * 2) goto LAB_001c2c8c;
      }
      uVar65 = NEON_fmov(0xc0000000,4);
      *(ulong *)(param_3 + (long)(int)uVar2 * 4) =
           CONCAT44((float)((ulong)*(undefined8 *)(pfVar17 + lVar37) >> 0x20) +
                    (float)((ulong)*(undefined8 *)pfVar17 >> 0x20) * (float)((ulong)uVar65 >> 0x20)
                    + (float)((ulong)*(undefined8 *)(pfVar17 + lVar25) >> 0x20),
                    (float)*(undefined8 *)(pfVar17 + lVar37) +
                    (float)*(undefined8 *)pfVar17 * (float)uVar65 +
                    (float)*(undefined8 *)(pfVar17 + lVar25));
    }
LAB_001c2c8c:
    pfVar29 = pfVar29 + ((ulong)uVar32 + 1) * 2;
    uVar22 = (ulong)(uVar30 + 2 + uVar32 * 2);
    goto LAB_001c24fc;
  }
  fVar50 = *(float *)(lVar37 + uVar36);
  if (fVar50 == 2.0) {
    fVar38 = pfVar3[1];
    if (fVar38 == 1.0) {
      iVar15 = param_4 + -1;
      if (iVar15 <= (int)uVar30) goto LAB_001c24fc;
      uVar33 = (param_4 + -2) - uVar30;
      uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
      lVar25 = (long)(int)-param_5;
      uVar32 = uVar33 >> 1;
      pfVar17 = (float *)(param_3 + uVar36 + 0x20);
      pfVar18 = (float *)(param_2 + (lVar26 + lVar25 + 1) * 4);
      pfVar20 = (float *)(param_3 + uVar36);
      pfVar23 = (float *)(param_2 + (lVar26 + lVar25) * 4);
      lVar37 = (long)(int)param_5;
      uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
      pfVar24 = (float *)(param_2 + (lVar26 + lVar37) * 4);
      if ((((uVar32 + 1 < 5 ||
            pfVar18 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar26 + lVar25 + 9) * 4)) ||
           pfVar29 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar21 + 8 + uVar31) * 4)) ||
           pfVar20 < (float *)(param_2 + (lVar26 + lVar25 + 8) * 4) && pfVar23 < pfVar17) ||
         (pfVar20 < (float *)(param_2 + (lVar26 + lVar37 + 8) * 4) && pfVar24 < pfVar17)) {
        uVar22 = (ulong)uVar32;
        pfVar17 = pfVar29;
        do {
          pfVar18 = pfVar17 + 1;
          fVar50 = *pfVar17;
          pfVar23 = (float *)((long)pfVar17 + uVar36);
          fVar38 = pfVar17[lVar25];
          pfVar24 = pfVar17 + lVar37 + 1;
          fVar75 = pfVar17[lVar37];
          pfVar17 = pfVar17 + 2;
          pfVar20[1] = *pfVar23 + *pfVar18 * 2.0 + *pfVar24;
          *pfVar20 = fVar38 + fVar50 * 2.0 + fVar75;
          pfVar20 = pfVar20 + 2;
        } while (pfVar17 != pfVar29 + (uVar22 + 1) * 2);
      }
      else {
        uVar1 = (uVar32 - 4 >> 2) + 1;
        pfVar17 = pfVar29;
        uVar2 = uVar30;
        if (7 < uVar33) {
          auVar54 = NEON_fmov(0x40000000,4);
          uVar33 = 0;
          do {
            fVar50 = *pfVar23;
            fVar39 = pfVar23[2];
            fVar41 = pfVar23[4];
            fVar45 = pfVar23[6];
            pfVar23 = pfVar23 + 8;
            uVar33 = uVar33 + 1;
            fVar56 = *pfVar18;
            fVar57 = pfVar18[2];
            fVar58 = pfVar18[4];
            fVar59 = pfVar18[6];
            pfVar18 = pfVar18 + 8;
            fVar38 = *pfVar17;
            fVar48 = pfVar17[1];
            fVar40 = pfVar17[2];
            fVar75 = pfVar17[3];
            fVar43 = pfVar17[4];
            fVar52 = pfVar17[5];
            fVar46 = pfVar17[6];
            fVar42 = pfVar17[7];
            pfVar17 = pfVar17 + 8;
            _local_d0 = CONCAT14(SUB41(fVar75,0),fVar48);
            _local_d0 = CONCAT15((char)((uint)fVar75 >> 8),_local_d0);
            _local_d0 = CONCAT16((char)((uint)fVar75 >> 0x10),_local_d0);
            _local_d0 = CONCAT17((char)((uint)fVar75 >> 0x18),_local_d0);
            _fStack_c8 = CONCAT14(SUB41(fVar42,0),fVar52);
            _fStack_c8 = CONCAT15((char)((uint)fVar42 >> 8),_fStack_c8);
            _fStack_c8 = CONCAT16((char)((uint)fVar42 >> 0x10),_fStack_c8);
            _fStack_c8 = CONCAT17((char)((uint)fVar42 >> 0x18),_fStack_c8);
            fVar75 = *pfVar24;
            fVar49 = pfVar24[1];
            fVar42 = pfVar24[2];
            fVar51 = pfVar24[3];
            fVar44 = pfVar24[4];
            fVar53 = pfVar24[5];
            fVar47 = pfVar24[6];
            fVar55 = pfVar24[7];
            pfVar24 = pfVar24 + 8;
            _local_100 = CONCAT14(SUB41(fVar42,0),fVar75);
            _local_100 = CONCAT15((char)((uint)fVar42 >> 8),_local_100);
            _local_100 = CONCAT16((char)((uint)fVar42 >> 0x10),_local_100);
            _local_100 = CONCAT17((char)((uint)fVar42 >> 0x18),_local_100);
            *pfVar20 = fVar50 + auVar54._0_4_ * fVar38 + fVar75;
            pfVar20[1] = fVar56 + fVar48 * auVar54._0_4_ + fVar49;
            pfVar20[2] = (float)(CONCAT17((char)((uint)fVar39 >> 0x18),
                                          CONCAT16((char)((uint)fVar39 >> 0x10),
                                                   CONCAT15((char)((uint)fVar39 >> 8),
                                                            CONCAT14(SUB41(fVar39,0),fVar50)))) >>
                                0x20) +
                         auVar54._4_4_ *
                         (float)(CONCAT17((char)((uint)fVar40 >> 0x18),
                                          CONCAT16((char)((uint)fVar40 >> 0x10),
                                                   CONCAT15((char)((uint)fVar40 >> 8),
                                                            CONCAT14(SUB41(fVar40,0),fVar38)))) >>
                                0x20) + (float)((ulong)_local_100 >> 0x20);
            pfVar20[3] = (float)(CONCAT17((char)((uint)fVar57 >> 0x18),
                                          CONCAT16((char)((uint)fVar57 >> 0x10),
                                                   CONCAT15((char)((uint)fVar57 >> 8),
                                                            CONCAT14(SUB41(fVar57,0),fVar56)))) >>
                                0x20) + uStack_cc * auVar54._4_4_ +
                         (float)(CONCAT17((char)((uint)fVar51 >> 0x18),
                                          CONCAT16((char)((uint)fVar51 >> 0x10),
                                                   CONCAT15((char)((uint)fVar51 >> 8),
                                                            CONCAT14(SUB41(fVar51,0),fVar49)))) >>
                                0x20);
            pfVar20[4] = fVar41 + auVar54._8_4_ * fVar43 + fVar44;
            pfVar20[5] = fVar58 + fVar52 * auVar54._8_4_ + fVar53;
            pfVar20[6] = (float)(CONCAT17((char)((uint)fVar45 >> 0x18),
                                          CONCAT16((char)((uint)fVar45 >> 0x10),
                                                   CONCAT15((char)((uint)fVar45 >> 8),
                                                            CONCAT14(SUB41(fVar45,0),fVar41)))) >>
                                0x20) +
                         auVar54._12_4_ *
                         (float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                          CONCAT16((char)((uint)fVar46 >> 0x10),
                                                   CONCAT15((char)((uint)fVar46 >> 8),
                                                            CONCAT14(SUB41(fVar46,0),fVar43)))) >>
                                0x20) +
                         (float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                          CONCAT16((char)((uint)fVar47 >> 0x10),
                                                   CONCAT15((char)((uint)fVar47 >> 8),
                                                            CONCAT14(SUB41(fVar47,0),fVar44)))) >>
                                0x20);
            pfVar20[7] = (float)(CONCAT17((char)((uint)fVar59 >> 0x18),
                                          CONCAT16((char)((uint)fVar59 >> 0x10),
                                                   CONCAT15((char)((uint)fVar59 >> 8),
                                                            CONCAT14(SUB41(fVar59,0),fVar58)))) >>
                                0x20) + uStack_c4 * auVar54._12_4_ +
                         (float)(CONCAT17((char)((uint)fVar55 >> 0x18),
                                          CONCAT16((char)((uint)fVar55 >> 0x10),
                                                   CONCAT15((char)((uint)fVar55 >> 8),
                                                            CONCAT14(SUB41(fVar55,0),fVar53)))) >>
                                0x20);
            pfVar20 = pfVar20 + 8;
          } while (uVar33 < uVar1);
          pfVar17 = pfVar29 + (ulong)(uVar1 * 4) * 2;
          uVar2 = uVar30 + uVar1 * 8;
          if (uVar1 * 4 == uVar32 + 1) goto LAB_001c472c;
        }
        uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        uVar33 = uVar2 + 2;
        fVar38 = *(float *)((long)pfVar17 + uVar36);
        fVar50 = pfVar17[1];
        fVar75 = pfVar17[lVar37 + 1];
        *(float *)(param_3 + uVar31) = pfVar17[lVar25] + *pfVar17 * 2.0 + pfVar17[lVar37];
        *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          fVar38 = *(float *)((long)pfVar17 + uVar36 + 8);
          uVar33 = uVar2 + 4;
          fVar50 = pfVar17[3];
          fVar75 = pfVar17[lVar37 + 3];
          *(float *)(param_3 + uVar31) =
               pfVar17[lVar25 + 2] + pfVar17[2] * 2.0 + pfVar17[lVar37 + 2];
          *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x10);
            uVar33 = uVar2 + 6;
            fVar50 = pfVar17[5];
            fVar75 = pfVar17[lVar37 + 5];
            *(float *)(param_3 + uVar31) =
                 pfVar17[lVar25 + 4] + pfVar17[4] * 2.0 + pfVar17[lVar37 + 4];
            *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x18);
              uVar33 = uVar2 + 8;
              fVar50 = pfVar17[7];
              fVar75 = pfVar17[lVar37 + 7];
              *(float *)(param_3 + uVar31) =
                   pfVar17[lVar25 + 6] + pfVar17[6] * 2.0 + pfVar17[lVar37 + 6];
              *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x20);
                uVar33 = uVar2 + 10;
                fVar50 = pfVar17[9];
                fVar75 = pfVar17[lVar37 + 9];
                *(float *)(param_3 + uVar31) =
                     pfVar17[lVar25 + 8] + pfVar17[8] * 2.0 + pfVar17[lVar37 + 8];
                *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
                if ((int)uVar33 < iVar15) {
                  uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                  fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x28);
                  uVar2 = uVar2 + 0xc;
                  fVar50 = pfVar17[0xb];
                  pfVar18 = pfVar17 + 0xc;
                  fVar75 = pfVar17[lVar37 + 0xb];
                  *(float *)(param_3 + uVar31) =
                       pfVar17[lVar25 + 10] + pfVar17[10] * 2.0 + pfVar17[lVar37 + 10];
                  *(float *)(param_3 + uVar31 + 4) = fVar38 + fVar50 * 2.0 + fVar75;
                  if ((int)uVar2 < iVar15) {
                    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                    fVar38 = pfVar18[lVar25] + pfVar17[0xc] * 2.0;
                    fVar50 = *(float *)((long)pfVar18 + uVar36) + pfVar17[0xd] * 2.0;
LAB_001c46e0:
                    uVar22 = (ulong)uVar32;
                    fVar75 = pfVar18[(long)(int)param_5 + 1];
                    *(float *)(param_3 + uVar31) = fVar38 + pfVar18[(int)param_5];
                    *(float *)(param_3 + uVar31 + 4) = fVar50 + fVar75;
                    goto LAB_001c46f8;
                  }
                }
              }
            }
          }
        }
LAB_001c472c:
        uVar22 = (ulong)uVar32;
      }
LAB_001c46f8:
      pfVar29 = pfVar29 + (uVar22 + 1) * 2;
      uVar22 = (ulong)(uVar30 + 2 + uVar32 * 2);
      goto LAB_001c24fc;
    }
  }
  else {
    fVar38 = pfVar3[1];
    if ((fVar50 == -2.0) && (fVar38 == 1.0)) {
      iVar15 = param_4 + -1;
      if (iVar15 <= (int)uVar30) goto LAB_001c24fc;
      uVar33 = (param_4 + -2) - uVar30;
      uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
      lVar25 = (long)(int)-param_5;
      uVar32 = uVar33 >> 1;
      pfVar17 = (float *)(param_3 + uVar36 + 0x20);
      pfVar18 = (float *)(param_2 + (lVar26 + lVar25 + 1) * 4);
      pfVar20 = (float *)(param_3 + uVar36);
      pfVar23 = (float *)(param_2 + (lVar26 + lVar25) * 4);
      lVar37 = (long)(int)param_5;
      uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
      pfVar24 = (float *)(param_2 + (lVar26 + lVar37) * 4);
      if ((((4 < uVar32 + 1 &&
            (pfVar17 <= pfVar18 || (float *)(param_2 + (lVar26 + lVar25 + 9) * 4) <= pfVar20)) &&
           (pfVar17 <= pfVar29 || (float *)(param_2 + (lVar21 + 8 + uVar31) * 4) <= pfVar20)) &&
           ((float *)(param_2 + (lVar26 + lVar25 + 8) * 4) <= pfVar20 || pfVar17 <= pfVar23)) &&
         ((float *)(param_2 + (lVar26 + lVar37 + 8) * 4) <= pfVar20 || pfVar17 <= pfVar24)) {
        uVar1 = (uVar32 - 4 >> 2) + 1;
        pfVar17 = pfVar29;
        uVar2 = uVar30;
        if (7 < uVar33) {
          auVar54 = NEON_fmov(0x40000000,4);
          uVar33 = 0;
          do {
            fVar50 = *pfVar23;
            fVar39 = pfVar23[2];
            fVar41 = pfVar23[4];
            fVar45 = pfVar23[6];
            pfVar23 = pfVar23 + 8;
            uVar33 = uVar33 + 1;
            fVar56 = *pfVar18;
            fVar57 = pfVar18[2];
            fVar58 = pfVar18[4];
            fVar59 = pfVar18[6];
            pfVar18 = pfVar18 + 8;
            fVar38 = *pfVar17;
            fVar48 = pfVar17[1];
            fVar40 = pfVar17[2];
            fVar75 = pfVar17[3];
            fVar43 = pfVar17[4];
            fVar52 = pfVar17[5];
            fVar46 = pfVar17[6];
            fVar42 = pfVar17[7];
            pfVar17 = pfVar17 + 8;
            _local_d0 = CONCAT14(SUB41(fVar75,0),fVar48);
            _local_d0 = CONCAT15((char)((uint)fVar75 >> 8),_local_d0);
            _local_d0 = CONCAT16((char)((uint)fVar75 >> 0x10),_local_d0);
            _local_d0 = CONCAT17((char)((uint)fVar75 >> 0x18),_local_d0);
            _fStack_c8 = CONCAT14(SUB41(fVar42,0),fVar52);
            _fStack_c8 = CONCAT15((char)((uint)fVar42 >> 8),_fStack_c8);
            _fStack_c8 = CONCAT16((char)((uint)fVar42 >> 0x10),_fStack_c8);
            _fStack_c8 = CONCAT17((char)((uint)fVar42 >> 0x18),_fStack_c8);
            fVar75 = *pfVar24;
            fVar49 = pfVar24[1];
            fVar42 = pfVar24[2];
            fVar51 = pfVar24[3];
            fVar44 = pfVar24[4];
            fVar53 = pfVar24[5];
            fVar47 = pfVar24[6];
            fVar55 = pfVar24[7];
            pfVar24 = pfVar24 + 8;
            _local_100 = CONCAT14(SUB41(fVar42,0),fVar75);
            _local_100 = CONCAT15((char)((uint)fVar42 >> 8),_local_100);
            _local_100 = CONCAT16((char)((uint)fVar42 >> 0x10),_local_100);
            _local_100 = CONCAT17((char)((uint)fVar42 >> 0x18),_local_100);
            *pfVar20 = (fVar50 - fVar38 * auVar54._0_4_) + fVar75;
            pfVar20[1] = (fVar56 - fVar48 * auVar54._0_4_) + fVar49;
            pfVar20[2] = ((float)(CONCAT17((char)((uint)fVar39 >> 0x18),
                                           CONCAT16((char)((uint)fVar39 >> 0x10),
                                                    CONCAT15((char)((uint)fVar39 >> 8),
                                                             CONCAT14(SUB41(fVar39,0),fVar50)))) >>
                                 0x20) -
                         (float)(CONCAT17((char)((uint)fVar40 >> 0x18),
                                          CONCAT16((char)((uint)fVar40 >> 0x10),
                                                   CONCAT15((char)((uint)fVar40 >> 8),
                                                            CONCAT14(SUB41(fVar40,0),fVar38)))) >>
                                0x20) * auVar54._4_4_) + (float)((ulong)_local_100 >> 0x20);
            pfVar20[3] = ((float)(CONCAT17((char)((uint)fVar57 >> 0x18),
                                           CONCAT16((char)((uint)fVar57 >> 0x10),
                                                    CONCAT15((char)((uint)fVar57 >> 8),
                                                             CONCAT14(SUB41(fVar57,0),fVar56)))) >>
                                 0x20) - uStack_cc * auVar54._4_4_) +
                         (float)(CONCAT17((char)((uint)fVar51 >> 0x18),
                                          CONCAT16((char)((uint)fVar51 >> 0x10),
                                                   CONCAT15((char)((uint)fVar51 >> 8),
                                                            CONCAT14(SUB41(fVar51,0),fVar49)))) >>
                                0x20);
            pfVar20[4] = (fVar41 - fVar43 * auVar54._8_4_) + fVar44;
            pfVar20[5] = (fVar58 - fVar52 * auVar54._8_4_) + fVar53;
            pfVar20[6] = ((float)(CONCAT17((char)((uint)fVar45 >> 0x18),
                                           CONCAT16((char)((uint)fVar45 >> 0x10),
                                                    CONCAT15((char)((uint)fVar45 >> 8),
                                                             CONCAT14(SUB41(fVar45,0),fVar41)))) >>
                                 0x20) -
                         (float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                          CONCAT16((char)((uint)fVar46 >> 0x10),
                                                   CONCAT15((char)((uint)fVar46 >> 8),
                                                            CONCAT14(SUB41(fVar46,0),fVar43)))) >>
                                0x20) * auVar54._12_4_) +
                         (float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                          CONCAT16((char)((uint)fVar47 >> 0x10),
                                                   CONCAT15((char)((uint)fVar47 >> 8),
                                                            CONCAT14(SUB41(fVar47,0),fVar44)))) >>
                                0x20);
            pfVar20[7] = ((float)(CONCAT17((char)((uint)fVar59 >> 0x18),
                                           CONCAT16((char)((uint)fVar59 >> 0x10),
                                                    CONCAT15((char)((uint)fVar59 >> 8),
                                                             CONCAT14(SUB41(fVar59,0),fVar58)))) >>
                                 0x20) - uStack_c4 * auVar54._12_4_) +
                         (float)(CONCAT17((char)((uint)fVar55 >> 0x18),
                                          CONCAT16((char)((uint)fVar55 >> 0x10),
                                                   CONCAT15((char)((uint)fVar55 >> 8),
                                                            CONCAT14(SUB41(fVar55,0),fVar53)))) >>
                                0x20);
            pfVar20 = pfVar20 + 8;
          } while (uVar33 < uVar1);
          pfVar17 = pfVar29 + (ulong)(uVar1 * 4) * 2;
          uVar2 = uVar30 + uVar1 * 8;
          if (uVar32 + 1 == uVar1 * 4) goto LAB_001c472c;
        }
        uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        uVar33 = uVar2 + 2;
        fVar38 = *(float *)((long)pfVar17 + uVar36);
        fVar50 = pfVar17[1];
        fVar75 = pfVar17[lVar37 + 1];
        *(float *)(param_3 + uVar31) = (pfVar17[lVar25] - *pfVar17 * 2.0) + pfVar17[lVar37];
        *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          fVar38 = *(float *)((long)pfVar17 + uVar36 + 8);
          uVar33 = uVar2 + 4;
          fVar50 = pfVar17[3];
          fVar75 = pfVar17[lVar37 + 3];
          *(float *)(param_3 + uVar31) =
               (pfVar17[lVar25 + 2] - pfVar17[2] * 2.0) + pfVar17[lVar37 + 2];
          *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x10);
            uVar33 = uVar2 + 6;
            fVar50 = pfVar17[5];
            fVar75 = pfVar17[lVar37 + 5];
            *(float *)(param_3 + uVar31) =
                 (pfVar17[lVar25 + 4] - pfVar17[4] * 2.0) + pfVar17[lVar37 + 4];
            *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x18);
              uVar33 = uVar2 + 8;
              fVar50 = pfVar17[7];
              fVar75 = pfVar17[lVar37 + 7];
              *(float *)(param_3 + uVar31) =
                   (pfVar17[lVar25 + 6] - pfVar17[6] * 2.0) + pfVar17[lVar37 + 6];
              *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
              if ((int)uVar33 < iVar15) {
                uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x20);
                uVar33 = uVar2 + 10;
                fVar50 = pfVar17[9];
                fVar75 = pfVar17[lVar37 + 9];
                *(float *)(param_3 + uVar31) =
                     (pfVar17[lVar25 + 8] - pfVar17[8] * 2.0) + pfVar17[lVar37 + 8];
                *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
                if ((int)uVar33 < iVar15) {
                  uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
                  fVar38 = *(float *)((long)pfVar17 + uVar36 + 0x28);
                  uVar2 = uVar2 + 0xc;
                  fVar50 = pfVar17[0xb];
                  pfVar18 = pfVar17 + 0xc;
                  fVar75 = pfVar17[lVar37 + 0xb];
                  *(float *)(param_3 + uVar31) =
                       (pfVar17[lVar25 + 10] - pfVar17[10] * 2.0) + pfVar17[lVar37 + 10];
                  *(float *)(param_3 + uVar31 + 4) = (fVar38 - fVar50 * 2.0) + fVar75;
                  if ((int)uVar2 < iVar15) {
                    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                    fVar38 = pfVar18[lVar25] - pfVar17[0xc] * 2.0;
                    fVar50 = *(float *)((long)pfVar18 + uVar36) - pfVar17[0xd] * 2.0;
                    goto LAB_001c46e0;
                  }
                }
              }
            }
          }
        }
        goto LAB_001c472c;
      }
      uVar22 = (ulong)uVar32;
      pfVar17 = pfVar29;
      do {
        pfVar18 = pfVar17 + 1;
        fVar50 = *pfVar17;
        pfVar23 = (float *)((long)pfVar17 + uVar36);
        fVar38 = pfVar17[lVar25];
        pfVar24 = pfVar17 + lVar37 + 1;
        fVar75 = pfVar17[lVar37];
        pfVar17 = pfVar17 + 2;
        pfVar20[1] = (*pfVar23 - *pfVar18 * 2.0) + *pfVar24;
        *pfVar20 = (fVar38 - fVar50 * 2.0) + fVar75;
        pfVar20 = pfVar20 + 2;
      } while (pfVar17 != pfVar29 + (uVar22 + 1) * 2);
      goto LAB_001c46f8;
    }
  }
  iVar15 = param_4 + -1;
  if (iVar15 <= (int)uVar30) goto LAB_001c24fc;
  uVar33 = (param_4 + -2) - uVar30;
  uVar36 = -(uVar31 >> 0x1f & 1) & 0xfffffffc00000000 | (uVar31 & 0xffffffff) << 2;
  lVar25 = (long)(int)-param_5;
  uVar32 = uVar33 >> 1;
  pfVar17 = (float *)(param_3 + uVar36 + 0x20);
  pfVar18 = (float *)(param_2 + (lVar26 + lVar25 + 1) * 4);
  pfVar20 = (float *)(param_3 + uVar36);
  pfVar23 = (float *)(param_2 + (lVar26 + lVar25) * 4);
  lVar37 = (long)(int)param_5;
  uVar36 = -(ulong)(1 - param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(1 - param_5) << 2;
  pfVar24 = (float *)(param_2 + (lVar26 + lVar37) * 4);
  if ((((uVar32 + 1 < 5 ||
        pfVar18 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar26 + lVar25 + 9) * 4)) ||
       pfVar29 < pfVar17 && pfVar20 < (float *)(param_2 + (lVar21 + 8 + uVar31) * 4)) ||
       pfVar20 < (float *)(param_2 + (lVar25 + 8 + lVar26) * 4) && pfVar23 < pfVar17) ||
     (pfVar20 < (float *)(param_2 + (lVar37 + 8 + lVar26) * 4) && pfVar24 < pfVar17)) {
    pfVar17 = pfVar29;
    do {
      fVar75 = pfVar17[lVar25];
      fVar39 = pfVar17[lVar37];
      pfVar18 = pfVar17 + 2;
      fVar40 = *pfVar17;
      pfVar20[1] = (*(float *)((long)pfVar17 + uVar36) + pfVar17[lVar37 + 1]) * fVar38 +
                   pfVar17[1] * fVar50;
      *pfVar20 = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
      pfVar17 = pfVar18;
      pfVar20 = pfVar20 + 2;
    } while (pfVar18 != pfVar29 + ((ulong)uVar32 + 1) * 2);
  }
  else {
    uVar1 = (uVar32 - 4 >> 2) + 1;
    pfVar17 = pfVar29;
    uVar2 = uVar30;
    if (7 < uVar33) {
      uVar33 = 0;
      do {
        fVar75 = *pfVar23;
        fVar42 = pfVar23[2];
        fVar43 = pfVar23[4];
        fVar46 = pfVar23[6];
        pfVar23 = pfVar23 + 8;
        uVar33 = uVar33 + 1;
        fVar59 = *pfVar18;
        fVar60 = pfVar18[2];
        fVar61 = pfVar18[4];
        fVar62 = pfVar18[6];
        pfVar18 = pfVar18 + 8;
        fVar39 = *pfVar24;
        fVar49 = pfVar24[1];
        fVar40 = pfVar24[2];
        fVar52 = pfVar24[3];
        fVar44 = pfVar24[4];
        fVar55 = pfVar24[5];
        fVar47 = pfVar24[6];
        fVar57 = pfVar24[7];
        pfVar24 = pfVar24 + 8;
        _local_100 = CONCAT14(SUB41(fVar40,0),fVar39);
        _local_100 = CONCAT15((char)((uint)fVar40 >> 8),_local_100);
        _local_100 = CONCAT16((char)((uint)fVar40 >> 0x10),_local_100);
        _local_100 = CONCAT17((char)((uint)fVar40 >> 0x18),_local_100);
        fVar40 = *pfVar17;
        fVar51 = pfVar17[1];
        fVar41 = pfVar17[2];
        fVar53 = pfVar17[3];
        fVar45 = pfVar17[4];
        fVar56 = pfVar17[5];
        fVar48 = pfVar17[6];
        fVar58 = pfVar17[7];
        pfVar17 = pfVar17 + 8;
        _local_d0 = CONCAT14(SUB41(fVar53,0),fVar51);
        _local_d0 = CONCAT15((char)((uint)fVar53 >> 8),_local_d0);
        _local_d0 = CONCAT16((char)((uint)fVar53 >> 0x10),_local_d0);
        _local_d0 = CONCAT17((char)((uint)fVar53 >> 0x18),_local_d0);
        _fStack_c8 = CONCAT14(SUB41(fVar58,0),fVar56);
        _fStack_c8 = CONCAT15((char)((uint)fVar58 >> 8),_fStack_c8);
        _fStack_c8 = CONCAT16((char)((uint)fVar58 >> 0x10),_fStack_c8);
        _fStack_c8 = CONCAT17((char)((uint)fVar58 >> 0x18),_fStack_c8);
        *pfVar20 = (fVar75 + fVar39) * fVar38 + fVar50 * fVar40;
        pfVar20[1] = (fVar49 + fVar59) * fVar38 + fVar50 * fVar51;
        pfVar20[2] = ((float)(CONCAT17((char)((uint)fVar42 >> 0x18),
                                       CONCAT16((char)((uint)fVar42 >> 0x10),
                                                CONCAT15((char)((uint)fVar42 >> 8),
                                                         CONCAT14(SUB41(fVar42,0),fVar75)))) >> 0x20
                             ) + (float)((ulong)_local_100 >> 0x20)) * fVar38 +
                     fVar50 * (float)(CONCAT17((char)((uint)fVar41 >> 0x18),
                                               CONCAT16((char)((uint)fVar41 >> 0x10),
                                                        CONCAT15((char)((uint)fVar41 >> 8),
                                                                 CONCAT14(SUB41(fVar41,0),fVar40))))
                                     >> 0x20);
        pfVar20[3] = (fVar52 + (float)(CONCAT17((char)((uint)fVar60 >> 0x18),
                                                CONCAT16((char)((uint)fVar60 >> 0x10),
                                                         CONCAT15((char)((uint)fVar60 >> 8),
                                                                  CONCAT14(SUB41(fVar60,0),fVar59)))
                                               ) >> 0x20)) * fVar38 +
                     fVar50 * (float)((ulong)_local_d0 >> 0x20);
        pfVar20[4] = (fVar43 + fVar44) * fVar38 + fVar50 * fVar45;
        pfVar20[5] = (fVar55 + fVar61) * fVar38 + fVar50 * fVar56;
        pfVar20[6] = ((float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                       CONCAT16((char)((uint)fVar46 >> 0x10),
                                                CONCAT15((char)((uint)fVar46 >> 8),
                                                         CONCAT14(SUB41(fVar46,0),fVar43)))) >> 0x20
                             ) +
                     (float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                      CONCAT16((char)((uint)fVar47 >> 0x10),
                                               CONCAT15((char)((uint)fVar47 >> 8),
                                                        CONCAT14(SUB41(fVar47,0),fVar44)))) >> 0x20)
                     ) * fVar38 +
                     fVar50 * (float)(CONCAT17((char)((uint)fVar48 >> 0x18),
                                               CONCAT16((char)((uint)fVar48 >> 0x10),
                                                        CONCAT15((char)((uint)fVar48 >> 8),
                                                                 CONCAT14(SUB41(fVar48,0),fVar45))))
                                     >> 0x20);
        pfVar20[7] = (fVar57 + (float)(CONCAT17((char)((uint)fVar62 >> 0x18),
                                                CONCAT16((char)((uint)fVar62 >> 0x10),
                                                         CONCAT15((char)((uint)fVar62 >> 8),
                                                                  CONCAT14(SUB41(fVar62,0),fVar61)))
                                               ) >> 0x20)) * fVar38 +
                     fVar50 * (float)((ulong)_fStack_c8 >> 0x20);
        pfVar20 = pfVar20 + 8;
      } while (uVar33 < uVar1);
      pfVar17 = pfVar29 + (ulong)(uVar1 * 4) * 2;
      uVar2 = uVar30 + uVar1 * 8;
      if (uVar32 + 1 == uVar1 * 4) goto LAB_001c3aac;
    }
    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    fVar39 = pfVar17[lVar37 + 1];
    fVar75 = *(float *)((long)pfVar17 + uVar36);
    uVar33 = uVar2 + 2;
    fVar40 = pfVar17[1];
    *(float *)(param_3 + uVar31) = (pfVar17[lVar25] + pfVar17[lVar37]) * fVar38 + *pfVar17 * fVar50;
    *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
    if ((int)uVar33 < iVar15) {
      uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
      fVar39 = pfVar17[lVar37 + 3];
      uVar33 = uVar2 + 4;
      fVar75 = *(float *)((long)pfVar17 + uVar36 + 8);
      fVar40 = pfVar17[3];
      *(float *)(param_3 + uVar31) =
           (pfVar17[lVar25 + 2] + pfVar17[lVar37 + 2]) * fVar38 + pfVar17[2] * fVar50;
      *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
      if ((int)uVar33 < iVar15) {
        uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
        fVar39 = pfVar17[lVar37 + 5];
        uVar33 = uVar2 + 6;
        fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x10);
        fVar40 = pfVar17[5];
        *(float *)(param_3 + uVar31) =
             (pfVar17[lVar25 + 4] + pfVar17[lVar37 + 4]) * fVar38 + pfVar17[4] * fVar50;
        *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
        if ((int)uVar33 < iVar15) {
          uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
          fVar39 = pfVar17[lVar37 + 7];
          uVar33 = uVar2 + 8;
          fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x18);
          fVar40 = pfVar17[7];
          *(float *)(param_3 + uVar31) =
               (pfVar17[lVar25 + 6] + pfVar17[lVar37 + 6]) * fVar38 + pfVar17[6] * fVar50;
          *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
          if ((int)uVar33 < iVar15) {
            uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
            fVar39 = pfVar17[lVar37 + 9];
            uVar33 = uVar2 + 10;
            fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x20);
            fVar40 = pfVar17[9];
            *(float *)(param_3 + uVar31) =
                 (pfVar17[lVar25 + 8] + pfVar17[lVar37 + 8]) * fVar38 + pfVar17[8] * fVar50;
            *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
            if ((int)uVar33 < iVar15) {
              uVar31 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar33 << 2;
              fVar39 = pfVar17[lVar37 + 0xb];
              uVar2 = uVar2 + 0xc;
              fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x28);
              fVar40 = pfVar17[0xb];
              *(float *)(param_3 + uVar31) =
                   (pfVar17[lVar25 + 10] + pfVar17[lVar37 + 10]) * fVar38 + pfVar17[10] * fVar50;
              *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
              if ((int)uVar2 < iVar15) {
                uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                fVar39 = pfVar17[lVar37 + 0xd];
                fVar75 = *(float *)((long)pfVar17 + uVar36 + 0x30);
                fVar40 = pfVar17[0xd];
                *(float *)(param_3 + uVar31) =
                     (pfVar17[lVar25 + 0xc] + pfVar17[lVar37 + 0xc]) * fVar38 +
                     pfVar17[0xc] * fVar50;
                *(float *)(param_3 + uVar31 + 4) = (fVar75 + fVar39) * fVar38 + fVar40 * fVar50;
              }
            }
          }
        }
      }
    }
  }
LAB_001c3aac:
  pfVar29 = pfVar29 + ((ulong)uVar32 + 1) * 2;
  uVar22 = (ulong)(uVar30 + 2 + uVar32 * 2);
LAB_001c24fc:
  iVar15 = (int)uVar22;
  if (iVar15 < param_4) {
    uVar36 = -(ulong)(param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_5 << 2;
    uVar31 = -(ulong)(-param_5 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_5 << 2;
    lVar37 = 0;
    do {
      fVar50 = *pfVar3 * *(float *)((long)pfVar29 + lVar37);
      if (0 < (int)uVar5) {
        pfVar17 = (float *)((long)pfVar29 + lVar37 + uVar36);
        pfVar18 = (float *)((long)pfVar29 + lVar37 + uVar31);
        pfVar20 = pfVar3 + 1;
        do {
          fVar38 = *pfVar17;
          pfVar17 = (float *)((long)pfVar17 + uVar36);
          fVar75 = *pfVar18;
          pfVar18 = (float *)((long)pfVar18 + uVar31);
          pfVar23 = pfVar20 + 1;
          fVar50 = fVar50 + (fVar38 + fVar75) * *pfVar20;
          pfVar20 = pfVar23;
        } while (pfVar23 != pfVar3 + (ulong)(uVar5 - 1) + 2);
      }
      *(float *)(param_3 + (long)iVar15 * 4 + lVar37) = fVar50;
      lVar37 = lVar37 + 4;
    } while (lVar37 != ((ulong)(uint)((param_4 + -1) - iVar15) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 001c4a88 (472 bytes) name=FUN_001c4a88

void FUN_001c4a88(long param_1,long param_2,long param_3,int param_4,uint param_5)

{
  int iVar1;
  uint uVar2;
  char cVar3;
  int iVar4;
  float *pfVar5;
  long lVar6;
  undefined8 *puVar7;
  float *pfVar8;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  ulong uVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float *pfVar9;
  
  uVar13 = (ulong)param_5;
  iVar1 = *(int *)(param_1 + 8);
  pfVar12 = *(float **)(param_1 + 0x20);
  cVar3 = cv::checkHardwareSupport(100);
  iVar4 = 0;
  if (cVar3 != '\0') {
    iVar4 = FUN_001c2290(param_1 + 0x70,param_2,param_3,param_4,uVar13);
  }
  param_4 = param_4 * param_5;
  if (iVar4 < param_4 + -3) {
    lVar6 = (long)iVar4 * 4;
    uVar2 = (uint)((param_4 + -4) - iVar4) >> 2;
    pfVar10 = (float *)(param_2 + lVar6);
    puVar7 = (undefined8 *)(param_3 + lVar6);
    do {
      fVar14 = *pfVar12;
      fVar18 = fVar14 * *pfVar10;
      fVar17 = fVar14 * pfVar10[1];
      fVar16 = fVar14 * pfVar10[2];
      fVar14 = fVar14 * pfVar10[3];
      if (1 < iVar1) {
        pfVar5 = pfVar12 + 1;
        pfVar11 = pfVar10;
        do {
          pfVar11 = (float *)((long)pfVar11 +
                             (-(ulong)(param_5 >> 0x1f) & 0xfffffffc00000000 | uVar13 << 2));
          pfVar8 = pfVar5 + 1;
          fVar15 = *pfVar5;
          fVar18 = fVar18 + fVar15 * *pfVar11;
          fVar17 = fVar17 + fVar15 * pfVar11[1];
          fVar16 = fVar16 + fVar15 * pfVar11[2];
          fVar14 = fVar14 + fVar15 * pfVar11[3];
          pfVar5 = pfVar8;
        } while (pfVar8 != pfVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pfVar10 = pfVar10 + 4;
      puVar7[1] = CONCAT44(fVar14,fVar16);
      *puVar7 = CONCAT44(fVar17,fVar18);
      puVar7 = puVar7 + 2;
    } while (pfVar10 != (float *)(param_2 + ((long)iVar4 + 4 + (ulong)uVar2 * 4) * 4));
    iVar4 = iVar4 + 4 + uVar2 * 4;
  }
  if (iVar4 < param_4) {
    lVar6 = (long)iVar4 * 4;
    pfVar10 = (float *)(param_2 + lVar6);
    pfVar11 = (float *)(param_3 + lVar6);
    do {
      fVar14 = *pfVar12 * *pfVar10;
      if (1 < iVar1) {
        pfVar5 = pfVar10;
        pfVar8 = pfVar12 + 1;
        do {
          pfVar9 = pfVar8 + 1;
          pfVar5 = (float *)((long)pfVar5 +
                            (-(ulong)(param_5 >> 0x1f) & 0xfffffffc00000000 | uVar13 << 2));
          fVar14 = fVar14 + *pfVar5 * *pfVar8;
          pfVar8 = pfVar9;
        } while (pfVar9 != pfVar12 + (ulong)(iVar1 - 2) + 2);
      }
      pfVar10 = pfVar10 + 1;
      *pfVar11 = fVar14;
      pfVar11 = pfVar11 + 1;
    } while (pfVar10 !=
             (float *)(param_2 + ((long)iVar4 + 1 + (ulong)(uint)((param_4 + -1) - iVar4)) * 4));
  }
  return;
}


==================================================================

### FUNC 001c4c60 (792 bytes) name=FUN_001c4c60

int FUN_001c4c60(uint *param_1,undefined8 *param_2,undefined8 *param_3,int param_4)

{
  float *pfVar1;
  undefined1 auVar2 [16];
  uint uVar3;
  int *piVar4;
  int *piVar5;
  ulong uVar6;
  int *piVar7;
  int *piVar8;
  undefined1 (*pauVar9) [16];
  float fVar10;
  undefined8 uVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  float fVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  int iVar21;
  int iVar22;
  float fVar23;
  int iVar24;
  int iVar25;
  
  fVar10 = (float)param_1[1];
  piVar4 = (int *)param_2[-1];
  pauVar9 = (undefined1 (*) [16])*param_2;
  piVar8 = (int *)param_2[1];
  uVar3 = (int)(param_1[4] + param_1[5] + -1) / 2;
  uVar6 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
  iVar21 = (int)fVar10;
  iVar22 = (int)fVar10;
  iVar24 = (int)fVar10;
  iVar25 = (int)fVar10;
  pfVar1 = (float *)(*(long *)(param_1 + 6) + uVar6);
  if ((*param_1 & 1) == 0) {
    fVar17 = pfVar1[1];
    if ((ABS(fVar17) != 1.0) || (fVar17 != -pfVar1[-1])) {
      fVar17 = pfVar1[1];
      if (param_4 < 4) {
        return 0;
      }
      uVar3 = param_4 - 4U >> 2;
      piVar5 = piVar4;
      do {
        piVar7 = piVar5 + 4;
        auVar19._0_4_ = *piVar8 - *piVar5;
        auVar19._4_4_ = piVar8[1] - piVar5[1];
        auVar19._8_4_ = piVar8[2] - piVar5[2];
        auVar19._12_4_ = piVar8[3] - piVar5[3];
        auVar19 = NEON_scvtf(auVar19,4);
        auVar20._0_8_ =
             CONCAT44((int)(fVar10 + auVar19._4_4_ * fVar17),(int)(fVar10 + auVar19._0_4_ * fVar17))
        ;
        auVar20._8_4_ = (int)(fVar10 + auVar19._8_4_ * fVar17);
        auVar20._12_4_ = (int)(fVar10 + auVar19._12_4_ * fVar17);
        uVar11 = NEON_sqxtn(auVar20._0_8_,auVar20,4);
        *param_3 = uVar11;
        piVar5 = piVar7;
        param_3 = param_3 + 1;
        piVar8 = piVar8 + 4;
      } while (piVar7 != piVar4 + ((ulong)uVar3 + 1) * 4);
      return (uVar3 + 1) * 4;
    }
    piVar5 = piVar4;
    if (fVar17 < 0.0) {
      piVar5 = piVar8;
      piVar8 = piVar4;
    }
    if (3 < param_4) {
      uVar3 = param_4 - 4U >> 2;
      piVar4 = piVar5;
      do {
        piVar7 = piVar4 + 4;
        auVar14._0_4_ = *piVar8 - *piVar4;
        auVar14._4_4_ = piVar8[1] - piVar4[1];
        auVar14._8_4_ = piVar8[2] - piVar4[2];
        auVar14._12_4_ = piVar8[3] - piVar4[3];
        auVar2._4_4_ = iVar22;
        auVar2._0_4_ = iVar21;
        auVar2._8_4_ = iVar24;
        auVar2._12_4_ = iVar25;
        auVar19 = NEON_sqadd(auVar14,auVar2,4);
        uVar11 = NEON_sqxtn(auVar19._0_8_,auVar19,4);
        *param_3 = uVar11;
        piVar4 = piVar7;
        param_3 = param_3 + 1;
        piVar8 = piVar8 + 4;
      } while (piVar7 != piVar5 + ((ulong)uVar3 + 1) * 4);
      return (uVar3 + 1) * 4;
    }
    return 0;
  }
  fVar17 = *(float *)(*(long *)(param_1 + 6) + uVar6);
  if (fVar17 == 2.0) {
    if (pfVar1[1] == 1.0) {
      if (param_4 < 4) {
        return 0;
      }
      uVar3 = param_4 - 4U >> 2;
      piVar5 = piVar4;
      do {
        piVar7 = piVar5 + 4;
        auVar19 = NEON_sqshl(*pauVar9,1,4);
        auVar12._0_8_ =
             CONCAT44(iVar22 + piVar5[1] + piVar8[1] + auVar19._4_4_,
                      iVar21 + *piVar5 + *piVar8 + auVar19._0_4_);
        auVar12._8_4_ = iVar24 + piVar5[2] + piVar8[2] + auVar19._8_4_;
        auVar12._12_4_ = iVar25 + piVar5[3] + piVar8[3] + auVar19._12_4_;
        uVar11 = NEON_sqxtn(auVar12._0_8_,auVar12,4);
        *param_3 = uVar11;
        piVar5 = piVar7;
        param_3 = param_3 + 1;
        piVar8 = piVar8 + 4;
        pauVar9 = pauVar9 + 1;
      } while (piVar7 != piVar4 + ((ulong)uVar3 + 1) * 4);
      goto LAB_001c4d10;
    }
  }
  else if (fVar17 == -2.0) {
    if (pfVar1[1] == 1.0) {
      if (param_4 < 4) {
        return 0;
      }
      uVar3 = param_4 - 4U >> 2;
      piVar5 = piVar4;
      do {
        piVar7 = piVar5 + 4;
        auVar19 = NEON_sqshl(*pauVar9,1,4);
        auVar16._0_8_ =
             CONCAT44(iVar22 + ((piVar5[1] + piVar8[1]) - auVar19._4_4_),
                      iVar21 + ((*piVar5 + *piVar8) - auVar19._0_4_));
        auVar16._8_4_ = iVar24 + ((piVar5[2] + piVar8[2]) - auVar19._8_4_);
        auVar16._12_4_ = iVar25 + ((piVar5[3] + piVar8[3]) - auVar19._12_4_);
        uVar11 = NEON_sqxtn(auVar16._0_8_,auVar16,4);
        *param_3 = uVar11;
        piVar5 = piVar7;
        param_3 = param_3 + 1;
        piVar8 = piVar8 + 4;
        pauVar9 = pauVar9 + 1;
      } while (piVar7 != piVar4 + ((ulong)uVar3 + 1) * 4);
      goto LAB_001c4d10;
    }
  }
  else if ((fVar17 == 10.0) && (pfVar1[1] == 3.0)) {
    if (param_4 < 4) {
      return 0;
    }
    uVar3 = param_4 - 4U >> 2;
    piVar5 = piVar4;
    do {
      piVar7 = piVar5 + 4;
      auVar13._0_8_ =
           CONCAT44(iVar22 + (int)((ulong)*(undefined8 *)*pauVar9 >> 0x20) * 10 +
                    (piVar5[1] + piVar8[1]) * 3,
                    iVar21 + (int)*(undefined8 *)*pauVar9 * 10 + (*piVar5 + *piVar8) * 3);
      auVar13._8_4_ = iVar24 + (int)*(undefined8 *)(*pauVar9 + 8) * 10 + (piVar5[2] + piVar8[2]) * 3
      ;
      auVar13._12_4_ =
           iVar25 + (int)((ulong)*(undefined8 *)(*pauVar9 + 8) >> 0x20) * 10 +
           (piVar5[3] + piVar8[3]) * 3;
      uVar11 = NEON_sqxtn(auVar13._0_8_,auVar13,4);
      *param_3 = uVar11;
      piVar5 = piVar7;
      param_3 = param_3 + 1;
      piVar8 = piVar8 + 4;
      pauVar9 = pauVar9 + 1;
    } while (piVar7 != piVar4 + ((ulong)uVar3 + 1) * 4);
LAB_001c4d10:
    return (uVar3 + 1) * 4;
  }
  fVar17 = *pfVar1;
  fVar23 = pfVar1[1];
  if (3 < param_4) {
    uVar3 = param_4 - 4U >> 2;
    piVar5 = piVar4;
    do {
      piVar7 = piVar5 + 4;
      auVar20 = NEON_scvtf(*pauVar9,4);
      auVar18._0_4_ = *piVar5 + *piVar8;
      auVar18._4_4_ = piVar5[1] + piVar8[1];
      auVar18._8_4_ = piVar5[2] + piVar8[2];
      auVar18._12_4_ = piVar5[3] + piVar8[3];
      auVar19 = NEON_scvtf(auVar18,4);
      auVar15._0_8_ =
           CONCAT44((int)(fVar10 + auVar20._4_4_ * fVar17 + auVar19._4_4_ * fVar23),
                    (int)(fVar10 + auVar20._0_4_ * fVar17 + auVar19._0_4_ * fVar23));
      auVar15._8_4_ = (int)(fVar10 + auVar20._8_4_ * fVar17 + auVar19._8_4_ * fVar23);
      auVar15._12_4_ = (int)(fVar10 + auVar20._12_4_ * fVar17 + auVar19._12_4_ * fVar23);
      uVar11 = NEON_sqxtn(auVar15._0_8_,auVar15,4);
      *param_3 = uVar11;
      piVar5 = piVar7;
      param_3 = param_3 + 1;
      piVar8 = piVar8 + 4;
      pauVar9 = pauVar9 + 1;
    } while (piVar7 != piVar4 + ((ulong)uVar3 + 1) * 4);
    return (uVar3 + 1) * 4;
  }
  return 0;
}


==================================================================

### FUNC 001c4f78 (2576 bytes) name=FUN_001c4f78

void FUN_001c4f78(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  long *plVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  bool bVar17;
  bool bVar18;
  bool bVar19;
  char cVar20;
  int iVar21;
  int *piVar22;
  undefined2 uVar23;
  long lVar24;
  undefined2 *puVar25;
  undefined2 uVar26;
  int *piVar27;
  long lVar28;
  undefined2 uVar29;
  long lVar30;
  long lVar31;
  int *piVar32;
  long lVar33;
  undefined2 uVar34;
  long *plVar35;
  
  uVar5 = *(uint *)(param_1 + 0xe4);
  lVar24 = (long)(*(int *)(param_1 + 8) / 2);
  lVar28 = lVar24 * 4;
  iVar12 = *(int *)(*(long *)(param_1 + 0x20) + lVar28);
  iVar6 = *(int *)(*(long *)(param_1 + 0x20) + lVar28 + 4);
  if (iVar12 == 2) {
    if (iVar6 != 1) {
LAB_001c595c:
      bVar17 = false;
      bVar18 = false;
      bVar19 = bVar18;
      goto LAB_001c5008;
    }
    bVar18 = true;
  }
  else if (iVar12 == -2) {
    bVar18 = false;
    if (iVar6 == 1) {
      bVar17 = false;
      bVar19 = true;
      goto LAB_001c5008;
    }
  }
  else {
    if (iVar12 != 0) goto LAB_001c595c;
    bVar18 = false;
    if ((iVar6 + 1U & 0xfffffffd) == 0) {
      bVar17 = true;
      bVar19 = bVar18;
      goto LAB_001c5008;
    }
  }
  bVar17 = false;
  bVar19 = false;
LAB_001c5008:
  iVar7 = *(int *)(param_1 + 0xe0);
  plVar35 = (long *)(param_2 + lVar24 * 8);
  if (param_5 != 0) {
    plVar4 = plVar35 + (ulong)(param_5 - 1) + 1;
    iVar14 = param_6 + -3;
    iVar15 = param_6 + -1;
    iVar16 = param_6 + -4;
    do {
      while( true ) {
        cVar20 = cv::checkHardwareSupport(100);
        iVar21 = 0;
        if (cVar20 != '\0') {
          iVar21 = FUN_001c4c60(param_1 + 0x78,plVar35,param_3,param_6);
        }
        lVar24 = plVar35[-1];
        lVar33 = *plVar35;
        lVar28 = plVar35[1];
        uVar26 = 0x7fff;
        uVar23 = 0x7fff;
        if ((uVar5 & 1) != 0) break;
        if (bVar17) {
          lVar33 = lVar28;
          if (iVar6 < 0) {
            lVar33 = lVar24;
            lVar24 = lVar28;
          }
          if (iVar21 < iVar14) {
            lVar28 = (long)iVar21;
            puVar25 = (undefined2 *)(param_3 + lVar28 * 2);
            piVar22 = (int *)(lVar24 + lVar28 * 4);
            uVar13 = (uint)(iVar16 - iVar21) >> 2;
            piVar27 = (int *)(lVar33 + lVar28 * 4);
            do {
              iVar2 = (*piVar27 - *piVar22) + iVar7;
              iVar3 = (piVar27[1] - piVar22[1]) + iVar7;
              uVar34 = 0x8000;
              uVar29 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar26, iVar2 < 1)) {
                uVar29 = uVar34;
              }
              *puVar25 = uVar29;
              uVar29 = (short)iVar3;
              if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar26, iVar3 < 1)) {
                uVar29 = uVar34;
              }
              piVar32 = piVar27 + 4;
              iVar8 = piVar27[3];
              iVar3 = piVar22[3];
              iVar2 = (piVar27[2] - piVar22[2]) + iVar7;
              puVar25[1] = uVar29;
              iVar3 = (iVar8 - iVar3) + iVar7;
              uVar29 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
                uVar29 = uVar34;
              }
              puVar25[2] = uVar29;
              piVar22 = piVar22 + 4;
              uVar29 = (short)iVar3;
              if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar23, iVar3 < 1)) {
                uVar29 = uVar34;
              }
              puVar25[3] = uVar29;
              puVar25 = puVar25 + 4;
              piVar27 = piVar32;
            } while (piVar32 != (int *)(lVar33 + (lVar28 + 4 + (ulong)uVar13 * 4) * 4));
            iVar21 = iVar21 + 4 + uVar13 * 4;
          }
          if (iVar21 < param_6) {
            lVar28 = 0;
            lVar30 = (long)iVar21 * 4;
            do {
              iVar2 = (*(int *)(lVar33 + lVar30 + lVar28 * 4) -
                      *(int *)(lVar24 + lVar30 + lVar28 * 4)) + iVar7;
              uVar26 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar26 = uVar23, iVar2 < 1)) {
                uVar26 = 0x8000;
              }
              *(undefined2 *)(param_3 + (long)iVar21 * 2 + lVar28 * 2) = uVar26;
              lVar28 = lVar28 + 1;
            } while (lVar28 != (ulong)(uint)(iVar15 - iVar21) + 1);
          }
        }
        else {
          if (iVar21 < iVar14) {
            lVar33 = (long)iVar21;
            puVar25 = (undefined2 *)(param_3 + lVar33 * 2);
            uVar13 = (uint)(iVar16 - iVar21) >> 2;
            piVar22 = (int *)(lVar28 + lVar33 * 4);
            piVar27 = (int *)(lVar24 + lVar33 * 4);
            do {
              iVar2 = iVar7 + (*piVar22 - *piVar27) * iVar6;
              iVar3 = iVar7 + (piVar22[1] - piVar27[1]) * iVar6;
              uVar34 = 0x8000;
              uVar29 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
                uVar29 = uVar34;
              }
              *puVar25 = uVar29;
              uVar29 = (short)iVar3;
              if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar23, iVar3 < 1)) {
                uVar29 = uVar34;
              }
              iVar2 = piVar27[2];
              piVar32 = piVar22 + 4;
              iVar3 = piVar22[2];
              iVar8 = piVar22[3];
              iVar9 = piVar27[3];
              puVar25[1] = uVar29;
              iVar2 = iVar7 + (iVar3 - iVar2) * iVar6;
              iVar3 = iVar7 + (iVar8 - iVar9) * iVar6;
              uVar29 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
                uVar29 = uVar34;
              }
              puVar25[2] = uVar29;
              uVar29 = (short)iVar3;
              if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar26, iVar3 < 1)) {
                uVar29 = uVar34;
              }
              puVar25[3] = uVar29;
              puVar25 = puVar25 + 4;
              piVar22 = piVar32;
              piVar27 = piVar27 + 4;
            } while (piVar32 != (int *)(lVar28 + (lVar33 + 4 + (ulong)uVar13 * 4) * 4));
            iVar21 = iVar21 + 4 + uVar13 * 4;
          }
          if (iVar21 < param_6) {
            lVar30 = (long)iVar21 * 4;
            lVar33 = 0;
            do {
              iVar2 = iVar7 + (*(int *)(lVar28 + lVar30 + lVar33 * 4) -
                              *(int *)(lVar24 + lVar30 + lVar33 * 4)) * iVar6;
              uVar23 = (short)iVar2;
              if ((0xffff < iVar2 + 0x8000U) && (uVar23 = uVar26, iVar2 < 1)) {
                uVar23 = 0x8000;
              }
              *(undefined2 *)(param_3 + (long)iVar21 * 2 + lVar33 * 2) = uVar23;
              lVar33 = lVar33 + 1;
            } while (lVar33 != (ulong)(uint)(iVar15 - iVar21) + 1);
          }
        }
joined_r0x001c55a8:
        param_3 = param_3 + param_4;
        plVar35 = plVar35 + 1;
        if (plVar35 == plVar4) {
          return;
        }
      }
      if (bVar18) {
        if (iVar21 < iVar14) {
          lVar30 = (long)iVar21;
          lVar31 = lVar30 * 4;
          puVar25 = (undefined2 *)(param_3 + lVar30 * 2);
          piVar22 = (int *)(lVar28 + lVar31);
          uVar13 = (uint)(iVar16 - iVar21) >> 2;
          piVar27 = (int *)(lVar24 + lVar31);
          piVar32 = (int *)(lVar33 + lVar31);
          do {
            iVar2 = *piVar27 + *piVar32 * 2 + *piVar22 + iVar7;
            iVar3 = piVar27[1] + piVar32[1] * 2 + piVar22[1] + iVar7;
            uVar29 = 0x8000;
            uVar23 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar23 = uVar26, iVar2 < 1)) {
              uVar23 = uVar29;
            }
            *puVar25 = uVar23;
            uVar23 = (short)iVar3;
            if ((0xffff < iVar3 + 0x8000U) && (uVar23 = uVar26, iVar3 < 1)) {
              uVar23 = uVar29;
            }
            piVar1 = piVar27 + 4;
            iVar8 = piVar32[3];
            iVar9 = piVar27[3];
            iVar2 = piVar27[2] + piVar32[2] * 2 + piVar22[2] + iVar7;
            iVar3 = piVar22[3];
            puVar25[1] = uVar23;
            iVar3 = iVar9 + iVar8 * 2 + iVar3 + iVar7;
            uVar23 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar23 = 0x7fff, iVar2 < 1)) {
              uVar23 = uVar29;
            }
            puVar25[2] = uVar23;
            piVar22 = piVar22 + 4;
            uVar23 = (short)iVar3;
            if ((0xffff < iVar3 + 0x8000U) && (uVar23 = 0x7fff, iVar3 < 1)) {
              uVar23 = uVar29;
            }
            puVar25[3] = uVar23;
            puVar25 = puVar25 + 4;
            piVar27 = piVar1;
            piVar32 = piVar32 + 4;
          } while (piVar1 != (int *)(lVar24 + (lVar30 + 4 + (ulong)uVar13 * 4) * 4));
          iVar21 = iVar21 + 4 + uVar13 * 4;
        }
        if (iVar21 < param_6) {
          lVar30 = 0;
          lVar31 = (long)iVar21 * 4;
          do {
            iVar2 = *(int *)(lVar24 + lVar31 + lVar30 * 4) +
                    *(int *)(lVar33 + lVar31 + lVar30 * 4) * 2 +
                    *(int *)(lVar28 + lVar31 + lVar30 * 4) + iVar7;
            uVar23 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar23 = uVar26, iVar2 < 1)) {
              uVar23 = 0x8000;
            }
            *(undefined2 *)(param_3 + (long)iVar21 * 2 + lVar30 * 2) = uVar23;
            lVar30 = lVar30 + 1;
          } while (lVar30 != (ulong)(uint)(iVar15 - iVar21) + 1);
        }
        goto joined_r0x001c55a8;
      }
      if (!bVar19) {
        if (iVar21 < iVar14) {
          lVar30 = (long)iVar21;
          lVar31 = lVar30 * 4;
          puVar25 = (undefined2 *)(param_3 + lVar30 * 2);
          uVar13 = (uint)(iVar16 - iVar21) >> 2;
          piVar22 = (int *)(lVar24 + lVar31);
          piVar27 = (int *)(lVar33 + lVar31);
          piVar32 = (int *)(lVar28 + lVar31);
          do {
            iVar2 = iVar12 * *piVar27 + (*piVar22 + *piVar32) * iVar6 + iVar7;
            iVar3 = iVar12 * piVar27[1] + (piVar22[1] + piVar32[1]) * iVar6 + iVar7;
            uVar34 = 0x8000;
            uVar29 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
              uVar29 = uVar34;
            }
            *puVar25 = uVar29;
            uVar29 = (short)iVar3;
            if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar23, iVar3 < 1)) {
              uVar29 = uVar34;
            }
            iVar2 = piVar22[2];
            iVar8 = piVar32[2];
            piVar1 = piVar22 + 4;
            iVar3 = piVar27[2];
            iVar9 = piVar22[3];
            iVar10 = piVar32[3];
            iVar11 = piVar27[3];
            puVar25[1] = uVar29;
            iVar2 = iVar12 * iVar3 + (iVar2 + iVar8) * iVar6 + iVar7;
            iVar3 = iVar12 * iVar11 + (iVar9 + iVar10) * iVar6 + iVar7;
            uVar29 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
              uVar29 = uVar34;
            }
            puVar25[2] = uVar29;
            uVar29 = (short)iVar3;
            if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar26, iVar3 < 1)) {
              uVar29 = uVar34;
            }
            puVar25[3] = uVar29;
            puVar25 = puVar25 + 4;
            piVar22 = piVar1;
            piVar27 = piVar27 + 4;
            piVar32 = piVar32 + 4;
          } while (piVar1 != (int *)(lVar24 + (lVar30 + 4 + (ulong)uVar13 * 4) * 4));
          iVar21 = iVar21 + 4 + uVar13 * 4;
        }
        if (iVar21 < param_6) {
          lVar30 = 0;
          lVar31 = (long)iVar21 * 4;
          do {
            iVar2 = iVar12 * *(int *)(lVar33 + lVar31 + lVar30 * 4) +
                    (*(int *)(lVar24 + lVar31 + lVar30 * 4) + *(int *)(lVar28 + lVar31 + lVar30 * 4)
                    ) * iVar6 + iVar7;
            uVar23 = (short)iVar2;
            if ((0xffff < iVar2 + 0x8000U) && (uVar23 = uVar26, iVar2 < 1)) {
              uVar23 = 0x8000;
            }
            *(undefined2 *)(param_3 + (long)iVar21 * 2 + lVar30 * 2) = uVar23;
            lVar30 = lVar30 + 1;
          } while (lVar30 != (ulong)(uint)(iVar15 - iVar21) + 1);
        }
        goto joined_r0x001c55a8;
      }
      if (iVar21 < iVar14) {
        lVar30 = (long)iVar21;
        lVar31 = lVar30 * 4;
        puVar25 = (undefined2 *)(param_3 + lVar30 * 2);
        piVar22 = (int *)(lVar28 + lVar31);
        uVar13 = (uint)(iVar16 - iVar21) >> 2;
        piVar27 = (int *)(lVar24 + lVar31);
        piVar32 = (int *)(lVar33 + lVar31);
        do {
          iVar2 = *piVar27 + *piVar32 * -2 + *piVar22 + iVar7;
          iVar3 = piVar27[1] + piVar32[1] * -2 + piVar22[1] + iVar7;
          uVar34 = 0x8000;
          uVar29 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar26, iVar2 < 1)) {
            uVar29 = uVar34;
          }
          *puVar25 = uVar29;
          uVar29 = (short)iVar3;
          if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar26, iVar3 < 1)) {
            uVar29 = uVar34;
          }
          piVar1 = piVar27 + 4;
          iVar8 = piVar32[3];
          iVar9 = piVar27[3];
          iVar2 = piVar27[2] + piVar32[2] * -2 + piVar22[2] + iVar7;
          iVar3 = piVar22[3];
          puVar25[1] = uVar29;
          iVar3 = iVar9 + iVar8 * -2 + iVar3 + iVar7;
          uVar29 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar29 = uVar23, iVar2 < 1)) {
            uVar29 = uVar34;
          }
          puVar25[2] = uVar29;
          piVar22 = piVar22 + 4;
          uVar29 = (short)iVar3;
          if ((0xffff < iVar3 + 0x8000U) && (uVar29 = uVar23, iVar3 < 1)) {
            uVar29 = uVar34;
          }
          puVar25[3] = uVar29;
          puVar25 = puVar25 + 4;
          piVar27 = piVar1;
          piVar32 = piVar32 + 4;
        } while (piVar1 != (int *)(lVar24 + (lVar30 + 4 + (ulong)uVar13 * 4) * 4));
        iVar21 = iVar21 + 4 + uVar13 * 4;
      }
      if (param_6 <= iVar21) goto joined_r0x001c55a8;
      lVar30 = 0;
      lVar31 = (long)iVar21 * 4;
      do {
        iVar2 = *(int *)(lVar24 + lVar31 + lVar30 * 4) + *(int *)(lVar33 + lVar31 + lVar30 * 4) * -2
                + *(int *)(lVar28 + lVar31 + lVar30 * 4) + iVar7;
        uVar26 = (short)iVar2;
        if ((0xffff < iVar2 + 0x8000U) && (uVar26 = uVar23, iVar2 < 1)) {
          uVar26 = 0x8000;
        }
        *(undefined2 *)(param_3 + (long)iVar21 * 2 + lVar30 * 2) = uVar26;
        lVar30 = lVar30 + 1;
      } while (lVar30 != (ulong)(uint)(iVar15 - iVar21) + 1);
      plVar35 = plVar35 + 1;
      param_3 = param_3 + param_4;
    } while (plVar35 != plVar4);
  }
  return;
}


==================================================================

### FUNC 001c5988 (1684 bytes) name=FUN_001c5988

void FUN_001c5988(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int *piVar1;
  long *plVar2;
  long lVar3;
  long lVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  char cVar8;
  int iVar9;
  int *piVar10;
  long *plVar11;
  long *plVar12;
  long lVar13;
  undefined2 uVar14;
  long *plVar15;
  long *plVar16;
  long lVar17;
  int *piVar18;
  undefined2 uVar19;
  undefined2 *puVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  long lVar25;
  undefined2 uVar26;
  int iVar27;
  long lVar28;
  long *plVar29;
  uint uVar30;
  
  iVar6 = *(int *)(param_1 + 0xe0);
  iVar5 = *(int *)(param_1 + 8) / 2;
  piVar1 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 4);
  plVar2 = (long *)(param_2 + (long)iVar5 * 8);
  if ((*(uint *)(param_1 + 0xe4) & 1) == 0) {
    if (param_5 != 0) {
      plVar29 = plVar2 + -1;
      do {
        plVar11 = plVar29 + 1;
        cVar8 = cv::checkHardwareSupport(100);
        iVar9 = 0;
        if (cVar8 != '\0') {
          iVar9 = FUN_001c4c60(param_1 + 0x78,plVar11,param_3,param_6);
        }
        if (iVar9 < param_6 + -3) {
          lVar28 = (long)iVar9;
          lVar17 = lVar28 << 2;
          uVar30 = (uint)((param_6 + -4) - iVar9) >> 2;
          lVar13 = lVar28;
          lVar25 = lVar28 + 4;
          while( true ) {
            iVar23 = iVar6;
            iVar24 = iVar6;
            iVar27 = iVar6;
            iVar21 = iVar6;
            if (0 < iVar5) {
              plVar12 = plVar29;
              plVar16 = plVar29 + 2;
              piVar18 = piVar1;
              do {
                piVar18 = piVar18 + 1;
                plVar15 = plVar12 + -1;
                lVar3 = *plVar12 + lVar17;
                iVar22 = *piVar18;
                lVar4 = *plVar16 + lVar17;
                iVar21 = iVar21 + (*(int *)(*plVar16 + lVar17) - *(int *)(*plVar12 + lVar17)) *
                                  iVar22;
                iVar27 = iVar27 + (*(int *)(lVar4 + 4) - *(int *)(lVar3 + 4)) * iVar22;
                iVar24 = iVar24 + (*(int *)(lVar4 + 8) - *(int *)(lVar3 + 8)) * iVar22;
                iVar23 = iVar23 + (*(int *)(lVar4 + 0xc) - *(int *)(lVar3 + 0xc)) * iVar22;
                plVar12 = plVar15;
                plVar16 = plVar16 + 1;
              } while (plVar29 + (-1 - (ulong)(iVar5 - 1)) != plVar15);
            }
            lVar13 = lVar13 * 2;
            uVar19 = 0x8000;
            uVar26 = 0x7fff;
            uVar14 = (short)iVar21;
            if ((0xffff < iVar21 + 0x8000U) && (uVar14 = uVar26, iVar21 < 1)) {
              uVar14 = uVar19;
            }
            *(undefined2 *)(param_3 + lVar13) = uVar14;
            uVar14 = (short)iVar27;
            if ((0xffff < iVar27 + 0x8000U) && (uVar14 = uVar26, iVar27 < 1)) {
              uVar14 = uVar19;
            }
            *(undefined2 *)(param_3 + lVar13 + 2) = uVar14;
            uVar14 = (short)iVar24;
            if ((0xffff < iVar24 + 0x8000U) && (uVar14 = uVar26, iVar24 < 1)) {
              uVar14 = uVar19;
            }
            *(undefined2 *)(param_3 + lVar13 + 4) = uVar14;
            uVar14 = (short)iVar23;
            if ((0xffff < iVar23 + 0x8000U) && (uVar14 = uVar26, iVar23 < 1)) {
              uVar14 = uVar19;
            }
            *(undefined2 *)(param_3 + lVar13 + 6) = uVar14;
            lVar17 = lVar17 + 0x10;
            if (lVar25 == lVar28 + 4 + (ulong)uVar30 * 4) break;
            lVar13 = lVar25;
            lVar25 = lVar25 + 4;
          }
          iVar9 = iVar9 + 4 + uVar30 * 4;
        }
        if (iVar9 < param_6) {
          lVar28 = (long)iVar9;
          lVar17 = lVar28 << 2;
          lVar13 = lVar28;
          lVar25 = lVar28 + 1;
          while( true ) {
            iVar21 = iVar6;
            if (0 < iVar5) {
              plVar12 = plVar29 + 2;
              plVar16 = plVar29;
              piVar18 = piVar1;
              do {
                piVar18 = piVar18 + 1;
                plVar15 = plVar12 + 1;
                iVar21 = iVar21 + (*(int *)(*plVar12 + lVar17) - *(int *)(*plVar16 + lVar17)) *
                                  *piVar18;
                plVar12 = plVar15;
                plVar16 = plVar16 + -1;
              } while (plVar15 != plVar29 + (ulong)(iVar5 - 1) + 3);
            }
            uVar14 = (undefined2)iVar21;
            if ((0xffff < iVar21 + 0x8000U) && (uVar14 = 0x7fff, iVar21 < 1)) {
              uVar14 = 0x8000;
            }
            *(undefined2 *)(param_3 + lVar13 * 2) = uVar14;
            lVar17 = lVar17 + 4;
            if (lVar25 == lVar28 + 1 + (ulong)(uint)((param_6 + -1) - iVar9)) break;
            lVar13 = lVar25;
            lVar25 = lVar25 + 1;
          }
        }
        param_3 = param_3 + param_4;
        plVar29 = plVar11;
      } while (plVar11 != plVar2 + (param_5 - 1));
    }
  }
  else if (param_5 != 0) {
    cVar8 = cv::checkHardwareSupport(100);
    plVar11 = plVar2;
    plVar29 = plVar2 + -1;
    while( true ) {
      plVar12 = plVar11;
      iVar9 = 0;
      if (cVar8 != '\0') {
        iVar9 = FUN_001c4c60(param_1 + 0x78,plVar12,param_3,param_6);
      }
      if (iVar9 < param_6 + -3) {
        lVar13 = plVar29[1];
        iVar21 = *piVar1;
        lVar17 = (long)iVar9;
        piVar18 = (int *)(lVar13 + lVar17 * 4);
        puVar20 = (undefined2 *)(param_3 + lVar17 * 2);
        uVar30 = (uint)((param_6 + -4) - iVar9) >> 2;
        do {
          iVar27 = iVar6 + iVar21 * *piVar18;
          iVar24 = iVar6 + iVar21 * piVar18[1];
          iVar23 = iVar6 + iVar21 * piVar18[2];
          iVar22 = iVar6 + iVar21 * piVar18[3];
          if (0 < iVar5) {
            plVar11 = plVar29 + 2;
            plVar16 = plVar29;
            piVar10 = piVar1;
            do {
              piVar10 = piVar10 + 1;
              plVar15 = plVar16 + -1;
              lVar25 = *plVar16 - lVar13;
              iVar7 = *piVar10;
              lVar28 = *plVar11 - lVar13;
              iVar27 = iVar27 + (*(int *)((long)piVar18 + (*plVar11 - lVar13)) +
                                *(int *)((long)piVar18 + (*plVar16 - lVar13))) * iVar7;
              iVar24 = iVar24 + (*(int *)((long)piVar18 + lVar28 + 4) +
                                *(int *)((long)piVar18 + lVar25 + 4)) * iVar7;
              iVar23 = iVar23 + (*(int *)((long)piVar18 + lVar28 + 8) +
                                *(int *)((long)piVar18 + lVar25 + 8)) * iVar7;
              iVar22 = iVar22 + (*(int *)((long)piVar18 + lVar28 + 0xc) +
                                *(int *)((long)piVar18 + lVar25 + 0xc)) * iVar7;
              plVar11 = plVar11 + 1;
              plVar16 = plVar15;
            } while (plVar15 != plVar29 + (-1 - (ulong)(iVar5 - 1)));
          }
          uVar19 = 0x8000;
          uVar26 = 0x7fff;
          uVar14 = (short)iVar27;
          if ((0xffff < iVar27 + 0x8000U) && (uVar14 = uVar26, iVar27 < 1)) {
            uVar14 = uVar19;
          }
          *puVar20 = uVar14;
          uVar14 = (short)iVar24;
          if ((0xffff < iVar24 + 0x8000U) && (uVar14 = uVar26, iVar24 < 1)) {
            uVar14 = uVar19;
          }
          puVar20[1] = uVar14;
          uVar14 = (short)iVar23;
          if ((0xffff < iVar23 + 0x8000U) && (uVar14 = uVar26, iVar23 < 1)) {
            uVar14 = uVar19;
          }
          puVar20[2] = uVar14;
          uVar14 = (short)iVar22;
          if ((0xffff < iVar22 + 0x8000U) && (uVar14 = uVar26, iVar22 < 1)) {
            uVar14 = uVar19;
          }
          piVar18 = piVar18 + 4;
          puVar20[3] = uVar14;
          puVar20 = puVar20 + 4;
        } while (piVar18 != (int *)(lVar13 + (lVar17 + 4 + (ulong)uVar30 * 4) * 4));
        iVar9 = iVar9 + 4 + uVar30 * 4;
      }
      if (iVar9 < param_6) {
        lVar13 = (long)iVar9;
        iVar21 = *piVar1;
        lVar25 = plVar29[1];
        lVar17 = lVar13 << 2;
        puVar20 = (undefined2 *)(param_3 + lVar13 * 2);
        do {
          iVar27 = iVar6 + iVar21 * *(int *)(lVar25 + lVar17);
          if (0 < iVar5) {
            plVar11 = plVar29 + 2;
            plVar16 = plVar29;
            piVar18 = piVar1;
            do {
              piVar18 = piVar18 + 1;
              plVar15 = plVar11 + 1;
              iVar27 = iVar27 + (*(int *)(*plVar11 + lVar17) + *(int *)(*plVar16 + lVar17)) *
                                *piVar18;
              plVar11 = plVar15;
              plVar16 = plVar16 + -1;
            } while (plVar29 + (ulong)(iVar5 - 1) + 3 != plVar15);
          }
          uVar14 = (undefined2)iVar27;
          if ((0xffff < iVar27 + 0x8000U) && (uVar14 = 0x7fff, iVar27 < 1)) {
            uVar14 = 0x8000;
          }
          lVar17 = lVar17 + 4;
          *puVar20 = uVar14;
          puVar20 = puVar20 + 1;
        } while (lVar17 != (lVar13 + 1 + (ulong)(uint)((param_6 + -1) - iVar9)) * 4);
      }
      param_3 = param_3 + param_4;
      if (plVar2 + (param_5 - 1) == plVar12) break;
      cVar8 = cv::checkHardwareSupport(100);
      plVar11 = plVar12 + 1;
      plVar29 = plVar12;
    }
  }
  return;
}


==================================================================

### FUNC 001c601c (716 bytes) name=FUN_001c601c

void FUN_001c601c(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int *piVar6;
  char cVar7;
  int iVar8;
  int *piVar9;
  int iVar10;
  long lVar11;
  undefined2 uVar12;
  int iVar13;
  long *plVar14;
  long *plVar15;
  undefined2 *puVar16;
  long lVar17;
  int iVar18;
  int iVar19;
  long lVar20;
  undefined2 uVar21;
  long *plVar22;
  int *piVar23;
  undefined2 uVar24;
  long *plVar25;
  
  piVar23 = *(int **)(param_1 + 0x20);
  iVar1 = *(int *)(param_1 + 0xe0);
  iVar2 = *(int *)(param_1 + 8);
  if (param_5 != 0) {
    plVar22 = (long *)(param_2 + 8);
    plVar25 = (long *)(param_2 + ((ulong)(iVar2 - 2) + 2) * 8);
    do {
      cVar7 = cv::checkHardwareSupport(100);
      iVar8 = 0;
      if (cVar7 != '\0') {
        iVar8 = FUN_001c4c60(param_1 + 0x78,plVar22 + -1,param_3,param_6);
      }
      uVar21 = 0x7fff;
      uVar24 = 0x8000;
      if (iVar8 < param_6 + -3) {
        lVar11 = (long)iVar8;
        lVar20 = plVar22[-1];
        iVar3 = *piVar23;
        puVar16 = (undefined2 *)(param_3 + lVar11 * 2);
        uVar5 = (uint)((param_6 + -4) - iVar8) >> 2;
        piVar9 = (int *)(lVar20 + lVar11 * 4);
        do {
          iVar13 = iVar1 + iVar3 * *piVar9;
          iVar10 = iVar1 + iVar3 * piVar9[1];
          iVar19 = iVar1 + iVar3 * piVar9[2];
          iVar18 = iVar1 + iVar3 * piVar9[3];
          plVar14 = plVar22;
          piVar6 = piVar23;
          if (1 < iVar2) {
            do {
              plVar15 = plVar14 + 1;
              iVar4 = piVar6[1];
              lVar17 = *plVar14 - lVar20;
              iVar13 = iVar13 + iVar4 * *(int *)((long)piVar9 + (*plVar14 - lVar20));
              iVar10 = iVar10 + iVar4 * *(int *)((long)piVar9 + lVar17 + 4);
              iVar19 = iVar19 + iVar4 * *(int *)((long)piVar9 + lVar17 + 8);
              iVar18 = iVar18 + iVar4 * *(int *)((long)piVar9 + lVar17 + 0xc);
              plVar14 = plVar15;
              piVar6 = piVar6 + 1;
            } while (plVar25 != plVar15);
          }
          uVar12 = (short)iVar13;
          if ((0xffff < iVar13 + 0x8000U) && (uVar12 = uVar21, iVar13 < 1)) {
            uVar12 = uVar24;
          }
          *puVar16 = uVar12;
          uVar12 = (short)iVar10;
          if ((0xffff < iVar10 + 0x8000U) && (uVar12 = uVar21, iVar10 < 1)) {
            uVar12 = uVar24;
          }
          puVar16[1] = uVar12;
          uVar12 = (short)iVar19;
          if ((0xffff < iVar19 + 0x8000U) && (uVar12 = 0x7fff, iVar19 < 1)) {
            uVar12 = 0x8000;
          }
          puVar16[2] = uVar12;
          uVar12 = (short)iVar18;
          if ((0xffff < iVar18 + 0x8000U) && (uVar12 = 0x7fff, iVar18 < 1)) {
            uVar12 = 0x8000;
          }
          piVar9 = piVar9 + 4;
          puVar16[3] = uVar12;
          puVar16 = puVar16 + 4;
        } while (piVar9 != (int *)(lVar20 + (lVar11 + 4 + (ulong)uVar5 * 4) * 4));
        iVar8 = iVar8 + 4 + uVar5 * 4;
      }
      if (iVar8 < param_6) {
        lVar20 = (long)iVar8;
        iVar3 = *piVar23;
        lVar17 = plVar22[-1];
        lVar11 = lVar20 << 2;
        puVar16 = (undefined2 *)(param_3 + lVar20 * 2);
        do {
          iVar13 = iVar1 + iVar3 * *(int *)(lVar17 + lVar11);
          plVar14 = plVar22;
          piVar9 = piVar23;
          if (1 < iVar2) {
            do {
              plVar15 = plVar14 + 1;
              iVar13 = iVar13 + piVar9[1] * *(int *)(*plVar14 + lVar11);
              plVar14 = plVar15;
              piVar9 = piVar9 + 1;
            } while (plVar25 != plVar15);
          }
          uVar12 = (short)iVar13;
          if ((0xffff < iVar13 + 0x8000U) && (uVar12 = uVar21, iVar13 < 1)) {
            uVar12 = uVar24;
          }
          lVar11 = lVar11 + 4;
          *puVar16 = uVar12;
          puVar16 = puVar16 + 1;
        } while (lVar11 != (lVar20 + 1 + (ulong)(uint)((param_6 + -1) - iVar8)) * 4);
      }
      plVar22 = plVar22 + 1;
      plVar25 = plVar25 + 1;
      param_3 = param_3 + param_4;
    } while (plVar22 != (long *)(param_2 + ((ulong)(param_5 - 1) + 2) * 8));
  }
  return;
}


==================================================================

### FUNC 001c62e8 (76 bytes) name=FUN_001c62e8

void FUN_001c62e8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3f10;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6334 (76 bytes) name=FUN_001c6334

void FUN_001c6334(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e50;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6380 (76 bytes) name=FUN_001c6380

void FUN_001c6380(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e20;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c63cc (76 bytes) name=FUN_001c63cc

void FUN_001c63cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3df0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6418 (76 bytes) name=FUN_001c6418

void FUN_001c6418(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3dc0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6464 (76 bytes) name=FUN_001c6464

void FUN_001c6464(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3eb0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c64b0 (76 bytes) name=FUN_001c64b0

void FUN_001c64b0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3e80;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c64fc (76 bytes) name=FUN_001c64fc

void FUN_001c64fc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3ee0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6548 (76 bytes) name=FUN_001c6548

void FUN_001c6548(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d90;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6594 (76 bytes) name=FUN_001c6594

void FUN_001c6594(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d60;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c65e0 (76 bytes) name=FUN_001c65e0

void FUN_001c65e0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d30;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c662c (76 bytes) name=FUN_001c662c

void FUN_001c662c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3d00;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6678 (76 bytes) name=FUN_001c6678

void FUN_001c6678(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3cd0;
  if ((void *)param_1[9] != (void *)0x0) {
    operator_delete((void *)param_1[9]);
  }
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c66c4 (372 bytes) name=FUN_001c66c4

void FUN_001c66c4(long *param_1,ulong param_2)

{
  ulong uVar1;
  void *__dest;
  ulong uVar2;
  void *__src;
  long lVar3;
  size_t sVar4;
  void *__dest_00;
  
  __src = (void *)param_1[1];
  lVar3 = (long)__src - *param_1;
  uVar2 = lVar3 >> 3;
  if (param_2 <= uVar2) {
    if (uVar2 <= param_2) {
      return;
    }
    param_1[1] = *param_1 + param_2 * 8;
    return;
  }
  param_2 = param_2 - uVar2;
  if (param_2 == 0) {
    return;
  }
  if (param_2 <= (ulong)(param_1[2] - (long)__src >> 3)) {
    memset(__src,0,param_2 * 8);
    param_1[1] = param_1[1] + param_2 * 8;
    return;
  }
  if (0x1fffffffffffffff - uVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = param_2;
  if (param_2 < uVar2) {
    uVar1 = uVar2;
  }
  uVar1 = uVar1 + uVar2;
  if ((uVar1 < uVar2) || (0x1fffffffffffffff < uVar1)) {
    uVar2 = 0xfffffffffffffff8;
  }
  else {
    uVar2 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 == 0) goto LAB_001c678c;
    uVar2 = uVar1 * 8;
  }
  __dest_00 = operator_new(uVar2);
LAB_001c678c:
  memset((void *)((long)__dest_00 + lVar3),0,param_2 * 8);
  sVar4 = (long)__src - *param_1;
  if ((long)sVar4 >> 3 != 0) {
    memmove(__dest_00,(void *)*param_1,sVar4);
  }
  __dest = (void *)((long)__dest_00 + param_2 * 8 + sVar4);
  sVar4 = param_1[1] - (long)__src;
  if ((long)sVar4 >> 3 != 0) {
    memmove(__dest,__src,sVar4);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)__dest_00;
  param_1[1] = (long)__dest + sVar4;
  param_1[2] = (long)__dest_00 + uVar2;
  return;
}


==================================================================

### FUNC 001c6838 (284 bytes) name=FUN_001c6838

void FUN_001c6838(undefined8 *param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  long *plVar5;
  
  plVar5 = (long *)param_1[0x24];
  *param_1 = &PTR_FUN_004f3450;
  plVar1 = plVar5 + 1;
  if (plVar5 != (long *)0x0) {
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))();
    }
  }
  plVar5 = (long *)param_1[0x22];
  plVar1 = plVar5 + 1;
  if (plVar5 != (long *)0x0) {
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))();
    }
  }
  plVar5 = (long *)param_1[0x20];
  plVar1 = plVar5 + 1;
  if (plVar5 != (long *)0x0) {
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))();
    }
  }
  if ((void *)param_1[0x1d] != (void *)0x0) {
    operator_delete((void *)param_1[0x1d]);
  }
  if ((void *)param_1[0x17] != (void *)0x0) {
    operator_delete((void *)param_1[0x17]);
  }
  if ((void *)param_1[0x14] != (void *)0x0) {
    operator_delete((void *)param_1[0x14]);
  }
  if ((void *)param_1[0x11] != (void *)0x0) {
    operator_delete((void *)param_1[0x11]);
  }
  if ((void *)param_1[0xe] != (void *)0x0) {
    operator_delete((void *)param_1[0xe]);
  }
  if ((void *)param_1[10] != (void *)0x0) {
    operator_delete((void *)param_1[10]);
    return;
  }
  return;
}


==================================================================

### FUNC 001c6a0c (32 bytes) name=FUN_001c6a0c

void FUN_001c6a0c(void *param_1)

{
  FUN_001c6838();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6a2c (132 bytes) name=FUN_001c6a2c

void FUN_001c6a2c(long *param_1)

{
  long *plVar1;
  
  plVar1 = (long *)param_1[2];
  if (plVar1 != (long *)0x0) {
    if (*(code **)(*plVar1 + 8) != FUN_001c6a0c) {
      (**(code **)(*plVar1 + 8))(plVar1);
      (**(code **)(*param_1 + 8))(param_1);
      return;
    }
    FUN_001c6838();
    operator_delete(plVar1);
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001c6ab0 (224 bytes) name=operator=

/* cv::Mat::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&) */

Mat * __thiscall cv::Mat::operator=(Mat *this,Mat *param_1)

{
  int *piVar1;
  int iVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  
  if (this != param_1) {
    if (*(long *)(param_1 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(param_1 + 0x38) + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    release(this);
    *(undefined4 *)this = *(undefined4 *)param_1;
    if ((*(int *)(this + 4) < 3) && (iVar2 = *(int *)(param_1 + 4), iVar2 < 3)) {
      puVar7 = *(undefined8 **)(param_1 + 0x48);
      puVar6 = *(undefined8 **)(this + 0x48);
      uVar3 = *(undefined4 *)(param_1 + 8);
      *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
      *(int *)(this + 4) = iVar2;
      *(undefined4 *)(this + 8) = uVar3;
      *puVar6 = *puVar7;
      puVar6[1] = puVar7[1];
    }
    else {
      copySize(this,param_1);
    }
    uVar12 = *(undefined8 *)(param_1 + 0x10);
    uVar11 = *(undefined8 *)(param_1 + 0x28);
    uVar10 = *(undefined8 *)(param_1 + 0x20);
    uVar9 = *(undefined8 *)(param_1 + 0x38);
    uVar8 = *(undefined8 *)(param_1 + 0x30);
    *(undefined8 *)(this + 0x18) = *(undefined8 *)(param_1 + 0x18);
    *(undefined8 *)(this + 0x10) = uVar12;
    *(undefined8 *)(this + 0x28) = uVar11;
    *(undefined8 *)(this + 0x20) = uVar10;
    *(undefined8 *)(this + 0x38) = uVar9;
    *(undefined8 *)(this + 0x30) = uVar8;
  }
  return this;
}


==================================================================

### FUNC 001c6b90 (76 bytes) name=FUN_001c6b90

void FUN_001c6b90(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3700;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6bdc (80 bytes) name=FUN_001c6bdc

void FUN_001c6bdc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3700;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6c2c (76 bytes) name=FUN_001c6c2c

void FUN_001c6c2c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f36d0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6c78 (80 bytes) name=FUN_001c6c78

void FUN_001c6c78(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f36d0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6cc8 (76 bytes) name=FUN_001c6cc8

void FUN_001c6cc8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f36a0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6d14 (80 bytes) name=FUN_001c6d14

void FUN_001c6d14(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f36a0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6d64 (76 bytes) name=FUN_001c6d64

void FUN_001c6d64(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3670;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6db0 (80 bytes) name=FUN_001c6db0

void FUN_001c6db0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3670;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6e00 (76 bytes) name=FUN_001c6e00

void FUN_001c6e00(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3640;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6e4c (80 bytes) name=FUN_001c6e4c

void FUN_001c6e4c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3640;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6e9c (76 bytes) name=FUN_001c6e9c

void FUN_001c6e9c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3610;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6ee8 (80 bytes) name=FUN_001c6ee8

void FUN_001c6ee8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3610;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6f38 (76 bytes) name=FUN_001c6f38

void FUN_001c6f38(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f35e0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c6f84 (80 bytes) name=FUN_001c6f84

void FUN_001c6f84(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f35e0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c6fd4 (76 bytes) name=FUN_001c6fd4

void FUN_001c6fd4(undefined8 *param_1)

{
  *param_1 = &DAT_004f35b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7020 (80 bytes) name=FUN_001c7020

void FUN_001c7020(undefined8 *param_1)

{
  *param_1 = &DAT_004f35b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7070 (76 bytes) name=FUN_001c7070

void FUN_001c7070(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3580;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c70bc (80 bytes) name=FUN_001c70bc

void FUN_001c70bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3580;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c710c (76 bytes) name=FUN_001c710c

void FUN_001c710c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3550;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7158 (80 bytes) name=FUN_001c7158

void FUN_001c7158(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3550;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c71a8 (76 bytes) name=FUN_001c71a8

void FUN_001c71a8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c71f4 (80 bytes) name=FUN_001c71f4

void FUN_001c71f4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7244 (76 bytes) name=FUN_001c7244

void FUN_001c7244(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7290 (80 bytes) name=FUN_001c7290

void FUN_001c7290(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38b0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c72e0 (76 bytes) name=FUN_001c72e0

void FUN_001c72e0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3880;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c732c (80 bytes) name=FUN_001c732c

void FUN_001c732c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3880;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c737c (76 bytes) name=FUN_001c737c

void FUN_001c737c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3880;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c73c8 (80 bytes) name=FUN_001c73c8

void FUN_001c73c8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3880;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7418 (76 bytes) name=FUN_001c7418

void FUN_001c7418(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3850;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7464 (80 bytes) name=FUN_001c7464

void FUN_001c7464(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3850;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c74b4 (76 bytes) name=FUN_001c74b4

void FUN_001c74b4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3850;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7500 (80 bytes) name=FUN_001c7500

void FUN_001c7500(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3850;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7550 (76 bytes) name=FUN_001c7550

void FUN_001c7550(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3b50;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c759c (80 bytes) name=FUN_001c759c

void FUN_001c759c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3b50;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c75ec (76 bytes) name=FUN_001c75ec

void FUN_001c75ec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3b50;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7638 (80 bytes) name=FUN_001c7638

void FUN_001c7638(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3b50;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7688 (76 bytes) name=FUN_001c7688

void FUN_001c7688(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37f0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c76d4 (80 bytes) name=FUN_001c76d4

void FUN_001c76d4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37f0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7724 (76 bytes) name=FUN_001c7724

void FUN_001c7724(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37f0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7770 (80 bytes) name=FUN_001c7770

void FUN_001c7770(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37f0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c77c0 (76 bytes) name=FUN_001c77c0

void FUN_001c77c0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37c0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c780c (80 bytes) name=FUN_001c780c

void FUN_001c780c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37c0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c785c (76 bytes) name=FUN_001c785c

void FUN_001c785c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37c0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c78a8 (80 bytes) name=FUN_001c78a8

void FUN_001c78a8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f37c0;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c78f8 (76 bytes) name=FUN_001c78f8

void FUN_001c78f8(undefined8 *param_1)

{
  *param_1 = &DAT_004f3790;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7944 (80 bytes) name=FUN_001c7944

void FUN_001c7944(undefined8 *param_1)

{
  *param_1 = &DAT_004f3790;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7994 (76 bytes) name=FUN_001c7994

void FUN_001c7994(undefined8 *param_1)

{
  *param_1 = &DAT_004f3790;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c79e0 (80 bytes) name=FUN_001c79e0

void FUN_001c79e0(undefined8 *param_1)

{
  *param_1 = &DAT_004f3790;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7a30 (76 bytes) name=FUN_001c7a30

void FUN_001c7a30(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3760;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7a7c (80 bytes) name=FUN_001c7a7c

void FUN_001c7a7c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3760;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7acc (76 bytes) name=FUN_001c7acc

void FUN_001c7acc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3760;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7b18 (80 bytes) name=FUN_001c7b18

void FUN_001c7b18(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3760;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7b68 (76 bytes) name=FUN_001c7b68

void FUN_001c7b68(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7bb4 (80 bytes) name=FUN_001c7bb4

void FUN_001c7bb4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7c04 (76 bytes) name=FUN_001c7c04

void FUN_001c7c04(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7c50 (80 bytes) name=FUN_001c7c50

void FUN_001c7c50(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7ca0 (76 bytes) name=FUN_001c7ca0

void FUN_001c7ca0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7cec (80 bytes) name=FUN_001c7cec

void FUN_001c7cec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3a00;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7d3c (76 bytes) name=FUN_001c7d3c

void FUN_001c7d3c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3820;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7d88 (80 bytes) name=FUN_001c7d88

void FUN_001c7d88(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3820;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7dd8 (76 bytes) name=FUN_001c7dd8

void FUN_001c7dd8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3730;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7e24 (80 bytes) name=FUN_001c7e24

void FUN_001c7e24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3730;
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c7e74 (108 bytes) name=FUN_001c7e74

void FUN_001c7e74(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3490;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7f0c (108 bytes) name=FUN_001c7f0c

void FUN_001c7f0c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f34f0;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c7fa4 (108 bytes) name=FUN_001c7fa4

void FUN_001c7fa4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c803c (108 bytes) name=FUN_001c803c

void FUN_001c803c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c80d4 (108 bytes) name=FUN_001c80d4

void FUN_001c80d4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3bb0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c816c (108 bytes) name=FUN_001c816c

void FUN_001c816c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3bb0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c8204 (108 bytes) name=FUN_001c8204

void FUN_001c8204(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f34f0;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c829c (108 bytes) name=FUN_001c829c

void FUN_001c829c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3490;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c8334 (112 bytes) name=FUN_001c8334

void FUN_001c8334(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3bb0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c83d0 (112 bytes) name=FUN_001c83d0

void FUN_001c83d0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3490;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c846c (112 bytes) name=FUN_001c846c

void FUN_001c846c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f34f0;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8508 (112 bytes) name=FUN_001c8508

void FUN_001c8508(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f34f0;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c85a4 (112 bytes) name=FUN_001c85a4

void FUN_001c85a4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3bb0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8640 (112 bytes) name=FUN_001c8640

void FUN_001c8640(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3490;
  cv::Mat::release((Mat *)(param_1 + 0xe));
  if ((undefined8 *)param_1[0x17] != param_1 + 0x18) {
    cv::fastFree((undefined8 *)param_1[0x17]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c86dc (108 bytes) name=FUN_001c86dc

void FUN_001c86dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c8774 (108 bytes) name=FUN_001c8774

void FUN_001c8774(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c880c (108 bytes) name=FUN_001c880c

void FUN_001c880c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c88a4 (108 bytes) name=FUN_001c88a4

void FUN_001c88a4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  return;
}


==================================================================

### FUNC 001c893c (112 bytes) name=FUN_001c893c

void FUN_001c893c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c89d8 (112 bytes) name=FUN_001c89d8

void FUN_001c89d8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8a74 (112 bytes) name=FUN_001c8a74

void FUN_001c8a74(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8b10 (112 bytes) name=FUN_001c8b10

void FUN_001c8b10(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8bac (112 bytes) name=FUN_001c8bac

void FUN_001c8bac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3970;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8c48 (112 bytes) name=FUN_001c8c48

void FUN_001c8c48(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f38e0;
  cv::Mat::release((Mat *)(param_1 + 0x10));
  if ((undefined8 *)param_1[0x19] != param_1 + 0x1a) {
    cv::fastFree((undefined8 *)param_1[0x19]);
  }
  cv::Mat::release((Mat *)(param_1 + 2));
  if ((undefined8 *)param_1[0xb] != param_1 + 0xc) {
    cv::fastFree((undefined8 *)param_1[0xb]);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001c8ce4 (28 bytes) name=FUN_001c8ce4

void FUN_001c8ce4(undefined8 *param_1)

{
  *(undefined4 *)((long)param_1 + 0xc) = 0xffffffff;
  *param_1 = &DAT_004fac70;
  *(undefined4 *)(param_1 + 1) = 0xffffffff;
  return;
}


==================================================================

### FUNC 001c8d00 (4 bytes) name=FUN_001c8d00

void FUN_001c8d00(void)

{
  return;
}


==================================================================

### FUNC 001c8d04 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001c8d08 (28 bytes) name=FUN_001c8d08

void FUN_001c8d08(undefined8 *param_1)

{
  *(undefined4 *)((long)param_1 + 0xc) = 0xffffffff;
  *param_1 = &DAT_004faca0;
  *(undefined4 *)(param_1 + 1) = 0xffffffff;
  return;
}


==================================================================

### FUNC 001c8d24 (4 bytes) name=FUN_001c8d24

void FUN_001c8d24(void)

{
  return;
}


==================================================================

### FUNC 001c8d28 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001c8d2c (24 bytes) name=FUN_001c8d2c

void FUN_001c8d2c(undefined8 *param_1)

{
  *param_1 = &DAT_004facd0;
  param_1[2] = 0xffffffffffffffff;
  param_1[1] = 0xffffffffffffffff;
  return;
}


==================================================================

### FUNC 001c8d44 (4 bytes) name=FUN_001c8d44

void FUN_001c8d44(void)

{
  return;
}


==================================================================

### FUNC 001c8d48 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001c8d4c (212 bytes) name=FUN_001c8d4c

void FUN_001c8d4c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3450;
  *(undefined4 *)((long)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)(param_1 + 6) = 0;
  *(undefined4 *)((long)param_1 + 0x34) = 0;
  *(undefined4 *)(param_1 + 7) = 0;
  *(undefined4 *)((long)param_1 + 0x3c) = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  param_1[0x19] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  param_1[0x24] = 0;
  param_1[0x25] = 0;
  *(undefined4 *)(param_1 + 2) = 0xffffffff;
  *(undefined4 *)((long)param_1 + 0xc) = 0xffffffff;
  *(undefined4 *)(param_1 + 1) = 0xffffffff;
  *(undefined4 *)((long)param_1 + 0x4c) = 1;
  *(undefined4 *)(param_1 + 9) = 1;
  *(undefined4 *)((long)param_1 + 0xe4) = 0;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *(undefined4 *)((long)param_1 + 0xdc) = 0;
  *(undefined4 *)(param_1 + 0x1b) = 0;
  *(undefined4 *)((long)param_1 + 0xd4) = 0;
  *(undefined4 *)(param_1 + 0x1a) = 0;
  *(undefined4 *)((long)param_1 + 0x24) = 0;
  *(undefined4 *)(param_1 + 5) = 0xffffffff;
  *(undefined4 *)((long)param_1 + 0x2c) = 0xffffffff;
  return;
}


==================================================================

### FUNC 001c8e20 (24 bytes) name=FUN_001c8e20

int FUN_001c8e20(long param_1)

{
  return (*(int *)(param_1 + 0xdc) - *(int *)(param_1 + 0xd4)) - *(int *)(param_1 + 0xe0);
}


==================================================================

### FUNC 001c8e38 (16 bytes) name=FUN_001c8e38

int FUN_001c8e38(long param_1)

{
  return *(int *)(param_1 + 0x3c) - *(int *)(param_1 + 0xe4);
}


==================================================================

### FUNC 001c8e50 (848 bytes) name=FUN_001c8e50

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint FUN_001c8e50(_InputArray *param_1,int *param_2)

{
  int iVar1;
  int *piVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  long lVar9;
  int iVar10;
  uint uVar11;
  char *pcVar12;
  long lVar13;
  uint uVar14;
  Mat *pMVar15;
  long lVar16;
  long lVar17;
  double __x;
  double dVar18;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  undefined4 local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar10 = cv::_InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar15 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar15;
    local_5c = *(undefined4 *)(pMVar15 + 4);
    local_58 = *(int *)(pMVar15 + 8);
    local_54 = *(int *)(pMVar15 + 0xc);
    local_50 = *(undefined8 *)(pMVar15 + 0x10);
    local_48 = *(undefined8 *)(pMVar15 + 0x18);
    local_40 = *(undefined8 *)(pMVar15 + 0x20);
    local_38 = *(undefined8 *)(pMVar15 + 0x28);
    local_30 = *(undefined8 *)(pMVar15 + 0x30);
    local_28 = *(long *)(pMVar15 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar5) {
          *piVar2 = *piVar2 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar15 + 0x48);
      local_8 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_5c = 0;
      cv::Mat::copySize((Mat *)&local_60,pMVar15);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  if ((local_60 >> 3 & 0x1ff) != 0) {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_d8,0x17);
    cVar4 = s__kernel_channels______1_004430e8[0x16];
    uVar8 = s__kernel_channels______1_004430e8._20_2_;
    uVar7 = s__kernel_channels______1_004430e8._8_8_;
    uVar6 = s__kernel_channels______1_004430e8._0_8_;
    *(undefined4 *)(pcVar12 + 0x10) = s__kernel_channels______1_004430e8._16_4_;
    *(undefined2 *)(pcVar12 + 0x14) = uVar8;
    pcVar12[0x16] = cVar4;
    *(undefined8 *)pcVar12 = uVar6;
    *(undefined8 *)(pcVar12 + 8) = uVar7;
    cv::error(-0xd7,(String *)&local_d8,"int cv::getKernelType(cv::InputArray, cv::Point)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x1ac);
    cv::String::deallocate((String *)&local_d8);
  }
  local_78 = &local_70;
  local_80 = &uStack_b8;
  iVar10 = local_58 * local_54;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  uStack_b8 = _UNK_001c9208;
  local_c0 = _DAT_001c9200;
  local_88 = 0;
  local_c8 = 0;
  local_c4 = 0;
  uStack_68 = 0;
  local_70 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_d0 = (Mat *)&local_c0;
  cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_d8,6,1.0,0.0);
  lVar9 = local_b0;
  if (((local_58 == 1) || (local_54 == 1)) && (*param_2 * 2 + 1 == local_54)) {
    iVar1 = param_2[1] * 2 + 1;
    uVar11 = 8;
    if (local_58 == iVar1) {
      uVar11 = 0xb;
    }
    uVar14 = 0xc;
    if (local_58 == iVar1) {
      uVar14 = 0xf;
    }
  }
  else {
    uVar11 = 8;
    uVar14 = 0xc;
  }
  if (0 < iVar10) {
    dVar18 = 0.0;
    lVar16 = 0;
    lVar17 = local_b0 + (long)iVar10 * 8;
    do {
      __x = *(double *)(lVar9 + lVar16 * 8);
      uVar11 = uVar14 & 0xfffffffe;
      if (__x == *(double *)(lVar17 + -8)) {
        uVar11 = uVar14;
      }
      uVar3 = uVar11 & 0xfffffffd;
      if (-*(double *)(lVar17 + -8) == __x) {
        uVar3 = uVar11;
      }
      if (__x < 0.0) {
        uVar3 = uVar3 & 0xfffffffb;
      }
      lVar13 = lrint(__x);
      lVar16 = lVar16 + 1;
      lVar17 = lVar17 + -8;
      dVar18 = dVar18 + __x;
      uVar14 = uVar3 & 0xfffffff7;
      if (__x == (double)(int)lVar13) {
        uVar14 = uVar3;
      }
    } while ((int)lVar16 < iVar10);
    uVar11 = uVar14;
    if ((ABS(dVar18) + 1.0) * DAT_001c9210 < ABS(dVar18 - 1.0)) {
      uVar11 = uVar14 & 0xfffffffb;
    }
  }
  cv::Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return uVar11;
}


==================================================================

### FUNC 001c9220 (1212 bytes) name=FUN_001c9220

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int FUN_001c9220(long param_1,long param_2,short *param_3,int param_4,int param_5)

{
  undefined5 *puVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined6 uVar8;
  undefined1 auVar9 [16];
  undefined4 uVar10;
  undefined1 auVar11 [16];
  short sVar12;
  short sVar13;
  short sVar14;
  short sVar15;
  short sVar16;
  short sVar17;
  short sVar18;
  uint3 uVar19;
  uint3 uVar20;
  undefined1 auVar21 [16];
  char cVar22;
  short *psVar23;
  undefined8 *puVar24;
  uint uVar25;
  long lVar26;
  ulong uVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined1 uVar32;
  undefined1 uVar33;
  undefined1 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  
  cVar22 = cv::checkHardwareSupport(100);
  if (cVar22 != '\0') {
    lVar26 = *(long *)(param_1 + 0x10);
    if (*(char *)(param_1 + 100) != '\0') {
      iVar5 = *(int *)(param_1 + 8) + *(int *)(param_1 + 0xc) + -1;
      param_4 = param_4 * param_5;
      uVar25 = iVar5 / 2;
      uVar27 = -(ulong)(uVar25 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar25 << 2;
      puVar24 = (undefined8 *)(param_2 + (int)(uVar25 * param_5));
      puVar1 = (undefined5 *)(lVar26 + uVar27);
      if ((*(uint *)(param_1 + 0x60) & 1) == 0) {
        if (iVar5 == 3) {
          if ((*(int *)(lVar26 + uVar27) == 0) && (*(int *)((long)puVar1 + 4) == 1)) {
            if (7 < param_4) {
              uVar25 = param_4 - 8U >> 3;
              psVar23 = param_3 + 8;
              puVar24 = (undefined8 *)((long)puVar24 - (long)param_5);
              do {
                puVar2 = (undefined8 *)((long)param_5 * 2 + (long)puVar24);
                uVar29 = *puVar24;
                puVar24 = puVar24 + 1;
                uVar30 = *puVar2;
                uVar19 = CONCAT12((char)((ulong)uVar30 >> 8),(short)uVar30) & 0xff00ff;
                *(ulong *)(psVar23 + -4) =
                     CONCAT44((int)(short)((ushort)(byte)((ulong)uVar30 >> 0x18) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x18)),
                              (int)(short)((ushort)(byte)((ulong)uVar30 >> 0x10) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x10)));
                *(ulong *)(psVar23 + -8) =
                     CONCAT44((int)(short)((ushort)(byte)(uVar19 >> 0x10) -
                                          (ushort)(byte)((ulong)uVar29 >> 8)),
                              (int)(short)((short)uVar19 - (ushort)(byte)uVar29));
                *(ulong *)(psVar23 + 4) =
                     CONCAT44((int)(short)((ushort)(byte)((ulong)uVar30 >> 0x38) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x38)),
                              (int)(short)((ushort)(byte)((ulong)uVar30 >> 0x30) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x30)));
                *(ulong *)psVar23 =
                     CONCAT44((int)(short)((ushort)(byte)((ulong)uVar30 >> 0x28) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x28)),
                              (int)(short)((ushort)(byte)((ulong)uVar30 >> 0x20) -
                                          (ushort)(byte)((ulong)uVar29 >> 0x20)));
                psVar23 = psVar23 + 0x10;
              } while (psVar23 != param_3 + (ulong)uVar25 * 0x10 + 0x18);
LAB_001c938c:
              return (uVar25 + 1) * 8;
            }
          }
          else {
            uVar30 = NEON_sqxtn((ulong)*(uint *)((long)puVar1 + 4) << 0x20,
                                ZEXT416(*(uint *)((long)puVar1 + 4)) << 0x20,4);
            if (7 < param_4) {
              uVar25 = param_4 - 8U >> 3;
              psVar23 = param_3 + 8;
              puVar24 = (undefined8 *)((long)puVar24 - (long)param_5);
              do {
                puVar2 = (undefined8 *)((long)param_5 * 2 + (long)puVar24);
                uVar28 = *puVar24;
                puVar24 = puVar24 + 1;
                uVar29 = *puVar2;
                uVar19 = CONCAT12((char)((ulong)uVar29 >> 8),(short)uVar29) & 0xff00ff;
                sVar13 = (short)((ulong)uVar30 >> 0x10);
                iVar5 = (int)sVar13;
                *(ulong *)(psVar23 + -4) =
                     CONCAT44((short)((ushort)(byte)((ulong)uVar29 >> 0x18) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x18)) * iVar5,
                              (short)((ushort)(byte)((ulong)uVar29 >> 0x10) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x10)) * iVar5);
                *(ulong *)(psVar23 + -8) =
                     CONCAT44((short)((ushort)(byte)(uVar19 >> 0x10) -
                                     (ushort)(byte)((ulong)uVar28 >> 8)) * iVar5,
                              (short)((short)uVar19 - (ushort)(byte)uVar28) * iVar5);
                iVar5 = (int)sVar13;
                *(ulong *)(psVar23 + 4) =
                     CONCAT44((short)((ushort)(byte)((ulong)uVar29 >> 0x38) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x38)) * iVar5,
                              (short)((ushort)(byte)((ulong)uVar29 >> 0x30) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x30)) * iVar5);
                *(ulong *)psVar23 =
                     CONCAT44((short)((ushort)(byte)((ulong)uVar29 >> 0x28) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x28)) * iVar5,
                              (short)((ushort)(byte)((ulong)uVar29 >> 0x20) -
                                     (ushort)(byte)((ulong)uVar28 >> 0x20)) * iVar5);
                psVar23 = psVar23 + 0x10;
              } while (psVar23 != param_3 + (ulong)uVar25 * 0x10 + 0x18);
              goto LAB_001c938c;
            }
          }
        }
        else if (iVar5 == 5) {
          uVar10 = *(undefined4 *)(puVar1 + 1);
          auVar21[5] = (char)((uint)uVar10 >> 8);
          auVar21._0_5_ = *(undefined5 *)((long)puVar1 + 4);
          auVar21[6] = (char)((uint)uVar10 >> 0x10);
          auVar21[7] = (char)((uint)uVar10 >> 0x18);
          auVar21._8_8_ = 0;
          uVar30 = NEON_sqxtn((ulong)*(uint *)((long)puVar1 + 4) << 0x20,auVar21 << 0x20,4);
          if (7 < param_4) {
            lVar26 = (long)param_5;
            uVar25 = param_4 - 8U >> 3;
            puVar24 = (undefined8 *)((long)puVar24 - lVar26);
            psVar23 = param_3 + 8;
            do {
              puVar2 = (undefined8 *)(lVar26 + (param_5 << 1) + (long)puVar24);
              puVar3 = (undefined8 *)(lVar26 * 2 + (long)puVar24);
              uVar31 = *puVar24;
              uVar35 = *(undefined8 *)((long)puVar24 - ((param_5 << 1) - lVar26));
              puVar24 = puVar24 + 1;
              uVar29 = *puVar2;
              uVar28 = *puVar3;
              uVar19 = CONCAT12((char)((ulong)uVar29 >> 8),(short)uVar29) & 0xff00ff;
              sVar13 = (short)uVar19 - (ushort)(byte)uVar35;
              sVar14 = (ushort)(byte)(uVar19 >> 0x10) - (ushort)(byte)((ulong)uVar35 >> 8);
              sVar12 = (ushort)(byte)((ulong)uVar29 >> 0x10) - (ushort)(byte)((ulong)uVar35 >> 0x10)
              ;
              sVar15 = (ushort)(byte)((ulong)uVar29 >> 0x18) - (ushort)(byte)((ulong)uVar35 >> 0x18)
              ;
              uVar19 = CONCAT12((char)((ulong)uVar28 >> 8),(short)uVar28) & 0xff00ff;
              sVar16 = (short)((ulong)uVar30 >> 0x10);
              iVar6 = (int)sVar16;
              uVar10 = CONCAT13((char)((ushort)sVar14 >> 8),CONCAT12((char)sVar14,sVar13));
              uVar8 = CONCAT15((char)((ushort)sVar12 >> 8),CONCAT14((char)sVar12,uVar10));
              sVar14 = (short)((ulong)uVar30 >> 0x20);
              iVar5 = (int)sVar14;
              *(ulong *)(psVar23 + -4) =
                   CONCAT44((short)((ushort)(byte)((ulong)uVar28 >> 0x18) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x18)) * iVar6 +
                            (short)(CONCAT17((char)((ushort)sVar15 >> 8),
                                             CONCAT16((char)sVar15,uVar8)) >> 0x30) * iVar5,
                            (short)((ushort)(byte)((ulong)uVar28 >> 0x10) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x10)) * iVar6 +
                            (short)((uint6)uVar8 >> 0x20) * iVar5);
              *(ulong *)(psVar23 + -8) =
                   CONCAT44((short)((ushort)(byte)(uVar19 >> 0x10) -
                                   (ushort)(byte)((ulong)uVar31 >> 8)) * iVar6 +
                            (short)((uint)uVar10 >> 0x10) * iVar5,
                            (short)((short)uVar19 - (ushort)(byte)uVar31) * iVar6 + sVar13 * iVar5);
              iVar6 = (int)sVar16;
              iVar5 = (int)sVar14;
              *(ulong *)(psVar23 + 4) =
                   CONCAT44((short)((ushort)(byte)((ulong)uVar28 >> 0x38) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x38)) * iVar6 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x38) -
                                   (ushort)(byte)((ulong)uVar35 >> 0x38)) * iVar5,
                            (short)((ushort)(byte)((ulong)uVar28 >> 0x30) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x30)) * iVar6 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x30) -
                                   (ushort)(byte)((ulong)uVar35 >> 0x30)) * iVar5);
              *(ulong *)psVar23 =
                   CONCAT44((short)((ushort)(byte)((ulong)uVar28 >> 0x28) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x28)) * iVar6 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x28) -
                                   (ushort)(byte)((ulong)uVar35 >> 0x28)) * iVar5,
                            (short)((ushort)(byte)((ulong)uVar28 >> 0x20) -
                                   (ushort)(byte)((ulong)uVar31 >> 0x20)) * iVar6 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x20) -
                                   (ushort)(byte)((ulong)uVar35 >> 0x20)) * iVar5);
              psVar23 = psVar23 + 0x10;
            } while (psVar23 != param_3 + (ulong)uVar25 * 0x10 + 0x18);
            goto LAB_001c938c;
          }
        }
      }
      else if (iVar5 != 1) {
        if (iVar5 == 3) {
          if (*(int *)(lVar26 + uVar27) == 2) {
            if (*(int *)((long)puVar1 + 4) == 1) {
              if (param_4 < 8) {
                return 0;
              }
              uVar25 = param_4 - 8U >> 3;
              puVar2 = puVar24 + (ulong)uVar25 + 1;
              do {
                puVar3 = (undefined8 *)((long)puVar24 + (long)param_5);
                puVar4 = (undefined8 *)((long)puVar24 - (long)param_5);
                uVar29 = *puVar24;
                puVar24 = puVar24 + 1;
                uVar30 = *puVar3;
                uVar28 = *puVar4;
                uVar19 = CONCAT12((char)((ulong)uVar29 >> 8),(short)uVar29) & 0xff00ff;
                uVar20 = CONCAT12((char)((ulong)uVar28 >> 8),(short)uVar28) & 0xff00ff;
                *param_3 = (short)uVar20 + (ushort)(byte)uVar30 + (short)uVar19 * 2;
                param_3[1] = 0;
                param_3[2] = (ushort)(byte)(uVar20 >> 0x10) + (ushort)(byte)((ulong)uVar30 >> 8) +
                             (ushort)(byte)(uVar19 >> 0x10) * 2;
                param_3[3] = 0;
                param_3[4] = (ushort)(byte)((ulong)uVar28 >> 0x10) +
                             (ushort)(byte)((ulong)uVar30 >> 0x10) +
                             (ushort)(byte)((ulong)uVar29 >> 0x10) * 2;
                param_3[5] = 0;
                param_3[6] = (ushort)(byte)((ulong)uVar28 >> 0x18) +
                             (ushort)(byte)((ulong)uVar30 >> 0x18) +
                             (ushort)(byte)((ulong)uVar29 >> 0x18) * 2;
                param_3[7] = 0;
                param_3[8] = (ushort)(byte)((ulong)uVar28 >> 0x20) +
                             (ushort)(byte)((ulong)uVar30 >> 0x20) +
                             (ushort)(byte)((ulong)uVar29 >> 0x20) * 2;
                param_3[9] = 0;
                param_3[10] = (ushort)(byte)((ulong)uVar28 >> 0x28) +
                              (ushort)(byte)((ulong)uVar30 >> 0x28) +
                              (ushort)(byte)((ulong)uVar29 >> 0x28) * 2;
                param_3[0xb] = 0;
                param_3[0xc] = (ushort)(byte)((ulong)uVar28 >> 0x30) +
                               (ushort)(byte)((ulong)uVar30 >> 0x30) +
                               (ushort)(byte)((ulong)uVar29 >> 0x30) * 2;
                param_3[0xd] = 0;
                param_3[0xe] = (ushort)(byte)((ulong)uVar28 >> 0x38) +
                               (ushort)(byte)((ulong)uVar30 >> 0x38) +
                               (ushort)(byte)((ulong)uVar29 >> 0x38) * 2;
                param_3[0xf] = 0;
                param_3 = param_3 + 0x10;
              } while (puVar24 != puVar2);
              goto LAB_001c938c;
            }
          }
          else if ((*(int *)(lVar26 + uVar27) == -2) && (*(int *)((long)puVar1 + 4) == 1)) {
            return 0;
          }
          uVar10 = *(undefined4 *)((long)puVar1 + 4);
          uVar32 = (undefined1)((uint)uVar10 >> 8);
          uVar33 = (undefined1)((uint)uVar10 >> 0x10);
          uVar34 = (undefined1)((uint)uVar10 >> 0x18);
          auVar11[5] = uVar32;
          auVar11._0_5_ = *puVar1;
          auVar11[6] = uVar33;
          auVar11[7] = uVar34;
          auVar11._8_8_ = 0;
          uVar30 = NEON_sqxtn(CONCAT17(uVar34,CONCAT16(uVar33,CONCAT15(uVar32,*puVar1))),auVar11,4);
          if (7 < param_4) {
            uVar25 = param_4 - 8U >> 3;
            psVar23 = param_3 + 8;
            do {
              puVar2 = (undefined8 *)((long)puVar24 - (long)param_5);
              uVar28 = *puVar24;
              uVar31 = *(undefined8 *)((long)puVar24 + (long)param_5);
              puVar24 = puVar24 + 1;
              uVar29 = *puVar2;
              uVar19 = CONCAT12((char)((ulong)uVar28 >> 8),(short)uVar28) & 0xff00ff;
              uVar20 = CONCAT12((char)((ulong)uVar29 >> 8),(short)uVar29) & 0xff00ff;
              sVar13 = (short)uVar20 + (ushort)(byte)uVar31;
              sVar14 = (ushort)(byte)(uVar20 >> 0x10) + (ushort)(byte)((ulong)uVar31 >> 8);
              sVar12 = (ushort)(byte)((ulong)uVar29 >> 0x10) + (ushort)(byte)((ulong)uVar31 >> 0x10)
              ;
              sVar15 = (ushort)(byte)((ulong)uVar29 >> 0x18) + (ushort)(byte)((ulong)uVar31 >> 0x18)
              ;
              iVar6 = (int)(short)uVar30;
              iVar7 = (int)(short)uVar30;
              uVar10 = CONCAT13((char)((ushort)sVar14 >> 8),CONCAT12((char)sVar14,sVar13));
              uVar8 = CONCAT15((char)((ushort)sVar12 >> 8),CONCAT14((char)sVar12,uVar10));
              sVar14 = (short)((ulong)uVar30 >> 0x10);
              iVar5 = (int)sVar14;
              *(ulong *)(psVar23 + -4) =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x18) * iVar6 +
                            (short)(CONCAT17((char)((ushort)sVar15 >> 8),
                                             CONCAT16((char)sVar15,uVar8)) >> 0x30) * iVar5,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x10) * iVar6 +
                            (short)((uint6)uVar8 >> 0x20) * iVar5);
              *(ulong *)(psVar23 + -8) =
                   CONCAT44((short)(ushort)(byte)(uVar19 >> 0x10) * iVar6 +
                            (short)((uint)uVar10 >> 0x10) * iVar5,
                            (short)uVar19 * iVar6 + sVar13 * iVar5);
              iVar5 = (int)sVar14;
              *(ulong *)(psVar23 + 4) =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x38) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x38) +
                                   (ushort)(byte)((ulong)uVar31 >> 0x38)) * iVar5,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x30) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x30) +
                                   (ushort)(byte)((ulong)uVar31 >> 0x30)) * iVar5);
              *(ulong *)psVar23 =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x28) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x28) +
                                   (ushort)(byte)((ulong)uVar31 >> 0x28)) * iVar5,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x20) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x20) +
                                   (ushort)(byte)((ulong)uVar31 >> 0x20)) * iVar5);
              psVar23 = psVar23 + 0x10;
            } while (psVar23 != param_3 + (ulong)uVar25 * 0x10 + 0x18);
            goto LAB_001c938c;
          }
        }
        else if ((iVar5 == 5) &&
                (((*(int *)(lVar26 + uVar27) != -2 || (*(int *)((long)puVar1 + 4) != 0)) ||
                 (*(int *)(puVar1 + 1) != 1)))) {
          uVar10 = *(undefined4 *)((long)puVar1 + 4);
          uVar32 = (undefined1)((uint)uVar10 >> 8);
          uVar33 = (undefined1)((uint)uVar10 >> 0x10);
          uVar34 = (undefined1)((uint)uVar10 >> 0x18);
          auVar9[5] = uVar32;
          auVar9._0_5_ = *puVar1;
          auVar9[6] = uVar33;
          auVar9[7] = uVar34;
          auVar9._8_2_ = (short)*(undefined4 *)(puVar1 + 1);
          auVar9._10_2_ = (short)((uint)*(undefined4 *)(puVar1 + 1) >> 0x10);
          auVar9._12_4_ = 0;
          uVar30 = NEON_sqxtn(CONCAT17(uVar34,CONCAT16(uVar33,CONCAT15(uVar32,*puVar1))),auVar9,4);
          if (7 < param_4) {
            uVar25 = param_4 - 8U >> 3;
            psVar23 = param_3 + 8;
            do {
              uVar31 = *(undefined8 *)((long)puVar24 - (long)param_5);
              uVar36 = *(undefined8 *)((long)puVar24 + (long)(param_5 << 1));
              uVar35 = *(undefined8 *)((long)puVar24 + (long)param_5);
              uVar29 = *(undefined8 *)((long)puVar24 - (long)(param_5 << 1));
              uVar28 = *puVar24;
              puVar24 = puVar24 + 1;
              uVar19 = CONCAT12((char)((ulong)uVar31 >> 8),(short)uVar31) & 0xff00ff;
              uVar20 = CONCAT12((char)((ulong)uVar29 >> 8),(short)uVar29) & 0xff00ff;
              sVar12 = (short)uVar20 + (ushort)(byte)uVar36;
              sVar13 = (ushort)(byte)(uVar20 >> 0x10) + (ushort)(byte)((ulong)uVar36 >> 8);
              sVar14 = (ushort)(byte)((ulong)uVar29 >> 0x10) + (ushort)(byte)((ulong)uVar36 >> 0x10)
              ;
              sVar15 = (ushort)(byte)((ulong)uVar29 >> 0x18) + (ushort)(byte)((ulong)uVar36 >> 0x18)
              ;
              sVar16 = (ushort)(byte)((ulong)uVar29 >> 0x20) + (ushort)(byte)((ulong)uVar36 >> 0x20)
              ;
              sVar17 = (ushort)(byte)((ulong)uVar29 >> 0x28) + (ushort)(byte)((ulong)uVar36 >> 0x28)
              ;
              sVar18 = (ushort)(byte)((ulong)uVar29 >> 0x30) + (ushort)(byte)((ulong)uVar36 >> 0x30)
              ;
              uVar20 = CONCAT12((char)((ulong)uVar28 >> 8),(short)uVar28) & 0xff00ff;
              uVar10 = CONCAT13((char)((ushort)sVar13 >> 8),CONCAT12((char)sVar13,sVar12));
              uVar8 = CONCAT15((char)((ushort)sVar14 >> 8),CONCAT14((char)sVar14,uVar10));
              iVar7 = (int)(short)uVar30;
              sVar13 = (short)((ulong)uVar30 >> 0x10);
              iVar5 = (int)sVar13;
              sVar14 = (short)((ulong)uVar30 >> 0x20);
              iVar6 = (int)sVar14;
              *(ulong *)(psVar23 + -4) =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x18) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x18) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x18)) * iVar5 +
                            (short)(CONCAT17((char)((ushort)sVar15 >> 8),
                                             CONCAT16((char)sVar15,uVar8)) >> 0x30) * iVar6,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x10) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x10) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x10)) * iVar5 +
                            (short)((uint6)uVar8 >> 0x20) * iVar6);
              *(ulong *)(psVar23 + -8) =
                   CONCAT44((short)(ushort)(byte)(uVar20 >> 0x10) * iVar7 +
                            (short)((ushort)(byte)(uVar19 >> 0x10) +
                                   (ushort)(byte)((ulong)uVar35 >> 8)) * iVar5 +
                            (short)((uint)uVar10 >> 0x10) * iVar6,
                            (short)uVar20 * iVar7 +
                            (short)((short)uVar19 + (ushort)(byte)uVar35) * iVar5 + sVar12 * iVar6);
              iVar7 = (int)(short)uVar30;
              uVar10 = CONCAT13((char)((ushort)sVar17 >> 8),CONCAT12((char)sVar17,sVar16));
              iVar5 = (int)sVar13;
              iVar6 = (int)sVar14;
              *(ulong *)(psVar23 + 4) =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x38) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x38) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x38)) * iVar5 +
                            (short)((ushort)(byte)((ulong)uVar29 >> 0x38) +
                                   (ushort)(byte)((ulong)uVar36 >> 0x38)) * iVar6,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x30) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x30) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x30)) * iVar5 +
                            (short)(CONCAT15((char)((ushort)sVar18 >> 8),
                                             CONCAT14((char)sVar18,uVar10)) >> 0x20) * iVar6);
              *(ulong *)psVar23 =
                   CONCAT44((short)(ushort)(byte)((ulong)uVar28 >> 0x28) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x28) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x28)) * iVar5 +
                            (short)((uint)uVar10 >> 0x10) * iVar6,
                            (short)(ushort)(byte)((ulong)uVar28 >> 0x20) * iVar7 +
                            (short)((ushort)(byte)((ulong)uVar31 >> 0x20) +
                                   (ushort)(byte)((ulong)uVar35 >> 0x20)) * iVar5 + sVar16 * iVar6);
              psVar23 = psVar23 + 0x10;
            } while (psVar23 != param_3 + (ulong)uVar25 * 0x10 + 0x18);
            goto LAB_001c938c;
          }
        }
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 001c9700 (14260 bytes) name=FUN_001c9700

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_001c9700(long param_1,long param_2,long param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  uint uVar8;
  long lVar9;
  int *piVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  uint3 uVar15;
  uint3 uVar16;
  uint3 uVar17;
  uint6 uVar18;
  uint3 uVar19;
  uint3 uVar20;
  uint3 uVar21;
  uint3 uVar22;
  uint3 uVar23;
  uint3 uVar24;
  uint3 uVar25;
  uint3 uVar26;
  uint3 uVar27;
  undefined2 uVar28;
  undefined2 uVar29;
  byte *pbVar30;
  byte *pbVar36;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar47;
  undefined1 *puVar51;
  undefined1 *puVar55;
  undefined1 *puVar57;
  undefined1 *puVar58;
  undefined1 *puVar59;
  uint uVar60;
  int *piVar61;
  int iVar62;
  uint uVar63;
  long lVar64;
  int iVar65;
  ulong *puVar66;
  undefined8 *puVar67;
  long lVar68;
  long lVar69;
  long lVar70;
  byte *pbVar71;
  long lVar72;
  uint uVar73;
  long lVar74;
  byte *pbVar75;
  ulong uVar76;
  byte *pbVar77;
  ulong uVar78;
  long lVar79;
  undefined1 uVar80;
  long lVar81;
  undefined8 uVar82;
  undefined8 uVar83;
  byte bVar84;
  undefined1 uVar85;
  byte bVar87;
  byte bVar88;
  byte bVar89;
  byte bVar90;
  byte bVar91;
  byte bVar92;
  byte bVar93;
  byte bVar94;
  byte bVar95;
  byte bVar96;
  byte bVar97;
  byte bVar98;
  byte bVar99;
  byte bVar100;
  byte bVar101;
  byte bVar102;
  byte bVar103;
  byte bVar104;
  byte bVar105;
  byte bVar106;
  undefined8 uVar86;
  byte bVar108;
  byte bVar109;
  byte bVar110;
  byte bVar111;
  byte bVar112;
  byte bVar113;
  byte bVar114;
  byte bVar115;
  byte bVar116;
  byte bVar117;
  byte bVar118;
  byte bVar119;
  byte bVar120;
  byte bVar121;
  byte bVar122;
  byte bVar123;
  byte bVar124;
  byte bVar125;
  byte bVar126;
  byte bVar127;
  undefined8 uVar107;
  byte bVar128;
  byte bVar129;
  byte bVar130;
  byte bVar131;
  byte bVar132;
  byte bVar133;
  byte bVar134;
  byte bVar135;
  byte bVar136;
  byte bVar137;
  byte bVar138;
  byte bVar139;
  byte bVar140;
  byte bVar141;
  byte bVar142;
  byte bVar143;
  byte bVar144;
  byte bVar145;
  byte bVar146;
  byte bVar147;
  byte bVar148;
  byte bVar149;
  byte bVar150;
  byte bVar151;
  byte bVar152;
  byte bVar153;
  byte bVar154;
  byte bVar155;
  byte bVar156;
  byte bVar157;
  byte bVar158;
  byte bVar159;
  byte bVar160;
  byte bVar161;
  byte bVar162;
  byte bVar163;
  byte bVar164;
  byte bVar165;
  byte bVar166;
  byte bVar167;
  byte bVar168;
  byte bVar169;
  byte bVar170;
  byte bVar171;
  byte bVar172;
  byte bVar173;
  byte bVar174;
  byte bVar175;
  byte bVar176;
  byte bVar177;
  byte bVar178;
  byte bVar179;
  byte bVar180;
  byte bVar181;
  byte bVar182;
  byte bVar183;
  byte bVar184;
  byte bVar185;
  byte bVar186;
  byte bVar187;
  byte bVar188;
  byte bVar189;
  byte bVar190;
  byte bVar193;
  byte bVar195;
  byte bVar197;
  byte bVar199;
  long lVar191;
  byte bVar194;
  byte bVar196;
  byte bVar198;
  byte bVar200;
  byte bVar201;
  byte bVar202;
  undefined8 uVar192;
  byte bVar204;
  byte bVar205;
  byte bVar206;
  byte bVar207;
  byte bVar208;
  byte bVar209;
  byte bVar210;
  byte bVar211;
  byte bVar212;
  byte bVar213;
  byte bVar214;
  byte bVar215;
  byte bVar216;
  byte bVar217;
  undefined8 uVar203;
  int iVar218;
  long lVar219;
  int iVar220;
  int iVar221;
  int iVar222;
  long lVar223;
  long lVar224;
  long lVar225;
  long lVar226;
  long lVar227;
  long lVar228;
  long lVar229;
  uint uVar230;
  long lVar231;
  long lVar232;
  undefined2 local_3c0;
  undefined2 uStack_3b8;
  undefined2 local_3b0;
  undefined2 uStack_3a8;
  undefined2 local_3a0;
  undefined2 uStack_398;
  undefined2 local_390;
  undefined2 uStack_388;
  undefined2 local_380;
  undefined2 uStack_378;
  undefined2 local_370;
  undefined2 uStack_368;
  undefined2 local_360;
  undefined2 uStack_358;
  undefined2 local_340;
  undefined2 uStack_338;
  undefined2 local_330;
  undefined2 uStack_328;
  undefined2 local_320;
  undefined2 uStack_318;
  undefined2 local_310;
  undefined2 uStack_308;
  undefined2 local_300;
  undefined2 uStack_2f8;
  undefined2 local_2f0;
  undefined2 uStack_2e8;
  undefined2 local_2e0;
  undefined2 uStack_2d8;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  undefined1 *puVar52;
  undefined1 *puVar53;
  undefined1 *puVar54;
  undefined1 *puVar56;
  
  lVar72 = *(long *)(param_1 + 0x20);
  uVar12 = *(uint *)(param_1 + 0xd8);
  uVar11 = *(int *)(param_1 + 8) / 2;
  uVar60 = FUN_001c9220(param_1 + 0x70);
  lVar64 = (long)(int)uVar11;
  lVar68 = (long)(int)uVar60;
  lVar74 = lVar64 * 4;
  piVar10 = (int *)(lVar72 + lVar74);
  lVar70 = lVar68 + (int)(uVar11 * param_5);
  param_4 = param_4 * param_5;
  pbVar71 = (byte *)(param_2 + lVar70);
  iVar13 = *(int *)(param_1 + 8);
  if ((uVar12 & 1) != 0) {
    if (iVar13 == 1) {
      if (*(int *)(lVar72 + lVar74) != 1) goto LAB_001c97b4;
      iVar13 = param_4 + -1;
      if ((int)uVar60 < iVar13) {
        uVar230 = (param_4 + -2) - uVar60;
        puVar67 = (undefined8 *)(param_2 + lVar68 + lVar70);
        uVar73 = uVar230 >> 1;
        puVar66 = (ulong *)(param_3 + lVar68 * 4);
        uVar12 = uVar73 + 1;
        if ((puVar67 < (undefined8 *)(param_3 + (lVar68 + (ulong)uVar12 * 2) * 4) &&
             puVar66 < (ulong *)(param_2 + lVar68 + lVar70 + (ulong)uVar12 * 2)) || (uVar12 < 8)) {
          pbVar50 = pbVar71 + lVar68;
          do {
            bVar84 = pbVar50[1];
            pbVar77 = pbVar50 + 2;
            *(uint *)puVar66 = (uint)*pbVar50;
            *(uint *)((long)puVar66 + 4) = (uint)bVar84;
            puVar66 = puVar66 + 1;
            pbVar50 = pbVar77;
          } while (pbVar77 != pbVar71 + lVar68 + 2 + (ulong)uVar73 * 2);
        }
        else {
          uVar8 = (uVar73 - 7 >> 3) + 1;
          uVar63 = uVar60;
          if (0xd < uVar230) {
            uVar230 = 0;
            do {
              uVar83 = puVar67[1];
              uVar82 = *puVar67;
              uVar230 = uVar230 + 1;
              uVar15 = CONCAT12((char)((ulong)uVar82 >> 8),(short)uVar82) & 0xff00ff;
              uVar80 = (undefined1)((ulong)uVar82 >> 0x28);
              uVar16 = CONCAT12((char)((ulong)uVar83 >> 8),(short)uVar83) & 0xff00ff;
              uVar85 = (undefined1)((ulong)uVar83 >> 0x28);
              puVar66[1] = (ulong)CONCAT14((char)((ulong)uVar82 >> 0x18),
                                           (uint)(byte)((ulong)uVar82 >> 0x10));
              *puVar66 = (ulong)((uint6)CONCAT14((char)(uVar15 >> 0x10),(uint)uVar15) &
                                0xffff0000ffff);
              puVar66[3] = (ulong)CONCAT14((char)((ulong)uVar82 >> 0x38),
                                           (uint)(byte)((ulong)uVar82 >> 0x30));
              puVar66[2] = (ulong)((uint6)CONCAT14(uVar80,(uint)CONCAT12(uVar80,(ushort)(byte)((
                                                  ulong)uVar82 >> 0x20))) & 0xffff0000ffff);
              puVar66[5] = (ulong)CONCAT14((char)((ulong)uVar83 >> 0x18),
                                           (uint)(byte)((ulong)uVar83 >> 0x10));
              puVar66[4] = (ulong)((uint6)CONCAT14((char)(uVar16 >> 0x10),(uint)uVar16) &
                                  0xffff0000ffff);
              puVar66[7] = (ulong)CONCAT14((char)((ulong)uVar83 >> 0x38),
                                           (uint)(byte)((ulong)uVar83 >> 0x30));
              puVar66[6] = (ulong)((uint6)CONCAT14(uVar85,(uint)CONCAT12(uVar85,(ushort)(byte)((
                                                  ulong)uVar83 >> 0x20))) & 0xffff0000ffff);
              puVar66 = puVar66 + 8;
              puVar67 = puVar67 + 2;
            } while (uVar230 < uVar8);
            uVar63 = uVar60 + uVar8 * 0x10;
            if (uVar8 * 8 == uVar12) goto LAB_001caf84;
          }
          lVar70 = (long)(int)uVar63;
          bVar84 = pbVar71[lVar70 + 1];
          *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
          *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
          if ((int)(uVar63 + 2) < iVar13) {
            lVar70 = (long)(int)(uVar63 + 2);
            bVar84 = pbVar71[lVar70 + 1];
            *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
            *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
            if ((int)(uVar63 + 4) < iVar13) {
              lVar70 = (long)(int)(uVar63 + 4);
              bVar84 = pbVar71[lVar70 + 1];
              *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
              *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
              if ((int)(uVar63 + 6) < iVar13) {
                lVar70 = (long)(int)(uVar63 + 6);
                bVar84 = pbVar71[lVar70 + 1];
                *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
                *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
                if ((int)(uVar63 + 8) < iVar13) {
                  lVar70 = (long)(int)(uVar63 + 8);
                  bVar84 = pbVar71[lVar70 + 1];
                  *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
                  *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
                  if ((int)(uVar63 + 10) < iVar13) {
                    lVar70 = (long)(int)(uVar63 + 10);
                    bVar84 = pbVar71[lVar70 + 1];
                    *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
                    *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
                    if ((int)(uVar63 + 0xc) < iVar13) {
                      lVar70 = (long)(int)(uVar63 + 0xc);
                      bVar84 = pbVar71[lVar70 + 1];
                      *(uint *)(param_3 + lVar70 * 4) = (uint)pbVar71[lVar70];
                      *(uint *)(param_3 + lVar70 * 4 + 4) = (uint)bVar84;
                    }
                  }
                }
              }
            }
          }
        }
LAB_001caf84:
        uVar60 = uVar60 + 2 + uVar73 * 2;
        lVar68 = (long)(int)uVar60;
      }
      pbVar71 = pbVar71 + lVar68;
      goto LAB_001c97b4;
    }
    if (iVar13 != 3) {
      if (iVar13 != 5) goto LAB_001c97b4;
      iVar13 = piVar10[1];
      iVar65 = piVar10[2];
      iVar62 = *(int *)(lVar72 + lVar74);
      if ((iVar13 != 0 || iVar62 != -2) || (iVar65 != 1)) {
        if (param_4 + -1 <= (int)uVar60) goto LAB_001c97b4;
        uVar73 = (param_4 + -2) - uVar60;
        lVar226 = (long)(param_5 << 1);
        lVar227 = (long)(param_5 * -2);
        piVar61 = (int *)(param_3 + lVar68 * 4);
        lVar228 = (long)-param_5;
        uVar230 = uVar73 >> 1;
        lVar69 = lVar70 + lVar228 + 1;
        uVar12 = uVar230 + 1;
        pbVar50 = (byte *)(param_2 + lVar70 + lVar226);
        lVar79 = (ulong)uVar12 * 2;
        pbVar77 = (byte *)(param_2 + lVar70 + lVar227);
        pbVar75 = (byte *)(param_3 + (lVar68 + lVar79) * 4);
        pbVar39 = (byte *)(param_2 + lVar69);
        pbVar40 = (byte *)(param_2 + lVar70 + lVar228);
        lVar68 = (long)param_5;
        pbVar35 = (byte *)(param_2 + lVar70 + lVar68);
        if (((((uVar12 < 0x10 ||
               (pbVar50 < pbVar75 && piVar61 < (int *)(param_2 + lVar70 + lVar226 + lVar79) ||
               pbVar77 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar227))) ||
              pbVar39 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar69)) ||
             pbVar40 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar228)) ||
             pbVar71 < pbVar75 && piVar61 < (int *)(param_2 + lVar70 + lVar79)) ||
           (pbVar35 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar68))) {
          pbVar50 = pbVar71 + 1;
          pbVar77 = pbVar71;
          do {
            bVar88 = pbVar50[lVar68];
            pbVar75 = pbVar77 + lVar68;
            bVar89 = pbVar77[1 - param_5];
            pbVar39 = pbVar77 + lVar228;
            bVar84 = *pbVar50;
            bVar87 = *pbVar77;
            bVar90 = pbVar50[lVar227];
            bVar91 = pbVar50[lVar226];
            pbVar50 = pbVar50 + 2;
            pbVar40 = pbVar77 + lVar227;
            pbVar35 = pbVar77 + lVar226;
            pbVar77 = pbVar77 + 2;
            *piVar61 = ((uint)*pbVar39 + (uint)*pbVar75) * iVar13 + (uint)bVar87 * iVar62 +
                       ((uint)*pbVar40 + (uint)*pbVar35) * iVar65;
            piVar61[1] = ((uint)bVar89 + (uint)bVar88) * iVar13 + (uint)bVar84 * iVar62 +
                         ((uint)bVar90 + (uint)bVar91) * iVar65;
            piVar61 = piVar61 + 2;
          } while (pbVar50 != pbVar71 + (ulong)uVar230 * 2 + 3);
        }
        else {
          uVar8 = (uVar230 - 0x10 >> 4) + 1;
          pbVar75 = pbVar71;
          uVar63 = uVar60;
          if (0x1f < uVar73) {
            uVar73 = 0;
            do {
              bVar84 = *pbVar35;
              pbVar30 = pbVar35 + 1;
              bVar87 = pbVar35[2];
              bVar128 = pbVar35[3];
              bVar89 = pbVar35[4];
              pbVar31 = pbVar35 + 5;
              bVar92 = pbVar35[6];
              pbVar32 = pbVar35 + 7;
              bVar95 = pbVar35[8];
              bVar129 = pbVar35[9];
              bVar98 = pbVar35[10];
              bVar131 = pbVar35[0xb];
              bVar101 = pbVar35[0xc];
              bVar133 = pbVar35[0xd];
              bVar104 = pbVar35[0xe];
              bVar135 = pbVar35[0xf];
              pbVar33 = pbVar35 + 0x10;
              pbVar34 = pbVar35 + 0x11;
              bVar108 = pbVar35[0x12];
              bVar137 = pbVar35[0x13];
              bVar110 = pbVar35[0x14];
              bVar138 = pbVar35[0x15];
              bVar113 = pbVar35[0x16];
              bVar140 = pbVar35[0x17];
              bVar116 = pbVar35[0x18];
              bVar142 = pbVar35[0x19];
              bVar119 = pbVar35[0x1a];
              bVar144 = pbVar35[0x1b];
              bVar122 = pbVar35[0x1c];
              bVar146 = pbVar35[0x1d];
              bVar125 = pbVar35[0x1e];
              bVar148 = pbVar35[0x1f];
              pbVar35 = pbVar35 + 0x20;
              uVar73 = uVar73 + 1;
              bVar150 = *pbVar39;
              bVar151 = pbVar39[2];
              pbVar36 = pbVar39 + 4;
              pbVar37 = pbVar39 + 6;
              bVar157 = pbVar39[8];
              bVar160 = pbVar39[10];
              bVar163 = pbVar39[0xc];
              bVar166 = pbVar39[0xe];
              pbVar38 = pbVar39 + 0x10;
              bVar169 = pbVar39[0x12];
              bVar172 = pbVar39[0x14];
              bVar175 = pbVar39[0x16];
              bVar178 = pbVar39[0x18];
              bVar181 = pbVar39[0x1a];
              bVar184 = pbVar39[0x1c];
              bVar187 = pbVar39[0x1e];
              pbVar39 = pbVar39 + 0x20;
              local_3c0 = CONCAT11(bVar87,bVar84);
              uStack_3b8 = CONCAT11(bVar108,*pbVar33);
              local_3b0 = CONCAT11(bVar128,*pbVar30);
              uStack_3a8 = CONCAT11(bVar137,*pbVar34);
              bVar84 = *pbVar40;
              bVar88 = pbVar40[2];
              bVar90 = pbVar40[4];
              bVar93 = pbVar40[6];
              bVar96 = pbVar40[8];
              bVar99 = pbVar40[10];
              bVar102 = pbVar40[0xc];
              bVar105 = pbVar40[0xe];
              pbVar33 = pbVar40 + 0x10;
              bVar109 = pbVar40[0x12];
              bVar111 = pbVar40[0x14];
              bVar114 = pbVar40[0x16];
              bVar117 = pbVar40[0x18];
              bVar120 = pbVar40[0x1a];
              bVar123 = pbVar40[0x1c];
              bVar126 = pbVar40[0x1e];
              pbVar40 = pbVar40 + 0x20;
              local_3a0 = CONCAT11(bVar88,bVar84);
              uVar28 = local_3a0;
              uStack_398 = CONCAT11(bVar109,*pbVar33);
              uVar29 = uStack_398;
              bVar84 = *pbVar75;
              pbVar33 = pbVar75 + 1;
              pbVar34 = pbVar75 + 2;
              pbVar30 = pbVar75 + 3;
              bVar91 = pbVar75[4];
              pbVar41 = pbVar75 + 5;
              bVar94 = pbVar75[6];
              pbVar42 = pbVar75 + 7;
              bVar97 = pbVar75[8];
              bVar130 = pbVar75[9];
              bVar100 = pbVar75[10];
              bVar132 = pbVar75[0xb];
              bVar103 = pbVar75[0xc];
              bVar134 = pbVar75[0xd];
              bVar106 = pbVar75[0xe];
              bVar136 = pbVar75[0xf];
              pbVar43 = pbVar75 + 0x10;
              pbVar44 = pbVar75 + 0x11;
              pbVar45 = pbVar75 + 0x12;
              pbVar46 = pbVar75 + 0x13;
              bVar112 = pbVar75[0x14];
              bVar139 = pbVar75[0x15];
              bVar115 = pbVar75[0x16];
              bVar141 = pbVar75[0x17];
              bVar118 = pbVar75[0x18];
              bVar143 = pbVar75[0x19];
              bVar121 = pbVar75[0x1a];
              bVar145 = pbVar75[0x1b];
              bVar124 = pbVar75[0x1c];
              bVar147 = pbVar75[0x1d];
              bVar127 = pbVar75[0x1e];
              bVar149 = pbVar75[0x1f];
              pbVar75 = pbVar75 + 0x20;
              local_380 = CONCAT11(*pbVar34,bVar84);
              uStack_378 = CONCAT11(*pbVar45,*pbVar43);
              local_370 = CONCAT11(*pbVar30,*pbVar33);
              uStack_368 = CONCAT11(*pbVar46,*pbVar44);
              local_360 = CONCAT11(bVar151,bVar150);
              uStack_358 = CONCAT11(bVar169,*pbVar38);
              bVar84 = *pbVar77;
              bVar190 = pbVar77[1];
              bVar150 = pbVar77[2];
              bVar193 = pbVar77[3];
              bVar153 = pbVar77[4];
              pbVar44 = pbVar77 + 5;
              bVar155 = pbVar77[6];
              pbVar38 = pbVar77 + 7;
              bVar158 = pbVar77[8];
              bVar195 = pbVar77[9];
              bVar161 = pbVar77[10];
              bVar197 = pbVar77[0xb];
              bVar164 = pbVar77[0xc];
              bVar199 = pbVar77[0xd];
              bVar167 = pbVar77[0xe];
              bVar201 = pbVar77[0xf];
              pbVar43 = pbVar77 + 0x10;
              pbVar33 = pbVar77 + 0x11;
              bVar170 = pbVar77[0x12];
              bVar204 = pbVar77[0x13];
              bVar173 = pbVar77[0x14];
              bVar206 = pbVar77[0x15];
              bVar176 = pbVar77[0x16];
              bVar208 = pbVar77[0x17];
              bVar179 = pbVar77[0x18];
              bVar210 = pbVar77[0x19];
              bVar182 = pbVar77[0x1a];
              bVar212 = pbVar77[0x1b];
              bVar185 = pbVar77[0x1c];
              bVar214 = pbVar77[0x1d];
              bVar188 = pbVar77[0x1e];
              bVar216 = pbVar77[0x1f];
              pbVar77 = pbVar77 + 0x20;
              uVar19 = CONCAT12(bVar87,local_3c0);
              uVar20 = CONCAT12(bVar108,uStack_3b8);
              local_3a0 = CONCAT11(bVar150,bVar84);
              uStack_398 = CONCAT11(bVar170,*pbVar43);
              uStack_388 = CONCAT11(bVar204,*pbVar33);
              uVar21 = CONCAT12(bVar128,local_3b0);
              uVar22 = CONCAT12(bVar137,uStack_3a8);
              bVar84 = *pbVar50;
              pbVar43 = pbVar50 + 1;
              bVar152 = pbVar50[2];
              bVar194 = pbVar50[3];
              bVar154 = pbVar50[4];
              pbVar47 = pbVar50 + 5;
              bVar156 = pbVar50[6];
              pbVar33 = pbVar50 + 7;
              bVar159 = pbVar50[8];
              bVar196 = pbVar50[9];
              bVar162 = pbVar50[10];
              bVar198 = pbVar50[0xb];
              bVar165 = pbVar50[0xc];
              bVar200 = pbVar50[0xd];
              bVar168 = pbVar50[0xe];
              bVar202 = pbVar50[0xf];
              pbVar48 = pbVar50 + 0x10;
              pbVar49 = pbVar50 + 0x11;
              bVar171 = pbVar50[0x12];
              bVar205 = pbVar50[0x13];
              bVar174 = pbVar50[0x14];
              bVar207 = pbVar50[0x15];
              bVar177 = pbVar50[0x16];
              bVar209 = pbVar50[0x17];
              bVar180 = pbVar50[0x18];
              bVar211 = pbVar50[0x19];
              bVar183 = pbVar50[0x1a];
              bVar213 = pbVar50[0x1b];
              bVar186 = pbVar50[0x1c];
              bVar215 = pbVar50[0x1d];
              bVar189 = pbVar50[0x1e];
              bVar217 = pbVar50[0x1f];
              pbVar50 = pbVar50 + 0x20;
              uVar15 = CONCAT12(*pbVar34,local_380) & 0xff00ff;
              uVar16 = CONCAT12(*pbVar45,uStack_378) & 0xff00ff;
              local_3c0 = CONCAT11(bVar152,bVar84);
              uStack_3b8 = CONCAT11(bVar171,*pbVar48);
              local_3b0 = CONCAT11(bVar194,*pbVar43);
              uStack_3a8 = CONCAT11(bVar205,*pbVar49);
              uVar17 = CONCAT12(*pbVar30,local_370) & 0xff00ff;
              uVar18 = (uint6)CONCAT14((char)(uVar16 >> 0x10),(uint)uVar16) & 0xffff0000ffff;
              uVar16 = CONCAT12(*pbVar46,uStack_368) & 0xff00ff;
              iVar14 = ((uint)*pbVar31 + (uint)*pbVar36) * iVar13 + (uint)*pbVar41 * iVar62 +
                       ((uint)*pbVar47 + (CONCAT12(*pbVar38,(ushort)*pbVar44) & 0xffff)) * iVar65;
              iVar218 = ((uint)*pbVar32 + (uint)*pbVar37) * iVar13 + (uint)*pbVar42 * iVar62 +
                        ((uint)*pbVar33 + (uint)*pbVar38) * iVar65;
              *piVar61 = (((uVar19 & 0xff00ff) & 0xffff) +
                         ((CONCAT12(bVar88,uVar28) & 0xff00ff) & 0xffff)) * iVar13 +
                         (uVar15 & 0xffff) * iVar62 +
                         (((CONCAT12(bVar152,local_3c0) & 0xff00ff) & 0xffff) +
                         ((CONCAT12(bVar150,local_3a0) & 0xff00ff) & 0xffff)) * iVar65;
              piVar61[1] = (((uVar21 & 0xff00ff) & 0xffff) +
                           ((CONCAT12(bVar151,local_360) & 0xff00ff) & 0xffff)) * iVar13 +
                           (uVar17 & 0xffff) * iVar62 +
                           (((CONCAT12(bVar194,local_3b0) & 0xff00ff) & 0xffff) +
                           (CONCAT12(bVar193,(ushort)bVar190) & 0xffff)) * iVar65;
              piVar61[2] = ((uint)bVar87 + (uint)bVar88) * iVar13 +
                           (uint)(byte)(uVar15 >> 0x10) * iVar62 +
                           ((uint)bVar152 + (uint)bVar150) * iVar65;
              piVar61[3] = ((uint)bVar128 + (uint)bVar151) * iVar13 +
                           (uint)(byte)(uVar17 >> 0x10) * iVar62 +
                           ((uint)bVar194 + (uint)bVar193) * iVar65;
              piVar61[4] = ((uint)bVar89 + (uint)bVar90) * iVar13 + (uint)bVar91 * iVar62 +
                           ((uint)bVar154 + (uint)bVar153) * iVar65;
              piVar61[5] = iVar14;
              piVar61[6] = ((uint)bVar92 + (uint)bVar93) * iVar13 + (uint)bVar94 * iVar62 +
                           ((uint)bVar156 + (uint)bVar155) * iVar65;
              piVar61[7] = (int)(CONCAT26((short)((uint)iVar218 >> 0x10),
                                          CONCAT24((short)iVar218,iVar14)) >> 0x20);
              piVar61[8] = ((CONCAT12(bVar98,(ushort)bVar95) & 0xffff) +
                           (CONCAT12(bVar99,(ushort)bVar96) & 0xffff)) * iVar13 +
                           (CONCAT12(bVar100,(ushort)bVar97) & 0xffff) * iVar62 +
                           ((CONCAT12(bVar162,(ushort)bVar159) & 0xffff) +
                           (CONCAT12(bVar161,(ushort)bVar158) & 0xffff)) * iVar65;
              piVar61[9] = ((CONCAT12(bVar131,(ushort)bVar129) & 0xffff) +
                           (CONCAT12(bVar160,(ushort)bVar157) & 0xffff)) * iVar13 +
                           (CONCAT12(bVar132,(ushort)bVar130) & 0xffff) * iVar62 +
                           ((CONCAT12(bVar198,(ushort)bVar196) & 0xffff) +
                           (CONCAT12(bVar197,(ushort)bVar195) & 0xffff)) * iVar65;
              piVar61[10] = ((uint)bVar98 + (uint)bVar99) * iVar13 + (uint)bVar100 * iVar62 +
                            ((uint)bVar162 + (uint)bVar161) * iVar65;
              piVar61[0xb] = ((uint)bVar131 + (uint)bVar160) * iVar13 + (uint)bVar132 * iVar62 +
                             ((uint)bVar198 + (uint)bVar197) * iVar65;
              piVar61[0xc] = ((uint)bVar101 + (uint)bVar102) * iVar13 + (uint)bVar103 * iVar62 +
                             ((uint)bVar165 + (uint)bVar164) * iVar65;
              piVar61[0xd] = ((uint)bVar133 + (uint)bVar163) * iVar13 + (uint)bVar134 * iVar62 +
                             ((uint)bVar200 + (uint)bVar199) * iVar65;
              piVar61[0xe] = ((uint)bVar104 + (uint)bVar105) * iVar13 + (uint)bVar106 * iVar62 +
                             ((uint)bVar168 + (uint)bVar167) * iVar65;
              piVar61[0xf] = ((uint)bVar135 + (uint)bVar166) * iVar13 + (uint)bVar136 * iVar62 +
                             ((uint)bVar202 + (uint)bVar201) * iVar65;
              piVar61[0x10] =
                   (((uVar20 & 0xff00ff) & 0xffff) +
                   ((CONCAT12(bVar109,uVar29) & 0xff00ff) & 0xffff)) * iVar13 + (int)uVar18 * iVar62
                   + (((CONCAT12(bVar171,uStack_3b8) & 0xff00ff) & 0xffff) +
                     ((CONCAT12(bVar170,uStack_398) & 0xff00ff) & 0xffff)) * iVar65;
              piVar61[0x11] =
                   (((uVar22 & 0xff00ff) & 0xffff) +
                   ((CONCAT12(bVar169,uStack_358) & 0xff00ff) & 0xffff)) * iVar13 +
                   (uVar16 & 0xffff) * iVar62 +
                   (((CONCAT12(bVar205,uStack_3a8) & 0xff00ff) & 0xffff) +
                   ((CONCAT12(bVar204,uStack_388) & 0xff00ff) & 0xffff)) * iVar65;
              piVar61[0x12] =
                   ((uint)bVar108 + (uint)bVar109) * iVar13 +
                   (uint)(ushort)(uVar18 >> 0x20) * iVar62 +
                   ((uint)bVar171 + (uint)bVar170) * iVar65;
              piVar61[0x13] =
                   ((uint)bVar137 + (uint)bVar169) * iVar13 + (uint)(byte)(uVar16 >> 0x10) * iVar62
                   + ((uint)bVar205 + (uint)bVar204) * iVar65;
              piVar61[0x14] =
                   ((uint)bVar110 + (uint)bVar111) * iVar13 + (uint)bVar112 * iVar62 +
                   ((uint)bVar174 + (uint)bVar173) * iVar65;
              piVar61[0x15] =
                   ((uint)bVar138 + (uint)bVar172) * iVar13 + (uint)bVar139 * iVar62 +
                   ((uint)bVar207 + (uint)bVar206) * iVar65;
              piVar61[0x16] =
                   ((uint)bVar113 + (uint)bVar114) * iVar13 + (uint)bVar115 * iVar62 +
                   ((uint)bVar177 + (uint)bVar176) * iVar65;
              piVar61[0x17] =
                   ((uint)bVar140 + (uint)bVar175) * iVar13 + (uint)bVar141 * iVar62 +
                   ((uint)bVar209 + (uint)bVar208) * iVar65;
              piVar61[0x18] =
                   ((CONCAT12(bVar119,(ushort)bVar116) & 0xffff) +
                   (CONCAT12(bVar120,(ushort)bVar117) & 0xffff)) * iVar13 +
                   (CONCAT12(bVar121,(ushort)bVar118) & 0xffff) * iVar62 +
                   ((CONCAT12(bVar183,(ushort)bVar180) & 0xffff) +
                   (CONCAT12(bVar182,(ushort)bVar179) & 0xffff)) * iVar65;
              piVar61[0x19] =
                   ((CONCAT12(bVar144,(ushort)bVar142) & 0xffff) +
                   (CONCAT12(bVar181,(ushort)bVar178) & 0xffff)) * iVar13 +
                   (CONCAT12(bVar145,(ushort)bVar143) & 0xffff) * iVar62 +
                   ((CONCAT12(bVar213,(ushort)bVar211) & 0xffff) +
                   (CONCAT12(bVar212,(ushort)bVar210) & 0xffff)) * iVar65;
              piVar61[0x1a] =
                   ((uint)bVar119 + (uint)bVar120) * iVar13 + (uint)bVar121 * iVar62 +
                   ((uint)bVar183 + (uint)bVar182) * iVar65;
              piVar61[0x1b] =
                   ((uint)bVar144 + (uint)bVar181) * iVar13 + (uint)bVar145 * iVar62 +
                   ((uint)bVar213 + (uint)bVar212) * iVar65;
              piVar61[0x1c] =
                   ((uint)bVar122 + (uint)bVar123) * iVar13 + (uint)bVar124 * iVar62 +
                   ((uint)bVar186 + (uint)bVar185) * iVar65;
              piVar61[0x1d] =
                   ((uint)bVar146 + (uint)bVar184) * iVar13 + (uint)bVar147 * iVar62 +
                   ((uint)bVar215 + (uint)bVar214) * iVar65;
              piVar61[0x1e] =
                   ((uint)bVar125 + (uint)bVar126) * iVar13 + (uint)bVar127 * iVar62 +
                   ((uint)bVar189 + (uint)bVar188) * iVar65;
              piVar61[0x1f] =
                   ((uint)bVar148 + (uint)bVar187) * iVar13 + (uint)bVar149 * iVar62 +
                   ((uint)bVar217 + (uint)bVar216) * iVar65;
              piVar61 = piVar61 + 0x20;
            } while (uVar73 < uVar8);
            pbVar75 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
            uVar63 = uVar60 + uVar8 * 0x20;
            if (uVar12 == uVar8 * 0x10) goto LAB_001cb6a8;
          }
          pbVar50 = pbVar75 + 1;
          piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
          do {
            bVar88 = pbVar50[lVar68];
            pbVar77 = pbVar75 + lVar68;
            uVar63 = uVar63 + 2;
            bVar89 = pbVar75[1 - param_5];
            pbVar39 = pbVar75 + lVar228;
            bVar84 = *pbVar50;
            bVar87 = *pbVar75;
            bVar90 = pbVar50[lVar227];
            bVar91 = pbVar50[lVar226];
            pbVar50 = pbVar50 + 2;
            pbVar40 = pbVar75 + lVar227;
            pbVar35 = pbVar75 + lVar226;
            pbVar75 = pbVar75 + 2;
            *piVar61 = ((uint)*pbVar39 + (uint)*pbVar77) * iVar13 + (uint)bVar87 * iVar62 +
                       ((uint)*pbVar40 + (uint)*pbVar35) * iVar65;
            piVar61[1] = ((uint)bVar89 + (uint)bVar88) * iVar13 + (uint)bVar84 * iVar62 +
                         ((uint)bVar90 + (uint)bVar91) * iVar65;
            piVar61 = piVar61 + 2;
          } while ((int)uVar63 < param_4 + -1);
        }
LAB_001cb6a8:
        uVar60 = uVar60 + 2 + uVar230 * 2;
        pbVar71 = pbVar71 + ((ulong)uVar230 + 1) * 2;
        goto LAB_001c97b4;
      }
      iVar13 = param_4 + -1;
      if (iVar13 <= (int)uVar60) goto LAB_001c97b4;
      uVar230 = (param_4 + -2) - uVar60;
      piVar61 = (int *)(param_3 + lVar68 * 4);
      uVar73 = uVar230 >> 1;
      lVar226 = (long)(param_5 << 1);
      uVar12 = uVar73 + 1;
      lVar69 = (ulong)uVar12 * 2;
      lVar79 = (long)(param_5 * -2);
      pbVar50 = (byte *)(param_2 + lVar70 + lVar226);
      pbVar77 = (byte *)(param_3 + (lVar68 + lVar69) * 4);
      pbVar75 = (byte *)(param_2 + lVar70 + lVar79);
      if ((uVar12 < 8 ||
           (pbVar50 < pbVar77 && piVar61 < (int *)(param_2 + lVar70 + lVar226 + lVar69) ||
           pbVar75 < pbVar77 && piVar61 < (int *)(param_2 + lVar69 + lVar70 + lVar79))) ||
         (pbVar71 < pbVar77 && piVar61 < (int *)(param_2 + lVar70 + lVar69))) {
        pbVar50 = pbVar71 + 1;
        pbVar77 = pbVar71;
        do {
          bVar84 = *pbVar50;
          bVar87 = *pbVar77;
          pbVar75 = pbVar50 + lVar79;
          bVar88 = pbVar77[lVar79];
          pbVar39 = pbVar50 + lVar226;
          bVar89 = pbVar77[lVar226];
          pbVar50 = pbVar50 + 2;
          piVar61[1] = (uint)*pbVar75 + (uint)bVar84 * -2 + (uint)*pbVar39;
          *piVar61 = (uint)bVar88 + (uint)bVar87 * -2 + (uint)bVar89;
          pbVar77 = pbVar77 + 2;
          piVar61 = piVar61 + 2;
        } while (pbVar50 != pbVar71 + (ulong)uVar73 * 2 + 3);
      }
      else {
        uVar8 = (uVar73 - 7 >> 3) + 1;
        pbVar77 = pbVar71;
        uVar63 = uVar60;
        if (0xd < uVar230) {
          uVar230 = 0;
          do {
            uVar83 = *(undefined8 *)(pbVar75 + 8);
            uVar82 = *(undefined8 *)pbVar75;
            uVar203 = *(undefined8 *)(pbVar77 + 8);
            uVar192 = *(undefined8 *)pbVar77;
            uVar107 = *(undefined8 *)(pbVar50 + 8);
            uVar86 = *(undefined8 *)pbVar50;
            uVar230 = uVar230 + 1;
            uVar15 = CONCAT12((char)((ulong)uVar82 >> 8),(short)uVar82) & 0xff00ff;
            bVar84 = (byte)((ulong)uVar82 >> 0x28);
            uVar16 = CONCAT12((char)((ulong)uVar192 >> 8),(short)uVar192) & 0xff00ff;
            uVar17 = CONCAT12((char)((ulong)uVar86 >> 8),(short)uVar86) & 0xff00ff;
            bVar87 = (byte)((ulong)uVar86 >> 0x28);
            uVar19 = CONCAT12((char)((ulong)uVar83 >> 8),(short)uVar83) & 0xff00ff;
            bVar88 = (byte)((ulong)uVar83 >> 0x28);
            uVar20 = CONCAT12((char)((ulong)uVar203 >> 8),(short)uVar203) & 0xff00ff;
            uVar21 = CONCAT12((char)((ulong)uVar107 >> 8),(short)uVar107) & 0xff00ff;
            bVar89 = (byte)((ulong)uVar107 >> 0x28);
            *(ulong *)(piVar61 + 2) =
                 CONCAT44((uint)(byte)((ulong)uVar82 >> 0x18) +
                          (short)(ushort)(byte)((ulong)uVar192 >> 0x18) * -2 +
                          (uint)(byte)((ulong)uVar86 >> 0x18),
                          (uint)(byte)((ulong)uVar82 >> 0x10) +
                          (short)(ushort)(byte)((ulong)uVar192 >> 0x10) * -2 +
                          (uint)(byte)((ulong)uVar86 >> 0x10));
            *(ulong *)piVar61 =
                 CONCAT44((uint)(byte)(uVar15 >> 0x10) + (short)(ushort)(byte)(uVar16 >> 0x10) * -2
                          + (uint)(byte)(uVar17 >> 0x10),
                          (uVar15 & 0xffff) + (short)uVar16 * -2 + (uVar17 & 0xffff));
            *(ulong *)(piVar61 + 6) =
                 CONCAT44((uint)(byte)((ulong)uVar82 >> 0x38) +
                          (short)(ushort)(byte)((ulong)uVar192 >> 0x38) * -2 +
                          (uint)(byte)((ulong)uVar86 >> 0x38),
                          (uint)(byte)((ulong)uVar82 >> 0x30) +
                          (short)(ushort)(byte)((ulong)uVar192 >> 0x30) * -2 +
                          (uint)(byte)((ulong)uVar86 >> 0x30));
            *(ulong *)(piVar61 + 4) =
                 CONCAT44((uint)bVar84 + (short)(ushort)(byte)((ulong)uVar192 >> 0x28) * -2 +
                          (uint)bVar87,
                          (CONCAT12(bVar84,(ushort)(byte)((ulong)uVar82 >> 0x20)) & 0xffff) +
                          (short)(ushort)(byte)((ulong)uVar192 >> 0x20) * -2 +
                          (CONCAT12(bVar87,(ushort)(byte)((ulong)uVar86 >> 0x20)) & 0xffff));
            *(ulong *)(piVar61 + 10) =
                 CONCAT44((uint)(byte)((ulong)uVar83 >> 0x18) +
                          (short)(ushort)(byte)((ulong)uVar203 >> 0x18) * -2 +
                          (uint)(byte)((ulong)uVar107 >> 0x18),
                          (uint)(byte)((ulong)uVar83 >> 0x10) +
                          (short)(ushort)(byte)((ulong)uVar203 >> 0x10) * -2 +
                          (uint)(byte)((ulong)uVar107 >> 0x10));
            *(ulong *)(piVar61 + 8) =
                 CONCAT44((uint)(byte)(uVar19 >> 0x10) + (short)(ushort)(byte)(uVar20 >> 0x10) * -2
                          + (uint)(byte)(uVar21 >> 0x10),
                          (uVar19 & 0xffff) + (short)uVar20 * -2 + (uVar21 & 0xffff));
            *(ulong *)(piVar61 + 0xe) =
                 CONCAT44((uint)(byte)((ulong)uVar83 >> 0x38) +
                          (short)(ushort)(byte)((ulong)uVar203 >> 0x38) * -2 +
                          (uint)(byte)((ulong)uVar107 >> 0x38),
                          (uint)(byte)((ulong)uVar83 >> 0x30) +
                          (short)(ushort)(byte)((ulong)uVar203 >> 0x30) * -2 +
                          (uint)(byte)((ulong)uVar107 >> 0x30));
            *(ulong *)(piVar61 + 0xc) =
                 CONCAT44((uint)bVar88 + (short)(ushort)(byte)((ulong)uVar203 >> 0x28) * -2 +
                          (uint)bVar89,
                          (CONCAT12(bVar88,(ushort)(byte)((ulong)uVar83 >> 0x20)) & 0xffff) +
                          (short)(ushort)(byte)((ulong)uVar203 >> 0x20) * -2 +
                          (CONCAT12(bVar89,(ushort)(byte)((ulong)uVar107 >> 0x20)) & 0xffff));
            piVar61 = piVar61 + 0x10;
            pbVar50 = pbVar50 + 0x10;
            pbVar75 = pbVar75 + 0x10;
            pbVar77 = pbVar77 + 0x10;
          } while (uVar230 < uVar8);
          pbVar77 = pbVar71 + (ulong)(uVar8 * 8) * 2;
          uVar63 = uVar60 + uVar8 * 0x10;
          if (uVar12 == uVar8 * 8) goto LAB_001cc1ac;
        }
        uVar78 = -(ulong)(uVar63 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar63 << 2;
        bVar84 = pbVar77[1];
        uVar12 = uVar63 + 2;
        bVar87 = pbVar77[lVar79 + 1];
        bVar88 = pbVar77[lVar226 + 1];
        *(uint *)(param_3 + uVar78) =
             (uint)pbVar77[lVar79] + (uint)*pbVar77 * -2 + (uint)pbVar77[lVar226];
        *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
        if ((int)uVar12 < iVar13) {
          uVar78 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
          bVar84 = pbVar77[3];
          uVar12 = uVar63 + 4;
          bVar87 = pbVar77[lVar79 + 3];
          bVar88 = pbVar77[lVar226 + 3];
          *(uint *)(param_3 + uVar78) =
               (uint)pbVar77[lVar79 + 2] + (uint)pbVar77[2] * -2 + (uint)pbVar77[lVar226 + 2];
          *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
          if ((int)uVar12 < iVar13) {
            uVar78 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
            bVar84 = pbVar77[5];
            uVar12 = uVar63 + 6;
            bVar87 = pbVar77[lVar79 + 5];
            bVar88 = pbVar77[lVar226 + 5];
            *(uint *)(param_3 + uVar78) =
                 (uint)pbVar77[lVar79 + 4] + (uint)pbVar77[4] * -2 + (uint)pbVar77[lVar226 + 4];
            *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
            if ((int)uVar12 < iVar13) {
              uVar78 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
              bVar84 = pbVar77[7];
              uVar12 = uVar63 + 8;
              bVar87 = pbVar77[lVar79 + 7];
              bVar88 = pbVar77[lVar226 + 7];
              *(uint *)(param_3 + uVar78) =
                   (uint)pbVar77[lVar79 + 6] + (uint)pbVar77[6] * -2 + (uint)pbVar77[lVar226 + 6];
              *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
              if ((int)uVar12 < iVar13) {
                uVar78 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
                bVar84 = pbVar77[9];
                uVar12 = uVar63 + 10;
                bVar87 = pbVar77[lVar79 + 9];
                bVar88 = pbVar77[lVar226 + 9];
                *(uint *)(param_3 + uVar78) =
                     (uint)pbVar77[lVar79 + 8] + (uint)pbVar77[8] * -2 + (uint)pbVar77[lVar226 + 8];
                *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
                if ((int)uVar12 < iVar13) {
                  uVar78 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
                  bVar84 = pbVar77[0xb];
                  uVar63 = uVar63 + 0xc;
                  bVar87 = pbVar77[lVar79 + 0xb];
                  bVar88 = pbVar77[lVar226 + 0xb];
                  *(uint *)(param_3 + uVar78) =
                       (uint)pbVar77[lVar79 + 10] + (uint)pbVar77[10] * -2 +
                       (uint)pbVar77[lVar226 + 10];
                  *(uint *)(param_3 + uVar78 + 4) = (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
                  if ((int)uVar63 < iVar13) {
                    uVar78 = -(ulong)(uVar63 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar63 << 2;
                    bVar84 = pbVar77[0xd];
                    bVar87 = pbVar77[lVar79 + 0xd];
                    bVar88 = pbVar77[lVar226 + 0xd];
                    *(uint *)(param_3 + uVar78) =
                         (uint)pbVar77[lVar79 + 0xc] + (uint)pbVar77[0xc] * -2 +
                         (uint)pbVar77[lVar226 + 0xc];
                    *(uint *)(param_3 + uVar78 + 4) =
                         (uint)bVar87 + (uint)bVar84 * -2 + (uint)bVar88;
                  }
                }
              }
            }
          }
        }
      }
LAB_001cc1ac:
      uVar60 = uVar60 + 2 + uVar73 * 2;
      pbVar71 = pbVar71 + ((ulong)uVar73 + 1) * 2;
      goto LAB_001c97b4;
    }
    iVar13 = *(int *)(lVar72 + lVar74);
    if (iVar13 == 2) {
      iVar65 = piVar10[1];
      if (iVar65 == 1) {
        if (param_4 + -1 <= (int)uVar60) goto LAB_001c97b4;
        uVar230 = (param_4 + -2) - uVar60;
        uVar73 = uVar230 >> 1;
        lVar226 = (long)-param_5;
        uVar12 = uVar73 + 1;
        piVar61 = (int *)(param_3 + lVar68 * 4);
        lVar79 = (ulong)uVar12 * 2;
        lVar69 = lVar70 + lVar226 + 1;
        pbVar50 = (byte *)(param_2 + lVar69);
        lVar227 = (long)param_5;
        pbVar77 = (byte *)(param_3 + (lVar68 + lVar79) * 4);
        pbVar75 = (byte *)(param_2 + lVar70 + lVar226);
        pbVar39 = (byte *)(param_2 + lVar70 + lVar227);
        if (((uVar12 < 0x10 ||
             (pbVar50 < pbVar77 && piVar61 < (int *)(param_2 + lVar69 + lVar79) ||
             pbVar75 < pbVar77 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar226))) ||
             pbVar71 < pbVar77 && piVar61 < (int *)(param_2 + lVar70 + lVar79)) ||
           (pbVar39 < pbVar77 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar227))) {
          uVar78 = (ulong)uVar73;
          pbVar50 = pbVar71;
          do {
            bVar84 = pbVar50[1];
            bVar87 = *pbVar50;
            bVar89 = pbVar50[1 - param_5];
            pbVar77 = pbVar50 + lVar226;
            pbVar75 = pbVar50 + lVar227;
            bVar88 = pbVar50[lVar227 + 1];
            pbVar50 = pbVar50 + 2;
            *piVar61 = (uint)*pbVar77 + (uint)bVar87 * 2 + (uint)*pbVar75;
            piVar61[1] = (uint)bVar89 + (uint)bVar84 * 2 + (uint)bVar88;
            piVar61 = piVar61 + 2;
          } while (pbVar50 != pbVar71 + (uVar78 + 1) * 2);
        }
        else {
          uVar8 = (uVar73 - 0x10 >> 4) + 1;
          pbVar77 = pbVar71;
          uVar63 = uVar60;
          if (0x1f < uVar230) {
            uVar230 = 0;
            do {
              bVar84 = *pbVar75;
              pbVar40 = pbVar75 + 2;
              bVar87 = pbVar75[4];
              bVar90 = pbVar75[6];
              bVar93 = pbVar75[8];
              bVar96 = pbVar75[10];
              bVar99 = pbVar75[0xc];
              bVar102 = pbVar75[0xe];
              pbVar35 = pbVar75 + 0x10;
              pbVar33 = pbVar75 + 0x12;
              bVar105 = pbVar75[0x14];
              bVar109 = pbVar75[0x16];
              bVar112 = pbVar75[0x18];
              bVar115 = pbVar75[0x1a];
              bVar118 = pbVar75[0x1c];
              bVar121 = pbVar75[0x1e];
              pbVar75 = pbVar75 + 0x20;
              bVar148 = *pbVar50;
              pbVar34 = pbVar50 + 2;
              bVar149 = pbVar50[4];
              bVar150 = pbVar50[6];
              bVar151 = pbVar50[8];
              bVar152 = pbVar50[10];
              bVar153 = pbVar50[0xc];
              bVar154 = pbVar50[0xe];
              pbVar30 = pbVar50 + 0x10;
              pbVar31 = pbVar50 + 0x12;
              bVar155 = pbVar50[0x14];
              bVar156 = pbVar50[0x16];
              bVar157 = pbVar50[0x18];
              bVar158 = pbVar50[0x1a];
              bVar159 = pbVar50[0x1c];
              bVar160 = pbVar50[0x1e];
              pbVar50 = pbVar50 + 0x20;
              uVar230 = uVar230 + 1;
              local_380 = CONCAT11(*pbVar40,bVar84);
              uVar28 = local_380;
              uStack_378 = CONCAT11(*pbVar33,*pbVar35);
              uVar29 = uStack_378;
              bVar84 = *pbVar77;
              pbVar38 = pbVar77 + 1;
              pbVar37 = pbVar77 + 2;
              pbVar36 = pbVar77 + 3;
              bVar88 = pbVar77[4];
              bVar124 = pbVar77[5];
              bVar91 = pbVar77[6];
              bVar126 = pbVar77[7];
              bVar94 = pbVar77[8];
              bVar128 = pbVar77[9];
              bVar97 = pbVar77[10];
              bVar130 = pbVar77[0xb];
              bVar100 = pbVar77[0xc];
              bVar132 = pbVar77[0xd];
              bVar103 = pbVar77[0xe];
              bVar134 = pbVar77[0xf];
              pbVar32 = pbVar77 + 0x10;
              pbVar35 = pbVar77 + 0x11;
              pbVar42 = pbVar77 + 0x12;
              pbVar41 = pbVar77 + 0x13;
              bVar106 = pbVar77[0x14];
              bVar136 = pbVar77[0x15];
              bVar110 = pbVar77[0x16];
              bVar138 = pbVar77[0x17];
              bVar113 = pbVar77[0x18];
              bVar140 = pbVar77[0x19];
              bVar116 = pbVar77[0x1a];
              bVar142 = pbVar77[0x1b];
              bVar119 = pbVar77[0x1c];
              bVar144 = pbVar77[0x1d];
              bVar122 = pbVar77[0x1e];
              bVar146 = pbVar77[0x1f];
              pbVar77 = pbVar77 + 0x20;
              local_3a0 = CONCAT11(*pbVar37,bVar84);
              uStack_398 = CONCAT11(*pbVar42,*pbVar32);
              local_390 = CONCAT11(*pbVar36,*pbVar38);
              uStack_388 = CONCAT11(*pbVar41,*pbVar35);
              bVar84 = *pbVar39;
              pbVar35 = pbVar39 + 1;
              pbVar46 = pbVar39 + 2;
              pbVar45 = pbVar39 + 3;
              bVar89 = pbVar39[4];
              bVar125 = pbVar39[5];
              bVar92 = pbVar39[6];
              bVar127 = pbVar39[7];
              bVar95 = pbVar39[8];
              bVar129 = pbVar39[9];
              bVar98 = pbVar39[10];
              bVar131 = pbVar39[0xb];
              bVar101 = pbVar39[0xc];
              bVar133 = pbVar39[0xd];
              bVar104 = pbVar39[0xe];
              bVar135 = pbVar39[0xf];
              pbVar38 = pbVar39 + 0x10;
              pbVar32 = pbVar39 + 0x11;
              pbVar44 = pbVar39 + 0x12;
              pbVar43 = pbVar39 + 0x13;
              bVar108 = pbVar39[0x14];
              bVar137 = pbVar39[0x15];
              bVar111 = pbVar39[0x16];
              bVar139 = pbVar39[0x17];
              bVar114 = pbVar39[0x18];
              bVar141 = pbVar39[0x19];
              bVar117 = pbVar39[0x1a];
              bVar143 = pbVar39[0x1b];
              bVar120 = pbVar39[0x1c];
              bVar145 = pbVar39[0x1d];
              bVar123 = pbVar39[0x1e];
              bVar147 = pbVar39[0x1f];
              pbVar39 = pbVar39 + 0x20;
              local_3c0 = CONCAT11(*pbVar46,bVar84);
              uStack_3b8 = CONCAT11(*pbVar44,*pbVar38);
              local_3b0 = CONCAT11(*pbVar45,*pbVar35);
              uStack_3a8 = CONCAT11(*pbVar43,*pbVar32);
              local_380 = CONCAT11(*pbVar34,bVar148);
              uStack_378 = CONCAT11(*pbVar31,*pbVar30);
              uVar15 = CONCAT12(*pbVar40,uVar28) & 0xff00ff;
              uVar16 = CONCAT12(*pbVar33,uVar29) & 0xff00ff;
              uVar17 = CONCAT12(*pbVar37,local_3a0) & 0xff00ff;
              uVar19 = CONCAT12(*pbVar36,local_390) & 0xff00ff;
              uVar20 = CONCAT12(*pbVar46,local_3c0) & 0xff00ff;
              uVar21 = CONCAT12(*pbVar34,local_380) & 0xff00ff;
              uVar22 = CONCAT12(*pbVar45,local_3b0) & 0xff00ff;
              uVar23 = CONCAT12(*pbVar42,uStack_398) & 0xff00ff;
              uVar24 = CONCAT12(*pbVar44,uStack_3b8) & 0xff00ff;
              uVar25 = CONCAT12(*pbVar31,uStack_378) & 0xff00ff;
              uVar26 = CONCAT12(*pbVar41,uStack_388) & 0xff00ff;
              uVar27 = CONCAT12(*pbVar43,uStack_3a8) & 0xff00ff;
              *piVar61 = (uVar15 & 0xffff) + (short)uVar17 * 2 + (uVar20 & 0xffff);
              piVar61[1] = (uVar21 & 0xffff) + (short)uVar19 * 2 + (uVar22 & 0xffff);
              piVar61[2] = (uint)(byte)(uVar15 >> 0x10) + (short)(ushort)(byte)(uVar17 >> 0x10) * 2
                           + (uint)(byte)(uVar20 >> 0x10);
              piVar61[3] = (uint)(byte)(uVar21 >> 0x10) + (short)(ushort)(byte)(uVar19 >> 0x10) * 2
                           + (uint)(byte)(uVar22 >> 0x10);
              piVar61[4] = (uint)bVar87 + (short)(ushort)bVar88 * 2 + (uint)bVar89;
              piVar61[5] = (uint)bVar149 + (short)(ushort)bVar124 * 2 + (uint)bVar125;
              piVar61[6] = (uint)bVar90 + (short)(ushort)bVar91 * 2 + (uint)bVar92;
              piVar61[7] = (uint)bVar150 + (short)(ushort)bVar126 * 2 + (uint)bVar127;
              piVar61[8] = (CONCAT12(bVar96,(ushort)bVar93) & 0xffff) + (short)(ushort)bVar94 * 2 +
                           (CONCAT12(bVar98,(ushort)bVar95) & 0xffff);
              piVar61[9] = (CONCAT12(bVar152,(ushort)bVar151) & 0xffff) + (short)(ushort)bVar128 * 2
                           + (CONCAT12(bVar131,(ushort)bVar129) & 0xffff);
              piVar61[10] = (uint)bVar96 + (short)(ushort)bVar97 * 2 + (uint)bVar98;
              piVar61[0xb] = (uint)bVar152 + (short)(ushort)bVar130 * 2 + (uint)bVar131;
              piVar61[0xc] = (uint)bVar99 + (short)(ushort)bVar100 * 2 + (uint)bVar101;
              piVar61[0xd] = (uint)bVar153 + (short)(ushort)bVar132 * 2 + (uint)bVar133;
              piVar61[0xe] = (uint)bVar102 + (short)(ushort)bVar103 * 2 + (uint)bVar104;
              piVar61[0xf] = (uint)bVar154 + (short)(ushort)bVar134 * 2 + (uint)bVar135;
              piVar61[0x10] = (uVar16 & 0xffff) + (short)uVar23 * 2 + (uVar24 & 0xffff);
              piVar61[0x11] = (uVar25 & 0xffff) + (short)uVar26 * 2 + (uVar27 & 0xffff);
              piVar61[0x12] =
                   (uint)(byte)(uVar16 >> 0x10) + (short)(ushort)(byte)(uVar23 >> 0x10) * 2 +
                   (uint)(byte)(uVar24 >> 0x10);
              piVar61[0x13] =
                   (uint)(byte)(uVar25 >> 0x10) + (short)(ushort)(byte)(uVar26 >> 0x10) * 2 +
                   (uint)(byte)(uVar27 >> 0x10);
              piVar61[0x14] = (uint)bVar105 + (short)(ushort)bVar106 * 2 + (uint)bVar108;
              piVar61[0x15] = (uint)bVar155 + (short)(ushort)bVar136 * 2 + (uint)bVar137;
              piVar61[0x16] = (uint)bVar109 + (short)(ushort)bVar110 * 2 + (uint)bVar111;
              piVar61[0x17] = (uint)bVar156 + (short)(ushort)bVar138 * 2 + (uint)bVar139;
              piVar61[0x18] =
                   (CONCAT12(bVar115,(ushort)bVar112) & 0xffff) + (short)(ushort)bVar113 * 2 +
                   (CONCAT12(bVar117,(ushort)bVar114) & 0xffff);
              piVar61[0x19] =
                   (CONCAT12(bVar158,(ushort)bVar157) & 0xffff) + (short)(ushort)bVar140 * 2 +
                   (CONCAT12(bVar143,(ushort)bVar141) & 0xffff);
              piVar61[0x1a] = (uint)bVar115 + (short)(ushort)bVar116 * 2 + (uint)bVar117;
              piVar61[0x1b] = (uint)bVar158 + (short)(ushort)bVar142 * 2 + (uint)bVar143;
              piVar61[0x1c] = (uint)bVar118 + (short)(ushort)bVar119 * 2 + (uint)bVar120;
              piVar61[0x1d] = (uint)bVar159 + (short)(ushort)bVar144 * 2 + (uint)bVar145;
              piVar61[0x1e] = (uint)bVar121 + (short)(ushort)bVar122 * 2 + (uint)bVar123;
              piVar61[0x1f] = (uint)bVar160 + (short)(ushort)bVar146 * 2 + (uint)bVar147;
              piVar61 = piVar61 + 0x20;
            } while (uVar230 < uVar8);
            pbVar77 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
            uVar63 = uVar60 + uVar8 * 0x20;
            if (uVar12 == uVar8 * 0x10) goto LAB_001cc578;
          }
          piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
          do {
            bVar84 = pbVar77[1];
            bVar88 = pbVar77[1 - param_5];
            uVar63 = uVar63 + 2;
            bVar87 = pbVar77[lVar227 + 1];
            *piVar61 = (uint)pbVar77[lVar226] + (uint)*pbVar77 * 2 + (uint)pbVar77[lVar227];
            piVar61[1] = (uint)bVar88 + (uint)bVar84 * 2 + (uint)bVar87;
            pbVar77 = pbVar77 + 2;
            piVar61 = piVar61 + 2;
          } while ((int)uVar63 < param_4 + -1);
LAB_001cc578:
          uVar78 = (ulong)uVar73;
        }
LAB_001cc57c:
        uVar60 = uVar60 + 2 + uVar73 * 2;
        pbVar71 = pbVar71 + (uVar78 + 1) * 2;
        goto LAB_001c97b4;
      }
    }
    else if (iVar13 == -2) {
      iVar65 = piVar10[1];
      if (iVar65 == 1) {
        if (param_4 + -1 <= (int)uVar60) goto LAB_001c97b4;
        uVar230 = (param_4 + -2) - uVar60;
        uVar73 = uVar230 >> 1;
        lVar226 = (long)-param_5;
        uVar12 = uVar73 + 1;
        piVar61 = (int *)(param_3 + lVar68 * 4);
        lVar79 = (ulong)uVar12 * 2;
        lVar69 = lVar70 + lVar226 + 1;
        pbVar50 = (byte *)(param_2 + lVar69);
        lVar227 = (long)param_5;
        pbVar77 = (byte *)(param_3 + (lVar68 + lVar79) * 4);
        pbVar75 = (byte *)(param_2 + lVar70 + lVar226);
        pbVar39 = (byte *)(param_2 + lVar70 + lVar227);
        if (((0xf < uVar12 &&
             ((pbVar77 <= pbVar50 || (int *)(param_2 + lVar69 + lVar79) <= piVar61) &&
             (pbVar77 <= pbVar75 || (int *)(param_2 + lVar79 + lVar70 + lVar226) <= piVar61))) &&
             (pbVar77 <= pbVar71 || (int *)(param_2 + lVar70 + lVar79) <= piVar61)) &&
           (pbVar77 <= pbVar39 || (int *)(param_2 + lVar79 + lVar70 + lVar227) <= piVar61)) {
          uVar8 = (uVar73 - 0x10 >> 4) + 1;
          pbVar77 = pbVar71;
          uVar63 = uVar60;
          if (0x1f < uVar230) {
            uVar230 = 0;
            do {
              bVar84 = *pbVar75;
              pbVar33 = pbVar75 + 2;
              bVar87 = pbVar75[4];
              bVar90 = pbVar75[6];
              bVar93 = pbVar75[8];
              bVar96 = pbVar75[10];
              bVar99 = pbVar75[0xc];
              bVar102 = pbVar75[0xe];
              pbVar35 = pbVar75 + 0x10;
              pbVar40 = pbVar75 + 0x12;
              bVar105 = pbVar75[0x14];
              bVar109 = pbVar75[0x16];
              bVar112 = pbVar75[0x18];
              bVar115 = pbVar75[0x1a];
              bVar118 = pbVar75[0x1c];
              bVar121 = pbVar75[0x1e];
              pbVar75 = pbVar75 + 0x20;
              bVar148 = *pbVar50;
              pbVar31 = pbVar50 + 2;
              bVar149 = pbVar50[4];
              bVar150 = pbVar50[6];
              bVar151 = pbVar50[8];
              bVar152 = pbVar50[10];
              bVar153 = pbVar50[0xc];
              bVar154 = pbVar50[0xe];
              pbVar30 = pbVar50 + 0x10;
              pbVar34 = pbVar50 + 0x12;
              bVar155 = pbVar50[0x14];
              bVar156 = pbVar50[0x16];
              bVar157 = pbVar50[0x18];
              bVar158 = pbVar50[0x1a];
              bVar159 = pbVar50[0x1c];
              bVar160 = pbVar50[0x1e];
              pbVar50 = pbVar50 + 0x20;
              uVar230 = uVar230 + 1;
              local_380 = CONCAT11(*pbVar33,bVar84);
              uVar28 = local_380;
              uStack_378 = CONCAT11(*pbVar40,*pbVar35);
              uVar29 = uStack_378;
              bVar84 = *pbVar77;
              pbVar32 = pbVar77 + 1;
              pbVar35 = pbVar77 + 2;
              pbVar38 = pbVar77 + 3;
              bVar88 = pbVar77[4];
              bVar124 = pbVar77[5];
              bVar91 = pbVar77[6];
              bVar126 = pbVar77[7];
              bVar94 = pbVar77[8];
              bVar128 = pbVar77[9];
              bVar97 = pbVar77[10];
              bVar130 = pbVar77[0xb];
              bVar100 = pbVar77[0xc];
              bVar132 = pbVar77[0xd];
              bVar103 = pbVar77[0xe];
              bVar134 = pbVar77[0xf];
              pbVar36 = pbVar77 + 0x10;
              pbVar42 = pbVar77 + 0x11;
              pbVar37 = pbVar77 + 0x12;
              pbVar41 = pbVar77 + 0x13;
              bVar106 = pbVar77[0x14];
              bVar136 = pbVar77[0x15];
              bVar110 = pbVar77[0x16];
              bVar138 = pbVar77[0x17];
              bVar113 = pbVar77[0x18];
              bVar140 = pbVar77[0x19];
              bVar116 = pbVar77[0x1a];
              bVar142 = pbVar77[0x1b];
              bVar119 = pbVar77[0x1c];
              bVar144 = pbVar77[0x1d];
              bVar122 = pbVar77[0x1e];
              bVar146 = pbVar77[0x1f];
              pbVar77 = pbVar77 + 0x20;
              local_3a0 = CONCAT11(*pbVar35,bVar84);
              uStack_398 = CONCAT11(*pbVar37,*pbVar36);
              local_390 = CONCAT11(*pbVar38,*pbVar32);
              uStack_388 = CONCAT11(*pbVar41,*pbVar42);
              bVar84 = *pbVar39;
              pbVar32 = pbVar39 + 1;
              pbVar46 = pbVar39 + 2;
              pbVar42 = pbVar39 + 3;
              bVar89 = pbVar39[4];
              bVar125 = pbVar39[5];
              bVar92 = pbVar39[6];
              bVar127 = pbVar39[7];
              bVar95 = pbVar39[8];
              bVar129 = pbVar39[9];
              bVar98 = pbVar39[10];
              bVar131 = pbVar39[0xb];
              bVar101 = pbVar39[0xc];
              bVar133 = pbVar39[0xd];
              bVar104 = pbVar39[0xe];
              bVar135 = pbVar39[0xf];
              pbVar36 = pbVar39 + 0x10;
              pbVar43 = pbVar39 + 0x11;
              pbVar44 = pbVar39 + 0x12;
              pbVar45 = pbVar39 + 0x13;
              bVar108 = pbVar39[0x14];
              bVar137 = pbVar39[0x15];
              bVar111 = pbVar39[0x16];
              bVar139 = pbVar39[0x17];
              bVar114 = pbVar39[0x18];
              bVar141 = pbVar39[0x19];
              bVar117 = pbVar39[0x1a];
              bVar143 = pbVar39[0x1b];
              bVar120 = pbVar39[0x1c];
              bVar145 = pbVar39[0x1d];
              bVar123 = pbVar39[0x1e];
              bVar147 = pbVar39[0x1f];
              pbVar39 = pbVar39 + 0x20;
              local_3c0 = CONCAT11(*pbVar46,bVar84);
              uStack_3b8 = CONCAT11(*pbVar44,*pbVar36);
              local_3b0 = CONCAT11(*pbVar42,*pbVar32);
              uStack_3a8 = CONCAT11(*pbVar45,*pbVar43);
              local_380 = CONCAT11(*pbVar31,bVar148);
              uStack_378 = CONCAT11(*pbVar34,*pbVar30);
              uVar15 = CONCAT12(*pbVar33,uVar28) & 0xff00ff;
              uVar16 = CONCAT12(*pbVar40,uVar29) & 0xff00ff;
              uVar17 = CONCAT12(*pbVar35,local_3a0) & 0xff00ff;
              uVar19 = CONCAT12(*pbVar38,local_390) & 0xff00ff;
              uVar20 = CONCAT12(*pbVar46,local_3c0) & 0xff00ff;
              uVar21 = CONCAT12(*pbVar31,local_380) & 0xff00ff;
              uVar22 = CONCAT12(*pbVar42,local_3b0) & 0xff00ff;
              uVar23 = CONCAT12(*pbVar37,uStack_398) & 0xff00ff;
              uVar24 = CONCAT12(*pbVar44,uStack_3b8) & 0xff00ff;
              uVar25 = CONCAT12(*pbVar34,uStack_378) & 0xff00ff;
              uVar26 = CONCAT12(*pbVar41,uStack_388) & 0xff00ff;
              uVar27 = CONCAT12(*pbVar45,uStack_3a8) & 0xff00ff;
              *piVar61 = (uVar15 & 0xffff) + (short)uVar17 * -2 + (uVar20 & 0xffff);
              piVar61[1] = (uVar21 & 0xffff) + (short)uVar19 * -2 + (uVar22 & 0xffff);
              piVar61[2] = (uint)(byte)(uVar15 >> 0x10) + (short)(ushort)(byte)(uVar17 >> 0x10) * -2
                           + (uint)(byte)(uVar20 >> 0x10);
              piVar61[3] = (uint)(byte)(uVar21 >> 0x10) + (short)(ushort)(byte)(uVar19 >> 0x10) * -2
                           + (uint)(byte)(uVar22 >> 0x10);
              piVar61[4] = (uint)bVar87 + (short)(ushort)bVar88 * -2 + (uint)bVar89;
              piVar61[5] = (uint)bVar149 + (short)(ushort)bVar124 * -2 + (uint)bVar125;
              piVar61[6] = (uint)bVar90 + (short)(ushort)bVar91 * -2 + (uint)bVar92;
              piVar61[7] = (uint)bVar150 + (short)(ushort)bVar126 * -2 + (uint)bVar127;
              piVar61[8] = (CONCAT12(bVar96,(ushort)bVar93) & 0xffff) + (short)(ushort)bVar94 * -2 +
                           (CONCAT12(bVar98,(ushort)bVar95) & 0xffff);
              piVar61[9] = (CONCAT12(bVar152,(ushort)bVar151) & 0xffff) +
                           (short)(ushort)bVar128 * -2 +
                           (CONCAT12(bVar131,(ushort)bVar129) & 0xffff);
              piVar61[10] = (uint)bVar96 + (short)(ushort)bVar97 * -2 + (uint)bVar98;
              piVar61[0xb] = (uint)bVar152 + (short)(ushort)bVar130 * -2 + (uint)bVar131;
              piVar61[0xc] = (uint)bVar99 + (short)(ushort)bVar100 * -2 + (uint)bVar101;
              piVar61[0xd] = (uint)bVar153 + (short)(ushort)bVar132 * -2 + (uint)bVar133;
              piVar61[0xe] = (uint)bVar102 + (short)(ushort)bVar103 * -2 + (uint)bVar104;
              piVar61[0xf] = (uint)bVar154 + (short)(ushort)bVar134 * -2 + (uint)bVar135;
              piVar61[0x10] = (uVar16 & 0xffff) + (short)uVar23 * -2 + (uVar24 & 0xffff);
              piVar61[0x11] = (uVar25 & 0xffff) + (short)uVar26 * -2 + (uVar27 & 0xffff);
              piVar61[0x12] =
                   (uint)(byte)(uVar16 >> 0x10) + (short)(ushort)(byte)(uVar23 >> 0x10) * -2 +
                   (uint)(byte)(uVar24 >> 0x10);
              piVar61[0x13] =
                   (uint)(byte)(uVar25 >> 0x10) + (short)(ushort)(byte)(uVar26 >> 0x10) * -2 +
                   (uint)(byte)(uVar27 >> 0x10);
              piVar61[0x14] = (uint)bVar105 + (short)(ushort)bVar106 * -2 + (uint)bVar108;
              piVar61[0x15] = (uint)bVar155 + (short)(ushort)bVar136 * -2 + (uint)bVar137;
              piVar61[0x16] = (uint)bVar109 + (short)(ushort)bVar110 * -2 + (uint)bVar111;
              piVar61[0x17] = (uint)bVar156 + (short)(ushort)bVar138 * -2 + (uint)bVar139;
              piVar61[0x18] =
                   (CONCAT12(bVar115,(ushort)bVar112) & 0xffff) + (short)(ushort)bVar113 * -2 +
                   (CONCAT12(bVar117,(ushort)bVar114) & 0xffff);
              piVar61[0x19] =
                   (CONCAT12(bVar158,(ushort)bVar157) & 0xffff) + (short)(ushort)bVar140 * -2 +
                   (CONCAT12(bVar143,(ushort)bVar141) & 0xffff);
              piVar61[0x1a] = (uint)bVar115 + (short)(ushort)bVar116 * -2 + (uint)bVar117;
              piVar61[0x1b] = (uint)bVar158 + (short)(ushort)bVar142 * -2 + (uint)bVar143;
              piVar61[0x1c] = (uint)bVar118 + (short)(ushort)bVar119 * -2 + (uint)bVar120;
              piVar61[0x1d] = (uint)bVar159 + (short)(ushort)bVar144 * -2 + (uint)bVar145;
              piVar61[0x1e] = (uint)bVar121 + (short)(ushort)bVar122 * -2 + (uint)bVar123;
              piVar61[0x1f] = (uint)bVar160 + (short)(ushort)bVar146 * -2 + (uint)bVar147;
              piVar61 = piVar61 + 0x20;
            } while (uVar230 < uVar8);
            pbVar77 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
            uVar63 = uVar60 + uVar8 * 0x20;
            if (uVar12 == uVar8 * 0x10) goto LAB_001cc578;
          }
          piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
          do {
            bVar84 = pbVar77[1];
            bVar88 = pbVar77[1 - param_5];
            uVar63 = uVar63 + 2;
            bVar87 = pbVar77[lVar227 + 1];
            *piVar61 = (uint)pbVar77[lVar226] + (uint)*pbVar77 * -2 + (uint)pbVar77[lVar227];
            piVar61[1] = (uint)bVar88 + (uint)bVar84 * -2 + (uint)bVar87;
            pbVar77 = pbVar77 + 2;
            piVar61 = piVar61 + 2;
          } while ((int)uVar63 < param_4 + -1);
          goto LAB_001cc578;
        }
        uVar78 = (ulong)uVar73;
        pbVar50 = pbVar71;
        do {
          bVar84 = pbVar50[1];
          bVar87 = *pbVar50;
          bVar89 = pbVar50[1 - param_5];
          pbVar77 = pbVar50 + lVar226;
          pbVar75 = pbVar50 + lVar227;
          bVar88 = pbVar50[lVar227 + 1];
          pbVar50 = pbVar50 + 2;
          *piVar61 = (uint)*pbVar77 + (uint)bVar87 * -2 + (uint)*pbVar75;
          piVar61[1] = (uint)bVar89 + (uint)bVar84 * -2 + (uint)bVar88;
          piVar61 = piVar61 + 2;
        } while (pbVar50 != pbVar71 + (uVar78 + 1) * 2);
        goto LAB_001cc57c;
      }
    }
    else {
      iVar65 = piVar10[1];
    }
    if (param_4 + -1 <= (int)uVar60) goto LAB_001c97b4;
    uVar230 = (param_4 + -2) - uVar60;
    piVar61 = (int *)(param_3 + lVar68 * 4);
    lVar227 = (long)-param_5;
    uVar73 = uVar230 >> 1;
    pbVar50 = (byte *)(param_2 + lVar70 + lVar227);
    lVar69 = lVar70 + lVar227 + 1;
    pbVar77 = (byte *)(param_2 + lVar69);
    lVar226 = (long)param_5;
    uVar12 = uVar73 + 1;
    lVar79 = (ulong)uVar12 * 2;
    pbVar75 = (byte *)(param_3 + (lVar68 + lVar79) * 4);
    pbVar39 = (byte *)(param_2 + lVar70 + lVar226);
    if (((uVar12 < 0x10 ||
         (pbVar77 < pbVar75 && piVar61 < (int *)(param_2 + lVar69 + lVar79) ||
         pbVar50 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar227))) ||
         pbVar71 < pbVar75 && piVar61 < (int *)(param_2 + lVar70 + lVar79)) ||
       (pbVar39 < pbVar75 && piVar61 < (int *)(param_2 + lVar79 + lVar70 + lVar226))) {
      pbVar50 = pbVar71;
      do {
        bVar87 = pbVar50[1 - param_5];
        pbVar77 = pbVar50 + 2;
        bVar84 = pbVar50[lVar226 + 1];
        bVar88 = pbVar50[1];
        *piVar61 = ((uint)pbVar50[lVar227] + (uint)pbVar50[lVar226]) * iVar65 +
                   iVar13 * (uint)*pbVar50;
        piVar61[1] = ((uint)bVar87 + (uint)bVar84) * iVar65 + iVar13 * (uint)bVar88;
        pbVar50 = pbVar77;
        piVar61 = piVar61 + 2;
      } while (pbVar77 != pbVar71 + ((ulong)uVar73 + 1) * 2);
    }
    else {
      uVar8 = (uVar73 - 0x10 >> 4) + 1;
      pbVar75 = pbVar71;
      uVar63 = uVar60;
      if (0x1f < uVar230) {
        uVar230 = 0;
        do {
          bVar84 = *pbVar39;
          pbVar35 = pbVar39 + 1;
          bVar87 = pbVar39[2];
          bVar128 = pbVar39[3];
          bVar89 = pbVar39[4];
          bVar129 = pbVar39[5];
          bVar92 = pbVar39[6];
          bVar131 = pbVar39[7];
          bVar95 = pbVar39[8];
          bVar133 = pbVar39[9];
          bVar98 = pbVar39[10];
          bVar135 = pbVar39[0xb];
          bVar101 = pbVar39[0xc];
          bVar137 = pbVar39[0xd];
          bVar104 = pbVar39[0xe];
          bVar139 = pbVar39[0xf];
          pbVar40 = pbVar39 + 0x10;
          pbVar33 = pbVar39 + 0x11;
          bVar108 = pbVar39[0x12];
          bVar141 = pbVar39[0x13];
          bVar110 = pbVar39[0x14];
          bVar142 = pbVar39[0x15];
          bVar113 = pbVar39[0x16];
          bVar144 = pbVar39[0x17];
          bVar116 = pbVar39[0x18];
          bVar146 = pbVar39[0x19];
          bVar119 = pbVar39[0x1a];
          bVar148 = pbVar39[0x1b];
          bVar122 = pbVar39[0x1c];
          bVar150 = pbVar39[0x1d];
          bVar125 = pbVar39[0x1e];
          bVar152 = pbVar39[0x1f];
          pbVar39 = pbVar39 + 0x20;
          bVar154 = *pbVar77;
          bVar155 = pbVar77[2];
          bVar156 = pbVar77[4];
          bVar157 = pbVar77[6];
          bVar158 = pbVar77[8];
          bVar159 = pbVar77[10];
          bVar160 = pbVar77[0xc];
          bVar161 = pbVar77[0xe];
          pbVar34 = pbVar77 + 0x10;
          bVar162 = pbVar77[0x12];
          bVar163 = pbVar77[0x14];
          bVar164 = pbVar77[0x16];
          bVar165 = pbVar77[0x18];
          bVar166 = pbVar77[0x1a];
          bVar167 = pbVar77[0x1c];
          bVar168 = pbVar77[0x1e];
          pbVar77 = pbVar77 + 0x20;
          uVar230 = uVar230 + 1;
          local_3c0 = CONCAT11(bVar87,bVar84);
          uStack_3b8 = CONCAT11(bVar108,*pbVar40);
          local_3b0 = CONCAT11(bVar128,*pbVar35);
          uStack_3a8 = CONCAT11(bVar141,*pbVar33);
          bVar84 = *pbVar50;
          bVar88 = pbVar50[2];
          bVar90 = pbVar50[4];
          bVar93 = pbVar50[6];
          bVar96 = pbVar50[8];
          bVar99 = pbVar50[10];
          bVar102 = pbVar50[0xc];
          bVar105 = pbVar50[0xe];
          pbVar40 = pbVar50 + 0x10;
          bVar109 = pbVar50[0x12];
          bVar111 = pbVar50[0x14];
          bVar114 = pbVar50[0x16];
          bVar117 = pbVar50[0x18];
          bVar120 = pbVar50[0x1a];
          bVar123 = pbVar50[0x1c];
          bVar126 = pbVar50[0x1e];
          pbVar50 = pbVar50 + 0x20;
          local_360 = CONCAT11(bVar88,bVar84);
          uStack_358 = CONCAT11(bVar109,*pbVar40);
          bVar84 = *pbVar75;
          pbVar40 = pbVar75 + 1;
          pbVar35 = pbVar75 + 2;
          pbVar33 = pbVar75 + 3;
          bVar91 = pbVar75[4];
          bVar130 = pbVar75[5];
          bVar94 = pbVar75[6];
          bVar132 = pbVar75[7];
          bVar97 = pbVar75[8];
          bVar134 = pbVar75[9];
          bVar100 = pbVar75[10];
          bVar136 = pbVar75[0xb];
          bVar103 = pbVar75[0xc];
          bVar138 = pbVar75[0xd];
          bVar106 = pbVar75[0xe];
          bVar140 = pbVar75[0xf];
          pbVar36 = pbVar75 + 0x10;
          pbVar30 = pbVar75 + 0x11;
          pbVar31 = pbVar75 + 0x12;
          pbVar32 = pbVar75 + 0x13;
          bVar112 = pbVar75[0x14];
          bVar143 = pbVar75[0x15];
          bVar115 = pbVar75[0x16];
          bVar145 = pbVar75[0x17];
          bVar118 = pbVar75[0x18];
          bVar147 = pbVar75[0x19];
          bVar121 = pbVar75[0x1a];
          bVar149 = pbVar75[0x1b];
          bVar124 = pbVar75[0x1c];
          bVar151 = pbVar75[0x1d];
          bVar127 = pbVar75[0x1e];
          bVar153 = pbVar75[0x1f];
          pbVar75 = pbVar75 + 0x20;
          local_3a0 = CONCAT11(*pbVar35,bVar84);
          uStack_398 = CONCAT11(*pbVar31,*pbVar36);
          local_390 = CONCAT11(*pbVar33,*pbVar40);
          uStack_388 = CONCAT11(*pbVar32,*pbVar30);
          local_380 = CONCAT11(bVar155,bVar154);
          uStack_378 = CONCAT11(bVar162,*pbVar34);
          uVar15 = CONCAT12(*pbVar35,local_3a0) & 0xff00ff;
          uVar16 = CONCAT12(*pbVar31,uStack_398) & 0xff00ff;
          uVar17 = CONCAT12(*pbVar33,local_390) & 0xff00ff;
          uVar19 = CONCAT12(*pbVar32,uStack_388) & 0xff00ff;
          *piVar61 = (((CONCAT12(bVar87,local_3c0) & 0xff00ff) & 0xffff) +
                     ((CONCAT12(bVar88,local_360) & 0xff00ff) & 0xffff)) * iVar65 +
                     iVar13 * (uVar15 & 0xffff);
          piVar61[1] = (((CONCAT12(bVar128,local_3b0) & 0xff00ff) & 0xffff) +
                       ((CONCAT12(bVar155,local_380) & 0xff00ff) & 0xffff)) * iVar65 +
                       iVar13 * (uVar17 & 0xffff);
          piVar61[2] = ((uint)bVar87 + (uint)bVar88) * iVar65 +
                       iVar13 * (uint)(byte)(uVar15 >> 0x10);
          piVar61[3] = ((uint)bVar128 + (uint)bVar155) * iVar65 +
                       iVar13 * (uint)(byte)(uVar17 >> 0x10);
          piVar61[4] = ((uint)bVar89 + (uint)bVar90) * iVar65 + iVar13 * (uint)bVar91;
          piVar61[5] = ((uint)bVar129 + (uint)bVar156) * iVar65 + iVar13 * (uint)bVar130;
          piVar61[6] = ((uint)bVar92 + (uint)bVar93) * iVar65 + iVar13 * (uint)bVar94;
          piVar61[7] = ((uint)bVar131 + (uint)bVar157) * iVar65 + iVar13 * (uint)bVar132;
          piVar61[8] = ((CONCAT12(bVar98,(ushort)bVar95) & 0xffff) +
                       (CONCAT12(bVar99,(ushort)bVar96) & 0xffff)) * iVar65 +
                       iVar13 * (CONCAT12(bVar100,(ushort)bVar97) & 0xffff);
          piVar61[9] = ((CONCAT12(bVar135,(ushort)bVar133) & 0xffff) +
                       (CONCAT12(bVar159,(ushort)bVar158) & 0xffff)) * iVar65 +
                       iVar13 * (CONCAT12(bVar136,(ushort)bVar134) & 0xffff);
          piVar61[10] = ((uint)bVar98 + (uint)bVar99) * iVar65 + iVar13 * (uint)bVar100;
          piVar61[0xb] = ((uint)bVar135 + (uint)bVar159) * iVar65 + iVar13 * (uint)bVar136;
          piVar61[0xc] = ((uint)bVar101 + (uint)bVar102) * iVar65 + iVar13 * (uint)bVar103;
          piVar61[0xd] = ((uint)bVar137 + (uint)bVar160) * iVar65 + iVar13 * (uint)bVar138;
          piVar61[0xe] = ((uint)bVar104 + (uint)bVar105) * iVar65 + iVar13 * (uint)bVar106;
          piVar61[0xf] = ((uint)bVar139 + (uint)bVar161) * iVar65 + iVar13 * (uint)bVar140;
          piVar61[0x10] =
               (((CONCAT12(bVar108,uStack_3b8) & 0xff00ff) & 0xffff) +
               ((CONCAT12(bVar109,uStack_358) & 0xff00ff) & 0xffff)) * iVar65 +
               iVar13 * (uVar16 & 0xffff);
          piVar61[0x11] =
               (((CONCAT12(bVar141,uStack_3a8) & 0xff00ff) & 0xffff) +
               ((CONCAT12(bVar162,uStack_378) & 0xff00ff) & 0xffff)) * iVar65 +
               iVar13 * (uVar19 & 0xffff);
          piVar61[0x12] =
               ((uint)bVar108 + (uint)bVar109) * iVar65 + iVar13 * (uint)(byte)(uVar16 >> 0x10);
          piVar61[0x13] =
               ((uint)bVar141 + (uint)bVar162) * iVar65 + iVar13 * (uint)(byte)(uVar19 >> 0x10);
          piVar61[0x14] = ((uint)bVar110 + (uint)bVar111) * iVar65 + iVar13 * (uint)bVar112;
          piVar61[0x15] = ((uint)bVar142 + (uint)bVar163) * iVar65 + iVar13 * (uint)bVar143;
          piVar61[0x16] = ((uint)bVar113 + (uint)bVar114) * iVar65 + iVar13 * (uint)bVar115;
          piVar61[0x17] = ((uint)bVar144 + (uint)bVar164) * iVar65 + iVar13 * (uint)bVar145;
          piVar61[0x18] =
               ((CONCAT12(bVar119,(ushort)bVar116) & 0xffff) +
               (CONCAT12(bVar120,(ushort)bVar117) & 0xffff)) * iVar65 +
               iVar13 * (CONCAT12(bVar121,(ushort)bVar118) & 0xffff);
          piVar61[0x19] =
               ((CONCAT12(bVar148,(ushort)bVar146) & 0xffff) +
               (CONCAT12(bVar166,(ushort)bVar165) & 0xffff)) * iVar65 +
               iVar13 * (CONCAT12(bVar149,(ushort)bVar147) & 0xffff);
          piVar61[0x1a] = ((uint)bVar119 + (uint)bVar120) * iVar65 + iVar13 * (uint)bVar121;
          piVar61[0x1b] = ((uint)bVar148 + (uint)bVar166) * iVar65 + iVar13 * (uint)bVar149;
          piVar61[0x1c] = ((uint)bVar122 + (uint)bVar123) * iVar65 + iVar13 * (uint)bVar124;
          piVar61[0x1d] = ((uint)bVar150 + (uint)bVar167) * iVar65 + iVar13 * (uint)bVar151;
          piVar61[0x1e] = ((uint)bVar125 + (uint)bVar126) * iVar65 + iVar13 * (uint)bVar127;
          piVar61[0x1f] = ((uint)bVar152 + (uint)bVar168) * iVar65 + iVar13 * (uint)bVar153;
          piVar61 = piVar61 + 0x20;
        } while (uVar230 < uVar8);
        pbVar75 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
        uVar63 = uVar60 + uVar8 * 0x20;
        if (uVar12 == uVar8 * 0x10) goto LAB_001cba1c;
      }
      piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
      do {
        bVar87 = pbVar75[1 - param_5];
        bVar84 = pbVar75[lVar226 + 1];
        uVar63 = uVar63 + 2;
        bVar88 = pbVar75[1];
        *piVar61 = ((uint)pbVar75[lVar227] + (uint)pbVar75[lVar226]) * iVar65 +
                   iVar13 * (uint)*pbVar75;
        piVar61[1] = ((uint)bVar87 + (uint)bVar84) * iVar65 + iVar13 * (uint)bVar88;
        pbVar75 = pbVar75 + 2;
        piVar61 = piVar61 + 2;
      } while ((int)uVar63 < param_4 + -1);
    }
LAB_001cba1c:
    uVar60 = uVar60 + 2 + uVar73 * 2;
    pbVar71 = pbVar71 + ((ulong)uVar73 + 1) * 2;
LAB_001c97b4:
    if (param_4 <= (int)uVar60) {
      return;
    }
    iVar13 = -param_5;
    lVar69 = (long)param_5;
    lVar79 = (long)iVar13;
    lVar226 = NEON_shl(lVar79,1);
    lVar68 = lVar69 * 3;
    lVar227 = NEON_shl(lVar69,2);
    uVar12 = -((uint)((ulong)(lVar72 + lVar74 + 4) >> 2) & 3) & 3;
    lVar228 = NEON_shl(lVar79,2);
    lVar70 = lVar226 + lVar79;
    lVar74 = NEON_shl(lVar69,3);
    if (uVar11 < uVar12) {
      uVar12 = uVar11;
    }
    lVar232 = NEON_shl(lVar68,2);
    lVar219 = NEON_shl(lVar69,4);
    lVar231 = NEON_shl(lVar227 + lVar69,1);
    lVar191 = NEON_shl(lVar70,2);
    lVar223 = NEON_shl(lVar68,1);
    lVar224 = NEON_shl(lVar70,1);
    pbVar50 = pbVar71 + (ulong)((param_4 + -1) - uVar60) + 1;
    lVar225 = NEON_shl(lVar79,3);
    lVar81 = NEON_shl(lVar228 + lVar79,1);
    piVar61 = (int *)(param_3 + (long)(int)uVar60 * 4);
    do {
      iVar65 = (uint)*pbVar71 * *piVar10;
      if (0 < (int)uVar11) {
        uVar60 = uVar12;
        if (uVar11 < 0x12) {
          uVar60 = uVar11;
        }
        if (uVar60 == 0) {
          uVar78 = 1;
          iVar62 = param_5;
        }
        else {
          iVar65 = iVar65 + ((uint)pbVar71[lVar69] + (uint)pbVar71[iVar13]) * piVar10[1];
          if (uVar60 == 1) {
            uVar78 = 2;
            iVar62 = param_5 * 2;
          }
          else {
            iVar65 = iVar65 + ((uint)pbVar71[lVar69 * 2] + (uint)pbVar71[param_5 * -2]) * piVar10[2]
            ;
            if (uVar60 == 2) {
              uVar78 = 3;
              iVar62 = param_5 * 3;
            }
            else {
              iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 2] + (uint)pbVar71[param_5 * -3])
                                * piVar10[3];
              if (uVar60 == 3) {
                uVar78 = 4;
                iVar62 = param_5 * 4;
              }
              else {
                iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 3] + (uint)pbVar71[param_5 * -4]
                                  ) * piVar10[4];
                if (uVar60 == 4) {
                  uVar78 = 5;
                  iVar62 = param_5 * 5;
                }
                else {
                  iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 4] +
                                    (uint)pbVar71[param_5 * -5]) * piVar10[5];
                  if (uVar60 == 5) {
                    uVar78 = 6;
                    iVar62 = param_5 * 6;
                  }
                  else {
                    iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 5] +
                                      (uint)pbVar71[param_5 * -6]) * piVar10[6];
                    if (uVar60 == 6) {
                      uVar78 = 7;
                      iVar62 = param_5 * 7;
                    }
                    else {
                      iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 6] +
                                        (uint)pbVar71[param_5 * -7]) * piVar10[7];
                      if (uVar60 == 7) {
                        uVar78 = 8;
                        iVar62 = param_5 * 8;
                      }
                      else {
                        iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 7] +
                                          (uint)pbVar71[param_5 * -8]) * piVar10[8];
                        if (uVar60 == 8) {
                          uVar78 = 9;
                          iVar62 = param_5 * 9;
                        }
                        else {
                          iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 8] +
                                            (uint)pbVar71[param_5 * -9]) * piVar10[9];
                          if (uVar60 == 9) {
                            uVar78 = 10;
                            iVar62 = param_5 * 10;
                          }
                          else {
                            iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 9] +
                                              (uint)pbVar71[param_5 * -10]) * piVar10[10];
                            if (uVar60 == 10) {
                              uVar78 = 0xb;
                              iVar62 = param_5 * 0xb;
                            }
                            else {
                              iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 10] +
                                                (uint)pbVar71[param_5 * -0xb]) * piVar10[0xb];
                              if (uVar60 == 0xb) {
                                uVar78 = 0xc;
                                iVar62 = param_5 * 0xc;
                              }
                              else {
                                iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0xb] +
                                                  (uint)pbVar71[param_5 * -0xc]) * piVar10[0xc];
                                if (uVar60 == 0xc) {
                                  uVar78 = 0xd;
                                  iVar62 = param_5 * 0xd;
                                }
                                else {
                                  iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0xc] +
                                                    (uint)pbVar71[param_5 * -0xd]) * piVar10[0xd];
                                  if (uVar60 == 0xd) {
                                    uVar78 = 0xe;
                                    iVar62 = param_5 * 0xe;
                                  }
                                  else {
                                    iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0xd] +
                                                      (uint)pbVar71[param_5 * -0xe]) * piVar10[0xe];
                                    if (uVar60 == 0xe) {
                                      uVar78 = 0xf;
                                      iVar62 = param_5 * 0xf;
                                    }
                                    else {
                                      iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0xe] +
                                                        (uint)pbVar71[param_5 * -0xf]) *
                                                        piVar10[0xf];
                                      if (uVar60 == 0xf) {
                                        uVar78 = 0x10;
                                        iVar62 = param_5 * 0x10;
                                      }
                                      else {
                                        iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0xf] +
                                                          (uint)pbVar71[param_5 * -0x10]) *
                                                          piVar10[0x10];
                                        if (uVar60 == 0x11) {
                                          uVar78 = 0x12;
                                          iVar65 = iVar65 + ((uint)pbVar71[lVar69 + param_5 * 0x10]
                                                            + (uint)pbVar71[param_5 * -0x11]) *
                                                            piVar10[0x11];
                                          iVar62 = param_5 * 0x12;
                                        }
                                        else {
                                          uVar78 = 0x11;
                                          iVar62 = param_5 * 0x11;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar60 == uVar11) goto LAB_001ca1c8;
        }
        uVar73 = ((uVar11 - uVar60) - 0x10 >> 4) + 1;
        iVar14 = uVar73 * 0x10;
        if (0xe < (uVar11 - 1) - uVar60) {
          lVar229 = (ulong)uVar60 + 1;
          iVar218 = 0;
          iVar220 = 0;
          iVar221 = 0;
          iVar222 = 0;
          pbVar75 = pbVar71 + iVar13 * lVar229;
          pbVar77 = pbVar71 + lVar229 * lVar69;
          uVar230 = 0;
          puVar67 = (undefined8 *)(lVar72 + ((ulong)uVar60 + lVar64 + 1) * 4);
          do {
            bVar84 = *pbVar77;
            uVar230 = uVar230 + 1;
            bVar88 = pbVar77[lVar69];
            pbVar39 = pbVar77 + lVar69 * 2;
            pbVar40 = pbVar77 + lVar68;
            pbVar35 = pbVar77 + lVar227;
            pbVar33 = pbVar77 + lVar227 + lVar69;
            pbVar34 = pbVar77 + lVar223;
            pbVar30 = pbVar77 + (lVar74 - lVar69);
            pbVar31 = pbVar77 + lVar74;
            bVar89 = pbVar77[lVar74 + lVar69];
            pbVar32 = pbVar77 + lVar231;
            pbVar36 = pbVar77 + lVar231 + lVar69;
            pbVar37 = pbVar77 + lVar232;
            pbVar38 = pbVar77 + lVar232 + lVar69;
            pbVar41 = pbVar77 + lVar219 + lVar69 * -2;
            pbVar42 = pbVar77 + (lVar219 - lVar69);
            pbVar77 = pbVar77 + (long)param_5 * 0x10;
            bVar87 = *pbVar75;
            bVar90 = pbVar75[lVar79];
            pbVar43 = pbVar75 + lVar226;
            pbVar44 = pbVar75 + lVar70;
            pbVar45 = pbVar75 + lVar228;
            pbVar46 = pbVar75 + lVar228 + lVar79;
            pbVar47 = pbVar75 + lVar224;
            pbVar49 = pbVar75 + (lVar225 - lVar79);
            pbVar48 = pbVar75 + lVar225;
            bVar91 = pbVar75[lVar225 + lVar79];
            pbVar1 = pbVar75 + lVar81;
            pbVar2 = pbVar75 + lVar81 + lVar79;
            pbVar3 = pbVar75 + lVar191;
            pbVar4 = pbVar75 + lVar191 + lVar79;
            pbVar5 = pbVar75 + (lVar79 * 0x10 - lVar226);
            pbVar6 = pbVar75 + lVar79 * 0xf;
            pbVar75 = pbVar75 + (long)iVar13 * 0x10;
            iVar218 = iVar218 + (((CONCAT12(bVar90,CONCAT11(bVar90,bVar87)) & 0xff00ff) & 0xffff) +
                                ((CONCAT12(bVar88,CONCAT11(bVar88,bVar84)) & 0xff00ff) & 0xffff)) *
                                (int)*puVar67 +
                      ((CONCAT12(*pbVar46,(ushort)*pbVar45) & 0xffff) +
                      (CONCAT12(*pbVar33,(ushort)*pbVar35) & 0xffff)) * (int)puVar67[2] +
                      (((CONCAT12(bVar91,CONCAT11(bVar91,*pbVar48)) & 0xff00ff) & 0xffff) +
                      ((CONCAT12(bVar89,CONCAT11(bVar89,*pbVar31)) & 0xff00ff) & 0xffff)) *
                      (int)puVar67[4] +
                      ((CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) +
                      (CONCAT12(*pbVar38,(ushort)*pbVar37) & 0xffff)) * *(int *)(puVar67 + 6);
            iVar220 = iVar220 + ((uint)bVar90 + (uint)bVar88) * (int)((ulong)*puVar67 >> 0x20) +
                      ((uint)*pbVar46 + (uint)*pbVar33) * (int)((ulong)puVar67[2] >> 0x20) +
                      ((uint)bVar91 + (uint)bVar89) * (int)((ulong)puVar67[4] >> 0x20) +
                      ((uint)*pbVar4 + (uint)*pbVar38) * *(int *)((long)puVar67 + 0x34);
            iVar221 = iVar221 + ((uint)*pbVar43 + (uint)*pbVar39) * (int)puVar67[1] +
                      ((uint)*pbVar47 + (uint)*pbVar34) * (int)puVar67[3] +
                      ((uint)*pbVar1 + (uint)*pbVar32) * (int)puVar67[5] +
                      ((uint)*pbVar5 + (uint)*pbVar41) * *(int *)(puVar67 + 7);
            iVar222 = iVar222 + ((uint)*pbVar44 + (uint)*pbVar40) * (int)((ulong)puVar67[1] >> 0x20)
                      + ((uint)*pbVar49 + (uint)*pbVar30) * (int)((ulong)puVar67[3] >> 0x20) +
                      ((uint)*pbVar2 + (uint)*pbVar36) * (int)((ulong)puVar67[5] >> 0x20) +
                      ((uint)*pbVar6 + (uint)*pbVar42) * *(int *)((long)puVar67 + 0x3c);
            puVar67 = puVar67 + 8;
          } while (uVar230 < uVar73);
          uVar78 = (ulong)(uint)((int)uVar78 + iVar14);
          iVar62 = iVar62 + param_5 * iVar14;
          iVar65 = iVar65 + iVar218 + iVar220 + iVar221 + iVar222;
          if (iVar14 == uVar11 - uVar60) goto LAB_001ca1c8;
        }
        uVar76 = -(uVar78 >> 0x1f) & 0xfffffffc00000000 | uVar78 << 2;
        iVar218 = (int)uVar78;
        iVar14 = param_5 + iVar62;
        iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                          *(int *)((long)piVar10 + uVar76);
        if (iVar218 + 1 <= (int)uVar11) {
          iVar62 = param_5 + iVar14;
          iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                            *(int *)((long)piVar10 + uVar76 + 4);
          if (iVar218 + 2 <= (int)uVar11) {
            iVar14 = param_5 + iVar62;
            iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                              *(int *)((long)piVar10 + uVar76 + 8);
            if (iVar218 + 3 <= (int)uVar11) {
              iVar62 = iVar14 + param_5;
              iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                                *(int *)((long)piVar10 + uVar76 + 0xc);
              if (iVar218 + 4 <= (int)uVar11) {
                iVar14 = param_5 + iVar62;
                iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                                  *(int *)((long)piVar10 + uVar76 + 0x10);
                if (iVar218 + 5 <= (int)uVar11) {
                  iVar62 = param_5 + iVar14;
                  iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                                    *(int *)((long)piVar10 + uVar76 + 0x14);
                  if (iVar218 + 6 <= (int)uVar11) {
                    iVar14 = param_5 + iVar62;
                    iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                                      *(int *)((long)piVar10 + uVar76 + 0x18);
                    if (iVar218 + 7 <= (int)uVar11) {
                      iVar62 = param_5 + iVar14;
                      iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                                        *(int *)((long)piVar10 + uVar76 + 0x1c);
                      if (iVar218 + 8 <= (int)uVar11) {
                        iVar14 = param_5 + iVar62;
                        iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                                          *(int *)((long)piVar10 + uVar76 + 0x20);
                        if (iVar218 + 9 <= (int)uVar11) {
                          iVar62 = param_5 + iVar14;
                          iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                                            *(int *)((long)piVar10 + uVar76 + 0x24);
                          if (iVar218 + 10 <= (int)uVar11) {
                            iVar14 = param_5 + iVar62;
                            iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                                              *(int *)((long)piVar10 + uVar76 + 0x28);
                            if (iVar218 + 0xb <= (int)uVar11) {
                              iVar62 = param_5 + iVar14;
                              iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14]) *
                                                *(int *)((long)piVar10 + uVar76 + 0x2c);
                              if (iVar218 + 0xc <= (int)uVar11) {
                                iVar14 = param_5 + iVar62;
                                iVar65 = iVar65 + ((uint)pbVar71[iVar62] + (uint)pbVar71[-iVar62]) *
                                                  *(int *)((long)piVar10 + uVar76 + 0x30);
                                if (iVar218 + 0xd <= (int)uVar11) {
                                  iVar65 = iVar65 + ((uint)pbVar71[iVar14] + (uint)pbVar71[-iVar14])
                                                    * *(int *)((long)piVar10 + uVar76 + 0x34);
                                  if (iVar218 + 0xe <= (int)uVar11) {
                                    iVar65 = iVar65 + ((uint)pbVar71[param_5 + iVar14] +
                                                      (uint)pbVar71[-(param_5 + iVar14)]) *
                                                      *(int *)((long)piVar10 + uVar76 + 0x38);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001ca1c8:
      pbVar71 = pbVar71 + 1;
      *piVar61 = iVar65;
      piVar61 = piVar61 + 1;
      if (pbVar71 == pbVar50) {
        return;
      }
    } while( true );
  }
  if (iVar13 != 3) {
    if (iVar13 != 5) goto LAB_001ca220;
    iVar13 = piVar10[1];
    iVar65 = piVar10[2];
    if (param_4 + -1 <= (int)uVar60) goto LAB_001ca220;
    uVar230 = (param_4 + -2) - uVar60;
    uVar73 = uVar230 >> 1;
    uVar12 = uVar73 + 1;
    lVar227 = (long)(param_5 << 1);
    lVar74 = (ulong)uVar12 * 2;
    lVar79 = (long)(param_5 * -2);
    puVar54 = (undefined1 *)(param_2 + lVar70 + lVar227);
    piVar61 = (int *)(param_3 + lVar68 * 4);
    puVar57 = (undefined1 *)(param_2 + lVar70 + lVar79);
    lVar226 = (long)-param_5;
    puVar51 = (undefined1 *)(param_3 + (lVar68 + lVar74) * 4);
    lVar68 = lVar70 + lVar226 + 1;
    puVar59 = (undefined1 *)(param_2 + lVar68);
    puVar56 = (undefined1 *)(param_2 + lVar70 + lVar226);
    lVar69 = (long)param_5;
    puVar58 = (undefined1 *)(param_2 + lVar70 + lVar69);
    if ((((uVar12 < 0x10 ||
          (puVar54 < puVar51 && piVar61 < (int *)(param_2 + lVar70 + lVar227 + lVar74) ||
          puVar57 < puVar51 && piVar61 < (int *)(param_2 + lVar74 + lVar70 + lVar79))) ||
         puVar59 < puVar51 && piVar61 < (int *)(param_2 + lVar74 + lVar68)) ||
         puVar56 < puVar51 && piVar61 < (int *)(param_2 + lVar74 + lVar70 + lVar226)) ||
       (puVar58 < puVar51 && piVar61 < (int *)(param_2 + lVar74 + lVar70 + lVar69))) {
      pbVar50 = pbVar71;
      do {
        pbVar77 = pbVar50 + lVar227;
        pbVar75 = pbVar50 + lVar79;
        bVar84 = pbVar50[lVar79 + 1];
        bVar87 = pbVar50[lVar69 * 2 + 1];
        bVar89 = pbVar50[1 - param_5];
        pbVar39 = pbVar50 + lVar69;
        bVar88 = pbVar50[lVar69 + 1];
        pbVar40 = pbVar50 + lVar226;
        pbVar50 = pbVar50 + 2;
        *piVar61 = ((uint)*pbVar77 - (uint)*pbVar75) * iVar65 +
                   ((uint)*pbVar39 - (uint)*pbVar40) * iVar13;
        piVar61[1] = ((uint)bVar87 - (uint)bVar84) * iVar65 + ((uint)bVar88 - (uint)bVar89) * iVar13
        ;
        piVar61 = piVar61 + 2;
      } while (pbVar50 != pbVar71 + ((ulong)uVar73 + 1) * 2);
    }
    else {
      uVar8 = (uVar73 - 0x10 >> 4) + 1;
      pbVar50 = pbVar71;
      uVar63 = uVar60;
      if (0x1f < uVar230) {
        uVar230 = 0;
        do {
          uVar80 = *puVar54;
          puVar51 = puVar54 + 1;
          bVar84 = puVar54[2];
          bVar129 = puVar54[3];
          bVar89 = puVar54[4];
          bVar132 = puVar54[5];
          bVar92 = puVar54[6];
          bVar135 = puVar54[7];
          bVar95 = puVar54[8];
          bVar138 = puVar54[9];
          bVar98 = puVar54[10];
          bVar141 = puVar54[0xb];
          bVar101 = puVar54[0xc];
          bVar144 = puVar54[0xd];
          bVar104 = puVar54[0xe];
          bVar147 = puVar54[0xf];
          puVar52 = puVar54 + 0x10;
          puVar53 = puVar54 + 0x11;
          bVar108 = puVar54[0x12];
          bVar150 = puVar54[0x13];
          bVar111 = puVar54[0x14];
          bVar153 = puVar54[0x15];
          bVar114 = puVar54[0x16];
          bVar156 = puVar54[0x17];
          bVar117 = puVar54[0x18];
          bVar159 = puVar54[0x19];
          bVar120 = puVar54[0x1a];
          bVar162 = puVar54[0x1b];
          bVar123 = puVar54[0x1c];
          bVar165 = puVar54[0x1d];
          bVar126 = puVar54[0x1e];
          bVar168 = puVar54[0x1f];
          puVar54 = puVar54 + 0x20;
          uVar85 = *puVar56;
          bVar171 = puVar56[2];
          bVar173 = puVar56[4];
          bVar175 = puVar56[6];
          bVar177 = puVar56[8];
          bVar179 = puVar56[10];
          bVar181 = puVar56[0xc];
          bVar183 = puVar56[0xe];
          puVar55 = puVar56 + 0x10;
          bVar185 = puVar56[0x12];
          bVar187 = puVar56[0x14];
          bVar189 = puVar56[0x16];
          bVar193 = puVar56[0x18];
          bVar195 = puVar56[0x1a];
          bVar197 = puVar56[0x1c];
          bVar199 = puVar56[0x1e];
          puVar56 = puVar56 + 0x20;
          uVar230 = uVar230 + 1;
          local_320 = CONCAT11(bVar84,uVar80);
          uStack_318 = CONCAT11(bVar108,*puVar52);
          local_310 = CONCAT11(bVar129,*puVar51);
          uStack_308 = CONCAT11(bVar150,*puVar53);
          uVar80 = *puVar57;
          puVar51 = puVar57 + 1;
          bVar87 = puVar57[2];
          bVar130 = puVar57[3];
          bVar90 = puVar57[4];
          bVar133 = puVar57[5];
          bVar93 = puVar57[6];
          bVar136 = puVar57[7];
          bVar96 = puVar57[8];
          bVar139 = puVar57[9];
          bVar99 = puVar57[10];
          bVar142 = puVar57[0xb];
          bVar102 = puVar57[0xc];
          bVar145 = puVar57[0xd];
          bVar105 = puVar57[0xe];
          bVar148 = puVar57[0xf];
          puVar52 = puVar57 + 0x10;
          puVar53 = puVar57 + 0x11;
          bVar109 = puVar57[0x12];
          bVar151 = puVar57[0x13];
          bVar112 = puVar57[0x14];
          bVar154 = puVar57[0x15];
          bVar115 = puVar57[0x16];
          bVar157 = puVar57[0x17];
          bVar118 = puVar57[0x18];
          bVar160 = puVar57[0x19];
          bVar121 = puVar57[0x1a];
          bVar163 = puVar57[0x1b];
          bVar124 = puVar57[0x1c];
          bVar166 = puVar57[0x1d];
          bVar127 = puVar57[0x1e];
          bVar169 = puVar57[0x1f];
          puVar57 = puVar57 + 0x20;
          local_340 = CONCAT11(bVar87,uVar80);
          uStack_338 = CONCAT11(bVar109,*puVar52);
          local_330 = CONCAT11(bVar130,*puVar51);
          uStack_328 = CONCAT11(bVar151,*puVar53);
          uVar80 = *puVar58;
          puVar51 = puVar58 + 1;
          bVar88 = puVar58[2];
          bVar131 = puVar58[3];
          bVar91 = puVar58[4];
          bVar134 = puVar58[5];
          bVar94 = puVar58[6];
          bVar137 = puVar58[7];
          bVar97 = puVar58[8];
          bVar140 = puVar58[9];
          bVar100 = puVar58[10];
          bVar143 = puVar58[0xb];
          bVar103 = puVar58[0xc];
          bVar146 = puVar58[0xd];
          bVar106 = puVar58[0xe];
          bVar149 = puVar58[0xf];
          puVar52 = puVar58 + 0x10;
          puVar53 = puVar58 + 0x11;
          bVar110 = puVar58[0x12];
          bVar152 = puVar58[0x13];
          bVar113 = puVar58[0x14];
          bVar155 = puVar58[0x15];
          bVar116 = puVar58[0x16];
          bVar158 = puVar58[0x17];
          bVar119 = puVar58[0x18];
          bVar161 = puVar58[0x19];
          bVar122 = puVar58[0x1a];
          bVar164 = puVar58[0x1b];
          bVar125 = puVar58[0x1c];
          bVar167 = puVar58[0x1d];
          bVar128 = puVar58[0x1e];
          bVar170 = puVar58[0x1f];
          puVar58 = puVar58 + 0x20;
          local_300 = CONCAT11(bVar88,uVar80);
          uStack_2f8 = CONCAT11(bVar110,*puVar52);
          local_2f0 = CONCAT11(bVar131,*puVar51);
          uStack_2e8 = CONCAT11(bVar152,*puVar53);
          local_2e0 = CONCAT11(bVar171,uVar85);
          uStack_2d8 = CONCAT11(bVar185,*puVar55);
          uVar80 = *puVar59;
          bVar172 = puVar59[2];
          bVar174 = puVar59[4];
          bVar176 = puVar59[6];
          bVar178 = puVar59[8];
          bVar180 = puVar59[10];
          bVar182 = puVar59[0xc];
          bVar184 = puVar59[0xe];
          puVar51 = puVar59 + 0x10;
          bVar186 = puVar59[0x12];
          bVar188 = puVar59[0x14];
          bVar190 = puVar59[0x16];
          bVar194 = puVar59[0x18];
          bVar196 = puVar59[0x1a];
          bVar198 = puVar59[0x1c];
          bVar200 = puVar59[0x1e];
          puVar59 = puVar59 + 0x20;
          uVar15 = CONCAT12(bVar84,local_320);
          uVar16 = CONCAT12(bVar108,uStack_318);
          local_320 = CONCAT11(bVar172,uVar80);
          uStack_318 = CONCAT11(bVar186,*puVar51);
          *piVar61 = (((uVar15 & 0xff00ff) & 0xffff) -
                     ((CONCAT12(bVar87,local_340) & 0xff00ff) & 0xffff)) * iVar65 +
                     (((CONCAT12(bVar88,local_300) & 0xff00ff) & 0xffff) -
                     ((CONCAT12(bVar171,local_2e0) & 0xff00ff) & 0xffff)) * iVar13;
          piVar61[1] = (((CONCAT12(bVar129,local_310) & 0xff00ff) & 0xffff) -
                       ((CONCAT12(bVar130,local_330) & 0xff00ff) & 0xffff)) * iVar65 +
                       (((CONCAT12(bVar131,local_2f0) & 0xff00ff) & 0xffff) -
                       ((CONCAT12(bVar172,local_320) & 0xff00ff) & 0xffff)) * iVar13;
          piVar61[2] = ((uint)bVar84 - (uint)bVar87) * iVar65 +
                       ((uint)bVar88 - (uint)bVar171) * iVar13;
          piVar61[3] = ((uint)bVar129 - (uint)bVar130) * iVar65 +
                       ((uint)bVar131 - (uint)bVar172) * iVar13;
          piVar61[4] = ((uint)bVar89 - (uint)bVar90) * iVar65 +
                       ((uint)bVar91 - (uint)bVar173) * iVar13;
          piVar61[5] = ((uint)bVar132 - (uint)bVar133) * iVar65 +
                       ((uint)bVar134 - (uint)bVar174) * iVar13;
          piVar61[6] = ((uint)bVar92 - (uint)bVar93) * iVar65 +
                       ((uint)bVar94 - (uint)bVar175) * iVar13;
          piVar61[7] = ((uint)bVar135 - (uint)bVar136) * iVar65 +
                       ((uint)bVar137 - (uint)bVar176) * iVar13;
          piVar61[8] = ((CONCAT12(bVar98,(ushort)bVar95) & 0xffff) -
                       (CONCAT12(bVar99,(ushort)bVar96) & 0xffff)) * iVar65 +
                       ((CONCAT12(bVar100,(ushort)bVar97) & 0xffff) -
                       (CONCAT12(bVar179,(ushort)bVar177) & 0xffff)) * iVar13;
          piVar61[9] = ((CONCAT12(bVar141,(ushort)bVar138) & 0xffff) -
                       (CONCAT12(bVar142,(ushort)bVar139) & 0xffff)) * iVar65 +
                       ((CONCAT12(bVar143,(ushort)bVar140) & 0xffff) -
                       (CONCAT12(bVar180,(ushort)bVar178) & 0xffff)) * iVar13;
          piVar61[10] = ((uint)bVar98 - (uint)bVar99) * iVar65 +
                        ((uint)bVar100 - (uint)bVar179) * iVar13;
          piVar61[0xb] = ((uint)bVar141 - (uint)bVar142) * iVar65 +
                         ((uint)bVar143 - (uint)bVar180) * iVar13;
          piVar61[0xc] = ((uint)bVar101 - (uint)bVar102) * iVar65 +
                         ((uint)bVar103 - (uint)bVar181) * iVar13;
          piVar61[0xd] = ((uint)bVar144 - (uint)bVar145) * iVar65 +
                         ((uint)bVar146 - (uint)bVar182) * iVar13;
          piVar61[0xe] = ((uint)bVar104 - (uint)bVar105) * iVar65 +
                         ((uint)bVar106 - (uint)bVar183) * iVar13;
          piVar61[0xf] = ((uint)bVar147 - (uint)bVar148) * iVar65 +
                         ((uint)bVar149 - (uint)bVar184) * iVar13;
          piVar61[0x10] =
               (((uVar16 & 0xff00ff) & 0xffff) -
               ((CONCAT12(bVar109,uStack_338) & 0xff00ff) & 0xffff)) * iVar65 +
               (((CONCAT12(bVar110,uStack_2f8) & 0xff00ff) & 0xffff) -
               ((CONCAT12(bVar185,uStack_2d8) & 0xff00ff) & 0xffff)) * iVar13;
          piVar61[0x11] =
               (((CONCAT12(bVar150,uStack_308) & 0xff00ff) & 0xffff) -
               ((CONCAT12(bVar151,uStack_328) & 0xff00ff) & 0xffff)) * iVar65 +
               (((CONCAT12(bVar152,uStack_2e8) & 0xff00ff) & 0xffff) -
               ((CONCAT12(bVar186,uStack_318) & 0xff00ff) & 0xffff)) * iVar13;
          piVar61[0x12] =
               ((uint)bVar108 - (uint)bVar109) * iVar65 + ((uint)bVar110 - (uint)bVar185) * iVar13;
          piVar61[0x13] =
               ((uint)bVar150 - (uint)bVar151) * iVar65 + ((uint)bVar152 - (uint)bVar186) * iVar13;
          piVar61[0x14] =
               ((uint)bVar111 - (uint)bVar112) * iVar65 + ((uint)bVar113 - (uint)bVar187) * iVar13;
          piVar61[0x15] =
               ((uint)bVar153 - (uint)bVar154) * iVar65 + ((uint)bVar155 - (uint)bVar188) * iVar13;
          piVar61[0x16] =
               ((uint)bVar114 - (uint)bVar115) * iVar65 + ((uint)bVar116 - (uint)bVar189) * iVar13;
          piVar61[0x17] =
               ((uint)bVar156 - (uint)bVar157) * iVar65 + ((uint)bVar158 - (uint)bVar190) * iVar13;
          piVar61[0x18] =
               ((CONCAT12(bVar120,(ushort)bVar117) & 0xffff) -
               (CONCAT12(bVar121,(ushort)bVar118) & 0xffff)) * iVar65 +
               ((CONCAT12(bVar122,(ushort)bVar119) & 0xffff) -
               (CONCAT12(bVar195,(ushort)bVar193) & 0xffff)) * iVar13;
          piVar61[0x19] =
               ((CONCAT12(bVar162,(ushort)bVar159) & 0xffff) -
               (CONCAT12(bVar163,(ushort)bVar160) & 0xffff)) * iVar65 +
               ((CONCAT12(bVar164,(ushort)bVar161) & 0xffff) -
               (CONCAT12(bVar196,(ushort)bVar194) & 0xffff)) * iVar13;
          piVar61[0x1a] =
               ((uint)bVar120 - (uint)bVar121) * iVar65 + ((uint)bVar122 - (uint)bVar195) * iVar13;
          piVar61[0x1b] =
               ((uint)bVar162 - (uint)bVar163) * iVar65 + ((uint)bVar164 - (uint)bVar196) * iVar13;
          piVar61[0x1c] =
               ((uint)bVar123 - (uint)bVar124) * iVar65 + ((uint)bVar125 - (uint)bVar197) * iVar13;
          piVar61[0x1d] =
               ((uint)bVar165 - (uint)bVar166) * iVar65 + ((uint)bVar167 - (uint)bVar198) * iVar13;
          piVar61[0x1e] =
               ((uint)bVar126 - (uint)bVar127) * iVar65 + ((uint)bVar128 - (uint)bVar199) * iVar13;
          piVar61[0x1f] =
               ((uint)bVar168 - (uint)bVar169) * iVar65 + ((uint)bVar170 - (uint)bVar200) * iVar13;
          piVar61 = piVar61 + 0x20;
        } while (uVar230 < uVar8);
        pbVar50 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
        uVar63 = uVar60 + uVar8 * 0x20;
        if (uVar12 == uVar8 * 0x10) goto LAB_001cbe18;
      }
      piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
      do {
        pbVar77 = pbVar50 + lVar227;
        pbVar75 = pbVar50 + lVar79;
        bVar84 = pbVar50[lVar79 + 1];
        uVar63 = uVar63 + 2;
        bVar87 = pbVar50[lVar69 * 2 + 1];
        bVar89 = pbVar50[1 - param_5];
        pbVar39 = pbVar50 + lVar69;
        bVar88 = pbVar50[lVar69 + 1];
        pbVar40 = pbVar50 + lVar226;
        pbVar50 = pbVar50 + 2;
        *piVar61 = ((uint)*pbVar77 - (uint)*pbVar75) * iVar65 +
                   ((uint)*pbVar39 - (uint)*pbVar40) * iVar13;
        piVar61[1] = ((uint)bVar87 - (uint)bVar84) * iVar65 + ((uint)bVar88 - (uint)bVar89) * iVar13
        ;
        piVar61 = piVar61 + 2;
      } while ((int)uVar63 < param_4 + -1);
    }
LAB_001cbe18:
    uVar60 = uVar60 + 2 + uVar73 * 2;
    pbVar71 = pbVar71 + ((ulong)uVar73 + 1) * 2;
    goto LAB_001ca220;
  }
  if (*(int *)(lVar72 + lVar74) == 0) {
    iVar13 = piVar10[1];
    if (iVar13 == 1) {
      if (param_4 + -1 <= (int)uVar60) goto LAB_001ca220;
      uVar230 = (param_4 + -2) - uVar60;
      piVar61 = (int *)(param_3 + lVar68 * 4);
      uVar73 = uVar230 >> 1;
      lVar79 = (long)-param_5;
      uVar12 = uVar73 + 1;
      lVar69 = (ulong)uVar12 * 2;
      lVar74 = lVar70 + lVar79 + 1;
      puVar54 = (undefined1 *)(param_2 + lVar74);
      puVar57 = (undefined1 *)(param_3 + (lVar68 + lVar69) * 4);
      puVar51 = (undefined1 *)(param_2 + lVar70 + lVar79);
      lVar68 = (long)param_5;
      puVar59 = (undefined1 *)(param_2 + lVar70 + lVar68);
      if ((uVar12 < 0x10 ||
           (puVar54 < puVar57 && piVar61 < (int *)(param_2 + lVar74 + lVar69) ||
           puVar51 < puVar57 && piVar61 < (int *)(param_2 + lVar69 + lVar70 + lVar79))) ||
         (puVar59 < puVar57 && piVar61 < (int *)(param_2 + lVar69 + lVar70 + lVar68))) {
        pbVar50 = pbVar71 + lVar68;
        do {
          pbVar77 = pbVar50 + 2;
          bVar84 = *pbVar50;
          bVar87 = pbVar50[lVar79 - lVar68];
          piVar61[1] = (uint)pbVar50[1] - (uint)pbVar50[(1 - param_5) - lVar68];
          *piVar61 = (uint)bVar84 - (uint)bVar87;
          piVar61 = piVar61 + 2;
          pbVar50 = pbVar77;
        } while (pbVar77 != pbVar71 + lVar68 + 2 + (ulong)uVar73 * 2);
      }
      else {
        uVar8 = (uVar73 - 0x10 >> 4) + 1;
        pbVar50 = pbVar71;
        uVar63 = uVar60;
        if (0x1f < uVar230) {
          uVar230 = 0;
          do {
            uVar80 = *puVar59;
            puVar58 = puVar59 + 1;
            bVar84 = puVar59[2];
            bVar129 = puVar59[3];
            bVar89 = puVar59[4];
            bVar130 = puVar59[5];
            bVar92 = puVar59[6];
            bVar131 = puVar59[7];
            bVar95 = puVar59[8];
            bVar132 = puVar59[9];
            bVar98 = puVar59[10];
            bVar133 = puVar59[0xb];
            bVar101 = puVar59[0xc];
            bVar134 = puVar59[0xd];
            bVar104 = puVar59[0xe];
            bVar135 = puVar59[0xf];
            puVar56 = puVar59 + 0x10;
            puVar57 = puVar59 + 0x11;
            bVar108 = puVar59[0x12];
            bVar136 = puVar59[0x13];
            bVar111 = puVar59[0x14];
            bVar137 = puVar59[0x15];
            bVar114 = puVar59[0x16];
            bVar138 = puVar59[0x17];
            bVar117 = puVar59[0x18];
            bVar139 = puVar59[0x19];
            bVar120 = puVar59[0x1a];
            bVar140 = puVar59[0x1b];
            bVar123 = puVar59[0x1c];
            bVar141 = puVar59[0x1d];
            bVar126 = puVar59[0x1e];
            bVar142 = puVar59[0x1f];
            puVar59 = puVar59 + 0x20;
            uVar230 = uVar230 + 1;
            local_3c0 = CONCAT11(bVar84,uVar80);
            uStack_3b8 = CONCAT11(bVar108,*puVar56);
            local_3b0 = CONCAT11(bVar129,*puVar58);
            uStack_3a8 = CONCAT11(bVar136,*puVar57);
            uVar80 = *puVar51;
            bVar87 = puVar51[2];
            bVar90 = puVar51[4];
            bVar93 = puVar51[6];
            bVar96 = puVar51[8];
            bVar99 = puVar51[10];
            bVar102 = puVar51[0xc];
            bVar105 = puVar51[0xe];
            puVar57 = puVar51 + 0x10;
            bVar109 = puVar51[0x12];
            bVar112 = puVar51[0x14];
            bVar115 = puVar51[0x16];
            bVar118 = puVar51[0x18];
            bVar121 = puVar51[0x1a];
            bVar124 = puVar51[0x1c];
            bVar127 = puVar51[0x1e];
            puVar51 = puVar51 + 0x20;
            local_380 = CONCAT11(bVar87,uVar80);
            uStack_378 = CONCAT11(bVar109,*puVar57);
            uVar80 = *puVar54;
            bVar88 = puVar54[2];
            bVar91 = puVar54[4];
            bVar94 = puVar54[6];
            bVar97 = puVar54[8];
            bVar100 = puVar54[10];
            bVar103 = puVar54[0xc];
            bVar106 = puVar54[0xe];
            puVar57 = puVar54 + 0x10;
            bVar110 = puVar54[0x12];
            bVar113 = puVar54[0x14];
            bVar116 = puVar54[0x16];
            bVar119 = puVar54[0x18];
            bVar122 = puVar54[0x1a];
            bVar125 = puVar54[0x1c];
            bVar128 = puVar54[0x1e];
            puVar54 = puVar54 + 0x20;
            local_3a0 = CONCAT11(bVar88,uVar80);
            uStack_398 = CONCAT11(bVar110,*puVar57);
            *piVar61 = ((CONCAT12(bVar84,local_3c0) & 0xff00ff) & 0xffff) -
                       ((CONCAT12(bVar87,local_380) & 0xff00ff) & 0xffff);
            piVar61[1] = ((CONCAT12(bVar129,local_3b0) & 0xff00ff) & 0xffff) -
                         ((CONCAT12(bVar88,local_3a0) & 0xff00ff) & 0xffff);
            piVar61[2] = (uint)bVar84 - (uint)bVar87;
            piVar61[3] = (uint)bVar129 - (uint)bVar88;
            piVar61[4] = (uint)bVar89 - (uint)bVar90;
            piVar61[5] = (uint)bVar130 - (uint)bVar91;
            piVar61[6] = (uint)bVar92 - (uint)bVar93;
            piVar61[7] = (uint)bVar131 - (uint)bVar94;
            piVar61[8] = (CONCAT12(bVar98,(ushort)bVar95) & 0xffff) -
                         (CONCAT12(bVar99,(ushort)bVar96) & 0xffff);
            piVar61[9] = (CONCAT12(bVar133,(ushort)bVar132) & 0xffff) -
                         (CONCAT12(bVar100,(ushort)bVar97) & 0xffff);
            piVar61[10] = (uint)bVar98 - (uint)bVar99;
            piVar61[0xb] = (uint)bVar133 - (uint)bVar100;
            piVar61[0xc] = (uint)bVar101 - (uint)bVar102;
            piVar61[0xd] = (uint)bVar134 - (uint)bVar103;
            piVar61[0xe] = (uint)bVar104 - (uint)bVar105;
            piVar61[0xf] = (uint)bVar135 - (uint)bVar106;
            piVar61[0x10] =
                 ((CONCAT12(bVar108,uStack_3b8) & 0xff00ff) & 0xffff) -
                 ((CONCAT12(bVar109,uStack_378) & 0xff00ff) & 0xffff);
            piVar61[0x11] =
                 ((CONCAT12(bVar136,uStack_3a8) & 0xff00ff) & 0xffff) -
                 ((CONCAT12(bVar110,uStack_398) & 0xff00ff) & 0xffff);
            piVar61[0x12] = (uint)bVar108 - (uint)bVar109;
            piVar61[0x13] = (uint)bVar136 - (uint)bVar110;
            piVar61[0x14] = (uint)bVar111 - (uint)bVar112;
            piVar61[0x15] = (uint)bVar137 - (uint)bVar113;
            piVar61[0x16] = (uint)bVar114 - (uint)bVar115;
            piVar61[0x17] = (uint)bVar138 - (uint)bVar116;
            piVar61[0x18] =
                 (CONCAT12(bVar120,(ushort)bVar117) & 0xffff) -
                 (CONCAT12(bVar121,(ushort)bVar118) & 0xffff);
            piVar61[0x19] =
                 (CONCAT12(bVar140,(ushort)bVar139) & 0xffff) -
                 (CONCAT12(bVar122,(ushort)bVar119) & 0xffff);
            piVar61[0x1a] = (uint)bVar120 - (uint)bVar121;
            piVar61[0x1b] = (uint)bVar140 - (uint)bVar122;
            piVar61[0x1c] = (uint)bVar123 - (uint)bVar124;
            piVar61[0x1d] = (uint)bVar141 - (uint)bVar125;
            piVar61[0x1e] = (uint)bVar126 - (uint)bVar127;
            piVar61[0x1f] = (uint)bVar142 - (uint)bVar128;
            piVar61 = piVar61 + 0x20;
          } while (uVar230 < uVar8);
          pbVar50 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
          uVar63 = uVar60 + uVar8 * 0x20;
          if (uVar12 == uVar8 * 0x10) goto LAB_001ccbe0;
        }
        piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
        do {
          bVar87 = pbVar50[1 - param_5];
          pbVar77 = pbVar50 + lVar68;
          uVar63 = uVar63 + 2;
          pbVar75 = pbVar50 + lVar79;
          bVar84 = pbVar50[lVar68 + 1];
          pbVar50 = pbVar50 + 2;
          *piVar61 = (uint)*pbVar77 - (uint)*pbVar75;
          piVar61[1] = (uint)bVar84 - (uint)bVar87;
          piVar61 = piVar61 + 2;
        } while ((int)uVar63 < param_4 + -1);
      }
LAB_001ccbe0:
      uVar60 = uVar60 + 2 + uVar73 * 2;
      pbVar71 = pbVar71 + ((ulong)uVar73 + 1) * 2;
      goto LAB_001ca220;
    }
  }
  else {
    iVar13 = piVar10[1];
  }
  if (param_4 + -1 <= (int)uVar60) goto LAB_001ca220;
  uVar230 = (param_4 + -2) - uVar60;
  piVar61 = (int *)(param_3 + lVar68 * 4);
  uVar73 = uVar230 >> 1;
  lVar79 = (long)-param_5;
  uVar12 = uVar73 + 1;
  lVar69 = (ulong)uVar12 * 2;
  lVar74 = lVar70 + lVar79 + 1;
  puVar54 = (undefined1 *)(param_2 + lVar74);
  puVar57 = (undefined1 *)(param_3 + (lVar68 + lVar69) * 4);
  puVar51 = (undefined1 *)(param_2 + lVar70 + lVar79);
  lVar68 = (long)param_5;
  puVar59 = (undefined1 *)(param_2 + lVar70 + lVar68);
  if ((uVar12 < 0x10 ||
       (puVar54 < puVar57 && piVar61 < (int *)(param_2 + lVar74 + lVar69) ||
       puVar51 < puVar57 && piVar61 < (int *)(param_2 + lVar69 + lVar70 + lVar79))) ||
     (puVar59 < puVar57 && piVar61 < (int *)(param_2 + lVar69 + lVar70 + lVar68))) {
    pbVar50 = pbVar71 + lVar68;
    do {
      bVar84 = pbVar50[1];
      pbVar77 = pbVar50 + 2;
      bVar87 = pbVar50[(1 - param_5) - lVar68];
      *piVar61 = ((uint)*pbVar50 - (uint)pbVar50[lVar79 - lVar68]) * iVar13;
      piVar61[1] = ((uint)bVar84 - (uint)bVar87) * iVar13;
      piVar61 = piVar61 + 2;
      pbVar50 = pbVar77;
    } while (pbVar77 != pbVar71 + lVar68 + 2 + (ulong)uVar73 * 2);
  }
  else {
    uVar8 = (uVar73 - 0x10 >> 4) + 1;
    pbVar50 = pbVar71;
    uVar63 = uVar60;
    if (0x1f < uVar230) {
      uVar230 = 0;
      do {
        uVar80 = *puVar59;
        puVar58 = puVar59 + 1;
        bVar84 = puVar59[2];
        bVar129 = puVar59[3];
        bVar89 = puVar59[4];
        bVar130 = puVar59[5];
        bVar92 = puVar59[6];
        bVar131 = puVar59[7];
        bVar95 = puVar59[8];
        bVar132 = puVar59[9];
        bVar98 = puVar59[10];
        bVar133 = puVar59[0xb];
        bVar101 = puVar59[0xc];
        bVar134 = puVar59[0xd];
        bVar104 = puVar59[0xe];
        bVar135 = puVar59[0xf];
        puVar56 = puVar59 + 0x10;
        puVar57 = puVar59 + 0x11;
        bVar108 = puVar59[0x12];
        bVar136 = puVar59[0x13];
        bVar111 = puVar59[0x14];
        bVar137 = puVar59[0x15];
        bVar114 = puVar59[0x16];
        bVar138 = puVar59[0x17];
        bVar117 = puVar59[0x18];
        bVar139 = puVar59[0x19];
        bVar120 = puVar59[0x1a];
        bVar140 = puVar59[0x1b];
        bVar123 = puVar59[0x1c];
        bVar141 = puVar59[0x1d];
        bVar126 = puVar59[0x1e];
        bVar142 = puVar59[0x1f];
        puVar59 = puVar59 + 0x20;
        uVar230 = uVar230 + 1;
        local_3c0 = CONCAT11(bVar84,uVar80);
        uStack_3b8 = CONCAT11(bVar108,*puVar56);
        local_3b0 = CONCAT11(bVar129,*puVar58);
        uStack_3a8 = CONCAT11(bVar136,*puVar57);
        uVar80 = *puVar51;
        bVar87 = puVar51[2];
        bVar90 = puVar51[4];
        bVar93 = puVar51[6];
        bVar96 = puVar51[8];
        bVar99 = puVar51[10];
        bVar102 = puVar51[0xc];
        bVar105 = puVar51[0xe];
        puVar57 = puVar51 + 0x10;
        bVar109 = puVar51[0x12];
        bVar112 = puVar51[0x14];
        bVar115 = puVar51[0x16];
        bVar118 = puVar51[0x18];
        bVar121 = puVar51[0x1a];
        bVar124 = puVar51[0x1c];
        bVar127 = puVar51[0x1e];
        puVar51 = puVar51 + 0x20;
        local_380 = CONCAT11(bVar87,uVar80);
        uStack_378 = CONCAT11(bVar109,*puVar57);
        uVar80 = *puVar54;
        bVar88 = puVar54[2];
        bVar91 = puVar54[4];
        bVar94 = puVar54[6];
        bVar97 = puVar54[8];
        bVar100 = puVar54[10];
        bVar103 = puVar54[0xc];
        bVar106 = puVar54[0xe];
        puVar57 = puVar54 + 0x10;
        bVar110 = puVar54[0x12];
        bVar113 = puVar54[0x14];
        bVar116 = puVar54[0x16];
        bVar119 = puVar54[0x18];
        bVar122 = puVar54[0x1a];
        bVar125 = puVar54[0x1c];
        bVar128 = puVar54[0x1e];
        puVar54 = puVar54 + 0x20;
        local_3a0 = CONCAT11(bVar88,uVar80);
        uStack_398 = CONCAT11(bVar110,*puVar57);
        *piVar61 = (((CONCAT12(bVar84,local_3c0) & 0xff00ff) & 0xffff) -
                   ((CONCAT12(bVar87,local_380) & 0xff00ff) & 0xffff)) * iVar13;
        piVar61[1] = (((CONCAT12(bVar129,local_3b0) & 0xff00ff) & 0xffff) -
                     ((CONCAT12(bVar88,local_3a0) & 0xff00ff) & 0xffff)) * iVar13;
        piVar61[2] = ((uint)bVar84 - (uint)bVar87) * iVar13;
        piVar61[3] = ((uint)bVar129 - (uint)bVar88) * iVar13;
        piVar61[4] = ((uint)bVar89 - (uint)bVar90) * iVar13;
        piVar61[5] = ((uint)bVar130 - (uint)bVar91) * iVar13;
        piVar61[6] = ((uint)bVar92 - (uint)bVar93) * iVar13;
        piVar61[7] = ((uint)bVar131 - (uint)bVar94) * iVar13;
        piVar61[8] = ((CONCAT12(bVar98,(ushort)bVar95) & 0xffff) -
                     (CONCAT12(bVar99,(ushort)bVar96) & 0xffff)) * iVar13;
        piVar61[9] = ((CONCAT12(bVar133,(ushort)bVar132) & 0xffff) -
                     (CONCAT12(bVar100,(ushort)bVar97) & 0xffff)) * iVar13;
        piVar61[10] = ((uint)bVar98 - (uint)bVar99) * iVar13;
        piVar61[0xb] = ((uint)bVar133 - (uint)bVar100) * iVar13;
        piVar61[0xc] = ((uint)bVar101 - (uint)bVar102) * iVar13;
        piVar61[0xd] = ((uint)bVar134 - (uint)bVar103) * iVar13;
        piVar61[0xe] = ((uint)bVar104 - (uint)bVar105) * iVar13;
        piVar61[0xf] = ((uint)bVar135 - (uint)bVar106) * iVar13;
        piVar61[0x10] =
             (((CONCAT12(bVar108,uStack_3b8) & 0xff00ff) & 0xffff) -
             ((CONCAT12(bVar109,uStack_378) & 0xff00ff) & 0xffff)) * iVar13;
        piVar61[0x11] =
             (((CONCAT12(bVar136,uStack_3a8) & 0xff00ff) & 0xffff) -
             ((CONCAT12(bVar110,uStack_398) & 0xff00ff) & 0xffff)) * iVar13;
        piVar61[0x12] = ((uint)bVar108 - (uint)bVar109) * iVar13;
        piVar61[0x13] = ((uint)bVar136 - (uint)bVar110) * iVar13;
        piVar61[0x14] = ((uint)bVar111 - (uint)bVar112) * iVar13;
        piVar61[0x15] = ((uint)bVar137 - (uint)bVar113) * iVar13;
        piVar61[0x16] = ((uint)bVar114 - (uint)bVar115) * iVar13;
        piVar61[0x17] = ((uint)bVar138 - (uint)bVar116) * iVar13;
        piVar61[0x18] =
             ((CONCAT12(bVar120,(ushort)bVar117) & 0xffff) -
             (CONCAT12(bVar121,(ushort)bVar118) & 0xffff)) * iVar13;
        piVar61[0x19] =
             ((CONCAT12(bVar140,(ushort)bVar139) & 0xffff) -
             (CONCAT12(bVar122,(ushort)bVar119) & 0xffff)) * iVar13;
        piVar61[0x1a] = ((uint)bVar120 - (uint)bVar121) * iVar13;
        piVar61[0x1b] = ((uint)bVar140 - (uint)bVar122) * iVar13;
        piVar61[0x1c] = ((uint)bVar123 - (uint)bVar124) * iVar13;
        piVar61[0x1d] = ((uint)bVar141 - (uint)bVar125) * iVar13;
        piVar61[0x1e] = ((uint)bVar126 - (uint)bVar127) * iVar13;
        piVar61[0x1f] = ((uint)bVar142 - (uint)bVar128) * iVar13;
        piVar61 = piVar61 + 0x20;
      } while (uVar230 < uVar8);
      pbVar50 = pbVar71 + (ulong)(uVar8 * 0x10) * 2;
      uVar63 = uVar60 + uVar8 * 0x20;
      if (uVar12 == uVar8 * 0x10) goto LAB_001cb230;
    }
    piVar61 = (int *)(param_3 + (long)(int)uVar63 * 4);
    do {
      bVar87 = pbVar50[1 - param_5];
      pbVar77 = pbVar50 + lVar68;
      pbVar75 = pbVar50 + lVar79;
      uVar63 = uVar63 + 2;
      bVar84 = pbVar50[lVar68 + 1];
      pbVar50 = pbVar50 + 2;
      *piVar61 = ((uint)*pbVar77 - (uint)*pbVar75) * iVar13;
      piVar61[1] = ((uint)bVar84 - (uint)bVar87) * iVar13;
      piVar61 = piVar61 + 2;
    } while ((int)uVar63 < param_4 + -1);
  }
LAB_001cb230:
  uVar60 = uVar60 + 2 + uVar73 * 2;
  pbVar71 = pbVar71 + ((ulong)uVar73 + 1) * 2;
LAB_001ca220:
  if ((int)uVar60 < param_4) {
    lVar70 = (long)param_5;
    iVar13 = -param_5;
    lVar68 = (long)iVar13;
    lVar69 = NEON_shl(lVar70,1);
    uVar12 = -((uint)((ulong)(lVar72 + (lVar64 + 1) * 4) >> 2) & 3) & 3;
    lVar74 = NEON_shl(lVar68,1);
    if (uVar11 < uVar12) {
      uVar12 = uVar11;
    }
    lVar223 = NEON_shl(lVar70,2);
    lVar79 = lVar69 + lVar70;
    lVar224 = NEON_shl(lVar68,2);
    lVar219 = NEON_shl(lVar70,3);
    lVar228 = NEON_shl(lVar79,1);
    lVar226 = lVar74 + lVar68;
    lVar229 = NEON_shl(lVar79,2);
    lVar225 = NEON_shl(lVar70,4);
    pbVar50 = pbVar71 + (ulong)((param_4 + -1) - uVar60) + 1;
    lVar81 = NEON_shl(lVar226,1);
    lVar191 = NEON_shl(lVar226,2);
    lVar231 = NEON_shl(lVar68,3);
    lVar232 = NEON_shl(lVar223 + lVar70,1);
    lVar227 = NEON_shl(lVar224 + lVar68,1);
    piVar61 = (int *)(param_3 + (long)(int)uVar60 * 4);
    do {
      iVar65 = (uint)*pbVar71 * *piVar10;
      if (0 < (int)uVar11) {
        uVar60 = uVar12;
        if (uVar11 < 0x12) {
          uVar60 = uVar11;
        }
        if (uVar60 == 0) {
          uVar78 = 1;
          iVar62 = param_5;
        }
        else {
          iVar65 = iVar65 + ((uint)pbVar71[lVar70] - (uint)pbVar71[iVar13]) * piVar10[1];
          if (uVar60 == 1) {
            uVar78 = 2;
            iVar62 = param_5 * 2;
          }
          else {
            iVar65 = iVar65 + ((uint)pbVar71[lVar69] - (uint)pbVar71[param_5 * -2]) * piVar10[2];
            if (uVar60 == 2) {
              uVar78 = 3;
              iVar62 = param_5 * 3;
            }
            else {
              iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 2] - (uint)pbVar71[param_5 * -3])
                                * piVar10[3];
              if (uVar60 == 3) {
                uVar78 = 4;
                iVar62 = param_5 * 4;
              }
              else {
                iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 3] - (uint)pbVar71[param_5 * -4]
                                  ) * piVar10[4];
                if (uVar60 == 4) {
                  uVar78 = 5;
                  iVar62 = param_5 * 5;
                }
                else {
                  iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 4] -
                                    (uint)pbVar71[param_5 * -5]) * piVar10[5];
                  if (uVar60 == 5) {
                    uVar78 = 6;
                    iVar62 = param_5 * 6;
                  }
                  else {
                    iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 5] -
                                      (uint)pbVar71[param_5 * -6]) * piVar10[6];
                    if (uVar60 == 6) {
                      uVar78 = 7;
                      iVar62 = param_5 * 7;
                    }
                    else {
                      iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 6] -
                                        (uint)pbVar71[param_5 * -7]) * piVar10[7];
                      if (uVar60 == 7) {
                        uVar78 = 8;
                        iVar62 = param_5 * 8;
                      }
                      else {
                        iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 7] -
                                          (uint)pbVar71[param_5 * -8]) * piVar10[8];
                        if (uVar60 == 8) {
                          uVar78 = 9;
                          iVar62 = param_5 * 9;
                        }
                        else {
                          iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 8] -
                                            (uint)pbVar71[param_5 * -9]) * piVar10[9];
                          if (uVar60 == 9) {
                            uVar78 = 10;
                            iVar62 = param_5 * 10;
                          }
                          else {
                            iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 9] -
                                              (uint)pbVar71[param_5 * -10]) * piVar10[10];
                            if (uVar60 == 10) {
                              uVar78 = 0xb;
                              iVar62 = param_5 * 0xb;
                            }
                            else {
                              iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 10] -
                                                (uint)pbVar71[param_5 * -0xb]) * piVar10[0xb];
                              if (uVar60 == 0xb) {
                                uVar78 = 0xc;
                                iVar62 = param_5 * 0xc;
                              }
                              else {
                                iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0xb] -
                                                  (uint)pbVar71[param_5 * -0xc]) * piVar10[0xc];
                                if (uVar60 == 0xc) {
                                  uVar78 = 0xd;
                                  iVar62 = param_5 * 0xd;
                                }
                                else {
                                  iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0xc] -
                                                    (uint)pbVar71[param_5 * -0xd]) * piVar10[0xd];
                                  if (uVar60 == 0xd) {
                                    uVar78 = 0xe;
                                    iVar62 = param_5 * 0xe;
                                  }
                                  else {
                                    iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0xd] -
                                                      (uint)pbVar71[param_5 * -0xe]) * piVar10[0xe];
                                    if (uVar60 == 0xe) {
                                      uVar78 = 0xf;
                                      iVar62 = param_5 * 0xf;
                                    }
                                    else {
                                      iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0xe] -
                                                        (uint)pbVar71[param_5 * -0xf]) *
                                                        piVar10[0xf];
                                      if (uVar60 == 0xf) {
                                        uVar78 = 0x10;
                                        iVar62 = param_5 * 0x10;
                                      }
                                      else {
                                        iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0xf] -
                                                          (uint)pbVar71[param_5 * -0x10]) *
                                                          piVar10[0x10];
                                        if (uVar60 == 0x11) {
                                          uVar78 = 0x12;
                                          iVar65 = iVar65 + ((uint)pbVar71[lVar70 + param_5 * 0x10]
                                                            - (uint)pbVar71[param_5 * -0x11]) *
                                                            piVar10[0x11];
                                          iVar62 = param_5 * 0x12;
                                        }
                                        else {
                                          uVar78 = 0x11;
                                          iVar62 = param_5 * 0x11;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar11 == uVar60) goto LAB_001cac48;
        }
        uVar73 = ((uVar11 - uVar60) - 0x10 >> 4) + 1;
        iVar14 = uVar73 * 0x10;
        if (0xe < (uVar11 - 1) - uVar60) {
          lVar9 = (ulong)uVar60 + 1;
          iVar218 = 0;
          iVar220 = 0;
          iVar221 = 0;
          iVar222 = 0;
          pbVar77 = pbVar71 + lVar9 * lVar70;
          pbVar75 = pbVar71 + lVar9 * iVar13;
          uVar230 = 0;
          puVar67 = (undefined8 *)(lVar72 + (lVar64 + 1 + (ulong)uVar60) * 4);
          do {
            bVar84 = *pbVar77;
            uVar230 = uVar230 + 1;
            bVar88 = pbVar77[lVar70];
            pbVar39 = pbVar77 + lVar69;
            pbVar40 = pbVar77 + lVar79;
            pbVar35 = pbVar77 + lVar223;
            pbVar33 = pbVar77 + lVar223 + lVar70;
            pbVar34 = pbVar77 + lVar228;
            pbVar30 = pbVar77 + (lVar219 - lVar70);
            pbVar31 = pbVar77 + lVar219;
            bVar89 = pbVar77[lVar219 + lVar70];
            pbVar32 = pbVar77 + lVar232;
            pbVar36 = pbVar77 + lVar232 + lVar70;
            pbVar37 = pbVar77 + lVar229;
            pbVar38 = pbVar77 + lVar229 + lVar70;
            pbVar41 = pbVar77 + (lVar225 - lVar69);
            pbVar42 = pbVar77 + (lVar225 - lVar70);
            pbVar77 = pbVar77 + (long)param_5 * 0x10;
            bVar87 = *pbVar75;
            pbVar43 = pbVar75 + lVar68;
            pbVar44 = pbVar75 + lVar74;
            pbVar45 = pbVar75 + lVar226;
            pbVar46 = pbVar75 + lVar224;
            pbVar47 = pbVar75 + lVar224 + lVar68;
            pbVar49 = pbVar75 + lVar81;
            pbVar48 = pbVar75 + (lVar231 - lVar68);
            pbVar1 = pbVar75 + lVar231;
            bVar90 = pbVar75[lVar231 + lVar68];
            pbVar2 = pbVar75 + lVar227;
            pbVar3 = pbVar75 + lVar227 + lVar68;
            pbVar4 = pbVar75 + lVar191;
            pbVar5 = pbVar75 + lVar191 + lVar68;
            pbVar6 = pbVar75 + (lVar68 * 0x10 - lVar74);
            pbVar7 = pbVar75 + lVar68 * 0xf;
            pbVar75 = pbVar75 + (long)iVar13 * 0x10;
            iVar218 = iVar218 + (((CONCAT12(bVar88,CONCAT11(bVar88,bVar84)) & 0xff00ff) & 0xffff) -
                                (CONCAT12(*pbVar43,(ushort)bVar87) & 0xffff)) * (int)*puVar67 +
                      ((CONCAT12(*pbVar33,(ushort)*pbVar35) & 0xffff) -
                      (CONCAT12(*pbVar47,(ushort)*pbVar46) & 0xffff)) * (int)puVar67[2] +
                      (((CONCAT12(bVar89,CONCAT11(bVar89,*pbVar31)) & 0xff00ff) & 0xffff) -
                      ((CONCAT12(bVar90,CONCAT11(bVar90,*pbVar1)) & 0xff00ff) & 0xffff)) *
                      (int)puVar67[4] +
                      ((CONCAT12(*pbVar38,(ushort)*pbVar37) & 0xffff) -
                      (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff)) * *(int *)(puVar67 + 6);
            iVar220 = iVar220 + ((uint)bVar88 - (uint)*pbVar43) * (int)((ulong)*puVar67 >> 0x20) +
                      ((uint)*pbVar33 - (uint)*pbVar47) * (int)((ulong)puVar67[2] >> 0x20) +
                      ((uint)bVar89 - (uint)bVar90) * (int)((ulong)puVar67[4] >> 0x20) +
                      ((uint)*pbVar38 - (uint)*pbVar5) * *(int *)((long)puVar67 + 0x34);
            iVar221 = iVar221 + ((uint)*pbVar39 - (CONCAT12(*pbVar45,(ushort)*pbVar44) & 0xffff)) *
                                (int)puVar67[1] +
                      ((uint)*pbVar34 - (uint)*pbVar49) * (int)puVar67[3] +
                      ((uint)*pbVar32 - (uint)*pbVar2) * (int)puVar67[5] +
                      ((uint)*pbVar41 - (uint)*pbVar6) * *(int *)(puVar67 + 7);
            iVar222 = iVar222 + ((uint)*pbVar40 - (uint)*pbVar45) * (int)((ulong)puVar67[1] >> 0x20)
                      + ((uint)*pbVar30 - (uint)*pbVar48) * (int)((ulong)puVar67[3] >> 0x20) +
                      ((uint)*pbVar36 - (uint)*pbVar3) * (int)((ulong)puVar67[5] >> 0x20) +
                      ((uint)*pbVar42 - (uint)*pbVar7) * *(int *)((long)puVar67 + 0x3c);
            puVar67 = puVar67 + 8;
          } while (uVar230 < uVar73);
          uVar78 = (ulong)(uint)((int)uVar78 + iVar14);
          iVar62 = iVar62 + param_5 * iVar14;
          iVar65 = iVar65 + iVar218 + iVar220 + iVar221 + iVar222;
          if (uVar11 - uVar60 == iVar14) goto LAB_001cac48;
        }
        uVar76 = -(uVar78 >> 0x1f) & 0xfffffffc00000000 | uVar78 << 2;
        iVar218 = (int)uVar78;
        iVar14 = param_5 + iVar62;
        iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                          *(int *)((long)piVar10 + uVar76);
        if (iVar218 + 1 <= (int)uVar11) {
          iVar62 = param_5 + iVar14;
          iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                            *(int *)((long)piVar10 + uVar76 + 4);
          if (iVar218 + 2 <= (int)uVar11) {
            iVar14 = param_5 + iVar62;
            iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                              *(int *)((long)piVar10 + uVar76 + 8);
            if (iVar218 + 3 <= (int)uVar11) {
              iVar62 = param_5 + iVar14;
              iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                                *(int *)((long)piVar10 + uVar76 + 0xc);
              if (iVar218 + 4 <= (int)uVar11) {
                iVar14 = param_5 + iVar62;
                iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                                  *(int *)((long)piVar10 + uVar76 + 0x10);
                if (iVar218 + 5 <= (int)uVar11) {
                  iVar62 = param_5 + iVar14;
                  iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                                    *(int *)((long)piVar10 + uVar76 + 0x14);
                  if (iVar218 + 6 <= (int)uVar11) {
                    iVar14 = param_5 + iVar62;
                    iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                                      *(int *)((long)piVar10 + uVar76 + 0x18);
                    if (iVar218 + 7 <= (int)uVar11) {
                      iVar62 = param_5 + iVar14;
                      iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                                        *(int *)((long)piVar10 + uVar76 + 0x1c);
                      if (iVar218 + 8 <= (int)uVar11) {
                        iVar14 = param_5 + iVar62;
                        iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                                          *(int *)((long)piVar10 + uVar76 + 0x20);
                        if (iVar218 + 9 <= (int)uVar11) {
                          iVar62 = param_5 + iVar14;
                          iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                                            *(int *)((long)piVar10 + uVar76 + 0x24);
                          if (iVar218 + 10 <= (int)uVar11) {
                            iVar14 = param_5 + iVar62;
                            iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                                              *(int *)((long)piVar10 + uVar76 + 0x28);
                            if (iVar218 + 0xb <= (int)uVar11) {
                              iVar62 = param_5 + iVar14;
                              iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14]) *
                                                *(int *)((long)piVar10 + uVar76 + 0x2c);
                              if (iVar218 + 0xc <= (int)uVar11) {
                                iVar14 = param_5 + iVar62;
                                iVar65 = iVar65 + ((uint)pbVar71[iVar62] - (uint)pbVar71[-iVar62]) *
                                                  *(int *)((long)piVar10 + uVar76 + 0x30);
                                if (iVar218 + 0xd <= (int)uVar11) {
                                  iVar65 = iVar65 + ((uint)pbVar71[iVar14] - (uint)pbVar71[-iVar14])
                                                    * *(int *)((long)piVar10 + uVar76 + 0x34);
                                  if (iVar218 + 0xe <= (int)uVar11) {
                                    iVar65 = iVar65 + ((uint)pbVar71[param_5 + iVar14] -
                                                      (uint)pbVar71[-(param_5 + iVar14)]) *
                                                      *(int *)((long)piVar10 + uVar76 + 0x38);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001cac48:
      pbVar71 = pbVar71 + 1;
      *piVar61 = iVar65;
      piVar61 = piVar61 + 1;
    } while (pbVar71 != pbVar50);
  }
  return;
}


==================================================================

### FUNC 001cceb4 (6480 bytes) name=FUN_001cceb4

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_001cceb4(long param_1,long param_2,long param_3,int param_4,int param_5)

{
  undefined1 *puVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  undefined1 *puVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  undefined1 *puVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  long lVar23;
  long lVar24;
  uint uVar25;
  uint uVar26;
  int iVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  byte bVar30;
  byte bVar31;
  byte bVar32;
  uint uVar33;
  uint uVar34;
  byte *pbVar35;
  byte *pbVar36;
  uint3 uVar37;
  long lVar38;
  long lVar39;
  long lVar40;
  long lVar41;
  long lVar42;
  long lVar43;
  int iVar44;
  long lVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  int *piVar49;
  long lVar50;
  byte *pbVar51;
  undefined1 *puVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  ulong uVar56;
  byte *pbVar57;
  undefined1 *puVar58;
  long lVar59;
  undefined1 *puVar60;
  byte *pbVar61;
  byte *pbVar62;
  long lVar63;
  byte *pbVar64;
  long lVar65;
  long lVar66;
  long lVar67;
  long lVar68;
  ulong uVar69;
  byte *pbVar70;
  long lVar71;
  long lVar72;
  byte *pbVar73;
  long lVar74;
  int *piVar75;
  uint uVar76;
  long lVar77;
  long lVar78;
  long lVar79;
  long lVar80;
  int iVar81;
  int iVar82;
  int iVar83;
  int iVar84;
  byte *pbVar85;
  long lVar86;
  byte *pbVar87;
  int iVar88;
  int iVar89;
  int iVar90;
  int iVar91;
  int iVar92;
  int iVar93;
  int iVar94;
  int iVar95;
  int iVar96;
  int iVar97;
  int iVar98;
  int iVar99;
  int iVar100;
  int iVar101;
  int iVar102;
  byte *pbVar103;
  long lVar104;
  byte *pbVar105;
  int iVar106;
  int iVar107;
  int iVar108;
  int iVar109;
  byte *pbVar110;
  int iVar111;
  int iVar112;
  int iVar113;
  int iVar114;
  int iVar115;
  int iVar116;
  int iVar117;
  int iVar118;
  int iVar119;
  int iVar120;
  int iVar121;
  int iVar122;
  long lVar123;
  byte *local_200;
  byte *local_1f8;
  byte *local_1f0;
  byte *local_1e8;
  byte *local_1e0;
  byte *local_1d8;
  byte *local_1d0;
  long local_1c8;
  long local_1c0;
  long local_1b8;
  long local_1b0;
  undefined8 *local_1a8;
  long local_1a0;
  uint local_188;
  int local_78;
  
  iVar27 = *(int *)(param_1 + 8);
  piVar75 = *(int **)(param_1 + 0x20);
  local_78 = FUN_001c9220(param_1 + 0x70);
  param_4 = param_4 * param_5;
  if (local_78 < param_4 + -3) {
    lVar50 = (long)param_5;
    uVar34 = iVar27 - 1;
    uVar25 = -((uint)((ulong)(piVar75 + 1) >> 2) & 3) & 3;
    lVar45 = lVar50 * 2;
    lVar46 = lVar50 * 4;
    lVar74 = (long)local_78;
    if (uVar34 < uVar25) {
      uVar25 = uVar34;
    }
    uVar26 = uVar34;
    if (0x11 < uVar34) {
      uVar26 = uVar25;
    }
    uVar33 = (uint)((param_4 + -4) - local_78) >> 2;
    lVar41 = lVar50 * 5;
    lVar47 = lVar50 * 8;
    uVar25 = ((uVar34 - uVar26) - 0x10 >> 4) + 1;
    lVar38 = lVar50 * 3;
    lVar48 = lVar50 * 0x10;
    uVar76 = uVar25 * 0x10;
    pbVar57 = (byte *)(param_2 + lVar74 + lVar45);
    lVar42 = lVar50 * 0xe;
    lVar77 = NEON_shl(lVar41,1);
    lVar43 = lVar50 * 9;
    lVar39 = lVar50 * 0xf;
    lVar80 = NEON_shl(lVar38,2);
    lVar78 = NEON_shl(lVar38,1);
    lVar23 = lVar77 + lVar50;
    lVar63 = (ulong)uVar26 * lVar50;
    lVar40 = lVar50 * 7;
    pbVar54 = (byte *)(param_2 + lVar74 + lVar38);
    lVar24 = lVar80 + lVar50;
    local_1d0 = (byte *)(param_2 + lVar74 + lVar50 * 0x10);
    local_200 = (byte *)(param_2 + lVar74 + lVar50 * 10);
    local_1f8 = (byte *)(param_2 + lVar74 + lVar50 * 0xb);
    local_1f0 = (byte *)(param_2 + lVar74 + lVar50 * 0xc);
    lVar66 = lVar74 + lVar50;
    local_1e8 = (byte *)(param_2 + lVar74 + lVar50 * 0xd);
    local_1e0 = (byte *)(param_2 + lVar74 + lVar50 * 0xe);
    local_1d8 = (byte *)(param_2 + lVar74 + lVar50 * 0xf);
    lVar59 = param_2 + lVar74 + lVar46;
    lVar104 = param_2 + lVar74 + lVar78;
    lVar123 = param_2 + lVar74 + lVar40;
    lVar65 = param_2 + lVar74 + lVar47;
    pbVar51 = (byte *)(param_2 + lVar74);
    pbVar62 = (byte *)(param_2 + lVar74 + lVar50 * 0x11);
    local_1c8 = param_2 + lVar74 + (long)param_5 * 0x11;
    pbVar73 = (byte *)(param_2 + lVar74 + lVar50 * 4);
    pbVar61 = (byte *)(param_2 + lVar66);
    pbVar85 = (byte *)(param_2 + lVar74 + lVar50 * 5);
    pbVar87 = (byte *)(param_2 + lVar74 + lVar50 * 6);
    local_1a0 = 0;
    pbVar103 = (byte *)(param_2 + lVar74 + lVar50 * 7);
    pbVar105 = (byte *)(param_2 + lVar74 + lVar50 * 8);
    pbVar110 = (byte *)(param_2 + lVar74 + lVar50 * 9);
    lVar86 = param_2 + lVar74 + lVar41;
    local_1c0 = param_2 + lVar74 + lVar43;
    local_1b8 = param_2 + lVar74 + lVar77;
    lVar72 = param_2 + lVar74 + lVar23;
    lVar71 = param_2 + lVar74 + lVar80;
    lVar79 = param_2 + lVar74 + lVar24;
    local_1b0 = param_2 + lVar74 + lVar42;
    lVar67 = param_2 + lVar74 + lVar39;
    lVar68 = param_2 + lVar74 + lVar48;
    pbVar70 = pbVar54;
    pbVar64 = pbVar57;
    local_1a8 = (undefined8 *)(param_3 + lVar74 * 4);
    do {
      iVar44 = *piVar75;
      iVar93 = (uint)*pbVar51 * iVar44;
      iVar91 = (uint)pbVar51[1] * iVar44;
      iVar89 = (uint)pbVar51[2] * iVar44;
      iVar44 = (uint)pbVar51[3] * iVar44;
      if (1 < iVar27) {
        if (uVar26 == 0) {
          uVar69 = 1;
          pbVar53 = pbVar51;
        }
        else {
          iVar106 = piVar75[1];
          iVar93 = iVar93 + (uint)*pbVar61 * iVar106;
          iVar91 = iVar91 + (uint)pbVar61[1] * iVar106;
          iVar89 = iVar89 + (uint)pbVar61[2] * iVar106;
          iVar44 = iVar44 + (uint)pbVar61[3] * iVar106;
          if (uVar26 == 1) {
            uVar69 = 2;
            pbVar53 = pbVar61;
          }
          else {
            iVar106 = piVar75[2];
            iVar91 = iVar91 + (uint)pbVar57[1] * iVar106;
            iVar89 = iVar89 + (uint)pbVar57[2] * iVar106;
            iVar93 = iVar93 + (uint)*pbVar64 * iVar106;
            iVar44 = iVar44 + (uint)pbVar57[3] * iVar106;
            if (uVar26 == 2) {
              uVar69 = 3;
              pbVar53 = pbVar64;
            }
            else {
              iVar106 = piVar75[3];
              iVar91 = iVar91 + (uint)pbVar54[1] * iVar106;
              iVar89 = iVar89 + (uint)pbVar54[2] * iVar106;
              iVar93 = iVar93 + (uint)*pbVar70 * iVar106;
              iVar44 = iVar44 + (uint)pbVar54[3] * iVar106;
              if (uVar26 == 3) {
                uVar69 = 4;
                pbVar53 = pbVar70;
              }
              else {
                iVar106 = piVar75[4];
                iVar91 = iVar91 + (uint)*(byte *)(lVar59 + 1) * iVar106;
                iVar89 = iVar89 + (uint)*(byte *)(lVar59 + 2) * iVar106;
                iVar93 = iVar93 + (uint)*pbVar73 * iVar106;
                iVar44 = iVar44 + (uint)*(byte *)(lVar59 + 3) * iVar106;
                if (uVar26 == 4) {
                  uVar69 = 5;
                  pbVar53 = pbVar73;
                }
                else {
                  iVar106 = piVar75[5];
                  iVar91 = iVar91 + (uint)*(byte *)(lVar86 + 1) * iVar106;
                  iVar89 = iVar89 + (uint)*(byte *)(lVar86 + 2) * iVar106;
                  iVar93 = iVar93 + (uint)*pbVar85 * iVar106;
                  iVar44 = iVar44 + (uint)*(byte *)(lVar86 + 3) * iVar106;
                  if (uVar26 == 5) {
                    uVar69 = 6;
                    pbVar53 = pbVar85;
                  }
                  else {
                    iVar106 = piVar75[6];
                    iVar91 = iVar91 + (uint)*(byte *)(lVar104 + 1) * iVar106;
                    iVar89 = iVar89 + (uint)*(byte *)(lVar104 + 2) * iVar106;
                    iVar93 = iVar93 + (uint)*pbVar87 * iVar106;
                    iVar44 = iVar44 + (uint)*(byte *)(lVar104 + 3) * iVar106;
                    if (uVar26 == 6) {
                      uVar69 = 7;
                      pbVar53 = pbVar87;
                    }
                    else {
                      iVar106 = piVar75[7];
                      iVar91 = iVar91 + (uint)*(byte *)(lVar123 + 1) * iVar106;
                      iVar89 = iVar89 + (uint)*(byte *)(lVar123 + 2) * iVar106;
                      iVar93 = iVar93 + (uint)*pbVar103 * iVar106;
                      iVar44 = iVar44 + (uint)*(byte *)(lVar123 + 3) * iVar106;
                      if (uVar26 == 7) {
                        uVar69 = 8;
                        pbVar53 = pbVar103;
                      }
                      else {
                        iVar106 = piVar75[8];
                        iVar91 = iVar91 + (uint)*(byte *)(lVar65 + 1) * iVar106;
                        iVar89 = iVar89 + (uint)*(byte *)(lVar65 + 2) * iVar106;
                        iVar93 = iVar93 + (uint)*pbVar105 * iVar106;
                        iVar44 = iVar44 + (uint)*(byte *)(lVar65 + 3) * iVar106;
                        if (uVar26 == 8) {
                          uVar69 = 9;
                          pbVar53 = pbVar105;
                        }
                        else {
                          iVar106 = piVar75[9];
                          iVar91 = iVar91 + (uint)*(byte *)(local_1c0 + 1) * iVar106;
                          iVar93 = iVar93 + (uint)*pbVar110 * iVar106;
                          iVar89 = iVar89 + (uint)*(byte *)(local_1c0 + 2) * iVar106;
                          iVar44 = iVar44 + (uint)*(byte *)(local_1c0 + 3) * iVar106;
                          if (uVar26 == 9) {
                            uVar69 = 10;
                            pbVar53 = pbVar110;
                          }
                          else {
                            iVar106 = piVar75[10];
                            iVar91 = iVar91 + (uint)*(byte *)(local_1b8 + 1) * iVar106;
                            iVar93 = iVar93 + (uint)*local_200 * iVar106;
                            iVar89 = iVar89 + (uint)*(byte *)(local_1b8 + 2) * iVar106;
                            iVar44 = iVar44 + (uint)*(byte *)(local_1b8 + 3) * iVar106;
                            if (uVar26 == 10) {
                              uVar69 = 0xb;
                              pbVar53 = local_200;
                            }
                            else {
                              iVar106 = piVar75[0xb];
                              iVar93 = iVar93 + (uint)*local_1f8 * iVar106;
                              iVar91 = iVar91 + (uint)*(byte *)(lVar72 + 1) * iVar106;
                              iVar89 = iVar89 + (uint)*(byte *)(lVar72 + 2) * iVar106;
                              iVar44 = iVar44 + (uint)*(byte *)(lVar72 + 3) * iVar106;
                              if (uVar26 == 0xb) {
                                uVar69 = 0xc;
                                pbVar53 = local_1f8;
                              }
                              else {
                                iVar106 = piVar75[0xc];
                                iVar93 = iVar93 + (uint)*local_1f0 * iVar106;
                                iVar91 = iVar91 + (uint)*(byte *)(lVar71 + 1) * iVar106;
                                iVar89 = iVar89 + (uint)*(byte *)(lVar71 + 2) * iVar106;
                                iVar44 = iVar44 + (uint)*(byte *)(lVar71 + 3) * iVar106;
                                if (uVar26 == 0xc) {
                                  uVar69 = 0xd;
                                  pbVar53 = local_1f0;
                                }
                                else {
                                  iVar106 = piVar75[0xd];
                                  iVar93 = iVar93 + (uint)*local_1e8 * iVar106;
                                  iVar91 = iVar91 + (uint)*(byte *)(lVar79 + 1) * iVar106;
                                  iVar89 = iVar89 + (uint)*(byte *)(lVar79 + 2) * iVar106;
                                  iVar44 = iVar44 + (uint)*(byte *)(lVar79 + 3) * iVar106;
                                  if (uVar26 == 0xd) {
                                    uVar69 = 0xe;
                                    pbVar53 = local_1e8;
                                  }
                                  else {
                                    iVar106 = piVar75[0xe];
                                    iVar91 = iVar91 + (uint)*(byte *)(local_1b0 + 1) * iVar106;
                                    iVar93 = iVar93 + (uint)*local_1e0 * iVar106;
                                    iVar89 = iVar89 + (uint)*(byte *)(local_1b0 + 2) * iVar106;
                                    iVar44 = iVar44 + (uint)*(byte *)(local_1b0 + 3) * iVar106;
                                    if (uVar26 == 0xe) {
                                      uVar69 = 0xf;
                                      pbVar53 = local_1e0;
                                    }
                                    else {
                                      iVar106 = piVar75[0xf];
                                      iVar93 = iVar93 + (uint)*local_1d8 * iVar106;
                                      iVar91 = iVar91 + (uint)*(byte *)(lVar67 + 1) * iVar106;
                                      iVar89 = iVar89 + (uint)*(byte *)(lVar67 + 2) * iVar106;
                                      iVar44 = iVar44 + (uint)*(byte *)(lVar67 + 3) * iVar106;
                                      if (uVar26 == 0xf) {
                                        uVar69 = 0x10;
                                        pbVar53 = local_1d8;
                                      }
                                      else {
                                        iVar106 = piVar75[0x10];
                                        iVar93 = iVar93 + (uint)*local_1d0 * iVar106;
                                        iVar91 = iVar91 + (uint)*(byte *)(lVar68 + 1) * iVar106;
                                        iVar89 = iVar89 + (uint)*(byte *)(lVar68 + 2) * iVar106;
                                        iVar44 = iVar44 + (uint)*(byte *)(lVar68 + 3) * iVar106;
                                        if (uVar26 == 0x10) {
                                          uVar69 = 0x11;
                                          pbVar53 = local_1d0;
                                        }
                                        else {
                                          iVar106 = piVar75[0x11];
                                          uVar69 = 0x12;
                                          iVar91 = iVar91 + (uint)*(byte *)(local_1c8 + 1) * iVar106
                                          ;
                                          iVar89 = iVar89 + (uint)*(byte *)(local_1c8 + 2) * iVar106
                                          ;
                                          iVar44 = iVar44 + (uint)*(byte *)(local_1c8 + 3) * iVar106
                                          ;
                                          iVar93 = iVar93 + (uint)*pbVar62 * iVar106;
                                          pbVar53 = pbVar62;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar34 == uVar26) goto LAB_001cdecc;
        }
        if (0xe < (iVar27 + -2) - uVar26) {
          iVar111 = 0;
          iVar112 = 0;
          iVar113 = 0;
          iVar114 = 0;
          puVar52 = (undefined1 *)(param_2 + lVar63 + lVar66);
          puVar60 = (undefined1 *)(param_2 + lVar63 + 1 + lVar66);
          puVar58 = (undefined1 *)(param_2 + lVar63 + 2 + lVar66);
          pbVar55 = (byte *)(param_2 + lVar63 + 3 + lVar66);
          local_188 = 0;
          piVar49 = piVar75 + (ulong)uVar26 + 1;
          iVar106 = iVar111;
          iVar107 = iVar112;
          iVar115 = iVar111;
          iVar116 = iVar112;
          iVar119 = iVar111;
          iVar120 = iVar112;
          iVar108 = iVar113;
          iVar109 = iVar114;
          iVar117 = iVar113;
          iVar118 = iVar114;
          iVar121 = iVar113;
          iVar122 = iVar114;
          do {
            local_188 = local_188 + 1;
            uVar28 = *puVar52;
            puVar1 = puVar52 + lVar50;
            pbVar2 = puVar52 + lVar45;
            pbVar3 = puVar52 + lVar38;
            pbVar4 = puVar52 + lVar46;
            pbVar5 = puVar52 + lVar41;
            pbVar6 = puVar52 + lVar78;
            pbVar7 = puVar52 + lVar40;
            puVar8 = puVar52 + lVar47;
            bVar30 = puVar52[lVar43];
            pbVar9 = puVar52 + lVar77;
            pbVar10 = puVar52 + lVar23;
            pbVar11 = puVar52 + lVar80;
            pbVar12 = puVar52 + lVar24;
            pbVar13 = puVar52 + lVar42;
            pbVar35 = puVar52 + lVar39;
            uVar29 = *puVar60;
            puVar52 = puVar52 + lVar48;
            puVar14 = puVar60 + lVar50;
            pbVar15 = puVar60 + lVar45;
            uVar37 = CONCAT12(*puVar1,CONCAT11(*puVar1,uVar28)) & 0xff00ff;
            pbVar16 = puVar60 + lVar38;
            pbVar17 = puVar60 + lVar46;
            pbVar18 = puVar60 + lVar41;
            iVar99 = (int)*(undefined8 *)piVar49;
            iVar100 = (int)((ulong)*(undefined8 *)piVar49 >> 0x20);
            iVar101 = (int)*(undefined8 *)(piVar49 + 2);
            iVar102 = (int)((ulong)*(undefined8 *)(piVar49 + 2) >> 0x20);
            pbVar19 = puVar60 + lVar78;
            iVar95 = (int)*(undefined8 *)(piVar49 + 4);
            iVar96 = (int)((ulong)*(undefined8 *)(piVar49 + 4) >> 0x20);
            iVar97 = (int)*(undefined8 *)(piVar49 + 6);
            iVar98 = (int)((ulong)*(undefined8 *)(piVar49 + 6) >> 0x20);
            pbVar20 = puVar60 + lVar40;
            puVar1 = puVar60 + lVar47;
            iVar88 = (int)*(undefined8 *)(piVar49 + 8);
            iVar90 = (int)((ulong)*(undefined8 *)(piVar49 + 8) >> 0x20);
            iVar92 = (int)*(undefined8 *)(piVar49 + 10);
            iVar94 = (int)((ulong)*(undefined8 *)(piVar49 + 10) >> 0x20);
            bVar31 = puVar60[lVar43];
            iVar81 = (int)*(undefined8 *)(piVar49 + 0xc);
            iVar82 = (int)((ulong)*(undefined8 *)(piVar49 + 0xc) >> 0x20);
            iVar83 = (int)*(undefined8 *)(piVar49 + 0xe);
            iVar84 = (int)((ulong)*(undefined8 *)(piVar49 + 0xe) >> 0x20);
            iVar111 = iVar111 + (uVar37 & 0xffff) * iVar99 +
                      (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) * iVar95 +
                      ((CONCAT12(bVar30,CONCAT11(bVar30,*puVar8)) & 0xff00ff) & 0xffff) * iVar88 +
                      (CONCAT12(*pbVar12,(ushort)*pbVar11) & 0xffff) * iVar81;
            iVar112 = iVar112 + (uint)(byte)(uVar37 >> 0x10) * iVar100 + (uint)*pbVar5 * iVar96 +
                      (uint)bVar30 * iVar90 + (uint)*pbVar12 * iVar82;
            iVar113 = iVar113 + (uint)*pbVar2 * iVar101 + (uint)*pbVar6 * iVar97 +
                      (uint)*pbVar9 * iVar92 + (uint)*pbVar13 * iVar83;
            iVar114 = iVar114 + (uint)*pbVar3 * iVar102 + (uint)*pbVar7 * iVar98 +
                      (uint)*pbVar10 * iVar94 + (uint)*pbVar35 * iVar84;
            pbVar2 = puVar60 + lVar77;
            pbVar3 = puVar60 + lVar23;
            pbVar4 = puVar60 + lVar80;
            pbVar5 = puVar60 + lVar24;
            pbVar6 = puVar60 + lVar42;
            pbVar35 = puVar60 + lVar39;
            puVar60 = puVar60 + lVar48;
            uVar28 = *puVar58;
            puVar8 = puVar58 + lVar50;
            pbVar7 = puVar58 + lVar45;
            uVar37 = CONCAT12(*puVar14,CONCAT11(*puVar14,uVar29)) & 0xff00ff;
            pbVar9 = puVar58 + lVar38;
            pbVar10 = puVar58 + lVar46;
            pbVar11 = puVar58 + lVar41;
            pbVar12 = puVar58 + lVar78;
            pbVar13 = puVar58 + lVar40;
            puVar14 = puVar58 + lVar47;
            bVar32 = puVar58[lVar43];
            iVar115 = iVar115 + (uVar37 & 0xffff) * iVar99 +
                      (CONCAT12(*pbVar18,(ushort)*pbVar17) & 0xffff) * iVar95 +
                      ((CONCAT12(bVar31,CONCAT11(bVar31,*puVar1)) & 0xff00ff) & 0xffff) * iVar88 +
                      (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) * iVar81;
            iVar116 = iVar116 + (uint)(byte)(uVar37 >> 0x10) * iVar100 + (uint)*pbVar18 * iVar96 +
                      (uint)bVar31 * iVar90 + (uint)*pbVar5 * iVar82;
            iVar117 = iVar117 + (uint)*pbVar15 * iVar101 + (uint)*pbVar19 * iVar97 +
                      (uint)*pbVar2 * iVar92 + (uint)*pbVar6 * iVar83;
            iVar118 = iVar118 + (uint)*pbVar16 * iVar102 + (uint)*pbVar20 * iVar98 +
                      (uint)*pbVar3 * iVar94 + (uint)*pbVar35 * iVar84;
            pbVar2 = puVar58 + lVar77;
            pbVar3 = puVar58 + lVar23;
            pbVar4 = puVar58 + lVar80;
            pbVar5 = puVar58 + lVar24;
            pbVar6 = puVar58 + lVar42;
            pbVar36 = puVar58 + lVar39;
            puVar58 = puVar58 + lVar48;
            bVar30 = *pbVar55;
            pbVar15 = pbVar55 + lVar50;
            pbVar16 = pbVar55 + lVar45;
            uVar37 = CONCAT12(*puVar8,CONCAT11(*puVar8,uVar28)) & 0xff00ff;
            pbVar17 = pbVar55 + lVar38;
            pbVar18 = pbVar55 + lVar46;
            pbVar19 = pbVar55 + lVar41;
            pbVar20 = pbVar55 + lVar78;
            pbVar35 = pbVar55 + lVar40;
            pbVar21 = pbVar55 + lVar47;
            pbVar22 = pbVar55 + lVar43;
            iVar119 = iVar119 + (uVar37 & 0xffff) * iVar99 +
                      (CONCAT12(*pbVar11,(ushort)*pbVar10) & 0xffff) * iVar95 +
                      ((CONCAT12(bVar32,CONCAT11(bVar32,*puVar14)) & 0xff00ff) & 0xffff) * iVar88 +
                      (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) * iVar81;
            iVar120 = iVar120 + (uint)(byte)(uVar37 >> 0x10) * iVar100 + (uint)*pbVar11 * iVar96 +
                      (uint)bVar32 * iVar90 + (uint)*pbVar5 * iVar82;
            iVar121 = iVar121 + (uint)*pbVar7 * iVar101 + (uint)*pbVar12 * iVar97 +
                      (uint)*pbVar2 * iVar92 + (uint)*pbVar6 * iVar83;
            iVar122 = iVar122 + (uint)*pbVar9 * iVar102 + (uint)*pbVar13 * iVar98 +
                      (uint)*pbVar3 * iVar94 + (uint)*pbVar36 * iVar84;
            pbVar2 = pbVar55 + lVar77;
            pbVar3 = pbVar55 + lVar23;
            pbVar4 = pbVar55 + lVar80;
            pbVar5 = pbVar55 + lVar24;
            pbVar6 = pbVar55 + lVar42;
            pbVar7 = pbVar55 + lVar39;
            pbVar55 = pbVar55 + lVar48;
            uVar37 = CONCAT12(*pbVar22,CONCAT11(*pbVar22,*pbVar21)) & 0xff00ff;
            iVar106 = iVar106 + (CONCAT12(*pbVar15,(ushort)bVar30) & 0xffff) * iVar99 +
                      (CONCAT12(*pbVar19,(ushort)*pbVar18) & 0xffff) * iVar95 +
                      (uVar37 & 0xffff) * iVar88 +
                      (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) * iVar81;
            iVar107 = iVar107 + (uint)*pbVar15 * iVar100 + (uint)*pbVar19 * iVar96 +
                      (uint)(byte)(uVar37 >> 0x10) * iVar90 + (uint)*pbVar5 * iVar82;
            iVar108 = iVar108 + (uint)*pbVar16 * iVar101 + (uint)*pbVar20 * iVar97 +
                      (uint)*pbVar2 * iVar92 + (uint)*pbVar6 * iVar83;
            iVar109 = iVar109 + (uint)*pbVar17 * iVar102 + (uint)*pbVar35 * iVar98 +
                      (uint)*pbVar3 * iVar94 + (uint)*pbVar7 * iVar84;
            piVar49 = piVar49 + 0x10;
          } while (local_188 < uVar25);
          uVar69 = (ulong)((int)uVar69 + uVar76);
          pbVar53 = pbVar53 + (ulong)uVar76 * lVar50;
          iVar44 = iVar44 + iVar106 + iVar107 + iVar108 + iVar109;
          iVar89 = iVar89 + iVar119 + iVar120 + iVar121 + iVar122;
          iVar91 = iVar91 + iVar115 + iVar116 + iVar117 + iVar118;
          iVar93 = iVar93 + iVar111 + iVar112 + iVar113 + iVar114;
          if (uVar34 - uVar26 == uVar76) goto LAB_001cdecc;
        }
        uVar56 = -(uVar69 >> 0x1f) & 0xfffffffc00000000 | uVar69 << 2;
        iVar107 = (int)uVar69;
        iVar106 = *(int *)((long)piVar75 + uVar56);
        iVar93 = iVar93 + (uint)pbVar53[lVar50] * iVar106;
        iVar89 = iVar89 + (uint)pbVar53[lVar50 + 2] * iVar106;
        iVar44 = iVar44 + (uint)pbVar53[lVar50 + 3] * iVar106;
        iVar91 = iVar91 + (uint)pbVar53[lVar50 + 1] * iVar106;
        if (iVar107 + 1 < iVar27) {
          lVar74 = lVar50 * 2;
          iVar106 = *(int *)((long)piVar75 + uVar56 + 4);
          iVar93 = iVar93 + (uint)pbVar53[lVar50 * 2] * iVar106;
          iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
          iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
          iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
          if (iVar107 + 2 < iVar27) {
            lVar74 = lVar50 * 3;
            iVar106 = *(int *)((long)piVar75 + uVar56 + 8);
            iVar93 = iVar93 + (uint)pbVar53[lVar50 * 3] * iVar106;
            iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
            iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
            iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
            if (iVar107 + 3 < iVar27) {
              lVar74 = lVar50 * 4;
              iVar106 = *(int *)((long)piVar75 + uVar56 + 0xc);
              iVar93 = iVar93 + (uint)pbVar53[lVar50 * 4] * iVar106;
              iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
              iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
              iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
              if (iVar107 + 4 < iVar27) {
                lVar74 = lVar50 * 5;
                iVar106 = *(int *)((long)piVar75 + uVar56 + 0x10);
                iVar93 = iVar93 + (uint)pbVar53[lVar50 * 5] * iVar106;
                iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                if (iVar107 + 5 < iVar27) {
                  lVar74 = lVar50 * 6;
                  iVar106 = *(int *)((long)piVar75 + uVar56 + 0x14);
                  iVar93 = iVar93 + (uint)pbVar53[lVar50 * 6] * iVar106;
                  iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                  iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                  iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                  if (iVar107 + 6 < iVar27) {
                    lVar74 = lVar50 * 7;
                    iVar106 = *(int *)((long)piVar75 + uVar56 + 0x18);
                    iVar93 = iVar93 + (uint)pbVar53[lVar50 * 7] * iVar106;
                    iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                    iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                    iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                    if (iVar107 + 7 < iVar27) {
                      lVar74 = lVar50 * 8;
                      iVar106 = *(int *)((long)piVar75 + uVar56 + 0x1c);
                      iVar93 = iVar93 + (uint)pbVar53[lVar50 * 8] * iVar106;
                      iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                      iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                      iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                      if (iVar107 + 8 < iVar27) {
                        lVar74 = lVar50 * 9;
                        iVar106 = *(int *)((long)piVar75 + uVar56 + 0x20);
                        iVar93 = iVar93 + (uint)pbVar53[lVar50 * 9] * iVar106;
                        iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                        iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                        iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                        if (iVar107 + 9 < iVar27) {
                          lVar74 = lVar50 * 10;
                          iVar106 = *(int *)((long)piVar75 + uVar56 + 0x24);
                          iVar93 = iVar93 + (uint)pbVar53[lVar50 * 10] * iVar106;
                          iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                          iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                          iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                          if (iVar107 + 10 < iVar27) {
                            lVar74 = lVar50 * 0xb;
                            iVar106 = *(int *)((long)piVar75 + uVar56 + 0x28);
                            iVar93 = iVar93 + (uint)pbVar53[lVar50 * 0xb] * iVar106;
                            iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                            iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                            iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                            if (iVar107 + 0xb < iVar27) {
                              lVar74 = lVar50 * 0xc;
                              iVar106 = *(int *)((long)piVar75 + uVar56 + 0x2c);
                              iVar93 = iVar93 + (uint)pbVar53[lVar50 * 0xc] * iVar106;
                              iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                              iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                              iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                              if (iVar107 + 0xc < iVar27) {
                                lVar74 = lVar50 * 0xd;
                                iVar106 = *(int *)((long)piVar75 + uVar56 + 0x30);
                                iVar93 = iVar93 + (uint)pbVar53[lVar50 * 0xd] * iVar106;
                                iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                                iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                                iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                                if (iVar107 + 0xd < iVar27) {
                                  lVar74 = lVar50 * 0xe;
                                  iVar106 = *(int *)((long)piVar75 + uVar56 + 0x34);
                                  iVar93 = iVar93 + (uint)pbVar53[lVar50 * 0xe] * iVar106;
                                  iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                                  iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                                  iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                                  if (iVar107 + 0xe < iVar27) {
                                    lVar74 = lVar50 * 0xf;
                                    iVar106 = *(int *)((long)piVar75 + uVar56 + 0x38);
                                    iVar93 = iVar93 + (uint)pbVar53[lVar50 * 0xf] * iVar106;
                                    iVar91 = iVar91 + (uint)pbVar53[lVar74 + 1] * iVar106;
                                    iVar89 = iVar89 + (uint)pbVar53[lVar74 + 2] * iVar106;
                                    iVar44 = iVar44 + (uint)pbVar53[lVar74 + 3] * iVar106;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001cdecc:
      pbVar51 = pbVar51 + 4;
      pbVar61 = pbVar61 + 4;
      pbVar57 = pbVar57 + 4;
      local_1a0 = local_1a0 + 4;
      pbVar62 = pbVar62 + 4;
      pbVar54 = pbVar54 + 4;
      lVar59 = lVar59 + 4;
      lVar86 = lVar86 + 4;
      lVar104 = lVar104 + 4;
      lVar123 = lVar123 + 4;
      lVar65 = lVar65 + 4;
      lVar72 = lVar72 + 4;
      lVar71 = lVar71 + 4;
      pbVar64 = pbVar64 + 4;
      lVar67 = lVar67 + 4;
      lVar68 = lVar68 + 4;
      lVar66 = lVar66 + 4;
      pbVar70 = pbVar70 + 4;
      pbVar73 = pbVar73 + 4;
      pbVar85 = pbVar85 + 4;
      pbVar87 = pbVar87 + 4;
      pbVar103 = pbVar103 + 4;
      pbVar105 = pbVar105 + 4;
      pbVar110 = pbVar110 + 4;
      local_200 = local_200 + 4;
      local_1f8 = local_1f8 + 4;
      local_1a8[1] = CONCAT44(iVar44,iVar89);
      *local_1a8 = CONCAT44(iVar91,iVar93);
      local_1f0 = local_1f0 + 4;
      local_1e8 = local_1e8 + 4;
      local_1e0 = local_1e0 + 4;
      local_1d8 = local_1d8 + 4;
      local_1d0 = local_1d0 + 4;
      local_1c8 = local_1c8 + 4;
      local_1c0 = local_1c0 + 4;
      local_1b8 = local_1b8 + 4;
      lVar79 = lVar79 + 4;
      local_1b0 = local_1b0 + 4;
      local_1a8 = local_1a8 + 2;
    } while (local_1a0 != ((ulong)uVar33 + 1) * 4);
    local_78 = local_78 + 4 + uVar33 * 4;
  }
  if (local_78 < param_4) {
    lVar46 = (long)param_5;
    uVar34 = iVar27 - 1;
    lVar50 = lVar46 * 2;
    uVar25 = -((uint)((ulong)(piVar75 + 1) >> 2) & 3) & 3;
    lVar45 = lVar46 * 3;
    if (uVar34 < uVar25) {
      uVar25 = uVar34;
    }
    uVar26 = uVar34;
    if (0x11 < uVar34) {
      uVar26 = uVar25;
    }
    lVar59 = (long)local_78;
    uVar25 = ((uVar34 - uVar26) - 0x10 >> 4) + 1;
    lVar123 = NEON_shl(lVar46,3);
    lVar104 = NEON_shl(lVar46,4);
    uVar33 = uVar25 * 0x10;
    lVar86 = NEON_shl(lVar45,1);
    pbVar61 = (byte *)(param_2 + lVar59 + lVar46 * 4);
    pbVar57 = (byte *)(param_2 + lVar59 + lVar46 * 7);
    pbVar62 = (byte *)(param_2 + lVar59 + lVar46 * 10);
    pbVar54 = (byte *)(param_2 + lVar59 + lVar46 * 0xc);
    pbVar64 = (byte *)(param_2 + lVar59 + lVar46 * 0x10);
    pbVar51 = (byte *)(param_2 + lVar59);
    lVar74 = lVar46 + lVar59;
    do {
      iVar44 = (uint)*pbVar51 * *piVar75;
      if (1 < iVar27) {
        if (uVar26 == 0) {
          uVar69 = 1;
          pbVar70 = pbVar51;
        }
        else {
          pbVar70 = pbVar51 + lVar46;
          iVar44 = iVar44 + (uint)pbVar51[lVar46] * piVar75[1];
          if (uVar26 == 1) {
            uVar69 = 2;
          }
          else {
            pbVar70 = pbVar70 + lVar46;
            iVar44 = iVar44 + (uint)pbVar51[lVar50] * piVar75[2];
            if (uVar26 == 2) {
              uVar69 = 3;
            }
            else {
              pbVar70 = pbVar70 + lVar46;
              iVar44 = iVar44 + (uint)pbVar51[lVar45] * piVar75[3];
              if (uVar26 == 3) {
                uVar69 = 4;
              }
              else {
                iVar44 = iVar44 + (uint)*pbVar61 * piVar75[4];
                if (uVar26 == 4) {
                  uVar69 = 5;
                  pbVar70 = pbVar61;
                }
                else {
                  iVar44 = iVar44 + (uint)pbVar61[lVar46] * piVar75[5];
                  if (uVar26 == 5) {
                    uVar69 = 6;
                    pbVar70 = pbVar61 + lVar46;
                  }
                  else {
                    iVar44 = iVar44 + (uint)pbVar61[lVar50] * piVar75[6];
                    if (uVar26 == 6) {
                      uVar69 = 7;
                      pbVar70 = pbVar61 + lVar46 + lVar46;
                    }
                    else {
                      iVar44 = iVar44 + (uint)*pbVar57 * piVar75[7];
                      if (uVar26 == 7) {
                        uVar69 = 8;
                        pbVar70 = pbVar57;
                      }
                      else {
                        iVar44 = iVar44 + (uint)pbVar57[lVar46] * piVar75[8];
                        if (uVar26 == 8) {
                          uVar69 = 9;
                          pbVar70 = pbVar57 + lVar46;
                        }
                        else {
                          iVar44 = iVar44 + (uint)pbVar57[lVar50] * piVar75[9];
                          if (uVar26 == 9) {
                            uVar69 = 10;
                            pbVar70 = pbVar57 + lVar46 + lVar46;
                          }
                          else {
                            iVar44 = iVar44 + (uint)*pbVar62 * piVar75[10];
                            if (uVar26 == 10) {
                              uVar69 = 0xb;
                              pbVar70 = pbVar62;
                            }
                            else {
                              iVar44 = iVar44 + (uint)pbVar62[lVar46] * piVar75[0xb];
                              if (uVar26 == 0xb) {
                                uVar69 = 0xc;
                                pbVar70 = pbVar62 + lVar46;
                              }
                              else {
                                iVar44 = iVar44 + (uint)*pbVar54 * piVar75[0xc];
                                if (uVar26 == 0xc) {
                                  uVar69 = 0xd;
                                  pbVar70 = pbVar54;
                                }
                                else {
                                  pbVar70 = pbVar54 + lVar46;
                                  iVar44 = iVar44 + (uint)pbVar54[lVar46] * piVar75[0xd];
                                  if (uVar26 == 0xd) {
                                    uVar69 = 0xe;
                                  }
                                  else {
                                    iVar44 = iVar44 + (uint)pbVar54[lVar50] * piVar75[0xe];
                                    if (uVar26 == 0xe) {
                                      uVar69 = 0xf;
                                      pbVar70 = pbVar70 + lVar46;
                                    }
                                    else {
                                      iVar44 = iVar44 + (uint)pbVar54[lVar45] * piVar75[0xf];
                                      if (uVar26 == 0xf) {
                                        uVar69 = 0x10;
                                        pbVar70 = pbVar70 + lVar46 + lVar46;
                                      }
                                      else {
                                        iVar44 = iVar44 + (uint)*pbVar64 * piVar75[0x10];
                                        if (uVar26 == 0x10) {
                                          uVar69 = 0x11;
                                          pbVar70 = pbVar64;
                                        }
                                        else {
                                          uVar69 = 0x12;
                                          iVar44 = iVar44 + (uint)pbVar64[lVar46] * piVar75[0x11];
                                          pbVar70 = pbVar64 + lVar46;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar26 == uVar34) goto LAB_001ce66c;
        }
        if (0xe < (iVar27 + -2) - uVar26) {
          iVar89 = 0;
          iVar91 = 0;
          iVar93 = 0;
          iVar106 = 0;
          uVar76 = 0;
          puVar52 = (undefined1 *)(param_2 + lVar46 * (ulong)uVar26 + lVar74);
          pbVar73 = puVar52 + lVar46 * 10;
          piVar49 = piVar75 + (ulong)uVar26 + 1;
          do {
            uVar28 = *puVar52;
            uVar76 = uVar76 + 1;
            bVar31 = puVar52[lVar46];
            pbVar85 = puVar52 + lVar50;
            pbVar87 = puVar52 + lVar45;
            pbVar103 = puVar52 + lVar46 * 4;
            pbVar105 = puVar52 + lVar46 * 5;
            pbVar110 = puVar52 + lVar86;
            pbVar53 = pbVar73 + lVar46 * -3;
            puVar60 = puVar52 + lVar123;
            puVar58 = puVar52 + lVar123 + lVar46;
            puVar52 = puVar52 + lVar104;
            bVar30 = *pbVar73;
            pbVar55 = pbVar73 + lVar46;
            pbVar2 = pbVar73 + lVar50;
            pbVar3 = pbVar73 + lVar45;
            pbVar4 = pbVar73 + lVar46 * 4;
            pbVar5 = pbVar73 + lVar46 * 5;
            pbVar73 = pbVar73 + lVar104;
            uVar37 = CONCAT12(*puVar58,CONCAT11(*puVar58,*puVar60)) & 0xff00ff;
            iVar89 = iVar89 + ((CONCAT12(bVar31,CONCAT11(bVar31,uVar28)) & 0xff00ff) & 0xffff) *
                              (int)*(undefined8 *)piVar49 +
                     (CONCAT12(*pbVar105,(ushort)*pbVar103) & 0xffff) *
                     (int)*(undefined8 *)(piVar49 + 4) +
                     (uVar37 & 0xffff) * (int)*(undefined8 *)(piVar49 + 8) +
                     (CONCAT12(*pbVar3,(ushort)*pbVar2) & 0xffff) *
                     (int)*(undefined8 *)(piVar49 + 0xc);
            iVar91 = iVar91 + (uint)bVar31 * (int)((ulong)*(undefined8 *)piVar49 >> 0x20) +
                     (uint)*pbVar105 * (int)((ulong)*(undefined8 *)(piVar49 + 4) >> 0x20) +
                     (uint)(byte)(uVar37 >> 0x10) *
                     (int)((ulong)*(undefined8 *)(piVar49 + 8) >> 0x20) +
                     (uint)*pbVar3 * (int)((ulong)*(undefined8 *)(piVar49 + 0xc) >> 0x20);
            iVar93 = iVar93 + (uint)*pbVar85 * (int)*(undefined8 *)(piVar49 + 2) +
                     (uint)*pbVar110 * (int)*(undefined8 *)(piVar49 + 6) +
                     (uint)bVar30 * (int)*(undefined8 *)(piVar49 + 10) +
                     (uint)*pbVar4 * (int)*(undefined8 *)(piVar49 + 0xe);
            iVar106 = iVar106 + (uint)*pbVar87 * (int)((ulong)*(undefined8 *)(piVar49 + 2) >> 0x20)
                      + (uint)*pbVar53 * (int)((ulong)*(undefined8 *)(piVar49 + 6) >> 0x20) +
                      (uint)*pbVar55 * (int)((ulong)*(undefined8 *)(piVar49 + 10) >> 0x20) +
                      (uint)*pbVar5 * (int)((ulong)*(undefined8 *)(piVar49 + 0xe) >> 0x20);
            piVar49 = piVar49 + 0x10;
          } while (uVar76 < uVar25);
          uVar69 = (ulong)((int)uVar69 + uVar33);
          pbVar70 = pbVar70 + lVar46 * (ulong)uVar33;
          iVar44 = iVar44 + iVar89 + iVar91 + iVar93 + iVar106;
          if (uVar33 == uVar34 - uVar26) goto LAB_001ce66c;
        }
        uVar56 = -(uVar69 >> 0x1f) & 0xfffffffc00000000 | uVar69 << 2;
        iVar89 = (int)uVar69;
        iVar44 = iVar44 + (uint)pbVar70[lVar46] * *(int *)((long)piVar75 + uVar56);
        if (iVar89 + 1 < iVar27) {
          iVar44 = iVar44 + (uint)pbVar70[lVar46 * 2] * *(int *)((long)piVar75 + uVar56 + 4);
          if (iVar89 + 2 < iVar27) {
            iVar44 = iVar44 + (uint)pbVar70[lVar46 * 3] * *(int *)((long)piVar75 + uVar56 + 8);
            if (iVar89 + 3 < iVar27) {
              iVar44 = iVar44 + (uint)pbVar70[lVar46 * 4] * *(int *)((long)piVar75 + uVar56 + 0xc);
              if (iVar89 + 4 < iVar27) {
                iVar44 = iVar44 + (uint)pbVar70[lVar46 * 5] *
                                  *(int *)((long)piVar75 + uVar56 + 0x10);
                if (iVar89 + 5 < iVar27) {
                  iVar44 = iVar44 + (uint)pbVar70[lVar46 * 6] *
                                    *(int *)((long)piVar75 + uVar56 + 0x14);
                  if (iVar89 + 6 < iVar27) {
                    iVar44 = iVar44 + (uint)pbVar70[lVar46 * 7] *
                                      *(int *)((long)piVar75 + uVar56 + 0x18);
                    if (iVar89 + 7 < iVar27) {
                      iVar44 = iVar44 + (uint)pbVar70[lVar46 * 8] *
                                        *(int *)((long)piVar75 + uVar56 + 0x1c);
                      if (iVar89 + 8 < iVar27) {
                        iVar44 = iVar44 + (uint)pbVar70[lVar46 * 9] *
                                          *(int *)((long)piVar75 + uVar56 + 0x20);
                        if (iVar89 + 9 < iVar27) {
                          iVar44 = iVar44 + (uint)pbVar70[lVar46 * 10] *
                                            *(int *)((long)piVar75 + uVar56 + 0x24);
                          if (iVar89 + 10 < iVar27) {
                            iVar44 = iVar44 + (uint)pbVar70[lVar46 * 0xb] *
                                              *(int *)((long)piVar75 + uVar56 + 0x28);
                            if (iVar89 + 0xb < iVar27) {
                              iVar44 = iVar44 + (uint)pbVar70[lVar46 * 0xc] *
                                                *(int *)((long)piVar75 + uVar56 + 0x2c);
                              if (iVar89 + 0xc < iVar27) {
                                iVar44 = iVar44 + (uint)pbVar70[lVar46 * 0xd] *
                                                  *(int *)((long)piVar75 + uVar56 + 0x30);
                                if (iVar89 + 0xd < iVar27) {
                                  iVar44 = iVar44 + (uint)pbVar70[lVar46 * 0xe] *
                                                    *(int *)((long)piVar75 + uVar56 + 0x34);
                                  if (iVar89 + 0xe < iVar27) {
                                    iVar44 = iVar44 + (uint)pbVar70[lVar46 * 0xf] *
                                                      *(int *)((long)piVar75 + uVar56 + 0x38);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001ce66c:
      *(int *)(param_3 + lVar46 * -4 + lVar74 * 4) = iVar44;
      lVar74 = lVar74 + 1;
      pbVar51 = pbVar51 + 1;
      pbVar61 = pbVar61 + 1;
      pbVar57 = pbVar57 + 1;
      pbVar62 = pbVar62 + 1;
      pbVar54 = pbVar54 + 1;
      pbVar64 = pbVar64 + 1;
    } while (lVar74 != lVar59 + lVar46 + 1 + (ulong)(uint)((param_4 + -1) - local_78));
  }
  return;
}


==================================================================

### FUNC 001ce804 (696 bytes) name=FUN_001ce804

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 *
FUN_001ce804(undefined8 *param_1,Mat *param_2,undefined4 *param_3,uint *param_4,Mat *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 *puVar15;
  void *__dest;
  undefined8 *puVar16;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar15 = operator_new(0xe0);
  uVar2 = *param_3;
  uVar3 = *param_4;
  *(undefined4 *)((long)puVar15 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar15 + 1) = 0xffffffff;
  *puVar15 = &PTR_FUN_004f34f0;
  *(undefined4 *)(puVar15 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar15 + 0x14) = 0;
  *(undefined4 *)(puVar15 + 3) = 0;
  *(undefined4 *)((long)puVar15 + 0x1c) = 0;
  puVar15[4] = 0;
  puVar15[5] = 0;
  puVar15[6] = 0;
  puVar15[7] = 0;
  puVar15[8] = 0;
  puVar15[9] = 0;
  puVar15[10] = puVar15 + 3;
  *(undefined4 *)(puVar15 + 0xe) = 0x42ff0000;
  puVar15[0xb] = puVar15 + 0xc;
  puVar15[0xd] = 0;
  puVar15[0xc] = 0;
  *(undefined4 *)((long)puVar15 + 0x74) = 0;
  *(undefined4 *)(puVar15 + 0xf) = 0;
  *(undefined4 *)((long)puVar15 + 0x7c) = 0;
  puVar15[0x10] = 0;
  puVar15[0x11] = 0;
  puVar15[0x12] = 0;
  puVar15[0x13] = 0;
  puVar15[0x14] = 0;
  puVar15[0x15] = 0;
  puVar15[0x16] = puVar15 + 0xf;
  puVar15[0x17] = puVar15 + 0x18;
  puVar15[0x19] = 0;
  uVar4 = *(uint *)param_2;
  puVar15[0x18] = 0;
  uVar1 = uVar4 & 0x4000;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar15 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar15 + 2),param_2);
  }
  *(undefined4 *)((long)puVar15 + 0xc) = uVar2;
  *(int *)(puVar15 + 1) = *(int *)(puVar15 + 3) + *(int *)((long)puVar15 + 0x1c) + -1;
  if (((*(uint *)(puVar15 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar15 + 3) != 1 && (*(int *)((long)puVar15 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,"kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
           0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = float; DT = float; VecOp = cv::SymmRowSmallVec_32f]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
    cv::String::deallocate((String *)&local_18);
  }
  cv::Mat::operator=((Mat *)(puVar15 + 0xe),param_5);
  *(undefined4 *)(puVar15 + 0x1a) = *(undefined4 *)(param_5 + 0x60);
  *(uint *)(puVar15 + 0x1b) = uVar3;
  *puVar15 = &PTR_FUN_004f3520;
  if (((uVar3 & 3) == 0) || (5 < *(int *)(puVar15 + 1))) {
    local_28 = 0;
    local_20 = 0;
    puVar16 = (undefined8 *)cv::String::allocate((String *)&local_28,0x54);
    uVar14 = DAT_00443198;
    uVar13 = DAT_00443190;
    uVar12 = DAT_00443188;
    uVar11 = DAT_00443180;
    uVar10 = DAT_00443178;
    uVar9 = DAT_00443170;
    uVar8 = DAT_00443168;
    uVar7 = DAT_00443160;
    uVar6 = _LAB_00443158;
    uVar5 = DAT_00443150;
    *(undefined4 *)(puVar16 + 10) = DAT_004431a0;
    *puVar16 = uVar5;
    puVar16[1] = uVar6;
    puVar16[2] = uVar7;
    puVar16[3] = uVar8;
    puVar16[4] = uVar9;
    puVar16[5] = uVar10;
    puVar16[6] = uVar11;
    puVar16[7] = uVar12;
    puVar16[8] = uVar13;
    puVar16[9] = uVar14;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmRowSmallFilter<ST, DT, VecOp>::SymmRowSmallFilter(const cv::Mat&, int, int, const VecOp&) [with ST = float; DT = float; VecOp = cv::SymmRowSmallVec_32f]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc43);
    cv::String::deallocate((String *)&local_28);
  }
  puVar16 = operator_new(0x20);
  puVar16[2] = puVar15;
  *(undefined4 *)(puVar16 + 1) = 1;
  *puVar16 = &PTR_FUN_004f3f70;
  *param_1 = puVar16;
  param_1[1] = puVar15;
  return param_1;
}


==================================================================

### FUNC 001ceb38 (416 bytes) name=FUN_001ceb38

undefined8 * FUN_001ceb38(undefined8 *param_1,Mat *param_2,undefined4 *param_3)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x78);
  uVar2 = *param_3;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &PTR_FUN_004f3640;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,"kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
           0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = short int; DT = float; VecOp = cv::RowNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f4090;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001ced14 (416 bytes) name=FUN_001ced14

undefined8 * FUN_001ced14(undefined8 *param_1,Mat *param_2,undefined4 *param_3)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x78);
  uVar2 = *param_3;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &PTR_FUN_004f3670;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,"kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
           0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = short int; DT = double; VecOp = cv::RowNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f40c0;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001ceef0 (416 bytes) name=FUN_001ceef0

undefined8 * FUN_001ceef0(undefined8 *param_1,Mat *param_2,undefined4 *param_3)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x78);
  uVar2 = *param_3;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &PTR_FUN_004f36a0;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,"kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
           0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = float; DT = float; VecOp = cv::RowNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f40f0;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001cf0cc (416 bytes) name=FUN_001cf0cc

undefined8 * FUN_001cf0cc(undefined8 *param_1,Mat *param_2,undefined4 *param_3)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x78);
  uVar2 = *param_3;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &PTR_FUN_004f36d0;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,"kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
           0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = float; DT = double; VecOp = cv::RowNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f4120;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001cf2b0 (4956 bytes) name=FUN_001cf2b0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long * FUN_001cf2b0(long *param_1,uint param_2,uint param_3,_InputArray *param_4,undefined4 param_5,
                   uint param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  int iVar14;
  uint uVar15;
  void *pvVar16;
  undefined8 *puVar17;
  undefined8 *puVar18;
  int *piVar19;
  Mat *pMVar20;
  int iVar21;
  uint uVar22;
  uint uVar23;
  uint local_238;
  undefined4 local_234;
  long local_230;
  long lStack_228;
  long local_220;
  long lStack_218;
  long local_210;
  long lStack_208;
  long local_200;
  long lStack_1f8;
  long local_1f0;
  long lStack_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  String aSStack_1d0 [16];
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  undefined8 local_148;
  uint local_140;
  int local_13c;
  int local_138;
  int local_134;
  int *local_130;
  undefined8 uStack_128;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  long lStack_108;
  int *local_100;
  undefined8 *local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 uStack_d8;
  int *local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  long lStack_a8;
  undefined8 *local_a0;
  undefined8 *local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  uint local_80;
  undefined1 local_7c;
  undefined8 local_70;
  undefined8 uStack_68;
  int *local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  long lStack_38;
  undefined8 *local_30;
  undefined8 *local_28;
  undefined8 local_20;
  undefined8 uStack_18;
  uint local_10;
  
  local_238 = param_6;
  local_234 = param_5;
  iVar14 = cv::_InputArray::kind(param_4);
  if (iVar14 == 0x10000) {
    pMVar20 = *(Mat **)(param_4 + 8);
    local_100 = &local_138;
    local_f8 = &local_f0;
    local_140 = *(uint *)pMVar20;
    local_13c = *(int *)(pMVar20 + 4);
    local_138 = *(int *)(pMVar20 + 8);
    local_134 = *(int *)(pMVar20 + 0xc);
    local_130 = *(int **)(pMVar20 + 0x10);
    uStack_128 = *(undefined8 *)(pMVar20 + 0x18);
    local_120 = *(undefined8 *)(pMVar20 + 0x20);
    uStack_118 = *(undefined8 *)(pMVar20 + 0x28);
    local_110 = *(undefined8 *)(pMVar20 + 0x30);
    lStack_108 = *(long *)(pMVar20 + 0x38);
    local_e8 = 0;
    local_f0 = 0;
    if (lStack_108 != 0) {
      piVar19 = (int *)(lStack_108 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = *piVar19 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (2 < *(int *)(pMVar20 + 4)) {
      local_13c = 0;
      cv::Mat::copySize((Mat *)&local_140,pMVar20);
      goto LAB_001cf318;
    }
    local_f0 = **(undefined8 **)(pMVar20 + 0x48);
    local_e8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    if ((param_3 >> 3 & 0x1ff) + 1 == (param_2 >> 3 & 0x1ff) + 1) goto LAB_001cf89c;
LAB_001cf338:
    local_1e0 = 0;
    local_1d8 = 0;
    pvVar16 = (void *)cv::String::allocate((String *)&local_1e0,0x59);
    memcpy(pvVar16,&DAT_004431a8,0x59);
    cv::error(-0xd7,(String *)&local_1e0,
              "cv::Ptr<cv::BaseRowFilter> cv::getLinearRowFilter(int, int, cv::InputArray, int, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xe30);
    cv::String::deallocate((String *)&local_1e0);
  }
  else {
    cv::_InputArray::getMat_((int)param_4);
LAB_001cf318:
    if ((param_3 >> 3 & 0x1ff) + 1 != (param_2 >> 3 & 0x1ff) + 1) goto LAB_001cf338;
LAB_001cf89c:
    uVar15 = param_2 & 7;
    if (uVar15 < 4) {
      uVar15 = 4;
    }
    if (((param_3 & 7) < uVar15) || ((param_3 & 7) != (local_140 & 0xfff))) goto LAB_001cf338;
  }
  uVar15 = local_238;
  uVar22 = param_3 & 7;
  uVar23 = param_2 & 7;
  if (((local_238 & 3) == 0) || (6 < local_138 + local_134)) {
    if (uVar23 == 0) {
      if (uVar22 != 4) goto LAB_001cf530;
      puVar17 = operator_new(0x78);
      uVar13 = local_234;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f3550;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_140 >> 0xe & 1) == 0) {
        local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
        local_70 = CONCAT44(local_70._4_4_,0x2010000);
        uStack_68 = (Mat *)(puVar17 + 2);
        cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 4) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_1a0 = 0;
        local_198 = 0;
        pvVar16 = (void *)cv::String::allocate((String *)&local_1a0,0x4d);
        memcpy(pvVar16,
               "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",0x4d)
        ;
        cv::error(-0xd7,(String *)&local_1a0,
                  "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = unsigned char; DT = int; VecOp = cv::RowNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
        cv::String::deallocate((String *)&local_1a0);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &DAT_004f3fa0;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = *piVar19 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      do {
        iVar14 = *piVar19;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    else {
LAB_001cf5d4:
      if (uVar23 == 2) {
        if (uVar22 == 5) {
          puVar17 = operator_new(0x78);
          uVar13 = local_234;
          *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
          *(undefined4 *)(puVar17 + 1) = 0xffffffff;
          *puVar17 = &PTR_FUN_004f35e0;
          *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
          *(undefined4 *)((long)puVar17 + 0x14) = 0;
          *(undefined4 *)(puVar17 + 3) = 0;
          *(undefined4 *)((long)puVar17 + 0x1c) = 0;
          puVar17[4] = 0;
          puVar17[5] = 0;
          puVar17[6] = 0;
          puVar17[7] = 0;
          puVar17[8] = 0;
          puVar17[9] = 0;
          puVar17[10] = puVar17 + 3;
          puVar17[0xb] = puVar17 + 0xc;
          puVar17[0xd] = 0;
          puVar17[0xc] = 0;
          if ((local_140 >> 0xe & 1) == 0) {
            local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
            local_70 = CONCAT44(local_70._4_4_,0x2010000);
            uStack_68 = (Mat *)(puVar17 + 2);
            cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
          }
          else {
            cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
          }
          *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
          *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
          if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
             ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
            local_170 = 0;
            local_168 = 0;
            pvVar16 = (void *)cv::String::allocate((String *)&local_170,0x4d);
            memcpy(pvVar16,
                   "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
                   0x4d);
            cv::error(-0xd7,(String *)&local_170,
                      "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = short unsigned int; DT = float; VecOp = cv::RowNoVec]"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
            cv::String::deallocate((String *)&local_170);
          }
          puVar18 = operator_new(0x20);
          *(undefined4 *)(puVar18 + 1) = 1;
          puVar18[2] = puVar17;
          *puVar18 = &PTR_FUN_004f4030;
          piVar19 = (int *)(puVar18 + 1);
          *param_1 = (long)puVar18;
          param_1[1] = (long)puVar17;
          do {
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = *piVar19 + 1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        else if (uVar22 == 6) {
          puVar17 = operator_new(0x78);
          uVar13 = local_234;
          *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
          *(undefined4 *)(puVar17 + 1) = 0xffffffff;
          *puVar17 = &PTR_FUN_004f3610;
          *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
          *(undefined4 *)((long)puVar17 + 0x14) = 0;
          *(undefined4 *)(puVar17 + 3) = 0;
          *(undefined4 *)((long)puVar17 + 0x1c) = 0;
          puVar17[4] = 0;
          puVar17[5] = 0;
          puVar17[6] = 0;
          puVar17[7] = 0;
          puVar17[8] = 0;
          puVar17[9] = 0;
          puVar17[10] = puVar17 + 3;
          puVar17[0xb] = puVar17 + 0xc;
          puVar17[0xd] = 0;
          puVar17[0xc] = 0;
          if ((local_140 >> 0xe & 1) == 0) {
            local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
            local_70 = CONCAT44(local_70._4_4_,0x2010000);
            uStack_68 = (Mat *)(puVar17 + 2);
            cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
          }
          else {
            cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
          }
          *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
          *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
          if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
             ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
            local_160 = 0;
            local_158 = 0;
            pvVar16 = (void *)cv::String::allocate((String *)&local_160,0x4d);
            memcpy(pvVar16,
                   "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
                   0x4d);
            cv::error(-0xd7,(String *)&local_160,
                      "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = short unsigned int; DT = double; VecOp = cv::RowNoVec]"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
            cv::String::deallocate((String *)&local_160);
          }
          puVar18 = operator_new(0x20);
          *(undefined4 *)(puVar18 + 1) = 1;
          puVar18[2] = puVar17;
          *puVar18 = &PTR_FUN_004f4060;
          piVar19 = (int *)(puVar18 + 1);
          *param_1 = (long)puVar18;
          param_1[1] = (long)puVar17;
          do {
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = *piVar19 + 1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        else {
LAB_001cf5ec:
          if ((uVar23 != 6) || (uVar22 != 6)) goto LAB_001cf540;
          puVar17 = operator_new(0x78);
          uVar13 = local_234;
          *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
          *(undefined4 *)(puVar17 + 1) = 0xffffffff;
          *puVar17 = &PTR_FUN_004f3700;
          *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
          *(undefined4 *)((long)puVar17 + 0x14) = 0;
          *(undefined4 *)(puVar17 + 3) = 0;
          *(undefined4 *)((long)puVar17 + 0x1c) = 0;
          puVar17[4] = 0;
          puVar17[5] = 0;
          puVar17[6] = 0;
          puVar17[7] = 0;
          puVar17[8] = 0;
          puVar17[9] = 0;
          puVar17[10] = puVar17 + 3;
          puVar17[0xb] = puVar17 + 0xc;
          puVar17[0xd] = 0;
          puVar17[0xc] = 0;
          if ((local_140 >> 0xe & 1) == 0) {
            local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
            local_70 = CONCAT44(local_70._4_4_,0x2010000);
            uStack_68 = (Mat *)(puVar17 + 2);
            cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
          }
          else {
            cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
          }
          *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
          *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
          if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
             ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
            local_150 = 0;
            local_148 = 0;
            pvVar16 = (void *)cv::String::allocate((String *)&local_150,0x4d);
            memcpy(pvVar16,
                   "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",
                   0x4d);
            cv::error(-0xd7,(String *)&local_150,
                      "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = double; DT = double; VecOp = cv::RowNoVec]"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
            cv::String::deallocate((String *)&local_150);
          }
          puVar18 = operator_new(0x20);
          *(undefined4 *)(puVar18 + 1) = 1;
          puVar18[2] = puVar17;
          *puVar18 = &PTR_FUN_004f4150;
          piVar19 = (int *)(puVar18 + 1);
          *param_1 = (long)puVar18;
          param_1[1] = (long)puVar17;
          do {
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = *piVar19 + 1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
      }
      else if (uVar23 == 3) {
        if (uVar22 == 5) {
          FUN_001ceb38(&local_220,(Mat *)&local_140,&local_234,&local_70);
          param_1[1] = lStack_218;
          *param_1 = local_220;
          if (local_220 == 0) goto LAB_001cf58c;
          piVar19 = (int *)(local_220 + 8);
          do {
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = *piVar19 + 1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          if (local_220 == 0) goto LAB_001cf58c;
          piVar19 = (int *)(local_220 + 8);
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        else {
          if (uVar22 != 6) goto LAB_001cf540;
          FUN_001ced14(&local_210,(Mat *)&local_140,&local_234);
          param_1[1] = lStack_208;
          *param_1 = local_210;
          if (local_210 == 0) goto LAB_001cf58c;
          piVar19 = (int *)(local_210 + 8);
          do {
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = *piVar19 + 1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          if (local_210 == 0) goto LAB_001cf58c;
          piVar19 = (int *)(local_210 + 8);
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
      }
      else {
        if (uVar23 != 5) goto LAB_001cf5ec;
        if (uVar22 != 5) goto LAB_001cf770;
        FUN_001ceef0(&local_200,(Mat *)&local_140,&local_234,&local_70);
        param_1[1] = lStack_1f8;
        *param_1 = local_200;
        if (local_200 == 0) goto LAB_001cf58c;
        piVar19 = (int *)(local_200 + 8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar2) {
            *piVar19 = *piVar19 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (local_200 == 0) goto LAB_001cf58c;
        piVar19 = (int *)(local_200 + 8);
        do {
          iVar14 = *piVar19;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar2) {
            *piVar19 = iVar14 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
    }
  }
  else if (uVar23 == 0) {
    if (uVar22 == 4) {
      local_98 = &local_90;
      local_a0 = &uStack_d8;
      local_d0 = (int *)0x0;
      uStack_88 = 0;
      local_90 = 0;
      uStack_c8 = 0;
      local_c0 = 0;
      uStack_b8 = 0;
      local_b0 = 0;
      uStack_d8 = _UNK_001d0898;
      local_e0 = _DAT_001d0890;
      lStack_a8 = 0;
      if (lStack_108 != 0) {
        piVar19 = (int *)(lStack_108 + 0x14);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar2) {
            *piVar19 = *piVar19 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      cv::Mat::release((Mat *)&local_e0);
      local_e0 = CONCAT44(local_e0._4_4_,local_140);
      if ((local_e0._4_4_ < 3) && (local_13c < 3)) {
        uStack_d8 = (Mat *)CONCAT44(local_134,local_138);
        local_e0 = CONCAT44(local_13c,local_140);
        *local_98 = *local_f8;
        local_98[1] = local_f8[1];
        iVar14 = local_138;
        iVar21 = local_134;
      }
      else {
        cv::Mat::copySize((Mat *)&local_e0,(Mat *)&local_140);
        iVar14 = (int)uStack_d8;
        iVar21 = uStack_d8._4_4_;
      }
      local_80 = uVar15;
      uStack_b8 = uStack_118;
      local_c0 = local_120;
      local_7c = 1;
      lStack_a8 = lStack_108;
      local_b0 = local_110;
      uStack_c8 = uStack_128;
      local_d0 = local_130;
      if (1 < iVar21 + iVar14) {
        if (*local_130 + 0x8000U < 0x10000) {
          piVar19 = local_130;
          do {
            if (piVar19 == local_130 + ((iVar21 + iVar14) - 2)) goto LAB_001cfa68;
            piVar19 = piVar19 + 1;
          } while (*piVar19 + 0x8000U < 0x10000);
        }
        local_7c = 0;
      }
LAB_001cfa68:
      puVar17 = operator_new(0xe0);
      uVar13 = local_234;
      uVar15 = local_238;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f3490;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      *(undefined4 *)(puVar17 + 0xe) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x74) = 0;
      *(undefined4 *)(puVar17 + 0xf) = 0;
      *(undefined4 *)((long)puVar17 + 0x7c) = 0;
      puVar17[0x10] = 0;
      puVar17[0x11] = 0;
      puVar17[0x12] = 0;
      puVar17[0x13] = 0;
      puVar17[0x14] = 0;
      puVar17[0x15] = 0;
      puVar17[0x16] = puVar17 + 0xf;
      puVar17[0x17] = puVar17 + 0x18;
      puVar17[0x19] = 0;
      puVar17[0x18] = 0;
      *(undefined1 *)((long)puVar17 + 0xd4) = 0;
      if ((local_140 >> 0xe & 1) == 0) {
        local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
        local_70 = CONCAT44(local_70._4_4_,0x2010000);
        uStack_68 = (Mat *)(puVar17 + 2);
        cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 4) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_1b0 = 0;
        local_1a8 = 0;
        pvVar16 = (void *)cv::String::allocate((String *)&local_1b0,0x4d);
        memcpy(pvVar16,
               "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",0x4d)
        ;
        cv::error(-0xd7,(String *)&local_1b0,
                  "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = unsigned char; DT = int; VecOp = cv::SymmRowSmallVec_8u32s]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
        cv::String::deallocate((String *)&local_1b0);
      }
      cv::Mat::operator=((Mat *)(puVar17 + 0xe),(Mat *)&local_e0);
      *(uint *)(puVar17 + 0x1a) = local_80;
      *(undefined1 *)((long)puVar17 + 0xd4) = local_7c;
      *(uint *)(puVar17 + 0x1b) = uVar15;
      *puVar17 = &PTR_FUN_004f34c0;
      if (((uVar15 & 3) == 0) || (5 < *(int *)(puVar17 + 1))) {
        local_1c0 = 0;
        local_1b8 = 0;
        puVar18 = (undefined8 *)cv::String::allocate((String *)&local_1c0,0x54);
        uVar12 = DAT_00443198;
        uVar11 = DAT_00443190;
        uVar10 = DAT_00443188;
        uVar9 = DAT_00443180;
        uVar8 = DAT_00443178;
        uVar7 = DAT_00443170;
        uVar6 = DAT_00443168;
        uVar5 = DAT_00443160;
        uVar4 = _LAB_00443158;
        uVar3 = DAT_00443150;
        *(undefined4 *)(puVar18 + 10) = DAT_004431a0;
        *puVar18 = uVar3;
        puVar18[1] = uVar4;
        puVar18[2] = uVar5;
        puVar18[3] = uVar6;
        puVar18[4] = uVar7;
        puVar18[5] = uVar8;
        puVar18[6] = uVar9;
        puVar18[7] = uVar10;
        puVar18[8] = uVar11;
        puVar18[9] = uVar12;
        cv::error(-0xd7,(String *)&local_1c0,
                  "cv::SymmRowSmallFilter<ST, DT, VecOp>::SymmRowSmallFilter(const cv::Mat&, int, int, const VecOp&) [with ST = unsigned char; DT = int; VecOp = cv::SymmRowSmallVec_8u32s]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc43);
        cv::String::deallocate((String *)&local_1c0);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f3f40;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = *piVar19 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      do {
        iVar14 = *piVar19;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar14 == 1) {
        FUN_001c0010();
      }
      cv::Mat::release((Mat *)&local_e0);
      if (local_98 != &local_90) {
        cv::fastFree(local_98);
      }
      goto LAB_001cf58c;
    }
LAB_001cf530:
    if (uVar22 == 5) {
      puVar17 = operator_new(0x78);
      uVar13 = local_234;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f3580;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_140 >> 0xe & 1) == 0) {
        local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
        local_70 = CONCAT44(local_70._4_4_,0x2010000);
        uStack_68 = (Mat *)(puVar17 + 2);
        cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_190 = 0;
        local_188 = 0;
        pvVar16 = (void *)cv::String::allocate((String *)&local_190,0x4d);
        memcpy(pvVar16,
               "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",0x4d)
        ;
        cv::error(-0xd7,(String *)&local_190,
                  "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = unsigned char; DT = float; VecOp = cv::RowNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
        cv::String::deallocate((String *)&local_190);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f3fd0;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = *piVar19 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      do {
        iVar14 = *piVar19;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    else {
      if (uVar22 != 6) goto LAB_001cf540;
      puVar17 = operator_new(0x78);
      uVar13 = local_234;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &DAT_004f35b0;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_140 >> 0xe & 1) == 0) {
        local_60 = (int *)(CONCAT44(local_140,local_140) & 0x400000004000);
        local_70 = CONCAT44(local_70._4_4_,0x2010000);
        uStack_68 = (Mat *)(puVar17 + 2);
        cv::Mat::copyTo((Mat *)&local_140,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_140);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar13;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_180 = 0;
        local_178 = 0;
        pvVar16 = (void *)cv::String::allocate((String *)&local_180,0x4d);
        memcpy(pvVar16,
               "kernel.type() == DataType<DT>::type && (kernel.rows == 1 || kernel.cols == 1)",0x4d)
        ;
        cv::error(-0xd7,(String *)&local_180,
                  "cv::RowFilter<ST, DT, VecOp>::RowFilter(const cv::Mat&, int, const VecOp&) [with ST = unsigned char; DT = double; VecOp = cv::RowNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xc08);
        cv::String::deallocate((String *)&local_180);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4000;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = *piVar19 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      do {
        iVar14 = *piVar19;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar2) {
          *piVar19 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  else {
    if (uVar23 != 5) goto LAB_001cf5d4;
    if (uVar22 == 5) {
      local_28 = &local_20;
      local_60 = (int *)0x0;
      local_30 = &uStack_68;
      uStack_18 = 0;
      local_20 = 0;
      uStack_58 = 0;
      local_50 = 0;
      uStack_48 = 0;
      uStack_68 = _UNK_001d0898;
      local_70 = _DAT_001d0890;
      local_40 = 0;
      lStack_38 = 0;
      if (lStack_108 != 0) {
        piVar19 = (int *)(lStack_108 + 0x14);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar2) {
            *piVar19 = *piVar19 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      cv::Mat::release((Mat *)&local_70);
      local_70 = CONCAT44(local_70._4_4_,local_140);
      if ((local_70._4_4_ < 3) && (local_13c < 3)) {
        local_70 = CONCAT44(local_13c,local_140);
        uStack_68 = (Mat *)CONCAT44(local_134,local_138);
        *local_28 = *local_f8;
        local_28[1] = local_f8[1];
      }
      else {
        cv::Mat::copySize((Mat *)&local_70,(Mat *)&local_140);
      }
      uStack_48 = uStack_118;
      local_50 = local_120;
      lStack_38 = lStack_108;
      local_40 = local_110;
      local_10 = uVar15;
      uStack_58 = uStack_128;
      local_60 = local_130;
      FUN_001ce804(&local_230,(Mat *)&local_140,&local_234,&local_238,(Mat *)&local_70);
      param_1[1] = lStack_228;
      *param_1 = local_230;
      if (local_230 != 0) {
        piVar19 = (int *)(local_230 + 8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar2) {
            *piVar19 = *piVar19 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        piVar19 = (int *)(local_230 + 8);
        if (local_230 != 0) {
          do {
            iVar14 = *piVar19;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar2) {
              *piVar19 = iVar14 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
          if (iVar14 == 1) {
            FUN_001c0010();
          }
        }
      }
      cv::Mat::release((Mat *)&local_70);
      if (local_28 != &local_20) {
        cv::fastFree(local_28);
      }
      goto LAB_001cf58c;
    }
LAB_001cf770:
    if (uVar22 != 6) {
LAB_001cf540:
      cv::format("Unsupported combination of source format (=%d), and buffer format (=%d)",
                 aSStack_1d0,(ulong)param_2,(ulong)param_3);
      cv::error(-0xd5,aSStack_1d0,
                "cv::Ptr<cv::BaseRowFilter> cv::getLinearRowFilter(int, int, cv::InputArray, int, int)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xe57);
      cv::String::deallocate(aSStack_1d0);
      *param_1 = 0;
      param_1[1] = 0;
      goto LAB_001cf58c;
    }
    FUN_001cf0cc(&local_1f0,(Mat *)&local_140,&local_234);
    param_1[1] = lStack_1e8;
    *param_1 = local_1f0;
    if (local_1f0 == 0) goto LAB_001cf58c;
    piVar19 = (int *)(local_1f0 + 8);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar2) {
        *piVar19 = *piVar19 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (local_1f0 == 0) goto LAB_001cf58c;
    piVar19 = (int *)(local_1f0 + 8);
    do {
      iVar14 = *piVar19;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar2) {
        *piVar19 = iVar14 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar14 == 1) {
    FUN_001c0010();
  }
LAB_001cf58c:
  cv::Mat::release((Mat *)&local_140);
  if (local_f8 != &local_f0) {
    cv::fastFree(local_f8);
  }
  return param_1;
}


==================================================================

### FUNC 001d08a0 (432 bytes) name=FUN_001d08a0

undefined8 * FUN_001d08a0(undefined8 *param_1,Mat *param_2,undefined4 *param_3,undefined8 *param_4)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  undefined8 uVar6;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x80);
  uVar2 = *param_3;
  uVar6 = *param_4;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &DAT_004f3790;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  puVar4[0xf] = uVar6;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, unsigned char>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f41e0;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001d0a8c (444 bytes) name=FUN_001d0a8c

undefined8 * FUN_001d0a8c(undefined8 *param_1,Mat *param_2,undefined4 *param_3,double *param_4)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  undefined8 *puVar4;
  void *__dest;
  undefined8 *puVar5;
  double dVar6;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar4 = operator_new(0x78);
  uVar2 = *param_3;
  dVar6 = *param_4;
  *(undefined4 *)((long)puVar4 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar4 + 1) = 0xffffffff;
  *puVar4 = &PTR_FUN_004f3820;
  *(undefined4 *)(puVar4 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar4 + 0x14) = 0;
  *(undefined4 *)(puVar4 + 3) = 0;
  *(undefined4 *)((long)puVar4 + 0x1c) = 0;
  puVar4[4] = 0;
  uVar3 = *(uint *)param_2;
  puVar4[5] = 0;
  puVar4[6] = 0;
  uVar1 = uVar3 & 0x4000;
  puVar4[7] = 0;
  puVar4[8] = 0;
  puVar4[9] = 0;
  puVar4[10] = puVar4 + 3;
  puVar4[0xb] = puVar4 + 0xc;
  puVar4[0xd] = 0;
  puVar4[0xc] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar4 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar4 + 2),param_2);
  }
  *(undefined4 *)((long)puVar4 + 0xc) = uVar2;
  *(int *)(puVar4 + 1) = *(int *)(puVar4 + 3) + *(int *)((long)puVar4 + 0x1c) + -1;
  *(float *)((long)puVar4 + 0x74) = (float)dVar6;
  if (((*(uint *)(puVar4 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar4 + 3) != 1 && (*(int *)((long)puVar4 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short int>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  puVar5 = operator_new(0x20);
  puVar5[2] = puVar4;
  *(undefined4 *)(puVar5 + 1) = 1;
  *puVar5 = &PTR_FUN_004f4270;
  *param_1 = puVar5;
  param_1[1] = puVar4;
  return param_1;
}


==================================================================

### FUNC 001d0c84 (828 bytes) name=FUN_001d0c84

undefined8 *
FUN_001d0c84(undefined8 *param_1,Mat *param_2,undefined4 *param_3,double *param_4,uint *param_5,
            undefined8 param_6,undefined4 *param_7)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined4 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 *puVar13;
  long lVar14;
  void *__dest;
  char *pcVar15;
  undefined8 *puVar16;
  double __x;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar13 = operator_new(0xe8);
  uVar2 = *param_3;
  __x = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar13 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar13 + 1) = 0xffffffff;
  *puVar13 = &PTR_FUN_004f3970;
  *(undefined4 *)(puVar13 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar13 + 0x14) = 0;
  *(undefined4 *)(puVar13 + 3) = 0;
  *(undefined4 *)((long)puVar13 + 0x1c) = 0;
  puVar13[4] = 0;
  puVar13[5] = 0;
  puVar13[6] = 0;
  puVar13[7] = 0;
  puVar13[8] = 0;
  puVar13[9] = 0;
  puVar13[10] = puVar13 + 3;
  *(undefined4 *)(puVar13 + 0x10) = 0x42ff0000;
  puVar13[0xb] = puVar13 + 0xc;
  puVar13[0xd] = 0;
  puVar13[0xc] = 0;
  *(undefined4 *)((long)puVar13 + 0x84) = 0;
  *(undefined4 *)(puVar13 + 0x11) = 0;
  *(undefined4 *)((long)puVar13 + 0x8c) = 0;
  puVar13[0x12] = 0;
  puVar13[0x13] = 0;
  puVar13[0x14] = 0;
  puVar13[0x15] = 0;
  puVar13[0x16] = 0;
  puVar13[0x17] = 0;
  puVar13[0x18] = puVar13 + 0x11;
  *(undefined4 *)(puVar13 + 0xf) = 0;
  puVar13[0x19] = puVar13 + 0x1a;
  uVar4 = *(uint *)param_2;
  puVar13[0x1b] = 0;
  puVar13[0x1a] = 0;
  uVar1 = uVar4 & 0x4000;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar13 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar13 + 2),param_2);
  }
  *(undefined4 *)((long)puVar13 + 0xc) = uVar2;
  *(int *)(puVar13 + 1) = *(int *)(puVar13 + 3) + *(int *)((long)puVar13 + 0x1c) + -1;
  lVar14 = lrint(__x);
  uVar2 = param_7[1];
  uVar5 = *param_7;
  *(int *)(puVar13 + 0x1c) = (int)lVar14;
  *(undefined4 *)(puVar13 + 0xf) = uVar5;
  *(undefined4 *)((long)puVar13 + 0x7c) = uVar2;
  cv::Mat::operator=((Mat *)(puVar13 + 0x10),(Mat *)(param_7 + 2));
  if (((*(uint *)(puVar13 + 2) & 0xfff) != 4) ||
     ((*(int *)(puVar13 + 3) != 1 && (*(int *)((long)puVar13 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<int, short int>; VecOp = cv::SymmColumnSmallVec_32s16s]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)((long)puVar13 + 0xe4) = uVar3;
  *puVar13 = &PTR_FUN_004f39a0;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar12 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar11 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar15 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
    *(undefined8 *)(pcVar15 + 0x20) = uVar9;
    *(undefined8 *)(pcVar15 + 0x28) = uVar10;
    *(undefined8 *)(pcVar15 + 0x30) = uVar11;
    *(undefined8 *)(pcVar15 + 0x38) = uVar12;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<int, short int>; VecOp = cv::SymmColumnSmallVec_32s16s]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  *puVar13 = &PTR_FUN_004f39d0;
  if (*(int *)(puVar13 + 1) != 3) {
    local_38 = 0;
    local_30 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_38,0x10);
    uVar6 = s_this_>ksize____3_004432e8._8_8_;
    *(undefined8 *)pcVar15 = s_this_>ksize____3_004432e8._0_8_;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    cv::error(-0xd7,(String *)&local_38,
              "cv::SymmColumnSmallFilter<CastOp, VecOp>::SymmColumnSmallFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<int, short int>; VecOp = cv::SymmColumnSmallVec_32s16s]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd77);
    cv::String::deallocate((String *)&local_38);
  }
  puVar16 = operator_new(0x20);
  puVar16[2] = puVar13;
  *(undefined4 *)(puVar16 + 1) = 1;
  *puVar16 = &PTR_FUN_004f4360;
  *param_1 = puVar16;
  param_1[1] = puVar13;
  return param_1;
}


==================================================================

### FUNC 001d1068 (704 bytes) name=FUN_001d1068

undefined8 *
FUN_001d1068(undefined8 *param_1,Mat *param_2,undefined4 *param_3,double *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 *puVar12;
  void *__dest;
  char *pcVar13;
  undefined8 *puVar14;
  double dVar15;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar12 = operator_new(0x80);
  uVar2 = *param_3;
  dVar15 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar12 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar12 + 1) = 0xffffffff;
  *puVar12 = &PTR_FUN_004f3a00;
  *(undefined4 *)(puVar12 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar12 + 0x14) = 0;
  *(undefined4 *)(puVar12 + 3) = 0;
  *(undefined4 *)((long)puVar12 + 0x1c) = 0;
  puVar12[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar12[5] = 0;
  puVar12[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar12[7] = 0;
  puVar12[8] = 0;
  puVar12[9] = 0;
  puVar12[10] = puVar12 + 3;
  puVar12[0xb] = puVar12 + 0xc;
  puVar12[0xd] = 0;
  puVar12[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar12 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar12 + 2),param_2);
  }
  *(undefined4 *)((long)puVar12 + 0xc) = uVar2;
  *(int *)(puVar12 + 1) = *(int *)(puVar12 + 3) + *(int *)((long)puVar12 + 0x1c) + -1;
  *(float *)((long)puVar12 + 0x74) = (float)dVar15;
  if (((*(uint *)(puVar12 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar12 + 3) != 1 && (*(int *)((long)puVar12 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::SymmColumnSmallNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar12 + 0xf) = uVar3;
  *puVar12 = &PTR_FUN_004f3a30;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar11 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar13 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar13 + 8) = uVar5;
    *(undefined8 *)(pcVar13 + 0x10) = uVar6;
    *(undefined8 *)(pcVar13 + 0x18) = uVar7;
    *(undefined8 *)(pcVar13 + 0x20) = uVar8;
    *(undefined8 *)(pcVar13 + 0x28) = uVar9;
    *(undefined8 *)(pcVar13 + 0x30) = uVar10;
    *(undefined8 *)(pcVar13 + 0x38) = uVar11;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::SymmColumnSmallNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  *puVar12 = &PTR_FUN_004f3a60;
  if (*(int *)(puVar12 + 1) != 3) {
    local_38 = 0;
    local_30 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_38,0x10);
    uVar5 = s_this_>ksize____3_004432e8._8_8_;
    *(undefined8 *)pcVar13 = s_this_>ksize____3_004432e8._0_8_;
    *(undefined8 *)(pcVar13 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_38,
              "cv::SymmColumnSmallFilter<CastOp, VecOp>::SymmColumnSmallFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::SymmColumnSmallNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd77);
    cv::String::deallocate((String *)&local_38);
  }
  puVar14 = operator_new(0x20);
  puVar14[2] = puVar12;
  *(undefined4 *)(puVar14 + 1) = 1;
  *puVar14 = &PTR_FUN_004f4390;
  *param_1 = puVar14;
  param_1[1] = puVar12;
  return param_1;
}


==================================================================

### FUNC 001d13dc (600 bytes) name=FUN_001d13dc

undefined8 *
FUN_001d13dc(undefined8 *param_1,Mat *param_2,undefined4 *param_3,double *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 *puVar12;
  void *__dest;
  undefined8 *puVar13;
  char *pcVar14;
  double dVar15;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar12 = operator_new(0x80);
  uVar2 = *param_3;
  dVar15 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar12 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar12 + 1) = 0xffffffff;
  *puVar12 = &PTR_FUN_004f3760;
  *(undefined4 *)(puVar12 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar12 + 0x14) = 0;
  *(undefined4 *)(puVar12 + 3) = 0;
  *(undefined4 *)((long)puVar12 + 0x1c) = 0;
  puVar12[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar12[5] = 0;
  puVar12[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar12[7] = 0;
  puVar12[8] = 0;
  puVar12[9] = 0;
  puVar12[10] = puVar12 + 3;
  puVar12[0xb] = puVar12 + 0xc;
  puVar12[0xd] = 0;
  puVar12[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar12 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar12 + 2),param_2);
  }
  *(undefined4 *)((long)puVar12 + 0xc) = uVar2;
  *(int *)(puVar12 + 1) = *(int *)(puVar12 + 3) + *(int *)((long)puVar12 + 0x1c) + -1;
  *(float *)((long)puVar12 + 0x74) = (float)dVar15;
  if (((*(uint *)(puVar12 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar12 + 3) != 1 && (*(int *)((long)puVar12 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, unsigned char>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar12 + 0xf) = uVar3;
  *puVar12 = &PTR_FUN_004f3a90;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar11 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar14 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    *(undefined8 *)(pcVar14 + 0x10) = uVar6;
    *(undefined8 *)(pcVar14 + 0x18) = uVar7;
    *(undefined8 *)(pcVar14 + 0x20) = uVar8;
    *(undefined8 *)(pcVar14 + 0x28) = uVar9;
    *(undefined8 *)(pcVar14 + 0x30) = uVar10;
    *(undefined8 *)(pcVar14 + 0x38) = uVar11;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, unsigned char>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  puVar13 = operator_new(0x20);
  puVar13[2] = puVar12;
  *(undefined4 *)(puVar13 + 1) = 1;
  *puVar13 = &PTR_FUN_004f43f0;
  *param_1 = puVar13;
  param_1[1] = puVar12;
  return param_1;
}


==================================================================

### FUNC 001d16ac (588 bytes) name=FUN_001d16ac

undefined8 *
FUN_001d16ac(undefined8 *param_1,Mat *param_2,undefined4 *param_3,undefined8 *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  void *__dest;
  undefined8 *puVar12;
  char *pcVar13;
  undefined8 uVar14;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar11 = operator_new(0x88);
  uVar2 = *param_3;
  uVar14 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar11 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar11 + 1) = 0xffffffff;
  *puVar11 = &PTR_FUN_004f37f0;
  *(undefined4 *)(puVar11 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar11 + 0x14) = 0;
  *(undefined4 *)(puVar11 + 3) = 0;
  *(undefined4 *)((long)puVar11 + 0x1c) = 0;
  puVar11[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar11[5] = 0;
  puVar11[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar11[7] = 0;
  puVar11[8] = 0;
  puVar11[9] = 0;
  puVar11[10] = puVar11 + 3;
  puVar11[0xb] = puVar11 + 0xc;
  puVar11[0xd] = 0;
  puVar11[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar11 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar11 + 2),param_2);
  }
  *(undefined4 *)((long)puVar11 + 0xc) = uVar2;
  *(int *)(puVar11 + 1) = *(int *)(puVar11 + 3) + *(int *)((long)puVar11 + 0x1c) + -1;
  puVar11[0xf] = uVar14;
  if (((*(uint *)(puVar11 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar11 + 3) != 1 && (*(int *)((long)puVar11 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short unsigned int>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar11 + 0x10) = uVar3;
  *puVar11 = &PTR_FUN_004f3b20;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar14 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar13 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar13 + 8) = uVar14;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    *(undefined8 *)(pcVar13 + 0x20) = uVar7;
    *(undefined8 *)(pcVar13 + 0x28) = uVar8;
    *(undefined8 *)(pcVar13 + 0x30) = uVar9;
    *(undefined8 *)(pcVar13 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short unsigned int>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar11;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &PTR_FUN_004f4480;
  *param_1 = puVar12;
  param_1[1] = puVar11;
  return param_1;
}


==================================================================

### FUNC 001d1970 (588 bytes) name=FUN_001d1970

undefined8 *
FUN_001d1970(undefined8 *param_1,Mat *param_2,undefined4 *param_3,undefined8 *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  void *__dest;
  undefined8 *puVar12;
  char *pcVar13;
  undefined8 uVar14;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar11 = operator_new(0x88);
  uVar2 = *param_3;
  uVar14 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar11 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar11 + 1) = 0xffffffff;
  *puVar11 = &PTR_FUN_004f3850;
  *(undefined4 *)(puVar11 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar11 + 0x14) = 0;
  *(undefined4 *)(puVar11 + 3) = 0;
  *(undefined4 *)((long)puVar11 + 0x1c) = 0;
  puVar11[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar11[5] = 0;
  puVar11[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar11[7] = 0;
  puVar11[8] = 0;
  puVar11[9] = 0;
  puVar11[10] = puVar11 + 3;
  puVar11[0xb] = puVar11 + 0xc;
  puVar11[0xd] = 0;
  puVar11[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar11 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar11 + 2),param_2);
  }
  *(undefined4 *)((long)puVar11 + 0xc) = uVar2;
  *(int *)(puVar11 + 1) = *(int *)(puVar11 + 3) + *(int *)((long)puVar11 + 0x1c) + -1;
  puVar11[0xf] = uVar14;
  if (((*(uint *)(puVar11 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar11 + 3) != 1 && (*(int *)((long)puVar11 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short int>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar11 + 0x10) = uVar3;
  *puVar11 = &PTR_FUN_004f3c10;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar14 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar13 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar13 + 8) = uVar14;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    *(undefined8 *)(pcVar13 + 0x20) = uVar7;
    *(undefined8 *)(pcVar13 + 0x28) = uVar8;
    *(undefined8 *)(pcVar13 + 0x30) = uVar9;
    *(undefined8 *)(pcVar13 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short int>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar11;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &PTR_FUN_004f4510;
  *param_1 = puVar12;
  param_1[1] = puVar11;
  return param_1;
}


==================================================================

### FUNC 001d1c34 (600 bytes) name=FUN_001d1c34

undefined8 *
FUN_001d1c34(undefined8 *param_1,Mat *param_2,undefined4 *param_3,double *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 *puVar12;
  void *__dest;
  undefined8 *puVar13;
  char *pcVar14;
  double dVar15;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar12 = operator_new(0x80);
  uVar2 = *param_3;
  dVar15 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar12 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar12 + 1) = 0xffffffff;
  *puVar12 = &PTR_FUN_004f3880;
  *(undefined4 *)(puVar12 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar12 + 0x14) = 0;
  *(undefined4 *)(puVar12 + 3) = 0;
  *(undefined4 *)((long)puVar12 + 0x1c) = 0;
  puVar12[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar12[5] = 0;
  puVar12[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar12[7] = 0;
  puVar12[8] = 0;
  puVar12[9] = 0;
  puVar12[10] = puVar12 + 3;
  puVar12[0xb] = puVar12 + 0xc;
  puVar12[0xd] = 0;
  puVar12[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar12 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar12 + 2),param_2);
  }
  *(undefined4 *)((long)puVar12 + 0xc) = uVar2;
  *(int *)(puVar12 + 1) = *(int *)(puVar12 + 3) + *(int *)((long)puVar12 + 0x1c) + -1;
  *(float *)((long)puVar12 + 0x74) = (float)dVar15;
  if (((*(uint *)(puVar12 + 2) & 0xfff) != 5) ||
     ((*(int *)(puVar12 + 3) != 1 && (*(int *)((long)puVar12 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar12 + 0xf) = uVar3;
  *puVar12 = &PTR_FUN_004f3c40;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar11 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar14 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    *(undefined8 *)(pcVar14 + 0x10) = uVar6;
    *(undefined8 *)(pcVar14 + 0x18) = uVar7;
    *(undefined8 *)(pcVar14 + 0x20) = uVar8;
    *(undefined8 *)(pcVar14 + 0x28) = uVar9;
    *(undefined8 *)(pcVar14 + 0x30) = uVar10;
    *(undefined8 *)(pcVar14 + 0x38) = uVar11;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  puVar13 = operator_new(0x20);
  puVar13[2] = puVar12;
  *(undefined4 *)(puVar13 + 1) = 1;
  *puVar13 = &PTR_FUN_004f4540;
  *param_1 = puVar13;
  param_1[1] = puVar12;
  return param_1;
}


==================================================================

### FUNC 001d1f04 (588 bytes) name=FUN_001d1f04

undefined8 *
FUN_001d1f04(undefined8 *param_1,Mat *param_2,undefined4 *param_3,undefined8 *param_4,uint *param_5)

{
  uint uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  void *__dest;
  undefined8 *puVar12;
  char *pcVar13;
  undefined8 uVar14;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  puVar11 = operator_new(0x88);
  uVar2 = *param_3;
  uVar14 = *param_4;
  uVar3 = *param_5;
  *(undefined4 *)((long)puVar11 + 0xc) = 0xffffffff;
  *(undefined4 *)(puVar11 + 1) = 0xffffffff;
  *puVar11 = &PTR_FUN_004f38b0;
  *(undefined4 *)(puVar11 + 2) = 0x42ff0000;
  *(undefined4 *)((long)puVar11 + 0x14) = 0;
  *(undefined4 *)(puVar11 + 3) = 0;
  *(undefined4 *)((long)puVar11 + 0x1c) = 0;
  puVar11[4] = 0;
  uVar4 = *(uint *)param_2;
  puVar11[5] = 0;
  puVar11[6] = 0;
  uVar1 = uVar4 & 0x4000;
  puVar11[7] = 0;
  puVar11[8] = 0;
  puVar11[9] = 0;
  puVar11[10] = puVar11 + 3;
  puVar11[0xb] = puVar11 + 0xc;
  puVar11[0xd] = 0;
  puVar11[0xc] = 0;
  if ((uVar4 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(puVar11 + 2);
    local_8 = uVar1;
    local_4 = uVar1;
    cv::Mat::copyTo(param_2,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(puVar11 + 2),param_2);
  }
  *(undefined4 *)((long)puVar11 + 0xc) = uVar2;
  *(int *)(puVar11 + 1) = *(int *)(puVar11 + 3) + *(int *)((long)puVar11 + 0x1c) + -1;
  puVar11[0xf] = uVar14;
  if (((*(uint *)(puVar11 + 2) & 0xfff) != 6) ||
     ((*(int *)(puVar11 + 3) != 1 && (*(int *)((long)puVar11 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, double>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)(puVar11 + 0x10) = uVar3;
  *puVar11 = &DAT_004f3c70;
  if ((uVar3 & 3) == 0) {
    local_28 = 0;
    local_20 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_28,0x40);
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar14 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar13 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar13 + 8) = uVar14;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    *(undefined8 *)(pcVar13 + 0x20) = uVar7;
    *(undefined8 *)(pcVar13 + 0x28) = uVar8;
    *(undefined8 *)(pcVar13 + 0x30) = uVar9;
    *(undefined8 *)(pcVar13 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_28,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, double>; VecOp = cv::ColumnNoVec]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_28);
  }
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar11;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &PTR_FUN_004f4570;
  *param_1 = puVar12;
  param_1[1] = puVar11;
  return param_1;
}


==================================================================

### FUNC 001d21c8 (852 bytes) name=FUN_001d21c8

void FUN_001d21c8(double param_1,undefined8 *param_2,Mat *param_3,undefined4 param_4,uint param_5,
                 undefined8 *param_6,undefined4 *param_7)

{
  Mat *this;
  int *piVar1;
  uint uVar2;
  uint uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  int iVar6;
  char cVar7;
  bool bVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  long lVar11;
  void *__dest;
  char *pcVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 local_18;
  Mat *local_10;
  uint local_8;
  uint local_4;
  
  this = (Mat *)(param_2 + 0x10);
  *(undefined4 *)((long)param_2 + 0xc) = 0xffffffff;
  *(undefined4 *)(param_2 + 1) = 0xffffffff;
  *param_2 = &PTR_FUN_004f38e0;
  *(undefined4 *)(param_2 + 2) = 0x42ff0000;
  *(undefined4 *)((long)param_2 + 0x14) = 0;
  *(undefined4 *)(param_2 + 3) = 0;
  *(undefined4 *)((long)param_2 + 0x1c) = 0;
  param_2[4] = 0;
  param_2[5] = 0;
  param_2[6] = 0;
  param_2[7] = 0;
  param_2[8] = 0;
  param_2[9] = 0;
  param_2[10] = param_2 + 3;
  param_2[0xb] = param_2 + 0xc;
  param_2[0xd] = 0;
  param_2[0xc] = 0;
  *(undefined4 *)(param_2 + 0xe) = 0;
  *(undefined4 *)((long)param_2 + 0x74) = 0;
  *(undefined4 *)(param_2 + 0x10) = 0x42ff0000;
  *(undefined4 *)((long)param_2 + 0x84) = 0;
  *(undefined4 *)(param_2 + 0x11) = 0;
  *(undefined4 *)((long)param_2 + 0x8c) = 0;
  param_2[0x12] = 0;
  param_2[0x13] = 0;
  param_2[0x14] = 0;
  param_2[0x15] = 0;
  param_2[0x16] = 0;
  param_2[0x17] = 0;
  *(undefined4 *)(param_2 + 0xf) = 0;
  param_2[0x18] = param_2 + 0x11;
  uVar3 = *(uint *)param_3;
  param_2[0x19] = param_2 + 0x1a;
  param_2[0x1b] = 0;
  uVar2 = uVar3 & 0x4000;
  param_2[0x1a] = 0;
  if ((uVar3 >> 0xe & 1) == 0) {
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_10 = (Mat *)(param_2 + 2);
    local_8 = uVar2;
    local_4 = uVar2;
    cv::Mat::copyTo(param_3,(_OutputArray *)&local_18);
  }
  else {
    cv::Mat::operator=((Mat *)(param_2 + 2),param_3);
  }
  *(undefined4 *)((long)param_2 + 0xc) = param_4;
  *(int *)(param_2 + 1) = *(int *)(param_2 + 3) + *(int *)((long)param_2 + 0x1c) + -1;
  lVar11 = lrint(param_1);
  uVar4 = param_7[1];
  uVar15 = *param_6;
  uVar5 = *param_7;
  *(int *)(param_2 + 0x1c) = (int)lVar11;
  param_2[0xe] = uVar15;
  *(undefined4 *)(param_2 + 0xf) = uVar5;
  *(undefined4 *)((long)param_2 + 0x7c) = uVar4;
  if (this != (Mat *)(param_7 + 2)) {
    if (*(long *)(param_7 + 0x10) != 0) {
      piVar1 = (int *)(*(long *)(param_7 + 0x10) + 0x14);
      do {
        cVar7 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar8) {
          *piVar1 = *piVar1 + 1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
    }
    cv::Mat::release(this);
    *(undefined4 *)(param_2 + 0x10) = param_7[2];
    if ((*(int *)((long)param_2 + 0x84) < 3) && (iVar6 = param_7[3], iVar6 < 3)) {
      puVar14 = *(undefined8 **)(param_7 + 0x14);
      puVar13 = (undefined8 *)param_2[0x19];
      uVar4 = param_7[4];
      *(undefined4 *)((long)param_2 + 0x8c) = param_7[5];
      *(int *)((long)param_2 + 0x84) = iVar6;
      *(undefined4 *)(param_2 + 0x11) = uVar4;
      *puVar13 = *puVar14;
      puVar13[1] = puVar14[1];
    }
    else {
      cv::Mat::copySize(this,(Mat *)(param_7 + 2));
    }
    uVar19 = *(undefined8 *)(param_7 + 6);
    uVar18 = *(undefined8 *)(param_7 + 0xc);
    uVar17 = *(undefined8 *)(param_7 + 10);
    uVar16 = *(undefined8 *)(param_7 + 0x10);
    uVar15 = *(undefined8 *)(param_7 + 0xe);
    param_2[0x13] = *(undefined8 *)(param_7 + 8);
    param_2[0x12] = uVar19;
    param_2[0x15] = uVar18;
    param_2[0x14] = uVar17;
    param_2[0x17] = uVar16;
    param_2[0x16] = uVar15;
  }
  if (((*(uint *)(param_2 + 2) & 0xfff) != 4) ||
     ((*(int *)(param_2 + 3) != 1 && (*(int *)((long)param_2 + 0x1c) != 1)))) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x4d);
    memcpy(__dest,&DAT_00443250,0x4d);
    cv::error(-0xd7,(String *)&local_18,
              "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::FixedPtCastEx<int, unsigned char>; VecOp = cv::SymmColumnVec_32s8u]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
    cv::String::deallocate((String *)&local_18);
  }
  *(uint *)((long)param_2 + 0xe4) = param_5;
  *param_2 = &DAT_004f3910;
  if ((param_5 & 3) == 0) {
    local_18 = 0;
    local_10 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_18,0x40);
    uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
    uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
    uVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
    uVar18 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
    uVar17 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
    uVar16 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
    uVar15 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
    *(undefined8 *)pcVar12 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
    *(undefined8 *)(pcVar12 + 8) = uVar15;
    *(undefined8 *)(pcVar12 + 0x10) = uVar16;
    *(undefined8 *)(pcVar12 + 0x18) = uVar17;
    *(undefined8 *)(pcVar12 + 0x20) = uVar18;
    *(undefined8 *)(pcVar12 + 0x28) = uVar19;
    *(undefined8 *)(pcVar12 + 0x30) = uVar9;
    *(undefined8 *)(pcVar12 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_18,
              "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::FixedPtCastEx<int, unsigned char>; VecOp = cv::SymmColumnVec_32s8u]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
    cv::String::deallocate((String *)&local_18);
    return;
  }
  return;
}


==================================================================

### FUNC 001d258c (8840 bytes) name=FUN_001d258c

long * FUN_001d258c(long *param_1,double param_2,uint param_3,uint param_4,_InputArray *param_5,
                   undefined4 param_6,uint param_7,uint param_8)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  double dVar11;
  undefined4 uVar12;
  int iVar13;
  uint uVar14;
  void *pvVar15;
  long lVar16;
  undefined8 *puVar17;
  undefined8 *puVar18;
  char *pcVar19;
  Mat *pMVar20;
  uint uVar21;
  uint uVar22;
  double dVar23;
  double local_410;
  uint local_408;
  undefined4 local_404;
  long local_400;
  long lStack_3f8;
  long local_3f0;
  long lStack_3e8;
  long local_3e0;
  long lStack_3d8;
  long local_3d0;
  long lStack_3c8;
  long local_3c0;
  long lStack_3b8;
  long local_3b0;
  long lStack_3a8;
  long local_3a0;
  long lStack_398;
  long local_390;
  long lStack_388;
  long local_380;
  long lStack_378;
  undefined8 local_370;
  undefined8 local_368;
  String aSStack_360 [16];
  undefined8 local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  undefined8 local_328;
  undefined8 local_320;
  undefined8 local_318;
  undefined8 local_310;
  undefined8 local_308;
  undefined8 local_300;
  undefined8 local_2f8;
  undefined8 local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  undefined8 local_2d0;
  undefined8 local_2c8;
  undefined8 local_2c0;
  undefined8 local_2b8;
  undefined8 local_2b0;
  undefined8 local_2a8;
  undefined8 local_2a0;
  undefined8 local_298;
  undefined8 local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 local_240;
  undefined8 local_238;
  undefined8 local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  uint local_210;
  int local_20c;
  uint local_208;
  uint local_204;
  undefined8 local_200;
  undefined8 uStack_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  long lStack_1d8;
  uint *local_1d0;
  undefined8 *local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  uint local_1a8;
  float local_1a4;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined4 local_198;
  undefined4 local_194;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined4 *local_160;
  undefined8 *local_158;
  undefined8 local_150;
  undefined8 local_148;
  uint local_140;
  float local_13c;
  undefined4 local_138;
  undefined4 local_134;
  undefined4 local_130;
  undefined4 local_12c;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined4 *local_f8;
  undefined8 *local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  uint local_d8;
  float local_d4;
  Mat *local_d0;
  uint local_c8;
  uint local_c4;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  uint *local_90;
  undefined8 *local_88;
  undefined8 local_80;
  undefined8 local_78;
  uint local_70;
  float local_6c;
  undefined8 local_68;
  uint local_60;
  uint local_5c;
  undefined8 local_58;
  undefined8 uStack_50;
  undefined8 local_48;
  undefined8 uStack_40;
  undefined8 local_38;
  long lStack_30;
  uint *local_28;
  undefined8 *local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined1 local_8;
  
  local_410 = param_2;
  local_408 = param_7;
  local_404 = param_6;
  iVar13 = cv::_InputArray::kind(param_5);
  if (iVar13 == 0x10000) {
    pMVar20 = *(Mat **)(param_5 + 8);
    local_1d0 = &local_208;
    local_1c8 = &local_1c0;
    local_210 = *(uint *)pMVar20;
    local_20c = *(int *)(pMVar20 + 4);
    local_208 = *(uint *)(pMVar20 + 8);
    local_204 = *(uint *)(pMVar20 + 0xc);
    local_200 = *(undefined8 *)(pMVar20 + 0x10);
    uStack_1f8 = *(undefined8 *)(pMVar20 + 0x18);
    local_1f0 = *(undefined8 *)(pMVar20 + 0x20);
    uStack_1e8 = *(undefined8 *)(pMVar20 + 0x28);
    local_1e0 = *(undefined8 *)(pMVar20 + 0x30);
    lStack_1d8 = *(long *)(pMVar20 + 0x38);
    local_1b8 = 0;
    local_1c0 = 0;
    if (lStack_1d8 != 0) {
      piVar1 = (int *)(lStack_1d8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (2 < *(int *)(pMVar20 + 4)) {
      local_20c = 0;
      cv::Mat::copySize((Mat *)&local_210,pMVar20);
      goto LAB_001d2604;
    }
    local_1c0 = **(undefined8 **)(pMVar20 + 0x48);
    local_1b8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    if ((param_3 >> 3 & 0x1ff) + 1 == (param_4 >> 3 & 0x1ff) + 1) goto LAB_001d2c94;
LAB_001d2624:
    local_370 = 0;
    local_368 = 0;
    pvVar15 = (void *)cv::String::allocate((String *)&local_370,0x59);
    memcpy(pvVar15,&DAT_00443300,0x59);
    cv::error(-0xd7,(String *)&local_370,
              "cv::Ptr<cv::BaseColumnFilter> cv::getLinearColumnFilter(int, int, cv::InputArray, int, int, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xe67);
    cv::String::deallocate((String *)&local_370);
  }
  else {
    cv::_InputArray::getMat_((int)param_5);
LAB_001d2604:
    if ((param_3 >> 3 & 0x1ff) + 1 != (param_4 >> 3 & 0x1ff) + 1) goto LAB_001d2624;
LAB_001d2c94:
    uVar14 = param_4 & 7;
    if (uVar14 < 4) {
      uVar14 = 4;
    }
    if (((param_3 & 7) < uVar14) || ((param_3 & 7) != (local_210 & 0xfff))) goto LAB_001d2624;
  }
  dVar11 = local_410;
  uVar22 = param_4 & 7;
  uVar21 = param_3 & 7;
  uVar14 = local_408 & 3;
  if ((local_408 & 3) == 0) {
    if (uVar22 == 0) {
      if (uVar21 == 4) {
        if (param_8 != 0) {
          uVar14 = 1 << (ulong)(param_8 - 1 & 0x1f);
        }
        puVar17 = operator_new(0x80);
        uVar12 = local_404;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f3730;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        *(undefined4 *)(puVar17 + 0xe) = 0;
        *(undefined4 *)((long)puVar17 + 0x74) = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        lVar16 = lrint(dVar11);
        *(int *)((long)puVar17 + 0x7c) = (int)lVar16;
        *(uint *)(puVar17 + 0xe) = param_8;
        *(uint *)((long)puVar17 + 0x74) = uVar14;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 4) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_350 = 0;
          local_348 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_350,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_350,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::FixedPtCastEx<int, unsigned char>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_350);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4180;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      else if (uVar21 == 5) {
        puVar17 = operator_new(0x78);
        uVar12 = local_404;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f3760;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        *(float *)((long)puVar17 + 0x74) = (float)dVar11;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_340 = 0;
          local_338 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_340,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_340,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, unsigned char>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_340);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &DAT_004f41b0;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      else {
        if (uVar21 != 6) goto LAB_001d269c;
        FUN_001d08a0(&local_400,(Mat *)&local_210,&local_404,&local_410);
        param_1[1] = lStack_3f8;
        *param_1 = local_400;
        if (local_400 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_400 + 8);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (local_400 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_400 + 8);
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
    }
    else if (uVar22 == 2) {
      if (uVar21 == 5) {
        puVar17 = operator_new(0x78);
        uVar12 = local_404;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f37c0;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        *(float *)((long)puVar17 + 0x74) = (float)dVar11;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_330 = 0;
          local_328 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_330,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_330,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short unsigned int>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_330);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4210;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      else {
        if (uVar21 != 6) goto LAB_001d269c;
        puVar17 = operator_new(0x80);
        uVar12 = local_404;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f37f0;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        puVar17[0xf] = dVar11;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_320 = 0;
          local_318 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_320,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_320,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short unsigned int>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_320);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4240;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
    }
    else if (uVar22 == 3) {
      if (uVar21 == 5) {
        FUN_001d0a8c(&local_3f0,(Mat *)&local_210,&local_404,&local_410);
        param_1[1] = lStack_3e8;
        *param_1 = local_3f0;
        if (local_3f0 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_3f0 + 8);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (local_3f0 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_3f0 + 8);
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      else {
        if (uVar21 != 6) goto LAB_001d269c;
        puVar17 = operator_new(0x80);
        uVar12 = local_404;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f3850;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        puVar17[0xf] = dVar11;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_310 = 0;
          local_308 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_310,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_310,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, short int>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_310);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f42a0;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
    }
    else if (uVar22 == 5) {
      if (uVar21 != 5) goto LAB_001d269c;
      puVar17 = operator_new(0x78);
      uVar12 = local_404;
      dVar11 = local_410;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f3880;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_210 >> 0xe & 1) == 0) {
        local_70 = 0x2010000;
        local_68 = (Mat *)(puVar17 + 2);
        local_60 = local_210 & 0x4000;
        local_5c = local_210 & 0x4000;
        cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      *(float *)((long)puVar17 + 0x74) = (float)dVar11;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_300 = 0;
        local_2f8 = 0;
        pvVar15 = (void *)cv::String::allocate((String *)&local_300,0x4d);
        memcpy(pvVar15,&DAT_00443250,0x4d);
        cv::error(-0xd7,(String *)&local_300,
                  "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, float>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
        cv::String::deallocate((String *)&local_300);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f42d0;
      piVar1 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    else {
      if ((uVar21 != 6) || (uVar22 != 6)) goto LAB_001d269c;
      puVar17 = operator_new(0x80);
      uVar12 = local_404;
      dVar11 = local_410;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f38b0;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_210 >> 0xe & 1) == 0) {
        local_70 = 0x2010000;
        local_68 = (Mat *)(puVar17 + 2);
        local_60 = local_210 & 0x4000;
        local_5c = local_210 & 0x4000;
        cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      puVar17[0xf] = dVar11;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_2f0 = 0;
        local_2e8 = 0;
        pvVar15 = (void *)cv::String::allocate((String *)&local_2f0,0x4d);
        memcpy(pvVar15,&DAT_00443250,0x4d);
        cv::error(-0xd7,(String *)&local_2f0,
                  "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, double>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
        cv::String::deallocate((String *)&local_2f0);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4300;
      piVar1 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  else if (local_208 + local_204 == 4) {
    if (uVar22 == 0) {
      if (uVar21 == 4) {
        local_d4 = 0.0;
        if (param_8 != 0) {
          local_d4 = (float)(1 << (ulong)(param_8 - 1 & 0x1f));
        }
        local_160 = &local_198;
        local_68 = (Mat *)&local_1a0;
        local_1a8 = local_408;
        dVar23 = (double)(1 << (ulong)(param_8 & 0x1f));
        local_158 = &local_150;
        local_1a0 = 0x42ff0000;
        local_19c = 0;
        local_198 = 0;
        local_194 = 0;
        local_190 = 0;
        local_188 = 0;
        local_180 = 0;
        local_178 = 0;
        local_170 = 0;
        local_168 = 0;
        local_148 = 0;
        local_150 = 0;
        local_60 = 0;
        local_5c = 0;
        local_70 = 0x2010000;
        local_d8 = param_8;
        cv::Mat::convertTo((Mat *)&local_210,(_OutputArray *)&local_70,5,1.0 / dVar23,0.0);
        local_1a4 = (float)(dVar11 / dVar23);
        if ((local_1a8 & 3) == 0) {
          local_2e0 = 0;
          local_2d8 = 0;
          pcVar19 = (char *)cv::String::allocate((String *)&local_2e0,0x40);
          uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
          uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
          uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
          uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
          uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
          uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
          uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
          *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
          *(undefined8 *)(pcVar19 + 8) = uVar4;
          *(undefined8 *)(pcVar19 + 0x10) = uVar5;
          *(undefined8 *)(pcVar19 + 0x18) = uVar6;
          *(undefined8 *)(pcVar19 + 0x20) = uVar7;
          *(undefined8 *)(pcVar19 + 0x28) = uVar8;
          *(undefined8 *)(pcVar19 + 0x30) = uVar9;
          *(undefined8 *)(pcVar19 + 0x38) = uVar10;
          cv::error(-0xd7,(String *)&local_2e0,
                    "cv::SymmColumnVec_32s8u::SymmColumnVec_32s8u(const cv::Mat&, int, int, double)"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x998);
          cv::String::deallocate((String *)&local_2e0);
        }
        puVar17 = operator_new(0xe8);
        FUN_001d21c8(local_410,puVar17,(Mat *)&local_210,local_404,local_408,&local_d8,&local_1a8);
        *puVar17 = &PTR_FUN_004f3940;
        if (*(int *)(puVar17 + 1) != 3) {
          local_2d0 = 0;
          local_2c8 = 0;
          pcVar19 = (char *)cv::String::allocate((String *)&local_2d0,0x10);
          uVar4 = s_this_>ksize____3_004432e8._8_8_;
          *(undefined8 *)pcVar19 = s_this_>ksize____3_004432e8._0_8_;
          *(undefined8 *)(pcVar19 + 8) = uVar4;
          cv::error(-0xd7,(String *)&local_2d0,
                    "cv::SymmColumnSmallFilter<CastOp, VecOp>::SymmColumnSmallFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::FixedPtCastEx<int, unsigned char>; VecOp = cv::SymmColumnVec_32s8u]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd77);
          cv::String::deallocate((String *)&local_2d0);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4330;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar13 == 1) {
          FUN_001c0010();
        }
        cv::Mat::release((Mat *)&local_1a0);
        if (local_158 != &local_150) {
          cv::fastFree(local_158);
        }
        goto LAB_001d26e8;
      }
      goto LAB_001d2750;
    }
    if (uVar22 == 3) {
      if ((uVar21 == 4) && (param_8 == 0)) {
        local_134 = 0;
        local_130 = 0;
        local_138 = 0x42ff0000;
        local_f8 = &local_130;
        local_12c = 0;
        local_f0 = &local_e8;
        local_128 = 0;
        local_120 = 0;
        local_118 = 0;
        local_110 = 0;
        local_108 = 0;
        local_100 = 0;
        local_e0 = 0;
        local_e8 = 0;
        local_68 = (Mat *)&local_138;
        local_140 = local_408;
        local_60 = 0;
        local_5c = 0;
        local_70 = 0x2010000;
        cv::Mat::convertTo((Mat *)&local_210,(_OutputArray *)&local_70,5,1.0,0.0);
        local_13c = (float)dVar11;
        if ((local_140 & 3) == 0) {
          local_2c0 = 0;
          local_2b8 = 0;
          pcVar19 = (char *)cv::String::allocate((String *)&local_2c0,0x40);
          uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
          uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
          uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
          uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
          uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
          uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
          uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
          *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
          *(undefined8 *)(pcVar19 + 8) = uVar4;
          *(undefined8 *)(pcVar19 + 0x10) = uVar5;
          *(undefined8 *)(pcVar19 + 0x18) = uVar6;
          *(undefined8 *)(pcVar19 + 0x20) = uVar7;
          *(undefined8 *)(pcVar19 + 0x28) = uVar8;
          *(undefined8 *)(pcVar19 + 0x30) = uVar9;
          *(undefined8 *)(pcVar19 + 0x38) = uVar10;
          cv::error(-0xd7,(String *)&local_2c0,
                    "cv::SymmColumnSmallVec_32s16s::SymmColumnSmallVec_32s16s(const cv::Mat&, int, int, double)"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xa30);
          cv::String::deallocate((String *)&local_2c0);
        }
        FUN_001d0c84(&local_3e0,(Mat *)&local_210,&local_404,&local_410,&local_408,
                     (_OutputArray *)&local_70,&local_140);
        param_1[1] = lStack_3d8;
        *param_1 = local_3e0;
        if (local_3e0 != 0) {
          piVar1 = (int *)(local_3e0 + 8);
          do {
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar3) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          piVar1 = (int *)(local_3e0 + 8);
          if (local_3e0 != 0) {
            do {
              iVar13 = *piVar1;
              cVar2 = '\x01';
              bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar3) {
                *piVar1 = iVar13 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
            if (iVar13 == 1) {
              FUN_001c0010();
            }
          }
        }
        cv::Mat::release((Mat *)&local_138);
        if (local_f0 != &local_e8) {
          cv::fastFree(local_f0);
        }
        goto LAB_001d26e8;
      }
LAB_001d3554:
      if (uVar21 == 4) {
        puVar17 = operator_new(0x80);
        uVar12 = local_404;
        uVar14 = local_408;
        dVar11 = local_410;
        *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
        *(undefined4 *)(puVar17 + 1) = 0xffffffff;
        *puVar17 = &PTR_FUN_004f3b50;
        *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
        *(undefined4 *)((long)puVar17 + 0x14) = 0;
        *(undefined4 *)(puVar17 + 3) = 0;
        *(undefined4 *)((long)puVar17 + 0x1c) = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        puVar17[9] = 0;
        puVar17[10] = puVar17 + 3;
        puVar17[0xb] = puVar17 + 0xc;
        puVar17[0xd] = 0;
        puVar17[0xc] = 0;
        if ((local_210 >> 0xe & 1) == 0) {
          local_70 = 0x2010000;
          local_68 = (Mat *)(puVar17 + 2);
          local_60 = local_210 & 0x4000;
          local_5c = local_210 & 0x4000;
          cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
        }
        else {
          cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
        }
        *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
        *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
        lVar16 = lrint(dVar11);
        *(int *)((long)puVar17 + 0x74) = (int)lVar16;
        if (((*(uint *)(puVar17 + 2) & 0xfff) != 4) ||
           ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
          local_250 = 0;
          local_248 = 0;
          pvVar15 = (void *)cv::String::allocate((String *)&local_250,0x4d);
          memcpy(pvVar15,&DAT_00443250,0x4d);
          cv::error(-0xd7,(String *)&local_250,
                    "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<int, short int>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
          cv::String::deallocate((String *)&local_250);
        }
        *(uint *)(puVar17 + 0xf) = uVar14;
        *puVar17 = &PTR_FUN_004f3b80;
        if ((uVar14 & 3) == 0) {
          local_260 = 0;
          local_258 = 0;
          pcVar19 = (char *)cv::String::allocate((String *)&local_260,0x40);
          uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
          uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
          uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
          uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
          uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
          uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
          uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
          *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
          *(undefined8 *)(pcVar19 + 8) = uVar4;
          *(undefined8 *)(pcVar19 + 0x10) = uVar5;
          *(undefined8 *)(pcVar19 + 0x18) = uVar6;
          *(undefined8 *)(pcVar19 + 0x20) = uVar7;
          *(undefined8 *)(pcVar19 + 0x28) = uVar8;
          *(undefined8 *)(pcVar19 + 0x30) = uVar9;
          *(undefined8 *)(pcVar19 + 0x38) = uVar10;
          cv::error(-0xd7,(String *)&local_260,
                    "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<int, short int>; VecOp = cv::ColumnNoVec]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
          cv::String::deallocate((String *)&local_260);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f44b0;
        piVar1 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      else {
        if (uVar21 == 5) {
          local_28 = &local_60;
          local_20 = &local_18;
          local_68._4_4_ = 0;
          local_68._0_4_ = 0x42ff0000;
          local_60 = 0;
          local_5c = 0;
          local_58 = 0;
          uStack_50 = 0;
          local_48 = 0;
          uStack_40 = 0;
          local_38 = 0;
          lStack_30 = 0;
          local_10 = 0;
          local_18 = 0;
          local_70 = local_408;
          if (lStack_1d8 != 0) {
            piVar1 = (int *)(lStack_1d8 + 0x14);
            do {
              cVar2 = '\x01';
              bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar3) {
                *piVar1 = *piVar1 + 1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
          }
          cv::Mat::release((Mat *)&local_68);
          local_68 = (Mat *)CONCAT44(local_68._4_4_,local_210);
          if ((local_68._4_4_ < 3) && (local_20c < 3)) {
            local_68 = (Mat *)CONCAT44(local_20c,local_210);
            local_60 = local_208;
            local_5c = local_204;
            *local_20 = *local_1c8;
            local_20[1] = local_1c8[1];
          }
          else {
            cv::Mat::copySize((Mat *)&local_68,(Mat *)&local_210);
          }
          local_6c = (float)dVar11;
          uStack_50 = uStack_1f8;
          local_58 = local_200;
          uStack_40 = uStack_1e8;
          local_48 = local_1f0;
          lStack_30 = lStack_1d8;
          local_38 = local_1e0;
          if ((local_70 & 3) == 0) {
            local_240 = 0;
            local_238 = 0;
            pcVar19 = (char *)cv::String::allocate((String *)&local_240,0x40);
            uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
            uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
            uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
            uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
            uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
            uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
            uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
            *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
            *(undefined8 *)(pcVar19 + 8) = uVar4;
            *(undefined8 *)(pcVar19 + 0x10) = uVar5;
            *(undefined8 *)(pcVar19 + 0x18) = uVar6;
            *(undefined8 *)(pcVar19 + 0x20) = uVar7;
            *(undefined8 *)(pcVar19 + 0x28) = uVar8;
            *(undefined8 *)(pcVar19 + 0x30) = uVar9;
            *(undefined8 *)(pcVar19 + 0x38) = uVar10;
            cv::error(-0xd7,(String *)&local_240,
                      "cv::SymmColumnVec_32f16s::SymmColumnVec_32f16s(const cv::Mat&, int, int, double)"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xae3);
            cv::String::deallocate((String *)&local_240);
          }
          local_8 = cv::checkHardwareSupport(100);
          puVar17 = operator_new(0xf0);
          uVar12 = local_404;
          uVar14 = local_408;
          dVar11 = local_410;
          *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
          *(undefined4 *)(puVar17 + 1) = 0xffffffff;
          *puVar17 = &PTR_FUN_004f3bb0;
          *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
          *(undefined4 *)((long)puVar17 + 0x14) = 0;
          *(undefined4 *)(puVar17 + 3) = 0;
          *(undefined4 *)((long)puVar17 + 0x1c) = 0;
          puVar17[4] = 0;
          puVar17[5] = 0;
          puVar17[6] = 0;
          puVar17[7] = 0;
          puVar17[8] = 0;
          puVar17[9] = 0;
          puVar17[10] = puVar17 + 3;
          *(undefined4 *)(puVar17 + 0x10) = 0x42ff0000;
          puVar17[0xb] = puVar17 + 0xc;
          puVar17[0xd] = 0;
          puVar17[0xc] = 0;
          *(undefined4 *)((long)puVar17 + 0x84) = 0;
          *(undefined4 *)(puVar17 + 0x11) = 0;
          *(undefined4 *)((long)puVar17 + 0x8c) = 0;
          puVar17[0x12] = 0;
          puVar17[0x13] = 0;
          puVar17[0x14] = 0;
          puVar17[0x15] = 0;
          puVar17[0x16] = 0;
          puVar17[0x17] = 0;
          puVar17[0x18] = puVar17 + 0x11;
          puVar17[0x19] = puVar17 + 0x1a;
          puVar17[0x1b] = 0;
          puVar17[0x1a] = 0;
          *(undefined4 *)(puVar17 + 0xf) = 0;
          if ((local_210 >> 0xe & 1) == 0) {
            local_d8 = 0x2010000;
            local_d0 = (Mat *)(puVar17 + 2);
            local_c8 = local_210 & 0x4000;
            local_c4 = local_210 & 0x4000;
            cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_d8);
          }
          else {
            cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
          }
          *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
          *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
          *(float *)(puVar17 + 0x1d) = (float)dVar11;
          *(uint *)(puVar17 + 0xf) = local_70;
          *(float *)((long)puVar17 + 0x7c) = local_6c;
          cv::Mat::operator=((Mat *)(puVar17 + 0x10),(Mat *)&local_68);
          *(undefined1 *)(puVar17 + 0x1c) = local_8;
          if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
             ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
            local_220 = 0;
            local_218 = 0;
            pvVar15 = (void *)cv::String::allocate((String *)&local_220,0x4d);
            memcpy(pvVar15,&DAT_00443250,0x4d);
            cv::error(-0xd7,(String *)&local_220,
                      "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short int>; VecOp = cv::SymmColumnVec_32f16s]"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
            cv::String::deallocate((String *)&local_220);
          }
          *(uint *)((long)puVar17 + 0xec) = uVar14;
          *puVar17 = &PTR_FUN_004f3be0;
          if ((uVar14 & 3) == 0) {
            local_230 = 0;
            local_228 = 0;
            pcVar19 = (char *)cv::String::allocate((String *)&local_230,0x40);
            uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
            uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
            uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
            uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
            uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
            uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
            uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
            *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
            *(undefined8 *)(pcVar19 + 8) = uVar4;
            *(undefined8 *)(pcVar19 + 0x10) = uVar5;
            *(undefined8 *)(pcVar19 + 0x18) = uVar6;
            *(undefined8 *)(pcVar19 + 0x20) = uVar7;
            *(undefined8 *)(pcVar19 + 0x28) = uVar8;
            *(undefined8 *)(pcVar19 + 0x30) = uVar9;
            *(undefined8 *)(pcVar19 + 0x38) = uVar10;
            cv::error(-0xd7,(String *)&local_230,
                      "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short int>; VecOp = cv::SymmColumnVec_32f16s]"
                      ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
            cv::String::deallocate((String *)&local_230);
          }
          puVar18 = operator_new(0x20);
          *(undefined4 *)(puVar18 + 1) = 1;
          puVar18[2] = puVar17;
          *puVar18 = &PTR_FUN_004f44e0;
          piVar1 = (int *)(puVar18 + 1);
          *param_1 = (long)puVar18;
          param_1[1] = (long)puVar17;
          do {
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar3) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          do {
            iVar13 = *piVar1;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar3) {
              *piVar1 = iVar13 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar13 == 1) {
            FUN_001c0010();
          }
          cv::Mat::release((Mat *)&local_68);
          if (local_20 != &local_18) {
            cv::fastFree(local_20);
          }
          goto LAB_001d26e8;
        }
        if (uVar21 != 6) goto LAB_001d269c;
        FUN_001d1970(&local_3a0,(Mat *)&local_210,&local_404,&local_410,&local_408);
        param_1[1] = lStack_398;
        *param_1 = local_3a0;
        if (local_3a0 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_3a0 + 8);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (local_3a0 == 0) goto LAB_001d26e8;
        piVar1 = (int *)(local_3a0 + 8);
        do {
          iVar13 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar13 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
    }
    else {
      if (uVar22 != 5) {
        if (uVar22 != 2) goto LAB_001d34d0;
        goto LAB_001d3450;
      }
      if (uVar21 != 5) goto LAB_001d269c;
      FUN_001d1068(&local_3d0,(Mat *)&local_210,&local_404,&local_410,&local_408,&local_d8,&local_70
                  );
      param_1[1] = lStack_3c8;
      *param_1 = local_3d0;
      if (local_3d0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3d0 + 8);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (local_3d0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3d0 + 8);
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  else if (uVar22 == 0) {
    if (uVar21 == 4) {
      local_13c = 0.0;
      if (param_8 != 0) {
        local_13c = (float)(1 << (ulong)(param_8 - 1 & 0x1f));
      }
      local_90 = &local_c8;
      local_88 = &local_80;
      local_68 = (Mat *)&local_d0;
      local_d8 = local_408;
      dVar23 = (double)(1 << (ulong)(param_8 & 0x1f));
      local_d0 = (Mat *)0x42ff0000;
      local_c8 = 0;
      local_c4 = 0;
      local_c0 = 0;
      local_b8 = 0;
      local_b0 = 0;
      local_a8 = 0;
      local_a0 = 0;
      local_98 = 0;
      local_78 = 0;
      local_80 = 0;
      local_60 = 0;
      local_5c = 0;
      local_70 = 0x2010000;
      local_140 = param_8;
      cv::Mat::convertTo((Mat *)&local_210,(_OutputArray *)&local_70,5,1.0 / dVar23,0.0);
      local_d4 = (float)(dVar11 / dVar23);
      if ((local_d8 & 3) == 0) {
        local_2b0 = 0;
        local_2a8 = 0;
        pcVar19 = (char *)cv::String::allocate((String *)&local_2b0,0x40);
        uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
        uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
        uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
        uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
        uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
        uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
        uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
        *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
        *(undefined8 *)(pcVar19 + 8) = uVar4;
        *(undefined8 *)(pcVar19 + 0x10) = uVar5;
        *(undefined8 *)(pcVar19 + 0x18) = uVar6;
        *(undefined8 *)(pcVar19 + 0x20) = uVar7;
        *(undefined8 *)(pcVar19 + 0x28) = uVar8;
        *(undefined8 *)(pcVar19 + 0x30) = uVar9;
        *(undefined8 *)(pcVar19 + 0x38) = uVar10;
        cv::error(-0xd7,(String *)&local_2b0,
                  "cv::SymmColumnVec_32s8u::SymmColumnVec_32s8u(const cv::Mat&, int, int, double)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x998);
        cv::String::deallocate((String *)&local_2b0);
      }
      pvVar15 = operator_new(0xe8);
      FUN_001d21c8(local_410,pvVar15,(Mat *)&local_210,local_404,local_408,&local_140,&local_d8);
      puVar17 = operator_new(0x20);
      *(undefined4 *)(puVar17 + 1) = 1;
      puVar17[2] = pvVar15;
      *puVar17 = &PTR_FUN_004f43c0;
      piVar1 = (int *)(puVar17 + 1);
      *param_1 = (long)puVar17;
      param_1[1] = (long)pvVar15;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar13 == 1) {
        FUN_001c0010();
      }
      cv::Mat::release((Mat *)&local_d0);
      if (local_88 != &local_80) {
        cv::fastFree(local_88);
      }
      goto LAB_001d26e8;
    }
LAB_001d2750:
    if (uVar21 == 5) {
      FUN_001d13dc(&local_3c0,(Mat *)&local_210,&local_404,&local_410,&local_408);
      param_1[1] = lStack_3b8;
      *param_1 = local_3c0;
      if (local_3c0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3c0 + 8);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (local_3c0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3c0 + 8);
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    else {
      if (uVar21 != 6) {
LAB_001d269c:
        cv::format("Unsupported combination of buffer format (=%d), and destination format (=%d)",
                   aSStack_360,(ulong)param_3,(ulong)param_4);
        cv::error(-0xd5,aSStack_360,
                  "cv::Ptr<cv::BaseColumnFilter> cv::getLinearColumnFilter(int, int, cv::InputArray, int, int, double, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xeb8);
        cv::String::deallocate(aSStack_360);
        *param_1 = 0;
        param_1[1] = 0;
        goto LAB_001d26e8;
      }
      puVar17 = operator_new(0x88);
      uVar12 = local_404;
      uVar14 = local_408;
      dVar11 = local_410;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &DAT_004f3790;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_210 >> 0xe & 1) == 0) {
        local_70 = 0x2010000;
        local_68 = (Mat *)(puVar17 + 2);
        local_60 = local_210 & 0x4000;
        local_5c = local_210 & 0x4000;
        cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      puVar17[0xf] = dVar11;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 6) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_290 = 0;
        local_288 = 0;
        pvVar15 = (void *)cv::String::allocate((String *)&local_290,0x4d);
        memcpy(pvVar15,&DAT_00443250,0x4d);
        cv::error(-0xd7,(String *)&local_290,
                  "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, unsigned char>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
        cv::String::deallocate((String *)&local_290);
      }
      *(uint *)(puVar17 + 0x10) = uVar14;
      *puVar17 = &PTR_FUN_004f3ac0;
      if ((uVar14 & 3) == 0) {
        local_2a0 = 0;
        local_298 = 0;
        pcVar19 = (char *)cv::String::allocate((String *)&local_2a0,0x40);
        uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
        uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
        uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
        uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
        uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
        uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
        uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
        *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
        *(undefined8 *)(pcVar19 + 8) = uVar4;
        *(undefined8 *)(pcVar19 + 0x10) = uVar5;
        *(undefined8 *)(pcVar19 + 0x18) = uVar6;
        *(undefined8 *)(pcVar19 + 0x20) = uVar7;
        *(undefined8 *)(pcVar19 + 0x28) = uVar8;
        *(undefined8 *)(pcVar19 + 0x30) = uVar9;
        *(undefined8 *)(pcVar19 + 0x38) = uVar10;
        cv::error(-0xd7,(String *)&local_2a0,
                  "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<double, unsigned char>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
        cv::String::deallocate((String *)&local_2a0);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4420;
      piVar1 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  else if (uVar22 == 2) {
LAB_001d3450:
    if (uVar21 == 5) {
      puVar17 = operator_new(0x80);
      uVar12 = local_404;
      uVar14 = local_408;
      dVar11 = local_410;
      *(undefined4 *)((long)puVar17 + 0xc) = 0xffffffff;
      *(undefined4 *)(puVar17 + 1) = 0xffffffff;
      *puVar17 = &PTR_FUN_004f37c0;
      *(undefined4 *)(puVar17 + 2) = 0x42ff0000;
      *(undefined4 *)((long)puVar17 + 0x14) = 0;
      *(undefined4 *)(puVar17 + 3) = 0;
      *(undefined4 *)((long)puVar17 + 0x1c) = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      puVar17[9] = 0;
      puVar17[10] = puVar17 + 3;
      puVar17[0xb] = puVar17 + 0xc;
      puVar17[0xd] = 0;
      puVar17[0xc] = 0;
      if ((local_210 >> 0xe & 1) == 0) {
        local_70 = 0x2010000;
        local_68 = (Mat *)(puVar17 + 2);
        local_60 = local_210 & 0x4000;
        local_5c = local_210 & 0x4000;
        cv::Mat::copyTo((Mat *)&local_210,(_OutputArray *)&local_70);
      }
      else {
        cv::Mat::operator=((Mat *)(puVar17 + 2),(Mat *)&local_210);
      }
      *(undefined4 *)((long)puVar17 + 0xc) = uVar12;
      *(int *)(puVar17 + 1) = *(int *)(puVar17 + 3) + *(int *)((long)puVar17 + 0x1c) + -1;
      *(float *)((long)puVar17 + 0x74) = (float)dVar11;
      if (((*(uint *)(puVar17 + 2) & 0xfff) != 5) ||
         ((*(int *)(puVar17 + 3) != 1 && (*(int *)((long)puVar17 + 0x1c) != 1)))) {
        local_270 = 0;
        local_268 = 0;
        pvVar15 = (void *)cv::String::allocate((String *)&local_270,0x4d);
        memcpy(pvVar15,&DAT_00443250,0x4d);
        cv::error(-0xd7,(String *)&local_270,
                  "cv::ColumnFilter<CastOp, VecOp>::ColumnFilter(const cv::Mat&, int, double, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short unsigned int>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xcce);
        cv::String::deallocate((String *)&local_270);
      }
      *(uint *)(puVar17 + 0xf) = uVar14;
      *puVar17 = &PTR_FUN_004f3af0;
      if ((uVar14 & 3) == 0) {
        local_280 = 0;
        local_278 = 0;
        pcVar19 = (char *)cv::String::allocate((String *)&local_280,0x40);
        uVar10 = s__symmetryType____KERNEL_SYMMETRI_004432a0._56_8_;
        uVar9 = s__symmetryType____KERNEL_SYMMETRI_004432a0._48_8_;
        uVar8 = s__symmetryType____KERNEL_SYMMETRI_004432a0._40_8_;
        uVar7 = s__symmetryType____KERNEL_SYMMETRI_004432a0._32_8_;
        uVar6 = s__symmetryType____KERNEL_SYMMETRI_004432a0._24_8_;
        uVar5 = s__symmetryType____KERNEL_SYMMETRI_004432a0._16_8_;
        uVar4 = s__symmetryType____KERNEL_SYMMETRI_004432a0._8_8_;
        *(undefined8 *)pcVar19 = s__symmetryType____KERNEL_SYMMETRI_004432a0._0_8_;
        *(undefined8 *)(pcVar19 + 8) = uVar4;
        *(undefined8 *)(pcVar19 + 0x10) = uVar5;
        *(undefined8 *)(pcVar19 + 0x18) = uVar6;
        *(undefined8 *)(pcVar19 + 0x20) = uVar7;
        *(undefined8 *)(pcVar19 + 0x28) = uVar8;
        *(undefined8 *)(pcVar19 + 0x30) = uVar9;
        *(undefined8 *)(pcVar19 + 0x38) = uVar10;
        cv::error(-0xd7,(String *)&local_280,
                  "cv::SymmColumnFilter<CastOp, VecOp>::SymmColumnFilter(const cv::Mat&, int, double, int, const CastOp&, const VecOp&) [with CastOp = cv::Cast<float, short unsigned int>; VecOp = cv::ColumnNoVec]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xd0d);
        cv::String::deallocate((String *)&local_280);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4450;
      piVar1 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    else {
      if (uVar21 != 6) goto LAB_001d269c;
      FUN_001d16ac(&local_3b0,(Mat *)&local_210,&local_404,&local_410,&local_408);
      param_1[1] = lStack_3a8;
      *param_1 = local_3b0;
      if (local_3b0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3b0 + 8);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (local_3b0 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_3b0 + 8);
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  else {
    if (uVar22 == 3) goto LAB_001d3554;
    if (uVar22 == 5) {
      if (uVar21 != 5) goto LAB_001d269c;
      FUN_001d1c34(&local_390,(Mat *)&local_210,&local_404,&local_410,&local_408,&local_d8,&local_70
                  );
      param_1[1] = lStack_388;
      *param_1 = local_390;
      if (local_390 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_390 + 8);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (local_390 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_390 + 8);
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    else {
LAB_001d34d0:
      if ((uVar21 != 6) || (uVar22 != 6)) goto LAB_001d269c;
      FUN_001d1f04(&local_380,(Mat *)&local_210,&local_404,&local_410,&local_408);
      param_1[1] = lStack_378;
      *param_1 = local_380;
      if (local_380 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_380 + 8);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (local_380 == 0) goto LAB_001d26e8;
      piVar1 = (int *)(local_380 + 8);
      do {
        iVar13 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  if (iVar13 == 1) {
    FUN_001c0010();
  }
LAB_001d26e8:
  cv::Mat::release((Mat *)&local_210);
  if (local_1c8 != &local_1c0) {
    cv::fastFree(local_1c8);
  }
  return param_1;
}


==================================================================

### FUNC 001d4d10 (1616 bytes) name=_M_fill_insert

/* std::vector<int, std::allocator<int> >::_M_fill_insert(__gnu_cxx::__normal_iterator<int*,
   std::vector<int, std::allocator<int> > >, unsigned long, int const&) */

void __thiscall
std::vector<int,std::allocator<int>>::_M_fill_insert
          (vector<int,std::allocator<int>> *this,undefined4 *param_2,ulong param_3,
          undefined4 *param_4)

{
  undefined4 uVar1;
  ulong uVar2;
  ulong uVar3;
  undefined8 *puVar4;
  undefined4 *puVar5;
  void *__dest;
  void *pvVar6;
  ulong uVar7;
  ulong uVar8;
  undefined4 *puVar9;
  ulong uVar10;
  undefined4 *puVar11;
  size_t sVar12;
  size_t __n;
  
  if (param_3 == 0) {
    return;
  }
  puVar11 = *(undefined4 **)(this + 8);
  if (param_3 <= (ulong)(*(long *)(this + 0x10) - (long)puVar11 >> 2)) {
    sVar12 = (long)puVar11 - (long)param_2;
    uVar1 = *param_4;
    uVar2 = (long)sVar12 >> 2;
    if (param_3 < uVar2) {
      puVar9 = puVar11 + -param_3;
      puVar5 = puVar11;
      if ((long)puVar11 - (long)puVar9 >> 2 != 0) {
        memmove(puVar11,puVar9,(long)puVar11 - (long)puVar9);
        puVar5 = *(undefined4 **)(this + 8);
      }
      sVar12 = (long)puVar9 - (long)param_2;
      *(undefined4 **)(this + 8) = puVar5 + param_3;
      if ((long)sVar12 >> 2 != 0) {
        memmove((void *)((long)puVar11 - sVar12),param_2,sVar12);
      }
      puVar11 = param_2 + param_3;
      if (param_2 == puVar11) {
        return;
      }
      puVar5 = param_2 + 1;
      uVar7 = (ulong)((long)puVar11 - (long)puVar5) >> 2;
      uVar3 = -((ulong)param_2 >> 2 & 3) & 3;
      uVar2 = uVar7 + 1;
      uVar8 = uVar2;
      if (uVar3 < uVar2) {
        uVar8 = uVar3;
      }
      uVar3 = uVar2;
      if ((uVar2 < 7) || (uVar3 = uVar8, puVar9 = param_2, uVar8 != 0)) {
        *param_2 = uVar1;
        if (uVar3 != 1) {
          param_2[1] = uVar1;
          puVar5 = param_2 + 2;
          if (uVar3 != 2) {
            param_2[2] = uVar1;
            puVar5 = param_2 + 3;
            if (uVar3 != 3) {
              param_2[3] = uVar1;
              puVar5 = param_2 + 4;
              if (uVar3 != 4) {
                param_2[4] = uVar1;
                puVar5 = param_2 + 5;
                if (uVar3 == 6) {
                  param_2[5] = uVar1;
                  puVar5 = param_2 + 6;
                }
              }
            }
          }
        }
        uVar8 = uVar3;
        puVar9 = puVar5;
        if (uVar2 == uVar3) {
          return;
        }
      }
      uVar3 = ((uVar2 - uVar8) - 4 >> 2) + 1;
      if (2 < uVar7 - uVar8) {
        uVar7 = 0;
        puVar4 = (undefined8 *)(param_2 + uVar8);
        do {
          puVar4[1] = CONCAT44(uVar1,uVar1);
          *puVar4 = CONCAT44(uVar1,uVar1);
          uVar7 = uVar7 + 1;
          puVar4 = puVar4 + 2;
        } while (uVar7 < uVar3);
        puVar9 = puVar9 + uVar3 * 4;
        if (uVar3 * 4 - (uVar2 - uVar8) == 0) {
          return;
        }
      }
      *puVar9 = uVar1;
      if (puVar11 == puVar9 + 1) {
        return;
      }
      puVar9[1] = uVar1;
      if (puVar11 == puVar9 + 2) {
        return;
      }
      puVar9[2] = uVar1;
      return;
    }
    param_3 = param_3 - uVar2;
    if (param_3 != 0) {
      uVar8 = -((ulong)puVar11 >> 2 & 3) & 3;
      if (param_3 < uVar8) {
        uVar8 = param_3;
      }
      uVar3 = param_3;
      if ((param_3 < 7) || (puVar5 = puVar11, uVar7 = param_3, uVar3 = uVar8, uVar8 != 0)) {
        uVar7 = param_3 - 1;
        puVar5 = puVar11 + 1;
        *puVar11 = uVar1;
        if (uVar3 != 1) {
          puVar11[1] = uVar1;
          uVar7 = param_3 - 2;
          puVar5 = puVar11 + 2;
          if (uVar3 != 2) {
            puVar11[2] = uVar1;
            uVar7 = param_3 - 3;
            puVar5 = puVar11 + 3;
            if (uVar3 != 3) {
              puVar11[3] = uVar1;
              uVar7 = param_3 - 4;
              puVar5 = puVar11 + 4;
              if (uVar3 != 4) {
                puVar11[4] = uVar1;
                uVar7 = param_3 - 5;
                puVar5 = puVar11 + 5;
                if (uVar3 == 6) {
                  puVar11[5] = uVar1;
                  uVar7 = param_3 - 6;
                  puVar5 = puVar11 + 6;
                }
              }
            }
          }
        }
        uVar8 = uVar3;
        if (param_3 == uVar3) goto LAB_001d4fbc;
      }
      uVar3 = ((param_3 - uVar8) - 4 >> 2) + 1;
      if (2 < (param_3 - 1) - uVar8) {
        uVar10 = 0;
        puVar4 = (undefined8 *)(puVar11 + uVar8);
        do {
          puVar4[1] = CONCAT44(uVar1,uVar1);
          *puVar4 = CONCAT44(uVar1,uVar1);
          uVar10 = uVar10 + 1;
          puVar4 = puVar4 + 2;
        } while (uVar10 < uVar3);
        puVar5 = puVar5 + uVar3 * 4;
        uVar7 = uVar7 + uVar3 * -4;
        if (param_3 - uVar8 == uVar3 * 4) goto LAB_001d4fbc;
      }
      *puVar5 = uVar1;
      if ((uVar7 != 1) && (puVar5[1] = uVar1, uVar7 != 2)) {
        puVar5[2] = uVar1;
      }
    }
LAB_001d4fbc:
    puVar5 = puVar11 + param_3;
    *(undefined4 **)(this + 8) = puVar5;
    if (uVar2 != 0) {
      memmove(puVar5,param_2,sVar12);
      puVar5 = *(undefined4 **)(this + 8);
    }
    *(size_t *)(this + 8) = (long)puVar5 + sVar12;
    if (puVar11 != param_2) {
      puVar5 = param_2 + 1;
      uVar3 = (ulong)((long)puVar11 - (long)puVar5) >> 2;
      uVar8 = -((ulong)param_2 >> 2 & 3) & 3;
      uVar2 = uVar3 + 1;
      if (uVar2 < uVar8) {
        uVar8 = uVar2;
      }
      uVar7 = uVar2;
      if ((uVar2 < 7) || (uVar7 = uVar8, puVar9 = param_2, uVar8 != 0)) {
        *param_2 = uVar1;
        if (uVar7 != 1) {
          param_2[1] = uVar1;
          puVar5 = param_2 + 2;
          if (uVar7 != 2) {
            param_2[2] = uVar1;
            puVar5 = param_2 + 3;
            if (uVar7 != 3) {
              param_2[3] = uVar1;
              puVar5 = param_2 + 4;
              if (uVar7 != 4) {
                param_2[4] = uVar1;
                puVar5 = param_2 + 5;
                if (uVar7 == 6) {
                  param_2[5] = uVar1;
                  puVar5 = param_2 + 6;
                }
              }
            }
          }
        }
        uVar8 = uVar7;
        puVar9 = puVar5;
        if (uVar2 == uVar7) {
          return;
        }
      }
      uVar7 = ((uVar2 - uVar8) - 4 >> 2) + 1;
      if (2 < uVar3 - uVar8) {
        uVar3 = 0;
        puVar4 = (undefined8 *)(param_2 + uVar8);
        do {
          puVar4[1] = CONCAT44(uVar1,uVar1);
          *puVar4 = CONCAT44(uVar1,uVar1);
          uVar3 = uVar3 + 1;
          puVar4 = puVar4 + 2;
        } while (uVar3 < uVar7);
        puVar9 = puVar9 + uVar7 * 4;
        if (uVar2 - uVar8 == uVar7 * 4) {
          return;
        }
      }
      *puVar9 = uVar1;
      if ((puVar11 != puVar9 + 1) && (puVar9[1] = uVar1, puVar11 != puVar9 + 2)) {
        puVar9[2] = uVar1;
      }
    }
    return;
  }
  pvVar6 = *(void **)this;
  uVar2 = (long)puVar11 - (long)pvVar6 >> 2;
  if (0x3fffffffffffffff - uVar2 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar8 = uVar2;
  if (uVar2 < param_3) {
    uVar8 = param_3;
  }
  uVar8 = uVar8 + uVar2;
  if ((uVar8 < uVar2) || (0x3fffffffffffffff < uVar8)) {
    sVar12 = (long)param_2 - (long)pvVar6;
    uVar8 = 0xfffffffffffffffc;
LAB_001d5160:
    __dest = operator_new(uVar8);
    pvVar6 = *(void **)this;
    __n = (long)param_2 - (long)pvVar6;
  }
  else {
    sVar12 = (long)param_2 - (long)pvVar6;
    if (uVar8 != 0) {
      uVar8 = uVar8 * 4;
      goto LAB_001d5160;
    }
    uVar8 = 0;
    __dest = (void *)0x0;
    __n = sVar12;
  }
  puVar11 = (undefined4 *)((long)__dest + sVar12);
  uVar1 = *param_4;
  uVar2 = -((ulong)puVar11 >> 2 & 3) & 3;
  if (param_3 < uVar2) {
    uVar2 = param_3;
  }
  uVar3 = param_3;
  if ((param_3 < 7) || (uVar7 = param_3, uVar3 = uVar2, uVar2 != 0)) {
    uVar7 = param_3 - 1;
    puVar5 = puVar11 + 1;
    *puVar11 = uVar1;
    if (1 < uVar3) {
      puVar11[1] = uVar1;
      uVar7 = param_3 - 2;
      puVar5 = puVar11 + 2;
      if (uVar3 != 2) {
        puVar11[2] = uVar1;
        uVar7 = param_3 - 3;
        puVar5 = puVar11 + 3;
        if (uVar3 != 3) {
          puVar11[3] = uVar1;
          uVar7 = param_3 - 4;
          puVar5 = puVar11 + 4;
          if (uVar3 != 4) {
            puVar11[4] = uVar1;
            uVar7 = param_3 - 5;
            puVar5 = puVar11 + 5;
            if (uVar3 == 6) {
              puVar11[5] = uVar1;
              uVar7 = param_3 - 6;
              puVar5 = puVar11 + 6;
            }
          }
        }
      }
    }
    uVar2 = uVar3;
    puVar11 = puVar5;
    if (param_3 == uVar3) goto LAB_001d5284;
  }
  uVar3 = ((param_3 - uVar2) - 4 >> 2) + 1;
  if (2 < (param_3 - 1) - uVar2) {
    uVar10 = 0;
    puVar4 = (undefined8 *)((long)__dest + sVar12 + uVar2 * 4);
    do {
      puVar4[1] = CONCAT44(uVar1,uVar1);
      *puVar4 = CONCAT44(uVar1,uVar1);
      uVar10 = uVar10 + 1;
      puVar4 = puVar4 + 2;
    } while (uVar10 < uVar3);
    puVar11 = puVar11 + uVar3 * 4;
    uVar7 = uVar7 + uVar3 * -4;
    if (param_3 - uVar2 == uVar3 * 4) goto LAB_001d5284;
  }
  *puVar11 = uVar1;
  if ((uVar7 != 1) && (puVar11[1] = uVar1, uVar7 != 2)) {
    puVar11[2] = uVar1;
  }
LAB_001d5284:
  if ((long)__n >> 2 != 0) {
    memmove(__dest,pvVar6,__n);
  }
  pvVar6 = (void *)((long)__dest + __n + param_3 * 4);
  sVar12 = *(long *)(this + 8) - (long)param_2;
  if ((long)sVar12 >> 2 != 0) {
    memmove(pvVar6,param_2,sVar12);
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = __dest;
  *(size_t *)(this + 8) = (long)pvVar6 + sVar12;
  *(ulong *)(this + 0x10) = (long)__dest + uVar8;
  return;
}


==================================================================

### FUNC 001d5360 (492 bytes) name=_M_fill_insert

/* std::vector<unsigned char, std::allocator<unsigned char>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char,
   std::allocator<unsigned char> > >, unsigned long, unsigned char const&) */

void __thiscall
std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
          (vector<unsigned_char,std::allocator<unsigned_char>> *this,void *param_2,ulong param_3,
          byte *param_4)

{
  byte bVar1;
  size_t sVar2;
  void *pvVar3;
  long lVar4;
  void *pvVar5;
  ulong uVar6;
  void *__src;
  ulong uVar7;
  
  if (param_3 == 0) {
    return;
  }
  pvVar5 = *(void **)(this + 8);
  if (param_3 <= (ulong)(*(long *)(this + 0x10) - (long)pvVar5)) {
    uVar6 = (long)pvVar5 - (long)param_2;
    bVar1 = *param_4;
    if (param_3 < uVar6) {
      __src = (void *)((long)pvVar5 - param_3);
      pvVar3 = pvVar5;
      if ((long)pvVar5 - (long)__src != 0) {
        pvVar3 = memmove(pvVar5,__src,(long)pvVar5 - (long)__src);
        pvVar5 = *(void **)(this + 8);
      }
      sVar2 = (long)__src - (long)param_2;
      *(ulong *)(this + 8) = (long)pvVar5 + param_3;
      if (sVar2 != 0) {
        memmove((void *)((long)pvVar3 - sVar2),param_2,sVar2);
      }
    }
    else {
      memset(pvVar5,(uint)bVar1,param_3 - uVar6);
      pvVar5 = (void *)(*(long *)(this + 8) + (param_3 - uVar6));
      *(void **)(this + 8) = pvVar5;
      if (uVar6 != 0) {
        memmove(pvVar5,param_2,uVar6);
        pvVar5 = *(void **)(this + 8);
      }
      *(ulong *)(this + 8) = (long)pvVar5 + uVar6;
      param_3 = uVar6;
    }
    memset(param_2,(uint)bVar1,param_3);
    return;
  }
  lVar4 = *(long *)this;
  uVar6 = (long)pvVar5 - lVar4;
  if (~uVar6 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar7 = uVar6;
  if (uVar6 < param_3) {
    uVar7 = param_3;
  }
  uVar7 = uVar7 + uVar6;
  if (uVar7 < uVar6) {
    lVar4 = (long)param_2 - lVar4;
    uVar7 = 0xffffffffffffffff;
  }
  else {
    uVar6 = 0;
    lVar4 = (long)param_2 - lVar4;
    pvVar5 = (void *)0x0;
    if (uVar7 == 0) goto LAB_001d542c;
  }
  pvVar5 = operator_new(uVar7);
  uVar6 = uVar7;
LAB_001d542c:
  memset((void *)((long)pvVar5 + lVar4),(uint)*param_4,param_3);
  sVar2 = (long)param_2 - (long)*(void **)this;
  if (sVar2 != 0) {
    memmove(pvVar5,*(void **)this,sVar2);
  }
  pvVar3 = (void *)((long)pvVar5 + sVar2 + param_3);
  sVar2 = *(long *)(this + 8) - (long)param_2;
  if (sVar2 != 0) {
    memmove(pvVar3,param_2,sVar2);
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = pvVar5;
  *(size_t *)(this + 8) = (long)pvVar3 + sVar2;
  *(ulong *)(this + 0x10) = (long)pvVar5 + uVar6;
  return;
}


==================================================================

### FUNC 001d554c (1288 bytes) name=FUN_001d554c

void FUN_001d554c(long param_1,long *param_2,long *param_3,long *param_4,ulong param_5,uint param_6,
                 uint param_7,int param_8,int param_9,Scalar_ *param_10)

{
  int *piVar1;
  long *plVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  uint uVar6;
  undefined8 uVar7;
  undefined4 uVar8;
  undefined2 uVar9;
  int iVar10;
  long *plVar11;
  char *pcVar12;
  void *pvVar13;
  int iVar14;
  long lVar15;
  int iVar16;
  ulong uVar17;
  uint uVar18;
  ulong uVar19;
  long lVar20;
  int iVar21;
  undefined8 uVar22;
  undefined1 local_11;
  ulong local_10;
  undefined8 local_8;
  
  lVar20 = *param_2;
  iVar3 = ((uint)(param_5 >> 3) & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> (((uint)param_5 & 7) << 1)) & 3);
  *(uint *)(param_1 + 8) = (uint)param_5 & 0xfff;
  *(uint *)(param_1 + 0xc) = param_6 & 0xfff;
  *(uint *)(param_1 + 0x10) = param_7 & 0xfff;
  lVar15 = param_2[1];
  if (lVar20 != 0) {
    piVar1 = (int *)(lVar20 + 8);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  plVar11 = *(long **)(param_1 + 0x100);
  *(long *)(param_1 + 0x108) = lVar15;
  *(long *)(param_1 + 0x100) = lVar20;
  if (plVar11 != (long *)0x0) {
    plVar2 = plVar11 + 1;
    do {
      lVar15 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar15 == 1) {
      (**(code **)(*plVar11 + 0x10))();
    }
  }
  lVar15 = *param_3;
  lVar20 = param_3[1];
  if (lVar15 != 0) {
    piVar1 = (int *)(lVar15 + 8);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  plVar11 = *(long **)(param_1 + 0x110);
  *(long *)(param_1 + 0x118) = lVar20;
  *(long *)(param_1 + 0x110) = lVar15;
  if (plVar11 != (long *)0x0) {
    plVar2 = plVar11 + 1;
    do {
      lVar15 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar15 == 1) {
      (**(code **)(*plVar11 + 0x10))();
    }
  }
  lVar15 = *param_4;
  lVar20 = param_4[1];
  if (lVar15 != 0) {
    piVar1 = (int *)(lVar15 + 8);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  plVar11 = *(long **)(param_1 + 0x120);
  *(long *)(param_1 + 0x128) = lVar20;
  *(long *)(param_1 + 0x120) = lVar15;
  if (plVar11 != (long *)0x0) {
    plVar2 = plVar11 + 1;
    do {
      lVar15 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar15 == 1) {
      (**(code **)(*plVar11 + 0x10))();
      *(int *)(param_1 + 0x48) = param_8;
      if (param_9 < 0) {
        param_9 = param_8;
      }
      *(int *)(param_1 + 0x4c) = param_9;
      goto joined_r0x001d5694;
    }
  }
  *(int *)(param_1 + 0x48) = param_8;
  if (param_9 < 0) {
    param_9 = param_8;
  }
  *(int *)(param_1 + 0x4c) = param_9;
joined_r0x001d5694:
  if (param_9 == 3) {
    local_10 = 0;
    local_8 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x1f);
    cVar4 = s_columnBorderType____BORDER_WRAP_004433b0[0x1e];
    uVar9 = s_columnBorderType____BORDER_WRAP_004433b0._28_2_;
    uVar8 = s_columnBorderType____BORDER_WRAP_004433b0._24_4_;
    uVar7 = s_columnBorderType____BORDER_WRAP_004433b0._8_8_;
    uVar22 = s_columnBorderType____BORDER_WRAP_004433b0._0_8_;
    *(undefined8 *)(pcVar12 + 0x10) = s_columnBorderType____BORDER_WRAP_004433b0._16_8_;
    *(undefined4 *)(pcVar12 + 0x18) = uVar8;
    *(undefined2 *)(pcVar12 + 0x1c) = uVar9;
    pcVar12[0x1e] = cVar4;
    *(undefined8 *)pcVar12 = uVar22;
    *(undefined8 *)(pcVar12 + 8) = uVar7;
    cv::error(-0xd7,(String *)&local_10,
              "void cv::FilterEngine::init(const cv::Ptr<cv::BaseFilter>&, const cv::Ptr<cv::BaseRowFilter>&, const cv::Ptr<cv::BaseColumnFilter>&, int, int, int, int, int, const Scalar&)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x7b);
    cv::String::deallocate((String *)&local_10);
    lVar15 = *(long *)(param_1 + 0x108);
  }
  else {
    lVar15 = *(long *)(param_1 + 0x108);
  }
  if (lVar15 == 0) {
    lVar15 = *(long *)(param_1 + 0x118);
    if ((lVar15 == 0) || (lVar20 = *(long *)(param_1 + 0x128), lVar20 == 0)) {
      local_10 = 0;
      local_8 = 0;
      pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x19);
      cVar4 = s_rowFilter____columnFilter_00443440[0x18];
      uVar7 = s_rowFilter____columnFilter_00443440._8_8_;
      uVar22 = s_rowFilter____columnFilter_00443440._0_8_;
      *(undefined8 *)(pcVar12 + 0x10) = s_rowFilter____columnFilter_00443440._16_8_;
      pcVar12[0x18] = cVar4;
      *(undefined8 *)pcVar12 = uVar22;
      *(undefined8 *)(pcVar12 + 8) = uVar7;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::FilterEngine::init(const cv::Ptr<cv::BaseFilter>&, const cv::Ptr<cv::BaseRowFilter>&, const cv::Ptr<cv::BaseColumnFilter>&, int, int, int, int, int, const Scalar&)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x7f);
      cv::String::deallocate((String *)&local_10);
      lVar15 = *(long *)(param_1 + 0x118);
      lVar20 = *(long *)(param_1 + 0x128);
    }
    iVar21 = *(int *)(lVar15 + 8);
    iVar16 = *(int *)(lVar20 + 8);
    iVar10 = *(int *)(lVar15 + 0xc);
    iVar14 = *(int *)(lVar20 + 0xc);
    *(int *)(param_1 + 0x20) = iVar14;
    *(int *)(param_1 + 0x14) = iVar21;
    *(int *)(param_1 + 0x18) = iVar16;
    *(int *)(param_1 + 0x1c) = iVar10;
  }
  else {
    if (*(int *)(param_1 + 0x10) != *(int *)(param_1 + 8)) {
      local_10 = 0;
      local_8 = 0;
      pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x12);
      uVar7 = s_bufType____srcType_004433d0._8_8_;
      uVar22 = s_bufType____srcType_004433d0._0_8_;
      *(undefined2 *)(pcVar12 + 0x10) = s_bufType____srcType_004433d0._16_2_;
      *(undefined8 *)pcVar12 = uVar22;
      *(undefined8 *)(pcVar12 + 8) = uVar7;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::FilterEngine::init(const cv::Ptr<cv::BaseFilter>&, const cv::Ptr<cv::BaseRowFilter>&, const cv::Ptr<cv::BaseColumnFilter>&, int, int, int, int, int, const Scalar&)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x85);
      cv::String::deallocate((String *)&local_10);
      lVar15 = *(long *)(param_1 + 0x108);
    }
    iVar21 = *(int *)(lVar15 + 8);
    uVar22 = *(undefined8 *)(lVar15 + 8);
    iVar16 = *(int *)(lVar15 + 0xc);
    iVar10 = *(int *)(lVar15 + 0x10);
    iVar14 = *(int *)(lVar15 + 0x14);
    *(undefined8 *)(param_1 + 0x1c) = *(undefined8 *)(lVar15 + 0x10);
    *(undefined8 *)(param_1 + 0x14) = uVar22;
  }
  if ((((iVar10 < 0) || (iVar21 <= iVar10)) || (iVar14 < 0)) || (iVar16 <= iVar14)) {
    local_10 = 0;
    local_8 = 0;
    pvVar13 = (void *)cv::String::allocate((String *)&local_10,0x53);
    memcpy(pvVar13,
           "0 <= anchor.x && anchor.x < ksize.width && 0 <= anchor.y && anchor.y < ksize.height",
           0x53);
    cv::error(-0xd7,(String *)&local_10,
              "void cv::FilterEngine::init(const cv::Ptr<cv::BaseFilter>&, const cv::Ptr<cv::BaseRowFilter>&, const cv::Ptr<cv::BaseColumnFilter>&, int, int, int, int, int, const Scalar&)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x8b);
    cv::String::deallocate((String *)&local_10);
    iVar21 = *(int *)(param_1 + 0x14);
  }
  iVar21 = iVar21 + -1;
  local_10 = local_10 & 0xffffffff00000000;
  uVar17 = 4;
  if ((*(uint *)(param_1 + 8) & 7) < 4) {
    uVar17 = 1;
  }
  if (iVar21 < 1) {
    iVar21 = 1;
  }
  iVar16 = 0;
  if (uVar17 != 0) {
    iVar16 = (int)((ulong)(long)iVar3 / uVar17);
  }
  uVar17 = *(long *)(param_1 + 0x58) - *(long *)(param_1 + 0x50) >> 2;
  *(int *)(param_1 + 0x68) = iVar16;
  uVar19 = (ulong)(iVar21 * iVar16);
  if (uVar17 < uVar19) {
    std::vector<int,std::allocator<int>>::_M_fill_insert
              ((vector<int,std::allocator<int>> *)(param_1 + 0x50),*(long *)(param_1 + 0x58),
               uVar19 - uVar17,&local_10);
  }
  else if (uVar19 < uVar17) {
    *(ulong *)(param_1 + 0x58) = *(long *)(param_1 + 0x50) + uVar19 * 4;
  }
  *(undefined4 *)(param_1 + 0xd0) = 0;
  *(undefined4 *)(param_1 + 0x24) = 0;
  *(undefined8 *)(param_1 + 0xc0) = *(undefined8 *)(param_1 + 0xb8);
  if ((*(int *)(param_1 + 0x48) == 0) || (*(int *)(param_1 + 0x4c) == 0)) {
    pvVar13 = *(void **)(param_1 + 0xa0);
    uVar19 = (ulong)(iVar21 * iVar3);
    local_11 = 0;
    uVar17 = *(long *)(param_1 + 0xa8) - (long)pvVar13;
    if (uVar17 < uVar19) {
      std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
                ((vector<unsigned_char,std::allocator<unsigned_char>> *)(param_1 + 0xa0),
                 *(long *)(param_1 + 0xa8),uVar19 - uVar17,&local_11);
      pvVar13 = *(void **)(param_1 + 0xa0);
    }
    else if (uVar19 < uVar17) {
      *(ulong *)(param_1 + 0xa8) = (long)pvVar13 + uVar19;
    }
    uVar6 = *(uint *)(param_1 + 8) >> 3 & 0x1ff;
    uVar18 = uVar6;
    if (3 < uVar6) {
      uVar18 = 3;
    }
    cv::scalarToRawData(param_10,pvVar13,(*(uint *)(param_1 + 8) & 7) + uVar18 * 8,
                        iVar21 + uVar6 * iVar21);
  }
  *(undefined4 *)(param_1 + 0x28) = 0xffffffff;
  *(undefined4 *)(param_1 + 0x2c) = 0xffffffff;
  return;
}


==================================================================

### FUNC 001d5aa4 (204 bytes) name=FUN_001d5aa4

void FUN_001d5aa4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f3450;
  *(undefined4 *)((long)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)(param_1 + 5) = 0;
  *(undefined4 *)((long)param_1 + 0x2c) = 0;
  *(undefined4 *)(param_1 + 6) = 0;
  *(undefined4 *)((long)param_1 + 0x34) = 0;
  *(undefined4 *)(param_1 + 7) = 0;
  *(undefined4 *)((long)param_1 + 0x3c) = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  param_1[0x19] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  param_1[0x24] = 0;
  param_1[0x25] = 0;
  FUN_001d554c();
  return;
}


==================================================================

### FUNC 001d5c50 (2008 bytes) name=FUN_001d5c50

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 *
FUN_001d5c50(undefined8 *param_1,double param_2,uint param_3,uint param_4,_InputArray *param_5,
            _InputArray *param_6,int *param_7,undefined4 param_8,undefined4 param_9,
            undefined8 param_10)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  uint uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined1 uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined4 uVar13;
  uint uVar14;
  undefined8 *puVar15;
  void *pvVar16;
  Mat *pMVar17;
  int iVar18;
  int iVar19;
  double dVar20;
  double dVar21;
  undefined8 local_1c8;
  undefined8 local_1c0;
  long local_1b8 [2];
  long local_1a8 [2];
  long local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  undefined8 local_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined8 local_120;
  Mat *pMStack_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  Mat **local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  uint local_c0;
  undefined4 local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  undefined4 local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar10 = cv::_InputArray::kind(param_5);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_5 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar17;
    local_bc = *(undefined4 *)(pMVar17 + 4);
    local_b8 = *(int *)(pMVar17 + 8);
    local_b4 = *(int *)(pMVar17 + 0xc);
    local_b0 = *(undefined8 *)(pMVar17 + 0x10);
    local_a8 = *(undefined8 *)(pMVar17 + 0x18);
    local_a0 = *(undefined8 *)(pMVar17 + 0x20);
    local_98 = *(undefined8 *)(pMVar17 + 0x28);
    local_90 = *(undefined8 *)(pMVar17 + 0x30);
    local_88 = *(long *)(pMVar17 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar17 + 0x48);
      local_68 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      local_bc = 0;
      cv::Mat::copySize((Mat *)&local_c0,pMVar17);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_5);
  }
  iVar10 = cv::_InputArray::kind(param_6);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_6 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar17;
    local_5c = *(undefined4 *)(pMVar17 + 4);
    local_58 = *(int *)(pMVar17 + 8);
    local_54 = *(int *)(pMVar17 + 0xc);
    local_50 = *(undefined8 *)(pMVar17 + 0x10);
    local_48 = *(undefined8 *)(pMVar17 + 0x18);
    local_40 = *(undefined8 *)(pMVar17 + 0x20);
    local_38 = *(undefined8 *)(pMVar17 + 0x28);
    local_30 = *(undefined8 *)(pMVar17 + 0x30);
    local_28 = *(long *)(pMVar17 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar17 + 0x48);
      local_8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      local_5c = 0;
      cv::Mat::copySize((Mat *)&local_60,pMVar17);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_6);
  }
  uVar6 = param_3 >> 3 & 0x1ff;
  uVar2 = param_3 & 7;
  uVar3 = param_4 & 7;
  if ((param_4 >> 3 & 0x1ff) + 1 != uVar6 + 1) {
    local_1c8 = 0;
    local_1c0 = 0;
    puVar15 = (undefined8 *)cv::String::allocate((String *)&local_1c8,0x19);
    uVar9 = DAT_00443478;
    uVar8 = _LAB_00443468;
    uVar7 = _LAB_00443460;
    puVar15[2] = DAT_00443470;
    *(undefined1 *)(puVar15 + 3) = uVar9;
    *puVar15 = uVar7;
    puVar15[1] = uVar8;
    cv::error(-0xd7,(String *)&local_1c8,
              "cv::Ptr<cv::FilterEngine> cv::createSeparableLinearFilter(int, int, cv::InputArray, cv::InputArray, cv::Point, double, int, int, const Scalar&)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xeca);
    cv::String::deallocate((String *)&local_1c8);
  }
  iVar10 = *param_7;
  if (iVar10 < 0) {
    iVar10 = (local_b8 + local_b4 + -1) / 2;
    iVar18 = param_7[1];
    *param_7 = iVar10;
  }
  else {
    iVar18 = param_7[1];
  }
  if (iVar18 < 0) {
    param_7[1] = (local_58 + local_54 + -1) / 2;
  }
  local_110 = 0;
  local_120._0_4_ = 0x1010000;
  iVar18 = iVar10;
  iVar19 = 0;
  if (local_b8 == 1) {
    iVar18 = 0;
    iVar19 = iVar10;
  }
  local_180 = CONCAT44(iVar18,iVar19);
  pMStack_118 = (Mat *)&local_c0;
  uVar11 = FUN_001c8e50((Mat *)&local_120,(Mat *)&local_180);
  local_110 = 0;
  local_120 = CONCAT44(local_120._4_4_,0x1010000);
  if (local_58 == 1) {
    iVar18 = param_7[1];
    iVar10 = 0;
  }
  else {
    iVar10 = param_7[1];
    iVar18 = 0;
  }
  local_180 = CONCAT44(iVar10,iVar18);
  pMStack_118 = (Mat *)&local_60;
  uVar12 = FUN_001c8e50((Mat *)&local_120,(Mat *)&local_180);
  local_138 = &local_130;
  local_d8 = &local_d0;
  uVar14 = uVar3;
  if (uVar3 < 5) {
    uVar14 = 5;
  }
  local_140 = &pMStack_178;
  uStack_128 = 0;
  local_130 = 0;
  local_e0 = &pMStack_118;
  uStack_c8 = 0;
  local_d0 = 0;
  pMStack_118 = _UNK_001d6598;
  local_120 = _DAT_001d6590;
  local_170 = 0;
  pMStack_178 = _UNK_001d6598;
  local_180 = _DAT_001d6590;
  local_110 = 0;
  local_108 = 0;
  if (uVar14 < uVar2) {
    uVar14 = uVar2;
  }
  local_168 = 0;
  local_160 = 0;
  local_158 = 0;
  local_150 = 0;
  local_148 = 0;
  local_100 = 0;
  local_f8 = 0;
  local_f0 = 0;
  local_e8 = 0;
  if (uVar2 == 0) {
    if ((uVar11 == 5 && uVar3 == 0) && (uVar12 == 5)) {
      uVar13 = 0x10;
      dVar21 = DAT_001d6588;
      dVar20 = DAT_001d6580;
    }
    else {
      if (((uVar11 & 3) == 0) ||
         ((((uVar12 & 3) == 0 || (uVar3 != 3)) || ((uVar11 & 8 & uVar12) == 0)))) goto LAB_001d5f84;
      dVar21 = 1.0;
      uVar13 = 0;
      dVar20 = dVar21;
    }
    local_188 = 0;
    local_184 = 0;
    local_198._0_4_ = 0x2010000;
    local_190 = (Mat *)&local_180;
    cv::Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_198,4,dVar21,0.0);
    local_188 = 0;
    local_184 = 0;
    local_198 = CONCAT44(local_198._4_4_,0x2010000);
    local_190 = (Mat *)&local_120;
    cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_198,4,dVar21,0.0);
    param_2 = param_2 * dVar20;
    uVar14 = 4;
  }
  else {
LAB_001d5f84:
    if (uVar14 == (local_c0 & 0xfff)) {
      cv::Mat::operator=((Mat *)&local_180,(Mat *)&local_c0);
    }
    else {
      local_188 = 0;
      local_184 = 0;
      local_198 = CONCAT44(local_198._4_4_,0x2010000);
      local_190 = (Mat *)&local_180;
      cv::Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_198,uVar14,1.0,0.0);
    }
    if (uVar14 == (local_60 & 0xfff)) {
      cv::Mat::operator=((Mat *)&local_120,(Mat *)&local_60);
      uVar13 = 0;
    }
    else {
      local_188 = 0;
      local_184 = 0;
      local_198 = CONCAT44(local_198._4_4_,0x2010000);
      local_190 = (Mat *)&local_120;
      cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_198,uVar14,1.0,0.0);
      uVar13 = 0;
    }
  }
  iVar10 = uVar14 + uVar6 * 8;
  local_188 = 0;
  local_184 = 0;
  local_198._0_4_ = 0x1010000;
  local_190 = (Mat *)&local_180;
  FUN_001cf2b0(local_1b8,param_3 & 0xfff,iVar10,&local_198,*param_7,uVar11);
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_190 = (Mat *)&local_120;
  FUN_001d258c(local_1a8,param_2,iVar10,param_4 & 0xfff,&local_198,param_7[1],uVar12,uVar13);
  local_198 = 0;
  local_190 = (Mat *)0x0;
  pvVar16 = operator_new(0x130);
  FUN_001d5aa4(pvVar16,&local_198,local_1b8,local_1a8,param_3 & 0xfff,param_4 & 0xfff,iVar10,param_8
               ,param_9,param_10);
  puVar15 = operator_new(0x20);
  puVar15[2] = pvVar16;
  *puVar15 = &PTR_FUN_004f3ca0;
  *(undefined4 *)(puVar15 + 1) = 1;
  *param_1 = puVar15;
  param_1[1] = pvVar16;
  piVar1 = (int *)(local_198 + 8);
  if (local_198 != 0) {
    do {
      iVar10 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar10 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar10 == 1) {
      FUN_001c0010(local_198);
    }
  }
  piVar1 = (int *)(local_1a8[0] + 8);
  if (local_1a8[0] != 0) {
    do {
      iVar10 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar10 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar10 == 1) {
      FUN_001c0010();
    }
  }
  piVar1 = (int *)(local_1b8[0] + 8);
  if (local_1b8[0] != 0) {
    do {
      iVar10 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar10 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar10 == 1) {
      FUN_001c0010();
    }
  }
  cv::Mat::release((Mat *)&local_120);
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  cv::Mat::release((Mat *)&local_180);
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  cv::Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  return param_1;
}


==================================================================

### FUNC 001d65a0 (1456 bytes) name=sepFilter2D

/* cv::sepFilter2D(cv::_InputArray const&, cv::_OutputArray const&, int, cv::_InputArray const&,
   cv::_InputArray const&, cv::Point_<int>, double, int) */

void cv::sepFilter2D(undefined8 param_1_00,_InputArray *param_1,_InputArray *param_2,uint param_3,
                    _InputArray *param_4,_InputArray *param_5,undefined4 *param_7,uint param_8)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat *pMVar5;
  undefined4 local_1e8;
  undefined4 local_1e4;
  long local_1e0;
  long *local_1d8;
  undefined4 local_1d0 [2];
  Mat *local_1c8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  Mat *local_1b0;
  undefined4 local_1a8;
  undefined4 local_1a4;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  uint local_180;
  undefined4 local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_1 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(uint *)pMVar5;
    local_17c = *(undefined4 *)(pMVar5 + 4);
    local_178 = *(undefined4 *)(pMVar5 + 8);
    local_174 = *(undefined4 *)(pMVar5 + 0xc);
    local_170 = *(undefined8 *)(pMVar5 + 0x10);
    local_168 = *(undefined8 *)(pMVar5 + 0x18);
    local_160 = *(undefined8 *)(pMVar5 + 0x20);
    local_158 = *(undefined8 *)(pMVar5 + 0x28);
    local_150 = *(undefined8 *)(pMVar5 + 0x30);
    local_148 = *(long *)(pMVar5 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (local_148 != 0) {
      piVar1 = (int *)(local_148 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar5 + 0x48);
      local_128 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar4 = _InputArray::kind(param_4);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_4 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(undefined4 *)pMVar5;
    local_11c = *(undefined4 *)(pMVar5 + 4);
    local_118 = *(undefined4 *)(pMVar5 + 8);
    local_114 = *(undefined4 *)(pMVar5 + 0xc);
    local_110 = *(undefined8 *)(pMVar5 + 0x10);
    local_108 = *(undefined8 *)(pMVar5 + 0x18);
    local_100 = *(undefined8 *)(pMVar5 + 0x20);
    local_f8 = *(undefined8 *)(pMVar5 + 0x28);
    local_f0 = *(undefined8 *)(pMVar5 + 0x30);
    local_e8 = *(long *)(pMVar5 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar1 = (int *)(local_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar5 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  iVar4 = _InputArray::kind(param_5);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_5 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar5;
    local_bc = *(undefined4 *)(pMVar5 + 4);
    local_b8 = *(undefined4 *)(pMVar5 + 8);
    local_b4 = *(undefined4 *)(pMVar5 + 0xc);
    local_b0 = *(undefined8 *)(pMVar5 + 0x10);
    local_a8 = *(undefined8 *)(pMVar5 + 0x18);
    local_a0 = *(undefined8 *)(pMVar5 + 0x20);
    local_98 = *(undefined8 *)(pMVar5 + 0x28);
    local_90 = *(undefined8 *)(pMVar5 + 0x30);
    local_88 = *(long *)(pMVar5 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar5 + 0x48);
      local_68 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_5);
  }
  if ((int)param_3 < 0) {
    param_3 = local_180 & 7;
  }
  local_5c = *local_140;
  local_60 = local_140[1];
  _OutputArray::create
            ((_OutputArray *)param_2,(Mat *)&local_60,(param_3 & 7) + (local_180 & 0xff8),0xffffffff
             ,0,0);
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar5;
    local_50 = *(undefined8 *)(pMVar5 + 0x10);
    local_5c = *(undefined4 *)(pMVar5 + 4);
    local_58 = *(undefined4 *)(pMVar5 + 8);
    local_54 = *(undefined4 *)(pMVar5 + 0xc);
    local_48 = *(undefined8 *)(pMVar5 + 0x18);
    local_40 = *(undefined8 *)(pMVar5 + 0x20);
    local_38 = *(undefined8 *)(pMVar5 + 0x28);
    local_30 = *(undefined8 *)(pMVar5 + 0x30);
    local_28 = *(long *)(pMVar5 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar5 + 0x48);
      local_8 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_198 = 0;
  local_1a0 = 0;
  local_1e8 = *param_7;
  local_1e4 = param_7[1];
  uStack_188 = 0;
  local_190 = 0;
  local_1a8 = 0;
  local_1a4 = 0;
  local_1b8 = 0x1010000;
  local_1c0 = 0;
  local_1bc = 0;
  local_1d0[0] = 0x1010000;
  local_1c8 = (Mat *)&local_120;
  local_1b0 = (Mat *)&local_c0;
  FUN_001d5c50(&local_1e0,param_1_00,local_180 & 0xfff,local_60 & 0xfff,local_1d0,&local_1b8,
               &local_1e8,param_8 & 0xffffffef,0xffffffff,&local_1a0);
  local_1a0 = 0;
  local_198 = 0xffffffffffffffff;
  local_1b8 = 0;
  local_1b4 = 0;
  (**(code **)(*local_1d8 + 0x28))
            (local_1d8,(Mat *)&local_180,(Mat *)&local_60,&local_1a0,&local_1b8,param_8 >> 4 & 1);
  piVar1 = (int *)(local_1e0 + 8);
  if (local_1e0 != 0) {
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      FUN_001c0010();
    }
  }
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&local_120);
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  Mat::release((Mat *)&local_180);
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 001d6c20 (2812 bytes) name=FUN_001d6c20

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 FUN_001d6c20(long param_1,int *param_2,uint *param_3,int param_4)

{
  undefined1 *puVar1;
  ulong uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  undefined1 uVar6;
  int iVar7;
  void *pvVar8;
  long lVar9;
  ulong uVar10;
  ulong uVar11;
  code *pcVar12;
  int *piVar13;
  int iVar14;
  uint uVar15;
  undefined8 *puVar16;
  ulong uVar17;
  uint uVar18;
  uint uVar19;
  int iVar20;
  int iVar21;
  long lVar22;
  undefined8 *puVar24;
  uint uVar25;
  undefined1 *__src;
  int iVar26;
  int *piVar27;
  int *piVar28;
  int iVar29;
  undefined8 uVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  undefined1 local_12;
  undefined1 local_11;
  ulong local_10 [2];
  ulong uVar23;
  
  iVar26 = *param_2;
  iVar3 = param_2[1];
  uVar4 = param_3[1];
  uVar15 = *param_3;
  uVar19 = param_3[2];
  uVar18 = param_3[3];
  *(int *)(param_1 + 0x28) = iVar26;
  *(int *)(param_1 + 0x2c) = iVar3;
  *(uint *)(param_1 + 0x30) = uVar15;
  *(uint *)(param_1 + 0x34) = uVar4;
  *(uint *)(param_1 + 0x38) = uVar19;
  *(uint *)(param_1 + 0x3c) = uVar18;
  if (((((int)uVar18 < 0) || (-1 < (int)(~uVar15 & (uVar4 ^ 0xffffffff) & (uVar19 ^ 0xffffffff))))
      || (iVar26 < (int)(uVar15 + uVar19))) || (iVar3 < (int)(uVar4 + uVar18))) {
    local_10[0] = 0;
    local_10[1] = 0;
    pvVar8 = (void *)cv::String::allocate((String *)local_10,0x8f);
    memcpy(pvVar8,
           "roi.x >= 0 && roi.y >= 0 && roi.width >= 0 && roi.height >= 0 && roi.x + roi.width <= wholeSize.width && roi.y + roi.height <= wholeSize.height"
           ,0x8f);
    cv::error(-0xd7,(String *)local_10,
              "virtual int cv::FilterEngine::start(cv::Size, cv::Rect, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xa9);
    cv::String::deallocate((String *)local_10);
    uVar19 = *(uint *)(param_1 + 0x38);
  }
  __src = *(undefined1 **)(param_1 + 0xa0);
  iVar26 = (*(uint *)(param_1 + 0x10) >> 3 & 0x1ff) + 1 <<
           (ulong)((uint)(0xfa50L >> ((*(uint *)(param_1 + 0x10) & 7) << 1)) & 3);
  if (__src == *(undefined1 **)(param_1 + 0xa8)) {
    __src = (undefined1 *)0x0;
  }
  iVar3 = (*(uint *)(param_1 + 8) >> 3 & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> ((*(uint *)(param_1 + 8) & 7) << 1)) & 3);
  if (param_4 < 0) {
    param_4 = *(int *)(param_1 + 0x18) + 3;
  }
  iVar21 = *(int *)(param_1 + 0x20);
  iVar7 = (*(int *)(param_1 + 0x18) - iVar21) + -1;
  if (iVar7 < iVar21) {
    iVar7 = iVar21;
  }
  iVar7 = iVar7 * 2 + 1;
  if (iVar7 < param_4) {
    iVar7 = param_4;
  }
  if ((*(int *)(param_1 + 0x24) < (int)uVar19) ||
     (iVar7 != (int)(*(long *)(param_1 + 0xf0) - *(long *)(param_1 + 0xe8) >> 3))) {
    FUN_001c66c4(param_1 + 0xe8,(long)iVar7);
    local_12 = 0;
    iVar7 = *(int *)(param_1 + 0x38);
    if (*(int *)(param_1 + 0x38) < *(int *)(param_1 + 0x24)) {
      iVar7 = *(int *)(param_1 + 0x24);
    }
    *(int *)(param_1 + 0x24) = iVar7;
    uVar17 = *(long *)(param_1 + 0x90) - *(long *)(param_1 + 0x88);
    uVar4 = *(uint *)(param_1 + 8);
    uVar11 = (ulong)((iVar7 + *(int *)(param_1 + 0x14) + -1) * iVar3);
    if (uVar17 < uVar11) {
      std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
                ((vector<unsigned_char,std::allocator<unsigned_char>> *)(param_1 + 0x88),
                 *(long *)(param_1 + 0x90),uVar11 - uVar17,&local_12);
      iVar7 = *(int *)(param_1 + 0x24);
    }
    else if (uVar11 < uVar17) {
      *(ulong *)(param_1 + 0x90) = *(long *)(param_1 + 0x88) + uVar11;
    }
    if (*(int *)(param_1 + 0x4c) == 0) {
      iVar21 = iVar7 + *(int *)(param_1 + 0x14);
      lVar9 = *(long *)(param_1 + 0xb8);
      uVar11 = (long)(iVar21 + 0xf) *
               (long)(int)((*(uint *)(param_1 + 0x10) >> 3 & 0x1ff) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((*(uint *)(param_1 + 0x10) & 7) << 1)) & 3));
      local_11 = 0;
      uVar17 = *(long *)(param_1 + 0xc0) - lVar9;
      if (uVar17 <= uVar11 && uVar11 - uVar17 != 0) {
        local_11 = 0;
        std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
                  ((vector<unsigned_char,std::allocator<unsigned_char>> *)(param_1 + 0xb8),
                   *(long *)(param_1 + 0xc0),uVar11 - uVar17,&local_11);
        iVar7 = *(int *)(param_1 + 0x24);
        lVar9 = *(long *)(param_1 + 0xb8);
        iVar21 = iVar7 + *(int *)(param_1 + 0x14);
        uVar6 = local_11;
      }
      else {
        uVar6 = 0;
        if (uVar17 > uVar11) {
          *(ulong *)(param_1 + 0xc0) = lVar9 + uVar11;
          uVar6 = local_11;
        }
      }
      local_11 = uVar6;
      lVar22 = *(long *)(param_1 + 0x108);
      uVar17 = lVar9 + 0xfU & 0xfffffffffffffff0;
      iVar21 = (iVar21 + -1) * iVar3;
      uVar11 = (ulong)(uint)((int)*(undefined8 *)(param_1 + 0xa8) -
                            (int)*(undefined8 *)(param_1 + 0xa0));
      if (lVar22 == 0) {
        uVar10 = *(ulong *)(param_1 + 0x88);
        if (0 < iVar21) goto LAB_001d6e70;
LAB_001d7350:
        (**(code **)(**(long **)(param_1 + 0x118) + 0x10))
                  (*(long **)(param_1 + 0x118),uVar10,uVar17,iVar7,(uVar4 >> 3 & 0x1ff) + 1);
        iVar7 = *(int *)(param_1 + 0x24);
        goto LAB_001d7370;
      }
      uVar10 = uVar17;
      if (0 < iVar21) {
LAB_001d6e70:
        iVar7 = 0;
        uVar15 = -(int)__src & 0xf;
        do {
          if (iVar21 - iVar7 < (int)uVar11) {
            uVar11 = (ulong)(uint)(iVar21 - iVar7);
          }
          uVar18 = (uint)uVar11;
          if (0 < (int)uVar18) {
            lVar9 = (long)iVar7;
            puVar1 = (undefined1 *)(uVar10 + lVar9);
            if ((__src < (undefined1 *)(uVar10 + lVar9 + 0x10) && puVar1 < __src + 0x10) ||
               (uVar18 < 0x16)) {
              lVar9 = 0;
              do {
                puVar1[lVar9] = __src[lVar9];
                lVar9 = lVar9 + 1;
              } while ((int)lVar9 < (int)uVar18);
            }
            else {
              uVar2 = (ulong)uVar15;
              if (uVar18 < uVar15) {
                uVar2 = uVar11;
              }
              iVar14 = (int)uVar2;
              uVar23 = uVar2;
              if ((((iVar14 != 0) && (*puVar1 = *__src, iVar14 != 1)) &&
                  (*(undefined1 *)(uVar10 + (long)(iVar7 + 1)) = __src[1], iVar14 != 2)) &&
                 (((*(undefined1 *)(uVar10 + (long)(iVar7 + 2)) = __src[2], iVar14 != 3 &&
                   (*(undefined1 *)(uVar10 + (long)(iVar7 + 3)) = __src[3], iVar14 != 4)) &&
                  (*(undefined1 *)(uVar10 + (long)(iVar7 + 4)) = __src[4], iVar14 != 5)))) {
                *(undefined1 *)(uVar10 + (long)(iVar7 + 5)) = __src[5];
                if (iVar14 == 6) {
                  uVar23 = 6;
                }
                else {
                  *(undefined1 *)(uVar10 + (long)(iVar7 + 6)) = __src[6];
                  if (((iVar14 != 7) &&
                      (*(undefined1 *)(uVar10 + (long)(iVar7 + 7)) = __src[7], iVar14 != 8)) &&
                     (((*(undefined1 *)(uVar10 + (long)(iVar7 + 8)) = __src[8], iVar14 != 9 &&
                       (((*(undefined1 *)(uVar10 + (long)(iVar7 + 9)) = __src[9], iVar14 != 10 &&
                         (*(undefined1 *)(uVar10 + (long)(iVar7 + 10)) = __src[10], iVar14 != 0xb))
                        && (*(undefined1 *)(uVar10 + (long)(iVar7 + 0xb)) = __src[0xb],
                           iVar14 != 0xc)))) &&
                      (*(undefined1 *)(uVar10 + (long)(iVar7 + 0xc)) = __src[0xc], iVar14 != 0xd))))
                  {
                    *(undefined1 *)(uVar10 + (long)(iVar7 + 0xd)) = __src[0xd];
                    if (iVar14 == 0xf) {
                      *(undefined1 *)(uVar10 + (long)(iVar7 + 0xe)) = __src[0xe];
                    }
                    else {
                      uVar23 = 0xe;
                    }
                  }
                }
              }
              iVar20 = (int)uVar23;
              uVar19 = ((uVar18 - iVar14) - 0x10 >> 4) + 1;
              iVar5 = uVar19 * 0x10;
              if (0xe < (uVar18 - 1) - iVar14) {
                uVar25 = 0;
                puVar16 = (undefined8 *)(__src + uVar2);
                puVar24 = (undefined8 *)(uVar10 + uVar2 + lVar9);
                do {
                  uVar30 = *puVar16;
                  uVar25 = uVar25 + 1;
                  puVar24[1] = puVar16[1];
                  *puVar24 = uVar30;
                  puVar16 = puVar16 + 2;
                  puVar24 = puVar24 + 2;
                } while (uVar25 < uVar19);
                iVar20 = iVar20 + iVar5;
                if (iVar5 == uVar18 - iVar14) goto LAB_001d71a4;
              }
              iVar14 = iVar20 + 1;
              *(undefined1 *)(uVar10 + (long)(iVar7 + iVar20)) = __src[iVar20];
              if (iVar14 < (int)uVar18) {
                iVar5 = iVar20 + 2;
                *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14];
                if (iVar5 < (int)uVar18) {
                  iVar14 = iVar20 + 3;
                  *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5];
                  if (iVar14 < (int)uVar18) {
                    iVar5 = iVar20 + 4;
                    *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14];
                    if (iVar5 < (int)uVar18) {
                      iVar14 = iVar20 + 5;
                      *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5];
                      if (iVar14 < (int)uVar18) {
                        iVar5 = iVar20 + 6;
                        *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14];
                        if (iVar5 < (int)uVar18) {
                          iVar14 = iVar20 + 7;
                          *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5];
                          if (iVar14 < (int)uVar18) {
                            iVar5 = iVar20 + 8;
                            *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14];
                            if (iVar5 < (int)uVar18) {
                              iVar14 = iVar20 + 9;
                              *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5];
                              if (iVar14 < (int)uVar18) {
                                iVar5 = iVar20 + 10;
                                *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14];
                                if (iVar5 < (int)uVar18) {
                                  iVar14 = iVar20 + 0xb;
                                  *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5];
                                  if (iVar14 < (int)uVar18) {
                                    iVar5 = iVar20 + 0xc;
                                    *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) = __src[iVar14]
                                    ;
                                    if (iVar5 < (int)uVar18) {
                                      iVar14 = iVar20 + 0xd;
                                      *(undefined1 *)(uVar10 + (long)(iVar7 + iVar5)) = __src[iVar5]
                                      ;
                                      if (iVar14 < (int)uVar18) {
                                        iVar20 = iVar20 + 0xe;
                                        *(undefined1 *)(uVar10 + (long)(iVar7 + iVar14)) =
                                             __src[iVar14];
                                        if (iVar20 < (int)uVar18) {
                                          *(undefined1 *)(uVar10 + (long)(iVar7 + iVar20)) =
                                               __src[iVar20];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_001d71a4:
          iVar7 = iVar7 + uVar18;
        } while (iVar7 < iVar21);
        lVar22 = *(long *)(param_1 + 0x108);
        if (lVar22 == 0) {
          uVar10 = *(ulong *)(param_1 + 0x88);
          iVar7 = *(int *)(param_1 + 0x24);
          goto LAB_001d7350;
        }
        iVar7 = *(int *)(param_1 + 0x24);
      }
    }
    else {
LAB_001d7370:
      lVar22 = *(long *)(param_1 + 0x108);
    }
    if (lVar22 == 0) {
      iVar21 = 0;
    }
    else {
      iVar21 = *(int *)(param_1 + 0x14) + -1;
    }
    uVar17 = *(long *)(param_1 + 0x78) - *(long *)(param_1 + 0x70);
    local_10[0] = local_10[0] & 0xffffffffffffff00;
    uVar11 = (long)(int)(iVar26 * (iVar21 + iVar7 + 0xfU & 0xfffffff0)) *
             (*(long *)(param_1 + 0xf0) - *(long *)(param_1 + 0xe8) >> 3) + 0x10;
    if (uVar17 < uVar11) {
      std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
                ((vector<unsigned_char,std::allocator<unsigned_char>> *)(param_1 + 0x70),
                 *(long *)(param_1 + 0x78),uVar11 - uVar17,local_10);
      lVar22 = *(long *)(param_1 + 0x108);
      uVar19 = *(uint *)(param_1 + 0x38);
    }
    else {
      uVar19 = *(uint *)(param_1 + 0x38);
      if (uVar11 < uVar17) {
        *(ulong *)(param_1 + 0x78) = *(long *)(param_1 + 0x70) + uVar11;
      }
    }
  }
  else {
    lVar22 = *(long *)(param_1 + 0x108);
  }
  iVar7 = (int)lVar22;
  if (lVar22 != 0) {
    iVar7 = *(int *)(param_1 + 0x14) + -1;
  }
  iVar14 = *(int *)(param_1 + 0x1c);
  iVar20 = *(int *)(param_1 + 0x30);
  iVar5 = *(int *)(param_1 + 0x28);
  iVar21 = iVar14 - iVar20;
  if (iVar21 < 0) {
    iVar21 = 0;
  }
  *(uint *)(param_1 + 0xd0) = iVar26 * (iVar7 + uVar19 + 0xf & 0xfffffff0);
  iVar26 = (iVar20 + (*(int *)(param_1 + 0x14) - iVar14) + -1 + uVar19) - iVar5;
  *(int *)(param_1 + 0x40) = iVar21;
  if (iVar26 < 0) {
    *(undefined4 *)(param_1 + 0x44) = 0;
    iVar26 = 0;
    if (iVar21 == 0) goto LAB_001d738c;
  }
  else {
    *(int *)(param_1 + 0x44) = iVar26;
    if (iVar26 == 0 && iVar21 == 0) goto LAB_001d738c;
  }
  iVar7 = *(int *)(param_1 + 0x48);
  if (iVar7 == 0) {
    if (lVar22 == 0) {
      iVar26 = 1;
LAB_001d72ac:
      iVar7 = 0;
      if (lVar22 == 0) goto LAB_001d7328;
      do {
        pvVar8 = (void *)((*(long *)(param_1 + 0x70) + 0xfU & 0xfffffffffffffff0) +
                         (long)(iVar7 * *(int *)(param_1 + 0xd0)));
        while( true ) {
          iVar7 = iVar7 + 1;
          pvVar8 = memcpy(pvVar8,__src,(long)(iVar3 * iVar21));
          memcpy((void *)((long)pvVar8 +
                         (long)(((*(int *)(param_1 + 0x38) + *(int *)(param_1 + 0x14) + -1) -
                                *(int *)(param_1 + 0x44)) * iVar3)),__src,
                 (long)(*(int *)(param_1 + 0x44) * iVar3));
          if (iVar26 <= iVar7) goto LAB_001d738c;
          iVar21 = *(int *)(param_1 + 0x40);
          if (*(long *)(param_1 + 0x108) != 0) break;
LAB_001d7328:
          pvVar8 = *(void **)(param_1 + 0x88);
        }
      } while( true );
    }
    iVar26 = (int)(*(long *)(param_1 + 0xf0) - *(long *)(param_1 + 0xe8) >> 3);
    if (0 < iVar26) goto LAB_001d72ac;
    goto LAB_001d738c;
  }
  uVar4 = *(uint *)(param_1 + 0x68);
  iVar3 = iVar20;
  if (iVar14 < iVar20) {
    iVar3 = iVar14;
  }
  piVar27 = *(int **)(param_1 + 0x50);
  if (iVar21 != 0) {
    lVar9 = 0;
    iVar14 = 0;
    iVar26 = 0;
    piVar28 = piVar27;
    do {
      iVar7 = cv::borderInterpolate(iVar26 - iVar21,iVar5,iVar7);
      iVar7 = ((iVar3 - iVar20) + iVar7) * uVar4;
      if (0 < (int)uVar4) {
        uVar15 = -((uint)((ulong)piVar28 >> 2) & 3) & 3;
        if (uVar4 < uVar15) {
          uVar15 = uVar4;
        }
        if (uVar4 < 7) {
          uVar15 = uVar4;
        }
        uVar18 = uVar15;
        if (uVar15 != 0) {
          *piVar28 = iVar7;
          if (((uVar15 != 1) && (piVar28[1] = iVar7 + 1, uVar15 != 2)) &&
             ((piVar28[2] = iVar7 + 2, uVar15 != 3 && (piVar28[3] = iVar7 + 3, uVar15 != 4)))) {
            piVar28[4] = iVar7 + 4;
            if (uVar15 == 6) {
              piVar28[5] = iVar7 + 5;
            }
            else {
              uVar18 = 5;
            }
          }
          if (uVar15 == uVar4) goto LAB_001d7588;
        }
        uVar19 = ((uVar4 - uVar15) - 4 >> 2) + 1;
        iVar21 = uVar19 * 4;
        if (2 < (uVar4 - 1) - uVar15) {
          uVar25 = 0;
          iVar29 = uVar18 + (int)_DAT_001d7730;
          iVar31 = uVar18 + (int)((ulong)_DAT_001d7730 >> 0x20);
          iVar32 = uVar18 + (int)_UNK_001d7738;
          iVar33 = uVar18 + (int)((ulong)_UNK_001d7738 >> 0x20);
          piVar13 = piVar27 + (ulong)uVar15 + lVar9;
          do {
            uVar25 = uVar25 + 1;
            *(ulong *)(piVar13 + 2) = CONCAT44(iVar7 + iVar33,iVar7 + iVar32);
            *(ulong *)piVar13 = CONCAT44(iVar7 + iVar31,iVar7 + iVar29);
            iVar29 = iVar29 + 4;
            iVar31 = iVar31 + 4;
            iVar32 = iVar32 + 4;
            iVar33 = iVar33 + 4;
            piVar13 = piVar13 + 4;
          } while (uVar25 < uVar19);
          uVar18 = uVar18 + iVar21;
          if (iVar21 == uVar4 - uVar15) goto LAB_001d7588;
        }
        iVar21 = uVar18 + 1;
        piVar27[(int)(uVar18 + iVar14)] = iVar7 + uVar18;
        if (iVar21 < (int)uVar4) {
          iVar29 = uVar18 + 2;
          piVar27[iVar21 + iVar14] = iVar7 + iVar21;
          if (iVar29 < (int)uVar4) {
            piVar27[iVar29 + iVar14] = iVar29 + iVar7;
          }
        }
      }
LAB_001d7588:
      iVar21 = *(int *)(param_1 + 0x40);
      iVar26 = iVar26 + 1;
      piVar28 = piVar28 + (int)uVar4;
      iVar14 = iVar14 + uVar4;
      lVar9 = lVar9 + (int)uVar4;
      if (iVar21 <= iVar26) goto LAB_001d75fc;
      iVar7 = *(int *)(param_1 + 0x48);
    } while( true );
  }
LAB_001d7600:
  if (0 < iVar26) {
    iVar26 = 0;
    do {
      iVar7 = cv::borderInterpolate(iVar26 + iVar5,iVar5,*(int *)(param_1 + 0x48));
      uVar15 = 0;
      if (0 < (int)uVar4) {
        do {
          iVar21 = uVar15 + ((iVar3 - iVar20) + iVar7) * uVar4;
          iVar14 = uVar15 + (iVar26 + *(int *)(param_1 + 0x40)) * uVar4;
          uVar15 = uVar15 + 1;
          piVar27[iVar14] = iVar21;
        } while (uVar15 != uVar4);
      }
      iVar26 = iVar26 + 1;
    } while (iVar26 < *(int *)(param_1 + 0x44));
  }
LAB_001d738c:
  iVar26 = *(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x20);
  iVar3 = ((*(int *)(param_1 + 0x34) + *(int *)(param_1 + 0x3c) + *(int *)(param_1 + 0x18)) -
          *(int *)(param_1 + 0x20)) + -1;
  if (iVar26 < 0) {
    iVar26 = 0;
  }
  iVar7 = *(int *)(param_1 + 0x2c);
  if (iVar3 < *(int *)(param_1 + 0x2c)) {
    iVar7 = iVar3;
  }
  *(undefined4 *)(param_1 + 0xe4) = 0;
  *(undefined4 *)(param_1 + 0xe0) = 0;
  *(int *)(param_1 + 0xd8) = iVar26;
  *(int *)(param_1 + 0xd4) = iVar26;
  *(int *)(param_1 + 0xdc) = iVar7;
  if ((*(long **)(param_1 + 0x128) != (long *)0x0) &&
     (pcVar12 = *(code **)(**(long **)(param_1 + 0x128) + 0x18), pcVar12 != FUN_001b4284)) {
    (*pcVar12)();
  }
  if ((*(long **)(param_1 + 0x108) != (long *)0x0) &&
     (pcVar12 = *(code **)(**(long **)(param_1 + 0x108) + 0x18), pcVar12 != FUN_001b4288)) {
    (*pcVar12)();
  }
  return *(undefined4 *)(param_1 + 0xd4);
LAB_001d75fc:
  iVar26 = *(int *)(param_1 + 0x44);
  goto LAB_001d7600;
}


==================================================================

### FUNC 001d7740 (1468 bytes) name=_M_fill_insert

/* std::vector<unsigned char*, std::allocator<unsigned char*>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<unsigned char**, std::vector<unsigned char*,
   std::allocator<unsigned char*> > >, unsigned long, unsigned char* const&) */

void __thiscall
std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
          (vector<unsigned_char*,std::allocator<unsigned_char*>> *this,undefined8 *param_2,
          ulong param_3,undefined8 *param_4)

{
  void *__dest;
  undefined8 *puVar1;
  void *__dest_00;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  undefined8 *puVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  long lVar10;
  size_t sVar11;
  
  if (param_3 == 0) {
    return;
  }
  puVar8 = *(undefined8 **)(this + 8);
  if (param_3 <= (ulong)(*(long *)(this + 0x10) - (long)puVar8 >> 3)) {
    sVar11 = (long)puVar8 - (long)param_2;
    uVar9 = *param_4;
    uVar6 = (long)sVar11 >> 3;
    if (param_3 < uVar6) {
      puVar5 = puVar8 + -param_3;
      puVar1 = puVar8;
      if ((long)puVar8 - (long)puVar5 >> 3 != 0) {
        memmove(puVar8,puVar5,(long)puVar8 - (long)puVar5);
        puVar1 = *(undefined8 **)(this + 8);
      }
      sVar11 = (long)puVar5 - (long)param_2;
      *(undefined8 **)(this + 8) = puVar1 + param_3;
      if ((long)sVar11 >> 3 != 0) {
        memmove((void *)((long)puVar8 - sVar11),param_2,sVar11);
      }
      if (param_2 == param_2 + param_3) {
        return;
      }
      puVar8 = param_2 + 1;
      uVar3 = (ulong)param_2 >> 3 & 1;
      uVar7 = (ulong)((long)(param_2 + param_3) - (long)puVar8) >> 3;
      uVar6 = uVar7 + 1;
      uVar4 = uVar6;
      if (uVar3 < uVar6) {
        uVar4 = uVar3;
      }
      uVar3 = uVar6;
      if ((uVar6 < 7) || (uVar3 = uVar4, puVar1 = param_2, uVar4 != 0)) {
        *param_2 = uVar9;
        if (uVar3 != 1) {
          param_2[1] = uVar9;
          puVar8 = param_2 + 2;
          if (uVar3 != 2) {
            param_2[2] = uVar9;
            puVar8 = param_2 + 3;
            if (uVar3 != 3) {
              param_2[3] = uVar9;
              puVar8 = param_2 + 4;
              if (uVar3 != 4) {
                param_2[4] = uVar9;
                puVar8 = param_2 + 5;
                if (uVar3 == 6) {
                  param_2[5] = uVar9;
                  puVar8 = param_2 + 6;
                }
              }
            }
          }
        }
        uVar4 = uVar3;
        puVar1 = puVar8;
        if (uVar6 == uVar3) {
          return;
        }
      }
      uVar3 = ((uVar6 - uVar4) - 2 >> 1) + 1;
      if (uVar7 != uVar4) {
        uVar7 = 0;
        puVar8 = param_2 + uVar4;
        do {
          puVar8[1] = uVar9;
          *puVar8 = uVar9;
          uVar7 = uVar7 + 1;
          puVar8 = puVar8 + 2;
        } while (uVar7 < uVar3);
        puVar1 = puVar1 + uVar3 * 2;
        if (uVar6 - uVar4 == uVar3 * 2) {
          return;
        }
      }
      *puVar1 = uVar9;
      return;
    }
    param_3 = param_3 - uVar6;
    puVar1 = puVar8;
    if (param_3 == 0) goto LAB_001d7950;
    uVar4 = (ulong)puVar8 >> 3 & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    if (param_3 < 7) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar4 = param_3;
      if (param_3 != 1) {
        puVar8[1] = uVar9;
        puVar1 = puVar8 + 2;
        if (param_3 != 2) {
          puVar8[2] = uVar9;
          puVar1 = puVar8 + 3;
          if (param_3 != 3) {
            puVar8[3] = uVar9;
            puVar1 = puVar8 + 4;
            if (param_3 != 4) {
              puVar8[4] = uVar9;
              puVar1 = puVar8 + 5;
              if (param_3 == 6) {
                puVar8[5] = uVar9;
                puVar1 = puVar8 + 6;
                uVar4 = 6;
              }
            }
          }
        }
      }
LAB_001d7924:
      if (param_3 != uVar4) {
        uVar3 = param_3 - uVar4;
        if (param_3 - uVar4 != 1) goto LAB_001d7ad4;
        *puVar1 = uVar9;
      }
    }
    else {
      if (uVar4 != 0) {
        puVar1 = puVar8 + 1;
        *puVar8 = uVar9;
        uVar4 = 1;
        goto LAB_001d7924;
      }
      uVar4 = 0;
      uVar3 = param_3;
LAB_001d7ad4:
      uVar2 = (uVar3 - 2 >> 1) + 1;
      uVar7 = 0;
      puVar5 = puVar8 + uVar4;
      do {
        puVar5[1] = uVar9;
        *puVar5 = uVar9;
        uVar7 = uVar7 + 1;
        puVar5 = puVar5 + 2;
      } while (uVar7 < uVar2);
      if (uVar3 != uVar2 * 2) {
        puVar1[uVar2 * 2] = uVar9;
      }
    }
    puVar1 = *(undefined8 **)(this + 8);
LAB_001d7950:
    puVar1 = puVar1 + param_3;
    *(undefined8 **)(this + 8) = puVar1;
    if (uVar6 != 0) {
      memmove(puVar1,param_2,sVar11);
      puVar1 = *(undefined8 **)(this + 8);
    }
    *(size_t *)(this + 8) = (long)puVar1 + sVar11;
    if (puVar8 == param_2) {
      return;
    }
    puVar1 = param_2 + 1;
    uVar4 = (ulong)param_2 >> 3 & 1;
    uVar3 = (ulong)((long)puVar8 - (long)puVar1) >> 3;
    uVar6 = uVar3 + 1;
    if (uVar6 < uVar4) {
      uVar4 = uVar6;
    }
    uVar7 = uVar6;
    if ((uVar6 < 7) || (uVar7 = uVar4, puVar8 = param_2, uVar4 != 0)) {
      *param_2 = uVar9;
      if (uVar7 != 1) {
        param_2[1] = uVar9;
        puVar1 = param_2 + 2;
        if (uVar7 != 2) {
          param_2[2] = uVar9;
          puVar1 = param_2 + 3;
          if (uVar7 != 3) {
            param_2[3] = uVar9;
            puVar1 = param_2 + 4;
            if (uVar7 != 4) {
              param_2[4] = uVar9;
              puVar1 = param_2 + 5;
              if (uVar7 == 6) {
                param_2[5] = uVar9;
                puVar1 = param_2 + 6;
              }
            }
          }
        }
      }
      uVar4 = uVar7;
      puVar8 = puVar1;
      if (uVar6 == uVar7) {
        return;
      }
    }
    uVar7 = ((uVar6 - uVar4) - 2 >> 1) + 1;
    if (uVar3 != uVar4) {
      uVar3 = 0;
      puVar1 = param_2 + uVar4;
      do {
        puVar1[1] = uVar9;
        *puVar1 = uVar9;
        uVar3 = uVar3 + 1;
        puVar1 = puVar1 + 2;
      } while (uVar3 < uVar7);
      puVar8 = puVar8 + uVar7 * 2;
      if (uVar6 - uVar4 == uVar7 * 2) {
        return;
      }
    }
    *puVar8 = uVar9;
    return;
  }
  lVar10 = *(long *)this;
  uVar6 = (long)puVar8 - lVar10 >> 3;
  if (0x1fffffffffffffff - uVar6 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar4 = uVar6;
  if (uVar6 < param_3) {
    uVar4 = param_3;
  }
  uVar4 = uVar4 + uVar6;
  if ((uVar4 < uVar6) || (0x1fffffffffffffff < uVar4)) {
    lVar10 = (long)param_2 - lVar10;
    uVar4 = 0xfffffffffffffff8;
LAB_001d7b0c:
    __dest_00 = operator_new(uVar4);
  }
  else {
    lVar10 = (long)param_2 - lVar10;
    if (uVar4 != 0) {
      uVar4 = uVar4 * 8;
      goto LAB_001d7b0c;
    }
    uVar4 = 0;
    __dest_00 = (void *)0x0;
  }
  puVar8 = (undefined8 *)((long)__dest_00 + lVar10);
  uVar9 = *param_4;
  uVar6 = (ulong)puVar8 >> 3 & 1;
  if (param_3 < uVar6) {
    uVar6 = param_3;
  }
  if (param_3 < 7) {
    *(undefined8 *)((long)__dest_00 + lVar10) = uVar9;
    puVar1 = puVar8 + 1;
    uVar6 = param_3;
    if (1 < param_3) {
      puVar8[1] = uVar9;
      puVar1 = puVar8 + 2;
      if (param_3 != 2) {
        puVar8[2] = uVar9;
        puVar1 = puVar8 + 3;
        if (param_3 != 3) {
          puVar8[3] = uVar9;
          puVar1 = puVar8 + 4;
          if (param_3 != 4) {
            puVar8[4] = uVar9;
            puVar1 = puVar8 + 5;
            if (param_3 == 6) {
              puVar8[5] = uVar9;
              puVar1 = puVar8 + 6;
            }
          }
        }
      }
    }
LAB_001d7b90:
    if (param_3 == uVar6) goto LAB_001d7bb8;
    uVar3 = param_3 - uVar6;
    puVar8 = puVar1;
    if (param_3 - uVar6 != 1) goto LAB_001d7c30;
  }
  else {
    if (uVar6 != 0) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar6 = 1;
      goto LAB_001d7b90;
    }
    uVar6 = 0;
    uVar3 = param_3;
LAB_001d7c30:
    uVar2 = (uVar3 - 2 >> 1) + 1;
    uVar7 = 0;
    puVar1 = (undefined8 *)((long)__dest_00 + lVar10 + uVar6 * 8);
    do {
      puVar1[1] = uVar9;
      *puVar1 = uVar9;
      uVar7 = uVar7 + 1;
      puVar1 = puVar1 + 2;
    } while (uVar7 < uVar2);
    puVar1 = puVar8 + uVar2 * 2;
    if (uVar3 == uVar2 * 2) goto LAB_001d7bb8;
  }
  *puVar1 = uVar9;
LAB_001d7bb8:
  sVar11 = (long)param_2 - (long)*(void **)this;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest_00,*(void **)this,sVar11);
  }
  __dest = (void *)((long)__dest_00 + sVar11 + param_3 * 8);
  sVar11 = *(long *)(this + 8) - (long)param_2;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest,param_2,sVar11);
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = __dest_00;
  *(size_t *)(this + 8) = (long)__dest + sVar11;
  *(ulong *)(this + 0x10) = (long)__dest_00 + uVar4;
  return;
}


==================================================================

### FUNC 001d7cfc (676 bytes) name=FUN_001d7cfc

void FUN_001d7cfc(uint *param_1,long *param_2,
                 vector<unsigned_char,std::allocator<unsigned_char>> *param_3)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  int iVar5;
  void *__dest;
  long lVar6;
  int iVar7;
  ulong uVar8;
  long lVar9;
  uint uVar10;
  ulong uVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  long lVar17;
  float fVar18;
  double dVar19;
  ulong local_18;
  uint *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_8 = 0;
  local_4 = 0;
  local_18 = CONCAT44(local_18._4_4_,0x1010000);
  local_10 = param_1;
  iVar5 = cv::countNonZero((_InputArray *)&local_18);
  uVar10 = *param_1;
  if (iVar5 == 0) {
    iVar5 = 1;
  }
  uVar1 = uVar10 & 0xfff;
  bVar4 = (uVar10 & 0xfff) != 0;
  if (((bVar4) && (uVar1 != 4)) && (1 < uVar1 - 5)) {
    local_18 = 0;
    local_10 = (uint *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_18,0x47);
    memcpy(__dest,"ktype == CV_8U || ktype == CV_32S || ktype == CV_32F || ktype == CV_64F",0x47);
    cv::error(-0xd7,(String *)&local_18,
              "void cv::preprocess2DKernel(const cv::Mat&, std::vector<cv::Point_<int> >&, std::vector<unsigned char>&)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf0d);
    cv::String::deallocate((String *)&local_18);
  }
  uVar8 = (ulong)iVar5;
  local_18 = 0;
  uVar11 = param_2[1] - *param_2 >> 3;
  if (uVar11 < uVar8) {
    FUN_001a8e0c(param_2,param_2[1],uVar8 - uVar11,(_InputArray *)&local_18);
  }
  else if (uVar8 < uVar11) {
    param_2[1] = *param_2 + uVar8 * 8;
  }
  lVar16 = *(long *)param_3;
  uVar11 = (long)iVar5 *
           (long)(int)((uVar10 >> 3 & 0x1ff) + 1 <<
                      (ulong)((uint)(0xfa50L >> ((uVar10 & 7) << 1)) & 3));
  uVar8 = *(long *)(param_3 + 8) - lVar16;
  local_18 = local_18 & 0xffffffffffffff00;
  if (uVar8 <= uVar11 && uVar11 - uVar8 != 0) {
    std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
              (param_3,*(long *)(param_3 + 8),uVar11 - uVar8,(_InputArray *)&local_18);
    lVar16 = *(long *)param_3;
  }
  else if (uVar8 > uVar11) {
    *(ulong *)(param_3 + 8) = lVar16 + uVar11;
  }
  uVar10 = param_1[2];
  if (0 < (int)uVar10) {
    lVar17 = 0;
    uVar13 = param_1[3];
    uVar8 = 0;
    do {
      iVar5 = (int)lVar17;
      lVar14 = *(long *)(param_1 + 4) + lVar17 * **(long **)(param_1 + 0x12);
      if (0 < (int)uVar13) {
        lVar9 = 0;
        do {
          iVar12 = (int)uVar8;
          iVar7 = (int)lVar9;
          if (bVar4) {
            if (uVar1 == 4) {
              iVar2 = *(int *)(lVar14 + lVar9 * 4);
              if (iVar2 != 0) {
                lVar15 = *param_2;
                lVar6 = (long)iVar12 * 8;
                uVar8 = (ulong)(iVar12 + 1);
                *(int *)(lVar15 + lVar6) = iVar7;
                *(int *)(lVar15 + lVar6 + 4) = iVar5;
                *(int *)(lVar16 + (long)iVar12 * 4) = iVar2;
                uVar13 = param_1[3];
              }
            }
            else if (uVar1 == 5) {
              fVar18 = *(float *)(lVar14 + lVar9 * 4);
              if (fVar18 != 0.0) {
                lVar15 = *param_2;
                lVar6 = (long)iVar12 * 8;
                uVar8 = (ulong)(iVar12 + 1);
                *(int *)(lVar15 + lVar6) = iVar7;
                *(int *)(lVar15 + lVar6 + 4) = iVar5;
                *(float *)(lVar16 + (long)iVar12 * 4) = fVar18;
              }
            }
            else {
              dVar19 = *(double *)(lVar14 + lVar9 * 8);
              if (dVar19 != 0.0) {
                lVar6 = *param_2;
                uVar11 = -(uVar8 >> 0x1f) & 0xfffffff800000000 | uVar8 << 3;
                uVar8 = (ulong)(iVar12 + 1);
                *(int *)(lVar6 + uVar11) = iVar7;
                *(int *)(lVar6 + uVar11 + 4) = iVar5;
                *(double *)(lVar16 + uVar11) = dVar19;
              }
            }
          }
          else {
            cVar3 = *(char *)(lVar14 + lVar9);
            if (cVar3 != '\0') {
              lVar6 = *param_2;
              lVar15 = (long)iVar12 * 8;
              uVar8 = (ulong)(iVar12 + 1);
              *(int *)(lVar6 + lVar15) = iVar7;
              *(int *)(lVar6 + lVar15 + 4) = iVar5;
              *(char *)(lVar16 + iVar12) = cVar3;
              uVar13 = param_1[3];
            }
          }
          lVar9 = lVar9 + 1;
        } while (iVar7 + 1 < (int)uVar13);
        uVar10 = param_1[2];
      }
      lVar17 = lVar17 + 1;
    } while (iVar5 + 1 < (int)uVar10);
  }
  return;
}


==================================================================

### FUNC 001d7fb4 (712 bytes) name=FUN_001d7fb4

undefined8 * FUN_001d7fb4(undefined8 *param_1,uint *param_2,undefined4 *param_3,undefined8 *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  char *pcVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar8 = operator_new(0x70);
  uVar12 = *param_4;
  *(undefined4 *)(puVar8 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar8 + 0xc) = 0xffffffff;
  *puVar8 = &PTR_FUN_004f3eb0;
  puVar8[3] = 0;
  puVar8[4] = 0;
  puVar8[5] = 0;
  puVar8[6] = 0;
  puVar8[7] = 0;
  puVar8[8] = 0;
  puVar8[9] = 0;
  puVar9 = *(undefined4 **)(param_2 + 0x10);
  puVar8[10] = 0;
  puVar8[0xb] = 0;
  *(undefined4 *)(puVar8 + 2) = uVar2;
  *(undefined4 *)((long)puVar8 + 0x14) = uVar3;
  uVar2 = puVar9[1];
  *(undefined4 *)((long)puVar8 + 0xc) = *puVar9;
  *(undefined4 *)(puVar8 + 1) = uVar2;
  uVar4 = *param_2;
  puVar8[0xc] = uVar12;
  if ((uVar4 & 0xfff) != 6) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar7 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar12 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar10 = uVar12;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    *(undefined8 *)(pcVar10 + 0x10) = uVar6;
    *(undefined8 *)(pcVar10 + 0x18) = uVar7;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short int; CastOp = cv::Cast<double, double>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar8 + 3,puVar8 + 6);
  __src = (void *)puVar8[10];
  uVar13 = (long)(puVar8[4] - puVar8[3]) >> 3;
  lVar15 = (long)__src - puVar8[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar8[10] = puVar8[9] + (puVar8[4] - puVar8[3]);
    }
    goto LAB_001d8114;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d8114;
  if (uVar13 <= (ulong)(puVar8[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar8[10] = puVar8[10] + uVar13 * 8;
    goto LAB_001d8114;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d8234:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d8234;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar8[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar8[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar8[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar8[9] != (void *)0x0) {
    operator_delete((void *)puVar8[9]);
  }
  puVar8[9] = __dest_00;
  puVar8[10] = (long)__dest + sVar16;
  puVar8[0xb] = (long)__dest_00 + uVar14;
LAB_001d8114:
  puVar11 = operator_new(0x20);
  puVar11[2] = puVar8;
  *(undefined4 *)(puVar11 + 1) = 1;
  *puVar11 = &PTR_FUN_004f4780;
  *param_1 = puVar11;
  param_1[1] = puVar8;
  return param_1;
}


==================================================================

### FUNC 001d82c4 (712 bytes) name=FUN_001d82c4

undefined8 * FUN_001d82c4(undefined8 *param_1,uint *param_2,undefined4 *param_3,undefined8 *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  char *pcVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar8 = operator_new(0x70);
  uVar12 = *param_4;
  *(undefined4 *)(puVar8 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar8 + 0xc) = 0xffffffff;
  *puVar8 = &PTR_FUN_004f3e20;
  puVar8[3] = 0;
  puVar8[4] = 0;
  puVar8[5] = 0;
  puVar8[6] = 0;
  puVar8[7] = 0;
  puVar8[8] = 0;
  puVar8[9] = 0;
  puVar9 = *(undefined4 **)(param_2 + 0x10);
  puVar8[10] = 0;
  puVar8[0xb] = 0;
  *(undefined4 *)(puVar8 + 2) = uVar2;
  *(undefined4 *)((long)puVar8 + 0x14) = uVar3;
  uVar2 = puVar9[1];
  *(undefined4 *)((long)puVar8 + 0xc) = *puVar9;
  *(undefined4 *)(puVar8 + 1) = uVar2;
  uVar4 = *param_2;
  puVar8[0xc] = uVar12;
  if ((uVar4 & 0xfff) != 6) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar7 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar12 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar10 = uVar12;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    *(undefined8 *)(pcVar10 + 0x10) = uVar6;
    *(undefined8 *)(pcVar10 + 0x18) = uVar7;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short unsigned int; CastOp = cv::Cast<double, double>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar8 + 3,puVar8 + 6);
  __src = (void *)puVar8[10];
  uVar13 = (long)(puVar8[4] - puVar8[3]) >> 3;
  lVar15 = (long)__src - puVar8[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar8[10] = puVar8[9] + (puVar8[4] - puVar8[3]);
    }
    goto LAB_001d8424;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d8424;
  if (uVar13 <= (ulong)(puVar8[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar8[10] = puVar8[10] + uVar13 * 8;
    goto LAB_001d8424;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d8544:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d8544;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar8[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar8[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar8[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar8[9] != (void *)0x0) {
    operator_delete((void *)puVar8[9]);
  }
  puVar8[9] = __dest_00;
  puVar8[10] = (long)__dest + sVar16;
  puVar8[0xb] = (long)__dest_00 + uVar14;
LAB_001d8424:
  puVar11 = operator_new(0x20);
  puVar11[2] = puVar8;
  *(undefined4 *)(puVar11 + 1) = 1;
  *puVar11 = &PTR_FUN_004f46f0;
  *param_1 = puVar11;
  param_1[1] = puVar8;
  return param_1;
}


==================================================================

### FUNC 001d85d4 (716 bytes) name=FUN_001d85d4

undefined8 * FUN_001d85d4(undefined8 *param_1,uint *param_2,undefined4 *param_3,double *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  undefined4 *puVar10;
  char *pcVar11;
  undefined8 *puVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  double dVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar9 = operator_new(0x68);
  dVar17 = *param_4;
  *(undefined4 *)(puVar9 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar9 + 0xc) = 0xffffffff;
  *puVar9 = &PTR_FUN_004f3e50;
  puVar9[3] = 0;
  puVar9[4] = 0;
  puVar9[5] = 0;
  puVar9[6] = 0;
  puVar9[7] = 0;
  puVar9[8] = 0;
  puVar9[9] = 0;
  puVar10 = *(undefined4 **)(param_2 + 0x10);
  puVar9[10] = 0;
  puVar9[0xb] = 0;
  *(undefined4 *)(puVar9 + 2) = uVar2;
  *(undefined4 *)((long)puVar9 + 0x14) = uVar3;
  uVar2 = puVar10[1];
  *(undefined4 *)((long)puVar9 + 0xc) = *puVar10;
  *(undefined4 *)(puVar9 + 1) = uVar2;
  uVar4 = *param_2;
  *(float *)(puVar9 + 0xc) = (float)dVar17;
  if ((uVar4 & 0xfff) != 5) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar8 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar7 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar11 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar11 = uVar5;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short int; CastOp = cv::Cast<float, short int>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar9 + 3,puVar9 + 6);
  __src = (void *)puVar9[10];
  uVar13 = (long)(puVar9[4] - puVar9[3]) >> 3;
  lVar15 = (long)__src - puVar9[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar9[10] = puVar9[9] + (puVar9[4] - puVar9[3]);
    }
    goto LAB_001d8738;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d8738;
  if (uVar13 <= (ulong)(puVar9[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar9[10] = puVar9[10] + uVar13 * 8;
    goto LAB_001d8738;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d8858:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d8858;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar9[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar9[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar9[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar9[9] != (void *)0x0) {
    operator_delete((void *)puVar9[9]);
  }
  puVar9[9] = __dest_00;
  puVar9[10] = (long)__dest + sVar16;
  puVar9[0xb] = (long)__dest_00 + uVar14;
LAB_001d8738:
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar9;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &PTR_FUN_004f4720;
  *param_1 = puVar12;
  param_1[1] = puVar9;
  return param_1;
}


==================================================================

### FUNC 001d88e8 (716 bytes) name=FUN_001d88e8

undefined8 * FUN_001d88e8(undefined8 *param_1,uint *param_2,undefined4 *param_3,double *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  undefined4 *puVar10;
  char *pcVar11;
  undefined8 *puVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  double dVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar9 = operator_new(0x68);
  dVar17 = *param_4;
  *(undefined4 *)(puVar9 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar9 + 0xc) = 0xffffffff;
  *puVar9 = &PTR_FUN_004f3ee0;
  puVar9[3] = 0;
  puVar9[4] = 0;
  puVar9[5] = 0;
  puVar9[6] = 0;
  puVar9[7] = 0;
  puVar9[8] = 0;
  puVar9[9] = 0;
  puVar10 = *(undefined4 **)(param_2 + 0x10);
  puVar9[10] = 0;
  puVar9[0xb] = 0;
  *(undefined4 *)(puVar9 + 2) = uVar2;
  *(undefined4 *)((long)puVar9 + 0x14) = uVar3;
  uVar2 = puVar10[1];
  *(undefined4 *)((long)puVar9 + 0xc) = *puVar10;
  *(undefined4 *)(puVar9 + 1) = uVar2;
  uVar4 = *param_2;
  *(float *)(puVar9 + 0xc) = (float)dVar17;
  if ((uVar4 & 0xfff) != 5) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar8 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar7 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar11 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar11 = uVar5;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = float; CastOp = cv::Cast<float, float>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar9 + 3,puVar9 + 6);
  __src = (void *)puVar9[10];
  uVar13 = (long)(puVar9[4] - puVar9[3]) >> 3;
  lVar15 = (long)__src - puVar9[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar9[10] = puVar9[9] + (puVar9[4] - puVar9[3]);
    }
    goto LAB_001d8a4c;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d8a4c;
  if (uVar13 <= (ulong)(puVar9[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar9[10] = puVar9[10] + uVar13 * 8;
    goto LAB_001d8a4c;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d8b6c:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d8b6c;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar9[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar9[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar9[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar9[9] != (void *)0x0) {
    operator_delete((void *)puVar9[9]);
  }
  puVar9[9] = __dest_00;
  puVar9[10] = (long)__dest + sVar16;
  puVar9[0xb] = (long)__dest_00 + uVar14;
LAB_001d8a4c:
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar9;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &DAT_004f47b0;
  *param_1 = puVar12;
  param_1[1] = puVar9;
  return param_1;
}


==================================================================

### FUNC 001d8bfc (712 bytes) name=FUN_001d8bfc

undefined8 * FUN_001d8bfc(undefined8 *param_1,uint *param_2,undefined4 *param_3,undefined8 *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  char *pcVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar8 = operator_new(0x70);
  uVar12 = *param_4;
  *(undefined4 *)(puVar8 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar8 + 0xc) = 0xffffffff;
  *puVar8 = &PTR_FUN_004f3f10;
  puVar8[3] = 0;
  puVar8[4] = 0;
  puVar8[5] = 0;
  puVar8[6] = 0;
  puVar8[7] = 0;
  puVar8[8] = 0;
  puVar8[9] = 0;
  puVar9 = *(undefined4 **)(param_2 + 0x10);
  puVar8[10] = 0;
  puVar8[0xb] = 0;
  *(undefined4 *)(puVar8 + 2) = uVar2;
  *(undefined4 *)((long)puVar8 + 0x14) = uVar3;
  uVar2 = puVar9[1];
  *(undefined4 *)((long)puVar8 + 0xc) = *puVar9;
  *(undefined4 *)(puVar8 + 1) = uVar2;
  uVar4 = *param_2;
  puVar8[0xc] = uVar12;
  if ((uVar4 & 0xfff) != 6) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar7 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar12 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar10 = uVar12;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    *(undefined8 *)(pcVar10 + 0x10) = uVar6;
    *(undefined8 *)(pcVar10 + 0x18) = uVar7;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = double; CastOp = cv::Cast<double, double>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar8 + 3,puVar8 + 6);
  __src = (void *)puVar8[10];
  uVar13 = (long)(puVar8[4] - puVar8[3]) >> 3;
  lVar15 = (long)__src - puVar8[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar8[10] = puVar8[9] + (puVar8[4] - puVar8[3]);
    }
    goto LAB_001d8d5c;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d8d5c;
  if (uVar13 <= (ulong)(puVar8[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar8[10] = puVar8[10] + uVar13 * 8;
    goto LAB_001d8d5c;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d8e7c:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d8e7c;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar8[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar8[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar8[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar8[9] != (void *)0x0) {
    operator_delete((void *)puVar8[9]);
  }
  puVar8[9] = __dest_00;
  puVar8[10] = (long)__dest + sVar16;
  puVar8[0xb] = (long)__dest_00 + uVar14;
LAB_001d8d5c:
  puVar11 = operator_new(0x20);
  puVar11[2] = puVar8;
  *(undefined4 *)(puVar11 + 1) = 1;
  *puVar11 = &PTR_FUN_004f47e0;
  *param_1 = puVar11;
  param_1[1] = puVar8;
  return param_1;
}


==================================================================

### FUNC 001d8f0c (716 bytes) name=FUN_001d8f0c

undefined8 * FUN_001d8f0c(undefined8 *param_1,uint *param_2,undefined4 *param_3,double *param_4)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  undefined4 *puVar10;
  char *pcVar11;
  undefined8 *puVar12;
  ulong uVar13;
  ulong uVar14;
  void *__src;
  long lVar15;
  size_t sVar16;
  void *__dest_00;
  double dVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar9 = operator_new(0x68);
  dVar17 = *param_4;
  *(undefined4 *)(puVar9 + 1) = 0xffffffff;
  *(undefined4 *)((long)puVar9 + 0xc) = 0xffffffff;
  *puVar9 = &PTR_FUN_004f3df0;
  puVar9[3] = 0;
  puVar9[4] = 0;
  puVar9[5] = 0;
  puVar9[6] = 0;
  puVar9[7] = 0;
  puVar9[8] = 0;
  puVar9[9] = 0;
  puVar10 = *(undefined4 **)(param_2 + 0x10);
  puVar9[10] = 0;
  puVar9[0xb] = 0;
  *(undefined4 *)(puVar9 + 2) = uVar2;
  *(undefined4 *)((long)puVar9 + 0x14) = uVar3;
  uVar2 = puVar10[1];
  *(undefined4 *)((long)puVar9 + 0xc) = *puVar10;
  *(undefined4 *)(puVar9 + 1) = uVar2;
  uVar4 = *param_2;
  *(float *)(puVar9 + 0xc) = (float)dVar17;
  if ((uVar4 & 0xfff) != 5) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar8 = s__kernel_type______DataType<KT>___00443558._24_8_;
    uVar7 = s__kernel_type______DataType<KT>___00443558._16_8_;
    uVar6 = s__kernel_type______DataType<KT>___00443558._8_8_;
    uVar5 = s__kernel_type______DataType<KT>___00443558._0_8_;
    *(undefined4 *)(pcVar11 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
    *(undefined8 *)pcVar11 = uVar5;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short unsigned int; CastOp = cv::Cast<float, float>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
    cv::String::deallocate((String *)&local_10);
  }
  FUN_001d7cfc(param_2,puVar9 + 3,puVar9 + 6);
  __src = (void *)puVar9[10];
  uVar13 = (long)(puVar9[4] - puVar9[3]) >> 3;
  lVar15 = (long)__src - puVar9[9];
  uVar14 = lVar15 >> 3;
  if (uVar13 <= uVar14) {
    if (uVar13 < uVar14) {
      puVar9[10] = puVar9[9] + (puVar9[4] - puVar9[3]);
    }
    goto LAB_001d9070;
  }
  uVar13 = uVar13 - uVar14;
  if (uVar13 == 0) goto LAB_001d9070;
  if (uVar13 <= (ulong)(puVar9[0xb] - (long)__src >> 3)) {
    memset(__src,0,uVar13 * 8);
    puVar9[10] = puVar9[10] + uVar13 * 8;
    goto LAB_001d9070;
  }
  if (0x1fffffffffffffff - uVar14 < uVar13) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar13;
  if (uVar13 < uVar14) {
    uVar1 = uVar14;
  }
  uVar1 = uVar1 + uVar14;
  if ((uVar1 < uVar14) || (0x1fffffffffffffff < uVar1)) {
    uVar14 = 0xfffffffffffffff8;
LAB_001d9190:
    __dest_00 = operator_new(uVar14);
  }
  else {
    uVar14 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar14 = uVar1 * 8;
      goto LAB_001d9190;
    }
  }
  memset((void *)((long)__dest_00 + lVar15),0,uVar13 * 8);
  sVar16 = (long)__src - (long)puVar9[9];
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar9[9],sVar16);
  }
  __dest = (void *)((long)__dest_00 + uVar13 * 8 + sVar16);
  sVar16 = puVar9[10] - (long)__src;
  if ((long)sVar16 >> 3 != 0) {
    memmove(__dest,__src,sVar16);
  }
  if ((void *)puVar9[9] != (void *)0x0) {
    operator_delete((void *)puVar9[9]);
  }
  puVar9[9] = __dest_00;
  puVar9[10] = (long)__dest + sVar16;
  puVar9[0xb] = (long)__dest_00 + uVar14;
LAB_001d9070:
  puVar12 = operator_new(0x20);
  puVar12[2] = puVar9;
  *(undefined4 *)(puVar12 + 1) = 1;
  *puVar12 = &PTR_FUN_004f46c0;
  *param_1 = puVar12;
  param_1[1] = puVar9;
  return param_1;
}


==================================================================

### FUNC 001d9220 (4676 bytes) name=FUN_001d9220

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long * FUN_001d9220(long *param_1,double param_2,uint param_3,uint param_4,_InputArray *param_5,
                   int *param_6,uint param_7)

{
  int *piVar1;
  long *plVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  char cVar8;
  long lVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  bool bVar16;
  bool bVar17;
  bool bVar18;
  int iVar19;
  char *pcVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  long *plVar23;
  Mat *pMVar24;
  uint uVar25;
  ulong uVar26;
  ulong uVar27;
  int iVar28;
  double dVar29;
  double local_208 [2];
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  long local_1d0;
  long lStack_1c8;
  long local_1c0;
  long lStack_1b8;
  long local_1b0;
  long lStack_1a8;
  long local_1a0;
  long lStack_198;
  long local_190;
  long lStack_188;
  long local_180;
  long lStack_178;
  undefined8 local_168;
  undefined8 local_160;
  String aSStack_158 [16];
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  undefined4 local_5c;
  int local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_208[0] = param_2;
  iVar19 = cv::_InputArray::kind(param_5);
  if (iVar19 == 0x10000) {
    pMVar24 = *(Mat **)(param_5 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar24;
    local_5c = *(undefined4 *)(pMVar24 + 4);
    local_58 = *(int *)(pMVar24 + 8);
    local_54 = *(undefined4 *)(pMVar24 + 0xc);
    local_50 = *(undefined8 *)(pMVar24 + 0x10);
    local_48 = *(undefined8 *)(pMVar24 + 0x18);
    local_40 = *(undefined8 *)(pMVar24 + 0x20);
    local_38 = *(undefined8 *)(pMVar24 + 0x28);
    local_30 = *(undefined8 *)(pMVar24 + 0x30);
    local_28 = *(long *)(pMVar24 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar8 = '\x01';
        bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar16) {
          *piVar1 = *piVar1 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar24 + 0x48);
      local_8 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      local_5c = 0;
      cv::Mat::copySize((Mat *)&local_60,pMVar24);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_5);
  }
  uVar3 = param_3 & 7;
  uVar4 = param_4 & 7;
  if (((param_3 >> 3 & 0x1ff) + 1 == (param_4 >> 3 & 0x1ff) + 1) && (uVar3 <= uVar4)) {
    iVar19 = *param_6;
    iVar28 = param_6[1];
    iVar5 = local_20[1];
    iVar6 = *local_20;
  }
  else {
    local_168 = 0;
    local_160 = 0;
    pcVar20 = (char *)cv::String::allocate((String *)&local_168,0x2c);
    uVar7 = s_cn____CV_MAT_CN_dstType_____ddep_00443580._40_4_;
    uVar13 = s_cn____CV_MAT_CN_dstType_____ddep_00443580._24_8_;
    uVar12 = s_cn____CV_MAT_CN_dstType_____ddep_00443580._16_8_;
    uVar11 = s_cn____CV_MAT_CN_dstType_____ddep_00443580._8_8_;
    uVar10 = s_cn____CV_MAT_CN_dstType_____ddep_00443580._0_8_;
    *(undefined8 *)(pcVar20 + 0x20) = s_cn____CV_MAT_CN_dstType_____ddep_00443580._32_8_;
    *(undefined4 *)(pcVar20 + 0x28) = uVar7;
    *(undefined8 *)pcVar20 = uVar10;
    *(undefined8 *)(pcVar20 + 8) = uVar11;
    *(undefined8 *)(pcVar20 + 0x10) = uVar12;
    *(undefined8 *)(pcVar20 + 0x18) = uVar13;
    cv::error(-0xd7,(String *)&local_168,
              "cv::Ptr<cv::BaseFilter> cv::getLinearFilter(int, int, cv::InputArray, cv::Point, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x1167);
    cv::String::deallocate((String *)&local_168);
    iVar19 = *param_6;
    iVar28 = param_6[1];
    iVar5 = local_20[1];
    iVar6 = *local_20;
  }
  if (iVar19 == -1) {
    iVar19 = iVar5 / 2;
  }
  if (iVar28 == -1) {
    iVar28 = iVar6 / 2;
  }
  if ((((iVar19 < 0) || (iVar5 <= iVar19)) || (iVar6 <= iVar28)) || (iVar28 < 0)) {
    local_148 = 0;
    local_140 = 0;
    pcVar20 = (char *)cv::String::allocate((String *)&local_148,0x34);
    uVar15 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar14 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar13 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar12 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar11 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar10 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar20 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar20 = uVar10;
    *(undefined8 *)(pcVar20 + 8) = uVar11;
    *(undefined8 *)(pcVar20 + 0x10) = uVar12;
    *(undefined8 *)(pcVar20 + 0x18) = uVar13;
    *(undefined8 *)(pcVar20 + 0x20) = uVar14;
    *(undefined8 *)(pcVar20 + 0x28) = uVar15;
    cv::error(-0xd7,(String *)&local_148,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    cv::String::deallocate((String *)&local_148);
  }
  *param_6 = iVar19;
  param_6[1] = iVar28;
  bVar16 = uVar4 == 6;
  if ((uVar3 == 6) || (uVar25 = 5, bVar16)) {
    uVar25 = 6;
  }
  local_78 = &local_70;
  local_80 = &uStack_b8;
  local_b0 = 0;
  uStack_68 = 0;
  local_70 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  uStack_b8 = _UNK_001da5a8;
  local_c0 = _DAT_001da5a0;
  local_88 = 0;
  if (uVar25 == (local_60 & 0xfff)) {
    cv::Mat::operator=((Mat *)&local_c0,(Mat *)&local_60);
  }
  else {
    local_c8 = 0;
    local_c4 = 0;
    local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
    dVar29 = 1.0;
    if ((local_60 & 0xfff) == 4) {
      dVar29 = 1.0 / (double)(1 << (ulong)(param_7 & 0x1f));
    }
    local_d0 = (Mat *)&local_c0;
    cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_d8,uVar25,dVar29,0.0);
  }
  if (((param_3 | param_4) & 7) == 0) {
    iVar19 = *param_6;
    iVar28 = param_6[1];
    puVar21 = operator_new(0x68);
    *(undefined4 *)(puVar21 + 1) = 0xffffffff;
    *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
    *puVar21 = &PTR_FUN_004f3cd0;
    puVar21[3] = 0;
    puVar21[4] = 0;
    puVar21[5] = 0;
    puVar21[6] = 0;
    puVar21[7] = 0;
    puVar21[8] = 0;
    puVar21[9] = 0;
    puVar21[10] = 0;
    puVar21[0xb] = 0;
    *(int *)(puVar21 + 2) = iVar19;
    *(int *)((long)puVar21 + 0x14) = iVar28;
    uVar7 = *(undefined4 *)local_80;
    *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
    *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
    *(float *)(puVar21 + 0xc) = (float)local_208[0];
    if (((uint)local_c0 & 0xfff) != 5) {
      local_138 = 0;
      local_130 = 0;
      pcVar20 = (char *)cv::String::allocate((String *)&local_138,0x24);
      uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
      uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
      uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
      uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
      *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
      *(undefined8 *)pcVar20 = uVar10;
      *(undefined8 *)(pcVar20 + 8) = uVar11;
      *(undefined8 *)(pcVar20 + 0x10) = uVar12;
      *(undefined8 *)(pcVar20 + 0x18) = uVar13;
      cv::error(-0xd7,(String *)&local_138,
                "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = unsigned char; CastOp = cv::Cast<float, unsigned char>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
      cv::String::deallocate((String *)&local_138);
    }
    FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
    FUN_001c66c4(puVar21 + 9,(long)(puVar21[4] - puVar21[3]) >> 3);
    plVar23 = operator_new(0x20);
    *(undefined4 *)(plVar23 + 1) = 1;
    plVar23[2] = (long)puVar21;
    *plVar23 = (long)&PTR_FUN_004f45a0;
    plVar2 = plVar23 + 1;
    *param_1 = (long)plVar23;
    param_1[1] = (long)puVar21;
    do {
      cVar8 = '\x01';
      bVar16 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar16) {
        *(int *)plVar2 = (int)*plVar2 + 1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    do {
      lVar9 = *plVar2;
      cVar8 = '\x01';
      bVar16 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar16) {
        *(int *)plVar2 = (int)lVar9 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if ((int)lVar9 == 1) {
      (**(code **)(*plVar23 + 0x10))();
    }
    goto LAB_001d95a8;
  }
  bVar17 = uVar3 != 0;
  if ((bVar17) || (uVar4 != 2)) {
    if ((bVar17) || (uVar4 != 3)) {
      bVar18 = uVar4 == 5;
      if (bVar17) {
LAB_001d9630:
        if (uVar3 == 2) {
          if (uVar4 == 2) {
            iVar19 = *param_6;
            iVar28 = param_6[1];
            puVar21 = operator_new(0x68);
            *(undefined4 *)(puVar21 + 1) = 0xffffffff;
            *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
            *puVar21 = &PTR_FUN_004f3dc0;
            puVar21[3] = 0;
            puVar21[4] = 0;
            puVar21[5] = 0;
            puVar21[6] = 0;
            puVar21[7] = 0;
            puVar21[8] = 0;
            puVar21[9] = 0;
            puVar21[10] = 0;
            puVar21[0xb] = 0;
            *(int *)(puVar21 + 2) = iVar19;
            *(int *)((long)puVar21 + 0x14) = iVar28;
            uVar7 = *(undefined4 *)local_80;
            *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
            *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
            *(float *)(puVar21 + 0xc) = (float)local_208[0];
            if (((uint)local_c0 & 0xfff) != 5) {
              local_e8 = 0;
              local_e0 = 0;
              pcVar20 = (char *)cv::String::allocate((String *)&local_e8,0x24);
              uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
              uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
              uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
              uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
              *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
              *(undefined8 *)pcVar20 = uVar10;
              *(undefined8 *)(pcVar20 + 8) = uVar11;
              *(undefined8 *)(pcVar20 + 0x10) = uVar12;
              *(undefined8 *)(pcVar20 + 0x18) = uVar13;
              cv::error(-0xd7,(String *)&local_e8,
                        "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short unsigned int; CastOp = cv::Cast<float, short unsigned int>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                        ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
              cv::String::deallocate((String *)&local_e8);
            }
            FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
            uVar27 = (long)(puVar21[4] - puVar21[3]) >> 3;
            local_1e0 = 0;
            uVar26 = (long)(puVar21[10] - puVar21[9]) >> 3;
            if (uVar26 < uVar27) {
              std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                        ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar21 + 9),
                         puVar21[10],uVar27 - uVar26);
            }
            else if (uVar27 < uVar26) {
              puVar21[10] = puVar21[9] + (puVar21[4] - puVar21[3]);
            }
            puVar22 = operator_new(0x20);
            *(undefined4 *)(puVar22 + 1) = 1;
            puVar22[2] = puVar21;
            *puVar22 = &PTR_FUN_004f4690;
            piVar1 = (int *)(puVar22 + 1);
            *param_1 = (long)puVar22;
            param_1[1] = (long)puVar21;
            do {
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = *piVar1 + 1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
            do {
              iVar19 = *piVar1;
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = iVar19 + -1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
          }
          else if (bVar18) {
            FUN_001d8f0c(&local_1d0,(Mat *)&local_c0,param_6,local_208);
            param_1[1] = lStack_1c8;
            *param_1 = local_1d0;
            if (local_1d0 == 0) goto LAB_001d95a8;
            piVar1 = (int *)(local_1d0 + 8);
            do {
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = *piVar1 + 1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
            if (local_1d0 == 0) goto LAB_001d95a8;
            piVar1 = (int *)(local_1d0 + 8);
            do {
              iVar19 = *piVar1;
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = iVar19 + -1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
          }
          else {
            if (!bVar16) goto LAB_001d9e90;
            FUN_001d82c4(&local_1c0,(Mat *)&local_c0,param_6,local_208);
            param_1[1] = lStack_1b8;
            *param_1 = local_1c0;
            if (local_1c0 == 0) goto LAB_001d95a8;
            piVar1 = (int *)(local_1c0 + 8);
            do {
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = *piVar1 + 1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
            if (local_1c0 == 0) goto LAB_001d95a8;
            piVar1 = (int *)(local_1c0 + 8);
            do {
              iVar19 = *piVar1;
              cVar8 = '\x01';
              bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar16) {
                *piVar1 = iVar19 + -1;
                cVar8 = ExclusiveMonitorsStatus();
              }
            } while (cVar8 != '\0');
          }
        }
        else {
LAB_001d9e90:
          if (uVar3 == 3) {
            if (uVar4 == 3) {
              FUN_001d85d4(&local_1b0,(Mat *)&local_c0,param_6,local_208);
              param_1[1] = lStack_1a8;
              *param_1 = local_1b0;
              if (local_1b0 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_1b0 + 8);
              do {
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = *piVar1 + 1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
              if (local_1b0 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_1b0 + 8);
              do {
                iVar19 = *piVar1;
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = iVar19 + -1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
            }
            else if (bVar18) {
              iVar19 = *param_6;
              iVar28 = param_6[1];
              puVar21 = operator_new(0x68);
              *(undefined4 *)(puVar21 + 1) = 0xffffffff;
              *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
              *puVar21 = &PTR_FUN_004f3e80;
              puVar21[3] = 0;
              puVar21[4] = 0;
              puVar21[5] = 0;
              puVar21[6] = 0;
              puVar21[7] = 0;
              puVar21[8] = 0;
              puVar21[9] = 0;
              puVar21[10] = 0;
              puVar21[0xb] = 0;
              *(int *)(puVar21 + 2) = iVar19;
              *(int *)((long)puVar21 + 0x14) = iVar28;
              uVar7 = *(undefined4 *)local_80;
              *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
              *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
              *(float *)(puVar21 + 0xc) = (float)local_208[0];
              if (((uint)local_c0 & 0xfff) != 5) {
                local_d8 = 0;
                local_d0 = (Mat *)0x0;
                pcVar20 = (char *)cv::String::allocate((String *)&local_d8,0x24);
                uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
                uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
                uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
                uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
                *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_
                ;
                *(undefined8 *)pcVar20 = uVar10;
                *(undefined8 *)(pcVar20 + 8) = uVar11;
                *(undefined8 *)(pcVar20 + 0x10) = uVar12;
                *(undefined8 *)(pcVar20 + 0x18) = uVar13;
                cv::error(-0xd7,(String *)&local_d8,
                          "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = short int; CastOp = cv::Cast<float, float>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                          ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a
                         );
                cv::String::deallocate((String *)&local_d8);
              }
              FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
              uVar27 = (long)(puVar21[4] - puVar21[3]) >> 3;
              local_1d8 = 0;
              uVar26 = (long)(puVar21[10] - puVar21[9]) >> 3;
              if (uVar26 < uVar27) {
                std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                          ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar21 + 9),
                           puVar21[10],uVar27 - uVar26);
              }
              else if (uVar27 < uVar26) {
                puVar21[10] = puVar21[9] + (puVar21[4] - puVar21[3]);
              }
              puVar22 = operator_new(0x20);
              *(undefined4 *)(puVar22 + 1) = 1;
              puVar22[2] = puVar21;
              *puVar22 = &PTR_FUN_004f4750;
              piVar1 = (int *)(puVar22 + 1);
              *param_1 = (long)puVar22;
              param_1[1] = (long)puVar21;
              do {
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = *piVar1 + 1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
              do {
                iVar19 = *piVar1;
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = iVar19 + -1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
            }
            else {
              if (!bVar16) goto LAB_001d9ea4;
              FUN_001d7fb4(&local_1a0,(Mat *)&local_c0,param_6,local_208);
              param_1[1] = lStack_198;
              *param_1 = local_1a0;
              if (local_1a0 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_1a0 + 8);
              do {
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = *piVar1 + 1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
              if (local_1a0 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_1a0 + 8);
              do {
                iVar19 = *piVar1;
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = iVar19 + -1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
            }
          }
          else {
LAB_001d9ea4:
            if ((uVar3 == 5) && (bVar18)) {
              FUN_001d88e8(&local_190,(Mat *)&local_c0,param_6,local_208,&local_e8,&local_d8);
              param_1[1] = lStack_188;
              *param_1 = local_190;
              if (local_190 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_190 + 8);
              do {
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = *piVar1 + 1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
              if (local_190 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_190 + 8);
              do {
                iVar19 = *piVar1;
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = iVar19 + -1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
            }
            else {
              if ((uVar3 != 6) || (!bVar16)) {
                cv::format("Unsupported combination of source format (=%d), and destination format (=%d)"
                           ,aSStack_158,(ulong)param_3,(ulong)param_4);
                cv::error(-0xd5,aSStack_158,
                          "cv::Ptr<cv::BaseFilter> cv::getLinearFilter(int, int, cv::InputArray, cv::Point, double, int)"
                          ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",
                          0x11a8);
                cv::String::deallocate(aSStack_158);
                *param_1 = 0;
                param_1[1] = 0;
                goto LAB_001d95a8;
              }
              FUN_001d8bfc(&local_180,(Mat *)&local_c0,param_6,local_208);
              param_1[1] = lStack_178;
              *param_1 = local_180;
              if (local_180 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_180 + 8);
              do {
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = *piVar1 + 1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
              if (local_180 == 0) goto LAB_001d95a8;
              piVar1 = (int *)(local_180 + 8);
              do {
                iVar19 = *piVar1;
                cVar8 = '\x01';
                bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar16) {
                  *piVar1 = iVar19 + -1;
                  cVar8 = ExclusiveMonitorsStatus();
                }
              } while (cVar8 != '\0');
            }
          }
        }
      }
      else if (bVar18) {
        iVar19 = *param_6;
        iVar28 = param_6[1];
        puVar21 = operator_new(0x68);
        *(undefined4 *)(puVar21 + 1) = 0xffffffff;
        *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
        *puVar21 = &PTR_FUN_004f3d60;
        puVar21[3] = 0;
        puVar21[4] = 0;
        puVar21[5] = 0;
        puVar21[6] = 0;
        puVar21[7] = 0;
        puVar21[8] = 0;
        puVar21[9] = 0;
        puVar21[10] = 0;
        puVar21[0xb] = 0;
        *(int *)(puVar21 + 2) = iVar19;
        *(int *)((long)puVar21 + 0x14) = iVar28;
        uVar7 = *(undefined4 *)local_80;
        *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
        *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
        *(float *)(puVar21 + 0xc) = (float)local_208[0];
        if (((uint)local_c0 & 0xfff) != 5) {
          local_100 = 0;
          local_108 = 0;
          pcVar20 = (char *)cv::String::allocate((String *)&local_108,0x24);
          uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
          uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
          uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
          uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
          *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
          *(undefined8 *)pcVar20 = uVar10;
          *(undefined8 *)(pcVar20 + 8) = uVar11;
          *(undefined8 *)(pcVar20 + 0x10) = uVar12;
          *(undefined8 *)(pcVar20 + 0x18) = uVar13;
          cv::error(-0xd7,(String *)&local_108,
                    "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = unsigned char; CastOp = cv::Cast<float, float>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
          cv::String::deallocate((String *)&local_108);
        }
        FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
        uVar27 = (long)(puVar21[4] - puVar21[3]) >> 3;
        local_1f0 = 0;
        uVar26 = (long)(puVar21[10] - puVar21[9]) >> 3;
        if (uVar26 < uVar27) {
          std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                    ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar21 + 9),
                     puVar21[10],uVar27 - uVar26);
        }
        else if (uVar27 < uVar26) {
          puVar21[10] = puVar21[9] + (puVar21[4] - puVar21[3]);
        }
        puVar22 = operator_new(0x20);
        *(undefined4 *)(puVar22 + 1) = 1;
        puVar22[2] = puVar21;
        *puVar22 = &PTR_FUN_004f4630;
        piVar1 = (int *)(puVar22 + 1);
        *param_1 = (long)puVar22;
        param_1[1] = (long)puVar21;
        do {
          cVar8 = '\x01';
          bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar16) {
            *piVar1 = *piVar1 + 1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
        do {
          iVar19 = *piVar1;
          cVar8 = '\x01';
          bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar16) {
            *piVar1 = iVar19 + -1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
      }
      else {
        if (!bVar16) goto LAB_001d9630;
        iVar19 = *param_6;
        iVar28 = param_6[1];
        puVar21 = operator_new(0x70);
        *(undefined4 *)(puVar21 + 1) = 0xffffffff;
        *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
        *puVar21 = &PTR_FUN_004f3d90;
        puVar21[3] = 0;
        puVar21[4] = 0;
        puVar21[5] = 0;
        puVar21[6] = 0;
        puVar21[7] = 0;
        puVar21[8] = 0;
        puVar21[9] = 0;
        puVar21[10] = 0;
        puVar21[0xb] = 0;
        *(int *)(puVar21 + 2) = iVar19;
        *(int *)((long)puVar21 + 0x14) = iVar28;
        uVar7 = *(undefined4 *)local_80;
        *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
        *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
        puVar21[0xc] = local_208[0];
        if (((uint)local_c0 & 0xfff) != 6) {
          local_f8 = 0;
          local_f0 = 0;
          pcVar20 = (char *)cv::String::allocate((String *)&local_f8,0x24);
          uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
          uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
          uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
          uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
          *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
          *(undefined8 *)pcVar20 = uVar10;
          *(undefined8 *)(pcVar20 + 8) = uVar11;
          *(undefined8 *)(pcVar20 + 0x10) = uVar12;
          *(undefined8 *)(pcVar20 + 0x18) = uVar13;
          cv::error(-0xd7,(String *)&local_f8,
                    "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = unsigned char; CastOp = cv::Cast<double, double>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
          cv::String::deallocate((String *)&local_f8);
        }
        FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
        uVar27 = (long)(puVar21[4] - puVar21[3]) >> 3;
        local_1e8 = 0;
        uVar26 = (long)(puVar21[10] - puVar21[9]) >> 3;
        if (uVar26 < uVar27) {
          std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                    ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar21 + 9),
                     puVar21[10],uVar27 - uVar26);
        }
        else if (uVar27 < uVar26) {
          puVar21[10] = puVar21[9] + (puVar21[4] - puVar21[3]);
        }
        puVar22 = operator_new(0x20);
        *(undefined4 *)(puVar22 + 1) = 1;
        puVar22[2] = puVar21;
        *puVar22 = &PTR_FUN_004f4660;
        piVar1 = (int *)(puVar22 + 1);
        *param_1 = (long)puVar22;
        param_1[1] = (long)puVar21;
        do {
          cVar8 = '\x01';
          bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar16) {
            *piVar1 = *piVar1 + 1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
        do {
          iVar19 = *piVar1;
          cVar8 = '\x01';
          bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar16) {
            *piVar1 = iVar19 + -1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
      }
    }
    else {
      iVar19 = *param_6;
      iVar28 = param_6[1];
      puVar21 = operator_new(0x68);
      *(undefined4 *)(puVar21 + 1) = 0xffffffff;
      *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
      *puVar21 = &PTR_FUN_004f3d30;
      puVar21[3] = 0;
      puVar21[4] = 0;
      puVar21[5] = 0;
      puVar21[6] = 0;
      puVar21[7] = 0;
      puVar21[8] = 0;
      puVar21[9] = 0;
      puVar21[10] = 0;
      puVar21[0xb] = 0;
      *(int *)(puVar21 + 2) = iVar19;
      *(int *)((long)puVar21 + 0x14) = iVar28;
      uVar7 = *(undefined4 *)local_80;
      *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
      *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
      *(float *)(puVar21 + 0xc) = (float)local_208[0];
      if (((uint)local_c0 & 0xfff) != 5) {
        local_118 = 0;
        local_110 = 0;
        pcVar20 = (char *)cv::String::allocate((String *)&local_118,0x24);
        uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
        uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
        uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
        uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
        *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
        *(undefined8 *)pcVar20 = uVar10;
        *(undefined8 *)(pcVar20 + 8) = uVar11;
        *(undefined8 *)(pcVar20 + 0x10) = uVar12;
        *(undefined8 *)(pcVar20 + 0x18) = uVar13;
        cv::error(-0xd7,(String *)&local_118,
                  "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = unsigned char; CastOp = cv::Cast<float, short int>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
        cv::String::deallocate((String *)&local_118);
      }
      FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
      uVar27 = (long)(puVar21[4] - puVar21[3]) >> 3;
      local_1f8 = 0;
      uVar26 = (long)(puVar21[10] - puVar21[9]) >> 3;
      if (uVar26 < uVar27) {
        std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                  ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar21 + 9),
                   puVar21[10],uVar27 - uVar26);
      }
      else if (uVar27 < uVar26) {
        puVar21[10] = puVar21[9] + (puVar21[4] - puVar21[3]);
      }
      puVar22 = operator_new(0x20);
      *(undefined4 *)(puVar22 + 1) = 1;
      puVar22[2] = puVar21;
      *puVar22 = &PTR_FUN_004f4600;
      piVar1 = (int *)(puVar22 + 1);
      *param_1 = (long)puVar22;
      param_1[1] = (long)puVar21;
      do {
        cVar8 = '\x01';
        bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar16) {
          *piVar1 = *piVar1 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
      do {
        iVar19 = *piVar1;
        cVar8 = '\x01';
        bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar16) {
          *piVar1 = iVar19 + -1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
  }
  else {
    iVar19 = *param_6;
    iVar28 = param_6[1];
    puVar21 = operator_new(0x68);
    *(undefined4 *)(puVar21 + 1) = 0xffffffff;
    *(undefined4 *)((long)puVar21 + 0xc) = 0xffffffff;
    *puVar21 = &PTR_FUN_004f3d00;
    puVar21[3] = 0;
    puVar21[4] = 0;
    puVar21[5] = 0;
    puVar21[6] = 0;
    puVar21[7] = 0;
    puVar21[8] = 0;
    puVar21[9] = 0;
    puVar21[10] = 0;
    puVar21[0xb] = 0;
    *(int *)(puVar21 + 2) = iVar19;
    *(int *)((long)puVar21 + 0x14) = iVar28;
    uVar7 = *(undefined4 *)local_80;
    *(undefined4 *)(puVar21 + 1) = *(undefined4 *)((long)local_80 + 4);
    *(undefined4 *)((long)puVar21 + 0xc) = uVar7;
    *(float *)(puVar21 + 0xc) = (float)local_208[0];
    if (((uint)local_c0 & 0xfff) != 5) {
      local_128 = 0;
      local_120 = 0;
      pcVar20 = (char *)cv::String::allocate((String *)&local_128,0x24);
      uVar13 = s__kernel_type______DataType<KT>___00443558._24_8_;
      uVar12 = s__kernel_type______DataType<KT>___00443558._16_8_;
      uVar11 = s__kernel_type______DataType<KT>___00443558._8_8_;
      uVar10 = s__kernel_type______DataType<KT>___00443558._0_8_;
      *(undefined4 *)(pcVar20 + 0x20) = s__kernel_type______DataType<KT>___00443558._32_4_;
      *(undefined8 *)pcVar20 = uVar10;
      *(undefined8 *)(pcVar20 + 8) = uVar11;
      *(undefined8 *)(pcVar20 + 0x10) = uVar12;
      *(undefined8 *)(pcVar20 + 0x18) = uVar13;
      cv::error(-0xd7,(String *)&local_128,
                "cv::Filter2D<ST, CastOp, VecOp>::Filter2D(const cv::Mat&, cv::Point, double, const CastOp&, const VecOp&) [with ST = unsigned char; CastOp = cv::Cast<float, short unsigned int>; VecOp = cv::FilterNoVec; cv::Point = cv::Point_<int>]"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0xf4a);
      cv::String::deallocate((String *)&local_128);
    }
    FUN_001d7cfc((Mat *)&local_c0,puVar21 + 3,puVar21 + 6);
    FUN_001c66c4(puVar21 + 9,(long)(puVar21[4] - puVar21[3]) >> 3);
    puVar22 = operator_new(0x20);
    *(undefined4 *)(puVar22 + 1) = 1;
    puVar22[2] = puVar21;
    *puVar22 = &PTR_FUN_004f45d0;
    piVar1 = (int *)(puVar22 + 1);
    *param_1 = (long)puVar22;
    param_1[1] = (long)puVar21;
    do {
      cVar8 = '\x01';
      bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar16) {
        *piVar1 = *piVar1 + 1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    do {
      iVar19 = *piVar1;
      cVar8 = '\x01';
      bVar16 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar16) {
        *piVar1 = iVar19 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
  }
  if (iVar19 == 1) {
    FUN_001c0010();
  }
LAB_001d95a8:
  cv::Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return param_1;
}


==================================================================

### FUNC 001da5b0 (1060 bytes) name=FUN_001da5b0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 *
FUN_001da5b0(undefined8 *param_1,undefined8 param_2,uint param_3,uint param_4,_InputArray *param_5,
            undefined8 *param_6,undefined4 param_7,undefined4 param_8,undefined8 param_9)

{
  int *piVar1;
  long *plVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  long lVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined1 uVar9;
  int iVar10;
  undefined8 *puVar11;
  void *pvVar12;
  Mat *pMVar13;
  undefined8 local_108;
  undefined8 local_100;
  long *local_f8 [2];
  long *local_e8;
  undefined8 local_e0;
  long *local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int iStack_bc;
  undefined4 uStack_b8;
  undefined4 uStack_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  ulong local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  iVar10 = cv::_InputArray::kind(param_5);
  if (iVar10 == 0x10000) {
    pMVar13 = *(Mat **)(param_5 + 8);
    local_80 = &uStack_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar13;
    iStack_bc = *(int *)(pMVar13 + 4);
    uStack_b8 = *(undefined4 *)(pMVar13 + 8);
    uStack_b4 = *(undefined4 *)(pMVar13 + 0xc);
    local_b0 = *(undefined8 *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar13 + 0x48);
      local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      iStack_bc = 0;
      cv::Mat::copySize((Mat *)&local_c0,pMVar13);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_5);
  }
  uVar3 = param_3 & 0xfff;
  if ((param_4 >> 3 & 0x1ff) + 1 != (param_3 >> 3 & 0x1ff) + 1) {
    local_100 = 0;
    local_108 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_108,0x19);
    uVar9 = DAT_00443478;
    uVar8 = _LAB_00443468;
    uVar7 = _LAB_00443460;
    puVar11[2] = DAT_00443470;
    *(undefined1 *)(puVar11 + 3) = uVar9;
    *puVar11 = uVar7;
    puVar11[1] = uVar8;
    cv::error(-0xd7,(String *)&local_108,
              "cv::Ptr<cv::FilterEngine> cv::createLinearFilter(int, int, cv::InputArray, cv::Point, double, int, int, const Scalar&)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x11b8);
    cv::String::deallocate((String *)&local_108);
  }
  uStack_58 = CONCAT44(uStack_b4,uStack_b8);
  local_60 = CONCAT44(iStack_bc,local_c0);
  local_18 = &local_10;
  local_50 = local_b0;
  local_20 = &uStack_58;
  local_48 = local_a8;
  uStack_8 = 0;
  local_10 = 0;
  local_40 = local_a0;
  local_38 = local_98;
  local_30 = local_90;
  local_28 = local_88;
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (iStack_bc < 3) {
    local_10 = *local_78;
    uStack_8 = local_78[1];
  }
  else {
    local_60 = (ulong)local_c0;
    cv::Mat::copySize((Mat *)&local_60,(Mat *)&local_c0);
  }
  local_e8 = (long *)*param_6;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = (long *)CONCAT44(local_d8._4_4_,0x1010000);
  local_d0 = (Mat *)&local_60;
  FUN_001d9220(local_f8,param_2,uVar3,param_4 & 0xfff,&local_d8,&local_e8);
  local_e8 = (long *)0x0;
  local_e0 = 0;
  local_d8 = (long *)0x0;
  local_d0 = (Mat *)0x0;
  pvVar12 = operator_new(0x130);
  FUN_001d5aa4(pvVar12,local_f8,&local_e8,&local_d8,uVar3,param_4 & 0xfff,uVar3,param_7,param_8,
               param_9);
  puVar11 = operator_new(0x20);
  puVar11[2] = pvVar12;
  *puVar11 = &PTR_FUN_004f3ca0;
  *(undefined4 *)(puVar11 + 1) = 1;
  *param_1 = puVar11;
  param_1[1] = pvVar12;
  plVar2 = local_d8 + 1;
  if (local_d8 != (long *)0x0) {
    do {
      lVar6 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_d8 + 0x10))(local_d8);
    }
  }
  plVar2 = local_e8 + 1;
  if (local_e8 != (long *)0x0) {
    do {
      lVar6 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_e8 + 0x10))();
    }
  }
  plVar2 = local_f8[0] + 1;
  if (local_f8[0] != (long *)0x0) {
    do {
      lVar6 = *plVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar5) {
        *(int *)plVar2 = (int)lVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_f8[0] + 0x10))();
    }
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  cv::Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  return param_1;
}


==================================================================

### FUNC 001daae0 (2144 bytes) name=filter2D

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::filter2D(cv::_InputArray const&, cv::_OutputArray const&, int, cv::_InputArray const&,
   cv::Point_<int>, double, int) */

void cv::filter2D(double param_1_00,_InputArray *param_1,_InputArray *param_2,uint param_3,
                 _InputArray *param_4,int *param_6,uint param_7)

{
  long *plVar1;
  int *piVar2;
  int iVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  long *plVar7;
  long lVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  int iVar15;
  char *pcVar16;
  _InputArray *p_Var17;
  Mat *pMVar18;
  int iVar19;
  uint uVar20;
  double local_1d8 [2];
  int local_1c8;
  int local_1c4;
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  undefined4 uStack_1ac;
  double *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  int local_198;
  int local_194;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 uStack_178;
  long local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  undefined8 local_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  undefined4 local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  undefined4 local_5c;
  int local_58;
  undefined4 local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_1d8[0] = param_1_00;
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar18 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar18;
    local_11c = *(undefined4 *)(pMVar18 + 4);
    local_118 = *(undefined4 *)(pMVar18 + 8);
    local_114 = *(undefined4 *)(pMVar18 + 0xc);
    local_110 = *(long *)(pMVar18 + 0x10);
    local_108 = *(undefined8 *)(pMVar18 + 0x18);
    local_100 = *(undefined8 *)(pMVar18 + 0x20);
    local_f8 = *(undefined8 *)(pMVar18 + 0x28);
    local_f0 = *(undefined8 *)(pMVar18 + 0x30);
    local_e8 = *(long *)(pMVar18 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar2 = (int *)(local_e8 + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar18 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar18 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar18 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar18);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar15 = _InputArray::kind(param_4);
  if (iVar15 == 0x10000) {
    pMVar18 = *(Mat **)(param_4 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar18;
    local_bc = *(undefined4 *)(pMVar18 + 4);
    local_b8 = *(int *)(pMVar18 + 8);
    local_b4 = *(int *)(pMVar18 + 0xc);
    local_b0 = *(undefined8 *)(pMVar18 + 0x10);
    local_a8 = *(undefined8 *)(pMVar18 + 0x18);
    local_a0 = *(undefined8 *)(pMVar18 + 0x20);
    local_98 = *(undefined8 *)(pMVar18 + 0x28);
    local_90 = *(undefined8 *)(pMVar18 + 0x30);
    local_88 = *(long *)(pMVar18 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar2 = (int *)(local_88 + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar18 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar18 + 0x48);
      local_68 = (*(undefined8 **)(pMVar18 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar18);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  if ((int)param_3 < 0) {
    param_3 = local_120 & 7;
  }
  local_5c = *local_e0;
  local_60 = local_e0[1];
  _OutputArray::create
            ((_OutputArray *)param_2,(Mat *)&local_60,(param_3 & 7) + (local_120 & 0xff8),0xffffffff
             ,0,0);
  iVar15 = _InputArray::kind(param_2);
  if (iVar15 == 0x10000) {
    pMVar18 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar18;
    local_50 = *(long *)(pMVar18 + 0x10);
    local_5c = *(undefined4 *)(pMVar18 + 4);
    local_58 = *(int *)(pMVar18 + 8);
    local_54 = *(undefined4 *)(pMVar18 + 0xc);
    local_48 = *(undefined8 *)(pMVar18 + 0x18);
    local_40 = *(undefined8 *)(pMVar18 + 0x20);
    local_38 = *(undefined8 *)(pMVar18 + 0x28);
    local_30 = *(undefined8 *)(pMVar18 + 0x30);
    local_28 = *(long *)(pMVar18 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar18 + 4) < 3) {
      iVar15 = *param_6;
      local_10 = **(undefined8 **)(pMVar18 + 0x48);
      iVar19 = param_6[1];
      local_8 = (*(undefined8 **)(pMVar18 + 0x48))[1];
      iVar3 = local_80[1];
      iVar4 = *local_80;
      goto joined_r0x001db118;
    }
    local_5c = 0;
    Mat::copySize((Mat *)&local_60,pMVar18);
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar15 = *param_6;
  iVar19 = param_6[1];
  iVar3 = local_80[1];
  iVar4 = *local_80;
joined_r0x001db118:
  if (iVar15 == -1) {
    iVar15 = iVar3 / 2;
  }
  if (iVar19 == -1) {
    iVar19 = iVar4 / 2;
  }
  if ((((iVar15 < iVar3) && (-1 < iVar15)) && (-1 < iVar19)) && (iVar19 < iVar4)) {
    iVar3 = local_b4 * local_b8;
  }
  else {
    local_180 = 0;
    uStack_178 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_180,0x34);
    uVar14 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar13 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar12 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar11 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar10 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar9 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar16 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar16 = uVar9;
    *(undefined8 *)(pcVar16 + 8) = uVar10;
    *(undefined8 *)(pcVar16 + 0x10) = uVar11;
    *(undefined8 *)(pcVar16 + 0x18) = uVar12;
    *(undefined8 *)(pcVar16 + 0x20) = uVar13;
    *(undefined8 *)(pcVar16 + 0x28) = uVar14;
    error(-0xd7,(String *)&local_180,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    String::deallocate((String *)&local_180);
    iVar3 = local_b4 * local_b8;
  }
  if (iVar3 < 0x32) {
    uStack_178 = 0;
    local_180 = 0;
    uStack_168 = 0;
    local_170 = 0;
    local_188 = 0;
    local_184 = 0;
    local_198 = 0x1010000;
    local_1c8 = iVar15;
    local_1c4 = iVar19;
    local_190 = (Mat *)&local_c0;
    FUN_001da5b0(&local_1b0,local_1d8[0],local_120 & 0xfff,local_60 & 0xfff,&local_198,&local_1c8,
                 param_7 & 0xffffffef,0xffffffff,&local_180);
    local_180 = 0;
    uStack_178 = 0xffffffffffffffff;
    local_198 = 0;
    local_194 = 0;
    (**(code **)((long)*local_1a8 + 0x28))
              (local_1a8,(Mat *)&local_120,(Mat *)&local_60,&local_180,&local_198,param_7 >> 4 & 1);
    plVar7 = (long *)CONCAT44(uStack_1ac,local_1b0);
    plVar1 = plVar7 + 1;
    if (plVar7 != (long *)0x0) {
      do {
        lVar8 = *plVar1;
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar6) {
          *(int *)plVar1 = (int)lVar8 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if ((int)lVar8 == 1) {
        (**(code **)(*plVar7 + 0x10))();
      }
    }
  }
  else {
    local_138 = &local_130;
    local_140 = &uStack_178;
    local_170 = 0;
    uStack_168 = 0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    uStack_128 = 0;
    local_130 = 0;
    local_180 = _DAT_001db420;
    uStack_178 = _UNK_001db428;
    if (((local_120 >> 3 & 0x1ff) == 0) || (local_1d8[0] == 0.0)) {
      if (local_110 == local_50) {
        local_194 = local_20[1];
        local_198 = *local_20;
        Mat::create((Mat *)&local_180,2,&local_198,local_60 & 0xfff);
      }
      else {
        Mat::operator=((Mat *)&local_180,(Mat *)&local_60);
      }
      uStack_1ac = *local_e0;
      local_1b0 = local_e0[1];
      local_198 = iVar15;
      local_194 = iVar19;
      FUN_00214600(local_1d8[0],(Mat *)&local_120,(Mat *)&local_c0,(Mat *)&local_180,&local_1b0,
                   (param_3 & 7) + (local_120 & 0xff8),(_OutputArray *)&local_198,param_7);
      if (local_170 != local_50) {
        local_188 = 0;
        local_184 = 0;
        local_198 = 0x2010000;
        local_190 = (Mat *)&local_60;
        Mat::copyTo((Mat *)&local_180,(_OutputArray *)&local_198);
      }
    }
    else {
      uVar20 = local_60 & 7;
      if ((uVar20 - 5 < 2) && (local_110 != local_50)) {
        Mat::operator=((Mat *)&local_180,(Mat *)&local_60);
      }
      else {
        if (uVar20 != 6) {
          uVar20 = 5;
        }
        local_1c4 = local_20[1];
        local_1c8 = *local_20;
        Mat::create((Mat *)&local_180,2,&local_1c8,uVar20 + (local_60 & 0xff8));
      }
      uStack_1ac = *local_e0;
      local_1b0 = local_e0[1];
      local_198 = iVar15;
      local_194 = iVar19;
      FUN_00214600(0,(Mat *)&local_120,(Mat *)&local_c0,(Mat *)&local_180,(_InputArray *)&local_1b0,
                   uVar20 + (local_120 & 0xff8),(_OutputArray *)&local_198,param_7);
      local_1a0 = 1;
      local_19c = 1;
      local_1b8 = 0;
      local_1b4 = 0;
      local_1c8 = 0x1010000;
      local_188 = 0;
      local_184 = 0;
      local_198 = 0x2010000;
      local_1b0 = 0xc1020006;
      local_1c0 = (Mat *)&local_180;
      local_1a8 = local_1d8;
      local_190 = (Mat *)&local_180;
      p_Var17 = (_InputArray *)noArray();
      add((_InputArray *)&local_1c8,(_InputArray *)&local_1b0,(_OutputArray *)&local_198,p_Var17,-1)
      ;
      if (local_170 != local_50) {
        local_188 = 0;
        local_184 = 0;
        local_198 = 0x2010000;
        local_190 = (Mat *)&local_60;
        Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_198,local_60 & 0xfff,1.0,0.0);
      }
    }
    Mat::release((Mat *)&local_180);
    if (local_138 != &local_130) {
      fastFree(local_138);
    }
  }
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&local_120);
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 001db430 (536 bytes) name=cvFilter2D

void cvFilter2D(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
               AutoBuffer *param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  undefined4 local_170;
  undefined4 local_16c;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120 [16];
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0 [16];
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [72];
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  if (((local_e0[1] != local_80[1]) || (*local_e0 != *local_80)) ||
     ((local_120[0] >> 3 & 0x1ff) + 1 != (local_c0[0] >> 3 & 0x1ff) + 1)) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_138,0x3c);
    uVar7 = s_src_size______dst_size______src__0043e4a0._56_4_;
    uVar6 = s_src_size______dst_size______src__0043e4a0._40_8_;
    uVar5 = s_src_size______dst_size______src__0043e4a0._32_8_;
    uVar4 = s_src_size______dst_size______src__0043e4a0._24_8_;
    uVar3 = s_src_size______dst_size______src__0043e4a0._16_8_;
    uVar2 = s_src_size______dst_size______src__0043e4a0._8_8_;
    uVar1 = s_src_size______dst_size______src__0043e4a0._0_8_;
    *(undefined8 *)(pcVar8 + 0x30) = s_src_size______dst_size______src__0043e4a0._48_8_;
    *(undefined4 *)(pcVar8 + 0x38) = uVar7;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    *(undefined8 *)(pcVar8 + 0x10) = uVar3;
    *(undefined8 *)(pcVar8 + 0x18) = uVar4;
    *(undefined8 *)(pcVar8 + 0x20) = uVar5;
    *(undefined8 *)(pcVar8 + 0x28) = uVar6;
    cv::error(-0xd7,(String *)&local_138,
              "void cvFilter2D(const CvArr*, CvArr*, const CvMat*, CvPoint)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filter.cpp",0x1281);
    cv::String::deallocate((String *)&local_138);
  }
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x1010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x2010000;
  local_170 = (undefined4)param_4;
  local_16c = (undefined4)((ulong)param_4 >> 0x20);
  local_160 = (Mat *)local_120;
  local_148 = (Mat *)local_c0;
  local_130 = aMStack_60;
  cv::filter2D(0,local_168,local_150,local_c0[0] & 7,&local_138,&local_170,1);
  cv::Mat::release(aMStack_60);
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  cv::Mat::release((Mat *)local_c0);
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  cv::Mat::release((Mat *)local_120);
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 001db6cc (4 bytes) name=FUN_001db6cc

void FUN_001db6cc(void)

{
  return;
}


==================================================================

### FUNC 001db6d0 (4 bytes) name=FUN_001db6d0

void FUN_001db6d0(void)

{
  return;
}


==================================================================

### FUNC 001db6d4 (4 bytes) name=FUN_001db6d4

void FUN_001db6d4(void)

{
  return;
}


==================================================================

### FUNC 001db6d8 (4 bytes) name=FUN_001db6d8

void FUN_001db6d8(void)

{
  return;
}


==================================================================

### FUNC 001db6dc (4 bytes) name=FUN_001db6dc

void FUN_001db6dc(void)

{
  return;
}


==================================================================

### FUNC 001db6e0 (4 bytes) name=FUN_001db6e0

void FUN_001db6e0(void)

{
  return;
}


==================================================================

### FUNC 001db6e4 (4 bytes) name=FUN_001db6e4

void FUN_001db6e4(void)

{
  return;
}


==================================================================

### FUNC 001db6e8 (4 bytes) name=FUN_001db6e8

void FUN_001db6e8(void)

{
  return;
}


==================================================================

### FUNC 001db6ec (4 bytes) name=FUN_001db6ec

void FUN_001db6ec(void)

{
  return;
}


==================================================================

### FUNC 001db6f0 (4 bytes) name=FUN_001db6f0

void FUN_001db6f0(void)

{
  return;
}


==================================================================

### FUNC 001db6f4 (4 bytes) name=FUN_001db6f4

void FUN_001db6f4(void)

{
  return;
}


==================================================================

### FUNC 001db6f8 (4 bytes) name=FUN_001db6f8

void FUN_001db6f8(void)

{
  return;
}


==================================================================

### FUNC 001db6fc (4 bytes) name=FUN_001db6fc

void FUN_001db6fc(void)

{
  return;
}


==================================================================

### FUNC 001db700 (4 bytes) name=FUN_001db700

void FUN_001db700(void)

{
  return;
}


==================================================================

### FUNC 001db704 (4 bytes) name=FUN_001db704

void FUN_001db704(void)

{
  return;
}


==================================================================

### FUNC 001db708 (4 bytes) name=FUN_001db708

void FUN_001db708(void)

{
  return;
}


==================================================================

### FUNC 001db70c (4 bytes) name=FUN_001db70c

void FUN_001db70c(void)

{
  return;
}


==================================================================

### FUNC 001db710 (4 bytes) name=FUN_001db710

void FUN_001db710(void)

{
  return;
}


==================================================================

### FUNC 001db714 (4 bytes) name=FUN_001db714

void FUN_001db714(void)

{
  return;
}


==================================================================

### FUNC 001db718 (4 bytes) name=FUN_001db718

void FUN_001db718(void)

{
  return;
}


==================================================================

### FUNC 001db71c (4 bytes) name=FUN_001db71c

void FUN_001db71c(void)

{
  return;
}


==================================================================

### FUNC 001db720 (4 bytes) name=FUN_001db720

void FUN_001db720(void)

{
  return;
}


==================================================================

### FUNC 001db724 (4 bytes) name=FUN_001db724

void FUN_001db724(void)

{
  return;
}


==================================================================

### FUNC 001db728 (4 bytes) name=FUN_001db728

void FUN_001db728(void)

{
  return;
}


==================================================================

### FUNC 001db72c (4 bytes) name=FUN_001db72c

void FUN_001db72c(void)

{
  return;
}


==================================================================

### FUNC 001db730 (4 bytes) name=FUN_001db730

void FUN_001db730(void)

{
  return;
}


==================================================================

### FUNC 001db734 (4 bytes) name=FUN_001db734

void FUN_001db734(void)

{
  return;
}


==================================================================

### FUNC 001db738 (4 bytes) name=FUN_001db738

void FUN_001db738(void)

{
  return;
}


==================================================================

### FUNC 001db73c (4 bytes) name=FUN_001db73c

void FUN_001db73c(void)

{
  return;
}


==================================================================

### FUNC 001db740 (4 bytes) name=FUN_001db740

void FUN_001db740(void)

{
  return;
}


==================================================================

### FUNC 001db744 (60 bytes) name=FUN_001db744

void FUN_001db744(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db780 (60 bytes) name=FUN_001db780

void FUN_001db780(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db7bc (60 bytes) name=FUN_001db7bc

void FUN_001db7bc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db7f8 (60 bytes) name=FUN_001db7f8

void FUN_001db7f8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db834 (60 bytes) name=FUN_001db834

void FUN_001db834(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db870 (60 bytes) name=FUN_001db870

void FUN_001db870(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db8ac (60 bytes) name=FUN_001db8ac

void FUN_001db8ac(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db8e8 (60 bytes) name=FUN_001db8e8

void FUN_001db8e8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db924 (60 bytes) name=FUN_001db924

void FUN_001db924(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db960 (60 bytes) name=FUN_001db960

void FUN_001db960(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db99c (60 bytes) name=FUN_001db99c

void FUN_001db99c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001db9d8 (60 bytes) name=FUN_001db9d8

void FUN_001db9d8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dba14 (60 bytes) name=FUN_001dba14

void FUN_001dba14(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dba50 (60 bytes) name=FUN_001dba50

void FUN_001dba50(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dba8c (60 bytes) name=FUN_001dba8c

void FUN_001dba8c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbac8 (60 bytes) name=FUN_001dbac8

void FUN_001dbac8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbb04 (60 bytes) name=FUN_001dbb04

void FUN_001dbb04(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbb40 (60 bytes) name=FUN_001dbb40

void FUN_001dbb40(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbb7c (60 bytes) name=FUN_001dbb7c

void FUN_001dbb7c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbbb8 (60 bytes) name=FUN_001dbbb8

void FUN_001dbbb8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbbf4 (60 bytes) name=FUN_001dbbf4

void FUN_001dbbf4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbc30 (60 bytes) name=FUN_001dbc30

void FUN_001dbc30(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbc6c (60 bytes) name=FUN_001dbc6c

void FUN_001dbc6c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbca8 (60 bytes) name=FUN_001dbca8

void FUN_001dbca8(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbce4 (60 bytes) name=FUN_001dbce4

void FUN_001dbce4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbd20 (60 bytes) name=FUN_001dbd20

void FUN_001dbd20(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbd5c (60 bytes) name=FUN_001dbd5c

void FUN_001dbd5c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbd98 (60 bytes) name=FUN_001dbd98

void FUN_001dbd98(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbdd4 (60 bytes) name=FUN_001dbdd4

void FUN_001dbdd4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbe10 (60 bytes) name=FUN_001dbe10

void FUN_001dbe10(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001dbe4c (528 bytes) name=FUN_001dbe4c

void FUN_001dbe4c(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  long lVar6;
  long lVar7;
  double *pdVar8;
  double *pdVar9;
  long *plVar10;
  long lVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  plVar10 = *(long **)(param_1 + 0x30);
  iVar3 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    uVar2 = param_6 - 4U >> 2;
    iVar1 = (uVar2 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar4 = 0;
      if (0 < iVar3) {
        do {
          *(long *)((long)plVar10 + lVar4) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar4 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar4)) * 8;
          lVar4 = lVar4 + 8;
        } while (lVar4 != ((ulong)(iVar3 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        pdVar8 = (double *)*plVar10;
        lVar4 = 0;
        pdVar9 = param_3;
        do {
          dVar18 = *pdVar8;
          dVar16 = pdVar8[1];
          dVar14 = pdVar8[2];
          dVar12 = pdVar8[3];
          if (1 < iVar3) {
            plVar5 = plVar10 + 1;
            dVar13 = dVar12;
            dVar15 = dVar14;
            dVar17 = dVar16;
            dVar19 = dVar18;
            do {
              lVar6 = *plVar5;
              plVar5 = plVar5 + 1;
              lVar7 = lVar6 + lVar4;
              dVar18 = *(double *)(lVar6 + lVar4);
              if (dVar18 <= dVar19) {
                dVar18 = dVar19;
              }
              dVar16 = *(double *)(lVar7 + 8);
              if (*(double *)(lVar7 + 8) <= dVar17) {
                dVar16 = dVar17;
              }
              dVar14 = *(double *)(lVar7 + 0x10);
              if (*(double *)(lVar7 + 0x10) <= dVar15) {
                dVar14 = dVar15;
              }
              dVar12 = *(double *)(lVar7 + 0x18);
              if (*(double *)(lVar7 + 0x18) <= dVar13) {
                dVar12 = dVar13;
              }
              dVar13 = dVar12;
              dVar15 = dVar14;
              dVar17 = dVar16;
              dVar19 = dVar18;
            } while (plVar5 != plVar10 + (ulong)(iVar3 - 2) + 2);
          }
          lVar4 = lVar4 + 0x20;
          pdVar8 = pdVar8 + 4;
          pdVar9[1] = dVar16;
          *pdVar9 = dVar18;
          pdVar9[3] = dVar12;
          pdVar9[2] = dVar14;
          pdVar9 = pdVar9 + 4;
        } while (lVar4 != ((ulong)uVar2 + 1) * 0x20);
      }
      if (iVar1 < param_6) {
        lVar7 = *plVar10;
        lVar4 = (long)iVar1 << 3;
        do {
          dVar12 = *(double *)(lVar7 + lVar4);
          if (1 < iVar3) {
            plVar5 = plVar10 + 1;
            dVar16 = dVar12;
            do {
              lVar6 = *plVar5;
              plVar5 = plVar5 + 1;
              dVar12 = *(double *)(lVar6 + lVar4);
              if (*(double *)(lVar6 + lVar4) <= dVar16) {
                dVar12 = dVar16;
              }
              dVar16 = dVar12;
            } while (plVar5 != plVar10 + (ulong)(iVar3 - 2) + 2);
          }
          *(double *)((long)param_3 + lVar4) = dVar12;
          lVar4 = lVar4 + 8;
        } while (lVar4 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dc05c (500 bytes) name=FUN_001dc05c

void FUN_001dc05c(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  long lVar7;
  long lVar8;
  float *pfVar9;
  long *plVar10;
  long lVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  plVar10 = *(long **)(param_1 + 0x30);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)((long)plVar10 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar5)) * 4;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        pfVar9 = (float *)*plVar10;
        lVar5 = 0;
        do {
          fVar16 = *pfVar9;
          fVar15 = pfVar9[1];
          fVar13 = pfVar9[2];
          fVar12 = pfVar9[3];
          if (1 < iVar4) {
            plVar6 = plVar10 + 1;
            fVar14 = fVar13;
            fVar17 = fVar16;
            do {
              lVar7 = *plVar6;
              plVar6 = plVar6 + 1;
              lVar8 = lVar7 + lVar5;
              fVar16 = *(float *)(lVar7 + lVar5);
              if (fVar16 <= fVar17) {
                fVar16 = fVar17;
              }
              fVar13 = *(float *)(lVar8 + 4);
              if (*(float *)(lVar8 + 4) <= fVar15) {
                fVar13 = fVar15;
              }
              fVar15 = fVar13;
              fVar13 = *(float *)(lVar8 + 8);
              if (*(float *)(lVar8 + 8) <= fVar14) {
                fVar13 = fVar14;
              }
              fVar14 = *(float *)(lVar8 + 0xc);
              if (*(float *)(lVar8 + 0xc) <= fVar12) {
                fVar14 = fVar12;
              }
              fVar12 = fVar14;
              fVar14 = fVar13;
              fVar17 = fVar16;
            } while (plVar6 != plVar10 + (ulong)(iVar4 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar5);
          lVar5 = lVar5 + 0x10;
          pfVar9 = pfVar9 + 4;
          puVar1[1] = CONCAT44(fVar12,fVar13);
          *puVar1 = CONCAT44(fVar15,fVar16);
        } while (lVar5 != ((ulong)uVar3 + 1) * 0x10);
      }
      if (iVar2 < param_6) {
        lVar8 = *plVar10;
        lVar5 = (long)iVar2 << 2;
        do {
          fVar13 = *(float *)(lVar8 + lVar5);
          if (1 < iVar4) {
            plVar6 = plVar10 + 1;
            do {
              lVar7 = *plVar6;
              plVar6 = plVar6 + 1;
              fVar16 = *(float *)(lVar7 + lVar5);
              if (*(float *)(lVar7 + lVar5) <= fVar13) {
                fVar16 = fVar13;
              }
              fVar13 = fVar16;
            } while (plVar6 != plVar10 + (ulong)(iVar4 - 2) + 2);
          }
          *(float *)(param_3 + lVar5) = fVar13;
          lVar5 = lVar5 + 4;
        } while (lVar5 != ((long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 4);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dc250 (492 bytes) name=FUN_001dc250

void FUN_001dc250(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  short sVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  short sVar6;
  long lVar7;
  short sVar8;
  long *plVar9;
  short sVar10;
  short sVar11;
  long lVar12;
  long *plVar13;
  short *psVar14;
  long *plVar15;
  long lVar16;
  
  param_6 = param_6 * param_7;
  lVar16 = *(long *)(param_1 + 0x18);
  plVar15 = *(long **)(param_1 + 0x30);
  iVar5 = (int)(*(long *)(param_1 + 0x20) - lVar16 >> 3);
  if (0 < param_5) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      lVar7 = 0;
      if (0 < iVar5) {
        do {
          *(long *)((long)plVar15 + lVar7) =
               *(long *)(param_2 + (long)*(int *)(lVar16 + lVar7 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar16 + lVar7)) * 2;
          lVar7 = lVar7 + 8;
        } while (lVar7 != ((ulong)(iVar5 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        psVar14 = (short *)*plVar15;
        lVar7 = 0;
        do {
          sVar11 = *psVar14;
          sVar10 = psVar14[1];
          sVar8 = psVar14[2];
          sVar6 = psVar14[3];
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              lVar12 = *plVar9 + lVar7;
              sVar2 = *(short *)(*plVar9 + lVar7);
              if (sVar2 <= sVar11) {
                sVar2 = sVar11;
              }
              sVar11 = sVar2;
              sVar2 = *(short *)(lVar12 + 2);
              if (*(short *)(lVar12 + 2) <= sVar10) {
                sVar2 = sVar10;
              }
              sVar10 = sVar2;
              sVar2 = *(short *)(lVar12 + 4);
              if (*(short *)(lVar12 + 4) <= sVar8) {
                sVar2 = sVar8;
              }
              sVar8 = sVar2;
              sVar2 = *(short *)(lVar12 + 6);
              if (*(short *)(lVar12 + 6) <= sVar6) {
                sVar2 = sVar6;
              }
              sVar6 = sVar2;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar7);
          lVar7 = lVar7 + 8;
          psVar14 = psVar14 + 4;
          *puVar1 = CONCAT26(sVar6,CONCAT24(sVar8,CONCAT22(sVar10,sVar11)));
        } while (lVar7 != ((ulong)uVar4 + 1) * 8);
      }
      if (iVar3 < param_6) {
        lVar12 = *plVar15;
        lVar7 = (long)iVar3 << 1;
        do {
          sVar11 = *(short *)(lVar12 + lVar7);
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              sVar10 = *(short *)(*plVar9 + lVar7);
              if (*(short *)(*plVar9 + lVar7) <= sVar11) {
                sVar10 = sVar11;
              }
              sVar11 = sVar10;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          *(short *)(param_3 + lVar7) = sVar11;
          lVar7 = lVar7 + 2;
        } while (lVar7 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dc43c (492 bytes) name=FUN_001dc43c

void FUN_001dc43c(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  ushort uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ushort uVar6;
  long lVar7;
  ushort uVar8;
  long *plVar9;
  ushort uVar10;
  ushort uVar11;
  long lVar12;
  long *plVar13;
  ushort *puVar14;
  long *plVar15;
  long lVar16;
  
  param_6 = param_6 * param_7;
  lVar16 = *(long *)(param_1 + 0x18);
  plVar15 = *(long **)(param_1 + 0x30);
  iVar5 = (int)(*(long *)(param_1 + 0x20) - lVar16 >> 3);
  if (0 < param_5) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      lVar7 = 0;
      if (0 < iVar5) {
        do {
          *(long *)((long)plVar15 + lVar7) =
               *(long *)(param_2 + (long)*(int *)(lVar16 + lVar7 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar16 + lVar7)) * 2;
          lVar7 = lVar7 + 8;
        } while (lVar7 != ((ulong)(iVar5 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        puVar14 = (ushort *)*plVar15;
        lVar7 = 0;
        do {
          uVar11 = *puVar14;
          uVar10 = puVar14[1];
          uVar8 = puVar14[2];
          uVar6 = puVar14[3];
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              lVar12 = *plVar9 + lVar7;
              uVar2 = *(ushort *)(*plVar9 + lVar7);
              if (uVar2 <= uVar11) {
                uVar2 = uVar11;
              }
              uVar11 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 2);
              if (*(ushort *)(lVar12 + 2) <= uVar10) {
                uVar2 = uVar10;
              }
              uVar10 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 4);
              if (*(ushort *)(lVar12 + 4) <= uVar8) {
                uVar2 = uVar8;
              }
              uVar8 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 6);
              if (*(ushort *)(lVar12 + 6) <= uVar6) {
                uVar2 = uVar6;
              }
              uVar6 = uVar2;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar7);
          lVar7 = lVar7 + 8;
          puVar14 = puVar14 + 4;
          *puVar1 = CONCAT26(uVar6,CONCAT24(uVar8,CONCAT22(uVar10,uVar11)));
        } while (lVar7 != ((ulong)uVar4 + 1) * 8);
      }
      if (iVar3 < param_6) {
        lVar12 = *plVar15;
        lVar7 = (long)iVar3 << 1;
        do {
          uVar11 = *(ushort *)(lVar12 + lVar7);
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              uVar10 = *(ushort *)(*plVar9 + lVar7);
              if (*(ushort *)(*plVar9 + lVar7) <= uVar11) {
                uVar10 = uVar11;
              }
              uVar11 = uVar10;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          *(ushort *)(param_3 + lVar7) = uVar11;
          lVar7 = lVar7 + 2;
        } while (lVar7 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dc628 (520 bytes) name=FUN_001dc628

void FUN_001dc628(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  undefined1 *puVar6;
  long *plVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  long *plVar12;
  long *plVar13;
  long lVar14;
  
  param_6 = param_6 * param_7;
  lVar14 = *(long *)(param_1 + 0x18);
  plVar13 = *(long **)(param_1 + 0x30);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar14 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)((long)plVar13 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar14 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar14 + lVar5));
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar5 = 0;
        puVar6 = param_3;
        do {
          lVar2 = *plVar13 + lVar5;
          uVar11 = (uint)*(byte *)(*plVar13 + lVar5);
          uVar10 = (uint)*(byte *)(lVar2 + 1);
          uVar9 = (uint)*(byte *)(lVar2 + 2);
          uVar8 = (uint)*(byte *)(lVar2 + 3);
          if (1 < iVar4) {
            plVar7 = plVar13 + 1;
            do {
              plVar12 = plVar7 + 1;
              lVar2 = *plVar7 + lVar5;
              uVar11 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(*plVar7 + lVar5) - uVar11) + 0x100)]
                       + uVar11 & 0xff;
              uVar10 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar2 + 1) - uVar10) + 0x100)] +
                       uVar10 & 0xff;
              uVar9 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar2 + 2) - uVar9) + 0x100)] + uVar9
                      & 0xff;
              uVar8 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar2 + 3) - uVar8) + 0x100)] + uVar8
                      & 0xff;
              plVar7 = plVar12;
            } while (plVar12 != plVar13 + (ulong)(iVar4 - 2) + 2);
          }
          *puVar6 = (char)uVar11;
          puVar6[1] = (char)uVar10;
          lVar5 = lVar5 + 4;
          puVar6[2] = (char)uVar9;
          puVar6[3] = (char)uVar8;
          puVar6 = puVar6 + 4;
        } while ((int)lVar5 < iVar3);
      }
      lVar5 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          uVar8 = (uint)*(byte *)(*plVar13 + lVar5);
          if (1 < iVar4) {
            plVar7 = plVar13 + 1;
            do {
              plVar12 = plVar7 + 1;
              uVar8 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(*plVar7 + lVar5) - uVar8) + 0x100)] +
                      uVar8 & 0xff;
              plVar7 = plVar12;
            } while (plVar12 != plVar13 + (ulong)(iVar4 - 2) + 2);
          }
          param_3[lVar5] = (char)uVar8;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dc830 (528 bytes) name=FUN_001dc830

void FUN_001dc830(long param_1,long param_2,double *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  long lVar6;
  long lVar7;
  double *pdVar8;
  double *pdVar9;
  long *plVar10;
  long lVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  plVar10 = *(long **)(param_1 + 0x30);
  iVar3 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    uVar2 = param_6 - 4U >> 2;
    iVar1 = (uVar2 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar4 = 0;
      if (0 < iVar3) {
        do {
          *(long *)((long)plVar10 + lVar4) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar4 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar4)) * 8;
          lVar4 = lVar4 + 8;
        } while (lVar4 != ((ulong)(iVar3 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        pdVar8 = (double *)*plVar10;
        lVar4 = 0;
        pdVar9 = param_3;
        do {
          dVar18 = *pdVar8;
          dVar16 = pdVar8[1];
          dVar14 = pdVar8[2];
          dVar12 = pdVar8[3];
          if (1 < iVar3) {
            plVar5 = plVar10 + 1;
            dVar13 = dVar12;
            dVar15 = dVar14;
            dVar17 = dVar16;
            dVar19 = dVar18;
            do {
              lVar6 = *plVar5;
              plVar5 = plVar5 + 1;
              lVar7 = lVar6 + lVar4;
              dVar18 = *(double *)(lVar6 + lVar4);
              if (dVar19 <= dVar18) {
                dVar18 = dVar19;
              }
              dVar16 = *(double *)(lVar7 + 8);
              if (dVar17 <= *(double *)(lVar7 + 8)) {
                dVar16 = dVar17;
              }
              dVar14 = *(double *)(lVar7 + 0x10);
              if (dVar15 <= *(double *)(lVar7 + 0x10)) {
                dVar14 = dVar15;
              }
              dVar12 = *(double *)(lVar7 + 0x18);
              if (dVar13 <= *(double *)(lVar7 + 0x18)) {
                dVar12 = dVar13;
              }
              dVar13 = dVar12;
              dVar15 = dVar14;
              dVar17 = dVar16;
              dVar19 = dVar18;
            } while (plVar5 != plVar10 + (ulong)(iVar3 - 2) + 2);
          }
          lVar4 = lVar4 + 0x20;
          pdVar8 = pdVar8 + 4;
          pdVar9[1] = dVar16;
          *pdVar9 = dVar18;
          pdVar9[3] = dVar12;
          pdVar9[2] = dVar14;
          pdVar9 = pdVar9 + 4;
        } while (lVar4 != ((ulong)uVar2 + 1) * 0x20);
      }
      if (iVar1 < param_6) {
        lVar7 = *plVar10;
        lVar4 = (long)iVar1 << 3;
        do {
          dVar12 = *(double *)(lVar7 + lVar4);
          if (1 < iVar3) {
            plVar5 = plVar10 + 1;
            dVar16 = dVar12;
            do {
              lVar6 = *plVar5;
              plVar5 = plVar5 + 1;
              dVar12 = *(double *)(lVar6 + lVar4);
              if (dVar16 <= *(double *)(lVar6 + lVar4)) {
                dVar12 = dVar16;
              }
              dVar16 = dVar12;
            } while (plVar5 != plVar10 + (ulong)(iVar3 - 2) + 2);
          }
          *(double *)((long)param_3 + lVar4) = dVar12;
          lVar4 = lVar4 + 8;
        } while (lVar4 != ((long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1)) * 8);
      }
      param_5 = param_5 + -1;
      param_3 = (double *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dca40 (500 bytes) name=FUN_001dca40

void FUN_001dca40(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  long lVar7;
  long lVar8;
  float *pfVar9;
  long *plVar10;
  long lVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  
  param_6 = param_6 * param_7;
  lVar11 = *(long *)(param_1 + 0x18);
  plVar10 = *(long **)(param_1 + 0x30);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar11 >> 3);
  if (0 < param_5) {
    uVar3 = param_6 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar2 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)((long)plVar10 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar11 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar11 + lVar5)) * 4;
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        pfVar9 = (float *)*plVar10;
        lVar5 = 0;
        do {
          fVar16 = *pfVar9;
          fVar15 = pfVar9[1];
          fVar13 = pfVar9[2];
          fVar12 = pfVar9[3];
          if (1 < iVar4) {
            plVar6 = plVar10 + 1;
            fVar14 = fVar13;
            fVar17 = fVar16;
            do {
              lVar7 = *plVar6;
              plVar6 = plVar6 + 1;
              lVar8 = lVar7 + lVar5;
              fVar16 = *(float *)(lVar7 + lVar5);
              if (fVar17 <= fVar16) {
                fVar16 = fVar17;
              }
              fVar13 = *(float *)(lVar8 + 4);
              if (fVar15 <= *(float *)(lVar8 + 4)) {
                fVar13 = fVar15;
              }
              fVar15 = fVar13;
              fVar13 = *(float *)(lVar8 + 8);
              if (fVar14 <= *(float *)(lVar8 + 8)) {
                fVar13 = fVar14;
              }
              fVar14 = *(float *)(lVar8 + 0xc);
              if (fVar12 <= *(float *)(lVar8 + 0xc)) {
                fVar14 = fVar12;
              }
              fVar12 = fVar14;
              fVar14 = fVar13;
              fVar17 = fVar16;
            } while (plVar6 != plVar10 + (ulong)(iVar4 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar5);
          lVar5 = lVar5 + 0x10;
          pfVar9 = pfVar9 + 4;
          puVar1[1] = CONCAT44(fVar12,fVar13);
          *puVar1 = CONCAT44(fVar15,fVar16);
        } while (lVar5 != ((ulong)uVar3 + 1) * 0x10);
      }
      if (iVar2 < param_6) {
        lVar8 = *plVar10;
        lVar5 = (long)iVar2 << 2;
        do {
          fVar13 = *(float *)(lVar8 + lVar5);
          if (1 < iVar4) {
            plVar6 = plVar10 + 1;
            do {
              lVar7 = *plVar6;
              plVar6 = plVar6 + 1;
              fVar16 = *(float *)(lVar7 + lVar5);
              if (fVar13 <= *(float *)(lVar7 + lVar5)) {
                fVar16 = fVar13;
              }
              fVar13 = fVar16;
            } while (plVar6 != plVar10 + (ulong)(iVar4 - 2) + 2);
          }
          *(float *)(param_3 + lVar5) = fVar13;
          lVar5 = lVar5 + 4;
        } while (lVar5 != ((long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2)) * 4);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dcc34 (492 bytes) name=FUN_001dcc34

void FUN_001dcc34(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  short sVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  short sVar6;
  long lVar7;
  short sVar8;
  long *plVar9;
  short sVar10;
  short sVar11;
  long lVar12;
  long *plVar13;
  short *psVar14;
  long *plVar15;
  long lVar16;
  
  param_6 = param_6 * param_7;
  lVar16 = *(long *)(param_1 + 0x18);
  plVar15 = *(long **)(param_1 + 0x30);
  iVar5 = (int)(*(long *)(param_1 + 0x20) - lVar16 >> 3);
  if (0 < param_5) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      lVar7 = 0;
      if (0 < iVar5) {
        do {
          *(long *)((long)plVar15 + lVar7) =
               *(long *)(param_2 + (long)*(int *)(lVar16 + lVar7 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar16 + lVar7)) * 2;
          lVar7 = lVar7 + 8;
        } while (lVar7 != ((ulong)(iVar5 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        psVar14 = (short *)*plVar15;
        lVar7 = 0;
        do {
          sVar11 = *psVar14;
          sVar10 = psVar14[1];
          sVar8 = psVar14[2];
          sVar6 = psVar14[3];
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              lVar12 = *plVar9 + lVar7;
              sVar2 = *(short *)(*plVar9 + lVar7);
              if (sVar11 <= sVar2) {
                sVar2 = sVar11;
              }
              sVar11 = sVar2;
              sVar2 = *(short *)(lVar12 + 2);
              if (sVar10 <= *(short *)(lVar12 + 2)) {
                sVar2 = sVar10;
              }
              sVar10 = sVar2;
              sVar2 = *(short *)(lVar12 + 4);
              if (sVar8 <= *(short *)(lVar12 + 4)) {
                sVar2 = sVar8;
              }
              sVar8 = sVar2;
              sVar2 = *(short *)(lVar12 + 6);
              if (sVar6 <= *(short *)(lVar12 + 6)) {
                sVar2 = sVar6;
              }
              sVar6 = sVar2;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar7);
          lVar7 = lVar7 + 8;
          psVar14 = psVar14 + 4;
          *puVar1 = CONCAT26(sVar6,CONCAT24(sVar8,CONCAT22(sVar10,sVar11)));
        } while (lVar7 != ((ulong)uVar4 + 1) * 8);
      }
      if (iVar3 < param_6) {
        lVar12 = *plVar15;
        lVar7 = (long)iVar3 << 1;
        do {
          sVar11 = *(short *)(lVar12 + lVar7);
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              sVar10 = *(short *)(*plVar9 + lVar7);
              if (sVar11 <= *(short *)(*plVar9 + lVar7)) {
                sVar10 = sVar11;
              }
              sVar11 = sVar10;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          *(short *)(param_3 + lVar7) = sVar11;
          lVar7 = lVar7 + 2;
        } while (lVar7 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dce20 (492 bytes) name=FUN_001dce20

void FUN_001dce20(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  undefined8 *puVar1;
  ushort uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ushort uVar6;
  long lVar7;
  ushort uVar8;
  long *plVar9;
  ushort uVar10;
  ushort uVar11;
  long lVar12;
  long *plVar13;
  ushort *puVar14;
  long *plVar15;
  long lVar16;
  
  param_6 = param_6 * param_7;
  lVar16 = *(long *)(param_1 + 0x18);
  plVar15 = *(long **)(param_1 + 0x30);
  iVar5 = (int)(*(long *)(param_1 + 0x20) - lVar16 >> 3);
  if (0 < param_5) {
    uVar4 = param_6 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      lVar7 = 0;
      if (0 < iVar5) {
        do {
          *(long *)((long)plVar15 + lVar7) =
               *(long *)(param_2 + (long)*(int *)(lVar16 + lVar7 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar16 + lVar7)) * 2;
          lVar7 = lVar7 + 8;
        } while (lVar7 != ((ulong)(iVar5 - 1) + 1) * 8);
      }
      if (0 < param_6 + -3) {
        puVar14 = (ushort *)*plVar15;
        lVar7 = 0;
        do {
          uVar11 = *puVar14;
          uVar10 = puVar14[1];
          uVar8 = puVar14[2];
          uVar6 = puVar14[3];
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              lVar12 = *plVar9 + lVar7;
              uVar2 = *(ushort *)(*plVar9 + lVar7);
              if (uVar11 <= uVar2) {
                uVar2 = uVar11;
              }
              uVar11 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 2);
              if (uVar10 <= *(ushort *)(lVar12 + 2)) {
                uVar2 = uVar10;
              }
              uVar10 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 4);
              if (uVar8 <= *(ushort *)(lVar12 + 4)) {
                uVar2 = uVar8;
              }
              uVar8 = uVar2;
              uVar2 = *(ushort *)(lVar12 + 6);
              if (uVar6 <= *(ushort *)(lVar12 + 6)) {
                uVar2 = uVar6;
              }
              uVar6 = uVar2;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          puVar1 = (undefined8 *)(param_3 + lVar7);
          lVar7 = lVar7 + 8;
          puVar14 = puVar14 + 4;
          *puVar1 = CONCAT26(uVar6,CONCAT24(uVar8,CONCAT22(uVar10,uVar11)));
        } while (lVar7 != ((ulong)uVar4 + 1) * 8);
      }
      if (iVar3 < param_6) {
        lVar12 = *plVar15;
        lVar7 = (long)iVar3 << 1;
        do {
          uVar11 = *(ushort *)(lVar12 + lVar7);
          if (1 < iVar5) {
            plVar9 = plVar15 + 1;
            do {
              plVar13 = plVar9 + 1;
              uVar10 = *(ushort *)(*plVar9 + lVar7);
              if (uVar11 <= *(ushort *)(*plVar9 + lVar7)) {
                uVar10 = uVar11;
              }
              uVar11 = uVar10;
              plVar9 = plVar13;
            } while (plVar13 != plVar15 + (ulong)(iVar5 - 2) + 2);
          }
          *(ushort *)(param_3 + lVar7) = uVar11;
          lVar7 = lVar7 + 2;
        } while (lVar7 != ((long)iVar3 + 1 + (ulong)(uint)((param_6 + -1) - iVar3)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dd00c (520 bytes) name=FUN_001dd00c

void FUN_001dd00c(long param_1,long param_2,undefined1 *param_3,int param_4,int param_5,int param_6,
                 int param_7)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  undefined1 *puVar6;
  long *plVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  long *plVar12;
  long *plVar13;
  long lVar14;
  
  param_6 = param_6 * param_7;
  lVar14 = *(long *)(param_1 + 0x18);
  plVar13 = *(long **)(param_1 + 0x30);
  iVar4 = (int)(*(long *)(param_1 + 0x20) - lVar14 >> 3);
  if (0 < param_5) {
    iVar3 = param_6 + -3;
    iVar1 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar3 < 1) {
      iVar1 = 0;
    }
    do {
      lVar5 = 0;
      if (0 < iVar4) {
        do {
          *(long *)((long)plVar13 + lVar5) =
               *(long *)(param_2 + (long)*(int *)(lVar14 + lVar5 + 4) * 8) +
               (long)(param_7 * *(int *)(lVar14 + lVar5));
          lVar5 = lVar5 + 8;
        } while (lVar5 != ((ulong)(iVar4 - 1) + 1) * 8);
      }
      if (0 < iVar3) {
        lVar5 = 0;
        puVar6 = param_3;
        do {
          lVar2 = *plVar13 + lVar5;
          uVar11 = (uint)*(byte *)(*plVar13 + lVar5);
          uVar10 = (uint)*(byte *)(lVar2 + 1);
          uVar9 = (uint)*(byte *)(lVar2 + 2);
          uVar8 = (uint)*(byte *)(lVar2 + 3);
          if (1 < iVar4) {
            plVar7 = plVar13 + 1;
            do {
              plVar12 = plVar7 + 1;
              lVar2 = *plVar7 + lVar5;
              uVar11 = uVar11 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar11 - *(byte *)(*plVar7 + lVar5)) + 0x100)] & 0xff;
              uVar10 = uVar10 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar10 - *(byte *)(lVar2 + 1)) + 0x100)] & 0xff;
              uVar9 = uVar9 - (byte)PTR_DAT_00501b38[(int)((uVar9 - *(byte *)(lVar2 + 2)) + 0x100)]
                      & 0xff;
              uVar8 = uVar8 - (byte)PTR_DAT_00501b38[(int)((uVar8 - *(byte *)(lVar2 + 3)) + 0x100)]
                      & 0xff;
              plVar7 = plVar12;
            } while (plVar12 != plVar13 + (ulong)(iVar4 - 2) + 2);
          }
          *puVar6 = (char)uVar11;
          puVar6[1] = (char)uVar10;
          lVar5 = lVar5 + 4;
          puVar6[2] = (char)uVar9;
          puVar6[3] = (char)uVar8;
          puVar6 = puVar6 + 4;
        } while ((int)lVar5 < iVar3);
      }
      lVar5 = (long)iVar1;
      if (iVar1 < param_6) {
        do {
          uVar8 = (uint)*(byte *)(*plVar13 + lVar5);
          if (1 < iVar4) {
            plVar7 = plVar13 + 1;
            do {
              plVar12 = plVar7 + 1;
              uVar8 = uVar8 - (byte)PTR_DAT_00501b38
                                    [(int)((uVar8 - *(byte *)(*plVar7 + lVar5)) + 0x100)] & 0xff;
              plVar7 = plVar12;
            } while (plVar12 != plVar13 + (ulong)(iVar4 - 2) + 2);
          }
          param_3[lVar5] = (char)uVar8;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (long)iVar1 + 1 + (ulong)(uint)((param_6 + -1) - iVar1));
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = param_2 + 8;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dd214 (1112 bytes) name=FUN_001dd214

void FUN_001dd214(long param_1,long *param_2,double *param_3,int param_4,int param_5,int param_6)

{
  long *plVar1;
  ulong uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  long *plVar6;
  ulong uVar7;
  long *plVar8;
  long lVar9;
  int iVar10;
  ulong uVar11;
  ulong uVar12;
  long lVar13;
  long lVar14;
  long *plVar15;
  double *pdVar16;
  double *pdVar17;
  double *pdVar18;
  long lVar19;
  double *pdVar20;
  ulong uVar21;
  ulong uVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  uVar11 = (ulong)param_4;
  uVar22 = uVar11 >> 3;
  uVar3 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar3)) {
    uVar5 = param_6 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar4 = 0;
    }
    uVar12 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
    plVar15 = param_2 + (ulong)(uVar3 - 3) + 3;
    uVar21 = -(uVar11 >> 0x22 & 1) & 0xfffffff800000000 | (uVar22 & 0xffffffff) << 3;
    uVar2 = uVar12;
    if ((int)uVar3 < 3) {
      uVar2 = 0x10;
    }
    plVar8 = param_2;
    do {
      param_2 = plVar8 + 2;
      if (0 < param_6 + -3) {
        pdVar20 = (double *)plVar8[1];
        pdVar16 = (double *)*plVar8;
        lVar13 = 0;
        pdVar17 = param_3;
        pdVar18 = (double *)((long)param_3 + uVar21);
        do {
          dVar30 = *pdVar20;
          dVar28 = pdVar20[1];
          dVar26 = pdVar20[2];
          dVar24 = pdVar20[3];
          plVar6 = param_2;
          dVar25 = dVar26;
          dVar27 = dVar28;
          dVar29 = dVar30;
          if (uVar3 == 2) {
            uVar7 = 0x10;
            dVar23 = dVar24;
          }
          else {
            do {
              plVar1 = plVar6 + 1;
              lVar14 = *plVar6 + lVar13;
              dVar30 = *(double *)(*plVar6 + lVar13);
              if (dVar30 <= dVar29) {
                dVar30 = dVar29;
              }
              dVar28 = *(double *)(lVar14 + 8);
              if (*(double *)(lVar14 + 8) <= dVar27) {
                dVar28 = dVar27;
              }
              dVar26 = *(double *)(lVar14 + 0x10);
              if (*(double *)(lVar14 + 0x10) <= dVar25) {
                dVar26 = dVar25;
              }
              dVar23 = *(double *)(lVar14 + 0x18);
              if (*(double *)(lVar14 + 0x18) <= dVar24) {
                dVar23 = dVar24;
              }
              uVar7 = uVar12;
              plVar6 = plVar1;
              dVar24 = dVar23;
              dVar25 = dVar26;
              dVar27 = dVar28;
              dVar29 = dVar30;
            } while (plVar15 != plVar1);
          }
          dVar24 = *pdVar16;
          if (*pdVar16 <= dVar30) {
            dVar24 = dVar30;
          }
          *pdVar17 = dVar24;
          dVar24 = pdVar16[1];
          if (pdVar16[1] <= dVar28) {
            dVar24 = dVar28;
          }
          pdVar17[1] = dVar24;
          dVar24 = pdVar16[2];
          if (pdVar16[2] <= dVar26) {
            dVar24 = dVar26;
          }
          pdVar17[2] = dVar24;
          dVar24 = pdVar16[3];
          if (pdVar16[3] <= dVar23) {
            dVar24 = dVar23;
          }
          lVar9 = *(long *)((long)plVar8 + uVar7);
          pdVar17[3] = dVar24;
          lVar14 = lVar9 + lVar13;
          dVar24 = *(double *)(lVar9 + lVar13);
          if (dVar24 <= dVar30) {
            dVar24 = dVar30;
          }
          *pdVar18 = dVar24;
          dVar30 = *(double *)(lVar14 + 8);
          if (*(double *)(lVar14 + 8) <= dVar28) {
            dVar30 = dVar28;
          }
          pdVar18[1] = dVar30;
          dVar28 = *(double *)(lVar14 + 0x10);
          if (*(double *)(lVar14 + 0x10) <= dVar26) {
            dVar28 = dVar26;
          }
          pdVar18[2] = dVar28;
          dVar28 = *(double *)(lVar14 + 0x18);
          if (*(double *)(lVar14 + 0x18) <= dVar23) {
            dVar28 = dVar23;
          }
          lVar13 = lVar13 + 0x20;
          pdVar20 = pdVar20 + 4;
          pdVar18[3] = dVar28;
          pdVar17 = pdVar17 + 4;
          pdVar16 = pdVar16 + 4;
          pdVar18 = pdVar18 + 4;
        } while (lVar13 != ((ulong)uVar5 + 1) * 0x20);
      }
      if (iVar4 < param_6) {
        lVar19 = plVar8[1];
        lVar9 = *plVar8;
        lVar14 = *(long *)((long)plVar8 + uVar2);
        lVar13 = (long)iVar4 << 3;
        do {
          dVar28 = *(double *)(lVar19 + lVar13);
          plVar8 = param_2;
          dVar26 = dVar28;
          if (uVar3 != 2) {
            do {
              plVar6 = plVar8 + 1;
              dVar28 = *(double *)(*plVar8 + lVar13);
              if (*(double *)(*plVar8 + lVar13) <= dVar26) {
                dVar28 = dVar26;
              }
              plVar8 = plVar6;
              dVar26 = dVar28;
            } while (plVar15 != plVar6);
          }
          dVar26 = *(double *)(lVar9 + lVar13);
          if (*(double *)(lVar9 + lVar13) <= dVar28) {
            dVar26 = dVar28;
          }
          *(double *)((long)param_3 + lVar13) = dVar26;
          dVar26 = *(double *)(lVar14 + lVar13);
          if (dVar26 <= dVar28) {
            dVar26 = dVar28;
          }
          *(double *)((long)param_3 + lVar13 + uVar21) = dVar26;
          lVar13 = lVar13 + 8;
        } while (lVar13 != ((long)iVar4 + 1 + (ulong)(uint)((param_6 + -1) - iVar4)) * 8);
      }
      param_5 = param_5 + -2;
      param_3 = (double *)
                ((long)param_3 +
                (-(ulong)(((uint)uVar22 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                (ulong)((uint)uVar22 << 1) << 3));
      plVar15 = plVar15 + 2;
      plVar8 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar5 = param_6 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar4 = 0;
    }
    do {
      plVar15 = param_2 + 1;
      if (0 < param_6 + -3) {
        pdVar20 = (double *)*param_2;
        lVar13 = 0;
        pdVar17 = param_3;
        do {
          dVar24 = *pdVar20;
          dVar26 = pdVar20[1];
          dVar30 = pdVar20[2];
          dVar28 = pdVar20[3];
          if (1 < (int)uVar3) {
            iVar10 = 1;
            plVar8 = plVar15;
            dVar25 = dVar28;
            dVar27 = dVar30;
            dVar29 = dVar26;
            dVar23 = dVar24;
            do {
              lVar9 = *plVar8;
              iVar10 = iVar10 + 1;
              plVar8 = plVar8 + 1;
              lVar14 = lVar9 + lVar13;
              dVar24 = *(double *)(lVar9 + lVar13);
              if (dVar24 <= dVar23) {
                dVar24 = dVar23;
              }
              dVar26 = *(double *)(lVar14 + 8);
              if (*(double *)(lVar14 + 8) <= dVar29) {
                dVar26 = dVar29;
              }
              dVar30 = *(double *)(lVar14 + 0x10);
              if (*(double *)(lVar14 + 0x10) <= dVar27) {
                dVar30 = dVar27;
              }
              dVar28 = *(double *)(lVar14 + 0x18);
              if (*(double *)(lVar14 + 0x18) <= dVar25) {
                dVar28 = dVar25;
              }
              dVar25 = dVar28;
              dVar27 = dVar30;
              dVar29 = dVar26;
              dVar23 = dVar24;
            } while (iVar10 < (int)uVar3);
          }
          lVar13 = lVar13 + 0x20;
          pdVar20 = pdVar20 + 4;
          pdVar17[1] = dVar26;
          *pdVar17 = dVar24;
          pdVar17[3] = dVar28;
          pdVar17[2] = dVar30;
          pdVar17 = pdVar17 + 4;
        } while (lVar13 != ((ulong)uVar5 + 1) * 0x20);
      }
      if (iVar4 < param_6) {
        lVar14 = *param_2;
        lVar13 = (long)iVar4 << 3;
        do {
          dVar28 = *(double *)(lVar14 + lVar13);
          if (1 < (int)uVar3) {
            iVar10 = 1;
            plVar8 = plVar15;
            dVar26 = dVar28;
            do {
              lVar9 = *plVar8;
              iVar10 = iVar10 + 1;
              plVar8 = plVar8 + 1;
              dVar28 = *(double *)(lVar9 + lVar13);
              if (*(double *)(lVar9 + lVar13) <= dVar26) {
                dVar28 = dVar26;
              }
              dVar26 = dVar28;
            } while (iVar10 < (int)uVar3);
          }
          *(double *)((long)param_3 + lVar13) = dVar28;
          lVar13 = lVar13 + 8;
        } while (lVar13 != ((long)iVar4 + 1 + (ulong)(uint)((param_6 + -1) - iVar4)) * 8);
      }
      param_5 = param_5 + -1;
      param_3 = (double *)
                ((long)param_3 +
                (-(uVar11 >> 0x22 & 1) & 0xfffffff800000000 | (uVar22 & 0xffffffff) << 3));
      param_2 = plVar15;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dd66c (1092 bytes) name=FUN_001dd66c

void FUN_001dd66c(long param_1,long *param_2,float *param_3,int param_4,int param_5,int param_6)

{
  long *plVar1;
  undefined8 *puVar2;
  ulong uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  long *plVar7;
  ulong uVar8;
  long *plVar9;
  long lVar10;
  int iVar11;
  ulong uVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  long *plVar16;
  float *pfVar17;
  float *pfVar18;
  float *pfVar19;
  long lVar20;
  float *pfVar21;
  ulong uVar22;
  ulong uVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  
  uVar12 = (ulong)param_4;
  uVar23 = uVar12 >> 2;
  uVar4 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar4)) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    uVar13 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
    plVar16 = param_2 + (ulong)(uVar4 - 3) + 3;
    uVar22 = -(uVar12 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar23 & 0xffffffff) << 2;
    uVar3 = uVar13;
    if ((int)uVar4 < 3) {
      uVar3 = 0x10;
    }
    plVar9 = param_2;
    do {
      param_2 = plVar9 + 2;
      if (0 < param_6 + -3) {
        pfVar21 = (float *)plVar9[1];
        pfVar17 = (float *)*plVar9;
        lVar14 = 0;
        pfVar18 = param_3;
        pfVar19 = (float *)((long)param_3 + uVar22);
        do {
          fVar29 = *pfVar21;
          fVar28 = pfVar21[1];
          fVar27 = pfVar21[2];
          fVar25 = pfVar21[3];
          plVar7 = param_2;
          fVar24 = fVar27;
          fVar26 = fVar29;
          if (uVar4 == 2) {
            uVar8 = 0x10;
          }
          else {
            do {
              plVar1 = plVar7 + 1;
              lVar15 = *plVar7 + lVar14;
              fVar29 = *(float *)(*plVar7 + lVar14);
              if (fVar29 <= fVar26) {
                fVar29 = fVar26;
              }
              fVar27 = *(float *)(lVar15 + 4);
              if (*(float *)(lVar15 + 4) <= fVar28) {
                fVar27 = fVar28;
              }
              fVar28 = fVar27;
              fVar27 = *(float *)(lVar15 + 8);
              if (*(float *)(lVar15 + 8) <= fVar24) {
                fVar27 = fVar24;
              }
              fVar24 = *(float *)(lVar15 + 0xc);
              if (*(float *)(lVar15 + 0xc) <= fVar25) {
                fVar24 = fVar25;
              }
              fVar25 = fVar24;
              uVar8 = uVar13;
              plVar7 = plVar1;
              fVar24 = fVar27;
              fVar26 = fVar29;
            } while (plVar16 != plVar1);
          }
          fVar24 = *pfVar17;
          if (*pfVar17 <= fVar29) {
            fVar24 = fVar29;
          }
          *pfVar18 = fVar24;
          fVar24 = pfVar17[1];
          if (pfVar17[1] <= fVar28) {
            fVar24 = fVar28;
          }
          pfVar18[1] = fVar24;
          fVar24 = pfVar17[2];
          if (pfVar17[2] <= fVar27) {
            fVar24 = fVar27;
          }
          pfVar18[2] = fVar24;
          fVar24 = pfVar17[3];
          if (pfVar17[3] <= fVar25) {
            fVar24 = fVar25;
          }
          lVar10 = *(long *)((long)plVar9 + uVar8);
          pfVar18[3] = fVar24;
          lVar15 = lVar10 + lVar14;
          fVar24 = *(float *)(lVar10 + lVar14);
          if (fVar24 <= fVar29) {
            fVar24 = fVar29;
          }
          *pfVar19 = fVar24;
          fVar29 = *(float *)(lVar15 + 4);
          if (*(float *)(lVar15 + 4) <= fVar28) {
            fVar29 = fVar28;
          }
          pfVar19[1] = fVar29;
          fVar29 = *(float *)(lVar15 + 8);
          if (*(float *)(lVar15 + 8) <= fVar27) {
            fVar29 = fVar27;
          }
          pfVar19[2] = fVar29;
          fVar27 = *(float *)(lVar15 + 0xc);
          if (*(float *)(lVar15 + 0xc) <= fVar25) {
            fVar27 = fVar25;
          }
          lVar14 = lVar14 + 0x10;
          pfVar21 = pfVar21 + 4;
          pfVar19[3] = fVar27;
          pfVar18 = pfVar18 + 4;
          pfVar17 = pfVar17 + 4;
          pfVar19 = pfVar19 + 4;
        } while (lVar14 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar5 < param_6) {
        lVar20 = plVar9[1];
        lVar10 = *plVar9;
        lVar15 = *(long *)((long)plVar9 + uVar3);
        lVar14 = (long)iVar5 << 2;
        do {
          fVar27 = *(float *)(lVar20 + lVar14);
          plVar9 = param_2;
          if (uVar4 != 2) {
            do {
              plVar7 = plVar9 + 1;
              fVar29 = *(float *)(*plVar9 + lVar14);
              if (*(float *)(*plVar9 + lVar14) <= fVar27) {
                fVar29 = fVar27;
              }
              fVar27 = fVar29;
              plVar9 = plVar7;
            } while (plVar16 != plVar7);
          }
          fVar29 = *(float *)(lVar10 + lVar14);
          if (*(float *)(lVar10 + lVar14) <= fVar27) {
            fVar29 = fVar27;
          }
          *(float *)((long)param_3 + lVar14) = fVar29;
          fVar29 = *(float *)(lVar15 + lVar14);
          if (fVar29 <= fVar27) {
            fVar29 = fVar27;
          }
          *(float *)((long)param_3 + lVar14 + uVar22) = fVar29;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 4);
      }
      param_5 = param_5 + -2;
      param_3 = (float *)((long)param_3 +
                         (-(ulong)(((uint)uVar23 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                         (ulong)((uint)uVar23 << 1) << 2));
      plVar16 = plVar16 + 2;
      plVar9 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    do {
      plVar16 = param_2 + 1;
      if (0 < param_6 + -3) {
        pfVar21 = (float *)*param_2;
        lVar14 = 0;
        do {
          fVar29 = *pfVar21;
          fVar24 = pfVar21[1];
          fVar27 = pfVar21[2];
          fVar26 = pfVar21[3];
          if (1 < (int)uVar4) {
            iVar11 = 1;
            plVar9 = plVar16;
            fVar28 = fVar27;
            fVar25 = fVar29;
            do {
              lVar10 = *plVar9;
              iVar11 = iVar11 + 1;
              plVar9 = plVar9 + 1;
              lVar15 = lVar10 + lVar14;
              fVar29 = *(float *)(lVar10 + lVar14);
              if (fVar29 <= fVar25) {
                fVar29 = fVar25;
              }
              fVar27 = *(float *)(lVar15 + 4);
              if (*(float *)(lVar15 + 4) <= fVar24) {
                fVar27 = fVar24;
              }
              fVar24 = fVar27;
              fVar27 = *(float *)(lVar15 + 8);
              if (*(float *)(lVar15 + 8) <= fVar28) {
                fVar27 = fVar28;
              }
              fVar28 = *(float *)(lVar15 + 0xc);
              if (*(float *)(lVar15 + 0xc) <= fVar26) {
                fVar28 = fVar26;
              }
              fVar26 = fVar28;
              fVar28 = fVar27;
              fVar25 = fVar29;
            } while (iVar11 < (int)uVar4);
          }
          puVar2 = (undefined8 *)((long)param_3 + lVar14);
          lVar14 = lVar14 + 0x10;
          pfVar21 = pfVar21 + 4;
          puVar2[1] = CONCAT44(fVar26,fVar27);
          *puVar2 = CONCAT44(fVar24,fVar29);
        } while (lVar14 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar5 < param_6) {
        lVar15 = *param_2;
        lVar14 = (long)iVar5 << 2;
        do {
          fVar27 = *(float *)(lVar15 + lVar14);
          if (1 < (int)uVar4) {
            iVar11 = 1;
            plVar9 = plVar16;
            do {
              lVar10 = *plVar9;
              iVar11 = iVar11 + 1;
              plVar9 = plVar9 + 1;
              fVar29 = *(float *)(lVar10 + lVar14);
              if (*(float *)(lVar10 + lVar14) <= fVar27) {
                fVar29 = fVar27;
              }
              fVar27 = fVar29;
            } while (iVar11 < (int)uVar4);
          }
          *(float *)((long)param_3 + lVar14) = fVar27;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 4);
      }
      param_5 = param_5 + -1;
      param_3 = (float *)((long)param_3 +
                         (-(uVar12 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar23 & 0xffffffff) << 2));
      param_2 = plVar16;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001ddab0 (1044 bytes) name=FUN_001ddab0

void FUN_001ddab0(long param_1,long *param_2,undefined2 *param_3,int param_4,int param_5,int param_6
                 )

{
  short *psVar1;
  ushort *puVar2;
  undefined8 *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  ulong uVar8;
  uint uVar9;
  ushort uVar10;
  short sVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  short sVar15;
  uint uVar16;
  uint uVar17;
  long *plVar18;
  short sVar19;
  short sVar20;
  uint uVar21;
  short sVar22;
  uint uVar23;
  int iVar24;
  long *plVar25;
  ulong uVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  long lVar31;
  long *plVar32;
  undefined2 *puVar33;
  ushort *puVar34;
  undefined2 *puVar35;
  short *psVar36;
  ulong uVar37;
  ulong uVar38;
  ulong uVar39;
  long *plVar26;
  
  uVar39 = (ulong)(long)param_4 >> 1;
  uVar9 = *(uint *)(param_1 + 8);
  uVar14 = (uint)uVar39;
  if ((1 < param_5) && (1 < (int)uVar9)) {
    uVar13 = param_6 - 4U >> 2;
    iVar12 = (uVar13 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar12 = 0;
    }
    uVar37 = -(ulong)(uVar9 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar9 << 3;
    plVar32 = param_2 + (ulong)(uVar9 - 3) + 3;
    uVar38 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffe00000000 | (uVar39 & 0xffffffff) << 1;
    uVar8 = uVar37;
    if ((int)uVar9 < 3) {
      uVar8 = 0x10;
    }
    plVar18 = param_2;
    do {
      param_2 = plVar18 + 2;
      if (0 < param_6 + -3) {
        psVar36 = (short *)plVar18[1];
        lVar31 = 0;
        puVar33 = (undefined2 *)((long)param_3 + uVar38);
        puVar34 = (ushort *)*plVar18;
        puVar35 = param_3;
        do {
          uVar23 = (uint)*psVar36;
          uVar21 = (uint)psVar36[1];
          uVar17 = (uint)psVar36[2];
          uVar16 = (uint)psVar36[3];
          plVar25 = param_2;
          if (uVar9 == 2) {
            uVar27 = 0x10;
          }
          else {
            do {
              plVar26 = plVar25 + 1;
              lVar29 = *plVar25 + lVar31;
              uVar10 = *(ushort *)(*plVar25 + lVar31);
              uVar7 = (uint)uVar10;
              if ((int)(short)uVar10 <= (int)uVar23) {
                uVar7 = uVar23;
              }
              uVar4 = (uint)*(ushort *)(lVar29 + 2);
              if ((int)(short)*(ushort *)(lVar29 + 2) <= (int)uVar21) {
                uVar4 = uVar21;
              }
              uVar5 = (uint)*(ushort *)(lVar29 + 4);
              if ((int)(short)*(ushort *)(lVar29 + 4) <= (int)uVar17) {
                uVar5 = uVar17;
              }
              uVar6 = (uint)*(ushort *)(lVar29 + 6);
              if ((int)(short)*(ushort *)(lVar29 + 6) <= (int)uVar16) {
                uVar6 = uVar16;
              }
              uVar23 = (uint)(short)uVar7;
              uVar21 = (uint)(short)uVar4;
              uVar17 = (uint)(short)uVar5;
              uVar16 = (uint)(short)uVar6;
              uVar27 = uVar37;
              plVar25 = plVar26;
            } while (plVar32 != plVar26);
          }
          lVar29 = *(long *)((long)plVar18 + uVar27);
          uVar7 = (uint)*puVar34;
          if ((int)(short)*puVar34 <= (int)uVar23) {
            uVar7 = uVar23;
          }
          *puVar35 = (short)uVar7;
          lVar28 = lVar29 + lVar31;
          psVar36 = psVar36 + 4;
          uVar7 = (uint)puVar34[1];
          if ((int)(short)puVar34[1] <= (int)uVar21) {
            uVar7 = uVar21;
          }
          puVar35[1] = (short)uVar7;
          uVar7 = (uint)puVar34[2];
          if ((int)(short)puVar34[2] <= (int)uVar17) {
            uVar7 = uVar17;
          }
          puVar35[2] = (short)uVar7;
          uVar7 = (uint)puVar34[3];
          if ((int)(short)puVar34[3] <= (int)uVar16) {
            uVar7 = uVar16;
          }
          puVar35[3] = (short)uVar7;
          psVar1 = (short *)(lVar29 + lVar31);
          puVar2 = (ushort *)(lVar29 + lVar31);
          lVar31 = lVar31 + 8;
          uVar7 = (uint)*puVar2;
          if ((int)*psVar1 < (int)uVar23) {
            uVar7 = uVar23;
          }
          *puVar33 = (short)uVar7;
          uVar23 = (uint)*(ushort *)(lVar28 + 2);
          if ((int)*(short *)(lVar28 + 2) < (int)uVar21) {
            uVar23 = uVar21;
          }
          puVar33[1] = (short)uVar23;
          uVar23 = (uint)*(ushort *)(lVar28 + 4);
          if ((int)*(short *)(lVar28 + 4) < (int)uVar17) {
            uVar23 = uVar17;
          }
          puVar33[2] = (short)uVar23;
          uVar23 = (uint)*(ushort *)(lVar28 + 6);
          if ((int)*(short *)(lVar28 + 6) < (int)uVar16) {
            uVar23 = uVar16;
          }
          puVar33[3] = (short)uVar23;
          puVar33 = puVar33 + 4;
          puVar34 = puVar34 + 4;
          puVar35 = puVar35 + 4;
        } while (lVar31 != ((ulong)uVar13 + 1) * 8);
      }
      if (iVar12 < param_6) {
        lVar30 = plVar18[1];
        lVar28 = *plVar18;
        lVar29 = *(long *)((long)plVar18 + uVar8);
        lVar31 = (long)iVar12 << 1;
        do {
          uVar23 = (uint)*(short *)(lVar30 + lVar31);
          plVar18 = param_2;
          if (uVar9 != 2) {
            do {
              plVar25 = plVar18 + 1;
              uVar21 = (uint)*(ushort *)(*plVar18 + lVar31);
              if ((int)(short)*(ushort *)(*plVar18 + lVar31) <= (int)uVar23) {
                uVar21 = uVar23;
              }
              uVar23 = (uint)(short)uVar21;
              plVar18 = plVar25;
            } while (plVar32 != plVar25);
          }
          uVar21 = (uint)*(ushort *)(lVar28 + lVar31);
          if ((int)(short)*(ushort *)(lVar28 + lVar31) <= (int)uVar23) {
            uVar21 = uVar23;
          }
          *(short *)((long)param_3 + lVar31) = (short)uVar21;
          uVar10 = *(ushort *)(lVar29 + lVar31);
          uVar21 = (uint)uVar10;
          if ((int)(short)uVar10 <= (int)uVar23) {
            uVar21 = uVar23;
          }
          *(short *)((long)param_3 + lVar31 + uVar38) = (short)uVar21;
          lVar31 = lVar31 + 2;
        } while (lVar31 != ((long)iVar12 + 1 + (ulong)(uint)((param_6 + -1) - iVar12)) * 2);
      }
      param_5 = param_5 + -2;
      plVar32 = plVar32 + 2;
      param_3 = (undefined2 *)
                ((long)param_3 +
                (-(ulong)((uVar14 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                (ulong)(uVar14 << 1) << 1));
      plVar18 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar13 = param_6 - 4U >> 2;
    iVar12 = (uVar13 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar12 = 0;
    }
    do {
      plVar32 = param_2 + 1;
      if (0 < param_6 + -3) {
        psVar36 = (short *)*param_2;
        lVar31 = 0;
        do {
          sVar22 = *psVar36;
          sVar20 = psVar36[1];
          sVar19 = psVar36[2];
          sVar15 = psVar36[3];
          if (1 < (int)uVar9) {
            iVar24 = 1;
            plVar18 = plVar32;
            do {
              iVar24 = iVar24 + 1;
              lVar29 = *plVar18 + lVar31;
              sVar11 = *(short *)(*plVar18 + lVar31);
              if (sVar11 <= sVar22) {
                sVar11 = sVar22;
              }
              sVar22 = sVar11;
              sVar11 = *(short *)(lVar29 + 2);
              if (*(short *)(lVar29 + 2) <= sVar20) {
                sVar11 = sVar20;
              }
              sVar20 = sVar11;
              sVar11 = *(short *)(lVar29 + 4);
              if (*(short *)(lVar29 + 4) <= sVar19) {
                sVar11 = sVar19;
              }
              sVar19 = sVar11;
              sVar11 = *(short *)(lVar29 + 6);
              if (*(short *)(lVar29 + 6) <= sVar15) {
                sVar11 = sVar15;
              }
              sVar15 = sVar11;
              plVar18 = plVar18 + 1;
            } while (iVar24 < (int)uVar9);
          }
          puVar3 = (undefined8 *)((long)param_3 + lVar31);
          lVar31 = lVar31 + 8;
          psVar36 = psVar36 + 4;
          *puVar3 = CONCAT26(sVar15,CONCAT24(sVar19,CONCAT22(sVar20,sVar22)));
        } while (lVar31 != ((ulong)uVar13 + 1) * 8);
      }
      if (iVar12 < param_6) {
        lVar29 = *param_2;
        lVar31 = (long)iVar12 << 1;
        do {
          sVar22 = *(short *)(lVar29 + lVar31);
          if (1 < (int)uVar9) {
            iVar24 = 1;
            plVar18 = plVar32;
            do {
              iVar24 = iVar24 + 1;
              sVar20 = *(short *)(*plVar18 + lVar31);
              if (*(short *)(*plVar18 + lVar31) <= sVar22) {
                sVar20 = sVar22;
              }
              sVar22 = sVar20;
              plVar18 = plVar18 + 1;
            } while (iVar24 < (int)uVar9);
          }
          *(short *)((long)param_3 + lVar31) = sVar22;
          lVar31 = lVar31 + 2;
        } while (lVar31 != ((long)iVar12 + 1 + (ulong)(uint)((param_6 + -1) - iVar12)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = (undefined2 *)
                ((long)param_3 +
                (-(ulong)(uVar14 >> 0x1f) & 0xfffffffe00000000 | (uVar39 & 0xffffffff) << 1));
      param_2 = plVar32;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001ddec4 (1028 bytes) name=FUN_001ddec4

void FUN_001ddec4(long param_1,long *param_2,ushort *param_3,int param_4,int param_5,int param_6)

{
  undefined8 *puVar1;
  ulong uVar2;
  uint uVar3;
  ushort uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  ushort uVar8;
  long *plVar9;
  ushort uVar10;
  ushort uVar11;
  ushort uVar12;
  int iVar13;
  long *plVar14;
  ulong uVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  long *plVar21;
  ushort *puVar22;
  ushort *puVar23;
  ushort *puVar24;
  ushort *puVar25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  long *plVar15;
  
  uVar28 = (ulong)(long)param_4 >> 1;
  uVar3 = *(uint *)(param_1 + 8);
  uVar7 = (uint)uVar28;
  if ((1 < param_5) && (1 < (int)uVar3)) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    uVar26 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
    plVar21 = param_2 + (ulong)(uVar3 - 3) + 3;
    uVar27 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffe00000000 | (uVar28 & 0xffffffff) << 1;
    uVar2 = uVar26;
    if ((int)uVar3 < 3) {
      uVar2 = 0x10;
    }
    plVar9 = param_2;
    do {
      param_2 = plVar9 + 2;
      if (0 < param_6 + -3) {
        puVar25 = (ushort *)plVar9[1];
        lVar20 = 0;
        puVar22 = (ushort *)((long)param_3 + uVar27);
        puVar23 = (ushort *)*plVar9;
        puVar24 = param_3;
        do {
          uVar12 = *puVar25;
          uVar11 = puVar25[1];
          uVar10 = puVar25[2];
          uVar8 = puVar25[3];
          plVar14 = param_2;
          if (uVar3 == 2) {
            uVar16 = 0x10;
          }
          else {
            do {
              plVar15 = plVar14 + 1;
              lVar18 = *plVar14 + lVar20;
              uVar4 = *(ushort *)(*plVar14 + lVar20);
              if (uVar4 <= uVar12) {
                uVar4 = uVar12;
              }
              uVar12 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 2);
              if (*(ushort *)(lVar18 + 2) <= uVar11) {
                uVar4 = uVar11;
              }
              uVar11 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 4);
              if (*(ushort *)(lVar18 + 4) <= uVar10) {
                uVar4 = uVar10;
              }
              uVar10 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 6);
              if (*(ushort *)(lVar18 + 6) <= uVar8) {
                uVar4 = uVar8;
              }
              uVar8 = uVar4;
              uVar16 = uVar26;
              plVar14 = plVar15;
            } while (plVar21 != plVar15);
          }
          lVar18 = *(long *)((long)plVar9 + uVar16);
          uVar4 = *puVar23;
          if (*puVar23 <= uVar12) {
            uVar4 = uVar12;
          }
          *puVar24 = uVar4;
          lVar17 = lVar18 + lVar20;
          puVar25 = puVar25 + 4;
          uVar4 = puVar23[1];
          if (puVar23[1] <= uVar11) {
            uVar4 = uVar11;
          }
          puVar24[1] = uVar4;
          uVar4 = puVar23[2];
          if (puVar23[2] <= uVar10) {
            uVar4 = uVar10;
          }
          puVar24[2] = uVar4;
          uVar4 = puVar23[3];
          if (puVar23[3] <= uVar8) {
            uVar4 = uVar8;
          }
          puVar24[3] = uVar4;
          uVar4 = *(ushort *)(lVar18 + lVar20);
          lVar20 = lVar20 + 8;
          if (uVar4 < uVar12) {
            uVar4 = uVar12;
          }
          *puVar22 = uVar4;
          uVar12 = *(ushort *)(lVar17 + 2);
          if (*(ushort *)(lVar17 + 2) < uVar11) {
            uVar12 = uVar11;
          }
          puVar22[1] = uVar12;
          uVar12 = *(ushort *)(lVar17 + 4);
          if (*(ushort *)(lVar17 + 4) < uVar10) {
            uVar12 = uVar10;
          }
          puVar22[2] = uVar12;
          uVar12 = *(ushort *)(lVar17 + 6);
          if (*(ushort *)(lVar17 + 6) < uVar8) {
            uVar12 = uVar8;
          }
          puVar22[3] = uVar12;
          puVar22 = puVar22 + 4;
          puVar23 = puVar23 + 4;
          puVar24 = puVar24 + 4;
        } while (lVar20 != ((ulong)uVar6 + 1) * 8);
      }
      if (iVar5 < param_6) {
        lVar19 = plVar9[1];
        lVar17 = *plVar9;
        lVar18 = *(long *)((long)plVar9 + uVar2);
        lVar20 = (long)iVar5 << 1;
        do {
          uVar12 = *(ushort *)(lVar19 + lVar20);
          plVar9 = param_2;
          if (uVar3 != 2) {
            do {
              plVar14 = plVar9 + 1;
              uVar11 = *(ushort *)(*plVar9 + lVar20);
              if (*(ushort *)(*plVar9 + lVar20) <= uVar12) {
                uVar11 = uVar12;
              }
              uVar12 = uVar11;
              plVar9 = plVar14;
            } while (plVar21 != plVar14);
          }
          uVar11 = *(ushort *)(lVar17 + lVar20);
          if (*(ushort *)(lVar17 + lVar20) <= uVar12) {
            uVar11 = uVar12;
          }
          *(ushort *)((long)param_3 + lVar20) = uVar11;
          uVar11 = *(ushort *)(lVar18 + lVar20);
          if (uVar11 <= uVar12) {
            uVar11 = uVar12;
          }
          *(ushort *)((long)param_3 + lVar20 + uVar27) = uVar11;
          lVar20 = lVar20 + 2;
        } while (lVar20 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 2);
      }
      param_5 = param_5 + -2;
      plVar21 = plVar21 + 2;
      param_3 = (ushort *)
                ((long)param_3 +
                (-(ulong)((uVar7 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                (ulong)(uVar7 << 1) << 1));
      plVar9 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    do {
      plVar21 = param_2 + 1;
      if (0 < param_6 + -3) {
        puVar25 = (ushort *)*param_2;
        lVar20 = 0;
        do {
          uVar12 = *puVar25;
          uVar11 = puVar25[1];
          uVar10 = puVar25[2];
          uVar8 = puVar25[3];
          if (1 < (int)uVar3) {
            iVar13 = 1;
            plVar9 = plVar21;
            do {
              iVar13 = iVar13 + 1;
              lVar18 = *plVar9 + lVar20;
              uVar4 = *(ushort *)(*plVar9 + lVar20);
              if (uVar4 <= uVar12) {
                uVar4 = uVar12;
              }
              uVar12 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 2);
              if (*(ushort *)(lVar18 + 2) <= uVar11) {
                uVar4 = uVar11;
              }
              uVar11 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 4);
              if (*(ushort *)(lVar18 + 4) <= uVar10) {
                uVar4 = uVar10;
              }
              uVar10 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 6);
              if (*(ushort *)(lVar18 + 6) <= uVar8) {
                uVar4 = uVar8;
              }
              uVar8 = uVar4;
              plVar9 = plVar9 + 1;
            } while (iVar13 < (int)uVar3);
          }
          puVar1 = (undefined8 *)((long)param_3 + lVar20);
          lVar20 = lVar20 + 8;
          puVar25 = puVar25 + 4;
          *puVar1 = CONCAT26(uVar8,CONCAT24(uVar10,CONCAT22(uVar11,uVar12)));
        } while (lVar20 != ((ulong)uVar6 + 1) * 8);
      }
      if (iVar5 < param_6) {
        lVar18 = *param_2;
        lVar20 = (long)iVar5 << 1;
        do {
          uVar12 = *(ushort *)(lVar18 + lVar20);
          if (1 < (int)uVar3) {
            iVar13 = 1;
            plVar9 = plVar21;
            do {
              iVar13 = iVar13 + 1;
              uVar11 = *(ushort *)(*plVar9 + lVar20);
              if (*(ushort *)(*plVar9 + lVar20) <= uVar12) {
                uVar11 = uVar12;
              }
              uVar12 = uVar11;
              plVar9 = plVar9 + 1;
            } while (iVar13 < (int)uVar3);
          }
          *(ushort *)((long)param_3 + lVar20) = uVar12;
          lVar20 = lVar20 + 2;
        } while (lVar20 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = (ushort *)
                ((long)param_3 +
                (-(ulong)(uVar7 >> 0x1f) & 0xfffffffe00000000 | (uVar28 & 0xffffffff) << 1));
      param_2 = plVar21;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001de2c8 (1184 bytes) name=FUN_001de2c8

void FUN_001de2c8(long param_1,long *param_2,char *param_3,int param_4,int param_5,int param_6)

{
  byte *pbVar1;
  int iVar2;
  long lVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  undefined *puVar7;
  long *plVar8;
  ulong uVar9;
  long *plVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  long *plVar16;
  long lVar17;
  long *plVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  ulong uVar22;
  
  uVar5 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar5)) {
    iVar6 = param_6 + -3;
    iVar2 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar6 < 1) {
      iVar2 = 0;
    }
    uVar22 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
    plVar18 = param_2 + (ulong)(uVar5 - 3) + 3;
    pcVar19 = param_3 + param_4;
    plVar10 = param_2;
    uVar4 = uVar22;
    if ((int)uVar5 < 3) {
      uVar4 = 0x10;
    }
    do {
      param_2 = plVar10 + 2;
      if (0 < iVar6) {
        lVar17 = 0;
        pcVar20 = pcVar19;
        pcVar21 = param_3;
        do {
          puVar7 = PTR_DAT_00501b38;
          lVar3 = plVar10[1] + lVar17;
          uVar11 = (uint)*(byte *)(plVar10[1] + lVar17);
          uVar14 = (uint)*(byte *)(lVar3 + 1);
          uVar13 = (uint)*(byte *)(lVar3 + 2);
          uVar12 = (uint)*(byte *)(lVar3 + 3);
          plVar8 = param_2;
          if (uVar5 == 2) {
            uVar9 = 0x10;
          }
          else {
            do {
              plVar16 = plVar8 + 1;
              lVar3 = *plVar8 + lVar17;
              uVar11 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(*plVar8 + lVar17) - uVar11) + 0x100)]
                       + uVar11 & 0xff;
              uVar14 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 1) - uVar14) + 0x100)] +
                       uVar14 & 0xff;
              uVar13 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 2) - uVar13) + 0x100)] +
                       uVar13 & 0xff;
              uVar12 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 3) - uVar12) + 0x100)] +
                       uVar12 & 0xff;
              uVar9 = uVar22;
              plVar8 = plVar16;
            } while (plVar18 != plVar16);
          }
          lVar3 = *plVar10 + lVar17;
          *pcVar21 = (char)uVar11 +
                     PTR_DAT_00501b38[(int)((*(byte *)(*plVar10 + lVar17) - uVar11) + 0x100)];
          pcVar21[1] = (char)uVar14 + puVar7[(int)((*(byte *)(lVar3 + 1) - uVar14) + 0x100)];
          pcVar21[2] = (char)uVar13 + puVar7[(int)((*(byte *)(lVar3 + 2) - uVar13) + 0x100)];
          pcVar21[3] = (char)uVar12 + puVar7[(int)((*(byte *)(lVar3 + 3) - uVar12) + 0x100)];
          lVar3 = *(long *)((long)plVar10 + uVar9) + lVar17;
          pbVar1 = (byte *)(*(long *)((long)plVar10 + uVar9) + lVar17);
          lVar17 = lVar17 + 4;
          *pcVar20 = (char)uVar11 + puVar7[(int)((*pbVar1 - uVar11) + 0x100)];
          pcVar20[1] = (char)uVar14 + puVar7[(int)((*(byte *)(lVar3 + 1) - uVar14) + 0x100)];
          pcVar20[2] = (char)uVar13 + puVar7[(int)((*(byte *)(lVar3 + 2) - uVar13) + 0x100)];
          pcVar20[3] = (char)uVar12 + puVar7[(int)((*(byte *)(lVar3 + 3) - uVar12) + 0x100)];
          pcVar20 = pcVar20 + 4;
          pcVar21 = pcVar21 + 4;
        } while ((int)lVar17 < iVar6);
      }
      lVar17 = (long)iVar2;
      if (iVar2 < param_6) {
        do {
          puVar7 = PTR_DAT_00501b38;
          uVar11 = (uint)*(byte *)(plVar10[1] + lVar17);
          plVar8 = param_2;
          if (uVar5 != 2) {
            do {
              plVar16 = plVar8 + 1;
              uVar11 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(*plVar8 + lVar17) - uVar11) + 0x100)]
                       + uVar11 & 0xff;
              plVar8 = plVar16;
            } while (plVar18 != plVar16);
          }
          param_3[lVar17] =
               (char)uVar11 +
               PTR_DAT_00501b38[(int)((*(byte *)(*plVar10 + lVar17) - uVar11) + 0x100)];
          pcVar19[lVar17] =
               (char)uVar11 +
               puVar7[(int)((*(byte *)(*(long *)((long)plVar10 + uVar4) + lVar17) - uVar11) + 0x100)
                     ];
          lVar17 = lVar17 + 1;
        } while (lVar17 != (long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2));
      }
      param_5 = param_5 + -2;
      param_3 = param_3 + (param_4 << 1);
      pcVar19 = pcVar19 + (param_4 << 1);
      plVar18 = plVar18 + 2;
      plVar10 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    iVar6 = param_6 + -3;
    iVar2 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar6 < 1) {
      iVar2 = 0;
    }
    do {
      plVar18 = param_2 + 1;
      if (0 < iVar6) {
        lVar17 = 0;
        pcVar19 = param_3;
        do {
          lVar3 = *param_2 + lVar17;
          uVar14 = (uint)*(byte *)(*param_2 + lVar17);
          uVar13 = (uint)*(byte *)(lVar3 + 1);
          uVar12 = (uint)*(byte *)(lVar3 + 2);
          uVar11 = (uint)*(byte *)(lVar3 + 3);
          if (1 < (int)uVar5) {
            iVar15 = 1;
            plVar10 = plVar18;
            do {
              iVar15 = iVar15 + 1;
              lVar3 = *plVar10 + lVar17;
              uVar14 = (byte)PTR_DAT_00501b38
                             [(int)((*(byte *)(*plVar10 + lVar17) - uVar14) + 0x100)] + uVar14 &
                       0xff;
              uVar13 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 1) - uVar13) + 0x100)] +
                       uVar13 & 0xff;
              uVar12 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 2) - uVar12) + 0x100)] +
                       uVar12 & 0xff;
              uVar11 = (byte)PTR_DAT_00501b38[(int)((*(byte *)(lVar3 + 3) - uVar11) + 0x100)] +
                       uVar11 & 0xff;
              plVar10 = plVar10 + 1;
            } while (iVar15 < (int)uVar5);
          }
          *pcVar19 = (char)uVar14;
          pcVar19[1] = (char)uVar13;
          lVar17 = lVar17 + 4;
          pcVar19[2] = (char)uVar12;
          pcVar19[3] = (char)uVar11;
          pcVar19 = pcVar19 + 4;
        } while ((int)lVar17 < iVar6);
      }
      lVar17 = (long)iVar2;
      if (iVar2 < param_6) {
        do {
          uVar11 = (uint)*(byte *)(*param_2 + lVar17);
          if (1 < (int)uVar5) {
            iVar15 = 1;
            plVar10 = plVar18;
            do {
              iVar15 = iVar15 + 1;
              uVar11 = (byte)PTR_DAT_00501b38
                             [(int)((*(byte *)(*plVar10 + lVar17) - uVar11) + 0x100)] + uVar11 &
                       0xff;
              plVar10 = plVar10 + 1;
            } while (iVar15 < (int)uVar5);
          }
          param_3[lVar17] = (char)uVar11;
          lVar17 = lVar17 + 1;
        } while (lVar17 != (long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2));
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = plVar18;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001de768 (1112 bytes) name=FUN_001de768

void FUN_001de768(long param_1,long *param_2,double *param_3,int param_4,int param_5,int param_6)

{
  long *plVar1;
  ulong uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  long *plVar6;
  ulong uVar7;
  long *plVar8;
  long lVar9;
  int iVar10;
  ulong uVar11;
  ulong uVar12;
  long lVar13;
  long lVar14;
  long *plVar15;
  double *pdVar16;
  double *pdVar17;
  double *pdVar18;
  long lVar19;
  double *pdVar20;
  ulong uVar21;
  ulong uVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  uVar11 = (ulong)param_4;
  uVar22 = uVar11 >> 3;
  uVar3 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar3)) {
    uVar5 = param_6 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar4 = 0;
    }
    uVar12 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
    plVar15 = param_2 + (ulong)(uVar3 - 3) + 3;
    uVar21 = -(uVar11 >> 0x22 & 1) & 0xfffffff800000000 | (uVar22 & 0xffffffff) << 3;
    uVar2 = uVar12;
    if ((int)uVar3 < 3) {
      uVar2 = 0x10;
    }
    plVar8 = param_2;
    do {
      param_2 = plVar8 + 2;
      if (0 < param_6 + -3) {
        pdVar20 = (double *)plVar8[1];
        pdVar16 = (double *)*plVar8;
        lVar13 = 0;
        pdVar17 = param_3;
        pdVar18 = (double *)((long)param_3 + uVar21);
        do {
          dVar30 = *pdVar20;
          dVar28 = pdVar20[1];
          dVar26 = pdVar20[2];
          dVar24 = pdVar20[3];
          plVar6 = param_2;
          dVar25 = dVar26;
          dVar27 = dVar28;
          dVar29 = dVar30;
          if (uVar3 == 2) {
            uVar7 = 0x10;
            dVar23 = dVar24;
          }
          else {
            do {
              plVar1 = plVar6 + 1;
              lVar14 = *plVar6 + lVar13;
              dVar30 = *(double *)(*plVar6 + lVar13);
              if (dVar29 <= dVar30) {
                dVar30 = dVar29;
              }
              dVar28 = *(double *)(lVar14 + 8);
              if (dVar27 <= *(double *)(lVar14 + 8)) {
                dVar28 = dVar27;
              }
              dVar26 = *(double *)(lVar14 + 0x10);
              if (dVar25 <= *(double *)(lVar14 + 0x10)) {
                dVar26 = dVar25;
              }
              dVar23 = *(double *)(lVar14 + 0x18);
              if (dVar24 <= *(double *)(lVar14 + 0x18)) {
                dVar23 = dVar24;
              }
              uVar7 = uVar12;
              plVar6 = plVar1;
              dVar24 = dVar23;
              dVar25 = dVar26;
              dVar27 = dVar28;
              dVar29 = dVar30;
            } while (plVar15 != plVar1);
          }
          dVar24 = *pdVar16;
          if (dVar30 <= *pdVar16) {
            dVar24 = dVar30;
          }
          *pdVar17 = dVar24;
          dVar24 = pdVar16[1];
          if (dVar28 <= pdVar16[1]) {
            dVar24 = dVar28;
          }
          pdVar17[1] = dVar24;
          dVar24 = pdVar16[2];
          if (dVar26 <= pdVar16[2]) {
            dVar24 = dVar26;
          }
          pdVar17[2] = dVar24;
          dVar24 = pdVar16[3];
          if (dVar23 <= pdVar16[3]) {
            dVar24 = dVar23;
          }
          lVar9 = *(long *)((long)plVar8 + uVar7);
          pdVar17[3] = dVar24;
          lVar14 = lVar9 + lVar13;
          dVar24 = *(double *)(lVar9 + lVar13);
          if (dVar30 <= dVar24) {
            dVar24 = dVar30;
          }
          *pdVar18 = dVar24;
          dVar30 = *(double *)(lVar14 + 8);
          if (dVar28 <= *(double *)(lVar14 + 8)) {
            dVar30 = dVar28;
          }
          pdVar18[1] = dVar30;
          dVar28 = *(double *)(lVar14 + 0x10);
          if (dVar26 <= *(double *)(lVar14 + 0x10)) {
            dVar28 = dVar26;
          }
          pdVar18[2] = dVar28;
          dVar28 = *(double *)(lVar14 + 0x18);
          if (dVar23 <= *(double *)(lVar14 + 0x18)) {
            dVar28 = dVar23;
          }
          lVar13 = lVar13 + 0x20;
          pdVar20 = pdVar20 + 4;
          pdVar18[3] = dVar28;
          pdVar17 = pdVar17 + 4;
          pdVar16 = pdVar16 + 4;
          pdVar18 = pdVar18 + 4;
        } while (lVar13 != ((ulong)uVar5 + 1) * 0x20);
      }
      if (iVar4 < param_6) {
        lVar19 = plVar8[1];
        lVar9 = *plVar8;
        lVar14 = *(long *)((long)plVar8 + uVar2);
        lVar13 = (long)iVar4 << 3;
        do {
          dVar28 = *(double *)(lVar19 + lVar13);
          plVar8 = param_2;
          dVar26 = dVar28;
          if (uVar3 != 2) {
            do {
              plVar6 = plVar8 + 1;
              dVar28 = *(double *)(*plVar8 + lVar13);
              if (dVar26 <= *(double *)(*plVar8 + lVar13)) {
                dVar28 = dVar26;
              }
              plVar8 = plVar6;
              dVar26 = dVar28;
            } while (plVar15 != plVar6);
          }
          dVar26 = *(double *)(lVar9 + lVar13);
          if (dVar28 <= *(double *)(lVar9 + lVar13)) {
            dVar26 = dVar28;
          }
          *(double *)((long)param_3 + lVar13) = dVar26;
          dVar26 = *(double *)(lVar14 + lVar13);
          if (dVar28 <= dVar26) {
            dVar26 = dVar28;
          }
          *(double *)((long)param_3 + lVar13 + uVar21) = dVar26;
          lVar13 = lVar13 + 8;
        } while (lVar13 != ((long)iVar4 + 1 + (ulong)(uint)((param_6 + -1) - iVar4)) * 8);
      }
      param_5 = param_5 + -2;
      param_3 = (double *)
                ((long)param_3 +
                (-(ulong)(((uint)uVar22 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                (ulong)((uint)uVar22 << 1) << 3));
      plVar15 = plVar15 + 2;
      plVar8 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar5 = param_6 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar4 = 0;
    }
    do {
      plVar15 = param_2 + 1;
      if (0 < param_6 + -3) {
        pdVar20 = (double *)*param_2;
        lVar13 = 0;
        pdVar17 = param_3;
        do {
          dVar24 = *pdVar20;
          dVar26 = pdVar20[1];
          dVar30 = pdVar20[2];
          dVar28 = pdVar20[3];
          if (1 < (int)uVar3) {
            iVar10 = 1;
            plVar8 = plVar15;
            dVar25 = dVar28;
            dVar27 = dVar30;
            dVar29 = dVar26;
            dVar23 = dVar24;
            do {
              lVar9 = *plVar8;
              iVar10 = iVar10 + 1;
              plVar8 = plVar8 + 1;
              lVar14 = lVar9 + lVar13;
              dVar24 = *(double *)(lVar9 + lVar13);
              if (dVar23 <= dVar24) {
                dVar24 = dVar23;
              }
              dVar26 = *(double *)(lVar14 + 8);
              if (dVar29 <= *(double *)(lVar14 + 8)) {
                dVar26 = dVar29;
              }
              dVar30 = *(double *)(lVar14 + 0x10);
              if (dVar27 <= *(double *)(lVar14 + 0x10)) {
                dVar30 = dVar27;
              }
              dVar28 = *(double *)(lVar14 + 0x18);
              if (dVar25 <= *(double *)(lVar14 + 0x18)) {
                dVar28 = dVar25;
              }
              dVar25 = dVar28;
              dVar27 = dVar30;
              dVar29 = dVar26;
              dVar23 = dVar24;
            } while (iVar10 < (int)uVar3);
          }
          lVar13 = lVar13 + 0x20;
          pdVar20 = pdVar20 + 4;
          pdVar17[1] = dVar26;
          *pdVar17 = dVar24;
          pdVar17[3] = dVar28;
          pdVar17[2] = dVar30;
          pdVar17 = pdVar17 + 4;
        } while (lVar13 != ((ulong)uVar5 + 1) * 0x20);
      }
      if (iVar4 < param_6) {
        lVar14 = *param_2;
        lVar13 = (long)iVar4 << 3;
        do {
          dVar28 = *(double *)(lVar14 + lVar13);
          if (1 < (int)uVar3) {
            iVar10 = 1;
            plVar8 = plVar15;
            dVar26 = dVar28;
            do {
              lVar9 = *plVar8;
              iVar10 = iVar10 + 1;
              plVar8 = plVar8 + 1;
              dVar28 = *(double *)(lVar9 + lVar13);
              if (dVar26 <= *(double *)(lVar9 + lVar13)) {
                dVar28 = dVar26;
              }
              dVar26 = dVar28;
            } while (iVar10 < (int)uVar3);
          }
          *(double *)((long)param_3 + lVar13) = dVar28;
          lVar13 = lVar13 + 8;
        } while (lVar13 != ((long)iVar4 + 1 + (ulong)(uint)((param_6 + -1) - iVar4)) * 8);
      }
      param_5 = param_5 + -1;
      param_3 = (double *)
                ((long)param_3 +
                (-(uVar11 >> 0x22 & 1) & 0xfffffff800000000 | (uVar22 & 0xffffffff) << 3));
      param_2 = plVar15;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001debc0 (1092 bytes) name=FUN_001debc0

void FUN_001debc0(long param_1,long *param_2,float *param_3,int param_4,int param_5,int param_6)

{
  long *plVar1;
  undefined8 *puVar2;
  ulong uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  long *plVar7;
  ulong uVar8;
  long *plVar9;
  long lVar10;
  int iVar11;
  ulong uVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  long *plVar16;
  float *pfVar17;
  float *pfVar18;
  float *pfVar19;
  long lVar20;
  float *pfVar21;
  ulong uVar22;
  ulong uVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  
  uVar12 = (ulong)param_4;
  uVar23 = uVar12 >> 2;
  uVar4 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar4)) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    uVar13 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
    plVar16 = param_2 + (ulong)(uVar4 - 3) + 3;
    uVar22 = -(uVar12 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar23 & 0xffffffff) << 2;
    uVar3 = uVar13;
    if ((int)uVar4 < 3) {
      uVar3 = 0x10;
    }
    plVar9 = param_2;
    do {
      param_2 = plVar9 + 2;
      if (0 < param_6 + -3) {
        pfVar21 = (float *)plVar9[1];
        pfVar17 = (float *)*plVar9;
        lVar14 = 0;
        pfVar18 = param_3;
        pfVar19 = (float *)((long)param_3 + uVar22);
        do {
          fVar29 = *pfVar21;
          fVar28 = pfVar21[1];
          fVar27 = pfVar21[2];
          fVar25 = pfVar21[3];
          plVar7 = param_2;
          fVar24 = fVar27;
          fVar26 = fVar29;
          if (uVar4 == 2) {
            uVar8 = 0x10;
          }
          else {
            do {
              plVar1 = plVar7 + 1;
              lVar15 = *plVar7 + lVar14;
              fVar29 = *(float *)(*plVar7 + lVar14);
              if (fVar26 <= fVar29) {
                fVar29 = fVar26;
              }
              fVar27 = *(float *)(lVar15 + 4);
              if (fVar28 <= *(float *)(lVar15 + 4)) {
                fVar27 = fVar28;
              }
              fVar28 = fVar27;
              fVar27 = *(float *)(lVar15 + 8);
              if (fVar24 <= *(float *)(lVar15 + 8)) {
                fVar27 = fVar24;
              }
              fVar24 = *(float *)(lVar15 + 0xc);
              if (fVar25 <= *(float *)(lVar15 + 0xc)) {
                fVar24 = fVar25;
              }
              fVar25 = fVar24;
              uVar8 = uVar13;
              plVar7 = plVar1;
              fVar24 = fVar27;
              fVar26 = fVar29;
            } while (plVar16 != plVar1);
          }
          fVar24 = *pfVar17;
          if (fVar29 <= *pfVar17) {
            fVar24 = fVar29;
          }
          *pfVar18 = fVar24;
          fVar24 = pfVar17[1];
          if (fVar28 <= pfVar17[1]) {
            fVar24 = fVar28;
          }
          pfVar18[1] = fVar24;
          fVar24 = pfVar17[2];
          if (fVar27 <= pfVar17[2]) {
            fVar24 = fVar27;
          }
          pfVar18[2] = fVar24;
          fVar24 = pfVar17[3];
          if (fVar25 <= pfVar17[3]) {
            fVar24 = fVar25;
          }
          lVar10 = *(long *)((long)plVar9 + uVar8);
          pfVar18[3] = fVar24;
          lVar15 = lVar10 + lVar14;
          fVar24 = *(float *)(lVar10 + lVar14);
          if (fVar29 <= fVar24) {
            fVar24 = fVar29;
          }
          *pfVar19 = fVar24;
          fVar29 = *(float *)(lVar15 + 4);
          if (fVar28 <= *(float *)(lVar15 + 4)) {
            fVar29 = fVar28;
          }
          pfVar19[1] = fVar29;
          fVar29 = *(float *)(lVar15 + 8);
          if (fVar27 <= *(float *)(lVar15 + 8)) {
            fVar29 = fVar27;
          }
          pfVar19[2] = fVar29;
          fVar27 = *(float *)(lVar15 + 0xc);
          if (fVar25 <= *(float *)(lVar15 + 0xc)) {
            fVar27 = fVar25;
          }
          lVar14 = lVar14 + 0x10;
          pfVar21 = pfVar21 + 4;
          pfVar19[3] = fVar27;
          pfVar18 = pfVar18 + 4;
          pfVar17 = pfVar17 + 4;
          pfVar19 = pfVar19 + 4;
        } while (lVar14 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar5 < param_6) {
        lVar20 = plVar9[1];
        lVar10 = *plVar9;
        lVar15 = *(long *)((long)plVar9 + uVar3);
        lVar14 = (long)iVar5 << 2;
        do {
          fVar27 = *(float *)(lVar20 + lVar14);
          plVar9 = param_2;
          if (uVar4 != 2) {
            do {
              plVar7 = plVar9 + 1;
              fVar29 = *(float *)(*plVar9 + lVar14);
              if (fVar27 <= *(float *)(*plVar9 + lVar14)) {
                fVar29 = fVar27;
              }
              fVar27 = fVar29;
              plVar9 = plVar7;
            } while (plVar16 != plVar7);
          }
          fVar29 = *(float *)(lVar10 + lVar14);
          if (fVar27 <= *(float *)(lVar10 + lVar14)) {
            fVar29 = fVar27;
          }
          *(float *)((long)param_3 + lVar14) = fVar29;
          fVar29 = *(float *)(lVar15 + lVar14);
          if (fVar27 <= fVar29) {
            fVar29 = fVar27;
          }
          *(float *)((long)param_3 + lVar14 + uVar22) = fVar29;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 4);
      }
      param_5 = param_5 + -2;
      param_3 = (float *)((long)param_3 +
                         (-(ulong)(((uint)uVar23 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                         (ulong)((uint)uVar23 << 1) << 2));
      plVar16 = plVar16 + 2;
      plVar9 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    do {
      plVar16 = param_2 + 1;
      if (0 < param_6 + -3) {
        pfVar21 = (float *)*param_2;
        lVar14 = 0;
        do {
          fVar29 = *pfVar21;
          fVar24 = pfVar21[1];
          fVar27 = pfVar21[2];
          fVar26 = pfVar21[3];
          if (1 < (int)uVar4) {
            iVar11 = 1;
            plVar9 = plVar16;
            fVar28 = fVar27;
            fVar25 = fVar29;
            do {
              lVar10 = *plVar9;
              iVar11 = iVar11 + 1;
              plVar9 = plVar9 + 1;
              lVar15 = lVar10 + lVar14;
              fVar29 = *(float *)(lVar10 + lVar14);
              if (fVar25 <= fVar29) {
                fVar29 = fVar25;
              }
              fVar27 = *(float *)(lVar15 + 4);
              if (fVar24 <= *(float *)(lVar15 + 4)) {
                fVar27 = fVar24;
              }
              fVar24 = fVar27;
              fVar27 = *(float *)(lVar15 + 8);
              if (fVar28 <= *(float *)(lVar15 + 8)) {
                fVar27 = fVar28;
              }
              fVar28 = *(float *)(lVar15 + 0xc);
              if (fVar26 <= *(float *)(lVar15 + 0xc)) {
                fVar28 = fVar26;
              }
              fVar26 = fVar28;
              fVar28 = fVar27;
              fVar25 = fVar29;
            } while (iVar11 < (int)uVar4);
          }
          puVar2 = (undefined8 *)((long)param_3 + lVar14);
          lVar14 = lVar14 + 0x10;
          pfVar21 = pfVar21 + 4;
          puVar2[1] = CONCAT44(fVar26,fVar27);
          *puVar2 = CONCAT44(fVar24,fVar29);
        } while (lVar14 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar5 < param_6) {
        lVar15 = *param_2;
        lVar14 = (long)iVar5 << 2;
        do {
          fVar27 = *(float *)(lVar15 + lVar14);
          if (1 < (int)uVar4) {
            iVar11 = 1;
            plVar9 = plVar16;
            do {
              lVar10 = *plVar9;
              iVar11 = iVar11 + 1;
              plVar9 = plVar9 + 1;
              fVar29 = *(float *)(lVar10 + lVar14);
              if (fVar27 <= *(float *)(lVar10 + lVar14)) {
                fVar29 = fVar27;
              }
              fVar27 = fVar29;
            } while (iVar11 < (int)uVar4);
          }
          *(float *)((long)param_3 + lVar14) = fVar27;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 4);
      }
      param_5 = param_5 + -1;
      param_3 = (float *)((long)param_3 +
                         (-(uVar12 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar23 & 0xffffffff) << 2));
      param_2 = plVar16;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001df004 (1044 bytes) name=FUN_001df004

void FUN_001df004(long param_1,long *param_2,undefined2 *param_3,int param_4,int param_5,int param_6
                 )

{
  short *psVar1;
  ushort *puVar2;
  undefined8 *puVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  ulong uVar8;
  uint uVar9;
  ushort uVar10;
  short sVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  short sVar15;
  uint uVar16;
  uint uVar17;
  long *plVar18;
  short sVar19;
  short sVar20;
  uint uVar21;
  short sVar22;
  uint uVar23;
  int iVar24;
  long *plVar25;
  ulong uVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  long lVar31;
  long *plVar32;
  undefined2 *puVar33;
  ushort *puVar34;
  undefined2 *puVar35;
  short *psVar36;
  ulong uVar37;
  ulong uVar38;
  ulong uVar39;
  long *plVar26;
  
  uVar39 = (ulong)(long)param_4 >> 1;
  uVar9 = *(uint *)(param_1 + 8);
  uVar14 = (uint)uVar39;
  if ((1 < param_5) && (1 < (int)uVar9)) {
    uVar13 = param_6 - 4U >> 2;
    iVar12 = (uVar13 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar12 = 0;
    }
    uVar37 = -(ulong)(uVar9 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar9 << 3;
    plVar32 = param_2 + (ulong)(uVar9 - 3) + 3;
    uVar38 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffe00000000 | (uVar39 & 0xffffffff) << 1;
    uVar8 = uVar37;
    if ((int)uVar9 < 3) {
      uVar8 = 0x10;
    }
    plVar18 = param_2;
    do {
      param_2 = plVar18 + 2;
      if (0 < param_6 + -3) {
        psVar36 = (short *)plVar18[1];
        lVar31 = 0;
        puVar33 = (undefined2 *)((long)param_3 + uVar38);
        puVar34 = (ushort *)*plVar18;
        puVar35 = param_3;
        do {
          uVar23 = (uint)*psVar36;
          uVar21 = (uint)psVar36[1];
          uVar17 = (uint)psVar36[2];
          uVar16 = (uint)psVar36[3];
          plVar25 = param_2;
          if (uVar9 == 2) {
            uVar27 = 0x10;
          }
          else {
            do {
              plVar26 = plVar25 + 1;
              lVar29 = *plVar25 + lVar31;
              uVar10 = *(ushort *)(*plVar25 + lVar31);
              uVar7 = (uint)uVar10;
              if ((int)uVar23 <= (int)(short)uVar10) {
                uVar7 = uVar23;
              }
              uVar4 = (uint)*(ushort *)(lVar29 + 2);
              if ((int)uVar21 <= (int)(short)*(ushort *)(lVar29 + 2)) {
                uVar4 = uVar21;
              }
              uVar5 = (uint)*(ushort *)(lVar29 + 4);
              if ((int)uVar17 <= (int)(short)*(ushort *)(lVar29 + 4)) {
                uVar5 = uVar17;
              }
              uVar6 = (uint)*(ushort *)(lVar29 + 6);
              if ((int)uVar16 <= (int)(short)*(ushort *)(lVar29 + 6)) {
                uVar6 = uVar16;
              }
              uVar23 = (uint)(short)uVar7;
              uVar21 = (uint)(short)uVar4;
              uVar17 = (uint)(short)uVar5;
              uVar16 = (uint)(short)uVar6;
              uVar27 = uVar37;
              plVar25 = plVar26;
            } while (plVar32 != plVar26);
          }
          lVar29 = *(long *)((long)plVar18 + uVar27);
          uVar7 = (uint)*puVar34;
          if ((int)uVar23 <= (int)(short)*puVar34) {
            uVar7 = uVar23;
          }
          *puVar35 = (short)uVar7;
          lVar28 = lVar29 + lVar31;
          psVar36 = psVar36 + 4;
          uVar7 = (uint)puVar34[1];
          if ((int)uVar21 <= (int)(short)puVar34[1]) {
            uVar7 = uVar21;
          }
          puVar35[1] = (short)uVar7;
          uVar7 = (uint)puVar34[2];
          if ((int)uVar17 <= (int)(short)puVar34[2]) {
            uVar7 = uVar17;
          }
          puVar35[2] = (short)uVar7;
          uVar7 = (uint)puVar34[3];
          if ((int)uVar16 <= (int)(short)puVar34[3]) {
            uVar7 = uVar16;
          }
          puVar35[3] = (short)uVar7;
          psVar1 = (short *)(lVar29 + lVar31);
          puVar2 = (ushort *)(lVar29 + lVar31);
          lVar31 = lVar31 + 8;
          uVar7 = (uint)*puVar2;
          if ((int)uVar23 < (int)*psVar1) {
            uVar7 = uVar23;
          }
          *puVar33 = (short)uVar7;
          uVar23 = (uint)*(ushort *)(lVar28 + 2);
          if ((int)uVar21 < (int)*(short *)(lVar28 + 2)) {
            uVar23 = uVar21;
          }
          puVar33[1] = (short)uVar23;
          uVar23 = (uint)*(ushort *)(lVar28 + 4);
          if ((int)uVar17 < (int)*(short *)(lVar28 + 4)) {
            uVar23 = uVar17;
          }
          puVar33[2] = (short)uVar23;
          uVar23 = (uint)*(ushort *)(lVar28 + 6);
          if ((int)uVar16 < (int)*(short *)(lVar28 + 6)) {
            uVar23 = uVar16;
          }
          puVar33[3] = (short)uVar23;
          puVar33 = puVar33 + 4;
          puVar34 = puVar34 + 4;
          puVar35 = puVar35 + 4;
        } while (lVar31 != ((ulong)uVar13 + 1) * 8);
      }
      if (iVar12 < param_6) {
        lVar30 = plVar18[1];
        lVar28 = *plVar18;
        lVar29 = *(long *)((long)plVar18 + uVar8);
        lVar31 = (long)iVar12 << 1;
        do {
          uVar23 = (uint)*(short *)(lVar30 + lVar31);
          plVar18 = param_2;
          if (uVar9 != 2) {
            do {
              plVar25 = plVar18 + 1;
              uVar21 = (uint)*(ushort *)(*plVar18 + lVar31);
              if ((int)uVar23 <= (int)(short)*(ushort *)(*plVar18 + lVar31)) {
                uVar21 = uVar23;
              }
              uVar23 = (uint)(short)uVar21;
              plVar18 = plVar25;
            } while (plVar32 != plVar25);
          }
          uVar21 = (uint)*(ushort *)(lVar28 + lVar31);
          if ((int)uVar23 <= (int)(short)*(ushort *)(lVar28 + lVar31)) {
            uVar21 = uVar23;
          }
          *(short *)((long)param_3 + lVar31) = (short)uVar21;
          uVar10 = *(ushort *)(lVar29 + lVar31);
          uVar21 = (uint)uVar10;
          if ((int)uVar23 <= (int)(short)uVar10) {
            uVar21 = uVar23;
          }
          *(short *)((long)param_3 + lVar31 + uVar38) = (short)uVar21;
          lVar31 = lVar31 + 2;
        } while (lVar31 != ((long)iVar12 + 1 + (ulong)(uint)((param_6 + -1) - iVar12)) * 2);
      }
      param_5 = param_5 + -2;
      plVar32 = plVar32 + 2;
      param_3 = (undefined2 *)
                ((long)param_3 +
                (-(ulong)((uVar14 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                (ulong)(uVar14 << 1) << 1));
      plVar18 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar13 = param_6 - 4U >> 2;
    iVar12 = (uVar13 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar12 = 0;
    }
    do {
      plVar32 = param_2 + 1;
      if (0 < param_6 + -3) {
        psVar36 = (short *)*param_2;
        lVar31 = 0;
        do {
          sVar22 = *psVar36;
          sVar20 = psVar36[1];
          sVar19 = psVar36[2];
          sVar15 = psVar36[3];
          if (1 < (int)uVar9) {
            iVar24 = 1;
            plVar18 = plVar32;
            do {
              iVar24 = iVar24 + 1;
              lVar29 = *plVar18 + lVar31;
              sVar11 = *(short *)(*plVar18 + lVar31);
              if (sVar22 <= sVar11) {
                sVar11 = sVar22;
              }
              sVar22 = sVar11;
              sVar11 = *(short *)(lVar29 + 2);
              if (sVar20 <= *(short *)(lVar29 + 2)) {
                sVar11 = sVar20;
              }
              sVar20 = sVar11;
              sVar11 = *(short *)(lVar29 + 4);
              if (sVar19 <= *(short *)(lVar29 + 4)) {
                sVar11 = sVar19;
              }
              sVar19 = sVar11;
              sVar11 = *(short *)(lVar29 + 6);
              if (sVar15 <= *(short *)(lVar29 + 6)) {
                sVar11 = sVar15;
              }
              sVar15 = sVar11;
              plVar18 = plVar18 + 1;
            } while (iVar24 < (int)uVar9);
          }
          puVar3 = (undefined8 *)((long)param_3 + lVar31);
          lVar31 = lVar31 + 8;
          psVar36 = psVar36 + 4;
          *puVar3 = CONCAT26(sVar15,CONCAT24(sVar19,CONCAT22(sVar20,sVar22)));
        } while (lVar31 != ((ulong)uVar13 + 1) * 8);
      }
      if (iVar12 < param_6) {
        lVar29 = *param_2;
        lVar31 = (long)iVar12 << 1;
        do {
          sVar22 = *(short *)(lVar29 + lVar31);
          if (1 < (int)uVar9) {
            iVar24 = 1;
            plVar18 = plVar32;
            do {
              iVar24 = iVar24 + 1;
              sVar20 = *(short *)(*plVar18 + lVar31);
              if (sVar22 <= *(short *)(*plVar18 + lVar31)) {
                sVar20 = sVar22;
              }
              sVar22 = sVar20;
              plVar18 = plVar18 + 1;
            } while (iVar24 < (int)uVar9);
          }
          *(short *)((long)param_3 + lVar31) = sVar22;
          lVar31 = lVar31 + 2;
        } while (lVar31 != ((long)iVar12 + 1 + (ulong)(uint)((param_6 + -1) - iVar12)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = (undefined2 *)
                ((long)param_3 +
                (-(ulong)(uVar14 >> 0x1f) & 0xfffffffe00000000 | (uVar39 & 0xffffffff) << 1));
      param_2 = plVar32;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001df418 (1028 bytes) name=FUN_001df418

void FUN_001df418(long param_1,long *param_2,ushort *param_3,int param_4,int param_5,int param_6)

{
  undefined8 *puVar1;
  ulong uVar2;
  uint uVar3;
  ushort uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  ushort uVar8;
  long *plVar9;
  ushort uVar10;
  ushort uVar11;
  ushort uVar12;
  int iVar13;
  long *plVar14;
  ulong uVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  long *plVar21;
  ushort *puVar22;
  ushort *puVar23;
  ushort *puVar24;
  ushort *puVar25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  long *plVar15;
  
  uVar28 = (ulong)(long)param_4 >> 1;
  uVar3 = *(uint *)(param_1 + 8);
  uVar7 = (uint)uVar28;
  if ((1 < param_5) && (1 < (int)uVar3)) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    uVar26 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
    plVar21 = param_2 + (ulong)(uVar3 - 3) + 3;
    uVar27 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffe00000000 | (uVar28 & 0xffffffff) << 1;
    uVar2 = uVar26;
    if ((int)uVar3 < 3) {
      uVar2 = 0x10;
    }
    plVar9 = param_2;
    do {
      param_2 = plVar9 + 2;
      if (0 < param_6 + -3) {
        puVar25 = (ushort *)plVar9[1];
        lVar20 = 0;
        puVar22 = (ushort *)((long)param_3 + uVar27);
        puVar23 = (ushort *)*plVar9;
        puVar24 = param_3;
        do {
          uVar12 = *puVar25;
          uVar11 = puVar25[1];
          uVar10 = puVar25[2];
          uVar8 = puVar25[3];
          plVar14 = param_2;
          if (uVar3 == 2) {
            uVar16 = 0x10;
          }
          else {
            do {
              plVar15 = plVar14 + 1;
              lVar18 = *plVar14 + lVar20;
              uVar4 = *(ushort *)(*plVar14 + lVar20);
              if (uVar12 <= uVar4) {
                uVar4 = uVar12;
              }
              uVar12 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 2);
              if (uVar11 <= *(ushort *)(lVar18 + 2)) {
                uVar4 = uVar11;
              }
              uVar11 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 4);
              if (uVar10 <= *(ushort *)(lVar18 + 4)) {
                uVar4 = uVar10;
              }
              uVar10 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 6);
              if (uVar8 <= *(ushort *)(lVar18 + 6)) {
                uVar4 = uVar8;
              }
              uVar8 = uVar4;
              uVar16 = uVar26;
              plVar14 = plVar15;
            } while (plVar21 != plVar15);
          }
          lVar18 = *(long *)((long)plVar9 + uVar16);
          uVar4 = *puVar23;
          if (uVar12 <= *puVar23) {
            uVar4 = uVar12;
          }
          *puVar24 = uVar4;
          lVar17 = lVar18 + lVar20;
          puVar25 = puVar25 + 4;
          uVar4 = puVar23[1];
          if (uVar11 <= puVar23[1]) {
            uVar4 = uVar11;
          }
          puVar24[1] = uVar4;
          uVar4 = puVar23[2];
          if (uVar10 <= puVar23[2]) {
            uVar4 = uVar10;
          }
          puVar24[2] = uVar4;
          uVar4 = puVar23[3];
          if (uVar8 <= puVar23[3]) {
            uVar4 = uVar8;
          }
          puVar24[3] = uVar4;
          uVar4 = *(ushort *)(lVar18 + lVar20);
          lVar20 = lVar20 + 8;
          if (uVar12 < uVar4) {
            uVar4 = uVar12;
          }
          *puVar22 = uVar4;
          uVar12 = *(ushort *)(lVar17 + 2);
          if (uVar11 < *(ushort *)(lVar17 + 2)) {
            uVar12 = uVar11;
          }
          puVar22[1] = uVar12;
          uVar12 = *(ushort *)(lVar17 + 4);
          if (uVar10 < *(ushort *)(lVar17 + 4)) {
            uVar12 = uVar10;
          }
          puVar22[2] = uVar12;
          uVar12 = *(ushort *)(lVar17 + 6);
          if (uVar8 < *(ushort *)(lVar17 + 6)) {
            uVar12 = uVar8;
          }
          puVar22[3] = uVar12;
          puVar22 = puVar22 + 4;
          puVar23 = puVar23 + 4;
          puVar24 = puVar24 + 4;
        } while (lVar20 != ((ulong)uVar6 + 1) * 8);
      }
      if (iVar5 < param_6) {
        lVar19 = plVar9[1];
        lVar17 = *plVar9;
        lVar18 = *(long *)((long)plVar9 + uVar2);
        lVar20 = (long)iVar5 << 1;
        do {
          uVar12 = *(ushort *)(lVar19 + lVar20);
          plVar9 = param_2;
          if (uVar3 != 2) {
            do {
              plVar14 = plVar9 + 1;
              uVar11 = *(ushort *)(*plVar9 + lVar20);
              if (uVar12 <= *(ushort *)(*plVar9 + lVar20)) {
                uVar11 = uVar12;
              }
              uVar12 = uVar11;
              plVar9 = plVar14;
            } while (plVar21 != plVar14);
          }
          uVar11 = *(ushort *)(lVar17 + lVar20);
          if (uVar12 <= *(ushort *)(lVar17 + lVar20)) {
            uVar11 = uVar12;
          }
          *(ushort *)((long)param_3 + lVar20) = uVar11;
          uVar11 = *(ushort *)(lVar18 + lVar20);
          if (uVar12 <= uVar11) {
            uVar11 = uVar12;
          }
          *(ushort *)((long)param_3 + lVar20 + uVar27) = uVar11;
          lVar20 = lVar20 + 2;
        } while (lVar20 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 2);
      }
      param_5 = param_5 + -2;
      plVar21 = plVar21 + 2;
      param_3 = (ushort *)
                ((long)param_3 +
                (-(ulong)((uVar7 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                (ulong)(uVar7 << 1) << 1));
      plVar9 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    uVar6 = param_6 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    if (param_6 + -3 < 1) {
      iVar5 = 0;
    }
    do {
      plVar21 = param_2 + 1;
      if (0 < param_6 + -3) {
        puVar25 = (ushort *)*param_2;
        lVar20 = 0;
        do {
          uVar12 = *puVar25;
          uVar11 = puVar25[1];
          uVar10 = puVar25[2];
          uVar8 = puVar25[3];
          if (1 < (int)uVar3) {
            iVar13 = 1;
            plVar9 = plVar21;
            do {
              iVar13 = iVar13 + 1;
              lVar18 = *plVar9 + lVar20;
              uVar4 = *(ushort *)(*plVar9 + lVar20);
              if (uVar12 <= uVar4) {
                uVar4 = uVar12;
              }
              uVar12 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 2);
              if (uVar11 <= *(ushort *)(lVar18 + 2)) {
                uVar4 = uVar11;
              }
              uVar11 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 4);
              if (uVar10 <= *(ushort *)(lVar18 + 4)) {
                uVar4 = uVar10;
              }
              uVar10 = uVar4;
              uVar4 = *(ushort *)(lVar18 + 6);
              if (uVar8 <= *(ushort *)(lVar18 + 6)) {
                uVar4 = uVar8;
              }
              uVar8 = uVar4;
              plVar9 = plVar9 + 1;
            } while (iVar13 < (int)uVar3);
          }
          puVar1 = (undefined8 *)((long)param_3 + lVar20);
          lVar20 = lVar20 + 8;
          puVar25 = puVar25 + 4;
          *puVar1 = CONCAT26(uVar8,CONCAT24(uVar10,CONCAT22(uVar11,uVar12)));
        } while (lVar20 != ((ulong)uVar6 + 1) * 8);
      }
      if (iVar5 < param_6) {
        lVar18 = *param_2;
        lVar20 = (long)iVar5 << 1;
        do {
          uVar12 = *(ushort *)(lVar18 + lVar20);
          if (1 < (int)uVar3) {
            iVar13 = 1;
            plVar9 = plVar21;
            do {
              iVar13 = iVar13 + 1;
              uVar11 = *(ushort *)(*plVar9 + lVar20);
              if (uVar12 <= *(ushort *)(*plVar9 + lVar20)) {
                uVar11 = uVar12;
              }
              uVar12 = uVar11;
              plVar9 = plVar9 + 1;
            } while (iVar13 < (int)uVar3);
          }
          *(ushort *)((long)param_3 + lVar20) = uVar12;
          lVar20 = lVar20 + 2;
        } while (lVar20 != ((long)iVar5 + 1 + (ulong)(uint)((param_6 + -1) - iVar5)) * 2);
      }
      param_5 = param_5 + -1;
      param_3 = (ushort *)
                ((long)param_3 +
                (-(ulong)(uVar7 >> 0x1f) & 0xfffffffe00000000 | (uVar28 & 0xffffffff) << 1));
      param_2 = plVar21;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001df81c (1184 bytes) name=FUN_001df81c

void FUN_001df81c(long param_1,long *param_2,char *param_3,int param_4,int param_5,int param_6)

{
  byte *pbVar1;
  int iVar2;
  long lVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  undefined *puVar7;
  long *plVar8;
  ulong uVar9;
  long *plVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  char *pcVar14;
  uint uVar15;
  int iVar16;
  long *plVar17;
  long lVar18;
  long *plVar19;
  char *pcVar20;
  ulong uVar21;
  char *pcVar22;
  
  uVar5 = *(uint *)(param_1 + 8);
  if ((1 < param_5) && (1 < (int)uVar5)) {
    iVar6 = param_6 + -3;
    iVar2 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar6 < 1) {
      iVar2 = 0;
    }
    uVar21 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
    plVar19 = param_2 + (ulong)(uVar5 - 3) + 3;
    pcVar20 = param_3 + param_4;
    plVar10 = param_2;
    uVar4 = uVar21;
    if ((int)uVar5 < 3) {
      uVar4 = 0x10;
    }
    do {
      param_2 = plVar10 + 2;
      if (0 < iVar6) {
        lVar18 = 0;
        pcVar14 = param_3;
        pcVar22 = pcVar20;
        do {
          puVar7 = PTR_DAT_00501b38;
          lVar3 = plVar10[1] + lVar18;
          uVar11 = (uint)*(byte *)(plVar10[1] + lVar18);
          uVar15 = (uint)*(byte *)(lVar3 + 1);
          uVar13 = (uint)*(byte *)(lVar3 + 2);
          uVar12 = (uint)*(byte *)(lVar3 + 3);
          plVar8 = param_2;
          if (uVar5 == 2) {
            uVar9 = 0x10;
          }
          else {
            do {
              plVar17 = plVar8 + 1;
              lVar3 = *plVar8 + lVar18;
              uVar11 = uVar11 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar11 - *(byte *)(*plVar8 + lVar18)) + 0x100)] & 0xff
              ;
              uVar15 = uVar15 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar15 - *(byte *)(lVar3 + 1)) + 0x100)] & 0xff;
              uVar13 = uVar13 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar13 - *(byte *)(lVar3 + 2)) + 0x100)] & 0xff;
              uVar12 = uVar12 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar12 - *(byte *)(lVar3 + 3)) + 0x100)] & 0xff;
              uVar9 = uVar21;
              plVar8 = plVar17;
            } while (plVar19 != plVar17);
          }
          lVar3 = *plVar10 + lVar18;
          *pcVar14 = (char)uVar11 -
                     PTR_DAT_00501b38[(int)((uVar11 - *(byte *)(*plVar10 + lVar18)) + 0x100)];
          pcVar14[1] = (char)uVar15 - puVar7[(int)((uVar15 - *(byte *)(lVar3 + 1)) + 0x100)];
          pcVar14[2] = (char)uVar13 - puVar7[(int)((uVar13 - *(byte *)(lVar3 + 2)) + 0x100)];
          pcVar14[3] = (char)uVar12 - puVar7[(int)((uVar12 - *(byte *)(lVar3 + 3)) + 0x100)];
          lVar3 = *(long *)((long)plVar10 + uVar9) + lVar18;
          pbVar1 = (byte *)(*(long *)((long)plVar10 + uVar9) + lVar18);
          lVar18 = lVar18 + 4;
          *pcVar22 = (char)uVar11 - puVar7[(int)((uVar11 - *pbVar1) + 0x100)];
          pcVar22[1] = (char)uVar15 - puVar7[(int)((uVar15 - *(byte *)(lVar3 + 1)) + 0x100)];
          pcVar22[2] = (char)uVar13 - puVar7[(int)((uVar13 - *(byte *)(lVar3 + 2)) + 0x100)];
          pcVar22[3] = (char)uVar12 - puVar7[(int)((uVar12 - *(byte *)(lVar3 + 3)) + 0x100)];
          pcVar14 = pcVar14 + 4;
          pcVar22 = pcVar22 + 4;
        } while ((int)lVar18 < iVar6);
      }
      lVar18 = (long)iVar2;
      if (iVar2 < param_6) {
        do {
          puVar7 = PTR_DAT_00501b38;
          uVar11 = (uint)*(byte *)(plVar10[1] + lVar18);
          plVar8 = param_2;
          if (uVar5 != 2) {
            do {
              plVar17 = plVar8 + 1;
              uVar11 = uVar11 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar11 - *(byte *)(*plVar8 + lVar18)) + 0x100)] & 0xff
              ;
              plVar8 = plVar17;
            } while (plVar19 != plVar17);
          }
          param_3[lVar18] =
               (char)uVar11 -
               PTR_DAT_00501b38[(int)((uVar11 - *(byte *)(*plVar10 + lVar18)) + 0x100)];
          pcVar20[lVar18] =
               (char)uVar11 -
               puVar7[(int)((uVar11 - *(byte *)(*(long *)((long)plVar10 + uVar4) + lVar18)) + 0x100)
                     ];
          lVar18 = lVar18 + 1;
        } while (lVar18 != (long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2));
      }
      param_5 = param_5 + -2;
      param_3 = param_3 + (param_4 << 1);
      pcVar20 = pcVar20 + (param_4 << 1);
      plVar19 = plVar19 + 2;
      plVar10 = param_2;
    } while (1 < param_5);
  }
  if (0 < param_5) {
    iVar6 = param_6 + -3;
    iVar2 = (param_6 - 4U & 0xfffffffc) + 4;
    if (iVar6 < 1) {
      iVar2 = 0;
    }
    do {
      plVar19 = param_2 + 1;
      if (0 < iVar6) {
        lVar18 = 0;
        pcVar20 = param_3;
        do {
          lVar3 = *param_2 + lVar18;
          uVar15 = (uint)*(byte *)(*param_2 + lVar18);
          uVar13 = (uint)*(byte *)(lVar3 + 1);
          uVar12 = (uint)*(byte *)(lVar3 + 2);
          uVar11 = (uint)*(byte *)(lVar3 + 3);
          if (1 < (int)uVar5) {
            iVar16 = 1;
            plVar10 = plVar19;
            do {
              iVar16 = iVar16 + 1;
              lVar3 = *plVar10 + lVar18;
              uVar15 = uVar15 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar15 - *(byte *)(*plVar10 + lVar18)) + 0x100)] &
                       0xff;
              uVar13 = uVar13 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar13 - *(byte *)(lVar3 + 1)) + 0x100)] & 0xff;
              uVar12 = uVar12 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar12 - *(byte *)(lVar3 + 2)) + 0x100)] & 0xff;
              uVar11 = uVar11 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar11 - *(byte *)(lVar3 + 3)) + 0x100)] & 0xff;
              plVar10 = plVar10 + 1;
            } while (iVar16 < (int)uVar5);
          }
          *pcVar20 = (char)uVar15;
          pcVar20[1] = (char)uVar13;
          lVar18 = lVar18 + 4;
          pcVar20[2] = (char)uVar12;
          pcVar20[3] = (char)uVar11;
          pcVar20 = pcVar20 + 4;
        } while ((int)lVar18 < iVar6);
      }
      lVar18 = (long)iVar2;
      if (iVar2 < param_6) {
        do {
          uVar11 = (uint)*(byte *)(*param_2 + lVar18);
          if (1 < (int)uVar5) {
            iVar16 = 1;
            plVar10 = plVar19;
            do {
              iVar16 = iVar16 + 1;
              uVar11 = uVar11 - (byte)PTR_DAT_00501b38
                                      [(int)((uVar11 - *(byte *)(*plVar10 + lVar18)) + 0x100)] &
                       0xff;
              plVar10 = plVar10 + 1;
            } while (iVar16 < (int)uVar5);
          }
          param_3[lVar18] = (char)uVar11;
          lVar18 = lVar18 + 1;
        } while (lVar18 != (long)iVar2 + 1 + (ulong)(uint)((param_6 + -1) - iVar2));
      }
      param_5 = param_5 + -1;
      param_3 = param_3 + param_4;
      param_2 = plVar19;
    } while (param_5 != 0);
  }
  return;
}


==================================================================

### FUNC 001dfcbc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcc0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcc4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcc8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfccc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcd0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcd4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcd8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcdc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfce0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfce4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfce8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcec (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcf0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcf4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcf8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfcfc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd00 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd04 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd08 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd0c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd10 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd14 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd18 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd1c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd20 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd24 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd28 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd2c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd30 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001dfd34 (16 bytes) name=FUN_001dfd34

void FUN_001dfd34(undefined8 *param_1)

{
  *param_1 = &DAT_004f4840;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfd44 (44 bytes) name=FUN_001dfd44

void FUN_001dfd44(undefined8 *param_1)

{
  *param_1 = &DAT_004f4840;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfd70 (16 bytes) name=FUN_001dfd70

void FUN_001dfd70(undefined8 *param_1)

{
  *param_1 = &DAT_004f49f0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfd80 (44 bytes) name=FUN_001dfd80

void FUN_001dfd80(undefined8 *param_1)

{
  *param_1 = &DAT_004f49f0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfdac (16 bytes) name=FUN_001dfdac

void FUN_001dfdac(undefined8 *param_1)

{
  *param_1 = &DAT_004f49c0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfdbc (44 bytes) name=FUN_001dfdbc

void FUN_001dfdbc(undefined8 *param_1)

{
  *param_1 = &DAT_004f49c0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfde8 (16 bytes) name=FUN_001dfde8

void FUN_001dfde8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4990;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfdf8 (44 bytes) name=FUN_001dfdf8

void FUN_001dfdf8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4990;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfe24 (16 bytes) name=FUN_001dfe24

void FUN_001dfe24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4960;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfe34 (44 bytes) name=FUN_001dfe34

void FUN_001dfe34(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4960;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfe60 (16 bytes) name=FUN_001dfe60

void FUN_001dfe60(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4930;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfe70 (44 bytes) name=FUN_001dfe70

void FUN_001dfe70(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4930;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfe9c (16 bytes) name=FUN_001dfe9c

void FUN_001dfe9c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4900;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfeac (44 bytes) name=FUN_001dfeac

void FUN_001dfeac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4900;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dfed8 (16 bytes) name=FUN_001dfed8

void FUN_001dfed8(undefined8 *param_1)

{
  *param_1 = &DAT_004f48d0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dfee8 (44 bytes) name=FUN_001dfee8

void FUN_001dfee8(undefined8 *param_1)

{
  *param_1 = &DAT_004f48d0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dff14 (16 bytes) name=FUN_001dff14

void FUN_001dff14(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f48a0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dff24 (44 bytes) name=FUN_001dff24

void FUN_001dff24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f48a0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dff50 (16 bytes) name=FUN_001dff50

void FUN_001dff50(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4870;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001dff60 (44 bytes) name=FUN_001dff60

void FUN_001dff60(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4870;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001dff8c (64 bytes) name=FUN_001dff8c

void FUN_001dff8c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb650;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001dffcc (72 bytes) name=FUN_001dffcc

void FUN_001dffcc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb650;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0014 (64 bytes) name=FUN_001e0014

void FUN_001e0014(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb620;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e0054 (72 bytes) name=FUN_001e0054

void FUN_001e0054(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb620;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e009c (64 bytes) name=FUN_001e009c

void FUN_001e009c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb5f0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e00dc (72 bytes) name=FUN_001e00dc

void FUN_001e00dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb5f0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0124 (64 bytes) name=FUN_001e0124

void FUN_001e0124(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb5c0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e0164 (72 bytes) name=FUN_001e0164

void FUN_001e0164(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb5c0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e01ac (64 bytes) name=FUN_001e01ac

void FUN_001e01ac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb590;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e01ec (72 bytes) name=FUN_001e01ec

void FUN_001e01ec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb590;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0234 (64 bytes) name=FUN_001e0234

void FUN_001e0234(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb560;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e0274 (72 bytes) name=FUN_001e0274

void FUN_001e0274(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb560;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e02bc (64 bytes) name=FUN_001e02bc

void FUN_001e02bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb530;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e02fc (72 bytes) name=FUN_001e02fc

void FUN_001e02fc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb530;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0344 (64 bytes) name=FUN_001e0344

void FUN_001e0344(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb500;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e0384 (72 bytes) name=FUN_001e0384

void FUN_001e0384(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb500;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e03cc (64 bytes) name=FUN_001e03cc

void FUN_001e03cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb4d0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e040c (72 bytes) name=FUN_001e040c

void FUN_001e040c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb4d0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0454 (64 bytes) name=FUN_001e0454

void FUN_001e0454(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb4a0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  return;
}


==================================================================

### FUNC 001e0494 (72 bytes) name=FUN_001e0494

void FUN_001e0494(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb4a0;
  if ((void *)param_1[6] != (void *)0x0) {
    operator_delete((void *)param_1[6]);
  }
  if ((void *)param_1[3] != (void *)0x0) {
    operator_delete((void *)param_1[3]);
  }
  FUN_001c8d44(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e04dc (16 bytes) name=FUN_001e04dc

void FUN_001e04dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb470;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e04ec (44 bytes) name=FUN_001e04ec

void FUN_001e04ec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb470;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0518 (16 bytes) name=FUN_001e0518

void FUN_001e0518(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb440;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0528 (44 bytes) name=FUN_001e0528

void FUN_001e0528(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb440;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0554 (16 bytes) name=FUN_001e0554

void FUN_001e0554(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb410;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0564 (44 bytes) name=FUN_001e0564

void FUN_001e0564(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb410;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0590 (16 bytes) name=FUN_001e0590

void FUN_001e0590(undefined8 *param_1)

{
  *param_1 = &DAT_004fb3e0;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e05a0 (44 bytes) name=FUN_001e05a0

void FUN_001e05a0(undefined8 *param_1)

{
  *param_1 = &DAT_004fb3e0;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e05cc (16 bytes) name=FUN_001e05cc

void FUN_001e05cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb3b0;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e05dc (44 bytes) name=FUN_001e05dc

void FUN_001e05dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb3b0;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0608 (16 bytes) name=FUN_001e0608

void FUN_001e0608(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb380;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0618 (44 bytes) name=FUN_001e0618

void FUN_001e0618(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb380;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0644 (16 bytes) name=FUN_001e0644

void FUN_001e0644(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb350;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0654 (44 bytes) name=FUN_001e0654

void FUN_001e0654(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb350;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0680 (16 bytes) name=FUN_001e0680

void FUN_001e0680(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb320;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0690 (44 bytes) name=FUN_001e0690

void FUN_001e0690(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb320;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e06bc (16 bytes) name=FUN_001e06bc

void FUN_001e06bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb2f0;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e06cc (44 bytes) name=FUN_001e06cc

void FUN_001e06cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb2f0;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e06f8 (16 bytes) name=FUN_001e06f8

void FUN_001e06f8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb2c0;
  FUN_001c8d24();
  return;
}


==================================================================

### FUNC 001e0708 (44 bytes) name=FUN_001e0708

void FUN_001e0708(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fb2c0;
  FUN_001c8d24();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e0734 (32 bytes) name=FUN_001e0734

void FUN_001e0734(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 001e0754 (1196 bytes) name=FUN_001e0754

void FUN_001e0754(long param_1,byte *param_2,byte *param_3,int param_4,int param_5)

{
  uint uVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  undefined *puVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  byte *pbVar13;
  long lVar14;
  byte *pbVar15;
  int iVar16;
  byte *pbVar17;
  undefined8 uVar18;
  
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (iVar4 == param_5) {
    uVar10 = iVar4 * param_4;
    if (0 < (int)uVar10) {
      if ((uVar10 < 0x16) || (param_3 < param_2 + 0x10 && param_2 < param_3 + 0x10)) {
        lVar14 = 0;
        do {
          param_3[lVar14] = param_2[lVar14];
          lVar14 = lVar14 + 1;
        } while (uVar10 - (int)lVar14 != 0 && (int)lVar14 <= (int)uVar10);
        return;
      }
      uVar9 = -(int)param_2 & 0xf;
      uVar6 = uVar10;
      if (uVar9 <= uVar10 && uVar10 - uVar9 != 0) {
        uVar6 = uVar9;
      }
      uVar9 = uVar6;
      if ((((uVar6 != 0) && (*param_3 = *param_2, uVar6 != 1)) &&
          (param_3[1] = param_2[1], uVar6 != 2)) &&
         ((param_3[2] = param_2[2], uVar6 != 3 && (param_3[3] = param_2[3], uVar6 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar6 == 5) {
          uVar9 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (((uVar6 != 6) && (param_3[6] = param_2[6], uVar6 != 7)) &&
             ((param_3[7] = param_2[7], uVar6 != 8 &&
              ((((param_3[8] = param_2[8], uVar6 != 9 && (param_3[9] = param_2[9], uVar6 != 10)) &&
                (param_3[10] = param_2[10], uVar6 != 0xb)) &&
               ((param_3[0xb] = param_2[0xb], uVar6 != 0xc &&
                (param_3[0xc] = param_2[0xc], uVar6 != 0xd)))))))) {
            param_3[0xd] = param_2[0xd];
            if (uVar6 == 0xf) {
              param_3[0xe] = param_2[0xe];
            }
            else {
              uVar9 = 0xe;
            }
          }
        }
      }
      uVar1 = ((uVar10 - uVar6) - 0x10 >> 4) + 1;
      iVar4 = uVar1 * 0x10;
      if (0xe < (uVar10 - 1) - uVar6) {
        uVar11 = 0;
        pbVar8 = param_2 + uVar6;
        pbVar15 = param_3 + uVar6;
        do {
          uVar18 = *(undefined8 *)pbVar8;
          uVar11 = uVar11 + 1;
          *(undefined8 *)(pbVar15 + 8) = *(undefined8 *)(pbVar8 + 8);
          *(undefined8 *)pbVar15 = uVar18;
          pbVar8 = pbVar8 + 0x10;
          pbVar15 = pbVar15 + 0x10;
        } while (uVar11 < uVar1);
        uVar9 = uVar9 + iVar4;
        if (iVar4 == uVar10 - uVar6) {
          return;
        }
      }
      iVar4 = uVar9 + 1;
      param_3[(int)uVar9] = param_2[(int)uVar9];
      if (iVar4 < (int)uVar10) {
        iVar3 = uVar9 + 2;
        param_3[iVar4] = param_2[iVar4];
        if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
          iVar4 = uVar9 + 3;
          param_3[iVar3] = param_2[iVar3];
          if (iVar4 < (int)uVar10) {
            iVar3 = uVar9 + 4;
            param_3[iVar4] = param_2[iVar4];
            if (iVar3 < (int)uVar10) {
              iVar4 = uVar9 + 5;
              param_3[iVar3] = param_2[iVar3];
              if (iVar4 < (int)uVar10) {
                iVar3 = uVar9 + 6;
                param_3[iVar4] = param_2[iVar4];
                if (iVar3 < (int)uVar10) {
                  iVar4 = uVar9 + 7;
                  param_3[iVar3] = param_2[iVar3];
                  if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                    iVar3 = uVar9 + 8;
                    param_3[iVar4] = param_2[iVar4];
                    if (iVar3 < (int)uVar10) {
                      iVar4 = uVar9 + 9;
                      param_3[iVar3] = param_2[iVar3];
                      if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                        iVar3 = uVar9 + 10;
                        param_3[iVar4] = param_2[iVar4];
                        if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                          iVar4 = uVar9 + 0xb;
                          param_3[iVar3] = param_2[iVar3];
                          if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                            iVar3 = uVar9 + 0xc;
                            param_3[iVar4] = param_2[iVar4];
                            if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                              iVar4 = uVar9 + 0xd;
                              param_3[iVar3] = param_2[iVar3];
                              if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                                iVar3 = uVar9 + 0xe;
                                param_3[iVar4] = param_2[iVar4];
                                if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                                  param_3[iVar3] = param_2[iVar3];
                                  return;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < param_5) {
      iVar3 = param_5 * 2;
      lVar14 = (long)param_5;
      iVar5 = param_4 + param_5 * -2;
      pbVar8 = param_3 + (ulong)(param_5 - 1) + 1;
      do {
        if (iVar5 < 0) {
          iVar16 = 0;
        }
        else {
          iVar16 = 0;
          pbVar17 = param_2;
          pbVar15 = param_3;
          do {
            puVar7 = PTR_DAT_00501b38;
            uVar10 = (uint)pbVar17[lVar14];
            iVar12 = iVar3;
            if (iVar3 < iVar4) {
              pbVar13 = pbVar17 + iVar3;
              do {
                bVar2 = *pbVar13;
                iVar12 = iVar12 + param_5;
                pbVar13 = pbVar13 + lVar14;
                uVar10 = uVar10 - (byte)PTR_DAT_00501b38[(int)((uVar10 - bVar2) + 0x100)] & 0xff;
              } while (iVar12 < iVar4);
            }
            iVar16 = iVar16 + iVar3;
            *pbVar15 = (char)uVar10 - PTR_DAT_00501b38[(int)((uVar10 - *pbVar17) + 0x100)];
            pbVar15[lVar14] = (char)uVar10 - puVar7[(int)((uVar10 - pbVar17[iVar12]) + 0x100)];
            pbVar15 = pbVar15 + iVar3;
            pbVar17 = pbVar17 + iVar3;
          } while (iVar16 <= iVar5);
        }
        if (iVar16 < param_4) {
          pbVar15 = param_3 + iVar16;
          pbVar17 = param_2 + lVar14 + iVar16;
          do {
            uVar10 = (uint)pbVar17[-lVar14];
            pbVar13 = pbVar17;
            for (iVar12 = param_5; iVar12 < iVar4; iVar12 = iVar12 + param_5) {
              bVar2 = *pbVar13;
              pbVar13 = pbVar13 + lVar14;
              uVar10 = uVar10 - (byte)PTR_DAT_00501b38[(int)((uVar10 - bVar2) + 0x100)] & 0xff;
            }
            iVar16 = iVar16 + param_5;
            *pbVar15 = (byte)uVar10;
            pbVar15 = pbVar15 + lVar14;
            pbVar17 = pbVar17 + lVar14;
          } while (iVar16 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pbVar8);
    }
  }
  return;
}


==================================================================

### FUNC 001e0c00 (1196 bytes) name=FUN_001e0c00

void FUN_001e0c00(long param_1,byte *param_2,byte *param_3,int param_4,int param_5)

{
  uint uVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  undefined *puVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  byte *pbVar13;
  long lVar14;
  byte *pbVar15;
  int iVar16;
  byte *pbVar17;
  undefined8 uVar18;
  
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (iVar4 == param_5) {
    uVar10 = iVar4 * param_4;
    if (0 < (int)uVar10) {
      if ((uVar10 < 0x16) || (param_3 < param_2 + 0x10 && param_2 < param_3 + 0x10)) {
        lVar14 = 0;
        do {
          param_3[lVar14] = param_2[lVar14];
          lVar14 = lVar14 + 1;
        } while (uVar10 - (int)lVar14 != 0 && (int)lVar14 <= (int)uVar10);
        return;
      }
      uVar9 = -(int)param_2 & 0xf;
      uVar6 = uVar10;
      if (uVar9 <= uVar10 && uVar10 - uVar9 != 0) {
        uVar6 = uVar9;
      }
      uVar9 = uVar6;
      if ((((uVar6 != 0) && (*param_3 = *param_2, uVar6 != 1)) &&
          (param_3[1] = param_2[1], uVar6 != 2)) &&
         ((param_3[2] = param_2[2], uVar6 != 3 && (param_3[3] = param_2[3], uVar6 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar6 == 5) {
          uVar9 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (((uVar6 != 6) && (param_3[6] = param_2[6], uVar6 != 7)) &&
             ((param_3[7] = param_2[7], uVar6 != 8 &&
              ((((param_3[8] = param_2[8], uVar6 != 9 && (param_3[9] = param_2[9], uVar6 != 10)) &&
                (param_3[10] = param_2[10], uVar6 != 0xb)) &&
               ((param_3[0xb] = param_2[0xb], uVar6 != 0xc &&
                (param_3[0xc] = param_2[0xc], uVar6 != 0xd)))))))) {
            param_3[0xd] = param_2[0xd];
            if (uVar6 == 0xf) {
              param_3[0xe] = param_2[0xe];
            }
            else {
              uVar9 = 0xe;
            }
          }
        }
      }
      uVar1 = ((uVar10 - uVar6) - 0x10 >> 4) + 1;
      iVar4 = uVar1 * 0x10;
      if (0xe < (uVar10 - 1) - uVar6) {
        uVar11 = 0;
        pbVar8 = param_2 + uVar6;
        pbVar15 = param_3 + uVar6;
        do {
          uVar18 = *(undefined8 *)pbVar8;
          uVar11 = uVar11 + 1;
          *(undefined8 *)(pbVar15 + 8) = *(undefined8 *)(pbVar8 + 8);
          *(undefined8 *)pbVar15 = uVar18;
          pbVar8 = pbVar8 + 0x10;
          pbVar15 = pbVar15 + 0x10;
        } while (uVar11 < uVar1);
        uVar9 = uVar9 + iVar4;
        if (iVar4 == uVar10 - uVar6) {
          return;
        }
      }
      iVar4 = uVar9 + 1;
      param_3[(int)uVar9] = param_2[(int)uVar9];
      if (iVar4 < (int)uVar10) {
        iVar3 = uVar9 + 2;
        param_3[iVar4] = param_2[iVar4];
        if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
          iVar4 = uVar9 + 3;
          param_3[iVar3] = param_2[iVar3];
          if (iVar4 < (int)uVar10) {
            iVar3 = uVar9 + 4;
            param_3[iVar4] = param_2[iVar4];
            if (iVar3 < (int)uVar10) {
              iVar4 = uVar9 + 5;
              param_3[iVar3] = param_2[iVar3];
              if (iVar4 < (int)uVar10) {
                iVar3 = uVar9 + 6;
                param_3[iVar4] = param_2[iVar4];
                if (iVar3 < (int)uVar10) {
                  iVar4 = uVar9 + 7;
                  param_3[iVar3] = param_2[iVar3];
                  if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                    iVar3 = uVar9 + 8;
                    param_3[iVar4] = param_2[iVar4];
                    if (iVar3 < (int)uVar10) {
                      iVar4 = uVar9 + 9;
                      param_3[iVar3] = param_2[iVar3];
                      if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                        iVar3 = uVar9 + 10;
                        param_3[iVar4] = param_2[iVar4];
                        if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                          iVar4 = uVar9 + 0xb;
                          param_3[iVar3] = param_2[iVar3];
                          if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                            iVar3 = uVar9 + 0xc;
                            param_3[iVar4] = param_2[iVar4];
                            if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                              iVar4 = uVar9 + 0xd;
                              param_3[iVar3] = param_2[iVar3];
                              if (uVar10 - iVar4 != 0 && iVar4 <= (int)uVar10) {
                                iVar3 = uVar9 + 0xe;
                                param_3[iVar4] = param_2[iVar4];
                                if (uVar10 - iVar3 != 0 && iVar3 <= (int)uVar10) {
                                  param_3[iVar3] = param_2[iVar3];
                                  return;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < param_5) {
      iVar3 = param_5 * 2;
      lVar14 = (long)param_5;
      iVar5 = param_4 + param_5 * -2;
      pbVar8 = param_3 + (ulong)(param_5 - 1) + 1;
      do {
        if (iVar5 < 0) {
          iVar16 = 0;
        }
        else {
          iVar16 = 0;
          pbVar17 = param_2;
          pbVar15 = param_3;
          do {
            puVar7 = PTR_DAT_00501b38;
            uVar10 = (uint)pbVar17[lVar14];
            iVar12 = iVar3;
            if (iVar3 < iVar4) {
              pbVar13 = pbVar17 + iVar3;
              do {
                bVar2 = *pbVar13;
                iVar12 = iVar12 + param_5;
                pbVar13 = pbVar13 + lVar14;
                uVar10 = (byte)PTR_DAT_00501b38[(int)((bVar2 - uVar10) + 0x100)] + uVar10 & 0xff;
              } while (iVar12 < iVar4);
            }
            iVar16 = iVar16 + iVar3;
            *pbVar15 = (char)uVar10 + PTR_DAT_00501b38[(int)((*pbVar17 - uVar10) + 0x100)];
            pbVar15[lVar14] = (char)uVar10 + puVar7[(int)((pbVar17[iVar12] - uVar10) + 0x100)];
            pbVar15 = pbVar15 + iVar3;
            pbVar17 = pbVar17 + iVar3;
          } while (iVar16 <= iVar5);
        }
        if (iVar16 < param_4) {
          pbVar15 = param_3 + iVar16;
          pbVar17 = param_2 + lVar14 + iVar16;
          do {
            uVar10 = (uint)pbVar17[-lVar14];
            pbVar13 = pbVar17;
            for (iVar12 = param_5; iVar12 < iVar4; iVar12 = iVar12 + param_5) {
              bVar2 = *pbVar13;
              pbVar13 = pbVar13 + lVar14;
              uVar10 = (byte)PTR_DAT_00501b38[(int)((bVar2 - uVar10) + 0x100)] + uVar10 & 0xff;
            }
            iVar16 = iVar16 + param_5;
            *pbVar15 = (byte)uVar10;
            pbVar15 = pbVar15 + lVar14;
            pbVar17 = pbVar17 + lVar14;
          } while (iVar16 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pbVar8);
    }
  }
  return;
}


==================================================================

### FUNC 001e10ac (552 bytes) name=FUN_001e10ac

void FUN_001e10ac(long param_1,double *param_2,double *param_3,int param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  double *pdVar6;
  uint uVar7;
  double *pdVar8;
  int iVar9;
  double *pdVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  long lVar15;
  double dVar16;
  double dVar17;
  
  uVar2 = param_5 * *(int *)(param_1 + 8);
  if (uVar2 == param_5) {
    uVar2 = uVar2 * param_4;
    if (0 < (int)uVar2) {
      if ((uVar2 < 0xe) || (param_3 < param_2 + 2 && param_2 < param_3 + 2)) {
        lVar15 = 0;
        do {
          param_3[lVar15] = param_2[lVar15];
          lVar15 = lVar15 + 1;
        } while ((int)lVar15 < (int)uVar2);
        return;
      }
      uVar1 = (uint)((ulong)param_2 >> 3) & 1;
      if (uVar2 < uVar1) {
        uVar1 = uVar2;
      }
      if (uVar1 != 0) {
        *param_3 = *param_2;
      }
      uVar4 = ((uVar2 - uVar1) - 2 >> 1) + 1;
      uVar7 = 0;
      iVar3 = uVar4 * 2;
      pdVar6 = param_3 + uVar1;
      pdVar5 = param_2 + uVar1;
      do {
        dVar17 = *pdVar5;
        uVar7 = uVar7 + 1;
        pdVar6[1] = pdVar5[1];
        *pdVar6 = dVar17;
        pdVar6 = pdVar6 + 2;
        pdVar5 = pdVar5 + 2;
      } while (uVar7 < uVar4);
      uVar4 = (uint)(uVar1 != 0) + iVar3;
      if (uVar2 - uVar1 != iVar3) {
        uVar14 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
        *(undefined8 *)((long)param_3 + uVar14) = *(undefined8 *)((long)param_2 + uVar14);
        return;
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar1 = param_5 * 2;
      lVar15 = (long)(int)param_5;
      iVar3 = param_4 + param_5 * -2;
      pdVar6 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar14 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      do {
        if (iVar3 < 0) {
          iVar9 = 0;
        }
        else {
          iVar9 = 0;
          pdVar10 = param_2;
          pdVar5 = param_3;
          do {
            dVar17 = pdVar10[lVar15];
            uVar4 = uVar1;
            if ((int)uVar1 < (int)uVar2) {
              pdVar8 = (double *)(uVar14 + (long)pdVar10);
              dVar16 = dVar17;
              do {
                dVar17 = *pdVar8;
                uVar4 = uVar4 + param_5;
                pdVar8 = pdVar8 + lVar15;
                if (dVar17 <= dVar16) {
                  dVar17 = dVar16;
                }
                dVar16 = dVar17;
              } while ((int)uVar4 < (int)uVar2);
            }
            dVar16 = *pdVar10;
            if (*pdVar10 <= dVar17) {
              dVar16 = dVar17;
            }
            *pdVar5 = dVar16;
            dVar16 = pdVar10[(int)uVar4];
            if (pdVar10[(int)uVar4] <= dVar17) {
              dVar16 = dVar17;
            }
            iVar9 = iVar9 + uVar1;
            pdVar5[lVar15] = dVar16;
            pdVar5 = (double *)((long)pdVar5 + uVar14);
            pdVar10 = (double *)(uVar14 + (long)pdVar10);
          } while (iVar9 <= iVar3);
        }
        if (iVar9 < param_4) {
          lVar12 = (long)iVar9;
          lVar11 = 0;
          lVar13 = lVar12 * 8;
          do {
            dVar17 = *(double *)((long)param_2 + lVar11 + lVar13);
            if ((int)param_5 < (int)uVar2) {
              pdVar5 = (double *)((long)param_2 + lVar11 + (lVar12 + lVar15) * 8);
              dVar16 = dVar17;
              uVar4 = param_5;
              do {
                dVar17 = *pdVar5;
                uVar4 = uVar4 + param_5;
                pdVar5 = pdVar5 + lVar15;
                if (dVar17 <= dVar16) {
                  dVar17 = dVar16;
                }
                dVar16 = dVar17;
              } while ((int)uVar4 < (int)uVar2);
            }
            iVar9 = iVar9 + param_5;
            *(double *)((long)param_3 + lVar11 + lVar13) = dVar17;
            lVar11 = lVar11 + lVar15 * 8;
          } while (iVar9 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pdVar6);
    }
  }
  return;
}


==================================================================

### FUNC 001e12d4 (648 bytes) name=FUN_001e12d4

void FUN_001e12d4(long param_1,float *param_2,float *param_3,int param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  float *pfVar6;
  float *pfVar7;
  float *pfVar8;
  uint uVar9;
  int iVar10;
  float *pfVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  ulong uVar15;
  long lVar16;
  float fVar17;
  undefined8 uVar18;
  float fVar19;
  
  uVar3 = param_5 * *(int *)(param_1 + 8);
  if (uVar3 == param_5) {
    uVar3 = uVar3 * param_4;
    if (0 < (int)uVar3) {
      if ((uVar3 < 0xc) || (param_3 < param_2 + 4 && param_2 < param_3 + 4)) {
        lVar16 = 0;
        do {
          param_3[lVar16] = param_2[lVar16];
          lVar16 = lVar16 + 1;
        } while ((int)lVar16 < (int)uVar3);
        return;
      }
      uVar2 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
      if (uVar3 < uVar2) {
        uVar2 = uVar3;
      }
      uVar5 = uVar2;
      if ((uVar2 != 0) && (*param_3 = *param_2, uVar2 != 1)) {
        param_3[1] = param_2[1];
        if (uVar2 == 3) {
          param_3[2] = param_2[2];
        }
        else {
          uVar5 = 2;
        }
      }
      uVar1 = ((uVar3 - uVar2) - 4 >> 2) + 1;
      uVar9 = 0;
      iVar4 = uVar1 * 4;
      pfVar7 = param_3 + uVar2;
      pfVar6 = param_2 + uVar2;
      do {
        uVar18 = *(undefined8 *)pfVar6;
        uVar9 = uVar9 + 1;
        *(undefined8 *)(pfVar7 + 2) = *(undefined8 *)(pfVar6 + 2);
        *(undefined8 *)pfVar7 = uVar18;
        pfVar7 = pfVar7 + 4;
        pfVar6 = pfVar6 + 4;
      } while (uVar9 < uVar1);
      uVar5 = uVar5 + iVar4;
      if (uVar3 - uVar2 != iVar4) {
        uVar15 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
        *(undefined4 *)((long)param_3 + uVar15) = *(undefined4 *)((long)param_2 + uVar15);
        if (((int)(uVar5 + 1) < (int)uVar3) &&
           (*(undefined4 *)((long)param_3 + uVar15 + 4) =
                 *(undefined4 *)((long)param_2 + uVar15 + 4), (int)(uVar5 + 2) < (int)uVar3)) {
          *(undefined4 *)((long)param_3 + uVar15 + 8) = *(undefined4 *)((long)param_2 + uVar15 + 8);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar2 = param_5 * 2;
      lVar16 = (long)(int)param_5;
      iVar4 = param_4 + param_5 * -2;
      pfVar7 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar15 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      do {
        if (iVar4 < 0) {
          iVar10 = 0;
        }
        else {
          iVar10 = 0;
          pfVar11 = param_2;
          pfVar6 = param_3;
          do {
            fVar19 = pfVar11[lVar16];
            uVar5 = uVar2;
            if ((int)uVar2 < (int)uVar3) {
              pfVar8 = (float *)(uVar15 + (long)pfVar11);
              do {
                fVar17 = *pfVar8;
                uVar5 = uVar5 + param_5;
                pfVar8 = pfVar8 + lVar16;
                if (fVar17 <= fVar19) {
                  fVar17 = fVar19;
                }
                fVar19 = fVar17;
              } while ((int)uVar5 < (int)uVar3);
            }
            fVar17 = *pfVar11;
            if (*pfVar11 <= fVar19) {
              fVar17 = fVar19;
            }
            *pfVar6 = fVar17;
            fVar17 = pfVar11[(int)uVar5];
            if (pfVar11[(int)uVar5] <= fVar19) {
              fVar17 = fVar19;
            }
            iVar10 = iVar10 + uVar2;
            pfVar6[lVar16] = fVar17;
            pfVar6 = (float *)((long)pfVar6 + uVar15);
            pfVar11 = (float *)(uVar15 + (long)pfVar11);
          } while (iVar10 <= iVar4);
        }
        if (iVar10 < param_4) {
          lVar13 = (long)iVar10;
          lVar12 = 0;
          lVar14 = lVar13 * 4;
          do {
            fVar19 = *(float *)((long)param_2 + lVar12 + lVar14);
            if ((int)param_5 < (int)uVar3) {
              pfVar6 = (float *)((long)param_2 + lVar12 + (lVar16 + lVar13) * 4);
              uVar5 = param_5;
              do {
                fVar17 = *pfVar6;
                uVar5 = uVar5 + param_5;
                pfVar6 = pfVar6 + lVar16;
                if (fVar17 <= fVar19) {
                  fVar17 = fVar19;
                }
                fVar19 = fVar17;
              } while ((int)uVar5 < (int)uVar3);
            }
            iVar10 = iVar10 + param_5;
            *(float *)((long)param_3 + lVar12 + lVar14) = fVar19;
            lVar12 = lVar12 + lVar16 * 4;
          } while (iVar10 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pfVar7);
    }
  }
  return;
}


==================================================================

### FUNC 001e155c (844 bytes) name=FUN_001e155c

void FUN_001e155c(long param_1,ushort *param_2,ushort *param_3,int param_4,uint param_5)

{
  uint uVar1;
  ushort uVar2;
  short sVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  short sVar7;
  uint uVar8;
  ushort *puVar9;
  ulong uVar10;
  short *psVar11;
  uint uVar12;
  ushort *puVar13;
  ushort *puVar14;
  int iVar15;
  ushort *puVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  ulong uVar20;
  long lVar21;
  undefined8 uVar22;
  
  uVar5 = param_5 * *(int *)(param_1 + 8);
  if (uVar5 == param_5) {
    uVar5 = uVar5 * param_4;
    if (0 < (int)uVar5) {
      if ((uVar5 < 0xf) || (param_3 < param_2 + 8 && param_2 < param_3 + 8)) {
        lVar21 = 0;
        do {
          param_3[lVar21] = param_2[lVar21];
          lVar21 = lVar21 + 1;
        } while ((int)lVar21 < (int)uVar5);
        return;
      }
      uVar4 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
      if (uVar5 < uVar4) {
        uVar4 = uVar5;
      }
      uVar8 = uVar4;
      if ((((uVar4 != 0) && (*param_3 = *param_2, uVar4 != 1)) &&
          (param_3[1] = param_2[1], uVar4 != 2)) &&
         ((param_3[2] = param_2[2], uVar4 != 3 && (param_3[3] = param_2[3], uVar4 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar4 == 5) {
          uVar8 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (uVar4 == 7) {
            param_3[6] = param_2[6];
          }
          else {
            uVar8 = 6;
          }
        }
      }
      uVar1 = ((uVar5 - uVar4) - 8 >> 3) + 1;
      uVar12 = 0;
      iVar6 = uVar1 * 8;
      puVar9 = param_3 + uVar4;
      puVar14 = param_2 + uVar4;
      do {
        uVar22 = *(undefined8 *)puVar14;
        uVar12 = uVar12 + 1;
        *(undefined8 *)(puVar9 + 4) = *(undefined8 *)(puVar14 + 4);
        *(undefined8 *)puVar9 = uVar22;
        puVar9 = puVar9 + 8;
        puVar14 = puVar14 + 8;
      } while (uVar12 < uVar1);
      uVar8 = uVar8 + iVar6;
      if (iVar6 != uVar5 - uVar4) {
        uVar20 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        *(undefined2 *)((long)param_3 + uVar20) = *(undefined2 *)((long)param_2 + uVar20);
        if ((((int)(uVar8 + 1) < (int)uVar5) &&
            (*(undefined2 *)((long)param_3 + uVar20 + 2) =
                  *(undefined2 *)((long)param_2 + uVar20 + 2), (int)(uVar8 + 2) < (int)uVar5)) &&
           ((*(undefined2 *)((long)param_3 + uVar20 + 4) =
                  *(undefined2 *)((long)param_2 + uVar20 + 4), (int)(uVar8 + 3) < (int)uVar5 &&
            (((*(undefined2 *)((long)param_3 + uVar20 + 6) =
                    *(undefined2 *)((long)param_2 + uVar20 + 6), (int)(uVar8 + 4) < (int)uVar5 &&
              (*(undefined2 *)((long)param_3 + uVar20 + 8) =
                    *(undefined2 *)((long)param_2 + uVar20 + 8), (int)(uVar8 + 5) < (int)uVar5)) &&
             (*(undefined2 *)((long)param_3 + uVar20 + 10) =
                   *(undefined2 *)((long)param_2 + uVar20 + 10), (int)(uVar8 + 6) < (int)uVar5))))))
        {
          *(undefined2 *)((long)param_3 + uVar20 + 0xc) =
               *(undefined2 *)((long)param_2 + uVar20 + 0xc);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar4 = param_5 * 2;
      lVar21 = (long)(int)param_5;
      iVar6 = param_4 + param_5 * -2;
      puVar9 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar20 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
      do {
        if (iVar6 < 0) {
          iVar15 = 0;
        }
        else {
          iVar15 = 0;
          puVar16 = param_2;
          puVar14 = param_3;
          do {
            uVar8 = (uint)(short)puVar16[lVar21];
            if ((int)uVar4 < (int)uVar5) {
              puVar13 = (ushort *)((long)puVar16 + uVar20);
              uVar10 = (ulong)uVar4;
              do {
                uVar2 = *puVar13;
                uVar1 = (int)uVar10 + param_5;
                uVar10 = (ulong)uVar1;
                puVar13 = puVar13 + lVar21;
                uVar12 = (uint)uVar2;
                if ((int)(short)uVar2 <= (int)uVar8) {
                  uVar12 = uVar8;
                }
                uVar8 = (uint)(short)uVar12;
              } while ((int)uVar1 < (int)uVar5);
            }
            else {
              uVar10 = (ulong)uVar4;
            }
            uVar10 = -(uVar10 >> 0x1f) & 0xfffffffe00000000 | uVar10 << 1;
            iVar15 = iVar15 + uVar4;
            uVar1 = (uint)*puVar16;
            if ((int)(short)*puVar16 <= (int)uVar8) {
              uVar1 = uVar8;
            }
            *puVar14 = (ushort)uVar1;
            uVar1 = (uint)*(ushort *)((long)puVar16 + uVar10);
            if ((int)*(short *)((long)puVar16 + uVar10) < (int)uVar8) {
              uVar1 = uVar8;
            }
            puVar14[lVar21] = (ushort)uVar1;
            puVar14 = (ushort *)((long)puVar14 + uVar20);
            puVar16 = (ushort *)((long)puVar16 + uVar20);
          } while (iVar15 <= iVar6);
        }
        if (iVar15 < param_4) {
          lVar18 = (long)iVar15;
          lVar17 = 0;
          lVar19 = lVar18 * 2;
          do {
            sVar7 = *(short *)((long)param_2 + lVar17 + lVar19);
            if ((int)param_5 < (int)uVar5) {
              psVar11 = (short *)((long)param_2 + lVar17 + (lVar21 + lVar18) * 2);
              uVar8 = param_5;
              do {
                sVar3 = *psVar11;
                uVar8 = uVar8 + param_5;
                psVar11 = psVar11 + lVar21;
                if (sVar3 <= sVar7) {
                  sVar3 = sVar7;
                }
                sVar7 = sVar3;
              } while ((int)uVar8 < (int)uVar5);
            }
            iVar15 = iVar15 + param_5;
            *(short *)((long)param_3 + lVar17 + lVar19) = sVar7;
            lVar17 = lVar17 + lVar21 * 2;
          } while (iVar15 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != puVar9);
    }
  }
  return;
}


==================================================================

### FUNC 001e18a8 (836 bytes) name=FUN_001e18a8

void FUN_001e18a8(long param_1,ushort *param_2,ushort *param_3,int param_4,uint param_5)

{
  uint uVar1;
  ushort uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  ushort uVar6;
  ushort *puVar7;
  uint uVar8;
  ushort *puVar9;
  uint uVar10;
  ushort *puVar11;
  int iVar12;
  ushort *puVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  ulong uVar17;
  long lVar18;
  undefined8 uVar19;
  
  uVar4 = param_5 * *(int *)(param_1 + 8);
  if (uVar4 == param_5) {
    uVar4 = uVar4 * param_4;
    if (0 < (int)uVar4) {
      if ((uVar4 < 0xf) || (param_3 < param_2 + 8 && param_2 < param_3 + 8)) {
        lVar18 = 0;
        do {
          param_3[lVar18] = param_2[lVar18];
          lVar18 = lVar18 + 1;
        } while ((int)lVar18 < (int)uVar4);
        return;
      }
      uVar3 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
      if (uVar4 < uVar3) {
        uVar3 = uVar4;
      }
      uVar8 = uVar3;
      if ((((uVar3 != 0) && (*param_3 = *param_2, uVar3 != 1)) &&
          (param_3[1] = param_2[1], uVar3 != 2)) &&
         ((param_3[2] = param_2[2], uVar3 != 3 && (param_3[3] = param_2[3], uVar3 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar3 == 5) {
          uVar8 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (uVar3 == 7) {
            param_3[6] = param_2[6];
          }
          else {
            uVar8 = 6;
          }
        }
      }
      uVar1 = ((uVar4 - uVar3) - 8 >> 3) + 1;
      uVar10 = 0;
      iVar5 = uVar1 * 8;
      puVar7 = param_3 + uVar3;
      puVar9 = param_2 + uVar3;
      do {
        uVar19 = *(undefined8 *)puVar9;
        uVar10 = uVar10 + 1;
        *(undefined8 *)(puVar7 + 4) = *(undefined8 *)(puVar9 + 4);
        *(undefined8 *)puVar7 = uVar19;
        puVar7 = puVar7 + 8;
        puVar9 = puVar9 + 8;
      } while (uVar10 < uVar1);
      uVar8 = uVar8 + iVar5;
      if (iVar5 != uVar4 - uVar3) {
        uVar17 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        *(undefined2 *)((long)param_3 + uVar17) = *(undefined2 *)((long)param_2 + uVar17);
        if ((((int)(uVar8 + 1) < (int)uVar4) &&
            (*(undefined2 *)((long)param_3 + uVar17 + 2) =
                  *(undefined2 *)((long)param_2 + uVar17 + 2), (int)(uVar8 + 2) < (int)uVar4)) &&
           ((*(undefined2 *)((long)param_3 + uVar17 + 4) =
                  *(undefined2 *)((long)param_2 + uVar17 + 4), (int)(uVar8 + 3) < (int)uVar4 &&
            (((*(undefined2 *)((long)param_3 + uVar17 + 6) =
                    *(undefined2 *)((long)param_2 + uVar17 + 6), (int)(uVar8 + 4) < (int)uVar4 &&
              (*(undefined2 *)((long)param_3 + uVar17 + 8) =
                    *(undefined2 *)((long)param_2 + uVar17 + 8), (int)(uVar8 + 5) < (int)uVar4)) &&
             (*(undefined2 *)((long)param_3 + uVar17 + 10) =
                   *(undefined2 *)((long)param_2 + uVar17 + 10), (int)(uVar8 + 6) < (int)uVar4))))))
        {
          *(undefined2 *)((long)param_3 + uVar17 + 0xc) =
               *(undefined2 *)((long)param_2 + uVar17 + 0xc);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar3 = param_5 * 2;
      lVar18 = (long)(int)param_5;
      iVar5 = param_4 + param_5 * -2;
      puVar7 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar17 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
      do {
        if (iVar5 < 0) {
          iVar12 = 0;
        }
        else {
          iVar12 = 0;
          puVar13 = param_2;
          puVar9 = param_3;
          do {
            uVar6 = puVar13[lVar18];
            uVar8 = uVar3;
            if ((int)uVar3 < (int)uVar4) {
              puVar11 = (ushort *)((long)puVar13 + uVar17);
              do {
                uVar2 = *puVar11;
                uVar8 = uVar8 + param_5;
                puVar11 = puVar11 + lVar18;
                if (uVar2 <= uVar6) {
                  uVar2 = uVar6;
                }
                uVar6 = uVar2;
              } while ((int)uVar8 < (int)uVar4);
            }
            iVar12 = iVar12 + uVar3;
            uVar2 = *puVar13;
            if (*puVar13 <= uVar6) {
              uVar2 = uVar6;
            }
            *puVar9 = uVar2;
            uVar2 = puVar13[(int)uVar8];
            if (puVar13[(int)uVar8] < uVar6) {
              uVar2 = uVar6;
            }
            puVar9[lVar18] = uVar2;
            puVar9 = (ushort *)((long)puVar9 + uVar17);
            puVar13 = (ushort *)((long)puVar13 + uVar17);
          } while (iVar12 <= iVar5);
        }
        if (iVar12 < param_4) {
          lVar15 = (long)iVar12;
          lVar14 = 0;
          lVar16 = lVar15 * 2;
          do {
            uVar6 = *(ushort *)((long)param_2 + lVar14 + lVar16);
            if ((int)param_5 < (int)uVar4) {
              puVar9 = (ushort *)((long)param_2 + lVar14 + (lVar18 + lVar15) * 2);
              uVar8 = param_5;
              do {
                uVar2 = *puVar9;
                uVar8 = uVar8 + param_5;
                puVar9 = puVar9 + lVar18;
                if (uVar2 <= uVar6) {
                  uVar2 = uVar6;
                }
                uVar6 = uVar2;
              } while ((int)uVar8 < (int)uVar4);
            }
            iVar12 = iVar12 + param_5;
            *(ushort *)((long)param_3 + lVar14 + lVar16) = uVar6;
            lVar14 = lVar14 + lVar18 * 2;
          } while (iVar12 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != puVar7);
    }
  }
  return;
}


==================================================================

### FUNC 001e1bec (552 bytes) name=FUN_001e1bec

void FUN_001e1bec(long param_1,double *param_2,double *param_3,int param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  double *pdVar6;
  uint uVar7;
  double *pdVar8;
  int iVar9;
  double *pdVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  long lVar15;
  double dVar16;
  double dVar17;
  
  uVar2 = param_5 * *(int *)(param_1 + 8);
  if (uVar2 == param_5) {
    uVar2 = uVar2 * param_4;
    if (0 < (int)uVar2) {
      if ((uVar2 < 0xe) || (param_3 < param_2 + 2 && param_2 < param_3 + 2)) {
        lVar15 = 0;
        do {
          param_3[lVar15] = param_2[lVar15];
          lVar15 = lVar15 + 1;
        } while ((int)lVar15 < (int)uVar2);
        return;
      }
      uVar1 = (uint)((ulong)param_2 >> 3) & 1;
      if (uVar2 < uVar1) {
        uVar1 = uVar2;
      }
      if (uVar1 != 0) {
        *param_3 = *param_2;
      }
      uVar4 = ((uVar2 - uVar1) - 2 >> 1) + 1;
      uVar7 = 0;
      iVar3 = uVar4 * 2;
      pdVar6 = param_3 + uVar1;
      pdVar5 = param_2 + uVar1;
      do {
        dVar17 = *pdVar5;
        uVar7 = uVar7 + 1;
        pdVar6[1] = pdVar5[1];
        *pdVar6 = dVar17;
        pdVar6 = pdVar6 + 2;
        pdVar5 = pdVar5 + 2;
      } while (uVar7 < uVar4);
      uVar4 = (uint)(uVar1 != 0) + iVar3;
      if (uVar2 - uVar1 != iVar3) {
        uVar14 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
        *(undefined8 *)((long)param_3 + uVar14) = *(undefined8 *)((long)param_2 + uVar14);
        return;
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar1 = param_5 * 2;
      lVar15 = (long)(int)param_5;
      iVar3 = param_4 + param_5 * -2;
      pdVar6 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar14 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      do {
        if (iVar3 < 0) {
          iVar9 = 0;
        }
        else {
          iVar9 = 0;
          pdVar10 = param_2;
          pdVar5 = param_3;
          do {
            dVar17 = pdVar10[lVar15];
            uVar4 = uVar1;
            if ((int)uVar1 < (int)uVar2) {
              pdVar8 = (double *)(uVar14 + (long)pdVar10);
              dVar16 = dVar17;
              do {
                dVar17 = *pdVar8;
                uVar4 = uVar4 + param_5;
                pdVar8 = pdVar8 + lVar15;
                if (dVar16 <= dVar17) {
                  dVar17 = dVar16;
                }
                dVar16 = dVar17;
              } while ((int)uVar4 < (int)uVar2);
            }
            dVar16 = *pdVar10;
            if (dVar17 <= *pdVar10) {
              dVar16 = dVar17;
            }
            *pdVar5 = dVar16;
            dVar16 = pdVar10[(int)uVar4];
            if (dVar17 <= pdVar10[(int)uVar4]) {
              dVar16 = dVar17;
            }
            iVar9 = iVar9 + uVar1;
            pdVar5[lVar15] = dVar16;
            pdVar5 = (double *)((long)pdVar5 + uVar14);
            pdVar10 = (double *)(uVar14 + (long)pdVar10);
          } while (iVar9 <= iVar3);
        }
        if (iVar9 < param_4) {
          lVar12 = (long)iVar9;
          lVar11 = 0;
          lVar13 = lVar12 * 8;
          do {
            dVar17 = *(double *)((long)param_2 + lVar11 + lVar13);
            if ((int)param_5 < (int)uVar2) {
              pdVar5 = (double *)((long)param_2 + lVar11 + (lVar12 + lVar15) * 8);
              dVar16 = dVar17;
              uVar4 = param_5;
              do {
                dVar17 = *pdVar5;
                uVar4 = uVar4 + param_5;
                pdVar5 = pdVar5 + lVar15;
                if (dVar16 <= dVar17) {
                  dVar17 = dVar16;
                }
                dVar16 = dVar17;
              } while ((int)uVar4 < (int)uVar2);
            }
            iVar9 = iVar9 + param_5;
            *(double *)((long)param_3 + lVar11 + lVar13) = dVar17;
            lVar11 = lVar11 + lVar15 * 8;
          } while (iVar9 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pdVar6);
    }
  }
  return;
}


==================================================================

### FUNC 001e1e14 (648 bytes) name=FUN_001e1e14

void FUN_001e1e14(long param_1,float *param_2,float *param_3,int param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  float *pfVar6;
  float *pfVar7;
  float *pfVar8;
  uint uVar9;
  int iVar10;
  float *pfVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  ulong uVar15;
  long lVar16;
  float fVar17;
  undefined8 uVar18;
  float fVar19;
  
  uVar3 = param_5 * *(int *)(param_1 + 8);
  if (uVar3 == param_5) {
    uVar3 = uVar3 * param_4;
    if (0 < (int)uVar3) {
      if ((uVar3 < 0xc) || (param_3 < param_2 + 4 && param_2 < param_3 + 4)) {
        lVar16 = 0;
        do {
          param_3[lVar16] = param_2[lVar16];
          lVar16 = lVar16 + 1;
        } while ((int)lVar16 < (int)uVar3);
        return;
      }
      uVar2 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
      if (uVar3 < uVar2) {
        uVar2 = uVar3;
      }
      uVar5 = uVar2;
      if ((uVar2 != 0) && (*param_3 = *param_2, uVar2 != 1)) {
        param_3[1] = param_2[1];
        if (uVar2 == 3) {
          param_3[2] = param_2[2];
        }
        else {
          uVar5 = 2;
        }
      }
      uVar1 = ((uVar3 - uVar2) - 4 >> 2) + 1;
      uVar9 = 0;
      iVar4 = uVar1 * 4;
      pfVar7 = param_3 + uVar2;
      pfVar6 = param_2 + uVar2;
      do {
        uVar18 = *(undefined8 *)pfVar6;
        uVar9 = uVar9 + 1;
        *(undefined8 *)(pfVar7 + 2) = *(undefined8 *)(pfVar6 + 2);
        *(undefined8 *)pfVar7 = uVar18;
        pfVar7 = pfVar7 + 4;
        pfVar6 = pfVar6 + 4;
      } while (uVar9 < uVar1);
      uVar5 = uVar5 + iVar4;
      if (uVar3 - uVar2 != iVar4) {
        uVar15 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
        *(undefined4 *)((long)param_3 + uVar15) = *(undefined4 *)((long)param_2 + uVar15);
        if (((int)(uVar5 + 1) < (int)uVar3) &&
           (*(undefined4 *)((long)param_3 + uVar15 + 4) =
                 *(undefined4 *)((long)param_2 + uVar15 + 4), (int)(uVar5 + 2) < (int)uVar3)) {
          *(undefined4 *)((long)param_3 + uVar15 + 8) = *(undefined4 *)((long)param_2 + uVar15 + 8);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar2 = param_5 * 2;
      lVar16 = (long)(int)param_5;
      iVar4 = param_4 + param_5 * -2;
      pfVar7 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar15 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      do {
        if (iVar4 < 0) {
          iVar10 = 0;
        }
        else {
          iVar10 = 0;
          pfVar11 = param_2;
          pfVar6 = param_3;
          do {
            fVar19 = pfVar11[lVar16];
            uVar5 = uVar2;
            if ((int)uVar2 < (int)uVar3) {
              pfVar8 = (float *)(uVar15 + (long)pfVar11);
              do {
                fVar17 = *pfVar8;
                uVar5 = uVar5 + param_5;
                pfVar8 = pfVar8 + lVar16;
                if (fVar19 <= fVar17) {
                  fVar17 = fVar19;
                }
                fVar19 = fVar17;
              } while ((int)uVar5 < (int)uVar3);
            }
            fVar17 = *pfVar11;
            if (fVar19 <= *pfVar11) {
              fVar17 = fVar19;
            }
            *pfVar6 = fVar17;
            fVar17 = pfVar11[(int)uVar5];
            if (fVar19 <= pfVar11[(int)uVar5]) {
              fVar17 = fVar19;
            }
            iVar10 = iVar10 + uVar2;
            pfVar6[lVar16] = fVar17;
            pfVar6 = (float *)((long)pfVar6 + uVar15);
            pfVar11 = (float *)(uVar15 + (long)pfVar11);
          } while (iVar10 <= iVar4);
        }
        if (iVar10 < param_4) {
          lVar13 = (long)iVar10;
          lVar12 = 0;
          lVar14 = lVar13 * 4;
          do {
            fVar19 = *(float *)((long)param_2 + lVar12 + lVar14);
            if ((int)param_5 < (int)uVar3) {
              pfVar6 = (float *)((long)param_2 + lVar12 + (lVar16 + lVar13) * 4);
              uVar5 = param_5;
              do {
                fVar17 = *pfVar6;
                uVar5 = uVar5 + param_5;
                pfVar6 = pfVar6 + lVar16;
                if (fVar19 <= fVar17) {
                  fVar17 = fVar19;
                }
                fVar19 = fVar17;
              } while ((int)uVar5 < (int)uVar3);
            }
            iVar10 = iVar10 + param_5;
            *(float *)((long)param_3 + lVar12 + lVar14) = fVar19;
            lVar12 = lVar12 + lVar16 * 4;
          } while (iVar10 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != pfVar7);
    }
  }
  return;
}


==================================================================

### FUNC 001e209c (844 bytes) name=FUN_001e209c

void FUN_001e209c(long param_1,ushort *param_2,ushort *param_3,int param_4,uint param_5)

{
  uint uVar1;
  ushort uVar2;
  short sVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  short sVar7;
  uint uVar8;
  ushort *puVar9;
  ulong uVar10;
  short *psVar11;
  uint uVar12;
  ushort *puVar13;
  ushort *puVar14;
  int iVar15;
  ushort *puVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  ulong uVar20;
  long lVar21;
  undefined8 uVar22;
  
  uVar5 = param_5 * *(int *)(param_1 + 8);
  if (uVar5 == param_5) {
    uVar5 = uVar5 * param_4;
    if (0 < (int)uVar5) {
      if ((uVar5 < 0xf) || (param_3 < param_2 + 8 && param_2 < param_3 + 8)) {
        lVar21 = 0;
        do {
          param_3[lVar21] = param_2[lVar21];
          lVar21 = lVar21 + 1;
        } while ((int)lVar21 < (int)uVar5);
        return;
      }
      uVar4 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
      if (uVar5 < uVar4) {
        uVar4 = uVar5;
      }
      uVar8 = uVar4;
      if ((((uVar4 != 0) && (*param_3 = *param_2, uVar4 != 1)) &&
          (param_3[1] = param_2[1], uVar4 != 2)) &&
         ((param_3[2] = param_2[2], uVar4 != 3 && (param_3[3] = param_2[3], uVar4 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar4 == 5) {
          uVar8 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (uVar4 == 7) {
            param_3[6] = param_2[6];
          }
          else {
            uVar8 = 6;
          }
        }
      }
      uVar1 = ((uVar5 - uVar4) - 8 >> 3) + 1;
      uVar12 = 0;
      iVar6 = uVar1 * 8;
      puVar9 = param_3 + uVar4;
      puVar14 = param_2 + uVar4;
      do {
        uVar22 = *(undefined8 *)puVar14;
        uVar12 = uVar12 + 1;
        *(undefined8 *)(puVar9 + 4) = *(undefined8 *)(puVar14 + 4);
        *(undefined8 *)puVar9 = uVar22;
        puVar9 = puVar9 + 8;
        puVar14 = puVar14 + 8;
      } while (uVar12 < uVar1);
      uVar8 = uVar8 + iVar6;
      if (iVar6 != uVar5 - uVar4) {
        uVar20 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        *(undefined2 *)((long)param_3 + uVar20) = *(undefined2 *)((long)param_2 + uVar20);
        if ((((int)(uVar8 + 1) < (int)uVar5) &&
            (*(undefined2 *)((long)param_3 + uVar20 + 2) =
                  *(undefined2 *)((long)param_2 + uVar20 + 2), (int)(uVar8 + 2) < (int)uVar5)) &&
           ((*(undefined2 *)((long)param_3 + uVar20 + 4) =
                  *(undefined2 *)((long)param_2 + uVar20 + 4), (int)(uVar8 + 3) < (int)uVar5 &&
            (((*(undefined2 *)((long)param_3 + uVar20 + 6) =
                    *(undefined2 *)((long)param_2 + uVar20 + 6), (int)(uVar8 + 4) < (int)uVar5 &&
              (*(undefined2 *)((long)param_3 + uVar20 + 8) =
                    *(undefined2 *)((long)param_2 + uVar20 + 8), (int)(uVar8 + 5) < (int)uVar5)) &&
             (*(undefined2 *)((long)param_3 + uVar20 + 10) =
                   *(undefined2 *)((long)param_2 + uVar20 + 10), (int)(uVar8 + 6) < (int)uVar5))))))
        {
          *(undefined2 *)((long)param_3 + uVar20 + 0xc) =
               *(undefined2 *)((long)param_2 + uVar20 + 0xc);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar4 = param_5 * 2;
      lVar21 = (long)(int)param_5;
      iVar6 = param_4 + param_5 * -2;
      puVar9 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar20 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
      do {
        if (iVar6 < 0) {
          iVar15 = 0;
        }
        else {
          iVar15 = 0;
          puVar16 = param_2;
          puVar14 = param_3;
          do {
            uVar8 = (uint)(short)puVar16[lVar21];
            if ((int)uVar4 < (int)uVar5) {
              puVar13 = (ushort *)((long)puVar16 + uVar20);
              uVar10 = (ulong)uVar4;
              do {
                uVar2 = *puVar13;
                uVar1 = (int)uVar10 + param_5;
                uVar10 = (ulong)uVar1;
                puVar13 = puVar13 + lVar21;
                uVar12 = (uint)uVar2;
                if ((int)uVar8 <= (int)(short)uVar2) {
                  uVar12 = uVar8;
                }
                uVar8 = (uint)(short)uVar12;
              } while ((int)uVar1 < (int)uVar5);
            }
            else {
              uVar10 = (ulong)uVar4;
            }
            uVar10 = -(uVar10 >> 0x1f) & 0xfffffffe00000000 | uVar10 << 1;
            iVar15 = iVar15 + uVar4;
            uVar1 = (uint)*puVar16;
            if ((int)uVar8 <= (int)(short)*puVar16) {
              uVar1 = uVar8;
            }
            *puVar14 = (ushort)uVar1;
            uVar1 = (uint)*(ushort *)((long)puVar16 + uVar10);
            if ((int)uVar8 < (int)*(short *)((long)puVar16 + uVar10)) {
              uVar1 = uVar8;
            }
            puVar14[lVar21] = (ushort)uVar1;
            puVar14 = (ushort *)((long)puVar14 + uVar20);
            puVar16 = (ushort *)((long)puVar16 + uVar20);
          } while (iVar15 <= iVar6);
        }
        if (iVar15 < param_4) {
          lVar18 = (long)iVar15;
          lVar17 = 0;
          lVar19 = lVar18 * 2;
          do {
            sVar7 = *(short *)((long)param_2 + lVar17 + lVar19);
            if ((int)param_5 < (int)uVar5) {
              psVar11 = (short *)((long)param_2 + lVar17 + (lVar21 + lVar18) * 2);
              uVar8 = param_5;
              do {
                sVar3 = *psVar11;
                uVar8 = uVar8 + param_5;
                psVar11 = psVar11 + lVar21;
                if (sVar7 <= sVar3) {
                  sVar3 = sVar7;
                }
                sVar7 = sVar3;
              } while ((int)uVar8 < (int)uVar5);
            }
            iVar15 = iVar15 + param_5;
            *(short *)((long)param_3 + lVar17 + lVar19) = sVar7;
            lVar17 = lVar17 + lVar21 * 2;
          } while (iVar15 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != puVar9);
    }
  }
  return;
}


==================================================================

### FUNC 001e23e8 (836 bytes) name=FUN_001e23e8

void FUN_001e23e8(long param_1,ushort *param_2,ushort *param_3,int param_4,uint param_5)

{
  uint uVar1;
  ushort uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  ushort uVar6;
  ushort *puVar7;
  uint uVar8;
  ushort *puVar9;
  uint uVar10;
  ushort *puVar11;
  int iVar12;
  ushort *puVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  ulong uVar17;
  long lVar18;
  undefined8 uVar19;
  
  uVar4 = param_5 * *(int *)(param_1 + 8);
  if (uVar4 == param_5) {
    uVar4 = uVar4 * param_4;
    if (0 < (int)uVar4) {
      if ((uVar4 < 0xf) || (param_3 < param_2 + 8 && param_2 < param_3 + 8)) {
        lVar18 = 0;
        do {
          param_3[lVar18] = param_2[lVar18];
          lVar18 = lVar18 + 1;
        } while ((int)lVar18 < (int)uVar4);
        return;
      }
      uVar3 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
      if (uVar4 < uVar3) {
        uVar3 = uVar4;
      }
      uVar8 = uVar3;
      if ((((uVar3 != 0) && (*param_3 = *param_2, uVar3 != 1)) &&
          (param_3[1] = param_2[1], uVar3 != 2)) &&
         ((param_3[2] = param_2[2], uVar3 != 3 && (param_3[3] = param_2[3], uVar3 != 4)))) {
        param_3[4] = param_2[4];
        if (uVar3 == 5) {
          uVar8 = 5;
        }
        else {
          param_3[5] = param_2[5];
          if (uVar3 == 7) {
            param_3[6] = param_2[6];
          }
          else {
            uVar8 = 6;
          }
        }
      }
      uVar1 = ((uVar4 - uVar3) - 8 >> 3) + 1;
      uVar10 = 0;
      iVar5 = uVar1 * 8;
      puVar7 = param_3 + uVar3;
      puVar9 = param_2 + uVar3;
      do {
        uVar19 = *(undefined8 *)puVar9;
        uVar10 = uVar10 + 1;
        *(undefined8 *)(puVar7 + 4) = *(undefined8 *)(puVar9 + 4);
        *(undefined8 *)puVar7 = uVar19;
        puVar7 = puVar7 + 8;
        puVar9 = puVar9 + 8;
      } while (uVar10 < uVar1);
      uVar8 = uVar8 + iVar5;
      if (iVar5 != uVar4 - uVar3) {
        uVar17 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        *(undefined2 *)((long)param_3 + uVar17) = *(undefined2 *)((long)param_2 + uVar17);
        if ((((int)(uVar8 + 1) < (int)uVar4) &&
            (*(undefined2 *)((long)param_3 + uVar17 + 2) =
                  *(undefined2 *)((long)param_2 + uVar17 + 2), (int)(uVar8 + 2) < (int)uVar4)) &&
           ((*(undefined2 *)((long)param_3 + uVar17 + 4) =
                  *(undefined2 *)((long)param_2 + uVar17 + 4), (int)(uVar8 + 3) < (int)uVar4 &&
            (((*(undefined2 *)((long)param_3 + uVar17 + 6) =
                    *(undefined2 *)((long)param_2 + uVar17 + 6), (int)(uVar8 + 4) < (int)uVar4 &&
              (*(undefined2 *)((long)param_3 + uVar17 + 8) =
                    *(undefined2 *)((long)param_2 + uVar17 + 8), (int)(uVar8 + 5) < (int)uVar4)) &&
             (*(undefined2 *)((long)param_3 + uVar17 + 10) =
                   *(undefined2 *)((long)param_2 + uVar17 + 10), (int)(uVar8 + 6) < (int)uVar4))))))
        {
          *(undefined2 *)((long)param_3 + uVar17 + 0xc) =
               *(undefined2 *)((long)param_2 + uVar17 + 0xc);
          return;
        }
      }
    }
  }
  else {
    param_4 = param_4 * param_5;
    if (0 < (int)param_5) {
      uVar3 = param_5 * 2;
      lVar18 = (long)(int)param_5;
      iVar5 = param_4 + param_5 * -2;
      puVar7 = param_3 + (ulong)(param_5 - 1) + 1;
      uVar17 = -(ulong)((param_5 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
      do {
        if (iVar5 < 0) {
          iVar12 = 0;
        }
        else {
          iVar12 = 0;
          puVar13 = param_2;
          puVar9 = param_3;
          do {
            uVar6 = puVar13[lVar18];
            uVar8 = uVar3;
            if ((int)uVar3 < (int)uVar4) {
              puVar11 = (ushort *)((long)puVar13 + uVar17);
              do {
                uVar2 = *puVar11;
                uVar8 = uVar8 + param_5;
                puVar11 = puVar11 + lVar18;
                if (uVar6 <= uVar2) {
                  uVar2 = uVar6;
                }
                uVar6 = uVar2;
              } while ((int)uVar8 < (int)uVar4);
            }
            iVar12 = iVar12 + uVar3;
            uVar2 = *puVar13;
            if (uVar6 <= *puVar13) {
              uVar2 = uVar6;
            }
            *puVar9 = uVar2;
            uVar2 = puVar13[(int)uVar8];
            if (uVar6 < puVar13[(int)uVar8]) {
              uVar2 = uVar6;
            }
            puVar9[lVar18] = uVar2;
            puVar9 = (ushort *)((long)puVar9 + uVar17);
            puVar13 = (ushort *)((long)puVar13 + uVar17);
          } while (iVar12 <= iVar5);
        }
        if (iVar12 < param_4) {
          lVar15 = (long)iVar12;
          lVar14 = 0;
          lVar16 = lVar15 * 2;
          do {
            uVar6 = *(ushort *)((long)param_2 + lVar14 + lVar16);
            if ((int)param_5 < (int)uVar4) {
              puVar9 = (ushort *)((long)param_2 + lVar14 + (lVar18 + lVar15) * 2);
              uVar8 = param_5;
              do {
                uVar2 = *puVar9;
                uVar8 = uVar8 + param_5;
                puVar9 = puVar9 + lVar18;
                if (uVar6 <= uVar2) {
                  uVar2 = uVar6;
                }
                uVar6 = uVar2;
              } while ((int)uVar8 < (int)uVar4);
            }
            iVar12 = iVar12 + param_5;
            *(ushort *)((long)param_3 + lVar14 + lVar16) = uVar6;
            lVar14 = lVar14 + lVar18 * 2;
          } while (iVar12 < param_4);
        }
        param_3 = param_3 + 1;
        param_2 = param_2 + 1;
      } while (param_3 != puVar7);
    }
  }
  return;
}


==================================================================

### FUNC 001e272c (444 bytes) name=FUN_001e272c

void FUN_001e272c(ParallelLoopBody *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f4810;
  if (*(long *)(param_1 + 0x110) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x110) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0xd8));
    }
  }
  *(undefined8 *)(param_1 + 0x110) = 0;
  *(undefined8 *)(param_1 + 0xe8) = 0;
  *(undefined8 *)(param_1 + 0x100) = 0;
  *(undefined8 *)(param_1 + 0xf8) = 0;
  *(undefined8 *)(param_1 + 0xf0) = 0;
  if (0 < *(int *)(param_1 + 0xdc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x118);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xdc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x120) != param_1 + 0x128) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x120));
  }
  if (*(long *)(param_1 + 0xa0) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0xa0) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0x68));
    }
  }
  *(undefined8 *)(param_1 + 0xa0) = 0;
  *(undefined8 *)(param_1 + 0x78) = 0;
  *(undefined8 *)(param_1 + 0x90) = 0;
  *(undefined8 *)(param_1 + 0x88) = 0;
  *(undefined8 *)(param_1 + 0x80) = 0;
  if (0 < *(int *)(param_1 + 0x6c)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0xa8);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0x6c));
  }
  if (*(ParallelLoopBody **)(param_1 + 0xb0) != param_1 + 0xb8) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0xb0));
  }
  if (*(long *)(param_1 + 0x40) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x40) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 8));
    }
  }
  *(undefined8 *)(param_1 + 0x40) = 0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  if (0 < *(int *)(param_1 + 0xc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x48);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x50) != param_1 + 0x58) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x50));
  }
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 001e294c (452 bytes) name=FUN_001e294c

void FUN_001e294c(ParallelLoopBody *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f4810;
  if (*(long *)(param_1 + 0x110) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x110) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0xd8));
    }
  }
  *(undefined8 *)(param_1 + 0x110) = 0;
  *(undefined8 *)(param_1 + 0xe8) = 0;
  *(undefined8 *)(param_1 + 0x100) = 0;
  *(undefined8 *)(param_1 + 0xf8) = 0;
  *(undefined8 *)(param_1 + 0xf0) = 0;
  if (0 < *(int *)(param_1 + 0xdc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x118);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xdc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x120) != param_1 + 0x128) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x120));
  }
  if (*(long *)(param_1 + 0xa0) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0xa0) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0x68));
    }
  }
  *(undefined8 *)(param_1 + 0xa0) = 0;
  *(undefined8 *)(param_1 + 0x78) = 0;
  *(undefined8 *)(param_1 + 0x90) = 0;
  *(undefined8 *)(param_1 + 0x88) = 0;
  *(undefined8 *)(param_1 + 0x80) = 0;
  if (0 < *(int *)(param_1 + 0x6c)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0xa8);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0x6c));
  }
  if (*(ParallelLoopBody **)(param_1 + 0xb0) != param_1 + 0xb8) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0xb0));
  }
  if (*(long *)(param_1 + 0x40) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x40) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 8));
    }
  }
  *(undefined8 *)(param_1 + 0x40) = 0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  if (0 < *(int *)(param_1 + 0xc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x48);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x50) != param_1 + 0x58) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x50));
  }
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001e2b74 (1560 bytes) name=FUN_001e2b74

undefined8 * FUN_001e2b74(undefined8 *param_1,uint param_2,uint param_3,int param_4,int param_5)

{
  long *plVar1;
  int *piVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  char *pcVar11;
  long *plVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  int iVar15;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar3 = param_3 & 7;
  if (param_5 < 0) {
    param_5 = param_4 / 2;
  }
  if (param_2 < 2) {
    if (param_2 == 0) {
      if (uVar3 == 0) {
        puVar13 = operator_new(0x18);
        FUN_001c8ce4();
        *(int *)(puVar13 + 1) = param_4;
        *(int *)((long)puVar13 + 0xc) = param_5;
        *puVar13 = &DAT_004f4840;
        plVar12 = operator_new(0x20);
        plVar12[2] = (long)puVar13;
        *(undefined4 *)(plVar12 + 1) = 1;
        *plVar12 = (long)&PTR_FUN_004f4a20;
        plVar1 = plVar12 + 1;
        *param_1 = plVar12;
        param_1[1] = puVar13;
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar5) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        do {
          iVar15 = (int)*plVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar5) {
            *(int *)plVar1 = iVar15 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        goto LAB_001e2dc4;
      }
      if (uVar3 != 2) {
        if (uVar3 == 3) {
          puVar13 = operator_new(0x18);
          FUN_001c8ce4();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004f48a0;
          puVar14 = operator_new(0x20);
          puVar14[2] = puVar13;
          *(undefined4 *)(puVar14 + 1) = 1;
          piVar2 = (int *)(puVar14 + 1);
          *puVar14 = &PTR_FUN_004f4a80;
          *param_1 = puVar14;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar5) {
              *piVar2 = *piVar2 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar15 = *piVar2;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar5) {
              *piVar2 = iVar15 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e2ec4;
        }
        if (uVar3 == 5) {
          puVar13 = operator_new(0x18);
          FUN_001c8ce4();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &DAT_004f48d0;
          puVar14 = operator_new(0x20);
          puVar14[2] = puVar13;
          *(undefined4 *)(puVar14 + 1) = 1;
          piVar2 = (int *)(puVar14 + 1);
          *puVar14 = &PTR_FUN_004f4ab0;
          *param_1 = puVar14;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar5) {
              *piVar2 = *piVar2 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar15 = *piVar2;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar5) {
              *piVar2 = iVar15 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e2ec4;
        }
        if (uVar3 == 6) {
          puVar13 = operator_new(0x18);
          FUN_001c8ce4();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004f4900;
          plVar12 = operator_new(0x20);
          plVar12[2] = (long)puVar13;
          *(undefined4 *)(plVar12 + 1) = 1;
          *plVar12 = (long)&PTR_FUN_004f4ae0;
          plVar1 = plVar12 + 1;
          *param_1 = plVar12;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar5) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar15 = (int)*plVar1;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar5) {
              *(int *)plVar1 = iVar15 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e2dc4;
        }
        goto LAB_001e2c40;
      }
      puVar13 = operator_new(0x18);
      FUN_001c8ce4();
      *(int *)(puVar13 + 1) = param_4;
      *(int *)((long)puVar13 + 0xc) = param_5;
      *puVar13 = &PTR_FUN_004f4870;
      puVar14 = operator_new(0x20);
      puVar14[2] = puVar13;
      *(undefined4 *)(puVar14 + 1) = 1;
      piVar2 = (int *)(puVar14 + 1);
      *puVar14 = &DAT_004f4a50;
      *param_1 = puVar14;
      param_1[1] = puVar13;
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar5) {
          *piVar2 = *piVar2 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      do {
        iVar15 = *piVar2;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar5) {
          *piVar2 = iVar15 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      goto LAB_001e2ec4;
    }
  }
  else {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x27);
    cVar4 = s_op____MORPH_ERODE____op____MORPH_0045bda0[0x26];
    uVar10 = s_op____MORPH_ERODE____op____MORPH_0045bda0._36_2_;
    uVar9 = s_op____MORPH_ERODE____op____MORPH_0045bda0._24_8_;
    uVar8 = s_op____MORPH_ERODE____op____MORPH_0045bda0._16_8_;
    uVar7 = s_op____MORPH_ERODE____op____MORPH_0045bda0._8_8_;
    uVar6 = s_op____MORPH_ERODE____op____MORPH_0045bda0._0_8_;
    *(undefined4 *)(pcVar11 + 0x20) = s_op____MORPH_ERODE____op____MORPH_0045bda0._32_4_;
    *(undefined2 *)(pcVar11 + 0x24) = uVar10;
    pcVar11[0x26] = cVar4;
    *(undefined8 *)pcVar11 = uVar6;
    *(undefined8 *)(pcVar11 + 8) = uVar7;
    *(undefined8 *)(pcVar11 + 0x10) = uVar8;
    *(undefined8 *)(pcVar11 + 0x18) = uVar9;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Ptr<cv::BaseRowFilter> cv::getMorphologyRowFilter(int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x358);
    cv::String::deallocate((String *)&local_10);
  }
  if (uVar3 == 0) {
    puVar13 = operator_new(0x18);
    FUN_001c8ce4();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004f4930;
    plVar12 = operator_new(0x20);
    plVar12[2] = (long)puVar13;
    *(undefined4 *)(plVar12 + 1) = 1;
    *plVar12 = (long)&PTR_FUN_004f4b10;
    plVar1 = plVar12 + 1;
    *param_1 = plVar12;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar5) {
        *(int *)plVar1 = (int)*plVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar15 = (int)*plVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar5) {
        *(int *)plVar1 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
LAB_001e2dc4:
    if (iVar15 != 1) {
      return param_1;
    }
    (**(code **)(*plVar12 + 0x10))();
    return param_1;
  }
  if (uVar3 == 2) {
    puVar13 = operator_new(0x18);
    FUN_001c8ce4();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004f4960;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar2 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4b40;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = *piVar2 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar15 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else if (uVar3 == 3) {
    puVar13 = operator_new(0x18);
    FUN_001c8ce4();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004f4990;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar2 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4b70;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = *piVar2 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar15 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else if (uVar3 == 5) {
    puVar13 = operator_new(0x18);
    FUN_001c8ce4();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &DAT_004f49c0;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar2 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4ba0;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = *piVar2 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar15 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else {
    if (uVar3 != 6) {
LAB_001e2c40:
      cv::format("Unsupported data type (=%d)",(String *)&local_10,(ulong)param_3);
      cv::error(-0xd5,(String *)&local_10,
                "cv::Ptr<cv::BaseRowFilter> cv::getMorphologyRowFilter(int, int, int, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x37e);
      cv::String::deallocate((String *)&local_10);
      *param_1 = 0;
      param_1[1] = 0;
      return param_1;
    }
    puVar13 = operator_new(0x18);
    FUN_001c8ce4();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &DAT_004f49f0;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar2 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4bd0;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = *piVar2 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar15 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
LAB_001e2ec4:
  if (iVar15 == 1) {
    FUN_001e0734();
  }
  return param_1;
}


==================================================================

### FUNC 001e31ec (1552 bytes) name=FUN_001e31ec

undefined8 * FUN_001e31ec(undefined8 *param_1,uint param_2,uint param_3,int param_4,int param_5)

{
  int *piVar1;
  long *plVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  long lVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined2 uVar11;
  char *pcVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  long *plVar15;
  int iVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar3 = param_3 & 7;
  if (param_5 < 0) {
    param_5 = param_4 / 2;
  }
  if (param_2 < 2) {
    if (param_2 == 0) {
      if (uVar3 != 0) {
        if (uVar3 == 2) {
          puVar13 = operator_new(0x18);
          FUN_001c8d08();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004fb2f0;
          plVar15 = operator_new(0x20);
          plVar15[2] = (long)puVar13;
          *(undefined4 *)(plVar15 + 1) = 1;
          *plVar15 = (long)&PTR_FUN_004f4c30;
          plVar2 = plVar15 + 1;
          *param_1 = plVar15;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
            if (bVar5) {
              *(int *)plVar2 = (int)*plVar2 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            lVar6 = *plVar2;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(plVar2,0x10);
            if (bVar5) {
              *(int *)plVar2 = (int)lVar6 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          if ((int)lVar6 != 1) {
            return param_1;
          }
          (**(code **)(*plVar15 + 0x10))();
          return param_1;
        }
        if (uVar3 == 3) {
          puVar13 = operator_new(0x18);
          FUN_001c8d08();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004fb320;
          puVar14 = operator_new(0x20);
          puVar14[2] = puVar13;
          *(undefined4 *)(puVar14 + 1) = 1;
          piVar1 = (int *)(puVar14 + 1);
          *puVar14 = &PTR_FUN_004f4c60;
          *param_1 = puVar14;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar16 = *piVar1;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar16 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e3434;
        }
        if (uVar3 == 5) {
          puVar13 = operator_new(0x18);
          FUN_001c8d08();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004fb350;
          puVar14 = operator_new(0x20);
          puVar14[2] = puVar13;
          *(undefined4 *)(puVar14 + 1) = 1;
          piVar1 = (int *)(puVar14 + 1);
          *puVar14 = &DAT_004f4c90;
          *param_1 = puVar14;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar16 = *piVar1;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar16 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e3434;
        }
        if (uVar3 == 6) {
          puVar13 = operator_new(0x18);
          FUN_001c8d08();
          *(int *)(puVar13 + 1) = param_4;
          *(int *)((long)puVar13 + 0xc) = param_5;
          *puVar13 = &PTR_FUN_004fb380;
          puVar14 = operator_new(0x20);
          puVar14[2] = puVar13;
          *(undefined4 *)(puVar14 + 1) = 1;
          piVar1 = (int *)(puVar14 + 1);
          *puVar14 = &PTR_FUN_004f4cc0;
          *param_1 = puVar14;
          param_1[1] = puVar13;
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          do {
            iVar16 = *piVar1;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar16 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          goto LAB_001e3434;
        }
        goto LAB_001e32b8;
      }
      puVar13 = operator_new(0x18);
      FUN_001c8d08();
      *(int *)(puVar13 + 1) = param_4;
      *(int *)((long)puVar13 + 0xc) = param_5;
      *puVar13 = &PTR_FUN_004fb2c0;
      puVar14 = operator_new(0x20);
      puVar14[2] = puVar13;
      *(undefined4 *)(puVar14 + 1) = 1;
      piVar1 = (int *)(puVar14 + 1);
      *puVar14 = &PTR_FUN_004f4c00;
      *param_1 = puVar14;
      param_1[1] = puVar13;
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      do {
        iVar16 = *piVar1;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = iVar16 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      goto LAB_001e3434;
    }
  }
  else {
    local_10 = 0;
    local_8 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x27);
    cVar4 = s_op____MORPH_ERODE____op____MORPH_0045bda0[0x26];
    uVar11 = s_op____MORPH_ERODE____op____MORPH_0045bda0._36_2_;
    uVar10 = s_op____MORPH_ERODE____op____MORPH_0045bda0._24_8_;
    uVar9 = s_op____MORPH_ERODE____op____MORPH_0045bda0._16_8_;
    uVar8 = s_op____MORPH_ERODE____op____MORPH_0045bda0._8_8_;
    uVar7 = s_op____MORPH_ERODE____op____MORPH_0045bda0._0_8_;
    *(undefined4 *)(pcVar12 + 0x20) = s_op____MORPH_ERODE____op____MORPH_0045bda0._32_4_;
    *(undefined2 *)(pcVar12 + 0x24) = uVar11;
    pcVar12[0x26] = cVar4;
    *(undefined8 *)pcVar12 = uVar7;
    *(undefined8 *)(pcVar12 + 8) = uVar8;
    *(undefined8 *)(pcVar12 + 0x10) = uVar9;
    *(undefined8 *)(pcVar12 + 0x18) = uVar10;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Ptr<cv::BaseColumnFilter> cv::getMorphologyColumnFilter(int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x387);
    cv::String::deallocate((String *)&local_10);
  }
  if (uVar3 == 0) {
    puVar13 = operator_new(0x18);
    FUN_001c8d08();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004fb3b0;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar1 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4cf0;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar16 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar16 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else if (uVar3 == 2) {
    puVar13 = operator_new(0x18);
    FUN_001c8d08();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &DAT_004fb3e0;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar1 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4d20;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar16 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar16 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else if (uVar3 == 3) {
    puVar13 = operator_new(0x18);
    FUN_001c8d08();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004fb410;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar1 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4d50;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar16 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar16 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else if (uVar3 == 5) {
    puVar13 = operator_new(0x18);
    FUN_001c8d08();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004fb440;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar1 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4d80;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar16 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar16 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  else {
    if (uVar3 != 6) {
LAB_001e32b8:
      cv::format("Unsupported data type (=%d)",(String *)&local_10,(ulong)param_3);
      cv::error(-0xd5,(String *)&local_10,
                "cv::Ptr<cv::BaseColumnFilter> cv::getMorphologyColumnFilter(int, int, int, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x3ad);
      cv::String::deallocate((String *)&local_10);
      *param_1 = 0;
      param_1[1] = 0;
      return param_1;
    }
    puVar13 = operator_new(0x18);
    FUN_001c8d08();
    *(int *)(puVar13 + 1) = param_4;
    *(int *)((long)puVar13 + 0xc) = param_5;
    *puVar13 = &PTR_FUN_004fb470;
    puVar14 = operator_new(0x20);
    puVar14[2] = puVar13;
    *(undefined4 *)(puVar14 + 1) = 1;
    piVar1 = (int *)(puVar14 + 1);
    *puVar14 = &PTR_FUN_004f4db0;
    *param_1 = puVar14;
    param_1[1] = puVar13;
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    do {
      iVar16 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar16 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
LAB_001e3434:
  if (iVar16 == 1) {
    FUN_001e0734();
  }
  return param_1;
}


==================================================================

### FUNC 001e3860 (1008 bytes) name=getStructuringElement

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::getStructuringElement(int, cv::Size_<int>, cv::Point_<int>) */

Mat * __thiscall cv::getStructuringElement(Mat *param_1,uint param_2,int *param_3,int *param_4)

{
  void *__s;
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  char *pcVar11;
  undefined1 *puVar12;
  long lVar13;
  long lVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  long lVar18;
  int iVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double __x;
  double dVar23;
  int local_10 [2];
  undefined8 local_8;
  
  if (2 < param_2) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_8 = 0;
    pcVar11 = (char *)String::allocate((String *)local_10,0x45);
    uVar10 = s_shape____MORPH_RECT____shape____M_0045be30._64_4_;
    uVar9 = s_shape____MORPH_RECT____shape____M_0045be30._56_8_;
    uVar8 = s_shape____MORPH_RECT____shape____M_0045be30._48_8_;
    uVar7 = s_shape____MORPH_RECT____shape____M_0045be30._40_8_;
    uVar6 = s_shape____MORPH_RECT____shape____M_0045be30._32_8_;
    uVar5 = s_shape____MORPH_RECT____shape____M_0045be30._24_8_;
    uVar4 = s_shape____MORPH_RECT____shape____M_0045be30._16_8_;
    uVar3 = s_shape____MORPH_RECT____shape____M_0045be30._8_8_;
    uVar2 = s_shape____MORPH_RECT____shape____M_0045be30._0_8_;
    pcVar11[0x44] = s_shape____MORPH_RECT____shape____M_0045be30[0x44];
    *(undefined4 *)(pcVar11 + 0x40) = uVar10;
    *(undefined8 *)pcVar11 = uVar2;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    *(undefined8 *)(pcVar11 + 0x10) = uVar4;
    *(undefined8 *)(pcVar11 + 0x18) = uVar5;
    *(undefined8 *)(pcVar11 + 0x20) = uVar6;
    *(undefined8 *)(pcVar11 + 0x28) = uVar7;
    *(undefined8 *)(pcVar11 + 0x30) = uVar8;
    *(undefined8 *)(pcVar11 + 0x38) = uVar9;
    error(-0xd7,(String *)local_10,"cv::Mat cv::getStructuringElement(int, cv::Size, cv::Point)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x40a);
    String::deallocate((String *)local_10);
  }
  local_10[1] = *param_3;
  local_10[0] = param_3[1];
  iVar17 = *param_4;
  iVar16 = param_4[1];
  if (iVar17 == -1) {
    iVar17 = local_10[1] / 2;
  }
  if (iVar16 == -1) {
    iVar16 = local_10[0] / 2;
  }
  if ((((iVar17 < local_10[1]) && (-1 < iVar17)) && (-1 < iVar16)) && (iVar16 < local_10[0])) {
    *param_4 = iVar17;
    param_4[1] = iVar16;
  }
  else {
    local_10[0] = 0;
    local_10[1] = 0;
    local_8 = 0;
    pcVar11 = (char *)String::allocate((String *)local_10,0x34);
    uVar7 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar6 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar5 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar4 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar3 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar2 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar11 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar11 = uVar2;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    *(undefined8 *)(pcVar11 + 0x10) = uVar4;
    *(undefined8 *)(pcVar11 + 0x18) = uVar5;
    *(undefined8 *)(pcVar11 + 0x20) = uVar6;
    *(undefined8 *)(pcVar11 + 0x28) = uVar7;
    error(-0xd7,(String *)local_10,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    String::deallocate((String *)local_10);
    local_10[1] = *param_3;
    local_10[0] = param_3[1];
    *param_4 = iVar17;
    param_4[1] = iVar16;
  }
  if ((local_10[1] == 1) && (local_10[0] == 1)) {
    dVar23 = 0.0;
    param_2 = 0;
    iVar16 = 0;
    iVar17 = 0;
  }
  else if (param_2 == 2) {
    iVar16 = local_10[0] / 2;
    iVar17 = local_10[1] / 2;
    dVar23 = 0.0;
    if (iVar16 != 0) {
      dVar23 = 1.0 / ((double)iVar16 * (double)iVar16);
    }
  }
  else {
    iVar16 = 0;
    dVar23 = 0.0;
    iVar17 = 0;
  }
  *(undefined8 *)(param_1 + 0x10) = 0;
  uVar3 = _UNK_001e3ca8;
  uVar2 = _DAT_001e3ca0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined8 *)(param_1 + 8) = uVar3;
  *(undefined8 *)param_1 = uVar2;
  *(undefined8 *)(param_1 + 0x38) = 0;
  *(Mat **)(param_1 + 0x40) = param_1 + 8;
  *(Mat **)(param_1 + 0x48) = param_1 + 0x50;
  *(undefined8 *)(param_1 + 0x58) = 0;
  *(undefined8 *)(param_1 + 0x50) = 0;
  Mat::create(param_1,2,local_10,0);
  if (0 < param_3[1]) {
    lVar20 = 0;
    do {
      lVar14 = *(long *)(param_1 + 0x10);
      lVar18 = **(long **)(param_1 + 0x48);
      __s = (void *)(lVar14 + lVar20 * lVar18);
      iVar19 = (int)lVar20;
      if (param_2 == 0) {
LAB_001e3be0:
        iVar21 = *param_3;
LAB_001e3a44:
        iVar15 = 0;
      }
      else {
        if (param_2 == 1) {
          if (param_4[1] == iVar19) goto LAB_001e3be0;
          iVar15 = *param_4;
          iVar21 = iVar15 + 1;
        }
        else {
          uVar1 = iVar19 - iVar16;
          iVar21 = 0;
          if (iVar16 < (int)((uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)))
          goto LAB_001e3a44;
          __x = (double)(int)(iVar16 * iVar16 - uVar1 * uVar1) * dVar23;
          dVar22 = SQRT(__x);
          if (NAN(dVar22)) {
            dVar22 = ::sqrt(__x);
          }
          lVar13 = lrint((double)iVar17 * dVar22);
          iVar21 = iVar17 + (int)lVar13 + 1;
          iVar15 = iVar17 - (int)lVar13;
          if (iVar15 < 0) {
            iVar15 = 0;
          }
          if (*param_3 < iVar21) {
            iVar21 = *param_3;
          }
        }
        if (iVar15 < 1) goto LAB_001e3a44;
        memset(__s,0,(ulong)(iVar15 - 1) + 1);
      }
      if (iVar15 < iVar21) {
        memset((void *)(lVar14 + lVar20 * lVar18 + (long)iVar15),1,
               (ulong)(uint)((iVar21 + -1) - iVar15) + 1);
        iVar15 = iVar21;
      }
      puVar12 = (undefined1 *)((long)__s + (long)iVar15);
      if (iVar15 < *param_3) {
        do {
          *puVar12 = 0;
          iVar15 = iVar15 + 1;
          puVar12 = puVar12 + 1;
        } while (iVar15 < *param_3);
      }
      lVar20 = lVar20 + 1;
    } while (iVar19 + 1 < param_3[1]);
  }
  return param_1;
}


==================================================================

### FUNC 001e3cb0 (4584 bytes) name=FUN_001e3cb0

/* WARNING: Removing unreachable block (ram,0x001e4208) */
/* WARNING: Removing unreachable block (ram,0x001e420c) */
/* WARNING: Removing unreachable block (ram,0x001e4214) */
/* WARNING: Removing unreachable block (ram,0x001e421c) */
/* WARNING: Removing unreachable block (ram,0x001e4e3c) */
/* WARNING: Removing unreachable block (ram,0x001e4244) */
/* WARNING: Removing unreachable block (ram,0x001e424c) */
/* WARNING: Removing unreachable block (ram,0x001e4260) */

void FUN_001e3cb0(undefined4 param_1,_InputArray *param_2,_InputArray *param_3,_InputArray *param_4,
                 int *param_5,int param_6,undefined4 param_7,undefined8 *param_8)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  long lVar11;
  char *pcVar12;
  long lVar13;
  undefined8 *puVar14;
  undefined4 *puVar15;
  int *piVar16;
  Mat *pMVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  undefined8 local_480;
  undefined8 local_478;
  uint local_470;
  int iStack_46c;
  int iStack_468;
  int iStack_464;
  long local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  undefined8 local_440;
  long local_438;
  int *local_430;
  undefined8 *local_428;
  undefined8 local_420;
  undefined8 local_418;
  uint local_410;
  int iStack_40c;
  undefined4 uStack_408;
  undefined4 uStack_404;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  undefined8 local_3e0;
  long local_3d8;
  undefined4 *local_3d0;
  undefined8 *local_3c8;
  undefined8 local_3c0;
  undefined8 local_3b8;
  uint local_3b0;
  int iStack_3ac;
  undefined4 uStack_3a8;
  undefined4 uStack_3a4;
  undefined8 local_3a0;
  undefined8 local_398;
  undefined8 local_390;
  undefined8 local_388;
  undefined8 local_380;
  long local_378;
  undefined4 *local_370;
  undefined8 *local_368;
  undefined8 local_360;
  undefined8 local_358;
  undefined8 local_350;
  undefined8 uStack_348;
  undefined8 local_340;
  undefined8 uStack_338;
  undefined8 local_330;
  undefined8 uStack_328;
  undefined8 local_320;
  long lStack_318;
  undefined8 *local_310;
  undefined8 *local_308;
  undefined8 local_300;
  undefined8 uStack_2f8;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  undefined8 uStack_2c8;
  undefined8 local_2c0;
  long lStack_2b8;
  undefined8 *local_2b0;
  undefined8 *local_2a8;
  undefined8 local_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  long local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 uStack_268;
  undefined8 local_260;
  long lStack_258;
  undefined8 *local_250;
  undefined8 *local_248;
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230 [9];
  undefined1 *local_1e8;
  undefined1 auStack_1e0 [16];
  int local_1d0;
  int local_1cc;
  undefined1 *local_188;
  undefined1 auStack_180 [16];
  undefined8 local_170;
  undefined8 local_168;
  undefined4 local_160;
  undefined4 local_15c;
  undefined8 local_158;
  undefined8 uStack_150;
  undefined8 local_148;
  undefined8 uStack_140;
  undefined8 local_138;
  long lStack_130;
  undefined4 *local_128;
  undefined8 *local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined4 local_108;
  int local_104;
  undefined4 local_100;
  undefined4 local_fc;
  undefined8 local_f8;
  undefined8 uStack_f0;
  undefined8 local_e8;
  undefined8 uStack_e0;
  undefined8 local_d8;
  long lStack_d0;
  undefined4 *local_c8;
  undefined8 *local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined4 local_a8;
  int local_a4;
  undefined4 local_a0;
  undefined4 local_98;
  int local_94;
  undefined4 local_90;
  undefined4 local_8c;
  long local_88;
  undefined8 uStack_80;
  undefined8 local_78;
  undefined8 uStack_70;
  undefined8 local_68;
  long lStack_60;
  undefined4 *local_58;
  undefined8 *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 uStack_30;
  undefined8 local_28;
  undefined8 uStack_20;
  undefined8 local_18;
  undefined8 uStack_10;
  
  iVar10 = cv::_InputArray::kind(param_4);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_4 + 8);
    local_430 = &iStack_468;
    local_428 = &local_420;
    local_470 = *(uint *)pMVar17;
    iStack_46c = *(int *)(pMVar17 + 4);
    iStack_468 = *(int *)(pMVar17 + 8);
    iStack_464 = *(int *)(pMVar17 + 0xc);
    local_460 = *(long *)(pMVar17 + 0x10);
    local_458 = *(undefined8 *)(pMVar17 + 0x18);
    local_450 = *(undefined8 *)(pMVar17 + 0x20);
    local_448 = *(undefined8 *)(pMVar17 + 0x28);
    local_440 = *(undefined8 *)(pMVar17 + 0x30);
    local_438 = *(long *)(pMVar17 + 0x38);
    local_418 = 0;
    local_420 = 0;
    if (local_438 != 0) {
      piVar16 = (int *)(local_438 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar2) {
          *piVar16 = *piVar16 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_420 = **(undefined8 **)(pMVar17 + 0x48);
      local_418 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      iStack_46c = 0;
      cv::Mat::copySize((Mat *)&local_470,pMVar17);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_4);
  }
  if (local_460 == 0) {
LAB_001e4910:
    iVar10 = *param_5;
    iVar19 = 3;
    iVar20 = 3;
    iVar18 = param_5[1];
    if (iVar10 == -1) goto LAB_001e4928;
LAB_001e3d74:
    if (iVar18 == -1) goto LAB_001e4938;
LAB_001e3d7c:
    if (iVar10 < 0) goto LAB_001e4944;
LAB_001e3d80:
    if (((iVar20 <= iVar10) || (iVar19 <= iVar18)) || (iVar18 < 0)) goto LAB_001e4944;
    *param_5 = iVar10;
    param_5[1] = iVar18;
  }
  else {
    if (iStack_46c < 3) {
      lVar13 = (long)iStack_464 * (long)iStack_468;
    }
    else {
      lVar11 = 0;
      lVar13 = 1;
      do {
        piVar16 = local_430 + lVar11;
        lVar11 = lVar11 + 1;
        lVar13 = lVar13 * *piVar16;
      } while ((int)lVar11 < iStack_46c);
    }
    if (lVar13 == 0) goto LAB_001e4910;
    iVar10 = *param_5;
    iVar18 = param_5[1];
    iVar20 = local_430[1];
    iVar19 = *local_430;
    if (iVar10 != -1) goto LAB_001e3d74;
LAB_001e4928:
    iVar10 = iVar20 / 2;
    if (iVar18 != -1) goto LAB_001e3d7c;
LAB_001e4938:
    iVar18 = iVar19 / 2;
    if (-1 < iVar10) goto LAB_001e3d80;
LAB_001e4944:
    local_480 = 0;
    local_478 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_480,0x34);
    uVar9 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar8 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar7 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar6 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar5 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar3 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar12 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar12 = uVar3;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    *(undefined8 *)(pcVar12 + 0x20) = uVar8;
    *(undefined8 *)(pcVar12 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_480,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    cv::String::deallocate((String *)&local_480);
    *param_5 = iVar10;
    param_5[1] = iVar18;
  }
  if ((param_6 == 0) || (iStack_468 * iStack_464 == 1)) {
    cv::_InputArray::copyTo(param_2,(_OutputArray *)param_3);
    if (local_438 != 0) {
      piVar16 = (int *)(local_438 + 0x14);
      do {
        iVar10 = *piVar16;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar2) {
          *piVar16 = iVar10 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar10 == 1) {
        cv::Mat::deallocate((Mat *)&local_470);
      }
    }
    if (0 < iStack_46c) {
      iVar10 = 0;
      piVar16 = local_430;
      do {
        *piVar16 = 0;
        iVar10 = iVar10 + 1;
        piVar16 = piVar16 + 1;
      } while (iVar10 < iStack_46c);
    }
    goto LAB_001e48c0;
  }
  if (local_460 == 0) {
LAB_001e4ae4:
    local_1d0 = param_6 * 2 + 1;
    local_170 = (undefined **)0xffffffffffffffff;
    local_1cc = local_1d0;
    cv::getStructuringElement((cv *)local_230,0,&local_1d0,&local_170);
    cv::Mat::operator=((Mat *)&local_470,(Mat *)local_230);
    cv::Mat::release((Mat *)local_230);
    if (local_1e8 != auStack_1e0) {
      cv::fastFree(local_1e8);
    }
    *param_5 = param_6;
    param_5[1] = param_6;
    param_6 = 1;
  }
  else {
    if (iStack_46c < 3) {
      lVar11 = (long)iStack_464 * (long)iStack_468;
    }
    else {
      lVar13 = 0;
      lVar11 = 1;
      do {
        piVar16 = local_430 + lVar13;
        lVar13 = lVar13 + 1;
        lVar11 = lVar11 * *piVar16;
      } while ((int)lVar13 < iStack_46c);
    }
    if (lVar11 == 0) goto LAB_001e4ae4;
    if (1 < param_6) {
      local_160 = 0;
      local_15c = 0;
      uVar4 = (ulong)local_170 >> 0x20;
      local_170 = (undefined **)CONCAT44((int)uVar4,0x1010000);
      local_168 = (Mat *)&local_470;
      iVar10 = cv::countNonZero((_InputArray *)&local_170);
      if (iVar10 == iStack_468 * iStack_464) {
        local_170 = (undefined **)
                    CONCAT44((int)((ulong)*(undefined8 *)param_5 >> 0x20) * param_6,
                             (int)*(undefined8 *)param_5 * param_6);
        *(undefined ***)param_5 = local_170;
        local_230[0] = CONCAT44(iVar19 + (param_6 + -1) * (iVar19 + -1),
                                iVar20 + (param_6 + -1) * (iVar20 + -1));
        cv::getStructuringElement((cv *)&local_1d0,0,local_230,(_InputArray *)&local_170);
        cv::Mat::operator=((Mat *)&local_470,(Mat *)&local_1d0);
        cv::Mat::release((Mat *)&local_1d0);
        if (local_188 != auStack_180) {
          cv::fastFree(local_188);
        }
        param_6 = 1;
      }
    }
  }
  iVar10 = cv::_InputArray::kind(param_2);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_2 + 8);
    local_3d0 = &uStack_408;
    local_3c8 = &local_3c0;
    local_410 = *(uint *)pMVar17;
    iStack_40c = *(int *)(pMVar17 + 4);
    uStack_408 = *(undefined4 *)(pMVar17 + 8);
    uStack_404 = *(undefined4 *)(pMVar17 + 0xc);
    local_400 = *(undefined8 *)(pMVar17 + 0x10);
    local_3f8 = *(undefined8 *)(pMVar17 + 0x18);
    local_3f0 = *(undefined8 *)(pMVar17 + 0x20);
    local_3e8 = *(undefined8 *)(pMVar17 + 0x28);
    local_3e0 = *(undefined8 *)(pMVar17 + 0x30);
    local_3d8 = *(long *)(pMVar17 + 0x38);
    local_3b8 = 0;
    local_3c0 = 0;
    if (local_3d8 != 0) {
      piVar16 = (int *)(local_3d8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar2) {
          *piVar16 = *piVar16 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_3c0 = **(undefined8 **)(pMVar17 + 0x48);
      local_3b8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      iStack_40c = 0;
      cv::Mat::copySize((Mat *)&local_410,pMVar17);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  local_170 = (undefined **)CONCAT44(*local_3d0,local_3d0[1]);
  cv::_OutputArray::create
            ((_OutputArray *)param_3,(ParallelLoopBody *)&local_170,local_410 & 0xfff,0xffffffff,0,0
            );
  iVar10 = cv::_InputArray::kind(param_3);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_3 + 8);
    local_370 = &uStack_3a8;
    local_368 = &local_360;
    local_3b0 = *(uint *)pMVar17;
    iStack_3ac = *(int *)(pMVar17 + 4);
    uStack_3a8 = *(undefined4 *)(pMVar17 + 8);
    uStack_3a4 = *(undefined4 *)(pMVar17 + 0xc);
    local_3a0 = *(undefined8 *)(pMVar17 + 0x10);
    local_398 = *(undefined8 *)(pMVar17 + 0x18);
    local_390 = *(undefined8 *)(pMVar17 + 0x20);
    local_388 = *(undefined8 *)(pMVar17 + 0x28);
    local_380 = *(undefined8 *)(pMVar17 + 0x30);
    local_378 = *(long *)(pMVar17 + 0x38);
    local_358 = 0;
    local_360 = 0;
    if (local_378 != 0) {
      piVar16 = (int *)(local_378 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar2) {
          *piVar16 = *piVar16 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_360 = **(undefined8 **)(pMVar17 + 0x48);
      local_358 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      iStack_3ac = 0;
      cv::Mat::copySize((Mat *)&local_3b0,pMVar17);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_3);
  }
  uStack_348 = CONCAT44(uStack_404,uStack_408);
  local_350 = (Mat *)CONCAT44(iStack_40c,local_410);
  local_308 = &local_300;
  local_310 = &uStack_348;
  uStack_2f8 = 0;
  local_300 = 0;
  local_1d0 = 0;
  local_1cc = 1;
  local_340 = local_400;
  uStack_338 = local_3f8;
  local_330 = local_3f0;
  uStack_328 = local_3e8;
  local_320 = local_3e0;
  lStack_318 = local_3d8;
  if (local_3d8 != 0) {
    piVar16 = (int *)(local_3d8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_40c < 3) {
    local_300 = *local_3c8;
    uStack_2f8 = local_3c8[1];
  }
  else {
    local_350 = (Mat *)(ulong)local_410;
    cv::Mat::copySize((Mat *)&local_350,(Mat *)&local_410);
  }
  uStack_2e8 = CONCAT44(uStack_3a4,uStack_3a8);
  local_2f0 = CONCAT44(iStack_3ac,local_3b0);
  local_2a8 = &local_2a0;
  local_2b0 = &uStack_2e8;
  uStack_298 = 0;
  local_2a0 = 0;
  local_2e0 = local_3a0;
  uStack_2d8 = local_398;
  local_2d0 = local_390;
  uStack_2c8 = local_388;
  local_2c0 = local_380;
  lStack_2b8 = local_378;
  if (local_378 != 0) {
    piVar16 = (int *)(local_378 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_3ac < 3) {
    local_2a0 = *local_368;
    uStack_298 = local_368[1];
  }
  else {
    local_2f0 = (ulong)local_3b0;
    cv::Mat::copySize((Mat *)&local_2f0,(Mat *)&local_3b0);
  }
  uStack_288 = CONCAT44(iStack_464,iStack_468);
  local_290 = CONCAT44(iStack_46c,local_470);
  local_248 = &local_240;
  local_250 = &uStack_288;
  uStack_238 = 0;
  local_240 = 0;
  local_280 = local_460;
  uStack_278 = local_458;
  local_270 = local_450;
  uStack_268 = local_448;
  local_260 = local_440;
  lStack_258 = local_438;
  if (local_438 != 0) {
    piVar16 = (int *)(local_438 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_46c < 3) {
    local_240 = *local_428;
    uStack_238 = local_428[1];
  }
  else {
    local_290 = (ulong)local_470;
    cv::Mat::copySize((Mat *)&local_290,(Mat *)&local_470);
  }
  local_160 = 0;
  local_15c = 0;
  local_128 = &local_160;
  local_170 = &PTR_FUN_004f4810;
  local_120 = &local_118;
  local_c8 = &local_100;
  local_108 = 0x42ff0000;
  local_c0 = &local_b8;
  local_50 = &local_48;
  local_58 = &local_90;
  local_138 = 0;
  local_110 = 0;
  local_118 = 0;
  local_104 = 0;
  local_98 = 0x42ff0000;
  local_100 = 0;
  local_fc = 0;
  local_f8 = 0;
  uStack_f0 = 0;
  local_e8 = 0;
  uStack_e0 = 0;
  local_d8 = 0;
  lStack_d0 = 0;
  local_b0 = 0;
  local_b8 = 0;
  local_94 = 0;
  uVar3 = *(undefined8 *)param_5;
  local_90 = 0;
  local_8c = 0;
  local_88 = 0;
  uStack_80 = 0;
  local_78 = 0;
  uStack_70 = 0;
  local_68 = 0;
  lStack_60 = 0;
  local_40 = 0;
  local_48 = 0;
  local_38 = 0;
  local_28 = *param_8;
  uStack_20 = param_8[1];
  local_18 = param_8[2];
  uStack_10 = param_8[3];
  if (lStack_318 != 0) {
    piVar16 = (int *)(lStack_318 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  lStack_130 = 0;
  local_158 = 0;
  uStack_140 = 0;
  local_148 = 0;
  uStack_150 = 0;
  if (local_350._4_4_ < 3) {
    local_168 = local_350;
    local_160 = (undefined4)uStack_348;
    local_118 = *local_308;
    local_15c = uStack_348._4_4_;
    local_110 = local_308[1];
  }
  else {
    local_168 = (Mat *)((ulong)local_350 & 0xffffffff);
    cv::Mat::copySize((Mat *)&local_168,(Mat *)&local_350);
  }
  uStack_150 = uStack_338;
  local_158 = local_340;
  uStack_140 = uStack_328;
  local_148 = local_330;
  lStack_130 = lStack_318;
  local_138 = local_320;
  if (lStack_2b8 != 0) {
    piVar16 = (int *)(lStack_2b8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_d0 != 0) {
    piVar16 = (int *)(lStack_d0 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_108);
    }
  }
  lStack_d0 = 0;
  local_f8 = 0;
  uStack_e0 = 0;
  local_e8 = 0;
  uStack_f0 = 0;
  if (local_104 < 1) {
LAB_001e4344:
    local_108 = (undefined4)local_2f0;
    if (2 < local_2f0._4_4_) goto LAB_001e4350;
    local_104 = local_2f0._4_4_;
    local_fc = uStack_2e8._4_4_;
    local_100 = (undefined4)uStack_2e8;
    *local_c0 = *local_2a8;
    local_c0[1] = local_2a8[1];
  }
  else {
    iVar10 = 0;
    puVar15 = local_c8;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < local_104);
    if (local_104 < 3) goto LAB_001e4344;
LAB_001e4350:
    local_108 = (undefined4)local_2f0;
    cv::Mat::copySize((Mat *)&local_108,(Mat *)&local_2f0);
  }
  uStack_f0 = uStack_2d8;
  local_f8 = local_2e0;
  uStack_e0 = uStack_2c8;
  local_e8 = local_2d0;
  lStack_d0 = lStack_2b8;
  local_d8 = local_2c0;
  local_a8 = 1;
  if (lStack_258 != 0) {
    piVar16 = (int *)(lStack_258 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = *piVar16 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  local_a4 = param_6;
  local_a0 = param_1;
  if (lStack_60 != 0) {
    piVar16 = (int *)(lStack_60 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_98);
    }
  }
  lStack_60 = 0;
  local_88 = 0;
  uStack_70 = 0;
  local_78 = 0;
  uStack_80 = 0;
  if (local_94 < 1) {
LAB_001e4428:
    local_98 = (undefined4)local_290;
    if (2 < local_290._4_4_) goto LAB_001e4434;
    local_94 = local_290._4_4_;
    local_90 = (undefined4)uStack_288;
    local_8c = uStack_288._4_4_;
    *local_50 = *local_248;
    local_50[1] = local_248[1];
  }
  else {
    iVar10 = 0;
    puVar15 = local_58;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < local_94);
    if (local_94 < 3) goto LAB_001e4428;
LAB_001e4434:
    local_98 = (undefined4)local_290;
    cv::Mat::copySize((Mat *)&local_98,(Mat *)&local_290);
  }
  uStack_80 = uStack_278;
  local_88 = local_280;
  uStack_70 = uStack_268;
  local_78 = local_270;
  lStack_60 = lStack_258;
  local_68 = local_260;
  uStack_30 = CONCAT44(param_7,param_7);
  local_38 = uVar3;
  cv::parallel_for_((Range *)&local_1d0,(ParallelLoopBody *)&local_170,-1.0);
  local_170 = &PTR_FUN_004f4810;
  if (lStack_60 != 0) {
    piVar16 = (int *)(lStack_60 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_98);
    }
  }
  lStack_60 = 0;
  local_88 = 0;
  uStack_70 = 0;
  local_78 = 0;
  uStack_80 = 0;
  if (0 < local_94) {
    iVar10 = 0;
    puVar15 = local_58;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < local_94);
  }
  if (local_50 != &local_48) {
    cv::fastFree(local_50);
  }
  if (lStack_d0 != 0) {
    piVar16 = (int *)(lStack_d0 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_108);
    }
  }
  lStack_d0 = 0;
  local_f8 = 0;
  uStack_e0 = 0;
  local_e8 = 0;
  uStack_f0 = 0;
  if (0 < local_104) {
    iVar10 = 0;
    puVar15 = local_c8;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < local_104);
  }
  if (local_c0 != &local_b8) {
    cv::fastFree(local_c0);
  }
  if (lStack_130 != 0) {
    piVar16 = (int *)(lStack_130 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_168);
    }
  }
  lStack_130 = 0;
  local_158 = 0;
  uStack_140 = 0;
  local_148 = 0;
  uStack_150 = 0;
  if (0 < local_168._4_4_) {
    iVar10 = 0;
    puVar15 = local_128;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < local_168._4_4_);
  }
  if (local_120 != &local_118) {
    cv::fastFree(local_120);
  }
  cv::ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_170);
  if (lStack_258 != 0) {
    piVar16 = (int *)(lStack_258 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_290);
    }
  }
  lStack_258 = 0;
  local_280 = 0;
  uStack_268 = 0;
  local_270 = 0;
  uStack_278 = 0;
  if (0 < local_290._4_4_) {
    iVar10 = 0;
    puVar14 = local_250;
    do {
      *(undefined4 *)puVar14 = 0;
      iVar10 = iVar10 + 1;
      puVar14 = (undefined8 *)((long)puVar14 + 4);
    } while (iVar10 < local_290._4_4_);
  }
  if (local_248 != &local_240) {
    cv::fastFree(local_248);
  }
  if (lStack_2b8 != 0) {
    piVar16 = (int *)(lStack_2b8 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_2f0);
    }
  }
  lStack_2b8 = 0;
  local_2e0 = 0;
  uStack_2c8 = 0;
  local_2d0 = 0;
  uStack_2d8 = 0;
  if (0 < local_2f0._4_4_) {
    iVar10 = 0;
    puVar14 = local_2b0;
    do {
      *(undefined4 *)puVar14 = 0;
      iVar10 = iVar10 + 1;
      puVar14 = (undefined8 *)((long)puVar14 + 4);
    } while (iVar10 < local_2f0._4_4_);
  }
  if (local_2a8 != &local_2a0) {
    cv::fastFree(local_2a8);
  }
  if (lStack_318 != 0) {
    piVar16 = (int *)(lStack_318 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_350);
    }
  }
  lStack_318 = 0;
  local_340 = 0;
  uStack_328 = 0;
  local_330 = 0;
  uStack_338 = 0;
  if (0 < local_350._4_4_) {
    iVar10 = 0;
    puVar14 = local_310;
    do {
      *(undefined4 *)puVar14 = 0;
      iVar10 = iVar10 + 1;
      puVar14 = (undefined8 *)((long)puVar14 + 4);
    } while (iVar10 < local_350._4_4_);
  }
  if (local_308 != &local_300) {
    cv::fastFree(local_308);
  }
  if (local_378 != 0) {
    piVar16 = (int *)(local_378 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_3b0);
    }
  }
  local_378 = 0;
  local_3a0 = 0;
  local_388 = 0;
  local_390 = 0;
  local_398 = 0;
  if (0 < iStack_3ac) {
    iVar10 = 0;
    puVar15 = local_370;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < iStack_3ac);
  }
  if (local_368 != &local_360) {
    cv::fastFree(local_368);
  }
  if (local_3d8 != 0) {
    piVar16 = (int *)(local_3d8 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_410);
    }
  }
  local_3d8 = 0;
  local_400 = 0;
  local_3e8 = 0;
  local_3f0 = 0;
  local_3f8 = 0;
  if (0 < iStack_40c) {
    iVar10 = 0;
    puVar15 = local_3d0;
    do {
      *puVar15 = 0;
      iVar10 = iVar10 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar10 < iStack_40c);
  }
  if (local_3c8 != &local_3c0) {
    cv::fastFree(local_3c8);
  }
  if (local_438 != 0) {
    piVar16 = (int *)(local_438 + 0x14);
    do {
      iVar10 = *piVar16;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar2) {
        *piVar16 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_470);
    }
  }
  if (0 < iStack_46c) {
    iVar10 = 0;
    piVar16 = local_430;
    do {
      *piVar16 = 0;
      iVar10 = iVar10 + 1;
      piVar16 = piVar16 + 1;
    } while (iVar10 < iStack_46c);
  }
LAB_001e48c0:
  local_438 = 0;
  local_448 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (local_428 != &local_420) {
    cv::fastFree(local_428);
  }
  return;
}


==================================================================

### FUNC 001e5098 (84 bytes) name=erode

/* cv::erode(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&,
   cv::Point_<int>, int, int, cv::Scalar_<double> const&) */

void cv::erode(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4,
              undefined4 param_5,undefined4 param_6,undefined8 param_7)

{
  undefined8 local_8;
  
  local_8 = *param_4;
  FUN_001e3cb0(0,param_1,param_2,param_3,&local_8,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 001e50ec (84 bytes) name=dilate

/* cv::dilate(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&,
   cv::Point_<int>, int, int, cv::Scalar_<double> const&) */

void cv::dilate(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4,
               undefined4 param_5,undefined4 param_6,undefined8 param_7)

{
  undefined8 local_8;
  
  local_8 = *param_4;
  FUN_001e3cb0(1,param_1,param_2,param_3,&local_8,param_5,param_6,param_7);
  return;
}


==================================================================

### FUNC 001e5140 (440 bytes) name=~MatExpr

/* cv::MatExpr::~MatExpr() */

void __thiscall cv::MatExpr::~MatExpr(MatExpr *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  if (*(long *)(this + 0x108) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x108) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)(this + 0xd0));
    }
  }
  *(undefined8 *)(this + 0x108) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  if (0 < *(int *)(this + 0xd4)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(this + 0x110);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(this + 0xd4));
  }
  if (*(MatExpr **)(this + 0x118) != this + 0x120) {
    fastFree(*(MatExpr **)(this + 0x118));
  }
  if (*(long *)(this + 0xa8) != 0) {
    piVar1 = (int *)(*(long *)(this + 0xa8) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)(this + 0x70));
    }
  }
  *(undefined8 *)(this + 0xa8) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  if (0 < *(int *)(this + 0x74)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(this + 0xb0);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(this + 0x74));
  }
  if (*(MatExpr **)(this + 0xb8) != this + 0xc0) {
    fastFree(*(MatExpr **)(this + 0xb8));
  }
  if (*(long *)(this + 0x48) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x48) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)(this + 0x10));
    }
  }
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  if (0 < *(int *)(this + 0x14)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(this + 0x50);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(this + 0x14));
  }
  if (*(MatExpr **)(this + 0x58) != this + 0x60) {
    fastFree(*(MatExpr **)(this + 0x58));
    return;
  }
  return;
}


==================================================================

### FUNC 001e5350 (3796 bytes) name=morphologyEx

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::morphologyEx(cv::_InputArray const&, cv::_OutputArray const&, int, cv::_InputArray const&,
   cv::Point_<int>, int, int, cv::Scalar_<double> const&) */

void cv::morphologyEx(_InputArray *param_1,_InputArray *param_2,undefined4 param_3,
                     _InputArray *param_4,undefined4 *param_5,undefined4 param_6,undefined4 param_7,
                     undefined8 param_8)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  undefined1 uVar7;
  int iVar8;
  undefined8 *puVar9;
  _InputArray *p_Var10;
  undefined4 *puVar11;
  int *piVar12;
  Mat *pMVar13;
  MatExpr *this;
  MatExpr *pMVar14;
  long lVar15;
  long lVar16;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined4 local_4e8 [2];
  Mat *local_4e0;
  undefined4 local_4d8;
  undefined4 local_4d4;
  undefined4 local_4d0 [2];
  Mat *local_4c8;
  undefined4 local_4c0;
  undefined4 local_4bc;
  undefined4 local_4b8;
  undefined4 local_4b4;
  Mat *local_4b0;
  undefined4 local_4a8;
  undefined4 local_4a4;
  undefined4 local_4a0;
  int local_49c;
  int local_498;
  int local_494;
  long local_490;
  undefined8 uStack_488;
  undefined8 local_480;
  undefined8 uStack_478;
  undefined8 local_470;
  long lStack_468;
  int *local_460;
  undefined8 *local_458;
  undefined8 local_450;
  undefined8 local_448;
  undefined4 local_440;
  int local_43c;
  undefined8 local_438;
  long local_430;
  undefined8 uStack_428;
  undefined8 local_420;
  undefined8 uStack_418;
  undefined8 local_410;
  long lStack_408;
  undefined4 *local_400;
  undefined8 *local_3f8;
  undefined8 auStack_3f0 [2];
  uint local_3e0;
  int local_3dc;
  undefined4 local_3d8;
  undefined4 local_3d4;
  long local_3d0;
  undefined8 local_3c8;
  undefined8 local_3c0;
  undefined8 local_3b8;
  undefined8 local_3b0;
  long local_3a8;
  undefined4 *local_3a0;
  undefined8 *local_398;
  undefined8 local_390;
  undefined8 local_388;
  undefined8 uStack_380;
  undefined8 local_378;
  undefined8 local_370;
  undefined8 local_368;
  undefined8 local_360;
  undefined8 local_358;
  undefined8 local_350;
  long local_348;
  undefined8 *local_340;
  undefined8 *local_338;
  undefined8 local_330;
  undefined8 local_328;
  undefined4 local_320;
  int local_31c;
  undefined4 local_318;
  undefined4 local_314;
  long local_310;
  undefined8 local_308;
  undefined8 local_300;
  undefined8 local_2f8;
  undefined8 local_2f0;
  long local_2e8;
  undefined4 *local_2e0;
  undefined8 *local_2d8;
  undefined8 local_2d0;
  undefined8 local_2c8;
  undefined4 local_2c0;
  undefined4 uStack_2bc;
  Mat *local_2b8;
  undefined4 local_2b0;
  undefined4 local_2ac;
  undefined4 local_160;
  undefined4 uStack_15c;
  Mat *local_158;
  undefined4 local_150;
  undefined4 local_14c;
  
  iVar8 = _InputArray::kind(param_4);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_4 + 8);
    local_460 = &local_498;
    local_458 = &local_450;
    local_4a0 = *(undefined4 *)pMVar13;
    local_49c = *(int *)(pMVar13 + 4);
    local_498 = *(int *)(pMVar13 + 8);
    local_494 = *(int *)(pMVar13 + 0xc);
    local_490 = *(long *)(pMVar13 + 0x10);
    uStack_488 = *(undefined8 *)(pMVar13 + 0x18);
    local_480 = *(undefined8 *)(pMVar13 + 0x20);
    uStack_478 = *(undefined8 *)(pMVar13 + 0x28);
    local_470 = *(undefined8 *)(pMVar13 + 0x30);
    lStack_468 = *(long *)(pMVar13 + 0x38);
    local_448 = 0;
    local_450 = 0;
    if (lStack_468 != 0) {
      piVar12 = (int *)(lStack_468 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_450 = **(undefined8 **)(pMVar13 + 0x48);
      local_448 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_49c = 0;
      Mat::copySize((Mat *)&local_4a0,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  if (local_490 != 0) {
    if (local_49c < 3) {
      lVar16 = (long)local_494 * (long)local_498;
    }
    else {
      lVar15 = 0;
      lVar16 = 1;
      do {
        piVar12 = local_460 + lVar15;
        lVar15 = lVar15 + 1;
        lVar16 = lVar16 * *piVar12;
      } while ((int)lVar15 < local_49c);
    }
    if (lVar16 != 0) goto LAB_001e53f8;
  }
  local_2c0 = 3;
  uStack_2bc = 3;
  local_160 = 1;
  uStack_15c = 1;
  getStructuringElement((cv *)&local_440,0,&local_2c0,&local_160);
  if (lStack_408 != 0) {
    piVar12 = (int *)(lStack_408 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = *piVar12 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_468 == 0) {
LAB_001e57b8:
    if (local_49c < 1) goto LAB_001e5804;
LAB_001e57d8:
    iVar8 = 0;
    piVar12 = local_460;
    do {
      *piVar12 = 0;
      iVar8 = iVar8 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar8 < local_49c);
    if (local_49c < 3) goto LAB_001e5804;
LAB_001e5810:
    lStack_468 = 0;
    uStack_478 = 0;
    local_480 = 0;
    uStack_488 = 0;
    local_490 = 0;
    local_4a0 = local_440;
    Mat::copySize((Mat *)&local_4a0,(Mat *)&local_440);
  }
  else {
    piVar12 = (int *)(lStack_468 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 != 1) goto LAB_001e57b8;
    Mat::deallocate((Mat *)&local_4a0);
    if (0 < local_49c) goto LAB_001e57d8;
LAB_001e5804:
    puVar9 = local_3f8;
    local_4a0 = local_440;
    if (2 < local_43c) goto LAB_001e5810;
    local_494 = local_438._4_4_;
    local_498 = (int)local_438;
    local_49c = local_43c;
    *local_458 = *local_3f8;
    local_458[1] = puVar9[1];
  }
  uStack_478 = uStack_418;
  local_480 = local_420;
  lStack_468 = lStack_408;
  local_470 = local_410;
  uStack_488 = uStack_428;
  local_490 = local_430;
  if (lStack_408 != 0) {
    piVar12 = (int *)(lStack_408 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_440);
    }
  }
  lStack_408 = 0;
  local_430 = 0;
  uStack_418 = 0;
  local_420 = 0;
  uStack_428 = 0;
  if (0 < local_43c) {
    iVar8 = 0;
    do {
      *local_400 = 0;
      iVar8 = iVar8 + 1;
      local_400 = local_400 + 1;
    } while (iVar8 < local_43c);
  }
  if (local_3f8 != auStack_3f0) {
    fastFree(local_3f8);
  }
LAB_001e53f8:
  iVar8 = _InputArray::kind(param_1);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_3a0 = &local_3d8;
    local_398 = &local_390;
    local_3e0 = *(uint *)pMVar13;
    local_3dc = *(int *)(pMVar13 + 4);
    local_3d8 = *(undefined4 *)(pMVar13 + 8);
    local_3d4 = *(undefined4 *)(pMVar13 + 0xc);
    local_3d0 = *(long *)(pMVar13 + 0x10);
    local_3c8 = *(undefined8 *)(pMVar13 + 0x18);
    local_3c0 = *(undefined8 *)(pMVar13 + 0x20);
    local_3b8 = *(undefined8 *)(pMVar13 + 0x28);
    local_3b0 = *(undefined8 *)(pMVar13 + 0x30);
    local_3a8 = *(long *)(pMVar13 + 0x38);
    local_388 = 0;
    local_390 = 0;
    if (local_3a8 != 0) {
      piVar12 = (int *)(local_3a8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_390 = **(undefined8 **)(pMVar13 + 0x48);
      local_388 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_3dc = 0;
      Mat::copySize((Mat *)&local_3e0,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  this = (MatExpr *)&local_160;
  local_338 = &local_330;
  local_340 = &local_378;
  uStack_380 = DAT_001e6318;
  local_370 = 0;
  local_368 = 0;
  local_360 = 0;
  local_378 = 0;
  local_358 = 0;
  local_350 = 0;
  local_348 = 0;
  uStack_15c = *local_3a0;
  local_160 = local_3a0[1];
  local_328 = 0;
  local_330 = 0;
  _OutputArray::create((_OutputArray *)param_2,this,local_3e0 & 0xfff,0xffffffff,0,0);
  iVar8 = _InputArray::kind(param_2);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_2 + 8);
    local_2e0 = &local_318;
    local_2d8 = &local_2d0;
    local_320 = *(undefined4 *)pMVar13;
    local_31c = *(int *)(pMVar13 + 4);
    local_318 = *(undefined4 *)(pMVar13 + 8);
    local_314 = *(undefined4 *)(pMVar13 + 0xc);
    local_310 = *(long *)(pMVar13 + 0x10);
    local_308 = *(undefined8 *)(pMVar13 + 0x18);
    local_300 = *(undefined8 *)(pMVar13 + 0x20);
    local_2f8 = *(undefined8 *)(pMVar13 + 0x28);
    local_2f0 = *(undefined8 *)(pMVar13 + 0x30);
    local_2e8 = *(long *)(pMVar13 + 0x38);
    local_2c8 = 0;
    local_2d0 = 0;
    if (local_2e8 != 0) {
      piVar12 = (int *)(local_2e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_2d0 = **(undefined8 **)(pMVar13 + 0x48);
      local_2c8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_31c = 0;
      Mat::copySize((Mat *)&local_320,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  switch(param_3) {
  case 0:
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    break;
  case 1:
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    break;
  case 2:
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_320;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    break;
  case 3:
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_320;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    break;
  case 4:
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&uStack_380;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,&local_2c0,this,(_InputArray *)&local_4b8,param_6,param_7,param_8);
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&local_320;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,&local_2c0,this,(_InputArray *)&local_4b8,param_6,param_7,param_8);
    local_4a8 = 0;
    local_4b8 = 0x1010000;
    local_4d0[0] = 0x1010000;
    local_4a4 = 0;
    local_4d8 = 0;
    local_4d4 = 0;
    local_4e8[0] = 0x2010000;
    local_4c0 = 0;
    local_4bc = 0;
    local_4e0 = (Mat *)&local_320;
    local_4c8 = (Mat *)&uStack_380;
    local_4b0 = (Mat *)&local_320;
    p_Var10 = (_InputArray *)noArray();
    subtract((_InputArray *)&local_4b8,(_InputArray *)local_4d0,(_OutputArray *)local_4e8,p_Var10,-1
            );
    break;
  case 5:
    if (local_3d0 != local_310) {
      Mat::operator=((Mat *)&uStack_380,(Mat *)&local_320);
    }
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&uStack_380;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,(MatExpr *)&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&uStack_380;
    local_2b8 = (Mat *)&uStack_380;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,(MatExpr *)&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    operator-((cv *)&local_3e0,(Mat *)&uStack_380,(Mat *)this);
    (**(code **)(*(long *)CONCAT44(uStack_2bc,local_2c0) + 0x18))
              ((long *)CONCAT44(uStack_2bc,local_2c0),(MatExpr *)&local_2c0,(Mat *)&local_320,
               0xffffffff);
    MatExpr::~MatExpr((MatExpr *)&local_2c0);
    break;
  case 6:
    if (local_3d0 != local_310) {
      Mat::operator=((Mat *)&uStack_380,(Mat *)&local_320);
    }
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    local_438 = (Mat *)&local_3e0;
    local_2b8 = (Mat *)&uStack_380;
    local_158 = (Mat *)&local_4a0;
    dilate(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    local_4b8 = *param_5;
    local_4b4 = param_5[1];
    local_430 = 0;
    local_440 = 0x1010000;
    local_2b0 = 0;
    local_2ac = 0;
    local_2c0 = 0x2010000;
    local_150 = 0;
    local_14c = 0;
    local_160 = 0x1010000;
    pMVar14 = this;
    local_438 = (Mat *)&uStack_380;
    local_2b8 = (Mat *)&uStack_380;
    local_158 = (Mat *)&local_4a0;
    erode(&local_440,&local_2c0,this,&local_4b8,param_6,param_7,param_8);
    operator-((cv *)&uStack_380,(Mat *)&local_3e0,(Mat *)pMVar14);
    (**(code **)(*(long *)CONCAT44(uStack_15c,local_160) + 0x18))
              ((long *)CONCAT44(uStack_15c,local_160),this,(Mat *)&local_320,0xffffffff);
    MatExpr::~MatExpr(this);
    break;
  default:
    local_4f8 = 0;
    local_4f0 = 0;
    puVar9 = (undefined8 *)String::allocate((String *)&local_4f8,0x1f);
    uVar7 = DAT_0045be96;
    uVar6 = DAT_0045be94;
    uVar5 = DAT_0045be90;
    uVar4 = DAT_0045be80;
    uVar3 = DAT_0045be78;
    puVar9[2] = _DAT_0045be88;
    *(undefined4 *)(puVar9 + 3) = uVar5;
    *(undefined2 *)((long)puVar9 + 0x1c) = uVar6;
    *(undefined1 *)((long)puVar9 + 0x1e) = uVar7;
    *puVar9 = uVar3;
    puVar9[1] = uVar4;
    error(-5,(String *)&local_4f8,
          "void cv::morphologyEx(cv::InputArray, cv::OutputArray, int, cv::InputArray, cv::Point, int, int, const Scalar&)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x759);
    String::deallocate((String *)&local_4f8);
  }
  if (local_2e8 != 0) {
    piVar12 = (int *)(local_2e8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_320);
    }
  }
  local_2e8 = 0;
  local_310 = 0;
  local_2f8 = 0;
  local_300 = 0;
  local_308 = 0;
  if (0 < local_31c) {
    iVar8 = 0;
    puVar11 = local_2e0;
    do {
      *puVar11 = 0;
      iVar8 = iVar8 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar8 < local_31c);
  }
  if (local_2d8 != &local_2d0) {
    fastFree(local_2d8);
  }
  if (local_348 != 0) {
    piVar12 = (int *)(local_348 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&uStack_380);
    }
  }
  local_348 = 0;
  local_370 = 0;
  local_358 = 0;
  local_360 = 0;
  local_368 = 0;
  if (0 < uStack_380._4_4_) {
    iVar8 = 0;
    puVar9 = local_340;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar8 = iVar8 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar8 < uStack_380._4_4_);
  }
  if (local_338 != &local_330) {
    fastFree(local_338);
  }
  if (local_3a8 != 0) {
    piVar12 = (int *)(local_3a8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_3e0);
    }
  }
  local_3a8 = 0;
  local_3d0 = 0;
  local_3b8 = 0;
  local_3c0 = 0;
  local_3c8 = 0;
  if (0 < local_3dc) {
    iVar8 = 0;
    puVar11 = local_3a0;
    do {
      *puVar11 = 0;
      iVar8 = iVar8 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar8 < local_3dc);
  }
  if (local_398 != &local_390) {
    fastFree(local_398);
  }
  if (lStack_468 != 0) {
    piVar12 = (int *)(lStack_468 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_4a0);
    }
  }
  lStack_468 = 0;
  local_490 = 0;
  uStack_478 = 0;
  local_480 = 0;
  uStack_488 = 0;
  if (0 < local_49c) {
    iVar8 = 0;
    piVar12 = local_460;
    do {
      *piVar12 = 0;
      iVar8 = iVar8 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar8 < local_49c);
  }
  if (local_458 != &local_450) {
    fastFree(local_458);
  }
  return;
}


==================================================================

### FUNC 001e6320 (1484 bytes) name=cvCreateStructuringElementEx

int * cvCreateStructuringElementEx
                (int param_1,int param_2,uint param_3,uint param_4,int param_5,int *param_6)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  long lVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  char cVar8;
  bool bVar9;
  uint3 uVar10;
  void *__dest;
  int *piVar11;
  int *piVar12;
  uint *puVar13;
  int iVar14;
  ulong uVar15;
  ulong *puVar16;
  long lVar17;
  int *piVar18;
  uint uVar19;
  uint uVar20;
  byte *pbVar21;
  undefined1 uVar22;
  undefined1 uVar23;
  undefined1 uVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  int local_70;
  int local_6c;
  uint local_68;
  uint local_64;
  undefined8 local_60;
  undefined8 local_58;
  uint *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if (((((param_1 < 1) || (param_2 < 1)) ||
       (((uint)((int)param_3 < param_1) & ~param_3 >> 0x1f & ~param_4 >> 0x1f) == 0)) ||
      (param_2 <= (int)param_4)) || ((param_5 == 100 && (param_6 == (int *)0x0)))) {
    local_60 = 0;
    local_58 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_60,0x6b);
    memcpy(__dest,&DAT_0045be98,0x6b);
    cv::error(-0xd7,(String *)&local_60,
              "IplConvKernel* cvCreateStructuringElementEx(int, int, int, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x765);
    cv::String::deallocate((String *)&local_60);
  }
  uVar7 = param_2 * param_1;
  piVar11 = (int *)cv::cvAlloc((long)(int)(uVar7 * 4 + 0x40));
  *piVar11 = param_1;
  piVar11[1] = param_2;
  piVar11[2] = param_3;
  piVar11[3] = param_4;
  if (param_5 < 2) {
    piVar11[6] = param_5;
    *(int **)(piVar11 + 4) = piVar11 + 8;
  }
  else {
    piVar3 = piVar11 + 8;
    piVar11[6] = 100;
    *(int **)(piVar11 + 4) = piVar3;
    if (param_5 == 100) {
      if ((int)uVar7 < 1) {
        return piVar11;
      }
      if ((piVar3 < param_6 + 4 && param_6 < piVar11 + 0xc) || (uVar7 < 0xc)) {
        lVar17 = 0;
        do {
          lVar4 = lVar17 + 4;
          *(undefined4 *)((long)piVar11 + lVar17 + 0x20) = *(undefined4 *)((long)param_6 + lVar17);
          lVar17 = lVar4;
        } while (lVar4 != ((ulong)(uVar7 - 1) + 1) * 4);
        return piVar11;
      }
      uVar20 = -((uint)((ulong)param_6 >> 2) & 3) & 3;
      uVar6 = uVar7;
      if (uVar20 < uVar7) {
        uVar6 = uVar20;
      }
      uVar20 = uVar6;
      if ((uVar6 != 0) && (piVar11[8] = *param_6, uVar6 != 1)) {
        piVar11[9] = param_6[1];
        if (uVar6 == 3) {
          piVar11[10] = param_6[2];
        }
        else {
          uVar20 = 2;
        }
      }
      uVar1 = ((uVar7 - uVar6) - 4 >> 2) + 1;
      uVar19 = 0;
      iVar14 = uVar1 * 4;
      piVar12 = param_6 + uVar6;
      piVar18 = piVar11 + (ulong)uVar6 + 8;
      do {
        uVar25 = *(undefined8 *)piVar12;
        uVar19 = uVar19 + 1;
        *(undefined8 *)(piVar18 + 2) = *(undefined8 *)(piVar12 + 2);
        *(undefined8 *)piVar18 = uVar25;
        piVar12 = piVar12 + 4;
        piVar18 = piVar18 + 4;
      } while (uVar19 < uVar1);
      uVar20 = uVar20 + iVar14;
      if (uVar7 - uVar6 == iVar14) {
        return piVar11;
      }
      uVar15 = -(ulong)(uVar20 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar20 << 2;
      *(undefined4 *)((long)piVar3 + uVar15) = *(undefined4 *)((long)param_6 + uVar15);
      if ((int)uVar7 <= (int)(uVar20 + 1)) {
        return piVar11;
      }
      *(undefined4 *)((long)piVar3 + uVar15 + 4) = *(undefined4 *)((long)param_6 + uVar15 + 4);
      if ((int)uVar7 <= (int)(uVar20 + 2)) {
        return piVar11;
      }
      *(undefined4 *)((long)piVar3 + uVar15 + 8) = *(undefined4 *)((long)param_6 + uVar15 + 8);
      return piVar11;
    }
  }
  local_70 = param_1;
  local_6c = param_2;
  local_68 = param_3;
  local_64 = param_4;
  cv::getStructuringElement((cv *)&local_60,param_5,&local_70,&local_68);
  if (0 < (int)uVar7) {
    puVar13 = *(uint **)(piVar11 + 4);
    if ((local_50 < puVar13 + (int)uVar7 && puVar13 < (uint *)((long)local_50 + (long)(int)uVar7))
       || (uVar7 < 0x15)) {
      lVar17 = 0;
      do {
        puVar13[lVar17] = (uint)*(byte *)((long)local_50 + lVar17);
        lVar17 = lVar17 + 1;
      } while ((int)lVar17 < (int)uVar7);
    }
    else {
      uVar20 = -((uint)((ulong)puVar13 >> 2) & 3) & 3;
      uVar6 = uVar7;
      if (uVar20 < uVar7) {
        uVar6 = uVar20;
      }
      uVar20 = uVar6;
      if ((uVar6 != 0) && (*puVar13 = (uint)(byte)*local_50, uVar6 != 1)) {
        puVar13[1] = (uint)*(byte *)((long)local_50 + 1);
        if (uVar6 == 3) {
          puVar13[2] = (uint)*(byte *)((long)local_50 + 2);
        }
        else {
          uVar20 = 2;
        }
      }
      uVar19 = 0;
      uVar1 = ((uVar7 - uVar6) - 0x10 >> 4) + 1;
      iVar14 = uVar1 * 0x10;
      puVar16 = (ulong *)(puVar13 + uVar6);
      pbVar21 = (byte *)((long)local_50 + (ulong)uVar6);
      do {
        uVar26 = *(undefined8 *)(pbVar21 + 8);
        uVar25 = *(undefined8 *)pbVar21;
        uVar19 = uVar19 + 1;
        uVar22 = (undefined1)((ulong)uVar25 >> 8);
        uVar23 = (undefined1)((ulong)uVar25 >> 0x28);
        uVar10 = CONCAT12((char)((ulong)uVar26 >> 8),(short)uVar26) & 0xff00ff;
        uVar24 = (undefined1)((ulong)uVar26 >> 0x28);
        puVar16[1] = (ulong)CONCAT14((char)((ulong)uVar25 >> 0x18),
                                     (uint)(byte)((ulong)uVar25 >> 0x10));
        *puVar16 = (ulong)((uint6)CONCAT14(uVar22,(uint)CONCAT12(uVar22,(ushort)(byte)uVar25)) &
                          0xffff0000ffff);
        puVar16[3] = (ulong)CONCAT14((char)((ulong)uVar25 >> 0x38),
                                     (uint)(byte)((ulong)uVar25 >> 0x30));
        puVar16[2] = (ulong)((uint6)CONCAT14(uVar23,(uint)CONCAT12(uVar23,(ushort)(byte)((ulong)
                                                  uVar25 >> 0x20))) & 0xffff0000ffff);
        puVar16[5] = (ulong)CONCAT14((char)((ulong)uVar26 >> 0x18),
                                     (uint)(byte)((ulong)uVar26 >> 0x10));
        puVar16[4] = (ulong)((uint6)CONCAT14((char)(uVar10 >> 0x10),(uint)uVar10) & 0xffff0000ffff);
        puVar16[7] = (ulong)CONCAT14((char)((ulong)uVar26 >> 0x38),
                                     (uint)(byte)((ulong)uVar26 >> 0x30));
        puVar16[6] = (ulong)((uint6)CONCAT14(uVar24,(uint)CONCAT12(uVar24,(ushort)(byte)((ulong)
                                                  uVar26 >> 0x20))) & 0xffff0000ffff);
        puVar16 = puVar16 + 8;
        pbVar21 = pbVar21 + 0x10;
      } while (uVar19 < uVar1);
      iVar5 = uVar20 + iVar14;
      if (uVar7 - uVar6 != iVar14) {
        iVar14 = iVar5 + 1;
        puVar13[iVar5] = (uint)*(byte *)((long)local_50 + (long)iVar5);
        if (uVar7 - iVar14 != 0 && iVar14 <= (int)uVar7) {
          iVar2 = iVar5 + 2;
          puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
          if (uVar7 - iVar2 != 0 && iVar2 <= (int)uVar7) {
            iVar14 = iVar5 + 3;
            puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
            if (uVar7 - iVar14 != 0 && iVar14 <= (int)uVar7) {
              iVar2 = iVar5 + 4;
              puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
              if (uVar7 - iVar2 != 0 && iVar2 <= (int)uVar7) {
                iVar14 = iVar5 + 5;
                puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
                if (uVar7 - iVar14 != 0 && iVar14 <= (int)uVar7) {
                  iVar2 = iVar5 + 6;
                  puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
                  if (uVar7 - iVar2 != 0 && iVar2 <= (int)uVar7) {
                    iVar14 = iVar5 + 7;
                    puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
                    if (uVar7 - iVar14 != 0 && iVar14 <= (int)uVar7) {
                      iVar2 = iVar5 + 8;
                      puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
                      if (iVar2 < (int)uVar7) {
                        iVar14 = iVar5 + 9;
                        puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
                        if (iVar14 < (int)uVar7) {
                          iVar2 = iVar5 + 10;
                          puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
                          if (iVar2 < (int)uVar7) {
                            iVar14 = iVar5 + 0xb;
                            puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
                            if (iVar14 < (int)uVar7) {
                              iVar2 = iVar5 + 0xc;
                              puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
                              if (iVar2 < (int)uVar7) {
                                iVar14 = iVar5 + 0xd;
                                puVar13[iVar2] = (uint)*(byte *)((long)local_50 + (long)iVar2);
                                if (iVar14 < (int)uVar7) {
                                  iVar5 = iVar5 + 0xe;
                                  puVar13[iVar14] = (uint)*(byte *)((long)local_50 + (long)iVar14);
                                  if (iVar5 < (int)uVar7) {
                                    puVar13[iVar5] = (uint)*(byte *)((long)local_50 + (long)iVar5);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if (local_28 != 0) {
    piVar3 = (int *)(local_28 + 0x14);
    do {
      iVar14 = *piVar3;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar9) {
        *piVar3 = iVar14 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
      uVar25 = local_60;
      goto joined_r0x001e6804;
    }
  }
  uVar25 = local_60;
joined_r0x001e6804:
  if (0 < local_60._4_4_) {
    iVar14 = 0;
    do {
      *local_20 = 0;
      iVar14 = iVar14 + 1;
      local_60._4_4_ = (int)((ulong)uVar25 >> 0x20);
      local_20 = local_20 + 1;
    } while (iVar14 < local_60._4_4_);
  }
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = (uint *)0x0;
  if (local_18 == auStack_10) {
    return piVar11;
  }
  local_60 = uVar25;
  cv::fastFree(local_18);
  return piVar11;
}


==================================================================

### FUNC 001e6900 (140 bytes) name=cvReleaseStructuringElement

void cvReleaseStructuringElement(undefined8 *param_1)

{
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 != (undefined8 *)0x0) {
    cv::cvFree_((void *)*param_1);
    *param_1 = 0;
    return;
  }
  local_10 = param_1;
  local_8 = param_1;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0x1b,(String *)&local_10,"void cvReleaseStructuringElement(IplConvKernel**)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x786);
  cv::String::deallocate((String *)&local_10);
  cv::cvFree_(pvRam0000000000000000);
  pvRam0000000000000000 = (void *)0x0;
  return;
}


==================================================================

### FUNC 001e69a0 (1084 bytes) name=cvErode

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvErode(cv *param_1,cv *param_2,int *param_3,undefined4 param_4,undefined8 param_5,
            AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  long lVar12;
  int iVar13;
  int local_190;
  int local_18c;
  undefined4 local_188 [2];
  Mat *local_180;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170 [2];
  Mat *local_168;
  undefined4 local_160;
  undefined4 local_15c;
  int local_158;
  int local_154;
  Mat *local_150;
  undefined4 local_148;
  undefined4 local_144;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_18 = &local_10;
  local_50 = 0;
  local_48 = 0;
  local_20 = &local_58;
  local_60 = DAT_001e6e60;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_8 = 0;
  local_10 = 0;
  if (((local_e0[1] != local_80[1]) || (*local_e0 != *local_80)) ||
     (uVar4 = DAT_001e6e60, (local_120 & 0xfff) != (local_c0 & 0xfff))) {
    local_140 = 0;
    local_138 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_140,0x34);
    uVar10 = DAT_0045bf30;
    uVar9 = _LAB_0045bf28;
    uVar8 = _DAT_0045bf20;
    uVar7 = DAT_0045bf18;
    uVar6 = DAT_0045bf10;
    uVar5 = DAT_0045bf08;
    *(undefined4 *)(puVar11 + 6) = DAT_0045bf38;
    *puVar11 = uVar5;
    puVar11[1] = uVar6;
    puVar11[2] = uVar7;
    puVar11[3] = uVar8;
    puVar11[4] = uVar9;
    puVar11[5] = uVar10;
    cv::error(-0xd7,(String *)&local_140,"void cvErode(const CvArr*, CvArr*, IplConvKernel*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x7a0);
    cv::String::deallocate((String *)&local_140);
    uVar4 = local_60;
  }
  local_60 = uVar4;
  if (param_3 == (int *)0x0) {
    cv::Mat::release((Mat *)&local_60);
    local_18c = 1;
    local_190 = 1;
  }
  else {
    local_60._4_4_ = (int)(uVar4 >> 0x20);
    local_190 = param_3[2];
    local_18c = param_3[3];
    local_158 = param_3[1];
    iVar13 = *param_3;
    if (((2 < local_60._4_4_) || (local_158 != (int)local_58)) ||
       ((local_58._4_4_ = (int)((ulong)local_58 >> 0x20), iVar13 != local_58._4_4_ ||
        (((uVar4 & 0xfff) != 0 || (local_50 == 0)))))) {
      local_154 = iVar13;
      cv::Mat::create((Mat *)&local_60,2,&local_158,0);
      local_158 = param_3[1];
      iVar13 = *param_3;
    }
    if (0 < local_158 * iVar13) {
      lVar12 = 0;
      do {
        *(bool *)(local_50 + lVar12) = *(int *)(*(long *)(param_3 + 4) + lVar12 * 4) != 0;
        lVar12 = lVar12 + 1;
      } while ((int)lVar12 < local_158 * iVar13);
    }
  }
  local_138 = _UNK_001e6e78;
  local_140 = _DAT_001e6e70;
  local_160 = 0;
  local_15c = 0;
  local_170[0] = 0x2010000;
  uStack_128 = _UNK_001e6e78;
  local_130 = _DAT_001e6e70;
  local_178 = 0;
  local_174 = 0;
  local_188[0] = 0x1010000;
  local_148 = 0;
  local_144 = 0;
  local_158 = 0x1010000;
  local_180 = (Mat *)&local_120;
  local_168 = (Mat *)&local_c0;
  local_150 = (Mat *)&local_60;
  cv::erode(local_188,local_170,&local_158,&local_190,param_4,1,&local_140);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar13 = 0;
    puVar11 = local_20;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar13 = iVar13 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar13 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 001e6e80 (1084 bytes) name=cvDilate

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvDilate(cv *param_1,cv *param_2,int *param_3,undefined4 param_4,undefined8 param_5,
             AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  long lVar12;
  int iVar13;
  int local_190;
  int local_18c;
  undefined4 local_188 [2];
  Mat *local_180;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170 [2];
  Mat *local_168;
  undefined4 local_160;
  undefined4 local_15c;
  int local_158;
  int local_154;
  Mat *local_150;
  undefined4 local_148;
  undefined4 local_144;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_18 = &local_10;
  local_50 = 0;
  local_48 = 0;
  local_20 = &local_58;
  local_60 = DAT_001e7340;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_8 = 0;
  local_10 = 0;
  if (((local_e0[1] != local_80[1]) || (*local_e0 != *local_80)) ||
     (uVar4 = DAT_001e7340, (local_120 & 0xfff) != (local_c0 & 0xfff))) {
    local_140 = 0;
    local_138 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_140,0x34);
    uVar10 = DAT_0045bf30;
    uVar9 = _LAB_0045bf28;
    uVar8 = _DAT_0045bf20;
    uVar7 = DAT_0045bf18;
    uVar6 = DAT_0045bf10;
    uVar5 = DAT_0045bf08;
    *(undefined4 *)(puVar11 + 6) = DAT_0045bf38;
    *puVar11 = uVar5;
    puVar11[1] = uVar6;
    puVar11[2] = uVar7;
    puVar11[3] = uVar8;
    puVar11[4] = uVar9;
    puVar11[5] = uVar10;
    cv::error(-0xd7,(String *)&local_140,"void cvDilate(const CvArr*, CvArr*, IplConvKernel*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x7ab);
    cv::String::deallocate((String *)&local_140);
    uVar4 = local_60;
  }
  local_60 = uVar4;
  if (param_3 == (int *)0x0) {
    cv::Mat::release((Mat *)&local_60);
    local_18c = 1;
    local_190 = 1;
  }
  else {
    local_60._4_4_ = (int)(uVar4 >> 0x20);
    local_190 = param_3[2];
    local_18c = param_3[3];
    local_158 = param_3[1];
    iVar13 = *param_3;
    if (((2 < local_60._4_4_) || (local_158 != (int)local_58)) ||
       ((local_58._4_4_ = (int)((ulong)local_58 >> 0x20), iVar13 != local_58._4_4_ ||
        (((uVar4 & 0xfff) != 0 || (local_50 == 0)))))) {
      local_154 = iVar13;
      cv::Mat::create((Mat *)&local_60,2,&local_158,0);
      local_158 = param_3[1];
      iVar13 = *param_3;
    }
    if (0 < local_158 * iVar13) {
      lVar12 = 0;
      do {
        *(bool *)(local_50 + lVar12) = *(int *)(*(long *)(param_3 + 4) + lVar12 * 4) != 0;
        lVar12 = lVar12 + 1;
      } while ((int)lVar12 < local_158 * iVar13);
    }
  }
  local_138 = _UNK_001e7358;
  local_140 = _DAT_001e7350;
  local_160 = 0;
  local_15c = 0;
  local_170[0] = 0x2010000;
  uStack_128 = _UNK_001e7358;
  local_130 = _DAT_001e7350;
  local_178 = 0;
  local_174 = 0;
  local_188[0] = 0x1010000;
  local_148 = 0;
  local_144 = 0;
  local_158 = 0x1010000;
  local_180 = (Mat *)&local_120;
  local_168 = (Mat *)&local_c0;
  local_150 = (Mat *)&local_60;
  cv::dilate(local_188,local_170,&local_158,&local_190,param_4,1,&local_140);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar13 = 0;
    puVar11 = local_20;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar13 = iVar13 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar13 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 001e7360 (1172 bytes) name=cvMorphologyEx

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMorphologyEx(cv *param_1,cv *param_2,undefined8 param_3,int *param_4,undefined4 param_5,
                   AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  long lVar10;
  int iVar11;
  int iVar12;
  ulong uVar13;
  int *piVar14;
  int iVar15;
  int iVar16;
  int *local_198;
  int local_190;
  int local_18c;
  undefined4 local_188 [2];
  Mat *local_180;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170 [2];
  Mat *local_168;
  undefined4 local_160;
  undefined4 local_15c;
  int local_158;
  int local_154;
  Mat *local_150;
  undefined4 local_148;
  undefined4 local_144;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar13 = (ulong)param_6 & 0xffffffff;
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_18 = &local_10;
  local_50 = 0;
  local_48 = 0;
  local_20 = &local_58;
  local_60 = DAT_001e7878;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_8 = 0;
  local_10 = 0;
  if (((local_e0[1] != local_80[1]) || (*local_e0 != *local_80)) ||
     ((local_120 & 0xfff) != (local_c0 & 0xfff))) {
    local_140 = 0;
    local_138 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_140,0x34);
    uVar8 = DAT_0045bf30;
    uVar7 = _LAB_0045bf28;
    uVar6 = _DAT_0045bf20;
    uVar5 = DAT_0045bf18;
    uVar4 = DAT_0045bf10;
    uVar3 = DAT_0045bf08;
    *(undefined4 *)(puVar9 + 6) = DAT_0045bf38;
    *puVar9 = uVar3;
    puVar9[1] = uVar4;
    puVar9[2] = uVar5;
    puVar9[3] = uVar6;
    puVar9[4] = uVar7;
    puVar9[5] = uVar8;
    cv::error(-0xd7,(String *)&local_140,
              "void cvMorphologyEx(const void*, void*, void*, IplConvKernel*, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x7b7);
    cv::String::deallocate((String *)&local_140);
  }
  local_198 = (int *)0x0;
  piVar14 = param_4;
  if ((param_4 == (int *)0x0) &&
     (local_198 = (int *)cvCreateStructuringElementEx(3,3,1,1,0,0), piVar14 = local_198,
     local_198 == (int *)0x0)) {
    cv::Mat::release((Mat *)&local_60);
    iVar15 = 1;
    iVar16 = 1;
  }
  else {
    iVar16 = piVar14[2];
    iVar15 = piVar14[3];
    iVar11 = piVar14[1];
    iVar12 = *piVar14;
    local_198 = piVar14;
    if (((2 < local_60._4_4_) || (iVar11 != (int)local_58)) ||
       ((iVar12 != local_58._4_4_ || (((local_60 & 0xfff) != 0 || (local_50 == 0)))))) {
      local_158 = iVar11;
      local_154 = iVar12;
      cv::Mat::create((Mat *)&local_60,2,&local_158,0);
      iVar11 = piVar14[1];
      iVar12 = *piVar14;
    }
    if (0 < iVar11 * iVar12) {
      lVar10 = 0;
      do {
        *(bool *)(local_50 + lVar10) = *(int *)(*(long *)(piVar14 + 4) + lVar10 * 4) != 0;
        lVar10 = lVar10 + 1;
      } while ((int)lVar10 < iVar11 * iVar12);
    }
    if (param_4 != (int *)0x0) goto LAB_001e7538;
  }
  cvReleaseStructuringElement(&local_198);
LAB_001e7538:
  local_138 = _UNK_001e7888;
  local_140 = _DAT_001e7880;
  local_148 = 0;
  local_144 = 0;
  uStack_128 = _UNK_001e7888;
  local_130 = _DAT_001e7880;
  local_158 = 0x1010000;
  local_178 = 0;
  local_174 = 0;
  local_188[0] = 0x1010000;
  local_160 = 0;
  local_15c = 0;
  local_170[0] = 0x2010000;
  local_190 = iVar16;
  local_18c = iVar15;
  local_180 = (Mat *)&local_120;
  local_168 = (Mat *)&local_c0;
  local_150 = (Mat *)&local_60;
  cv::morphologyEx(local_188,local_170,param_5,&local_158,&local_190,uVar13,1);
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar16 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar16 = 0;
    puVar9 = local_20;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar16 = iVar16 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar16 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar16 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar16 = 0;
    do {
      *local_80 = 0;
      iVar16 = iVar16 + 1;
      local_80 = local_80 + 1;
    } while (iVar16 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar14 = (int *)(local_e8 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar16 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar16 = 0;
    do {
      *local_e0 = 0;
      iVar16 = iVar16 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar16 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 001e7890 (700 bytes) name=FUN_001e7890

undefined8 * FUN_001e7890(undefined8 *param_1,uint *param_2,undefined4 *param_3)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 *puVar8;
  char *pcVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  ulong uVar12;
  ulong uVar13;
  void *__src;
  long lVar14;
  void *__dest_00;
  size_t sVar15;
  void *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar8 = operator_new(0x50);
  FUN_001c8d2c();
  puVar11 = *(undefined4 **)(param_2 + 0x10);
  *puVar8 = &PTR_FUN_004fb500;
  puVar8[3] = 0;
  puVar8[4] = 0;
  puVar8[5] = 0;
  puVar8[6] = 0;
  puVar8[7] = 0;
  puVar8[8] = 0;
  *(undefined4 *)((long)puVar8 + 0x14) = uVar3;
  *(undefined4 *)(puVar8 + 2) = uVar2;
  uVar2 = puVar11[1];
  *(undefined4 *)((long)puVar8 + 0xc) = *puVar11;
  *(undefined4 *)(puVar8 + 1) = uVar2;
  if ((*param_2 & 0xfff) != 0) {
    local_18 = (void *)0x0;
    local_10 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x17);
    cVar7 = s__kernel_type______CV_8U_0045bf40[0x16];
    uVar6 = s__kernel_type______CV_8U_0045bf40._20_2_;
    uVar5 = s__kernel_type______CV_8U_0045bf40._8_8_;
    uVar4 = s__kernel_type______CV_8U_0045bf40._0_8_;
    *(undefined4 *)(pcVar9 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
    *(undefined2 *)(pcVar9 + 0x14) = uVar6;
    pcVar9[0x16] = cVar7;
    *(undefined8 *)pcVar9 = uVar4;
    *(undefined8 *)(pcVar9 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_18,
              "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MinOp<short int>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
    cv::String::deallocate((String *)&local_18);
  }
  local_18 = (void *)0x0;
  local_10 = 0;
  local_8 = 0;
  FUN_001d7cfc(param_2,puVar8 + 3,(String *)&local_18);
  __src = (void *)puVar8[7];
  uVar12 = (long)(puVar8[4] - puVar8[3]) >> 3;
  lVar14 = (long)__src - puVar8[6];
  uVar13 = lVar14 >> 3;
  if (uVar12 <= uVar13) {
    if (uVar12 < uVar13) {
      puVar8[7] = puVar8[6] + (puVar8[4] - puVar8[3]);
    }
    goto LAB_001e79d8;
  }
  uVar12 = uVar12 - uVar13;
  if (uVar12 == 0) goto LAB_001e79d8;
  if (uVar12 <= (ulong)(puVar8[8] - (long)__src >> 3)) {
    memset(__src,0,uVar12 * 8);
    puVar8[7] = puVar8[7] + uVar12 * 8;
    goto LAB_001e79d8;
  }
  if (0x1fffffffffffffff - uVar13 < uVar12) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar12;
  if (uVar12 < uVar13) {
    uVar1 = uVar13;
  }
  uVar1 = uVar1 + uVar13;
  if ((uVar1 < uVar13) || (0x1fffffffffffffff < uVar1)) {
    uVar13 = 0xfffffffffffffff8;
LAB_001e7b04:
    __dest_00 = operator_new(uVar13);
  }
  else {
    uVar13 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar13 = uVar1 * 8;
      goto LAB_001e7b04;
    }
  }
  memset((void *)((long)__dest_00 + lVar14),0,uVar12 * 8);
  sVar15 = (long)__src - (long)puVar8[6];
  if ((long)sVar15 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar8[6],sVar15);
  }
  __dest = (void *)((long)__dest_00 + sVar15 + uVar12 * 8);
  sVar15 = puVar8[7] - (long)__src;
  if ((long)sVar15 >> 3 != 0) {
    memmove(__dest,__src,sVar15);
  }
  if ((void *)puVar8[6] != (void *)0x0) {
    operator_delete((void *)puVar8[6]);
  }
  puVar8[6] = __dest_00;
  puVar8[7] = (long)__dest + sVar15;
  puVar8[8] = (long)__dest_00 + uVar13;
LAB_001e79d8:
  if (local_18 != (void *)0x0) {
    operator_delete(local_18);
  }
  puVar10 = operator_new(0x20);
  puVar10[2] = puVar8;
  *(undefined4 *)(puVar10 + 1) = 1;
  *puVar10 = &PTR_FUN_004f4e40;
  *param_1 = puVar10;
  param_1[1] = puVar8;
  return param_1;
}


==================================================================

### FUNC 001e7bb0 (700 bytes) name=FUN_001e7bb0

undefined8 * FUN_001e7bb0(undefined8 *param_1,uint *param_2,undefined4 *param_3)

{
  ulong uVar1;
  void *__dest;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 *puVar8;
  char *pcVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  ulong uVar12;
  ulong uVar13;
  void *__src;
  long lVar14;
  void *__dest_00;
  size_t sVar15;
  void *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = *param_3;
  uVar3 = param_3[1];
  puVar8 = operator_new(0x50);
  FUN_001c8d2c();
  puVar11 = *(undefined4 **)(param_2 + 0x10);
  *puVar8 = &PTR_FUN_004fb5f0;
  puVar8[3] = 0;
  puVar8[4] = 0;
  puVar8[5] = 0;
  puVar8[6] = 0;
  puVar8[7] = 0;
  puVar8[8] = 0;
  *(undefined4 *)((long)puVar8 + 0x14) = uVar3;
  *(undefined4 *)(puVar8 + 2) = uVar2;
  uVar2 = puVar11[1];
  *(undefined4 *)((long)puVar8 + 0xc) = *puVar11;
  *(undefined4 *)(puVar8 + 1) = uVar2;
  if ((*param_2 & 0xfff) != 0) {
    local_18 = (void *)0x0;
    local_10 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x17);
    cVar7 = s__kernel_type______CV_8U_0045bf40[0x16];
    uVar6 = s__kernel_type______CV_8U_0045bf40._20_2_;
    uVar5 = s__kernel_type______CV_8U_0045bf40._8_8_;
    uVar4 = s__kernel_type______CV_8U_0045bf40._0_8_;
    *(undefined4 *)(pcVar9 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
    *(undefined2 *)(pcVar9 + 0x14) = uVar6;
    pcVar9[0x16] = cVar7;
    *(undefined8 *)pcVar9 = uVar4;
    *(undefined8 *)(pcVar9 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_18,
              "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MaxOp<short int>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
    cv::String::deallocate((String *)&local_18);
  }
  local_18 = (void *)0x0;
  local_10 = 0;
  local_8 = 0;
  FUN_001d7cfc(param_2,puVar8 + 3,(String *)&local_18);
  __src = (void *)puVar8[7];
  uVar12 = (long)(puVar8[4] - puVar8[3]) >> 3;
  lVar14 = (long)__src - puVar8[6];
  uVar13 = lVar14 >> 3;
  if (uVar12 <= uVar13) {
    if (uVar12 < uVar13) {
      puVar8[7] = puVar8[6] + (puVar8[4] - puVar8[3]);
    }
    goto LAB_001e7cf8;
  }
  uVar12 = uVar12 - uVar13;
  if (uVar12 == 0) goto LAB_001e7cf8;
  if (uVar12 <= (ulong)(puVar8[8] - (long)__src >> 3)) {
    memset(__src,0,uVar12 * 8);
    puVar8[7] = puVar8[7] + uVar12 * 8;
    goto LAB_001e7cf8;
  }
  if (0x1fffffffffffffff - uVar13 < uVar12) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar1 = uVar12;
  if (uVar12 < uVar13) {
    uVar1 = uVar13;
  }
  uVar1 = uVar1 + uVar13;
  if ((uVar1 < uVar13) || (0x1fffffffffffffff < uVar1)) {
    uVar13 = 0xfffffffffffffff8;
LAB_001e7e24:
    __dest_00 = operator_new(uVar13);
  }
  else {
    uVar13 = 0;
    __dest_00 = (void *)0x0;
    if (uVar1 != 0) {
      uVar13 = uVar1 * 8;
      goto LAB_001e7e24;
    }
  }
  memset((void *)((long)__dest_00 + lVar14),0,uVar12 * 8);
  sVar15 = (long)__src - (long)puVar8[6];
  if ((long)sVar15 >> 3 != 0) {
    memmove(__dest_00,(void *)puVar8[6],sVar15);
  }
  __dest = (void *)((long)__dest_00 + sVar15 + uVar12 * 8);
  sVar15 = puVar8[7] - (long)__src;
  if ((long)sVar15 >> 3 != 0) {
    memmove(__dest,__src,sVar15);
  }
  if ((void *)puVar8[6] != (void *)0x0) {
    operator_delete((void *)puVar8[6]);
  }
  puVar8[6] = __dest_00;
  puVar8[7] = (long)__dest + sVar15;
  puVar8[8] = (long)__dest_00 + uVar13;
LAB_001e7cf8:
  if (local_18 != (void *)0x0) {
    operator_delete(local_18);
  }
  puVar10 = operator_new(0x20);
  puVar10[2] = puVar8;
  *(undefined4 *)(puVar10 + 1) = 1;
  *puVar10 = &PTR_FUN_004f4f30;
  *param_1 = puVar10;
  param_1[1] = puVar8;
  return param_1;
}


==================================================================

### FUNC 001e7ed0 (4928 bytes) name=FUN_001e7ed0

/* WARNING: Heritage AFTER dead removal. Example location: s0xffffffffffffffa8 : 0x001e83e0 */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

long * FUN_001e7ed0(long *param_1,uint param_2,uint param_3,_InputArray *param_4,int *param_5)

{
  ulong uVar1;
  void *pvVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined2 uVar14;
  int iVar15;
  char *pcVar16;
  undefined8 *puVar17;
  undefined8 *puVar18;
  int *piVar19;
  Mat *pMVar20;
  ulong uVar21;
  ulong uVar22;
  int iVar23;
  int iVar24;
  uint uVar25;
  void *pvVar26;
  long lVar27;
  size_t sVar28;
  void *pvVar29;
  long local_140;
  long lStack_138;
  long local_130;
  long lStack_128;
  undefined8 local_118;
  undefined8 local_110;
  String aSStack_108 [16];
  undefined8 local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  void *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar15 = cv::_InputArray::kind(param_4);
  if (iVar15 == 0x10000) {
    pMVar20 = *(Mat **)(param_4 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar20;
    local_5c = *(int *)(pMVar20 + 4);
    iVar15 = *(int *)(pMVar20 + 8);
    iVar5 = *(int *)(pMVar20 + 0xc);
    local_50 = *(undefined8 *)(pMVar20 + 0x10);
    local_48 = *(undefined8 *)(pMVar20 + 0x18);
    local_40 = *(undefined8 *)(pMVar20 + 0x20);
    local_38 = *(undefined8 *)(pMVar20 + 0x28);
    local_30 = *(undefined8 *)(pMVar20 + 0x30);
    local_28 = *(long *)(pMVar20 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar19 = (int *)(local_28 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (2 < *(int *)(pMVar20 + 4)) {
      local_5c = 0;
      local_58 = iVar15;
      local_54 = iVar5;
      cv::Mat::copySize((Mat *)&local_60,pMVar20);
      goto LAB_001e7f28;
    }
    iVar24 = *param_5;
    local_10 = **(undefined8 **)(pMVar20 + 0x48);
    iVar23 = param_5[1];
    local_8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    iVar3 = local_54;
    iVar4 = local_58;
    local_58 = iVar15;
    local_54 = iVar5;
  }
  else {
    cv::_InputArray::getMat_((int)param_4);
LAB_001e7f28:
    iVar24 = *param_5;
    iVar23 = param_5[1];
    iVar3 = local_20[1];
    iVar4 = *local_20;
  }
  if (iVar24 == -1) {
    iVar24 = iVar3 / 2;
  }
  uVar25 = param_3 & 7;
  if (iVar23 == -1) {
    iVar23 = iVar4 / 2;
  }
  if ((((iVar24 < 0) || (iVar3 <= iVar24)) || (iVar23 < 0)) || (iVar4 <= iVar23)) {
    local_f8 = 0;
    local_f0 = 0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_f8,0x34);
    uVar13 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar12 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar11 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar10 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar9 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar8 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar16 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar16 = uVar8;
    *(undefined8 *)(pcVar16 + 8) = uVar9;
    *(undefined8 *)(pcVar16 + 0x10) = uVar10;
    *(undefined8 *)(pcVar16 + 0x18) = uVar11;
    *(undefined8 *)(pcVar16 + 0x20) = uVar12;
    *(undefined8 *)(pcVar16 + 0x28) = uVar13;
    cv::error(-0xd7,(String *)&local_f8,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    cv::String::deallocate((String *)&local_f8);
  }
  *param_5 = iVar24;
  param_5[1] = iVar23;
  if (param_2 < 2) {
    if (param_2 != 0) goto LAB_001e8058;
    if (uVar25 != 0) {
      if (uVar25 == 2) {
        puVar17 = operator_new(0x50);
        FUN_001c8d2c();
        *puVar17 = &PTR_FUN_004fb4d0;
        puVar17[3] = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        *(int *)(puVar17 + 2) = iVar24;
        *(int *)((long)puVar17 + 0x14) = iVar23;
        iVar15 = *local_20;
        *(int *)(puVar17 + 1) = local_20[1];
        *(int *)((long)puVar17 + 0xc) = iVar15;
        if ((local_60 & 0xfff) != 0) {
          local_d8 = 0;
          local_d0 = 0;
          pcVar16 = (char *)cv::String::allocate((String *)&local_d8,0x17);
          cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
          uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
          uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
          uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
          *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
          *(undefined2 *)(pcVar16 + 0x14) = uVar14;
          pcVar16[0x16] = cVar6;
          *(undefined8 *)pcVar16 = uVar8;
          *(undefined8 *)(pcVar16 + 8) = uVar9;
          cv::error(-0xd7,(String *)&local_d8,
                    "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MinOp<short unsigned int>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
          cv::String::deallocate((String *)&local_d8);
        }
        local_78 = (void *)0x0;
        local_70 = 0;
        local_68 = 0;
        FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
        uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
        uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
        if (uVar21 < uVar22) {
          std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                    ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),
                     puVar17[7],uVar22 - uVar21);
        }
        else if (uVar22 < uVar21) {
          puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
        }
        if (local_78 != (void *)0x0) {
          operator_delete(local_78);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4e10;
        piVar19 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = *piVar19 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        do {
          iVar15 = *piVar19;
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = iVar15 + -1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        goto LAB_001e8574;
      }
      if (uVar25 == 3) {
        FUN_001e7890(&local_140,(Mat *)&local_60,param_5);
        param_1[1] = lStack_138;
        *param_1 = local_140;
        if (local_140 == 0) goto LAB_001e80c4;
        piVar19 = (int *)(local_140 + 8);
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = *piVar19 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        if (local_140 == 0) goto LAB_001e80c4;
        piVar19 = (int *)(local_140 + 8);
        do {
          iVar15 = *piVar19;
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = iVar15 + -1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        goto LAB_001e8574;
      }
      if (uVar25 == 5) {
        puVar17 = operator_new(0x50);
        FUN_001c8d2c();
        *puVar17 = &PTR_FUN_004fb530;
        puVar17[3] = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        *(int *)(puVar17 + 2) = iVar24;
        *(int *)((long)puVar17 + 0x14) = iVar23;
        iVar15 = *local_20;
        *(int *)(puVar17 + 1) = local_20[1];
        *(int *)((long)puVar17 + 0xc) = iVar15;
        if ((local_60 & 0xfff) != 0) {
          local_c8 = 0;
          local_c0 = 0;
          pcVar16 = (char *)cv::String::allocate((String *)&local_c8,0x17);
          cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
          uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
          uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
          uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
          *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
          *(undefined2 *)(pcVar16 + 0x14) = uVar14;
          pcVar16[0x16] = cVar6;
          *(undefined8 *)pcVar16 = uVar8;
          *(undefined8 *)(pcVar16 + 8) = uVar9;
          cv::error(-0xd7,(String *)&local_c8,
                    "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MinOp<float>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
          cv::String::deallocate((String *)&local_c8);
        }
        local_78 = (void *)0x0;
        local_70 = 0;
        local_68 = 0;
        FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
        uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
        uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
        if (uVar21 < uVar22) {
          std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                    ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),
                     puVar17[7],uVar22 - uVar21);
        }
        else if (uVar22 < uVar21) {
          puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
        }
        if (local_78 != (void *)0x0) {
          operator_delete(local_78);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4e70;
        piVar19 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = *piVar19 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        do {
          iVar15 = *piVar19;
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = iVar15 + -1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        goto LAB_001e8574;
      }
      if (uVar25 == 6) {
        puVar17 = operator_new(0x50);
        FUN_001c8d2c();
        *puVar17 = &PTR_FUN_004fb560;
        puVar17[3] = 0;
        puVar17[4] = 0;
        puVar17[5] = 0;
        puVar17[6] = 0;
        puVar17[7] = 0;
        puVar17[8] = 0;
        *(int *)(puVar17 + 2) = iVar24;
        *(int *)((long)puVar17 + 0x14) = iVar23;
        iVar15 = *local_20;
        *(int *)(puVar17 + 1) = local_20[1];
        *(int *)((long)puVar17 + 0xc) = iVar15;
        if ((local_60 & 0xfff) != 0) {
          local_b8 = 0;
          local_b0 = 0;
          pcVar16 = (char *)cv::String::allocate((String *)&local_b8,0x17);
          cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
          uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
          uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
          uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
          *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
          *(undefined2 *)(pcVar16 + 0x14) = uVar14;
          pcVar16[0x16] = cVar6;
          *(undefined8 *)pcVar16 = uVar8;
          *(undefined8 *)(pcVar16 + 8) = uVar9;
          cv::error(-0xd7,(String *)&local_b8,
                    "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MinOp<double>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                    ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
          cv::String::deallocate((String *)&local_b8);
        }
        local_78 = (void *)0x0;
        local_70 = 0;
        local_68 = 0;
        FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
        uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
        uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
        if (uVar21 < uVar22) {
          std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                    ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),
                     puVar17[7],uVar22 - uVar21);
        }
        else if (uVar22 < uVar21) {
          puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
        }
        if (local_78 != (void *)0x0) {
          operator_delete(local_78);
        }
        puVar18 = operator_new(0x20);
        *(undefined4 *)(puVar18 + 1) = 1;
        puVar18[2] = puVar17;
        *puVar18 = &PTR_FUN_004f4ea0;
        piVar19 = (int *)(puVar18 + 1);
        *param_1 = (long)puVar18;
        param_1[1] = (long)puVar17;
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = *piVar19 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        do {
          iVar15 = *piVar19;
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar7) {
            *piVar19 = iVar15 + -1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        goto LAB_001e8574;
      }
LAB_001e807c:
      cv::format("Unsupported data type (=%d)",aSStack_108,(ulong)param_3);
      cv::error(-0xd5,aSStack_108,
                "cv::Ptr<cv::BaseFilter> cv::getMorphologyFilter(int, int, cv::InputArray, cv::Point)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x3d3);
      cv::String::deallocate(aSStack_108);
      *param_1 = 0;
      param_1[1] = 0;
      goto LAB_001e80c4;
    }
    puVar17 = operator_new(0x50);
    FUN_001c8d2c();
    *puVar17 = &PTR_FUN_004fb4a0;
    puVar17[3] = 0;
    puVar17[4] = 0;
    puVar17[5] = 0;
    puVar17[6] = 0;
    puVar17[7] = 0;
    puVar17[8] = 0;
    *(int *)(puVar17 + 2) = iVar24;
    *(int *)((long)puVar17 + 0x14) = iVar23;
    iVar15 = *local_20;
    *(int *)(puVar17 + 1) = local_20[1];
    *(int *)((long)puVar17 + 0xc) = iVar15;
    if ((local_60 & 0xfff) != 0) {
      local_e8 = 0;
      local_e0 = 0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_e8,0x17);
      cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
      uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
      uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
      uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
      *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
      *(undefined2 *)(pcVar16 + 0x14) = uVar14;
      pcVar16[0x16] = cVar6;
      *(undefined8 *)pcVar16 = uVar8;
      *(undefined8 *)(pcVar16 + 8) = uVar9;
      cv::error(-0xd7,(String *)&local_e8,
                "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MinOp<unsigned char>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
      cv::String::deallocate((String *)&local_e8);
    }
    local_78 = (void *)0x0;
    local_70 = 0;
    local_68 = 0;
    FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
    pvVar26 = (void *)puVar17[7];
    uVar21 = (long)(puVar17[4] - puVar17[3]) >> 3;
    lVar27 = (long)pvVar26 - puVar17[6];
    uVar22 = lVar27 >> 3;
    if (uVar22 < uVar21) {
      uVar21 = uVar21 - uVar22;
      if (uVar21 != 0) {
        if ((ulong)(puVar17[8] - (long)pvVar26 >> 3) < uVar21) {
          if (0x1fffffffffffffff - uVar22 < uVar21) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar1 = uVar21;
          if (uVar21 < uVar22) {
            uVar1 = uVar22;
          }
          uVar1 = uVar1 + uVar22;
          if ((uVar1 < uVar22) || (0x1fffffffffffffff < uVar1)) {
            uVar22 = 0xfffffffffffffff8;
LAB_001e917c:
            pvVar29 = operator_new(uVar22);
          }
          else {
            uVar22 = 0;
            pvVar29 = (void *)0x0;
            if (uVar1 != 0) {
              uVar22 = uVar1 * 8;
              goto LAB_001e917c;
            }
          }
          memset((void *)((long)pvVar29 + lVar27),0,uVar21 * 8);
          sVar28 = (long)pvVar26 - (long)puVar17[6];
          if ((long)sVar28 >> 3 != 0) {
            memmove(pvVar29,(void *)puVar17[6],sVar28);
          }
          pvVar2 = (void *)((long)pvVar29 + sVar28 + uVar21 * 8);
          sVar28 = puVar17[7] - (long)pvVar26;
          if ((long)sVar28 >> 3 != 0) {
            memmove(pvVar2,pvVar26,sVar28);
          }
          if ((void *)puVar17[6] != (void *)0x0) {
            operator_delete((void *)puVar17[6]);
          }
          puVar17[6] = pvVar29;
          puVar17[7] = (long)pvVar2 + sVar28;
          puVar17[8] = (long)pvVar29 + uVar22;
        }
        else {
          memset(pvVar26,0,uVar21 * 8);
          puVar17[7] = puVar17[7] + uVar21 * 8;
        }
      }
    }
    else if (uVar21 < uVar22) {
      puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
    }
    if (local_78 != (void *)0x0) {
      operator_delete(local_78);
    }
    puVar18 = operator_new(0x20);
    *(undefined4 *)(puVar18 + 1) = 1;
    puVar18[2] = puVar17;
    *puVar18 = &PTR_FUN_004f4de0;
    piVar19 = (int *)(puVar18 + 1);
    *param_1 = (long)puVar18;
    param_1[1] = (long)puVar17;
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar7) {
        *piVar19 = *piVar19 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    do {
      iVar15 = *piVar19;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar7) {
        *piVar19 = iVar15 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  else {
    local_118 = 0;
    local_110 = 0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_118,0x27);
    cVar6 = s_op____MORPH_ERODE____op____MORPH_0045bda0[0x26];
    uVar14 = s_op____MORPH_ERODE____op____MORPH_0045bda0._36_2_;
    uVar11 = s_op____MORPH_ERODE____op____MORPH_0045bda0._24_8_;
    uVar10 = s_op____MORPH_ERODE____op____MORPH_0045bda0._16_8_;
    uVar9 = s_op____MORPH_ERODE____op____MORPH_0045bda0._8_8_;
    uVar8 = s_op____MORPH_ERODE____op____MORPH_0045bda0._0_8_;
    *(undefined4 *)(pcVar16 + 0x20) = s_op____MORPH_ERODE____op____MORPH_0045bda0._32_4_;
    *(undefined2 *)(pcVar16 + 0x24) = uVar14;
    pcVar16[0x26] = cVar6;
    *(undefined8 *)pcVar16 = uVar8;
    *(undefined8 *)(pcVar16 + 8) = uVar9;
    *(undefined8 *)(pcVar16 + 0x10) = uVar10;
    *(undefined8 *)(pcVar16 + 0x18) = uVar11;
    cv::error(-0xd7,(String *)&local_118,
              "cv::Ptr<cv::BaseFilter> cv::getMorphologyFilter(int, int, cv::InputArray, cv::Point)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x3b7);
    cv::String::deallocate((String *)&local_118);
LAB_001e8058:
    if (uVar25 == 0) {
      iVar15 = *param_5;
      iVar5 = param_5[1];
      puVar17 = operator_new(0x50);
      FUN_001c8d2c();
      *puVar17 = &PTR_FUN_004fb590;
      puVar17[3] = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      *(int *)(puVar17 + 2) = iVar15;
      *(int *)((long)puVar17 + 0x14) = iVar5;
      iVar15 = *local_20;
      *(int *)(puVar17 + 1) = local_20[1];
      *(int *)((long)puVar17 + 0xc) = iVar15;
      if ((local_60 & 0xfff) != 0) {
        local_a8 = 0;
        local_a0 = 0;
        pcVar16 = (char *)cv::String::allocate((String *)&local_a8,0x17);
        cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
        uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
        uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
        uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
        *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
        *(undefined2 *)(pcVar16 + 0x14) = uVar14;
        pcVar16[0x16] = cVar6;
        *(undefined8 *)pcVar16 = uVar8;
        *(undefined8 *)(pcVar16 + 8) = uVar9;
        cv::error(-0xd7,(String *)&local_a8,
                  "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MaxOp<unsigned char>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
        cv::String::deallocate((String *)&local_a8);
      }
      local_78 = (void *)0x0;
      local_70 = 0;
      local_68 = 0;
      FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
      pvVar26 = (void *)puVar17[7];
      uVar21 = (long)(puVar17[4] - puVar17[3]) >> 3;
      lVar27 = (long)pvVar26 - puVar17[6];
      uVar22 = lVar27 >> 3;
      if (uVar22 < uVar21) {
        uVar21 = uVar21 - uVar22;
        if (uVar21 != 0) {
          if ((ulong)(puVar17[8] - (long)pvVar26 >> 3) < uVar21) {
            if (0x1fffffffffffffff - uVar22 < uVar21) {
                    /* WARNING: Subroutine does not return */
              FUN_0040f39c("vector::_M_fill_insert");
            }
            uVar1 = uVar21;
            if (uVar21 < uVar22) {
              uVar1 = uVar22;
            }
            uVar1 = uVar1 + uVar22;
            if ((uVar1 < uVar22) || (0x1fffffffffffffff < uVar1)) {
              uVar22 = 0xfffffffffffffff8;
LAB_001e9190:
              pvVar29 = operator_new(uVar22);
            }
            else {
              uVar22 = 0;
              pvVar29 = (void *)0x0;
              if (uVar1 != 0) {
                uVar22 = uVar1 * 8;
                goto LAB_001e9190;
              }
            }
            memset((void *)((long)pvVar29 + lVar27),0,uVar21 * 8);
            sVar28 = (long)pvVar26 - (long)puVar17[6];
            if ((long)sVar28 >> 3 != 0) {
              memmove(pvVar29,(void *)puVar17[6],sVar28);
            }
            pvVar2 = (void *)((long)pvVar29 + uVar21 * 8 + sVar28);
            sVar28 = puVar17[7] - (long)pvVar26;
            if ((long)sVar28 >> 3 != 0) {
              memmove(pvVar2,pvVar26,sVar28);
            }
            if ((void *)puVar17[6] != (void *)0x0) {
              operator_delete((void *)puVar17[6]);
            }
            puVar17[6] = pvVar29;
            puVar17[7] = (long)pvVar2 + sVar28;
            puVar17[8] = (long)pvVar29 + uVar22;
          }
          else {
            memset(pvVar26,0,uVar21 * 8);
            puVar17[7] = puVar17[7] + uVar21 * 8;
          }
        }
      }
      else if (uVar21 < uVar22) {
        puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
      }
      if (local_78 != (void *)0x0) {
        operator_delete(local_78);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4ed0;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      do {
        iVar15 = *piVar19;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = iVar15 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    else if (uVar25 == 2) {
      iVar15 = *param_5;
      iVar5 = param_5[1];
      puVar17 = operator_new(0x50);
      FUN_001c8d2c();
      *puVar17 = &PTR_FUN_004fb5c0;
      puVar17[3] = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      *(int *)(puVar17 + 2) = iVar15;
      *(int *)((long)puVar17 + 0x14) = iVar5;
      iVar15 = *local_20;
      *(int *)(puVar17 + 1) = local_20[1];
      *(int *)((long)puVar17 + 0xc) = iVar15;
      if ((local_60 & 0xfff) != 0) {
        local_98 = 0;
        local_90 = 0;
        pcVar16 = (char *)cv::String::allocate((String *)&local_98,0x17);
        cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
        uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
        uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
        uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
        *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
        *(undefined2 *)(pcVar16 + 0x14) = uVar14;
        pcVar16[0x16] = cVar6;
        *(undefined8 *)pcVar16 = uVar8;
        *(undefined8 *)(pcVar16 + 8) = uVar9;
        cv::error(-0xd7,(String *)&local_98,
                  "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MaxOp<short unsigned int>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
        cv::String::deallocate((String *)&local_98);
      }
      local_78 = (void *)0x0;
      local_70 = 0;
      local_68 = 0;
      FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
      uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
      uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
      if (uVar21 < uVar22) {
        std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                  ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),puVar17[7]
                   ,uVar22 - uVar21);
      }
      else if (uVar22 < uVar21) {
        puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
      }
      if (local_78 != (void *)0x0) {
        operator_delete(local_78);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4f00;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      do {
        iVar15 = *piVar19;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = iVar15 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    else if (uVar25 == 3) {
      FUN_001e7bb0(&local_130,(Mat *)&local_60,param_5);
      param_1[1] = lStack_128;
      *param_1 = local_130;
      if (local_130 == 0) goto LAB_001e80c4;
      piVar19 = (int *)(local_130 + 8);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (local_130 == 0) goto LAB_001e80c4;
      piVar19 = (int *)(local_130 + 8);
      do {
        iVar15 = *piVar19;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = iVar15 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    else if (uVar25 == 5) {
      iVar15 = *param_5;
      iVar5 = param_5[1];
      puVar17 = operator_new(0x50);
      FUN_001c8d2c();
      *puVar17 = &PTR_FUN_004fb620;
      puVar17[3] = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      *(int *)(puVar17 + 2) = iVar15;
      *(int *)((long)puVar17 + 0x14) = iVar5;
      iVar15 = *local_20;
      *(int *)(puVar17 + 1) = local_20[1];
      *(int *)((long)puVar17 + 0xc) = iVar15;
      if ((local_60 & 0xfff) != 0) {
        local_88 = 0;
        local_80 = 0;
        pcVar16 = (char *)cv::String::allocate((String *)&local_88,0x17);
        cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
        uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
        uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
        uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
        *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
        *(undefined2 *)(pcVar16 + 0x14) = uVar14;
        pcVar16[0x16] = cVar6;
        *(undefined8 *)pcVar16 = uVar8;
        *(undefined8 *)(pcVar16 + 8) = uVar9;
        cv::error(-0xd7,(String *)&local_88,
                  "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MaxOp<float>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
        cv::String::deallocate((String *)&local_88);
      }
      local_78 = (void *)0x0;
      local_70 = 0;
      local_68 = 0;
      FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,&local_78);
      uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
      uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
      if (uVar21 < uVar22) {
        std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                  ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),puVar17[7]
                   ,uVar22 - uVar21);
      }
      else if (uVar22 < uVar21) {
        puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
      }
      if (local_78 != (void *)0x0) {
        operator_delete(local_78);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4f60;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      do {
        iVar15 = *piVar19;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = iVar15 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    else {
      if (uVar25 != 6) goto LAB_001e807c;
      iVar15 = *param_5;
      iVar5 = param_5[1];
      puVar17 = operator_new(0x50);
      FUN_001c8d2c();
      *puVar17 = &PTR_FUN_004fb650;
      puVar17[3] = 0;
      puVar17[4] = 0;
      puVar17[5] = 0;
      puVar17[6] = 0;
      puVar17[7] = 0;
      puVar17[8] = 0;
      *(int *)((long)puVar17 + 0x14) = iVar5;
      *(int *)(puVar17 + 2) = iVar15;
      iVar15 = *local_20;
      *(int *)(puVar17 + 1) = local_20[1];
      *(int *)((long)puVar17 + 0xc) = iVar15;
      if ((local_60 & 0xfff) != 0) {
        local_78 = (void *)0x0;
        local_70 = 0;
        pcVar16 = (char *)cv::String::allocate((String *)&local_78,0x17);
        cVar6 = s__kernel_type______CV_8U_0045bf40[0x16];
        uVar14 = s__kernel_type______CV_8U_0045bf40._20_2_;
        uVar9 = s__kernel_type______CV_8U_0045bf40._8_8_;
        uVar8 = s__kernel_type______CV_8U_0045bf40._0_8_;
        *(undefined4 *)(pcVar16 + 0x10) = s__kernel_type______CV_8U_0045bf40._16_4_;
        *(undefined2 *)(pcVar16 + 0x14) = uVar14;
        pcVar16[0x16] = cVar6;
        *(undefined8 *)pcVar16 = uVar8;
        *(undefined8 *)(pcVar16 + 8) = uVar9;
        cv::error(-0xd7,(String *)&local_78,
                  "cv::MorphFilter<Op, VecOp>::MorphFilter(const cv::Mat&, cv::Point) [with Op = cv::MaxOp<double>; VecOp = cv::MorphNoVec; cv::Point = cv::Point_<int>]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x317);
        cv::String::deallocate((String *)&local_78);
      }
      local_78 = (void *)0x0;
      local_70 = 0;
      local_68 = 0;
      FUN_001d7cfc((Mat *)&local_60,puVar17 + 3,(String *)&local_78);
      uVar22 = (long)(puVar17[4] - puVar17[3]) >> 3;
      uVar21 = (long)(puVar17[7] - puVar17[6]) >> 3;
      if (uVar21 < uVar22) {
        std::vector<unsigned_char*,std::allocator<unsigned_char*>>::_M_fill_insert
                  ((vector<unsigned_char*,std::allocator<unsigned_char*>> *)(puVar17 + 6),puVar17[7]
                   ,uVar22 - uVar21);
      }
      else if (uVar22 < uVar21) {
        puVar17[7] = puVar17[6] + (puVar17[4] - puVar17[3]);
      }
      if (local_78 != (void *)0x0) {
        operator_delete(local_78);
      }
      puVar18 = operator_new(0x20);
      *(undefined4 *)(puVar18 + 1) = 1;
      puVar18[2] = puVar17;
      *puVar18 = &PTR_FUN_004f4f90;
      piVar19 = (int *)(puVar18 + 1);
      *param_1 = (long)puVar18;
      param_1[1] = (long)puVar17;
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = *piVar19 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      do {
        iVar15 = *piVar19;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar7) {
          *piVar19 = iVar15 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
  }
LAB_001e8574:
  if (iVar15 == 1) {
    FUN_001e0734();
  }
LAB_001e80c4:
  if (local_28 != 0) {
    piVar19 = (int *)(local_28 + 0x14);
    do {
      iVar15 = *piVar19;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar7) {
        *piVar19 = iVar15 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar15 = 0;
    piVar19 = local_20;
    do {
      *piVar19 = 0;
      iVar15 = iVar15 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar15 < local_5c);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return param_1;
}


==================================================================

### FUNC 001e9530 (1892 bytes) name=createMorphologyFilter

/* WARNING: Heritage AFTER dead removal. Example location: s0xffffffffffffffa8 : 0x001e9a6c */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::createMorphologyFilter(int, int, cv::_InputArray const&, cv::Point_<int>, int, int,
   cv::Scalar_<double> const&) */

undefined8 * __thiscall
cv::createMorphologyFilter
          (undefined8 *param_1_00,int param_2,uint param_1,_InputArray *param_4,int *param_3,
          int param_6,int param_7,double *param_8)

{
  long *plVar1;
  long *plVar2;
  uint uVar3;
  double dVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  char cVar9;
  bool bVar10;
  long lVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  int iVar18;
  char *pcVar19;
  void *pvVar20;
  undefined8 *puVar21;
  Mat *pMVar22;
  int *piVar23;
  int iVar24;
  long *local_100;
  undefined8 local_f8;
  long *local_f0;
  undefined8 local_e8;
  long *local_e0;
  undefined8 local_d8;
  long *local_d0;
  undefined8 local_c8;
  long *local_c0;
  undefined8 local_b8;
  long *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  Mat *local_78;
  double local_70;
  double dStack_68;
  undefined4 local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar18 = _InputArray::kind(param_4);
  if (iVar18 == 0x10000) {
    pMVar22 = *(Mat **)(param_4 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar22;
    local_5c = *(int *)(pMVar22 + 4);
    iVar18 = *(int *)(pMVar22 + 8);
    iVar8 = *(int *)(pMVar22 + 0xc);
    local_50 = *(undefined8 *)(pMVar22 + 0x10);
    local_48 = *(undefined8 *)(pMVar22 + 0x18);
    local_40 = *(undefined8 *)(pMVar22 + 0x20);
    local_38 = *(undefined8 *)(pMVar22 + 0x28);
    local_30 = *(undefined8 *)(pMVar22 + 0x30);
    local_28 = *(long *)(pMVar22 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar23 = (int *)(local_28 + 0x14);
      do {
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar23,0x10);
        if (bVar10) {
          *piVar23 = *piVar23 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar22 + 4)) {
      local_5c = 0;
      local_58 = iVar18;
      local_54 = iVar8;
      Mat::copySize((Mat *)&local_60,pMVar22);
      goto LAB_001e9598;
    }
    iVar5 = *param_3;
    local_10 = **(undefined8 **)(pMVar22 + 0x48);
    iVar24 = param_3[1];
    local_8 = (*(undefined8 **)(pMVar22 + 0x48))[1];
    iVar7 = local_58;
    iVar6 = local_54;
  }
  else {
    _InputArray::getMat_((int)param_4);
LAB_001e9598:
    iVar5 = *param_3;
    iVar24 = param_3[1];
    iVar6 = local_20[1];
    iVar7 = *local_20;
    iVar18 = local_58;
    iVar8 = local_54;
  }
  local_54 = iVar8;
  local_58 = iVar18;
  if (iVar5 == -1) {
    iVar5 = iVar6 / 2;
  }
  if (iVar24 == -1) {
    iVar24 = iVar7 / 2;
  }
  if ((((iVar6 <= iVar5) || (iVar5 < 0)) || (iVar7 <= iVar24)) || (iVar24 < 0)) {
    local_90 = 0;
    local_88 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_90,0x34);
    uVar17 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._40_8_;
    uVar16 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._32_8_;
    uVar15 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._24_8_;
    uVar14 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._16_8_;
    uVar13 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._8_8_;
    uVar12 = s_anchor_inside_Rect_0__0__ksize_w_004435b0._0_8_;
    *(undefined4 *)(pcVar19 + 0x30) = s_anchor_inside_Rect_0__0__ksize_w_004435b0._48_4_;
    *(undefined8 *)pcVar19 = uVar12;
    *(undefined8 *)(pcVar19 + 8) = uVar13;
    *(undefined8 *)(pcVar19 + 0x10) = uVar14;
    *(undefined8 *)(pcVar19 + 0x18) = uVar15;
    *(undefined8 *)(pcVar19 + 0x20) = uVar16;
    *(undefined8 *)(pcVar19 + 0x28) = uVar17;
    error(-0xd7,(String *)&local_90,"cv::Point cv::normalizeAnchor(cv::Point, cv::Size)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/filterengine.hpp",0x16b);
    String::deallocate((String *)&local_90);
  }
  *param_3 = iVar5;
  param_3[1] = iVar24;
  local_100 = (long *)0x0;
  local_f8 = 0;
  local_f0 = (long *)0x0;
  local_e8 = 0;
  local_e0 = (long *)0x0;
  local_d8 = 0;
  local_70 = 0.0;
  local_80._0_4_ = 0x1010000;
  local_78 = (Mat *)&local_60;
  iVar18 = countNonZero((_InputArray *)&local_80);
  if (iVar18 == local_54 * local_58) {
    FUN_001e2b74(&local_d0,param_2,param_1,local_54,*param_3);
    plVar2 = local_100;
    if (local_d0 != (long *)0x0) {
      plVar1 = local_d0 + 1;
      do {
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    local_f8 = local_c8;
    local_100 = local_d0;
    plVar1 = plVar2 + 1;
    if (plVar2 != (long *)0x0) {
      do {
        lVar11 = *plVar1;
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)lVar11 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if ((int)lVar11 == 1) {
        (**(code **)(*plVar2 + 0x10))();
      }
    }
    plVar2 = local_d0 + 1;
    if (local_d0 != (long *)0x0) {
      do {
        lVar11 = *plVar2;
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
        if (bVar10) {
          *(int *)plVar2 = (int)lVar11 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if ((int)lVar11 == 1) {
        (**(code **)(*local_d0 + 0x10))();
      }
    }
    FUN_001e31ec(&local_c0,param_2,param_1,local_58,param_3[1]);
    plVar2 = local_f0;
    if (local_c0 != (long *)0x0) {
      plVar1 = local_c0 + 1;
      do {
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    local_e8 = local_b8;
    local_f0 = local_c0;
    plVar1 = plVar2 + 1;
    if (plVar2 != (long *)0x0) {
      do {
        lVar11 = *plVar1;
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)lVar11 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if ((int)lVar11 == 1) {
        (**(code **)(*plVar2 + 0x10))();
      }
    }
    plVar2 = local_c0 + 1;
    if (local_c0 == (long *)0x0) goto LAB_001e9740;
    do {
      iVar18 = (int)*plVar2;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar10) {
        *(int *)plVar2 = iVar18 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
      local_b0 = local_c0;
    } while (cVar9 != '\0');
  }
  else {
    local_90 = *(undefined8 *)param_3;
    local_70 = 0.0;
    local_80._0_4_ = 0x1010000;
    local_78 = (Mat *)&local_60;
    FUN_001e7ed0(&local_b0,param_2,param_1,(_InputArray *)&local_80,&local_90);
    plVar2 = local_e0;
    if (local_b0 != (long *)0x0) {
      plVar1 = local_b0 + 1;
      do {
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    local_d8 = local_a8;
    local_e0 = local_b0;
    plVar1 = plVar2 + 1;
    if (plVar2 != (long *)0x0) {
      do {
        lVar11 = *plVar1;
        cVar9 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar10) {
          *(int *)plVar1 = (int)lVar11 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if ((int)lVar11 == 1) {
        (**(code **)(*plVar2 + 0x10))();
      }
    }
    plVar2 = local_b0 + 1;
    if (local_b0 == (long *)0x0) goto LAB_001e9740;
    do {
      iVar18 = (int)*plVar2;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar10) {
        *(int *)plVar2 = iVar18 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
  }
  if (iVar18 == 1) {
    (**(code **)(*local_b0 + 0x10))();
  }
LAB_001e9740:
  local_80 = *param_8;
  local_78 = (Mat *)param_8[1];
  local_70 = param_8[2];
  dVar4 = param_8[3];
  dStack_68 = dVar4;
  if ((((param_6 == 0) || (param_7 == 0)) &&
      ((local_80 == DAT_001e9e58 &&
       (((double)local_78 == DAT_001e9e58 && (local_70 == DAT_001e9e58)))))) &&
     (dVar4 == DAT_001e9e58)) {
    uVar3 = param_1 & 7;
    if (((uVar3 != 0) && (1 < uVar3 - 2)) && (1 < uVar3 - 5)) {
      local_a0 = 0;
      local_98 = 0;
      pvVar20 = (void *)String::allocate((String *)&local_a0,0x5a);
      memcpy(pvVar20,&DAT_0045bf58,0x5a);
      error(-0xd7,(String *)&local_a0,
            "cv::Ptr<cv::FilterEngine> cv::createMorphologyFilter(int, int, cv::InputArray, cv::Point, int, int, const Scalar&)"
            ,"/builds/master_pack-android/opencv/modules/imgproc/src/morph.cpp",0x3f2);
      String::deallocate((String *)&local_a0);
    }
    if (param_2 == 0) {
      local_80 = DAT_001e9e28;
      local_78 = (Mat *)DAT_001e9e28;
      local_70 = DAT_001e9e28;
      dStack_68 = DAT_001e9e28;
      if (((uVar3 != 0) &&
          (local_80 = DAT_001e9e20, local_78 = (Mat *)DAT_001e9e20, local_70 = DAT_001e9e20,
          dStack_68 = DAT_001e9e20, uVar3 != 2)) &&
         ((local_80 = DAT_001e9e30, local_78 = (Mat *)DAT_001e9e30, local_70 = DAT_001e9e30,
          dStack_68 = DAT_001e9e30, uVar3 != 3 &&
          (local_80 = dVar4, local_78 = (Mat *)dVar4, local_70 = dVar4, dStack_68 = dVar4,
          uVar3 == 5)))) {
        local_80 = DAT_001e9e38;
        local_78 = (Mat *)DAT_001e9e38;
        local_70 = DAT_001e9e38;
        dStack_68 = DAT_001e9e38;
      }
    }
    else {
      local_80 = 0.0;
      local_78 = (Mat *)local_80;
      local_70 = local_80;
      dStack_68 = local_80;
      if ((((param_1 & 5) != 0) &&
          (local_80 = DAT_001e9e40, local_78 = (Mat *)DAT_001e9e40, local_70 = DAT_001e9e40,
          dStack_68 = DAT_001e9e40, uVar3 != 3)) &&
         (local_80 = DAT_001e9e50, local_78 = (Mat *)DAT_001e9e50, local_70 = DAT_001e9e50,
         dStack_68 = DAT_001e9e50, uVar3 != 5)) {
        local_80 = DAT_001e9e48;
        local_78 = (Mat *)DAT_001e9e48;
        local_70 = DAT_001e9e48;
        dStack_68 = DAT_001e9e48;
      }
    }
  }
  pvVar20 = operator_new(0x130);
  FUN_001d5aa4(pvVar20,&local_e0,&local_100,&local_f0,param_1,param_1,param_1,param_6,param_7,
               (_InputArray *)&local_80);
  puVar21 = operator_new(0x20);
  *(undefined4 *)(puVar21 + 1) = 1;
  puVar21[2] = pvVar20;
  *puVar21 = &PTR_FUN_004f3ca0;
  plVar2 = local_e0 + 1;
  *param_1_00 = puVar21;
  param_1_00[1] = pvVar20;
  if (local_e0 != (long *)0x0) {
    do {
      lVar11 = *plVar2;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar10) {
        *(int *)plVar2 = (int)lVar11 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if ((int)lVar11 == 1) {
      (**(code **)(*local_e0 + 0x10))(local_e0);
    }
  }
  plVar2 = local_f0 + 1;
  if (local_f0 != (long *)0x0) {
    do {
      lVar11 = *plVar2;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar10) {
        *(int *)plVar2 = (int)lVar11 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if ((int)lVar11 == 1) {
      (**(code **)(*local_f0 + 0x10))();
    }
  }
  plVar2 = local_100 + 1;
  if (local_100 != (long *)0x0) {
    do {
      lVar11 = *plVar2;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(plVar2,0x10);
      if (bVar10) {
        *(int *)plVar2 = (int)lVar11 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if ((int)lVar11 == 1) {
      (**(code **)(*local_100 + 0x10))();
    }
  }
  if (local_28 != 0) {
    piVar23 = (int *)(local_28 + 0x14);
    do {
      iVar18 = *piVar23;
      cVar9 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar10) {
        *piVar23 = iVar18 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar18 = 0;
    piVar23 = local_20;
    do {
      *piVar23 = 0;
      iVar18 = iVar18 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar18 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return param_1_00;
}


==================================================================

### FUNC 001e9e60 (760 bytes) name=FUN_001e9e60

void FUN_001e9e60(long param_1,int *param_2)

{
  long *plVar1;
  int *piVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  long lVar8;
  int iVar9;
  undefined4 local_f0;
  undefined4 local_ec;
  long *local_e8;
  long *local_e0;
  int local_d8;
  int local_d4;
  long local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  int local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar3 = *(int *)(param_1 + 0x10);
  iVar4 = *(int *)(param_1 + 200);
  iVar9 = 0;
  if (iVar4 != 0) {
    iVar9 = (iVar3 * param_2[1]) / iVar4;
  }
  local_d8 = 0x80000000;
  local_d4 = 0x7fffffff;
  iVar5 = 0;
  if (iVar4 != 0) {
    iVar5 = (iVar3 * *param_2) / iVar4;
  }
  if (iVar3 < iVar5) {
    iVar5 = iVar3;
  }
  if (iVar3 < iVar9) {
    iVar9 = iVar3;
  }
  local_60 = iVar5;
  local_5c = iVar9;
  cv::Mat::Mat(aMStack_c0,(Mat *)(param_1 + 8),(Range *)&local_60,(Range *)&local_d8);
  local_f0 = 0x80000000;
  local_ec = 0x7fffffff;
  local_d8 = iVar5;
  local_d4 = iVar9;
  cv::Mat::Mat((Mat *)&local_60,(Mat *)(param_1 + 0x68),(Range *)&local_d8,(Range *)&local_f0);
  local_d0 = param_1 + 0xd8;
  local_f0 = *(undefined4 *)(param_1 + 0x138);
  local_ec = *(undefined4 *)(param_1 + 0x13c);
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = 0x1010000;
  cv::createMorphologyFilter
            ((cv *)&local_e8,*(undefined4 *)(param_1 + 0xd0),*(uint *)(param_1 + 8) & 0xfff,
             (Range *)&local_d8,(Range *)&local_f0,*(undefined4 *)(param_1 + 0x140),
             *(undefined4 *)(param_1 + 0x144),param_1 + 0x148);
  local_d8 = 0;
  local_d4 = 0;
  local_d0 = 0xffffffffffffffff;
  local_f0 = 0;
  local_ec = 0;
  (**(code **)(*local_e0 + 0x28))
            (local_e0,aMStack_c0,(Mat *)&local_60,(Range *)&local_d8,(Range *)&local_f0,0);
  iVar9 = 1;
  if (1 < *(int *)(param_1 + 0xcc)) {
    do {
      local_d8 = 0;
      local_d4 = 0;
      local_d0 = 0xffffffffffffffff;
      local_f0 = 0;
      local_ec = 0;
      (**(code **)(*local_e0 + 0x28))
                (local_e0,(Mat *)&local_60,(Mat *)&local_60,(Range *)&local_d8,(Range *)&local_f0,0)
      ;
      iVar9 = iVar9 + 1;
    } while (iVar9 < *(int *)(param_1 + 0xcc));
  }
  plVar1 = local_e8 + 1;
  if (local_e8 != (long *)0x0) {
    do {
      lVar8 = *plVar1;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar7) {
        *(int *)plVar1 = (int)lVar8 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if ((int)lVar8 == 1) {
      (**(code **)(*local_e8 + 0x10))();
    }
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar7) {
        *piVar2 = iVar9 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar2 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar7) {
        *piVar2 = iVar9 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 001ea1e0 (2280 bytes) name=FUN_001ea1e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_001ea1e0(float *param_1,float *param_2,float *param_3)

{
  float *pfVar1;
  float fVar2;
  undefined2 uVar3;
  undefined1 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  ulong uVar10;
  ulong uVar11;
  char *pcVar12;
  undefined4 *puVar13;
  ulong uVar14;
  int iVar15;
  float *pfVar16;
  undefined8 uVar17;
  int *piVar18;
  int iVar19;
  int iVar20;
  float fVar21;
  float fVar22;
  double dVar23;
  float fVar24;
  float fVar25;
  double dVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_18 = _UNK_001eab28;
  local_20 = _DAT_001eab20;
  local_38 = _UNK_001eab08;
  local_40 = _DAT_001eab00;
  local_58 = 0;
  local_60 = 0;
  uStack_28 = _UNK_001eab18;
  local_30 = _DAT_001eab10;
  uStack_48 = 0;
  local_50 = 0;
  fVar34 = *param_1;
  fVar33 = param_1[1];
  fVar21 = 0.0;
  uStack_8 = _UNK_001eab38;
  local_10 = _DAT_001eab30;
  uStack_78 = _UNK_001eab08;
  local_80 = _DAT_001eab00;
  iVar15 = 1;
  iVar19 = 0;
  pfVar1 = param_1;
  do {
    iVar20 = iVar15;
    pfVar16 = pfVar1 + 2;
    iVar15 = iVar20;
    do {
      dVar23 = (double)(pfVar1[1] - pfVar16[1]) * (double)(pfVar1[1] - pfVar16[1]) +
               (double)(*pfVar1 - *pfVar16) * (double)(*pfVar1 - *pfVar16);
      dVar26 = SQRT(dVar23);
      if (NAN(dVar26)) {
        dVar26 = sqrt(dVar23);
      }
      if (fVar21 < (float)dVar26) {
        local_80 = CONCAT44(iVar15,iVar19);
        fVar21 = (float)dVar26;
      }
      iVar15 = iVar15 + 1;
      pfVar16 = pfVar16 + 2;
    } while (iVar15 != 4);
    iVar15 = iVar20 + 1;
    iVar19 = iVar20;
    pfVar1 = pfVar1 + 2;
  } while (iVar20 + 1 != 4);
  if (fVar21 <= 0.0) {
    uVar17 = 1;
    uVar14 = uStack_78 & 0xffffffff;
    fVar21 = 1.0;
    uVar10 = (ulong)uStack_78._4_4_;
    fVar24 = 1.0;
    fVar32 = fVar33;
    fVar30 = fVar34;
    goto LAB_001ea500;
  }
  if ((int)local_80 == 0) {
    iVar15 = 2;
LAB_001ea334:
    if (local_80._4_4_ != 1) {
      if (iVar15 == 2) {
        iVar15 = 3;
        iVar19 = 2;
      }
      else {
        if ((int)uStack_78 == 1) goto LAB_001ea370;
        iVar15 = 4;
        iVar19 = 3;
      }
      *(undefined4 *)((long)&local_80 + (long)iVar19 * 4) = 1;
    }
LAB_001ea370:
    if ((int)local_80 != 2) goto LAB_001ea378;
LAB_001ea3d0:
    if (local_80._4_4_ != 3) {
      if (iVar15 != 2) {
        if ((int)uStack_78 == 3) goto LAB_001ea41c;
        if (iVar15 != 3) {
          if (uStack_78._4_4_ == 3) goto LAB_001ea41c;
          iVar15 = 4;
        }
      }
      *(undefined4 *)((long)&local_80 + (long)iVar15 * 4) = 3;
    }
  }
  else {
    if (local_80._4_4_ == 0) {
      iVar15 = 2;
    }
    else {
      uStack_78 = (ulong)uStack_78._4_4_ << 0x20;
      iVar15 = 3;
    }
    if ((int)local_80 != 1) goto LAB_001ea334;
LAB_001ea378:
    if (local_80._4_4_ != 2) {
      if (iVar15 == 2) {
        iVar15 = 3;
        iVar19 = 2;
      }
      else {
        if ((int)uStack_78 == 2) goto LAB_001ea3c8;
        if (iVar15 == 3) {
          iVar15 = 4;
          iVar19 = 3;
        }
        else {
          if (uStack_78._4_4_ == 2) goto LAB_001ea3c8;
          iVar15 = 5;
          iVar19 = 4;
        }
      }
      *(undefined4 *)((long)&local_80 + (long)iVar19 * 4) = 2;
    }
LAB_001ea3c8:
    if ((int)local_80 != 3) goto LAB_001ea3d0;
  }
LAB_001ea41c:
  uVar10 = -((local_80 & 0xffffffff) >> 0x1f) & 0xfffffff800000000 | (local_80 & 0xffffffff) << 3;
  uVar14 = -(ulong)(local_80._4_4_ >> 0x1f) & 0xfffffff800000000 | (ulong)local_80._4_4_ << 3;
  fVar21 = *(float *)((long)param_1 + uVar10);
  fVar24 = *(float *)((long)param_1 + uVar10 + 4);
  fVar32 = (fVar24 + *(float *)((long)param_1 + uVar14 + 4)) * 0.5;
  fVar30 = (fVar21 + *(float *)((long)param_1 + uVar14)) * 0.5;
  dVar26 = (double)(fVar24 - fVar32);
  dVar23 = (double)(fVar21 - fVar30);
  dVar23 = dVar26 * dVar26 + dVar23 * dVar23;
  dVar26 = SQRT(dVar23);
  if (NAN(dVar26)) {
    dVar26 = sqrt(dVar23);
  }
  fVar2 = DAT_001eab48;
  fVar24 = 1.0;
  fVar31 = (float)(dVar26 * DAT_001eab40);
  if (fVar31 < 1.0) {
    fVar21 = 1.0;
  }
  else {
    fVar21 = fVar31 * fVar31;
    fVar24 = fVar31;
  }
  uVar14 = uStack_78 & 0xffffffff;
  uVar10 = -(uStack_78 >> 0x1f & 1) & 0xfffffff800000000 | uVar14 << 3;
  fVar27 = *(float *)((long)param_1 + uVar10) - fVar30;
  fVar31 = *(float *)((long)param_1 + uVar10 + 4) - fVar32;
  if (0.0 <= (fVar21 - fVar27 * fVar27) - fVar31 * fVar31) {
    uVar10 = (ulong)uStack_78._4_4_;
    uVar17 = 2;
    uVar11 = -(ulong)(uStack_78._4_4_ >> 0x1f) & 0xfffffff800000000 | uVar10 << 3;
    fVar27 = *(float *)((long)param_1 + uVar11) - fVar30;
    fVar31 = *(float *)((long)param_1 + uVar11 + 4) - fVar32;
    if (0.0 <= (fVar21 - fVar27 * fVar27) - fVar31 * fVar31) goto LAB_001ea500;
  }
  iVar19 = -1;
  iVar15 = 0;
  piVar18 = (int *)&local_40;
  fVar24 = DAT_001eaaf0;
  do {
    fVar32 = param_1[(long)piVar18[1] * 2];
    fVar30 = param_1[(long)piVar18[1] * 2 + 1];
    fVar31 = param_1[(long)*piVar18 * 2];
    fVar28 = param_1[(long)piVar18[2] * 2 + 1] - fVar30;
    fVar27 = param_1[(long)*piVar18 * 2 + 1];
    fVar29 = fVar32 - param_1[(long)piVar18[2] * 2];
    fVar21 = fVar29 * (fVar30 - fVar27) - (fVar31 - fVar32) * fVar28;
    if (fVar21 != 0.0) {
      fVar25 = fVar30 + param_1[(long)piVar18[2] * 2 + 1];
      fVar22 = fVar32 + param_1[(long)piVar18[2] * 2];
      fVar21 = ((fVar31 - fVar32) * (fVar22 * 0.5 - (fVar32 + fVar31) * 0.5) -
               (fVar30 - fVar27) * (fVar25 * 0.5 - (fVar27 + fVar30) * 0.5)) / fVar21;
      fVar32 = fVar29 * fVar21 + fVar25 * 0.5;
      fVar21 = fVar28 * fVar21 + fVar22 * 0.5;
      dVar23 = (double)(fVar32 - fVar27) * (double)(fVar32 - fVar27) +
               (double)(fVar21 - fVar31) * (double)(fVar21 - fVar31);
      dVar26 = SQRT(dVar23);
      if (NAN(dVar26)) {
        dVar26 = sqrt(dVar23);
      }
      fVar30 = (float)dVar26 * fVar2;
      if (fVar30 < 2.0) {
        fVar31 = 4.0;
        fVar30 = 2.0;
      }
      else {
        fVar31 = fVar30 * fVar30;
      }
      if ((0.0 <= (fVar31 - (param_1[(long)piVar18[3] * 2] - fVar21) *
                            (param_1[(long)piVar18[3] * 2] - fVar21)) -
                  (param_1[(long)piVar18[3] * 2 + 1] - fVar32) *
                  (param_1[(long)piVar18[3] * 2 + 1] - fVar32)) && (fVar30 < fVar24)) {
        fVar34 = fVar21;
        fVar33 = fVar32;
        fVar24 = fVar30;
        iVar19 = iVar15;
      }
    }
    iVar15 = iVar15 + 1;
    piVar18 = piVar18 + 4;
  } while (iVar15 != 4);
  if (iVar19 == -1) {
    local_70 = 0;
    local_68 = 0;
    puVar13 = (undefined4 *)cv::String::allocate((String *)&local_70,7);
    uVar4 = DAT_0045c596;
    uVar3 = DAT_0045c594;
    *puVar13 = DAT_0045c590;
    *(undefined2 *)(puVar13 + 1) = uVar3;
    *(undefined1 *)((long)puVar13 + 6) = uVar4;
    cv::error(-0xd7,(String *)&local_70,
              "int cv::findEnslosingCicle4pts_32f(cv::Point2f*, cv::Point2f&, float&)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xa7);
    iVar19 = 0;
    cv::String::deallocate((String *)&local_70);
  }
  local_80 = *(ulong *)((long)&local_40 + (long)iVar19 * 4 * 4);
  uStack_78 = (&local_38)[(long)iVar19 * 2];
  uVar17 = 3;
  fVar21 = fVar24 * fVar24;
  uVar14 = uStack_78 & 0xffffffff;
  uVar10 = uStack_78 >> 0x20;
  fVar32 = fVar33;
  fVar30 = fVar34;
LAB_001ea500:
  uVar14 = -(uVar14 >> 0x1f) & 0xfffffff800000000 | uVar14 << 3;
  *param_2 = fVar30;
  uVar10 = -(uVar10 >> 0x1f) & 0xfffffff800000000 | uVar10 << 3;
  param_2[1] = fVar32;
  *param_3 = fVar24;
  fVar33 = param_1[(long)(int)local_80 * 2];
  fVar34 = param_1[(long)(int)local_80 * 2 + 1];
  local_58._0_4_ = param_1[(long)(int)local_80._4_4_ * 2];
  local_58._4_4_ = param_1[(long)(int)local_80._4_4_ * 2 + 1];
  local_60 = CONCAT44(fVar34,fVar33);
  local_50 = CONCAT44(*(undefined4 *)((long)param_1 + uVar14 + 4),
                      *(undefined4 *)((long)param_1 + uVar14));
  uStack_48 = CONCAT44(*(undefined4 *)((long)param_1 + uVar10 + 4),
                       *(undefined4 *)((long)param_1 + uVar10));
  *param_1 = fVar33;
  param_1[1] = fVar34;
  if ((fVar21 - (fVar33 - fVar30) * (fVar33 - fVar30)) - (fVar34 - fVar32) * (fVar34 - fVar32) < 0.0
     ) {
    local_70 = 0;
    local_68 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_70,0x2c);
    uVar9 = s_pointInCircle__pts_i___center__r_0045c5e0._40_4_;
    uVar8 = s_pointInCircle__pts_i___center__r_0045c5e0._24_8_;
    uVar7 = s_pointInCircle__pts_i___center__r_0045c5e0._16_8_;
    uVar6 = s_pointInCircle__pts_i___center__r_0045c5e0._8_8_;
    uVar5 = s_pointInCircle__pts_i___center__r_0045c5e0._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_pointInCircle__pts_i___center__r_0045c5e0._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar9;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_70,
              "int cv::findEnslosingCicle4pts_32f(cv::Point2f*, cv::Point2f&, float&)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xbc);
    cv::String::deallocate((String *)&local_70);
  }
  param_1[2] = (float)local_58;
  param_1[3] = local_58._4_4_;
  if ((fVar21 - ((float)local_58 - fVar30) * ((float)local_58 - fVar30)) -
      (local_58._4_4_ - fVar32) * (local_58._4_4_ - fVar32) < 0.0) {
    local_70 = 0;
    local_68 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_70,0x2c);
    uVar9 = s_pointInCircle__pts_i___center__r_0045c5e0._40_4_;
    uVar8 = s_pointInCircle__pts_i___center__r_0045c5e0._24_8_;
    uVar7 = s_pointInCircle__pts_i___center__r_0045c5e0._16_8_;
    uVar6 = s_pointInCircle__pts_i___center__r_0045c5e0._8_8_;
    uVar5 = s_pointInCircle__pts_i___center__r_0045c5e0._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_pointInCircle__pts_i___center__r_0045c5e0._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar9;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_70,
              "int cv::findEnslosingCicle4pts_32f(cv::Point2f*, cv::Point2f&, float&)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xbc);
    cv::String::deallocate((String *)&local_70);
  }
  param_1[4] = (float)local_50;
  param_1[5] = local_50._4_4_;
  if ((fVar21 - ((float)local_50 - fVar30) * ((float)local_50 - fVar30)) -
      (local_50._4_4_ - fVar32) * (local_50._4_4_ - fVar32) < 0.0) {
    local_70 = 0;
    local_68 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_70,0x2c);
    uVar9 = s_pointInCircle__pts_i___center__r_0045c5e0._40_4_;
    uVar8 = s_pointInCircle__pts_i___center__r_0045c5e0._24_8_;
    uVar7 = s_pointInCircle__pts_i___center__r_0045c5e0._16_8_;
    uVar6 = s_pointInCircle__pts_i___center__r_0045c5e0._8_8_;
    uVar5 = s_pointInCircle__pts_i___center__r_0045c5e0._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_pointInCircle__pts_i___center__r_0045c5e0._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar9;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_70,
              "int cv::findEnslosingCicle4pts_32f(cv::Point2f*, cv::Point2f&, float&)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xbc);
    cv::String::deallocate((String *)&local_70);
  }
  param_1[6] = (float)uStack_48;
  param_1[7] = uStack_48._4_4_;
  if ((fVar21 - ((float)uStack_48 - fVar30) * ((float)uStack_48 - fVar30)) -
      (uStack_48._4_4_ - fVar32) * (uStack_48._4_4_ - fVar32) < 0.0) {
    local_70 = 0;
    local_68 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_70,0x2c);
    uVar9 = s_pointInCircle__pts_i___center__r_0045c5e0._40_4_;
    uVar8 = s_pointInCircle__pts_i___center__r_0045c5e0._24_8_;
    uVar7 = s_pointInCircle__pts_i___center__r_0045c5e0._16_8_;
    uVar6 = s_pointInCircle__pts_i___center__r_0045c5e0._8_8_;
    uVar5 = s_pointInCircle__pts_i___center__r_0045c5e0._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_pointInCircle__pts_i___center__r_0045c5e0._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar9;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_70,
              "int cv::findEnslosingCicle4pts_32f(cv::Point2f*, cv::Point2f&, float&)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xbc);
    cv::String::deallocate((String *)&local_70);
  }
  return uVar17;
}


==================================================================

### FUNC 001eab50 (2128 bytes) name=minEnclosingCircle

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::minEnclosingCircle(cv::_InputArray const&, cv::Point_<float>&, float&) */

void cv::minEnclosingCircle(_InputArray *param_1,Point_ *param_2,float *param_3)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  bool bVar10;
  int iVar11;
  undefined8 *puVar12;
  float *pfVar13;
  float *pfVar14;
  float *pfVar15;
  undefined4 *puVar16;
  Mat *pMVar17;
  int iVar18;
  int iVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float local_b4;
  float local_b0;
  float local_ac;
  float local_a8;
  float fStack_a4;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 local_80;
  undefined8 local_78;
  long local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  float *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar17 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar17;
    local_5c = *(int *)(pMVar17 + 4);
    local_58 = *(undefined4 *)(pMVar17 + 8);
    local_54 = *(undefined4 *)(pMVar17 + 0xc);
    local_50 = *(float **)(pMVar17 + 0x10);
    local_48 = *(undefined8 *)(pMVar17 + 0x18);
    local_40 = *(undefined8 *)(pMVar17 + 0x20);
    local_38 = *(undefined8 *)(pMVar17 + 0x28);
    local_30 = *(undefined8 *)(pMVar17 + 0x30);
    local_28 = *(long *)(pMVar17 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar10) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar17 + 0x48);
      local_8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar11 = Mat::checkVector((Mat *)&local_60,2,-1,true);
  uVar2 = local_60 & 7;
  local_b0 = 0.0;
  local_ac = 0.0;
  local_b4 = 0.0;
  if ((iVar11 < 0) || (1 < uVar2 - 4)) {
    local_80 = 0;
    local_78 = 0;
    puVar12 = (undefined8 *)String::allocate((String *)&local_80,0x32);
    uVar9 = DAT_0045c638;
    uVar8 = _LAB_0045c630;
    uVar7 = DAT_0045c628;
    uVar6 = DAT_0045c620;
    uVar5 = DAT_0045c618;
    uVar4 = DAT_0045c610;
    *(undefined2 *)(puVar12 + 6) = DAT_0045c640;
    *puVar12 = uVar4;
    puVar12[1] = uVar5;
    puVar12[2] = uVar6;
    puVar12[3] = uVar7;
    puVar12[4] = uVar8;
    puVar12[5] = uVar9;
    error(-0xd7,(String *)&local_80,
          "void cv::minEnclosingCircle(cv::InputArray, cv::Point2f&, float&)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0xce);
    String::deallocate((String *)&local_80);
  }
  pfVar14 = local_50;
  *(undefined4 *)param_2 = 0;
  *(undefined4 *)(param_2 + 4) = 0;
  *param_3 = 0.0;
  if (iVar11 == 0) {
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar10) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_5c) {
      iVar11 = 0;
      puVar16 = local_20;
      do {
        *puVar16 = 0;
        iVar11 = iVar11 + 1;
        puVar16 = puVar16 + 1;
      } while (iVar11 < local_5c);
    }
  }
  else {
    bVar10 = uVar2 == 5;
    if (bVar10) {
      fVar25 = local_50[1];
      local_98 = *(ulong *)local_50;
      local_a0 = *(ulong *)local_50;
      uStack_88 = *(undefined8 *)local_50;
      local_90 = *(long *)local_50;
      if (1 < iVar11) {
        pfVar13 = local_50;
        fVar23 = *local_50;
        fVar26 = fVar25;
        fVar28 = *local_50;
        while( true ) {
          pfVar15 = pfVar13 + 2;
          fVar20 = pfVar13[3];
          if (*pfVar15 < fVar23) {
            local_a0 = *(ulong *)pfVar15;
          }
          if (fVar28 < *pfVar15) {
            local_98 = *(ulong *)pfVar15;
          }
          if (fVar20 < fVar26) {
            local_90 = *(long *)pfVar15;
          }
          if (fVar25 < fVar20) {
            uStack_88 = *(undefined8 *)pfVar15;
            fVar25 = fVar20;
          }
          if (pfVar13 == local_50 + (ulong)(iVar11 - 2) * 2) break;
          pfVar13 = pfVar13 + 2;
          fVar23 = (float)local_a0;
          fVar26 = local_90._4_4_;
          fVar28 = (float)local_98;
        }
      }
    }
    else {
      fVar23 = (float)(int)*local_50;
      fVar25 = (float)(int)local_50[1];
      local_98 = CONCAT44(fVar25,fVar23);
      local_a0 = CONCAT44(fVar25,fVar23);
      uStack_88 = CONCAT44(fVar25,fVar23);
      local_90 = CONCAT44(fVar25,fVar23);
      if (1 < iVar11) {
        pfVar13 = local_50;
        fVar26 = fVar23;
        fVar28 = fVar25;
        fVar20 = fVar25;
        fVar30 = fVar23;
        fVar29 = fVar25;
        fVar24 = fVar23;
        fVar27 = fVar25;
        while( true ) {
          fVar21 = (float)(int)pfVar13[2];
          fVar22 = (float)(int)pfVar13[3];
          if (fVar21 < fVar26) {
            local_a0 = (ulong)(uint)fVar21;
            fVar20 = fVar22;
          }
          if (fVar24 < fVar21) {
            local_98 = (ulong)(uint)fVar21;
            fVar25 = fVar22;
          }
          if (fVar22 < fVar28) {
            local_90 = (ulong)(uint)fVar22 << 0x20;
            fVar23 = fVar21;
          }
          if (fVar27 < fVar22) {
            fVar30 = fVar21;
            fVar29 = fVar22;
            fVar27 = fVar22;
          }
          if (pfVar13 == local_50 + (ulong)(iVar11 - 2) * 2) break;
          pfVar13 = pfVar13 + 2;
          fVar26 = (float)local_a0;
          fVar28 = local_90._4_4_;
          fVar24 = (float)local_98;
        }
        local_90 = CONCAT44(local_90._4_4_,fVar23);
        local_98 = CONCAT44(fVar25,(float)local_98);
        local_a0 = CONCAT44(fVar20,(float)local_a0);
        uStack_88 = CONCAT44(fVar29,fVar30);
      }
    }
    iVar19 = 0;
    pfVar13 = local_50 + ((ulong)(iVar11 - 1) + 1) * 2;
    do {
      local_a8 = 0.0;
      fStack_a4 = 0.0;
      if (iVar19 == 0) {
        FUN_001ea1e0(&local_a0,&local_b0,&local_b4);
      }
      if (iVar11 < 1) goto LAB_001eaf50;
      fVar25 = 0.0;
      pfVar15 = pfVar14;
      if (bVar10) {
        do {
          fVar26 = *pfVar15 - local_b0;
          fVar23 = pfVar15[1] - local_ac;
          fVar23 = (local_b4 * local_b4 - fVar26 * fVar26) - fVar23 * fVar23;
          if (fVar23 < fVar25) {
            fStack_a4 = pfVar15[1];
            local_a8 = *pfVar15;
            fVar25 = fVar23;
          }
          pfVar15 = pfVar15 + 2;
        } while (pfVar15 != pfVar13);
      }
      else {
        do {
          fVar26 = (float)(int)*pfVar15 - local_b0;
          fVar23 = (float)(int)pfVar15[1] - local_ac;
          fVar23 = (local_b4 * local_b4 - fVar26 * fVar26) - fVar23 * fVar23;
          if (fVar23 < fVar25) {
            fStack_a4 = (float)(int)pfVar15[1];
            local_a8 = (float)(int)*pfVar15;
            fVar25 = fVar23;
          }
          pfVar15 = pfVar15 + 2;
        } while (pfVar15 != pfVar13);
      }
      if (0.0 <= fVar25) goto LAB_001eaf50;
      iVar18 = 3;
      puVar12 = &local_a0;
      do {
        if (iVar18 == 0) {
          local_80 = CONCAT44(fStack_a4,local_a8);
          local_70 = local_90;
          pfVar15 = (float *)&uStack_88;
          local_78 = local_98;
        }
        else {
          local_80 = local_a0;
          if (iVar18 == 1) {
            pfVar15 = (float *)&uStack_88;
            local_78 = CONCAT44(fStack_a4,local_a8);
            local_70 = local_90;
          }
          else {
            local_78 = local_98;
            if (iVar18 == 2) {
              pfVar15 = (float *)&uStack_88;
              local_70 = CONCAT44(fStack_a4,local_a8);
            }
            else {
              local_70 = local_90;
              pfVar15 = &local_a8;
            }
          }
        }
        uStack_68 = *(undefined8 *)pfVar15;
        FUN_001ea1e0(&local_80,&local_b0,&local_b4);
        fVar25 = *(float *)((long)puVar12 + 0x1c) - local_ac;
        if (0.0 <= (local_b4 * local_b4 -
                   (*(float *)(puVar12 + 3) - local_b0) * (*(float *)(puVar12 + 3) - local_b0)) -
                   fVar25 * fVar25) {
          (&local_a0)[iVar18] = CONCAT44(fStack_a4,local_a8);
          break;
        }
        iVar18 = iVar18 + -1;
        puVar12 = puVar12 + -1;
      } while (iVar18 != -1);
      iVar19 = iVar19 + 1;
    } while (iVar19 != 100);
    local_b4 = 0.0;
    if (bVar10) {
      do {
        fVar25 = (local_ac - pfVar14[1]) * (local_ac - pfVar14[1]) +
                 (local_b0 - *pfVar14) * (local_b0 - *pfVar14);
        if (local_b4 < fVar25) {
          local_b4 = fVar25;
        }
        pfVar14 = pfVar14 + 2;
      } while (pfVar14 != pfVar13);
    }
    else {
      do {
        fVar25 = (local_ac - (float)(int)pfVar14[1]) * (local_ac - (float)(int)pfVar14[1]) +
                 (local_b0 - (float)(int)*pfVar14) * (local_b0 - (float)(int)*pfVar14);
        if (local_b4 < fVar25) {
          local_b4 = fVar25;
        }
        pfVar14 = pfVar14 + 2;
      } while (pfVar14 != pfVar13);
    }
    fVar25 = SQRT(local_b4);
    if (NAN(fVar25)) {
      fVar25 = sqrtf(local_b4);
    }
    local_b4 = fVar25 * DAT_001eb3e0;
LAB_001eaf50:
    *(float *)param_2 = local_b0;
    *(float *)(param_2 + 4) = local_ac;
    *param_3 = local_b4;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar10) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_5c) {
      iVar11 = 0;
      puVar16 = local_20;
      do {
        *puVar16 = 0;
        iVar11 = iVar11 + 1;
        puVar16 = puVar16 + 1;
      } while (iVar11 < local_5c);
    }
  }
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = (float *)0x0;
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001eb3e4 (1552 bytes) name=arcLength

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::arcLength(cv::_InputArray const&, bool) */

undefined1  [16] cv::arcLength(_InputArray *param_1,bool param_2)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  int iVar11;
  undefined8 *puVar12;
  ulong uVar13;
  undefined4 *puVar14;
  Mat *pMVar15;
  int iVar16;
  uint uVar17;
  uint uVar18;
  float *pfVar19;
  int iVar20;
  undefined1 auVar21 [16];
  float fVar22;
  float fVar23;
  double dVar24;
  float fVar25;
  float fVar26;
  undefined4 local_130 [2];
  Mat *local_128;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118 [2];
  Mat *local_110;
  undefined4 local_108;
  undefined4 local_104;
  float local_100 [16];
  uint local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  float *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  float *local_50;
  float *local_48;
  long local_40;
  long local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  ulong *local_18;
  ulong local_10;
  undefined8 local_8;
  
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar15 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar15;
    local_bc = *(int *)(pMVar15 + 4);
    local_b8 = *(undefined4 *)(pMVar15 + 8);
    local_b4 = *(undefined4 *)(pMVar15 + 0xc);
    local_b0 = *(float **)(pMVar15 + 0x10);
    local_a8 = *(undefined8 *)(pMVar15 + 0x18);
    local_a0 = *(undefined8 *)(pMVar15 + 0x20);
    local_98 = *(undefined8 *)(pMVar15 + 0x28);
    local_90 = *(undefined8 *)(pMVar15 + 0x30);
    local_88 = *(long *)(pMVar15 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar15 + 0x48);
      local_68 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar11 = Mat::checkVector((Mat *)&local_c0,2,-1,true);
  uVar2 = local_c0 & 7;
  if ((iVar11 < 0) || (1 < uVar2 - 4)) {
    local_60 = 0;
    local_58 = 0;
    puVar12 = (undefined8 *)String::allocate((String *)&local_60,0x32);
    uVar10 = DAT_0045c638;
    uVar9 = _LAB_0045c630;
    uVar8 = DAT_0045c628;
    uVar7 = DAT_0045c620;
    uVar6 = DAT_0045c618;
    uVar5 = DAT_0045c610;
    *(undefined2 *)(puVar12 + 6) = DAT_0045c640;
    *puVar12 = uVar5;
    puVar12[1] = uVar6;
    puVar12[2] = uVar7;
    puVar12[3] = uVar8;
    puVar12[4] = uVar9;
    puVar12[5] = uVar10;
    error(-0xd7,(String *)&local_60,"double cv::arcLength(cv::InputArray, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x12d);
    String::deallocate((String *)&local_60);
  }
  if (iVar11 < 2) {
    dVar24 = 0.0;
  }
  else {
    uVar13 = 0;
    if (param_2) {
      uVar13 = -(ulong)(iVar11 - 1U >> 0x1f) & 0xfffffff800000000 | (ulong)(iVar11 - 1U) << 3;
    }
    if (uVar2 == 5) {
      fVar22 = *(float *)((long)local_b0 + uVar13);
      fVar23 = *(float *)((long)local_b0 + uVar13 + 4);
    }
    else {
      fVar22 = (float)*(int *)((long)local_b0 + uVar13);
      fVar23 = (float)*(int *)((long)local_b0 + uVar13 + 4);
    }
    uVar17 = 0;
    iVar20 = 0;
    dVar24 = 0.0;
    pfVar19 = local_b0;
    while( true ) {
      if (uVar2 == 5) {
        fVar26 = *pfVar19;
        fVar25 = pfVar19[1];
      }
      else {
        fVar26 = (float)(int)*pfVar19;
        fVar25 = (float)(int)pfVar19[1];
      }
      uVar18 = uVar17 + 1;
      local_100[(int)uVar17] =
           (fVar25 - fVar23) * (fVar25 - fVar23) + (fVar26 - fVar22) * (fVar26 - fVar22);
      if ((uVar18 == 0x10) || (iVar11 + -1 == iVar20)) {
        local_10 = -(ulong)(uVar18 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar18 << 2;
        local_18 = &local_10;
        local_30 = 0;
        local_40 = (long)local_100 + local_10;
        local_58 = CONCAT44(uVar18,1);
        local_28 = 0;
        local_60 = 0x242ff4005;
        local_8 = 4;
        local_130[0] = 0x1010000;
        local_120 = 0;
        local_11c = 0;
        local_108 = 0;
        local_104 = 0;
        local_118[0] = 0x2010000;
        local_128 = (Mat *)&local_60;
        local_110 = (Mat *)&local_60;
        local_50 = local_100;
        local_48 = local_100;
        local_38 = local_40;
        local_20 = &local_58;
        sqrt((_InputArray *)local_130,(_OutputArray *)local_118);
        if ((0 < (int)uVar18) &&
           (dVar24 = dVar24 + (double)local_100[(int)uVar17], uVar18 = uVar17, 0 < (int)uVar17)) {
          dVar24 = dVar24 + (double)local_100[(int)(uVar17 - 1)];
          uVar18 = 0;
          if (uVar17 - 1 != 0) {
            uVar18 = uVar17 - 2;
            dVar24 = dVar24 + (double)local_100[(int)uVar18];
            if (0 < (int)uVar18) {
              uVar18 = uVar17 - 3;
              dVar24 = dVar24 + (double)local_100[(int)uVar18];
              if (0 < (int)uVar18) {
                uVar18 = uVar17 - 4;
                dVar24 = dVar24 + (double)local_100[(int)uVar18];
                if (0 < (int)uVar18) {
                  uVar18 = uVar17 - 5;
                  dVar24 = dVar24 + (double)local_100[(int)uVar18];
                  if (0 < (int)uVar18) {
                    uVar18 = uVar17 - 6;
                    dVar24 = dVar24 + (double)local_100[(int)uVar18];
                    if (0 < (int)uVar18) {
                      uVar18 = uVar17 - 7;
                      dVar24 = dVar24 + (double)local_100[(int)uVar18];
                      if (0 < (int)uVar18) {
                        uVar18 = uVar17 - 8;
                        dVar24 = dVar24 + (double)local_100[(int)uVar18];
                        if (0 < (int)uVar18) {
                          uVar18 = uVar17 - 9;
                          dVar24 = dVar24 + (double)local_100[(int)uVar18];
                          if (0 < (int)uVar18) {
                            uVar18 = uVar17 - 10;
                            dVar24 = dVar24 + (double)local_100[(int)uVar18];
                            if (0 < (int)uVar18) {
                              uVar18 = uVar17 - 0xb;
                              dVar24 = dVar24 + (double)local_100[(int)uVar18];
                              if (0 < (int)uVar18) {
                                uVar18 = uVar17 - 0xc;
                                dVar24 = dVar24 + (double)local_100[(int)uVar18];
                                if (0 < (int)uVar18) {
                                  uVar18 = uVar17 - 0xd;
                                  dVar24 = dVar24 + (double)local_100[(int)uVar18];
                                  if (0 < (int)uVar18) {
                                    uVar18 = uVar17 - 0xe;
                                    dVar24 = dVar24 + (double)local_100[(int)uVar18];
                                    if (0 < (int)uVar18) {
                                      uVar18 = uVar17 - 0xf;
                                      dVar24 = dVar24 + (double)local_100[(int)uVar18];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            iVar16 = *piVar1;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = iVar16 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar16 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        local_28 = 0;
        local_50 = (float *)0x0;
        local_38 = 0;
        local_40 = 0;
        local_48 = (float *)0x0;
        if (0 < local_60._4_4_) {
          iVar16 = 0;
          puVar12 = local_20;
          do {
            *(undefined4 *)puVar12 = 0;
            iVar16 = iVar16 + 1;
            puVar12 = (undefined8 *)((long)puVar12 + 4);
          } while (iVar16 < local_60._4_4_);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
      }
      uVar17 = uVar18;
      if (iVar20 + 1 == iVar11) break;
      iVar20 = iVar20 + 1;
      pfVar19 = pfVar19 + 2;
      fVar22 = fVar26;
      fVar23 = fVar25;
    }
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (float *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    puVar14 = local_80;
    do {
      *puVar14 = 0;
      iVar11 = iVar11 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  auVar21._8_8_ = 0;
  auVar21._0_8_ = dVar24;
  return auVar21;
}


==================================================================

### FUNC 001eba58 (820 bytes) name=contourArea

/* cv::contourArea(cv::_InputArray const&, bool) */

undefined1  [16] cv::contourArea(_InputArray *param_1,bool param_2)

{
  float *pfVar1;
  int *piVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  char *pcVar13;
  Mat *pMVar14;
  undefined4 *puVar15;
  float *pfVar16;
  undefined1 auVar17 [16];
  float fVar18;
  double dVar19;
  float fVar20;
  float fVar21;
  double dVar22;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  float *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar12 = _InputArray::kind(param_1);
  if (iVar12 == 0x10000) {
    pMVar14 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar14;
    local_5c = *(int *)(pMVar14 + 4);
    local_58 = *(undefined4 *)(pMVar14 + 8);
    local_54 = *(undefined4 *)(pMVar14 + 0xc);
    local_50 = *(float **)(pMVar14 + 0x10);
    local_48 = *(undefined8 *)(pMVar14 + 0x18);
    local_40 = *(undefined8 *)(pMVar14 + 0x20);
    local_38 = *(undefined8 *)(pMVar14 + 0x28);
    local_30 = *(undefined8 *)(pMVar14 + 0x30);
    local_28 = *(long *)(pMVar14 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar5) {
          *piVar2 = *piVar2 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar14 + 0x48);
      local_8 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar14);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar12 = Mat::checkVector((Mat *)&local_60,2,-1,true);
  uVar3 = local_60 & 7;
  if ((iVar12 < 0) || (1 < uVar3 - 4)) {
    local_70 = 0;
    local_68 = 0;
    pcVar13 = (char *)String::allocate((String *)&local_70,0x34);
    uVar11 = s_npoints_>__0_____depth____CV_32F_0045c648._40_8_;
    uVar10 = s_npoints_>__0_____depth____CV_32F_0045c648._32_8_;
    uVar9 = s_npoints_>__0_____depth____CV_32F_0045c648._24_8_;
    uVar8 = s_npoints_>__0_____depth____CV_32F_0045c648._16_8_;
    uVar7 = s_npoints_>__0_____depth____CV_32F_0045c648._8_8_;
    uVar6 = s_npoints_>__0_____depth____CV_32F_0045c648._0_8_;
    *(undefined4 *)(pcVar13 + 0x30) = s_npoints_>__0_____depth____CV_32F_0045c648._48_4_;
    *(undefined8 *)pcVar13 = uVar6;
    *(undefined8 *)(pcVar13 + 8) = uVar7;
    *(undefined8 *)(pcVar13 + 0x10) = uVar8;
    *(undefined8 *)(pcVar13 + 0x18) = uVar9;
    *(undefined8 *)(pcVar13 + 0x20) = uVar10;
    *(undefined8 *)(pcVar13 + 0x28) = uVar11;
    error(-0xd7,(String *)&local_70,"double cv::contourArea(cv::InputArray, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x157);
    String::deallocate((String *)&local_70);
  }
  dVar22 = 0.0;
  if (iVar12 != 0) {
    if (uVar3 == 5) {
      fVar18 = local_50[(long)iVar12 * 2 + -1];
      if (0 < iVar12) {
        dVar22 = 0.0;
        pfVar16 = local_50;
        fVar21 = local_50[(long)iVar12 * 2 + -2];
        do {
          fVar20 = *pfVar16;
          pfVar1 = pfVar16 + 2;
          dVar19 = (double)fVar18;
          fVar18 = pfVar16[1];
          dVar22 = dVar22 + ((double)fVar21 * (double)fVar18 - dVar19 * (double)fVar20);
          pfVar16 = pfVar1;
          fVar21 = fVar20;
        } while (pfVar1 != local_50 + ((ulong)(iVar12 - 1) + 1) * 2);
        dVar22 = dVar22 * 0.5;
      }
    }
    else {
      fVar18 = local_50[(long)iVar12 * 2 + -1];
      if (0 < iVar12) {
        dVar22 = 0.0;
        pfVar16 = local_50;
        fVar21 = local_50[(long)iVar12 * 2 + -2];
        do {
          fVar20 = *pfVar16;
          pfVar1 = pfVar16 + 2;
          dVar19 = (double)(int)fVar18;
          fVar18 = pfVar16[1];
          dVar22 = dVar22 + ((double)(int)fVar21 * (double)(int)fVar18 -
                            dVar19 * (double)(int)fVar20);
          pfVar16 = pfVar1;
          fVar21 = fVar20;
        } while (pfVar1 != local_50 + ((ulong)(iVar12 - 1) + 1) * 2);
        dVar22 = dVar22 * 0.5;
      }
    }
    if (!param_2) {
      dVar22 = ABS(dVar22);
    }
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar12 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar12 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (float *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    puVar15 = local_20;
    do {
      *puVar15 = 0;
      iVar12 = iVar12 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  auVar17._8_8_ = 0;
  auVar17._0_8_ = dVar22;
  return auVar17;
}


==================================================================

### FUNC 001ebdd0 (7520 bytes) name=fitEllipse

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::fitEllipse(cv::_InputArray const&) */

void __thiscall cv::fitEllipse(cv *this,_InputArray *param_1)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  char cVar5;
  bool bVar6;
  undefined1 auVar7 [16];
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined4 uVar12;
  undefined2 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  float *pfVar16;
  int iVar17;
  uint uVar18;
  char *pcVar19;
  ulong uVar20;
  float *pfVar21;
  double *pdVar22;
  double *pdVar23;
  undefined8 *puVar24;
  Mat **ppMVar25;
  uint *puVar26;
  undefined4 *puVar27;
  Mat *pMVar28;
  float *pfVar29;
  double *pdVar30;
  uint uVar31;
  long lVar32;
  double *pdVar33;
  float *in_x8;
  ulong uVar34;
  double *pdVar35;
  float fVar36;
  double dVar37;
  double dVar38;
  float fVar40;
  float fVar41;
  float fVar42;
  undefined1 auVar39 [16];
  float fVar43;
  double dVar44;
  float fVar46;
  float fVar47;
  float fVar49;
  undefined1 auVar45 [16];
  double dVar48;
  float fVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  undefined1 auVar55 [16];
  float fVar56;
  undefined8 local_cd0;
  undefined8 local_cc8;
  undefined8 local_cc0;
  undefined8 local_cb8;
  double local_cb0;
  double local_ca8;
  double local_ca0;
  double local_c98;
  double local_c90;
  double local_c88;
  double local_c80;
  double local_c78;
  double local_c70;
  double local_c68;
  undefined4 local_c60;
  int local_c5c;
  uint local_c58;
  undefined4 local_c54;
  double *local_c50;
  double *pdStack_c48;
  double *local_c40;
  double *pdStack_c38;
  undefined8 local_c30;
  long lStack_c28;
  uint *local_c20;
  undefined8 *local_c18;
  undefined8 local_c10;
  undefined8 uStack_c08;
  undefined4 local_c00;
  int local_bfc;
  uint local_bf8;
  undefined4 local_bf4;
  double *local_bf0;
  double *pdStack_be8;
  double *local_be0;
  double *pdStack_bd8;
  undefined8 local_bd0;
  long lStack_bc8;
  uint *local_bc0;
  undefined8 *local_bb8;
  undefined8 local_bb0;
  undefined8 uStack_ba8;
  undefined8 local_ba0;
  Mat *pMStack_b98;
  double *local_b90;
  double *pdStack_b88;
  double *local_b80;
  double *pdStack_b78;
  undefined8 local_b70;
  long lStack_b68;
  Mat **local_b60;
  undefined8 *local_b58;
  undefined8 local_b50;
  undefined8 uStack_b48;
  undefined8 local_b40;
  undefined8 uStack_b38;
  double *local_b30;
  double *pdStack_b28;
  double *local_b20;
  double *pdStack_b18;
  undefined8 local_b10;
  long lStack_b08;
  undefined8 *local_b00;
  undefined8 *local_af8;
  undefined8 local_af0;
  undefined8 uStack_ae8;
  undefined8 local_ae0;
  undefined8 uStack_ad8;
  double *local_ad0;
  double *pdStack_ac8;
  double *local_ac0;
  double *pdStack_ab8;
  undefined8 local_ab0;
  long lStack_aa8;
  undefined8 *local_aa0;
  undefined8 *local_a98;
  undefined8 local_a90;
  undefined8 uStack_a88;
  undefined8 local_a80;
  Mat *pMStack_a78;
  double *local_a70;
  double *pdStack_a68;
  double *local_a60;
  double *pdStack_a58;
  undefined8 local_a50;
  long lStack_a48;
  Mat **local_a40;
  undefined8 *local_a38;
  undefined8 local_a30;
  undefined8 uStack_a28;
  undefined4 local_a20;
  int local_a1c;
  undefined8 local_a18;
  double *local_a10;
  double *pdStack_a08;
  double *local_a00;
  double *pdStack_9f8;
  undefined8 local_9f0;
  long lStack_9e8;
  undefined8 *local_9e0;
  undefined8 *local_9d8;
  undefined8 local_9d0;
  undefined8 local_9c8;
  undefined4 local_9c0;
  int local_9bc;
  undefined8 local_9b8;
  double *local_9b0;
  double *pdStack_9a8;
  double *local_9a0;
  double *pdStack_998;
  undefined8 local_990;
  long lStack_988;
  undefined8 *local_980;
  undefined8 *local_978;
  undefined8 local_970;
  undefined8 local_968;
  undefined8 local_960;
  Mat *pMStack_958;
  double *local_950;
  double *pdStack_948;
  double *local_940;
  double *pdStack_938;
  undefined8 local_930;
  long lStack_928;
  Mat **local_920;
  undefined8 *local_918;
  undefined8 local_910;
  undefined8 uStack_908;
  uint local_900;
  int local_8fc;
  undefined4 local_8f8;
  undefined4 local_8f4;
  float *local_8f0;
  undefined8 local_8e8;
  undefined8 local_8e0;
  undefined8 local_8d8;
  undefined8 local_8d0;
  long local_8c8;
  undefined4 *local_8c0;
  undefined8 *local_8b8;
  undefined8 local_8b0;
  undefined8 local_8a8;
  double *local_8a0;
  ulong local_898;
  double adStack_890 [136];
  double *local_450;
  ulong local_448;
  double adStack_440 [136];
  
  iVar17 = _InputArray::kind((_InputArray *)this);
  if (iVar17 == 0x10000) {
    pMVar28 = *(Mat **)(this + 8);
    local_8c0 = &local_8f8;
    local_8b8 = &local_8b0;
    local_900 = *(uint *)pMVar28;
    local_8fc = *(int *)(pMVar28 + 4);
    local_8f8 = *(undefined4 *)(pMVar28 + 8);
    local_8f4 = *(undefined4 *)(pMVar28 + 0xc);
    local_8f0 = *(float **)(pMVar28 + 0x10);
    local_8e8 = *(undefined8 *)(pMVar28 + 0x18);
    local_8e0 = *(undefined8 *)(pMVar28 + 0x20);
    local_8d8 = *(undefined8 *)(pMVar28 + 0x28);
    local_8d0 = *(undefined8 *)(pMVar28 + 0x30);
    local_8c8 = *(long *)(pMVar28 + 0x38);
    local_8a8 = 0;
    local_8b0 = 0;
    if (local_8c8 != 0) {
      piVar1 = (int *)(local_8c8 + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar28 + 4) < 3) {
      local_8b0 = **(undefined8 **)(pMVar28 + 0x48);
      local_8a8 = (*(undefined8 **)(pMVar28 + 0x48))[1];
    }
    else {
      local_8fc = 0;
      Mat::copySize((Mat *)&local_900,pMVar28);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  uVar18 = Mat::checkVector((Mat *)&local_900,2,-1,true);
  uVar2 = local_900 & 7;
  if (((int)uVar18 < 0) || (1 < uVar2 - 4)) {
    local_cd0 = 0;
    local_cc8 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_cd0,0x2e);
    uVar13 = s_n_>__0_____depth____CV_32F____de_0045c680._44_2_;
    uVar12 = s_n_>__0_____depth____CV_32F____de_0045c680._40_4_;
    uVar11 = s_n_>__0_____depth____CV_32F____de_0045c680._24_8_;
    uVar10 = s_n_>__0_____depth____CV_32F____de_0045c680._16_8_;
    uVar9 = s_n_>__0_____depth____CV_32F____de_0045c680._8_8_;
    uVar8 = s_n_>__0_____depth____CV_32F____de_0045c680._0_8_;
    *(undefined8 *)(pcVar19 + 0x20) = s_n_>__0_____depth____CV_32F____de_0045c680._32_8_;
    *(undefined4 *)(pcVar19 + 0x28) = uVar12;
    *(undefined2 *)(pcVar19 + 0x2c) = uVar13;
    *(undefined8 *)pcVar19 = uVar8;
    *(undefined8 *)(pcVar19 + 8) = uVar9;
    *(undefined8 *)(pcVar19 + 0x10) = uVar10;
    *(undefined8 *)(pcVar19 + 0x18) = uVar11;
    error(-0xd7,(String *)&local_cd0,"cv::RotatedRect cv::fitEllipse(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x176);
    String::deallocate((String *)&local_cd0);
  }
  *in_x8 = 0.0;
  in_x8[1] = 0.0;
  in_x8[2] = 0.0;
  in_x8[3] = 0.0;
  in_x8[4] = 0.0;
  if ((int)uVar18 < 5) {
    local_cc0 = 0;
    local_cb8 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_cc0,0x34);
    uVar15 = s_There_should_be_at_least_5_point_0045c6b0._40_8_;
    uVar14 = s_There_should_be_at_least_5_point_0045c6b0._32_8_;
    uVar11 = s_There_should_be_at_least_5_point_0045c6b0._24_8_;
    uVar10 = s_There_should_be_at_least_5_point_0045c6b0._16_8_;
    uVar9 = s_There_should_be_at_least_5_point_0045c6b0._8_8_;
    uVar8 = s_There_should_be_at_least_5_point_0045c6b0._0_8_;
    *(undefined4 *)(pcVar19 + 0x30) = s_There_should_be_at_least_5_point_0045c6b0._48_4_;
    *(undefined8 *)pcVar19 = uVar8;
    *(undefined8 *)(pcVar19 + 8) = uVar9;
    *(undefined8 *)(pcVar19 + 0x10) = uVar10;
    *(undefined8 *)(pcVar19 + 0x18) = uVar11;
    *(undefined8 *)(pcVar19 + 0x20) = uVar14;
    *(undefined8 *)(pcVar19 + 0x28) = uVar15;
    error(-0xc9,(String *)&local_cc0,"cv::RotatedRect cv::fitEllipse(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x17b);
    String::deallocate((String *)&local_cc0);
  }
  pfVar16 = local_8f0;
  local_8a0 = adStack_890;
  uVar34 = (ulong)(int)(uVar18 * 5);
  local_898 = 0x88;
  if (0x88 < uVar34) {
    uVar20 = uVar34 << 3;
    if (0xfe0000000000000 < uVar34) {
      uVar20 = 0xffffffffffffffff;
    }
    local_8a0 = operator_new__(uVar20);
  }
  uVar20 = (ulong)(int)uVar18;
  local_450 = adStack_440;
  local_448 = 0x88;
  local_898 = uVar34;
  if (0x88 < uVar20) {
    uVar34 = uVar20 << 3;
    if (0xfe0000000000000 < uVar20) {
      uVar34 = 0xffffffffffffffff;
    }
    local_450 = operator_new__(uVar34);
  }
  pdVar23 = local_450;
  pdVar35 = local_8a0;
  dVar38 = DAT_001edd40;
  local_c18 = &local_c10;
  local_bb8 = &local_bb0;
  pdVar33 = local_450 + uVar20;
  local_c40 = local_8a0 + uVar20 * 5;
  local_c20 = &local_c58;
  uStack_ba8 = _UNK_001edd28;
  local_bb0 = _DAT_001edd20;
  uStack_c08 = _UNK_001edd18;
  local_c10 = _DAT_001edd10;
  local_b58 = &local_b50;
  local_bf4 = 1;
  local_c54 = 5;
  local_bc0 = &local_bf8;
  local_c5c = 2;
  local_b80 = (double *)&local_c60;
  local_b60 = &pMStack_b98;
  local_c30 = 0;
  lStack_c28 = 0;
  local_c60 = 0x42ff4006;
  local_bfc = 2;
  local_bd0 = 0;
  lStack_bc8 = 0;
  local_c00 = 0x42ff4006;
  local_b70 = 0;
  uStack_b48 = _UNK_001edd28;
  local_b50 = _DAT_001edd20;
  lStack_b68 = 0;
  pMStack_b98 = _UNK_001edd38;
  local_ba0 = _DAT_001edd30;
  if ((int)uVar18 < 1) {
    fVar56 = 0.0 / (float)(int)uVar18;
    fVar50 = fVar56;
  }
  else {
    fVar56 = 0.0;
    if (uVar2 == 5) {
      fVar50 = 0.0;
      pfVar21 = pfVar16;
      do {
        pfVar29 = pfVar21 + 2;
        fVar56 = fVar56 + *pfVar21;
        fVar50 = fVar50 + pfVar21[1];
        pfVar21 = pfVar29;
      } while (pfVar29 != pfVar16 + ((ulong)(uVar18 - 1) + 1) * 2);
      fVar56 = fVar56 / (float)(int)uVar18;
      fVar50 = fVar50 / (float)(int)uVar18;
      pdVar22 = local_8a0;
      pfVar21 = pfVar16 + 1;
      pdVar30 = local_450;
      do {
        fVar36 = pfVar21[-1];
        pfVar29 = pfVar21 + 2;
        fVar40 = *pfVar21;
        *pdVar30 = dVar38;
        dVar37 = (double)(fVar36 - fVar56);
        dVar44 = (double)(fVar40 - fVar50);
        pdVar22[3] = dVar37;
        pdVar22[4] = dVar44;
        pdVar22[1] = -(dVar44 * dVar44);
        *pdVar22 = dVar37 * -dVar37;
        pdVar22[2] = -dVar37 * dVar44;
        pdVar22 = pdVar22 + 5;
        pfVar21 = pfVar29;
        pdVar30 = pdVar30 + 1;
      } while (pfVar29 != pfVar16 + (ulong)(uVar18 - 1) * 2 + 3);
    }
    else {
      pfVar21 = pfVar16;
      fVar50 = fVar56;
      do {
        pfVar29 = pfVar21 + 2;
        fVar56 = fVar56 + (float)(int)*pfVar21;
        fVar50 = fVar50 + (float)(int)pfVar21[1];
        pfVar21 = pfVar29;
      } while (pfVar29 != pfVar16 + ((ulong)(uVar18 - 1) + 1) * 2);
      fVar56 = fVar56 / (float)(int)uVar18;
      fVar50 = fVar50 / (float)(int)uVar18;
      pdVar22 = local_8a0;
      pfVar21 = pfVar16 + 1;
      pdVar30 = local_450;
      do {
        fVar36 = pfVar21[-1];
        pfVar29 = pfVar21 + 2;
        fVar40 = *pfVar21;
        *pdVar30 = dVar38;
        dVar37 = (double)((float)(int)fVar36 - fVar56);
        dVar44 = (double)((float)(int)fVar40 - fVar50);
        pdVar22[3] = dVar37;
        pdVar22[4] = dVar44;
        pdVar22[1] = -(dVar44 * dVar44);
        *pdVar22 = dVar37 * -dVar37;
        pdVar22[2] = -dVar37 * dVar44;
        pdVar22 = pdVar22 + 5;
        pfVar21 = pfVar29;
        pdVar30 = pdVar30 + 1;
      } while (pfVar29 != pfVar16 + (ulong)(uVar18 - 1) * 2 + 3);
    }
  }
  local_a20 = 0x1010000;
  local_9c0 = 0x1010000;
  local_a10 = (double *)0x0;
  local_9b0 = (double *)0x0;
  local_950 = (double *)0x0;
  local_960 = CONCAT44(local_960._4_4_,0x2010000);
  local_c58 = uVar18;
  local_c50 = pdVar35;
  pdStack_c48 = pdVar35;
  pdStack_c38 = local_c40;
  local_bf8 = uVar18;
  local_bf0 = local_450;
  pdStack_be8 = local_450;
  local_be0 = pdVar33;
  pdStack_bd8 = pdVar33;
  local_b90 = &local_c88;
  pdStack_b88 = &local_c88;
  pdStack_b78 = local_b80;
  local_a18 = (Mat *)&local_c60;
  local_9b8 = (Mat *)&local_c00;
  pMStack_958 = (Mat *)&local_ba0;
  local_448 = uVar20;
  solve((_InputArray *)&local_a20,(_InputArray *)&local_9c0,(_OutputArray *)&local_960,1);
  local_af8 = &local_af0;
  local_b20 = pdVar35 + 4;
  local_b00 = &uStack_b38;
  local_b10 = 0;
  uStack_b38 = _UNK_001edd58;
  local_b40 = _DAT_001edd50;
  lStack_b08 = 0;
  uStack_ae8 = _UNK_001edd68;
  local_af0 = _DAT_001edd60;
  local_b30 = pdVar35;
  pdStack_b28 = pdVar35;
  pdStack_b18 = local_b20;
  if (lStack_c28 != 0) {
    piVar1 = (int *)(lStack_c28 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c60);
    }
  }
  puVar24 = local_af8;
  lStack_c28 = 0;
  local_c50 = (double *)0x0;
  pdStack_c38 = (double *)0x0;
  local_c40 = (double *)0x0;
  pdStack_c48 = (double *)0x0;
  if (local_c5c < 1) {
LAB_001ec328:
    local_c60 = (undefined4)local_b40;
    if (2 < local_b40._4_4_) goto LAB_001ed404;
    local_c54 = uStack_b38._4_4_;
    local_c58 = (uint)uStack_b38;
    local_c5c = local_b40._4_4_;
    *local_c18 = *local_af8;
    local_c18[1] = puVar24[1];
  }
  else {
    iVar17 = 0;
    puVar26 = local_c20;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_c5c);
    if (local_c5c < 3) goto LAB_001ec328;
LAB_001ed404:
    local_c60 = (undefined4)local_b40;
    Mat::copySize((Mat *)&local_c60,(Mat *)&local_b40);
  }
  pdStack_c38 = pdStack_b18;
  local_c40 = local_b20;
  lStack_c28 = lStack_b08;
  local_c30 = local_b10;
  pdStack_c48 = pdStack_b28;
  local_c50 = local_b30;
  if (lStack_b08 != 0) {
    piVar1 = (int *)(lStack_b08 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_b40);
    }
  }
  lStack_b08 = 0;
  local_b30 = (double *)0x0;
  pdStack_b18 = (double *)0x0;
  local_b20 = (double *)0x0;
  pdStack_b28 = (double *)0x0;
  if (0 < local_b40._4_4_) {
    iVar17 = 0;
    puVar24 = local_b00;
    do {
      *(undefined4 *)puVar24 = 0;
      iVar17 = iVar17 + 1;
      puVar24 = (undefined8 *)((long)puVar24 + 4);
    } while (iVar17 < local_b40._4_4_);
  }
  if (local_af8 != &local_af0) {
    fastFree(local_af8);
  }
  local_a98 = &local_a90;
  local_aa0 = &uStack_ad8;
  uStack_ad8 = _UNK_001edd78;
  local_ae0 = _DAT_001edd70;
  local_ac0 = pdVar23 + 2;
  local_ab0 = 0;
  uStack_a88 = _UNK_001edd28;
  local_a90 = _DAT_001edd20;
  lStack_aa8 = 0;
  local_ad0 = pdVar23;
  pdStack_ac8 = pdVar23;
  pdStack_ab8 = local_ac0;
  if (lStack_bc8 != 0) {
    piVar1 = (int *)(lStack_bc8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c00);
    }
  }
  puVar24 = local_a98;
  lStack_bc8 = 0;
  local_bf0 = (double *)0x0;
  pdStack_bd8 = (double *)0x0;
  local_be0 = (double *)0x0;
  pdStack_be8 = (double *)0x0;
  if (local_bfc < 1) {
LAB_001ec4c0:
    local_c00 = (undefined4)local_ae0;
    if (2 < local_ae0._4_4_) goto LAB_001ed414;
    local_bf4 = uStack_ad8._4_4_;
    local_bf8 = (uint)uStack_ad8;
    local_bfc = local_ae0._4_4_;
    *local_bb8 = *local_a98;
    local_bb8[1] = puVar24[1];
  }
  else {
    iVar17 = 0;
    puVar26 = local_bc0;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_bfc);
    if (local_bfc < 3) goto LAB_001ec4c0;
LAB_001ed414:
    local_c00 = (undefined4)local_ae0;
    Mat::copySize((Mat *)&local_c00,(Mat *)&local_ae0);
  }
  pdStack_bd8 = pdStack_ab8;
  local_be0 = local_ac0;
  lStack_bc8 = lStack_aa8;
  local_bd0 = local_ab0;
  pdStack_be8 = pdStack_ac8;
  local_bf0 = local_ad0;
  if (lStack_aa8 != 0) {
    piVar1 = (int *)(lStack_aa8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_ae0);
    }
  }
  lStack_aa8 = 0;
  local_ad0 = (double *)0x0;
  pdStack_ab8 = (double *)0x0;
  local_ac0 = (double *)0x0;
  pdStack_ac8 = (double *)0x0;
  if (0 < local_ae0._4_4_) {
    iVar17 = 0;
    puVar24 = local_aa0;
    do {
      *(undefined4 *)puVar24 = 0;
      iVar17 = iVar17 + 1;
      puVar24 = (undefined8 *)((long)puVar24 + 4);
    } while (iVar17 < local_ae0._4_4_);
  }
  if (local_a98 != &local_a90) {
    fastFree(local_a98);
  }
  local_a38 = &local_a30;
  local_a60 = &local_ca0;
  local_a40 = &pMStack_a78;
  local_a50 = 0;
  pMStack_a78 = _UNK_001edd78;
  local_a80 = _DAT_001edd70;
  lStack_a48 = 0;
  uStack_a28 = _UNK_001edd28;
  local_a30 = _DAT_001edd20;
  local_a70 = &local_cb0;
  pdStack_a68 = &local_cb0;
  pdStack_a58 = local_a60;
  if (lStack_b68 != 0) {
    piVar1 = (int *)(lStack_b68 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_ba0);
    }
  }
  puVar24 = local_a38;
  lStack_b68 = 0;
  local_b90 = (double *)0x0;
  pdStack_b78 = (double *)0x0;
  local_b80 = (double *)0x0;
  pdStack_b88 = (double *)0x0;
  if (local_ba0._4_4_ < 1) {
LAB_001ec654:
    if (2 < local_a80._4_4_) goto LAB_001ed444;
    pMStack_b98 = pMStack_a78;
    local_ba0 = local_a80;
    *local_b58 = *local_a38;
    local_b58[1] = puVar24[1];
  }
  else {
    iVar17 = 0;
    ppMVar25 = local_b60;
    do {
      *(undefined4 *)ppMVar25 = 0;
      iVar17 = iVar17 + 1;
      ppMVar25 = (Mat **)((long)ppMVar25 + 4);
    } while (iVar17 < local_ba0._4_4_);
    if (local_ba0._4_4_ < 3) goto LAB_001ec654;
LAB_001ed444:
    local_ba0 = CONCAT44(local_ba0._4_4_,(undefined4)local_a80);
    Mat::copySize((Mat *)&local_ba0,(Mat *)&local_a80);
  }
  pdStack_b78 = pdStack_a58;
  local_b80 = local_a60;
  lStack_b68 = lStack_a48;
  local_b70 = local_a50;
  pdStack_b88 = pdStack_a68;
  local_b90 = local_a70;
  if (lStack_a48 != 0) {
    piVar1 = (int *)(lStack_a48 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_a80);
    }
  }
  lStack_a48 = 0;
  local_a70 = (double *)0x0;
  pdStack_a58 = (double *)0x0;
  local_a60 = (double *)0x0;
  pdStack_a68 = (double *)0x0;
  if (0 < local_a80._4_4_) {
    iVar17 = 0;
    ppMVar25 = local_a40;
    do {
      *(undefined4 *)ppMVar25 = 0;
      iVar17 = iVar17 + 1;
      ppMVar25 = (Mat **)((long)ppMVar25 + 4);
    } while (iVar17 < local_a80._4_4_);
  }
  if (local_a38 != &local_a30) {
    fastFree(local_a38);
  }
  *pdVar35 = local_c88 + local_c88;
  pdVar35[2] = local_c78;
  pdVar35[1] = local_c78;
  pdVar35[3] = local_c80 + local_c80;
  *pdVar23 = local_c70;
  pdVar23[1] = local_c68;
  local_a20 = 0x1010000;
  local_9c0 = 0x1010000;
  local_a10 = (double *)0x0;
  local_9b0 = (double *)0x0;
  local_950 = (double *)0x0;
  local_960 = CONCAT44(local_960._4_4_,0x2010000);
  local_a18 = (Mat *)&local_c60;
  local_9b8 = (Mat *)&local_c00;
  pMStack_958 = (Mat *)&local_ba0;
  solve((_InputArray *)&local_a20,(_InputArray *)&local_9c0,(_OutputArray *)&local_960,1);
  local_a20 = 0x42ff4006;
  local_9e0 = &local_a18;
  local_9d8 = &local_9d0;
  local_a1c = 2;
  local_a00 = pdVar35 + uVar20 * 3;
  local_9d0 = 0x18;
  local_a18._4_4_ = 3;
  local_9f0 = 0;
  lStack_9e8 = 0;
  local_9c8 = 8;
  local_a10 = pdVar35;
  pdStack_a08 = pdVar35;
  pdStack_9f8 = local_a00;
  local_a18._0_4_ = uVar18;
  if (lStack_c28 != 0) {
    piVar1 = (int *)(lStack_c28 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c60);
    }
  }
  puVar24 = local_9d8;
  lStack_c28 = 0;
  local_c50 = (double *)0x0;
  pdStack_c38 = (double *)0x0;
  local_c40 = (double *)0x0;
  pdStack_c48 = (double *)0x0;
  if (local_c5c < 1) {
LAB_001ec88c:
    local_c60 = local_a20;
    if (2 < local_a1c) goto LAB_001ed434;
    local_c54 = local_a18._4_4_;
    local_c58 = (uint)local_a18;
    local_c5c = local_a1c;
    *local_c18 = *local_9d8;
    local_c18[1] = puVar24[1];
  }
  else {
    iVar17 = 0;
    puVar26 = local_c20;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_c5c);
    if (local_c5c < 3) goto LAB_001ec88c;
LAB_001ed434:
    local_c60 = local_a20;
    Mat::copySize((Mat *)&local_c60,(Mat *)&local_a20);
  }
  pdStack_c38 = pdStack_9f8;
  local_c40 = local_a00;
  lStack_c28 = lStack_9e8;
  local_c30 = local_9f0;
  pdStack_c48 = pdStack_a08;
  local_c50 = local_a10;
  if (lStack_9e8 != 0) {
    piVar1 = (int *)(lStack_9e8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_a20);
    }
  }
  lStack_9e8 = 0;
  local_a10 = (double *)0x0;
  pdStack_9f8 = (double *)0x0;
  local_a00 = (double *)0x0;
  pdStack_a08 = (double *)0x0;
  if (0 < local_a1c) {
    iVar17 = 0;
    puVar24 = local_9e0;
    do {
      *(undefined4 *)puVar24 = 0;
      iVar17 = iVar17 + 1;
      puVar24 = (undefined8 *)((long)puVar24 + 4);
    } while (iVar17 < local_a1c);
  }
  if (local_9d8 != &local_9d0) {
    fastFree(local_9d8);
  }
  local_980 = &local_9b8;
  local_970 = 8;
  local_978 = &local_970;
  local_968 = 8;
  local_9bc = 2;
  local_9b8._4_4_ = 1;
  local_990 = 0;
  lStack_988 = 0;
  local_9c0 = 0x42ff4006;
  local_9b0 = pdVar23;
  pdStack_9a8 = pdVar23;
  local_9a0 = pdVar33;
  pdStack_998 = pdVar33;
  local_9b8._0_4_ = uVar18;
  if (lStack_bc8 != 0) {
    piVar1 = (int *)(lStack_bc8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c00);
    }
  }
  puVar24 = local_978;
  lStack_bc8 = 0;
  local_bf0 = (double *)0x0;
  pdStack_bd8 = (double *)0x0;
  local_be0 = (double *)0x0;
  pdStack_be8 = (double *)0x0;
  if (local_bfc < 1) {
LAB_001eca30:
    local_c00 = local_9c0;
    if (2 < local_9bc) goto LAB_001ed424;
    local_bf4 = local_9b8._4_4_;
    local_bf8 = (uint)local_9b8;
    local_bfc = local_9bc;
    *local_bb8 = *local_978;
    local_bb8[1] = puVar24[1];
  }
  else {
    iVar17 = 0;
    puVar26 = local_bc0;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_bfc);
    if (local_bfc < 3) goto LAB_001eca30;
LAB_001ed424:
    local_c00 = local_9c0;
    Mat::copySize((Mat *)&local_c00,(Mat *)&local_9c0);
  }
  pdStack_bd8 = pdStack_998;
  local_be0 = local_9a0;
  lStack_bc8 = lStack_988;
  local_bd0 = local_990;
  pdStack_be8 = pdStack_9a8;
  local_bf0 = local_9b0;
  if (lStack_988 != 0) {
    piVar1 = (int *)(lStack_988 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_9c0);
    }
  }
  lStack_988 = 0;
  local_9b0 = (double *)0x0;
  pdStack_998 = (double *)0x0;
  local_9a0 = (double *)0x0;
  pdStack_9a8 = (double *)0x0;
  if (0 < local_9bc) {
    iVar17 = 0;
    puVar24 = local_980;
    do {
      *(undefined4 *)puVar24 = 0;
      iVar17 = iVar17 + 1;
      puVar24 = (undefined8 *)((long)puVar24 + 4);
    } while (iVar17 < local_9bc);
  }
  if (local_978 != &local_970) {
    fastFree(local_978);
  }
  local_918 = &local_910;
  local_920 = &pMStack_958;
  local_940 = &local_c70;
  uStack_908 = _UNK_001edd28;
  local_910 = _DAT_001edd20;
  local_930 = 0;
  lStack_928 = 0;
  pMStack_958 = _UNK_001edd88;
  local_960 = _DAT_001edd80;
  local_950 = &local_c88;
  pdStack_948 = &local_c88;
  pdStack_938 = local_940;
  if (lStack_b68 != 0) {
    piVar1 = (int *)(lStack_b68 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_ba0);
    }
  }
  puVar24 = local_918;
  lStack_b68 = 0;
  local_b90 = (double *)0x0;
  pdStack_b78 = (double *)0x0;
  local_b80 = (double *)0x0;
  pdStack_b88 = (double *)0x0;
  if (local_ba0._4_4_ < 1) {
LAB_001ecbc4:
    if (local_960._4_4_ < 3) {
      pMStack_b98 = pMStack_958;
      local_ba0 = local_960;
      *local_b58 = *local_918;
      local_b58[1] = puVar24[1];
      goto LAB_001ecbfc;
    }
  }
  else {
    iVar17 = 0;
    ppMVar25 = local_b60;
    do {
      *(undefined4 *)ppMVar25 = 0;
      iVar17 = iVar17 + 1;
      ppMVar25 = (Mat **)((long)ppMVar25 + 4);
    } while (iVar17 < local_ba0._4_4_);
    if (local_ba0._4_4_ < 3) goto LAB_001ecbc4;
  }
  local_ba0 = CONCAT44(local_ba0._4_4_,(undefined4)local_960);
  Mat::copySize((Mat *)&local_ba0,(Mat *)&local_960);
LAB_001ecbfc:
  pdStack_b78 = pdStack_938;
  local_b80 = local_940;
  lStack_b68 = lStack_928;
  local_b70 = local_930;
  pdStack_b88 = pdStack_948;
  local_b90 = local_950;
  if (lStack_928 != 0) {
    piVar1 = (int *)(lStack_928 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_960);
    }
  }
  lStack_928 = 0;
  local_950 = (double *)0x0;
  pdStack_938 = (double *)0x0;
  local_940 = (double *)0x0;
  pdStack_948 = (double *)0x0;
  if (0 < local_960._4_4_) {
    iVar17 = 0;
    ppMVar25 = local_920;
    do {
      *(undefined4 *)ppMVar25 = 0;
      iVar17 = iVar17 + 1;
      ppMVar25 = (Mat **)((long)ppMVar25 + 4);
    } while (iVar17 < local_960._4_4_);
  }
  if (local_918 != &local_910) {
    fastFree(local_918);
  }
  if (0 < (int)uVar18) {
    if (uVar2 == 5) {
      if (((uVar18 < 5 || &local_cb0 < pdVar35 + uVar20 * 3 && pdVar35 < &local_ca0) ||
           &local_cb0 < pdVar23 + uVar20 && pdVar23 < &local_ca0) ||
         (pdVar35 < pdVar23 + uVar20 && pdVar23 < pdVar35 + uVar20 * 3)) {
        pfVar21 = pfVar16 + 1;
        do {
          fVar36 = pfVar21[-1];
          pfVar29 = pfVar21 + 2;
          fVar40 = *pfVar21;
          *pdVar23 = 1.0;
          dVar38 = (double)(fVar36 - fVar56) - local_cb0;
          *pdVar35 = dVar38 * dVar38;
          dVar38 = (double)(fVar40 - fVar50) - local_ca8;
          pdVar35[1] = dVar38 * dVar38;
          pdVar35[2] = ((double)(fVar36 - fVar56) - local_cb0) *
                       ((double)(fVar40 - fVar50) - local_ca8);
          pdVar23 = pdVar23 + 1;
          pfVar21 = pfVar29;
          pdVar35 = pdVar35 + 3;
        } while (pfVar29 != pfVar16 + (ulong)(uVar18 - 1) * 2 + 3);
      }
      else {
        uVar2 = (uVar18 - 4 >> 2) + 1;
        auVar55 = NEON_fmov(0x3ff0000000000000,8);
        uVar31 = 0;
        uVar4 = uVar2 * 4;
        pdVar33 = pdVar35;
        pdVar22 = pdVar23;
        pfVar21 = pfVar16;
        do {
          fVar36 = *pfVar21;
          fVar43 = pfVar21[1];
          fVar40 = pfVar21[2];
          fVar46 = pfVar21[3];
          fVar41 = pfVar21[4];
          fVar47 = pfVar21[5];
          fVar42 = pfVar21[6];
          fVar49 = pfVar21[7];
          pfVar21 = pfVar21 + 8;
          uVar31 = uVar31 + 1;
          pdVar22[1] = auVar55._8_8_;
          *pdVar22 = auVar55._0_8_;
          pdVar22[3] = auVar55._8_8_;
          pdVar22[2] = auVar55._0_8_;
          dVar53 = (double)(fVar36 - fVar56) - local_cb0;
          dVar54 = (double)(fVar40 - fVar56) - local_cb0;
          dVar44 = (double)(fVar41 - fVar56) - local_cb0;
          dVar48 = (double)(fVar42 - fVar56) - local_cb0;
          dVar51 = (double)(fVar43 - fVar50) - local_ca8;
          dVar52 = (double)(fVar46 - fVar50) - local_ca8;
          dVar38 = (double)(fVar47 - fVar50) - local_ca8;
          dVar37 = (double)(fVar49 - fVar50) - local_ca8;
          *pdVar33 = dVar53 * dVar53;
          pdVar33[1] = dVar51 * dVar51;
          pdVar33[2] = dVar53 * dVar51;
          pdVar33[3] = dVar54 * dVar54;
          pdVar33[4] = dVar52 * dVar52;
          pdVar33[5] = dVar54 * dVar52;
          pdVar33[6] = dVar44 * dVar44;
          pdVar33[7] = dVar38 * dVar38;
          pdVar33[8] = dVar44 * dVar38;
          pdVar33[9] = dVar48 * dVar48;
          pdVar33[10] = dVar37 * dVar37;
          pdVar33[0xb] = dVar48 * dVar37;
          pdVar33 = pdVar33 + 0xc;
          pdVar22 = pdVar22 + 4;
        } while (uVar31 < uVar2);
        if (uVar4 != uVar18) {
          uVar34 = -(ulong)((uVar2 & 0x3fffffff) >> 0x1d) & 0xfffffff800000000 | (ulong)uVar4 << 3;
          fVar36 = *(float *)((long)pfVar16 + uVar34);
          lVar32 = (long)(int)(uVar2 * 0xc);
          fVar40 = *(float *)((long)pfVar16 + uVar34 + 4);
          *(undefined8 *)((long)pdVar23 + uVar34) = 0x3ff0000000000000;
          dVar38 = (double)(fVar36 - fVar56);
          dVar44 = dVar38 - local_cb0;
          dVar37 = (double)(fVar40 - fVar50);
          pdVar35[lVar32] = dVar44 * dVar44;
          dVar44 = dVar37 - local_ca8;
          pdVar35[lVar32 + 1] = dVar44 * dVar44;
          pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
          if ((int)(uVar4 + 1) < (int)uVar18) {
            fVar36 = *(float *)((long)pfVar16 + uVar34 + 8);
            lVar32 = (long)(int)((uVar4 + 1) * 3);
            fVar40 = *(float *)((long)pfVar16 + uVar34 + 0xc);
            *(undefined8 *)((long)pdVar23 + uVar34 + 8) = 0x3ff0000000000000;
            dVar38 = (double)(fVar36 - fVar56);
            dVar37 = (double)(fVar40 - fVar50);
            dVar44 = dVar38 - local_cb0;
            pdVar35[lVar32] = dVar44 * dVar44;
            dVar44 = dVar37 - local_ca8;
            pdVar35[lVar32 + 1] = dVar44 * dVar44;
            pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
            if ((int)(uVar4 + 2) < (int)uVar18) {
              fVar36 = *(float *)((long)pfVar16 + uVar34 + 0x10);
              lVar32 = (long)(int)((uVar4 + 2) * 3);
              fVar40 = *(float *)((long)pfVar16 + uVar34 + 0x14);
              *(undefined8 *)((long)pdVar23 + uVar34 + 0x10) = 0x3ff0000000000000;
              dVar38 = (double)(fVar36 - fVar56);
              dVar44 = dVar38 - local_cb0;
              dVar37 = (double)(fVar40 - fVar50);
              pdVar35[lVar32] = dVar44 * dVar44;
              dVar44 = dVar37 - local_ca8;
              pdVar35[lVar32 + 1] = dVar44 * dVar44;
              pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
            }
          }
        }
      }
    }
    else if (((uVar18 < 5 || &local_cb0 < pdVar35 + uVar20 * 3 && pdVar35 < &local_ca0) ||
              &local_cb0 < pdVar23 + uVar20 && pdVar23 < &local_ca0) ||
            (pdVar35 < pdVar23 + uVar20 && pdVar23 < pdVar35 + uVar20 * 3)) {
      pfVar21 = pfVar16 + 1;
      do {
        fVar36 = pfVar21[-1];
        pfVar29 = pfVar21 + 2;
        fVar40 = *pfVar21;
        *pdVar23 = 1.0;
        dVar38 = (double)((float)(int)fVar36 - fVar56) - local_cb0;
        *pdVar35 = dVar38 * dVar38;
        dVar38 = (double)((float)(int)fVar40 - fVar50) - local_ca8;
        pdVar35[1] = dVar38 * dVar38;
        pdVar35[2] = ((double)((float)(int)fVar36 - fVar56) - local_cb0) *
                     ((double)((float)(int)fVar40 - fVar50) - local_ca8);
        pdVar23 = pdVar23 + 1;
        pfVar21 = pfVar29;
        pdVar35 = pdVar35 + 3;
      } while (pfVar29 != pfVar16 + (ulong)(uVar18 - 1) * 2 + 3);
    }
    else {
      uVar2 = (uVar18 - 4 >> 2) + 1;
      auVar55 = NEON_fmov(0x3ff0000000000000,8);
      uVar31 = 0;
      uVar4 = uVar2 * 4;
      pdVar33 = pdVar23;
      pdVar22 = pdVar35;
      pfVar21 = pfVar16;
      do {
        fVar36 = *pfVar21;
        fVar43 = pfVar21[1];
        fVar40 = pfVar21[2];
        fVar46 = pfVar21[3];
        fVar41 = pfVar21[4];
        fVar47 = pfVar21[5];
        fVar42 = pfVar21[6];
        fVar49 = pfVar21[7];
        pfVar21 = pfVar21 + 8;
        uVar31 = uVar31 + 1;
        pdVar33[1] = auVar55._8_8_;
        *pdVar33 = auVar55._0_8_;
        pdVar33[3] = auVar55._8_8_;
        pdVar33[2] = auVar55._0_8_;
        auVar39[4] = SUB41(fVar40,0);
        auVar39._0_4_ = fVar36;
        auVar39[5] = (char)((uint)fVar40 >> 8);
        auVar39[6] = (char)((uint)fVar40 >> 0x10);
        auVar39[7] = (char)((uint)fVar40 >> 0x18);
        auVar39[8] = SUB41(fVar41,0);
        auVar39[9] = (char)((uint)fVar41 >> 8);
        auVar39[10] = (char)((uint)fVar41 >> 0x10);
        auVar39[0xb] = (char)((uint)fVar41 >> 0x18);
        auVar39[0xc] = SUB41(fVar42,0);
        auVar39[0xd] = (char)((uint)fVar42 >> 8);
        auVar39[0xe] = (char)((uint)fVar42 >> 0x10);
        auVar39[0xf] = (char)((uint)fVar42 >> 0x18);
        auVar45 = NEON_scvtf(auVar39,4);
        auVar7[4] = SUB41(fVar46,0);
        auVar7._0_4_ = fVar43;
        auVar7[5] = (char)((uint)fVar46 >> 8);
        auVar7[6] = (char)((uint)fVar46 >> 0x10);
        auVar7[7] = (char)((uint)fVar46 >> 0x18);
        auVar7[8] = SUB41(fVar47,0);
        auVar7[9] = (char)((uint)fVar47 >> 8);
        auVar7[10] = (char)((uint)fVar47 >> 0x10);
        auVar7[0xb] = (char)((uint)fVar47 >> 0x18);
        auVar7[0xc] = SUB41(fVar49,0);
        auVar7[0xd] = (char)((uint)fVar49 >> 8);
        auVar7[0xe] = (char)((uint)fVar49 >> 0x10);
        auVar7[0xf] = (char)((uint)fVar49 >> 0x18);
        auVar39 = NEON_scvtf(auVar7,4);
        dVar53 = (double)(auVar45._0_4_ - fVar56) - local_cb0;
        dVar54 = (double)(auVar45._4_4_ - fVar56) - local_cb0;
        dVar44 = (double)(auVar45._8_4_ - fVar56) - local_cb0;
        dVar48 = (double)(auVar45._12_4_ - fVar56) - local_cb0;
        dVar51 = (double)(auVar39._0_4_ - fVar50) - local_ca8;
        dVar52 = (double)(auVar39._4_4_ - fVar50) - local_ca8;
        dVar38 = (double)(auVar39._8_4_ - fVar50) - local_ca8;
        dVar37 = (double)(auVar39._12_4_ - fVar50) - local_ca8;
        *pdVar22 = dVar53 * dVar53;
        pdVar22[1] = dVar51 * dVar51;
        pdVar22[2] = dVar53 * dVar51;
        pdVar22[3] = dVar54 * dVar54;
        pdVar22[4] = dVar52 * dVar52;
        pdVar22[5] = dVar54 * dVar52;
        pdVar22[6] = dVar44 * dVar44;
        pdVar22[7] = dVar38 * dVar38;
        pdVar22[8] = dVar44 * dVar38;
        pdVar22[9] = dVar48 * dVar48;
        pdVar22[10] = dVar37 * dVar37;
        pdVar22[0xb] = dVar48 * dVar37;
        pdVar33 = pdVar33 + 4;
        pdVar22 = pdVar22 + 0xc;
      } while (uVar31 < uVar2);
      if (uVar4 != uVar18) {
        uVar34 = -(ulong)((uVar2 & 0x3fffffff) >> 0x1d) & 0xfffffff800000000 | (ulong)uVar4 << 3;
        iVar3 = *(int *)((long)pfVar16 + uVar34);
        lVar32 = (long)(int)(uVar2 * 0xc);
        iVar17 = *(int *)((long)pfVar16 + uVar34 + 4);
        *(undefined8 *)((long)pdVar23 + uVar34) = 0x3ff0000000000000;
        dVar38 = (double)((float)iVar3 - fVar56);
        dVar37 = (double)((float)iVar17 - fVar50);
        dVar44 = dVar38 - local_cb0;
        pdVar35[lVar32] = dVar44 * dVar44;
        dVar44 = dVar37 - local_ca8;
        pdVar35[lVar32 + 1] = dVar44 * dVar44;
        pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
        if ((int)(uVar4 + 1) < (int)uVar18) {
          lVar32 = (long)(int)((uVar4 + 1) * 3);
          iVar3 = *(int *)((long)pfVar16 + uVar34 + 8);
          iVar17 = *(int *)((long)pfVar16 + uVar34 + 0xc);
          *(undefined8 *)((long)pdVar23 + uVar34 + 8) = 0x3ff0000000000000;
          dVar38 = (double)((float)iVar3 - fVar56);
          dVar37 = (double)((float)iVar17 - fVar50);
          dVar44 = dVar38 - local_cb0;
          pdVar35[lVar32] = dVar44 * dVar44;
          dVar44 = dVar37 - local_ca8;
          pdVar35[lVar32 + 1] = dVar44 * dVar44;
          pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
          if ((int)(uVar4 + 2) < (int)uVar18) {
            iVar3 = *(int *)((long)pfVar16 + uVar34 + 0x10);
            lVar32 = (long)(int)((uVar4 + 2) * 3);
            iVar17 = *(int *)((long)pfVar16 + uVar34 + 0x14);
            *(undefined8 *)((long)pdVar23 + uVar34 + 0x10) = 0x3ff0000000000000;
            dVar38 = (double)((float)iVar3 - fVar56);
            dVar37 = (double)((float)iVar17 - fVar50);
            dVar44 = dVar38 - local_cb0;
            pdVar35[lVar32] = dVar44 * dVar44;
            dVar44 = dVar37 - local_ca8;
            pdVar35[lVar32 + 1] = dVar44 * dVar44;
            pdVar35[lVar32 + 2] = (dVar38 - local_cb0) * (dVar37 - local_ca8);
          }
        }
      }
    }
  }
  local_a20 = 0x1010000;
  local_9c0 = 0x1010000;
  local_a10 = (double *)0x0;
  local_9b0 = (double *)0x0;
  local_950 = (double *)0x0;
  local_960 = CONCAT44(local_960._4_4_,0x2010000);
  local_a18 = (Mat *)&local_c60;
  local_9b8 = (Mat *)&local_c00;
  pMStack_958 = (Mat *)&local_ba0;
  solve((_InputArray *)&local_a20,(_InputArray *)&local_9c0,(_OutputArray *)&local_960,1);
  local_c90 = atan2(local_c78,local_c80 - local_c88);
  dVar38 = DAT_001edd90;
  local_c90 = local_c90 * -0.5;
  if (ABS(local_c78) <= DAT_001edd90) {
    local_c78 = local_c80 - local_c88;
    dVar37 = local_c80 + local_c88;
    local_ca0 = dVar37 - local_c78;
  }
  else {
    dVar37 = sin(local_c90 * -2.0);
    local_c78 = local_c78 / dVar37;
    dVar37 = local_c80 + local_c88;
    local_ca0 = dVar37 - local_c78;
  }
  local_ca0 = ABS(local_ca0);
  if (dVar38 < local_ca0) {
    dVar44 = SQRT(2.0 / local_ca0);
    if (NAN(dVar44)) {
      dVar44 = ::sqrt(2.0 / local_ca0);
    }
    dVar37 = local_c88 + local_c80;
    local_ca0 = dVar44;
  }
  local_c98 = ABS(local_c78 + dVar37);
  dVar37 = local_c98;
  if (dVar38 < local_c98) {
    dVar37 = SQRT(2.0 / local_c98);
    if (NAN(dVar37)) {
      dVar37 = ::sqrt(2.0 / local_c98);
    }
  }
  local_c98 = dVar37;
  fVar36 = (float)(local_ca0 + local_ca0);
  fVar40 = (float)(local_c98 + local_c98);
  in_x8[2] = fVar36;
  *in_x8 = fVar56 + (float)local_cb0;
  in_x8[1] = fVar50 + (float)local_ca8;
  in_x8[3] = fVar40;
  if (fVar40 < fVar36) {
    dVar37 = local_c90 * DAT_001edd98;
    in_x8[3] = fVar36;
    dVar38 = DAT_001edda0;
    in_x8[2] = fVar40;
    fVar50 = (float)(dVar37 / dVar38 + DAT_001edda8);
    in_x8[4] = fVar50;
  }
  else {
    fVar50 = in_x8[4];
  }
  fVar56 = DAT_001eddb4;
  if (fVar50 < DAT_001eddb0) {
    fVar50 = fVar50 + DAT_001eddb4;
    in_x8[4] = fVar50;
  }
  if (fVar56 < fVar50) {
    in_x8[4] = fVar50 - fVar56;
  }
  if (lStack_b68 != 0) {
    piVar1 = (int *)(lStack_b68 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_ba0);
    }
  }
  lStack_b68 = 0;
  local_b90 = (double *)0x0;
  pdStack_b78 = (double *)0x0;
  local_b80 = (double *)0x0;
  pdStack_b88 = (double *)0x0;
  if (0 < local_ba0._4_4_) {
    iVar17 = 0;
    ppMVar25 = local_b60;
    do {
      *(undefined4 *)ppMVar25 = 0;
      iVar17 = iVar17 + 1;
      ppMVar25 = (Mat **)((long)ppMVar25 + 4);
    } while (iVar17 < local_ba0._4_4_);
  }
  if (local_b58 != &local_b50) {
    fastFree(local_b58);
  }
  if (lStack_bc8 != 0) {
    piVar1 = (int *)(lStack_bc8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c00);
    }
  }
  lStack_bc8 = 0;
  local_bf0 = (double *)0x0;
  pdStack_bd8 = (double *)0x0;
  local_be0 = (double *)0x0;
  pdStack_be8 = (double *)0x0;
  if (0 < local_bfc) {
    iVar17 = 0;
    puVar26 = local_bc0;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_bfc);
  }
  if (local_bb8 != &local_bb0) {
    fastFree(local_bb8);
  }
  if (lStack_c28 != 0) {
    piVar1 = (int *)(lStack_c28 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c60);
    }
  }
  lStack_c28 = 0;
  local_c50 = (double *)0x0;
  pdStack_c38 = (double *)0x0;
  local_c40 = (double *)0x0;
  pdStack_c48 = (double *)0x0;
  if (0 < local_c5c) {
    iVar17 = 0;
    puVar26 = local_c20;
    do {
      *puVar26 = 0;
      iVar17 = iVar17 + 1;
      puVar26 = puVar26 + 1;
    } while (iVar17 < local_c5c);
  }
  if (local_c18 != &local_c10) {
    fastFree(local_c18);
  }
  if ((local_450 != adStack_440) && (local_450 != (double *)0x0)) {
    operator_delete__(local_450);
  }
  if ((local_8a0 != adStack_890) && (local_8a0 != (double *)0x0)) {
    operator_delete__(local_8a0);
  }
  if (local_8c8 != 0) {
    piVar1 = (int *)(local_8c8 + 0x14);
    do {
      iVar17 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar17 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_900);
    }
  }
  local_8c8 = 0;
  local_8f0 = (float *)0x0;
  local_8d8 = 0;
  local_8e0 = 0;
  local_8e8 = 0;
  if (0 < local_8fc) {
    iVar17 = 0;
    puVar27 = local_8c0;
    do {
      *puVar27 = 0;
      iVar17 = iVar17 + 1;
      puVar27 = puVar27 + 1;
    } while (iVar17 < local_8fc);
  }
  if (local_8b8 != &local_8b0) {
    fastFree(local_8b8);
  }
  return;
}


==================================================================

### FUNC 001eddc0 (2672 bytes) name=boundingRect

/* cv::boundingRect(cv::_InputArray const&) */

void __thiscall cv::boundingRect(cv *this,_InputArray *param_1)

{
  char cVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  uint uVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined2 uVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  char *pcVar26;
  ulong uVar27;
  int iVar28;
  Mat *pMVar29;
  uint *puVar30;
  int *piVar31;
  uint *puVar32;
  long lVar33;
  long lVar34;
  int iVar35;
  int iVar36;
  uint uVar37;
  uint uVar38;
  uint uVar39;
  ulong uVar40;
  int *piVar41;
  undefined8 *in_x8;
  int iVar42;
  int iVar43;
  uint uVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  uint uVar47;
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  uint uVar50;
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  uint uVar53;
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  byte bVar56;
  byte bVar57;
  byte bVar58;
  byte bVar59;
  byte bVar60;
  undefined1 uVar61;
  byte bVar62;
  undefined1 uVar63;
  byte bVar64;
  undefined1 uVar65;
  byte bVar66;
  byte bVar67;
  undefined1 uVar68;
  byte bVar69;
  undefined1 uVar70;
  byte bVar71;
  undefined1 uVar72;
  byte bVar73;
  byte bVar74;
  undefined1 uVar75;
  byte bVar76;
  undefined1 uVar77;
  byte bVar78;
  undefined1 uVar79;
  byte bVar80;
  byte bVar81;
  byte bVar82;
  byte bVar83;
  byte bVar84;
  byte bVar85;
  undefined1 uVar86;
  byte bVar87;
  undefined1 uVar88;
  byte bVar89;
  undefined1 uVar90;
  byte bVar91;
  byte bVar92;
  undefined1 uVar93;
  byte bVar94;
  undefined1 uVar95;
  byte bVar96;
  undefined1 uVar97;
  byte bVar98;
  byte bVar99;
  undefined1 uVar100;
  byte bVar101;
  undefined1 uVar102;
  byte bVar103;
  undefined1 uVar104;
  byte bVar105;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  uint *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  iVar23 = _InputArray::kind((_InputArray *)this);
  if (iVar23 == 0x10000) {
    pMVar29 = *(Mat **)(this + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar29;
    local_5c = *(int *)(pMVar29 + 4);
    local_58 = *(int *)(pMVar29 + 8);
    local_54 = *(undefined4 *)(pMVar29 + 0xc);
    local_50 = *(uint **)(pMVar29 + 0x10);
    local_48 = *(undefined8 *)(pMVar29 + 0x18);
    local_40 = *(undefined8 *)(pMVar29 + 0x20);
    local_38 = *(undefined8 *)(pMVar29 + 0x28);
    local_30 = *(undefined8 *)(pMVar29 + 0x30);
    local_28 = *(long *)(pMVar29 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar41 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar41,0x10);
        if (bVar2) {
          *piVar41 = *piVar41 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar29 + 4) < 3) {
      local_10 = **(long **)(pMVar29 + 0x48);
      local_8 = (*(long **)(pMVar29 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar29);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  if ((local_60 & 7) == 0) {
    uVar47 = local_60 & 7;
    if ((local_60 >> 3 & 0x1ff) != 0) {
      local_80 = 0;
      local_78 = 0;
      pcVar26 = (char *)String::allocate((String *)&local_80,0x2b);
      cVar1 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8[0x2a];
      uVar22 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._40_2_;
      uVar19 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._24_8_;
      uVar18 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._16_8_;
      uVar17 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._8_8_;
      uVar16 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._0_8_;
      *(undefined8 *)(pcVar26 + 0x20) = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._32_8_;
      *(undefined2 *)(pcVar26 + 0x28) = uVar22;
      pcVar26[0x2a] = cVar1;
      *(undefined8 *)pcVar26 = uVar16;
      *(undefined8 *)(pcVar26 + 8) = uVar17;
      *(undefined8 *)(pcVar26 + 0x10) = uVar18;
      *(undefined8 *)(pcVar26 + 0x18) = uVar19;
      error(-0xd7,(String *)&local_80,"cv::Rect cv::maskBoundingRect(const cv::Mat&)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x25d);
      String::deallocate((String *)&local_80);
    }
    iVar23 = local_20[1];
    if (*local_20 < 1) {
      iVar25 = 0;
      iVar43 = 0;
      iVar24 = 0;
    }
    else {
      iVar25 = -1;
      iVar43 = -1;
      iVar36 = -1;
      iVar42 = 0;
      puVar32 = local_50;
      iVar24 = iVar23;
      do {
        piVar41 = (int *)((long)puVar32 + 3U & 0xfffffffffffffffc);
        iVar35 = (int)piVar41 - (int)puVar32;
        if (iVar23 < iVar35) {
          iVar35 = iVar23;
        }
        if (iVar35 < 1) {
LAB_001ee12c:
          if (iVar35 < iVar23) {
            bVar2 = false;
LAB_001ee138:
            uVar47 = iVar24 - iVar35;
            uVar53 = iVar36 - iVar35;
            if (((int)(uVar47 - 3) < 1) || (*piVar41 != 0)) {
              uVar44 = 0;
            }
            else {
              uVar44 = 0;
              piVar31 = piVar41;
              do {
                piVar31 = piVar31 + 1;
                uVar44 = uVar44 + 4;
                if ((int)(uVar47 - 3) <= (int)uVar44) break;
              } while (*piVar31 == 0);
            }
            uVar50 = uVar53;
            if ((int)uVar44 < (int)uVar47) {
              pcVar26 = (char *)((long)piVar41 + (long)(int)uVar44);
              cVar1 = *(char *)((long)piVar41 + (long)(int)uVar44);
              while (cVar1 == '\0') {
                uVar44 = uVar44 + 1;
                if (uVar44 == uVar47) goto LAB_001ee1a4;
                pcVar26 = pcVar26 + 1;
                cVar1 = *pcVar26;
              }
              uVar47 = uVar44;
              if ((int)uVar53 < (int)uVar44) {
                bVar2 = true;
                uVar53 = uVar44;
                uVar50 = uVar44;
              }
              else {
                bVar2 = true;
              }
            }
            else {
LAB_001ee1a4:
              if ((int)uVar53 < (int)uVar44) {
                uVar50 = uVar44 - 1;
              }
            }
            uVar37 = (iVar23 - iVar35) - 1;
            if ((int)uVar50 < (int)uVar37) {
              if ((uVar37 & 3) != 3) {
                if (*(char *)((long)piVar41 + (long)(int)uVar37) == '\0') {
                  pcVar26 = (char *)((long)piVar41 + (long)(int)uVar37);
                  while (uVar37 = uVar37 - 1, uVar37 != uVar50) {
                    if ((uVar37 & 3) == 3) {
                      if (((int)(uVar50 + 3) < (int)uVar37) &&
                         (lVar34 = (long)piVar41 + (long)(int)uVar37, *(int *)(lVar34 + -3) == 0))
                      goto LAB_001ee77c;
                      break;
                    }
                    pcVar26 = pcVar26 + -1;
                    if (*pcVar26 != '\0') break;
                  }
                }
                goto LAB_001ee1fc;
              }
              if ((int)uVar37 <= (int)(uVar50 + 3)) goto LAB_001ee204;
              lVar33 = (long)(int)uVar37;
              lVar34 = (long)piVar41 + lVar33;
              if (*(int *)(lVar34 + -3) == 0) {
LAB_001ee77c:
                do {
                  uVar37 = uVar37 - 4;
                  if ((int)uVar37 <= (int)(uVar50 + 3)) break;
                  piVar31 = (int *)(lVar34 + -7);
                  lVar34 = lVar34 + -4;
                } while (*piVar31 == 0);
                goto LAB_001ee1fc;
              }
LAB_001ee208:
              pcVar26 = (char *)((long)piVar41 + lVar33);
              cVar1 = *(char *)((long)piVar41 + lVar33);
              uVar38 = uVar37;
              while (cVar1 == '\0') {
                uVar38 = uVar38 - 1;
                uVar37 = uVar50;
                if (uVar38 == uVar50) goto LAB_001ee22c;
                pcVar26 = pcVar26 + -1;
                cVar1 = *pcVar26;
              }
            }
            else {
LAB_001ee1fc:
              if ((int)uVar50 < (int)uVar37) {
LAB_001ee204:
                lVar33 = (long)(int)uVar37;
                goto LAB_001ee208;
              }
LAB_001ee22c:
              uVar38 = uVar53;
              if (!bVar2) {
                uVar44 = uVar44 & 0xfffffffc;
                if (((int)uVar44 < (int)(uVar37 - 2)) &&
                   (*(int *)((long)piVar41 + (long)(int)uVar44) == 0)) {
                  piVar31 = (int *)((long)piVar41 + (long)(int)uVar44);
                  do {
                    uVar44 = uVar44 + 4;
                    if ((int)(uVar37 - 2) <= (int)uVar44) break;
                    piVar31 = piVar31 + 1;
                  } while (*piVar31 == 0);
                }
                if ((int)uVar37 < (int)uVar44) {
LAB_001ee298:
                  iVar24 = uVar47 + iVar35;
                  iVar36 = uVar53 + iVar35;
                  goto LAB_001ee2a0;
                }
                if (*(char *)((long)piVar41 + (long)(int)uVar44) == '\0') {
                  pcVar26 = (char *)((long)piVar41 + (long)(int)uVar44);
                  do {
                    uVar44 = uVar44 + 1;
                    if ((int)uVar37 < (int)uVar44) goto LAB_001ee298;
                    pcVar26 = pcVar26 + 1;
                  } while (*pcVar26 == '\0');
                }
              }
            }
            iVar24 = uVar47 + iVar35;
            iVar36 = uVar38 + iVar35;
            goto LAB_001ee73c;
          }
        }
        else {
          if ((char)*puVar32 == '\0') {
            iVar28 = 0;
            puVar30 = puVar32;
            do {
              puVar30 = (uint *)((long)puVar30 + 1);
              iVar28 = iVar28 + 1;
              if (iVar28 == iVar35) goto LAB_001ee12c;
            } while (*(char *)puVar30 == '\0');
          }
          else {
            iVar28 = 0;
          }
          if (iVar28 < iVar24) {
            iVar24 = iVar28;
          }
          if (iVar36 < iVar28) {
            iVar36 = iVar28;
          }
          if (iVar35 < iVar23) {
            bVar2 = true;
            goto LAB_001ee138;
          }
LAB_001ee73c:
          iVar25 = iVar42;
          if (iVar43 < 0) {
            iVar43 = iVar42;
          }
        }
LAB_001ee2a0:
        iVar42 = iVar42 + 1;
        puVar32 = (uint *)((long)puVar32 + *local_18);
      } while (iVar42 != *local_20);
      if (iVar24 < iVar23) {
        uVar47 = (iVar36 - iVar24) + 1;
        iVar25 = (iVar25 - iVar43) + 1;
      }
      else {
        iVar43 = 0;
        uVar47 = iVar36 + 1;
        iVar25 = iVar25 + 1;
        iVar24 = 0;
      }
    }
    in_x8[1] = CONCAT44(iVar25,uVar47);
    *in_x8 = CONCAT44(iVar43,iVar24);
    goto LAB_001edf64;
  }
  iVar23 = Mat::checkVector((Mat *)&local_60,2,-1,true);
  uVar47 = local_60 & 7;
  if ((iVar23 < 0) || (1 < uVar47 - 4)) {
    local_70 = 0;
    local_68 = 0;
    pcVar26 = (char *)String::allocate((String *)&local_70,0x34);
    uVar21 = s_npoints_>__0_____depth____CV_32F_0045c648._40_8_;
    uVar20 = s_npoints_>__0_____depth____CV_32F_0045c648._32_8_;
    uVar19 = s_npoints_>__0_____depth____CV_32F_0045c648._24_8_;
    uVar18 = s_npoints_>__0_____depth____CV_32F_0045c648._16_8_;
    uVar17 = s_npoints_>__0_____depth____CV_32F_0045c648._8_8_;
    uVar16 = s_npoints_>__0_____depth____CV_32F_0045c648._0_8_;
    *(undefined4 *)(pcVar26 + 0x30) = s_npoints_>__0_____depth____CV_32F_0045c648._48_4_;
    *(undefined8 *)pcVar26 = uVar16;
    *(undefined8 *)(pcVar26 + 8) = uVar17;
    *(undefined8 *)(pcVar26 + 0x10) = uVar18;
    *(undefined8 *)(pcVar26 + 0x18) = uVar19;
    *(undefined8 *)(pcVar26 + 0x20) = uVar20;
    *(undefined8 *)(pcVar26 + 0x28) = uVar21;
    error(-0xd7,(String *)&local_70,"cv::Rect cv::pointSetBoundingRect(const cv::Mat&)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x1e7);
    String::deallocate((String *)&local_70);
  }
  if (iVar23 == 0) {
    in_x8[1] = 0;
    *in_x8 = 0;
    goto LAB_001edf64;
  }
  uVar53 = *local_50;
  uVar44 = local_50[1];
  if (uVar47 == 5) {
    uVar50 = 0x7fffffff;
    uVar47 = uVar50;
    if (-1 < (int)uVar53) {
      uVar47 = 0;
    }
    if (-1 < (int)uVar44) {
      uVar50 = 0;
    }
    uVar47 = uVar47 ^ uVar53;
    uVar50 = uVar50 ^ uVar44;
    uVar44 = uVar50;
    uVar53 = uVar47;
    if (1 < iVar23) {
      uVar37 = (iVar23 - 5U >> 2) + 1;
      iVar25 = uVar37 * 4;
      if (iVar23 - 2U < 3) {
        uVar27 = 1;
      }
      else {
        auVar49._0_8_ = CONCAT44(uVar47,uVar47);
        auVar49._8_4_ = uVar47;
        auVar49._12_4_ = uVar47;
        puVar32 = local_50 + 2;
        auVar46._0_8_ = CONCAT44(uVar50,uVar50);
        auVar46._8_4_ = uVar50;
        auVar46._12_4_ = uVar50;
        uVar47 = 0;
        auVar52._8_8_ = auVar49._8_8_;
        auVar52._0_8_ = auVar49._0_8_;
        auVar55._8_8_ = auVar46._8_8_;
        auVar55._0_8_ = auVar46._0_8_;
        do {
          uVar53 = *puVar32;
          uVar39 = puVar32[1];
          uVar44 = puVar32[2];
          uVar11 = puVar32[3];
          uVar50 = puVar32[4];
          uVar13 = puVar32[5];
          uVar38 = puVar32[6];
          uVar14 = puVar32[7];
          puVar32 = puVar32 + 8;
          uVar47 = uVar47 + 1;
          iVar35 = -(uint)(-1 < (int)uVar53);
          iVar28 = -(uint)(-1 < (int)uVar44);
          iVar12 = -(uint)(-1 < (int)uVar50);
          iVar15 = -(uint)(-1 < (int)uVar38);
          iVar24 = -(uint)(-1 < (int)uVar39);
          iVar43 = -(uint)(-1 < (int)uVar11);
          iVar42 = -(uint)(-1 < (int)uVar13);
          iVar36 = -(uint)(-1 < (int)uVar14);
          bVar81 = ~(byte)iVar35 ^ (byte)uVar53;
          bVar82 = ~(byte)((uint)iVar35 >> 8) ^ (byte)(uVar53 >> 8);
          bVar83 = ~(byte)((uint)iVar35 >> 0x10) ^ (byte)(uVar53 >> 0x10);
          bVar84 = ~(byte)((uint)iVar35 >> 0x18) & 0x7f ^ (byte)(uVar53 >> 0x18);
          bVar85 = ~(byte)iVar28 ^ (byte)uVar44;
          bVar87 = ~(byte)((uint)iVar28 >> 8) ^ (byte)(uVar44 >> 8);
          bVar89 = ~(byte)((uint)iVar28 >> 0x10) ^ (byte)(uVar44 >> 0x10);
          bVar91 = ~(byte)((uint)iVar28 >> 0x18) & 0x7f ^ (byte)(uVar44 >> 0x18);
          bVar92 = ~(byte)iVar12 ^ (byte)uVar50;
          bVar94 = ~(byte)((uint)iVar12 >> 8) ^ (byte)(uVar50 >> 8);
          bVar96 = ~(byte)((uint)iVar12 >> 0x10) ^ (byte)(uVar50 >> 0x10);
          bVar98 = ~(byte)((uint)iVar12 >> 0x18) & 0x7f ^ (byte)(uVar50 >> 0x18);
          bVar99 = ~(byte)iVar15 ^ (byte)uVar38;
          bVar101 = ~(byte)((uint)iVar15 >> 8) ^ (byte)(uVar38 >> 8);
          bVar103 = ~(byte)((uint)iVar15 >> 0x10) ^ (byte)(uVar38 >> 0x10);
          bVar105 = ~(byte)((uint)iVar15 >> 0x18) & 0x7f ^ (byte)(uVar38 >> 0x18);
          bVar56 = ~(byte)iVar24 ^ (byte)uVar39;
          bVar57 = ~(byte)((uint)iVar24 >> 8) ^ (byte)(uVar39 >> 8);
          bVar58 = ~(byte)((uint)iVar24 >> 0x10) ^ (byte)(uVar39 >> 0x10);
          bVar59 = ~(byte)((uint)iVar24 >> 0x18) & 0x7f ^ (byte)(uVar39 >> 0x18);
          bVar60 = ~(byte)iVar43 ^ (byte)uVar11;
          bVar62 = ~(byte)((uint)iVar43 >> 8) ^ (byte)(uVar11 >> 8);
          bVar64 = ~(byte)((uint)iVar43 >> 0x10) ^ (byte)(uVar11 >> 0x10);
          bVar66 = ~(byte)((uint)iVar43 >> 0x18) & 0x7f ^ (byte)(uVar11 >> 0x18);
          bVar67 = ~(byte)iVar42 ^ (byte)uVar13;
          bVar69 = ~(byte)((uint)iVar42 >> 8) ^ (byte)(uVar13 >> 8);
          bVar71 = ~(byte)((uint)iVar42 >> 0x10) ^ (byte)(uVar13 >> 0x10);
          bVar73 = ~(byte)((uint)iVar42 >> 0x18) & 0x7f ^ (byte)(uVar13 >> 0x18);
          bVar74 = ~(byte)iVar36 ^ (byte)uVar14;
          bVar76 = ~(byte)((uint)iVar36 >> 8) ^ (byte)(uVar14 >> 8);
          bVar78 = ~(byte)((uint)iVar36 >> 0x10) ^ (byte)(uVar14 >> 0x10);
          bVar80 = ~(byte)((uint)iVar36 >> 0x18) & 0x7f ^ (byte)(uVar14 >> 0x18);
          auVar9[1] = bVar82;
          auVar9[0] = bVar81;
          auVar9[2] = bVar83;
          auVar9[3] = bVar84;
          auVar9[4] = bVar85;
          auVar9[5] = bVar87;
          auVar9[6] = bVar89;
          auVar9[7] = bVar91;
          auVar9[8] = bVar92;
          auVar9[9] = bVar94;
          auVar9[10] = bVar96;
          auVar9[0xb] = bVar98;
          auVar9[0xc] = bVar99;
          auVar9[0xd] = bVar101;
          auVar9[0xe] = bVar103;
          auVar9[0xf] = bVar105;
          auVar49 = NEON_smin(auVar49,auVar9,4);
          auVar10[1] = bVar82;
          auVar10[0] = bVar81;
          auVar10[2] = bVar83;
          auVar10[3] = bVar84;
          auVar10[4] = bVar85;
          auVar10[5] = bVar87;
          auVar10[6] = bVar89;
          auVar10[7] = bVar91;
          auVar10[8] = bVar92;
          auVar10[9] = bVar94;
          auVar10[10] = bVar96;
          auVar10[0xb] = bVar98;
          auVar10[0xc] = bVar99;
          auVar10[0xd] = bVar101;
          auVar10[0xe] = bVar103;
          auVar10[0xf] = bVar105;
          auVar52 = NEON_smax(auVar52,auVar10,4);
          auVar5[1] = bVar57;
          auVar5[0] = bVar56;
          auVar5[2] = bVar58;
          auVar5[3] = bVar59;
          auVar5[4] = bVar60;
          auVar5[5] = bVar62;
          auVar5[6] = bVar64;
          auVar5[7] = bVar66;
          auVar5[8] = bVar67;
          auVar5[9] = bVar69;
          auVar5[10] = bVar71;
          auVar5[0xb] = bVar73;
          auVar5[0xc] = bVar74;
          auVar5[0xd] = bVar76;
          auVar5[0xe] = bVar78;
          auVar5[0xf] = bVar80;
          auVar46 = NEON_smin(auVar46,auVar5,4);
          auVar6[1] = bVar57;
          auVar6[0] = bVar56;
          auVar6[2] = bVar58;
          auVar6[3] = bVar59;
          auVar6[4] = bVar60;
          auVar6[5] = bVar62;
          auVar6[6] = bVar64;
          auVar6[7] = bVar66;
          auVar6[8] = bVar67;
          auVar6[9] = bVar69;
          auVar6[10] = bVar71;
          auVar6[0xb] = bVar73;
          auVar6[0xc] = bVar74;
          auVar6[0xd] = bVar76;
          auVar6[0xe] = bVar78;
          auVar6[0xf] = bVar80;
          auVar55 = NEON_smax(auVar55,auVar6,4);
        } while (uVar47 < uVar37);
        uVar50 = NEON_smaxv(auVar55,4);
        uVar44 = NEON_sminv(auVar46,4);
        uVar27 = (ulong)(iVar25 + 1);
        uVar47 = NEON_smaxv(auVar52,4);
        uVar53 = NEON_sminv(auVar49,4);
        if (iVar25 == iVar23 + -1) goto LAB_001ee5e4;
      }
      uVar40 = -(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3;
      uVar39 = *(uint *)((long)local_50 + uVar40 + 4);
      uVar38 = 0x7fffffff;
      uVar37 = uVar38;
      if (-1 < (int)*(uint *)((long)local_50 + uVar40)) {
        uVar37 = 0;
      }
      uVar37 = uVar37 ^ *(uint *)((long)local_50 + uVar40);
      if (-1 < (int)uVar39) {
        uVar38 = 0;
      }
      uVar38 = uVar38 ^ uVar39;
      if ((int)uVar37 < (int)uVar53) {
        uVar53 = uVar37;
      }
      if ((int)uVar47 < (int)uVar37) {
        uVar47 = uVar37;
      }
      if ((int)uVar38 < (int)uVar44) {
        uVar44 = uVar38;
      }
      if ((int)uVar50 < (int)uVar38) {
        uVar50 = uVar38;
      }
      if ((int)uVar27 + 1 < iVar23) {
        uVar11 = *(uint *)((long)local_50 + uVar40 + 8);
        uVar39 = *(uint *)((long)local_50 + uVar40 + 0xc);
        uVar38 = 0x7fffffff;
        uVar37 = uVar38;
        if (-1 < (int)uVar11) {
          uVar37 = 0;
        }
        uVar37 = uVar37 ^ uVar11;
        uVar11 = uVar38;
        if (-1 < (int)uVar39) {
          uVar11 = 0;
        }
        uVar11 = uVar11 ^ uVar39;
        if ((int)uVar37 < (int)uVar53) {
          uVar53 = uVar37;
        }
        if ((int)uVar47 < (int)uVar37) {
          uVar47 = uVar37;
        }
        if ((int)uVar11 < (int)uVar44) {
          uVar44 = uVar11;
        }
        if ((int)uVar50 < (int)uVar11) {
          uVar50 = uVar11;
        }
        if ((int)uVar27 + 2 < iVar23) {
          uVar11 = *(uint *)((long)local_50 + uVar40 + 0x10);
          uVar39 = *(uint *)((long)local_50 + uVar40 + 0x14);
          uVar37 = uVar38;
          if (-1 < (int)uVar11) {
            uVar37 = 0;
          }
          uVar37 = uVar37 ^ uVar11;
          if (-1 < (int)uVar39) {
            uVar38 = 0;
          }
          uVar38 = uVar38 ^ uVar39;
          if ((int)uVar37 < (int)uVar53) {
            uVar53 = uVar37;
          }
          if ((int)uVar47 < (int)uVar37) {
            uVar47 = uVar37;
          }
          if ((int)uVar38 < (int)uVar44) {
            uVar44 = uVar38;
          }
          if ((int)uVar50 < (int)uVar38) {
            uVar50 = uVar38;
          }
        }
      }
    }
LAB_001ee5e4:
    uVar38 = 0x7fffffff;
    uVar37 = uVar38;
    if (-1 < (int)uVar53) {
      uVar37 = 0;
    }
    iVar23 = (int)(float)(uVar37 ^ uVar53);
    if (-1 < (int)uVar44) {
      uVar38 = 0;
    }
    uVar53 = iVar23 - (uint)((float)(uVar37 ^ uVar53) < (float)iVar23);
    iVar23 = (int)(float)(uVar38 ^ uVar44);
    uVar39 = 0x7fffffff;
    uVar37 = uVar39;
    if (-1 < (int)uVar47) {
      uVar37 = 0;
    }
    uVar44 = iVar23 - (uint)((float)(uVar38 ^ uVar44) < (float)iVar23);
    iVar23 = (int)(float)(uVar37 ^ uVar47);
    if (-1 < (int)uVar50) {
      uVar39 = 0;
    }
    iVar23 = ((iVar23 - (uint)((float)(uVar37 ^ uVar47) < (float)iVar23)) - uVar53) + 1;
    iVar25 = (int)(float)(uVar39 ^ uVar50);
    iVar25 = ((iVar25 - (uint)((float)(uVar39 ^ uVar50) < (float)iVar25)) - uVar44) + 1;
  }
  else if (iVar23 < 2) {
    iVar25 = 1;
    iVar23 = 1;
  }
  else {
    uVar47 = (iVar23 - 5U >> 2) + 1;
    iVar25 = uVar47 * 4;
    if (iVar23 - 2U < 4) {
      uVar27 = 1;
      uVar50 = uVar44;
      uVar47 = uVar53;
LAB_001ee2f4:
      uVar40 = -(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3;
      iVar25 = (int)uVar27;
      uVar38 = *(uint *)((long)local_50 + uVar40);
      uVar37 = *(uint *)((long)local_50 + uVar40 + 4);
      if ((int)uVar38 < (int)uVar53) {
        uVar53 = uVar38;
      }
      if ((int)uVar47 < (int)uVar38) {
        uVar47 = uVar38;
      }
      if ((int)uVar37 < (int)uVar50) {
        uVar50 = uVar37;
      }
      if ((int)uVar44 < (int)uVar37) {
        uVar44 = uVar37;
      }
      if (iVar25 + 1 < iVar23) {
        uVar38 = *(uint *)((long)local_50 + uVar40 + 8);
        uVar37 = *(uint *)((long)local_50 + uVar40 + 0xc);
        if ((int)uVar38 < (int)uVar53) {
          uVar53 = uVar38;
        }
        if ((int)uVar47 < (int)uVar38) {
          uVar47 = uVar38;
        }
        if ((int)uVar37 < (int)uVar50) {
          uVar50 = uVar37;
        }
        if ((int)uVar44 < (int)uVar37) {
          uVar44 = uVar37;
        }
        if (iVar25 + 2 < iVar23) {
          uVar38 = *(uint *)((long)local_50 + uVar40 + 0x10);
          uVar37 = *(uint *)((long)local_50 + uVar40 + 0x14);
          if ((int)uVar38 < (int)uVar53) {
            uVar53 = uVar38;
          }
          if ((int)uVar47 < (int)uVar38) {
            uVar47 = uVar38;
          }
          if ((int)uVar37 < (int)uVar50) {
            uVar50 = uVar37;
          }
          if ((int)uVar44 < (int)uVar37) {
            uVar44 = uVar37;
          }
          if (iVar25 + 3 < iVar23) {
            uVar38 = *(uint *)((long)local_50 + uVar40 + 0x18);
            uVar37 = *(uint *)((long)local_50 + uVar40 + 0x1c);
            if ((int)uVar38 < (int)uVar53) {
              uVar53 = uVar38;
            }
            if ((int)uVar47 < (int)uVar38) {
              uVar47 = uVar38;
            }
            if ((int)uVar37 < (int)uVar50) {
              uVar50 = uVar37;
            }
            if ((int)uVar44 < (int)uVar37) {
              uVar44 = uVar37;
            }
          }
        }
      }
    }
    else {
      auVar54._0_8_ = CONCAT44(uVar53,uVar53);
      auVar54._8_4_ = uVar53;
      auVar54._12_4_ = uVar53;
      puVar32 = local_50 + 2;
      auVar51._0_8_ = CONCAT44(uVar44,uVar44);
      auVar51._8_4_ = uVar44;
      auVar51._12_4_ = uVar44;
      uVar53 = 0;
      auVar48._8_8_ = auVar54._8_8_;
      auVar48._0_8_ = auVar54._0_8_;
      auVar45._8_8_ = auVar51._8_8_;
      auVar45._0_8_ = auVar51._0_8_;
      do {
        uVar44 = *puVar32;
        puVar30 = puVar32 + 1;
        uVar50 = puVar32[2];
        uVar61 = (undefined1)(uVar50 >> 8);
        uVar63 = (undefined1)(uVar50 >> 0x10);
        uVar65 = (undefined1)(uVar50 >> 0x18);
        uVar39 = puVar32[3];
        uVar86 = (undefined1)(uVar39 >> 8);
        uVar88 = (undefined1)(uVar39 >> 0x10);
        uVar90 = (undefined1)(uVar39 >> 0x18);
        uVar37 = puVar32[4];
        uVar68 = (undefined1)(uVar37 >> 8);
        uVar70 = (undefined1)(uVar37 >> 0x10);
        uVar72 = (undefined1)(uVar37 >> 0x18);
        uVar11 = puVar32[5];
        uVar93 = (undefined1)(uVar11 >> 8);
        uVar95 = (undefined1)(uVar11 >> 0x10);
        uVar97 = (undefined1)(uVar11 >> 0x18);
        uVar38 = puVar32[6];
        uVar75 = (undefined1)(uVar38 >> 8);
        uVar77 = (undefined1)(uVar38 >> 0x10);
        uVar79 = (undefined1)(uVar38 >> 0x18);
        uVar13 = puVar32[7];
        uVar100 = (undefined1)(uVar13 >> 8);
        uVar102 = (undefined1)(uVar13 >> 0x10);
        uVar104 = (undefined1)(uVar13 >> 0x18);
        puVar32 = puVar32 + 8;
        uVar53 = uVar53 + 1;
        auVar8[4] = (char)uVar50;
        auVar8._0_4_ = uVar44;
        auVar8[5] = uVar61;
        auVar8[6] = uVar63;
        auVar8[7] = uVar65;
        auVar8[8] = (char)uVar37;
        auVar7[4] = (char)uVar50;
        auVar7._0_4_ = uVar44;
        auVar7[5] = uVar61;
        auVar7[6] = uVar63;
        auVar7[7] = uVar65;
        auVar7[8] = (char)uVar37;
        auVar4[4] = (char)uVar39;
        auVar4._0_4_ = *puVar30;
        auVar4[5] = uVar86;
        auVar4[6] = uVar88;
        auVar4[7] = uVar90;
        auVar4[8] = (char)uVar11;
        auVar3[4] = (char)uVar39;
        auVar3._0_4_ = *puVar30;
        auVar3[5] = uVar86;
        auVar3[6] = uVar88;
        auVar3[7] = uVar90;
        auVar3[8] = (char)uVar11;
        auVar7[9] = uVar68;
        auVar7[10] = uVar70;
        auVar7[0xb] = uVar72;
        auVar7[0xc] = (char)uVar38;
        auVar7[0xd] = uVar75;
        auVar7[0xe] = uVar77;
        auVar7[0xf] = uVar79;
        auVar54 = NEON_smin(auVar54,auVar7,4);
        auVar8[9] = uVar68;
        auVar8[10] = uVar70;
        auVar8[0xb] = uVar72;
        auVar8[0xc] = (char)uVar38;
        auVar8[0xd] = uVar75;
        auVar8[0xe] = uVar77;
        auVar8[0xf] = uVar79;
        auVar48 = NEON_smax(auVar48,auVar8,4);
        auVar3[9] = uVar93;
        auVar3[10] = uVar95;
        auVar3[0xb] = uVar97;
        auVar3[0xc] = (char)uVar13;
        auVar3[0xd] = uVar100;
        auVar3[0xe] = uVar102;
        auVar3[0xf] = uVar104;
        auVar51 = NEON_smin(auVar51,auVar3,4);
        auVar4[9] = uVar93;
        auVar4[10] = uVar95;
        auVar4[0xb] = uVar97;
        auVar4[0xc] = (char)uVar13;
        auVar4[0xd] = uVar100;
        auVar4[0xe] = uVar102;
        auVar4[0xf] = uVar104;
        auVar45 = NEON_smax(auVar45,auVar4,4);
      } while (uVar53 < uVar47);
      uVar44 = NEON_smaxv(auVar45,4);
      uVar50 = NEON_sminv(auVar51,4);
      uVar27 = (ulong)(iVar25 + 1);
      uVar47 = NEON_smaxv(auVar48,4);
      uVar53 = NEON_sminv(auVar54,4);
      if (iVar25 != iVar23 + -1) goto LAB_001ee2f4;
    }
    iVar23 = (uVar47 - uVar53) + 1;
    iVar25 = (uVar44 - uVar50) + 1;
    uVar44 = uVar50;
  }
  in_x8[1] = CONCAT44(iVar25,iVar23);
  *in_x8 = CONCAT44(uVar44,uVar53);
LAB_001edf64:
  if (local_28 != 0) {
    piVar41 = (int *)(local_28 + 0x14);
    do {
      iVar23 = *piVar41;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar41,0x10);
      if (bVar2) {
        *piVar41 = iVar23 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (uint *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar23 = 0;
    piVar41 = local_20;
    do {
      *piVar41 = 0;
      iVar23 = iVar23 + 1;
      piVar41 = piVar41 + 1;
    } while (iVar23 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 001ee878 (348 bytes) name=cvMinEnclosingCircle

undefined8 cvMinEnclosingCircle(cv *param_1,undefined8 *param_2,float *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  float local_4d4;
  undefined4 local_4d0;
  undefined4 uStack_4cc;
  undefined4 local_4c8 [2];
  Mat *local_4c0;
  undefined4 local_4b8;
  undefined4 local_4b4;
  Mat aMStack_4b0 [4];
  int local_4ac;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  long local_478;
  undefined4 *local_470;
  undefined1 *local_468;
  undefined1 auStack_460 [16];
  undefined1 *local_450;
  undefined8 local_448;
  undefined1 auStack_440 [1088];
  
  local_450 = auStack_440;
  local_448 = 0x88;
  cv::cvarrToMat(param_1,(void *)0x0,false,false,(int)&local_450,(AutoBuffer *)0x88);
  local_4d0 = 0;
  local_4b8 = 0;
  uStack_4cc = 0;
  local_4b4 = 0;
  local_4c8[0] = 0x1010000;
  local_4c0 = aMStack_4b0;
  cv::minEnclosingCircle((_InputArray *)local_4c8,(Point_ *)&local_4d0,&local_4d4);
  if (param_2 != (undefined8 *)0x0) {
    *param_2 = CONCAT44(uStack_4cc,local_4d0);
  }
  if (param_3 != (float *)0x0) {
    *param_3 = local_4d4;
  }
  if (local_478 != 0) {
    piVar1 = (int *)(local_478 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_4b0);
    }
  }
  local_478 = 0;
  local_4a0 = 0;
  local_488 = 0;
  local_490 = 0;
  local_498 = 0;
  if (0 < local_4ac) {
    iVar4 = 0;
    do {
      *local_470 = 0;
      iVar4 = iVar4 + 1;
      local_470 = local_470 + 1;
    } while (iVar4 < local_4ac);
  }
  if (local_468 != auStack_460) {
    cv::fastFree(local_468);
  }
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  return 1;
}


==================================================================

### FUNC 001eea20 (2444 bytes) name=cvContourArea

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvContourArea(cv *param_1,ulong param_2,int param_3)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  long lVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  uint uVar15;
  int iVar16;
  void *pvVar17;
  char *pcVar18;
  long lVar19;
  void *pvVar20;
  undefined8 *puVar21;
  ulong uVar22;
  int iVar23;
  ulong uVar24;
  void *pvVar25;
  void *pvVar26;
  ulong uVar27;
  undefined1 auVar28 [16];
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  void *local_590;
  undefined4 local_568 [2];
  Mat *local_560;
  undefined4 local_558;
  undefined4 local_554;
  undefined1 auStack_550 [32];
  undefined8 local_530;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_4f8;
  undefined4 *local_4f0;
  undefined1 *local_4e8;
  undefined1 auStack_4e0 [16];
  undefined1 auStack_4d0 [96];
  undefined8 local_470;
  undefined8 uStack_468;
  undefined1 *local_450;
  undefined8 local_448;
  undefined1 auStack_440 [8];
  int *local_438;
  int *local_428;
  
  uStack_468 = 0;
  local_470 = 0;
  if ((param_1 == (cv *)0x0) || (uVar15 = *(uint *)param_1, (uVar15 & 0xffff0000) != 0x42990000)) {
    param_1 = (cv *)cvPointSeqFromMat(0x1000,param_1,auStack_4d0,auStack_550);
LAB_001eea9c:
    uVar15 = cvSliceLength(param_2,param_1);
    if (uVar15 == *(uint *)(param_1 + 0x28)) {
LAB_001eefd8:
      local_450 = auStack_440;
      local_448 = 0x88;
      cv::cvarrToMat(param_1,(void *)0x0,false,false,(int)&local_450,(AutoBuffer *)0x88);
      local_558 = 0;
      local_554 = 0;
      local_568[0] = 0x1010000;
      local_560 = (Mat *)&local_530;
      dVar33 = (double)cv::contourArea((_InputArray *)local_568,param_3 != 0);
      if (local_4f8 != 0) {
        piVar1 = (int *)(local_4f8 + 0x14);
        do {
          iVar16 = *piVar1;
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar7) {
            *piVar1 = iVar16 + -1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&local_530);
        }
      }
      local_4f8 = 0;
      local_520 = 0;
      local_508 = 0;
      local_510 = 0;
      local_518 = 0;
      if (0 < local_530._4_4_) {
        iVar16 = 0;
        do {
          *local_4f0 = 0;
          iVar16 = iVar16 + 1;
          local_4f0 = local_4f0 + 1;
        } while (iVar16 < local_530._4_4_);
      }
      if (local_4e8 != auStack_4e0) {
        cv::fastFree(local_4e8);
      }
      if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
        operator_delete__(local_450);
      }
      goto LAB_001eed74;
    }
  }
  else {
    if (((uVar15 & 0x3000) == 0x1000) && ((uVar15 & 0xfff) - 0xc < 2)) goto LAB_001eea9c;
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_450,0x19);
    cVar6 = s_Unsupported_sequence_type_0045c718[0x18];
    uVar10 = s_Unsupported_sequence_type_0045c718._8_8_;
    uVar9 = s_Unsupported_sequence_type_0045c718._0_8_;
    *(undefined8 *)(pcVar18 + 0x10) = s_Unsupported_sequence_type_0045c718._16_8_;
    pcVar18[0x18] = cVar6;
    *(undefined8 *)pcVar18 = uVar9;
    *(undefined8 *)(pcVar18 + 8) = uVar10;
    cv::error(-5,(String *)&local_450,"double cvContourArea(const void*, CvSlice, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x39e);
    cv::String::deallocate((String *)&local_450);
    uVar15 = cvSliceLength(param_2,param_1);
    if (uVar15 == *(uint *)(param_1 + 0x28)) goto LAB_001eefd8;
  }
  uVar15 = *(uint *)param_1 & 0xfff;
  if (uVar15 != 0xc) {
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pvVar17 = (void *)cv::String::allocate((String *)&local_450,0x4b);
    memcpy(pvVar17,"Only curves with integer coordinates are supported in case of contour slice",
           0x4b);
    cv::error(-0xd2,(String *)&local_450,"double cvContourArea(const void*, CvSlice, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x3ae);
    cv::String::deallocate((String *)&local_450);
    uVar15 = *(uint *)param_1 & 0xfff;
  }
  uVar24 = param_2 & 0xffffffff;
  if (1 < uVar15 - 0xc) {
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_450,0x31);
    uVar14 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._40_8_;
    uVar13 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._32_8_;
    uVar12 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._24_8_;
    uVar11 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._16_8_;
    uVar10 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._8_8_;
    uVar9 = s_contour____NULL____CV_IS_SEQ_POI_0045c788._0_8_;
    pcVar18[0x30] = s_contour____NULL____CV_IS_SEQ_POI_0045c788[0x30];
    *(undefined8 *)pcVar18 = uVar9;
    *(undefined8 *)(pcVar18 + 8) = uVar10;
    *(undefined8 *)(pcVar18 + 0x10) = uVar11;
    *(undefined8 *)(pcVar18 + 0x18) = uVar12;
    *(undefined8 *)(pcVar18 + 0x20) = uVar13;
    *(undefined8 *)(pcVar18 + 0x28) = uVar14;
    cv::error(-0xd7,(String *)&local_450,"double icvContourSecArea(CvSeq*, CvSlice)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x301);
    cv::String::deallocate((String *)&local_450);
  }
  iVar16 = cvSliceLength(uVar24 | ((long)param_2 >> 0x20) << 0x20,param_1);
  if ((iVar16 < 3) || ((int)*(uint *)(param_1 + 0x28) < 1)) {
    dVar33 = 0.0;
  }
  else {
    pvVar17 = (void *)cv::cvAlloc(0x10);
    cvStartReadSeq(param_1,&local_450,0);
    cvSetSeqReaderPos(&local_450,uVar24,0);
    piVar1 = local_438 + 2;
    iVar2 = *local_438;
    iVar3 = local_438[1];
    local_438 = piVar1;
    if (local_428 <= piVar1) {
      cvChangeSeqBlock(&local_450,1);
    }
    cvSetSeqReaderPos(&local_450,(long)param_2 >> 0x20 & 0xffffffff,0);
    piVar1 = local_438 + 2;
    iVar23 = *local_438;
    iVar4 = local_438[1];
    local_438 = piVar1;
    if (local_428 <= piVar1) {
      cvChangeSeqBlock(&local_450,1);
    }
    dVar36 = (double)(iVar23 - iVar2);
    dVar37 = (double)(iVar3 - iVar4);
    pvVar25 = (void *)0x0;
    uVar27 = 2;
    bVar7 = false;
    iVar23 = 0;
    cvSetSeqReaderPos(&local_450,uVar24,0);
    dVar43 = 0.0;
    dVar32 = 0.0;
    dVar31 = 0.0;
    dVar40 = 0.0;
    dVar41 = 0.0;
    dVar42 = 0.0;
    dVar33 = 0.0;
    local_590 = pvVar17;
    piVar1 = local_438;
    while (uVar15 = (uint)uVar27, 0 < iVar16) {
      iVar16 = iVar16 + -1;
      local_438 = piVar1 + 2;
      iVar4 = *piVar1;
      iVar5 = piVar1[1];
      if (local_438 < local_428) {
        if (!bVar7) goto LAB_001eecf0;
LAB_001eee00:
        dVar35 = (double)iVar5;
        dVar30 = (double)iVar3;
        dVar34 = (double)iVar4;
        dVar29 = (double)iVar2;
        dVar38 = dVar36 * (dVar35 - dVar30) + (dVar34 - dVar29) * dVar37;
        if ((ABS(dVar38) < DAT_001ef468) && (0 < iVar16)) {
LAB_001eee3c:
          dVar33 = (dVar35 * dVar41 - dVar34 * dVar40) + dVar42;
          pvVar20 = pvVar17;
          pvVar26 = pvVar25;
          uVar24 = uVar27;
          if ((int)uVar15 <= iVar23) {
            if (((local_590 == (void *)0x0) && (pvVar25 == (void *)0x0)) || (pvVar17 == (void *)0x0)
               ) {
              local_530 = 0;
              local_528 = 0;
              puVar21 = (undefined8 *)cv::String::allocate((String *)&local_530,0x31);
              uVar14 = DAT_0045c7e8;
              uVar13 = DAT_0045c7e0;
              uVar12 = _LAB_0045c7d8;
              uVar11 = DAT_0045c7d0;
              uVar10 = DAT_0045c7c8;
              uVar9 = DAT_0045c7c0;
              *(undefined1 *)(puVar21 + 6) = DAT_0045c7f0;
              *puVar21 = uVar9;
              puVar21[1] = uVar10;
              puVar21[2] = uVar11;
              puVar21[3] = uVar12;
              puVar21[4] = uVar13;
              puVar21[5] = uVar14;
              cv::error(-0xd7,(String *)&local_530,
                        "void icvMemCopy(double**, double**, double**, int*)",
                        "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",
                        0x2d5);
              cv::String::deallocate((String *)&local_530);
            }
            uVar24 = (ulong)(uVar15 << 1);
            uVar22 = -(ulong)((uVar15 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 | uVar24 << 3;
            if (pvVar25 == (void *)0x0) {
              pvVar20 = (void *)cv::cvAlloc(uVar22);
              memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
              cv::cvFree_(local_590);
              pvVar26 = pvVar20;
              local_590 = pvVar25;
            }
            else {
              pvVar20 = (void *)cv::cvAlloc(uVar22);
              memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
              cv::cvFree_(pvVar25);
              pvVar26 = (void *)0x0;
              local_590 = pvVar20;
            }
          }
          dVar42 = 0.0;
          dVar43 = 0.0;
          *(double *)((long)pvVar20 + (long)iVar23 * 8) =
               (dVar33 + (dVar34 * dVar32 - dVar35 * dVar31)) * 0.5;
          iVar23 = iVar23 + 1;
          pvVar17 = pvVar20;
          pvVar25 = pvVar26;
          uVar27 = uVar24;
          dVar31 = dVar34;
          dVar32 = dVar35;
        }
        else if (DAT_001ef470 <= dVar38 * dVar33) {
          dVar43 = dVar35 * dVar41 - dVar34 * dVar40;
LAB_001eef48:
          dVar42 = dVar42 + dVar43;
        }
        else {
          if (ABS(dVar38) < DAT_001ef468) goto LAB_001eee3c;
          dVar33 = dVar34 - dVar41;
          dVar39 = -dVar37;
          if (ABS(dVar33) <= DAT_001ef468) {
            dVar33 = (dVar41 - dVar29) / dVar36;
          }
          else {
            dVar33 = ((dVar35 - dVar40) * (dVar29 - dVar41) + (dVar40 - dVar30) * dVar33) /
                     (dVar33 * dVar39 - dVar36 * (dVar35 - dVar40));
          }
          if ((dVar33 <= DAT_001ef468) || (DAT_001ef478 <= dVar33)) goto LAB_001eef48;
          dVar29 = dVar29 + dVar33 * dVar36;
          dVar30 = dVar30 + dVar33 * dVar39;
          pvVar20 = pvVar17;
          pvVar26 = pvVar25;
          uVar24 = uVar27;
          if ((int)uVar15 <= iVar23) {
            if (((local_590 == (void *)0x0) && (pvVar25 == (void *)0x0)) || (pvVar17 == (void *)0x0)
               ) {
              local_530 = 0;
              local_528 = 0;
              puVar21 = (undefined8 *)cv::String::allocate((String *)&local_530,0x31);
              uVar14 = DAT_0045c7e8;
              uVar13 = DAT_0045c7e0;
              uVar12 = _LAB_0045c7d8;
              uVar11 = DAT_0045c7d0;
              uVar10 = DAT_0045c7c8;
              uVar9 = DAT_0045c7c0;
              *(undefined1 *)(puVar21 + 6) = DAT_0045c7f0;
              *puVar21 = uVar9;
              puVar21[1] = uVar10;
              puVar21[2] = uVar11;
              puVar21[3] = uVar12;
              puVar21[4] = uVar13;
              puVar21[5] = uVar14;
              cv::error(-0xd7,(String *)&local_530,
                        "void icvMemCopy(double**, double**, double**, int*)",
                        "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",
                        0x2d5);
              cv::String::deallocate((String *)&local_530);
            }
            uVar24 = (ulong)(uVar15 << 1);
            uVar22 = -(ulong)((uVar15 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 | uVar24 << 3;
            if (pvVar25 == (void *)0x0) {
              pvVar20 = (void *)cv::cvAlloc(uVar22);
              memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
              cv::cvFree_(local_590);
              pvVar26 = pvVar20;
              local_590 = pvVar25;
            }
            else {
              pvVar20 = (void *)cv::cvAlloc(uVar22);
              memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
              cv::cvFree_(pvVar25);
              pvVar26 = (void *)0x0;
              local_590 = pvVar20;
            }
          }
          dVar43 = dVar35 * dVar29 - dVar34 * dVar30;
          *(double *)((long)pvVar20 + (long)iVar23 * 8) =
               (dVar42 + (dVar41 * dVar30 - dVar40 * dVar29) + (dVar32 * dVar29 - dVar31 * dVar30))
               * 0.5;
          iVar23 = iVar23 + 1;
          dVar42 = dVar43 + 0.0;
          pvVar17 = pvVar20;
          pvVar25 = pvVar26;
          uVar27 = uVar24;
          dVar31 = dVar29;
          dVar32 = dVar30;
        }
      }
      else {
        cvChangeSeqBlock(&local_450,1);
        if (bVar7) goto LAB_001eee00;
LAB_001eecf0:
        dVar38 = 0.0;
        dVar31 = (double)iVar4;
        dVar32 = (double)iVar5;
      }
      dVar41 = (double)iVar4;
      dVar40 = (double)iVar5;
      bVar7 = true;
      dVar33 = dVar38;
      piVar1 = local_438;
    }
    pvVar20 = pvVar17;
    local_438 = piVar1;
    if ((int)uVar15 <= iVar23) {
      if (((local_590 == (void *)0x0) && (pvVar25 == (void *)0x0)) || (pvVar17 == (void *)0x0)) {
        local_530 = 0;
        local_528 = 0;
        puVar21 = (undefined8 *)cv::String::allocate((String *)&local_530,0x31);
        uVar14 = DAT_0045c7e8;
        uVar13 = DAT_0045c7e0;
        uVar12 = _LAB_0045c7d8;
        uVar11 = DAT_0045c7d0;
        uVar10 = DAT_0045c7c8;
        uVar9 = DAT_0045c7c0;
        *(undefined1 *)(puVar21 + 6) = DAT_0045c7f0;
        *puVar21 = uVar9;
        puVar21[1] = uVar10;
        puVar21[2] = uVar11;
        puVar21[3] = uVar12;
        puVar21[4] = uVar13;
        puVar21[5] = uVar14;
        cv::error(-0xd7,(String *)&local_530,"void icvMemCopy(double**, double**, double**, int*)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x2d5);
        cv::String::deallocate((String *)&local_530);
      }
      uVar24 = -(ulong)((uVar15 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
               (ulong)(uVar15 << 1) << 3;
      if (pvVar25 == (void *)0x0) {
        pvVar20 = (void *)cv::cvAlloc(uVar24);
        memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
        cv::cvFree_(local_590);
        local_590 = (void *)0x0;
        pvVar25 = pvVar20;
      }
      else {
        pvVar20 = (void *)cv::cvAlloc(uVar24);
        memcpy(pvVar20,pvVar17,-(uVar27 >> 0x1f) & 0xfffffff800000000 | uVar27 << 3);
        cv::cvFree_(pvVar25);
        pvVar25 = (void *)0x0;
        local_590 = pvVar20;
      }
    }
    lVar19 = 0;
    dVar33 = 0.0;
    *(double *)((long)pvVar20 + (long)iVar23 * 8) =
         ((dVar32 * dVar41 - dVar31 * dVar40) + dVar42) * 0.5;
    do {
      lVar8 = lVar19 * 8;
      lVar19 = lVar19 + 1;
      dVar33 = dVar33 + ABS(*(double *)((long)pvVar20 + lVar8));
    } while ((int)lVar19 <= iVar23);
    if (local_590 == (void *)0x0) {
      if (pvVar25 != (void *)0x0) {
        cv::cvFree_(pvVar25);
      }
    }
    else {
      cv::cvFree_(local_590);
    }
  }
  if (param_3 == 0) {
    dVar33 = ABS(dVar33);
  }
LAB_001eed74:
  auVar28._8_8_ = 0;
  auVar28._0_8_ = dVar33;
  return auVar28;
}


==================================================================

### FUNC 001ef480 (888 bytes) name=cvArcLength

undefined1  [16] cvArcLength(uint *param_1,ulong param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char cVar5;
  undefined4 uVar6;
  uint uVar7;
  char *pcVar8;
  uint uVar9;
  long lVar10;
  float *pfVar11;
  long lVar12;
  int iVar13;
  int iVar14;
  undefined1 auVar15 [16];
  float fVar16;
  float fVar17;
  double dVar18;
  undefined1 auStack_148 [32];
  undefined4 local_128;
  undefined4 local_124;
  undefined8 local_120;
  undefined4 local_118;
  undefined1 *local_110;
  undefined4 local_108;
  int local_104;
  undefined1 local_100 [64];
  undefined8 local_c0;
  undefined8 local_b8;
  float *local_a8;
  float *local_98;
  float *local_88;
  undefined1 auStack_80 [96];
  undefined8 local_20;
  undefined8 uStack_18;
  
  uStack_18 = 0;
  local_20 = 0;
  local_104 = 0x10;
  local_108 = 1;
  local_124 = 0x40;
  local_110 = local_100;
  local_128 = 0x42424005;
  local_120 = 0;
  local_118 = 0;
  if ((param_1 == (uint *)0x0) || (uVar1 = *param_1, (uVar1 & 0xffff0000) != 0x42990000)) {
    uVar6 = 0x1000;
    if (0 < (int)param_3) {
      uVar6 = 0x5000;
    }
    param_1 = (uint *)cvPointSeqFromMat(uVar6,param_1,auStack_80,auStack_148);
    param_3 = (uint)(0 < (int)param_3);
  }
  else {
    if (((uVar1 & 0x3000) != 0x1000) || (1 < (uVar1 & 0xfff) - 0xc)) {
      local_c0 = 0;
      local_b8 = 0;
      pcVar8 = (char *)cv::String::allocate((String *)&local_c0,0x19);
      cVar5 = s_Unsupported_sequence_type_0045c718[0x18];
      uVar4 = s_Unsupported_sequence_type_0045c718._8_8_;
      uVar3 = s_Unsupported_sequence_type_0045c718._0_8_;
      *(undefined8 *)(pcVar8 + 0x10) = s_Unsupported_sequence_type_0045c718._16_8_;
      pcVar8[0x18] = cVar5;
      *(undefined8 *)pcVar8 = uVar3;
      *(undefined8 *)(pcVar8 + 8) = uVar4;
      cv::error(-5,(String *)&local_c0,"double cvArcLength(const void*, CvSlice, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x3c7);
      cv::String::deallocate((String *)&local_c0);
    }
    if ((int)param_3 < 0) {
      param_3 = *param_1 >> 0xe & 1;
    }
  }
  if (1 < (int)param_1[10]) {
    uVar1 = *param_1;
    cvStartReadSeq(param_1,&local_c0,0);
    cvSetSeqReaderPos(&local_c0,param_2 & 0xffffffff,0);
    uVar7 = cvSliceLength(param_2,param_1);
    uVar9 = 0;
    if (param_3 == 0) {
      uVar9 = (uint)(uVar7 == param_1[10]);
    }
    iVar2 = uVar7 - uVar9;
    local_88 = local_a8;
    local_a8 = local_a8 + 2;
    if (local_98 <= local_a8) {
      cvChangeSeqBlock(&local_c0,1);
    }
    if (0 < iVar2) {
      iVar14 = 0;
      dVar18 = 0.0;
      iVar13 = 0;
      do {
        if ((uVar1 & 0xfff) == 0xd) {
          fVar16 = *local_a8 - *local_88;
          fVar17 = local_a8[1] - local_88[1];
        }
        else {
          fVar16 = (float)(int)*local_a8 - (float)(int)*local_88;
          fVar17 = (float)(int)local_a8[1] - (float)(int)local_88[1];
        }
        pfVar11 = (float *)((long)local_a8 + (long)(int)param_1[0xb]);
        local_88 = local_a8;
        local_a8 = pfVar11;
        if (local_98 <= pfVar11) {
          cvChangeSeqBlock(&local_c0,1);
        }
        if ((param_3 != 0) && (iVar2 + -2 == iVar13)) {
          cvSetSeqReaderPos(&local_c0,(int)param_2,0);
        }
        lVar10 = (long)iVar14;
        iVar14 = iVar14 + 1;
        lVar12 = lVar10 * 4;
        *(float *)(local_110 + lVar12) = fVar17 * fVar17 + fVar16 * fVar16;
        if ((iVar14 == 0x10) || (iVar2 + -1 == iVar13)) {
          local_104 = iVar14;
          cvPow(0x3fe0000000000000,&local_128,&local_128);
          pfVar11 = (float *)(local_110 + lVar12 + 4);
          do {
            pfVar11 = pfVar11 + -1;
            dVar18 = dVar18 + (double)*pfVar11;
          } while (pfVar11 != (float *)(local_110 + (iVar14 - lVar10) * 4 + -4));
          iVar14 = 0;
        }
        iVar13 = iVar13 + 1;
      } while (iVar13 != iVar2);
      goto LAB_001ef680;
    }
  }
  dVar18 = 0.0;
LAB_001ef680:
  auVar15._8_8_ = 0;
  auVar15._0_8_ = dVar18;
  return auVar15;
}


==================================================================

### FUNC 001ef80c (332 bytes) name=cvFitEllipse2

undefined4 * cvFitEllipse2(undefined4 *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_4e0;
  undefined4 local_4dc;
  undefined4 local_4d8;
  undefined4 local_4d4;
  undefined4 local_4d0;
  undefined4 local_4c8 [2];
  Mat *local_4c0;
  undefined4 local_4b8;
  undefined4 local_4b4;
  Mat aMStack_4b0 [4];
  int local_4ac;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  long local_478;
  undefined4 *local_470;
  undefined1 *local_468;
  undefined1 auStack_460 [16];
  undefined1 *local_450;
  undefined8 local_448;
  undefined1 auStack_440 [1088];
  
  local_450 = auStack_440;
  local_448 = 0x88;
  cv::cvarrToMat(param_2,(void *)0x0,false,false,(int)&local_450,(AutoBuffer *)0x88);
  local_4b8 = 0;
  local_4b4 = 0;
  local_4c8[0] = 0x1010000;
  local_4c0 = aMStack_4b0;
  cv::fitEllipse((cv *)local_4c8,(_InputArray *)local_4c8);
  *param_1 = local_4e0;
  param_1[1] = local_4dc;
  param_1[2] = local_4d8;
  param_1[3] = local_4d4;
  param_1[4] = local_4d0;
  if (local_478 != 0) {
    piVar1 = (int *)(local_478 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_4b0);
    }
  }
  local_478 = 0;
  local_4a0 = 0;
  local_488 = 0;
  local_490 = 0;
  local_498 = 0;
  if (0 < local_4ac) {
    iVar4 = 0;
    do {
      *local_470 = 0;
      iVar4 = iVar4 + 1;
      local_470 = local_470 + 1;
    } while (iVar4 < local_4ac);
  }
  if (local_468 != auStack_460) {
    cv::fastFree(local_468);
  }
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  return param_1;
}


==================================================================

### FUNC 001ef9a4 (3236 bytes) name=cvBoundingRect

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvBoundingRect(cv *param_1,int param_2)

{
  char cVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  int iVar7;
  int iVar8;
  int iVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined2 uVar18;
  uint *puVar19;
  int iVar20;
  int iVar21;
  cv *this;
  char *pcVar22;
  int *piVar23;
  long lVar24;
  ulong uVar25;
  uint *puVar26;
  int iVar27;
  ulong uVar28;
  AutoBuffer *in_x5;
  long lVar29;
  uint uVar30;
  int *piVar31;
  uint uVar32;
  uint uVar33;
  uint uVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  uint uVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  uint uVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  uint uVar43;
  int iVar44;
  int iVar47;
  int iVar48;
  undefined1 auVar45 [16];
  uint uVar49;
  int iVar50;
  undefined1 auVar46 [16];
  byte bVar51;
  byte bVar52;
  byte bVar53;
  byte bVar54;
  byte bVar55;
  byte bVar56;
  byte bVar57;
  byte bVar58;
  byte bVar59;
  byte bVar60;
  byte bVar61;
  byte bVar62;
  byte bVar63;
  byte bVar64;
  byte bVar65;
  byte bVar66;
  uint uVar67;
  undefined1 uVar69;
  undefined1 uVar70;
  undefined1 uVar71;
  undefined1 uVar73;
  undefined1 uVar74;
  uint uVar72;
  undefined1 uVar75;
  undefined1 uVar77;
  undefined1 uVar78;
  uint uVar76;
  undefined1 uVar79;
  undefined1 auVar68 [16];
  undefined8 local_588;
  undefined8 local_580;
  undefined1 auStack_578 [32];
  undefined1 auStack_558 [40];
  uint local_530 [4];
  uint *local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_4f8;
  undefined4 *local_4f0;
  undefined1 *local_4e8;
  undefined1 auStack_4e0 [16];
  undefined1 auStack_4d0 [96];
  undefined8 local_470;
  undefined8 uStack_468;
  undefined8 local_450;
  undefined8 uStack_448;
  char *local_440;
  undefined8 local_438;
  undefined8 local_430;
  undefined8 local_428;
  long local_418;
  uint *local_410;
  long *local_408;
  long alStack_400 [128];
  
  uStack_468 = 0;
  local_470 = 0;
  if ((param_1 == (cv *)0x0) || ((*(uint *)param_1 & 0xffff0000) != 0x42990000)) {
    this = (cv *)cvGetMat(param_1,auStack_558,0,0);
    if (1 < (*(uint *)this & 0xfff) - 0xc) {
      if (1 < (*(uint *)this & 0xfff)) {
        local_450._0_4_ = 0;
        local_450._4_4_ = 0;
        uStack_448 = 0;
        in_x5 = (AutoBuffer *)cv::String::allocate((String *)&local_450,0x38);
        uVar17 = DAT_0045c820;
        uVar16 = DAT_0045c818;
        uVar15 = _LAB_0045c810;
        uVar14 = DAT_0045c808;
        uVar13 = DAT_0045c800;
        uVar12 = DAT_0045c7f8;
        *(undefined8 *)(in_x5 + 0x30) = s_function_0045c828._0_8_;
        *(undefined8 *)in_x5 = uVar12;
        *(undefined8 *)(in_x5 + 8) = uVar13;
        *(undefined8 *)(in_x5 + 0x10) = uVar14;
        *(undefined8 *)(in_x5 + 0x18) = uVar15;
        *(undefined8 *)(in_x5 + 0x20) = uVar16;
        *(undefined8 *)(in_x5 + 0x28) = uVar17;
        cv::error(-0xd2,(String *)&local_450,"CvRect cvBoundingRect(CvArr*, int)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x438);
        cv::String::deallocate((String *)&local_450);
      }
      cv::cvarrToMat(this,(void *)0x0,true,false,0,in_x5);
      if ((1 < ((uint)local_450 & 7)) || (((uint)local_450 >> 3 & 0x1ff) != 0)) {
        local_530[0] = 0;
        local_530[1] = 0;
        local_530[2] = 0;
        local_530[3] = 0;
        pcVar22 = (char *)cv::String::allocate((String *)local_530,0x2b);
        cVar1 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8[0x2a];
        uVar18 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._40_2_;
        uVar15 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._24_8_;
        uVar14 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._16_8_;
        uVar13 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._8_8_;
        uVar12 = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._0_8_;
        *(undefined8 *)(pcVar22 + 0x20) = s_img_depth___<__CV_8S_&&_img_chan_0045c6e8._32_8_;
        *(undefined2 *)(pcVar22 + 0x28) = uVar18;
        pcVar22[0x2a] = cVar1;
        *(undefined8 *)pcVar22 = uVar12;
        *(undefined8 *)(pcVar22 + 8) = uVar13;
        *(undefined8 *)(pcVar22 + 0x10) = uVar14;
        *(undefined8 *)(pcVar22 + 0x18) = uVar15;
        cv::error(-0xd7,(String *)local_530,"cv::Rect cv::maskBoundingRect(const cv::Mat&)",
                  "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x25d);
        cv::String::deallocate((String *)local_530);
      }
      uVar37 = local_410[1];
      if ((int)*local_410 < 1) {
        iVar21 = 0;
        iVar27 = 0;
        uVar40 = 0;
        uVar43 = 0;
      }
      else {
        uVar67 = 0xffffffff;
        uVar33 = 0;
        uVar40 = 0xffffffff;
        uVar34 = 0xffffffff;
        uVar43 = uVar37;
        do {
          piVar31 = (int *)((ulong)(local_440 + 3) & 0xfffffffffffffffc);
          uVar30 = (int)piVar31 - (int)local_440;
          if ((int)uVar37 < (int)uVar30) {
            uVar30 = uVar37;
          }
          if ((int)uVar30 < 1) {
LAB_001efba4:
            if ((int)uVar30 < (int)uVar37) {
              uVar43 = uVar43 - uVar30;
              bVar2 = false;
              uVar34 = uVar34 - uVar30;
joined_r0x001efbc4:
              if (((int)(uVar43 - 3) < 1) || (*piVar31 != 0)) {
                uVar72 = 0;
              }
              else {
                uVar72 = 0;
                piVar23 = piVar31;
                do {
                  piVar23 = piVar23 + 1;
                  uVar72 = uVar72 + 4;
                  if ((int)(uVar43 - 3) <= (int)uVar72) break;
                } while (*piVar23 == 0);
              }
              uVar76 = uVar34;
              if ((int)uVar72 < (int)uVar43) {
                pcVar22 = (char *)((long)piVar31 + (long)(int)uVar72);
                cVar1 = *(char *)((long)piVar31 + (long)(int)uVar72);
                while (cVar1 == '\0') {
                  uVar72 = uVar72 + 1;
                  if (uVar72 == uVar43) goto LAB_001efc1c;
                  pcVar22 = pcVar22 + 1;
                  cVar1 = *pcVar22;
                }
                uVar43 = uVar72;
                if ((int)uVar34 < (int)uVar72) {
                  bVar2 = true;
                  uVar34 = uVar72;
                  uVar76 = uVar72;
                }
                else {
                  bVar2 = true;
                }
              }
              else {
LAB_001efc1c:
                if ((int)uVar34 < (int)uVar72) {
                  uVar76 = uVar72 - 1;
                }
              }
              uVar49 = (uVar37 - uVar30) - 1;
              if ((int)uVar76 < (int)uVar49) {
                if ((uVar49 & 3) != 3) {
                  if (*(char *)((long)piVar31 + (long)(int)uVar49) == '\0') {
                    pcVar22 = (char *)((long)piVar31 + (long)(int)uVar49);
                    do {
                      uVar49 = uVar49 - 1;
                      if (uVar49 == uVar76) break;
                      if ((uVar49 & 3) == 3) {
                        if ((int)(uVar76 + 3) < (int)uVar49) {
                          iVar21 = *(int *)((long)piVar31 + (long)(int)uVar49 + -3);
                          lVar24 = (long)piVar31 + (long)(int)uVar49;
                          goto joined_r0x001efe8c;
                        }
                        break;
                      }
                      pcVar22 = pcVar22 + -1;
                    } while (*pcVar22 == '\0');
                  }
                  goto LAB_001efc74;
                }
                if ((int)uVar49 <= (int)(uVar76 + 3)) goto LAB_001efc7c;
                lVar29 = (long)(int)uVar49;
                lVar24 = (long)piVar31 + lVar29;
                if (*(int *)(lVar24 + -3) == 0) {
                  do {
                    uVar49 = uVar49 - 4;
                    if ((int)uVar49 <= (int)(uVar76 + 3)) {
                      if ((int)uVar49 <= (int)uVar76) goto LAB_001efca4;
                      goto LAB_001efc7c;
                    }
                    iVar21 = *(int *)(lVar24 + -7);
                    lVar24 = lVar24 + -4;
joined_r0x001efe8c:
                  } while (iVar21 == 0);
                  goto LAB_001efc74;
                }
LAB_001efc80:
                pcVar22 = (char *)(lVar29 + (long)piVar31);
                cVar1 = *(char *)((long)piVar31 + lVar29);
                uVar32 = uVar49;
                while (cVar1 == '\0') {
                  uVar32 = uVar32 - 1;
                  uVar49 = uVar76;
                  if (uVar32 == uVar76) goto LAB_001efca4;
                  pcVar22 = pcVar22 + -1;
                  cVar1 = *pcVar22;
                }
              }
              else {
LAB_001efc74:
                if ((int)uVar76 < (int)uVar49) {
LAB_001efc7c:
                  lVar29 = (long)(int)uVar49;
                  goto LAB_001efc80;
                }
LAB_001efca4:
                uVar32 = uVar34;
                if (!bVar2) {
                  uVar72 = uVar72 & 0xfffffffc;
                  if (((int)uVar72 < (int)(uVar49 - 2)) &&
                     (*(int *)((long)piVar31 + (long)(int)uVar72) == 0)) {
                    piVar23 = (int *)((long)piVar31 + (long)(int)uVar72);
                    do {
                      uVar72 = uVar72 + 4;
                      if ((int)(uVar49 - 2) <= (int)uVar72) break;
                      piVar23 = piVar23 + 1;
                    } while (*piVar23 == 0);
                  }
                  if ((int)uVar49 < (int)uVar72) {
LAB_001efd10:
                    uVar43 = uVar43 + uVar30;
                    uVar34 = uVar34 + uVar30;
                    goto LAB_001efd18;
                  }
                  if (*(char *)((long)piVar31 + (long)(int)uVar72) == '\0') {
                    pcVar22 = (char *)((long)(int)uVar72 + (long)piVar31);
                    do {
                      uVar72 = uVar72 + 1;
                      if ((int)uVar49 < (int)uVar72) goto LAB_001efd10;
                      pcVar22 = pcVar22 + 1;
                    } while (*pcVar22 == '\0');
                  }
                }
              }
              uVar43 = uVar43 + uVar30;
              uVar34 = uVar32 + uVar30;
              goto LAB_001efe50;
            }
          }
          else {
            if (*local_440 == '\0') {
              uVar72 = 0;
              pcVar22 = local_440;
              do {
                pcVar22 = pcVar22 + 1;
                uVar72 = uVar72 + 1;
                if (uVar72 == uVar30) goto LAB_001efba4;
              } while (*pcVar22 == '\0');
            }
            else {
              uVar72 = 0;
            }
            if ((int)uVar72 < (int)uVar43) {
              uVar43 = uVar72;
            }
            if ((int)uVar34 < (int)uVar72) {
              uVar34 = uVar72;
            }
            if ((int)uVar30 < (int)uVar37) {
              uVar43 = uVar43 - uVar30;
              bVar2 = true;
              uVar34 = uVar34 - uVar30;
              goto joined_r0x001efbc4;
            }
LAB_001efe50:
            uVar67 = uVar33;
            if ((int)uVar40 < 0) {
              uVar40 = uVar33;
            }
          }
LAB_001efd18:
          uVar33 = uVar33 + 1;
          local_440 = local_440 + *local_408;
        } while (uVar33 != *local_410);
        if ((int)uVar43 < (int)uVar37) {
          iVar21 = (uVar67 - uVar40) + 1;
          iVar27 = (uVar34 - uVar43) + 1;
        }
        else {
          uVar40 = 0;
          iVar21 = uVar67 + 1;
          iVar27 = uVar34 + 1;
          uVar43 = 0;
        }
      }
      if (local_418 != 0) {
        piVar31 = (int *)(local_418 + 0x14);
        do {
          iVar20 = *piVar31;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar31,0x10);
          if (bVar2) {
            *piVar31 = iVar20 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (iVar20 == 1) {
          cv::Mat::deallocate((Mat *)&local_450);
        }
      }
      local_418 = 0;
      local_440 = (char *)0x0;
      local_428 = 0;
      local_430 = 0;
      local_438 = 0;
      if (0 < local_450._4_4_) {
        iVar20 = 0;
        do {
          *local_410 = 0;
          iVar20 = iVar20 + 1;
          local_410 = local_410 + 1;
        } while (iVar20 < local_450._4_4_);
      }
      if (local_408 != alStack_400) {
        cv::fastFree(local_408);
      }
      goto LAB_001efdc4;
    }
    param_1 = (cv *)cvPointSeqFromMat(0,this,auStack_4d0,auStack_578);
LAB_001effa4:
    if (*(uint *)(param_1 + 0x28) == 0) {
      iVar21 = 0;
      iVar27 = 0;
      uVar43 = 0;
      uVar40 = 0;
      goto LAB_001efdc4;
    }
    param_2 = 0;
LAB_001effd8:
    local_450 = &local_440;
    uStack_448 = 0x88;
    cv::cvarrToMat(param_1,(void *)0x0,false,false,(int)&local_450,(AutoBuffer *)0x88);
    iVar21 = cv::Mat::checkVector((Mat *)local_530,2,-1,true);
    uVar37 = local_530[0] & 7;
    if ((iVar21 < 0) || (1 < uVar37 - 4)) {
      local_588 = 0;
      local_580 = 0;
      pcVar22 = (char *)cv::String::allocate((String *)&local_588,0x34);
      uVar17 = s_npoints_>__0_____depth____CV_32F_0045c648._40_8_;
      uVar16 = s_npoints_>__0_____depth____CV_32F_0045c648._32_8_;
      uVar15 = s_npoints_>__0_____depth____CV_32F_0045c648._24_8_;
      uVar14 = s_npoints_>__0_____depth____CV_32F_0045c648._16_8_;
      uVar13 = s_npoints_>__0_____depth____CV_32F_0045c648._8_8_;
      uVar12 = s_npoints_>__0_____depth____CV_32F_0045c648._0_8_;
      *(undefined4 *)(pcVar22 + 0x30) = s_npoints_>__0_____depth____CV_32F_0045c648._48_4_;
      *(undefined8 *)pcVar22 = uVar12;
      *(undefined8 *)(pcVar22 + 8) = uVar13;
      *(undefined8 *)(pcVar22 + 0x10) = uVar14;
      *(undefined8 *)(pcVar22 + 0x18) = uVar15;
      *(undefined8 *)(pcVar22 + 0x20) = uVar16;
      *(undefined8 *)(pcVar22 + 0x28) = uVar17;
      cv::error(-0xd7,(String *)&local_588,"cv::Rect cv::pointSetBoundingRect(const cv::Mat&)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x1e7);
      cv::String::deallocate((String *)&local_588);
    }
    if (iVar21 == 0) {
      iVar21 = 0;
      iVar27 = 0;
      uVar40 = 0;
      uVar43 = 0;
    }
    else {
      uVar40 = local_520[1];
      uVar43 = *local_520;
      if (uVar37 == 5) {
        uVar33 = 0x7fffffff;
        uVar37 = uVar33;
        if (-1 < (int)uVar43) {
          uVar37 = 0;
        }
        if (-1 < (int)uVar40) {
          uVar33 = 0;
        }
        uVar37 = uVar37 ^ uVar43;
        uVar33 = uVar33 ^ uVar40;
        uVar67 = uVar33;
        uVar34 = uVar37;
        if (1 < iVar21) {
          uVar43 = (iVar21 - 5U >> 2) + 1;
          iVar27 = uVar43 * 4;
          if (iVar21 - 2U < 3) {
            uVar28 = 1;
          }
          else {
            auVar42._0_8_ = CONCAT44(uVar37,uVar37);
            auVar42._8_4_ = uVar37;
            auVar42._12_4_ = uVar37;
            puVar26 = local_520 + 2;
            auVar39._0_8_ = CONCAT44(uVar33,uVar33);
            auVar39._8_4_ = uVar33;
            auVar39._12_4_ = uVar33;
            uVar37 = 0;
            auVar36._8_8_ = auVar42._8_8_;
            auVar36._0_8_ = auVar42._0_8_;
            auVar68._8_8_ = auVar39._8_8_;
            auVar68._0_8_ = auVar39._0_8_;
            do {
              uVar30 = *puVar26;
              uVar40 = puVar26[1];
              uVar72 = puVar26[2];
              uVar33 = puVar26[3];
              uVar76 = puVar26[4];
              uVar34 = puVar26[5];
              uVar49 = puVar26[6];
              uVar67 = puVar26[7];
              puVar26 = puVar26 + 8;
              uVar37 = uVar37 + 1;
              iVar20 = -(uint)(-1 < (int)uVar30);
              iVar7 = -(uint)(-1 < (int)uVar72);
              iVar8 = -(uint)(-1 < (int)uVar76);
              iVar9 = -(uint)(-1 < (int)uVar49);
              iVar44 = -(uint)(-1 < (int)uVar40);
              iVar47 = -(uint)(-1 < (int)uVar33);
              iVar48 = -(uint)(-1 < (int)uVar34);
              iVar50 = -(uint)(-1 < (int)uVar67);
              uVar28 = CONCAT17(~(byte)((uint)iVar47 >> 0x18),
                                CONCAT16(~(byte)((uint)iVar47 >> 0x10),
                                         CONCAT15(~(byte)((uint)iVar47 >> 8),
                                                  CONCAT14(~(byte)iVar47,
                                                           CONCAT13(~(byte)((uint)iVar44 >> 0x18),
                                                                    CONCAT12(~(byte)((uint)iVar44 >>
                                                                                    0x10),
                                                                             CONCAT11(~(byte)((uint)
                                                  iVar44 >> 8),~(byte)iVar44))))))) &
                       0x7fffffff7fffffff;
              bVar51 = ~(byte)iVar20 ^ (byte)uVar30;
              bVar52 = ~(byte)((uint)iVar20 >> 8) ^ (byte)(uVar30 >> 8);
              bVar53 = ~(byte)((uint)iVar20 >> 0x10) ^ (byte)(uVar30 >> 0x10);
              bVar54 = ~(byte)((uint)iVar20 >> 0x18) & 0x7f ^ (byte)(uVar30 >> 0x18);
              bVar55 = ~(byte)iVar7 ^ (byte)uVar72;
              bVar56 = ~(byte)((uint)iVar7 >> 8) ^ (byte)(uVar72 >> 8);
              bVar57 = ~(byte)((uint)iVar7 >> 0x10) ^ (byte)(uVar72 >> 0x10);
              bVar58 = ~(byte)((uint)iVar7 >> 0x18) & 0x7f ^ (byte)(uVar72 >> 0x18);
              bVar59 = ~(byte)iVar8 ^ (byte)uVar76;
              bVar60 = ~(byte)((uint)iVar8 >> 8) ^ (byte)(uVar76 >> 8);
              bVar61 = ~(byte)((uint)iVar8 >> 0x10) ^ (byte)(uVar76 >> 0x10);
              bVar62 = ~(byte)((uint)iVar8 >> 0x18) & 0x7f ^ (byte)(uVar76 >> 0x18);
              bVar63 = ~(byte)iVar9 ^ (byte)uVar49;
              bVar64 = ~(byte)((uint)iVar9 >> 8) ^ (byte)(uVar49 >> 8);
              bVar65 = ~(byte)((uint)iVar9 >> 0x10) ^ (byte)(uVar49 >> 0x10);
              bVar66 = ~(byte)((uint)iVar9 >> 0x18) & 0x7f ^ (byte)(uVar49 >> 0x18);
              auVar46[0] = (byte)uVar28 ^ (byte)uVar40;
              auVar46[1] = (byte)(uVar28 >> 8) ^ (byte)(uVar40 >> 8);
              auVar46[2] = (byte)(uVar28 >> 0x10) ^ (byte)(uVar40 >> 0x10);
              auVar46[3] = (byte)(uVar28 >> 0x18) ^ (byte)(uVar40 >> 0x18);
              auVar46[4] = (byte)(uVar28 >> 0x20) ^ (byte)uVar33;
              auVar46[5] = (byte)(uVar28 >> 0x28) ^ (byte)(uVar33 >> 8);
              auVar46[6] = (byte)(uVar28 >> 0x30) ^ (byte)(uVar33 >> 0x10);
              auVar46[7] = (byte)(uVar28 >> 0x38) ^ (byte)(uVar33 >> 0x18);
              auVar46[8] = ~(byte)iVar48 ^ (byte)uVar34;
              auVar46[9] = ~(byte)((uint)iVar48 >> 8) ^ (byte)(uVar34 >> 8);
              auVar46[10] = ~(byte)((uint)iVar48 >> 0x10) ^ (byte)(uVar34 >> 0x10);
              auVar46[0xb] = ~(byte)((uint)iVar48 >> 0x18) & 0x7f ^ (byte)(uVar34 >> 0x18);
              auVar46[0xc] = ~(byte)iVar50 ^ (byte)uVar67;
              auVar46[0xd] = ~(byte)((uint)iVar50 >> 8) ^ (byte)(uVar67 >> 8);
              auVar46[0xe] = ~(byte)((uint)iVar50 >> 0x10) ^ (byte)(uVar67 >> 0x10);
              auVar46[0xf] = ~(byte)((uint)iVar50 >> 0x18) & 0x7f ^ (byte)(uVar67 >> 0x18);
              auVar5[1] = bVar52;
              auVar5[0] = bVar51;
              auVar5[2] = bVar53;
              auVar5[3] = bVar54;
              auVar5[4] = bVar55;
              auVar5[5] = bVar56;
              auVar5[6] = bVar57;
              auVar5[7] = bVar58;
              auVar5[8] = bVar59;
              auVar5[9] = bVar60;
              auVar5[10] = bVar61;
              auVar5[0xb] = bVar62;
              auVar5[0xc] = bVar63;
              auVar5[0xd] = bVar64;
              auVar5[0xe] = bVar65;
              auVar5[0xf] = bVar66;
              auVar42 = NEON_smin(auVar42,auVar5,4);
              auVar6[1] = bVar52;
              auVar6[0] = bVar51;
              auVar6[2] = bVar53;
              auVar6[3] = bVar54;
              auVar6[4] = bVar55;
              auVar6[5] = bVar56;
              auVar6[6] = bVar57;
              auVar6[7] = bVar58;
              auVar6[8] = bVar59;
              auVar6[9] = bVar60;
              auVar6[10] = bVar61;
              auVar6[0xb] = bVar62;
              auVar6[0xc] = bVar63;
              auVar6[0xd] = bVar64;
              auVar6[0xe] = bVar65;
              auVar6[0xf] = bVar66;
              auVar36 = NEON_smax(auVar36,auVar6,4);
              auVar39 = NEON_smin(auVar39,auVar46,4);
              auVar68 = NEON_smax(auVar68,auVar46,4);
            } while (uVar37 < uVar43);
            uVar67 = NEON_smaxv(auVar68,4);
            uVar33 = NEON_sminv(auVar39,4);
            uVar28 = (ulong)(iVar27 + 1);
            uVar34 = NEON_smaxv(auVar36,4);
            uVar37 = NEON_sminv(auVar42,4);
            if (iVar27 == iVar21 + -1) goto LAB_001f0578;
          }
          uVar25 = -(uVar28 >> 0x1f) & 0xfffffff800000000 | uVar28 << 3;
          uVar30 = *(uint *)((long)local_520 + uVar25 + 4);
          uVar40 = 0x7fffffff;
          uVar43 = uVar40;
          if (-1 < (int)*(uint *)((long)local_520 + uVar25)) {
            uVar43 = 0;
          }
          uVar43 = uVar43 ^ *(uint *)((long)local_520 + uVar25);
          if (-1 < (int)uVar30) {
            uVar40 = 0;
          }
          uVar40 = uVar40 ^ uVar30;
          if ((int)uVar43 < (int)uVar37) {
            uVar37 = uVar43;
          }
          if ((int)uVar34 < (int)uVar43) {
            uVar34 = uVar43;
          }
          if ((int)uVar40 < (int)uVar33) {
            uVar33 = uVar40;
          }
          if ((int)uVar67 < (int)uVar40) {
            uVar67 = uVar40;
          }
          if ((int)uVar28 + 1 < iVar21) {
            uVar72 = *(uint *)((long)local_520 + uVar25 + 8);
            uVar30 = *(uint *)((long)local_520 + uVar25 + 0xc);
            uVar40 = 0x7fffffff;
            uVar43 = uVar40;
            if (-1 < (int)uVar72) {
              uVar43 = 0;
            }
            uVar43 = uVar43 ^ uVar72;
            uVar72 = uVar40;
            if (-1 < (int)uVar30) {
              uVar72 = 0;
            }
            uVar72 = uVar72 ^ uVar30;
            if ((int)uVar43 < (int)uVar37) {
              uVar37 = uVar43;
            }
            if ((int)uVar34 < (int)uVar43) {
              uVar34 = uVar43;
            }
            if ((int)uVar72 < (int)uVar33) {
              uVar33 = uVar72;
            }
            if ((int)uVar67 < (int)uVar72) {
              uVar67 = uVar72;
            }
            if ((int)uVar28 + 2 < iVar21) {
              uVar72 = *(uint *)((long)local_520 + uVar25 + 0x10);
              uVar30 = *(uint *)((long)local_520 + uVar25 + 0x14);
              uVar43 = uVar40;
              if (-1 < (int)uVar72) {
                uVar43 = 0;
              }
              uVar43 = uVar43 ^ uVar72;
              if (-1 < (int)uVar30) {
                uVar40 = 0;
              }
              uVar40 = uVar40 ^ uVar30;
              if ((int)uVar43 < (int)uVar37) {
                uVar37 = uVar43;
              }
              if ((int)uVar34 < (int)uVar43) {
                uVar34 = uVar43;
              }
              if ((int)uVar40 < (int)uVar33) {
                uVar33 = uVar40;
              }
              if ((int)uVar67 < (int)uVar40) {
                uVar67 = uVar40;
              }
            }
          }
        }
LAB_001f0578:
        uVar40 = 0x7fffffff;
        uVar43 = uVar40;
        if (-1 < (int)uVar37) {
          uVar43 = 0;
        }
        iVar21 = (int)(float)(uVar43 ^ uVar37);
        if (-1 < (int)uVar33) {
          uVar40 = 0;
        }
        uVar43 = iVar21 - (uint)((float)(uVar43 ^ uVar37) < (float)iVar21);
        iVar21 = (int)(float)(uVar40 ^ uVar33);
        uVar30 = 0x7fffffff;
        uVar37 = uVar30;
        if (-1 < (int)uVar34) {
          uVar37 = 0;
        }
        uVar40 = iVar21 - (uint)((float)(uVar40 ^ uVar33) < (float)iVar21);
        iVar21 = (int)(float)(uVar37 ^ uVar34);
        if (-1 < (int)uVar67) {
          uVar30 = 0;
        }
        iVar27 = ((iVar21 - (uint)((float)(uVar37 ^ uVar34) < (float)iVar21)) - uVar43) + 1;
        iVar21 = (int)(float)(uVar30 ^ uVar67);
        iVar21 = ((iVar21 - (uint)((float)(uVar30 ^ uVar67) < (float)iVar21)) - uVar40) + 1;
      }
      else if (iVar21 < 2) {
        iVar21 = 1;
        iVar27 = 1;
      }
      else {
        uVar37 = (iVar21 - 5U >> 2) + 1;
        iVar27 = uVar37 * 4;
        if (iVar21 - 2U < 4) {
          uVar28 = 1;
          uVar33 = uVar40;
          uVar37 = uVar43;
LAB_001f015c:
          uVar25 = -(uVar28 >> 0x1f) & 0xfffffff800000000 | uVar28 << 3;
          iVar27 = (int)uVar28;
          uVar67 = *(uint *)((long)local_520 + uVar25);
          uVar34 = *(uint *)((long)local_520 + uVar25 + 4);
          if ((int)uVar67 < (int)uVar37) {
            uVar37 = uVar67;
          }
          if ((int)uVar43 < (int)uVar67) {
            uVar43 = uVar67;
          }
          if ((int)uVar34 < (int)uVar40) {
            uVar40 = uVar34;
          }
          if ((int)uVar33 < (int)uVar34) {
            uVar33 = uVar34;
          }
          uVar34 = uVar43;
          if (iVar27 + 1 < iVar21) {
            uVar30 = *(uint *)((long)local_520 + uVar25 + 8);
            uVar34 = *(uint *)((long)local_520 + uVar25 + 0xc);
            uVar67 = uVar30;
            if ((int)uVar37 < (int)uVar30) {
              uVar67 = uVar37;
            }
            if ((int)uVar43 < (int)uVar30) {
              uVar43 = uVar30;
            }
            if ((int)uVar34 < (int)uVar40) {
              uVar40 = uVar34;
            }
            if ((int)uVar33 < (int)uVar34) {
              uVar33 = uVar34;
            }
            uVar37 = uVar67;
            uVar34 = uVar43;
            if (iVar27 + 2 < iVar21) {
              uVar34 = *(uint *)((long)local_520 + uVar25 + 0x10);
              uVar37 = *(uint *)((long)local_520 + uVar25 + 0x14);
              if ((int)uVar34 < (int)uVar67) {
                uVar67 = uVar34;
              }
              if ((int)uVar43 < (int)uVar34) {
                uVar43 = uVar34;
              }
              if ((int)uVar37 < (int)uVar40) {
                uVar40 = uVar37;
              }
              if ((int)uVar33 < (int)uVar37) {
                uVar33 = uVar37;
              }
              uVar37 = uVar67;
              uVar34 = uVar43;
              if (iVar27 + 3 < iVar21) {
                uVar37 = *(uint *)((long)local_520 + uVar25 + 0x18);
                uVar30 = *(uint *)((long)local_520 + uVar25 + 0x1c);
                if ((int)uVar37 < (int)uVar67) {
                  uVar67 = uVar37;
                }
                if ((int)uVar43 < (int)uVar37) {
                  uVar43 = uVar37;
                }
                if ((int)uVar30 < (int)uVar40) {
                  uVar40 = uVar30;
                }
                uVar37 = uVar67;
                uVar34 = uVar43;
                if ((int)uVar33 < (int)uVar30) {
                  uVar33 = uVar30;
                }
              }
            }
          }
        }
        else {
          auVar38._0_8_ = CONCAT44(uVar43,uVar43);
          auVar38._8_4_ = uVar43;
          auVar38._12_4_ = uVar43;
          puVar26 = local_520 + 2;
          auVar41._0_8_ = CONCAT44(uVar40,uVar40);
          auVar41._8_4_ = uVar40;
          auVar41._12_4_ = uVar40;
          uVar43 = 0;
          auVar45._8_8_ = auVar38._8_8_;
          auVar45._0_8_ = auVar38._0_8_;
          auVar35._8_8_ = auVar41._8_8_;
          auVar35._0_8_ = auVar41._0_8_;
          do {
            uVar40 = *puVar26;
            puVar19 = puVar26 + 1;
            uVar33 = puVar26[2];
            uVar30 = puVar26[3];
            uVar34 = puVar26[4];
            uVar72 = puVar26[5];
            uVar67 = puVar26[6];
            uVar76 = puVar26[7];
            puVar26 = puVar26 + 8;
            uVar43 = uVar43 + 1;
            uVar69 = (undefined1)(uVar30 >> 8);
            uVar70 = (undefined1)(uVar30 >> 0x10);
            uVar71 = (undefined1)(uVar30 >> 0x18);
            uVar73 = (undefined1)(uVar72 >> 8);
            uVar74 = (undefined1)(uVar72 >> 0x10);
            uVar75 = (undefined1)(uVar72 >> 0x18);
            uVar77 = (undefined1)(uVar76 >> 8);
            uVar78 = (undefined1)(uVar76 >> 0x10);
            uVar79 = (undefined1)(uVar76 >> 0x18);
            auVar10[4] = (char)uVar33;
            auVar10._0_4_ = uVar40;
            auVar10[5] = (char)(uVar33 >> 8);
            auVar10[6] = (char)(uVar33 >> 0x10);
            auVar10[7] = (char)(uVar33 >> 0x18);
            auVar10[8] = (char)uVar34;
            auVar10[9] = (char)(uVar34 >> 8);
            auVar10[10] = (char)(uVar34 >> 0x10);
            auVar10[0xb] = (char)(uVar34 >> 0x18);
            auVar10[0xc] = (char)uVar67;
            auVar10[0xd] = (char)(uVar67 >> 8);
            auVar10[0xe] = (char)(uVar67 >> 0x10);
            auVar10[0xf] = (char)(uVar67 >> 0x18);
            auVar4[4] = (char)uVar30;
            auVar4._0_4_ = *puVar19;
            auVar4[5] = uVar69;
            auVar4[6] = uVar70;
            auVar4[7] = uVar71;
            auVar4[8] = (char)uVar72;
            auVar3[4] = (char)uVar30;
            auVar3._0_4_ = *puVar19;
            auVar3[5] = uVar69;
            auVar3[6] = uVar70;
            auVar3[7] = uVar71;
            auVar3[8] = (char)uVar72;
            auVar38 = NEON_smin(auVar38,auVar10,4);
            auVar45 = NEON_smax(auVar45,auVar10,4);
            auVar3[9] = uVar73;
            auVar3[10] = uVar74;
            auVar3[0xb] = uVar75;
            auVar3[0xc] = (char)uVar76;
            auVar3[0xd] = uVar77;
            auVar3[0xe] = uVar78;
            auVar3[0xf] = uVar79;
            auVar41 = NEON_smin(auVar41,auVar3,4);
            auVar4[9] = uVar73;
            auVar4[10] = uVar74;
            auVar4[0xb] = uVar75;
            auVar4[0xc] = (char)uVar76;
            auVar4[0xd] = uVar77;
            auVar4[0xe] = uVar78;
            auVar4[0xf] = uVar79;
            auVar35 = NEON_smax(auVar35,auVar4,4);
          } while (uVar43 < uVar37);
          uVar33 = NEON_smaxv(auVar35,4);
          uVar40 = NEON_sminv(auVar41,4);
          uVar28 = (ulong)(iVar27 + 1);
          uVar43 = NEON_smaxv(auVar45,4);
          uVar37 = NEON_sminv(auVar38,4);
          uVar34 = uVar43;
          if (iVar27 != iVar21 + -1) goto LAB_001f015c;
        }
        uVar43 = uVar37;
        iVar21 = (uVar33 - uVar40) + 1;
        iVar27 = (uVar34 - uVar43) + 1;
      }
    }
    if (local_4f8 != 0) {
      piVar31 = (int *)(local_4f8 + 0x14);
      do {
        iVar20 = *piVar31;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar31,0x10);
        if (bVar2) {
          *piVar31 = iVar20 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar20 == 1) {
        cv::Mat::deallocate((Mat *)local_530);
      }
    }
    local_4f8 = 0;
    local_520 = (uint *)0x0;
    local_508 = 0;
    local_510 = 0;
    local_518 = 0;
    if (0 < (int)local_530[1]) {
      iVar20 = 0;
      do {
        *local_4f0 = 0;
        iVar20 = iVar20 + 1;
        local_4f0 = local_4f0 + 1;
      } while (iVar20 < (int)local_530[1]);
    }
    if (local_4e8 != auStack_4e0) {
      cv::fastFree(local_4e8);
    }
    if ((local_450 != &local_440) && (local_450 != (char **)0x0)) {
      operator_delete__(local_450);
    }
    if (param_2 == 0) goto LAB_001efdc4;
  }
  else {
    if (1 < (*(uint *)param_1 & 0xfff) - 0xc) {
      local_450._0_4_ = 0;
      local_450._4_4_ = 0;
      uStack_448 = 0;
      pcVar22 = (char *)cv::String::allocate((String *)&local_450,0x19);
      cVar1 = s_Unsupported_sequence_type_0045c718[0x18];
      uVar13 = s_Unsupported_sequence_type_0045c718._8_8_;
      uVar12 = s_Unsupported_sequence_type_0045c718._0_8_;
      *(undefined8 *)(pcVar22 + 0x10) = s_Unsupported_sequence_type_0045c718._16_8_;
      pcVar22[0x18] = cVar1;
      *(undefined8 *)pcVar22 = uVar12;
      *(undefined8 *)(pcVar22 + 8) = uVar13;
      cv::error(-5,(String *)&local_450,"CvRect cvBoundingRect(CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/shapedescr.cpp",0x424);
      cv::String::deallocate((String *)&local_450);
    }
    if ((int)*(uint *)(param_1 + 4) < 0x80) goto LAB_001effa4;
    if (param_2 == 0) {
      return *(undefined1 (*) [16])(param_1 + 0x60);
    }
    if (*(uint *)(param_1 + 0x28) != 0) goto LAB_001effd8;
    iVar21 = 0;
    iVar27 = 0;
    uVar40 = 0;
    uVar43 = 0;
  }
  *(ulong *)(param_1 + 0x68) = CONCAT44(iVar21,iVar27);
  *(ulong *)(param_1 + 0x60) = CONCAT44(uVar40,uVar43);
LAB_001efdc4:
  auVar11._12_4_ = iVar21;
  auVar11._8_4_ = iVar27;
  auVar11._4_4_ = uVar40;
  auVar11._0_4_ = uVar43;
  return auVar11;
}


==================================================================

### FUNC 001f06f8 (8 bytes) name=FUN_001f06f8

void FUN_001f06f8(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f0700 (8 bytes) name=FUN_001f0700

void FUN_001f0700(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f0708 (8 bytes) name=FUN_001f0708

void FUN_001f0708(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f0710 (8 bytes) name=FUN_001f0710

void FUN_001f0710(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f0718 (8 bytes) name=FUN_001f0718

void FUN_001f0718(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f0720 (4 bytes) name=FUN_001f0720

void FUN_001f0720(void)

{
  return;
}


==================================================================

### FUNC 001f0724 (4 bytes) name=FUN_001f0724

void FUN_001f0724(void)

{
  return;
}


==================================================================

### FUNC 001f0728 (4 bytes) name=FUN_001f0728

void FUN_001f0728(void)

{
  return;
}


==================================================================

### FUNC 001f072c (4 bytes) name=FUN_001f072c

void FUN_001f072c(void)

{
  return;
}


==================================================================

### FUNC 001f0730 (4 bytes) name=FUN_001f0730

void FUN_001f0730(void)

{
  return;
}


==================================================================

### FUNC 001f0734 (4 bytes) name=FUN_001f0734

void FUN_001f0734(void)

{
  return;
}


==================================================================

### FUNC 001f0738 (4 bytes) name=FUN_001f0738

void FUN_001f0738(void)

{
  return;
}


==================================================================

### FUNC 001f073c (4 bytes) name=FUN_001f073c

void FUN_001f073c(void)

{
  return;
}


==================================================================

### FUNC 001f0740 (4 bytes) name=FUN_001f0740

void FUN_001f0740(void)

{
  return;
}


==================================================================

### FUNC 001f0744 (4 bytes) name=FUN_001f0744

void FUN_001f0744(void)

{
  return;
}


==================================================================

### FUNC 001f0748 (4 bytes) name=FUN_001f0748

void FUN_001f0748(void)

{
  return;
}


==================================================================

### FUNC 001f074c (4 bytes) name=FUN_001f074c

void FUN_001f074c(void)

{
  return;
}


==================================================================

### FUNC 001f0750 (4 bytes) name=FUN_001f0750

void FUN_001f0750(void)

{
  return;
}


==================================================================

### FUNC 001f0754 (4 bytes) name=FUN_001f0754

void FUN_001f0754(void)

{
  return;
}


==================================================================

### FUNC 001f0758 (4 bytes) name=FUN_001f0758

void FUN_001f0758(void)

{
  return;
}


==================================================================

### FUNC 001f075c (4 bytes) name=FUN_001f075c

void FUN_001f075c(void)

{
  return;
}


==================================================================

### FUNC 001f0760 (4 bytes) name=FUN_001f0760

void FUN_001f0760(void)

{
  return;
}


==================================================================

### FUNC 001f0764 (4 bytes) name=FUN_001f0764

void FUN_001f0764(void)

{
  return;
}


==================================================================

### FUNC 001f0768 (4 bytes) name=FUN_001f0768

void FUN_001f0768(void)

{
  return;
}


==================================================================

### FUNC 001f076c (4 bytes) name=FUN_001f076c

void FUN_001f076c(void)

{
  return;
}


==================================================================

### FUNC 001f0770 (4 bytes) name=FUN_001f0770

void FUN_001f0770(void)

{
  return;
}


==================================================================

### FUNC 001f0774 (4 bytes) name=FUN_001f0774

void FUN_001f0774(void)

{
  return;
}


==================================================================

### FUNC 001f0778 (4 bytes) name=FUN_001f0778

void FUN_001f0778(void)

{
  return;
}


==================================================================

### FUNC 001f077c (4 bytes) name=FUN_001f077c

void FUN_001f077c(void)

{
  return;
}


==================================================================

### FUNC 001f0780 (4 bytes) name=FUN_001f0780

void FUN_001f0780(void)

{
  return;
}


==================================================================

### FUNC 001f0784 (4 bytes) name=FUN_001f0784

void FUN_001f0784(void)

{
  return;
}


==================================================================

### FUNC 001f0788 (60 bytes) name=FUN_001f0788

void FUN_001f0788(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f07c4 (60 bytes) name=FUN_001f07c4

void FUN_001f07c4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0800 (60 bytes) name=FUN_001f0800

void FUN_001f0800(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f083c (60 bytes) name=FUN_001f083c

void FUN_001f083c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0878 (60 bytes) name=FUN_001f0878

void FUN_001f0878(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f08b4 (60 bytes) name=FUN_001f08b4

void FUN_001f08b4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f08f0 (60 bytes) name=FUN_001f08f0

void FUN_001f08f0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f092c (60 bytes) name=FUN_001f092c

void FUN_001f092c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0968 (60 bytes) name=FUN_001f0968

void FUN_001f0968(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f09a4 (60 bytes) name=FUN_001f09a4

void FUN_001f09a4(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f09e0 (60 bytes) name=FUN_001f09e0

void FUN_001f09e0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0a1c (60 bytes) name=FUN_001f0a1c

void FUN_001f0a1c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0a58 (60 bytes) name=FUN_001f0a58

void FUN_001f0a58(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0a94 (60 bytes) name=FUN_001f0a94

void FUN_001f0a94(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0ad0 (60 bytes) name=FUN_001f0ad0

void FUN_001f0ad0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0b0c (60 bytes) name=FUN_001f0b0c

void FUN_001f0b0c(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0b48 (60 bytes) name=FUN_001f0b48

void FUN_001f0b48(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0b84 (60 bytes) name=FUN_001f0b84

void FUN_001f0b84(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0bc0 (60 bytes) name=FUN_001f0bc0

void FUN_001f0bc0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0bfc (60 bytes) name=FUN_001f0bfc

void FUN_001f0bfc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0c38 (60 bytes) name=FUN_001f0c38

void FUN_001f0c38(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0c74 (60 bytes) name=FUN_001f0c74

void FUN_001f0c74(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0cb0 (60 bytes) name=FUN_001f0cb0

void FUN_001f0cb0(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0cec (60 bytes) name=FUN_001f0cec

void FUN_001f0cec(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0d28 (60 bytes) name=FUN_001f0d28

void FUN_001f0d28(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0d64 (60 bytes) name=FUN_001f0d64

void FUN_001f0d64(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 001f0da0 (192 bytes) name=FUN_001f0da0

void FUN_001f0da0(long param_1,double *param_2,long param_3,int param_4,int param_5)

{
  double *pdVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  double *pdVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  
  iVar2 = (param_4 + -1) * param_5;
  uVar3 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar7 = (long)param_5;
    pdVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    param_3 = param_3 + lVar7 * 8;
    do {
      if ((int)uVar3 < 1) {
        dVar8 = 0.0;
      }
      else {
        dVar8 = 0.0;
        iVar4 = 0;
        pdVar6 = param_2;
        do {
          iVar4 = iVar4 + param_5;
          dVar9 = *pdVar6;
          pdVar6 = pdVar6 + lVar7;
          dVar8 = dVar8 + dVar9 * dVar9;
        } while (iVar4 < (int)uVar3);
      }
      *(double *)(param_3 + lVar7 * -8) = dVar8;
      if (0 < iVar2) {
        lVar5 = 0;
        iVar4 = 0;
        do {
          iVar4 = iVar4 + param_5;
          dVar9 = *(double *)
                   ((long)param_2 +
                   lVar5 + (-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3));
          dVar8 = dVar8 + (dVar9 * dVar9 -
                          *(double *)((long)param_2 + lVar5) * *(double *)((long)param_2 + lVar5));
          *(double *)(param_3 + lVar5) = dVar8;
          lVar5 = lVar5 + lVar7 * 8;
        } while (iVar4 < iVar2);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 8;
    } while (param_2 != pdVar1);
  }
  return;
}


==================================================================

### FUNC 001f0e60 (212 bytes) name=FUN_001f0e60

void FUN_001f0e60(long param_1,float *param_2,long param_3,int param_4,int param_5)

{
  float *pfVar1;
  int iVar2;
  int iVar3;
  float *pfVar4;
  int iVar5;
  float *pfVar6;
  double *pdVar7;
  double *pdVar8;
  long lVar9;
  float fVar10;
  double dVar11;
  
  iVar2 = (param_4 + -1) * param_5;
  iVar3 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar9 = (long)param_5;
    pfVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar7 = (double *)(param_3 + lVar9 * 8);
    do {
      if (iVar3 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar5 = 0;
        pfVar6 = param_2;
        do {
          fVar10 = *pfVar6;
          iVar5 = iVar5 + param_5;
          pfVar6 = pfVar6 + lVar9;
          dVar11 = dVar11 + (double)fVar10 * (double)fVar10;
        } while (iVar5 < iVar3);
      }
      pdVar7[-lVar9] = dVar11;
      if (0 < iVar2) {
        iVar5 = 0;
        pfVar6 = param_2;
        pdVar8 = pdVar7;
        do {
          fVar10 = *pfVar6;
          iVar5 = iVar5 + param_5;
          pfVar4 = pfVar6 + iVar3;
          pfVar6 = pfVar6 + lVar9;
          dVar11 = dVar11 + ((double)*pfVar4 * (double)*pfVar4 - (double)fVar10 * (double)fVar10);
          *pdVar8 = dVar11;
          pdVar8 = pdVar8 + lVar9;
        } while (iVar5 < iVar2);
      }
      param_2 = param_2 + 1;
      pdVar7 = pdVar7 + 1;
    } while (param_2 != pfVar1);
  }
  return;
}


==================================================================

### FUNC 001f0f34 (212 bytes) name=FUN_001f0f34

void FUN_001f0f34(long param_1,short *param_2,long param_3,int param_4,int param_5)

{
  short *psVar1;
  short *psVar2;
  short sVar3;
  int iVar4;
  int iVar5;
  double *pdVar6;
  int iVar7;
  short *psVar8;
  double *pdVar9;
  long lVar10;
  double dVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar10 = (long)param_5;
    psVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar6 = (double *)(param_3 + lVar10 * 8);
    do {
      if (iVar5 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar7 = 0;
        psVar8 = param_2;
        do {
          sVar3 = *psVar8;
          iVar7 = iVar7 + param_5;
          psVar8 = psVar8 + lVar10;
          dVar11 = dVar11 + (double)(int)sVar3 * (double)(int)sVar3;
        } while (iVar7 < iVar5);
      }
      pdVar6[-lVar10] = dVar11;
      if (0 < iVar4) {
        iVar7 = 0;
        psVar8 = param_2;
        pdVar9 = pdVar6;
        do {
          sVar3 = *psVar8;
          iVar7 = iVar7 + param_5;
          psVar1 = psVar8 + iVar5;
          psVar8 = psVar8 + lVar10;
          dVar11 = dVar11 + ((double)(int)*psVar1 * (double)(int)*psVar1 -
                            (double)(int)sVar3 * (double)(int)sVar3);
          *pdVar9 = dVar11;
          pdVar9 = pdVar9 + lVar10;
        } while (iVar7 < iVar4);
      }
      param_2 = param_2 + 1;
      pdVar6 = pdVar6 + 1;
    } while (param_2 != psVar2);
  }
  return;
}


==================================================================

### FUNC 001f1008 (212 bytes) name=FUN_001f1008

void FUN_001f1008(long param_1,ushort *param_2,long param_3,int param_4,int param_5)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort uVar3;
  int iVar4;
  int iVar5;
  double *pdVar6;
  int iVar7;
  ushort *puVar8;
  double *pdVar9;
  long lVar10;
  double dVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar10 = (long)param_5;
    puVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar6 = (double *)(param_3 + lVar10 * 8);
    do {
      if (iVar5 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar7 = 0;
        puVar8 = param_2;
        do {
          uVar3 = *puVar8;
          iVar7 = iVar7 + param_5;
          puVar8 = puVar8 + lVar10;
          dVar11 = dVar11 + (double)uVar3 * (double)uVar3;
        } while (iVar7 < iVar5);
      }
      pdVar6[-lVar10] = dVar11;
      if (0 < iVar4) {
        iVar7 = 0;
        puVar8 = param_2;
        pdVar9 = pdVar6;
        do {
          uVar3 = *puVar8;
          iVar7 = iVar7 + param_5;
          puVar1 = puVar8 + iVar5;
          puVar8 = puVar8 + lVar10;
          dVar11 = dVar11 + ((double)*puVar1 * (double)*puVar1 - (double)uVar3 * (double)uVar3);
          *pdVar9 = dVar11;
          pdVar9 = pdVar9 + lVar10;
        } while (iVar7 < iVar4);
      }
      param_2 = param_2 + 1;
      pdVar6 = pdVar6 + 1;
    } while (param_2 != puVar2);
  }
  return;
}


==================================================================

### FUNC 001f10dc (200 bytes) name=FUN_001f10dc

void FUN_001f10dc(long param_1,byte *param_2,long param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  byte *pbVar7;
  long lVar8;
  double dVar9;
  
  iVar3 = (param_4 + -1) * param_5;
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar8 = (long)param_5;
    param_3 = param_3 + lVar8 * 8;
    pbVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    do {
      if (iVar4 < 1) {
        dVar9 = 0.0;
      }
      else {
        dVar9 = 0.0;
        iVar5 = 0;
        pbVar7 = param_2;
        do {
          bVar2 = *pbVar7;
          iVar5 = iVar5 + param_5;
          pbVar7 = pbVar7 + lVar8;
          dVar9 = dVar9 + (double)bVar2 * (double)bVar2;
        } while (iVar5 < iVar4);
      }
      lVar6 = 0;
      *(double *)(param_3 + lVar8 * -8) = dVar9;
      iVar5 = 0;
      if (0 < iVar3) {
        do {
          iVar5 = iVar5 + param_5;
          dVar9 = dVar9 + ((double)param_2[lVar6 + iVar4] * (double)param_2[lVar6 + iVar4] -
                          (double)param_2[lVar6] * (double)param_2[lVar6]);
          *(double *)(param_3 + lVar6 * 8) = dVar9;
          lVar6 = lVar6 + lVar8;
        } while (iVar5 < iVar3);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 8;
    } while (param_2 != pbVar1);
  }
  return;
}


==================================================================

### FUNC 001f11a4 (180 bytes) name=FUN_001f11a4

void FUN_001f11a4(long param_1,byte *param_2,long param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  byte *pbVar8;
  long lVar9;
  
  iVar3 = (param_4 + -1) * param_5;
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar9 = (long)param_5;
    param_3 = param_3 + lVar9 * 4;
    pbVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    do {
      iVar5 = 0;
      if (0 < iVar4) {
        iVar6 = 0;
        pbVar8 = param_2;
        do {
          bVar2 = *pbVar8;
          iVar6 = iVar6 + param_5;
          pbVar8 = pbVar8 + lVar9;
          iVar5 = iVar5 + (uint)bVar2 * (uint)bVar2;
        } while (iVar6 < iVar4);
      }
      *(int *)(param_3 + lVar9 * -4) = iVar5;
      lVar7 = 0;
      iVar6 = 0;
      if (0 < iVar3) {
        do {
          iVar6 = iVar6 + param_5;
          iVar5 = iVar5 + ((uint)param_2[lVar7 + iVar4] * (uint)param_2[lVar7 + iVar4] -
                          (uint)param_2[lVar7] * (uint)param_2[lVar7]);
          *(int *)(param_3 + lVar7 * 4) = iVar5;
          lVar7 = lVar7 + lVar9;
        } while (iVar6 < iVar3);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 4;
    } while (param_2 != pbVar1);
  }
  return;
}


==================================================================

### FUNC 001f1258 (8 bytes) name=FUN_001f1258

void FUN_001f1258(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1260 (8 bytes) name=FUN_001f1260

void FUN_001f1260(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1268 (8 bytes) name=FUN_001f1268

void FUN_001f1268(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1270 (8 bytes) name=FUN_001f1270

void FUN_001f1270(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1278 (8 bytes) name=FUN_001f1278

void FUN_001f1278(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1280 (8 bytes) name=FUN_001f1280

void FUN_001f1280(long param_1)

{
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 001f1288 (188 bytes) name=FUN_001f1288

void FUN_001f1288(long param_1,double *param_2,long param_3,int param_4,int param_5)

{
  double *pdVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  double *pdVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  
  iVar2 = (param_4 + -1) * param_5;
  uVar3 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar7 = (long)param_5;
    pdVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    param_3 = param_3 + lVar7 * 8;
    do {
      if ((int)uVar3 < 1) {
        dVar8 = 0.0;
      }
      else {
        dVar8 = 0.0;
        iVar4 = 0;
        pdVar6 = param_2;
        do {
          iVar4 = iVar4 + param_5;
          dVar9 = *pdVar6;
          pdVar6 = pdVar6 + lVar7;
          dVar8 = dVar8 + dVar9;
        } while (iVar4 < (int)uVar3);
      }
      *(double *)(param_3 + lVar7 * -8) = dVar8;
      if (0 < iVar2) {
        lVar5 = 0;
        iVar4 = 0;
        do {
          iVar4 = iVar4 + param_5;
          dVar8 = dVar8 + (*(double *)
                            ((long)param_2 +
                            lVar5 + (-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 |
                                    (ulong)uVar3 << 3)) - *(double *)((long)param_2 + lVar5));
          *(double *)(param_3 + lVar5) = dVar8;
          lVar5 = lVar5 + lVar7 * 8;
        } while (iVar4 < iVar2);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 8;
    } while (param_2 != pdVar1);
  }
  return;
}


==================================================================

### FUNC 001f1344 (204 bytes) name=FUN_001f1344

void FUN_001f1344(long param_1,float *param_2,long param_3,int param_4,int param_5)

{
  float *pfVar1;
  int iVar2;
  int iVar3;
  float *pfVar4;
  int iVar5;
  float *pfVar6;
  double *pdVar7;
  double *pdVar8;
  long lVar9;
  float fVar10;
  double dVar11;
  
  iVar2 = (param_4 + -1) * param_5;
  iVar3 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar9 = (long)param_5;
    pfVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar7 = (double *)(param_3 + lVar9 * 8);
    do {
      if (iVar3 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar5 = 0;
        pfVar6 = param_2;
        do {
          fVar10 = *pfVar6;
          iVar5 = iVar5 + param_5;
          pfVar6 = pfVar6 + lVar9;
          dVar11 = dVar11 + (double)fVar10;
        } while (iVar5 < iVar3);
      }
      pdVar7[-lVar9] = dVar11;
      if (0 < iVar2) {
        iVar5 = 0;
        pfVar6 = param_2;
        pdVar8 = pdVar7;
        do {
          pfVar4 = pfVar6 + iVar3;
          iVar5 = iVar5 + param_5;
          fVar10 = *pfVar6;
          pfVar6 = pfVar6 + lVar9;
          dVar11 = dVar11 + (double)(*pfVar4 - fVar10);
          *pdVar8 = dVar11;
          pdVar8 = pdVar8 + lVar9;
        } while (iVar5 < iVar2);
      }
      param_2 = param_2 + 1;
      pdVar7 = pdVar7 + 1;
    } while (param_2 != pfVar1);
  }
  return;
}


==================================================================

### FUNC 001f1410 (204 bytes) name=FUN_001f1410

void FUN_001f1410(long param_1,short *param_2,long param_3,int param_4,int param_5)

{
  short *psVar1;
  short *psVar2;
  short sVar3;
  int iVar4;
  int iVar5;
  double *pdVar6;
  int iVar7;
  short *psVar8;
  double *pdVar9;
  long lVar10;
  double dVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar10 = (long)param_5;
    psVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar6 = (double *)(param_3 + lVar10 * 8);
    do {
      if (iVar5 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar7 = 0;
        psVar8 = param_2;
        do {
          sVar3 = *psVar8;
          iVar7 = iVar7 + param_5;
          psVar8 = psVar8 + lVar10;
          dVar11 = dVar11 + (double)(int)sVar3;
        } while (iVar7 < iVar5);
      }
      pdVar6[-lVar10] = dVar11;
      if (0 < iVar4) {
        iVar7 = 0;
        psVar8 = param_2;
        pdVar9 = pdVar6;
        do {
          psVar1 = psVar8 + iVar5;
          iVar7 = iVar7 + param_5;
          sVar3 = *psVar8;
          psVar8 = psVar8 + lVar10;
          dVar11 = dVar11 + (double)((int)*psVar1 - (int)sVar3);
          *pdVar9 = dVar11;
          pdVar9 = pdVar9 + lVar10;
        } while (iVar7 < iVar4);
      }
      param_2 = param_2 + 1;
      pdVar6 = pdVar6 + 1;
    } while (param_2 != psVar2);
  }
  return;
}


==================================================================

### FUNC 001f14dc (180 bytes) name=FUN_001f14dc

void FUN_001f14dc(long param_1,int *param_2,long param_3,int param_4,int param_5)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  int *piVar8;
  long lVar9;
  
  iVar3 = (param_4 + -1) * param_5;
  uVar4 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar9 = (long)param_5;
    piVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    param_3 = param_3 + lVar9 * 4;
    do {
      iVar5 = 0;
      if (0 < (int)uVar4) {
        iVar6 = 0;
        piVar8 = param_2;
        do {
          iVar6 = iVar6 + param_5;
          iVar2 = *piVar8;
          piVar8 = piVar8 + lVar9;
          iVar5 = iVar5 + iVar2;
        } while (iVar6 < (int)uVar4);
      }
      *(int *)(param_3 + lVar9 * -4) = iVar5;
      if (0 < iVar3) {
        lVar7 = 0;
        iVar6 = 0;
        do {
          iVar6 = iVar6 + param_5;
          iVar5 = iVar5 + (*(int *)((long)param_2 +
                                   lVar7 + (-(ulong)(uVar4 >> 0x1f) & 0xfffffffc00000000 |
                                           (ulong)uVar4 << 2)) - *(int *)((long)param_2 + lVar7));
          *(int *)(param_3 + lVar7) = iVar5;
          lVar7 = lVar7 + lVar9 * 4;
        } while (iVar6 < iVar3);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 4;
    } while (param_2 != piVar1);
  }
  return;
}


==================================================================

### FUNC 001f1590 (188 bytes) name=FUN_001f1590

void FUN_001f1590(long param_1,short *param_2,long param_3,int param_4,int param_5)

{
  short *psVar1;
  short *psVar2;
  short sVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int *piVar7;
  int iVar8;
  short *psVar9;
  int *piVar10;
  long lVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar11 = (long)param_5;
    psVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    piVar7 = (int *)(param_3 + lVar11 * 4);
    do {
      iVar6 = 0;
      if (0 < iVar5) {
        iVar8 = 0;
        psVar9 = param_2;
        do {
          iVar8 = iVar8 + param_5;
          sVar3 = *psVar9;
          psVar9 = psVar9 + lVar11;
          iVar6 = iVar6 + sVar3;
        } while (iVar8 < iVar5);
      }
      piVar7[-lVar11] = iVar6;
      if (0 < iVar4) {
        iVar8 = 0;
        psVar9 = param_2;
        piVar10 = piVar7;
        do {
          psVar1 = psVar9 + iVar5;
          iVar8 = iVar8 + param_5;
          sVar3 = *psVar9;
          psVar9 = psVar9 + lVar11;
          iVar6 = iVar6 + ((int)*psVar1 - (int)sVar3);
          *piVar10 = iVar6;
          piVar10 = piVar10 + lVar11;
        } while (iVar8 < iVar4);
      }
      param_2 = param_2 + 1;
      piVar7 = piVar7 + 1;
    } while (param_2 != psVar2);
  }
  return;
}


==================================================================

### FUNC 001f164c (204 bytes) name=FUN_001f164c

void FUN_001f164c(long param_1,ushort *param_2,long param_3,int param_4,int param_5)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort uVar3;
  int iVar4;
  int iVar5;
  double *pdVar6;
  int iVar7;
  ushort *puVar8;
  double *pdVar9;
  long lVar10;
  double dVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar10 = (long)param_5;
    puVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    pdVar6 = (double *)(param_3 + lVar10 * 8);
    do {
      if (iVar5 < 1) {
        dVar11 = 0.0;
      }
      else {
        dVar11 = 0.0;
        iVar7 = 0;
        puVar8 = param_2;
        do {
          uVar3 = *puVar8;
          iVar7 = iVar7 + param_5;
          puVar8 = puVar8 + lVar10;
          dVar11 = dVar11 + (double)uVar3;
        } while (iVar7 < iVar5);
      }
      pdVar6[-lVar10] = dVar11;
      if (0 < iVar4) {
        iVar7 = 0;
        puVar8 = param_2;
        pdVar9 = pdVar6;
        do {
          puVar1 = puVar8 + iVar5;
          iVar7 = iVar7 + param_5;
          uVar3 = *puVar8;
          puVar8 = puVar8 + lVar10;
          dVar11 = dVar11 + (double)(int)((uint)*puVar1 - (uint)uVar3);
          *pdVar9 = dVar11;
          pdVar9 = pdVar9 + lVar10;
        } while (iVar7 < iVar4);
      }
      param_2 = param_2 + 1;
      pdVar6 = pdVar6 + 1;
    } while (param_2 != puVar2);
  }
  return;
}


==================================================================

### FUNC 001f1718 (188 bytes) name=FUN_001f1718

void FUN_001f1718(long param_1,ushort *param_2,long param_3,int param_4,int param_5)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int *piVar7;
  int iVar8;
  ushort *puVar9;
  int *piVar10;
  long lVar11;
  
  iVar4 = (param_4 + -1) * param_5;
  iVar5 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar11 = (long)param_5;
    puVar2 = param_2 + (ulong)(param_5 - 1) + 1;
    piVar7 = (int *)(param_3 + lVar11 * 4);
    do {
      iVar6 = 0;
      if (0 < iVar5) {
        iVar8 = 0;
        puVar9 = param_2;
        do {
          iVar8 = iVar8 + param_5;
          uVar3 = *puVar9;
          puVar9 = puVar9 + lVar11;
          iVar6 = iVar6 + (uint)uVar3;
        } while (iVar8 < iVar5);
      }
      piVar7[-lVar11] = iVar6;
      if (0 < iVar4) {
        iVar8 = 0;
        puVar9 = param_2;
        piVar10 = piVar7;
        do {
          puVar1 = puVar9 + iVar5;
          iVar8 = iVar8 + param_5;
          uVar3 = *puVar9;
          puVar9 = puVar9 + lVar11;
          iVar6 = iVar6 + ((uint)*puVar1 - (uint)uVar3);
          *piVar10 = iVar6;
          piVar10 = piVar10 + lVar11;
        } while (iVar8 < iVar4);
      }
      param_2 = param_2 + 1;
      piVar7 = piVar7 + 1;
    } while (param_2 != puVar2);
  }
  return;
}


==================================================================

### FUNC 001f17d4 (192 bytes) name=FUN_001f17d4

void FUN_001f17d4(long param_1,byte *param_2,long param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  byte *pbVar7;
  long lVar8;
  double dVar9;
  
  iVar3 = (param_4 + -1) * param_5;
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar8 = (long)param_5;
    param_3 = param_3 + lVar8 * 8;
    pbVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    do {
      if (iVar4 < 1) {
        dVar9 = 0.0;
      }
      else {
        dVar9 = 0.0;
        iVar5 = 0;
        pbVar7 = param_2;
        do {
          bVar2 = *pbVar7;
          iVar5 = iVar5 + param_5;
          pbVar7 = pbVar7 + lVar8;
          dVar9 = dVar9 + (double)bVar2;
        } while (iVar5 < iVar4);
      }
      lVar6 = 0;
      *(double *)(param_3 + lVar8 * -8) = dVar9;
      iVar5 = 0;
      if (0 < iVar3) {
        do {
          iVar5 = iVar5 + param_5;
          dVar9 = dVar9 + (double)(int)((uint)param_2[lVar6 + iVar4] - (uint)param_2[lVar6]);
          *(double *)(param_3 + lVar6 * 8) = dVar9;
          lVar6 = lVar6 + lVar8;
        } while (iVar5 < iVar3);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 8;
    } while (param_2 != pbVar1);
  }
  return;
}


==================================================================

### FUNC 001f1894 (176 bytes) name=FUN_001f1894

void FUN_001f1894(long param_1,byte *param_2,long param_3,int param_4,int param_5)

{
  byte *pbVar1;
  byte bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  byte *pbVar8;
  long lVar9;
  
  iVar3 = (param_4 + -1) * param_5;
  iVar4 = param_5 * *(int *)(param_1 + 8);
  if (0 < param_5) {
    lVar9 = (long)param_5;
    param_3 = param_3 + lVar9 * 4;
    pbVar1 = param_2 + (ulong)(param_5 - 1) + 1;
    do {
      iVar5 = 0;
      if (0 < iVar4) {
        iVar6 = 0;
        pbVar8 = param_2;
        do {
          iVar6 = iVar6 + param_5;
          bVar2 = *pbVar8;
          pbVar8 = pbVar8 + lVar9;
          iVar5 = iVar5 + (uint)bVar2;
        } while (iVar6 < iVar4);
      }
      *(int *)(param_3 + lVar9 * -4) = iVar5;
      lVar7 = 0;
      iVar6 = 0;
      if (0 < iVar3) {
        do {
          iVar6 = iVar6 + param_5;
          iVar5 = iVar5 + ((uint)param_2[lVar7 + iVar4] - (uint)param_2[lVar7]);
          *(int *)(param_3 + lVar7 * 4) = iVar5;
          lVar7 = lVar7 + lVar9;
        } while (iVar6 < iVar3);
      }
      param_2 = param_2 + 1;
      param_3 = param_3 + 4;
    } while (param_2 != pbVar1);
  }
  return;
}


==================================================================

### FUNC 001f1944 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1948 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f194c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1950 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1954 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1958 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f195c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1960 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1964 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1968 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f196c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1970 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1974 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1978 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f197c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1980 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1984 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1988 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f198c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1990 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1994 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f1998 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f199c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f19a0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f19a4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f19a8 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 001f19ac (16 bytes) name=FUN_001f19ac

void FUN_001f19ac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5110;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f19bc (44 bytes) name=FUN_001f19bc

void FUN_001f19bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5110;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f19e8 (16 bytes) name=FUN_001f19e8

void FUN_001f19e8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f54d0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f19f8 (44 bytes) name=FUN_001f19f8

void FUN_001f19f8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f54d0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1a24 (16 bytes) name=FUN_001f1a24

void FUN_001f1a24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f54a0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1a34 (44 bytes) name=FUN_001f1a34

void FUN_001f1a34(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f54a0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1a60 (16 bytes) name=FUN_001f1a60

void FUN_001f1a60(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5470;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1a70 (44 bytes) name=FUN_001f1a70

void FUN_001f1a70(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5470;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1a9c (16 bytes) name=FUN_001f1a9c

void FUN_001f1a9c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5440;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1aac (44 bytes) name=FUN_001f1aac

void FUN_001f1aac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5440;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1ad8 (16 bytes) name=FUN_001f1ad8

void FUN_001f1ad8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5410;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1ae8 (44 bytes) name=FUN_001f1ae8

void FUN_001f1ae8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5410;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1b14 (16 bytes) name=FUN_001f1b14

void FUN_001f1b14(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f53e0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1b24 (44 bytes) name=FUN_001f1b24

void FUN_001f1b24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f53e0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1b50 (16 bytes) name=FUN_001f1b50

void FUN_001f1b50(undefined8 *param_1)

{
  *param_1 = &DAT_004f5290;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1b60 (44 bytes) name=FUN_001f1b60

void FUN_001f1b60(undefined8 *param_1)

{
  *param_1 = &DAT_004f5290;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1b8c (16 bytes) name=FUN_001f1b8c

void FUN_001f1b8c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5260;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1b9c (44 bytes) name=FUN_001f1b9c

void FUN_001f1b9c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5260;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1bc8 (16 bytes) name=FUN_001f1bc8

void FUN_001f1bc8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5230;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1bd8 (44 bytes) name=FUN_001f1bd8

void FUN_001f1bd8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5230;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1c04 (16 bytes) name=FUN_001f1c04

void FUN_001f1c04(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5200;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1c14 (44 bytes) name=FUN_001f1c14

void FUN_001f1c14(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5200;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1c40 (16 bytes) name=FUN_001f1c40

void FUN_001f1c40(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f51d0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1c50 (44 bytes) name=FUN_001f1c50

void FUN_001f1c50(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f51d0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1c7c (16 bytes) name=FUN_001f1c7c

void FUN_001f1c7c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f51a0;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1c8c (44 bytes) name=FUN_001f1c8c

void FUN_001f1c8c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f51a0;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1cb8 (16 bytes) name=FUN_001f1cb8

void FUN_001f1cb8(undefined8 *param_1)

{
  *param_1 = &DAT_004f5170;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1cc8 (44 bytes) name=FUN_001f1cc8

void FUN_001f1cc8(undefined8 *param_1)

{
  *param_1 = &DAT_004f5170;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1cf4 (16 bytes) name=FUN_001f1cf4

void FUN_001f1cf4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5140;
  FUN_001c8d00();
  return;
}


==================================================================

### FUNC 001f1d04 (44 bytes) name=FUN_001f1d04

void FUN_001f1d04(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5140;
  FUN_001c8d00();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1d30 (52 bytes) name=FUN_001f1d30

void FUN_001f1d30(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5380;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1d64 (60 bytes) name=FUN_001f1d64

void FUN_001f1d64(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5380;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1da0 (52 bytes) name=FUN_001f1da0

void FUN_001f1da0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5080;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1dd4 (60 bytes) name=FUN_001f1dd4

void FUN_001f1dd4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5080;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1e10 (52 bytes) name=FUN_001f1e10

void FUN_001f1e10(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5050;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1e44 (60 bytes) name=FUN_001f1e44

void FUN_001f1e44(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5050;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1e80 (52 bytes) name=FUN_001f1e80

void FUN_001f1e80(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4ff0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1eb4 (60 bytes) name=FUN_001f1eb4

void FUN_001f1eb4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4ff0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1ef0 (52 bytes) name=FUN_001f1ef0

void FUN_001f1ef0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5020;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1f24 (60 bytes) name=FUN_001f1f24

void FUN_001f1f24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5020;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1f60 (52 bytes) name=FUN_001f1f60

void FUN_001f1f60(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4fc0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f1f94 (60 bytes) name=FUN_001f1f94

void FUN_001f1f94(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f4fc0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f1fd0 (52 bytes) name=FUN_001f1fd0

void FUN_001f1fd0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f53b0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f2004 (60 bytes) name=FUN_001f2004

void FUN_001f2004(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f53b0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f2040 (52 bytes) name=FUN_001f2040

void FUN_001f2040(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5350;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f2074 (60 bytes) name=FUN_001f2074

void FUN_001f2074(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5350;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f20b0 (52 bytes) name=FUN_001f20b0

void FUN_001f20b0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5320;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f20e4 (60 bytes) name=FUN_001f20e4

void FUN_001f20e4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f5320;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f2120 (52 bytes) name=FUN_001f2120

void FUN_001f2120(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f52f0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f2154 (60 bytes) name=FUN_001f2154

void FUN_001f2154(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f52f0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f2190 (52 bytes) name=FUN_001f2190

void FUN_001f2190(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f52c0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  return;
}


==================================================================

### FUNC 001f21c4 (60 bytes) name=FUN_001f21c4

void FUN_001f21c4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f52c0;
  if ((void *)param_1[4] != (void *)0x0) {
    operator_delete((void *)param_1[4]);
  }
  FUN_001c8d24(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 001f2200 (2252 bytes) name=FUN_001f2200

void FUN_001f2200(uint *param_1,long param_2,int param_3)

{
  byte *pbVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  byte *pbVar5;
  long lVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  byte bVar13;
  byte bVar14;
  byte bVar15;
  byte bVar16;
  int iVar17;
  int iVar18;
  byte *pbVar19;
  int iVar20;
  int iVar21;
  ulong uVar22;
  undefined1 uVar23;
  int iVar24;
  int iVar25;
  byte *pbVar26;
  ulong uVar27;
  int *piVar28;
  byte *pbVar29;
  long lVar30;
  int iVar31;
  ulong uVar32;
  ulong uVar33;
  ulong uVar34;
  long lVar35;
  byte *pbVar36;
  byte *pbVar37;
  long lVar38;
  long lVar39;
  uint local_1160;
  int local_1100 [16];
  int aiStack_10c0 [16];
  int aiStack_1080 [16];
  int aiStack_1040 [16];
  int aiStack_1000 [1024];
  
  iVar9 = param_3 * param_3 >> 1;
  uVar22 = *(ulong *)(param_1 + 0x14);
  uVar11 = (*(int **)(param_2 + 0x40))[1];
  uVar33 = *(ulong *)(param_2 + 0x50);
  iVar12 = **(int **)(param_2 + 0x40);
  iVar3 = (*param_1 >> 3 & 0x1ff) + 1;
  pbVar36 = *(byte **)(param_1 + 4);
  iVar20 = (int)uVar22;
  pbVar1 = pbVar36 + iVar12 * iVar20;
  lVar38 = *(long *)(param_2 + 0x10);
  if (0 < (int)uVar11) {
    iVar18 = iVar12 + -1;
    iVar10 = param_3 / 2;
    lVar35 = (long)iVar3;
    local_1160 = 0;
    iVar17 = iVar3 * param_3;
    iVar4 = iVar10 + 1;
    uVar32 = uVar22;
    uVar34 = uVar33;
    pbVar37 = pbVar36;
    lVar39 = lVar38;
LAB_001f2308:
    memset(local_1100,0,lVar35 << 6);
    memset(aiStack_1000,0,lVar35 << 10);
    iVar31 = 0;
    iVar21 = (int)uVar32;
    pbVar19 = pbVar37;
    if (-1 < iVar10) {
      do {
        iVar24 = 0;
        pbVar26 = pbVar19;
LAB_001f236c:
        do {
          if (iVar31 == 0) {
            if (0 < iVar17) {
              pbVar29 = pbVar26;
              iVar25 = iVar3;
              do {
                lVar30 = (long)iVar24 * 0x100 + (long)(int)(uint)*pbVar29;
                iVar25 = iVar25 + iVar3;
                lVar2 = (long)iVar24 * 0x10 + (long)((int)(uint)*pbVar29 >> 4);
                aiStack_1000[lVar30] = aiStack_1000[lVar30] + iVar4;
                pbVar29 = pbVar29 + lVar35;
                local_1100[lVar2] = local_1100[lVar2] + iVar4;
              } while (iVar25 - iVar3 < iVar17);
              iVar24 = iVar24 + 1;
              pbVar26 = pbVar26 + 1;
              if (iVar24 == iVar3) break;
              goto LAB_001f236c;
            }
          }
          else if (0 < iVar17) {
            pbVar29 = pbVar26;
            iVar25 = iVar3;
            do {
              lVar30 = (long)iVar24 * 0x100 + (long)(int)(uint)*pbVar29;
              iVar25 = iVar25 + iVar3;
              lVar2 = (long)iVar24 * 0x10 + (long)((int)(uint)*pbVar29 >> 4);
              aiStack_1000[lVar30] = aiStack_1000[lVar30] + 1;
              pbVar29 = pbVar29 + lVar35;
              local_1100[lVar2] = local_1100[lVar2] + 1;
            } while (iVar25 - iVar3 < iVar17);
          }
          iVar24 = iVar24 + 1;
          pbVar26 = pbVar26 + 1;
        } while (iVar24 != iVar3);
        if (iVar21 < 1) {
          if ((iVar21 != 0) && (1 < iVar12 - iVar31)) {
            pbVar19 = pbVar19 + iVar21;
          }
        }
        else if (iVar31 < iVar18) {
          pbVar19 = pbVar19 + iVar21;
        }
        iVar31 = iVar31 + 1;
      } while (iVar31 != iVar4);
    }
    iVar31 = 0;
    if (0 < iVar12) {
      do {
        uVar32 = 0;
        piVar28 = local_1100;
        do {
          iVar24 = *piVar28;
          if (iVar9 < iVar24) {
            uVar23 = 0;
            iVar25 = 0;
            iVar24 = 0;
          }
          else {
            iVar8 = iVar24 + piVar28[1];
            if (iVar9 < iVar8) {
              uVar23 = 0x10;
              iVar25 = 0x10;
            }
            else {
              iVar24 = iVar8 + piVar28[2];
              if (iVar9 < iVar24) {
                uVar23 = 0x20;
                iVar25 = 0x20;
                iVar24 = iVar8;
              }
              else {
                iVar8 = iVar24 + piVar28[3];
                if (iVar9 < iVar8) {
                  uVar23 = 0x30;
                  iVar25 = 0x30;
                }
                else {
                  iVar24 = iVar8 + piVar28[4];
                  if (iVar9 < iVar24) {
                    uVar23 = 0x40;
                    iVar25 = 0x40;
                    iVar24 = iVar8;
                  }
                  else {
                    iVar8 = iVar24 + piVar28[5];
                    if (iVar9 < iVar8) {
                      uVar23 = 0x50;
                      iVar25 = 0x50;
                    }
                    else {
                      iVar24 = iVar8 + piVar28[6];
                      if (iVar9 < iVar24) {
                        uVar23 = 0x60;
                        iVar25 = 0x60;
                        iVar24 = iVar8;
                      }
                      else {
                        iVar8 = iVar24 + piVar28[7];
                        if (iVar9 < iVar8) {
                          uVar23 = 0x70;
                          iVar25 = 0x70;
                        }
                        else {
                          iVar24 = iVar8 + piVar28[8];
                          if (iVar9 < iVar24) {
                            uVar23 = 0x80;
                            iVar25 = 0x80;
                            iVar24 = iVar8;
                          }
                          else {
                            iVar8 = iVar24 + piVar28[9];
                            if (iVar9 < iVar8) {
                              uVar23 = 0x90;
                              iVar25 = 0x90;
                            }
                            else {
                              iVar24 = iVar8 + piVar28[10];
                              if (iVar9 < iVar24) {
                                uVar23 = 0xa0;
                                iVar25 = 0xa0;
                                iVar24 = iVar8;
                              }
                              else {
                                iVar8 = iVar24 + piVar28[0xb];
                                if (iVar9 < iVar8) {
                                  uVar23 = 0xb0;
                                  iVar25 = 0xb0;
                                }
                                else {
                                  iVar24 = iVar8 + piVar28[0xc];
                                  if (iVar9 < iVar24) {
                                    uVar23 = 0xc0;
                                    iVar25 = 0xc0;
                                    iVar24 = iVar8;
                                  }
                                  else {
                                    iVar8 = iVar24 + piVar28[0xd];
                                    if (iVar9 < iVar8) {
                                      uVar23 = 0xd0;
                                      iVar25 = 0xd0;
                                    }
                                    else {
                                      uVar23 = 0xf0;
                                      iVar25 = 0xf0;
                                      iVar24 = iVar8 + piVar28[0xe];
                                      if (iVar9 < iVar8 + piVar28[0xe]) {
                                        uVar23 = 0xe0;
                                        iVar25 = 0xe0;
                                        iVar24 = iVar8;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar27 = -((uVar32 & 0xffffffff) >> 0x1f) & 0xffffff0000000000 |
                   (uVar32 & 0xffffffff) << 8;
          iVar24 = iVar24 + aiStack_1000[uVar27 + (long)iVar25];
          if (iVar24 <= iVar9) {
            do {
              iVar25 = iVar25 + 1;
              iVar24 = iVar24 + aiStack_1000[uVar27 + (long)iVar25];
            } while (iVar24 <= iVar9);
            uVar23 = (undefined1)iVar25;
          }
          *(undefined1 *)(lVar39 + uVar32) = uVar23;
          uVar32 = uVar32 + 1;
          piVar28 = piVar28 + 0x10;
        } while ((int)uVar32 < iVar3);
        if (iVar31 == iVar18) break;
        if (iVar3 == 1) {
          lVar30 = 0;
          if (param_3 < 1) goto LAB_001f26f4;
          do {
            bVar13 = pbVar37[lVar30];
            bVar14 = pbVar19[lVar30];
            lVar30 = lVar30 + 1;
            iVar24 = (int)(uint)bVar13 >> 4;
            iVar25 = (int)(uint)bVar14 >> 4;
            aiStack_1000[(int)(uint)bVar13] = aiStack_1000[(int)(uint)bVar13] + -1;
            iVar8 = aiStack_1000[(int)(uint)bVar14];
            local_1100[iVar24] = local_1100[iVar24] + -1;
            aiStack_1000[(int)(uint)bVar14] = iVar8 + 1;
            local_1100[iVar25] = local_1100[iVar25] + 1;
          } while ((int)lVar30 < param_3);
          if (0 < iVar21) goto LAB_001f26fc;
LAB_001f285c:
          if ((iVar21 != 0) && (pbVar36 <= pbVar19 + iVar21)) {
            pbVar19 = pbVar19 + iVar21;
          }
        }
        else {
          if (iVar3 == 3) {
            pbVar26 = pbVar37;
            pbVar29 = pbVar19;
            if (0 < param_3 * 3) {
              do {
                bVar13 = *pbVar26;
                pbVar5 = pbVar26 + 3;
                bVar14 = *pbVar29;
                iVar24 = (int)(uint)bVar13 >> 4;
                bVar15 = pbVar26[1];
                lVar30 = (ulong)bVar15 + 0x100;
                bVar16 = pbVar26[2];
                aiStack_1000[(int)(uint)bVar13] = aiStack_1000[(int)(uint)bVar13] + -1;
                lVar2 = (long)((int)(uint)bVar15 >> 4) + 0x10;
                local_1100[iVar24] = local_1100[iVar24] + -1;
                lVar6 = (ulong)bVar16 + 0x200;
                iVar25 = local_1100[lVar2];
                lVar7 = (long)((int)(uint)bVar16 >> 4) + 0x20;
                bVar13 = pbVar29[1];
                aiStack_1000[lVar30] = aiStack_1000[lVar30] + -1;
                iVar24 = (int)(uint)bVar14 >> 4;
                local_1100[lVar2] = iVar25 + -1;
                iVar25 = local_1100[lVar7];
                aiStack_1000[lVar6] = aiStack_1000[lVar6] + -1;
                local_1100[lVar7] = iVar25 + -1;
                iVar25 = local_1100[iVar24];
                lVar30 = (long)(int)(uint)bVar13 + 0x100;
                bVar15 = pbVar29[2];
                lVar2 = (long)((int)(uint)bVar13 >> 4) + 0x10;
                aiStack_1000[(int)(uint)bVar14] = aiStack_1000[(int)(uint)bVar14] + 1;
                local_1100[iVar24] = iVar25 + 1;
                iVar24 = local_1100[lVar2];
                lVar6 = (long)(int)(uint)bVar15 + 0x200;
                lVar7 = (long)((int)(uint)bVar15 >> 4) + 0x20;
                aiStack_1000[lVar30] = aiStack_1000[lVar30] + 1;
                local_1100[lVar2] = iVar24 + 1;
                iVar24 = local_1100[lVar7];
                aiStack_1000[lVar6] = aiStack_1000[lVar6] + 1;
                local_1100[lVar7] = iVar24 + 1;
                pbVar26 = pbVar5;
                pbVar29 = pbVar29 + 3;
              } while ((int)pbVar5 - (int)pbVar37 < param_3 * 3);
            }
          }
          else if (0 < param_3 * 4) {
            pbVar26 = pbVar37;
            pbVar29 = pbVar19 + 1;
            do {
              bVar13 = *pbVar26;
              bVar14 = pbVar26[1];
              pbVar5 = pbVar29 + 4;
              iVar24 = (int)(uint)bVar13 >> 4;
              lVar30 = (ulong)bVar14 + 0x100;
              bVar15 = pbVar26[2];
              iVar25 = local_1100[iVar24];
              aiStack_1000[(int)(uint)bVar13] = aiStack_1000[(int)(uint)bVar13] + -1;
              lVar2 = (long)((int)(uint)bVar14 >> 4) + 0x10;
              iVar8 = aiStack_1000[lVar30];
              local_1100[iVar24] = iVar25 + -1;
              lVar6 = (ulong)bVar15 + 0x200;
              bVar13 = pbVar26[3];
              iVar24 = local_1100[lVar2];
              aiStack_1000[lVar30] = iVar8 + -1;
              lVar30 = (long)((int)(uint)bVar15 >> 4) + 0x20;
              iVar25 = aiStack_1000[lVar6];
              local_1100[lVar2] = iVar24 + -1;
              lVar2 = (long)(int)(uint)bVar13 + 0x300;
              aiStack_1000[lVar6] = iVar25 + -1;
              iVar24 = aiStack_1000[lVar2];
              lVar6 = (long)((int)(uint)bVar13 >> 4) + 0x30;
              bVar13 = *pbVar29;
              bVar14 = pbVar29[-1];
              local_1100[lVar30] = local_1100[lVar30] + -1;
              aiStack_1000[lVar2] = iVar24 + -1;
              lVar30 = (long)(int)(uint)bVar13 + 0x100;
              iVar24 = (int)(uint)bVar14 >> 4;
              iVar25 = aiStack_1000[(int)(uint)bVar14];
              bVar15 = pbVar29[1];
              local_1100[lVar6] = local_1100[lVar6] + -1;
              aiStack_1000[(int)(uint)bVar14] = iVar25 + 1;
              lVar2 = (long)((int)(uint)bVar13 >> 4) + 0x10;
              iVar25 = aiStack_1000[lVar30];
              lVar6 = (long)(int)(uint)bVar15 + 0x200;
              local_1100[iVar24] = local_1100[iVar24] + 1;
              aiStack_1000[lVar30] = iVar25 + 1;
              lVar30 = (long)((int)(uint)bVar15 >> 4) + 0x20;
              iVar24 = aiStack_1000[lVar6];
              local_1100[lVar2] = local_1100[lVar2] + 1;
              aiStack_1000[lVar6] = iVar24 + 1;
              bVar13 = pbVar29[2];
              local_1100[lVar30] = local_1100[lVar30] + 1;
              lVar30 = (ulong)bVar13 + 0x300;
              lVar2 = (long)((int)(uint)bVar13 >> 4) + 0x30;
              aiStack_1000[lVar30] = aiStack_1000[lVar30] + 1;
              local_1100[lVar2] = local_1100[lVar2] + 1;
              pbVar26 = pbVar26 + 4;
              pbVar29 = pbVar5;
            } while (pbVar5 != pbVar19 + (ulong)(param_3 * 4 - 1U >> 2) * 4 + 5);
          }
LAB_001f26f4:
          if (iVar21 < 1) goto LAB_001f285c;
LAB_001f26fc:
          if (pbVar19 + iVar21 < pbVar1) {
            pbVar19 = pbVar19 + iVar21;
          }
        }
        if (iVar10 <= iVar31) {
          pbVar37 = pbVar37 + iVar21;
        }
        iVar31 = iVar31 + 1;
        lVar39 = lVar39 + (int)uVar34;
      } while (iVar31 != iVar12);
    }
    local_1160 = local_1160 + 1;
    if (local_1160 != uVar11) {
      pbVar36 = pbVar36 + lVar35;
      lVar38 = lVar38 + lVar35;
      if ((local_1160 & 1) == 0) {
        uVar34 = uVar33 & 0xffffffff;
        uVar32 = uVar22 & 0xffffffff;
        pbVar37 = pbVar36;
        lVar39 = lVar38;
      }
      else {
        uVar32 = (ulong)(uint)-iVar20;
        uVar34 = (ulong)(uint)-(int)uVar33;
        pbVar37 = pbVar36 + iVar18 * iVar20;
        lVar39 = lVar38 + iVar18 * (int)uVar33;
      }
      goto LAB_001f2308;
    }
  }
  return;
}


==================================================================

### FUNC 001f2acc (876 bytes) name=FUN_001f2acc

void FUN_001f2acc(long param_1,int *param_2)

{
  long lVar1;
  float *pfVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  long lVar7;
  undefined2 uVar8;
  undefined1 uVar9;
  undefined4 *puVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  int iVar14;
  int iVar15;
  float *pfVar16;
  int iVar17;
  long lVar18;
  float *pfVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar13 = *(long *)(param_1 + 0x28);
  iVar17 = *param_2;
  iVar14 = param_2[1];
  iVar3 = *(int *)(*(long *)(lVar13 + 0x40) + 4);
  if (iVar14 <= iVar17) {
    return;
  }
  lVar18 = (long)iVar17;
  do {
    iVar4 = *(int *)(param_1 + 8);
    uVar5 = *(int *)(param_1 + 0xc) * iVar4;
    pfVar19 = (float *)(*(long *)(lVar13 + 0x10) + lVar18 * **(long **)(lVar13 + 0x48));
    pfVar2 = (float *)(*(long *)(*(long *)(param_1 + 0x20) + 0x10) +
                      (-(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2) +
                      (long)(*(int *)(param_1 + 0xc) + iVar17) *
                      **(long **)(*(long *)(param_1 + 0x20) + 0x48));
    if (iVar4 == 1) {
      if (0 < iVar3) {
        iVar4 = *(int *)(param_1 + 0x10);
        lVar13 = 0;
        iVar15 = 0;
        fVar23 = *pfVar2;
        if (iVar4 < 1) goto LAB_001f2df8;
        do {
          fVar25 = 0.0;
          lVar12 = 0;
          fVar24 = fVar25;
          do {
            lVar1 = lVar12 * 4;
            lVar7 = lVar12 * 4;
            lVar12 = lVar12 + 1;
            fVar20 = ABS(pfVar2[iVar15 + *(int *)(*(long *)(param_1 + 0x18) + lVar1)] - fVar23) *
                     *(float *)(param_1 + 0x30);
            iVar6 = (int)fVar20 - (uint)(fVar20 < (float)(int)fVar20);
            lVar11 = ((long)iVar6 + 1) * 4;
            fVar22 = *(float *)(*(long *)(param_1 + 0x40) + lVar11 + -4);
            fVar22 = (fVar22 + (fVar20 - (float)iVar6) *
                               (*(float *)(*(long *)(param_1 + 0x40) + lVar11) - fVar22)) *
                     *(float *)(*(long *)(param_1 + 0x38) + lVar7);
            fVar25 = fVar25 + fVar22 * pfVar2[iVar15 + *(int *)(*(long *)(param_1 + 0x18) + lVar1)];
            fVar24 = fVar24 + fVar22;
          } while ((int)lVar12 < iVar4);
          pfVar19[lVar13] = fVar25 / fVar24;
          lVar13 = lVar13 + 1;
          iVar15 = (int)lVar13;
          while( true ) {
            if (iVar3 <= iVar15) goto LAB_001f2d00;
            iVar15 = (int)lVar13;
            fVar23 = pfVar2[lVar13];
            if (0 < iVar4) break;
LAB_001f2df8:
            pfVar19[lVar13] = -NAN;
            lVar13 = lVar13 + 1;
            iVar15 = (int)lVar13;
          }
        } while( true );
      }
    }
    else {
      if (iVar4 != 3) {
        local_10 = 0;
        local_8 = 0;
        puVar10 = (undefined4 *)cv::String::allocate((String *)&local_10,7);
        uVar8 = DAT_0045d4e4;
        *puVar10 = DAT_0045d4e0;
        uVar9 = DAT_0045d4e6;
        *(undefined2 *)(puVar10 + 1) = uVar8;
        *(undefined1 *)((long)puVar10 + 6) = uVar9;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::BilateralFilter_32f_Invoker::operator()(const cv::Range&) const"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xc98);
        cv::String::deallocate((String *)&local_10);
        iVar14 = param_2[1];
      }
      if (0 < iVar3 * 3) {
        iVar4 = *(int *)(param_1 + 0x10);
        lVar13 = 0;
        pfVar16 = pfVar2;
        do {
          fVar22 = 0.0;
          fVar23 = fVar22;
          fVar24 = fVar22;
          fVar25 = fVar22;
          if (0 < iVar4) {
            fVar23 = 0.0;
            fVar24 = 0.0;
            fVar25 = 0.0;
            lVar12 = 0;
            do {
              lVar1 = lVar12 * 4;
              lVar7 = lVar12 * 4;
              lVar12 = lVar12 + 1;
              lVar1 = lVar13 + *(int *)(*(long *)(param_1 + 0x18) + lVar1);
              fVar20 = (ABS(pfVar2[lVar1 + 1] - pfVar16[1]) + ABS(pfVar2[lVar1] - *pfVar16) +
                       ABS(pfVar2[lVar1 + 2] - pfVar16[2])) * *(float *)(param_1 + 0x30);
              iVar15 = (int)fVar20 - (uint)(fVar20 < (float)(int)fVar20);
              lVar11 = ((long)iVar15 + 1) * 4;
              fVar21 = *(float *)(*(long *)(param_1 + 0x40) + lVar11 + -4);
              fVar20 = (fVar21 + (fVar20 - (float)iVar15) *
                                 (*(float *)(*(long *)(param_1 + 0x40) + lVar11) - fVar21)) *
                       *(float *)(*(long *)(param_1 + 0x38) + lVar7);
              fVar25 = fVar25 + fVar20 * pfVar2[lVar1];
              fVar24 = fVar24 + fVar20 * pfVar2[lVar1 + 1];
              fVar23 = fVar23 + fVar20 * pfVar2[lVar1 + 2];
              fVar22 = fVar22 + fVar20;
            } while ((int)lVar12 < iVar4);
          }
          fVar22 = 1.0 / fVar22;
          lVar13 = lVar13 + 3;
          pfVar16 = pfVar16 + 3;
          *pfVar19 = fVar25 * fVar22;
          pfVar19[1] = fVar24 * fVar22;
          pfVar19[2] = fVar23 * fVar22;
          pfVar19 = pfVar19 + 3;
        } while ((int)lVar13 < iVar3 * 3);
      }
    }
LAB_001f2d00:
    iVar17 = iVar17 + 1;
    lVar18 = lVar18 + 1;
    if (iVar14 <= iVar17) {
      return;
    }
    lVar13 = *(long *)(param_1 + 0x28);
  } while( true );
}


==================================================================

### FUNC 001f2e4c (7620 bytes) name=FUN_001f2e4c

void FUN_001f2e4c(uint *param_1,long param_2,int param_3)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  long lVar20;
  byte bVar21;
  uint uVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  int iVar35;
  int iVar36;
  int iVar37;
  int iVar38;
  int iVar39;
  int iVar40;
  int iVar41;
  int iVar42;
  int iVar43;
  int iVar44;
  int iVar45;
  int iVar46;
  int iVar47;
  bool bVar48;
  char cVar49;
  int iVar50;
  long lVar51;
  long lVar52;
  byte *pbVar53;
  long lVar54;
  long lVar55;
  undefined1 (*pauVar56) [16];
  byte *pbVar57;
  undefined1 (*pauVar58) [16];
  undefined1 (*pauVar59) [16];
  int iVar60;
  int iVar61;
  uint uVar62;
  int iVar63;
  undefined1 (*pauVar64) [16];
  undefined8 *puVar65;
  long lVar66;
  long lVar67;
  undefined1 (*pauVar68) [16];
  undefined1 (*pauVar69) [16];
  int iVar70;
  int iVar71;
  uint uVar72;
  undefined1 auVar73 [16];
  undefined1 auVar74 [16];
  undefined1 auVar75 [16];
  undefined1 auVar76 [16];
  undefined1 auVar77 [16];
  undefined1 auVar78 [16];
  undefined1 auVar79 [16];
  undefined1 auVar80 [16];
  undefined1 auVar81 [16];
  undefined1 auVar82 [16];
  undefined1 auVar83 [16];
  undefined1 auVar84 [16];
  undefined1 auVar85 [16];
  undefined1 auVar86 [16];
  undefined1 auVar87 [16];
  undefined1 auVar88 [16];
  undefined1 auVar89 [16];
  undefined1 auVar90 [16];
  undefined1 auVar91 [16];
  undefined1 auVar92 [16];
  undefined1 auVar93 [16];
  undefined1 auVar94 [16];
  undefined1 auVar95 [16];
  undefined1 auVar96 [16];
  undefined1 auVar97 [16];
  undefined1 auVar98 [16];
  undefined1 auVar99 [16];
  undefined1 auVar100 [16];
  undefined1 auVar101 [16];
  undefined1 auVar102 [16];
  undefined1 auVar103 [16];
  undefined1 auVar104 [16];
  undefined1 auVar105 [16];
  undefined1 auVar106 [16];
  undefined1 auVar107 [16];
  undefined1 auVar108 [16];
  undefined1 auVar109 [16];
  undefined1 auVar110 [16];
  long local_98;
  int local_3c;
  int local_30;
  int local_2c;
  int local_20;
  
  uVar22 = *param_1 >> 3 & 0x1ff;
  local_98 = *(long *)(param_2 + 0x10);
  iVar5 = uVar22 + 1;
  iVar71 = (int)*(undefined8 *)(param_2 + 0x50);
  pbVar53 = *(byte **)(param_1 + 4);
  local_3c = **(int **)(param_2 + 0x40);
  local_30 = (int)*(undefined8 *)(param_1 + 0x14);
  iVar63 = (*(int **)(param_2 + 0x40))[1];
  cVar49 = cv::checkHardwareSupport(3);
  if (cVar49 == '\0') {
    cVar49 = cv::checkHardwareSupport(100);
  }
  if (param_3 != 3) {
    if (param_3 != 5) {
      return;
    }
    if (iVar63 == 1) {
      iVar50 = local_3c + 1;
      if (local_3c != 1) {
        iVar63 = local_30 - iVar5;
        goto LAB_001f4a64;
      }
      iVar50 = 2;
    }
    else {
      if (local_3c != 1) {
        uVar22 = iVar63 * iVar5;
        if (local_3c < 1) {
          return;
        }
        iVar61 = local_3c + -1;
        iVar50 = iVar5 * -2;
        uVar72 = iVar5 * 2;
        iVar63 = (uVar22 - 0x10) + iVar50;
        local_2c = 0;
        local_20 = 1;
        pbVar57 = pbVar53;
LAB_001f3340:
        iVar60 = 0;
        iVar46 = local_2c + -2;
        if (iVar46 < 0) {
          iVar46 = 0;
        }
        iVar47 = local_2c + -1;
        local_2c = local_20;
        if (iVar47 < 0) {
          iVar47 = 0;
        }
        iVar70 = local_20;
        if (iVar61 < local_20) {
          iVar70 = iVar61;
        }
        iVar6 = local_20 + 1;
        iVar23 = iVar61;
        if (iVar6 < iVar61) {
          iVar23 = iVar6;
        }
        iVar46 = local_30 * iVar46;
        iVar47 = local_30 * iVar47;
        iVar70 = local_30 * iVar70;
        iVar23 = local_30 * iVar23;
        uVar62 = uVar22;
        if (cVar49 != '\0') {
          uVar62 = uVar72;
        }
        do {
          if ((int)uVar62 <= iVar60) {
            do {
              if (uVar62 == uVar22) {
                bVar48 = local_20 == local_3c;
                local_98 = local_98 + iVar71;
                pbVar57 = pbVar57 + local_30;
                local_20 = iVar6;
                if (bVar48) {
                  return;
                }
                goto LAB_001f3340;
              }
              if (iVar60 <= iVar63) {
                lVar51 = (long)iVar60;
                lVar54 = 0;
                do {
                  iVar60 = iVar60 + 0x10;
                  lVar67 = lVar51 + lVar54;
                  lVar66 = (lVar51 - (ulong)uVar72) + lVar54;
                  lVar52 = (lVar51 - iVar5) + lVar54;
                  lVar55 = iVar5 + lVar51 + lVar54;
                  lVar20 = (ulong)uVar72 + lVar51 + lVar54;
                  auVar90 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar47),
                                      *(undefined1 (*) [16])(pbVar53 + lVar67 + iVar47),1);
                  auVar74 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar67 + iVar47),
                                      *(undefined1 (*) [16])(pbVar53 + lVar55 + iVar47),1);
                  auVar102 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar20 + iVar46),
                                       *(undefined1 (*) [16])(pbVar53 + lVar66 + iVar47),1);
                  auVar88 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar47),
                                      *(undefined1 (*) [16])(pbVar53 + lVar20 + iVar46),1);
                  auVar104 = NEON_umax(auVar102,*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar46),1)
                  ;
                  auVar73 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar52 + iVar70),
                                      *(undefined1 (*) [16])(pbVar53 + lVar67 + iVar70),1);
                  auVar84 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar67 + iVar70),
                                      *(undefined1 (*) [16])(pbVar53 + lVar52 + iVar70),1);
                  auVar87 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar52 + iVar23),
                                      *(undefined1 (*) [16])(pbVar53 + lVar67 + iVar23),1);
                  auVar80 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar67 + iVar23),
                                      *(undefined1 (*) [16])(pbVar53 + lVar52 + iVar23),1);
                  auVar85 = NEON_umax(auVar73,*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar70),1);
                  auVar92 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar67 + iVar46),
                                      *(undefined1 (*) [16])(pbVar53 + lVar52 + iVar46),1);
                  auVar94 = NEON_umin(*(undefined1 (*) [16])(pbVar57 + lVar66),
                                      *(undefined1 (*) [16])(pbVar57 + lVar52),1);
                  auVar75 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar52 + iVar46),
                                      *(undefined1 (*) [16])(pbVar53 + lVar67 + iVar46),1);
                  auVar76 = NEON_umin(*(undefined1 (*) [16])(pbVar57 + lVar55),
                                      *(undefined1 (*) [16])(pbVar57 + lVar20),1);
                  auVar103 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar46),auVar102,1)
                  ;
                  auVar102 = NEON_umax(auVar88,auVar104,1);
                  lVar54 = lVar54 + 0x10;
                  auVar81 = NEON_umax(*(undefined1 (*) [16])(pbVar57 + lVar52),
                                      *(undefined1 (*) [16])(pbVar57 + lVar66),1);
                  auVar86 = NEON_umax(*(undefined1 (*) [16])(pbVar57 + lVar20),
                                      *(undefined1 (*) [16])(pbVar57 + lVar55),1);
                  auVar97 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar23),
                                      *(undefined1 (*) [16])(pbVar53 + lVar20 + iVar23),1);
                  auVar96 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar20 + iVar70),
                                      *(undefined1 (*) [16])(pbVar53 + lVar66 + iVar23),1);
                  auVar99 = NEON_umax(auVar94,*(undefined1 (*) [16])(pbVar53 + lVar20 + iVar47),1);
                  auVar82 = NEON_umax(auVar76,*(undefined1 (*) [16])(pbVar57 + lVar67),1);
                  auVar106 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar20 + iVar47),auVar94,1);
                  auVar79 = NEON_umax(auVar74,*(undefined1 (*) [16])(pbVar53 + lVar52 + iVar47),1);
                  auVar76 = NEON_umin(*(undefined1 (*) [16])(pbVar57 + lVar67),auVar76,1);
                  auVar94 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar52 + iVar47),auVar74,1);
                  auVar107 = NEON_umax(auVar97,auVar87,1);
                  auVar78 = NEON_umax(auVar90,auVar79,1);
                  auVar74 = NEON_umax(auVar86,auVar82,1);
                  auVar83 = NEON_umin(auVar82,auVar86,1);
                  auVar77 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar70),auVar96,1);
                  auVar97 = NEON_umin(auVar87,auVar97,1);
                  auVar82 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar20 + iVar23),
                                      *(undefined1 (*) [16])(pbVar53 + lVar55 + iVar23),1);
                  auVar86 = NEON_umin(auVar79,auVar90,1);
                  auVar87 = NEON_umax(auVar75,*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar46),1);
                  auVar91 = NEON_umax(auVar106,auVar94,1);
                  auVar89 = NEON_umin(auVar80,auVar82,1);
                  auVar73 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar70),auVar73,1);
                  auVar104 = NEON_umin(auVar104,auVar88,1);
                  auVar79 = NEON_umin(*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar46),auVar75,1);
                  auVar75 = NEON_umax(auVar82,auVar80,1);
                  auVar82 = NEON_umax(auVar84,auVar85,1);
                  auVar88 = NEON_umin(auVar85,auVar84,1);
                  auVar101 = NEON_umax(auVar92,auVar87,1);
                  auVar84 = NEON_umax(auVar97,auVar77,1);
                  auVar85 = NEON_umin(auVar87,auVar92,1);
                  auVar95 = NEON_umax(auVar81,auVar99,1);
                  auVar105 = NEON_umax(auVar73,auVar76,1);
                  auVar92 = NEON_umax(*(undefined1 (*) [16])(pbVar53 + lVar66 + iVar23),
                                      *(undefined1 (*) [16])(pbVar53 + lVar20 + iVar70),1);
                  auVar109 = NEON_umax(auVar103,auVar79,1);
                  auVar93 = NEON_umin(auVar101,auVar102,1);
                  auVar80 = NEON_umin(auVar99,auVar81,1);
                  auVar99 = NEON_umin(auVar74,auVar82,1);
                  auVar81 = NEON_umax(auVar96,*(undefined1 (*) [16])(pbVar53 + lVar55 + iVar70),1);
                  auVar108 = NEON_umin(auVar78,auVar95,1);
                  auVar90 = NEON_umin(auVar85,auVar104,1);
                  auVar100 = NEON_umax(auVar104,auVar85,1);
                  auVar96 = NEON_umin(auVar81,auVar92,1);
                  auVar104 = NEON_umin(auVar99,auVar105,1);
                  auVar98 = NEON_umin(auVar89,auVar107,1);
                  auVar87 = NEON_umin(auVar93,auVar109,1);
                  auVar92 = NEON_umax(auVar92,auVar81,1);
                  auVar110 = NEON_umax(auVar109,auVar93,1);
                  auVar89 = NEON_umax(auVar107,auVar89,1);
                  auVar93 = NEON_umin(auVar108,auVar91,1);
                  auVar109 = NEON_umax(auVar91,auVar108,1);
                  auVar81 = NEON_umin(auVar86,auVar80,1);
                  auVar80 = NEON_umax(auVar80,auVar86,1);
                  auVar85 = NEON_umax(auVar105,auVar99,1);
                  auVar107 = NEON_umin(auVar83,auVar88,1);
                  auVar83 = NEON_umax(auVar88,auVar83,1);
                  auVar105 = NEON_umin(auVar92,auVar89,1);
                  auVar88 = NEON_umax(auVar98,auVar96,1);
                  auVar99 = NEON_umin(auVar96,auVar98,1);
                  auVar86 = NEON_umin(auVar79,auVar103,1);
                  auVar98 = NEON_umin(auVar88,auVar75,1);
                  auVar75 = NEON_umax(auVar75,auVar88,1);
                  auVar91 = NEON_umin(auVar105,auVar84,1);
                  auVar108 = NEON_umax(auVar84,auVar105,1);
                  auVar79 = NEON_umax(auVar89,auVar92,1);
                  auVar89 = NEON_umax(auVar100,auVar110,1);
                  auVar78 = NEON_umax(auVar95,auVar78,1);
                  auVar77 = NEON_umin(auVar77,auVar97,1);
                  auVar96 = NEON_umax(auVar91,auVar99,1);
                  auVar92 = NEON_umax(auVar102,auVar101,1);
                  auVar103 = NEON_umin(auVar94,auVar106,1);
                  auVar94 = NEON_umax(auVar80,auVar109,1);
                  auVar80 = NEON_umin(auVar109,auVar80,1);
                  auVar88 = NEON_umin(auVar90,auVar87,1);
                  auVar106 = NEON_umin(auVar79,auVar75,1);
                  auVar84 = NEON_umax(auVar87,auVar90,1);
                  auVar87 = NEON_umax(auVar75,auVar79,1);
                  auVar75 = NEON_umax(auVar103,auVar86,1);
                  auVar90 = NEON_umin(auVar99,auVar91,1);
                  auVar95 = NEON_umin(auVar76,auVar73,1);
                  auVar91 = NEON_umax(auVar98,auVar108,1);
                  auVar105 = NEON_umin(auVar81,auVar93,1);
                  auVar76 = NEON_umax(auVar93,auVar81,1);
                  auVar79 = NEON_umax(auVar82,auVar74,1);
                  auVar73 = NEON_umin(auVar107,auVar104,1);
                  auVar109 = NEON_umax(auVar105,auVar88,1);
                  auVar99 = NEON_umin(auVar92,auVar78,1);
                  auVar101 = NEON_umin(auVar79,auVar106,1);
                  auVar102 = NEON_umax(auVar104,auVar107,1);
                  auVar97 = NEON_umax(auVar83,auVar85,1);
                  auVar81 = NEON_umin(auVar85,auVar83,1);
                  auVar86 = NEON_umin(auVar86,auVar103,1);
                  auVar83 = NEON_umax(auVar96,auVar102,1);
                  auVar74 = NEON_umin(auVar110,auVar100,1);
                  auVar85 = NEON_umin(auVar89,auVar94,1);
                  auVar82 = NEON_umin(auVar108,auVar98,1);
                  auVar93 = NEON_umin(auVar102,auVar96,1);
                  auVar98 = NEON_umax(auVar77,auVar95,1);
                  auVar100 = NEON_umin(auVar85,auVar75,1);
                  auVar96 = NEON_umax(auVar75,auVar85,1);
                  auVar108 = NEON_umin(auVar84,auVar76,1);
                  auVar75 = NEON_umin(auVar97,auVar91,1);
                  auVar84 = NEON_umax(auVar76,auVar84,1);
                  auVar85 = NEON_umin(auVar99,auVar109,1);
                  auVar99 = NEON_umax(auVar109,auVar99,1);
                  auVar107 = NEON_umin(auVar74,auVar80,1);
                  auVar104 = NEON_umax(auVar80,auVar74,1);
                  auVar74 = NEON_umax(auVar90,auVar73,1);
                  auVar92 = NEON_umax(auVar78,auVar92,1);
                  auVar76 = NEON_umin(auVar95,auVar77,1);
                  auVar102 = NEON_umin(auVar101,auVar74,1);
                  auVar86 = NEON_umax(auVar76,auVar86,1);
                  auVar91 = NEON_umax(auVar91,auVar97,1);
                  auVar76 = NEON_umax(auVar82,auVar81,1);
                  auVar78 = NEON_umin(auVar75,auVar98,1);
                  auVar103 = NEON_umax(auVar98,auVar75,1);
                  auVar98 = NEON_umin(auVar83,auVar87,1);
                  auVar97 = NEON_umax(auVar87,auVar83,1);
                  auVar87 = NEON_umax(auVar74,auVar101,1);
                  auVar95 = NEON_umin(auVar81,auVar82,1);
                  auVar80 = NEON_umin(auVar88,auVar105,1);
                  auVar77 = NEON_umin(auVar107,auVar85,1);
                  auVar75 = NEON_umax(auVar84,auVar96,1);
                  auVar74 = NEON_umax(auVar94,auVar89,1);
                  auVar101 = NEON_umax(auVar98,auVar103,1);
                  auVar89 = NEON_umin(auVar103,auVar98,1);
                  auVar82 = NEON_umin(auVar108,auVar100,1);
                  auVar83 = NEON_umin(auVar73,auVar90,1);
                  auVar105 = NEON_umax(auVar100,auVar108,1);
                  auVar98 = NEON_umin(auVar99,auVar104,1);
                  auVar73 = NEON_umax(auVar104,auVar99,1);
                  auVar104 = NEON_umin(auVar93,auVar78,1);
                  auVar88 = NEON_umax(auVar78,auVar93,1);
                  auVar78 = NEON_umin(auVar91,auVar97,1);
                  auVar97 = NEON_umax(auVar97,auVar91,1);
                  auVar90 = NEON_umax(auVar106,auVar79,1);
                  auVar100 = NEON_umin(auVar87,auVar76,1);
                  auVar81 = NEON_umax(auVar85,auVar107,1);
                  auVar79 = NEON_umax(auVar76,auVar87,1);
                  auVar103 = NEON_umin(auVar80,auVar82,1);
                  auVar85 = NEON_umin(auVar96,auVar84,1);
                  auVar96 = NEON_umax(auVar82,auVar80,1);
                  auVar93 = NEON_umin(auVar77,auVar105,1);
                  auVar76 = NEON_umin(auVar95,auVar102,1);
                  auVar82 = NEON_umin(auVar90,auVar97,1);
                  auVar99 = NEON_umax(auVar102,auVar95,1);
                  auVar80 = NEON_umax(auVar74,auVar73,1);
                  auVar87 = NEON_umin(auVar73,auVar74,1);
                  auVar94 = NEON_umin(auVar83,auVar104,1);
                  auVar102 = NEON_umin(auVar79,auVar78,1);
                  auVar95 = NEON_umax(auVar105,auVar77,1);
                  auVar91 = NEON_umax(auVar75,auVar98,1);
                  auVar74 = NEON_umax(auVar88,auVar76,1);
                  auVar84 = NEON_umax(auVar104,auVar83,1);
                  auVar79 = NEON_umax(auVar78,auVar79,1);
                  auVar104 = NEON_umin(auVar76,auVar88,1);
                  auVar78 = NEON_umax(auVar101,auVar100,1);
                  auVar73 = NEON_umin(auVar81,auVar85,1);
                  auVar83 = NEON_umin(auVar98,auVar75,1);
                  auVar77 = NEON_umax(auVar85,auVar81,1);
                  auVar81 = NEON_umin(auVar99,auVar89,1);
                  auVar88 = NEON_umax(auVar97,auVar90,1);
                  auVar76 = NEON_umax(auVar74,auVar95,1);
                  auVar79 = NEON_umin(auVar80,auVar79,1);
                  auVar85 = NEON_umin(auVar87,auVar102,1);
                  auVar102 = NEON_umin(auVar92,auVar82,1);
                  auVar87 = NEON_umax(auVar89,auVar99,1);
                  auVar80 = NEON_umin(auVar100,auVar101,1);
                  auVar74 = NEON_umin(auVar91,auVar78,1);
                  auVar78 = NEON_umax(auVar84,auVar96,1);
                  auVar75 = NEON_umax(auVar94,auVar103,1);
                  auVar82 = NEON_umax(auVar104,auVar93,1);
                  auVar74 = NEON_umax(auVar86,auVar74,1);
                  auVar76 = NEON_umin(auVar76,auVar88,1);
                  auVar73 = NEON_umax(auVar81,auVar73,1);
                  auVar82 = NEON_umin(auVar102,auVar82,1);
                  auVar94 = NEON_umin(auVar79,auVar78,1);
                  auVar102 = NEON_umin(auVar77,auVar87,1);
                  auVar75 = NEON_umax(auVar75,auVar85,1);
                  auVar79 = NEON_umin(auVar83,auVar80,1);
                  auVar76 = NEON_umin(auVar74,auVar76,1);
                  auVar102 = NEON_umax(auVar94,auVar102,1);
                  auVar74 = NEON_umin(auVar75,auVar73,1);
                  auVar73 = NEON_umax(auVar82,auVar79,1);
                  auVar102 = NEON_umax(auVar76,auVar102,1);
                  auVar73 = NEON_umin(auVar73,auVar74,1);
                  auVar73 = NEON_umax(auVar102,auVar73,1);
                  ((undefined8 *)(local_98 + lVar67))[1] = auVar73._8_8_;
                  *(undefined8 *)(local_98 + lVar67) = auVar73._0_8_;
                } while (iVar60 <= iVar63);
              }
              uVar62 = uVar22;
            } while ((int)uVar22 <= iVar60);
          }
          lVar54 = (long)iVar60;
          iVar15 = iVar60 - iVar5;
          if (iVar60 < iVar5) {
            iVar15 = iVar60;
          }
          iVar7 = iVar50 + iVar60;
          if (iVar60 < (int)uVar72) {
            iVar7 = iVar15;
          }
          iVar19 = iVar60 + iVar5;
          if ((int)(uVar22 - iVar5) <= iVar60) {
            iVar19 = iVar60;
          }
          lVar51 = (long)iVar7;
          iVar7 = iVar60 + uVar72;
          if ((int)(uVar22 + iVar50) <= iVar60) {
            iVar7 = iVar19;
          }
          lVar67 = (long)iVar7;
          iVar60 = iVar60 + 1;
          iVar24 = (uint)pbVar53[(long)iVar15 + (long)iVar46] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar46] -
                                      (uint)pbVar53[lVar54 + iVar46]) + 0x100)];
          iVar25 = (uint)pbVar53[lVar67 + iVar46] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar67 + iVar46] -
                                      (uint)pbVar53[lVar51 + iVar47]) + 0x100)];
          iVar7 = (uint)(byte)PTR_DAT_00501b38
                              [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar46] -
                                     (uint)pbVar53[lVar54 + iVar46]) + 0x100)] +
                  (uint)pbVar53[lVar54 + iVar46];
          iVar8 = (uint)(byte)PTR_DAT_00501b38
                              [(int)(((uint)pbVar53[lVar67 + iVar46] -
                                     (uint)pbVar53[lVar51 + iVar47]) + 0x100)] +
                  (uint)pbVar53[lVar51 + iVar47];
          iVar26 = (uint)pbVar53[lVar51 + iVar46] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar51 + iVar46] - iVar24) + 0x100)];
          iVar24 = iVar24 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar53[lVar51 + iVar46] - iVar24) + 0x100)];
          iVar9 = iVar25 + (uint)(byte)PTR_DAT_00501b38
                                       [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar46] - iVar25)
                                             + 0x100)];
          iVar27 = (uint)pbVar53[(long)iVar19 + (long)iVar46] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar46] - iVar25) + 0x100)
                               ];
          iVar25 = iVar7 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar7) + 0x100];
          iVar24 = iVar24 - (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar7) + 0x100];
          iVar10 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar9 - iVar8) + 0x100];
          iVar9 = iVar9 - (uint)(byte)PTR_DAT_00501b38[(iVar9 - iVar8) + 0x100];
          iVar28 = iVar24 - (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar9) + 0x100];
          iVar9 = iVar9 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar9) + 0x100];
          iVar29 = (uint)pbVar53[lVar54 + iVar47] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar54 + iVar47] -
                                      (uint)pbVar53[(long)iVar19 + (long)iVar47]) + 0x100)];
          iVar11 = iVar27 + (uint)(byte)PTR_DAT_00501b38[(iVar26 - iVar27) + 0x100];
          iVar30 = (uint)pbVar57[lVar51] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar57[lVar51] - (uint)pbVar57[iVar15]) + 0x100)];
          iVar31 = iVar25 - (uint)(byte)PTR_DAT_00501b38[(iVar25 - iVar10) + 0x100];
          iVar7 = (uint)(byte)PTR_DAT_00501b38
                              [(int)(((uint)pbVar53[lVar54 + iVar47] -
                                     (uint)pbVar53[(long)iVar19 + (long)iVar47]) + 0x100)] +
                  (uint)pbVar53[(long)iVar19 + (long)iVar47];
          iVar8 = (uint)(byte)PTR_DAT_00501b38
                              [(int)(((uint)pbVar57[lVar51] - (uint)pbVar57[iVar15]) + 0x100)] +
                  (uint)pbVar57[iVar15];
          iVar24 = iVar29 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar47] - iVar29)
                                              + 0x100)];
          iVar12 = iVar30 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar53[lVar67 + iVar47] - iVar30) + 0x100)];
          iVar32 = (uint)pbVar53[lVar67 + iVar47] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar67 + iVar47] - iVar30) + 0x100)];
          iVar33 = (uint)pbVar53[(long)iVar15 + (long)iVar47] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar47] - iVar29) + 0x100)
                               ];
          iVar30 = iVar31 - (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar11) + 0x100];
          iVar11 = iVar11 + (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar11) + 0x100];
          iVar13 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar12 - iVar8) + 0x100];
          iVar29 = iVar7 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar7) + 0x100];
          iVar24 = iVar24 - (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar7) + 0x100];
          iVar12 = iVar12 - (uint)(byte)PTR_DAT_00501b38[(iVar12 - iVar8) + 0x100];
          iVar8 = iVar32 + (uint)(byte)PTR_DAT_00501b38[(iVar33 - iVar32) + 0x100];
          iVar31 = iVar29 - (uint)(byte)PTR_DAT_00501b38[(iVar29 - iVar13) + 0x100];
          iVar13 = iVar13 + (uint)(byte)PTR_DAT_00501b38[(iVar29 - iVar13) + 0x100];
          iVar34 = iVar24 - (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar12) + 0x100];
          iVar12 = iVar12 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar12) + 0x100];
          iVar26 = iVar26 - (uint)(byte)PTR_DAT_00501b38[(iVar26 - iVar27) + 0x100];
          iVar10 = iVar10 + (uint)(byte)PTR_DAT_00501b38[(iVar25 - iVar10) + 0x100];
          iVar35 = iVar28 - (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar30) + 0x100];
          iVar7 = iVar9 + (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar9) + 0x100];
          iVar29 = iVar31 - (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar8) + 0x100];
          iVar8 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar8) + 0x100];
          iVar33 = iVar33 - (uint)(byte)PTR_DAT_00501b38[(iVar33 - iVar32) + 0x100];
          iVar30 = iVar30 + (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar30) + 0x100];
          iVar28 = iVar34 - (uint)(byte)PTR_DAT_00501b38[(iVar34 - iVar29) + 0x100];
          iVar27 = iVar12 + (uint)(byte)PTR_DAT_00501b38[(iVar8 - iVar12) + 0x100];
          iVar11 = iVar11 - (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar9) + 0x100];
          iVar29 = iVar29 + (uint)(byte)PTR_DAT_00501b38[(iVar34 - iVar29) + 0x100];
          iVar8 = iVar8 - (uint)(byte)PTR_DAT_00501b38[(iVar8 - iVar12) + 0x100];
          iVar24 = iVar33 + (uint)(byte)PTR_DAT_00501b38[(iVar26 - iVar33) + 0x100];
          iVar25 = iVar28 + (uint)(byte)PTR_DAT_00501b38[(iVar35 - iVar28) + 0x100];
          iVar31 = iVar10 - (uint)(byte)PTR_DAT_00501b38[(iVar10 - iVar13) + 0x100];
          iVar9 = iVar7 - (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar27) + 0x100];
          iVar12 = iVar30 - (uint)(byte)PTR_DAT_00501b38[(iVar30 - iVar29) + 0x100];
          iVar29 = iVar29 + (uint)(byte)PTR_DAT_00501b38[(iVar30 - iVar29) + 0x100];
          iVar27 = iVar27 + (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar27) + 0x100];
          iVar35 = iVar35 - (uint)(byte)PTR_DAT_00501b38[(iVar35 - iVar28) + 0x100];
          iVar7 = iVar25 + (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar25) + 0x100];
          iVar31 = iVar31 - (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar25) + 0x100];
          iVar25 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar8) + 0x100];
          iVar11 = iVar11 - (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar8) + 0x100];
          iVar8 = iVar24 + (uint)(byte)PTR_DAT_00501b38[(iVar9 - iVar24) + 0x100];
          iVar9 = iVar9 - (uint)(byte)PTR_DAT_00501b38[(iVar9 - iVar24) + 0x100];
          iVar24 = iVar31 + (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar31) + 0x100];
          iVar13 = iVar13 + (uint)(byte)PTR_DAT_00501b38[(iVar10 - iVar13) + 0x100];
          iVar36 = iVar12 - (uint)(byte)PTR_DAT_00501b38[(iVar12 - iVar9) + 0x100];
          iVar9 = iVar9 + (uint)(byte)PTR_DAT_00501b38[(iVar12 - iVar9) + 0x100];
          iVar12 = iVar29 + (uint)(byte)PTR_DAT_00501b38[(iVar8 - iVar29) + 0x100];
          iVar8 = iVar8 - (uint)(byte)PTR_DAT_00501b38[(iVar8 - iVar29) + 0x100];
          iVar11 = iVar11 - (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar31) + 0x100];
          iVar29 = iVar25 + (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar25) + 0x100];
          iVar7 = iVar7 - (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar25) + 0x100];
          iVar37 = (uint)pbVar57[iVar19] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar57[iVar19] - (uint)pbVar57[lVar67]) + 0x100)];
          iVar25 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar8) + 0x100];
          iVar10 = iVar12 + (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar12) + 0x100];
          iVar30 = iVar27 + (uint)(byte)PTR_DAT_00501b38[(iVar29 - iVar27) + 0x100];
          iVar28 = (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar23] -
                                      (uint)pbVar53[lVar54 + iVar23]) + 0x100)] +
                   (uint)pbVar53[lVar54 + iVar23];
          iVar38 = (uint)pbVar53[(long)iVar15 + (long)iVar70] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar70] -
                                      (uint)pbVar53[lVar54 + iVar70]) + 0x100)];
          iVar39 = (uint)pbVar53[lVar67 + iVar70] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar67 + iVar70] -
                                      (uint)pbVar53[lVar51 + iVar23]) + 0x100)];
          iVar40 = (uint)pbVar53[(long)iVar15 + (long)iVar23] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar23] -
                                      (uint)pbVar53[lVar54 + iVar23]) + 0x100)];
          iVar14 = (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar23] -
                                      (uint)pbVar53[lVar67 + iVar23]) + 0x100)] +
                   (uint)pbVar53[lVar67 + iVar23];
          iVar41 = (uint)pbVar53[(long)iVar19 + (long)iVar23] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar23] -
                                      (uint)pbVar53[lVar67 + iVar23]) + 0x100)];
          iVar31 = (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar57[iVar19] - (uint)pbVar57[lVar67]) + 0x100)] +
                   (uint)pbVar57[lVar67];
          iVar15 = (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar15 + (long)iVar70] -
                                      (uint)pbVar53[lVar54 + iVar70]) + 0x100)] +
                   (uint)pbVar53[lVar54 + iVar70];
          iVar32 = iVar37 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar57[lVar54] - iVar37) + 0x100)];
          iVar16 = iVar38 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar53[lVar51 + iVar70] - iVar38) + 0x100)];
          iVar34 = (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar67 + iVar70] -
                                      (uint)pbVar53[lVar51 + iVar23]) + 0x100)] +
                   (uint)pbVar53[lVar51 + iVar23];
          iVar17 = iVar39 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar70] - iVar39)
                                              + 0x100)];
          iVar18 = iVar41 + (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar41) + 0x100];
          iVar42 = iVar28 - (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar14) + 0x100];
          iVar43 = (uint)pbVar57[lVar54] -
                   (uint)(byte)PTR_DAT_00501b38[(int)(((uint)pbVar57[lVar54] - iVar37) + 0x100)];
          iVar44 = (uint)pbVar53[lVar51 + iVar70] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[lVar51 + iVar70] - iVar38) + 0x100)];
          iVar45 = (uint)pbVar53[(long)iVar19 + (long)iVar70] -
                   (uint)(byte)PTR_DAT_00501b38
                               [(int)(((uint)pbVar53[(long)iVar19 + (long)iVar70] - iVar39) + 0x100)
                               ];
          iVar19 = iVar34 + (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar34) + 0x100];
          iVar37 = iVar31 + (uint)(byte)PTR_DAT_00501b38[(iVar32 - iVar31) + 0x100];
          iVar38 = iVar15 + (uint)(byte)PTR_DAT_00501b38[(iVar16 - iVar15) + 0x100];
          iVar17 = iVar17 - (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar34) + 0x100];
          iVar40 = iVar40 - (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar41) + 0x100];
          iVar41 = iVar18 + (uint)(byte)PTR_DAT_00501b38[(iVar42 - iVar18) + 0x100];
          iVar42 = iVar42 - (uint)(byte)PTR_DAT_00501b38[(iVar42 - iVar18) + 0x100];
          iVar32 = iVar32 - (uint)(byte)PTR_DAT_00501b38[(iVar32 - iVar31) + 0x100];
          iVar16 = iVar16 - (uint)(byte)PTR_DAT_00501b38[(iVar16 - iVar15) + 0x100];
          iVar34 = iVar37 - (uint)(byte)PTR_DAT_00501b38[(iVar37 - iVar38) + 0x100];
          iVar14 = iVar14 + (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar14) + 0x100];
          iVar15 = iVar44 + (uint)(byte)PTR_DAT_00501b38[(iVar43 - iVar44) + 0x100];
          iVar28 = iVar40 + (uint)(byte)PTR_DAT_00501b38[(iVar45 - iVar40) + 0x100];
          iVar18 = iVar19 - (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar41) + 0x100];
          iVar31 = iVar42 + (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar42) + 0x100];
          iVar17 = iVar17 - (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar42) + 0x100];
          iVar43 = iVar43 - (uint)(byte)PTR_DAT_00501b38[(iVar43 - iVar44) + 0x100];
          iVar45 = iVar45 - (uint)(byte)PTR_DAT_00501b38[(iVar45 - iVar40) + 0x100];
          iVar41 = iVar41 + (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar41) + 0x100];
          iVar19 = iVar15 + (uint)(byte)PTR_DAT_00501b38[(iVar34 - iVar15) + 0x100];
          iVar34 = iVar34 - (uint)(byte)PTR_DAT_00501b38[(iVar34 - iVar15) + 0x100];
          iVar40 = iVar32 - (uint)(byte)PTR_DAT_00501b38[(iVar32 - iVar16) + 0x100];
          iVar16 = iVar16 + (uint)(byte)PTR_DAT_00501b38[(iVar32 - iVar16) + 0x100];
          iVar15 = iVar28 + (uint)(byte)PTR_DAT_00501b38[(iVar18 - iVar28) + 0x100];
          iVar18 = iVar18 - (uint)(byte)PTR_DAT_00501b38[(iVar18 - iVar28) + 0x100];
          iVar44 = iVar31 - (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar14) + 0x100];
          iVar14 = iVar14 + (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar14) + 0x100];
          iVar28 = iVar34 + (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar34) + 0x100];
          iVar31 = iVar16 + (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar16) + 0x100];
          iVar32 = iVar18 + (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar18) + 0x100];
          iVar39 = iVar44 + (uint)(byte)PTR_DAT_00501b38[(iVar15 - iVar44) + 0x100];
          iVar38 = iVar38 + (uint)(byte)PTR_DAT_00501b38[(iVar37 - iVar38) + 0x100];
          iVar40 = iVar40 - (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar34) + 0x100];
          iVar17 = iVar17 - (uint)(byte)PTR_DAT_00501b38[(iVar17 - iVar18) + 0x100];
          iVar34 = iVar14 + (uint)(byte)PTR_DAT_00501b38[(iVar41 - iVar14) + 0x100];
          iVar41 = iVar41 - (uint)(byte)PTR_DAT_00501b38[(iVar41 - iVar14) + 0x100];
          iVar37 = iVar45 + (uint)(byte)PTR_DAT_00501b38[(iVar43 - iVar45) + 0x100];
          iVar14 = iVar31 - (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar39) + 0x100];
          iVar18 = iVar32 + (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar32) + 0x100];
          iVar19 = iVar19 - (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar16) + 0x100];
          iVar15 = iVar15 - (uint)(byte)PTR_DAT_00501b38[(iVar15 - iVar44) + 0x100];
          iVar16 = iVar14 - (uint)(byte)PTR_DAT_00501b38[(iVar14 - iVar37) + 0x100];
          iVar39 = iVar39 + (uint)(byte)PTR_DAT_00501b38[(iVar31 - iVar39) + 0x100];
          iVar37 = iVar37 + (uint)(byte)PTR_DAT_00501b38[(iVar14 - iVar37) + 0x100];
          iVar31 = iVar17 + (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar17) + 0x100];
          iVar44 = iVar38 - (uint)(byte)PTR_DAT_00501b38[(iVar38 - iVar41) + 0x100];
          iVar28 = iVar28 - (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar32) + 0x100];
          iVar14 = iVar34 + (uint)(byte)PTR_DAT_00501b38[(iVar18 - iVar34) + 0x100];
          iVar18 = iVar18 - (uint)(byte)PTR_DAT_00501b38[(iVar18 - iVar34) + 0x100];
          iVar32 = iVar15 + (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar15) + 0x100];
          iVar19 = iVar19 - (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar15) + 0x100];
          iVar15 = iVar31 + (uint)(byte)PTR_DAT_00501b38[(iVar44 - iVar31) + 0x100];
          iVar44 = iVar44 - (uint)(byte)PTR_DAT_00501b38[(iVar44 - iVar31) + 0x100];
          iVar40 = iVar40 - (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar17) + 0x100];
          iVar43 = iVar43 - (uint)(byte)PTR_DAT_00501b38[(iVar43 - iVar45) + 0x100];
          iVar31 = iVar28 - (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar16) + 0x100];
          iVar16 = iVar16 + (uint)(byte)PTR_DAT_00501b38[(iVar28 - iVar16) + 0x100];
          iVar34 = iVar15 - (uint)(byte)PTR_DAT_00501b38[(iVar15 - iVar32) + 0x100];
          iVar32 = iVar32 + (uint)(byte)PTR_DAT_00501b38[(iVar15 - iVar32) + 0x100];
          iVar15 = iVar18 + (uint)(byte)PTR_DAT_00501b38[(iVar37 - iVar18) + 0x100];
          iVar17 = iVar39 - (uint)(byte)PTR_DAT_00501b38[(iVar39 - iVar14) + 0x100];
          iVar42 = iVar19 - (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar44) + 0x100];
          iVar37 = iVar37 - (uint)(byte)PTR_DAT_00501b38[(iVar37 - iVar18) + 0x100];
          iVar14 = iVar14 + (uint)(byte)PTR_DAT_00501b38[(iVar39 - iVar14) + 0x100];
          iVar41 = iVar41 + (uint)(byte)PTR_DAT_00501b38[(iVar38 - iVar41) + 0x100];
          iVar44 = iVar44 + (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar44) + 0x100];
          iVar19 = iVar31 + (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar31) + 0x100];
          iVar28 = iVar16 + (uint)(byte)PTR_DAT_00501b38[(iVar42 - iVar16) + 0x100];
          iVar29 = iVar29 - (uint)(byte)PTR_DAT_00501b38[(iVar29 - iVar27) + 0x100];
          iVar40 = iVar40 - (uint)(byte)PTR_DAT_00501b38[(iVar40 - iVar31) + 0x100];
          iVar28 = iVar28 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar9 + (uint)(byte)PTR_DAT_00501b38
                                                                     [(iVar11 - iVar9) + 0x100]) -
                                               iVar28) + 0x100)];
          iVar30 = iVar30 - (uint)(byte)PTR_DAT_00501b38
                                        [(int)((iVar30 - (iVar17 + (uint)(byte)PTR_DAT_00501b38
                                                                               [(iVar32 - iVar17) +
                                                                                0x100])) + 0x100)];
          iVar43 = iVar43 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar26 - (uint)(byte)PTR_DAT_00501b38
                                                                      [(iVar26 - iVar33) + 0x100]) -
                                               iVar43) + 0x100)];
          iVar30 = iVar30 - (uint)(byte)PTR_DAT_00501b38
                                        [(int)((iVar30 - (iVar19 + (uint)(byte)PTR_DAT_00501b38
                                                                               [(int)(((iVar36 + (
                                                  uint)(byte)PTR_DAT_00501b38
                                                             [(iVar35 - iVar36) + 0x100]) - iVar19)
                                                  + 0x100)])) + 0x100)];
          iVar42 = iVar42 - (uint)(byte)PTR_DAT_00501b38[(iVar42 - iVar16) + 0x100];
          iVar43 = iVar43 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar10 - (uint)(byte)PTR_DAT_00501b38
                                                                      [(int)((iVar10 - (iVar15 + (
                                                  uint)(byte)PTR_DAT_00501b38
                                                             [(iVar34 - iVar15) + 0x100])) + 0x100)]
                                                ) - iVar43) + 0x100)];
          iVar7 = iVar7 - (uint)(byte)PTR_DAT_00501b38[(iVar7 - iVar12) + 0x100];
          iVar43 = iVar43 - (uint)(byte)PTR_DAT_00501b38
                                        [(int)((iVar43 - (iVar28 - (uint)(byte)PTR_DAT_00501b38
                                                                               [(int)((iVar28 - (
                                                  iVar14 + (uint)(byte)PTR_DAT_00501b38
                                                                       [(iVar41 - iVar14) + 0x100]))
                                                  + 0x100)])) + 0x100)];
          iVar40 = iVar40 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar35 - (uint)(byte)PTR_DAT_00501b38
                                                                      [(iVar35 - iVar36) + 0x100]) -
                                               iVar40) + 0x100)];
          iVar19 = iVar44 - (uint)(byte)PTR_DAT_00501b38[(iVar44 - iVar37) + 0x100];
          iVar13 = iVar13 - (uint)(byte)PTR_DAT_00501b38
                                        [(int)((iVar13 - (iVar41 - (uint)(byte)PTR_DAT_00501b38
                                                                               [(iVar41 - iVar14) +
                                                                                0x100])) + 0x100)];
          iVar40 = iVar40 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar29 - (uint)(byte)PTR_DAT_00501b38
                                                                      [(int)((iVar29 - (iVar32 - (
                                                  uint)(byte)PTR_DAT_00501b38
                                                             [(iVar32 - iVar17) + 0x100])) + 0x100)]
                                                ) - iVar40) + 0x100)];
          iVar13 = iVar13 - (uint)(byte)PTR_DAT_00501b38
                                        [(int)((iVar13 - (iVar42 + (uint)(byte)PTR_DAT_00501b38
                                                                               [(int)(((iVar11 - (
                                                  uint)(byte)PTR_DAT_00501b38
                                                             [(iVar11 - iVar9) + 0x100]) - iVar42) +
                                                  0x100)])) + 0x100)];
          iVar43 = iVar43 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar30 + (uint)(byte)PTR_DAT_00501b38
                                                                      [(int)(((iVar25 - (uint)(byte)
                                                  PTR_DAT_00501b38
                                                  [(int)((iVar25 - (iVar37 + (uint)(byte)
                                                  PTR_DAT_00501b38[(iVar44 - iVar37) + 0x100])) +
                                                  0x100)]) - iVar30) + 0x100)]) - iVar43) + 0x100)];
          iVar13 = iVar13 + (uint)(byte)PTR_DAT_00501b38
                                        [(int)(((iVar7 - (uint)(byte)PTR_DAT_00501b38
                                                                     [(int)((iVar7 - (iVar34 - (uint
                                                  )(byte)PTR_DAT_00501b38[(iVar34 - iVar15) + 0x100]
                                                  )) + 0x100)]) - iVar13) + 0x100)];
          *(char *)(local_98 + lVar54) =
               (char)iVar43 +
               PTR_DAT_00501b38
               [(int)(((iVar13 - (uint)(byte)PTR_DAT_00501b38
                                             [(int)((iVar13 - (iVar40 - (uint)(byte)PTR_DAT_00501b38
                                                                                    [(int)((iVar40 -
                                                                                           (iVar19 +
                                                                                           (uint)(
                                                  byte)PTR_DAT_00501b38
                                                       [(int)(((iVar24 - (uint)(byte)
                                                  PTR_DAT_00501b38[(iVar24 - iVar8) + 0x100]) -
                                                  iVar19) + 0x100)])) + 0x100)])) + 0x100)]) -
                      iVar43) + 0x100)];
        } while( true );
      }
      iVar50 = iVar63 + 1;
      local_3c = iVar63;
    }
    iVar63 = 0;
    iVar71 = iVar5;
    local_30 = iVar5;
LAB_001f4a64:
    if (local_3c < 1) {
      return;
    }
    iVar61 = 0;
    lVar54 = (long)-local_30;
    do {
      lVar51 = (long)local_30;
      if (iVar50 + -2 <= iVar61) {
        lVar51 = 0;
      }
      lVar67 = lVar51;
      if (iVar61 < iVar50 + -3) {
        lVar67 = (long)(local_30 << 1);
      }
      lVar66 = 0;
      pbVar57 = pbVar53;
      do {
        if (iVar61 < 1) {
          lVar52 = 0;
          lVar55 = 0;
        }
        else {
          lVar52 = lVar54;
          lVar55 = (long)(local_30 * -2);
          if (iVar61 == 1) {
            lVar55 = lVar54;
          }
        }
        pbVar1 = pbVar57 + lVar51;
        pbVar2 = pbVar57 + lVar67;
        pbVar3 = pbVar57 + lVar52;
        pbVar4 = pbVar57 + lVar55;
        bVar21 = *pbVar57;
        pbVar57 = pbVar57 + 1;
        iVar47 = (uint)*pbVar1 -
                 (uint)(byte)PTR_DAT_00501b38[(int)(((uint)*pbVar1 - (uint)*pbVar2) + 0x100)];
        iVar60 = (uint)*pbVar2 +
                 (uint)(byte)PTR_DAT_00501b38[(int)(((uint)*pbVar1 - (uint)*pbVar2) + 0x100)];
        iVar46 = (uint)*pbVar3 +
                 (uint)(byte)PTR_DAT_00501b38[(int)(((uint)*pbVar4 - (uint)*pbVar3) + 0x100)];
        iVar70 = (uint)bVar21 - (uint)(byte)PTR_DAT_00501b38[(int)(((uint)bVar21 - iVar47) + 0x100)]
        ;
        iVar47 = iVar47 + (uint)(byte)PTR_DAT_00501b38[(int)(((uint)bVar21 - iVar47) + 0x100)];
        iVar70 = iVar70 + (uint)(byte)PTR_DAT_00501b38
                                      [(int)((((uint)*pbVar4 -
                                              (uint)(byte)PTR_DAT_00501b38
                                                          [(int)(((uint)*pbVar4 - (uint)*pbVar3) +
                                                                0x100)]) - iVar70) + 0x100)];
        iVar70 = iVar70 - (uint)(byte)PTR_DAT_00501b38
                                      [(int)((iVar70 - (iVar60 + (uint)(byte)PTR_DAT_00501b38
                                                                             [(iVar47 - iVar60) +
                                                                              0x100])) + 0x100)];
        *(char *)(local_98 + lVar66) =
             (char)iVar70 +
             PTR_DAT_00501b38
             [(int)(((iVar46 - (uint)(byte)PTR_DAT_00501b38
                                           [(int)((iVar46 - (iVar47 - (uint)(byte)PTR_DAT_00501b38
                                                                                  [(iVar47 - iVar60)
                                                                                   + 0x100])) +
                                                 0x100)]) - iVar70) + 0x100)];
        lVar66 = lVar66 + 1;
      } while ((int)lVar66 < iVar5);
      iVar61 = iVar61 + 1;
      pbVar53 = pbVar53 + (long)(int)uVar22 + 1 + (long)iVar63;
      local_98 = local_98 + iVar71;
    } while (iVar61 != local_3c);
    return;
  }
  if (iVar63 == 1) {
    iVar50 = local_3c + 1;
    if (local_3c != 1) {
      iVar63 = local_30 - iVar5;
      goto LAB_001f497c;
    }
    iVar50 = 2;
  }
  else {
    if (local_3c != 1) {
      iVar63 = iVar63 * iVar5;
      if (local_3c < 1) {
        return;
      }
      iVar61 = (iVar63 + -0x10) - iVar5;
      iVar50 = 0;
      lVar54 = (long)iVar5;
      pbVar57 = pbVar53;
LAB_001f2f98:
      iVar60 = 0;
      iVar46 = iVar50 + -1;
      iVar50 = iVar50 + 1;
      if (iVar46 < 0) {
        iVar46 = 0;
      }
      iVar47 = iVar50;
      if (local_3c + -1 < iVar50) {
        iVar47 = local_3c + -1;
      }
      iVar70 = iVar5;
      if (cVar49 == '\0') {
        iVar70 = iVar63;
      }
      iVar46 = local_30 * iVar46;
      iVar47 = local_30 * iVar47;
      do {
        if (iVar70 <= iVar60) {
          do {
            if (iVar70 == iVar63) {
              local_98 = local_98 + iVar71;
              pbVar57 = pbVar57 + local_30;
              if (iVar50 == local_3c) {
                return;
              }
              goto LAB_001f2f98;
            }
            if (iVar60 <= iVar61) {
              lVar51 = (long)iVar60;
              pauVar59 = (undefined1 (*) [16])(pbVar53 + lVar51 + iVar46);
              pauVar58 = (undefined1 (*) [16])(pbVar57 + lVar51);
              pauVar56 = (undefined1 (*) [16])(pbVar53 + lVar51 + iVar47);
              puVar65 = (undefined8 *)(local_98 + lVar51);
              do {
                pbVar1 = *pauVar56;
                pbVar2 = *pauVar59;
                auVar73 = *pauVar56;
                pauVar69 = (undefined1 (*) [16])((long)pauVar58 - lVar54);
                pauVar68 = (undefined1 (*) [16])((long)pauVar56 - lVar54);
                pauVar64 = (undefined1 (*) [16])((long)pauVar59 - lVar54);
                auVar102 = *pauVar59;
                iVar60 = iVar60 + 0x10;
                pauVar59 = pauVar59 + 1;
                auVar77 = NEON_umin(*pauVar58,*(undefined1 (*) [16])(*pauVar58 + lVar54),1);
                auVar79 = NEON_umin(auVar73,*(undefined1 (*) [16])(pbVar1 + lVar54),1);
                auVar76 = NEON_umax(*(undefined1 (*) [16])(*pauVar58 + lVar54),*pauVar58,1);
                pauVar58 = pauVar58 + 1;
                auVar78 = NEON_umin(auVar102,*(undefined1 (*) [16])(pbVar2 + lVar54),1);
                pauVar56 = pauVar56 + 1;
                auVar74 = NEON_umax(*(undefined1 (*) [16])(pbVar1 + lVar54),auVar73,1);
                auVar82 = NEON_umax(auVar79,*pauVar68,1);
                auVar73 = NEON_umax(auVar77,*pauVar69,1);
                auVar102 = NEON_umax(*(undefined1 (*) [16])(pbVar2 + lVar54),auVar102,1);
                auVar94 = NEON_umax(auVar78,*pauVar64,1);
                auVar75 = NEON_umin(auVar82,auVar74,1);
                auVar86 = NEON_umin(auVar73,auVar76,1);
                auVar74 = NEON_umax(auVar74,auVar82,1);
                auVar76 = NEON_umax(auVar76,auVar73,1);
                auVar73 = NEON_umin(auVar94,auVar102,1);
                auVar82 = NEON_umin(auVar86,auVar75,1);
                auVar102 = NEON_umax(auVar102,auVar94,1);
                auVar76 = NEON_umin(auVar76,auVar74,1);
                auVar94 = NEON_umin(*pauVar64,auVar78,1);
                auVar74 = NEON_umax(auVar82,auVar73,1);
                auVar82 = NEON_umin(*pauVar69,auVar77,1);
                auVar75 = NEON_umax(auVar75,auVar86,1);
                auVar73 = NEON_umin(auVar102,auVar76,1);
                auVar76 = NEON_umin(*pauVar68,auVar79,1);
                auVar82 = NEON_umax(auVar82,auVar94,1);
                auVar102 = NEON_umin(auVar74,auVar75,1);
                auVar74 = NEON_umax(auVar76,auVar82,1);
                auVar76 = NEON_umin(auVar102,auVar73,1);
                auVar73 = NEON_umax(auVar73,auVar102,1);
                auVar102 = NEON_umax(auVar76,auVar74,1);
                auVar73 = NEON_umin(auVar102,auVar73,1);
                puVar65[1] = auVar73._8_8_;
                *puVar65 = auVar73._0_8_;
                puVar65 = puVar65 + 2;
              } while (iVar60 <= iVar61);
            }
            iVar70 = iVar63;
          } while (iVar63 <= iVar60);
        }
        iVar6 = iVar60 - iVar5;
        if (iVar60 < iVar5) {
          iVar6 = iVar60;
        }
        lVar51 = (long)iVar60;
        iVar23 = iVar60 + iVar5;
        if (iVar63 - iVar5 <= iVar60) {
          iVar23 = iVar60;
        }
        lVar66 = (long)iVar6;
        iVar60 = iVar60 + 1;
        lVar67 = (long)iVar23;
        iVar19 = (uint)pbVar57[lVar51] -
                 (uint)(byte)PTR_DAT_00501b38
                             [(int)(((uint)pbVar57[lVar51] - (uint)pbVar57[lVar67]) + 0x100)];
        iVar24 = (uint)pbVar53[lVar51 + iVar47] -
                 (uint)(byte)PTR_DAT_00501b38
                             [(int)(((uint)pbVar53[lVar51 + iVar47] - (uint)pbVar53[lVar67 + iVar47]
                                    ) + 0x100)];
        iVar6 = (uint)pbVar53[lVar67 + iVar47] +
                (uint)(byte)PTR_DAT_00501b38
                            [(int)(((uint)pbVar53[lVar51 + iVar47] - (uint)pbVar53[lVar67 + iVar47])
                                  + 0x100)];
        iVar8 = (uint)pbVar57[lVar67] +
                (uint)(byte)PTR_DAT_00501b38
                            [(int)(((uint)pbVar57[lVar51] - (uint)pbVar57[lVar67]) + 0x100)];
        iVar25 = (uint)pbVar53[lVar51 + iVar46] -
                 (uint)(byte)PTR_DAT_00501b38
                             [(int)(((uint)pbVar53[lVar51 + iVar46] - (uint)pbVar53[lVar67 + iVar46]
                                    ) + 0x100)];
        iVar23 = iVar19 + (uint)(byte)PTR_DAT_00501b38
                                      [(int)(((uint)pbVar57[lVar66] - iVar19) + 0x100)];
        iVar15 = iVar24 + (uint)(byte)PTR_DAT_00501b38
                                      [(int)(((uint)pbVar53[lVar66 + iVar47] - iVar24) + 0x100)];
        iVar7 = (uint)pbVar53[lVar67 + iVar46] +
                (uint)(byte)PTR_DAT_00501b38
                            [(int)(((uint)pbVar53[lVar51 + iVar46] - (uint)pbVar53[lVar67 + iVar46])
                                  + 0x100)];
        iVar9 = (uint)pbVar57[lVar66] -
                (uint)(byte)PTR_DAT_00501b38[(int)(((uint)pbVar57[lVar66] - iVar19) + 0x100)];
        iVar19 = iVar25 + (uint)(byte)PTR_DAT_00501b38
                                      [(int)(((uint)pbVar53[lVar66 + iVar46] - iVar25) + 0x100)];
        iVar11 = iVar23 - (uint)(byte)PTR_DAT_00501b38[(iVar23 - iVar8) + 0x100];
        iVar29 = iVar15 - (uint)(byte)PTR_DAT_00501b38[(iVar15 - iVar6) + 0x100];
        iVar8 = iVar8 + (uint)(byte)PTR_DAT_00501b38[(iVar23 - iVar8) + 0x100];
        iVar23 = iVar7 + (uint)(byte)PTR_DAT_00501b38[(iVar19 - iVar7) + 0x100];
        iVar12 = (uint)pbVar53[lVar66 + iVar47] -
                 (uint)(byte)PTR_DAT_00501b38
                             [(int)(((uint)pbVar53[lVar66 + iVar47] - iVar24) + 0x100)];
        iVar24 = iVar11 - (uint)(byte)PTR_DAT_00501b38[(iVar11 - iVar29) + 0x100];
        iVar24 = iVar24 + (uint)(byte)PTR_DAT_00501b38
                                      [(int)(((iVar19 - (uint)(byte)PTR_DAT_00501b38
                                                                    [(iVar19 - iVar7) + 0x100]) -
                                             iVar24) + 0x100)];
        iVar23 = iVar23 - (uint)(byte)PTR_DAT_00501b38
                                      [(int)((iVar23 - (iVar8 - (uint)(byte)PTR_DAT_00501b38
                                                                            [(int)((iVar8 - (iVar6 +
                                                                                            (uint)(
                                                  byte)PTR_DAT_00501b38[(iVar15 - iVar6) + 0x100]))
                                                  + 0x100)])) + 0x100)];
        iVar24 = iVar24 - (uint)(byte)PTR_DAT_00501b38
                                      [(int)((iVar24 - (iVar29 + (uint)(byte)PTR_DAT_00501b38
                                                                             [(iVar11 - iVar29) +
                                                                              0x100])) + 0x100)];
        iVar6 = iVar24 - (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar23) + 0x100];
        iVar6 = iVar6 + (uint)(byte)PTR_DAT_00501b38
                                    [(int)(((iVar12 + (uint)(byte)PTR_DAT_00501b38
                                                                  [(int)(((iVar9 + (uint)(byte)
                                                  PTR_DAT_00501b38
                                                  [(int)((((uint)pbVar53[lVar66 + iVar46] -
                                                          (uint)(byte)PTR_DAT_00501b38
                                                                      [(int)(((uint)pbVar53[lVar66 +
                                                                                            iVar46]
                                                                             - iVar25) + 0x100)]) -
                                                         iVar9) + 0x100)]) - iVar12) + 0x100)]) -
                                           iVar6) + 0x100)];
        *(char *)(local_98 + lVar51) =
             (char)iVar6 -
             PTR_DAT_00501b38
             [(int)((iVar6 - (iVar23 + (uint)(byte)PTR_DAT_00501b38[(iVar24 - iVar23) + 0x100])) +
                   0x100)];
      } while( true );
    }
    iVar50 = iVar63 + 1;
    local_3c = iVar63;
  }
  iVar63 = 0;
  iVar71 = iVar5;
  local_30 = iVar5;
LAB_001f497c:
  if (0 < local_3c) {
    iVar61 = 0;
    do {
      lVar54 = 0;
      lVar51 = (long)-local_30;
      if (iVar61 < 1) {
        lVar51 = 0;
      }
      lVar67 = (long)local_30;
      if (iVar50 + -2 <= iVar61) {
        lVar67 = 0;
      }
      do {
        iVar60 = (uint)pbVar53[lVar54] +
                 (uint)(byte)PTR_DAT_00501b38
                             [(int)(((uint)pbVar53[lVar54 + lVar51] - (uint)pbVar53[lVar54]) + 0x100
                                   )];
        iVar60 = iVar60 - (uint)(byte)PTR_DAT_00501b38
                                      [(int)((iVar60 - (uint)pbVar53[lVar54 + lVar67]) + 0x100)];
        *(char *)(local_98 + lVar54) =
             (char)iVar60 +
             PTR_DAT_00501b38
             [(int)((((uint)pbVar53[lVar54 + lVar51] -
                     (uint)(byte)PTR_DAT_00501b38
                                 [(int)(((uint)pbVar53[lVar54 + lVar51] - (uint)pbVar53[lVar54]) +
                                       0x100)]) - iVar60) + 0x100)];
        lVar54 = lVar54 + 1;
      } while ((int)lVar54 < iVar5);
      iVar61 = iVar61 + 1;
      pbVar53 = pbVar53 + (long)(int)uVar22 + 1 + (long)iVar63;
      local_98 = local_98 + iVar71;
    } while (iVar61 != local_3c);
  }
  return;
}


==================================================================

### FUNC 001f4c10 (29616 bytes) name=FUN_001f4c10

void FUN_001f4c10(uint *param_1,long param_2,int param_3)

{
  uint uVar1;
  int iVar2;
  undefined1 (*pauVar3) [16];
  undefined1 (*pauVar4) [16];
  undefined1 (*pauVar5) [16];
  ushort *puVar6;
  long lVar7;
  ushort *puVar8;
  ushort *puVar9;
  long lVar10;
  ushort *puVar11;
  ushort uVar12;
  ushort uVar13;
  ushort uVar14;
  ushort uVar15;
  ushort uVar16;
  ushort uVar17;
  ushort uVar18;
  ushort uVar19;
  ushort uVar20;
  ushort uVar21;
  ushort uVar22;
  ushort uVar23;
  ushort uVar24;
  ushort uVar25;
  ushort uVar26;
  ushort uVar27;
  ushort uVar28;
  ushort uVar29;
  ushort uVar30;
  ushort uVar31;
  ushort uVar32;
  ushort uVar33;
  ushort uVar34;
  ushort uVar35;
  ushort uVar36;
  ushort uVar37;
  ushort uVar38;
  ushort uVar39;
  ushort uVar40;
  uint uVar41;
  int iVar42;
  int iVar43;
  int iVar44;
  undefined1 *puVar45;
  undefined1 *puVar46;
  bool bVar47;
  char cVar48;
  undefined1 (*pauVar49) [16];
  ushort *puVar50;
  undefined1 (*pauVar51) [16];
  int iVar52;
  ulong uVar53;
  ushort *puVar54;
  long lVar55;
  long lVar56;
  undefined1 (*pauVar57) [16];
  int iVar58;
  long lVar59;
  long lVar60;
  int iVar61;
  long lVar62;
  uint uVar63;
  ushort *puVar64;
  ushort *puVar65;
  long lVar66;
  ulong uVar67;
  undefined8 *puVar68;
  int iVar69;
  uint uVar70;
  long lVar71;
  ulong uVar72;
  long lVar73;
  ushort *puVar74;
  ulong uVar75;
  ulong uVar76;
  uint uVar77;
  int iVar78;
  uint uVar79;
  ulong uVar80;
  ulong uVar81;
  ulong uVar82;
  uint uVar83;
  undefined1 auVar84 [16];
  undefined1 auVar85 [16];
  undefined1 auVar86 [16];
  undefined1 auVar87 [16];
  undefined1 auVar88 [16];
  undefined1 auVar89 [16];
  undefined1 auVar90 [16];
  undefined1 auVar91 [16];
  undefined1 auVar92 [16];
  undefined1 auVar93 [16];
  undefined1 auVar94 [16];
  undefined1 auVar95 [16];
  undefined1 auVar96 [16];
  undefined1 auVar97 [16];
  undefined1 auVar98 [16];
  undefined1 auVar99 [16];
  undefined1 auVar100 [16];
  undefined1 auVar101 [16];
  undefined1 auVar102 [16];
  undefined1 auVar103 [16];
  undefined1 auVar104 [16];
  undefined1 auVar105 [16];
  undefined1 auVar106 [16];
  undefined1 auVar107 [16];
  undefined1 auVar108 [16];
  undefined1 auVar109 [16];
  undefined1 auVar110 [16];
  undefined1 auVar111 [16];
  undefined1 auVar112 [16];
  undefined1 auVar113 [16];
  undefined1 auVar114 [16];
  undefined1 auVar115 [16];
  undefined1 auVar116 [16];
  undefined1 auVar117 [16];
  undefined1 auVar118 [16];
  undefined1 auVar119 [16];
  undefined1 auVar120 [16];
  undefined1 auVar121 [16];
  undefined1 auVar122 [16];
  undefined1 auVar123 [16];
  undefined1 auVar124 [16];
  undefined1 auVar125 [16];
  undefined1 auVar126 [16];
  undefined1 auVar127 [16];
  undefined1 auVar128 [16];
  undefined1 auVar129 [16];
  undefined1 auVar130 [16];
  undefined1 auVar131 [16];
  undefined1 auVar132 [16];
  undefined1 auVar133 [16];
  undefined1 auVar134 [16];
  undefined1 auVar135 [16];
  undefined1 auVar136 [16];
  ushort uVar137;
  ushort uVar138;
  undefined1 auVar139 [16];
  undefined1 auVar140 [16];
  undefined1 auVar141 [16];
  undefined1 auVar142 [16];
  undefined1 auVar143 [16];
  undefined1 auVar144 [16];
  undefined1 auVar145 [16];
  undefined1 auVar146 [16];
  long lVar147;
  undefined1 auVar148 [16];
  long lVar149;
  undefined1 auVar150 [16];
  undefined1 auVar151 [16];
  undefined1 auVar152 [16];
  undefined1 auVar153 [16];
  undefined1 auVar154 [16];
  undefined1 auVar155 [16];
  undefined1 auVar156 [16];
  undefined1 auVar157 [16];
  undefined1 auVar158 [16];
  undefined1 auVar159 [16];
  undefined1 auVar160 [16];
  undefined1 auVar161 [16];
  undefined1 auVar162 [16];
  undefined1 auVar163 [16];
  undefined1 auVar164 [16];
  undefined1 auVar165 [16];
  undefined1 auVar166 [16];
  undefined1 auVar167 [16];
  undefined1 auVar168 [16];
  undefined1 auVar169 [16];
  undefined1 auVar170 [16];
  undefined1 auVar171 [16];
  undefined1 auVar172 [16];
  undefined1 auVar173 [16];
  undefined1 auVar174 [16];
  undefined1 auVar175 [16];
  undefined1 auVar176 [16];
  undefined1 auVar177 [16];
  undefined1 auVar178 [16];
  undefined1 auVar179 [16];
  undefined1 auVar180 [16];
  undefined1 auVar181 [16];
  undefined1 auVar182 [16];
  undefined1 auVar183 [16];
  undefined1 auVar184 [16];
  undefined1 auVar185 [16];
  undefined1 auVar186 [16];
  undefined1 auVar187 [16];
  undefined1 auVar188 [16];
  undefined1 auVar189 [16];
  long local_90;
  int local_34;
  uint local_30;
  int local_2c;
  int local_20;
  
  uVar67 = *(ulong *)(param_2 + 0x50);
  uVar41 = *param_1 >> 3 & 0x1ff;
  local_90 = *(long *)(param_2 + 0x10);
  uVar1 = uVar41 + 1;
  uVar81 = uVar67 >> 1;
  local_34 = **(int **)(param_2 + 0x40);
  uVar83 = (uint)uVar81;
  uVar80 = *(ulong *)(param_1 + 0x14);
  puVar74 = *(ushort **)(param_1 + 4);
  iVar69 = (*(int **)(param_2 + 0x40))[1];
  cVar48 = cv::checkHardwareSupport(3);
  local_30 = (uint)(uVar80 >> 1);
  if (cVar48 == '\0') {
    cVar48 = cv::checkHardwareSupport(100);
  }
  if (param_3 != 3) {
    if (param_3 != 5) {
      return;
    }
    if (iVar69 == 1) {
      iVar58 = local_34 + 1;
      if (local_34 != 1) {
        uVar67 = (ulong)(local_30 - uVar1);
        goto LAB_001f64a4;
      }
      iVar58 = 2;
    }
    else {
      if (local_34 != 1) {
        uVar41 = iVar69 * uVar1;
        if (local_34 < 1) {
          return;
        }
        iVar61 = local_34 + -1;
        iVar58 = uVar1 * -2;
        uVar83 = uVar1 * 2;
        iVar69 = (uVar41 - 8) + iVar58;
        local_2c = 0;
        local_20 = 1;
        puVar64 = puVar74;
LAB_001f5078:
        uVar80 = 0;
        iVar52 = local_2c + -2;
        if (iVar52 < 0) {
          iVar52 = 0;
        }
        iVar44 = local_2c + -1;
        local_2c = local_20;
        if (iVar44 < 0) {
          iVar44 = 0;
        }
        iVar42 = local_20;
        if (iVar61 < local_20) {
          iVar42 = iVar61;
        }
        iVar2 = local_20 + 1;
        iVar43 = iVar61;
        if (iVar2 < iVar61) {
          iVar43 = iVar2;
        }
        iVar52 = local_30 * iVar52;
        iVar44 = local_30 * iVar44;
        iVar42 = local_30 * iVar42;
        iVar43 = local_30 * iVar43;
        uVar77 = uVar41;
        if (cVar48 != '\0') {
          uVar77 = uVar83;
        }
LAB_001f50f8:
        do {
          if ((int)uVar77 <= (int)uVar80) {
            do {
              if (uVar77 == uVar41) {
                bVar47 = local_20 == local_34;
                local_90 = local_90 +
                           (-(uVar67 >> 0x20 & 1) & 0xfffffffe00000000 | (uVar81 & 0xffffffff) << 1)
                ;
                puVar64 = puVar64 + (int)local_30;
                local_20 = iVar2;
                if (bVar47) {
                  return;
                }
                goto LAB_001f5078;
              }
              iVar78 = (int)uVar80;
              uVar77 = uVar41;
              if (iVar69 < iVar78) goto LAB_001f50f8;
              lVar59 = (long)iVar78;
              lVar55 = 0;
              do {
                uVar63 = (int)uVar80 + 8;
                uVar80 = (ulong)uVar63;
                lVar62 = lVar55 + (lVar59 - (ulong)uVar83) * 2;
                lVar71 = lVar55 + (lVar59 - (int)uVar1) * 2;
                auVar86 = *(undefined1 (*) [16])((long)puVar74 + lVar62 + (long)iVar44 * 2);
                lVar73 = lVar55 + ((int)uVar1 + lVar59) * 2;
                lVar56 = lVar55 + ((ulong)uVar83 + lVar59) * 2;
                lVar60 = lVar55 + (long)iVar78 * 2;
                auVar166 = *(undefined1 (*) [16])((long)puVar74 + lVar73 + (long)iVar44 * 2);
                auVar89 = *(undefined1 (*) [16])((long)puVar74 + lVar60 + (long)iVar44 * 2);
                auVar140 = *(undefined1 (*) [16])((long)puVar74 + lVar56 + (long)iVar52 * 2);
                auVar88 = *(undefined1 (*) [16])((long)puVar74 + lVar60 + (long)iVar42 * 2);
                auVar167 = NEON_umax(auVar166,auVar89,2);
                auVar174 = *(undefined1 (*) [16])((long)puVar74 + lVar60 + (long)iVar52 * 2);
                auVar87 = *(undefined1 (*) [16])((long)puVar74 + lVar71 + (long)iVar52 * 2);
                auVar103 = NEON_umin(auVar89,auVar166,2);
                auVar166 = *(undefined1 (*) [16])((long)puVar74 + lVar73 + (long)iVar52 * 2);
                auVar181 = NEON_umin(auVar140,auVar86,2);
                auVar187 = *(undefined1 (*) [16])((long)puVar74 + lVar62 + (long)iVar42 * 2);
                auVar89 = *(undefined1 (*) [16])((long)puVar74 + lVar62 + (long)iVar52 * 2);
                auVar85 = *(undefined1 (*) [16])((long)puVar74 + lVar71 + (long)iVar42 * 2);
                auVar161 = NEON_umax(auVar86,auVar140,2);
                auVar86 = *(undefined1 (*) [16])((long)puVar74 + lVar60 + (long)iVar43 * 2);
                auVar140 = *(undefined1 (*) [16])((long)puVar74 + lVar71 + (long)iVar43 * 2);
                auVar183 = NEON_umax(auVar181,auVar166,2);
                auVar84 = NEON_umin(auVar85,auVar88,2);
                auVar96 = *(undefined1 (*) [16])((long)puVar74 + lVar56 + (long)iVar43 * 2);
                auVar148 = NEON_umax(auVar88,auVar85,2);
                auVar152 = NEON_umin(auVar140,auVar86,2);
                auVar150 = NEON_umax(auVar84,auVar187,2);
                auVar129 = NEON_umax(auVar86,auVar140,2);
                auVar173 = NEON_umax(auVar174,auVar87,2);
                auVar86 = *(undefined1 (*) [16])((long)puVar74 + lVar56 + (long)iVar44 * 2);
                auVar175 = NEON_umin(*(undefined1 (*) [16])((long)puVar64 + lVar62),
                                     *(undefined1 (*) [16])((long)puVar64 + lVar71),2);
                auVar105 = NEON_umin(auVar87,auVar174,2);
                auVar140 = *(undefined1 (*) [16])((long)puVar74 + lVar56 + (long)iVar42 * 2);
                auVar88 = *(undefined1 (*) [16])((long)puVar74 + lVar73 + (long)iVar43 * 2);
                auVar111 = NEON_umin(*(undefined1 (*) [16])((long)puVar64 + lVar73),
                                     *(undefined1 (*) [16])((long)puVar64 + lVar56),2);
                auVar174 = *(undefined1 (*) [16])((long)puVar74 + lVar62 + (long)iVar43 * 2);
                auVar182 = NEON_umin(auVar166,auVar181,2);
                auVar166 = *(undefined1 (*) [16])((long)puVar74 + lVar73 + (long)iVar42 * 2);
                auVar85 = NEON_umax(auVar161,auVar183,2);
                lVar55 = lVar55 + 0x10;
                auVar139 = NEON_umax(*(undefined1 (*) [16])((long)puVar64 + lVar71),
                                     *(undefined1 (*) [16])((long)puVar64 + lVar62),2);
                auVar151 = NEON_umax(*(undefined1 (*) [16])((long)puVar64 + lVar56),
                                     *(undefined1 (*) [16])((long)puVar64 + lVar73),2);
                auVar87 = *(undefined1 (*) [16])((long)puVar74 + lVar71 + (long)iVar44 * 2);
                auVar177 = NEON_umin(auVar88,auVar96,2);
                auVar176 = NEON_umin(auVar140,auVar174,2);
                auVar178 = NEON_umax(auVar175,auVar86,2);
                auVar181 = NEON_umax(auVar111,*(undefined1 (*) [16])((long)puVar64 + lVar60),2);
                auVar185 = NEON_umin(auVar86,auVar175,2);
                auVar86 = NEON_umin(*(undefined1 (*) [16])((long)puVar64 + lVar60),auVar111,2);
                auVar175 = NEON_umax(auVar103,auVar87,2);
                auVar103 = NEON_umin(auVar87,auVar103,2);
                auVar186 = NEON_umax(auVar177,auVar152,2);
                auVar87 = NEON_umax(auVar151,auVar181,2);
                auVar151 = NEON_umin(auVar181,auVar151,2);
                auVar181 = NEON_umax(auVar167,auVar175,2);
                auVar111 = NEON_umin(auVar166,auVar176,2);
                auVar177 = NEON_umin(auVar152,auVar177,2);
                auVar96 = NEON_umax(auVar96,auVar88,2);
                auVar175 = NEON_umin(auVar175,auVar167,2);
                auVar168 = NEON_umax(auVar185,auVar103,2);
                auVar152 = NEON_umax(auVar105,auVar89,2);
                auVar88 = NEON_umin(auVar187,auVar84,2);
                auVar167 = NEON_umin(auVar129,auVar96,2);
                auVar161 = NEON_umin(auVar183,auVar161,2);
                auVar84 = NEON_umin(auVar89,auVar105,2);
                auVar89 = NEON_umax(auVar148,auVar150,2);
                auVar150 = NEON_umin(auVar150,auVar148,2);
                auVar180 = NEON_umax(auVar173,auVar152,2);
                auVar96 = NEON_umax(auVar96,auVar129,2);
                auVar105 = NEON_umin(auVar152,auVar173,2);
                auVar129 = NEON_umax(auVar177,auVar111,2);
                auVar187 = NEON_umax(auVar139,auVar178,2);
                auVar184 = NEON_umax(auVar88,auVar86,2);
                auVar174 = NEON_umax(auVar174,auVar140,2);
                auVar188 = NEON_umax(auVar182,auVar84,2);
                auVar183 = NEON_umin(auVar180,auVar85,2);
                auVar173 = NEON_umin(auVar87,auVar89,2);
                auVar140 = NEON_umin(auVar178,auVar139,2);
                auVar166 = NEON_umax(auVar176,auVar166,2);
                auVar139 = NEON_umin(auVar181,auVar187,2);
                auVar152 = NEON_umin(auVar105,auVar161,2);
                auVar179 = NEON_umax(auVar161,auVar105,2);
                auVar176 = NEON_umin(auVar166,auVar174,2);
                auVar161 = NEON_umin(auVar173,auVar184,2);
                auVar178 = NEON_umin(auVar167,auVar186,2);
                auVar148 = NEON_umin(auVar183,auVar188,2);
                auVar174 = NEON_umax(auVar174,auVar166,2);
                auVar189 = NEON_umax(auVar188,auVar183,2);
                auVar167 = NEON_umax(auVar186,auVar167,2);
                auVar183 = NEON_umin(auVar139,auVar168,2);
                auVar188 = NEON_umax(auVar168,auVar139,2);
                auVar139 = NEON_umin(auVar175,auVar140,2);
                auVar105 = NEON_umax(auVar140,auVar175,2);
                auVar175 = NEON_umax(auVar184,auVar173,2);
                auVar184 = NEON_umin(auVar151,auVar150,2);
                auVar151 = NEON_umax(auVar150,auVar151,2);
                auVar150 = NEON_umin(auVar174,auVar167,2);
                auVar166 = NEON_umax(auVar178,auVar176,2);
                auVar178 = NEON_umin(auVar176,auVar178,2);
                auVar140 = NEON_umin(auVar84,auVar182,2);
                auVar176 = NEON_umin(auVar166,auVar96,2);
                auVar166 = NEON_umax(auVar96,auVar166,2);
                auVar168 = NEON_umin(auVar150,auVar129,2);
                auVar186 = NEON_umax(auVar129,auVar150,2);
                auVar150 = NEON_umax(auVar167,auVar174,2);
                auVar167 = NEON_umax(auVar179,auVar189,2);
                auVar96 = NEON_umax(auVar187,auVar181,2);
                auVar174 = NEON_umin(auVar111,auVar177,2);
                auVar173 = NEON_umax(auVar168,auVar178,2);
                auVar177 = NEON_umax(auVar85,auVar180,2);
                auVar180 = NEON_umin(auVar103,auVar185,2);
                auVar85 = NEON_umax(auVar105,auVar188,2);
                auVar84 = NEON_umin(auVar188,auVar105,2);
                auVar129 = NEON_umin(auVar152,auVar148,2);
                auVar185 = NEON_umin(auVar150,auVar166,2);
                auVar181 = NEON_umax(auVar148,auVar152,2);
                auVar148 = NEON_umax(auVar166,auVar150,2);
                auVar103 = NEON_umax(auVar180,auVar140,2);
                auVar150 = NEON_umin(auVar178,auVar168,2);
                auVar187 = NEON_umin(auVar86,auVar88,2);
                auVar168 = NEON_umax(auVar176,auVar186,2);
                auVar182 = NEON_umin(auVar139,auVar183,2);
                auVar105 = NEON_umax(auVar183,auVar139,2);
                auVar87 = NEON_umax(auVar89,auVar87,2);
                auVar86 = NEON_umin(auVar184,auVar161,2);
                auVar188 = NEON_umax(auVar182,auVar129,2);
                auVar152 = NEON_umin(auVar177,auVar96,2);
                auVar178 = NEON_umin(auVar87,auVar185,2);
                auVar166 = NEON_umax(auVar161,auVar184,2);
                auVar139 = NEON_umax(auVar151,auVar175,2);
                auVar111 = NEON_umin(auVar175,auVar151,2);
                auVar161 = NEON_umin(auVar140,auVar180,2);
                auVar175 = NEON_umax(auVar173,auVar166,2);
                auVar89 = NEON_umin(auVar189,auVar179,2);
                auVar140 = NEON_umin(auVar167,auVar85,2);
                auVar88 = NEON_umin(auVar186,auVar176,2);
                auVar183 = NEON_umin(auVar166,auVar173,2);
                auVar179 = NEON_umax(auVar174,auVar187,2);
                auVar180 = NEON_umin(auVar140,auVar103,2);
                auVar176 = NEON_umax(auVar103,auVar140,2);
                auVar189 = NEON_umin(auVar181,auVar105,2);
                auVar184 = NEON_umin(auVar139,auVar168,2);
                auVar103 = NEON_umax(auVar105,auVar181,2);
                auVar181 = NEON_umin(auVar152,auVar188,2);
                auVar173 = NEON_umax(auVar188,auVar152,2);
                auVar186 = NEON_umin(auVar89,auVar84,2);
                auVar151 = NEON_umax(auVar84,auVar89,2);
                auVar140 = NEON_umax(auVar150,auVar86,2);
                auVar152 = NEON_umax(auVar96,auVar177,2);
                auVar89 = NEON_umin(auVar187,auVar174,2);
                auVar166 = NEON_umin(auVar178,auVar140,2);
                auVar96 = NEON_umax(auVar89,auVar161,2);
                auVar161 = NEON_umax(auVar168,auVar139,2);
                auVar89 = NEON_umax(auVar88,auVar111,2);
                auVar105 = NEON_umin(auVar184,auVar179,2);
                auVar179 = NEON_umax(auVar179,auVar184,2);
                auVar177 = NEON_umin(auVar175,auVar148,2);
                auVar148 = NEON_umax(auVar148,auVar175,2);
                auVar139 = NEON_umax(auVar140,auVar178,2);
                auVar168 = NEON_umin(auVar111,auVar88,2);
                auVar111 = NEON_umin(auVar129,auVar182,2);
                auVar84 = NEON_umin(auVar186,auVar181,2);
                auVar174 = NEON_umax(auVar103,auVar176,2);
                auVar140 = NEON_umax(auVar85,auVar167,2);
                auVar187 = NEON_umax(auVar177,auVar179,2);
                auVar177 = NEON_umin(auVar179,auVar177,2);
                auVar88 = NEON_umin(auVar189,auVar180,2);
                auVar175 = NEON_umin(auVar86,auVar150,2);
                auVar182 = NEON_umax(auVar180,auVar189,2);
                auVar178 = NEON_umin(auVar173,auVar151,2);
                auVar86 = NEON_umax(auVar151,auVar173,2);
                auVar167 = NEON_umin(auVar183,auVar105,2);
                auVar151 = NEON_umax(auVar105,auVar183,2);
                auVar85 = NEON_umin(auVar161,auVar148,2);
                auVar150 = NEON_umax(auVar148,auVar161,2);
                auVar148 = NEON_umax(auVar185,auVar87,2);
                auVar179 = NEON_umin(auVar139,auVar89,2);
                auVar105 = NEON_umax(auVar181,auVar186,2);
                auVar129 = NEON_umax(auVar89,auVar139,2);
                auVar180 = NEON_umin(auVar111,auVar88,2);
                auVar181 = NEON_umin(auVar176,auVar103,2);
                auVar176 = NEON_umax(auVar88,auVar111,2);
                auVar183 = NEON_umin(auVar84,auVar182,2);
                auVar89 = NEON_umin(auVar168,auVar166,2);
                auVar88 = NEON_umin(auVar148,auVar150,2);
                auVar173 = NEON_umax(auVar166,auVar168,2);
                auVar103 = NEON_umax(auVar140,auVar86,2);
                auVar139 = NEON_umin(auVar86,auVar140,2);
                auVar87 = NEON_umin(auVar175,auVar167,2);
                auVar166 = NEON_umin(auVar129,auVar85,2);
                auVar182 = NEON_umax(auVar182,auVar84,2);
                auVar168 = NEON_umax(auVar174,auVar178,2);
                auVar140 = NEON_umax(auVar151,auVar89,2);
                auVar111 = NEON_umax(auVar167,auVar175,2);
                auVar85 = NEON_umax(auVar85,auVar129,2);
                auVar161 = NEON_umin(auVar89,auVar151,2);
                auVar167 = NEON_umax(auVar187,auVar179,2);
                auVar86 = NEON_umin(auVar105,auVar181,2);
                auVar175 = NEON_umin(auVar178,auVar174,2);
                auVar84 = NEON_umax(auVar181,auVar105,2);
                auVar181 = NEON_umin(auVar173,auVar177,2);
                auVar151 = NEON_umax(auVar150,auVar148,2);
                auVar89 = NEON_umax(auVar140,auVar182,2);
                auVar85 = NEON_umin(auVar103,auVar85,2);
                auVar129 = NEON_umin(auVar139,auVar166,2);
                auVar166 = NEON_umin(auVar152,auVar88,2);
                auVar139 = NEON_umax(auVar177,auVar173,2);
                auVar105 = NEON_umin(auVar179,auVar187,2);
                auVar140 = NEON_umin(auVar168,auVar167,2);
                auVar103 = NEON_umax(auVar111,auVar176,2);
                auVar174 = NEON_umax(auVar87,auVar180,2);
                auVar88 = NEON_umax(auVar161,auVar183,2);
                auVar140 = NEON_umax(auVar96,auVar140,2);
                auVar89 = NEON_umin(auVar89,auVar151,2);
                auVar86 = NEON_umax(auVar181,auVar86,2);
                auVar88 = NEON_umin(auVar166,auVar88,2);
                auVar87 = NEON_umin(auVar85,auVar103,2);
                auVar166 = NEON_umin(auVar84,auVar139,2);
                auVar174 = NEON_umax(auVar174,auVar129,2);
                auVar85 = NEON_umin(auVar175,auVar105,2);
                auVar89 = NEON_umin(auVar140,auVar89,2);
                auVar166 = NEON_umax(auVar87,auVar166,2);
                auVar140 = NEON_umin(auVar174,auVar86,2);
                auVar86 = NEON_umax(auVar88,auVar85,2);
                auVar166 = NEON_umax(auVar89,auVar166,2);
                auVar86 = NEON_umin(auVar86,auVar140,2);
                auVar86 = NEON_umax(auVar166,auVar86,2);
                ((undefined8 *)(local_90 + lVar60))[1] = auVar86._8_8_;
                *(undefined8 *)(local_90 + lVar60) = auVar86._0_8_;
              } while ((int)uVar63 <= iVar69);
            } while ((int)uVar41 <= (int)uVar63);
          }
          uVar82 = -(uVar80 >> 0x1f) & 0xfffffffe00000000 | uVar80 << 1;
          uVar79 = (uint)uVar80;
          uVar63 = uVar79 - uVar1;
          if ((int)uVar79 < (int)uVar1) {
            uVar63 = uVar79;
          }
          uVar76 = -(ulong)(uVar63 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar63 << 1;
          uVar70 = iVar58 + uVar79;
          if ((int)uVar79 < (int)uVar83) {
            uVar70 = uVar63;
          }
          uVar53 = -(ulong)(uVar70 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar70 << 1;
          uVar18 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar52 * 2);
          uVar19 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar52 * 2);
          uVar63 = uVar79 + uVar1;
          if ((int)(uVar41 - uVar1) <= (int)uVar79) {
            uVar63 = uVar79;
          }
          uVar20 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar52 * 2);
          uVar70 = uVar79 + uVar83;
          if ((int)(uVar41 + iVar58) <= (int)uVar79) {
            uVar70 = uVar63;
          }
          uVar72 = -(ulong)(uVar70 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar70 << 1;
          uVar40 = uVar18;
          if (uVar19 < uVar18) {
            uVar40 = uVar19;
          }
          if (uVar18 < uVar19) {
            uVar18 = uVar19;
          }
          uVar19 = uVar20;
          if (uVar40 < uVar20) {
            uVar19 = uVar40;
          }
          uVar75 = -(ulong)(uVar63 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar63 << 1;
          if (uVar20 < uVar40) {
            uVar20 = uVar40;
          }
          uVar21 = *(ushort *)((long)puVar74 + uVar72 + (long)iVar52 * 2);
          uVar22 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar44 * 2);
          uVar40 = uVar20;
          if (uVar18 < uVar20) {
            uVar40 = uVar18;
          }
          uVar23 = *(ushort *)((long)puVar74 + uVar75 + (long)iVar52 * 2);
          if (uVar20 < uVar18) {
            uVar20 = uVar18;
          }
          uVar18 = uVar21;
          if (uVar22 < uVar21) {
            uVar18 = uVar22;
          }
          if (uVar21 < uVar22) {
            uVar21 = uVar22;
          }
          uVar22 = uVar18;
          if (uVar23 < uVar18) {
            uVar22 = uVar23;
          }
          if (uVar18 < uVar23) {
            uVar18 = uVar23;
          }
          uVar24 = *(ushort *)((long)puVar74 + uVar75 + (long)iVar44 * 2);
          uVar25 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar44 * 2);
          uVar23 = uVar18;
          if (uVar21 < uVar18) {
            uVar23 = uVar21;
          }
          if (uVar18 < uVar21) {
            uVar18 = uVar21;
          }
          uVar21 = uVar22;
          if (uVar19 < uVar22) {
            uVar21 = uVar19;
          }
          if (uVar22 < uVar19) {
            uVar22 = uVar19;
          }
          uVar19 = uVar18;
          if (uVar20 < uVar18) {
            uVar19 = uVar20;
          }
          if (uVar18 < uVar20) {
            uVar18 = uVar20;
          }
          uVar20 = uVar19;
          if (uVar22 < uVar19) {
            uVar20 = uVar22;
          }
          if (uVar19 < uVar22) {
            uVar19 = uVar22;
          }
          uVar22 = uVar23;
          if (uVar40 < uVar23) {
            uVar22 = uVar40;
          }
          if (uVar23 < uVar40) {
            uVar23 = uVar40;
          }
          uVar40 = uVar20;
          if (uVar22 < uVar20) {
            uVar40 = uVar22;
          }
          if (uVar20 < uVar22) {
            uVar20 = uVar22;
          }
          uVar22 = uVar19;
          if (uVar23 < uVar19) {
            uVar22 = uVar23;
          }
          if (uVar19 < uVar23) {
            uVar19 = uVar23;
          }
          uVar26 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar44 * 2);
          uVar27 = *(ushort *)((long)puVar64 + uVar53);
          uVar23 = uVar24;
          if (uVar25 < uVar24) {
            uVar23 = uVar25;
          }
          if (uVar24 < uVar25) {
            uVar24 = uVar25;
          }
          uVar25 = uVar23;
          if (uVar26 < uVar23) {
            uVar25 = uVar26;
          }
          if (uVar23 < uVar26) {
            uVar23 = uVar26;
          }
          uVar28 = *(ushort *)((long)puVar64 + uVar76);
          uVar29 = *(ushort *)((long)puVar74 + uVar72 + (long)iVar44 * 2);
          uVar26 = uVar23;
          if (uVar24 < uVar23) {
            uVar26 = uVar24;
          }
          if (uVar23 < uVar24) {
            uVar23 = uVar24;
          }
          uVar24 = uVar27;
          if (uVar28 < uVar27) {
            uVar24 = uVar28;
          }
          if (uVar27 < uVar28) {
            uVar27 = uVar28;
          }
          uVar28 = uVar29;
          if (uVar24 < uVar29) {
            uVar28 = uVar24;
          }
          if (uVar29 < uVar24) {
            uVar29 = uVar24;
          }
          uVar137 = *(ushort *)((long)puVar64 + uVar75);
          uVar30 = *(ushort *)((long)puVar64 + uVar72);
          uVar24 = uVar29;
          if (uVar27 < uVar29) {
            uVar24 = uVar27;
          }
          if (uVar29 < uVar27) {
            uVar29 = uVar27;
          }
          uVar27 = uVar28;
          if (uVar25 < uVar28) {
            uVar27 = uVar25;
          }
          uVar80 = (ulong)(uVar79 + 1);
          if (uVar28 < uVar25) {
            uVar28 = uVar25;
          }
          uVar25 = uVar29;
          if (uVar23 < uVar29) {
            uVar25 = uVar23;
          }
          if (uVar29 < uVar23) {
            uVar29 = uVar23;
          }
          uVar23 = uVar25;
          if (uVar28 < uVar25) {
            uVar23 = uVar28;
          }
          if (uVar25 < uVar28) {
            uVar25 = uVar28;
          }
          uVar28 = uVar24;
          if (uVar26 < uVar24) {
            uVar28 = uVar26;
          }
          if (uVar24 < uVar26) {
            uVar24 = uVar26;
          }
          uVar26 = uVar23;
          if (uVar28 < uVar23) {
            uVar26 = uVar28;
          }
          if (uVar23 < uVar28) {
            uVar23 = uVar28;
          }
          uVar28 = uVar25;
          if (uVar24 < uVar25) {
            uVar28 = uVar24;
          }
          if (uVar25 < uVar24) {
            uVar25 = uVar24;
          }
          uVar24 = uVar21;
          if (uVar21 < uVar27) {
            uVar24 = uVar27;
          }
          uVar12 = uVar19;
          if (uVar25 < uVar19) {
            uVar12 = uVar25;
          }
          if (uVar19 < uVar25) {
            uVar19 = uVar25;
          }
          uVar25 = uVar12;
          if (uVar24 < uVar12) {
            uVar25 = uVar24;
          }
          if (uVar12 < uVar24) {
            uVar12 = uVar24;
          }
          uVar24 = uVar20;
          if (uVar23 < uVar20) {
            uVar24 = uVar23;
          }
          if (uVar20 < uVar23) {
            uVar20 = uVar23;
          }
          uVar23 = uVar25;
          if (uVar24 < uVar25) {
            uVar23 = uVar24;
          }
          if (uVar25 < uVar24) {
            uVar25 = uVar24;
          }
          uVar31 = *(ushort *)((long)puVar64 + uVar82);
          uVar24 = uVar12;
          if (uVar20 < uVar12) {
            uVar24 = uVar20;
          }
          uVar32 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar42 * 2);
          if (uVar12 < uVar20) {
            uVar12 = uVar20;
          }
          uVar20 = uVar40;
          if (uVar26 < uVar40) {
            uVar20 = uVar26;
          }
          if (uVar40 < uVar26) {
            uVar40 = uVar26;
          }
          uVar26 = uVar18;
          if (uVar29 < uVar18) {
            uVar26 = uVar29;
          }
          uVar17 = uVar40;
          if (uVar26 < uVar40) {
            uVar17 = uVar26;
          }
          if (uVar40 < uVar26) {
            uVar40 = uVar26;
          }
          uVar138 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar43 * 2);
          uVar26 = uVar22;
          if (uVar28 < uVar22) {
            uVar26 = uVar28;
          }
          if (uVar22 < uVar28) {
            uVar22 = uVar28;
          }
          uVar28 = uVar17;
          if (uVar26 < uVar17) {
            uVar28 = uVar26;
          }
          if (uVar17 < uVar26) {
            uVar17 = uVar26;
          }
          uVar33 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar42 * 2);
          uVar26 = uVar40;
          if (uVar22 < uVar40) {
            uVar26 = uVar22;
          }
          if (uVar40 < uVar22) {
            uVar40 = uVar22;
          }
          uVar22 = uVar30;
          if (uVar137 < uVar30) {
            uVar22 = uVar137;
          }
          if (uVar30 < uVar137) {
            uVar30 = uVar137;
          }
          uVar137 = uVar22;
          if (uVar31 < uVar22) {
            uVar137 = uVar31;
          }
          if (uVar22 < uVar31) {
            uVar22 = uVar31;
          }
          uVar31 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar42 * 2);
          uVar14 = uVar22;
          if (uVar30 < uVar22) {
            uVar14 = uVar30;
          }
          if (uVar22 < uVar30) {
            uVar22 = uVar30;
          }
          uVar30 = uVar32;
          if (uVar33 < uVar32) {
            uVar30 = uVar33;
          }
          if (uVar32 < uVar33) {
            uVar32 = uVar33;
          }
          uVar33 = uVar31;
          if (uVar30 < uVar31) {
            uVar33 = uVar30;
          }
          if (uVar31 < uVar30) {
            uVar31 = uVar30;
          }
          uVar34 = *(ushort *)((long)puVar74 + uVar72 + (long)iVar42 * 2);
          uVar30 = uVar31;
          if (uVar32 < uVar31) {
            uVar30 = uVar32;
          }
          if (uVar31 < uVar32) {
            uVar31 = uVar32;
          }
          uVar32 = uVar137;
          if (uVar33 < uVar137) {
            uVar32 = uVar33;
          }
          if (uVar137 < uVar33) {
            uVar137 = uVar33;
          }
          uVar33 = uVar22;
          if (uVar31 < uVar22) {
            uVar33 = uVar31;
          }
          if (uVar22 < uVar31) {
            uVar22 = uVar31;
          }
          uVar31 = uVar33;
          if (uVar137 < uVar33) {
            uVar31 = uVar137;
          }
          if (uVar33 < uVar137) {
            uVar33 = uVar137;
          }
          uVar35 = *(ushort *)((long)puVar74 + uVar75 + (long)iVar42 * 2);
          uVar36 = *(ushort *)((long)puVar74 + uVar75 + (long)iVar43 * 2);
          uVar137 = uVar14;
          if (uVar30 < uVar14) {
            uVar137 = uVar30;
          }
          if (uVar14 < uVar30) {
            uVar14 = uVar30;
          }
          uVar30 = uVar31;
          if (uVar137 < uVar31) {
            uVar30 = uVar137;
          }
          if (uVar31 < uVar137) {
            uVar31 = uVar137;
          }
          uVar37 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar43 * 2);
          uVar137 = uVar33;
          if (uVar14 < uVar33) {
            uVar137 = uVar14;
          }
          uVar38 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar43 * 2);
          if (uVar33 < uVar14) {
            uVar33 = uVar14;
          }
          uVar14 = uVar34;
          if (uVar138 < uVar34) {
            uVar14 = uVar138;
          }
          if (uVar34 < uVar138) {
            uVar34 = uVar138;
          }
          uVar138 = uVar14;
          if (uVar35 < uVar14) {
            uVar138 = uVar35;
          }
          if (uVar14 < uVar35) {
            uVar14 = uVar35;
          }
          uVar39 = *(ushort *)((long)puVar74 + uVar72 + (long)iVar43 * 2);
          uVar35 = uVar14;
          if (uVar34 < uVar14) {
            uVar35 = uVar34;
          }
          if (uVar14 < uVar34) {
            uVar14 = uVar34;
          }
          uVar34 = uVar37;
          if (uVar38 < uVar37) {
            uVar34 = uVar38;
          }
          if (uVar37 < uVar38) {
            uVar37 = uVar38;
          }
          uVar38 = uVar39;
          if (uVar36 < uVar39) {
            uVar38 = uVar36;
          }
          if (uVar39 < uVar36) {
            uVar39 = uVar36;
          }
          uVar36 = uVar38;
          if (uVar34 < uVar38) {
            uVar36 = uVar34;
          }
          if (uVar38 < uVar34) {
            uVar38 = uVar34;
          }
          uVar34 = uVar39;
          if (uVar37 < uVar39) {
            uVar34 = uVar37;
          }
          if (uVar39 < uVar37) {
            uVar39 = uVar37;
          }
          uVar37 = uVar34;
          if (uVar38 < uVar34) {
            uVar37 = uVar38;
          }
          if (uVar34 < uVar38) {
            uVar34 = uVar38;
          }
          uVar38 = uVar36;
          if (uVar138 < uVar36) {
            uVar38 = uVar138;
          }
          if (uVar36 < uVar138) {
            uVar36 = uVar138;
          }
          uVar138 = uVar34;
          if (uVar14 < uVar34) {
            uVar138 = uVar14;
          }
          if (uVar34 < uVar14) {
            uVar34 = uVar14;
          }
          uVar14 = uVar138;
          if (uVar36 < uVar138) {
            uVar14 = uVar36;
          }
          if (uVar138 < uVar36) {
            uVar138 = uVar36;
          }
          uVar36 = uVar37;
          if (uVar35 < uVar37) {
            uVar36 = uVar35;
          }
          if (uVar37 < uVar35) {
            uVar37 = uVar35;
          }
          uVar35 = uVar37;
          if (uVar39 < uVar37) {
            uVar35 = uVar39;
          }
          if (uVar37 < uVar39) {
            uVar37 = uVar39;
          }
          uVar39 = uVar14;
          if (uVar36 < uVar14) {
            uVar39 = uVar36;
          }
          if (uVar14 < uVar36) {
            uVar14 = uVar36;
          }
          uVar36 = uVar35;
          if (uVar138 < uVar35) {
            uVar36 = uVar138;
          }
          if (uVar35 < uVar138) {
            uVar35 = uVar138;
          }
          uVar138 = uVar37;
          if (uVar34 < uVar37) {
            uVar138 = uVar34;
          }
          if (uVar37 < uVar34) {
            uVar37 = uVar34;
          }
          uVar34 = uVar38;
          if (uVar38 < uVar32) {
            uVar34 = uVar32;
          }
          uVar13 = uVar35;
          if (uVar33 < uVar35) {
            uVar13 = uVar33;
          }
          if (uVar35 < uVar33) {
            uVar35 = uVar33;
          }
          uVar33 = uVar13;
          if (uVar34 < uVar13) {
            uVar33 = uVar34;
          }
          if (uVar13 < uVar34) {
            uVar13 = uVar34;
          }
          uVar34 = uVar14;
          if (uVar31 < uVar14) {
            uVar34 = uVar31;
          }
          if (uVar14 < uVar31) {
            uVar14 = uVar31;
          }
          uVar31 = uVar14;
          if (uVar37 < uVar14) {
            uVar31 = uVar37;
          }
          if (uVar14 < uVar37) {
            uVar14 = uVar37;
          }
          uVar37 = uVar33;
          if (uVar34 < uVar33) {
            uVar37 = uVar34;
          }
          if (uVar33 < uVar34) {
            uVar33 = uVar34;
          }
          uVar34 = uVar31;
          if (uVar13 < uVar31) {
            uVar34 = uVar13;
          }
          if (uVar31 < uVar13) {
            uVar31 = uVar13;
          }
          uVar13 = uVar14;
          if (uVar35 < uVar14) {
            uVar13 = uVar35;
          }
          if (uVar14 < uVar35) {
            uVar14 = uVar35;
          }
          uVar35 = uVar39;
          if (uVar30 < uVar39) {
            uVar35 = uVar30;
          }
          if (uVar39 < uVar30) {
            uVar39 = uVar30;
          }
          uVar30 = uVar138;
          if (uVar22 < uVar138) {
            uVar30 = uVar22;
          }
          if (uVar138 < uVar22) {
            uVar138 = uVar22;
          }
          uVar22 = uVar30;
          if (uVar39 < uVar30) {
            uVar22 = uVar39;
          }
          if (uVar30 < uVar39) {
            uVar30 = uVar39;
          }
          uVar39 = uVar36;
          if (uVar137 < uVar36) {
            uVar39 = uVar137;
          }
          if (uVar36 < uVar137) {
            uVar36 = uVar137;
          }
          uVar137 = uVar22;
          if (uVar39 < uVar22) {
            uVar137 = uVar39;
          }
          if (uVar22 < uVar39) {
            uVar22 = uVar39;
          }
          uVar39 = uVar30;
          if (uVar36 < uVar30) {
            uVar39 = uVar36;
          }
          if (uVar30 < uVar36) {
            uVar30 = uVar36;
          }
          uVar36 = uVar30;
          if (uVar30 < uVar13) {
            uVar36 = uVar13;
          }
          uVar16 = uVar40;
          if (uVar40 < uVar19) {
            uVar16 = uVar19;
          }
          if (uVar16 < uVar36) {
            uVar36 = uVar16;
          }
          uVar16 = uVar35;
          if (uVar35 < uVar20) {
            uVar16 = uVar20;
          }
          if (uVar16 < uVar23) {
            uVar16 = uVar23;
          }
          if (uVar16 < uVar37) {
            uVar16 = uVar37;
          }
          if (uVar16 < uVar36) {
            uVar36 = uVar16;
          }
          uVar16 = uVar22;
          if (uVar22 < uVar34) {
            uVar16 = uVar34;
          }
          uVar15 = uVar17;
          if (uVar17 < uVar24) {
            uVar15 = uVar24;
          }
          if (uVar15 < uVar16) {
            uVar16 = uVar15;
          }
          if (uVar36 < uVar16) {
            uVar36 = uVar16;
          }
          uVar16 = uVar28;
          if (uVar28 < uVar25) {
            uVar16 = uVar25;
          }
          if (uVar16 < uVar33) {
            uVar16 = uVar33;
          }
          if (uVar16 < uVar137) {
            uVar16 = uVar137;
          }
          uVar15 = uVar14;
          if (uVar14 < uVar138) {
            uVar15 = uVar138;
          }
          if (uVar15 < uVar16) {
            uVar16 = uVar15;
          }
          if (uVar32 < uVar38) {
            uVar38 = uVar32;
          }
          if (uVar27 < uVar21) {
            uVar21 = uVar27;
          }
          if (uVar38 < uVar21) {
            uVar38 = uVar21;
          }
          uVar21 = uVar39;
          if (uVar39 < uVar31) {
            uVar21 = uVar31;
          }
          uVar27 = uVar26;
          if (uVar26 < uVar12) {
            uVar27 = uVar12;
          }
          if (uVar27 < uVar21) {
            uVar21 = uVar27;
          }
          if (uVar38 < uVar21) {
            uVar38 = uVar21;
          }
          if (uVar38 < uVar16) {
            uVar16 = uVar38;
          }
          if (uVar36 < uVar16) {
            uVar36 = uVar16;
          }
          if (uVar35 < uVar37) {
            uVar37 = uVar35;
          }
          if (uVar20 < uVar23) {
            uVar23 = uVar20;
          }
          if (uVar37 < uVar23) {
            uVar37 = uVar23;
          }
          if (uVar13 < uVar40) {
            uVar40 = uVar13;
          }
          if (uVar19 < uVar40) {
            uVar40 = uVar19;
          }
          if (uVar30 < uVar40) {
            uVar40 = uVar30;
          }
          if (uVar37 < uVar40) {
            uVar37 = uVar40;
          }
          if (uVar34 < uVar22) {
            uVar22 = uVar34;
          }
          if (uVar24 < uVar17) {
            uVar17 = uVar24;
          }
          if (uVar22 < uVar17) {
            uVar22 = uVar17;
          }
          if (uVar22 < uVar37) {
            uVar37 = uVar22;
          }
          if (uVar18 < uVar29) {
            uVar18 = uVar29;
          }
          if (uVar18 < uVar138) {
            uVar138 = uVar18;
          }
          if (uVar14 < uVar138) {
            uVar138 = uVar14;
          }
          if (uVar33 < uVar137) {
            uVar137 = uVar33;
          }
          if (uVar25 < uVar28) {
            uVar28 = uVar25;
          }
          if (uVar137 < uVar28) {
            uVar137 = uVar28;
          }
          if (uVar137 < uVar138) {
            uVar138 = uVar137;
          }
          if (uVar12 < uVar26) {
            uVar26 = uVar12;
          }
          if (uVar31 < uVar26) {
            uVar26 = uVar31;
          }
          if (uVar39 < uVar26) {
            uVar26 = uVar39;
          }
          if (uVar138 < uVar26) {
            uVar138 = uVar26;
          }
          if (uVar138 < uVar37) {
            uVar37 = uVar138;
          }
          if (uVar36 < uVar37) {
            uVar36 = uVar37;
          }
          *(ushort *)(local_90 + uVar82) = uVar36;
        } while( true );
      }
      iVar58 = iVar69 + 1;
      local_34 = iVar69;
    }
    uVar67 = 0;
    uVar83 = uVar1;
    local_30 = uVar1;
LAB_001f64a4:
    if (local_34 < 1) {
      return;
    }
    iVar61 = iVar58 + -2;
    lVar73 = (long)(int)local_30;
    lVar71 = (long)(int)-local_30;
    lVar62 = lVar73 * 2;
    lVar60 = lVar71 * 2;
    uVar81 = -(ulong)((local_30 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
             (ulong)(local_30 << 1) << 1;
    uVar80 = -(ulong)((-local_30 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
             (ulong)(local_30 * -2) << 1;
    puVar64 = (ushort *)(local_90 + 0x10);
    lVar55 = uVar80 + 0x10;
    lVar59 = uVar81 + 0x10;
    iVar69 = 0;
    do {
      puVar65 = puVar64 + -8;
      if (iVar69 < 1) {
        if (iVar69 < iVar58 + -3) {
          puVar54 = (ushort *)((long)puVar74 + uVar81);
          if (iVar69 < iVar61) {
            if ((uVar1 < 9 ||
                 (puVar65 < (ushort *)((long)puVar74 + lVar59) && puVar54 < puVar64 ||
                 puVar65 < puVar74 + lVar73 + 8 && puVar74 + lVar73 < puVar64)) ||
               (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
              lVar56 = 0;
              do {
                uVar40 = (puVar74 + lVar73)[lVar56];
                uVar19 = puVar54[lVar56];
                uVar20 = puVar74[lVar56];
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = uVar21;
                if (uVar21 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar40 < uVar18) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                puVar65[lVar56] = uVar20;
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
            uVar63 = uVar1;
            if (uVar77 < uVar1) {
              uVar63 = uVar77;
            }
            puVar54 = puVar74;
            if (uVar63 == 0) {
LAB_001faeb4:
              uVar82 = (ulong)uVar63;
            }
            else {
              uVar40 = puVar74[lVar73];
              puVar54 = puVar74 + 1;
              uVar19 = *(ushort *)((long)puVar74 + uVar81);
              uVar20 = *puVar74;
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar40) {
                uVar18 = uVar40;
              }
              uVar40 = uVar21;
              if (uVar21 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar40 < uVar18) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              puVar64[-8] = uVar20;
              if (uVar63 == 1) goto LAB_001faeb4;
              uVar40 = puVar54[lVar73];
              uVar19 = *(ushort *)((long)puVar54 + uVar81);
              puVar54 = puVar74 + 2;
              uVar20 = puVar74[1];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar40) {
                uVar18 = uVar40;
              }
              uVar40 = uVar21;
              if (uVar21 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar40 < uVar18) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              puVar64[-7] = uVar20;
              if (uVar63 == 2) goto LAB_001faeb4;
              uVar40 = puVar54[lVar73];
              uVar19 = *(ushort *)((long)puVar54 + uVar81);
              puVar54 = puVar74 + 3;
              uVar20 = puVar74[2];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar40) {
                uVar18 = uVar40;
              }
              uVar40 = uVar21;
              if (uVar21 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar40 < uVar18) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              puVar64[-6] = uVar20;
              if (uVar63 == 3) goto LAB_001faeb4;
              uVar40 = puVar54[lVar73];
              uVar19 = *(ushort *)((long)puVar54 + uVar81);
              puVar54 = puVar74 + 4;
              uVar20 = puVar74[3];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar40) {
                uVar18 = uVar40;
              }
              uVar40 = uVar21;
              if (uVar21 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar40 < uVar18) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              puVar64[-5] = uVar20;
              if (uVar63 == 4) {
                uVar82 = 4;
              }
              else {
                uVar40 = puVar54[lVar73];
                uVar19 = *(ushort *)((long)puVar54 + uVar81);
                puVar54 = puVar74 + 5;
                uVar20 = puVar74[4];
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = uVar21;
                if (uVar21 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar40 < uVar18) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                puVar64[-4] = uVar20;
                if (uVar63 == 5) goto LAB_001faeb4;
                uVar40 = puVar54[lVar73];
                uVar19 = *(ushort *)((long)puVar54 + uVar81);
                puVar54 = puVar74 + 6;
                uVar20 = puVar74[5];
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = uVar21;
                if (uVar21 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar40 < uVar18) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                puVar64[-3] = uVar20;
                if (uVar63 == 7) {
                  uVar40 = puVar54[lVar73];
                  uVar82 = 7;
                  uVar19 = *(ushort *)((long)puVar54 + uVar81);
                  puVar54 = puVar74 + 7;
                  uVar20 = puVar74[6];
                  uVar18 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar40 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar40 = uVar18;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar18) {
                    uVar21 = uVar18;
                  }
                  uVar18 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar40 = uVar21;
                  if (uVar21 < uVar19) {
                    uVar40 = uVar19;
                  }
                  if (uVar40 < uVar18) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar21 < uVar20) {
                    uVar20 = uVar21;
                  }
                  if (uVar20 < uVar18) {
                    uVar20 = uVar18;
                  }
                  puVar64[-2] = uVar20;
                }
                else {
                  uVar82 = 6;
                }
              }
            }
            uVar77 = ((uVar1 - uVar63) - 8 >> 3) + 1;
            uVar79 = uVar77 * 8;
            if (6 < uVar41 - uVar63) {
              lVar66 = (ulong)uVar63 * 2;
              lVar56 = 0;
              uVar70 = 0;
              do {
                lVar147 = lVar56 + lVar66;
                uVar70 = uVar70 + 1;
                puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar62 + lVar66);
                puVar50 = (ushort *)((long)puVar74 + lVar147);
                puVar8 = (ushort *)((long)puVar74 + lVar56 + uVar81 + lVar66);
                lVar56 = lVar56 + 0x10;
                auVar148._2_2_ = 0;
                auVar148._0_2_ = *puVar6;
                auVar148._4_2_ = puVar6[1];
                auVar148._6_2_ = 0;
                auVar148._8_2_ = puVar6[2];
                auVar148._10_2_ = 0;
                auVar148._12_2_ = puVar6[3];
                auVar148._14_2_ = 0;
                auVar151._2_2_ = 0;
                auVar151._0_2_ = puVar6[4];
                auVar151._4_2_ = puVar6[5];
                auVar151._6_2_ = 0;
                auVar151._8_2_ = puVar6[6];
                auVar151._10_2_ = 0;
                auVar151._12_2_ = puVar6[7];
                auVar151._14_2_ = 0;
                puVar68 = (undefined8 *)((long)puVar65 + lVar147);
                auVar129._2_2_ = 0;
                auVar129._0_2_ = *puVar50;
                auVar129._4_2_ = puVar50[1];
                auVar129._6_2_ = 0;
                auVar129._8_2_ = puVar50[2];
                auVar129._10_2_ = 0;
                auVar129._12_2_ = puVar50[3];
                auVar129._14_2_ = 0;
                auVar111._2_2_ = 0;
                auVar111._0_2_ = puVar50[4];
                auVar111._4_2_ = puVar50[5];
                auVar111._6_2_ = 0;
                auVar111._8_2_ = puVar50[6];
                auVar111._10_2_ = 0;
                auVar111._12_2_ = puVar50[7];
                auVar111._14_2_ = 0;
                auVar139._2_2_ = 0;
                auVar139._0_2_ = *puVar8;
                auVar139._4_2_ = puVar8[1];
                auVar139._6_2_ = 0;
                auVar139._8_2_ = puVar8[2];
                auVar139._10_2_ = 0;
                auVar139._12_2_ = puVar8[3];
                auVar139._14_2_ = 0;
                auVar181._2_2_ = 0;
                auVar181._0_2_ = puVar8[4];
                auVar181._4_2_ = puVar8[5];
                auVar181._6_2_ = 0;
                auVar181._8_2_ = puVar8[6];
                auVar181._10_2_ = 0;
                auVar181._12_2_ = puVar8[7];
                auVar181._14_2_ = 0;
                auVar140 = NEON_smin(auVar139,auVar148,4);
                auVar89 = NEON_smin(auVar181,auVar151,4);
                auVar166 = NEON_smax(auVar139,auVar148,4);
                auVar86 = NEON_smax(auVar181,auVar151,4);
                auVar84 = NEON_smax(auVar129,auVar140,4);
                auVar96 = NEON_smax(auVar111,auVar89,4);
                auVar85 = NEON_smin(auVar129,auVar140,4);
                auVar87 = NEON_smin(auVar111,auVar89,4);
                auVar174 = NEON_smin(auVar129,auVar166,4);
                auVar88 = NEON_smin(auVar111,auVar86,4);
                auVar140 = NEON_smax(auVar84,auVar166,4);
                auVar166 = NEON_smax(auVar96,auVar86,4);
                auVar89 = NEON_smax(auVar129,auVar85,4);
                auVar86 = NEON_smax(auVar111,auVar87,4);
                auVar174 = NEON_smin(auVar174,auVar84,4);
                auVar89 = NEON_smin(auVar89,auVar140,4);
                auVar86 = NEON_smin(auVar86,auVar166,4);
                auVar140 = NEON_smin(auVar88,auVar96,4);
                auVar166 = NEON_smax(auVar174,auVar89,4);
                auVar86 = NEON_smax(auVar140,auVar86,4);
                auVar175._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar175._8_2_ = auVar86._0_2_;
                auVar175._10_2_ = auVar86._4_2_;
                auVar175._12_2_ = auVar86._8_2_;
                auVar175._14_2_ = auVar86._12_2_;
                puVar68[1] = auVar175._8_8_;
                *puVar68 = auVar175._0_8_;
              } while (uVar70 < uVar77);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar1 - uVar63 == uVar79) goto LAB_001f6ed8;
            }
            uVar40 = puVar54[lVar73];
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            uVar19 = *(ushort *)((long)puVar54 + uVar81);
            iVar52 = (int)uVar82;
            uVar20 = *puVar54;
            uVar18 = uVar19;
            if (uVar40 < uVar19) {
              uVar18 = uVar40;
            }
            if (uVar19 < uVar40) {
              uVar19 = uVar40;
            }
            uVar40 = uVar20;
            if (uVar18 < uVar20) {
              uVar40 = uVar18;
            }
            uVar21 = uVar20;
            if (uVar20 < uVar18) {
              uVar21 = uVar18;
            }
            uVar18 = uVar20;
            if (uVar20 < uVar40) {
              uVar18 = uVar40;
            }
            uVar40 = uVar21;
            if (uVar21 < uVar19) {
              uVar40 = uVar19;
            }
            if (uVar40 < uVar18) {
              uVar18 = uVar40;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar21 < uVar20) {
              uVar20 = uVar21;
            }
            if (uVar20 < uVar18) {
              uVar20 = uVar18;
            }
            *(ushort *)((long)puVar65 + uVar76) = uVar20;
            if (iVar52 + 1 < (int)uVar1) {
              uVar40 = puVar54[lVar73 + 1];
              uVar19 = *(ushort *)((long)puVar54 + uVar81 + 2);
              uVar20 = puVar54[1];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar40) {
                uVar18 = uVar40;
              }
              uVar40 = uVar21;
              if (uVar21 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar40 < uVar18) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
              if (iVar52 + 2 < (int)uVar1) {
                uVar40 = puVar54[lVar73 + 2];
                uVar19 = *(ushort *)((long)puVar54 + uVar81 + 4);
                uVar20 = puVar54[2];
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = uVar21;
                if (uVar21 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar40 < uVar18) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
                if (iVar52 + 3 < (int)uVar1) {
                  uVar40 = puVar54[lVar73 + 3];
                  uVar19 = *(ushort *)((long)puVar54 + uVar81 + 6);
                  uVar20 = puVar54[3];
                  uVar18 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar40 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar40 = uVar18;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar18) {
                    uVar21 = uVar18;
                  }
                  uVar18 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar40 = uVar21;
                  if (uVar21 < uVar19) {
                    uVar40 = uVar19;
                  }
                  if (uVar40 < uVar18) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar21 < uVar20) {
                    uVar20 = uVar21;
                  }
                  if (uVar20 < uVar18) {
                    uVar20 = uVar18;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                  if (iVar52 + 4 < (int)uVar1) {
                    uVar40 = puVar54[lVar73 + 4];
                    uVar19 = *(ushort *)((long)puVar54 + uVar81 + 8);
                    uVar20 = puVar54[4];
                    uVar18 = uVar19;
                    if (uVar40 < uVar19) {
                      uVar18 = uVar40;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    uVar40 = uVar20;
                    if (uVar18 < uVar20) {
                      uVar40 = uVar18;
                    }
                    uVar21 = uVar20;
                    if (uVar20 < uVar18) {
                      uVar21 = uVar18;
                    }
                    uVar18 = uVar20;
                    if (uVar20 < uVar40) {
                      uVar18 = uVar40;
                    }
                    uVar40 = uVar21;
                    if (uVar21 < uVar19) {
                      uVar40 = uVar19;
                    }
                    if (uVar40 < uVar18) {
                      uVar18 = uVar40;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar21 < uVar20) {
                      uVar20 = uVar21;
                    }
                    if (uVar20 < uVar18) {
                      uVar20 = uVar18;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                    if (iVar52 + 5 < (int)uVar1) {
                      uVar40 = puVar54[lVar73 + 5];
                      uVar19 = *(ushort *)((long)puVar54 + uVar81 + 10);
                      uVar20 = puVar54[5];
                      uVar18 = uVar19;
                      if (uVar40 < uVar19) {
                        uVar18 = uVar40;
                      }
                      if (uVar19 < uVar40) {
                        uVar19 = uVar40;
                      }
                      uVar40 = uVar20;
                      if (uVar18 < uVar20) {
                        uVar40 = uVar18;
                      }
                      uVar21 = uVar20;
                      if (uVar20 < uVar18) {
                        uVar21 = uVar18;
                      }
                      uVar18 = uVar20;
                      if (uVar20 < uVar40) {
                        uVar18 = uVar40;
                      }
                      uVar40 = uVar21;
                      if (uVar21 < uVar19) {
                        uVar40 = uVar19;
                      }
                      if (uVar40 < uVar18) {
                        uVar18 = uVar40;
                      }
                      if (uVar19 < uVar20) {
                        uVar20 = uVar19;
                      }
                      if (uVar21 < uVar20) {
                        uVar20 = uVar21;
                      }
                      if (uVar20 < uVar18) {
                        uVar20 = uVar18;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 10) = uVar20;
                      if (iVar52 + 6 < (int)uVar1) {
                        uVar40 = puVar54[lVar73 + 6];
                        uVar19 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                        uVar20 = puVar54[6];
                        uVar18 = uVar19;
                        if (uVar40 < uVar19) {
                          uVar18 = uVar40;
                        }
                        if (uVar19 < uVar40) {
                          uVar19 = uVar40;
                        }
                        uVar40 = uVar20;
                        if (uVar18 < uVar20) {
                          uVar40 = uVar18;
                        }
                        uVar21 = uVar20;
                        if (uVar20 < uVar18) {
                          uVar21 = uVar18;
                        }
                        uVar18 = uVar20;
                        if (uVar20 < uVar40) {
                          uVar18 = uVar40;
                        }
                        uVar40 = uVar21;
                        if (uVar21 < uVar19) {
                          uVar40 = uVar19;
                        }
                        if (uVar40 < uVar18) {
                          uVar18 = uVar40;
                        }
                        if (uVar19 < uVar20) {
                          uVar20 = uVar19;
                        }
                        if (uVar21 < uVar20) {
                          uVar20 = uVar21;
                        }
                        if (uVar20 < uVar18) {
                          uVar20 = uVar18;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar20;
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            if ((puVar65 < (ushort *)((long)puVar74 + lVar59) && puVar54 < puVar64 ||
                 puVar65 < puVar74 + 8 && puVar74 < puVar64) || (uVar1 < 9)) {
              lVar56 = 0;
              do {
                uVar20 = puVar74[lVar56];
                uVar19 = puVar54[lVar56];
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                if (uVar40 < uVar20) {
                  uVar40 = uVar20;
                }
                uVar21 = uVar18;
                if (uVar18 < uVar19) {
                  uVar21 = uVar19;
                }
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar20 < uVar19) {
                  uVar19 = uVar20;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                puVar65[lVar56] = uVar19;
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
            if (uVar1 < uVar77) {
              uVar77 = uVar1;
            }
            puVar54 = puVar74;
            if (uVar77 == 0) {
LAB_001fbe84:
              uVar82 = (ulong)uVar77;
            }
            else {
              uVar19 = *puVar74;
              uVar20 = *(ushort *)((long)puVar74 + uVar81);
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar20) {
                uVar40 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar21;
              if (uVar21 < uVar40) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar18) {
                uVar18 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              puVar64[-8] = uVar19;
              puVar54 = puVar74 + 1;
              if (uVar77 == 1) goto LAB_001fbe84;
              uVar19 = puVar74[1];
              uVar20 = *(ushort *)((long)(puVar74 + 1) + uVar81);
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar20) {
                uVar40 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar21;
              if (uVar21 < uVar40) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar18) {
                uVar18 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              puVar64[-7] = uVar19;
              puVar54 = puVar74 + 2;
              if (uVar77 == 2) goto LAB_001fbe84;
              uVar19 = puVar74[2];
              uVar20 = *(ushort *)((long)(puVar74 + 2) + uVar81);
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar20) {
                uVar40 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar21;
              if (uVar21 < uVar40) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar18) {
                uVar18 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              puVar64[-6] = uVar19;
              puVar54 = puVar74 + 3;
              if (uVar77 == 3) goto LAB_001fbe84;
              uVar19 = puVar74[3];
              uVar20 = *(ushort *)((long)(puVar74 + 3) + uVar81);
              puVar54 = puVar74 + 4;
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar20) {
                uVar40 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar21;
              if (uVar21 < uVar40) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar18) {
                uVar18 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              puVar64[-5] = uVar19;
              if (uVar77 == 4) {
                uVar82 = 4;
              }
              else {
                uVar19 = puVar74[4];
                uVar20 = *(ushort *)((long)puVar54 + uVar81);
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                uVar40 = uVar19;
                if (uVar19 < uVar20) {
                  uVar40 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar18 < uVar19) {
                  uVar20 = uVar18;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar19;
                if (uVar19 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar21;
                if (uVar21 < uVar40) {
                  uVar20 = uVar40;
                }
                if (uVar20 < uVar18) {
                  uVar18 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar19 < uVar18) {
                  uVar19 = uVar18;
                }
                puVar64[-4] = uVar19;
                puVar54 = puVar74 + 5;
                if (uVar77 == 5) goto LAB_001fbe84;
                uVar19 = puVar74[5];
                uVar20 = *(ushort *)((long)(puVar74 + 5) + uVar81);
                puVar54 = puVar74 + 6;
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                uVar40 = uVar19;
                if (uVar19 < uVar20) {
                  uVar40 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar18 < uVar19) {
                  uVar20 = uVar18;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar19;
                if (uVar19 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar21;
                if (uVar21 < uVar40) {
                  uVar20 = uVar40;
                }
                if (uVar20 < uVar18) {
                  uVar18 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar19 < uVar18) {
                  uVar19 = uVar18;
                }
                puVar64[-3] = uVar19;
                if (uVar77 == 7) {
                  uVar20 = puVar74[6];
                  uVar82 = 7;
                  uVar19 = *(ushort *)((long)puVar54 + uVar81);
                  puVar54 = puVar74 + 7;
                  uVar18 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar20;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  if (uVar40 < uVar20) {
                    uVar40 = uVar20;
                  }
                  uVar21 = uVar18;
                  if (uVar18 < uVar19) {
                    uVar21 = uVar19;
                  }
                  if (uVar21 < uVar40) {
                    uVar40 = uVar21;
                  }
                  if (uVar20 < uVar19) {
                    uVar19 = uVar20;
                  }
                  if (uVar18 < uVar19) {
                    uVar19 = uVar18;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  puVar64[-2] = uVar19;
                }
                else {
                  uVar82 = 6;
                }
              }
            }
            uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
            uVar79 = uVar63 * 8;
            if (6 < uVar41 - uVar77) {
              lVar56 = 0;
              uVar70 = 0;
              do {
                uVar70 = uVar70 + 1;
                lVar66 = lVar56 + (ulong)uVar77 * 2;
                puVar6 = (ushort *)((long)puVar74 + lVar66);
                puVar50 = (ushort *)((long)puVar74 + lVar56 + uVar81 + (ulong)uVar77 * 2);
                puVar68 = (undefined8 *)((long)puVar65 + lVar66);
                lVar56 = lVar56 + 0x10;
                auVar96._2_2_ = 0;
                auVar96._0_2_ = *puVar6;
                auVar96._4_2_ = puVar6[1];
                auVar96._6_2_ = 0;
                auVar96._8_2_ = puVar6[2];
                auVar96._10_2_ = 0;
                auVar96._12_2_ = puVar6[3];
                auVar96._14_2_ = 0;
                auVar105._2_2_ = 0;
                auVar105._0_2_ = *puVar50;
                auVar105._4_2_ = puVar50[1];
                auVar105._6_2_ = 0;
                auVar105._8_2_ = puVar50[2];
                auVar105._10_2_ = 0;
                auVar105._12_2_ = puVar50[3];
                auVar105._14_2_ = 0;
                auVar89._2_2_ = 0;
                auVar89._0_2_ = puVar6[4];
                auVar89._4_2_ = puVar6[5];
                auVar89._6_2_ = 0;
                auVar89._8_2_ = puVar6[6];
                auVar89._10_2_ = 0;
                auVar89._12_2_ = puVar6[7];
                auVar89._14_2_ = 0;
                auVar84._2_2_ = 0;
                auVar84._0_2_ = puVar50[4];
                auVar84._4_2_ = puVar50[5];
                auVar84._6_2_ = 0;
                auVar84._8_2_ = puVar50[6];
                auVar84._10_2_ = 0;
                auVar84._12_2_ = puVar50[7];
                auVar84._14_2_ = 0;
                auVar88 = NEON_smin(auVar96,auVar105,4);
                auVar166 = NEON_smax(auVar96,auVar105,4);
                auVar140 = NEON_smin(auVar89,auVar84,4);
                auVar86 = NEON_smax(auVar89,auVar84,4);
                auVar105 = NEON_smax(auVar96,auVar88,4);
                auVar84 = NEON_smin(auVar96,auVar88,4);
                auVar103 = NEON_smax(auVar89,auVar140,4);
                auVar85 = NEON_smin(auVar89,auVar140,4);
                auVar87 = NEON_smin(auVar96,auVar166,4);
                auVar174 = NEON_smin(auVar89,auVar86,4);
                auVar88 = NEON_smax(auVar105,auVar166,4);
                auVar140 = NEON_smax(auVar103,auVar86,4);
                auVar166 = NEON_smax(auVar96,auVar84,4);
                auVar86 = NEON_smax(auVar89,auVar85,4);
                auVar87 = NEON_smin(auVar87,auVar105,4);
                auVar166 = NEON_smin(auVar166,auVar88,4);
                auVar86 = NEON_smin(auVar86,auVar140,4);
                auVar89 = NEON_smin(auVar174,auVar103,4);
                auVar166 = NEON_smax(auVar87,auVar166,4);
                auVar86 = NEON_smax(auVar89,auVar86,4);
                auVar103._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar103._8_2_ = auVar86._0_2_;
                auVar103._10_2_ = auVar86._4_2_;
                auVar103._12_2_ = auVar86._8_2_;
                auVar103._14_2_ = auVar86._12_2_;
                puVar68[1] = auVar103._8_8_;
                *puVar68 = auVar103._0_8_;
              } while (uVar70 < uVar63);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar79 == uVar1 - uVar77) goto LAB_001f6ed8;
            }
            uVar19 = *puVar54;
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            uVar20 = *(ushort *)((long)puVar54 + uVar81);
            iVar52 = (int)uVar82;
            uVar18 = uVar19;
            if (uVar20 < uVar19) {
              uVar18 = uVar20;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar20) {
              uVar40 = uVar20;
            }
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar21 = uVar19;
            if (uVar19 < uVar18) {
              uVar21 = uVar18;
            }
            uVar18 = uVar19;
            if (uVar19 < uVar20) {
              uVar18 = uVar20;
            }
            uVar20 = uVar21;
            if (uVar21 < uVar40) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar18) {
              uVar18 = uVar20;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            if (uVar21 < uVar19) {
              uVar19 = uVar21;
            }
            if (uVar19 < uVar18) {
              uVar19 = uVar18;
            }
            *(ushort *)((long)puVar65 + uVar76) = uVar19;
            if (iVar52 + 1 < (int)uVar1) {
              uVar19 = puVar54[1];
              uVar20 = *(ushort *)((long)puVar54 + uVar81 + 2);
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar20) {
                uVar40 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar21;
              if (uVar21 < uVar40) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar18) {
                uVar18 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              *(ushort *)((long)puVar65 + uVar76 + 2) = uVar19;
              if (iVar52 + 2 < (int)uVar1) {
                uVar19 = puVar54[2];
                uVar20 = *(ushort *)((long)puVar54 + uVar81 + 4);
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                uVar40 = uVar19;
                if (uVar19 < uVar20) {
                  uVar40 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar18 < uVar19) {
                  uVar20 = uVar18;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar19;
                if (uVar19 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar21;
                if (uVar21 < uVar40) {
                  uVar20 = uVar40;
                }
                if (uVar20 < uVar18) {
                  uVar18 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar19 < uVar18) {
                  uVar19 = uVar18;
                }
                *(ushort *)((long)puVar65 + uVar76 + 4) = uVar19;
                if (iVar52 + 3 < (int)uVar1) {
                  uVar19 = puVar54[3];
                  uVar20 = *(ushort *)((long)puVar54 + uVar81 + 6);
                  uVar18 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar20;
                  }
                  uVar40 = uVar19;
                  if (uVar19 < uVar20) {
                    uVar40 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar18 < uVar19) {
                    uVar20 = uVar18;
                  }
                  uVar21 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar21 = uVar18;
                  }
                  uVar18 = uVar19;
                  if (uVar19 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar20 = uVar21;
                  if (uVar21 < uVar40) {
                    uVar20 = uVar40;
                  }
                  if (uVar20 < uVar18) {
                    uVar18 = uVar20;
                  }
                  if (uVar40 < uVar19) {
                    uVar19 = uVar40;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar19 < uVar18) {
                    uVar19 = uVar18;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 6) = uVar19;
                  if (iVar52 + 4 < (int)uVar1) {
                    uVar19 = puVar54[4];
                    uVar20 = *(ushort *)((long)puVar54 + uVar81 + 8);
                    uVar18 = uVar19;
                    if (uVar20 < uVar19) {
                      uVar18 = uVar20;
                    }
                    uVar40 = uVar19;
                    if (uVar19 < uVar20) {
                      uVar40 = uVar20;
                    }
                    uVar20 = uVar19;
                    if (uVar18 < uVar19) {
                      uVar20 = uVar18;
                    }
                    uVar21 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar21 = uVar18;
                    }
                    uVar18 = uVar19;
                    if (uVar19 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar20 = uVar21;
                    if (uVar21 < uVar40) {
                      uVar20 = uVar40;
                    }
                    if (uVar20 < uVar18) {
                      uVar18 = uVar20;
                    }
                    if (uVar40 < uVar19) {
                      uVar19 = uVar40;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar19 < uVar18) {
                      uVar19 = uVar18;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 8) = uVar19;
                    if (iVar52 + 5 < (int)uVar1) {
                      uVar19 = puVar54[5];
                      uVar20 = *(ushort *)((long)puVar54 + uVar81 + 10);
                      uVar18 = uVar19;
                      if (uVar20 < uVar19) {
                        uVar18 = uVar20;
                      }
                      uVar40 = uVar19;
                      if (uVar19 < uVar20) {
                        uVar40 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar18 < uVar19) {
                        uVar20 = uVar18;
                      }
                      uVar21 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar21 = uVar18;
                      }
                      uVar18 = uVar19;
                      if (uVar19 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar20 = uVar21;
                      if (uVar21 < uVar40) {
                        uVar20 = uVar40;
                      }
                      if (uVar20 < uVar18) {
                        uVar18 = uVar20;
                      }
                      if (uVar40 < uVar19) {
                        uVar19 = uVar40;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar19 < uVar18) {
                        uVar19 = uVar18;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 10) = uVar19;
                      if (iVar52 + 6 < (int)uVar1) {
                        uVar20 = puVar54[6];
                        uVar19 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                        uVar18 = uVar19;
                        if (uVar20 < uVar19) {
                          uVar18 = uVar20;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        uVar40 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar40 = uVar20;
                        }
                        if (uVar18 < uVar20) {
                          uVar18 = uVar20;
                        }
                        if (uVar40 < uVar20) {
                          uVar40 = uVar20;
                        }
                        uVar21 = uVar18;
                        if (uVar18 < uVar19) {
                          uVar21 = uVar19;
                        }
                        if (uVar21 < uVar40) {
                          uVar40 = uVar21;
                        }
                        if (uVar20 < uVar19) {
                          uVar19 = uVar20;
                        }
                        if (uVar18 < uVar19) {
                          uVar19 = uVar18;
                        }
                        if (uVar19 < uVar40) {
                          uVar19 = uVar40;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar19;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else {
          if (iVar61 <= iVar69) {
            if ((puVar65 < puVar74 + 8 && puVar74 < puVar64) || (uVar1 < 9)) {
              lVar56 = 0;
              do {
                puVar65[lVar56] = puVar74[lVar56];
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
            if (uVar1 < uVar77) {
              uVar77 = uVar1;
            }
            puVar54 = puVar74;
            if (uVar77 == 0) {
LAB_001fbf0c:
              uVar82 = (ulong)uVar77;
            }
            else {
              puVar54 = puVar74 + 1;
              puVar64[-8] = *puVar74;
              if (uVar77 == 1) goto LAB_001fbf0c;
              puVar64[-7] = puVar74[1];
              puVar54 = puVar74 + 2;
              if (uVar77 == 2) goto LAB_001fbf0c;
              puVar64[-6] = puVar74[2];
              puVar54 = puVar74 + 3;
              if (uVar77 == 3) goto LAB_001fbf0c;
              puVar64[-5] = puVar74[3];
              puVar54 = puVar74 + 4;
              if (uVar77 == 4) {
                uVar82 = 4;
              }
              else {
                puVar64[-4] = puVar74[4];
                puVar54 = puVar74 + 5;
                if (uVar77 == 5) goto LAB_001fbf0c;
                puVar64[-3] = puVar74[5];
                puVar54 = puVar74 + 6;
                if (uVar77 == 7) {
                  puVar54 = puVar74 + 7;
                  puVar64[-2] = puVar74[6];
                  uVar82 = 7;
                }
                else {
                  uVar82 = 6;
                }
              }
            }
            uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
            uVar79 = uVar63 * 8;
            if (6 < uVar41 - uVar77) {
              lVar56 = 0;
              uVar70 = 0;
              do {
                lVar66 = lVar56 + (ulong)uVar77 * 2;
                uVar70 = uVar70 + 1;
                puVar68 = (undefined8 *)((long)puVar65 + lVar66);
                lVar56 = lVar56 + 0x10;
                auVar86 = *(undefined1 (*) [16])((long)puVar74 + lVar66);
                puVar68[1] = auVar86._8_8_;
                *puVar68 = auVar86._0_8_;
              } while (uVar70 < uVar63);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar79 == uVar1 - uVar77) goto LAB_001f6ed8;
            }
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            iVar52 = (int)uVar82;
            *(ushort *)((long)puVar65 + uVar76) = *puVar54;
            if (((((iVar52 + 1 < (int)uVar1) &&
                  (*(ushort *)((long)puVar65 + uVar76 + 2) = puVar54[1], iVar52 + 2 < (int)uVar1))
                 && (*(ushort *)((long)puVar65 + uVar76 + 4) = puVar54[2], iVar52 + 3 < (int)uVar1))
                && ((*(ushort *)((long)puVar65 + uVar76 + 6) = puVar54[3], iVar52 + 4 < (int)uVar1
                    && (*(ushort *)((long)puVar65 + uVar76 + 8) = puVar54[4],
                       iVar52 + 5 < (int)uVar1)))) &&
               (*(ushort *)((long)puVar65 + uVar76 + 10) = puVar54[5], iVar52 + 6 < (int)uVar1)) {
              *(ushort *)((long)puVar65 + uVar76 + 0xc) = puVar54[6];
            }
            goto LAB_001f6ed8;
          }
          if ((puVar65 < puVar74 + lVar73 + 8 && puVar74 + lVar73 < puVar64 ||
               puVar65 < puVar74 + 8 && puVar74 < puVar64) || (uVar1 < 9)) {
            lVar56 = 0;
            do {
              uVar19 = puVar74[lVar56];
              uVar20 = (puVar74 + lVar73)[lVar56];
              uVar18 = uVar20;
              if (uVar19 < uVar20) {
                uVar18 = uVar19;
              }
              uVar40 = uVar20;
              if (uVar20 < uVar19) {
                uVar40 = uVar19;
              }
              uVar21 = uVar18;
              if (uVar18 < uVar19) {
                uVar21 = uVar19;
              }
              uVar19 = uVar40;
              if (uVar40 < uVar20) {
                uVar19 = uVar20;
              }
              if (uVar19 < uVar21) {
                uVar21 = uVar19;
              }
              if (uVar18 < uVar40) {
                uVar40 = uVar18;
              }
              if (uVar40 < uVar21) {
                uVar40 = uVar21;
              }
              puVar65[lVar56] = uVar40;
              lVar56 = lVar56 + 1;
            } while ((int)lVar56 < (int)uVar1);
            goto LAB_001f6ed8;
          }
          uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
          if (uVar1 < uVar77) {
            uVar77 = uVar1;
          }
          puVar54 = puVar74;
          if (uVar77 == 0) {
LAB_001fbc5c:
            uVar82 = (ulong)uVar77;
          }
          else {
            uVar19 = *puVar74;
            uVar18 = puVar74[lVar73];
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar18) {
              uVar40 = uVar18;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar18 < uVar40) {
              uVar18 = uVar40;
            }
            if (uVar18 < uVar19) {
              uVar19 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-8] = uVar20;
            puVar54 = puVar74 + 1;
            if (uVar77 == 1) goto LAB_001fbc5c;
            uVar18 = (puVar74 + 1)[lVar73];
            uVar19 = puVar74[1];
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar18) {
              uVar40 = uVar18;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar18 < uVar40) {
              uVar18 = uVar40;
            }
            if (uVar18 < uVar19) {
              uVar19 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-7] = uVar20;
            puVar54 = puVar74 + 2;
            if (uVar77 == 2) goto LAB_001fbc5c;
            uVar18 = (puVar74 + 2)[lVar73];
            uVar19 = puVar74[2];
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar18) {
              uVar40 = uVar18;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar18 < uVar40) {
              uVar18 = uVar40;
            }
            if (uVar18 < uVar19) {
              uVar19 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-6] = uVar20;
            puVar54 = puVar74 + 3;
            if (uVar77 == 3) goto LAB_001fbc5c;
            uVar18 = (puVar74 + 3)[lVar73];
            puVar54 = puVar74 + 4;
            uVar19 = puVar74[3];
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar18) {
              uVar40 = uVar18;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar18 < uVar40) {
              uVar18 = uVar40;
            }
            if (uVar18 < uVar19) {
              uVar19 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-5] = uVar20;
            if (uVar77 == 4) {
              uVar82 = 4;
            }
            else {
              uVar18 = puVar54[lVar73];
              uVar19 = puVar74[4];
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar18) {
                uVar40 = uVar18;
              }
              if (uVar19 < uVar20) {
                uVar19 = uVar20;
              }
              if (uVar18 < uVar40) {
                uVar18 = uVar40;
              }
              if (uVar18 < uVar19) {
                uVar19 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              puVar64[-4] = uVar20;
              puVar54 = puVar74 + 5;
              if (uVar77 == 5) goto LAB_001fbc5c;
              uVar18 = (puVar74 + 5)[lVar73];
              puVar54 = puVar74 + 6;
              uVar19 = puVar74[5];
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar18) {
                uVar40 = uVar18;
              }
              if (uVar19 < uVar20) {
                uVar19 = uVar20;
              }
              if (uVar18 < uVar40) {
                uVar18 = uVar40;
              }
              if (uVar18 < uVar19) {
                uVar19 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              puVar64[-3] = uVar20;
              if (uVar77 == 7) {
                uVar20 = puVar54[lVar73];
                uVar82 = 7;
                uVar19 = puVar74[6];
                puVar54 = puVar74 + 7;
                uVar18 = uVar20;
                if (uVar19 < uVar20) {
                  uVar18 = uVar19;
                }
                uVar40 = uVar20;
                if (uVar20 < uVar19) {
                  uVar40 = uVar19;
                }
                uVar21 = uVar18;
                if (uVar18 < uVar19) {
                  uVar21 = uVar19;
                }
                uVar19 = uVar40;
                if (uVar40 < uVar20) {
                  uVar19 = uVar20;
                }
                if (uVar19 < uVar21) {
                  uVar21 = uVar19;
                }
                if (uVar18 < uVar40) {
                  uVar40 = uVar18;
                }
                if (uVar40 < uVar21) {
                  uVar40 = uVar21;
                }
                puVar64[-2] = uVar40;
              }
              else {
                uVar82 = 6;
              }
            }
          }
          uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
          uVar79 = uVar63 * 8;
          if (6 < uVar41 - uVar77) {
            lVar66 = NEON_shl((ulong)uVar77,1);
            lVar56 = 0;
            uVar70 = 0;
            do {
              uVar70 = uVar70 + 1;
              puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar66 + lVar62);
              puVar50 = (ushort *)((long)puVar74 + lVar56 + (lVar73 + (ulong)uVar77) * 2);
              lVar147 = lVar56 + lVar66;
              lVar56 = lVar56 + 0x10;
              puVar8 = (ushort *)((long)puVar74 + lVar147);
              puVar68 = (undefined8 *)((long)puVar65 + lVar147);
              auVar88._2_2_ = 0;
              auVar88._0_2_ = *puVar6;
              auVar88._4_2_ = puVar6[1];
              auVar88._6_2_ = 0;
              auVar88._8_2_ = puVar6[2];
              auVar88._10_2_ = 0;
              auVar88._12_2_ = puVar6[3];
              auVar88._14_2_ = 0;
              auVar140._2_2_ = 0;
              auVar140._0_2_ = *puVar50;
              auVar140._4_2_ = puVar50[1];
              auVar140._6_2_ = 0;
              auVar140._8_2_ = puVar50[2];
              auVar140._10_2_ = 0;
              auVar140._12_2_ = puVar50[3];
              auVar140._14_2_ = 0;
              auVar87._2_2_ = 0;
              auVar87._0_2_ = puVar6[4];
              auVar87._4_2_ = puVar6[5];
              auVar87._6_2_ = 0;
              auVar87._8_2_ = puVar6[6];
              auVar87._10_2_ = 0;
              auVar87._12_2_ = puVar6[7];
              auVar87._14_2_ = 0;
              auVar86._2_2_ = 0;
              auVar86._0_2_ = puVar50[4];
              auVar86._4_2_ = puVar50[5];
              auVar86._6_2_ = 0;
              auVar86._8_2_ = puVar50[6];
              auVar86._10_2_ = 0;
              auVar86._12_2_ = puVar50[7];
              auVar86._14_2_ = 0;
              auVar174._2_2_ = 0;
              auVar174._0_2_ = puVar8[4];
              auVar174._4_2_ = puVar8[5];
              auVar174._6_2_ = 0;
              auVar174._8_2_ = puVar8[6];
              auVar174._10_2_ = 0;
              auVar174._12_2_ = puVar8[7];
              auVar174._14_2_ = 0;
              auVar85._2_2_ = 0;
              auVar85._0_2_ = *puVar8;
              auVar85._4_2_ = puVar8[1];
              auVar85._6_2_ = 0;
              auVar85._8_2_ = puVar8[2];
              auVar85._10_2_ = 0;
              auVar85._12_2_ = puVar8[3];
              auVar85._14_2_ = 0;
              auVar89 = NEON_smin(auVar140,auVar88,4);
              auVar166 = NEON_smin(auVar86,auVar87,4);
              auVar140 = NEON_smax(auVar140,auVar88,4);
              auVar86 = NEON_smax(auVar86,auVar87,4);
              auVar84 = NEON_smax(auVar89,auVar85,4);
              auVar96 = NEON_smax(auVar166,auVar174,4);
              auVar89 = NEON_smin(auVar89,auVar85,4);
              auVar166 = NEON_smin(auVar166,auVar174,4);
              auVar87 = NEON_smin(auVar140,auVar85,4);
              auVar88 = NEON_smax(auVar84,auVar140,4);
              auVar89 = NEON_smax(auVar89,auVar85,4);
              auVar166 = NEON_smax(auVar166,auVar174,4);
              auVar140 = NEON_smin(auVar86,auVar174,4);
              auVar86 = NEON_smax(auVar96,auVar86,4);
              auVar174 = NEON_smin(auVar87,auVar84,4);
              auVar89 = NEON_smin(auVar89,auVar88,4);
              auVar140 = NEON_smin(auVar140,auVar96,4);
              auVar86 = NEON_smin(auVar166,auVar86,4);
              auVar166 = NEON_smax(auVar174,auVar89,4);
              auVar86 = NEON_smax(auVar140,auVar86,4);
              auVar166._0_8_ =
                   CONCAT26(auVar166._12_2_,
                            CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
              auVar166._8_2_ = auVar86._0_2_;
              auVar166._10_2_ = auVar86._4_2_;
              auVar166._12_2_ = auVar86._8_2_;
              auVar166._14_2_ = auVar86._12_2_;
              puVar68[1] = auVar166._8_8_;
              *puVar68 = auVar166._0_8_;
            } while (uVar70 < uVar63);
            uVar82 = (ulong)((int)uVar82 + uVar79);
            puVar54 = puVar54 + uVar79;
            if (uVar79 == uVar1 - uVar77) goto LAB_001f6ed8;
          }
          uVar19 = *puVar54;
          uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
          uVar18 = puVar54[lVar73];
          iVar52 = (int)uVar82;
          uVar20 = uVar19;
          if (uVar18 < uVar19) {
            uVar20 = uVar18;
          }
          uVar40 = uVar19;
          if (uVar19 < uVar18) {
            uVar40 = uVar18;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (uVar18 < uVar40) {
            uVar18 = uVar40;
          }
          if (uVar18 < uVar19) {
            uVar19 = uVar18;
          }
          if (uVar40 < uVar20) {
            uVar20 = uVar40;
          }
          if (uVar20 < uVar19) {
            uVar20 = uVar19;
          }
          *(ushort *)((long)puVar65 + uVar76) = uVar20;
          if (iVar52 + 1 < (int)uVar1) {
            uVar19 = puVar54[1];
            uVar18 = puVar54[lVar73 + 1];
            uVar20 = uVar19;
            if (uVar18 < uVar19) {
              uVar20 = uVar18;
            }
            uVar40 = uVar19;
            if (uVar19 < uVar18) {
              uVar40 = uVar18;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar18 < uVar40) {
              uVar18 = uVar40;
            }
            if (uVar18 < uVar19) {
              uVar19 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
            if (iVar52 + 2 < (int)uVar1) {
              uVar18 = puVar54[lVar73 + 2];
              uVar19 = puVar54[2];
              uVar20 = uVar19;
              if (uVar18 < uVar19) {
                uVar20 = uVar18;
              }
              uVar40 = uVar19;
              if (uVar19 < uVar18) {
                uVar40 = uVar18;
              }
              if (uVar19 < uVar20) {
                uVar19 = uVar20;
              }
              if (uVar18 < uVar40) {
                uVar18 = uVar40;
              }
              if (uVar18 < uVar19) {
                uVar19 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
              if (iVar52 + 3 < (int)uVar1) {
                uVar18 = puVar54[lVar73 + 3];
                uVar19 = puVar54[3];
                uVar20 = uVar19;
                if (uVar18 < uVar19) {
                  uVar20 = uVar18;
                }
                uVar40 = uVar19;
                if (uVar19 < uVar18) {
                  uVar40 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar20 < uVar19) {
                  uVar20 = uVar19;
                }
                *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                if (iVar52 + 4 < (int)uVar1) {
                  uVar18 = puVar54[lVar73 + 4];
                  uVar19 = puVar54[4];
                  uVar20 = uVar19;
                  if (uVar18 < uVar19) {
                    uVar20 = uVar18;
                  }
                  uVar40 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar40 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  if (uVar18 < uVar40) {
                    uVar18 = uVar40;
                  }
                  if (uVar18 < uVar19) {
                    uVar19 = uVar18;
                  }
                  if (uVar40 < uVar20) {
                    uVar20 = uVar40;
                  }
                  if (uVar20 < uVar19) {
                    uVar20 = uVar19;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                  if (iVar52 + 5 < (int)uVar1) {
                    uVar19 = puVar54[5];
                    uVar18 = puVar54[lVar73 + 5];
                    uVar20 = uVar19;
                    if (uVar18 < uVar19) {
                      uVar20 = uVar18;
                    }
                    uVar40 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar40 = uVar18;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    if (uVar18 < uVar40) {
                      uVar18 = uVar40;
                    }
                    if (uVar18 < uVar19) {
                      uVar19 = uVar18;
                    }
                    if (uVar40 < uVar20) {
                      uVar20 = uVar40;
                    }
                    if (uVar20 < uVar19) {
                      uVar20 = uVar19;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 10) = uVar20;
                    if (iVar52 + 6 < (int)uVar1) {
                      uVar19 = puVar54[6];
                      uVar20 = puVar54[lVar73 + 6];
                      uVar18 = uVar20;
                      if (uVar19 < uVar20) {
                        uVar18 = uVar19;
                      }
                      uVar40 = uVar20;
                      if (uVar20 < uVar19) {
                        uVar40 = uVar19;
                      }
                      uVar21 = uVar18;
                      if (uVar18 < uVar19) {
                        uVar21 = uVar19;
                      }
                      uVar19 = uVar40;
                      if (uVar40 < uVar20) {
                        uVar19 = uVar20;
                      }
                      if (uVar19 < uVar21) {
                        uVar21 = uVar19;
                      }
                      if (uVar18 < uVar40) {
                        uVar40 = uVar18;
                      }
                      if (uVar40 < uVar21) {
                        uVar40 = uVar21;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar40;
                    }
                  }
                }
              }
            }
          }
        }
      }
      else {
        puVar54 = puVar74 + lVar71 + 8;
        if (iVar69 < iVar58 + -3) {
          if (iVar69 < iVar61) {
            if (iVar69 < 2) {
              puVar6 = puVar74 + lVar71;
              if (((uVar1 < 9 ||
                   (puVar65 < puVar54 && puVar6 < puVar64 ||
                   puVar65 < (ushort *)((long)puVar74 + lVar59) &&
                   (ushort *)((long)puVar74 + uVar81) < puVar64)) ||
                   puVar65 < puVar74 + lVar73 + 8 && puVar74 + lVar73 < puVar64) ||
                 (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
                lVar56 = 0;
                do {
                  uVar40 = (puVar74 + lVar73)[lVar56];
                  uVar18 = ((ushort *)((long)puVar74 + uVar81))[lVar56];
                  uVar21 = puVar74[lVar56];
                  uVar20 = puVar6[lVar56];
                  uVar19 = uVar18;
                  if (uVar40 < uVar18) {
                    uVar19 = uVar40;
                  }
                  if (uVar18 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar40 = uVar19;
                  if (uVar21 < uVar19) {
                    uVar40 = uVar21;
                  }
                  if (uVar19 < uVar21) {
                    uVar19 = uVar21;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar21 = uVar40;
                  }
                  uVar40 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar40 = uVar18;
                  }
                  if (uVar40 < uVar21) {
                    uVar21 = uVar40;
                  }
                  if (uVar18 < uVar20) {
                    uVar20 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar21) {
                    uVar20 = uVar21;
                  }
                  puVar65[lVar56] = uVar20;
                  lVar56 = lVar56 + 1;
                } while ((int)lVar56 < (int)uVar1);
                goto LAB_001f6ed8;
              }
              uVar77 = -((uint)((ulong)puVar6 >> 1) & 7) & 7;
              uVar63 = uVar1;
              if (uVar77 < uVar1) {
                uVar63 = uVar77;
              }
              puVar54 = puVar74;
              if (uVar63 == 0) {
LAB_001f7878:
                uVar82 = (ulong)uVar63;
              }
              else {
                uVar21 = puVar74[lVar73];
                puVar54 = puVar74 + 1;
                uVar18 = *(ushort *)((long)puVar74 + uVar81);
                uVar40 = *puVar74;
                uVar20 = puVar74[lVar71];
                uVar19 = uVar18;
                if (uVar21 < uVar18) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar21) {
                  uVar18 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar40 < uVar19) {
                  uVar21 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar20 < uVar21) {
                  uVar40 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar18 < uVar20) {
                  uVar20 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                puVar64[-8] = uVar20;
                if (uVar63 == 1) goto LAB_001f7878;
                uVar21 = puVar54[lVar73];
                uVar18 = *(ushort *)((long)puVar54 + uVar81);
                uVar40 = puVar74[1];
                uVar20 = puVar54[lVar71];
                uVar19 = uVar18;
                if (uVar21 < uVar18) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar21) {
                  uVar18 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar40 < uVar19) {
                  uVar21 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar20 < uVar21) {
                  uVar40 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                puVar54 = puVar74 + 2;
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar18 < uVar20) {
                  uVar20 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                puVar64[-7] = uVar20;
                if (uVar63 == 2) goto LAB_001f7878;
                uVar21 = puVar54[lVar73];
                uVar18 = *(ushort *)((long)puVar54 + uVar81);
                uVar40 = puVar74[2];
                uVar20 = puVar54[lVar71];
                uVar19 = uVar18;
                if (uVar21 < uVar18) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar21) {
                  uVar18 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar40 < uVar19) {
                  uVar21 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar20 < uVar21) {
                  uVar40 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                puVar54 = puVar74 + 3;
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar18 < uVar20) {
                  uVar20 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                puVar64[-6] = uVar20;
                if (uVar63 != 3) {
                  uVar21 = puVar54[lVar73];
                  uVar18 = *(ushort *)((long)puVar54 + uVar81);
                  uVar40 = puVar74[3];
                  uVar20 = puVar54[lVar71];
                  uVar19 = uVar18;
                  if (uVar21 < uVar18) {
                    uVar19 = uVar21;
                  }
                  if (uVar18 < uVar21) {
                    uVar18 = uVar21;
                  }
                  uVar21 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar21 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar40 = uVar20;
                  if (uVar20 < uVar21) {
                    uVar40 = uVar21;
                  }
                  uVar21 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar21 = uVar18;
                  }
                  puVar54 = puVar74 + 4;
                  if (uVar21 < uVar40) {
                    uVar40 = uVar21;
                  }
                  if (uVar18 < uVar20) {
                    uVar20 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar40) {
                    uVar20 = uVar40;
                  }
                  puVar64[-5] = uVar20;
                  if (uVar63 != 4) {
                    uVar21 = puVar54[lVar73];
                    uVar18 = *(ushort *)((long)puVar54 + uVar81);
                    uVar40 = puVar74[4];
                    uVar20 = puVar54[lVar71];
                    uVar19 = uVar18;
                    if (uVar21 < uVar18) {
                      uVar19 = uVar21;
                    }
                    if (uVar18 < uVar21) {
                      uVar18 = uVar21;
                    }
                    uVar21 = uVar19;
                    if (uVar40 < uVar19) {
                      uVar21 = uVar40;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    uVar40 = uVar20;
                    if (uVar20 < uVar21) {
                      uVar40 = uVar21;
                    }
                    uVar21 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar21 = uVar18;
                    }
                    puVar54 = puVar74 + 5;
                    if (uVar21 < uVar40) {
                      uVar40 = uVar21;
                    }
                    if (uVar18 < uVar20) {
                      uVar20 = uVar18;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar20 < uVar40) {
                      uVar20 = uVar40;
                    }
                    puVar64[-4] = uVar20;
                    if (uVar63 != 5) {
                      uVar21 = puVar54[lVar73];
                      uVar18 = *(ushort *)((long)puVar54 + uVar81);
                      uVar40 = puVar74[5];
                      uVar20 = puVar54[lVar71];
                      uVar19 = uVar18;
                      if (uVar21 < uVar18) {
                        uVar19 = uVar21;
                      }
                      if (uVar18 < uVar21) {
                        uVar18 = uVar21;
                      }
                      uVar21 = uVar19;
                      if (uVar40 < uVar19) {
                        uVar21 = uVar40;
                      }
                      if (uVar19 < uVar40) {
                        uVar19 = uVar40;
                      }
                      uVar40 = uVar20;
                      if (uVar20 < uVar21) {
                        uVar40 = uVar21;
                      }
                      uVar21 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar21 = uVar18;
                      }
                      puVar54 = puVar74 + 6;
                      if (uVar21 < uVar40) {
                        uVar40 = uVar21;
                      }
                      if (uVar18 < uVar20) {
                        uVar20 = uVar18;
                      }
                      if (uVar19 < uVar20) {
                        uVar20 = uVar19;
                      }
                      if (uVar20 < uVar40) {
                        uVar20 = uVar40;
                      }
                      puVar64[-3] = uVar20;
                      if (uVar63 == 7) {
                        uVar21 = puVar54[lVar73];
                        uVar82 = 7;
                        uVar18 = *(ushort *)((long)puVar54 + uVar81);
                        uVar40 = puVar74[6];
                        uVar20 = puVar54[lVar71];
                        uVar19 = uVar18;
                        if (uVar21 < uVar18) {
                          uVar19 = uVar21;
                        }
                        if (uVar18 < uVar21) {
                          uVar18 = uVar21;
                        }
                        uVar21 = uVar19;
                        if (uVar40 < uVar19) {
                          uVar21 = uVar40;
                        }
                        if (uVar19 < uVar40) {
                          uVar19 = uVar40;
                        }
                        uVar40 = uVar20;
                        if (uVar20 < uVar21) {
                          uVar40 = uVar21;
                        }
                        uVar21 = uVar19;
                        if (uVar19 < uVar18) {
                          uVar21 = uVar18;
                        }
                        puVar54 = puVar74 + 7;
                        if (uVar21 < uVar40) {
                          uVar40 = uVar21;
                        }
                        if (uVar18 < uVar20) {
                          uVar20 = uVar18;
                        }
                        if (uVar19 < uVar20) {
                          uVar20 = uVar19;
                        }
                        if (uVar20 < uVar40) {
                          uVar20 = uVar40;
                        }
                        puVar64[-2] = uVar20;
                      }
                      else {
                        uVar82 = 6;
                      }
                      goto LAB_001f73c0;
                    }
                  }
                  goto LAB_001f7878;
                }
                uVar82 = 3;
              }
LAB_001f73c0:
              uVar77 = ((uVar1 - uVar63) - 8 >> 3) + 1;
              uVar79 = uVar77 * 8;
              if (6 < uVar41 - uVar63) {
                lVar66 = (ulong)uVar63 * 2;
                lVar56 = 0;
                uVar70 = 0;
                lVar147 = NEON_shl(lVar71 + (ulong)uVar63,1);
                do {
                  uVar70 = uVar70 + 1;
                  lVar149 = lVar56 + lVar66 + lVar60;
                  puVar6 = (ushort *)((long)puVar74 + lVar56 + uVar81 + lVar66);
                  puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar62 + lVar66);
                  lVar7 = lVar56 + lVar66;
                  lVar10 = lVar56 + lVar147;
                  auVar124._2_2_ = 0;
                  auVar124._0_2_ = *puVar50;
                  auVar124._4_2_ = puVar50[1];
                  auVar124._6_2_ = 0;
                  auVar124._8_2_ = puVar50[2];
                  auVar124._10_2_ = 0;
                  auVar124._12_2_ = puVar50[3];
                  auVar124._14_2_ = 0;
                  auVar120._2_2_ = 0;
                  auVar120._0_2_ = puVar50[4];
                  auVar120._4_2_ = puVar50[5];
                  auVar120._6_2_ = 0;
                  auVar120._8_2_ = puVar50[6];
                  auVar120._10_2_ = 0;
                  auVar120._12_2_ = puVar50[7];
                  auVar120._14_2_ = 0;
                  lVar56 = lVar56 + 0x10;
                  puVar50 = (ushort *)((long)puVar74 + lVar149);
                  auVar114._2_2_ = 0;
                  auVar114._0_2_ = *puVar6;
                  auVar114._4_2_ = puVar6[1];
                  auVar114._6_2_ = 0;
                  auVar114._8_2_ = puVar6[2];
                  auVar114._10_2_ = 0;
                  auVar114._12_2_ = puVar6[3];
                  auVar114._14_2_ = 0;
                  auVar92._2_2_ = 0;
                  auVar92._0_2_ = puVar6[4];
                  auVar92._4_2_ = puVar6[5];
                  auVar92._6_2_ = 0;
                  auVar92._8_2_ = puVar6[6];
                  auVar92._10_2_ = 0;
                  auVar92._12_2_ = puVar6[7];
                  auVar92._14_2_ = 0;
                  puVar6 = (ushort *)((long)puVar74 + lVar10);
                  puVar8 = (ushort *)((long)puVar74 + lVar7);
                  puVar68 = (undefined8 *)((long)puVar65 + lVar7);
                  auVar89 = NEON_smin(auVar114,auVar124,4);
                  auVar174 = NEON_smax(auVar114,auVar124,4);
                  auVar107._2_2_ = 0;
                  auVar107._0_2_ = *puVar50;
                  auVar107._4_2_ = puVar50[1];
                  auVar107._6_2_ = 0;
                  auVar107._8_2_ = puVar50[2];
                  auVar107._10_2_ = 0;
                  auVar107._12_2_ = puVar50[3];
                  auVar107._14_2_ = 0;
                  auVar170._2_2_ = 0;
                  auVar170._0_2_ = *puVar8;
                  auVar170._4_2_ = puVar8[1];
                  auVar170._6_2_ = 0;
                  auVar170._8_2_ = puVar8[2];
                  auVar170._10_2_ = 0;
                  auVar170._12_2_ = puVar8[3];
                  auVar170._14_2_ = 0;
                  auVar156._2_2_ = 0;
                  auVar156._0_2_ = puVar8[4];
                  auVar156._4_2_ = puVar8[5];
                  auVar156._6_2_ = 0;
                  auVar156._8_2_ = puVar8[6];
                  auVar156._10_2_ = 0;
                  auVar156._12_2_ = puVar8[7];
                  auVar156._14_2_ = 0;
                  auVar142._2_2_ = 0;
                  auVar142._0_2_ = puVar50[4];
                  auVar142._4_2_ = puVar50[5];
                  auVar142._6_2_ = 0;
                  auVar142._8_2_ = puVar50[6];
                  auVar142._10_2_ = 0;
                  auVar142._12_2_ = puVar50[7];
                  auVar142._14_2_ = 0;
                  auVar166 = NEON_smin(auVar92,auVar120,4);
                  auVar163._2_2_ = 0;
                  auVar163._0_2_ = *puVar6;
                  auVar163._4_2_ = puVar6[1];
                  auVar163._6_2_ = 0;
                  auVar163._8_2_ = puVar6[2];
                  auVar163._10_2_ = 0;
                  auVar163._12_2_ = puVar6[3];
                  auVar163._14_2_ = 0;
                  auVar132._2_2_ = 0;
                  auVar132._0_2_ = puVar6[4];
                  auVar132._4_2_ = puVar6[5];
                  auVar132._6_2_ = 0;
                  auVar132._8_2_ = puVar6[6];
                  auVar132._10_2_ = 0;
                  auVar132._12_2_ = puVar6[7];
                  auVar132._14_2_ = 0;
                  auVar86 = NEON_smax(auVar92,auVar120,4);
                  auVar84 = NEON_smax(auVar89,auVar170,4);
                  auVar96 = NEON_smax(auVar166,auVar156,4);
                  auVar88 = NEON_smax(auVar163,auVar107,4);
                  auVar89 = NEON_smin(auVar89,auVar170,4);
                  auVar140 = NEON_smax(auVar132,auVar142,4);
                  auVar85 = NEON_smin(auVar163,auVar107,4);
                  auVar166 = NEON_smin(auVar166,auVar156,4);
                  auVar87 = NEON_smin(auVar132,auVar142,4);
                  auVar88 = NEON_smin(auVar174,auVar88,4);
                  auVar89 = NEON_smax(auVar89,auVar85,4);
                  auVar140 = NEON_smin(auVar86,auVar140,4);
                  auVar166 = NEON_smax(auVar166,auVar87,4);
                  auVar174 = NEON_smax(auVar84,auVar174,4);
                  auVar86 = NEON_smax(auVar96,auVar86,4);
                  auVar88 = NEON_smin(auVar88,auVar84,4);
                  auVar89 = NEON_smin(auVar89,auVar174,4);
                  auVar86 = NEON_smin(auVar166,auVar86,4);
                  auVar140 = NEON_smin(auVar140,auVar96,4);
                  auVar166 = NEON_smax(auVar88,auVar89,4);
                  auVar86 = NEON_smax(auVar140,auVar86,4);
                  auVar99._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar99._8_2_ = auVar86._0_2_;
                  auVar99._10_2_ = auVar86._4_2_;
                  auVar99._12_2_ = auVar86._8_2_;
                  auVar99._14_2_ = auVar86._12_2_;
                  puVar68[1] = auVar99._8_8_;
                  *puVar68 = auVar99._0_8_;
                } while (uVar70 < uVar77);
                uVar82 = (ulong)((int)uVar82 + uVar79);
                puVar54 = puVar54 + uVar79;
                if (uVar1 - uVar63 == uVar79) goto LAB_001f6ed8;
              }
              uVar21 = puVar54[lVar73];
              uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
              uVar18 = *(ushort *)((long)puVar54 + uVar81);
              iVar52 = (int)uVar82;
              uVar40 = *puVar54;
              uVar20 = puVar54[lVar71];
              uVar19 = uVar18;
              if (uVar21 < uVar18) {
                uVar19 = uVar21;
              }
              if (uVar18 < uVar21) {
                uVar18 = uVar21;
              }
              uVar21 = uVar19;
              if (uVar40 < uVar19) {
                uVar21 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar20 < uVar21) {
                uVar40 = uVar21;
              }
              uVar21 = uVar19;
              if (uVar19 < uVar18) {
                uVar21 = uVar18;
              }
              if (uVar21 < uVar40) {
                uVar40 = uVar21;
              }
              if (uVar18 < uVar20) {
                uVar20 = uVar18;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar40) {
                uVar20 = uVar40;
              }
              *(ushort *)((long)puVar65 + uVar76) = uVar20;
              if (iVar52 + 1 < (int)uVar1) {
                uVar21 = puVar54[lVar73 + 1];
                uVar18 = *(ushort *)((long)puVar54 + uVar81 + 2);
                uVar40 = puVar54[1];
                uVar20 = puVar54[lVar71 + 1];
                uVar19 = uVar18;
                if (uVar21 < uVar18) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar21) {
                  uVar18 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar40 < uVar19) {
                  uVar21 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar40 = uVar20;
                if (uVar20 < uVar21) {
                  uVar40 = uVar21;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar18) {
                  uVar21 = uVar18;
                }
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar18 < uVar20) {
                  uVar20 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
                if (iVar52 + 2 < (int)uVar1) {
                  uVar21 = puVar54[lVar73 + 2];
                  uVar18 = *(ushort *)((long)puVar54 + uVar81 + 4);
                  uVar40 = puVar54[2];
                  uVar20 = puVar54[lVar71 + 2];
                  uVar19 = uVar18;
                  if (uVar21 < uVar18) {
                    uVar19 = uVar21;
                  }
                  if (uVar18 < uVar21) {
                    uVar18 = uVar21;
                  }
                  uVar21 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar21 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar40 = uVar20;
                  if (uVar20 < uVar21) {
                    uVar40 = uVar21;
                  }
                  uVar21 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar21 = uVar18;
                  }
                  if (uVar21 < uVar40) {
                    uVar40 = uVar21;
                  }
                  if (uVar18 < uVar20) {
                    uVar20 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar40) {
                    uVar20 = uVar40;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
                  if (iVar52 + 3 < (int)uVar1) {
                    uVar21 = puVar54[lVar73 + 3];
                    uVar18 = *(ushort *)((long)puVar54 + uVar81 + 6);
                    uVar40 = puVar54[3];
                    uVar20 = puVar54[lVar71 + 3];
                    uVar19 = uVar18;
                    if (uVar21 < uVar18) {
                      uVar19 = uVar21;
                    }
                    if (uVar18 < uVar21) {
                      uVar18 = uVar21;
                    }
                    uVar21 = uVar19;
                    if (uVar40 < uVar19) {
                      uVar21 = uVar40;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    uVar40 = uVar20;
                    if (uVar20 < uVar21) {
                      uVar40 = uVar21;
                    }
                    uVar21 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar21 = uVar18;
                    }
                    if (uVar21 < uVar40) {
                      uVar40 = uVar21;
                    }
                    if (uVar18 < uVar20) {
                      uVar20 = uVar18;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar20 < uVar40) {
                      uVar20 = uVar40;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                    if (iVar52 + 4 < (int)uVar1) {
                      uVar21 = puVar54[lVar73 + 4];
                      uVar18 = *(ushort *)((long)puVar54 + uVar81 + 8);
                      uVar40 = puVar54[4];
                      uVar20 = puVar54[lVar71 + 4];
                      uVar19 = uVar18;
                      if (uVar21 < uVar18) {
                        uVar19 = uVar21;
                      }
                      if (uVar18 < uVar21) {
                        uVar18 = uVar21;
                      }
                      uVar21 = uVar19;
                      if (uVar40 < uVar19) {
                        uVar21 = uVar40;
                      }
                      if (uVar19 < uVar40) {
                        uVar19 = uVar40;
                      }
                      uVar40 = uVar20;
                      if (uVar20 < uVar21) {
                        uVar40 = uVar21;
                      }
                      uVar21 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar21 = uVar18;
                      }
                      if (uVar21 < uVar40) {
                        uVar40 = uVar21;
                      }
                      if (uVar18 < uVar20) {
                        uVar20 = uVar18;
                      }
                      if (uVar19 < uVar20) {
                        uVar20 = uVar19;
                      }
                      if (uVar20 < uVar40) {
                        uVar20 = uVar40;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                      if (iVar52 + 5 < (int)uVar1) {
                        uVar21 = puVar54[lVar73 + 5];
                        uVar18 = *(ushort *)((long)puVar54 + uVar81 + 10);
                        uVar40 = puVar54[5];
                        uVar20 = puVar54[lVar71 + 5];
                        uVar19 = uVar18;
                        if (uVar21 < uVar18) {
                          uVar19 = uVar21;
                        }
                        if (uVar18 < uVar21) {
                          uVar18 = uVar21;
                        }
                        uVar21 = uVar19;
                        if (uVar40 < uVar19) {
                          uVar21 = uVar40;
                        }
                        if (uVar19 < uVar40) {
                          uVar19 = uVar40;
                        }
                        uVar40 = uVar20;
                        if (uVar20 < uVar21) {
                          uVar40 = uVar21;
                        }
                        uVar21 = uVar19;
                        if (uVar19 < uVar18) {
                          uVar21 = uVar18;
                        }
                        if (uVar21 < uVar40) {
                          uVar40 = uVar21;
                        }
                        if (uVar18 < uVar20) {
                          uVar20 = uVar18;
                        }
                        if (uVar19 < uVar20) {
                          uVar20 = uVar19;
                        }
                        if (uVar20 < uVar40) {
                          uVar20 = uVar40;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 10) = uVar20;
                        if (iVar52 + 6 < (int)uVar1) {
                          uVar21 = puVar54[lVar73 + 6];
                          uVar18 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                          uVar40 = puVar54[6];
                          uVar20 = puVar54[lVar71 + 6];
                          uVar19 = uVar18;
                          if (uVar21 < uVar18) {
                            uVar19 = uVar21;
                          }
                          if (uVar18 < uVar21) {
                            uVar18 = uVar21;
                          }
                          uVar21 = uVar19;
                          if (uVar40 < uVar19) {
                            uVar21 = uVar40;
                          }
                          if (uVar19 < uVar40) {
                            uVar19 = uVar40;
                          }
                          uVar40 = uVar20;
                          if (uVar20 < uVar21) {
                            uVar40 = uVar21;
                          }
                          uVar21 = uVar19;
                          if (uVar19 < uVar18) {
                            uVar21 = uVar18;
                          }
                          if (uVar21 < uVar40) {
                            uVar40 = uVar21;
                          }
                          if (uVar18 < uVar20) {
                            uVar20 = uVar18;
                          }
                          if (uVar19 < uVar20) {
                            uVar20 = uVar19;
                          }
                          if (uVar20 < uVar40) {
                            uVar20 = uVar40;
                          }
                          *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar20;
                        }
                      }
                    }
                  }
                }
              }
            }
            else {
              puVar6 = (ushort *)((long)puVar74 + uVar80);
              if ((((uVar1 < 9 ||
                    (puVar65 < puVar54 && puVar74 + lVar71 < puVar64 ||
                    puVar65 < (ushort *)((long)puVar74 + lVar55) && puVar6 < puVar64)) ||
                   puVar65 < (ushort *)((long)puVar74 + lVar59) &&
                   (ushort *)((long)puVar74 + uVar81) < puVar64) ||
                   puVar65 < puVar74 + lVar73 + 8 && puVar74 + lVar73 < puVar64) ||
                 (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
                lVar56 = 0;
                do {
                  uVar40 = puVar74[lVar56];
                  uVar21 = puVar6[lVar56];
                  uVar20 = (puVar74 + lVar71)[lVar56];
                  uVar22 = (puVar74 + lVar73)[lVar56];
                  uVar18 = ((ushort *)((long)puVar74 + uVar81))[lVar56];
                  uVar19 = uVar18;
                  if (uVar22 < uVar18) {
                    uVar19 = uVar22;
                  }
                  if (uVar18 < uVar22) {
                    uVar18 = uVar22;
                  }
                  uVar22 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar22 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar40 = uVar20;
                  if (uVar20 < uVar21) {
                    uVar40 = uVar21;
                  }
                  uVar23 = uVar18;
                  if (uVar40 < uVar18) {
                    uVar23 = uVar40;
                  }
                  if (uVar21 < uVar20) {
                    uVar20 = uVar21;
                  }
                  if (uVar22 < uVar20) {
                    uVar22 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar20 = uVar18;
                  }
                  if (uVar20 < uVar22) {
                    uVar22 = uVar20;
                  }
                  if (uVar19 < uVar23) {
                    uVar23 = uVar19;
                  }
                  if (uVar23 < uVar22) {
                    uVar23 = uVar22;
                  }
                  puVar65[lVar56] = uVar23;
                  lVar56 = lVar56 + 1;
                } while ((int)lVar56 < (int)uVar1);
                goto LAB_001f6ed8;
              }
              uVar77 = -((uint)((ulong)puVar6 >> 1) & 7) & 7;
              uVar63 = uVar1;
              if (uVar77 < uVar1) {
                uVar63 = uVar77;
              }
              puVar54 = puVar74;
              if (uVar63 == 0) {
LAB_001f6f0c:
                uVar82 = (ulong)uVar63;
              }
              else {
                uVar40 = puVar74[lVar73];
                puVar54 = puVar74 + 1;
                uVar18 = *(ushort *)((long)puVar74 + uVar81);
                uVar20 = *puVar74;
                uVar21 = *(ushort *)((long)puVar74 + uVar80);
                uVar19 = uVar18;
                if (uVar40 < uVar18) {
                  uVar19 = uVar40;
                }
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = puVar74[lVar71];
                uVar22 = uVar19;
                if (uVar20 < uVar19) {
                  uVar22 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                uVar20 = uVar40;
                if (uVar40 < uVar21) {
                  uVar20 = uVar21;
                }
                uVar23 = uVar18;
                if (uVar20 < uVar18) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar22 < uVar40) {
                  uVar22 = uVar40;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar22) {
                  uVar22 = uVar20;
                }
                if (uVar19 < uVar23) {
                  uVar23 = uVar19;
                }
                if (uVar23 < uVar22) {
                  uVar23 = uVar22;
                }
                puVar64[-8] = uVar23;
                if (uVar63 == 1) goto LAB_001f6f0c;
                uVar40 = puVar54[lVar73];
                uVar18 = *(ushort *)((long)puVar54 + uVar81);
                uVar20 = puVar74[1];
                uVar21 = *(ushort *)((long)puVar54 + uVar80);
                uVar19 = uVar18;
                if (uVar40 < uVar18) {
                  uVar19 = uVar40;
                }
                uVar22 = puVar54[lVar71];
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                puVar54 = puVar74 + 2;
                uVar40 = uVar19;
                if (uVar20 < uVar19) {
                  uVar40 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                uVar20 = uVar22;
                if (uVar22 < uVar21) {
                  uVar20 = uVar21;
                }
                uVar23 = uVar18;
                if (uVar20 < uVar18) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar22) {
                  uVar22 = uVar21;
                }
                if (uVar40 < uVar22) {
                  uVar40 = uVar22;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar40) {
                  uVar40 = uVar20;
                }
                if (uVar19 < uVar23) {
                  uVar23 = uVar19;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                puVar64[-7] = uVar23;
                if (uVar63 == 2) goto LAB_001f6f0c;
                uVar40 = puVar54[lVar73];
                uVar18 = *(ushort *)((long)puVar54 + uVar81);
                uVar20 = puVar74[2];
                uVar21 = *(ushort *)((long)puVar54 + uVar80);
                uVar19 = uVar18;
                if (uVar40 < uVar18) {
                  uVar19 = uVar40;
                }
                uVar22 = puVar54[lVar71];
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                puVar54 = puVar74 + 3;
                uVar40 = uVar19;
                if (uVar20 < uVar19) {
                  uVar40 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                uVar20 = uVar22;
                if (uVar22 < uVar21) {
                  uVar20 = uVar21;
                }
                uVar23 = uVar18;
                if (uVar20 < uVar18) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar22) {
                  uVar22 = uVar21;
                }
                if (uVar40 < uVar22) {
                  uVar40 = uVar22;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar40) {
                  uVar40 = uVar20;
                }
                if (uVar19 < uVar23) {
                  uVar23 = uVar19;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                puVar64[-6] = uVar23;
                if (uVar63 != 3) {
                  uVar40 = puVar54[lVar73];
                  uVar18 = *(ushort *)((long)puVar54 + uVar81);
                  uVar20 = puVar74[3];
                  uVar21 = *(ushort *)((long)puVar54 + uVar80);
                  uVar19 = uVar18;
                  if (uVar40 < uVar18) {
                    uVar19 = uVar40;
                  }
                  uVar22 = puVar54[lVar71];
                  if (uVar18 < uVar40) {
                    uVar18 = uVar40;
                  }
                  puVar54 = puVar74 + 4;
                  uVar40 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar40 = uVar20;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  uVar20 = uVar22;
                  if (uVar22 < uVar21) {
                    uVar20 = uVar21;
                  }
                  uVar23 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar23 = uVar20;
                  }
                  if (uVar21 < uVar22) {
                    uVar22 = uVar21;
                  }
                  if (uVar40 < uVar22) {
                    uVar40 = uVar22;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar20 = uVar18;
                  }
                  if (uVar20 < uVar40) {
                    uVar40 = uVar20;
                  }
                  if (uVar19 < uVar23) {
                    uVar23 = uVar19;
                  }
                  if (uVar23 < uVar40) {
                    uVar23 = uVar40;
                  }
                  puVar64[-5] = uVar23;
                  if (uVar63 != 4) {
                    uVar40 = puVar54[lVar73];
                    uVar18 = *(ushort *)((long)puVar54 + uVar81);
                    uVar20 = puVar74[4];
                    uVar21 = *(ushort *)((long)puVar54 + uVar80);
                    uVar19 = uVar18;
                    if (uVar40 < uVar18) {
                      uVar19 = uVar40;
                    }
                    uVar22 = puVar54[lVar71];
                    if (uVar18 < uVar40) {
                      uVar18 = uVar40;
                    }
                    puVar54 = puVar74 + 5;
                    uVar40 = uVar19;
                    if (uVar20 < uVar19) {
                      uVar40 = uVar20;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    uVar20 = uVar22;
                    if (uVar22 < uVar21) {
                      uVar20 = uVar21;
                    }
                    uVar23 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar23 = uVar20;
                    }
                    if (uVar21 < uVar22) {
                      uVar22 = uVar21;
                    }
                    if (uVar40 < uVar22) {
                      uVar40 = uVar22;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar20 = uVar18;
                    }
                    if (uVar20 < uVar40) {
                      uVar40 = uVar20;
                    }
                    if (uVar19 < uVar23) {
                      uVar23 = uVar19;
                    }
                    if (uVar23 < uVar40) {
                      uVar23 = uVar40;
                    }
                    puVar64[-4] = uVar23;
                    if (uVar63 != 5) {
                      uVar40 = puVar54[lVar73];
                      uVar18 = *(ushort *)((long)puVar54 + uVar81);
                      uVar20 = puVar74[5];
                      uVar21 = *(ushort *)((long)puVar54 + uVar80);
                      uVar19 = uVar18;
                      if (uVar40 < uVar18) {
                        uVar19 = uVar40;
                      }
                      uVar22 = puVar54[lVar71];
                      if (uVar18 < uVar40) {
                        uVar18 = uVar40;
                      }
                      puVar54 = puVar74 + 6;
                      uVar40 = uVar19;
                      if (uVar20 < uVar19) {
                        uVar40 = uVar20;
                      }
                      if (uVar19 < uVar20) {
                        uVar19 = uVar20;
                      }
                      uVar20 = uVar22;
                      if (uVar22 < uVar21) {
                        uVar20 = uVar21;
                      }
                      uVar23 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar23 = uVar20;
                      }
                      if (uVar21 < uVar22) {
                        uVar22 = uVar21;
                      }
                      if (uVar40 < uVar22) {
                        uVar40 = uVar22;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar20 = uVar18;
                      }
                      if (uVar20 < uVar40) {
                        uVar40 = uVar20;
                      }
                      if (uVar19 < uVar23) {
                        uVar23 = uVar19;
                      }
                      if (uVar23 < uVar40) {
                        uVar23 = uVar40;
                      }
                      puVar64[-3] = uVar23;
                      if (uVar63 == 7) {
                        uVar40 = puVar54[lVar73];
                        uVar82 = 7;
                        uVar18 = *(ushort *)((long)puVar54 + uVar81);
                        uVar20 = puVar74[6];
                        uVar21 = *(ushort *)((long)puVar54 + uVar80);
                        uVar19 = uVar18;
                        if (uVar40 < uVar18) {
                          uVar19 = uVar40;
                        }
                        uVar22 = puVar54[lVar71];
                        if (uVar18 < uVar40) {
                          uVar18 = uVar40;
                        }
                        puVar54 = puVar74 + 7;
                        uVar40 = uVar19;
                        if (uVar20 < uVar19) {
                          uVar40 = uVar20;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        uVar20 = uVar22;
                        if (uVar22 < uVar21) {
                          uVar20 = uVar21;
                        }
                        uVar23 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar23 = uVar20;
                        }
                        if (uVar21 < uVar22) {
                          uVar22 = uVar21;
                        }
                        if (uVar40 < uVar22) {
                          uVar40 = uVar22;
                        }
                        uVar20 = uVar19;
                        if (uVar19 < uVar18) {
                          uVar20 = uVar18;
                        }
                        if (uVar20 < uVar40) {
                          uVar40 = uVar20;
                        }
                        if (uVar19 < uVar23) {
                          uVar23 = uVar19;
                        }
                        if (uVar23 < uVar40) {
                          uVar23 = uVar40;
                        }
                        puVar64[-2] = uVar23;
                      }
                      else {
                        uVar82 = 6;
                      }
                      goto LAB_001f69a4;
                    }
                  }
                  goto LAB_001f6f0c;
                }
                uVar82 = 3;
              }
LAB_001f69a4:
              uVar77 = ((uVar1 - uVar63) - 8 >> 3) + 1;
              uVar79 = uVar77 * 8;
              if (6 < uVar41 - uVar63) {
                lVar66 = (ulong)uVar63 * 2;
                lVar56 = 0;
                uVar70 = 0;
                do {
                  uVar70 = uVar70 + 1;
                  puVar6 = (ushort *)((long)puVar74 + lVar56 + uVar81 + lVar66);
                  lVar147 = lVar56 + lVar66;
                  puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar62 + lVar66);
                  lVar149 = lVar56 + lVar66 + uVar80;
                  lVar7 = lVar56 + lVar60 + lVar66;
                  auVar123._2_2_ = 0;
                  auVar123._0_2_ = *puVar50;
                  auVar123._4_2_ = puVar50[1];
                  auVar123._6_2_ = 0;
                  auVar123._8_2_ = puVar50[2];
                  auVar123._10_2_ = 0;
                  auVar123._12_2_ = puVar50[3];
                  auVar123._14_2_ = 0;
                  auVar119._2_2_ = 0;
                  auVar119._0_2_ = puVar50[4];
                  auVar119._4_2_ = puVar50[5];
                  auVar119._6_2_ = 0;
                  auVar119._8_2_ = puVar50[6];
                  auVar119._10_2_ = 0;
                  auVar119._12_2_ = puVar50[7];
                  auVar119._14_2_ = 0;
                  lVar56 = lVar56 + 0x10;
                  puVar50 = (ushort *)((long)puVar74 + lVar149);
                  puVar8 = (ushort *)((long)puVar74 + lVar7);
                  puVar9 = (ushort *)((long)puVar74 + lVar147);
                  puVar68 = (undefined8 *)((long)puVar65 + lVar147);
                  auVar106._2_2_ = 0;
                  auVar106._0_2_ = *puVar50;
                  auVar106._4_2_ = puVar50[1];
                  auVar106._6_2_ = 0;
                  auVar106._8_2_ = puVar50[2];
                  auVar106._10_2_ = 0;
                  auVar106._12_2_ = puVar50[3];
                  auVar106._14_2_ = 0;
                  auVar113._2_2_ = 0;
                  auVar113._0_2_ = *puVar6;
                  auVar113._4_2_ = puVar6[1];
                  auVar113._6_2_ = 0;
                  auVar113._8_2_ = puVar6[2];
                  auVar113._10_2_ = 0;
                  auVar113._12_2_ = puVar6[3];
                  auVar113._14_2_ = 0;
                  auVar91._2_2_ = 0;
                  auVar91._0_2_ = puVar6[4];
                  auVar91._4_2_ = puVar6[5];
                  auVar91._6_2_ = 0;
                  auVar91._8_2_ = puVar6[6];
                  auVar91._10_2_ = 0;
                  auVar91._12_2_ = puVar6[7];
                  auVar91._14_2_ = 0;
                  auVar141._2_2_ = 0;
                  auVar141._0_2_ = puVar50[4];
                  auVar141._4_2_ = puVar50[5];
                  auVar141._6_2_ = 0;
                  auVar141._8_2_ = puVar50[6];
                  auVar141._10_2_ = 0;
                  auVar141._12_2_ = puVar50[7];
                  auVar141._14_2_ = 0;
                  auVar89 = NEON_smin(auVar113,auVar123,4);
                  auVar162._2_2_ = 0;
                  auVar162._0_2_ = *puVar8;
                  auVar162._4_2_ = puVar8[1];
                  auVar162._6_2_ = 0;
                  auVar162._8_2_ = puVar8[2];
                  auVar162._10_2_ = 0;
                  auVar162._12_2_ = puVar8[3];
                  auVar162._14_2_ = 0;
                  auVar131._2_2_ = 0;
                  auVar131._0_2_ = puVar8[4];
                  auVar131._4_2_ = puVar8[5];
                  auVar131._6_2_ = 0;
                  auVar131._8_2_ = puVar8[6];
                  auVar131._10_2_ = 0;
                  auVar131._12_2_ = puVar8[7];
                  auVar131._14_2_ = 0;
                  auVar174 = NEON_smax(auVar113,auVar123,4);
                  auVar169._2_2_ = 0;
                  auVar169._0_2_ = *puVar9;
                  auVar169._4_2_ = puVar9[1];
                  auVar169._6_2_ = 0;
                  auVar169._8_2_ = puVar9[2];
                  auVar169._10_2_ = 0;
                  auVar169._12_2_ = puVar9[3];
                  auVar169._14_2_ = 0;
                  auVar155._2_2_ = 0;
                  auVar155._0_2_ = puVar9[4];
                  auVar155._4_2_ = puVar9[5];
                  auVar155._6_2_ = 0;
                  auVar155._8_2_ = puVar9[6];
                  auVar155._10_2_ = 0;
                  auVar155._12_2_ = puVar9[7];
                  auVar155._14_2_ = 0;
                  auVar166 = NEON_smin(auVar91,auVar119,4);
                  auVar140 = NEON_smax(auVar131,auVar141,4);
                  auVar86 = NEON_smax(auVar91,auVar119,4);
                  auVar84 = NEON_smax(auVar89,auVar169,4);
                  auVar96 = NEON_smax(auVar166,auVar155,4);
                  auVar88 = NEON_smax(auVar162,auVar106,4);
                  auVar89 = NEON_smin(auVar89,auVar169,4);
                  auVar85 = NEON_smin(auVar162,auVar106,4);
                  auVar166 = NEON_smin(auVar166,auVar155,4);
                  auVar87 = NEON_smin(auVar131,auVar141,4);
                  auVar88 = NEON_smin(auVar174,auVar88,4);
                  auVar89 = NEON_smax(auVar89,auVar85,4);
                  auVar140 = NEON_smin(auVar86,auVar140,4);
                  auVar166 = NEON_smax(auVar166,auVar87,4);
                  auVar174 = NEON_smax(auVar84,auVar174,4);
                  auVar86 = NEON_smax(auVar96,auVar86,4);
                  auVar88 = NEON_smin(auVar88,auVar84,4);
                  auVar89 = NEON_smin(auVar89,auVar174,4);
                  auVar86 = NEON_smin(auVar166,auVar86,4);
                  auVar140 = NEON_smin(auVar140,auVar96,4);
                  auVar166 = NEON_smax(auVar88,auVar89,4);
                  auVar86 = NEON_smax(auVar140,auVar86,4);
                  auVar98._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar98._8_2_ = auVar86._0_2_;
                  auVar98._10_2_ = auVar86._4_2_;
                  auVar98._12_2_ = auVar86._8_2_;
                  auVar98._14_2_ = auVar86._12_2_;
                  puVar68[1] = auVar98._8_8_;
                  *puVar68 = auVar98._0_8_;
                } while (uVar70 < uVar77);
                uVar82 = (ulong)((int)uVar82 + uVar79);
                puVar54 = puVar54 + uVar79;
                if (uVar1 - uVar63 == uVar79) goto LAB_001f6ed8;
              }
              uVar21 = puVar54[lVar73];
              uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
              uVar18 = *(ushort *)((long)puVar54 + uVar81);
              uVar40 = *puVar54;
              uVar20 = puVar54[lVar71];
              uVar19 = uVar18;
              if (uVar21 < uVar18) {
                uVar19 = uVar21;
              }
              if (uVar18 < uVar21) {
                uVar18 = uVar21;
              }
              uVar22 = *(ushort *)((long)puVar54 + uVar80);
              uVar21 = uVar19;
              if (uVar40 < uVar19) {
                uVar21 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar40 = uVar20;
              if (uVar20 < uVar22) {
                uVar40 = uVar22;
              }
              uVar23 = uVar18;
              if (uVar40 < uVar18) {
                uVar23 = uVar40;
              }
              if (uVar22 < uVar20) {
                uVar20 = uVar22;
              }
              iVar52 = (int)uVar82;
              if (uVar21 < uVar20) {
                uVar21 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar18) {
                uVar20 = uVar18;
              }
              if (uVar20 < uVar21) {
                uVar21 = uVar20;
              }
              if (uVar19 < uVar23) {
                uVar23 = uVar19;
              }
              if (uVar23 < uVar21) {
                uVar23 = uVar21;
              }
              *(ushort *)((long)puVar65 + uVar76) = uVar23;
              if (iVar52 + 1 < (int)uVar1) {
                uVar40 = puVar54[lVar73 + 1];
                uVar18 = *(ushort *)((long)puVar54 + uVar81 + 2);
                uVar20 = puVar54[1];
                uVar21 = *(ushort *)((long)puVar54 + uVar80 + 2);
                uVar19 = uVar18;
                if (uVar40 < uVar18) {
                  uVar19 = uVar40;
                }
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar40 = puVar54[lVar71 + 1];
                uVar22 = uVar19;
                if (uVar20 < uVar19) {
                  uVar22 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                uVar20 = uVar40;
                if (uVar40 < uVar21) {
                  uVar20 = uVar21;
                }
                uVar23 = uVar18;
                if (uVar20 < uVar18) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar40) {
                  uVar40 = uVar21;
                }
                if (uVar22 < uVar40) {
                  uVar22 = uVar40;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar22) {
                  uVar22 = uVar20;
                }
                if (uVar19 < uVar23) {
                  uVar23 = uVar19;
                }
                if (uVar23 < uVar22) {
                  uVar23 = uVar22;
                }
                *(ushort *)((long)puVar65 + uVar76 + 2) = uVar23;
                if (iVar52 + 2 < (int)uVar1) {
                  uVar40 = puVar54[lVar73 + 2];
                  uVar18 = *(ushort *)((long)puVar54 + uVar81 + 4);
                  uVar20 = puVar54[2];
                  uVar21 = *(ushort *)((long)puVar54 + uVar80 + 4);
                  uVar19 = uVar18;
                  if (uVar40 < uVar18) {
                    uVar19 = uVar40;
                  }
                  if (uVar18 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar40 = puVar54[lVar71 + 2];
                  uVar22 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar22 = uVar20;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  uVar20 = uVar40;
                  if (uVar40 < uVar21) {
                    uVar20 = uVar21;
                  }
                  uVar23 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar23 = uVar20;
                  }
                  if (uVar21 < uVar40) {
                    uVar40 = uVar21;
                  }
                  if (uVar22 < uVar40) {
                    uVar22 = uVar40;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar18) {
                    uVar20 = uVar18;
                  }
                  if (uVar20 < uVar22) {
                    uVar22 = uVar20;
                  }
                  if (uVar19 < uVar23) {
                    uVar23 = uVar19;
                  }
                  if (uVar23 < uVar22) {
                    uVar23 = uVar22;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 4) = uVar23;
                  if (iVar52 + 3 < (int)uVar1) {
                    uVar40 = puVar54[lVar73 + 3];
                    uVar18 = *(ushort *)((long)puVar54 + uVar81 + 6);
                    uVar20 = puVar54[3];
                    uVar21 = *(ushort *)((long)puVar54 + uVar80 + 6);
                    uVar19 = uVar18;
                    if (uVar40 < uVar18) {
                      uVar19 = uVar40;
                    }
                    if (uVar18 < uVar40) {
                      uVar18 = uVar40;
                    }
                    uVar40 = puVar54[lVar71 + 3];
                    uVar22 = uVar19;
                    if (uVar20 < uVar19) {
                      uVar22 = uVar20;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    uVar20 = uVar40;
                    if (uVar40 < uVar21) {
                      uVar20 = uVar21;
                    }
                    uVar23 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar23 = uVar20;
                    }
                    if (uVar21 < uVar40) {
                      uVar40 = uVar21;
                    }
                    if (uVar22 < uVar40) {
                      uVar22 = uVar40;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar18) {
                      uVar20 = uVar18;
                    }
                    if (uVar20 < uVar22) {
                      uVar22 = uVar20;
                    }
                    if (uVar19 < uVar23) {
                      uVar23 = uVar19;
                    }
                    if (uVar23 < uVar22) {
                      uVar23 = uVar22;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 6) = uVar23;
                    if (iVar52 + 4 < (int)uVar1) {
                      uVar40 = puVar54[lVar73 + 4];
                      uVar18 = *(ushort *)((long)puVar54 + uVar81 + 8);
                      uVar20 = puVar54[4];
                      uVar21 = *(ushort *)((long)puVar54 + uVar80 + 8);
                      uVar19 = uVar18;
                      if (uVar40 < uVar18) {
                        uVar19 = uVar40;
                      }
                      if (uVar18 < uVar40) {
                        uVar18 = uVar40;
                      }
                      uVar40 = puVar54[lVar71 + 4];
                      uVar22 = uVar19;
                      if (uVar20 < uVar19) {
                        uVar22 = uVar20;
                      }
                      if (uVar19 < uVar20) {
                        uVar19 = uVar20;
                      }
                      uVar20 = uVar40;
                      if (uVar40 < uVar21) {
                        uVar20 = uVar21;
                      }
                      uVar23 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar23 = uVar20;
                      }
                      if (uVar21 < uVar40) {
                        uVar40 = uVar21;
                      }
                      if (uVar22 < uVar40) {
                        uVar22 = uVar40;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar20 = uVar18;
                      }
                      if (uVar20 < uVar22) {
                        uVar22 = uVar20;
                      }
                      if (uVar19 < uVar23) {
                        uVar23 = uVar19;
                      }
                      if (uVar23 < uVar22) {
                        uVar23 = uVar22;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 8) = uVar23;
                      if (iVar52 + 5 < (int)uVar1) {
                        uVar40 = puVar54[lVar73 + 5];
                        uVar18 = *(ushort *)((long)puVar54 + uVar81 + 10);
                        uVar20 = puVar54[5];
                        uVar21 = *(ushort *)((long)puVar54 + uVar80 + 10);
                        uVar19 = uVar18;
                        if (uVar40 < uVar18) {
                          uVar19 = uVar40;
                        }
                        if (uVar18 < uVar40) {
                          uVar18 = uVar40;
                        }
                        uVar40 = puVar54[lVar71 + 5];
                        uVar22 = uVar19;
                        if (uVar20 < uVar19) {
                          uVar22 = uVar20;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        uVar20 = uVar40;
                        if (uVar40 < uVar21) {
                          uVar20 = uVar21;
                        }
                        uVar23 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar23 = uVar20;
                        }
                        if (uVar21 < uVar40) {
                          uVar40 = uVar21;
                        }
                        if (uVar22 < uVar40) {
                          uVar22 = uVar40;
                        }
                        uVar20 = uVar19;
                        if (uVar19 < uVar18) {
                          uVar20 = uVar18;
                        }
                        if (uVar20 < uVar22) {
                          uVar22 = uVar20;
                        }
                        if (uVar19 < uVar23) {
                          uVar23 = uVar19;
                        }
                        if (uVar23 < uVar22) {
                          uVar23 = uVar22;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 10) = uVar23;
                        if (iVar52 + 6 < (int)uVar1) {
                          uVar40 = puVar54[lVar73 + 6];
                          uVar18 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                          uVar20 = puVar54[6];
                          uVar21 = *(ushort *)((long)puVar54 + uVar80 + 0xc);
                          uVar19 = uVar18;
                          if (uVar40 < uVar18) {
                            uVar19 = uVar40;
                          }
                          if (uVar18 < uVar40) {
                            uVar18 = uVar40;
                          }
                          uVar40 = puVar54[lVar71 + 6];
                          uVar22 = uVar19;
                          if (uVar20 < uVar19) {
                            uVar22 = uVar20;
                          }
                          if (uVar19 < uVar20) {
                            uVar19 = uVar20;
                          }
                          uVar20 = uVar40;
                          if (uVar40 < uVar21) {
                            uVar20 = uVar21;
                          }
                          uVar23 = uVar18;
                          if (uVar20 < uVar18) {
                            uVar23 = uVar20;
                          }
                          if (uVar21 < uVar40) {
                            uVar40 = uVar21;
                          }
                          if (uVar22 < uVar40) {
                            uVar22 = uVar40;
                          }
                          uVar20 = uVar19;
                          if (uVar19 < uVar18) {
                            uVar20 = uVar18;
                          }
                          if (uVar20 < uVar22) {
                            uVar22 = uVar20;
                          }
                          if (uVar19 < uVar23) {
                            uVar23 = uVar19;
                          }
                          if (uVar23 < uVar22) {
                            uVar23 = uVar22;
                          }
                          *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar23;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            if (iVar69 < 2) {
              puVar6 = puVar74 + lVar71;
              if ((uVar1 < 9 ||
                   (puVar65 < puVar54 && puVar6 < puVar64 ||
                   puVar65 < (ushort *)((long)puVar74 + lVar59) &&
                   (ushort *)((long)puVar74 + uVar81) < puVar64)) ||
                 (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
                lVar56 = 0;
                do {
                  uVar19 = puVar74[lVar56];
                  uVar20 = ((ushort *)((long)puVar74 + uVar81))[lVar56];
                  uVar40 = puVar6[lVar56];
                  uVar18 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar20;
                  }
                  uVar21 = uVar19;
                  if (uVar19 < uVar20) {
                    uVar21 = uVar20;
                  }
                  uVar20 = uVar18;
                  if (uVar19 < uVar18) {
                    uVar20 = uVar19;
                  }
                  if (uVar18 < uVar19) {
                    uVar18 = uVar19;
                  }
                  uVar19 = uVar40;
                  if (uVar40 < uVar20) {
                    uVar19 = uVar20;
                  }
                  uVar20 = uVar18;
                  if (uVar18 < uVar21) {
                    uVar20 = uVar21;
                  }
                  if (uVar20 < uVar19) {
                    uVar19 = uVar20;
                  }
                  if (uVar40 < uVar21) {
                    uVar21 = uVar40;
                  }
                  if (uVar18 < uVar21) {
                    uVar21 = uVar18;
                  }
                  if (uVar21 < uVar19) {
                    uVar21 = uVar19;
                  }
                  puVar65[lVar56] = uVar21;
                  lVar56 = lVar56 + 1;
                } while ((int)lVar56 < (int)uVar1);
                goto LAB_001f6ed8;
              }
              uVar77 = -((uint)((ulong)puVar6 >> 1) & 7) & 7;
              if (uVar1 < uVar77) {
                uVar77 = uVar1;
              }
              puVar54 = puVar74;
              if (uVar77 == 0) {
LAB_001fbf3c:
                uVar82 = (ulong)uVar77;
              }
              else {
                uVar20 = *puVar74;
                puVar54 = puVar74 + 1;
                uVar40 = *(ushort *)((long)puVar74 + uVar81);
                uVar19 = puVar74[lVar71];
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar40) {
                  uVar21 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar18 < uVar21) {
                  uVar40 = uVar21;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                puVar64[-8] = uVar19;
                if (uVar77 == 1) goto LAB_001fbf3c;
                uVar20 = puVar74[1];
                uVar40 = *(ushort *)((long)puVar54 + uVar81);
                uVar19 = puVar54[lVar71];
                puVar54 = puVar74 + 2;
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar40) {
                  uVar21 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar18 < uVar21) {
                  uVar40 = uVar21;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                puVar64[-7] = uVar19;
                if (uVar77 == 2) goto LAB_001fbf3c;
                uVar20 = puVar74[2];
                uVar40 = *(ushort *)((long)puVar54 + uVar81);
                uVar19 = puVar54[lVar71];
                puVar54 = puVar74 + 3;
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar40) {
                  uVar21 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar18 < uVar21) {
                  uVar40 = uVar21;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                puVar64[-6] = uVar19;
                if (uVar77 != 3) {
                  uVar20 = puVar74[3];
                  uVar40 = *(ushort *)((long)puVar54 + uVar81);
                  uVar19 = puVar54[lVar71];
                  puVar54 = puVar74 + 4;
                  uVar18 = uVar20;
                  if (uVar40 < uVar20) {
                    uVar18 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar21 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar40) {
                    uVar20 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar18 < uVar21) {
                    uVar40 = uVar21;
                  }
                  if (uVar40 < uVar20) {
                    uVar20 = uVar40;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar18 < uVar19) {
                    uVar19 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  puVar64[-5] = uVar19;
                  if (uVar77 != 4) {
                    uVar20 = puVar74[4];
                    uVar40 = *(ushort *)((long)puVar54 + uVar81);
                    uVar19 = puVar54[lVar71];
                    puVar54 = puVar74 + 5;
                    uVar18 = uVar20;
                    if (uVar40 < uVar20) {
                      uVar18 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar20 < uVar40) {
                      uVar21 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar40) {
                      uVar20 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar18 < uVar21) {
                      uVar40 = uVar21;
                    }
                    if (uVar40 < uVar20) {
                      uVar20 = uVar40;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar18 < uVar19) {
                      uVar19 = uVar18;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    puVar64[-4] = uVar19;
                    if (uVar77 != 5) {
                      uVar20 = puVar74[5];
                      uVar40 = *(ushort *)((long)puVar54 + uVar81);
                      uVar19 = puVar54[lVar71];
                      puVar54 = puVar74 + 6;
                      uVar18 = uVar20;
                      if (uVar40 < uVar20) {
                        uVar18 = uVar40;
                      }
                      uVar21 = uVar20;
                      if (uVar20 < uVar40) {
                        uVar21 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar40) {
                        uVar20 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar18 < uVar21) {
                        uVar40 = uVar21;
                      }
                      if (uVar40 < uVar20) {
                        uVar20 = uVar40;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar18 < uVar19) {
                        uVar19 = uVar18;
                      }
                      if (uVar19 < uVar20) {
                        uVar19 = uVar20;
                      }
                      puVar64[-3] = uVar19;
                      if (uVar77 == 7) {
                        uVar20 = puVar74[6];
                        uVar82 = 7;
                        uVar19 = *(ushort *)((long)puVar54 + uVar81);
                        uVar40 = puVar54[lVar71];
                        puVar54 = puVar74 + 7;
                        uVar18 = uVar19;
                        if (uVar20 < uVar19) {
                          uVar18 = uVar20;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        uVar21 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar21 = uVar20;
                        }
                        if (uVar18 < uVar20) {
                          uVar18 = uVar20;
                        }
                        if (uVar21 < uVar40) {
                          uVar21 = uVar40;
                        }
                        uVar20 = uVar18;
                        if (uVar18 < uVar19) {
                          uVar20 = uVar19;
                        }
                        if (uVar20 < uVar21) {
                          uVar21 = uVar20;
                        }
                        if (uVar40 < uVar19) {
                          uVar19 = uVar40;
                        }
                        if (uVar18 < uVar19) {
                          uVar19 = uVar18;
                        }
                        if (uVar19 < uVar21) {
                          uVar19 = uVar21;
                        }
                        puVar64[-2] = uVar19;
                      }
                      else {
                        uVar82 = 6;
                      }
                      goto LAB_001fa27c;
                    }
                  }
                  goto LAB_001fbf3c;
                }
                uVar82 = 3;
              }
LAB_001fa27c:
              uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
              uVar79 = uVar63 * 8;
              if (6 < uVar41 - uVar77) {
                lVar66 = (ulong)uVar77 * 2;
                lVar56 = 0;
                uVar70 = 0;
                lVar147 = NEON_shl(lVar71 + (ulong)uVar77,1);
                do {
                  lVar149 = lVar56 + lVar66;
                  puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar66 + uVar81);
                  puVar50 = (ushort *)((long)puVar74 + lVar149);
                  uVar70 = uVar70 + 1;
                  lVar7 = lVar56 + lVar66 + lVar60;
                  auVar160._2_2_ = 0;
                  auVar160._0_2_ = *puVar50;
                  auVar160._4_2_ = puVar50[1];
                  auVar160._6_2_ = 0;
                  auVar160._8_2_ = puVar50[2];
                  auVar160._10_2_ = 0;
                  auVar160._12_2_ = puVar50[3];
                  auVar160._14_2_ = 0;
                  auVar146._2_2_ = 0;
                  auVar146._0_2_ = puVar50[4];
                  auVar146._4_2_ = puVar50[5];
                  auVar146._6_2_ = 0;
                  auVar146._8_2_ = puVar50[6];
                  auVar146._10_2_ = 0;
                  auVar146._12_2_ = puVar50[7];
                  auVar146._14_2_ = 0;
                  lVar10 = lVar56 + lVar147;
                  lVar56 = lVar56 + 0x10;
                  puVar50 = (ushort *)((long)puVar74 + lVar10);
                  puVar8 = (ushort *)((long)puVar74 + lVar7);
                  puVar68 = (undefined8 *)((long)puVar65 + lVar149);
                  auVar128._2_2_ = 0;
                  auVar128._0_2_ = *puVar6;
                  auVar128._4_2_ = puVar6[1];
                  auVar128._6_2_ = 0;
                  auVar128._8_2_ = puVar6[2];
                  auVar128._10_2_ = 0;
                  auVar128._12_2_ = puVar6[3];
                  auVar128._14_2_ = 0;
                  auVar95._2_2_ = 0;
                  auVar95._0_2_ = puVar6[4];
                  auVar95._4_2_ = puVar6[5];
                  auVar95._6_2_ = 0;
                  auVar95._8_2_ = puVar6[6];
                  auVar95._10_2_ = 0;
                  auVar95._12_2_ = puVar6[7];
                  auVar95._14_2_ = 0;
                  auVar110._2_2_ = 0;
                  auVar110._0_2_ = *puVar8;
                  auVar110._4_2_ = puVar8[1];
                  auVar110._6_2_ = 0;
                  auVar110._8_2_ = puVar8[2];
                  auVar110._10_2_ = 0;
                  auVar110._12_2_ = puVar8[3];
                  auVar110._14_2_ = 0;
                  auVar89 = NEON_smin(auVar160,auVar128,4);
                  auVar117._2_2_ = 0;
                  auVar117._0_2_ = *puVar50;
                  auVar117._4_2_ = puVar50[1];
                  auVar117._6_2_ = 0;
                  auVar117._8_2_ = puVar50[2];
                  auVar117._10_2_ = 0;
                  auVar117._12_2_ = puVar50[3];
                  auVar117._14_2_ = 0;
                  auVar166 = NEON_smin(auVar95,auVar146,4);
                  auVar154._2_2_ = 0;
                  auVar154._0_2_ = puVar8[4];
                  auVar154._4_2_ = puVar8[5];
                  auVar154._6_2_ = 0;
                  auVar154._8_2_ = puVar8[6];
                  auVar154._10_2_ = 0;
                  auVar154._12_2_ = puVar8[7];
                  auVar154._14_2_ = 0;
                  auVar136._2_2_ = 0;
                  auVar136._0_2_ = puVar50[4];
                  auVar136._4_2_ = puVar50[5];
                  auVar136._6_2_ = 0;
                  auVar136._8_2_ = puVar50[6];
                  auVar136._10_2_ = 0;
                  auVar136._12_2_ = puVar50[7];
                  auVar136._14_2_ = 0;
                  auVar84 = NEON_smax(auVar89,auVar160,4);
                  auVar96 = NEON_smax(auVar166,auVar146,4);
                  auVar174 = NEON_smax(auVar117,auVar110,4);
                  auVar87 = NEON_smax(auVar160,auVar128,4);
                  auVar86 = NEON_smax(auVar95,auVar146,4);
                  auVar89 = NEON_smin(auVar89,auVar160,4);
                  auVar140 = NEON_smin(auVar117,auVar110,4);
                  auVar166 = NEON_smin(auVar166,auVar146,4);
                  auVar88 = NEON_smax(auVar136,auVar154,4);
                  auVar85 = NEON_smin(auVar136,auVar154,4);
                  auVar174 = NEON_smin(auVar87,auVar174,4);
                  auVar89 = NEON_smax(auVar89,auVar140,4);
                  auVar140 = NEON_smin(auVar86,auVar88,4);
                  auVar166 = NEON_smax(auVar166,auVar85,4);
                  auVar87 = NEON_smax(auVar84,auVar87,4);
                  auVar86 = NEON_smax(auVar96,auVar86,4);
                  auVar88 = NEON_smin(auVar174,auVar84,4);
                  auVar89 = NEON_smin(auVar89,auVar87,4);
                  auVar86 = NEON_smin(auVar166,auVar86,4);
                  auVar140 = NEON_smin(auVar140,auVar96,4);
                  auVar166 = NEON_smax(auVar88,auVar89,4);
                  auVar86 = NEON_smax(auVar140,auVar86,4);
                  auVar102._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar102._8_2_ = auVar86._0_2_;
                  auVar102._10_2_ = auVar86._4_2_;
                  auVar102._12_2_ = auVar86._8_2_;
                  auVar102._14_2_ = auVar86._12_2_;
                  puVar68[1] = auVar102._8_8_;
                  *puVar68 = auVar102._0_8_;
                } while (uVar70 < uVar63);
                uVar82 = (ulong)((int)uVar82 + uVar79);
                puVar54 = puVar54 + uVar79;
                if (uVar1 - uVar77 == uVar79) goto LAB_001f6ed8;
              }
              uVar20 = *puVar54;
              uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
              uVar40 = *(ushort *)((long)puVar54 + uVar81);
              iVar52 = (int)uVar82;
              uVar19 = puVar54[lVar71];
              uVar18 = uVar20;
              if (uVar40 < uVar20) {
                uVar18 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar40) {
                uVar21 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar40) {
                uVar20 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar18 < uVar21) {
                uVar40 = uVar21;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar18 < uVar19) {
                uVar19 = uVar18;
              }
              if (uVar19 < uVar20) {
                uVar19 = uVar20;
              }
              *(ushort *)((long)puVar65 + uVar76) = uVar19;
              if (iVar52 + 1 < (int)uVar1) {
                uVar20 = puVar54[1];
                uVar40 = *(ushort *)((long)puVar54 + uVar81 + 2);
                uVar19 = puVar54[lVar71 + 1];
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar40) {
                  uVar21 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar18 < uVar21) {
                  uVar40 = uVar21;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                *(ushort *)((long)puVar65 + uVar76 + 2) = uVar19;
                if (iVar52 + 2 < (int)uVar1) {
                  uVar20 = puVar54[2];
                  uVar40 = *(ushort *)((long)puVar54 + uVar81 + 4);
                  uVar19 = puVar54[lVar71 + 2];
                  uVar18 = uVar20;
                  if (uVar40 < uVar20) {
                    uVar18 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar21 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar40) {
                    uVar20 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar18 < uVar21) {
                    uVar40 = uVar21;
                  }
                  if (uVar40 < uVar20) {
                    uVar20 = uVar40;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar18 < uVar19) {
                    uVar19 = uVar18;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 4) = uVar19;
                  if (iVar52 + 3 < (int)uVar1) {
                    uVar20 = puVar54[3];
                    uVar40 = *(ushort *)((long)puVar54 + uVar81 + 6);
                    uVar19 = puVar54[lVar71 + 3];
                    uVar18 = uVar20;
                    if (uVar40 < uVar20) {
                      uVar18 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar20 < uVar40) {
                      uVar21 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar40) {
                      uVar20 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar18 < uVar21) {
                      uVar40 = uVar21;
                    }
                    if (uVar40 < uVar20) {
                      uVar20 = uVar40;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar18 < uVar19) {
                      uVar19 = uVar18;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 6) = uVar19;
                    if (iVar52 + 4 < (int)uVar1) {
                      uVar20 = puVar54[4];
                      uVar40 = *(ushort *)((long)puVar54 + uVar81 + 8);
                      uVar19 = puVar54[lVar71 + 4];
                      uVar18 = uVar20;
                      if (uVar40 < uVar20) {
                        uVar18 = uVar40;
                      }
                      uVar21 = uVar20;
                      if (uVar20 < uVar40) {
                        uVar21 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar40) {
                        uVar20 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar18 < uVar21) {
                        uVar40 = uVar21;
                      }
                      if (uVar40 < uVar20) {
                        uVar20 = uVar40;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar18 < uVar19) {
                        uVar19 = uVar18;
                      }
                      if (uVar19 < uVar20) {
                        uVar19 = uVar20;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 8) = uVar19;
                      if (iVar52 + 5 < (int)uVar1) {
                        uVar20 = puVar54[5];
                        uVar40 = *(ushort *)((long)puVar54 + uVar81 + 10);
                        uVar19 = puVar54[lVar71 + 5];
                        uVar18 = uVar20;
                        if (uVar40 < uVar20) {
                          uVar18 = uVar40;
                        }
                        uVar21 = uVar20;
                        if (uVar20 < uVar40) {
                          uVar21 = uVar40;
                        }
                        uVar40 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar40 = uVar20;
                        }
                        if (uVar18 < uVar20) {
                          uVar18 = uVar20;
                        }
                        uVar20 = uVar19;
                        if (uVar19 < uVar40) {
                          uVar20 = uVar40;
                        }
                        uVar40 = uVar18;
                        if (uVar18 < uVar21) {
                          uVar40 = uVar21;
                        }
                        if (uVar40 < uVar20) {
                          uVar20 = uVar40;
                        }
                        if (uVar21 < uVar19) {
                          uVar19 = uVar21;
                        }
                        if (uVar18 < uVar19) {
                          uVar19 = uVar18;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 10) = uVar19;
                        if (iVar52 + 6 < (int)uVar1) {
                          uVar19 = puVar54[6];
                          uVar20 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                          uVar40 = puVar54[lVar71 + 6];
                          uVar18 = uVar19;
                          if (uVar20 < uVar19) {
                            uVar18 = uVar20;
                          }
                          uVar21 = uVar19;
                          if (uVar19 < uVar20) {
                            uVar21 = uVar20;
                          }
                          uVar20 = uVar18;
                          if (uVar19 < uVar18) {
                            uVar20 = uVar19;
                          }
                          if (uVar18 < uVar19) {
                            uVar18 = uVar19;
                          }
                          uVar19 = uVar40;
                          if (uVar40 < uVar20) {
                            uVar19 = uVar20;
                          }
                          uVar20 = uVar18;
                          if (uVar18 < uVar21) {
                            uVar20 = uVar21;
                          }
                          if (uVar20 < uVar19) {
                            uVar19 = uVar20;
                          }
                          if (uVar40 < uVar21) {
                            uVar21 = uVar40;
                          }
                          if (uVar18 < uVar21) {
                            uVar21 = uVar18;
                          }
                          if (uVar21 < uVar19) {
                            uVar21 = uVar19;
                          }
                          *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar21;
                        }
                      }
                    }
                  }
                }
              }
              goto LAB_001f6ed8;
            }
            if (((uVar1 < 9 ||
                 (puVar65 < puVar54 && puVar74 + lVar71 < puVar64 ||
                 puVar65 < (ushort *)((long)puVar74 + lVar55) &&
                 (ushort *)((long)puVar74 + uVar80) < puVar64)) ||
                 puVar65 < (ushort *)((long)puVar74 + lVar59) &&
                 (ushort *)((long)puVar74 + uVar81) < puVar64) ||
               (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
              lVar56 = 0;
              do {
                uVar20 = puVar74[lVar56];
                uVar40 = ((ushort *)((long)puVar74 + uVar80))[lVar56];
                uVar19 = (puVar74 + lVar71)[lVar56];
                uVar21 = ((ushort *)((long)puVar74 + uVar81))[lVar56];
                uVar18 = uVar20;
                if (uVar21 < uVar20) {
                  uVar18 = uVar21;
                }
                uVar22 = uVar20;
                if (uVar20 < uVar21) {
                  uVar22 = uVar21;
                }
                uVar21 = uVar18;
                if (uVar20 < uVar18) {
                  uVar21 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar23 = uVar22;
                if (uVar20 < uVar22) {
                  uVar23 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar21 = uVar19;
                }
                uVar19 = uVar18;
                if (uVar18 < uVar22) {
                  uVar19 = uVar22;
                }
                if (uVar19 < uVar21) {
                  uVar21 = uVar19;
                }
                if (uVar18 < uVar23) {
                  uVar23 = uVar18;
                }
                if (uVar23 < uVar21) {
                  uVar23 = uVar21;
                }
                puVar65[lVar56] = uVar23;
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
            uVar63 = uVar1;
            if (uVar77 < uVar1) {
              uVar63 = uVar77;
            }
            puVar54 = puVar74;
            if (uVar63 == 0) {
LAB_001f9e7c:
              uVar82 = (ulong)uVar63;
            }
            else {
              uVar20 = *puVar74;
              puVar54 = puVar74 + 1;
              uVar40 = *(ushort *)((long)puVar74 + uVar81);
              uVar21 = *(ushort *)((long)puVar74 + uVar80);
              uVar19 = puVar74[lVar71];
              uVar18 = uVar20;
              if (uVar40 < uVar20) {
                uVar18 = uVar40;
              }
              uVar22 = uVar20;
              if (uVar20 < uVar40) {
                uVar22 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar21) {
                uVar20 = uVar21;
              }
              uVar23 = uVar22;
              if (uVar20 < uVar22) {
                uVar23 = uVar20;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              uVar19 = uVar18;
              if (uVar18 < uVar22) {
                uVar19 = uVar22;
              }
              if (uVar19 < uVar40) {
                uVar40 = uVar19;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-8] = uVar23;
              if (uVar63 == 1) goto LAB_001f9e7c;
              uVar20 = puVar74[1];
              uVar40 = *(ushort *)((long)puVar54 + uVar81);
              uVar21 = *(ushort *)((long)puVar54 + uVar80);
              uVar19 = puVar54[lVar71];
              uVar18 = uVar20;
              if (uVar40 < uVar20) {
                uVar18 = uVar40;
              }
              uVar22 = uVar20;
              if (uVar20 < uVar40) {
                uVar22 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar21) {
                uVar20 = uVar21;
              }
              puVar54 = puVar74 + 2;
              uVar23 = uVar22;
              if (uVar20 < uVar22) {
                uVar23 = uVar20;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              uVar19 = uVar18;
              if (uVar18 < uVar22) {
                uVar19 = uVar22;
              }
              if (uVar19 < uVar40) {
                uVar40 = uVar19;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-7] = uVar23;
              if (uVar63 == 2) goto LAB_001f9e7c;
              uVar20 = puVar74[2];
              uVar40 = *(ushort *)((long)puVar54 + uVar81);
              uVar21 = *(ushort *)((long)puVar54 + uVar80);
              uVar19 = puVar54[lVar71];
              uVar18 = uVar20;
              if (uVar40 < uVar20) {
                uVar18 = uVar40;
              }
              uVar22 = uVar20;
              if (uVar20 < uVar40) {
                uVar22 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar21) {
                uVar20 = uVar21;
              }
              puVar54 = puVar74 + 3;
              uVar23 = uVar22;
              if (uVar20 < uVar22) {
                uVar23 = uVar20;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              uVar19 = uVar18;
              if (uVar18 < uVar22) {
                uVar19 = uVar22;
              }
              if (uVar19 < uVar40) {
                uVar40 = uVar19;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-6] = uVar23;
              if (uVar63 != 3) {
                uVar20 = puVar74[3];
                uVar40 = *(ushort *)((long)puVar54 + uVar81);
                uVar21 = *(ushort *)((long)puVar54 + uVar80);
                uVar19 = puVar54[lVar71];
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar22 = uVar20;
                if (uVar20 < uVar40) {
                  uVar22 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar21) {
                  uVar20 = uVar21;
                }
                puVar54 = puVar74 + 4;
                uVar23 = uVar22;
                if (uVar20 < uVar22) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar40 < uVar19) {
                  uVar40 = uVar19;
                }
                uVar19 = uVar18;
                if (uVar18 < uVar22) {
                  uVar19 = uVar22;
                }
                if (uVar19 < uVar40) {
                  uVar40 = uVar19;
                }
                if (uVar18 < uVar23) {
                  uVar23 = uVar18;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                puVar64[-5] = uVar23;
                if (uVar63 != 4) {
                  uVar20 = puVar74[4];
                  uVar40 = *(ushort *)((long)puVar54 + uVar81);
                  uVar21 = *(ushort *)((long)puVar54 + uVar80);
                  uVar19 = puVar54[lVar71];
                  uVar18 = uVar20;
                  if (uVar40 < uVar20) {
                    uVar18 = uVar40;
                  }
                  uVar22 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar22 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar21) {
                    uVar20 = uVar21;
                  }
                  puVar54 = puVar74 + 5;
                  uVar23 = uVar22;
                  if (uVar20 < uVar22) {
                    uVar23 = uVar20;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar40 < uVar19) {
                    uVar40 = uVar19;
                  }
                  uVar19 = uVar18;
                  if (uVar18 < uVar22) {
                    uVar19 = uVar22;
                  }
                  if (uVar19 < uVar40) {
                    uVar40 = uVar19;
                  }
                  if (uVar18 < uVar23) {
                    uVar23 = uVar18;
                  }
                  if (uVar23 < uVar40) {
                    uVar23 = uVar40;
                  }
                  puVar64[-4] = uVar23;
                  if (uVar63 != 5) {
                    uVar20 = puVar74[5];
                    uVar40 = *(ushort *)((long)puVar54 + uVar81);
                    uVar21 = *(ushort *)((long)puVar54 + uVar80);
                    uVar19 = puVar54[lVar71];
                    uVar18 = uVar20;
                    if (uVar40 < uVar20) {
                      uVar18 = uVar40;
                    }
                    uVar22 = uVar20;
                    if (uVar20 < uVar40) {
                      uVar22 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar21) {
                      uVar20 = uVar21;
                    }
                    puVar54 = puVar74 + 6;
                    uVar23 = uVar22;
                    if (uVar20 < uVar22) {
                      uVar23 = uVar20;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar40 < uVar19) {
                      uVar40 = uVar19;
                    }
                    uVar19 = uVar18;
                    if (uVar18 < uVar22) {
                      uVar19 = uVar22;
                    }
                    if (uVar19 < uVar40) {
                      uVar40 = uVar19;
                    }
                    if (uVar18 < uVar23) {
                      uVar23 = uVar18;
                    }
                    if (uVar23 < uVar40) {
                      uVar23 = uVar40;
                    }
                    puVar64[-3] = uVar23;
                    if (uVar63 == 7) {
                      uVar20 = puVar74[6];
                      uVar82 = 7;
                      uVar40 = *(ushort *)((long)puVar54 + uVar81);
                      uVar21 = *(ushort *)((long)puVar54 + uVar80);
                      uVar19 = puVar54[lVar71];
                      uVar18 = uVar20;
                      if (uVar40 < uVar20) {
                        uVar18 = uVar40;
                      }
                      uVar22 = uVar20;
                      if (uVar20 < uVar40) {
                        uVar22 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar21) {
                        uVar20 = uVar21;
                      }
                      puVar54 = puVar74 + 7;
                      uVar23 = uVar22;
                      if (uVar20 < uVar22) {
                        uVar23 = uVar20;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar40 < uVar19) {
                        uVar40 = uVar19;
                      }
                      uVar19 = uVar18;
                      if (uVar18 < uVar22) {
                        uVar19 = uVar22;
                      }
                      if (uVar19 < uVar40) {
                        uVar40 = uVar19;
                      }
                      if (uVar18 < uVar23) {
                        uVar23 = uVar18;
                      }
                      if (uVar23 < uVar40) {
                        uVar23 = uVar40;
                      }
                      puVar64[-2] = uVar23;
                    }
                    else {
                      uVar82 = 6;
                    }
                    goto LAB_001f7d1c;
                  }
                }
                goto LAB_001f9e7c;
              }
              uVar82 = 3;
            }
LAB_001f7d1c:
            uVar77 = ((uVar1 - uVar63) - 8 >> 3) + 1;
            uVar79 = uVar77 * 8;
            if (6 < uVar41 - uVar63) {
              lVar66 = (ulong)uVar63 * 2;
              lVar56 = 0;
              uVar70 = 0;
              do {
                lVar147 = lVar56 + lVar66;
                puVar6 = (ushort *)((long)puVar74 + lVar56 + uVar81 + lVar66);
                puVar50 = (ushort *)((long)puVar74 + lVar147);
                uVar70 = uVar70 + 1;
                lVar149 = lVar56 + lVar66 + uVar80;
                auVar157._2_2_ = 0;
                auVar157._0_2_ = *puVar50;
                auVar157._4_2_ = puVar50[1];
                auVar157._6_2_ = 0;
                auVar157._8_2_ = puVar50[2];
                auVar157._10_2_ = 0;
                auVar157._12_2_ = puVar50[3];
                auVar157._14_2_ = 0;
                auVar143._2_2_ = 0;
                auVar143._0_2_ = puVar50[4];
                auVar143._4_2_ = puVar50[5];
                auVar143._6_2_ = 0;
                auVar143._8_2_ = puVar50[6];
                auVar143._10_2_ = 0;
                auVar143._12_2_ = puVar50[7];
                auVar143._14_2_ = 0;
                lVar7 = lVar56 + lVar60 + lVar66;
                lVar56 = lVar56 + 0x10;
                puVar50 = (ushort *)((long)puVar74 + lVar7);
                puVar8 = (ushort *)((long)puVar74 + lVar149);
                puVar68 = (undefined8 *)((long)puVar65 + lVar147);
                auVar125._2_2_ = 0;
                auVar125._0_2_ = *puVar6;
                auVar125._4_2_ = puVar6[1];
                auVar125._6_2_ = 0;
                auVar125._8_2_ = puVar6[2];
                auVar125._10_2_ = 0;
                auVar125._12_2_ = puVar6[3];
                auVar125._14_2_ = 0;
                auVar93._2_2_ = 0;
                auVar93._0_2_ = puVar6[4];
                auVar93._4_2_ = puVar6[5];
                auVar93._6_2_ = 0;
                auVar93._8_2_ = puVar6[6];
                auVar93._10_2_ = 0;
                auVar93._12_2_ = puVar6[7];
                auVar93._14_2_ = 0;
                auVar108._2_2_ = 0;
                auVar108._0_2_ = *puVar8;
                auVar108._4_2_ = puVar8[1];
                auVar108._6_2_ = 0;
                auVar108._8_2_ = puVar8[2];
                auVar108._10_2_ = 0;
                auVar108._12_2_ = puVar8[3];
                auVar108._14_2_ = 0;
                auVar89 = NEON_smin(auVar157,auVar125,4);
                auVar115._2_2_ = 0;
                auVar115._0_2_ = *puVar50;
                auVar115._4_2_ = puVar50[1];
                auVar115._6_2_ = 0;
                auVar115._8_2_ = puVar50[2];
                auVar115._10_2_ = 0;
                auVar115._12_2_ = puVar50[3];
                auVar115._14_2_ = 0;
                auVar166 = NEON_smin(auVar143,auVar93,4);
                auVar153._2_2_ = 0;
                auVar153._0_2_ = puVar8[4];
                auVar153._4_2_ = puVar8[5];
                auVar153._6_2_ = 0;
                auVar153._8_2_ = puVar8[6];
                auVar153._10_2_ = 0;
                auVar153._12_2_ = puVar8[7];
                auVar153._14_2_ = 0;
                auVar133._2_2_ = 0;
                auVar133._0_2_ = puVar50[4];
                auVar133._4_2_ = puVar50[5];
                auVar133._6_2_ = 0;
                auVar133._8_2_ = puVar50[6];
                auVar133._10_2_ = 0;
                auVar133._12_2_ = puVar50[7];
                auVar133._14_2_ = 0;
                auVar84 = NEON_smax(auVar89,auVar157,4);
                auVar96 = NEON_smax(auVar166,auVar143,4);
                auVar174 = NEON_smax(auVar115,auVar108,4);
                auVar87 = NEON_smax(auVar157,auVar125,4);
                auVar86 = NEON_smax(auVar143,auVar93,4);
                auVar89 = NEON_smin(auVar89,auVar157,4);
                auVar140 = NEON_smin(auVar115,auVar108,4);
                auVar166 = NEON_smin(auVar166,auVar143,4);
                auVar88 = NEON_smax(auVar133,auVar153,4);
                auVar85 = NEON_smin(auVar133,auVar153,4);
                auVar174 = NEON_smin(auVar87,auVar174,4);
                auVar89 = NEON_smax(auVar89,auVar140,4);
                auVar140 = NEON_smin(auVar86,auVar88,4);
                auVar166 = NEON_smax(auVar166,auVar85,4);
                auVar87 = NEON_smax(auVar84,auVar87,4);
                auVar86 = NEON_smax(auVar96,auVar86,4);
                auVar88 = NEON_smin(auVar174,auVar84,4);
                auVar89 = NEON_smin(auVar89,auVar87,4);
                auVar86 = NEON_smin(auVar166,auVar86,4);
                auVar140 = NEON_smin(auVar140,auVar96,4);
                auVar166 = NEON_smax(auVar88,auVar89,4);
                auVar86 = NEON_smax(auVar140,auVar86,4);
                auVar100._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar100._8_2_ = auVar86._0_2_;
                auVar100._10_2_ = auVar86._4_2_;
                auVar100._12_2_ = auVar86._8_2_;
                auVar100._14_2_ = auVar86._12_2_;
                puVar68[1] = auVar100._8_8_;
                *puVar68 = auVar100._0_8_;
              } while (uVar70 < uVar77);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar1 - uVar63 == uVar79) goto LAB_001f6ed8;
            }
            uVar20 = *puVar54;
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            uVar40 = *(ushort *)((long)puVar54 + uVar81);
            iVar52 = (int)uVar82;
            uVar21 = *(ushort *)((long)puVar54 + uVar80);
            uVar19 = puVar54[lVar71];
            uVar18 = uVar20;
            if (uVar40 < uVar20) {
              uVar18 = uVar40;
            }
            uVar22 = uVar20;
            if (uVar20 < uVar40) {
              uVar22 = uVar40;
            }
            uVar40 = uVar18;
            if (uVar20 < uVar18) {
              uVar40 = uVar20;
            }
            if (uVar18 < uVar20) {
              uVar18 = uVar20;
            }
            uVar20 = uVar19;
            if (uVar19 < uVar21) {
              uVar20 = uVar21;
            }
            uVar23 = uVar22;
            if (uVar20 < uVar22) {
              uVar23 = uVar20;
            }
            if (uVar21 < uVar19) {
              uVar19 = uVar21;
            }
            if (uVar40 < uVar19) {
              uVar40 = uVar19;
            }
            uVar19 = uVar18;
            if (uVar18 < uVar22) {
              uVar19 = uVar22;
            }
            if (uVar19 < uVar40) {
              uVar40 = uVar19;
            }
            if (uVar18 < uVar23) {
              uVar23 = uVar18;
            }
            if (uVar23 < uVar40) {
              uVar23 = uVar40;
            }
            *(ushort *)((long)puVar65 + uVar76) = uVar23;
            if (iVar52 + 1 < (int)uVar1) {
              uVar20 = puVar54[1];
              uVar40 = *(ushort *)((long)puVar54 + uVar81 + 2);
              uVar21 = *(ushort *)((long)puVar54 + uVar80 + 2);
              uVar19 = puVar54[lVar71 + 1];
              uVar18 = uVar20;
              if (uVar40 < uVar20) {
                uVar18 = uVar40;
              }
              uVar22 = uVar20;
              if (uVar20 < uVar40) {
                uVar22 = uVar40;
              }
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar20 = uVar19;
              if (uVar19 < uVar21) {
                uVar20 = uVar21;
              }
              uVar23 = uVar22;
              if (uVar20 < uVar22) {
                uVar23 = uVar20;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              uVar19 = uVar18;
              if (uVar18 < uVar22) {
                uVar19 = uVar22;
              }
              if (uVar19 < uVar40) {
                uVar40 = uVar19;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              *(ushort *)((long)puVar65 + uVar76 + 2) = uVar23;
              if (iVar52 + 2 < (int)uVar1) {
                uVar20 = puVar54[2];
                uVar40 = *(ushort *)((long)puVar54 + uVar81 + 4);
                uVar21 = *(ushort *)((long)puVar54 + uVar80 + 4);
                uVar19 = puVar54[lVar71 + 2];
                uVar18 = uVar20;
                if (uVar40 < uVar20) {
                  uVar18 = uVar40;
                }
                uVar22 = uVar20;
                if (uVar20 < uVar40) {
                  uVar22 = uVar40;
                }
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar20 = uVar19;
                if (uVar19 < uVar21) {
                  uVar20 = uVar21;
                }
                uVar23 = uVar22;
                if (uVar20 < uVar22) {
                  uVar23 = uVar20;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar40 < uVar19) {
                  uVar40 = uVar19;
                }
                uVar19 = uVar18;
                if (uVar18 < uVar22) {
                  uVar19 = uVar22;
                }
                if (uVar19 < uVar40) {
                  uVar40 = uVar19;
                }
                if (uVar18 < uVar23) {
                  uVar23 = uVar18;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                *(ushort *)((long)puVar65 + uVar76 + 4) = uVar23;
                if (iVar52 + 3 < (int)uVar1) {
                  uVar20 = puVar54[3];
                  uVar40 = *(ushort *)((long)puVar54 + uVar81 + 6);
                  uVar21 = *(ushort *)((long)puVar54 + uVar80 + 6);
                  uVar19 = puVar54[lVar71 + 3];
                  uVar18 = uVar20;
                  if (uVar40 < uVar20) {
                    uVar18 = uVar40;
                  }
                  uVar22 = uVar20;
                  if (uVar20 < uVar40) {
                    uVar22 = uVar40;
                  }
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar20 = uVar19;
                  if (uVar19 < uVar21) {
                    uVar20 = uVar21;
                  }
                  uVar23 = uVar22;
                  if (uVar20 < uVar22) {
                    uVar23 = uVar20;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar40 < uVar19) {
                    uVar40 = uVar19;
                  }
                  uVar19 = uVar18;
                  if (uVar18 < uVar22) {
                    uVar19 = uVar22;
                  }
                  if (uVar19 < uVar40) {
                    uVar40 = uVar19;
                  }
                  if (uVar18 < uVar23) {
                    uVar23 = uVar18;
                  }
                  if (uVar23 < uVar40) {
                    uVar23 = uVar40;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 6) = uVar23;
                  if (iVar52 + 4 < (int)uVar1) {
                    uVar20 = puVar54[4];
                    uVar40 = *(ushort *)((long)puVar54 + uVar81 + 8);
                    uVar21 = *(ushort *)((long)puVar54 + uVar80 + 8);
                    uVar19 = puVar54[lVar71 + 4];
                    uVar18 = uVar20;
                    if (uVar40 < uVar20) {
                      uVar18 = uVar40;
                    }
                    uVar22 = uVar20;
                    if (uVar20 < uVar40) {
                      uVar22 = uVar40;
                    }
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar20 = uVar19;
                    if (uVar19 < uVar21) {
                      uVar20 = uVar21;
                    }
                    uVar23 = uVar22;
                    if (uVar20 < uVar22) {
                      uVar23 = uVar20;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar40 < uVar19) {
                      uVar40 = uVar19;
                    }
                    uVar19 = uVar18;
                    if (uVar18 < uVar22) {
                      uVar19 = uVar22;
                    }
                    if (uVar19 < uVar40) {
                      uVar40 = uVar19;
                    }
                    if (uVar18 < uVar23) {
                      uVar23 = uVar18;
                    }
                    if (uVar23 < uVar40) {
                      uVar23 = uVar40;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 8) = uVar23;
                    if (iVar52 + 5 < (int)uVar1) {
                      uVar20 = puVar54[5];
                      uVar40 = *(ushort *)((long)puVar54 + uVar81 + 10);
                      uVar21 = *(ushort *)((long)puVar54 + uVar80 + 10);
                      uVar19 = puVar54[lVar71 + 5];
                      uVar18 = uVar20;
                      if (uVar40 < uVar20) {
                        uVar18 = uVar40;
                      }
                      uVar22 = uVar20;
                      if (uVar20 < uVar40) {
                        uVar22 = uVar40;
                      }
                      uVar40 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar21) {
                        uVar20 = uVar21;
                      }
                      uVar23 = uVar22;
                      if (uVar20 < uVar22) {
                        uVar23 = uVar20;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar40 < uVar19) {
                        uVar40 = uVar19;
                      }
                      uVar19 = uVar18;
                      if (uVar18 < uVar22) {
                        uVar19 = uVar22;
                      }
                      if (uVar19 < uVar40) {
                        uVar40 = uVar19;
                      }
                      if (uVar18 < uVar23) {
                        uVar23 = uVar18;
                      }
                      if (uVar23 < uVar40) {
                        uVar23 = uVar40;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 10) = uVar23;
                      if (iVar52 + 6 < (int)uVar1) {
                        uVar20 = puVar54[6];
                        uVar40 = *(ushort *)((long)puVar54 + uVar81 + 0xc);
                        uVar21 = *(ushort *)((long)puVar54 + uVar80 + 0xc);
                        uVar19 = puVar54[lVar71 + 6];
                        uVar18 = uVar20;
                        if (uVar40 < uVar20) {
                          uVar18 = uVar40;
                        }
                        uVar22 = uVar20;
                        if (uVar20 < uVar40) {
                          uVar22 = uVar40;
                        }
                        uVar40 = uVar18;
                        if (uVar20 < uVar18) {
                          uVar40 = uVar20;
                        }
                        if (uVar18 < uVar20) {
                          uVar18 = uVar20;
                        }
                        uVar20 = uVar19;
                        if (uVar19 < uVar21) {
                          uVar20 = uVar21;
                        }
                        uVar23 = uVar22;
                        if (uVar20 < uVar22) {
                          uVar23 = uVar20;
                        }
                        if (uVar21 < uVar19) {
                          uVar19 = uVar21;
                        }
                        if (uVar40 < uVar19) {
                          uVar40 = uVar19;
                        }
                        uVar19 = uVar18;
                        if (uVar18 < uVar22) {
                          uVar19 = uVar22;
                        }
                        if (uVar19 < uVar40) {
                          uVar40 = uVar19;
                        }
                        if (uVar18 < uVar23) {
                          uVar23 = uVar18;
                        }
                        if (uVar23 < uVar40) {
                          uVar23 = uVar40;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar23;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (iVar69 < iVar61) {
          puVar6 = puVar74 + lVar71;
          if (iVar69 < 2) {
            if ((uVar1 < 9 ||
                 (puVar65 < puVar54 && puVar6 < puVar64 ||
                 puVar65 < puVar74 + lVar73 + 8 && puVar74 + lVar73 < puVar64)) ||
               (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
              lVar56 = 0;
              do {
                uVar19 = (puVar74 + lVar73)[lVar56];
                uVar20 = puVar74[lVar56];
                uVar40 = puVar6[lVar56];
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                uVar21 = uVar19;
                if (uVar19 < uVar20) {
                  uVar21 = uVar20;
                }
                if (uVar18 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar20 = uVar21;
                if (uVar21 < uVar19) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar18) {
                  uVar18 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar19 < uVar18) {
                  uVar19 = uVar18;
                }
                puVar65[lVar56] = uVar19;
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar6 >> 1) & 7) & 7;
            if (uVar1 < uVar77) {
              uVar77 = uVar1;
            }
            puVar54 = puVar74;
            if (uVar77 == 0) {
LAB_001f9d9c:
              uVar82 = (ulong)uVar77;
            }
            else {
              uVar40 = puVar74[lVar73];
              puVar54 = puVar74 + 1;
              uVar19 = *puVar74;
              uVar20 = puVar74[lVar71];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar40;
              if (uVar40 < uVar19) {
                uVar18 = uVar19;
              }
              if (uVar18 < uVar21) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar21) {
                uVar20 = uVar21;
              }
              puVar64[-8] = uVar20;
              if (uVar77 == 1) goto LAB_001f9d9c;
              uVar40 = puVar54[lVar73];
              uVar19 = puVar74[1];
              uVar20 = puVar54[lVar71];
              puVar54 = puVar74 + 2;
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar40;
              if (uVar40 < uVar19) {
                uVar18 = uVar19;
              }
              if (uVar18 < uVar21) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar21) {
                uVar20 = uVar21;
              }
              puVar64[-7] = uVar20;
              if (uVar77 == 2) goto LAB_001f9d9c;
              uVar40 = puVar54[lVar73];
              uVar19 = puVar74[2];
              uVar20 = puVar54[lVar71];
              puVar54 = puVar74 + 3;
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar40;
              if (uVar40 < uVar19) {
                uVar18 = uVar19;
              }
              if (uVar18 < uVar21) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar21) {
                uVar20 = uVar21;
              }
              puVar64[-6] = uVar20;
              if (uVar77 != 3) {
                uVar40 = puVar54[lVar73];
                uVar19 = puVar74[3];
                uVar20 = puVar54[lVar71];
                puVar54 = puVar74 + 4;
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar40;
                if (uVar40 < uVar19) {
                  uVar18 = uVar19;
                }
                if (uVar18 < uVar21) {
                  uVar21 = uVar18;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar21) {
                  uVar20 = uVar21;
                }
                puVar64[-5] = uVar20;
                if (uVar77 != 4) {
                  uVar40 = puVar54[lVar73];
                  uVar19 = puVar74[4];
                  uVar20 = puVar54[lVar71];
                  puVar54 = puVar74 + 5;
                  uVar18 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar18) {
                    uVar21 = uVar18;
                  }
                  uVar18 = uVar40;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar19;
                  }
                  if (uVar18 < uVar21) {
                    uVar21 = uVar18;
                  }
                  if (uVar40 < uVar20) {
                    uVar20 = uVar40;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar21) {
                    uVar20 = uVar21;
                  }
                  puVar64[-4] = uVar20;
                  if (uVar77 != 5) {
                    uVar40 = puVar54[lVar73];
                    uVar19 = puVar74[5];
                    uVar20 = puVar54[lVar71];
                    puVar54 = puVar74 + 6;
                    uVar18 = uVar19;
                    if (uVar40 < uVar19) {
                      uVar18 = uVar40;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar20 < uVar18) {
                      uVar21 = uVar18;
                    }
                    uVar18 = uVar40;
                    if (uVar40 < uVar19) {
                      uVar18 = uVar19;
                    }
                    if (uVar18 < uVar21) {
                      uVar21 = uVar18;
                    }
                    if (uVar40 < uVar20) {
                      uVar20 = uVar40;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar20 < uVar21) {
                      uVar20 = uVar21;
                    }
                    puVar64[-3] = uVar20;
                    if (uVar77 == 7) {
                      uVar40 = puVar54[lVar73];
                      uVar82 = 7;
                      uVar20 = puVar74[6];
                      uVar19 = puVar54[lVar71];
                      puVar54 = puVar74 + 7;
                      uVar18 = uVar40;
                      if (uVar20 < uVar40) {
                        uVar18 = uVar20;
                      }
                      uVar21 = uVar40;
                      if (uVar40 < uVar20) {
                        uVar21 = uVar20;
                      }
                      uVar20 = uVar19;
                      if (uVar19 < uVar18) {
                        uVar20 = uVar18;
                      }
                      uVar18 = uVar40;
                      if (uVar40 < uVar21) {
                        uVar18 = uVar21;
                      }
                      if (uVar18 < uVar20) {
                        uVar20 = uVar18;
                      }
                      if (uVar40 < uVar19) {
                        uVar19 = uVar40;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar19 < uVar20) {
                        uVar19 = uVar20;
                      }
                      puVar64[-2] = uVar19;
                    }
                    else {
                      uVar82 = 6;
                    }
                    goto LAB_001f8e10;
                  }
                }
                goto LAB_001f9d9c;
              }
              uVar82 = 3;
            }
LAB_001f8e10:
            uVar76 = (ulong)uVar77;
            uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
            uVar79 = uVar63 * 8;
            if (6 < uVar41 - uVar77) {
              lVar66 = uVar76 * 2;
              lVar56 = 0;
              lVar149 = NEON_shl(lVar71 + uVar76,1);
              uVar70 = 0;
              lVar147 = NEON_shl(lVar73 + uVar76,1);
              do {
                uVar70 = uVar70 + 1;
                puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar66 + lVar62);
                puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar147);
                lVar7 = lVar56 + lVar66;
                puVar8 = (ushort *)((long)puVar74 + lVar56 + lVar66 + lVar60);
                puVar9 = (ushort *)((long)puVar74 + lVar7);
                auVar127._2_2_ = 0;
                auVar127._0_2_ = *puVar6;
                auVar127._4_2_ = puVar6[1];
                auVar127._6_2_ = 0;
                auVar127._8_2_ = puVar6[2];
                auVar127._10_2_ = 0;
                auVar127._12_2_ = puVar6[3];
                auVar127._14_2_ = 0;
                puVar11 = (ushort *)((long)puVar74 + lVar56 + lVar149);
                auVar188._2_2_ = 0;
                auVar188._0_2_ = *puVar50;
                auVar188._4_2_ = puVar50[1];
                auVar188._6_2_ = 0;
                auVar188._8_2_ = puVar50[2];
                auVar188._10_2_ = 0;
                auVar188._12_2_ = puVar50[3];
                auVar188._14_2_ = 0;
                auVar189._2_2_ = 0;
                auVar189._0_2_ = puVar6[4];
                auVar189._4_2_ = puVar6[5];
                auVar189._6_2_ = 0;
                auVar189._8_2_ = puVar6[6];
                auVar189._10_2_ = 0;
                auVar189._12_2_ = puVar6[7];
                auVar189._14_2_ = 0;
                lVar56 = lVar56 + 0x10;
                puVar68 = (undefined8 *)((long)puVar65 + lVar7);
                auVar184._2_2_ = 0;
                auVar184._0_2_ = puVar50[4];
                auVar184._4_2_ = puVar50[5];
                auVar184._6_2_ = 0;
                auVar184._8_2_ = puVar50[6];
                auVar184._10_2_ = 0;
                auVar184._12_2_ = puVar50[7];
                auVar184._14_2_ = 0;
                auVar186._2_2_ = 0;
                auVar186._0_2_ = *puVar8;
                auVar186._4_2_ = puVar8[1];
                auVar186._6_2_ = 0;
                auVar186._8_2_ = puVar8[2];
                auVar186._10_2_ = 0;
                auVar186._12_2_ = puVar8[3];
                auVar186._14_2_ = 0;
                auVar89 = NEON_smin(auVar188,auVar127,4);
                auVar145._2_2_ = 0;
                auVar145._0_2_ = puVar8[4];
                auVar145._4_2_ = puVar8[5];
                auVar145._6_2_ = 0;
                auVar145._8_2_ = puVar8[6];
                auVar145._10_2_ = 0;
                auVar145._12_2_ = puVar8[7];
                auVar145._14_2_ = 0;
                auVar174 = NEON_smax(auVar188,auVar127,4);
                auVar172._2_2_ = 0;
                auVar172._0_2_ = *puVar9;
                auVar172._4_2_ = puVar9[1];
                auVar172._6_2_ = 0;
                auVar172._8_2_ = puVar9[2];
                auVar172._10_2_ = 0;
                auVar172._12_2_ = puVar9[3];
                auVar172._14_2_ = 0;
                auVar159._2_2_ = 0;
                auVar159._0_2_ = puVar9[4];
                auVar159._4_2_ = puVar9[5];
                auVar159._6_2_ = 0;
                auVar159._8_2_ = puVar9[6];
                auVar159._10_2_ = 0;
                auVar159._12_2_ = puVar9[7];
                auVar159._14_2_ = 0;
                auVar166 = NEON_smin(auVar184,auVar189,4);
                auVar86 = NEON_smax(auVar184,auVar189,4);
                auVar165._2_2_ = 0;
                auVar165._0_2_ = *puVar11;
                auVar165._4_2_ = puVar11[1];
                auVar165._6_2_ = 0;
                auVar165._8_2_ = puVar11[2];
                auVar165._10_2_ = 0;
                auVar165._12_2_ = puVar11[3];
                auVar165._14_2_ = 0;
                auVar135._2_2_ = 0;
                auVar135._0_2_ = puVar11[4];
                auVar135._4_2_ = puVar11[5];
                auVar135._6_2_ = 0;
                auVar135._8_2_ = puVar11[6];
                auVar135._10_2_ = 0;
                auVar135._12_2_ = puVar11[7];
                auVar135._14_2_ = 0;
                auVar84 = NEON_smax(auVar89,auVar172,4);
                auVar96 = NEON_smax(auVar166,auVar159,4);
                auVar88 = NEON_smax(auVar165,auVar186,4);
                auVar89 = NEON_smin(auVar89,auVar172,4);
                auVar140 = NEON_smax(auVar135,auVar145,4);
                auVar85 = NEON_smin(auVar165,auVar186,4);
                auVar166 = NEON_smin(auVar166,auVar159,4);
                auVar87 = NEON_smin(auVar135,auVar145,4);
                auVar88 = NEON_smin(auVar174,auVar88,4);
                auVar89 = NEON_smax(auVar89,auVar85,4);
                auVar140 = NEON_smin(auVar86,auVar140,4);
                auVar166 = NEON_smax(auVar166,auVar87,4);
                auVar174 = NEON_smax(auVar84,auVar174,4);
                auVar86 = NEON_smax(auVar96,auVar86,4);
                auVar88 = NEON_smin(auVar88,auVar84,4);
                auVar89 = NEON_smin(auVar89,auVar174,4);
                auVar86 = NEON_smin(auVar166,auVar86,4);
                auVar140 = NEON_smin(auVar140,auVar96,4);
                auVar166 = NEON_smax(auVar88,auVar89,4);
                auVar86 = NEON_smax(auVar140,auVar86,4);
                auVar185._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar185._8_2_ = auVar86._0_2_;
                auVar185._10_2_ = auVar86._4_2_;
                auVar185._12_2_ = auVar86._8_2_;
                auVar185._14_2_ = auVar86._12_2_;
                puVar68[1] = auVar185._8_8_;
                *puVar68 = auVar185._0_8_;
              } while (uVar70 < uVar63);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar1 - uVar77 == uVar79) goto LAB_001f6ed8;
            }
            uVar40 = puVar54[lVar73];
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            uVar19 = *puVar54;
            iVar52 = (int)uVar82;
            uVar20 = puVar54[lVar71];
            uVar18 = uVar19;
            if (uVar40 < uVar19) {
              uVar18 = uVar40;
            }
            if (uVar19 < uVar40) {
              uVar19 = uVar40;
            }
            uVar21 = uVar20;
            if (uVar20 < uVar18) {
              uVar21 = uVar18;
            }
            uVar18 = uVar40;
            if (uVar40 < uVar19) {
              uVar18 = uVar19;
            }
            if (uVar18 < uVar21) {
              uVar21 = uVar18;
            }
            if (uVar40 < uVar20) {
              uVar20 = uVar40;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar20 < uVar21) {
              uVar20 = uVar21;
            }
            *(ushort *)((long)puVar65 + uVar76) = uVar20;
            if (iVar52 + 1 < (int)uVar1) {
              uVar40 = puVar54[lVar73 + 1];
              uVar19 = puVar54[1];
              uVar20 = puVar54[lVar71 + 1];
              uVar18 = uVar19;
              if (uVar40 < uVar19) {
                uVar18 = uVar40;
              }
              if (uVar19 < uVar40) {
                uVar19 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar20 < uVar18) {
                uVar21 = uVar18;
              }
              uVar18 = uVar40;
              if (uVar40 < uVar19) {
                uVar18 = uVar19;
              }
              if (uVar18 < uVar21) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar20) {
                uVar20 = uVar40;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar21) {
                uVar20 = uVar21;
              }
              *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
              if (iVar52 + 2 < (int)uVar1) {
                uVar40 = puVar54[lVar73 + 2];
                uVar19 = puVar54[2];
                uVar20 = puVar54[lVar71 + 2];
                uVar18 = uVar19;
                if (uVar40 < uVar19) {
                  uVar18 = uVar40;
                }
                if (uVar19 < uVar40) {
                  uVar19 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar20 < uVar18) {
                  uVar21 = uVar18;
                }
                uVar18 = uVar40;
                if (uVar40 < uVar19) {
                  uVar18 = uVar19;
                }
                if (uVar18 < uVar21) {
                  uVar21 = uVar18;
                }
                if (uVar40 < uVar20) {
                  uVar20 = uVar40;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar21) {
                  uVar20 = uVar21;
                }
                *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
                if (iVar52 + 3 < (int)uVar1) {
                  uVar40 = puVar54[lVar73 + 3];
                  uVar19 = puVar54[3];
                  uVar20 = puVar54[lVar71 + 3];
                  uVar18 = uVar19;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar40;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar20 < uVar18) {
                    uVar21 = uVar18;
                  }
                  uVar18 = uVar40;
                  if (uVar40 < uVar19) {
                    uVar18 = uVar19;
                  }
                  if (uVar18 < uVar21) {
                    uVar21 = uVar18;
                  }
                  if (uVar40 < uVar20) {
                    uVar20 = uVar40;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar21) {
                    uVar20 = uVar21;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                  if (iVar52 + 4 < (int)uVar1) {
                    uVar40 = puVar54[lVar73 + 4];
                    uVar19 = puVar54[4];
                    uVar20 = puVar54[lVar71 + 4];
                    uVar18 = uVar19;
                    if (uVar40 < uVar19) {
                      uVar18 = uVar40;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar20 < uVar18) {
                      uVar21 = uVar18;
                    }
                    uVar18 = uVar40;
                    if (uVar40 < uVar19) {
                      uVar18 = uVar19;
                    }
                    if (uVar18 < uVar21) {
                      uVar21 = uVar18;
                    }
                    if (uVar40 < uVar20) {
                      uVar20 = uVar40;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar20 < uVar21) {
                      uVar20 = uVar21;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                    if (iVar52 + 5 < (int)uVar1) {
                      uVar40 = puVar54[lVar73 + 5];
                      uVar19 = puVar54[5];
                      uVar20 = puVar54[lVar71 + 5];
                      uVar18 = uVar19;
                      if (uVar40 < uVar19) {
                        uVar18 = uVar40;
                      }
                      if (uVar19 < uVar40) {
                        uVar19 = uVar40;
                      }
                      uVar21 = uVar20;
                      if (uVar20 < uVar18) {
                        uVar21 = uVar18;
                      }
                      uVar18 = uVar40;
                      if (uVar40 < uVar19) {
                        uVar18 = uVar19;
                      }
                      if (uVar18 < uVar21) {
                        uVar21 = uVar18;
                      }
                      if (uVar40 < uVar20) {
                        uVar20 = uVar40;
                      }
                      if (uVar19 < uVar20) {
                        uVar20 = uVar19;
                      }
                      if (uVar20 < uVar21) {
                        uVar20 = uVar21;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 10) = uVar20;
                      if (iVar52 + 6 < (int)uVar1) {
                        uVar40 = puVar54[lVar73 + 6];
                        uVar20 = puVar54[6];
                        uVar19 = puVar54[lVar71 + 6];
                        uVar18 = uVar40;
                        if (uVar20 < uVar40) {
                          uVar18 = uVar20;
                        }
                        uVar21 = uVar40;
                        if (uVar40 < uVar20) {
                          uVar21 = uVar20;
                        }
                        uVar20 = uVar19;
                        if (uVar19 < uVar18) {
                          uVar20 = uVar18;
                        }
                        uVar18 = uVar40;
                        if (uVar40 < uVar21) {
                          uVar18 = uVar21;
                        }
                        if (uVar18 < uVar20) {
                          uVar20 = uVar18;
                        }
                        if (uVar40 < uVar19) {
                          uVar19 = uVar40;
                        }
                        if (uVar21 < uVar19) {
                          uVar19 = uVar21;
                        }
                        if (uVar19 < uVar20) {
                          uVar19 = uVar20;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar19;
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            puVar50 = puVar74 + lVar73;
            if (((uVar1 < 9 ||
                 (puVar65 < puVar54 && puVar6 < puVar64 ||
                 puVar65 < (ushort *)((long)puVar74 + lVar55) &&
                 (ushort *)((long)puVar74 + uVar80) < puVar64)) ||
                 puVar65 < puVar74 + lVar73 + 8 && puVar50 < puVar64) ||
               (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
              lVar56 = 0;
              do {
                uVar18 = puVar50[lVar56];
                uVar20 = puVar74[lVar56];
                uVar40 = ((ushort *)((long)puVar74 + uVar80))[lVar56];
                uVar19 = uVar18;
                if (uVar20 < uVar18) {
                  uVar19 = uVar20;
                }
                uVar21 = uVar18;
                if (uVar18 < uVar20) {
                  uVar21 = uVar20;
                }
                uVar22 = puVar6[lVar56];
                uVar20 = uVar22;
                if (uVar22 < uVar40) {
                  uVar20 = uVar40;
                }
                uVar23 = uVar18;
                if (uVar20 < uVar18) {
                  uVar23 = uVar20;
                }
                if (uVar40 < uVar22) {
                  uVar22 = uVar40;
                }
                if (uVar19 < uVar22) {
                  uVar19 = uVar22;
                }
                if (uVar18 < uVar21) {
                  uVar18 = uVar21;
                }
                if (uVar18 < uVar19) {
                  uVar19 = uVar18;
                }
                if (uVar21 < uVar23) {
                  uVar23 = uVar21;
                }
                if (uVar23 < uVar19) {
                  uVar23 = uVar19;
                }
                puVar65[lVar56] = uVar23;
                lVar56 = lVar56 + 1;
              } while ((int)lVar56 < (int)uVar1);
              goto LAB_001f6ed8;
            }
            uVar77 = -((uint)((ulong)puVar50 >> 1) & 7) & 7;
            if (uVar1 < uVar77) {
              uVar77 = uVar1;
            }
            puVar54 = puVar74;
            if (uVar77 == 0) {
LAB_001f8a90:
              uVar82 = (ulong)uVar77;
            }
            else {
              uVar20 = puVar74[lVar73];
              puVar54 = puVar74 + 1;
              uVar18 = *puVar74;
              uVar21 = *(ushort *)((long)puVar74 + uVar80);
              uVar19 = puVar74[lVar71];
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar22 = uVar19;
              if (uVar19 < uVar21) {
                uVar22 = uVar21;
              }
              uVar23 = uVar20;
              if (uVar22 < uVar20) {
                uVar23 = uVar22;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              if (uVar20 < uVar40) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-8] = uVar23;
              if (uVar77 == 1) goto LAB_001f8a90;
              uVar20 = puVar54[lVar73];
              uVar18 = puVar74[1];
              uVar21 = *(ushort *)((long)puVar54 + uVar80);
              uVar19 = puVar54[lVar71];
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar22 = uVar19;
              if (uVar19 < uVar21) {
                uVar22 = uVar21;
              }
              puVar54 = puVar74 + 2;
              uVar23 = uVar20;
              if (uVar22 < uVar20) {
                uVar23 = uVar22;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              if (uVar20 < uVar40) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-7] = uVar23;
              if (uVar77 == 2) goto LAB_001f8a90;
              uVar20 = puVar54[lVar73];
              uVar18 = puVar74[2];
              uVar21 = *(ushort *)((long)puVar54 + uVar80);
              uVar19 = puVar54[lVar71];
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar22 = uVar19;
              if (uVar19 < uVar21) {
                uVar22 = uVar21;
              }
              puVar54 = puVar74 + 3;
              uVar23 = uVar20;
              if (uVar22 < uVar20) {
                uVar23 = uVar22;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              if (uVar20 < uVar40) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              puVar64[-6] = uVar23;
              if (uVar77 != 3) {
                uVar20 = puVar54[lVar73];
                uVar18 = puVar74[3];
                uVar21 = *(ushort *)((long)puVar54 + uVar80);
                uVar19 = puVar54[lVar71];
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar22 = uVar19;
                if (uVar19 < uVar21) {
                  uVar22 = uVar21;
                }
                puVar54 = puVar74 + 4;
                uVar23 = uVar20;
                if (uVar22 < uVar20) {
                  uVar23 = uVar22;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar40 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar40) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar23) {
                  uVar23 = uVar18;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                puVar64[-5] = uVar23;
                if (uVar77 != 4) {
                  uVar20 = puVar54[lVar73];
                  uVar18 = puVar74[4];
                  uVar21 = *(ushort *)((long)puVar54 + uVar80);
                  uVar19 = puVar54[lVar71];
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar22 = uVar19;
                  if (uVar19 < uVar21) {
                    uVar22 = uVar21;
                  }
                  puVar54 = puVar74 + 5;
                  uVar23 = uVar20;
                  if (uVar22 < uVar20) {
                    uVar23 = uVar22;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar40 < uVar19) {
                    uVar40 = uVar19;
                  }
                  if (uVar20 < uVar18) {
                    uVar20 = uVar18;
                  }
                  if (uVar20 < uVar40) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar23) {
                    uVar23 = uVar18;
                  }
                  if (uVar23 < uVar40) {
                    uVar23 = uVar40;
                  }
                  puVar64[-4] = uVar23;
                  if (uVar77 != 5) {
                    uVar20 = puVar54[lVar73];
                    uVar18 = puVar74[5];
                    uVar21 = *(ushort *)((long)puVar54 + uVar80);
                    uVar19 = puVar54[lVar71];
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar22 = uVar19;
                    if (uVar19 < uVar21) {
                      uVar22 = uVar21;
                    }
                    puVar54 = puVar74 + 6;
                    uVar23 = uVar20;
                    if (uVar22 < uVar20) {
                      uVar23 = uVar22;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar40 < uVar19) {
                      uVar40 = uVar19;
                    }
                    if (uVar20 < uVar18) {
                      uVar20 = uVar18;
                    }
                    if (uVar20 < uVar40) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar23) {
                      uVar23 = uVar18;
                    }
                    if (uVar23 < uVar40) {
                      uVar23 = uVar40;
                    }
                    puVar64[-3] = uVar23;
                    if (uVar77 == 7) {
                      uVar40 = puVar54[lVar73];
                      uVar82 = 7;
                      uVar20 = puVar74[6];
                      uVar21 = *(ushort *)((long)puVar54 + uVar80);
                      uVar18 = puVar54[lVar71];
                      uVar19 = uVar40;
                      if (uVar20 < uVar40) {
                        uVar19 = uVar20;
                      }
                      uVar22 = uVar40;
                      if (uVar40 < uVar20) {
                        uVar22 = uVar20;
                      }
                      uVar20 = uVar18;
                      if (uVar18 < uVar21) {
                        uVar20 = uVar21;
                      }
                      puVar54 = puVar74 + 7;
                      uVar23 = uVar40;
                      if (uVar20 < uVar40) {
                        uVar23 = uVar20;
                      }
                      if (uVar21 < uVar18) {
                        uVar18 = uVar21;
                      }
                      if (uVar19 < uVar18) {
                        uVar19 = uVar18;
                      }
                      uVar18 = uVar22;
                      if (uVar22 < uVar40) {
                        uVar18 = uVar40;
                      }
                      if (uVar18 < uVar19) {
                        uVar19 = uVar18;
                      }
                      if (uVar22 < uVar23) {
                        uVar23 = uVar22;
                      }
                      if (uVar23 < uVar19) {
                        uVar23 = uVar19;
                      }
                      puVar64[-2] = uVar23;
                    }
                    else {
                      uVar82 = 6;
                    }
                    goto LAB_001f85d0;
                  }
                }
                goto LAB_001f8a90;
              }
              uVar82 = 3;
            }
LAB_001f85d0:
            uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
            uVar79 = uVar63 * 8;
            if (6 < uVar41 - uVar77) {
              lVar66 = (ulong)uVar77 * 2;
              lVar56 = 0;
              uVar70 = 0;
              lVar147 = NEON_shl(lVar73 + (ulong)uVar77,1);
              do {
                puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar62 + lVar66);
                uVar70 = uVar70 + 1;
                lVar149 = lVar56 + lVar66 + uVar80;
                puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar147);
                lVar7 = lVar56 + lVar66;
                auVar126._2_2_ = 0;
                auVar126._0_2_ = *puVar6;
                auVar126._4_2_ = puVar6[1];
                auVar126._6_2_ = 0;
                auVar126._8_2_ = puVar6[2];
                auVar126._10_2_ = 0;
                auVar126._12_2_ = puVar6[3];
                auVar126._14_2_ = 0;
                auVar121._2_2_ = 0;
                auVar121._0_2_ = puVar6[4];
                auVar121._4_2_ = puVar6[5];
                auVar121._6_2_ = 0;
                auVar121._8_2_ = puVar6[6];
                auVar121._10_2_ = 0;
                auVar121._12_2_ = puVar6[7];
                auVar121._14_2_ = 0;
                lVar10 = lVar56 + lVar60 + lVar66;
                lVar56 = lVar56 + 0x10;
                puVar6 = (ushort *)((long)puVar74 + lVar149);
                auVar116._2_2_ = 0;
                auVar116._0_2_ = *puVar50;
                auVar116._4_2_ = puVar50[1];
                auVar116._6_2_ = 0;
                auVar116._8_2_ = puVar50[2];
                auVar116._10_2_ = 0;
                auVar116._12_2_ = puVar50[3];
                auVar116._14_2_ = 0;
                auVar94._2_2_ = 0;
                auVar94._0_2_ = puVar50[4];
                auVar94._4_2_ = puVar50[5];
                auVar94._6_2_ = 0;
                auVar94._8_2_ = puVar50[6];
                auVar94._10_2_ = 0;
                auVar94._12_2_ = puVar50[7];
                auVar94._14_2_ = 0;
                puVar50 = (ushort *)((long)puVar74 + lVar10);
                puVar8 = (ushort *)((long)puVar74 + lVar7);
                puVar68 = (undefined8 *)((long)puVar65 + lVar7);
                auVar89 = NEON_smin(auVar116,auVar126,4);
                auVar174 = NEON_smax(auVar116,auVar126,4);
                auVar109._2_2_ = 0;
                auVar109._0_2_ = *puVar6;
                auVar109._4_2_ = puVar6[1];
                auVar109._6_2_ = 0;
                auVar109._8_2_ = puVar6[2];
                auVar109._10_2_ = 0;
                auVar109._12_2_ = puVar6[3];
                auVar109._14_2_ = 0;
                auVar171._2_2_ = 0;
                auVar171._0_2_ = *puVar8;
                auVar171._4_2_ = puVar8[1];
                auVar171._6_2_ = 0;
                auVar171._8_2_ = puVar8[2];
                auVar171._10_2_ = 0;
                auVar171._12_2_ = puVar8[3];
                auVar171._14_2_ = 0;
                auVar158._2_2_ = 0;
                auVar158._0_2_ = puVar8[4];
                auVar158._4_2_ = puVar8[5];
                auVar158._6_2_ = 0;
                auVar158._8_2_ = puVar8[6];
                auVar158._10_2_ = 0;
                auVar158._12_2_ = puVar8[7];
                auVar158._14_2_ = 0;
                auVar144._2_2_ = 0;
                auVar144._0_2_ = puVar6[4];
                auVar144._4_2_ = puVar6[5];
                auVar144._6_2_ = 0;
                auVar144._8_2_ = puVar6[6];
                auVar144._10_2_ = 0;
                auVar144._12_2_ = puVar6[7];
                auVar144._14_2_ = 0;
                auVar166 = NEON_smin(auVar94,auVar121,4);
                auVar164._2_2_ = 0;
                auVar164._0_2_ = *puVar50;
                auVar164._4_2_ = puVar50[1];
                auVar164._6_2_ = 0;
                auVar164._8_2_ = puVar50[2];
                auVar164._10_2_ = 0;
                auVar164._12_2_ = puVar50[3];
                auVar164._14_2_ = 0;
                auVar134._2_2_ = 0;
                auVar134._0_2_ = puVar50[4];
                auVar134._4_2_ = puVar50[5];
                auVar134._6_2_ = 0;
                auVar134._8_2_ = puVar50[6];
                auVar134._10_2_ = 0;
                auVar134._12_2_ = puVar50[7];
                auVar134._14_2_ = 0;
                auVar86 = NEON_smax(auVar94,auVar121,4);
                auVar84 = NEON_smax(auVar89,auVar171,4);
                auVar96 = NEON_smax(auVar166,auVar158,4);
                auVar88 = NEON_smax(auVar164,auVar109,4);
                auVar89 = NEON_smin(auVar89,auVar171,4);
                auVar140 = NEON_smax(auVar134,auVar144,4);
                auVar85 = NEON_smin(auVar164,auVar109,4);
                auVar166 = NEON_smin(auVar166,auVar158,4);
                auVar87 = NEON_smin(auVar134,auVar144,4);
                auVar88 = NEON_smin(auVar174,auVar88,4);
                auVar89 = NEON_smax(auVar89,auVar85,4);
                auVar140 = NEON_smin(auVar86,auVar140,4);
                auVar166 = NEON_smax(auVar166,auVar87,4);
                auVar174 = NEON_smax(auVar84,auVar174,4);
                auVar86 = NEON_smax(auVar96,auVar86,4);
                auVar88 = NEON_smin(auVar88,auVar84,4);
                auVar89 = NEON_smin(auVar89,auVar174,4);
                auVar86 = NEON_smin(auVar166,auVar86,4);
                auVar140 = NEON_smin(auVar140,auVar96,4);
                auVar166 = NEON_smax(auVar88,auVar89,4);
                auVar86 = NEON_smax(auVar140,auVar86,4);
                auVar101._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar101._8_2_ = auVar86._0_2_;
                auVar101._10_2_ = auVar86._4_2_;
                auVar101._12_2_ = auVar86._8_2_;
                auVar101._14_2_ = auVar86._12_2_;
                puVar68[1] = auVar101._8_8_;
                *puVar68 = auVar101._0_8_;
              } while (uVar70 < uVar63);
              uVar82 = (ulong)((int)uVar82 + uVar79);
              puVar54 = puVar54 + uVar79;
              if (uVar1 - uVar77 == uVar79) goto LAB_001f6ed8;
            }
            uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
            uVar20 = puVar54[lVar73];
            uVar21 = *(ushort *)((long)puVar54 + uVar80);
            iVar52 = (int)uVar82;
            uVar18 = *puVar54;
            uVar19 = puVar54[lVar71];
            uVar40 = uVar18;
            if (uVar20 < uVar18) {
              uVar40 = uVar20;
            }
            if (uVar18 < uVar20) {
              uVar18 = uVar20;
            }
            uVar22 = uVar19;
            if (uVar19 < uVar21) {
              uVar22 = uVar21;
            }
            uVar23 = uVar20;
            if (uVar22 < uVar20) {
              uVar23 = uVar22;
            }
            if (uVar21 < uVar19) {
              uVar19 = uVar21;
            }
            if (uVar40 < uVar19) {
              uVar40 = uVar19;
            }
            if (uVar20 < uVar18) {
              uVar20 = uVar18;
            }
            if (uVar20 < uVar40) {
              uVar40 = uVar20;
            }
            if (uVar18 < uVar23) {
              uVar23 = uVar18;
            }
            if (uVar23 < uVar40) {
              uVar23 = uVar40;
            }
            *(ushort *)((long)puVar65 + uVar76) = uVar23;
            if (iVar52 + 1 < (int)uVar1) {
              uVar20 = puVar54[lVar73 + 1];
              uVar21 = *(ushort *)((long)puVar54 + uVar80 + 2);
              uVar19 = puVar54[lVar71 + 1];
              uVar18 = puVar54[1];
              uVar40 = uVar18;
              if (uVar20 < uVar18) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar20) {
                uVar18 = uVar20;
              }
              uVar22 = uVar19;
              if (uVar19 < uVar21) {
                uVar22 = uVar21;
              }
              uVar23 = uVar20;
              if (uVar22 < uVar20) {
                uVar23 = uVar22;
              }
              if (uVar21 < uVar19) {
                uVar19 = uVar21;
              }
              if (uVar40 < uVar19) {
                uVar40 = uVar19;
              }
              if (uVar20 < uVar18) {
                uVar20 = uVar18;
              }
              if (uVar20 < uVar40) {
                uVar40 = uVar20;
              }
              if (uVar18 < uVar23) {
                uVar23 = uVar18;
              }
              if (uVar23 < uVar40) {
                uVar23 = uVar40;
              }
              *(ushort *)((long)puVar65 + uVar76 + 2) = uVar23;
              if (iVar52 + 2 < (int)uVar1) {
                uVar20 = puVar54[lVar73 + 2];
                uVar18 = puVar54[2];
                uVar21 = *(ushort *)((long)puVar54 + uVar80 + 4);
                uVar19 = puVar54[lVar71 + 2];
                uVar40 = uVar18;
                if (uVar20 < uVar18) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar22 = uVar19;
                if (uVar19 < uVar21) {
                  uVar22 = uVar21;
                }
                uVar23 = uVar20;
                if (uVar22 < uVar20) {
                  uVar23 = uVar22;
                }
                if (uVar21 < uVar19) {
                  uVar19 = uVar21;
                }
                if (uVar40 < uVar19) {
                  uVar40 = uVar19;
                }
                if (uVar20 < uVar18) {
                  uVar20 = uVar18;
                }
                if (uVar20 < uVar40) {
                  uVar40 = uVar20;
                }
                if (uVar18 < uVar23) {
                  uVar23 = uVar18;
                }
                if (uVar23 < uVar40) {
                  uVar23 = uVar40;
                }
                *(ushort *)((long)puVar65 + uVar76 + 4) = uVar23;
                if (iVar52 + 3 < (int)uVar1) {
                  uVar20 = puVar54[lVar73 + 3];
                  uVar18 = puVar54[3];
                  uVar21 = *(ushort *)((long)puVar54 + uVar80 + 6);
                  uVar19 = puVar54[lVar71 + 3];
                  uVar40 = uVar18;
                  if (uVar20 < uVar18) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar22 = uVar19;
                  if (uVar19 < uVar21) {
                    uVar22 = uVar21;
                  }
                  uVar23 = uVar20;
                  if (uVar22 < uVar20) {
                    uVar23 = uVar22;
                  }
                  if (uVar21 < uVar19) {
                    uVar19 = uVar21;
                  }
                  if (uVar40 < uVar19) {
                    uVar40 = uVar19;
                  }
                  if (uVar20 < uVar18) {
                    uVar20 = uVar18;
                  }
                  if (uVar20 < uVar40) {
                    uVar40 = uVar20;
                  }
                  if (uVar18 < uVar23) {
                    uVar23 = uVar18;
                  }
                  if (uVar23 < uVar40) {
                    uVar23 = uVar40;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 6) = uVar23;
                  if (iVar52 + 4 < (int)uVar1) {
                    uVar20 = puVar54[lVar73 + 4];
                    uVar18 = puVar54[4];
                    uVar21 = *(ushort *)((long)puVar54 + uVar80 + 8);
                    uVar19 = puVar54[lVar71 + 4];
                    uVar40 = uVar18;
                    if (uVar20 < uVar18) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar22 = uVar19;
                    if (uVar19 < uVar21) {
                      uVar22 = uVar21;
                    }
                    uVar23 = uVar20;
                    if (uVar22 < uVar20) {
                      uVar23 = uVar22;
                    }
                    if (uVar21 < uVar19) {
                      uVar19 = uVar21;
                    }
                    if (uVar40 < uVar19) {
                      uVar40 = uVar19;
                    }
                    if (uVar20 < uVar18) {
                      uVar20 = uVar18;
                    }
                    if (uVar20 < uVar40) {
                      uVar40 = uVar20;
                    }
                    if (uVar18 < uVar23) {
                      uVar23 = uVar18;
                    }
                    if (uVar23 < uVar40) {
                      uVar23 = uVar40;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 8) = uVar23;
                    if (iVar52 + 5 < (int)uVar1) {
                      uVar20 = puVar54[lVar73 + 5];
                      uVar18 = puVar54[5];
                      uVar21 = *(ushort *)((long)puVar54 + uVar80 + 10);
                      uVar19 = puVar54[lVar71 + 5];
                      uVar40 = uVar18;
                      if (uVar20 < uVar18) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar22 = uVar19;
                      if (uVar19 < uVar21) {
                        uVar22 = uVar21;
                      }
                      uVar23 = uVar20;
                      if (uVar22 < uVar20) {
                        uVar23 = uVar22;
                      }
                      if (uVar21 < uVar19) {
                        uVar19 = uVar21;
                      }
                      if (uVar40 < uVar19) {
                        uVar40 = uVar19;
                      }
                      if (uVar20 < uVar18) {
                        uVar20 = uVar18;
                      }
                      if (uVar20 < uVar40) {
                        uVar40 = uVar20;
                      }
                      if (uVar18 < uVar23) {
                        uVar23 = uVar18;
                      }
                      if (uVar23 < uVar40) {
                        uVar23 = uVar40;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 10) = uVar23;
                      if (iVar52 + 6 < (int)uVar1) {
                        uVar19 = puVar54[lVar73 + 6];
                        uVar40 = puVar54[6];
                        uVar21 = *(ushort *)((long)puVar54 + uVar80 + 0xc);
                        uVar18 = puVar54[lVar71 + 6];
                        uVar20 = uVar19;
                        if (uVar40 < uVar19) {
                          uVar20 = uVar40;
                        }
                        uVar22 = uVar19;
                        if (uVar19 < uVar40) {
                          uVar22 = uVar40;
                        }
                        uVar40 = uVar18;
                        if (uVar18 < uVar21) {
                          uVar40 = uVar21;
                        }
                        uVar23 = uVar19;
                        if (uVar40 < uVar19) {
                          uVar23 = uVar40;
                        }
                        if (uVar21 < uVar18) {
                          uVar18 = uVar21;
                        }
                        if (uVar20 < uVar18) {
                          uVar20 = uVar18;
                        }
                        if (uVar19 < uVar22) {
                          uVar19 = uVar22;
                        }
                        if (uVar19 < uVar20) {
                          uVar20 = uVar19;
                        }
                        if (uVar22 < uVar23) {
                          uVar23 = uVar22;
                        }
                        if (uVar23 < uVar20) {
                          uVar23 = uVar20;
                        }
                        *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar23;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (iVar69 < 2) {
          if ((puVar65 < puVar54 && puVar74 + lVar71 < puVar64 ||
               puVar65 < puVar74 + 8 && puVar74 < puVar64) || (uVar1 < 9)) {
            lVar56 = 0;
            do {
              uVar20 = puVar74[lVar56];
              uVar19 = (puVar74 + lVar71)[lVar56];
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              if (uVar20 < uVar19) {
                uVar19 = uVar20;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar40) {
                uVar20 = uVar40;
              }
              puVar65[lVar56] = uVar20;
              lVar56 = lVar56 + 1;
            } while ((int)lVar56 < (int)uVar1);
            goto LAB_001f6ed8;
          }
          uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
          uVar63 = uVar1;
          if (uVar77 < uVar1) {
            uVar63 = uVar77;
          }
          puVar54 = puVar74;
          if (uVar63 == 0) {
LAB_001f9e18:
            uVar82 = (ulong)uVar63;
          }
          else {
            puVar54 = puVar74 + 1;
            uVar20 = *puVar74;
            uVar19 = puVar74[lVar71];
            uVar18 = uVar19;
            if (uVar19 < uVar20) {
              uVar18 = uVar20;
            }
            uVar40 = uVar20;
            if (uVar18 < uVar20) {
              uVar40 = uVar18;
            }
            if (uVar20 < uVar19) {
              uVar19 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar20 < uVar40) {
              uVar20 = uVar40;
            }
            puVar64[-8] = uVar20;
            if (uVar63 == 1) goto LAB_001f9e18;
            uVar20 = puVar74[1];
            uVar19 = puVar54[lVar71];
            puVar54 = puVar74 + 2;
            uVar18 = uVar19;
            if (uVar19 < uVar20) {
              uVar18 = uVar20;
            }
            uVar40 = uVar20;
            if (uVar18 < uVar20) {
              uVar40 = uVar18;
            }
            if (uVar20 < uVar19) {
              uVar19 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar20 < uVar40) {
              uVar20 = uVar40;
            }
            puVar64[-7] = uVar20;
            if (uVar63 == 2) goto LAB_001f9e18;
            uVar20 = puVar74[2];
            uVar19 = puVar54[lVar71];
            puVar54 = puVar74 + 3;
            uVar18 = uVar19;
            if (uVar19 < uVar20) {
              uVar18 = uVar20;
            }
            uVar40 = uVar20;
            if (uVar18 < uVar20) {
              uVar40 = uVar18;
            }
            if (uVar20 < uVar19) {
              uVar19 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar20 < uVar40) {
              uVar20 = uVar40;
            }
            puVar64[-6] = uVar20;
            if (uVar63 != 3) {
              uVar20 = puVar74[3];
              uVar19 = puVar54[lVar71];
              puVar54 = puVar74 + 4;
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              if (uVar20 < uVar19) {
                uVar19 = uVar20;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar40) {
                uVar20 = uVar40;
              }
              puVar64[-5] = uVar20;
              if (uVar63 != 4) {
                uVar20 = puVar74[4];
                uVar19 = puVar54[lVar71];
                puVar54 = puVar74 + 5;
                uVar18 = uVar19;
                if (uVar19 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                if (uVar20 < uVar19) {
                  uVar19 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                puVar64[-4] = uVar20;
                if (uVar63 != 5) {
                  uVar20 = puVar74[5];
                  uVar19 = puVar54[lVar71];
                  puVar54 = puVar74 + 6;
                  uVar18 = uVar19;
                  if (uVar19 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar40 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar40 = uVar18;
                  }
                  if (uVar20 < uVar19) {
                    uVar19 = uVar20;
                  }
                  if (uVar20 < uVar19) {
                    uVar19 = uVar20;
                  }
                  if (uVar19 < uVar40) {
                    uVar19 = uVar40;
                  }
                  puVar64[-3] = uVar19;
                  if (uVar63 == 7) {
                    uVar20 = puVar74[6];
                    uVar82 = 7;
                    uVar19 = puVar54[lVar71];
                    puVar54 = puVar74 + 7;
                    uVar18 = uVar19;
                    if (uVar19 < uVar20) {
                      uVar18 = uVar20;
                    }
                    if (uVar20 < uVar18) {
                      uVar18 = uVar20;
                    }
                    if (uVar20 < uVar19) {
                      uVar19 = uVar20;
                    }
                    if (uVar19 < uVar20) {
                      uVar20 = uVar19;
                    }
                    if (uVar20 < uVar18) {
                      uVar20 = uVar18;
                    }
                    puVar64[-2] = uVar20;
                  }
                  else {
                    uVar82 = 6;
                  }
                  goto LAB_001f9acc;
                }
              }
              goto LAB_001f9e18;
            }
            uVar82 = 3;
          }
LAB_001f9acc:
          uVar77 = ((uVar1 - uVar63) - 8 >> 3) + 1;
          uVar79 = uVar77 * 8;
          if (6 < uVar41 - uVar63) {
            lVar66 = (ulong)uVar63 * 2;
            lVar56 = 0;
            uVar70 = 0;
            do {
              uVar70 = uVar70 + 1;
              puVar6 = (ushort *)((long)puVar74 + lVar56 + (lVar71 + (ulong)uVar63) * 2);
              puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar66 + lVar60);
              lVar147 = lVar56 + lVar66;
              lVar56 = lVar56 + 0x10;
              puVar8 = (ushort *)((long)puVar74 + lVar147);
              puVar68 = (undefined8 *)((long)puVar65 + lVar147);
              auVar167._2_2_ = 0;
              auVar167._0_2_ = *puVar50;
              auVar167._4_2_ = puVar50[1];
              auVar167._6_2_ = 0;
              auVar167._8_2_ = puVar50[2];
              auVar167._10_2_ = 0;
              auVar167._12_2_ = puVar50[3];
              auVar167._14_2_ = 0;
              auVar152._2_2_ = 0;
              auVar152._0_2_ = puVar50[4];
              auVar152._4_2_ = puVar50[5];
              auVar152._6_2_ = 0;
              auVar152._8_2_ = puVar50[6];
              auVar152._10_2_ = 0;
              auVar152._12_2_ = puVar50[7];
              auVar152._14_2_ = 0;
              auVar173._2_2_ = 0;
              auVar173._0_2_ = *puVar8;
              auVar173._4_2_ = puVar8[1];
              auVar173._6_2_ = 0;
              auVar173._8_2_ = puVar8[2];
              auVar173._10_2_ = 0;
              auVar173._12_2_ = puVar8[3];
              auVar173._14_2_ = 0;
              auVar168._2_2_ = 0;
              auVar168._0_2_ = puVar8[4];
              auVar168._4_2_ = puVar8[5];
              auVar168._6_2_ = 0;
              auVar168._8_2_ = puVar8[6];
              auVar168._10_2_ = 0;
              auVar168._12_2_ = puVar8[7];
              auVar168._14_2_ = 0;
              auVar161._2_2_ = 0;
              auVar161._0_2_ = *puVar6;
              auVar161._4_2_ = puVar6[1];
              auVar161._6_2_ = 0;
              auVar161._8_2_ = puVar6[2];
              auVar161._10_2_ = 0;
              auVar161._12_2_ = puVar6[3];
              auVar161._14_2_ = 0;
              auVar150._2_2_ = 0;
              auVar150._0_2_ = puVar6[4];
              auVar150._4_2_ = puVar6[5];
              auVar150._6_2_ = 0;
              auVar150._8_2_ = puVar6[6];
              auVar150._10_2_ = 0;
              auVar150._12_2_ = puVar6[7];
              auVar150._14_2_ = 0;
              auVar140 = NEON_smin(auVar161,auVar167,4);
              auVar89 = NEON_smin(auVar150,auVar152,4);
              auVar166 = NEON_smax(auVar161,auVar167,4);
              auVar86 = NEON_smax(auVar150,auVar152,4);
              auVar174 = NEON_smax(auVar140,auVar173,4);
              auVar88 = NEON_smax(auVar89,auVar168,4);
              auVar140 = NEON_smin(auVar166,auVar173,4);
              auVar166 = NEON_smin(auVar86,auVar168,4);
              auVar89 = NEON_smin(auVar174,auVar173,4);
              auVar86 = NEON_smin(auVar88,auVar168,4);
              auVar89 = NEON_smax(auVar140,auVar89,4);
              auVar86 = NEON_smax(auVar166,auVar86,4);
              auVar177._0_8_ =
                   CONCAT26(auVar89._12_2_,
                            CONCAT24(auVar89._8_2_,CONCAT22(auVar89._4_2_,auVar89._0_2_)));
              auVar177._8_2_ = auVar86._0_2_;
              auVar177._10_2_ = auVar86._4_2_;
              auVar177._12_2_ = auVar86._8_2_;
              auVar177._14_2_ = auVar86._12_2_;
              puVar68[1] = auVar177._8_8_;
              *puVar68 = auVar177._0_8_;
            } while (uVar70 < uVar77);
            uVar82 = (ulong)((int)uVar82 + uVar79);
            puVar54 = puVar54 + uVar79;
            if (uVar1 - uVar63 == uVar79) goto LAB_001f6ed8;
          }
          uVar20 = *puVar54;
          uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
          uVar19 = puVar54[lVar71];
          iVar52 = (int)uVar82;
          uVar18 = uVar19;
          if (uVar19 < uVar20) {
            uVar18 = uVar20;
          }
          uVar40 = uVar20;
          if (uVar18 < uVar20) {
            uVar40 = uVar18;
          }
          if (uVar20 < uVar19) {
            uVar19 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar20 = uVar19;
          }
          if (uVar20 < uVar40) {
            uVar20 = uVar40;
          }
          *(ushort *)((long)puVar65 + uVar76) = uVar20;
          if (iVar52 + 1 < (int)uVar1) {
            uVar20 = puVar54[1];
            uVar19 = puVar54[lVar71 + 1];
            uVar18 = uVar19;
            if (uVar19 < uVar20) {
              uVar18 = uVar20;
            }
            uVar40 = uVar20;
            if (uVar18 < uVar20) {
              uVar40 = uVar18;
            }
            if (uVar20 < uVar19) {
              uVar19 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar20 = uVar19;
            }
            if (uVar20 < uVar40) {
              uVar20 = uVar40;
            }
            *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
            if (iVar52 + 2 < (int)uVar1) {
              uVar20 = puVar54[2];
              uVar19 = puVar54[lVar71 + 2];
              uVar18 = uVar19;
              if (uVar19 < uVar20) {
                uVar18 = uVar20;
              }
              uVar40 = uVar20;
              if (uVar18 < uVar20) {
                uVar40 = uVar18;
              }
              if (uVar20 < uVar19) {
                uVar19 = uVar20;
              }
              if (uVar19 < uVar20) {
                uVar20 = uVar19;
              }
              if (uVar20 < uVar40) {
                uVar20 = uVar40;
              }
              *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
              if (iVar52 + 3 < (int)uVar1) {
                uVar20 = puVar54[3];
                uVar19 = puVar54[lVar71 + 3];
                uVar18 = uVar19;
                if (uVar19 < uVar20) {
                  uVar18 = uVar20;
                }
                uVar40 = uVar20;
                if (uVar18 < uVar20) {
                  uVar40 = uVar18;
                }
                if (uVar20 < uVar19) {
                  uVar19 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar20 = uVar19;
                }
                if (uVar20 < uVar40) {
                  uVar20 = uVar40;
                }
                *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                if (iVar52 + 4 < (int)uVar1) {
                  uVar20 = puVar54[4];
                  uVar19 = puVar54[lVar71 + 4];
                  uVar18 = uVar19;
                  if (uVar19 < uVar20) {
                    uVar18 = uVar20;
                  }
                  uVar40 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar40 = uVar18;
                  }
                  if (uVar20 < uVar19) {
                    uVar19 = uVar20;
                  }
                  if (uVar19 < uVar20) {
                    uVar20 = uVar19;
                  }
                  if (uVar20 < uVar40) {
                    uVar20 = uVar40;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                  if (iVar52 + 5 < (int)uVar1) {
                    uVar20 = puVar54[5];
                    uVar19 = puVar54[lVar71 + 5];
                    uVar18 = uVar19;
                    if (uVar19 < uVar20) {
                      uVar18 = uVar20;
                    }
                    uVar40 = uVar20;
                    if (uVar18 < uVar20) {
                      uVar40 = uVar18;
                    }
                    if (uVar20 < uVar19) {
                      uVar19 = uVar20;
                    }
                    if (uVar20 < uVar19) {
                      uVar19 = uVar20;
                    }
                    if (uVar19 < uVar40) {
                      uVar19 = uVar40;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 10) = uVar19;
                    if (iVar52 + 6 < (int)uVar1) {
                      uVar19 = puVar54[6];
                      uVar20 = puVar54[lVar71 + 6];
                      uVar18 = uVar19;
                      if (uVar19 < uVar20) {
                        uVar18 = uVar20;
                      }
                      uVar40 = uVar19;
                      if (uVar18 < uVar19) {
                        uVar40 = uVar18;
                      }
                      uVar18 = uVar19;
                      if (uVar20 < uVar19) {
                        uVar18 = uVar20;
                      }
                      if (uVar18 < uVar19) {
                        uVar19 = uVar18;
                      }
                      if (uVar19 < uVar40) {
                        uVar19 = uVar40;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar19;
                    }
                  }
                }
              }
            }
          }
        }
        else {
          if ((uVar1 < 9 ||
               (puVar65 < puVar54 && puVar74 + lVar71 < puVar64 ||
               puVar65 < (ushort *)((long)puVar74 + lVar55) &&
               (ushort *)((long)puVar74 + uVar80) < puVar64)) ||
             (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
            lVar56 = 0;
            do {
              uVar40 = ((ushort *)((long)puVar74 + uVar80))[lVar56];
              uVar19 = (puVar74 + lVar71)[lVar56];
              uVar20 = puVar74[lVar56];
              uVar18 = uVar19;
              if (uVar19 < uVar40) {
                uVar18 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar18 < uVar20) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar19) {
                uVar18 = uVar19;
              }
              uVar19 = uVar20;
              if (uVar18 < uVar20) {
                uVar19 = uVar18;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              puVar65[lVar56] = uVar20;
              lVar56 = lVar56 + 1;
            } while ((int)lVar56 < (int)uVar1);
            goto LAB_001f6ed8;
          }
          uVar77 = -((uint)((ulong)puVar74 >> 1) & 7) & 7;
          if (uVar1 < uVar77) {
            uVar77 = uVar1;
          }
          puVar54 = puVar74;
          if (uVar77 == 0) {
LAB_001f9854:
            uVar82 = (ulong)uVar77;
          }
          else {
            uVar40 = *(ushort *)((long)puVar74 + uVar80);
            uVar19 = puVar74[lVar71];
            puVar54 = puVar74 + 1;
            uVar20 = *puVar74;
            uVar18 = uVar19;
            if (uVar19 < uVar40) {
              uVar18 = uVar40;
            }
            uVar21 = uVar20;
            if (uVar18 < uVar20) {
              uVar21 = uVar18;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            uVar18 = uVar20;
            if (uVar20 < uVar19) {
              uVar18 = uVar19;
            }
            uVar19 = uVar20;
            if (uVar18 < uVar20) {
              uVar19 = uVar18;
            }
            if (uVar21 < uVar20) {
              uVar20 = uVar21;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-8] = uVar20;
            if (uVar77 == 1) goto LAB_001f9854;
            uVar40 = *(ushort *)((long)puVar54 + uVar80);
            uVar19 = puVar54[lVar71];
            puVar54 = puVar74 + 2;
            uVar20 = puVar74[1];
            uVar18 = uVar19;
            if (uVar19 < uVar40) {
              uVar18 = uVar40;
            }
            uVar21 = uVar20;
            if (uVar18 < uVar20) {
              uVar21 = uVar18;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            uVar18 = uVar20;
            if (uVar20 < uVar19) {
              uVar18 = uVar19;
            }
            uVar19 = uVar20;
            if (uVar18 < uVar20) {
              uVar19 = uVar18;
            }
            if (uVar21 < uVar20) {
              uVar20 = uVar21;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-7] = uVar20;
            if (uVar77 == 2) goto LAB_001f9854;
            uVar40 = *(ushort *)((long)puVar54 + uVar80);
            uVar19 = puVar54[lVar71];
            puVar54 = puVar74 + 3;
            uVar20 = puVar74[2];
            uVar18 = uVar19;
            if (uVar19 < uVar40) {
              uVar18 = uVar40;
            }
            uVar21 = uVar20;
            if (uVar18 < uVar20) {
              uVar21 = uVar18;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            uVar18 = uVar20;
            if (uVar20 < uVar19) {
              uVar18 = uVar19;
            }
            uVar19 = uVar20;
            if (uVar18 < uVar20) {
              uVar19 = uVar18;
            }
            if (uVar21 < uVar20) {
              uVar20 = uVar21;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            puVar64[-6] = uVar20;
            if (uVar77 != 3) {
              uVar40 = *(ushort *)((long)puVar54 + uVar80);
              uVar19 = puVar54[lVar71];
              puVar54 = puVar74 + 4;
              uVar20 = puVar74[3];
              uVar18 = uVar19;
              if (uVar19 < uVar40) {
                uVar18 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar18 < uVar20) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar19) {
                uVar18 = uVar19;
              }
              uVar19 = uVar20;
              if (uVar18 < uVar20) {
                uVar19 = uVar18;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              puVar64[-5] = uVar20;
              if (uVar77 != 4) {
                uVar40 = *(ushort *)((long)puVar54 + uVar80);
                uVar19 = puVar54[lVar71];
                puVar54 = puVar74 + 5;
                uVar20 = puVar74[4];
                uVar18 = uVar19;
                if (uVar19 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar18 < uVar20) {
                  uVar21 = uVar18;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar19) {
                  uVar18 = uVar19;
                }
                uVar19 = uVar20;
                if (uVar18 < uVar20) {
                  uVar19 = uVar18;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar19) {
                  uVar20 = uVar19;
                }
                puVar64[-4] = uVar20;
                if (uVar77 != 5) {
                  uVar40 = *(ushort *)((long)puVar54 + uVar80);
                  uVar19 = puVar54[lVar71];
                  puVar54 = puVar74 + 6;
                  uVar20 = puVar74[5];
                  uVar18 = uVar19;
                  if (uVar19 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar21 = uVar18;
                  }
                  if (uVar40 < uVar19) {
                    uVar19 = uVar40;
                  }
                  uVar18 = uVar20;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar19;
                  }
                  uVar19 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar19 = uVar18;
                  }
                  if (uVar20 < uVar21) {
                    uVar21 = uVar20;
                  }
                  if (uVar21 < uVar19) {
                    uVar21 = uVar19;
                  }
                  puVar64[-3] = uVar21;
                  if (uVar77 == 7) {
                    uVar40 = *(ushort *)((long)puVar54 + uVar80);
                    uVar82 = 7;
                    uVar19 = puVar54[lVar71];
                    puVar54 = puVar74 + 7;
                    uVar20 = puVar74[6];
                    uVar18 = uVar19;
                    if (uVar19 < uVar40) {
                      uVar18 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar18 < uVar20) {
                      uVar21 = uVar18;
                    }
                    if (uVar40 < uVar19) {
                      uVar19 = uVar40;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    uVar18 = uVar20;
                    if (uVar19 < uVar20) {
                      uVar18 = uVar19;
                    }
                    if (uVar20 < uVar21) {
                      uVar21 = uVar20;
                    }
                    if (uVar21 < uVar18) {
                      uVar21 = uVar18;
                    }
                    puVar64[-2] = uVar21;
                  }
                  else {
                    uVar82 = 6;
                  }
                  goto LAB_001f94f4;
                }
              }
              goto LAB_001f9854;
            }
            uVar82 = 3;
          }
LAB_001f94f4:
          uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
          uVar79 = uVar63 * 8;
          if (6 < uVar41 - uVar77) {
            lVar66 = (ulong)uVar77 * 2;
            lVar56 = 0;
            uVar70 = 0;
            do {
              uVar70 = uVar70 + 1;
              puVar6 = (ushort *)((long)puVar74 + lVar56 + lVar66 + lVar60);
              puVar50 = (ushort *)((long)puVar74 + lVar56 + lVar66 + uVar80);
              lVar147 = lVar56 + lVar66;
              lVar56 = lVar56 + 0x10;
              puVar8 = (ushort *)((long)puVar74 + lVar147);
              puVar68 = (undefined8 *)((long)puVar65 + lVar147);
              auVar179._2_2_ = 0;
              auVar179._0_2_ = *puVar50;
              auVar179._4_2_ = puVar50[1];
              auVar179._6_2_ = 0;
              auVar179._8_2_ = puVar50[2];
              auVar179._10_2_ = 0;
              auVar179._12_2_ = puVar50[3];
              auVar179._14_2_ = 0;
              auVar187._2_2_ = 0;
              auVar187._0_2_ = puVar50[4];
              auVar187._4_2_ = puVar50[5];
              auVar187._6_2_ = 0;
              auVar187._8_2_ = puVar50[6];
              auVar187._10_2_ = 0;
              auVar187._12_2_ = puVar50[7];
              auVar187._14_2_ = 0;
              auVar182._2_2_ = 0;
              auVar182._0_2_ = *puVar8;
              auVar182._4_2_ = puVar8[1];
              auVar182._6_2_ = 0;
              auVar182._8_2_ = puVar8[2];
              auVar182._10_2_ = 0;
              auVar182._12_2_ = puVar8[3];
              auVar182._14_2_ = 0;
              auVar180._2_2_ = 0;
              auVar180._0_2_ = puVar8[4];
              auVar180._4_2_ = puVar8[5];
              auVar180._6_2_ = 0;
              auVar180._8_2_ = puVar8[6];
              auVar180._10_2_ = 0;
              auVar180._12_2_ = puVar8[7];
              auVar180._14_2_ = 0;
              auVar178._2_2_ = 0;
              auVar178._0_2_ = *puVar6;
              auVar178._4_2_ = puVar6[1];
              auVar178._6_2_ = 0;
              auVar178._8_2_ = puVar6[2];
              auVar178._10_2_ = 0;
              auVar178._12_2_ = puVar6[3];
              auVar178._14_2_ = 0;
              auVar183._2_2_ = 0;
              auVar183._0_2_ = puVar6[4];
              auVar183._4_2_ = puVar6[5];
              auVar183._6_2_ = 0;
              auVar183._8_2_ = puVar6[6];
              auVar183._10_2_ = 0;
              auVar183._12_2_ = puVar6[7];
              auVar183._14_2_ = 0;
              auVar140 = NEON_smin(auVar178,auVar179,4);
              auVar89 = NEON_smin(auVar183,auVar187,4);
              auVar166 = NEON_smax(auVar178,auVar179,4);
              auVar86 = NEON_smax(auVar183,auVar187,4);
              auVar174 = NEON_smax(auVar140,auVar182,4);
              auVar88 = NEON_smax(auVar89,auVar180,4);
              auVar140 = NEON_smin(auVar166,auVar182,4);
              auVar166 = NEON_smin(auVar86,auVar180,4);
              auVar89 = NEON_smin(auVar174,auVar182,4);
              auVar86 = NEON_smin(auVar88,auVar180,4);
              auVar89 = NEON_smax(auVar140,auVar89,4);
              auVar86 = NEON_smax(auVar166,auVar86,4);
              auVar176._0_8_ =
                   CONCAT26(auVar89._12_2_,
                            CONCAT24(auVar89._8_2_,CONCAT22(auVar89._4_2_,auVar89._0_2_)));
              auVar176._8_2_ = auVar86._0_2_;
              auVar176._10_2_ = auVar86._4_2_;
              auVar176._12_2_ = auVar86._8_2_;
              auVar176._14_2_ = auVar86._12_2_;
              puVar68[1] = auVar176._8_8_;
              *puVar68 = auVar176._0_8_;
            } while (uVar70 < uVar63);
            uVar82 = (ulong)((int)uVar82 + uVar79);
            puVar54 = puVar54 + uVar79;
            if (uVar79 == uVar1 - uVar77) goto LAB_001f6ed8;
          }
          uVar40 = *(ushort *)((long)puVar54 + uVar80);
          uVar19 = puVar54[lVar71];
          uVar76 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
          iVar52 = (int)uVar82;
          uVar20 = *puVar54;
          uVar18 = uVar19;
          if (uVar19 < uVar40) {
            uVar18 = uVar40;
          }
          uVar21 = uVar20;
          if (uVar18 < uVar20) {
            uVar21 = uVar18;
          }
          if (uVar40 < uVar19) {
            uVar19 = uVar40;
          }
          uVar18 = uVar20;
          if (uVar20 < uVar19) {
            uVar18 = uVar19;
          }
          uVar19 = uVar20;
          if (uVar18 < uVar20) {
            uVar19 = uVar18;
          }
          if (uVar21 < uVar20) {
            uVar20 = uVar21;
          }
          if (uVar20 < uVar19) {
            uVar20 = uVar19;
          }
          *(ushort *)((long)puVar65 + uVar76) = uVar20;
          if (iVar52 + 1 < (int)uVar1) {
            uVar40 = *(ushort *)((long)puVar54 + uVar80 + 2);
            uVar19 = puVar54[lVar71 + 1];
            uVar20 = puVar54[1];
            uVar18 = uVar19;
            if (uVar19 < uVar40) {
              uVar18 = uVar40;
            }
            uVar21 = uVar20;
            if (uVar18 < uVar20) {
              uVar21 = uVar18;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            uVar18 = uVar20;
            if (uVar20 < uVar19) {
              uVar18 = uVar19;
            }
            uVar19 = uVar20;
            if (uVar18 < uVar20) {
              uVar19 = uVar18;
            }
            if (uVar21 < uVar20) {
              uVar20 = uVar21;
            }
            if (uVar20 < uVar19) {
              uVar20 = uVar19;
            }
            *(ushort *)((long)puVar65 + uVar76 + 2) = uVar20;
            if (iVar52 + 2 < (int)uVar1) {
              uVar40 = *(ushort *)((long)puVar54 + uVar80 + 4);
              uVar19 = puVar54[lVar71 + 2];
              uVar20 = puVar54[2];
              uVar18 = uVar19;
              if (uVar19 < uVar40) {
                uVar18 = uVar40;
              }
              uVar21 = uVar20;
              if (uVar18 < uVar20) {
                uVar21 = uVar18;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              uVar18 = uVar20;
              if (uVar20 < uVar19) {
                uVar18 = uVar19;
              }
              uVar19 = uVar20;
              if (uVar18 < uVar20) {
                uVar19 = uVar18;
              }
              if (uVar21 < uVar20) {
                uVar20 = uVar21;
              }
              if (uVar20 < uVar19) {
                uVar20 = uVar19;
              }
              *(ushort *)((long)puVar65 + uVar76 + 4) = uVar20;
              if (iVar52 + 3 < (int)uVar1) {
                uVar40 = *(ushort *)((long)puVar54 + uVar80 + 6);
                uVar19 = puVar54[lVar71 + 3];
                uVar20 = puVar54[3];
                uVar18 = uVar19;
                if (uVar19 < uVar40) {
                  uVar18 = uVar40;
                }
                uVar21 = uVar20;
                if (uVar18 < uVar20) {
                  uVar21 = uVar18;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                uVar18 = uVar20;
                if (uVar20 < uVar19) {
                  uVar18 = uVar19;
                }
                uVar19 = uVar20;
                if (uVar18 < uVar20) {
                  uVar19 = uVar18;
                }
                if (uVar21 < uVar20) {
                  uVar20 = uVar21;
                }
                if (uVar20 < uVar19) {
                  uVar20 = uVar19;
                }
                *(ushort *)((long)puVar65 + uVar76 + 6) = uVar20;
                if (iVar52 + 4 < (int)uVar1) {
                  uVar40 = *(ushort *)((long)puVar54 + uVar80 + 8);
                  uVar19 = puVar54[lVar71 + 4];
                  uVar20 = puVar54[4];
                  uVar18 = uVar19;
                  if (uVar19 < uVar40) {
                    uVar18 = uVar40;
                  }
                  uVar21 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar21 = uVar18;
                  }
                  if (uVar40 < uVar19) {
                    uVar19 = uVar40;
                  }
                  uVar18 = uVar20;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar19;
                  }
                  uVar19 = uVar20;
                  if (uVar18 < uVar20) {
                    uVar19 = uVar18;
                  }
                  if (uVar21 < uVar20) {
                    uVar20 = uVar21;
                  }
                  if (uVar20 < uVar19) {
                    uVar20 = uVar19;
                  }
                  *(ushort *)((long)puVar65 + uVar76 + 8) = uVar20;
                  if (iVar52 + 5 < (int)uVar1) {
                    uVar40 = *(ushort *)((long)puVar54 + uVar80 + 10);
                    uVar19 = puVar54[lVar71 + 5];
                    uVar20 = puVar54[5];
                    uVar18 = uVar19;
                    if (uVar19 < uVar40) {
                      uVar18 = uVar40;
                    }
                    uVar21 = uVar20;
                    if (uVar18 < uVar20) {
                      uVar21 = uVar18;
                    }
                    if (uVar40 < uVar19) {
                      uVar19 = uVar40;
                    }
                    uVar18 = uVar20;
                    if (uVar20 < uVar19) {
                      uVar18 = uVar19;
                    }
                    uVar19 = uVar20;
                    if (uVar18 < uVar20) {
                      uVar19 = uVar18;
                    }
                    if (uVar20 < uVar21) {
                      uVar21 = uVar20;
                    }
                    if (uVar21 < uVar19) {
                      uVar21 = uVar19;
                    }
                    *(ushort *)((long)puVar65 + uVar76 + 10) = uVar21;
                    if (iVar52 + 6 < (int)uVar1) {
                      uVar18 = puVar54[lVar71 + 6];
                      uVar40 = *(ushort *)((long)puVar54 + uVar80 + 0xc);
                      uVar20 = puVar54[6];
                      uVar19 = uVar18;
                      if (uVar18 < uVar40) {
                        uVar19 = uVar40;
                      }
                      if (uVar20 < uVar19) {
                        uVar19 = uVar20;
                      }
                      if (uVar40 < uVar18) {
                        uVar18 = uVar40;
                      }
                      if (uVar18 < uVar20) {
                        uVar18 = uVar20;
                      }
                      if (uVar20 < uVar18) {
                        uVar18 = uVar20;
                      }
                      if (uVar20 < uVar19) {
                        uVar19 = uVar20;
                      }
                      if (uVar19 < uVar18) {
                        uVar19 = uVar18;
                      }
                      *(ushort *)((long)puVar65 + uVar76 + 0xc) = uVar19;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001f6ed8:
      iVar69 = iVar69 + 1;
      puVar74 = (ushort *)
                ((long)puVar74 +
                (-(uVar67 >> 0x1f) & 0xfffffffe00000000 | uVar67 << 1) + ((long)(int)uVar41 + 1) * 2
                );
      puVar64 = puVar64 + (int)uVar83;
      if (iVar69 == local_34) {
        return;
      }
    } while( true );
  }
  if (iVar69 == 1) {
    iVar58 = local_34 + 1;
    if (local_34 != 1) {
      iVar69 = local_30 - uVar1;
      goto LAB_001f5f7c;
    }
    iVar58 = 2;
  }
  else {
    if (local_34 != 1) {
      uVar41 = iVar69 * uVar1;
      if (local_34 < 1) {
        return;
      }
      lVar59 = (ulong)uVar1 * 2;
      lVar55 = (ulong)uVar1 * -2;
      iVar69 = 0;
      iVar58 = (uVar41 - 8) - uVar1;
      puVar64 = puVar74;
LAB_001f4d54:
      iVar61 = iVar69 + -1;
      iVar69 = iVar69 + 1;
      if (iVar61 < 0) {
        iVar61 = 0;
      }
      uVar80 = 0;
      iVar52 = iVar69;
      if (local_34 + -1 < iVar69) {
        iVar52 = local_34 + -1;
      }
      uVar83 = uVar1;
      if (cVar48 == '\0') {
        uVar83 = uVar41;
      }
      iVar61 = local_30 * iVar61;
      iVar52 = local_30 * iVar52;
      do {
        if ((int)uVar83 <= (int)uVar80) {
          do {
            if (uVar83 == uVar41) {
              local_90 = local_90 +
                         (-(uVar67 >> 0x20 & 1) & 0xfffffffe00000000 | (uVar81 & 0xffffffff) << 1);
              puVar64 = puVar64 + (int)local_30;
              if (iVar69 == local_34) {
                return;
              }
              goto LAB_001f4d54;
            }
            if ((int)uVar80 <= iVar58) {
              uVar82 = -(uVar80 >> 0x1f) & 0xfffffffe00000000 | uVar80 << 1;
              pauVar57 = (undefined1 (*) [16])((long)puVar74 + uVar82 + (long)iVar61 * 2);
              pauVar51 = (undefined1 (*) [16])((long)puVar64 + uVar82);
              pauVar49 = (undefined1 (*) [16])((long)puVar74 + uVar82 + (long)iVar52 * 2);
              puVar68 = (undefined8 *)(local_90 + uVar82);
              do {
                puVar45 = *pauVar49;
                puVar46 = *pauVar57;
                auVar86 = *pauVar49;
                pauVar3 = (undefined1 (*) [16])((long)pauVar51 + lVar55);
                pauVar4 = (undefined1 (*) [16])((long)pauVar49 + lVar55);
                pauVar5 = (undefined1 (*) [16])((long)pauVar57 + lVar55);
                auVar166 = *pauVar57;
                uVar83 = (int)uVar80 + 8;
                uVar80 = (ulong)uVar83;
                pauVar57 = pauVar57 + 1;
                auVar84 = NEON_umin(*pauVar51,*(undefined1 (*) [16])(*pauVar51 + lVar59),2);
                auVar85 = NEON_umin(auVar86,*(undefined1 (*) [16])(puVar45 + lVar59),2);
                auVar89 = NEON_umax(*(undefined1 (*) [16])(*pauVar51 + lVar59),*pauVar51,2);
                pauVar51 = pauVar51 + 1;
                auVar103 = NEON_umin(auVar166,*(undefined1 (*) [16])(puVar46 + lVar59),2);
                pauVar49 = pauVar49 + 1;
                auVar140 = NEON_umax(*(undefined1 (*) [16])(puVar45 + lVar59),auVar86,2);
                auVar88 = NEON_umax(auVar85,*pauVar4,2);
                auVar86 = NEON_umax(auVar84,*pauVar3,2);
                auVar166 = NEON_umax(*(undefined1 (*) [16])(puVar46 + lVar59),auVar166,2);
                auVar87 = NEON_umax(auVar103,*pauVar5,2);
                auVar174 = NEON_umin(auVar88,auVar140,2);
                auVar96 = NEON_umin(auVar86,auVar89,2);
                auVar140 = NEON_umax(auVar140,auVar88,2);
                auVar89 = NEON_umax(auVar89,auVar86,2);
                auVar86 = NEON_umin(auVar87,auVar166,2);
                auVar88 = NEON_umin(auVar96,auVar174,2);
                auVar166 = NEON_umax(auVar166,auVar87,2);
                auVar89 = NEON_umin(auVar89,auVar140,2);
                auVar87 = NEON_umin(*pauVar5,auVar103,2);
                auVar140 = NEON_umax(auVar88,auVar86,2);
                auVar88 = NEON_umin(*pauVar3,auVar84,2);
                auVar174 = NEON_umax(auVar174,auVar96,2);
                auVar86 = NEON_umin(auVar166,auVar89,2);
                auVar89 = NEON_umin(*pauVar4,auVar85,2);
                auVar88 = NEON_umax(auVar88,auVar87,2);
                auVar166 = NEON_umin(auVar140,auVar174,2);
                auVar140 = NEON_umax(auVar89,auVar88,2);
                auVar89 = NEON_umin(auVar166,auVar86,2);
                auVar86 = NEON_umax(auVar86,auVar166,2);
                auVar166 = NEON_umax(auVar89,auVar140,2);
                auVar86 = NEON_umin(auVar166,auVar86,2);
                puVar68[1] = auVar86._8_8_;
                *puVar68 = auVar86._0_8_;
                puVar68 = puVar68 + 2;
              } while ((int)uVar83 <= iVar58);
            }
            uVar83 = uVar41;
          } while ((int)uVar41 <= (int)uVar80);
        }
        uVar63 = (uint)uVar80;
        uVar77 = uVar63 - uVar1;
        if ((int)uVar63 < (int)uVar1) {
          uVar77 = uVar63;
        }
        uVar82 = -(uVar80 >> 0x1f) & 0xfffffffe00000000 | uVar80 << 1;
        uVar79 = uVar63 + uVar1;
        if ((int)(uVar41 - uVar1) <= (int)uVar63) {
          uVar79 = uVar63;
        }
        uVar53 = -(ulong)(uVar77 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar77 << 1;
        uVar76 = -(ulong)(uVar79 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar79 << 1;
        uVar80 = (ulong)(uVar63 + 1);
        uVar21 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar61 * 2);
        uVar22 = *(ushort *)((long)puVar64 + uVar82);
        uVar18 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar61 * 2);
        uVar19 = *(ushort *)((long)puVar64 + uVar76);
        uVar20 = *(ushort *)((long)puVar74 + uVar76 + (long)iVar52 * 2);
        uVar40 = uVar18;
        if (uVar21 < uVar18) {
          uVar40 = uVar21;
        }
        if (uVar18 < uVar21) {
          uVar18 = uVar21;
        }
        uVar23 = *(ushort *)((long)puVar74 + uVar82 + (long)iVar52 * 2);
        uVar24 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar61 * 2);
        uVar21 = uVar19;
        if (uVar22 < uVar19) {
          uVar21 = uVar22;
        }
        if (uVar19 < uVar22) {
          uVar19 = uVar22;
        }
        uVar22 = uVar20;
        if (uVar23 < uVar20) {
          uVar22 = uVar23;
        }
        uVar25 = *(ushort *)((long)puVar64 + uVar53);
        uVar27 = *(ushort *)((long)puVar74 + uVar53 + (long)iVar52 * 2);
        if (uVar20 < uVar23) {
          uVar20 = uVar23;
        }
        uVar23 = uVar40;
        if (uVar40 < uVar24) {
          uVar23 = uVar24;
        }
        uVar26 = uVar21;
        if (uVar25 < uVar21) {
          uVar26 = uVar25;
        }
        if (uVar21 < uVar25) {
          uVar21 = uVar25;
        }
        uVar25 = uVar22;
        if (uVar27 < uVar22) {
          uVar25 = uVar27;
        }
        if (uVar22 < uVar27) {
          uVar22 = uVar27;
        }
        uVar27 = uVar21;
        if (uVar19 < uVar21) {
          uVar27 = uVar19;
        }
        uVar29 = uVar22;
        if (uVar20 < uVar22) {
          uVar29 = uVar20;
        }
        if (uVar21 < uVar19) {
          uVar21 = uVar19;
        }
        uVar19 = uVar23;
        if (uVar23 < uVar18) {
          uVar19 = uVar18;
        }
        if (uVar19 < uVar21) {
          uVar21 = uVar19;
        }
        uVar19 = uVar29;
        if (uVar27 < uVar29) {
          uVar19 = uVar27;
        }
        if (uVar29 < uVar27) {
          uVar29 = uVar27;
        }
        if (uVar18 < uVar23) {
          uVar23 = uVar18;
        }
        if (uVar19 < uVar23) {
          uVar19 = uVar23;
        }
        if (uVar22 < uVar20) {
          uVar22 = uVar20;
        }
        if (uVar22 < uVar21) {
          uVar21 = uVar22;
        }
        if (uVar29 < uVar19) {
          uVar19 = uVar29;
        }
        uVar18 = uVar19;
        if (uVar21 < uVar19) {
          uVar18 = uVar21;
        }
        if (uVar24 < uVar40) {
          uVar40 = uVar24;
        }
        if (uVar26 < uVar40) {
          uVar26 = uVar40;
        }
        if (uVar26 < uVar25) {
          uVar26 = uVar25;
        }
        if (uVar26 < uVar18) {
          uVar26 = uVar18;
        }
        if (uVar19 < uVar21) {
          uVar19 = uVar21;
        }
        if (uVar19 < uVar26) {
          uVar26 = uVar19;
        }
        *(ushort *)(local_90 + uVar82) = uVar26;
      } while( true );
    }
    iVar58 = iVar69 + 1;
    local_34 = iVar69;
  }
  iVar69 = 0;
  uVar83 = uVar1;
  local_30 = uVar1;
LAB_001f5f7c:
  if (0 < local_34) {
    iVar61 = 0;
    puVar64 = (ushort *)(local_90 + 0x10);
    do {
      puVar65 = puVar64 + -8;
      uVar67 = -(ulong)(-local_30 >> 0x1f) & 0xfffffffe00000000 | (ulong)-local_30 << 1;
      if (iVar61 < 1) {
        uVar67 = 0;
      }
      uVar80 = -(ulong)(local_30 >> 0x1f) & 0xfffffffe00000000 | (ulong)local_30 << 1;
      if (iVar58 + -2 <= iVar61) {
        uVar80 = 0;
      }
      puVar54 = (ushort *)((long)puVar74 + uVar67);
      puVar6 = (ushort *)((long)puVar74 + uVar80);
      if ((uVar1 < 10 ||
           (puVar65 < (ushort *)((long)puVar74 + uVar67 + 0x10) && puVar54 < puVar64 ||
           puVar65 < (ushort *)((long)puVar74 + uVar80 + 0x10) && puVar6 < puVar64)) ||
         (puVar65 < puVar74 + 8 && puVar74 < puVar64)) {
        lVar55 = 0;
        do {
          uVar20 = puVar54[lVar55];
          uVar19 = puVar74[lVar55];
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (puVar6[lVar55] < uVar19) {
            uVar19 = puVar6[lVar55];
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar65[lVar55] = uVar19;
          lVar55 = lVar55 + 1;
        } while ((int)lVar55 < (int)uVar1);
      }
      else {
        uVar77 = -((uint)((ulong)puVar54 >> 1) & 7) & 7;
        if (uVar1 < uVar77) {
          uVar77 = uVar1;
        }
        puVar50 = puVar74;
        if (uVar77 == 0) {
LAB_001f6f00:
          uVar81 = (ulong)uVar77;
        }
        else {
          uVar19 = *puVar54;
          puVar50 = puVar74 + 1;
          uVar20 = *puVar74;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar6 < uVar19) {
            uVar19 = *puVar6;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-8] = uVar19;
          if (uVar77 == 1) goto LAB_001f6f00;
          uVar19 = *(ushort *)((long)puVar50 + uVar67);
          uVar20 = puVar74[1];
          puVar54 = (ushort *)((long)puVar50 + uVar80);
          puVar50 = puVar74 + 2;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar54 < uVar19) {
            uVar19 = *puVar54;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-7] = uVar19;
          if (uVar77 == 2) goto LAB_001f6f00;
          uVar19 = *(ushort *)((long)puVar50 + uVar67);
          uVar20 = puVar74[2];
          puVar54 = (ushort *)((long)puVar50 + uVar80);
          puVar50 = puVar74 + 3;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar54 < uVar19) {
            uVar19 = *puVar54;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-6] = uVar19;
          if (uVar77 == 3) goto LAB_001f6f00;
          uVar19 = *(ushort *)((long)puVar50 + uVar67);
          uVar20 = puVar74[3];
          puVar54 = (ushort *)((long)puVar50 + uVar80);
          puVar50 = puVar74 + 4;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar54 < uVar19) {
            uVar19 = *puVar54;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-5] = uVar19;
          if (uVar77 == 4) goto LAB_001f6f00;
          uVar19 = *(ushort *)((long)puVar50 + uVar67);
          uVar20 = puVar74[4];
          puVar54 = (ushort *)((long)puVar50 + uVar80);
          puVar50 = puVar74 + 5;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar54 < uVar19) {
            uVar19 = *puVar54;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-4] = uVar19;
          if (uVar77 == 5) goto LAB_001f6f00;
          uVar19 = *(ushort *)((long)puVar50 + uVar67);
          uVar20 = puVar74[5];
          puVar54 = (ushort *)((long)puVar50 + uVar80);
          puVar50 = puVar74 + 6;
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (*puVar54 < uVar19) {
            uVar19 = *puVar54;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          puVar64[-3] = uVar19;
          if (uVar77 == 7) {
            uVar19 = *(ushort *)((long)puVar50 + uVar67);
            uVar81 = 7;
            uVar20 = puVar74[6];
            puVar54 = (ushort *)((long)puVar50 + uVar80);
            puVar50 = puVar74 + 7;
            uVar18 = uVar19;
            if (uVar20 < uVar19) {
              uVar18 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (*puVar54 < uVar19) {
              uVar19 = *puVar54;
            }
            if (uVar19 < uVar18) {
              uVar19 = uVar18;
            }
            puVar64[-2] = uVar19;
          }
          else {
            uVar81 = 6;
          }
        }
        uVar63 = ((uVar1 - uVar77) - 8 >> 3) + 1;
        uVar79 = uVar63 * 8;
        if (6 < uVar41 - uVar77) {
          lVar59 = (ulong)uVar77 * 2;
          lVar55 = 0;
          uVar70 = 0;
          do {
            puVar54 = (ushort *)((long)puVar74 + lVar55 + lVar59);
            puVar6 = (ushort *)((long)puVar74 + lVar55 + lVar59 + uVar67);
            puVar68 = (undefined8 *)((long)puVar65 + lVar55 + lVar59);
            puVar8 = (ushort *)((long)puVar74 + lVar55 + uVar80 + lVar59);
            uVar70 = uVar70 + 1;
            lVar55 = lVar55 + 0x10;
            auVar130._2_2_ = 0;
            auVar130._0_2_ = *puVar6;
            auVar130._4_2_ = puVar6[1];
            auVar130._6_2_ = 0;
            auVar130._8_2_ = puVar6[2];
            auVar130._10_2_ = 0;
            auVar130._12_2_ = puVar6[3];
            auVar130._14_2_ = 0;
            auVar118._2_2_ = 0;
            auVar118._0_2_ = *puVar54;
            auVar118._4_2_ = puVar54[1];
            auVar118._6_2_ = 0;
            auVar118._8_2_ = puVar54[2];
            auVar118._10_2_ = 0;
            auVar118._12_2_ = puVar54[3];
            auVar118._14_2_ = 0;
            auVar112._2_2_ = 0;
            auVar112._0_2_ = puVar6[4];
            auVar112._4_2_ = puVar6[5];
            auVar112._6_2_ = 0;
            auVar112._8_2_ = puVar6[6];
            auVar112._10_2_ = 0;
            auVar112._12_2_ = puVar6[7];
            auVar112._14_2_ = 0;
            auVar90._2_2_ = 0;
            auVar90._0_2_ = puVar54[4];
            auVar90._4_2_ = puVar54[5];
            auVar90._6_2_ = 0;
            auVar90._8_2_ = puVar54[6];
            auVar90._10_2_ = 0;
            auVar90._12_2_ = puVar54[7];
            auVar90._14_2_ = 0;
            auVar104._2_2_ = 0;
            auVar104._0_2_ = *puVar8;
            auVar104._4_2_ = puVar8[1];
            auVar104._6_2_ = 0;
            auVar104._8_2_ = puVar8[2];
            auVar104._10_2_ = 0;
            auVar104._12_2_ = puVar8[3];
            auVar104._14_2_ = 0;
            auVar122._2_2_ = 0;
            auVar122._0_2_ = puVar8[4];
            auVar122._4_2_ = puVar8[5];
            auVar122._6_2_ = 0;
            auVar122._8_2_ = puVar8[6];
            auVar122._10_2_ = 0;
            auVar122._12_2_ = puVar8[7];
            auVar122._14_2_ = 0;
            auVar89 = NEON_smax(auVar118,auVar130,4);
            auVar166 = NEON_smax(auVar90,auVar112,4);
            auVar140 = NEON_smin(auVar118,auVar130,4);
            auVar86 = NEON_smin(auVar90,auVar112,4);
            auVar89 = NEON_smin(auVar89,auVar104,4);
            auVar166 = NEON_smin(auVar166,auVar122,4);
            auVar89 = NEON_smax(auVar89,auVar140,4);
            auVar86 = NEON_smax(auVar166,auVar86,4);
            auVar97._0_8_ =
                 CONCAT26(auVar89._12_2_,
                          CONCAT24(auVar89._8_2_,CONCAT22(auVar89._4_2_,auVar89._0_2_)));
            auVar97._8_2_ = auVar86._0_2_;
            auVar97._10_2_ = auVar86._4_2_;
            auVar97._12_2_ = auVar86._8_2_;
            auVar97._14_2_ = auVar86._12_2_;
            puVar68[1] = auVar97._8_8_;
            *puVar68 = auVar97._0_8_;
          } while (uVar70 < uVar63);
          uVar81 = (ulong)((int)uVar81 + uVar79);
          puVar50 = puVar50 + uVar79;
          if (uVar79 == uVar1 - uVar77) goto LAB_001f6470;
        }
        uVar19 = *(ushort *)((long)puVar50 + uVar67);
        uVar82 = -(uVar81 >> 0x1f) & 0xfffffffe00000000 | uVar81 << 1;
        uVar20 = *puVar50;
        iVar52 = (int)uVar81;
        uVar18 = uVar19;
        if (uVar20 < uVar19) {
          uVar18 = uVar20;
        }
        if (uVar19 < uVar20) {
          uVar19 = uVar20;
        }
        if (*(ushort *)((long)puVar50 + uVar80) < uVar19) {
          uVar19 = *(ushort *)((long)puVar50 + uVar80);
        }
        if (uVar19 < uVar18) {
          uVar19 = uVar18;
        }
        *(ushort *)((long)puVar65 + uVar82) = uVar19;
        if (iVar52 + 1 < (int)uVar1) {
          uVar19 = *(ushort *)((long)puVar50 + uVar67 + 2);
          uVar20 = puVar50[1];
          uVar40 = *(ushort *)((long)puVar50 + uVar80 + 2);
          uVar18 = uVar19;
          if (uVar20 < uVar19) {
            uVar18 = uVar20;
          }
          if (uVar19 < uVar20) {
            uVar19 = uVar20;
          }
          if (uVar40 < uVar19) {
            uVar19 = uVar40;
          }
          if (uVar19 < uVar18) {
            uVar19 = uVar18;
          }
          *(ushort *)((long)puVar65 + uVar82 + 2) = uVar19;
          if (iVar52 + 2 < (int)uVar1) {
            uVar19 = *(ushort *)((long)puVar50 + uVar67 + 4);
            uVar20 = puVar50[2];
            uVar40 = *(ushort *)((long)puVar50 + uVar80 + 4);
            uVar18 = uVar19;
            if (uVar20 < uVar19) {
              uVar18 = uVar20;
            }
            if (uVar19 < uVar20) {
              uVar19 = uVar20;
            }
            if (uVar40 < uVar19) {
              uVar19 = uVar40;
            }
            if (uVar19 < uVar18) {
              uVar19 = uVar18;
            }
            *(ushort *)((long)puVar65 + uVar82 + 4) = uVar19;
            if (iVar52 + 3 < (int)uVar1) {
              uVar19 = *(ushort *)((long)puVar50 + uVar67 + 6);
              uVar20 = puVar50[3];
              uVar40 = *(ushort *)((long)puVar50 + uVar80 + 6);
              uVar18 = uVar19;
              if (uVar20 < uVar19) {
                uVar18 = uVar20;
              }
              if (uVar19 < uVar20) {
                uVar19 = uVar20;
              }
              if (uVar40 < uVar19) {
                uVar19 = uVar40;
              }
              if (uVar19 < uVar18) {
                uVar19 = uVar18;
              }
              *(ushort *)((long)puVar65 + uVar82 + 6) = uVar19;
              if (iVar52 + 4 < (int)uVar1) {
                uVar19 = *(ushort *)((long)puVar50 + uVar67 + 8);
                uVar20 = puVar50[4];
                uVar40 = *(ushort *)((long)puVar50 + uVar80 + 8);
                uVar18 = uVar19;
                if (uVar20 < uVar19) {
                  uVar18 = uVar20;
                }
                if (uVar19 < uVar20) {
                  uVar19 = uVar20;
                }
                if (uVar40 < uVar19) {
                  uVar19 = uVar40;
                }
                if (uVar19 < uVar18) {
                  uVar19 = uVar18;
                }
                *(ushort *)((long)puVar65 + uVar82 + 8) = uVar19;
                if (iVar52 + 5 < (int)uVar1) {
                  uVar19 = *(ushort *)((long)puVar50 + uVar67 + 10);
                  uVar20 = puVar50[5];
                  uVar40 = *(ushort *)((long)puVar50 + uVar80 + 10);
                  uVar18 = uVar19;
                  if (uVar20 < uVar19) {
                    uVar18 = uVar20;
                  }
                  if (uVar19 < uVar20) {
                    uVar19 = uVar20;
                  }
                  if (uVar40 < uVar19) {
                    uVar19 = uVar40;
                  }
                  if (uVar19 < uVar18) {
                    uVar19 = uVar18;
                  }
                  *(ushort *)((long)puVar65 + uVar82 + 10) = uVar19;
                  if (iVar52 + 6 < (int)uVar1) {
                    uVar19 = *(ushort *)((long)puVar50 + uVar67 + 0xc);
                    uVar20 = puVar50[6];
                    uVar40 = *(ushort *)((long)puVar50 + uVar80 + 0xc);
                    uVar18 = uVar19;
                    if (uVar20 < uVar19) {
                      uVar18 = uVar20;
                    }
                    if (uVar19 < uVar20) {
                      uVar19 = uVar20;
                    }
                    if (uVar40 < uVar19) {
                      uVar19 = uVar40;
                    }
                    if (uVar19 < uVar18) {
                      uVar19 = uVar18;
                    }
                    *(ushort *)((long)puVar65 + uVar82 + 0xc) = uVar19;
                  }
                }
              }
            }
          }
        }
      }
LAB_001f6470:
      iVar61 = iVar61 + 1;
      puVar74 = puVar74 + (long)iVar69 + (long)(int)uVar41 + 1;
      puVar64 = puVar64 + (int)uVar83;
    } while (iVar61 != local_34);
  }
  return;
}


==================================================================

### FUNC 001fbfc0 (29628 bytes) name=FUN_001fbfc0

void FUN_001fbfc0(uint *param_1,long param_2,int param_3)

{
  uint uVar1;
  int iVar2;
  undefined1 (*pauVar3) [16];
  undefined1 (*pauVar4) [16];
  undefined1 (*pauVar5) [16];
  short *psVar6;
  long lVar7;
  short *psVar8;
  short *psVar9;
  long lVar10;
  short *psVar11;
  short sVar12;
  short sVar13;
  short sVar14;
  short sVar15;
  short sVar16;
  short sVar17;
  short sVar18;
  short sVar19;
  short sVar20;
  short sVar21;
  short sVar22;
  short sVar23;
  short sVar24;
  short sVar25;
  short sVar26;
  short sVar27;
  short sVar28;
  short sVar29;
  short sVar30;
  short sVar31;
  short sVar32;
  short sVar33;
  short sVar34;
  short sVar35;
  short sVar36;
  short sVar37;
  short sVar38;
  short sVar39;
  short sVar40;
  short sVar41;
  short sVar42;
  uint uVar43;
  int iVar44;
  int iVar45;
  int iVar46;
  undefined1 *puVar47;
  undefined1 *puVar48;
  bool bVar49;
  char cVar50;
  undefined1 (*pauVar51) [16];
  short *psVar52;
  undefined1 (*pauVar53) [16];
  int iVar54;
  ulong uVar55;
  short *psVar56;
  long lVar57;
  long lVar58;
  undefined1 (*pauVar59) [16];
  int iVar60;
  long lVar61;
  long lVar62;
  int iVar63;
  long lVar64;
  uint uVar65;
  short *psVar66;
  short *psVar67;
  long lVar68;
  ulong uVar69;
  undefined8 *puVar70;
  int iVar71;
  uint uVar72;
  long lVar73;
  ulong uVar74;
  long lVar75;
  short *psVar76;
  ulong uVar77;
  ulong uVar78;
  uint uVar79;
  int iVar80;
  uint uVar81;
  ulong uVar82;
  ulong uVar83;
  ulong uVar84;
  uint uVar85;
  undefined1 auVar86 [16];
  undefined1 auVar87 [16];
  undefined1 auVar88 [16];
  undefined1 auVar89 [16];
  undefined1 auVar90 [16];
  undefined1 auVar91 [16];
  undefined1 auVar92 [16];
  undefined1 auVar93 [16];
  undefined1 auVar94 [16];
  undefined1 auVar95 [16];
  undefined1 auVar96 [16];
  undefined1 auVar97 [16];
  undefined1 auVar98 [16];
  undefined1 auVar99 [16];
  undefined1 auVar100 [16];
  undefined1 auVar101 [16];
  undefined1 auVar102 [16];
  undefined1 auVar103 [16];
  undefined1 auVar104 [16];
  undefined1 auVar105 [16];
  undefined1 auVar106 [16];
  undefined1 auVar107 [16];
  undefined1 auVar108 [16];
  undefined1 auVar109 [16];
  undefined1 auVar110 [16];
  undefined1 auVar111 [16];
  undefined1 auVar112 [16];
  undefined1 auVar113 [16];
  undefined1 auVar114 [16];
  undefined1 auVar115 [16];
  undefined1 auVar116 [16];
  undefined1 auVar117 [16];
  undefined1 auVar118 [16];
  undefined1 auVar119 [16];
  undefined1 auVar120 [16];
  undefined1 auVar121 [16];
  undefined1 auVar122 [16];
  undefined1 auVar123 [16];
  undefined1 auVar124 [16];
  undefined1 auVar125 [16];
  undefined1 auVar126 [16];
  undefined1 auVar127 [16];
  undefined1 auVar128 [16];
  undefined1 auVar129 [16];
  undefined1 auVar130 [16];
  undefined1 auVar131 [16];
  undefined1 auVar132 [16];
  undefined1 auVar133 [16];
  undefined1 auVar134 [16];
  undefined1 auVar135 [16];
  undefined1 auVar136 [16];
  undefined1 auVar137 [16];
  undefined1 auVar138 [16];
  undefined1 auVar139 [16];
  undefined1 auVar140 [16];
  undefined1 auVar141 [16];
  undefined1 auVar142 [16];
  undefined1 auVar143 [16];
  undefined1 auVar144 [16];
  undefined1 auVar145 [16];
  undefined1 auVar146 [16];
  long lVar147;
  undefined1 auVar148 [16];
  long lVar149;
  undefined1 auVar150 [16];
  undefined1 auVar151 [16];
  undefined1 auVar152 [16];
  undefined1 auVar153 [16];
  undefined1 auVar154 [16];
  undefined1 auVar155 [16];
  undefined1 auVar156 [16];
  undefined1 auVar157 [16];
  undefined1 auVar158 [16];
  undefined1 auVar159 [16];
  undefined1 auVar160 [16];
  undefined1 auVar161 [16];
  undefined1 auVar162 [16];
  undefined1 auVar163 [16];
  undefined1 auVar164 [16];
  undefined1 auVar165 [16];
  undefined1 auVar166 [16];
  undefined1 auVar167 [16];
  undefined1 auVar168 [16];
  undefined1 auVar169 [16];
  undefined1 auVar170 [16];
  undefined1 auVar171 [16];
  undefined1 auVar172 [16];
  undefined1 auVar173 [16];
  undefined1 auVar174 [16];
  undefined1 auVar175 [16];
  undefined1 auVar176 [16];
  undefined1 auVar177 [16];
  undefined1 auVar178 [16];
  undefined1 auVar179 [16];
  undefined1 auVar180 [16];
  undefined1 auVar181 [16];
  undefined1 auVar182 [16];
  undefined1 auVar183 [16];
  undefined1 auVar184 [16];
  undefined1 auVar185 [16];
  undefined1 auVar186 [16];
  undefined1 auVar187 [16];
  undefined1 auVar188 [16];
  undefined1 auVar189 [16];
  long local_90;
  int local_34;
  uint local_30;
  int local_2c;
  int local_20;
  
  uVar69 = *(ulong *)(param_2 + 0x50);
  uVar43 = *param_1 >> 3 & 0x1ff;
  local_90 = *(long *)(param_2 + 0x10);
  uVar1 = uVar43 + 1;
  uVar83 = uVar69 >> 1;
  local_34 = **(int **)(param_2 + 0x40);
  uVar85 = (uint)uVar83;
  uVar82 = *(ulong *)(param_1 + 0x14);
  psVar76 = *(short **)(param_1 + 4);
  iVar71 = (*(int **)(param_2 + 0x40))[1];
  cVar50 = cv::checkHardwareSupport(3);
  local_30 = (uint)(uVar82 >> 1);
  if (cVar50 == '\0') {
    cVar50 = cv::checkHardwareSupport(100);
  }
  if (param_3 != 3) {
    if (param_3 != 5) {
      return;
    }
    if (iVar71 == 1) {
      iVar60 = local_34 + 1;
      if (local_34 != 1) {
        uVar69 = (ulong)(local_30 - uVar1);
        goto LAB_001fd85c;
      }
      iVar60 = 2;
    }
    else {
      if (local_34 != 1) {
        uVar43 = iVar71 * uVar1;
        if (local_34 < 1) {
          return;
        }
        iVar63 = local_34 + -1;
        iVar60 = uVar1 * -2;
        uVar85 = uVar1 * 2;
        iVar71 = (uVar43 - 8) + iVar60;
        local_2c = 0;
        local_20 = 1;
        psVar66 = psVar76;
LAB_001fc428:
        uVar82 = 0;
        iVar54 = local_2c + -2;
        if (iVar54 < 0) {
          iVar54 = 0;
        }
        iVar46 = local_2c + -1;
        local_2c = local_20;
        if (iVar46 < 0) {
          iVar46 = 0;
        }
        iVar44 = local_20;
        if (iVar63 < local_20) {
          iVar44 = iVar63;
        }
        iVar2 = local_20 + 1;
        iVar45 = iVar63;
        if (iVar2 < iVar63) {
          iVar45 = iVar2;
        }
        iVar54 = local_30 * iVar54;
        iVar46 = local_30 * iVar46;
        iVar44 = local_30 * iVar44;
        iVar45 = local_30 * iVar45;
        uVar79 = uVar43;
        if (cVar50 != '\0') {
          uVar79 = uVar85;
        }
LAB_001fc4a8:
        do {
          if ((int)uVar79 <= (int)uVar82) {
            do {
              if (uVar79 == uVar43) {
                bVar49 = local_20 == local_34;
                local_90 = local_90 +
                           (-(uVar69 >> 0x20 & 1) & 0xfffffffe00000000 | (uVar83 & 0xffffffff) << 1)
                ;
                psVar66 = psVar66 + (int)local_30;
                local_20 = iVar2;
                if (bVar49) {
                  return;
                }
                goto LAB_001fc428;
              }
              iVar80 = (int)uVar82;
              uVar79 = uVar43;
              if (iVar71 < iVar80) goto LAB_001fc4a8;
              lVar61 = (long)iVar80;
              lVar57 = 0;
              do {
                uVar65 = (int)uVar82 + 8;
                uVar82 = (ulong)uVar65;
                lVar64 = lVar57 + (lVar61 - (ulong)uVar85) * 2;
                lVar73 = lVar57 + (lVar61 - (int)uVar1) * 2;
                auVar88 = *(undefined1 (*) [16])((long)psVar76 + lVar64 + (long)iVar46 * 2);
                lVar75 = lVar57 + ((int)uVar1 + lVar61) * 2;
                lVar58 = lVar57 + ((ulong)uVar85 + lVar61) * 2;
                lVar62 = lVar57 + (long)iVar80 * 2;
                auVar166 = *(undefined1 (*) [16])((long)psVar76 + lVar75 + (long)iVar46 * 2);
                auVar91 = *(undefined1 (*) [16])((long)psVar76 + lVar62 + (long)iVar46 * 2);
                auVar140 = *(undefined1 (*) [16])((long)psVar76 + lVar58 + (long)iVar54 * 2);
                auVar90 = *(undefined1 (*) [16])((long)psVar76 + lVar62 + (long)iVar44 * 2);
                auVar167 = NEON_smax(auVar166,auVar91,2);
                auVar174 = *(undefined1 (*) [16])((long)psVar76 + lVar62 + (long)iVar54 * 2);
                auVar89 = *(undefined1 (*) [16])((long)psVar76 + lVar73 + (long)iVar54 * 2);
                auVar105 = NEON_smin(auVar91,auVar166,2);
                auVar166 = *(undefined1 (*) [16])((long)psVar76 + lVar75 + (long)iVar54 * 2);
                auVar181 = NEON_smin(auVar140,auVar88,2);
                auVar187 = *(undefined1 (*) [16])((long)psVar76 + lVar64 + (long)iVar44 * 2);
                auVar91 = *(undefined1 (*) [16])((long)psVar76 + lVar64 + (long)iVar54 * 2);
                auVar87 = *(undefined1 (*) [16])((long)psVar76 + lVar73 + (long)iVar44 * 2);
                auVar161 = NEON_smax(auVar88,auVar140,2);
                auVar88 = *(undefined1 (*) [16])((long)psVar76 + lVar62 + (long)iVar45 * 2);
                auVar140 = *(undefined1 (*) [16])((long)psVar76 + lVar73 + (long)iVar45 * 2);
                auVar183 = NEON_smax(auVar181,auVar166,2);
                auVar86 = NEON_smin(auVar87,auVar90,2);
                auVar98 = *(undefined1 (*) [16])((long)psVar76 + lVar58 + (long)iVar45 * 2);
                auVar148 = NEON_smax(auVar90,auVar87,2);
                auVar152 = NEON_smin(auVar140,auVar88,2);
                auVar150 = NEON_smax(auVar86,auVar187,2);
                auVar131 = NEON_smax(auVar88,auVar140,2);
                auVar173 = NEON_smax(auVar174,auVar89,2);
                auVar88 = *(undefined1 (*) [16])((long)psVar76 + lVar58 + (long)iVar46 * 2);
                auVar175 = NEON_smin(*(undefined1 (*) [16])((long)psVar66 + lVar64),
                                     *(undefined1 (*) [16])((long)psVar66 + lVar73),2);
                auVar107 = NEON_smin(auVar89,auVar174,2);
                auVar140 = *(undefined1 (*) [16])((long)psVar76 + lVar58 + (long)iVar44 * 2);
                auVar90 = *(undefined1 (*) [16])((long)psVar76 + lVar75 + (long)iVar45 * 2);
                auVar113 = NEON_smin(*(undefined1 (*) [16])((long)psVar66 + lVar75),
                                     *(undefined1 (*) [16])((long)psVar66 + lVar58),2);
                auVar174 = *(undefined1 (*) [16])((long)psVar76 + lVar64 + (long)iVar45 * 2);
                auVar182 = NEON_smin(auVar166,auVar181,2);
                auVar166 = *(undefined1 (*) [16])((long)psVar76 + lVar75 + (long)iVar44 * 2);
                auVar87 = NEON_smax(auVar161,auVar183,2);
                lVar57 = lVar57 + 0x10;
                auVar139 = NEON_smax(*(undefined1 (*) [16])((long)psVar66 + lVar73),
                                     *(undefined1 (*) [16])((long)psVar66 + lVar64),2);
                auVar151 = NEON_smax(*(undefined1 (*) [16])((long)psVar66 + lVar58),
                                     *(undefined1 (*) [16])((long)psVar66 + lVar75),2);
                auVar89 = *(undefined1 (*) [16])((long)psVar76 + lVar73 + (long)iVar46 * 2);
                auVar177 = NEON_smin(auVar90,auVar98,2);
                auVar176 = NEON_smin(auVar140,auVar174,2);
                auVar178 = NEON_smax(auVar175,auVar88,2);
                auVar181 = NEON_smax(auVar113,*(undefined1 (*) [16])((long)psVar66 + lVar62),2);
                auVar185 = NEON_smin(auVar88,auVar175,2);
                auVar88 = NEON_smin(*(undefined1 (*) [16])((long)psVar66 + lVar62),auVar113,2);
                auVar175 = NEON_smax(auVar105,auVar89,2);
                auVar105 = NEON_smin(auVar89,auVar105,2);
                auVar186 = NEON_smax(auVar177,auVar152,2);
                auVar89 = NEON_smax(auVar151,auVar181,2);
                auVar151 = NEON_smin(auVar181,auVar151,2);
                auVar181 = NEON_smax(auVar167,auVar175,2);
                auVar113 = NEON_smin(auVar166,auVar176,2);
                auVar177 = NEON_smin(auVar152,auVar177,2);
                auVar98 = NEON_smax(auVar98,auVar90,2);
                auVar175 = NEON_smin(auVar175,auVar167,2);
                auVar168 = NEON_smax(auVar185,auVar105,2);
                auVar152 = NEON_smax(auVar107,auVar91,2);
                auVar90 = NEON_smin(auVar187,auVar86,2);
                auVar167 = NEON_smin(auVar131,auVar98,2);
                auVar161 = NEON_smin(auVar183,auVar161,2);
                auVar86 = NEON_smin(auVar91,auVar107,2);
                auVar91 = NEON_smax(auVar148,auVar150,2);
                auVar150 = NEON_smin(auVar150,auVar148,2);
                auVar180 = NEON_smax(auVar173,auVar152,2);
                auVar98 = NEON_smax(auVar98,auVar131,2);
                auVar107 = NEON_smin(auVar152,auVar173,2);
                auVar131 = NEON_smax(auVar177,auVar113,2);
                auVar187 = NEON_smax(auVar139,auVar178,2);
                auVar184 = NEON_smax(auVar90,auVar88,2);
                auVar174 = NEON_smax(auVar174,auVar140,2);
                auVar188 = NEON_smax(auVar182,auVar86,2);
                auVar183 = NEON_smin(auVar180,auVar87,2);
                auVar173 = NEON_smin(auVar89,auVar91,2);
                auVar140 = NEON_smin(auVar178,auVar139,2);
                auVar166 = NEON_smax(auVar176,auVar166,2);
                auVar139 = NEON_smin(auVar181,auVar187,2);
                auVar152 = NEON_smin(auVar107,auVar161,2);
                auVar179 = NEON_smax(auVar161,auVar107,2);
                auVar176 = NEON_smin(auVar166,auVar174,2);
                auVar161 = NEON_smin(auVar173,auVar184,2);
                auVar178 = NEON_smin(auVar167,auVar186,2);
                auVar148 = NEON_smin(auVar183,auVar188,2);
                auVar174 = NEON_smax(auVar174,auVar166,2);
                auVar189 = NEON_smax(auVar188,auVar183,2);
                auVar167 = NEON_smax(auVar186,auVar167,2);
                auVar183 = NEON_smin(auVar139,auVar168,2);
                auVar188 = NEON_smax(auVar168,auVar139,2);
                auVar139 = NEON_smin(auVar175,auVar140,2);
                auVar107 = NEON_smax(auVar140,auVar175,2);
                auVar175 = NEON_smax(auVar184,auVar173,2);
                auVar184 = NEON_smin(auVar151,auVar150,2);
                auVar151 = NEON_smax(auVar150,auVar151,2);
                auVar150 = NEON_smin(auVar174,auVar167,2);
                auVar166 = NEON_smax(auVar178,auVar176,2);
                auVar178 = NEON_smin(auVar176,auVar178,2);
                auVar140 = NEON_smin(auVar86,auVar182,2);
                auVar176 = NEON_smin(auVar166,auVar98,2);
                auVar166 = NEON_smax(auVar98,auVar166,2);
                auVar168 = NEON_smin(auVar150,auVar131,2);
                auVar186 = NEON_smax(auVar131,auVar150,2);
                auVar150 = NEON_smax(auVar167,auVar174,2);
                auVar167 = NEON_smax(auVar179,auVar189,2);
                auVar98 = NEON_smax(auVar187,auVar181,2);
                auVar174 = NEON_smin(auVar113,auVar177,2);
                auVar173 = NEON_smax(auVar168,auVar178,2);
                auVar177 = NEON_smax(auVar87,auVar180,2);
                auVar180 = NEON_smin(auVar105,auVar185,2);
                auVar87 = NEON_smax(auVar107,auVar188,2);
                auVar86 = NEON_smin(auVar188,auVar107,2);
                auVar131 = NEON_smin(auVar152,auVar148,2);
                auVar185 = NEON_smin(auVar150,auVar166,2);
                auVar181 = NEON_smax(auVar148,auVar152,2);
                auVar148 = NEON_smax(auVar166,auVar150,2);
                auVar105 = NEON_smax(auVar180,auVar140,2);
                auVar150 = NEON_smin(auVar178,auVar168,2);
                auVar187 = NEON_smin(auVar88,auVar90,2);
                auVar168 = NEON_smax(auVar176,auVar186,2);
                auVar182 = NEON_smin(auVar139,auVar183,2);
                auVar107 = NEON_smax(auVar183,auVar139,2);
                auVar89 = NEON_smax(auVar91,auVar89,2);
                auVar88 = NEON_smin(auVar184,auVar161,2);
                auVar188 = NEON_smax(auVar182,auVar131,2);
                auVar152 = NEON_smin(auVar177,auVar98,2);
                auVar178 = NEON_smin(auVar89,auVar185,2);
                auVar166 = NEON_smax(auVar161,auVar184,2);
                auVar139 = NEON_smax(auVar151,auVar175,2);
                auVar113 = NEON_smin(auVar175,auVar151,2);
                auVar161 = NEON_smin(auVar140,auVar180,2);
                auVar175 = NEON_smax(auVar173,auVar166,2);
                auVar91 = NEON_smin(auVar189,auVar179,2);
                auVar140 = NEON_smin(auVar167,auVar87,2);
                auVar90 = NEON_smin(auVar186,auVar176,2);
                auVar183 = NEON_smin(auVar166,auVar173,2);
                auVar179 = NEON_smax(auVar174,auVar187,2);
                auVar180 = NEON_smin(auVar140,auVar105,2);
                auVar176 = NEON_smax(auVar105,auVar140,2);
                auVar189 = NEON_smin(auVar181,auVar107,2);
                auVar184 = NEON_smin(auVar139,auVar168,2);
                auVar105 = NEON_smax(auVar107,auVar181,2);
                auVar181 = NEON_smin(auVar152,auVar188,2);
                auVar173 = NEON_smax(auVar188,auVar152,2);
                auVar186 = NEON_smin(auVar91,auVar86,2);
                auVar151 = NEON_smax(auVar86,auVar91,2);
                auVar140 = NEON_smax(auVar150,auVar88,2);
                auVar152 = NEON_smax(auVar98,auVar177,2);
                auVar91 = NEON_smin(auVar187,auVar174,2);
                auVar166 = NEON_smin(auVar178,auVar140,2);
                auVar98 = NEON_smax(auVar91,auVar161,2);
                auVar161 = NEON_smax(auVar168,auVar139,2);
                auVar91 = NEON_smax(auVar90,auVar113,2);
                auVar107 = NEON_smin(auVar184,auVar179,2);
                auVar179 = NEON_smax(auVar179,auVar184,2);
                auVar177 = NEON_smin(auVar175,auVar148,2);
                auVar148 = NEON_smax(auVar148,auVar175,2);
                auVar139 = NEON_smax(auVar140,auVar178,2);
                auVar168 = NEON_smin(auVar113,auVar90,2);
                auVar113 = NEON_smin(auVar131,auVar182,2);
                auVar86 = NEON_smin(auVar186,auVar181,2);
                auVar174 = NEON_smax(auVar105,auVar176,2);
                auVar140 = NEON_smax(auVar87,auVar167,2);
                auVar187 = NEON_smax(auVar177,auVar179,2);
                auVar177 = NEON_smin(auVar179,auVar177,2);
                auVar90 = NEON_smin(auVar189,auVar180,2);
                auVar175 = NEON_smin(auVar88,auVar150,2);
                auVar182 = NEON_smax(auVar180,auVar189,2);
                auVar178 = NEON_smin(auVar173,auVar151,2);
                auVar88 = NEON_smax(auVar151,auVar173,2);
                auVar167 = NEON_smin(auVar183,auVar107,2);
                auVar151 = NEON_smax(auVar107,auVar183,2);
                auVar87 = NEON_smin(auVar161,auVar148,2);
                auVar150 = NEON_smax(auVar148,auVar161,2);
                auVar148 = NEON_smax(auVar185,auVar89,2);
                auVar179 = NEON_smin(auVar139,auVar91,2);
                auVar107 = NEON_smax(auVar181,auVar186,2);
                auVar131 = NEON_smax(auVar91,auVar139,2);
                auVar180 = NEON_smin(auVar113,auVar90,2);
                auVar181 = NEON_smin(auVar176,auVar105,2);
                auVar176 = NEON_smax(auVar90,auVar113,2);
                auVar183 = NEON_smin(auVar86,auVar182,2);
                auVar91 = NEON_smin(auVar168,auVar166,2);
                auVar90 = NEON_smin(auVar148,auVar150,2);
                auVar173 = NEON_smax(auVar166,auVar168,2);
                auVar105 = NEON_smax(auVar140,auVar88,2);
                auVar139 = NEON_smin(auVar88,auVar140,2);
                auVar89 = NEON_smin(auVar175,auVar167,2);
                auVar166 = NEON_smin(auVar131,auVar87,2);
                auVar182 = NEON_smax(auVar182,auVar86,2);
                auVar168 = NEON_smax(auVar174,auVar178,2);
                auVar140 = NEON_smax(auVar151,auVar91,2);
                auVar113 = NEON_smax(auVar167,auVar175,2);
                auVar87 = NEON_smax(auVar87,auVar131,2);
                auVar161 = NEON_smin(auVar91,auVar151,2);
                auVar167 = NEON_smax(auVar187,auVar179,2);
                auVar88 = NEON_smin(auVar107,auVar181,2);
                auVar175 = NEON_smin(auVar178,auVar174,2);
                auVar86 = NEON_smax(auVar181,auVar107,2);
                auVar181 = NEON_smin(auVar173,auVar177,2);
                auVar151 = NEON_smax(auVar150,auVar148,2);
                auVar91 = NEON_smax(auVar140,auVar182,2);
                auVar87 = NEON_smin(auVar105,auVar87,2);
                auVar131 = NEON_smin(auVar139,auVar166,2);
                auVar166 = NEON_smin(auVar152,auVar90,2);
                auVar139 = NEON_smax(auVar177,auVar173,2);
                auVar107 = NEON_smin(auVar179,auVar187,2);
                auVar140 = NEON_smin(auVar168,auVar167,2);
                auVar105 = NEON_smax(auVar113,auVar176,2);
                auVar174 = NEON_smax(auVar89,auVar180,2);
                auVar90 = NEON_smax(auVar161,auVar183,2);
                auVar140 = NEON_smax(auVar98,auVar140,2);
                auVar91 = NEON_smin(auVar91,auVar151,2);
                auVar88 = NEON_smax(auVar181,auVar88,2);
                auVar90 = NEON_smin(auVar166,auVar90,2);
                auVar89 = NEON_smin(auVar87,auVar105,2);
                auVar166 = NEON_smin(auVar86,auVar139,2);
                auVar174 = NEON_smax(auVar174,auVar131,2);
                auVar87 = NEON_smin(auVar175,auVar107,2);
                auVar91 = NEON_smin(auVar140,auVar91,2);
                auVar166 = NEON_smax(auVar89,auVar166,2);
                auVar140 = NEON_smin(auVar174,auVar88,2);
                auVar88 = NEON_smax(auVar90,auVar87,2);
                auVar166 = NEON_smax(auVar91,auVar166,2);
                auVar88 = NEON_smin(auVar88,auVar140,2);
                auVar88 = NEON_smax(auVar166,auVar88,2);
                ((undefined8 *)(local_90 + lVar62))[1] = auVar88._8_8_;
                *(undefined8 *)(local_90 + lVar62) = auVar88._0_8_;
              } while ((int)uVar65 <= iVar71);
            } while ((int)uVar43 <= (int)uVar65);
          }
          uVar84 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
          uVar81 = (uint)uVar82;
          uVar65 = uVar81 - uVar1;
          if ((int)uVar81 < (int)uVar1) {
            uVar65 = uVar81;
          }
          uVar78 = -(ulong)(uVar65 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar65 << 1;
          uVar72 = iVar60 + uVar81;
          if ((int)uVar81 < (int)uVar85) {
            uVar72 = uVar65;
          }
          uVar55 = -(ulong)(uVar72 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar72 << 1;
          sVar18 = *(short *)((long)psVar76 + uVar78 + (long)iVar54 * 2);
          sVar19 = *(short *)((long)psVar76 + uVar84 + (long)iVar54 * 2);
          uVar65 = uVar81 + uVar1;
          if ((int)(uVar43 - uVar1) <= (int)uVar81) {
            uVar65 = uVar81;
          }
          sVar20 = *(short *)((long)psVar76 + uVar55 + (long)iVar54 * 2);
          uVar72 = uVar81 + uVar85;
          if ((int)(uVar43 + iVar60) <= (int)uVar81) {
            uVar72 = uVar65;
          }
          uVar74 = -(ulong)(uVar72 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar72 << 1;
          sVar42 = sVar18;
          if (sVar19 < sVar18) {
            sVar42 = sVar19;
          }
          if (sVar18 < sVar19) {
            sVar18 = sVar19;
          }
          sVar19 = sVar20;
          if (sVar42 < sVar20) {
            sVar19 = sVar42;
          }
          uVar77 = -(ulong)(uVar65 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar65 << 1;
          if (sVar20 < sVar42) {
            sVar20 = sVar42;
          }
          sVar21 = *(short *)((long)psVar76 + uVar74 + (long)iVar54 * 2);
          sVar22 = *(short *)((long)psVar76 + uVar55 + (long)iVar46 * 2);
          sVar42 = sVar20;
          if (sVar18 < sVar20) {
            sVar42 = sVar18;
          }
          sVar23 = *(short *)((long)psVar76 + uVar77 + (long)iVar54 * 2);
          if (sVar20 < sVar18) {
            sVar20 = sVar18;
          }
          sVar18 = sVar21;
          if (sVar22 < sVar21) {
            sVar18 = sVar22;
          }
          if (sVar21 < sVar22) {
            sVar21 = sVar22;
          }
          sVar22 = sVar18;
          if (sVar23 < sVar18) {
            sVar22 = sVar23;
          }
          if (sVar18 < sVar23) {
            sVar18 = sVar23;
          }
          sVar24 = *(short *)((long)psVar76 + uVar77 + (long)iVar46 * 2);
          sVar25 = *(short *)((long)psVar76 + uVar84 + (long)iVar46 * 2);
          sVar23 = sVar18;
          if (sVar21 < sVar18) {
            sVar23 = sVar21;
          }
          if (sVar18 < sVar21) {
            sVar18 = sVar21;
          }
          sVar21 = sVar22;
          if (sVar19 < sVar22) {
            sVar21 = sVar19;
          }
          if (sVar22 < sVar19) {
            sVar22 = sVar19;
          }
          sVar19 = sVar18;
          if (sVar20 < sVar18) {
            sVar19 = sVar20;
          }
          if (sVar18 < sVar20) {
            sVar18 = sVar20;
          }
          sVar20 = sVar19;
          if (sVar22 < sVar19) {
            sVar20 = sVar22;
          }
          if (sVar19 < sVar22) {
            sVar19 = sVar22;
          }
          sVar22 = sVar23;
          if (sVar42 < sVar23) {
            sVar22 = sVar42;
          }
          if (sVar23 < sVar42) {
            sVar23 = sVar42;
          }
          sVar42 = sVar20;
          if (sVar22 < sVar20) {
            sVar42 = sVar22;
          }
          if (sVar20 < sVar22) {
            sVar20 = sVar22;
          }
          sVar22 = sVar19;
          if (sVar23 < sVar19) {
            sVar22 = sVar23;
          }
          if (sVar19 < sVar23) {
            sVar19 = sVar23;
          }
          sVar26 = *(short *)((long)psVar76 + uVar78 + (long)iVar46 * 2);
          sVar27 = *(short *)((long)psVar66 + uVar55);
          sVar23 = sVar24;
          if (sVar25 < sVar24) {
            sVar23 = sVar25;
          }
          if (sVar24 < sVar25) {
            sVar24 = sVar25;
          }
          sVar25 = sVar23;
          if (sVar26 < sVar23) {
            sVar25 = sVar26;
          }
          if (sVar23 < sVar26) {
            sVar23 = sVar26;
          }
          sVar28 = *(short *)((long)psVar66 + uVar78);
          sVar29 = *(short *)((long)psVar76 + uVar74 + (long)iVar46 * 2);
          sVar26 = sVar23;
          if (sVar24 < sVar23) {
            sVar26 = sVar24;
          }
          if (sVar23 < sVar24) {
            sVar23 = sVar24;
          }
          sVar24 = sVar27;
          if (sVar28 < sVar27) {
            sVar24 = sVar28;
          }
          if (sVar27 < sVar28) {
            sVar27 = sVar28;
          }
          sVar28 = sVar29;
          if (sVar24 < sVar29) {
            sVar28 = sVar24;
          }
          if (sVar29 < sVar24) {
            sVar29 = sVar24;
          }
          sVar30 = *(short *)((long)psVar66 + uVar74);
          uVar82 = (ulong)(uVar81 + 1);
          sVar31 = *(short *)((long)psVar66 + uVar77);
          sVar24 = sVar29;
          if (sVar27 < sVar29) {
            sVar24 = sVar27;
          }
          if (sVar29 < sVar27) {
            sVar29 = sVar27;
          }
          sVar27 = sVar28;
          if (sVar25 < sVar28) {
            sVar27 = sVar25;
          }
          if (sVar28 < sVar25) {
            sVar28 = sVar25;
          }
          sVar25 = sVar29;
          if (sVar23 < sVar29) {
            sVar25 = sVar23;
          }
          if (sVar29 < sVar23) {
            sVar29 = sVar23;
          }
          sVar23 = sVar25;
          if (sVar28 < sVar25) {
            sVar23 = sVar28;
          }
          if (sVar25 < sVar28) {
            sVar25 = sVar28;
          }
          sVar28 = sVar24;
          if (sVar26 < sVar24) {
            sVar28 = sVar26;
          }
          if (sVar24 < sVar26) {
            sVar24 = sVar26;
          }
          sVar26 = sVar23;
          if (sVar28 < sVar23) {
            sVar26 = sVar28;
          }
          if (sVar23 < sVar28) {
            sVar23 = sVar28;
          }
          sVar28 = sVar25;
          if (sVar24 < sVar25) {
            sVar28 = sVar24;
          }
          if (sVar25 < sVar24) {
            sVar25 = sVar24;
          }
          sVar24 = sVar21;
          if (sVar21 < sVar27) {
            sVar24 = sVar27;
          }
          sVar12 = sVar19;
          if (sVar25 < sVar19) {
            sVar12 = sVar25;
          }
          if (sVar19 < sVar25) {
            sVar19 = sVar25;
          }
          sVar25 = sVar12;
          if (sVar24 < sVar12) {
            sVar25 = sVar24;
          }
          if (sVar12 < sVar24) {
            sVar12 = sVar24;
          }
          sVar24 = sVar20;
          if (sVar23 < sVar20) {
            sVar24 = sVar23;
          }
          if (sVar20 < sVar23) {
            sVar20 = sVar23;
          }
          sVar23 = sVar25;
          if (sVar24 < sVar25) {
            sVar23 = sVar24;
          }
          if (sVar25 < sVar24) {
            sVar25 = sVar24;
          }
          sVar32 = *(short *)((long)psVar66 + uVar84);
          sVar24 = sVar12;
          if (sVar20 < sVar12) {
            sVar24 = sVar20;
          }
          sVar33 = *(short *)((long)psVar76 + uVar78 + (long)iVar44 * 2);
          if (sVar12 < sVar20) {
            sVar12 = sVar20;
          }
          sVar20 = sVar42;
          if (sVar26 < sVar42) {
            sVar20 = sVar26;
          }
          if (sVar42 < sVar26) {
            sVar42 = sVar26;
          }
          sVar26 = sVar18;
          if (sVar29 < sVar18) {
            sVar26 = sVar29;
          }
          sVar17 = sVar42;
          if (sVar26 < sVar42) {
            sVar17 = sVar26;
          }
          if (sVar42 < sVar26) {
            sVar42 = sVar26;
          }
          sVar26 = sVar22;
          if (sVar28 < sVar22) {
            sVar26 = sVar28;
          }
          if (sVar22 < sVar28) {
            sVar22 = sVar28;
          }
          sVar28 = sVar17;
          if (sVar26 < sVar17) {
            sVar28 = sVar26;
          }
          if (sVar17 < sVar26) {
            sVar17 = sVar26;
          }
          sVar34 = *(short *)((long)psVar76 + uVar84 + (long)iVar44 * 2);
          sVar26 = sVar42;
          if (sVar22 < sVar42) {
            sVar26 = sVar22;
          }
          if (sVar42 < sVar22) {
            sVar42 = sVar22;
          }
          sVar22 = sVar30;
          if (sVar31 < sVar30) {
            sVar22 = sVar31;
          }
          if (sVar30 < sVar31) {
            sVar30 = sVar31;
          }
          sVar31 = sVar22;
          if (sVar32 < sVar22) {
            sVar31 = sVar32;
          }
          if (sVar22 < sVar32) {
            sVar22 = sVar32;
          }
          sVar32 = *(short *)((long)psVar76 + uVar55 + (long)iVar44 * 2);
          sVar35 = *(short *)((long)psVar76 + uVar55 + (long)iVar45 * 2);
          sVar14 = sVar22;
          if (sVar30 < sVar22) {
            sVar14 = sVar30;
          }
          if (sVar22 < sVar30) {
            sVar22 = sVar30;
          }
          sVar30 = sVar33;
          if (sVar34 < sVar33) {
            sVar30 = sVar34;
          }
          if (sVar33 < sVar34) {
            sVar33 = sVar34;
          }
          sVar34 = sVar32;
          if (sVar30 < sVar32) {
            sVar34 = sVar30;
          }
          if (sVar32 < sVar30) {
            sVar32 = sVar30;
          }
          sVar36 = *(short *)((long)psVar76 + uVar74 + (long)iVar44 * 2);
          sVar30 = sVar32;
          if (sVar33 < sVar32) {
            sVar30 = sVar33;
          }
          if (sVar32 < sVar33) {
            sVar32 = sVar33;
          }
          sVar33 = sVar31;
          if (sVar34 < sVar31) {
            sVar33 = sVar34;
          }
          if (sVar31 < sVar34) {
            sVar31 = sVar34;
          }
          sVar34 = sVar22;
          if (sVar32 < sVar22) {
            sVar34 = sVar32;
          }
          if (sVar22 < sVar32) {
            sVar22 = sVar32;
          }
          sVar32 = sVar34;
          if (sVar31 < sVar34) {
            sVar32 = sVar31;
          }
          if (sVar34 < sVar31) {
            sVar34 = sVar31;
          }
          sVar37 = *(short *)((long)psVar76 + uVar77 + (long)iVar44 * 2);
          sVar38 = *(short *)((long)psVar76 + uVar77 + (long)iVar45 * 2);
          sVar31 = sVar14;
          if (sVar30 < sVar14) {
            sVar31 = sVar30;
          }
          if (sVar14 < sVar30) {
            sVar14 = sVar30;
          }
          sVar30 = sVar32;
          if (sVar31 < sVar32) {
            sVar30 = sVar31;
          }
          if (sVar32 < sVar31) {
            sVar32 = sVar31;
          }
          sVar39 = *(short *)((long)psVar76 + uVar78 + (long)iVar45 * 2);
          sVar31 = sVar34;
          if (sVar14 < sVar34) {
            sVar31 = sVar14;
          }
          sVar40 = *(short *)((long)psVar76 + uVar84 + (long)iVar45 * 2);
          if (sVar34 < sVar14) {
            sVar34 = sVar14;
          }
          sVar14 = sVar36;
          if (sVar35 < sVar36) {
            sVar14 = sVar35;
          }
          if (sVar36 < sVar35) {
            sVar36 = sVar35;
          }
          sVar35 = sVar14;
          if (sVar37 < sVar14) {
            sVar35 = sVar37;
          }
          if (sVar14 < sVar37) {
            sVar14 = sVar37;
          }
          sVar41 = *(short *)((long)psVar76 + uVar74 + (long)iVar45 * 2);
          sVar37 = sVar14;
          if (sVar36 < sVar14) {
            sVar37 = sVar36;
          }
          if (sVar14 < sVar36) {
            sVar14 = sVar36;
          }
          sVar36 = sVar39;
          if (sVar40 < sVar39) {
            sVar36 = sVar40;
          }
          if (sVar39 < sVar40) {
            sVar39 = sVar40;
          }
          sVar40 = sVar41;
          if (sVar38 < sVar41) {
            sVar40 = sVar38;
          }
          if (sVar41 < sVar38) {
            sVar41 = sVar38;
          }
          sVar38 = sVar40;
          if (sVar36 < sVar40) {
            sVar38 = sVar36;
          }
          if (sVar40 < sVar36) {
            sVar40 = sVar36;
          }
          sVar36 = sVar41;
          if (sVar39 < sVar41) {
            sVar36 = sVar39;
          }
          if (sVar41 < sVar39) {
            sVar41 = sVar39;
          }
          sVar39 = sVar36;
          if (sVar40 < sVar36) {
            sVar39 = sVar40;
          }
          if (sVar36 < sVar40) {
            sVar36 = sVar40;
          }
          sVar40 = sVar38;
          if (sVar35 < sVar38) {
            sVar40 = sVar35;
          }
          if (sVar38 < sVar35) {
            sVar38 = sVar35;
          }
          sVar35 = sVar36;
          if (sVar14 < sVar36) {
            sVar35 = sVar14;
          }
          if (sVar36 < sVar14) {
            sVar36 = sVar14;
          }
          sVar14 = sVar35;
          if (sVar38 < sVar35) {
            sVar14 = sVar38;
          }
          if (sVar35 < sVar38) {
            sVar35 = sVar38;
          }
          sVar38 = sVar39;
          if (sVar37 < sVar39) {
            sVar38 = sVar37;
          }
          if (sVar39 < sVar37) {
            sVar39 = sVar37;
          }
          sVar37 = sVar39;
          if (sVar41 < sVar39) {
            sVar37 = sVar41;
          }
          if (sVar39 < sVar41) {
            sVar39 = sVar41;
          }
          sVar41 = sVar14;
          if (sVar38 < sVar14) {
            sVar41 = sVar38;
          }
          if (sVar14 < sVar38) {
            sVar14 = sVar38;
          }
          sVar38 = sVar37;
          if (sVar35 < sVar37) {
            sVar38 = sVar35;
          }
          if (sVar37 < sVar35) {
            sVar37 = sVar35;
          }
          sVar35 = sVar39;
          if (sVar36 < sVar39) {
            sVar35 = sVar36;
          }
          if (sVar39 < sVar36) {
            sVar39 = sVar36;
          }
          sVar36 = sVar40;
          if (sVar40 < sVar33) {
            sVar36 = sVar33;
          }
          sVar13 = sVar37;
          if (sVar34 < sVar37) {
            sVar13 = sVar34;
          }
          if (sVar37 < sVar34) {
            sVar37 = sVar34;
          }
          sVar34 = sVar13;
          if (sVar36 < sVar13) {
            sVar34 = sVar36;
          }
          if (sVar13 < sVar36) {
            sVar13 = sVar36;
          }
          sVar36 = sVar14;
          if (sVar32 < sVar14) {
            sVar36 = sVar32;
          }
          if (sVar14 < sVar32) {
            sVar14 = sVar32;
          }
          sVar32 = sVar14;
          if (sVar39 < sVar14) {
            sVar32 = sVar39;
          }
          if (sVar14 < sVar39) {
            sVar14 = sVar39;
          }
          sVar39 = sVar34;
          if (sVar36 < sVar34) {
            sVar39 = sVar36;
          }
          if (sVar34 < sVar36) {
            sVar34 = sVar36;
          }
          sVar36 = sVar32;
          if (sVar13 < sVar32) {
            sVar36 = sVar13;
          }
          if (sVar32 < sVar13) {
            sVar32 = sVar13;
          }
          sVar13 = sVar14;
          if (sVar37 < sVar14) {
            sVar13 = sVar37;
          }
          if (sVar14 < sVar37) {
            sVar14 = sVar37;
          }
          sVar37 = sVar41;
          if (sVar30 < sVar41) {
            sVar37 = sVar30;
          }
          if (sVar41 < sVar30) {
            sVar41 = sVar30;
          }
          sVar30 = sVar35;
          if (sVar22 < sVar35) {
            sVar30 = sVar22;
          }
          if (sVar35 < sVar22) {
            sVar35 = sVar22;
          }
          sVar22 = sVar30;
          if (sVar41 < sVar30) {
            sVar22 = sVar41;
          }
          if (sVar30 < sVar41) {
            sVar30 = sVar41;
          }
          sVar41 = sVar38;
          if (sVar31 < sVar38) {
            sVar41 = sVar31;
          }
          if (sVar38 < sVar31) {
            sVar38 = sVar31;
          }
          sVar31 = sVar22;
          if (sVar41 < sVar22) {
            sVar31 = sVar41;
          }
          if (sVar22 < sVar41) {
            sVar22 = sVar41;
          }
          sVar41 = sVar30;
          if (sVar38 < sVar30) {
            sVar41 = sVar38;
          }
          if (sVar30 < sVar38) {
            sVar30 = sVar38;
          }
          sVar38 = sVar30;
          if (sVar30 < sVar13) {
            sVar38 = sVar13;
          }
          sVar16 = sVar42;
          if (sVar42 < sVar19) {
            sVar16 = sVar19;
          }
          if (sVar16 < sVar38) {
            sVar38 = sVar16;
          }
          sVar16 = sVar37;
          if (sVar37 < sVar20) {
            sVar16 = sVar20;
          }
          if (sVar16 < sVar23) {
            sVar16 = sVar23;
          }
          if (sVar16 < sVar39) {
            sVar16 = sVar39;
          }
          if (sVar16 < sVar38) {
            sVar38 = sVar16;
          }
          sVar16 = sVar22;
          if (sVar22 < sVar36) {
            sVar16 = sVar36;
          }
          sVar15 = sVar17;
          if (sVar17 < sVar24) {
            sVar15 = sVar24;
          }
          if (sVar15 < sVar16) {
            sVar16 = sVar15;
          }
          if (sVar38 < sVar16) {
            sVar38 = sVar16;
          }
          sVar16 = sVar28;
          if (sVar28 < sVar25) {
            sVar16 = sVar25;
          }
          if (sVar16 < sVar34) {
            sVar16 = sVar34;
          }
          if (sVar16 < sVar31) {
            sVar16 = sVar31;
          }
          sVar15 = sVar14;
          if (sVar14 < sVar35) {
            sVar15 = sVar35;
          }
          if (sVar15 < sVar16) {
            sVar16 = sVar15;
          }
          if (sVar33 < sVar40) {
            sVar40 = sVar33;
          }
          if (sVar27 < sVar21) {
            sVar21 = sVar27;
          }
          if (sVar40 < sVar21) {
            sVar40 = sVar21;
          }
          sVar21 = sVar41;
          if (sVar41 < sVar32) {
            sVar21 = sVar32;
          }
          sVar27 = sVar26;
          if (sVar26 < sVar12) {
            sVar27 = sVar12;
          }
          if (sVar27 < sVar21) {
            sVar21 = sVar27;
          }
          if (sVar40 < sVar21) {
            sVar40 = sVar21;
          }
          if (sVar40 < sVar16) {
            sVar16 = sVar40;
          }
          if (sVar38 < sVar16) {
            sVar38 = sVar16;
          }
          if (sVar37 < sVar39) {
            sVar39 = sVar37;
          }
          if (sVar20 < sVar23) {
            sVar23 = sVar20;
          }
          if (sVar39 < sVar23) {
            sVar39 = sVar23;
          }
          if (sVar13 < sVar42) {
            sVar42 = sVar13;
          }
          if (sVar19 < sVar42) {
            sVar42 = sVar19;
          }
          if (sVar30 < sVar42) {
            sVar42 = sVar30;
          }
          if (sVar39 < sVar42) {
            sVar39 = sVar42;
          }
          if (sVar36 < sVar22) {
            sVar22 = sVar36;
          }
          if (sVar24 < sVar17) {
            sVar17 = sVar24;
          }
          if (sVar22 < sVar17) {
            sVar22 = sVar17;
          }
          if (sVar22 < sVar39) {
            sVar39 = sVar22;
          }
          if (sVar18 < sVar29) {
            sVar18 = sVar29;
          }
          if (sVar18 < sVar35) {
            sVar35 = sVar18;
          }
          if (sVar14 < sVar35) {
            sVar35 = sVar14;
          }
          if (sVar34 < sVar31) {
            sVar31 = sVar34;
          }
          if (sVar25 < sVar28) {
            sVar28 = sVar25;
          }
          if (sVar31 < sVar28) {
            sVar31 = sVar28;
          }
          if (sVar31 < sVar35) {
            sVar35 = sVar31;
          }
          if (sVar12 < sVar26) {
            sVar26 = sVar12;
          }
          if (sVar32 < sVar26) {
            sVar26 = sVar32;
          }
          if (sVar41 < sVar26) {
            sVar26 = sVar41;
          }
          if (sVar35 < sVar26) {
            sVar35 = sVar26;
          }
          if (sVar35 < sVar39) {
            sVar39 = sVar35;
          }
          if (sVar38 < sVar39) {
            sVar38 = sVar39;
          }
          *(short *)(local_90 + uVar84) = sVar38;
        } while( true );
      }
      iVar60 = iVar71 + 1;
      local_34 = iVar71;
    }
    uVar69 = 0;
    uVar85 = uVar1;
    local_30 = uVar1;
LAB_001fd85c:
    if (local_34 < 1) {
      return;
    }
    iVar63 = iVar60 + -2;
    lVar75 = (long)(int)local_30;
    lVar73 = (long)(int)-local_30;
    lVar64 = lVar75 * 2;
    lVar62 = lVar73 * 2;
    uVar83 = -(ulong)((local_30 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
             (ulong)(local_30 << 1) << 1;
    uVar82 = -(ulong)((-local_30 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
             (ulong)(local_30 * -2) << 1;
    psVar66 = (short *)(local_90 + 0x10);
    lVar57 = uVar82 + 0x10;
    lVar61 = uVar83 + 0x10;
    iVar71 = 0;
    do {
      psVar67 = psVar66 + -8;
      if (iVar71 < 1) {
        if (iVar71 < iVar60 + -3) {
          if (iVar71 < iVar63) {
            if ((uVar1 < 9 ||
                 (psVar67 < (short *)((long)psVar76 + lVar61) &&
                  (short *)((long)psVar76 + uVar83) < psVar66 ||
                 psVar67 < psVar76 + lVar75 + 8 && psVar76 + lVar75 < psVar66)) ||
               (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
              lVar58 = 0;
              do {
                sVar42 = (psVar76 + lVar75)[lVar58];
                sVar19 = ((short *)((long)psVar76 + uVar83))[lVar58];
                sVar20 = psVar76[lVar58];
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = sVar21;
                if (sVar21 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar42 < sVar18) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                psVar67[lVar58] = sVar20;
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
            uVar65 = uVar1;
            if (uVar79 < uVar1) {
              uVar65 = uVar79;
            }
            psVar56 = psVar76;
            if (uVar65 == 0) {
LAB_0020226c:
              uVar84 = (ulong)uVar65;
            }
            else {
              sVar42 = psVar76[lVar75];
              psVar56 = psVar76 + 1;
              sVar19 = *(short *)((long)psVar76 + uVar83);
              sVar20 = *psVar76;
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar42) {
                sVar18 = sVar42;
              }
              sVar42 = sVar21;
              if (sVar21 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar42 < sVar18) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              psVar66[-8] = sVar20;
              if (uVar65 == 1) goto LAB_0020226c;
              sVar42 = psVar56[lVar75];
              sVar19 = *(short *)((long)psVar56 + uVar83);
              psVar56 = psVar76 + 2;
              sVar20 = psVar76[1];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar42) {
                sVar18 = sVar42;
              }
              sVar42 = sVar21;
              if (sVar21 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar42 < sVar18) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              psVar66[-7] = sVar20;
              if (uVar65 == 2) goto LAB_0020226c;
              sVar42 = psVar56[lVar75];
              sVar19 = *(short *)((long)psVar56 + uVar83);
              psVar56 = psVar76 + 3;
              sVar20 = psVar76[2];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar42) {
                sVar18 = sVar42;
              }
              sVar42 = sVar21;
              if (sVar21 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar42 < sVar18) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              psVar66[-6] = sVar20;
              if (uVar65 == 3) goto LAB_0020226c;
              sVar42 = psVar56[lVar75];
              sVar19 = *(short *)((long)psVar56 + uVar83);
              psVar56 = psVar76 + 4;
              sVar20 = psVar76[3];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar42) {
                sVar18 = sVar42;
              }
              sVar42 = sVar21;
              if (sVar21 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar42 < sVar18) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              psVar66[-5] = sVar20;
              if (uVar65 == 4) {
                uVar84 = 4;
              }
              else {
                sVar42 = psVar56[lVar75];
                sVar19 = *(short *)((long)psVar56 + uVar83);
                psVar56 = psVar76 + 5;
                sVar20 = psVar76[4];
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = sVar21;
                if (sVar21 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar42 < sVar18) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                psVar66[-4] = sVar20;
                if (uVar65 == 5) goto LAB_0020226c;
                sVar42 = psVar56[lVar75];
                sVar19 = *(short *)((long)psVar56 + uVar83);
                psVar56 = psVar76 + 6;
                sVar20 = psVar76[5];
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = sVar21;
                if (sVar21 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar42 < sVar18) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                psVar66[-3] = sVar20;
                if (uVar65 == 7) {
                  sVar42 = psVar56[lVar75];
                  uVar84 = 7;
                  sVar19 = *(short *)((long)psVar56 + uVar83);
                  psVar56 = psVar76 + 7;
                  sVar20 = psVar76[6];
                  sVar18 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar42 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar42 = sVar18;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar18) {
                    sVar21 = sVar18;
                  }
                  sVar18 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar42 = sVar21;
                  if (sVar21 < sVar19) {
                    sVar42 = sVar19;
                  }
                  if (sVar42 < sVar18) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar21 < sVar20) {
                    sVar20 = sVar21;
                  }
                  if (sVar20 < sVar18) {
                    sVar20 = sVar18;
                  }
                  psVar66[-2] = sVar20;
                }
                else {
                  uVar84 = 6;
                }
              }
            }
            uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
            uVar81 = uVar79 * 8;
            if (6 < uVar43 - uVar65) {
              lVar68 = (ulong)uVar65 * 2;
              lVar58 = 0;
              uVar72 = 0;
              do {
                lVar147 = lVar58 + lVar68;
                uVar72 = uVar72 + 1;
                psVar6 = (short *)((long)psVar76 + lVar58 + lVar64 + lVar68);
                psVar52 = (short *)((long)psVar76 + lVar147);
                psVar8 = (short *)((long)psVar76 + lVar58 + uVar83 + lVar68);
                lVar58 = lVar58 + 0x10;
                auVar148._0_4_ = (int)*psVar6;
                auVar148._4_4_ = (int)psVar6[1];
                auVar148._8_4_ = (int)psVar6[2];
                auVar148._12_4_ = (int)psVar6[3];
                auVar151._0_4_ = (int)psVar6[4];
                auVar151._4_4_ = (int)psVar6[5];
                auVar151._8_4_ = (int)psVar6[6];
                auVar151._12_4_ = (int)psVar6[7];
                puVar70 = (undefined8 *)((long)psVar67 + lVar147);
                auVar131._0_4_ = (int)*psVar52;
                auVar131._4_4_ = (int)psVar52[1];
                auVar131._8_4_ = (int)psVar52[2];
                auVar131._12_4_ = (int)psVar52[3];
                auVar113._0_4_ = (int)psVar52[4];
                auVar113._4_4_ = (int)psVar52[5];
                auVar113._8_4_ = (int)psVar52[6];
                auVar113._12_4_ = (int)psVar52[7];
                auVar139._0_4_ = (int)*psVar8;
                auVar139._4_4_ = (int)psVar8[1];
                auVar139._8_4_ = (int)psVar8[2];
                auVar139._12_4_ = (int)psVar8[3];
                auVar181._0_4_ = (int)psVar8[4];
                auVar181._4_4_ = (int)psVar8[5];
                auVar181._8_4_ = (int)psVar8[6];
                auVar181._12_4_ = (int)psVar8[7];
                auVar140 = NEON_smin(auVar139,auVar148,4);
                auVar91 = NEON_smin(auVar181,auVar151,4);
                auVar166 = NEON_smax(auVar139,auVar148,4);
                auVar88 = NEON_smax(auVar181,auVar151,4);
                auVar86 = NEON_smax(auVar131,auVar140,4);
                auVar98 = NEON_smax(auVar113,auVar91,4);
                auVar87 = NEON_smin(auVar131,auVar140,4);
                auVar89 = NEON_smin(auVar113,auVar91,4);
                auVar174 = NEON_smin(auVar131,auVar166,4);
                auVar90 = NEON_smin(auVar113,auVar88,4);
                auVar140 = NEON_smax(auVar86,auVar166,4);
                auVar166 = NEON_smax(auVar98,auVar88,4);
                auVar91 = NEON_smax(auVar131,auVar87,4);
                auVar88 = NEON_smax(auVar113,auVar89,4);
                auVar174 = NEON_smin(auVar174,auVar86,4);
                auVar91 = NEON_smin(auVar91,auVar140,4);
                auVar88 = NEON_smin(auVar88,auVar166,4);
                auVar140 = NEON_smin(auVar90,auVar98,4);
                auVar166 = NEON_smax(auVar174,auVar91,4);
                auVar88 = NEON_smax(auVar140,auVar88,4);
                auVar175._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar175._8_2_ = auVar88._0_2_;
                auVar175._10_2_ = auVar88._4_2_;
                auVar175._12_2_ = auVar88._8_2_;
                auVar175._14_2_ = auVar88._12_2_;
                puVar70[1] = auVar175._8_8_;
                *puVar70 = auVar175._0_8_;
              } while (uVar72 < uVar79);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
            }
            sVar42 = psVar56[lVar75];
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            sVar19 = *(short *)((long)psVar56 + uVar83);
            iVar54 = (int)uVar84;
            sVar20 = *psVar56;
            sVar18 = sVar19;
            if (sVar42 < sVar19) {
              sVar18 = sVar42;
            }
            if (sVar19 < sVar42) {
              sVar19 = sVar42;
            }
            sVar42 = sVar20;
            if (sVar18 < sVar20) {
              sVar42 = sVar18;
            }
            sVar21 = sVar20;
            if (sVar20 < sVar18) {
              sVar21 = sVar18;
            }
            sVar18 = sVar20;
            if (sVar20 < sVar42) {
              sVar18 = sVar42;
            }
            sVar42 = sVar21;
            if (sVar21 < sVar19) {
              sVar42 = sVar19;
            }
            if (sVar42 < sVar18) {
              sVar18 = sVar42;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar21 < sVar20) {
              sVar20 = sVar21;
            }
            if (sVar20 < sVar18) {
              sVar20 = sVar18;
            }
            *(short *)((long)psVar67 + uVar78) = sVar20;
            if (iVar54 + 1 < (int)uVar1) {
              sVar42 = psVar56[lVar75 + 1];
              sVar19 = *(short *)((long)psVar56 + uVar83 + 2);
              sVar20 = psVar56[1];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar42) {
                sVar18 = sVar42;
              }
              sVar42 = sVar21;
              if (sVar21 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar42 < sVar18) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
              if (iVar54 + 2 < (int)uVar1) {
                sVar42 = psVar56[lVar75 + 2];
                sVar19 = *(short *)((long)psVar56 + uVar83 + 4);
                sVar20 = psVar56[2];
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = sVar21;
                if (sVar21 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar42 < sVar18) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
                if (iVar54 + 3 < (int)uVar1) {
                  sVar42 = psVar56[lVar75 + 3];
                  sVar19 = *(short *)((long)psVar56 + uVar83 + 6);
                  sVar20 = psVar56[3];
                  sVar18 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar42 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar42 = sVar18;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar18) {
                    sVar21 = sVar18;
                  }
                  sVar18 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar42 = sVar21;
                  if (sVar21 < sVar19) {
                    sVar42 = sVar19;
                  }
                  if (sVar42 < sVar18) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar21 < sVar20) {
                    sVar20 = sVar21;
                  }
                  if (sVar20 < sVar18) {
                    sVar20 = sVar18;
                  }
                  *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                  if (iVar54 + 4 < (int)uVar1) {
                    sVar42 = psVar56[lVar75 + 4];
                    sVar19 = *(short *)((long)psVar56 + uVar83 + 8);
                    sVar20 = psVar56[4];
                    sVar18 = sVar19;
                    if (sVar42 < sVar19) {
                      sVar18 = sVar42;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    sVar42 = sVar20;
                    if (sVar18 < sVar20) {
                      sVar42 = sVar18;
                    }
                    sVar21 = sVar20;
                    if (sVar20 < sVar18) {
                      sVar21 = sVar18;
                    }
                    sVar18 = sVar20;
                    if (sVar20 < sVar42) {
                      sVar18 = sVar42;
                    }
                    sVar42 = sVar21;
                    if (sVar21 < sVar19) {
                      sVar42 = sVar19;
                    }
                    if (sVar42 < sVar18) {
                      sVar18 = sVar42;
                    }
                    if (sVar19 < sVar20) {
                      sVar20 = sVar19;
                    }
                    if (sVar21 < sVar20) {
                      sVar20 = sVar21;
                    }
                    if (sVar20 < sVar18) {
                      sVar20 = sVar18;
                    }
                    *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                    if (iVar54 + 5 < (int)uVar1) {
                      sVar42 = psVar56[lVar75 + 5];
                      sVar19 = *(short *)((long)psVar56 + uVar83 + 10);
                      sVar20 = psVar56[5];
                      sVar18 = sVar19;
                      if (sVar42 < sVar19) {
                        sVar18 = sVar42;
                      }
                      if (sVar19 < sVar42) {
                        sVar19 = sVar42;
                      }
                      sVar42 = sVar20;
                      if (sVar18 < sVar20) {
                        sVar42 = sVar18;
                      }
                      sVar21 = sVar20;
                      if (sVar20 < sVar18) {
                        sVar21 = sVar18;
                      }
                      sVar18 = sVar20;
                      if (sVar20 < sVar42) {
                        sVar18 = sVar42;
                      }
                      sVar42 = sVar21;
                      if (sVar21 < sVar19) {
                        sVar42 = sVar19;
                      }
                      if (sVar42 < sVar18) {
                        sVar18 = sVar42;
                      }
                      if (sVar19 < sVar20) {
                        sVar20 = sVar19;
                      }
                      if (sVar21 < sVar20) {
                        sVar20 = sVar21;
                      }
                      if (sVar20 < sVar18) {
                        sVar20 = sVar18;
                      }
                      *(short *)((long)psVar67 + uVar78 + 10) = sVar20;
                      if (iVar54 + 6 < (int)uVar1) {
                        sVar42 = psVar56[lVar75 + 6];
                        sVar19 = *(short *)((long)psVar56 + uVar83 + 0xc);
                        sVar20 = psVar56[6];
                        sVar18 = sVar19;
                        if (sVar42 < sVar19) {
                          sVar18 = sVar42;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        sVar42 = sVar20;
                        if (sVar18 < sVar20) {
                          sVar42 = sVar18;
                        }
                        sVar21 = sVar20;
                        if (sVar20 < sVar18) {
                          sVar21 = sVar18;
                        }
                        sVar18 = sVar20;
                        if (sVar20 < sVar42) {
                          sVar18 = sVar42;
                        }
                        sVar42 = sVar21;
                        if (sVar21 < sVar19) {
                          sVar42 = sVar19;
                        }
                        if (sVar42 < sVar18) {
                          sVar18 = sVar42;
                        }
                        if (sVar19 < sVar20) {
                          sVar20 = sVar19;
                        }
                        if (sVar21 < sVar20) {
                          sVar20 = sVar21;
                        }
                        if (sVar20 < sVar18) {
                          sVar20 = sVar18;
                        }
                        *(short *)((long)psVar67 + uVar78 + 0xc) = sVar20;
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            if ((psVar67 < (short *)((long)psVar76 + lVar61) &&
                 (short *)((long)psVar76 + uVar83) < psVar66 ||
                 psVar67 < psVar76 + 8 && psVar76 < psVar66) || (uVar1 < 9)) {
              lVar58 = 0;
              do {
                sVar20 = psVar76[lVar58];
                sVar19 = ((short *)((long)psVar76 + uVar83))[lVar58];
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                if (sVar42 < sVar20) {
                  sVar42 = sVar20;
                }
                sVar21 = sVar18;
                if (sVar18 < sVar19) {
                  sVar21 = sVar19;
                }
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar20 < sVar19) {
                  sVar19 = sVar20;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                psVar67[lVar58] = sVar19;
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
            if (uVar1 < uVar79) {
              uVar79 = uVar1;
            }
            psVar56 = psVar76;
            if (uVar79 == 0) {
LAB_00203240:
              uVar84 = (ulong)uVar79;
            }
            else {
              sVar19 = *psVar76;
              sVar20 = *(short *)((long)psVar76 + uVar83);
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar20) {
                sVar42 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar21;
              if (sVar21 < sVar42) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar18) {
                sVar18 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              psVar66[-8] = sVar19;
              psVar56 = psVar76 + 1;
              if (uVar79 == 1) goto LAB_00203240;
              sVar19 = psVar76[1];
              sVar20 = *(short *)((long)(psVar76 + 1) + uVar83);
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar20) {
                sVar42 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar21;
              if (sVar21 < sVar42) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar18) {
                sVar18 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              psVar66[-7] = sVar19;
              psVar56 = psVar76 + 2;
              if (uVar79 == 2) goto LAB_00203240;
              sVar19 = psVar76[2];
              sVar20 = *(short *)((long)(psVar76 + 2) + uVar83);
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar20) {
                sVar42 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar21;
              if (sVar21 < sVar42) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar18) {
                sVar18 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              psVar66[-6] = sVar19;
              psVar56 = psVar76 + 3;
              if (uVar79 == 3) goto LAB_00203240;
              sVar19 = psVar76[3];
              sVar20 = *(short *)((long)(psVar76 + 3) + uVar83);
              psVar56 = psVar76 + 4;
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar20) {
                sVar42 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar21;
              if (sVar21 < sVar42) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar18) {
                sVar18 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              psVar66[-5] = sVar19;
              if (uVar79 == 4) {
                uVar84 = 4;
              }
              else {
                sVar19 = psVar76[4];
                sVar20 = *(short *)((long)psVar56 + uVar83);
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                sVar42 = sVar19;
                if (sVar19 < sVar20) {
                  sVar42 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar18 < sVar19) {
                  sVar20 = sVar18;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar19;
                if (sVar19 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar21;
                if (sVar21 < sVar42) {
                  sVar20 = sVar42;
                }
                if (sVar20 < sVar18) {
                  sVar18 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar19 < sVar18) {
                  sVar19 = sVar18;
                }
                psVar66[-4] = sVar19;
                psVar56 = psVar76 + 5;
                if (uVar79 == 5) goto LAB_00203240;
                sVar19 = psVar76[5];
                sVar20 = *(short *)((long)(psVar76 + 5) + uVar83);
                psVar56 = psVar76 + 6;
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                sVar42 = sVar19;
                if (sVar19 < sVar20) {
                  sVar42 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar18 < sVar19) {
                  sVar20 = sVar18;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar19;
                if (sVar19 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar21;
                if (sVar21 < sVar42) {
                  sVar20 = sVar42;
                }
                if (sVar20 < sVar18) {
                  sVar18 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar19 < sVar18) {
                  sVar19 = sVar18;
                }
                psVar66[-3] = sVar19;
                if (uVar79 == 7) {
                  sVar20 = psVar76[6];
                  uVar84 = 7;
                  sVar19 = *(short *)((long)psVar56 + uVar83);
                  psVar56 = psVar76 + 7;
                  sVar18 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar20;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  if (sVar42 < sVar20) {
                    sVar42 = sVar20;
                  }
                  sVar21 = sVar18;
                  if (sVar18 < sVar19) {
                    sVar21 = sVar19;
                  }
                  if (sVar21 < sVar42) {
                    sVar42 = sVar21;
                  }
                  if (sVar20 < sVar19) {
                    sVar19 = sVar20;
                  }
                  if (sVar18 < sVar19) {
                    sVar19 = sVar18;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  psVar66[-2] = sVar19;
                }
                else {
                  uVar84 = 6;
                }
              }
            }
            uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
            uVar81 = uVar65 * 8;
            if (6 < uVar43 - uVar79) {
              lVar58 = 0;
              uVar72 = 0;
              do {
                uVar72 = uVar72 + 1;
                lVar68 = lVar58 + (ulong)uVar79 * 2;
                psVar6 = (short *)((long)psVar76 + lVar68);
                psVar52 = (short *)((long)psVar76 + lVar58 + uVar83 + (ulong)uVar79 * 2);
                puVar70 = (undefined8 *)((long)psVar67 + lVar68);
                lVar58 = lVar58 + 0x10;
                auVar98._0_4_ = (int)*psVar6;
                auVar98._4_4_ = (int)psVar6[1];
                auVar98._8_4_ = (int)psVar6[2];
                auVar98._12_4_ = (int)psVar6[3];
                auVar107._0_4_ = (int)*psVar52;
                auVar107._4_4_ = (int)psVar52[1];
                auVar107._8_4_ = (int)psVar52[2];
                auVar107._12_4_ = (int)psVar52[3];
                auVar91._0_4_ = (int)psVar6[4];
                auVar91._4_4_ = (int)psVar6[5];
                auVar91._8_4_ = (int)psVar6[6];
                auVar91._12_4_ = (int)psVar6[7];
                auVar86._0_4_ = (int)psVar52[4];
                auVar86._4_4_ = (int)psVar52[5];
                auVar86._8_4_ = (int)psVar52[6];
                auVar86._12_4_ = (int)psVar52[7];
                auVar90 = NEON_smin(auVar98,auVar107,4);
                auVar166 = NEON_smax(auVar98,auVar107,4);
                auVar140 = NEON_smin(auVar91,auVar86,4);
                auVar88 = NEON_smax(auVar91,auVar86,4);
                auVar107 = NEON_smax(auVar98,auVar90,4);
                auVar86 = NEON_smin(auVar98,auVar90,4);
                auVar105 = NEON_smax(auVar91,auVar140,4);
                auVar87 = NEON_smin(auVar91,auVar140,4);
                auVar89 = NEON_smin(auVar98,auVar166,4);
                auVar174 = NEON_smin(auVar91,auVar88,4);
                auVar90 = NEON_smax(auVar107,auVar166,4);
                auVar140 = NEON_smax(auVar105,auVar88,4);
                auVar166 = NEON_smax(auVar98,auVar86,4);
                auVar88 = NEON_smax(auVar91,auVar87,4);
                auVar89 = NEON_smin(auVar89,auVar107,4);
                auVar166 = NEON_smin(auVar166,auVar90,4);
                auVar88 = NEON_smin(auVar88,auVar140,4);
                auVar91 = NEON_smin(auVar174,auVar105,4);
                auVar166 = NEON_smax(auVar89,auVar166,4);
                auVar88 = NEON_smax(auVar91,auVar88,4);
                auVar105._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar105._8_2_ = auVar88._0_2_;
                auVar105._10_2_ = auVar88._4_2_;
                auVar105._12_2_ = auVar88._8_2_;
                auVar105._14_2_ = auVar88._12_2_;
                puVar70[1] = auVar105._8_8_;
                *puVar70 = auVar105._0_8_;
              } while (uVar72 < uVar65);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar81 == uVar1 - uVar79) goto LAB_001fe290;
            }
            sVar19 = *psVar56;
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            sVar20 = *(short *)((long)psVar56 + uVar83);
            iVar54 = (int)uVar84;
            sVar18 = sVar19;
            if (sVar20 < sVar19) {
              sVar18 = sVar20;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar20) {
              sVar42 = sVar20;
            }
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar21 = sVar19;
            if (sVar19 < sVar18) {
              sVar21 = sVar18;
            }
            sVar18 = sVar19;
            if (sVar19 < sVar20) {
              sVar18 = sVar20;
            }
            sVar20 = sVar21;
            if (sVar21 < sVar42) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar18) {
              sVar18 = sVar20;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            if (sVar21 < sVar19) {
              sVar19 = sVar21;
            }
            if (sVar19 < sVar18) {
              sVar19 = sVar18;
            }
            *(short *)((long)psVar67 + uVar78) = sVar19;
            if (iVar54 + 1 < (int)uVar1) {
              sVar19 = psVar56[1];
              sVar20 = *(short *)((long)psVar56 + uVar83 + 2);
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar20) {
                sVar42 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar21;
              if (sVar21 < sVar42) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar18) {
                sVar18 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              *(short *)((long)psVar67 + uVar78 + 2) = sVar19;
              if (iVar54 + 2 < (int)uVar1) {
                sVar19 = psVar56[2];
                sVar20 = *(short *)((long)psVar56 + uVar83 + 4);
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                sVar42 = sVar19;
                if (sVar19 < sVar20) {
                  sVar42 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar18 < sVar19) {
                  sVar20 = sVar18;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar19;
                if (sVar19 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar21;
                if (sVar21 < sVar42) {
                  sVar20 = sVar42;
                }
                if (sVar20 < sVar18) {
                  sVar18 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar19 < sVar18) {
                  sVar19 = sVar18;
                }
                *(short *)((long)psVar67 + uVar78 + 4) = sVar19;
                if (iVar54 + 3 < (int)uVar1) {
                  sVar19 = psVar56[3];
                  sVar20 = *(short *)((long)psVar56 + uVar83 + 6);
                  sVar18 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar20;
                  }
                  sVar42 = sVar19;
                  if (sVar19 < sVar20) {
                    sVar42 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar18 < sVar19) {
                    sVar20 = sVar18;
                  }
                  sVar21 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar21 = sVar18;
                  }
                  sVar18 = sVar19;
                  if (sVar19 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar20 = sVar21;
                  if (sVar21 < sVar42) {
                    sVar20 = sVar42;
                  }
                  if (sVar20 < sVar18) {
                    sVar18 = sVar20;
                  }
                  if (sVar42 < sVar19) {
                    sVar19 = sVar42;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar19 < sVar18) {
                    sVar19 = sVar18;
                  }
                  *(short *)((long)psVar67 + uVar78 + 6) = sVar19;
                  if (iVar54 + 4 < (int)uVar1) {
                    sVar19 = psVar56[4];
                    sVar20 = *(short *)((long)psVar56 + uVar83 + 8);
                    sVar18 = sVar19;
                    if (sVar20 < sVar19) {
                      sVar18 = sVar20;
                    }
                    sVar42 = sVar19;
                    if (sVar19 < sVar20) {
                      sVar42 = sVar20;
                    }
                    sVar20 = sVar19;
                    if (sVar18 < sVar19) {
                      sVar20 = sVar18;
                    }
                    sVar21 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar21 = sVar18;
                    }
                    sVar18 = sVar19;
                    if (sVar19 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar20 = sVar21;
                    if (sVar21 < sVar42) {
                      sVar20 = sVar42;
                    }
                    if (sVar20 < sVar18) {
                      sVar18 = sVar20;
                    }
                    if (sVar42 < sVar19) {
                      sVar19 = sVar42;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar19 < sVar18) {
                      sVar19 = sVar18;
                    }
                    *(short *)((long)psVar67 + uVar78 + 8) = sVar19;
                    if (iVar54 + 5 < (int)uVar1) {
                      sVar19 = psVar56[5];
                      sVar20 = *(short *)((long)psVar56 + uVar83 + 10);
                      sVar18 = sVar19;
                      if (sVar20 < sVar19) {
                        sVar18 = sVar20;
                      }
                      sVar42 = sVar19;
                      if (sVar19 < sVar20) {
                        sVar42 = sVar20;
                      }
                      sVar20 = sVar19;
                      if (sVar18 < sVar19) {
                        sVar20 = sVar18;
                      }
                      sVar21 = sVar19;
                      if (sVar19 < sVar18) {
                        sVar21 = sVar18;
                      }
                      sVar18 = sVar19;
                      if (sVar19 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar20 = sVar21;
                      if (sVar21 < sVar42) {
                        sVar20 = sVar42;
                      }
                      if (sVar20 < sVar18) {
                        sVar18 = sVar20;
                      }
                      if (sVar42 < sVar19) {
                        sVar19 = sVar42;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar19 < sVar18) {
                        sVar19 = sVar18;
                      }
                      *(short *)((long)psVar67 + uVar78 + 10) = sVar19;
                      if (iVar54 + 6 < (int)uVar1) {
                        sVar20 = psVar56[6];
                        sVar19 = *(short *)((long)psVar56 + uVar83 + 0xc);
                        sVar18 = sVar19;
                        if (sVar20 < sVar19) {
                          sVar18 = sVar20;
                        }
                        if (sVar19 < sVar20) {
                          sVar19 = sVar20;
                        }
                        sVar42 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar42 = sVar20;
                        }
                        if (sVar18 < sVar20) {
                          sVar18 = sVar20;
                        }
                        if (sVar42 < sVar20) {
                          sVar42 = sVar20;
                        }
                        sVar21 = sVar18;
                        if (sVar18 < sVar19) {
                          sVar21 = sVar19;
                        }
                        if (sVar21 < sVar42) {
                          sVar42 = sVar21;
                        }
                        if (sVar20 < sVar19) {
                          sVar19 = sVar20;
                        }
                        if (sVar18 < sVar19) {
                          sVar19 = sVar18;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        *(short *)((long)psVar67 + uVar78 + 0xc) = sVar19;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else {
          if (iVar63 <= iVar71) {
            if ((psVar67 < psVar76 + 8 && psVar76 < psVar66) || (uVar1 < 9)) {
              lVar58 = 0;
              do {
                psVar67[lVar58] = psVar76[lVar58];
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
            if (uVar1 < uVar79) {
              uVar79 = uVar1;
            }
            psVar56 = psVar76;
            if (uVar79 == 0) {
LAB_002032c8:
              uVar84 = (ulong)uVar79;
            }
            else {
              psVar56 = psVar76 + 1;
              psVar66[-8] = *psVar76;
              if (uVar79 == 1) goto LAB_002032c8;
              psVar66[-7] = psVar76[1];
              psVar56 = psVar76 + 2;
              if (uVar79 == 2) goto LAB_002032c8;
              psVar66[-6] = psVar76[2];
              psVar56 = psVar76 + 3;
              if (uVar79 == 3) goto LAB_002032c8;
              psVar66[-5] = psVar76[3];
              psVar56 = psVar76 + 4;
              if (uVar79 == 4) {
                uVar84 = 4;
              }
              else {
                psVar66[-4] = psVar76[4];
                psVar56 = psVar76 + 5;
                if (uVar79 == 5) goto LAB_002032c8;
                psVar66[-3] = psVar76[5];
                psVar56 = psVar76 + 6;
                if (uVar79 == 7) {
                  psVar56 = psVar76 + 7;
                  psVar66[-2] = psVar76[6];
                  uVar84 = 7;
                }
                else {
                  uVar84 = 6;
                }
              }
            }
            uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
            uVar81 = uVar65 * 8;
            if (6 < uVar43 - uVar79) {
              lVar58 = 0;
              uVar72 = 0;
              do {
                lVar68 = lVar58 + (ulong)uVar79 * 2;
                uVar72 = uVar72 + 1;
                puVar70 = (undefined8 *)((long)psVar67 + lVar68);
                lVar58 = lVar58 + 0x10;
                auVar88 = *(undefined1 (*) [16])((long)psVar76 + lVar68);
                puVar70[1] = auVar88._8_8_;
                *puVar70 = auVar88._0_8_;
              } while (uVar72 < uVar65);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar81 == uVar1 - uVar79) goto LAB_001fe290;
            }
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            iVar54 = (int)uVar84;
            *(short *)((long)psVar67 + uVar78) = *psVar56;
            if (((((iVar54 + 1 < (int)uVar1) &&
                  (*(short *)((long)psVar67 + uVar78 + 2) = psVar56[1], iVar54 + 2 < (int)uVar1)) &&
                 (*(short *)((long)psVar67 + uVar78 + 4) = psVar56[2], iVar54 + 3 < (int)uVar1)) &&
                ((*(short *)((long)psVar67 + uVar78 + 6) = psVar56[3], iVar54 + 4 < (int)uVar1 &&
                 (*(short *)((long)psVar67 + uVar78 + 8) = psVar56[4], iVar54 + 5 < (int)uVar1))))
               && (*(short *)((long)psVar67 + uVar78 + 10) = psVar56[5], iVar54 + 6 < (int)uVar1)) {
              *(short *)((long)psVar67 + uVar78 + 0xc) = psVar56[6];
            }
            goto LAB_001fe290;
          }
          if ((psVar67 < psVar76 + lVar75 + 8 && psVar76 + lVar75 < psVar66 ||
               psVar67 < psVar76 + 8 && psVar76 < psVar66) || (uVar1 < 9)) {
            lVar58 = 0;
            do {
              sVar19 = psVar76[lVar58];
              sVar20 = (psVar76 + lVar75)[lVar58];
              sVar18 = sVar20;
              if (sVar19 < sVar20) {
                sVar18 = sVar19;
              }
              sVar42 = sVar20;
              if (sVar20 < sVar19) {
                sVar42 = sVar19;
              }
              sVar21 = sVar18;
              if (sVar18 < sVar19) {
                sVar21 = sVar19;
              }
              sVar19 = sVar42;
              if (sVar42 < sVar20) {
                sVar19 = sVar20;
              }
              if (sVar19 < sVar21) {
                sVar21 = sVar19;
              }
              if (sVar18 < sVar42) {
                sVar42 = sVar18;
              }
              if (sVar42 < sVar21) {
                sVar42 = sVar21;
              }
              psVar67[lVar58] = sVar42;
              lVar58 = lVar58 + 1;
            } while ((int)lVar58 < (int)uVar1);
            goto LAB_001fe290;
          }
          uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
          if (uVar1 < uVar79) {
            uVar79 = uVar1;
          }
          psVar56 = psVar76;
          if (uVar79 == 0) {
LAB_00203018:
            uVar84 = (ulong)uVar79;
          }
          else {
            sVar19 = *psVar76;
            sVar18 = psVar76[lVar75];
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar18) {
              sVar42 = sVar18;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar18 < sVar42) {
              sVar18 = sVar42;
            }
            if (sVar18 < sVar19) {
              sVar19 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-8] = sVar20;
            psVar56 = psVar76 + 1;
            if (uVar79 == 1) goto LAB_00203018;
            sVar18 = (psVar76 + 1)[lVar75];
            sVar19 = psVar76[1];
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar18) {
              sVar42 = sVar18;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar18 < sVar42) {
              sVar18 = sVar42;
            }
            if (sVar18 < sVar19) {
              sVar19 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-7] = sVar20;
            psVar56 = psVar76 + 2;
            if (uVar79 == 2) goto LAB_00203018;
            sVar18 = (psVar76 + 2)[lVar75];
            sVar19 = psVar76[2];
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar18) {
              sVar42 = sVar18;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar18 < sVar42) {
              sVar18 = sVar42;
            }
            if (sVar18 < sVar19) {
              sVar19 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-6] = sVar20;
            psVar56 = psVar76 + 3;
            if (uVar79 == 3) goto LAB_00203018;
            sVar18 = (psVar76 + 3)[lVar75];
            psVar56 = psVar76 + 4;
            sVar19 = psVar76[3];
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar18) {
              sVar42 = sVar18;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar18 < sVar42) {
              sVar18 = sVar42;
            }
            if (sVar18 < sVar19) {
              sVar19 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-5] = sVar20;
            if (uVar79 == 4) {
              uVar84 = 4;
            }
            else {
              sVar18 = psVar56[lVar75];
              sVar19 = psVar76[4];
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar18) {
                sVar42 = sVar18;
              }
              if (sVar19 < sVar20) {
                sVar19 = sVar20;
              }
              if (sVar18 < sVar42) {
                sVar18 = sVar42;
              }
              if (sVar18 < sVar19) {
                sVar19 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar19) {
                sVar20 = sVar19;
              }
              psVar66[-4] = sVar20;
              psVar56 = psVar76 + 5;
              if (uVar79 == 5) goto LAB_00203018;
              sVar18 = (psVar76 + 5)[lVar75];
              psVar56 = psVar76 + 6;
              sVar19 = psVar76[5];
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar18) {
                sVar42 = sVar18;
              }
              if (sVar19 < sVar20) {
                sVar19 = sVar20;
              }
              if (sVar18 < sVar42) {
                sVar18 = sVar42;
              }
              if (sVar18 < sVar19) {
                sVar19 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar19) {
                sVar20 = sVar19;
              }
              psVar66[-3] = sVar20;
              if (uVar79 == 7) {
                sVar20 = psVar56[lVar75];
                uVar84 = 7;
                sVar19 = psVar76[6];
                psVar56 = psVar76 + 7;
                sVar18 = sVar20;
                if (sVar19 < sVar20) {
                  sVar18 = sVar19;
                }
                sVar42 = sVar20;
                if (sVar20 < sVar19) {
                  sVar42 = sVar19;
                }
                sVar21 = sVar18;
                if (sVar18 < sVar19) {
                  sVar21 = sVar19;
                }
                sVar19 = sVar42;
                if (sVar42 < sVar20) {
                  sVar19 = sVar20;
                }
                if (sVar19 < sVar21) {
                  sVar21 = sVar19;
                }
                if (sVar18 < sVar42) {
                  sVar42 = sVar18;
                }
                if (sVar42 < sVar21) {
                  sVar42 = sVar21;
                }
                psVar66[-2] = sVar42;
              }
              else {
                uVar84 = 6;
              }
            }
          }
          uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
          uVar81 = uVar65 * 8;
          if (6 < uVar43 - uVar79) {
            lVar68 = NEON_shl((ulong)uVar79,1);
            lVar58 = 0;
            uVar72 = 0;
            do {
              uVar72 = uVar72 + 1;
              psVar6 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar64);
              psVar52 = (short *)((long)psVar76 + lVar58 + (lVar75 + (ulong)uVar79) * 2);
              lVar147 = lVar58 + lVar68;
              lVar58 = lVar58 + 0x10;
              psVar8 = (short *)((long)psVar76 + lVar147);
              puVar70 = (undefined8 *)((long)psVar67 + lVar147);
              auVar90._0_4_ = (int)*psVar6;
              auVar90._4_4_ = (int)psVar6[1];
              auVar90._8_4_ = (int)psVar6[2];
              auVar90._12_4_ = (int)psVar6[3];
              auVar140._0_4_ = (int)*psVar52;
              auVar140._4_4_ = (int)psVar52[1];
              auVar140._8_4_ = (int)psVar52[2];
              auVar140._12_4_ = (int)psVar52[3];
              auVar89._0_4_ = (int)psVar6[4];
              auVar89._4_4_ = (int)psVar6[5];
              auVar89._8_4_ = (int)psVar6[6];
              auVar89._12_4_ = (int)psVar6[7];
              auVar88._0_4_ = (int)psVar52[4];
              auVar88._4_4_ = (int)psVar52[5];
              auVar88._8_4_ = (int)psVar52[6];
              auVar88._12_4_ = (int)psVar52[7];
              auVar174._0_4_ = (int)psVar8[4];
              auVar174._4_4_ = (int)psVar8[5];
              auVar174._8_4_ = (int)psVar8[6];
              auVar174._12_4_ = (int)psVar8[7];
              auVar87._0_4_ = (int)*psVar8;
              auVar87._4_4_ = (int)psVar8[1];
              auVar87._8_4_ = (int)psVar8[2];
              auVar87._12_4_ = (int)psVar8[3];
              auVar91 = NEON_smin(auVar140,auVar90,4);
              auVar166 = NEON_smin(auVar88,auVar89,4);
              auVar140 = NEON_smax(auVar140,auVar90,4);
              auVar88 = NEON_smax(auVar88,auVar89,4);
              auVar86 = NEON_smax(auVar91,auVar87,4);
              auVar98 = NEON_smax(auVar166,auVar174,4);
              auVar91 = NEON_smin(auVar91,auVar87,4);
              auVar166 = NEON_smin(auVar166,auVar174,4);
              auVar89 = NEON_smin(auVar140,auVar87,4);
              auVar90 = NEON_smax(auVar86,auVar140,4);
              auVar91 = NEON_smax(auVar91,auVar87,4);
              auVar166 = NEON_smax(auVar166,auVar174,4);
              auVar140 = NEON_smin(auVar88,auVar174,4);
              auVar88 = NEON_smax(auVar98,auVar88,4);
              auVar174 = NEON_smin(auVar89,auVar86,4);
              auVar91 = NEON_smin(auVar91,auVar90,4);
              auVar140 = NEON_smin(auVar140,auVar98,4);
              auVar88 = NEON_smin(auVar166,auVar88,4);
              auVar166 = NEON_smax(auVar174,auVar91,4);
              auVar88 = NEON_smax(auVar140,auVar88,4);
              auVar166._0_8_ =
                   CONCAT26(auVar166._12_2_,
                            CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
              auVar166._8_2_ = auVar88._0_2_;
              auVar166._10_2_ = auVar88._4_2_;
              auVar166._12_2_ = auVar88._8_2_;
              auVar166._14_2_ = auVar88._12_2_;
              puVar70[1] = auVar166._8_8_;
              *puVar70 = auVar166._0_8_;
            } while (uVar72 < uVar65);
            uVar84 = (ulong)((int)uVar84 + uVar81);
            psVar56 = psVar56 + uVar81;
            if (uVar81 == uVar1 - uVar79) goto LAB_001fe290;
          }
          sVar19 = *psVar56;
          uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
          sVar18 = psVar56[lVar75];
          iVar54 = (int)uVar84;
          sVar20 = sVar19;
          if (sVar18 < sVar19) {
            sVar20 = sVar18;
          }
          sVar42 = sVar19;
          if (sVar19 < sVar18) {
            sVar42 = sVar18;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (sVar18 < sVar42) {
            sVar18 = sVar42;
          }
          if (sVar18 < sVar19) {
            sVar19 = sVar18;
          }
          if (sVar42 < sVar20) {
            sVar20 = sVar42;
          }
          if (sVar20 < sVar19) {
            sVar20 = sVar19;
          }
          *(short *)((long)psVar67 + uVar78) = sVar20;
          if (iVar54 + 1 < (int)uVar1) {
            sVar19 = psVar56[1];
            sVar18 = psVar56[lVar75 + 1];
            sVar20 = sVar19;
            if (sVar18 < sVar19) {
              sVar20 = sVar18;
            }
            sVar42 = sVar19;
            if (sVar19 < sVar18) {
              sVar42 = sVar18;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar18 < sVar42) {
              sVar18 = sVar42;
            }
            if (sVar18 < sVar19) {
              sVar19 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
            if (iVar54 + 2 < (int)uVar1) {
              sVar18 = psVar56[lVar75 + 2];
              sVar19 = psVar56[2];
              sVar20 = sVar19;
              if (sVar18 < sVar19) {
                sVar20 = sVar18;
              }
              sVar42 = sVar19;
              if (sVar19 < sVar18) {
                sVar42 = sVar18;
              }
              if (sVar19 < sVar20) {
                sVar19 = sVar20;
              }
              if (sVar18 < sVar42) {
                sVar18 = sVar42;
              }
              if (sVar18 < sVar19) {
                sVar19 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar20 < sVar19) {
                sVar20 = sVar19;
              }
              *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
              if (iVar54 + 3 < (int)uVar1) {
                sVar18 = psVar56[lVar75 + 3];
                sVar19 = psVar56[3];
                sVar20 = sVar19;
                if (sVar18 < sVar19) {
                  sVar20 = sVar18;
                }
                sVar42 = sVar19;
                if (sVar19 < sVar18) {
                  sVar42 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar20 < sVar19) {
                  sVar20 = sVar19;
                }
                *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                if (iVar54 + 4 < (int)uVar1) {
                  sVar18 = psVar56[lVar75 + 4];
                  sVar19 = psVar56[4];
                  sVar20 = sVar19;
                  if (sVar18 < sVar19) {
                    sVar20 = sVar18;
                  }
                  sVar42 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar42 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  if (sVar18 < sVar42) {
                    sVar18 = sVar42;
                  }
                  if (sVar18 < sVar19) {
                    sVar19 = sVar18;
                  }
                  if (sVar42 < sVar20) {
                    sVar20 = sVar42;
                  }
                  if (sVar20 < sVar19) {
                    sVar20 = sVar19;
                  }
                  *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                  if (iVar54 + 5 < (int)uVar1) {
                    sVar19 = psVar56[5];
                    sVar18 = psVar56[lVar75 + 5];
                    sVar20 = sVar19;
                    if (sVar18 < sVar19) {
                      sVar20 = sVar18;
                    }
                    sVar42 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar42 = sVar18;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    if (sVar18 < sVar42) {
                      sVar18 = sVar42;
                    }
                    if (sVar18 < sVar19) {
                      sVar19 = sVar18;
                    }
                    if (sVar42 < sVar20) {
                      sVar20 = sVar42;
                    }
                    if (sVar20 < sVar19) {
                      sVar20 = sVar19;
                    }
                    *(short *)((long)psVar67 + uVar78 + 10) = sVar20;
                    if (iVar54 + 6 < (int)uVar1) {
                      sVar19 = psVar56[6];
                      sVar20 = psVar56[lVar75 + 6];
                      sVar18 = sVar20;
                      if (sVar19 < sVar20) {
                        sVar18 = sVar19;
                      }
                      sVar42 = sVar20;
                      if (sVar20 < sVar19) {
                        sVar42 = sVar19;
                      }
                      sVar21 = sVar18;
                      if (sVar18 < sVar19) {
                        sVar21 = sVar19;
                      }
                      sVar19 = sVar42;
                      if (sVar42 < sVar20) {
                        sVar19 = sVar20;
                      }
                      if (sVar19 < sVar21) {
                        sVar21 = sVar19;
                      }
                      if (sVar18 < sVar42) {
                        sVar42 = sVar18;
                      }
                      if (sVar42 < sVar21) {
                        sVar42 = sVar21;
                      }
                      *(short *)((long)psVar67 + uVar78 + 0xc) = sVar42;
                    }
                  }
                }
              }
            }
          }
        }
      }
      else {
        psVar56 = psVar76 + lVar73 + 8;
        if (iVar71 < iVar60 + -3) {
          if (iVar71 < iVar63) {
            if (iVar71 < 2) {
              psVar6 = psVar76 + lVar73;
              if (((uVar1 < 9 ||
                   (psVar67 < psVar56 && psVar6 < psVar66 ||
                   psVar67 < (short *)((long)psVar76 + lVar61) &&
                   (short *)((long)psVar76 + uVar83) < psVar66)) ||
                   psVar67 < psVar76 + lVar75 + 8 && psVar76 + lVar75 < psVar66) ||
                 (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
                lVar58 = 0;
                do {
                  sVar42 = (psVar76 + lVar75)[lVar58];
                  sVar18 = ((short *)((long)psVar76 + uVar83))[lVar58];
                  sVar21 = psVar76[lVar58];
                  sVar20 = psVar6[lVar58];
                  sVar19 = sVar18;
                  if (sVar42 < sVar18) {
                    sVar19 = sVar42;
                  }
                  if (sVar18 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar42 = sVar19;
                  if (sVar21 < sVar19) {
                    sVar42 = sVar21;
                  }
                  if (sVar19 < sVar21) {
                    sVar19 = sVar21;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar21 = sVar42;
                  }
                  sVar42 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar42 = sVar18;
                  }
                  if (sVar42 < sVar21) {
                    sVar21 = sVar42;
                  }
                  if (sVar18 < sVar20) {
                    sVar20 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar21) {
                    sVar20 = sVar21;
                  }
                  psVar67[lVar58] = sVar20;
                  lVar58 = lVar58 + 1;
                } while ((int)lVar58 < (int)uVar1);
                goto LAB_001fe290;
              }
              uVar79 = -((uint)((ulong)psVar6 >> 1) & 7) & 7;
              uVar65 = uVar1;
              if (uVar79 < uVar1) {
                uVar65 = uVar79;
              }
              psVar56 = psVar76;
              if (uVar65 == 0) {
LAB_001fec30:
                uVar84 = (ulong)uVar65;
              }
              else {
                sVar21 = psVar76[lVar75];
                psVar56 = psVar76 + 1;
                sVar18 = *(short *)((long)psVar76 + uVar83);
                sVar42 = *psVar76;
                sVar20 = psVar76[lVar73];
                sVar19 = sVar18;
                if (sVar21 < sVar18) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar21) {
                  sVar18 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar42 < sVar19) {
                  sVar21 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar20 < sVar21) {
                  sVar42 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar18 < sVar20) {
                  sVar20 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                psVar66[-8] = sVar20;
                if (uVar65 == 1) goto LAB_001fec30;
                sVar21 = psVar56[lVar75];
                sVar18 = *(short *)((long)psVar56 + uVar83);
                sVar42 = psVar76[1];
                sVar20 = psVar56[lVar73];
                sVar19 = sVar18;
                if (sVar21 < sVar18) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar21) {
                  sVar18 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar42 < sVar19) {
                  sVar21 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar20 < sVar21) {
                  sVar42 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                psVar56 = psVar76 + 2;
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar18 < sVar20) {
                  sVar20 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                psVar66[-7] = sVar20;
                if (uVar65 == 2) goto LAB_001fec30;
                sVar21 = psVar56[lVar75];
                sVar18 = *(short *)((long)psVar56 + uVar83);
                sVar42 = psVar76[2];
                sVar20 = psVar56[lVar73];
                sVar19 = sVar18;
                if (sVar21 < sVar18) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar21) {
                  sVar18 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar42 < sVar19) {
                  sVar21 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar20 < sVar21) {
                  sVar42 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                psVar56 = psVar76 + 3;
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar18 < sVar20) {
                  sVar20 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                psVar66[-6] = sVar20;
                if (uVar65 != 3) {
                  sVar21 = psVar56[lVar75];
                  sVar18 = *(short *)((long)psVar56 + uVar83);
                  sVar42 = psVar76[3];
                  sVar20 = psVar56[lVar73];
                  sVar19 = sVar18;
                  if (sVar21 < sVar18) {
                    sVar19 = sVar21;
                  }
                  if (sVar18 < sVar21) {
                    sVar18 = sVar21;
                  }
                  sVar21 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar21 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar42 = sVar20;
                  if (sVar20 < sVar21) {
                    sVar42 = sVar21;
                  }
                  sVar21 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar21 = sVar18;
                  }
                  psVar56 = psVar76 + 4;
                  if (sVar21 < sVar42) {
                    sVar42 = sVar21;
                  }
                  if (sVar18 < sVar20) {
                    sVar20 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar42) {
                    sVar20 = sVar42;
                  }
                  psVar66[-5] = sVar20;
                  if (uVar65 != 4) {
                    sVar21 = psVar56[lVar75];
                    sVar18 = *(short *)((long)psVar56 + uVar83);
                    sVar42 = psVar76[4];
                    sVar20 = psVar56[lVar73];
                    sVar19 = sVar18;
                    if (sVar21 < sVar18) {
                      sVar19 = sVar21;
                    }
                    if (sVar18 < sVar21) {
                      sVar18 = sVar21;
                    }
                    sVar21 = sVar19;
                    if (sVar42 < sVar19) {
                      sVar21 = sVar42;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    sVar42 = sVar20;
                    if (sVar20 < sVar21) {
                      sVar42 = sVar21;
                    }
                    sVar21 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar21 = sVar18;
                    }
                    psVar56 = psVar76 + 5;
                    if (sVar21 < sVar42) {
                      sVar42 = sVar21;
                    }
                    if (sVar18 < sVar20) {
                      sVar20 = sVar18;
                    }
                    if (sVar19 < sVar20) {
                      sVar20 = sVar19;
                    }
                    if (sVar20 < sVar42) {
                      sVar20 = sVar42;
                    }
                    psVar66[-4] = sVar20;
                    if (uVar65 != 5) {
                      sVar21 = psVar56[lVar75];
                      sVar18 = *(short *)((long)psVar56 + uVar83);
                      sVar42 = psVar76[5];
                      sVar20 = psVar56[lVar73];
                      sVar19 = sVar18;
                      if (sVar21 < sVar18) {
                        sVar19 = sVar21;
                      }
                      if (sVar18 < sVar21) {
                        sVar18 = sVar21;
                      }
                      sVar21 = sVar19;
                      if (sVar42 < sVar19) {
                        sVar21 = sVar42;
                      }
                      if (sVar19 < sVar42) {
                        sVar19 = sVar42;
                      }
                      sVar42 = sVar20;
                      if (sVar20 < sVar21) {
                        sVar42 = sVar21;
                      }
                      sVar21 = sVar19;
                      if (sVar19 < sVar18) {
                        sVar21 = sVar18;
                      }
                      psVar56 = psVar76 + 6;
                      if (sVar21 < sVar42) {
                        sVar42 = sVar21;
                      }
                      if (sVar18 < sVar20) {
                        sVar20 = sVar18;
                      }
                      if (sVar19 < sVar20) {
                        sVar20 = sVar19;
                      }
                      if (sVar20 < sVar42) {
                        sVar20 = sVar42;
                      }
                      psVar66[-3] = sVar20;
                      if (uVar65 == 7) {
                        sVar21 = psVar56[lVar75];
                        uVar84 = 7;
                        sVar18 = *(short *)((long)psVar56 + uVar83);
                        sVar42 = psVar76[6];
                        sVar20 = psVar56[lVar73];
                        sVar19 = sVar18;
                        if (sVar21 < sVar18) {
                          sVar19 = sVar21;
                        }
                        if (sVar18 < sVar21) {
                          sVar18 = sVar21;
                        }
                        sVar21 = sVar19;
                        if (sVar42 < sVar19) {
                          sVar21 = sVar42;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        sVar42 = sVar20;
                        if (sVar20 < sVar21) {
                          sVar42 = sVar21;
                        }
                        sVar21 = sVar19;
                        if (sVar19 < sVar18) {
                          sVar21 = sVar18;
                        }
                        psVar56 = psVar76 + 7;
                        if (sVar21 < sVar42) {
                          sVar42 = sVar21;
                        }
                        if (sVar18 < sVar20) {
                          sVar20 = sVar18;
                        }
                        if (sVar19 < sVar20) {
                          sVar20 = sVar19;
                        }
                        if (sVar20 < sVar42) {
                          sVar20 = sVar42;
                        }
                        psVar66[-2] = sVar20;
                      }
                      else {
                        uVar84 = 6;
                      }
                      goto LAB_001fe778;
                    }
                  }
                  goto LAB_001fec30;
                }
                uVar84 = 3;
              }
LAB_001fe778:
              uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
              uVar81 = uVar79 * 8;
              if (6 < uVar43 - uVar65) {
                lVar68 = (ulong)uVar65 * 2;
                lVar58 = 0;
                uVar72 = 0;
                lVar147 = NEON_shl(lVar73 + (ulong)uVar65,1);
                do {
                  uVar72 = uVar72 + 1;
                  lVar149 = lVar58 + lVar68 + lVar62;
                  psVar6 = (short *)((long)psVar76 + lVar58 + uVar83 + lVar68);
                  psVar52 = (short *)((long)psVar76 + lVar58 + lVar64 + lVar68);
                  lVar7 = lVar58 + lVar68;
                  lVar10 = lVar58 + lVar147;
                  auVar126._0_4_ = (int)*psVar52;
                  auVar126._4_4_ = (int)psVar52[1];
                  auVar126._8_4_ = (int)psVar52[2];
                  auVar126._12_4_ = (int)psVar52[3];
                  auVar122._0_4_ = (int)psVar52[4];
                  auVar122._4_4_ = (int)psVar52[5];
                  auVar122._8_4_ = (int)psVar52[6];
                  auVar122._12_4_ = (int)psVar52[7];
                  lVar58 = lVar58 + 0x10;
                  psVar52 = (short *)((long)psVar76 + lVar149);
                  auVar116._0_4_ = (int)*psVar6;
                  auVar116._4_4_ = (int)psVar6[1];
                  auVar116._8_4_ = (int)psVar6[2];
                  auVar116._12_4_ = (int)psVar6[3];
                  auVar94._0_4_ = (int)psVar6[4];
                  auVar94._4_4_ = (int)psVar6[5];
                  auVar94._8_4_ = (int)psVar6[6];
                  auVar94._12_4_ = (int)psVar6[7];
                  psVar6 = (short *)((long)psVar76 + lVar10);
                  psVar8 = (short *)((long)psVar76 + lVar7);
                  puVar70 = (undefined8 *)((long)psVar67 + lVar7);
                  auVar91 = NEON_smin(auVar116,auVar126,4);
                  auVar174 = NEON_smax(auVar116,auVar126,4);
                  auVar109._0_4_ = (int)*psVar52;
                  auVar109._4_4_ = (int)psVar52[1];
                  auVar109._8_4_ = (int)psVar52[2];
                  auVar109._12_4_ = (int)psVar52[3];
                  auVar170._0_4_ = (int)*psVar8;
                  auVar170._4_4_ = (int)psVar8[1];
                  auVar170._8_4_ = (int)psVar8[2];
                  auVar170._12_4_ = (int)psVar8[3];
                  auVar156._0_4_ = (int)psVar8[4];
                  auVar156._4_4_ = (int)psVar8[5];
                  auVar156._8_4_ = (int)psVar8[6];
                  auVar156._12_4_ = (int)psVar8[7];
                  auVar142._0_4_ = (int)psVar52[4];
                  auVar142._4_4_ = (int)psVar52[5];
                  auVar142._8_4_ = (int)psVar52[6];
                  auVar142._12_4_ = (int)psVar52[7];
                  auVar166 = NEON_smin(auVar94,auVar122,4);
                  auVar163._0_4_ = (int)*psVar6;
                  auVar163._4_4_ = (int)psVar6[1];
                  auVar163._8_4_ = (int)psVar6[2];
                  auVar163._12_4_ = (int)psVar6[3];
                  auVar134._0_4_ = (int)psVar6[4];
                  auVar134._4_4_ = (int)psVar6[5];
                  auVar134._8_4_ = (int)psVar6[6];
                  auVar134._12_4_ = (int)psVar6[7];
                  auVar88 = NEON_smax(auVar94,auVar122,4);
                  auVar86 = NEON_smax(auVar91,auVar170,4);
                  auVar98 = NEON_smax(auVar166,auVar156,4);
                  auVar90 = NEON_smax(auVar163,auVar109,4);
                  auVar91 = NEON_smin(auVar91,auVar170,4);
                  auVar140 = NEON_smax(auVar134,auVar142,4);
                  auVar87 = NEON_smin(auVar163,auVar109,4);
                  auVar166 = NEON_smin(auVar166,auVar156,4);
                  auVar89 = NEON_smin(auVar134,auVar142,4);
                  auVar90 = NEON_smin(auVar174,auVar90,4);
                  auVar91 = NEON_smax(auVar91,auVar87,4);
                  auVar140 = NEON_smin(auVar88,auVar140,4);
                  auVar166 = NEON_smax(auVar166,auVar89,4);
                  auVar174 = NEON_smax(auVar86,auVar174,4);
                  auVar88 = NEON_smax(auVar98,auVar88,4);
                  auVar90 = NEON_smin(auVar90,auVar86,4);
                  auVar91 = NEON_smin(auVar91,auVar174,4);
                  auVar88 = NEON_smin(auVar166,auVar88,4);
                  auVar140 = NEON_smin(auVar140,auVar98,4);
                  auVar166 = NEON_smax(auVar90,auVar91,4);
                  auVar88 = NEON_smax(auVar140,auVar88,4);
                  auVar101._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar101._8_2_ = auVar88._0_2_;
                  auVar101._10_2_ = auVar88._4_2_;
                  auVar101._12_2_ = auVar88._8_2_;
                  auVar101._14_2_ = auVar88._12_2_;
                  puVar70[1] = auVar101._8_8_;
                  *puVar70 = auVar101._0_8_;
                } while (uVar72 < uVar79);
                uVar84 = (ulong)((int)uVar84 + uVar81);
                psVar56 = psVar56 + uVar81;
                if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
              }
              sVar21 = psVar56[lVar75];
              uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
              sVar18 = *(short *)((long)psVar56 + uVar83);
              iVar54 = (int)uVar84;
              sVar42 = *psVar56;
              sVar20 = psVar56[lVar73];
              sVar19 = sVar18;
              if (sVar21 < sVar18) {
                sVar19 = sVar21;
              }
              if (sVar18 < sVar21) {
                sVar18 = sVar21;
              }
              sVar21 = sVar19;
              if (sVar42 < sVar19) {
                sVar21 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar20 < sVar21) {
                sVar42 = sVar21;
              }
              sVar21 = sVar19;
              if (sVar19 < sVar18) {
                sVar21 = sVar18;
              }
              if (sVar21 < sVar42) {
                sVar42 = sVar21;
              }
              if (sVar18 < sVar20) {
                sVar20 = sVar18;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar42) {
                sVar20 = sVar42;
              }
              *(short *)((long)psVar67 + uVar78) = sVar20;
              if (iVar54 + 1 < (int)uVar1) {
                sVar21 = psVar56[lVar75 + 1];
                sVar18 = *(short *)((long)psVar56 + uVar83 + 2);
                sVar42 = psVar56[1];
                sVar20 = psVar56[lVar73 + 1];
                sVar19 = sVar18;
                if (sVar21 < sVar18) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar21) {
                  sVar18 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar42 < sVar19) {
                  sVar21 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar42 = sVar20;
                if (sVar20 < sVar21) {
                  sVar42 = sVar21;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar18) {
                  sVar21 = sVar18;
                }
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar18 < sVar20) {
                  sVar20 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
                if (iVar54 + 2 < (int)uVar1) {
                  sVar21 = psVar56[lVar75 + 2];
                  sVar18 = *(short *)((long)psVar56 + uVar83 + 4);
                  sVar42 = psVar56[2];
                  sVar20 = psVar56[lVar73 + 2];
                  sVar19 = sVar18;
                  if (sVar21 < sVar18) {
                    sVar19 = sVar21;
                  }
                  if (sVar18 < sVar21) {
                    sVar18 = sVar21;
                  }
                  sVar21 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar21 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar42 = sVar20;
                  if (sVar20 < sVar21) {
                    sVar42 = sVar21;
                  }
                  sVar21 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar21 = sVar18;
                  }
                  if (sVar21 < sVar42) {
                    sVar42 = sVar21;
                  }
                  if (sVar18 < sVar20) {
                    sVar20 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar42) {
                    sVar20 = sVar42;
                  }
                  *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
                  if (iVar54 + 3 < (int)uVar1) {
                    sVar21 = psVar56[lVar75 + 3];
                    sVar18 = *(short *)((long)psVar56 + uVar83 + 6);
                    sVar42 = psVar56[3];
                    sVar20 = psVar56[lVar73 + 3];
                    sVar19 = sVar18;
                    if (sVar21 < sVar18) {
                      sVar19 = sVar21;
                    }
                    if (sVar18 < sVar21) {
                      sVar18 = sVar21;
                    }
                    sVar21 = sVar19;
                    if (sVar42 < sVar19) {
                      sVar21 = sVar42;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    sVar42 = sVar20;
                    if (sVar20 < sVar21) {
                      sVar42 = sVar21;
                    }
                    sVar21 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar21 = sVar18;
                    }
                    if (sVar21 < sVar42) {
                      sVar42 = sVar21;
                    }
                    if (sVar18 < sVar20) {
                      sVar20 = sVar18;
                    }
                    if (sVar19 < sVar20) {
                      sVar20 = sVar19;
                    }
                    if (sVar20 < sVar42) {
                      sVar20 = sVar42;
                    }
                    *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                    if (iVar54 + 4 < (int)uVar1) {
                      sVar21 = psVar56[lVar75 + 4];
                      sVar18 = *(short *)((long)psVar56 + uVar83 + 8);
                      sVar42 = psVar56[4];
                      sVar20 = psVar56[lVar73 + 4];
                      sVar19 = sVar18;
                      if (sVar21 < sVar18) {
                        sVar19 = sVar21;
                      }
                      if (sVar18 < sVar21) {
                        sVar18 = sVar21;
                      }
                      sVar21 = sVar19;
                      if (sVar42 < sVar19) {
                        sVar21 = sVar42;
                      }
                      if (sVar19 < sVar42) {
                        sVar19 = sVar42;
                      }
                      sVar42 = sVar20;
                      if (sVar20 < sVar21) {
                        sVar42 = sVar21;
                      }
                      sVar21 = sVar19;
                      if (sVar19 < sVar18) {
                        sVar21 = sVar18;
                      }
                      if (sVar21 < sVar42) {
                        sVar42 = sVar21;
                      }
                      if (sVar18 < sVar20) {
                        sVar20 = sVar18;
                      }
                      if (sVar19 < sVar20) {
                        sVar20 = sVar19;
                      }
                      if (sVar20 < sVar42) {
                        sVar20 = sVar42;
                      }
                      *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                      if (iVar54 + 5 < (int)uVar1) {
                        sVar21 = psVar56[lVar75 + 5];
                        sVar18 = *(short *)((long)psVar56 + uVar83 + 10);
                        sVar42 = psVar56[5];
                        sVar20 = psVar56[lVar73 + 5];
                        sVar19 = sVar18;
                        if (sVar21 < sVar18) {
                          sVar19 = sVar21;
                        }
                        if (sVar18 < sVar21) {
                          sVar18 = sVar21;
                        }
                        sVar21 = sVar19;
                        if (sVar42 < sVar19) {
                          sVar21 = sVar42;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        sVar42 = sVar20;
                        if (sVar20 < sVar21) {
                          sVar42 = sVar21;
                        }
                        sVar21 = sVar19;
                        if (sVar19 < sVar18) {
                          sVar21 = sVar18;
                        }
                        if (sVar21 < sVar42) {
                          sVar42 = sVar21;
                        }
                        if (sVar18 < sVar20) {
                          sVar20 = sVar18;
                        }
                        if (sVar19 < sVar20) {
                          sVar20 = sVar19;
                        }
                        if (sVar20 < sVar42) {
                          sVar20 = sVar42;
                        }
                        *(short *)((long)psVar67 + uVar78 + 10) = sVar20;
                        if (iVar54 + 6 < (int)uVar1) {
                          sVar21 = psVar56[lVar75 + 6];
                          sVar18 = *(short *)((long)psVar56 + uVar83 + 0xc);
                          sVar42 = psVar56[6];
                          sVar20 = psVar56[lVar73 + 6];
                          sVar19 = sVar18;
                          if (sVar21 < sVar18) {
                            sVar19 = sVar21;
                          }
                          if (sVar18 < sVar21) {
                            sVar18 = sVar21;
                          }
                          sVar21 = sVar19;
                          if (sVar42 < sVar19) {
                            sVar21 = sVar42;
                          }
                          if (sVar19 < sVar42) {
                            sVar19 = sVar42;
                          }
                          sVar42 = sVar20;
                          if (sVar20 < sVar21) {
                            sVar42 = sVar21;
                          }
                          sVar21 = sVar19;
                          if (sVar19 < sVar18) {
                            sVar21 = sVar18;
                          }
                          if (sVar21 < sVar42) {
                            sVar42 = sVar21;
                          }
                          if (sVar18 < sVar20) {
                            sVar20 = sVar18;
                          }
                          if (sVar19 < sVar20) {
                            sVar20 = sVar19;
                          }
                          if (sVar20 < sVar42) {
                            sVar20 = sVar42;
                          }
                          *(short *)((long)psVar67 + uVar78 + 0xc) = sVar20;
                        }
                      }
                    }
                  }
                }
              }
            }
            else {
              psVar6 = (short *)((long)psVar76 + uVar82);
              if ((((uVar1 < 9 ||
                    (psVar67 < psVar56 && psVar76 + lVar73 < psVar66 ||
                    psVar67 < (short *)((long)psVar76 + lVar57) && psVar6 < psVar66)) ||
                   psVar67 < (short *)((long)psVar76 + lVar61) &&
                   (short *)((long)psVar76 + uVar83) < psVar66) ||
                   psVar67 < psVar76 + lVar75 + 8 && psVar76 + lVar75 < psVar66) ||
                 (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
                lVar58 = 0;
                do {
                  sVar42 = psVar76[lVar58];
                  sVar21 = psVar6[lVar58];
                  sVar20 = (psVar76 + lVar73)[lVar58];
                  sVar22 = (psVar76 + lVar75)[lVar58];
                  sVar18 = ((short *)((long)psVar76 + uVar83))[lVar58];
                  sVar19 = sVar18;
                  if (sVar22 < sVar18) {
                    sVar19 = sVar22;
                  }
                  if (sVar18 < sVar22) {
                    sVar18 = sVar22;
                  }
                  sVar22 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar22 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar42 = sVar20;
                  if (sVar20 < sVar21) {
                    sVar42 = sVar21;
                  }
                  sVar23 = sVar18;
                  if (sVar42 < sVar18) {
                    sVar23 = sVar42;
                  }
                  if (sVar21 < sVar20) {
                    sVar20 = sVar21;
                  }
                  if (sVar22 < sVar20) {
                    sVar22 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar20 = sVar18;
                  }
                  if (sVar20 < sVar22) {
                    sVar22 = sVar20;
                  }
                  if (sVar19 < sVar23) {
                    sVar23 = sVar19;
                  }
                  if (sVar23 < sVar22) {
                    sVar23 = sVar22;
                  }
                  psVar67[lVar58] = sVar23;
                  lVar58 = lVar58 + 1;
                } while ((int)lVar58 < (int)uVar1);
                goto LAB_001fe290;
              }
              uVar79 = -((uint)((ulong)psVar6 >> 1) & 7) & 7;
              uVar65 = uVar1;
              if (uVar79 < uVar1) {
                uVar65 = uVar79;
              }
              psVar56 = psVar76;
              if (uVar65 == 0) {
LAB_001fe2c4:
                uVar84 = (ulong)uVar65;
              }
              else {
                sVar42 = psVar76[lVar75];
                psVar56 = psVar76 + 1;
                sVar18 = *(short *)((long)psVar76 + uVar83);
                sVar20 = *psVar76;
                sVar21 = *(short *)((long)psVar76 + uVar82);
                sVar19 = sVar18;
                if (sVar42 < sVar18) {
                  sVar19 = sVar42;
                }
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = psVar76[lVar73];
                sVar22 = sVar19;
                if (sVar20 < sVar19) {
                  sVar22 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                sVar20 = sVar42;
                if (sVar42 < sVar21) {
                  sVar20 = sVar21;
                }
                sVar23 = sVar18;
                if (sVar20 < sVar18) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar22 < sVar42) {
                  sVar22 = sVar42;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar22) {
                  sVar22 = sVar20;
                }
                if (sVar19 < sVar23) {
                  sVar23 = sVar19;
                }
                if (sVar23 < sVar22) {
                  sVar23 = sVar22;
                }
                psVar66[-8] = sVar23;
                if (uVar65 == 1) goto LAB_001fe2c4;
                sVar42 = psVar56[lVar75];
                sVar18 = *(short *)((long)psVar56 + uVar83);
                sVar20 = psVar76[1];
                sVar21 = *(short *)((long)psVar56 + uVar82);
                sVar19 = sVar18;
                if (sVar42 < sVar18) {
                  sVar19 = sVar42;
                }
                sVar22 = psVar56[lVar73];
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                psVar56 = psVar76 + 2;
                sVar42 = sVar19;
                if (sVar20 < sVar19) {
                  sVar42 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                sVar20 = sVar22;
                if (sVar22 < sVar21) {
                  sVar20 = sVar21;
                }
                sVar23 = sVar18;
                if (sVar20 < sVar18) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar22) {
                  sVar22 = sVar21;
                }
                if (sVar42 < sVar22) {
                  sVar42 = sVar22;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar42) {
                  sVar42 = sVar20;
                }
                if (sVar19 < sVar23) {
                  sVar23 = sVar19;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                psVar66[-7] = sVar23;
                if (uVar65 == 2) goto LAB_001fe2c4;
                sVar42 = psVar56[lVar75];
                sVar18 = *(short *)((long)psVar56 + uVar83);
                sVar20 = psVar76[2];
                sVar21 = *(short *)((long)psVar56 + uVar82);
                sVar19 = sVar18;
                if (sVar42 < sVar18) {
                  sVar19 = sVar42;
                }
                sVar22 = psVar56[lVar73];
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                psVar56 = psVar76 + 3;
                sVar42 = sVar19;
                if (sVar20 < sVar19) {
                  sVar42 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                sVar20 = sVar22;
                if (sVar22 < sVar21) {
                  sVar20 = sVar21;
                }
                sVar23 = sVar18;
                if (sVar20 < sVar18) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar22) {
                  sVar22 = sVar21;
                }
                if (sVar42 < sVar22) {
                  sVar42 = sVar22;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar42) {
                  sVar42 = sVar20;
                }
                if (sVar19 < sVar23) {
                  sVar23 = sVar19;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                psVar66[-6] = sVar23;
                if (uVar65 != 3) {
                  sVar42 = psVar56[lVar75];
                  sVar18 = *(short *)((long)psVar56 + uVar83);
                  sVar20 = psVar76[3];
                  sVar21 = *(short *)((long)psVar56 + uVar82);
                  sVar19 = sVar18;
                  if (sVar42 < sVar18) {
                    sVar19 = sVar42;
                  }
                  sVar22 = psVar56[lVar73];
                  if (sVar18 < sVar42) {
                    sVar18 = sVar42;
                  }
                  psVar56 = psVar76 + 4;
                  sVar42 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar42 = sVar20;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  sVar20 = sVar22;
                  if (sVar22 < sVar21) {
                    sVar20 = sVar21;
                  }
                  sVar23 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar23 = sVar20;
                  }
                  if (sVar21 < sVar22) {
                    sVar22 = sVar21;
                  }
                  if (sVar42 < sVar22) {
                    sVar42 = sVar22;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar20 = sVar18;
                  }
                  if (sVar20 < sVar42) {
                    sVar42 = sVar20;
                  }
                  if (sVar19 < sVar23) {
                    sVar23 = sVar19;
                  }
                  if (sVar23 < sVar42) {
                    sVar23 = sVar42;
                  }
                  psVar66[-5] = sVar23;
                  if (uVar65 != 4) {
                    sVar42 = psVar56[lVar75];
                    sVar18 = *(short *)((long)psVar56 + uVar83);
                    sVar20 = psVar76[4];
                    sVar21 = *(short *)((long)psVar56 + uVar82);
                    sVar19 = sVar18;
                    if (sVar42 < sVar18) {
                      sVar19 = sVar42;
                    }
                    sVar22 = psVar56[lVar73];
                    if (sVar18 < sVar42) {
                      sVar18 = sVar42;
                    }
                    psVar56 = psVar76 + 5;
                    sVar42 = sVar19;
                    if (sVar20 < sVar19) {
                      sVar42 = sVar20;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    sVar20 = sVar22;
                    if (sVar22 < sVar21) {
                      sVar20 = sVar21;
                    }
                    sVar23 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar23 = sVar20;
                    }
                    if (sVar21 < sVar22) {
                      sVar22 = sVar21;
                    }
                    if (sVar42 < sVar22) {
                      sVar42 = sVar22;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar20 = sVar18;
                    }
                    if (sVar20 < sVar42) {
                      sVar42 = sVar20;
                    }
                    if (sVar19 < sVar23) {
                      sVar23 = sVar19;
                    }
                    if (sVar23 < sVar42) {
                      sVar23 = sVar42;
                    }
                    psVar66[-4] = sVar23;
                    if (uVar65 != 5) {
                      sVar42 = psVar56[lVar75];
                      sVar18 = *(short *)((long)psVar56 + uVar83);
                      sVar20 = psVar76[5];
                      sVar21 = *(short *)((long)psVar56 + uVar82);
                      sVar19 = sVar18;
                      if (sVar42 < sVar18) {
                        sVar19 = sVar42;
                      }
                      sVar22 = psVar56[lVar73];
                      if (sVar18 < sVar42) {
                        sVar18 = sVar42;
                      }
                      psVar56 = psVar76 + 6;
                      sVar42 = sVar19;
                      if (sVar20 < sVar19) {
                        sVar42 = sVar20;
                      }
                      if (sVar19 < sVar20) {
                        sVar19 = sVar20;
                      }
                      sVar20 = sVar22;
                      if (sVar22 < sVar21) {
                        sVar20 = sVar21;
                      }
                      sVar23 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar23 = sVar20;
                      }
                      if (sVar21 < sVar22) {
                        sVar22 = sVar21;
                      }
                      if (sVar42 < sVar22) {
                        sVar42 = sVar22;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar18) {
                        sVar20 = sVar18;
                      }
                      if (sVar20 < sVar42) {
                        sVar42 = sVar20;
                      }
                      if (sVar19 < sVar23) {
                        sVar23 = sVar19;
                      }
                      if (sVar23 < sVar42) {
                        sVar23 = sVar42;
                      }
                      psVar66[-3] = sVar23;
                      if (uVar65 == 7) {
                        sVar42 = psVar56[lVar75];
                        uVar84 = 7;
                        sVar18 = *(short *)((long)psVar56 + uVar83);
                        sVar20 = psVar76[6];
                        sVar21 = *(short *)((long)psVar56 + uVar82);
                        sVar19 = sVar18;
                        if (sVar42 < sVar18) {
                          sVar19 = sVar42;
                        }
                        sVar22 = psVar56[lVar73];
                        if (sVar18 < sVar42) {
                          sVar18 = sVar42;
                        }
                        psVar56 = psVar76 + 7;
                        sVar42 = sVar19;
                        if (sVar20 < sVar19) {
                          sVar42 = sVar20;
                        }
                        if (sVar19 < sVar20) {
                          sVar19 = sVar20;
                        }
                        sVar20 = sVar22;
                        if (sVar22 < sVar21) {
                          sVar20 = sVar21;
                        }
                        sVar23 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar23 = sVar20;
                        }
                        if (sVar21 < sVar22) {
                          sVar22 = sVar21;
                        }
                        if (sVar42 < sVar22) {
                          sVar42 = sVar22;
                        }
                        sVar20 = sVar19;
                        if (sVar19 < sVar18) {
                          sVar20 = sVar18;
                        }
                        if (sVar20 < sVar42) {
                          sVar42 = sVar20;
                        }
                        if (sVar19 < sVar23) {
                          sVar23 = sVar19;
                        }
                        if (sVar23 < sVar42) {
                          sVar23 = sVar42;
                        }
                        psVar66[-2] = sVar23;
                      }
                      else {
                        uVar84 = 6;
                      }
                      goto LAB_001fdd5c;
                    }
                  }
                  goto LAB_001fe2c4;
                }
                uVar84 = 3;
              }
LAB_001fdd5c:
              uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
              uVar81 = uVar79 * 8;
              if (6 < uVar43 - uVar65) {
                lVar68 = (ulong)uVar65 * 2;
                lVar58 = 0;
                uVar72 = 0;
                do {
                  uVar72 = uVar72 + 1;
                  psVar6 = (short *)((long)psVar76 + lVar58 + uVar83 + lVar68);
                  lVar147 = lVar58 + lVar68;
                  psVar52 = (short *)((long)psVar76 + lVar58 + lVar64 + lVar68);
                  lVar149 = lVar58 + lVar68 + uVar82;
                  lVar7 = lVar58 + lVar62 + lVar68;
                  auVar125._0_4_ = (int)*psVar52;
                  auVar125._4_4_ = (int)psVar52[1];
                  auVar125._8_4_ = (int)psVar52[2];
                  auVar125._12_4_ = (int)psVar52[3];
                  auVar121._0_4_ = (int)psVar52[4];
                  auVar121._4_4_ = (int)psVar52[5];
                  auVar121._8_4_ = (int)psVar52[6];
                  auVar121._12_4_ = (int)psVar52[7];
                  lVar58 = lVar58 + 0x10;
                  psVar52 = (short *)((long)psVar76 + lVar149);
                  psVar8 = (short *)((long)psVar76 + lVar7);
                  psVar9 = (short *)((long)psVar76 + lVar147);
                  puVar70 = (undefined8 *)((long)psVar67 + lVar147);
                  auVar108._0_4_ = (int)*psVar52;
                  auVar108._4_4_ = (int)psVar52[1];
                  auVar108._8_4_ = (int)psVar52[2];
                  auVar108._12_4_ = (int)psVar52[3];
                  auVar115._0_4_ = (int)*psVar6;
                  auVar115._4_4_ = (int)psVar6[1];
                  auVar115._8_4_ = (int)psVar6[2];
                  auVar115._12_4_ = (int)psVar6[3];
                  auVar93._0_4_ = (int)psVar6[4];
                  auVar93._4_4_ = (int)psVar6[5];
                  auVar93._8_4_ = (int)psVar6[6];
                  auVar93._12_4_ = (int)psVar6[7];
                  auVar141._0_4_ = (int)psVar52[4];
                  auVar141._4_4_ = (int)psVar52[5];
                  auVar141._8_4_ = (int)psVar52[6];
                  auVar141._12_4_ = (int)psVar52[7];
                  auVar91 = NEON_smin(auVar115,auVar125,4);
                  auVar162._0_4_ = (int)*psVar8;
                  auVar162._4_4_ = (int)psVar8[1];
                  auVar162._8_4_ = (int)psVar8[2];
                  auVar162._12_4_ = (int)psVar8[3];
                  auVar133._0_4_ = (int)psVar8[4];
                  auVar133._4_4_ = (int)psVar8[5];
                  auVar133._8_4_ = (int)psVar8[6];
                  auVar133._12_4_ = (int)psVar8[7];
                  auVar174 = NEON_smax(auVar115,auVar125,4);
                  auVar169._0_4_ = (int)*psVar9;
                  auVar169._4_4_ = (int)psVar9[1];
                  auVar169._8_4_ = (int)psVar9[2];
                  auVar169._12_4_ = (int)psVar9[3];
                  auVar155._0_4_ = (int)psVar9[4];
                  auVar155._4_4_ = (int)psVar9[5];
                  auVar155._8_4_ = (int)psVar9[6];
                  auVar155._12_4_ = (int)psVar9[7];
                  auVar166 = NEON_smin(auVar93,auVar121,4);
                  auVar140 = NEON_smax(auVar133,auVar141,4);
                  auVar88 = NEON_smax(auVar93,auVar121,4);
                  auVar86 = NEON_smax(auVar91,auVar169,4);
                  auVar98 = NEON_smax(auVar166,auVar155,4);
                  auVar90 = NEON_smax(auVar162,auVar108,4);
                  auVar91 = NEON_smin(auVar91,auVar169,4);
                  auVar87 = NEON_smin(auVar162,auVar108,4);
                  auVar166 = NEON_smin(auVar166,auVar155,4);
                  auVar89 = NEON_smin(auVar133,auVar141,4);
                  auVar90 = NEON_smin(auVar174,auVar90,4);
                  auVar91 = NEON_smax(auVar91,auVar87,4);
                  auVar140 = NEON_smin(auVar88,auVar140,4);
                  auVar166 = NEON_smax(auVar166,auVar89,4);
                  auVar174 = NEON_smax(auVar86,auVar174,4);
                  auVar88 = NEON_smax(auVar98,auVar88,4);
                  auVar90 = NEON_smin(auVar90,auVar86,4);
                  auVar91 = NEON_smin(auVar91,auVar174,4);
                  auVar88 = NEON_smin(auVar166,auVar88,4);
                  auVar140 = NEON_smin(auVar140,auVar98,4);
                  auVar166 = NEON_smax(auVar90,auVar91,4);
                  auVar88 = NEON_smax(auVar140,auVar88,4);
                  auVar100._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar100._8_2_ = auVar88._0_2_;
                  auVar100._10_2_ = auVar88._4_2_;
                  auVar100._12_2_ = auVar88._8_2_;
                  auVar100._14_2_ = auVar88._12_2_;
                  puVar70[1] = auVar100._8_8_;
                  *puVar70 = auVar100._0_8_;
                } while (uVar72 < uVar79);
                uVar84 = (ulong)((int)uVar84 + uVar81);
                psVar56 = psVar56 + uVar81;
                if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
              }
              sVar21 = psVar56[lVar75];
              uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
              sVar18 = *(short *)((long)psVar56 + uVar83);
              sVar42 = *psVar56;
              sVar20 = psVar56[lVar73];
              sVar19 = sVar18;
              if (sVar21 < sVar18) {
                sVar19 = sVar21;
              }
              if (sVar18 < sVar21) {
                sVar18 = sVar21;
              }
              sVar22 = *(short *)((long)psVar56 + uVar82);
              sVar21 = sVar19;
              if (sVar42 < sVar19) {
                sVar21 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar42 = sVar20;
              if (sVar20 < sVar22) {
                sVar42 = sVar22;
              }
              sVar23 = sVar18;
              if (sVar42 < sVar18) {
                sVar23 = sVar42;
              }
              if (sVar22 < sVar20) {
                sVar20 = sVar22;
              }
              iVar54 = (int)uVar84;
              if (sVar21 < sVar20) {
                sVar21 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar18) {
                sVar20 = sVar18;
              }
              if (sVar20 < sVar21) {
                sVar21 = sVar20;
              }
              if (sVar19 < sVar23) {
                sVar23 = sVar19;
              }
              if (sVar23 < sVar21) {
                sVar23 = sVar21;
              }
              *(short *)((long)psVar67 + uVar78) = sVar23;
              if (iVar54 + 1 < (int)uVar1) {
                sVar42 = psVar56[lVar75 + 1];
                sVar18 = *(short *)((long)psVar56 + uVar83 + 2);
                sVar20 = psVar56[1];
                sVar21 = *(short *)((long)psVar56 + uVar82 + 2);
                sVar19 = sVar18;
                if (sVar42 < sVar18) {
                  sVar19 = sVar42;
                }
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar42 = psVar56[lVar73 + 1];
                sVar22 = sVar19;
                if (sVar20 < sVar19) {
                  sVar22 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                sVar20 = sVar42;
                if (sVar42 < sVar21) {
                  sVar20 = sVar21;
                }
                sVar23 = sVar18;
                if (sVar20 < sVar18) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar42) {
                  sVar42 = sVar21;
                }
                if (sVar22 < sVar42) {
                  sVar22 = sVar42;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar22) {
                  sVar22 = sVar20;
                }
                if (sVar19 < sVar23) {
                  sVar23 = sVar19;
                }
                if (sVar23 < sVar22) {
                  sVar23 = sVar22;
                }
                *(short *)((long)psVar67 + uVar78 + 2) = sVar23;
                if (iVar54 + 2 < (int)uVar1) {
                  sVar42 = psVar56[lVar75 + 2];
                  sVar18 = *(short *)((long)psVar56 + uVar83 + 4);
                  sVar20 = psVar56[2];
                  sVar21 = *(short *)((long)psVar56 + uVar82 + 4);
                  sVar19 = sVar18;
                  if (sVar42 < sVar18) {
                    sVar19 = sVar42;
                  }
                  if (sVar18 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar42 = psVar56[lVar73 + 2];
                  sVar22 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar22 = sVar20;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  sVar20 = sVar42;
                  if (sVar42 < sVar21) {
                    sVar20 = sVar21;
                  }
                  sVar23 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar23 = sVar20;
                  }
                  if (sVar21 < sVar42) {
                    sVar42 = sVar21;
                  }
                  if (sVar22 < sVar42) {
                    sVar22 = sVar42;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar18) {
                    sVar20 = sVar18;
                  }
                  if (sVar20 < sVar22) {
                    sVar22 = sVar20;
                  }
                  if (sVar19 < sVar23) {
                    sVar23 = sVar19;
                  }
                  if (sVar23 < sVar22) {
                    sVar23 = sVar22;
                  }
                  *(short *)((long)psVar67 + uVar78 + 4) = sVar23;
                  if (iVar54 + 3 < (int)uVar1) {
                    sVar42 = psVar56[lVar75 + 3];
                    sVar18 = *(short *)((long)psVar56 + uVar83 + 6);
                    sVar20 = psVar56[3];
                    sVar21 = *(short *)((long)psVar56 + uVar82 + 6);
                    sVar19 = sVar18;
                    if (sVar42 < sVar18) {
                      sVar19 = sVar42;
                    }
                    if (sVar18 < sVar42) {
                      sVar18 = sVar42;
                    }
                    sVar42 = psVar56[lVar73 + 3];
                    sVar22 = sVar19;
                    if (sVar20 < sVar19) {
                      sVar22 = sVar20;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    sVar20 = sVar42;
                    if (sVar42 < sVar21) {
                      sVar20 = sVar21;
                    }
                    sVar23 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar23 = sVar20;
                    }
                    if (sVar21 < sVar42) {
                      sVar42 = sVar21;
                    }
                    if (sVar22 < sVar42) {
                      sVar22 = sVar42;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar18) {
                      sVar20 = sVar18;
                    }
                    if (sVar20 < sVar22) {
                      sVar22 = sVar20;
                    }
                    if (sVar19 < sVar23) {
                      sVar23 = sVar19;
                    }
                    if (sVar23 < sVar22) {
                      sVar23 = sVar22;
                    }
                    *(short *)((long)psVar67 + uVar78 + 6) = sVar23;
                    if (iVar54 + 4 < (int)uVar1) {
                      sVar42 = psVar56[lVar75 + 4];
                      sVar18 = *(short *)((long)psVar56 + uVar83 + 8);
                      sVar20 = psVar56[4];
                      sVar21 = *(short *)((long)psVar56 + uVar82 + 8);
                      sVar19 = sVar18;
                      if (sVar42 < sVar18) {
                        sVar19 = sVar42;
                      }
                      if (sVar18 < sVar42) {
                        sVar18 = sVar42;
                      }
                      sVar42 = psVar56[lVar73 + 4];
                      sVar22 = sVar19;
                      if (sVar20 < sVar19) {
                        sVar22 = sVar20;
                      }
                      if (sVar19 < sVar20) {
                        sVar19 = sVar20;
                      }
                      sVar20 = sVar42;
                      if (sVar42 < sVar21) {
                        sVar20 = sVar21;
                      }
                      sVar23 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar23 = sVar20;
                      }
                      if (sVar21 < sVar42) {
                        sVar42 = sVar21;
                      }
                      if (sVar22 < sVar42) {
                        sVar22 = sVar42;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar18) {
                        sVar20 = sVar18;
                      }
                      if (sVar20 < sVar22) {
                        sVar22 = sVar20;
                      }
                      if (sVar19 < sVar23) {
                        sVar23 = sVar19;
                      }
                      if (sVar23 < sVar22) {
                        sVar23 = sVar22;
                      }
                      *(short *)((long)psVar67 + uVar78 + 8) = sVar23;
                      if (iVar54 + 5 < (int)uVar1) {
                        sVar42 = psVar56[lVar75 + 5];
                        sVar18 = *(short *)((long)psVar56 + uVar83 + 10);
                        sVar20 = psVar56[5];
                        sVar21 = *(short *)((long)psVar56 + uVar82 + 10);
                        sVar19 = sVar18;
                        if (sVar42 < sVar18) {
                          sVar19 = sVar42;
                        }
                        if (sVar18 < sVar42) {
                          sVar18 = sVar42;
                        }
                        sVar42 = psVar56[lVar73 + 5];
                        sVar22 = sVar19;
                        if (sVar20 < sVar19) {
                          sVar22 = sVar20;
                        }
                        if (sVar19 < sVar20) {
                          sVar19 = sVar20;
                        }
                        sVar20 = sVar42;
                        if (sVar42 < sVar21) {
                          sVar20 = sVar21;
                        }
                        sVar23 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar23 = sVar20;
                        }
                        if (sVar21 < sVar42) {
                          sVar42 = sVar21;
                        }
                        if (sVar22 < sVar42) {
                          sVar22 = sVar42;
                        }
                        sVar20 = sVar19;
                        if (sVar19 < sVar18) {
                          sVar20 = sVar18;
                        }
                        if (sVar20 < sVar22) {
                          sVar22 = sVar20;
                        }
                        if (sVar19 < sVar23) {
                          sVar23 = sVar19;
                        }
                        if (sVar23 < sVar22) {
                          sVar23 = sVar22;
                        }
                        *(short *)((long)psVar67 + uVar78 + 10) = sVar23;
                        if (iVar54 + 6 < (int)uVar1) {
                          sVar42 = psVar56[lVar75 + 6];
                          sVar18 = *(short *)((long)psVar56 + uVar83 + 0xc);
                          sVar20 = psVar56[6];
                          sVar21 = *(short *)((long)psVar56 + uVar82 + 0xc);
                          sVar19 = sVar18;
                          if (sVar42 < sVar18) {
                            sVar19 = sVar42;
                          }
                          if (sVar18 < sVar42) {
                            sVar18 = sVar42;
                          }
                          sVar42 = psVar56[lVar73 + 6];
                          sVar22 = sVar19;
                          if (sVar20 < sVar19) {
                            sVar22 = sVar20;
                          }
                          if (sVar19 < sVar20) {
                            sVar19 = sVar20;
                          }
                          sVar20 = sVar42;
                          if (sVar42 < sVar21) {
                            sVar20 = sVar21;
                          }
                          sVar23 = sVar18;
                          if (sVar20 < sVar18) {
                            sVar23 = sVar20;
                          }
                          if (sVar21 < sVar42) {
                            sVar42 = sVar21;
                          }
                          if (sVar22 < sVar42) {
                            sVar22 = sVar42;
                          }
                          sVar20 = sVar19;
                          if (sVar19 < sVar18) {
                            sVar20 = sVar18;
                          }
                          if (sVar20 < sVar22) {
                            sVar22 = sVar20;
                          }
                          if (sVar19 < sVar23) {
                            sVar23 = sVar19;
                          }
                          if (sVar23 < sVar22) {
                            sVar23 = sVar22;
                          }
                          *(short *)((long)psVar67 + uVar78 + 0xc) = sVar23;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            if (iVar71 < 2) {
              psVar6 = psVar76 + lVar73;
              if ((uVar1 < 9 ||
                   (psVar67 < psVar56 && psVar6 < psVar66 ||
                   psVar67 < (short *)((long)psVar76 + lVar61) &&
                   (short *)((long)psVar76 + uVar83) < psVar66)) ||
                 (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
                lVar58 = 0;
                do {
                  sVar19 = psVar76[lVar58];
                  sVar20 = ((short *)((long)psVar76 + uVar83))[lVar58];
                  sVar42 = psVar6[lVar58];
                  sVar18 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar20;
                  }
                  sVar21 = sVar19;
                  if (sVar19 < sVar20) {
                    sVar21 = sVar20;
                  }
                  sVar20 = sVar18;
                  if (sVar19 < sVar18) {
                    sVar20 = sVar19;
                  }
                  if (sVar18 < sVar19) {
                    sVar18 = sVar19;
                  }
                  if (sVar20 < sVar42) {
                    sVar20 = sVar42;
                  }
                  sVar19 = sVar18;
                  if (sVar18 < sVar21) {
                    sVar19 = sVar21;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar42 < sVar21) {
                    sVar21 = sVar42;
                  }
                  if (sVar18 < sVar21) {
                    sVar21 = sVar18;
                  }
                  if (sVar21 < sVar20) {
                    sVar21 = sVar20;
                  }
                  psVar67[lVar58] = sVar21;
                  lVar58 = lVar58 + 1;
                } while ((int)lVar58 < (int)uVar1);
                goto LAB_001fe290;
              }
              uVar79 = -((uint)((ulong)psVar6 >> 1) & 7) & 7;
              uVar65 = uVar1;
              if (uVar79 < uVar1) {
                uVar65 = uVar79;
              }
              psVar56 = psVar76;
              if (uVar65 == 0) {
LAB_002032f8:
                uVar84 = (ulong)uVar65;
              }
              else {
                sVar20 = *psVar76;
                psVar56 = psVar76 + 1;
                sVar42 = *(short *)((long)psVar76 + uVar83);
                sVar19 = psVar76[lVar73];
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar42) {
                  sVar21 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar42) {
                  sVar20 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar18 < sVar21) {
                  sVar42 = sVar21;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                psVar66[-8] = sVar19;
                if (uVar65 == 1) goto LAB_002032f8;
                sVar20 = psVar76[1];
                sVar42 = *(short *)((long)psVar56 + uVar83);
                sVar19 = psVar56[lVar73];
                psVar56 = psVar76 + 2;
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar42) {
                  sVar21 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar42) {
                  sVar20 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar18 < sVar21) {
                  sVar42 = sVar21;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                psVar66[-7] = sVar19;
                if (uVar65 == 2) goto LAB_002032f8;
                sVar20 = psVar76[2];
                sVar42 = *(short *)((long)psVar56 + uVar83);
                sVar19 = psVar56[lVar73];
                psVar56 = psVar76 + 3;
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar42) {
                  sVar21 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar42) {
                  sVar20 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar18 < sVar21) {
                  sVar42 = sVar21;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                psVar66[-6] = sVar19;
                if (uVar65 != 3) {
                  sVar20 = psVar76[3];
                  sVar42 = *(short *)((long)psVar56 + uVar83);
                  sVar19 = psVar56[lVar73];
                  psVar56 = psVar76 + 4;
                  sVar18 = sVar20;
                  if (sVar42 < sVar20) {
                    sVar18 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar21 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar42) {
                    sVar20 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar18 < sVar21) {
                    sVar42 = sVar21;
                  }
                  if (sVar42 < sVar20) {
                    sVar20 = sVar42;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar18 < sVar19) {
                    sVar19 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  psVar66[-5] = sVar19;
                  if (uVar65 != 4) {
                    sVar20 = psVar76[4];
                    sVar42 = *(short *)((long)psVar56 + uVar83);
                    sVar19 = psVar56[lVar73];
                    psVar56 = psVar76 + 5;
                    sVar18 = sVar20;
                    if (sVar42 < sVar20) {
                      sVar18 = sVar42;
                    }
                    sVar21 = sVar20;
                    if (sVar20 < sVar42) {
                      sVar21 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar42) {
                      sVar20 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar18 < sVar21) {
                      sVar42 = sVar21;
                    }
                    if (sVar42 < sVar20) {
                      sVar20 = sVar42;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar18 < sVar19) {
                      sVar19 = sVar18;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    psVar66[-4] = sVar19;
                    if (uVar65 != 5) {
                      sVar20 = psVar76[5];
                      sVar42 = *(short *)((long)psVar56 + uVar83);
                      sVar19 = psVar56[lVar73];
                      psVar56 = psVar76 + 6;
                      sVar18 = sVar20;
                      if (sVar42 < sVar20) {
                        sVar18 = sVar42;
                      }
                      sVar21 = sVar20;
                      if (sVar20 < sVar42) {
                        sVar21 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar42) {
                        sVar20 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar18 < sVar21) {
                        sVar42 = sVar21;
                      }
                      if (sVar42 < sVar20) {
                        sVar20 = sVar42;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar18 < sVar19) {
                        sVar19 = sVar18;
                      }
                      if (sVar19 < sVar20) {
                        sVar19 = sVar20;
                      }
                      psVar66[-3] = sVar19;
                      if (uVar65 == 7) {
                        sVar42 = psVar76[6];
                        uVar84 = 7;
                        sVar18 = *(short *)((long)psVar56 + uVar83);
                        sVar20 = psVar56[lVar73];
                        psVar56 = psVar76 + 7;
                        sVar19 = sVar18;
                        if (sVar42 < sVar18) {
                          sVar19 = sVar42;
                        }
                        if (sVar18 < sVar42) {
                          sVar18 = sVar42;
                        }
                        sVar21 = sVar19;
                        if (sVar42 < sVar19) {
                          sVar21 = sVar42;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        sVar42 = sVar20;
                        if (sVar20 < sVar21) {
                          sVar42 = sVar21;
                        }
                        sVar21 = sVar19;
                        if (sVar19 < sVar18) {
                          sVar21 = sVar18;
                        }
                        if (sVar21 < sVar42) {
                          sVar42 = sVar21;
                        }
                        if (sVar18 < sVar20) {
                          sVar20 = sVar18;
                        }
                        if (sVar19 < sVar20) {
                          sVar20 = sVar19;
                        }
                        if (sVar20 < sVar42) {
                          sVar20 = sVar42;
                        }
                        psVar66[-2] = sVar20;
                      }
                      else {
                        uVar84 = 6;
                      }
                      goto LAB_00201634;
                    }
                  }
                  goto LAB_002032f8;
                }
                uVar84 = 3;
              }
LAB_00201634:
              uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
              uVar81 = uVar79 * 8;
              if (6 < uVar43 - uVar65) {
                lVar68 = (ulong)uVar65 * 2;
                lVar58 = 0;
                uVar72 = 0;
                lVar147 = NEON_shl(lVar73 + (ulong)uVar65,1);
                do {
                  lVar149 = lVar58 + lVar68;
                  psVar6 = (short *)((long)psVar76 + lVar58 + lVar68 + uVar83);
                  psVar52 = (short *)((long)psVar76 + lVar149);
                  uVar72 = uVar72 + 1;
                  lVar7 = lVar58 + lVar68 + lVar62;
                  auVar160._0_4_ = (int)*psVar52;
                  auVar160._4_4_ = (int)psVar52[1];
                  auVar160._8_4_ = (int)psVar52[2];
                  auVar160._12_4_ = (int)psVar52[3];
                  auVar146._0_4_ = (int)psVar52[4];
                  auVar146._4_4_ = (int)psVar52[5];
                  auVar146._8_4_ = (int)psVar52[6];
                  auVar146._12_4_ = (int)psVar52[7];
                  lVar10 = lVar58 + lVar147;
                  lVar58 = lVar58 + 0x10;
                  psVar52 = (short *)((long)psVar76 + lVar10);
                  psVar8 = (short *)((long)psVar76 + lVar7);
                  puVar70 = (undefined8 *)((long)psVar67 + lVar149);
                  auVar130._0_4_ = (int)*psVar6;
                  auVar130._4_4_ = (int)psVar6[1];
                  auVar130._8_4_ = (int)psVar6[2];
                  auVar130._12_4_ = (int)psVar6[3];
                  auVar97._0_4_ = (int)psVar6[4];
                  auVar97._4_4_ = (int)psVar6[5];
                  auVar97._8_4_ = (int)psVar6[6];
                  auVar97._12_4_ = (int)psVar6[7];
                  auVar112._0_4_ = (int)*psVar8;
                  auVar112._4_4_ = (int)psVar8[1];
                  auVar112._8_4_ = (int)psVar8[2];
                  auVar112._12_4_ = (int)psVar8[3];
                  auVar91 = NEON_smin(auVar160,auVar130,4);
                  auVar119._0_4_ = (int)*psVar52;
                  auVar119._4_4_ = (int)psVar52[1];
                  auVar119._8_4_ = (int)psVar52[2];
                  auVar119._12_4_ = (int)psVar52[3];
                  auVar166 = NEON_smin(auVar97,auVar146,4);
                  auVar154._0_4_ = (int)psVar8[4];
                  auVar154._4_4_ = (int)psVar8[5];
                  auVar154._8_4_ = (int)psVar8[6];
                  auVar154._12_4_ = (int)psVar8[7];
                  auVar138._0_4_ = (int)psVar52[4];
                  auVar138._4_4_ = (int)psVar52[5];
                  auVar138._8_4_ = (int)psVar52[6];
                  auVar138._12_4_ = (int)psVar52[7];
                  auVar86 = NEON_smax(auVar91,auVar160,4);
                  auVar98 = NEON_smax(auVar166,auVar146,4);
                  auVar174 = NEON_smax(auVar119,auVar112,4);
                  auVar89 = NEON_smax(auVar160,auVar130,4);
                  auVar88 = NEON_smax(auVar97,auVar146,4);
                  auVar91 = NEON_smin(auVar91,auVar160,4);
                  auVar140 = NEON_smin(auVar119,auVar112,4);
                  auVar166 = NEON_smin(auVar166,auVar146,4);
                  auVar90 = NEON_smax(auVar138,auVar154,4);
                  auVar87 = NEON_smin(auVar138,auVar154,4);
                  auVar174 = NEON_smin(auVar89,auVar174,4);
                  auVar91 = NEON_smax(auVar91,auVar140,4);
                  auVar140 = NEON_smin(auVar88,auVar90,4);
                  auVar166 = NEON_smax(auVar166,auVar87,4);
                  auVar89 = NEON_smax(auVar86,auVar89,4);
                  auVar88 = NEON_smax(auVar98,auVar88,4);
                  auVar90 = NEON_smin(auVar174,auVar86,4);
                  auVar91 = NEON_smin(auVar91,auVar89,4);
                  auVar88 = NEON_smin(auVar166,auVar88,4);
                  auVar140 = NEON_smin(auVar140,auVar98,4);
                  auVar166 = NEON_smax(auVar90,auVar91,4);
                  auVar88 = NEON_smax(auVar140,auVar88,4);
                  auVar104._0_8_ =
                       CONCAT26(auVar166._12_2_,
                                CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                  auVar104._8_2_ = auVar88._0_2_;
                  auVar104._10_2_ = auVar88._4_2_;
                  auVar104._12_2_ = auVar88._8_2_;
                  auVar104._14_2_ = auVar88._12_2_;
                  puVar70[1] = auVar104._8_8_;
                  *puVar70 = auVar104._0_8_;
                } while (uVar72 < uVar79);
                uVar84 = (ulong)((int)uVar84 + uVar81);
                psVar56 = psVar56 + uVar81;
                if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
              }
              sVar20 = *psVar56;
              uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
              sVar42 = *(short *)((long)psVar56 + uVar83);
              iVar54 = (int)uVar84;
              sVar19 = psVar56[lVar73];
              sVar18 = sVar20;
              if (sVar42 < sVar20) {
                sVar18 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar42) {
                sVar21 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar42) {
                sVar20 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar18 < sVar21) {
                sVar42 = sVar21;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar18 < sVar19) {
                sVar19 = sVar18;
              }
              if (sVar19 < sVar20) {
                sVar19 = sVar20;
              }
              *(short *)((long)psVar67 + uVar78) = sVar19;
              if (iVar54 + 1 < (int)uVar1) {
                sVar20 = psVar56[1];
                sVar42 = *(short *)((long)psVar56 + uVar83 + 2);
                sVar19 = psVar56[lVar73 + 1];
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar42) {
                  sVar21 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar42) {
                  sVar20 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar18 < sVar21) {
                  sVar42 = sVar21;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar18 < sVar19) {
                  sVar19 = sVar18;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                *(short *)((long)psVar67 + uVar78 + 2) = sVar19;
                if (iVar54 + 2 < (int)uVar1) {
                  sVar20 = psVar56[2];
                  sVar42 = *(short *)((long)psVar56 + uVar83 + 4);
                  sVar19 = psVar56[lVar73 + 2];
                  sVar18 = sVar20;
                  if (sVar42 < sVar20) {
                    sVar18 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar21 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar42) {
                    sVar20 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar18 < sVar21) {
                    sVar42 = sVar21;
                  }
                  if (sVar42 < sVar20) {
                    sVar20 = sVar42;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar18 < sVar19) {
                    sVar19 = sVar18;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  *(short *)((long)psVar67 + uVar78 + 4) = sVar19;
                  if (iVar54 + 3 < (int)uVar1) {
                    sVar20 = psVar56[3];
                    sVar42 = *(short *)((long)psVar56 + uVar83 + 6);
                    sVar19 = psVar56[lVar73 + 3];
                    sVar18 = sVar20;
                    if (sVar42 < sVar20) {
                      sVar18 = sVar42;
                    }
                    sVar21 = sVar20;
                    if (sVar20 < sVar42) {
                      sVar21 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar42) {
                      sVar20 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar18 < sVar21) {
                      sVar42 = sVar21;
                    }
                    if (sVar42 < sVar20) {
                      sVar20 = sVar42;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar18 < sVar19) {
                      sVar19 = sVar18;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    *(short *)((long)psVar67 + uVar78 + 6) = sVar19;
                    if (iVar54 + 4 < (int)uVar1) {
                      sVar20 = psVar56[4];
                      sVar42 = *(short *)((long)psVar56 + uVar83 + 8);
                      sVar19 = psVar56[lVar73 + 4];
                      sVar18 = sVar20;
                      if (sVar42 < sVar20) {
                        sVar18 = sVar42;
                      }
                      sVar21 = sVar20;
                      if (sVar20 < sVar42) {
                        sVar21 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar42) {
                        sVar20 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar18 < sVar21) {
                        sVar42 = sVar21;
                      }
                      if (sVar42 < sVar20) {
                        sVar20 = sVar42;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar18 < sVar19) {
                        sVar19 = sVar18;
                      }
                      if (sVar19 < sVar20) {
                        sVar19 = sVar20;
                      }
                      *(short *)((long)psVar67 + uVar78 + 8) = sVar19;
                      if (iVar54 + 5 < (int)uVar1) {
                        sVar20 = psVar56[5];
                        sVar42 = *(short *)((long)psVar56 + uVar83 + 10);
                        sVar19 = psVar56[lVar73 + 5];
                        sVar18 = sVar20;
                        if (sVar42 < sVar20) {
                          sVar18 = sVar42;
                        }
                        sVar21 = sVar20;
                        if (sVar20 < sVar42) {
                          sVar21 = sVar42;
                        }
                        sVar42 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar42 = sVar20;
                        }
                        if (sVar18 < sVar20) {
                          sVar18 = sVar20;
                        }
                        sVar20 = sVar19;
                        if (sVar19 < sVar42) {
                          sVar20 = sVar42;
                        }
                        sVar42 = sVar18;
                        if (sVar18 < sVar21) {
                          sVar42 = sVar21;
                        }
                        if (sVar42 < sVar20) {
                          sVar20 = sVar42;
                        }
                        if (sVar21 < sVar19) {
                          sVar19 = sVar21;
                        }
                        if (sVar18 < sVar19) {
                          sVar19 = sVar18;
                        }
                        if (sVar19 < sVar20) {
                          sVar19 = sVar20;
                        }
                        *(short *)((long)psVar67 + uVar78 + 10) = sVar19;
                        if (iVar54 + 6 < (int)uVar1) {
                          sVar42 = psVar56[6];
                          sVar18 = *(short *)((long)psVar56 + uVar83 + 0xc);
                          sVar20 = psVar56[lVar73 + 6];
                          sVar19 = sVar18;
                          if (sVar42 < sVar18) {
                            sVar19 = sVar42;
                          }
                          if (sVar18 < sVar42) {
                            sVar18 = sVar42;
                          }
                          sVar21 = sVar19;
                          if (sVar42 < sVar19) {
                            sVar21 = sVar42;
                          }
                          if (sVar19 < sVar42) {
                            sVar19 = sVar42;
                          }
                          if (sVar21 < sVar20) {
                            sVar21 = sVar20;
                          }
                          sVar42 = sVar19;
                          if (sVar19 < sVar18) {
                            sVar42 = sVar18;
                          }
                          if (sVar42 < sVar21) {
                            sVar21 = sVar42;
                          }
                          if (sVar18 < sVar20) {
                            sVar20 = sVar18;
                          }
                          if (sVar19 < sVar20) {
                            sVar20 = sVar19;
                          }
                          if (sVar20 < sVar21) {
                            sVar20 = sVar21;
                          }
                          *(short *)((long)psVar67 + uVar78 + 0xc) = sVar20;
                        }
                      }
                    }
                  }
                }
              }
              goto LAB_001fe290;
            }
            if (((uVar1 < 9 ||
                 (psVar67 < psVar56 && psVar76 + lVar73 < psVar66 ||
                 psVar67 < (short *)((long)psVar76 + lVar57) &&
                 (short *)((long)psVar76 + uVar82) < psVar66)) ||
                 psVar67 < (short *)((long)psVar76 + lVar61) &&
                 (short *)((long)psVar76 + uVar83) < psVar66) ||
               (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
              lVar58 = 0;
              do {
                sVar20 = psVar76[lVar58];
                sVar42 = ((short *)((long)psVar76 + uVar82))[lVar58];
                sVar19 = (psVar76 + lVar73)[lVar58];
                sVar21 = ((short *)((long)psVar76 + uVar83))[lVar58];
                sVar18 = sVar20;
                if (sVar21 < sVar20) {
                  sVar18 = sVar21;
                }
                sVar22 = sVar20;
                if (sVar20 < sVar21) {
                  sVar22 = sVar21;
                }
                sVar21 = sVar18;
                if (sVar20 < sVar18) {
                  sVar21 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar42) {
                  sVar20 = sVar42;
                }
                sVar23 = sVar22;
                if (sVar20 < sVar22) {
                  sVar23 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar21 = sVar19;
                }
                sVar19 = sVar18;
                if (sVar18 < sVar22) {
                  sVar19 = sVar22;
                }
                if (sVar19 < sVar21) {
                  sVar21 = sVar19;
                }
                if (sVar18 < sVar23) {
                  sVar23 = sVar18;
                }
                if (sVar23 < sVar21) {
                  sVar23 = sVar21;
                }
                psVar67[lVar58] = sVar23;
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
            uVar65 = uVar1;
            if (uVar79 < uVar1) {
              uVar65 = uVar79;
            }
            psVar56 = psVar76;
            if (uVar65 == 0) {
LAB_00201234:
              uVar84 = (ulong)uVar65;
            }
            else {
              sVar20 = *psVar76;
              psVar56 = psVar76 + 1;
              sVar42 = *(short *)((long)psVar76 + uVar83);
              sVar21 = *(short *)((long)psVar76 + uVar82);
              sVar19 = psVar76[lVar73];
              sVar18 = sVar20;
              if (sVar42 < sVar20) {
                sVar18 = sVar42;
              }
              sVar22 = sVar20;
              if (sVar20 < sVar42) {
                sVar22 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar21) {
                sVar20 = sVar21;
              }
              sVar23 = sVar22;
              if (sVar20 < sVar22) {
                sVar23 = sVar20;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              sVar19 = sVar18;
              if (sVar18 < sVar22) {
                sVar19 = sVar22;
              }
              if (sVar19 < sVar42) {
                sVar42 = sVar19;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-8] = sVar23;
              if (uVar65 == 1) goto LAB_00201234;
              sVar20 = psVar76[1];
              sVar42 = *(short *)((long)psVar56 + uVar83);
              sVar21 = *(short *)((long)psVar56 + uVar82);
              sVar19 = psVar56[lVar73];
              sVar18 = sVar20;
              if (sVar42 < sVar20) {
                sVar18 = sVar42;
              }
              sVar22 = sVar20;
              if (sVar20 < sVar42) {
                sVar22 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar21) {
                sVar20 = sVar21;
              }
              psVar56 = psVar76 + 2;
              sVar23 = sVar22;
              if (sVar20 < sVar22) {
                sVar23 = sVar20;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              sVar19 = sVar18;
              if (sVar18 < sVar22) {
                sVar19 = sVar22;
              }
              if (sVar19 < sVar42) {
                sVar42 = sVar19;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-7] = sVar23;
              if (uVar65 == 2) goto LAB_00201234;
              sVar20 = psVar76[2];
              sVar42 = *(short *)((long)psVar56 + uVar83);
              sVar21 = *(short *)((long)psVar56 + uVar82);
              sVar19 = psVar56[lVar73];
              sVar18 = sVar20;
              if (sVar42 < sVar20) {
                sVar18 = sVar42;
              }
              sVar22 = sVar20;
              if (sVar20 < sVar42) {
                sVar22 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar21) {
                sVar20 = sVar21;
              }
              psVar56 = psVar76 + 3;
              sVar23 = sVar22;
              if (sVar20 < sVar22) {
                sVar23 = sVar20;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              sVar19 = sVar18;
              if (sVar18 < sVar22) {
                sVar19 = sVar22;
              }
              if (sVar19 < sVar42) {
                sVar42 = sVar19;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-6] = sVar23;
              if (uVar65 != 3) {
                sVar20 = psVar76[3];
                sVar42 = *(short *)((long)psVar56 + uVar83);
                sVar21 = *(short *)((long)psVar56 + uVar82);
                sVar19 = psVar56[lVar73];
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar22 = sVar20;
                if (sVar20 < sVar42) {
                  sVar22 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar21) {
                  sVar20 = sVar21;
                }
                psVar56 = psVar76 + 4;
                sVar23 = sVar22;
                if (sVar20 < sVar22) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar42 < sVar19) {
                  sVar42 = sVar19;
                }
                sVar19 = sVar18;
                if (sVar18 < sVar22) {
                  sVar19 = sVar22;
                }
                if (sVar19 < sVar42) {
                  sVar42 = sVar19;
                }
                if (sVar18 < sVar23) {
                  sVar23 = sVar18;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                psVar66[-5] = sVar23;
                if (uVar65 != 4) {
                  sVar20 = psVar76[4];
                  sVar42 = *(short *)((long)psVar56 + uVar83);
                  sVar21 = *(short *)((long)psVar56 + uVar82);
                  sVar19 = psVar56[lVar73];
                  sVar18 = sVar20;
                  if (sVar42 < sVar20) {
                    sVar18 = sVar42;
                  }
                  sVar22 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar22 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar21) {
                    sVar20 = sVar21;
                  }
                  psVar56 = psVar76 + 5;
                  sVar23 = sVar22;
                  if (sVar20 < sVar22) {
                    sVar23 = sVar20;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar42 < sVar19) {
                    sVar42 = sVar19;
                  }
                  sVar19 = sVar18;
                  if (sVar18 < sVar22) {
                    sVar19 = sVar22;
                  }
                  if (sVar19 < sVar42) {
                    sVar42 = sVar19;
                  }
                  if (sVar18 < sVar23) {
                    sVar23 = sVar18;
                  }
                  if (sVar23 < sVar42) {
                    sVar23 = sVar42;
                  }
                  psVar66[-4] = sVar23;
                  if (uVar65 != 5) {
                    sVar20 = psVar76[5];
                    sVar42 = *(short *)((long)psVar56 + uVar83);
                    sVar21 = *(short *)((long)psVar56 + uVar82);
                    sVar19 = psVar56[lVar73];
                    sVar18 = sVar20;
                    if (sVar42 < sVar20) {
                      sVar18 = sVar42;
                    }
                    sVar22 = sVar20;
                    if (sVar20 < sVar42) {
                      sVar22 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar21) {
                      sVar20 = sVar21;
                    }
                    psVar56 = psVar76 + 6;
                    sVar23 = sVar22;
                    if (sVar20 < sVar22) {
                      sVar23 = sVar20;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar42 < sVar19) {
                      sVar42 = sVar19;
                    }
                    sVar19 = sVar18;
                    if (sVar18 < sVar22) {
                      sVar19 = sVar22;
                    }
                    if (sVar19 < sVar42) {
                      sVar42 = sVar19;
                    }
                    if (sVar18 < sVar23) {
                      sVar23 = sVar18;
                    }
                    if (sVar23 < sVar42) {
                      sVar23 = sVar42;
                    }
                    psVar66[-3] = sVar23;
                    if (uVar65 == 7) {
                      sVar20 = psVar76[6];
                      uVar84 = 7;
                      sVar42 = *(short *)((long)psVar56 + uVar83);
                      sVar21 = *(short *)((long)psVar56 + uVar82);
                      sVar19 = psVar56[lVar73];
                      sVar18 = sVar20;
                      if (sVar42 < sVar20) {
                        sVar18 = sVar42;
                      }
                      sVar22 = sVar20;
                      if (sVar20 < sVar42) {
                        sVar22 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar21) {
                        sVar20 = sVar21;
                      }
                      psVar56 = psVar76 + 7;
                      sVar23 = sVar22;
                      if (sVar20 < sVar22) {
                        sVar23 = sVar20;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar42 < sVar19) {
                        sVar42 = sVar19;
                      }
                      sVar19 = sVar18;
                      if (sVar18 < sVar22) {
                        sVar19 = sVar22;
                      }
                      if (sVar19 < sVar42) {
                        sVar42 = sVar19;
                      }
                      if (sVar18 < sVar23) {
                        sVar23 = sVar18;
                      }
                      if (sVar23 < sVar42) {
                        sVar23 = sVar42;
                      }
                      psVar66[-2] = sVar23;
                    }
                    else {
                      uVar84 = 6;
                    }
                    goto LAB_001ff0d4;
                  }
                }
                goto LAB_00201234;
              }
              uVar84 = 3;
            }
LAB_001ff0d4:
            uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
            uVar81 = uVar79 * 8;
            if (6 < uVar43 - uVar65) {
              lVar68 = (ulong)uVar65 * 2;
              lVar58 = 0;
              uVar72 = 0;
              do {
                lVar147 = lVar58 + lVar68;
                psVar6 = (short *)((long)psVar76 + lVar58 + uVar83 + lVar68);
                psVar52 = (short *)((long)psVar76 + lVar147);
                uVar72 = uVar72 + 1;
                lVar149 = lVar58 + lVar68 + uVar82;
                auVar157._0_4_ = (int)*psVar52;
                auVar157._4_4_ = (int)psVar52[1];
                auVar157._8_4_ = (int)psVar52[2];
                auVar157._12_4_ = (int)psVar52[3];
                auVar143._0_4_ = (int)psVar52[4];
                auVar143._4_4_ = (int)psVar52[5];
                auVar143._8_4_ = (int)psVar52[6];
                auVar143._12_4_ = (int)psVar52[7];
                lVar7 = lVar58 + lVar62 + lVar68;
                lVar58 = lVar58 + 0x10;
                psVar52 = (short *)((long)psVar76 + lVar7);
                psVar8 = (short *)((long)psVar76 + lVar149);
                puVar70 = (undefined8 *)((long)psVar67 + lVar147);
                auVar127._0_4_ = (int)*psVar6;
                auVar127._4_4_ = (int)psVar6[1];
                auVar127._8_4_ = (int)psVar6[2];
                auVar127._12_4_ = (int)psVar6[3];
                auVar95._0_4_ = (int)psVar6[4];
                auVar95._4_4_ = (int)psVar6[5];
                auVar95._8_4_ = (int)psVar6[6];
                auVar95._12_4_ = (int)psVar6[7];
                auVar110._0_4_ = (int)*psVar8;
                auVar110._4_4_ = (int)psVar8[1];
                auVar110._8_4_ = (int)psVar8[2];
                auVar110._12_4_ = (int)psVar8[3];
                auVar91 = NEON_smin(auVar157,auVar127,4);
                auVar117._0_4_ = (int)*psVar52;
                auVar117._4_4_ = (int)psVar52[1];
                auVar117._8_4_ = (int)psVar52[2];
                auVar117._12_4_ = (int)psVar52[3];
                auVar166 = NEON_smin(auVar143,auVar95,4);
                auVar153._0_4_ = (int)psVar8[4];
                auVar153._4_4_ = (int)psVar8[5];
                auVar153._8_4_ = (int)psVar8[6];
                auVar153._12_4_ = (int)psVar8[7];
                auVar135._0_4_ = (int)psVar52[4];
                auVar135._4_4_ = (int)psVar52[5];
                auVar135._8_4_ = (int)psVar52[6];
                auVar135._12_4_ = (int)psVar52[7];
                auVar86 = NEON_smax(auVar91,auVar157,4);
                auVar98 = NEON_smax(auVar166,auVar143,4);
                auVar174 = NEON_smax(auVar117,auVar110,4);
                auVar89 = NEON_smax(auVar157,auVar127,4);
                auVar88 = NEON_smax(auVar143,auVar95,4);
                auVar91 = NEON_smin(auVar91,auVar157,4);
                auVar140 = NEON_smin(auVar117,auVar110,4);
                auVar166 = NEON_smin(auVar166,auVar143,4);
                auVar90 = NEON_smax(auVar135,auVar153,4);
                auVar87 = NEON_smin(auVar135,auVar153,4);
                auVar174 = NEON_smin(auVar89,auVar174,4);
                auVar91 = NEON_smax(auVar91,auVar140,4);
                auVar140 = NEON_smin(auVar88,auVar90,4);
                auVar166 = NEON_smax(auVar166,auVar87,4);
                auVar89 = NEON_smax(auVar86,auVar89,4);
                auVar88 = NEON_smax(auVar98,auVar88,4);
                auVar90 = NEON_smin(auVar174,auVar86,4);
                auVar91 = NEON_smin(auVar91,auVar89,4);
                auVar88 = NEON_smin(auVar166,auVar88,4);
                auVar140 = NEON_smin(auVar140,auVar98,4);
                auVar166 = NEON_smax(auVar90,auVar91,4);
                auVar88 = NEON_smax(auVar140,auVar88,4);
                auVar102._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar102._8_2_ = auVar88._0_2_;
                auVar102._10_2_ = auVar88._4_2_;
                auVar102._12_2_ = auVar88._8_2_;
                auVar102._14_2_ = auVar88._12_2_;
                puVar70[1] = auVar102._8_8_;
                *puVar70 = auVar102._0_8_;
              } while (uVar72 < uVar79);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
            }
            sVar20 = *psVar56;
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            sVar42 = *(short *)((long)psVar56 + uVar83);
            iVar54 = (int)uVar84;
            sVar21 = *(short *)((long)psVar56 + uVar82);
            sVar19 = psVar56[lVar73];
            sVar18 = sVar20;
            if (sVar42 < sVar20) {
              sVar18 = sVar42;
            }
            sVar22 = sVar20;
            if (sVar20 < sVar42) {
              sVar22 = sVar42;
            }
            sVar42 = sVar18;
            if (sVar20 < sVar18) {
              sVar42 = sVar20;
            }
            if (sVar18 < sVar20) {
              sVar18 = sVar20;
            }
            sVar20 = sVar19;
            if (sVar19 < sVar21) {
              sVar20 = sVar21;
            }
            sVar23 = sVar22;
            if (sVar20 < sVar22) {
              sVar23 = sVar20;
            }
            if (sVar21 < sVar19) {
              sVar19 = sVar21;
            }
            if (sVar42 < sVar19) {
              sVar42 = sVar19;
            }
            sVar19 = sVar18;
            if (sVar18 < sVar22) {
              sVar19 = sVar22;
            }
            if (sVar19 < sVar42) {
              sVar42 = sVar19;
            }
            if (sVar18 < sVar23) {
              sVar23 = sVar18;
            }
            if (sVar23 < sVar42) {
              sVar23 = sVar42;
            }
            *(short *)((long)psVar67 + uVar78) = sVar23;
            if (iVar54 + 1 < (int)uVar1) {
              sVar20 = psVar56[1];
              sVar42 = *(short *)((long)psVar56 + uVar83 + 2);
              sVar21 = *(short *)((long)psVar56 + uVar82 + 2);
              sVar19 = psVar56[lVar73 + 1];
              sVar18 = sVar20;
              if (sVar42 < sVar20) {
                sVar18 = sVar42;
              }
              sVar22 = sVar20;
              if (sVar20 < sVar42) {
                sVar22 = sVar42;
              }
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar20 = sVar19;
              if (sVar19 < sVar21) {
                sVar20 = sVar21;
              }
              sVar23 = sVar22;
              if (sVar20 < sVar22) {
                sVar23 = sVar20;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              sVar19 = sVar18;
              if (sVar18 < sVar22) {
                sVar19 = sVar22;
              }
              if (sVar19 < sVar42) {
                sVar42 = sVar19;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              *(short *)((long)psVar67 + uVar78 + 2) = sVar23;
              if (iVar54 + 2 < (int)uVar1) {
                sVar20 = psVar56[2];
                sVar42 = *(short *)((long)psVar56 + uVar83 + 4);
                sVar21 = *(short *)((long)psVar56 + uVar82 + 4);
                sVar19 = psVar56[lVar73 + 2];
                sVar18 = sVar20;
                if (sVar42 < sVar20) {
                  sVar18 = sVar42;
                }
                sVar22 = sVar20;
                if (sVar20 < sVar42) {
                  sVar22 = sVar42;
                }
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar20 = sVar19;
                if (sVar19 < sVar21) {
                  sVar20 = sVar21;
                }
                sVar23 = sVar22;
                if (sVar20 < sVar22) {
                  sVar23 = sVar20;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar42 < sVar19) {
                  sVar42 = sVar19;
                }
                sVar19 = sVar18;
                if (sVar18 < sVar22) {
                  sVar19 = sVar22;
                }
                if (sVar19 < sVar42) {
                  sVar42 = sVar19;
                }
                if (sVar18 < sVar23) {
                  sVar23 = sVar18;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                *(short *)((long)psVar67 + uVar78 + 4) = sVar23;
                if (iVar54 + 3 < (int)uVar1) {
                  sVar20 = psVar56[3];
                  sVar42 = *(short *)((long)psVar56 + uVar83 + 6);
                  sVar21 = *(short *)((long)psVar56 + uVar82 + 6);
                  sVar19 = psVar56[lVar73 + 3];
                  sVar18 = sVar20;
                  if (sVar42 < sVar20) {
                    sVar18 = sVar42;
                  }
                  sVar22 = sVar20;
                  if (sVar20 < sVar42) {
                    sVar22 = sVar42;
                  }
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar20 = sVar19;
                  if (sVar19 < sVar21) {
                    sVar20 = sVar21;
                  }
                  sVar23 = sVar22;
                  if (sVar20 < sVar22) {
                    sVar23 = sVar20;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar42 < sVar19) {
                    sVar42 = sVar19;
                  }
                  sVar19 = sVar18;
                  if (sVar18 < sVar22) {
                    sVar19 = sVar22;
                  }
                  if (sVar19 < sVar42) {
                    sVar42 = sVar19;
                  }
                  if (sVar18 < sVar23) {
                    sVar23 = sVar18;
                  }
                  if (sVar23 < sVar42) {
                    sVar23 = sVar42;
                  }
                  *(short *)((long)psVar67 + uVar78 + 6) = sVar23;
                  if (iVar54 + 4 < (int)uVar1) {
                    sVar20 = psVar56[4];
                    sVar42 = *(short *)((long)psVar56 + uVar83 + 8);
                    sVar21 = *(short *)((long)psVar56 + uVar82 + 8);
                    sVar19 = psVar56[lVar73 + 4];
                    sVar18 = sVar20;
                    if (sVar42 < sVar20) {
                      sVar18 = sVar42;
                    }
                    sVar22 = sVar20;
                    if (sVar20 < sVar42) {
                      sVar22 = sVar42;
                    }
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar20 = sVar19;
                    if (sVar19 < sVar21) {
                      sVar20 = sVar21;
                    }
                    sVar23 = sVar22;
                    if (sVar20 < sVar22) {
                      sVar23 = sVar20;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar42 < sVar19) {
                      sVar42 = sVar19;
                    }
                    sVar19 = sVar18;
                    if (sVar18 < sVar22) {
                      sVar19 = sVar22;
                    }
                    if (sVar19 < sVar42) {
                      sVar42 = sVar19;
                    }
                    if (sVar18 < sVar23) {
                      sVar23 = sVar18;
                    }
                    if (sVar23 < sVar42) {
                      sVar23 = sVar42;
                    }
                    *(short *)((long)psVar67 + uVar78 + 8) = sVar23;
                    if (iVar54 + 5 < (int)uVar1) {
                      sVar20 = psVar56[5];
                      sVar42 = *(short *)((long)psVar56 + uVar83 + 10);
                      sVar21 = *(short *)((long)psVar56 + uVar82 + 10);
                      sVar19 = psVar56[lVar73 + 5];
                      sVar18 = sVar20;
                      if (sVar42 < sVar20) {
                        sVar18 = sVar42;
                      }
                      sVar22 = sVar20;
                      if (sVar20 < sVar42) {
                        sVar22 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar20 = sVar19;
                      if (sVar19 < sVar21) {
                        sVar20 = sVar21;
                      }
                      sVar23 = sVar22;
                      if (sVar20 < sVar22) {
                        sVar23 = sVar20;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar42 < sVar19) {
                        sVar42 = sVar19;
                      }
                      sVar19 = sVar18;
                      if (sVar18 < sVar22) {
                        sVar19 = sVar22;
                      }
                      if (sVar19 < sVar42) {
                        sVar42 = sVar19;
                      }
                      if (sVar18 < sVar23) {
                        sVar23 = sVar18;
                      }
                      if (sVar23 < sVar42) {
                        sVar23 = sVar42;
                      }
                      *(short *)((long)psVar67 + uVar78 + 10) = sVar23;
                      if (iVar54 + 6 < (int)uVar1) {
                        sVar20 = psVar56[6];
                        sVar42 = *(short *)((long)psVar56 + uVar83 + 0xc);
                        sVar21 = *(short *)((long)psVar56 + uVar82 + 0xc);
                        sVar19 = psVar56[lVar73 + 6];
                        sVar18 = sVar20;
                        if (sVar42 < sVar20) {
                          sVar18 = sVar42;
                        }
                        sVar22 = sVar20;
                        if (sVar20 < sVar42) {
                          sVar22 = sVar42;
                        }
                        sVar42 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar42 = sVar20;
                        }
                        if (sVar18 < sVar20) {
                          sVar18 = sVar20;
                        }
                        sVar20 = sVar19;
                        if (sVar19 < sVar21) {
                          sVar20 = sVar21;
                        }
                        sVar23 = sVar22;
                        if (sVar20 < sVar22) {
                          sVar23 = sVar20;
                        }
                        if (sVar21 < sVar19) {
                          sVar19 = sVar21;
                        }
                        if (sVar42 < sVar19) {
                          sVar42 = sVar19;
                        }
                        sVar19 = sVar18;
                        if (sVar18 < sVar22) {
                          sVar19 = sVar22;
                        }
                        if (sVar19 < sVar42) {
                          sVar42 = sVar19;
                        }
                        if (sVar18 < sVar23) {
                          sVar23 = sVar18;
                        }
                        if (sVar23 < sVar42) {
                          sVar23 = sVar42;
                        }
                        *(short *)((long)psVar67 + uVar78 + 0xc) = sVar23;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (iVar71 < iVar63) {
          psVar6 = psVar76 + lVar73;
          if (iVar71 < 2) {
            if ((uVar1 < 9 ||
                 (psVar67 < psVar56 && psVar6 < psVar66 ||
                 psVar67 < psVar76 + lVar75 + 8 && psVar76 + lVar75 < psVar66)) ||
               (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
              lVar58 = 0;
              do {
                sVar19 = (psVar76 + lVar75)[lVar58];
                sVar20 = psVar76[lVar58];
                sVar42 = psVar6[lVar58];
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                sVar21 = sVar19;
                if (sVar19 < sVar20) {
                  sVar21 = sVar20;
                }
                if (sVar18 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar20 = sVar21;
                if (sVar21 < sVar19) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar18) {
                  sVar18 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar19 < sVar18) {
                  sVar19 = sVar18;
                }
                psVar67[lVar58] = sVar19;
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar6 >> 1) & 7) & 7;
            uVar65 = uVar1;
            if (uVar79 < uVar1) {
              uVar65 = uVar79;
            }
            psVar56 = psVar76;
            if (uVar65 == 0) {
LAB_00201154:
              uVar84 = (ulong)uVar65;
            }
            else {
              sVar42 = psVar76[lVar75];
              psVar56 = psVar76 + 1;
              sVar19 = *psVar76;
              sVar20 = psVar76[lVar73];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar42;
              if (sVar42 < sVar19) {
                sVar18 = sVar19;
              }
              if (sVar18 < sVar21) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar21) {
                sVar20 = sVar21;
              }
              psVar66[-8] = sVar20;
              if (uVar65 == 1) goto LAB_00201154;
              sVar42 = psVar56[lVar75];
              sVar19 = psVar76[1];
              sVar20 = psVar56[lVar73];
              psVar56 = psVar76 + 2;
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar42;
              if (sVar42 < sVar19) {
                sVar18 = sVar19;
              }
              if (sVar18 < sVar21) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar21) {
                sVar20 = sVar21;
              }
              psVar66[-7] = sVar20;
              if (uVar65 == 2) goto LAB_00201154;
              sVar42 = psVar56[lVar75];
              sVar19 = psVar76[2];
              sVar20 = psVar56[lVar73];
              psVar56 = psVar76 + 3;
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar42;
              if (sVar42 < sVar19) {
                sVar18 = sVar19;
              }
              if (sVar18 < sVar21) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar21) {
                sVar20 = sVar21;
              }
              psVar66[-6] = sVar20;
              if (uVar65 != 3) {
                sVar42 = psVar56[lVar75];
                sVar19 = psVar76[3];
                sVar20 = psVar56[lVar73];
                psVar56 = psVar76 + 4;
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar42;
                if (sVar42 < sVar19) {
                  sVar18 = sVar19;
                }
                if (sVar18 < sVar21) {
                  sVar21 = sVar18;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar21) {
                  sVar20 = sVar21;
                }
                psVar66[-5] = sVar20;
                if (uVar65 != 4) {
                  sVar42 = psVar56[lVar75];
                  sVar19 = psVar76[4];
                  sVar20 = psVar56[lVar73];
                  psVar56 = psVar76 + 5;
                  sVar18 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar18) {
                    sVar21 = sVar18;
                  }
                  sVar18 = sVar42;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar19;
                  }
                  if (sVar18 < sVar21) {
                    sVar21 = sVar18;
                  }
                  if (sVar42 < sVar20) {
                    sVar20 = sVar42;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar21) {
                    sVar20 = sVar21;
                  }
                  psVar66[-4] = sVar20;
                  if (uVar65 != 5) {
                    sVar42 = psVar56[lVar75];
                    sVar19 = psVar76[5];
                    sVar20 = psVar56[lVar73];
                    psVar56 = psVar76 + 6;
                    sVar18 = sVar19;
                    if (sVar42 < sVar19) {
                      sVar18 = sVar42;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    sVar21 = sVar20;
                    if (sVar20 < sVar18) {
                      sVar21 = sVar18;
                    }
                    sVar18 = sVar42;
                    if (sVar42 < sVar19) {
                      sVar18 = sVar19;
                    }
                    if (sVar18 < sVar21) {
                      sVar21 = sVar18;
                    }
                    if (sVar42 < sVar20) {
                      sVar20 = sVar42;
                    }
                    if (sVar19 < sVar20) {
                      sVar20 = sVar19;
                    }
                    if (sVar20 < sVar21) {
                      sVar20 = sVar21;
                    }
                    psVar66[-3] = sVar20;
                    if (uVar65 == 7) {
                      sVar20 = psVar56[lVar75];
                      uVar84 = 7;
                      sVar18 = psVar76[6];
                      sVar42 = psVar56[lVar73];
                      psVar56 = psVar76 + 7;
                      sVar19 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar19 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      if (sVar19 < sVar42) {
                        sVar19 = sVar42;
                      }
                      sVar21 = sVar18;
                      if (sVar18 < sVar20) {
                        sVar21 = sVar20;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar42 < sVar20) {
                        sVar20 = sVar42;
                      }
                      if (sVar18 < sVar20) {
                        sVar20 = sVar18;
                      }
                      if (sVar20 < sVar19) {
                        sVar20 = sVar19;
                      }
                      psVar66[-2] = sVar20;
                    }
                    else {
                      uVar84 = 6;
                    }
                    goto LAB_002001c8;
                  }
                }
                goto LAB_00201154;
              }
              uVar84 = 3;
            }
LAB_002001c8:
            uVar78 = (ulong)uVar65;
            uVar79 = ((uVar1 - uVar65) - 8 >> 3) + 1;
            uVar81 = uVar79 * 8;
            if (6 < uVar43 - uVar65) {
              lVar68 = uVar78 * 2;
              lVar58 = 0;
              lVar149 = NEON_shl(lVar73 + uVar78,1);
              uVar72 = 0;
              lVar147 = NEON_shl(lVar75 + uVar78,1);
              do {
                uVar72 = uVar72 + 1;
                psVar6 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar64);
                psVar52 = (short *)((long)psVar76 + lVar58 + lVar147);
                lVar7 = lVar58 + lVar68;
                psVar8 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar62);
                psVar9 = (short *)((long)psVar76 + lVar7);
                auVar129._0_4_ = (int)*psVar6;
                auVar129._4_4_ = (int)psVar6[1];
                auVar129._8_4_ = (int)psVar6[2];
                auVar129._12_4_ = (int)psVar6[3];
                psVar11 = (short *)((long)psVar76 + lVar58 + lVar149);
                auVar188._0_4_ = (int)*psVar52;
                auVar188._4_4_ = (int)psVar52[1];
                auVar188._8_4_ = (int)psVar52[2];
                auVar188._12_4_ = (int)psVar52[3];
                auVar189._0_4_ = (int)psVar6[4];
                auVar189._4_4_ = (int)psVar6[5];
                auVar189._8_4_ = (int)psVar6[6];
                auVar189._12_4_ = (int)psVar6[7];
                lVar58 = lVar58 + 0x10;
                puVar70 = (undefined8 *)((long)psVar67 + lVar7);
                auVar184._0_4_ = (int)psVar52[4];
                auVar184._4_4_ = (int)psVar52[5];
                auVar184._8_4_ = (int)psVar52[6];
                auVar184._12_4_ = (int)psVar52[7];
                auVar186._0_4_ = (int)*psVar8;
                auVar186._4_4_ = (int)psVar8[1];
                auVar186._8_4_ = (int)psVar8[2];
                auVar186._12_4_ = (int)psVar8[3];
                auVar91 = NEON_smin(auVar188,auVar129,4);
                auVar145._0_4_ = (int)psVar8[4];
                auVar145._4_4_ = (int)psVar8[5];
                auVar145._8_4_ = (int)psVar8[6];
                auVar145._12_4_ = (int)psVar8[7];
                auVar174 = NEON_smax(auVar188,auVar129,4);
                auVar172._0_4_ = (int)*psVar9;
                auVar172._4_4_ = (int)psVar9[1];
                auVar172._8_4_ = (int)psVar9[2];
                auVar172._12_4_ = (int)psVar9[3];
                auVar159._0_4_ = (int)psVar9[4];
                auVar159._4_4_ = (int)psVar9[5];
                auVar159._8_4_ = (int)psVar9[6];
                auVar159._12_4_ = (int)psVar9[7];
                auVar166 = NEON_smin(auVar184,auVar189,4);
                auVar88 = NEON_smax(auVar184,auVar189,4);
                auVar165._0_4_ = (int)*psVar11;
                auVar165._4_4_ = (int)psVar11[1];
                auVar165._8_4_ = (int)psVar11[2];
                auVar165._12_4_ = (int)psVar11[3];
                auVar137._0_4_ = (int)psVar11[4];
                auVar137._4_4_ = (int)psVar11[5];
                auVar137._8_4_ = (int)psVar11[6];
                auVar137._12_4_ = (int)psVar11[7];
                auVar86 = NEON_smax(auVar91,auVar172,4);
                auVar98 = NEON_smax(auVar166,auVar159,4);
                auVar90 = NEON_smax(auVar165,auVar186,4);
                auVar91 = NEON_smin(auVar91,auVar172,4);
                auVar140 = NEON_smax(auVar137,auVar145,4);
                auVar87 = NEON_smin(auVar165,auVar186,4);
                auVar166 = NEON_smin(auVar166,auVar159,4);
                auVar89 = NEON_smin(auVar137,auVar145,4);
                auVar90 = NEON_smin(auVar174,auVar90,4);
                auVar91 = NEON_smax(auVar91,auVar87,4);
                auVar140 = NEON_smin(auVar88,auVar140,4);
                auVar166 = NEON_smax(auVar166,auVar89,4);
                auVar174 = NEON_smax(auVar86,auVar174,4);
                auVar88 = NEON_smax(auVar98,auVar88,4);
                auVar90 = NEON_smin(auVar90,auVar86,4);
                auVar91 = NEON_smin(auVar91,auVar174,4);
                auVar88 = NEON_smin(auVar166,auVar88,4);
                auVar140 = NEON_smin(auVar140,auVar98,4);
                auVar166 = NEON_smax(auVar90,auVar91,4);
                auVar88 = NEON_smax(auVar140,auVar88,4);
                auVar185._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar185._8_2_ = auVar88._0_2_;
                auVar185._10_2_ = auVar88._4_2_;
                auVar185._12_2_ = auVar88._8_2_;
                auVar185._14_2_ = auVar88._12_2_;
                puVar70[1] = auVar185._8_8_;
                *puVar70 = auVar185._0_8_;
              } while (uVar72 < uVar79);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar1 - uVar65 == uVar81) goto LAB_001fe290;
            }
            sVar42 = psVar56[lVar75];
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            sVar19 = *psVar56;
            iVar54 = (int)uVar84;
            sVar20 = psVar56[lVar73];
            sVar18 = sVar19;
            if (sVar42 < sVar19) {
              sVar18 = sVar42;
            }
            if (sVar19 < sVar42) {
              sVar19 = sVar42;
            }
            sVar21 = sVar20;
            if (sVar20 < sVar18) {
              sVar21 = sVar18;
            }
            sVar18 = sVar42;
            if (sVar42 < sVar19) {
              sVar18 = sVar19;
            }
            if (sVar18 < sVar21) {
              sVar21 = sVar18;
            }
            if (sVar42 < sVar20) {
              sVar20 = sVar42;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar20 < sVar21) {
              sVar20 = sVar21;
            }
            *(short *)((long)psVar67 + uVar78) = sVar20;
            if (iVar54 + 1 < (int)uVar1) {
              sVar42 = psVar56[lVar75 + 1];
              sVar19 = psVar56[1];
              sVar20 = psVar56[lVar73 + 1];
              sVar18 = sVar19;
              if (sVar42 < sVar19) {
                sVar18 = sVar42;
              }
              if (sVar19 < sVar42) {
                sVar19 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar20 < sVar18) {
                sVar21 = sVar18;
              }
              sVar18 = sVar42;
              if (sVar42 < sVar19) {
                sVar18 = sVar19;
              }
              if (sVar18 < sVar21) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar20) {
                sVar20 = sVar42;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar21) {
                sVar20 = sVar21;
              }
              *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
              if (iVar54 + 2 < (int)uVar1) {
                sVar42 = psVar56[lVar75 + 2];
                sVar19 = psVar56[2];
                sVar20 = psVar56[lVar73 + 2];
                sVar18 = sVar19;
                if (sVar42 < sVar19) {
                  sVar18 = sVar42;
                }
                if (sVar19 < sVar42) {
                  sVar19 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar20 < sVar18) {
                  sVar21 = sVar18;
                }
                sVar18 = sVar42;
                if (sVar42 < sVar19) {
                  sVar18 = sVar19;
                }
                if (sVar18 < sVar21) {
                  sVar21 = sVar18;
                }
                if (sVar42 < sVar20) {
                  sVar20 = sVar42;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar21) {
                  sVar20 = sVar21;
                }
                *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
                if (iVar54 + 3 < (int)uVar1) {
                  sVar42 = psVar56[lVar75 + 3];
                  sVar19 = psVar56[3];
                  sVar20 = psVar56[lVar73 + 3];
                  sVar18 = sVar19;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar42;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar20 < sVar18) {
                    sVar21 = sVar18;
                  }
                  sVar18 = sVar42;
                  if (sVar42 < sVar19) {
                    sVar18 = sVar19;
                  }
                  if (sVar18 < sVar21) {
                    sVar21 = sVar18;
                  }
                  if (sVar42 < sVar20) {
                    sVar20 = sVar42;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar21) {
                    sVar20 = sVar21;
                  }
                  *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                  if (iVar54 + 4 < (int)uVar1) {
                    sVar42 = psVar56[lVar75 + 4];
                    sVar19 = psVar56[4];
                    sVar20 = psVar56[lVar73 + 4];
                    sVar18 = sVar19;
                    if (sVar42 < sVar19) {
                      sVar18 = sVar42;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    sVar21 = sVar20;
                    if (sVar20 < sVar18) {
                      sVar21 = sVar18;
                    }
                    sVar18 = sVar42;
                    if (sVar42 < sVar19) {
                      sVar18 = sVar19;
                    }
                    if (sVar18 < sVar21) {
                      sVar21 = sVar18;
                    }
                    if (sVar42 < sVar20) {
                      sVar20 = sVar42;
                    }
                    if (sVar19 < sVar20) {
                      sVar20 = sVar19;
                    }
                    if (sVar20 < sVar21) {
                      sVar20 = sVar21;
                    }
                    *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                    if (iVar54 + 5 < (int)uVar1) {
                      sVar42 = psVar56[lVar75 + 5];
                      sVar19 = psVar56[5];
                      sVar20 = psVar56[lVar73 + 5];
                      sVar18 = sVar19;
                      if (sVar42 < sVar19) {
                        sVar18 = sVar42;
                      }
                      if (sVar19 < sVar42) {
                        sVar19 = sVar42;
                      }
                      sVar21 = sVar20;
                      if (sVar20 < sVar18) {
                        sVar21 = sVar18;
                      }
                      sVar18 = sVar42;
                      if (sVar42 < sVar19) {
                        sVar18 = sVar19;
                      }
                      if (sVar18 < sVar21) {
                        sVar21 = sVar18;
                      }
                      if (sVar42 < sVar20) {
                        sVar20 = sVar42;
                      }
                      if (sVar19 < sVar20) {
                        sVar20 = sVar19;
                      }
                      if (sVar20 < sVar21) {
                        sVar20 = sVar21;
                      }
                      *(short *)((long)psVar67 + uVar78 + 10) = sVar20;
                      if (iVar54 + 6 < (int)uVar1) {
                        sVar20 = psVar56[lVar75 + 6];
                        sVar18 = psVar56[6];
                        sVar42 = psVar56[lVar73 + 6];
                        sVar19 = sVar18;
                        if (sVar20 < sVar18) {
                          sVar19 = sVar20;
                        }
                        if (sVar18 < sVar20) {
                          sVar18 = sVar20;
                        }
                        if (sVar19 < sVar42) {
                          sVar19 = sVar42;
                        }
                        sVar21 = sVar20;
                        if (sVar20 < sVar18) {
                          sVar21 = sVar18;
                        }
                        if (sVar21 < sVar19) {
                          sVar19 = sVar21;
                        }
                        if (sVar42 < sVar20) {
                          sVar20 = sVar42;
                        }
                        if (sVar18 < sVar20) {
                          sVar20 = sVar18;
                        }
                        if (sVar20 < sVar19) {
                          sVar20 = sVar19;
                        }
                        *(short *)((long)psVar67 + uVar78 + 0xc) = sVar20;
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            psVar52 = psVar76 + lVar75;
            if (((uVar1 < 9 ||
                 (psVar67 < psVar56 && psVar6 < psVar66 ||
                 psVar67 < (short *)((long)psVar76 + lVar57) &&
                 (short *)((long)psVar76 + uVar82) < psVar66)) ||
                 psVar67 < psVar76 + lVar75 + 8 && psVar52 < psVar66) ||
               (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
              lVar58 = 0;
              do {
                sVar20 = psVar52[lVar58];
                sVar18 = psVar76[lVar58];
                sVar42 = ((short *)((long)psVar76 + uVar82))[lVar58];
                sVar19 = sVar18;
                if (sVar20 < sVar18) {
                  sVar19 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar21 = psVar6[lVar58];
                sVar22 = sVar21;
                if (sVar21 < sVar42) {
                  sVar22 = sVar42;
                }
                if (sVar20 < sVar22) {
                  sVar22 = sVar20;
                }
                if (sVar42 < sVar21) {
                  sVar21 = sVar42;
                }
                if (sVar19 < sVar21) {
                  sVar19 = sVar21;
                }
                sVar42 = sVar18;
                if (sVar18 < sVar20) {
                  sVar42 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar18 < sVar22) {
                  sVar22 = sVar18;
                }
                if (sVar22 < sVar19) {
                  sVar22 = sVar19;
                }
                psVar67[lVar58] = sVar22;
                lVar58 = lVar58 + 1;
              } while ((int)lVar58 < (int)uVar1);
              goto LAB_001fe290;
            }
            uVar79 = -((uint)((ulong)psVar52 >> 1) & 7) & 7;
            if (uVar1 < uVar79) {
              uVar79 = uVar1;
            }
            psVar56 = psVar76;
            if (uVar79 == 0) {
LAB_001ffe48:
              uVar84 = (ulong)uVar79;
            }
            else {
              sVar20 = psVar76[lVar75];
              psVar56 = psVar76 + 1;
              sVar18 = *psVar76;
              sVar21 = *(short *)((long)psVar76 + uVar82);
              sVar19 = psVar76[lVar73];
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar22 = sVar19;
              if (sVar19 < sVar21) {
                sVar22 = sVar21;
              }
              sVar23 = sVar20;
              if (sVar22 < sVar20) {
                sVar23 = sVar22;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              if (sVar20 < sVar42) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-8] = sVar23;
              if (uVar79 == 1) goto LAB_001ffe48;
              sVar20 = psVar56[lVar75];
              sVar18 = psVar76[1];
              sVar21 = *(short *)((long)psVar56 + uVar82);
              sVar19 = psVar56[lVar73];
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar22 = sVar19;
              if (sVar19 < sVar21) {
                sVar22 = sVar21;
              }
              psVar56 = psVar76 + 2;
              sVar23 = sVar20;
              if (sVar22 < sVar20) {
                sVar23 = sVar22;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              if (sVar20 < sVar42) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-7] = sVar23;
              if (uVar79 == 2) goto LAB_001ffe48;
              sVar20 = psVar56[lVar75];
              sVar18 = psVar76[2];
              sVar21 = *(short *)((long)psVar56 + uVar82);
              sVar19 = psVar56[lVar73];
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar22 = sVar19;
              if (sVar19 < sVar21) {
                sVar22 = sVar21;
              }
              psVar56 = psVar76 + 3;
              sVar23 = sVar20;
              if (sVar22 < sVar20) {
                sVar23 = sVar22;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              if (sVar20 < sVar42) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              psVar66[-6] = sVar23;
              if (uVar79 != 3) {
                sVar20 = psVar56[lVar75];
                sVar18 = psVar76[3];
                sVar21 = *(short *)((long)psVar56 + uVar82);
                sVar19 = psVar56[lVar73];
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar22 = sVar19;
                if (sVar19 < sVar21) {
                  sVar22 = sVar21;
                }
                psVar56 = psVar76 + 4;
                sVar23 = sVar20;
                if (sVar22 < sVar20) {
                  sVar23 = sVar22;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar42 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar42) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar23) {
                  sVar23 = sVar18;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                psVar66[-5] = sVar23;
                if (uVar79 != 4) {
                  sVar20 = psVar56[lVar75];
                  sVar18 = psVar76[4];
                  sVar21 = *(short *)((long)psVar56 + uVar82);
                  sVar19 = psVar56[lVar73];
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar22 = sVar19;
                  if (sVar19 < sVar21) {
                    sVar22 = sVar21;
                  }
                  psVar56 = psVar76 + 5;
                  sVar23 = sVar20;
                  if (sVar22 < sVar20) {
                    sVar23 = sVar22;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar42 < sVar19) {
                    sVar42 = sVar19;
                  }
                  if (sVar20 < sVar18) {
                    sVar20 = sVar18;
                  }
                  if (sVar20 < sVar42) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar23) {
                    sVar23 = sVar18;
                  }
                  if (sVar23 < sVar42) {
                    sVar23 = sVar42;
                  }
                  psVar66[-4] = sVar23;
                  if (uVar79 != 5) {
                    sVar20 = psVar56[lVar75];
                    sVar18 = psVar76[5];
                    sVar21 = *(short *)((long)psVar56 + uVar82);
                    sVar19 = psVar56[lVar73];
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar22 = sVar19;
                    if (sVar19 < sVar21) {
                      sVar22 = sVar21;
                    }
                    psVar56 = psVar76 + 6;
                    sVar23 = sVar20;
                    if (sVar22 < sVar20) {
                      sVar23 = sVar22;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar42 < sVar19) {
                      sVar42 = sVar19;
                    }
                    if (sVar20 < sVar18) {
                      sVar20 = sVar18;
                    }
                    if (sVar20 < sVar42) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar23) {
                      sVar23 = sVar18;
                    }
                    if (sVar23 < sVar42) {
                      sVar23 = sVar42;
                    }
                    psVar66[-3] = sVar23;
                    if (uVar79 == 7) {
                      sVar19 = psVar56[lVar75];
                      uVar84 = 7;
                      sVar42 = psVar76[6];
                      sVar21 = *(short *)((long)psVar56 + uVar82);
                      sVar18 = psVar56[lVar73];
                      sVar20 = sVar19;
                      if (sVar42 < sVar19) {
                        sVar20 = sVar42;
                      }
                      sVar22 = sVar19;
                      if (sVar19 < sVar42) {
                        sVar22 = sVar42;
                      }
                      sVar42 = sVar18;
                      if (sVar18 < sVar21) {
                        sVar42 = sVar21;
                      }
                      psVar56 = psVar76 + 7;
                      if (sVar19 < sVar42) {
                        sVar42 = sVar19;
                      }
                      if (sVar21 < sVar18) {
                        sVar18 = sVar21;
                      }
                      if (sVar20 < sVar18) {
                        sVar20 = sVar18;
                      }
                      if (sVar19 < sVar22) {
                        sVar19 = sVar22;
                      }
                      if (sVar19 < sVar20) {
                        sVar20 = sVar19;
                      }
                      if (sVar22 < sVar42) {
                        sVar42 = sVar22;
                      }
                      if (sVar42 < sVar20) {
                        sVar42 = sVar20;
                      }
                      psVar66[-2] = sVar42;
                    }
                    else {
                      uVar84 = 6;
                    }
                    goto LAB_001ff988;
                  }
                }
                goto LAB_001ffe48;
              }
              uVar84 = 3;
            }
LAB_001ff988:
            uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
            uVar81 = uVar65 * 8;
            if (6 < uVar43 - uVar79) {
              lVar68 = (ulong)uVar79 * 2;
              lVar58 = 0;
              uVar72 = 0;
              lVar147 = NEON_shl(lVar75 + (ulong)uVar79,1);
              do {
                psVar6 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar64);
                uVar72 = uVar72 + 1;
                lVar149 = lVar58 + lVar68 + uVar82;
                psVar52 = (short *)((long)psVar76 + lVar58 + lVar147);
                lVar7 = lVar58 + lVar68;
                auVar128._0_4_ = (int)*psVar6;
                auVar128._4_4_ = (int)psVar6[1];
                auVar128._8_4_ = (int)psVar6[2];
                auVar128._12_4_ = (int)psVar6[3];
                auVar123._0_4_ = (int)psVar6[4];
                auVar123._4_4_ = (int)psVar6[5];
                auVar123._8_4_ = (int)psVar6[6];
                auVar123._12_4_ = (int)psVar6[7];
                lVar10 = lVar58 + lVar68 + lVar62;
                lVar58 = lVar58 + 0x10;
                psVar6 = (short *)((long)psVar76 + lVar149);
                auVar118._0_4_ = (int)*psVar52;
                auVar118._4_4_ = (int)psVar52[1];
                auVar118._8_4_ = (int)psVar52[2];
                auVar118._12_4_ = (int)psVar52[3];
                auVar96._0_4_ = (int)psVar52[4];
                auVar96._4_4_ = (int)psVar52[5];
                auVar96._8_4_ = (int)psVar52[6];
                auVar96._12_4_ = (int)psVar52[7];
                psVar52 = (short *)((long)psVar76 + lVar10);
                psVar8 = (short *)((long)psVar76 + lVar7);
                puVar70 = (undefined8 *)((long)psVar67 + lVar7);
                auVar91 = NEON_smin(auVar118,auVar128,4);
                auVar174 = NEON_smax(auVar118,auVar128,4);
                auVar111._0_4_ = (int)*psVar6;
                auVar111._4_4_ = (int)psVar6[1];
                auVar111._8_4_ = (int)psVar6[2];
                auVar111._12_4_ = (int)psVar6[3];
                auVar171._0_4_ = (int)*psVar8;
                auVar171._4_4_ = (int)psVar8[1];
                auVar171._8_4_ = (int)psVar8[2];
                auVar171._12_4_ = (int)psVar8[3];
                auVar158._0_4_ = (int)psVar8[4];
                auVar158._4_4_ = (int)psVar8[5];
                auVar158._8_4_ = (int)psVar8[6];
                auVar158._12_4_ = (int)psVar8[7];
                auVar144._0_4_ = (int)psVar6[4];
                auVar144._4_4_ = (int)psVar6[5];
                auVar144._8_4_ = (int)psVar6[6];
                auVar144._12_4_ = (int)psVar6[7];
                auVar166 = NEON_smin(auVar96,auVar123,4);
                auVar164._0_4_ = (int)*psVar52;
                auVar164._4_4_ = (int)psVar52[1];
                auVar164._8_4_ = (int)psVar52[2];
                auVar164._12_4_ = (int)psVar52[3];
                auVar136._0_4_ = (int)psVar52[4];
                auVar136._4_4_ = (int)psVar52[5];
                auVar136._8_4_ = (int)psVar52[6];
                auVar136._12_4_ = (int)psVar52[7];
                auVar88 = NEON_smax(auVar96,auVar123,4);
                auVar86 = NEON_smax(auVar91,auVar171,4);
                auVar98 = NEON_smax(auVar166,auVar158,4);
                auVar90 = NEON_smax(auVar164,auVar111,4);
                auVar91 = NEON_smin(auVar91,auVar171,4);
                auVar140 = NEON_smax(auVar136,auVar144,4);
                auVar87 = NEON_smin(auVar164,auVar111,4);
                auVar166 = NEON_smin(auVar166,auVar158,4);
                auVar89 = NEON_smin(auVar136,auVar144,4);
                auVar90 = NEON_smin(auVar174,auVar90,4);
                auVar91 = NEON_smax(auVar91,auVar87,4);
                auVar140 = NEON_smin(auVar88,auVar140,4);
                auVar166 = NEON_smax(auVar166,auVar89,4);
                auVar174 = NEON_smax(auVar86,auVar174,4);
                auVar88 = NEON_smax(auVar98,auVar88,4);
                auVar90 = NEON_smin(auVar90,auVar86,4);
                auVar91 = NEON_smin(auVar91,auVar174,4);
                auVar88 = NEON_smin(auVar166,auVar88,4);
                auVar140 = NEON_smin(auVar140,auVar98,4);
                auVar166 = NEON_smax(auVar90,auVar91,4);
                auVar88 = NEON_smax(auVar140,auVar88,4);
                auVar103._0_8_ =
                     CONCAT26(auVar166._12_2_,
                              CONCAT24(auVar166._8_2_,CONCAT22(auVar166._4_2_,auVar166._0_2_)));
                auVar103._8_2_ = auVar88._0_2_;
                auVar103._10_2_ = auVar88._4_2_;
                auVar103._12_2_ = auVar88._8_2_;
                auVar103._14_2_ = auVar88._12_2_;
                puVar70[1] = auVar103._8_8_;
                *puVar70 = auVar103._0_8_;
              } while (uVar72 < uVar65);
              uVar84 = (ulong)((int)uVar84 + uVar81);
              psVar56 = psVar56 + uVar81;
              if (uVar1 - uVar79 == uVar81) goto LAB_001fe290;
            }
            uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
            sVar20 = psVar56[lVar75];
            sVar21 = *(short *)((long)psVar56 + uVar82);
            iVar54 = (int)uVar84;
            sVar18 = *psVar56;
            sVar19 = psVar56[lVar73];
            sVar42 = sVar18;
            if (sVar20 < sVar18) {
              sVar42 = sVar20;
            }
            if (sVar18 < sVar20) {
              sVar18 = sVar20;
            }
            sVar22 = sVar19;
            if (sVar19 < sVar21) {
              sVar22 = sVar21;
            }
            sVar23 = sVar20;
            if (sVar22 < sVar20) {
              sVar23 = sVar22;
            }
            if (sVar21 < sVar19) {
              sVar19 = sVar21;
            }
            if (sVar42 < sVar19) {
              sVar42 = sVar19;
            }
            if (sVar20 < sVar18) {
              sVar20 = sVar18;
            }
            if (sVar20 < sVar42) {
              sVar42 = sVar20;
            }
            if (sVar18 < sVar23) {
              sVar23 = sVar18;
            }
            if (sVar23 < sVar42) {
              sVar23 = sVar42;
            }
            *(short *)((long)psVar67 + uVar78) = sVar23;
            if (iVar54 + 1 < (int)uVar1) {
              sVar20 = psVar56[lVar75 + 1];
              sVar21 = *(short *)((long)psVar56 + uVar82 + 2);
              sVar19 = psVar56[lVar73 + 1];
              sVar18 = psVar56[1];
              sVar42 = sVar18;
              if (sVar20 < sVar18) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar20) {
                sVar18 = sVar20;
              }
              sVar22 = sVar19;
              if (sVar19 < sVar21) {
                sVar22 = sVar21;
              }
              sVar23 = sVar20;
              if (sVar22 < sVar20) {
                sVar23 = sVar22;
              }
              if (sVar21 < sVar19) {
                sVar19 = sVar21;
              }
              if (sVar42 < sVar19) {
                sVar42 = sVar19;
              }
              if (sVar20 < sVar18) {
                sVar20 = sVar18;
              }
              if (sVar20 < sVar42) {
                sVar42 = sVar20;
              }
              if (sVar18 < sVar23) {
                sVar23 = sVar18;
              }
              if (sVar23 < sVar42) {
                sVar23 = sVar42;
              }
              *(short *)((long)psVar67 + uVar78 + 2) = sVar23;
              if (iVar54 + 2 < (int)uVar1) {
                sVar20 = psVar56[lVar75 + 2];
                sVar18 = psVar56[2];
                sVar21 = *(short *)((long)psVar56 + uVar82 + 4);
                sVar19 = psVar56[lVar73 + 2];
                sVar42 = sVar18;
                if (sVar20 < sVar18) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar22 = sVar19;
                if (sVar19 < sVar21) {
                  sVar22 = sVar21;
                }
                sVar23 = sVar20;
                if (sVar22 < sVar20) {
                  sVar23 = sVar22;
                }
                if (sVar21 < sVar19) {
                  sVar19 = sVar21;
                }
                if (sVar42 < sVar19) {
                  sVar42 = sVar19;
                }
                if (sVar20 < sVar18) {
                  sVar20 = sVar18;
                }
                if (sVar20 < sVar42) {
                  sVar42 = sVar20;
                }
                if (sVar18 < sVar23) {
                  sVar23 = sVar18;
                }
                if (sVar23 < sVar42) {
                  sVar23 = sVar42;
                }
                *(short *)((long)psVar67 + uVar78 + 4) = sVar23;
                if (iVar54 + 3 < (int)uVar1) {
                  sVar20 = psVar56[lVar75 + 3];
                  sVar18 = psVar56[3];
                  sVar21 = *(short *)((long)psVar56 + uVar82 + 6);
                  sVar19 = psVar56[lVar73 + 3];
                  sVar42 = sVar18;
                  if (sVar20 < sVar18) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar22 = sVar19;
                  if (sVar19 < sVar21) {
                    sVar22 = sVar21;
                  }
                  sVar23 = sVar20;
                  if (sVar22 < sVar20) {
                    sVar23 = sVar22;
                  }
                  if (sVar21 < sVar19) {
                    sVar19 = sVar21;
                  }
                  if (sVar42 < sVar19) {
                    sVar42 = sVar19;
                  }
                  if (sVar20 < sVar18) {
                    sVar20 = sVar18;
                  }
                  if (sVar20 < sVar42) {
                    sVar42 = sVar20;
                  }
                  if (sVar18 < sVar23) {
                    sVar23 = sVar18;
                  }
                  if (sVar23 < sVar42) {
                    sVar23 = sVar42;
                  }
                  *(short *)((long)psVar67 + uVar78 + 6) = sVar23;
                  if (iVar54 + 4 < (int)uVar1) {
                    sVar20 = psVar56[lVar75 + 4];
                    sVar18 = psVar56[4];
                    sVar21 = *(short *)((long)psVar56 + uVar82 + 8);
                    sVar19 = psVar56[lVar73 + 4];
                    sVar42 = sVar18;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar22 = sVar19;
                    if (sVar19 < sVar21) {
                      sVar22 = sVar21;
                    }
                    sVar23 = sVar20;
                    if (sVar22 < sVar20) {
                      sVar23 = sVar22;
                    }
                    if (sVar21 < sVar19) {
                      sVar19 = sVar21;
                    }
                    if (sVar42 < sVar19) {
                      sVar42 = sVar19;
                    }
                    if (sVar20 < sVar18) {
                      sVar20 = sVar18;
                    }
                    if (sVar20 < sVar42) {
                      sVar42 = sVar20;
                    }
                    if (sVar18 < sVar23) {
                      sVar23 = sVar18;
                    }
                    if (sVar23 < sVar42) {
                      sVar23 = sVar42;
                    }
                    *(short *)((long)psVar67 + uVar78 + 8) = sVar23;
                    if (iVar54 + 5 < (int)uVar1) {
                      sVar20 = psVar56[lVar75 + 5];
                      sVar18 = psVar56[5];
                      sVar21 = *(short *)((long)psVar56 + uVar82 + 10);
                      sVar19 = psVar56[lVar73 + 5];
                      sVar42 = sVar18;
                      if (sVar20 < sVar18) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar20) {
                        sVar18 = sVar20;
                      }
                      sVar22 = sVar19;
                      if (sVar19 < sVar21) {
                        sVar22 = sVar21;
                      }
                      sVar23 = sVar20;
                      if (sVar22 < sVar20) {
                        sVar23 = sVar22;
                      }
                      if (sVar21 < sVar19) {
                        sVar19 = sVar21;
                      }
                      if (sVar42 < sVar19) {
                        sVar42 = sVar19;
                      }
                      if (sVar20 < sVar18) {
                        sVar20 = sVar18;
                      }
                      if (sVar20 < sVar42) {
                        sVar42 = sVar20;
                      }
                      if (sVar18 < sVar23) {
                        sVar23 = sVar18;
                      }
                      if (sVar23 < sVar42) {
                        sVar23 = sVar42;
                      }
                      *(short *)((long)psVar67 + uVar78 + 10) = sVar23;
                      if (iVar54 + 6 < (int)uVar1) {
                        sVar42 = psVar56[lVar75 + 6];
                        sVar18 = psVar56[6];
                        sVar21 = *(short *)((long)psVar56 + uVar82 + 0xc);
                        sVar19 = psVar56[lVar73 + 6];
                        sVar20 = sVar18;
                        if (sVar42 < sVar18) {
                          sVar20 = sVar42;
                        }
                        if (sVar18 < sVar42) {
                          sVar18 = sVar42;
                        }
                        sVar22 = sVar19;
                        if (sVar19 < sVar21) {
                          sVar22 = sVar21;
                        }
                        if (sVar42 < sVar22) {
                          sVar22 = sVar42;
                        }
                        if (sVar21 < sVar19) {
                          sVar19 = sVar21;
                        }
                        if (sVar20 < sVar19) {
                          sVar20 = sVar19;
                        }
                        sVar19 = sVar18;
                        if (sVar18 < sVar42) {
                          sVar19 = sVar42;
                        }
                        if (sVar19 < sVar20) {
                          sVar20 = sVar19;
                        }
                        if (sVar18 < sVar22) {
                          sVar22 = sVar18;
                        }
                        if (sVar22 < sVar20) {
                          sVar22 = sVar20;
                        }
                        *(short *)((long)psVar67 + uVar78 + 0xc) = sVar22;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (iVar71 < 2) {
          if ((psVar67 < psVar56 && psVar76 + lVar73 < psVar66 ||
               psVar67 < psVar76 + 8 && psVar76 < psVar66) || (uVar1 < 9)) {
            lVar58 = 0;
            do {
              sVar20 = psVar76[lVar58];
              sVar19 = (psVar76 + lVar73)[lVar58];
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              if (sVar20 < sVar19) {
                sVar19 = sVar20;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar42) {
                sVar20 = sVar42;
              }
              psVar67[lVar58] = sVar20;
              lVar58 = lVar58 + 1;
            } while ((int)lVar58 < (int)uVar1);
            goto LAB_001fe290;
          }
          uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
          if (uVar1 < uVar79) {
            uVar79 = uVar1;
          }
          psVar56 = psVar76;
          if (uVar79 == 0) {
LAB_002011d0:
            uVar84 = (ulong)uVar79;
          }
          else {
            psVar56 = psVar76 + 1;
            sVar20 = *psVar76;
            sVar19 = psVar76[lVar73];
            sVar18 = sVar19;
            if (sVar19 < sVar20) {
              sVar18 = sVar20;
            }
            sVar42 = sVar20;
            if (sVar18 < sVar20) {
              sVar42 = sVar18;
            }
            if (sVar20 < sVar19) {
              sVar19 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar20 < sVar42) {
              sVar20 = sVar42;
            }
            psVar66[-8] = sVar20;
            if (uVar79 == 1) goto LAB_002011d0;
            sVar20 = psVar76[1];
            sVar19 = psVar56[lVar73];
            psVar56 = psVar76 + 2;
            sVar18 = sVar19;
            if (sVar19 < sVar20) {
              sVar18 = sVar20;
            }
            sVar42 = sVar20;
            if (sVar18 < sVar20) {
              sVar42 = sVar18;
            }
            if (sVar20 < sVar19) {
              sVar19 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar20 < sVar42) {
              sVar20 = sVar42;
            }
            psVar66[-7] = sVar20;
            if (uVar79 == 2) goto LAB_002011d0;
            sVar20 = psVar76[2];
            sVar19 = psVar56[lVar73];
            psVar56 = psVar76 + 3;
            sVar18 = sVar19;
            if (sVar19 < sVar20) {
              sVar18 = sVar20;
            }
            sVar42 = sVar20;
            if (sVar18 < sVar20) {
              sVar42 = sVar18;
            }
            if (sVar20 < sVar19) {
              sVar19 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar20 < sVar42) {
              sVar20 = sVar42;
            }
            psVar66[-6] = sVar20;
            if (uVar79 != 3) {
              sVar20 = psVar76[3];
              sVar19 = psVar56[lVar73];
              psVar56 = psVar76 + 4;
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              if (sVar20 < sVar19) {
                sVar19 = sVar20;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar42) {
                sVar20 = sVar42;
              }
              psVar66[-5] = sVar20;
              if (uVar79 != 4) {
                sVar20 = psVar76[4];
                sVar19 = psVar56[lVar73];
                psVar56 = psVar76 + 5;
                sVar18 = sVar19;
                if (sVar19 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                if (sVar20 < sVar19) {
                  sVar19 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                psVar66[-4] = sVar20;
                if (uVar79 != 5) {
                  sVar20 = psVar76[5];
                  sVar19 = psVar56[lVar73];
                  psVar56 = psVar76 + 6;
                  sVar18 = sVar19;
                  if (sVar19 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar42 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar42 = sVar18;
                  }
                  if (sVar20 < sVar19) {
                    sVar19 = sVar20;
                  }
                  if (sVar20 < sVar19) {
                    sVar19 = sVar20;
                  }
                  if (sVar19 < sVar42) {
                    sVar19 = sVar42;
                  }
                  psVar66[-3] = sVar19;
                  if (uVar79 == 7) {
                    sVar20 = psVar76[6];
                    uVar84 = 7;
                    sVar19 = psVar56[lVar73];
                    psVar56 = psVar76 + 7;
                    sVar18 = sVar19;
                    if (sVar19 < sVar20) {
                      sVar18 = sVar20;
                    }
                    if (sVar20 < sVar18) {
                      sVar18 = sVar20;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar19 < sVar18) {
                      sVar19 = sVar18;
                    }
                    psVar66[-2] = sVar19;
                  }
                  else {
                    uVar84 = 6;
                  }
                  goto LAB_00200e84;
                }
              }
              goto LAB_002011d0;
            }
            uVar84 = 3;
          }
LAB_00200e84:
          uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
          uVar81 = uVar65 * 8;
          if (6 < uVar43 - uVar79) {
            lVar68 = (ulong)uVar79 * 2;
            lVar58 = 0;
            uVar72 = 0;
            do {
              uVar72 = uVar72 + 1;
              psVar6 = (short *)((long)psVar76 + lVar58 + (lVar73 + (ulong)uVar79) * 2);
              psVar52 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar62);
              lVar147 = lVar58 + lVar68;
              lVar58 = lVar58 + 0x10;
              psVar8 = (short *)((long)psVar76 + lVar147);
              puVar70 = (undefined8 *)((long)psVar67 + lVar147);
              auVar167._0_4_ = (int)*psVar52;
              auVar167._4_4_ = (int)psVar52[1];
              auVar167._8_4_ = (int)psVar52[2];
              auVar167._12_4_ = (int)psVar52[3];
              auVar152._0_4_ = (int)psVar52[4];
              auVar152._4_4_ = (int)psVar52[5];
              auVar152._8_4_ = (int)psVar52[6];
              auVar152._12_4_ = (int)psVar52[7];
              auVar173._0_4_ = (int)*psVar8;
              auVar173._4_4_ = (int)psVar8[1];
              auVar173._8_4_ = (int)psVar8[2];
              auVar173._12_4_ = (int)psVar8[3];
              auVar168._0_4_ = (int)psVar8[4];
              auVar168._4_4_ = (int)psVar8[5];
              auVar168._8_4_ = (int)psVar8[6];
              auVar168._12_4_ = (int)psVar8[7];
              auVar161._0_4_ = (int)*psVar6;
              auVar161._4_4_ = (int)psVar6[1];
              auVar161._8_4_ = (int)psVar6[2];
              auVar161._12_4_ = (int)psVar6[3];
              auVar150._0_4_ = (int)psVar6[4];
              auVar150._4_4_ = (int)psVar6[5];
              auVar150._8_4_ = (int)psVar6[6];
              auVar150._12_4_ = (int)psVar6[7];
              auVar140 = NEON_smin(auVar161,auVar167,4);
              auVar91 = NEON_smin(auVar150,auVar152,4);
              auVar166 = NEON_smax(auVar161,auVar167,4);
              auVar88 = NEON_smax(auVar150,auVar152,4);
              auVar174 = NEON_smax(auVar140,auVar173,4);
              auVar90 = NEON_smax(auVar91,auVar168,4);
              auVar140 = NEON_smin(auVar166,auVar173,4);
              auVar166 = NEON_smin(auVar88,auVar168,4);
              auVar91 = NEON_smin(auVar174,auVar173,4);
              auVar88 = NEON_smin(auVar90,auVar168,4);
              auVar91 = NEON_smax(auVar140,auVar91,4);
              auVar88 = NEON_smax(auVar166,auVar88,4);
              auVar177._0_8_ =
                   CONCAT26(auVar91._12_2_,
                            CONCAT24(auVar91._8_2_,CONCAT22(auVar91._4_2_,auVar91._0_2_)));
              auVar177._8_2_ = auVar88._0_2_;
              auVar177._10_2_ = auVar88._4_2_;
              auVar177._12_2_ = auVar88._8_2_;
              auVar177._14_2_ = auVar88._12_2_;
              puVar70[1] = auVar177._8_8_;
              *puVar70 = auVar177._0_8_;
            } while (uVar72 < uVar65);
            uVar84 = (ulong)((int)uVar84 + uVar81);
            psVar56 = psVar56 + uVar81;
            if (uVar1 - uVar79 == uVar81) goto LAB_001fe290;
          }
          sVar20 = *psVar56;
          uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
          sVar19 = psVar56[lVar73];
          iVar54 = (int)uVar84;
          sVar18 = sVar19;
          if (sVar19 < sVar20) {
            sVar18 = sVar20;
          }
          sVar42 = sVar20;
          if (sVar18 < sVar20) {
            sVar42 = sVar18;
          }
          if (sVar20 < sVar19) {
            sVar19 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar20 = sVar19;
          }
          if (sVar20 < sVar42) {
            sVar20 = sVar42;
          }
          *(short *)((long)psVar67 + uVar78) = sVar20;
          if (iVar54 + 1 < (int)uVar1) {
            sVar20 = psVar56[1];
            sVar19 = psVar56[lVar73 + 1];
            sVar18 = sVar19;
            if (sVar19 < sVar20) {
              sVar18 = sVar20;
            }
            sVar42 = sVar20;
            if (sVar18 < sVar20) {
              sVar42 = sVar18;
            }
            if (sVar20 < sVar19) {
              sVar19 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar20 = sVar19;
            }
            if (sVar20 < sVar42) {
              sVar20 = sVar42;
            }
            *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
            if (iVar54 + 2 < (int)uVar1) {
              sVar20 = psVar56[2];
              sVar19 = psVar56[lVar73 + 2];
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar42 = sVar20;
              if (sVar18 < sVar20) {
                sVar42 = sVar18;
              }
              if (sVar20 < sVar19) {
                sVar19 = sVar20;
              }
              if (sVar19 < sVar20) {
                sVar20 = sVar19;
              }
              if (sVar20 < sVar42) {
                sVar20 = sVar42;
              }
              *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
              if (iVar54 + 3 < (int)uVar1) {
                sVar20 = psVar56[3];
                sVar19 = psVar56[lVar73 + 3];
                sVar18 = sVar19;
                if (sVar19 < sVar20) {
                  sVar18 = sVar20;
                }
                sVar42 = sVar20;
                if (sVar18 < sVar20) {
                  sVar42 = sVar18;
                }
                if (sVar20 < sVar19) {
                  sVar19 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar20 = sVar19;
                }
                if (sVar20 < sVar42) {
                  sVar20 = sVar42;
                }
                *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                if (iVar54 + 4 < (int)uVar1) {
                  sVar20 = psVar56[4];
                  sVar19 = psVar56[lVar73 + 4];
                  sVar18 = sVar19;
                  if (sVar19 < sVar20) {
                    sVar18 = sVar20;
                  }
                  sVar42 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar42 = sVar18;
                  }
                  if (sVar20 < sVar19) {
                    sVar19 = sVar20;
                  }
                  if (sVar19 < sVar20) {
                    sVar20 = sVar19;
                  }
                  if (sVar20 < sVar42) {
                    sVar20 = sVar42;
                  }
                  *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                  if (iVar54 + 5 < (int)uVar1) {
                    sVar20 = psVar56[5];
                    sVar19 = psVar56[lVar73 + 5];
                    sVar18 = sVar19;
                    if (sVar19 < sVar20) {
                      sVar18 = sVar20;
                    }
                    sVar42 = sVar20;
                    if (sVar18 < sVar20) {
                      sVar42 = sVar18;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    *(short *)((long)psVar67 + uVar78 + 10) = sVar19;
                    if (iVar54 + 6 < (int)uVar1) {
                      sVar20 = psVar56[6];
                      sVar19 = psVar56[lVar73 + 6];
                      sVar18 = sVar19;
                      if (sVar19 < sVar20) {
                        sVar18 = sVar20;
                      }
                      if (sVar20 < sVar18) {
                        sVar18 = sVar20;
                      }
                      if (sVar20 < sVar19) {
                        sVar19 = sVar20;
                      }
                      if (sVar20 < sVar19) {
                        sVar19 = sVar20;
                      }
                      if (sVar19 < sVar18) {
                        sVar19 = sVar18;
                      }
                      *(short *)((long)psVar67 + uVar78 + 0xc) = sVar19;
                    }
                  }
                }
              }
            }
          }
        }
        else {
          if ((uVar1 < 9 ||
               (psVar67 < psVar56 && psVar76 + lVar73 < psVar66 ||
               psVar67 < (short *)((long)psVar76 + lVar57) &&
               (short *)((long)psVar76 + uVar82) < psVar66)) ||
             (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
            lVar58 = 0;
            do {
              sVar20 = ((short *)((long)psVar76 + uVar82))[lVar58];
              sVar19 = (psVar76 + lVar73)[lVar58];
              sVar42 = psVar76[lVar58];
              sVar18 = sVar19;
              if (sVar19 < sVar20) {
                sVar18 = sVar20;
              }
              sVar21 = sVar42;
              if (sVar18 < sVar42) {
                sVar21 = sVar18;
              }
              if (sVar20 < sVar19) {
                sVar19 = sVar20;
              }
              sVar18 = sVar42;
              if (sVar42 < sVar19) {
                sVar18 = sVar19;
              }
              sVar19 = sVar42;
              if (sVar18 < sVar42) {
                sVar19 = sVar18;
              }
              if (sVar42 < sVar21) {
                sVar21 = sVar42;
              }
              if (sVar21 < sVar19) {
                sVar21 = sVar19;
              }
              psVar67[lVar58] = sVar21;
              lVar58 = lVar58 + 1;
            } while ((int)lVar58 < (int)uVar1);
            goto LAB_001fe290;
          }
          uVar79 = -((uint)((ulong)psVar76 >> 1) & 7) & 7;
          if (uVar1 < uVar79) {
            uVar79 = uVar1;
          }
          psVar56 = psVar76;
          if (uVar79 == 0) {
LAB_00200c0c:
            uVar84 = (ulong)uVar79;
          }
          else {
            sVar42 = *(short *)((long)psVar76 + uVar82);
            sVar19 = psVar76[lVar73];
            psVar56 = psVar76 + 1;
            sVar20 = *psVar76;
            sVar18 = sVar19;
            if (sVar19 < sVar42) {
              sVar18 = sVar42;
            }
            sVar21 = sVar20;
            if (sVar18 < sVar20) {
              sVar21 = sVar18;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            sVar18 = sVar20;
            if (sVar20 < sVar19) {
              sVar18 = sVar19;
            }
            sVar19 = sVar20;
            if (sVar18 < sVar20) {
              sVar19 = sVar18;
            }
            if (sVar21 < sVar20) {
              sVar20 = sVar21;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-8] = sVar20;
            if (uVar79 == 1) goto LAB_00200c0c;
            sVar42 = *(short *)((long)psVar56 + uVar82);
            sVar19 = psVar56[lVar73];
            psVar56 = psVar76 + 2;
            sVar20 = psVar76[1];
            sVar18 = sVar19;
            if (sVar19 < sVar42) {
              sVar18 = sVar42;
            }
            sVar21 = sVar20;
            if (sVar18 < sVar20) {
              sVar21 = sVar18;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            sVar18 = sVar20;
            if (sVar20 < sVar19) {
              sVar18 = sVar19;
            }
            sVar19 = sVar20;
            if (sVar18 < sVar20) {
              sVar19 = sVar18;
            }
            if (sVar21 < sVar20) {
              sVar20 = sVar21;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-7] = sVar20;
            if (uVar79 == 2) goto LAB_00200c0c;
            sVar42 = *(short *)((long)psVar56 + uVar82);
            sVar19 = psVar56[lVar73];
            psVar56 = psVar76 + 3;
            sVar20 = psVar76[2];
            sVar18 = sVar19;
            if (sVar19 < sVar42) {
              sVar18 = sVar42;
            }
            sVar21 = sVar20;
            if (sVar18 < sVar20) {
              sVar21 = sVar18;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            sVar18 = sVar20;
            if (sVar20 < sVar19) {
              sVar18 = sVar19;
            }
            sVar19 = sVar20;
            if (sVar18 < sVar20) {
              sVar19 = sVar18;
            }
            if (sVar21 < sVar20) {
              sVar20 = sVar21;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            psVar66[-6] = sVar20;
            if (uVar79 != 3) {
              sVar42 = *(short *)((long)psVar56 + uVar82);
              sVar19 = psVar56[lVar73];
              psVar56 = psVar76 + 4;
              sVar20 = psVar76[3];
              sVar18 = sVar19;
              if (sVar19 < sVar42) {
                sVar18 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar18 < sVar20) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar19) {
                sVar18 = sVar19;
              }
              sVar19 = sVar20;
              if (sVar18 < sVar20) {
                sVar19 = sVar18;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar19) {
                sVar20 = sVar19;
              }
              psVar66[-5] = sVar20;
              if (uVar79 != 4) {
                sVar42 = *(short *)((long)psVar56 + uVar82);
                sVar19 = psVar56[lVar73];
                psVar56 = psVar76 + 5;
                sVar20 = psVar76[4];
                sVar18 = sVar19;
                if (sVar19 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar18 < sVar20) {
                  sVar21 = sVar18;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar19) {
                  sVar18 = sVar19;
                }
                sVar19 = sVar20;
                if (sVar18 < sVar20) {
                  sVar19 = sVar18;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar19) {
                  sVar20 = sVar19;
                }
                psVar66[-4] = sVar20;
                if (uVar79 != 5) {
                  sVar42 = *(short *)((long)psVar56 + uVar82);
                  sVar19 = psVar56[lVar73];
                  psVar56 = psVar76 + 6;
                  sVar20 = psVar76[5];
                  sVar18 = sVar19;
                  if (sVar19 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar21 = sVar18;
                  }
                  if (sVar42 < sVar19) {
                    sVar19 = sVar42;
                  }
                  sVar18 = sVar20;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar19;
                  }
                  sVar19 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar19 = sVar18;
                  }
                  if (sVar20 < sVar21) {
                    sVar21 = sVar20;
                  }
                  if (sVar21 < sVar19) {
                    sVar21 = sVar19;
                  }
                  psVar66[-3] = sVar21;
                  if (uVar79 == 7) {
                    sVar42 = *(short *)((long)psVar56 + uVar82);
                    uVar84 = 7;
                    sVar18 = psVar56[lVar73];
                    psVar56 = psVar76 + 7;
                    sVar20 = psVar76[6];
                    sVar19 = sVar18;
                    if (sVar18 < sVar42) {
                      sVar19 = sVar42;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar42 < sVar18) {
                      sVar18 = sVar42;
                    }
                    sVar42 = sVar20;
                    if (sVar20 < sVar18) {
                      sVar42 = sVar18;
                    }
                    if (sVar20 < sVar42) {
                      sVar42 = sVar20;
                    }
                    if (sVar20 < sVar19) {
                      sVar19 = sVar20;
                    }
                    if (sVar19 < sVar42) {
                      sVar19 = sVar42;
                    }
                    psVar66[-2] = sVar19;
                  }
                  else {
                    uVar84 = 6;
                  }
                  goto LAB_002008ac;
                }
              }
              goto LAB_00200c0c;
            }
            uVar84 = 3;
          }
LAB_002008ac:
          uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
          uVar81 = uVar65 * 8;
          if (6 < uVar43 - uVar79) {
            lVar68 = (ulong)uVar79 * 2;
            lVar58 = 0;
            uVar72 = 0;
            do {
              uVar72 = uVar72 + 1;
              psVar6 = (short *)((long)psVar76 + lVar58 + lVar68 + lVar62);
              psVar52 = (short *)((long)psVar76 + lVar58 + lVar68 + uVar82);
              lVar147 = lVar58 + lVar68;
              lVar58 = lVar58 + 0x10;
              psVar8 = (short *)((long)psVar76 + lVar147);
              puVar70 = (undefined8 *)((long)psVar67 + lVar147);
              auVar179._0_4_ = (int)*psVar52;
              auVar179._4_4_ = (int)psVar52[1];
              auVar179._8_4_ = (int)psVar52[2];
              auVar179._12_4_ = (int)psVar52[3];
              auVar187._0_4_ = (int)psVar52[4];
              auVar187._4_4_ = (int)psVar52[5];
              auVar187._8_4_ = (int)psVar52[6];
              auVar187._12_4_ = (int)psVar52[7];
              auVar182._0_4_ = (int)*psVar8;
              auVar182._4_4_ = (int)psVar8[1];
              auVar182._8_4_ = (int)psVar8[2];
              auVar182._12_4_ = (int)psVar8[3];
              auVar180._0_4_ = (int)psVar8[4];
              auVar180._4_4_ = (int)psVar8[5];
              auVar180._8_4_ = (int)psVar8[6];
              auVar180._12_4_ = (int)psVar8[7];
              auVar178._0_4_ = (int)*psVar6;
              auVar178._4_4_ = (int)psVar6[1];
              auVar178._8_4_ = (int)psVar6[2];
              auVar178._12_4_ = (int)psVar6[3];
              auVar183._0_4_ = (int)psVar6[4];
              auVar183._4_4_ = (int)psVar6[5];
              auVar183._8_4_ = (int)psVar6[6];
              auVar183._12_4_ = (int)psVar6[7];
              auVar140 = NEON_smin(auVar178,auVar179,4);
              auVar91 = NEON_smin(auVar183,auVar187,4);
              auVar166 = NEON_smax(auVar178,auVar179,4);
              auVar88 = NEON_smax(auVar183,auVar187,4);
              auVar174 = NEON_smax(auVar140,auVar182,4);
              auVar90 = NEON_smax(auVar91,auVar180,4);
              auVar140 = NEON_smin(auVar166,auVar182,4);
              auVar166 = NEON_smin(auVar88,auVar180,4);
              auVar91 = NEON_smin(auVar182,auVar174,4);
              auVar88 = NEON_smin(auVar180,auVar90,4);
              auVar91 = NEON_smax(auVar140,auVar91,4);
              auVar88 = NEON_smax(auVar166,auVar88,4);
              auVar176._0_8_ =
                   CONCAT26(auVar91._12_2_,
                            CONCAT24(auVar91._8_2_,CONCAT22(auVar91._4_2_,auVar91._0_2_)));
              auVar176._8_2_ = auVar88._0_2_;
              auVar176._10_2_ = auVar88._4_2_;
              auVar176._12_2_ = auVar88._8_2_;
              auVar176._14_2_ = auVar88._12_2_;
              puVar70[1] = auVar176._8_8_;
              *puVar70 = auVar176._0_8_;
            } while (uVar72 < uVar65);
            uVar84 = (ulong)((int)uVar84 + uVar81);
            psVar56 = psVar56 + uVar81;
            if (uVar81 == uVar1 - uVar79) goto LAB_001fe290;
          }
          sVar42 = *(short *)((long)psVar56 + uVar82);
          sVar19 = psVar56[lVar73];
          uVar78 = -(uVar84 >> 0x1f) & 0xfffffffe00000000 | uVar84 << 1;
          iVar54 = (int)uVar84;
          sVar20 = *psVar56;
          sVar18 = sVar19;
          if (sVar19 < sVar42) {
            sVar18 = sVar42;
          }
          sVar21 = sVar20;
          if (sVar18 < sVar20) {
            sVar21 = sVar18;
          }
          if (sVar42 < sVar19) {
            sVar19 = sVar42;
          }
          sVar18 = sVar20;
          if (sVar20 < sVar19) {
            sVar18 = sVar19;
          }
          sVar19 = sVar20;
          if (sVar18 < sVar20) {
            sVar19 = sVar18;
          }
          if (sVar21 < sVar20) {
            sVar20 = sVar21;
          }
          if (sVar20 < sVar19) {
            sVar20 = sVar19;
          }
          *(short *)((long)psVar67 + uVar78) = sVar20;
          if (iVar54 + 1 < (int)uVar1) {
            sVar42 = *(short *)((long)psVar56 + uVar82 + 2);
            sVar19 = psVar56[lVar73 + 1];
            sVar20 = psVar56[1];
            sVar18 = sVar19;
            if (sVar19 < sVar42) {
              sVar18 = sVar42;
            }
            sVar21 = sVar20;
            if (sVar18 < sVar20) {
              sVar21 = sVar18;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            sVar18 = sVar20;
            if (sVar20 < sVar19) {
              sVar18 = sVar19;
            }
            sVar19 = sVar20;
            if (sVar18 < sVar20) {
              sVar19 = sVar18;
            }
            if (sVar21 < sVar20) {
              sVar20 = sVar21;
            }
            if (sVar20 < sVar19) {
              sVar20 = sVar19;
            }
            *(short *)((long)psVar67 + uVar78 + 2) = sVar20;
            if (iVar54 + 2 < (int)uVar1) {
              sVar42 = *(short *)((long)psVar56 + uVar82 + 4);
              sVar19 = psVar56[lVar73 + 2];
              sVar20 = psVar56[2];
              sVar18 = sVar19;
              if (sVar19 < sVar42) {
                sVar18 = sVar42;
              }
              sVar21 = sVar20;
              if (sVar18 < sVar20) {
                sVar21 = sVar18;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              sVar18 = sVar20;
              if (sVar20 < sVar19) {
                sVar18 = sVar19;
              }
              sVar19 = sVar20;
              if (sVar18 < sVar20) {
                sVar19 = sVar18;
              }
              if (sVar21 < sVar20) {
                sVar20 = sVar21;
              }
              if (sVar20 < sVar19) {
                sVar20 = sVar19;
              }
              *(short *)((long)psVar67 + uVar78 + 4) = sVar20;
              if (iVar54 + 3 < (int)uVar1) {
                sVar42 = *(short *)((long)psVar56 + uVar82 + 6);
                sVar19 = psVar56[lVar73 + 3];
                sVar20 = psVar56[3];
                sVar18 = sVar19;
                if (sVar19 < sVar42) {
                  sVar18 = sVar42;
                }
                sVar21 = sVar20;
                if (sVar18 < sVar20) {
                  sVar21 = sVar18;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                sVar18 = sVar20;
                if (sVar20 < sVar19) {
                  sVar18 = sVar19;
                }
                sVar19 = sVar20;
                if (sVar18 < sVar20) {
                  sVar19 = sVar18;
                }
                if (sVar21 < sVar20) {
                  sVar20 = sVar21;
                }
                if (sVar20 < sVar19) {
                  sVar20 = sVar19;
                }
                *(short *)((long)psVar67 + uVar78 + 6) = sVar20;
                if (iVar54 + 4 < (int)uVar1) {
                  sVar42 = *(short *)((long)psVar56 + uVar82 + 8);
                  sVar19 = psVar56[lVar73 + 4];
                  sVar20 = psVar56[4];
                  sVar18 = sVar19;
                  if (sVar19 < sVar42) {
                    sVar18 = sVar42;
                  }
                  sVar21 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar21 = sVar18;
                  }
                  if (sVar42 < sVar19) {
                    sVar19 = sVar42;
                  }
                  sVar18 = sVar20;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar19;
                  }
                  sVar19 = sVar20;
                  if (sVar18 < sVar20) {
                    sVar19 = sVar18;
                  }
                  if (sVar21 < sVar20) {
                    sVar20 = sVar21;
                  }
                  if (sVar20 < sVar19) {
                    sVar20 = sVar19;
                  }
                  *(short *)((long)psVar67 + uVar78 + 8) = sVar20;
                  if (iVar54 + 5 < (int)uVar1) {
                    sVar42 = *(short *)((long)psVar56 + uVar82 + 10);
                    sVar19 = psVar56[lVar73 + 5];
                    sVar20 = psVar56[5];
                    sVar18 = sVar19;
                    if (sVar19 < sVar42) {
                      sVar18 = sVar42;
                    }
                    sVar21 = sVar20;
                    if (sVar18 < sVar20) {
                      sVar21 = sVar18;
                    }
                    if (sVar42 < sVar19) {
                      sVar19 = sVar42;
                    }
                    sVar18 = sVar20;
                    if (sVar20 < sVar19) {
                      sVar18 = sVar19;
                    }
                    sVar19 = sVar20;
                    if (sVar18 < sVar20) {
                      sVar19 = sVar18;
                    }
                    if (sVar20 < sVar21) {
                      sVar21 = sVar20;
                    }
                    if (sVar21 < sVar19) {
                      sVar21 = sVar19;
                    }
                    *(short *)((long)psVar67 + uVar78 + 10) = sVar21;
                    if (iVar54 + 6 < (int)uVar1) {
                      sVar42 = *(short *)((long)psVar56 + uVar82 + 0xc);
                      sVar19 = psVar56[lVar73 + 6];
                      sVar20 = psVar56[6];
                      sVar18 = sVar19;
                      if (sVar19 < sVar42) {
                        sVar18 = sVar42;
                      }
                      sVar21 = sVar20;
                      if (sVar18 < sVar20) {
                        sVar21 = sVar18;
                      }
                      if (sVar42 < sVar19) {
                        sVar19 = sVar42;
                      }
                      sVar18 = sVar20;
                      if (sVar20 < sVar19) {
                        sVar18 = sVar19;
                      }
                      sVar19 = sVar20;
                      if (sVar18 < sVar20) {
                        sVar19 = sVar18;
                      }
                      if (sVar21 < sVar20) {
                        sVar20 = sVar21;
                      }
                      if (sVar20 < sVar19) {
                        sVar20 = sVar19;
                      }
                      *(short *)((long)psVar67 + uVar78 + 0xc) = sVar20;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_001fe290:
      iVar71 = iVar71 + 1;
      psVar76 = (short *)((long)psVar76 +
                         (-(uVar69 >> 0x1f) & 0xfffffffe00000000 | uVar69 << 1) +
                         ((long)(int)uVar43 + 1) * 2);
      psVar66 = psVar66 + (int)uVar85;
      if (iVar71 == local_34) {
        return;
      }
    } while( true );
  }
  if (iVar71 == 1) {
    iVar60 = local_34 + 1;
    if (local_34 != 1) {
      iVar71 = local_30 - uVar1;
      goto LAB_001fd334;
    }
    iVar60 = 2;
  }
  else {
    if (local_34 != 1) {
      uVar43 = iVar71 * uVar1;
      if (local_34 < 1) {
        return;
      }
      lVar61 = (ulong)uVar1 * 2;
      lVar57 = (ulong)uVar1 * -2;
      iVar71 = 0;
      iVar60 = (uVar43 - 8) - uVar1;
      psVar66 = psVar76;
LAB_001fc104:
      iVar63 = iVar71 + -1;
      iVar71 = iVar71 + 1;
      if (iVar63 < 0) {
        iVar63 = 0;
      }
      uVar82 = 0;
      iVar54 = iVar71;
      if (local_34 + -1 < iVar71) {
        iVar54 = local_34 + -1;
      }
      uVar85 = uVar1;
      if (cVar50 == '\0') {
        uVar85 = uVar43;
      }
      iVar63 = local_30 * iVar63;
      iVar54 = local_30 * iVar54;
      do {
        if ((int)uVar85 <= (int)uVar82) {
          do {
            if (uVar85 == uVar43) {
              local_90 = local_90 +
                         (-(uVar69 >> 0x20 & 1) & 0xfffffffe00000000 | (uVar83 & 0xffffffff) << 1);
              psVar66 = psVar66 + (int)local_30;
              if (iVar71 == local_34) {
                return;
              }
              goto LAB_001fc104;
            }
            if ((int)uVar82 <= iVar60) {
              uVar84 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
              pauVar59 = (undefined1 (*) [16])((long)psVar76 + uVar84 + (long)iVar63 * 2);
              pauVar53 = (undefined1 (*) [16])((long)psVar66 + uVar84);
              pauVar51 = (undefined1 (*) [16])((long)psVar76 + uVar84 + (long)iVar54 * 2);
              puVar70 = (undefined8 *)(local_90 + uVar84);
              do {
                puVar47 = *pauVar51;
                puVar48 = *pauVar59;
                auVar88 = *pauVar51;
                pauVar3 = (undefined1 (*) [16])((long)pauVar53 + lVar57);
                pauVar4 = (undefined1 (*) [16])((long)pauVar51 + lVar57);
                pauVar5 = (undefined1 (*) [16])((long)pauVar59 + lVar57);
                auVar166 = *pauVar59;
                uVar85 = (int)uVar82 + 8;
                uVar82 = (ulong)uVar85;
                pauVar59 = pauVar59 + 1;
                auVar86 = NEON_smin(*pauVar53,*(undefined1 (*) [16])(*pauVar53 + lVar61),2);
                auVar87 = NEON_smin(auVar88,*(undefined1 (*) [16])(puVar47 + lVar61),2);
                auVar91 = NEON_smax(*(undefined1 (*) [16])(*pauVar53 + lVar61),*pauVar53,2);
                pauVar53 = pauVar53 + 1;
                auVar105 = NEON_smin(auVar166,*(undefined1 (*) [16])(puVar48 + lVar61),2);
                pauVar51 = pauVar51 + 1;
                auVar140 = NEON_smax(*(undefined1 (*) [16])(puVar47 + lVar61),auVar88,2);
                auVar90 = NEON_smax(auVar87,*pauVar4,2);
                auVar88 = NEON_smax(auVar86,*pauVar3,2);
                auVar166 = NEON_smax(*(undefined1 (*) [16])(puVar48 + lVar61),auVar166,2);
                auVar89 = NEON_smax(auVar105,*pauVar5,2);
                auVar174 = NEON_smin(auVar90,auVar140,2);
                auVar98 = NEON_smin(auVar88,auVar91,2);
                auVar140 = NEON_smax(auVar140,auVar90,2);
                auVar91 = NEON_smax(auVar91,auVar88,2);
                auVar88 = NEON_smin(auVar89,auVar166,2);
                auVar90 = NEON_smin(auVar98,auVar174,2);
                auVar166 = NEON_smax(auVar166,auVar89,2);
                auVar91 = NEON_smin(auVar91,auVar140,2);
                auVar89 = NEON_smin(*pauVar5,auVar105,2);
                auVar140 = NEON_smax(auVar90,auVar88,2);
                auVar90 = NEON_smin(*pauVar3,auVar86,2);
                auVar174 = NEON_smax(auVar174,auVar98,2);
                auVar88 = NEON_smin(auVar166,auVar91,2);
                auVar91 = NEON_smin(*pauVar4,auVar87,2);
                auVar90 = NEON_smax(auVar90,auVar89,2);
                auVar166 = NEON_smin(auVar140,auVar174,2);
                auVar140 = NEON_smax(auVar91,auVar90,2);
                auVar91 = NEON_smin(auVar166,auVar88,2);
                auVar88 = NEON_smax(auVar88,auVar166,2);
                auVar166 = NEON_smax(auVar91,auVar140,2);
                auVar88 = NEON_smin(auVar166,auVar88,2);
                puVar70[1] = auVar88._8_8_;
                *puVar70 = auVar88._0_8_;
                puVar70 = puVar70 + 2;
              } while ((int)uVar85 <= iVar60);
            }
            uVar85 = uVar43;
          } while ((int)uVar43 <= (int)uVar82);
        }
        uVar65 = (uint)uVar82;
        uVar79 = uVar65 - uVar1;
        if ((int)uVar65 < (int)uVar1) {
          uVar79 = uVar65;
        }
        uVar84 = -(uVar82 >> 0x1f) & 0xfffffffe00000000 | uVar82 << 1;
        uVar81 = uVar65 + uVar1;
        if ((int)(uVar43 - uVar1) <= (int)uVar65) {
          uVar81 = uVar65;
        }
        uVar55 = -(ulong)(uVar79 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar79 << 1;
        uVar78 = -(ulong)(uVar81 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar81 << 1;
        uVar82 = (ulong)(uVar65 + 1);
        sVar21 = *(short *)((long)psVar76 + uVar84 + (long)iVar63 * 2);
        sVar22 = *(short *)((long)psVar66 + uVar84);
        sVar18 = *(short *)((long)psVar76 + uVar78 + (long)iVar63 * 2);
        sVar19 = *(short *)((long)psVar66 + uVar78);
        sVar20 = *(short *)((long)psVar76 + uVar78 + (long)iVar54 * 2);
        sVar42 = sVar18;
        if (sVar21 < sVar18) {
          sVar42 = sVar21;
        }
        if (sVar18 < sVar21) {
          sVar18 = sVar21;
        }
        sVar23 = *(short *)((long)psVar76 + uVar84 + (long)iVar54 * 2);
        sVar24 = *(short *)((long)psVar76 + uVar55 + (long)iVar63 * 2);
        sVar21 = sVar19;
        if (sVar22 < sVar19) {
          sVar21 = sVar22;
        }
        if (sVar19 < sVar22) {
          sVar19 = sVar22;
        }
        sVar22 = sVar20;
        if (sVar23 < sVar20) {
          sVar22 = sVar23;
        }
        sVar25 = *(short *)((long)psVar66 + uVar55);
        sVar27 = *(short *)((long)psVar76 + uVar55 + (long)iVar54 * 2);
        if (sVar20 < sVar23) {
          sVar20 = sVar23;
        }
        sVar23 = sVar42;
        if (sVar42 < sVar24) {
          sVar23 = sVar24;
        }
        sVar26 = sVar21;
        if (sVar25 < sVar21) {
          sVar26 = sVar25;
        }
        if (sVar21 < sVar25) {
          sVar21 = sVar25;
        }
        sVar25 = sVar22;
        if (sVar27 < sVar22) {
          sVar25 = sVar27;
        }
        if (sVar22 < sVar27) {
          sVar22 = sVar27;
        }
        sVar27 = sVar21;
        if (sVar19 < sVar21) {
          sVar27 = sVar19;
        }
        sVar29 = sVar22;
        if (sVar20 < sVar22) {
          sVar29 = sVar20;
        }
        if (sVar21 < sVar19) {
          sVar21 = sVar19;
        }
        sVar19 = sVar23;
        if (sVar23 < sVar18) {
          sVar19 = sVar18;
        }
        if (sVar19 < sVar21) {
          sVar21 = sVar19;
        }
        sVar19 = sVar29;
        if (sVar27 < sVar29) {
          sVar19 = sVar27;
        }
        if (sVar29 < sVar27) {
          sVar29 = sVar27;
        }
        if (sVar18 < sVar23) {
          sVar23 = sVar18;
        }
        if (sVar19 < sVar23) {
          sVar19 = sVar23;
        }
        if (sVar22 < sVar20) {
          sVar22 = sVar20;
        }
        if (sVar22 < sVar21) {
          sVar21 = sVar22;
        }
        if (sVar29 < sVar19) {
          sVar19 = sVar29;
        }
        sVar18 = sVar19;
        if (sVar21 < sVar19) {
          sVar18 = sVar21;
        }
        if (sVar24 < sVar42) {
          sVar42 = sVar24;
        }
        if (sVar26 < sVar42) {
          sVar26 = sVar42;
        }
        if (sVar26 < sVar25) {
          sVar26 = sVar25;
        }
        if (sVar26 < sVar18) {
          sVar26 = sVar18;
        }
        if (sVar19 < sVar21) {
          sVar19 = sVar21;
        }
        if (sVar19 < sVar26) {
          sVar26 = sVar19;
        }
        *(short *)(local_90 + uVar84) = sVar26;
      } while( true );
    }
    iVar60 = iVar71 + 1;
    local_34 = iVar71;
  }
  iVar71 = 0;
  uVar85 = uVar1;
  local_30 = uVar1;
LAB_001fd334:
  if (0 < local_34) {
    iVar63 = 0;
    psVar66 = (short *)(local_90 + 0x10);
    do {
      psVar67 = psVar66 + -8;
      uVar69 = -(ulong)(-local_30 >> 0x1f) & 0xfffffffe00000000 | (ulong)-local_30 << 1;
      if (iVar63 < 1) {
        uVar69 = 0;
      }
      uVar82 = -(ulong)(local_30 >> 0x1f) & 0xfffffffe00000000 | (ulong)local_30 << 1;
      if (iVar60 + -2 <= iVar63) {
        uVar82 = 0;
      }
      psVar56 = (short *)((long)psVar76 + uVar69);
      psVar6 = (short *)((long)psVar76 + uVar82);
      if ((uVar1 < 10 ||
           (psVar67 < (short *)((long)psVar76 + uVar69 + 0x10) && psVar56 < psVar66 ||
           psVar67 < (short *)((long)psVar76 + uVar82 + 0x10) && psVar6 < psVar66)) ||
         (psVar67 < psVar76 + 8 && psVar76 < psVar66)) {
        lVar57 = 0;
        do {
          sVar20 = psVar56[lVar57];
          sVar19 = psVar76[lVar57];
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (psVar6[lVar57] < sVar19) {
            sVar19 = psVar6[lVar57];
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar67[lVar57] = sVar19;
          lVar57 = lVar57 + 1;
        } while ((int)lVar57 < (int)uVar1);
      }
      else {
        uVar79 = -((uint)((ulong)psVar56 >> 1) & 7) & 7;
        if (uVar1 < uVar79) {
          uVar79 = uVar1;
        }
        psVar52 = psVar76;
        if (uVar79 == 0) {
LAB_001fe2b8:
          uVar83 = (ulong)uVar79;
        }
        else {
          sVar19 = *psVar56;
          psVar52 = psVar76 + 1;
          sVar20 = *psVar76;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar6 < sVar19) {
            sVar19 = *psVar6;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-8] = sVar19;
          if (uVar79 == 1) goto LAB_001fe2b8;
          sVar19 = *(short *)((long)psVar52 + uVar69);
          sVar20 = psVar76[1];
          psVar56 = (short *)((long)psVar52 + uVar82);
          psVar52 = psVar76 + 2;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar56 < sVar19) {
            sVar19 = *psVar56;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-7] = sVar19;
          if (uVar79 == 2) goto LAB_001fe2b8;
          sVar19 = *(short *)((long)psVar52 + uVar69);
          sVar20 = psVar76[2];
          psVar56 = (short *)((long)psVar52 + uVar82);
          psVar52 = psVar76 + 3;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar56 < sVar19) {
            sVar19 = *psVar56;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-6] = sVar19;
          if (uVar79 == 3) goto LAB_001fe2b8;
          sVar19 = *(short *)((long)psVar52 + uVar69);
          sVar20 = psVar76[3];
          psVar56 = (short *)((long)psVar52 + uVar82);
          psVar52 = psVar76 + 4;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar56 < sVar19) {
            sVar19 = *psVar56;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-5] = sVar19;
          if (uVar79 == 4) goto LAB_001fe2b8;
          sVar19 = *(short *)((long)psVar52 + uVar69);
          sVar20 = psVar76[4];
          psVar56 = (short *)((long)psVar52 + uVar82);
          psVar52 = psVar76 + 5;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar56 < sVar19) {
            sVar19 = *psVar56;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-4] = sVar19;
          if (uVar79 == 5) goto LAB_001fe2b8;
          sVar19 = *(short *)((long)psVar52 + uVar69);
          sVar20 = psVar76[5];
          psVar56 = (short *)((long)psVar52 + uVar82);
          psVar52 = psVar76 + 6;
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (*psVar56 < sVar19) {
            sVar19 = *psVar56;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          psVar66[-3] = sVar19;
          if (uVar79 == 7) {
            sVar19 = *(short *)((long)psVar52 + uVar69);
            uVar83 = 7;
            sVar20 = psVar76[6];
            psVar56 = (short *)((long)psVar52 + uVar82);
            psVar52 = psVar76 + 7;
            sVar18 = sVar19;
            if (sVar20 < sVar19) {
              sVar18 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (*psVar56 < sVar19) {
              sVar19 = *psVar56;
            }
            if (sVar19 < sVar18) {
              sVar19 = sVar18;
            }
            psVar66[-2] = sVar19;
          }
          else {
            uVar83 = 6;
          }
        }
        uVar65 = ((uVar1 - uVar79) - 8 >> 3) + 1;
        uVar81 = uVar65 * 8;
        if (6 < uVar43 - uVar79) {
          lVar61 = (ulong)uVar79 * 2;
          lVar57 = 0;
          uVar72 = 0;
          do {
            psVar56 = (short *)((long)psVar76 + lVar57 + lVar61);
            psVar6 = (short *)((long)psVar76 + lVar57 + lVar61 + uVar69);
            puVar70 = (undefined8 *)((long)psVar67 + lVar57 + lVar61);
            psVar8 = (short *)((long)psVar76 + lVar57 + uVar82 + lVar61);
            uVar72 = uVar72 + 1;
            lVar57 = lVar57 + 0x10;
            auVar132._0_4_ = (int)*psVar6;
            auVar132._4_4_ = (int)psVar6[1];
            auVar132._8_4_ = (int)psVar6[2];
            auVar132._12_4_ = (int)psVar6[3];
            auVar120._0_4_ = (int)*psVar56;
            auVar120._4_4_ = (int)psVar56[1];
            auVar120._8_4_ = (int)psVar56[2];
            auVar120._12_4_ = (int)psVar56[3];
            auVar114._0_4_ = (int)psVar6[4];
            auVar114._4_4_ = (int)psVar6[5];
            auVar114._8_4_ = (int)psVar6[6];
            auVar114._12_4_ = (int)psVar6[7];
            auVar92._0_4_ = (int)psVar56[4];
            auVar92._4_4_ = (int)psVar56[5];
            auVar92._8_4_ = (int)psVar56[6];
            auVar92._12_4_ = (int)psVar56[7];
            auVar106._0_4_ = (int)*psVar8;
            auVar106._4_4_ = (int)psVar8[1];
            auVar106._8_4_ = (int)psVar8[2];
            auVar106._12_4_ = (int)psVar8[3];
            auVar124._0_4_ = (int)psVar8[4];
            auVar124._4_4_ = (int)psVar8[5];
            auVar124._8_4_ = (int)psVar8[6];
            auVar124._12_4_ = (int)psVar8[7];
            auVar91 = NEON_smax(auVar120,auVar132,4);
            auVar166 = NEON_smax(auVar92,auVar114,4);
            auVar140 = NEON_smin(auVar120,auVar132,4);
            auVar88 = NEON_smin(auVar92,auVar114,4);
            auVar91 = NEON_smin(auVar91,auVar106,4);
            auVar166 = NEON_smin(auVar166,auVar124,4);
            auVar91 = NEON_smax(auVar91,auVar140,4);
            auVar88 = NEON_smax(auVar166,auVar88,4);
            auVar99._0_8_ =
                 CONCAT26(auVar91._12_2_,
                          CONCAT24(auVar91._8_2_,CONCAT22(auVar91._4_2_,auVar91._0_2_)));
            auVar99._8_2_ = auVar88._0_2_;
            auVar99._10_2_ = auVar88._4_2_;
            auVar99._12_2_ = auVar88._8_2_;
            auVar99._14_2_ = auVar88._12_2_;
            puVar70[1] = auVar99._8_8_;
            *puVar70 = auVar99._0_8_;
          } while (uVar72 < uVar65);
          uVar83 = (ulong)((int)uVar83 + uVar81);
          psVar52 = psVar52 + uVar81;
          if (uVar81 == uVar1 - uVar79) goto LAB_001fd828;
        }
        sVar19 = *(short *)((long)psVar52 + uVar69);
        uVar84 = -(uVar83 >> 0x1f) & 0xfffffffe00000000 | uVar83 << 1;
        sVar20 = *psVar52;
        iVar54 = (int)uVar83;
        sVar18 = sVar19;
        if (sVar20 < sVar19) {
          sVar18 = sVar20;
        }
        if (sVar19 < sVar20) {
          sVar19 = sVar20;
        }
        if (*(short *)((long)psVar52 + uVar82) < sVar19) {
          sVar19 = *(short *)((long)psVar52 + uVar82);
        }
        if (sVar19 < sVar18) {
          sVar19 = sVar18;
        }
        *(short *)((long)psVar67 + uVar84) = sVar19;
        if (iVar54 + 1 < (int)uVar1) {
          sVar19 = *(short *)((long)psVar52 + uVar69 + 2);
          sVar20 = psVar52[1];
          sVar42 = *(short *)((long)psVar52 + uVar82 + 2);
          sVar18 = sVar19;
          if (sVar20 < sVar19) {
            sVar18 = sVar20;
          }
          if (sVar19 < sVar20) {
            sVar19 = sVar20;
          }
          if (sVar42 < sVar19) {
            sVar19 = sVar42;
          }
          if (sVar19 < sVar18) {
            sVar19 = sVar18;
          }
          *(short *)((long)psVar67 + uVar84 + 2) = sVar19;
          if (iVar54 + 2 < (int)uVar1) {
            sVar19 = *(short *)((long)psVar52 + uVar69 + 4);
            sVar20 = psVar52[2];
            sVar42 = *(short *)((long)psVar52 + uVar82 + 4);
            sVar18 = sVar19;
            if (sVar20 < sVar19) {
              sVar18 = sVar20;
            }
            if (sVar19 < sVar20) {
              sVar19 = sVar20;
            }
            if (sVar42 < sVar19) {
              sVar19 = sVar42;
            }
            if (sVar19 < sVar18) {
              sVar19 = sVar18;
            }
            *(short *)((long)psVar67 + uVar84 + 4) = sVar19;
            if (iVar54 + 3 < (int)uVar1) {
              sVar19 = *(short *)((long)psVar52 + uVar69 + 6);
              sVar20 = psVar52[3];
              sVar42 = *(short *)((long)psVar52 + uVar82 + 6);
              sVar18 = sVar19;
              if (sVar20 < sVar19) {
                sVar18 = sVar20;
              }
              if (sVar19 < sVar20) {
                sVar19 = sVar20;
              }
              if (sVar42 < sVar19) {
                sVar19 = sVar42;
              }
              if (sVar19 < sVar18) {
                sVar19 = sVar18;
              }
              *(short *)((long)psVar67 + uVar84 + 6) = sVar19;
              if (iVar54 + 4 < (int)uVar1) {
                sVar19 = *(short *)((long)psVar52 + uVar69 + 8);
                sVar20 = psVar52[4];
                sVar42 = *(short *)((long)psVar52 + uVar82 + 8);
                sVar18 = sVar19;
                if (sVar20 < sVar19) {
                  sVar18 = sVar20;
                }
                if (sVar19 < sVar20) {
                  sVar19 = sVar20;
                }
                if (sVar42 < sVar19) {
                  sVar19 = sVar42;
                }
                if (sVar19 < sVar18) {
                  sVar19 = sVar18;
                }
                *(short *)((long)psVar67 + uVar84 + 8) = sVar19;
                if (iVar54 + 5 < (int)uVar1) {
                  sVar19 = *(short *)((long)psVar52 + uVar69 + 10);
                  sVar20 = psVar52[5];
                  sVar42 = *(short *)((long)psVar52 + uVar82 + 10);
                  sVar18 = sVar19;
                  if (sVar20 < sVar19) {
                    sVar18 = sVar20;
                  }
                  if (sVar19 < sVar20) {
                    sVar19 = sVar20;
                  }
                  if (sVar42 < sVar19) {
                    sVar19 = sVar42;
                  }
                  if (sVar19 < sVar18) {
                    sVar19 = sVar18;
                  }
                  *(short *)((long)psVar67 + uVar84 + 10) = sVar19;
                  if (iVar54 + 6 < (int)uVar1) {
                    sVar19 = *(short *)((long)psVar52 + uVar69 + 0xc);
                    sVar20 = psVar52[6];
                    sVar42 = *(short *)((long)psVar52 + uVar82 + 0xc);
                    sVar18 = sVar19;
                    if (sVar20 < sVar19) {
                      sVar18 = sVar20;
                    }
                    if (sVar19 < sVar20) {
                      sVar19 = sVar20;
                    }
                    if (sVar42 < sVar19) {
                      sVar19 = sVar42;
                    }
                    if (sVar19 < sVar18) {
                      sVar19 = sVar18;
                    }
                    *(short *)((long)psVar67 + uVar84 + 0xc) = sVar19;
                  }
                }
              }
            }
          }
        }
      }
LAB_001fd828:
      iVar63 = iVar63 + 1;
      psVar76 = psVar76 + (long)iVar71 + (long)(int)uVar43 + 1;
      psVar66 = psVar66 + (int)uVar85;
    } while (iVar63 != local_34);
  }
  return;
}


==================================================================

### FUNC 0020337c (768 bytes) name=FUN_0020337c

void FUN_0020337c(long param_1,int *param_2)

{
  int iVar1;
  byte *pbVar2;
  int iVar3;
  byte bVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  uint *puVar15;
  int iVar16;
  byte *pbVar17;
  int iVar18;
  int iVar19;
  long lVar20;
  undefined1 *puVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  
  puVar15 = *(uint **)(param_1 + 0x10);
  iVar16 = *param_2;
  iVar18 = param_2[1];
  iVar1 = (*puVar15 >> 3 & 0x1ff) + 1;
  iVar3 = *(int *)(*(long *)(puVar15 + 0x10) + 4);
  if (iVar18 <= iVar16) {
    return;
  }
  lVar11 = (long)iVar16;
  do {
    pbVar2 = (byte *)(*(long *)(*(long *)(param_1 + 8) + 0x10) +
                     (long)(*(int *)(param_1 + 0x18) * iVar1) +
                     (long)(*(int *)(param_1 + 0x18) + iVar16) *
                     **(long **)(*(long *)(param_1 + 8) + 0x48));
    puVar21 = (undefined1 *)(*(long *)(puVar15 + 4) + lVar11 * **(long **)(puVar15 + 0x12));
    if (iVar1 == 1) {
      if (0 < iVar3) {
        iVar18 = *(int *)(param_1 + 0x1c);
        lVar20 = 0;
        iVar19 = 0;
        bVar4 = *pbVar2;
        if (iVar18 < 1) goto LAB_0020362c;
        do {
          fVar24 = 0.0;
          lVar14 = 0;
          fVar23 = fVar24;
          do {
            lVar12 = lVar14 * 4;
            lVar13 = lVar14 * 4;
            lVar14 = lVar14 + 1;
            uVar5 = (uint)pbVar2[iVar19 + *(int *)(*(long *)(param_1 + 0x20) + lVar12)] -
                    (uint)bVar4;
            uVar6 = (int)uVar5 >> 0x1f;
            fVar25 = *(float *)(*(long *)(param_1 + 0x28) + lVar13) *
                     *(float *)(*(long *)(param_1 + 0x30) + (long)(int)((uVar5 ^ uVar6) - uVar6) * 4
                               );
            fVar23 = fVar23 + fVar25 * (float)pbVar2[iVar19 + *(int *)(*(long *)(param_1 + 0x20) +
                                                                      lVar12)];
            fVar24 = fVar24 + fVar25;
          } while ((int)lVar14 < iVar18);
          lVar14 = lrintf(fVar23 / fVar24);
          puVar21[lVar20] = (char)lVar14;
          lVar20 = lVar20 + 1;
          iVar18 = (int)lVar20;
          while( true ) {
            if (iVar3 <= iVar18) goto LAB_0020354c;
            iVar18 = *(int *)(param_1 + 0x1c);
            iVar19 = (int)lVar20;
            bVar4 = pbVar2[lVar20];
            if (0 < iVar18) break;
LAB_0020362c:
            lVar14 = lrintf(-NAN);
            puVar21[lVar20] = (char)lVar14;
            lVar20 = lVar20 + 1;
            iVar18 = (int)lVar20;
          }
        } while( true );
      }
    }
    else {
      lVar20 = 0;
      pbVar17 = pbVar2;
      if (0 < iVar3 * 3) {
        do {
          fVar23 = 0.0;
          fVar24 = fVar23;
          if (*(int *)(param_1 + 0x1c) < 1) {
            fVar25 = 0.0;
            fVar26 = 0.0;
          }
          else {
            fVar25 = 0.0;
            fVar26 = 0.0;
            lVar14 = 0;
            fVar23 = 0.0;
            do {
              lVar12 = lVar14 * 4;
              lVar13 = lVar14 * 4;
              lVar14 = lVar14 + 1;
              lVar12 = *(int *)(*(long *)(param_1 + 0x20) + lVar12) + lVar20;
              uVar5 = (uint)pbVar2[lVar12] - (uint)*pbVar17;
              uVar6 = (uint)pbVar2[lVar12 + 1] - (uint)pbVar17[1];
              uVar7 = (uint)pbVar2[lVar12 + 2] - (uint)pbVar17[2];
              uVar9 = (int)uVar5 >> 0x1f;
              uVar8 = (int)uVar6 >> 0x1f;
              uVar10 = (int)uVar7 >> 0x1f;
              fVar22 = *(float *)(*(long *)(param_1 + 0x28) + lVar13) *
                       *(float *)(*(long *)(param_1 + 0x30) +
                                 (long)(int)(((uVar5 ^ uVar9) - uVar9) + ((uVar6 ^ uVar8) - uVar8) +
                                            ((uVar7 ^ uVar10) - uVar10)) * 4);
              fVar23 = fVar23 + fVar22 * (float)pbVar2[lVar12];
              fVar26 = fVar26 + fVar22 * (float)pbVar2[lVar12 + 1];
              fVar25 = fVar25 + fVar22 * (float)pbVar2[lVar12 + 2];
              fVar24 = fVar24 + fVar22;
            } while ((int)lVar14 < *(int *)(param_1 + 0x1c));
          }
          fVar24 = 1.0 / fVar24;
          lVar20 = lVar20 + 3;
          pbVar17 = pbVar17 + 3;
          lVar14 = lrintf(fVar23 * fVar24);
          lVar12 = lrintf(fVar26 * fVar24);
          lVar13 = lrintf(fVar25 * fVar24);
          *puVar21 = (char)lVar14;
          puVar21[1] = (char)lVar12;
          puVar21[2] = (char)lVar13;
          puVar21 = puVar21 + 3;
        } while ((int)lVar20 < iVar3 * 3);
LAB_0020354c:
        iVar18 = param_2[1];
      }
    }
    iVar16 = iVar16 + 1;
    lVar11 = lVar11 + 1;
    if (iVar18 <= iVar16) {
      return;
    }
    puVar15 = *(uint **)(param_1 + 0x10);
  } while( true );
}


==================================================================

### FUNC 0020367c (16 bytes) name=FUN_0020367c

void FUN_0020367c(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f50b0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 0020368c (44 bytes) name=FUN_0020368c

void FUN_0020368c(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f50b0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002036b8 (16 bytes) name=FUN_002036b8

void FUN_002036b8(ParallelLoopBody *param_1)

{
  *(undefined **)param_1 = &DAT_004f50e0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 002036c8 (44 bytes) name=FUN_002036c8

void FUN_002036c8(ParallelLoopBody *param_1)

{
  *(undefined **)param_1 = &DAT_004f50e0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002036f4 (2272 bytes) name=FUN_002036f4

void FUN_002036f4(long param_1,ulong *param_2,long param_3,int param_4,int param_5,uint param_6)

{
  uint uVar1;
  uint uVar2;
  ulong uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  ulong uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  char cVar14;
  uint uVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  double *pdVar21;
  char *pcVar22;
  void *__dest;
  uint uVar23;
  long lVar24;
  double *pdVar25;
  double *pdVar26;
  ulong uVar27;
  undefined2 uVar28;
  size_t __n;
  int iVar29;
  double *pdVar30;
  int iVar31;
  ulong *puVar32;
  undefined2 uVar33;
  double *pdVar34;
  undefined2 uVar35;
  ulong uVar36;
  size_t sVar37;
  undefined2 *puVar38;
  ulong uVar39;
  void *__src;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  int iVar45;
  double dVar46;
  double dVar47;
  undefined2 *puVar48;
  double *local_58;
  undefined8 local_10;
  undefined8 local_8;
  
  pdVar34 = *(double **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar37 = (long)__src - (long)pdVar34;
  uVar27 = (long)sVar37 >> 3;
  dVar47 = *(double *)(param_1 + 0x10);
  local_58 = pdVar34;
  if ((uint)uVar27 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar29 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar29 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar22 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar14 = s_sumCount____ksize_1_0045d530[0x12];
        uVar13 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar12 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar22 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar22[0x12] = cVar14;
        *(undefined8 *)pcVar22 = uVar12;
        *(undefined8 *)(pcVar22 + 8) = uVar13;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = double; T = short int; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar29 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar29 + -1;
      goto LAB_002039a4;
    }
    sVar37 = -(ulong)(param_6 >> 0x1f) & 0xfffffff800000000 | (ulong)param_6 << 3;
  }
  else {
    uVar39 = (ulong)(int)param_6;
    if (uVar27 < uVar39) {
      uVar11 = uVar39 - uVar27;
      if (uVar11 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 3) < uVar11) {
          if (0x1fffffffffffffff - uVar27 < uVar11) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar3 = uVar11;
          if (uVar11 < uVar27) {
            uVar3 = uVar27;
          }
          uVar3 = uVar3 + uVar27;
          if ((uVar3 < uVar27) || (0x1fffffffffffffff < uVar3)) {
            uVar36 = 0xfffffffffffffff8;
LAB_00203f88:
            local_58 = operator_new(uVar36);
            pdVar34 = *(double **)(param_1 + 0x20);
            __n = (long)__src - (long)pdVar34;
            uVar27 = (long)__n >> 3;
          }
          else {
            uVar36 = uVar3 * 8;
            if (uVar3 != 0) goto LAB_00203f88;
            uVar36 = 0;
            local_58 = (double *)0x0;
            __n = sVar37;
          }
          memset((void *)((long)local_58 + sVar37),0,uVar11 * 8);
          if (uVar27 != 0) {
            memmove(local_58,pdVar34,__n);
          }
          __dest = (void *)((long)local_58 + uVar11 * 8 + __n);
          sVar37 = *(long *)(param_1 + 0x28) - (long)__src;
          if ((long)sVar37 >> 3 != 0) {
            __dest = memmove(__dest,__src,sVar37);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(double **)(param_1 + 0x20) = local_58;
          *(ulong *)(param_1 + 0x30) = (long)local_58 + uVar36;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar37;
        }
        else {
          memset(__src,0,uVar11 * 8);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar11 * 8);
        }
      }
    }
    else if (uVar39 < uVar27) {
      *(double **)(param_1 + 0x28) = pdVar34 + uVar39;
    }
    sVar37 = uVar39 << 3;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(local_58,0,sVar37);
  iVar45 = *(int *)(param_1 + 0x18);
  iVar29 = *(int *)(param_1 + 8);
  if (iVar45 < iVar29 + -1) {
    iVar8 = param_6 - 1;
    uVar7 = param_6 - 2 >> 1;
    uVar1 = uVar7 + 1;
    uVar5 = uVar1 * 2;
    if (iVar8 < 1) {
      uVar5 = 0;
    }
    uVar9 = param_6 - uVar5;
    lVar16 = (long)(int)uVar5;
    pdVar34 = local_58 + lVar16;
    uVar2 = (uint)((ulong)pdVar34 >> 3) & 1;
    iVar31 = iVar45 + 1;
    uVar4 = uVar9;
    if (uVar2 < uVar9) {
      uVar4 = uVar2;
    }
    iVar10 = uVar9 - uVar4;
    uVar2 = (iVar10 - 2U >> 1) + 1;
    iVar6 = uVar2 * 2;
    puVar32 = param_2;
    do {
      pdVar26 = (double *)*puVar32;
      if (0 < iVar8) {
        pdVar21 = local_58;
        pdVar25 = pdVar26;
        if ((local_58 < pdVar26 + 4 && pdVar26 < local_58 + 4) || (uVar1 < 4)) {
          do {
            dVar40 = *pdVar25;
            pdVar30 = pdVar21 + 2;
            pdVar21[1] = pdVar21[1] + pdVar25[1];
            *pdVar21 = *pdVar21 + dVar40;
            pdVar21 = pdVar30;
            pdVar25 = pdVar25 + 2;
          } while (pdVar30 != local_58 + ((ulong)uVar7 + 1) * 2);
        }
        else {
          uVar15 = 0;
          do {
            uVar15 = uVar15 + 1;
            dVar40 = *pdVar25;
            pdVar21[1] = pdVar21[1] + pdVar25[1];
            *pdVar21 = *pdVar21 + dVar40;
            pdVar21 = pdVar21 + 2;
            pdVar25 = pdVar25 + 2;
          } while (uVar15 < uVar1);
        }
      }
      if ((int)uVar5 < (int)param_6) {
        if ((pdVar34 < pdVar26 + lVar16 + 2 && pdVar26 + lVar16 < local_58 + lVar16 + 2) ||
           (uVar9 < 8)) {
          lVar20 = 0;
          do {
            *(double *)((long)pdVar34 + lVar20) =
                 *(double *)((long)pdVar34 + lVar20) +
                 *(double *)((long)(pdVar26 + lVar16) + lVar20);
            lVar20 = lVar20 + 8;
          } while (lVar20 != ((ulong)(iVar8 - uVar5) + 1) * 8);
        }
        else {
          uVar15 = uVar5;
          if (uVar4 != 0) {
            local_58[lVar16] = local_58[lVar16] + pdVar26[lVar16];
            uVar15 = uVar5 + 1;
          }
          if (iVar10 != 1) {
            uVar23 = 0;
            pdVar21 = local_58 + (ulong)uVar4 + lVar16;
            pdVar25 = local_58 + (ulong)uVar4 + lVar16;
            pdVar30 = pdVar26 + (ulong)uVar4 + lVar16;
            do {
              dVar41 = *pdVar30;
              uVar23 = uVar23 + 1;
              dVar40 = *pdVar25;
              pdVar21[1] = pdVar25[1] + pdVar30[1];
              *pdVar21 = dVar40 + dVar41;
              pdVar21 = pdVar21 + 2;
              pdVar25 = pdVar25 + 2;
              pdVar30 = pdVar30 + 2;
            } while (uVar23 < uVar2);
            uVar15 = uVar15 + iVar6;
            if (iVar6 == iVar10) goto LAB_00203970;
          }
          uVar27 = -(ulong)(uVar15 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar15 << 3;
          *(double *)((long)local_58 + uVar27) =
               *(double *)((long)local_58 + uVar27) + *(double *)((long)pdVar26 + uVar27);
        }
      }
LAB_00203970:
      puVar32 = puVar32 + 1;
      *(int *)(param_1 + 0x18) = iVar31;
      iVar31 = iVar31 + 1;
    } while (iVar31 != iVar29);
    param_2 = param_2 + (ulong)(uint)((iVar29 + -2) - iVar45) + 1;
  }
LAB_002039a4:
  if (param_5 != 0) {
    iVar8 = param_6 - 1;
    uVar1 = param_6 - 2 >> 1;
    puVar48 = (undefined2 *)(param_3 + 2);
    puVar32 = param_2 + (ulong)(param_5 - 1) + 1;
    lVar16 = (ulong)uVar1 * 0x10 + 0x18;
    iVar45 = (uVar1 + 1) * 2;
    if (iVar8 < 1) {
      iVar45 = 0;
    }
    lVar17 = (long)iVar45;
    lVar20 = (ulong)(uint)(iVar8 - iVar45) + 1;
    lVar24 = lVar17 * 8;
    while( true ) {
      uVar39 = *param_2;
      uVar27 = param_2[1 - iVar29];
      uVar33 = 0x8000;
      uVar35 = 0x7fff;
      if (dVar47 == 1.0) {
        if (0 < iVar8) {
          pdVar34 = (double *)(uVar39 + 8);
          pdVar26 = (double *)(uVar27 + 8);
          pdVar21 = local_58;
          puVar38 = puVar48;
          do {
            dVar40 = pdVar34[-1];
            dVar44 = *pdVar21;
            dVar46 = pdVar21[1];
            dVar41 = *pdVar34;
            lVar18 = lrint(dVar44 + dVar40);
            uVar28 = (short)lVar18;
            if ((0xffff < (int)lVar18 + 0x8000U) && (uVar28 = uVar35, (int)lVar18 < 1)) {
              uVar28 = uVar33;
            }
            puVar38[-1] = uVar28;
            lVar18 = lrint(dVar46 + dVar41);
            uVar28 = (short)lVar18;
            if ((0xffff < (int)lVar18 + 0x8000U) && (uVar28 = uVar35, (int)lVar18 < 1)) {
              uVar28 = uVar33;
            }
            dVar43 = *pdVar26;
            dVar42 = pdVar26[-1];
            *puVar38 = uVar28;
            pdVar34 = pdVar34 + 2;
            pdVar26 = pdVar26 + 2;
            pdVar21[1] = (dVar46 + dVar41) - dVar43;
            *pdVar21 = (dVar44 + dVar40) - dVar42;
            pdVar21 = pdVar21 + 2;
            puVar38 = puVar38 + 2;
          } while (pdVar34 != (double *)(uVar39 + lVar16));
        }
        if (iVar45 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar40 = local_58[lVar17 + lVar18] + *(double *)(uVar39 + lVar24 + lVar18 * 8);
            lVar19 = lrint(dVar40);
            uVar28 = (short)lVar19;
            if ((0xffff < (int)lVar19 + 0x8000U) && (uVar28 = uVar35, (int)lVar19 < 1)) {
              uVar28 = uVar33;
            }
            dVar41 = *(double *)(uVar27 + lVar24 + lVar18 * 8);
            puVar48[lVar17 + lVar18 + -1] = uVar28;
            local_58[lVar17 + lVar18] = dVar40 - dVar41;
            lVar18 = lVar18 + 1;
          } while (lVar20 != lVar18);
        }
      }
      else {
        if (0 < iVar8) {
          pdVar34 = (double *)(uVar39 + 8);
          pdVar26 = (double *)(uVar27 + 8);
          puVar38 = puVar48;
          pdVar21 = local_58;
          do {
            dVar40 = pdVar34[-1];
            dVar44 = *pdVar21;
            dVar46 = pdVar21[1];
            dVar41 = *pdVar34;
            lVar18 = lrint(dVar47 * (dVar44 + dVar40));
            uVar28 = (short)lVar18;
            if ((0xffff < (int)lVar18 + 0x8000U) && (uVar28 = uVar35, (int)lVar18 < 1)) {
              uVar28 = uVar33;
            }
            puVar38[-1] = uVar28;
            lVar18 = lrint(dVar47 * (dVar46 + dVar41));
            uVar28 = (short)lVar18;
            if ((0xffff < (int)lVar18 + 0x8000U) && (uVar28 = uVar35, (int)lVar18 < 1)) {
              uVar28 = uVar33;
            }
            dVar43 = *pdVar26;
            dVar42 = pdVar26[-1];
            *puVar38 = uVar28;
            pdVar34 = pdVar34 + 2;
            pdVar26 = pdVar26 + 2;
            pdVar21[1] = (dVar46 + dVar41) - dVar43;
            *pdVar21 = (dVar44 + dVar40) - dVar42;
            puVar38 = puVar38 + 2;
            pdVar21 = pdVar21 + 2;
          } while (pdVar34 != (double *)(uVar39 + lVar16));
        }
        if (iVar45 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar40 = local_58[lVar17 + lVar18] + *(double *)(uVar39 + lVar24 + lVar18 * 8);
            lVar19 = lrint(dVar47 * dVar40);
            uVar28 = (short)lVar19;
            if ((0xffff < (int)lVar19 + 0x8000U) && (uVar28 = uVar35, (int)lVar19 < 1)) {
              uVar28 = uVar33;
            }
            dVar41 = *(double *)(uVar27 + lVar24 + lVar18 * 8);
            puVar48[lVar17 + lVar18 + -1] = uVar28;
            local_58[lVar17 + lVar18] = dVar40 - dVar41;
            lVar18 = lVar18 + 1;
          } while (lVar18 != lVar20);
        }
      }
      puVar48 = (undefined2 *)((long)puVar48 + (long)param_4);
      param_2 = param_2 + 1;
      if (param_2 == puVar32) break;
      iVar29 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 00203fe8 (8128 bytes) name=FUN_00203fe8

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00203fe8(long param_1,uint *param_2,int param_3)

{
  short *psVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  ushort *puVar11;
  uint uVar12;
  uint uVar13;
  byte bVar14;
  short sVar15;
  ushort uVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  uint uVar21;
  short sVar22;
  short sVar23;
  short sVar24;
  short sVar25;
  char cVar26;
  uint uVar27;
  char cVar28;
  char cVar29;
  ushort uVar30;
  int iVar31;
  uint uVar32;
  int iVar33;
  long lVar34;
  long lVar35;
  void *__s;
  byte *pbVar36;
  ulong uVar37;
  long lVar38;
  ushort *puVar39;
  short *psVar40;
  ushort uVar41;
  uint uVar42;
  short *__s_00;
  long lVar43;
  ushort uVar44;
  long lVar45;
  ushort uVar46;
  uint uVar47;
  long lVar48;
  int iVar49;
  ulong uVar50;
  ushort uVar51;
  int iVar52;
  ushort *puVar53;
  uint uVar54;
  uint uVar55;
  ushort uVar56;
  char *pcVar57;
  ushort uVar58;
  uint uVar59;
  ushort uVar60;
  ulong uVar61;
  ushort uVar62;
  uint uVar63;
  ushort uVar64;
  ushort uVar65;
  ushort uVar66;
  ushort uVar67;
  ushort uVar68;
  short *__s_01;
  ushort *puVar69;
  ushort uVar70;
  ushort uVar71;
  int iVar72;
  undefined8 uVar73;
  undefined8 uVar74;
  size_t __n;
  undefined8 uVar75;
  undefined8 uVar76;
  int iVar77;
  int iVar78;
  long lVar79;
  uint uVar80;
  short *psVar81;
  short *psVar82;
  short *psVar83;
  void *local_9f0;
  long local_9e0;
  int local_9d0;
  long local_9c8;
  uint local_998;
  ushort auStack_900 [64];
  ushort local_880 [1088];
  
  uVar12 = (param_3 + -1) / 2;
  lVar34 = *(long *)(param_1 + 0x50);
  uVar27 = *param_2 >> 3 & 0x1ff;
  uVar13 = param_2[2];
  lVar35 = *(long *)(param_2 + 0x14);
  iVar72 = uVar12 * 2;
  uVar2 = uVar27 + 1;
  uVar19 = 0;
  if (uVar2 != 0) {
    uVar19 = 0x200 / uVar2;
  }
  local_9f0 = (void *)0x0;
  if ((int)param_2[3] < (int)uVar19) {
    uVar19 = param_2[3];
  }
  lVar43 = (long)(int)((iVar72 + uVar19) * 0x10 * uVar2 + 0x10);
  if (lVar43 != 0) {
    if (lVar43 < 0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
    local_9f0 = operator_new(lVar43 << 1);
    memset(local_9f0,0,lVar43 << 1);
  }
  lVar43 = (long)(int)((iVar72 + uVar19) * 0x100 * uVar2 + 0x10);
  if (lVar43 < 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f0e4();
  }
  uVar61 = lVar43 << 1;
  __s = operator_new(uVar61);
  memset(__s,0,uVar61);
  __s_01 = (short *)((long)__s + 0xfU & 0xfffffffffffffff0);
  __s_00 = (short *)((long)local_9f0 + 0xfU & 0xfffffffffffffff0);
  cVar28 = cv::checkHardwareSupport(3);
  if (cVar28 == '\0') {
    cVar28 = cv::checkHardwareSupport(100);
  }
  uVar42 = param_2[3];
  if (0 < (int)uVar42) {
    sVar24 = (short)uVar12 + 2;
    lVar43 = (long)(int)uVar2;
    iVar17 = (uVar12 + 1) * uVar12 * 2;
    __n = NEON_shl(lVar43,5);
    iVar18 = uVar12 * -2;
    uVar3 = iVar72 + 1;
    uVar20 = uVar13 - 1;
    sVar22 = (short)uVar3;
    local_9c8 = 0;
    local_9d0 = 0;
    do {
      lVar8 = *(long *)(param_1 + 0x10) + local_9c8;
      uVar5 = uVar42 - local_9d0;
      if ((int)uVar19 < (int)(uVar42 - local_9d0)) {
        uVar5 = uVar19;
      }
      uVar5 = uVar5 + iVar72;
      lVar9 = *(long *)(param_2 + 4) + local_9c8 + (int)(uVar12 * ~uVar27);
      uVar42 = uVar5 * 0x10 * uVar2;
      memset(__s_00,0,-(ulong)(uVar42 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar42 << 1);
      uVar42 = uVar5 * 0x100 * uVar2;
      memset(__s_01,0,-(ulong)(uVar42 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar42 << 1);
      iVar78 = 0;
      iVar52 = 0;
      lVar48 = 0;
      do {
        if (0 < (int)uVar5) {
          pbVar36 = (byte *)(lVar8 + lVar48);
          iVar77 = iVar78 << 4;
          uVar42 = 0;
          do {
            uVar54 = iVar77 + (uint)(*pbVar36 >> 4);
            iVar77 = iVar77 + 0x10;
            uVar61 = -(ulong)(uVar54 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar54 << 1;
            *(short *)((long)__s_00 + uVar61) = sVar24 + *(short *)((long)__s_00 + uVar61);
            bVar14 = *pbVar36;
            pbVar36 = pbVar36 + lVar43;
            iVar31 = uVar42 + (iVar52 + (uint)(bVar14 >> 4)) * uVar5;
            uVar42 = uVar42 + 1;
            uVar54 = (bVar14 & 0xf) + iVar31 * 0x10;
            uVar61 = -(ulong)(uVar54 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar54 << 1;
            *(short *)((long)__s_01 + uVar61) = sVar24 + *(short *)((long)__s_01 + uVar61);
          } while (uVar42 != uVar5);
        }
        uVar42 = 1;
        if (1 < (int)uVar12) {
          do {
            uVar54 = uVar42;
            if ((int)uVar20 < (int)uVar42) {
              uVar54 = uVar20;
            }
            if (0 < (int)uVar5) {
              pbVar36 = (byte *)(lVar8 + (int)uVar54 * lVar34 + lVar48);
              uVar54 = 0;
              iVar77 = iVar78 << 4;
              do {
                uVar6 = iVar77 + (uint)(*pbVar36 >> 4);
                iVar77 = iVar77 + 0x10;
                uVar61 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
                *(short *)((long)__s_00 + uVar61) = *(short *)((long)__s_00 + uVar61) + 1;
                bVar14 = *pbVar36;
                pbVar36 = pbVar36 + lVar43;
                iVar31 = uVar54 + (iVar52 + (uint)(bVar14 >> 4)) * uVar5;
                uVar54 = uVar54 + 1;
                uVar6 = (bVar14 & 0xf) + iVar31 * 0x10;
                uVar61 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
                *(short *)((long)__s_01 + uVar61) = *(short *)((long)__s_01 + uVar61) + 1;
              } while (uVar54 != uVar5);
            }
            uVar42 = uVar42 + 1;
          } while (uVar42 != uVar12);
        }
        lVar48 = lVar48 + 1;
        iVar52 = iVar52 + 0x10;
        iVar78 = iVar78 + uVar5;
      } while ((int)lVar48 < (int)uVar2);
      if (0 < (int)uVar13) {
        uVar54 = uVar5 - 1;
        iVar52 = uVar5 - uVar12;
        uVar61 = -(ulong)((uVar5 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                 (ulong)(uVar5 * 0x10) << 1;
        uVar42 = uVar12 + 1 + iVar52;
        local_9e0 = (long)(int)(uVar2 * uVar12);
        local_998 = uVar12;
        do {
          iVar78 = iVar18 + -1 + local_998;
          if (iVar78 < 0) {
            iVar78 = 0;
          }
          uVar6 = local_998;
          if ((int)uVar20 < (int)local_998) {
            uVar6 = uVar20;
          }
          lVar45 = iVar78 * lVar34;
          memset(local_880,0,lVar43 * 0x220);
          memset(auStack_900,0,__n);
          sVar25 = (short)((uVar12 & 0x7fff) << 1) + 1;
          lVar48 = 0;
          iVar77 = 0;
          iVar78 = 0;
          puVar69 = local_880;
          psVar81 = __s_00 + (ulong)(iVar72 - 1) * 0x10 + 0x10;
          psVar82 = __s_00;
          psVar83 = __s_01;
          do {
            iVar31 = (int)lVar48;
            if (0 < (int)uVar5) {
              uVar47 = 0;
              iVar49 = iVar77 << 4;
              pbVar36 = (byte *)(lVar8 + lVar48 + lVar45);
              do {
                uVar80 = iVar49 + (uint)(*pbVar36 >> 4);
                uVar37 = -(ulong)(uVar80 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar80 << 1;
                *(short *)((long)__s_00 + uVar37) = *(short *)((long)__s_00 + uVar37) + -1;
                uVar80 = (*pbVar36 & 0xf) +
                         (uVar47 + (iVar78 + (uint)(*pbVar36 >> 4)) * uVar5) * 0x10;
                uVar37 = -(ulong)(uVar80 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar80 << 1;
                *(short *)((long)__s_01 + uVar37) = *(short *)((long)__s_01 + uVar37) + -1;
                uVar80 = iVar49 + (uint)(pbVar36[(int)uVar6 * lVar34 - lVar45] >> 4);
                iVar49 = iVar49 + 0x10;
                uVar37 = -(ulong)(uVar80 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar80 << 1;
                *(short *)((long)__s_00 + uVar37) = *(short *)((long)__s_00 + uVar37) + 1;
                iVar33 = uVar47 + (iVar78 + (uint)(pbVar36[(int)uVar6 * lVar34 - lVar45] >> 4)) *
                                  uVar5;
                uVar47 = uVar47 + 1;
                uVar80 = (pbVar36[(int)uVar6 * lVar34 - lVar45] & 0xf) + iVar33 * 0x10;
                uVar37 = -(ulong)(uVar80 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar80 << 1;
                *(short *)((long)__s_01 + uVar37) = *(short *)((long)__s_01 + uVar37) + 1;
                pbVar36 = pbVar36 + lVar43;
              } while (uVar47 != uVar5);
            }
            iVar49 = 0;
            puVar53 = puVar69;
            psVar40 = psVar83;
            do {
              iVar49 = iVar49 + 1;
              puVar53[0x10] = puVar53[0x10] + sVar22 * *psVar40;
              puVar53[0x11] = puVar53[0x11] + sVar22 * psVar40[1];
              puVar53[0x12] = puVar53[0x12] + sVar22 * psVar40[2];
              puVar53[0x13] = puVar53[0x13] + sVar22 * psVar40[3];
              puVar53[0x14] = puVar53[0x14] + sVar22 * psVar40[4];
              puVar53[0x15] = puVar53[0x15] + sVar22 * psVar40[5];
              puVar53[0x16] = puVar53[0x16] + sVar22 * psVar40[6];
              puVar53[0x17] = puVar53[0x17] + sVar22 * psVar40[7];
              puVar53[0x18] = puVar53[0x18] + sVar22 * psVar40[8];
              puVar53[0x19] = puVar53[0x19] + sVar22 * psVar40[9];
              puVar53[0x1a] = puVar53[0x1a] + sVar22 * psVar40[10];
              puVar53[0x1b] = puVar53[0x1b] + sVar22 * psVar40[0xb];
              puVar53[0x1c] = puVar53[0x1c] + sVar22 * psVar40[0xc];
              puVar53[0x1d] = puVar53[0x1d] + sVar22 * psVar40[0xd];
              puVar53[0x1e] = puVar53[0x1e] + sVar22 * psVar40[0xe];
              psVar1 = psVar40 + 0xf;
              psVar40 = (short *)((long)psVar40 + uVar61);
              puVar53[0x1f] = puVar53[0x1f] + sVar22 * *psVar1;
              puVar53 = puVar53 + 0x10;
            } while (iVar49 != 0x10);
            if (cVar28 == '\0') {
              if (0 < iVar72) {
                uVar56 = puVar69[4];
                uVar70 = puVar69[0xb];
                uVar68 = puVar69[0xc];
                uVar67 = puVar69[0xd];
                uVar66 = puVar69[0xe];
                uVar64 = *puVar69;
                uVar62 = puVar69[1];
                uVar60 = puVar69[2];
                uVar58 = puVar69[3];
                uVar51 = puVar69[5];
                uVar30 = puVar69[9];
                uVar65 = puVar69[0xf];
                uVar46 = puVar69[6];
                uVar71 = puVar69[7];
                uVar44 = puVar69[8];
                uVar41 = puVar69[10];
                psVar40 = psVar82;
                do {
                  psVar1 = psVar40 + 0x10;
                  uVar64 = uVar64 + *psVar40;
                  *puVar69 = uVar64;
                  uVar62 = uVar62 + psVar40[1];
                  puVar69[1] = uVar62;
                  uVar60 = uVar60 + psVar40[2];
                  puVar69[2] = uVar60;
                  uVar58 = uVar58 + psVar40[3];
                  puVar69[3] = uVar58;
                  uVar56 = uVar56 + psVar40[4];
                  puVar69[4] = uVar56;
                  uVar51 = uVar51 + psVar40[5];
                  puVar69[5] = uVar51;
                  uVar46 = uVar46 + psVar40[6];
                  puVar69[6] = uVar46;
                  uVar71 = uVar71 + psVar40[7];
                  puVar69[7] = uVar71;
                  uVar44 = uVar44 + psVar40[8];
                  puVar69[8] = uVar44;
                  uVar30 = uVar30 + psVar40[9];
                  puVar69[9] = uVar30;
                  uVar41 = uVar41 + psVar40[10];
                  puVar69[10] = uVar41;
                  uVar70 = uVar70 + psVar40[0xb];
                  puVar69[0xb] = uVar70;
                  uVar68 = uVar68 + psVar40[0xc];
                  puVar69[0xc] = uVar68;
                  uVar67 = uVar67 + psVar40[0xd];
                  puVar69[0xd] = uVar67;
                  uVar66 = uVar66 + psVar40[0xe];
                  puVar69[0xe] = uVar66;
                  uVar65 = uVar65 + psVar40[0xf];
                  puVar69[0xf] = uVar65;
                  psVar40 = psVar1;
                } while (psVar1 != psVar81);
              }
              if ((int)uVar12 < iVar52) {
                uVar80 = 0;
                lVar79 = NEON_shl((long)iVar31,4);
                pcVar57 = (char *)(lVar9 + lVar48 + local_9e0);
                lVar10 = lVar79 + iVar31;
                uVar47 = uVar3;
                do {
                  uVar21 = uVar47 - 1;
                  uVar32 = uVar21;
                  if ((int)uVar54 < (int)uVar21) {
                    uVar32 = uVar54;
                  }
                  uVar37 = -(ulong)((uVar32 + iVar77 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                           (ulong)((uVar32 + iVar77) * 0x10) << 1;
                  uVar64 = *(short *)((long)__s_00 + uVar37) + *puVar69;
                  *puVar69 = uVar64;
                  uVar62 = *(short *)((long)__s_00 + uVar37 + 2) + puVar69[1];
                  puVar69[1] = uVar62;
                  uVar60 = *(short *)((long)__s_00 + uVar37 + 4) + puVar69[2];
                  puVar69[2] = uVar60;
                  uVar58 = *(short *)((long)__s_00 + uVar37 + 6) + puVar69[3];
                  puVar69[3] = uVar58;
                  uVar56 = *(short *)((long)__s_00 + uVar37 + 8) + puVar69[4];
                  puVar69[4] = uVar56;
                  uVar51 = *(short *)((long)__s_00 + uVar37 + 10) + puVar69[5];
                  puVar69[5] = uVar51;
                  uVar46 = *(short *)((long)__s_00 + uVar37 + 0xc) + puVar69[6];
                  puVar69[6] = uVar46;
                  uVar71 = *(short *)((long)__s_00 + uVar37 + 0xe) + puVar69[7];
                  puVar69[7] = uVar71;
                  uVar44 = *(short *)((long)__s_00 + uVar37 + 0x10) + puVar69[8];
                  puVar69[8] = uVar44;
                  uVar30 = *(short *)((long)__s_00 + uVar37 + 0x12) + puVar69[9];
                  puVar69[9] = uVar30;
                  uVar41 = *(short *)((long)__s_00 + uVar37 + 0x14) + puVar69[10];
                  puVar69[10] = uVar41;
                  uVar70 = *(short *)((long)__s_00 + uVar37 + 0x16) + puVar69[0xb];
                  puVar69[0xb] = uVar70;
                  uVar68 = *(short *)((long)__s_00 + uVar37 + 0x18) + puVar69[0xc];
                  puVar69[0xc] = uVar68;
                  uVar67 = *(short *)((long)__s_00 + uVar37 + 0x1a) + puVar69[0xd];
                  puVar69[0xd] = uVar67;
                  uVar66 = *(short *)((long)__s_00 + uVar37 + 0x1c) + puVar69[0xe];
                  puVar69[0xe] = uVar66;
                  uVar65 = *(short *)((long)__s_00 + uVar37 + 0x1e) + puVar69[0xf];
                  puVar69[0xf] = uVar65;
                  if (iVar17 < (int)(uint)uVar64) {
                    uVar32 = 0;
                    iVar31 = 0;
                  }
                  else {
                    uVar63 = (uint)uVar64 + (uint)uVar62;
                    iVar31 = 1;
                    uVar32 = (uint)uVar64;
                    if ((int)uVar63 <= iVar17) {
                      uVar32 = uVar63 + puVar69[2];
                      if (iVar17 < (int)uVar32) {
                        iVar31 = 2;
                        uVar32 = uVar63;
                      }
                      else {
                        uVar63 = uVar32 + puVar69[3];
                        if (iVar17 < (int)uVar63) {
                          iVar31 = 3;
                        }
                        else {
                          uVar32 = uVar63 + puVar69[4];
                          if (iVar17 < (int)uVar32) {
                            iVar31 = 4;
                            uVar32 = uVar63;
                          }
                          else {
                            uVar63 = uVar32 + puVar69[5];
                            if (iVar17 < (int)uVar63) {
                              iVar31 = 5;
                            }
                            else {
                              uVar32 = uVar63 + puVar69[6];
                              if (iVar17 < (int)uVar32) {
                                iVar31 = 6;
                                uVar32 = uVar63;
                              }
                              else {
                                uVar63 = uVar32 + puVar69[7];
                                if (iVar17 < (int)uVar63) {
                                  iVar31 = 7;
                                }
                                else {
                                  uVar32 = uVar63 + puVar69[8];
                                  if (iVar17 < (int)uVar32) {
                                    iVar31 = 8;
                                    uVar32 = uVar63;
                                  }
                                  else {
                                    uVar63 = uVar32 + puVar69[9];
                                    if (iVar17 < (int)uVar63) {
                                      iVar31 = 9;
                                    }
                                    else {
                                      uVar32 = uVar63 + puVar69[10];
                                      if (iVar17 < (int)uVar32) {
                                        iVar31 = 10;
                                        uVar32 = uVar63;
                                      }
                                      else {
                                        uVar63 = uVar32 + puVar69[0xb];
                                        if (iVar17 < (int)uVar63) {
                                          iVar31 = 0xb;
                                        }
                                        else {
                                          uVar32 = uVar63 + puVar69[0xc];
                                          if (iVar17 < (int)uVar32) {
                                            iVar31 = 0xc;
                                            uVar32 = uVar63;
                                          }
                                          else {
                                            uVar63 = uVar32 + puVar69[0xd];
                                            if (iVar17 < (int)uVar63) {
                                              iVar31 = 0xd;
                                            }
                                            else {
                                              uVar55 = uVar63 + puVar69[0xe];
                                              if (iVar17 < (int)uVar55) {
                                                iVar31 = 0xe;
                                                uVar32 = uVar63;
                                              }
                                              else {
                                                iVar31 = 0x10;
                                                uVar32 = uVar55 + uVar65;
                                                if (iVar17 < (int)(uVar55 + uVar65)) {
                                                  iVar31 = 0xf;
                                                  uVar32 = uVar55;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  lVar38 = (long)iVar31;
                  uVar16 = auStack_900[lVar79 + lVar38];
                  if ((int)uVar80 < (int)(uint)uVar16) {
                    if ((int)uVar21 < (int)(uint)uVar16) {
                      puVar39 = local_880 + (lVar38 + lVar10 + 1) * 0x10;
                    }
                    else {
                      lVar4 = lVar38 + lVar10 + 1;
                      iVar49 = uVar5 * (iVar78 + iVar31);
                      puVar39 = local_880 + lVar4 * 0x10;
                      uVar64 = local_880[lVar4 * 0x10];
                      uVar44 = local_880[lVar4 * 0x10 + 8];
                      uVar62 = local_880[lVar4 * 0x10 + 1];
                      uVar60 = local_880[lVar4 * 0x10 + 2];
                      uVar58 = local_880[lVar4 * 0x10 + 3];
                      uVar56 = local_880[lVar4 * 0x10 + 4];
                      uVar51 = local_880[lVar4 * 0x10 + 5];
                      uVar46 = local_880[lVar4 * 0x10 + 6];
                      uVar71 = local_880[lVar4 * 0x10 + 7];
                      uVar30 = local_880[lVar4 * 0x10 + 9];
                      uVar41 = local_880[lVar4 * 0x10 + 10];
                      uVar70 = local_880[lVar4 * 0x10 + 0xb];
                      uVar68 = local_880[lVar4 * 0x10 + 0xc];
                      uVar67 = local_880[lVar4 * 0x10 + 0xd];
                      uVar66 = local_880[lVar4 * 0x10 + 0xe];
                      uVar65 = local_880[lVar4 * 0x10 + 0xf];
                      uVar63 = (uint)uVar16;
                      do {
                        uVar55 = uVar63 + 1;
                        uVar59 = uVar55 & 0xffff;
                        iVar33 = iVar18 + uVar63 + -1;
                        if ((int)(iVar18 + uVar63) < 1) {
                          iVar33 = 0;
                        }
                        uVar7 = iVar33 + iVar49;
                        uVar37 = -(ulong)((uVar7 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                                 (ulong)(uVar7 * 0x10) << 1;
                        uVar64 = uVar64 - *(short *)((long)__s_01 + uVar37);
                        uVar7 = uVar54;
                        if ((int)uVar63 < (int)uVar5) {
                          uVar7 = uVar63;
                        }
                        *puVar39 = uVar64;
                        uVar7 = uVar7 + iVar49;
                        uVar50 = -(ulong)((uVar7 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                                 (ulong)(uVar7 * 0x10) << 1;
                        uVar62 = uVar62 - *(short *)((long)__s_01 + uVar37 + 2);
                        local_880[lVar4 * 0x10 + 1] = uVar62;
                        uVar60 = uVar60 - *(short *)((long)__s_01 + uVar37 + 4);
                        local_880[lVar4 * 0x10 + 2] = uVar60;
                        uVar58 = uVar58 - *(short *)((long)__s_01 + uVar37 + 6);
                        local_880[lVar4 * 0x10 + 3] = uVar58;
                        uVar56 = uVar56 - *(short *)((long)__s_01 + uVar37 + 8);
                        local_880[lVar4 * 0x10 + 4] = uVar56;
                        uVar51 = uVar51 - *(short *)((long)__s_01 + uVar37 + 10);
                        local_880[lVar4 * 0x10 + 5] = uVar51;
                        uVar46 = uVar46 - *(short *)((long)__s_01 + uVar37 + 0xc);
                        local_880[lVar4 * 0x10 + 6] = uVar46;
                        uVar71 = uVar71 - *(short *)((long)__s_01 + uVar37 + 0xe);
                        local_880[lVar4 * 0x10 + 7] = uVar71;
                        uVar44 = uVar44 - *(short *)((long)__s_01 + uVar37 + 0x10);
                        local_880[lVar4 * 0x10 + 8] = uVar44;
                        uVar30 = uVar30 - *(short *)((long)__s_01 + uVar37 + 0x12);
                        local_880[lVar4 * 0x10 + 9] = uVar30;
                        uVar41 = uVar41 - *(short *)((long)__s_01 + uVar37 + 0x14);
                        local_880[lVar4 * 0x10 + 10] = uVar41;
                        uVar70 = uVar70 - *(short *)((long)__s_01 + uVar37 + 0x16);
                        local_880[lVar4 * 0x10 + 0xb] = uVar70;
                        uVar68 = uVar68 - *(short *)((long)__s_01 + uVar37 + 0x18);
                        local_880[lVar4 * 0x10 + 0xc] = uVar68;
                        uVar67 = uVar67 - *(short *)((long)__s_01 + uVar37 + 0x1a);
                        local_880[lVar4 * 0x10 + 0xd] = uVar67;
                        uVar66 = uVar66 - *(short *)((long)__s_01 + uVar37 + 0x1c);
                        local_880[lVar4 * 0x10 + 0xe] = uVar66;
                        uVar65 = uVar65 - *(short *)((long)__s_01 + uVar37 + 0x1e);
                        local_880[lVar4 * 0x10 + 0xf] = uVar65;
                        uVar64 = uVar64 + *(short *)((long)__s_01 + uVar50);
                        *puVar39 = uVar64;
                        uVar62 = uVar62 + *(short *)((long)__s_01 + uVar50 + 2);
                        local_880[lVar4 * 0x10 + 1] = uVar62;
                        uVar60 = uVar60 + *(short *)((long)__s_01 + uVar50 + 4);
                        local_880[lVar4 * 0x10 + 2] = uVar60;
                        uVar58 = uVar58 + *(short *)((long)__s_01 + uVar50 + 6);
                        local_880[lVar4 * 0x10 + 3] = uVar58;
                        uVar56 = uVar56 + *(short *)((long)__s_01 + uVar50 + 8);
                        local_880[lVar4 * 0x10 + 4] = uVar56;
                        uVar51 = uVar51 + *(short *)((long)__s_01 + uVar50 + 10);
                        local_880[lVar4 * 0x10 + 5] = uVar51;
                        uVar46 = uVar46 + *(short *)((long)__s_01 + uVar50 + 0xc);
                        local_880[lVar4 * 0x10 + 6] = uVar46;
                        uVar71 = uVar71 + *(short *)((long)__s_01 + uVar50 + 0xe);
                        local_880[lVar4 * 0x10 + 7] = uVar71;
                        uVar44 = uVar44 + *(short *)((long)__s_01 + uVar50 + 0x10);
                        local_880[lVar4 * 0x10 + 8] = uVar44;
                        uVar30 = uVar30 + *(short *)((long)__s_01 + uVar50 + 0x12);
                        local_880[lVar4 * 0x10 + 9] = uVar30;
                        uVar41 = uVar41 + *(short *)((long)__s_01 + uVar50 + 0x14);
                        local_880[lVar4 * 0x10 + 10] = uVar41;
                        uVar70 = uVar70 + *(short *)((long)__s_01 + uVar50 + 0x16);
                        local_880[lVar4 * 0x10 + 0xb] = uVar70;
                        uVar68 = uVar68 + *(short *)((long)__s_01 + uVar50 + 0x18);
                        local_880[lVar4 * 0x10 + 0xc] = uVar68;
                        uVar67 = uVar67 + *(short *)((long)__s_01 + uVar50 + 0x1a);
                        local_880[lVar4 * 0x10 + 0xd] = uVar67;
                        uVar66 = uVar66 + *(short *)((long)__s_01 + uVar50 + 0x1c);
                        local_880[lVar4 * 0x10 + 0xe] = uVar66;
                        uVar65 = uVar65 + *(short *)((long)__s_01 + uVar50 + 0x1e);
                        local_880[lVar4 * 0x10 + 0xf] = uVar65;
                        uVar63 = uVar59;
                      } while ((int)uVar59 <= (int)uVar21);
                      uVar64 = *puVar69;
                      uVar62 = puVar69[1];
                      uVar60 = puVar69[2];
                      uVar58 = puVar69[3];
                      uVar56 = puVar69[4];
                      uVar51 = puVar69[5];
                      uVar46 = puVar69[6];
                      uVar71 = puVar69[7];
                      uVar44 = puVar69[8];
                      uVar30 = puVar69[9];
                      uVar41 = puVar69[10];
                      uVar70 = puVar69[0xb];
                      uVar68 = puVar69[0xc];
                      uVar67 = puVar69[0xd];
                      uVar66 = puVar69[0xe];
                      uVar65 = puVar69[0xf];
                      auStack_900[lVar79 + lVar38] = (ushort)uVar55;
                    }
                  }
                  else {
                    lVar4 = lVar38 + lVar10 + 1;
                    auStack_900[lVar79 + lVar38] = (ushort)uVar80;
                    uVar63 = uVar5;
                    if ((int)uVar21 < (int)uVar5) {
                      uVar63 = uVar47;
                    }
                    puVar39 = local_880 + lVar4 * 0x10;
                    puVar39[0] = 0;
                    puVar39[1] = 0;
                    puVar39[2] = 0;
                    puVar39[3] = 0;
                    puVar53 = local_880 + lVar4 * 0x10 + 4;
                    puVar53[0] = 0;
                    puVar53[1] = 0;
                    puVar53[2] = 0;
                    puVar53[3] = 0;
                    puVar53 = local_880 + lVar4 * 0x10 + 8;
                    puVar53[0] = 0;
                    puVar53[1] = 0;
                    puVar53[2] = 0;
                    puVar53[3] = 0;
                    puVar53 = local_880 + lVar4 * 0x10 + 0xc;
                    puVar53[0] = 0;
                    puVar53[1] = 0;
                    puVar53[2] = 0;
                    puVar53[3] = 0;
                    uVar55 = uVar80;
                    while (uVar55 = uVar55 & 0xffff, (int)uVar55 < (int)uVar63) {
                      uVar59 = uVar55 + uVar5 * (iVar31 + iVar78);
                      uVar64 = local_880[lVar4 * 0x10 + 1];
                      uVar37 = -(ulong)((uVar59 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                               (ulong)(uVar59 * 0x10) << 1;
                      uVar62 = local_880[lVar4 * 0x10 + 2];
                      uVar60 = local_880[lVar4 * 0x10 + 3];
                      uVar58 = local_880[lVar4 * 0x10 + 4];
                      uVar55 = uVar55 + 1;
                      uVar56 = local_880[lVar4 * 0x10 + 5];
                      *puVar39 = *(short *)((long)__s_01 + uVar37) + *puVar39;
                      local_880[lVar4 * 0x10 + 1] = *(short *)((long)__s_01 + uVar37 + 2) + uVar64;
                      local_880[lVar4 * 0x10 + 2] = *(short *)((long)__s_01 + uVar37 + 4) + uVar62;
                      local_880[lVar4 * 0x10 + 3] = *(short *)((long)__s_01 + uVar37 + 6) + uVar60;
                      local_880[lVar4 * 0x10 + 4] = *(short *)((long)__s_01 + uVar37 + 8) + uVar58;
                      local_880[lVar4 * 0x10 + 5] = *(short *)((long)__s_01 + uVar37 + 10) + uVar56;
                      local_880[lVar4 * 0x10 + 6] =
                           *(short *)((long)__s_01 + uVar37 + 0xc) + local_880[lVar4 * 0x10 + 6];
                      local_880[lVar4 * 0x10 + 7] =
                           *(short *)((long)__s_01 + uVar37 + 0xe) + local_880[lVar4 * 0x10 + 7];
                      local_880[lVar4 * 0x10 + 8] =
                           *(short *)((long)__s_01 + uVar37 + 0x10) + local_880[lVar4 * 0x10 + 8];
                      local_880[lVar4 * 0x10 + 9] =
                           *(short *)((long)__s_01 + uVar37 + 0x12) + local_880[lVar4 * 0x10 + 9];
                      local_880[lVar4 * 0x10 + 10] =
                           *(short *)((long)__s_01 + uVar37 + 0x14) + local_880[lVar4 * 0x10 + 10];
                      local_880[lVar4 * 0x10 + 0xb] =
                           *(short *)((long)__s_01 + uVar37 + 0x16) + local_880[lVar4 * 0x10 + 0xb];
                      uVar64 = local_880[lVar4 * 0x10 + 0xd];
                      uVar62 = local_880[lVar4 * 0x10 + 0xe];
                      local_880[lVar4 * 0x10 + 0xc] =
                           *(short *)((long)__s_01 + uVar37 + 0x18) + local_880[lVar4 * 0x10 + 0xc];
                      uVar60 = local_880[lVar4 * 0x10 + 0xf];
                      sVar15 = *(short *)((long)__s_01 + uVar37 + 0x1a);
                      auStack_900[lVar79 + lVar38] = (ushort)uVar55;
                      local_880[lVar4 * 0x10 + 0xd] = sVar15 + uVar64;
                      local_880[lVar4 * 0x10 + 0xe] =
                           *(short *)((long)__s_01 + uVar37 + 0x1c) + uVar62;
                      local_880[lVar4 * 0x10 + 0xf] =
                           *(short *)((long)__s_01 + uVar37 + 0x1e) + uVar60;
                    }
                    if ((int)uVar55 <= (int)uVar21) {
                      uVar21 = uVar54 + (iVar31 + iVar78) * uVar5;
                      uVar37 = -(ulong)((uVar21 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                               (ulong)(uVar21 * 0x10) << 1;
                      sVar23 = (short)uVar47 - (short)uVar5;
                      local_880[lVar4 * 0x10] =
                           local_880[lVar4 * 0x10] + sVar23 * *(short *)((long)__s_01 + uVar37);
                      local_880[lVar4 * 0x10 + 1] =
                           local_880[lVar4 * 0x10 + 1] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 2);
                      local_880[lVar4 * 0x10 + 2] =
                           local_880[lVar4 * 0x10 + 2] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 4);
                      local_880[lVar4 * 0x10 + 3] =
                           local_880[lVar4 * 0x10 + 3] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 6);
                      local_880[lVar4 * 0x10 + 4] =
                           local_880[lVar4 * 0x10 + 4] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 8);
                      local_880[lVar4 * 0x10 + 5] =
                           local_880[lVar4 * 0x10 + 5] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 10);
                      local_880[lVar4 * 0x10 + 6] =
                           local_880[lVar4 * 0x10 + 6] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0xc);
                      local_880[lVar4 * 0x10 + 7] =
                           local_880[lVar4 * 0x10 + 7] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0xe);
                      local_880[lVar4 * 0x10 + 8] =
                           local_880[lVar4 * 0x10 + 8] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0x10);
                      local_880[lVar4 * 0x10 + 9] =
                           local_880[lVar4 * 0x10 + 9] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0x12);
                      local_880[lVar4 * 0x10 + 10] =
                           local_880[lVar4 * 0x10 + 10] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0x14);
                      uVar64 = local_880[lVar4 * 0x10 + 0xc];
                      uVar62 = local_880[lVar4 * 0x10 + 0xd];
                      local_880[lVar4 * 0x10 + 0xb] =
                           local_880[lVar4 * 0x10 + 0xb] +
                           sVar23 * *(short *)((long)__s_01 + uVar37 + 0x16);
                      uVar60 = local_880[lVar4 * 0x10 + 0xe];
                      sVar15 = *(short *)((long)__s_01 + uVar37 + 0x18);
                      uVar58 = local_880[lVar4 * 0x10 + 0xf];
                      auStack_900[lVar79 + lVar38] = (ushort)uVar80 + sVar25;
                      local_880[lVar4 * 0x10 + 0xc] = uVar64 + sVar23 * sVar15;
                      local_880[lVar4 * 0x10 + 0xd] =
                           uVar62 + sVar23 * *(short *)((long)__s_01 + uVar37 + 0x1a);
                      local_880[lVar4 * 0x10 + 0xe] =
                           uVar60 + sVar23 * *(short *)((long)__s_01 + uVar37 + 0x1c);
                      local_880[lVar4 * 0x10 + 0xf] =
                           uVar58 + sVar23 * *(short *)((long)__s_01 + uVar37 + 0x1e);
                    }
                    uVar64 = *puVar69;
                    uVar62 = puVar69[1];
                    uVar60 = puVar69[2];
                    uVar58 = puVar69[3];
                    uVar56 = puVar69[4];
                    uVar51 = puVar69[5];
                    uVar46 = puVar69[6];
                    uVar71 = puVar69[7];
                    uVar44 = puVar69[8];
                    uVar30 = puVar69[9];
                    uVar41 = puVar69[10];
                    uVar70 = puVar69[0xb];
                    uVar68 = puVar69[0xc];
                    uVar67 = puVar69[0xd];
                    uVar66 = puVar69[0xe];
                    uVar65 = puVar69[0xf];
                  }
                  uVar21 = uVar80;
                  if ((int)uVar80 < 0) {
                    uVar21 = 0;
                  }
                  uVar37 = -(ulong)((uVar21 + iVar77 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                           (ulong)((uVar21 + iVar77) * 0x10) << 1;
                  *puVar69 = uVar64 - *(short *)((long)__s_00 + uVar37);
                  puVar69[1] = uVar62 - *(short *)((long)__s_00 + uVar37 + 2);
                  puVar69[2] = uVar60 - *(short *)((long)__s_00 + uVar37 + 4);
                  puVar69[3] = uVar58 - *(short *)((long)__s_00 + uVar37 + 6);
                  puVar69[4] = uVar56 - *(short *)((long)__s_00 + uVar37 + 8);
                  puVar69[5] = uVar51 - *(short *)((long)__s_00 + uVar37 + 10);
                  puVar69[6] = uVar46 - *(short *)((long)__s_00 + uVar37 + 0xc);
                  puVar69[7] = uVar71 - *(short *)((long)__s_00 + uVar37 + 0xe);
                  puVar69[8] = uVar44 - *(short *)((long)__s_00 + uVar37 + 0x10);
                  puVar69[9] = uVar30 - *(short *)((long)__s_00 + uVar37 + 0x12);
                  puVar69[10] = uVar41 - *(short *)((long)__s_00 + uVar37 + 0x14);
                  puVar69[0xb] = uVar70 - *(short *)((long)__s_00 + uVar37 + 0x16);
                  puVar69[0xc] = uVar68 - *(short *)((long)__s_00 + uVar37 + 0x18);
                  puVar69[0xd] = uVar67 - *(short *)((long)__s_00 + uVar37 + 0x1a);
                  puVar69[0xe] = uVar66 - *(short *)((long)__s_00 + uVar37 + 0x1c);
                  puVar69[0xf] = uVar65 - *(short *)((long)__s_00 + uVar37 + 0x1e);
                  cVar26 = (char)iVar31;
                  if (iVar17 < (int)(uVar32 + *puVar39)) {
                    *pcVar57 = cVar26 * '\x10';
                  }
                  else {
                    iVar31 = uVar32 + *puVar39 + (uint)puVar39[1];
                    if (iVar17 < iVar31) {
                      *pcVar57 = cVar26 * '\x10' + '\x01';
                    }
                    else {
                      iVar31 = iVar31 + (uint)puVar39[2];
                      if (iVar17 < iVar31) {
                        *pcVar57 = cVar26 * '\x10' + '\x02';
                      }
                      else {
                        iVar31 = iVar31 + (uint)puVar39[3];
                        if (iVar17 < iVar31) {
                          *pcVar57 = cVar26 * '\x10' + '\x03';
                        }
                        else {
                          iVar31 = iVar31 + (uint)puVar39[4];
                          if (iVar17 < iVar31) {
                            *pcVar57 = cVar26 * '\x10' + '\x04';
                          }
                          else {
                            iVar31 = iVar31 + (uint)puVar39[5];
                            if (iVar17 < iVar31) {
                              *pcVar57 = cVar26 * '\x10' + '\x05';
                            }
                            else {
                              iVar31 = iVar31 + (uint)puVar39[6];
                              if (iVar17 < iVar31) {
                                *pcVar57 = cVar26 * '\x10' + '\x06';
                              }
                              else {
                                iVar31 = iVar31 + (uint)puVar39[7];
                                if (iVar17 < iVar31) {
                                  *pcVar57 = cVar26 * '\x10' + '\a';
                                }
                                else {
                                  iVar31 = iVar31 + (uint)puVar39[8];
                                  if (iVar17 < iVar31) {
                                    cVar29 = '\b';
LAB_002052b8:
                                    *pcVar57 = cVar29 + cVar26 * '\x10';
                                  }
                                  else {
                                    iVar31 = iVar31 + (uint)puVar39[9];
                                    if (iVar17 < iVar31) {
                                      *pcVar57 = cVar26 * '\x10' + '\t';
                                    }
                                    else {
                                      iVar31 = iVar31 + (uint)puVar39[10];
                                      if (iVar17 < iVar31) {
                                        *pcVar57 = cVar26 * '\x10' + '\n';
                                      }
                                      else {
                                        iVar31 = iVar31 + (uint)puVar39[0xb];
                                        if (iVar31 <= iVar17) {
                                          iVar31 = iVar31 + (uint)puVar39[0xc];
                                          if (iVar17 < iVar31) {
                                            cVar29 = '\f';
                                          }
                                          else {
                                            iVar31 = iVar31 + (uint)puVar39[0xd];
                                            if (iVar17 < iVar31) {
                                              cVar29 = '\r';
                                            }
                                            else {
                                              iVar31 = iVar31 + (uint)puVar39[0xe];
                                              if (iVar17 < iVar31) {
                                                cVar29 = '\x0e';
                                              }
                                              else {
                                                cVar29 = '\x0f';
                                                if ((int)(iVar31 + (uint)puVar39[0xf]) <= iVar17)
                                                goto LAB_00205120;
                                              }
                                            }
                                          }
                                          goto LAB_002052b8;
                                        }
                                        *pcVar57 = cVar26 * '\x10' + '\v';
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
LAB_00205120:
                  uVar47 = uVar47 + 1;
                  uVar80 = uVar80 + 1;
                  pcVar57 = pcVar57 + lVar43;
                } while (uVar47 != uVar42);
              }
            }
            else {
              psVar40 = psVar82;
              if (0 < iVar72) {
                do {
                  uVar76 = *(undefined8 *)(puVar69 + 4);
                  uVar75 = *(undefined8 *)puVar69;
                  psVar1 = psVar40 + 0x10;
                  uVar74 = *(undefined8 *)(psVar40 + 4);
                  uVar73 = *(undefined8 *)psVar40;
                  *(ulong *)(puVar69 + 4) =
                       CONCAT26((short)((ulong)uVar74 >> 0x30) + (short)((ulong)uVar76 >> 0x30),
                                CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                         (short)((ulong)uVar76 >> 0x20),
                                         CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                  (short)((ulong)uVar76 >> 0x10),
                                                  (short)uVar74 + (short)uVar76)));
                  *(ulong *)puVar69 =
                       CONCAT26((short)((ulong)uVar73 >> 0x30) + (short)((ulong)uVar75 >> 0x30),
                                CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                         (short)((ulong)uVar75 >> 0x20),
                                         CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                  (short)((ulong)uVar75 >> 0x10),
                                                  (short)uVar73 + (short)uVar75)));
                  uVar74 = *(undefined8 *)(psVar40 + 0xc);
                  uVar73 = *(undefined8 *)(psVar40 + 8);
                  uVar76 = *(undefined8 *)(puVar69 + 0xc);
                  uVar75 = *(undefined8 *)(puVar69 + 8);
                  *(ulong *)(puVar69 + 0xc) =
                       CONCAT26((short)((ulong)uVar74 >> 0x30) + (short)((ulong)uVar76 >> 0x30),
                                CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                         (short)((ulong)uVar76 >> 0x20),
                                         CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                  (short)((ulong)uVar76 >> 0x10),
                                                  (short)uVar74 + (short)uVar76)));
                  *(ulong *)(puVar69 + 8) =
                       CONCAT26((short)((ulong)uVar73 >> 0x30) + (short)((ulong)uVar75 >> 0x30),
                                CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                         (short)((ulong)uVar75 >> 0x20),
                                         CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                  (short)((ulong)uVar75 >> 0x10),
                                                  (short)uVar73 + (short)uVar75)));
                  psVar40 = psVar1;
                } while (psVar1 != psVar81);
              }
              if ((int)uVar12 < iVar52) {
                uVar80 = 0;
                lVar79 = (long)iVar31 * 0x10;
                lVar10 = (long)iVar31 * 0x11;
                puVar53 = puVar69 + 8;
                pcVar57 = (char *)(lVar9 + lVar48 + local_9e0);
                uVar47 = uVar3;
                do {
                  uVar21 = uVar47 - 1;
                  uVar74 = *(undefined8 *)(puVar69 + 4);
                  uVar73 = *(undefined8 *)puVar69;
                  uVar32 = uVar54;
                  if ((int)uVar21 < (int)uVar54) {
                    uVar32 = uVar21;
                  }
                  psVar40 = __s_00 + (int)((uVar32 + iVar77) * 0x10);
                  uVar76 = *(undefined8 *)(psVar40 + 4);
                  uVar75 = *(undefined8 *)psVar40;
                  *(ulong *)(puVar69 + 4) =
                       CONCAT26((short)((ulong)uVar76 >> 0x30) + (short)((ulong)uVar74 >> 0x30),
                                CONCAT24((short)((ulong)uVar76 >> 0x20) +
                                         (short)((ulong)uVar74 >> 0x20),
                                         CONCAT22((short)((ulong)uVar76 >> 0x10) +
                                                  (short)((ulong)uVar74 >> 0x10),
                                                  (short)uVar76 + (short)uVar74)));
                  *(ulong *)puVar69 =
                       CONCAT26((short)((ulong)uVar75 >> 0x30) + (short)((ulong)uVar73 >> 0x30),
                                CONCAT24((short)((ulong)uVar75 >> 0x20) +
                                         (short)((ulong)uVar73 >> 0x20),
                                         CONCAT22((short)((ulong)uVar75 >> 0x10) +
                                                  (short)((ulong)uVar73 >> 0x10),
                                                  (short)uVar75 + (short)uVar73)));
                  uVar74 = *(undefined8 *)(psVar40 + 0xc);
                  uVar73 = *(undefined8 *)(psVar40 + 8);
                  uVar76 = *(undefined8 *)(puVar69 + 0xc);
                  uVar75 = *(undefined8 *)puVar53;
                  *(ulong *)(puVar69 + 0xc) =
                       CONCAT26((short)((ulong)uVar74 >> 0x30) + (short)((ulong)uVar76 >> 0x30),
                                CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                         (short)((ulong)uVar76 >> 0x20),
                                         CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                  (short)((ulong)uVar76 >> 0x10),
                                                  (short)uVar74 + (short)uVar76)));
                  *(ulong *)puVar53 =
                       CONCAT26((short)((ulong)uVar73 >> 0x30) + (short)((ulong)uVar75 >> 0x30),
                                CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                         (short)((ulong)uVar75 >> 0x20),
                                         CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                  (short)((ulong)uVar75 >> 0x10),
                                                  (short)uVar73 + (short)uVar75)));
                  if (iVar17 < (int)(uint)*puVar69) {
                    uVar32 = 0;
                    iVar31 = 0;
                  }
                  else {
                    uVar32 = (uint)*puVar69;
                    uVar63 = uVar32 + puVar69[1];
                    if (iVar17 < (int)uVar63) {
                      iVar31 = 1;
                    }
                    else {
                      iVar31 = 2;
                      uVar55 = uVar63 + puVar69[2];
                      uVar32 = uVar63;
                      if ((int)uVar55 <= iVar17) {
                        uVar32 = uVar55 + puVar69[3];
                        if (iVar17 < (int)uVar32) {
                          iVar31 = 3;
                          uVar32 = uVar55;
                        }
                        else {
                          iVar31 = 4;
                          uVar63 = uVar32 + puVar69[4];
                          if ((int)uVar63 <= iVar17) {
                            uVar32 = uVar63 + puVar69[5];
                            if (iVar17 < (int)uVar32) {
                              iVar31 = 5;
                              uVar32 = uVar63;
                            }
                            else {
                              iVar31 = 6;
                              uVar63 = uVar32 + puVar69[6];
                              if ((int)uVar63 <= iVar17) {
                                uVar32 = uVar63 + puVar69[7];
                                if (iVar17 < (int)uVar32) {
                                  iVar31 = 7;
                                  uVar32 = uVar63;
                                }
                                else {
                                  iVar31 = 8;
                                  uVar63 = uVar32 + puVar69[8];
                                  if ((int)uVar63 <= iVar17) {
                                    uVar32 = uVar63 + puVar69[9];
                                    if (iVar17 < (int)uVar32) {
                                      iVar31 = 9;
                                      uVar32 = uVar63;
                                    }
                                    else {
                                      iVar31 = 10;
                                      uVar63 = uVar32 + puVar69[10];
                                      if ((int)uVar63 <= iVar17) {
                                        uVar32 = uVar63 + puVar69[0xb];
                                        if (iVar17 < (int)uVar32) {
                                          iVar31 = 0xb;
                                          uVar32 = uVar63;
                                        }
                                        else {
                                          iVar31 = 0xc;
                                          uVar63 = uVar32 + puVar69[0xc];
                                          if ((int)uVar63 <= iVar17) {
                                            uVar32 = uVar63 + puVar69[0xd];
                                            if (iVar17 < (int)uVar32) {
                                              iVar31 = 0xd;
                                              uVar32 = uVar63;
                                            }
                                            else {
                                              iVar31 = 0xe;
                                              uVar63 = uVar32 + puVar69[0xe];
                                              if ((int)uVar63 <= iVar17) {
                                                iVar31 = 0x10;
                                                uVar32 = uVar63 + puVar69[0xf];
                                                if (iVar17 < (int)(uVar63 + puVar69[0xf])) {
                                                  iVar31 = 0xf;
                                                  uVar32 = uVar63;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  lVar38 = (long)iVar31;
                  uVar64 = auStack_900[lVar79 + lVar38];
                  if ((int)uVar80 < (int)(uint)uVar64) {
                    if ((int)(uint)uVar64 <= (int)uVar21) {
                      lVar4 = lVar38 + lVar10 + 1;
                      puVar11 = local_880 + lVar4 * 0x10;
                      puVar39 = local_880 + lVar4 * 0x10 + 8;
                      iVar49 = uVar5 * (iVar78 + iVar31);
                      uVar63 = (uint)uVar64;
                      do {
                        uVar55 = uVar63 + 1 & 0xffff;
                        if ((int)(iVar18 + uVar63) < 1) {
                          iVar33 = 0;
                        }
                        else {
                          iVar33 = iVar18 + uVar63 + -1;
                        }
                        uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 4);
                        uVar75 = *(undefined8 *)puVar11;
                        psVar40 = __s_01 + (iVar33 + iVar49) * 0x10;
                        uVar74 = *(undefined8 *)(psVar40 + 4);
                        uVar73 = *(undefined8 *)psVar40;
                        *(ulong *)(local_880 + lVar4 * 0x10 + 4) =
                             CONCAT26((short)((ulong)uVar74 >> 0x30) -
                                      (short)((ulong)uVar76 >> 0x30),
                                      CONCAT24((short)((ulong)uVar74 >> 0x20) -
                                               (short)((ulong)uVar76 >> 0x20),
                                               CONCAT22((short)((ulong)uVar74 >> 0x10) -
                                                        (short)((ulong)uVar76 >> 0x10),
                                                        (short)uVar74 - (short)uVar76)));
                        *(ulong *)puVar11 =
                             CONCAT26((short)((ulong)uVar73 >> 0x30) -
                                      (short)((ulong)uVar75 >> 0x30),
                                      CONCAT24((short)((ulong)uVar73 >> 0x20) -
                                               (short)((ulong)uVar75 >> 0x20),
                                               CONCAT22((short)((ulong)uVar73 >> 0x10) -
                                                        (short)((ulong)uVar75 >> 0x10),
                                                        (short)uVar73 - (short)uVar75)));
                        uVar74 = *(undefined8 *)(psVar40 + 0xc);
                        uVar73 = *(undefined8 *)(psVar40 + 8);
                        uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 0xc);
                        uVar75 = *(undefined8 *)puVar39;
                        *(ulong *)(local_880 + lVar4 * 0x10 + 0xc) =
                             CONCAT26((short)((ulong)uVar74 >> 0x30) -
                                      (short)((ulong)uVar76 >> 0x30),
                                      CONCAT24((short)((ulong)uVar74 >> 0x20) -
                                               (short)((ulong)uVar76 >> 0x20),
                                               CONCAT22((short)((ulong)uVar74 >> 0x10) -
                                                        (short)((ulong)uVar76 >> 0x10),
                                                        (short)uVar74 - (short)uVar76)));
                        *(ulong *)puVar39 =
                             CONCAT26((short)((ulong)uVar73 >> 0x30) -
                                      (short)((ulong)uVar75 >> 0x30),
                                      CONCAT24((short)((ulong)uVar73 >> 0x20) -
                                               (short)((ulong)uVar75 >> 0x20),
                                               CONCAT22((short)((ulong)uVar73 >> 0x10) -
                                                        (short)((ulong)uVar75 >> 0x10),
                                                        (short)uVar73 - (short)uVar75)));
                        uVar59 = uVar54;
                        if ((int)uVar63 < (int)uVar5) {
                          uVar59 = (uint)auStack_900[lVar79 + lVar38];
                        }
                        uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 4);
                        uVar75 = *(undefined8 *)puVar11;
                        psVar40 = __s_01 + (int)((uVar59 + iVar49) * 0x10);
                        uVar74 = *(undefined8 *)(psVar40 + 4);
                        uVar73 = *(undefined8 *)psVar40;
                        *(ulong *)(local_880 + lVar4 * 0x10 + 4) =
                             CONCAT26((short)((ulong)uVar74 >> 0x30) +
                                      (short)((ulong)uVar76 >> 0x30),
                                      CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                               (short)((ulong)uVar76 >> 0x20),
                                               CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                        (short)((ulong)uVar76 >> 0x10),
                                                        (short)uVar74 + (short)uVar76)));
                        *(ulong *)puVar11 =
                             CONCAT26((short)((ulong)uVar73 >> 0x30) +
                                      (short)((ulong)uVar75 >> 0x30),
                                      CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                               (short)((ulong)uVar75 >> 0x20),
                                               CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                        (short)((ulong)uVar75 >> 0x10),
                                                        (short)uVar73 + (short)uVar75)));
                        uVar74 = *(undefined8 *)(psVar40 + 0xc);
                        uVar73 = *(undefined8 *)(psVar40 + 8);
                        uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 0xc);
                        uVar75 = *(undefined8 *)puVar39;
                        *(ulong *)(local_880 + lVar4 * 0x10 + 0xc) =
                             CONCAT26((short)((ulong)uVar74 >> 0x30) +
                                      (short)((ulong)uVar76 >> 0x30),
                                      CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                               (short)((ulong)uVar76 >> 0x20),
                                               CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                        (short)((ulong)uVar76 >> 0x10),
                                                        (short)uVar74 + (short)uVar76)));
                        *(ulong *)puVar39 =
                             CONCAT26((short)((ulong)uVar73 >> 0x30) +
                                      (short)((ulong)uVar75 >> 0x30),
                                      CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                               (short)((ulong)uVar75 >> 0x20),
                                               CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                        (short)((ulong)uVar75 >> 0x10),
                                                        (short)uVar73 + (short)uVar75)));
                        auStack_900[lVar79 + lVar38] = (ushort)(uVar63 + 1);
                        uVar63 = uVar55;
                      } while ((int)uVar55 <= (int)uVar21);
                    }
                  }
                  else {
                    lVar4 = lVar38 + lVar10 + 1;
                    auStack_900[lVar79 + lVar38] = (ushort)uVar80;
                    puVar39 = local_880 + lVar4 * 0x10;
                    uVar63 = uVar5;
                    if ((int)uVar21 < (int)uVar5) {
                      uVar63 = uVar47;
                    }
                    puVar39[0] = 0;
                    puVar39[1] = 0;
                    puVar39[2] = 0;
                    puVar39[3] = 0;
                    puVar11 = local_880 + lVar4 * 0x10 + 4;
                    puVar11[0] = 0;
                    puVar11[1] = 0;
                    puVar11[2] = 0;
                    puVar11[3] = 0;
                    puVar11 = local_880 + lVar4 * 0x10 + 8;
                    puVar11[0] = 0;
                    puVar11[1] = 0;
                    puVar11[2] = 0;
                    puVar11[3] = 0;
                    puVar11 = local_880 + lVar4 * 0x10 + 0xc;
                    puVar11[0] = 0;
                    puVar11[1] = 0;
                    puVar11[2] = 0;
                    puVar11[3] = 0;
                    uVar55 = uVar80;
                    while (uVar55 = uVar55 & 0xffff, (int)uVar55 < (int)uVar63) {
                      uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 4);
                      uVar75 = *(undefined8 *)puVar39;
                      psVar40 = __s_01 + (int)((uVar55 + uVar5 * (iVar78 + iVar31)) * 0x10);
                      uVar74 = *(undefined8 *)(psVar40 + 4);
                      uVar73 = *(undefined8 *)psVar40;
                      uVar55 = uVar55 + 1;
                      *(ulong *)(local_880 + lVar4 * 0x10 + 4) =
                           CONCAT26((short)((ulong)uVar74 >> 0x30) + (short)((ulong)uVar76 >> 0x30),
                                    CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                             (short)((ulong)uVar76 >> 0x20),
                                             CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                      (short)((ulong)uVar76 >> 0x10),
                                                      (short)uVar74 + (short)uVar76)));
                      *(ulong *)puVar39 =
                           CONCAT26((short)((ulong)uVar73 >> 0x30) + (short)((ulong)uVar75 >> 0x30),
                                    CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                             (short)((ulong)uVar75 >> 0x20),
                                             CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                      (short)((ulong)uVar75 >> 0x10),
                                                      (short)uVar73 + (short)uVar75)));
                      uVar74 = *(undefined8 *)(psVar40 + 0xc);
                      uVar73 = *(undefined8 *)(psVar40 + 8);
                      uVar76 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 0xc);
                      uVar75 = *(undefined8 *)(local_880 + lVar4 * 0x10 + 8);
                      *(ulong *)(local_880 + lVar4 * 0x10 + 0xc) =
                           CONCAT26((short)((ulong)uVar74 >> 0x30) + (short)((ulong)uVar76 >> 0x30),
                                    CONCAT24((short)((ulong)uVar74 >> 0x20) +
                                             (short)((ulong)uVar76 >> 0x20),
                                             CONCAT22((short)((ulong)uVar74 >> 0x10) +
                                                      (short)((ulong)uVar76 >> 0x10),
                                                      (short)uVar74 + (short)uVar76)));
                      *(ulong *)(local_880 + lVar4 * 0x10 + 8) =
                           CONCAT26((short)((ulong)uVar73 >> 0x30) + (short)((ulong)uVar75 >> 0x30),
                                    CONCAT24((short)((ulong)uVar73 >> 0x20) +
                                             (short)((ulong)uVar75 >> 0x20),
                                             CONCAT22((short)((ulong)uVar73 >> 0x10) +
                                                      (short)((ulong)uVar75 >> 0x10),
                                                      (short)uVar73 + (short)uVar75)));
                      auStack_900[lVar79 + lVar38] = (ushort)uVar55;
                    }
                    if ((int)uVar55 <= (int)uVar21) {
                      sVar15 = (short)uVar47 - (short)uVar5;
                      uVar21 = uVar54 + (iVar78 + iVar31) * uVar5;
                      uVar37 = -(ulong)((uVar21 & 0xfffffff) >> 0x1b) & 0xfffffffe00000000 |
                               (ulong)(uVar21 * 0x10) << 1;
                      local_880[lVar4 * 0x10] =
                           local_880[lVar4 * 0x10] + sVar15 * *(short *)((long)__s_01 + uVar37);
                      local_880[lVar4 * 0x10 + 1] =
                           local_880[lVar4 * 0x10 + 1] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 2);
                      local_880[lVar4 * 0x10 + 2] =
                           local_880[lVar4 * 0x10 + 2] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 4);
                      local_880[lVar4 * 0x10 + 3] =
                           local_880[lVar4 * 0x10 + 3] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 6);
                      uVar64 = local_880[lVar4 * 0x10 + 10];
                      local_880[lVar4 * 0x10 + 4] =
                           local_880[lVar4 * 0x10 + 4] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 8);
                      local_880[lVar4 * 0x10 + 5] =
                           local_880[lVar4 * 0x10 + 5] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 10);
                      local_880[lVar4 * 0x10 + 6] =
                           local_880[lVar4 * 0x10 + 6] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0xc);
                      local_880[lVar4 * 0x10 + 7] =
                           local_880[lVar4 * 0x10 + 7] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0xe);
                      local_880[lVar4 * 0x10 + 8] =
                           local_880[lVar4 * 0x10 + 8] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0x10);
                      uVar62 = local_880[lVar4 * 0x10 + 0xb];
                      uVar60 = local_880[lVar4 * 0x10 + 0xd];
                      local_880[lVar4 * 0x10 + 9] =
                           local_880[lVar4 * 0x10 + 9] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0x12);
                      auStack_900[lVar79 + lVar38] = (ushort)uVar80 + sVar25;
                      local_880[lVar4 * 0x10 + 10] =
                           uVar64 + sVar15 * *(short *)((long)__s_01 + uVar37 + 0x14);
                      local_880[lVar4 * 0x10 + 0xb] =
                           uVar62 + sVar15 * *(short *)((long)__s_01 + uVar37 + 0x16);
                      local_880[lVar4 * 0x10 + 0xc] =
                           local_880[lVar4 * 0x10 + 0xc] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0x18);
                      local_880[lVar4 * 0x10 + 0xd] =
                           uVar60 + sVar15 * *(short *)((long)__s_01 + uVar37 + 0x1a);
                      local_880[lVar4 * 0x10 + 0xe] =
                           local_880[lVar4 * 0x10 + 0xe] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0x1c);
                      local_880[lVar4 * 0x10 + 0xf] =
                           local_880[lVar4 * 0x10 + 0xf] +
                           sVar15 * *(short *)((long)__s_01 + uVar37 + 0x1e);
                    }
                  }
                  uVar21 = uVar80;
                  if ((int)uVar80 < 0) {
                    uVar21 = 0;
                  }
                  uVar74 = *(undefined8 *)(puVar69 + 4);
                  uVar73 = *(undefined8 *)puVar69;
                  lVar38 = lVar38 + lVar10 + 1;
                  psVar40 = __s_00 + (int)((uVar21 + iVar77) * 0x10);
                  uVar76 = *(undefined8 *)(psVar40 + 4);
                  uVar75 = *(undefined8 *)psVar40;
                  *(ulong *)(puVar69 + 4) =
                       CONCAT26((short)((ulong)uVar76 >> 0x30) - (short)((ulong)uVar74 >> 0x30),
                                CONCAT24((short)((ulong)uVar76 >> 0x20) -
                                         (short)((ulong)uVar74 >> 0x20),
                                         CONCAT22((short)((ulong)uVar76 >> 0x10) -
                                                  (short)((ulong)uVar74 >> 0x10),
                                                  (short)uVar76 - (short)uVar74)));
                  *(ulong *)puVar69 =
                       CONCAT26((short)((ulong)uVar75 >> 0x30) - (short)((ulong)uVar73 >> 0x30),
                                CONCAT24((short)((ulong)uVar75 >> 0x20) -
                                         (short)((ulong)uVar73 >> 0x20),
                                         CONCAT22((short)((ulong)uVar75 >> 0x10) -
                                                  (short)((ulong)uVar73 >> 0x10),
                                                  (short)uVar75 - (short)uVar73)));
                  uVar74 = *(undefined8 *)(psVar40 + 0xc);
                  uVar73 = *(undefined8 *)(psVar40 + 8);
                  uVar76 = *(undefined8 *)(puVar69 + 0xc);
                  uVar75 = *(undefined8 *)puVar53;
                  *(ulong *)(puVar69 + 0xc) =
                       CONCAT26((short)((ulong)uVar74 >> 0x30) - (short)((ulong)uVar76 >> 0x30),
                                CONCAT24((short)((ulong)uVar74 >> 0x20) -
                                         (short)((ulong)uVar76 >> 0x20),
                                         CONCAT22((short)((ulong)uVar74 >> 0x10) -
                                                  (short)((ulong)uVar76 >> 0x10),
                                                  (short)uVar74 - (short)uVar76)));
                  *(ulong *)puVar53 =
                       CONCAT26((short)((ulong)uVar73 >> 0x30) - (short)((ulong)uVar75 >> 0x30),
                                CONCAT24((short)((ulong)uVar73 >> 0x20) -
                                         (short)((ulong)uVar75 >> 0x20),
                                         CONCAT22((short)((ulong)uVar73 >> 0x10) -
                                                  (short)((ulong)uVar75 >> 0x10),
                                                  (short)uVar73 - (short)uVar75)));
                  iVar49 = uVar32 + local_880[lVar38 * 0x10];
                  cVar26 = (char)iVar31;
                  if (iVar17 < iVar49) {
                    *pcVar57 = cVar26 * '\x10';
                  }
                  else {
                    iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 1];
                    if (iVar17 < iVar49) {
                      *pcVar57 = cVar26 * '\x10' + '\x01';
                    }
                    else {
                      iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 2];
                      if (iVar17 < iVar49) {
                        *pcVar57 = cVar26 * '\x10' + '\x02';
                      }
                      else {
                        iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 3];
                        if (iVar17 < iVar49) {
                          *pcVar57 = cVar26 * '\x10' + '\x03';
                        }
                        else {
                          iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 4];
                          if (iVar17 < iVar49) {
                            *pcVar57 = cVar26 * '\x10' + '\x04';
                          }
                          else {
                            iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 5];
                            if (iVar17 < iVar49) {
                              *pcVar57 = cVar26 * '\x10' + '\x05';
                            }
                            else {
                              iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 6];
                              if (iVar17 < iVar49) {
                                *pcVar57 = cVar26 * '\x10' + '\x06';
                              }
                              else {
                                iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 7];
                                if (iVar17 < iVar49) {
                                  *pcVar57 = cVar26 * '\x10' + '\a';
                                }
                                else {
                                  iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 8];
                                  if (iVar17 < iVar49) {
                                    *pcVar57 = cVar26 * '\x10' + '\b';
                                  }
                                  else {
                                    iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 9];
                                    if (iVar17 < iVar49) {
                                      *pcVar57 = cVar26 * '\x10' + '\t';
                                    }
                                    else {
                                      iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 10];
                                      if (iVar17 < iVar49) {
                                        *pcVar57 = cVar26 * '\x10' + '\n';
                                      }
                                      else {
                                        iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 0xb];
                                        if (iVar17 < iVar49) {
                                          cVar29 = '\v';
                                        }
                                        else {
                                          iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 0xc];
                                          if (iVar17 < iVar49) {
                                            *pcVar57 = cVar26 * '\x10' + '\f';
                                            goto LAB_00205c10;
                                          }
                                          iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 0xd];
                                          if (iVar17 < iVar49) {
                                            cVar29 = '\r';
                                          }
                                          else {
                                            iVar49 = iVar49 + (uint)local_880[lVar38 * 0x10 + 0xe];
                                            if (iVar17 < iVar49) {
                                              cVar29 = '\x0e';
                                            }
                                            else {
                                              cVar29 = '\x0f';
                                              if ((int)(iVar49 + (uint)local_880[lVar38 * 0x10 + 0xf
                                                                                ]) <= iVar17)
                                              goto LAB_00205c10;
                                            }
                                          }
                                        }
                                        *pcVar57 = cVar29 + cVar26 * '\x10';
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
LAB_00205c10:
                  uVar47 = uVar47 + 1;
                  uVar80 = uVar80 + 1;
                  pcVar57 = pcVar57 + lVar43;
                } while (uVar47 != uVar42);
              }
            }
            puVar69 = puVar69 + 0x110;
            lVar48 = lVar48 + 1;
            iVar77 = iVar77 + uVar5;
            iVar78 = iVar78 + 0x10;
            psVar82 = (short *)((long)psVar82 + uVar61);
            psVar81 = (short *)((long)psVar81 + uVar61);
            psVar83 = psVar83 + (int)(uVar5 * 0x100);
          } while ((int)lVar48 < (int)uVar2);
          local_9e0 = local_9e0 + lVar35;
          local_998 = local_998 + 1;
        } while (local_998 != uVar12 + uVar13);
      }
      uVar42 = param_2[3];
      local_9d0 = local_9d0 + uVar19;
      local_9c8 = local_9c8 + (int)(uVar19 * uVar2);
    } while (local_9d0 < (int)uVar42);
  }
  operator_delete(__s);
  if (local_9f0 != (void *)0x0) {
    operator_delete(local_9f0);
  }
  return;
}


==================================================================

### FUNC 00205fd0 (2704 bytes) name=FUN_00205fd0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00205fd0(long param_1,long *param_2,ulong *param_3,int param_4,int param_5,uint param_6)

{
  uint uVar1;
  uint uVar2;
  int *piVar3;
  long *plVar4;
  void *__dest;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  undefined1 auVar20 [16];
  char cVar21;
  uint uVar22;
  int iVar23;
  int iVar24;
  int *piVar25;
  ulong uVar26;
  long lVar27;
  undefined1 (*pauVar28) [16];
  long lVar29;
  char *pcVar30;
  int *piVar31;
  undefined8 *puVar32;
  long lVar33;
  undefined2 uVar34;
  long lVar35;
  ulong uVar36;
  int *piVar37;
  ulong *puVar38;
  long lVar39;
  ulong uVar40;
  int *piVar41;
  long lVar42;
  int *piVar43;
  int *piVar44;
  size_t sVar45;
  ulong uVar46;
  void *__src;
  size_t __n;
  float fVar47;
  int iVar48;
  int iVar56;
  int iVar57;
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  int iVar59;
  undefined1 auVar54 [16];
  undefined8 uVar58;
  undefined1 auVar55 [16];
  undefined1 uVar60;
  undefined1 uVar61;
  undefined1 uVar62;
  undefined1 uVar63;
  undefined1 uVar64;
  undefined1 uVar65;
  undefined1 auVar66 [16];
  undefined1 auVar67 [16];
  ulong in_d4;
  undefined8 uVar68;
  double dVar69;
  undefined1 uStack_78;
  undefined7 uStack_77;
  int *local_50;
  undefined8 local_10;
  undefined8 local_8;
  
  piVar43 = *(int **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar45 = (long)__src - (long)piVar43;
  uVar36 = (long)sVar45 >> 2;
  dVar69 = *(double *)(param_1 + 0x10);
  local_50 = piVar43;
  if ((uint)uVar36 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar23 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar23 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar30 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar21 = s_sumCount____ksize_1_0045d530[0x12];
        uVar68 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar58 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar30 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar30[0x12] = cVar21;
        *(undefined8 *)pcVar30 = uVar58;
        *(undefined8 *)(pcVar30 + 8) = uVar68;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::ColumnSum<int, short int>::operator()(const uchar**, uchar*, int, int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x1ba);
        cv::String::deallocate((String *)&local_10);
        iVar23 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar23 + -1;
      goto LAB_002062e8;
    }
    sVar45 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar46 = (ulong)(int)param_6;
    if (uVar36 < uVar46) {
      uVar40 = uVar46 - uVar36;
      if (uVar40 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 2) < uVar40) {
          if (0x3fffffffffffffff - uVar36 < uVar40) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar26 = uVar40;
          if (uVar40 < uVar36) {
            uVar26 = uVar36;
          }
          uVar26 = uVar26 + uVar36;
          if ((uVar26 < uVar36) || (0x3fffffffffffffff < uVar26)) {
            uVar26 = 0xfffffffffffffffc;
LAB_00206a10:
            local_50 = operator_new(uVar26);
            piVar43 = *(int **)(param_1 + 0x20);
            __n = (long)__src - (long)piVar43;
            uVar36 = (long)__n >> 2;
          }
          else {
            if (uVar26 != 0) {
              uVar26 = uVar26 * 4;
              goto LAB_00206a10;
            }
            uVar26 = 0;
            local_50 = (int *)0x0;
            __n = sVar45;
          }
          memset((void *)((long)local_50 + sVar45),0,uVar40 * 4);
          if (uVar36 != 0) {
            memmove(local_50,piVar43,__n);
          }
          sVar45 = *(long *)(param_1 + 0x28) - (long)__src;
          __dest = (void *)((long)local_50 + uVar40 * 4 + __n);
          if ((long)sVar45 >> 2 != 0) {
            memmove(__dest,__src,sVar45);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(int **)(param_1 + 0x20) = local_50;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar45;
          *(ulong *)(param_1 + 0x30) = (long)local_50 + uVar26;
        }
        else {
          memset(__src,0,uVar40 * 4);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar40 * 4);
        }
      }
    }
    else if (uVar46 < uVar36) {
      *(int **)(param_1 + 0x28) = piVar43 + uVar46;
    }
    sVar45 = uVar46 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(local_50,0,sVar45);
  iVar23 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar23 + -1) {
    uVar9 = param_6 - 4 >> 2;
    uVar7 = (uVar9 + 1) * 4;
    if ((int)(param_6 - 3) < 1) {
      uVar7 = 0;
    }
    uVar1 = uVar7 + 1;
    lVar39 = (long)(int)uVar7;
    uVar10 = param_6 - uVar7;
    in_d4 = (ulong)uVar1;
    uVar2 = uVar7 + 2;
    piVar43 = local_50 + lVar39;
    uVar5 = -((uint)((ulong)piVar43 >> 2) & 3) & 3;
    uVar36 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar6 = uVar10;
    if (uVar5 < uVar10) {
      uVar6 = uVar5;
    }
    uVar46 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    piVar41 = (int *)((long)local_50 + uVar36);
    uVar5 = ((uVar10 - uVar6) - 4 >> 2) + 1;
    piVar3 = (int *)((long)local_50 + uVar46);
    iVar8 = uVar5 * 4;
    do {
      piVar37 = (int *)*param_2;
      piVar25 = local_50;
      piVar31 = piVar37;
      if (0 < (int)(param_6 - 3)) {
        do {
          uVar68 = *(undefined8 *)(piVar25 + 2);
          uVar58 = *(undefined8 *)piVar25;
          iVar23 = *piVar31;
          iVar16 = piVar31[1];
          iVar13 = piVar31[3];
          piVar44 = piVar25 + 4;
          piVar25[2] = piVar31[2] + (int)uVar68;
          piVar25[3] = iVar13 + (int)((ulong)uVar68 >> 0x20);
          *piVar25 = iVar23 + (int)uVar58;
          piVar25[1] = iVar16 + (int)((ulong)uVar58 >> 0x20);
          piVar25 = piVar44;
          piVar31 = piVar31 + 4;
        } while (piVar44 != local_50 + ((ulong)uVar9 + 1) * 4);
      }
      if ((int)uVar7 < (int)param_6) {
        if ((piVar43 < piVar37 + lVar39 + 4 && piVar37 + lVar39 < local_50 + lVar39 + 4) ||
           (uVar10 < 8)) {
          lVar27 = 0;
          do {
            *(int *)((long)piVar43 + lVar27) =
                 *(int *)((long)piVar43 + lVar27) + *(int *)((long)(piVar37 + lVar39) + lVar27);
            lVar27 = lVar27 + 4;
          } while (lVar27 != ((ulong)((param_6 - 1) - uVar7) + 1) * 4);
        }
        else {
          if (uVar6 == 0) {
            uVar40 = (ulong)uVar7;
          }
          else {
            local_50[lVar39] = local_50[lVar39] + piVar37[lVar39];
            if (uVar6 == 1) {
              uVar40 = (ulong)uVar1;
            }
            else {
              *piVar41 = *piVar41 + *(int *)((long)piVar37 + uVar36);
              if (uVar6 == 3) {
                uVar40 = (ulong)(uVar7 + 3);
                *piVar3 = *piVar3 + *(int *)((long)piVar37 + uVar46);
              }
              else {
                uVar40 = (ulong)uVar2;
              }
            }
          }
          if (2 < (uVar10 - 1) - uVar6) {
            uVar22 = 0;
            piVar25 = local_50 + (ulong)uVar6 + lVar39;
            piVar31 = piVar37 + (ulong)uVar6 + lVar39;
            piVar44 = local_50 + lVar39 + (ulong)uVar6;
            do {
              uVar68 = *(undefined8 *)piVar31;
              uVar22 = uVar22 + 1;
              uVar58 = *(undefined8 *)piVar44;
              iVar23 = (int)((ulong)uVar58 >> 0x20) + (int)((ulong)uVar68 >> 0x20);
              iVar16 = (int)((ulong)*(undefined8 *)(piVar44 + 2) >> 0x20) +
                       (int)((ulong)*(undefined8 *)(piVar31 + 2) >> 0x20);
              *(ulong *)(piVar25 + 2) =
                   CONCAT17((char)((uint)iVar16 >> 0x18),
                            CONCAT16((char)((uint)iVar16 >> 0x10),
                                     CONCAT15((char)((uint)iVar16 >> 8),
                                              CONCAT14((char)iVar16,
                                                       (int)*(undefined8 *)(piVar44 + 2) +
                                                       (int)*(undefined8 *)(piVar31 + 2)))));
              *(ulong *)piVar25 =
                   CONCAT17((char)((uint)iVar23 >> 0x18),
                            CONCAT16((char)((uint)iVar23 >> 0x10),
                                     CONCAT15((char)((uint)iVar23 >> 8),
                                              CONCAT14((char)iVar23,(int)uVar58 + (int)uVar68))));
              piVar25 = piVar25 + 4;
              piVar31 = piVar31 + 4;
              piVar44 = piVar44 + 4;
            } while (uVar22 < uVar5);
            uVar40 = (ulong)(uint)((int)uVar40 + iVar8);
            if (iVar8 == uVar10 - uVar6) goto LAB_002062b8;
          }
          uVar26 = -(uVar40 >> 0x1f) & 0xfffffffc00000000 | uVar40 << 2;
          *(int *)((long)local_50 + uVar26) =
               *(int *)((long)local_50 + uVar26) + *(int *)((long)piVar37 + uVar26);
          if ((int)uVar40 + 1 < (int)param_6) {
            lVar27 = uVar26 + 4;
            *(int *)((long)local_50 + lVar27) =
                 *(int *)((long)local_50 + lVar27) + *(int *)((long)piVar37 + lVar27);
            if ((int)uVar40 + 2 < (int)param_6) {
              lVar27 = uVar26 + 8;
              *(int *)((long)local_50 + lVar27) =
                   *(int *)((long)local_50 + lVar27) + *(int *)((long)piVar37 + lVar27);
            }
          }
        }
      }
LAB_002062b8:
      param_2 = param_2 + 1;
      iVar16 = *(int *)(param_1 + 0x18) + 1;
      iVar23 = *(int *)(param_1 + 8);
      *(int *)(param_1 + 0x18) = iVar16;
    } while (iVar16 < iVar23 + -1);
  }
LAB_002062e8:
  if (param_5 != 0) {
    iVar16 = param_6 - 7;
    uVar7 = param_6 - 8 >> 3;
    iVar8 = (uVar7 + 1) * 8;
    plVar4 = param_2 + (ulong)(param_5 - 1) + 1;
    if (iVar16 < 1) {
      iVar8 = 0;
    }
    lVar39 = (long)iVar8;
    while( true ) {
      lVar35 = *param_2;
      lVar27 = param_2[1 - iVar23];
      if (dVar69 == 1.0) {
        if (0 < iVar16) {
          piVar43 = (int *)(lVar35 + 0x10);
          pauVar28 = (undefined1 (*) [16])(local_50 + 4);
          puVar32 = (undefined8 *)(lVar27 + 0x10);
          puVar38 = param_3;
          do {
            piVar37 = piVar43 + -4;
            auVar66 = *pauVar28;
            piVar41 = piVar43 + -2;
            uVar58 = *(undefined8 *)pauVar28[-1];
            iVar19 = *piVar43;
            piVar3 = piVar43 + 1;
            piVar25 = piVar43 + 2;
            piVar31 = piVar43 + 3;
            piVar43 = piVar43 + 8;
            iVar23 = (int)uVar58 + (int)*(undefined8 *)piVar37;
            iVar13 = (int)((ulong)uVar58 >> 0x20) + (int)((ulong)*(undefined8 *)piVar37 >> 0x20);
            iVar14 = (int)*(undefined8 *)((long)pauVar28[-1] + 8) + (int)*(undefined8 *)piVar41;
            iVar17 = (int)((ulong)*(undefined8 *)((long)pauVar28[-1] + 8) >> 0x20) +
                     (int)((ulong)*(undefined8 *)piVar41 >> 0x20);
            auVar49._0_4_ = iVar19 + auVar66._0_4_;
            auVar49._4_4_ = *piVar3 + auVar66._4_4_;
            auVar49._8_4_ = *piVar25 + auVar66._8_4_;
            auVar49._12_4_ = *piVar31 + auVar66._12_4_;
            auVar11[4] = (char)iVar13;
            auVar11._0_4_ = iVar23;
            auVar11[5] = (char)((uint)iVar13 >> 8);
            auVar11[6] = (char)((uint)iVar13 >> 0x10);
            auVar11[7] = (char)((uint)iVar13 >> 0x18);
            auVar11[8] = (char)iVar14;
            auVar11[9] = (char)((uint)iVar14 >> 8);
            auVar11[10] = (char)((uint)iVar14 >> 0x10);
            auVar11[0xb] = (char)((uint)iVar14 >> 0x18);
            auVar11[0xc] = (char)iVar17;
            auVar11[0xd] = (char)((uint)iVar17 >> 8);
            auVar11[0xe] = (char)((uint)iVar17 >> 0x10);
            auVar11[0xf] = (char)((uint)iVar17 >> 0x18);
            in_d4 = NEON_sqxtn(in_d4,auVar11,4);
            uVar36 = NEON_sqxtn(auVar66._0_8_,auVar49,4);
            puVar38[1] = uVar36;
            *puVar38 = in_d4;
            uVar58 = puVar32[-2];
            iVar13 = iVar13 - (int)((ulong)uVar58 >> 0x20);
            iVar17 = iVar17 - (int)((ulong)puVar32[-1] >> 0x20);
            *(ulong *)((long)pauVar28[-1] + 8) =
                 CONCAT17((char)((uint)iVar17 >> 0x18),
                          CONCAT16((char)((uint)iVar17 >> 0x10),
                                   CONCAT15((char)((uint)iVar17 >> 8),
                                            CONCAT14((char)iVar17,iVar14 - (int)puVar32[-1]))));
            *(ulong *)pauVar28[-1] =
                 CONCAT17((char)((uint)iVar13 >> 0x18),
                          CONCAT16((char)((uint)iVar13 >> 0x10),
                                   CONCAT15((char)((uint)iVar13 >> 8),
                                            CONCAT14((char)iVar13,iVar23 - (int)uVar58))));
            uVar68 = puVar32[1];
            uVar58 = *puVar32;
            puVar32 = puVar32 + 4;
            *(int *)((long)*pauVar28 + 8) = auVar49._8_4_ - (int)uVar68;
            *(int *)((long)*pauVar28 + 0xc) = auVar49._12_4_ - (int)((ulong)uVar68 >> 0x20);
            *(int *)*pauVar28 = auVar49._0_4_ - (int)uVar58;
            *(int *)((long)*pauVar28 + 4) = auVar49._4_4_ - (int)((ulong)uVar58 >> 0x20);
            pauVar28 = pauVar28 + 2;
            puVar38 = puVar38 + 2;
          } while (pauVar28 != (undefined1 (*) [16])(local_50 + (ulong)uVar7 * 8 + 0xc));
        }
        if (iVar8 < (int)param_6) {
          lVar33 = 0;
          do {
            iVar23 = local_50[lVar39 + lVar33] + *(int *)(lVar35 + lVar39 * 4 + lVar33 * 4);
            uVar34 = (undefined2)iVar23;
            if ((0xffff < iVar23 + 0x8000U) && (uVar34 = 0x7fff, iVar23 < 1)) {
              uVar34 = 0x8000;
            }
            iVar13 = *(int *)(lVar27 + lVar39 * 4 + lVar33 * 4);
            *(undefined2 *)((long)param_3 + lVar33 * 2 + lVar39 * 2) = uVar34;
            local_50[lVar39 + lVar33] = iVar23 - iVar13;
            lVar33 = lVar33 + 1;
          } while (lVar33 != (ulong)((param_6 - 1) - iVar8) + 1);
        }
      }
      else {
        fVar47 = (float)dVar69;
        if (iVar16 < 1) {
          iVar23 = 0;
        }
        else {
          puVar32 = (undefined8 *)(lVar35 + 0x10);
          iVar23 = 0;
          piVar43 = local_50 + 4;
          piVar41 = (int *)(lVar27 + 0x10);
          puVar38 = param_3;
          do {
            iVar13 = piVar43[-4] + (int)puVar32[-2];
            iVar14 = piVar43[-3] + (int)((ulong)puVar32[-2] >> 0x20);
            uVar60 = (undefined1)((uint)iVar14 >> 8);
            uVar61 = (undefined1)((uint)iVar14 >> 0x10);
            uVar62 = (undefined1)((uint)iVar14 >> 0x18);
            iVar17 = piVar43[-2] + (int)puVar32[-1];
            iVar19 = piVar43[-1] + (int)((ulong)puVar32[-1] >> 0x20);
            uVar63 = (undefined1)((uint)iVar19 >> 8);
            uVar64 = (undefined1)((uint)iVar19 >> 0x10);
            uVar65 = (undefined1)((uint)iVar19 >> 0x18);
            iVar48 = (int)*puVar32 + *piVar43;
            iVar56 = (int)((ulong)*puVar32 >> 0x20) + piVar43[1];
            iVar57 = (int)puVar32[1] + piVar43[2];
            iVar59 = (int)((ulong)puVar32[1] >> 0x20) + piVar43[3];
            auVar66[4] = (char)iVar14;
            auVar66._0_4_ = iVar13;
            auVar66[5] = uVar60;
            auVar66[6] = uVar61;
            auVar66[7] = uVar62;
            auVar66[8] = (char)iVar17;
            auVar66[9] = (char)((uint)iVar17 >> 8);
            auVar66[10] = (char)((uint)iVar17 >> 0x10);
            auVar66[0xb] = (char)((uint)iVar17 >> 0x18);
            auVar66[0xc] = (char)iVar19;
            auVar66[0xd] = uVar63;
            auVar66[0xe] = uVar64;
            auVar66[0xf] = uVar65;
            auVar66 = NEON_scvtf(auVar66,4);
            auVar67._0_8_ = CONCAT44(fVar47 * auVar66._4_4_,fVar47 * auVar66._0_4_);
            auVar67._8_4_ = fVar47 * auVar66._8_4_;
            auVar67._12_4_ = fVar47 * auVar66._12_4_;
            if ((DAT_00531ed0 & 1) == 0) {
              uStack_78 = SUB41(auVar67._8_4_,0);
              uStack_77 = auVar67._9_7_;
              iVar24 = __cxa_guard_acquire(&DAT_00531ed0);
              auVar67[8] = uStack_78;
              auVar67._9_7_ = uStack_77;
              if (iVar24 != 0) {
                auVar54._8_4_ = 0x80000000;
                auVar54._0_8_ = 0x8000000080000000;
                auVar54._12_4_ = 0x80000000;
                uRam0000000000531eb8 = auVar54._8_8_;
                _DAT_00531eb0 = 0x8000000080000000;
                __cxa_guard_release(&DAT_00531ed0);
              }
            }
            if (((DAT_00531ec8 & 1) == 0) &&
               (iVar24 = __cxa_guard_acquire(&DAT_00531ec8), iVar24 != 0)) {
              auVar50._8_4_ = 0x3f000000;
              auVar50._0_8_ = 0x3f0000003f000000;
              auVar50._12_4_ = 0x3f000000;
              uRam0000000000531ea8 = auVar50._8_8_;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
            auVar20._4_4_ = iVar56;
            auVar20._0_4_ = iVar48;
            auVar20._8_4_ = iVar57;
            auVar20._12_4_ = iVar59;
            auVar66 = NEON_scvtf(auVar20,4);
            auVar51._0_8_ = CONCAT44(fVar47 * auVar66._4_4_,fVar47 * auVar66._0_4_);
            auVar51._8_4_ = fVar47 * auVar66._8_4_;
            auVar51._12_4_ = fVar47 * auVar66._12_4_;
            iVar24 = (int)(auVar67._4_4_ +
                          (float)CONCAT13(auVar67[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                          (byte)(_DAT_00531ea0 >> 0x38),
                                          CONCAT12(auVar67[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30)
                                                   | (byte)(_DAT_00531ea0 >> 0x30),
                                                   CONCAT11(auVar67[5] &
                                                            (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                            (byte)(_DAT_00531ea0 >> 0x28),
                                                            auVar67[4] &
                                                            (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                            (byte)(_DAT_00531ea0 >> 0x20)))));
            iVar15 = (int)(auVar67._8_4_ +
                          (float)CONCAT13(auVar67[0xb] & (byte)((ulong)uRam0000000000531eb8 >> 0x18)
                                          | (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                          CONCAT12(auVar67[10] &
                                                   (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                   (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                   CONCAT11(auVar67[9] &
                                                            (byte)((ulong)uRam0000000000531eb8 >> 8)
                                                            | (byte)((ulong)uRam0000000000531ea8 >>
                                                                    8),
                                                            auVar67[8] & (byte)uRam0000000000531eb8
                                                            | (byte)uRam0000000000531ea8))));
            iVar18 = (int)(auVar67._12_4_ +
                          (float)CONCAT13(auVar67[0xf] & (byte)((ulong)uRam0000000000531eb8 >> 0x38)
                                          | (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                          CONCAT12(auVar67[0xe] &
                                                   (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                   (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                   CONCAT11(auVar67[0xd] &
                                                            (byte)((ulong)uRam0000000000531eb8 >>
                                                                  0x28) |
                                                            (byte)((ulong)uRam0000000000531ea8 >>
                                                                  0x28),
                                                            auVar67[0xc] &
                                                            (byte)((ulong)uRam0000000000531eb8 >>
                                                                  0x20) |
                                                            (byte)((ulong)uRam0000000000531ea8 >>
                                                                  0x20)))));
            uStack_78 = (undefined1)iVar15;
            auVar12[4] = (char)iVar24;
            auVar12._0_4_ =
                 (int)(auVar67._0_4_ +
                      (float)CONCAT13(auVar67[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                      (byte)(_DAT_00531ea0 >> 0x18),
                                      CONCAT12(auVar67[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                               (byte)(_DAT_00531ea0 >> 0x10),
                                               CONCAT11(auVar67[1] &
                                                        (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                        (byte)(_DAT_00531ea0 >> 8),
                                                        auVar67[0] & (byte)_DAT_00531eb0 |
                                                        (byte)_DAT_00531ea0))));
            auVar12[5] = (char)((uint)iVar24 >> 8);
            auVar12[6] = (char)((uint)iVar24 >> 0x10);
            auVar12[7] = (char)((uint)iVar24 >> 0x18);
            if ((DAT_00531ed0 & 1) == 0) {
              uVar58 = auVar51._8_8_;
              iVar24 = __cxa_guard_acquire(&DAT_00531ed0);
              auVar51._8_8_ = uVar58;
              if (iVar24 != 0) {
                auVar55._8_4_ = 0x80000000;
                auVar55._0_8_ = 0x8000000080000000;
                auVar55._12_4_ = 0x80000000;
                uRam0000000000531eb8 = auVar55._8_8_;
                _DAT_00531eb0 = 0x8000000080000000;
                __cxa_guard_release(&DAT_00531ed0);
              }
            }
            uVar58 = auVar67._0_8_;
            if ((DAT_00531ec8 & 1) == 0) {
              iVar24 = __cxa_guard_acquire(&DAT_00531ec8);
              uVar58 = auVar67._0_8_;
              if (iVar24 != 0) {
                auVar52._8_4_ = 0x3f000000;
                auVar52._0_8_ = 0x3f0000003f000000;
                auVar52._12_4_ = 0x3f000000;
                uRam0000000000531ea8 = auVar52._8_8_;
                _DAT_00531ea0 = 0x3f0000003f000000;
                __cxa_guard_release(&DAT_00531ec8);
                uVar58 = auVar67._0_8_;
              }
            }
            in_d4 = _DAT_00531ea0;
            iVar23 = iVar23 + 8;
            auVar12[8] = uStack_78;
            puVar32 = puVar32 + 4;
            auVar12[9] = (char)((uint)iVar15 >> 8);
            auVar12[10] = (char)((uint)iVar15 >> 0x10);
            auVar12[0xb] = (char)((uint)iVar15 >> 0x18);
            auVar12[0xc] = (char)iVar18;
            auVar12[0xd] = (char)((uint)iVar18 >> 8);
            auVar12[0xe] = (char)((uint)iVar18 >> 0x10);
            auVar12[0xf] = (char)((uint)iVar18 >> 0x18);
            uVar46 = NEON_sqxtn(uVar58,auVar12,4);
            auVar53._0_8_ =
                 CONCAT44((int)(auVar51._4_4_ +
                               (float)CONCAT13(auVar51[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                               (byte)(_DAT_00531ea0 >> 0x38),
                                               CONCAT12(auVar51[6] &
                                                        (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                        (byte)(_DAT_00531ea0 >> 0x30),
                                                        CONCAT11(auVar51[5] &
                                                                 (byte)((ulong)_DAT_00531eb0 >> 0x28
                                                                       ) | (byte)(_DAT_00531ea0 >>
                                                                                 0x28),
                                                                 auVar51[4] &
                                                                 (byte)((ulong)_DAT_00531eb0 >> 0x20
                                                                       ) | (byte)(_DAT_00531ea0 >>
                                                                                 0x20))))),
                          (int)(auVar51._0_4_ +
                               (float)CONCAT13(auVar51[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                               (byte)(_DAT_00531ea0 >> 0x18),
                                               CONCAT12(auVar51[2] &
                                                        (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                        (byte)(_DAT_00531ea0 >> 0x10),
                                                        CONCAT11(auVar51[1] &
                                                                 (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                                 (byte)(_DAT_00531ea0 >> 8),
                                                                 auVar51[0] & (byte)_DAT_00531eb0 |
                                                                 (byte)_DAT_00531ea0)))));
            auVar53._8_4_ =
                 (int)(auVar51._8_4_ +
                      (float)CONCAT13(auVar51[0xb] & (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                      (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                      CONCAT12(auVar51[10] &
                                               (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                               (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                               CONCAT11(auVar51[9] &
                                                        (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                        (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                        auVar51[8] & (byte)uRam0000000000531eb8 |
                                                        (byte)uRam0000000000531ea8))));
            auVar53._12_4_ =
                 (int)(auVar51._12_4_ +
                      (float)CONCAT13(auVar51[0xf] & (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                      (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                      CONCAT12(auVar51[0xe] &
                                               (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                               (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                               CONCAT11(auVar51[0xd] &
                                                        (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                        | (byte)((ulong)uRam0000000000531ea8 >> 0x28
                                                                ),
                                                        auVar51[0xc] &
                                                        (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                        | (byte)((ulong)uRam0000000000531ea8 >> 0x20
                                                                )))));
            uVar36 = NEON_sqxtn(auVar53._0_8_,auVar53,4);
            puVar38[1] = uVar36;
            *puVar38 = uVar46;
            iVar24 = piVar41[-4];
            iVar15 = piVar41[-3];
            iVar18 = piVar41[-1];
            piVar43[-2] = iVar17 - piVar41[-2];
            piVar43[-1] = (int)(CONCAT17(uVar65,CONCAT16(uVar64,CONCAT15(uVar63,CONCAT14((char)
                                                  iVar19,iVar17)))) >> 0x20) - iVar18;
            piVar43[-4] = iVar13 - iVar24;
            piVar43[-3] = (int)(CONCAT17(uVar62,CONCAT16(uVar61,CONCAT15(uVar60,CONCAT14((char)
                                                  iVar14,iVar13)))) >> 0x20) - iVar15;
            iVar13 = *piVar41;
            iVar14 = piVar41[1];
            piVar3 = piVar41 + 2;
            iVar17 = piVar41[3];
            piVar41 = piVar41 + 8;
            piVar43[2] = iVar57 - *piVar3;
            piVar43[3] = iVar59 - iVar17;
            *piVar43 = iVar48 - iVar13;
            piVar43[1] = iVar56 - iVar14;
            piVar43 = piVar43 + 8;
            puVar38 = puVar38 + 2;
          } while (iVar23 < iVar16);
        }
        if (iVar23 < (int)param_6) {
          lVar42 = (long)iVar23;
          lVar33 = 0;
          do {
            iVar13 = local_50[lVar42 + lVar33] + *(int *)(lVar35 + lVar42 * 4 + lVar33 * 4);
            lVar29 = lrint(dVar69 * (double)iVar13);
            uVar34 = (undefined2)lVar29;
            if ((0xffff < (int)lVar29 + 0x8000U) && (uVar34 = 0x7fff, (int)lVar29 < 1)) {
              uVar34 = 0x8000;
            }
            iVar14 = *(int *)(lVar27 + lVar42 * 4 + lVar33 * 4);
            *(undefined2 *)((long)param_3 + lVar33 * 2 + lVar42 * 2) = uVar34;
            local_50[lVar42 + lVar33] = iVar13 - iVar14;
            lVar33 = lVar33 + 1;
          } while (lVar33 != (ulong)((param_6 - 1) - iVar23) + 1);
        }
      }
      param_3 = (ulong *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 1;
      if (param_2 == plVar4) break;
      iVar23 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 00206a74 (3408 bytes) name=FUN_00206a74

void FUN_00206a74(long param_1,ulong *param_2,double *param_3,int param_4,int param_5,uint param_6)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  double *pdVar4;
  long lVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  ulong uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  char cVar14;
  long lVar15;
  double *pdVar16;
  char *pcVar17;
  void *__dest;
  double *pdVar18;
  ulong uVar19;
  uint uVar20;
  ulong *puVar21;
  long lVar22;
  double *pdVar23;
  uint uVar24;
  ulong uVar25;
  double *pdVar26;
  void *__src;
  long lVar27;
  size_t __n;
  double *pdVar28;
  int iVar29;
  long lVar30;
  double *pdVar31;
  int iVar32;
  double *pdVar33;
  double *pdVar34;
  double *pdVar35;
  double *__src_00;
  double *pdVar36;
  ulong uVar37;
  double *pdVar38;
  double *pdVar39;
  size_t sVar40;
  long lVar41;
  double dVar42;
  double dVar43;
  int iVar44;
  double dVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  int iVar49;
  int iVar50;
  undefined8 local_10;
  undefined8 local_8;
  
  __src_00 = *(double **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar40 = (long)__src - (long)__src_00;
  uVar25 = (long)sVar40 >> 3;
  dVar48 = *(double *)(param_1 + 0x10);
  if ((uint)uVar25 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar32 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar32 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar14 = s_sumCount____ksize_1_0045d530[0x12];
        uVar13 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar12 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar17 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar17[0x12] = cVar14;
        *(undefined8 *)pcVar17 = uVar12;
        *(undefined8 *)(pcVar17 + 8) = uVar13;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = double; T = double; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar32 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar32 + -1;
      goto LAB_00206d08;
    }
    sVar40 = -(ulong)(param_6 >> 0x1f) & 0xfffffff800000000 | (ulong)param_6 << 3;
  }
  else {
    uVar37 = (ulong)(int)param_6;
    if (uVar25 < uVar37) {
      uVar11 = uVar37 - uVar25;
      if (uVar11 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 3) < uVar11) {
          if (0x1fffffffffffffff - uVar25 < uVar11) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar19 = uVar11;
          if (uVar11 < uVar25) {
            uVar19 = uVar25;
          }
          uVar19 = uVar19 + uVar25;
          if ((uVar19 < uVar25) || (0x1fffffffffffffff < uVar19)) {
            uVar19 = 0xfffffffffffffff8;
LAB_00207774:
            pdVar18 = operator_new(uVar19);
            __src_00 = *(double **)(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar25 = (long)__n >> 3;
          }
          else {
            if (uVar19 != 0) {
              uVar19 = uVar19 * 8;
              goto LAB_00207774;
            }
            pdVar18 = (double *)0x0;
            uVar19 = 0;
            __n = sVar40;
          }
          memset((void *)((long)pdVar18 + sVar40),0,uVar11 * 8);
          if (uVar25 != 0) {
            memmove(pdVar18,__src_00,__n);
          }
          __dest = (void *)((long)pdVar18 + uVar11 * 8 + __n);
          sVar40 = *(long *)(param_1 + 0x28) - (long)__src;
          if ((long)sVar40 >> 3 != 0) {
            __dest = memmove(__dest,__src,sVar40);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(double **)(param_1 + 0x20) = pdVar18;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar40;
          *(ulong *)(param_1 + 0x30) = (long)pdVar18 + uVar19;
          __src_00 = pdVar18;
        }
        else {
          memset(__src,0,uVar11 * 8);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar11 * 8);
        }
      }
    }
    else if (uVar37 < uVar25) {
      *(double **)(param_1 + 0x28) = __src_00 + uVar37;
    }
    sVar40 = uVar37 << 3;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar40);
  iVar50 = *(int *)(param_1 + 0x18);
  iVar32 = *(int *)(param_1 + 8);
  if (iVar50 < iVar32 + -1) {
    iVar29 = iVar50 + 1;
    uVar8 = param_6 - 2 >> 1;
    iVar49 = param_6 - 1;
    uVar2 = uVar8 + 1;
    uVar7 = uVar2 * 2;
    if (iVar49 < 1) {
      uVar7 = 0;
    }
    uVar9 = param_6 - uVar7;
    lVar15 = (long)(int)uVar7;
    pdVar18 = __src_00 + lVar15;
    uVar3 = (uint)((ulong)pdVar18 >> 3) & 1;
    uVar6 = uVar9;
    if (uVar3 < uVar9) {
      uVar6 = uVar3;
    }
    iVar10 = uVar9 - uVar6;
    uVar3 = (iVar10 - 2U >> 1) + 1;
    iVar44 = uVar3 * 2;
    puVar21 = param_2;
    do {
      pdVar16 = (double *)*puVar21;
      if (0 < iVar49) {
        pdVar23 = __src_00;
        pdVar26 = pdVar16;
        if ((__src_00 < pdVar16 + 4 && pdVar16 < __src_00 + 4) || (uVar2 < 4)) {
          do {
            dVar42 = *pdVar26;
            pdVar28 = pdVar23 + 2;
            pdVar23[1] = pdVar23[1] + pdVar26[1];
            *pdVar23 = *pdVar23 + dVar42;
            pdVar23 = pdVar28;
            pdVar26 = pdVar26 + 2;
          } while (pdVar28 != __src_00 + ((ulong)uVar8 + 1) * 2);
        }
        else {
          uVar20 = 0;
          do {
            uVar20 = uVar20 + 1;
            dVar42 = *pdVar26;
            pdVar23[1] = pdVar23[1] + pdVar26[1];
            *pdVar23 = *pdVar23 + dVar42;
            pdVar23 = pdVar23 + 2;
            pdVar26 = pdVar26 + 2;
          } while (uVar20 < uVar2);
        }
      }
      if ((int)uVar7 < (int)param_6) {
        if ((pdVar18 < pdVar16 + lVar15 + 2 && pdVar16 + lVar15 < __src_00 + lVar15 + 2) ||
           (uVar9 < 8)) {
          lVar22 = 0;
          do {
            *(double *)((long)pdVar18 + lVar22) =
                 *(double *)((long)pdVar18 + lVar22) +
                 *(double *)((long)(pdVar16 + lVar15) + lVar22);
            lVar22 = lVar22 + 8;
          } while (lVar22 != ((ulong)(iVar49 - uVar7) + 1) * 8);
        }
        else {
          uVar20 = uVar7;
          if (uVar6 != 0) {
            __src_00[lVar15] = __src_00[lVar15] + pdVar16[lVar15];
            uVar20 = uVar7 + 1;
          }
          if (iVar10 != 1) {
            uVar24 = 0;
            pdVar23 = __src_00 + lVar15 + (ulong)uVar6;
            pdVar26 = __src_00 + (ulong)uVar6 + lVar15;
            pdVar28 = pdVar16 + (ulong)uVar6 + lVar15;
            do {
              dVar43 = *pdVar28;
              uVar24 = uVar24 + 1;
              dVar42 = *pdVar23;
              pdVar26[1] = pdVar23[1] + pdVar28[1];
              *pdVar26 = dVar42 + dVar43;
              pdVar23 = pdVar23 + 2;
              pdVar26 = pdVar26 + 2;
              pdVar28 = pdVar28 + 2;
            } while (uVar24 < uVar3);
            uVar20 = uVar20 + iVar44;
            if (iVar10 == iVar44) goto LAB_00206ce0;
          }
          uVar25 = -(ulong)(uVar20 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar20 << 3;
          *(double *)((long)__src_00 + uVar25) =
               *(double *)((long)__src_00 + uVar25) + *(double *)((long)pdVar16 + uVar25);
        }
      }
LAB_00206ce0:
      *(int *)(param_1 + 0x18) = iVar29;
      iVar29 = iVar29 + 1;
      puVar21 = puVar21 + 1;
    } while (iVar29 != iVar32);
    param_2 = param_2 + (ulong)(uint)((iVar32 + -2) - iVar50) + 1;
  }
LAB_00206d08:
  if (param_5 != 0) {
    iVar50 = param_6 - 1;
    uVar8 = param_6 - 2 >> 1;
    lVar15 = (long)param_4;
    pdVar18 = param_3 + 1;
    puVar21 = param_2 + 1;
    pdVar16 = param_3 + 4;
    pdVar23 = __src_00 + 4;
    uVar2 = uVar8 + 1;
    uVar7 = uVar2 * 2;
    if (iVar50 < 1) {
      uVar7 = 0;
    }
    uVar9 = param_6 - uVar7;
    lVar27 = (long)(int)uVar7;
    lVar22 = lVar27 + 2;
    lVar30 = ((ulong)(iVar50 - uVar7) + 1) * 8;
    pdVar26 = __src_00 + lVar27;
    uVar3 = (uint)((ulong)pdVar26 >> 3) & 1;
    pdVar28 = __src_00 + lVar27;
    pdVar4 = __src_00 + lVar22;
    uVar6 = uVar9;
    if (uVar3 < uVar9) {
      uVar6 = uVar3;
    }
    lVar1 = lVar22 * 8 + -0x10 + (ulong)uVar6 * 8;
    iVar29 = uVar9 - uVar6;
    uVar3 = (iVar29 - 2U >> 1) + 1;
    iVar49 = uVar3 * 2;
    do {
      pdVar34 = (double *)puVar21[-1];
      pdVar33 = (double *)puVar21[-(long)iVar32];
      if (dVar48 == 1.0) {
        if (0 < iVar50) {
          if (((((uVar2 < 9 || __src_00 < pdVar16 && param_3 < pdVar23) ||
                __src_00 < pdVar34 + 4 && pdVar34 < pdVar23) ||
               __src_00 < pdVar33 + 4 && pdVar33 < pdVar23) ||
               param_3 < pdVar34 + 4 && pdVar34 < pdVar16) ||
             (param_3 < pdVar33 + 4 && pdVar33 < pdVar16)) {
            pdVar31 = __src_00;
            pdVar35 = pdVar18;
            pdVar36 = pdVar33 + 1;
            pdVar38 = pdVar34 + 1;
            do {
              dVar45 = pdVar38[-1];
              dVar42 = *pdVar31;
              pdVar39 = pdVar38 + 2;
              dVar47 = *pdVar38;
              dVar43 = pdVar31[1];
              pdVar35[-1] = dVar42 + dVar45;
              *pdVar35 = dVar43 + dVar47;
              dVar46 = pdVar36[-1];
              pdVar31[1] = (dVar43 + dVar47) - *pdVar36;
              *pdVar31 = (dVar42 + dVar45) - dVar46;
              pdVar31 = pdVar31 + 2;
              pdVar35 = pdVar35 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar38 = pdVar39;
            } while (pdVar39 != pdVar34 + (ulong)uVar8 * 2 + 3);
          }
          else {
            uVar20 = 0;
            pdVar31 = param_3;
            pdVar35 = pdVar33;
            pdVar36 = pdVar34;
            pdVar38 = __src_00;
            do {
              dVar47 = pdVar36[1];
              dVar45 = *pdVar36;
              uVar20 = uVar20 + 1;
              dVar43 = pdVar38[1];
              dVar42 = *pdVar38;
              pdVar31[1] = dVar43 + dVar47;
              *pdVar31 = dVar42 + dVar45;
              dVar46 = *pdVar35;
              pdVar38[1] = (dVar43 + dVar47) - pdVar35[1];
              *pdVar38 = (dVar42 + dVar45) - dVar46;
              pdVar31 = pdVar31 + 2;
              pdVar35 = pdVar35 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar38 = pdVar38 + 2;
            } while (uVar20 < uVar2);
          }
        }
        if ((int)uVar7 < (int)param_6) {
          pdVar31 = param_3 + lVar22;
          pdVar35 = param_3 + lVar27;
          pdVar36 = pdVar34 + lVar27;
          pdVar38 = pdVar33 + lVar27;
          if (((((uVar9 < 7 || pdVar26 < pdVar31 && pdVar35 < pdVar4) ||
                pdVar26 < pdVar34 + lVar22 && pdVar36 < pdVar4) ||
               pdVar26 < pdVar33 + lVar22 && pdVar38 < pdVar4) ||
               pdVar35 < pdVar34 + lVar22 && pdVar36 < pdVar31) ||
             (pdVar35 < pdVar33 + lVar22 && pdVar38 < pdVar31)) {
            lVar41 = 0;
            do {
              dVar42 = *(double *)((long)pdVar26 + lVar41) + *(double *)((long)pdVar36 + lVar41);
              *(double *)((long)pdVar35 + lVar41) = dVar42;
              *(double *)((long)pdVar26 + lVar41) = dVar42 - *(double *)((long)pdVar38 + lVar41);
              lVar41 = lVar41 + 8;
            } while (lVar41 != lVar30);
          }
          else {
            uVar20 = uVar7;
            if (uVar6 != 0) {
              dVar43 = pdVar34[lVar27];
              dVar42 = *pdVar28;
              param_3[lVar27] = dVar42 + dVar43;
              *pdVar28 = (dVar42 + dVar43) - pdVar33[lVar27];
              uVar20 = uVar7 + 1;
              if (uVar9 == 1) goto LAB_002070e4;
            }
            if (iVar29 != 1) {
              lVar41 = 0;
              uVar24 = 0;
              do {
                lVar5 = lVar41 + lVar1;
                pdVar31 = (double *)((long)__src_00 + lVar41 + lVar1);
                uVar24 = uVar24 + 1;
                lVar41 = lVar41 + 0x10;
                dVar42 = *(double *)((long)pdVar34 + lVar5) + *pdVar31;
                dVar43 = ((double *)((long)pdVar34 + lVar5))[1] + pdVar31[1];
                ((double *)((long)param_3 + lVar5))[1] = dVar43;
                *(double *)((long)param_3 + lVar5) = dVar42;
                dVar45 = *(double *)((long)pdVar33 + lVar5);
                pdVar31[1] = dVar43 - ((double *)((long)pdVar33 + lVar5))[1];
                *pdVar31 = dVar42 - dVar45;
              } while (uVar24 < uVar3);
              uVar20 = uVar20 + iVar49;
              if (iVar49 == iVar29) goto LAB_002070e4;
            }
            uVar25 = -(ulong)(uVar20 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar20 << 3;
            dVar42 = *(double *)((long)__src_00 + uVar25) + *(double *)((long)pdVar34 + uVar25);
            *(double *)((long)param_3 + uVar25) = dVar42;
            *(double *)((long)__src_00 + uVar25) = dVar42 - *(double *)((long)pdVar33 + uVar25);
          }
        }
      }
      else {
        if (0 < iVar50) {
          if (((((uVar2 < 7 || __src_00 < pdVar16 && param_3 < pdVar23) ||
                __src_00 < pdVar34 + 4 && pdVar34 < pdVar23) ||
               __src_00 < pdVar33 + 4 && pdVar33 < pdVar23) ||
               param_3 < pdVar34 + 4 && pdVar34 < pdVar16) ||
             (param_3 < pdVar33 + 4 && pdVar33 < pdVar16)) {
            pdVar31 = __src_00;
            pdVar35 = pdVar18;
            pdVar36 = pdVar33 + 1;
            pdVar38 = pdVar34 + 1;
            do {
              dVar45 = pdVar38[-1];
              dVar42 = *pdVar31;
              pdVar39 = pdVar38 + 2;
              dVar47 = *pdVar38;
              dVar43 = pdVar31[1];
              pdVar35[-1] = dVar48 * (dVar42 + dVar45);
              *pdVar35 = dVar48 * (dVar43 + dVar47);
              dVar46 = pdVar36[-1];
              pdVar31[1] = (dVar43 + dVar47) - *pdVar36;
              *pdVar31 = (dVar42 + dVar45) - dVar46;
              pdVar31 = pdVar31 + 2;
              pdVar35 = pdVar35 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar38 = pdVar39;
            } while (pdVar39 != pdVar34 + (ulong)uVar8 * 2 + 3);
          }
          else {
            uVar20 = 0;
            pdVar31 = param_3;
            pdVar35 = pdVar33;
            pdVar36 = pdVar34;
            pdVar38 = __src_00;
            do {
              dVar47 = pdVar36[1];
              dVar45 = *pdVar36;
              uVar20 = uVar20 + 1;
              dVar43 = pdVar38[1];
              dVar42 = *pdVar38;
              pdVar31[1] = (dVar43 + dVar47) * dVar48;
              *pdVar31 = (dVar42 + dVar45) * dVar48;
              dVar46 = *pdVar35;
              pdVar38[1] = (dVar43 + dVar47) - pdVar35[1];
              *pdVar38 = (dVar42 + dVar45) - dVar46;
              pdVar31 = pdVar31 + 2;
              pdVar35 = pdVar35 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar38 = pdVar38 + 2;
            } while (uVar20 < uVar2);
          }
        }
        if ((int)uVar7 < (int)param_6) {
          pdVar31 = param_3 + lVar22;
          pdVar35 = param_3 + lVar27;
          pdVar36 = pdVar34 + lVar27;
          pdVar38 = pdVar33 + lVar27;
          if (((((uVar9 < 7 || pdVar26 < pdVar31 && pdVar35 < pdVar4) ||
                pdVar26 < pdVar34 + lVar22 && pdVar36 < pdVar4) ||
               pdVar26 < pdVar33 + lVar22 && pdVar38 < pdVar4) ||
               pdVar35 < pdVar34 + lVar22 && pdVar36 < pdVar31) ||
             (pdVar35 < pdVar33 + lVar22 && pdVar38 < pdVar31)) {
            lVar41 = 0;
            do {
              dVar42 = *(double *)((long)pdVar26 + lVar41) + *(double *)((long)pdVar36 + lVar41);
              *(double *)((long)pdVar35 + lVar41) = dVar48 * dVar42;
              *(double *)((long)pdVar26 + lVar41) = dVar42 - *(double *)((long)pdVar38 + lVar41);
              lVar41 = lVar41 + 8;
            } while (lVar41 != lVar30);
          }
          else {
            uVar20 = uVar7;
            if (uVar6 != 0) {
              dVar43 = pdVar34[lVar27];
              dVar42 = *pdVar28;
              param_3[lVar27] = dVar48 * (dVar42 + dVar43);
              *pdVar28 = (dVar42 + dVar43) - pdVar33[lVar27];
              uVar20 = uVar7 + 1;
              if (uVar9 == 1) goto LAB_002070e4;
            }
            if (iVar29 != 1) {
              lVar41 = 0;
              uVar24 = 0;
              do {
                lVar5 = lVar41 + lVar1;
                pdVar31 = (double *)((long)__src_00 + lVar41 + lVar1);
                uVar24 = uVar24 + 1;
                lVar41 = lVar41 + 0x10;
                dVar42 = *(double *)((long)pdVar34 + lVar5) + *pdVar31;
                dVar43 = ((double *)((long)pdVar34 + lVar5))[1] + pdVar31[1];
                ((double *)((long)param_3 + lVar5))[1] = dVar48 * dVar43;
                *(double *)((long)param_3 + lVar5) = dVar48 * dVar42;
                dVar45 = *(double *)((long)pdVar33 + lVar5);
                pdVar31[1] = dVar43 - ((double *)((long)pdVar33 + lVar5))[1];
                *pdVar31 = dVar42 - dVar45;
              } while (uVar24 < uVar3);
              uVar20 = uVar20 + iVar49;
              if (iVar49 == iVar29) goto LAB_002070e4;
            }
            uVar25 = -(ulong)(uVar20 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar20 << 3;
            dVar42 = *(double *)((long)__src_00 + uVar25) + *(double *)((long)pdVar34 + uVar25);
            *(double *)((long)param_3 + uVar25) = dVar48 * dVar42;
            *(double *)((long)__src_00 + uVar25) = dVar42 - *(double *)((long)pdVar33 + uVar25);
          }
        }
      }
LAB_002070e4:
      puVar21 = puVar21 + 1;
      param_3 = (double *)((long)param_3 + lVar15);
      pdVar16 = (double *)((long)pdVar16 + lVar15);
      pdVar18 = (double *)((long)pdVar18 + lVar15);
    } while (puVar21 != param_2 + (ulong)(param_5 - 1) + 2);
  }
  return;
}


==================================================================

### FUNC 002077d8 (3972 bytes) name=FUN_002077d8

void FUN_002077d8(long param_1,undefined8 *param_2,double *param_3,int param_4,int param_5,
                 uint param_6)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  char cVar17;
  undefined8 *puVar18;
  char *pcVar19;
  void *__dest;
  double *pdVar20;
  uint uVar21;
  long lVar22;
  long lVar23;
  double *pdVar24;
  double *pdVar25;
  uint uVar26;
  double *pdVar27;
  double *pdVar28;
  ulong uVar29;
  double *pdVar30;
  undefined8 *puVar31;
  void *__src;
  double *pdVar32;
  size_t __n;
  int iVar33;
  int iVar34;
  double *pdVar35;
  double *pdVar36;
  long lVar37;
  long lVar38;
  double *pdVar39;
  uint uVar40;
  long lVar41;
  double *pdVar42;
  double *pdVar43;
  double *__src_00;
  ulong uVar44;
  double *pdVar45;
  size_t sVar46;
  int iVar47;
  double dVar48;
  double dVar49;
  double dVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  double dVar55;
  double dVar56;
  ulong uVar57;
  int iVar58;
  long lVar59;
  long lVar60;
  int iVar61;
  undefined8 local_10;
  undefined8 local_8;
  
  __src_00 = *(double **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar46 = (long)__src - (long)__src_00;
  uVar29 = (long)sVar46 >> 3;
  dVar56 = *(double *)(param_1 + 0x10);
  if ((uint)uVar29 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar34 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar34 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar19 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar17 = s_sumCount____ksize_1_0045d530[0x12];
        uVar16 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar15 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar19 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar19[0x12] = cVar17;
        *(undefined8 *)pcVar19 = uVar15;
        *(undefined8 *)(pcVar19 + 8) = uVar16;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = double; T = float; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar34 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar34 + -1;
      goto LAB_00207a88;
    }
    sVar46 = -(ulong)(param_6 >> 0x1f) & 0xfffffff800000000 | (ulong)param_6 << 3;
  }
  else {
    uVar44 = (ulong)(int)param_6;
    if (uVar29 < uVar44) {
      uVar10 = uVar44 - uVar29;
      if (uVar10 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 3) < uVar10) {
          if (0x1fffffffffffffff - uVar29 < uVar10) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar57 = uVar10;
          if (uVar10 < uVar29) {
            uVar57 = uVar29;
          }
          uVar57 = uVar57 + uVar29;
          if ((uVar57 < uVar29) || (0x1fffffffffffffff < uVar57)) {
            uVar57 = 0xfffffffffffffff8;
LAB_0020870c:
            pdVar20 = operator_new(uVar57);
            __src_00 = *(double **)(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar29 = (long)__n >> 3;
          }
          else {
            if (uVar57 != 0) {
              uVar57 = NEON_shl(uVar57,3);
              goto LAB_0020870c;
            }
            pdVar20 = (double *)0x0;
            uVar57 = 0;
            __n = sVar46;
          }
          memset((void *)((long)pdVar20 + sVar46),0,uVar10 * 8);
          if (uVar29 != 0) {
            memmove(pdVar20,__src_00,__n);
          }
          __dest = (void *)((long)pdVar20 + uVar10 * 8 + __n);
          sVar46 = *(long *)(param_1 + 0x28) - (long)__src;
          if ((long)sVar46 >> 3 != 0) {
            __dest = memmove(__dest,__src,sVar46);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(double **)(param_1 + 0x20) = pdVar20;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar46;
          *(ulong *)(param_1 + 0x30) = (long)pdVar20 + uVar57;
          __src_00 = pdVar20;
        }
        else {
          memset(__src,0,uVar10 * 8);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar10 * 8);
        }
      }
    }
    else if (uVar44 < uVar29) {
      *(double **)(param_1 + 0x28) = __src_00 + uVar44;
    }
    sVar46 = uVar44 << 3;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar46);
  iVar58 = *(int *)(param_1 + 0x18);
  iVar34 = *(int *)(param_1 + 8);
  if (iVar58 < iVar34 + -1) {
    uVar6 = param_6 - 2 >> 1;
    iVar7 = param_6 - 1;
    iVar33 = iVar58 + 1;
    uVar2 = uVar6 + 1;
    uVar5 = uVar2 * 2;
    if (iVar7 < 1) {
      uVar5 = 0;
    }
    uVar9 = param_6 - uVar5;
    lVar22 = (long)(int)uVar5;
    pdVar20 = __src_00 + lVar22;
    uVar3 = (uint)((ulong)pdVar20 >> 3) & 1;
    uVar8 = uVar9;
    if (uVar3 < uVar9) {
      uVar8 = uVar3;
    }
    iVar61 = uVar9 - uVar8;
    uVar3 = (iVar61 - 2U >> 1) + 1;
    iVar47 = uVar3 * 2;
    puVar31 = param_2;
    do {
      pdVar32 = (double *)*puVar31;
      if (0 < iVar7) {
        pdVar25 = __src_00;
        pdVar28 = pdVar32;
        if ((__src_00 < pdVar32 + 4 && pdVar32 < __src_00 + 4) || (uVar2 < 4)) {
          do {
            dVar11 = *pdVar28;
            pdVar39 = pdVar25 + 2;
            pdVar25[1] = pdVar25[1] + pdVar28[1];
            *pdVar25 = *pdVar25 + dVar11;
            pdVar25 = pdVar39;
            pdVar28 = pdVar28 + 2;
          } while (pdVar39 != __src_00 + ((ulong)uVar6 + 1) * 2);
        }
        else {
          uVar21 = 0;
          do {
            uVar21 = uVar21 + 1;
            dVar11 = *pdVar28;
            pdVar25[1] = pdVar25[1] + pdVar28[1];
            *pdVar25 = *pdVar25 + dVar11;
            pdVar25 = pdVar25 + 2;
            pdVar28 = pdVar28 + 2;
          } while (uVar21 < uVar2);
        }
      }
      if ((int)uVar5 < (int)param_6) {
        if ((pdVar20 < pdVar32 + lVar22 + 2 && pdVar32 + lVar22 < __src_00 + lVar22 + 2) ||
           (uVar9 < 8)) {
          lVar23 = 0;
          do {
            *(double *)((long)pdVar20 + lVar23) =
                 *(double *)((long)pdVar20 + lVar23) +
                 *(double *)((long)(pdVar32 + lVar22) + lVar23);
            lVar23 = lVar23 + 8;
          } while (lVar23 != ((ulong)(iVar7 - uVar5) + 1) * 8);
        }
        else {
          uVar21 = uVar5;
          if (uVar8 != 0) {
            __src_00[lVar22] = __src_00[lVar22] + pdVar32[lVar22];
            uVar21 = uVar5 + 1;
          }
          if (iVar61 != 1) {
            uVar26 = 0;
            pdVar25 = __src_00 + lVar22 + (ulong)uVar8;
            pdVar28 = __src_00 + (ulong)uVar8 + lVar22;
            pdVar39 = pdVar32 + (ulong)uVar8 + lVar22;
            do {
              dVar12 = *pdVar39;
              uVar26 = uVar26 + 1;
              dVar11 = *pdVar25;
              pdVar28[1] = pdVar25[1] + pdVar39[1];
              *pdVar28 = dVar11 + dVar12;
              pdVar25 = pdVar25 + 2;
              pdVar28 = pdVar28 + 2;
              pdVar39 = pdVar39 + 2;
            } while (uVar26 < uVar3);
            uVar21 = uVar21 + iVar47;
            if (iVar61 == iVar47) goto LAB_00207a58;
          }
          uVar29 = -(ulong)(uVar21 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar21 << 3;
          *(double *)((long)__src_00 + uVar29) =
               *(double *)((long)__src_00 + uVar29) + *(double *)((long)pdVar32 + uVar29);
        }
      }
LAB_00207a58:
      *(int *)(param_1 + 0x18) = iVar33;
      iVar33 = iVar33 + 1;
      puVar31 = puVar31 + 1;
    } while (iVar33 != iVar34);
    param_2 = param_2 + (ulong)(uint)((iVar34 + -2) - iVar58) + 1;
  }
LAB_00207a88:
  if (param_5 != 0) {
    uVar8 = param_6 - 2;
    uVar6 = uVar8 >> 1;
    iVar7 = param_6 - 1;
    uVar2 = (uVar6 - 1 >> 1) + 1;
    iVar58 = uVar2 * 4;
    puVar31 = param_2 + 1;
    pdVar20 = __src_00 + 8;
    uVar5 = uVar6 + 1;
    iVar33 = uVar5 * 2;
    if (uVar8 < 2) {
      iVar58 = 0;
    }
    if (iVar7 < 1) {
      iVar33 = 0;
    }
    lVar37 = (long)iVar58;
    lVar38 = lVar37 * 4;
    pdVar32 = __src_00 + lVar37;
    lVar23 = (long)iVar33;
    uVar3 = param_6 - iVar33;
    lVar22 = lVar23 * 4;
    lVar59 = NEON_shl((ulong)uVar5,3);
    pdVar25 = __src_00 + lVar23;
    uVar21 = (uint)((ulong)pdVar25 >> 3) & 1;
    pdVar28 = __src_00 + lVar37 + 1;
    uVar9 = uVar3;
    if (uVar21 < uVar3) {
      uVar9 = uVar21;
    }
    lVar4 = (ulong)(uint)(iVar7 - iVar33) + 1;
    iVar58 = uVar3 - uVar9;
    lVar60 = NEON_shl(lVar23 + (ulong)uVar3,2);
    uVar26 = (uVar3 - 1) - uVar9;
    lVar1 = lVar22 + (ulong)uVar9 * 4;
    uVar21 = (iVar58 - 4U >> 2) + 1;
    iVar61 = uVar21 * 4;
    pdVar39 = __src_00 + lVar23 + 4;
    do {
      pdVar24 = (double *)puVar31[-1];
      pdVar27 = (double *)puVar31[-(long)iVar34];
      if (dVar56 == 1.0) {
        if (0 < iVar7) {
          if (((uVar5 < 4 ||
               __src_00 < (double *)((long)param_3 + lVar59) &&
               param_3 < __src_00 + (ulong)uVar5 * 2) || __src_00 < pdVar24 + 8 && pdVar24 < pdVar20
              ) || (__src_00 < pdVar27 + 8 && pdVar27 < pdVar20)) {
            pdVar30 = __src_00;
            pdVar36 = pdVar27 + 1;
            pdVar42 = param_3;
            pdVar35 = pdVar24 + 1;
            do {
              dVar14 = pdVar35[-1];
              pdVar45 = pdVar35 + 2;
              dVar13 = *pdVar35;
              dVar11 = *pdVar30;
              dVar12 = pdVar30[1];
              dVar54 = *pdVar36;
              dVar51 = pdVar36[-1];
              *(float *)pdVar42 = (float)(dVar11 + dVar14);
              *(float *)((long)pdVar42 + 4) = (float)(dVar12 + dVar13);
              *pdVar30 = (dVar11 + dVar14) - dVar51;
              pdVar30[1] = (dVar12 + dVar13) - dVar54;
              pdVar30 = pdVar30 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar42 = pdVar42 + 1;
              pdVar35 = pdVar45;
            } while (pdVar45 != pdVar24 + (ulong)uVar6 * 2 + 3);
          }
          else {
            if (1 < uVar8) {
              pdVar30 = __src_00 + 2;
              pdVar36 = pdVar24 + 2;
              uVar40 = 0;
              pdVar35 = pdVar27;
              pdVar43 = param_3;
              pdVar42 = pdVar24;
              pdVar45 = __src_00;
              do {
                dVar54 = pdVar45[1];
                dVar12 = *pdVar45;
                dVar51 = pdVar42[1];
                dVar11 = *pdVar42;
                uVar40 = uVar40 + 1;
                dVar48 = pdVar30[1];
                dVar13 = *pdVar30;
                dVar52 = pdVar36[1];
                dVar50 = *pdVar36;
                pdVar42 = pdVar42 + 4;
                dVar49 = pdVar35[3];
                dVar14 = pdVar35[2];
                pdVar36 = pdVar36 + 4;
                dVar55 = pdVar35[1];
                dVar53 = *pdVar35;
                pdVar35 = pdVar35 + 4;
                pdVar43[1] = (double)CONCAT44((float)(dVar48 + dVar52),(float)(dVar13 + dVar50));
                *pdVar43 = (double)CONCAT44((float)(dVar54 + dVar51),(float)(dVar12 + dVar11));
                pdVar45[1] = (dVar54 + dVar51) - dVar55;
                *pdVar45 = (dVar12 + dVar11) - dVar53;
                pdVar45 = pdVar45 + 4;
                pdVar30[1] = (dVar48 + dVar52) - dVar49;
                *pdVar30 = (dVar13 + dVar50) - dVar14;
                pdVar30 = pdVar30 + 4;
                pdVar43 = pdVar43 + 2;
              } while (uVar40 < uVar2);
              if (uVar5 == uVar2 * 2) goto LAB_00207d9c;
            }
            dVar14 = pdVar24[lVar37];
            dVar12 = *pdVar32;
            dVar13 = pdVar24[lVar37 + 1];
            dVar11 = *pdVar28;
            dVar54 = pdVar27[lVar37];
            dVar51 = pdVar27[lVar37 + 1];
            *(float *)((long)param_3 + lVar38) = (float)(dVar12 + dVar14);
            *(float *)((long)param_3 + lVar38 + 4) = (float)(dVar11 + dVar13);
            *pdVar32 = (dVar12 + dVar14) - dVar54;
            *pdVar28 = (dVar11 + dVar13) - dVar51;
          }
        }
LAB_00207d9c:
        if (iVar33 < (int)param_6) {
          pdVar30 = (double *)((long)param_3 + lVar22);
          if (((uVar3 < 7 ||
               pdVar30 < __src_00 + lVar23 + (ulong)uVar3 &&
               pdVar25 < (double *)((long)param_3 + lVar60)) ||
               pdVar25 < pdVar24 + lVar23 + 4 && pdVar24 + lVar23 < pdVar39) ||
             (pdVar25 < pdVar27 + lVar23 + 4 && pdVar27 + lVar23 < pdVar39)) {
            lVar41 = 0;
            do {
              dVar12 = (pdVar27 + lVar23)[lVar41];
              dVar11 = pdVar25[lVar41] + (pdVar24 + lVar23)[lVar41];
              *(float *)((long)pdVar30 + lVar41 * 4) = (float)dVar11;
              pdVar25[lVar41] = dVar11 - dVar12;
              lVar41 = lVar41 + 1;
            } while (lVar4 != lVar41);
          }
          else {
            iVar47 = iVar33;
            if (uVar9 != 0) {
              dVar13 = pdVar24[lVar23];
              dVar11 = *pdVar25;
              dVar12 = pdVar27[lVar23];
              *(float *)pdVar30 = (float)(dVar11 + dVar13);
              *pdVar25 = (dVar11 + dVar13) - dVar12;
              iVar47 = iVar33 + 1;
              if (uVar3 == 1) goto LAB_00207fac;
            }
            if (2 < uVar26) {
              uVar40 = 0;
              pdVar30 = pdVar27 + (ulong)uVar9 + lVar23;
              puVar18 = (undefined8 *)((long)param_3 + lVar1);
              pdVar36 = __src_00 + lVar23 + (ulong)uVar9;
              pdVar42 = __src_00 + (ulong)uVar9 + lVar23;
              pdVar35 = pdVar24 + (ulong)uVar9 + lVar23;
              do {
                dVar55 = pdVar30[1];
                dVar53 = *pdVar30;
                dVar49 = pdVar35[1];
                dVar14 = *pdVar35;
                dVar48 = pdVar36[1];
                dVar13 = *pdVar36;
                uVar40 = uVar40 + 1;
                dVar52 = pdVar30[3];
                dVar50 = pdVar30[2];
                pdVar30 = pdVar30 + 4;
                dVar54 = pdVar35[3];
                dVar12 = pdVar35[2];
                dVar51 = pdVar36[3];
                dVar11 = pdVar36[2];
                puVar18[1] = CONCAT44((float)(dVar54 + dVar51),(float)(dVar12 + dVar11));
                *puVar18 = CONCAT44((float)(dVar49 + dVar48),(float)(dVar14 + dVar13));
                pdVar42[1] = (dVar49 + dVar48) - dVar55;
                *pdVar42 = (dVar14 + dVar13) - dVar53;
                pdVar42[3] = (dVar54 + dVar51) - dVar52;
                pdVar42[2] = (dVar12 + dVar11) - dVar50;
                puVar18 = puVar18 + 2;
                pdVar36 = pdVar36 + 4;
                pdVar42 = pdVar42 + 4;
                pdVar35 = pdVar35 + 4;
              } while (uVar40 < uVar21);
              iVar47 = iVar47 + iVar61;
              if (iVar61 == iVar58) goto LAB_00207fac;
            }
            lVar41 = (long)iVar47;
            dVar13 = pdVar24[lVar41];
            dVar11 = __src_00[lVar41];
            dVar12 = pdVar27[lVar41];
            *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar11 + dVar13);
            __src_00[lVar41] = (dVar11 + dVar13) - dVar12;
            if (iVar47 + 1 < (int)param_6) {
              lVar41 = (long)(iVar47 + 1);
              dVar13 = pdVar24[lVar41];
              dVar11 = __src_00[lVar41];
              dVar12 = pdVar27[lVar41];
              *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar11 + dVar13);
              __src_00[lVar41] = (dVar11 + dVar13) - dVar12;
              if (iVar47 + 2 < (int)param_6) {
                lVar41 = (long)(iVar47 + 2);
                dVar12 = pdVar24[lVar41];
                dVar11 = __src_00[lVar41];
                dVar13 = pdVar27[lVar41];
                *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar11 + dVar12);
                __src_00[lVar41] = (dVar11 + dVar12) - dVar13;
              }
            }
          }
        }
      }
      else {
        if (0 < iVar7) {
          if (((uVar5 < 4 ||
               __src_00 < (double *)((long)param_3 + lVar59) &&
               param_3 < __src_00 + (ulong)uVar5 * 2) || __src_00 < pdVar24 + 8 && pdVar24 < pdVar20
              ) || (__src_00 < pdVar27 + 8 && pdVar27 < pdVar20)) {
            pdVar30 = __src_00;
            pdVar36 = pdVar27 + 1;
            pdVar42 = param_3;
            pdVar35 = pdVar24 + 1;
            do {
              dVar14 = pdVar35[-1];
              pdVar45 = pdVar35 + 2;
              dVar13 = *pdVar35;
              dVar12 = *pdVar30;
              dVar11 = pdVar30[1];
              dVar54 = *pdVar36;
              dVar51 = pdVar36[-1];
              *(float *)pdVar42 = (float)(dVar56 * (dVar12 + dVar14));
              *(float *)((long)pdVar42 + 4) = (float)(dVar56 * (dVar11 + dVar13));
              *pdVar30 = (dVar12 + dVar14) - dVar51;
              pdVar30[1] = (dVar11 + dVar13) - dVar54;
              pdVar30 = pdVar30 + 2;
              pdVar36 = pdVar36 + 2;
              pdVar42 = pdVar42 + 1;
              pdVar35 = pdVar45;
            } while (pdVar45 != pdVar24 + (ulong)uVar6 * 2 + 3);
          }
          else {
            if (1 < uVar8) {
              pdVar30 = __src_00 + 2;
              pdVar36 = pdVar24 + 2;
              uVar40 = 0;
              pdVar35 = pdVar27;
              pdVar43 = param_3;
              pdVar42 = pdVar24;
              pdVar45 = __src_00;
              do {
                dVar49 = pdVar45[1];
                dVar14 = *pdVar45;
                dVar48 = pdVar42[1];
                dVar13 = *pdVar42;
                uVar40 = uVar40 + 1;
                dVar54 = pdVar30[1];
                dVar12 = *pdVar30;
                dVar51 = pdVar36[1];
                dVar11 = *pdVar36;
                pdVar42 = pdVar42 + 4;
                dVar55 = pdVar35[1];
                dVar53 = *pdVar35;
                pdVar36 = pdVar36 + 4;
                dVar52 = pdVar35[3];
                dVar50 = pdVar35[2];
                pdVar35 = pdVar35 + 4;
                pdVar43[1] = (double)CONCAT44((float)((dVar54 + dVar51) * dVar56),
                                              (float)((dVar12 + dVar11) * dVar56));
                *pdVar43 = (double)CONCAT44((float)((dVar49 + dVar48) * dVar56),
                                            (float)((dVar14 + dVar13) * dVar56));
                pdVar45[1] = (dVar49 + dVar48) - dVar55;
                *pdVar45 = (dVar14 + dVar13) - dVar53;
                pdVar45 = pdVar45 + 4;
                pdVar30[1] = (dVar54 + dVar51) - dVar52;
                *pdVar30 = (dVar12 + dVar11) - dVar50;
                pdVar30 = pdVar30 + 4;
                pdVar43 = pdVar43 + 2;
              } while (uVar40 < uVar2);
              if (uVar5 == uVar2 * 2) goto LAB_0020814c;
            }
            dVar14 = pdVar24[lVar37];
            dVar12 = *pdVar32;
            dVar13 = pdVar24[lVar37 + 1];
            dVar11 = *pdVar28;
            dVar54 = pdVar27[lVar37];
            dVar51 = pdVar27[lVar37 + 1];
            *(float *)((long)param_3 + lVar38) = (float)(dVar56 * (dVar12 + dVar14));
            *(float *)((long)param_3 + lVar38 + 4) = (float)(dVar56 * (dVar11 + dVar13));
            *pdVar32 = (dVar12 + dVar14) - dVar54;
            *pdVar28 = (dVar11 + dVar13) - dVar51;
          }
        }
LAB_0020814c:
        if (iVar33 < (int)param_6) {
          pdVar30 = (double *)((long)param_3 + lVar22);
          if (((uVar3 < 7 ||
               pdVar30 < __src_00 + lVar23 + (ulong)uVar3 &&
               pdVar25 < (double *)((long)param_3 + lVar60)) ||
               pdVar25 < pdVar24 + lVar23 + 4 && pdVar24 + lVar23 < pdVar39) ||
             (pdVar25 < pdVar27 + lVar23 + 4 && pdVar27 + lVar23 < pdVar39)) {
            lVar41 = 0;
            do {
              dVar12 = (pdVar27 + lVar23)[lVar41];
              dVar11 = pdVar25[lVar41] + (pdVar24 + lVar23)[lVar41];
              *(float *)((long)pdVar30 + lVar41 * 4) = (float)(dVar56 * dVar11);
              pdVar25[lVar41] = dVar11 - dVar12;
              lVar41 = lVar41 + 1;
            } while (lVar41 != lVar4);
          }
          else {
            iVar47 = iVar33;
            if (uVar9 != 0) {
              dVar13 = pdVar24[lVar23];
              dVar11 = *pdVar25;
              dVar12 = pdVar27[lVar23];
              *(float *)pdVar30 = (float)(dVar56 * (dVar11 + dVar13));
              *pdVar25 = (dVar11 + dVar13) - dVar12;
              iVar47 = iVar33 + 1;
              if (uVar3 == 1) goto LAB_00207fac;
            }
            if (2 < uVar26) {
              uVar40 = 0;
              pdVar30 = pdVar27 + (ulong)uVar9 + lVar23;
              puVar18 = (undefined8 *)((long)param_3 + lVar1);
              pdVar36 = __src_00 + (ulong)uVar9 + lVar23;
              pdVar42 = __src_00 + lVar23 + (ulong)uVar9;
              pdVar35 = pdVar24 + (ulong)uVar9 + lVar23;
              do {
                dVar55 = pdVar30[1];
                dVar53 = *pdVar30;
                dVar49 = pdVar35[1];
                dVar14 = *pdVar35;
                dVar48 = pdVar42[1];
                dVar13 = *pdVar42;
                uVar40 = uVar40 + 1;
                dVar52 = pdVar30[3];
                dVar50 = pdVar30[2];
                pdVar30 = pdVar30 + 4;
                dVar54 = pdVar35[3];
                dVar12 = pdVar35[2];
                dVar51 = pdVar42[3];
                dVar11 = pdVar42[2];
                puVar18[1] = CONCAT44((float)(dVar56 * (dVar54 + dVar51)),
                                      (float)(dVar56 * (dVar12 + dVar11)));
                *puVar18 = CONCAT44((float)(dVar56 * (dVar49 + dVar48)),
                                    (float)(dVar56 * (dVar14 + dVar13)));
                pdVar36[1] = (dVar49 + dVar48) - dVar55;
                *pdVar36 = (dVar14 + dVar13) - dVar53;
                pdVar36[3] = (dVar54 + dVar51) - dVar52;
                pdVar36[2] = (dVar12 + dVar11) - dVar50;
                puVar18 = puVar18 + 2;
                pdVar36 = pdVar36 + 4;
                pdVar42 = pdVar42 + 4;
                pdVar35 = pdVar35 + 4;
              } while (uVar40 < uVar21);
              iVar47 = iVar47 + iVar61;
              if (iVar61 == iVar58) goto LAB_00207fac;
            }
            lVar41 = (long)iVar47;
            dVar13 = pdVar24[lVar41];
            dVar11 = __src_00[lVar41];
            dVar12 = pdVar27[lVar41];
            *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar56 * (dVar11 + dVar13));
            __src_00[lVar41] = (dVar11 + dVar13) - dVar12;
            if (iVar47 + 1 < (int)param_6) {
              lVar41 = (long)(iVar47 + 1);
              dVar13 = pdVar24[lVar41];
              dVar11 = __src_00[lVar41];
              dVar12 = pdVar27[lVar41];
              *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar56 * (dVar11 + dVar13));
              __src_00[lVar41] = (dVar11 + dVar13) - dVar12;
              if (iVar47 + 2 < (int)param_6) {
                lVar41 = (long)(iVar47 + 2);
                dVar12 = pdVar24[lVar41];
                dVar11 = __src_00[lVar41];
                dVar13 = pdVar27[lVar41];
                *(float *)((long)param_3 + lVar41 * 4) = (float)(dVar56 * (dVar11 + dVar12));
                __src_00[lVar41] = (dVar11 + dVar12) - dVar13;
              }
            }
          }
        }
      }
LAB_00207fac:
      puVar31 = puVar31 + 1;
      param_3 = (double *)((long)param_3 + (long)param_4);
    } while (puVar31 != param_2 + (ulong)(param_5 - 1) + 2);
  }
  return;
}


==================================================================

### FUNC 00208770 (3392 bytes) name=FUN_00208770

void FUN_00208770(long param_1,long *param_2,float *param_3,int param_4,int param_5,uint param_6)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  long *plVar7;
  float *pfVar8;
  float *pfVar9;
  long lVar10;
  long lVar11;
  int *piVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  uint uVar19;
  int *piVar20;
  int *piVar21;
  int *piVar22;
  int *piVar23;
  int *piVar24;
  int iVar25;
  char cVar26;
  uint uVar27;
  int iVar28;
  ulong uVar29;
  int *piVar30;
  long lVar31;
  char *pcVar32;
  void *__dest;
  undefined8 *puVar33;
  undefined8 *puVar34;
  undefined8 *puVar35;
  float *pfVar36;
  uint uVar37;
  ulong uVar38;
  undefined1 (*pauVar39) [16];
  void *__src;
  long lVar40;
  size_t __n;
  long lVar41;
  long lVar42;
  long lVar43;
  long lVar44;
  long lVar45;
  float *pfVar46;
  long lVar47;
  int *piVar48;
  long lVar49;
  ulong uVar50;
  long lVar51;
  undefined8 *__src_00;
  undefined8 *puVar52;
  ulong uVar53;
  int *piVar54;
  ulong uVar55;
  size_t sVar56;
  undefined8 uVar57;
  float fVar58;
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined1 auVar64 [16];
  int iVar65;
  double dVar66;
  undefined8 uVar67;
  undefined1 auVar68 [16];
  undefined1 auVar69 [16];
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  undefined1 auVar72 [16];
  undefined8 local_10;
  undefined8 local_8;
  
  __src_00 = *(undefined8 **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar56 = (long)__src - (long)__src_00;
  uVar38 = (long)sVar56 >> 2;
  dVar66 = *(double *)(param_1 + 0x10);
  if ((uint)uVar38 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar28 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar28 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar32 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar26 = s_sumCount____ksize_1_0045d530[0x12];
        uVar67 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar57 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar32 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar32[0x12] = cVar26;
        *(undefined8 *)pcVar32 = uVar57;
        *(undefined8 *)(pcVar32 + 8) = uVar67;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::ColumnSum<int, float>::operator()(const uchar**, uchar*, int, int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x3a2);
        cv::String::deallocate((String *)&local_10);
        iVar28 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar28 + -1;
      goto LAB_00208a64;
    }
    sVar56 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar55 = (ulong)(int)param_6;
    if (uVar38 < uVar55) {
      uVar53 = uVar55 - uVar38;
      if (uVar53 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 2) < uVar53) {
          if (0x3fffffffffffffff - uVar38 < uVar53) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar50 = uVar53;
          if (uVar53 < uVar38) {
            uVar50 = uVar38;
          }
          uVar50 = uVar50 + uVar38;
          if ((uVar50 < uVar38) || (0x3fffffffffffffff < uVar50)) {
            uVar50 = 0xfffffffffffffffc;
LAB_00209460:
            puVar33 = operator_new(uVar50);
            __src_00 = *(undefined8 **)(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar38 = (long)__n >> 2;
          }
          else {
            if (uVar50 != 0) {
              uVar50 = uVar50 * 4;
              goto LAB_00209460;
            }
            puVar33 = (undefined8 *)0x0;
            uVar50 = 0;
            __n = sVar56;
          }
          memset((void *)((long)puVar33 + sVar56),0,uVar53 * 4);
          if (uVar38 != 0) {
            memmove(puVar33,__src_00,__n);
          }
          __dest = (void *)((long)puVar33 + uVar53 * 4 + __n);
          sVar56 = *(long *)(param_1 + 0x28) - (long)__src;
          if ((long)sVar56 >> 2 != 0) {
            __dest = memmove(__dest,__src,sVar56);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(undefined8 **)(param_1 + 0x20) = puVar33;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar56;
          *(ulong *)(param_1 + 0x30) = (long)puVar33 + uVar50;
          __src_00 = puVar33;
        }
        else {
          memset(__src,0,uVar53 * 4);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar53 * 4);
        }
      }
    }
    else if (uVar55 < uVar38) {
      *(void **)(param_1 + 0x28) = (void *)((long)__src_00 + uVar55 * 4);
    }
    sVar56 = uVar55 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar56);
  iVar28 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar28 + -1) {
    uVar18 = param_6 - 4 >> 2;
    uVar16 = (uVar18 + 1) * 4;
    if ((int)(param_6 - 3) < 1) {
      uVar16 = 0;
    }
    uVar1 = uVar16 + 1;
    uVar19 = param_6 - uVar16;
    lVar49 = (long)(int)uVar16;
    uVar2 = uVar16 + 2;
    lVar43 = (lVar49 + 4) * 4;
    lVar45 = lVar43 + -0x10;
    uVar38 = (long)__src_00 + lVar45;
    uVar13 = -((uint)(uVar38 >> 2) & 3) & 3;
    uVar55 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar14 = uVar19;
    if (uVar13 < uVar19) {
      uVar14 = uVar13;
    }
    piVar4 = (int *)((long)__src_00 + lVar49 * 4);
    piVar5 = (int *)((long)__src_00 + uVar55);
    uVar53 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    piVar6 = (int *)((long)__src_00 + uVar53);
    lVar41 = lVar45 + (ulong)uVar14 * 4;
    uVar13 = ((uVar19 - uVar14) - 4 >> 2) + 1;
    iVar17 = uVar13 * 4;
    do {
      puVar35 = (undefined8 *)*param_2;
      puVar33 = __src_00;
      puVar34 = puVar35;
      if (0 < (int)(param_6 - 3)) {
        do {
          uVar57 = *puVar34;
          puVar52 = puVar33 + 2;
          puVar33[1] = CONCAT44((int)((ulong)puVar34[1] >> 0x20) + (int)((ulong)puVar33[1] >> 0x20),
                                (int)puVar34[1] + (int)puVar33[1]);
          *puVar33 = CONCAT44((int)((ulong)uVar57 >> 0x20) + (int)((ulong)*puVar33 >> 0x20),
                              (int)uVar57 + (int)*puVar33);
          puVar33 = puVar52;
          puVar34 = puVar34 + 2;
        } while (puVar52 != __src_00 + ((ulong)uVar18 + 1) * 2);
      }
      if ((int)uVar16 < (int)param_6) {
        if ((uVar38 < (ulong)((long)puVar35 + lVar43) &&
             (void *)((long)puVar35 + lVar45) < (void *)((long)__src_00 + lVar43)) || (uVar19 < 8))
        {
          lVar31 = 0;
          do {
            *(int *)(uVar38 + lVar31) =
                 *(int *)(uVar38 + lVar31) + *(int *)((long)puVar35 + lVar45 + lVar31);
            lVar31 = lVar31 + 4;
          } while (lVar31 != ((ulong)((param_6 - 1) - uVar16) + 1) * 4);
        }
        else {
          if (uVar14 == 0) {
            uVar50 = (ulong)uVar16;
          }
          else {
            *piVar4 = *piVar4 + *(int *)((long)puVar35 + lVar49 * 4);
            if (uVar14 == 1) {
              uVar50 = (ulong)uVar1;
            }
            else {
              *piVar5 = *piVar5 + *(int *)((long)puVar35 + uVar55);
              if (uVar14 == 3) {
                uVar50 = (ulong)(uVar16 + 3);
                *piVar6 = *piVar6 + *(int *)((long)puVar35 + uVar53);
              }
              else {
                uVar50 = (ulong)uVar2;
              }
            }
          }
          if (2 < (uVar19 - 1) - uVar14) {
            uVar27 = 0;
            puVar33 = (undefined8 *)((long)__src_00 + (lVar49 + (ulong)uVar14) * 4);
            puVar34 = (undefined8 *)((long)puVar35 + lVar41);
            puVar52 = (undefined8 *)((long)__src_00 + lVar41);
            do {
              uVar67 = *puVar34;
              uVar27 = uVar27 + 1;
              uVar57 = *puVar33;
              puVar52[1] = CONCAT44((int)((ulong)puVar33[1] >> 0x20) +
                                    (int)((ulong)puVar34[1] >> 0x20),
                                    (int)puVar33[1] + (int)puVar34[1]);
              *puVar52 = CONCAT44((int)((ulong)uVar57 >> 0x20) + (int)((ulong)uVar67 >> 0x20),
                                  (int)uVar57 + (int)uVar67);
              puVar33 = puVar33 + 2;
              puVar34 = puVar34 + 2;
              puVar52 = puVar52 + 2;
            } while (uVar27 < uVar13);
            uVar50 = (ulong)(uint)((int)uVar50 + iVar17);
            if (uVar19 - uVar14 == iVar17) goto LAB_00208a44;
          }
          uVar29 = -(uVar50 >> 0x1f) & 0xfffffffc00000000 | uVar50 << 2;
          *(int *)((long)__src_00 + uVar29) =
               *(int *)((long)__src_00 + uVar29) + *(int *)((long)puVar35 + uVar29);
          if ((int)uVar50 + 1 < (int)param_6) {
            lVar31 = uVar29 + 4;
            *(int *)((long)__src_00 + lVar31) =
                 *(int *)((long)__src_00 + lVar31) + *(int *)((long)puVar35 + lVar31);
            if ((int)uVar50 + 2 < (int)param_6) {
              lVar31 = uVar29 + 8;
              *(int *)((long)__src_00 + lVar31) =
                   *(int *)((long)__src_00 + lVar31) + *(int *)((long)puVar35 + lVar31);
            }
          }
        }
      }
LAB_00208a44:
      param_2 = param_2 + 1;
      iVar28 = *(int *)(param_1 + 8);
      iVar3 = *(int *)(param_1 + 0x18) + 1;
      *(int *)(param_1 + 0x18) = iVar3;
    } while (iVar3 < iVar28 + -1);
  }
LAB_00208a64:
  if (param_5 == 0) {
    return;
  }
  iVar17 = param_6 - 7;
  uVar18 = param_6 - 8 >> 3;
  uVar16 = (uVar18 + 1) * 8;
  if (iVar17 < 1) {
    uVar16 = 0;
  }
  plVar7 = param_2 + (ulong)(param_5 - 1) + 1;
  uVar19 = param_6 - uVar16;
  lVar41 = (long)(int)uVar16;
  uVar1 = uVar16 + 1;
  uVar2 = uVar16 + 2;
  lVar43 = lVar41 + 4;
  lVar45 = lVar43 * 4;
  lVar49 = lVar45 + -0x10;
  pfVar8 = (float *)((long)__src_00 + lVar49);
  uVar13 = -((uint)((ulong)pfVar8 >> 2) & 3) & 3;
  uVar38 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
  uVar14 = uVar19;
  if (uVar13 < uVar19) {
    uVar14 = uVar13;
  }
  lVar51 = lVar41 * 4;
  pfVar36 = param_3 + 4;
  lVar31 = lVar41 + (ulong)uVar14;
  uVar55 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
  piVar4 = (int *)((long)__src_00 + uVar55);
  lVar44 = ((ulong)((param_6 - 1) - uVar16) + 1) * 4;
  piVar5 = (int *)((long)__src_00 + lVar51);
  pfVar9 = (float *)((long)__src_00 + lVar45);
  piVar6 = (int *)((long)__src_00 + uVar38);
  iVar3 = uVar19 - uVar14;
  uVar27 = (uVar19 - 1) - uVar14;
  lVar10 = lVar49 + (ulong)uVar14 * 4;
  uVar13 = (iVar3 - 4U >> 2) + 1;
  lVar40 = *param_2;
  iVar65 = uVar13 * 4;
  lVar42 = param_2[1 - iVar28];
  do {
    if (dVar66 == 1.0) {
      if (0 < iVar17) {
        piVar30 = (int *)(__src_00 + 2);
        piVar48 = (int *)(lVar40 + 0x10);
        pauVar39 = (undefined1 (*) [16])(lVar42 + 0x10);
        pfVar46 = pfVar36;
        do {
          piVar54 = piVar48 + -4;
          iVar28 = *piVar48;
          piVar12 = piVar48 + 1;
          piVar20 = piVar48 + 2;
          piVar21 = piVar48 + 3;
          piVar22 = piVar48 + -3;
          piVar23 = piVar48 + -2;
          piVar24 = piVar48 + -1;
          piVar48 = piVar48 + 8;
          auVar59._0_4_ = piVar30[-4] + *piVar54;
          auVar59._4_4_ = piVar30[-3] + *piVar22;
          auVar59._8_4_ = piVar30[-2] + *piVar23;
          auVar59._12_4_ = piVar30[-1] + *piVar24;
          auVar62._0_4_ = iVar28 + *piVar30;
          auVar62._4_4_ = *piVar12 + piVar30[1];
          auVar62._8_4_ = *piVar20 + piVar30[2];
          auVar62._12_4_ = *piVar21 + piVar30[3];
          auVar72 = NEON_scvtf(auVar59,4);
          auVar68 = NEON_scvtf(auVar62,4);
          *(long *)(pfVar46 + -2) = auVar72._8_8_;
          *(long *)(pfVar46 + -4) = auVar72._0_8_;
          *(long *)(pfVar46 + 2) = auVar68._8_8_;
          *(long *)pfVar46 = auVar68._0_8_;
          pfVar46 = pfVar46 + 8;
          iVar28 = *(int *)pauVar39[-1];
          iVar15 = *(int *)(pauVar39[-1] + 4);
          iVar25 = *(int *)(pauVar39[-1] + 0xc);
          piVar30[-2] = auVar59._8_4_ - *(int *)(pauVar39[-1] + 8);
          piVar30[-1] = auVar59._12_4_ - iVar25;
          piVar30[-4] = auVar59._0_4_ - iVar28;
          piVar30[-3] = auVar59._4_4_ - iVar15;
          auVar68 = *pauVar39;
          pauVar39 = pauVar39 + 2;
          auVar63._0_8_ = CONCAT44(auVar62._4_4_ - auVar68._4_4_,auVar62._0_4_ - auVar68._0_4_);
          auVar63._8_4_ = auVar62._8_4_ - auVar68._8_4_;
          auVar63._12_4_ = auVar62._12_4_ - auVar68._12_4_;
          *(long *)(piVar30 + 2) = auVar63._8_8_;
          *(undefined8 *)piVar30 = auVar63._0_8_;
          piVar30 = piVar30 + 8;
        } while (piVar30 != (int *)(__src_00 + (ulong)uVar18 * 4 + 6));
      }
      if ((int)uVar16 < (int)param_6) {
        if (((uVar19 < 7 ||
             pfVar8 < (float *)(lVar40 + lVar45) && (float *)(lVar40 + lVar49) < pfVar9) ||
             pfVar8 < param_3 + lVar43 && param_3 + lVar41 < pfVar9) ||
           (pfVar8 < (float *)(lVar42 + lVar45) && (float *)(lVar42 + lVar49) < pfVar9)) {
          lVar47 = 0;
          do {
            iVar15 = *(int *)(lVar42 + lVar49 + lVar47);
            iVar28 = *(int *)((long)pfVar8 + lVar47) + *(int *)(lVar40 + lVar49 + lVar47);
            *(float *)((long)(param_3 + lVar41) + lVar47) = (float)iVar28;
            *(int *)((long)pfVar8 + lVar47) = iVar28 - iVar15;
            lVar47 = lVar47 + 4;
          } while (lVar47 != lVar44);
        }
        else {
          if (uVar14 == 0) {
            uVar53 = (ulong)uVar16;
          }
          else {
            iVar15 = *(int *)(lVar42 + lVar51);
            iVar28 = *piVar5 + *(int *)(lVar40 + lVar51);
            param_3[lVar41] = (float)iVar28;
            *piVar5 = iVar28 - iVar15;
            if (uVar14 == 1) {
              uVar53 = (ulong)uVar1;
            }
            else {
              iVar15 = *(int *)(lVar42 + uVar38);
              iVar28 = *piVar6 + *(int *)(lVar40 + uVar38);
              *(float *)((long)param_3 + uVar38) = (float)iVar28;
              *piVar6 = iVar28 - iVar15;
              if (uVar14 == 3) {
                iVar15 = *(int *)(lVar42 + uVar55);
                uVar53 = (ulong)(uVar16 + 3);
                iVar28 = *piVar4 + *(int *)(lVar40 + uVar55);
                *(float *)((long)param_3 + uVar55) = (float)iVar28;
                *piVar4 = iVar28 - iVar15;
              }
              else {
                uVar53 = (ulong)uVar2;
              }
            }
          }
          if (2 < uVar27) {
            lVar47 = 0;
            uVar37 = 0;
            do {
              uVar37 = uVar37 + 1;
              lVar11 = lVar47 + lVar10;
              piVar30 = (int *)(lVar40 + lVar11);
              piVar48 = (int *)((long)__src_00 + lVar47 + lVar31 * 4);
              piVar12 = (int *)(lVar42 + lVar11);
              auVar60._0_4_ = *piVar30 + *piVar48;
              auVar60._4_4_ = piVar30[1] + piVar48[1];
              auVar60._8_4_ = piVar30[2] + piVar48[2];
              auVar60._12_4_ = piVar30[3] + piVar48[3];
              puVar33 = (undefined8 *)((long)__src_00 + lVar47 + lVar10);
              lVar47 = lVar47 + 0x10;
              auVar68 = NEON_scvtf(auVar60,4);
              auVar61._0_8_ = CONCAT44(auVar60._4_4_ - piVar12[1],auVar60._0_4_ - *piVar12);
              auVar61._8_4_ = auVar60._8_4_ - piVar12[2];
              auVar61._12_4_ = auVar60._12_4_ - piVar12[3];
              ((undefined8 *)((long)param_3 + lVar11))[1] = auVar68._8_8_;
              *(undefined8 *)((long)param_3 + lVar11) = auVar68._0_8_;
              puVar33[1] = auVar61._8_8_;
              *puVar33 = auVar61._0_8_;
            } while (uVar37 < uVar13);
            uVar53 = (ulong)(uint)((int)uVar53 + iVar65);
            if (iVar65 == iVar3) goto joined_r0x00208e64;
          }
          uVar50 = -(uVar53 >> 0x1f) & 0xfffffffc00000000 | uVar53 << 2;
          iVar15 = *(int *)(lVar42 + uVar50);
          iVar28 = *(int *)((long)__src_00 + uVar50) + *(int *)(lVar40 + uVar50);
          *(float *)((long)param_3 + uVar50) = (float)iVar28;
          *(int *)((long)__src_00 + uVar50) = iVar28 - iVar15;
          if ((int)uVar53 + 1 < (int)param_6) {
            lVar47 = uVar50 + 4;
            iVar15 = *(int *)(lVar42 + lVar47);
            iVar28 = *(int *)((long)__src_00 + lVar47) + *(int *)(lVar40 + lVar47);
            *(float *)((long)param_3 + lVar47) = (float)iVar28;
            *(int *)((long)__src_00 + lVar47) = iVar28 - iVar15;
            if ((int)uVar53 + 2 < (int)param_6) {
              lVar47 = uVar50 + 8;
              iVar15 = *(int *)(lVar42 + lVar47);
              iVar28 = *(int *)((long)__src_00 + lVar47) + *(int *)(lVar40 + lVar47);
              *(float *)((long)param_3 + lVar47) = (float)iVar28;
              *(int *)((long)__src_00 + lVar47) = iVar28 - iVar15;
            }
          }
        }
      }
    }
    else {
      fVar58 = (float)dVar66;
      if (0 < iVar17) {
        piVar30 = (int *)(__src_00 + 2);
        piVar48 = (int *)(lVar40 + 0x10);
        pauVar39 = (undefined1 (*) [16])(lVar42 + 0x10);
        pfVar46 = pfVar36;
        do {
          piVar54 = piVar48 + -4;
          iVar28 = *piVar48;
          piVar12 = piVar48 + 1;
          piVar20 = piVar48 + 2;
          piVar21 = piVar48 + 3;
          piVar22 = piVar48 + -3;
          piVar23 = piVar48 + -2;
          piVar24 = piVar48 + -1;
          piVar48 = piVar48 + 8;
          auVar68._0_4_ = piVar30[-4] + *piVar54;
          auVar68._4_4_ = piVar30[-3] + *piVar22;
          auVar68._8_4_ = piVar30[-2] + *piVar23;
          auVar68._12_4_ = piVar30[-1] + *piVar24;
          auVar72._0_4_ = iVar28 + *piVar30;
          auVar72._4_4_ = *piVar12 + piVar30[1];
          auVar72._8_4_ = *piVar20 + piVar30[2];
          auVar72._12_4_ = *piVar21 + piVar30[3];
          auVar71 = NEON_scvtf(auVar68,4);
          auVar69 = NEON_scvtf(auVar72,4);
          pfVar46[-2] = fVar58 * auVar71._8_4_;
          pfVar46[-1] = fVar58 * auVar71._12_4_;
          pfVar46[-4] = fVar58 * auVar71._0_4_;
          pfVar46[-3] = fVar58 * auVar71._4_4_;
          pfVar46[2] = fVar58 * auVar69._8_4_;
          pfVar46[3] = fVar58 * auVar69._12_4_;
          *pfVar46 = fVar58 * auVar69._0_4_;
          pfVar46[1] = fVar58 * auVar69._4_4_;
          pfVar46 = pfVar46 + 8;
          iVar28 = *(int *)pauVar39[-1];
          iVar15 = *(int *)(pauVar39[-1] + 4);
          iVar25 = *(int *)(pauVar39[-1] + 0xc);
          piVar30[-2] = auVar68._8_4_ - *(int *)(pauVar39[-1] + 8);
          piVar30[-1] = auVar68._12_4_ - iVar25;
          piVar30[-4] = auVar68._0_4_ - iVar28;
          piVar30[-3] = auVar68._4_4_ - iVar15;
          auVar68 = *pauVar39;
          pauVar39 = pauVar39 + 2;
          auVar69._0_8_ = CONCAT44(auVar72._4_4_ - auVar68._4_4_,auVar72._0_4_ - auVar68._0_4_);
          auVar69._8_4_ = auVar72._8_4_ - auVar68._8_4_;
          auVar69._12_4_ = auVar72._12_4_ - auVar68._12_4_;
          *(long *)(piVar30 + 2) = auVar69._8_8_;
          *(undefined8 *)piVar30 = auVar69._0_8_;
          piVar30 = piVar30 + 8;
        } while (piVar30 != (int *)(__src_00 + (ulong)uVar18 * 4 + 6));
      }
      if ((int)uVar16 < (int)param_6) {
        if (((uVar19 < 6 ||
             pfVar8 < (float *)(lVar40 + lVar45) && (float *)(lVar40 + lVar49) < pfVar9) ||
             pfVar8 < param_3 + lVar43 && param_3 + lVar41 < pfVar9) ||
           (pfVar8 < (float *)(lVar42 + lVar45) && (float *)(lVar42 + lVar49) < pfVar9)) {
          lVar47 = 0;
          do {
            iVar15 = *(int *)(lVar42 + lVar49 + lVar47);
            iVar28 = *(int *)((long)pfVar8 + lVar47) + *(int *)(lVar40 + lVar49 + lVar47);
            *(float *)((long)(param_3 + lVar41) + lVar47) = (float)(dVar66 * (double)iVar28);
            *(int *)((long)pfVar8 + lVar47) = iVar28 - iVar15;
            lVar47 = lVar47 + 4;
          } while (lVar47 != lVar44);
        }
        else {
          if (uVar14 == 0) {
            uVar53 = (ulong)uVar16;
          }
          else {
            iVar15 = *(int *)(lVar42 + lVar51);
            iVar28 = *piVar5 + *(int *)(lVar40 + lVar51);
            param_3[lVar41] = (float)(dVar66 * (double)iVar28);
            *piVar5 = iVar28 - iVar15;
            if (uVar14 == 1) {
              uVar53 = (ulong)uVar1;
            }
            else {
              iVar15 = *(int *)(lVar42 + uVar38);
              iVar28 = *piVar6 + *(int *)(lVar40 + uVar38);
              *(float *)((long)param_3 + uVar38) = (float)(dVar66 * (double)iVar28);
              *piVar6 = iVar28 - iVar15;
              if (uVar14 == 3) {
                uVar53 = (ulong)(uVar16 + 3);
                iVar15 = *(int *)(lVar42 + uVar55);
                iVar28 = *piVar4 + *(int *)(lVar40 + uVar55);
                *(float *)((long)param_3 + uVar55) = (float)(dVar66 * (double)iVar28);
                *piVar4 = iVar28 - iVar15;
              }
              else {
                uVar53 = (ulong)uVar2;
              }
            }
          }
          if (2 < uVar27) {
            lVar47 = 0;
            uVar37 = 0;
            do {
              uVar37 = uVar37 + 1;
              lVar11 = lVar47 + lVar10;
              piVar30 = (int *)((long)__src_00 + lVar47 + lVar31 * 4);
              piVar48 = (int *)(lVar40 + lVar11);
              uVar67 = ((undefined8 *)(lVar42 + lVar11))[1];
              uVar57 = *(undefined8 *)(lVar42 + lVar11);
              puVar33 = (undefined8 *)((long)__src_00 + lVar47 + lVar10);
              lVar47 = lVar47 + 0x10;
              auVar71._0_8_ = (long)(*piVar48 + *piVar30);
              auVar71._8_8_ = (long)(piVar48[1] + piVar30[1]);
              auVar70._0_8_ = (long)(piVar48[2] + piVar30[2]);
              auVar70._8_8_ = (long)(piVar48[3] + piVar30[3]);
              auVar64._0_8_ =
                   CONCAT44((piVar48[1] + piVar30[1]) - (int)((ulong)uVar57 >> 0x20),
                            (*piVar48 + *piVar30) - (int)uVar57);
              auVar64._8_4_ = (piVar48[2] + piVar30[2]) - (int)uVar67;
              auVar64._12_4_ = (piVar48[3] + piVar30[3]) - (int)((ulong)uVar67 >> 0x20);
              auVar68 = NEON_scvtf(auVar71,8);
              auVar72 = NEON_scvtf(auVar70,8);
              ((undefined8 *)((long)param_3 + lVar11))[1] =
                   CONCAT44((float)(dVar66 * auVar72._8_8_),(float)(dVar66 * auVar72._0_8_));
              *(undefined8 *)((long)param_3 + lVar11) =
                   CONCAT44((float)(dVar66 * auVar68._8_8_),(float)(dVar66 * auVar68._0_8_));
              puVar33[1] = auVar64._8_8_;
              *puVar33 = auVar64._0_8_;
            } while (uVar37 < uVar13);
            uVar53 = (ulong)(uint)((int)uVar53 + iVar65);
            if (iVar65 == iVar3) goto joined_r0x00208e64;
          }
          uVar50 = -(uVar53 >> 0x1f) & 0xfffffffc00000000 | uVar53 << 2;
          iVar15 = *(int *)(lVar42 + uVar50);
          iVar28 = *(int *)((long)__src_00 + uVar50) + *(int *)(lVar40 + uVar50);
          *(float *)((long)param_3 + uVar50) = (float)(dVar66 * (double)iVar28);
          *(int *)((long)__src_00 + uVar50) = iVar28 - iVar15;
          if ((int)uVar53 + 1 < (int)param_6) {
            lVar47 = uVar50 + 4;
            iVar15 = *(int *)(lVar42 + lVar47);
            iVar28 = *(int *)((long)__src_00 + lVar47) + *(int *)(lVar40 + lVar47);
            *(float *)((long)param_3 + lVar47) = (float)(dVar66 * (double)iVar28);
            *(int *)((long)__src_00 + lVar47) = iVar28 - iVar15;
            if ((int)uVar53 + 2 < (int)param_6) {
              lVar47 = uVar50 + 8;
              iVar15 = *(int *)(lVar42 + lVar47);
              iVar28 = *(int *)((long)__src_00 + lVar47) + *(int *)(lVar40 + lVar47);
              *(float *)((long)param_3 + lVar47) = (float)(dVar66 * (double)iVar28);
              *(int *)((long)__src_00 + lVar47) = iVar28 - iVar15;
            }
          }
        }
      }
    }
joined_r0x00208e64:
    param_2 = param_2 + 1;
    if (param_2 == plVar7) {
      s_sumCount____ksize_1_0045d530[0] = (char)s_sumCount____ksize_1_0045d530._0_8_;
      s_sumCount____ksize_1_0045d530[1] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,1);
      s_sumCount____ksize_1_0045d530[2] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,2);
      s_sumCount____ksize_1_0045d530[3] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,3);
      s_sumCount____ksize_1_0045d530[4] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,4);
      s_sumCount____ksize_1_0045d530[5] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,5);
      s_sumCount____ksize_1_0045d530[6] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,6);
      s_sumCount____ksize_1_0045d530[7] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,7);
      s_sumCount____ksize_1_0045d530[8] = (char)s_sumCount____ksize_1_0045d530._8_8_;
      s_sumCount____ksize_1_0045d530[9] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,1);
      s_sumCount____ksize_1_0045d530[10] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,2);
      s_sumCount____ksize_1_0045d530[0xb] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,3);
      s_sumCount____ksize_1_0045d530[0xc] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,4);
      s_sumCount____ksize_1_0045d530[0xd] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,5);
      s_sumCount____ksize_1_0045d530[0xe] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,6);
      s_sumCount____ksize_1_0045d530[0xf] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,7);
      s_sumCount____ksize_1_0045d530[0x10] = (char)s_sumCount____ksize_1_0045d530._16_2_;
      s_sumCount____ksize_1_0045d530[0x11] = SUB21(s_sumCount____ksize_1_0045d530._16_2_,1);
      return;
    }
    pfVar36 = (float *)((long)pfVar36 + (long)param_4);
    param_3 = pfVar36 + -4;
    lVar40 = *param_2;
    lVar42 = param_2[1 - *(int *)(param_1 + 8)];
  } while( true );
}


==================================================================

### FUNC 002094c4 (3128 bytes) name=FUN_002094c4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002094c4(long param_1,undefined8 *param_2,int *param_3,int param_4,int param_5,uint param_6
                 )

{
  uint uVar1;
  uint uVar2;
  int *piVar3;
  undefined8 *puVar4;
  int *piVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  ulong uVar13;
  ulong uVar14;
  ulong uVar15;
  ulong uVar16;
  ulong uVar17;
  ulong uVar18;
  ulong uVar19;
  ulong uVar20;
  ulong uVar21;
  ulong uVar22;
  ulong uVar23;
  ulong uVar24;
  ulong uVar25;
  ulong uVar26;
  char cVar27;
  uint uVar28;
  int iVar29;
  int *piVar30;
  ulong uVar31;
  long lVar32;
  long lVar33;
  char *pcVar34;
  void *__dest;
  int *piVar35;
  int *piVar36;
  ulong uVar37;
  int *piVar38;
  long lVar39;
  size_t __n;
  long lVar40;
  long lVar41;
  undefined8 *puVar42;
  int *__src;
  int *piVar43;
  ulong uVar44;
  ulong uVar45;
  size_t sVar46;
  ulong uVar47;
  undefined8 *puVar48;
  void *__src_00;
  int *piVar49;
  int iVar50;
  int iVar51;
  float fVar52;
  int iVar57;
  int iVar58;
  int iVar59;
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  float fVar60;
  undefined8 uVar61;
  float fVar62;
  undefined8 uVar63;
  double dVar64;
  undefined8 local_10;
  undefined8 local_8;
  
  __src = *(int **)(param_1 + 0x20);
  __src_00 = *(void **)(param_1 + 0x28);
  sVar46 = (long)__src_00 - (long)__src;
  uVar37 = (long)sVar46 >> 2;
  dVar64 = *(double *)(param_1 + 0x10);
  if ((uint)uVar37 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar51 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar51 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar34 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar27 = s_sumCount____ksize_1_0045d530[0x12];
        uVar63 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar61 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar34 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar34[0x12] = cVar27;
        *(undefined8 *)pcVar34 = uVar61;
        *(undefined8 *)(pcVar34 + 8) = uVar63;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::ColumnSum<int, int>::operator()(const uchar**, uchar*, int, int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x308);
        cv::String::deallocate((String *)&local_10);
        iVar51 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar51 + -1;
      goto LAB_002097f0;
    }
    sVar46 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar47 = (ulong)(int)param_6;
    if (uVar37 < uVar47) {
      uVar45 = uVar47 - uVar37;
      if (uVar45 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src_00 >> 2) < uVar45) {
          if (0x3fffffffffffffff - uVar37 < uVar45) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar31 = uVar45;
          if (uVar45 < uVar37) {
            uVar31 = uVar37;
          }
          uVar31 = uVar31 + uVar37;
          if ((uVar31 < uVar37) || (0x3fffffffffffffff < uVar31)) {
            uVar44 = 0xfffffffffffffffc;
LAB_0020a0b8:
            piVar35 = operator_new(uVar44);
            __src = *(int **)(param_1 + 0x20);
            __n = (long)__src_00 - (long)__src;
            uVar37 = (long)__n >> 2;
          }
          else {
            uVar44 = uVar31 * 4;
            if (uVar31 != 0) goto LAB_0020a0b8;
            uVar44 = 0;
            piVar35 = (int *)0x0;
            __n = sVar46;
          }
          memset((void *)((long)piVar35 + sVar46),0,uVar45 * 4);
          if (uVar37 != 0) {
            memmove(piVar35,__src,__n);
          }
          sVar46 = *(long *)(param_1 + 0x28) - (long)__src_00;
          __dest = (void *)((long)piVar35 + uVar45 * 4 + __n);
          if ((long)sVar46 >> 2 != 0) {
            __dest = memmove(__dest,__src_00,sVar46);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(int **)(param_1 + 0x20) = piVar35;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar46;
          *(ulong *)(param_1 + 0x30) = (long)piVar35 + uVar44;
          __src = piVar35;
        }
        else {
          memset(__src_00,0,uVar45 * 4);
          *(void **)(param_1 + 0x28) = (void *)((long)__src_00 + uVar45 * 4);
        }
      }
    }
    else if (uVar47 < uVar37) {
      *(int **)(param_1 + 0x28) = __src + uVar47;
    }
    sVar46 = uVar47 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src,0,sVar46);
  iVar51 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar51 + -1) {
    uVar10 = param_6 - 4 >> 2;
    uVar8 = (uVar10 + 1) * 4;
    if ((int)(param_6 - 3) < 1) {
      uVar8 = 0;
    }
    uVar1 = uVar8 + 1;
    lVar41 = (long)(int)uVar8;
    uVar2 = uVar8 + 2;
    piVar35 = __src + lVar41;
    uVar11 = param_6 - uVar8;
    uVar37 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar6 = -((uint)((ulong)piVar35 >> 2) & 3) & 3;
    piVar3 = (int *)((long)__src + uVar37);
    uVar7 = uVar11;
    if (uVar6 < uVar11) {
      uVar7 = uVar6;
    }
    uVar47 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    piVar43 = (int *)((long)__src + uVar47);
    uVar6 = ((uVar11 - uVar7) - 4 >> 2) + 1;
    iVar9 = uVar6 * 4;
    do {
      piVar38 = (int *)*param_2;
      piVar30 = __src;
      piVar36 = piVar38;
      if (0 < (int)(param_6 - 3)) {
        do {
          uVar63 = *(undefined8 *)(piVar30 + 2);
          uVar61 = *(undefined8 *)piVar30;
          iVar51 = *piVar36;
          iVar50 = piVar36[1];
          iVar57 = piVar36[3];
          piVar49 = piVar30 + 4;
          piVar30[2] = piVar36[2] + (int)uVar63;
          piVar30[3] = iVar57 + (int)((ulong)uVar63 >> 0x20);
          *piVar30 = iVar51 + (int)uVar61;
          piVar30[1] = iVar50 + (int)((ulong)uVar61 >> 0x20);
          piVar30 = piVar49;
          piVar36 = piVar36 + 4;
        } while (piVar49 != __src + ((ulong)uVar10 + 1) * 4);
      }
      if ((int)uVar8 < (int)param_6) {
        if ((piVar35 < piVar38 + lVar41 + 4 && piVar38 + lVar41 < __src + lVar41 + 4) ||
           (uVar11 < 8)) {
          lVar39 = 0;
          do {
            *(int *)((long)piVar35 + lVar39) =
                 *(int *)((long)piVar35 + lVar39) + *(int *)((long)(piVar38 + lVar41) + lVar39);
            lVar39 = lVar39 + 4;
          } while (lVar39 != ((ulong)((param_6 - 1) - uVar8) + 1) * 4);
        }
        else {
          if (uVar7 == 0) {
            uVar45 = (ulong)uVar8;
          }
          else {
            __src[lVar41] = __src[lVar41] + piVar38[lVar41];
            if (uVar7 == 1) {
              uVar45 = (ulong)uVar1;
            }
            else {
              *piVar3 = *piVar3 + *(int *)((long)piVar38 + uVar37);
              if (uVar7 == 3) {
                uVar45 = (ulong)(uVar8 + 3);
                *piVar43 = *piVar43 + *(int *)((long)piVar38 + uVar47);
              }
              else {
                uVar45 = (ulong)uVar2;
              }
            }
          }
          if (2 < (uVar11 - 1) - uVar7) {
            uVar28 = 0;
            piVar30 = __src + lVar41 + (ulong)uVar7;
            piVar36 = __src + (ulong)uVar7 + lVar41;
            piVar49 = piVar38 + (ulong)uVar7 + lVar41;
            do {
              uVar63 = *(undefined8 *)piVar49;
              uVar28 = uVar28 + 1;
              uVar61 = *(undefined8 *)piVar30;
              *(ulong *)(piVar36 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar30 + 2) >> 0x20) +
                            (int)((ulong)*(undefined8 *)(piVar49 + 2) >> 0x20),
                            (int)*(undefined8 *)(piVar30 + 2) + (int)*(undefined8 *)(piVar49 + 2));
              *(ulong *)piVar36 =
                   CONCAT44((int)((ulong)uVar61 >> 0x20) + (int)((ulong)uVar63 >> 0x20),
                            (int)uVar61 + (int)uVar63);
              piVar30 = piVar30 + 4;
              piVar36 = piVar36 + 4;
              piVar49 = piVar49 + 4;
            } while (uVar28 < uVar6);
            uVar45 = (ulong)(uint)((int)uVar45 + iVar9);
            if (uVar11 - uVar7 == iVar9) goto LAB_002097c0;
          }
          uVar31 = -(uVar45 >> 0x1f) & 0xfffffffc00000000 | uVar45 << 2;
          *(int *)((long)__src + uVar31) =
               *(int *)((long)__src + uVar31) + *(int *)((long)piVar38 + uVar31);
          if ((int)uVar45 + 1 < (int)param_6) {
            lVar39 = uVar31 + 4;
            *(int *)((long)__src + lVar39) =
                 *(int *)((long)__src + lVar39) + *(int *)((long)piVar38 + lVar39);
            if ((int)uVar45 + 2 < (int)param_6) {
              lVar39 = uVar31 + 8;
              *(int *)((long)__src + lVar39) =
                   *(int *)((long)__src + lVar39) + *(int *)((long)piVar38 + lVar39);
            }
          }
        }
      }
LAB_002097c0:
      param_2 = param_2 + 1;
      iVar51 = *(int *)(param_1 + 8);
      iVar50 = *(int *)(param_1 + 0x18) + 1;
      *(int *)(param_1 + 0x18) = iVar50;
    } while (iVar50 < iVar51 + -1);
  }
LAB_002097f0:
  if (param_5 == 0) {
    return;
  }
  iVar9 = param_6 - 3;
  uVar10 = param_6 - 4 >> 2;
  puVar4 = param_2 + (ulong)(param_5 - 1) + 1;
  uVar8 = (uVar10 + 1) * 4;
  if (iVar9 < 1) {
    uVar8 = 0;
  }
  uVar11 = param_6 - uVar8;
  lVar39 = (long)(int)uVar8;
  lVar41 = lVar39 + 4;
  uVar1 = uVar8 + 1;
  uVar2 = uVar8 + 2;
  uVar37 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
  uVar47 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
  lVar40 = lVar41 * 4 + -0x10;
  piVar35 = __src + lVar41;
  piVar3 = __src + lVar39;
  uVar6 = -((uint)((ulong)piVar3 >> 2) & 3) & 3;
  uVar7 = uVar11;
  if (uVar6 < uVar11) {
    uVar7 = uVar6;
  }
  uVar6 = ((uVar11 - uVar7) - 4 >> 2) + 1;
  iVar50 = uVar6 * 4;
  puVar42 = (undefined8 *)*param_2;
  piVar43 = (int *)param_2[1 - iVar51];
  if (dVar64 != 1.0) goto LAB_00209c58;
  do {
    lVar32 = 0;
    if (0 < iVar9) {
      do {
        piVar30 = (int *)((long)param_3 + lVar32);
        puVar48 = (undefined8 *)((long)piVar43 + lVar32);
        uVar63 = ((undefined8 *)((long)puVar42 + lVar32))[1];
        uVar61 = *(undefined8 *)((long)puVar42 + lVar32);
        piVar36 = (int *)((long)__src + lVar32);
        lVar32 = lVar32 + 0x10;
        iVar51 = *piVar36 + (int)uVar61;
        iVar57 = piVar36[1] + (int)((ulong)uVar61 >> 0x20);
        iVar58 = piVar36[2] + (int)uVar63;
        iVar59 = piVar36[3] + (int)((ulong)uVar63 >> 0x20);
        piVar30[2] = iVar58;
        piVar30[3] = iVar59;
        *piVar30 = iVar51;
        piVar30[1] = iVar57;
        uVar63 = puVar48[1];
        uVar61 = *puVar48;
        piVar36[2] = iVar58 - (int)uVar63;
        piVar36[3] = iVar59 - (int)((ulong)uVar63 >> 0x20);
        *piVar36 = iVar51 - (int)uVar61;
        piVar36[1] = iVar57 - (int)((ulong)uVar61 >> 0x20);
      } while (lVar32 != ((ulong)uVar10 + 1) * 0x10);
    }
    if ((int)uVar8 < (int)param_6) {
      piVar30 = param_3 + lVar41;
      piVar36 = param_3 + lVar39;
      piVar38 = (int *)((long)puVar42 + lVar41 * 4);
      piVar49 = (int *)((long)puVar42 + lVar40);
      piVar5 = piVar43 + lVar39;
      if (((((uVar11 < 8 || piVar3 < piVar30 && piVar36 < piVar35) ||
            piVar3 < piVar38 && piVar49 < piVar35) || piVar36 < piVar38 && piVar49 < piVar30) ||
           piVar3 < piVar43 + lVar41 && piVar5 < piVar35) ||
         (piVar36 < piVar43 + lVar41 && piVar5 < piVar30)) {
        lVar32 = 0;
        do {
          iVar51 = *(int *)((long)piVar3 + lVar32) + *(int *)((long)piVar49 + lVar32);
          *(int *)((long)piVar36 + lVar32) = iVar51;
          *(int *)((long)piVar3 + lVar32) = iVar51 - *(int *)((long)piVar5 + lVar32);
          lVar32 = lVar32 + 4;
        } while (lVar32 != ((ulong)((param_6 - 1) - uVar8) + 1) * 4);
      }
      else {
        if (uVar7 == 0) {
          uVar45 = (ulong)uVar8;
        }
        else {
          iVar51 = __src[lVar39] + *(int *)((long)puVar42 + lVar39 * 4);
          param_3[lVar39] = iVar51;
          __src[lVar39] = iVar51 - piVar43[lVar39];
          if (uVar7 == 1) {
            uVar45 = (ulong)uVar1;
          }
          else {
            iVar51 = *(int *)((long)__src + uVar37) + *(int *)((long)puVar42 + uVar37);
            *(int *)((long)param_3 + uVar37) = iVar51;
            *(int *)((long)__src + uVar37) = iVar51 - *(int *)((long)piVar43 + uVar37);
            if (uVar7 == 3) {
              uVar45 = (ulong)(uVar8 + 3);
              iVar51 = *(int *)((long)__src + uVar47) + *(int *)((long)puVar42 + uVar47);
              *(int *)((long)param_3 + uVar47) = iVar51;
              *(int *)((long)__src + uVar47) = iVar51 - *(int *)((long)piVar43 + uVar47);
            }
            else {
              uVar45 = (ulong)uVar2;
            }
          }
        }
        if (2 < (uVar11 - 1) - uVar7) {
          lVar32 = 0;
          uVar28 = 0;
          do {
            uVar28 = uVar28 + 1;
            lVar33 = lVar32 + lVar40 + (ulong)uVar7 * 4;
            lVar32 = lVar32 + 0x10;
            piVar30 = (int *)((long)puVar42 + lVar33);
            piVar36 = (int *)((long)param_3 + lVar33);
            piVar38 = (int *)((long)__src + lVar33);
            iVar51 = *piVar30 + (int)*(undefined8 *)piVar38;
            iVar57 = piVar30[1] + (int)((ulong)*(undefined8 *)piVar38 >> 0x20);
            iVar58 = piVar30[2] + (int)*(undefined8 *)(piVar38 + 2);
            iVar59 = piVar30[3] + (int)((ulong)*(undefined8 *)(piVar38 + 2) >> 0x20);
            piVar36[2] = iVar58;
            piVar36[3] = iVar59;
            *piVar36 = iVar51;
            piVar36[1] = iVar57;
            uVar63 = ((undefined8 *)((long)piVar43 + lVar33))[1];
            uVar61 = *(undefined8 *)((long)piVar43 + lVar33);
            piVar38[2] = iVar58 - (int)uVar63;
            piVar38[3] = iVar59 - (int)((ulong)uVar63 >> 0x20);
            *piVar38 = iVar51 - (int)uVar61;
            piVar38[1] = iVar57 - (int)((ulong)uVar61 >> 0x20);
          } while (uVar28 < uVar6);
          uVar45 = (ulong)(uint)((int)uVar45 + iVar50);
          if (iVar50 == uVar11 - uVar7) goto joined_r0x00209c2c;
        }
        uVar31 = -(uVar45 >> 0x1f) & 0xfffffffc00000000 | uVar45 << 2;
        iVar51 = *(int *)((long)__src + uVar31) + *(int *)((long)puVar42 + uVar31);
        *(int *)((long)param_3 + uVar31) = iVar51;
        *(int *)((long)__src + uVar31) = iVar51 - *(int *)((long)piVar43 + uVar31);
        if ((int)uVar45 + 1 < (int)param_6) {
          lVar32 = uVar31 + 4;
          iVar51 = *(int *)((long)__src + lVar32) + *(int *)((long)puVar42 + lVar32);
          *(int *)((long)param_3 + lVar32) = iVar51;
          *(int *)((long)__src + lVar32) = iVar51 - *(int *)((long)piVar43 + lVar32);
          if ((int)uVar45 + 2 < (int)param_6) {
            lVar32 = uVar31 + 8;
            iVar51 = *(int *)((long)__src + lVar32) + *(int *)((long)puVar42 + lVar32);
            *(int *)((long)param_3 + lVar32) = iVar51;
            *(int *)((long)__src + lVar32) = iVar51 - *(int *)((long)piVar43 + lVar32);
          }
        }
      }
    }
joined_r0x00209c2c:
    while( true ) {
      param_2 = param_2 + 1;
      if (param_2 == puVar4) {
        s_sumCount____ksize_1_0045d530[0] = (char)s_sumCount____ksize_1_0045d530._0_8_;
        s_sumCount____ksize_1_0045d530[1] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,1);
        s_sumCount____ksize_1_0045d530[2] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,2);
        s_sumCount____ksize_1_0045d530[3] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,3);
        s_sumCount____ksize_1_0045d530[4] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,4);
        s_sumCount____ksize_1_0045d530[5] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,5);
        s_sumCount____ksize_1_0045d530[6] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,6);
        s_sumCount____ksize_1_0045d530[7] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,7);
        s_sumCount____ksize_1_0045d530[8] = (char)s_sumCount____ksize_1_0045d530._8_8_;
        s_sumCount____ksize_1_0045d530[9] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,1);
        s_sumCount____ksize_1_0045d530[10] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,2);
        s_sumCount____ksize_1_0045d530[0xb] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,3);
        s_sumCount____ksize_1_0045d530[0xc] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,4);
        s_sumCount____ksize_1_0045d530[0xd] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,5);
        s_sumCount____ksize_1_0045d530[0xe] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,6);
        s_sumCount____ksize_1_0045d530[0xf] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,7);
        s_sumCount____ksize_1_0045d530[0x10] = (char)s_sumCount____ksize_1_0045d530._16_2_;
        s_sumCount____ksize_1_0045d530[0x11] = SUB21(s_sumCount____ksize_1_0045d530._16_2_,1);
        return;
      }
      param_3 = (int *)((long)param_3 + (long)param_4);
      puVar42 = (undefined8 *)*param_2;
      piVar43 = (int *)param_2[1 - *(int *)(param_1 + 8)];
      if (dVar64 == 1.0) break;
LAB_00209c58:
      fVar52 = (float)dVar64;
      if (iVar9 < 1) {
        uVar45 = 0;
      }
      else {
        uVar45 = 0;
        piVar30 = piVar43;
        piVar36 = param_3;
        piVar38 = __src;
        puVar48 = puVar42;
        do {
          iVar51 = *piVar38 + (int)*puVar48;
          iVar57 = piVar38[1] + (int)((ulong)*puVar48 >> 0x20);
          iVar58 = piVar38[2] + (int)puVar48[1];
          iVar59 = piVar38[3] + (int)((ulong)puVar48[1] >> 0x20);
          auVar54._4_4_ = iVar57;
          auVar54._0_4_ = iVar51;
          auVar54._8_4_ = iVar58;
          auVar54._12_4_ = iVar59;
          auVar54 = NEON_scvtf(auVar54,4);
          auVar55._0_8_ = CONCAT44(fVar52 * auVar54._4_4_,fVar52 * auVar54._0_4_);
          auVar55._8_4_ = fVar52 * auVar54._8_4_;
          auVar55._12_4_ = fVar52 * auVar54._12_4_;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar61 = auVar55._8_8_;
            iVar29 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar55._8_8_ = uVar61;
            if (iVar29 != 0) {
              auVar56._8_4_ = 0x80000000;
              auVar56._0_8_ = 0x8000000080000000;
              auVar56._12_4_ = 0x80000000;
              uRam0000000000531eb8 = auVar56._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar29 = __cxa_guard_acquire(&DAT_00531ec8), iVar29 != 0)) {
            auVar53._8_4_ = 0x3f000000;
            auVar53._0_8_ = 0x3f0000003f000000;
            auVar53._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar53._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar28 = (int)uVar45 + 4;
          uVar45 = (ulong)uVar28;
          puVar48 = puVar48 + 2;
          uVar31 = (ulong)_DAT_00531eb0 >> 0x20;
          uVar44 = (ulong)_DAT_00531eb0 >> 0x28;
          uVar13 = (ulong)_DAT_00531eb0 >> 0x30;
          uVar14 = (ulong)_DAT_00531eb0 >> 0x38;
          uVar15 = (ulong)uRam0000000000531eb8 >> 0x20;
          uVar16 = (ulong)uRam0000000000531eb8 >> 0x28;
          uVar17 = (ulong)uRam0000000000531eb8 >> 0x30;
          uVar18 = (ulong)uRam0000000000531eb8 >> 0x38;
          fVar60 = (float)CONCAT13(auVar55[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12(auVar55[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11(auVar55[1] & (byte)((ulong)_DAT_00531eb0 >> 8)
                                                     | (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     auVar55[0] & (byte)_DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          uVar19 = (ulong)_DAT_00531ea0 >> 0x20;
          uVar20 = (ulong)_DAT_00531ea0 >> 0x28;
          uVar21 = (ulong)_DAT_00531ea0 >> 0x30;
          uVar22 = (ulong)_DAT_00531ea0 >> 0x38;
          fVar62 = (float)CONCAT13(auVar55[0xb] & (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                   (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                   CONCAT12(auVar55[10] &
                                            (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                            (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                            CONCAT11(auVar55[9] &
                                                     (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                     (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                     auVar55[8] & (byte)uRam0000000000531eb8 |
                                                     (byte)uRam0000000000531ea8)));
          uVar23 = (ulong)uRam0000000000531ea8 >> 0x20;
          uVar24 = (ulong)uRam0000000000531ea8 >> 0x28;
          uVar25 = (ulong)uRam0000000000531ea8 >> 0x30;
          uVar26 = (ulong)uRam0000000000531ea8 >> 0x38;
          piVar36[2] = (int)(auVar55._8_4_ + fVar62);
          piVar36[3] = (int)(auVar55._12_4_ +
                            (float)(CONCAT17(auVar55[0xf] & (byte)uVar18 | (byte)uVar26,
                                             CONCAT16(auVar55[0xe] & (byte)uVar17 | (byte)uVar25,
                                                      CONCAT15(auVar55[0xd] & (byte)uVar16 |
                                                               (byte)uVar24,
                                                               CONCAT14(auVar55[0xc] & (byte)uVar15
                                                                        | (byte)uVar23,fVar62)))) >>
                                   0x20));
          *piVar36 = (int)(auVar55._0_4_ + fVar60);
          piVar36[1] = (int)(auVar55._4_4_ +
                            (float)(CONCAT17(auVar55[7] & (byte)uVar14 | (byte)uVar22,
                                             CONCAT16(auVar55[6] & (byte)uVar13 | (byte)uVar21,
                                                      CONCAT15(auVar55[5] & (byte)uVar44 |
                                                               (byte)uVar20,
                                                               CONCAT14(auVar55[4] & (byte)uVar31 |
                                                                        (byte)uVar19,fVar60)))) >>
                                   0x20));
          iVar29 = *piVar30;
          iVar12 = piVar30[1];
          *(ulong *)(piVar38 + 2) = CONCAT44(iVar59 - piVar30[3],iVar58 - piVar30[2]);
          *(ulong *)piVar38 = CONCAT44(iVar57 - iVar12,iVar51 - iVar29);
          piVar30 = piVar30 + 4;
          piVar36 = piVar36 + 4;
          piVar38 = piVar38 + 4;
        } while ((int)uVar28 < iVar9);
      }
      if ((int)uVar45 < (int)param_6) {
        uVar31 = -(uVar45 >> 0x1f) & 0xfffffffc00000000 | uVar45 << 2;
        lVar32 = 0;
        do {
          iVar51 = *(int *)((long)__src + lVar32 + uVar31) +
                   *(int *)((long)puVar42 + lVar32 + uVar31);
          lVar33 = lrint(dVar64 * (double)iVar51);
          *(int *)((long)param_3 + lVar32 + uVar31) = (int)lVar33;
          *(int *)((long)__src + lVar32 + uVar31) =
               iVar51 - *(int *)((long)piVar43 + lVar32 + uVar31);
          lVar32 = lVar32 + 4;
        } while (lVar32 != ((ulong)((param_6 - 1) - (int)uVar45) + 1) * 4);
      }
    }
  } while( true );
}


==================================================================

### FUNC 0020a110 (4688 bytes) name=FUN_0020a110

void FUN_0020a110(long param_1,undefined8 *param_2,double *param_3,int param_4,int param_5,
                 uint param_6)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  undefined8 *puVar9;
  int *piVar10;
  int *piVar11;
  int *piVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  char cVar21;
  long lVar22;
  int *piVar23;
  char *pcVar24;
  void *__dest;
  int *piVar25;
  uint uVar26;
  long lVar27;
  int *piVar28;
  int *piVar29;
  int *piVar30;
  long lVar31;
  int *piVar32;
  ulong uVar33;
  void *__src;
  size_t __n;
  int *piVar34;
  double *pdVar35;
  int *piVar36;
  undefined8 *puVar37;
  ulong uVar38;
  ulong uVar39;
  ulong uVar40;
  int *piVar41;
  int *__src_00;
  uint uVar42;
  ulong uVar43;
  size_t sVar44;
  long lVar45;
  int *piVar46;
  int *piVar47;
  undefined8 uVar48;
  long lVar49;
  int iVar50;
  int iVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  double dVar55;
  undefined1 in_q9 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  int iVar60;
  undefined8 uVar61;
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined1 auVar64 [16];
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  undefined1 auVar67 [16];
  long lVar68;
  long lVar69;
  long lVar70;
  int iVar71;
  undefined8 local_10;
  undefined8 local_8;
  
  __src_00 = *(int **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  dVar55 = *(double *)(param_1 + 0x10);
  sVar44 = (long)__src - (long)__src_00;
  uVar33 = (long)sVar44 >> 2;
  if ((uint)uVar33 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar50 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar50 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar24 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar21 = s_sumCount____ksize_1_0045d530[0x12];
        uVar61 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar48 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar24 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar24[0x12] = cVar21;
        *(undefined8 *)pcVar24 = uVar48;
        *(undefined8 *)(pcVar24 + 8) = uVar61;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = int; T = double; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar50 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar50 + -1;
      goto LAB_0020a4f0;
    }
    sVar44 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar43 = (ulong)(int)param_6;
    if (uVar33 < uVar43) {
      uVar40 = uVar43 - uVar33;
      if (uVar40 != 0) {
        auVar63._8_8_ = 0;
        auVar63._0_8_ = param_1 + 0x20;
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 2) < uVar40) {
          if (0x3fffffffffffffff - uVar33 < uVar40) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar39 = uVar40;
          if (uVar40 < uVar33) {
            uVar39 = uVar33;
          }
          uVar39 = uVar39 + uVar33;
          auVar66._8_8_ = in_q9._8_8_;
          if ((uVar39 < uVar33) || (0x3fffffffffffffff < uVar39)) {
            auVar66 = ZEXT816(0xfffffffffffffffc);
LAB_0020b310:
            piVar25 = operator_new(auVar66._0_8_);
            __src_00 = *(int **)(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar33 = (long)__n >> 2;
          }
          else {
            if (uVar39 != 0) {
              auVar66._0_8_ = NEON_shl(uVar39,2);
              goto LAB_0020b310;
            }
            auVar66 = ZEXT816(0);
            piVar25 = (int *)0x0;
            __n = sVar44;
          }
          memset((void *)((long)piVar25 + sVar44),0,uVar40 * 4);
          if (uVar33 != 0) {
            memmove(piVar25,__src_00,__n);
          }
          __dest = (void *)((long)piVar25 + uVar40 * 4 + __n);
          sVar44 = *(long *)(auVar63._0_8_ + 8) - (long)__src;
          if ((long)sVar44 >> 2 != 0) {
            __dest = memmove(__dest,__src,sVar44);
          }
          lVar45 = auVar66._0_8_;
          lVar22 = auVar63._0_8_;
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
            lVar45 = auVar66._0_8_;
            lVar22 = auVar63._0_8_;
          }
          *(int **)(param_1 + 0x20) = piVar25;
          *(size_t *)(lVar22 + 8) = (long)__dest + sVar44;
          *(long *)(lVar22 + 0x10) = (long)piVar25 + lVar45;
          __src_00 = piVar25;
        }
        else {
          memset(__src,0,uVar40 * 4);
          *(void **)(auVar63._0_8_ + 8) = (void *)((long)__src + uVar40 * 4);
        }
      }
    }
    else if (uVar43 < uVar33) {
      *(int **)(param_1 + 0x28) = __src_00 + uVar43;
    }
    sVar44 = uVar43 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar44);
  iVar50 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar50 + -1) {
    uVar17 = param_6 - 2;
    iVar18 = param_6 - 1;
    uVar16 = uVar17 >> 1;
    uVar2 = uVar16 + 1;
    uVar3 = (uVar16 - 1 >> 1) + 1;
    uVar14 = uVar2 * 2;
    uVar15 = uVar3 * 4;
    if (uVar17 < 2) {
      uVar15 = 0;
    }
    if (iVar18 < 1) {
      uVar14 = 0;
    }
    uVar19 = param_6 - uVar14;
    lVar45 = (long)(int)uVar14;
    uVar4 = uVar14 + 1;
    uVar5 = uVar14 + 2;
    uVar33 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
    puVar9 = (undefined8 *)((long)__src_00 + uVar33);
    uVar43 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar4 << 2;
    piVar25 = (int *)((long)__src_00 + uVar43);
    uVar40 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
    piVar10 = (int *)((long)__src_00 + uVar40);
    piVar11 = __src_00 + lVar45;
    uVar15 = -((uint)((ulong)piVar11 >> 2) & 3) & 3;
    uVar42 = uVar19;
    if (uVar15 < uVar19) {
      uVar42 = uVar15;
    }
    uVar15 = ((uVar19 - uVar42) - 4 >> 2) + 1;
    iVar60 = uVar15 * 4;
    do {
      piVar34 = (int *)*param_2;
      if (0 < iVar18) {
        piVar29 = __src_00;
        piVar32 = piVar34;
        if ((__src_00 < piVar34 + 8 && piVar34 < __src_00 + 8) || (uVar2 < 4)) {
          do {
            piVar46 = piVar29 + 2;
            *(ulong *)piVar29 =
                 CONCAT44((int)((ulong)*(undefined8 *)piVar29 >> 0x20) +
                          (int)((ulong)*(undefined8 *)piVar32 >> 0x20),
                          (int)*(undefined8 *)piVar29 + (int)*(undefined8 *)piVar32);
            piVar29 = piVar46;
            piVar32 = piVar32 + 2;
          } while (piVar46 != __src_00 + ((ulong)uVar16 + 1) * 2);
        }
        else {
          if (1 < uVar17) {
            uVar26 = 0;
            do {
              uVar26 = uVar26 + 1;
              uVar48 = *(undefined8 *)piVar32;
              *(ulong *)(piVar29 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar29 + 2) >> 0x20) +
                            (int)((ulong)*(undefined8 *)(piVar32 + 2) >> 0x20),
                            (int)*(undefined8 *)(piVar29 + 2) + (int)*(undefined8 *)(piVar32 + 2));
              *(ulong *)piVar29 =
                   CONCAT44((int)((ulong)*(undefined8 *)piVar29 >> 0x20) +
                            (int)((ulong)uVar48 >> 0x20),(int)*(undefined8 *)piVar29 + (int)uVar48);
              piVar29 = piVar29 + 4;
              piVar32 = piVar32 + 4;
            } while (uVar26 < uVar3);
            if (uVar2 == uVar3 * 2) goto LAB_0020a3a8;
          }
          uVar48 = *puVar9;
          uVar61 = *(undefined8 *)((long)piVar34 + uVar33);
          *puVar9 = CONCAT44((int)((ulong)uVar48 >> 0x20) + (int)((ulong)uVar61 >> 0x20),
                             (int)uVar48 + (int)uVar61);
        }
      }
LAB_0020a3a8:
      if ((int)uVar14 < (int)param_6) {
        if ((piVar11 < piVar34 + lVar45 + 4 && piVar34 + lVar45 < __src_00 + lVar45 + 4) ||
           (uVar19 < 8)) {
          lVar22 = 0;
          do {
            *(int *)((long)piVar11 + lVar22) =
                 *(int *)((long)piVar11 + lVar22) + *(int *)((long)(piVar34 + lVar45) + lVar22);
            lVar22 = lVar22 + 4;
          } while (lVar22 != ((ulong)(iVar18 - uVar14) + 1) * 4);
        }
        else {
          if (uVar42 == 0) {
            uVar39 = (ulong)uVar14;
          }
          else {
            __src_00[lVar45] = __src_00[lVar45] + piVar34[lVar45];
            if (uVar42 == 1) {
              uVar39 = (ulong)uVar4;
            }
            else {
              *piVar25 = *piVar25 + *(int *)((long)piVar34 + uVar43);
              if (uVar42 == 3) {
                uVar39 = (ulong)(uVar14 + 3);
                *piVar10 = *piVar10 + *(int *)((long)piVar34 + uVar40);
              }
              else {
                uVar39 = (ulong)uVar5;
              }
            }
          }
          if (2 < (uVar19 - 1) - uVar42) {
            uVar26 = 0;
            piVar29 = __src_00 + lVar45 + (ulong)uVar42;
            piVar32 = __src_00 + (ulong)uVar42 + lVar45;
            piVar46 = piVar34 + (ulong)uVar42 + lVar45;
            do {
              uVar61 = *(undefined8 *)piVar46;
              uVar26 = uVar26 + 1;
              uVar48 = *(undefined8 *)piVar29;
              *(ulong *)(piVar32 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar29 + 2) >> 0x20) +
                            (int)((ulong)*(undefined8 *)(piVar46 + 2) >> 0x20),
                            (int)*(undefined8 *)(piVar29 + 2) + (int)*(undefined8 *)(piVar46 + 2));
              *(ulong *)piVar32 =
                   CONCAT44((int)((ulong)uVar48 >> 0x20) + (int)((ulong)uVar61 >> 0x20),
                            (int)uVar48 + (int)uVar61);
              piVar29 = piVar29 + 4;
              piVar32 = piVar32 + 4;
              piVar46 = piVar46 + 4;
            } while (uVar26 < uVar15);
            uVar39 = (ulong)(uint)((int)uVar39 + iVar60);
            if (uVar19 - uVar42 == iVar60) goto LAB_0020a4cc;
          }
          uVar38 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
          *(int *)((long)__src_00 + uVar38) =
               *(int *)((long)__src_00 + uVar38) + *(int *)((long)piVar34 + uVar38);
          if ((int)uVar39 + 1 < (int)param_6) {
            lVar22 = uVar38 + 4;
            *(int *)((long)__src_00 + lVar22) =
                 *(int *)((long)__src_00 + lVar22) + *(int *)((long)piVar34 + lVar22);
            if ((int)uVar39 + 2 < (int)param_6) {
              lVar22 = uVar38 + 8;
              *(int *)((long)__src_00 + lVar22) =
                   *(int *)((long)__src_00 + lVar22) + *(int *)((long)piVar34 + lVar22);
            }
          }
        }
      }
LAB_0020a4cc:
      param_2 = param_2 + 1;
      iVar50 = *(int *)(param_1 + 8);
      iVar6 = *(int *)(param_1 + 0x18) + 1;
      *(int *)(param_1 + 0x18) = iVar6;
    } while (iVar6 < iVar50 + -1);
  }
LAB_0020a4f0:
  if (param_5 == 0) {
    return;
  }
  uVar14 = param_6 - 2;
  iVar6 = param_6 - 1;
  piVar25 = __src_00 + 8;
  uVar15 = uVar14 >> 1;
  puVar9 = param_2 + (ulong)(param_5 - 1) + 1;
  uVar2 = uVar15 + 1;
  uVar3 = (uVar15 - 1 >> 1) + 1;
  iVar60 = uVar2 * 2;
  iVar18 = uVar3 * 4;
  if (uVar14 < 2) {
    iVar18 = 0;
  }
  if (iVar6 < 1) {
    iVar60 = 0;
  }
  lVar69 = NEON_shl((ulong)uVar2,4);
  uVar4 = param_6 - iVar60;
  lVar22 = (long)iVar18;
  iVar18 = iVar60 + 1;
  lVar27 = (long)iVar60;
  lVar45 = lVar27 + 4;
  iVar7 = iVar60 + 2;
  piVar10 = __src_00 + lVar27;
  lVar49 = NEON_shl(lVar22,3);
  uVar16 = -((uint)((ulong)piVar10 >> 2) & 3) & 3;
  uVar17 = uVar4;
  if (uVar16 < uVar4) {
    uVar17 = uVar16;
  }
  uVar5 = (uVar4 - 1) - uVar17;
  lVar68 = NEON_shl(lVar27,3);
  iVar20 = uVar4 - uVar17;
  lVar1 = lVar68 + (ulong)uVar17 * 8;
  uVar16 = (iVar20 - 4U >> 2) + 1;
  piVar11 = __src_00 + lVar22;
  lVar70 = NEON_shl(lVar27 + (ulong)uVar4,3);
  piVar34 = __src_00 + lVar22 + 1;
  piVar29 = __src_00 + lVar45;
  piVar32 = __src_00 + lVar27;
  piVar46 = __src_00 + iVar18;
  piVar12 = __src_00 + iVar7;
  iVar71 = uVar16 * 4;
  lVar8 = (ulong)(uint)(iVar6 - iVar60) + 1;
  piVar28 = (int *)*param_2;
  piVar30 = (int *)param_2[1 - iVar50];
  do {
    if (dVar55 == 1.0) {
      if (0 < iVar6) {
        if (((uVar2 < 3 ||
             __src_00 < (int *)((long)param_3 + lVar69) && param_3 < __src_00 + (ulong)uVar2 * 2) ||
             __src_00 < piVar28 + 8 && piVar28 < piVar25) ||
           (__src_00 < piVar30 + 8 && piVar30 < piVar25)) {
          pdVar35 = param_3;
          piVar23 = __src_00;
          piVar36 = piVar30 + 1;
          piVar41 = piVar28 + 1;
          do {
            iVar50 = piVar41[-1];
            iVar51 = *piVar23;
            piVar47 = piVar41 + 2;
            iVar13 = *piVar41;
            iVar52 = piVar23[1];
            iVar53 = *piVar36;
            iVar54 = piVar36[-1];
            *pdVar35 = (double)(iVar51 + iVar50);
            pdVar35[1] = (double)(iVar52 + iVar13);
            *piVar23 = (iVar51 + iVar50) - iVar54;
            piVar23[1] = (iVar52 + iVar13) - iVar53;
            pdVar35 = pdVar35 + 2;
            piVar23 = piVar23 + 2;
            piVar36 = piVar36 + 2;
            piVar41 = piVar47;
          } while (piVar47 != piVar28 + (ulong)uVar15 * 2 + 3);
        }
        else {
          if (1 < uVar14) {
            uVar42 = 0;
            pdVar35 = param_3;
            piVar23 = piVar30;
            piVar36 = piVar28;
            piVar41 = __src_00;
            do {
              uVar42 = uVar42 + 1;
              uVar61 = *(undefined8 *)(piVar23 + 2);
              uVar48 = *(undefined8 *)piVar23;
              iVar50 = *piVar41 + (int)*(undefined8 *)piVar36;
              iVar51 = piVar41[1] + (int)((ulong)*(undefined8 *)piVar36 >> 0x20);
              iVar52 = piVar41[2] + (int)*(undefined8 *)(piVar36 + 2);
              iVar53 = piVar41[3] + (int)((ulong)*(undefined8 *)(piVar36 + 2) >> 0x20);
              auVar62._0_8_ = (long)iVar50;
              auVar62._8_8_ = (long)iVar51;
              auVar56._0_8_ = (long)iVar52;
              auVar56._8_8_ = (long)iVar53;
              auVar63 = NEON_scvtf(auVar62,8);
              pdVar35[1] = auVar63._8_8_;
              *pdVar35 = auVar63._0_8_;
              auVar63 = NEON_scvtf(auVar56,8);
              pdVar35[3] = auVar63._8_8_;
              pdVar35[2] = auVar63._0_8_;
              *(ulong *)(piVar41 + 2) =
                   CONCAT44(iVar53 - (int)((ulong)uVar61 >> 0x20),iVar52 - (int)uVar61);
              *(ulong *)piVar41 =
                   CONCAT44(iVar51 - (int)((ulong)uVar48 >> 0x20),iVar50 - (int)uVar48);
              pdVar35 = pdVar35 + 4;
              piVar23 = piVar23 + 4;
              piVar36 = piVar36 + 4;
              piVar41 = piVar41 + 4;
            } while (uVar42 < uVar3);
            if (uVar2 == uVar3 * 2) goto LAB_0020a874;
          }
          iVar50 = *piVar11;
          iVar52 = piVar28[lVar22];
          iVar53 = piVar28[lVar22 + 1];
          iVar51 = *piVar34;
          iVar54 = piVar30[lVar22 + 1];
          iVar13 = piVar30[lVar22];
          *(double *)((long)param_3 + lVar49) = (double)(iVar50 + iVar52);
          *(double *)((long)param_3 + lVar49 + 8) = (double)(iVar51 + iVar53);
          *piVar11 = (iVar50 + iVar52) - iVar13;
          *piVar34 = (iVar51 + iVar53) - iVar54;
        }
      }
LAB_0020a874:
      if (iVar60 < (int)param_6) {
        pdVar35 = (double *)((long)param_3 + lVar68);
        if (((uVar4 < 7 ||
             piVar10 < (int *)((long)param_3 + lVar70) && pdVar35 < __src_00 + lVar27 + (ulong)uVar4
             ) || piVar10 < piVar28 + lVar45 && piVar28 + lVar27 < piVar29) ||
           (piVar10 < piVar30 + lVar45 && piVar30 + lVar27 < piVar29)) {
          lVar31 = 0;
          do {
            iVar51 = (piVar30 + lVar27)[lVar31];
            iVar50 = piVar10[lVar31] + (piVar28 + lVar27)[lVar31];
            pdVar35[lVar31] = (double)iVar50;
            piVar10[lVar31] = iVar50 - iVar51;
            lVar31 = lVar31 + 1;
          } while (lVar8 != lVar31);
        }
        else {
          iVar50 = iVar60;
          if (uVar17 != 0) {
            iVar51 = piVar30[lVar27];
            iVar50 = *piVar32;
            iVar52 = piVar28[lVar27];
            *pdVar35 = (double)(iVar50 + iVar52);
            *piVar32 = (iVar50 + iVar52) - iVar51;
            iVar50 = iVar18;
            if (uVar17 != 1) {
              iVar51 = piVar30[iVar18];
              iVar50 = *piVar46;
              iVar52 = piVar28[iVar18];
              param_3[iVar18] = (double)(iVar50 + iVar52);
              *piVar46 = (iVar50 + iVar52) - iVar51;
              iVar50 = iVar7;
              if (uVar17 == 3) {
                iVar51 = piVar28[iVar7];
                iVar50 = *piVar12;
                iVar52 = piVar30[iVar7];
                param_3[iVar7] = (double)(iVar50 + iVar51);
                *piVar12 = (iVar50 + iVar51) - iVar52;
                iVar50 = iVar60 + 3;
              }
            }
            if (uVar4 == uVar17) goto joined_r0x0020ab08;
          }
          if (2 < uVar5) {
            uVar42 = 0;
            piVar23 = __src_00 + (ulong)uVar17 + lVar27;
            piVar36 = __src_00 + lVar27 + (ulong)uVar17;
            puVar37 = (undefined8 *)((long)param_3 + lVar1);
            piVar41 = piVar28 + (ulong)uVar17 + lVar27;
            piVar47 = piVar30 + (ulong)uVar17 + lVar27;
            do {
              uVar42 = uVar42 + 1;
              uVar61 = *(undefined8 *)(piVar47 + 2);
              uVar48 = *(undefined8 *)piVar47;
              iVar51 = *piVar41 + (int)*(undefined8 *)piVar36;
              iVar52 = piVar41[1] + (int)((ulong)*(undefined8 *)piVar36 >> 0x20);
              iVar53 = piVar41[2] + (int)*(undefined8 *)(piVar36 + 2);
              iVar54 = piVar41[3] + (int)((ulong)*(undefined8 *)(piVar36 + 2) >> 0x20);
              auVar64._0_8_ = (long)iVar51;
              auVar64._8_8_ = (long)iVar52;
              auVar57._0_8_ = (long)iVar53;
              auVar57._8_8_ = (long)iVar54;
              auVar63 = NEON_scvtf(auVar64,8);
              puVar37[1] = auVar63._8_8_;
              *puVar37 = auVar63._0_8_;
              auVar63 = NEON_scvtf(auVar57,8);
              puVar37[3] = auVar63._8_8_;
              puVar37[2] = auVar63._0_8_;
              *(ulong *)(piVar23 + 2) =
                   CONCAT44(iVar54 - (int)((ulong)uVar61 >> 0x20),iVar53 - (int)uVar61);
              *(ulong *)piVar23 =
                   CONCAT44(iVar52 - (int)((ulong)uVar48 >> 0x20),iVar51 - (int)uVar48);
              piVar23 = piVar23 + 4;
              piVar36 = piVar36 + 4;
              puVar37 = puVar37 + 4;
              piVar41 = piVar41 + 4;
              piVar47 = piVar47 + 4;
            } while (uVar42 < uVar16);
            iVar50 = iVar50 + iVar71;
            if (iVar71 == iVar20) goto joined_r0x0020ab08;
          }
          iVar51 = iVar50 + 1;
          iVar52 = __src_00[iVar50];
          iVar53 = piVar28[iVar50];
          iVar54 = piVar30[iVar50];
          param_3[iVar50] = (double)(iVar52 + iVar53);
          __src_00[iVar50] = (iVar52 + iVar53) - iVar54;
          if (iVar51 < (int)param_6) {
            iVar50 = iVar50 + 2;
            iVar52 = piVar28[iVar51];
            iVar53 = __src_00[iVar51];
            iVar54 = piVar30[iVar51];
            param_3[iVar51] = (double)(iVar53 + iVar52);
            __src_00[iVar51] = (iVar53 + iVar52) - iVar54;
            if (iVar50 < (int)param_6) {
              iVar51 = __src_00[iVar50];
              iVar52 = piVar28[iVar50];
              iVar53 = piVar30[iVar50];
              param_3[iVar50] = (double)(iVar51 + iVar52);
              __src_00[iVar50] = (iVar51 + iVar52) - iVar53;
            }
          }
        }
      }
    }
    else {
      if (0 < iVar6) {
        if (((uVar2 < 3 ||
             __src_00 < (int *)((long)param_3 + lVar69) && param_3 < __src_00 + (ulong)uVar2 * 2) ||
             __src_00 < piVar28 + 8 && piVar28 < piVar25) ||
           (__src_00 < piVar30 + 8 && piVar30 < piVar25)) {
          piVar23 = __src_00;
          piVar36 = piVar30 + 1;
          pdVar35 = param_3;
          piVar41 = piVar28 + 1;
          do {
            iVar50 = piVar41[-1];
            iVar51 = piVar23[1];
            piVar47 = piVar41 + 2;
            iVar13 = *piVar41;
            iVar52 = *piVar23;
            iVar53 = piVar36[-1];
            iVar54 = *piVar36;
            pdVar35[1] = dVar55 * (double)(iVar51 + iVar13);
            *pdVar35 = dVar55 * (double)(iVar52 + iVar50);
            *piVar23 = (iVar52 + iVar50) - iVar53;
            piVar23[1] = (iVar51 + iVar13) - iVar54;
            piVar23 = piVar23 + 2;
            piVar36 = piVar36 + 2;
            pdVar35 = pdVar35 + 2;
            piVar41 = piVar47;
          } while (piVar47 != piVar28 + (ulong)uVar15 * 2 + 3);
        }
        else {
          if (1 < uVar14) {
            uVar42 = 0;
            pdVar35 = param_3;
            piVar23 = piVar30;
            piVar36 = piVar28;
            piVar41 = __src_00;
            do {
              uVar42 = uVar42 + 1;
              uVar61 = *(undefined8 *)(piVar23 + 2);
              uVar48 = *(undefined8 *)piVar23;
              iVar50 = *piVar41 + (int)*(undefined8 *)piVar36;
              iVar51 = piVar41[1] + (int)((ulong)*(undefined8 *)piVar36 >> 0x20);
              iVar52 = piVar41[2] + (int)*(undefined8 *)(piVar36 + 2);
              iVar53 = piVar41[3] + (int)((ulong)*(undefined8 *)(piVar36 + 2) >> 0x20);
              auVar65._0_8_ = (long)iVar50;
              auVar65._8_8_ = (long)iVar51;
              auVar58._0_8_ = (long)iVar52;
              auVar58._8_8_ = (long)iVar53;
              auVar66 = NEON_scvtf(auVar65,8);
              auVar63 = NEON_scvtf(auVar58,8);
              pdVar35[1] = dVar55 * auVar66._8_8_;
              *pdVar35 = dVar55 * auVar66._0_8_;
              pdVar35[3] = dVar55 * auVar63._8_8_;
              pdVar35[2] = dVar55 * auVar63._0_8_;
              *(ulong *)(piVar41 + 2) =
                   CONCAT44(iVar53 - (int)((ulong)uVar61 >> 0x20),iVar52 - (int)uVar61);
              *(ulong *)piVar41 =
                   CONCAT44(iVar51 - (int)((ulong)uVar48 >> 0x20),iVar50 - (int)uVar48);
              pdVar35 = pdVar35 + 4;
              piVar23 = piVar23 + 4;
              piVar36 = piVar36 + 4;
              piVar41 = piVar41 + 4;
            } while (uVar42 < uVar3);
            if (uVar2 == uVar3 * 2) goto LAB_0020ac68;
          }
          iVar50 = *piVar11;
          iVar52 = piVar28[lVar22];
          iVar53 = piVar28[lVar22 + 1];
          iVar51 = *piVar34;
          iVar54 = piVar30[lVar22 + 1];
          iVar13 = piVar30[lVar22];
          *(double *)((long)param_3 + lVar49) = dVar55 * (double)(iVar50 + iVar52);
          *(double *)((long)param_3 + lVar49 + 8) = dVar55 * (double)(iVar51 + iVar53);
          *piVar11 = (iVar50 + iVar52) - iVar13;
          *piVar34 = (iVar51 + iVar53) - iVar54;
        }
      }
LAB_0020ac68:
      if (iVar60 < (int)param_6) {
        pdVar35 = (double *)((long)param_3 + lVar68);
        if (((uVar4 < 7 ||
             piVar10 < (int *)((long)param_3 + lVar70) && pdVar35 < __src_00 + lVar27 + (ulong)uVar4
             ) || piVar10 < piVar28 + lVar45 && piVar28 + lVar27 < piVar29) ||
           (piVar10 < piVar30 + lVar45 && piVar30 + lVar27 < piVar29)) {
          lVar31 = 0;
          do {
            iVar51 = (piVar30 + lVar27)[lVar31];
            iVar50 = piVar10[lVar31] + (piVar28 + lVar27)[lVar31];
            pdVar35[lVar31] = dVar55 * (double)iVar50;
            piVar10[lVar31] = iVar50 - iVar51;
            lVar31 = lVar31 + 1;
          } while (lVar31 != lVar8);
        }
        else {
          iVar50 = iVar60;
          if (uVar17 != 0) {
            iVar51 = piVar30[lVar27];
            iVar50 = *piVar32;
            iVar52 = piVar28[lVar27];
            *pdVar35 = dVar55 * (double)(iVar50 + iVar52);
            *piVar32 = (iVar50 + iVar52) - iVar51;
            iVar50 = iVar18;
            if (uVar17 != 1) {
              iVar51 = piVar30[iVar18];
              iVar50 = *piVar46;
              iVar52 = piVar28[iVar18];
              param_3[iVar18] = dVar55 * (double)(iVar50 + iVar52);
              *piVar46 = (iVar50 + iVar52) - iVar51;
              iVar50 = iVar7;
              if (uVar17 == 3) {
                iVar51 = piVar28[iVar7];
                iVar50 = *piVar12;
                iVar52 = piVar30[iVar7];
                param_3[iVar7] = dVar55 * (double)(iVar50 + iVar51);
                *piVar12 = (iVar50 + iVar51) - iVar52;
                iVar50 = iVar60 + 3;
              }
            }
            if (uVar4 == uVar17) goto joined_r0x0020ab08;
          }
          if (2 < uVar5) {
            uVar42 = 0;
            piVar23 = __src_00 + lVar27 + (ulong)uVar17;
            pdVar35 = (double *)((long)param_3 + lVar1);
            piVar36 = piVar30 + (ulong)uVar17 + lVar27;
            piVar41 = __src_00 + (ulong)uVar17 + lVar27;
            piVar47 = piVar28 + (ulong)uVar17 + lVar27;
            do {
              uVar42 = uVar42 + 1;
              uVar61 = *(undefined8 *)(piVar36 + 2);
              uVar48 = *(undefined8 *)piVar36;
              iVar51 = *piVar47 + (int)*(undefined8 *)piVar23;
              iVar52 = piVar47[1] + (int)((ulong)*(undefined8 *)piVar23 >> 0x20);
              iVar53 = piVar47[2] + (int)*(undefined8 *)(piVar23 + 2);
              iVar54 = piVar47[3] + (int)((ulong)*(undefined8 *)(piVar23 + 2) >> 0x20);
              auVar67._0_8_ = (long)iVar51;
              auVar67._8_8_ = (long)iVar52;
              auVar59._0_8_ = (long)iVar53;
              auVar59._8_8_ = (long)iVar54;
              auVar66 = NEON_scvtf(auVar67,8);
              auVar63 = NEON_scvtf(auVar59,8);
              pdVar35[1] = dVar55 * auVar66._8_8_;
              *pdVar35 = dVar55 * auVar66._0_8_;
              pdVar35[3] = dVar55 * auVar63._8_8_;
              pdVar35[2] = dVar55 * auVar63._0_8_;
              *(ulong *)(piVar41 + 2) =
                   CONCAT44(iVar54 - (int)((ulong)uVar61 >> 0x20),iVar53 - (int)uVar61);
              *(ulong *)piVar41 =
                   CONCAT44(iVar52 - (int)((ulong)uVar48 >> 0x20),iVar51 - (int)uVar48);
              piVar23 = piVar23 + 4;
              pdVar35 = pdVar35 + 4;
              piVar36 = piVar36 + 4;
              piVar41 = piVar41 + 4;
              piVar47 = piVar47 + 4;
            } while (uVar42 < uVar16);
            iVar50 = iVar50 + iVar71;
            if (iVar71 == iVar20) goto joined_r0x0020ab08;
          }
          iVar51 = iVar50 + 1;
          iVar52 = piVar28[iVar50];
          iVar53 = __src_00[iVar50];
          iVar54 = piVar30[iVar50];
          param_3[iVar50] = dVar55 * (double)(iVar53 + iVar52);
          __src_00[iVar50] = (iVar53 + iVar52) - iVar54;
          if (iVar51 < (int)param_6) {
            iVar50 = iVar50 + 2;
            iVar52 = piVar28[iVar51];
            iVar53 = __src_00[iVar51];
            iVar54 = piVar30[iVar51];
            param_3[iVar51] = dVar55 * (double)(iVar53 + iVar52);
            __src_00[iVar51] = (iVar53 + iVar52) - iVar54;
            if (iVar50 < (int)param_6) {
              iVar51 = piVar28[iVar50];
              iVar52 = __src_00[iVar50];
              iVar53 = piVar30[iVar50];
              param_3[iVar50] = dVar55 * (double)(iVar52 + iVar51);
              __src_00[iVar50] = (iVar52 + iVar51) - iVar53;
            }
          }
        }
      }
    }
joined_r0x0020ab08:
    param_2 = param_2 + 1;
    if (param_2 == puVar9) {
      s_sumCount____ksize_1_0045d530[0] = (char)s_sumCount____ksize_1_0045d530._0_8_;
      s_sumCount____ksize_1_0045d530[1] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,1);
      s_sumCount____ksize_1_0045d530[2] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,2);
      s_sumCount____ksize_1_0045d530[3] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,3);
      s_sumCount____ksize_1_0045d530[4] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,4);
      s_sumCount____ksize_1_0045d530[5] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,5);
      s_sumCount____ksize_1_0045d530[6] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,6);
      s_sumCount____ksize_1_0045d530[7] = SUB81(s_sumCount____ksize_1_0045d530._0_8_,7);
      s_sumCount____ksize_1_0045d530[8] = (char)s_sumCount____ksize_1_0045d530._8_8_;
      s_sumCount____ksize_1_0045d530[9] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,1);
      s_sumCount____ksize_1_0045d530[10] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,2);
      s_sumCount____ksize_1_0045d530[0xb] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,3);
      s_sumCount____ksize_1_0045d530[0xc] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,4);
      s_sumCount____ksize_1_0045d530[0xd] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,5);
      s_sumCount____ksize_1_0045d530[0xe] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,6);
      s_sumCount____ksize_1_0045d530[0xf] = SUB81(s_sumCount____ksize_1_0045d530._8_8_,7);
      s_sumCount____ksize_1_0045d530[0x10] = (char)s_sumCount____ksize_1_0045d530._16_2_;
      s_sumCount____ksize_1_0045d530[0x11] = SUB21(s_sumCount____ksize_1_0045d530._16_2_,1);
      return;
    }
    param_3 = (double *)((long)param_3 + (long)param_4);
    piVar28 = (int *)*param_2;
    piVar30 = (int *)param_2[1 - *(int *)(param_1 + 8)];
  } while( true );
}


==================================================================

### FUNC 0020b374 (2220 bytes) name=FUN_0020b374

void FUN_0020b374(long param_1,ulong *param_2,long param_3,int param_4,int param_5,uint param_6)

{
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  ulong uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  char cVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  double *pdVar21;
  char *pcVar22;
  void *__dest;
  double *pdVar23;
  uint uVar24;
  double *pdVar25;
  double *pdVar26;
  ulong uVar27;
  void *__src;
  size_t __n;
  int iVar28;
  double *pdVar29;
  int iVar30;
  ulong *puVar31;
  double *__src_00;
  undefined1 *puVar32;
  ulong uVar33;
  size_t sVar34;
  undefined1 *puVar35;
  ulong uVar36;
  long lVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  int iVar44;
  undefined8 local_10;
  undefined8 local_8;
  
  __src_00 = *(double **)(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar34 = (long)__src - (long)__src_00;
  uVar27 = (long)sVar34 >> 3;
  dVar43 = *(double *)(param_1 + 0x10);
  if ((uint)uVar27 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar28 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar28 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar22 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar13 = s_sumCount____ksize_1_0045d530[0x12];
        uVar12 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar11 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar22 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar22[0x12] = cVar13;
        *(undefined8 *)pcVar22 = uVar11;
        *(undefined8 *)(pcVar22 + 8) = uVar12;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = double; T = unsigned char; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar28 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar28 + -1;
      goto LAB_0020b62c;
    }
    sVar34 = -(ulong)(param_6 >> 0x1f) & 0xfffffff800000000 | (ulong)param_6 << 3;
  }
  else {
    uVar36 = (ulong)(int)param_6;
    if (uVar27 < uVar36) {
      uVar10 = uVar36 - uVar27;
      if (uVar10 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 3) < uVar10) {
          if (0x1fffffffffffffff - uVar27 < uVar10) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar2 = uVar10;
          if (uVar10 < uVar27) {
            uVar2 = uVar27;
          }
          uVar2 = uVar2 + uVar27;
          if ((uVar2 < uVar27) || (0x1fffffffffffffff < uVar2)) {
            uVar33 = 0xfffffffffffffff8;
LAB_0020bbd4:
            pdVar23 = operator_new(uVar33);
            __src_00 = *(double **)(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar27 = (long)__n >> 3;
          }
          else {
            uVar33 = uVar2 * 8;
            if (uVar2 != 0) goto LAB_0020bbd4;
            uVar33 = 0;
            pdVar23 = (double *)0x0;
            __n = sVar34;
          }
          memset((void *)((long)pdVar23 + sVar34),0,uVar10 * 8);
          if (uVar27 != 0) {
            memmove(pdVar23,__src_00,__n);
          }
          __dest = (void *)((long)pdVar23 + uVar10 * 8 + __n);
          sVar34 = *(long *)(param_1 + 0x28) - (long)__src;
          if ((long)sVar34 >> 3 != 0) {
            __dest = memmove(__dest,__src,sVar34);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(double **)(param_1 + 0x20) = pdVar23;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar34;
          *(ulong *)(param_1 + 0x30) = (long)pdVar23 + uVar33;
          __src_00 = pdVar23;
        }
        else {
          memset(__src,0,uVar10 * 8);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar10 * 8);
        }
      }
    }
    else if (uVar36 < uVar27) {
      *(double **)(param_1 + 0x28) = __src_00 + uVar36;
    }
    sVar34 = uVar36 << 3;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar34);
  iVar44 = *(int *)(param_1 + 0x18);
  iVar28 = *(int *)(param_1 + 8);
  if (iVar44 < iVar28 + -1) {
    iVar7 = param_6 - 1;
    uVar6 = param_6 - 2 >> 1;
    uVar15 = uVar6 + 1;
    uVar4 = uVar15 * 2;
    if (iVar7 < 1) {
      uVar4 = 0;
    }
    uVar8 = param_6 - uVar4;
    lVar16 = (long)(int)uVar4;
    pdVar23 = __src_00 + lVar16;
    uVar1 = (uint)((ulong)pdVar23 >> 3) & 1;
    uVar3 = uVar8;
    if (uVar1 < uVar8) {
      uVar3 = uVar1;
    }
    iVar9 = uVar8 - uVar3;
    uVar1 = (iVar9 - 2U >> 1) + 1;
    iVar30 = iVar44 + 1;
    iVar5 = uVar1 * 2;
    puVar31 = param_2;
    do {
      pdVar26 = (double *)*puVar31;
      if (0 < iVar7) {
        pdVar21 = __src_00;
        pdVar25 = pdVar26;
        if ((__src_00 < pdVar26 + 4 && pdVar26 < __src_00 + 4) || (uVar15 < 4)) {
          do {
            dVar38 = *pdVar25;
            pdVar29 = pdVar21 + 2;
            pdVar21[1] = pdVar21[1] + pdVar25[1];
            *pdVar21 = *pdVar21 + dVar38;
            pdVar21 = pdVar29;
            pdVar25 = pdVar25 + 2;
          } while (pdVar29 != __src_00 + ((ulong)uVar6 + 1) * 2);
        }
        else {
          uVar14 = 0;
          do {
            uVar14 = uVar14 + 1;
            dVar38 = *pdVar25;
            pdVar21[1] = pdVar21[1] + pdVar25[1];
            *pdVar21 = *pdVar21 + dVar38;
            pdVar21 = pdVar21 + 2;
            pdVar25 = pdVar25 + 2;
          } while (uVar14 < uVar15);
        }
      }
      if ((int)uVar4 < (int)param_6) {
        if ((pdVar23 < pdVar26 + lVar16 + 2 && pdVar26 + lVar16 < __src_00 + lVar16 + 2) ||
           (uVar8 < 8)) {
          lVar20 = 0;
          do {
            *(double *)((long)pdVar23 + lVar20) =
                 *(double *)((long)pdVar23 + lVar20) +
                 *(double *)((long)(pdVar26 + lVar16) + lVar20);
            lVar20 = lVar20 + 8;
          } while (lVar20 != ((ulong)(iVar7 - uVar4) + 1) * 8);
        }
        else {
          uVar14 = uVar4;
          if (uVar3 != 0) {
            __src_00[lVar16] = __src_00[lVar16] + pdVar26[lVar16];
            uVar14 = uVar4 + 1;
          }
          if (iVar9 != 1) {
            uVar24 = 0;
            pdVar21 = __src_00 + (ulong)uVar3 + lVar16;
            pdVar25 = __src_00 + (ulong)uVar3 + lVar16;
            pdVar29 = pdVar26 + (ulong)uVar3 + lVar16;
            do {
              dVar39 = *pdVar29;
              uVar24 = uVar24 + 1;
              dVar38 = *pdVar25;
              pdVar21[1] = pdVar25[1] + pdVar29[1];
              *pdVar21 = dVar38 + dVar39;
              pdVar21 = pdVar21 + 2;
              pdVar25 = pdVar25 + 2;
              pdVar29 = pdVar29 + 2;
            } while (uVar24 < uVar1);
            uVar14 = uVar14 + iVar5;
            if (iVar5 == iVar9) goto LAB_0020b600;
          }
          uVar27 = -(ulong)(uVar14 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar14 << 3;
          *(double *)((long)__src_00 + uVar27) =
               *(double *)((long)__src_00 + uVar27) + *(double *)((long)pdVar26 + uVar27);
        }
      }
LAB_0020b600:
      puVar31 = puVar31 + 1;
      *(int *)(param_1 + 0x18) = iVar30;
      iVar30 = iVar30 + 1;
    } while (iVar30 != iVar28);
    param_2 = param_2 + (ulong)(uint)((iVar28 + -2) - iVar44) + 1;
  }
LAB_0020b62c:
  if (param_5 != 0) {
    iVar7 = param_6 - 1;
    uVar15 = param_6 - 2 >> 1;
    puVar35 = (undefined1 *)(param_3 + 1);
    puVar31 = param_2 + (ulong)(param_5 - 1) + 1;
    lVar16 = (ulong)uVar15 * 0x10 + 0x18;
    iVar44 = (uVar15 + 1) * 2;
    if (iVar7 < 1) {
      iVar44 = 0;
    }
    lVar17 = (long)iVar44;
    lVar20 = (ulong)(uint)(iVar7 - iVar44) + 1;
    lVar37 = NEON_shl(lVar17,3);
    while( true ) {
      uVar36 = *param_2;
      uVar27 = param_2[1 - iVar28];
      if (dVar43 == 1.0) {
        if (0 < iVar7) {
          pdVar23 = (double *)(uVar36 + 8);
          pdVar26 = __src_00;
          pdVar21 = (double *)(uVar27 + 8);
          puVar32 = puVar35;
          do {
            dVar38 = pdVar23[-1];
            dVar41 = *pdVar26;
            dVar42 = pdVar26[1];
            dVar39 = *pdVar23;
            lVar18 = lrint(dVar41 + dVar38);
            uVar15 = (uint)lVar18;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar32[-1] = (char)uVar15;
            lVar18 = lrint(dVar42 + dVar39);
            uVar15 = (uint)lVar18;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            *puVar32 = (char)uVar15;
            pdVar23 = pdVar23 + 2;
            dVar40 = pdVar21[-1];
            pdVar26[1] = (dVar42 + dVar39) - *pdVar21;
            *pdVar26 = (dVar41 + dVar38) - dVar40;
            pdVar26 = pdVar26 + 2;
            pdVar21 = pdVar21 + 2;
            puVar32 = puVar32 + 2;
          } while (pdVar23 != (double *)(uVar36 + lVar16));
        }
        if (iVar44 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar38 = *(double *)((long)__src_00 + lVar18 * 8 + lVar37) +
                     *(double *)(uVar36 + lVar37 + lVar18 * 8);
            lVar19 = lrint(dVar38);
            uVar15 = (uint)lVar19;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar35[lVar18 + lVar17 + -1] = (char)uVar15;
            *(double *)((long)__src_00 + lVar18 * 8 + lVar37) =
                 dVar38 - *(double *)(uVar27 + lVar37 + lVar18 * 8);
            lVar18 = lVar18 + 1;
          } while (lVar20 != lVar18);
        }
      }
      else {
        if (0 < iVar7) {
          pdVar23 = (double *)(uVar36 + 8);
          puVar32 = puVar35;
          pdVar26 = (double *)(uVar27 + 8);
          pdVar21 = __src_00;
          do {
            dVar38 = pdVar23[-1];
            dVar41 = *pdVar21;
            dVar42 = pdVar21[1];
            dVar39 = *pdVar23;
            lVar18 = lrint(dVar43 * (dVar41 + dVar38));
            uVar15 = (uint)lVar18;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar32[-1] = (char)uVar15;
            lVar18 = lrint(dVar43 * (dVar42 + dVar39));
            uVar15 = (uint)lVar18;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            *puVar32 = (char)uVar15;
            pdVar23 = pdVar23 + 2;
            dVar40 = pdVar26[-1];
            pdVar21[1] = (dVar42 + dVar39) - *pdVar26;
            *pdVar21 = (dVar41 + dVar38) - dVar40;
            puVar32 = puVar32 + 2;
            pdVar26 = pdVar26 + 2;
            pdVar21 = pdVar21 + 2;
          } while (pdVar23 != (double *)(uVar36 + lVar16));
        }
        if (iVar44 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar38 = *(double *)((long)__src_00 + lVar18 * 8 + lVar37) +
                     *(double *)(uVar36 + lVar37 + lVar18 * 8);
            lVar19 = lrint(dVar43 * dVar38);
            uVar15 = (uint)lVar19;
            if (0xff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar35[lVar18 + lVar17 + -1] = (char)uVar15;
            *(double *)((long)__src_00 + lVar18 * 8 + lVar37) =
                 dVar38 - *(double *)(uVar27 + lVar37 + lVar18 * 8);
            lVar18 = lVar18 + 1;
          } while (lVar18 != lVar20);
        }
      }
      if (param_2 + 1 == puVar31) break;
      puVar35 = puVar35 + param_4;
      param_2 = param_2 + 1;
      iVar28 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 0020bc34 (2216 bytes) name=FUN_0020bc34

void FUN_0020bc34(long param_1,ulong *param_2,long param_3,int param_4,int param_5,uint param_6)

{
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  ulong uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  char cVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  double *pdVar21;
  char *pcVar22;
  void *__dest;
  double *pdVar23;
  uint uVar24;
  long lVar25;
  double *pdVar26;
  double *pdVar27;
  ulong uVar28;
  size_t __n;
  int iVar29;
  double *pdVar30;
  int iVar31;
  ulong *puVar32;
  double *__src;
  undefined2 *puVar33;
  ulong uVar34;
  size_t sVar35;
  ulong uVar36;
  undefined2 *puVar37;
  void *__src_00;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  int iVar43;
  double dVar44;
  double dVar45;
  undefined8 local_10;
  undefined8 local_8;
  
  __src = *(double **)(param_1 + 0x20);
  __src_00 = *(void **)(param_1 + 0x28);
  sVar35 = (long)__src_00 - (long)__src;
  uVar28 = (long)sVar35 >> 3;
  dVar45 = *(double *)(param_1 + 0x10);
  if ((uint)uVar28 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar29 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar29 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar22 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar13 = s_sumCount____ksize_1_0045d530[0x12];
        uVar12 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar11 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar22 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar22[0x12] = cVar13;
        *(undefined8 *)pcVar22 = uVar11;
        *(undefined8 *)(pcVar22 + 8) = uVar12;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ColumnSum<ST, T>::operator()(const uchar**, uchar*, int, int, int) [with ST = double; T = short unsigned int; uchar = unsigned char]"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x99);
        cv::String::deallocate((String *)&local_10);
        iVar29 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar29 + -1;
      goto LAB_0020bee4;
    }
    sVar35 = -(ulong)(param_6 >> 0x1f) & 0xfffffff800000000 | (ulong)param_6 << 3;
  }
  else {
    uVar36 = (ulong)(int)param_6;
    if (uVar28 < uVar36) {
      uVar10 = uVar36 - uVar28;
      if (uVar10 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src_00 >> 3) < uVar10) {
          if (0x1fffffffffffffff - uVar28 < uVar10) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar2 = uVar10;
          if (uVar10 < uVar28) {
            uVar2 = uVar28;
          }
          uVar2 = uVar2 + uVar28;
          if ((uVar2 < uVar28) || (0x1fffffffffffffff < uVar2)) {
            uVar34 = 0xfffffffffffffff8;
LAB_0020c498:
            pdVar23 = operator_new(uVar34);
            __src = *(double **)(param_1 + 0x20);
            __n = (long)__src_00 - (long)__src;
            uVar28 = (long)__n >> 3;
          }
          else {
            uVar34 = uVar2 * 8;
            if (uVar2 != 0) goto LAB_0020c498;
            uVar34 = 0;
            pdVar23 = (double *)0x0;
            __n = sVar35;
          }
          memset((void *)((long)pdVar23 + sVar35),0,uVar10 * 8);
          if (uVar28 != 0) {
            memmove(pdVar23,__src,__n);
          }
          __dest = (void *)((long)pdVar23 + uVar10 * 8 + __n);
          sVar35 = *(long *)(param_1 + 0x28) - (long)__src_00;
          if ((long)sVar35 >> 3 != 0) {
            __dest = memmove(__dest,__src_00,sVar35);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(double **)(param_1 + 0x20) = pdVar23;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar35;
          *(ulong *)(param_1 + 0x30) = (long)pdVar23 + uVar34;
          __src = pdVar23;
        }
        else {
          memset(__src_00,0,uVar10 * 8);
          *(void **)(param_1 + 0x28) = (void *)((long)__src_00 + uVar10 * 8);
        }
      }
    }
    else if (uVar36 < uVar28) {
      *(double **)(param_1 + 0x28) = __src + uVar36;
    }
    sVar35 = uVar36 << 3;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src,0,sVar35);
  iVar43 = *(int *)(param_1 + 0x18);
  iVar29 = *(int *)(param_1 + 8);
  if (iVar43 < iVar29 + -1) {
    iVar7 = param_6 - 1;
    uVar6 = param_6 - 2 >> 1;
    uVar15 = uVar6 + 1;
    uVar4 = uVar15 * 2;
    if (iVar7 < 1) {
      uVar4 = 0;
    }
    uVar8 = param_6 - uVar4;
    lVar16 = (long)(int)uVar4;
    pdVar23 = __src + lVar16;
    uVar1 = (uint)((ulong)pdVar23 >> 3) & 1;
    uVar3 = uVar8;
    if (uVar1 < uVar8) {
      uVar3 = uVar1;
    }
    iVar9 = uVar8 - uVar3;
    uVar1 = (iVar9 - 2U >> 1) + 1;
    iVar31 = iVar43 + 1;
    iVar5 = uVar1 * 2;
    puVar32 = param_2;
    do {
      pdVar27 = (double *)*puVar32;
      if (0 < iVar7) {
        pdVar21 = __src;
        pdVar26 = pdVar27;
        if ((__src < pdVar27 + 4 && pdVar27 < __src + 4) || (uVar15 < 4)) {
          do {
            dVar38 = *pdVar26;
            pdVar30 = pdVar21 + 2;
            pdVar21[1] = pdVar21[1] + pdVar26[1];
            *pdVar21 = *pdVar21 + dVar38;
            pdVar21 = pdVar30;
            pdVar26 = pdVar26 + 2;
          } while (pdVar30 != __src + ((ulong)uVar6 + 1) * 2);
        }
        else {
          uVar14 = 0;
          do {
            uVar14 = uVar14 + 1;
            dVar38 = *pdVar26;
            pdVar21[1] = pdVar21[1] + pdVar26[1];
            *pdVar21 = *pdVar21 + dVar38;
            pdVar21 = pdVar21 + 2;
            pdVar26 = pdVar26 + 2;
          } while (uVar14 < uVar15);
        }
      }
      if ((int)uVar4 < (int)param_6) {
        if ((pdVar23 < pdVar27 + lVar16 + 2 && pdVar27 + lVar16 < __src + lVar16 + 2) || (uVar8 < 8)
           ) {
          lVar20 = 0;
          do {
            *(double *)((long)pdVar23 + lVar20) =
                 *(double *)((long)pdVar23 + lVar20) +
                 *(double *)((long)(pdVar27 + lVar16) + lVar20);
            lVar20 = lVar20 + 8;
          } while (lVar20 != ((ulong)(iVar7 - uVar4) + 1) * 8);
        }
        else {
          uVar14 = uVar4;
          if (uVar3 != 0) {
            __src[lVar16] = __src[lVar16] + pdVar27[lVar16];
            uVar14 = uVar4 + 1;
          }
          if (iVar9 != 1) {
            uVar24 = 0;
            pdVar21 = __src + (ulong)uVar3 + lVar16;
            pdVar26 = __src + (ulong)uVar3 + lVar16;
            pdVar30 = pdVar27 + (ulong)uVar3 + lVar16;
            do {
              dVar39 = *pdVar30;
              uVar24 = uVar24 + 1;
              dVar38 = *pdVar26;
              pdVar21[1] = pdVar26[1] + pdVar30[1];
              *pdVar21 = dVar38 + dVar39;
              pdVar21 = pdVar21 + 2;
              pdVar26 = pdVar26 + 2;
              pdVar30 = pdVar30 + 2;
            } while (uVar24 < uVar1);
            uVar14 = uVar14 + iVar5;
            if (iVar5 == iVar9) goto LAB_0020beb8;
          }
          uVar28 = -(ulong)(uVar14 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar14 << 3;
          *(double *)((long)__src + uVar28) =
               *(double *)((long)__src + uVar28) + *(double *)((long)pdVar27 + uVar28);
        }
      }
LAB_0020beb8:
      puVar32 = puVar32 + 1;
      *(int *)(param_1 + 0x18) = iVar31;
      iVar31 = iVar31 + 1;
    } while (iVar31 != iVar29);
    param_2 = param_2 + (ulong)(uint)((iVar29 + -2) - iVar43) + 1;
  }
LAB_0020bee4:
  if (param_5 != 0) {
    iVar7 = param_6 - 1;
    uVar15 = param_6 - 2 >> 1;
    puVar37 = (undefined2 *)(param_3 + 2);
    puVar32 = param_2 + (ulong)(param_5 - 1) + 1;
    lVar16 = (ulong)uVar15 * 0x10 + 0x18;
    iVar43 = (uVar15 + 1) * 2;
    if (iVar7 < 1) {
      iVar43 = 0;
    }
    lVar17 = (long)iVar43;
    lVar20 = (ulong)(uint)(iVar7 - iVar43) + 1;
    lVar25 = lVar17 * 8;
    while( true ) {
      uVar28 = *param_2;
      uVar36 = param_2[1 - iVar29];
      if (dVar45 == 1.0) {
        if (0 < iVar7) {
          pdVar23 = (double *)(uVar36 + 8);
          pdVar27 = (double *)(uVar28 + 8);
          pdVar21 = __src;
          puVar33 = puVar37;
          do {
            dVar38 = pdVar27[-1];
            dVar42 = *pdVar21;
            dVar44 = pdVar21[1];
            dVar39 = *pdVar27;
            lVar18 = lrint(dVar42 + dVar38);
            uVar15 = (uint)lVar18;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar33[-1] = (short)uVar15;
            lVar18 = lrint(dVar44 + dVar39);
            uVar15 = (uint)lVar18;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            dVar41 = *pdVar23;
            dVar40 = pdVar23[-1];
            *puVar33 = (short)uVar15;
            pdVar27 = pdVar27 + 2;
            pdVar23 = pdVar23 + 2;
            pdVar21[1] = (dVar44 + dVar39) - dVar41;
            *pdVar21 = (dVar42 + dVar38) - dVar40;
            pdVar21 = pdVar21 + 2;
            puVar33 = puVar33 + 2;
          } while (pdVar27 != (double *)(uVar28 + lVar16));
        }
        if (iVar43 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar38 = __src[lVar17 + lVar18] + *(double *)(uVar28 + lVar25 + lVar18 * 8);
            lVar19 = lrint(dVar38);
            uVar15 = (uint)lVar19;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            dVar39 = *(double *)(uVar36 + lVar25 + lVar18 * 8);
            puVar37[lVar17 + lVar18 + -1] = (short)uVar15;
            __src[lVar17 + lVar18] = dVar38 - dVar39;
            lVar18 = lVar18 + 1;
          } while (lVar20 != lVar18);
        }
      }
      else {
        if (0 < iVar7) {
          pdVar23 = (double *)(uVar36 + 8);
          pdVar27 = (double *)(uVar28 + 8);
          puVar33 = puVar37;
          pdVar21 = __src;
          do {
            dVar38 = pdVar27[-1];
            dVar42 = *pdVar21;
            dVar44 = pdVar21[1];
            dVar39 = *pdVar27;
            lVar18 = lrint(dVar45 * (dVar42 + dVar38));
            uVar15 = (uint)lVar18;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            puVar33[-1] = (short)uVar15;
            lVar18 = lrint(dVar45 * (dVar44 + dVar39));
            uVar15 = (uint)lVar18;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            dVar41 = *pdVar23;
            dVar40 = pdVar23[-1];
            *puVar33 = (short)uVar15;
            pdVar27 = pdVar27 + 2;
            pdVar23 = pdVar23 + 2;
            pdVar21[1] = (dVar44 + dVar39) - dVar41;
            *pdVar21 = (dVar42 + dVar38) - dVar40;
            puVar33 = puVar33 + 2;
            pdVar21 = pdVar21 + 2;
          } while (pdVar27 != (double *)(uVar28 + lVar16));
        }
        if (iVar43 < (int)param_6) {
          lVar18 = 0;
          do {
            dVar38 = __src[lVar17 + lVar18] + *(double *)(uVar28 + lVar25 + lVar18 * 8);
            lVar19 = lrint(dVar45 * dVar38);
            uVar15 = (uint)lVar19;
            if (0xffff < uVar15) {
              uVar15 = -(uint)(0 < (int)uVar15);
            }
            dVar39 = *(double *)(uVar36 + lVar25 + lVar18 * 8);
            puVar37[lVar17 + lVar18 + -1] = (short)uVar15;
            __src[lVar17 + lVar18] = dVar38 - dVar39;
            lVar18 = lVar18 + 1;
          } while (lVar18 != lVar20);
        }
      }
      if (param_2 + 1 == puVar32) break;
      puVar37 = (undefined2 *)((long)puVar37 + (long)param_4);
      param_2 = param_2 + 1;
      iVar29 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 0020c4f0 (2520 bytes) name=FUN_0020c4f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0020c4f0(long param_1,long *param_2,undefined8 *param_3,int param_4,int param_5,
                 uint param_6)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  int *piVar15;
  int iVar16;
  char cVar17;
  uint uVar18;
  int iVar19;
  uint uVar20;
  ulong uVar21;
  long lVar22;
  long lVar23;
  char *pcVar24;
  void *__dest;
  undefined1 (*pauVar25) [16];
  int *piVar26;
  undefined8 *puVar27;
  undefined1 (*pauVar28) [16];
  long lVar29;
  int *piVar30;
  long lVar31;
  ulong uVar32;
  int *piVar33;
  void *__src;
  int *piVar34;
  size_t __n;
  long lVar35;
  undefined1 (*__src_00) [16];
  ulong uVar36;
  size_t sVar37;
  undefined8 *puVar38;
  ulong uVar39;
  int *piVar40;
  ulong uVar41;
  float fVar42;
  long lVar43;
  undefined8 uVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined8 uVar49;
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  int iVar54;
  int iVar55;
  int iVar56;
  int iVar57;
  int iVar58;
  int iVar59;
  int iVar60;
  int iVar61;
  undefined4 uVar62;
  undefined4 uVar63;
  undefined1 in_q4 [16];
  double dVar64;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar63 = in_q4._4_4_;
  uVar62 = in_q4._0_4_;
  __src_00 = *(undefined1 (**) [16])(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar37 = (long)__src - (long)__src_00;
  uVar32 = (long)sVar37 >> 2;
  dVar64 = *(double *)(param_1 + 0x10);
  if ((uint)uVar32 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar54 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar54 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar24 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar17 = s_sumCount____ksize_1_0045d530[0x12];
        uVar49 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar44 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar24 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar24[0x12] = cVar17;
        *(undefined8 *)pcVar24 = uVar44;
        *(undefined8 *)(pcVar24 + 8) = uVar49;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::ColumnSum<int, unsigned char>::operator()(const uchar**, uchar*, int, int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x10c);
        cv::String::deallocate((String *)&local_10);
        iVar54 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar54 + -1;
      goto LAB_0020c818;
    }
    sVar37 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar36 = (ulong)(int)param_6;
    if (uVar32 < uVar36) {
      uVar41 = uVar36 - uVar32;
      if (uVar41 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 2) < uVar41) {
          if (0x3fffffffffffffff - uVar32 < uVar41) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar39 = uVar41;
          if (uVar41 < uVar32) {
            uVar39 = uVar32;
          }
          uVar39 = uVar39 + uVar32;
          if ((uVar39 < uVar32) || (0x3fffffffffffffff < uVar39)) {
            uVar21 = 0xfffffffffffffffc;
LAB_0020ce7c:
            pauVar25 = operator_new(uVar21);
            __src_00 = *(undefined1 (**) [16])(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar32 = (long)__n >> 2;
          }
          else {
            uVar21 = uVar39 * 4;
            if (uVar39 != 0) goto LAB_0020ce7c;
            uVar21 = 0;
            pauVar25 = (undefined1 (*) [16])0x0;
            __n = sVar37;
          }
          memset((void *)((long)pauVar25 + sVar37),0,uVar41 * 4);
          if (uVar32 != 0) {
            memmove(pauVar25,__src_00,__n);
          }
          sVar37 = *(long *)(param_1 + 0x28) - (long)__src;
          __dest = (void *)((long)pauVar25 + uVar41 * 4 + __n);
          if ((long)sVar37 >> 2 != 0) {
            __dest = memmove(__dest,__src,sVar37);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(undefined1 (**) [16])(param_1 + 0x20) = pauVar25;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar37;
          *(undefined1 **)(param_1 + 0x30) = *pauVar25 + uVar21;
          __src_00 = pauVar25;
        }
        else {
          memset(__src,0,uVar41 * 4);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar41 * 4);
        }
      }
    }
    else if (uVar36 < uVar32) {
      *(undefined1 **)(param_1 + 0x28) = *__src_00 + uVar36 * 4;
    }
    sVar37 = uVar36 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar37);
  iVar54 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar54 + -1) {
    uVar20 = param_6 - 4 >> 2;
    uVar8 = (uVar20 + 1) * 4;
    if ((int)(param_6 - 3) < 1) {
      uVar8 = 0;
    }
    uVar1 = uVar8 + 1;
    lVar35 = (long)(int)uVar8;
    uVar2 = uVar8 + 2;
    lVar4 = lVar35 * 4;
    piVar30 = (int *)(*__src_00 + lVar4);
    uVar10 = param_6 - uVar8;
    uVar32 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar6 = -((uint)((ulong)piVar30 >> 2) & 3) & 3;
    uVar7 = uVar10;
    if (uVar6 < uVar10) {
      uVar7 = uVar6;
    }
    uVar41 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar6 = ((uVar10 - uVar7) - 4 >> 2) + 1;
    iVar9 = uVar6 * 4;
    uVar36 = (ulong)uVar7;
    do {
      piVar33 = (int *)*param_2;
      pauVar25 = __src_00;
      piVar26 = piVar33;
      if (0 < (int)(param_6 - 3)) {
        do {
          auVar52 = *pauVar25;
          iVar54 = *piVar26;
          iVar3 = piVar26[1];
          iVar55 = piVar26[3];
          pauVar28 = pauVar25 + 1;
          *(int *)(*pauVar25 + 8) = piVar26[2] + auVar52._8_4_;
          *(int *)(*pauVar25 + 0xc) = iVar55 + auVar52._12_4_;
          *(int *)*pauVar25 = iVar54 + auVar52._0_4_;
          *(int *)(*pauVar25 + 4) = iVar3 + auVar52._4_4_;
          pauVar25 = pauVar28;
          piVar26 = piVar26 + 4;
        } while (pauVar28 != __src_00 + (ulong)uVar20 + 1);
      }
      if ((int)uVar8 < (int)param_6) {
        if ((piVar30 < piVar33 + lVar35 + 4 && piVar33 + lVar35 < __src_00[1] + lVar4) ||
           (uVar10 < 8)) {
          lVar43 = 0;
          do {
            *(int *)((long)piVar30 + lVar43) =
                 *(int *)((long)piVar30 + lVar43) + *(int *)((long)(piVar33 + lVar35) + lVar43);
            lVar43 = lVar43 + 4;
          } while (lVar43 != ((ulong)((param_6 - 1) - uVar8) + 1) * 4);
        }
        else {
          if (uVar7 == 0) {
            uVar39 = (ulong)uVar8;
          }
          else {
            *(int *)(*__src_00 + lVar35 * 4) = *(int *)(*__src_00 + lVar35 * 4) + piVar33[lVar35];
            if (uVar7 == 1) {
              uVar39 = (ulong)uVar1;
            }
            else {
              *(int *)(*__src_00 + uVar32) =
                   *(int *)(*__src_00 + uVar32) + *(int *)((long)piVar33 + uVar32);
              if (uVar7 == 3) {
                uVar39 = (ulong)(uVar8 + 3);
                *(int *)(*__src_00 + uVar41) =
                     *(int *)(*__src_00 + uVar41) + *(int *)((long)piVar33 + uVar41);
              }
              else {
                uVar39 = (ulong)uVar2;
              }
            }
          }
          if (2 < (uVar10 - 1) - uVar7) {
            uVar18 = 0;
            puVar27 = (undefined8 *)(*__src_00 + uVar36 * 4 + lVar4);
            piVar26 = (int *)(*__src_00 + (lVar35 + uVar36) * 4);
            piVar40 = piVar33 + uVar36 + lVar35;
            do {
              uVar18 = uVar18 + 1;
              auVar52._0_8_ =
                   CONCAT44(piVar26[1] + (int)((ulong)*(undefined8 *)piVar40 >> 0x20),
                            *piVar26 + (int)*(undefined8 *)piVar40);
              auVar52._8_4_ = piVar26[2] + (int)*(undefined8 *)(piVar40 + 2);
              auVar52._12_4_ = piVar26[3] + (int)((ulong)*(undefined8 *)(piVar40 + 2) >> 0x20);
              puVar27[1] = auVar52._8_8_;
              *puVar27 = auVar52._0_8_;
              puVar27 = puVar27 + 2;
              piVar26 = piVar26 + 4;
              piVar40 = piVar40 + 4;
            } while (uVar18 < uVar6);
            uVar39 = (ulong)(uint)((int)uVar39 + iVar9);
            if (iVar9 == uVar10 - uVar7) goto LAB_0020c7e8;
          }
          uVar21 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
          *(int *)(*__src_00 + uVar21) =
               *(int *)(*__src_00 + uVar21) + *(int *)((long)piVar33 + uVar21);
          if ((int)uVar39 + 1 < (int)param_6) {
            lVar43 = uVar21 + 4;
            *(int *)(*__src_00 + lVar43) =
                 *(int *)(*__src_00 + lVar43) + *(int *)((long)piVar33 + lVar43);
            if ((int)uVar39 + 2 < (int)param_6) {
              lVar43 = uVar21 + 8;
              *(int *)(*__src_00 + lVar43) =
                   *(int *)(*__src_00 + lVar43) + *(int *)((long)piVar33 + lVar43);
            }
          }
        }
      }
LAB_0020c7e8:
      param_2 = param_2 + 1;
      iVar54 = *(int *)(param_1 + 8);
      iVar3 = *(int *)(param_1 + 0x18) + 1;
      *(int *)(param_1 + 0x18) = iVar3;
    } while (iVar3 < iVar54 + -1);
  }
LAB_0020c818:
  if (param_5 != 0) {
    iVar3 = param_6 - 7;
    uVar8 = param_6 - 8 >> 3;
    plVar5 = param_2 + (ulong)(param_5 - 1) + 1;
    iVar9 = (uVar8 + 1) * 8;
    if (iVar3 < 1) {
      iVar9 = 0;
    }
    lVar35 = (long)iVar9;
    lVar4 = (ulong)((param_6 - 1) - iVar9) + 1;
    lVar43 = NEON_shl(lVar35,2);
    while( true ) {
      lVar29 = *param_2;
      lVar22 = param_2[1 - iVar54];
      if (dVar64 == 1.0) {
        if (0 < iVar3) {
          piVar30 = (int *)(lVar29 + 0x10);
          pauVar25 = __src_00 + 1;
          pauVar28 = (undefined1 (*) [16])(lVar22 + 0x10);
          puVar27 = param_3;
          do {
            piVar34 = piVar30 + -4;
            uVar44 = *(undefined8 *)*pauVar25;
            piVar26 = piVar30 + -2;
            iVar54 = *piVar30;
            piVar33 = piVar30 + 1;
            piVar40 = piVar30 + 2;
            piVar15 = piVar30 + 3;
            piVar30 = piVar30 + 8;
            auVar50._0_4_ = *(int *)pauVar25[-1] + (int)*(undefined8 *)piVar34;
            auVar50._4_4_ =
                 *(int *)(pauVar25[-1] + 4) + (int)((ulong)*(undefined8 *)piVar34 >> 0x20);
            auVar50._8_4_ = *(int *)(pauVar25[-1] + 8) + (int)*(undefined8 *)piVar26;
            auVar50._12_4_ =
                 *(int *)(pauVar25[-1] + 0xc) + (int)((ulong)*(undefined8 *)piVar26 >> 0x20);
            auVar45._0_4_ = iVar54 + (int)uVar44;
            auVar45._4_4_ = *piVar33 + (int)((ulong)uVar44 >> 0x20);
            auVar45._8_4_ = *piVar40 + (int)*(undefined8 *)(*pauVar25 + 8);
            auVar45._12_4_ = *piVar15 + (int)((ulong)*(undefined8 *)(*pauVar25 + 8) >> 0x20);
            uVar49 = NEON_sqxtun(CONCAT44(uVar63,uVar62),auVar50,4);
            uVar62 = (undefined4)uVar49;
            uVar63 = (undefined4)((ulong)uVar49 >> 0x20);
            uVar44 = NEON_sqxtun(uVar44,auVar45,4);
            auVar11._8_4_ = (int)uVar44;
            auVar11._0_8_ = uVar49;
            auVar11._12_4_ = (int)((ulong)uVar44 >> 0x20);
            uVar44 = NEON_uqxtn(uVar49,auVar11,2);
            *puVar27 = uVar44;
            uVar49 = *(undefined8 *)(pauVar28[-1] + 8);
            uVar44 = *(undefined8 *)pauVar28[-1];
            *(int *)(pauVar25[-1] + 8) = auVar50._8_4_ - (int)uVar49;
            *(int *)(pauVar25[-1] + 0xc) = auVar50._12_4_ - (int)((ulong)uVar49 >> 0x20);
            *(int *)pauVar25[-1] = auVar50._0_4_ - (int)uVar44;
            *(int *)(pauVar25[-1] + 4) = auVar50._4_4_ - (int)((ulong)uVar44 >> 0x20);
            auVar52 = *pauVar28;
            pauVar28 = pauVar28 + 2;
            auVar46._0_8_ = CONCAT44(auVar45._4_4_ - auVar52._4_4_,auVar45._0_4_ - auVar52._0_4_);
            auVar46._8_4_ = auVar45._8_4_ - auVar52._8_4_;
            auVar46._12_4_ = auVar45._12_4_ - auVar52._12_4_;
            *(long *)(*pauVar25 + 8) = auVar46._8_8_;
            *(undefined8 *)*pauVar25 = auVar46._0_8_;
            pauVar25 = pauVar25 + 2;
            puVar27 = puVar27 + 1;
          } while (pauVar25 != __src_00 + (ulong)uVar8 * 2 + 3);
        }
        if (iVar9 < (int)param_6) {
          lVar31 = 0;
          do {
            uVar20 = *(int *)(*__src_00 + lVar31 * 4 + lVar43) +
                     *(int *)(lVar29 + lVar43 + lVar31 * 4);
            uVar1 = uVar20;
            if (0xff < uVar20) {
              uVar1 = -(uint)(0 < (int)uVar20);
            }
            *(char *)((long)param_3 + lVar31 + lVar35) = (char)uVar1;
            *(uint *)(*__src_00 + lVar31 * 4 + lVar43) =
                 uVar20 - *(int *)(lVar22 + lVar43 + lVar31 * 4);
            lVar31 = lVar31 + 1;
          } while (lVar4 != lVar31);
        }
      }
      else {
        fVar42 = (float)dVar64;
        if (0 < iVar3) {
          puVar27 = (undefined8 *)(lVar29 + 0x10);
          pauVar25 = __src_00 + 1;
          pauVar28 = (undefined1 (*) [16])(lVar22 + 0x10);
          puVar38 = param_3;
          do {
            uVar44 = *(undefined8 *)pauVar25[-1];
            iVar58 = (int)uVar44 + *(int *)(puVar27 + -2);
            iVar59 = (int)((ulong)uVar44 >> 0x20) + *(int *)((long)puVar27 + -0xc);
            iVar60 = (int)*(undefined8 *)(pauVar25[-1] + 8) + *(int *)(puVar27 + -1);
            iVar61 = (int)((ulong)*(undefined8 *)(pauVar25[-1] + 8) >> 0x20) +
                     *(int *)((long)puVar27 + -4);
            iVar54 = (int)*puVar27 + *(int *)*pauVar25;
            iVar55 = (int)((ulong)*puVar27 >> 0x20) + *(int *)(*pauVar25 + 4);
            iVar56 = (int)puVar27[1] + *(int *)(*pauVar25 + 8);
            iVar57 = (int)((ulong)puVar27[1] >> 0x20) + *(int *)(*pauVar25 + 0xc);
            auVar13._4_4_ = iVar59;
            auVar13._0_4_ = iVar58;
            auVar13._8_4_ = iVar60;
            auVar13._12_4_ = iVar61;
            auVar52 = NEON_scvtf(auVar13,4);
            auVar53._0_8_ = CONCAT44(fVar42 * auVar52._4_4_,fVar42 * auVar52._0_4_);
            auVar53._8_4_ = fVar42 * auVar52._8_4_;
            auVar53._12_4_ = fVar42 * auVar52._12_4_;
            if ((DAT_00531ec0 & 1) == 0) {
              uVar44 = auVar53._8_8_;
              iVar19 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar53._8_8_ = uVar44;
              if (iVar19 != 0) {
                auVar52 = NEON_fmov(0x3f000000,4);
                uRam0000000000531e98 = auVar52._8_8_;
                _DAT_00531e90 = auVar52._0_8_;
                __cxa_guard_release(&DAT_00531ec0);
              }
            }
            auVar12._4_4_ = iVar55;
            auVar12._0_4_ = iVar54;
            auVar12._8_4_ = iVar56;
            auVar12._12_4_ = iVar57;
            auVar52 = NEON_scvtf(auVar12,4);
            auVar47._0_8_ = CONCAT44(fVar42 * auVar52._4_4_,fVar42 * auVar52._0_4_);
            auVar47._8_4_ = fVar42 * auVar52._8_4_;
            auVar47._12_4_ = fVar42 * auVar52._12_4_;
            auVar51._0_8_ =
                 CONCAT44((int)(auVar53._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                          (int)(auVar53._0_4_ + (float)_DAT_00531e90));
            auVar51._8_4_ = (int)(auVar53._8_4_ + (float)uRam0000000000531e98);
            auVar51._12_4_ = (int)(auVar53._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            if ((DAT_00531ec0 & 1) == 0) {
              uVar49 = auVar51._8_8_;
              uVar44 = auVar47._8_8_;
              iVar19 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar47._8_8_ = uVar44;
              auVar51._8_8_ = uVar49;
              if (iVar19 != 0) {
                auVar52 = NEON_fmov(0x3f000000,4);
                uRam0000000000531e98 = auVar52._8_8_;
                _DAT_00531e90 = auVar52._0_8_;
                __cxa_guard_release(&DAT_00531ec0);
              }
            }
            uVar49 = NEON_uqxtn(auVar51._0_8_,auVar51,4);
            puVar27 = puVar27 + 4;
            uVar62 = (undefined4)uVar49;
            uVar63 = (undefined4)((ulong)uVar49 >> 0x20);
            auVar48._0_8_ =
                 CONCAT44((int)(auVar47._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                          (int)(auVar47._0_4_ + (float)_DAT_00531e90));
            auVar48._8_4_ = (int)(auVar47._8_4_ + (float)uRam0000000000531e98);
            auVar48._12_4_ = (int)(auVar47._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar44 = NEON_uqxtn(auVar48._0_8_,auVar48,4);
            auVar14._8_4_ = (int)uVar44;
            auVar14._0_8_ = uVar49;
            auVar14._12_4_ = (int)((ulong)uVar44 >> 0x20);
            uVar44 = NEON_uqxtn(uVar44,auVar14,2);
            *puVar38 = uVar44;
            iVar19 = *(int *)pauVar28[-1];
            iVar16 = *(int *)(pauVar28[-1] + 4);
            *(ulong *)(pauVar25[-1] + 8) =
                 CONCAT44(iVar61 - *(int *)(pauVar28[-1] + 0xc),iVar60 - *(int *)(pauVar28[-1] + 8))
            ;
            *(ulong *)pauVar25[-1] = CONCAT44(iVar59 - iVar16,iVar58 - iVar19);
            auVar52 = *pauVar28;
            pauVar28 = pauVar28 + 2;
            *(ulong *)(*pauVar25 + 8) = CONCAT44(iVar57 - auVar52._12_4_,iVar56 - auVar52._8_4_);
            *(ulong *)*pauVar25 = CONCAT44(iVar55 - auVar52._4_4_,iVar54 - auVar52._0_4_);
            pauVar25 = pauVar25 + 2;
            puVar38 = puVar38 + 1;
          } while (pauVar25 != __src_00 + (ulong)uVar8 * 2 + 3);
        }
        if (iVar9 < (int)param_6) {
          lVar31 = 0;
          do {
            iVar54 = *(int *)(*__src_00 + lVar31 * 4 + lVar43) +
                     *(int *)(lVar29 + lVar43 + lVar31 * 4);
            lVar23 = lrint(dVar64 * (double)iVar54);
            uVar20 = (uint)lVar23;
            if (0xff < uVar20) {
              uVar20 = -(uint)(0 < (int)uVar20);
            }
            *(char *)((long)param_3 + lVar31 + lVar35) = (char)uVar20;
            *(int *)(*__src_00 + lVar31 * 4 + lVar43) =
                 iVar54 - *(int *)(lVar22 + lVar43 + lVar31 * 4);
            lVar31 = lVar31 + 1;
          } while (lVar31 != lVar4);
        }
      }
      param_3 = (undefined8 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 1;
      if (param_2 == plVar5) break;
      iVar54 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 0020cedc (2516 bytes) name=FUN_0020cedc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0020cedc(long param_1,long *param_2,undefined8 *param_3,int param_4,int param_5,
                 uint param_6)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  int *piVar13;
  char cVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  ulong uVar18;
  long lVar19;
  long lVar20;
  char *pcVar21;
  void *__dest;
  undefined1 (*pauVar22) [16];
  int *piVar23;
  undefined8 *puVar24;
  undefined1 (*pauVar25) [16];
  long lVar26;
  int *piVar27;
  long lVar28;
  ulong uVar29;
  int *piVar30;
  long lVar31;
  void *__src;
  int *piVar32;
  size_t __n;
  long lVar33;
  undefined1 (*__src_00) [16];
  ulong uVar34;
  size_t sVar35;
  undefined8 *puVar36;
  ulong uVar37;
  int *piVar38;
  ulong uVar39;
  float fVar40;
  undefined8 uVar41;
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  int iVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  undefined8 uVar55;
  int iVar56;
  int iVar57;
  int iVar58;
  undefined1 in_q4 [16];
  int iVar59;
  double dVar60;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar57 = in_q4._4_4_;
  iVar56 = in_q4._0_4_;
  __src_00 = *(undefined1 (**) [16])(param_1 + 0x20);
  __src = *(void **)(param_1 + 0x28);
  sVar35 = (long)__src - (long)__src_00;
  uVar29 = (long)sVar35 >> 2;
  dVar60 = *(double *)(param_1 + 0x10);
  if ((uint)uVar29 == param_6) {
    if (*(int *)(param_1 + 0x18) != 0) {
      iVar51 = *(int *)(param_1 + 8);
      if (*(int *)(param_1 + 0x18) != iVar51 + -1) {
        local_10 = 0;
        local_8 = 0;
        pcVar21 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar14 = s_sumCount____ksize_1_0045d530[0x12];
        uVar55 = s_sumCount____ksize_1_0045d530._8_8_;
        uVar41 = s_sumCount____ksize_1_0045d530._0_8_;
        *(undefined2 *)(pcVar21 + 0x10) = s_sumCount____ksize_1_0045d530._16_2_;
        pcVar21[0x12] = cVar14;
        *(undefined8 *)pcVar21 = uVar41;
        *(undefined8 *)(pcVar21 + 8) = uVar55;
        cv::error(-0xd7,(String *)&local_10,
                  "virtual void cv::ColumnSum<int, short unsigned int>::operator()(const uchar**, uchar*, int, int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x262);
        cv::String::deallocate((String *)&local_10);
        iVar51 = *(int *)(param_1 + 8);
      }
      param_2 = param_2 + (long)iVar51 + -1;
      goto LAB_0020d204;
    }
    sVar35 = -(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2;
  }
  else {
    uVar34 = (ulong)(int)param_6;
    if (uVar29 < uVar34) {
      uVar39 = uVar34 - uVar29;
      if (uVar39 != 0) {
        if ((ulong)(*(long *)(param_1 + 0x30) - (long)__src >> 2) < uVar39) {
          if (0x3fffffffffffffff - uVar29 < uVar39) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f39c("vector::_M_fill_insert");
          }
          uVar37 = uVar39;
          if (uVar39 < uVar29) {
            uVar37 = uVar29;
          }
          uVar37 = uVar37 + uVar29;
          if ((uVar37 < uVar29) || (0x3fffffffffffffff < uVar37)) {
            uVar18 = 0xfffffffffffffffc;
LAB_0020d864:
            pauVar22 = operator_new(uVar18);
            __src_00 = *(undefined1 (**) [16])(param_1 + 0x20);
            __n = (long)__src - (long)__src_00;
            uVar29 = (long)__n >> 2;
          }
          else {
            uVar18 = uVar37 * 4;
            if (uVar37 != 0) goto LAB_0020d864;
            uVar18 = 0;
            pauVar22 = (undefined1 (*) [16])0x0;
            __n = sVar35;
          }
          memset((void *)((long)pauVar22 + sVar35),0,uVar39 * 4);
          if (uVar29 != 0) {
            memmove(pauVar22,__src_00,__n);
          }
          sVar35 = *(long *)(param_1 + 0x28) - (long)__src;
          __dest = (void *)((long)pauVar22 + uVar39 * 4 + __n);
          if ((long)sVar35 >> 2 != 0) {
            __dest = memmove(__dest,__src,sVar35);
          }
          if (*(void **)(param_1 + 0x20) != (void *)0x0) {
            operator_delete(*(void **)(param_1 + 0x20));
          }
          *(undefined1 (**) [16])(param_1 + 0x20) = pauVar22;
          *(size_t *)(param_1 + 0x28) = (long)__dest + sVar35;
          *(undefined1 **)(param_1 + 0x30) = *pauVar22 + uVar18;
          __src_00 = pauVar22;
        }
        else {
          memset(__src,0,uVar39 * 4);
          *(void **)(param_1 + 0x28) = (void *)((long)__src + uVar39 * 4);
        }
      }
    }
    else if (uVar34 < uVar29) {
      *(undefined1 **)(param_1 + 0x28) = *__src_00 + uVar34 * 4;
    }
    sVar35 = uVar34 << 2;
    *(undefined4 *)(param_1 + 0x18) = 0;
  }
  memset(__src_00,0,sVar35);
  iVar51 = *(int *)(param_1 + 8);
  if (*(int *)(param_1 + 0x18) < iVar51 + -1) {
    uVar17 = param_6 - 4 >> 2;
    uVar8 = (uVar17 + 1) * 4;
    if ((int)(param_6 - 3) < 1) {
      uVar8 = 0;
    }
    uVar1 = uVar8 + 1;
    lVar33 = (long)(int)uVar8;
    uVar2 = uVar8 + 2;
    lVar4 = lVar33 * 4;
    piVar27 = (int *)(*__src_00 + lVar4);
    uVar10 = param_6 - uVar8;
    uVar29 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar6 = -((uint)((ulong)piVar27 >> 2) & 3) & 3;
    uVar7 = uVar10;
    if (uVar6 < uVar10) {
      uVar7 = uVar6;
    }
    uVar39 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar6 = ((uVar10 - uVar7) - 4 >> 2) + 1;
    iVar9 = uVar6 * 4;
    uVar34 = (ulong)uVar7;
    do {
      piVar30 = (int *)*param_2;
      pauVar22 = __src_00;
      piVar23 = piVar30;
      if (0 < (int)(param_6 - 3)) {
        do {
          auVar49 = *pauVar22;
          auVar42._0_8_ = CONCAT44(piVar23[1] + auVar49._4_4_,*piVar23 + auVar49._0_4_);
          auVar42._8_4_ = piVar23[2] + auVar49._8_4_;
          auVar42._12_4_ = piVar23[3] + auVar49._12_4_;
          pauVar25 = pauVar22 + 1;
          *(long *)(*pauVar22 + 8) = auVar42._8_8_;
          *(undefined8 *)*pauVar22 = auVar42._0_8_;
          pauVar22 = pauVar25;
          piVar23 = piVar23 + 4;
        } while (pauVar25 != __src_00 + (ulong)uVar17 + 1);
      }
      if ((int)uVar8 < (int)param_6) {
        if ((piVar27 < piVar30 + lVar33 + 4 && piVar30 + lVar33 < __src_00[1] + lVar4) ||
           (uVar10 < 8)) {
          lVar31 = 0;
          do {
            *(int *)((long)piVar27 + lVar31) =
                 *(int *)((long)piVar27 + lVar31) + *(int *)((long)(piVar30 + lVar33) + lVar31);
            lVar31 = lVar31 + 4;
          } while (lVar31 != ((ulong)((param_6 - 1) - uVar8) + 1) * 4);
        }
        else {
          if (uVar7 == 0) {
            uVar37 = (ulong)uVar8;
          }
          else {
            *(int *)(*__src_00 + lVar33 * 4) = *(int *)(*__src_00 + lVar33 * 4) + piVar30[lVar33];
            if (uVar7 == 1) {
              uVar37 = (ulong)uVar1;
            }
            else {
              *(int *)(*__src_00 + uVar29) =
                   *(int *)(*__src_00 + uVar29) + *(int *)((long)piVar30 + uVar29);
              if (uVar7 == 3) {
                uVar37 = (ulong)(uVar8 + 3);
                *(int *)(*__src_00 + uVar39) =
                     *(int *)(*__src_00 + uVar39) + *(int *)((long)piVar30 + uVar39);
              }
              else {
                uVar37 = (ulong)uVar2;
              }
            }
          }
          if (2 < (uVar10 - 1) - uVar7) {
            uVar15 = 0;
            puVar24 = (undefined8 *)(*__src_00 + uVar34 * 4 + lVar4);
            piVar23 = (int *)(*__src_00 + (lVar33 + uVar34) * 4);
            piVar38 = piVar30 + uVar34 + lVar33;
            do {
              uVar15 = uVar15 + 1;
              auVar49._0_8_ =
                   CONCAT44(piVar23[1] + (int)((ulong)*(undefined8 *)piVar38 >> 0x20),
                            *piVar23 + (int)*(undefined8 *)piVar38);
              auVar49._8_4_ = piVar23[2] + (int)*(undefined8 *)(piVar38 + 2);
              auVar49._12_4_ = piVar23[3] + (int)((ulong)*(undefined8 *)(piVar38 + 2) >> 0x20);
              puVar24[1] = auVar49._8_8_;
              *puVar24 = auVar49._0_8_;
              puVar24 = puVar24 + 2;
              piVar23 = piVar23 + 4;
              piVar38 = piVar38 + 4;
            } while (uVar15 < uVar6);
            uVar37 = (ulong)(uint)((int)uVar37 + iVar9);
            if (iVar9 == uVar10 - uVar7) goto LAB_0020d1d4;
          }
          uVar18 = -(uVar37 >> 0x1f) & 0xfffffffc00000000 | uVar37 << 2;
          *(int *)(*__src_00 + uVar18) =
               *(int *)(*__src_00 + uVar18) + *(int *)((long)piVar30 + uVar18);
          if ((int)uVar37 + 1 < (int)param_6) {
            lVar31 = uVar18 + 4;
            *(int *)(*__src_00 + lVar31) =
                 *(int *)(*__src_00 + lVar31) + *(int *)((long)piVar30 + lVar31);
            if ((int)uVar37 + 2 < (int)param_6) {
              lVar31 = uVar18 + 8;
              *(int *)(*__src_00 + lVar31) =
                   *(int *)(*__src_00 + lVar31) + *(int *)((long)piVar30 + lVar31);
            }
          }
        }
      }
LAB_0020d1d4:
      param_2 = param_2 + 1;
      iVar51 = *(int *)(param_1 + 8);
      iVar3 = *(int *)(param_1 + 0x18) + 1;
      *(int *)(param_1 + 0x18) = iVar3;
    } while (iVar3 < iVar51 + -1);
  }
LAB_0020d204:
  if (param_5 != 0) {
    iVar3 = param_6 - 7;
    uVar8 = param_6 - 8 >> 3;
    plVar5 = param_2 + (ulong)(param_5 - 1) + 1;
    iVar9 = (uVar8 + 1) * 8;
    if (iVar3 < 1) {
      iVar9 = 0;
    }
    lVar4 = (ulong)((param_6 - 1) - iVar9) + 1;
    lVar31 = (long)iVar9 * 4;
    lVar33 = (long)iVar9 * 2;
    while( true ) {
      lVar26 = *param_2;
      lVar19 = param_2[1 - iVar51];
      if (dVar60 == 1.0) {
        if (0 < iVar3) {
          piVar27 = (int *)(lVar26 + 0x10);
          pauVar22 = __src_00 + 1;
          pauVar25 = (undefined1 (*) [16])(lVar19 + 0x10);
          puVar24 = param_3;
          do {
            piVar32 = piVar27 + -4;
            uVar55 = *(undefined8 *)*pauVar22;
            piVar23 = piVar27 + -2;
            iVar51 = *piVar27;
            piVar30 = piVar27 + 1;
            piVar38 = piVar27 + 2;
            piVar13 = piVar27 + 3;
            piVar27 = piVar27 + 8;
            auVar47._0_4_ = *(int *)pauVar22[-1] + (int)*(undefined8 *)piVar32;
            auVar47._4_4_ =
                 *(int *)(pauVar22[-1] + 4) + (int)((ulong)*(undefined8 *)piVar32 >> 0x20);
            auVar47._8_4_ = *(int *)(pauVar22[-1] + 8) + (int)*(undefined8 *)piVar23;
            auVar47._12_4_ =
                 *(int *)(pauVar22[-1] + 0xc) + (int)((ulong)*(undefined8 *)piVar23 >> 0x20);
            auVar43._0_4_ = iVar51 + (int)uVar55;
            auVar43._4_4_ = *piVar30 + (int)((ulong)uVar55 >> 0x20);
            auVar43._8_4_ = *piVar38 + (int)*(undefined8 *)(*pauVar22 + 8);
            auVar43._12_4_ = *piVar13 + (int)((ulong)*(undefined8 *)(*pauVar22 + 8) >> 0x20);
            uVar41 = NEON_sqxtun(CONCAT44(iVar57,iVar56),auVar47,4);
            iVar56 = (int)uVar41;
            iVar57 = (int)((ulong)uVar41 >> 0x20);
            uVar55 = NEON_sqxtun(uVar55,auVar43,4);
            puVar24[1] = uVar55;
            *puVar24 = uVar41;
            uVar55 = *(undefined8 *)(pauVar25[-1] + 8);
            uVar41 = *(undefined8 *)pauVar25[-1];
            *(int *)(pauVar22[-1] + 8) = auVar47._8_4_ - (int)uVar55;
            *(int *)(pauVar22[-1] + 0xc) = auVar47._12_4_ - (int)((ulong)uVar55 >> 0x20);
            *(int *)pauVar22[-1] = auVar47._0_4_ - (int)uVar41;
            *(int *)(pauVar22[-1] + 4) = auVar47._4_4_ - (int)((ulong)uVar41 >> 0x20);
            auVar49 = *pauVar25;
            pauVar25 = pauVar25 + 2;
            auVar44._0_8_ = CONCAT44(auVar43._4_4_ - auVar49._4_4_,auVar43._0_4_ - auVar49._0_4_);
            auVar44._8_4_ = auVar43._8_4_ - auVar49._8_4_;
            auVar44._12_4_ = auVar43._12_4_ - auVar49._12_4_;
            *(long *)(*pauVar22 + 8) = auVar44._8_8_;
            *(undefined8 *)*pauVar22 = auVar44._0_8_;
            pauVar22 = pauVar22 + 2;
            puVar24 = puVar24 + 2;
          } while (__src_00 + (ulong)uVar8 * 2 + 3 != pauVar22);
        }
        if (iVar9 < (int)param_6) {
          lVar28 = 0;
          do {
            iVar51 = *(int *)(lVar19 + lVar31 + lVar28 * 4);
            uVar17 = *(int *)(*__src_00 + lVar28 * 4 + lVar31) +
                     *(int *)(lVar26 + lVar31 + lVar28 * 4);
            uVar1 = uVar17;
            if (0xffff < uVar17) {
              uVar1 = -(uint)(0 < (int)uVar17);
            }
            *(short *)((long)param_3 + lVar28 * 2 + lVar33) = (short)uVar1;
            *(uint *)(*__src_00 + lVar28 * 4 + lVar31) = uVar17 - iVar51;
            lVar28 = lVar28 + 1;
          } while (lVar28 != lVar4);
        }
      }
      else {
        fVar40 = (float)dVar60;
        if (0 < iVar3) {
          puVar24 = (undefined8 *)(lVar26 + 0x10);
          pauVar22 = __src_00 + 1;
          pauVar25 = (undefined1 (*) [16])(lVar19 + 0x10);
          puVar36 = param_3;
          do {
            uVar41 = *(undefined8 *)pauVar22[-1];
            iVar56 = (int)uVar41 + *(int *)(puVar24 + -2);
            iVar57 = (int)((ulong)uVar41 >> 0x20) + *(int *)((long)puVar24 + -0xc);
            iVar58 = (int)*(undefined8 *)(pauVar22[-1] + 8) + *(int *)(puVar24 + -1);
            iVar59 = (int)((ulong)*(undefined8 *)(pauVar22[-1] + 8) >> 0x20) +
                     *(int *)((long)puVar24 + -4);
            iVar51 = (int)*puVar24 + *(int *)*pauVar22;
            iVar52 = (int)((ulong)*puVar24 >> 0x20) + *(int *)(*pauVar22 + 4);
            iVar53 = (int)puVar24[1] + *(int *)(*pauVar22 + 8);
            iVar54 = (int)((ulong)puVar24[1] >> 0x20) + *(int *)(*pauVar22 + 0xc);
            auVar12._4_4_ = iVar57;
            auVar12._0_4_ = iVar56;
            auVar12._8_4_ = iVar58;
            auVar12._12_4_ = iVar59;
            auVar49 = NEON_scvtf(auVar12,4);
            auVar50._0_8_ = CONCAT44(fVar40 * auVar49._4_4_,fVar40 * auVar49._0_4_);
            auVar50._8_4_ = fVar40 * auVar49._8_4_;
            auVar50._12_4_ = fVar40 * auVar49._12_4_;
            if ((DAT_00531ec0 & 1) == 0) {
              uVar41 = auVar50._8_8_;
              iVar16 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar50._8_8_ = uVar41;
              if (iVar16 != 0) {
                auVar49 = NEON_fmov(0x3f000000,4);
                uRam0000000000531e98 = auVar49._8_8_;
                _DAT_00531e90 = auVar49._0_8_;
                __cxa_guard_release(&DAT_00531ec0);
              }
            }
            auVar11._4_4_ = iVar52;
            auVar11._0_4_ = iVar51;
            auVar11._8_4_ = iVar53;
            auVar11._12_4_ = iVar54;
            auVar49 = NEON_scvtf(auVar11,4);
            auVar45._0_8_ = CONCAT44(fVar40 * auVar49._4_4_,fVar40 * auVar49._0_4_);
            auVar45._8_4_ = fVar40 * auVar49._8_4_;
            auVar45._12_4_ = fVar40 * auVar49._12_4_;
            auVar48._0_8_ =
                 CONCAT44((int)(auVar50._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                          (int)(auVar50._0_4_ + (float)_DAT_00531e90));
            auVar48._8_4_ = (int)(auVar50._8_4_ + (float)uRam0000000000531e98);
            auVar48._12_4_ = (int)(auVar50._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            if ((DAT_00531ec0 & 1) == 0) {
              uVar55 = auVar48._8_8_;
              uVar41 = auVar45._8_8_;
              iVar16 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar45._8_8_ = uVar41;
              auVar48._8_8_ = uVar55;
              if (iVar16 != 0) {
                auVar49 = NEON_fmov(0x3f000000,4);
                uRam0000000000531e98 = auVar49._8_8_;
                _DAT_00531e90 = auVar49._0_8_;
                __cxa_guard_release(&DAT_00531ec0);
              }
            }
            uVar55 = NEON_uqxtn(auVar48._0_8_,auVar48,4);
            puVar24 = puVar24 + 4;
            auVar46._0_8_ =
                 CONCAT44((int)(auVar45._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                          (int)(auVar45._0_4_ + (float)_DAT_00531e90));
            auVar46._8_4_ = (int)(auVar45._8_4_ + (float)uRam0000000000531e98);
            auVar46._12_4_ = (int)(auVar45._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar41 = NEON_uqxtn(auVar46._0_8_,auVar46,4);
            puVar36[1] = uVar41;
            *puVar36 = uVar55;
            auVar49 = pauVar25[-1];
            *(int *)(pauVar22[-1] + 8) = iVar58 - auVar49._8_4_;
            *(int *)(pauVar22[-1] + 0xc) = iVar59 - auVar49._12_4_;
            *(int *)pauVar22[-1] = iVar56 - auVar49._0_4_;
            *(int *)(pauVar22[-1] + 4) = iVar57 - auVar49._4_4_;
            auVar49 = *pauVar25;
            pauVar25 = pauVar25 + 2;
            *(ulong *)(*pauVar22 + 8) = CONCAT44(iVar54 - auVar49._12_4_,iVar53 - auVar49._8_4_);
            *(ulong *)*pauVar22 = CONCAT44(iVar52 - auVar49._4_4_,iVar51 - auVar49._0_4_);
            pauVar22 = pauVar22 + 2;
            puVar36 = puVar36 + 2;
          } while (pauVar22 != __src_00 + (ulong)uVar8 * 2 + 3);
        }
        if (iVar9 < (int)param_6) {
          lVar28 = 0;
          do {
            iVar51 = *(int *)(*__src_00 + lVar28 * 4 + lVar31) +
                     *(int *)(lVar26 + lVar31 + lVar28 * 4);
            lVar20 = lrint(dVar60 * (double)iVar51);
            uVar17 = (uint)lVar20;
            if (0xffff < uVar17) {
              uVar17 = -(uint)(0 < (int)uVar17);
            }
            iVar52 = *(int *)(lVar19 + lVar31 + lVar28 * 4);
            *(short *)((long)param_3 + lVar28 * 2 + lVar33) = (short)uVar17;
            *(int *)(*__src_00 + lVar28 * 4 + lVar31) = iVar51 - iVar52;
            lVar28 = lVar28 + 1;
          } while (lVar28 != lVar4);
        }
      }
      param_3 = (undefined8 *)((long)param_3 + (long)param_4);
      param_2 = param_2 + 1;
      if (param_2 == plVar5) break;
      iVar51 = *(int *)(param_1 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 0020d8c4 (1552 bytes) name=FUN_0020d8c4

undefined8 * FUN_0020d8c4(undefined8 *param_1,uint param_2,uint param_3,int param_4,int param_5)

{
  long *plVar1;
  uint uVar2;
  char cVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  bool bVar9;
  bool bVar10;
  char *pcVar11;
  undefined8 *puVar12;
  long *plVar13;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = param_2 & 7;
  if ((param_3 >> 3 & 0x1ff) + 1 != (param_2 >> 3 & 0x1ff) + 1) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x28);
    uVar8 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_;
    uVar7 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_;
    uVar6 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_;
    uVar5 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_;
    *(undefined8 *)(pcVar11 + 0x20) = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_;
    *(undefined8 *)pcVar11 = uVar5;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Ptr<cv::BaseRowFilter> cv::getRowSumFilter(int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x4bf);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_5 < 0) {
    param_5 = param_4 / 2;
  }
  bVar9 = (param_3 & 7) == 4;
  if ((uVar2 != 0) || (!bVar9)) {
    bVar10 = (param_3 & 7) != 6;
    if ((uVar2 != 0) || (bVar10)) {
      if (uVar2 == 2) {
        if (bVar9) {
          puVar12 = operator_new(0x10);
          FUN_001c8ce4();
          *(int *)(puVar12 + 1) = param_4;
          *(int *)((long)puVar12 + 0xc) = param_5;
          *puVar12 = &DAT_004f5170;
          plVar13 = operator_new(0x20);
          plVar13[2] = (long)puVar12;
          *(undefined4 *)(plVar13 + 1) = 1;
          *plVar13 = (long)&PTR_FUN_004f5560;
          plVar1 = plVar13 + 1;
          *param_1 = plVar13;
          param_1[1] = puVar12;
          do {
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          do {
            iVar4 = (int)*plVar1;
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          goto joined_r0x0020dac4;
        }
        if (!bVar10) {
          puVar12 = operator_new(0x10);
          FUN_001c8ce4();
          *(int *)(puVar12 + 1) = param_4;
          *(int *)((long)puVar12 + 0xc) = param_5;
          *puVar12 = &PTR_FUN_004f51a0;
          plVar13 = operator_new(0x20);
          plVar13[2] = (long)puVar12;
          *(undefined4 *)(plVar13 + 1) = 1;
          *plVar13 = (long)&PTR_FUN_004f5590;
          plVar1 = plVar13 + 1;
          *param_1 = plVar13;
          param_1[1] = puVar12;
          do {
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          do {
            iVar4 = (int)*plVar1;
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          goto joined_r0x0020dac4;
        }
      }
      if ((uVar2 != 3) || (!bVar9)) {
        if ((uVar2 == 4) && (bVar9)) {
          puVar12 = operator_new(0x10);
          FUN_001c8ce4();
          *(int *)(puVar12 + 1) = param_4;
          *(int *)((long)puVar12 + 0xc) = param_5;
          *puVar12 = &PTR_FUN_004f5200;
          plVar13 = operator_new(0x20);
          plVar13[2] = (long)puVar12;
          *(undefined4 *)(plVar13 + 1) = 1;
          *plVar13 = (long)&PTR_FUN_004f55f0;
          plVar1 = plVar13 + 1;
          *param_1 = plVar13;
          param_1[1] = puVar12;
          do {
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          do {
            iVar4 = (int)*plVar1;
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        else if ((uVar2 != 3) || (bVar10)) {
          if ((uVar2 != 5) || (bVar10)) {
            if ((uVar2 != 6) || (bVar10)) {
              cv::format("Unsupported combination of source format (=%d), and buffer format (=%d)",
                         (String *)&local_10,(ulong)param_2,(ulong)param_3);
              cv::error(-0xd5,(String *)&local_10,
                        "cv::Ptr<cv::BaseRowFilter> cv::getRowSumFilter(int, int, int, int)",
                        "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x4d9);
              cv::String::deallocate((String *)&local_10);
              *param_1 = 0;
              param_1[1] = 0;
              return param_1;
            }
            puVar12 = operator_new(0x10);
            FUN_001c8ce4();
            *(int *)(puVar12 + 1) = param_4;
            *(int *)((long)puVar12 + 0xc) = param_5;
            *puVar12 = &DAT_004f5290;
            plVar13 = operator_new(0x20);
            plVar13[2] = (long)puVar12;
            *(undefined4 *)(plVar13 + 1) = 1;
            *plVar13 = (long)&PTR_FUN_004f5680;
            plVar1 = plVar13 + 1;
            *param_1 = plVar13;
            param_1[1] = puVar12;
            do {
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = (int)*plVar1 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            do {
              iVar4 = (int)*plVar1;
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = iVar4 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
          else {
            puVar12 = operator_new(0x10);
            FUN_001c8ce4();
            *(int *)(puVar12 + 1) = param_4;
            *(int *)((long)puVar12 + 0xc) = param_5;
            *puVar12 = &PTR_FUN_004f5260;
            plVar13 = operator_new(0x20);
            plVar13[2] = (long)puVar12;
            *(undefined4 *)(plVar13 + 1) = 1;
            *plVar13 = (long)&PTR_FUN_004f5650;
            plVar1 = plVar13 + 1;
            *param_1 = plVar13;
            param_1[1] = puVar12;
            do {
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = (int)*plVar1 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            do {
              iVar4 = (int)*plVar1;
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = iVar4 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
        }
        else {
          puVar12 = operator_new(0x10);
          FUN_001c8ce4();
          *(int *)(puVar12 + 1) = param_4;
          *(int *)((long)puVar12 + 0xc) = param_5;
          *puVar12 = &PTR_FUN_004f5230;
          plVar13 = operator_new(0x20);
          plVar13[2] = (long)puVar12;
          *(undefined4 *)(plVar13 + 1) = 1;
          *plVar13 = (long)&PTR_FUN_004f5620;
          plVar1 = plVar13 + 1;
          *param_1 = plVar13;
          param_1[1] = puVar12;
          do {
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          do {
            iVar4 = (int)*plVar1;
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
      }
      else {
        puVar12 = operator_new(0x10);
        FUN_001c8ce4();
        *(int *)(puVar12 + 1) = param_4;
        *(int *)((long)puVar12 + 0xc) = param_5;
        *puVar12 = &PTR_FUN_004f51d0;
        plVar13 = operator_new(0x20);
        plVar13[2] = (long)puVar12;
        *(undefined4 *)(plVar13 + 1) = 1;
        *plVar13 = (long)&PTR_FUN_004f55c0;
        plVar1 = plVar13 + 1;
        *param_1 = plVar13;
        param_1[1] = puVar12;
        do {
          cVar3 = '\x01';
          bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar9) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        do {
          iVar4 = (int)*plVar1;
          cVar3 = '\x01';
          bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar9) {
            *(int *)plVar1 = iVar4 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
    }
    else {
      puVar12 = operator_new(0x10);
      FUN_001c8ce4();
      *(int *)(puVar12 + 1) = param_4;
      *(int *)((long)puVar12 + 0xc) = param_5;
      *puVar12 = &PTR_FUN_004f5140;
      plVar13 = operator_new(0x20);
      plVar13[2] = (long)puVar12;
      *(undefined4 *)(plVar13 + 1) = 1;
      *plVar13 = (long)&PTR_FUN_004f5530;
      plVar1 = plVar13 + 1;
      *param_1 = plVar13;
      param_1[1] = puVar12;
      do {
        cVar3 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar9) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      do {
        iVar4 = (int)*plVar1;
        cVar3 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar9) {
          *(int *)plVar1 = iVar4 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
  }
  else {
    puVar12 = operator_new(0x10);
    FUN_001c8ce4();
    *(int *)(puVar12 + 1) = param_4;
    *(int *)((long)puVar12 + 0xc) = param_5;
    *puVar12 = &PTR_FUN_004f5110;
    plVar13 = operator_new(0x20);
    plVar13[2] = (long)puVar12;
    *(undefined4 *)(plVar13 + 1) = 1;
    *plVar13 = (long)&DAT_004f5500;
    plVar1 = plVar13 + 1;
    *param_1 = plVar13;
    param_1[1] = puVar12;
    do {
      cVar3 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar9) {
        *(int *)plVar1 = (int)*plVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    do {
      iVar4 = (int)*plVar1;
      cVar3 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar9) {
        *(int *)plVar1 = iVar4 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
joined_r0x0020dac4:
  if (iVar4 != 1) {
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x20] =
         (char)s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_;
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x21] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,1);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x22] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,2);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x23] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,3);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x24] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,4);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x25] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,5);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x26] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,6);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x27] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_,7);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x18] =
         (char)s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_;
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x19] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,1);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1a] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,2);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1b] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,3);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1c] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,4);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1d] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,5);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1e] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,6);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x1f] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_,7);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x10] =
         (char)s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_;
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x11] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,1);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x12] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,2);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x13] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,3);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x14] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,4);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x15] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,5);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x16] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,6);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0x17] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_,7);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[8] =
         (char)s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_;
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[9] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,1);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[10] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,2);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0xb] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,3);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0xc] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,4);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0xd] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,5);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0xe] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,6);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0xf] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_,7);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[0] =
         (char)s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_;
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[1] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,1);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[2] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,2);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[3] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,3);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[4] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,4);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[5] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,5);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[6] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,6);
    s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548[7] =
         SUB81(s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_,7);
    return param_1;
  }
  (**(code **)(*plVar13 + 0x10))();
  return param_1;
}


==================================================================

### FUNC 0020df30 (2072 bytes) name=FUN_0020df30

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 *
FUN_0020df30(undefined8 *param_1,undefined8 param_2,uint param_3,uint param_4,int param_5,
            int param_6)

{
  long *plVar1;
  uint uVar2;
  char cVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  bool bVar9;
  bool bVar10;
  undefined8 *puVar11;
  long *plVar12;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar2 = param_4 & 7;
  if ((param_3 >> 3 & 0x1ff) + 1 != (param_4 >> 3 & 0x1ff) + 1) {
    local_10 = 0;
    local_8 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_10,0x28);
    uVar8 = DAT_0045d590;
    uVar7 = _LAB_0045d588;
    uVar6 = _DAT_0045d580;
    uVar5 = DAT_0045d578;
    puVar11[4] = s_dstType__0045d598._0_8_;
    *puVar11 = uVar5;
    puVar11[1] = uVar6;
    puVar11[2] = uVar7;
    puVar11[3] = uVar8;
    cv::error(-0xd7,(String *)&local_10,
              "cv::Ptr<cv::BaseColumnFilter> cv::getColumnSumFilter(int, int, int, int, double)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x4e3);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_6 < 0) {
    param_6 = param_5 / 2;
  }
  bVar9 = (param_3 & 7) != 4;
  if ((bVar9) || (uVar2 != 0)) {
    bVar10 = (param_3 & 7) != 6;
    if ((bVar10) || (uVar2 != 0)) {
      if ((bVar9) || (uVar2 != 2)) {
        if ((bVar10) || (uVar2 != 2)) {
          if ((bVar9) || (uVar2 != 3)) {
            if ((bVar10) || (uVar2 != 3)) {
              if ((bVar9) || (uVar2 != 4)) {
                if ((bVar9) || (uVar2 != 5)) {
                  if ((bVar10) || (uVar2 != 5)) {
                    if ((bVar9) || (uVar2 != 6)) {
                      if ((bVar10) || (uVar2 != 6)) {
                        cv::format("Unsupported combination of sum format (=%d), and destination format (=%d)"
                                   ,(String *)&local_10,(ulong)param_3,(ulong)param_4);
                        cv::error(-0xd5,(String *)&local_10,
                                  "cv::Ptr<cv::BaseColumnFilter> cv::getColumnSumFilter(int, int, int, int, double)"
                                  ,
                                  "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp"
                                  ,0x501);
                        cv::String::deallocate((String *)&local_10);
                        *param_1 = 0;
                        param_1[1] = 0;
                        return param_1;
                      }
                      puVar11 = operator_new(0x38);
                      FUN_001c8d08();
                      *puVar11 = &PTR_FUN_004f53b0;
                      puVar11[4] = 0;
                      puVar11[5] = 0;
                      puVar11[6] = 0;
                      *(int *)(puVar11 + 1) = param_5;
                      *(int *)((long)puVar11 + 0xc) = param_6;
                      *(undefined4 *)(puVar11 + 3) = 0;
                      puVar11[2] = param_2;
                      plVar12 = operator_new(0x20);
                      plVar12[2] = (long)puVar11;
                      *(undefined4 *)(plVar12 + 1) = 1;
                      *plVar12 = (long)&PTR_FUN_004f5890;
                      plVar1 = plVar12 + 1;
                      *param_1 = plVar12;
                      param_1[1] = puVar11;
                      do {
                        cVar3 = '\x01';
                        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                        if (bVar9) {
                          *(int *)plVar1 = (int)*plVar1 + 1;
                          cVar3 = ExclusiveMonitorsStatus();
                        }
                      } while (cVar3 != '\0');
                      do {
                        iVar4 = (int)*plVar1;
                        cVar3 = '\x01';
                        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                        if (bVar9) {
                          *(int *)plVar1 = iVar4 + -1;
                          cVar3 = ExclusiveMonitorsStatus();
                        }
                      } while (cVar3 != '\0');
                    }
                    else {
                      puVar11 = operator_new(0x38);
                      FUN_001c8d08();
                      *puVar11 = &PTR_FUN_004f5380;
                      puVar11[4] = 0;
                      puVar11[5] = 0;
                      puVar11[6] = 0;
                      *(int *)(puVar11 + 1) = param_5;
                      *(int *)((long)puVar11 + 0xc) = param_6;
                      *(undefined4 *)(puVar11 + 3) = 0;
                      puVar11[2] = param_2;
                      plVar12 = operator_new(0x20);
                      plVar12[2] = (long)puVar11;
                      *(undefined4 *)(plVar12 + 1) = 1;
                      *plVar12 = (long)&PTR_FUN_004f5860;
                      plVar1 = plVar12 + 1;
                      *param_1 = plVar12;
                      param_1[1] = puVar11;
                      do {
                        cVar3 = '\x01';
                        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                        if (bVar9) {
                          *(int *)plVar1 = (int)*plVar1 + 1;
                          cVar3 = ExclusiveMonitorsStatus();
                        }
                      } while (cVar3 != '\0');
                      do {
                        iVar4 = (int)*plVar1;
                        cVar3 = '\x01';
                        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                        if (bVar9) {
                          *(int *)plVar1 = iVar4 + -1;
                          cVar3 = ExclusiveMonitorsStatus();
                        }
                      } while (cVar3 != '\0');
                    }
                  }
                  else {
                    puVar11 = operator_new(0x38);
                    FUN_001c8d08();
                    *puVar11 = &PTR_FUN_004f5350;
                    puVar11[4] = 0;
                    puVar11[5] = 0;
                    puVar11[6] = 0;
                    *(int *)(puVar11 + 1) = param_5;
                    *(int *)((long)puVar11 + 0xc) = param_6;
                    *(undefined4 *)(puVar11 + 3) = 0;
                    puVar11[2] = param_2;
                    plVar12 = operator_new(0x20);
                    plVar12[2] = (long)puVar11;
                    *(undefined4 *)(plVar12 + 1) = 1;
                    *plVar12 = (long)&PTR_FUN_004f5830;
                    plVar1 = plVar12 + 1;
                    *param_1 = plVar12;
                    param_1[1] = puVar11;
                    do {
                      cVar3 = '\x01';
                      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                      if (bVar9) {
                        *(int *)plVar1 = (int)*plVar1 + 1;
                        cVar3 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar3 != '\0');
                    do {
                      iVar4 = (int)*plVar1;
                      cVar3 = '\x01';
                      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                      if (bVar9) {
                        *(int *)plVar1 = iVar4 + -1;
                        cVar3 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar3 != '\0');
                  }
                }
                else {
                  puVar11 = operator_new(0x38);
                  FUN_001c8d08();
                  *puVar11 = &PTR_FUN_004f5080;
                  puVar11[4] = 0;
                  puVar11[5] = 0;
                  puVar11[6] = 0;
                  *(int *)(puVar11 + 1) = param_5;
                  *(int *)((long)puVar11 + 0xc) = param_6;
                  *(undefined4 *)(puVar11 + 3) = 0;
                  puVar11[2] = param_2;
                  plVar12 = operator_new(0x20);
                  plVar12[2] = (long)puVar11;
                  *(undefined4 *)(plVar12 + 1) = 1;
                  *plVar12 = (long)&PTR_FUN_004f5800;
                  plVar1 = plVar12 + 1;
                  *param_1 = plVar12;
                  param_1[1] = puVar11;
                  do {
                    cVar3 = '\x01';
                    bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                    if (bVar9) {
                      *(int *)plVar1 = (int)*plVar1 + 1;
                      cVar3 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar3 != '\0');
                  do {
                    iVar4 = (int)*plVar1;
                    cVar3 = '\x01';
                    bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                    if (bVar9) {
                      *(int *)plVar1 = iVar4 + -1;
                      cVar3 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar3 != '\0');
                }
              }
              else {
                puVar11 = operator_new(0x38);
                FUN_001c8d08();
                *puVar11 = &PTR_FUN_004f5050;
                puVar11[4] = 0;
                puVar11[5] = 0;
                puVar11[6] = 0;
                *(int *)(puVar11 + 1) = param_5;
                *(int *)((long)puVar11 + 0xc) = param_6;
                *(undefined4 *)(puVar11 + 3) = 0;
                puVar11[2] = param_2;
                plVar12 = operator_new(0x20);
                plVar12[2] = (long)puVar11;
                *(undefined4 *)(plVar12 + 1) = 1;
                *plVar12 = (long)&PTR_FUN_004f57d0;
                plVar1 = plVar12 + 1;
                *param_1 = plVar12;
                param_1[1] = puVar11;
                do {
                  cVar3 = '\x01';
                  bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                  if (bVar9) {
                    *(int *)plVar1 = (int)*plVar1 + 1;
                    cVar3 = ExclusiveMonitorsStatus();
                  }
                } while (cVar3 != '\0');
                do {
                  iVar4 = (int)*plVar1;
                  cVar3 = '\x01';
                  bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                  if (bVar9) {
                    *(int *)plVar1 = iVar4 + -1;
                    cVar3 = ExclusiveMonitorsStatus();
                  }
                } while (cVar3 != '\0');
              }
            }
            else {
              puVar11 = operator_new(0x38);
              FUN_001c8d08();
              *puVar11 = &PTR_FUN_004f5320;
              puVar11[4] = 0;
              puVar11[5] = 0;
              puVar11[6] = 0;
              *(int *)(puVar11 + 1) = param_5;
              *(int *)((long)puVar11 + 0xc) = param_6;
              *(undefined4 *)(puVar11 + 3) = 0;
              puVar11[2] = param_2;
              plVar12 = operator_new(0x20);
              plVar12[2] = (long)puVar11;
              *(undefined4 *)(plVar12 + 1) = 1;
              *plVar12 = (long)&PTR_FUN_004f57a0;
              plVar1 = plVar12 + 1;
              *param_1 = plVar12;
              param_1[1] = puVar11;
              do {
                cVar3 = '\x01';
                bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                if (bVar9) {
                  *(int *)plVar1 = (int)*plVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
              do {
                iVar4 = (int)*plVar1;
                cVar3 = '\x01';
                bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
                if (bVar9) {
                  *(int *)plVar1 = iVar4 + -1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
          }
          else {
            puVar11 = operator_new(0x38);
            FUN_001c8d08();
            *puVar11 = &PTR_FUN_004f4ff0;
            puVar11[4] = 0;
            puVar11[5] = 0;
            puVar11[6] = 0;
            *(int *)(puVar11 + 1) = param_5;
            *(int *)((long)puVar11 + 0xc) = param_6;
            *(undefined4 *)(puVar11 + 3) = 0;
            puVar11[2] = param_2;
            plVar12 = operator_new(0x20);
            plVar12[2] = (long)puVar11;
            *(undefined4 *)(plVar12 + 1) = 1;
            *plVar12 = (long)&PTR_FUN_004f5770;
            plVar1 = plVar12 + 1;
            *param_1 = plVar12;
            param_1[1] = puVar11;
            do {
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = (int)*plVar1 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            do {
              iVar4 = (int)*plVar1;
              cVar3 = '\x01';
              bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar9) {
                *(int *)plVar1 = iVar4 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
        }
        else {
          puVar11 = operator_new(0x38);
          FUN_001c8d08();
          *puVar11 = &PTR_FUN_004f52f0;
          puVar11[4] = 0;
          puVar11[5] = 0;
          puVar11[6] = 0;
          *(int *)(puVar11 + 1) = param_5;
          *(int *)((long)puVar11 + 0xc) = param_6;
          *(undefined4 *)(puVar11 + 3) = 0;
          puVar11[2] = param_2;
          plVar12 = operator_new(0x20);
          plVar12[2] = (long)puVar11;
          *(undefined4 *)(plVar12 + 1) = 1;
          *plVar12 = (long)&PTR_FUN_004f5740;
          plVar1 = plVar12 + 1;
          *param_1 = plVar12;
          param_1[1] = puVar11;
          do {
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = (int)*plVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          do {
            iVar4 = (int)*plVar1;
            cVar3 = '\x01';
            bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
            if (bVar9) {
              *(int *)plVar1 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
      }
      else {
        puVar11 = operator_new(0x38);
        FUN_001c8d08();
        *puVar11 = &PTR_FUN_004f5020;
        puVar11[4] = 0;
        puVar11[5] = 0;
        puVar11[6] = 0;
        *(int *)(puVar11 + 1) = param_5;
        *(int *)((long)puVar11 + 0xc) = param_6;
        *(undefined4 *)(puVar11 + 3) = 0;
        puVar11[2] = param_2;
        plVar12 = operator_new(0x20);
        plVar12[2] = (long)puVar11;
        *(undefined4 *)(plVar12 + 1) = 1;
        *plVar12 = (long)&PTR_FUN_004f5710;
        plVar1 = plVar12 + 1;
        *param_1 = plVar12;
        param_1[1] = puVar11;
        do {
          cVar3 = '\x01';
          bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar9) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        do {
          iVar4 = (int)*plVar1;
          cVar3 = '\x01';
          bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar9) {
            *(int *)plVar1 = iVar4 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
    }
    else {
      puVar11 = operator_new(0x38);
      FUN_001c8d08();
      *puVar11 = &PTR_FUN_004f52c0;
      puVar11[4] = 0;
      puVar11[5] = 0;
      puVar11[6] = 0;
      *(int *)(puVar11 + 1) = param_5;
      *(int *)((long)puVar11 + 0xc) = param_6;
      *(undefined4 *)(puVar11 + 3) = 0;
      puVar11[2] = param_2;
      plVar12 = operator_new(0x20);
      plVar12[2] = (long)puVar11;
      *(undefined4 *)(plVar12 + 1) = 1;
      *plVar12 = (long)&PTR_FUN_004f56e0;
      plVar1 = plVar12 + 1;
      *param_1 = plVar12;
      param_1[1] = puVar11;
      do {
        cVar3 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar9) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      do {
        iVar4 = (int)*plVar1;
        cVar3 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar9) {
          *(int *)plVar1 = iVar4 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
  }
  else {
    puVar11 = operator_new(0x38);
    FUN_001c8d08();
    *puVar11 = &PTR_FUN_004f4fc0;
    puVar11[4] = 0;
    puVar11[5] = 0;
    puVar11[6] = 0;
    *(int *)(puVar11 + 1) = param_5;
    *(int *)((long)puVar11 + 0xc) = param_6;
    *(undefined4 *)(puVar11 + 3) = 0;
    puVar11[2] = param_2;
    plVar12 = operator_new(0x20);
    plVar12[2] = (long)puVar11;
    *(undefined4 *)(plVar12 + 1) = 1;
    *plVar12 = (long)&PTR_FUN_004f56b0;
    plVar1 = plVar12 + 1;
    *param_1 = plVar12;
    param_1[1] = puVar11;
    do {
      cVar3 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar9) {
        *(int *)plVar1 = (int)*plVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    do {
      iVar4 = (int)*plVar1;
      cVar3 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar9) {
        *(int *)plVar1 = iVar4 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar4 == 1) {
    (**(code **)(*plVar12 + 0x10))();
  }
  return param_1;
}


==================================================================

### FUNC 0020e7ac (708 bytes) name=FUN_0020e7ac

undefined8 *
FUN_0020e7ac(undefined8 *param_1,ulong param_2,undefined4 param_3,int *param_4,undefined4 *param_5,
            char param_6,undefined4 param_7)

{
  long *plVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  long lVar6;
  void *pvVar7;
  undefined8 *puVar8;
  int iVar9;
  int iVar10;
  undefined4 uVar11;
  ulong uVar12;
  double dVar13;
  long *local_50;
  undefined8 uStack_48;
  long *local_40 [2];
  long *local_30 [2];
  undefined8 uStack_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar2 = (uint)param_2 & 7;
  uVar12 = param_2 & 0xffffffff;
  uVar5 = (uint)(uVar12 >> 3) & 0x1ff;
  if (uVar2 < 5) {
    if (param_6 == '\0') {
      iVar9 = uVar5 * 8 + 4;
      FUN_0020d8c4(local_40,param_2,iVar9,*param_4,*param_5);
      iVar10 = param_4[1];
      uVar11 = param_5[1];
      dVar13 = 1.0;
    }
    else {
      iVar10 = *param_4;
      iVar9 = 0x800000;
      if (((param_2 & 7) != 0) && (iVar9 = 0x8000, uVar2 != 2)) {
        iVar9 = 0x10000;
      }
      if (iVar9 < iVar10 * param_4[1]) {
        iVar9 = uVar5 * 8 + 6;
        FUN_0020d8c4(local_40,uVar12,iVar9,iVar10,*param_5);
        iVar10 = param_4[1];
        uVar11 = param_5[1];
        dVar13 = 1.0 / (double)(iVar10 * *param_4);
      }
      else {
        iVar9 = uVar5 * 8 + 4;
        FUN_0020d8c4(local_40,uVar12,iVar9,iVar10,*param_5);
        iVar10 = param_4[1];
        uVar11 = param_5[1];
        dVar13 = 1.0 / (double)(iVar10 * *param_4);
      }
    }
  }
  else {
    iVar9 = uVar5 * 8 + 6;
    FUN_0020d8c4(local_40,param_2,iVar9,*param_4,*param_5);
    iVar10 = param_4[1];
    uVar11 = param_5[1];
    dVar13 = 1.0;
    if (param_6 != '\0') {
      dVar13 = 1.0 / (double)(iVar10 * *param_4);
    }
  }
  FUN_0020df30(local_30,dVar13,iVar9,param_3,iVar10,uVar11);
  uStack_18 = 0;
  uStack_20 = 0;
  uStack_48 = 0;
  local_50 = (long *)0x0;
  uStack_8 = 0;
  local_10 = 0;
  pvVar7 = operator_new(0x130);
  FUN_001d5aa4(pvVar7,&local_50,local_40,local_30,uVar12,param_3,iVar9,param_7,0xffffffff,&uStack_20
              );
  puVar8 = operator_new(0x20);
  *(undefined4 *)(puVar8 + 1) = 1;
  puVar8[2] = pvVar7;
  *puVar8 = &PTR_FUN_004f3ca0;
  *param_1 = puVar8;
  plVar1 = local_50 + 1;
  param_1[1] = pvVar7;
  if (local_50 != (long *)0x0) {
    do {
      lVar6 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_50 + 0x10))();
    }
  }
  plVar1 = local_30[0] + 1;
  if (local_30[0] != (long *)0x0) {
    do {
      lVar6 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_30[0] + 0x10))();
    }
  }
  plVar1 = local_40[0] + 1;
  if (local_40[0] != (long *)0x0) {
    do {
      lVar6 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*local_40[0] + 0x10))();
    }
  }
  return param_1;
}


==================================================================

### FUNC 0020eb14 (1128 bytes) name=boxFilter

/* cv::boxFilter(cv::_InputArray const&, cv::_OutputArray const&, int, cv::Size_<int>,
   cv::Point_<int>, bool, int) */

void cv::boxFilter(_InputArray *param_1,_InputArray *param_2,uint param_3,undefined4 *param_4,
                  undefined8 *param_5,char param_6,uint param_7)

{
  long *plVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  int iVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  Mat *pMVar9;
  int *piVar10;
  undefined4 *puVar11;
  undefined8 local_e8;
  long *local_e0;
  long *local_d8;
  undefined8 local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar6 = _InputArray::kind(param_1);
  if (iVar6 == 0x10000) {
    pMVar9 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar9;
    local_bc = *(int *)(pMVar9 + 4);
    local_b8 = *(int *)(pMVar9 + 8);
    local_b4 = *(int *)(pMVar9 + 0xc);
    local_b0 = *(undefined8 *)(pMVar9 + 0x10);
    local_a8 = *(undefined8 *)(pMVar9 + 0x18);
    local_a0 = *(undefined8 *)(pMVar9 + 0x20);
    local_98 = *(undefined8 *)(pMVar9 + 0x28);
    local_90 = *(undefined8 *)(pMVar9 + 0x30);
    local_88 = *(long *)(pMVar9 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar10 = (int *)(local_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar4) {
          *piVar10 = *piVar10 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar9 + 0x48);
      local_68 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar2 = local_c0 & 7;
  if (-1 < (int)param_3) {
    uVar2 = param_3;
  }
  local_5c = *local_80;
  local_60 = local_80[1];
  _OutputArray::create
            ((_OutputArray *)param_2,(Mat *)&local_60,(uVar2 & 7) + (local_c0 & 0xff8),0xffffffff,0,
             0);
  iVar6 = _InputArray::kind(param_2);
  if (iVar6 == 0x10000) {
    pMVar9 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar9;
    local_50 = *(undefined8 *)(pMVar9 + 0x10);
    local_5c = *(int *)(pMVar9 + 4);
    local_58 = *(undefined4 *)(pMVar9 + 8);
    local_54 = *(undefined4 *)(pMVar9 + 0xc);
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar10 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar4) {
          *piVar10 = *piVar10 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (((param_7 == 0) || (param_6 == '\0')) || ((param_7 >> 4 & 1) == 0)) {
    uVar8 = *param_4;
    uVar7 = param_4[1];
  }
  else {
    if (local_b8 == 1) {
      param_4[1] = 1;
      uVar7 = 1;
    }
    else {
      uVar7 = param_4[1];
    }
    if (local_b4 == 1) {
      *param_4 = 1;
      uVar8 = 1;
    }
    else {
      uVar8 = *param_4;
    }
  }
  local_e8 = CONCAT44(uVar7,uVar8);
  local_d0 = *param_5;
  FUN_0020e7ac(&local_e0,local_c0 & 0xfff,local_60 & 0xfff,&local_e8,&local_d0,param_6,param_7);
  local_d0 = 0;
  local_c8 = 0xffffffff;
  local_c4 = 0xffffffff;
  local_e8 = 0;
  (**(code **)(*local_d8 + 0x28))(local_d8,(Mat *)&local_c0,(Mat *)&local_60,&local_d0,&local_e8,0);
  plVar1 = local_e0 + 1;
  if (local_e0 != (long *)0x0) {
    do {
      lVar5 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar5 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar5 == 1) {
      (**(code **)(*local_e0 + 0x10))();
    }
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar10;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar4) {
        *piVar10 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    puVar11 = local_20;
    do {
      *puVar11 = 0;
      iVar6 = iVar6 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar10;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar4) {
        *piVar10 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    piVar10 = local_80;
    do {
      *piVar10 = 0;
      iVar6 = iVar6 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0020f000 (68 bytes) name=blur

/* cv::blur(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, cv::Point_<int>, int)
    */

void cv::blur(undefined8 param_1,undefined8 param_2,undefined8 *param_3,undefined8 *param_4,
             undefined4 param_5)

{
  undefined8 local_10;
  undefined8 local_8;
  
  local_8 = *param_4;
  local_10 = *param_3;
  boxFilter(param_1,param_2,0xffffffff,&local_10,&local_8,1,param_5);
  return;
}


==================================================================

### FUNC 0020f044 (2540 bytes) name=sqrBoxFilter

/* cv::sqrBoxFilter(cv::_InputArray const&, cv::_OutputArray const&, int, cv::Size_<int>,
   cv::Point_<int>, bool, int) */

void cv::sqrBoxFilter(_InputArray *param_1,_InputArray *param_2,uint param_3,int *param_4,
                     int *param_5,char param_6,int param_7)

{
  long *plVar1;
  int *piVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  char cVar7;
  long lVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  bool bVar13;
  int iVar14;
  ulong uVar15;
  char *pcVar16;
  undefined8 *puVar17;
  long *plVar18;
  long *plVar19;
  int iVar20;
  Mat *pMVar21;
  undefined4 *puVar22;
  double dVar23;
  uint local_150;
  int local_138;
  int iStack_134;
  long *local_130;
  undefined8 uStack_128;
  long *local_120;
  undefined8 *local_118;
  long *local_110 [2];
  String aSStack_100 [16];
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar15 = _InputArray::type(param_1,-1);
  local_150 = (uint)((uVar15 & 0xffffffff) >> 3) & 0x1ff;
  uVar4 = (uint)uVar15 & 7;
  _InputArray::size((int)param_1);
  if ((int)param_3 < 0) {
    param_3 = 5;
    if (4 < uVar4) {
      param_3 = 6;
    }
  }
  else {
    param_3 = param_3 & 7;
  }
  if ((param_6 != '\0') && (param_7 != 0)) {
    if (iStack_134 == 1) {
      param_4[1] = 1;
    }
    if (local_138 == 1) {
      *param_4 = 1;
    }
  }
  iVar20 = 6;
  if ((uVar15 & 7) == 0) {
    iVar20 = 4;
  }
  uVar3 = iVar20 + local_150 * 8;
  iVar20 = local_150 * 8 + param_3;
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x10000) {
    pMVar21 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar21;
    local_bc = *(int *)(pMVar21 + 4);
    local_b8 = *(undefined4 *)(pMVar21 + 8);
    local_b4 = *(undefined4 *)(pMVar21 + 0xc);
    local_b0 = *(undefined8 *)(pMVar21 + 0x10);
    local_a8 = *(undefined8 *)(pMVar21 + 0x18);
    local_a0 = *(undefined8 *)(pMVar21 + 0x20);
    local_98 = *(undefined8 *)(pMVar21 + 0x28);
    local_90 = *(undefined8 *)(pMVar21 + 0x30);
    local_88 = *(long *)(pMVar21 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar2 = (int *)(local_88 + 0x14);
      do {
        cVar7 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar13) {
          *piVar2 = *piVar2 + 1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar21 + 0x48);
      local_68 = (*(undefined8 **)(pMVar21 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar21);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_60 = CONCAT44(iStack_134,local_138);
  _OutputArray::create((_OutputArray *)param_2,(Mat *)&local_60,iVar20,0xffffffff,0,0);
  iVar14 = _InputArray::kind(param_2);
  if (iVar14 == 0x10000) {
    pMVar21 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar6 = *(uint *)pMVar21;
    local_50 = *(undefined8 *)(pMVar21 + 0x10);
    local_60 = *(ulong *)pMVar21;
    local_58 = *(undefined4 *)(pMVar21 + 8);
    local_54 = *(undefined4 *)(pMVar21 + 0xc);
    local_48 = *(undefined8 *)(pMVar21 + 0x18);
    local_40 = *(undefined8 *)(pMVar21 + 0x20);
    local_38 = *(undefined8 *)(pMVar21 + 0x28);
    local_30 = *(undefined8 *)(pMVar21 + 0x30);
    local_28 = *(long *)(pMVar21 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar7 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar13) {
          *piVar2 = *piVar2 + 1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar21 + 0x48);
      local_8 = (*(undefined8 **)(pMVar21 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar6;
      Mat::copySize((Mat *)&local_60,pMVar21);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar5 = *param_4;
  iVar14 = *param_5;
  if ((uVar3 >> 3) + 1 != local_150 + 1) {
    local_f0 = 0;
    local_e8 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_f0,0x28);
    uVar12 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._24_8_;
    uVar11 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._16_8_;
    uVar10 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._8_8_;
    uVar9 = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._0_8_;
    *(undefined8 *)(pcVar16 + 0x20) = s_CV_MAT_CN_sumType_____CV_MAT_CN__0045d548._32_8_;
    *(undefined8 *)pcVar16 = uVar9;
    *(undefined8 *)(pcVar16 + 8) = uVar10;
    *(undefined8 *)(pcVar16 + 0x10) = uVar11;
    *(undefined8 *)(pcVar16 + 0x18) = uVar12;
    error(-0xd7,(String *)&local_f0,
          "cv::Ptr<cv::BaseRowFilter> cv::getSqrRowSumFilter(int, int, int, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x5b7);
    String::deallocate((String *)&local_f0);
  }
  if (iVar14 < 0) {
    iVar14 = iVar5 / 2;
  }
  bVar13 = (uVar15 & 7) != 0;
  if (((uVar3 & 7) != 4) || (bVar13)) {
    if ((uVar3 & 7) != 6) {
LAB_0020f7e8:
      format("Unsupported combination of source format (=%d), and buffer format (=%d)",aSStack_100,
             uVar15 & 0xffffffff,(ulong)uVar3);
      error(-0xd5,aSStack_100,
            "cv::Ptr<cv::BaseRowFilter> cv::getSqrRowSumFilter(int, int, int, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x5cb);
      String::deallocate(aSStack_100);
      local_120 = (long *)0x0;
      local_118 = (undefined8 *)0x0;
      goto LAB_0020f338;
    }
    if (bVar13) {
      if (uVar4 == 2) {
        puVar17 = operator_new(0x10);
        FUN_001c8ce4();
        *(int *)(puVar17 + 1) = iVar5;
        *(int *)((long)puVar17 + 0xc) = iVar14;
        *puVar17 = &PTR_FUN_004f5440;
        local_120 = operator_new(0x20);
        *(undefined4 *)(local_120 + 1) = 1;
        *local_120 = (long)&PTR_FUN_004f5920;
        plVar1 = local_120 + 1;
        local_120[2] = (long)puVar17;
        do {
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
        do {
          iVar14 = (int)*plVar1;
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = iVar14 + -1;
            cVar7 = ExclusiveMonitorsStatus();
          }
          local_118 = puVar17;
        } while (cVar7 != '\0');
      }
      else if (uVar4 == 3) {
        puVar17 = operator_new(0x10);
        FUN_001c8ce4();
        *(int *)(puVar17 + 1) = iVar5;
        *(int *)((long)puVar17 + 0xc) = iVar14;
        *puVar17 = &PTR_FUN_004f5470;
        local_120 = operator_new(0x20);
        *(undefined4 *)(local_120 + 1) = 1;
        *local_120 = (long)&DAT_004f5950;
        plVar1 = local_120 + 1;
        local_120[2] = (long)puVar17;
        do {
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
        do {
          iVar14 = (int)*plVar1;
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = iVar14 + -1;
            cVar7 = ExclusiveMonitorsStatus();
          }
          local_118 = puVar17;
        } while (cVar7 != '\0');
      }
      else if (uVar4 == 5) {
        puVar17 = operator_new(0x10);
        FUN_001c8ce4();
        *(int *)(puVar17 + 1) = iVar5;
        *(int *)((long)puVar17 + 0xc) = iVar14;
        *puVar17 = &PTR_FUN_004f54a0;
        local_120 = operator_new(0x20);
        *(undefined4 *)(local_120 + 1) = 1;
        *local_120 = (long)&PTR_FUN_004f5980;
        plVar1 = local_120 + 1;
        local_120[2] = (long)puVar17;
        do {
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
        do {
          iVar14 = (int)*plVar1;
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = iVar14 + -1;
            cVar7 = ExclusiveMonitorsStatus();
          }
          local_118 = puVar17;
        } while (cVar7 != '\0');
      }
      else {
        if (uVar4 != 6) goto LAB_0020f7e8;
        puVar17 = operator_new(0x10);
        FUN_001c8ce4();
        *(int *)(puVar17 + 1) = iVar5;
        *(int *)((long)puVar17 + 0xc) = iVar14;
        *puVar17 = &PTR_FUN_004f54d0;
        local_120 = operator_new(0x20);
        *(undefined4 *)(local_120 + 1) = 1;
        *local_120 = (long)&PTR_FUN_004f59b0;
        plVar1 = local_120 + 1;
        local_120[2] = (long)puVar17;
        do {
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = (int)*plVar1 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
        do {
          iVar14 = (int)*plVar1;
          cVar7 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar13) {
            *(int *)plVar1 = iVar14 + -1;
            cVar7 = ExclusiveMonitorsStatus();
          }
          local_118 = puVar17;
        } while (cVar7 != '\0');
      }
    }
    else {
      puVar17 = operator_new(0x10);
      FUN_001c8ce4();
      *(int *)(puVar17 + 1) = iVar5;
      *(int *)((long)puVar17 + 0xc) = iVar14;
      *puVar17 = &PTR_FUN_004f5410;
      local_120 = operator_new(0x20);
      *(undefined4 *)(local_120 + 1) = 1;
      *local_120 = (long)&PTR_FUN_004f58f0;
      plVar1 = local_120 + 1;
      local_120[2] = (long)puVar17;
      do {
        cVar7 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar13) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
      do {
        iVar14 = (int)*plVar1;
        cVar7 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar13) {
          *(int *)plVar1 = iVar14 + -1;
          cVar7 = ExclusiveMonitorsStatus();
        }
        local_118 = puVar17;
      } while (cVar7 != '\0');
    }
  }
  else {
    puVar17 = operator_new(0x10);
    FUN_001c8ce4();
    *(int *)(puVar17 + 1) = iVar5;
    *(int *)((long)puVar17 + 0xc) = iVar14;
    *puVar17 = &PTR_FUN_004f53e0;
    local_120 = operator_new(0x20);
    *(undefined4 *)(local_120 + 1) = 1;
    *local_120 = (long)&PTR_FUN_004f58c0;
    plVar1 = local_120 + 1;
    local_120[2] = (long)puVar17;
    do {
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar13) {
        *(int *)plVar1 = (int)*plVar1 + 1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    do {
      iVar14 = (int)*plVar1;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar13) {
        *(int *)plVar1 = iVar14 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
      local_118 = puVar17;
    } while (cVar7 != '\0');
  }
  if (iVar14 == 1) {
    (**(code **)(*local_120 + 0x10))();
  }
LAB_0020f338:
  dVar23 = 1.0;
  if (param_6 != '\0') {
    dVar23 = 1.0 / (double)(param_4[1] * *param_4);
  }
  FUN_0020df30(local_110,dVar23,uVar3,iVar20,param_4[1],param_5[1]);
  local_d8 = 0;
  local_e0 = 0;
  uStack_128 = 0;
  local_130 = (long *)0x0;
  uStack_c8 = 0;
  local_d0 = 0;
  plVar18 = operator_new(0x130);
  FUN_001d5aa4(plVar18,&local_130,&local_120,local_110,uVar15 & 0xffffffff,iVar20,uVar3,param_7,
               0xffffffff,&local_e0);
  plVar19 = operator_new(0x20);
  *(undefined4 *)(plVar19 + 1) = 1;
  plVar19[2] = (long)plVar18;
  *plVar19 = (long)&PTR_FUN_004f3ca0;
  plVar1 = local_130 + 1;
  if (local_130 != (long *)0x0) {
    do {
      lVar8 = *plVar1;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar13) {
        *(int *)plVar1 = (int)lVar8 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if ((int)lVar8 == 1) {
      (**(code **)(*local_130 + 0x10))();
    }
  }
  local_e0 = 0;
  local_d8 = 0xffffffffffffffff;
  local_f0 = 0;
  (**(code **)(*plVar18 + 0x28))(plVar18,(Mat *)&local_c0,(Mat *)&local_60,&local_e0,&local_f0,0);
  plVar1 = plVar19 + 1;
  do {
    lVar8 = *plVar1;
    cVar7 = '\x01';
    bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
    if (bVar13) {
      *(int *)plVar1 = (int)lVar8 + -1;
      cVar7 = ExclusiveMonitorsStatus();
    }
  } while (cVar7 != '\0');
  if ((int)lVar8 == 1) {
    (**(code **)(*plVar19 + 0x10))(plVar19);
  }
  plVar1 = local_110[0] + 1;
  if (local_110[0] != (long *)0x0) {
    do {
      lVar8 = *plVar1;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar13) {
        *(int *)plVar1 = (int)lVar8 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if ((int)lVar8 == 1) {
      (**(code **)(*local_110[0] + 0x10))();
    }
  }
  plVar1 = local_120 + 1;
  if (local_120 != (long *)0x0) {
    do {
      lVar8 = *plVar1;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar13) {
        *(int *)plVar1 = (int)lVar8 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if ((int)lVar8 == 1) {
      (**(code **)(*local_120 + 0x10))();
    }
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar20 = *piVar2;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar13) {
        *piVar2 = iVar20 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if (iVar20 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar20 = 0;
    puVar22 = local_20;
    do {
      *puVar22 = 0;
      iVar20 = iVar20 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar20 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar2 = (int *)(local_88 + 0x14);
    do {
      iVar20 = *piVar2;
      cVar7 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar13) {
        *piVar2 = iVar20 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if (iVar20 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar20 = 0;
    puVar22 = local_80;
    do {
      *puVar22 = 0;
      iVar20 = iVar20 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar20 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0020fbc0 (1264 bytes) name=getGaussianKernel

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::getGaussianKernel(int, double, int) */

void __thiscall cv::getGaussianKernel(cv *this,int param_1,double param_2,int param_3)

{
  int iVar1;
  int iVar2;
  undefined1 auVar3 [16];
  double dVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  char *pcVar12;
  ulong uVar13;
  double *pdVar14;
  undefined8 *puVar15;
  uint uVar16;
  long lVar17;
  ulong uVar18;
  double *pdVar19;
  undefined8 *puVar20;
  Mat *in_x8;
  double *pdVar21;
  undefined *puVar22;
  float fVar23;
  double dVar24;
  double dVar25;
  uint local_10 [4];
  
  uVar9 = (uint)this;
  if ((7 < (int)uVar9 || 0.0 < param_2) ||
     (iVar1 = (int)(((ulong)this & 0xffffffff) >> 0x1f), (uVar9 + iVar1 & 1) - iVar1 != 1)) {
    puVar22 = (undefined *)0x0;
  }
  else {
    puVar22 = &UNK_0045dbf0 + (long)((int)uVar9 >> 1) * 0x1c;
  }
  if (1 < param_1 - 5U) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar12 = (char *)String::allocate((String *)local_10,0x22);
    uVar8 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._24_8_;
    uVar7 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._16_8_;
    uVar6 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._8_8_;
    uVar5 = s_ktype____CV_32F____ktype____CV_6_0043e3a0._0_8_;
    *(undefined2 *)(pcVar12 + 0x20) = s_ktype____CV_32F____ktype____CV_6_0043e3a0._32_2_;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    error(-0xd7,(String *)local_10,"cv::Mat cv::getGaussianKernel(int, double, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x60d);
    String::deallocate((String *)local_10);
  }
  *(undefined8 *)(in_x8 + 0x10) = 0;
  uVar6 = _UNK_002100d8;
  uVar5 = _DAT_002100d0;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 8) = uVar6;
  *(undefined8 *)in_x8 = uVar5;
  *(undefined8 *)(in_x8 + 0x30) = 0;
  *(undefined8 *)(in_x8 + 0x38) = 0;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  local_10[1] = 1;
  local_10[0] = uVar9;
  Mat::create(in_x8,2,(int *)local_10,param_1 & 0xfff);
  pdVar21 = *(double **)(in_x8 + 0x10);
  if (param_2 <= 0.0) {
    param_2 = DAT_002100e8 + DAT_002100e0 * ((double)(int)(uVar9 - 1) * 0.5 + -1.0);
  }
  dVar25 = -0.5 / (param_2 * param_2);
  if ((int)uVar9 < 1) {
    return;
  }
  uVar16 = uVar9 - 1;
  if (puVar22 == (undefined *)0x0) {
    if (param_1 == 5) {
      dVar24 = 0.0;
      lVar17 = 0;
      do {
        dVar4 = (double)(int)lVar17 - (double)(int)uVar16 * 0.5;
        dVar4 = ::exp(dVar25 * dVar4 * dVar4);
        *(float *)((long)pdVar21 + lVar17 * 4) = (float)dVar4;
        lVar17 = lVar17 + 1;
        dVar24 = dVar24 + (double)(float)dVar4;
      } while (lVar17 != (ulong)uVar16 + 1);
      goto LAB_0020fe84;
    }
    dVar24 = 0.0;
    lVar17 = 0;
    do {
      dVar4 = (double)(int)lVar17 - (double)(int)uVar16 * 0.5;
      dVar4 = ::exp(dVar25 * dVar4 * dVar4);
      pdVar21[lVar17] = dVar4;
      lVar17 = lVar17 + 1;
      dVar24 = dVar24 + dVar4;
    } while (lVar17 != (ulong)uVar16 + 1);
  }
  else {
    if (param_1 == 5) {
      dVar24 = 0.0;
      lVar17 = 0;
      do {
        fVar23 = *(float *)(puVar22 + lVar17 * 4);
        *(float *)((long)pdVar21 + lVar17 * 4) = fVar23;
        lVar17 = lVar17 + 1;
        dVar24 = dVar24 + (double)fVar23;
      } while ((int)lVar17 < (int)uVar9);
LAB_0020fe84:
      uVar10 = -((uint)((ulong)pdVar21 >> 2) & 3) & 3;
      if (uVar9 < uVar10) {
        uVar10 = uVar9;
      }
      uVar13 = (ulong)uVar10;
      dVar24 = 1.0 / dVar24;
      if ((int)uVar9 < 5) {
        uVar13 = (ulong)this & 0xffffffff;
      }
      else {
        uVar18 = 0;
        uVar11 = 0;
        if (uVar10 == 0) goto LAB_0020ff20;
      }
      uVar11 = (uint)uVar13;
      *(float *)pdVar21 = (float)((double)*(float *)pdVar21 * dVar24);
      if ((uVar11 != 1) &&
         (*(float *)((long)pdVar21 + 4) = (float)((double)*(float *)((long)pdVar21 + 4) * dVar24),
         uVar11 != 2)) {
        *(float *)(pdVar21 + 1) = (float)((double)*(float *)(pdVar21 + 1) * dVar24);
        if (uVar11 == 4) {
          *(float *)((long)pdVar21 + 0xc) =
               (float)((double)*(float *)((long)pdVar21 + 0xc) * dVar24);
        }
        else {
          uVar13 = 3;
        }
      }
      uVar18 = uVar13;
      if (uVar9 == uVar11) {
        return;
      }
LAB_0020ff20:
      uVar10 = ((uVar9 - uVar11) - 4 >> 2) + 1;
      iVar1 = uVar10 * 4;
      if (2 < uVar16 - uVar11) {
        puVar15 = (undefined8 *)((long)pdVar21 + (ulong)uVar11 * 4);
        uVar16 = 0;
        puVar20 = puVar15;
        do {
          uVar16 = uVar16 + 1;
          dVar25 = (double)(float)*puVar20 * dVar24;
          dVar4 = (double)(float)((ulong)*puVar20 >> 0x20) * dVar24;
          auVar3._8_4_ = SUB84(dVar4,0);
          auVar3._0_8_ = dVar25;
          auVar3._12_4_ = (int)((ulong)dVar4 >> 0x20);
          puVar15[1] = CONCAT44((float)((double)(float)((ulong)puVar20[1] >> 0x20) * dVar24),
                                (float)((double)(float)puVar20[1] * dVar24));
          *puVar15 = CONCAT44((float)auVar3._8_8_,(float)dVar25);
          puVar15 = puVar15 + 2;
          puVar20 = puVar20 + 2;
        } while (uVar16 < uVar10);
        uVar18 = (ulong)(uint)((int)uVar18 + iVar1);
        if (uVar9 - uVar11 == iVar1) {
          return;
        }
      }
      uVar13 = -(uVar18 >> 0x1f) & 0xfffffffc00000000 | uVar18 << 2;
      *(float *)((long)pdVar21 + uVar13) =
           (float)((double)*(float *)((long)pdVar21 + uVar13) * dVar24);
      if ((int)uVar9 <= (int)uVar18 + 1) {
        return;
      }
      *(float *)((long)pdVar21 + uVar13 + 4) =
           (float)((double)*(float *)((long)pdVar21 + uVar13 + 4) * dVar24);
      if ((int)uVar9 <= (int)uVar18 + 2) {
        return;
      }
      *(float *)((long)pdVar21 + uVar13 + 8) =
           (float)((double)*(float *)((long)pdVar21 + uVar13 + 8) * dVar24);
      return;
    }
    dVar24 = 0.0;
    lVar17 = 0;
    do {
      fVar23 = *(float *)(puVar22 + lVar17 * 4);
      pdVar21[lVar17] = (double)fVar23;
      lVar17 = lVar17 + 1;
      dVar24 = dVar24 + (double)fVar23;
    } while ((int)lVar17 < (int)uVar9);
  }
  uVar16 = (uint)((ulong)pdVar21 >> 3) & 1;
  if (uVar9 < uVar16) {
    uVar16 = uVar9;
  }
  uVar13 = (ulong)uVar16;
  dVar24 = 1.0 / dVar24;
  if ((int)uVar9 < 4) {
    uVar13 = (ulong)this & 0xffffffff;
  }
  else {
    uVar18 = 0;
    uVar10 = 0;
    if (uVar16 == 0) goto LAB_0020fdac;
  }
  uVar10 = (uint)uVar13;
  *pdVar21 = *pdVar21 * dVar24;
  if (uVar10 != 1) {
    pdVar21[1] = pdVar21[1] * dVar24;
    if (uVar10 == 3) {
      pdVar21[2] = pdVar21[2] * dVar24;
    }
    else {
      uVar13 = 2;
    }
  }
  uVar18 = uVar13;
  if (uVar9 == uVar10) {
    return;
  }
LAB_0020fdac:
  iVar2 = uVar9 - uVar10;
  uVar9 = (iVar2 - 2U >> 1) + 1;
  iVar1 = uVar9 * 2;
  if (iVar2 != 1) {
    uVar16 = 0;
    pdVar14 = pdVar21 + uVar10;
    pdVar19 = pdVar21 + uVar10;
    do {
      dVar25 = *pdVar14;
      uVar16 = uVar16 + 1;
      pdVar19[1] = pdVar14[1] * dVar24;
      *pdVar19 = dVar25 * dVar24;
      pdVar14 = pdVar14 + 2;
      pdVar19 = pdVar19 + 2;
    } while (uVar16 < uVar9);
    uVar18 = (ulong)(uint)((int)uVar18 + iVar1);
    if (iVar2 == iVar1) {
      return;
    }
  }
  uVar13 = -(uVar18 >> 0x1f) & 0xfffffff800000000 | uVar18 << 3;
  *(double *)((long)pdVar21 + uVar13) = *(double *)((long)pdVar21 + uVar13) * dVar24;
  return;
}


==================================================================

### FUNC 002100f0 (1692 bytes) name=FUN_002100f0

void FUN_002100f0(double param_1,double param_2,Mat *param_3,Mat *param_4,uint param_5,uint *param_6
                 )

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  undefined4 uVar4;
  char cVar5;
  bool bVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  uint uVar13;
  char *pcVar14;
  undefined4 *puVar15;
  long lVar16;
  uint uVar17;
  undefined8 *puVar18;
  undefined8 *puVar19;
  int iVar20;
  undefined8 uVar21;
  double dVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  uVar3 = param_5 & 7;
  uVar2 = param_5 & 7;
  if (param_2 <= 0.0) {
    param_2 = param_1;
  }
  uVar17 = *param_6;
  if ((int)uVar17 < 1) {
    if (param_1 <= 0.0) {
      if ((0 < (int)param_6[1]) || (param_2 <= 0.0)) goto LAB_00210148;
LAB_0021071c:
      dVar22 = 3.0;
      if (uVar3 != 0) {
        dVar22 = 4.0;
      }
      lVar16 = lrint(dVar22 * param_2 * 2.0 + 1.0);
      uVar17 = *param_6;
      param_6[1] = (uint)lVar16 | 1;
    }
    else {
      dVar22 = 3.0;
      if ((param_5 & 7) != 0) {
        dVar22 = 4.0;
      }
      lVar16 = lrint(dVar22 * param_1 * 2.0 + 1.0);
      uVar17 = (uint)lVar16 | 1;
      param_5 = param_6[1];
      *param_6 = uVar17;
      if (((int)param_5 < 1) && (0.0 < param_2)) goto LAB_0021071c;
    }
    if (0 < (int)uVar17) {
LAB_002106c8:
      if (((uVar17 & 1) != 0) && (uVar13 = param_6[1], 0 < (int)uVar13)) goto LAB_002106d8;
    }
LAB_00210148:
    local_60 = 0;
    local_58 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_60,0x54);
    uVar11 = s_ksize_width_>_0____ksize_width___0045d5f8._72_8_;
    uVar10 = s_ksize_width_>_0____ksize_width___0045d5f8._64_8_;
    uVar9 = s_ksize_width_>_0____ksize_width___0045d5f8._56_8_;
    uVar8 = s_ksize_width_>_0____ksize_width___0045d5f8._48_8_;
    uVar7 = s_ksize_width_>_0____ksize_width___0045d5f8._40_8_;
    uVar26 = s_ksize_width_>_0____ksize_width___0045d5f8._32_8_;
    uVar25 = s_ksize_width_>_0____ksize_width___0045d5f8._24_8_;
    uVar24 = s_ksize_width_>_0____ksize_width___0045d5f8._16_8_;
    uVar23 = s_ksize_width_>_0____ksize_width___0045d5f8._8_8_;
    uVar21 = s_ksize_width_>_0____ksize_width___0045d5f8._0_8_;
    param_5 = 0x45de30;
    *(undefined4 *)(pcVar14 + 0x50) = s_ksize_width_>_0____ksize_width___0045d5f8._80_4_;
    *(undefined8 *)pcVar14 = uVar21;
    *(undefined8 *)(pcVar14 + 8) = uVar23;
    *(undefined8 *)(pcVar14 + 0x10) = uVar24;
    *(undefined8 *)(pcVar14 + 0x18) = uVar25;
    *(undefined8 *)(pcVar14 + 0x20) = uVar26;
    *(undefined8 *)(pcVar14 + 0x28) = uVar7;
    *(undefined8 *)(pcVar14 + 0x30) = uVar8;
    *(undefined8 *)(pcVar14 + 0x38) = uVar9;
    *(undefined8 *)(pcVar14 + 0x40) = uVar10;
    *(undefined8 *)(pcVar14 + 0x48) = uVar11;
    cv::error(-0xd7,(String *)&local_60,
              "void cv::createGaussianKernels(cv::Mat&, cv::Mat&, int, cv::Size, double, double)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0x643);
    cv::String::deallocate((String *)&local_60);
    uVar17 = *param_6;
  }
  else {
    uVar13 = param_6[1];
    if ((int)uVar13 < 1) {
      if (0.0 < param_2) goto LAB_0021071c;
      goto LAB_002106c8;
    }
    if ((uVar17 & 1) == 0) goto LAB_00210148;
LAB_002106d8:
    if ((uVar13 & 1) == 0) goto LAB_00210148;
  }
  if (param_1 < 0.0) {
    param_1 = 0.0;
  }
  if (param_2 < 0.0) {
    param_2 = 0.0;
  }
  uVar3 = uVar2;
  if (uVar2 < 5) {
    uVar3 = 5;
  }
  cv::getGaussianKernel((cv *)(ulong)uVar17,uVar3,param_1,param_5);
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = *piVar1 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  if (*(long *)(param_3 + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(param_3 + 0x38) + 0x14);
    do {
      iVar12 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar12 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(param_3);
    }
  }
  *(undefined8 *)(param_3 + 0x38) = 0;
  *(undefined8 *)(param_3 + 0x10) = 0;
  *(undefined8 *)(param_3 + 0x28) = 0;
  *(undefined8 *)(param_3 + 0x20) = 0;
  *(undefined8 *)(param_3 + 0x18) = 0;
  if (*(int *)(param_3 + 4) < 1) {
    *(undefined4 *)param_3 = (undefined4)local_60;
LAB_00210280:
    if (2 < local_60._4_4_) goto LAB_0021028c;
    *(int *)(param_3 + 4) = local_60._4_4_;
    puVar18 = *(undefined8 **)(param_3 + 0x48);
    *(undefined4 *)(param_3 + 8) = (undefined4)local_58;
    *(undefined4 *)(param_3 + 0xc) = local_58._4_4_;
    *puVar18 = *local_18;
    puVar18[1] = local_18[1];
  }
  else {
    iVar12 = 0;
    puVar15 = *(undefined4 **)(param_3 + 0x40);
    do {
      *puVar15 = 0;
      iVar12 = iVar12 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar12 < *(int *)(param_3 + 4));
    *(undefined4 *)param_3 = (undefined4)local_60;
    if (*(int *)(param_3 + 4) < 3) goto LAB_00210280;
LAB_0021028c:
    cv::Mat::copySize(param_3,(Mat *)&local_60);
  }
  iVar12 = (int)&local_50;
  *(undefined8 *)(param_3 + 0x18) = uStack_48;
  *(undefined8 *)(param_3 + 0x10) = local_50;
  *(undefined8 *)(param_3 + 0x28) = uStack_38;
  *(undefined8 *)(param_3 + 0x20) = local_40;
  *(long *)(param_3 + 0x38) = lStack_28;
  *(undefined8 *)(param_3 + 0x30) = local_30;
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar20 = *piVar1;
      iVar12 = iVar20 + -1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar12;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar20 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_60._4_4_) {
    iVar20 = 0;
    puVar15 = local_20;
    do {
      *puVar15 = 0;
      iVar20 = iVar20 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar20 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if ((param_6[1] == *param_6) && (ABS(param_1 - param_2) < DAT_002107f0)) {
    if (param_3 == param_4) {
      return;
    }
    if (*(long *)(param_3 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(param_3 + 0x38) + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(long *)(param_4 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(param_4 + 0x38) + 0x14);
      do {
        iVar12 = *piVar1;
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = iVar12 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar12 == 1) {
        cv::Mat::deallocate(param_4);
      }
    }
    *(undefined8 *)(param_4 + 0x38) = 0;
    *(undefined8 *)(param_4 + 0x10) = 0;
    *(undefined8 *)(param_4 + 0x28) = 0;
    *(undefined8 *)(param_4 + 0x20) = 0;
    *(undefined8 *)(param_4 + 0x18) = 0;
    if (*(int *)(param_4 + 4) < 1) {
      *(undefined4 *)param_4 = *(undefined4 *)param_3;
LAB_00210608:
      iVar12 = *(int *)(param_3 + 4);
      if (iVar12 < 3) {
        puVar19 = *(undefined8 **)(param_3 + 0x48);
        puVar18 = *(undefined8 **)(param_4 + 0x48);
        uVar4 = *(undefined4 *)(param_3 + 8);
        *(undefined4 *)(param_4 + 0xc) = *(undefined4 *)(param_3 + 0xc);
        *(int *)(param_4 + 4) = iVar12;
        *(undefined4 *)(param_4 + 8) = uVar4;
        *puVar18 = *puVar19;
        puVar18[1] = puVar19[1];
        goto LAB_00210640;
      }
    }
    else {
      iVar12 = 0;
      puVar15 = *(undefined4 **)(param_4 + 0x40);
      do {
        *puVar15 = 0;
        iVar12 = iVar12 + 1;
        puVar15 = puVar15 + 1;
      } while (iVar12 < *(int *)(param_4 + 4));
      *(undefined4 *)param_4 = *(undefined4 *)param_3;
      if (*(int *)(param_4 + 4) < 3) goto LAB_00210608;
    }
    cv::Mat::copySize(param_4,param_3);
LAB_00210640:
    uVar26 = *(undefined8 *)(param_3 + 0x10);
    uVar25 = *(undefined8 *)(param_3 + 0x28);
    uVar24 = *(undefined8 *)(param_3 + 0x20);
    uVar23 = *(undefined8 *)(param_3 + 0x38);
    uVar21 = *(undefined8 *)(param_3 + 0x30);
    *(undefined8 *)(param_4 + 0x18) = *(undefined8 *)(param_3 + 0x18);
    *(undefined8 *)(param_4 + 0x10) = uVar26;
    *(undefined8 *)(param_4 + 0x28) = uVar25;
    *(undefined8 *)(param_4 + 0x20) = uVar24;
    *(undefined8 *)(param_4 + 0x38) = uVar23;
    *(undefined8 *)(param_4 + 0x30) = uVar21;
    return;
  }
  if (uVar2 < 5) {
    uVar2 = 5;
  }
  cv::getGaussianKernel((cv *)(ulong)param_6[1],uVar2,param_2,iVar12);
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = *piVar1 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  if (*(long *)(param_4 + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(param_4 + 0x38) + 0x14);
    do {
      iVar12 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar12 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(param_4);
    }
  }
  *(undefined8 *)(param_4 + 0x38) = 0;
  *(undefined8 *)(param_4 + 0x10) = 0;
  *(undefined8 *)(param_4 + 0x28) = 0;
  *(undefined8 *)(param_4 + 0x20) = 0;
  *(undefined8 *)(param_4 + 0x18) = 0;
  if (*(int *)(param_4 + 4) < 1) {
    *(undefined4 *)param_4 = (undefined4)local_60;
LAB_002103f0:
    if (local_60._4_4_ < 3) {
      *(int *)(param_4 + 4) = local_60._4_4_;
      puVar18 = *(undefined8 **)(param_4 + 0x48);
      *(undefined4 *)(param_4 + 8) = (undefined4)local_58;
      *(undefined4 *)(param_4 + 0xc) = local_58._4_4_;
      *puVar18 = *local_18;
      puVar18[1] = local_18[1];
      goto LAB_00210408;
    }
  }
  else {
    iVar12 = 0;
    puVar15 = *(undefined4 **)(param_4 + 0x40);
    do {
      *puVar15 = 0;
      iVar12 = iVar12 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar12 < *(int *)(param_4 + 4));
    *(undefined4 *)param_4 = (undefined4)local_60;
    if (*(int *)(param_4 + 4) < 3) goto LAB_002103f0;
  }
  cv::Mat::copySize(param_4,(Mat *)&local_60);
LAB_00210408:
  *(undefined8 *)(param_4 + 0x18) = uStack_48;
  *(undefined8 *)(param_4 + 0x10) = local_50;
  *(undefined8 *)(param_4 + 0x28) = uStack_38;
  *(undefined8 *)(param_4 + 0x20) = local_40;
  *(long *)(param_4 + 0x38) = lStack_28;
  *(undefined8 *)(param_4 + 0x30) = local_30;
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar12 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_60._4_4_) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00210800 (592 bytes) name=FUN_00210800

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8
FUN_00210800(undefined8 param_1,undefined4 param_2,undefined8 *param_3,undefined4 param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 *puVar5;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110 [2];
  Mat *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  undefined8 uStack_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_78 = &local_70;
  local_18 = &local_10;
  uStack_b8 = _UNK_00210aa8;
  local_c0 = _DAT_00210aa0;
  uStack_68 = 0;
  local_70 = 0;
  uStack_58 = _UNK_00210aa8;
  local_60 = _DAT_00210aa0;
  local_e0 = *param_3;
  uStack_8 = 0;
  local_10 = 0;
  local_80 = &uStack_b8;
  local_20 = &uStack_58;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  FUN_002100f0((Mat *)&local_c0,(Mat *)&local_60,param_2,&local_e0);
  uStack_d8 = 0;
  local_e0 = 0;
  uStack_c8 = 0;
  local_d0 = 0;
  local_100 = 0;
  local_fc = 0;
  local_110[0] = 0x1010000;
  local_e8 = 0;
  local_e4 = 0;
  local_f8[0] = 0x1010000;
  local_118 = 0xffffffff;
  local_114 = 0xffffffff;
  local_108 = (Mat *)&local_c0;
  local_f0 = (Mat *)&local_60;
  FUN_001d5c50(param_1,0,param_2,param_2,local_110,local_f8,&local_118,param_4,0xffffffff,&local_e0)
  ;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar4 = 0;
    puVar5 = local_20;
    do {
      *(undefined4 *)puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = (undefined8 *)((long)puVar5 + 4);
    } while (iVar4 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar4 = 0;
    puVar5 = local_80;
    do {
      *(undefined4 *)puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = (undefined8 *)((long)puVar5 + 4);
    } while (iVar4 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  return param_1;
}


==================================================================

### FUNC 00210ab0 (732 bytes) name=GaussianBlur

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::GaussianBlur(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double,
   int) */

void cv::GaussianBlur(undefined8 param_1_00,undefined8 param_2_00,_InputArray *param_1,
                     _OutputArray *param_2,int *param_5,uint param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  int local_100;
  int local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  int local_d8;
  int local_d4;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar4 = _InputArray::type(param_1,-1);
  _InputArray::size((int)param_1);
  _OutputArray::create(param_2,(Mat *)&local_60,uVar4,0xffffffff,0,0);
  if ((param_6 == 0) || ((param_6 >> 4 & 1) == 0)) {
LAB_00210b3c:
    local_d8 = *param_5;
    if (local_d8 != 1) {
      local_d4 = param_5[1];
      goto LAB_00210b4c;
    }
  }
  else {
    if (local_fc == 1) {
      param_5[1] = 1;
    }
    if (local_100 != 1) goto LAB_00210b3c;
    *param_5 = 1;
  }
  local_d4 = param_5[1];
  local_d8 = 1;
  if (local_d4 == 1) {
    _InputArray::copyTo(param_1,param_2);
    return;
  }
LAB_00210b4c:
  local_18 = &local_10;
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_20 = &uStack_58;
  uStack_58 = _UNK_00210de8;
  local_60 = _DAT_00210de0;
  local_b0 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_a8 = 0;
  uStack_b8 = _UNK_00210de8;
  local_c0 = _DAT_00210de0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  FUN_002100f0(param_1_00,param_2_00,(Mat *)&local_c0,(Mat *)&local_60,uVar4,&local_d8);
  local_e0 = 0;
  local_dc = 0;
  local_f0[0] = 0x1010000;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = 0x1010000;
  local_f8 = 0xffffffff;
  local_f4 = 0xffffffff;
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  sepFilter2D(0,param_1,param_2,uVar4 & 7,local_f0,&local_d8,&local_f8,param_6);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar5 = 0;
    puVar6 = local_20;
    do {
      *(undefined4 *)puVar6 = 0;
      iVar5 = iVar5 + 1;
      puVar6 = (undefined8 *)((long)puVar6 + 4);
    } while (iVar5 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar5 = 0;
    puVar6 = local_80;
    do {
      *(undefined4 *)puVar6 = 0;
      iVar5 = iVar5 + 1;
      puVar6 = (undefined8 *)((long)puVar6 + 4);
    } while (iVar5 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00210df0 (8436 bytes) name=medianBlur

/* WARNING: Removing unreachable block (ram,0x00210fb0) */
/* WARNING: Removing unreachable block (ram,0x00210fb4) */
/* WARNING: Removing unreachable block (ram,0x00210fbc) */
/* WARNING: Removing unreachable block (ram,0x00210fc4) */
/* WARNING: Removing unreachable block (ram,0x00211730) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::medianBlur(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::medianBlur(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  undefined1 (*pauVar7) [16];
  undefined1 (*pauVar8) [16];
  undefined1 (*pauVar9) [16];
  uint uVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  bool bVar15;
  uint uVar16;
  int iVar17;
  undefined1 *puVar18;
  undefined1 *puVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined2 uVar26;
  char cVar27;
  int iVar28;
  undefined8 *puVar29;
  char *pcVar30;
  undefined1 (*pauVar31) [16];
  float *pfVar32;
  int *piVar33;
  Mat *pMVar34;
  float *pfVar35;
  float *pfVar36;
  ulong uVar37;
  ulong uVar38;
  long lVar39;
  ulong uVar40;
  float *pfVar41;
  ulong uVar42;
  long lVar43;
  ulong uVar44;
  undefined1 (*pauVar45) [16];
  undefined1 (*pauVar46) [16];
  int iVar47;
  uint uVar48;
  uint uVar49;
  int iVar50;
  ulong uVar51;
  int iVar52;
  uint uVar53;
  ulong uVar54;
  uint uVar55;
  float fVar56;
  double dVar57;
  float fVar58;
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  float fVar62;
  float fVar63;
  undefined1 auVar64 [16];
  float fVar65;
  undefined1 auVar66 [16];
  float fVar67;
  undefined1 auVar68 [16];
  float fVar69;
  undefined1 auVar70 [16];
  float fVar71;
  undefined1 auVar72 [16];
  float fVar73;
  undefined1 auVar74 [16];
  float fVar75;
  undefined1 auVar76 [16];
  float fVar77;
  undefined1 auVar78 [16];
  float fVar79;
  undefined1 auVar80 [16];
  float fVar81;
  float fVar82;
  undefined1 auVar83 [16];
  undefined1 auVar84 [16];
  float fVar85;
  undefined1 auVar86 [16];
  float fVar87;
  undefined1 auVar88 [16];
  float fVar89;
  undefined1 auVar90 [16];
  undefined1 auVar91 [16];
  float fVar92;
  undefined1 auVar93 [16];
  float fVar94;
  undefined1 auVar95 [16];
  undefined1 auVar96 [16];
  undefined1 auVar97 [16];
  float fVar98;
  undefined1 auVar99 [16];
  float fVar100;
  undefined1 auVar101 [16];
  float fVar102;
  undefined1 auVar103 [16];
  float fVar104;
  undefined1 auVar105 [16];
  float fVar106;
  undefined1 auVar107 [16];
  undefined1 auVar108 [16];
  undefined1 auVar109 [16];
  float fVar110;
  undefined1 auVar111 [16];
  float fVar112;
  undefined1 auVar113 [16];
  undefined1 auVar114 [16];
  undefined1 auVar115 [16];
  undefined1 auVar116 [16];
  undefined1 auVar117 [16];
  undefined1 auVar118 [16];
  undefined1 auVar119 [16];
  float *local_210;
  int local_1b4;
  uint local_1a8;
  int local_1a4;
  undefined4 local_170 [2];
  Mat *local_168;
  undefined4 local_160;
  undefined4 local_15c;
  undefined8 local_158;
  Mat *local_150;
  undefined4 local_148;
  undefined4 local_144;
  undefined8 local_140;
  Mat *local_138;
  ulong local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  float *local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  int *local_e0;
  ulong *local_d8;
  ulong local_d0;
  ulong local_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  float *local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined8 *local_80;
  ulong *local_78;
  ulong local_70;
  ulong uStack_68;
  undefined8 local_60;
  undefined8 local_58;
  float *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  ulong *local_18;
  ulong local_10;
  ulong local_8;
  
  if ((param_3 % 2 != 1) || (iVar28 = _InputArray::dims(param_1,-1), 2 < iVar28)) {
    local_60 = 0;
    local_58 = 0;
    puVar29 = (undefined8 *)String::allocate((String *)&local_60,0x28);
    uVar23 = DAT_0045d6a0;
    uVar22 = DAT_0045d698;
    uVar21 = _DAT_0045d690;
    uVar20 = DAT_0045d688;
    puVar29[4] = s___<__2_)_0045d6a8._0_8_;
    *puVar29 = uVar20;
    puVar29[1] = uVar21;
    puVar29[2] = uVar22;
    puVar29[3] = uVar23;
    error(-0xd7,(String *)&local_60,"void cv::medianBlur(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xa4d);
    String::deallocate((String *)&local_60);
  }
  if (param_3 < 2) {
    _InputArray::copyTo(param_1,param_2);
    return;
  }
  iVar28 = _InputArray::kind(param_1);
  if (iVar28 == 0x10000) {
    pMVar34 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar34;
    local_11c = *(int *)(pMVar34 + 4);
    local_118 = *(int *)(pMVar34 + 8);
    local_114 = *(int *)(pMVar34 + 0xc);
    local_110 = *(float **)(pMVar34 + 0x10);
    uStack_108 = *(undefined8 *)(pMVar34 + 0x18);
    local_100 = *(undefined8 *)(pMVar34 + 0x20);
    uStack_f8 = *(undefined8 *)(pMVar34 + 0x28);
    local_f0 = *(undefined8 *)(pMVar34 + 0x30);
    lStack_e8 = *(long *)(pMVar34 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (lStack_e8 != 0) {
      piVar33 = (int *)(lStack_e8 + 0x14);
      do {
        cVar27 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar15) {
          *piVar33 = *piVar33 + 1;
          cVar27 = ExclusiveMonitorsStatus();
        }
      } while (cVar27 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_d0 = **(ulong **)(pMVar34 + 0x48);
      local_c8 = (*(ulong **)(pMVar34 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_60 = CONCAT44(*local_e0,local_e0[1]);
  _OutputArray::create(param_2,(Mat *)&local_60,local_120 & 0xfff,0xffffffff,0,0);
  iVar28 = _InputArray::kind((_InputArray *)param_2);
  if (iVar28 == 0x10000) {
    pMVar34 = *(Mat **)(param_2 + 8);
    local_20 = (int *)&local_58;
    local_18 = &local_10;
    uVar16 = *(uint *)pMVar34;
    local_50 = *(float **)(pMVar34 + 0x10);
    local_60 = *(ulong *)pMVar34;
    local_58 = *(undefined8 *)(pMVar34 + 8);
    local_48 = *(undefined8 *)(pMVar34 + 0x18);
    local_40 = *(undefined8 *)(pMVar34 + 0x20);
    local_38 = *(undefined8 *)(pMVar34 + 0x28);
    local_30 = *(undefined8 *)(pMVar34 + 0x30);
    local_28 = *(long *)(pMVar34 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar33 = (int *)(local_28 + 0x14);
      do {
        cVar27 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar15) {
          *piVar33 = *piVar33 + 1;
          cVar27 = ExclusiveMonitorsStatus();
        }
      } while (cVar27 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_10 = **(ulong **)(pMVar34 + 0x48);
      local_8 = (*(ulong **)(pMVar34 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar16;
      Mat::copySize((Mat *)&local_60,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar37 = _DAT_00212f90;
  uVar16 = param_3 - 3;
  local_78 = &local_70;
  local_80 = &uStack_b8;
  auVar66 = ZEXT416(uVar16 & 0xfffffffd);
  uStack_68 = 0;
  local_70 = 0;
  local_b0 = (float *)0x0;
  uStack_a8 = 0;
  local_a0 = 0;
  uStack_98 = 0;
  local_90 = 0;
  uStack_b8 = _UNK_00212f98;
  local_c0 = _DAT_00212f90;
  lStack_88 = 0;
  if ((uVar16 & 0xfffffffd) == 0) {
    if (local_50 == local_110) {
      local_130 = CONCAT44(uVar16,uVar16) & 0xfffffffdfffffffd;
      local_140 = CONCAT44(local_140._4_4_,0x2010000);
      local_138 = (Mat *)&local_c0;
      Mat::copyTo((Mat *)&local_120,(_OutputArray *)&local_140);
      uVar16 = (uint)local_c0;
    }
    else {
      if (lStack_e8 != 0) {
        piVar33 = (int *)(lStack_e8 + 0x14);
        do {
          cVar27 = '\x01';
          bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
          if (bVar15) {
            *piVar33 = *piVar33 + 1;
            cVar27 = ExclusiveMonitorsStatus();
          }
        } while (cVar27 != '\0');
      }
      local_c0._4_4_ = (int)(uVar37 >> 0x20);
      lStack_88 = 0;
      local_b0 = (float *)0x0;
      uStack_98 = 0;
      local_a0 = 0;
      uStack_a8 = 0;
      if (local_c0._4_4_ < 1) {
LAB_00211018:
        if (2 < local_11c) goto LAB_00211024;
        uStack_b8 = CONCAT44(local_114,local_118);
        local_70 = *local_d8;
        local_c0 = CONCAT44(local_11c,local_120);
        uStack_68 = local_d8[1];
        uVar16 = local_120;
      }
      else {
        iVar28 = 0;
        puVar29 = local_80;
        do {
          *(undefined4 *)puVar29 = 0;
          iVar28 = iVar28 + 1;
          puVar29 = (undefined8 *)((long)puVar29 + 4);
        } while (iVar28 < local_c0._4_4_);
        if (local_c0._4_4_ < 3) goto LAB_00211018;
LAB_00211024:
        local_c0 = CONCAT44(local_c0._4_4_,local_120);
        Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
        uVar16 = (uint)local_c0;
      }
      uStack_98 = uStack_f8;
      local_a0 = local_100;
      lStack_88 = lStack_e8;
      local_90 = local_f0;
      uStack_a8 = uStack_108;
      local_b0 = local_110;
    }
    uVar37 = local_10;
    pfVar36 = local_50;
    pfVar35 = local_b0;
    uVar10 = uVar16 & 7;
    if ((uVar16 & 7) == 0) {
      FUN_001f2e4c((Mat *)&local_c0,(Mat *)&local_60,param_3);
    }
    else if (uVar10 == 2) {
      FUN_001f4c10((Mat *)&local_c0,(Mat *)&local_60,param_3);
    }
    else if (uVar10 == 3) {
      FUN_001fbfc0((Mat *)&local_c0,(Mat *)&local_60,param_3);
    }
    else if (uVar10 == 5) {
      uVar10 = uVar16 >> 3 & 0x1ff;
      uVar16 = uVar10 + 1;
      iVar28 = local_20[1];
      uVar51 = local_10 >> 2;
      uVar54 = uVar51 & 0xffffffff;
      local_1b4 = *local_20;
      local_210 = local_50;
      local_1a8 = (uint)(local_70 >> 2);
      cVar27 = checkHardwareSupport(3);
      iVar50 = auVar66._0_4_;
      if (cVar27 == '\0') {
        cVar27 = checkHardwareSupport(100);
        iVar50 = auVar66._0_4_;
      }
      local_170[0] = CONCAT31(local_170[0]._1_3_,cVar27);
      if (param_3 == 3) {
        if (iVar28 == 1) {
          iVar50 = local_1b4 + 1;
          if (local_1b4 == 1) {
            iVar50 = 2;
            goto LAB_00212dc8;
          }
          iVar28 = local_1a8 - uVar16;
        }
        else {
          if (local_1b4 != 1) {
            uVar10 = iVar28 * uVar16;
            if (0 < local_1b4) {
              lVar43 = (ulong)uVar16 * 4;
              lVar39 = (ulong)uVar16 * -4;
              iVar28 = (uVar10 - 4) - uVar16;
              pfVar32 = pfVar35;
              iVar47 = 0;
LAB_002128ec:
              iVar17 = iVar47 + 1;
              uVar54 = 0;
              iVar2 = iVar17;
              if (local_1b4 + -1 < iVar17) {
                iVar2 = local_1b4 + -1;
              }
              iVar50 = local_1a8 * iVar50;
              iVar2 = local_1a8 * iVar2;
              uVar55 = uVar16;
              if (cVar27 == '\0') {
                uVar55 = uVar10;
              }
              do {
                if ((int)uVar55 <= (int)uVar54) {
                  do {
                    if (uVar10 == uVar55) {
                      pfVar36 = (float *)((long)pfVar36 +
                                         (-(uVar37 >> 0x21 & 1) & 0xfffffffc00000000 |
                                         (uVar51 & 0xffffffff) << 2));
                      pfVar32 = pfVar32 + (int)local_1a8;
                      iVar50 = iVar47;
                      iVar47 = iVar17;
                      if (iVar17 == local_1b4) goto LAB_002110c4;
                      goto LAB_002128ec;
                    }
                    if ((int)uVar54 <= iVar28) {
                      uVar44 = -(uVar54 >> 0x1f) & 0xfffffffc00000000 | uVar54 << 2;
                      pauVar46 = (undefined1 (*) [16])((long)pfVar35 + uVar44 + (long)iVar2 * 4);
                      pauVar45 = (undefined1 (*) [16])((long)pfVar32 + uVar44);
                      pauVar31 = (undefined1 (*) [16])((long)pfVar35 + uVar44 + (long)iVar50 * 4);
                      puVar29 = (undefined8 *)((long)pfVar36 + uVar44);
                      do {
                        puVar18 = *pauVar46;
                        puVar19 = *pauVar31;
                        auVar66 = *pauVar46;
                        pauVar7 = (undefined1 (*) [16])((long)pauVar45 + lVar39);
                        pauVar8 = (undefined1 (*) [16])(lVar39 + (long)pauVar46);
                        pauVar9 = (undefined1 (*) [16])((long)pauVar31 + lVar39);
                        auVar61 = *pauVar31;
                        uVar55 = (int)uVar54 + 4;
                        uVar54 = (ulong)uVar55;
                        pauVar46 = pauVar46 + 1;
                        auVar113 = NEON_fmin(*pauVar45,*(undefined1 (*) [16])(*pauVar45 + lVar43),4)
                        ;
                        auVar59 = NEON_fmin(auVar66,*(undefined1 (*) [16])(puVar18 + lVar43),4);
                        auVar60 = NEON_fmax(*(undefined1 (*) [16])(*pauVar45 + lVar43),*pauVar45,4);
                        pauVar45 = pauVar45 + 1;
                        auVar68 = NEON_fmin(auVar61,*(undefined1 (*) [16])(puVar19 + lVar43),4);
                        pauVar31 = pauVar31 + 1;
                        auVar72 = NEON_fmax(*(undefined1 (*) [16])(puVar18 + lVar43),auVar66,4);
                        auVar78 = NEON_fmax(auVar59,*pauVar8,4);
                        auVar66 = NEON_fmax(auVar113,*pauVar7,4);
                        auVar61 = NEON_fmax(*(undefined1 (*) [16])(puVar19 + lVar43),auVar61,4);
                        auVar96 = NEON_fmax(auVar68,*pauVar9,4);
                        auVar91 = NEON_fmin(auVar78,auVar72,4);
                        auVar64 = NEON_fmin(auVar66,auVar60,4);
                        auVar72 = NEON_fmax(auVar72,auVar78,4);
                        auVar60 = NEON_fmax(auVar60,auVar66,4);
                        auVar66 = NEON_fmin(auVar96,auVar61,4);
                        auVar78 = NEON_fmin(auVar64,auVar91,4);
                        auVar61 = NEON_fmax(auVar61,auVar96,4);
                        auVar60 = NEON_fmin(auVar60,auVar72,4);
                        auVar96 = NEON_fmin(*pauVar9,auVar68,4);
                        auVar72 = NEON_fmax(auVar78,auVar66,4);
                        auVar78 = NEON_fmin(*pauVar7,auVar113,4);
                        auVar91 = NEON_fmax(auVar91,auVar64,4);
                        auVar66 = NEON_fmin(auVar61,auVar60,4);
                        auVar60 = NEON_fmin(*pauVar8,auVar59,4);
                        auVar78 = NEON_fmax(auVar78,auVar96,4);
                        auVar61 = NEON_fmin(auVar72,auVar91,4);
                        auVar72 = NEON_fmax(auVar60,auVar78,4);
                        auVar60 = NEON_fmin(auVar61,auVar66,4);
                        auVar66 = NEON_fmax(auVar66,auVar61,4);
                        auVar61 = NEON_fmax(auVar60,auVar72,4);
                        auVar66 = NEON_fmin(auVar61,auVar66,4);
                        puVar29[1] = auVar66._8_8_;
                        *puVar29 = auVar66._0_8_;
                        puVar29 = puVar29 + 2;
                      } while ((int)uVar55 <= iVar28);
                    }
                    uVar55 = uVar10;
                  } while ((int)uVar10 <= (int)uVar54);
                }
                uVar48 = (uint)uVar54;
                uVar49 = uVar48 - uVar16;
                if ((int)uVar48 < (int)uVar16) {
                  uVar49 = uVar48;
                }
                uVar54 = -(uVar54 >> 0x1f) & 0xfffffffc00000000 | uVar54 << 2;
                uVar53 = uVar16 + uVar48;
                if ((int)(uVar10 - uVar16) <= (int)uVar48) {
                  uVar53 = uVar48;
                }
                uVar38 = -(ulong)(uVar49 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar49 << 2;
                uVar44 = -(ulong)(uVar53 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar53 << 2;
                fVar87 = *(float *)((long)pfVar35 + uVar54 + (long)iVar50 * 4);
                fVar79 = *(float *)((long)pfVar35 + uVar44 + (long)iVar50 * 4);
                fVar98 = *(float *)((long)pfVar35 + uVar38 + (long)iVar50 * 4);
                fVar77 = *(float *)((long)pfVar32 + uVar38);
                fVar85 = *(float *)((long)pfVar32 + uVar54);
                fVar63 = *(float *)((long)pfVar32 + uVar44);
                fVar110 = *(float *)((long)pfVar35 + uVar38 + (long)iVar2 * 4);
                fVar71 = *(float *)((long)pfVar35 + uVar54 + (long)iVar2 * 4);
                fVar65 = *(float *)((long)pfVar35 + uVar44 + (long)iVar2 * 4);
                fVar89 = fVar79;
                if (fVar87 <= fVar79) {
                  fVar89 = fVar87;
                  fVar87 = fVar79;
                }
                fVar79 = fVar85;
                if (fVar85 <= fVar63) {
                  fVar79 = fVar63;
                  fVar63 = fVar85;
                }
                fVar85 = fVar71;
                if (fVar71 <= fVar65) {
                  fVar85 = fVar65;
                  fVar65 = fVar71;
                }
                fVar71 = fVar89;
                if (fVar98 <= fVar89) {
                  fVar71 = fVar98;
                  fVar98 = fVar89;
                }
                fVar89 = fVar77;
                if (fVar77 <= fVar63) {
                  fVar89 = fVar63;
                  fVar63 = fVar77;
                }
                fVar77 = fVar110;
                if (fVar110 <= fVar65) {
                  fVar77 = fVar65;
                  fVar65 = fVar110;
                }
                fVar110 = fVar87;
                if (fVar98 <= fVar87) {
                  fVar110 = fVar98;
                  fVar98 = fVar87;
                }
                fVar87 = fVar79;
                if (fVar89 <= fVar79) {
                  fVar87 = fVar89;
                  fVar89 = fVar79;
                }
                fVar79 = fVar77;
                if (fVar77 <= fVar85) {
                  fVar79 = fVar85;
                  fVar85 = fVar77;
                }
                if (fVar71 <= fVar63) {
                  fVar71 = fVar63;
                }
                if (fVar89 <= fVar79) {
                  fVar79 = fVar89;
                }
                fVar89 = fVar87;
                if (fVar87 <= fVar85) {
                  fVar89 = fVar85;
                  fVar85 = fVar87;
                }
                if (fVar71 <= fVar65) {
                  fVar71 = fVar65;
                }
                if (fVar110 <= fVar85) {
                  fVar110 = fVar85;
                }
                if (fVar98 <= fVar79) {
                  fVar79 = fVar98;
                }
                if (fVar110 <= fVar89) {
                  fVar89 = fVar110;
                }
                fVar87 = fVar79;
                if (fVar89 <= fVar79) {
                  fVar87 = fVar89;
                  fVar89 = fVar79;
                }
                if (fVar71 <= fVar87) {
                  fVar71 = fVar87;
                }
                if (fVar71 <= fVar89) {
                  fVar89 = fVar71;
                }
                *(float *)((long)pfVar36 + uVar54) = fVar89;
                uVar54 = (ulong)(uVar48 + 1);
              } while( true );
            }
            goto LAB_002110c4;
          }
          iVar50 = iVar28 + 1;
          local_1b4 = iVar28;
LAB_00212dc8:
          iVar28 = 0;
          uVar54 = (ulong)uVar16;
          local_1a8 = uVar16;
        }
        if (0 < local_1b4) {
          iVar47 = 0;
          do {
            lVar39 = 0;
            uVar37 = -(ulong)(-local_1a8 >> 0x1f) & 0xfffffffc00000000 | (ulong)-local_1a8 << 2;
            if (iVar47 < 1) {
              uVar37 = 0;
            }
            uVar51 = -(ulong)(local_1a8 >> 0x1f) & 0xfffffffc00000000 | (ulong)local_1a8 << 2;
            if (iVar50 + -2 <= iVar47) {
              uVar51 = 0;
            }
            do {
              fVar63 = *(float *)((long)pfVar35 + lVar39 * 4 + uVar37);
              fVar87 = pfVar35[lVar39];
              fVar65 = *(float *)((long)pfVar35 + lVar39 * 4 + uVar51);
              fVar89 = fVar63;
              if (fVar63 <= fVar87) {
                fVar89 = fVar87;
                fVar87 = fVar63;
              }
              if (fVar65 < fVar89) {
                fVar89 = fVar65;
              }
              if (fVar87 <= fVar89) {
                fVar87 = fVar89;
              }
              pfVar36[lVar39] = fVar87;
              lVar39 = lVar39 + 1;
            } while ((int)lVar39 < (int)uVar16);
            iVar47 = iVar47 + 1;
            pfVar35 = pfVar35 + (long)iVar28 + (long)(int)uVar10 + 1;
            pfVar36 = (float *)((long)pfVar36 +
                               (-(uVar54 >> 0x1f) & 0xfffffffc00000000 | uVar54 << 2));
          } while (iVar47 != local_1b4);
        }
      }
      else if (param_3 == 5) {
        if (iVar28 == 1) {
          iVar50 = local_1b4 + 1;
          if (local_1b4 == 1) {
            iVar50 = 2;
            goto LAB_00212c64;
          }
          iVar28 = local_1a8 - uVar16;
        }
        else {
          if (local_1b4 != 1) {
            uVar10 = iVar28 * uVar16;
            if (0 < local_1b4) {
              iVar47 = uVar16 * -2;
              iVar17 = local_1b4 + -1;
              iVar28 = (uVar10 - 4) + iVar47;
              uVar55 = uVar16 * 2;
              local_1a4 = 0;
              pfVar32 = pfVar35;
              pfVar36 = pfVar35;
LAB_002118f0:
              uVar54 = 0;
              iVar2 = local_1a4 + 1;
              iVar13 = iVar2;
              if (iVar17 < iVar2) {
                iVar13 = iVar17;
              }
              iVar14 = iVar17;
              if (local_1a4 + 2 < iVar17) {
                iVar14 = local_1a4 + 2;
              }
              iVar50 = local_1a8 * iVar50;
              iVar13 = iVar13 * local_1a8;
              iVar14 = iVar14 * local_1a8;
              uVar49 = uVar10;
              if (cVar27 != '\0') {
                uVar49 = uVar55;
              }
LAB_00211954:
              do {
                if ((int)uVar49 <= (int)uVar54) {
                  do {
                    if (uVar10 == uVar49) {
                      local_210 = (float *)((long)local_210 +
                                           (-(uVar37 >> 0x21 & 1) & 0xfffffffc00000000 |
                                           (uVar51 & 0xffffffff) << 2));
                      if (iVar2 == local_1b4) goto LAB_002110c4;
                      iVar50 = local_1a4 + -1;
                      if (iVar50 < 0) {
                        iVar50 = 0;
                      }
                      pfVar36 = pfVar36 + (int)local_1a8;
                      pfVar32 = pfVar35 + (int)(local_1a8 * iVar50);
                      iVar50 = local_1a4;
                      local_1a4 = iVar2;
                      goto LAB_002118f0;
                    }
                    iVar52 = (int)uVar54;
                    uVar49 = uVar10;
                    if (iVar28 < iVar52) goto LAB_00211954;
                    lVar43 = (long)iVar52;
                    lVar39 = 0;
                    do {
                      uVar48 = (int)uVar54 + 4;
                      uVar54 = (ulong)uVar48;
                      lVar3 = lVar39 + (lVar43 - (ulong)uVar55) * 4;
                      lVar4 = lVar39 + (lVar43 - (ulong)uVar16) * 4;
                      auVar66 = *(undefined1 (*) [16])((long)pfVar35 + lVar3 + (long)iVar50 * 4);
                      lVar5 = lVar39 + ((ulong)uVar16 + lVar43) * 4;
                      lVar6 = lVar39 + ((ulong)uVar55 + lVar43) * 4;
                      lVar1 = lVar39 + (long)iVar52 * 4;
                      auVar61 = *(undefined1 (*) [16])((long)pfVar35 + lVar5 + (long)iVar14 * 4);
                      auVar70 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar32 + lVar6),auVar66,4);
                      auVar60 = *(undefined1 (*) [16])((long)pfVar35 + lVar6 + (long)iVar14 * 4);
                      auVar97 = NEON_fmax(auVar66,*(undefined1 (*) [16])((long)pfVar32 + lVar6),4);
                      auVar66 = *(undefined1 (*) [16])((long)pfVar35 + lVar1 + (long)iVar14 * 4);
                      auVar107 = NEON_fmin(auVar61,auVar60,4);
                      auVar64 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar32 + lVar4),
                                          *(undefined1 (*) [16])((long)pfVar32 + lVar1),4);
                      auVar72 = *(undefined1 (*) [16])((long)pfVar35 + lVar4 + (long)iVar14 * 4);
                      auVar90 = NEON_fmax(*(undefined1 (*) [16])((long)pfVar32 + lVar1),
                                          *(undefined1 (*) [16])((long)pfVar32 + lVar4),4);
                      auVar68 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar36 + lVar3),
                                          *(undefined1 (*) [16])((long)pfVar36 + lVar4),4);
                      auVar78 = *(undefined1 (*) [16])((long)pfVar35 + lVar5 + (long)iVar50 * 4);
                      auVar83 = NEON_fmax(*(undefined1 (*) [16])((long)pfVar36 + lVar4),
                                          *(undefined1 (*) [16])((long)pfVar36 + lVar3),4);
                      auVar105 = NEON_fmin(auVar72,auVar66,4);
                      auVar76 = NEON_fmax(auVar66,auVar72,4);
                      auVar74 = NEON_fmax(auVar60,auVar61,4);
                      auVar66 = *(undefined1 (*) [16])((long)pfVar35 + lVar6 + (long)iVar13 * 4);
                      auVar61 = *(undefined1 (*) [16])((long)pfVar35 + lVar1 + (long)iVar50 * 4);
                      auVar113 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar36 + lVar5),
                                           *(undefined1 (*) [16])((long)pfVar36 + lVar6),4);
                      auVar117 = *(undefined1 (*) [16])((long)pfVar35 + lVar4 + (long)iVar50 * 4);
                      auVar80 = NEON_fmax(*(undefined1 (*) [16])((long)pfVar36 + lVar6),
                                          *(undefined1 (*) [16])((long)pfVar36 + lVar5),4);
                      auVar103 = NEON_fmax(auVar64,*(undefined1 (*) [16])((long)pfVar32 + lVar3),4);
                      auVar115 = NEON_fmin(auVar61,auVar78,4);
                      auVar60 = *(undefined1 (*) [16])((long)pfVar35 + lVar3 + (long)iVar14 * 4);
                      auVar86 = NEON_fmax(auVar78,auVar61,4);
                      auVar61 = *(undefined1 (*) [16])((long)pfVar35 + lVar6 + (long)iVar50 * 4);
                      auVar72 = *(undefined1 (*) [16])((long)pfVar35 + lVar3 + (long)iVar13 * 4);
                      auVar84 = NEON_fmax(auVar113,*(undefined1 (*) [16])((long)pfVar36 + lVar1),4);
                      auVar101 = NEON_fmax(auVar115,auVar117,4);
                      auVar78 = *(undefined1 (*) [16])((long)pfVar35 + lVar4 + (long)iVar13 * 4);
                      auVar91 = *(undefined1 (*) [16])((long)pfVar35 + lVar1 + (long)iVar13 * 4);
                      auVar111 = NEON_fmin(auVar66,auVar60,4);
                      auVar88 = NEON_fmax(auVar70,*(undefined1 (*) [16])((long)pfVar32 + lVar5),4);
                      auVar96 = *(undefined1 (*) [16])((long)pfVar35 + lVar5 + (long)iVar13 * 4);
                      auVar59 = NEON_fmin(auVar76,auVar74,4);
                      lVar39 = lVar39 + 0x10;
                      auVar99 = NEON_fmax(auVar60,auVar66,4);
                      auVar95 = NEON_fmax(auVar107,auVar105,4);
                      auVar66 = NEON_fmin(auVar78,auVar91,4);
                      auVar93 = NEON_fmax(auVar111,auVar96,4);
                      auVar78 = NEON_fmax(auVar91,auVar78,4);
                      auVar114 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar36 + lVar1),auVar113,4)
                      ;
                      auVar108 = NEON_fmin(auVar72,auVar66,4);
                      auVar66 = NEON_fmax(auVar66,auVar72,4);
                      auVar113 = NEON_fmin(auVar93,auVar99,4);
                      auVar109 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar32 + lVar3),auVar64,4);
                      auVar60 = NEON_fmax(auVar90,auVar103,4);
                      auVar99 = NEON_fmax(auVar99,auVar93,4);
                      auVar91 = NEON_fmin(auVar103,auVar90,4);
                      auVar118 = NEON_fmin(auVar117,auVar115,4);
                      auVar116 = NEON_fmin(auVar61,auVar68,4);
                      auVar72 = NEON_fmax(auVar68,auVar61,4);
                      auVar68 = NEON_fmin(auVar96,auVar111,4);
                      auVar64 = NEON_fmax(auVar78,auVar66,4);
                      auVar90 = NEON_fmax(auVar83,auVar72,4);
                      auVar93 = NEON_fmin(auVar66,auVar78,4);
                      auVar66 = NEON_fmin(*(undefined1 (*) [16])((long)pfVar32 + lVar5),auVar70,4);
                      auVar61 = NEON_fmax(auVar97,auVar88,4);
                      auVar78 = NEON_fmin(auVar88,auVar97,4);
                      auVar70 = NEON_fmin(auVar72,auVar83,4);
                      auVar103 = NEON_fmax(auVar66,auVar109,4);
                      auVar72 = NEON_fmax(auVar86,auVar101,4);
                      auVar88 = NEON_fmin(auVar91,auVar78,4);
                      auVar86 = NEON_fmin(auVar101,auVar86,4);
                      auVar111 = NEON_fmax(auVar78,auVar91,4);
                      auVar78 = NEON_fmax(auVar80,auVar84,4);
                      auVar117 = NEON_fmax(auVar116,auVar118,4);
                      auVar84 = NEON_fmin(auVar84,auVar80,4);
                      auVar91 = NEON_fmin(auVar105,auVar107,4);
                      auVar115 = NEON_fmax(auVar108,auVar114,4);
                      auVar114 = NEON_fmin(auVar114,auVar108,4);
                      auVar118 = NEON_fmin(auVar118,auVar116,4);
                      auVar108 = NEON_fmin(auVar78,auVar64,4);
                      auVar101 = NEON_fmin(auVar59,auVar95,4);
                      auVar96 = NEON_fmax(auVar95,auVar59,4);
                      auVar80 = NEON_fmin(auVar99,auVar96,4);
                      auVar97 = NEON_fmax(auVar96,auVar99,4);
                      auVar96 = NEON_fmin(auVar60,auVar61,4);
                      auVar83 = NEON_fmin(auVar96,auVar103,4);
                      auVar116 = NEON_fmax(auVar103,auVar96,4);
                      auVar96 = NEON_fmin(auVar72,auVar90,4);
                      auVar95 = NEON_fmin(auVar88,auVar83,4);
                      auVar59 = NEON_fmax(auVar74,auVar76,4);
                      auVar76 = NEON_fmax(auVar91,auVar68,4);
                      auVar74 = NEON_fmax(auVar101,auVar113,4);
                      auVar105 = NEON_fmin(auVar113,auVar101,4);
                      auVar113 = NEON_fmin(auVar109,auVar66,4);
                      auVar99 = NEON_fmin(auVar80,auVar76,4);
                      auVar103 = NEON_fmax(auVar76,auVar80,4);
                      auVar107 = NEON_fmin(auVar74,auVar59,4);
                      auVar59 = NEON_fmax(auVar59,auVar74,4);
                      auVar101 = NEON_fmin(auVar96,auVar117,4);
                      auVar117 = NEON_fmax(auVar117,auVar96,4);
                      auVar66 = NEON_fmin(auVar86,auVar70,4);
                      auVar70 = NEON_fmax(auVar70,auVar86,4);
                      auVar96 = NEON_fmin(auVar108,auVar115,4);
                      auVar76 = NEON_fmax(auVar61,auVar60,4);
                      auVar86 = NEON_fmax(auVar115,auVar108,4);
                      auVar61 = NEON_fmin(auVar84,auVar93,4);
                      auVar80 = NEON_fmax(auVar93,auVar84,4);
                      auVar93 = NEON_fmax(auVar70,auVar117,4);
                      auVar74 = NEON_fmax(auVar111,auVar116,4);
                      auVar119 = NEON_fmin(auVar61,auVar96,4);
                      auVar72 = NEON_fmax(auVar90,auVar72,4);
                      auVar115 = NEON_fmin(auVar66,auVar101,4);
                      auVar84 = NEON_fmax(auVar96,auVar61,4);
                      auVar61 = NEON_fmax(auVar101,auVar66,4);
                      auVar90 = NEON_fmax(auVar83,auVar88,4);
                      auVar83 = NEON_fmin(auVar116,auVar111,4);
                      auVar60 = NEON_fmax(auVar118,auVar113,4);
                      auVar96 = NEON_fmax(auVar64,auVar78,4);
                      auVar66 = NEON_fmax(auVar80,auVar86,4);
                      auVar78 = NEON_fmin(auVar74,auVar93,4);
                      auVar88 = NEON_fmin(auVar86,auVar80,4);
                      auVar101 = NEON_fmax(auVar115,auVar95,4);
                      auVar111 = NEON_fmin(auVar78,auVar60,4);
                      auVar80 = NEON_fmax(auVar60,auVar78,4);
                      auVar109 = NEON_fmin(auVar90,auVar61,4);
                      auVar90 = NEON_fmax(auVar61,auVar90,4);
                      auVar116 = NEON_fmin(auVar113,auVar118,4);
                      auVar64 = NEON_fmax(auVar72,auVar76,4);
                      auVar78 = NEON_fmin(auVar68,auVar91,4);
                      auVar91 = NEON_fmin(auVar105,auVar99,4);
                      auVar61 = NEON_fmax(auVar99,auVar105,4);
                      auVar113 = NEON_fmin(auVar97,auVar59,4);
                      auVar99 = NEON_fmax(auVar107,auVar103,4);
                      auVar60 = NEON_fmax(auVar59,auVar97,4);
                      auVar86 = NEON_fmax(auVar91,auVar119,4);
                      auVar59 = NEON_fmin(auVar117,auVar70,4);
                      auVar72 = NEON_fmin(auVar76,auVar72,4);
                      auVar70 = NEON_fmax(auVar61,auVar84,4);
                      auVar76 = NEON_fmin(auVar103,auVar107,4);
                      auVar103 = NEON_fmax(auVar78,auVar114,4);
                      auVar61 = NEON_fmin(auVar84,auVar61,4);
                      auVar108 = NEON_fmin(auVar95,auVar115,4);
                      auVar115 = NEON_fmin(auVar114,auVar78,4);
                      auVar107 = NEON_fmin(auVar66,auVar99,4);
                      auVar105 = NEON_fmin(auVar72,auVar101,4);
                      auVar78 = NEON_fmin(auVar96,auVar113,4);
                      auVar97 = NEON_fmax(auVar101,auVar72,4);
                      auVar101 = NEON_fmin(auVar83,auVar59,4);
                      auVar68 = NEON_fmax(auVar59,auVar83,4);
                      auVar84 = NEON_fmax(auVar68,auVar97,4);
                      auVar95 = NEON_fmax(auVar99,auVar66,4);
                      auVar66 = NEON_fmin(auVar107,auVar103,4);
                      auVar107 = NEON_fmax(auVar103,auVar107,4);
                      auVar103 = NEON_fmin(auVar70,auVar60,4);
                      auVar70 = NEON_fmax(auVar60,auVar70,4);
                      auVar60 = NEON_fmin(auVar78,auVar86,4);
                      auVar99 = NEON_fmax(auVar86,auVar78,4);
                      auVar59 = NEON_fmin(auVar88,auVar76,4);
                      auVar86 = NEON_fmax(auVar76,auVar88,4);
                      auVar72 = NEON_fmax(auVar93,auVar74,4);
                      auVar83 = NEON_fmax(auVar86,auVar99,4);
                      auVar88 = NEON_fmax(auVar103,auVar107,4);
                      auVar78 = NEON_fmin(auVar109,auVar111,4);
                      auVar111 = NEON_fmax(auVar111,auVar109,4);
                      auVar117 = NEON_fmin(auVar97,auVar68,4);
                      auVar97 = NEON_fmin(auVar61,auVar66,4);
                      auVar93 = NEON_fmax(auVar66,auVar61,4);
                      auVar76 = NEON_fmin(auVar80,auVar90,4);
                      auVar61 = NEON_fmax(auVar90,auVar80,4);
                      auVar74 = NEON_fmin(auVar101,auVar105,4);
                      auVar66 = NEON_fmax(auVar70,auVar95,4);
                      auVar68 = NEON_fmin(auVar95,auVar70,4);
                      auVar95 = NEON_fmin(auVar119,auVar91,4);
                      auVar90 = NEON_fmax(auVar105,auVar101,4);
                      auVar114 = NEON_fmin(auVar99,auVar86,4);
                      auVar101 = NEON_fmin(auVar108,auVar78,4);
                      auVar108 = NEON_fmax(auVar78,auVar108,4);
                      auVar91 = NEON_fmax(auVar61,auVar117,4);
                      auVar86 = NEON_fmin(auVar107,auVar103,4);
                      auVar78 = NEON_fmax(auVar113,auVar96,4);
                      auVar103 = NEON_fmax(auVar60,auVar59,4);
                      auVar107 = NEON_fmin(auVar74,auVar111,4);
                      auVar96 = NEON_fmin(auVar78,auVar66,4);
                      auVar113 = NEON_fmin(auVar95,auVar97,4);
                      auVar70 = NEON_fmax(auVar72,auVar84,4);
                      auVar99 = NEON_fmin(auVar84,auVar72,4);
                      auVar80 = NEON_fmax(auVar66,auVar78,4);
                      auVar66 = NEON_fmax(auVar88,auVar114,4);
                      auVar60 = NEON_fmin(auVar59,auVar60,4);
                      auVar105 = NEON_fmax(auVar111,auVar74,4);
                      auVar78 = NEON_fmax(auVar97,auVar95,4);
                      auVar84 = NEON_fmin(auVar60,auVar93,4);
                      auVar60 = NEON_fmax(auVar93,auVar60,4);
                      auVar93 = NEON_fmin(auVar91,auVar66,4);
                      auVar74 = NEON_fmin(auVar83,auVar68,4);
                      auVar72 = NEON_fmax(auVar68,auVar83,4);
                      auVar83 = NEON_fmin(auVar90,auVar76,4);
                      auVar59 = NEON_fmax(auVar76,auVar90,4);
                      auVar76 = NEON_fmin(auVar117,auVar61,4);
                      auVar90 = NEON_fmin(auVar103,auVar86,4);
                      auVar61 = NEON_fmin(auVar64,auVar96,4);
                      auVar66 = NEON_fmax(auVar115,auVar116,4);
                      auVar60 = NEON_fmax(auVar60,auVar105,4);
                      auVar96 = NEON_fmin(auVar70,auVar72,4);
                      auVar70 = NEON_fmax(auVar86,auVar103,4);
                      auVar68 = NEON_fmin(auVar114,auVar88,4);
                      auVar64 = NEON_fmax(auVar78,auVar108,4);
                      auVar91 = NEON_fmax(auVar113,auVar101,4);
                      auVar113 = NEON_fmin(auVar99,auVar74,4);
                      auVar78 = NEON_fmax(auVar84,auVar107,4);
                      auVar72 = NEON_fmax(auVar66,auVar93,4);
                      auVar60 = NEON_fmin(auVar60,auVar80,4);
                      auVar66 = NEON_fmax(auVar90,auVar83,4);
                      auVar78 = NEON_fmin(auVar61,auVar78,4);
                      auVar96 = NEON_fmin(auVar96,auVar64,4);
                      auVar61 = NEON_fmin(auVar59,auVar70,4);
                      auVar91 = NEON_fmax(auVar91,auVar113,4);
                      auVar59 = NEON_fmin(auVar76,auVar68,4);
                      auVar60 = NEON_fmin(auVar72,auVar60,4);
                      auVar61 = NEON_fmax(auVar96,auVar61,4);
                      auVar72 = NEON_fmin(auVar91,auVar66,4);
                      auVar66 = NEON_fmax(auVar78,auVar59,4);
                      auVar61 = NEON_fmax(auVar60,auVar61,4);
                      auVar66 = NEON_fmin(auVar66,auVar72,4);
                      auVar66 = NEON_fmax(auVar61,auVar66,4);
                      ((undefined8 *)((long)local_210 + lVar1))[1] = auVar66._8_8_;
                      *(undefined8 *)((long)local_210 + lVar1) = auVar66._0_8_;
                    } while ((int)uVar48 <= iVar28);
                  } while ((int)uVar10 <= (int)uVar48);
                }
                uVar44 = -(uVar54 >> 0x1f) & 0xfffffffc00000000 | uVar54 << 2;
                uVar53 = (uint)uVar54;
                uVar48 = uVar53 - uVar16;
                if ((int)uVar53 < (int)uVar16) {
                  uVar48 = uVar53;
                }
                uVar54 = -(ulong)(uVar48 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar48 << 2;
                uVar11 = uVar53 + iVar47;
                if ((int)uVar53 < (int)uVar55) {
                  uVar11 = uVar48;
                }
                uVar48 = uVar16 + uVar53;
                if ((int)(uVar10 - uVar16) <= (int)uVar53) {
                  uVar48 = uVar53;
                }
                fVar87 = *(float *)((long)pfVar32 + uVar54);
                fVar89 = *(float *)((long)pfVar32 + uVar44);
                uVar12 = uVar55 + uVar53;
                if ((int)(uVar10 + iVar47) <= (int)uVar53) {
                  uVar12 = uVar48;
                }
                uVar42 = -(ulong)(uVar11 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar11 << 2;
                uVar38 = -(ulong)(uVar48 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar48 << 2;
                uVar40 = -(ulong)(uVar12 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar12 << 2;
                fVar104 = *(float *)((long)pfVar32 + uVar42);
                fVar92 = *(float *)((long)pfVar32 + uVar38);
                fVar65 = *(float *)((long)pfVar32 + uVar40);
                fVar75 = *(float *)((long)pfVar35 + uVar42 + (long)iVar50 * 4);
                fVar94 = *(float *)((long)pfVar35 + uVar54 + (long)iVar50 * 4);
                fVar67 = *(float *)((long)pfVar35 + uVar44 + (long)iVar50 * 4);
                fVar98 = *(float *)((long)pfVar35 + uVar38 + (long)iVar50 * 4);
                fVar56 = *(float *)((long)pfVar35 + uVar40 + (long)iVar50 * 4);
                fVar85 = *(float *)((long)pfVar36 + uVar42);
                fVar69 = *(float *)((long)pfVar36 + uVar54);
                fVar102 = *(float *)((long)pfVar36 + uVar44);
                fVar58 = *(float *)((long)pfVar36 + uVar38);
                fVar110 = *(float *)((long)pfVar36 + uVar40);
                fVar100 = *(float *)((long)pfVar35 + uVar42 + (long)iVar13 * 4);
                fVar81 = *(float *)((long)pfVar35 + uVar54 + (long)iVar13 * 4);
                fVar79 = *(float *)((long)pfVar35 + uVar44 + (long)iVar13 * 4);
                fVar82 = *(float *)((long)pfVar35 + uVar38 + (long)iVar13 * 4);
                fVar62 = *(float *)((long)pfVar35 + uVar40 + (long)iVar13 * 4);
                fVar71 = *(float *)((long)pfVar35 + uVar42 + (long)iVar14 * 4);
                fVar73 = *(float *)((long)pfVar35 + uVar54 + (long)iVar14 * 4);
                fVar77 = *(float *)((long)pfVar35 + uVar44 + (long)iVar14 * 4);
                fVar112 = *(float *)((long)pfVar35 + uVar38 + (long)iVar14 * 4);
                fVar106 = *(float *)((long)pfVar35 + uVar40 + (long)iVar14 * 4);
                fVar63 = fVar87;
                if (fVar89 < fVar87) {
                  fVar63 = fVar89;
                  fVar89 = fVar87;
                }
                fVar87 = fVar104;
                if (fVar104 <= fVar63) {
                  fVar87 = fVar63;
                  fVar63 = fVar104;
                }
                fVar104 = fVar89;
                if (fVar87 <= fVar89) {
                  fVar104 = fVar87;
                  fVar87 = fVar89;
                }
                fVar89 = fVar75;
                if (fVar75 < fVar65) {
                  fVar89 = fVar65;
                  fVar65 = fVar75;
                }
                fVar75 = fVar92;
                if (fVar92 <= fVar65) {
                  fVar75 = fVar65;
                  fVar65 = fVar92;
                }
                fVar92 = fVar89;
                if (fVar75 <= fVar89) {
                  fVar92 = fVar75;
                  fVar75 = fVar89;
                }
                fVar89 = fVar63;
                if (fVar63 <= fVar65) {
                  fVar89 = fVar65;
                  fVar65 = fVar63;
                }
                fVar63 = fVar75;
                if (fVar87 <= fVar75) {
                  fVar63 = fVar87;
                  fVar87 = fVar75;
                }
                fVar75 = fVar89;
                if (fVar63 <= fVar89) {
                  fVar75 = fVar63;
                  fVar63 = fVar89;
                }
                fVar89 = fVar92;
                if (fVar104 <= fVar92) {
                  fVar89 = fVar104;
                  fVar104 = fVar92;
                }
                fVar92 = fVar89;
                if (fVar89 <= fVar75) {
                  fVar92 = fVar75;
                  fVar75 = fVar89;
                }
                fVar89 = fVar104;
                if (fVar63 <= fVar104) {
                  fVar89 = fVar63;
                  fVar63 = fVar104;
                }
                fVar104 = fVar67;
                if (fVar67 <= fVar98) {
                  fVar104 = fVar98;
                  fVar98 = fVar67;
                }
                fVar67 = fVar94;
                if (fVar94 <= fVar98) {
                  fVar67 = fVar98;
                  fVar98 = fVar94;
                }
                fVar94 = fVar104;
                if (fVar67 <= fVar104) {
                  fVar94 = fVar67;
                  fVar67 = fVar104;
                }
                fVar104 = fVar69;
                if (fVar69 < fVar85) {
                  fVar104 = fVar85;
                  fVar85 = fVar69;
                }
                fVar69 = fVar56;
                if (fVar56 <= fVar85) {
                  fVar69 = fVar85;
                  fVar85 = fVar56;
                }
                fVar56 = fVar104;
                if (fVar69 <= fVar104) {
                  fVar56 = fVar69;
                  fVar69 = fVar104;
                }
                fVar104 = fVar85;
                if (fVar98 <= fVar85) {
                  fVar104 = fVar98;
                  fVar98 = fVar85;
                }
                fVar85 = fVar69;
                if (fVar67 <= fVar69) {
                  fVar85 = fVar67;
                  fVar67 = fVar69;
                }
                fVar69 = fVar98;
                if (fVar85 <= fVar98) {
                  fVar69 = fVar85;
                  fVar85 = fVar98;
                }
                fVar98 = fVar56;
                if (fVar94 <= fVar56) {
                  fVar98 = fVar94;
                  fVar94 = fVar56;
                }
                fVar56 = fVar98;
                if (fVar98 <= fVar69) {
                  fVar56 = fVar69;
                  fVar69 = fVar98;
                }
                fVar98 = fVar94;
                if (fVar85 <= fVar94) {
                  fVar98 = fVar85;
                  fVar85 = fVar94;
                }
                fVar94 = fVar104;
                if (fVar65 <= fVar104) {
                  fVar94 = fVar65;
                  fVar65 = fVar104;
                }
                fVar104 = fVar85;
                if (fVar63 <= fVar85) {
                  fVar104 = fVar63;
                  fVar63 = fVar85;
                }
                fVar85 = fVar65;
                if (fVar104 <= fVar65) {
                  fVar85 = fVar104;
                  fVar104 = fVar65;
                }
                fVar65 = fVar92;
                if (fVar92 <= fVar56) {
                  fVar65 = fVar56;
                  fVar56 = fVar92;
                }
                fVar92 = fVar85;
                if (fVar56 <= fVar85) {
                  fVar92 = fVar56;
                  fVar56 = fVar85;
                }
                fVar85 = fVar65;
                if (fVar104 <= fVar65) {
                  fVar85 = fVar104;
                  fVar104 = fVar65;
                }
                fVar65 = fVar75;
                if (fVar75 <= fVar69) {
                  fVar65 = fVar69;
                  fVar69 = fVar75;
                }
                fVar75 = fVar67;
                if (fVar87 <= fVar67) {
                  fVar75 = fVar87;
                  fVar87 = fVar67;
                }
                fVar67 = fVar65;
                if (fVar75 <= fVar65) {
                  fVar67 = fVar75;
                  fVar75 = fVar65;
                }
                fVar65 = fVar89;
                if (fVar89 <= fVar98) {
                  fVar65 = fVar98;
                  fVar98 = fVar89;
                }
                fVar89 = fVar67;
                if (fVar98 <= fVar67) {
                  fVar89 = fVar98;
                  fVar98 = fVar67;
                }
                fVar67 = fVar65;
                if (fVar75 <= fVar65) {
                  fVar67 = fVar75;
                  fVar75 = fVar65;
                }
                fVar65 = fVar69;
                if (fVar69 <= fVar92) {
                  fVar65 = fVar92;
                  fVar92 = fVar69;
                }
                fVar69 = fVar89;
                if (fVar89 <= fVar56) {
                  fVar69 = fVar56;
                  fVar56 = fVar89;
                }
                fVar89 = fVar85;
                if (fVar98 <= fVar85) {
                  fVar89 = fVar98;
                  fVar98 = fVar85;
                }
                fVar85 = fVar67;
                if (fVar67 <= fVar104) {
                  fVar85 = fVar104;
                  fVar104 = fVar67;
                }
                fVar67 = fVar63;
                if (fVar75 <= fVar63) {
                  fVar67 = fVar75;
                  fVar75 = fVar63;
                }
                fVar63 = fVar58;
                if (fVar58 <= fVar110) {
                  fVar63 = fVar110;
                  fVar110 = fVar58;
                }
                fVar58 = fVar102;
                if (fVar102 <= fVar110) {
                  fVar58 = fVar110;
                  fVar110 = fVar102;
                }
                fVar102 = fVar63;
                if (fVar58 <= fVar63) {
                  fVar102 = fVar58;
                  fVar58 = fVar63;
                }
                fVar63 = fVar81;
                if (fVar79 < fVar81) {
                  fVar63 = fVar79;
                  fVar79 = fVar81;
                }
                fVar81 = fVar100;
                if (fVar100 <= fVar63) {
                  fVar81 = fVar63;
                  fVar63 = fVar100;
                }
                fVar100 = fVar79;
                if (fVar81 <= fVar79) {
                  fVar100 = fVar81;
                  fVar81 = fVar79;
                }
                fVar79 = fVar63;
                if (fVar110 <= fVar63) {
                  fVar79 = fVar110;
                  fVar110 = fVar63;
                }
                fVar63 = fVar81;
                if (fVar58 <= fVar81) {
                  fVar63 = fVar58;
                  fVar58 = fVar81;
                }
                fVar81 = fVar110;
                if (fVar63 <= fVar110) {
                  fVar81 = fVar63;
                  fVar63 = fVar110;
                }
                fVar110 = fVar102;
                if (fVar102 <= fVar100) {
                  fVar110 = fVar100;
                  fVar100 = fVar102;
                }
                fVar102 = fVar100;
                if (fVar100 <= fVar81) {
                  fVar102 = fVar81;
                  fVar81 = fVar100;
                }
                fVar100 = fVar110;
                if (fVar63 <= fVar110) {
                  fVar100 = fVar63;
                  fVar63 = fVar110;
                }
                fVar110 = fVar62;
                if (fVar71 < fVar62) {
                  fVar110 = fVar71;
                  fVar71 = fVar62;
                }
                fVar62 = fVar82;
                if (fVar82 <= fVar110) {
                  fVar62 = fVar110;
                  fVar110 = fVar82;
                }
                fVar82 = fVar71;
                if (fVar62 <= fVar71) {
                  fVar82 = fVar62;
                  fVar62 = fVar71;
                }
                fVar71 = fVar73;
                if (fVar73 <= fVar77) {
                  fVar71 = fVar77;
                  fVar77 = fVar73;
                }
                fVar73 = fVar112;
                if (fVar112 <= fVar106) {
                  fVar73 = fVar106;
                  fVar106 = fVar112;
                }
                fVar112 = fVar77;
                if (fVar77 <= fVar106) {
                  fVar112 = fVar106;
                  fVar106 = fVar77;
                }
                fVar77 = fVar73;
                if (fVar71 <= fVar73) {
                  fVar77 = fVar71;
                  fVar71 = fVar73;
                }
                fVar73 = fVar112;
                if (fVar77 <= fVar112) {
                  fVar73 = fVar77;
                  fVar77 = fVar112;
                }
                fVar112 = fVar110;
                if (fVar110 <= fVar106) {
                  fVar112 = fVar106;
                  fVar106 = fVar110;
                }
                fVar110 = fVar77;
                if (fVar62 <= fVar77) {
                  fVar110 = fVar62;
                  fVar62 = fVar77;
                }
                fVar77 = fVar112;
                if (fVar110 <= fVar112) {
                  fVar77 = fVar110;
                  fVar110 = fVar112;
                }
                fVar112 = fVar82;
                if (fVar82 <= fVar73) {
                  fVar112 = fVar73;
                  fVar73 = fVar82;
                }
                fVar82 = fVar112;
                if (fVar112 <= fVar71) {
                  fVar82 = fVar71;
                  fVar71 = fVar112;
                }
                fVar112 = fVar73;
                if (fVar73 <= fVar77) {
                  fVar112 = fVar77;
                  fVar77 = fVar73;
                }
                fVar73 = fVar71;
                if (fVar110 <= fVar71) {
                  fVar73 = fVar110;
                  fVar110 = fVar71;
                }
                fVar71 = fVar82;
                if (fVar82 < fVar62) {
                  fVar71 = fVar62;
                  fVar62 = fVar82;
                }
                fVar82 = fVar79;
                if (fVar79 <= fVar106) {
                  fVar82 = fVar106;
                  fVar106 = fVar79;
                }
                fVar79 = fVar110;
                if (fVar63 <= fVar110) {
                  fVar79 = fVar63;
                  fVar63 = fVar110;
                }
                fVar110 = fVar82;
                if (fVar79 <= fVar82) {
                  fVar110 = fVar79;
                  fVar79 = fVar82;
                }
                fVar82 = fVar112;
                if (fVar102 <= fVar112) {
                  fVar82 = fVar102;
                  fVar102 = fVar112;
                }
                fVar112 = fVar71;
                if (fVar102 <= fVar71) {
                  fVar112 = fVar102;
                  fVar102 = fVar71;
                }
                fVar71 = fVar82;
                if (fVar82 <= fVar110) {
                  fVar71 = fVar110;
                  fVar110 = fVar82;
                }
                fVar82 = fVar112;
                if (fVar79 <= fVar112) {
                  fVar82 = fVar79;
                  fVar79 = fVar112;
                }
                fVar112 = fVar63;
                if (fVar63 <= fVar102) {
                  fVar112 = fVar102;
                  fVar102 = fVar63;
                }
                fVar63 = fVar77;
                if (fVar81 <= fVar77) {
                  fVar63 = fVar81;
                  fVar81 = fVar77;
                }
                fVar77 = fVar62;
                if (fVar58 <= fVar62) {
                  fVar77 = fVar58;
                  fVar58 = fVar62;
                }
                fVar62 = fVar81;
                if (fVar77 <= fVar81) {
                  fVar62 = fVar77;
                  fVar77 = fVar81;
                }
                fVar81 = fVar100;
                if (fVar100 <= fVar73) {
                  fVar81 = fVar73;
                  fVar73 = fVar100;
                }
                fVar100 = fVar73;
                if (fVar73 <= fVar62) {
                  fVar100 = fVar62;
                  fVar62 = fVar73;
                }
                fVar73 = fVar81;
                if (fVar77 <= fVar81) {
                  fVar73 = fVar77;
                  fVar77 = fVar81;
                }
                fVar81 = fVar110;
                if (fVar63 <= fVar110) {
                  fVar81 = fVar63;
                  fVar63 = fVar110;
                }
                fVar110 = fVar71;
                if (fVar62 <= fVar71) {
                  fVar110 = fVar62;
                  fVar62 = fVar71;
                }
                fVar71 = fVar82;
                if (fVar100 <= fVar82) {
                  fVar71 = fVar100;
                  fVar100 = fVar82;
                }
                fVar82 = fVar73;
                if (fVar73 <= fVar79) {
                  fVar82 = fVar79;
                  fVar79 = fVar73;
                }
                fVar73 = fVar102;
                if (fVar77 <= fVar102) {
                  fVar73 = fVar77;
                  fVar77 = fVar102;
                }
                fVar102 = fVar112;
                if (fVar112 < fVar58) {
                  fVar102 = fVar58;
                  fVar58 = fVar112;
                }
                if (fVar94 <= fVar106) {
                  fVar94 = fVar106;
                }
                if (fVar85 <= fVar82) {
                  fVar82 = fVar85;
                }
                if (fVar82 <= fVar94) {
                  fVar82 = fVar94;
                }
                if (fVar69 <= fVar62) {
                  fVar69 = fVar62;
                }
                if (fVar69 <= fVar102) {
                  fVar102 = fVar69;
                }
                if (fVar82 <= fVar102) {
                  fVar102 = fVar82;
                }
                if (fVar65 <= fVar63) {
                  fVar65 = fVar63;
                }
                if (fVar75 <= fVar77) {
                  fVar77 = fVar75;
                }
                if (fVar77 <= fVar65) {
                  fVar65 = fVar77;
                }
                if (fVar98 <= fVar100) {
                  fVar100 = fVar98;
                }
                if (fVar100 <= fVar65) {
                  fVar100 = fVar65;
                }
                if (fVar102 < fVar100) {
                  fVar102 = fVar100;
                }
                if (fVar92 <= fVar81) {
                  fVar92 = fVar81;
                }
                if (fVar67 <= fVar73) {
                  fVar73 = fVar67;
                }
                if (fVar73 <= fVar92) {
                  fVar73 = fVar92;
                }
                if (fVar71 < fVar89) {
                  fVar71 = fVar89;
                }
                if (fVar71 < fVar73) {
                  fVar73 = fVar71;
                }
                if (fVar56 <= fVar110) {
                  fVar56 = fVar110;
                }
                if (fVar87 <= fVar58) {
                  fVar58 = fVar87;
                }
                if (fVar58 <= fVar56) {
                  fVar56 = fVar58;
                }
                if (fVar104 <= fVar79) {
                  fVar79 = fVar104;
                }
                if (fVar79 <= fVar56) {
                  fVar79 = fVar56;
                }
                if (fVar79 <= fVar73) {
                  fVar73 = fVar79;
                }
                if (fVar102 < fVar73) {
                  fVar102 = fVar73;
                }
                uVar54 = (ulong)(uVar53 + 1);
                *(float *)((long)local_210 + uVar44) = fVar102;
              } while( true );
            }
            goto LAB_002110c4;
          }
          iVar50 = iVar28 + 1;
          local_1b4 = iVar28;
LAB_00212c64:
          iVar28 = 0;
          uVar54 = (ulong)uVar16;
          local_1a8 = uVar16;
        }
        if (0 < local_1b4) {
          uVar16 = -local_1a8;
          uVar37 = -(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2;
          iVar47 = 0;
          do {
            uVar51 = -(ulong)(local_1a8 >> 0x1f) & 0xfffffffc00000000 | (ulong)local_1a8 << 2;
            if (iVar50 + -2 <= iVar47) {
              uVar51 = 0;
            }
            pfVar32 = pfVar35;
            pfVar41 = pfVar36;
            uVar44 = -(ulong)((local_1a8 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                     (ulong)(local_1a8 << 1) << 2;
            if (iVar50 + -3 <= iVar47) {
              uVar44 = uVar51;
            }
            do {
              if (iVar47 < 1) {
                uVar38 = 0;
                uVar40 = 0;
              }
              else {
                uVar38 = uVar37;
                uVar40 = -(ulong)((uVar16 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                         (ulong)(local_1a8 * -2) << 2;
                if (iVar47 == 1) {
                  uVar40 = uVar37;
                }
              }
              fVar87 = *(float *)((long)pfVar32 + uVar40);
              fVar85 = *(float *)((long)pfVar32 + uVar38);
              fVar98 = *pfVar32;
              fVar65 = *(float *)((long)pfVar32 + uVar51);
              fVar63 = *(float *)((long)pfVar32 + uVar44);
              fVar89 = fVar85;
              if (fVar87 <= fVar85) {
                fVar89 = fVar87;
                fVar87 = fVar85;
              }
              fVar85 = fVar65;
              if (fVar65 <= fVar63) {
                fVar85 = fVar63;
                fVar63 = fVar65;
              }
              fVar65 = fVar98;
              if (fVar98 <= fVar63) {
                fVar65 = fVar63;
                fVar63 = fVar98;
              }
              fVar98 = fVar85;
              if (fVar65 <= fVar85) {
                fVar98 = fVar65;
                fVar65 = fVar85;
              }
              if (fVar89 <= fVar63) {
                fVar89 = fVar63;
              }
              if (fVar89 <= fVar65) {
                fVar65 = fVar89;
              }
              if (fVar87 <= fVar98) {
                fVar98 = fVar87;
              }
              if (fVar98 <= fVar65) {
                fVar98 = fVar65;
              }
              pfVar32 = pfVar32 + 1;
              *pfVar41 = fVar98;
              pfVar41 = pfVar41 + 1;
            } while (pfVar35 + (long)(int)uVar10 + 1 != pfVar32);
            iVar47 = iVar47 + 1;
            pfVar35 = pfVar35 + (long)iVar28 + (long)(int)uVar10 + 1;
            pfVar36 = (float *)((long)pfVar36 +
                               (-(uVar54 >> 0x1f) & 0xfffffffc00000000 | uVar54 << 2));
          } while (iVar47 != local_1b4);
        }
      }
    }
    else {
      local_158 = 0;
      local_150 = (Mat *)0x0;
      String::allocate((String *)&local_158,0);
      error(-0xd2,(String *)&local_158,"void cv::medianBlur(cv::InputArray, cv::OutputArray, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xaa8);
      String::deallocate((String *)&local_158);
    }
LAB_002110c4:
    if (lStack_88 != 0) {
      piVar33 = (int *)(lStack_88 + 0x14);
      do {
        iVar28 = *piVar33;
        cVar27 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar15) {
          *piVar33 = iVar28 + -1;
          cVar27 = ExclusiveMonitorsStatus();
        }
      } while (cVar27 != '\0');
      if (iVar28 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = (float *)0x0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar28 = 0;
      puVar29 = local_80;
      do {
        *(undefined4 *)puVar29 = 0;
        iVar28 = iVar28 + 1;
        puVar29 = (undefined8 *)((long)puVar29 + 4);
      } while (iVar28 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (local_28 != 0) {
      piVar33 = (int *)(local_28 + 0x14);
      do {
        iVar28 = *piVar33;
        cVar27 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar15) {
          *piVar33 = iVar28 + -1;
          cVar27 = ExclusiveMonitorsStatus();
        }
      } while (cVar27 != '\0');
      if (iVar28 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = (float *)0x0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar28 = 0;
      piVar33 = local_20;
      do {
        *piVar33 = 0;
        iVar28 = iVar28 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar28 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (lStack_e8 != 0) {
      piVar33 = (int *)(lStack_e8 + 0x14);
      do {
        iVar28 = *piVar33;
        cVar27 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar15) {
          *piVar33 = iVar28 + -1;
          cVar27 = ExclusiveMonitorsStatus();
        }
      } while (cVar27 != '\0');
      if (iVar28 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    if (0 < local_11c) {
      iVar28 = 0;
      piVar33 = local_e0;
      do {
        *piVar33 = 0;
        iVar28 = iVar28 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar28 < local_11c);
    }
    goto LAB_00211214;
  }
  local_138 = (Mat *)0x0;
  local_140 = 0;
  local_148 = 0;
  uStack_128 = 0;
  local_130 = 0;
  local_144 = 0;
  local_158 = CONCAT44(local_158._4_4_,0x2010000);
  local_160 = 0;
  local_15c = 0;
  local_170[0] = 0x1010000;
  local_168 = (Mat *)&local_120;
  local_150 = (Mat *)&local_c0;
  copyMakeBorder((_InputArray *)local_170,(_OutputArray *)&local_158,0,0,param_3 >> 1,param_3 >> 1,1
                 ,(Scalar_ *)&local_140);
  if (((local_c0 & 7) != 0) || ((uVar16 = local_120 >> 3 & 0x1ff, 1 < uVar16 - 2 && (uVar16 != 0))))
  {
    local_140 = 0;
    local_138 = (Mat *)0x0;
    pcVar30 = (char *)String::allocate((String *)&local_140,0x37);
    cVar27 = s_src_depth______CV_8U_____cn____1_0045d650[0x36];
    uVar26 = s_src_depth______CV_8U_____cn____1_0045d650._52_2_;
    uVar25 = s_src_depth______CV_8U_____cn____1_0045d650._40_8_;
    uVar24 = s_src_depth______CV_8U_____cn____1_0045d650._32_8_;
    uVar23 = s_src_depth______CV_8U_____cn____1_0045d650._24_8_;
    uVar22 = s_src_depth______CV_8U_____cn____1_0045d650._16_8_;
    uVar21 = s_src_depth______CV_8U_____cn____1_0045d650._8_8_;
    uVar20 = s_src_depth______CV_8U_____cn____1_0045d650._0_8_;
    *(undefined4 *)(pcVar30 + 0x30) = s_src_depth______CV_8U_____cn____1_0045d650._48_4_;
    *(undefined2 *)(pcVar30 + 0x34) = uVar26;
    pcVar30[0x36] = cVar27;
    *(undefined8 *)pcVar30 = uVar20;
    *(undefined8 *)(pcVar30 + 8) = uVar21;
    *(undefined8 *)(pcVar30 + 0x10) = uVar22;
    *(undefined8 *)(pcVar30 + 0x18) = uVar23;
    *(undefined8 *)(pcVar30 + 0x20) = uVar24;
    *(undefined8 *)(pcVar30 + 0x28) = uVar25;
    error(-0xd7,(String *)&local_140,"void cv::medianBlur(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xab1);
    String::deallocate((String *)&local_140);
  }
  if (local_11c < 3) {
    dVar57 = (double)(ulong)((long)local_114 * (long)local_118) * DAT_00212fa0;
    if (dVar57 < 1.0) goto LAB_002116b8;
LAB_00211360:
    iVar28 = 0x15;
    iVar50 = 9;
    if (4.0 <= dVar57) {
      iVar50 = 5;
      iVar28 = 9;
    }
  }
  else {
    lVar39 = 0;
    uVar37 = 1;
    do {
      piVar33 = local_e0 + lVar39;
      lVar39 = lVar39 + 1;
      uVar37 = uVar37 * (long)*piVar33;
    } while ((int)lVar39 < local_11c);
    dVar57 = (double)uVar37 * DAT_00212fa0;
    if (1.0 <= dVar57) goto LAB_00211360;
LAB_002116b8:
    iVar28 = 0x27;
    iVar50 = 0xf;
  }
  cVar27 = checkHardwareSupport(3);
  if ((cVar27 == '\0') && (cVar27 = checkHardwareSupport(100), cVar27 == '\0')) {
    iVar50 = iVar28;
  }
  if (iVar50 < param_3) {
    FUN_00203fe8((Mat *)&local_c0,(Mat *)&local_60,param_3);
  }
  else {
    FUN_001f2200();
  }
  if (lStack_88 != 0) {
    piVar33 = (int *)(lStack_88 + 0x14);
    do {
      iVar28 = *piVar33;
      cVar27 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar15) {
        *piVar33 = iVar28 + -1;
        cVar27 = ExclusiveMonitorsStatus();
      }
    } while (cVar27 != '\0');
    if (iVar28 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = (float *)0x0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar28 = 0;
    puVar29 = local_80;
    do {
      *(undefined4 *)puVar29 = 0;
      iVar28 = iVar28 + 1;
      puVar29 = (undefined8 *)((long)puVar29 + 4);
    } while (iVar28 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_28 != 0) {
    piVar33 = (int *)(local_28 + 0x14);
    do {
      iVar28 = *piVar33;
      cVar27 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar15) {
        *piVar33 = iVar28 + -1;
        cVar27 = ExclusiveMonitorsStatus();
      }
    } while (cVar27 != '\0');
    if (iVar28 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (float *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar28 = 0;
    piVar33 = local_20;
    do {
      *piVar33 = 0;
      iVar28 = iVar28 + 1;
      piVar33 = piVar33 + 1;
    } while (iVar28 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (lStack_e8 != 0) {
    piVar33 = (int *)(lStack_e8 + 0x14);
    do {
      iVar28 = *piVar33;
      cVar27 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar15) {
        *piVar33 = iVar28 + -1;
        cVar27 = ExclusiveMonitorsStatus();
      }
    } while (cVar27 != '\0');
    if (iVar28 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  if (0 < local_11c) {
    iVar28 = 0;
    piVar33 = local_e0;
    do {
      *piVar33 = 0;
      iVar28 = iVar28 + 1;
      piVar33 = piVar33 + 1;
    } while (iVar28 < local_11c);
  }
LAB_00211214:
  lStack_e8 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  local_110 = (float *)0x0;
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00212fb0 (3700 bytes) name=bilateralFilter

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::bilateralFilter(cv::_InputArray const&, cv::_OutputArray const&, int, double, double, int) */

void cv::bilateralFilter(_InputArray *param_1,_OutputArray *param_2,int param_3,double param_4,
                        double param_5,int param_6)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined2 uVar13;
  undefined4 uVar14;
  int iVar15;
  int iVar16;
  char *pcVar17;
  _InputArray *p_Var18;
  void *pvVar19;
  void *pvVar20;
  void *pvVar21;
  int *piVar22;
  uint *puVar23;
  Mat *pMVar24;
  Scalar_ **ppSVar25;
  int iVar26;
  size_t sVar27;
  ulong uVar28;
  ulong uVar29;
  long lVar30;
  _InputArray *this;
  int iVar31;
  float fVar32;
  double dVar33;
  int iVar34;
  double dVar35;
  double dVar36;
  float fVar37;
  int iVar38;
  double local_2b8;
  double local_2b0;
  undefined8 local_2a8;
  undefined8 local_2a0;
  undefined8 local_298;
  undefined8 local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined4 local_278 [2];
  undefined4 *local_270;
  undefined4 local_268;
  undefined4 local_264;
  undefined **local_260;
  Mat *local_258;
  undefined4 *local_250;
  int local_248;
  undefined4 local_244;
  void *local_240;
  void *local_238;
  void *local_230;
  undefined *local_228;
  undefined8 local_220;
  undefined4 local_218;
  undefined4 local_214;
  void *local_210;
  _InputArray *local_208;
  undefined4 *local_200;
  float local_1f8;
  void *local_1f0;
  void *local_1e8;
  undefined8 local_1e0;
  Scalar_ *pSStack_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  Scalar_ **local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Scalar_ *pSStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  Scalar_ **local_140;
  ulong *local_138;
  ulong local_130 [2];
  uint local_120;
  int local_11c;
  uint local_118;
  undefined4 local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  uint *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  _InputArray *local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  _InputArray::size((int)param_1);
  uVar14 = _InputArray::type(param_1,-1);
  _OutputArray::create(param_2,(Scalar_ *)&local_60,uVar14,0xffffffff,0,0);
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar24 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar24;
    local_11c = *(int *)(pMVar24 + 4);
    local_118 = *(uint *)(pMVar24 + 8);
    local_114 = *(undefined4 *)(pMVar24 + 0xc);
    local_110 = *(long *)(pMVar24 + 0x10);
    local_108 = *(undefined8 *)(pMVar24 + 0x18);
    local_100 = *(undefined8 *)(pMVar24 + 0x20);
    local_f8 = *(undefined8 *)(pMVar24 + 0x28);
    local_f0 = *(undefined8 *)(pMVar24 + 0x30);
    local_e8 = *(long *)(pMVar24 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar22 = (int *)(local_e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar4) {
          *piVar22 = *piVar22 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar24 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar24);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar16 = _InputArray::kind((_InputArray *)param_2);
  iVar15 = param_3 >> 1;
  if (iVar16 == 0x10000) {
    pMVar24 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar24;
    local_bc = *(int *)(pMVar24 + 4);
    local_b8 = *(int *)(pMVar24 + 8);
    local_b4 = *(int *)(pMVar24 + 0xc);
    local_b0 = *(long *)(pMVar24 + 0x10);
    local_a8 = *(undefined8 *)(pMVar24 + 0x18);
    local_a0 = *(undefined8 *)(pMVar24 + 0x20);
    local_98 = *(undefined8 *)(pMVar24 + 0x28);
    local_90 = *(undefined8 *)(pMVar24 + 0x30);
    local_88 = *(long *)(pMVar24 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar22 = (int *)(local_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar4) {
          *piVar22 = *piVar22 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (2 < *(int *)(pMVar24 + 4)) {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar24);
      goto LAB_00213080;
    }
    uVar29 = (ulong)local_120;
    local_70 = **(undefined8 **)(pMVar24 + 0x48);
    local_68 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    if ((local_120 & 7) != 0) goto LAB_0021308c;
LAB_002132ec:
    iVar16 = ((uint)(uVar29 >> 3) & 0x1ff) + 1;
    uVar1 = *local_e0;
    if (((uVar29 & 0xfef) != 0) || (local_110 == local_b0)) {
      local_298 = 0;
      local_290 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_298,0x48);
      uVar12 = s__src_type______CV_8UC1____src_ty_0045d6b8._56_8_;
      uVar11 = s__src_type______CV_8UC1____src_ty_0045d6b8._48_8_;
      uVar10 = s__src_type______CV_8UC1____src_ty_0045d6b8._40_8_;
      uVar9 = s__src_type______CV_8UC1____src_ty_0045d6b8._32_8_;
      uVar8 = s__src_type______CV_8UC1____src_ty_0045d6b8._24_8_;
      uVar7 = s__src_type______CV_8UC1____src_ty_0045d6b8._16_8_;
      uVar6 = s__src_type______CV_8UC1____src_ty_0045d6b8._8_8_;
      uVar5 = s__src_type______CV_8UC1____src_ty_0045d6b8._0_8_;
      *(undefined8 *)(pcVar17 + 0x40) = s__src_type______CV_8UC1____src_ty_0045d6b8._64_8_;
      *(undefined8 *)pcVar17 = uVar5;
      *(undefined8 *)(pcVar17 + 8) = uVar6;
      *(undefined8 *)(pcVar17 + 0x10) = uVar7;
      *(undefined8 *)(pcVar17 + 0x18) = uVar8;
      *(undefined8 *)(pcVar17 + 0x20) = uVar9;
      *(undefined8 *)(pcVar17 + 0x28) = uVar10;
      *(undefined8 *)(pcVar17 + 0x30) = uVar11;
      *(undefined8 *)(pcVar17 + 0x38) = uVar12;
      error(-0xd7,(String *)&local_298,
            "void cv::bilateralFilter_8u(const cv::Mat&, cv::Mat&, int, double, double, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xbfa);
      String::deallocate((String *)&local_298);
    }
    if (param_4 <= 0.0) {
      dVar36 = -0.5;
    }
    else {
      dVar36 = -0.5 / (param_4 * param_4);
    }
    if (param_5 <= 0.0) {
      dVar35 = -0.5;
      param_5 = 1.0;
    }
    else {
      dVar35 = -0.5 / (param_5 * param_5);
    }
    if (param_3 < 1) {
      lVar30 = lrint(param_5 * 1.5);
      iVar15 = (int)lVar30;
    }
    this = (_InputArray *)&local_1e0;
    local_198 = &local_190;
    local_1d0 = 0;
    local_58 = (_InputArray *)0x0;
    local_60 = 0;
    if (iVar15 < 1) {
      iVar15 = 1;
    }
    pSStack_1d8 = _UNK_00213fc8;
    local_1e0 = _DAT_00213fc0;
    local_1a0 = &pSStack_1d8;
    uStack_48 = 0;
    local_50 = 0;
    uStack_188 = 0;
    local_190 = 0;
    iVar38 = iVar15 * 2 + 1;
    local_1c8 = 0;
    local_1c0 = 0;
    local_1b8 = 0;
    local_1b0 = 0;
    local_1a8 = 0;
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x1010000);
    local_218 = 0;
    local_214 = 0;
    local_228 = (undefined *)CONCAT44(local_228._4_4_,0x2010000);
    local_220 = (Mat *)this;
    pSStack_178 = (Scalar_ *)&local_120;
    copyMakeBorder((_InputArray *)&local_180,(_OutputArray *)&local_228,iVar15,iVar15,iVar15,iVar15,
                   param_6,(Scalar_ *)&local_60);
    uVar29 = (ulong)(uint)(iVar16 * 0x100) << 2;
    pvVar19 = operator_new(uVar29);
    iVar38 = iVar38 * iVar38;
    memset(pvVar19,0,uVar29);
    pvVar20 = operator_new((long)iVar38 << 2);
    if (iVar38 == 0) {
      pvVar21 = (void *)0x0;
    }
    else {
      sVar27 = (long)iVar38 << 2;
      memset(pvVar20,0,sVar27);
      pvVar21 = operator_new(sVar27);
      memset(pvVar21,0,sVar27);
    }
    lVar30 = 0;
    do {
      dVar33 = ::exp((double)((int)lVar30 * (int)lVar30) * dVar36);
      *(float *)((long)pvVar19 + lVar30 * 4) = (float)dVar33;
      lVar30 = lVar30 + 1;
    } while ((int)lVar30 < iVar16 * 0x100);
    uVar29 = 0;
    iVar34 = -iVar15;
    iVar38 = iVar34;
    do {
      iVar31 = iVar16 * iVar34;
      iVar26 = iVar34;
      do {
        while( true ) {
          dVar33 = (double)iVar38 * (double)iVar38 + (double)iVar26 * (double)iVar26;
          dVar36 = SQRT(dVar33);
          if (NAN(dVar36)) {
            dVar36 = ::sqrt(dVar33);
          }
          if ((double)iVar15 < dVar36) break;
          uVar28 = -(uVar29 >> 0x1f) & 0xfffffffc00000000 | uVar29 << 2;
          iVar26 = iVar26 + 1;
          uVar29 = (ulong)((int)uVar29 + 1);
          dVar36 = ::exp(dVar36 * dVar36 * dVar35);
          iVar2 = iVar31 + iVar38 * (int)local_190;
          iVar31 = iVar31 + iVar16;
          *(float *)((long)pvVar20 + uVar28) = (float)dVar36;
          *(int *)((long)pvVar21 + uVar28) = iVar2;
          if (iVar15 < iVar26) goto LAB_00213590;
        }
        iVar26 = iVar26 + 1;
        iVar31 = iVar31 + iVar16;
      } while (iVar26 <= iVar15);
LAB_00213590:
      iVar38 = iVar38 + 1;
    } while (iVar38 <= iVar15);
    local_60 = (ulong)uVar1 << 0x20;
    local_260 = &PTR_FUN_004f50b0;
    local_244 = (undefined4)uVar29;
    if (local_bc < 3) {
      uVar29 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar30 = 0;
      uVar29 = 1;
      do {
        piVar22 = local_80 + lVar30;
        lVar30 = lVar30 + 1;
        uVar29 = uVar29 * (long)*piVar22;
      } while ((int)lVar30 < local_bc);
    }
    local_258 = (Mat *)this;
    local_250 = &local_c0;
    local_248 = iVar15;
    local_240 = pvVar21;
    local_238 = pvVar20;
    local_230 = pvVar19;
    parallel_for_((Range *)&local_60,(ParallelLoopBody *)&local_260,(double)uVar29 * DAT_00213fd0);
    local_260 = &PTR_FUN_004f50b0;
    ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_260);
    if (pvVar21 != (void *)0x0) {
      operator_delete(pvVar21);
    }
    if (pvVar20 != (void *)0x0) {
      operator_delete(pvVar20);
    }
    operator_delete(pvVar19);
    if (local_1a8 != 0) {
      piVar22 = (int *)(local_1a8 + 0x14);
      do {
        iVar15 = *piVar22;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar4) {
          *piVar22 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)this);
      }
    }
    local_1a8 = 0;
    local_1d0 = 0;
    local_1b8 = 0;
    local_1c0 = 0;
    local_1c8 = 0;
    if (0 < local_1e0._4_4_) {
      iVar15 = 0;
      ppSVar25 = local_1a0;
      do {
        *(undefined4 *)ppSVar25 = 0;
        iVar15 = iVar15 + 1;
        ppSVar25 = (Scalar_ **)((long)ppSVar25 + 4);
      } while (iVar15 < local_1e0._4_4_);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_00213080:
    uVar29 = (ulong)local_120;
    if ((local_120 & 7) == 0) goto LAB_002132ec;
LAB_0021308c:
    if ((local_120 & 7) != 5) {
      local_2a8 = 0;
      local_2a0 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_2a8,0x3d);
      cVar3 = s_Bilateral_filtering_is_only_impl_0045d758[0x3c];
      uVar14 = s_Bilateral_filtering_is_only_impl_0045d758._56_4_;
      uVar10 = s_Bilateral_filtering_is_only_impl_0045d758._40_8_;
      uVar9 = s_Bilateral_filtering_is_only_impl_0045d758._32_8_;
      uVar8 = s_Bilateral_filtering_is_only_impl_0045d758._24_8_;
      uVar7 = s_Bilateral_filtering_is_only_impl_0045d758._16_8_;
      uVar6 = s_Bilateral_filtering_is_only_impl_0045d758._8_8_;
      uVar5 = s_Bilateral_filtering_is_only_impl_0045d758._0_8_;
      *(undefined8 *)(pcVar17 + 0x30) = s_Bilateral_filtering_is_only_impl_0045d758._48_8_;
      *(undefined4 *)(pcVar17 + 0x38) = uVar14;
      pcVar17[0x3c] = cVar3;
      *(undefined8 *)pcVar17 = uVar5;
      *(undefined8 *)(pcVar17 + 8) = uVar6;
      *(undefined8 *)(pcVar17 + 0x10) = uVar7;
      *(undefined8 *)(pcVar17 + 0x18) = uVar8;
      *(undefined8 *)(pcVar17 + 0x20) = uVar9;
      *(undefined8 *)(pcVar17 + 0x28) = uVar10;
      error(-0xd2,(String *)&local_2a8,
            "void cv::bilateralFilter(cv::InputArray, cv::OutputArray, int, double, double, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xd62);
      String::deallocate((String *)&local_2a8);
      goto LAB_00213110;
    }
    uVar1 = *local_e0;
    local_2b8 = -1.0;
    iVar16 = ((uint)(uVar29 >> 3) & 0x1ff) + 1;
    local_2b0 = 1.0;
    if ((((uint)uVar29 & 0xfef) != 5) || (local_110 == local_b0)) {
      local_288 = 0;
      local_280 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_288,0x4a);
      uVar13 = s__src_type______CV_32FC1____src_t_0045d708._72_2_;
      uVar12 = s__src_type______CV_32FC1____src_t_0045d708._56_8_;
      uVar11 = s__src_type______CV_32FC1____src_t_0045d708._48_8_;
      uVar10 = s__src_type______CV_32FC1____src_t_0045d708._40_8_;
      uVar9 = s__src_type______CV_32FC1____src_t_0045d708._32_8_;
      uVar8 = s__src_type______CV_32FC1____src_t_0045d708._24_8_;
      uVar7 = s__src_type______CV_32FC1____src_t_0045d708._16_8_;
      uVar6 = s__src_type______CV_32FC1____src_t_0045d708._8_8_;
      uVar5 = s__src_type______CV_32FC1____src_t_0045d708._0_8_;
      *(undefined8 *)(pcVar17 + 0x40) = s__src_type______CV_32FC1____src_t_0045d708._64_8_;
      *(undefined2 *)(pcVar17 + 0x48) = uVar13;
      *(undefined8 *)pcVar17 = uVar5;
      *(undefined8 *)(pcVar17 + 8) = uVar6;
      *(undefined8 *)(pcVar17 + 0x10) = uVar7;
      *(undefined8 *)(pcVar17 + 0x18) = uVar8;
      *(undefined8 *)(pcVar17 + 0x20) = uVar9;
      *(undefined8 *)(pcVar17 + 0x28) = uVar10;
      *(undefined8 *)(pcVar17 + 0x30) = uVar11;
      *(undefined8 *)(pcVar17 + 0x38) = uVar12;
      error(-0xd7,(String *)&local_288,
            "void cv::bilateralFilter_32f(const cv::Mat&, cv::Mat&, int, double, double, int)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xd04);
      String::deallocate((String *)&local_288);
    }
    if (param_4 <= 0.0) {
      dVar36 = -0.5;
      param_4 = 1.0;
    }
    else {
      dVar36 = -0.5 / (param_4 * param_4);
    }
    if (param_5 <= 0.0) {
      dVar35 = -0.5;
      param_5 = 1.0;
    }
    else {
      dVar35 = -0.5 / (param_5 * param_5);
    }
    if (param_3 < 1) {
      lVar30 = lrint(param_5 * 1.5);
      iVar15 = (int)lVar30;
    }
    if (iVar15 < 1) {
      iVar15 = 1;
    }
    iVar38 = iVar15 * 2 + 1;
    Mat::reshape((int)(Mat *)&local_120,1);
    this = (_InputArray *)&local_180;
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x1010000);
    pSStack_178 = (Scalar_ *)&local_60;
    p_Var18 = (_InputArray *)noArray();
    minMaxLoc(this,&local_2b8,&local_2b0,(Point_ *)0x0,(Point_ *)0x0,p_Var18);
    if (local_28 != 0) {
      piVar22 = (int *)(local_28 + 0x14);
      do {
        iVar34 = *piVar22;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar4) {
          *piVar22 = iVar34 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar34 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    uStack_48 = 0;
    if (0 < local_60._4_4_) {
      iVar34 = 0;
      do {
        iVar34 = iVar34 + 1;
        *local_20 = 0;
        local_20 = local_20 + 1;
      } while (iVar34 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
    if (ABS(local_2b8 - local_2b0) < DAT_00213fd8) {
      local_268 = 0;
      local_264 = 0;
      local_278[0] = 0x2010000;
      local_270 = &local_c0;
      Mat::copyTo((Mat *)&local_120,(_OutputArray *)local_278);
      goto LAB_00213110;
    }
    local_138 = local_130;
    local_170 = 0;
    local_168 = 0;
    local_60 = 0;
    local_140 = &pSStack_178;
    pSStack_178 = _UNK_00213fc8;
    local_180 = _DAT_00213fc0;
    uStack_48 = 0;
    local_50 = 0;
    local_130[1] = 0;
    local_130[0] = 0;
    local_218 = 0;
    local_214 = 0;
    local_228 = (undefined *)CONCAT44(local_228._4_4_,0x2010000);
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    local_1d0 = 0;
    local_1e0 = CONCAT44(local_1e0._4_4_,0x1010000);
    local_220 = (Mat *)this;
    pSStack_1d8 = (Scalar_ *)&local_120;
    copyMakeBorder((_InputArray *)&local_1e0,(_OutputArray *)&local_228,iVar15,iVar15,iVar15,iVar15,
                   param_6,(Scalar_ *)&local_60);
    local_50 = 0;
    local_60 = CONCAT44(local_60._4_4_,0x3010000);
    local_58 = this;
    patchNaNs((_InputOutputArray *)&local_60,param_4 * -5.0);
    iVar38 = iVar38 * iVar38;
    pvVar19 = operator_new((long)iVar38 << 2);
    if (iVar38 == 0) {
      pvVar20 = (void *)0x0;
    }
    else {
      sVar27 = (long)iVar38 << 2;
      memset(pvVar19,0,sVar27);
      pvVar20 = operator_new(sVar27);
      memset(pvVar20,0,sVar27);
    }
    iVar38 = iVar16 * 0x1000;
    dVar33 = local_2b0 - local_2b8;
    uVar29 = (ulong)(iVar38 + 2) << 2;
    pvVar21 = operator_new(uVar29);
    lVar30 = 0;
    memset(pvVar21,0,uVar29);
    fVar32 = 1.0;
    fVar37 = (float)iVar38 / ((float)dVar33 * (float)iVar16);
    do {
      while (fVar32 <= 0.0) {
        *(undefined4 *)((long)pvVar21 + lVar30 * 4) = 0;
        lVar30 = lVar30 + 1;
        if (iVar38 + 1 < (int)lVar30) goto LAB_00213b28;
      }
      dVar33 = (double)((float)(int)lVar30 / fVar37);
      dVar33 = ::exp(dVar33 * dVar33 * dVar36);
      fVar32 = (float)dVar33;
      *(float *)((long)pvVar21 + lVar30 * 4) = fVar32;
      lVar30 = lVar30 + 1;
    } while ((int)lVar30 <= iVar38 + 1);
LAB_00213b28:
    iVar34 = -iVar15;
    uVar29 = 0;
    iVar38 = iVar34;
    do {
      iVar26 = iVar34;
      iVar31 = iVar16 * iVar34;
      do {
        while( true ) {
          dVar33 = (double)iVar38 * (double)iVar38 + (double)iVar26 * (double)iVar26;
          dVar36 = SQRT(dVar33);
          if (NAN(dVar36)) {
            dVar36 = ::sqrt(dVar33);
          }
          if ((double)iVar15 < dVar36) break;
          uVar28 = -(uVar29 >> 0x1f) & 0xfffffffc00000000 | uVar29 << 2;
          iVar26 = iVar26 + 1;
          uVar29 = (ulong)((int)uVar29 + 1);
          dVar36 = ::exp(dVar36 * dVar36 * dVar35);
          iVar2 = iVar31 + iVar38 * (int)(local_130[0] >> 2);
          *(float *)((long)pvVar19 + uVar28) = (float)dVar36;
          iVar31 = iVar31 + iVar16;
          *(int *)((long)pvVar20 + uVar28) = iVar2;
          if (iVar15 < iVar26) goto LAB_00213bc8;
        }
        iVar26 = iVar26 + 1;
        iVar31 = iVar31 + iVar16;
      } while (iVar26 <= iVar15);
LAB_00213bc8:
      iVar38 = iVar38 + 1;
    } while (iVar38 <= iVar15);
    local_228 = &DAT_004f50e0;
    local_220 = (Mat *)CONCAT44(iVar15,iVar16);
    local_218 = (undefined4)uVar29;
    local_60 = (ulong)uVar1 << 0x20;
    if (local_bc < 3) {
      uVar29 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar30 = 0;
      uVar29 = 1;
      do {
        piVar22 = local_80 + lVar30;
        lVar30 = lVar30 + 1;
        uVar29 = uVar29 * (long)*piVar22;
      } while ((int)lVar30 < local_bc);
    }
    local_210 = pvVar20;
    local_208 = this;
    local_200 = &local_c0;
    local_1f8 = fVar37;
    local_1f0 = pvVar19;
    local_1e8 = pvVar21;
    parallel_for_((Range *)&local_60,(ParallelLoopBody *)&local_228,(double)uVar29 * DAT_00213fd0);
    local_228 = &DAT_004f50e0;
    ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_228);
    operator_delete(pvVar21);
    if (pvVar20 != (void *)0x0) {
      operator_delete(pvVar20);
    }
    if (pvVar19 != (void *)0x0) {
      operator_delete(pvVar19);
    }
    if (local_148 != 0) {
      piVar22 = (int *)(local_148 + 0x14);
      do {
        iVar15 = *piVar22;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar4) {
          *piVar22 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)this);
      }
    }
    local_148 = 0;
    local_170 = 0;
    local_158 = 0;
    local_160 = 0;
    local_168 = 0;
    if (0 < local_180._4_4_) {
      iVar15 = 0;
      ppSVar25 = local_140;
      do {
        *(undefined4 *)ppSVar25 = 0;
        iVar15 = iVar15 + 1;
        ppSVar25 = (Scalar_ **)((long)ppSVar25 + 4);
      } while (iVar15 < local_180._4_4_);
    }
  }
  if (*(Mat **)(this + 0x48) != (Mat *)(this + 0x50)) {
    fastFree(*(Mat **)(this + 0x48));
  }
LAB_00213110:
  if (local_88 != 0) {
    piVar22 = (int *)(local_88 + 0x14);
    do {
      iVar15 = *piVar22;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar4) {
        *piVar22 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar15 = 0;
    piVar22 = local_80;
    do {
      *piVar22 = 0;
      iVar15 = iVar15 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar15 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar22 = (int *)(local_e8 + 0x14);
    do {
      iVar15 = *piVar22;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar4) {
        *piVar22 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar15 = 0;
    puVar23 = local_e0;
    do {
      *puVar23 = 0;
      iVar15 = iVar15 + 1;
      puVar23 = puVar23 + 1;
    } while (iVar15 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00213fe0 (1412 bytes) name=cvSmooth

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void cvSmooth(double param_1,double param_2,cv *param_3,cv *param_4,uint param_5,int param_6,
             int param_7,AutoBuffer *param_8)

{
  char cVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 uVar8;
  bool bVar9;
  void *__dest;
  undefined8 *puVar10;
  int *piVar11;
  int iVar12;
  int local_160;
  int local_15c;
  int local_158;
  int local_154;
  undefined8 local_150;
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = (int *)&uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  uStack_b8 = uStack_118;
  uVar2 = uStack_b8;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar9) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  local_130 = (Mat *)&local_c0;
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_b8._4_4_ = (int)((ulong)uStack_118 >> 0x20);
    uStack_68 = local_d8[1];
    bVar9 = uStack_b8._4_4_ != local_20[1];
    uStack_b8 = uVar2;
    if ((bVar9) || (uStack_b8._0_4_ = (int)uStack_118, bVar9 = (int)uStack_b8 != *local_20, bVar9))
    goto LAB_0021410c;
LAB_0021441c:
    if (param_5 != 0) {
      if (((uint)local_c0 & 0xfff) != (local_60 & 0xfff)) goto LAB_0021410c;
      goto LAB_0021415c;
    }
    if (param_7 < 1) {
      param_7 = param_6;
    }
  }
  else {
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    if ((local_80[1] == local_20[1]) && (*local_80 == *local_20)) goto LAB_0021441c;
LAB_0021410c:
    local_150 = 0;
    local_148 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_150,0x59);
    memcpy(__dest,&DAT_0045d798,0x59);
    cv::error(-0xd7,(String *)&local_150,
              "void cvSmooth(const void*, void*, int, int, int, double, double)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xd6e);
    cv::String::deallocate((String *)&local_150);
LAB_0021415c:
    if (param_7 < 1) {
      param_7 = param_6;
    }
    if (1 < param_5) {
      if (param_5 == 2) {
        local_150 = CONCAT44(local_150._4_4_,0x1010000);
        local_140 = 0;
        local_13c = 0;
        local_128 = 0;
        local_124 = 0;
        local_138 = CONCAT44(local_138._4_4_,0x2010000);
        local_158 = param_6;
        local_154 = param_7;
        local_148 = (Mat *)&local_60;
        cv::GaussianBlur(param_1,param_2,(_InputArray *)&local_150,&local_138,&local_158,1);
      }
      else if (param_5 == 3) {
        local_150 = CONCAT44(local_150._4_4_,0x1010000);
        local_140 = 0;
        local_13c = 0;
        local_128 = 0;
        local_124 = 0;
        local_138 = CONCAT44(local_138._4_4_,0x2010000);
        local_148 = (Mat *)&local_60;
        cv::medianBlur((_InputArray *)&local_150,(_OutputArray *)&local_138,param_6);
      }
      else {
        local_150 = CONCAT44(local_150._4_4_,0x1010000);
        local_140 = 0;
        local_13c = 0;
        local_128 = 0;
        local_124 = 0;
        local_138 = CONCAT44(local_138._4_4_,0x2010000);
        local_148 = (Mat *)&local_60;
        cv::bilateralFilter((_InputArray *)&local_150,(_OutputArray *)&local_138,param_6,param_1,
                            param_2,1);
      }
      goto LAB_002141c4;
    }
  }
  local_150 = CONCAT44(local_150._4_4_,0x1010000);
  local_140 = 0;
  local_13c = 0;
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = -1;
  local_154 = -1;
  local_160 = param_6;
  local_15c = param_7;
  local_148 = (Mat *)&local_60;
  cv::boxFilter(&local_150,&local_138,(uint)local_c0 & 7,&local_160,&local_158,param_5 & 1,1);
LAB_002141c4:
  if (local_b0 != local_110) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    puVar10 = (undefined8 *)cv::String::allocate((String *)&local_138,0x33);
    uVar8 = DAT_0045d82a;
    uVar7 = _LAB_0045d820;
    uVar6 = DAT_0045d818;
    uVar5 = _LAB_0045d810;
    uVar4 = _DAT_0045d808;
    uVar3 = DAT_0045d800;
    uVar2 = DAT_0045d7f8;
    *(undefined2 *)(puVar10 + 6) = DAT_0045d828;
    *(undefined1 *)((long)puVar10 + 0x32) = uVar8;
    *puVar10 = uVar2;
    puVar10[1] = uVar3;
    puVar10[2] = uVar4;
    puVar10[3] = uVar5;
    puVar10[4] = uVar6;
    puVar10[5] = uVar7;
    cv::error(-0xcd,(String *)&local_138,
              "void cvSmooth(const void*, void*, int, int, int, double, double)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp",0xd7e);
    cv::String::deallocate((String *)&local_138);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar9) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar12 = 0;
    piVar11 = local_80;
    do {
      *piVar11 = 0;
      iVar12 = iVar12 + 1;
      piVar11 = piVar11 + 1;
    } while (iVar12 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar9) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar9) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00214600 (9976 bytes) name=FUN_00214600

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00214600(double param_1,Mat *param_2,Mat *param_3,Mat *param_4,int *param_5,uint param_6,
                 int *param_7,uint param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  char cVar12;
  bool bVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined1 uVar25;
  undefined2 uVar26;
  undefined4 uVar27;
  long *plVar28;
  bool bVar29;
  uint uVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  int iVar34;
  int iVar35;
  char *pcVar36;
  undefined8 *puVar37;
  void *__dest;
  long lVar38;
  _InputArray *p_Var39;
  Mat **ppMVar40;
  undefined4 *puVar41;
  int *piVar42;
  int iVar43;
  ulong uVar44;
  ulong uVar45;
  uint uVar46;
  int iVar47;
  uint uVar48;
  uint local_5a8;
  int local_510;
  uint local_4d8;
  int local_4d0;
  int local_4cc;
  int local_4c8;
  int local_4c4;
  int local_4c0;
  int local_4bc;
  int local_4b8;
  int local_4b4;
  void *local_4b0;
  long local_4a8;
  undefined8 local_4a0;
  int local_498;
  int local_494;
  Mat *local_490;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 uStack_478;
  void *local_470;
  void *local_468;
  void *local_460;
  void *local_458;
  undefined8 local_450;
  long local_448;
  int *local_440;
  undefined8 *local_438;
  undefined8 local_430;
  undefined8 uStack_428;
  undefined8 local_420;
  undefined8 uStack_418;
  undefined8 local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  long local_3e8;
  undefined8 *local_3e0;
  undefined8 *local_3d8;
  undefined8 local_3d0;
  undefined8 uStack_3c8;
  undefined8 local_3c0;
  undefined8 uStack_3b8;
  undefined8 local_3b0;
  undefined8 local_3a8;
  undefined8 local_3a0;
  undefined8 local_398;
  undefined8 local_390;
  long local_388;
  undefined8 *local_380;
  undefined8 *local_378;
  undefined8 local_370;
  undefined8 uStack_368;
  undefined8 local_360;
  Mat *pMStack_358;
  void *local_350;
  void *local_348;
  void *local_340;
  void *local_338;
  undefined8 local_330;
  long local_328;
  undefined4 *local_320;
  long *local_318;
  long alStack_310 [2];
  undefined8 local_300;
  undefined8 uStack_2f8;
  void *local_2f0;
  void *local_2e8;
  void *local_2e0;
  void *local_2d8;
  undefined8 local_2d0;
  long local_2c8;
  undefined4 *local_2c0;
  long *local_2b8;
  long alStack_2b0 [2];
  undefined8 local_2a0;
  Mat *pMStack_298;
  void *local_290;
  void *pvStack_288;
  void *local_280;
  void *pvStack_278;
  undefined8 local_270;
  long lStack_268;
  Mat **local_260;
  long *local_258;
  long local_250;
  long lStack_248;
  undefined8 local_240;
  undefined8 uStack_238;
  void *local_230;
  void *pvStack_228;
  void *local_220;
  void *pvStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined8 *local_200;
  long *local_1f8;
  long local_1f0;
  long lStack_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  void *local_1d0;
  void *pvStack_1c8;
  void *local_1c0;
  void *pvStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  long *local_198;
  long local_190;
  long local_188;
  undefined8 local_180;
  undefined8 uStack_178;
  void *local_170;
  void *pvStack_168;
  void *local_160;
  void *pvStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  long *local_138;
  long local_130 [2];
  undefined8 local_120;
  undefined8 uStack_118;
  void *local_110;
  void *local_108;
  void *local_100;
  void *local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  long *local_d8;
  long alStack_d0 [2];
  int local_c0 [14];
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 uStack_58;
  void *local_50;
  void *pvStack_48;
  void *local_40;
  void *pvStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long lStack_8;
  
  uStack_478 = *(Mat **)(param_3 + 8);
  local_480 = *(ulong *)param_3;
  local_438 = &local_430;
  local_470 = *(void **)(param_3 + 0x10);
  local_468 = *(void **)(param_3 + 0x18);
  uStack_428 = 0;
  local_430 = 0;
  local_460 = *(void **)(param_3 + 0x20);
  local_458 = *(void **)(param_3 + 0x28);
  local_448 = *(long *)(param_3 + 0x38);
  local_450 = *(undefined8 *)(param_3 + 0x30);
  local_4b0 = (void *)0x0;
  local_4a8 = 0;
  local_4a0 = 0;
  local_440 = (int *)&uStack_478;
  iVar31 = *(int *)(param_3 + 4);
  if (local_448 != 0) {
    piVar42 = (int *)(local_448 + 0x14);
    do {
      cVar12 = '\x01';
      bVar29 = (bool)ExclusiveMonitorPass(piVar42,0x10);
      if (bVar29) {
        *piVar42 = *piVar42 + 1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    iVar31 = *(int *)(param_3 + 4);
  }
  if (2 < iVar31) {
                    /* WARNING: Ignoring partial resolution of indirect */
    local_480._4_4_ = 0;
    cv::Mat::copySize((Mat *)&local_480,param_3);
  }
  uVar18 = param_6 >> 3 & 0x1ff;
  uVar6 = *(uint *)param_2 & 7;
  uVar1 = (*(uint *)param_2 >> 3 & 0x1ff) + 1;
  local_4d8 = (uint)local_480 & 7;
  uVar7 = param_6 & 7;
  uVar48 = ((uint)local_480 >> 3 & 0x1ff) + 1;
  if (((2 < *(int *)(param_2 + 4)) || (2 < local_480._4_4_)) || (2 < *(int *)(param_4 + 4))) {
    local_360 = 0;
    pMStack_358 = (Mat *)0x0;
    pcVar36 = (char *)cv::String::allocate((String *)&local_360,0x32);
    uVar24 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._40_8_;
    uVar23 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._32_8_;
    uVar22 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._24_8_;
    uVar21 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._16_8_;
    uVar20 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._8_8_;
    uVar19 = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._0_8_;
    *(undefined2 *)(pcVar36 + 0x30) = s_img_dims_<__2_&&_templ_dims_<__2_0045f750._48_2_;
    *(undefined8 *)pcVar36 = uVar19;
    *(undefined8 *)(pcVar36 + 8) = uVar20;
    *(undefined8 *)(pcVar36 + 0x10) = uVar21;
    *(undefined8 *)(pcVar36 + 0x18) = uVar22;
    *(undefined8 *)(pcVar36 + 0x20) = uVar23;
    *(undefined8 *)(pcVar36 + 0x28) = uVar24;
    cv::error(-0xd7,(String *)&local_360,
              "void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x288);
    cv::String::deallocate((String *)&local_360);
  }
  if (uVar6 != local_4d8) {
    uVar30 = uVar6;
    if (uVar6 < 5) {
      uVar30 = 5;
    }
    if (local_4d8 != uVar30) {
      local_50 = (void *)0x0;
      local_60 = CONCAT44(local_60._4_4_,0x2010000);
      uStack_58 = (Mat *)&local_480;
      cv::Mat::convertTo(param_3,(_OutputArray *)&local_60,uVar30,1.0,0.0);
      local_4d8 = (uint)local_480 & 7;
    }
    if ((uVar6 != local_4d8) && (local_4d8 != 5)) {
      local_300 = 0;
      uStack_2f8 = (Mat *)0x0;
      puVar37 = (undefined8 *)cv::String::allocate((String *)&local_300,0x23);
      uVar25 = DAT_0045f7f2;
      uVar22 = _LAB_0045f7e8;
      uVar21 = DAT_0045f7e0;
      uVar20 = DAT_0045f7d8;
      uVar19 = DAT_0045f7d0;
      *(undefined2 *)(puVar37 + 4) = DAT_0045f7f0;
      *(undefined1 *)((long)puVar37 + 0x22) = uVar25;
      *puVar37 = uVar19;
      puVar37[1] = uVar20;
      puVar37[2] = uVar21;
      puVar37[3] = uVar22;
      cv::error(-0xd7,(String *)&local_300,
                "void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)"
                ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x290);
      cv::String::deallocate((String *)&local_300);
    }
  }
  if ((*(int *)(param_2 + 8) + (int)uStack_478 <= param_5[1]) ||
     (*(int *)(param_2 + 0xc) + uStack_478._4_4_ <= *param_5)) {
    local_2a0 = 0;
    pMStack_298 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_2a0,0x5b);
    memcpy(__dest,&DAT_0045f7f8,0x5b);
    cv::error(-0xd7,(String *)&local_2a0,
              "void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x292);
    cv::String::deallocate((String *)&local_2a0);
  }
  if ((uVar18 != 0) && (param_1 != 0.0)) {
    local_120 = 0;
    uStack_118 = (Mat *)0x0;
    puVar37 = (undefined8 *)cv::String::allocate((String *)&local_120,0x16);
    uVar26 = _LAB_0045f86c;
    uVar20 = DAT_0045f860;
    uVar19 = DAT_0045f858;
    *(undefined4 *)(puVar37 + 2) = DAT_0045f868;
    *(undefined2 *)((long)puVar37 + 0x14) = uVar26;
    *puVar37 = uVar19;
    puVar37[1] = uVar20;
    cv::error(-0xd7,(String *)&local_120,
              "void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x294);
    cv::String::deallocate((String *)&local_120);
  }
  if ((((2 < *(int *)(param_4 + 4)) || (param_5[1] != *(int *)(param_4 + 8))) ||
      (*param_5 != *(int *)(param_4 + 0xc))) ||
     (((param_6 & 0xfff) != (*(uint *)param_4 & 0xfff) || (*(long *)(param_4 + 0x10) == 0)))) {
    local_4c0 = param_5[1];
    local_4bc = *param_5;
    cv::Mat::create(param_4,2,&local_4c0,param_6 & 0xfff);
  }
  local_5a8 = 6;
  if (uVar6 < 2) {
    uVar30 = local_4d8;
    if (local_4d8 < 6) {
      uVar30 = 5;
    }
    local_5a8 = uVar7;
    if (uVar7 < uVar30) {
      local_5a8 = uVar30;
    }
  }
  lVar38 = lrint((double)uStack_478._4_4_ * 4.5);
  iVar31 = (int)lVar38;
  if ((int)lVar38 < 0x101 - uStack_478._4_4_) {
    iVar31 = 0x101 - uStack_478._4_4_;
  }
  if (*(int *)(param_4 + 0xc) < iVar31) {
    iVar31 = *(int *)(param_4 + 0xc);
  }
  lVar38 = lrint((double)(int)uStack_478 * 4.5);
  iVar32 = (int)lVar38;
  if ((int)lVar38 < 0x101 - (int)uStack_478) {
    iVar32 = 0x101 - (int)uStack_478;
  }
  if (*(int *)(param_4 + 8) < iVar32) {
    iVar32 = *(int *)(param_4 + 8);
  }
  iVar31 = cv::getOptimalDFTSize(iVar31 + uStack_478._4_4_ + -1);
  if (iVar31 < 2) {
    iVar31 = 2;
  }
  iVar32 = cv::getOptimalDFTSize(iVar32 + (int)uStack_478 + -1);
  if (iVar32 < 1) {
    local_c0[0] = 0;
    local_c0[1] = 0;
    local_c0[2] = 0;
    local_c0[3] = 0;
    pcVar36 = (char *)cv::String::allocate((String *)local_c0,0x1c);
    uVar27 = s_the_input_arrays_are_too_big_0045f870._24_4_;
    uVar20 = s_the_input_arrays_are_too_big_0045f870._8_8_;
    uVar19 = s_the_input_arrays_are_too_big_0045f870._0_8_;
    *(undefined8 *)(pcVar36 + 0x10) = s_the_input_arrays_are_too_big_0045f870._16_8_;
    *(undefined4 *)(pcVar36 + 0x18) = uVar27;
    *(undefined8 *)pcVar36 = uVar19;
    *(undefined8 *)(pcVar36 + 8) = uVar20;
    cv::error(-0xd3,(String *)local_c0,
              "void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x2a5);
    cv::String::deallocate((String *)local_c0);
  }
  local_3d8 = &local_3d0;
  uStack_418 = _UNK_00217048;
  local_420 = _DAT_00217040;
  iVar2 = (iVar31 - uStack_478._4_4_) + 1;
  iVar3 = (iVar32 - (int)uStack_478) + 1;
  if (*(int *)(param_4 + 0xc) < iVar2) {
    iVar2 = *(int *)(param_4 + 0xc);
  }
  uStack_3c8 = 0;
  local_3d0 = 0;
  if (*(int *)(param_4 + 8) < iVar3) {
    iVar3 = *(int *)(param_4 + 8);
  }
  local_4b8 = iVar32 * uVar48;
  local_3e0 = &uStack_418;
  local_410 = 0;
  local_408 = 0;
  local_400 = 0;
  local_3f8 = 0;
  local_3f0 = 0;
  local_3e8 = 0;
  local_4b4 = iVar31;
  cv::Mat::create((Mat *)&local_420,2,&local_4b8,local_5a8);
  local_378 = &local_370;
  local_380 = &uStack_3b8;
  uStack_3b8 = _UNK_00217048;
  local_3c0 = _DAT_00217040;
  local_3b0 = 0;
  local_3a8 = 0;
  local_3a0 = 0;
  uStack_368 = 0;
  local_370 = 0;
  local_398 = 0;
  local_390 = 0;
  local_388 = 0;
  local_498 = iVar32;
  local_494 = iVar31;
  cv::Mat::create((Mat *)&local_3c0,2,&local_498,local_5a8);
  bVar29 = uVar48 != 1;
  if ((local_5a8 == local_4d8) || (!bVar29)) {
    iVar43 = 0;
  }
  else {
    iVar43 = uStack_478._4_4_ * (int)uStack_478 *
             (1 << (ulong)((uint)(0xfa50L >> (local_4d8 << 1)) & 3));
  }
  if (((uVar6 != local_5a8) && (uVar1 != 1)) &&
     (iVar33 = (iVar2 + uStack_478._4_4_ + -1) * (iVar3 + (int)uStack_478 + -1) *
               (1 << (ulong)((uint)(0xfa50L >> (uVar6 << 1)) & 3)), iVar43 < iVar33)) {
    iVar43 = iVar33;
  }
  if (((1 < uVar1) || (uVar18 != 0 && uVar18 != 0xffffffff)) &&
     ((uVar7 != local_5a8 &&
      (iVar33 = iVar2 * iVar3 * (1 << (ulong)((uint)(0xfa50L >> (uVar7 << 1)) & 3)), iVar43 < iVar33
      )))) {
    iVar43 = iVar33;
  }
  uVar44 = (ulong)iVar43;
  uVar45 = local_4a8 - (long)local_4b0;
  if (uVar45 < uVar44) {
    std::vector<unsigned_char,std::allocator<unsigned_char>>::_M_fill_insert
              ((vector<unsigned_char,std::allocator<unsigned_char>> *)&local_4b0,local_4a8,
               uVar44 - uVar45);
  }
  else if (uVar44 < uVar45) {
    local_4a8 = (long)local_4b0 + uVar44;
  }
  uVar46 = 0;
  uVar30 = 0;
  do {
    local_140 = &uStack_178;
    local_130[1] = 0;
    local_130[0] = 0;
    uStack_178 = uStack_478;
    local_180 = local_480;
    local_170 = local_470;
    pvStack_168 = local_468;
    local_160 = local_460;
    pvStack_158 = local_458;
    local_150 = local_450;
    lStack_148 = local_448;
    if (local_448 != 0) {
      piVar42 = (int *)(local_448 + 0x14);
      do {
        cVar12 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
        if (bVar13) {
          *piVar42 = *piVar42 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    local_138 = local_130;
    if (2 < local_480._4_4_) {
      local_180 = local_480 & 0xffffffff;
      cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_480);
    }
    local_60._0_4_ = 0;
    local_60._4_4_ = uVar46;
    uStack_58._0_4_ = iVar31;
    uStack_58._4_4_ = iVar32;
    cv::Mat::Mat((Mat *)local_c0,(Mat *)&local_420,(Mat *)&local_60);
    local_60 = (ulong)uVar46 << 0x20;
    uStack_58 = (Mat *)CONCAT44((int)uStack_478,uStack_478._4_4_);
    cv::Mat::Mat((Mat *)&local_120,(Mat *)&local_420,(Mat *)&local_60);
    if (bVar29) {
      local_18 = &local_10;
      if (local_5a8 == local_4d8) {
        local_20 = &uStack_58;
        lStack_8 = 0;
        local_10 = 0;
        uStack_58 = uStack_118;
        local_60 = local_120;
        local_50 = local_110;
        pvStack_48 = local_108;
        local_40 = local_100;
        pvStack_38 = local_f8;
        local_30 = local_f0;
        lStack_28 = local_e8;
        if (local_e8 != 0) {
          piVar42 = (int *)(local_e8 + 0x14);
          do {
            cVar12 = '\x01';
            bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
            if (bVar13) {
              *piVar42 = *piVar42 + 1;
              cVar12 = ExclusiveMonitorsStatus();
            }
          } while (cVar12 != '\0');
        }
        if (local_120._4_4_ < 3) {
          local_10 = *local_d8;
          lStack_8 = local_d8[1];
        }
        else {
          local_60 = local_120 & 0xffffffff;
          cv::Mat::copySize((Mat *)&local_60,(Mat *)&local_120);
        }
        if (lStack_28 != 0) {
          piVar42 = (int *)(lStack_28 + 0x14);
          do {
            cVar12 = '\x01';
            bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
            if (bVar13) {
              *piVar42 = *piVar42 + 1;
              cVar12 = ExclusiveMonitorsStatus();
            }
          } while (cVar12 != '\0');
        }
      }
      else {
        iVar43 = 1 << (ulong)((uint)(0xfa50L >> (local_4d8 << 1)) & 3);
        local_20 = &uStack_58;
        uStack_58 = *(Mat **)local_440;
        local_10 = (long)iVar43 * (long)local_440[1];
        lStack_8 = (long)iVar43;
        local_50 = local_4b0;
        pvStack_48 = local_4b0;
        local_30 = 0;
        lStack_28 = 0;
        local_60 = CONCAT44(2,local_4d8 + 0x42ff0000 | 0x4000);
        local_40 = (void *)((long)local_4b0 + local_10 * *local_440);
        pvStack_38 = local_40;
      }
      if (lStack_148 != 0) {
        piVar42 = (int *)(lStack_148 + 0x14);
        do {
          iVar43 = *piVar42;
          cVar12 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar13) {
            *piVar42 = iVar43 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar43 == 1) {
          cv::Mat::deallocate((Mat *)&local_180);
        }
      }
      lStack_148 = 0;
      local_170 = (void *)0x0;
      pvStack_158 = (void *)0x0;
      local_160 = (void *)0x0;
      pvStack_168 = (void *)0x0;
      if (local_180._4_4_ < 1) {
LAB_00214f78:
        if (2 < (int)local_60._4_4_) goto LAB_002164b4;
        local_180 = local_60;
        uStack_178 = uStack_58;
        *local_138 = *local_18;
        local_138[1] = local_18[1];
      }
      else {
        iVar43 = 0;
        puVar37 = local_140;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar43 = iVar43 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar43 < local_180._4_4_);
        if (local_180._4_4_ < 3) goto LAB_00214f78;
LAB_002164b4:
        local_180 = CONCAT44(local_180._4_4_,(int)local_60);
        cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_60);
      }
      pvStack_158 = pvStack_38;
      local_160 = local_40;
      lStack_148 = lStack_28;
      local_150 = local_30;
      pvStack_168 = pvStack_48;
      local_170 = local_50;
      if (lStack_28 != 0) {
        piVar42 = (int *)(lStack_28 + 0x14);
        do {
          iVar43 = *piVar42;
          cVar12 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar13) {
            *piVar42 = iVar43 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar43 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      lStack_28 = 0;
      local_50 = (void *)0x0;
      pvStack_38 = (void *)0x0;
      local_40 = (void *)0x0;
      pvStack_48 = (void *)0x0;
      if (0 < (int)local_60._4_4_) {
        iVar43 = 0;
        puVar37 = local_20;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar43 = iVar43 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar43 < (int)local_60._4_4_);
      }
      if (local_18 != &local_10) {
        cv::fastFree(local_18);
      }
      local_60 = (ulong)uVar30;
      cv::mixChannels((Mat *)&local_480,1,(Mat *)&local_180,1,(int *)&local_60,1);
    }
    if (local_110 != local_170) {
      local_50 = (void *)0x0;
      local_60 = CONCAT44(local_60._4_4_,0x2010000);
      uStack_58 = (Mat *)&local_120;
      cv::Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_60,(uint)local_120 & 7,1.0,0.0);
    }
    if (uStack_478._4_4_ < local_c0[3]) {
      local_240 = (long)uStack_478 << 0x20;
      local_1e0 = CONCAT44(local_c0[3],uStack_478._4_4_);
      cv::Mat::Mat((Mat *)&local_60,(Mat *)local_c0,(Range *)&local_240,(Range *)&local_1e0);
      local_1d8 = (Mat *)0x0;
      local_1e0 = 0;
      pvStack_1c8 = (void *)0x0;
      local_1d0 = (void *)0x0;
      cv::Mat::operator=((Mat *)&local_60,(Scalar_ *)&local_1e0);
      if (lStack_28 != 0) {
        piVar42 = (int *)(lStack_28 + 0x14);
        do {
          iVar43 = *piVar42;
          cVar12 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar13) {
            *piVar42 = iVar43 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar43 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      lStack_28 = 0;
      local_50 = (void *)0x0;
      pvStack_38 = (void *)0x0;
      local_40 = (void *)0x0;
      pvStack_48 = (void *)0x0;
      if (0 < (int)local_60._4_4_) {
        iVar43 = 0;
        puVar37 = local_20;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar43 = iVar43 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar43 < (int)local_60._4_4_);
      }
      if (local_18 != &local_10) {
        cv::fastFree(local_18);
      }
    }
    local_1e0 = CONCAT44(local_1e0._4_4_,0x1010000);
    local_50 = (void *)0x0;
    local_1d0 = (void *)0x0;
    local_60 = CONCAT44(local_60._4_4_,0x2010000);
    local_1d8 = (Mat *)local_c0;
    uStack_58 = (Mat *)local_c0;
    cv::dft((_InputArray *)&local_1e0,(_OutputArray *)&local_60,0,(int)uStack_478);
    if (local_e8 != 0) {
      piVar42 = (int *)(local_e8 + 0x14);
      do {
        iVar43 = *piVar42;
        cVar12 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
        if (bVar13) {
          *piVar42 = iVar43 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar43 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = (void *)0x0;
    local_f8 = (void *)0x0;
    local_100 = (void *)0x0;
    local_108 = (void *)0x0;
    if (0 < local_120._4_4_) {
      iVar43 = 0;
      puVar41 = local_e0;
      do {
        *puVar41 = 0;
        iVar43 = iVar43 + 1;
        puVar41 = puVar41 + 1;
      } while (iVar43 < local_120._4_4_);
    }
    if (local_d8 != alStack_d0) {
      cv::fastFree(local_d8);
    }
    if (local_88 != 0) {
      piVar42 = (int *)(local_88 + 0x14);
      do {
        iVar43 = *piVar42;
        cVar12 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
        if (bVar13) {
          *piVar42 = iVar43 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar43 == 1) {
        cv::Mat::deallocate((Mat *)local_c0);
      }
    }
    local_88 = 0;
    local_c0[4] = 0;
    local_c0[5] = 0;
    local_c0[10] = 0;
    local_c0[0xb] = 0;
    local_c0[8] = 0;
    local_c0[9] = 0;
    local_c0[6] = 0;
    local_c0[7] = 0;
    if (0 < local_c0[1]) {
      iVar43 = 0;
      puVar41 = local_80;
      do {
        *puVar41 = 0;
        iVar43 = iVar43 + 1;
        puVar41 = puVar41 + 1;
      } while (iVar43 < local_c0[1]);
    }
    if (local_78 != auStack_70) {
      cv::fastFree(local_78);
    }
    if (lStack_148 != 0) {
      piVar42 = (int *)(lStack_148 + 0x14);
      do {
        iVar43 = *piVar42;
        cVar12 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
        if (bVar13) {
          *piVar42 = iVar43 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar43 == 1) {
        cv::Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = (void *)0x0;
    pvStack_158 = (void *)0x0;
    local_160 = (void *)0x0;
    pvStack_168 = (void *)0x0;
    if (0 < local_180._4_4_) {
      iVar43 = 0;
      puVar37 = local_140;
      do {
        *(undefined4 *)puVar37 = 0;
        iVar43 = iVar43 + 1;
        puVar37 = (undefined8 *)((long)puVar37 + 4);
      } while (iVar43 < local_180._4_4_);
    }
    if (local_138 != local_130) {
      cv::fastFree(local_138);
    }
    uVar30 = uVar30 + 1;
    uVar46 = uVar46 + iVar32;
    if (uVar30 == uVar48) {
      iVar43 = 0;
      if (iVar2 != 0) {
        iVar43 = (iVar2 + *(int *)(param_4 + 0xc) + -1) / iVar2;
      }
      uVar48 = *(uint *)param_2;
      local_4cc = **(int **)(param_2 + 0x40);
      local_4d0 = (*(int **)(param_2 + 0x40))[1];
      local_140 = &uStack_178;
      iVar33 = *(int *)(param_2 + 4);
      local_180 = *(ulong *)param_2;
      local_138 = local_130;
      uStack_178 = *(Mat **)(param_2 + 8);
      local_170 = *(void **)(param_2 + 0x10);
      pvStack_168 = *(void **)(param_2 + 0x18);
      iVar11 = 0;
      if (iVar3 != 0) {
        iVar11 = (iVar3 + *(int *)(param_4 + 8) + -1) / iVar3;
      }
      local_160 = *(void **)(param_2 + 0x20);
      pvStack_158 = *(void **)(param_2 + 0x28);
      local_150 = *(undefined8 *)(param_2 + 0x30);
      lStack_148 = *(long *)(param_2 + 0x38);
      local_4c8 = 0;
      local_4c4 = 0;
      local_130[1] = 0;
      local_130[0] = 0;
      if (lStack_148 != 0) {
        piVar42 = (int *)(lStack_148 + 0x14);
        do {
          cVar12 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar13) {
            *piVar42 = *piVar42 + 1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        iVar33 = *(int *)(param_2 + 4);
      }
      if (2 < iVar33) {
        local_180 = (ulong)uVar48;
        cv::Mat::copySize((Mat *)&local_180,param_2);
      }
      if ((param_8 >> 4 & 1) == 0) {
        cv::Mat::locateROI(param_2,(Size_ *)&local_4d0,(Point_ *)&local_4c8);
        cv::Mat::adjustROI((Mat *)&local_180,local_4c4,
                           (local_4cc - *(int *)(param_2 + 8)) - local_4c4,local_4c8,
                           (local_4d0 - *(int *)(param_2 + 0xc)) - local_4c8);
      }
      if (0 < iVar43 * iVar11) {
        local_510 = 0;
        iVar33 = 1 << (ulong)((uint)(0xfa50L >> (uVar6 << 1)) & 3);
        do {
          iVar35 = 0;
          if (iVar43 != 0) {
            iVar35 = local_510 / iVar43;
          }
          iVar47 = iVar35 * iVar3;
          iVar34 = (local_510 - iVar35 * iVar43) * iVar2;
          iVar35 = *(int *)(param_4 + 0xc) - iVar34;
          if (iVar2 < *(int *)(param_4 + 0xc) - iVar34) {
            iVar35 = iVar2;
          }
          iVar8 = *(int *)(param_4 + 8) - iVar47;
          if (iVar3 < *(int *)(param_4 + 8) - iVar47) {
            iVar8 = iVar3;
          }
          iVar4 = (iVar34 - *param_7) + local_4c8;
          iVar14 = iVar35 + uStack_478._4_4_ + -1;
          iVar9 = iVar4;
          if (iVar4 < 0) {
            iVar9 = 0;
          }
          iVar15 = iVar8 + (int)uStack_478 + -1;
          iVar5 = (iVar47 - param_7[1]) + local_4c4;
          iVar10 = iVar5;
          if (iVar5 < 0) {
            iVar10 = 0;
          }
          iVar17 = iVar14 + iVar4;
          if (uStack_178._4_4_ < iVar14 + iVar4) {
            iVar17 = uStack_178._4_4_;
          }
          iVar16 = iVar15 + iVar5;
          if ((int)uStack_178 < iVar15 + iVar5) {
            iVar16 = (int)uStack_178;
          }
          local_c0[1] = iVar16;
          local_c0[0] = iVar10;
          local_60._0_4_ = iVar9;
          local_60._4_4_ = iVar17;
          cv::Mat::Mat((Mat *)&local_360,(Mat *)&local_180,(Range *)local_c0,(Range *)&local_60);
          local_60 = 0;
          uStack_58._0_4_ = iVar14;
          uStack_58._4_4_ = iVar15;
          cv::Mat::Mat((Mat *)&local_120,(Mat *)&local_3c0,(Mat *)&local_60);
          iVar16 = iVar16 - iVar10;
          iVar17 = iVar17 - iVar9;
          local_60 = CONCAT44(iVar10 - iVar5,iVar9 - iVar4);
          uStack_58 = (Mat *)CONCAT44(iVar16,iVar17);
          cv::Mat::Mat((Mat *)&local_300,(Mat *)&local_3c0,(Mat *)&local_60);
          uStack_58 = (Mat *)CONCAT44(iVar8,iVar35);
          local_60 = CONCAT44(iVar47,iVar34);
          cv::Mat::Mat((Mat *)local_c0,param_4,(Mat *)&local_60);
          uVar48 = 0;
          lVar38 = (long)iVar17 * (long)iVar33;
          iVar47 = 0;
          do {
            lStack_248 = 0;
            local_250 = 0;
            pMStack_298 = pMStack_358;
            local_2a0 = local_360;
            local_270 = local_330;
            local_290 = local_350;
            pvStack_288 = local_348;
            local_280 = local_340;
            pvStack_278 = local_338;
            lStack_268 = local_328;
            if (local_328 != 0) {
              piVar42 = (int *)(local_328 + 0x14);
              do {
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = *piVar42 + 1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
            }
            local_260 = &pMStack_298;
            local_258 = &local_250;
            if (local_360._4_4_ < 3) {
              local_250 = *local_318;
              lStack_248 = local_318[1];
            }
            else {
              local_2a0 = local_360 & 0xffffffff;
              cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_360);
            }
            uStack_58 = (Mat *)0x0;
            local_60 = 0;
            pvStack_48 = (void *)0x0;
            local_50 = (void *)0x0;
            cv::Mat::operator=((Mat *)&local_3c0,(Scalar_ *)&local_60);
            if (uVar1 != 1) {
              local_200 = &uStack_238;
              if (uVar6 == local_5a8) {
                local_1f8 = &local_1f0;
                lStack_1e8 = 0;
                local_1f0 = 0;
                uStack_238 = uStack_2f8;
                local_240 = local_300;
                local_210 = local_2d0;
                local_230 = local_2f0;
                pvStack_228 = local_2e8;
                local_220 = local_2e0;
                pvStack_218 = local_2d8;
                lStack_208 = local_2c8;
                if (local_2c8 != 0) {
                  piVar42 = (int *)(local_2c8 + 0x14);
                  do {
                    cVar12 = '\x01';
                    bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                    if (bVar13) {
                      *piVar42 = *piVar42 + 1;
                      cVar12 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar12 != '\0');
                }
                if (local_300._4_4_ < 3) {
                  local_1f0 = *local_2b8;
                  lStack_1e8 = local_2b8[1];
                }
                else {
                  local_240 = local_300 & 0xffffffff;
                  cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_300);
                }
                if (lStack_208 != 0) {
                  piVar42 = (int *)(lStack_208 + 0x14);
                  do {
                    cVar12 = '\x01';
                    bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                    if (bVar13) {
                      *piVar42 = *piVar42 + 1;
                      cVar12 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar12 != '\0');
                }
              }
              else {
                local_1f8 = &local_1f0;
                local_230 = local_4b0;
                local_220 = (void *)((long)local_4b0 + lVar38 * iVar16);
                pvStack_228 = local_4b0;
                local_240 = CONCAT44(2,uVar6 + 0x42ff0000 | 0x4000);
                uStack_238 = (Mat *)CONCAT44(iVar17,iVar16);
                local_210 = 0;
                lStack_208 = 0;
                pvStack_218 = local_220;
                local_1f0 = lVar38;
                lStack_1e8 = (long)iVar33;
              }
              if (lStack_268 == 0) {
LAB_0021585c:
                if (0 < local_2a0._4_4_) goto LAB_0021587c;
LAB_00216a88:
                local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_240);
LAB_002158a8:
                plVar28 = local_1f8;
                if (2 < local_240._4_4_) goto LAB_00216730;
                local_2a0 = CONCAT44(local_240._4_4_,(undefined4)local_2a0);
                pMStack_298 = uStack_238;
                *local_258 = *local_1f8;
                local_258[1] = plVar28[1];
              }
              else {
                piVar42 = (int *)(lStack_268 + 0x14);
                do {
                  iVar34 = *piVar42;
                  cVar12 = '\x01';
                  bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                  if (bVar13) {
                    *piVar42 = iVar34 + -1;
                    cVar12 = ExclusiveMonitorsStatus();
                  }
                } while (cVar12 != '\0');
                if (iVar34 != 1) goto LAB_0021585c;
                cv::Mat::deallocate((Mat *)&local_2a0);
                if (local_2a0._4_4_ < 1) goto LAB_00216a88;
LAB_0021587c:
                iVar34 = 0;
                ppMVar40 = local_260;
                do {
                  *(undefined4 *)ppMVar40 = 0;
                  iVar34 = iVar34 + 1;
                  ppMVar40 = (Mat **)((long)ppMVar40 + 4);
                } while (iVar34 < local_2a0._4_4_);
                local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_240);
                if (local_2a0._4_4_ < 3) goto LAB_002158a8;
LAB_00216730:
                lStack_268 = 0;
                pvStack_278 = (void *)0x0;
                local_280 = (void *)0x0;
                pvStack_288 = (void *)0x0;
                local_290 = (void *)0x0;
                cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_240);
              }
              pvStack_278 = pvStack_218;
              local_280 = local_220;
              lStack_268 = lStack_208;
              local_270 = local_210;
              pvStack_288 = pvStack_228;
              local_290 = local_230;
              if (lStack_208 != 0) {
                piVar42 = (int *)(lStack_208 + 0x14);
                do {
                  iVar34 = *piVar42;
                  cVar12 = '\x01';
                  bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                  if (bVar13) {
                    *piVar42 = iVar34 + -1;
                    cVar12 = ExclusiveMonitorsStatus();
                  }
                } while (cVar12 != '\0');
                if (iVar34 == 1) {
                  cv::Mat::deallocate((Mat *)&local_240);
                }
              }
              lStack_208 = 0;
              local_230 = (void *)0x0;
              pvStack_218 = (void *)0x0;
              local_220 = (void *)0x0;
              pvStack_228 = (void *)0x0;
              if (0 < local_240._4_4_) {
                iVar34 = 0;
                puVar37 = local_200;
                do {
                  *(undefined4 *)puVar37 = 0;
                  iVar34 = iVar34 + 1;
                  puVar37 = (undefined8 *)((long)puVar37 + 4);
                } while (iVar34 < local_240._4_4_);
              }
              if (local_1f8 != &local_1f0) {
                cv::fastFree(local_1f8);
              }
              local_60 = (ulong)uVar48;
              cv::mixChannels((Mat *)&local_360,1,(Mat *)&local_2a0,1,(int *)&local_60,1);
            }
            if (local_2f0 != local_290) {
              local_50 = (void *)0x0;
              local_60 = CONCAT44(local_60._4_4_,0x2010000);
              uStack_58 = (Mat *)&local_300;
              cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_60,(uint)local_300 & 7,1.0
                                 ,0.0);
            }
            if (iVar17 < iVar14 || iVar16 < iVar15) {
              uStack_58 = (Mat *)0x0;
              local_60 = 0;
              pvStack_48 = (void *)0x0;
              local_50 = (void *)0x0;
              local_240 = CONCAT44(local_240._4_4_,0x1010000);
              local_230 = (void *)0x0;
              local_1d0 = (void *)0x0;
              local_1e0 = CONCAT44(local_1e0._4_4_,0x2010000);
              uStack_238 = (Mat *)&local_300;
              local_1d8 = (Mat *)&local_120;
              cv::copyMakeBorder((_InputArray *)&local_240,(_OutputArray *)&local_1e0,iVar10 - iVar5
                                 ,((int)uStack_118 - (int)uStack_2f8) + (iVar5 - iVar10),
                                 iVar9 - iVar4,
                                 (uStack_118._4_4_ - uStack_2f8._4_4_) + (iVar4 - iVar9),
                                 param_8 | 0x10,(Scalar_ *)&local_60);
            }
            local_1e0._0_4_ = 0x1010000;
            local_50 = (void *)0x0;
            local_1d0 = (void *)0x0;
            local_60 = CONCAT44(local_60._4_4_,0x2010000);
            local_1d8 = (Mat *)&local_3c0;
            uStack_58 = (Mat *)&local_3c0;
            cv::dft((_InputArray *)&local_1e0,(_OutputArray *)&local_60,0,iVar15);
            local_1e0._4_4_ = iVar47;
            if (!bVar29) {
              local_1e0._4_4_ = 0;
            }
            local_1e0._0_4_ = 0;
            local_1d8 = (Mat *)CONCAT44(iVar32,iVar31);
            cv::Mat::Mat((Mat *)&local_60,(Mat *)&local_420,(_InputArray *)&local_1e0);
            local_498 = 0x1010000;
            local_240._0_4_ = 0x1010000;
            local_488 = 0;
            local_484 = 0;
            local_230 = (void *)0x0;
            local_1d0 = (void *)0x0;
            local_1e0._0_4_ = 0x2010000;
            local_490 = (Mat *)&local_3c0;
            uStack_238 = (Mat *)&local_60;
            local_1d8 = (Mat *)&local_3c0;
            cv::mulSpectrums((_InputArray *)&local_498,(_InputArray *)&local_240,
                             (_OutputArray *)&local_1e0,0,true);
            local_240._0_4_ = 0x1010000;
            local_230 = (void *)0x0;
            local_1d0 = (void *)0x0;
            local_1e0 = CONCAT44(local_1e0._4_4_,0x2010000);
            uStack_238 = (Mat *)&local_3c0;
            local_1d8 = (Mat *)&local_3c0;
            cv::dft((_InputArray *)&local_240,(_OutputArray *)&local_1e0,3,iVar8);
            local_240 = 0;
            uStack_238 = (Mat *)CONCAT44(iVar8,iVar35);
            cv::Mat::Mat((Mat *)&local_1e0,(Mat *)&local_3c0,(_InputArray *)&local_240);
            if (lStack_1a8 != 0) {
              piVar42 = (int *)(lStack_1a8 + 0x14);
              do {
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = *piVar42 + 1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
            }
            if (lStack_268 == 0) {
LAB_00215be4:
              if (0 < local_2a0._4_4_) goto LAB_00215c04;
LAB_002167b8:
              local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
LAB_00215c30:
              plVar28 = local_198;
              if (2 < local_1e0._4_4_) goto LAB_00216720;
              local_2a0 = CONCAT44(local_1e0._4_4_,(undefined4)local_2a0);
              pMStack_298 = local_1d8;
              *local_258 = *local_198;
              local_258[1] = plVar28[1];
            }
            else {
              piVar42 = (int *)(lStack_268 + 0x14);
              do {
                iVar34 = *piVar42;
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = iVar34 + -1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
              if (iVar34 != 1) goto LAB_00215be4;
              cv::Mat::deallocate((Mat *)&local_2a0);
              if (local_2a0._4_4_ < 1) goto LAB_002167b8;
LAB_00215c04:
              iVar34 = 0;
              ppMVar40 = local_260;
              do {
                *(undefined4 *)ppMVar40 = 0;
                iVar34 = iVar34 + 1;
                ppMVar40 = (Mat **)((long)ppMVar40 + 4);
              } while (iVar34 < local_2a0._4_4_);
              local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
              if (local_2a0._4_4_ < 3) goto LAB_00215c30;
LAB_00216720:
              lStack_268 = 0;
              pvStack_278 = (void *)0x0;
              local_280 = (void *)0x0;
              pvStack_288 = (void *)0x0;
              local_290 = (void *)0x0;
              cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_1e0);
            }
            pvStack_278 = pvStack_1b8;
            local_280 = local_1c0;
            lStack_268 = lStack_1a8;
            local_270 = local_1b0;
            pvStack_288 = pvStack_1c8;
            local_290 = local_1d0;
            if (lStack_1a8 != 0) {
              piVar42 = (int *)(lStack_1a8 + 0x14);
              do {
                iVar34 = *piVar42;
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = iVar34 + -1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
              if (iVar34 == 1) {
                cv::Mat::deallocate((Mat *)&local_1e0);
              }
            }
            lStack_1a8 = 0;
            local_1d0 = (void *)0x0;
            pvStack_1b8 = (void *)0x0;
            local_1c0 = (void *)0x0;
            pvStack_1c8 = (void *)0x0;
            if (0 < local_1e0._4_4_) {
              iVar34 = 0;
              puVar37 = local_1a0;
              do {
                *(undefined4 *)puVar37 = 0;
                iVar34 = iVar34 + 1;
                puVar37 = (undefined8 *)((long)puVar37 + 4);
              } while (iVar34 < local_1e0._4_4_);
            }
            if (local_198 != &local_190) {
              cv::fastFree(local_198);
            }
            if (uVar18 == 0) {
              if (uVar48 == 0) {
                local_1d0 = (void *)0x0;
                local_1e0 = CONCAT44(local_1e0._4_4_,0x2010000);
                local_1d8 = (Mat *)local_c0;
                cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_1e0,uVar7,1.0,param_1);
              }
              else {
                if (local_5a8 != uVar7) {
                  iVar34 = 1 << (ulong)((uint)(0xfa50L >> (uVar7 << 1)) & 3);
                  local_190 = (long)iVar35 * (long)iVar34;
                  local_188 = (long)iVar34;
                  local_1a0 = &local_1d8;
                  local_198 = &local_190;
                  local_1c0 = (void *)((long)local_4b0 + local_190 * iVar8);
                  local_230 = (void *)0x0;
                  local_240 = CONCAT44(local_240._4_4_,0x2010000);
                  local_1d8 = (Mat *)CONCAT44(iVar35,iVar8);
                  local_1d0 = local_4b0;
                  pvStack_1c8 = local_4b0;
                  local_1b0 = 0;
                  lStack_1a8 = 0;
                  local_1e0 = CONCAT44(2,uVar7 + 0x42ff0000 | 0x4000);
                  uStack_238 = (Mat *)&local_1e0;
                  pvStack_1b8 = local_1c0;
                  cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_240,uVar7,1.0,0.0);
                  if (lStack_1a8 != 0) {
                    piVar42 = (int *)(lStack_1a8 + 0x14);
                    do {
                      cVar12 = '\x01';
                      bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                      if (bVar13) {
                        *piVar42 = *piVar42 + 1;
                        cVar12 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar12 != '\0');
                  }
                  if (lStack_268 == 0) {
LAB_002168d4:
                    if (0 < local_2a0._4_4_) goto LAB_002168f4;
LAB_00216bdc:
                    local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
LAB_00216920:
                    plVar28 = local_198;
                    if (2 < local_1e0._4_4_) goto LAB_00216b84;
                    local_2a0 = CONCAT44(local_1e0._4_4_,(undefined4)local_2a0);
                    pMStack_298 = local_1d8;
                    *local_258 = *local_198;
                    local_258[1] = plVar28[1];
                  }
                  else {
                    piVar42 = (int *)(lStack_268 + 0x14);
                    do {
                      iVar34 = *piVar42;
                      cVar12 = '\x01';
                      bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                      if (bVar13) {
                        *piVar42 = iVar34 + -1;
                        cVar12 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar12 != '\0');
                    if (iVar34 != 1) goto LAB_002168d4;
                    cv::Mat::deallocate((Mat *)&local_2a0);
                    if (local_2a0._4_4_ < 1) goto LAB_00216bdc;
LAB_002168f4:
                    iVar34 = 0;
                    ppMVar40 = local_260;
                    do {
                      *(undefined4 *)ppMVar40 = 0;
                      iVar34 = iVar34 + 1;
                      ppMVar40 = (Mat **)((long)ppMVar40 + 4);
                    } while (iVar34 < local_2a0._4_4_);
                    local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
                    if (local_2a0._4_4_ < 3) goto LAB_00216920;
LAB_00216b84:
                    lStack_268 = 0;
                    pvStack_278 = (void *)0x0;
                    local_280 = (void *)0x0;
                    pvStack_288 = (void *)0x0;
                    local_290 = (void *)0x0;
                    cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_1e0);
                  }
                  pvStack_278 = pvStack_1b8;
                  local_280 = local_1c0;
                  lStack_268 = lStack_1a8;
                  local_270 = local_1b0;
                  pvStack_288 = pvStack_1c8;
                  local_290 = local_1d0;
                  if (lStack_1a8 != 0) {
                    piVar42 = (int *)(lStack_1a8 + 0x14);
                    do {
                      iVar34 = *piVar42;
                      cVar12 = '\x01';
                      bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                      if (bVar13) {
                        *piVar42 = iVar34 + -1;
                        cVar12 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar12 != '\0');
                    if (iVar34 == 1) {
                      cv::Mat::deallocate((Mat *)&local_1e0);
                    }
                  }
                  lStack_1a8 = 0;
                  local_1d0 = (void *)0x0;
                  pvStack_1b8 = (void *)0x0;
                  local_1c0 = (void *)0x0;
                  pvStack_1c8 = (void *)0x0;
                  if (0 < local_1e0._4_4_) {
                    iVar34 = 0;
                    puVar37 = local_1a0;
                    do {
                      *(undefined4 *)puVar37 = 0;
                      iVar34 = iVar34 + 1;
                      puVar37 = (undefined8 *)((long)puVar37 + 4);
                    } while (iVar34 < local_1e0._4_4_);
                  }
                  if (local_198 != &local_190) {
                    cv::fastFree(local_198);
                  }
                }
                local_488 = 0;
                local_498 = 0x1010000;
                local_240 = CONCAT44(local_240._4_4_,0x1010000);
                local_484 = 0;
                local_230 = (void *)0x0;
                local_1d0 = (void *)0x0;
                local_1e0 = CONCAT44(local_1e0._4_4_,0x2010000);
                local_490 = (Mat *)&local_2a0;
                uStack_238 = (Mat *)local_c0;
                local_1d8 = (Mat *)local_c0;
                p_Var39 = (_InputArray *)cv::noArray();
                cv::add((_InputArray *)&local_498,(_InputArray *)&local_240,
                        (_OutputArray *)&local_1e0,p_Var39,-1);
              }
            }
            else {
              if (local_5a8 != uVar7) {
                iVar34 = 1 << (ulong)((uint)(0xfa50L >> (uVar7 << 1)) & 3);
                local_190 = (long)iVar35 * (long)iVar34;
                local_188 = (long)iVar34;
                local_1a0 = &local_1d8;
                local_198 = &local_190;
                local_1c0 = (void *)((long)local_4b0 + local_190 * iVar8);
                local_230 = (void *)0x0;
                local_240 = CONCAT44(local_240._4_4_,0x2010000);
                local_1d8 = (Mat *)CONCAT44(iVar35,iVar8);
                local_1d0 = local_4b0;
                pvStack_1c8 = local_4b0;
                local_1b0 = 0;
                lStack_1a8 = 0;
                local_1e0 = CONCAT44(2,uVar7 + 0x42ff0000 | 0x4000);
                uStack_238 = (Mat *)&local_1e0;
                pvStack_1b8 = local_1c0;
                cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_240,uVar7,1.0,param_1);
                if (lStack_1a8 != 0) {
                  piVar42 = (int *)(lStack_1a8 + 0x14);
                  do {
                    cVar12 = '\x01';
                    bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                    if (bVar13) {
                      *piVar42 = *piVar42 + 1;
                      cVar12 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar12 != '\0');
                }
                if (lStack_268 == 0) {
LAB_00215e24:
                  if (0 < local_2a0._4_4_) goto LAB_00215e44;
LAB_00216b78:
                  local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
LAB_00215e70:
                  plVar28 = local_198;
                  if (2 < local_1e0._4_4_) goto LAB_00216754;
                  local_2a0 = CONCAT44(local_1e0._4_4_,(undefined4)local_2a0);
                  pMStack_298 = local_1d8;
                  *local_258 = *local_198;
                  local_258[1] = plVar28[1];
                }
                else {
                  piVar42 = (int *)(lStack_268 + 0x14);
                  do {
                    iVar34 = *piVar42;
                    cVar12 = '\x01';
                    bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                    if (bVar13) {
                      *piVar42 = iVar34 + -1;
                      cVar12 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar12 != '\0');
                  if (iVar34 != 1) goto LAB_00215e24;
                  cv::Mat::deallocate((Mat *)&local_2a0);
                  if (local_2a0._4_4_ < 1) goto LAB_00216b78;
LAB_00215e44:
                  iVar34 = 0;
                  ppMVar40 = local_260;
                  do {
                    *(undefined4 *)ppMVar40 = 0;
                    iVar34 = iVar34 + 1;
                    ppMVar40 = (Mat **)((long)ppMVar40 + 4);
                  } while (iVar34 < local_2a0._4_4_);
                  local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
                  if (local_2a0._4_4_ < 3) goto LAB_00215e70;
LAB_00216754:
                  lStack_268 = 0;
                  pvStack_278 = (void *)0x0;
                  local_280 = (void *)0x0;
                  pvStack_288 = (void *)0x0;
                  local_290 = (void *)0x0;
                  cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_1e0);
                }
                pvStack_278 = pvStack_1b8;
                local_280 = local_1c0;
                lStack_268 = lStack_1a8;
                local_270 = local_1b0;
                pvStack_288 = pvStack_1c8;
                local_290 = local_1d0;
                if (lStack_1a8 != 0) {
                  piVar42 = (int *)(lStack_1a8 + 0x14);
                  do {
                    iVar34 = *piVar42;
                    cVar12 = '\x01';
                    bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                    if (bVar13) {
                      *piVar42 = iVar34 + -1;
                      cVar12 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar12 != '\0');
                  if (iVar34 == 1) {
                    cv::Mat::deallocate((Mat *)&local_1e0);
                  }
                }
                lStack_1a8 = 0;
                local_1d0 = (void *)0x0;
                pvStack_1b8 = (void *)0x0;
                local_1c0 = (void *)0x0;
                pvStack_1c8 = (void *)0x0;
                if (0 < local_1e0._4_4_) {
                  iVar34 = 0;
                  puVar37 = local_1a0;
                  do {
                    *(undefined4 *)puVar37 = 0;
                    iVar34 = iVar34 + 1;
                    puVar37 = (undefined8 *)((long)puVar37 + 4);
                  } while (iVar34 < local_1e0._4_4_);
                }
                if (local_198 != &local_190) {
                  cv::fastFree(local_198);
                }
              }
              local_1e0 = (ulong)uVar48 << 0x20;
              cv::mixChannels((Mat *)&local_2a0,1,(Mat *)local_c0,1,(int *)&local_1e0,1);
            }
            if (lStack_28 != 0) {
              piVar42 = (int *)(lStack_28 + 0x14);
              do {
                iVar34 = *piVar42;
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = iVar34 + -1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
              if (iVar34 == 1) {
                cv::Mat::deallocate((Mat *)&local_60);
              }
            }
            lStack_28 = 0;
            local_50 = (void *)0x0;
            pvStack_38 = (void *)0x0;
            local_40 = (void *)0x0;
            pvStack_48 = (void *)0x0;
            if (0 < (int)local_60._4_4_) {
              iVar34 = 0;
              puVar37 = local_20;
              do {
                *(undefined4 *)puVar37 = 0;
                iVar34 = iVar34 + 1;
                puVar37 = (undefined8 *)((long)puVar37 + 4);
              } while (iVar34 < (int)local_60._4_4_);
            }
            if (local_18 != &local_10) {
              cv::fastFree(local_18);
            }
            if (lStack_268 != 0) {
              piVar42 = (int *)(lStack_268 + 0x14);
              do {
                iVar34 = *piVar42;
                cVar12 = '\x01';
                bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
                if (bVar13) {
                  *piVar42 = iVar34 + -1;
                  cVar12 = ExclusiveMonitorsStatus();
                }
              } while (cVar12 != '\0');
              if (iVar34 == 1) {
                cv::Mat::deallocate((Mat *)&local_2a0);
              }
            }
            lStack_268 = 0;
            local_290 = (void *)0x0;
            pvStack_278 = (void *)0x0;
            local_280 = (void *)0x0;
            pvStack_288 = (void *)0x0;
            if (0 < local_2a0._4_4_) {
              iVar34 = 0;
              ppMVar40 = local_260;
              do {
                *(undefined4 *)ppMVar40 = 0;
                iVar34 = iVar34 + 1;
                ppMVar40 = (Mat **)((long)ppMVar40 + 4);
              } while (iVar34 < local_2a0._4_4_);
            }
            if (local_258 != &local_250) {
              cv::fastFree(local_258);
            }
            uVar48 = uVar48 + 1;
            iVar47 = iVar47 + iVar32;
          } while (uVar48 != uVar1);
          if (local_88 != 0) {
            piVar42 = (int *)(local_88 + 0x14);
            do {
              iVar35 = *piVar42;
              cVar12 = '\x01';
              bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
              if (bVar13) {
                *piVar42 = iVar35 + -1;
                cVar12 = ExclusiveMonitorsStatus();
              }
            } while (cVar12 != '\0');
            if (iVar35 == 1) {
              cv::Mat::deallocate((Mat *)local_c0);
            }
          }
          local_88 = 0;
          local_c0[4] = 0;
          local_c0[5] = 0;
          local_c0[10] = 0;
          local_c0[0xb] = 0;
          local_c0[8] = 0;
          local_c0[9] = 0;
          local_c0[6] = 0;
          local_c0[7] = 0;
          if (0 < local_c0[1]) {
            iVar35 = 0;
            puVar41 = local_80;
            do {
              *puVar41 = 0;
              iVar35 = iVar35 + 1;
              puVar41 = puVar41 + 1;
            } while (iVar35 < local_c0[1]);
          }
          if (local_78 != auStack_70) {
            cv::fastFree(local_78);
          }
          if (local_2c8 != 0) {
            piVar42 = (int *)(local_2c8 + 0x14);
            do {
              iVar35 = *piVar42;
              cVar12 = '\x01';
              bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
              if (bVar13) {
                *piVar42 = iVar35 + -1;
                cVar12 = ExclusiveMonitorsStatus();
              }
            } while (cVar12 != '\0');
            if (iVar35 == 1) {
              cv::Mat::deallocate((Mat *)&local_300);
            }
          }
          local_2c8 = 0;
          local_2f0 = (void *)0x0;
          local_2d8 = (void *)0x0;
          local_2e0 = (void *)0x0;
          local_2e8 = (void *)0x0;
          if (0 < local_300._4_4_) {
            iVar35 = 0;
            puVar41 = local_2c0;
            do {
              *puVar41 = 0;
              iVar35 = iVar35 + 1;
              puVar41 = puVar41 + 1;
            } while (iVar35 < local_300._4_4_);
          }
          if (local_2b8 != alStack_2b0) {
            cv::fastFree(local_2b8);
          }
          if (local_e8 != 0) {
            piVar42 = (int *)(local_e8 + 0x14);
            do {
              iVar35 = *piVar42;
              cVar12 = '\x01';
              bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
              if (bVar13) {
                *piVar42 = iVar35 + -1;
                cVar12 = ExclusiveMonitorsStatus();
              }
            } while (cVar12 != '\0');
            if (iVar35 == 1) {
              cv::Mat::deallocate((Mat *)&local_120);
            }
          }
          local_e8 = 0;
          local_110 = (void *)0x0;
          local_f8 = (void *)0x0;
          local_100 = (void *)0x0;
          local_108 = (void *)0x0;
          if (0 < local_120._4_4_) {
            iVar35 = 0;
            puVar41 = local_e0;
            do {
              *puVar41 = 0;
              iVar35 = iVar35 + 1;
              puVar41 = puVar41 + 1;
            } while (iVar35 < local_120._4_4_);
          }
          if (local_d8 != alStack_d0) {
            cv::fastFree(local_d8);
          }
          if (local_328 != 0) {
            piVar42 = (int *)(local_328 + 0x14);
            do {
              iVar35 = *piVar42;
              cVar12 = '\x01';
              bVar13 = (bool)ExclusiveMonitorPass(piVar42,0x10);
              if (bVar13) {
                *piVar42 = iVar35 + -1;
                cVar12 = ExclusiveMonitorsStatus();
              }
            } while (cVar12 != '\0');
            if (iVar35 == 1) {
              cv::Mat::deallocate((Mat *)&local_360);
            }
          }
          local_328 = 0;
          local_350 = (void *)0x0;
          local_338 = (void *)0x0;
          local_340 = (void *)0x0;
          local_348 = (void *)0x0;
          if (0 < local_360._4_4_) {
            iVar35 = 0;
            puVar41 = local_320;
            do {
              *puVar41 = 0;
              iVar35 = iVar35 + 1;
              puVar41 = puVar41 + 1;
            } while (iVar35 < local_360._4_4_);
          }
          if (local_318 != alStack_310) {
            cv::fastFree(local_318);
          }
          local_510 = local_510 + 1;
        } while (local_510 != iVar43 * iVar11);
      }
      if (lStack_148 != 0) {
        piVar42 = (int *)(lStack_148 + 0x14);
        do {
          iVar31 = *piVar42;
          cVar12 = '\x01';
          bVar29 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar29) {
            *piVar42 = iVar31 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar31 == 1) {
          cv::Mat::deallocate((Mat *)&local_180);
        }
      }
      lStack_148 = 0;
      local_170 = (void *)0x0;
      pvStack_158 = (void *)0x0;
      local_160 = (void *)0x0;
      pvStack_168 = (void *)0x0;
      if (0 < local_180._4_4_) {
        iVar31 = 0;
        puVar37 = local_140;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar31 = iVar31 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar31 < local_180._4_4_);
      }
      if (local_138 != local_130) {
        cv::fastFree(local_138);
      }
      if (local_388 != 0) {
        piVar42 = (int *)(local_388 + 0x14);
        do {
          iVar31 = *piVar42;
          cVar12 = '\x01';
          bVar29 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar29) {
            *piVar42 = iVar31 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar31 == 1) {
          cv::Mat::deallocate((Mat *)&local_3c0);
        }
      }
      local_388 = 0;
      local_3b0 = 0;
      local_398 = 0;
      local_3a0 = 0;
      local_3a8 = 0;
      if (0 < local_3c0._4_4_) {
        iVar31 = 0;
        puVar37 = local_380;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar31 = iVar31 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar31 < local_3c0._4_4_);
      }
      if (local_378 != &local_370) {
        cv::fastFree(local_378);
      }
      if (local_3e8 != 0) {
        piVar42 = (int *)(local_3e8 + 0x14);
        do {
          iVar31 = *piVar42;
          cVar12 = '\x01';
          bVar29 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar29) {
            *piVar42 = iVar31 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar31 == 1) {
          cv::Mat::deallocate((Mat *)&local_420);
        }
      }
      local_3e8 = 0;
      local_410 = 0;
      local_3f8 = 0;
      local_400 = 0;
      local_408 = 0;
      if (0 < local_420._4_4_) {
        iVar31 = 0;
        puVar37 = local_3e0;
        do {
          *(undefined4 *)puVar37 = 0;
          iVar31 = iVar31 + 1;
          puVar37 = (undefined8 *)((long)puVar37 + 4);
        } while (iVar31 < local_420._4_4_);
      }
      if (local_3d8 != &local_3d0) {
        cv::fastFree(local_3d8);
      }
      if (local_448 != 0) {
        piVar42 = (int *)(local_448 + 0x14);
        do {
          iVar31 = *piVar42;
          cVar12 = '\x01';
          bVar29 = (bool)ExclusiveMonitorPass(piVar42,0x10);
          if (bVar29) {
            *piVar42 = iVar31 + -1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
        if (iVar31 == 1) {
          cv::Mat::deallocate((Mat *)&local_480);
        }
      }
      local_448 = 0;
      local_470 = (void *)0x0;
      local_458 = (void *)0x0;
      local_460 = (void *)0x0;
      local_468 = (void *)0x0;
      if (0 < local_480._4_4_) {
        iVar31 = 0;
        piVar42 = local_440;
        do {
          *piVar42 = 0;
          iVar31 = iVar31 + 1;
          piVar42 = piVar42 + 1;
        } while (iVar31 < local_480._4_4_);
      }
      if (local_438 != &local_430) {
        cv::fastFree(local_438);
      }
      if (local_4b0 != (void *)0x0) {
        operator_delete(local_4b0);
      }
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00217050 (8548 bytes) name=FUN_00217050

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00217050(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,uint param_4,
                 _InputArray *param_5)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  bool bVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  char *pcVar19;
  _InputArray *p_Var20;
  undefined8 *puVar21;
  int *piVar22;
  Mat *pMVar23;
  Mat *extraout_x1;
  _InputArray **pp_Var24;
  Mat *extraout_x1_00;
  undefined4 *puVar25;
  Mat **ppMVar26;
  uint uVar27;
  uint uVar28;
  double dVar29;
  undefined1 auVar30 [16];
  double dVar31;
  int local_d00;
  int local_cfc;
  int local_cf8;
  int local_cf4;
  undefined8 local_cf0;
  undefined8 local_ce8;
  undefined4 local_ce0 [2];
  Mat *local_cd8;
  undefined4 local_cd0;
  undefined4 local_ccc;
  undefined4 local_cc8 [2];
  _InputArray *local_cc0;
  undefined4 local_cb8;
  undefined4 local_cb4;
  undefined4 local_cb0 [2];
  Mat *local_ca8;
  undefined4 local_ca0;
  undefined4 local_c9c;
  undefined4 local_c98 [2];
  Mat *local_c90;
  undefined4 local_c88;
  undefined4 local_c84;
  double local_c80;
  double local_c78;
  double local_c70;
  double dStack_c68;
  double local_c60;
  double local_c58;
  double local_c50;
  double dStack_c48;
  uint local_c40;
  int local_c3c;
  int local_c38;
  int local_c34;
  undefined8 local_c30;
  undefined8 local_c28;
  undefined8 local_c20;
  undefined8 local_c18;
  undefined8 local_c10;
  long local_c08;
  int *local_c00;
  undefined8 *local_bf8;
  undefined8 local_bf0;
  undefined8 local_be8;
  uint local_be0;
  int local_bdc;
  int local_bd8;
  int local_bd4;
  undefined8 local_bd0;
  undefined8 local_bc8;
  undefined8 local_bc0;
  undefined8 local_bb8;
  undefined8 local_bb0;
  long local_ba8;
  int *local_ba0;
  undefined8 *local_b98;
  undefined8 local_b90;
  undefined8 local_b88;
  undefined4 local_b80;
  int local_b7c;
  undefined4 local_b78;
  undefined4 local_b74;
  undefined8 local_b70;
  undefined8 local_b68;
  undefined8 local_b60;
  undefined8 local_b58;
  undefined8 local_b50;
  long local_b48;
  undefined4 *local_b40;
  undefined8 *local_b38;
  undefined8 local_b30;
  undefined8 local_b28;
  uint local_b20;
  int local_b1c;
  undefined4 local_b18;
  undefined4 local_b14;
  undefined8 local_b10;
  undefined8 local_b08;
  undefined8 local_b00;
  undefined8 local_af8;
  undefined8 local_af0;
  long local_ae8;
  undefined4 *local_ae0;
  undefined8 *local_ad8;
  undefined8 local_ad0;
  undefined8 local_ac8;
  undefined8 uStack_ac0;
  undefined8 local_ab8;
  undefined8 local_ab0;
  undefined8 local_aa8;
  undefined8 local_aa0;
  undefined8 local_a98;
  undefined8 local_a90;
  long local_a88;
  undefined8 *local_a80;
  undefined8 *local_a78;
  undefined8 local_a70;
  undefined8 local_a68;
  undefined8 uStack_a60;
  undefined8 local_a58;
  undefined8 local_a50;
  undefined8 local_a48;
  undefined8 local_a40;
  undefined8 local_a38;
  undefined8 local_a30;
  long local_a28;
  undefined8 *local_a20;
  undefined8 *local_a18;
  undefined8 local_a10;
  undefined8 local_a08;
  undefined8 uStack_a00;
  undefined8 local_9f8;
  undefined8 local_9f0;
  undefined8 local_9e8;
  undefined8 local_9e0;
  undefined8 local_9d8;
  undefined8 local_9d0;
  long local_9c8;
  undefined8 *local_9c0;
  undefined8 *local_9b8;
  undefined8 local_9b0;
  undefined8 local_9a8;
  long *local_9a0 [2];
  Mat aMStack_990 [4];
  int local_98c;
  undefined8 local_980;
  undefined8 local_978;
  undefined8 local_970;
  undefined8 local_968;
  long local_958;
  undefined4 *local_950;
  undefined1 *local_948;
  undefined1 auStack_940 [16];
  Mat aMStack_930 [4];
  int local_92c;
  undefined8 local_920;
  undefined8 local_918;
  undefined8 local_910;
  undefined8 local_908;
  long local_8f8;
  undefined4 *local_8f0;
  undefined1 *local_8e8;
  undefined1 auStack_8e0 [16];
  Mat aMStack_8d0 [4];
  int local_8cc;
  undefined8 local_8c0;
  undefined8 local_8b8;
  undefined8 local_8b0;
  undefined8 local_8a8;
  long local_898;
  undefined4 *local_890;
  undefined1 *local_888;
  undefined1 auStack_880 [64];
  long *local_840 [2];
  Mat aMStack_830 [4];
  int local_82c;
  undefined8 local_820;
  undefined8 local_818;
  undefined8 local_810;
  undefined8 local_808;
  long local_7f8;
  undefined4 *local_7f0;
  undefined1 *local_7e8;
  undefined1 auStack_7e0 [16];
  Mat aMStack_7d0 [4];
  int local_7cc;
  undefined8 local_7c0;
  undefined8 local_7b8;
  undefined8 local_7b0;
  undefined8 local_7a8;
  long local_798;
  undefined4 *local_790;
  undefined1 *local_788;
  undefined1 auStack_780 [16];
  Mat aMStack_770 [4];
  int local_76c;
  undefined8 local_760;
  undefined8 local_758;
  undefined8 local_750;
  undefined8 local_748;
  long local_738;
  undefined4 *local_730;
  undefined1 *local_728;
  undefined1 auStack_720 [64];
  long *local_6e0 [2];
  Mat aMStack_6d0 [4];
  int local_6cc;
  undefined8 local_6c0;
  undefined8 local_6b8;
  undefined8 local_6b0;
  undefined8 local_6a8;
  long local_698;
  undefined4 *local_690;
  undefined1 *local_688;
  undefined1 auStack_680 [16];
  Mat aMStack_670 [4];
  int local_66c;
  undefined8 local_660;
  undefined8 local_658;
  undefined8 local_650;
  undefined8 local_648;
  long local_638;
  undefined4 *local_630;
  undefined1 *local_628;
  undefined1 auStack_620 [16];
  Mat aMStack_610 [4];
  int local_60c;
  undefined8 local_600;
  undefined8 local_5f8;
  undefined8 local_5f0;
  undefined8 local_5e8;
  long local_5d8;
  undefined4 *local_5d0;
  undefined1 *local_5c8;
  undefined1 auStack_5c0 [64];
  undefined4 local_580;
  undefined4 uStack_57c;
  Mat *local_578;
  undefined4 local_570;
  int local_56c;
  undefined8 local_560;
  undefined8 local_558;
  undefined8 local_550;
  undefined8 local_548;
  long local_538;
  undefined4 *local_530;
  undefined1 *local_528;
  undefined1 auStack_520 [16];
  Mat aMStack_510 [4];
  int local_50c;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined8 local_4e8;
  long local_4d8;
  undefined4 *local_4d0;
  undefined1 *local_4c8;
  undefined1 auStack_4c0 [16];
  Mat aMStack_4b0 [4];
  int local_4ac;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  long local_478;
  undefined4 *local_470;
  undefined1 *local_468;
  undefined1 auStack_460 [64];
  undefined8 local_420;
  Mat *pMStack_418;
  undefined8 local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  long local_3e8;
  Mat **local_3e0;
  undefined4 **local_3d8;
  undefined4 *local_3d0;
  undefined1 *puStack_3c8;
  undefined1 auStack_3c0 [16];
  Mat aMStack_3b0 [4];
  int local_3ac;
  undefined8 local_3a0;
  undefined8 local_398;
  undefined8 local_390;
  undefined8 local_388;
  long local_378;
  undefined4 *local_370;
  undefined1 *local_368;
  undefined1 auStack_360 [16];
  Mat aMStack_350 [4];
  int local_34c;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  undefined8 local_328;
  long local_318;
  undefined4 *local_310;
  undefined1 *local_308;
  undefined1 auStack_300 [64];
  undefined8 local_2c0;
  Mat *pMStack_2b8;
  undefined8 local_2b0;
  undefined8 local_2a8;
  undefined8 local_2a0;
  undefined8 local_298;
  undefined8 local_290;
  long local_288;
  Mat **local_280;
  undefined4 **local_278;
  undefined4 *local_270;
  undefined1 *puStack_268;
  undefined1 auStack_260 [16];
  Mat aMStack_250 [4];
  int local_24c;
  undefined8 local_240;
  undefined8 local_238;
  undefined8 local_230;
  undefined8 local_228;
  long local_218;
  undefined4 *local_210;
  undefined1 *local_208;
  undefined1 auStack_200 [16];
  Mat aMStack_1f0 [4];
  int local_1ec;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  long local_1b8;
  undefined4 *local_1b0;
  undefined1 *local_1a8;
  undefined1 auStack_1a0 [64];
  undefined8 local_160;
  _InputArray *local_158;
  undefined8 local_150;
  _InputArray *p_Stack_148;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  long local_128;
  _InputArray **local_120;
  undefined4 **local_118;
  undefined4 *local_110;
  undefined1 *local_108;
  undefined1 auStack_100 [16];
  Mat aMStack_f0 [4];
  int local_ec;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  long local_b8;
  undefined4 *local_b0;
  undefined1 *local_a8;
  undefined1 auStack_a0 [16];
  Mat aMStack_90 [4];
  int local_8c;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  long local_58;
  undefined4 *local_50;
  undefined1 *local_48;
  undefined1 auStack_40 [64];
  
  uVar15 = cv::_InputArray::type(param_1,-1);
  if (5 < param_4) {
    local_160 = (long *)0x0;
    local_158 = (_InputArray *)0x0;
    pcVar19 = (char *)cv::String::allocate((String *)&local_160,0x37);
    cVar2 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890[0x36];
    uVar10 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._52_2_;
    uVar9 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._40_8_;
    uVar8 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._32_8_;
    uVar7 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._24_8_;
    uVar6 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._16_8_;
    uVar5 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._8_8_;
    uVar4 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._0_8_;
    *(undefined4 *)(pcVar19 + 0x30) = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._48_4_;
    *(undefined2 *)(pcVar19 + 0x34) = uVar10;
    pcVar19[0x36] = cVar2;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    *(undefined8 *)(pcVar19 + 0x10) = uVar6;
    *(undefined8 *)(pcVar19 + 0x18) = uVar7;
    *(undefined8 *)(pcVar19 + 0x20) = uVar8;
    *(undefined8 *)(pcVar19 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_160,
              "void cv::matchTemplateMask(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x335);
    cv::String::deallocate((String *)&local_160);
  }
  bVar14 = (uVar15 & 7) != 0;
  if (((((uVar15 & 7) != 5) && (bVar14)) ||
      (uVar18 = cv::_InputArray::type(param_2,-1), uVar15 != uVar18)) ||
     (iVar16 = cv::_InputArray::dims(param_1,-1), 2 < iVar16)) {
    local_160 = (long *)0x0;
    local_158 = (_InputArray *)0x0;
    pcVar19 = (char *)cv::String::allocate((String *)&local_160,0x50);
    uVar13 = s__depth____CV_8U____depth____CV_3_0045f8c8._72_8_;
    uVar12 = s__depth____CV_8U____depth____CV_3_0045f8c8._64_8_;
    uVar11 = s__depth____CV_8U____depth____CV_3_0045f8c8._56_8_;
    uVar9 = s__depth____CV_8U____depth____CV_3_0045f8c8._48_8_;
    uVar8 = s__depth____CV_8U____depth____CV_3_0045f8c8._40_8_;
    uVar7 = s__depth____CV_8U____depth____CV_3_0045f8c8._32_8_;
    uVar6 = s__depth____CV_8U____depth____CV_3_0045f8c8._24_8_;
    uVar5 = s__depth____CV_8U____depth____CV_3_0045f8c8._16_8_;
    uVar4 = s__depth____CV_8U____depth____CV_3_0045f8c8._8_8_;
    *(undefined8 *)pcVar19 = s__depth____CV_8U____depth____CV_3_0045f8c8._0_8_;
    *(undefined8 *)(pcVar19 + 8) = uVar4;
    *(undefined8 *)(pcVar19 + 0x10) = uVar5;
    *(undefined8 *)(pcVar19 + 0x18) = uVar6;
    *(undefined8 *)(pcVar19 + 0x20) = uVar7;
    *(undefined8 *)(pcVar19 + 0x28) = uVar8;
    *(undefined8 *)(pcVar19 + 0x30) = uVar9;
    *(undefined8 *)(pcVar19 + 0x38) = uVar11;
    *(undefined8 *)(pcVar19 + 0x40) = uVar12;
    *(undefined8 *)(pcVar19 + 0x48) = uVar13;
    cv::error(-0xd7,(String *)&local_160,
              "void cv::matchTemplateMask(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x336);
    cv::String::deallocate((String *)&local_160);
  }
  iVar16 = cv::_InputArray::kind(param_1);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_1 + 8);
    local_c00 = &local_c38;
    local_bf8 = &local_bf0;
    local_c40 = *(uint *)pMVar23;
    local_c3c = *(int *)(pMVar23 + 4);
    local_c38 = *(int *)(pMVar23 + 8);
    local_c34 = *(int *)(pMVar23 + 0xc);
    local_c30 = *(undefined8 *)(pMVar23 + 0x10);
    local_c28 = *(undefined8 *)(pMVar23 + 0x18);
    local_c20 = *(undefined8 *)(pMVar23 + 0x20);
    local_c18 = *(undefined8 *)(pMVar23 + 0x28);
    local_c10 = *(undefined8 *)(pMVar23 + 0x30);
    local_c08 = *(long *)(pMVar23 + 0x38);
    local_be8 = 0;
    local_bf0 = 0;
    if (local_c08 != 0) {
      piVar22 = (int *)(local_c08 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = *piVar22 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_bf0 = **(undefined8 **)(pMVar23 + 0x48);
      local_be8 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_c3c = 0;
      cv::Mat::copySize((Mat *)&local_c40,pMVar23);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  iVar16 = cv::_InputArray::kind(param_2);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_2 + 8);
    local_ba0 = &local_bd8;
    local_b98 = &local_b90;
    local_be0 = *(uint *)pMVar23;
    local_bdc = *(int *)(pMVar23 + 4);
    local_bd8 = *(int *)(pMVar23 + 8);
    local_bd4 = *(int *)(pMVar23 + 0xc);
    local_bd0 = *(undefined8 *)(pMVar23 + 0x10);
    local_bc8 = *(undefined8 *)(pMVar23 + 0x18);
    local_bc0 = *(undefined8 *)(pMVar23 + 0x20);
    local_bb8 = *(undefined8 *)(pMVar23 + 0x28);
    local_bb0 = *(undefined8 *)(pMVar23 + 0x30);
    local_ba8 = *(long *)(pMVar23 + 0x38);
    local_b88 = 0;
    local_b90 = 0;
    if (local_ba8 != 0) {
      piVar22 = (int *)(local_ba8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = *piVar22 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_b90 = **(undefined8 **)(pMVar23 + 0x48);
      local_b88 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_bdc = 0;
      cv::Mat::copySize((Mat *)&local_be0,pMVar23);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  iVar16 = cv::_InputArray::kind(param_5);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_5 + 8);
    local_b40 = &local_b78;
    local_b38 = &local_b30;
    local_b80 = *(undefined4 *)pMVar23;
    local_b7c = *(int *)(pMVar23 + 4);
    local_b78 = *(undefined4 *)(pMVar23 + 8);
    local_b74 = *(undefined4 *)(pMVar23 + 0xc);
    local_b70 = *(undefined8 *)(pMVar23 + 0x10);
    local_b68 = *(undefined8 *)(pMVar23 + 0x18);
    local_b60 = *(undefined8 *)(pMVar23 + 0x20);
    local_b58 = *(undefined8 *)(pMVar23 + 0x28);
    local_b50 = *(undefined8 *)(pMVar23 + 0x30);
    local_b48 = *(long *)(pMVar23 + 0x38);
    local_b28 = 0;
    local_b30 = 0;
    if (local_b48 != 0) {
      piVar22 = (int *)(local_b48 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = *piVar22 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (2 < *(int *)(pMVar23 + 4)) {
      local_b7c = 0;
      cv::Mat::copySize((Mat *)&local_b80,pMVar23);
      goto LAB_002171a0;
    }
    local_b30 = **(undefined8 **)(pMVar23 + 0x48);
    uVar18 = local_be0 & 7;
    local_b28 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    if (bVar14) goto LAB_002171b0;
LAB_002181d0:
    uVar28 = local_be0;
    uVar27 = local_c40;
    dVar31 = DAT_002196e8;
    local_150 = (long *)0x0;
    local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
    local_158 = (_InputArray *)&local_c40;
    cv::Mat::convertTo((Mat *)&local_c40,(_OutputArray *)&local_160,(uVar15 & 0xff8) + 5,
                       DAT_002196e8,0.0);
    if (uVar18 == 0) {
LAB_00218af0:
      local_150 = (long *)0x0;
      local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
      local_158 = (_InputArray *)&local_be0;
      cv::Mat::convertTo((Mat *)&local_be0,(_OutputArray *)&local_160,(uVar28 & 0xff8) + 5,dVar31,
                         0.0);
      if (bVar14) goto LAB_002171b8;
    }
    local_158 = (_InputArray *)0x0;
    local_160 = (long *)0x0;
    p_Stack_148 = (_InputArray *)0x0;
    local_150 = (long *)0x0;
    local_570 = 0;
    local_56c = 0;
    local_580 = 0x1010000;
    local_420 = (long *)CONCAT44(local_420._4_4_,0xc1020006);
    local_410 = 0x400000001;
    local_2b0 = 0;
    local_2c0 = (double)CONCAT44(local_2c0._4_4_,0x2010000);
    local_578 = (Mat *)&local_b80;
    pMStack_418 = (Mat *)&local_160;
    pMStack_2b8 = (Mat *)&local_b80;
    cv::compare((_InputArray *)&local_580,(_InputArray *)&local_420,(_OutputArray *)&local_2c0,5);
    local_150 = (long *)0x0;
    local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
    local_158 = (_InputArray *)&local_b80;
    cv::Mat::convertTo((Mat *)&local_b80,(_OutputArray *)&local_160,(uVar27 & 0xff8) + 5,dVar31,0.0)
    ;
  }
  else {
    cv::_InputArray::getMat_((int)param_5);
LAB_002171a0:
    uVar18 = local_be0 & 7;
    if (!bVar14) goto LAB_002181d0;
LAB_002171b0:
    dVar31 = DAT_002196e8;
    uVar28 = local_be0;
    uVar27 = local_c40;
    if (uVar18 == 0) goto LAB_00218af0;
  }
LAB_002171b8:
  iVar16 = (local_c34 - local_bd4) + 1;
  iVar1 = (local_c38 - local_bd8) + 1;
  local_160 = (long *)CONCAT44(iVar1,iVar16);
  cv::_OutputArray::create((_OutputArray *)param_3,(Mat *)&local_160,5,0xffffffff,0,0);
  iVar17 = cv::_InputArray::kind(param_3);
  if (iVar17 == 0x10000) {
    pMVar23 = *(Mat **)(param_3 + 8);
    local_ae0 = &local_b18;
    local_ad8 = &local_ad0;
    local_b20 = *(uint *)pMVar23;
    local_b1c = *(int *)(pMVar23 + 4);
    local_b18 = *(undefined4 *)(pMVar23 + 8);
    local_b14 = *(undefined4 *)(pMVar23 + 0xc);
    local_b10 = *(undefined8 *)(pMVar23 + 0x10);
    local_b08 = *(undefined8 *)(pMVar23 + 0x18);
    local_b00 = *(undefined8 *)(pMVar23 + 0x20);
    local_af8 = *(undefined8 *)(pMVar23 + 0x28);
    local_af0 = *(undefined8 *)(pMVar23 + 0x30);
    local_ae8 = *(long *)(pMVar23 + 0x38);
    local_ac8 = 0;
    local_ad0 = 0;
    if (local_ae8 != 0) {
      piVar22 = (int *)(local_ae8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = *piVar22 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_ad0 = **(undefined8 **)(pMVar23 + 0x48);
      local_ac8 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_b1c = 0;
      cv::Mat::copySize((Mat *)&local_b20,pMVar23);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_3);
  }
  local_150 = (long *)0x0;
  local_160 = (long *)CONCAT44(local_160._4_4_,0x1010000);
  local_158 = (_InputArray *)&local_c40;
  cv::Mat::mul((_InputArray *)&local_c40,1.0);
  local_a78 = &local_a70;
  local_aa8 = 0;
  local_aa0 = 0;
  local_a80 = &local_ab8;
  uStack_ac0 = DAT_002196f0;
  local_a98 = 0;
  local_a90 = 0;
  local_a88 = 0;
  local_ab8 = 0;
  local_ab0 = 0;
  local_a68 = 0;
  local_a70 = 0;
  (**(code **)(*local_9a0[0] + 0x18))(local_9a0[0],local_9a0,(Mat *)&uStack_ac0,0xffffffff);
  if (local_898 != 0) {
    piVar22 = (int *)(local_898 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_8d0);
    }
  }
  local_898 = 0;
  local_8c0 = 0;
  local_8a8 = 0;
  local_8b0 = 0;
  local_8b8 = 0;
  if (0 < local_8cc) {
    iVar17 = 0;
    do {
      *local_890 = 0;
      iVar17 = iVar17 + 1;
      local_890 = local_890 + 1;
    } while (iVar17 < local_8cc);
  }
  if (local_888 != auStack_880) {
    cv::fastFree(local_888);
  }
  if (local_8f8 != 0) {
    piVar22 = (int *)(local_8f8 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_930);
    }
  }
  local_8f8 = 0;
  local_920 = 0;
  local_908 = 0;
  local_910 = 0;
  local_918 = 0;
  if (0 < local_92c) {
    iVar17 = 0;
    do {
      *local_8f0 = 0;
      iVar17 = iVar17 + 1;
      local_8f0 = local_8f0 + 1;
    } while (iVar17 < local_92c);
  }
  if (local_8e8 != auStack_8e0) {
    cv::fastFree(local_8e8);
  }
  if (local_958 != 0) {
    piVar22 = (int *)(local_958 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_990);
    }
  }
  local_958 = 0;
  local_980 = 0;
  local_968 = 0;
  local_970 = 0;
  local_978 = 0;
  if (0 < local_98c) {
    iVar17 = 0;
    do {
      *local_950 = 0;
      iVar17 = iVar17 + 1;
      local_950 = local_950 + 1;
    } while (iVar17 < local_98c);
  }
  if (local_948 != auStack_940) {
    cv::fastFree(local_948);
  }
  local_150 = (long *)0x0;
  local_160 = (long *)CONCAT44(local_160._4_4_,0x1010000);
  local_158 = (_InputArray *)&local_b80;
  cv::Mat::mul((_InputArray *)&local_b80,1.0);
  local_a18 = &local_a10;
  local_a48 = 0;
  local_a40 = 0;
  local_a38 = 0;
  local_a30 = 0;
  local_a20 = &local_a58;
  uStack_a60 = DAT_002196f0;
  local_a28 = 0;
  local_a50 = 0;
  local_a58 = 0;
  local_a08 = 0;
  local_a10 = 0;
  (**(code **)(*local_840[0] + 0x18))(local_840[0],local_840,(Mat *)&uStack_a60,0xffffffff);
  if (local_738 != 0) {
    piVar22 = (int *)(local_738 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_770);
    }
  }
  local_738 = 0;
  local_760 = 0;
  local_748 = 0;
  local_750 = 0;
  local_758 = 0;
  if (0 < local_76c) {
    iVar17 = 0;
    do {
      *local_730 = 0;
      iVar17 = iVar17 + 1;
      local_730 = local_730 + 1;
    } while (iVar17 < local_76c);
  }
  if (local_728 != auStack_720) {
    cv::fastFree(local_728);
  }
  if (local_798 != 0) {
    piVar22 = (int *)(local_798 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_7d0);
    }
  }
  local_798 = 0;
  local_7c0 = 0;
  local_7a8 = 0;
  local_7b0 = 0;
  local_7b8 = 0;
  if (0 < local_7cc) {
    iVar17 = 0;
    do {
      *local_790 = 0;
      iVar17 = iVar17 + 1;
      local_790 = local_790 + 1;
    } while (iVar17 < local_7cc);
  }
  if (local_788 != auStack_780) {
    cv::fastFree(local_788);
  }
  if (local_7f8 != 0) {
    piVar22 = (int *)(local_7f8 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_830);
    }
  }
  local_7f8 = 0;
  local_820 = 0;
  local_808 = 0;
  local_810 = 0;
  local_818 = 0;
  if (0 < local_82c) {
    iVar17 = 0;
    do {
      *local_7f0 = 0;
      iVar17 = iVar17 + 1;
      local_7f0 = local_7f0 + 1;
    } while (iVar17 < local_82c);
  }
  if (local_7e8 != auStack_7e0) {
    cv::fastFree(local_7e8);
  }
  local_150 = (long *)0x0;
  local_160 = (long *)CONCAT44(local_160._4_4_,0x1010000);
  local_158 = (_InputArray *)&local_b80;
  cv::Mat::mul((_InputArray *)&local_be0,1.0);
  local_9b8 = &local_9b0;
  local_9e8 = 0;
  local_9e0 = 0;
  local_9d8 = 0;
  local_9d0 = 0;
  local_9c0 = &local_9f8;
  uStack_a00 = DAT_002196f0;
  local_9c8 = 0;
  local_9f0 = 0;
  local_9f8 = 0;
  local_9a8 = 0;
  local_9b0 = 0;
  (**(code **)(*local_6e0[0] + 0x18))(local_6e0[0],local_6e0,(Mat *)&uStack_a00,0xffffffff);
  if (local_5d8 != 0) {
    piVar22 = (int *)(local_5d8 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_610);
    }
  }
  local_5d8 = 0;
  local_600 = 0;
  local_5e8 = 0;
  local_5f0 = 0;
  local_5f8 = 0;
  if (0 < local_60c) {
    iVar17 = 0;
    do {
      *local_5d0 = 0;
      iVar17 = iVar17 + 1;
      local_5d0 = local_5d0 + 1;
    } while (iVar17 < local_60c);
  }
  if (local_5c8 != auStack_5c0) {
    cv::fastFree(local_5c8);
  }
  if (local_638 != 0) {
    piVar22 = (int *)(local_638 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_670);
    }
  }
  local_638 = 0;
  local_660 = 0;
  local_648 = 0;
  local_650 = 0;
  local_658 = 0;
  if (0 < local_66c) {
    iVar17 = 0;
    do {
      *local_630 = 0;
      iVar17 = iVar17 + 1;
      local_630 = local_630 + 1;
    } while (iVar17 < local_66c);
  }
  if (local_628 != auStack_620) {
    cv::fastFree(local_628);
  }
  if (local_698 != 0) {
    piVar22 = (int *)(local_698 + 0x14);
    do {
      iVar17 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate(aMStack_6d0);
    }
  }
  local_698 = 0;
  local_6c0 = 0;
  local_6a8 = 0;
  local_6b0 = 0;
  local_6b8 = 0;
  if (0 < local_6cc) {
    iVar17 = 0;
    do {
      *local_690 = 0;
      iVar17 = iVar17 + 1;
      local_690 = local_690 + 1;
    } while (iVar17 < local_6cc);
  }
  if (local_688 != auStack_680) {
    cv::fastFree(local_688);
  }
  pMStack_2b8 = (Mat *)&local_c80;
  local_158 = (_InputArray *)&local_c60;
  local_c78 = 0.0;
  local_c80 = 0.0;
  local_c58 = 0.0;
  local_c60 = 0.0;
  dStack_c68 = 0.0;
  local_c70 = 0.0;
  local_410 = 0;
  dStack_c48 = 0.0;
  local_c50 = 0.0;
  local_2c0 = (double)CONCAT44(local_2c0._4_4_,0xc2020006);
  local_420 = (long *)CONCAT44(local_420._4_4_,0x1010000);
  local_2b0._0_4_ = 1;
  local_2b0._4_4_ = 4;
  local_160 = (long *)CONCAT44(local_160._4_4_,0xc2020006);
  local_150 = (long *)0x400000001;
  pMStack_418 = (Mat *)&uStack_a00;
  p_Var20 = (_InputArray *)cv::noArray();
  cv::meanStdDev((_InputArray *)&local_420,(_OutputArray *)&local_2c0,(_OutputArray *)&local_160,
                 p_Var20);
  dVar31 = (double)local_bd8 * (double)local_bd4 *
           (local_c58 * local_c58 + local_c60 * local_c60 + local_c50 * local_c50 +
            dStack_c48 * dStack_c48 +
           local_c78 * local_c78 + local_c80 * local_c80 + local_c70 * local_c70 +
           dStack_c68 * dStack_c68);
  if (param_4 == 0) {
    local_2b0 = 0;
    local_2c0 = (double)CONCAT44(local_2c0._4_4_,0x1010000);
    pMStack_2b8 = (Mat *)&uStack_a60;
    cv::Mat::mul((_InputArray *)&local_be0,1.0);
    local_118 = &local_110;
    local_120 = &local_158;
    local_160 = DAT_002196f0;
    local_158 = (_InputArray *)0x0;
    local_150 = (long *)0x0;
    p_Stack_148 = (_InputArray *)0x0;
    local_140 = 0;
    local_138 = 0;
    local_130 = 0;
    local_128 = 0;
    local_108 = (undefined1 *)0x0;
    local_110 = (undefined4 *)0x0;
    (**(code **)(*(long *)CONCAT44(uStack_57c,local_580) + 0x18))
              ((long *)CONCAT44(uStack_57c,local_580),&local_580,(Mat *)&local_160,0xffffffff);
    if (local_478 != 0) {
      piVar22 = (int *)(local_478 + 0x14);
      do {
        iVar17 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate(aMStack_4b0);
      }
    }
    local_478 = 0;
    local_4a0 = 0;
    local_488 = 0;
    local_490 = 0;
    local_498 = 0;
    if (0 < local_4ac) {
      iVar17 = 0;
      do {
        iVar17 = iVar17 + 1;
        *local_470 = 0;
        local_470 = local_470 + 1;
      } while (iVar17 < local_4ac);
    }
    if (local_468 != auStack_460) {
      cv::fastFree(local_468);
    }
    if (local_4d8 != 0) {
      piVar22 = (int *)(local_4d8 + 0x14);
      do {
        iVar17 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate(aMStack_510);
      }
    }
    local_4d8 = 0;
    local_500 = 0;
    local_4e8 = 0;
    local_4f0 = 0;
    local_4f8 = 0;
    if (0 < local_50c) {
      iVar17 = 0;
      do {
        iVar17 = iVar17 + 1;
        *local_4d0 = 0;
        local_4d0 = local_4d0 + 1;
      } while (iVar17 < local_50c);
    }
    if (local_4c8 != auStack_4c0) {
      cv::fastFree(local_4c8);
    }
    if (local_538 != 0) {
      piVar22 = (int *)(local_538 + 0x14);
      do {
        iVar17 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate((Mat *)&local_570);
      }
    }
    local_538 = 0;
    local_560 = 0;
    local_548 = 0;
    local_550 = 0;
    local_558 = 0;
    if (0 < local_56c) {
      iVar17 = 0;
      do {
        iVar17 = iVar17 + 1;
        *local_530 = 0;
        local_530 = local_530 + 1;
      } while (iVar17 < local_56c);
    }
    if (local_528 != auStack_520) {
      cv::fastFree(local_528);
    }
    local_278 = &local_270;
    local_2b0 = 0;
    local_280 = &pMStack_2b8;
    puStack_268 = (undefined1 *)0x0;
    local_270 = (undefined4 *)0x0;
    local_2a8 = 0;
    pMStack_2b8 = _UNK_00219708;
    local_2c0 = _DAT_00219700;
    local_2a0 = 0;
    local_298 = 0;
    local_290 = 0;
    local_288 = 0;
    local_d00 = iVar1;
    local_cfc = iVar16;
    cv::Mat::create((Mat *)&local_2c0,2,&local_d00,5);
    local_580 = *(undefined4 *)((long)local_280 + 4);
    local_420 = (long *)0x0;
    FUN_00214600(ZEXT816(0),(_InputArray *)&local_c40,(Mat *)&local_160,(Mat *)&local_2c0,&local_580
                 ,(uint)local_2c0 & 0xfff,(_InputArray *)&local_420);
    local_580 = local_ae0[1];
    local_420 = (long *)0x0;
    FUN_00214600(ZEXT816(0),(Mat *)&uStack_ac0,(_InputArray *)&local_b80,(Mat *)&local_b20,
                 &local_580,local_b20 & 0xfff,(_InputArray *)&local_420);
    cv::operator*((cv *)&local_2c0,extraout_x1,2.0);
    (**(code **)(*local_420 + 0x38))(local_420,(_InputArray *)&local_420,(Mat *)&local_b20);
    if (local_318 != 0) {
      piVar22 = (int *)(local_318 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_350);
      }
    }
    local_318 = 0;
    local_340 = 0;
    local_328 = 0;
    local_330 = 0;
    local_338 = 0;
    if (0 < local_34c) {
      iVar16 = 0;
      do {
        *local_310 = 0;
        iVar16 = iVar16 + 1;
        local_310 = local_310 + 1;
      } while (iVar16 < local_34c);
    }
    if (local_308 != auStack_300) {
      cv::fastFree(local_308);
    }
    if (local_378 != 0) {
      piVar22 = (int *)(local_378 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_3b0);
      }
    }
    local_378 = 0;
    local_3a0 = 0;
    local_388 = 0;
    local_390 = 0;
    local_398 = 0;
    if (0 < local_3ac) {
      iVar16 = 0;
      do {
        *local_370 = 0;
        iVar16 = iVar16 + 1;
        local_370 = local_370 + 1;
      } while (iVar16 < local_3ac);
    }
    if (local_368 != auStack_360) {
      cv::fastFree(local_368);
    }
    if (local_3d8 != (undefined4 **)0x0) {
      piVar22 = (int *)((long)local_3d8 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_410);
      }
    }
    local_3d8 = (undefined4 **)0x0;
    local_400 = 0;
    local_3e8 = 0;
    local_3f0 = 0;
    local_3f8 = 0;
    if (0 < local_410._4_4_) {
      iVar16 = 0;
      puVar25 = local_3d0;
      do {
        *puVar25 = 0;
        iVar16 = iVar16 + 1;
        puVar25 = puVar25 + 1;
      } while (iVar16 < local_410._4_4_);
    }
    if (puStack_3c8 != auStack_3c0) {
      cv::fastFree(puStack_3c8);
    }
    local_cd0 = 0;
    local_cc8[0] = 0xc1020006;
    local_cb8 = 1;
    local_ccc = 0;
    local_cb4 = 4;
    local_ce0[0] = 0x1010000;
    local_ca0 = 0;
    local_c9c = 0;
    local_cb0[0] = 0x2010000;
    pMStack_418 = (Mat *)0x0;
    local_410 = 0;
    local_408 = 0;
    local_cd8 = (Mat *)&local_b20;
    local_cc0 = (_InputArray *)&local_420;
    local_ca8 = (Mat *)&local_b20;
    local_420 = (long *)dVar31;
    p_Var20 = (_InputArray *)cv::noArray();
    cv::add((_InputArray *)local_ce0,(_InputArray *)local_cc8,(_OutputArray *)local_cb0,p_Var20,-1);
    if (local_288 != 0) {
      piVar22 = (int *)(local_288 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_2c0);
      }
    }
    local_288 = 0;
    local_2b0._0_4_ = 0;
    local_2b0._4_4_ = 0;
    local_298 = 0;
    local_2a0 = 0;
    local_2a8 = 0;
    if (0 < local_2c0._4_4_) {
      iVar16 = 0;
      ppMVar26 = local_280;
      do {
        *(undefined4 *)ppMVar26 = 0;
        iVar16 = iVar16 + 1;
        ppMVar26 = (Mat **)((long)ppMVar26 + 4);
      } while (iVar16 < local_2c0._4_4_);
    }
    if (local_278 != &local_270) {
      cv::fastFree(local_278);
    }
    if (local_128 != 0) {
      piVar22 = (int *)(local_128 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_160);
      }
    }
    local_128 = 0;
    local_150 = (long *)0x0;
    local_138 = 0;
    local_140 = 0;
    p_Stack_148 = (_InputArray *)0x0;
    if (0 < local_160._4_4_) {
      iVar16 = 0;
      pp_Var24 = local_120;
      do {
        *(undefined4 *)pp_Var24 = 0;
        iVar16 = iVar16 + 1;
        pp_Var24 = (_InputArray **)((long)pp_Var24 + 4);
      } while (iVar16 < local_160._4_4_);
    }
    if (local_118 != &local_110) {
      cv::fastFree(local_118);
    }
  }
  else if (param_4 == 3) {
    if (dVar31 < DAT_00219710) {
      auVar30 = NEON_fmov(0x3ff0000000000000,8);
      local_158 = auVar30._8_8_;
      local_160 = auVar30._0_8_;
      local_150 = local_160;
      p_Stack_148 = local_158;
      cv::Mat::operator=((Mat *)&local_b20,(Scalar_ *)&local_160);
      if (local_9c8 != 0) {
        piVar22 = (int *)(local_9c8 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&uStack_a00);
        }
      }
      local_9c8 = 0;
      local_9f0 = 0;
      local_9d8 = 0;
      local_9e0 = 0;
      local_9e8 = 0;
      if (0 < uStack_a00._4_4_) {
        iVar16 = 0;
        puVar21 = local_9c0;
        do {
          *(undefined4 *)puVar21 = 0;
          iVar16 = iVar16 + 1;
          puVar21 = (undefined8 *)((long)puVar21 + 4);
        } while (iVar16 < uStack_a00._4_4_);
      }
      if (local_9b8 != &local_9b0) {
        cv::fastFree(local_9b8);
      }
      if (local_a28 != 0) {
        piVar22 = (int *)(local_a28 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&uStack_a60);
        }
      }
      local_a28 = 0;
      local_a50 = 0;
      local_a38 = 0;
      local_a40 = 0;
      local_a48 = 0;
      if (0 < uStack_a60._4_4_) {
        iVar16 = 0;
        puVar21 = local_a20;
        do {
          *(undefined4 *)puVar21 = 0;
          iVar16 = iVar16 + 1;
          puVar21 = (undefined8 *)((long)puVar21 + 4);
        } while (iVar16 < uStack_a60._4_4_);
      }
      if (local_a18 != &local_a10) {
        cv::fastFree(local_a18);
      }
      if (local_a88 != 0) {
        piVar22 = (int *)(local_a88 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&uStack_ac0);
        }
      }
      local_a88 = 0;
      local_ab0 = 0;
      local_a98 = 0;
      local_aa0 = 0;
      local_aa8 = 0;
      if (0 < uStack_ac0._4_4_) {
        iVar16 = 0;
        puVar21 = local_a80;
        do {
          *(undefined4 *)puVar21 = 0;
          iVar16 = iVar16 + 1;
          puVar21 = (undefined8 *)((long)puVar21 + 4);
        } while (iVar16 < uStack_ac0._4_4_);
      }
      if (local_a78 != &local_a70) {
        cv::fastFree(local_a78);
      }
      if (local_ae8 != 0) {
        piVar22 = (int *)(local_ae8 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&local_b20);
        }
      }
      local_ae8 = 0;
      local_b10 = 0;
      local_af8 = 0;
      local_b00 = 0;
      local_b08 = 0;
      if (0 < local_b1c) {
        iVar16 = 0;
        puVar25 = local_ae0;
        do {
          *puVar25 = 0;
          iVar16 = iVar16 + 1;
          puVar25 = puVar25 + 1;
        } while (iVar16 < local_b1c);
      }
      if (local_ad8 != &local_ad0) {
        cv::fastFree(local_ad8);
      }
      if (local_b48 != 0) {
        piVar22 = (int *)(local_b48 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&local_b80);
        }
      }
      local_b48 = 0;
      local_b70 = 0;
      local_b58 = 0;
      local_b60 = 0;
      local_b68 = 0;
      if (0 < local_b7c) {
        iVar16 = 0;
        puVar25 = local_b40;
        do {
          *puVar25 = 0;
          iVar16 = iVar16 + 1;
          puVar25 = puVar25 + 1;
        } while (iVar16 < local_b7c);
      }
      if (local_b38 != &local_b30) {
        cv::fastFree(local_b38);
      }
      if (local_ba8 != 0) {
        piVar22 = (int *)(local_ba8 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&local_be0);
        }
      }
      local_ba8 = 0;
      local_bd0 = 0;
      local_bb8 = 0;
      local_bc0 = 0;
      local_bc8 = 0;
      if (0 < local_bdc) {
        iVar16 = 0;
        piVar22 = local_ba0;
        do {
          *piVar22 = 0;
          iVar16 = iVar16 + 1;
          piVar22 = piVar22 + 1;
        } while (iVar16 < local_bdc);
      }
      if (local_b98 != &local_b90) {
        cv::fastFree(local_b98);
      }
      if (local_c08 != 0) {
        piVar22 = (int *)(local_c08 + 0x14);
        do {
          iVar16 = *piVar22;
          cVar2 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar14) {
            *piVar22 = iVar16 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar16 == 1) {
          cv::Mat::deallocate((Mat *)&local_c40);
        }
      }
      if (0 < local_c3c) {
        iVar16 = 0;
        piVar22 = local_c00;
        do {
          *piVar22 = 0;
          iVar16 = iVar16 + 1;
          piVar22 = piVar22 + 1;
        } while (iVar16 < local_c3c);
      }
      goto LAB_00217c74;
    }
    local_3d8 = &local_3d0;
    local_410 = 0;
    local_3e0 = &pMStack_418;
    puStack_3c8 = (undefined1 *)0x0;
    local_3d0 = (undefined4 *)0x0;
    local_408 = 0;
    pMStack_418 = _UNK_00219708;
    local_420 = (long *)_DAT_00219700;
    local_400 = 0;
    local_3f8 = 0;
    local_3f0 = 0;
    local_3e8 = 0;
    local_cf8 = iVar1;
    local_cf4 = iVar16;
    cv::Mat::create((Mat *)&local_420,2,&local_cf8,5);
    local_2c0._4_4_ = *(int *)local_3e0;
    local_2c0._0_4_ = *(undefined4 *)((long)local_3e0 + 4);
    local_160 = (long *)0x0;
    FUN_00214600(ZEXT816(0),(Mat *)&uStack_ac0,(Mat *)&uStack_a60,(_InputArray *)&local_420,
                 (Mat *)&local_2c0,(uint)local_420 & 0xfff,(Mat *)&local_160);
    local_2c0._4_4_ = *local_ae0;
    local_2c0._0_4_ = local_ae0[1];
    local_160 = (long *)0x0;
    FUN_00214600(ZEXT816(0),(_InputArray *)&local_c40,(Mat *)&uStack_a00,(Mat *)&local_b20,
                 (Mat *)&local_2c0,local_b20 & 0xfff,(Mat *)&local_160);
    local_2c0 = (double)CONCAT44(local_2c0._4_4_,0x1010000);
    local_2b0._0_4_ = 0;
    local_2b0._4_4_ = 0;
    local_150 = (long *)0x0;
    local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
    pMStack_2b8 = (Mat *)&local_420;
    local_158 = (_InputArray *)&local_420;
    cv::sqrt((_InputArray *)&local_2c0,(_OutputArray *)&local_160);
    cv::operator/((cv *)&local_420,1.0,extraout_x1_00);
    local_570 = 0;
    local_56c = 0;
    local_580 = 0xc1060000;
    local_578 = (Mat *)&local_2c0;
    cv::Mat::mul((_InputArray *)&local_b20,1.0);
    (**(code **)(*local_160 + 0x18))(local_160,(Mat *)&local_160,(Mat *)&local_b20,0xffffffff);
    if (local_58 != 0) {
      piVar22 = (int *)(local_58 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_90);
      }
    }
    local_58 = 0;
    local_80 = 0;
    local_68 = 0;
    local_70 = 0;
    local_78 = 0;
    if (0 < local_8c) {
      iVar16 = 0;
      do {
        *local_50 = 0;
        iVar16 = iVar16 + 1;
        local_50 = local_50 + 1;
      } while (iVar16 < local_8c);
    }
    if (local_48 != auStack_40) {
      cv::fastFree(local_48);
    }
    if (local_b8 != 0) {
      piVar22 = (int *)(local_b8 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_f0);
      }
    }
    local_b8 = 0;
    local_e0 = 0;
    local_c8 = 0;
    local_d0 = 0;
    local_d8 = 0;
    if (0 < local_ec) {
      iVar16 = 0;
      do {
        *local_b0 = 0;
        iVar16 = iVar16 + 1;
        local_b0 = local_b0 + 1;
      } while (iVar16 < local_ec);
    }
    if (local_a8 != auStack_a0) {
      cv::fastFree(local_a8);
    }
    if (local_118 != (undefined4 **)0x0) {
      piVar22 = (int *)((long)local_118 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_150);
      }
    }
    local_118 = (undefined4 **)0x0;
    local_140 = 0;
    local_128 = 0;
    local_130 = 0;
    local_138 = 0;
    if (0 < local_150._4_4_) {
      iVar16 = 0;
      puVar25 = local_110;
      do {
        *puVar25 = 0;
        iVar16 = iVar16 + 1;
        puVar25 = puVar25 + 1;
      } while (iVar16 < local_150._4_4_);
    }
    if (local_108 != auStack_100) {
      cv::fastFree(local_108);
    }
    if (local_1b8 != 0) {
      piVar22 = (int *)(local_1b8 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_1f0);
      }
    }
    local_1b8 = 0;
    local_1e0 = 0;
    local_1c8 = 0;
    local_1d0 = 0;
    local_1d8 = 0;
    if (0 < local_1ec) {
      iVar16 = 0;
      do {
        *local_1b0 = 0;
        iVar16 = iVar16 + 1;
        local_1b0 = local_1b0 + 1;
      } while (iVar16 < local_1ec);
    }
    if (local_1a8 != auStack_1a0) {
      cv::fastFree(local_1a8);
    }
    if (local_218 != 0) {
      piVar22 = (int *)(local_218 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate(aMStack_250);
      }
    }
    local_218 = 0;
    local_240 = 0;
    local_228 = 0;
    local_230 = 0;
    local_238 = 0;
    if (0 < local_24c) {
      iVar16 = 0;
      do {
        *local_210 = 0;
        iVar16 = iVar16 + 1;
        local_210 = local_210 + 1;
      } while (iVar16 < local_24c);
    }
    if (local_208 != auStack_200) {
      cv::fastFree(local_208);
    }
    if (local_278 != (undefined4 **)0x0) {
      piVar22 = (int *)((long)local_278 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_2b0);
      }
    }
    local_278 = (undefined4 **)0x0;
    local_2a0 = 0;
    local_288 = 0;
    local_290 = 0;
    local_298 = 0;
    if (0 < local_2b0._4_4_) {
      iVar16 = 0;
      puVar25 = local_270;
      do {
        *puVar25 = 0;
        iVar16 = iVar16 + 1;
        puVar25 = puVar25 + 1;
      } while (iVar16 < local_2b0._4_4_);
    }
    if (puStack_268 != auStack_260) {
      cv::fastFree(puStack_268);
    }
    dVar29 = SQRT(dVar31);
    if (NAN(dVar29)) {
      dVar29 = sqrt(dVar31);
    }
    local_c88 = 0;
    local_c84 = 0;
    local_c98[0] = 0x2010000;
    local_c90 = (Mat *)&local_b20;
    cv::Mat::convertTo((Mat *)&local_b20,(_OutputArray *)local_c98,-1,1.0 / dVar29,0.0);
    if (local_3e8 != 0) {
      piVar22 = (int *)(local_3e8 + 0x14);
      do {
        iVar16 = *piVar22;
        cVar2 = '\x01';
        bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar14) {
          *piVar22 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        cv::Mat::deallocate((Mat *)&local_420);
      }
    }
    local_3e8 = 0;
    local_410 = 0;
    local_3f8 = 0;
    local_400 = 0;
    local_408 = 0;
    if (0 < local_420._4_4_) {
      iVar16 = 0;
      ppMVar26 = local_3e0;
      do {
        *(undefined4 *)ppMVar26 = 0;
        iVar16 = iVar16 + 1;
        ppMVar26 = (Mat **)((long)ppMVar26 + 4);
      } while (iVar16 < local_420._4_4_);
    }
    if (local_3d8 != &local_3d0) {
      cv::fastFree(local_3d8);
    }
  }
  else {
    local_cf0 = 0;
    local_ce8 = 0;
    cv::String::allocate((String *)&local_cf0,0);
    cv::error(-0xd5,(String *)&local_cf0,
              "void cv::matchTemplateMask(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
              ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x37e);
    cv::String::deallocate((String *)&local_cf0);
  }
  if (local_9c8 != 0) {
    piVar22 = (int *)(local_9c8 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&uStack_a00);
    }
  }
  local_9c8 = 0;
  local_9f0 = 0;
  local_9d8 = 0;
  local_9e0 = 0;
  local_9e8 = 0;
  if (0 < uStack_a00._4_4_) {
    iVar16 = 0;
    puVar21 = local_9c0;
    do {
      *(undefined4 *)puVar21 = 0;
      iVar16 = iVar16 + 1;
      puVar21 = (undefined8 *)((long)puVar21 + 4);
    } while (iVar16 < uStack_a00._4_4_);
  }
  if (local_9b8 != &local_9b0) {
    cv::fastFree(local_9b8);
  }
  if (local_a28 != 0) {
    piVar22 = (int *)(local_a28 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&uStack_a60);
    }
  }
  local_a28 = 0;
  local_a50 = 0;
  local_a38 = 0;
  local_a40 = 0;
  local_a48 = 0;
  if (0 < uStack_a60._4_4_) {
    iVar16 = 0;
    puVar21 = local_a20;
    do {
      *(undefined4 *)puVar21 = 0;
      iVar16 = iVar16 + 1;
      puVar21 = (undefined8 *)((long)puVar21 + 4);
    } while (iVar16 < uStack_a60._4_4_);
  }
  if (local_a18 != &local_a10) {
    cv::fastFree(local_a18);
  }
  if (local_a88 != 0) {
    piVar22 = (int *)(local_a88 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&uStack_ac0);
    }
  }
  local_a88 = 0;
  local_ab0 = 0;
  local_a98 = 0;
  local_aa0 = 0;
  local_aa8 = 0;
  if (0 < uStack_ac0._4_4_) {
    iVar16 = 0;
    puVar21 = local_a80;
    do {
      *(undefined4 *)puVar21 = 0;
      iVar16 = iVar16 + 1;
      puVar21 = (undefined8 *)((long)puVar21 + 4);
    } while (iVar16 < uStack_ac0._4_4_);
  }
  if (local_a78 != &local_a70) {
    cv::fastFree(local_a78);
  }
  if (local_ae8 != 0) {
    piVar22 = (int *)(local_ae8 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_b20);
    }
  }
  local_ae8 = 0;
  local_b10 = 0;
  local_af8 = 0;
  local_b00 = 0;
  local_b08 = 0;
  if (0 < local_b1c) {
    iVar16 = 0;
    puVar25 = local_ae0;
    do {
      *puVar25 = 0;
      iVar16 = iVar16 + 1;
      puVar25 = puVar25 + 1;
    } while (iVar16 < local_b1c);
  }
  if (local_ad8 != &local_ad0) {
    cv::fastFree(local_ad8);
  }
  if (local_b48 != 0) {
    piVar22 = (int *)(local_b48 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_b80);
    }
  }
  local_b48 = 0;
  local_b70 = 0;
  local_b58 = 0;
  local_b60 = 0;
  local_b68 = 0;
  if (0 < local_b7c) {
    iVar16 = 0;
    puVar25 = local_b40;
    do {
      *puVar25 = 0;
      iVar16 = iVar16 + 1;
      puVar25 = puVar25 + 1;
    } while (iVar16 < local_b7c);
  }
  if (local_b38 != &local_b30) {
    cv::fastFree(local_b38);
  }
  if (local_ba8 != 0) {
    piVar22 = (int *)(local_ba8 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_be0);
    }
  }
  local_ba8 = 0;
  local_bd0 = 0;
  local_bb8 = 0;
  local_bc0 = 0;
  local_bc8 = 0;
  if (0 < local_bdc) {
    iVar16 = 0;
    piVar22 = local_ba0;
    do {
      *piVar22 = 0;
      iVar16 = iVar16 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar16 < local_bdc);
  }
  if (local_b98 != &local_b90) {
    cv::fastFree(local_b98);
  }
  if (local_c08 != 0) {
    piVar22 = (int *)(local_c08 + 0x14);
    do {
      iVar16 = *piVar22;
      cVar2 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar14) {
        *piVar22 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      cv::Mat::deallocate((Mat *)&local_c40);
    }
  }
  if (0 < local_c3c) {
    iVar16 = 0;
    piVar22 = local_c00;
    do {
      *piVar22 = 0;
      iVar16 = iVar16 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar16 < local_c3c);
  }
LAB_00217c74:
  local_c08 = 0;
  local_c18 = 0;
  local_c20 = 0;
  local_c28 = 0;
  local_c30 = 0;
  if (local_bf8 != &local_bf0) {
    cv::fastFree(local_bf8);
  }
  return;
}


==================================================================

### FUNC 00219720 (5476 bytes) name=matchTemplate

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::matchTemplate(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int,
   cv::_InputArray const&) */

void cv::matchTemplate(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                      _InputArray *param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined2 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  bool bVar20;
  bool bVar21;
  char cVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  uint uVar26;
  int iVar27;
  ulong uVar28;
  char *pcVar29;
  void *__dest;
  _InputArray *p_Var30;
  long lVar31;
  undefined8 *puVar32;
  int *piVar33;
  Mat *pMVar34;
  long lVar35;
  _InputArray *p_Var36;
  long lVar37;
  float *pfVar38;
  long lVar39;
  long lVar40;
  long lVar41;
  long lVar42;
  ulong uVar43;
  long lVar44;
  long lVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  double dVar49;
  undefined1 auVar50 [16];
  double dVar51;
  double dVar52;
  double __x;
  float fVar53;
  double dVar54;
  double dVar55;
  int local_360;
  long local_350;
  long local_348;
  long local_340;
  undefined4 local_2b8 [2];
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  double local_2a0;
  Mat *local_298;
  double local_290;
  double dStack_288;
  double local_280;
  double local_278;
  double local_270;
  double dStack_268;
  undefined4 local_260;
  undefined4 uStack_25c;
  Mat *local_258;
  undefined4 local_250;
  undefined4 uStack_24c;
  double dStack_248;
  uint local_240;
  int iStack_23c;
  int iStack_238;
  int iStack_234;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  int *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  uint local_1e0;
  int local_1dc;
  int local_1d8;
  int local_1d4;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  int *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  undefined8 uStack_178;
  long local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined8 *local_140;
  ulong *local_138;
  ulong local_130 [2];
  undefined8 local_120;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  ulong *local_d8;
  ulong local_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined4 local_b0;
  undefined4 uStack_ac;
  Mat *pMStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  cVar22 = _InputArray::empty(param_5);
  if (cVar22 == '\0') {
    FUN_00217050(param_1,param_2,param_3,param_4,param_5);
    return;
  }
  uVar28 = _InputArray::type(param_1,-1);
  uVar26 = (uint)uVar28 & 7;
  uVar1 = ((uint)((uVar28 & 0xffffffff) >> 3) & 0x1ff) + 1;
  if ((uint)param_4 < 6) {
    if (uVar26 == 5) goto LAB_0021a4a0;
LAB_002197ec:
    if ((uVar28 & 7) == 0) goto LAB_0021a4a0;
LAB_002197f0:
    local_60 = 0;
    local_58 = 0;
    pcVar29 = (char *)String::allocate((String *)&local_60,0x50);
    uVar19 = s__depth____CV_8U____depth____CV_3_0045f8c8._72_8_;
    uVar18 = s__depth____CV_8U____depth____CV_3_0045f8c8._64_8_;
    uVar17 = s__depth____CV_8U____depth____CV_3_0045f8c8._56_8_;
    uVar15 = s__depth____CV_8U____depth____CV_3_0045f8c8._48_8_;
    uVar14 = s__depth____CV_8U____depth____CV_3_0045f8c8._40_8_;
    uVar13 = s__depth____CV_8U____depth____CV_3_0045f8c8._32_8_;
    uVar12 = s__depth____CV_8U____depth____CV_3_0045f8c8._24_8_;
    uVar11 = s__depth____CV_8U____depth____CV_3_0045f8c8._16_8_;
    uVar10 = s__depth____CV_8U____depth____CV_3_0045f8c8._8_8_;
    *(undefined8 *)pcVar29 = s__depth____CV_8U____depth____CV_3_0045f8c8._0_8_;
    *(undefined8 *)(pcVar29 + 8) = uVar10;
    *(undefined8 *)(pcVar29 + 0x10) = uVar11;
    *(undefined8 *)(pcVar29 + 0x18) = uVar12;
    *(undefined8 *)(pcVar29 + 0x20) = uVar13;
    *(undefined8 *)(pcVar29 + 0x28) = uVar14;
    *(undefined8 *)(pcVar29 + 0x30) = uVar15;
    *(undefined8 *)(pcVar29 + 0x38) = uVar17;
    *(undefined8 *)(pcVar29 + 0x40) = uVar18;
    *(undefined8 *)(pcVar29 + 0x48) = uVar19;
    error(-0xd7,(String *)&local_60,
          "void cv::matchTemplate(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x38e);
    String::deallocate((String *)&local_60);
  }
  else {
    local_60 = 0;
    local_58 = 0;
    pcVar29 = (char *)String::allocate((String *)&local_60,0x37);
    cVar3 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890[0x36];
    uVar16 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._52_2_;
    uVar15 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._40_8_;
    uVar14 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._32_8_;
    uVar13 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._24_8_;
    uVar12 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._16_8_;
    uVar11 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._8_8_;
    uVar10 = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._0_8_;
    *(undefined4 *)(pcVar29 + 0x30) = s_CV_TM_SQDIFF_<__method_&&_method_0045f890._48_4_;
    *(undefined2 *)(pcVar29 + 0x34) = uVar16;
    pcVar29[0x36] = cVar3;
    *(undefined8 *)pcVar29 = uVar10;
    *(undefined8 *)(pcVar29 + 8) = uVar11;
    *(undefined8 *)(pcVar29 + 0x10) = uVar12;
    *(undefined8 *)(pcVar29 + 0x18) = uVar13;
    *(undefined8 *)(pcVar29 + 0x20) = uVar14;
    *(undefined8 *)(pcVar29 + 0x28) = uVar15;
    error(-0xd7,(String *)&local_60,
          "void cv::matchTemplate(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x38d);
    String::deallocate((String *)&local_60);
    if (uVar26 != 5) goto LAB_002197ec;
LAB_0021a4a0:
    uVar26 = _InputArray::type(param_2,-1);
    if (((uint)uVar28 != uVar26) || (iVar27 = _InputArray::dims(param_1,-1), 2 < iVar27))
    goto LAB_002197f0;
  }
  iVar25 = (int)param_1;
  _InputArray::size(iVar25);
  iVar27 = local_180._4_4_;
  iVar23 = (int)param_2;
  _InputArray::size(iVar23);
  if (iVar27 < local_120._4_4_) {
LAB_002198ac:
    _InputArray::size(iVar25);
    iVar27 = local_180._4_4_;
    _InputArray::size(iVar23);
    if (local_120._4_4_ < iVar27) {
LAB_002198e8:
      local_60 = 0;
      local_58 = 0;
      __dest = (void *)String::allocate((String *)&local_60,0x56);
      memcpy(__dest,&DAT_0045f920,0x56);
      error(-0xd7,(String *)&local_60,
            "void cv::matchTemplate(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::InputArray)"
            ,"/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x393);
      String::deallocate((String *)&local_60);
    }
    else {
      _InputArray::size(iVar25);
      iVar27 = (uint)local_c0;
      _InputArray::size(iVar23);
      if ((int)(uint)local_60 < iVar27) goto LAB_002198e8;
    }
    bVar21 = true;
    bVar20 = bVar21;
    if (1 < param_4 - 2U) goto LAB_0021994c;
LAB_0021a7ac:
    cVar22 = '\0';
    iVar27 = 0;
  }
  else {
    _InputArray::size(iVar25);
    iVar27 = (uint)local_c0;
    _InputArray::size(iVar23);
    bVar21 = false;
    if (iVar27 < (int)(uint)local_60) goto LAB_002198ac;
    bVar20 = false;
    if (param_4 - 2U < 2) goto LAB_0021a7ac;
LAB_0021994c:
    bVar21 = bVar20;
    iVar27 = 2;
    if (param_4 - 4U < 2) {
      iVar27 = 1;
      cVar22 = '\0';
    }
  }
  bVar20 = param_4 == 5;
  iVar24 = _InputArray::kind(param_1);
  if (iVar24 == 0x10000) {
    pMVar34 = *(Mat **)(param_1 + 8);
    local_200 = &iStack_238;
    local_1f8 = &local_1f0;
    local_240 = *(uint *)pMVar34;
    iStack_23c = *(int *)(pMVar34 + 4);
    iStack_238 = *(int *)(pMVar34 + 8);
    iStack_234 = *(int *)(pMVar34 + 0xc);
    local_230 = *(undefined8 *)(pMVar34 + 0x10);
    uStack_228 = *(undefined8 *)(pMVar34 + 0x18);
    local_220 = *(undefined8 *)(pMVar34 + 0x20);
    uStack_218 = *(undefined8 *)(pMVar34 + 0x28);
    local_210 = *(undefined8 *)(pMVar34 + 0x30);
    lStack_208 = *(long *)(pMVar34 + 0x38);
    local_1e8 = 0;
    local_1f0 = 0;
    if (lStack_208 != 0) {
      piVar33 = (int *)(lStack_208 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar4) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_1f0 = **(undefined8 **)(pMVar34 + 0x48);
      local_1e8 = (*(undefined8 **)(pMVar34 + 0x48))[1];
    }
    else {
      iStack_23c = 0;
      Mat::copySize((Mat *)&local_240,pMVar34);
    }
  }
  else {
    _InputArray::getMat_(iVar25);
  }
  iVar25 = _InputArray::kind(param_2);
  if (iVar25 == 0x10000) {
    pMVar34 = *(Mat **)(param_2 + 8);
    local_1a0 = &local_1d8;
    local_198 = &local_190;
    local_1e0 = *(uint *)pMVar34;
    local_1dc = *(int *)(pMVar34 + 4);
    local_1d8 = *(int *)(pMVar34 + 8);
    local_1d4 = *(int *)(pMVar34 + 0xc);
    local_1d0 = *(undefined8 *)(pMVar34 + 0x10);
    uStack_1c8 = *(undefined8 *)(pMVar34 + 0x18);
    local_1c0 = *(undefined8 *)(pMVar34 + 0x20);
    uStack_1b8 = *(undefined8 *)(pMVar34 + 0x28);
    local_1b0 = *(undefined8 *)(pMVar34 + 0x30);
    lStack_1a8 = *(long *)(pMVar34 + 0x38);
    local_188 = 0;
    local_190 = 0;
    if (lStack_1a8 != 0) {
      piVar33 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar4) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_190 = **(undefined8 **)(pMVar34 + 0x48);
      local_188 = (*(undefined8 **)(pMVar34 + 0x48))[1];
    }
    else {
      local_1dc = 0;
      Mat::copySize((Mat *)&local_1e0,pMVar34);
    }
  }
  else {
    _InputArray::getMat_(iVar23);
  }
  if (bVar21) {
    local_c0 = CONCAT44(iStack_23c,local_240);
    uStack_b8 = (Mat *)CONCAT44(iStack_234,iStack_238);
    local_78 = &local_70;
    local_80 = &uStack_b8;
    local_b0 = (undefined4)local_230;
    uStack_ac = (undefined4)((ulong)local_230 >> 0x20);
    pMStack_a8 = (Mat *)uStack_228;
    local_a0 = local_220;
    uStack_98 = uStack_218;
    local_90 = local_210;
    lStack_88 = lStack_208;
    uStack_68 = 0;
    local_70 = 0;
    if (lStack_208 != 0) {
      piVar33 = (int *)(lStack_208 + 0x14);
      do {
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (iStack_23c < 3) {
      local_70 = *local_1f8;
      uStack_68 = local_1f8[1];
    }
    else {
      local_c0 = (ulong)local_240;
      Mat::copySize((Mat *)&local_c0,(Mat *)&local_240);
    }
    if (lStack_1a8 != 0) {
      piVar33 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_208 != 0) {
      piVar33 = (int *)(lStack_208 + 0x14);
      do {
        iVar25 = *piVar33;
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar25 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    puVar32 = local_198;
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (iStack_23c < 1) {
LAB_00219ae4:
      local_240 = local_1e0;
      if (2 < local_1dc) goto LAB_0021a7b8;
      iStack_234 = local_1d4;
      iStack_238 = local_1d8;
      iStack_23c = local_1dc;
      *local_1f8 = *local_198;
      local_1f8[1] = puVar32[1];
    }
    else {
      iVar25 = 0;
      piVar33 = local_200;
      do {
        *piVar33 = 0;
        iVar25 = iVar25 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar25 < iStack_23c);
      if (iStack_23c < 3) goto LAB_00219ae4;
LAB_0021a7b8:
      local_240 = local_1e0;
      Mat::copySize((Mat *)&local_240,(Mat *)&local_1e0);
    }
    uStack_218 = uStack_1b8;
    local_220 = local_1c0;
    lStack_208 = lStack_1a8;
    local_210 = local_1b0;
    uStack_228 = uStack_1c8;
    local_230 = local_1d0;
    if (lStack_88 != 0) {
      piVar33 = (int *)(lStack_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar33 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar25 = *piVar33;
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar25 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar32 = local_78;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1dc < 1) {
LAB_00219bdc:
      local_1e0 = (uint)local_c0;
      if (2 < local_c0._4_4_) goto LAB_0021a7c8;
      local_1d8 = (int)uStack_b8;
      local_1d4 = uStack_b8._4_4_;
      local_1dc = local_c0._4_4_;
      *local_198 = *local_78;
      local_198[1] = puVar32[1];
    }
    else {
      iVar25 = 0;
      piVar33 = local_1a0;
      do {
        *piVar33 = 0;
        iVar25 = iVar25 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar25 < local_1dc);
      if (local_1dc < 3) goto LAB_00219bdc;
LAB_0021a7c8:
      local_1e0 = (uint)local_c0;
      Mat::copySize((Mat *)&local_1e0,(Mat *)&local_c0);
    }
    local_1d0 = CONCAT44(uStack_ac,local_b0);
    uStack_1b8 = uStack_98;
    local_1c0 = local_a0;
    lStack_1a8 = lStack_88;
    local_1b0 = local_90;
    uStack_1c8 = pMStack_a8;
    if (lStack_88 != 0) {
      piVar33 = (int *)(lStack_88 + 0x14);
      do {
        iVar25 = *piVar33;
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar25 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_ac = 0;
    uStack_98 = 0;
    local_a0 = 0;
    pMStack_a8 = (Mat *)0x0;
    if (0 < local_c0._4_4_) {
      iVar25 = 0;
      puVar32 = local_80;
      do {
        *(undefined4 *)puVar32 = 0;
        iVar25 = iVar25 + 1;
        puVar32 = (undefined8 *)((long)puVar32 + 4);
      } while (iVar25 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
  }
  local_60 = CONCAT44((iStack_238 - local_1d8) + 1,(iStack_234 - local_1d4) + 1);
  _OutputArray::create(param_3,(Mat *)&local_60,5,0xffffffff,0,0);
  iVar25 = _InputArray::kind((_InputArray *)param_3);
  if (iVar25 == 0x10000) {
    pMVar34 = *(Mat **)(param_3 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar26 = *(uint *)pMVar34;
    local_50 = *(long *)(pMVar34 + 0x10);
    local_60 = *(ulong *)pMVar34;
    local_58 = *(undefined8 *)(pMVar34 + 8);
    local_48 = *(undefined8 *)(pMVar34 + 0x18);
    local_40 = *(undefined8 *)(pMVar34 + 0x20);
    local_38 = *(undefined8 *)(pMVar34 + 0x28);
    local_30 = *(undefined8 *)(pMVar34 + 0x30);
    local_28 = *(long *)(pMVar34 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar33 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = *piVar33 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_10 = **(long **)(pMVar34 + 0x48);
      local_8 = (*(long **)(pMVar34 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar26;
      Mat::copySize((Mat *)&local_60,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_120 = CONCAT44(*(undefined4 *)local_20,*(undefined4 *)((long)local_20 + 4));
  local_c0 = 0;
  FUN_00214600(ZEXT816(0),(Mat *)&local_240,(Mat *)&local_1e0,(Mat *)&local_60,(Mat *)&local_120,
               (uint)local_60 & 0xfff,(cv *)&local_c0);
  if (param_4 == 2) {
LAB_0021a9c4:
    if (local_28 != 0) {
      piVar33 = (int *)(local_28 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar27 = 0;
      puVar32 = local_20;
      do {
        *(undefined4 *)puVar32 = 0;
        iVar27 = iVar27 + 1;
        puVar32 = (undefined8 *)((long)puVar32 + 4);
      } while (iVar27 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (lStack_1a8 != 0) {
      piVar33 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (0 < local_1dc) {
      iVar27 = 0;
      piVar33 = local_1a0;
      do {
        *piVar33 = 0;
        iVar27 = iVar27 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar27 < local_1dc);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
    if (lStack_208 != 0) {
      piVar33 = (int *)(lStack_208 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    if (0 < iStack_23c) {
      iVar27 = 0;
      piVar33 = local_200;
      do {
        *piVar33 = 0;
        iVar27 = iVar27 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar27 < iStack_23c);
    }
  }
  else {
    local_298 = (Mat *)0x0;
    local_2a0 = 0.0;
    local_d8 = local_d0;
    local_278 = 0.0;
    local_280 = 0.0;
    uStack_118 = _UNK_0021add8;
    local_120 = _DAT_0021add0;
    local_138 = local_130;
    local_d0[1] = 0;
    local_d0[0] = 0;
    local_140 = &uStack_178;
    uStack_178 = _UNK_0021add8;
    local_180 = _DAT_0021add0;
    local_130[1] = 0;
    local_130[0] = 0;
    local_110 = 0;
    dStack_288 = 0.0;
    local_290 = 0.0;
    local_108 = 0;
    dStack_268 = 0.0;
    local_270 = 0.0;
    local_e0 = &uStack_118;
    local_170 = 0;
    local_168 = 0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    local_100 = 0;
    local_f8 = 0;
    local_f0 = 0;
    local_e8 = 0;
    __x = 1.0 / ((double)local_1d8 * (double)local_1d4);
    if (param_4 == 4) {
      p_Var36 = (_InputArray *)0x6;
      local_250 = 0;
      local_260 = 0x1010000;
      uStack_24c = 0;
      local_b0 = 0;
      uStack_ac = 0;
      local_c0._0_4_ = 0x2010000;
      local_258 = (Mat *)&local_240;
      uStack_b8 = (Mat *)&local_180;
      integral((_InputArray *)&local_260,(_OutputArray *)&local_c0,6);
      local_b0 = 0;
      uStack_ac = 0;
      local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
      uStack_b8 = (Mat *)&local_1e0;
      p_Var30 = (_InputArray *)noArray();
      mean((cv *)&local_c0,p_Var30,p_Var36);
      lVar44 = 0;
      dVar55 = 0.0;
      dVar54 = 0.0;
      lVar41 = (long)local_1d8;
      uVar28 = -(ulong)(uVar1 * local_1d4 >> 0x1f) & 0xfffffff800000000 |
               (ulong)(uVar1 * local_1d4) << 3;
      local_340 = 0;
      local_2a0 = (double)CONCAT44(uStack_25c,local_260);
      local_298 = local_258;
      local_290 = (double)CONCAT44(uStack_24c,local_250);
      dStack_288 = dStack_248;
      local_348 = 0;
      local_350 = 0;
    }
    else {
      local_c0._0_4_ = 0x2010000;
      local_260 = 0x2010000;
      local_2a8 = 0;
      local_2a4 = 0;
      local_2b8[0] = 0x1010000;
      local_250 = 0;
      uStack_24c = 0;
      local_b0 = 0;
      uStack_ac = 0;
      local_2b0 = (Mat *)&local_240;
      local_258 = (Mat *)&local_180;
      uStack_b8 = (Mat *)&local_120;
      integral((_InputArray *)local_2b8,(_OutputArray *)&local_260,(_OutputArray *)&local_c0,6,-1);
      local_2a8 = 0;
      local_2a4 = 0;
      local_2b8[0] = 0x1010000;
      local_260 = 0xc2020006;
      local_250 = 1;
      uStack_24c = 4;
      local_c0 = CONCAT44(local_c0._4_4_,0xc2020006);
      local_b0 = 1;
      uStack_ac = 4;
      local_2b0 = (Mat *)&local_1e0;
      local_258 = (Mat *)&local_2a0;
      uStack_b8 = (Mat *)&local_280;
      p_Var30 = (_InputArray *)noArray();
      meanStdDev((_InputArray *)local_2b8,(_OutputArray *)&local_260,(_OutputArray *)&local_c0,
                 p_Var30);
      dVar51 = local_278 * local_278 + local_280 * local_280 + local_270 * local_270 +
               dStack_268 * dStack_268;
      if ((dVar51 < DAT_0021ade0) && (bVar20)) {
        auVar50 = NEON_fmov(0x3ff0000000000000,8);
        uStack_b8 = auVar50._8_8_;
        local_c0 = auVar50._0_8_;
        local_b0 = auVar50._0_4_;
        uStack_ac = auVar50._4_4_;
        pMStack_a8 = uStack_b8;
        Mat::operator=((Mat *)&local_60,(Scalar_ *)&local_c0);
        if (local_e8 != 0) {
          piVar33 = (int *)(local_e8 + 0x14);
          do {
            iVar27 = *piVar33;
            cVar22 = '\x01';
            bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
            if (bVar21) {
              *piVar33 = iVar27 + -1;
              cVar22 = ExclusiveMonitorsStatus();
            }
          } while (cVar22 != '\0');
          if (iVar27 == 1) {
            Mat::deallocate((Mat *)&local_120);
          }
        }
        local_e8 = 0;
        local_f8 = 0;
        local_110 = 0;
        local_100 = 0;
        local_108 = 0;
        if (0 < local_120._4_4_) {
          iVar27 = 0;
          puVar32 = local_e0;
          do {
            iVar27 = iVar27 + 1;
            *(undefined4 *)puVar32 = 0;
            puVar32 = (undefined8 *)((long)puVar32 + 4);
          } while (iVar27 < local_120._4_4_);
        }
        if (local_d8 != local_d0) {
          fastFree(local_d8);
        }
        if (local_148 != 0) {
          piVar33 = (int *)(local_148 + 0x14);
          do {
            iVar27 = *piVar33;
            cVar22 = '\x01';
            bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
            if (bVar21) {
              *piVar33 = iVar27 + -1;
              cVar22 = ExclusiveMonitorsStatus();
            }
          } while (cVar22 != '\0');
          if (iVar27 == 1) {
            Mat::deallocate((Mat *)&local_180);
          }
        }
        local_148 = 0;
        local_170 = 0;
        local_158 = 0;
        local_160 = 0;
        local_168 = 0;
        if (0 < local_180._4_4_) {
          iVar27 = 0;
          puVar32 = local_140;
          do {
            *(undefined4 *)puVar32 = 0;
            iVar27 = iVar27 + 1;
            puVar32 = (undefined8 *)((long)puVar32 + 4);
          } while (iVar27 < local_180._4_4_);
        }
        if (local_138 != local_130) {
          fastFree(local_138);
        }
        goto LAB_0021a9c4;
      }
      dVar55 = dVar51 + local_2a0 * local_2a0 + (double)local_298 * (double)local_298 +
               local_290 * local_290 + dStack_288 * dStack_288;
      if (iVar27 != 1) {
        local_298 = (Mat *)0x0;
        local_2a0 = 0.0;
        dStack_288 = 0.0;
        local_290 = 0.0;
        dVar51 = dVar55;
      }
      dVar54 = SQRT(dVar51);
      dVar55 = dVar55 / __x;
      if (NAN(dVar54)) {
        dVar54 = ::sqrt(dVar51);
      }
      dVar51 = SQRT(__x);
      if (NAN(dVar51)) {
        dVar51 = ::sqrt(__x);
      }
      dVar54 = dVar54 / dVar51;
      lVar41 = (long)local_1d8;
      local_350 = local_110;
      local_340 = local_110 + lVar41 * local_d0[0];
      uVar28 = -(ulong)(uVar1 * local_1d4 >> 0x1f) & 0xfffffff800000000 |
               (ulong)(uVar1 * local_1d4) << 3;
      local_348 = local_110 + uVar28;
      lVar44 = local_340 + uVar28;
    }
    lVar41 = local_170 + lVar41 * local_130[0];
    if (local_170 == 0) {
      uVar43 = 0;
    }
    else {
      uVar43 = local_130[0] >> 3;
    }
    if (local_110 == 0) {
      local_360 = 0;
    }
    else {
      local_360 = (int)(local_d0[0] >> 3);
    }
    if (0 < (int)local_58) {
      lVar39 = 0;
      uVar43 = -(uVar43 >> 0x1f & 1) & 0xfffffff800000000 | (uVar43 & 0xffffffff) << 3;
      lVar2 = (ulong)uVar1 * 8;
      lVar40 = 0;
      bVar21 = (param_4 & 0xfffffffdU) == 1;
      lVar45 = local_170;
      iVar25 = (int)local_58;
      iVar23 = local_58._4_4_;
      do {
        if (0 < iVar23) {
          lVar46 = lVar44 + lVar39;
          lVar48 = local_348 + lVar39;
          lVar31 = local_350 + lVar39;
          lVar47 = local_340 + lVar39;
          iVar25 = 0;
          lVar35 = lVar45;
          lVar37 = lVar41;
          pfVar38 = (float *)(local_50 + lVar40 * *local_18);
          do {
            dVar49 = 0.0;
            dVar51 = (double)*pfVar38;
            if (iVar27 == 1) {
              lVar42 = 0;
              do {
                lVar5 = lVar42 * 8;
                lVar6 = lVar42 * 8;
                lVar7 = lVar42 * 8;
                lVar8 = lVar42 * 8;
                lVar9 = lVar42 * 8;
                lVar42 = lVar42 + 1;
                dVar52 = ((*(double *)(lVar35 + lVar6) - *(double *)(lVar35 + uVar28 + lVar5)) -
                         *(double *)(lVar37 + lVar7)) + *(double *)(lVar37 + uVar28 + lVar8);
                dVar49 = dVar49 + dVar52 * dVar52;
                dVar51 = dVar51 - dVar52 * *(double *)((Mat *)&local_2a0 + lVar9);
              } while ((int)lVar42 < (int)uVar1);
              dVar49 = __x * dVar49;
              if (cVar22 != '\0' || (bVar20 || bVar21)) goto LAB_0021a084;
LAB_0021a480:
              fVar53 = (float)dVar51;
            }
            else {
              if (cVar22 == '\0' && (!bVar20 && !bVar21)) goto LAB_0021a480;
LAB_0021a084:
              dVar52 = 0.0;
              lVar42 = 0;
              do {
                lVar5 = lVar42 * 8;
                lVar6 = lVar42 * 8;
                lVar7 = lVar42 * 8;
                lVar8 = lVar42 * 8;
                lVar42 = lVar42 + 1;
                dVar52 = dVar52 + ((*(double *)(lVar31 + lVar5) - *(double *)(lVar48 + lVar6)) -
                                  *(double *)(lVar47 + lVar7)) + *(double *)(lVar46 + lVar8);
              } while ((int)lVar42 < (int)uVar1);
              if ((cVar22 != '\0') && (dVar51 = (dVar52 - dVar51 * 2.0) + dVar55, dVar51 < 0.0)) {
                dVar51 = 0.0;
              }
              if (!bVar20 && !bVar21) goto LAB_0021a480;
              dVar52 = dVar52 - dVar49;
              if (dVar52 < 0.0) {
                dVar52 = 0.0;
              }
              dVar49 = SQRT(dVar52);
              if (NAN(dVar49)) {
                dVar49 = ::sqrt(dVar52);
              }
              dVar49 = dVar49 * dVar54;
              iVar23 = local_58._4_4_;
              if (dVar49 <= ABS(dVar51)) {
                if (dVar49 * 1.125 <= ABS(dVar51)) {
                  fVar53 = (float)(param_4 == 1);
                }
                else if (dVar51 <= 0.0) {
                  fVar53 = -1.0;
                }
                else {
                  fVar53 = 1.0;
                }
              }
              else {
                fVar53 = (float)(dVar51 / dVar49);
              }
            }
            iVar25 = iVar25 + 1;
            lVar35 = lVar35 + lVar2;
            lVar37 = lVar37 + lVar2;
            *pfVar38 = fVar53;
            lVar31 = lVar31 + lVar2;
            lVar48 = lVar48 + lVar2;
            lVar47 = lVar47 + lVar2;
            lVar46 = lVar46 + lVar2;
            pfVar38 = pfVar38 + 1;
          } while (iVar25 < iVar23);
          iVar25 = (int)local_58;
        }
        iVar24 = (int)lVar40;
        lVar45 = lVar45 + uVar43;
        lVar40 = lVar40 + 1;
        lVar41 = lVar41 + uVar43;
        lVar39 = lVar39 + (long)local_360 * 8;
      } while (iVar24 + 1 < iVar25);
    }
    if (local_e8 != 0) {
      piVar33 = (int *)(local_e8 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_f8 = 0;
    local_110 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_120._4_4_) {
      iVar27 = 0;
      puVar32 = local_e0;
      do {
        iVar27 = iVar27 + 1;
        *(undefined4 *)puVar32 = 0;
        puVar32 = (undefined8 *)((long)puVar32 + 4);
      } while (iVar27 < local_120._4_4_);
    }
    if (local_d8 != local_d0) {
      fastFree(local_d8);
    }
    if (local_148 != 0) {
      piVar33 = (int *)(local_148 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    local_148 = 0;
    local_170 = 0;
    local_158 = 0;
    local_160 = 0;
    local_168 = 0;
    if (0 < local_180._4_4_) {
      iVar27 = 0;
      puVar32 = local_140;
      do {
        *(undefined4 *)puVar32 = 0;
        iVar27 = iVar27 + 1;
        puVar32 = (undefined8 *)((long)puVar32 + 4);
      } while (iVar27 < local_180._4_4_);
    }
    if (local_138 != local_130) {
      fastFree(local_138);
    }
    if (local_28 != 0) {
      piVar33 = (int *)(local_28 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar27 = 0;
      puVar32 = local_20;
      do {
        *(undefined4 *)puVar32 = 0;
        iVar27 = iVar27 + 1;
        puVar32 = (undefined8 *)((long)puVar32 + 4);
      } while (iVar27 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (lStack_1a8 != 0) {
      piVar33 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (0 < local_1dc) {
      iVar27 = 0;
      piVar33 = local_1a0;
      do {
        *piVar33 = 0;
        iVar27 = iVar27 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar27 < local_1dc);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
    if (lStack_208 != 0) {
      piVar33 = (int *)(lStack_208 + 0x14);
      do {
        iVar27 = *piVar33;
        cVar22 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar21) {
          *piVar33 = iVar27 + -1;
          cVar22 = ExclusiveMonitorsStatus();
        }
      } while (cVar22 != '\0');
      if (iVar27 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    if (0 < iStack_23c) {
      iVar27 = 0;
      piVar33 = local_200;
      do {
        *piVar33 = 0;
        iVar27 = iVar27 + 1;
        piVar33 = piVar33 + 1;
      } while (iVar27 < iStack_23c);
    }
  }
  lStack_208 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  local_230 = 0;
  if (local_1f8 != &local_1f0) {
    fastFree(local_1f8);
  }
  return;
}


==================================================================

### FUNC 0021adf0 (812 bytes) name=cvMatchTemplate

void cvMatchTemplate(cv *param_1,cv *param_2,cv *param_3,int param_4,undefined8 param_5,
                    AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  void *__dest;
  _InputArray *p_Var5;
  int iVar6;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  Mat aMStack_120 [4];
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  uVar4 = local_114 - local_b4 >> 0x1f;
  if (((((local_114 - local_b4 ^ uVar4) - uVar4) + 1 != local_20[1]) ||
      (uVar4 = local_118 - local_b8 >> 0x1f,
      ((local_118 - local_b8 ^ uVar4) - uVar4) + 1 != *local_20)) || ((local_60 & 0xfff) != 5)) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_138,0x7e);
    memcpy(__dest,&DAT_0045f978,0x7e);
    cv::error(-0xd7,(String *)&local_138,
              "void cvMatchTemplate(const CvArr*, const CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp",0x445);
    cv::String::deallocate((String *)&local_138);
  }
  local_128 = 0;
  local_168[0] = 0x1010000;
  local_150[0] = 0x1010000;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = 0;
  local_154 = 0;
  local_140 = 0;
  local_13c = 0;
  local_160 = aMStack_120;
  local_148 = aMStack_c0;
  local_130 = (Mat *)&local_60;
  p_Var5 = (_InputArray *)cv::noArray();
  cv::matchTemplate((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138,
                    param_4,p_Var5);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    do {
      *local_80 = 0;
      iVar6 = iVar6 + 1;
      local_80 = local_80 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate(aMStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar6 = 0;
    do {
      *local_e0 = 0;
      iVar6 = iVar6 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar6 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 0021b1a8 (312 bytes) name=FUN_0021b1a8

void FUN_0021b1a8(ParallelLoopBody *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f59e0;
  if (*(long *)(param_1 + 0xa0) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0xa0) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0x68));
    }
  }
  *(undefined8 *)(param_1 + 0xa0) = 0;
  *(undefined8 *)(param_1 + 0x78) = 0;
  *(undefined8 *)(param_1 + 0x90) = 0;
  *(undefined8 *)(param_1 + 0x88) = 0;
  *(undefined8 *)(param_1 + 0x80) = 0;
  if (0 < *(int *)(param_1 + 0x6c)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0xa8);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0x6c));
  }
  if (*(ParallelLoopBody **)(param_1 + 0xb0) != param_1 + 0xb8) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0xb0));
  }
  if (*(long *)(param_1 + 0x40) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x40) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 8));
    }
  }
  *(undefined8 *)(param_1 + 0x40) = 0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  if (0 < *(int *)(param_1 + 0xc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x48);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x50) != param_1 + 0x58) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x50));
  }
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 0021b320 (12624 bytes) name=FUN_0021b320

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0021b320(long param_1,undefined8 *param_2)

{
  int *piVar1;
  size_t __n;
  byte *pbVar2;
  undefined1 *puVar3;
  ulong uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  Range RVar7;
  char cVar8;
  bool bVar9;
  short sVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined8 uVar15;
  undefined8 uVar16;
  undefined1 auVar17 [16];
  float fVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  char *pcVar24;
  undefined8 *puVar25;
  int iVar26;
  uint uVar27;
  undefined1 (*pauVar28) [16];
  byte *pbVar29;
  long lVar30;
  undefined8 *puVar31;
  int iVar32;
  long lVar33;
  Range *pRVar34;
  ulong uVar35;
  long lVar36;
  short *psVar37;
  int iVar38;
  long lVar39;
  float *pfVar40;
  unkbyte9 *pVar41;
  int iVar42;
  String *this;
  ulong uVar43;
  uint uVar44;
  uint uVar45;
  uint __c;
  short sVar47;
  float fVar48;
  int iVar50;
  short sVar75;
  int iVar76;
  short sVar78;
  int iVar79;
  short sVar81;
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  short sVar74;
  short sVar77;
  short sVar80;
  short sVar83;
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined1 auVar64 [16];
  float fVar49;
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  undefined1 auVar67 [16];
  undefined1 auVar68 [16];
  undefined1 auVar69 [16];
  int iVar82;
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  undefined1 auVar72 [16];
  undefined1 auVar73 [16];
  undefined1 uVar84;
  undefined1 uVar85;
  byte bVar86;
  byte bVar87;
  byte bVar88;
  byte bVar89;
  undefined1 uVar90;
  byte bVar91;
  byte bVar92;
  byte bVar93;
  byte bVar94;
  byte bVar95;
  byte bVar96;
  byte bVar97;
  byte bVar98;
  byte bVar99;
  byte bVar100;
  undefined1 uVar101;
  byte bVar102;
  undefined1 uVar103;
  undefined1 uVar104;
  undefined1 uVar105;
  undefined1 uVar106;
  undefined1 uVar107;
  undefined1 uVar108;
  undefined1 uVar109;
  undefined2 uVar110;
  undefined2 uVar111;
  undefined4 local_210;
  undefined4 local_20c;
  undefined4 local_208;
  undefined4 local_204;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  uint local_1c0;
  int local_1bc;
  undefined1 (*local_1b0) [16];
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  long local_188;
  int *local_180;
  ulong *local_178;
  ulong local_170 [2];
  uint local_160;
  int local_15c;
  undefined8 *local_150;
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  long local_128;
  undefined4 *local_120;
  ulong *local_118;
  ulong local_110 [2];
  undefined8 local_100;
  undefined1 auStack_f8 [8];
  undefined1 local_f0 [8];
  undefined1 auStack_e8 [8];
  undefined1 local_e0 [8];
  undefined1 auStack_d8 [8];
  undefined1 local_d0 [8];
  undefined1 auStack_c8 [8];
  undefined1 local_c0 [8];
  undefined1 auStack_b8 [8];
  undefined1 local_b0 [8];
  undefined1 auStack_a8 [8];
  undefined1 local_a0 [8];
  undefined1 auStack_98 [8];
  undefined1 local_90 [8];
  undefined1 auStack_88 [8];
  undefined1 local_80 [8];
  undefined1 auStack_78 [8];
  undefined1 local_70 [8];
  undefined1 auStack_68 [8];
  undefined1 local_60 [8];
  undefined1 auStack_58 [8];
  undefined1 local_50 [8];
  undefined1 auStack_48 [8];
  undefined1 local_40 [8];
  undefined1 auStack_38 [8];
  undefined1 local_30 [8];
  undefined1 auStack_28 [8];
  undefined1 local_20 [8];
  undefined1 auStack_18 [8];
  undefined1 local_10 [8];
  undefined1 auStack_8 [8];
  uint uVar46;
  
  local_160 = 0x80000000;
  local_15c = 0x7fffffff;
  uVar5 = *(undefined4 *)param_2;
  uVar6 = *(undefined4 *)((long)param_2 + 4);
  local_100 = *param_2;
  cv::Mat::Mat((Mat *)&local_1c0,(Mat *)(param_1 + 8),(Range *)&local_100,(Range *)&local_160);
  local_210 = 0x80000000;
  local_20c = 0x7fffffff;
  local_208 = uVar5;
  local_204 = uVar6;
  cv::Mat::Mat((Mat *)&local_160,(Mat *)(param_1 + 0x68),(Range *)&local_208,(Range *)&local_210);
  if ((local_1c0 & 7) != 0) {
    if ((local_1c0 & 7) != 3) {
      if ((local_1c0 & 7) != 5) goto LAB_0021b3d4;
      fVar18 = (float)*(double *)(param_1 + 200);
      uVar90 = (undefined1)((uint)fVar18 >> 0x18);
      local_170[0] = local_170[0] >> 2;
      iVar26 = *local_180;
      local_110[0] = local_110[0] >> 2;
      fVar49 = (float)*(double *)(param_1 + 0xd0);
      iVar42 = local_180[1] + (local_1c0 >> 3 & 0x1ff) * local_180[1];
      uVar101 = (undefined1)((uint)fVar18 >> 0x10);
      bVar86 = SUB41(fVar49,0);
      bVar87 = (byte)((uint)fVar49 >> 8);
      uVar111 = (undefined2)((uint)fVar49 >> 0x10);
      bVar88 = (byte)((uint)fVar49 >> 0x10);
      bVar89 = (byte)((uint)fVar49 >> 0x18);
      uVar110 = SUB42(fVar49,0);
      if (((local_1c0 >> 0xe & 1) == 0) || ((local_160 >> 0xe & 1) == 0)) {
        switch(*(undefined4 *)(param_1 + 0xd8)) {
        case 0:
          if (iVar26 < 1) goto LAB_0021b3d4;
          break;
        case 1:
          if (iVar26 < 1) goto LAB_0021b3d4;
          goto LAB_0021dd00;
        case 2:
          if (iVar26 < 1) goto LAB_0021b3d4;
          goto LAB_0021db10;
        case 3:
          if (iVar26 < 1) goto LAB_0021b3d4;
          goto LAB_0021df00;
        case 4:
          if (iVar26 < 1) goto LAB_0021b3d4;
          goto LAB_0021d930;
        default:
          goto switchD_0021e37c_default;
        }
      }
      else {
        iVar42 = iVar42 * iVar26;
        switch(*(undefined4 *)(param_1 + 0xd8)) {
        case 0:
          iVar26 = 1;
          break;
        case 1:
          iVar26 = 1;
LAB_0021dd00:
          iVar32 = 0;
          do {
            if (iVar42 + -3 < 1) {
              iVar38 = 0;
            }
            else {
              iVar38 = 0;
              puVar25 = local_150;
              pauVar28 = local_1b0;
              do {
                iVar38 = iVar38 + 4;
                iVar50 = -(uint)(*(float *)*pauVar28 <= fVar18);
                iVar76 = -(uint)(*(float *)(*pauVar28 + 4) <= fVar18);
                iVar79 = -(uint)(*(float *)(*pauVar28 + 8) <= fVar18);
                iVar82 = -(uint)(*(float *)(*pauVar28 + 0xc) <= fVar18);
                auVar70._0_8_ =
                     CONCAT17((byte)((uint)iVar76 >> 0x18) & bVar89,
                              CONCAT16((byte)((uint)iVar76 >> 0x10) & bVar88,
                                       CONCAT15((byte)((uint)iVar76 >> 8) & bVar87,
                                                CONCAT14((byte)iVar76 & bVar86,
                                                         CONCAT13((byte)((uint)iVar50 >> 0x18) &
                                                                  bVar89,CONCAT12((byte)((uint)
                                                  iVar50 >> 0x10) & bVar88,
                                                  CONCAT11((byte)((uint)iVar50 >> 8) & bVar87,
                                                           (byte)iVar50 & bVar86)))))));
                auVar70[8] = (byte)iVar79 & bVar86;
                auVar70[9] = (byte)((uint)iVar79 >> 8) & bVar87;
                auVar70[10] = (byte)((uint)iVar79 >> 0x10) & bVar88;
                auVar70[0xb] = (byte)((uint)iVar79 >> 0x18) & bVar89;
                auVar70[0xc] = (byte)iVar82 & bVar86;
                auVar70[0xd] = (byte)((uint)iVar82 >> 8) & bVar87;
                auVar70[0xe] = (byte)((uint)iVar82 >> 0x10) & bVar88;
                auVar70[0xf] = (byte)((uint)iVar82 >> 0x18) & bVar89;
                puVar25[1] = auVar70._8_8_;
                *puVar25 = auVar70._0_8_;
                puVar25 = puVar25 + 2;
                pauVar28 = pauVar28 + 1;
              } while (iVar38 < iVar42 + -3);
            }
            if (iVar38 < iVar42) {
              uVar27 = iVar42 - iVar38;
              lVar36 = (long)iVar38 * 4;
              puVar3 = *local_1b0 + lVar36;
              if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                   puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 9)) {
                lVar33 = 0;
                do {
                  fVar48 = fVar49;
                  if (fVar18 < *(float *)(puVar3 + lVar33)) {
                    fVar48 = 0.0;
                  }
                  *(float *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = fVar48;
                  lVar33 = lVar33 + 4;
                } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 4);
              }
              else {
                uVar45 = -((uint)((ulong)puVar3 >> 2) & 3) & 3;
                uVar46 = uVar27;
                if (uVar45 < uVar27) {
                  uVar46 = uVar45;
                }
                iVar50 = iVar38;
                if (uVar46 != 0) {
                  lVar33 = (long)iVar38 * 4;
                  fVar48 = fVar49;
                  if (fVar18 < *(float *)(*local_1b0 + lVar33)) {
                    fVar48 = 0.0;
                  }
                  iVar50 = iVar38 + 1;
                  *(float *)((long)local_150 + lVar33) = fVar48;
                  if (uVar46 != 1) {
                    fVar48 = fVar49;
                    if (fVar18 < *(float *)(*local_1b0 + lVar33 + 4)) {
                      fVar48 = 0.0;
                    }
                    iVar50 = iVar38 + 2;
                    *(float *)((long)local_150 + lVar33 + 4) = fVar48;
                    if (uVar46 == 3) {
                      fVar48 = fVar49;
                      if (fVar18 < *(float *)(*local_1b0 + lVar33 + 8)) {
                        fVar48 = 0.0;
                      }
                      iVar50 = iVar38 + 3;
                      *(float *)((long)local_150 + lVar33 + 8) = fVar48;
                    }
                  }
                }
                uVar44 = 0;
                uVar45 = ((uVar27 - uVar46) - 4 >> 2) + 1;
                iVar38 = uVar45 * 4;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 4);
                pfVar40 = (float *)(*local_1b0 + (ulong)uVar46 * 4 + lVar36);
                do {
                  uVar44 = uVar44 + 1;
                  auVar71._0_4_ = -(uint)(*pfVar40 <= fVar18);
                  auVar71._4_4_ = -(uint)(pfVar40[1] <= fVar18);
                  auVar71._8_4_ = -(uint)(pfVar40[2] <= fVar18);
                  auVar71._12_4_ = -(uint)(pfVar40[3] <= fVar18);
                  auVar22._4_2_ = uVar110;
                  auVar22._0_4_ = fVar49;
                  auVar22._6_2_ = uVar111;
                  auVar22._8_2_ = uVar110;
                  auVar22._10_2_ = uVar111;
                  auVar22._12_2_ = uVar110;
                  auVar22._14_2_ = uVar111;
                  auVar67 = ZEXT816(0) ^ (ZEXT816(0) ^ auVar22) & auVar71;
                  puVar25[1] = auVar67._8_8_;
                  *puVar25 = auVar67._0_8_;
                  puVar25 = puVar25 + 2;
                  pfVar40 = pfVar40 + 4;
                } while (uVar44 < uVar45);
                uVar45 = iVar50 + iVar38;
                if (uVar27 - uVar46 != iVar38) {
                  uVar43 = -(ulong)(uVar45 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar45 << 2;
                  fVar48 = fVar49;
                  if (fVar18 < *(float *)(*local_1b0 + uVar43)) {
                    fVar48 = 0.0;
                  }
                  *(float *)((long)local_150 + uVar43) = fVar48;
                  if ((int)(uVar45 + 1) < iVar42) {
                    fVar48 = fVar49;
                    if (fVar18 < *(float *)(*local_1b0 + uVar43 + 4)) {
                      fVar48 = 0.0;
                    }
                    *(float *)((long)local_150 + uVar43 + 4) = fVar48;
                    if ((int)(uVar45 + 2) < iVar42) {
                      fVar48 = fVar49;
                      if (fVar18 < *(float *)(*local_1b0 + uVar43 + 8)) {
                        fVar48 = 0.0;
                      }
                      *(float *)((long)local_150 + uVar43 + 8) = fVar48;
                    }
                  }
                }
              }
            }
            iVar32 = iVar32 + 1;
            local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 4);
            local_150 = (undefined8 *)((long)local_150 + local_110[0] * 4);
          } while (iVar32 != iVar26);
          goto LAB_0021b3d4;
        case 2:
          iVar26 = 1;
LAB_0021db10:
          uVar84 = SUB41(fVar18,0);
          uVar85 = (undefined1)((uint)fVar18 >> 8);
          iVar32 = 0;
          do {
            if (iVar42 + -3 < 1) {
              iVar38 = 0;
            }
            else {
              iVar38 = 0;
              puVar25 = local_150;
              pauVar28 = local_1b0;
              do {
                iVar38 = iVar38 + 4;
                auVar11[4] = uVar84;
                auVar11._0_4_ = fVar18;
                auVar11[5] = uVar85;
                auVar11[6] = uVar101;
                auVar11[7] = uVar90;
                auVar11[8] = uVar84;
                auVar11[9] = uVar85;
                auVar11[10] = uVar101;
                auVar11[0xb] = uVar90;
                auVar11[0xc] = uVar84;
                auVar11[0xd] = uVar85;
                auVar11[0xe] = uVar101;
                auVar11[0xf] = uVar90;
                auVar67 = NEON_fmin(*pauVar28,auVar11,4);
                puVar25[1] = auVar67._8_8_;
                *puVar25 = auVar67._0_8_;
                puVar25 = puVar25 + 2;
                pauVar28 = pauVar28 + 1;
              } while (iVar38 < iVar42 + -3);
            }
            if (iVar38 < iVar42) {
              uVar27 = iVar42 - iVar38;
              lVar36 = (long)iVar38 * 4;
              puVar3 = *local_1b0 + lVar36;
              if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                   puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 9)) {
                lVar33 = 0;
                do {
                  fVar49 = fVar18;
                  if (*(float *)(puVar3 + lVar33) <= fVar18) {
                    fVar49 = *(float *)(puVar3 + lVar33);
                  }
                  *(float *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = fVar49;
                  lVar33 = lVar33 + 4;
                } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 4);
              }
              else {
                uVar45 = -((uint)((ulong)puVar3 >> 2) & 3) & 3;
                uVar46 = uVar27;
                if (uVar45 < uVar27) {
                  uVar46 = uVar45;
                }
                iVar50 = iVar38;
                if (uVar46 != 0) {
                  lVar33 = (long)iVar38 * 4;
                  fVar49 = fVar18;
                  if (*(float *)(*local_1b0 + lVar33) <= fVar18) {
                    fVar49 = *(float *)(*local_1b0 + lVar33);
                  }
                  iVar50 = iVar38 + 1;
                  *(float *)((long)local_150 + lVar33) = fVar49;
                  if (uVar46 != 1) {
                    fVar49 = fVar18;
                    if (*(float *)(*local_1b0 + lVar33 + 4) <= fVar18) {
                      fVar49 = *(float *)(*local_1b0 + lVar33 + 4);
                    }
                    iVar50 = iVar38 + 2;
                    *(float *)((long)local_150 + lVar33 + 4) = fVar49;
                    if (uVar46 == 3) {
                      fVar49 = fVar18;
                      if (*(float *)(*local_1b0 + lVar33 + 8) <= fVar18) {
                        fVar49 = *(float *)(*local_1b0 + lVar33 + 8);
                      }
                      iVar50 = iVar38 + 3;
                      *(float *)((long)local_150 + lVar33 + 8) = fVar49;
                    }
                  }
                }
                uVar45 = ((uVar27 - uVar46) - 4 >> 2) + 1;
                uVar44 = 0;
                iVar38 = uVar45 * 4;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 4);
                pVar41 = (unkbyte9 *)(*local_1b0 + (ulong)uVar46 * 4 + lVar36);
                do {
                  uVar15 = *(undefined8 *)((long)pVar41 + 8);
                  uVar103 = (undefined1)((ulong)uVar15 >> 8);
                  uVar104 = (undefined1)((ulong)uVar15 >> 0x10);
                  uVar105 = (undefined1)((ulong)uVar15 >> 0x18);
                  uVar106 = (undefined1)((ulong)uVar15 >> 0x20);
                  uVar107 = (undefined1)((ulong)uVar15 >> 0x28);
                  uVar108 = (undefined1)((ulong)uVar15 >> 0x30);
                  uVar109 = (undefined1)((ulong)uVar15 >> 0x38);
                  uVar44 = uVar44 + 1;
                  auVar68._0_4_ = -(uint)(fVar18 < (float)*(undefined8 *)pVar41);
                  auVar68._4_4_ = -(uint)(fVar18 < (float)((ulong)*(undefined8 *)pVar41 >> 0x20));
                  auVar68._8_4_ = -(uint)(fVar18 < (float)uVar15);
                  auVar68._12_4_ = -(uint)(fVar18 < (float)((ulong)uVar15 >> 0x20));
                  auVar12[4] = uVar84;
                  auVar12._0_4_ = fVar18;
                  auVar12[5] = uVar85;
                  auVar12[6] = uVar101;
                  auVar12[7] = uVar90;
                  auVar12[8] = uVar84;
                  auVar12[9] = uVar85;
                  auVar12[10] = uVar101;
                  auVar12[0xb] = uVar90;
                  auVar12[0xc] = uVar84;
                  auVar12[0xd] = uVar85;
                  auVar12[0xe] = uVar101;
                  auVar12[0xf] = uVar90;
                  auVar21[9] = uVar103;
                  auVar21._0_9_ = *pVar41;
                  auVar21[10] = uVar104;
                  auVar21[0xb] = uVar105;
                  auVar21[0xc] = uVar106;
                  auVar21[0xd] = uVar107;
                  auVar21[0xe] = uVar108;
                  auVar21[0xf] = uVar109;
                  auVar69[9] = uVar103;
                  auVar69._0_9_ = *pVar41;
                  auVar69[10] = uVar104;
                  auVar69[0xb] = uVar105;
                  auVar69[0xc] = uVar106;
                  auVar69[0xd] = uVar107;
                  auVar69[0xe] = uVar108;
                  auVar69[0xf] = uVar109;
                  auVar69 = auVar69 ^ (auVar21 ^ auVar12) & auVar68;
                  puVar25[1] = auVar69._8_8_;
                  *puVar25 = auVar69._0_8_;
                  puVar25 = puVar25 + 2;
                  pVar41 = pVar41 + 1;
                } while (uVar44 < uVar45);
                uVar45 = iVar50 + iVar38;
                if (uVar27 - uVar46 != iVar38) {
                  uVar43 = -(ulong)(uVar45 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar45 << 2;
                  fVar49 = fVar18;
                  if (*(float *)(*local_1b0 + uVar43) <= fVar18) {
                    fVar49 = *(float *)(*local_1b0 + uVar43);
                  }
                  *(float *)((long)local_150 + uVar43) = fVar49;
                  if ((int)(uVar45 + 1) < iVar42) {
                    fVar49 = fVar18;
                    if (*(float *)(*local_1b0 + uVar43 + 4) <= fVar18) {
                      fVar49 = *(float *)(*local_1b0 + uVar43 + 4);
                    }
                    *(float *)((long)local_150 + uVar43 + 4) = fVar49;
                    if ((int)(uVar45 + 2) < iVar42) {
                      fVar49 = fVar18;
                      if (*(float *)(*local_1b0 + uVar43 + 8) <= fVar18) {
                        fVar49 = *(float *)(*local_1b0 + uVar43 + 8);
                      }
                      *(float *)((long)local_150 + uVar43 + 8) = fVar49;
                    }
                  }
                }
              }
            }
            iVar32 = iVar32 + 1;
            local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 4);
            local_150 = (undefined8 *)((long)local_150 + local_110[0] * 4);
          } while (iVar32 != iVar26);
          goto LAB_0021b3d4;
        case 3:
          iVar26 = 1;
LAB_0021df00:
          iVar32 = 0;
          do {
            if (iVar42 + -3 < 1) {
              iVar38 = 0;
            }
            else {
              iVar38 = 0;
              puVar25 = local_150;
              pauVar28 = local_1b0;
              do {
                auVar67 = *pauVar28;
                iVar38 = iVar38 + 4;
                iVar50 = -(uint)(fVar18 < auVar67._0_4_);
                iVar76 = -(uint)(fVar18 < auVar67._4_4_);
                iVar79 = -(uint)(fVar18 < auVar67._8_4_);
                iVar82 = -(uint)(fVar18 < auVar67._12_4_);
                auVar72._0_8_ =
                     CONCAT17(auVar67[7] & (byte)((uint)iVar76 >> 0x18),
                              CONCAT16(auVar67[6] & (byte)((uint)iVar76 >> 0x10),
                                       CONCAT15(auVar67[5] & (byte)((uint)iVar76 >> 8),
                                                CONCAT14(auVar67[4] & (byte)iVar76,
                                                         CONCAT13(auVar67[3] &
                                                                  (byte)((uint)iVar50 >> 0x18),
                                                                  CONCAT12(auVar67[2] &
                                                                           (byte)((uint)iVar50 >>
                                                                                 0x10),
                                                                           CONCAT11(auVar67[1] &
                                                                                    (byte)((uint)
                                                  iVar50 >> 8),auVar67[0] & (byte)iVar50)))))));
                auVar72[8] = auVar67[8] & (byte)iVar79;
                auVar72[9] = auVar67[9] & (byte)((uint)iVar79 >> 8);
                auVar72[10] = auVar67[10] & (byte)((uint)iVar79 >> 0x10);
                auVar72[0xb] = auVar67[0xb] & (byte)((uint)iVar79 >> 0x18);
                auVar72[0xc] = auVar67[0xc] & (byte)iVar82;
                auVar72[0xd] = auVar67[0xd] & (byte)((uint)iVar82 >> 8);
                auVar72[0xe] = auVar67[0xe] & (byte)((uint)iVar82 >> 0x10);
                auVar72[0xf] = auVar67[0xf] & (byte)((uint)iVar82 >> 0x18);
                puVar25[1] = auVar72._8_8_;
                *puVar25 = auVar72._0_8_;
                puVar25 = puVar25 + 2;
                pauVar28 = pauVar28 + 1;
              } while (iVar38 < iVar42 + -3);
            }
            if (iVar38 < iVar42) {
              uVar27 = iVar42 - iVar38;
              lVar36 = (long)iVar38 * 4;
              puVar3 = *local_1b0 + lVar36;
              if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                   puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 9)) {
                lVar33 = 0;
                do {
                  fVar49 = *(float *)(puVar3 + lVar33);
                  if (fVar49 <= fVar18) {
                    fVar49 = 0.0;
                  }
                  *(float *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = fVar49;
                  lVar33 = lVar33 + 4;
                } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 4);
              }
              else {
                uVar45 = -((uint)((ulong)puVar3 >> 2) & 3) & 3;
                uVar46 = uVar27;
                if (uVar45 < uVar27) {
                  uVar46 = uVar45;
                }
                iVar50 = iVar38;
                if (uVar46 != 0) {
                  lVar33 = (long)iVar38 * 4;
                  fVar49 = *(float *)(*local_1b0 + lVar33);
                  if (fVar49 <= fVar18) {
                    fVar49 = 0.0;
                  }
                  iVar50 = iVar38 + 1;
                  *(float *)((long)local_150 + lVar33) = fVar49;
                  if (uVar46 != 1) {
                    fVar49 = *(float *)(*local_1b0 + lVar33 + 4);
                    if (fVar49 <= fVar18) {
                      fVar49 = 0.0;
                    }
                    iVar50 = iVar38 + 2;
                    *(float *)((long)local_150 + lVar33 + 4) = fVar49;
                    if (uVar46 == 3) {
                      fVar49 = *(float *)(*local_1b0 + lVar33 + 8);
                      if (fVar49 <= fVar18) {
                        fVar49 = 0.0;
                      }
                      iVar50 = iVar38 + 3;
                      *(float *)((long)local_150 + lVar33 + 8) = fVar49;
                    }
                  }
                }
                uVar44 = 0;
                uVar45 = ((uVar27 - uVar46) - 4 >> 2) + 1;
                iVar38 = uVar45 * 4;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 4);
                pVar41 = (unkbyte9 *)(*local_1b0 + (ulong)uVar46 * 4 + lVar36);
                do {
                  uVar15 = *(undefined8 *)((long)pVar41 + 8);
                  uVar44 = uVar44 + 1;
                  auVar73._0_4_ = -(uint)(fVar18 < (float)*(undefined8 *)pVar41);
                  auVar73._4_4_ = -(uint)(fVar18 < (float)((ulong)*(undefined8 *)pVar41 >> 0x20));
                  auVar73._8_4_ = -(uint)(fVar18 < (float)uVar15);
                  auVar73._12_4_ = -(uint)(fVar18 < (float)((ulong)uVar15 >> 0x20));
                  auVar20[9] = (char)((ulong)uVar15 >> 8);
                  auVar20._0_9_ = *pVar41;
                  auVar20[10] = (char)((ulong)uVar15 >> 0x10);
                  auVar20[0xb] = (char)((ulong)uVar15 >> 0x18);
                  auVar20[0xc] = (char)((ulong)uVar15 >> 0x20);
                  auVar20[0xd] = (char)((ulong)uVar15 >> 0x28);
                  auVar20[0xe] = (char)((ulong)uVar15 >> 0x30);
                  auVar20[0xf] = (char)((ulong)uVar15 >> 0x38);
                  auVar67 = ZEXT216(0) ^ (ZEXT216(0) ^ auVar20) & auVar73;
                  puVar25[1] = auVar67._8_8_;
                  *puVar25 = auVar67._0_8_;
                  puVar25 = puVar25 + 2;
                  pVar41 = pVar41 + 1;
                } while (uVar44 < uVar45);
                uVar45 = iVar50 + iVar38;
                if (uVar27 - uVar46 != iVar38) {
                  uVar43 = -(ulong)(uVar45 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar45 << 2;
                  fVar49 = *(float *)(*local_1b0 + uVar43);
                  if (fVar49 <= fVar18) {
                    fVar49 = 0.0;
                  }
                  *(float *)((long)local_150 + uVar43) = fVar49;
                  if ((int)(uVar45 + 1) < iVar42) {
                    fVar49 = *(float *)(*local_1b0 + uVar43 + 4);
                    if (fVar49 <= fVar18) {
                      fVar49 = 0.0;
                    }
                    *(float *)((long)local_150 + uVar43 + 4) = fVar49;
                    if ((int)(uVar45 + 2) < iVar42) {
                      fVar49 = *(float *)(*local_1b0 + uVar43 + 8);
                      if (fVar49 <= fVar18) {
                        fVar49 = 0.0;
                      }
                      *(float *)((long)local_150 + uVar43 + 8) = fVar49;
                    }
                  }
                }
              }
            }
            iVar32 = iVar32 + 1;
            local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 4);
            local_150 = (undefined8 *)((long)local_150 + local_110[0] * 4);
          } while (iVar32 != iVar26);
          goto LAB_0021b3d4;
        case 4:
          iVar26 = 1;
LAB_0021d930:
          iVar32 = 0;
          do {
            if (iVar42 + -3 < 1) {
              iVar38 = 0;
            }
            else {
              iVar38 = 0;
              puVar25 = local_150;
              pauVar28 = local_1b0;
              do {
                auVar67 = *pauVar28;
                iVar38 = iVar38 + 4;
                iVar50 = -(uint)(auVar67._0_4_ <= fVar18);
                iVar76 = -(uint)(auVar67._4_4_ <= fVar18);
                iVar79 = -(uint)(auVar67._8_4_ <= fVar18);
                iVar82 = -(uint)(auVar67._12_4_ <= fVar18);
                auVar65._0_8_ =
                     CONCAT17(auVar67[7] & (byte)((uint)iVar76 >> 0x18),
                              CONCAT16(auVar67[6] & (byte)((uint)iVar76 >> 0x10),
                                       CONCAT15(auVar67[5] & (byte)((uint)iVar76 >> 8),
                                                CONCAT14(auVar67[4] & (byte)iVar76,
                                                         CONCAT13(auVar67[3] &
                                                                  (byte)((uint)iVar50 >> 0x18),
                                                                  CONCAT12(auVar67[2] &
                                                                           (byte)((uint)iVar50 >>
                                                                                 0x10),
                                                                           CONCAT11(auVar67[1] &
                                                                                    (byte)((uint)
                                                  iVar50 >> 8),auVar67[0] & (byte)iVar50)))))));
                auVar65[8] = auVar67[8] & (byte)iVar79;
                auVar65[9] = auVar67[9] & (byte)((uint)iVar79 >> 8);
                auVar65[10] = auVar67[10] & (byte)((uint)iVar79 >> 0x10);
                auVar65[0xb] = auVar67[0xb] & (byte)((uint)iVar79 >> 0x18);
                auVar65[0xc] = auVar67[0xc] & (byte)iVar82;
                auVar65[0xd] = auVar67[0xd] & (byte)((uint)iVar82 >> 8);
                auVar65[0xe] = auVar67[0xe] & (byte)((uint)iVar82 >> 0x10);
                auVar65[0xf] = auVar67[0xf] & (byte)((uint)iVar82 >> 0x18);
                puVar25[1] = auVar65._8_8_;
                *puVar25 = auVar65._0_8_;
                puVar25 = puVar25 + 2;
                pauVar28 = pauVar28 + 1;
              } while (iVar38 < iVar42 + -3);
            }
            if (iVar38 < iVar42) {
              uVar27 = iVar42 - iVar38;
              lVar36 = (long)iVar38 * 4;
              puVar3 = *local_1b0 + lVar36;
              if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                   puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 9)) {
                lVar33 = 0;
                do {
                  fVar49 = *(float *)(puVar3 + lVar33);
                  if (fVar18 < fVar49) {
                    fVar49 = 0.0;
                  }
                  *(float *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = fVar49;
                  lVar33 = lVar33 + 4;
                } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 4);
              }
              else {
                uVar45 = -((uint)((ulong)puVar3 >> 2) & 3) & 3;
                uVar46 = uVar27;
                if (uVar45 < uVar27) {
                  uVar46 = uVar45;
                }
                iVar50 = iVar38;
                if (uVar46 != 0) {
                  lVar33 = (long)iVar38 * 4;
                  fVar49 = *(float *)(*local_1b0 + lVar33);
                  if (fVar18 < fVar49) {
                    fVar49 = 0.0;
                  }
                  iVar50 = iVar38 + 1;
                  *(float *)((long)local_150 + lVar33) = fVar49;
                  if (uVar46 != 1) {
                    fVar49 = *(float *)(*local_1b0 + lVar33 + 4);
                    if (fVar18 < fVar49) {
                      fVar49 = 0.0;
                    }
                    iVar50 = iVar38 + 2;
                    *(float *)((long)local_150 + lVar33 + 4) = fVar49;
                    if (uVar46 == 3) {
                      fVar49 = *(float *)(*local_1b0 + lVar33 + 8);
                      if (fVar18 < fVar49) {
                        fVar49 = 0.0;
                      }
                      iVar50 = iVar38 + 3;
                      *(float *)((long)local_150 + lVar33 + 8) = fVar49;
                    }
                  }
                }
                uVar44 = 0;
                uVar45 = ((uVar27 - uVar46) - 4 >> 2) + 1;
                iVar38 = uVar45 * 4;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 4);
                pVar41 = (unkbyte9 *)(*local_1b0 + (ulong)uVar46 * 4 + lVar36);
                do {
                  uVar15 = *(undefined8 *)((long)pVar41 + 8);
                  uVar44 = uVar44 + 1;
                  auVar66._0_4_ = -(uint)((float)*(undefined8 *)pVar41 <= fVar18);
                  auVar66._4_4_ = -(uint)((float)((ulong)*(undefined8 *)pVar41 >> 0x20) <= fVar18);
                  auVar66._8_4_ = -(uint)((float)uVar15 <= fVar18);
                  auVar66._12_4_ = -(uint)((float)((ulong)uVar15 >> 0x20) <= fVar18);
                  auVar19[9] = (char)((ulong)uVar15 >> 8);
                  auVar19._0_9_ = *pVar41;
                  auVar19[10] = (char)((ulong)uVar15 >> 0x10);
                  auVar19[0xb] = (char)((ulong)uVar15 >> 0x18);
                  auVar19[0xc] = (char)((ulong)uVar15 >> 0x20);
                  auVar19[0xd] = (char)((ulong)uVar15 >> 0x28);
                  auVar19[0xe] = (char)((ulong)uVar15 >> 0x30);
                  auVar19[0xf] = (char)((ulong)uVar15 >> 0x38);
                  auVar67 = ZEXT216(0) ^ (ZEXT216(0) ^ auVar19) & auVar66;
                  puVar25[1] = auVar67._8_8_;
                  *puVar25 = auVar67._0_8_;
                  puVar25 = puVar25 + 2;
                  pVar41 = pVar41 + 1;
                } while (uVar44 < uVar45);
                uVar45 = iVar50 + iVar38;
                if (uVar27 - uVar46 != iVar38) {
                  uVar43 = -(ulong)(uVar45 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar45 << 2;
                  fVar49 = *(float *)(*local_1b0 + uVar43);
                  if (fVar18 < fVar49) {
                    fVar49 = 0.0;
                  }
                  *(float *)((long)local_150 + uVar43) = fVar49;
                  if ((int)(uVar45 + 1) < iVar42) {
                    fVar49 = *(float *)(*local_1b0 + uVar43 + 4);
                    if (fVar18 < fVar49) {
                      fVar49 = 0.0;
                    }
                    *(float *)((long)local_150 + uVar43 + 4) = fVar49;
                    if ((int)(uVar45 + 2) < iVar42) {
                      fVar49 = *(float *)(*local_1b0 + uVar43 + 8);
                      if (fVar18 < fVar49) {
                        fVar49 = 0.0;
                      }
                      *(float *)((long)local_150 + uVar43 + 8) = fVar49;
                    }
                  }
                }
              }
            }
            iVar32 = iVar32 + 1;
            local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 4);
            local_150 = (undefined8 *)((long)local_150 + local_110[0] * 4);
          } while (iVar32 != iVar26);
          goto LAB_0021b3d4;
        default:
switchD_0021e37c_default:
          this = (String *)&local_1d0;
          local_1d0 = 0;
          local_1c8 = 0;
          cv::String::allocate(this,0);
          cv::error(-5,this,"void cv::thresh_32f(const cv::Mat&, cv::Mat&, float, float, int)",
                    "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x387);
          goto LAB_0021c788;
        }
      }
      iVar32 = 0;
      do {
        if (iVar42 + -3 < 1) {
          iVar38 = 0;
        }
        else {
          iVar38 = 0;
          puVar25 = local_150;
          pauVar28 = local_1b0;
          do {
            iVar38 = iVar38 + 4;
            iVar50 = -(uint)(fVar18 < *(float *)*pauVar28);
            iVar76 = -(uint)(fVar18 < *(float *)(*pauVar28 + 4));
            iVar79 = -(uint)(fVar18 < *(float *)(*pauVar28 + 8));
            iVar82 = -(uint)(fVar18 < *(float *)(*pauVar28 + 0xc));
            auVar63._0_8_ =
                 CONCAT17((byte)((uint)iVar76 >> 0x18) & bVar89,
                          CONCAT16((byte)((uint)iVar76 >> 0x10) & bVar88,
                                   CONCAT15((byte)((uint)iVar76 >> 8) & bVar87,
                                            CONCAT14((byte)iVar76 & bVar86,
                                                     CONCAT13((byte)((uint)iVar50 >> 0x18) & bVar89,
                                                              CONCAT12((byte)((uint)iVar50 >> 0x10)
                                                                       & bVar88,CONCAT11((byte)((
                                                  uint)iVar50 >> 8) & bVar87,(byte)iVar50 & bVar86))
                                                  )))));
            auVar63[8] = (byte)iVar79 & bVar86;
            auVar63[9] = (byte)((uint)iVar79 >> 8) & bVar87;
            auVar63[10] = (byte)((uint)iVar79 >> 0x10) & bVar88;
            auVar63[0xb] = (byte)((uint)iVar79 >> 0x18) & bVar89;
            auVar63[0xc] = (byte)iVar82 & bVar86;
            auVar63[0xd] = (byte)((uint)iVar82 >> 8) & bVar87;
            auVar63[0xe] = (byte)((uint)iVar82 >> 0x10) & bVar88;
            auVar63[0xf] = (byte)((uint)iVar82 >> 0x18) & bVar89;
            puVar25[1] = auVar63._8_8_;
            *puVar25 = auVar63._0_8_;
            puVar25 = puVar25 + 2;
            pauVar28 = pauVar28 + 1;
          } while (iVar38 < iVar42 + -3);
        }
        if (iVar38 < iVar42) {
          uVar27 = iVar42 - iVar38;
          lVar36 = (long)iVar38 * 4;
          puVar3 = *local_1b0 + lVar36;
          if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
               puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 9)) {
            lVar33 = 0;
            do {
              fVar48 = fVar49;
              if (*(float *)(puVar3 + lVar33) <= fVar18) {
                fVar48 = 0.0;
              }
              *(float *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = fVar48;
              lVar33 = lVar33 + 4;
            } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 4);
          }
          else {
            uVar45 = -((uint)((ulong)puVar3 >> 2) & 3) & 3;
            uVar46 = uVar27;
            if (uVar45 < uVar27) {
              uVar46 = uVar45;
            }
            iVar50 = iVar38;
            if (uVar46 != 0) {
              lVar33 = (long)iVar38 * 4;
              fVar48 = fVar49;
              if (*(float *)(*local_1b0 + lVar33) <= fVar18) {
                fVar48 = 0.0;
              }
              iVar50 = iVar38 + 1;
              *(float *)((long)local_150 + lVar33) = fVar48;
              if (uVar46 != 1) {
                fVar48 = fVar49;
                if (*(float *)(*local_1b0 + lVar33 + 4) <= fVar18) {
                  fVar48 = 0.0;
                }
                iVar50 = iVar38 + 2;
                *(float *)((long)local_150 + lVar33 + 4) = fVar48;
                if (uVar46 == 3) {
                  fVar48 = fVar49;
                  if (*(float *)(*local_1b0 + lVar33 + 8) <= fVar18) {
                    fVar48 = 0.0;
                  }
                  iVar50 = iVar38 + 3;
                  *(float *)((long)local_150 + lVar33 + 8) = fVar48;
                }
              }
            }
            uVar44 = 0;
            uVar45 = ((uVar27 - uVar46) - 4 >> 2) + 1;
            iVar38 = uVar45 * 4;
            puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 4);
            pfVar40 = (float *)(*local_1b0 + (ulong)uVar46 * 4 + lVar36);
            do {
              uVar44 = uVar44 + 1;
              auVar64._0_4_ = -(uint)(fVar18 < *pfVar40);
              auVar64._4_4_ = -(uint)(fVar18 < pfVar40[1]);
              auVar64._8_4_ = -(uint)(fVar18 < pfVar40[2]);
              auVar64._12_4_ = -(uint)(fVar18 < pfVar40[3]);
              auVar23._4_2_ = uVar110;
              auVar23._0_4_ = fVar49;
              auVar23._6_2_ = uVar111;
              auVar23._8_2_ = uVar110;
              auVar23._10_2_ = uVar111;
              auVar23._12_2_ = uVar110;
              auVar23._14_2_ = uVar111;
              auVar67 = ZEXT816(0) ^ (ZEXT816(0) ^ auVar23) & auVar64;
              puVar25[1] = auVar67._8_8_;
              *puVar25 = auVar67._0_8_;
              puVar25 = puVar25 + 2;
              pfVar40 = pfVar40 + 4;
            } while (uVar44 < uVar45);
            uVar45 = iVar50 + iVar38;
            if (uVar27 - uVar46 != iVar38) {
              uVar43 = -(ulong)(uVar45 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar45 << 2;
              fVar48 = fVar49;
              if (*(float *)(*local_1b0 + uVar43) <= fVar18) {
                fVar48 = 0.0;
              }
              *(float *)((long)local_150 + uVar43) = fVar48;
              if ((int)(uVar45 + 1) < iVar42) {
                fVar48 = fVar49;
                if (*(float *)(*local_1b0 + uVar43 + 4) <= fVar18) {
                  fVar48 = 0.0;
                }
                *(float *)((long)local_150 + uVar43 + 4) = fVar48;
                if ((int)(uVar45 + 2) < iVar42) {
                  fVar48 = fVar49;
                  if (*(float *)(*local_1b0 + uVar43 + 8) <= fVar18) {
                    fVar48 = 0.0;
                  }
                  *(float *)((long)local_150 + uVar43 + 8) = fVar48;
                }
              }
            }
          }
        }
        iVar32 = iVar32 + 1;
        local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 4);
        local_150 = (undefined8 *)((long)local_150 + local_110[0] * 4);
      } while (iVar32 < iVar26);
      goto LAB_0021b3d4;
    }
    iVar32 = (int)*(double *)(param_1 + 200);
    iVar38 = (int)*(double *)(param_1 + 0xd0);
    local_170[0] = local_170[0] >> 1;
    iVar26 = *local_180;
    sVar10 = (short)iVar32;
    iVar42 = local_180[1] + (local_1c0 >> 3 & 0x1ff) * local_180[1];
    uVar110 = (undefined2)iVar38;
    local_110[0] = local_110[0] >> 1;
    uVar101 = (undefined1)iVar32;
    uVar90 = (undefined1)((uint)iVar32 >> 8);
    bVar87 = (byte)iVar38;
    bVar86 = (byte)((uint)iVar38 >> 8);
    if (((local_1c0 >> 0xe & 1) == 0) || ((local_160 >> 0xe & 1) == 0)) {
      switch(*(undefined4 *)(param_1 + 0xd8)) {
      case 0:
        if (iVar26 < 1) goto LAB_0021b3d4;
        break;
      case 1:
        if (iVar26 < 1) goto LAB_0021b3d4;
        goto LAB_0021d450;
      case 2:
        if (iVar26 < 1) goto LAB_0021b3d4;
        goto LAB_0021d148;
      case 3:
        if (iVar26 < 1) goto LAB_0021b3d4;
        goto LAB_0021ce70;
      case 4:
        if (iVar26 < 1) goto LAB_0021b3d4;
        goto LAB_0021cb98;
      default:
        goto switchD_0021c884_default;
      }
    }
    else {
      iVar42 = iVar42 * iVar26;
      local_170[0] = (ulong)iVar42;
      local_110[0] = local_170[0];
      switch(*(undefined4 *)(param_1 + 0xd8)) {
      case 0:
        iVar26 = 1;
        break;
      case 1:
        iVar26 = 1;
LAB_0021d450:
        iVar32 = 0;
        uVar6 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        uVar5 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        do {
          if (iVar42 + -7 < 1) {
            uVar43 = 0;
          }
          else {
            uVar43 = 0;
            puVar25 = local_150;
            pauVar28 = local_1b0;
            do {
              uVar27 = (int)uVar43 + 8;
              uVar43 = (ulong)uVar27;
              sVar47 = -(ushort)(sVar10 < *(short *)*pauVar28);
              sVar74 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 2));
              sVar75 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 4));
              sVar77 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 6));
              sVar78 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 8));
              sVar80 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 10));
              sVar81 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 0xc));
              sVar83 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 0xe));
              auVar61._0_8_ =
                   CONCAT17(bVar86 & ~(byte)((ushort)sVar77 >> 8),
                            CONCAT16(bVar87 & ~(byte)sVar77,
                                     CONCAT15(bVar86 & ~(byte)((ushort)sVar75 >> 8),
                                              CONCAT14(bVar87 & ~(byte)sVar75,
                                                       CONCAT13(bVar86 & ~(byte)((ushort)sVar74 >> 8
                                                                                ),
                                                                CONCAT12(bVar87 & ~(byte)sVar74,
                                                                         CONCAT11(bVar86 & ~(byte)((
                                                  ushort)sVar47 >> 8),bVar87 & ~(byte)sVar47)))))));
              auVar61[8] = bVar87 & ~(byte)sVar78;
              auVar61[9] = bVar86 & ~(byte)((ushort)sVar78 >> 8);
              auVar61[10] = bVar87 & ~(byte)sVar80;
              auVar61[0xb] = bVar86 & ~(byte)((ushort)sVar80 >> 8);
              auVar61[0xc] = bVar87 & ~(byte)sVar81;
              auVar61[0xd] = bVar86 & ~(byte)((ushort)sVar81 >> 8);
              auVar61[0xe] = bVar87 & ~(byte)sVar83;
              auVar61[0xf] = bVar86 & ~(byte)((ushort)sVar83 >> 8);
              puVar25[1] = auVar61._8_8_;
              *puVar25 = auVar61._0_8_;
              puVar25 = puVar25 + 2;
              pauVar28 = pauVar28 + 1;
            } while ((int)uVar27 < iVar42 + -7);
          }
          iVar38 = (int)uVar43;
          if (iVar38 < iVar42) {
            uVar27 = iVar42 - iVar38;
            lVar36 = (long)iVar38 * 2;
            puVar3 = *local_1b0 + lVar36;
            if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                 puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 0xd)) {
              lVar33 = 0;
              do {
                uVar111 = uVar110;
                if (sVar10 < *(short *)(puVar3 + lVar33)) {
                  uVar111 = 0;
                }
                *(undefined2 *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = uVar111;
                lVar33 = lVar33 + 2;
              } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 2);
            }
            else {
              uVar45 = -((uint)((ulong)puVar3 >> 1) & 7) & 7;
              if (uVar27 < uVar45) {
                uVar45 = uVar27;
              }
              if (uVar45 != 0) {
                lVar33 = (long)iVar38 * 2;
                uVar111 = uVar110;
                if (sVar10 < *(short *)(*local_1b0 + lVar33)) {
                  uVar111 = 0;
                }
                *(undefined2 *)((long)local_150 + lVar33) = uVar111;
                if (uVar45 == 1) {
                  uVar43 = (ulong)(iVar38 + 1);
                }
                else {
                  uVar46 = iVar38 + 2;
                  uVar111 = uVar110;
                  if (sVar10 < *(short *)(*local_1b0 + lVar33 + 2)) {
                    uVar111 = 0;
                  }
                  *(undefined2 *)((long)local_150 + lVar33 + 2) = uVar111;
                  if (uVar45 != 2) {
                    uVar46 = iVar38 + 3;
                    uVar111 = uVar110;
                    if (sVar10 < *(short *)(*local_1b0 + lVar33 + 4)) {
                      uVar111 = 0;
                    }
                    *(undefined2 *)((long)local_150 + lVar33 + 4) = uVar111;
                    if (uVar45 != 3) {
                      uVar46 = iVar38 + 4;
                      uVar111 = uVar110;
                      if (sVar10 < *(short *)(*local_1b0 + lVar33 + 6)) {
                        uVar111 = 0;
                      }
                      *(undefined2 *)((long)local_150 + lVar33 + 6) = uVar111;
                      if (uVar45 != 4) {
                        uVar46 = iVar38 + 5;
                        uVar111 = uVar110;
                        if (sVar10 < *(short *)(*local_1b0 + lVar33 + 8)) {
                          uVar111 = 0;
                        }
                        *(undefined2 *)((long)local_150 + lVar33 + 8) = uVar111;
                        if (uVar45 != 5) {
                          uVar46 = iVar38 + 6;
                          uVar111 = uVar110;
                          if (sVar10 < *(short *)(*local_1b0 + lVar33 + 10)) {
                            uVar111 = 0;
                          }
                          *(undefined2 *)((long)local_150 + lVar33 + 10) = uVar111;
                          if (uVar45 == 7) {
                            uVar43 = (ulong)(iVar38 + 7);
                            uVar111 = uVar110;
                            if (sVar10 < *(short *)(*local_1b0 + lVar33 + 0xc)) {
                              uVar111 = 0;
                            }
                            *(undefined2 *)((long)local_150 + lVar33 + 0xc) = uVar111;
                            goto LAB_0021d5e0;
                          }
                        }
                      }
                    }
                  }
                  uVar43 = (ulong)uVar46;
                }
              }
LAB_0021d5e0:
              uVar46 = ((uVar27 - uVar45) - 8 >> 3) + 1;
              iVar38 = uVar46 * 8;
              if (6 < (uVar27 - 1) - uVar45) {
                uVar44 = 0;
                psVar37 = (short *)(*local_1b0 + (ulong)uVar45 * 2 + lVar36);
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar45 * 2);
                do {
                  uVar44 = uVar44 + 1;
                  sVar47 = -(ushort)(psVar37[1] <= (short)((uint)uVar5 >> 0x10));
                  sVar74 = -(ushort)(psVar37[2] <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar5)) >> 0x20));
                  sVar75 = -(ushort)(psVar37[5] <= (short)((uint)uVar6 >> 0x10));
                  sVar77 = -(ushort)(psVar37[6] <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar6)) >> 0x20));
                  auVar62._0_8_ =
                       CONCAT17((byte)((ushort)-(ushort)(psVar37[3] <= sVar10) >> 8) & bVar86,
                                CONCAT16((byte)-(ushort)(psVar37[3] <= sVar10) & bVar87,
                                         CONCAT15((byte)((ushort)sVar74 >> 8) & bVar86,
                                                  CONCAT14((byte)sVar74 & bVar87,
                                                           CONCAT13((byte)((ushort)sVar47 >> 8) &
                                                                    bVar86,CONCAT12((byte)sVar47 &
                                                                                    bVar87,CONCAT11(
                                                  (byte)((ushort)-(ushort)(*psVar37 <= sVar10) >> 8)
                                                  & bVar86,(byte)-(ushort)(*psVar37 <= sVar10) &
                                                           bVar87)))))));
                  auVar62[8] = (byte)-(ushort)(psVar37[4] <= sVar10) & bVar87;
                  auVar62[9] = (byte)((ushort)-(ushort)(psVar37[4] <= sVar10) >> 8) & bVar86;
                  auVar62[10] = (byte)sVar75 & bVar87;
                  auVar62[0xb] = (byte)((ushort)sVar75 >> 8) & bVar86;
                  auVar62[0xc] = (byte)sVar77 & bVar87;
                  auVar62[0xd] = (byte)((ushort)sVar77 >> 8) & bVar86;
                  auVar62[0xe] = (byte)-(ushort)(psVar37[7] <= sVar10) & bVar87;
                  auVar62[0xf] = (byte)((ushort)-(ushort)(psVar37[7] <= sVar10) >> 8) & bVar86;
                  puVar25[1] = auVar62._8_8_;
                  *puVar25 = auVar62._0_8_;
                  psVar37 = psVar37 + 8;
                  puVar25 = puVar25 + 2;
                } while (uVar44 < uVar46);
                uVar43 = (ulong)(uint)((int)uVar43 + iVar38);
                if (iVar38 == uVar27 - uVar45) goto LAB_0021d710;
              }
              uVar35 = -(uVar43 >> 0x1f) & 0xfffffffe00000000 | uVar43 << 1;
              iVar38 = (int)uVar43;
              uVar111 = uVar110;
              if (sVar10 < *(short *)(*local_1b0 + uVar35)) {
                uVar111 = 0;
              }
              *(undefined2 *)((long)local_150 + uVar35) = uVar111;
              if (iVar38 + 1 < iVar42) {
                uVar111 = uVar110;
                if (sVar10 < *(short *)(*local_1b0 + uVar35 + 2)) {
                  uVar111 = 0;
                }
                *(undefined2 *)((long)local_150 + uVar35 + 2) = uVar111;
                if (iVar38 + 2 < iVar42) {
                  uVar111 = uVar110;
                  if (sVar10 < *(short *)(*local_1b0 + uVar35 + 4)) {
                    uVar111 = 0;
                  }
                  *(undefined2 *)((long)local_150 + uVar35 + 4) = uVar111;
                  if (iVar38 + 3 < iVar42) {
                    uVar111 = uVar110;
                    if (sVar10 < *(short *)(*local_1b0 + uVar35 + 6)) {
                      uVar111 = 0;
                    }
                    *(undefined2 *)((long)local_150 + uVar35 + 6) = uVar111;
                    if (iVar38 + 4 < iVar42) {
                      uVar111 = uVar110;
                      if (sVar10 < *(short *)(*local_1b0 + uVar35 + 8)) {
                        uVar111 = 0;
                      }
                      *(undefined2 *)((long)local_150 + uVar35 + 8) = uVar111;
                      if (iVar38 + 5 < iVar42) {
                        uVar111 = uVar110;
                        if (sVar10 < *(short *)(*local_1b0 + uVar35 + 10)) {
                          uVar111 = 0;
                        }
                        *(undefined2 *)((long)local_150 + uVar35 + 10) = uVar111;
                        if (iVar38 + 6 < iVar42) {
                          uVar111 = uVar110;
                          if (sVar10 < *(short *)(*local_1b0 + uVar35 + 0xc)) {
                            uVar111 = 0;
                          }
                          *(undefined2 *)((long)local_150 + uVar35 + 0xc) = uVar111;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_0021d710:
          iVar32 = iVar32 + 1;
          local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 2);
          local_150 = (undefined8 *)((long)local_150 + local_110[0] * 2);
        } while (iVar32 != iVar26);
        goto LAB_0021b3d4;
      case 2:
        iVar26 = 1;
LAB_0021d148:
        iVar32 = 0;
        do {
          if (iVar42 + -7 < 1) {
            uVar43 = 0;
          }
          else {
            uVar43 = 0;
            puVar25 = local_150;
            pauVar28 = local_1b0;
            do {
              uVar27 = (int)uVar43 + 8;
              uVar43 = (ulong)uVar27;
              auVar13[2] = uVar101;
              auVar13._0_2_ = sVar10;
              auVar13[3] = uVar90;
              auVar13[4] = uVar101;
              auVar13[5] = uVar90;
              auVar13[6] = uVar101;
              auVar13[7] = uVar90;
              auVar13[8] = uVar101;
              auVar13[9] = uVar90;
              auVar13[10] = uVar101;
              auVar13[0xb] = uVar90;
              auVar13[0xc] = uVar101;
              auVar13[0xd] = uVar90;
              auVar13[0xe] = uVar101;
              auVar13[0xf] = uVar90;
              auVar67 = NEON_smin(*pauVar28,auVar13,2);
              puVar25[1] = auVar67._8_8_;
              *puVar25 = auVar67._0_8_;
              puVar25 = puVar25 + 2;
              pauVar28 = pauVar28 + 1;
            } while ((int)uVar27 < iVar42 + -7);
          }
          iVar38 = (int)uVar43;
          if (iVar38 < iVar42) {
            uVar27 = iVar42 - iVar38;
            lVar36 = (long)iVar38 * 2;
            puVar3 = *local_1b0 + lVar36;
            if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                 puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 0xd)) {
              lVar33 = 0;
              do {
                sVar47 = *(short *)(puVar3 + lVar33);
                if (sVar10 < *(short *)(puVar3 + lVar33)) {
                  sVar47 = sVar10;
                }
                *(short *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = sVar47;
                lVar33 = lVar33 + 2;
              } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 2);
            }
            else {
              uVar45 = -((uint)((ulong)puVar3 >> 1) & 7) & 7;
              if (uVar27 < uVar45) {
                uVar45 = uVar27;
              }
              if (uVar45 != 0) {
                lVar33 = (long)iVar38 * 2;
                sVar47 = *(short *)(*local_1b0 + lVar33);
                if (sVar10 < *(short *)(*local_1b0 + lVar33)) {
                  sVar47 = sVar10;
                }
                *(short *)((long)local_150 + lVar33) = sVar47;
                if (uVar45 == 1) {
                  uVar43 = (ulong)(iVar38 + 1);
                }
                else {
                  lVar39 = lVar33 + 2;
                  uVar46 = iVar38 + 2;
                  sVar47 = *(short *)(*local_1b0 + lVar39);
                  if (sVar10 < *(short *)(*local_1b0 + lVar39)) {
                    sVar47 = sVar10;
                  }
                  *(short *)((long)local_150 + lVar39) = sVar47;
                  if (uVar45 != 2) {
                    lVar39 = lVar33 + 4;
                    uVar46 = iVar38 + 3;
                    sVar47 = *(short *)(*local_1b0 + lVar39);
                    if (sVar10 < *(short *)(*local_1b0 + lVar39)) {
                      sVar47 = sVar10;
                    }
                    *(short *)((long)local_150 + lVar39) = sVar47;
                    if (uVar45 != 3) {
                      lVar39 = lVar33 + 6;
                      uVar46 = iVar38 + 4;
                      sVar47 = *(short *)(*local_1b0 + lVar39);
                      if (sVar10 < *(short *)(*local_1b0 + lVar39)) {
                        sVar47 = sVar10;
                      }
                      *(short *)((long)local_150 + lVar39) = sVar47;
                      if (uVar45 != 4) {
                        lVar39 = lVar33 + 8;
                        uVar46 = iVar38 + 5;
                        sVar47 = *(short *)(*local_1b0 + lVar39);
                        if (sVar10 < *(short *)(*local_1b0 + lVar39)) {
                          sVar47 = sVar10;
                        }
                        *(short *)((long)local_150 + lVar39) = sVar47;
                        if (uVar45 != 5) {
                          lVar39 = lVar33 + 10;
                          uVar46 = iVar38 + 6;
                          sVar47 = *(short *)(*local_1b0 + lVar39);
                          if (sVar10 < *(short *)(*local_1b0 + lVar39)) {
                            sVar47 = sVar10;
                          }
                          *(short *)((long)local_150 + lVar39) = sVar47;
                          if (uVar45 == 7) {
                            lVar33 = lVar33 + 0xc;
                            uVar43 = (ulong)(iVar38 + 7);
                            sVar47 = *(short *)(*local_1b0 + lVar33);
                            if (sVar10 < *(short *)(*local_1b0 + lVar33)) {
                              sVar47 = sVar10;
                            }
                            *(short *)((long)local_150 + lVar33) = sVar47;
                            goto LAB_0021d2e8;
                          }
                        }
                      }
                    }
                  }
                  uVar43 = (ulong)uVar46;
                }
              }
LAB_0021d2e8:
              uVar46 = ((uVar27 - uVar45) - 8 >> 3) + 1;
              iVar38 = uVar46 * 8;
              if (6 < (uVar27 - 1) - uVar45) {
                uVar44 = 0;
                pauVar28 = (undefined1 (*) [16])(*local_1b0 + (ulong)uVar45 * 2 + lVar36);
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar45 * 2);
                do {
                  uVar44 = uVar44 + 1;
                  auVar17[2] = uVar101;
                  auVar17._0_2_ = sVar10;
                  auVar17[3] = uVar90;
                  auVar17[4] = uVar101;
                  auVar17[5] = uVar90;
                  auVar17[6] = uVar101;
                  auVar17[7] = uVar90;
                  auVar17[8] = uVar101;
                  auVar17[9] = uVar90;
                  auVar17[10] = uVar101;
                  auVar17[0xb] = uVar90;
                  auVar17[0xc] = uVar101;
                  auVar17[0xd] = uVar90;
                  auVar17[0xe] = uVar101;
                  auVar17[0xf] = uVar90;
                  auVar67 = NEON_smin(auVar17,*pauVar28,2);
                  puVar25[1] = auVar67._8_8_;
                  *puVar25 = auVar67._0_8_;
                  pauVar28 = pauVar28 + 1;
                  puVar25 = puVar25 + 2;
                } while (uVar44 < uVar46);
                uVar43 = (ulong)(uint)((int)uVar43 + iVar38);
                if (uVar27 - uVar45 == iVar38) goto LAB_0021d430;
              }
              uVar35 = -(uVar43 >> 0x1f) & 0xfffffffe00000000 | uVar43 << 1;
              iVar38 = (int)uVar43;
              sVar47 = *(short *)(*local_1b0 + uVar35);
              if (sVar10 < *(short *)(*local_1b0 + uVar35)) {
                sVar47 = sVar10;
              }
              *(short *)((long)local_150 + uVar35) = sVar47;
              if (iVar38 + 1 < iVar42) {
                lVar36 = uVar35 + 2;
                sVar47 = *(short *)(*local_1b0 + lVar36);
                if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                  sVar47 = sVar10;
                }
                *(short *)((long)local_150 + lVar36) = sVar47;
                if (iVar38 + 2 < iVar42) {
                  lVar36 = uVar35 + 4;
                  sVar47 = *(short *)(*local_1b0 + lVar36);
                  if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                    sVar47 = sVar10;
                  }
                  *(short *)((long)local_150 + lVar36) = sVar47;
                  if (iVar38 + 3 < iVar42) {
                    lVar36 = uVar35 + 6;
                    sVar47 = *(short *)(*local_1b0 + lVar36);
                    if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                      sVar47 = sVar10;
                    }
                    *(short *)((long)local_150 + lVar36) = sVar47;
                    if (iVar38 + 4 < iVar42) {
                      lVar36 = uVar35 + 8;
                      sVar47 = *(short *)(*local_1b0 + lVar36);
                      if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                        sVar47 = sVar10;
                      }
                      *(short *)((long)local_150 + lVar36) = sVar47;
                      if (iVar38 + 5 < iVar42) {
                        lVar36 = uVar35 + 10;
                        sVar47 = *(short *)(*local_1b0 + lVar36);
                        if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                          sVar47 = sVar10;
                        }
                        *(short *)((long)local_150 + lVar36) = sVar47;
                        if (iVar38 + 6 < iVar42) {
                          lVar36 = uVar35 + 0xc;
                          sVar47 = *(short *)(*local_1b0 + lVar36);
                          if (sVar10 < *(short *)(*local_1b0 + lVar36)) {
                            sVar47 = sVar10;
                          }
                          *(short *)((long)local_150 + lVar36) = sVar47;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_0021d430:
          iVar32 = iVar32 + 1;
          local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 2);
          local_150 = (undefined8 *)((long)local_150 + local_110[0] * 2);
        } while (iVar32 != iVar26);
        goto LAB_0021b3d4;
      case 3:
        iVar26 = 1;
LAB_0021ce70:
        iVar32 = 0;
        uVar6 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        uVar5 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        do {
          if (iVar42 + -7 < 1) {
            uVar43 = 0;
          }
          else {
            uVar43 = 0;
            puVar25 = local_150;
            pauVar28 = local_1b0;
            do {
              uVar16 = *(undefined8 *)(*pauVar28 + 8);
              uVar15 = *(undefined8 *)*pauVar28;
              uVar27 = (int)uVar43 + 8;
              uVar43 = (ulong)uVar27;
              sVar47 = -(ushort)(sVar10 < (short)uVar15);
              sVar74 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x10));
              sVar75 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x20));
              sVar77 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x30));
              sVar78 = -(ushort)(sVar10 < (short)uVar16);
              sVar80 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x10));
              sVar81 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x20));
              sVar83 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x30));
              auVar59._0_8_ =
                   CONCAT17((byte)((ushort)sVar77 >> 8) & (byte)((ulong)uVar15 >> 0x38),
                            CONCAT16((byte)sVar77 & (byte)((ulong)uVar15 >> 0x30),
                                     CONCAT15((byte)((ushort)sVar75 >> 8) &
                                              (byte)((ulong)uVar15 >> 0x28),
                                              CONCAT14((byte)sVar75 & (byte)((ulong)uVar15 >> 0x20),
                                                       CONCAT13((byte)((ushort)sVar74 >> 8) &
                                                                (byte)((ulong)uVar15 >> 0x18),
                                                                CONCAT12((byte)sVar74 &
                                                                         (byte)((ulong)uVar15 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ushort)
                                                  sVar47 >> 8) & (byte)((ulong)uVar15 >> 8),
                                                  (byte)sVar47 & (byte)uVar15)))))));
              auVar59[8] = (byte)sVar78 & (byte)uVar16;
              auVar59[9] = (byte)((ushort)sVar78 >> 8) & (byte)((ulong)uVar16 >> 8);
              auVar59[10] = (byte)sVar80 & (byte)((ulong)uVar16 >> 0x10);
              auVar59[0xb] = (byte)((ushort)sVar80 >> 8) & (byte)((ulong)uVar16 >> 0x18);
              auVar59[0xc] = (byte)sVar81 & (byte)((ulong)uVar16 >> 0x20);
              auVar59[0xd] = (byte)((ushort)sVar81 >> 8) & (byte)((ulong)uVar16 >> 0x28);
              auVar59[0xe] = (byte)sVar83 & (byte)((ulong)uVar16 >> 0x30);
              auVar59[0xf] = (byte)((ushort)sVar83 >> 8) & (byte)((ulong)uVar16 >> 0x38);
              puVar25[1] = auVar59._8_8_;
              *puVar25 = auVar59._0_8_;
              puVar25 = puVar25 + 2;
              pauVar28 = pauVar28 + 1;
            } while ((int)uVar27 < iVar42 + -7);
          }
          iVar38 = (int)uVar43;
          if (iVar38 < iVar42) {
            uVar27 = iVar42 - iVar38;
            lVar36 = (long)iVar38 * 2;
            puVar3 = *local_1b0 + lVar36;
            if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                 puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 0xd)) {
              lVar33 = 0;
              do {
                sVar47 = *(short *)(puVar3 + lVar33);
                if (sVar47 <= sVar10) {
                  sVar47 = 0;
                }
                *(short *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = sVar47;
                lVar33 = lVar33 + 2;
              } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 2);
            }
            else {
              uVar45 = -((uint)((ulong)puVar3 >> 1) & 7) & 7;
              uVar46 = uVar27;
              if (uVar45 < uVar27) {
                uVar46 = uVar45;
              }
              if (uVar46 != 0) {
                lVar33 = (long)iVar38 * 2;
                sVar47 = *(short *)(*local_1b0 + lVar33);
                if (sVar47 <= sVar10) {
                  sVar47 = 0;
                }
                *(short *)((long)local_150 + lVar33) = sVar47;
                if (uVar46 == 1) {
                  uVar43 = (ulong)(iVar38 + 1);
                }
                else {
                  uVar45 = iVar38 + 2;
                  sVar47 = *(short *)(*local_1b0 + lVar33 + 2);
                  if (sVar47 <= sVar10) {
                    sVar47 = 0;
                  }
                  *(short *)((long)local_150 + lVar33 + 2) = sVar47;
                  if (uVar46 != 2) {
                    uVar45 = iVar38 + 3;
                    sVar47 = *(short *)(*local_1b0 + lVar33 + 4);
                    if (sVar47 <= sVar10) {
                      sVar47 = 0;
                    }
                    *(short *)((long)local_150 + lVar33 + 4) = sVar47;
                    if (uVar46 != 3) {
                      uVar45 = iVar38 + 4;
                      sVar47 = *(short *)(*local_1b0 + lVar33 + 6);
                      if (sVar47 <= sVar10) {
                        sVar47 = 0;
                      }
                      *(short *)((long)local_150 + lVar33 + 6) = sVar47;
                      if (uVar46 != 4) {
                        uVar45 = iVar38 + 5;
                        sVar47 = *(short *)(*local_1b0 + lVar33 + 8);
                        if (sVar47 <= sVar10) {
                          sVar47 = 0;
                        }
                        *(short *)((long)local_150 + lVar33 + 8) = sVar47;
                        if (uVar46 != 5) {
                          uVar45 = iVar38 + 6;
                          sVar47 = *(short *)(*local_1b0 + lVar33 + 10);
                          if (sVar47 <= sVar10) {
                            sVar47 = 0;
                          }
                          *(short *)((long)local_150 + lVar33 + 10) = sVar47;
                          if (uVar46 == 7) {
                            uVar43 = (ulong)(iVar38 + 7);
                            sVar47 = *(short *)(*local_1b0 + lVar33 + 0xc);
                            if (sVar47 <= sVar10) {
                              sVar47 = 0;
                            }
                            *(short *)((long)local_150 + lVar33 + 0xc) = sVar47;
                            goto LAB_0021cff8;
                          }
                        }
                      }
                    }
                  }
                  uVar43 = (ulong)uVar45;
                }
              }
LAB_0021cff8:
              uVar45 = ((uVar27 - uVar46) - 8 >> 3) + 1;
              iVar38 = uVar45 * 8;
              if (6 < (uVar27 - 1) - uVar46) {
                uVar44 = 0;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 2);
                puVar31 = (undefined8 *)(*local_1b0 + (ulong)uVar46 * 2 + lVar36);
                do {
                  uVar16 = puVar31[1];
                  uVar15 = *puVar31;
                  uVar44 = uVar44 + 1;
                  sVar47 = -(ushort)((short)uVar15 <= sVar10);
                  sVar74 = -(ushort)((short)((ulong)uVar15 >> 0x10) <= (short)((uint)uVar5 >> 0x10))
                  ;
                  sVar75 = -(ushort)((short)((ulong)uVar15 >> 0x20) <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar5)) >> 0x20));
                  sVar77 = -(ushort)((short)((ulong)uVar15 >> 0x30) <= sVar10);
                  sVar78 = -(ushort)((short)uVar16 <= sVar10);
                  sVar80 = -(ushort)((short)((ulong)uVar16 >> 0x10) <= (short)((uint)uVar6 >> 0x10))
                  ;
                  sVar81 = -(ushort)((short)((ulong)uVar16 >> 0x20) <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar6)) >> 0x20));
                  sVar83 = -(ushort)((short)((ulong)uVar16 >> 0x30) <= sVar10);
                  auVar60._0_8_ =
                       CONCAT17((byte)((ulong)uVar15 >> 0x38) & ~(byte)((ushort)sVar77 >> 8),
                                CONCAT16((byte)((ulong)uVar15 >> 0x30) & ~(byte)sVar77,
                                         CONCAT15((byte)((ulong)uVar15 >> 0x28) &
                                                  ~(byte)((ushort)sVar75 >> 8),
                                                  CONCAT14((byte)((ulong)uVar15 >> 0x20) &
                                                           ~(byte)sVar75,
                                                           CONCAT13((byte)((ulong)uVar15 >> 0x18) &
                                                                    ~(byte)((ushort)sVar74 >> 8),
                                                                    CONCAT12((byte)((ulong)uVar15 >>
                                                                                   0x10) &
                                                                             ~(byte)sVar74,
                                                                             CONCAT11((byte)((ulong)
                                                  uVar15 >> 8) & ~(byte)((ushort)sVar47 >> 8),
                                                  (byte)uVar15 & ~(byte)sVar47)))))));
                  auVar60[8] = (byte)uVar16 & ~(byte)sVar78;
                  auVar60[9] = (byte)((ulong)uVar16 >> 8) & ~(byte)((ushort)sVar78 >> 8);
                  auVar60[10] = (byte)((ulong)uVar16 >> 0x10) & ~(byte)sVar80;
                  auVar60[0xb] = (byte)((ulong)uVar16 >> 0x18) & ~(byte)((ushort)sVar80 >> 8);
                  auVar60[0xc] = (byte)((ulong)uVar16 >> 0x20) & ~(byte)sVar81;
                  auVar60[0xd] = (byte)((ulong)uVar16 >> 0x28) & ~(byte)((ushort)sVar81 >> 8);
                  auVar60[0xe] = (byte)((ulong)uVar16 >> 0x30) & ~(byte)sVar83;
                  auVar60[0xf] = (byte)((ulong)uVar16 >> 0x38) & ~(byte)((ushort)sVar83 >> 8);
                  puVar25[1] = auVar60._8_8_;
                  *puVar25 = auVar60._0_8_;
                  puVar25 = puVar25 + 2;
                  puVar31 = puVar31 + 2;
                } while (uVar44 < uVar45);
                uVar43 = (ulong)(uint)((int)uVar43 + iVar38);
                if (uVar27 - uVar46 == iVar38) goto LAB_0021d128;
              }
              uVar35 = -(uVar43 >> 0x1f) & 0xfffffffe00000000 | uVar43 << 1;
              iVar38 = (int)uVar43;
              sVar47 = *(short *)(*local_1b0 + uVar35);
              if (sVar47 <= sVar10) {
                sVar47 = 0;
              }
              *(short *)((long)local_150 + uVar35) = sVar47;
              if (iVar38 + 1 < iVar42) {
                sVar47 = *(short *)(*local_1b0 + uVar35 + 2);
                if (sVar47 <= sVar10) {
                  sVar47 = 0;
                }
                *(short *)((long)local_150 + uVar35 + 2) = sVar47;
                if (iVar38 + 2 < iVar42) {
                  sVar47 = *(short *)(*local_1b0 + uVar35 + 4);
                  if (sVar47 <= sVar10) {
                    sVar47 = 0;
                  }
                  *(short *)((long)local_150 + uVar35 + 4) = sVar47;
                  if (iVar38 + 3 < iVar42) {
                    sVar47 = *(short *)(*local_1b0 + uVar35 + 6);
                    if (sVar47 <= sVar10) {
                      sVar47 = 0;
                    }
                    *(short *)((long)local_150 + uVar35 + 6) = sVar47;
                    if (iVar38 + 4 < iVar42) {
                      sVar47 = *(short *)(*local_1b0 + uVar35 + 8);
                      if (sVar47 <= sVar10) {
                        sVar47 = 0;
                      }
                      *(short *)((long)local_150 + uVar35 + 8) = sVar47;
                      if (iVar38 + 5 < iVar42) {
                        sVar47 = *(short *)(*local_1b0 + uVar35 + 10);
                        if (sVar47 <= sVar10) {
                          sVar47 = 0;
                        }
                        *(short *)((long)local_150 + uVar35 + 10) = sVar47;
                        if (iVar38 + 6 < iVar42) {
                          sVar47 = *(short *)(*local_1b0 + uVar35 + 0xc);
                          if (sVar47 <= sVar10) {
                            sVar47 = 0;
                          }
                          *(short *)((long)local_150 + uVar35 + 0xc) = sVar47;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_0021d128:
          iVar32 = iVar32 + 1;
          local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 2);
          local_150 = (undefined8 *)((long)local_150 + local_110[0] * 2);
        } while (iVar32 != iVar26);
        goto LAB_0021b3d4;
      case 4:
        iVar26 = 1;
LAB_0021cb98:
        iVar32 = 0;
        uVar6 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        uVar5 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
        do {
          if (iVar42 + -7 < 1) {
            uVar43 = 0;
          }
          else {
            uVar43 = 0;
            puVar25 = local_150;
            pauVar28 = local_1b0;
            do {
              uVar16 = *(undefined8 *)(*pauVar28 + 8);
              uVar15 = *(undefined8 *)*pauVar28;
              uVar27 = (int)uVar43 + 8;
              uVar43 = (ulong)uVar27;
              sVar47 = -(ushort)(sVar10 < (short)uVar15);
              sVar74 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x10));
              sVar75 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x20));
              sVar77 = -(ushort)(sVar10 < (short)((ulong)uVar15 >> 0x30));
              sVar78 = -(ushort)(sVar10 < (short)uVar16);
              sVar80 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x10));
              sVar81 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x20));
              sVar83 = -(ushort)(sVar10 < (short)((ulong)uVar16 >> 0x30));
              auVar67._0_8_ =
                   CONCAT17((byte)((ulong)uVar15 >> 0x38) & ~(byte)((ushort)sVar77 >> 8),
                            CONCAT16((byte)((ulong)uVar15 >> 0x30) & ~(byte)sVar77,
                                     CONCAT15((byte)((ulong)uVar15 >> 0x28) &
                                              ~(byte)((ushort)sVar75 >> 8),
                                              CONCAT14((byte)((ulong)uVar15 >> 0x20) & ~(byte)sVar75
                                                       ,CONCAT13((byte)((ulong)uVar15 >> 0x18) &
                                                                 ~(byte)((ushort)sVar74 >> 8),
                                                                 CONCAT12((byte)((ulong)uVar15 >>
                                                                                0x10) &
                                                                          ~(byte)sVar74,
                                                                          CONCAT11((byte)((ulong)
                                                  uVar15 >> 8) & ~(byte)((ushort)sVar47 >> 8),
                                                  (byte)uVar15 & ~(byte)sVar47)))))));
              auVar67[8] = (byte)uVar16 & ~(byte)sVar78;
              auVar67[9] = (byte)((ulong)uVar16 >> 8) & ~(byte)((ushort)sVar78 >> 8);
              auVar67[10] = (byte)((ulong)uVar16 >> 0x10) & ~(byte)sVar80;
              auVar67[0xb] = (byte)((ulong)uVar16 >> 0x18) & ~(byte)((ushort)sVar80 >> 8);
              auVar67[0xc] = (byte)((ulong)uVar16 >> 0x20) & ~(byte)sVar81;
              auVar67[0xd] = (byte)((ulong)uVar16 >> 0x28) & ~(byte)((ushort)sVar81 >> 8);
              auVar67[0xe] = (byte)((ulong)uVar16 >> 0x30) & ~(byte)sVar83;
              auVar67[0xf] = (byte)((ulong)uVar16 >> 0x38) & ~(byte)((ushort)sVar83 >> 8);
              puVar25[1] = auVar67._8_8_;
              *puVar25 = auVar67._0_8_;
              puVar25 = puVar25 + 2;
              pauVar28 = pauVar28 + 1;
            } while ((int)uVar27 < iVar42 + -7);
          }
          iVar38 = (int)uVar43;
          if (iVar38 < iVar42) {
            uVar27 = iVar42 - iVar38;
            lVar36 = (long)iVar38 * 2;
            puVar3 = *local_1b0 + lVar36;
            if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
                 puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 0xd)) {
              lVar33 = 0;
              do {
                sVar47 = *(short *)(puVar3 + lVar33);
                if (sVar10 < sVar47) {
                  sVar47 = 0;
                }
                *(short *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = sVar47;
                lVar33 = lVar33 + 2;
              } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 2);
            }
            else {
              uVar45 = -((uint)((ulong)puVar3 >> 1) & 7) & 7;
              uVar46 = uVar27;
              if (uVar45 < uVar27) {
                uVar46 = uVar45;
              }
              if (uVar46 != 0) {
                lVar33 = (long)iVar38 * 2;
                sVar47 = *(short *)(*local_1b0 + lVar33);
                if (sVar10 < sVar47) {
                  sVar47 = 0;
                }
                *(short *)((long)local_150 + lVar33) = sVar47;
                if (uVar46 == 1) {
                  uVar43 = (ulong)(iVar38 + 1);
                }
                else {
                  uVar45 = iVar38 + 2;
                  sVar47 = *(short *)(*local_1b0 + lVar33 + 2);
                  if (sVar10 < sVar47) {
                    sVar47 = 0;
                  }
                  *(short *)((long)local_150 + lVar33 + 2) = sVar47;
                  if (uVar46 != 2) {
                    uVar45 = iVar38 + 3;
                    sVar47 = *(short *)(*local_1b0 + lVar33 + 4);
                    if (sVar10 < sVar47) {
                      sVar47 = 0;
                    }
                    *(short *)((long)local_150 + lVar33 + 4) = sVar47;
                    if (uVar46 != 3) {
                      uVar45 = iVar38 + 4;
                      sVar47 = *(short *)(*local_1b0 + lVar33 + 6);
                      if (sVar10 < sVar47) {
                        sVar47 = 0;
                      }
                      *(short *)((long)local_150 + lVar33 + 6) = sVar47;
                      if (uVar46 != 4) {
                        uVar45 = iVar38 + 5;
                        sVar47 = *(short *)(*local_1b0 + lVar33 + 8);
                        if (sVar10 < sVar47) {
                          sVar47 = 0;
                        }
                        *(short *)((long)local_150 + lVar33 + 8) = sVar47;
                        if (uVar46 != 5) {
                          uVar45 = iVar38 + 6;
                          sVar47 = *(short *)(*local_1b0 + lVar33 + 10);
                          if (sVar10 < sVar47) {
                            sVar47 = 0;
                          }
                          *(short *)((long)local_150 + lVar33 + 10) = sVar47;
                          if (uVar46 == 7) {
                            uVar43 = (ulong)(iVar38 + 7);
                            sVar47 = *(short *)(*local_1b0 + lVar33 + 0xc);
                            if (sVar10 < sVar47) {
                              sVar47 = 0;
                            }
                            *(short *)((long)local_150 + lVar33 + 0xc) = sVar47;
                            goto LAB_0021cd20;
                          }
                        }
                      }
                    }
                  }
                  uVar43 = (ulong)uVar45;
                }
              }
LAB_0021cd20:
              uVar45 = ((uVar27 - uVar46) - 8 >> 3) + 1;
              iVar38 = uVar45 * 8;
              if (6 < (uVar27 - 1) - uVar46) {
                uVar44 = 0;
                puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar46 * 2);
                puVar31 = (undefined8 *)(*local_1b0 + (ulong)uVar46 * 2 + lVar36);
                do {
                  uVar16 = puVar31[1];
                  uVar15 = *puVar31;
                  uVar44 = uVar44 + 1;
                  sVar47 = -(ushort)((short)uVar15 <= sVar10);
                  sVar74 = -(ushort)((short)((ulong)uVar15 >> 0x10) <= (short)((uint)uVar5 >> 0x10))
                  ;
                  sVar75 = -(ushort)((short)((ulong)uVar15 >> 0x20) <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar5)) >> 0x20));
                  sVar77 = -(ushort)((short)((ulong)uVar15 >> 0x30) <= sVar10);
                  sVar78 = -(ushort)((short)uVar16 <= sVar10);
                  sVar80 = -(ushort)((short)((ulong)uVar16 >> 0x10) <= (short)((uint)uVar6 >> 0x10))
                  ;
                  sVar81 = -(ushort)((short)((ulong)uVar16 >> 0x20) <=
                                    (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar6)) >> 0x20));
                  sVar83 = -(ushort)((short)((ulong)uVar16 >> 0x30) <= sVar10);
                  auVar58._0_8_ =
                       CONCAT17((byte)((ushort)sVar77 >> 8) & (byte)((ulong)uVar15 >> 0x38),
                                CONCAT16((byte)sVar77 & (byte)((ulong)uVar15 >> 0x30),
                                         CONCAT15((byte)((ushort)sVar75 >> 8) &
                                                  (byte)((ulong)uVar15 >> 0x28),
                                                  CONCAT14((byte)sVar75 &
                                                           (byte)((ulong)uVar15 >> 0x20),
                                                           CONCAT13((byte)((ushort)sVar74 >> 8) &
                                                                    (byte)((ulong)uVar15 >> 0x18),
                                                                    CONCAT12((byte)sVar74 &
                                                                             (byte)((ulong)uVar15 >>
                                                                                   0x10),
                                                                             CONCAT11((byte)((ushort
                                                  )sVar47 >> 8) & (byte)((ulong)uVar15 >> 8),
                                                  (byte)sVar47 & (byte)uVar15)))))));
                  auVar58[8] = (byte)sVar78 & (byte)uVar16;
                  auVar58[9] = (byte)((ushort)sVar78 >> 8) & (byte)((ulong)uVar16 >> 8);
                  auVar58[10] = (byte)sVar80 & (byte)((ulong)uVar16 >> 0x10);
                  auVar58[0xb] = (byte)((ushort)sVar80 >> 8) & (byte)((ulong)uVar16 >> 0x18);
                  auVar58[0xc] = (byte)sVar81 & (byte)((ulong)uVar16 >> 0x20);
                  auVar58[0xd] = (byte)((ushort)sVar81 >> 8) & (byte)((ulong)uVar16 >> 0x28);
                  auVar58[0xe] = (byte)sVar83 & (byte)((ulong)uVar16 >> 0x30);
                  auVar58[0xf] = (byte)((ushort)sVar83 >> 8) & (byte)((ulong)uVar16 >> 0x38);
                  puVar25[1] = auVar58._8_8_;
                  *puVar25 = auVar58._0_8_;
                  puVar25 = puVar25 + 2;
                  puVar31 = puVar31 + 2;
                } while (uVar44 < uVar45);
                uVar43 = (ulong)(uint)((int)uVar43 + iVar38);
                if (uVar27 - uVar46 == iVar38) goto LAB_0021ce50;
              }
              uVar35 = -(uVar43 >> 0x1f) & 0xfffffffe00000000 | uVar43 << 1;
              iVar38 = (int)uVar43;
              sVar47 = *(short *)(*local_1b0 + uVar35);
              if (sVar10 < sVar47) {
                sVar47 = 0;
              }
              *(short *)((long)local_150 + uVar35) = sVar47;
              if (iVar38 + 1 < iVar42) {
                sVar47 = *(short *)(*local_1b0 + uVar35 + 2);
                if (sVar10 < sVar47) {
                  sVar47 = 0;
                }
                *(short *)((long)local_150 + uVar35 + 2) = sVar47;
                if (iVar38 + 2 < iVar42) {
                  sVar47 = *(short *)(*local_1b0 + uVar35 + 4);
                  if (sVar10 < sVar47) {
                    sVar47 = 0;
                  }
                  *(short *)((long)local_150 + uVar35 + 4) = sVar47;
                  if (iVar38 + 3 < iVar42) {
                    sVar47 = *(short *)(*local_1b0 + uVar35 + 6);
                    if (sVar10 < sVar47) {
                      sVar47 = 0;
                    }
                    *(short *)((long)local_150 + uVar35 + 6) = sVar47;
                    if (iVar38 + 4 < iVar42) {
                      sVar47 = *(short *)(*local_1b0 + uVar35 + 8);
                      if (sVar10 < sVar47) {
                        sVar47 = 0;
                      }
                      *(short *)((long)local_150 + uVar35 + 8) = sVar47;
                      if (iVar38 + 5 < iVar42) {
                        sVar47 = *(short *)(*local_1b0 + uVar35 + 10);
                        if (sVar10 < sVar47) {
                          sVar47 = 0;
                        }
                        *(short *)((long)local_150 + uVar35 + 10) = sVar47;
                        if (iVar38 + 6 < iVar42) {
                          sVar47 = *(short *)(*local_1b0 + uVar35 + 0xc);
                          if (sVar10 < sVar47) {
                            sVar47 = 0;
                          }
                          *(short *)((long)local_150 + uVar35 + 0xc) = sVar47;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
LAB_0021ce50:
          iVar32 = iVar32 + 1;
          local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 2);
          local_150 = (undefined8 *)((long)local_150 + local_110[0] * 2);
        } while (iVar32 != iVar26);
        goto LAB_0021b3d4;
      default:
switchD_0021c884_default:
        this = (String *)&local_1e0;
        local_1e0 = 0;
        local_1d8 = 0;
        cv::String::allocate(this,0);
        cv::error(-5,this,"void cv::thresh_16s(const cv::Mat&, cv::Mat&, short int, short int, int)"
                  ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x28c);
LAB_0021c788:
        cv::String::deallocate(this);
        goto LAB_0021b3d4;
      }
    }
    iVar32 = 0;
    uVar6 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
    uVar5 = CONCAT13(uVar90,CONCAT12(uVar101,sVar10));
    do {
      if (iVar42 + -7 < 1) {
        uVar43 = 0;
      }
      else {
        uVar43 = 0;
        puVar25 = local_150;
        pauVar28 = local_1b0;
        do {
          uVar27 = (int)uVar43 + 8;
          uVar43 = (ulong)uVar27;
          sVar47 = -(ushort)(sVar10 < *(short *)*pauVar28);
          sVar74 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 2));
          sVar75 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 4));
          sVar77 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 6));
          sVar78 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 8));
          sVar80 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 10));
          sVar81 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 0xc));
          sVar83 = -(ushort)(sVar10 < *(short *)(*pauVar28 + 0xe));
          auVar56._0_8_ =
               CONCAT17((byte)((ushort)sVar77 >> 8) & bVar86,
                        CONCAT16((byte)sVar77 & bVar87,
                                 CONCAT15((byte)((ushort)sVar75 >> 8) & bVar86,
                                          CONCAT14((byte)sVar75 & bVar87,
                                                   CONCAT13((byte)((ushort)sVar74 >> 8) & bVar86,
                                                            CONCAT12((byte)sVar74 & bVar87,
                                                                     CONCAT11((byte)((ushort)sVar47
                                                                                    >> 8) & bVar86,
                                                                              (byte)sVar47 & bVar87)
                                                                    ))))));
          auVar56[8] = (byte)sVar78 & bVar87;
          auVar56[9] = (byte)((ushort)sVar78 >> 8) & bVar86;
          auVar56[10] = (byte)sVar80 & bVar87;
          auVar56[0xb] = (byte)((ushort)sVar80 >> 8) & bVar86;
          auVar56[0xc] = (byte)sVar81 & bVar87;
          auVar56[0xd] = (byte)((ushort)sVar81 >> 8) & bVar86;
          auVar56[0xe] = (byte)sVar83 & bVar87;
          auVar56[0xf] = (byte)((ushort)sVar83 >> 8) & bVar86;
          puVar25[1] = auVar56._8_8_;
          *puVar25 = auVar56._0_8_;
          puVar25 = puVar25 + 2;
          pauVar28 = pauVar28 + 1;
        } while ((int)uVar27 < iVar42 + -7);
      }
      iVar38 = (int)uVar43;
      if (iVar38 < iVar42) {
        uVar27 = iVar42 - iVar38;
        lVar36 = (long)iVar38 * 2;
        puVar3 = *local_1b0 + lVar36;
        if (((undefined1 *)((long)local_150 + lVar36) < local_1b0[1] + lVar36 &&
             puVar3 < (undefined1 *)((long)local_150 + lVar36 + 0x10)) || (uVar27 < 0xd)) {
          lVar33 = 0;
          do {
            uVar111 = uVar110;
            if (*(short *)(puVar3 + lVar33) <= sVar10) {
              uVar111 = 0;
            }
            *(undefined2 *)((undefined1 *)((long)local_150 + lVar36) + lVar33) = uVar111;
            lVar33 = lVar33 + 2;
          } while (lVar33 != ((ulong)(uint)((iVar42 + -1) - iVar38) + 1) * 2);
        }
        else {
          uVar45 = -((uint)((ulong)puVar3 >> 1) & 7) & 7;
          if (uVar27 < uVar45) {
            uVar45 = uVar27;
          }
          if (uVar45 != 0) {
            lVar33 = (long)iVar38 * 2;
            uVar111 = uVar110;
            if (*(short *)(*local_1b0 + lVar33) <= sVar10) {
              uVar111 = 0;
            }
            *(undefined2 *)((long)local_150 + lVar33) = uVar111;
            if (uVar45 == 1) {
              uVar43 = (ulong)(iVar38 + 1);
            }
            else {
              uVar46 = iVar38 + 2;
              uVar111 = uVar110;
              if (*(short *)(*local_1b0 + lVar33 + 2) <= sVar10) {
                uVar111 = 0;
              }
              *(undefined2 *)((long)local_150 + lVar33 + 2) = uVar111;
              if (uVar45 != 2) {
                uVar46 = iVar38 + 3;
                uVar111 = uVar110;
                if (*(short *)(*local_1b0 + lVar33 + 4) <= sVar10) {
                  uVar111 = 0;
                }
                *(undefined2 *)((long)local_150 + lVar33 + 4) = uVar111;
                if (uVar45 != 3) {
                  uVar46 = iVar38 + 4;
                  uVar111 = uVar110;
                  if (*(short *)(*local_1b0 + lVar33 + 6) <= sVar10) {
                    uVar111 = 0;
                  }
                  *(undefined2 *)((long)local_150 + lVar33 + 6) = uVar111;
                  if (uVar45 != 4) {
                    uVar46 = iVar38 + 5;
                    uVar111 = uVar110;
                    if (*(short *)(*local_1b0 + lVar33 + 8) <= sVar10) {
                      uVar111 = 0;
                    }
                    *(undefined2 *)((long)local_150 + lVar33 + 8) = uVar111;
                    if (uVar45 != 5) {
                      uVar46 = iVar38 + 6;
                      uVar111 = uVar110;
                      if (*(short *)(*local_1b0 + lVar33 + 10) <= sVar10) {
                        uVar111 = 0;
                      }
                      *(undefined2 *)((long)local_150 + lVar33 + 10) = uVar111;
                      if (uVar45 == 7) {
                        uVar43 = (ulong)(iVar38 + 7);
                        uVar111 = uVar110;
                        if (*(short *)(*local_1b0 + lVar33 + 0xc) <= sVar10) {
                          uVar111 = 0;
                        }
                        *(undefined2 *)((long)local_150 + lVar33 + 0xc) = uVar111;
                        goto LAB_0021ca48;
                      }
                    }
                  }
                }
              }
              uVar43 = (ulong)uVar46;
            }
          }
LAB_0021ca48:
          uVar46 = ((uVar27 - uVar45) - 8 >> 3) + 1;
          iVar38 = uVar46 * 8;
          if (6 < (uVar27 - 1) - uVar45) {
            uVar44 = 0;
            psVar37 = (short *)(*local_1b0 + (ulong)uVar45 * 2 + lVar36);
            puVar25 = (undefined8 *)((long)local_150 + lVar36 + (ulong)uVar45 * 2);
            do {
              uVar44 = uVar44 + 1;
              sVar47 = -(ushort)(psVar37[1] <= (short)((uint)uVar5 >> 0x10));
              sVar74 = -(ushort)(psVar37[2] <=
                                (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar5)) >> 0x20));
              sVar75 = -(ushort)(psVar37[5] <= (short)((uint)uVar6 >> 0x10));
              sVar77 = -(ushort)(psVar37[6] <=
                                (short)(CONCAT15(uVar90,CONCAT14(uVar101,uVar6)) >> 0x20));
              auVar57._0_8_ =
                   CONCAT17(bVar86 & ~(byte)((ushort)-(ushort)(psVar37[3] <= sVar10) >> 8),
                            CONCAT16(bVar87 & ~(byte)-(ushort)(psVar37[3] <= sVar10),
                                     CONCAT15(bVar86 & ~(byte)((ushort)sVar74 >> 8),
                                              CONCAT14(bVar87 & ~(byte)sVar74,
                                                       CONCAT13(bVar86 & ~(byte)((ushort)sVar47 >> 8
                                                                                ),
                                                                CONCAT12(bVar87 & ~(byte)sVar47,
                                                                         CONCAT11(bVar86 & ~(byte)((
                                                  ushort)-(ushort)(*psVar37 <= sVar10) >> 8),
                                                  bVar87 & ~(byte)-(ushort)(*psVar37 <= sVar10))))))
                                    ));
              auVar57[8] = bVar87 & ~(byte)-(ushort)(psVar37[4] <= sVar10);
              auVar57[9] = bVar86 & ~(byte)((ushort)-(ushort)(psVar37[4] <= sVar10) >> 8);
              auVar57[10] = bVar87 & ~(byte)sVar75;
              auVar57[0xb] = bVar86 & ~(byte)((ushort)sVar75 >> 8);
              auVar57[0xc] = bVar87 & ~(byte)sVar77;
              auVar57[0xd] = bVar86 & ~(byte)((ushort)sVar77 >> 8);
              auVar57[0xe] = bVar87 & ~(byte)-(ushort)(psVar37[7] <= sVar10);
              auVar57[0xf] = bVar86 & ~(byte)((ushort)-(ushort)(psVar37[7] <= sVar10) >> 8);
              puVar25[1] = auVar57._8_8_;
              *puVar25 = auVar57._0_8_;
              psVar37 = psVar37 + 8;
              puVar25 = puVar25 + 2;
            } while (uVar44 < uVar46);
            uVar43 = (ulong)(uint)((int)uVar43 + iVar38);
            if (iVar38 == uVar27 - uVar45) goto LAB_0021cb78;
          }
          uVar35 = -(uVar43 >> 0x1f) & 0xfffffffe00000000 | uVar43 << 1;
          iVar38 = (int)uVar43;
          uVar111 = uVar110;
          if (*(short *)(*local_1b0 + uVar35) <= sVar10) {
            uVar111 = 0;
          }
          *(undefined2 *)((long)local_150 + uVar35) = uVar111;
          if (iVar38 + 1 < iVar42) {
            uVar111 = uVar110;
            if (*(short *)(*local_1b0 + uVar35 + 2) <= sVar10) {
              uVar111 = 0;
            }
            *(undefined2 *)((long)local_150 + uVar35 + 2) = uVar111;
            if (iVar38 + 2 < iVar42) {
              uVar111 = uVar110;
              if (*(short *)(*local_1b0 + uVar35 + 4) <= sVar10) {
                uVar111 = 0;
              }
              *(undefined2 *)((long)local_150 + uVar35 + 4) = uVar111;
              if (iVar38 + 3 < iVar42) {
                uVar111 = uVar110;
                if (*(short *)(*local_1b0 + uVar35 + 6) <= sVar10) {
                  uVar111 = 0;
                }
                *(undefined2 *)((long)local_150 + uVar35 + 6) = uVar111;
                if (iVar38 + 4 < iVar42) {
                  uVar111 = uVar110;
                  if (*(short *)(*local_1b0 + uVar35 + 8) <= sVar10) {
                    uVar111 = 0;
                  }
                  *(undefined2 *)((long)local_150 + uVar35 + 8) = uVar111;
                  if (iVar38 + 5 < iVar42) {
                    uVar111 = uVar110;
                    if (*(short *)(*local_1b0 + uVar35 + 10) <= sVar10) {
                      uVar111 = 0;
                    }
                    *(undefined2 *)((long)local_150 + uVar35 + 10) = uVar111;
                    if (iVar38 + 6 < iVar42) {
                      uVar111 = uVar110;
                      if (*(short *)(*local_1b0 + uVar35 + 0xc) <= sVar10) {
                        uVar111 = 0;
                      }
                      *(undefined2 *)((long)local_150 + uVar35 + 0xc) = uVar111;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0021cb78:
      iVar32 = iVar32 + 1;
      local_1b0 = (undefined1 (*) [16])(*local_1b0 + local_170[0] * 2);
      local_150 = (undefined8 *)((long)local_150 + local_110[0] * 2);
    } while (iVar32 < iVar26);
    goto LAB_0021b3d4;
  }
  uVar27 = *(uint *)(param_1 + 0xd8);
  uVar45 = (uint)*(double *)(param_1 + 200);
  iVar26 = *local_180;
  iVar42 = local_180[1] + (local_1c0 >> 3 & 0x1ff) * local_180[1];
  bVar86 = (byte)uVar45;
  bVar87 = (byte)(int)*(double *)(param_1 + 0xd0);
  uVar43 = local_170[0];
  uVar35 = local_110[0];
  if (((local_1c0 >> 0xe & 1) != 0) && ((local_160 >> 0xe & 1) != 0)) {
    iVar42 = iVar42 * iVar26;
    iVar26 = 1;
    uVar43 = (ulong)iVar42;
    uVar35 = uVar43;
  }
  if (uVar27 < 5) {
    __c = uVar45 & 0xff;
    uVar44 = (int)*(double *)(param_1 + 0xd0) & 0xff;
    uVar46 = uVar45 & 0xff;
    uVar45 = uVar45 & 0xff;
    switch(uVar27) {
    case 0:
      memset((Range *)&local_100,0,(ulong)bVar86 + 1);
      if (uVar46 != 0xff) {
        memset((Range *)&local_100 + (ulong)bVar86 + 1,uVar44,(ulong)(0xfe - uVar46) + 1);
      }
      goto switchD_0021c89c_caseD_0;
    case 1:
      memset((Range *)&local_100,uVar44,(ulong)bVar86 + 1);
      if (uVar46 != 0xff) {
        memset((Range *)&local_100 + (ulong)bVar86 + 1,0,(ulong)(0xfe - __c) + 1);
      }
      goto switchD_0021c89c_caseD_1;
    case 3:
      __n = (ulong)bVar86 + 1;
      memset((Range *)&local_100,0,__n);
      iVar32 = uVar46 + 1;
      if (iVar32 != 0x100) {
        uVar46 = 0xff - uVar46;
        uVar27 = -(int)__n & 0xf;
        uVar4 = (ulong)uVar27;
        if (uVar46 < uVar27) {
          uVar4 = (ulong)uVar46;
        }
        if (uVar46 < 0x12) {
          uVar4 = (ulong)uVar46;
        }
        uVar27 = (uint)uVar4;
        if (uVar27 != 0) {
          ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
          iVar32 = uVar45 + 2;
          if (uVar27 != 1) {
            ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
            iVar32 = uVar45 + 3;
            if (uVar27 != 2) {
              ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
              iVar32 = uVar45 + 4;
              if (uVar27 != 3) {
                ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                iVar32 = uVar45 + 5;
                if (uVar27 != 4) {
                  ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                  iVar32 = uVar45 + 6;
                  if (uVar27 != 5) {
                    ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                    iVar32 = uVar45 + 7;
                    if (uVar27 != 6) {
                      ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                      iVar32 = uVar45 + 8;
                      if (uVar27 != 7) {
                        ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                        iVar32 = uVar45 + 9;
                        if (uVar27 != 8) {
                          ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                          iVar32 = uVar45 + 10;
                          if (uVar27 != 9) {
                            ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                            iVar32 = uVar45 + 0xb;
                            if (uVar27 != 10) {
                              ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                              iVar32 = uVar45 + 0xc;
                              if (uVar27 != 0xb) {
                                ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                iVar32 = uVar45 + 0xd;
                                if (uVar27 != 0xc) {
                                  ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                  iVar32 = uVar45 + 0xe;
                                  if (uVar27 != 0xd) {
                                    ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                    iVar32 = uVar45 + 0xf;
                                    if (uVar27 != 0xe) {
                                      ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                      iVar32 = uVar45 + 0x10;
                                      if (uVar27 != 0xf) {
                                        ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                        iVar32 = uVar45 + 0x11;
                                        if (uVar27 == 0x11) {
                                          ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                          iVar32 = __c + 0x12;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (uVar27 == uVar46) goto switchD_0021c89c_caseD_3;
        }
        iVar38 = ((uVar46 - uVar27) - 0x10 >> 4) + 1;
        if (0xe < (0xfe - __c) - uVar27) {
          lVar36 = uVar4 + __n;
          cVar8 = (char)iVar32;
          *(ulong *)(auStack_f8 + lVar36) =
               CONCAT17(cVar8 + (char)((ulong)_UNK_0021e648 >> 0x20),
                        CONCAT16(cVar8 + (char)_UNK_0021e648,
                                 CONCAT15(cVar8 + (char)((ulong)_DAT_0021e640 >> 0x20),
                                          CONCAT14(cVar8 + (char)_DAT_0021e640,
                                                   CONCAT13(cVar8 + (char)((ulong)_UNK_0021e638 >>
                                                                          0x20),
                                                            CONCAT12(cVar8 + (char)_UNK_0021e638,
                                                                     CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e630 >> 0x20),cVar8 + (char)_DAT_0021e630
                                                  )))))));
          *(ulong *)((Range *)&local_100 + lVar36) =
               CONCAT17(cVar8 + (char)((ulong)_UNK_0021e628 >> 0x20),
                        CONCAT16(cVar8 + (char)_UNK_0021e628,
                                 CONCAT15(cVar8 + (char)((ulong)_DAT_0021e620 >> 0x20),
                                          CONCAT14(cVar8 + (char)_DAT_0021e620,
                                                   CONCAT13(cVar8 + (char)((ulong)_UNK_0021e618 >>
                                                                          0x20),
                                                            CONCAT12(cVar8 + (char)_UNK_0021e618,
                                                                     CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e610 >> 0x20),cVar8 + (char)_DAT_0021e610
                                                  )))))));
          if (iVar38 != 1) {
            *(ulong *)(auStack_e8 + lVar36) =
                 CONCAT17(cVar8 + (char)((ulong)_UNK_0021e688 >> 0x20),
                          CONCAT16(cVar8 + (char)_UNK_0021e688,
                                   CONCAT15(cVar8 + (char)((ulong)_DAT_0021e680 >> 0x20),
                                            CONCAT14(cVar8 + (char)_DAT_0021e680,
                                                     CONCAT13(cVar8 + (char)((ulong)_UNK_0021e678 >>
                                                                            0x20),
                                                              CONCAT12(cVar8 + (char)_UNK_0021e678,
                                                                       CONCAT11(cVar8 + (char)((
                                                  ulong)_DAT_0021e670 >> 0x20),
                                                  cVar8 + (char)_DAT_0021e670)))))));
            *(ulong *)(local_f0 + lVar36) =
                 CONCAT17(cVar8 + (char)((ulong)_UNK_0021e668 >> 0x20),
                          CONCAT16(cVar8 + (char)_UNK_0021e668,
                                   CONCAT15(cVar8 + (char)((ulong)_DAT_0021e660 >> 0x20),
                                            CONCAT14(cVar8 + (char)_DAT_0021e660,
                                                     CONCAT13(cVar8 + (char)((ulong)_UNK_0021e608 >>
                                                                            0x20),
                                                              CONCAT12(cVar8 + (char)_UNK_0021e608,
                                                                       CONCAT11(cVar8 + (char)((
                                                  ulong)_DAT_0021e600 >> 0x20),
                                                  cVar8 + (char)_DAT_0021e600)))))));
            if (iVar38 != 2) {
              *(ulong *)(auStack_d8 + lVar36) =
                   CONCAT17(cVar8 + (char)((ulong)_UNK_0021e6c8 >> 0x20),
                            CONCAT16(cVar8 + (char)_UNK_0021e6c8,
                                     CONCAT15(cVar8 + (char)((ulong)_DAT_0021e6c0 >> 0x20),
                                              CONCAT14(cVar8 + (char)_DAT_0021e6c0,
                                                       CONCAT13(cVar8 + (char)((ulong)_UNK_0021e6b8
                                                                              >> 0x20),
                                                                CONCAT12(cVar8 + (char)_UNK_0021e6b8
                                                                         ,CONCAT11(cVar8 + (char)((
                                                  ulong)_DAT_0021e6b0 >> 0x20),
                                                  cVar8 + (char)_DAT_0021e6b0)))))));
              *(ulong *)(local_e0 + lVar36) =
                   CONCAT17(cVar8 + (char)((ulong)_UNK_0021e6a8 >> 0x20),
                            CONCAT16(cVar8 + (char)_UNK_0021e6a8,
                                     CONCAT15(cVar8 + (char)((ulong)_DAT_0021e6a0 >> 0x20),
                                              CONCAT14(cVar8 + (char)_DAT_0021e6a0,
                                                       CONCAT13(cVar8 + (char)((ulong)_UNK_0021e658
                                                                              >> 0x20),
                                                                CONCAT12(cVar8 + (char)_UNK_0021e658
                                                                         ,CONCAT11(cVar8 + (char)((
                                                  ulong)_DAT_0021e650 >> 0x20),
                                                  cVar8 + (char)_DAT_0021e650)))))));
              if (iVar38 != 3) {
                *(ulong *)(auStack_c8 + lVar36) =
                     CONCAT17(cVar8 + (char)((ulong)_UNK_0021e708 >> 0x20),
                              CONCAT16(cVar8 + (char)_UNK_0021e708,
                                       CONCAT15(cVar8 + (char)((ulong)_DAT_0021e700 >> 0x20),
                                                CONCAT14(cVar8 + (char)_DAT_0021e700,
                                                         CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e6f8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e6f8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e6f0 >> 0x20),cVar8 + (char)_DAT_0021e6f0
                                                  )))))));
                *(ulong *)(local_d0 + lVar36) =
                     CONCAT17(cVar8 + (char)((ulong)_UNK_0021e6e8 >> 0x20),
                              CONCAT16(cVar8 + (char)_UNK_0021e6e8,
                                       CONCAT15(cVar8 + (char)((ulong)_DAT_0021e6e0 >> 0x20),
                                                CONCAT14(cVar8 + (char)_DAT_0021e6e0,
                                                         CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e698 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e698,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e690 >> 0x20),cVar8 + (char)_DAT_0021e690
                                                  )))))));
                if (iVar38 != 4) {
                  *(ulong *)(auStack_b8 + lVar36) =
                       CONCAT17(cVar8 + (char)((ulong)_UNK_0021e748 >> 0x20),
                                CONCAT16(cVar8 + (char)_UNK_0021e748,
                                         CONCAT15(cVar8 + (char)((ulong)_DAT_0021e740 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e740,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e738 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e738,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e730 >> 0x20),cVar8 + (char)_DAT_0021e730
                                                  )))))));
                  *(ulong *)(local_c0 + lVar36) =
                       CONCAT17(cVar8 + (char)((ulong)_UNK_0021e728 >> 0x20),
                                CONCAT16(cVar8 + (char)_UNK_0021e728,
                                         CONCAT15(cVar8 + (char)((ulong)_DAT_0021e720 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e720,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e6d8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e6d8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e6d0 >> 0x20),cVar8 + (char)_DAT_0021e6d0
                                                  )))))));
                  if (iVar38 != 5) {
                    *(ulong *)(auStack_a8 + lVar36) =
                         CONCAT17(cVar8 + (char)((ulong)_UNK_0021e788 >> 0x20),
                                  CONCAT16(cVar8 + (char)_UNK_0021e788,
                                           CONCAT15(cVar8 + (char)((ulong)_DAT_0021e780 >> 0x20),
                                                    CONCAT14(cVar8 + (char)_DAT_0021e780,
                                                             CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e778 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e778,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e770 >> 0x20),cVar8 + (char)_DAT_0021e770
                                                  )))))));
                    *(ulong *)(local_b0 + lVar36) =
                         CONCAT17(cVar8 + (char)((ulong)_UNK_0021e768 >> 0x20),
                                  CONCAT16(cVar8 + (char)_UNK_0021e768,
                                           CONCAT15(cVar8 + (char)((ulong)_DAT_0021e760 >> 0x20),
                                                    CONCAT14(cVar8 + (char)_DAT_0021e760,
                                                             CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e718 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e718,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e710 >> 0x20),cVar8 + (char)_DAT_0021e710
                                                  )))))));
                    if (iVar38 != 6) {
                      *(ulong *)(auStack_98 + lVar36) =
                           CONCAT17(cVar8 + (char)((ulong)_UNK_0021e7c8 >> 0x20),
                                    CONCAT16(cVar8 + (char)_UNK_0021e7c8,
                                             CONCAT15(cVar8 + (char)((ulong)_DAT_0021e7c0 >> 0x20),
                                                      CONCAT14(cVar8 + (char)_DAT_0021e7c0,
                                                               CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e7b8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e7b8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e7b0 >> 0x20),cVar8 + (char)_DAT_0021e7b0
                                                  )))))));
                      *(ulong *)(local_a0 + lVar36) =
                           CONCAT17(cVar8 + (char)((ulong)_UNK_0021e7a8 >> 0x20),
                                    CONCAT16(cVar8 + (char)_UNK_0021e7a8,
                                             CONCAT15(cVar8 + (char)((ulong)_DAT_0021e7a0 >> 0x20),
                                                      CONCAT14(cVar8 + (char)_DAT_0021e7a0,
                                                               CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e758 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e758,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e750 >> 0x20),cVar8 + (char)_DAT_0021e750
                                                  )))))));
                      if (iVar38 != 7) {
                        *(ulong *)(auStack_88 + lVar36) =
                             CONCAT17(cVar8 + (char)((ulong)_UNK_0021e808 >> 0x20),
                                      CONCAT16(cVar8 + (char)_UNK_0021e808,
                                               CONCAT15(cVar8 + (char)((ulong)_DAT_0021e800 >> 0x20)
                                                        ,CONCAT14(cVar8 + (char)_DAT_0021e800,
                                                                  CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e7f8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e7f8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e7f0 >> 0x20),cVar8 + (char)_DAT_0021e7f0
                                                  )))))));
                        *(ulong *)(local_90 + lVar36) =
                             CONCAT17(cVar8 + (char)((ulong)_UNK_0021e7e8 >> 0x20),
                                      CONCAT16(cVar8 + (char)_UNK_0021e7e8,
                                               CONCAT15(cVar8 + (char)((ulong)_DAT_0021e7e0 >> 0x20)
                                                        ,CONCAT14(cVar8 + (char)_DAT_0021e7e0,
                                                                  CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e798 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e798,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e790 >> 0x20),cVar8 + (char)_DAT_0021e790
                                                  )))))));
                        if (iVar38 != 8) {
                          *(ulong *)(auStack_78 + lVar36) =
                               CONCAT17(cVar8 + (char)((ulong)_UNK_0021e848 >> 0x20),
                                        CONCAT16(cVar8 + (char)_UNK_0021e848,
                                                 CONCAT15(cVar8 + (char)((ulong)_DAT_0021e840 >>
                                                                        0x20),
                                                          CONCAT14(cVar8 + (char)_DAT_0021e840,
                                                                   CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e838 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e838,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e830 >> 0x20),cVar8 + (char)_DAT_0021e830
                                                  )))))));
                          *(ulong *)(local_80 + lVar36) =
                               CONCAT17(cVar8 + (char)((ulong)_UNK_0021e828 >> 0x20),
                                        CONCAT16(cVar8 + (char)_UNK_0021e828,
                                                 CONCAT15(cVar8 + (char)((ulong)_DAT_0021e820 >>
                                                                        0x20),
                                                          CONCAT14(cVar8 + (char)_DAT_0021e820,
                                                                   CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e7d8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e7d8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e7d0 >> 0x20),cVar8 + (char)_DAT_0021e7d0
                                                  )))))));
                          if (iVar38 != 9) {
                            *(ulong *)(auStack_68 + lVar36) =
                                 CONCAT17(cVar8 + (char)((ulong)_UNK_0021e888 >> 0x20),
                                          CONCAT16(cVar8 + (char)_UNK_0021e888,
                                                   CONCAT15(cVar8 + (char)((ulong)_DAT_0021e880 >>
                                                                          0x20),
                                                            CONCAT14(cVar8 + (char)_DAT_0021e880,
                                                                     CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e878 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e878,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e870 >> 0x20),cVar8 + (char)_DAT_0021e870
                                                  )))))));
                            *(ulong *)(local_70 + lVar36) =
                                 CONCAT17(cVar8 + (char)((ulong)_UNK_0021e868 >> 0x20),
                                          CONCAT16(cVar8 + (char)_UNK_0021e868,
                                                   CONCAT15(cVar8 + (char)((ulong)_DAT_0021e860 >>
                                                                          0x20),
                                                            CONCAT14(cVar8 + (char)_DAT_0021e860,
                                                                     CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e818 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e818,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e810 >> 0x20),cVar8 + (char)_DAT_0021e810
                                                  )))))));
                            if (iVar38 != 10) {
                              *(ulong *)(auStack_58 + lVar36) =
                                   CONCAT17(cVar8 + (char)((ulong)_UNK_0021e8c8 >> 0x20),
                                            CONCAT16(cVar8 + (char)_UNK_0021e8c8,
                                                     CONCAT15(cVar8 + (char)((ulong)_DAT_0021e8c0 >>
                                                                            0x20),
                                                              CONCAT14(cVar8 + (char)_DAT_0021e8c0,
                                                                       CONCAT13(cVar8 + (char)((
                                                  ulong)_UNK_0021e8b8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e8b8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e8b0 >> 0x20),cVar8 + (char)_DAT_0021e8b0
                                                  )))))));
                              *(ulong *)(local_60 + lVar36) =
                                   CONCAT17(cVar8 + (char)((ulong)_UNK_0021e8a8 >> 0x20),
                                            CONCAT16(cVar8 + (char)_UNK_0021e8a8,
                                                     CONCAT15(cVar8 + (char)((ulong)_DAT_0021e8a0 >>
                                                                            0x20),
                                                              CONCAT14(cVar8 + (char)_DAT_0021e8a0,
                                                                       CONCAT13(cVar8 + (char)((
                                                  ulong)_UNK_0021e858 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e858,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e850 >> 0x20),cVar8 + (char)_DAT_0021e850
                                                  )))))));
                              if (iVar38 != 0xb) {
                                *(ulong *)(auStack_48 + lVar36) =
                                     CONCAT17(cVar8 + (char)((ulong)_UNK_0021e908 >> 0x20),
                                              CONCAT16(cVar8 + (char)_UNK_0021e908,
                                                       CONCAT15(cVar8 + (char)((ulong)_DAT_0021e900
                                                                              >> 0x20),
                                                                CONCAT14(cVar8 + (char)_DAT_0021e900
                                                                         ,CONCAT13(cVar8 + (char)((
                                                  ulong)_UNK_0021e8f8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e8f8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e8f0 >> 0x20),cVar8 + (char)_DAT_0021e8f0
                                                  )))))));
                                *(ulong *)(local_50 + lVar36) =
                                     CONCAT17(cVar8 + (char)((ulong)_UNK_0021e8e8 >> 0x20),
                                              CONCAT16(cVar8 + (char)_UNK_0021e8e8,
                                                       CONCAT15(cVar8 + (char)((ulong)_DAT_0021e8e0
                                                                              >> 0x20),
                                                                CONCAT14(cVar8 + (char)_DAT_0021e8e0
                                                                         ,CONCAT13(cVar8 + (char)((
                                                  ulong)_UNK_0021e898 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e898,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e890 >> 0x20),cVar8 + (char)_DAT_0021e890
                                                  )))))));
                                if (iVar38 != 0xc) {
                                  *(ulong *)(auStack_38 + lVar36) =
                                       CONCAT17(cVar8 + (char)((ulong)_UNK_0021e948 >> 0x20),
                                                CONCAT16(cVar8 + (char)_UNK_0021e948,
                                                         CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e940 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e940,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e938 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e938,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e930 >> 0x20),cVar8 + (char)_DAT_0021e930
                                                  )))))));
                                  *(ulong *)(local_40 + lVar36) =
                                       CONCAT17(cVar8 + (char)((ulong)_UNK_0021e928 >> 0x20),
                                                CONCAT16(cVar8 + (char)_UNK_0021e928,
                                                         CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e920 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e920,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e8d8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e8d8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e8d0 >> 0x20),cVar8 + (char)_DAT_0021e8d0
                                                  )))))));
                                  if (iVar38 != 0xd) {
                                    *(ulong *)(auStack_28 + lVar36) =
                                         CONCAT17(cVar8 + (char)((ulong)_UNK_0021e988 >> 0x20),
                                                  CONCAT16(cVar8 + (char)_UNK_0021e988,
                                                           CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e980 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e980,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e978 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e978,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e970 >> 0x20),cVar8 + (char)_DAT_0021e970
                                                  )))))));
                                    *(ulong *)(local_30 + lVar36) =
                                         CONCAT17(cVar8 + (char)((ulong)_UNK_0021e968 >> 0x20),
                                                  CONCAT16(cVar8 + (char)_UNK_0021e968,
                                                           CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e960 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e960,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e918 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e918,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e910 >> 0x20),cVar8 + (char)_DAT_0021e910
                                                  )))))));
                                    if (iVar38 != 0xe) {
                                      *(ulong *)(auStack_18 + lVar36) =
                                           CONCAT17(cVar8 + (char)((ulong)_UNK_0021e9c8 >> 0x20),
                                                    CONCAT16(cVar8 + (char)_UNK_0021e9c8,
                                                             CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e9c0 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e9c0,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e9b8 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e9b8,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e9b0 >> 0x20),cVar8 + (char)_DAT_0021e9b0
                                                  )))))));
                                      *(ulong *)(local_20 + lVar36) =
                                           CONCAT17(cVar8 + (char)((ulong)_UNK_0021e9a8 >> 0x20),
                                                    CONCAT16(cVar8 + (char)_UNK_0021e9a8,
                                                             CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e9a0 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e9a0,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e958 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e958,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e950 >> 0x20),cVar8 + (char)_DAT_0021e950
                                                  )))))));
                                      if (iVar38 != 0xf) {
                                        auVar51._0_8_ =
                                             CONCAT17(cVar8 + (char)((ulong)_UNK_0021e9d8 >> 0x20),
                                                      CONCAT16(cVar8 + (char)_UNK_0021e9d8,
                                                               CONCAT15(cVar8 + (char)((ulong)
                                                  _DAT_0021e9d0 >> 0x20),
                                                  CONCAT14(cVar8 + (char)_DAT_0021e9d0,
                                                           CONCAT13(cVar8 + (char)((ulong)
                                                  _UNK_0021e998 >> 0x20),
                                                  CONCAT12(cVar8 + (char)_UNK_0021e998,
                                                           CONCAT11(cVar8 + (char)((ulong)
                                                  _DAT_0021e990 >> 0x20),cVar8 + (char)_DAT_0021e990
                                                  )))))));
                                        auVar51[8] = cVar8 + (char)_DAT_0021e9e0;
                                        auVar51[9] = cVar8 + (char)((ulong)_DAT_0021e9e0 >> 0x20);
                                        auVar51[10] = cVar8 + (char)_UNK_0021e9e8;
                                        auVar51[0xb] = cVar8 + (char)((ulong)_UNK_0021e9e8 >> 0x20);
                                        auVar51[0xc] = cVar8 + (char)_DAT_0021e9f0;
                                        auVar51[0xd] = cVar8 + (char)((ulong)_DAT_0021e9f0 >> 0x20);
                                        auVar51[0xe] = cVar8 + (char)_UNK_0021e9f8;
                                        auVar51[0xf] = cVar8 + (char)((ulong)_UNK_0021e9f8 >> 0x20);
                                        *(long *)(auStack_8 + lVar36) = auVar51._8_8_;
                                        *(undefined8 *)(local_10 + lVar36) = auVar51._0_8_;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          iVar32 = iVar32 + iVar38 * 0x10;
          if (iVar38 * 0x10 == uVar46 - uVar27) goto switchD_0021c89c_caseD_3;
        }
        iVar38 = iVar32 + 1;
        ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
        if (iVar38 != 0x100) {
          iVar50 = iVar32 + 2;
          ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
          if (iVar50 != 0x100) {
            iVar38 = iVar32 + 3;
            ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
            if (iVar38 != 0x100) {
              iVar50 = iVar32 + 4;
              ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
              if (iVar50 != 0x100) {
                iVar38 = iVar32 + 5;
                ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                if (iVar38 != 0x100) {
                  iVar50 = iVar32 + 6;
                  ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                  if (iVar50 != 0x100) {
                    iVar38 = iVar32 + 7;
                    ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                    if (iVar38 != 0x100) {
                      iVar50 = iVar32 + 8;
                      ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                      if (iVar50 != 0x100) {
                        iVar38 = iVar32 + 9;
                        ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                        if (iVar38 != 0x100) {
                          iVar50 = iVar32 + 10;
                          ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                          if (iVar50 != 0x100) {
                            iVar38 = iVar32 + 0xb;
                            ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                            if (iVar38 != 0x100) {
                              iVar50 = iVar32 + 0xc;
                              ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                              if (iVar50 != 0x100) {
                                iVar38 = iVar32 + 0xd;
                                ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                                if (iVar38 != 0x100) {
                                  iVar32 = iVar32 + 0xe;
                                  ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                                  if (iVar32 != 0x100) {
                                    ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
switchD_0021c89c_caseD_3:
      if (iVar26 < 1) goto LAB_0021b3d4;
      lVar33 = 0;
      lVar36 = 0;
      iVar32 = 0;
      do {
        if (iVar42 + -0xf < 1) {
          iVar38 = 0;
        }
        else {
          iVar38 = 0;
          puVar25 = (undefined8 *)((long)local_150 + lVar33);
          puVar31 = (undefined8 *)(*local_1b0 + lVar36);
          do {
            uVar16 = puVar31[1];
            bVar95 = (byte)((ulong)uVar16 >> 8);
            bVar96 = (byte)((ulong)uVar16 >> 0x10);
            bVar97 = (byte)((ulong)uVar16 >> 0x18);
            bVar98 = (byte)((ulong)uVar16 >> 0x20);
            bVar99 = (byte)((ulong)uVar16 >> 0x28);
            bVar100 = (byte)((ulong)uVar16 >> 0x30);
            bVar102 = (byte)((ulong)uVar16 >> 0x38);
            uVar15 = *puVar31;
            bVar87 = (byte)((ulong)uVar15 >> 8);
            bVar88 = (byte)((ulong)uVar15 >> 0x10);
            bVar89 = (byte)((ulong)uVar15 >> 0x18);
            bVar91 = (byte)((ulong)uVar15 >> 0x20);
            bVar92 = (byte)((ulong)uVar15 >> 0x28);
            bVar93 = (byte)((ulong)uVar15 >> 0x30);
            bVar94 = (byte)((ulong)uVar15 >> 0x38);
            iVar38 = iVar38 + 0x10;
            auVar52._0_8_ =
                 CONCAT17(-(bVar86 < bVar94) & bVar94,
                          CONCAT16(-(bVar86 < bVar93) & bVar93,
                                   CONCAT15(-(bVar86 < bVar92) & bVar92,
                                            CONCAT14(-(bVar86 < bVar91) & bVar91,
                                                     CONCAT13(-(bVar86 < bVar89) & bVar89,
                                                              CONCAT12(-(bVar86 < bVar88) & bVar88,
                                                                       CONCAT11(-(bVar86 < bVar87) &
                                                                                bVar87,-(bVar86 < (
                                                  byte)uVar15) & (byte)uVar15)))))));
            auVar52[8] = -(bVar86 < (byte)uVar16) & (byte)uVar16;
            auVar52[9] = -(bVar86 < bVar95) & bVar95;
            auVar52[10] = -(bVar86 < bVar96) & bVar96;
            auVar52[0xb] = -(bVar86 < bVar97) & bVar97;
            auVar52[0xc] = -(bVar86 < bVar98) & bVar98;
            auVar52[0xd] = -(bVar86 < bVar99) & bVar99;
            auVar52[0xe] = -(bVar86 < bVar100) & bVar100;
            auVar52[0xf] = -(bVar86 < bVar102) & bVar102;
            puVar25[1] = auVar52._8_8_;
            *puVar25 = auVar52._0_8_;
            puVar25 = puVar25 + 2;
            puVar31 = puVar31 + 2;
          } while (iVar38 < iVar42 + -0xf);
        }
        iVar32 = iVar32 + 1;
        lVar36 = lVar36 + uVar43;
        lVar33 = lVar33 + uVar35;
      } while (iVar32 != iVar26);
      goto LAB_0021c2ec;
    case 4:
      iVar32 = (uVar45 - 0xf >> 4) + 1;
      iVar38 = iVar32 * 0x10;
      if (uVar45 < 0xf) {
        iVar38 = 0;
LAB_0021c578:
        iVar32 = iVar38 + 1;
        ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
        if (iVar32 <= (int)uVar45) {
          iVar50 = iVar38 + 2;
          ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
          if (iVar50 <= (int)uVar45) {
            iVar32 = iVar38 + 3;
            ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
            if (iVar32 <= (int)uVar45) {
              iVar50 = iVar38 + 4;
              ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
              if (iVar50 <= (int)uVar45) {
                iVar32 = iVar38 + 5;
                ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                if (iVar32 <= (int)uVar45) {
                  iVar50 = iVar38 + 6;
                  ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                  if (iVar50 <= (int)uVar45) {
                    iVar32 = iVar38 + 7;
                    ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                    if (iVar32 <= (int)uVar45) {
                      iVar50 = iVar38 + 8;
                      ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                      if (iVar50 <= (int)uVar45) {
                        iVar32 = iVar38 + 9;
                        ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                        if (iVar32 <= (int)uVar45) {
                          iVar50 = iVar38 + 10;
                          ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                          if (iVar50 <= (int)uVar45) {
                            iVar32 = iVar38 + 0xb;
                            ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                            if (iVar32 <= (int)uVar45) {
                              iVar50 = iVar38 + 0xc;
                              ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                              if (iVar50 <= (int)uVar45) {
                                iVar32 = iVar38 + 0xd;
                                ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                                if (iVar32 <= (int)uVar45) {
                                  iVar38 = iVar38 + 0xe;
                                  ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                  if (iVar38 <= (int)uVar45) {
                                    ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      else {
        auStack_f8 = (undefined1  [8])_UNK_0021e508;
        local_100 = _DAT_0021e500;
        if (iVar32 != 1) {
          auStack_e8 = (undefined1  [8])_UNK_0021e518;
          local_f0 = (undefined1  [8])_DAT_0021e510;
          if (iVar32 != 2) {
            auStack_d8 = (undefined1  [8])_UNK_0021e528;
            local_e0 = (undefined1  [8])_DAT_0021e520;
            if (iVar32 != 3) {
              auStack_c8 = (undefined1  [8])_UNK_0021e538;
              local_d0 = (undefined1  [8])_DAT_0021e530;
              if (iVar32 != 4) {
                auStack_b8 = (undefined1  [8])_UNK_0021e548;
                local_c0 = (undefined1  [8])_DAT_0021e540;
                if (iVar32 != 5) {
                  auStack_a8 = (undefined1  [8])_UNK_0021e558;
                  local_b0 = (undefined1  [8])_DAT_0021e550;
                  if (iVar32 != 6) {
                    auStack_98 = (undefined1  [8])_UNK_0021e568;
                    local_a0 = (undefined1  [8])_DAT_0021e560;
                    if (iVar32 != 7) {
                      auStack_88 = (undefined1  [8])_UNK_0021e578;
                      local_90 = (undefined1  [8])_DAT_0021e570;
                      if (iVar32 != 8) {
                        auStack_78 = (undefined1  [8])_UNK_0021e588;
                        local_80 = (undefined1  [8])_DAT_0021e580;
                        if (iVar32 != 9) {
                          auStack_68 = (undefined1  [8])_UNK_0021e598;
                          local_70 = (undefined1  [8])_DAT_0021e590;
                          if (iVar32 != 10) {
                            auStack_58 = (undefined1  [8])_UNK_0021e5a8;
                            local_60 = (undefined1  [8])_DAT_0021e5a0;
                            if (iVar32 != 0xb) {
                              auStack_48 = (undefined1  [8])_UNK_0021e5b8;
                              local_50 = (undefined1  [8])_DAT_0021e5b0;
                              if (iVar32 != 0xc) {
                                auStack_38 = (undefined1  [8])_UNK_0021e5c8;
                                local_40 = (undefined1  [8])_DAT_0021e5c0;
                                if (iVar32 != 0xd) {
                                  auStack_28 = (undefined1  [8])_UNK_0021e5d8;
                                  local_30 = (undefined1  [8])_DAT_0021e5d0;
                                  if (iVar32 != 0xe) {
                                    auStack_18 = (undefined1  [8])_UNK_0021e5e8;
                                    local_20 = (undefined1  [8])_DAT_0021e5e0;
                                    if (iVar32 != 0xf) {
                                      auStack_8 = (undefined1  [8])_UNK_0021e5f8;
                                      local_10 = (undefined1  [8])_DAT_0021e5f0;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if (iVar38 != uVar45 + 1) goto LAB_0021c578;
      }
      if (uVar46 != 0xff) {
        memset((Range *)&local_100 + (ulong)bVar86 + 1,0,(ulong)(0xfe - __c) + 1);
      }
      goto switchD_0021c89c_caseD_4;
    }
    iVar32 = (uVar45 - 0xf >> 4) + 1;
    iVar38 = iVar32 * 0x10;
    if (uVar45 < 0xf) {
      iVar38 = 0;
LAB_0021c02c:
      iVar32 = iVar38 + 1;
      ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
      if (iVar32 <= (int)uVar45) {
        iVar50 = iVar38 + 2;
        ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
        if (iVar50 <= (int)uVar45) {
          iVar32 = iVar38 + 3;
          ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
          if (iVar32 <= (int)uVar45) {
            iVar50 = iVar38 + 4;
            ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
            if (iVar50 <= (int)uVar45) {
              iVar32 = iVar38 + 5;
              ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
              if (iVar32 <= (int)uVar45) {
                iVar50 = iVar38 + 6;
                ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                if (iVar50 <= (int)uVar45) {
                  iVar32 = iVar38 + 7;
                  ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                  if (iVar32 <= (int)uVar45) {
                    iVar50 = iVar38 + 8;
                    ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                    if (iVar50 <= (int)uVar45) {
                      iVar32 = iVar38 + 9;
                      ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                      if (iVar32 <= (int)uVar45) {
                        iVar50 = iVar38 + 10;
                        ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                        if (iVar50 <= (int)uVar45) {
                          iVar32 = iVar38 + 0xb;
                          ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                          if (iVar32 <= (int)uVar45) {
                            iVar50 = iVar38 + 0xc;
                            ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                            if (iVar50 <= (int)uVar45) {
                              iVar32 = iVar38 + 0xd;
                              ((Range *)&local_100)[iVar50] = SUB41(iVar50,0);
                              if (iVar32 <= (int)uVar45) {
                                iVar38 = iVar38 + 0xe;
                                ((Range *)&local_100)[iVar32] = SUB41(iVar32,0);
                                if (iVar38 <= (int)uVar45) {
                                  ((Range *)&local_100)[iVar38] = SUB41(iVar38,0);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      auStack_f8 = (undefined1  [8])_UNK_0021e508;
      local_100 = _DAT_0021e500;
      if (iVar32 != 1) {
        auStack_e8 = (undefined1  [8])_UNK_0021e518;
        local_f0 = (undefined1  [8])_DAT_0021e510;
        if (iVar32 != 2) {
          auStack_d8 = (undefined1  [8])_UNK_0021e528;
          local_e0 = (undefined1  [8])_DAT_0021e520;
          if (iVar32 != 3) {
            auStack_c8 = (undefined1  [8])_UNK_0021e538;
            local_d0 = (undefined1  [8])_DAT_0021e530;
            if (iVar32 != 4) {
              auStack_b8 = (undefined1  [8])_UNK_0021e548;
              local_c0 = (undefined1  [8])_DAT_0021e540;
              if (iVar32 != 5) {
                auStack_a8 = (undefined1  [8])_UNK_0021e558;
                local_b0 = (undefined1  [8])_DAT_0021e550;
                if (iVar32 != 6) {
                  auStack_98 = (undefined1  [8])_UNK_0021e568;
                  local_a0 = (undefined1  [8])_DAT_0021e560;
                  if (iVar32 != 7) {
                    auStack_88 = (undefined1  [8])_UNK_0021e578;
                    local_90 = (undefined1  [8])_DAT_0021e570;
                    if (iVar32 != 8) {
                      auStack_78 = (undefined1  [8])_UNK_0021e588;
                      local_80 = (undefined1  [8])_DAT_0021e580;
                      if (iVar32 != 9) {
                        auStack_68 = (undefined1  [8])_UNK_0021e598;
                        local_70 = (undefined1  [8])_DAT_0021e590;
                        if (iVar32 != 10) {
                          auStack_58 = (undefined1  [8])_UNK_0021e5a8;
                          local_60 = (undefined1  [8])_DAT_0021e5a0;
                          if (iVar32 != 0xb) {
                            auStack_48 = (undefined1  [8])_UNK_0021e5b8;
                            local_50 = (undefined1  [8])_DAT_0021e5b0;
                            if (iVar32 != 0xc) {
                              auStack_38 = (undefined1  [8])_UNK_0021e5c8;
                              local_40 = (undefined1  [8])_DAT_0021e5c0;
                              if (iVar32 != 0xd) {
                                auStack_28 = (undefined1  [8])_UNK_0021e5d8;
                                local_30 = (undefined1  [8])_DAT_0021e5d0;
                                if (iVar32 != 0xe) {
                                  auStack_18 = (undefined1  [8])_UNK_0021e5e8;
                                  local_20 = (undefined1  [8])_DAT_0021e5e0;
                                  if (iVar32 != 0xf) {
                                    auStack_8 = (undefined1  [8])_UNK_0021e5f8;
                                    local_10 = (undefined1  [8])_DAT_0021e5f0;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (uVar45 + 1 != iVar38) goto LAB_0021c02c;
    }
    if (__c != 0xff) {
      memset((Range *)&local_100 + (ulong)bVar86 + 1,__c,(ulong)(0xfe - __c) + 1);
    }
switchD_0021c89c_caseD_2:
    if (iVar26 < 1) goto LAB_0021b3d4;
    lVar33 = 0;
    lVar36 = 0;
    iVar32 = 0;
    do {
      if (iVar42 + -0xf < 1) {
        iVar38 = 0;
      }
      else {
        iVar38 = 0;
        puVar25 = (undefined8 *)((long)local_150 + lVar33);
        pauVar28 = (undefined1 (*) [16])(*local_1b0 + lVar36);
        do {
          iVar38 = iVar38 + 0x10;
          auVar14[1] = bVar86;
          auVar14[0] = bVar86;
          auVar14[2] = bVar86;
          auVar14[3] = bVar86;
          auVar14[4] = bVar86;
          auVar14[5] = bVar86;
          auVar14[6] = bVar86;
          auVar14[7] = bVar86;
          auVar14[8] = bVar86;
          auVar14[9] = bVar86;
          auVar14[10] = bVar86;
          auVar14[0xb] = bVar86;
          auVar14[0xc] = bVar86;
          auVar14[0xd] = bVar86;
          auVar14[0xe] = bVar86;
          auVar14[0xf] = bVar86;
          auVar67 = NEON_umin(*pauVar28,auVar14,1);
          puVar25[1] = auVar67._8_8_;
          *puVar25 = auVar67._0_8_;
          puVar25 = puVar25 + 2;
          pauVar28 = pauVar28 + 1;
        } while (iVar38 < iVar42 + -0xf);
      }
      iVar32 = iVar32 + 1;
      lVar36 = lVar36 + uVar43;
      lVar33 = lVar33 + uVar35;
    } while (iVar32 != iVar26);
  }
  else {
    local_1f0 = 0;
    local_1e8 = 0;
    pcVar24 = (char *)cv::String::allocate((String *)&local_1f0,0x16);
    uVar110 = s_Unknown_threshold_type_0045fc20._20_2_;
    uVar16 = s_Unknown_threshold_type_0045fc20._8_8_;
    uVar15 = s_Unknown_threshold_type_0045fc20._0_8_;
    *(undefined4 *)(pcVar24 + 0x10) = s_Unknown_threshold_type_0045fc20._16_4_;
    *(undefined2 *)(pcVar24 + 0x14) = uVar110;
    *(undefined8 *)pcVar24 = uVar15;
    *(undefined8 *)(pcVar24 + 8) = uVar16;
    cv::error(-5,(String *)&local_1f0,
              "void cv::thresh_8u(const cv::Mat&, cv::Mat&, uchar, uchar, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0xa1);
    cv::String::deallocate((String *)&local_1f0);
    switch(uVar27) {
    case 0:
switchD_0021c89c_caseD_0:
      if (iVar26 < 1) goto LAB_0021b3d4;
      lVar33 = 0;
      lVar36 = 0;
      iVar32 = 0;
      do {
        if (iVar42 + -0xf < 1) {
          iVar38 = 0;
        }
        else {
          iVar38 = 0;
          puVar25 = (undefined8 *)((long)local_150 + lVar33);
          pbVar29 = *local_1b0 + lVar36;
          do {
            iVar38 = iVar38 + 0x10;
            auVar54._0_8_ =
                 CONCAT17(-(bVar86 < pbVar29[7]) & bVar87,
                          CONCAT16(-(bVar86 < pbVar29[6]) & bVar87,
                                   CONCAT15(-(bVar86 < pbVar29[5]) & bVar87,
                                            CONCAT14(-(bVar86 < pbVar29[4]) & bVar87,
                                                     CONCAT13(-(bVar86 < pbVar29[3]) & bVar87,
                                                              CONCAT12(-(bVar86 < pbVar29[2]) &
                                                                       bVar87,CONCAT11(-(bVar86 < 
                                                  pbVar29[1]) & bVar87,-(bVar86 < *pbVar29) & bVar87
                                                  )))))));
            auVar54[8] = -(bVar86 < pbVar29[8]) & bVar87;
            auVar54[9] = -(bVar86 < pbVar29[9]) & bVar87;
            auVar54[10] = -(bVar86 < pbVar29[10]) & bVar87;
            auVar54[0xb] = -(bVar86 < pbVar29[0xb]) & bVar87;
            auVar54[0xc] = -(bVar86 < pbVar29[0xc]) & bVar87;
            auVar54[0xd] = -(bVar86 < pbVar29[0xd]) & bVar87;
            auVar54[0xe] = -(bVar86 < pbVar29[0xe]) & bVar87;
            auVar54[0xf] = -(bVar86 < pbVar29[0xf]) & bVar87;
            puVar25[1] = auVar54._8_8_;
            *puVar25 = auVar54._0_8_;
            puVar25 = puVar25 + 2;
            pbVar29 = pbVar29 + 0x10;
          } while (iVar38 < iVar42 + -0xf);
        }
        iVar32 = iVar32 + 1;
        lVar36 = lVar36 + uVar43;
        lVar33 = lVar33 + uVar35;
      } while (iVar32 != iVar26);
      break;
    case 1:
switchD_0021c89c_caseD_1:
      if (iVar26 < 1) goto LAB_0021b3d4;
      lVar33 = 0;
      lVar36 = 0;
      iVar32 = 0;
      do {
        if (iVar42 + -0xf < 1) {
          iVar38 = 0;
        }
        else {
          iVar38 = 0;
          puVar25 = (undefined8 *)((long)local_150 + lVar33);
          pbVar29 = *local_1b0 + lVar36;
          do {
            iVar38 = iVar38 + 0x10;
            auVar53._0_8_ =
                 CONCAT17(-(pbVar29[7] <= bVar86) & bVar87,
                          CONCAT16(-(pbVar29[6] <= bVar86) & bVar87,
                                   CONCAT15(-(pbVar29[5] <= bVar86) & bVar87,
                                            CONCAT14(-(pbVar29[4] <= bVar86) & bVar87,
                                                     CONCAT13(-(pbVar29[3] <= bVar86) & bVar87,
                                                              CONCAT12(-(pbVar29[2] <= bVar86) &
                                                                       bVar87,CONCAT11(-(pbVar29[1]
                                                                                        <= bVar86) &
                                                                                       bVar87,-(*
                                                  pbVar29 <= bVar86) & bVar87)))))));
            auVar53[8] = -(pbVar29[8] <= bVar86) & bVar87;
            auVar53[9] = -(pbVar29[9] <= bVar86) & bVar87;
            auVar53[10] = -(pbVar29[10] <= bVar86) & bVar87;
            auVar53[0xb] = -(pbVar29[0xb] <= bVar86) & bVar87;
            auVar53[0xc] = -(pbVar29[0xc] <= bVar86) & bVar87;
            auVar53[0xd] = -(pbVar29[0xd] <= bVar86) & bVar87;
            auVar53[0xe] = -(pbVar29[0xe] <= bVar86) & bVar87;
            auVar53[0xf] = -(pbVar29[0xf] <= bVar86) & bVar87;
            puVar25[1] = auVar53._8_8_;
            *puVar25 = auVar53._0_8_;
            puVar25 = puVar25 + 2;
            pbVar29 = pbVar29 + 0x10;
          } while (iVar38 < iVar42 + -0xf);
        }
        iVar32 = iVar32 + 1;
        lVar36 = lVar36 + uVar43;
        lVar33 = lVar33 + uVar35;
      } while (iVar32 != iVar26);
      break;
    case 2:
      goto switchD_0021c89c_caseD_2;
    case 3:
      goto switchD_0021c89c_caseD_3;
    case 4:
switchD_0021c89c_caseD_4:
      if (iVar26 < 1) goto LAB_0021b3d4;
      lVar33 = 0;
      lVar36 = 0;
      iVar32 = 0;
      do {
        if (iVar42 + -0xf < 1) {
          iVar38 = 0;
        }
        else {
          iVar38 = 0;
          puVar25 = (undefined8 *)((long)local_150 + lVar33);
          puVar31 = (undefined8 *)(*local_1b0 + lVar36);
          do {
            uVar16 = puVar31[1];
            bVar95 = (byte)((ulong)uVar16 >> 8);
            bVar96 = (byte)((ulong)uVar16 >> 0x10);
            bVar97 = (byte)((ulong)uVar16 >> 0x18);
            bVar98 = (byte)((ulong)uVar16 >> 0x20);
            bVar99 = (byte)((ulong)uVar16 >> 0x28);
            bVar100 = (byte)((ulong)uVar16 >> 0x30);
            bVar102 = (byte)((ulong)uVar16 >> 0x38);
            uVar15 = *puVar31;
            bVar87 = (byte)((ulong)uVar15 >> 8);
            bVar88 = (byte)((ulong)uVar15 >> 0x10);
            bVar89 = (byte)((ulong)uVar15 >> 0x18);
            bVar91 = (byte)((ulong)uVar15 >> 0x20);
            bVar92 = (byte)((ulong)uVar15 >> 0x28);
            bVar93 = (byte)((ulong)uVar15 >> 0x30);
            bVar94 = (byte)((ulong)uVar15 >> 0x38);
            iVar38 = iVar38 + 0x10;
            auVar55._0_8_ =
                 CONCAT17(-(bVar94 <= bVar86) & bVar94,
                          CONCAT16(-(bVar93 <= bVar86) & bVar93,
                                   CONCAT15(-(bVar92 <= bVar86) & bVar92,
                                            CONCAT14(-(bVar91 <= bVar86) & bVar91,
                                                     CONCAT13(-(bVar89 <= bVar86) & bVar89,
                                                              CONCAT12(-(bVar88 <= bVar86) & bVar88,
                                                                       CONCAT11(-(bVar87 <= bVar86)
                                                                                & bVar87,-((byte)
                                                  uVar15 <= bVar86) & (byte)uVar15)))))));
            auVar55[8] = -((byte)uVar16 <= bVar86) & (byte)uVar16;
            auVar55[9] = -(bVar95 <= bVar86) & bVar95;
            auVar55[10] = -(bVar96 <= bVar86) & bVar96;
            auVar55[0xb] = -(bVar97 <= bVar86) & bVar97;
            auVar55[0xc] = -(bVar98 <= bVar86) & bVar98;
            auVar55[0xd] = -(bVar99 <= bVar86) & bVar99;
            auVar55[0xe] = -(bVar100 <= bVar86) & bVar100;
            auVar55[0xf] = -(bVar102 <= bVar86) & bVar102;
            puVar25[1] = auVar55._8_8_;
            *puVar25 = auVar55._0_8_;
            puVar25 = puVar25 + 2;
            puVar31 = puVar31 + 2;
          } while (iVar38 < iVar42 + -0xf);
        }
        iVar32 = iVar32 + 1;
        lVar36 = lVar36 + uVar43;
        lVar33 = lVar33 + uVar35;
      } while (iVar32 != iVar26);
      break;
    default:
      local_200 = 0;
      local_1f8 = 0;
      cv::String::allocate((String *)&local_200,0);
      cv::error(-5,(String *)&local_200,
                "void cv::thresh_8u(const cv::Mat&, cv::Mat&, uchar, uchar, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x162);
      cv::String::deallocate((String *)&local_200);
      goto LAB_0021b3d4;
    }
  }
LAB_0021c2ec:
  if (iVar38 < iVar42) {
    uVar27 = (uint)((iVar42 + -4) - iVar38) >> 2;
    lVar36 = 0;
    lVar33 = (long)iVar38;
    iVar32 = iVar38 + 4 + uVar27 * 4;
    iVar50 = iVar38;
    if (iVar38 < iVar42 + -3) {
      iVar50 = iVar32;
    }
    lVar39 = 0;
    iVar76 = 0;
    do {
      if (iVar38 < iVar42 + -3) {
        pbVar29 = *local_1b0 + lVar33 + lVar39;
        pRVar34 = (Range *)((long)local_150 + lVar33 + lVar36);
        do {
          pbVar2 = pbVar29 + 4;
          RVar7 = ((Range *)&local_100)[pbVar29[1]];
          *pRVar34 = ((Range *)&local_100)[*pbVar29];
          pRVar34[1] = RVar7;
          RVar7 = ((Range *)&local_100)[pbVar29[3]];
          pRVar34[2] = ((Range *)&local_100)[pbVar29[2]];
          pRVar34[3] = RVar7;
          pbVar29 = pbVar2;
          pRVar34 = pRVar34 + 4;
        } while (pbVar2 != *local_1b0 + lVar33 + 4 + (ulong)uVar27 * 4 + lVar39);
        if (iVar32 < iVar42) goto LAB_0021c39c;
      }
      else {
LAB_0021c39c:
        lVar30 = 0;
        do {
          *(Range *)((long)local_150 + lVar30 + iVar50 + lVar36) =
               ((Range *)&local_100)[(byte)(*local_1b0)[lVar30 + iVar50 + lVar39]];
          lVar30 = lVar30 + 1;
        } while (iVar50 + (int)lVar30 < iVar42);
      }
      iVar76 = iVar76 + 1;
      lVar39 = lVar39 + uVar43;
      lVar36 = lVar36 + uVar35;
    } while (iVar76 < iVar26);
  }
LAB_0021b3d4:
  if (local_128 != 0) {
    piVar1 = (int *)(local_128 + 0x14);
    do {
      iVar26 = *piVar1;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar9) {
        *piVar1 = iVar26 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar26 == 1) {
      cv::Mat::deallocate((Mat *)&local_160);
    }
  }
  local_128 = 0;
  local_150 = (undefined8 *)0x0;
  local_138 = 0;
  local_140 = 0;
  local_148 = 0;
  if (0 < local_15c) {
    iVar26 = 0;
    do {
      *local_120 = 0;
      iVar26 = iVar26 + 1;
      local_120 = local_120 + 1;
    } while (iVar26 < local_15c);
  }
  if (local_118 != local_110) {
    cv::fastFree(local_118);
  }
  if (local_188 != 0) {
    piVar1 = (int *)(local_188 + 0x14);
    do {
      iVar26 = *piVar1;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar9) {
        *piVar1 = iVar26 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar26 == 1) {
      cv::Mat::deallocate((Mat *)&local_1c0);
    }
  }
  local_188 = 0;
  local_1b0 = (undefined1 (*) [16])0x0;
  local_198 = 0;
  local_1a0 = 0;
  local_1a8 = 0;
  if (0 < local_1bc) {
    iVar26 = 0;
    do {
      *local_180 = 0;
      iVar26 = iVar26 + 1;
      local_180 = local_180 + 1;
    } while (iVar26 < local_1bc);
  }
  if (local_178 != local_170) {
    cv::fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 0021ea00 (320 bytes) name=FUN_0021ea00

void FUN_0021ea00(ParallelLoopBody *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f59e0;
  if (*(long *)(param_1 + 0xa0) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0xa0) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 0x68));
    }
  }
  *(undefined8 *)(param_1 + 0xa0) = 0;
  *(undefined8 *)(param_1 + 0x78) = 0;
  *(undefined8 *)(param_1 + 0x90) = 0;
  *(undefined8 *)(param_1 + 0x88) = 0;
  *(undefined8 *)(param_1 + 0x80) = 0;
  if (0 < *(int *)(param_1 + 0x6c)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0xa8);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0x6c));
  }
  if (*(ParallelLoopBody **)(param_1 + 0xb0) != param_1 + 0xb8) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0xb0));
  }
  if (*(long *)(param_1 + 0x40) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x40) + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)(param_1 + 8));
    }
  }
  *(undefined8 *)(param_1 + 0x40) = 0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  if (0 < *(int *)(param_1 + 0xc)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(param_1 + 0x48);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(param_1 + 0xc));
  }
  if (*(ParallelLoopBody **)(param_1 + 0x50) != param_1 + 0x58) {
    cv::fastFree(*(ParallelLoopBody **)(param_1 + 0x50));
  }
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0021eb80 (4900 bytes) name=threshold

/* WARNING: Removing unreachable block (ram,0x0021eeac) */
/* WARNING: Removing unreachable block (ram,0x0021eeb0) */
/* WARNING: Removing unreachable block (ram,0x0021eeb8) */
/* WARNING: Removing unreachable block (ram,0x0021eec0) */
/* WARNING: Removing unreachable block (ram,0x0021fb58) */
/* WARNING: Removing unreachable block (ram,0x0021eee8) */
/* WARNING: Removing unreachable block (ram,0x0021eef0) */
/* WARNING: Removing unreachable block (ram,0x0021ef04) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::threshold(cv::_InputArray const&, cv::_OutputArray const&, double, double, int) */

undefined1  [16]
cv::threshold(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4,int param_5)

{
  long lVar1;
  byte bVar2;
  char cVar3;
  bool bVar4;
  int iVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined1 uVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  byte *pbVar18;
  undefined8 *puVar19;
  _InputArray *p_Var20;
  int iVar21;
  undefined4 *puVar22;
  int *piVar23;
  uint *puVar24;
  byte *pbVar25;
  undefined1 (*pauVar26) [16];
  Mat *pMVar27;
  undefined1 (*pauVar28) [16];
  long lVar29;
  ulong uVar30;
  int iVar31;
  uint uVar32;
  int iVar33;
  int iVar34;
  int iVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  undefined1 auVar39 [16];
  double dVar40;
  undefined1 auVar41 [16];
  double dVar42;
  double dVar43;
  double dVar44;
  double dVar45;
  undefined8 local_5c0;
  undefined8 local_5b8;
  undefined8 local_5b0;
  undefined8 local_5a8;
  undefined8 local_5a0;
  undefined8 local_598;
  long local_590 [2];
  uint local_580;
  int iStack_57c;
  uint uStack_578;
  int iStack_574;
  undefined8 local_570;
  undefined8 local_568;
  undefined8 local_560;
  undefined8 local_558;
  undefined8 local_550;
  long local_548;
  uint *local_540;
  undefined8 *local_538;
  undefined8 local_530;
  undefined8 local_528;
  uint local_520;
  int local_51c;
  int local_518;
  int local_514;
  long local_510;
  undefined8 uStack_508;
  undefined8 local_500;
  undefined8 uStack_4f8;
  undefined8 local_4f0;
  long lStack_4e8;
  int *local_4e0;
  undefined8 *local_4d8;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 uStack_4b8;
  undefined8 local_4b0;
  undefined8 uStack_4a8;
  undefined8 local_4a0;
  undefined8 uStack_498;
  undefined8 local_490;
  long lStack_488;
  undefined8 *local_480;
  undefined8 *local_478;
  undefined8 local_470;
  undefined8 uStack_468;
  uint local_460;
  int local_45c;
  int local_458;
  int local_454;
  long local_450;
  undefined8 local_448;
  undefined8 local_440;
  undefined8 local_438;
  undefined8 local_430;
  long local_428;
  int *local_420;
  undefined8 *local_418;
  undefined8 local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 uStack_3f8;
  int local_3f0;
  int local_3ec;
  long local_3e8;
  undefined8 uStack_3e0;
  undefined8 local_3d8;
  undefined8 uStack_3d0;
  undefined8 local_3c8;
  long lStack_3c0;
  int *local_3b8;
  undefined8 *local_3b0;
  undefined8 local_3a8;
  undefined8 local_3a0;
  uint local_398;
  int local_394;
  undefined4 local_390;
  undefined4 local_38c;
  undefined8 local_388;
  undefined8 uStack_380;
  undefined8 local_378;
  undefined8 uStack_370;
  undefined8 local_368;
  long lStack_360;
  undefined4 *local_358;
  undefined8 *local_350;
  undefined8 local_348;
  undefined8 local_340;
  double local_338;
  double dStack_330;
  uint local_328;
  undefined1 auStack_210 [480];
  undefined8 auStack_30 [4];
  undefined1 local_10 [16];
  
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar27 = *(Mat **)(param_1 + 8);
    local_420 = &local_458;
    local_418 = &local_410;
    local_460 = *(uint *)pMVar27;
    local_45c = *(int *)(pMVar27 + 4);
    local_458 = *(int *)(pMVar27 + 8);
    local_454 = *(int *)(pMVar27 + 0xc);
    local_450 = *(long *)(pMVar27 + 0x10);
    local_448 = *(undefined8 *)(pMVar27 + 0x18);
    local_440 = *(undefined8 *)(pMVar27 + 0x20);
    local_438 = *(undefined8 *)(pMVar27 + 0x28);
    local_430 = *(undefined8 *)(pMVar27 + 0x30);
    local_428 = *(long *)(pMVar27 + 0x38);
    local_408 = 0;
    local_410 = 0;
    if (local_428 != 0) {
      piVar23 = (int *)(local_428 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
        if (bVar4) {
          *piVar23 = *piVar23 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (2 < *(int *)(pMVar27 + 4)) {
      local_45c = 0;
      Mat::copySize((Mat *)&local_460,pMVar27);
      goto LAB_0021ebd4;
    }
    local_410 = **(undefined8 **)(pMVar27 + 0x48);
    local_408 = (*(undefined8 **)(pMVar27 + 0x48))[1];
    if ((param_5 & 0xfffffff8U) == 0x18) goto LAB_0021f87c;
LAB_0021ebe4:
    if ((param_5 & 0xfffffff8U) == 8) {
      uVar16 = 0;
      if ((local_460 & 0xfff) != 0) {
        local_5b0 = 0;
        local_5a8 = 0;
        puVar19 = (undefined8 *)String::allocate((String *)&local_5b0,0x15);
        uVar14 = DAT_0045fcd4;
        uVar9 = _LAB_0045fcc8;
        uVar8 = DAT_0045fcc0;
        *(undefined4 *)(puVar19 + 2) = DAT_0045fcd0;
        *(undefined1 *)((long)puVar19 + 0x14) = uVar14;
        *puVar19 = uVar8;
        puVar19[1] = uVar9;
        error(-0xd7,(String *)&local_5b0,
              "double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x4ae);
        String::deallocate((String *)&local_5b0);
        uVar16 = local_460 & 0xfff;
      }
      uVar8 = local_410;
      iVar33 = local_420[1];
      iVar15 = *local_420;
      if ((local_460 >> 0xe & 1) == 0) {
        memset(&local_400,local_460 & 0x4000,0x400);
        iVar17 = iVar33;
        iVar34 = iVar15;
        if (0 < iVar15) {
          iVar35 = (int)uVar8;
          goto LAB_0021f958;
        }
      }
      else {
        iVar35 = iVar33 * iVar15;
        memset(&local_400,0,0x400);
        iVar17 = iVar35;
        iVar34 = 1;
LAB_0021f958:
        uVar32 = iVar17 - 4U >> 2;
        iVar31 = 0;
        iVar21 = (uVar32 + 1) * 4;
        if (iVar17 + -3 < 1) {
          iVar21 = 0;
        }
        lVar29 = local_450;
        do {
          if (0 < iVar17 + -3) {
            pbVar18 = (byte *)(lVar29 + 1);
            do {
              pbVar25 = pbVar18 + 4;
              bVar2 = *pbVar18;
              *(int *)((long)&local_400 + (long)(int)(uint)pbVar18[-1] * 4) =
                   *(int *)((long)&local_400 + (long)(int)(uint)pbVar18[-1] * 4) + 1;
              *(int *)((long)&local_400 + (long)(int)(uint)bVar2 * 4) =
                   *(int *)((long)&local_400 + (long)(int)(uint)bVar2 * 4) + 1;
              bVar2 = pbVar18[2];
              *(int *)((long)&local_400 + (long)(int)(uint)pbVar18[1] * 4) =
                   *(int *)((long)&local_400 + (long)(int)(uint)pbVar18[1] * 4) + 1;
              *(int *)((long)&local_400 + (long)(int)(uint)bVar2 * 4) =
                   *(int *)((long)&local_400 + (long)(int)(uint)bVar2 * 4) + 1;
              pbVar18 = pbVar25;
            } while (pbVar25 != (byte *)(lVar29 + (ulong)uVar32 * 4 + 5));
          }
          pbVar18 = (byte *)(lVar29 + iVar21);
          if (iVar21 < iVar17) {
            do {
              pbVar25 = pbVar18 + 1;
              *(int *)((long)&local_400 + (long)(int)(uint)*pbVar18 * 4) =
                   *(int *)((long)&local_400 + (long)(int)(uint)*pbVar18 * 4) + 1;
              pbVar18 = pbVar25;
            } while (pbVar25 !=
                     (byte *)(lVar29 + (long)iVar21 + 1 + (ulong)(uint)((iVar17 + -1) - iVar21)));
          }
          iVar31 = iVar31 + 1;
          lVar29 = lVar29 + iVar35;
        } while (iVar31 < iVar34);
      }
      lVar29 = 0;
      dVar38 = 0.0;
      dVar45 = 1.0 / (double)(iVar17 * iVar34);
      do {
        lVar1 = lVar29 * 4;
        iVar17 = (int)lVar29;
        lVar29 = lVar29 + 1;
        dVar38 = dVar38 + (double)*(int *)((long)&local_400 + lVar1) * (double)iVar17;
      } while (lVar29 != 0x100);
      dVar43 = 0.0;
      lVar29 = 0;
      param_3 = 0.0;
      dVar42 = 0.0;
      dVar40 = 0.0;
      do {
        dVar40 = dVar40 * dVar43;
        dVar44 = dVar45 * (double)*(int *)((long)&local_400 + lVar29 * 4);
        dVar43 = dVar43 + dVar44;
        dVar36 = 1.0 - dVar43;
        dVar37 = dVar36;
        if (dVar43 <= dVar36) {
          dVar37 = dVar43;
        }
        if (DAT_00220018 <= dVar37) {
          dVar37 = dVar36;
          if (dVar36 <= dVar43) {
            dVar37 = dVar43;
          }
          if (dVar37 <= DAT_00220020) {
            dVar40 = (dVar40 + (double)(int)lVar29 * dVar44) / dVar43;
            dVar37 = dVar40 - (dVar45 * dVar38 - dVar40 * dVar43) / dVar36;
            dVar37 = dVar37 * dVar43 * dVar36 * dVar37;
            if (dVar42 < dVar37) {
              param_3 = (double)(int)lVar29;
              dVar42 = dVar37;
            }
          }
        }
        lVar29 = lVar29 + 1;
      } while (lVar29 != 0x100);
    }
    else {
      if ((param_5 & 0xfffffff8U) != 0x10) goto LAB_0021ebf4;
      uVar16 = 0;
      if ((local_460 & 0xfff) != 0) {
        local_5a0 = 0;
        local_598 = 0;
        puVar19 = (undefined8 *)String::allocate((String *)&local_5a0,0x15);
        uVar14 = DAT_0045fcd4;
        uVar9 = _LAB_0045fcc8;
        uVar8 = DAT_0045fcc0;
        *(undefined4 *)(puVar19 + 2) = DAT_0045fcd0;
        *(undefined1 *)((long)puVar19 + 0x14) = uVar14;
        *puVar19 = uVar8;
        puVar19[1] = uVar9;
        error(-0xd7,(String *)&local_5a0,
              "double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x4b3);
        String::deallocate((String *)&local_5a0);
        uVar16 = local_460 & 0xfff;
      }
      uVar8 = local_410;
      iVar33 = local_420[1];
      iVar15 = *local_420;
      if ((local_460 >> 0xe & 1) == 0) {
        memset((undefined1 (*) [16])&local_400,local_460 & 0x4000,0x400);
        if (0 < iVar15) {
          iVar17 = (int)uVar8;
          iVar34 = iVar33;
          iVar35 = iVar15;
          goto LAB_0021f410;
        }
      }
      else {
        iVar17 = iVar33 * iVar15;
        memset((undefined1 (*) [16])&local_400,0,0x400);
        iVar35 = 1;
        iVar34 = iVar17;
LAB_0021f410:
        uVar32 = iVar34 - 4U >> 2;
        iVar31 = 0;
        iVar21 = (uVar32 + 1) * 4;
        if (iVar34 + -3 < 1) {
          iVar21 = 0;
        }
        lVar29 = local_450;
        do {
          if (0 < iVar34 + -3) {
            pbVar18 = (byte *)(lVar29 + 1);
            do {
              pbVar25 = pbVar18 + 4;
              bVar2 = *pbVar18;
              *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)pbVar18[-1] * 4) =
                   *(int *)((long)*(undefined1 (*) [16])&local_400 +
                           (long)(int)(uint)pbVar18[-1] * 4) + 1;
              *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)bVar2 * 4) =
                   *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)bVar2 * 4) + 1
              ;
              bVar2 = pbVar18[2];
              *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)pbVar18[1] * 4) =
                   *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)pbVar18[1] * 4
                           ) + 1;
              *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)bVar2 * 4) =
                   *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)bVar2 * 4) + 1
              ;
              pbVar18 = pbVar25;
            } while (pbVar25 != (byte *)(lVar29 + (ulong)uVar32 * 4 + 5));
          }
          pbVar18 = (byte *)(lVar29 + iVar21);
          if (iVar21 < iVar34) {
            do {
              pbVar25 = pbVar18 + 1;
              *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)*pbVar18 * 4) =
                   *(int *)((long)*(undefined1 (*) [16])&local_400 + (long)(int)(uint)*pbVar18 * 4)
                   + 1;
              pbVar18 = pbVar25;
            } while (pbVar25 !=
                     (byte *)(lVar29 + (long)iVar21 + 1 + (ulong)(uint)((iVar34 + -1) - iVar21)));
          }
          iVar31 = iVar31 + 1;
          lVar29 = lVar29 + iVar17;
        } while (iVar31 < iVar35);
      }
      lVar29 = 0;
      do {
        if (0 < *(int *)((long)*(undefined1 (*) [16])&local_400 + lVar29 * 4)) {
          iVar17 = (int)lVar29 - (uint)((int)lVar29 != 0);
          goto LAB_0021f514;
        }
        lVar29 = lVar29 + 1;
      } while (lVar29 != 0x100);
      iVar17 = 0;
LAB_0021f514:
      iVar34 = 0xff;
      piVar23 = (int *)register0x00000008;
      do {
        piVar23 = piVar23 + -1;
        if (0 < *piVar23) {
          if (iVar34 != 0xff) {
            iVar34 = iVar34 + 1;
          }
          goto LAB_0021f540;
        }
        iVar34 = iVar34 + -1;
      } while (iVar34 != 0);
      iVar34 = 1;
LAB_0021f540:
      lVar29 = 0;
      iVar31 = 0;
      iVar35 = 0;
      do {
        iVar21 = *(int *)((long)*(undefined1 (*) [16])&local_400 + lVar29 * 4);
        if (iVar35 < iVar21) {
          iVar35 = iVar21;
          iVar31 = (int)lVar29;
        }
        lVar29 = lVar29 + 1;
      } while (lVar29 != 0x100);
      if (iVar31 - iVar17 < iVar34 - iVar31) {
        pauVar26 = &local_10;
        pauVar28 = (undefined1 (*) [16])&local_400;
        do {
          auVar39._8_8_ = _UNK_00220038;
          auVar39._0_8_ = _DAT_00220030;
          auVar41 = a64_TBL(ZEXT816(0),*pauVar26,auVar39);
          auVar7._8_8_ = _UNK_00220038;
          auVar7._0_8_ = _DAT_00220030;
          auVar39 = a64_TBL(ZEXT816(0),*pauVar28,auVar7);
          *(long *)((long)*pauVar28 + 8) = auVar41._8_8_;
          *(long *)*pauVar28 = auVar41._0_8_;
          *(long *)(*pauVar26 + 8) = auVar39._8_8_;
          *(long *)*pauVar26 = auVar39._0_8_;
          pauVar26 = pauVar26 + -1;
          pauVar28 = pauVar28 + 1;
        } while (pauVar26 != (undefined1 (*) [16])auStack_210);
        iVar31 = 0xff - iVar31;
        iVar5 = (0xff - iVar34) - iVar31;
        iVar21 = 0x100 - iVar34;
        dVar38 = (double)(0xff - iVar34);
        if (iVar21 <= iVar31) {
          bVar4 = true;
          goto LAB_0021f5e4;
        }
        param_3 = dVar38 - 1.0;
      }
      else {
        iVar21 = iVar17 + 1;
        iVar5 = iVar17 - iVar31;
        bVar4 = false;
        dVar38 = (double)iVar17;
        if (iVar31 < iVar21) {
          param_3 = dVar38 - 1.0;
          goto LAB_0021ec0c;
        }
LAB_0021f5e4:
        dVar45 = 0.0;
        do {
          dVar42 = (double)iVar5 *
                   (double)*(int *)((long)*(undefined1 (*) [16])&local_400 + (long)iVar21 * 4) +
                   (double)iVar21 * (double)iVar35;
          dVar40 = (double)iVar21;
          if (dVar42 <= dVar45) {
            dVar42 = dVar45;
            dVar40 = dVar38;
          }
          dVar38 = dVar40;
          iVar21 = iVar21 + 1;
          dVar45 = dVar42;
        } while (iVar21 <= iVar31);
        param_3 = dVar38 - 1.0;
        if (!bVar4) goto LAB_0021ec0c;
      }
      param_3 = DAT_00220040 - param_3;
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
LAB_0021ebd4:
    if ((param_5 & 0xfffffff8U) != 0x18) goto LAB_0021ebe4;
LAB_0021f87c:
    local_5c0 = 0;
    local_5b8 = 0;
    puVar19 = (undefined8 *)String::allocate((String *)&local_5c0,0x39);
    uVar14 = LAB_0045fcb8;
    uVar13 = DAT_0045fca8;
    uVar12 = DAT_0045fca0;
    uVar11 = DAT_0045fc98;
    uVar10 = DAT_0045fc90;
    uVar9 = DAT_0045fc88;
    uVar8 = DAT_0045fc80;
    puVar19[6] = DAT_0045fcb0;
    *(undefined1 *)(puVar19 + 7) = uVar14;
    *puVar19 = uVar8;
    puVar19[1] = uVar9;
    puVar19[2] = uVar10;
    puVar19[3] = uVar11;
    puVar19[4] = uVar12;
    puVar19[5] = uVar13;
    error(-0xd7,(String *)&local_5c0,
          "double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x4ab);
    String::deallocate((String *)&local_5c0);
LAB_0021ebf4:
    iVar15 = *local_420;
    uVar16 = local_460 & 0xfff;
    iVar33 = local_420[1];
  }
LAB_0021ec0c:
  uVar32 = param_5 & 7;
  local_400._4_4_ = iVar15;
  local_400._0_4_ = iVar33;
  _OutputArray::create(param_2,(ParallelLoopBody *)&local_400,uVar16,0xffffffff,0,0);
  iVar15 = _InputArray::kind((_InputArray *)param_2);
  if (iVar15 != 0x10000) {
    _InputArray::getMat_((int)param_2);
LAB_0021ec54:
    uVar16 = local_460 & 7;
    if (uVar16 != 0) goto LAB_0021ec60;
LAB_0021f744:
    uVar6 = (int)param_3 - (uint)(param_3 < (double)(int)param_3);
    param_3 = (double)(int)uVar6;
    lVar29 = lrint(param_4);
    uVar16 = uVar6;
    if (uVar32 != 2) {
      uVar16 = (uint)lVar29;
    }
    if (0xff < uVar16) {
      bVar2 = -(0 < (int)uVar16);
      uVar16 = (uint)bVar2;
      if (0xfe < uVar6) goto LAB_0021f780;
      goto LAB_0021fb64;
    }
    bVar2 = (byte)uVar16;
    uVar16 = uVar16 & 0xff;
    if (uVar6 < 0xff) goto LAB_0021fb64;
LAB_0021f780:
    if (uVar32 < 2) {
      if (uVar32 == 0) {
        dVar38 = 0.0;
        if ((int)uVar6 < 0xff) {
          dVar38 = (double)bVar2;
        }
      }
      else {
        if (0xfe < (int)uVar6) goto LAB_0021f7b0;
        dVar38 = 0.0;
      }
      goto LAB_0021fd98;
    }
    if ((-1 < (int)uVar6) || ((uVar32 - 2 & 0xfffffffd) != 0)) {
      if (0xfe < (int)uVar6 && uVar32 == 3) {
LAB_0021f7b0:
        if (uVar32 == 1) {
          dVar38 = (double)bVar2;
          goto LAB_0021fd98;
        }
        goto LAB_0021fdf8;
      }
      goto LAB_0021fe50;
    }
LAB_0021fdf8:
    dVar38 = 0.0;
    goto LAB_0021fd98;
  }
  pMVar27 = *(Mat **)(param_2 + 8);
  local_540 = &uStack_578;
  local_538 = &local_530;
  local_580 = *(uint *)pMVar27;
  iStack_57c = *(int *)(pMVar27 + 4);
  uStack_578 = *(uint *)(pMVar27 + 8);
  iStack_574 = *(int *)(pMVar27 + 0xc);
  local_570 = *(undefined8 *)(pMVar27 + 0x10);
  local_568 = *(undefined8 *)(pMVar27 + 0x18);
  local_560 = *(undefined8 *)(pMVar27 + 0x20);
  local_558 = *(undefined8 *)(pMVar27 + 0x28);
  local_550 = *(undefined8 *)(pMVar27 + 0x30);
  local_548 = *(long *)(pMVar27 + 0x38);
  local_528 = 0;
  local_530 = 0;
  if (local_548 != 0) {
    piVar23 = (int *)(local_548 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = *piVar23 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (2 < *(int *)(pMVar27 + 4)) {
    iStack_57c = 0;
    Mat::copySize((Mat *)&local_580,pMVar27);
    goto LAB_0021ec54;
  }
  local_530 = **(undefined8 **)(pMVar27 + 0x48);
  local_528 = (*(undefined8 **)(pMVar27 + 0x48))[1];
  uVar16 = local_460 & 7;
  if (uVar16 == 0) goto LAB_0021f744;
LAB_0021ec60:
  if (uVar16 == 3) {
    iVar33 = (int)param_3 - (uint)(param_3 < (double)(int)param_3);
    param_3 = (double)iVar33;
    lVar29 = lrint(param_4);
    iVar15 = iVar33;
    if (uVar32 != 2) {
      iVar15 = (int)lVar29;
    }
    if (iVar15 + 0x8000U < 0x10000) {
      uVar16 = (uint)(short)iVar15;
    }
    else if (iVar15 < 1) {
      uVar16 = 0xffff8000;
    }
    else {
      uVar16 = 0x7fff;
    }
    if (0xfffe < iVar33 + 0x8000U) {
      if (uVar32 < 2) {
        if (uVar32 == 0) {
          dVar38 = 0.0;
          if (iVar33 < 0x7fff) goto LAB_0021fe14;
        }
        else {
          if (0x7ffe < iVar33) goto LAB_0021fdf0;
          dVar38 = 0.0;
        }
      }
      else if ((-0x8001 < iVar33) || (dVar38 = 0.0, (uVar32 - 2 & 0xfffffffd) != 0)) {
        if (iVar33 < 0x7fff || uVar32 != 3) {
LAB_0021fe50:
          local_3f0 = 0;
          uStack_3f8 = &local_580;
          local_400 = (undefined **)CONCAT44(local_400._4_4_,0x2010000);
          local_3ec = local_3f0;
          Mat::copyTo((Mat *)&local_460,(_OutputArray *)&local_400);
          goto LAB_0021f29c;
        }
LAB_0021fdf0:
        if (uVar32 != 1) goto LAB_0021fdf8;
LAB_0021fe14:
        dVar38 = (double)(int)uVar16;
      }
LAB_0021fd98:
      uStack_3f8 = (uint *)&local_4c0;
      local_400 = (undefined **)CONCAT44(local_400._4_4_,0xc1020006);
      local_3f0 = 1;
      local_3ec = 1;
      local_4c0 = dVar38;
      p_Var20 = (_InputArray *)noArray();
      Mat::setTo((Mat *)&local_580,(_InputArray *)&local_400,p_Var20);
      goto LAB_0021f29c;
    }
LAB_0021fb64:
    param_4 = (double)(int)uVar16;
  }
  else if (uVar16 != 5) {
    local_590[0] = 0;
    local_590[1] = 0;
    String::allocate((String *)local_590,0);
    error(-0xd2,(String *)local_590,
          "double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x4f3);
    String::deallocate((String *)local_590);
  }
  local_4e0 = &local_518;
  local_4d8 = &local_4d0;
  local_590[0] = (ulong)uStack_578 << 0x20;
  local_51c = local_45c;
  local_518 = local_458;
  local_514 = local_454;
  local_510 = local_450;
  uStack_508 = local_448;
  local_500 = local_440;
  uStack_4f8 = local_438;
  local_4f0 = local_430;
  lStack_4e8 = local_428;
  local_4c8 = 0;
  local_4d0 = 0;
  if (local_428 != 0) {
    piVar23 = (int *)(local_428 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = *piVar23 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  local_520 = local_460;
  if (local_45c < 3) {
    local_4d0 = *local_418;
    local_4c8 = local_418[1];
  }
  else {
    local_51c = 0;
    Mat::copySize((Mat *)&local_520,(Mat *)&local_460);
  }
  local_4c0 = (double)CONCAT44(iStack_57c,local_580);
  uStack_4b8 = CONCAT44(iStack_574,uStack_578);
  local_478 = &local_470;
  local_480 = &uStack_4b8;
  uStack_468 = 0;
  local_470 = 0;
  local_4b0 = local_570;
  uStack_4a8 = local_568;
  local_4a0 = local_560;
  uStack_498 = local_558;
  local_490 = local_550;
  lStack_488 = local_548;
  if (local_548 != 0) {
    piVar23 = (int *)(local_548 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = *piVar23 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iStack_57c < 3) {
    local_470 = *local_538;
    uStack_468 = local_538[1];
  }
  else {
    local_4c0 = (double)(ulong)local_580;
    Mat::copySize((Mat *)&local_4c0,(Mat *)&local_580);
  }
  local_3b8 = &local_3f0;
  local_3b0 = &local_3a8;
  local_358 = &local_390;
  local_350 = &local_348;
  local_400 = &PTR_FUN_004f59e0;
  local_3f0 = 0;
  local_3ec = 0;
  local_3c8 = 0;
  local_3a0 = 0;
  local_3a8 = 0;
  local_398 = 0x42ff0000;
  local_394 = 0;
  local_390 = 0;
  local_38c = 0;
  local_388 = 0;
  uStack_380 = 0;
  local_378 = 0;
  uStack_370 = 0;
  local_368 = 0;
  lStack_360 = 0;
  local_340 = 0;
  local_348 = 0;
  if (lStack_4e8 != 0) {
    piVar23 = (int *)(lStack_4e8 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = *piVar23 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  lStack_3c0 = 0;
  local_3e8 = 0;
  uStack_3d0 = 0;
  local_3d8 = 0;
  uStack_3e0 = 0;
  if (local_51c < 3) {
    uStack_3f8 = (uint *)CONCAT44(local_51c,local_520);
    local_3f0 = local_518;
    local_3a8 = *local_4d8;
    local_3ec = local_514;
    local_3a0 = local_4d8[1];
  }
  else {
    uStack_3f8 = (uint *)(ulong)local_520;
    Mat::copySize((Mat *)&uStack_3f8,(Mat *)&local_520);
  }
  uStack_3e0 = uStack_508;
  local_3e8 = local_510;
  uStack_3d0 = uStack_4f8;
  local_3d8 = local_500;
  lStack_3c0 = lStack_4e8;
  local_3c8 = local_4f0;
  if (lStack_488 != 0) {
    piVar23 = (int *)(lStack_488 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = *piVar23 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_360 != 0) {
    piVar23 = (int *)(lStack_360 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_398);
    }
  }
  lStack_360 = 0;
  local_388 = 0;
  uStack_370 = 0;
  local_378 = 0;
  uStack_380 = 0;
  if (local_394 < 1) {
LAB_0021f008:
    local_398 = (uint)local_4c0;
    if (2 < local_4c0._4_4_) goto LAB_0021f648;
    local_394 = local_4c0._4_4_;
    local_390 = (undefined4)uStack_4b8;
    local_38c = uStack_4b8._4_4_;
    *local_350 = *local_478;
    local_350[1] = local_478[1];
  }
  else {
    iVar15 = 0;
    puVar22 = local_358;
    do {
      *puVar22 = 0;
      iVar15 = iVar15 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar15 < local_394);
    if (local_394 < 3) goto LAB_0021f008;
LAB_0021f648:
    local_398 = (uint)local_4c0;
    Mat::copySize((Mat *)&local_398,(Mat *)&local_4c0);
  }
  uStack_380 = uStack_4a8;
  local_388 = local_4b0;
  uStack_370 = uStack_498;
  local_378 = local_4a0;
  lStack_360 = lStack_488;
  local_368 = local_490;
  if (iStack_57c < 3) {
    uVar30 = (long)iStack_574 * (long)(int)uStack_578;
  }
  else {
    lVar29 = 0;
    uVar30 = 1;
    do {
      puVar24 = local_540 + lVar29;
      lVar29 = lVar29 + 1;
      uVar30 = uVar30 * (long)(int)*puVar24;
    } while ((int)lVar29 < iStack_57c);
  }
  local_338 = param_3;
  dStack_330 = param_4;
  local_328 = uVar32;
  parallel_for_((Range *)local_590,(ParallelLoopBody *)&local_400,(double)uVar30 * DAT_00220048);
  local_400 = &PTR_FUN_004f59e0;
  if (lStack_360 != 0) {
    piVar23 = (int *)(lStack_360 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_398);
    }
  }
  lStack_360 = 0;
  local_388 = 0;
  uStack_370 = 0;
  local_378 = 0;
  uStack_380 = 0;
  if (0 < local_394) {
    iVar15 = 0;
    puVar22 = local_358;
    do {
      *puVar22 = 0;
      iVar15 = iVar15 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar15 < local_394);
  }
  if (local_350 != &local_348) {
    fastFree(local_350);
  }
  if (lStack_3c0 != 0) {
    piVar23 = (int *)(lStack_3c0 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&uStack_3f8);
    }
  }
  lStack_3c0 = 0;
  local_3e8 = 0;
  uStack_3d0 = 0;
  local_3d8 = 0;
  uStack_3e0 = 0;
  if (0 < uStack_3f8._4_4_) {
    iVar15 = 0;
    piVar23 = local_3b8;
    do {
      *piVar23 = 0;
      iVar15 = iVar15 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar15 < uStack_3f8._4_4_);
  }
  if (local_3b0 != &local_3a8) {
    fastFree(local_3b0);
  }
  ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_400);
  if (lStack_488 != 0) {
    piVar23 = (int *)(lStack_488 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_4c0);
    }
  }
  lStack_488 = 0;
  local_4b0 = 0;
  uStack_498 = 0;
  local_4a0 = 0;
  uStack_4a8 = 0;
  if (0 < local_4c0._4_4_) {
    iVar15 = 0;
    puVar19 = local_480;
    do {
      *(undefined4 *)puVar19 = 0;
      iVar15 = iVar15 + 1;
      puVar19 = (undefined8 *)((long)puVar19 + 4);
    } while (iVar15 < local_4c0._4_4_);
  }
  if (local_478 != &local_470) {
    fastFree(local_478);
  }
  if (lStack_4e8 != 0) {
    piVar23 = (int *)(lStack_4e8 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_520);
    }
  }
  lStack_4e8 = 0;
  local_510 = 0;
  uStack_4f8 = 0;
  local_500 = 0;
  uStack_508 = 0;
  if (0 < local_51c) {
    iVar15 = 0;
    piVar23 = local_4e0;
    do {
      *piVar23 = 0;
      iVar15 = iVar15 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar15 < local_51c);
  }
  if (local_4d8 != &local_4d0) {
    fastFree(local_4d8);
  }
LAB_0021f29c:
  if (local_548 != 0) {
    piVar23 = (int *)(local_548 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_580);
    }
  }
  local_548 = 0;
  local_570 = 0;
  local_558 = 0;
  local_560 = 0;
  local_568 = 0;
  if (0 < iStack_57c) {
    iVar15 = 0;
    puVar24 = local_540;
    do {
      *puVar24 = 0;
      iVar15 = iVar15 + 1;
      puVar24 = puVar24 + 1;
    } while (iVar15 < iStack_57c);
  }
  if (local_538 != &local_530) {
    fastFree(local_538);
  }
  if (local_428 != 0) {
    piVar23 = (int *)(local_428 + 0x14);
    do {
      iVar15 = *piVar23;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar4) {
        *piVar23 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_460);
    }
  }
  local_428 = 0;
  local_450 = 0;
  local_438 = 0;
  local_440 = 0;
  local_448 = 0;
  if (0 < local_45c) {
    iVar15 = 0;
    piVar23 = local_420;
    do {
      *piVar23 = 0;
      iVar15 = iVar15 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar15 < local_45c);
  }
  if (local_418 != &local_410) {
    fastFree(local_418);
  }
  auVar41._8_8_ = 0;
  auVar41._0_8_ = param_3;
  return auVar41;
}


==================================================================

### FUNC 00220050 (2668 bytes) name=adaptiveThreshold

/* WARNING: Removing unreachable block (ram,0x002201b0) */
/* WARNING: Removing unreachable block (ram,0x002201b4) */
/* WARNING: Removing unreachable block (ram,0x002201bc) */
/* WARNING: Removing unreachable block (ram,0x002201c4) */
/* WARNING: Removing unreachable block (ram,0x00220a64) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::adaptiveThreshold(cv::_InputArray const&, cv::_OutputArray const&, double, int, int, int,
   double) */

void cv::adaptiveThreshold
               (_InputArray *param_1,_OutputArray *param_2,double param_3,int param_4,int param_5,
               int param_6,double param_7)

{
  int iVar1;
  Scalar_ SVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined1 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  char *pcVar14;
  long lVar15;
  undefined8 *puVar16;
  Scalar_ *pSVar17;
  long lVar18;
  undefined4 *puVar19;
  int *piVar20;
  Mat *pMVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  int iVar25;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  undefined8 local_440;
  undefined8 local_438;
  Mat *local_430;
  int local_428;
  int local_424;
  uint local_420;
  int local_41c;
  undefined4 local_418;
  undefined4 local_414;
  long local_410;
  undefined8 uStack_408;
  undefined8 local_400;
  undefined8 uStack_3f8;
  undefined8 local_3f0;
  long lStack_3e8;
  undefined4 *local_3e0;
  long *local_3d8;
  long local_3d0;
  long local_3c8;
  undefined8 local_3c0;
  undefined8 uStack_3b8;
  long local_3b0;
  undefined8 uStack_3a8;
  undefined8 local_3a0;
  undefined8 uStack_398;
  undefined8 local_390;
  long lStack_388;
  undefined8 *local_380;
  long *local_378;
  long local_370;
  long lStack_368;
  uint local_360;
  int local_35c;
  int local_358;
  undefined4 local_354;
  long local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  int *local_320;
  long *local_318;
  long local_310;
  long local_308;
  undefined8 local_300;
  Mat *local_2f8;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar21 = *(Mat **)(param_1 + 8);
    local_320 = &local_358;
    local_318 = &local_310;
    local_360 = *(uint *)pMVar21;
    local_35c = *(int *)(pMVar21 + 4);
    local_358 = *(int *)(pMVar21 + 8);
    local_354 = *(undefined4 *)(pMVar21 + 0xc);
    local_350 = *(long *)(pMVar21 + 0x10);
    local_348 = *(undefined8 *)(pMVar21 + 0x18);
    local_340 = *(undefined8 *)(pMVar21 + 0x20);
    local_338 = *(undefined8 *)(pMVar21 + 0x28);
    local_330 = *(undefined8 *)(pMVar21 + 0x30);
    local_328 = *(long *)(pMVar21 + 0x38);
    local_308 = 0;
    local_310 = 0;
    if (local_328 != 0) {
      piVar20 = (int *)(local_328 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = *piVar20 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_310 = **(long **)(pMVar21 + 0x48);
      local_308 = (*(long **)(pMVar21 + 0x48))[1];
    }
    else {
      local_35c = 0;
      Mat::copySize((Mat *)&local_360,pMVar21);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((local_360 & 0xfff) != 0) {
    local_468 = 0;
    local_460 = 0;
    puVar16 = (undefined8 *)String::allocate((String *)&local_468,0x15);
    uVar7 = DAT_0045fcd4;
    uVar6 = _LAB_0045fcc8;
    uVar5 = DAT_0045fcc0;
    *(undefined4 *)(puVar16 + 2) = DAT_0045fcd0;
    *(undefined1 *)((long)puVar16 + 0x14) = uVar7;
    *puVar16 = uVar5;
    puVar16[1] = uVar6;
    error(-0xd7,(String *)&local_468,
          "void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x500);
    String::deallocate((String *)&local_468);
  }
  if ((param_6 % 2 != 1) || (param_6 < 2)) {
    local_458 = 0;
    local_450 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_458,0x23);
    cVar3 = s_blockSize___2____1____blockSize_>_0045fcd8[0x22];
    uVar9 = s_blockSize___2____1____blockSize_>_0045fcd8._24_8_;
    uVar8 = s_blockSize___2____1____blockSize_>_0045fcd8._16_8_;
    uVar6 = s_blockSize___2____1____blockSize_>_0045fcd8._8_8_;
    uVar5 = s_blockSize___2____1____blockSize_>_0045fcd8._0_8_;
    *(undefined2 *)(pcVar14 + 0x20) = s_blockSize___2____1____blockSize_>_0045fcd8._32_2_;
    pcVar14[0x22] = cVar3;
    *(undefined8 *)pcVar14 = uVar5;
    *(undefined8 *)(pcVar14 + 8) = uVar6;
    *(undefined8 *)(pcVar14 + 0x10) = uVar8;
    *(undefined8 *)(pcVar14 + 0x18) = uVar9;
    error(-0xd7,(String *)&local_458,
          "void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x501);
    String::deallocate((String *)&local_458);
  }
  iVar11 = local_320[1];
  iVar25 = *local_320;
  local_300 = CONCAT44(iVar25,iVar11);
  _OutputArray::create(param_2,(Scalar_ *)&local_300,local_360 & 0xfff,0xffffffff,0,0);
  iVar12 = _InputArray::kind((_InputArray *)param_2);
  if (iVar12 == 0x10000) {
    pMVar21 = *(Mat **)(param_2 + 8);
    local_3e0 = &local_418;
    local_3d8 = &local_3d0;
    local_420 = *(uint *)pMVar21;
    local_41c = *(int *)(pMVar21 + 4);
    local_418 = *(undefined4 *)(pMVar21 + 8);
    local_414 = *(undefined4 *)(pMVar21 + 0xc);
    local_410 = *(long *)(pMVar21 + 0x10);
    uStack_408 = *(undefined8 *)(pMVar21 + 0x18);
    local_400 = *(undefined8 *)(pMVar21 + 0x20);
    uStack_3f8 = *(undefined8 *)(pMVar21 + 0x28);
    local_3f0 = *(undefined8 *)(pMVar21 + 0x30);
    lStack_3e8 = *(long *)(pMVar21 + 0x38);
    local_3c8 = 0;
    local_3d0 = 0;
    if (lStack_3e8 != 0) {
      piVar20 = (int *)(lStack_3e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = *piVar20 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_3d0 = **(long **)(pMVar21 + 0x48);
      local_3c8 = (*(long **)(pMVar21 + 0x48))[1];
      uVar5 = _DAT_00220b70;
    }
    else {
      local_41c = 0;
      Mat::copySize((Mat *)&local_420,pMVar21);
      uVar5 = _DAT_00220b70;
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
    uVar5 = _DAT_00220b70;
  }
  _DAT_00220b70 = uVar5;
  if (param_3 < 0.0) {
    local_2f8 = (Mat *)0x0;
    local_300 = 0;
    uStack_2e8 = 0;
    local_2f0 = 0;
    Mat::operator=((Mat *)&local_420,(Scalar_ *)&local_300);
    if (lStack_3e8 != 0) {
      piVar20 = (int *)(lStack_3e8 + 0x14);
      do {
        iVar11 = *piVar20;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_420);
      }
    }
    lStack_3e8 = 0;
    local_410 = 0;
    uStack_3f8 = 0;
    local_400 = 0;
    uStack_408 = 0;
    if (0 < local_41c) {
      iVar11 = 0;
      puVar19 = local_3e0;
      do {
        *puVar19 = 0;
        iVar11 = iVar11 + 1;
        puVar19 = puVar19 + 1;
      } while (iVar11 < local_41c);
    }
    if (local_3d8 != &local_3d0) {
      fastFree(local_3d8);
    }
    if (local_328 != 0) {
      piVar20 = (int *)(local_328 + 0x14);
      do {
        iVar11 = *piVar20;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate((Mat *)&local_360);
      }
    }
    if (0 < local_35c) {
      iVar11 = 0;
      piVar20 = local_320;
      do {
        *piVar20 = 0;
        iVar11 = iVar11 + 1;
        piVar20 = piVar20 + 1;
      } while (iVar11 < local_35c);
    }
    goto LAB_00220524;
  }
  lStack_368 = 0;
  local_370 = 0;
  local_3b0 = 0;
  uStack_3a8 = 0;
  local_3a0 = 0;
  uStack_398 = 0;
  local_390 = 0;
  lStack_388 = 0;
  local_3c0 = uVar5;
  uStack_3b8 = _UNK_00220b78;
  local_380 = &uStack_3b8;
  local_378 = &local_370;
  if (local_350 != local_410) {
    if (lStack_3e8 != 0) {
      piVar20 = (int *)(lStack_3e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = *piVar20 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    local_3c0._4_4_ = (int)((ulong)uVar5 >> 0x20);
    if (local_3c0._4_4_ < 1) {
LAB_00220218:
      if (2 < local_41c) goto LAB_00220224;
      uStack_3b8 = CONCAT44(local_414,local_418);
      local_370 = *local_3d8;
      local_3c0 = CONCAT44(local_41c,local_420);
      lStack_368 = local_3d8[1];
    }
    else {
      iVar12 = 0;
      puVar16 = &uStack_3b8;
      do {
        *(undefined4 *)puVar16 = 0;
        iVar12 = iVar12 + 1;
        puVar16 = (undefined8 *)((long)puVar16 + 4);
      } while (iVar12 < local_3c0._4_4_);
      if (local_3c0._4_4_ < 3) goto LAB_00220218;
LAB_00220224:
      local_3c0 = CONCAT44(local_3c0._4_4_,local_420);
      lStack_368 = 0;
      local_370 = 0;
      local_390 = 0;
      lStack_388 = 0;
      uStack_398 = 0;
      local_3a0 = 0;
      uStack_3a8 = 0;
      local_3b0 = 0;
      Mat::copySize((Mat *)&local_3c0,(Mat *)&local_420);
    }
    uStack_398 = uStack_3f8;
    local_3a0 = local_400;
    lStack_388 = lStack_3e8;
    local_390 = local_3f0;
    uStack_3a8 = uStack_408;
    local_3b0 = local_410;
  }
  if (param_4 == 0) {
    local_438 = CONCAT44(local_438._4_4_,0x1010000);
    local_2f0 = 0;
    local_300 = CONCAT44(local_300._4_4_,0x2010000);
    local_458 = CONCAT44(param_6,param_6);
    local_448 = 0xffffffffffffffff;
    local_430 = (Mat *)&local_360;
    local_428 = param_4;
    local_424 = param_4;
    local_2f8 = (Mat *)&local_3c0;
    boxFilter(&local_438,(Scalar_ *)&local_300,local_360 & 0xfff,&local_458,&local_448,1,1);
  }
  else if (param_4 == 1) {
    local_428 = 0;
    local_424 = 0;
    local_438 = CONCAT44(local_438._4_4_,0x1010000);
    local_2f0 = 0;
    local_300 = CONCAT44(local_300._4_4_,0x2010000);
    local_448 = CONCAT44(param_6,param_6);
    local_430 = (Mat *)&local_360;
    local_2f8 = (Mat *)&local_3c0;
    GaussianBlur(0,0,&local_438,(Scalar_ *)&local_300,&local_448,1);
  }
  else {
    local_448 = 0;
    local_440 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_448,0x2d);
    cVar3 = s_Unknown_unsupported_adaptive_thr_0045fd00[0x2c];
    uVar10 = s_Unknown_unsupported_adaptive_thr_0045fd00._40_4_;
    uVar9 = s_Unknown_unsupported_adaptive_thr_0045fd00._24_8_;
    uVar8 = s_Unknown_unsupported_adaptive_thr_0045fd00._16_8_;
    uVar6 = s_Unknown_unsupported_adaptive_thr_0045fd00._8_8_;
    uVar5 = s_Unknown_unsupported_adaptive_thr_0045fd00._0_8_;
    *(undefined8 *)(pcVar14 + 0x20) = s_Unknown_unsupported_adaptive_thr_0045fd00._32_8_;
    *(undefined4 *)(pcVar14 + 0x28) = uVar10;
    pcVar14[0x2c] = cVar3;
    *(undefined8 *)pcVar14 = uVar5;
    *(undefined8 *)(pcVar14 + 8) = uVar6;
    *(undefined8 *)(pcVar14 + 0x10) = uVar8;
    *(undefined8 *)(pcVar14 + 0x18) = uVar9;
    error(-0xce,(String *)&local_448,
          "void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x518);
    String::deallocate((String *)&local_448);
  }
  lVar15 = lrint(param_3);
  uVar13 = (uint)lVar15;
  if (0xff < uVar13) {
    uVar13 = -(uint)(0 < (int)uVar13);
  }
  if (param_5 == 0) {
    pSVar17 = (Scalar_ *)&local_300;
    iVar12 = -0xff;
    do {
      iVar1 = iVar12 + 1;
      SVar2 = SUB41(uVar13,0);
      if (iVar12 <= (int)-((uint)((double)(int)param_7 < param_7) + (int)param_7)) {
        SVar2 = (Scalar_)0x0;
      }
      *pSVar17 = SVar2;
      pSVar17 = pSVar17 + 1;
      iVar12 = iVar1;
    } while (iVar1 != 0x201);
  }
  else if (param_5 == 1) {
    pSVar17 = (Scalar_ *)&local_300;
    iVar12 = -0xff;
    do {
      iVar1 = iVar12 + 1;
      SVar2 = SUB41(uVar13,0);
      if ((int)((uint)(param_7 < (double)(int)param_7) - (int)param_7) < iVar12) {
        SVar2 = (Scalar_)0x0;
      }
      *pSVar17 = SVar2;
      pSVar17 = pSVar17 + 1;
      iVar12 = iVar1;
    } while (iVar1 != 0x201);
  }
  else {
    local_438 = 0;
    local_430 = (Mat *)0x0;
    puVar16 = (undefined8 *)String::allocate((String *)&local_438,0x22);
    uVar9 = _LAB_0045fd48;
    uVar8 = _DAT_0045fd40;
    uVar6 = DAT_0045fd38;
    uVar5 = DAT_0045fd30;
    *(undefined2 *)(puVar16 + 4) = _LAB_0045fd50;
    *puVar16 = uVar5;
    puVar16[1] = uVar6;
    puVar16[2] = uVar8;
    puVar16[3] = uVar9;
    error(-0xce,(String *)&local_438,
          "void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)"
          ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x526);
    String::deallocate((String *)&local_438);
  }
  if ((((local_360 >> 0xe & 1) == 0) || (((uint)local_3c0 >> 0xe & 1) == 0)) ||
     ((local_420 >> 0xe & 1) == 0)) {
    if (0 < iVar25) goto LAB_00220358;
  }
  else {
    iVar11 = iVar11 * iVar25;
    iVar25 = 1;
LAB_00220358:
    lVar15 = 0;
    do {
      lVar24 = *local_318;
      lVar22 = *local_378;
      lVar18 = *local_3d8;
      if (0 < iVar11) {
        lVar23 = 0;
        do {
          *(Scalar_ *)(local_410 + lVar15 * lVar18 + lVar23) =
               ((Scalar_ *)&local_300)
               [(int)(((uint)*(byte *)(local_350 + lVar15 * lVar24 + lVar23) -
                      (uint)*(byte *)(local_3b0 + lVar15 * lVar22 + lVar23)) + 0xff)];
          lVar23 = lVar23 + 1;
        } while ((int)lVar23 < iVar11);
      }
      lVar15 = lVar15 + 1;
    } while ((int)lVar15 < iVar25);
  }
  if (lStack_388 != 0) {
    piVar20 = (int *)(lStack_388 + 0x14);
    do {
      iVar11 = *piVar20;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
      if (bVar4) {
        *piVar20 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      Mat::deallocate((Mat *)&local_3c0);
    }
  }
  lStack_388 = 0;
  local_3b0 = 0;
  uStack_398 = 0;
  local_3a0 = 0;
  uStack_3a8 = 0;
  if (0 < local_3c0._4_4_) {
    iVar11 = 0;
    puVar16 = local_380;
    do {
      *(undefined4 *)puVar16 = 0;
      iVar11 = iVar11 + 1;
      puVar16 = (undefined8 *)((long)puVar16 + 4);
    } while (iVar11 < local_3c0._4_4_);
  }
  if (local_378 != &local_370) {
    fastFree(local_378);
  }
  if (lStack_3e8 != 0) {
    piVar20 = (int *)(lStack_3e8 + 0x14);
    do {
      iVar11 = *piVar20;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
      if (bVar4) {
        *piVar20 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      Mat::deallocate((Mat *)&local_420);
    }
  }
  lStack_3e8 = 0;
  local_410 = 0;
  uStack_3f8 = 0;
  local_400 = 0;
  uStack_408 = 0;
  if (0 < local_41c) {
    iVar11 = 0;
    puVar19 = local_3e0;
    do {
      *puVar19 = 0;
      iVar11 = iVar11 + 1;
      puVar19 = puVar19 + 1;
    } while (iVar11 < local_41c);
  }
  if (local_3d8 != &local_3d0) {
    fastFree(local_3d8);
  }
  if (local_328 != 0) {
    piVar20 = (int *)(local_328 + 0x14);
    do {
      iVar11 = *piVar20;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
      if (bVar4) {
        *piVar20 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      Mat::deallocate((Mat *)&local_360);
    }
  }
  if (0 < local_35c) {
    iVar11 = 0;
    piVar20 = local_320;
    do {
      *piVar20 = 0;
      iVar11 = iVar11 + 1;
      piVar20 = piVar20 + 1;
    } while (iVar11 < local_35c);
  }
LAB_00220524:
  local_328 = 0;
  local_338 = 0;
  local_340 = 0;
  local_348 = 0;
  local_350 = 0;
  if (local_318 != &local_310) {
    fastFree(local_318);
  }
  return;
}


==================================================================

### FUNC 00220b80 (1112 bytes) name=cvThreshold

undefined1  [16]
cvThreshold(double param_1,double param_2,cv *param_3,cv *param_4,int param_5,undefined8 param_6,
           undefined8 param_7,AutoBuffer *param_8)

{
  char cVar1;
  bool bVar2;
  void *__dest;
  int *piVar3;
  undefined8 *puVar4;
  int *piVar5;
  int iVar6;
  undefined1 auVar7 [16];
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  uStack_b8 = uStack_118;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar3 = (int *)(local_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_68 = local_d8[1];
    iVar6 = local_20[-1];
    if (iVar6 == local_e0[-1]) {
LAB_00220f28:
      if (iVar6 == 2) {
        if ((*local_20 == *local_e0) && (local_20[1] == local_e0[1])) goto LAB_00220f70;
      }
      else if (iVar6 < 1) {
LAB_00220f70:
        if (((local_60 >> 3 & 0x1ff) + 1 == (local_120 >> 3 & 0x1ff) + 1) &&
           (((local_60 & 7) == (local_120 & 7) || ((local_120 & 7) == 0)))) goto LAB_00220cdc;
      }
      else if (*local_20 == *local_e0) {
        piVar3 = local_20;
        piVar5 = local_e0;
        do {
          piVar5 = piVar5 + 1;
          if (piVar3 == local_20 + (iVar6 - 1)) goto LAB_00220f70;
          piVar3 = piVar3 + 1;
        } while (*piVar3 == *piVar5);
      }
    }
  }
  else {
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    iVar6 = local_20[-1];
    if (iVar6 == local_e0[-1]) goto LAB_00220f28;
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  __dest = (void *)cv::String::allocate((String *)&local_138,0x70);
  memcpy(__dest,&DAT_0045fd58,0x70);
  cv::error(-0xd7,(String *)&local_138,"double cvThreshold(const void*, void*, double, double, int)"
            ,"/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x53f);
  cv::String::deallocate((String *)&local_138);
LAB_00220cdc:
  local_128 = 0;
  local_124 = 0;
  local_138._0_4_ = 0x2010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = (Mat *)&local_60;
  local_130 = (Mat *)&local_120;
  auVar7._0_8_ = cv::threshold((_InputArray *)local_150,(_OutputArray *)&local_138,param_1,param_2,
                               param_5);
  if (local_b0 != local_110) {
    local_128 = 0;
    local_124 = 0;
    local_138._0_4_ = 0x2010000;
    local_130 = (Mat *)&local_c0;
    cv::Mat::convertTo((Mat *)&local_120,(_OutputArray *)&local_138,(uint)local_c0 & 7,1.0,0.0);
  }
  if (local_88 != 0) {
    piVar3 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar3;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar6 = 0;
    puVar4 = local_80;
    do {
      *(undefined4 *)puVar4 = 0;
      iVar6 = iVar6 + 1;
      puVar4 = (undefined8 *)((long)puVar4 + 4);
    } while (iVar6 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar3 = (int *)(local_e8 + 0x14);
    do {
      iVar6 = *piVar3;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar6 = 0;
    do {
      *local_e0 = 0;
      iVar6 = iVar6 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar6 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar3 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar3;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  auVar7._8_8_ = 0;
  return auVar7;
}


==================================================================

### FUNC 00221064 (728 bytes) name=cvAdaptiveThreshold

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAdaptiveThreshold(double param_1,double param_2,cv *param_3,cv *param_4,int param_5,
                        int param_6,int param_7,AutoBuffer *param_8)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
  iVar10 = local_80[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002212f8;
    }
    else if (iVar10 < 1) {
LAB_002212f8:
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_0022114c;
    }
    else if (*local_80 == *local_20) {
      piVar9 = local_80;
      piVar11 = local_20;
      do {
        piVar11 = piVar11 + 1;
        if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002212f8;
        piVar9 = piVar9 + 1;
      } while (*piVar9 == *piVar11);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar8 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_t_type___0045fdf8._0_8_;
  uVar6 = _LAB_0045fdf0;
  uVar5 = _LAB_0045fde8;
  uVar4 = DAT_0045fde0;
  uVar3 = DAT_0045fdd8;
  *puVar8 = DAT_0045fdd0;
  puVar8[1] = uVar3;
  puVar8[2] = uVar4;
  puVar8[3] = uVar5;
  puVar8[4] = uVar6;
  puVar8[5] = uVar7;
  cv::error(-0xd7,(String *)&local_d8,
            "void cvAdaptiveThreshold(const void*, void*, double, int, int, int, double)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/thresh.cpp",0x54d);
  cv::String::deallocate((String *)&local_d8);
LAB_0022114c:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::adaptiveThreshold
            ((_InputArray *)local_f0,(_OutputArray *)&local_d8,param_1,param_5,param_6,param_7,
             param_2);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0022139c (716 bytes) name=cvPointSeqFromMat

long cvPointSeqFromMat(uint param_1,uint *param_2,long param_3,long param_4)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  char cVar7;
  char *pcVar8;
  void *pvVar9;
  uint uVar10;
  ulong uVar11;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  
  if ((param_3 == 0 || param_4 == 0) || (param_2 == (uint *)0x0)) {
    local_28 = 0;
    local_20 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_28,0x2d);
    cVar7 = s_arr____0____contour_header____0___0045ff80[0x2c];
    uVar6 = s_arr____0____contour_header____0___0045ff80._40_4_;
    uVar5 = s_arr____0____contour_header____0___0045ff80._24_8_;
    uVar4 = s_arr____0____contour_header____0___0045ff80._16_8_;
    uVar3 = s_arr____0____contour_header____0___0045ff80._8_8_;
    uVar2 = s_arr____0____contour_header____0___0045ff80._0_8_;
    *(undefined8 *)(pcVar8 + 0x20) = s_arr____0____contour_header____0___0045ff80._32_8_;
    *(undefined4 *)(pcVar8 + 0x28) = uVar6;
    pcVar8[0x2c] = cVar7;
    *(undefined8 *)pcVar8 = uVar2;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    *(undefined8 *)(pcVar8 + 0x10) = uVar4;
    *(undefined8 *)(pcVar8 + 0x18) = uVar5;
    cv::error(-0xd7,(String *)&local_28,
              "CvSeq* cvPointSeqFromMat(int, const CvArr*, CvContour*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/utils.cpp",0x2f);
    cv::String::deallocate((String *)&local_28);
    if (param_2 != (uint *)0x0) {
      uVar1 = *param_2;
      goto joined_r0x00221628;
    }
  }
  else {
    uVar1 = *param_2;
joined_r0x00221628:
    if (((((uVar1 & 0xffff0000) == 0x42420000) && (0 < (int)param_2[9])) && (0 < (int)param_2[8]))
       && (*(long *)(param_2 + 6) != 0)) goto LAB_00221458;
  }
  local_28 = 0;
  local_20 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_28,0x21);
  uVar5 = s_Input_array_is_not_a_valid_matri_0045fff8._24_8_;
  uVar4 = s_Input_array_is_not_a_valid_matri_0045fff8._16_8_;
  uVar3 = s_Input_array_is_not_a_valid_matri_0045fff8._8_8_;
  uVar2 = s_Input_array_is_not_a_valid_matri_0045fff8._0_8_;
  pcVar8[0x20] = s_Input_array_is_not_a_valid_matri_0045fff8[0x20];
  *(undefined8 *)pcVar8 = uVar2;
  *(undefined8 *)(pcVar8 + 8) = uVar3;
  *(undefined8 *)(pcVar8 + 0x10) = uVar4;
  *(undefined8 *)(pcVar8 + 0x18) = uVar5;
  cv::error(-5,(String *)&local_28,
            "CvSeq* cvPointSeqFromMat(int, const CvArr*, CvContour*, CvSeqBlock*)",
            "/builds/master_pack-android/opencv/modules/imgproc/src/utils.cpp",0x36);
  cv::String::deallocate((String *)&local_28);
  uVar1 = *param_2;
LAB_00221458:
  uVar11 = (ulong)uVar1;
  if (((uVar1 >> 3 & 0x1ff) == 0) && (param_2[9] == 2)) {
    param_2 = (uint *)cvReshape(param_2,&local_28);
    uVar11 = (ulong)*param_2;
  }
  uVar1 = (uint)uVar11 & 0xfff;
  if (1 < uVar1 - 0xc) {
    local_38 = 0;
    local_30 = 0;
    pvVar9 = (void *)cv::String::allocate((String *)&local_38,0x57);
    memcpy(pvVar9,
           "The matrix can not be converted to point sequence because of inappropriate element type"
           ,0x57);
    cv::error(-0xd2,(String *)&local_38,
              "CvSeq* cvPointSeqFromMat(int, const CvArr*, CvContour*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/utils.cpp",0x3f);
    cv::String::deallocate((String *)&local_38);
  }
  uVar10 = param_2[9];
  if (((uVar10 != 1) && (param_2[8] != 1)) || ((*param_2 >> 0xe & 1) == 0)) {
    local_38 = 0;
    local_30 = 0;
    pvVar9 = (void *)cv::String::allocate((String *)&local_38,0x4b);
    memcpy(pvVar9,"The matrix converted to point sequence must be 1-dimensional and continuous",0x4b
          );
    cv::error(-5,(String *)&local_38,
              "CvSeq* cvPointSeqFromMat(int, const CvArr*, CvContour*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/utils.cpp",0x44);
    cv::String::deallocate((String *)&local_38);
    uVar10 = param_2[9];
  }
  cvMakeSeqHeaderForArray
            (uVar1 | param_1 & 0x7000,0x80,
             ((uint)(uVar11 >> 3) & 0x1ff) + 1 <<
             (ulong)((uint)(0xfa50L >> (((uint)uVar11 & 7) << 1)) & 3),*(undefined8 *)(param_2 + 6),
             uVar10 * param_2[8],param_3,param_4);
  return param_3;
}


==================================================================

### FUNC 002216b8 (656 bytes) name=cvCopyMakeBorder

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvCopyMakeBorder(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                     cv *param_5,cv *param_6,undefined8 param_7,int param_8,undefined8 param_9,
                     AutoBuffer *param_10)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 *puVar6;
  int iVar7;
  undefined4 local_110 [2];
  Mat *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  iVar7 = (int)((ulong)param_7 >> 0x20);
  if ((local_60 & 0xfff) != (local_c0 & 0xfff)) {
    local_e0 = 0;
    local_d8 = 0;
    puVar6 = (undefined8 *)cv::String::allocate((String *)&local_e0,0x18);
    uVar5 = _LAB_004600d0;
    uVar4 = _LAB_004600c8;
    puVar6[2] = _LAB_004600d8;
    *puVar6 = uVar4;
    puVar6[1] = uVar5;
    cv::error(-0xd7,(String *)&local_e0,
              "void cvCopyMakeBorder(const CvArr*, CvArr*, CvPoint, int, CvScalar)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/utils.cpp",0x56);
    cv::String::deallocate((String *)&local_e0);
  }
  local_100 = 0;
  local_fc = 0;
  local_110[0] = 0x1010000;
  local_e8 = 0;
  local_e4 = 0;
  local_f8[0] = 0x2010000;
  local_108 = (Mat *)&local_c0;
  local_f0 = (Mat *)&local_60;
  local_e0 = param_1;
  local_d8 = param_2;
  local_d0 = param_3;
  uStack_c8 = param_4;
  cv::copyMakeBorder((_InputArray *)local_110,(_OutputArray *)local_f8,iVar7,
                     (local_58 - local_b8) - iVar7,(int)param_7,(local_54 - local_b4) - (int)param_7
                     ,param_8,(Scalar_ *)&local_e0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar7 = 0;
    do {
      *local_20 = 0;
      iVar7 = iVar7 + 1;
      local_20 = local_20 + 1;
    } while (iVar7 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    do {
      *local_80 = 0;
      iVar7 = iVar7 + 1;
      local_80 = local_80 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002219a8 (2076 bytes) name=FUN_002219a8

uint FUN_002219a8(double param_1,int *param_2,int param_3,int *param_4,byte param_5,
                 undefined8 *param_6)

{
  uint uVar1;
  uint uVar2;
  int *piVar3;
  bool bVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  ulong uVar9;
  uint uVar10;
  int iVar11;
  ulong uVar12;
  ulong uVar13;
  uint uVar14;
  long lVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int *piVar19;
  int iVar20;
  int *piVar21;
  int *piVar22;
  uint uVar23;
  ulong uVar24;
  ulong uVar25;
  int iVar26;
  int iVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  
  uVar24 = param_6[1];
  piVar22 = (int *)*param_6;
  if (param_3 == 0) {
    return 0;
  }
  param_1 = param_1 * param_1;
  if (param_5 == 0) {
    if ((*param_2 == param_2[(long)param_3 * 2 + -2]) &&
       (iVar11 = 1, param_2[(long)param_3 * 2 + -1] == param_2[1])) goto LAB_002219f8;
    if (uVar24 == 0) {
      param_6[1] = 0;
    }
    bVar4 = false;
    *piVar22 = 0;
    piVar22[1] = param_3 + -1;
    uVar12 = 1;
    iVar11 = param_3;
  }
  else {
    iVar11 = 3;
LAB_002219f8:
    iVar26 = 0;
    uVar12 = 0;
    iVar20 = 0;
    do {
      while( true ) {
        iVar16 = (int)uVar12 + iVar26;
        iVar18 = 0;
        if (param_3 != 0) {
          iVar18 = iVar16 / param_3;
        }
        uVar10 = iVar16 - iVar18 * param_3;
        uVar5 = -(ulong)(uVar10 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar10 << 3;
        uVar10 = uVar10 + 1;
        if (param_3 <= (int)uVar10) {
          uVar10 = 0;
        }
        uVar12 = (ulong)uVar10;
        iVar18 = *(int *)((long)param_2 + uVar5);
        iVar16 = *(int *)((long)param_2 + uVar5 + 4);
        if (param_3 < 2) break;
        dVar31 = 0.0;
        iVar17 = 1;
        iVar27 = iVar26;
        do {
          uVar5 = -(uVar12 >> 0x1f) & 0xfffffff800000000 | uVar12 << 3;
          uVar10 = (int)uVar12 + 1;
          if (param_3 <= (int)uVar10) {
            uVar10 = 0;
          }
          uVar12 = (ulong)uVar10;
          dVar28 = (double)(*(int *)((long)param_2 + uVar5) - iVar18);
          dVar30 = (double)(*(int *)((long)param_2 + uVar5 + 4) - iVar16);
          dVar28 = dVar30 * dVar30 + dVar28 * dVar28;
          iVar26 = iVar17;
          if (dVar28 <= dVar31) {
            iVar26 = iVar27;
            dVar28 = dVar31;
          }
          dVar31 = dVar28;
          iVar17 = iVar17 + 1;
          iVar27 = iVar26;
        } while (iVar17 != param_3);
        iVar20 = iVar20 + 1;
        if (iVar20 == iVar11) goto LAB_00221aa4;
      }
      iVar20 = iVar20 + 1;
      dVar31 = 0.0;
    } while (iVar20 != iVar11);
LAB_00221aa4:
    if (dVar31 <= param_1) {
      *param_4 = iVar18;
      uVar10 = 1;
      param_4[1] = iVar16;
      goto LAB_00221c9c;
    }
    iVar11 = 0;
    if (param_3 != 0) {
      iVar11 = (int)uVar10 / param_3;
    }
    iVar20 = uVar10 - iVar11 * param_3;
    iVar11 = 0;
    if (param_3 != 0) {
      iVar11 = (iVar20 + iVar26) / param_3;
    }
    iVar11 = (iVar20 + iVar26) - iVar11 * param_3;
    if (uVar24 == 0) {
      param_6[1] = 0;
      *piVar22 = iVar11;
      piVar22[1] = iVar20;
LAB_00222174:
      uVar5 = uVar24 * 3 >> 1;
      if (uVar24 < uVar5) {
        uVar5 = 1;
        *param_6 = param_6 + 2;
        param_6[1] = 1;
        *(undefined4 *)(param_6 + 2) = 0;
        *(undefined4 *)((long)param_6 + 0x14) = 0;
        if (piVar22 != (int *)(param_6 + 2)) {
          operator_delete__(piVar22);
          piVar22 = (int *)*param_6;
          uVar5 = param_6[1];
        }
      }
      else {
        param_6[1] = uVar5;
      }
    }
    else {
      *piVar22 = iVar11;
      piVar22[1] = iVar20;
      uVar5 = uVar24;
      if (uVar24 < 2) goto LAB_00222174;
    }
    piVar22[2] = iVar20;
    piVar22[3] = iVar11;
    uVar12 = 2;
    bVar4 = true;
    uVar24 = uVar5;
  }
  uVar5 = 0;
  piVar3 = (int *)(param_6 + 2);
  do {
    while( true ) {
      uVar25 = uVar12 - 1;
      piVar19 = piVar22 + uVar25 * 2;
      uVar23 = piVar22[uVar25 * 2];
      uVar14 = piVar19[1];
      uVar10 = uVar23 + 1;
      uVar6 = -(ulong)(uVar23 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar23 << 3;
      uVar13 = -(ulong)(uVar14 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar14 << 3;
      if (param_3 <= (int)uVar10) {
        uVar10 = 0;
      }
      iVar26 = *(int *)((long)param_2 + uVar6);
      iVar20 = *(int *)((long)param_2 + uVar6 + 4);
      if (uVar10 != uVar14) break;
LAB_00221e1c:
      uVar12 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      uVar5 = (ulong)((int)uVar5 + 1);
      *(int *)((long)param_4 + uVar12) = iVar26;
      *(int *)((long)param_4 + uVar12 + 4) = iVar20;
      uVar12 = uVar25;
      if (uVar25 == 0) goto LAB_00221c78;
    }
    dVar31 = 0.0;
    dVar28 = (double)(*(int *)((long)param_2 + uVar13) - iVar26);
    dVar30 = (double)(*(int *)((long)param_2 + uVar13 + 4) - iVar20);
    do {
      uVar6 = -(ulong)(uVar10 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar10 << 3;
      uVar10 = uVar10 + 1;
      if (param_3 <= (int)uVar10) {
        uVar10 = 0;
      }
      iVar16 = uVar10 + param_3 + -1;
      dVar29 = ABS((double)(*(int *)((long)param_2 + uVar6 + 4) - iVar20) * dVar28 -
                   (double)(*(int *)((long)param_2 + uVar6) - iVar26) * dVar30);
      if (dVar31 < dVar29) {
        iVar11 = 0;
        if (param_3 != 0) {
          iVar11 = iVar16 / param_3;
        }
        iVar11 = iVar16 - iVar11 * param_3;
        dVar31 = dVar29;
      }
    } while (uVar10 != uVar14);
    if (dVar31 * dVar31 <= (dVar30 * dVar30 + dVar28 * dVar28) * param_1) goto LAB_00221e1c;
    if (uVar24 <= uVar25) {
      uVar6 = param_6[1];
      uVar24 = uVar24 * 3 >> 1;
      if (uVar6 < uVar24) {
        piVar19 = (int *)*param_6;
        uVar13 = uVar24;
        if (uVar6 < uVar24) {
          uVar13 = uVar6;
        }
        piVar22 = piVar3;
        if (0x88 < uVar24) {
          uVar7 = uVar24 << 3;
          if (0xfe0000000000000 < uVar24) {
            uVar7 = 0xffffffffffffffff;
          }
          piVar22 = operator_new__(uVar7);
          uVar7 = (uVar24 - 2 >> 1) + 1;
          uVar9 = 0;
          piVar21 = piVar22;
          do {
            uVar9 = uVar9 + 1;
            piVar21[2] = 0;
            piVar21[3] = 0;
            piVar21[0] = 0;
            piVar21[1] = 0;
            piVar21 = piVar21 + 4;
          } while (uVar9 < uVar7);
          if (uVar24 != uVar7 * 2) {
            piVar22[uVar7 * 4] = 0;
            piVar22[uVar7 * 4 + 1] = 0;
          }
        }
        *param_6 = piVar22;
        param_6[1] = uVar24;
        if ((piVar19 != piVar22) && (uVar13 != 0)) {
          uVar7 = 0;
          do {
            *(undefined8 *)(piVar22 + uVar7 * 2) = *(undefined8 *)(piVar19 + uVar7 * 2);
            uVar7 = uVar7 + 1;
          } while (uVar7 != uVar13);
        }
        lVar15 = uVar24 - uVar6;
        uVar13 = (lVar15 - 2U >> 1) + 1;
        lVar8 = uVar13 * 2;
        if (lVar15 == 1) {
LAB_002220b4:
          piVar22[uVar6 * 2] = 0;
          piVar22[uVar6 * 2 + 1] = 0;
        }
        else {
          uVar7 = 0;
          piVar21 = piVar22 + uVar6 * 2;
          do {
            uVar7 = uVar7 + 1;
            piVar21[2] = 0;
            piVar21[3] = 0;
            piVar21[0] = 0;
            piVar21[1] = 0;
            piVar21 = piVar21 + 4;
          } while (uVar7 < uVar13);
          uVar6 = uVar6 + lVar8;
          if (lVar8 - lVar15 != 0) goto LAB_002220b4;
        }
        if ((piVar19 != piVar3) && (piVar19 != (int *)0x0)) {
          operator_delete__(piVar19);
          uVar24 = param_6[1];
          piVar22 = (int *)*param_6;
        }
        piVar19 = piVar22 + uVar25 * 2;
      }
      else {
        piVar22 = (int *)*param_6;
        param_6[1] = uVar24;
        piVar19 = piVar22 + uVar25 * 2;
      }
    }
    *piVar19 = iVar11;
    piVar19[1] = uVar14;
    if (uVar24 <= uVar12) {
      uVar6 = param_6[1];
      uVar24 = uVar24 * 3 >> 1;
      if (uVar6 < uVar24) {
        piVar19 = (int *)*param_6;
        uVar13 = uVar24;
        if (uVar6 < uVar24) {
          uVar13 = uVar6;
        }
        piVar22 = piVar3;
        if (0x88 < uVar24) {
          uVar25 = uVar24 << 3;
          if (0xfe0000000000000 < uVar24) {
            uVar25 = 0xffffffffffffffff;
          }
          piVar22 = operator_new__(uVar25);
          uVar25 = (uVar24 - 2 >> 1) + 1;
          uVar7 = 0;
          piVar21 = piVar22;
          do {
            uVar7 = uVar7 + 1;
            piVar21[2] = 0;
            piVar21[3] = 0;
            piVar21[0] = 0;
            piVar21[1] = 0;
            piVar21 = piVar21 + 4;
          } while (uVar7 < uVar25);
          if (uVar24 != uVar25 * 2) {
            piVar22[uVar25 * 4] = 0;
            piVar22[uVar25 * 4 + 1] = 0;
          }
        }
        *param_6 = piVar22;
        param_6[1] = uVar24;
        if ((piVar19 != piVar22) && (uVar13 != 0)) {
          uVar25 = 0;
          do {
            *(undefined8 *)(piVar22 + uVar25 * 2) = *(undefined8 *)(piVar19 + uVar25 * 2);
            uVar25 = uVar25 + 1;
          } while (uVar25 != uVar13);
        }
        lVar15 = uVar24 - uVar6;
        uVar13 = (lVar15 - 2U >> 1) + 1;
        lVar8 = uVar13 * 2;
        if (lVar15 == 1) {
LAB_00221f54:
          piVar22[uVar6 * 2] = 0;
          piVar22[uVar6 * 2 + 1] = 0;
        }
        else {
          uVar25 = 0;
          piVar21 = piVar22 + uVar6 * 2;
          do {
            uVar25 = uVar25 + 1;
            piVar21[2] = 0;
            piVar21[3] = 0;
            piVar21[0] = 0;
            piVar21[1] = 0;
            piVar21 = piVar21 + 4;
          } while (uVar25 < uVar13);
          uVar6 = uVar6 + lVar8;
          if (lVar15 != lVar8) goto LAB_00221f54;
        }
        if ((piVar19 != piVar3) && (piVar19 != (int *)0x0)) {
          operator_delete__(piVar19);
          uVar24 = param_6[1];
          piVar22 = (int *)*param_6;
        }
      }
      else {
        param_6[1] = uVar24;
        piVar22 = (int *)*param_6;
      }
    }
    uVar6 = uVar12 + 1;
    piVar22[uVar12 * 2] = uVar23;
    piVar22[uVar12 * 2 + 1] = iVar11;
    uVar12 = uVar6;
  } while (uVar6 != 0);
LAB_00221c78:
  uVar10 = (uint)uVar5;
  if (!bVar4) {
    lVar8 = (long)(int)uVar10;
    uVar10 = uVar10 + 1;
    *(undefined8 *)(param_4 + lVar8 * 2) = *(undefined8 *)(param_2 + (long)param_3 * 2 + -2);
  }
LAB_00221c9c:
  if (param_5 == 0) {
    uVar12 = 1;
    uVar24 = 0;
  }
  else {
    uVar12 = (ulong)uVar10;
    uVar24 = -(ulong)(uVar10 - 1 >> 0x1f) & 0xfffffff800000000 | (ulong)(uVar10 - 1) << 3;
  }
  iVar20 = *(int *)((long)param_4 + uVar24);
  iVar11 = *(int *)((long)param_4 + uVar24 + 4);
  if ((int)uVar12 < (int)uVar10) {
    uVar24 = -(uVar12 >> 0x1f) & 0xfffffff800000000 | uVar12 << 3;
    uVar14 = (int)uVar12 + 1;
  }
  else {
    uVar24 = 0;
    uVar14 = 1;
    uVar12 = 0;
  }
  uVar23 = param_5 ^ 1;
  iVar26 = uVar10 - uVar23;
  if ((int)uVar10 <= (int)uVar14) {
    uVar14 = 0;
  }
  uVar5 = (ulong)uVar14;
  iVar18 = *(int *)((long)param_4 + uVar24);
  iVar16 = *(int *)((long)param_4 + uVar24 + 4);
  uVar14 = uVar10;
  if (((int)uVar23 < iVar26) && (2 < (int)uVar10)) {
    do {
      uVar24 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      uVar2 = (int)uVar5 + 1;
      iVar27 = *(int *)((long)param_4 + uVar24);
      iVar17 = *(int *)((long)param_4 + uVar24 + 4);
      if ((int)uVar10 <= (int)uVar2) {
        uVar2 = 0;
      }
      uVar5 = (ulong)uVar2;
      dVar30 = (double)(iVar27 - iVar20);
      uVar24 = -(uVar12 >> 0x1f) & 0xfffffff800000000 | uVar12 << 3;
      dVar31 = (double)(iVar17 - iVar11);
      dVar28 = (double)(iVar18 - iVar20) * dVar31 - (double)(iVar16 - iVar11) * dVar30;
      if ((((dVar31 * dVar31 + dVar30 * dVar30) * param_1 * 0.5 < dVar28 * dVar28) ||
          (uVar6 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3,
          dVar31 == 0.0 || dVar30 == 0.0)) ||
         ((double)((iVar16 - iVar11) * (iVar17 - iVar16) + (iVar18 - iVar20) * (iVar27 - iVar18)) <
          0.0)) {
        *(int *)((long)param_4 + uVar24) = iVar18;
        uVar2 = (int)uVar12 + 1;
        uVar12 = (ulong)uVar2;
        *(int *)((long)param_4 + uVar24 + 4) = iVar16;
        iVar20 = iVar18;
        iVar11 = iVar16;
        if ((int)uVar10 <= (int)uVar2) {
          uVar12 = 0;
        }
      }
      else {
        *(int *)((long)param_4 + uVar24) = iVar27;
        uVar1 = (int)uVar12 + 1;
        *(int *)((long)param_4 + uVar24 + 4) = iVar17;
        uVar2 = uVar2 + 1;
        if ((int)uVar10 <= (int)uVar1) {
          uVar1 = 0;
        }
        uVar12 = (ulong)uVar1;
        uVar14 = uVar14 - 1;
        if ((int)uVar10 <= (int)uVar2) {
          uVar2 = 0;
        }
        uVar5 = (ulong)uVar2;
        uVar23 = uVar23 + 1;
        iVar20 = iVar27;
        iVar11 = iVar17;
        iVar27 = *(int *)((long)param_4 + uVar6);
        iVar17 = *(int *)((long)param_4 + uVar6 + 4);
      }
      iVar16 = iVar17;
      iVar18 = iVar27;
      uVar23 = uVar23 + 1;
    } while (((int)uVar23 < iVar26) && (2 < (int)uVar14));
  }
  if (param_5 == 0) {
    uVar24 = -(uVar12 >> 0x1f) & 0xfffffff800000000 | uVar12 << 3;
    *(int *)((long)param_4 + uVar24) = iVar18;
    *(int *)((long)param_4 + uVar24 + 4) = iVar16;
  }
  return uVar14;
}


==================================================================

### FUNC 002221c4 (2088 bytes) name=FUN_002221c4

uint FUN_002221c4(double param_1,float *param_2,int param_3,float *param_4,byte param_5,
                 undefined8 *param_6)

{
  uint uVar1;
  uint uVar2;
  int *piVar3;
  bool bVar4;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  ulong uVar8;
  uint uVar9;
  uint uVar10;
  ulong uVar11;
  ulong uVar12;
  ulong uVar13;
  long lVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  int *piVar19;
  ulong uVar20;
  int *piVar21;
  ulong uVar22;
  int *piVar23;
  int iVar24;
  int iVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  
  uVar20 = param_6[1];
  piVar19 = (int *)*param_6;
  if (param_3 == 0) {
    return 0;
  }
  param_1 = param_1 * param_1;
  if (param_5 == 0) {
    if ((*param_2 == param_2[(long)param_3 * 2 + -2]) &&
       (param_2[(long)param_3 * 2 + -1] == param_2[1])) {
      iVar17 = 1;
      goto LAB_00222214;
    }
    if (uVar20 == 0) {
      param_6[1] = 0;
    }
    bVar4 = false;
    *piVar19 = 0;
    piVar19[1] = param_3 + -1;
    uVar11 = 1;
    iVar17 = param_3;
  }
  else {
    iVar17 = 3;
LAB_00222214:
    iVar24 = 0;
    uVar11 = 0;
    iVar15 = 0;
    do {
      while( true ) {
        iVar18 = (int)uVar11 + iVar24;
        iVar25 = 0;
        if (param_3 != 0) {
          iVar25 = iVar18 / param_3;
        }
        uVar10 = iVar18 - iVar25 * param_3;
        uVar9 = uVar10 + 1;
        uVar5 = -(ulong)(uVar10 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar10 << 3;
        if (param_3 <= (int)uVar9) {
          uVar9 = 0;
        }
        uVar11 = (ulong)uVar9;
        fVar31 = *(float *)((long)param_2 + uVar5);
        fVar30 = *(float *)((long)param_2 + uVar5 + 4);
        if (param_3 < 2) break;
        dVar29 = 0.0;
        iVar18 = 1;
        iVar25 = iVar24;
        do {
          uVar5 = -(uVar11 >> 0x1f) & 0xfffffff800000000 | uVar11 << 3;
          uVar9 = (int)uVar11 + 1;
          if (param_3 <= (int)uVar9) {
            uVar9 = 0;
          }
          uVar11 = (ulong)uVar9;
          dVar26 = (double)(*(float *)((long)param_2 + uVar5) - fVar31);
          dVar28 = (double)(*(float *)((long)param_2 + uVar5 + 4) - fVar30);
          dVar26 = dVar28 * dVar28 + dVar26 * dVar26;
          iVar24 = iVar18;
          if (dVar26 <= dVar29) {
            iVar24 = iVar25;
            dVar26 = dVar29;
          }
          dVar29 = dVar26;
          iVar18 = iVar18 + 1;
          iVar25 = iVar24;
        } while (iVar18 != param_3);
        iVar15 = iVar15 + 1;
        if (iVar15 == iVar17) goto LAB_002222c0;
      }
      iVar15 = iVar15 + 1;
      dVar29 = 0.0;
    } while (iVar15 != iVar17);
LAB_002222c0:
    if (dVar29 <= param_1) {
      *param_4 = fVar31;
      uVar9 = 1;
      param_4[1] = fVar30;
      goto LAB_002224bc;
    }
    iVar17 = 0;
    if (param_3 != 0) {
      iVar17 = (int)uVar9 / param_3;
    }
    iVar15 = uVar9 - iVar17 * param_3;
    iVar17 = 0;
    if (param_3 != 0) {
      iVar17 = (iVar15 + iVar24) / param_3;
    }
    iVar17 = (iVar15 + iVar24) - iVar17 * param_3;
    if (uVar20 == 0) {
      param_6[1] = 0;
      *piVar19 = iVar17;
      piVar19[1] = iVar15;
LAB_0022299c:
      uVar5 = uVar20 * 3 >> 1;
      if (uVar20 < uVar5) {
        uVar5 = 1;
        *param_6 = param_6 + 2;
        param_6[1] = 1;
        *(undefined4 *)(param_6 + 2) = 0;
        *(undefined4 *)((long)param_6 + 0x14) = 0;
        if (piVar19 != (int *)(param_6 + 2)) {
          operator_delete__(piVar19);
          piVar19 = (int *)*param_6;
          uVar5 = param_6[1];
        }
      }
      else {
        param_6[1] = uVar5;
      }
    }
    else {
      *piVar19 = iVar17;
      piVar19[1] = iVar15;
      uVar5 = uVar20;
      if (uVar20 < 2) goto LAB_0022299c;
    }
    piVar19[2] = iVar15;
    piVar19[3] = iVar17;
    uVar11 = 2;
    bVar4 = true;
    uVar20 = uVar5;
  }
  uVar5 = 0;
  piVar3 = (int *)(param_6 + 2);
  do {
    while( true ) {
      uVar22 = uVar11 - 1;
      piVar21 = piVar19 + uVar22 * 2;
      uVar16 = piVar19[uVar22 * 2];
      uVar10 = piVar21[1];
      uVar9 = uVar16 + 1;
      uVar12 = -(ulong)(uVar16 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar16 << 3;
      uVar13 = -(ulong)(uVar10 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar10 << 3;
      if (param_3 <= (int)uVar9) {
        uVar9 = 0;
      }
      fVar31 = *(float *)((long)param_2 + uVar12);
      fVar30 = *(float *)((long)param_2 + uVar12 + 4);
      if (uVar9 != uVar10) break;
LAB_00222638:
      uVar11 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      uVar5 = (ulong)((int)uVar5 + 1);
      *(float *)((long)param_4 + uVar11) = fVar31;
      *(float *)((long)param_4 + uVar11 + 4) = fVar30;
      uVar11 = uVar22;
      if (uVar22 == 0) goto LAB_00222498;
    }
    dVar29 = 0.0;
    dVar26 = (double)(*(float *)((long)param_2 + uVar13) - fVar31);
    dVar28 = (double)(*(float *)((long)param_2 + uVar13 + 4) - fVar30);
    do {
      uVar12 = -(ulong)(uVar9 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar9 << 3;
      uVar9 = uVar9 + 1;
      if (param_3 <= (int)uVar9) {
        uVar9 = 0;
      }
      iVar15 = uVar9 + param_3 + -1;
      dVar27 = ABS((double)(*(float *)((long)param_2 + uVar12 + 4) - fVar30) * dVar26 -
                   (double)(*(float *)((long)param_2 + uVar12) - fVar31) * dVar28);
      if (dVar29 < dVar27) {
        iVar17 = 0;
        if (param_3 != 0) {
          iVar17 = iVar15 / param_3;
        }
        iVar17 = iVar15 - iVar17 * param_3;
        dVar29 = dVar27;
      }
    } while (uVar9 != uVar10);
    if (dVar29 * dVar29 <= (dVar28 * dVar28 + dVar26 * dVar26) * param_1) goto LAB_00222638;
    if (uVar20 <= uVar22) {
      uVar12 = param_6[1];
      uVar20 = uVar20 * 3 >> 1;
      if (uVar12 < uVar20) {
        piVar21 = (int *)*param_6;
        uVar13 = uVar20;
        if (uVar12 < uVar20) {
          uVar13 = uVar12;
        }
        piVar19 = piVar3;
        if (0x88 < uVar20) {
          uVar6 = uVar20 << 3;
          if (0xfe0000000000000 < uVar20) {
            uVar6 = 0xffffffffffffffff;
          }
          piVar19 = operator_new__(uVar6);
          uVar6 = (uVar20 - 2 >> 1) + 1;
          uVar8 = 0;
          piVar23 = piVar19;
          do {
            uVar8 = uVar8 + 1;
            piVar23[2] = 0;
            piVar23[3] = 0;
            piVar23[0] = 0;
            piVar23[1] = 0;
            piVar23 = piVar23 + 4;
          } while (uVar8 < uVar6);
          if (uVar20 != uVar6 * 2) {
            piVar19[uVar6 * 4] = 0;
            piVar19[uVar6 * 4 + 1] = 0;
          }
        }
        *param_6 = piVar19;
        param_6[1] = uVar20;
        if ((piVar21 != piVar19) && (uVar13 != 0)) {
          uVar6 = 0;
          do {
            *(undefined8 *)(piVar19 + uVar6 * 2) = *(undefined8 *)(piVar21 + uVar6 * 2);
            uVar6 = uVar6 + 1;
          } while (uVar6 != uVar13);
        }
        lVar14 = uVar20 - uVar12;
        uVar13 = (lVar14 - 2U >> 1) + 1;
        lVar7 = uVar13 * 2;
        if (lVar14 == 1) {
LAB_002228dc:
          piVar19[uVar12 * 2] = 0;
          piVar19[uVar12 * 2 + 1] = 0;
        }
        else {
          uVar6 = 0;
          piVar23 = piVar19 + uVar12 * 2;
          do {
            uVar6 = uVar6 + 1;
            piVar23[2] = 0;
            piVar23[3] = 0;
            piVar23[0] = 0;
            piVar23[1] = 0;
            piVar23 = piVar23 + 4;
          } while (uVar6 < uVar13);
          uVar12 = uVar12 + lVar7;
          if (lVar7 - lVar14 != 0) goto LAB_002228dc;
        }
        if ((piVar21 != piVar3) && (piVar21 != (int *)0x0)) {
          operator_delete__(piVar21);
          uVar20 = param_6[1];
          piVar19 = (int *)*param_6;
        }
        piVar21 = piVar19 + uVar22 * 2;
      }
      else {
        piVar19 = (int *)*param_6;
        param_6[1] = uVar20;
        piVar21 = piVar19 + uVar22 * 2;
      }
    }
    *piVar21 = iVar17;
    piVar21[1] = uVar10;
    if (uVar20 <= uVar11) {
      uVar12 = param_6[1];
      uVar20 = uVar20 * 3 >> 1;
      if (uVar12 < uVar20) {
        piVar21 = (int *)*param_6;
        uVar13 = uVar20;
        if (uVar12 < uVar20) {
          uVar13 = uVar12;
        }
        piVar19 = piVar3;
        if (0x88 < uVar20) {
          uVar22 = uVar20 << 3;
          if (0xfe0000000000000 < uVar20) {
            uVar22 = 0xffffffffffffffff;
          }
          piVar19 = operator_new__(uVar22);
          uVar22 = (uVar20 - 2 >> 1) + 1;
          uVar6 = 0;
          piVar23 = piVar19;
          do {
            uVar6 = uVar6 + 1;
            piVar23[2] = 0;
            piVar23[3] = 0;
            piVar23[0] = 0;
            piVar23[1] = 0;
            piVar23 = piVar23 + 4;
          } while (uVar6 < uVar22);
          if (uVar20 != uVar22 * 2) {
            piVar19[uVar22 * 4] = 0;
            piVar19[uVar22 * 4 + 1] = 0;
          }
        }
        *param_6 = piVar19;
        param_6[1] = uVar20;
        if ((piVar21 != piVar19) && (uVar13 != 0)) {
          uVar22 = 0;
          do {
            *(undefined8 *)(piVar19 + uVar22 * 2) = *(undefined8 *)(piVar21 + uVar22 * 2);
            uVar22 = uVar22 + 1;
          } while (uVar22 != uVar13);
        }
        lVar14 = uVar20 - uVar12;
        uVar13 = (lVar14 - 2U >> 1) + 1;
        lVar7 = uVar13 * 2;
        if (lVar14 == 1) {
LAB_0022277c:
          piVar19[uVar12 * 2] = 0;
          piVar19[uVar12 * 2 + 1] = 0;
        }
        else {
          uVar22 = 0;
          piVar23 = piVar19 + uVar12 * 2;
          do {
            uVar22 = uVar22 + 1;
            piVar23[2] = 0;
            piVar23[3] = 0;
            piVar23[0] = 0;
            piVar23[1] = 0;
            piVar23 = piVar23 + 4;
          } while (uVar22 < uVar13);
          uVar12 = uVar12 + lVar7;
          if (lVar14 != lVar7) goto LAB_0022277c;
        }
        if ((piVar21 != piVar3) && (piVar21 != (int *)0x0)) {
          operator_delete__(piVar21);
          uVar20 = param_6[1];
          piVar19 = (int *)*param_6;
        }
      }
      else {
        param_6[1] = uVar20;
        piVar19 = (int *)*param_6;
      }
    }
    uVar12 = uVar11 + 1;
    piVar19[uVar11 * 2] = uVar16;
    piVar19[uVar11 * 2 + 1] = iVar17;
    uVar11 = uVar12;
  } while (uVar12 != 0);
LAB_00222498:
  uVar9 = (uint)uVar5;
  if (!bVar4) {
    lVar7 = (long)(int)uVar9;
    uVar9 = uVar9 + 1;
    *(undefined8 *)(param_4 + lVar7 * 2) = *(undefined8 *)(param_2 + (long)param_3 * 2 + -2);
  }
LAB_002224bc:
  if (param_5 == 0) {
    uVar11 = 1;
    uVar20 = 0;
  }
  else {
    uVar11 = (ulong)uVar9;
    uVar20 = -(ulong)(uVar9 - 1 >> 0x1f) & 0xfffffff800000000 | (ulong)(uVar9 - 1) << 3;
  }
  fVar30 = *(float *)((long)param_4 + uVar20);
  fVar31 = *(float *)((long)param_4 + uVar20 + 4);
  if ((int)uVar11 < (int)uVar9) {
    uVar20 = -(uVar11 >> 0x1f) & 0xfffffff800000000 | uVar11 << 3;
    uVar10 = (int)uVar11 + 1;
  }
  else {
    uVar20 = 0;
    uVar10 = 1;
    uVar11 = 0;
  }
  uVar16 = param_5 ^ 1;
  iVar17 = uVar9 - uVar16;
  if ((int)uVar9 <= (int)uVar10) {
    uVar10 = 0;
  }
  uVar5 = (ulong)uVar10;
  fVar33 = *(float *)((long)param_4 + uVar20);
  fVar32 = *(float *)((long)param_4 + uVar20 + 4);
  uVar10 = uVar9;
  if (((int)uVar16 < iVar17) && (2 < (int)uVar9)) {
    fVar34 = fVar33;
    do {
      uVar20 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      uVar2 = (int)uVar5 + 1;
      fVar35 = *(float *)((long)param_4 + uVar20);
      if ((int)uVar9 <= (int)uVar2) {
        uVar2 = 0;
      }
      uVar5 = (ulong)uVar2;
      fVar36 = *(float *)((long)param_4 + uVar20 + 4);
      uVar20 = -(uVar11 >> 0x1f) & 0xfffffff800000000 | uVar11 << 3;
      dVar28 = (double)(fVar35 - fVar30);
      dVar29 = (double)(fVar36 - fVar31);
      dVar26 = (double)(fVar34 - fVar30) * dVar29 - (double)(fVar32 - fVar31) * dVar28;
      if ((((dVar29 * dVar29 + dVar28 * dVar28) * param_1 * 0.5 < dVar26 * dVar26) ||
          (uVar12 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3,
          dVar29 == 0.0 || dVar28 == 0.0)) ||
         ((fVar34 - fVar30) * (fVar35 - fVar34) + (fVar36 - fVar32) * (fVar32 - fVar31) < 0.0)) {
        uVar2 = (int)uVar11 + 1;
        uVar11 = (ulong)uVar2;
        *(float *)((long)param_4 + uVar20) = fVar34;
        *(float *)((long)param_4 + uVar20 + 4) = fVar32;
        fVar33 = fVar35;
        fVar30 = fVar34;
        fVar31 = fVar32;
        if ((int)uVar9 <= (int)uVar2) {
          uVar11 = 0;
        }
      }
      else {
        uVar1 = (int)uVar11 + 1;
        uVar2 = uVar2 + 1;
        *(float *)((long)param_4 + uVar20) = fVar35;
        *(float *)((long)param_4 + uVar20 + 4) = fVar36;
        if ((int)uVar9 <= (int)uVar1) {
          uVar1 = 0;
        }
        uVar11 = (ulong)uVar1;
        uVar10 = uVar10 - 1;
        uVar16 = uVar16 + 1;
        if ((int)uVar9 <= (int)uVar2) {
          uVar2 = 0;
        }
        uVar5 = (ulong)uVar2;
        fVar33 = *(float *)((long)param_4 + uVar12);
        fVar30 = fVar35;
        fVar31 = fVar36;
        fVar36 = *(float *)((long)param_4 + uVar12 + 4);
      }
      fVar32 = fVar36;
      uVar16 = uVar16 + 1;
    } while (((int)uVar16 < iVar17) && (fVar34 = fVar33, 2 < (int)uVar10));
  }
  if (param_5 == 0) {
    uVar20 = -(uVar11 >> 0x1f) & 0xfffffff800000000 | uVar11 << 3;
    *(float *)((long)param_4 + uVar20) = fVar33;
    *(float *)((long)param_4 + uVar20 + 4) = fVar32;
  }
  return uVar10;
}


==================================================================

### FUNC 002229f0 (2568 bytes) name=FUN_002229f0

undefined8 FUN_002229f0(uint *param_1,int param_2,undefined8 param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  uint uVar5;
  char cVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  ulong uVar14;
  uint *puVar15;
  char *pcVar16;
  undefined8 uVar17;
  uint *puVar18;
  uint *puVar19;
  long lVar20;
  uint *puVar21;
  long lVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  uint *puVar28;
  uint uVar29;
  ulong uVar30;
  float fVar31;
  uint uVar32;
  uint *puVar33;
  uint uVar34;
  uint *puVar35;
  float fVar36;
  double dVar37;
  double __x;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  uint local_568 [4];
  uint *local_558;
  undefined1 auStack_550 [24];
  uint *local_538;
  uint *local_528;
  undefined1 auStack_520 [24];
  char *local_508;
  char *local_4f8;
  char *local_4e8;
  char local_4e0;
  uint local_4dc;
  uint local_4d8;
  char acStack_4d4 [20];
  uint *local_4c0;
  ulong local_4b8;
  uint local_4b0 [300];
  
  uVar29 = param_1[10];
  uVar30 = (ulong)(int)(uVar29 + 8);
  puVar15 = local_4b0;
  do {
    *puVar15 = 0;
    puVar35 = puVar15 + 6;
    puVar15[1] = 0;
    puVar15 = puVar35;
  } while (puVar35 != (uint *)&stack0x00000000);
  puVar15 = local_4b0;
  local_4b8 = 0x32;
  if (0x32 < uVar30) {
    uVar14 = 0xffffffffffffffff;
    if (uVar30 < 0x550000000000001) {
      uVar14 = uVar30 * 0x18;
    }
    local_4c0 = puVar15;
    puVar15 = operator_new__(uVar14);
    puVar35 = puVar15;
    uVar14 = uVar30;
    do {
      *puVar35 = 0;
      uVar14 = uVar14 - 1;
      puVar35[1] = 0;
      puVar35 = puVar35 + 6;
    } while (uVar14 != 0);
    uVar29 = param_1[10];
  }
  local_4dc = 0;
  local_4d8 = 0;
  local_568[0] = 0;
  local_568[1] = 0;
  uVar34 = param_1[0x18];
  uVar5 = param_1[0x19];
  local_4c0 = puVar15;
  local_4b8 = uVar30;
  if ((((*param_1 & 0x3000) != 0x1000) || (param_1[0xb] != 1)) || ((*param_1 >> 0xe & 1) == 0)) {
    local_588 = 0;
    local_580 = 0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_588,0x20);
    uVar11 = s_CV_IS_SEQ_CHAIN_CONTOUR__chain___00460220._24_8_;
    uVar4 = s_CV_IS_SEQ_CHAIN_CONTOUR__chain___00460220._16_8_;
    uVar17 = s_CV_IS_SEQ_CHAIN_CONTOUR__chain___00460220._8_8_;
    *(undefined8 *)pcVar16 = s_CV_IS_SEQ_CHAIN_CONTOUR__chain___00460220._0_8_;
    *(undefined8 *)(pcVar16 + 8) = uVar17;
    *(undefined8 *)(pcVar16 + 0x10) = uVar4;
    *(undefined8 *)(pcVar16 + 0x18) = uVar11;
    cv::error(-0xd7,(String *)&local_588,
              "CvSeq* icvApproximateChainTC89(CvChain*, int, CvMemStorage*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x4a);
    cv::String::deallocate((String *)&local_588);
  }
  if (param_2 < 0x80) {
    local_578 = 0;
    local_570 = 0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_578,0x25);
    cVar6 = s_header_size_>___int_sizeof_CvCon_00460290[0x24];
    uVar12 = s_header_size_>___int_sizeof_CvCon_00460290._24_8_;
    uVar11 = s_header_size_>___int_sizeof_CvCon_00460290._16_8_;
    uVar4 = s_header_size_>___int_sizeof_CvCon_00460290._8_8_;
    uVar17 = s_header_size_>___int_sizeof_CvCon_00460290._0_8_;
    *(undefined4 *)(pcVar16 + 0x20) = s_header_size_>___int_sizeof_CvCon_00460290._32_4_;
    pcVar16[0x24] = cVar6;
    *(undefined8 *)pcVar16 = uVar17;
    *(undefined8 *)(pcVar16 + 8) = uVar4;
    *(undefined8 *)(pcVar16 + 0x10) = uVar11;
    *(undefined8 *)(pcVar16 + 0x18) = uVar12;
    cv::error(-0xd7,(String *)&local_578,
              "CvSeq* icvApproximateChainTC89(CvChain*, int, CvMemStorage*, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x4b);
    cv::String::deallocate((String *)&local_578);
  }
  cvStartWriteSeq(*param_1 & 0xfffff000 | 0xc,param_2,8,param_3,auStack_550);
  if (param_1[10] == 0) {
    if (local_528 <= local_538) {
      cvCreateSeqBlock(auStack_550);
    }
    *local_538 = uVar34;
    local_538[1] = uVar5;
    local_538 = local_538 + 2;
    uVar17 = cvEndWriteSeq(auStack_550);
    goto LAB_00222c30;
  }
  cvStartReadChainPoints(param_1,auStack_520);
  local_558 = (uint *)0x0;
  puVar35 = local_568;
  if ((int)uVar29 < 1) {
    uVar29 = 0;
  }
  else {
    uVar34 = 0;
    puVar33 = puVar15;
    do {
      while( true ) {
        uVar1 = local_4d8;
        uVar5 = local_4dc;
        cVar6 = *local_4e8;
        local_4e8 = local_508;
        if (local_508 == (char *)0x0) {
          iVar13 = (int)local_4e0;
        }
        else {
          pcVar16 = local_508 + 1;
          local_4e0 = *local_508;
          local_508 = pcVar16;
          if (local_4f8 <= pcVar16) {
            cvChangeSeqBlock(auStack_520,1);
          }
          iVar13 = (int)local_4e0;
          local_4dc = (int)acStack_4d4[(long)iVar13 * 2] + local_4dc;
          local_4d8 = (int)acStack_4d4[(long)iVar13 * 2 + 1] + local_4d8;
        }
        uVar32 = *(uint *)(&DAT_004601e0 + (long)((iVar13 - cVar6) + 7) * 4);
        if (param_4 < 3) break;
        if (uVar32 != 0) {
          *(uint **)(puVar35 + 4) = puVar33;
          puVar35 = puVar33;
        }
        uVar34 = uVar34 + 1;
        puVar33[3] = uVar32;
        *puVar33 = uVar5;
        puVar33[1] = uVar1;
        puVar33 = puVar33 + 6;
        if (uVar34 == uVar29) goto LAB_00222d74;
      }
      if ((uVar32 != 0) || (param_4 == 1)) {
        if (local_528 <= local_538) {
          cvCreateSeqBlock(auStack_550);
        }
        *local_538 = uVar5;
        local_538[1] = uVar1;
        local_538 = local_538 + 2;
      }
      uVar34 = uVar34 + 1;
      puVar33 = puVar33 + 6;
    } while (uVar34 != uVar29);
  }
LAB_00222d74:
  puVar33 = local_558;
  dVar10 = DAT_00223440;
  if (2 < param_4) {
    puVar35[4] = 0;
    puVar35[5] = 0;
    puVar35 = local_558;
LAB_00222da0:
    iVar13 = 1;
    iVar27 = (int)((long)puVar35 - (long)puVar15 >> 3) * -0x55555555;
    uVar5 = puVar15[(long)iVar27 * 6];
    uVar34 = puVar15[(long)iVar27 * 6 + 1];
    iVar25 = 0;
    iVar26 = 0;
    iVar24 = iVar27;
    iVar23 = iVar27;
    do {
      iVar23 = iVar23 + 1;
      iVar24 = iVar24 + -1;
      uVar1 = uVar29;
      if (-1 < iVar24) {
        uVar1 = 0;
      }
      uVar32 = uVar29;
      if (iVar23 < (int)uVar29) {
        uVar32 = 0;
      }
      iVar8 = puVar15[(long)(int)(iVar23 - uVar32) * 6] - puVar15[(long)(int)(uVar1 + iVar24) * 6];
      iVar9 = puVar15[(long)(int)(iVar23 - uVar32) * 6 + 1] -
              puVar15[(long)(int)(uVar1 + iVar24) * 6 + 1];
      iVar7 = iVar9 * iVar9 + iVar8 * iVar8;
      iVar8 = (puVar15[(long)(int)(uVar1 + iVar24) * 6 + 1] - uVar34) * iVar8 +
              (uVar5 - puVar15[(long)(int)(uVar1 + iVar24) * 6]) * iVar9;
      if (iVar13 != 1) {
        if (iVar7 <= iVar25) goto LAB_00222ea0;
        fVar31 = (float)iVar26 * (float)iVar7 - (float)iVar25 * (float)iVar8;
        if (iVar26 < 1) {
          if ((-1 < (int)fVar31) && (iVar26 < 0)) goto LAB_00222ea0;
        }
        else if ((int)fVar31 < 1) goto LAB_00222ea0;
      }
      iVar13 = iVar13 + 1;
      iVar25 = iVar7;
      iVar26 = iVar8;
    } while( true );
  }
  goto LAB_00223130;
LAB_00222ea0:
  uVar1 = iVar13 - 1;
  puVar35[2] = uVar1;
  if (param_4 == 4) {
    iVar24 = uVar1 + iVar27;
    iVar27 = (1 - iVar13) + iVar27;
    fVar31 = 0.0;
    uVar32 = uVar1;
    do {
      uVar2 = uVar29;
      if (-1 < iVar27) {
        uVar2 = 0;
      }
      uVar3 = uVar29;
      if (iVar24 < (int)uVar29) {
        uVar3 = 0;
      }
      iVar13 = puVar15[(long)(int)(uVar2 + iVar27) * 6] - uVar5;
      iVar23 = puVar15[(long)(int)(iVar24 - uVar3) * 6] - uVar5;
      iVar25 = puVar15[(long)(int)(uVar2 + iVar27) * 6 + 1] - uVar34;
      iVar26 = puVar15[(long)(int)(iVar24 - uVar3) * 6 + 1] - uVar34;
      if ((iVar25 == 0 && iVar13 == 0) || (iVar26 == 0 && iVar23 == 0)) break;
      __x = ((double)iVar25 * (double)iVar25 + (double)iVar13 * (double)iVar13) *
            ((double)iVar26 * (double)iVar26 + (double)iVar23 * (double)iVar23);
      dVar37 = SQRT(__x);
      if (NAN(dVar37)) {
        dVar37 = sqrt(__x);
      }
      fVar36 = (float)((double)(float)((double)(iVar25 * iVar26 + iVar13 * iVar23) / dVar37) +
                      dVar10);
      if (((int)fVar36 <= (int)fVar31) && ((int)uVar32 < (int)uVar1)) break;
      uVar32 = uVar32 - 1;
      iVar27 = iVar27 + 1;
      iVar24 = iVar24 + -1;
      fVar31 = fVar36;
    } while (uVar32 != 0);
    puVar35[3] = (uint)fVar31;
  }
  puVar35 = *(uint **)(puVar35 + 4);
  puVar19 = local_568;
  if (puVar35 == (uint *)0x0) goto LAB_00222ec4;
  goto LAB_00222da0;
LAB_00222fd0:
  if (iVar13 != 1) {
LAB_00222fd8:
    if (iVar13 == 2) {
      uVar29 = puVar18[3];
      uVar34 = puVar28[3];
      if ((uVar29 != uVar34 && (int)uVar34 <= (int)uVar29) ||
         ((uVar29 == uVar34 && ((int)puVar18[2] <= (int)puVar28[2])))) {
        *(uint **)(puVar18 + 4) = puVar19;
      }
      else {
        *(uint **)(puVar21 + 4) = puVar28;
      }
    }
    else {
      *(uint **)(*(long *)(puVar21 + 4) + 0x10) = puVar28;
    }
    if (*(uint **)(puVar28 + 4) == (uint *)0x0) goto LAB_002230fc;
    iVar13 = 1;
    puVar19 = *(uint **)(puVar28 + 4);
  }
  goto LAB_00223000;
LAB_00222ec4:
  do {
    iVar13 = (int)((long)puVar33 - (long)puVar15 >> 3) * -0x55555555;
    puVar35 = puVar33;
    if (0 < (int)puVar33[2] >> 1) {
      iVar27 = 1;
      iVar24 = iVar13;
      do {
        iVar24 = iVar24 + 1;
        iVar13 = iVar13 + -1;
        uVar34 = uVar29;
        if (-1 < iVar13) {
          uVar34 = 0;
        }
        if ((int)puVar33[3] < (int)puVar15[(long)(int)(uVar34 + iVar13) * 6 + 3]) {
LAB_00222f50:
          *(undefined8 *)(puVar19 + 4) = *(undefined8 *)(puVar33 + 4);
          puVar33[3] = 0;
          puVar35 = puVar19;
          break;
        }
        uVar34 = uVar29;
        if (iVar24 < (int)uVar29) {
          uVar34 = 0;
        }
        if ((int)puVar33[3] < (int)puVar15[(long)(int)(iVar24 - uVar34) * 6 + 3]) goto LAB_00222f50;
        iVar27 = iVar27 + 1;
      } while (iVar27 <= (int)puVar33[2] >> 1);
    }
    puVar33 = *(uint **)(puVar33 + 4);
    puVar18 = local_558;
    puVar21 = local_568;
    puVar19 = puVar35;
  } while (puVar33 != (uint *)0x0);
  do {
    puVar35 = puVar18;
    if (puVar18[2] == 1) {
      iVar13 = (int)((long)puVar18 - (long)puVar15 >> 3) * -0x55555555;
      iVar27 = iVar13 + -1;
      iVar13 = iVar13 + 1;
      uVar34 = uVar29;
      if (-1 < iVar27) {
        uVar34 = 0;
      }
      uVar5 = uVar29;
      if (iVar13 < (int)uVar29) {
        uVar5 = 0;
      }
      if (((int)puVar18[3] <= (int)puVar15[(long)(int)(uVar34 + iVar27) * 6 + 3]) ||
         ((int)puVar18[3] <= (int)puVar15[(long)(int)(iVar13 - uVar5) * 6 + 3])) {
        *(undefined8 *)(puVar21 + 4) = *(undefined8 *)(puVar18 + 4);
        puVar18[3] = 0;
        puVar35 = puVar21;
      }
    }
    puVar33 = puVar18 + 4;
    puVar18 = *(uint **)puVar33;
    puVar21 = puVar35;
  } while (*(uint **)puVar33 != (uint *)0x0);
  puVar35 = local_558;
  if (param_4 != 4) {
    if (puVar15[3] == 0) goto LAB_00222fc0;
    lVar22 = (long)(int)uVar29;
    if (puVar15[lVar22 * 6 + -3] == 0) goto LAB_00222fc0;
    if ((int)uVar29 < 2) {
      if (uVar29 == 1) goto LAB_002230fc;
LAB_002232d4:
      uVar34 = 1;
    }
    else {
      if (puVar15[9] == 0) goto LAB_002232d4;
      uVar34 = 1;
      puVar33 = puVar15 + 3;
      do {
        uVar34 = uVar34 + 1;
        *puVar33 = 0;
        if (uVar34 == uVar29) goto LAB_002230fc;
        puVar19 = puVar33 + 0xc;
        puVar33 = puVar33 + 6;
      } while (*puVar19 != 0);
    }
    iVar13 = uVar29 - 2;
    if ((0 < iVar13) && (puVar15[lVar22 * 6 + -9] != 0)) {
      puVar35 = puVar15 + lVar22 * 6 + -8;
      puVar33 = puVar15 + lVar22 * 6 + -3;
      do {
        puVar35[0] = 0;
        puVar35[1] = 0;
        iVar13 = iVar13 + -1;
        *puVar33 = 0;
        if (iVar13 == 0) break;
        puVar19 = puVar33 + -0xc;
        puVar35 = puVar35 + -6;
        puVar33 = puVar33 + -6;
      } while (*puVar19 != 0);
    }
    if (uVar34 - 1 == 0) {
      lVar20 = 0;
      if (uVar29 - 1 == iVar13 + 1) {
        lVar20 = *(long *)(puVar15 + 4);
        puVar35 = puVar15 + lVar22 * 6;
        uVar17 = *(undefined8 *)puVar15;
        uVar4 = *(undefined8 *)(puVar15 + 2);
        puVar35[4] = 0;
        puVar35[5] = 0;
        *(undefined8 *)puVar35 = uVar17;
        *(undefined8 *)(puVar35 + 2) = uVar4;
        *(uint **)(puVar15 + lVar22 * 6 + -2) = puVar35;
        lVar20 = (long)((int)(lVar20 - (long)puVar15 >> 3) * -0x55555555) * 0x18;
      }
    }
    else {
      lVar20 = (long)(int)(uVar34 - 1) * 0x18;
    }
    local_558 = (uint *)((long)puVar15 + lVar20);
LAB_00222fc0:
    iVar13 = 1;
    puVar15 = local_568;
    puVar33 = local_568;
    puVar19 = local_558;
LAB_00223000:
    while (puVar28 = puVar19, puVar21 = puVar33, puVar18 = puVar15,
          puVar19 = *(uint **)(puVar28 + 4), puVar15 = puVar28, puVar33 = puVar28,
          puVar35 = local_558, puVar19 != (uint *)0x0) {
      if (0x17 < (ulong)((long)puVar19 + (-0x18 - (long)puVar28))) goto LAB_00222fd0;
      iVar13 = iVar13 + 1;
      puVar33 = puVar21;
    }
    if (iVar13 != 1) goto LAB_00222fd8;
  }
LAB_002230fc:
  do {
    if (local_528 <= local_538) {
      cvCreateSeqBlock(auStack_550);
    }
    *(undefined8 *)local_538 = *(undefined8 *)puVar35;
    puVar15 = puVar35 + 4;
    local_538 = local_538 + 2;
    puVar35 = *(uint **)puVar15;
  } while (*(uint **)puVar15 != (uint *)0x0);
LAB_00223130:
  uVar17 = cvEndWriteSeq(auStack_550);
LAB_00222c30:
  if ((local_4c0 != local_4b0) && (local_4c0 != (uint *)0x0)) {
    operator_delete__(local_4c0);
  }
  return uVar17;
}


==================================================================

### FUNC 00223448 (548 bytes) name=cvApproxChains

long cvApproxChains(long param_1,long param_2,int param_3,int param_4,int param_5)

{
  code *pcVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  int iVar6;
  long lVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "CvSeq* cvApproxChains(CvSeq*, CvMemStorage*, int, double, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x187);
    cv::String::deallocate((String *)&local_10);
  }
  if ((3 < param_3 - 1U) || (param_4 < 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xd3,(String *)&local_10,
              "CvSeq* cvApproxChains(CvSeq*, CvMemStorage*, int, double, int, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x189);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 == 0) {
    lVar7 = 0;
  }
  else {
    lVar7 = 0;
    lVar5 = 0;
    lVar4 = 0;
    while( true ) {
      iVar6 = *(int *)(param_1 + 0x28);
      lVar2 = lVar5;
      if (param_4 <= iVar6) {
        if (3 < param_3 - 1U) {
          local_10 = 0;
          local_8 = 0;
          cv::String::allocate((String *)&local_10,0);
          cv::error(-0xd3,(String *)&local_10,
                    "CvSeq* cvApproxChains(CvSeq*, CvMemStorage*, int, double, int, int)",
                    "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x19c);
          cv::String::deallocate((String *)&local_10);
                    /* WARNING: Does not return */
          pcVar1 = (code *)SoftwareBreakpoint(1000,0x2235d0);
          (*pcVar1)();
        }
        lVar2 = FUN_002229f0(param_1,0x80,param_2,param_3);
        if (*(int *)(lVar2 + 0x28) < 1) {
          iVar6 = -1;
          lVar2 = lVar5;
        }
        else {
          cvBoundingRect(lVar2,1);
          *(long *)(lVar2 + 0x18) = lVar4;
          *(long *)(lVar2 + 8) = lVar5;
          if (lVar5 == 0) {
            if (lVar4 != 0) {
              *(long *)(lVar4 + 0x20) = lVar2;
            }
          }
          else {
            *(long *)(lVar5 + 0x10) = lVar2;
          }
          if (lVar7 == 0) {
            lVar7 = lVar2;
          }
        }
      }
      if (param_5 == 0) break;
      lVar3 = param_1;
      lVar5 = lVar2;
      if ((iVar6 < param_4) || (*(long *)(param_1 + 0x20) == 0)) {
        while (param_1 = *(long *)(lVar3 + 0x10), param_1 == 0) {
          lVar3 = *(long *)(lVar3 + 0x18);
          if (lVar3 == 0) {
            return lVar7;
          }
          lVar5 = lVar4;
          if (lVar4 != 0) {
            lVar4 = *(long *)(lVar4 + 0x18);
          }
        }
      }
      else {
        lVar5 = 0;
        param_1 = *(long *)(param_1 + 0x20);
        lVar4 = lVar2;
      }
    }
  }
  return lVar7;
}


==================================================================

### FUNC 002236a8 (1528 bytes) name=approxPolyDP

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::approxPolyDP(cv::_InputArray const&, cv::_OutputArray const&, double, bool) */

void cv::approxPolyDP(_InputArray *param_1,_OutputArray *param_2,double param_3,bool param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  undefined8 *puVar11;
  ulong uVar12;
  undefined8 **ppuVar13;
  undefined4 *puVar14;
  Mat *pMVar15;
  uint uVar16;
  ulong uVar17;
  undefined8 **ppuVar18;
  undefined8 *puVar19;
  ulong uVar20;
  undefined8 local_980;
  undefined8 local_978;
  undefined8 local_970;
  undefined8 local_968;
  uint local_960;
  int local_95c;
  undefined4 local_958;
  undefined4 local_954;
  undefined8 local_950;
  undefined8 local_948;
  undefined8 local_940;
  undefined8 local_938;
  undefined8 local_930;
  long local_928;
  undefined4 *local_920;
  undefined8 *local_918;
  undefined8 local_910;
  undefined8 local_908;
  uint local_900;
  int local_8fc;
  undefined4 local_8f8;
  undefined4 local_8f4;
  undefined8 **local_8f0;
  undefined8 **local_8e8;
  long local_8e0;
  long local_8d8;
  undefined8 local_8d0;
  long local_8c8;
  undefined4 *local_8c0;
  long *local_8b8;
  long local_8b0;
  long local_8a8;
  undefined8 **local_8a0;
  ulong local_898;
  undefined8 *apuStack_890 [137];
  ulong local_448;
  undefined8 auStack_440 [136];
  
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar15 = *(Mat **)(param_1 + 8);
    local_920 = &local_958;
    local_918 = &local_910;
    local_960 = *(uint *)pMVar15;
    local_95c = *(int *)(pMVar15 + 4);
    local_958 = *(undefined4 *)(pMVar15 + 8);
    local_954 = *(undefined4 *)(pMVar15 + 0xc);
    local_950 = *(undefined8 *)(pMVar15 + 0x10);
    local_948 = *(undefined8 *)(pMVar15 + 0x18);
    local_940 = *(undefined8 *)(pMVar15 + 0x20);
    local_938 = *(undefined8 *)(pMVar15 + 0x28);
    local_930 = *(undefined8 *)(pMVar15 + 0x30);
    local_928 = *(long *)(pMVar15 + 0x38);
    local_908 = 0;
    local_910 = 0;
    if (local_928 != 0) {
      piVar1 = (int *)(local_928 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_910 = **(undefined8 **)(pMVar15 + 0x48);
      local_908 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_95c = 0;
      Mat::copySize((Mat *)&local_960,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar10 = Mat::checkVector((Mat *)&local_960,2,-1,true);
  uVar16 = local_960 & 7;
  if ((iVar10 < 0) || (1 < uVar16 - 4)) {
    local_980 = 0;
    local_978 = 0;
    puVar11 = (undefined8 *)String::allocate((String *)&local_980,0x34);
    uVar9 = DAT_004602e0;
    uVar8 = DAT_004602d8;
    uVar7 = DAT_004602d0;
    uVar6 = _LAB_004602c8;
    uVar5 = DAT_004602c0;
    uVar4 = DAT_004602b8;
    *(undefined4 *)(puVar11 + 6) = DAT_004602e8;
    *puVar11 = uVar4;
    puVar11[1] = uVar5;
    puVar11[2] = uVar6;
    puVar11[3] = uVar7;
    puVar11[4] = uVar8;
    puVar11[5] = uVar9;
    error(-0xd7,(String *)&local_980,
          "void cv::approxPolyDP(cv::InputArray, cv::OutputArray, double, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2a7);
    String::deallocate((String *)&local_980);
  }
  if (iVar10 == 0) {
    _OutputArray::release(param_2);
    if (local_928 != 0) {
      piVar1 = (int *)(local_928 + 0x14);
      do {
        iVar10 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar10 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_960);
      }
    }
    if (0 < local_95c) {
      iVar10 = 0;
      puVar14 = local_920;
      do {
        *puVar14 = 0;
        iVar10 = iVar10 + 1;
        puVar14 = puVar14 + 1;
      } while (iVar10 < local_95c);
    }
    goto LAB_00223ab4;
  }
  uVar20 = (ulong)iVar10;
  ppuVar13 = apuStack_890;
  do {
    ppuVar18 = ppuVar13 + 2;
    ppuVar13[1] = (undefined8 *)0x0;
    *ppuVar13 = (undefined8 *)0x0;
    ppuVar13 = ppuVar18;
  } while (ppuVar18 != apuStack_890 + 0x88);
  local_8a0 = apuStack_890;
  local_898 = 0x88;
  if (0x88 < uVar20) {
    uVar12 = uVar20 << 3;
    if (0xfe0000000000000 < uVar20) {
      uVar12 = 0xffffffffffffffff;
    }
    local_8a0 = operator_new__(uVar12);
    uVar12 = (uVar20 - 2 >> 1) + 1;
    ppuVar13 = local_8a0;
    if (iVar10 != 1) {
      uVar17 = 0;
      do {
        ppuVar13[1] = (undefined8 *)0x0;
        *ppuVar13 = (undefined8 *)0x0;
        uVar17 = uVar17 + 1;
        ppuVar13 = ppuVar13 + 2;
      } while (uVar17 < uVar12);
      ppuVar13 = local_8a0 + uVar12 * 2;
      if (uVar20 == uVar12 * 2) goto LAB_00223830;
    }
    *(undefined4 *)ppuVar13 = 0;
    *(undefined4 *)((long)ppuVar13 + 4) = 0;
  }
LAB_00223830:
  puVar11 = auStack_440;
  do {
    puVar19 = puVar11 + 2;
    puVar11[1] = 0;
    *puVar11 = 0;
    puVar11 = puVar19;
  } while (puVar19 != (undefined8 *)&stack0x00000000);
  apuStack_890[0x88] = auStack_440;
  local_448 = 0x88;
  local_898 = uVar20;
  if (0x88 < uVar20) {
    uVar12 = uVar20 << 3;
    if (0xfe0000000000000 < uVar20) {
      uVar12 = 0xffffffffffffffff;
    }
    apuStack_890[0x88] = operator_new__(uVar12);
    uVar12 = (uVar20 - 2 >> 1) + 1;
    puVar11 = apuStack_890[0x88];
    if (iVar10 != 1) {
      uVar17 = 0;
      do {
        puVar11[1] = 0;
        *puVar11 = 0;
        uVar17 = uVar17 + 1;
        puVar11 = puVar11 + 2;
      } while (uVar17 < uVar12);
      puVar11 = apuStack_890[0x88] + uVar12 * 2;
      if (uVar20 == uVar12 * 2) goto LAB_002238c8;
    }
    *(undefined4 *)puVar11 = 0;
    *(undefined4 *)((long)puVar11 + 4) = 0;
  }
LAB_002238c8:
  ppuVar13 = local_8a0;
  local_448 = uVar20;
  if (uVar16 == 4) {
    uVar20 = FUN_002219a8(param_3,local_950,iVar10,local_8a0,param_4,apuStack_890 + 0x88);
    local_8f8 = (undefined4)uVar20;
    uVar20 = -(uVar20 >> 0x1f & 1) & 0xfffffff800000000 | (uVar20 & 0xffffffff) << 3;
    local_8b0 = 8;
    uVar16 = 0xc;
  }
  else if (uVar16 == 5) {
    uVar20 = FUN_002221c4(param_3,local_950,iVar10,local_8a0,param_4,apuStack_890 + 0x88);
    local_8f8 = (undefined4)uVar20;
    uVar20 = -(uVar20 >> 0x1f & 1) & 0xfffffff800000000 | (uVar20 & 0xffffffff) << 3;
    local_8b0 = 8;
    uVar16 = 0xd;
  }
  else {
    local_970 = 0;
    local_968 = 0;
    String::allocate((String *)&local_970,0);
    error(-0xd2,(String *)&local_970,
          "void cv::approxPolyDP(cv::InputArray, cv::OutputArray, double, bool)",
          "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2b9);
    String::deallocate((String *)&local_970);
    uVar16 = uVar16 + 8;
    uVar20 = 0;
    local_8f8 = 0;
    local_8b0 = (long)(2 << (ulong)((uint)(0xfa50L >> ((uVar16 & 7) << 1)) & 3));
  }
  local_8c0 = &local_8f8;
  local_8e0 = (long)ppuVar13 + uVar20;
  local_900 = uVar16 + 0x42ff0000 | 0x4000;
  local_8b8 = &local_8b0;
  local_8fc = 2;
  local_8f4 = 1;
  local_8f0 = ppuVar13;
  local_8e8 = ppuVar13;
  local_8d0 = 0;
  local_8c8 = 0;
  local_8d8 = local_8e0;
  local_8a8 = local_8b0;
  Mat::copyTo((Mat *)&local_900,param_2);
  if (local_8c8 != 0) {
    piVar1 = (int *)(local_8c8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_900);
    }
  }
  local_8c8 = 0;
  local_8f0 = (undefined8 **)0x0;
  local_8d8 = 0;
  local_8e0 = 0;
  local_8e8 = (undefined8 **)0x0;
  if (0 < local_8fc) {
    iVar10 = 0;
    puVar14 = local_8c0;
    do {
      *puVar14 = 0;
      iVar10 = iVar10 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar10 < local_8fc);
  }
  if (local_8b8 != &local_8b0) {
    fastFree(local_8b8);
  }
  if ((apuStack_890[0x88] != auStack_440) && (apuStack_890[0x88] != (undefined8 *)0x0)) {
    operator_delete__(apuStack_890[0x88]);
  }
  if ((local_8a0 != apuStack_890) && (local_8a0 != (undefined8 **)0x0)) {
    operator_delete__(local_8a0);
  }
  if (local_928 != 0) {
    piVar1 = (int *)(local_928 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_960);
    }
  }
  if (0 < local_95c) {
    iVar10 = 0;
    puVar14 = local_920;
    do {
      *puVar14 = 0;
      iVar10 = iVar10 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar10 < local_95c);
  }
LAB_00223ab4:
  local_928 = 0;
  local_938 = 0;
  local_940 = 0;
  local_948 = 0;
  local_950 = 0;
  if (local_918 != &local_910) {
    fastFree(local_918);
  }
  return;
}


==================================================================

### FUNC 00223d48 (2316 bytes) name=cvApproxPoly

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long cvApproxPoly(double param_1,uint *param_2,uint param_3,long param_4,int param_5,int param_6)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined1 uVar13;
  undefined2 uVar14;
  long lVar15;
  uint uVar16;
  undefined4 uVar17;
  undefined8 **ppuVar18;
  undefined8 *puVar19;
  undefined8 *puVar20;
  char *pcVar21;
  ulong uVar22;
  undefined8 **ppuVar23;
  long lVar24;
  uint uVar25;
  uint *puVar26;
  String *this;
  long lVar27;
  long lVar28;
  long lVar29;
  ulong uVar30;
  undefined8 local_9f0;
  undefined8 local_9e8;
  long local_9e0;
  long local_9d8;
  undefined8 local_9d0;
  undefined8 local_9c8;
  undefined8 local_9c0;
  undefined8 local_9b8;
  undefined8 local_9b0;
  undefined8 local_9a8;
  undefined8 local_9a0;
  undefined8 local_998;
  undefined8 local_990;
  undefined8 local_988;
  undefined8 local_980;
  undefined8 local_978;
  undefined8 local_970;
  undefined8 local_968;
  undefined8 local_960;
  undefined8 local_958;
  undefined8 local_950;
  undefined8 local_948;
  undefined1 auStack_940 [32];
  undefined1 auStack_920 [96];
  undefined8 local_8c0;
  undefined8 uStack_8b8;
  undefined8 **local_8a0;
  ulong local_898;
  undefined8 *apuStack_890 [137];
  undefined8 local_448;
  undefined8 auStack_440 [136];
  
  ppuVar18 = apuStack_890;
  do {
    ppuVar23 = ppuVar18 + 2;
    ppuVar18[1] = (undefined8 *)0x0;
    *ppuVar18 = (undefined8 *)0x0;
    ppuVar18 = ppuVar23;
  } while (ppuVar23 != apuStack_890 + 0x88);
  local_8a0 = apuStack_890;
  local_898 = 0x88;
  puVar20 = auStack_440;
  do {
    puVar19 = puVar20 + 2;
    puVar20[1] = 0;
    *puVar20 = 0;
    puVar20 = puVar19;
  } while (puVar19 != (undefined8 *)&stack0x00000000);
  uStack_8b8 = 0;
  local_8c0 = 0;
  apuStack_890[0x88] = auStack_440;
  local_448 = 100;
  if ((param_2 == (uint *)0x0) || (uVar1 = *param_2, (uVar1 & 0xffff0000) != 0x42990000)) {
    uVar17 = 0x5000;
    if (param_6 == 0) {
      uVar17 = 0x1000;
    }
    param_2 = (uint *)cvPointSeqFromMat(uVar17,param_2,auStack_920,auStack_940);
    param_6 = 0;
LAB_00223e44:
    if (param_4 == 0) {
      local_9e0 = param_4;
      local_9d8 = param_4;
      pcVar21 = (char *)cv::String::allocate((String *)&local_9e0,0x15);
      cVar4 = s_NULL_storage_pointer_004602f0[0x14];
      uVar3 = s_NULL_storage_pointer_004602f0._8_8_;
      uVar2 = s_NULL_storage_pointer_004602f0._0_8_;
      *(undefined4 *)(pcVar21 + 0x10) = s_NULL_storage_pointer_004602f0._16_4_;
      pcVar21[0x14] = cVar4;
      *(undefined8 *)pcVar21 = uVar2;
      *(undefined8 *)(pcVar21 + 8) = uVar3;
      cv::error(-0x1b,(String *)&local_9e0,
                "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2e0);
      cv::String::deallocate((String *)&local_9e0);
    }
  }
  else {
    if (((uVar1 & 0x3000) != 0x1000) || (1 < (uVar1 & 0xfff) - 0xc)) {
      local_9f0 = 0;
      local_9e8 = 0;
      pcVar21 = (char *)cv::String::allocate((String *)&local_9f0,0x19);
      cVar4 = s_Unsupported_sequence_type_0045c718[0x18];
      uVar3 = s_Unsupported_sequence_type_0045c718._8_8_;
      uVar2 = s_Unsupported_sequence_type_0045c718._0_8_;
      *(undefined8 *)(pcVar21 + 0x10) = s_Unsupported_sequence_type_0045c718._16_8_;
      pcVar21[0x18] = cVar4;
      *(undefined8 *)pcVar21 = uVar2;
      *(undefined8 *)(pcVar21 + 8) = uVar3;
      cv::error(-5,(String *)&local_9f0,
                "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2d1);
      cv::String::deallocate((String *)&local_9f0);
    }
    if (param_4 == 0) {
      param_4 = *(long *)(param_2 + 0x12);
      goto LAB_00223e44;
    }
  }
  if ((int)param_3 < 0) {
    local_9d0 = 0;
    local_9c8 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_9d0,0x58);
    uVar12 = s_header_size_is_negative__Pass_0_t_00460308._72_8_;
    uVar11 = s_header_size_is_negative__Pass_0_t_00460308._64_8_;
    uVar10 = s_header_size_is_negative__Pass_0_t_00460308._56_8_;
    uVar9 = s_header_size_is_negative__Pass_0_t_00460308._48_8_;
    uVar8 = s_header_size_is_negative__Pass_0_t_00460308._40_8_;
    uVar7 = s_header_size_is_negative__Pass_0_t_00460308._32_8_;
    uVar6 = s_header_size_is_negative__Pass_0_t_00460308._24_8_;
    uVar5 = s_header_size_is_negative__Pass_0_t_00460308._16_8_;
    uVar3 = s_header_size_is_negative__Pass_0_t_00460308._8_8_;
    uVar2 = s_header_size_is_negative__Pass_0_t_00460308._0_8_;
    *(undefined8 *)(pcVar21 + 0x50) = s_header_size_is_negative__Pass_0_t_00460308._80_8_;
    *(undefined8 *)pcVar21 = uVar2;
    *(undefined8 *)(pcVar21 + 8) = uVar3;
    *(undefined8 *)(pcVar21 + 0x10) = uVar5;
    *(undefined8 *)(pcVar21 + 0x18) = uVar6;
    *(undefined8 *)(pcVar21 + 0x20) = uVar7;
    *(undefined8 *)(pcVar21 + 0x28) = uVar8;
    *(undefined8 *)(pcVar21 + 0x30) = uVar9;
    *(undefined8 *)(pcVar21 + 0x38) = uVar10;
    *(undefined8 *)(pcVar21 + 0x40) = uVar11;
    *(undefined8 *)(pcVar21 + 0x48) = uVar12;
    cv::error(-0xd3,(String *)&local_9d0,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2e4);
    cv::String::deallocate((String *)&local_9d0);
  }
  else if (param_3 == 0) {
    param_3 = param_2[1];
  }
  if ((*param_2 & 0x3000) == 0x1000) {
    if ((*param_2 & 0xfff) - 0xc < 2) goto LAB_00223ed8;
    if (param_2[0xb] != 1) goto LAB_00223e6c;
    this = (String *)&local_9c0;
    local_9c0 = 0;
    local_9b8 = 0;
    pcVar21 = (char *)cv::String::allocate(this,0x38);
    uVar8 = s_Input_curves_are_not_polygonal__U_00460368._40_8_;
    uVar7 = s_Input_curves_are_not_polygonal__U_00460368._32_8_;
    uVar6 = s_Input_curves_are_not_polygonal__U_00460368._24_8_;
    uVar5 = s_Input_curves_are_not_polygonal__U_00460368._16_8_;
    uVar3 = s_Input_curves_are_not_polygonal__U_00460368._8_8_;
    uVar2 = s_Input_curves_are_not_polygonal__U_00460368._0_8_;
    *(undefined8 *)(pcVar21 + 0x30) = s_Input_curves_are_not_polygonal__U_00460368._48_8_;
    *(undefined8 *)pcVar21 = uVar2;
    *(undefined8 *)(pcVar21 + 8) = uVar3;
    *(undefined8 *)(pcVar21 + 0x10) = uVar5;
    *(undefined8 *)(pcVar21 + 0x18) = uVar6;
    *(undefined8 *)(pcVar21 + 0x20) = uVar7;
    *(undefined8 *)(pcVar21 + 0x28) = uVar8;
    cv::error(-5,this,"CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2ee);
  }
  else {
LAB_00223e6c:
    this = (String *)&local_9b0;
    local_9b0 = 0;
    local_9a8 = 0;
    puVar20 = (undefined8 *)cv::String::allocate(this,0x1d);
    uVar13 = LAB_004603c4;
    uVar17 = _LAB_004603c0;
    uVar3 = DAT_004603b0;
    uVar2 = DAT_004603a8;
    puVar20[2] = DAT_004603b8;
    *(undefined4 *)(puVar20 + 3) = uVar17;
    *(undefined1 *)((long)puVar20 + 0x1c) = uVar13;
    *puVar20 = uVar2;
    puVar20[1] = uVar3;
    cv::error(-5,this,"CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2f2);
  }
  cv::String::deallocate(this);
LAB_00223ed8:
  if (param_3 == 0) {
    param_3 = param_2[1];
  }
  if ((int)param_3 < 0x80) {
    local_9a0 = 0;
    local_998 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_9a0,0x37);
    cVar4 = s_New_header_size_must_be_non_less_004603c8[0x36];
    uVar14 = s_New_header_size_must_be_non_less_004603c8._52_2_;
    uVar8 = s_New_header_size_must_be_non_less_004603c8._40_8_;
    uVar7 = s_New_header_size_must_be_non_less_004603c8._32_8_;
    uVar6 = s_New_header_size_must_be_non_less_004603c8._24_8_;
    uVar5 = s_New_header_size_must_be_non_less_004603c8._16_8_;
    uVar3 = s_New_header_size_must_be_non_less_004603c8._8_8_;
    uVar2 = s_New_header_size_must_be_non_less_004603c8._0_8_;
    *(undefined4 *)(pcVar21 + 0x30) = s_New_header_size_must_be_non_less_004603c8._48_4_;
    *(undefined2 *)(pcVar21 + 0x34) = uVar14;
    pcVar21[0x36] = cVar4;
    *(undefined8 *)pcVar21 = uVar2;
    *(undefined8 *)(pcVar21 + 8) = uVar3;
    *(undefined8 *)(pcVar21 + 0x10) = uVar5;
    *(undefined8 *)(pcVar21 + 0x18) = uVar6;
    *(undefined8 *)(pcVar21 + 0x20) = uVar7;
    *(undefined8 *)(pcVar21 + 0x28) = uVar8;
    cv::error(-0xc9,(String *)&local_9a0,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2fa);
    cv::String::deallocate((String *)&local_9a0);
  }
  if (param_5 != 0) {
    local_990 = 0;
    local_988 = 0;
    puVar20 = (undefined8 *)cv::String::allocate((String *)&local_990,0x1c);
    uVar17 = DAT_00460418;
    uVar3 = DAT_00460408;
    uVar2 = _LAB_00460400;
    puVar20[2] = _DAT_00460410;
    *(undefined4 *)(puVar20 + 3) = uVar17;
    *puVar20 = uVar2;
    puVar20[1] = uVar3;
    cv::error(-0xd3,(String *)&local_990,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x2fd);
    cv::String::deallocate((String *)&local_990);
  }
  lVar27 = 0;
  lVar28 = 0;
  lVar29 = 0;
LAB_00223f1c:
  if (param_5 != 0) goto LAB_00224140;
LAB_00223f24:
  if (param_1 < 0.0) {
    local_980 = 0;
    local_978 = 0;
    puVar20 = (undefined8 *)cv::String::allocate((String *)&local_980,0x1d);
    uVar13 = DAT_0046043c;
    uVar17 = DAT_00460438;
    uVar3 = DAT_00460428;
    uVar2 = _DAT_00460420;
    puVar20[2] = DAT_00460430;
    *(undefined4 *)(puVar20 + 3) = uVar17;
    *(undefined1 *)((long)puVar20 + 0x1c) = uVar13;
    *puVar20 = uVar2;
    puVar20[1] = uVar3;
    cv::error(-0xd3,(String *)&local_980,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x307);
    cv::String::deallocate((String *)&local_980);
  }
  if (1 < (*param_2 & 0xfff) - 0xc) {
    local_970 = 0;
    local_968 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_970,0x48);
    uVar8 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._40_8_;
    uVar7 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._32_8_;
    uVar6 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._24_8_;
    uVar5 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._16_8_;
    uVar3 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._8_8_;
    uVar2 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._0_8_;
    *(undefined8 *)(pcVar21 + 0x40) = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._64_8_;
    uVar10 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._56_8_;
    uVar9 = s_CV_SEQ_ELTYPE_src_seq_____CV_32S_00460440._48_8_;
    *(undefined8 *)pcVar21 = uVar2;
    *(undefined8 *)(pcVar21 + 8) = uVar3;
    *(undefined8 *)(pcVar21 + 0x10) = uVar5;
    *(undefined8 *)(pcVar21 + 0x18) = uVar6;
    *(undefined8 *)(pcVar21 + 0x20) = uVar7;
    *(undefined8 *)(pcVar21 + 0x28) = uVar8;
    *(undefined8 *)(pcVar21 + 0x30) = uVar9;
    *(undefined8 *)(pcVar21 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_970,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x30a);
    cv::String::deallocate((String *)&local_970);
  }
  uVar1 = param_2[10];
  uVar30 = (ulong)(int)(uVar1 << 1);
  if (local_898 < uVar30) {
    if (local_8a0 != apuStack_890) {
      if (local_8a0 != (undefined8 **)0x0) {
        operator_delete__(local_8a0);
      }
      local_8a0 = apuStack_890;
      local_898 = 0x88;
    }
    if (uVar30 < 0x89) {
      ppuVar23 = apuStack_890;
    }
    else {
      uVar22 = uVar30 << 3;
      if (0xfe0000000000000 < uVar30) {
        uVar22 = 0xffffffffffffffff;
      }
      ppuVar23 = operator_new__(uVar22);
      uVar22 = 0;
      ppuVar18 = ppuVar23;
      do {
        uVar22 = uVar22 + 1;
        ppuVar18[1] = (undefined8 *)0x0;
        *ppuVar18 = (undefined8 *)0x0;
        ppuVar18 = ppuVar18 + 2;
        local_8a0 = ppuVar23;
        local_898 = uVar30;
      } while (uVar22 < (uVar30 - 2 >> 1) + 1);
    }
    lVar24 = *(long *)(param_2 + 0x16);
    ppuVar18 = ppuVar23 + (int)uVar1;
    uVar16 = *param_2;
    uVar25 = uVar16 >> 0xe & 1;
    if (lVar24 == *(long *)(lVar24 + 8)) {
LAB_0022428c:
      ppuVar23 = *(undefined8 ***)(lVar24 + 0x18);
      goto joined_r0x00224088;
    }
  }
  else {
    lVar24 = *(long *)(param_2 + 0x16);
    uVar16 = *param_2;
    uVar25 = uVar16 >> 0xe & 1;
    ppuVar18 = local_8a0 + (int)uVar1;
    ppuVar23 = local_8a0;
    local_898 = uVar30;
    if (lVar24 == *(long *)(lVar24 + 8)) goto LAB_0022428c;
  }
  cvCvtSeqToArray(param_2,ppuVar23,0x3fffffff00000000);
  uVar16 = *param_2;
joined_r0x00224088:
  if ((uVar16 & 0xfff) == 0xc) {
    uVar17 = FUN_002219a8(param_1,ppuVar23,uVar1,ppuVar18,uVar25,apuStack_890 + 0x88);
  }
  else if ((uVar16 & 0xfff) == 0xd) {
    uVar17 = FUN_002221c4(param_1,ppuVar23,uVar1,ppuVar18,uVar25,apuStack_890 + 0x88);
  }
  else {
    local_960 = 0;
    local_958 = 0;
    cv::String::allocate((String *)&local_960,0);
    cv::error(-0xd2,(String *)&local_960,
              "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x31d);
    cv::String::deallocate((String *)&local_960);
    uVar17 = 0;
  }
  lVar24 = cvCreateSeq(*param_2,(long)(int)param_3,(long)(int)param_2[0xb],param_4);
  cvSeqPushMulti(lVar24,ppuVar18,uVar17,0);
  if (0x7f < (int)param_3) goto LAB_002241a8;
LAB_00224104:
  *(long *)(lVar24 + 0x18) = lVar27;
  *(long *)(lVar24 + 8) = lVar28;
  if (lVar28 == 0) goto LAB_002241c0;
LAB_00224110:
  *(long *)(lVar28 + 0x10) = lVar24;
  do {
    puVar26 = param_2;
    lVar15 = lVar27;
    if (lVar29 == 0) {
      lVar29 = lVar24;
    }
    while( true ) {
      lVar27 = lVar24;
      if (param_6 == 0) goto LAB_002241d8;
      param_2 = *(uint **)(puVar26 + 8);
      lVar28 = lVar27;
      if (param_2 == (uint *)0x0) goto LAB_00224248;
      lVar28 = 0;
      if (param_5 == 0) goto LAB_00223f24;
LAB_00224140:
      local_950 = 0;
      local_948 = 0;
      pcVar21 = (char *)cv::String::allocate((String *)&local_950,0x1c);
      uVar17 = s_Invalid_approximation_method_00460490._24_4_;
      uVar3 = s_Invalid_approximation_method_00460490._8_8_;
      uVar2 = s_Invalid_approximation_method_00460490._0_8_;
      *(undefined8 *)(pcVar21 + 0x10) = s_Invalid_approximation_method_00460490._16_8_;
      *(undefined4 *)(pcVar21 + 0x18) = uVar17;
      *(undefined8 *)pcVar21 = uVar2;
      *(undefined8 *)(pcVar21 + 8) = uVar3;
      cv::error(-5,(String *)&local_950,
                "CvSeq* cvApproxPoly(const void*, int, CvMemStorage*, int, double, int)",
                "/builds/master_pack-android/opencv/modules/imgproc/src/approx.cpp",0x325);
      cv::String::deallocate((String *)&local_950);
      lVar24 = 0;
      if ((int)param_3 < 0x80) goto LAB_00224104;
LAB_002241a8:
      cvBoundingRect(lVar24,1);
      *(long *)(lVar24 + 0x18) = lVar27;
      *(long *)(lVar24 + 8) = lVar28;
      if (lVar28 != 0) goto LAB_00224110;
LAB_002241c0:
      if (lVar27 == 0) break;
      *(long *)(lVar27 + 0x20) = lVar24;
      puVar26 = param_2;
      lVar15 = lVar27;
      if (lVar29 == 0) {
        lVar29 = lVar24;
      }
    }
  } while( true );
LAB_00224248:
  lVar27 = lVar15;
  param_2 = *(uint **)(puVar26 + 4);
  if (param_2 == (uint *)0x0) {
    puVar26 = *(uint **)(puVar26 + 6);
    if (puVar26 == (uint *)0x0) {
LAB_002241d8:
      if ((apuStack_890[0x88] != auStack_440) && (apuStack_890[0x88] != (undefined8 *)0x0)) {
        operator_delete__(apuStack_890[0x88]);
      }
      if ((local_8a0 != apuStack_890) && (local_8a0 != (undefined8 **)0x0)) {
        operator_delete__(local_8a0);
      }
      return lVar29;
    }
    lVar15 = lVar27;
    lVar28 = lVar27;
    if (lVar27 != 0) {
      lVar15 = *(long *)(lVar27 + 0x18);
    }
    goto LAB_00224248;
  }
  goto LAB_00223f1c;
}


==================================================================

### FUNC 00224740 (3260 bytes) name=integral

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::integral(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&,
   cv::_OutputArray const&, int, int) */

void cv::integral(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                 _OutputArray *param_4,int param_5,int param_6)

{
  int iVar1;
  int iVar2;
  int *piVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  bool bVar8;
  bool bVar9;
  bool bVar10;
  bool bVar11;
  char cVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  ulong uVar16;
  undefined4 *puVar17;
  undefined8 *puVar18;
  Mat *pMVar19;
  undefined8 *puVar20;
  code *pcVar21;
  int local_258;
  int local_254;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined8 *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  int local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  int local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar16 = _InputArray::type(param_1,-1);
  uVar7 = (uint)(uVar16 >> 3) & 0x1ff;
  uVar5 = (uint)uVar16 & 7;
  if (param_5 < 1) {
    uVar15 = 4;
    if ((uVar16 & 7) != 0) {
      uVar15 = 6;
    }
  }
  else {
    uVar15 = param_5 & 7;
  }
  uVar6 = param_6 & 7;
  iVar14 = uVar7 * 8;
  if (param_6 < 1) {
    uVar6 = 6;
  }
  _InputArray::size((int)param_1);
  iVar4 = iVar14 + uVar15;
  iVar1 = local_258 + 1;
  iVar2 = local_254 + 1;
  local_60 = iVar1;
  local_5c = iVar2;
  _OutputArray::create(param_2,(Mat *)&local_60,iVar4,0xffffffff,0,0);
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar19 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar19;
    local_bc = *(int *)(pMVar19 + 4);
    local_b8 = *(undefined4 *)(pMVar19 + 8);
    local_b4 = *(undefined4 *)(pMVar19 + 0xc);
    local_b0 = *(undefined8 *)(pMVar19 + 0x10);
    local_a8 = *(undefined8 *)(pMVar19 + 0x18);
    local_a0 = *(undefined8 *)(pMVar19 + 0x20);
    local_98 = *(undefined8 *)(pMVar19 + 0x28);
    local_90 = *(undefined8 *)(pMVar19 + 0x30);
    local_88 = *(long *)(pMVar19 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar3 = (int *)(local_88 + 0x14);
      do {
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = *piVar3 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (*(int *)(pMVar19 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar19 + 0x48);
      local_68 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar19);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar13 = _InputArray::kind((_InputArray *)param_2);
  if (iVar13 == 0x10000) {
    pMVar19 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(int *)pMVar19;
    local_50 = *(undefined8 *)(pMVar19 + 0x10);
    local_5c = *(int *)(pMVar19 + 4);
    local_58 = *(undefined4 *)(pMVar19 + 8);
    local_54 = *(undefined4 *)(pMVar19 + 0xc);
    local_48 = *(undefined8 *)(pMVar19 + 0x18);
    local_40 = *(undefined8 *)(pMVar19 + 0x20);
    local_38 = *(undefined8 *)(pMVar19 + 0x28);
    local_30 = *(undefined8 *)(pMVar19 + 0x30);
    local_28 = *(long *)(pMVar19 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar3 = (int *)(local_28 + 0x14);
      do {
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = *piVar3 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (*(int *)(pMVar19 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar19 + 0x48);
      local_8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar19);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_1f8 = &local_1f0;
  local_198 = &local_190;
  local_200 = &uStack_238;
  uStack_1e8 = 0;
  local_1f0 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1a0 = &uStack_1d8;
  uStack_238 = _UNK_00225508;
  local_240 = _DAT_00225500;
  uStack_1d8 = _UNK_00225508;
  local_1e0 = _DAT_00225500;
  local_230 = 0;
  uStack_228 = 0;
  local_220 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  cVar12 = _OutputArray::needed(param_3);
  if (cVar12 != '\0') {
    local_120 = iVar1;
    local_11c = iVar2;
    _OutputArray::create(param_3,&local_120,iVar14 + uVar6,0xffffffff,0,0);
    iVar14 = _InputArray::kind((_InputArray *)param_3);
    if (iVar14 == 0x10000) {
      pMVar19 = *(Mat **)(param_3 + 8);
      local_140 = &local_178;
      local_138 = &local_130;
      local_180 = *(undefined4 *)pMVar19;
      local_17c = *(int *)(pMVar19 + 4);
      local_178 = *(undefined4 *)(pMVar19 + 8);
      local_174 = *(undefined4 *)(pMVar19 + 0xc);
      local_170 = *(undefined8 *)(pMVar19 + 0x10);
      uStack_168 = *(undefined8 *)(pMVar19 + 0x18);
      local_160 = *(undefined8 *)(pMVar19 + 0x20);
      uStack_158 = *(undefined8 *)(pMVar19 + 0x28);
      local_150 = *(undefined8 *)(pMVar19 + 0x30);
      lStack_148 = *(long *)(pMVar19 + 0x38);
      local_128 = 0;
      local_130 = 0;
      if (lStack_148 != 0) {
        piVar3 = (int *)(lStack_148 + 0x14);
        do {
          cVar12 = '\x01';
          bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
          if (bVar8) {
            *piVar3 = *piVar3 + 1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
      }
      if (*(int *)(pMVar19 + 4) < 3) {
        local_130 = **(undefined8 **)(pMVar19 + 0x48);
        local_128 = (*(undefined8 **)(pMVar19 + 0x48))[1];
      }
      else {
        local_17c = 0;
        Mat::copySize((Mat *)&local_180,pMVar19);
      }
    }
    else {
      _InputArray::getMat_((int)param_3);
    }
    if (lStack_148 != 0) {
      piVar3 = (int *)(lStack_148 + 0x14);
      do {
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = *piVar3 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (lStack_208 != 0) {
      piVar3 = (int *)(lStack_208 + 0x14);
      do {
        iVar14 = *piVar3;
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = iVar14 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    puVar20 = local_138;
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (local_240._4_4_ < 1) {
LAB_002249bc:
      if (2 < local_17c) goto LAB_002249c8;
      uStack_238 = CONCAT44(local_174,local_178);
      local_240 = CONCAT44(local_17c,local_180);
      *local_1f8 = *local_138;
      local_1f8[1] = puVar20[1];
    }
    else {
      iVar14 = 0;
      puVar18 = local_200;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar14 = iVar14 + 1;
        puVar18 = (undefined8 *)((long)puVar18 + 4);
      } while (iVar14 < local_240._4_4_);
      if (local_240._4_4_ < 3) goto LAB_002249bc;
LAB_002249c8:
      local_240 = CONCAT44(local_240._4_4_,local_180);
      Mat::copySize((Mat *)&local_240,(Mat *)&local_180);
    }
    uStack_218 = uStack_158;
    local_220 = local_160;
    lStack_208 = lStack_148;
    local_210 = local_150;
    uStack_228 = uStack_168;
    local_230 = local_170;
    if (lStack_148 != 0) {
      piVar3 = (int *)(lStack_148 + 0x14);
      do {
        iVar14 = *piVar3;
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = iVar14 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (0 < local_17c) {
      iVar14 = 0;
      puVar17 = local_140;
      do {
        *puVar17 = 0;
        iVar14 = iVar14 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar14 < local_17c);
    }
    if (local_138 != &local_130) {
      fastFree(local_138);
    }
  }
  cVar12 = _OutputArray::needed(param_4);
  if (cVar12 != '\0') {
    local_120 = iVar1;
    local_11c = iVar2;
    _OutputArray::create(param_4,(Mat *)&local_120,iVar4,0xffffffff,0,0);
    iVar14 = _InputArray::kind((_InputArray *)param_4);
    if (iVar14 == 0x10000) {
      pMVar19 = *(Mat **)(param_4 + 8);
      local_e0 = &local_118;
      local_d8 = &local_d0;
      local_120 = *(int *)pMVar19;
      local_110 = *(undefined8 *)(pMVar19 + 0x10);
      local_11c = *(int *)(pMVar19 + 4);
      local_118 = *(undefined4 *)(pMVar19 + 8);
      local_114 = *(undefined4 *)(pMVar19 + 0xc);
      uStack_108 = *(undefined8 *)(pMVar19 + 0x18);
      local_100 = *(undefined8 *)(pMVar19 + 0x20);
      uStack_f8 = *(undefined8 *)(pMVar19 + 0x28);
      local_f0 = *(undefined8 *)(pMVar19 + 0x30);
      lStack_e8 = *(long *)(pMVar19 + 0x38);
      local_c8 = 0;
      local_d0 = 0;
      if (lStack_e8 != 0) {
        piVar3 = (int *)(lStack_e8 + 0x14);
        do {
          cVar12 = '\x01';
          bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
          if (bVar8) {
            *piVar3 = *piVar3 + 1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
      }
      if (*(int *)(pMVar19 + 4) < 3) {
        local_d0 = **(undefined8 **)(pMVar19 + 0x48);
        local_c8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
      }
      else {
        local_11c = 0;
        Mat::copySize((Mat *)&local_120,pMVar19);
      }
    }
    else {
      _InputArray::getMat_((int)param_4);
    }
    if (lStack_e8 != 0) {
      piVar3 = (int *)(lStack_e8 + 0x14);
      do {
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = *piVar3 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar3 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar14 = *piVar3;
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = iVar14 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar20 = local_d8;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1e0._4_4_ < 1) {
LAB_00225030:
      if (2 < local_11c) goto LAB_0022503c;
      uStack_1d8 = CONCAT44(local_114,local_118);
      local_1e0 = CONCAT44(local_11c,local_120);
      *local_198 = *local_d8;
      local_198[1] = puVar20[1];
    }
    else {
      iVar14 = 0;
      puVar18 = local_1a0;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar14 = iVar14 + 1;
        puVar18 = (undefined8 *)((long)puVar18 + 4);
      } while (iVar14 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_00225030;
LAB_0022503c:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
      Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
    }
    uStack_1b8 = uStack_f8;
    local_1c0 = local_100;
    lStack_1a8 = lStack_e8;
    local_1b0 = local_f0;
    uStack_1c8 = uStack_108;
    local_1d0 = local_110;
    if (lStack_e8 != 0) {
      piVar3 = (int *)(lStack_e8 + 0x14);
      do {
        iVar14 = *piVar3;
        cVar12 = '\x01';
        bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar8) {
          *piVar3 = iVar14 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar14 = 0;
      puVar17 = local_e0;
      do {
        *puVar17 = 0;
        iVar14 = iVar14 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar14 < local_11c);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
  }
  bVar8 = (uVar16 & 7) == 0;
  if ((uVar15 == 4) && (bVar8)) {
    if (uVar6 == 6) {
      pcVar21 = FUN_00226e04;
      goto LAB_00224bac;
    }
    if (uVar6 == 5) {
      pcVar21 = FUN_0022c2f0;
      goto LAB_00224bac;
    }
    if (uVar6 == 4) {
      pcVar21 = FUN_002277b8;
      goto LAB_00224bac;
    }
    bVar10 = false;
LAB_00224abc:
    bVar8 = false;
    bVar11 = false;
    bVar9 = bVar10;
  }
  else {
    bVar9 = uVar15 == 5;
    bVar10 = bVar9 && bVar8;
    if (bVar9 && bVar8) {
      if (uVar6 == 6) {
        pcVar21 = FUN_0022817c;
        goto LAB_00224bac;
      }
      if (uVar6 == 5) {
        pcVar21 = FUN_0022cc38;
        goto LAB_00224bac;
      }
      goto LAB_00224abc;
    }
    bVar10 = uVar15 == 6;
    bVar11 = uVar6 == 6;
    if ((bVar10 && bVar8) && (bVar11)) {
      pcVar21 = FUN_00228ac4;
      goto LAB_00224bac;
    }
    bVar8 = bVar10 && bVar11;
    if ((bVar10 && bVar11) && (uVar5 == 2)) {
      pcVar21 = FUN_00229444;
      goto LAB_00224bac;
    }
    if ((bVar10 && bVar11) && (uVar5 == 3)) {
      pcVar21 = FUN_00229da4;
      goto LAB_00224bac;
    }
  }
  if ((!bVar9) || (uVar5 != 5)) {
    if (bVar8) {
      if (uVar5 == 5) {
        pcVar21 = FUN_0022b05c;
        goto LAB_00224bac;
      }
      goto LAB_00224ae4;
    }
  }
  else {
    if (bVar11) {
      pcVar21 = FUN_0022a6f0;
      goto LAB_00224bac;
    }
    if (uVar6 == 5) {
      pcVar21 = FUN_0022d514;
      goto LAB_00224bac;
    }
LAB_00224ae4:
    if ((bVar8) && (uVar5 == 6)) {
      pcVar21 = FUN_0022b938;
      goto LAB_00224bac;
    }
  }
  local_250 = 0;
  local_248 = 0;
  String::allocate((String *)&local_250,0);
  error(-0xd2,(String *)&local_250,
        "void cv::integral(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::OutputArray, int, int)"
        ,"/builds/master_pack-android/opencv/modules/imgproc/src/sumpixels.cpp",0x212);
  String::deallocate((String *)&local_250);
  pcVar21 = (code *)0x0;
LAB_00224bac:
  local_11c = *local_80;
  local_120 = local_80[1];
  (*pcVar21)(local_b0,local_70,local_50,local_10,local_230,local_1f0,local_1d0,local_190,&local_120,
             uVar7 + 1);
  if (lStack_1a8 != 0) {
    piVar3 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar14 = *piVar3;
      cVar12 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar8) {
        *piVar3 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar14 = 0;
    puVar20 = local_1a0;
    do {
      *(undefined4 *)puVar20 = 0;
      iVar14 = iVar14 + 1;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar14 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (lStack_208 != 0) {
    piVar3 = (int *)(lStack_208 + 0x14);
    do {
      iVar14 = *piVar3;
      cVar12 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar8) {
        *piVar3 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar14 = 0;
    puVar20 = local_200;
    do {
      *(undefined4 *)puVar20 = 0;
      iVar14 = iVar14 + 1;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar14 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    fastFree(local_1f8);
  }
  if (local_28 != 0) {
    piVar3 = (int *)(local_28 + 0x14);
    do {
      iVar14 = *piVar3;
      cVar12 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar8) {
        *piVar3 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar14 = 0;
    puVar17 = local_20;
    do {
      *puVar17 = 0;
      iVar14 = iVar14 + 1;
      puVar17 = puVar17 + 1;
    } while (iVar14 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar3 = (int *)(local_88 + 0x14);
    do {
      iVar14 = *piVar3;
      cVar12 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar8) {
        *piVar3 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar14 = 0;
    puVar17 = local_80;
    do {
      *puVar17 = 0;
      iVar14 = iVar14 + 1;
      puVar17 = puVar17 + 1;
    } while (iVar14 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00225510 (72 bytes) name=integral

/* cv::integral(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::integral(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  _OutputArray *p_Var1;
  _OutputArray *p_Var2;
  
  p_Var1 = (_OutputArray *)noArray();
  p_Var2 = (_OutputArray *)noArray();
  integral(param_1,param_2,p_Var1,p_Var2,param_3,-1);
  return;
}


==================================================================

### FUNC 00225558 (80 bytes) name=integral

/* cv::integral(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, int, int)
    */

void cv::integral(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,int param_4,
                 int param_5)

{
  _OutputArray *p_Var1;
  
  p_Var1 = (_OutputArray *)noArray();
  integral(param_1,param_2,param_3,p_Var1,param_4,param_5);
  return;
}


==================================================================

### FUNC 002255b0 (3384 bytes) name=cvIntegral

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvIntegral(cv *param_1,cv *param_2,cv *param_3,Mat *param_4,undefined8 param_5,
               AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 *puVar14;
  char *pcVar15;
  AutoBuffer *pAVar16;
  undefined8 *puVar17;
  int iVar18;
  AutoBuffer *pAVar19;
  Mat *pMVar20;
  undefined4 local_390 [2];
  Mat *local_388;
  undefined4 local_380;
  undefined4 local_37c;
  undefined8 local_378;
  Mat *local_370;
  undefined4 local_368;
  undefined4 local_364;
  uint local_360;
  int iStack_35c;
  undefined8 uStack_358;
  long local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  undefined4 *local_320;
  undefined8 *local_318;
  undefined8 auStack_310 [2];
  undefined8 local_300;
  undefined8 uStack_2f8;
  long local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  undefined8 local_2d0;
  long local_2c8;
  undefined8 *local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined8 local_2a0;
  undefined8 uStack_298;
  long local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined8 *local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  undefined8 local_240;
  undefined8 uStack_238;
  long local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  AutoBuffer *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  long local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  undefined8 uStack_178;
  long local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  long local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  long local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_300 = CONCAT44(iStack_35c,local_360);
  local_2b8 = &local_2b0;
  local_2c0 = &uStack_2f8;
  uStack_2a8 = 0;
  local_2b0 = 0;
  uStack_2f8 = uStack_358;
  local_2d0 = local_330;
  local_2f0 = local_350;
  local_2e8 = local_348;
  local_2e0 = local_340;
  local_2d8 = local_338;
  local_2c8 = local_328;
  if (local_328 != 0) {
    piVar1 = (int *)(local_328 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_35c < 3) {
    local_2b0 = *local_318;
    uStack_2a8 = local_318[1];
  }
  else {
    local_300 = (ulong)local_360;
    cv::Mat::copySize((Mat *)&local_300,(Mat *)&local_360);
  }
  local_258 = &local_250;
  local_1f8 = &local_1f0;
  local_198 = &local_190;
  local_138 = &local_130;
  uStack_248 = 0;
  local_250 = 0;
  local_260 = &uStack_298;
  uStack_1e8 = 0;
  local_1f0 = 0;
  uStack_298 = _UNK_00226458;
  local_2a0 = _DAT_00226450;
  uStack_238 = _UNK_00226458;
  local_240 = _DAT_00226450;
  uStack_1d8 = _UNK_00226458;
  local_1e0 = _DAT_00226450;
  local_290 = 0;
  uStack_188 = 0;
  local_190 = 0;
  uStack_288 = 0;
  uStack_178 = _UNK_00226458;
  local_180 = _DAT_00226450;
  local_280 = 0;
  uStack_278 = 0;
  pAVar16 = (AutoBuffer *)&uStack_238;
  local_270 = 0;
  local_1a0 = &uStack_1d8;
  lStack_268 = 0;
  local_140 = &uStack_178;
  local_230 = 0;
  uStack_228 = 0;
  local_220 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_170 = 0;
  uStack_168 = 0;
  uStack_128 = 0;
  local_130 = 0;
  local_160 = 0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_200 = pAVar16;
  if (param_3 == (cv *)0x0) {
    pMVar20 = (Mat *)0x0;
    if (param_4 != (Mat *)0x0) goto LAB_00225a18;
LAB_002261a0:
    local_388 = (Mat *)0x0;
    local_390[0] = 0x2000000;
    local_370 = param_4;
  }
  else {
    cv::cvarrToMat(param_3,(void *)0x0,true,false,0,pAVar16);
    if (lStack_e8 != 0) {
      piVar1 = (int *)(lStack_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_208 != 0) {
      piVar1 = (int *)(lStack_208 + 0x14);
      do {
        iVar18 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar18 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar18 == 1) {
        cv::Mat::deallocate((Mat *)&local_240);
      }
    }
    puVar17 = local_d8;
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (local_240._4_4_ < 1) {
LAB_0022583c:
      if (2 < local_11c) goto LAB_002260fc;
      uStack_238 = local_118;
      local_240 = CONCAT44(local_11c,local_120);
      *local_1f8 = *local_d8;
      local_1f8[1] = puVar17[1];
    }
    else {
      iVar18 = 0;
      pAVar19 = local_200;
      do {
        *(undefined4 *)pAVar19 = 0;
        iVar18 = iVar18 + 1;
        pAVar19 = pAVar19 + 4;
      } while (iVar18 < local_240._4_4_);
      if (local_240._4_4_ < 3) goto LAB_0022583c;
LAB_002260fc:
      local_240 = CONCAT44(local_240._4_4_,local_120);
      cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_120);
    }
    uStack_218 = uStack_f8;
    local_220 = local_100;
    lStack_208 = lStack_e8;
    local_210 = local_f0;
    uStack_228 = uStack_108;
    local_230 = local_110;
    if (lStack_e8 != 0) {
      piVar1 = (int *)(lStack_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_268 != 0) {
      piVar1 = (int *)(lStack_268 + 0x14);
      do {
        iVar18 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar18 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar18 == 1) {
        cv::Mat::deallocate((Mat *)&local_2a0);
      }
    }
    puVar17 = local_1f8;
    lStack_268 = 0;
    local_290 = 0;
    uStack_278 = 0;
    local_280 = 0;
    uStack_288 = 0;
    if (local_2a0._4_4_ < 1) {
LAB_00225930:
      if (2 < local_240._4_4_) goto LAB_00226138;
      uStack_298 = uStack_238;
      local_2a0 = local_240;
      *local_258 = *local_1f8;
      local_258[1] = puVar17[1];
    }
    else {
      iVar18 = 0;
      puVar14 = local_260;
      do {
        *(undefined4 *)puVar14 = 0;
        iVar18 = iVar18 + 1;
        puVar14 = (undefined8 *)((long)puVar14 + 4);
      } while (iVar18 < local_2a0._4_4_);
      if (local_2a0._4_4_ < 3) goto LAB_00225930;
LAB_00226138:
      local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_240);
      cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_240);
    }
    uStack_278 = uStack_218;
    local_280 = local_220;
    lStack_268 = lStack_208;
    local_270 = local_210;
    uStack_288 = uStack_228;
    local_290 = local_230;
    if (lStack_e8 != 0) {
      piVar1 = (int *)(lStack_e8 + 0x14);
      do {
        iVar18 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar18 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar18 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar18 = 0;
      do {
        *local_e0 = 0;
        iVar18 = iVar18 + 1;
        local_e0 = local_e0 + 1;
      } while (iVar18 < local_11c);
    }
    if (local_d8 != auStack_d0) {
      cv::fastFree(local_d8);
    }
    local_388 = (Mat *)&local_240;
    pMVar20 = (Mat *)&local_240;
    if (param_4 != (Mat *)0x0) {
LAB_00225a18:
      cv::cvarrToMat((cv *)param_4,(void *)0x0,true,false,0,pAVar16);
      if (lStack_88 != 0) {
        piVar1 = (int *)(lStack_88 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (lStack_148 != 0) {
        piVar1 = (int *)(lStack_148 + 0x14);
        do {
          iVar18 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar18 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar18 == 1) {
          cv::Mat::deallocate((Mat *)&local_180);
        }
      }
      puVar17 = local_78;
      lStack_148 = 0;
      local_170 = 0;
      uStack_158 = 0;
      local_160 = 0;
      uStack_168 = 0;
      if (local_180._4_4_ < 1) {
LAB_00225ac4:
        if (2 < local_bc) goto LAB_00226118;
        uStack_178 = local_b8;
        local_180 = CONCAT44(local_bc,local_c0);
        *local_138 = *local_78;
        local_138[1] = puVar17[1];
      }
      else {
        iVar18 = 0;
        puVar14 = local_140;
        do {
          *(undefined4 *)puVar14 = 0;
          iVar18 = iVar18 + 1;
          puVar14 = (undefined8 *)((long)puVar14 + 4);
        } while (iVar18 < local_180._4_4_);
        if (local_180._4_4_ < 3) goto LAB_00225ac4;
LAB_00226118:
        local_180 = CONCAT44(local_180._4_4_,local_c0);
        cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_c0);
      }
      uStack_158 = uStack_98;
      local_160 = local_a0;
      lStack_148 = lStack_88;
      local_150 = local_90;
      uStack_168 = uStack_a8;
      local_170 = local_b0;
      if (lStack_88 != 0) {
        piVar1 = (int *)(lStack_88 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (lStack_1a8 != 0) {
        piVar1 = (int *)(lStack_1a8 + 0x14);
        do {
          iVar18 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar18 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar18 == 1) {
          cv::Mat::deallocate((Mat *)&local_1e0);
        }
      }
      puVar17 = local_138;
      lStack_1a8 = 0;
      local_1d0 = 0;
      uStack_1b8 = 0;
      local_1c0 = 0;
      uStack_1c8 = 0;
      if (local_1e0._4_4_ < 1) {
LAB_00225bb8:
        if (2 < local_180._4_4_) goto LAB_00226128;
        uStack_1d8 = uStack_178;
        local_1e0 = local_180;
        *local_198 = *local_138;
        local_198[1] = puVar17[1];
      }
      else {
        iVar18 = 0;
        puVar14 = local_1a0;
        do {
          *(undefined4 *)puVar14 = 0;
          iVar18 = iVar18 + 1;
          puVar14 = (undefined8 *)((long)puVar14 + 4);
        } while (iVar18 < local_1e0._4_4_);
        if (local_1e0._4_4_ < 3) goto LAB_00225bb8;
LAB_00226128:
        local_1e0 = CONCAT44(local_1e0._4_4_,(undefined4)local_180);
        cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
      }
      uStack_1b8 = uStack_158;
      local_1c0 = local_160;
      lStack_1a8 = lStack_148;
      local_1b0 = local_150;
      uStack_1c8 = uStack_168;
      local_1d0 = local_170;
      if (lStack_88 != 0) {
        piVar1 = (int *)(lStack_88 + 0x14);
        do {
          iVar18 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar18 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar18 == 1) {
          cv::Mat::deallocate((Mat *)&local_c0);
        }
      }
      lStack_88 = 0;
      local_b0 = 0;
      uStack_98 = 0;
      local_a0 = 0;
      uStack_a8 = 0;
      if (0 < local_bc) {
        iVar18 = 0;
        do {
          *local_80 = 0;
          iVar18 = iVar18 + 1;
          local_80 = local_80 + 1;
        } while (iVar18 < local_bc);
      }
      if (local_78 != auStack_70) {
        cv::fastFree(local_78);
      }
      param_4 = (Mat *)&local_180;
      local_388 = pMVar20;
      if (pMVar20 == (Mat *)0x0) goto LAB_002261a0;
    }
    local_390[0] = 0x2010000;
    local_370 = param_4;
  }
  local_b0 = 0;
  local_110 = 0;
  if (local_370 == (Mat *)0x0) {
    local_378 = CONCAT44(local_378._4_4_,0x2000000);
  }
  else {
    local_378 = CONCAT44(local_378._4_4_,0x2010000);
  }
  local_364 = 0;
  local_c0 = 0x2010000;
  local_120 = 0x1010000;
  local_37c = 0;
  local_380 = 0;
  local_368 = local_364;
  local_118 = aMStack_60;
  local_b8 = (Mat *)&local_360;
  cv::integral((_InputArray *)&local_120,(_OutputArray *)&local_c0,(_OutputArray *)local_390,
               (_OutputArray *)&local_378,local_360 & 7,-1);
  if (((local_350 != local_2f0) || (local_230 != local_290)) || (local_170 != local_1d0)) {
    local_378 = 0;
    local_370 = (Mat *)0x0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_378,0x51);
    uVar13 = s_sum_data____sum0_data____sqsum_d_004605e8._72_8_;
    uVar12 = s_sum_data____sum0_data____sqsum_d_004605e8._64_8_;
    uVar11 = s_sum_data____sum0_data____sqsum_d_004605e8._56_8_;
    uVar10 = s_sum_data____sum0_data____sqsum_d_004605e8._48_8_;
    uVar9 = s_sum_data____sum0_data____sqsum_d_004605e8._40_8_;
    uVar8 = s_sum_data____sum0_data____sqsum_d_004605e8._32_8_;
    uVar7 = s_sum_data____sum0_data____sqsum_d_004605e8._24_8_;
    uVar6 = s_sum_data____sum0_data____sqsum_d_004605e8._16_8_;
    uVar5 = s_sum_data____sum0_data____sqsum_d_004605e8._8_8_;
    uVar4 = s_sum_data____sum0_data____sqsum_d_004605e8._0_8_;
    pcVar15[0x50] = s_sum_data____sum0_data____sqsum_d_004605e8[0x50];
    *(undefined8 *)pcVar15 = uVar4;
    *(undefined8 *)(pcVar15 + 8) = uVar5;
    *(undefined8 *)(pcVar15 + 0x10) = uVar6;
    *(undefined8 *)(pcVar15 + 0x18) = uVar7;
    *(undefined8 *)(pcVar15 + 0x20) = uVar8;
    *(undefined8 *)(pcVar15 + 0x28) = uVar9;
    *(undefined8 *)(pcVar15 + 0x30) = uVar10;
    *(undefined8 *)(pcVar15 + 0x38) = uVar11;
    *(undefined8 *)(pcVar15 + 0x40) = uVar12;
    *(undefined8 *)(pcVar15 + 0x48) = uVar13;
    cv::error(-0xd7,(String *)&local_378,"void cvIntegral(const CvArr*, CvArr*, CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/imgproc/src/sumpixels.cpp",0x239);
    cv::String::deallocate((String *)&local_378);
  }
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar18 = 0;
    puVar17 = local_140;
    do {
      *(undefined4 *)puVar17 = 0;
      iVar18 = iVar18 + 1;
      puVar17 = (undefined8 *)((long)puVar17 + 4);
    } while (iVar18 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar18 = 0;
    puVar17 = local_1a0;
    do {
      *(undefined4 *)puVar17 = 0;
      iVar18 = iVar18 + 1;
      puVar17 = (undefined8 *)((long)puVar17 + 4);
    } while (iVar18 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar18 = 0;
    pAVar16 = local_200;
    do {
      *(undefined4 *)pAVar16 = 0;
      iVar18 = iVar18 + 1;
      pAVar16 = pAVar16 + 4;
    } while (iVar18 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    cv::fastFree(local_1f8);
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_2a0._4_4_) {
    iVar18 = 0;
    puVar17 = local_260;
    do {
      *(undefined4 *)puVar17 = 0;
      iVar18 = iVar18 + 1;
      puVar17 = (undefined8 *)((long)puVar17 + 4);
    } while (iVar18 < local_2a0._4_4_);
  }
  if (local_258 != &local_250) {
    cv::fastFree(local_258);
  }
  if (local_2c8 != 0) {
    piVar1 = (int *)(local_2c8 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_300);
    }
  }
  local_2c8 = 0;
  local_2f0 = 0;
  local_2d8 = 0;
  local_2e0 = 0;
  local_2e8 = 0;
  if (0 < local_300._4_4_) {
    iVar18 = 0;
    puVar17 = local_2c0;
    do {
      *(undefined4 *)puVar17 = 0;
      iVar18 = iVar18 + 1;
      puVar17 = (undefined8 *)((long)puVar17 + 4);
    } while (iVar18 < local_300._4_4_);
  }
  if (local_2b8 != &local_2b0) {
    cv::fastFree(local_2b8);
  }
  if (local_328 != 0) {
    piVar1 = (int *)(local_328 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_360);
    }
  }
  local_328 = 0;
  local_350 = 0;
  local_338 = 0;
  local_340 = 0;
  local_348 = 0;
  if (0 < iStack_35c) {
    iVar18 = 0;
    do {
      *local_320 = 0;
      iVar18 = iVar18 + 1;
      local_320 = local_320 + 1;
    } while (iVar18 < iStack_35c);
  }
  if (local_318 != auStack_310) {
    cv::fastFree(local_318);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar18 = 0;
    do {
      *local_20 = 0;
      iVar18 = iVar18 + 1;
      local_20 = local_20 + 1;
    } while (iVar18 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00226460 (2468 bytes) name=FUN_00226460

void FUN_00226460(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  byte *pbVar3;
  int iVar4;
  int iVar5;
  byte bVar6;
  bool bVar7;
  uint uVar8;
  int iVar9;
  long lVar10;
  ulong uVar11;
  undefined1 *puVar12;
  long lVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  uint uVar17;
  int iVar18;
  undefined1 *puVar19;
  int iVar20;
  int *piVar21;
  int iVar22;
  byte *pbVar23;
  int *piVar24;
  long lVar25;
  double *pdVar26;
  long lVar27;
  long lVar28;
  int *piVar29;
  undefined1 *puVar30;
  long lVar31;
  int *piVar32;
  double *pdVar33;
  int iVar34;
  long lVar35;
  ulong uVar36;
  long lVar37;
  uint *puVar38;
  int iVar39;
  double dVar40;
  double dVar41;
  long lVar42;
  int *piVar43;
  int *piVar44;
  long lVar45;
  long lVar46;
  int *local_440;
  undefined1 auStack_420 [1056];
  
  iVar39 = (int)(param_4 >> 2);
  iVar34 = (int)(param_8 >> 2);
  uVar8 = param_10 + param_10 * *param_9;
  *param_9 = param_10 * *param_9;
  iVar22 = (int)(param_6 >> 3);
  memset(param_3,0,-(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2);
  piVar43 = (int *)((long)param_3 + (long)(param_10 + iVar39) * 4);
  if (param_5 == (void *)0x0) {
    pdVar33 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022656c;
LAB_00226528:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    local_440 = (int *)((long)param_7 + (long)(param_10 + iVar34) * 4);
    bVar7 = local_440 == (int *)0x0;
    if (pdVar33 == (double *)0x0) {
      if (bVar7) {
LAB_0022656c:
        iVar22 = param_9[1];
        if (iVar22 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar34 = 0;
        do {
          if (0 < param_10) {
            piVar24 = piVar43 + lVar1;
            pbVar23 = param_1;
            do {
              *(undefined4 *)
               ((long)piVar43 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2
               )) = 0;
              if (0 < *param_9) {
                lVar10 = 0;
                iVar18 = 0;
                iVar22 = 0;
                do {
                  iVar22 = iVar22 + param_10;
                  iVar18 = iVar18 + (uint)pbVar23[lVar10];
                  piVar43[lVar10] =
                       *(int *)((long)piVar43 +
                               lVar10 * 4 +
                               (-(ulong)((uint)-iVar39 >> 0x1f) & 0xfffffffc00000000 |
                               (ulong)(uint)-iVar39 << 2)) + iVar18;
                  lVar10 = lVar10 + param_10;
                } while (iVar22 < *param_9);
              }
              piVar43 = piVar43 + 1;
              pbVar23 = pbVar23 + 1;
            } while (piVar43 != piVar24);
            param_1 = param_1 + lVar1;
            iVar22 = param_9[1];
            piVar43 = piVar24;
          }
          iVar34 = iVar34 + 1;
          piVar43 = (int *)((long)piVar43 +
                           (-(ulong)((uint)(iVar39 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar39 - param_10) << 2));
          param_1 = param_1 + (param_2 - param_10);
        } while (iVar34 < iVar22);
        return;
      }
    }
    else if (bVar7) goto LAB_00226ca8;
    puVar2 = auStack_420;
    uVar36 = (ulong)(param_10 + *param_9);
    if (0x108 < uVar36) {
      uVar11 = uVar36 << 2;
      if (0x1fc0000000000000 < uVar36) {
        uVar11 = 0xffffffffffffffff;
      }
      puVar12 = operator_new__(uVar11);
      bVar7 = puVar12 != puVar2;
      puVar2 = puVar12;
    }
    puVar12 = puVar2;
    if (0 < param_10) {
      iVar18 = -param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar10 = (long)param_10;
      piVar32 = piVar43 + lVar1;
      piVar24 = local_440;
      pbVar23 = param_1;
      do {
        piVar24[iVar18] = 0;
        piVar43[iVar18] = 0;
        if (0 < *param_9) {
          if (pdVar33 == (double *)0x0) {
            iVar20 = 0;
            iVar9 = 0;
            lVar16 = 0;
            do {
              bVar6 = pbVar23[lVar16];
              iVar9 = iVar9 + param_10;
              piVar24[lVar16] = (uint)bVar6;
              *(uint *)(puVar12 + lVar16 * 4) = (uint)bVar6;
              iVar20 = iVar20 + (uint)bVar6;
              piVar43[lVar16] = iVar20;
              lVar16 = lVar16 + lVar10;
              iVar4 = *param_9;
            } while (iVar9 < iVar4);
          }
          else {
            dVar41 = 0.0;
            lVar16 = 0;
            iVar20 = 0;
            iVar9 = 0;
            do {
              bVar6 = pbVar23[lVar16];
              iVar9 = iVar9 + param_10;
              piVar24[lVar16] = (uint)bVar6;
              *(uint *)(puVar12 + lVar16 * 4) = (uint)bVar6;
              uVar8 = (uint)bVar6;
              iVar20 = iVar20 + uVar8;
              piVar43[lVar16] = iVar20;
              iVar4 = *param_9;
              dVar41 = dVar41 + (double)uVar8 * (double)uVar8;
              pdVar33[lVar16] = dVar41;
              lVar16 = lVar16 + lVar10;
            } while (iVar9 < iVar4);
          }
          if (param_10 == iVar4) {
            *(undefined4 *)(puVar12 + lVar10 * 4) = 0;
          }
        }
        if (pdVar33 != (double *)0x0) {
          pdVar33[iVar18] = 0.0;
          pdVar33 = pdVar33 + 1;
        }
        piVar43 = piVar43 + 1;
        pbVar23 = pbVar23 + 1;
        piVar24 = piVar24 + 1;
        puVar12 = puVar12 + 4;
      } while (piVar43 != piVar32);
      param_1 = param_1 + lVar1;
      local_440 = local_440 + lVar1;
      piVar43 = piVar32;
      puVar12 = puVar2 + lVar1 * 4;
    }
    iVar18 = param_9[1];
    if (1 < iVar18) {
      lVar31 = (long)param_10;
      lVar16 = (long)-param_10;
      lVar10 = (ulong)(param_10 - 1) + 1;
      lVar46 = NEON_shl(lVar31,3);
      uVar36 = -(ulong)((uint)-iVar39 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar39 << 2;
      lVar28 = lVar31 * 4;
      lVar13 = (lVar31 + iVar39) * -4;
      iVar9 = 1;
      lVar42 = NEON_shl(lVar16,3);
      lVar45 = NEON_shl(lVar10,2);
      lVar1 = lVar31 * -0xc + (long)(param_10 - iVar34) * 4;
      do {
        piVar43 = (int *)((long)piVar43 +
                         (-(ulong)((uint)(iVar39 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar39 - param_10) << 2));
        if (pdVar33 != (double *)0x0) {
          pdVar33 = (double *)
                    ((long)pdVar33 +
                    (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar22 - param_10) << 3));
        }
        param_1 = param_1 + (param_2 - param_10);
        local_440 = (int *)((long)local_440 +
                           (-(ulong)((uint)(iVar34 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar34 - param_10) << 2));
        puVar12 = puVar12 + lVar16 * 4;
        if (0 < param_10) {
          pbVar23 = param_1 + lVar31;
          puVar30 = puVar12 + lVar28;
          piVar21 = local_440 + lVar31;
          piVar44 = (int *)((long)local_440 +
                           (-(ulong)((uint)-iVar34 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)-iVar34 << 2));
          piVar29 = piVar43 + lVar31;
          pbVar3 = param_1 + lVar10;
          puVar19 = puVar12;
          piVar24 = piVar43;
          piVar32 = local_440;
          do {
            bVar6 = *param_1;
            uVar17 = (uint)bVar6;
            uVar8 = (uint)bVar6;
            piVar24[lVar16] = 0;
            dVar41 = (double)uVar17 * (double)bVar6;
            uVar15 = (uint)bVar6;
            uVar14 = (uint)bVar6;
            iVar18 = param_10;
            if (pdVar33 == (double *)0x0) {
              piVar32[lVar16] = *piVar44;
              *piVar24 = (uint)bVar6 + *(int *)((long)piVar24 + uVar36);
              *piVar32 = uVar14 + *piVar44 + *(int *)(puVar19 + lVar28);
              iVar20 = *param_9;
              if (iVar20 - param_10 <= param_10) goto LAB_00226c48;
              lVar27 = 0;
              lVar35 = lVar46;
              uVar8 = uVar17;
              do {
                lVar25 = lVar35;
                iVar20 = *(int *)(puVar30 + lVar27 * 4);
                iVar18 = iVar18 + param_10;
                lVar37 = lVar31 * 2 + lVar27;
                puVar38 = (uint *)(puVar19 + lVar25);
                *(uint *)(puVar19 + lVar27 * 4) = iVar20 + uVar14;
                bVar6 = pbVar23[lVar27];
                uVar14 = (uint)bVar6;
                uVar15 = (uint)bVar6;
                uVar8 = uVar8 + uVar15;
                piVar29[lVar27] = *(int *)((long)piVar24 + lVar25 + lVar13) + uVar8;
                piVar21[lVar27] =
                     (uint)bVar6 + *(int *)(puVar19 + lVar25) +
                     *(int *)((long)piVar32 + lVar25 + lVar1) + iVar20;
                lVar27 = lVar37 - lVar31;
                iVar20 = *param_9;
                dVar41 = dVar41 + (double)bVar6 * (double)uVar15;
                lVar35 = lVar25 + lVar28;
              } while (iVar18 < iVar20 - param_10);
            }
            else {
              *(undefined8 *)((long)pdVar33 + lVar42) = 0;
              piVar32[lVar16] = *piVar44;
              dVar40 = *(double *)
                        ((long)pdVar33 +
                        (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffff800000000 |
                        (ulong)(uint)-iVar22 << 3));
              *piVar24 = uVar14 + *(int *)((long)piVar24 + uVar36);
              iVar20 = *piVar44;
              iVar4 = *(int *)(puVar19 + lVar28);
              *pdVar33 = dVar41 + dVar40;
              *piVar32 = uVar14 + iVar20 + iVar4;
              iVar20 = *param_9;
              if (param_10 < iVar20 - param_10) {
                lVar35 = 0;
                lVar27 = lVar46;
                uVar8 = uVar17;
                uVar14 = uVar15;
                do {
                  lVar25 = lVar27;
                  iVar20 = *(int *)(puVar30 + lVar35 * 4);
                  iVar18 = iVar18 + param_10;
                  dVar40 = *(double *)((long)pdVar33 + lVar35 * 8 + lVar46 + (long)iVar22 * -8);
                  lVar37 = lVar35 + lVar31 * 2;
                  *(uint *)(puVar19 + lVar35 * 4) = iVar20 + uVar14;
                  puVar38 = (uint *)(puVar19 + lVar25);
                  bVar6 = pbVar23[lVar35];
                  uVar14 = (uint)bVar6;
                  uVar15 = (uint)bVar6;
                  uVar8 = uVar8 + bVar6;
                  piVar29[lVar35] = *(int *)((long)piVar24 + lVar25 + lVar13) + uVar8;
                  iVar4 = *(int *)(puVar19 + lVar25);
                  iVar5 = *(int *)((long)piVar32 + lVar25 + lVar1);
                  dVar41 = dVar41 + (double)bVar6 * (double)(uint)bVar6;
                  *(double *)((long)pdVar33 + lVar35 * 8 + lVar46) = dVar40 + dVar41;
                  piVar21[lVar35] = (uint)bVar6 + iVar4 + iVar5 + iVar20;
                  lVar35 = lVar37 - lVar31;
                  iVar20 = *param_9;
                  lVar27 = lVar25 + lVar28;
                } while (iVar18 < iVar20 - param_10);
              }
              else {
LAB_00226c48:
                puVar38 = (uint *)(puVar19 + lVar28);
                lVar25 = lVar28;
                lVar37 = lVar31;
              }
            }
            if (param_10 < iVar20) {
              uVar14 = *puVar38;
              *(uint *)(puVar19 + (long)(iVar18 - param_10) * 4) = uVar14 + uVar15;
              bVar6 = param_1[lVar37];
              uVar15 = (uint)bVar6;
              *(uint *)((long)piVar24 + lVar25) = piVar24[iVar18 - iVar39] + uVar8 + bVar6;
              if (pdVar33 != (double *)0x0) {
                pdVar33[lVar37] =
                     pdVar33[iVar18 - iVar22] + dVar41 + (double)uVar15 * (double)(uint)bVar6;
              }
              *(uint *)((long)piVar32 + lVar25) =
                   uVar15 + uVar14 + piVar32[(iVar18 - iVar34) - param_10];
              *puVar38 = uVar15;
            }
            piVar24 = piVar24 + 1;
            if (pdVar33 != (double *)0x0) {
              pdVar33 = pdVar33 + 1;
            }
            piVar32 = piVar32 + 1;
            puVar19 = puVar19 + 4;
            param_1 = param_1 + 1;
            puVar30 = puVar30 + 4;
            pbVar23 = pbVar23 + 1;
            piVar29 = piVar29 + 1;
            piVar21 = piVar21 + 1;
            piVar44 = piVar44 + 1;
          } while (param_1 != pbVar3);
          piVar43 = (int *)((long)piVar43 + lVar45);
          puVar12 = puVar12 + lVar45;
          local_440 = (int *)((long)local_440 + lVar45);
          iVar18 = param_9[1];
          param_1 = pbVar3;
        }
        iVar9 = iVar9 + 1;
      } while (iVar9 < iVar18);
    }
    if (bVar7) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar33 = (double *)((long)param_5 + (long)(param_10 + iVar22) * 8);
    if (param_7 != (void *)0x0) goto LAB_00226528;
    if (pdVar33 == (double *)0x0) goto LAB_0022656c;
LAB_00226ca8:
    iVar34 = param_9[1];
    if (0 < iVar34) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      iVar18 = 0;
      do {
        if (0 < param_10) {
          piVar24 = piVar43 + lVar1;
          pdVar26 = pdVar33;
          pbVar23 = param_1;
          do {
            piVar43[-param_10] = 0;
            iVar34 = *param_9;
            pdVar26[-param_10] = 0.0;
            if (0 < iVar34) {
              dVar41 = 0.0;
              lVar10 = 0;
              iVar9 = 0;
              iVar34 = 0;
              do {
                bVar6 = pbVar23[lVar10];
                iVar34 = iVar34 + param_10;
                dVar40 = *(double *)
                          ((long)pdVar26 +
                          lVar10 * 8 +
                          (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffff800000000 |
                          (ulong)(uint)-iVar22 << 3));
                iVar9 = iVar9 + (uint)bVar6;
                piVar43[lVar10] =
                     *(int *)((long)piVar43 +
                             lVar10 * 4 +
                             (-(ulong)((uint)-iVar39 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar39 << 2)) + iVar9;
                iVar20 = *param_9;
                dVar41 = dVar41 + (double)bVar6 * (double)bVar6;
                pdVar26[lVar10] = dVar41 + dVar40;
                lVar10 = lVar10 + param_10;
              } while (iVar34 < iVar20);
            }
            piVar43 = piVar43 + 1;
            pbVar23 = pbVar23 + 1;
            pdVar26 = pdVar26 + 1;
          } while (piVar43 != piVar24);
          pdVar33 = pdVar33 + lVar1;
          param_1 = param_1 + lVar1;
          iVar34 = param_9[1];
          piVar43 = piVar24;
        }
        iVar18 = iVar18 + 1;
        piVar43 = (int *)((long)piVar43 +
                         (-(ulong)((uint)(iVar39 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar39 - param_10) << 2));
        pdVar33 = (double *)
                  ((long)pdVar33 +
                  (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar22 - param_10) << 3));
        param_1 = param_1 + (param_2 - param_10);
      } while (iVar18 < iVar34);
    }
  }
  return;
}


==================================================================

### FUNC 00226e04 (52 bytes) name=FUN_00226e04

void FUN_00226e04(void)

{
  FUN_00226460();
  return;
}


==================================================================

### FUNC 00226e38 (2432 bytes) name=FUN_00226e38

void FUN_00226e38(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  byte *pbVar3;
  byte bVar4;
  int iVar5;
  bool bVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  ulong uVar10;
  undefined1 *puVar11;
  long lVar12;
  uint uVar13;
  uint uVar14;
  undefined1 *puVar15;
  int iVar16;
  int *piVar17;
  byte *pbVar18;
  int iVar19;
  int *piVar20;
  long lVar21;
  int *piVar22;
  long lVar23;
  int *piVar24;
  int iVar25;
  undefined1 *puVar26;
  uint *puVar27;
  long lVar28;
  int *piVar29;
  long lVar30;
  long lVar31;
  ulong uVar32;
  long lVar33;
  int iVar34;
  uint uVar35;
  int *piVar36;
  long lVar37;
  long lVar38;
  int *piVar39;
  int *piVar40;
  undefined1 auStack_420 [1056];
  
  iVar7 = *param_9;
  iVar5 = (int)(param_4 >> 2);
  *param_9 = param_10 * iVar7;
  iVar25 = (int)(param_6 >> 2);
  uVar35 = param_10 + param_10 * iVar7;
  iVar7 = (int)(param_8 >> 2);
  memset(param_3,0,-(ulong)(uVar35 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar35 << 2);
  piVar36 = (int *)((long)param_3 + (long)(param_10 + iVar5) * 4);
  if (param_5 == (void *)0x0) {
    piVar29 = (int *)0x0;
    if (param_7 == (void *)0x0) goto LAB_00226f54;
LAB_00226f10:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    piVar22 = (int *)((long)param_7 + (long)(param_10 + iVar7) * 4);
    bVar6 = piVar22 == (int *)0x0;
    if (piVar29 == (int *)0x0) {
      if (bVar6) {
LAB_00226f54:
        iVar7 = param_9[1];
        if (iVar7 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar25 = 0;
        do {
          if (0 < param_10) {
            piVar29 = piVar36 + lVar1;
            pbVar18 = param_1;
            do {
              *(undefined4 *)
               ((long)piVar36 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2
               )) = 0;
              if (0 < *param_9) {
                lVar9 = 0;
                iVar16 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  iVar16 = iVar16 + (uint)pbVar18[lVar9];
                  piVar36[lVar9] =
                       *(int *)((long)piVar36 +
                               lVar9 * 4 +
                               (-(ulong)((uint)-iVar5 >> 0x1f) & 0xfffffffc00000000 |
                               (ulong)(uint)-iVar5 << 2)) + iVar16;
                  lVar9 = lVar9 + param_10;
                } while (iVar7 < *param_9);
              }
              piVar36 = piVar36 + 1;
              pbVar18 = pbVar18 + 1;
            } while (piVar36 != piVar29);
            param_1 = param_1 + lVar1;
            iVar7 = param_9[1];
            piVar36 = piVar29;
          }
          iVar25 = iVar25 + 1;
          piVar36 = (int *)((long)piVar36 +
                           (-(ulong)((uint)(iVar5 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar5 - param_10) << 2));
          param_1 = param_1 + (param_2 - param_10);
        } while (iVar25 < iVar7);
        return;
      }
    }
    else if (bVar6) goto LAB_00227674;
    puVar2 = auStack_420;
    uVar32 = (ulong)(param_10 + *param_9);
    if (0x108 < uVar32) {
      uVar10 = uVar32 << 2;
      if (0x1fc0000000000000 < uVar32) {
        uVar10 = 0xffffffffffffffff;
      }
      puVar11 = operator_new__(uVar10);
      bVar6 = puVar11 != puVar2;
      puVar2 = puVar11;
    }
    puVar11 = puVar2;
    if (0 < param_10) {
      lVar9 = (long)param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      piVar24 = piVar36 + lVar1;
      uVar32 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      piVar20 = piVar22;
      pbVar18 = param_1;
      do {
        *(undefined4 *)((long)piVar20 + uVar32) = 0;
        *(undefined4 *)((long)piVar36 + uVar32) = 0;
        if (0 < *param_9) {
          if (piVar29 == (int *)0x0) {
            iVar8 = 0;
            iVar16 = 0;
            lVar12 = 0;
            do {
              bVar4 = pbVar18[lVar12];
              iVar16 = iVar16 + param_10;
              piVar20[lVar12] = (uint)bVar4;
              *(uint *)(puVar11 + lVar12 * 4) = (uint)bVar4;
              iVar8 = iVar8 + (uint)bVar4;
              piVar36[lVar12] = iVar8;
              lVar12 = lVar12 + lVar9;
              iVar34 = *param_9;
            } while (iVar16 < iVar34);
          }
          else {
            lVar12 = 0;
            iVar19 = 0;
            iVar8 = 0;
            iVar16 = 0;
            do {
              bVar4 = pbVar18[lVar12];
              iVar16 = iVar16 + param_10;
              piVar20[lVar12] = (uint)bVar4;
              *(uint *)(puVar11 + lVar12 * 4) = (uint)bVar4;
              uVar35 = (uint)bVar4;
              iVar8 = iVar8 + uVar35;
              iVar19 = iVar19 + uVar35 * uVar35;
              piVar36[lVar12] = iVar8;
              piVar29[lVar12] = iVar19;
              lVar12 = lVar12 + lVar9;
              iVar34 = *param_9;
            } while (iVar16 < iVar34);
          }
          if (param_10 == iVar34) {
            *(undefined4 *)(puVar11 + lVar9 * 4) = 0;
          }
        }
        if (piVar29 != (int *)0x0) {
          *(undefined4 *)((long)piVar29 + uVar32) = 0;
          piVar29 = piVar29 + 1;
        }
        piVar36 = piVar36 + 1;
        pbVar18 = pbVar18 + 1;
        piVar20 = piVar20 + 1;
        puVar11 = puVar11 + 4;
      } while (piVar36 != piVar24);
      param_1 = param_1 + lVar1;
      piVar22 = piVar22 + lVar1;
      piVar36 = piVar24;
      puVar11 = puVar2 + lVar1 * 4;
    }
    iVar16 = param_9[1];
    if (1 < iVar16) {
      lVar9 = (ulong)(param_10 - 1) + 1;
      uVar10 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      uVar32 = -(ulong)((uint)-iVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar5 << 2;
      lVar28 = (long)param_10;
      lVar12 = (lVar28 + iVar5) * -4;
      lVar23 = lVar28 * 4;
      lVar38 = NEON_shl(lVar28,3);
      iVar8 = 1;
      lVar37 = NEON_shl(lVar9,2);
      lVar1 = lVar28 * -0xc + (long)(param_10 - iVar7) * 4;
      do {
        piVar36 = (int *)((long)piVar36 +
                         (-(ulong)((uint)(iVar5 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar5 - param_10) << 2));
        puVar11 = puVar11 + uVar10;
        if (piVar29 != (int *)0x0) {
          piVar29 = (int *)((long)piVar29 +
                           (-(ulong)((uint)(iVar25 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar25 - param_10) << 2));
        }
        param_1 = param_1 + (param_2 - param_10);
        piVar22 = (int *)((long)piVar22 +
                         (-(ulong)((uint)(iVar7 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar7 - param_10) << 2));
        if (0 < param_10) {
          piVar17 = piVar22 + lVar28;
          piVar40 = (int *)((long)piVar22 +
                           (-(ulong)((uint)-iVar7 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)-iVar7 << 2));
          puVar26 = puVar11 + lVar23;
          pbVar18 = param_1 + lVar28;
          piVar24 = piVar36 + lVar28;
          pbVar3 = param_1 + lVar9;
          puVar15 = puVar11;
          piVar20 = piVar36;
          piVar39 = piVar22;
          do {
            bVar4 = *param_1;
            uVar35 = (uint)bVar4;
            iVar34 = (uint)bVar4 * (uint)bVar4;
            *(undefined4 *)((long)piVar20 + uVar10) = 0;
            uVar14 = (uint)bVar4;
            uVar13 = (uint)bVar4;
            iVar16 = param_10;
            if (piVar29 == (int *)0x0) {
              *(int *)((long)piVar39 + uVar10) = *piVar40;
              *piVar20 = uVar13 + *(int *)((long)piVar20 + uVar32);
              *piVar39 = uVar13 + *piVar40 + *(int *)(puVar15 + lVar23);
              iVar19 = *param_9;
              if (iVar19 - param_10 <= param_10) goto LAB_00227614;
              lVar21 = 0;
              lVar31 = lVar38;
              uVar13 = uVar14;
              do {
                lVar33 = lVar31;
                iVar19 = *(int *)(puVar26 + lVar21 * 4);
                iVar16 = iVar16 + param_10;
                lVar30 = lVar28 * 2 + lVar21;
                puVar27 = (uint *)(puVar15 + lVar33);
                *(uint *)(puVar15 + lVar21 * 4) = iVar19 + uVar13;
                bVar4 = pbVar18[lVar21];
                uVar13 = (uint)bVar4;
                uVar14 = (uint)bVar4;
                uVar35 = uVar35 + uVar14;
                piVar24[lVar21] = *(int *)((long)piVar20 + lVar33 + lVar12) + uVar35;
                iVar34 = iVar34 + uVar14 * bVar4;
                piVar17[lVar21] =
                     (uint)bVar4 + *(int *)(puVar15 + lVar33) +
                     *(int *)((long)piVar39 + lVar33 + lVar1) + iVar19;
                lVar21 = lVar30 - lVar28;
                iVar19 = *param_9;
                lVar31 = lVar33 + lVar23;
              } while (iVar16 < iVar19 - param_10);
            }
            else {
              *(undefined4 *)((long)piVar29 + uVar10) = 0;
              *(int *)((long)piVar39 + uVar10) = *piVar40;
              *piVar20 = uVar14 + *(int *)((long)piVar20 + uVar32);
              *piVar29 = iVar34 + *(int *)((long)piVar29 +
                                          (-(ulong)((uint)-iVar25 >> 0x1f) & 0xfffffffc00000000 |
                                          (ulong)(uint)-iVar25 << 2));
              *piVar39 = uVar13 + *piVar40 + *(int *)(puVar15 + lVar23);
              iVar19 = *param_9;
              if (param_10 < iVar19 - param_10) {
                lVar31 = 0;
                lVar21 = lVar38;
                do {
                  lVar33 = lVar21;
                  iVar19 = *(int *)(puVar26 + lVar31 * 4);
                  iVar16 = iVar16 + param_10;
                  lVar30 = lVar31 + lVar28 * 2;
                  puVar27 = (uint *)(puVar15 + lVar33);
                  *(uint *)(puVar15 + lVar31 * 4) = iVar19 + uVar13;
                  bVar4 = pbVar18[lVar31];
                  uVar13 = (uint)bVar4;
                  uVar14 = (uint)bVar4;
                  uVar35 = uVar35 + bVar4;
                  piVar24[lVar31] = *(int *)((long)piVar20 + lVar33 + lVar12) + uVar35;
                  iVar34 = iVar34 + (uint)bVar4 * (uint)bVar4;
                  piVar29[lVar28 + lVar31] =
                       *(int *)((long)piVar29 + lVar33 + (lVar28 + iVar25) * -4) + iVar34;
                  piVar17[lVar31] =
                       (uint)bVar4 + *(int *)(puVar15 + lVar33) +
                       *(int *)((long)piVar39 + lVar33 + lVar1) + iVar19;
                  lVar31 = lVar30 - lVar28;
                  iVar19 = *param_9;
                  lVar21 = lVar33 + lVar23;
                } while (iVar16 < iVar19 - param_10);
              }
              else {
LAB_00227614:
                puVar27 = (uint *)(puVar15 + lVar23);
                lVar30 = lVar28;
                lVar33 = lVar23;
              }
            }
            if (param_10 < iVar19) {
              uVar13 = *puVar27;
              *(uint *)(puVar15 + (long)(iVar16 - param_10) * 4) = uVar13 + uVar14;
              bVar4 = param_1[lVar30];
              *(uint *)((long)piVar20 + lVar33) = piVar20[iVar16 - iVar5] + uVar35 + bVar4;
              uVar35 = (uint)bVar4;
              if (piVar29 != (int *)0x0) {
                *(uint *)((long)piVar29 + lVar33) =
                     piVar29[iVar16 - iVar25] + iVar34 + bVar4 * uVar35;
              }
              *(uint *)((long)piVar39 + lVar33) =
                   uVar35 + uVar13 + piVar39[(iVar16 - iVar7) - param_10];
              *puVar27 = uVar35;
            }
            piVar20 = piVar20 + 1;
            if (piVar29 != (int *)0x0) {
              piVar29 = piVar29 + 1;
            }
            puVar15 = puVar15 + 4;
            puVar26 = puVar26 + 4;
            param_1 = param_1 + 1;
            pbVar18 = pbVar18 + 1;
            piVar24 = piVar24 + 1;
            piVar17 = piVar17 + 1;
            piVar39 = piVar39 + 1;
            piVar40 = piVar40 + 1;
          } while (param_1 != pbVar3);
          piVar36 = (int *)((long)piVar36 + lVar37);
          puVar11 = puVar11 + lVar37;
          piVar22 = (int *)((long)piVar22 + lVar37);
          iVar16 = param_9[1];
          param_1 = pbVar3;
        }
        iVar8 = iVar8 + 1;
      } while (iVar8 < iVar16);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    piVar29 = (int *)((long)param_5 + (long)(param_10 + iVar25) * 4);
    if (param_7 != (void *)0x0) goto LAB_00226f10;
    if (piVar29 == (int *)0x0) goto LAB_00226f54;
LAB_00227674:
    iVar7 = param_9[1];
    if (0 < iVar7) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar32 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      iVar16 = 0;
      do {
        if (0 < param_10) {
          piVar20 = piVar36 + lVar1;
          piVar22 = piVar29;
          pbVar18 = param_1;
          do {
            *(undefined4 *)((long)piVar36 + uVar32) = 0;
            *(undefined4 *)((long)piVar22 + uVar32) = 0;
            if (0 < *param_9) {
              lVar9 = 0;
              iVar34 = 0;
              iVar8 = 0;
              iVar7 = 0;
              do {
                bVar4 = pbVar18[lVar9];
                iVar7 = iVar7 + param_10;
                iVar19 = *(int *)((long)piVar22 +
                                 lVar9 * 4 +
                                 (-(ulong)((uint)-iVar25 >> 0x1f) & 0xfffffffc00000000 |
                                 (ulong)(uint)-iVar25 << 2));
                iVar8 = iVar8 + (uint)bVar4;
                iVar34 = iVar34 + (uint)bVar4 * (uint)bVar4;
                piVar36[lVar9] =
                     *(int *)((long)piVar36 +
                             lVar9 * 4 +
                             (-(ulong)((uint)-iVar5 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar5 << 2)) + iVar8;
                piVar22[lVar9] = iVar34 + iVar19;
                lVar9 = lVar9 + param_10;
              } while (iVar7 < *param_9);
            }
            piVar36 = piVar36 + 1;
            pbVar18 = pbVar18 + 1;
            piVar22 = piVar22 + 1;
          } while (piVar36 != piVar20);
          piVar29 = piVar29 + lVar1;
          param_1 = param_1 + lVar1;
          iVar7 = param_9[1];
          piVar36 = piVar20;
        }
        iVar16 = iVar16 + 1;
        piVar36 = (int *)((long)piVar36 +
                         (-(ulong)((uint)(iVar5 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar5 - param_10) << 2));
        piVar29 = (int *)((long)piVar29 +
                         (-(ulong)((uint)(iVar25 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar25 - param_10) << 2));
        param_1 = param_1 + (param_2 - param_10);
      } while (iVar16 < iVar7);
    }
  }
  return;
}


==================================================================

### FUNC 002277b8 (52 bytes) name=FUN_002277b8

void FUN_002277b8(void)

{
  FUN_00226e38();
  return;
}


==================================================================

### FUNC 002277ec (2448 bytes) name=FUN_002277ec

void FUN_002277ec(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  byte *pbVar4;
  byte bVar5;
  bool bVar6;
  int iVar7;
  long lVar8;
  ulong uVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  undefined1 *puVar15;
  int iVar16;
  byte *pbVar17;
  undefined1 *puVar18;
  double *pdVar19;
  float *pfVar20;
  float *pfVar21;
  float *pfVar22;
  long lVar23;
  long lVar24;
  float *pfVar25;
  long lVar26;
  int iVar27;
  double *pdVar28;
  long lVar29;
  ulong uVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  double dVar34;
  float fVar35;
  float fVar36;
  double dVar37;
  float fVar38;
  float *pfVar39;
  float fVar40;
  float fVar41;
  long lVar42;
  int iVar43;
  long lVar44;
  int iVar45;
  float *local_448;
  undefined1 auStack_420 [1056];
  
  iVar31 = *param_9;
  iVar32 = (int)(param_4 >> 2);
  *param_9 = param_10 * iVar31;
  uVar3 = param_10 + param_10 * iVar31;
  iVar31 = (int)(param_8 >> 2);
  iVar33 = (int)(param_6 >> 3);
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2);
  pfVar39 = (float *)((long)param_3 + (long)(param_10 + iVar32) * 4);
  if (param_5 == (void *)0x0) {
    pdVar28 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_002278f0;
LAB_002278b0:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    local_448 = (float *)((long)param_7 + (long)(param_10 + iVar31) * 4);
    bVar6 = local_448 == (float *)0x0;
    if (pdVar28 == (double *)0x0) {
      if (bVar6) {
LAB_002278f0:
        iVar31 = param_9[1];
        if (iVar31 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar33 = 0;
        do {
          if (0 < param_10) {
            iVar43 = *param_9;
            pfVar20 = pfVar39 + lVar1;
            pbVar17 = param_1;
            do {
              *(undefined4 *)
               ((long)pfVar39 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2
               )) = 0;
              if (0 < iVar43) {
                fVar35 = 0.0;
                lVar8 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  fVar35 = fVar35 + (float)pbVar17[lVar8];
                  pfVar39[lVar8] =
                       *(float *)((long)pfVar39 +
                                 lVar8 * 4 +
                                 (-(ulong)((uint)-iVar32 >> 0x1f) & 0xfffffffc00000000 |
                                 (ulong)(uint)-iVar32 << 2)) + fVar35;
                  lVar8 = lVar8 + param_10;
                } while (iVar7 < iVar43);
              }
              pfVar39 = pfVar39 + 1;
              pbVar17 = pbVar17 + 1;
            } while (pfVar39 != pfVar20);
            param_1 = param_1 + lVar1;
            pfVar39 = pfVar20;
          }
          iVar33 = iVar33 + 1;
          param_1 = param_1 + (param_2 - param_10);
          pfVar39 = (float *)((long)pfVar39 +
                             (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar32 - param_10) << 2));
        } while (iVar33 != iVar31);
        return;
      }
    }
    else if (bVar6) goto LAB_00228024;
    puVar2 = auStack_420;
    uVar30 = (ulong)(param_10 + *param_9);
    if (0x108 < uVar30) {
      uVar9 = uVar30 << 2;
      if (0x1fc0000000000000 < uVar30) {
        uVar9 = 0xffffffffffffffff;
      }
      puVar10 = operator_new__(uVar9);
      bVar6 = puVar10 != puVar2;
      puVar2 = puVar10;
    }
    puVar10 = puVar2;
    if (0 < param_10) {
      iVar7 = -param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar8 = (long)param_10;
      iVar43 = *param_9;
      pfVar22 = pfVar39 + lVar1;
      pfVar20 = local_448;
      pbVar17 = param_1;
      do {
        pfVar20[iVar7] = 0.0;
        pfVar39[iVar7] = 0.0;
        if (iVar43 < 1) {
LAB_00227ffc:
          if (pdVar28 != (double *)0x0) {
LAB_00227b14:
            pdVar28[iVar7] = 0.0;
            pdVar28 = pdVar28 + 1;
          }
        }
        else {
          if (pdVar28 != (double *)0x0) {
            dVar37 = 0.0;
            lVar14 = 0;
            fVar35 = 0.0;
            iVar16 = 0;
            do {
              bVar5 = pbVar17[lVar14];
              iVar16 = iVar16 + param_10;
              dVar37 = dVar37 + (double)bVar5 * (double)bVar5;
              fVar35 = fVar35 + (float)bVar5;
              pfVar20[lVar14] = (float)bVar5;
              *(float *)(puVar10 + lVar14 * 4) = (float)bVar5;
              pfVar39[lVar14] = fVar35;
              pdVar28[lVar14] = dVar37;
              lVar14 = lVar14 + lVar8;
            } while (iVar16 < iVar43);
            if (param_10 == iVar43) goto LAB_00227ff8;
            goto LAB_00227b14;
          }
          fVar35 = 0.0;
          iVar16 = 0;
          lVar14 = 0;
          do {
            iVar16 = iVar16 + param_10;
            fVar38 = (float)pbVar17[lVar14];
            fVar35 = fVar35 + (float)pbVar17[lVar14];
            pfVar20[lVar14] = fVar38;
            *(float *)(puVar10 + lVar14 * 4) = fVar38;
            pfVar39[lVar14] = fVar35;
            lVar14 = lVar14 + lVar8;
          } while (iVar16 < iVar43);
          if (param_10 == iVar43) {
LAB_00227ff8:
            *(undefined4 *)(puVar10 + lVar8 * 4) = 0;
            goto LAB_00227ffc;
          }
        }
        pfVar39 = pfVar39 + 1;
        pbVar17 = pbVar17 + 1;
        pfVar20 = pfVar20 + 1;
        puVar10 = puVar10 + 4;
      } while (pfVar39 != pfVar22);
      param_1 = param_1 + lVar1;
      local_448 = local_448 + lVar1;
      puVar10 = puVar2 + lVar1 * 4;
      pfVar39 = pfVar22;
    }
    iVar43 = param_9[1];
    if (1 < iVar43) {
      lVar14 = (long)-param_10;
      lVar8 = (ulong)(param_10 - 1) + 1;
      lVar24 = (long)param_10;
      lVar44 = NEON_shl(lVar14,3);
      lVar23 = lVar24 * 4;
      lVar11 = (lVar24 + iVar32) * -4;
      lVar42 = NEON_shl(lVar8,2);
      iVar7 = 1;
      uVar30 = -(ulong)((uint)-iVar32 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar32 << 2;
      lVar1 = lVar24 * -0xc + (long)(param_10 - iVar31) * 4;
      do {
        pfVar39 = (float *)((long)pfVar39 +
                           (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar32 - param_10) << 2));
        if (pdVar28 != (double *)0x0) {
          pdVar28 = (double *)
                    ((long)pdVar28 +
                    (-(ulong)((uint)(iVar33 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar33 - param_10) << 3));
        }
        param_1 = param_1 + (param_2 - param_10);
        local_448 = (float *)((long)local_448 +
                             (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar31 - param_10) << 2));
        puVar10 = puVar10 + lVar14 * 4;
        if (0 < param_10) {
          pbVar17 = param_1 + lVar24;
          iVar45 = *param_9;
          pfVar25 = (float *)((long)local_448 +
                             (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar31 << 2));
          puVar18 = puVar10 + lVar23;
          iVar16 = iVar45 - param_10;
          pbVar4 = param_1 + lVar8;
          puVar15 = puVar10;
          pfVar20 = pfVar39;
          pfVar22 = local_448;
          do {
            bVar5 = *param_1;
            pfVar20[lVar14] = 0.0;
            fVar38 = (float)bVar5;
            fVar35 = *pfVar25;
            dVar37 = (double)bVar5 * (double)bVar5;
            iVar27 = param_10;
            if (pdVar28 == (double *)0x0) {
              pfVar22[lVar14] = fVar35;
              *pfVar20 = fVar38 + *(float *)((long)pfVar20 + uVar30);
              *pfVar22 = fVar38 + *pfVar25 + *(float *)(puVar15 + lVar23);
              if (iVar16 <= param_10) goto LAB_00228004;
              lVar13 = 0;
              lVar12 = lVar24 * 8;
              fVar35 = fVar38;
              do {
                lVar26 = lVar12;
                fVar36 = *(float *)(puVar18 + lVar13 * 4);
                iVar27 = iVar27 + param_10;
                lVar29 = lVar24 * 2 + lVar13;
                pfVar21 = (float *)(puVar15 + lVar26);
                *(float *)(puVar15 + lVar13 * 4) = fVar36 + fVar35;
                bVar5 = pbVar17[lVar13];
                fVar35 = (float)bVar5;
                fVar38 = fVar38 + fVar35;
                dVar37 = dVar37 + (double)bVar5 * (double)bVar5;
                pfVar20[lVar24 + lVar13] = *(float *)((long)pfVar20 + lVar26 + lVar11) + fVar38;
                pfVar22[lVar24 + lVar13] =
                     fVar35 + *(float *)(puVar15 + lVar26) +
                     *(float *)((long)pfVar22 + lVar26 + lVar1) + fVar36;
                lVar13 = lVar29 - lVar24;
                lVar12 = lVar26 + lVar23;
              } while (iVar27 < iVar16);
            }
            else {
              *(undefined8 *)((long)pdVar28 + lVar44) = 0;
              dVar34 = *(double *)
                        ((long)pdVar28 +
                        (-(ulong)((uint)-iVar33 >> 0x1f) & 0xfffffff800000000 |
                        (ulong)(uint)-iVar33 << 3));
              pfVar22[lVar14] = fVar35;
              *pfVar20 = fVar38 + *(float *)((long)pfVar20 + uVar30);
              fVar35 = *pfVar25;
              fVar36 = *(float *)(puVar15 + lVar23);
              *pdVar28 = dVar37 + dVar34;
              *pfVar22 = fVar38 + fVar35 + fVar36;
              if (param_10 < iVar16) {
                lVar12 = 0;
                lVar13 = lVar24 * 8;
                fVar35 = fVar38;
                do {
                  lVar26 = lVar13;
                  fVar41 = *(float *)(puVar18 + lVar12 * 4);
                  iVar27 = iVar27 + param_10;
                  dVar34 = pdVar28[(lVar24 + lVar12) - (long)iVar33];
                  lVar29 = lVar12 + lVar24 * 2;
                  pfVar21 = (float *)(puVar15 + lVar26);
                  *(float *)(puVar15 + lVar12 * 4) = fVar41 + fVar35;
                  bVar5 = pbVar17[lVar12];
                  fVar35 = (float)bVar5;
                  fVar38 = fVar38 + fVar35;
                  dVar37 = dVar37 + (double)bVar5 * (double)bVar5;
                  pfVar20[lVar24 + lVar12] = *(float *)((long)pfVar20 + lVar26 + lVar11) + fVar38;
                  fVar36 = *(float *)(puVar15 + lVar26);
                  fVar40 = *(float *)((long)pfVar22 + lVar26 + lVar1);
                  pdVar28[lVar24 + lVar12] = dVar34 + dVar37;
                  pfVar22[lVar24 + lVar12] = fVar35 + fVar36 + fVar40 + fVar41;
                  lVar12 = lVar29 - lVar24;
                  lVar13 = lVar26 + lVar23;
                } while (iVar27 < iVar16);
              }
              else {
LAB_00228004:
                pfVar21 = (float *)(puVar15 + lVar23);
                lVar26 = lVar23;
                lVar29 = lVar24;
                fVar35 = fVar38;
              }
            }
            if (param_10 < iVar45) {
              fVar36 = *pfVar21;
              *(float *)(puVar15 + (long)(iVar27 - param_10) * 4) = fVar36 + fVar35;
              bVar5 = param_1[lVar29];
              fVar35 = (float)bVar5;
              *(float *)((long)pfVar20 + lVar26) = pfVar20[iVar27 - iVar32] + fVar38 + fVar35;
              if (pdVar28 != (double *)0x0) {
                pdVar28[lVar29] = pdVar28[iVar27 - iVar33] + dVar37 + (double)bVar5 * (double)bVar5;
              }
              *(float *)((long)pfVar22 + lVar26) =
                   fVar35 + fVar36 + pfVar22[(iVar27 - iVar31) - param_10];
              *pfVar21 = fVar35;
            }
            if (pdVar28 != (double *)0x0) {
              pdVar28 = pdVar28 + 1;
            }
            param_1 = param_1 + 1;
            pfVar20 = pfVar20 + 1;
            pfVar22 = pfVar22 + 1;
            puVar15 = puVar15 + 4;
            pfVar25 = pfVar25 + 1;
            puVar18 = puVar18 + 4;
            pbVar17 = pbVar17 + 1;
          } while (param_1 != pbVar4);
          pfVar39 = (float *)((long)pfVar39 + lVar42);
          puVar10 = puVar10 + lVar42;
          local_448 = (float *)((long)local_448 + lVar42);
          param_1 = pbVar4;
        }
        iVar7 = iVar7 + 1;
      } while (iVar7 < iVar43);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar28 = (double *)((long)param_5 + (long)(param_10 + iVar33) * 8);
    if (param_7 != (void *)0x0) goto LAB_002278b0;
    if (pdVar28 == (double *)0x0) goto LAB_002278f0;
LAB_00228024:
    iVar31 = param_9[1];
    if (0 < iVar31) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      iVar43 = 0;
      do {
        if (0 < param_10) {
          iVar7 = *param_9;
          pfVar20 = pfVar39 + lVar1;
          pdVar19 = pdVar28;
          pbVar17 = param_1;
          do {
            pfVar39[-param_10] = 0.0;
            pdVar19[-param_10] = 0.0;
            if (0 < iVar7) {
              dVar37 = 0.0;
              lVar8 = 0;
              fVar35 = 0.0;
              iVar16 = 0;
              do {
                bVar5 = pbVar17[lVar8];
                iVar16 = iVar16 + param_10;
                dVar34 = *(double *)
                          ((long)pdVar19 +
                          lVar8 * 8 +
                          (-(ulong)((uint)-iVar33 >> 0x1f) & 0xfffffff800000000 |
                          (ulong)(uint)-iVar33 << 3));
                dVar37 = dVar37 + (double)bVar5 * (double)bVar5;
                fVar35 = fVar35 + (float)bVar5;
                pfVar39[lVar8] =
                     *(float *)((long)pfVar39 +
                               lVar8 * 4 +
                               (-(ulong)((uint)-iVar32 >> 0x1f) & 0xfffffffc00000000 |
                               (ulong)(uint)-iVar32 << 2)) + fVar35;
                pdVar19[lVar8] = dVar37 + dVar34;
                lVar8 = lVar8 + param_10;
              } while (iVar16 < iVar7);
            }
            pfVar39 = pfVar39 + 1;
            pbVar17 = pbVar17 + 1;
            pdVar19 = pdVar19 + 1;
          } while (pfVar39 != pfVar20);
          param_1 = param_1 + lVar1;
          pdVar28 = pdVar28 + lVar1;
          pfVar39 = pfVar20;
        }
        iVar43 = iVar43 + 1;
        param_1 = param_1 + (param_2 - param_10);
        pfVar39 = (float *)((long)pfVar39 +
                           (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar32 - param_10) << 2));
        pdVar28 = (double *)
                  ((long)pdVar28 +
                  (-(ulong)((uint)(iVar33 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar33 - param_10) << 3));
      } while (iVar43 != iVar31);
    }
  }
  return;
}


==================================================================

### FUNC 0022817c (52 bytes) name=FUN_0022817c

void FUN_0022817c(void)

{
  FUN_002277ec();
  return;
}


==================================================================

### FUNC 002281b0 (2324 bytes) name=FUN_002281b0

void FUN_002281b0(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  byte *pbVar4;
  byte bVar5;
  bool bVar6;
  int iVar7;
  ulong uVar8;
  undefined1 *puVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  undefined1 *puVar14;
  byte *pbVar15;
  double *pdVar16;
  double *pdVar17;
  undefined1 *puVar18;
  double *pdVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  double *pdVar23;
  double *pdVar24;
  double *pdVar25;
  ulong uVar26;
  long lVar27;
  int iVar28;
  int iVar29;
  long lVar30;
  int iVar31;
  long lVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double *pdVar36;
  double dVar37;
  long lVar38;
  int iVar39;
  long lVar40;
  int iVar41;
  undefined1 auStack_440 [1088];
  
  iVar28 = *param_9;
  iVar22 = (int)(param_6 >> 3);
  *param_9 = param_10 * iVar28;
  iVar31 = (int)(param_4 >> 3);
  uVar3 = param_10 + param_10 * iVar28;
  iVar28 = (int)(param_8 >> 3);
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3);
  pdVar36 = (double *)((long)param_3 + (long)(param_10 + iVar31) * 8);
  if (param_5 == (void *)0x0) {
    pdVar25 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_002282b8;
LAB_00228278:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar16 = (double *)((long)param_7 + (long)(param_10 + iVar28) * 8);
    bVar6 = pdVar16 == (double *)0x0;
    if (pdVar25 == (double *)0x0) {
      if (bVar6) {
LAB_002282b8:
        iVar28 = param_9[1];
        if (iVar28 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar22 = 0;
        do {
          if (0 < param_10) {
            pdVar25 = pdVar36 + lVar1;
            iVar39 = *param_9;
            pbVar15 = param_1;
            do {
              *(undefined8 *)
               ((long)pdVar36 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3
               )) = 0;
              if (0 < iVar39) {
                dVar35 = 0.0;
                lVar11 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  dVar35 = dVar35 + (double)pbVar15[lVar11];
                  pdVar36[lVar11] =
                       *(double *)
                        ((long)pdVar36 +
                        lVar11 * 8 +
                        (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffff800000000 |
                        (ulong)(uint)-iVar31 << 3)) + dVar35;
                  lVar11 = lVar11 + param_10;
                } while (iVar7 < iVar39);
              }
              pdVar36 = pdVar36 + 1;
              pbVar15 = pbVar15 + 1;
            } while (pdVar36 != pdVar25);
            param_1 = param_1 + lVar1;
            pdVar36 = pdVar25;
          }
          iVar22 = iVar22 + 1;
          param_1 = param_1 + (param_2 - param_10);
          pdVar36 = (double *)
                    ((long)pdVar36 +
                    (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar31 - param_10) << 3));
        } while (iVar22 != iVar28);
        return;
      }
    }
    else if (bVar6) goto LAB_00228980;
    puVar2 = auStack_440;
    uVar26 = (ulong)(param_10 + *param_9);
    if (0x88 < uVar26) {
      uVar8 = uVar26 << 3;
      if (0xfe0000000000000 < uVar26) {
        uVar8 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar8);
      bVar6 = puVar9 != puVar2;
      puVar2 = puVar9;
    }
    puVar9 = puVar2;
    if (0 < param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar11 = (long)param_10;
      iVar39 = *param_9;
      pdVar23 = pdVar36 + lVar1;
      uVar26 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      pdVar17 = pdVar16;
      pbVar15 = param_1;
      do {
        *(undefined8 *)((long)pdVar17 + uVar26) = 0;
        *(undefined8 *)((long)pdVar36 + uVar26) = 0;
        if (iVar39 < 1) {
LAB_00228958:
          if (pdVar25 != (double *)0x0) {
LAB_002284cc:
            *(undefined8 *)((long)pdVar25 + uVar26) = 0;
            pdVar25 = pdVar25 + 1;
          }
        }
        else {
          if (pdVar25 != (double *)0x0) {
            dVar35 = 0.0;
            lVar10 = 0;
            iVar7 = 0;
            dVar37 = 0.0;
            do {
              iVar7 = iVar7 + param_10;
              dVar34 = (double)pbVar15[lVar10];
              dVar33 = (double)pbVar15[lVar10];
              pdVar17[lVar10] = dVar34;
              dVar35 = dVar35 + dVar33 * dVar34;
              dVar37 = dVar37 + dVar33;
              *(double *)(puVar9 + lVar10 * 8) = dVar34;
              pdVar36[lVar10] = dVar37;
              pdVar25[lVar10] = dVar35;
              lVar10 = lVar10 + lVar11;
            } while (iVar7 < iVar39);
            if (param_10 == iVar39) goto LAB_00228954;
            goto LAB_002284cc;
          }
          dVar35 = 0.0;
          iVar7 = 0;
          lVar10 = 0;
          do {
            iVar7 = iVar7 + param_10;
            dVar37 = (double)pbVar15[lVar10];
            dVar35 = dVar35 + (double)pbVar15[lVar10];
            pdVar17[lVar10] = dVar37;
            *(double *)(puVar9 + lVar10 * 8) = dVar37;
            pdVar36[lVar10] = dVar35;
            lVar10 = lVar10 + lVar11;
          } while (iVar7 < iVar39);
          if (param_10 == iVar39) {
LAB_00228954:
            *(undefined8 *)(puVar9 + lVar11 * 8) = 0;
            goto LAB_00228958;
          }
        }
        pdVar36 = pdVar36 + 1;
        pbVar15 = pbVar15 + 1;
        pdVar17 = pdVar17 + 1;
        puVar9 = puVar9 + 8;
      } while (pdVar36 != pdVar23);
      param_1 = param_1 + lVar1;
      pdVar16 = pdVar16 + lVar1;
      puVar9 = puVar2 + lVar1 * 8;
      pdVar36 = pdVar23;
    }
    iVar39 = param_9[1];
    if (1 < iVar39) {
      lVar21 = (long)param_10;
      lVar11 = (ulong)(param_10 - 1) + 1;
      lVar10 = (lVar21 + iVar31) * -8;
      lVar40 = NEON_shl(lVar21,4);
      lVar38 = NEON_shl(lVar11,3);
      iVar7 = 1;
      lVar1 = lVar21 * -0x18 + (long)(param_10 - iVar28) * 8;
      lVar20 = lVar21 * 8;
      uVar8 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      uVar26 = -(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-iVar31 << 3;
      do {
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar31 - param_10) << 3));
        if (pdVar25 != (double *)0x0) {
          pdVar25 = (double *)
                    ((long)pdVar25 +
                    (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar22 - param_10) << 3));
        }
        param_1 = param_1 + (param_2 - param_10);
        pdVar16 = (double *)
                  ((long)pdVar16 +
                  (-(ulong)((uint)(iVar28 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar28 - param_10) << 3));
        puVar9 = puVar9 + uVar8;
        if (0 < param_10) {
          pbVar15 = param_1 + lVar21;
          iVar41 = *param_9;
          pdVar24 = (double *)
                    ((long)pdVar16 +
                    (-(ulong)((uint)-iVar28 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)-iVar28 << 3));
          puVar18 = puVar9 + lVar20;
          iVar13 = iVar41 - param_10;
          pbVar4 = param_1 + lVar11;
          puVar14 = puVar9;
          pdVar17 = pdVar36;
          pdVar23 = pdVar16;
          do {
            bVar5 = *param_1;
            *(undefined8 *)((long)pdVar17 + uVar8) = 0;
            dVar35 = (double)bVar5;
            dVar37 = dVar35 * (double)bVar5;
            iVar29 = param_10;
            if (pdVar25 == (double *)0x0) {
              *(double *)((long)pdVar23 + uVar8) = *pdVar24;
              *pdVar17 = dVar35 + *(double *)((long)pdVar17 + uVar26);
              *pdVar23 = dVar35 + *pdVar24 + *(double *)(puVar14 + lVar20);
              if (iVar13 <= param_10) goto LAB_00228960;
              lVar12 = 0;
              lVar32 = lVar40;
              dVar33 = dVar35;
              do {
                lVar30 = lVar32;
                dVar34 = *(double *)(puVar18 + lVar12 * 8);
                iVar29 = iVar29 + param_10;
                lVar27 = lVar21 * 2 + lVar12;
                pdVar19 = (double *)(puVar14 + lVar30);
                *(double *)(puVar14 + lVar12 * 8) = dVar34 + dVar33;
                dVar33 = (double)pbVar15[lVar12];
                dVar35 = dVar35 + dVar33;
                dVar37 = dVar37 + (double)pbVar15[lVar12] * dVar33;
                pdVar17[lVar21 + lVar12] = *(double *)((long)pdVar17 + lVar30 + lVar10) + dVar35;
                pdVar23[lVar21 + lVar12] =
                     dVar33 + *(double *)(puVar14 + lVar30) +
                     *(double *)((long)pdVar23 + lVar30 + lVar1) + dVar34;
                lVar12 = lVar27 - lVar21;
                lVar32 = lVar30 + lVar20;
              } while (iVar29 < iVar13);
            }
            else {
              *(undefined8 *)((long)pdVar25 + uVar8) = 0;
              *(double *)((long)pdVar23 + uVar8) = *pdVar24;
              *pdVar17 = dVar35 + *(double *)((long)pdVar17 + uVar26);
              *pdVar25 = dVar37 + *(double *)
                                   ((long)pdVar25 +
                                   (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar22 << 3));
              *pdVar23 = dVar35 + *pdVar24 + *(double *)(puVar14 + lVar20);
              if (param_10 < iVar13) {
                lVar32 = 0;
                lVar12 = lVar40;
                dVar33 = dVar35;
                do {
                  lVar30 = lVar12;
                  dVar34 = *(double *)(puVar18 + lVar32 * 8);
                  iVar29 = iVar29 + param_10;
                  lVar27 = lVar32 + lVar21 * 2;
                  pdVar19 = (double *)(puVar14 + lVar30);
                  *(double *)(puVar14 + lVar32 * 8) = dVar34 + dVar33;
                  dVar33 = (double)pbVar15[lVar32];
                  dVar35 = dVar35 + dVar33;
                  dVar37 = dVar37 + (double)pbVar15[lVar32] * dVar33;
                  pdVar17[lVar21 + lVar32] = *(double *)((long)pdVar17 + lVar30 + lVar10) + dVar35;
                  pdVar25[lVar21 + lVar32] =
                       *(double *)((long)pdVar25 + lVar30 + (lVar21 + iVar22) * -8) + dVar37;
                  pdVar23[lVar21 + lVar32] =
                       dVar33 + *(double *)(puVar14 + lVar30) +
                       *(double *)((long)pdVar23 + lVar30 + lVar1) + dVar34;
                  lVar32 = lVar27 - lVar21;
                  lVar12 = lVar30 + lVar20;
                } while (iVar29 < iVar13);
              }
              else {
LAB_00228960:
                pdVar19 = (double *)(puVar14 + lVar20);
                lVar27 = lVar21;
                lVar30 = lVar20;
                dVar33 = dVar35;
              }
            }
            if (param_10 < iVar41) {
              dVar34 = *pdVar19;
              *(double *)(puVar14 + (long)(iVar29 - param_10) * 8) = dVar34 + dVar33;
              bVar5 = param_1[lVar27];
              dVar33 = (double)bVar5;
              *(double *)((long)pdVar17 + lVar30) = pdVar17[iVar29 - iVar31] + dVar35 + dVar33;
              if (pdVar25 != (double *)0x0) {
                *(double *)((long)pdVar25 + lVar30) =
                     pdVar25[iVar29 - iVar22] + dVar37 + (double)bVar5 * dVar33;
              }
              *(double *)((long)pdVar23 + lVar30) =
                   dVar33 + dVar34 + pdVar23[(iVar29 - iVar28) - param_10];
              *pdVar19 = dVar33;
            }
            param_1 = param_1 + 1;
            if (pdVar25 != (double *)0x0) {
              pdVar25 = pdVar25 + 1;
            }
            pdVar17 = pdVar17 + 1;
            pdVar23 = pdVar23 + 1;
            puVar14 = puVar14 + 8;
            pdVar24 = pdVar24 + 1;
            puVar18 = puVar18 + 8;
            pbVar15 = pbVar15 + 1;
          } while (param_1 != pbVar4);
          pdVar36 = (double *)((long)pdVar36 + lVar38);
          puVar9 = puVar9 + lVar38;
          pdVar16 = (double *)((long)pdVar16 + lVar38);
          param_1 = pbVar4;
        }
        iVar7 = iVar7 + 1;
      } while (iVar7 < iVar39);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar25 = (double *)((long)param_5 + (long)(param_10 + iVar22) * 8);
    if (param_7 != (void *)0x0) goto LAB_00228278;
    if (pdVar25 == (double *)0x0) goto LAB_002282b8;
LAB_00228980:
    iVar28 = param_9[1];
    if (0 < iVar28) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar26 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      iVar39 = 0;
      do {
        if (0 < param_10) {
          pdVar17 = pdVar36 + lVar1;
          iVar7 = *param_9;
          pdVar16 = pdVar25;
          pbVar15 = param_1;
          do {
            *(undefined8 *)((long)pdVar36 + uVar26) = 0;
            *(undefined8 *)((long)pdVar16 + uVar26) = 0;
            if (0 < iVar7) {
              dVar35 = 0.0;
              lVar11 = 0;
              iVar13 = 0;
              dVar37 = 0.0;
              do {
                iVar13 = iVar13 + param_10;
                dVar33 = *(double *)
                          ((long)pdVar16 +
                          lVar11 * 8 +
                          (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffff800000000 |
                          (ulong)(uint)-iVar22 << 3));
                dVar34 = (double)pbVar15[lVar11];
                dVar37 = dVar37 + dVar34;
                dVar35 = dVar35 + (double)pbVar15[lVar11] * dVar34;
                pdVar36[lVar11] =
                     *(double *)
                      ((long)pdVar36 +
                      lVar11 * 8 +
                      (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffff800000000 |
                      (ulong)(uint)-iVar31 << 3)) + dVar37;
                pdVar16[lVar11] = dVar35 + dVar33;
                lVar11 = lVar11 + param_10;
              } while (iVar13 < iVar7);
            }
            pdVar36 = pdVar36 + 1;
            pbVar15 = pbVar15 + 1;
            pdVar16 = pdVar16 + 1;
          } while (pdVar36 != pdVar17);
          param_1 = param_1 + lVar1;
          pdVar25 = pdVar25 + lVar1;
          pdVar36 = pdVar17;
        }
        iVar39 = iVar39 + 1;
        param_1 = param_1 + (param_2 - param_10);
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar31 - param_10) << 3));
        pdVar25 = (double *)
                  ((long)pdVar25 +
                  (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar22 - param_10) << 3));
      } while (iVar39 != iVar28);
    }
  }
  return;
}


==================================================================

### FUNC 00228ac4 (52 bytes) name=FUN_00228ac4

void FUN_00228ac4(void)

{
  FUN_002281b0();
  return;
}


==================================================================

### FUNC 00228af8 (2380 bytes) name=FUN_00228af8

void FUN_00228af8(ushort *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  int iVar4;
  ushort uVar5;
  bool bVar6;
  int iVar7;
  double *pdVar8;
  ulong uVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  undefined1 *puVar14;
  ushort *puVar15;
  ushort *puVar16;
  undefined1 *puVar17;
  double *pdVar18;
  double *pdVar19;
  long lVar20;
  long lVar21;
  double *pdVar22;
  double *pdVar23;
  int iVar24;
  int iVar25;
  double *pdVar26;
  ulong uVar27;
  long lVar28;
  int iVar29;
  long lVar30;
  long lVar31;
  int iVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double *pdVar36;
  double dVar37;
  long lVar38;
  double dVar39;
  int iVar40;
  long lVar41;
  long lVar42;
  int iVar43;
  undefined1 auStack_440 [1088];
  
  iVar32 = *param_9;
  iVar4 = (int)(param_6 >> 3);
  iVar29 = (int)(param_4 >> 3);
  *param_9 = param_10 * iVar32;
  iVar24 = (int)(param_8 >> 3);
  uVar3 = param_10 + param_10 * iVar32;
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3);
  pdVar36 = (double *)((long)param_3 + (long)(param_10 + iVar29) * 8);
  iVar32 = (int)(param_2 >> 1);
  if (param_5 == (void *)0x0) {
    pdVar26 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_00228c10;
LAB_00228bc8:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar8 = (double *)((long)param_7 + (long)(param_10 + iVar24) * 8);
    bVar6 = pdVar8 == (double *)0x0;
    if (pdVar26 == (double *)0x0) {
      if (bVar6) {
LAB_00228c10:
        iVar4 = param_9[1];
        if (iVar4 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar24 = 0;
        do {
          if (0 < param_10) {
            pdVar26 = pdVar36 + lVar1;
            iVar40 = *param_9;
            puVar16 = param_1;
            do {
              *(undefined8 *)
               ((long)pdVar36 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3
               )) = 0;
              if (0 < iVar40) {
                dVar35 = 0.0;
                iVar7 = 0;
                pdVar8 = pdVar36;
                puVar15 = puVar16;
                do {
                  uVar5 = *puVar15;
                  iVar7 = iVar7 + param_10;
                  puVar15 = puVar15 + param_10;
                  dVar35 = dVar35 + (double)uVar5;
                  *pdVar8 = pdVar8[-iVar29] + dVar35;
                  pdVar8 = pdVar8 + param_10;
                } while (iVar7 < iVar40);
              }
              pdVar36 = pdVar36 + 1;
              puVar16 = puVar16 + 1;
            } while (pdVar36 != pdVar26);
            param_1 = param_1 + lVar1;
            pdVar36 = pdVar26;
          }
          iVar24 = iVar24 + 1;
          param_1 = (ushort *)
                    ((long)param_1 +
                    (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                    (ulong)(uint)(iVar32 - param_10) << 1));
          pdVar36 = (double *)
                    ((long)pdVar36 +
                    (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar29 - param_10) << 3));
        } while (iVar24 != iVar4);
        return;
      }
    }
    else if (bVar6) goto LAB_002292fc;
    puVar2 = auStack_440;
    uVar27 = (ulong)(param_10 + *param_9);
    if (0x88 < uVar27) {
      uVar9 = uVar27 << 3;
      if (0xfe0000000000000 < uVar27) {
        uVar9 = 0xffffffffffffffff;
      }
      puVar10 = operator_new__(uVar9);
      bVar6 = puVar10 != puVar2;
      puVar2 = puVar10;
    }
    puVar10 = puVar2;
    if (0 < param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar20 = (long)param_10;
      iVar40 = *param_9;
      pdVar22 = pdVar36 + lVar1;
      lVar21 = lVar20 * 8;
      uVar27 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      pdVar19 = pdVar8;
      puVar16 = param_1;
      do {
        *(undefined8 *)((long)pdVar19 + uVar27) = 0;
        *(undefined8 *)((long)pdVar36 + uVar27) = 0;
        if (iVar40 < 1) {
LAB_002292d4:
          if (pdVar26 != (double *)0x0) {
LAB_00228e3c:
            *(undefined8 *)((long)pdVar26 + uVar27) = 0;
            pdVar26 = pdVar26 + 1;
          }
        }
        else {
          if (pdVar26 != (double *)0x0) {
            dVar35 = 0.0;
            lVar11 = 0;
            iVar7 = 0;
            dVar37 = 0.0;
            puVar15 = puVar16;
            do {
              uVar5 = *puVar15;
              iVar7 = iVar7 + param_10;
              puVar15 = puVar15 + lVar20;
              dVar34 = (double)uVar5;
              dVar33 = (double)uVar5;
              *(double *)((long)pdVar19 + lVar11) = dVar34;
              dVar35 = dVar35 + dVar33 * dVar34;
              dVar37 = dVar37 + dVar33;
              *(double *)(puVar10 + lVar11) = dVar34;
              *(double *)((long)pdVar36 + lVar11) = dVar37;
              *(double *)((long)pdVar26 + lVar11) = dVar35;
              lVar11 = lVar11 + lVar21;
            } while (iVar7 < iVar40);
            if (param_10 == iVar40) goto LAB_002292d0;
            goto LAB_00228e3c;
          }
          dVar35 = 0.0;
          iVar7 = 0;
          lVar11 = 0;
          puVar15 = puVar16;
          do {
            uVar5 = *puVar15;
            iVar7 = iVar7 + param_10;
            puVar15 = puVar15 + lVar20;
            dVar37 = (double)uVar5;
            dVar35 = dVar35 + (double)uVar5;
            *(double *)((long)pdVar19 + lVar11) = dVar37;
            *(double *)(puVar10 + lVar11) = dVar37;
            *(double *)((long)pdVar36 + lVar11) = dVar35;
            lVar11 = lVar11 + lVar21;
          } while (iVar7 < iVar40);
          if (param_10 == iVar40) {
LAB_002292d0:
            *(undefined8 *)(puVar10 + lVar21) = 0;
            goto LAB_002292d4;
          }
        }
        pdVar36 = pdVar36 + 1;
        puVar16 = puVar16 + 1;
        pdVar19 = pdVar19 + 1;
        puVar10 = puVar10 + 8;
      } while (pdVar36 != pdVar22);
      param_1 = param_1 + lVar1;
      pdVar8 = pdVar8 + lVar1;
      puVar10 = puVar2 + lVar1 * 8;
      pdVar36 = pdVar22;
    }
    iVar40 = param_9[1];
    if (1 < iVar40) {
      lVar11 = (long)param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar41 = NEON_shl(lVar1,1);
      lVar42 = NEON_shl(lVar11,4);
      lVar21 = lVar11 * 8;
      lVar20 = (lVar11 + iVar29) * -8;
      lVar38 = NEON_shl(lVar1,3);
      uVar9 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      uVar27 = -(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-iVar29 << 3;
      iVar7 = 1;
      lVar1 = lVar11 * -0x18 + (long)(param_10 - iVar24) * 8;
      do {
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar29 - param_10) << 3));
        if (pdVar26 != (double *)0x0) {
          pdVar26 = (double *)
                    ((long)pdVar26 +
                    (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar4 - param_10) << 3));
        }
        param_1 = (ushort *)
                  ((long)param_1 +
                  (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                  (ulong)(uint)(iVar32 - param_10) << 1));
        pdVar8 = (double *)
                 ((long)pdVar8 +
                 (-(ulong)((uint)(iVar24 - param_10) >> 0x1f) & 0xfffffff800000000 |
                 (ulong)(uint)(iVar24 - param_10) << 3));
        puVar10 = puVar10 + uVar9;
        if (0 < param_10) {
          puVar16 = param_1 + lVar11;
          iVar43 = *param_9;
          pdVar23 = (double *)
                    ((long)pdVar8 +
                    (-(ulong)((uint)-iVar24 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)-iVar24 << 3));
          puVar17 = puVar10 + lVar21;
          iVar13 = iVar43 - param_10;
          puVar15 = (ushort *)((long)param_1 + lVar41);
          puVar14 = puVar10;
          pdVar19 = pdVar36;
          pdVar22 = pdVar8;
          do {
            uVar5 = *param_1;
            *(undefined8 *)((long)pdVar19 + uVar9) = 0;
            dVar37 = (double)uVar5;
            dVar35 = dVar37 * (double)uVar5;
            iVar25 = param_10;
            if (pdVar26 == (double *)0x0) {
              *(double *)((long)pdVar22 + uVar9) = *pdVar23;
              *pdVar19 = dVar37 + *(double *)((long)pdVar19 + uVar27);
              *pdVar22 = dVar37 + *pdVar23 + *(double *)(puVar14 + lVar21);
              if (iVar13 <= param_10) goto LAB_002292dc;
              lVar31 = 0;
              lVar30 = lVar42;
              dVar33 = dVar37;
              do {
                lVar28 = lVar30;
                uVar5 = puVar16[lVar31];
                iVar25 = iVar25 + param_10;
                dVar39 = *(double *)(puVar17 + lVar31 * 8);
                lVar12 = lVar11 * 2 + lVar31;
                pdVar18 = (double *)(puVar14 + lVar28);
                dVar34 = dVar39 + dVar33;
                dVar33 = (double)uVar5;
                *(double *)(puVar14 + lVar31 * 8) = dVar34;
                dVar37 = dVar37 + dVar33;
                dVar35 = dVar35 + (double)uVar5 * dVar33;
                pdVar19[lVar11 + lVar31] = *(double *)((long)pdVar19 + lVar28 + lVar20) + dVar37;
                pdVar22[lVar11 + lVar31] =
                     dVar33 + *(double *)(puVar14 + lVar28) +
                     *(double *)((long)pdVar22 + lVar28 + lVar1) + dVar39;
                lVar31 = lVar12 - lVar11;
                lVar30 = lVar28 + lVar21;
              } while (iVar25 < iVar13);
            }
            else {
              *(undefined8 *)((long)pdVar26 + uVar9) = 0;
              *(double *)((long)pdVar22 + uVar9) = *pdVar23;
              *pdVar19 = dVar37 + *(double *)((long)pdVar19 + uVar27);
              *pdVar26 = dVar35 + *(double *)
                                   ((long)pdVar26 +
                                   (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
              *pdVar22 = dVar37 + *pdVar23 + *(double *)(puVar14 + lVar21);
              if (param_10 < iVar13) {
                lVar30 = 0;
                lVar31 = lVar42;
                dVar33 = dVar37;
                do {
                  lVar28 = lVar31;
                  uVar5 = puVar16[lVar30];
                  iVar25 = iVar25 + param_10;
                  dVar39 = *(double *)(puVar17 + lVar30 * 8);
                  lVar12 = lVar30 + lVar11 * 2;
                  pdVar18 = (double *)(puVar14 + lVar28);
                  dVar34 = dVar39 + dVar33;
                  dVar33 = (double)uVar5;
                  *(double *)(puVar14 + lVar30 * 8) = dVar34;
                  dVar37 = dVar37 + dVar33;
                  dVar35 = dVar35 + (double)uVar5 * dVar33;
                  pdVar19[lVar11 + lVar30] = *(double *)((long)pdVar19 + lVar28 + lVar20) + dVar37;
                  pdVar26[lVar11 + lVar30] =
                       *(double *)((long)pdVar26 + lVar28 + (lVar11 + iVar4) * -8) + dVar35;
                  pdVar22[lVar11 + lVar30] =
                       dVar33 + *(double *)(puVar14 + lVar28) +
                       *(double *)((long)pdVar22 + lVar28 + lVar1) + dVar39;
                  lVar30 = lVar12 - lVar11;
                  lVar31 = lVar28 + lVar21;
                } while (iVar25 < iVar13);
              }
              else {
LAB_002292dc:
                pdVar18 = (double *)(puVar14 + lVar21);
                lVar12 = lVar11;
                lVar28 = lVar21;
                dVar33 = dVar37;
              }
            }
            if (param_10 < iVar43) {
              uVar5 = param_1[lVar12];
              dVar34 = *pdVar18;
              dVar39 = (double)uVar5;
              *(double *)(puVar14 + (long)(iVar25 - param_10) * 8) = dVar34 + dVar33;
              *(double *)((long)pdVar19 + lVar28) = pdVar19[iVar25 - iVar29] + dVar37 + dVar39;
              if (pdVar26 != (double *)0x0) {
                *(double *)((long)pdVar26 + lVar28) =
                     pdVar26[iVar25 - iVar4] + dVar35 + (double)uVar5 * dVar39;
              }
              *(double *)((long)pdVar22 + lVar28) =
                   dVar39 + dVar34 + pdVar22[(iVar25 - iVar24) - param_10];
              *pdVar18 = dVar39;
            }
            param_1 = param_1 + 1;
            if (pdVar26 != (double *)0x0) {
              pdVar26 = pdVar26 + 1;
            }
            pdVar19 = pdVar19 + 1;
            pdVar22 = pdVar22 + 1;
            puVar14 = puVar14 + 8;
            pdVar23 = pdVar23 + 1;
            puVar17 = puVar17 + 8;
            puVar16 = puVar16 + 1;
          } while (param_1 != puVar15);
          pdVar36 = (double *)((long)pdVar36 + lVar38);
          puVar10 = puVar10 + lVar38;
          pdVar8 = (double *)((long)pdVar8 + lVar38);
          param_1 = puVar15;
        }
        iVar7 = iVar7 + 1;
      } while (iVar7 < iVar40);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar26 = (double *)((long)param_5 + (long)(param_10 + iVar4) * 8);
    if (param_7 != (void *)0x0) goto LAB_00228bc8;
    if (pdVar26 == (double *)0x0) goto LAB_00228c10;
LAB_002292fc:
    iVar24 = param_9[1];
    if (0 < iVar24) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar27 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      iVar40 = 0;
      do {
        if (0 < param_10) {
          pdVar19 = pdVar36 + lVar1;
          iVar7 = *param_9;
          pdVar8 = pdVar26;
          puVar16 = param_1;
          do {
            *(undefined8 *)((long)pdVar36 + uVar27) = 0;
            *(undefined8 *)((long)pdVar8 + uVar27) = 0;
            if (0 < iVar7) {
              dVar35 = 0.0;
              lVar20 = 0;
              iVar13 = 0;
              dVar37 = 0.0;
              puVar15 = puVar16;
              do {
                uVar5 = *puVar15;
                iVar13 = iVar13 + param_10;
                dVar33 = *(double *)
                          ((long)pdVar8 +
                          lVar20 + (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
                puVar15 = puVar15 + param_10;
                dVar34 = (double)uVar5;
                dVar37 = dVar37 + dVar34;
                dVar35 = dVar35 + (double)uVar5 * dVar34;
                *(double *)((long)pdVar36 + lVar20) =
                     *(double *)
                      ((long)pdVar36 +
                      lVar20 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 |
                               (ulong)(uint)-iVar29 << 3)) + dVar37;
                *(double *)((long)pdVar8 + lVar20) = dVar35 + dVar33;
                lVar20 = lVar20 + (long)param_10 * 8;
              } while (iVar13 < iVar7);
            }
            pdVar36 = pdVar36 + 1;
            puVar16 = puVar16 + 1;
            pdVar8 = pdVar8 + 1;
          } while (pdVar36 != pdVar19);
          param_1 = param_1 + lVar1;
          pdVar26 = pdVar26 + lVar1;
          pdVar36 = pdVar19;
        }
        iVar40 = iVar40 + 1;
        param_1 = (ushort *)
                  ((long)param_1 +
                  (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                  (ulong)(uint)(iVar32 - param_10) << 1));
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar29 - param_10) << 3));
        pdVar26 = (double *)
                  ((long)pdVar26 +
                  (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar4 - param_10) << 3));
      } while (iVar40 != iVar24);
    }
  }
  return;
}


==================================================================

### FUNC 00229444 (52 bytes) name=FUN_00229444

void FUN_00229444(void)

{
  FUN_00228af8();
  return;
}


==================================================================

### FUNC 00229478 (2348 bytes) name=FUN_00229478

void FUN_00229478(short *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  int iVar4;
  short sVar5;
  bool bVar6;
  int iVar7;
  double *pdVar8;
  ulong uVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  undefined1 *puVar14;
  short *psVar15;
  short *psVar16;
  undefined1 *puVar17;
  double *pdVar18;
  double *pdVar19;
  long lVar20;
  long lVar21;
  double *pdVar22;
  double *pdVar23;
  int iVar24;
  int iVar25;
  double *pdVar26;
  ulong uVar27;
  long lVar28;
  int iVar29;
  long lVar30;
  long lVar31;
  int iVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double *pdVar37;
  long lVar38;
  double dVar39;
  int iVar40;
  long lVar41;
  long lVar42;
  int iVar43;
  undefined1 auStack_440 [1088];
  
  iVar32 = *param_9;
  iVar4 = (int)(param_6 >> 3);
  iVar29 = (int)(param_4 >> 3);
  *param_9 = param_10 * iVar32;
  iVar24 = (int)(param_8 >> 3);
  uVar3 = param_10 + param_10 * iVar32;
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3);
  pdVar37 = (double *)((long)param_3 + (long)(param_10 + iVar29) * 8);
  iVar32 = (int)(param_2 >> 1);
  if (param_5 == (void *)0x0) {
    pdVar26 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_00229590;
LAB_00229548:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar8 = (double *)((long)param_7 + (long)(param_10 + iVar24) * 8);
    bVar6 = pdVar8 == (double *)0x0;
    if (pdVar26 == (double *)0x0) {
      if (bVar6) {
LAB_00229590:
        iVar4 = param_9[1];
        if (iVar4 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar24 = 0;
        do {
          if (0 < param_10) {
            pdVar26 = pdVar37 + lVar1;
            iVar40 = *param_9;
            psVar16 = param_1;
            do {
              *(undefined8 *)
               ((long)pdVar37 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3
               )) = 0;
              if (0 < iVar40) {
                dVar35 = 0.0;
                iVar7 = 0;
                pdVar8 = pdVar37;
                psVar15 = psVar16;
                do {
                  sVar5 = *psVar15;
                  iVar7 = iVar7 + param_10;
                  psVar15 = psVar15 + param_10;
                  dVar35 = dVar35 + (double)(int)sVar5;
                  *pdVar8 = pdVar8[-iVar29] + dVar35;
                  pdVar8 = pdVar8 + param_10;
                } while (iVar7 < iVar40);
              }
              pdVar37 = pdVar37 + 1;
              psVar16 = psVar16 + 1;
            } while (pdVar37 != pdVar26);
            param_1 = param_1 + lVar1;
            pdVar37 = pdVar26;
          }
          iVar24 = iVar24 + 1;
          param_1 = (short *)((long)param_1 +
                             (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                             (ulong)(uint)(iVar32 - param_10) << 1));
          pdVar37 = (double *)
                    ((long)pdVar37 +
                    (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar29 - param_10) << 3));
        } while (iVar24 != iVar4);
        return;
      }
    }
    else if (bVar6) goto LAB_00229c60;
    puVar2 = auStack_440;
    uVar27 = (ulong)(param_10 + *param_9);
    if (0x88 < uVar27) {
      uVar9 = uVar27 << 3;
      if (0xfe0000000000000 < uVar27) {
        uVar9 = 0xffffffffffffffff;
      }
      puVar10 = operator_new__(uVar9);
      bVar6 = puVar10 != puVar2;
      puVar2 = puVar10;
    }
    puVar10 = puVar2;
    if (0 < param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar20 = (long)param_10;
      iVar40 = *param_9;
      pdVar22 = pdVar37 + lVar1;
      lVar21 = lVar20 * 8;
      uVar27 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      pdVar19 = pdVar8;
      psVar16 = param_1;
      do {
        *(undefined8 *)((long)pdVar19 + uVar27) = 0;
        *(undefined8 *)((long)pdVar37 + uVar27) = 0;
        if (iVar40 < 1) {
LAB_00229c38:
          if (pdVar26 != (double *)0x0) {
LAB_002297b8:
            *(undefined8 *)((long)pdVar26 + uVar27) = 0;
            pdVar26 = pdVar26 + 1;
          }
        }
        else {
          dVar35 = 0.0;
          if (pdVar26 != (double *)0x0) {
            dVar36 = 0.0;
            lVar11 = 0;
            iVar7 = 0;
            psVar15 = psVar16;
            do {
              sVar5 = *psVar15;
              iVar7 = iVar7 + param_10;
              psVar15 = psVar15 + lVar20;
              dVar33 = (double)(int)sVar5;
              dVar35 = dVar35 + dVar33 * dVar33;
              dVar36 = dVar36 + dVar33;
              *(double *)((long)pdVar19 + lVar11) = dVar33;
              *(double *)(puVar10 + lVar11) = dVar33;
              *(double *)((long)pdVar37 + lVar11) = dVar36;
              *(double *)((long)pdVar26 + lVar11) = dVar35;
              lVar11 = lVar11 + lVar21;
            } while (iVar7 < iVar40);
            if (param_10 == iVar40) goto LAB_00229c34;
            goto LAB_002297b8;
          }
          iVar7 = 0;
          lVar11 = 0;
          psVar15 = psVar16;
          do {
            sVar5 = *psVar15;
            iVar7 = iVar7 + param_10;
            psVar15 = psVar15 + lVar20;
            dVar36 = (double)(int)sVar5;
            dVar35 = dVar35 + dVar36;
            *(double *)((long)pdVar19 + lVar11) = dVar36;
            *(double *)(puVar10 + lVar11) = dVar36;
            *(double *)((long)pdVar37 + lVar11) = dVar35;
            lVar11 = lVar11 + lVar21;
          } while (iVar7 < iVar40);
          if (param_10 == iVar40) {
LAB_00229c34:
            *(undefined8 *)(puVar10 + lVar21) = 0;
            goto LAB_00229c38;
          }
        }
        pdVar37 = pdVar37 + 1;
        psVar16 = psVar16 + 1;
        pdVar19 = pdVar19 + 1;
        puVar10 = puVar10 + 8;
      } while (pdVar37 != pdVar22);
      param_1 = param_1 + lVar1;
      pdVar8 = pdVar8 + lVar1;
      puVar10 = puVar2 + lVar1 * 8;
      pdVar37 = pdVar22;
    }
    iVar40 = param_9[1];
    if (1 < iVar40) {
      lVar11 = (long)param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar41 = NEON_shl(lVar1,1);
      lVar42 = NEON_shl(lVar11,4);
      lVar21 = lVar11 * 8;
      lVar20 = (lVar11 + iVar29) * -8;
      lVar38 = NEON_shl(lVar1,3);
      uVar9 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      uVar27 = -(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-iVar29 << 3;
      iVar7 = 1;
      lVar1 = lVar11 * -0x18 + (long)(param_10 - iVar24) * 8;
      do {
        pdVar37 = (double *)
                  ((long)pdVar37 +
                  (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar29 - param_10) << 3));
        if (pdVar26 != (double *)0x0) {
          pdVar26 = (double *)
                    ((long)pdVar26 +
                    (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar4 - param_10) << 3));
        }
        param_1 = (short *)((long)param_1 +
                           (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                           (ulong)(uint)(iVar32 - param_10) << 1));
        pdVar8 = (double *)
                 ((long)pdVar8 +
                 (-(ulong)((uint)(iVar24 - param_10) >> 0x1f) & 0xfffffff800000000 |
                 (ulong)(uint)(iVar24 - param_10) << 3));
        puVar10 = puVar10 + uVar9;
        if (0 < param_10) {
          psVar16 = param_1 + lVar11;
          iVar43 = *param_9;
          pdVar23 = (double *)
                    ((long)pdVar8 +
                    (-(ulong)((uint)-iVar24 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)-iVar24 << 3));
          puVar17 = puVar10 + lVar21;
          iVar13 = iVar43 - param_10;
          psVar15 = (short *)((long)param_1 + lVar41);
          puVar14 = puVar10;
          pdVar19 = pdVar37;
          pdVar22 = pdVar8;
          do {
            sVar5 = *param_1;
            *(undefined8 *)((long)pdVar19 + uVar9) = 0;
            dVar36 = (double)(int)sVar5;
            dVar35 = dVar36 * dVar36;
            iVar25 = param_10;
            if (pdVar26 == (double *)0x0) {
              *(double *)((long)pdVar22 + uVar9) = *pdVar23;
              *pdVar19 = dVar36 + *(double *)((long)pdVar19 + uVar27);
              *pdVar22 = dVar36 + *pdVar23 + *(double *)(puVar14 + lVar21);
              if (iVar13 <= param_10) goto LAB_00229c40;
              lVar31 = 0;
              lVar30 = lVar42;
              dVar33 = dVar36;
              do {
                lVar28 = lVar30;
                iVar25 = iVar25 + param_10;
                dVar39 = *(double *)(puVar17 + lVar31 * 8);
                lVar12 = lVar11 * 2 + lVar31;
                pdVar18 = (double *)(puVar14 + lVar28);
                dVar34 = dVar39 + dVar33;
                dVar33 = (double)(int)psVar16[lVar31];
                *(double *)(puVar14 + lVar31 * 8) = dVar34;
                dVar36 = dVar36 + dVar33;
                dVar35 = dVar35 + dVar33 * dVar33;
                pdVar19[lVar11 + lVar31] = *(double *)((long)pdVar19 + lVar28 + lVar20) + dVar36;
                pdVar22[lVar11 + lVar31] =
                     dVar33 + *(double *)(puVar14 + lVar28) +
                     *(double *)((long)pdVar22 + lVar28 + lVar1) + dVar39;
                lVar31 = lVar12 - lVar11;
                lVar30 = lVar28 + lVar21;
              } while (iVar25 < iVar13);
            }
            else {
              *(undefined8 *)((long)pdVar26 + uVar9) = 0;
              *(double *)((long)pdVar22 + uVar9) = *pdVar23;
              *pdVar19 = dVar36 + *(double *)((long)pdVar19 + uVar27);
              *pdVar26 = dVar35 + *(double *)
                                   ((long)pdVar26 +
                                   (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
              *pdVar22 = dVar36 + *pdVar23 + *(double *)(puVar14 + lVar21);
              if (param_10 < iVar13) {
                lVar30 = 0;
                lVar31 = lVar42;
                dVar33 = dVar36;
                do {
                  lVar28 = lVar31;
                  iVar25 = iVar25 + param_10;
                  dVar39 = *(double *)(puVar17 + lVar30 * 8);
                  lVar12 = lVar30 + lVar11 * 2;
                  pdVar18 = (double *)(puVar14 + lVar28);
                  dVar34 = dVar39 + dVar33;
                  dVar33 = (double)(int)psVar16[lVar30];
                  *(double *)(puVar14 + lVar30 * 8) = dVar34;
                  dVar36 = dVar36 + dVar33;
                  dVar35 = dVar35 + dVar33 * dVar33;
                  pdVar19[lVar11 + lVar30] = *(double *)((long)pdVar19 + lVar28 + lVar20) + dVar36;
                  pdVar26[lVar11 + lVar30] =
                       *(double *)((long)pdVar26 + lVar28 + (lVar11 + iVar4) * -8) + dVar35;
                  pdVar22[lVar11 + lVar30] =
                       dVar33 + *(double *)(puVar14 + lVar28) +
                       *(double *)((long)pdVar22 + lVar28 + lVar1) + dVar39;
                  lVar30 = lVar12 - lVar11;
                  lVar31 = lVar28 + lVar21;
                } while (iVar25 < iVar13);
              }
              else {
LAB_00229c40:
                pdVar18 = (double *)(puVar14 + lVar21);
                lVar12 = lVar11;
                lVar28 = lVar21;
                dVar33 = dVar36;
              }
            }
            if (param_10 < iVar43) {
              dVar39 = *pdVar18;
              dVar34 = (double)(int)param_1[lVar12];
              *(double *)(puVar14 + (long)(iVar25 - param_10) * 8) = dVar39 + dVar33;
              *(double *)((long)pdVar19 + lVar28) = pdVar19[iVar25 - iVar29] + dVar36 + dVar34;
              if (pdVar26 != (double *)0x0) {
                *(double *)((long)pdVar26 + lVar28) =
                     pdVar26[iVar25 - iVar4] + dVar35 + dVar34 * dVar34;
              }
              *(double *)((long)pdVar22 + lVar28) =
                   dVar34 + dVar39 + pdVar22[(iVar25 - iVar24) - param_10];
              *pdVar18 = dVar34;
            }
            param_1 = param_1 + 1;
            if (pdVar26 != (double *)0x0) {
              pdVar26 = pdVar26 + 1;
            }
            pdVar19 = pdVar19 + 1;
            pdVar22 = pdVar22 + 1;
            puVar14 = puVar14 + 8;
            pdVar23 = pdVar23 + 1;
            puVar17 = puVar17 + 8;
            psVar16 = psVar16 + 1;
          } while (param_1 != psVar15);
          pdVar37 = (double *)((long)pdVar37 + lVar38);
          puVar10 = puVar10 + lVar38;
          pdVar8 = (double *)((long)pdVar8 + lVar38);
          param_1 = psVar15;
        }
        iVar7 = iVar7 + 1;
      } while (iVar7 < iVar40);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar26 = (double *)((long)param_5 + (long)(param_10 + iVar4) * 8);
    if (param_7 != (void *)0x0) goto LAB_00229548;
    if (pdVar26 == (double *)0x0) goto LAB_00229590;
LAB_00229c60:
    iVar24 = param_9[1];
    if (0 < iVar24) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar27 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      iVar40 = 0;
      do {
        if (0 < param_10) {
          pdVar19 = pdVar37 + lVar1;
          iVar7 = *param_9;
          pdVar8 = pdVar26;
          psVar16 = param_1;
          do {
            *(undefined8 *)((long)pdVar37 + uVar27) = 0;
            *(undefined8 *)((long)pdVar8 + uVar27) = 0;
            if (0 < iVar7) {
              dVar35 = 0.0;
              lVar20 = 0;
              iVar13 = 0;
              dVar36 = 0.0;
              psVar15 = psVar16;
              do {
                sVar5 = *psVar15;
                iVar13 = iVar13 + param_10;
                dVar34 = *(double *)
                          ((long)pdVar8 +
                          lVar20 + (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
                psVar15 = psVar15 + param_10;
                dVar33 = (double)(int)sVar5;
                dVar35 = dVar35 + dVar33 * dVar33;
                dVar36 = dVar36 + dVar33;
                *(double *)((long)pdVar37 + lVar20) =
                     *(double *)
                      ((long)pdVar37 +
                      lVar20 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 |
                               (ulong)(uint)-iVar29 << 3)) + dVar36;
                *(double *)((long)pdVar8 + lVar20) = dVar35 + dVar34;
                lVar20 = lVar20 + (long)param_10 * 8;
              } while (iVar13 < iVar7);
            }
            pdVar37 = pdVar37 + 1;
            psVar16 = psVar16 + 1;
            pdVar8 = pdVar8 + 1;
          } while (pdVar37 != pdVar19);
          param_1 = param_1 + lVar1;
          pdVar26 = pdVar26 + lVar1;
          pdVar37 = pdVar19;
        }
        iVar40 = iVar40 + 1;
        param_1 = (short *)((long)param_1 +
                           (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffffe00000000 |
                           (ulong)(uint)(iVar32 - param_10) << 1));
        pdVar37 = (double *)
                  ((long)pdVar37 +
                  (-(ulong)((uint)(iVar29 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar29 - param_10) << 3));
        pdVar26 = (double *)
                  ((long)pdVar26 +
                  (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar4 - param_10) << 3));
      } while (iVar40 != iVar24);
    }
  }
  return;
}


==================================================================

### FUNC 00229da4 (52 bytes) name=FUN_00229da4

void FUN_00229da4(void)

{
  FUN_00229478();
  return;
}


==================================================================

### FUNC 00229dd8 (2328 bytes) name=FUN_00229dd8

void FUN_00229dd8(float *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,uint *param_9,uint param_10)

{
  long lVar1;
  undefined1 *puVar2;
  float *pfVar3;
  int iVar4;
  bool bVar5;
  int iVar6;
  long lVar7;
  ulong uVar8;
  undefined1 *puVar9;
  long lVar10;
  int iVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  double *pdVar15;
  float *pfVar16;
  double *pdVar17;
  long lVar18;
  undefined1 *puVar19;
  float *pfVar20;
  float *pfVar21;
  float *pfVar22;
  uint uVar23;
  long lVar24;
  undefined1 *puVar25;
  float *pfVar26;
  long lVar27;
  float *pfVar28;
  double *pdVar29;
  ulong uVar30;
  int iVar31;
  uint uVar32;
  long lVar33;
  int iVar34;
  float fVar35;
  float fVar36;
  double dVar37;
  float fVar38;
  float fVar39;
  double dVar40;
  double dVar41;
  float *pfVar42;
  long lVar43;
  uint uVar44;
  long lVar45;
  float fVar46;
  undefined1 auStack_420 [1056];
  
  iVar11 = (int)(param_6 >> 3);
  uVar44 = *param_9;
  iVar34 = (int)(param_4 >> 2);
  iVar31 = (int)(param_8 >> 2);
  *param_9 = param_10 * uVar44;
  uVar44 = param_10 + param_10 * uVar44;
  memset(param_3,0,-(ulong)(uVar44 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar44 << 2);
  pfVar42 = (float *)((long)param_3 + (long)(int)(param_10 + iVar34) * 4);
  iVar4 = (int)(param_2 >> 2);
  if (param_5 == (void *)0x0) {
    pdVar29 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_00229ee4;
LAB_00229ea4:
    memset(param_7,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(param_10 + *param_9) << 2);
    pfVar16 = (float *)((long)param_7 + (long)(int)(param_10 + iVar31) * 4);
    bVar5 = pfVar16 == (float *)0x0;
    if (pdVar29 == (double *)0x0) {
      if (bVar5) {
LAB_00229ee4:
        uVar44 = param_9[1];
        if ((int)uVar44 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        uVar23 = 0;
        do {
          if (0 < (int)param_10) {
            pfVar21 = pfVar42 + lVar1;
            uVar32 = *param_9;
            pfVar16 = param_1;
            do {
              *(undefined4 *)
               ((long)pfVar42 +
               (-(ulong)(-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_10 << 2)) = 0;
              if (0 < (int)uVar32) {
                fVar36 = 0.0;
                lVar7 = 0;
                iVar11 = 0;
                do {
                  iVar11 = iVar11 + param_10;
                  fVar36 = fVar36 + *(float *)((long)pfVar16 + lVar7);
                  *(float *)((long)pfVar42 + lVar7) =
                       *(float *)((long)pfVar42 +
                                 lVar7 + (-(ulong)((uint)-iVar34 >> 0x1f) & 0xfffffffc00000000 |
                                         (ulong)(uint)-iVar34 << 2)) + fVar36;
                  lVar7 = lVar7 + (long)(int)param_10 * 4;
                } while (iVar11 < (int)uVar32);
              }
              pfVar42 = pfVar42 + 1;
              pfVar16 = pfVar16 + 1;
            } while (pfVar42 != pfVar21);
            param_1 = param_1 + lVar1;
            pfVar42 = pfVar21;
          }
          uVar23 = uVar23 + 1;
          param_1 = (float *)((long)param_1 +
                             (-(ulong)(iVar4 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(iVar4 - param_10) << 2));
          pfVar42 = (float *)((long)pfVar42 +
                             (-(ulong)(iVar34 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(iVar34 - param_10) << 2));
        } while (uVar23 != uVar44);
        return;
      }
    }
    else if (bVar5) goto LAB_0022a59c;
    puVar2 = auStack_420;
    uVar30 = (ulong)(int)(param_10 + *param_9);
    if (0x108 < uVar30) {
      uVar8 = uVar30 << 2;
      if (0x1fc0000000000000 < uVar30) {
        uVar8 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar8);
      bVar5 = puVar9 != puVar2;
      puVar2 = puVar9;
    }
    puVar9 = puVar2;
    if (0 < (int)param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      iVar6 = -param_10;
      uVar30 = -(ulong)(param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_10 << 2;
      uVar44 = *param_9;
      pfVar28 = pfVar42 + lVar1;
      pfVar20 = pfVar16;
      pfVar21 = param_1;
      do {
        pfVar20[iVar6] = 0.0;
        pfVar42[iVar6] = 0.0;
        if ((int)uVar44 < 1) {
LAB_0022a574:
          if (pdVar29 != (double *)0x0) {
LAB_0022a0fc:
            pdVar29[iVar6] = 0.0;
            pdVar29 = pdVar29 + 1;
          }
        }
        else {
          if (pdVar29 != (double *)0x0) {
            dVar40 = 0.0;
            lVar7 = 0;
            fVar36 = 0.0;
            iVar12 = 0;
            pdVar17 = pdVar29;
            do {
              fVar35 = *(float *)((long)pfVar21 + lVar7);
              iVar12 = iVar12 + param_10;
              fVar36 = fVar36 + fVar35;
              *(float *)((long)pfVar20 + lVar7) = fVar35;
              *(float *)(puVar9 + lVar7) = fVar35;
              dVar40 = dVar40 + (double)fVar35 * (double)fVar35;
              *(float *)((long)pfVar42 + lVar7) = fVar36;
              lVar7 = lVar7 + uVar30;
              *pdVar17 = dVar40;
              pdVar17 = pdVar17 + (int)param_10;
            } while (iVar12 < (int)uVar44);
            if (param_10 == uVar44) goto LAB_0022a570;
            goto LAB_0022a0fc;
          }
          fVar36 = 0.0;
          iVar12 = 0;
          lVar7 = 0;
          do {
            fVar35 = *(float *)((long)pfVar21 + lVar7);
            iVar12 = iVar12 + param_10;
            fVar36 = fVar36 + fVar35;
            *(float *)((long)pfVar20 + lVar7) = fVar35;
            *(float *)(puVar9 + lVar7) = fVar35;
            *(float *)((long)pfVar42 + lVar7) = fVar36;
            lVar7 = lVar7 + uVar30;
          } while (iVar12 < (int)uVar44);
          if (param_10 == uVar44) {
LAB_0022a570:
            *(undefined4 *)(puVar9 + uVar30) = 0;
            goto LAB_0022a574;
          }
        }
        pfVar42 = pfVar42 + 1;
        pfVar21 = pfVar21 + 1;
        pfVar20 = pfVar20 + 1;
        puVar9 = puVar9 + 4;
      } while (pfVar42 != pfVar28);
      param_1 = param_1 + lVar1;
      pfVar16 = pfVar16 + lVar1;
      puVar9 = puVar2 + lVar1 * 4;
      pfVar42 = pfVar28;
    }
    uVar44 = param_9[1];
    if (1 < (int)uVar44) {
      lVar7 = (long)(int)-param_10;
      lVar27 = (long)(int)param_10;
      lVar24 = lVar27 * 4;
      lVar45 = NEON_shl(lVar7,3);
      lVar10 = (lVar27 + iVar34) * -4;
      lVar43 = NEON_shl((ulong)(param_10 - 1) + 1,2);
      iVar6 = 1;
      lVar1 = lVar27 * -0xc + (long)(int)(param_10 - iVar31) * 4;
      uVar30 = -(ulong)((uint)-iVar34 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar34 << 2;
      do {
        pfVar42 = (float *)((long)pfVar42 +
                           (-(ulong)(iVar34 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar34 - param_10) << 2));
        if (pdVar29 != (double *)0x0) {
          pdVar29 = (double *)
                    ((long)pdVar29 +
                    (-(ulong)(iVar11 - param_10 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(iVar11 - param_10) << 3));
        }
        param_1 = (float *)((long)param_1 +
                           (-(ulong)(iVar4 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar4 - param_10) << 2));
        pfVar16 = (float *)((long)pfVar16 +
                           (-(ulong)(iVar31 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar31 - param_10) << 2));
        puVar9 = puVar9 + lVar7 * 4;
        if (0 < (int)param_10) {
          pfVar22 = param_1 + lVar27;
          uVar23 = *param_9;
          pfVar28 = (float *)((long)pfVar16 +
                             (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar31 << 2));
          iVar12 = uVar23 - param_10;
          puVar25 = puVar9 + lVar24;
          pfVar3 = (float *)((long)param_1 + lVar43);
          puVar19 = puVar9;
          pfVar21 = pfVar42;
          pfVar20 = pfVar16;
          do {
            fVar35 = *param_1;
            pfVar21[lVar7] = 0.0;
            fVar36 = *pfVar28;
            dVar40 = (double)fVar35 * (double)fVar35;
            uVar32 = param_10;
            if (pdVar29 == (double *)0x0) {
              pfVar20[lVar7] = fVar36;
              *pfVar21 = fVar35 + *(float *)((long)pfVar21 + uVar30);
              *pfVar20 = fVar35 + *pfVar28 + *(float *)(puVar19 + lVar24);
              if (iVar12 <= (int)param_10) goto LAB_0022a57c;
              lVar14 = 0;
              lVar13 = lVar27 * 8;
              fVar36 = fVar35;
              do {
                lVar18 = lVar13;
                fVar38 = *(float *)(puVar25 + lVar14 * 4);
                uVar32 = uVar32 + param_10;
                lVar33 = lVar27 * 2 + lVar14;
                pfVar26 = (float *)(puVar19 + lVar18);
                *(float *)(puVar19 + lVar14 * 4) = fVar38 + fVar36;
                fVar36 = pfVar22[lVar14];
                fVar35 = fVar35 + fVar36;
                dVar40 = dVar40 + (double)fVar36 * (double)fVar36;
                pfVar21[lVar27 + lVar14] = *(float *)((long)pfVar21 + lVar18 + lVar10) + fVar35;
                pfVar20[lVar27 + lVar14] =
                     fVar36 + *(float *)(puVar19 + lVar18) +
                     *(float *)((long)pfVar20 + lVar18 + lVar1) + fVar38;
                lVar14 = lVar33 - lVar27;
                lVar13 = lVar18 + lVar24;
              } while ((int)uVar32 < iVar12);
            }
            else {
              *(undefined8 *)((long)pdVar29 + lVar45) = 0;
              dVar37 = *(double *)
                        ((long)pdVar29 +
                        (-(ulong)((uint)-iVar11 >> 0x1f) & 0xfffffff800000000 |
                        (ulong)(uint)-iVar11 << 3));
              pfVar20[lVar7] = fVar36;
              *pfVar21 = fVar35 + *(float *)((long)pfVar21 + uVar30);
              fVar36 = *pfVar28;
              fVar38 = *(float *)(puVar19 + lVar24);
              *pdVar29 = dVar40 + dVar37;
              *pfVar20 = fVar35 + fVar36 + fVar38;
              if ((int)param_10 < iVar12) {
                lVar13 = 0;
                lVar14 = lVar27 * 8;
                fVar36 = fVar35;
                do {
                  lVar18 = lVar14;
                  fVar46 = *(float *)(puVar25 + lVar13 * 4);
                  uVar32 = uVar32 + param_10;
                  dVar37 = pdVar29[(lVar27 + lVar13) - (long)iVar11];
                  lVar33 = lVar13 + lVar27 * 2;
                  pfVar26 = (float *)(puVar19 + lVar18);
                  *(float *)(puVar19 + lVar13 * 4) = fVar46 + fVar36;
                  fVar36 = pfVar22[lVar13];
                  fVar35 = fVar35 + fVar36;
                  dVar40 = dVar40 + (double)fVar36 * (double)fVar36;
                  pfVar21[lVar27 + lVar13] = *(float *)((long)pfVar21 + lVar18 + lVar10) + fVar35;
                  fVar38 = *(float *)(puVar19 + lVar18);
                  fVar39 = *(float *)((long)pfVar20 + lVar18 + lVar1);
                  pdVar29[lVar27 + lVar13] = dVar37 + dVar40;
                  pfVar20[lVar27 + lVar13] = fVar36 + fVar38 + fVar39 + fVar46;
                  lVar13 = lVar33 - lVar27;
                  lVar14 = lVar18 + lVar24;
                } while ((int)uVar32 < iVar12);
              }
              else {
LAB_0022a57c:
                pfVar26 = (float *)(puVar19 + lVar24);
                lVar18 = lVar24;
                lVar33 = lVar27;
                fVar36 = fVar35;
              }
            }
            if ((int)param_10 < (int)uVar23) {
              fVar38 = *pfVar26;
              *(float *)(puVar19 + (long)(int)(uVar32 - param_10) * 4) = fVar38 + fVar36;
              fVar36 = *(float *)((long)param_1 + lVar18);
              *(float *)((long)pfVar21 + lVar18) = pfVar21[(int)(uVar32 - iVar34)] + fVar35 + fVar36
              ;
              if (pdVar29 != (double *)0x0) {
                pdVar29[lVar33] =
                     pdVar29[(int)(uVar32 - iVar11)] + dVar40 + (double)fVar36 * (double)fVar36;
              }
              *(float *)((long)pfVar20 + lVar18) =
                   fVar38 + fVar36 + pfVar20[(int)((uVar32 - iVar31) - param_10)];
              *pfVar26 = fVar36;
            }
            param_1 = param_1 + 1;
            if (pdVar29 != (double *)0x0) {
              pdVar29 = pdVar29 + 1;
            }
            pfVar21 = pfVar21 + 1;
            pfVar20 = pfVar20 + 1;
            puVar19 = puVar19 + 4;
            pfVar28 = pfVar28 + 1;
            puVar25 = puVar25 + 4;
            pfVar22 = pfVar22 + 1;
          } while (param_1 != pfVar3);
          pfVar42 = (float *)((long)pfVar42 + lVar43);
          puVar9 = puVar9 + lVar43;
          pfVar16 = (float *)((long)pfVar16 + lVar43);
          param_1 = pfVar3;
        }
        iVar6 = iVar6 + 1;
      } while (iVar6 < (int)uVar44);
    }
    if (bVar5) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffff800000000 |
           (ulong)(param_10 + *param_9) << 3);
    pdVar29 = (double *)((long)param_5 + (long)(int)(param_10 + iVar11) * 8);
    if (param_7 != (void *)0x0) goto LAB_00229ea4;
    if (pdVar29 == (double *)0x0) goto LAB_00229ee4;
LAB_0022a59c:
    uVar44 = param_9[1];
    if (0 < (int)uVar44) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar23 = 0;
      do {
        if (0 < (int)param_10) {
          pfVar21 = pfVar42 + lVar1;
          uVar32 = *param_9;
          pfVar16 = param_1;
          pdVar17 = pdVar29;
          do {
            pfVar42[(int)-param_10] = 0.0;
            pdVar17[(int)-param_10] = 0.0;
            if (0 < (int)uVar32) {
              dVar40 = 0.0;
              lVar7 = 0;
              fVar36 = 0.0;
              iVar31 = 0;
              pdVar15 = pdVar17;
              do {
                iVar31 = iVar31 + param_10;
                dVar41 = (double)*(float *)((long)pfVar16 + lVar7);
                fVar36 = fVar36 + *(float *)((long)pfVar16 + lVar7);
                dVar37 = pdVar15[-iVar11];
                dVar40 = dVar40 + dVar41 * dVar41;
                *(float *)((long)pfVar42 + lVar7) =
                     *(float *)((long)pfVar42 +
                               lVar7 + (-(ulong)((uint)-iVar34 >> 0x1f) & 0xfffffffc00000000 |
                                       (ulong)(uint)-iVar34 << 2)) + fVar36;
                lVar7 = lVar7 + (long)(int)param_10 * 4;
                *pdVar15 = dVar40 + dVar37;
                pdVar15 = pdVar15 + (int)param_10;
              } while (iVar31 < (int)uVar32);
            }
            pfVar42 = pfVar42 + 1;
            pfVar16 = pfVar16 + 1;
            pdVar17 = pdVar17 + 1;
          } while (pfVar42 != pfVar21);
          param_1 = param_1 + lVar1;
          pdVar29 = pdVar29 + lVar1;
          pfVar42 = pfVar21;
        }
        uVar23 = uVar23 + 1;
        param_1 = (float *)((long)param_1 +
                           (-(ulong)(iVar4 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar4 - param_10) << 2));
        pfVar42 = (float *)((long)pfVar42 +
                           (-(ulong)(iVar34 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar34 - param_10) << 2));
        pdVar29 = (double *)
                  ((long)pdVar29 +
                  (-(ulong)(iVar11 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar11 - param_10) << 3));
      } while (uVar23 != uVar44);
    }
  }
  return;
}


==================================================================

### FUNC 0022a6f0 (52 bytes) name=FUN_0022a6f0

void FUN_0022a6f0(void)

{
  FUN_00229dd8();
  return;
}


==================================================================

### FUNC 0022a724 (2360 bytes) name=FUN_0022a724

void FUN_0022a724(float *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  bool bVar6;
  double *pdVar7;
  ulong uVar8;
  undefined1 *puVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  int iVar13;
  undefined1 *puVar14;
  float *pfVar15;
  long lVar16;
  undefined1 *puVar17;
  float *pfVar18;
  double *pdVar19;
  long lVar20;
  long lVar21;
  long lVar22;
  long lVar23;
  double *pdVar24;
  double *pdVar25;
  int iVar26;
  long lVar27;
  double *pdVar28;
  int iVar29;
  ulong uVar30;
  double *pdVar31;
  int iVar32;
  int iVar33;
  double dVar34;
  double dVar35;
  float fVar36;
  double dVar37;
  double dVar38;
  double *pdVar39;
  long lVar40;
  int iVar41;
  long lVar42;
  long lVar43;
  double dVar44;
  undefined1 auStack_440 [1088];
  
  iVar33 = *param_9;
  iVar4 = (int)(param_6 >> 3);
  iVar32 = (int)(param_4 >> 3);
  *param_9 = param_10 * iVar33;
  iVar26 = (int)(param_8 >> 3);
  uVar3 = param_10 + param_10 * iVar33;
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3);
  pdVar39 = (double *)((long)param_3 + (long)(param_10 + iVar32) * 8);
  iVar33 = (int)(param_2 >> 2);
  if (param_5 == (void *)0x0) {
    pdVar28 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022a83c;
LAB_0022a7f4:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar7 = (double *)((long)param_7 + (long)(param_10 + iVar26) * 8);
    bVar6 = pdVar7 == (double *)0x0;
    if (pdVar28 == (double *)0x0) {
      if (bVar6) {
LAB_0022a83c:
        iVar4 = param_9[1];
        if (iVar4 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar26 = 0;
        do {
          if (0 < param_10) {
            pdVar28 = pdVar39 + lVar1;
            iVar41 = *param_9;
            pfVar18 = param_1;
            do {
              *(undefined8 *)
               ((long)pdVar39 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3
               )) = 0;
              if (0 < iVar41) {
                dVar37 = 0.0;
                iVar13 = 0;
                pdVar7 = pdVar39;
                pfVar15 = pfVar18;
                do {
                  fVar36 = *pfVar15;
                  iVar13 = iVar13 + param_10;
                  pfVar15 = pfVar15 + param_10;
                  dVar37 = dVar37 + (double)fVar36;
                  *pdVar7 = pdVar7[-iVar32] + dVar37;
                  pdVar7 = pdVar7 + param_10;
                } while (iVar13 < iVar41);
              }
              pdVar39 = pdVar39 + 1;
              pfVar18 = pfVar18 + 1;
            } while (pdVar39 != pdVar28);
            param_1 = param_1 + lVar1;
            pdVar39 = pdVar28;
          }
          iVar26 = iVar26 + 1;
          param_1 = (float *)((long)param_1 +
                             (-(ulong)((uint)(iVar33 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar33 - param_10) << 2));
          pdVar39 = (double *)
                    ((long)pdVar39 +
                    (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar32 - param_10) << 3));
        } while (iVar26 != iVar4);
        return;
      }
    }
    else if (bVar6) goto LAB_0022af18;
    puVar2 = auStack_440;
    uVar30 = (ulong)(param_10 + *param_9);
    if (0x88 < uVar30) {
      uVar8 = uVar30 << 3;
      if (0xfe0000000000000 < uVar30) {
        uVar8 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar8);
      bVar6 = puVar9 != puVar2;
      puVar2 = puVar9;
    }
    puVar9 = puVar2;
    if (0 < param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar22 = (long)param_10;
      iVar41 = *param_9;
      pdVar24 = pdVar39 + lVar1;
      lVar23 = lVar22 * 8;
      uVar30 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      pdVar19 = pdVar7;
      pfVar18 = param_1;
      do {
        *(undefined8 *)((long)pdVar19 + uVar30) = 0;
        *(undefined8 *)((long)pdVar39 + uVar30) = 0;
        if (iVar41 < 1) {
LAB_0022aef0:
          if (pdVar28 != (double *)0x0) {
LAB_0022aa6c:
            *(undefined8 *)((long)pdVar28 + uVar30) = 0;
            pdVar28 = pdVar28 + 1;
          }
        }
        else {
          dVar37 = 0.0;
          if (pdVar28 != (double *)0x0) {
            dVar38 = 0.0;
            lVar10 = 0;
            iVar13 = 0;
            pfVar15 = pfVar18;
            do {
              fVar36 = *pfVar15;
              iVar13 = iVar13 + param_10;
              pfVar15 = pfVar15 + lVar22;
              dVar34 = (double)fVar36;
              dVar37 = dVar37 + dVar34 * dVar34;
              dVar38 = dVar38 + dVar34;
              *(double *)((long)pdVar19 + lVar10) = dVar34;
              *(double *)(puVar9 + lVar10) = dVar34;
              *(double *)((long)pdVar39 + lVar10) = dVar38;
              *(double *)((long)pdVar28 + lVar10) = dVar37;
              lVar10 = lVar10 + lVar23;
            } while (iVar13 < iVar41);
            if (param_10 == iVar41) goto LAB_0022aeec;
            goto LAB_0022aa6c;
          }
          iVar13 = 0;
          lVar10 = 0;
          pfVar15 = pfVar18;
          do {
            fVar36 = *pfVar15;
            iVar13 = iVar13 + param_10;
            pfVar15 = pfVar15 + lVar22;
            dVar38 = (double)fVar36;
            dVar37 = dVar37 + dVar38;
            *(double *)((long)pdVar19 + lVar10) = dVar38;
            *(double *)(puVar9 + lVar10) = dVar38;
            *(double *)((long)pdVar39 + lVar10) = dVar37;
            lVar10 = lVar10 + lVar23;
          } while (iVar13 < iVar41);
          if (param_10 == iVar41) {
LAB_0022aeec:
            *(undefined8 *)(puVar9 + lVar23) = 0;
            goto LAB_0022aef0;
          }
        }
        pdVar39 = pdVar39 + 1;
        pfVar18 = pfVar18 + 1;
        pdVar19 = pdVar19 + 1;
        puVar9 = puVar9 + 8;
      } while (pdVar39 != pdVar24);
      param_1 = param_1 + lVar1;
      pdVar7 = pdVar7 + lVar1;
      puVar9 = puVar2 + lVar1 * 8;
      pdVar39 = pdVar24;
    }
    iVar41 = param_9[1];
    if (1 < iVar41) {
      lVar10 = (long)param_10;
      lVar22 = (ulong)(param_10 - 1) + 1;
      lVar23 = (lVar10 + iVar32) * -8;
      lVar42 = NEON_shl(lVar10,2);
      lVar1 = (lVar10 - lVar42) * 8 + (long)(param_10 - iVar26) * 8;
      lVar43 = NEON_shl(lVar22,2);
      lVar40 = NEON_shl(lVar22,3);
      lVar22 = lVar10 * 8;
      iVar13 = 1;
      uVar30 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      uVar8 = -(ulong)((uint)-iVar32 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-iVar32 << 3;
      do {
        pdVar39 = (double *)
                  ((long)pdVar39 +
                  (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar32 - param_10) << 3));
        if (pdVar28 != (double *)0x0) {
          pdVar28 = (double *)
                    ((long)pdVar28 +
                    (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)(iVar4 - param_10) << 3));
        }
        param_1 = (float *)((long)param_1 +
                           (-(ulong)((uint)(iVar33 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar33 - param_10) << 2));
        pdVar7 = (double *)
                 ((long)pdVar7 +
                 (-(ulong)((uint)(iVar26 - param_10) >> 0x1f) & 0xfffffff800000000 |
                 (ulong)(uint)(iVar26 - param_10) << 3));
        puVar9 = puVar9 + uVar30;
        if (0 < param_10) {
          iVar11 = *param_9;
          pdVar25 = (double *)
                    ((long)pdVar7 +
                    (-(ulong)((uint)-iVar26 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)-iVar26 << 3));
          iVar5 = iVar11 - param_10;
          puVar17 = puVar9 + lVar22;
          pfVar18 = (float *)((long)param_1 + lVar43);
          lVar16 = (long)param_1 + lVar42;
          puVar14 = puVar9;
          pdVar19 = pdVar39;
          pdVar24 = pdVar7;
          do {
            fVar36 = *param_1;
            *(undefined8 *)((long)pdVar19 + uVar30) = 0;
            dVar38 = (double)fVar36;
            dVar37 = dVar38 * dVar38;
            iVar29 = param_10;
            if (pdVar28 == (double *)0x0) {
              *(double *)((long)pdVar24 + uVar30) = *pdVar25;
              *pdVar19 = dVar38 + *(double *)((long)pdVar19 + uVar8);
              *pdVar24 = dVar38 + *pdVar25 + *(double *)(puVar14 + lVar22);
              if (iVar5 <= param_10) goto LAB_0022aef8;
              lVar21 = 0;
              lVar20 = lVar10 << 4;
              dVar34 = dVar38;
              do {
                lVar27 = lVar20;
                dVar44 = *(double *)(puVar17 + lVar21 * 8);
                iVar29 = iVar29 + param_10;
                dVar35 = dVar44 + dVar34;
                lVar12 = lVar10 * 2 + lVar21;
                dVar34 = (double)*(float *)(lVar16 + lVar21 * 4);
                pdVar31 = (double *)(puVar14 + lVar27);
                *(double *)(puVar14 + lVar21 * 8) = dVar35;
                dVar38 = dVar38 + dVar34;
                dVar37 = dVar37 + dVar34 * dVar34;
                pdVar19[lVar10 + lVar21] = *(double *)((long)pdVar19 + lVar27 + lVar23) + dVar38;
                pdVar24[lVar10 + lVar21] =
                     dVar34 + *(double *)(puVar14 + lVar27) +
                     *(double *)((long)pdVar24 + lVar27 + lVar1) + dVar44;
                lVar21 = lVar12 - lVar10;
                lVar20 = lVar27 + lVar22;
              } while (iVar29 < iVar5);
            }
            else {
              *(undefined8 *)((long)pdVar28 + uVar30) = 0;
              *(double *)((long)pdVar24 + uVar30) = *pdVar25;
              *pdVar19 = dVar38 + *(double *)((long)pdVar19 + uVar8);
              *pdVar28 = dVar37 + *(double *)
                                   ((long)pdVar28 +
                                   (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
              *pdVar24 = dVar38 + *pdVar25 + *(double *)(puVar14 + lVar22);
              if (param_10 < iVar5) {
                lVar20 = 0;
                lVar21 = lVar10 << 4;
                dVar34 = dVar38;
                do {
                  lVar27 = lVar21;
                  dVar44 = *(double *)(puVar17 + lVar20 * 8);
                  iVar29 = iVar29 + param_10;
                  dVar35 = dVar44 + dVar34;
                  lVar12 = lVar20 + lVar10 * 2;
                  dVar34 = (double)*(float *)(lVar16 + lVar20 * 4);
                  pdVar31 = (double *)(puVar14 + lVar27);
                  *(double *)(puVar14 + lVar20 * 8) = dVar35;
                  dVar38 = dVar38 + dVar34;
                  dVar37 = dVar37 + dVar34 * dVar34;
                  pdVar19[lVar10 + lVar20] = *(double *)((long)pdVar19 + lVar27 + lVar23) + dVar38;
                  pdVar28[lVar10 + lVar20] =
                       *(double *)((long)pdVar28 + lVar27 + (lVar10 + iVar4) * -8) + dVar37;
                  pdVar24[lVar10 + lVar20] =
                       dVar34 + *(double *)(puVar14 + lVar27) +
                       *(double *)((long)pdVar24 + lVar27 + lVar1) + dVar44;
                  lVar20 = lVar12 - lVar10;
                  lVar21 = lVar27 + lVar22;
                } while (iVar29 < iVar5);
              }
              else {
LAB_0022aef8:
                pdVar31 = (double *)(puVar14 + lVar22);
                lVar12 = lVar10;
                lVar27 = lVar22;
                dVar34 = dVar38;
              }
            }
            if (param_10 < iVar11) {
              dVar44 = *pdVar31;
              dVar35 = (double)param_1[lVar12];
              *(double *)(puVar14 + (long)(iVar29 - param_10) * 8) = dVar44 + dVar34;
              *(double *)((long)pdVar19 + lVar27) = pdVar19[iVar29 - iVar32] + dVar38 + dVar35;
              if (pdVar28 != (double *)0x0) {
                *(double *)((long)pdVar28 + lVar27) =
                     pdVar28[iVar29 - iVar4] + dVar37 + dVar35 * dVar35;
              }
              *(double *)((long)pdVar24 + lVar27) =
                   dVar35 + dVar44 + pdVar24[(iVar29 - iVar26) - param_10];
              *pdVar31 = dVar35;
            }
            param_1 = param_1 + 1;
            if (pdVar28 != (double *)0x0) {
              pdVar28 = pdVar28 + 1;
            }
            pdVar19 = pdVar19 + 1;
            pdVar24 = pdVar24 + 1;
            puVar14 = puVar14 + 8;
            pdVar25 = pdVar25 + 1;
            puVar17 = puVar17 + 8;
            lVar16 = lVar16 + 4;
          } while (param_1 != pfVar18);
          pdVar39 = (double *)((long)pdVar39 + lVar40);
          puVar9 = puVar9 + lVar40;
          pdVar7 = (double *)((long)pdVar7 + lVar40);
          param_1 = pfVar18;
        }
        iVar13 = iVar13 + 1;
      } while (iVar13 < iVar41);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffff800000000 |
           (ulong)(uint)(param_10 + *param_9) << 3);
    pdVar28 = (double *)((long)param_5 + (long)(param_10 + iVar4) * 8);
    if (param_7 != (void *)0x0) goto LAB_0022a7f4;
    if (pdVar28 == (double *)0x0) goto LAB_0022a83c;
LAB_0022af18:
    iVar26 = param_9[1];
    if (0 < iVar26) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar30 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-param_10 << 3;
      iVar41 = 0;
      do {
        if (0 < param_10) {
          pdVar19 = pdVar39 + lVar1;
          iVar13 = *param_9;
          pdVar7 = pdVar28;
          pfVar18 = param_1;
          do {
            *(undefined8 *)((long)pdVar39 + uVar30) = 0;
            *(undefined8 *)((long)pdVar7 + uVar30) = 0;
            if (0 < iVar13) {
              dVar37 = 0.0;
              lVar22 = 0;
              iVar11 = 0;
              dVar38 = 0.0;
              pfVar15 = pfVar18;
              do {
                iVar11 = iVar11 + param_10;
                dVar34 = (double)*pfVar15;
                pfVar15 = pfVar15 + param_10;
                dVar35 = *(double *)
                          ((long)pdVar7 +
                          lVar22 + (-(ulong)((uint)-iVar4 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar4 << 3));
                dVar37 = dVar37 + dVar34 * dVar34;
                dVar38 = dVar38 + dVar34;
                *(double *)((long)pdVar39 + lVar22) =
                     *(double *)
                      ((long)pdVar39 +
                      lVar22 + (-(ulong)((uint)-iVar32 >> 0x1f) & 0xfffffff800000000 |
                               (ulong)(uint)-iVar32 << 3)) + dVar38;
                *(double *)((long)pdVar7 + lVar22) = dVar37 + dVar35;
                lVar22 = lVar22 + (long)param_10 * 8;
              } while (iVar11 < iVar13);
            }
            pdVar39 = pdVar39 + 1;
            pfVar18 = pfVar18 + 1;
            pdVar7 = pdVar7 + 1;
          } while (pdVar39 != pdVar19);
          param_1 = param_1 + lVar1;
          pdVar28 = pdVar28 + lVar1;
          pdVar39 = pdVar19;
        }
        iVar41 = iVar41 + 1;
        param_1 = (float *)((long)param_1 +
                           (-(ulong)((uint)(iVar33 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar33 - param_10) << 2));
        pdVar39 = (double *)
                  ((long)pdVar39 +
                  (-(ulong)((uint)(iVar32 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar32 - param_10) << 3));
        pdVar28 = (double *)
                  ((long)pdVar28 +
                  (-(ulong)((uint)(iVar4 - param_10) >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(uint)(iVar4 - param_10) << 3));
      } while (iVar41 != iVar26);
    }
  }
  return;
}


==================================================================

### FUNC 0022b05c (52 bytes) name=FUN_0022b05c

void FUN_0022b05c(void)

{
  FUN_0022a724();
  return;
}


==================================================================

### FUNC 0022b090 (2216 bytes) name=FUN_0022b090

void FUN_0022b090(double *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,uint *param_9,uint param_10)

{
  long lVar1;
  undefined1 *puVar2;
  double *pdVar3;
  int iVar4;
  long lVar5;
  bool bVar6;
  int iVar7;
  int iVar8;
  ulong uVar9;
  undefined1 *puVar10;
  uint uVar11;
  int iVar12;
  long lVar13;
  double *pdVar14;
  double *pdVar15;
  undefined1 *puVar16;
  double *pdVar17;
  double *pdVar18;
  double *pdVar19;
  double *pdVar20;
  double *pdVar21;
  long lVar22;
  undefined1 *puVar23;
  long lVar24;
  uint uVar25;
  double *pdVar26;
  double *pdVar27;
  long lVar28;
  int iVar29;
  ulong uVar30;
  long lVar31;
  int iVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double *pdVar36;
  double dVar37;
  long lVar38;
  uint uVar39;
  long lVar40;
  undefined1 auStack_440 [1088];
  
  uVar39 = *param_9;
  iVar7 = (int)(param_6 >> 3);
  iVar29 = (int)(param_4 >> 3);
  *param_9 = param_10 * uVar39;
  uVar39 = param_10 + param_10 * uVar39;
  iVar12 = (int)(param_8 >> 3);
  memset(param_3,0,-(ulong)(uVar39 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar39 << 3);
  pdVar36 = (double *)((long)param_3 + (long)(int)(param_10 + iVar29) * 8);
  iVar32 = (int)(param_2 >> 3);
  if (param_5 == (void *)0x0) {
    pdVar14 = (double *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022b1ac;
LAB_0022b160:
    memset(param_7,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffff800000000 |
           (ulong)(param_10 + *param_9) << 3);
    pdVar19 = (double *)((long)param_7 + (long)(int)(param_10 + iVar12) * 8);
    bVar6 = pdVar19 == (double *)0x0;
    if (pdVar14 == (double *)0x0) {
      if (bVar6) {
LAB_0022b1ac:
        uVar39 = param_9[1];
        if ((int)uVar39 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        uVar25 = 0;
        do {
          if (0 < (int)param_10) {
            pdVar19 = pdVar36 + lVar1;
            uVar11 = *param_9;
            pdVar14 = param_1;
            do {
              *(undefined8 *)
               ((long)pdVar36 +
               (-(ulong)(-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)-param_10 << 3)) = 0;
              if (0 < (int)uVar11) {
                dVar34 = 0.0;
                lVar13 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  dVar34 = dVar34 + *(double *)((long)pdVar14 + lVar13);
                  *(double *)((long)pdVar36 + lVar13) =
                       *(double *)
                        ((long)pdVar36 +
                        lVar13 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 |
                                 (ulong)(uint)-iVar29 << 3)) + dVar34;
                  lVar13 = lVar13 + (long)(int)param_10 * 8;
                } while (iVar7 < (int)uVar11);
              }
              pdVar36 = pdVar36 + 1;
              pdVar14 = pdVar14 + 1;
            } while (pdVar36 != pdVar19);
            param_1 = param_1 + lVar1;
            pdVar36 = pdVar19;
          }
          uVar25 = uVar25 + 1;
          param_1 = (double *)
                    ((long)param_1 +
                    (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(iVar32 - param_10) << 3));
          pdVar36 = (double *)
                    ((long)pdVar36 +
                    (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(iVar29 - param_10) << 3));
        } while (uVar25 != uVar39);
        return;
      }
    }
    else if (bVar6) goto LAB_0022b804;
    puVar2 = auStack_440;
    uVar30 = (ulong)(int)(param_10 + *param_9);
    if (0x88 < uVar30) {
      uVar9 = uVar30 << 3;
      if (0xfe0000000000000 < uVar30) {
        uVar9 = 0xffffffffffffffff;
      }
      puVar10 = operator_new__(uVar9);
      bVar6 = puVar10 != puVar2;
      puVar2 = puVar10;
    }
    puVar10 = puVar2;
    if (0 < (int)param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar9 = -(ulong)(-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)-param_10 << 3;
      uVar39 = *param_9;
      pdVar27 = pdVar36 + lVar1;
      uVar30 = -(ulong)(param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)param_10 << 3;
      pdVar15 = pdVar19;
      pdVar17 = param_1;
      do {
        *(undefined8 *)((long)pdVar15 + uVar9) = 0;
        *(undefined8 *)((long)pdVar36 + uVar9) = 0;
        if ((int)uVar39 < 1) {
LAB_0022b7e0:
          if (pdVar14 != (double *)0x0) {
LAB_0022b3ac:
            *(undefined8 *)((long)pdVar14 + uVar9) = 0;
            pdVar14 = pdVar14 + 1;
          }
        }
        else {
          dVar34 = 0.0;
          if (pdVar14 != (double *)0x0) {
            dVar35 = 0.0;
            lVar13 = 0;
            iVar8 = 0;
            do {
              dVar33 = *(double *)((long)pdVar17 + lVar13);
              iVar8 = iVar8 + param_10;
              dVar34 = dVar34 + dVar33 * dVar33;
              dVar35 = dVar35 + dVar33;
              *(double *)((long)pdVar15 + lVar13) = dVar33;
              *(double *)(puVar10 + lVar13) = dVar33;
              *(double *)((long)pdVar36 + lVar13) = dVar35;
              *(double *)((long)pdVar14 + lVar13) = dVar34;
              lVar13 = lVar13 + uVar30;
            } while (iVar8 < (int)uVar39);
            if (param_10 == uVar39) goto LAB_0022b7dc;
            goto LAB_0022b3ac;
          }
          iVar8 = 0;
          lVar13 = 0;
          do {
            dVar35 = *(double *)((long)pdVar17 + lVar13);
            iVar8 = iVar8 + param_10;
            dVar34 = dVar34 + dVar35;
            *(double *)((long)pdVar15 + lVar13) = dVar35;
            *(double *)(puVar10 + lVar13) = dVar35;
            *(double *)((long)pdVar36 + lVar13) = dVar34;
            lVar13 = lVar13 + uVar30;
          } while (iVar8 < (int)uVar39);
          if (param_10 == uVar39) {
LAB_0022b7dc:
            *(undefined8 *)(puVar10 + uVar30) = 0;
            goto LAB_0022b7e0;
          }
        }
        pdVar36 = pdVar36 + 1;
        pdVar17 = pdVar17 + 1;
        pdVar15 = pdVar15 + 1;
        puVar10 = puVar10 + 8;
      } while (pdVar36 != pdVar27);
      param_1 = param_1 + lVar1;
      pdVar19 = pdVar19 + lVar1;
      puVar10 = puVar2 + lVar1 * 8;
      pdVar36 = pdVar27;
    }
    uVar39 = param_9[1];
    if (1 < (int)uVar39) {
      lVar13 = (long)(int)param_10;
      lVar38 = NEON_shl((ulong)(param_10 - 1) + 1,3);
      lVar24 = lVar13 * 8;
      uVar30 = -(ulong)(-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)-param_10 << 3;
      uVar9 = -(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)-iVar29 << 3;
      lVar40 = NEON_shl(lVar13,4);
      lVar28 = (lVar13 + iVar29) * -8;
      iVar8 = 1;
      lVar1 = lVar13 * -0x18 + (long)(int)(param_10 - iVar12) * 8;
      do {
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar29 - param_10) << 3));
        if (pdVar14 != (double *)0x0) {
          pdVar14 = (double *)
                    ((long)pdVar14 +
                    (-(ulong)(iVar7 - param_10 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(iVar7 - param_10) << 3));
        }
        param_1 = (double *)
                  ((long)param_1 +
                  (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar32 - param_10) << 3));
        pdVar19 = (double *)
                  ((long)pdVar19 +
                  (-(ulong)(iVar12 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar12 - param_10) << 3));
        puVar10 = puVar10 + uVar30;
        if (0 < (int)param_10) {
          pdVar21 = param_1 + lVar13;
          pdVar18 = pdVar19 + lVar13;
          uVar25 = *param_9;
          iVar4 = uVar25 - param_10;
          pdVar27 = (double *)
                    ((long)pdVar19 +
                    (-(ulong)((uint)-iVar12 >> 0x1f) & 0xfffffff800000000 |
                    (ulong)(uint)-iVar12 << 3));
          puVar23 = puVar10 + lVar24;
          pdVar20 = pdVar36 + lVar13;
          pdVar3 = (double *)((long)param_1 + lVar38);
          puVar16 = puVar10;
          pdVar17 = pdVar36;
          pdVar15 = pdVar19;
          do {
            dVar35 = *param_1;
            *(undefined8 *)((long)pdVar17 + uVar30) = 0;
            dVar33 = dVar35 * dVar35;
            dVar34 = dVar35;
            uVar11 = param_10;
            if (pdVar14 == (double *)0x0) {
              *(double *)((long)pdVar15 + uVar30) = *pdVar27;
              *pdVar17 = dVar35 + *(double *)((long)pdVar17 + uVar9);
              *pdVar15 = dVar35 + *pdVar27 + *(double *)(puVar16 + lVar24);
              if (iVar4 <= (int)param_10) goto LAB_0022b7e8;
              lVar22 = 0;
              lVar5 = lVar40;
              do {
                lVar31 = lVar5;
                dVar37 = *(double *)(puVar23 + lVar22);
                uVar11 = uVar11 + param_10;
                pdVar26 = (double *)(puVar16 + lVar31);
                *(double *)(puVar16 + lVar22) = dVar37 + dVar35;
                dVar35 = *(double *)((long)pdVar21 + lVar22);
                dVar34 = dVar34 + dVar35;
                dVar33 = dVar33 + dVar35 * dVar35;
                *(double *)((long)pdVar20 + lVar22) =
                     *(double *)((long)pdVar17 + lVar31 + lVar28) + dVar34;
                *(double *)((long)pdVar18 + lVar22) =
                     dVar35 + *(double *)(puVar16 + lVar31) +
                     *(double *)((long)pdVar15 + lVar31 + lVar1) + dVar37;
                lVar22 = lVar22 + lVar24;
                lVar5 = lVar31 + lVar24;
              } while ((int)uVar11 < iVar4);
            }
            else {
              *(undefined8 *)((long)pdVar14 + uVar30) = 0;
              *(double *)((long)pdVar15 + uVar30) = *pdVar27;
              *pdVar17 = dVar35 + *(double *)((long)pdVar17 + uVar9);
              *pdVar14 = dVar33 + *(double *)
                                   ((long)pdVar14 +
                                   (-(ulong)((uint)-iVar7 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar7 << 3));
              *pdVar15 = dVar35 + *pdVar27 + *(double *)(puVar16 + lVar24);
              if ((int)param_10 < iVar4) {
                lVar22 = 0;
                lVar5 = lVar40;
                do {
                  lVar31 = lVar5;
                  dVar37 = *(double *)(puVar23 + lVar22);
                  uVar11 = uVar11 + param_10;
                  pdVar26 = (double *)(puVar16 + lVar31);
                  *(double *)(puVar16 + lVar22) = dVar37 + dVar35;
                  dVar35 = *(double *)((long)pdVar21 + lVar22);
                  dVar34 = dVar34 + dVar35;
                  dVar33 = dVar33 + dVar35 * dVar35;
                  *(double *)((long)pdVar20 + lVar22) =
                       *(double *)((long)pdVar17 + lVar31 + lVar28) + dVar34;
                  *(double *)((long)pdVar14 + lVar22 + lVar24) =
                       *(double *)((long)pdVar14 + lVar31 + (lVar13 + iVar7) * -8) + dVar33;
                  *(double *)((long)pdVar18 + lVar22) =
                       dVar35 + *(double *)(puVar16 + lVar31) +
                       *(double *)((long)pdVar15 + lVar31 + lVar1) + dVar37;
                  lVar22 = lVar22 + lVar24;
                  lVar5 = lVar31 + lVar24;
                } while ((int)uVar11 < iVar4);
              }
              else {
LAB_0022b7e8:
                pdVar26 = (double *)(puVar16 + lVar24);
                lVar31 = lVar24;
              }
            }
            if ((int)param_10 < (int)uVar25) {
              dVar37 = *pdVar26;
              *(double *)(puVar16 + (long)(int)(uVar11 - param_10) * 8) = dVar37 + dVar35;
              dVar35 = *(double *)((long)param_1 + lVar31);
              *(double *)((long)pdVar17 + lVar31) =
                   pdVar17[(int)(uVar11 - iVar29)] + dVar34 + dVar35;
              if (pdVar14 != (double *)0x0) {
                *(double *)((long)pdVar14 + lVar31) =
                     pdVar14[(int)(uVar11 - iVar7)] + dVar33 + dVar35 * dVar35;
              }
              *(double *)((long)pdVar15 + lVar31) =
                   dVar37 + dVar35 + pdVar15[(int)((uVar11 - iVar12) - param_10)];
              *pdVar26 = dVar35;
            }
            param_1 = param_1 + 1;
            if (pdVar14 != (double *)0x0) {
              pdVar14 = pdVar14 + 1;
            }
            pdVar17 = pdVar17 + 1;
            pdVar15 = pdVar15 + 1;
            puVar16 = puVar16 + 8;
            pdVar27 = pdVar27 + 1;
            puVar23 = puVar23 + 8;
            pdVar21 = pdVar21 + 1;
            pdVar20 = pdVar20 + 1;
            pdVar18 = pdVar18 + 1;
          } while (param_1 != pdVar3);
          pdVar36 = (double *)((long)pdVar36 + lVar38);
          puVar10 = puVar10 + lVar38;
          pdVar19 = (double *)((long)pdVar19 + lVar38);
          param_1 = pdVar3;
        }
        iVar8 = iVar8 + 1;
      } while (iVar8 < (int)uVar39);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffff800000000 |
           (ulong)(param_10 + *param_9) << 3);
    pdVar14 = (double *)((long)param_5 + (long)(int)(param_10 + iVar7) * 8);
    if (param_7 != (void *)0x0) goto LAB_0022b160;
    if (pdVar14 == (double *)0x0) goto LAB_0022b1ac;
LAB_0022b804:
    uVar39 = param_9[1];
    if (0 < (int)uVar39) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar30 = -(ulong)(-param_10 >> 0x1f) & 0xfffffff800000000 | (ulong)-param_10 << 3;
      uVar25 = 0;
      do {
        if (0 < (int)param_10) {
          pdVar15 = pdVar36 + lVar1;
          uVar11 = *param_9;
          pdVar17 = pdVar14;
          pdVar19 = param_1;
          do {
            *(undefined8 *)((long)pdVar36 + uVar30) = 0;
            *(undefined8 *)((long)pdVar17 + uVar30) = 0;
            if (0 < (int)uVar11) {
              dVar34 = 0.0;
              lVar13 = 0;
              iVar12 = 0;
              dVar35 = 0.0;
              do {
                dVar33 = *(double *)((long)pdVar19 + lVar13);
                iVar12 = iVar12 + param_10;
                dVar34 = dVar34 + dVar33 * dVar33;
                dVar35 = dVar35 + dVar33;
                dVar33 = *(double *)
                          ((long)pdVar17 +
                          lVar13 + (-(ulong)((uint)-iVar7 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uint)-iVar7 << 3));
                *(double *)((long)pdVar36 + lVar13) =
                     *(double *)
                      ((long)pdVar36 +
                      lVar13 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffff800000000 |
                               (ulong)(uint)-iVar29 << 3)) + dVar35;
                *(double *)((long)pdVar17 + lVar13) = dVar34 + dVar33;
                lVar13 = lVar13 + (long)(int)param_10 * 8;
              } while (iVar12 < (int)uVar11);
            }
            pdVar36 = pdVar36 + 1;
            pdVar19 = pdVar19 + 1;
            pdVar17 = pdVar17 + 1;
          } while (pdVar36 != pdVar15);
          param_1 = param_1 + lVar1;
          pdVar14 = pdVar14 + lVar1;
          pdVar36 = pdVar15;
        }
        uVar25 = uVar25 + 1;
        param_1 = (double *)
                  ((long)param_1 +
                  (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar32 - param_10) << 3));
        pdVar36 = (double *)
                  ((long)pdVar36 +
                  (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar29 - param_10) << 3));
        pdVar14 = (double *)
                  ((long)pdVar14 +
                  (-(ulong)(iVar7 - param_10 >> 0x1f) & 0xfffffff800000000 |
                  (ulong)(iVar7 - param_10) << 3));
      } while (uVar25 != uVar39);
    }
  }
  return;
}


==================================================================

### FUNC 0022b938 (52 bytes) name=FUN_0022b938

void FUN_0022b938(void)

{
  FUN_0022b090();
  return;
}


==================================================================

### FUNC 0022b96c (2436 bytes) name=FUN_0022b96c

void FUN_0022b96c(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  byte *pbVar3;
  int iVar4;
  int iVar5;
  byte bVar6;
  bool bVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  ulong uVar11;
  undefined1 *puVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  long lVar16;
  long lVar17;
  int iVar18;
  uint uVar19;
  int *piVar20;
  int *piVar21;
  byte *pbVar22;
  undefined1 *puVar23;
  float *pfVar24;
  int iVar25;
  long lVar26;
  int iVar27;
  long lVar28;
  int *piVar29;
  undefined1 *puVar30;
  long lVar31;
  int *piVar32;
  float *pfVar33;
  long lVar34;
  ulong uVar35;
  uint *puVar36;
  long lVar37;
  int iVar38;
  float fVar39;
  float fVar40;
  int *piVar41;
  int *piVar42;
  long lVar43;
  long lVar44;
  int *local_440;
  undefined1 auStack_420 [1056];
  
  iVar8 = (int)(param_6 >> 2);
  iVar38 = (int)(param_4 >> 2);
  uVar9 = param_10 + param_10 * *param_9;
  iVar27 = (int)(param_8 >> 2);
  *param_9 = param_10 * *param_9;
  memset(param_3,0,-(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2);
  piVar41 = (int *)((long)param_3 + (long)(param_10 + iVar38) * 4);
  if (param_5 == (void *)0x0) {
    pfVar33 = (float *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022ba80;
LAB_0022ba3c:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    local_440 = (int *)((long)param_7 + (long)(param_10 + iVar27) * 4);
    bVar7 = local_440 == (int *)0x0;
    if (pfVar33 == (float *)0x0) {
      if (bVar7) {
LAB_0022ba80:
        iVar8 = param_9[1];
        if (iVar8 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar27 = 0;
        do {
          if (0 < param_10) {
            piVar20 = piVar41 + lVar1;
            pbVar22 = param_1;
            do {
              *(undefined4 *)
               ((long)piVar41 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2
               )) = 0;
              if (0 < *param_9) {
                lVar15 = 0;
                iVar18 = 0;
                iVar8 = 0;
                do {
                  iVar8 = iVar8 + param_10;
                  iVar18 = iVar18 + (uint)pbVar22[lVar15];
                  piVar41[lVar15] =
                       *(int *)((long)piVar41 +
                               lVar15 * 4 +
                               (-(ulong)((uint)-iVar38 >> 0x1f) & 0xfffffffc00000000 |
                               (ulong)(uint)-iVar38 << 2)) + iVar18;
                  lVar15 = lVar15 + param_10;
                } while (iVar8 < *param_9);
              }
              piVar41 = piVar41 + 1;
              pbVar22 = pbVar22 + 1;
            } while (piVar41 != piVar20);
            param_1 = param_1 + lVar1;
            iVar8 = param_9[1];
            piVar41 = piVar20;
          }
          iVar27 = iVar27 + 1;
          piVar41 = (int *)((long)piVar41 +
                           (-(ulong)((uint)(iVar38 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar38 - param_10) << 2));
          param_1 = param_1 + (param_2 - param_10);
        } while (iVar27 < iVar8);
        return;
      }
    }
    else if (bVar7) goto LAB_0022c1a0;
    puVar2 = auStack_420;
    uVar35 = (ulong)(param_10 + *param_9);
    if (0x108 < uVar35) {
      uVar11 = uVar35 << 2;
      if (0x1fc0000000000000 < uVar35) {
        uVar11 = 0xffffffffffffffff;
      }
      puVar12 = operator_new__(uVar11);
      bVar7 = puVar12 != puVar2;
      puVar2 = puVar12;
    }
    puVar12 = puVar2;
    if (0 < param_10) {
      lVar15 = (long)param_10;
      lVar1 = (ulong)(param_10 - 1) + 1;
      piVar32 = piVar41 + lVar1;
      uVar35 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      piVar20 = local_440;
      pbVar22 = param_1;
      do {
        *(undefined4 *)((long)piVar20 + uVar35) = 0;
        *(undefined4 *)((long)piVar41 + uVar35) = 0;
        if (0 < *param_9) {
          if (pfVar33 == (float *)0x0) {
            iVar10 = 0;
            iVar18 = 0;
            lVar16 = 0;
            do {
              bVar6 = pbVar22[lVar16];
              iVar18 = iVar18 + param_10;
              piVar20[lVar16] = (uint)bVar6;
              *(uint *)(puVar12 + lVar16 * 4) = (uint)bVar6;
              iVar10 = iVar10 + (uint)bVar6;
              piVar41[lVar16] = iVar10;
              lVar16 = lVar16 + lVar15;
              iVar25 = *param_9;
            } while (iVar18 < iVar25);
          }
          else {
            fVar40 = 0.0;
            lVar16 = 0;
            iVar10 = 0;
            iVar18 = 0;
            do {
              bVar6 = pbVar22[lVar16];
              iVar18 = iVar18 + param_10;
              piVar20[lVar16] = (uint)bVar6;
              *(uint *)(puVar12 + lVar16 * 4) = (uint)bVar6;
              uVar9 = (uint)bVar6;
              iVar10 = iVar10 + uVar9;
              piVar41[lVar16] = iVar10;
              iVar25 = *param_9;
              fVar40 = fVar40 + (float)uVar9 * (float)uVar9;
              pfVar33[lVar16] = fVar40;
              lVar16 = lVar16 + lVar15;
            } while (iVar18 < iVar25);
          }
          if (param_10 == iVar25) {
            *(undefined4 *)(puVar12 + lVar15 * 4) = 0;
          }
        }
        if (pfVar33 != (float *)0x0) {
          *(undefined4 *)((long)pfVar33 + uVar35) = 0;
          pfVar33 = pfVar33 + 1;
        }
        piVar41 = piVar41 + 1;
        pbVar22 = pbVar22 + 1;
        piVar20 = piVar20 + 1;
        puVar12 = puVar12 + 4;
      } while (piVar41 != piVar32);
      param_1 = param_1 + lVar1;
      local_440 = local_440 + lVar1;
      piVar41 = piVar32;
      puVar12 = puVar2 + lVar1 * 4;
    }
    iVar18 = param_9[1];
    if (1 < iVar18) {
      lVar15 = (ulong)(param_10 - 1) + 1;
      lVar31 = (long)param_10;
      uVar35 = -(ulong)((uint)-iVar38 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar38 << 2;
      uVar11 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      lVar16 = (lVar31 + iVar38) * -4;
      lVar28 = lVar31 * 4;
      lVar44 = NEON_shl(lVar31,3);
      iVar10 = 1;
      lVar43 = NEON_shl(lVar15,2);
      lVar1 = lVar31 * -0xc + (long)(param_10 - iVar27) * 4;
      do {
        piVar41 = (int *)((long)piVar41 +
                         (-(ulong)((uint)(iVar38 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar38 - param_10) << 2));
        puVar12 = puVar12 + uVar11;
        if (pfVar33 != (float *)0x0) {
          pfVar33 = (float *)((long)pfVar33 +
                             (-(ulong)((uint)(iVar8 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar8 - param_10) << 2));
        }
        param_1 = param_1 + (param_2 - param_10);
        local_440 = (int *)((long)local_440 +
                           (-(ulong)((uint)(iVar27 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar27 - param_10) << 2));
        if (0 < param_10) {
          pbVar22 = param_1 + lVar31;
          piVar21 = local_440 + lVar31;
          piVar42 = (int *)((long)local_440 +
                           (-(ulong)((uint)-iVar27 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)-iVar27 << 2));
          puVar30 = puVar12 + lVar28;
          piVar29 = piVar41 + lVar31;
          pbVar3 = param_1 + lVar15;
          puVar23 = puVar12;
          piVar20 = piVar41;
          piVar32 = local_440;
          do {
            bVar6 = *param_1;
            uVar19 = (uint)bVar6;
            uVar9 = (uint)bVar6;
            *(undefined4 *)((long)piVar20 + uVar11) = 0;
            fVar40 = (float)uVar19 * (float)bVar6;
            uVar14 = (uint)bVar6;
            uVar13 = (uint)bVar6;
            iVar18 = param_10;
            if (pfVar33 == (float *)0x0) {
              *(int *)((long)piVar32 + uVar11) = *piVar42;
              *piVar20 = (uint)bVar6 + *(int *)((long)piVar20 + uVar35);
              *piVar32 = uVar13 + *piVar42 + *(int *)(puVar23 + lVar28);
              iVar25 = *param_9;
              if (iVar25 - param_10 <= param_10) goto LAB_0022c140;
              lVar26 = 0;
              lVar37 = lVar44;
              uVar9 = uVar19;
              do {
                lVar17 = lVar37;
                iVar25 = *(int *)(puVar30 + lVar26 * 4);
                iVar18 = iVar18 + param_10;
                lVar34 = lVar31 * 2 + lVar26;
                puVar36 = (uint *)(puVar23 + lVar17);
                *(uint *)(puVar23 + lVar26 * 4) = iVar25 + uVar13;
                bVar6 = pbVar22[lVar26];
                uVar13 = (uint)bVar6;
                uVar14 = (uint)bVar6;
                uVar9 = uVar9 + uVar14;
                piVar29[lVar26] = *(int *)((long)piVar20 + lVar17 + lVar16) + uVar9;
                piVar21[lVar26] =
                     (uint)bVar6 + *(int *)(puVar23 + lVar17) +
                     *(int *)((long)piVar32 + lVar17 + lVar1) + iVar25;
                lVar26 = lVar34 - lVar31;
                iVar25 = *param_9;
                fVar40 = fVar40 + (float)bVar6 * (float)uVar14;
                lVar37 = lVar17 + lVar28;
              } while (iVar18 < iVar25 - param_10);
            }
            else {
              *(undefined4 *)((long)pfVar33 + uVar11) = 0;
              *(int *)((long)piVar32 + uVar11) = *piVar42;
              fVar39 = *(float *)((long)pfVar33 +
                                 (-(ulong)((uint)-iVar8 >> 0x1f) & 0xfffffffc00000000 |
                                 (ulong)(uint)-iVar8 << 2));
              *piVar20 = uVar13 + *(int *)((long)piVar20 + uVar35);
              iVar25 = *piVar42;
              iVar4 = *(int *)(puVar23 + lVar28);
              *pfVar33 = fVar40 + fVar39;
              *piVar32 = uVar13 + iVar25 + iVar4;
              iVar25 = *param_9;
              if (param_10 < iVar25 - param_10) {
                lVar37 = 0;
                lVar26 = lVar44;
                uVar9 = uVar19;
                uVar13 = uVar14;
                do {
                  lVar17 = lVar26;
                  iVar25 = *(int *)(puVar30 + lVar37 * 4);
                  iVar18 = iVar18 + param_10;
                  fVar39 = *(float *)((long)pfVar33 + lVar17 + (lVar31 + iVar8) * -4);
                  lVar34 = lVar37 + lVar31 * 2;
                  *(uint *)(puVar23 + lVar37 * 4) = iVar25 + uVar13;
                  puVar36 = (uint *)(puVar23 + lVar17);
                  bVar6 = pbVar22[lVar37];
                  uVar13 = (uint)bVar6;
                  uVar14 = (uint)bVar6;
                  uVar9 = uVar9 + bVar6;
                  piVar29[lVar37] = *(int *)((long)piVar20 + lVar17 + lVar16) + uVar9;
                  iVar4 = *(int *)(puVar23 + lVar17);
                  iVar5 = *(int *)((long)piVar32 + lVar17 + lVar1);
                  fVar40 = fVar40 + (float)bVar6 * (float)(uint)bVar6;
                  pfVar33[lVar31 + lVar37] = fVar39 + fVar40;
                  piVar21[lVar37] = (uint)bVar6 + iVar4 + iVar5 + iVar25;
                  lVar37 = lVar34 - lVar31;
                  iVar25 = *param_9;
                  lVar26 = lVar17 + lVar28;
                } while (iVar18 < iVar25 - param_10);
              }
              else {
LAB_0022c140:
                puVar36 = (uint *)(puVar23 + lVar28);
                lVar17 = lVar28;
                lVar34 = lVar31;
              }
            }
            if (param_10 < iVar25) {
              uVar13 = *puVar36;
              *(uint *)(puVar23 + (long)(iVar18 - param_10) * 4) = uVar13 + uVar14;
              bVar6 = param_1[lVar34];
              uVar14 = (uint)bVar6;
              *(uint *)((long)piVar20 + lVar17) = piVar20[iVar18 - iVar38] + uVar9 + bVar6;
              if (pfVar33 != (float *)0x0) {
                *(float *)((long)pfVar33 + lVar17) =
                     pfVar33[iVar18 - iVar8] + fVar40 + (float)uVar14 * (float)(uint)bVar6;
              }
              *(uint *)((long)piVar32 + lVar17) =
                   uVar14 + uVar13 + piVar32[(iVar18 - iVar27) - param_10];
              *puVar36 = uVar14;
            }
            piVar20 = piVar20 + 1;
            if (pfVar33 != (float *)0x0) {
              pfVar33 = pfVar33 + 1;
            }
            piVar32 = piVar32 + 1;
            puVar23 = puVar23 + 4;
            param_1 = param_1 + 1;
            puVar30 = puVar30 + 4;
            pbVar22 = pbVar22 + 1;
            piVar29 = piVar29 + 1;
            piVar21 = piVar21 + 1;
            piVar42 = piVar42 + 1;
          } while (param_1 != pbVar3);
          piVar41 = (int *)((long)piVar41 + lVar43);
          puVar12 = puVar12 + lVar43;
          local_440 = (int *)((long)local_440 + lVar43);
          iVar18 = param_9[1];
          param_1 = pbVar3;
        }
        iVar10 = iVar10 + 1;
      } while (iVar10 < iVar18);
    }
    if (bVar7) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    pfVar33 = (float *)((long)param_5 + (long)(param_10 + iVar8) * 4);
    if (param_7 != (void *)0x0) goto LAB_0022ba3c;
    if (pfVar33 == (float *)0x0) goto LAB_0022ba80;
LAB_0022c1a0:
    iVar27 = param_9[1];
    if (0 < iVar27) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar35 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      iVar18 = 0;
      do {
        if (0 < param_10) {
          piVar20 = piVar41 + lVar1;
          pfVar24 = pfVar33;
          pbVar22 = param_1;
          do {
            *(undefined4 *)((long)piVar41 + uVar35) = 0;
            iVar27 = *param_9;
            *(undefined4 *)((long)pfVar24 + uVar35) = 0;
            if (0 < iVar27) {
              fVar40 = 0.0;
              lVar15 = 0;
              iVar10 = 0;
              iVar27 = 0;
              do {
                bVar6 = pbVar22[lVar15];
                iVar27 = iVar27 + param_10;
                fVar39 = *(float *)((long)pfVar24 +
                                   lVar15 * 4 +
                                   (-(ulong)((uint)-iVar8 >> 0x1f) & 0xfffffffc00000000 |
                                   (ulong)(uint)-iVar8 << 2));
                iVar10 = iVar10 + (uint)bVar6;
                piVar41[lVar15] =
                     *(int *)((long)piVar41 +
                             lVar15 * 4 +
                             (-(ulong)((uint)-iVar38 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar38 << 2)) + iVar10;
                iVar25 = *param_9;
                fVar40 = fVar40 + (float)bVar6 * (float)bVar6;
                pfVar24[lVar15] = fVar40 + fVar39;
                lVar15 = lVar15 + param_10;
              } while (iVar27 < iVar25);
            }
            piVar41 = piVar41 + 1;
            pbVar22 = pbVar22 + 1;
            pfVar24 = pfVar24 + 1;
          } while (piVar41 != piVar20);
          pfVar33 = pfVar33 + lVar1;
          param_1 = param_1 + lVar1;
          iVar27 = param_9[1];
          piVar41 = piVar20;
        }
        iVar18 = iVar18 + 1;
        piVar41 = (int *)((long)piVar41 +
                         (-(ulong)((uint)(iVar38 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                         (ulong)(uint)(iVar38 - param_10) << 2));
        pfVar33 = (float *)((long)pfVar33 +
                           (-(ulong)((uint)(iVar8 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar8 - param_10) << 2));
        param_1 = param_1 + (param_2 - param_10);
      } while (iVar18 < iVar27);
    }
  }
  return;
}


==================================================================

### FUNC 0022c2f0 (52 bytes) name=FUN_0022c2f0

void FUN_0022c2f0(void)

{
  FUN_0022b96c();
  return;
}


==================================================================

### FUNC 0022c324 (2324 bytes) name=FUN_0022c324

void FUN_0022c324(byte *param_1,int param_2,void *param_3,ulong param_4,void *param_5,ulong param_6,
                 void *param_7,ulong param_8,int *param_9,int param_10)

{
  long lVar1;
  undefined1 *puVar2;
  uint uVar3;
  byte *pbVar4;
  byte bVar5;
  bool bVar6;
  int iVar7;
  ulong uVar8;
  undefined1 *puVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  undefined1 *puVar14;
  byte *pbVar15;
  float *pfVar16;
  float *pfVar17;
  undefined1 *puVar18;
  float *pfVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  float *pfVar23;
  float *pfVar24;
  float *pfVar25;
  ulong uVar26;
  long lVar27;
  int iVar28;
  int iVar29;
  long lVar30;
  int iVar31;
  long lVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float *pfVar36;
  float fVar37;
  long lVar38;
  int iVar39;
  long lVar40;
  int iVar41;
  undefined1 auStack_420 [1056];
  
  iVar28 = *param_9;
  iVar22 = (int)(param_6 >> 2);
  *param_9 = param_10 * iVar28;
  iVar31 = (int)(param_4 >> 2);
  uVar3 = param_10 + param_10 * iVar28;
  iVar28 = (int)(param_8 >> 2);
  memset(param_3,0,-(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2);
  pfVar36 = (float *)((long)param_3 + (long)(param_10 + iVar31) * 4);
  if (param_5 == (void *)0x0) {
    pfVar25 = (float *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022c42c;
LAB_0022c3ec:
    memset(param_7,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    pfVar16 = (float *)((long)param_7 + (long)(param_10 + iVar28) * 4);
    bVar6 = pfVar16 == (float *)0x0;
    if (pfVar25 == (float *)0x0) {
      if (bVar6) {
LAB_0022c42c:
        iVar28 = param_9[1];
        if (iVar28 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        iVar22 = 0;
        do {
          if (0 < param_10) {
            pfVar25 = pfVar36 + lVar1;
            iVar39 = *param_9;
            pbVar15 = param_1;
            do {
              *(undefined4 *)
               ((long)pfVar36 +
               (-(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2
               )) = 0;
              if (0 < iVar39) {
                fVar35 = 0.0;
                lVar11 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  fVar35 = fVar35 + (float)pbVar15[lVar11];
                  pfVar36[lVar11] =
                       *(float *)((long)pfVar36 +
                                 lVar11 * 4 +
                                 (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffffc00000000 |
                                 (ulong)(uint)-iVar31 << 2)) + fVar35;
                  lVar11 = lVar11 + param_10;
                } while (iVar7 < iVar39);
              }
              pfVar36 = pfVar36 + 1;
              pbVar15 = pbVar15 + 1;
            } while (pfVar36 != pfVar25);
            param_1 = param_1 + lVar1;
            pfVar36 = pfVar25;
          }
          iVar22 = iVar22 + 1;
          param_1 = param_1 + (param_2 - param_10);
          pfVar36 = (float *)((long)pfVar36 +
                             (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar31 - param_10) << 2));
        } while (iVar22 != iVar28);
        return;
      }
    }
    else if (bVar6) goto LAB_0022caf4;
    puVar2 = auStack_420;
    uVar26 = (ulong)(param_10 + *param_9);
    if (0x108 < uVar26) {
      uVar8 = uVar26 << 2;
      if (0x1fc0000000000000 < uVar26) {
        uVar8 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar8);
      bVar6 = puVar9 != puVar2;
      puVar2 = puVar9;
    }
    puVar9 = puVar2;
    if (0 < param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      lVar11 = (long)param_10;
      iVar39 = *param_9;
      pfVar23 = pfVar36 + lVar1;
      uVar26 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      pfVar17 = pfVar16;
      pbVar15 = param_1;
      do {
        *(undefined4 *)((long)pfVar17 + uVar26) = 0;
        *(undefined4 *)((long)pfVar36 + uVar26) = 0;
        if (iVar39 < 1) {
LAB_0022cacc:
          if (pfVar25 != (float *)0x0) {
LAB_0022c640:
            *(undefined4 *)((long)pfVar25 + uVar26) = 0;
            pfVar25 = pfVar25 + 1;
          }
        }
        else {
          if (pfVar25 != (float *)0x0) {
            fVar35 = 0.0;
            lVar10 = 0;
            iVar7 = 0;
            fVar37 = 0.0;
            do {
              iVar7 = iVar7 + param_10;
              fVar34 = (float)pbVar15[lVar10];
              fVar33 = (float)pbVar15[lVar10];
              pfVar17[lVar10] = fVar34;
              fVar35 = fVar35 + fVar33 * fVar34;
              fVar37 = fVar37 + fVar33;
              *(float *)(puVar9 + lVar10 * 4) = fVar34;
              pfVar36[lVar10] = fVar37;
              pfVar25[lVar10] = fVar35;
              lVar10 = lVar10 + lVar11;
            } while (iVar7 < iVar39);
            if (param_10 == iVar39) goto LAB_0022cac8;
            goto LAB_0022c640;
          }
          fVar35 = 0.0;
          iVar7 = 0;
          lVar10 = 0;
          do {
            iVar7 = iVar7 + param_10;
            fVar37 = (float)pbVar15[lVar10];
            fVar35 = fVar35 + (float)pbVar15[lVar10];
            pfVar17[lVar10] = fVar37;
            *(float *)(puVar9 + lVar10 * 4) = fVar37;
            pfVar36[lVar10] = fVar35;
            lVar10 = lVar10 + lVar11;
          } while (iVar7 < iVar39);
          if (param_10 == iVar39) {
LAB_0022cac8:
            *(undefined4 *)(puVar9 + lVar11 * 4) = 0;
            goto LAB_0022cacc;
          }
        }
        pfVar36 = pfVar36 + 1;
        pbVar15 = pbVar15 + 1;
        pfVar17 = pfVar17 + 1;
        puVar9 = puVar9 + 4;
      } while (pfVar36 != pfVar23);
      param_1 = param_1 + lVar1;
      pfVar16 = pfVar16 + lVar1;
      puVar9 = puVar2 + lVar1 * 4;
      pfVar36 = pfVar23;
    }
    iVar39 = param_9[1];
    if (1 < iVar39) {
      lVar21 = (long)param_10;
      lVar11 = (ulong)(param_10 - 1) + 1;
      lVar20 = lVar21 * 4;
      lVar10 = (lVar21 + iVar31) * -4;
      lVar40 = NEON_shl(lVar21,3);
      lVar38 = NEON_shl(lVar11,2);
      iVar7 = 1;
      lVar1 = lVar21 * -0xc + (long)(param_10 - iVar28) * 4;
      uVar8 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      uVar26 = -(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar31 << 2;
      do {
        pfVar36 = (float *)((long)pfVar36 +
                           (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar31 - param_10) << 2));
        if (pfVar25 != (float *)0x0) {
          pfVar25 = (float *)((long)pfVar25 +
                             (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)(iVar22 - param_10) << 2));
        }
        param_1 = param_1 + (param_2 - param_10);
        pfVar16 = (float *)((long)pfVar16 +
                           (-(ulong)((uint)(iVar28 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar28 - param_10) << 2));
        puVar9 = puVar9 + uVar8;
        if (0 < param_10) {
          pbVar15 = param_1 + lVar21;
          iVar41 = *param_9;
          pfVar24 = (float *)((long)pfVar16 +
                             (-(ulong)((uint)-iVar28 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar28 << 2));
          puVar18 = puVar9 + lVar20;
          iVar13 = iVar41 - param_10;
          pbVar4 = param_1 + lVar11;
          puVar14 = puVar9;
          pfVar17 = pfVar36;
          pfVar23 = pfVar16;
          do {
            bVar5 = *param_1;
            *(undefined4 *)((long)pfVar17 + uVar8) = 0;
            fVar35 = (float)bVar5;
            fVar37 = fVar35 * (float)bVar5;
            iVar29 = param_10;
            if (pfVar25 == (float *)0x0) {
              *(float *)((long)pfVar23 + uVar8) = *pfVar24;
              *pfVar17 = fVar35 + *(float *)((long)pfVar17 + uVar26);
              *pfVar23 = fVar35 + *pfVar24 + *(float *)(puVar14 + lVar20);
              if (iVar13 <= param_10) goto LAB_0022cad4;
              lVar12 = 0;
              lVar32 = lVar40;
              fVar33 = fVar35;
              do {
                lVar30 = lVar32;
                fVar34 = *(float *)(puVar18 + lVar12 * 4);
                iVar29 = iVar29 + param_10;
                lVar27 = lVar21 * 2 + lVar12;
                pfVar19 = (float *)(puVar14 + lVar30);
                *(float *)(puVar14 + lVar12 * 4) = fVar34 + fVar33;
                fVar33 = (float)pbVar15[lVar12];
                fVar35 = fVar35 + fVar33;
                fVar37 = fVar37 + (float)pbVar15[lVar12] * fVar33;
                pfVar17[lVar21 + lVar12] = *(float *)((long)pfVar17 + lVar30 + lVar10) + fVar35;
                pfVar23[lVar21 + lVar12] =
                     fVar33 + *(float *)(puVar14 + lVar30) +
                     *(float *)((long)pfVar23 + lVar30 + lVar1) + fVar34;
                lVar12 = lVar27 - lVar21;
                lVar32 = lVar30 + lVar20;
              } while (iVar29 < iVar13);
            }
            else {
              *(undefined4 *)((long)pfVar25 + uVar8) = 0;
              *(float *)((long)pfVar23 + uVar8) = *pfVar24;
              *pfVar17 = fVar35 + *(float *)((long)pfVar17 + uVar26);
              *pfVar25 = fVar37 + *(float *)((long)pfVar25 +
                                            (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffffc00000000 |
                                            (ulong)(uint)-iVar22 << 2));
              *pfVar23 = fVar35 + *pfVar24 + *(float *)(puVar14 + lVar20);
              if (param_10 < iVar13) {
                lVar32 = 0;
                lVar12 = lVar40;
                fVar33 = fVar35;
                do {
                  lVar30 = lVar12;
                  fVar34 = *(float *)(puVar18 + lVar32 * 4);
                  iVar29 = iVar29 + param_10;
                  lVar27 = lVar32 + lVar21 * 2;
                  pfVar19 = (float *)(puVar14 + lVar30);
                  *(float *)(puVar14 + lVar32 * 4) = fVar34 + fVar33;
                  fVar33 = (float)pbVar15[lVar32];
                  fVar35 = fVar35 + fVar33;
                  fVar37 = fVar37 + (float)pbVar15[lVar32] * fVar33;
                  pfVar17[lVar21 + lVar32] = *(float *)((long)pfVar17 + lVar30 + lVar10) + fVar35;
                  pfVar25[lVar21 + lVar32] =
                       *(float *)((long)pfVar25 + lVar30 + (lVar21 + iVar22) * -4) + fVar37;
                  pfVar23[lVar21 + lVar32] =
                       fVar33 + *(float *)(puVar14 + lVar30) +
                       *(float *)((long)pfVar23 + lVar30 + lVar1) + fVar34;
                  lVar32 = lVar27 - lVar21;
                  lVar12 = lVar30 + lVar20;
                } while (iVar29 < iVar13);
              }
              else {
LAB_0022cad4:
                pfVar19 = (float *)(puVar14 + lVar20);
                lVar27 = lVar21;
                lVar30 = lVar20;
                fVar33 = fVar35;
              }
            }
            if (param_10 < iVar41) {
              fVar34 = *pfVar19;
              *(float *)(puVar14 + (long)(iVar29 - param_10) * 4) = fVar34 + fVar33;
              bVar5 = param_1[lVar27];
              fVar33 = (float)bVar5;
              *(float *)((long)pfVar17 + lVar30) = pfVar17[iVar29 - iVar31] + fVar35 + fVar33;
              if (pfVar25 != (float *)0x0) {
                *(float *)((long)pfVar25 + lVar30) =
                     pfVar25[iVar29 - iVar22] + fVar37 + (float)bVar5 * fVar33;
              }
              *(float *)((long)pfVar23 + lVar30) =
                   fVar33 + fVar34 + pfVar23[(iVar29 - iVar28) - param_10];
              *pfVar19 = fVar33;
            }
            param_1 = param_1 + 1;
            if (pfVar25 != (float *)0x0) {
              pfVar25 = pfVar25 + 1;
            }
            pfVar17 = pfVar17 + 1;
            pfVar23 = pfVar23 + 1;
            puVar14 = puVar14 + 4;
            pfVar24 = pfVar24 + 1;
            puVar18 = puVar18 + 4;
            pbVar15 = pbVar15 + 1;
          } while (param_1 != pbVar4);
          pfVar36 = (float *)((long)pfVar36 + lVar38);
          puVar9 = puVar9 + lVar38;
          pfVar16 = (float *)((long)pfVar16 + lVar38);
          param_1 = pbVar4;
        }
        iVar7 = iVar7 + 1;
      } while (iVar7 < iVar39);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)((uint)(param_10 + *param_9) >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(uint)(param_10 + *param_9) << 2);
    pfVar25 = (float *)((long)param_5 + (long)(param_10 + iVar22) * 4);
    if (param_7 != (void *)0x0) goto LAB_0022c3ec;
    if (pfVar25 == (float *)0x0) goto LAB_0022c42c;
LAB_0022caf4:
    iVar28 = param_9[1];
    if (0 < iVar28) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar26 = -(ulong)((uint)-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-param_10 << 2;
      iVar39 = 0;
      do {
        if (0 < param_10) {
          pfVar17 = pfVar36 + lVar1;
          iVar7 = *param_9;
          pfVar16 = pfVar25;
          pbVar15 = param_1;
          do {
            *(undefined4 *)((long)pfVar36 + uVar26) = 0;
            *(undefined4 *)((long)pfVar16 + uVar26) = 0;
            if (0 < iVar7) {
              fVar37 = 0.0;
              lVar11 = 0;
              iVar13 = 0;
              fVar35 = fVar37;
              do {
                iVar13 = iVar13 + param_10;
                fVar33 = *(float *)((long)pfVar16 +
                                   lVar11 * 4 +
                                   (-(ulong)((uint)-iVar22 >> 0x1f) & 0xfffffffc00000000 |
                                   (ulong)(uint)-iVar22 << 2));
                fVar34 = (float)pbVar15[lVar11];
                fVar35 = fVar35 + fVar34;
                fVar37 = fVar37 + (float)pbVar15[lVar11] * fVar34;
                pfVar36[lVar11] =
                     *(float *)((long)pfVar36 +
                               lVar11 * 4 +
                               (-(ulong)((uint)-iVar31 >> 0x1f) & 0xfffffffc00000000 |
                               (ulong)(uint)-iVar31 << 2)) + fVar35;
                pfVar16[lVar11] = fVar37 + fVar33;
                lVar11 = lVar11 + param_10;
              } while (iVar13 < iVar7);
            }
            pfVar36 = pfVar36 + 1;
            pbVar15 = pbVar15 + 1;
            pfVar16 = pfVar16 + 1;
          } while (pfVar36 != pfVar17);
          param_1 = param_1 + lVar1;
          pfVar25 = pfVar25 + lVar1;
          pfVar36 = pfVar17;
        }
        iVar39 = iVar39 + 1;
        param_1 = param_1 + (param_2 - param_10);
        pfVar36 = (float *)((long)pfVar36 +
                           (-(ulong)((uint)(iVar31 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar31 - param_10) << 2));
        pfVar25 = (float *)((long)pfVar25 +
                           (-(ulong)((uint)(iVar22 - param_10) >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(uint)(iVar22 - param_10) << 2));
      } while (iVar39 != iVar28);
    }
  }
  return;
}


==================================================================

### FUNC 0022cc38 (52 bytes) name=FUN_0022cc38

void FUN_0022cc38(void)

{
  FUN_0022c324();
  return;
}


==================================================================

### FUNC 0022cc6c (2216 bytes) name=FUN_0022cc6c

void FUN_0022cc6c(float *param_1,ulong param_2,void *param_3,ulong param_4,void *param_5,
                 ulong param_6,void *param_7,ulong param_8,uint *param_9,uint param_10)

{
  long lVar1;
  undefined1 *puVar2;
  float *pfVar3;
  int iVar4;
  long lVar5;
  bool bVar6;
  int iVar7;
  int iVar8;
  ulong uVar9;
  undefined1 *puVar10;
  uint uVar11;
  int iVar12;
  long lVar13;
  float *pfVar14;
  float *pfVar15;
  undefined1 *puVar16;
  float *pfVar17;
  float *pfVar18;
  float *pfVar19;
  float *pfVar20;
  float *pfVar21;
  long lVar22;
  undefined1 *puVar23;
  long lVar24;
  uint uVar25;
  float *pfVar26;
  float *pfVar27;
  long lVar28;
  int iVar29;
  ulong uVar30;
  long lVar31;
  int iVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float *pfVar36;
  float fVar37;
  long lVar38;
  uint uVar39;
  long lVar40;
  undefined1 auStack_420 [1056];
  
  uVar39 = *param_9;
  iVar7 = (int)(param_6 >> 2);
  iVar29 = (int)(param_4 >> 2);
  *param_9 = param_10 * uVar39;
  uVar39 = param_10 + param_10 * uVar39;
  iVar12 = (int)(param_8 >> 2);
  memset(param_3,0,-(ulong)(uVar39 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar39 << 2);
  pfVar36 = (float *)((long)param_3 + (long)(int)(param_10 + iVar29) * 4);
  iVar32 = (int)(param_2 >> 2);
  if (param_5 == (void *)0x0) {
    pfVar14 = (float *)0x0;
    if (param_7 == (void *)0x0) goto LAB_0022cd88;
LAB_0022cd3c:
    memset(param_7,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(param_10 + *param_9) << 2);
    pfVar19 = (float *)((long)param_7 + (long)(int)(param_10 + iVar12) * 4);
    bVar6 = pfVar19 == (float *)0x0;
    if (pfVar14 == (float *)0x0) {
      if (bVar6) {
LAB_0022cd88:
        uVar39 = param_9[1];
        if ((int)uVar39 < 1) {
          return;
        }
        lVar1 = (ulong)(param_10 - 1) + 1;
        uVar25 = 0;
        do {
          if (0 < (int)param_10) {
            pfVar19 = pfVar36 + lVar1;
            uVar11 = *param_9;
            pfVar14 = param_1;
            do {
              *(undefined4 *)
               ((long)pfVar36 +
               (-(ulong)(-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_10 << 2)) = 0;
              if (0 < (int)uVar11) {
                fVar34 = 0.0;
                lVar13 = 0;
                iVar7 = 0;
                do {
                  iVar7 = iVar7 + param_10;
                  fVar34 = fVar34 + *(float *)((long)pfVar14 + lVar13);
                  *(float *)((long)pfVar36 + lVar13) =
                       *(float *)((long)pfVar36 +
                                 lVar13 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffffc00000000 |
                                          (ulong)(uint)-iVar29 << 2)) + fVar34;
                  lVar13 = lVar13 + (long)(int)param_10 * 4;
                } while (iVar7 < (int)uVar11);
              }
              pfVar36 = pfVar36 + 1;
              pfVar14 = pfVar14 + 1;
            } while (pfVar36 != pfVar19);
            param_1 = param_1 + lVar1;
            pfVar36 = pfVar19;
          }
          uVar25 = uVar25 + 1;
          param_1 = (float *)((long)param_1 +
                             (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(iVar32 - param_10) << 2));
          pfVar36 = (float *)((long)pfVar36 +
                             (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(iVar29 - param_10) << 2));
        } while (uVar25 != uVar39);
        return;
      }
    }
    else if (bVar6) goto LAB_0022d3e0;
    puVar2 = auStack_420;
    uVar30 = (ulong)(int)(param_10 + *param_9);
    if (0x108 < uVar30) {
      uVar9 = uVar30 << 2;
      if (0x1fc0000000000000 < uVar30) {
        uVar9 = 0xffffffffffffffff;
      }
      puVar10 = operator_new__(uVar9);
      bVar6 = puVar10 != puVar2;
      puVar2 = puVar10;
    }
    puVar10 = puVar2;
    if (0 < (int)param_10) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar9 = -(ulong)(-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_10 << 2;
      uVar39 = *param_9;
      pfVar27 = pfVar36 + lVar1;
      uVar30 = -(ulong)(param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_10 << 2;
      pfVar15 = pfVar19;
      pfVar17 = param_1;
      do {
        *(undefined4 *)((long)pfVar15 + uVar9) = 0;
        *(undefined4 *)((long)pfVar36 + uVar9) = 0;
        if ((int)uVar39 < 1) {
LAB_0022d3bc:
          if (pfVar14 != (float *)0x0) {
LAB_0022cf88:
            *(undefined4 *)((long)pfVar14 + uVar9) = 0;
            pfVar14 = pfVar14 + 1;
          }
        }
        else {
          fVar34 = 0.0;
          if (pfVar14 != (float *)0x0) {
            fVar35 = 0.0;
            lVar13 = 0;
            iVar8 = 0;
            do {
              fVar33 = *(float *)((long)pfVar17 + lVar13);
              iVar8 = iVar8 + param_10;
              fVar34 = fVar34 + fVar33 * fVar33;
              fVar35 = fVar35 + fVar33;
              *(float *)((long)pfVar15 + lVar13) = fVar33;
              *(float *)(puVar10 + lVar13) = fVar33;
              *(float *)((long)pfVar36 + lVar13) = fVar35;
              *(float *)((long)pfVar14 + lVar13) = fVar34;
              lVar13 = lVar13 + uVar30;
            } while (iVar8 < (int)uVar39);
            if (param_10 == uVar39) goto LAB_0022d3b8;
            goto LAB_0022cf88;
          }
          iVar8 = 0;
          lVar13 = 0;
          do {
            fVar35 = *(float *)((long)pfVar17 + lVar13);
            iVar8 = iVar8 + param_10;
            fVar34 = fVar34 + fVar35;
            *(float *)((long)pfVar15 + lVar13) = fVar35;
            *(float *)(puVar10 + lVar13) = fVar35;
            *(float *)((long)pfVar36 + lVar13) = fVar34;
            lVar13 = lVar13 + uVar30;
          } while (iVar8 < (int)uVar39);
          if (param_10 == uVar39) {
LAB_0022d3b8:
            *(undefined4 *)(puVar10 + uVar30) = 0;
            goto LAB_0022d3bc;
          }
        }
        pfVar36 = pfVar36 + 1;
        pfVar17 = pfVar17 + 1;
        pfVar15 = pfVar15 + 1;
        puVar10 = puVar10 + 4;
      } while (pfVar36 != pfVar27);
      param_1 = param_1 + lVar1;
      pfVar19 = pfVar19 + lVar1;
      puVar10 = puVar2 + lVar1 * 4;
      pfVar36 = pfVar27;
    }
    uVar39 = param_9[1];
    if (1 < (int)uVar39) {
      lVar13 = (long)(int)param_10;
      lVar38 = NEON_shl((ulong)(param_10 - 1) + 1,2);
      lVar24 = lVar13 * 4;
      uVar30 = -(ulong)(-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_10 << 2;
      uVar9 = -(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uint)-iVar29 << 2;
      lVar40 = NEON_shl(lVar13,3);
      lVar28 = (lVar13 + iVar29) * -4;
      iVar8 = 1;
      lVar1 = lVar13 * -0xc + (long)(int)(param_10 - iVar12) * 4;
      do {
        pfVar36 = (float *)((long)pfVar36 +
                           (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar29 - param_10) << 2));
        if (pfVar14 != (float *)0x0) {
          pfVar14 = (float *)((long)pfVar14 +
                             (-(ulong)(iVar7 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(iVar7 - param_10) << 2));
        }
        param_1 = (float *)((long)param_1 +
                           (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar32 - param_10) << 2));
        pfVar19 = (float *)((long)pfVar19 +
                           (-(ulong)(iVar12 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar12 - param_10) << 2));
        puVar10 = puVar10 + uVar30;
        if (0 < (int)param_10) {
          pfVar21 = param_1 + lVar13;
          pfVar18 = pfVar19 + lVar13;
          uVar25 = *param_9;
          iVar4 = uVar25 - param_10;
          pfVar27 = (float *)((long)pfVar19 +
                             (-(ulong)((uint)-iVar12 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uint)-iVar12 << 2));
          puVar23 = puVar10 + lVar24;
          pfVar20 = pfVar36 + lVar13;
          pfVar3 = (float *)((long)param_1 + lVar38);
          puVar16 = puVar10;
          pfVar17 = pfVar36;
          pfVar15 = pfVar19;
          do {
            fVar34 = *param_1;
            *(undefined4 *)((long)pfVar17 + uVar30) = 0;
            fVar35 = fVar34 * fVar34;
            uVar11 = param_10;
            if (pfVar14 == (float *)0x0) {
              *(float *)((long)pfVar15 + uVar30) = *pfVar27;
              *pfVar17 = fVar34 + *(float *)((long)pfVar17 + uVar9);
              *pfVar15 = fVar34 + *pfVar27 + *(float *)(puVar16 + lVar24);
              if (iVar4 <= (int)param_10) goto LAB_0022d3c4;
              lVar22 = 0;
              lVar5 = lVar40;
              fVar33 = fVar34;
              do {
                lVar31 = lVar5;
                fVar37 = *(float *)(puVar23 + lVar22);
                uVar11 = uVar11 + param_10;
                pfVar26 = (float *)(puVar16 + lVar31);
                *(float *)(puVar16 + lVar22) = fVar37 + fVar33;
                fVar33 = *(float *)((long)pfVar21 + lVar22);
                fVar34 = fVar34 + fVar33;
                fVar35 = fVar35 + fVar33 * fVar33;
                *(float *)((long)pfVar20 + lVar22) =
                     *(float *)((long)pfVar17 + lVar31 + lVar28) + fVar34;
                *(float *)((long)pfVar18 + lVar22) =
                     fVar33 + *(float *)(puVar16 + lVar31) +
                     *(float *)((long)pfVar15 + lVar31 + lVar1) + fVar37;
                lVar22 = lVar22 + lVar24;
                lVar5 = lVar31 + lVar24;
              } while ((int)uVar11 < iVar4);
            }
            else {
              *(undefined4 *)((long)pfVar14 + uVar30) = 0;
              *(float *)((long)pfVar15 + uVar30) = *pfVar27;
              *pfVar17 = fVar34 + *(float *)((long)pfVar17 + uVar9);
              *pfVar14 = fVar35 + *(float *)((long)pfVar14 +
                                            (-(ulong)((uint)-iVar7 >> 0x1f) & 0xfffffffc00000000 |
                                            (ulong)(uint)-iVar7 << 2));
              *pfVar15 = fVar34 + *pfVar27 + *(float *)(puVar16 + lVar24);
              if ((int)param_10 < iVar4) {
                lVar22 = 0;
                lVar5 = lVar40;
                fVar33 = fVar34;
                do {
                  lVar31 = lVar5;
                  fVar37 = *(float *)(puVar23 + lVar22);
                  uVar11 = uVar11 + param_10;
                  pfVar26 = (float *)(puVar16 + lVar31);
                  *(float *)(puVar16 + lVar22) = fVar37 + fVar33;
                  fVar33 = *(float *)((long)pfVar21 + lVar22);
                  fVar34 = fVar34 + fVar33;
                  fVar35 = fVar35 + fVar33 * fVar33;
                  *(float *)((long)pfVar20 + lVar22) =
                       *(float *)((long)pfVar17 + lVar31 + lVar28) + fVar34;
                  *(float *)((long)pfVar14 + lVar22 + lVar24) =
                       *(float *)((long)pfVar14 + lVar31 + (lVar13 + iVar7) * -4) + fVar35;
                  *(float *)((long)pfVar18 + lVar22) =
                       fVar33 + *(float *)(puVar16 + lVar31) +
                       *(float *)((long)pfVar15 + lVar31 + lVar1) + fVar37;
                  lVar22 = lVar22 + lVar24;
                  lVar5 = lVar31 + lVar24;
                } while ((int)uVar11 < iVar4);
              }
              else {
LAB_0022d3c4:
                pfVar26 = (float *)(puVar16 + lVar24);
                lVar31 = lVar24;
                fVar33 = fVar34;
              }
            }
            if ((int)param_10 < (int)uVar25) {
              fVar37 = *pfVar26;
              *(float *)(puVar16 + (long)(int)(uVar11 - param_10) * 4) = fVar37 + fVar33;
              fVar33 = *(float *)((long)param_1 + lVar31);
              *(float *)((long)pfVar17 + lVar31) = pfVar17[(int)(uVar11 - iVar29)] + fVar34 + fVar33
              ;
              if (pfVar14 != (float *)0x0) {
                *(float *)((long)pfVar14 + lVar31) =
                     pfVar14[(int)(uVar11 - iVar7)] + fVar35 + fVar33 * fVar33;
              }
              *(float *)((long)pfVar15 + lVar31) =
                   fVar37 + fVar33 + pfVar15[(int)((uVar11 - iVar12) - param_10)];
              *pfVar26 = fVar33;
            }
            param_1 = param_1 + 1;
            if (pfVar14 != (float *)0x0) {
              pfVar14 = pfVar14 + 1;
            }
            pfVar17 = pfVar17 + 1;
            pfVar15 = pfVar15 + 1;
            puVar16 = puVar16 + 4;
            pfVar27 = pfVar27 + 1;
            puVar23 = puVar23 + 4;
            pfVar21 = pfVar21 + 1;
            pfVar20 = pfVar20 + 1;
            pfVar18 = pfVar18 + 1;
          } while (param_1 != pfVar3);
          pfVar36 = (float *)((long)pfVar36 + lVar38);
          puVar10 = puVar10 + lVar38;
          pfVar19 = (float *)((long)pfVar19 + lVar38);
          param_1 = pfVar3;
        }
        iVar8 = iVar8 + 1;
      } while (iVar8 < (int)uVar39);
    }
    if (bVar6) {
      operator_delete__(puVar2);
    }
  }
  else {
    memset(param_5,0,
           -(ulong)(param_10 + *param_9 >> 0x1f) & 0xfffffffc00000000 |
           (ulong)(param_10 + *param_9) << 2);
    pfVar14 = (float *)((long)param_5 + (long)(int)(param_10 + iVar7) * 4);
    if (param_7 != (void *)0x0) goto LAB_0022cd3c;
    if (pfVar14 == (float *)0x0) goto LAB_0022cd88;
LAB_0022d3e0:
    uVar39 = param_9[1];
    if (0 < (int)uVar39) {
      lVar1 = (ulong)(param_10 - 1) + 1;
      uVar30 = -(ulong)(-param_10 >> 0x1f) & 0xfffffffc00000000 | (ulong)-param_10 << 2;
      uVar25 = 0;
      do {
        if (0 < (int)param_10) {
          pfVar15 = pfVar36 + lVar1;
          uVar11 = *param_9;
          pfVar17 = pfVar14;
          pfVar19 = param_1;
          do {
            *(undefined4 *)((long)pfVar36 + uVar30) = 0;
            *(undefined4 *)((long)pfVar17 + uVar30) = 0;
            if (0 < (int)uVar11) {
              fVar34 = 0.0;
              lVar13 = 0;
              iVar12 = 0;
              fVar35 = 0.0;
              do {
                fVar33 = *(float *)((long)pfVar19 + lVar13);
                iVar12 = iVar12 + param_10;
                fVar34 = fVar34 + fVar33 * fVar33;
                fVar35 = fVar35 + fVar33;
                fVar33 = *(float *)((long)pfVar17 +
                                   lVar13 + (-(ulong)((uint)-iVar7 >> 0x1f) & 0xfffffffc00000000 |
                                            (ulong)(uint)-iVar7 << 2));
                *(float *)((long)pfVar36 + lVar13) =
                     *(float *)((long)pfVar36 +
                               lVar13 + (-(ulong)((uint)-iVar29 >> 0x1f) & 0xfffffffc00000000 |
                                        (ulong)(uint)-iVar29 << 2)) + fVar35;
                *(float *)((long)pfVar17 + lVar13) = fVar34 + fVar33;
                lVar13 = lVar13 + (long)(int)param_10 * 4;
              } while (iVar12 < (int)uVar11);
            }
            pfVar36 = pfVar36 + 1;
            pfVar19 = pfVar19 + 1;
            pfVar17 = pfVar17 + 1;
          } while (pfVar36 != pfVar15);
          param_1 = param_1 + lVar1;
          pfVar14 = pfVar14 + lVar1;
          pfVar36 = pfVar15;
        }
        uVar25 = uVar25 + 1;
        param_1 = (float *)((long)param_1 +
                           (-(ulong)(iVar32 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar32 - param_10) << 2));
        pfVar36 = (float *)((long)pfVar36 +
                           (-(ulong)(iVar29 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar29 - param_10) << 2));
        pfVar14 = (float *)((long)pfVar14 +
                           (-(ulong)(iVar7 - param_10 >> 0x1f) & 0xfffffffc00000000 |
                           (ulong)(iVar7 - param_10) << 2));
      } while (uVar25 != uVar39);
    }
  }
  return;
}


==================================================================

### FUNC 0022d514 (52 bytes) name=FUN_0022d514

void FUN_0022d514(void)

{
  FUN_0022cc6c();
  return;
}


==================================================================

### FUNC 0022d548 (136 bytes) name=fastMalloc

/* cv::fastMalloc(unsigned long) */

ulong cv::fastMalloc(ulong param_1)

{
  void *pvVar1;
  ulong uVar2;
  String aSStack_10 [16];
  
  pvVar1 = malloc(param_1 + 0x18);
  if (pvVar1 == (void *)0x0) {
    format("Failed to allocate %lu bytes",aSStack_10,param_1);
    error(-4,aSStack_10,"void* cv::OutOfMemoryError(size_t)",
          "/builds/master_pack-android/opencv/modules/core/src/alloc.cpp",0x34);
    String::deallocate(aSStack_10);
    uVar2 = 0;
  }
  else {
    uVar2 = (long)pvVar1 + 0x17U & 0xfffffffffffffff0;
    *(void **)(uVar2 - 8) = pvVar1;
  }
  return uVar2;
}


==================================================================

### FUNC 0022d5e4 (16 bytes) name=fastFree

/* cv::fastFree(void*) */

void cv::fastFree(void *param_1)

{
  if (param_1 != (void *)0x0) {
    free(*(void **)((long)param_1 + -8));
    return;
  }
  return;
}


==================================================================

### FUNC 0022d5f4 (4 bytes) name=cvAlloc

void cv::cvAlloc(ulong param_1)

{
  (*(code *)PTR_fastMalloc_004ffbc8)();
  return;
}


==================================================================

### FUNC 0022d5f8 (4 bytes) name=cvFree_

void cv::cvFree_(void *param_1)

{
  (*(code *)PTR_fastFree_00500e90)();
  return;
}


==================================================================

### FUNC 0022d5fc (720 bytes) name=FUN_0022d5fc

void FUN_0022d5fc(double *param_1,long param_2,double *param_3,long param_4,double *param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  ulong uVar14;
  uint uVar15;
  long lVar16;
  double *pdVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  
  iVar4 = *param_7;
  iVar21 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar20 = (long)iVar5;
    lVar3 = lVar20 + 2;
    pdVar19 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
             param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 6)) {
          pdVar13 = param_5 + 1;
          pdVar12 = param_3;
          pdVar17 = param_1;
          do {
            pdVar9 = pdVar13 + 4;
            dVar22 = *pdVar17;
            dVar25 = *pdVar12;
            *pdVar13 = pdVar17[1] + pdVar12[1];
            pdVar13[-1] = dVar22 + dVar25;
            dVar22 = pdVar17[2];
            dVar25 = pdVar12[2];
            pdVar13[2] = pdVar17[3] + pdVar12[3];
            pdVar13[1] = dVar22 + dVar25;
            pdVar13 = pdVar9;
            pdVar12 = pdVar12 + 4;
            pdVar17 = pdVar17 + 4;
          } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar18 = 0;
          pdVar12 = param_3;
          pdVar13 = param_1;
          pdVar17 = param_5;
          do {
            pdVar9 = pdVar13 + 1;
            dVar23 = *pdVar13;
            pdVar10 = pdVar12 + 1;
            dVar27 = *pdVar12;
            dVar25 = pdVar13[3];
            dVar22 = pdVar13[2];
            dVar26 = pdVar12[3];
            dVar24 = pdVar12[2];
            uVar18 = uVar18 + 1;
            pdVar13 = pdVar13 + 4;
            pdVar12 = pdVar12 + 4;
            pdVar17[1] = *pdVar9 + *pdVar10;
            *pdVar17 = dVar23 + dVar27;
            pdVar17[3] = dVar25 + dVar26;
            pdVar17[2] = dVar22 + dVar24;
            pdVar17 = pdVar17 + 4;
          } while (uVar18 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar13 = param_1 + lVar20;
        pdVar12 = param_5 + lVar20;
        if ((pdVar13 < param_5 + lVar3 && pdVar12 < param_1 + lVar3 ||
             param_3 + lVar20 < param_5 + lVar3 && pdVar12 < param_3 + lVar3) || (uVar8 < 9)) {
          lVar16 = 0;
          do {
            *(double *)((long)pdVar12 + lVar16) =
                 *(double *)((long)pdVar13 + lVar16) +
                 *(double *)((long)(param_3 + lVar20) + lVar16);
            lVar16 = lVar16 + 8;
          } while (lVar16 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar13 >> 3) & 1;
          uVar18 = uVar8;
          if (uVar2 < uVar8) {
            uVar18 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar18 != 0) {
            param_5[lVar20] = param_1[lVar20] + param_3[lVar20];
            iVar11 = iVar5 + 1;
          }
          uVar15 = 0;
          uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar13 = param_5 + (ulong)uVar18 + lVar20;
          pdVar12 = param_3 + (ulong)uVar18 + lVar20;
          pdVar17 = param_1 + (ulong)uVar18 + lVar20;
          do {
            dVar22 = *pdVar12;
            uVar15 = uVar15 + 1;
            dVar25 = *pdVar17;
            pdVar13[1] = pdVar12[1] + pdVar17[1];
            *pdVar13 = dVar22 + dVar25;
            pdVar13 = pdVar13 + 2;
            pdVar12 = pdVar12 + 2;
            pdVar17 = pdVar17 + 2;
          } while (uVar15 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar18 != iVar6) {
            uVar14 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar14) =
                 *(double *)((long)param_1 + uVar14) + *(double *)((long)param_3 + uVar14);
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_3 = (double *)((long)param_3 + param_4);
      param_5 = (double *)((long)param_5 + param_6);
      pdVar19 = (double *)((long)pdVar19 + param_6);
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022d8cc (720 bytes) name=FUN_0022d8cc

void FUN_0022d8cc(double *param_1,long param_2,double *param_3,long param_4,double *param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  ulong uVar14;
  uint uVar15;
  long lVar16;
  double *pdVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  
  iVar4 = *param_7;
  iVar21 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar20 = (long)iVar5;
    lVar3 = lVar20 + 2;
    pdVar19 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
             param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 6)) {
          pdVar13 = param_5 + 1;
          pdVar12 = param_3;
          pdVar17 = param_1;
          do {
            pdVar9 = pdVar13 + 4;
            dVar22 = *pdVar17;
            dVar25 = *pdVar12;
            *pdVar13 = pdVar17[1] - pdVar12[1];
            pdVar13[-1] = dVar22 - dVar25;
            dVar22 = pdVar17[2];
            dVar25 = pdVar12[2];
            pdVar13[2] = pdVar17[3] - pdVar12[3];
            pdVar13[1] = dVar22 - dVar25;
            pdVar13 = pdVar9;
            pdVar12 = pdVar12 + 4;
            pdVar17 = pdVar17 + 4;
          } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar18 = 0;
          pdVar12 = param_3;
          pdVar13 = param_1;
          pdVar17 = param_5;
          do {
            pdVar9 = pdVar13 + 1;
            dVar23 = *pdVar13;
            pdVar10 = pdVar12 + 1;
            dVar27 = *pdVar12;
            dVar25 = pdVar13[3];
            dVar22 = pdVar13[2];
            dVar26 = pdVar12[3];
            dVar24 = pdVar12[2];
            uVar18 = uVar18 + 1;
            pdVar13 = pdVar13 + 4;
            pdVar12 = pdVar12 + 4;
            pdVar17[1] = *pdVar9 - *pdVar10;
            *pdVar17 = dVar23 - dVar27;
            pdVar17[3] = dVar25 - dVar26;
            pdVar17[2] = dVar22 - dVar24;
            pdVar17 = pdVar17 + 4;
          } while (uVar18 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar13 = param_1 + lVar20;
        pdVar12 = param_5 + lVar20;
        if ((pdVar13 < param_5 + lVar3 && pdVar12 < param_1 + lVar3 ||
             param_3 + lVar20 < param_5 + lVar3 && pdVar12 < param_3 + lVar3) || (uVar8 < 9)) {
          lVar16 = 0;
          do {
            *(double *)((long)pdVar12 + lVar16) =
                 *(double *)((long)pdVar13 + lVar16) -
                 *(double *)((long)(param_3 + lVar20) + lVar16);
            lVar16 = lVar16 + 8;
          } while (lVar16 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar13 >> 3) & 1;
          uVar18 = uVar8;
          if (uVar2 < uVar8) {
            uVar18 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar18 != 0) {
            param_5[lVar20] = param_1[lVar20] - param_3[lVar20];
            iVar11 = iVar5 + 1;
          }
          uVar15 = 0;
          uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar13 = param_5 + (ulong)uVar18 + lVar20;
          pdVar12 = param_3 + (ulong)uVar18 + lVar20;
          pdVar17 = param_1 + (ulong)uVar18 + lVar20;
          do {
            dVar25 = *pdVar12;
            uVar15 = uVar15 + 1;
            dVar22 = *pdVar17;
            pdVar13[1] = pdVar17[1] - pdVar12[1];
            *pdVar13 = dVar22 - dVar25;
            pdVar13 = pdVar13 + 2;
            pdVar12 = pdVar12 + 2;
            pdVar17 = pdVar17 + 2;
          } while (uVar15 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar18 != iVar6) {
            uVar14 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar14) =
                 *(double *)((long)param_1 + uVar14) - *(double *)((long)param_3 + uVar14);
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_3 = (double *)((long)param_3 + param_4);
      param_5 = (double *)((long)param_5 + param_6);
      pdVar19 = (double *)((long)pdVar19 + param_6);
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022db9c (796 bytes) name=FUN_0022db9c

void FUN_0022db9c(double *param_1,long param_2,double *param_3,long param_4,double *param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  double *pdVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  ulong uVar20;
  double *pdVar21;
  uint uVar22;
  uint uVar23;
  double *pdVar24;
  long lVar25;
  double *pdVar26;
  double *pdVar27;
  double *pdVar28;
  double *pdVar29;
  long lVar30;
  int iVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  
  iVar4 = *param_7;
  iVar31 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar30 = (long)iVar5;
    lVar3 = lVar30 + 2;
    pdVar29 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar29 && param_5 < param_1 + 8 ||
             param_3 < pdVar29 && param_5 < param_3 + 8) || (uVar1 < 0xb)) {
          pdVar21 = param_5 + 1;
          pdVar24 = param_3;
          pdVar26 = param_1;
          do {
            dVar36 = pdVar26[1];
            dVar32 = pdVar24[1];
            dVar33 = *pdVar24;
            if (*pdVar24 <= *pdVar26) {
              dVar33 = *pdVar26;
            }
            pdVar21[-1] = dVar33;
            if (dVar32 <= dVar36) {
              dVar32 = dVar36;
            }
            *pdVar21 = dVar32;
            dVar36 = pdVar26[3];
            dVar32 = pdVar24[3];
            dVar33 = pdVar24[2];
            if (pdVar24[2] <= pdVar26[2]) {
              dVar33 = pdVar26[2];
            }
            pdVar21[1] = dVar33;
            if (dVar32 <= dVar36) {
              dVar32 = dVar36;
            }
            pdVar28 = pdVar21 + 4;
            pdVar21[2] = dVar32;
            pdVar21 = pdVar28;
            pdVar24 = pdVar24 + 4;
            pdVar26 = pdVar26 + 4;
          } while (pdVar28 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          pdVar21 = param_1 + 2;
          pdVar24 = param_3 + 2;
          uVar22 = 0;
          pdVar27 = param_5;
          pdVar28 = param_3;
          pdVar26 = param_1;
          do {
            pdVar9 = pdVar26 + 1;
            dVar40 = *pdVar26;
            dVar36 = *pdVar26;
            pdVar14 = pdVar26 + 1;
            dVar32 = *pdVar26;
            pdVar13 = pdVar26 + 1;
            pdVar10 = pdVar28 + 1;
            dVar41 = *pdVar28;
            dVar33 = *pdVar28;
            pdVar12 = pdVar28 + 1;
            uVar22 = uVar22 + 1;
            dVar37 = pdVar21[1];
            dVar34 = *pdVar21;
            dVar18 = *pdVar21;
            dVar19 = pdVar21[1];
            dVar16 = *pdVar21;
            dVar17 = pdVar21[1];
            dVar39 = pdVar24[1];
            dVar38 = *pdVar24;
            dVar35 = *pdVar24;
            dVar15 = pdVar24[1];
            pdVar26 = pdVar26 + 4;
            pdVar28 = pdVar28 + 4;
            pdVar21 = pdVar21 + 4;
            pdVar24 = pdVar24 + 4;
            pdVar27[1] = (double)((ulong)*pdVar14 ^
                                 ((ulong)*pdVar13 ^ (ulong)*pdVar12) & -(ulong)(*pdVar9 < *pdVar10))
            ;
            *pdVar27 = (double)((ulong)dVar36 ^
                               ((ulong)dVar32 ^ (ulong)dVar33) & -(ulong)(dVar40 < dVar41));
            pdVar27[3] = (double)((ulong)dVar19 ^
                                 ((ulong)dVar17 ^ (ulong)dVar15) & -(ulong)(dVar37 < dVar39));
            pdVar27[2] = (double)((ulong)dVar18 ^
                                 ((ulong)dVar16 ^ (ulong)dVar35) & -(ulong)(dVar34 < dVar38));
            pdVar27 = pdVar27 + 4;
          } while (uVar22 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar21 = param_1 + lVar30;
        pdVar24 = param_5 + lVar30;
        if ((pdVar21 < param_5 + lVar3 && pdVar24 < param_1 + lVar3 ||
             param_3 + lVar30 < param_5 + lVar3 && pdVar24 < param_3 + lVar3) || (uVar8 < 7)) {
          lVar25 = 0;
          do {
            dVar33 = *(double *)((long)(param_3 + lVar30) + lVar25);
            if (dVar33 <= *(double *)((long)pdVar21 + lVar25)) {
              dVar33 = *(double *)((long)pdVar21 + lVar25);
            }
            *(double *)((long)pdVar24 + lVar25) = dVar33;
            lVar25 = lVar25 + 8;
          } while (lVar25 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar21 >> 3) & 1;
          uVar22 = uVar8;
          if (uVar2 < uVar8) {
            uVar22 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar22 != 0) {
            dVar33 = param_3[lVar30];
            if (param_3[lVar30] <= param_1[lVar30]) {
              dVar33 = param_1[lVar30];
            }
            param_5[lVar30] = dVar33;
            iVar11 = iVar5 + 1;
          }
          uVar23 = 0;
          uVar2 = ((uVar8 - uVar22) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar21 = param_5 + (ulong)uVar22 + lVar30;
          pdVar24 = param_3 + (ulong)uVar22 + lVar30;
          pdVar26 = param_1 + (ulong)uVar22 + lVar30;
          do {
            dVar33 = *pdVar26;
            dVar32 = pdVar26[1];
            uVar23 = uVar23 + 1;
            dVar35 = *pdVar24;
            dVar36 = *pdVar24;
            pdVar21[1] = (double)((ulong)dVar32 ^
                                 ((ulong)dVar32 ^ (ulong)pdVar24[1]) & -(ulong)(dVar32 < pdVar24[1])
                                 );
            *pdVar21 = (double)((ulong)dVar33 ^
                               ((ulong)dVar33 ^ (ulong)dVar36) & -(ulong)(dVar33 < dVar35));
            pdVar21 = pdVar21 + 2;
            pdVar24 = pdVar24 + 2;
            pdVar26 = pdVar26 + 2;
          } while (uVar23 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar22 != iVar6) {
            uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            dVar33 = *(double *)((long)param_3 + uVar20);
            if (*(double *)((long)param_3 + uVar20) <= *(double *)((long)param_1 + uVar20)) {
              dVar33 = *(double *)((long)param_1 + uVar20);
            }
            *(double *)((long)param_5 + uVar20) = dVar33;
          }
        }
      }
      iVar31 = iVar31 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_3 = (double *)((long)param_3 + param_4);
      param_5 = (double *)((long)param_5 + param_6);
      pdVar29 = (double *)((long)pdVar29 + param_6);
    } while (iVar31 != -1);
  }
  return;
}


==================================================================

### FUNC 0022deb8 (796 bytes) name=FUN_0022deb8

void FUN_0022deb8(double *param_1,long param_2,double *param_3,long param_4,double *param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  double *pdVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  ulong uVar20;
  double *pdVar21;
  uint uVar22;
  uint uVar23;
  double *pdVar24;
  long lVar25;
  double *pdVar26;
  double *pdVar27;
  double *pdVar28;
  double *pdVar29;
  long lVar30;
  int iVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  
  iVar4 = *param_7;
  iVar31 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar30 = (long)iVar5;
    lVar3 = lVar30 + 2;
    pdVar29 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar29 && param_5 < param_1 + 8 ||
             param_3 < pdVar29 && param_5 < param_3 + 8) || (uVar1 < 0xb)) {
          pdVar21 = param_5 + 1;
          pdVar24 = param_3;
          pdVar26 = param_1;
          do {
            dVar36 = pdVar26[1];
            dVar32 = pdVar24[1];
            dVar33 = *pdVar24;
            if (*pdVar26 <= *pdVar24) {
              dVar33 = *pdVar26;
            }
            pdVar21[-1] = dVar33;
            if (dVar36 <= dVar32) {
              dVar32 = dVar36;
            }
            *pdVar21 = dVar32;
            dVar36 = pdVar26[3];
            dVar32 = pdVar24[3];
            dVar33 = pdVar24[2];
            if (pdVar26[2] <= pdVar24[2]) {
              dVar33 = pdVar26[2];
            }
            pdVar21[1] = dVar33;
            if (dVar36 <= dVar32) {
              dVar32 = dVar36;
            }
            pdVar28 = pdVar21 + 4;
            pdVar21[2] = dVar32;
            pdVar21 = pdVar28;
            pdVar24 = pdVar24 + 4;
            pdVar26 = pdVar26 + 4;
          } while (pdVar28 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          pdVar21 = param_1 + 2;
          pdVar24 = param_3 + 2;
          uVar22 = 0;
          pdVar27 = param_5;
          pdVar28 = param_3;
          pdVar26 = param_1;
          do {
            pdVar9 = pdVar26 + 1;
            dVar40 = *pdVar26;
            dVar36 = *pdVar26;
            pdVar14 = pdVar26 + 1;
            dVar32 = *pdVar26;
            pdVar13 = pdVar26 + 1;
            pdVar10 = pdVar28 + 1;
            dVar41 = *pdVar28;
            dVar33 = *pdVar28;
            pdVar12 = pdVar28 + 1;
            uVar22 = uVar22 + 1;
            dVar37 = pdVar21[1];
            dVar34 = *pdVar21;
            dVar18 = *pdVar21;
            dVar19 = pdVar21[1];
            dVar16 = *pdVar21;
            dVar17 = pdVar21[1];
            dVar39 = pdVar24[1];
            dVar38 = *pdVar24;
            dVar35 = *pdVar24;
            dVar15 = pdVar24[1];
            pdVar26 = pdVar26 + 4;
            pdVar28 = pdVar28 + 4;
            pdVar21 = pdVar21 + 4;
            pdVar24 = pdVar24 + 4;
            pdVar27[1] = (double)((ulong)*pdVar14 ^
                                 ((ulong)*pdVar13 ^ (ulong)*pdVar12) & -(ulong)(*pdVar10 < *pdVar9))
            ;
            *pdVar27 = (double)((ulong)dVar36 ^
                               ((ulong)dVar32 ^ (ulong)dVar33) & -(ulong)(dVar41 < dVar40));
            pdVar27[3] = (double)((ulong)dVar19 ^
                                 ((ulong)dVar17 ^ (ulong)dVar15) & -(ulong)(dVar39 < dVar37));
            pdVar27[2] = (double)((ulong)dVar18 ^
                                 ((ulong)dVar16 ^ (ulong)dVar35) & -(ulong)(dVar38 < dVar34));
            pdVar27 = pdVar27 + 4;
          } while (uVar22 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar21 = param_1 + lVar30;
        pdVar24 = param_5 + lVar30;
        if ((pdVar21 < param_5 + lVar3 && pdVar24 < param_1 + lVar3 ||
             param_3 + lVar30 < param_5 + lVar3 && pdVar24 < param_3 + lVar3) || (uVar8 < 7)) {
          lVar25 = 0;
          do {
            dVar33 = *(double *)((long)(param_3 + lVar30) + lVar25);
            if (*(double *)((long)pdVar21 + lVar25) <= dVar33) {
              dVar33 = *(double *)((long)pdVar21 + lVar25);
            }
            *(double *)((long)pdVar24 + lVar25) = dVar33;
            lVar25 = lVar25 + 8;
          } while (lVar25 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar21 >> 3) & 1;
          uVar22 = uVar8;
          if (uVar2 < uVar8) {
            uVar22 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar22 != 0) {
            dVar33 = param_3[lVar30];
            if (param_1[lVar30] <= param_3[lVar30]) {
              dVar33 = param_1[lVar30];
            }
            param_5[lVar30] = dVar33;
            iVar11 = iVar5 + 1;
          }
          uVar23 = 0;
          uVar2 = ((uVar8 - uVar22) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar21 = param_5 + (ulong)uVar22 + lVar30;
          pdVar24 = param_3 + (ulong)uVar22 + lVar30;
          pdVar26 = param_1 + (ulong)uVar22 + lVar30;
          do {
            dVar33 = *pdVar26;
            dVar32 = pdVar26[1];
            uVar23 = uVar23 + 1;
            dVar35 = *pdVar24;
            dVar36 = *pdVar24;
            pdVar21[1] = (double)((ulong)dVar32 ^
                                 ((ulong)dVar32 ^ (ulong)pdVar24[1]) & -(ulong)(pdVar24[1] < dVar32)
                                 );
            *pdVar21 = (double)((ulong)dVar33 ^
                               ((ulong)dVar33 ^ (ulong)dVar36) & -(ulong)(dVar35 < dVar33));
            pdVar21 = pdVar21 + 2;
            pdVar24 = pdVar24 + 2;
            pdVar26 = pdVar26 + 2;
          } while (uVar23 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar22 != iVar6) {
            uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            dVar33 = *(double *)((long)param_3 + uVar20);
            if (*(double *)((long)param_1 + uVar20) <= *(double *)((long)param_3 + uVar20)) {
              dVar33 = *(double *)((long)param_1 + uVar20);
            }
            *(double *)((long)param_5 + uVar20) = dVar33;
          }
        }
      }
      iVar31 = iVar31 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_3 = (double *)((long)param_3 + param_4);
      param_5 = (double *)((long)param_5 + param_6);
      pdVar29 = (double *)((long)pdVar29 + param_6);
    } while (iVar31 != -1);
  }
  return;
}


==================================================================

### FUNC 0022e1d4 (720 bytes) name=FUN_0022e1d4

void FUN_0022e1d4(double *param_1,long param_2,double *param_3,long param_4,double *param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  ulong uVar14;
  uint uVar15;
  long lVar16;
  double *pdVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  
  iVar4 = *param_7;
  iVar21 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar20 = (long)iVar5;
    lVar3 = lVar20 + 2;
    pdVar19 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
             param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 5)) {
          pdVar13 = param_5 + 1;
          pdVar12 = param_3;
          pdVar17 = param_1;
          do {
            pdVar9 = pdVar13 + 4;
            dVar22 = *pdVar17;
            dVar25 = *pdVar12;
            *pdVar13 = ABS(pdVar17[1] - pdVar12[1]);
            pdVar13[-1] = ABS(dVar22 - dVar25);
            dVar22 = pdVar17[2];
            dVar25 = pdVar12[2];
            pdVar13[2] = ABS(pdVar17[3] - pdVar12[3]);
            pdVar13[1] = ABS(dVar22 - dVar25);
            pdVar13 = pdVar9;
            pdVar12 = pdVar12 + 4;
            pdVar17 = pdVar17 + 4;
          } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar18 = 0;
          pdVar12 = param_3;
          pdVar13 = param_1;
          pdVar17 = param_5;
          do {
            pdVar9 = pdVar13 + 1;
            dVar23 = *pdVar13;
            pdVar10 = pdVar12 + 1;
            dVar27 = *pdVar12;
            dVar25 = pdVar13[3];
            dVar22 = pdVar13[2];
            dVar26 = pdVar12[3];
            dVar24 = pdVar12[2];
            uVar18 = uVar18 + 1;
            pdVar13 = pdVar13 + 4;
            pdVar12 = pdVar12 + 4;
            pdVar17[1] = ABS(*pdVar9 - *pdVar10);
            *pdVar17 = ABS(dVar23 - dVar27);
            pdVar17[3] = ABS(dVar25 - dVar26);
            pdVar17[2] = ABS(dVar22 - dVar24);
            pdVar17 = pdVar17 + 4;
          } while (uVar18 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar13 = param_1 + lVar20;
        pdVar12 = param_5 + lVar20;
        if ((pdVar13 < param_5 + lVar3 && pdVar12 < param_1 + lVar3 ||
             param_3 + lVar20 < param_5 + lVar3 && pdVar12 < param_3 + lVar3) || (uVar8 < 7)) {
          lVar16 = 0;
          do {
            *(double *)((long)pdVar12 + lVar16) =
                 ABS(*(double *)((long)pdVar13 + lVar16) -
                     *(double *)((long)(param_3 + lVar20) + lVar16));
            lVar16 = lVar16 + 8;
          } while (lVar16 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar13 >> 3) & 1;
          uVar18 = uVar8;
          if (uVar2 < uVar8) {
            uVar18 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar18 != 0) {
            param_5[lVar20] = ABS(param_1[lVar20] - param_3[lVar20]);
            iVar11 = iVar5 + 1;
          }
          uVar15 = 0;
          uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar13 = param_5 + (ulong)uVar18 + lVar20;
          pdVar12 = param_3 + (ulong)uVar18 + lVar20;
          pdVar17 = param_1 + (ulong)uVar18 + lVar20;
          do {
            dVar25 = *pdVar12;
            uVar15 = uVar15 + 1;
            dVar22 = *pdVar17;
            pdVar13[1] = ABS(pdVar17[1] - pdVar12[1]);
            *pdVar13 = ABS(dVar22 - dVar25);
            pdVar13 = pdVar13 + 2;
            pdVar12 = pdVar12 + 2;
            pdVar17 = pdVar17 + 2;
          } while (uVar15 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar18 != iVar6) {
            uVar14 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar14) =
                 ABS(*(double *)((long)param_1 + uVar14) - *(double *)((long)param_3 + uVar14));
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_3 = (double *)((long)param_3 + param_4);
      param_5 = (double *)((long)param_5 + param_6);
      pdVar19 = (double *)((long)pdVar19 + param_6);
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022e4a4 (1500 bytes) name=FUN_0022e4a4

void FUN_0022e4a4(double *param_1,ulong param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  ulong uVar12;
  double *pdVar13;
  double *pdVar14;
  uint uVar15;
  long lVar16;
  double *pdVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  
  param_6 = param_6 >> 3;
  dVar28 = *param_8;
  iVar4 = *param_7;
  iVar5 = param_7[1];
  iVar21 = iVar5 + -1;
  if (dVar28 == 1.0) {
    if (iVar5 != 0) {
      uVar7 = iVar4 - 4U >> 2;
      uVar1 = uVar7 + 1;
      iVar5 = uVar1 * 4;
      if (iVar4 + -3 < 1) {
        iVar5 = 0;
      }
      uVar8 = iVar4 - iVar5;
      lVar20 = (long)iVar5;
      lVar3 = lVar20 + 2;
      pdVar19 = param_5 + 8;
      do {
        if (0 < iVar4 + -3) {
          if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
               param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 6)) {
            pdVar14 = param_5 + 1;
            pdVar13 = param_3;
            pdVar17 = param_1;
            do {
              pdVar9 = pdVar14 + 4;
              dVar28 = *pdVar17;
              dVar22 = *pdVar13;
              *pdVar14 = pdVar17[1] * pdVar13[1];
              pdVar14[-1] = dVar28 * dVar22;
              dVar28 = pdVar17[2];
              dVar22 = pdVar13[2];
              pdVar14[2] = pdVar17[3] * pdVar13[3];
              pdVar14[1] = dVar28 * dVar22;
              pdVar14 = pdVar9;
              pdVar13 = pdVar13 + 4;
              pdVar17 = pdVar17 + 4;
            } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
          }
          else {
            uVar18 = 0;
            pdVar13 = param_3;
            pdVar14 = param_1;
            pdVar17 = param_5;
            do {
              pdVar9 = pdVar14 + 1;
              dVar25 = *pdVar14;
              pdVar10 = pdVar13 + 1;
              dVar26 = *pdVar13;
              dVar22 = pdVar14[3];
              dVar28 = pdVar14[2];
              dVar24 = pdVar13[3];
              dVar23 = pdVar13[2];
              uVar18 = uVar18 + 1;
              pdVar14 = pdVar14 + 4;
              pdVar13 = pdVar13 + 4;
              pdVar17[1] = *pdVar9 * *pdVar10;
              *pdVar17 = dVar25 * dVar26;
              pdVar17[3] = dVar22 * dVar24;
              pdVar17[2] = dVar28 * dVar23;
              pdVar17 = pdVar17 + 4;
            } while (uVar18 < uVar1);
          }
        }
        if (iVar5 < iVar4) {
          pdVar14 = param_1 + lVar20;
          pdVar13 = param_5 + lVar20;
          if ((pdVar14 < param_5 + lVar3 && pdVar13 < param_1 + lVar3 ||
               param_3 + lVar20 < param_5 + lVar3 && pdVar13 < param_3 + lVar3) || (uVar8 < 9)) {
            lVar16 = 0;
            do {
              *(double *)((long)pdVar13 + lVar16) =
                   *(double *)((long)pdVar14 + lVar16) *
                   *(double *)((long)(param_3 + lVar20) + lVar16);
              lVar16 = lVar16 + 8;
            } while (lVar16 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
          }
          else {
            uVar18 = (uint)((ulong)pdVar14 >> 3) & 1;
            if (uVar8 < uVar18) {
              uVar18 = uVar8;
            }
            iVar11 = iVar5;
            if (uVar18 != 0) {
              param_5[lVar20] = param_1[lVar20] * param_3[lVar20];
              iVar11 = iVar5 + 1;
            }
            uVar15 = 0;
            uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
            iVar6 = uVar2 * 2;
            pdVar14 = param_5 + (ulong)uVar18 + lVar20;
            pdVar13 = param_3 + (ulong)uVar18 + lVar20;
            pdVar17 = param_1 + (ulong)uVar18 + lVar20;
            do {
              dVar28 = *pdVar13;
              uVar15 = uVar15 + 1;
              dVar22 = *pdVar17;
              pdVar14[1] = pdVar13[1] * pdVar17[1];
              *pdVar14 = dVar28 * dVar22;
              pdVar14 = pdVar14 + 2;
              pdVar13 = pdVar13 + 2;
              pdVar17 = pdVar17 + 2;
            } while (uVar15 < uVar2);
            uVar2 = iVar11 + iVar6;
            if (iVar6 != uVar8 - uVar18) {
              uVar12 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
              *(double *)((long)param_5 + uVar12) =
                   *(double *)((long)param_1 + uVar12) * *(double *)((long)param_3 + uVar12);
            }
          }
        }
        iVar21 = iVar21 + -1;
        param_1 = param_1 + (param_2 >> 3);
        param_3 = param_3 + (param_4 >> 3);
        param_5 = param_5 + param_6;
        pdVar19 = pdVar19 + param_6;
      } while (iVar21 != -1);
      return;
    }
  }
  else if (iVar5 != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar20 = (long)iVar5;
    lVar3 = lVar20 + 2;
    pdVar19 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
             param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 5)) {
          pdVar14 = param_5 + 1;
          pdVar13 = param_3;
          pdVar17 = param_1;
          do {
            dVar22 = *pdVar17;
            pdVar9 = pdVar14 + 4;
            dVar25 = *pdVar13;
            *pdVar14 = dVar28 * pdVar17[1] * pdVar13[1];
            pdVar14[-1] = dVar28 * dVar22 * dVar25;
            dVar22 = pdVar17[2];
            dVar25 = pdVar13[2];
            pdVar14[2] = dVar28 * pdVar17[3] * pdVar13[3];
            pdVar14[1] = dVar28 * dVar22 * dVar25;
            pdVar14 = pdVar9;
            pdVar13 = pdVar13 + 4;
            pdVar17 = pdVar17 + 4;
          } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar18 = 0;
          pdVar13 = param_3;
          pdVar14 = param_1;
          pdVar17 = param_5;
          do {
            pdVar9 = pdVar14 + 1;
            dVar23 = *pdVar14;
            pdVar10 = pdVar13 + 1;
            dVar27 = *pdVar13;
            dVar25 = pdVar14[3];
            dVar22 = pdVar14[2];
            dVar26 = pdVar13[3];
            dVar24 = pdVar13[2];
            uVar18 = uVar18 + 1;
            pdVar14 = pdVar14 + 4;
            pdVar13 = pdVar13 + 4;
            pdVar17[1] = dVar28 * *pdVar9 * *pdVar10;
            *pdVar17 = dVar28 * dVar23 * dVar27;
            pdVar17[3] = dVar28 * dVar25 * dVar26;
            pdVar17[2] = dVar28 * dVar22 * dVar24;
            pdVar17 = pdVar17 + 4;
          } while (uVar18 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar14 = param_1 + lVar20;
        pdVar13 = param_5 + lVar20;
        if ((pdVar14 < param_5 + lVar3 && pdVar13 < param_1 + lVar3 ||
             param_3 + lVar20 < param_5 + lVar3 && pdVar13 < param_3 + lVar3) || (uVar8 < 8)) {
          lVar16 = 0;
          do {
            *(double *)((long)pdVar13 + lVar16) =
                 dVar28 * *(double *)((long)pdVar14 + lVar16) *
                 *(double *)((long)(param_3 + lVar20) + lVar16);
            lVar16 = lVar16 + 8;
          } while (lVar16 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar14 >> 3) & 1;
          uVar18 = uVar8;
          if (uVar2 < uVar8) {
            uVar18 = uVar2;
          }
          iVar11 = iVar5;
          if (uVar18 != 0) {
            param_5[lVar20] = dVar28 * param_1[lVar20] * param_3[lVar20];
            iVar11 = iVar5 + 1;
          }
          uVar15 = 0;
          uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar14 = param_5 + (ulong)uVar18 + lVar20;
          pdVar13 = param_3 + (ulong)uVar18 + lVar20;
          pdVar17 = param_1 + (ulong)uVar18 + lVar20;
          do {
            dVar22 = *pdVar17;
            uVar15 = uVar15 + 1;
            dVar25 = *pdVar13;
            pdVar14[1] = dVar28 * pdVar17[1] * pdVar13[1];
            *pdVar14 = dVar28 * dVar22 * dVar25;
            pdVar14 = pdVar14 + 2;
            pdVar13 = pdVar13 + 2;
            pdVar17 = pdVar17 + 2;
          } while (uVar15 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar18 != iVar6) {
            uVar12 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar12) =
                 dVar28 * *(double *)((long)param_1 + uVar12) * *(double *)((long)param_3 + uVar12);
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = param_1 + (param_2 >> 3);
      param_3 = param_3 + (param_4 >> 3);
      param_5 = param_5 + param_6;
      pdVar19 = pdVar19 + param_6;
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022ea80 (128 bytes) name=FUN_0022ea80

void FUN_0022ea80(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 int *param_7,double *param_8)

{
  int iVar1;
  long lVar2;
  int iVar3;
  double dVar4;
  double dVar5;
  double dVar6;
  
  dVar6 = *param_8;
  iVar1 = *param_7;
  iVar3 = param_7[1] + -1;
  if (param_7[1] != 0) {
    do {
      lVar2 = 0;
      if (0 < iVar1) {
        do {
          dVar5 = *(double *)(param_3 + lVar2 * 8);
          dVar4 = 0.0;
          if (dVar5 != 0.0) {
            dVar4 = (dVar6 * *(double *)(param_1 + lVar2 * 8)) / dVar5;
          }
          *(double *)(param_5 + lVar2 * 8) = dVar4;
          lVar2 = lVar2 + 1;
        } while ((int)lVar2 < iVar1);
      }
      iVar3 = iVar3 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
      param_3 = param_3 + (param_4 & 0xfffffffffffffff8);
      param_5 = param_5 + (param_6 & 0xfffffffffffffff8);
    } while (iVar3 != -1);
  }
  return;
}


==================================================================

### FUNC 0022eb00 (1220 bytes) name=FUN_0022eb00

void FUN_0022eb00(float *param_1,ulong param_2,float *param_3,ulong param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  float *pfVar6;
  undefined8 *puVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  float *pfVar14;
  long lVar15;
  float *pfVar16;
  ulong uVar17;
  float *pfVar18;
  uint uVar19;
  float *pfVar20;
  int iVar21;
  long lVar22;
  ulong uVar23;
  uint uVar24;
  float *pfVar25;
  uint uVar26;
  float fVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  float fVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  
  iVar8 = *param_7;
  dVar32 = *param_8;
  iVar21 = param_7[1] + -1;
  dVar31 = param_8[1];
  dVar30 = param_8[2];
  if (param_7[1] != 0) {
    uVar11 = iVar8 - 4U >> 2;
    uVar1 = uVar11 + 1;
    uVar9 = uVar1 * 4;
    if (iVar8 + -3 < 1) {
      uVar9 = 0;
    }
    uVar2 = uVar9 + 1;
    lVar22 = (long)(int)uVar9;
    uVar3 = uVar9 + 2;
    lVar5 = lVar22 + 4;
    uVar12 = iVar8 - uVar9;
    pfVar14 = (float *)(param_5 + 0x40);
    uVar13 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar23 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    do {
      pfVar18 = pfVar14 + -0x10;
      if (0 < iVar8 + -3) {
        if ((param_1 + 0x10 <= pfVar18 || pfVar14 <= param_1) &&
            (param_3 + 0x10 <= pfVar18 || pfVar14 <= param_3)) {
          lVar15 = 0;
          uVar19 = 0;
          if (1 < uVar1) {
            do {
              puVar7 = (undefined8 *)((long)pfVar18 + lVar15);
              uVar19 = uVar19 + 1;
              uVar29 = ((undefined8 *)((long)param_3 + lVar15))[1];
              uVar28 = *(undefined8 *)((long)param_3 + lVar15);
              uVar35 = ((undefined8 *)((long)param_1 + lVar15))[1];
              uVar34 = *(undefined8 *)((long)param_1 + lVar15);
              lVar15 = lVar15 + 0x10;
              puVar7[1] = CONCAT44((float)(dVar30 + dVar31 * (double)(float)((ulong)uVar29 >> 0x20)
                                                    + dVar32 * (double)(float)((ulong)uVar35 >> 0x20
                                                                              )),
                                   (float)(dVar30 + dVar31 * (double)(float)uVar29 +
                                                    dVar32 * (double)(float)uVar35));
              *puVar7 = CONCAT44((float)(dVar30 + dVar31 * (double)(float)((ulong)uVar28 >> 0x20) +
                                                  dVar32 * (double)(float)((ulong)uVar34 >> 0x20)),
                                 (float)(dVar30 + dVar31 * (double)(float)uVar28 +
                                                  dVar32 * (double)(float)uVar34));
            } while (uVar19 < uVar1);
            goto LAB_0022ec8c;
          }
        }
        pfVar16 = pfVar14 + -0xf;
        pfVar20 = param_3;
        pfVar25 = param_1;
        do {
          fVar33 = *pfVar20;
          pfVar6 = pfVar16 + 4;
          fVar27 = *pfVar25;
          *pfVar16 = (float)(dVar30 + dVar31 * (double)pfVar20[1] + (double)pfVar25[1] * dVar32);
          pfVar16[-1] = (float)(dVar30 + dVar31 * (double)fVar33 + (double)fVar27 * dVar32);
          fVar27 = pfVar20[2];
          fVar33 = pfVar25[2];
          pfVar16[2] = (float)(dVar30 + dVar31 * (double)pfVar20[3] + (double)pfVar25[3] * dVar32);
          pfVar16[1] = (float)(dVar30 + dVar31 * (double)fVar27 + (double)fVar33 * dVar32);
          pfVar16 = pfVar6;
          pfVar20 = pfVar20 + 4;
          pfVar25 = pfVar25 + 4;
        } while (pfVar6 != pfVar18 + (ulong)uVar11 * 4 + 5);
      }
LAB_0022ec8c:
      if ((int)uVar9 < iVar8) {
        pfVar16 = param_1 + lVar22;
        pfVar20 = pfVar18 + lVar22;
        if ((pfVar16 < pfVar18 + lVar5 && pfVar20 < param_1 + lVar5 ||
             param_3 + lVar22 < pfVar18 + lVar5 && pfVar20 < param_3 + lVar5) || (uVar12 < 7)) {
          lVar15 = 0;
          do {
            *(float *)((long)pfVar20 + lVar15) =
                 (float)(dVar30 + dVar31 * (double)*(float *)((long)(param_3 + lVar22) + lVar15) +
                                  (double)*(float *)((long)pfVar16 + lVar15) * dVar32);
            lVar15 = lVar15 + 4;
          } while (lVar15 != ((ulong)((iVar8 + -1) - uVar9) + 1) * 4);
        }
        else {
          uVar19 = -((uint)((ulong)pfVar16 >> 2) & 3) & 3;
          if (uVar12 < uVar19) {
            uVar19 = uVar12;
          }
          uVar24 = uVar9;
          if (((uVar19 != 0) &&
              (pfVar18[lVar22] =
                    (float)(dVar30 + dVar31 * (double)param_3[lVar22] +
                                     (double)param_1[lVar22] * dVar32), uVar24 = uVar2, uVar19 != 1)
              ) && (*(float *)((long)pfVar18 + uVar13) =
                         (float)(dVar30 + dVar31 * (double)*(float *)((long)param_3 + uVar13) +
                                          (double)*(float *)((long)param_1 + uVar13) * dVar32),
                   uVar24 = uVar3, uVar19 == 3)) {
            *(float *)((long)pfVar18 + uVar23) =
                 (float)(dVar30 + dVar31 * (double)*(float *)((long)param_3 + uVar23) +
                                  (double)*(float *)((long)param_1 + uVar23) * dVar32);
            uVar24 = uVar9 + 3;
          }
          uVar26 = 0;
          uVar4 = ((uVar12 - uVar19) - 4 >> 2) + 1;
          iVar10 = uVar4 * 4;
          pfVar16 = pfVar18 + (ulong)uVar19 + lVar22;
          pfVar20 = param_1 + (ulong)uVar19 + lVar22;
          pfVar25 = param_3 + (ulong)uVar19 + lVar22;
          do {
            uVar28 = *(undefined8 *)pfVar25;
            uVar26 = uVar26 + 1;
            uVar29 = *(undefined8 *)pfVar20;
            *(ulong *)(pfVar16 + 2) =
                 CONCAT44((float)(dVar30 + dVar31 * (double)(float)((ulong)*(undefined8 *)
                                                                            (pfVar25 + 2) >> 0x20) +
                                           dVar32 * (double)(float)((ulong)*(undefined8 *)
                                                                            (pfVar20 + 2) >> 0x20)),
                          (float)(dVar30 + dVar31 * (double)(float)*(undefined8 *)(pfVar25 + 2) +
                                           dVar32 * (double)(float)*(undefined8 *)(pfVar20 + 2)));
            *(ulong *)pfVar16 =
                 CONCAT44((float)(dVar30 + dVar31 * (double)(float)((ulong)uVar28 >> 0x20) +
                                           dVar32 * (double)(float)((ulong)uVar29 >> 0x20)),
                          (float)(dVar30 + dVar31 * (double)(float)uVar28 +
                                           dVar32 * (double)(float)uVar29));
            pfVar16 = pfVar16 + 4;
            pfVar20 = pfVar20 + 4;
            pfVar25 = pfVar25 + 4;
          } while (uVar26 < uVar4);
          uVar24 = uVar24 + iVar10;
          if (uVar12 - uVar19 != iVar10) {
            uVar17 = -(ulong)(uVar24 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar24 << 2;
            *(float *)((long)pfVar18 + uVar17) =
                 (float)(dVar30 + dVar31 * (double)*(float *)((long)param_3 + uVar17) +
                                  (double)*(float *)((long)param_1 + uVar17) * dVar32);
            if ((int)(uVar24 + 1) < iVar8) {
              lVar15 = uVar17 + 4;
              *(float *)((long)pfVar18 + lVar15) =
                   (float)(dVar30 + dVar31 * (double)*(float *)((long)param_3 + lVar15) +
                                    (double)*(float *)((long)param_1 + lVar15) * dVar32);
              if ((int)(uVar24 + 2) < iVar8) {
                lVar15 = uVar17 + 8;
                *(float *)((long)pfVar18 + lVar15) =
                     (float)(dVar30 + dVar31 * (double)*(float *)((long)param_3 + lVar15) +
                                      (double)*(float *)((long)param_1 + lVar15) * dVar32);
              }
            }
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = (float *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_3 = (float *)((long)param_3 + (param_4 & 0xfffffffffffffffc));
      pfVar14 = (float *)((long)pfVar14 + (param_6 & 0xfffffffffffffffc));
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022efc4 (848 bytes) name=FUN_0022efc4

void FUN_0022efc4(double *param_1,ulong param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  double *pdVar9;
  double *pdVar10;
  int iVar11;
  double *pdVar12;
  double *pdVar13;
  ulong uVar14;
  long lVar15;
  uint uVar16;
  double *pdVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  iVar4 = *param_7;
  dVar30 = *param_8;
  iVar21 = param_7[1] + -1;
  dVar29 = param_8[1];
  dVar28 = param_8[2];
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    lVar20 = (long)iVar5;
    lVar3 = lVar20 + 2;
    uVar8 = iVar4 - iVar5;
    pdVar19 = param_5 + 8;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < pdVar19 && param_5 < param_1 + 8 ||
             param_3 < pdVar19 && param_5 < param_3 + 8) || (uVar1 < 4)) {
          pdVar13 = param_5 + 1;
          pdVar12 = param_3;
          pdVar17 = param_1;
          do {
            dVar22 = *pdVar12;
            pdVar9 = pdVar13 + 4;
            dVar23 = *pdVar17;
            *pdVar13 = dVar28 + dVar29 * pdVar12[1] + pdVar17[1] * dVar30;
            pdVar13[-1] = dVar28 + dVar29 * dVar22 + dVar23 * dVar30;
            dVar22 = pdVar12[2];
            dVar23 = pdVar17[2];
            pdVar13[2] = dVar28 + dVar29 * pdVar12[3] + pdVar17[3] * dVar30;
            pdVar13[1] = dVar28 + dVar29 * dVar22 + dVar23 * dVar30;
            pdVar13 = pdVar9;
            pdVar12 = pdVar12 + 4;
            pdVar17 = pdVar17 + 4;
          } while (pdVar9 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar18 = 0;
          pdVar12 = param_3;
          pdVar13 = param_1;
          pdVar17 = param_5;
          do {
            pdVar9 = pdVar12 + 1;
            dVar24 = *pdVar12;
            pdVar10 = pdVar13 + 1;
            dVar27 = *pdVar13;
            dVar23 = pdVar12[3];
            dVar22 = pdVar12[2];
            dVar26 = pdVar13[3];
            dVar25 = pdVar13[2];
            uVar18 = uVar18 + 1;
            pdVar13 = pdVar13 + 4;
            pdVar12 = pdVar12 + 4;
            pdVar17[1] = dVar28 + dVar29 * *pdVar9 + dVar30 * *pdVar10;
            *pdVar17 = dVar28 + dVar29 * dVar24 + dVar30 * dVar27;
            pdVar17[3] = dVar28 + dVar29 * dVar23 + dVar30 * dVar26;
            pdVar17[2] = dVar28 + dVar29 * dVar22 + dVar30 * dVar25;
            pdVar17 = pdVar17 + 4;
          } while (uVar18 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar13 = param_1 + lVar20;
        pdVar12 = param_5 + lVar20;
        if ((pdVar13 < param_5 + lVar3 && pdVar12 < param_1 + lVar3 ||
             param_3 + lVar20 < param_5 + lVar3 && pdVar12 < param_3 + lVar3) || (uVar8 < 7)) {
          lVar15 = 0;
          do {
            *(double *)((long)pdVar12 + lVar15) =
                 dVar28 + dVar29 * *(double *)((long)(param_3 + lVar20) + lVar15) +
                          *(double *)((long)pdVar13 + lVar15) * dVar30;
            lVar15 = lVar15 + 8;
          } while (lVar15 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar18 = (uint)((ulong)pdVar13 >> 3) & 1;
          if (uVar8 < uVar18) {
            uVar18 = uVar8;
          }
          iVar11 = iVar5;
          if (uVar18 != 0) {
            param_5[lVar20] = dVar28 + dVar29 * param_3[lVar20] + param_1[lVar20] * dVar30;
            iVar11 = iVar5 + 1;
          }
          uVar16 = 0;
          uVar2 = ((uVar8 - uVar18) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar13 = param_5 + (ulong)uVar18 + lVar20;
          pdVar12 = param_3 + (ulong)uVar18 + lVar20;
          pdVar17 = param_1 + (ulong)uVar18 + lVar20;
          do {
            dVar22 = *pdVar12;
            uVar16 = uVar16 + 1;
            dVar23 = *pdVar17;
            pdVar13[1] = dVar28 + dVar29 * pdVar12[1] + dVar30 * pdVar17[1];
            *pdVar13 = dVar28 + dVar29 * dVar22 + dVar30 * dVar23;
            pdVar13 = pdVar13 + 2;
            pdVar12 = pdVar12 + 2;
            pdVar17 = pdVar17 + 2;
          } while (uVar16 < uVar2);
          uVar2 = iVar11 + iVar6;
          if (uVar8 - uVar18 != iVar6) {
            uVar14 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar14) =
                 dVar28 + dVar29 * *(double *)((long)param_3 + uVar14) +
                          *(double *)((long)param_1 + uVar14) * dVar30;
          }
        }
      }
      iVar21 = iVar21 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_3 = (double *)((long)param_3 + (param_4 & 0xfffffffffffffff8));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
      pdVar19 = (double *)((long)pdVar19 + (param_6 & 0xfffffffffffffff8));
    } while (iVar21 != -1);
  }
  return;
}


==================================================================

### FUNC 0022f320 (5876 bytes) name=FUN_0022f320

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0022f320(double *param_1,ulong param_2,double *param_3,ulong param_4,byte *param_5,
                 long param_6,int *param_7,int *param_8)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  double *pdVar7;
  double *pdVar8;
  double *pdVar9;
  double *pdVar10;
  double *pdVar11;
  double *pdVar12;
  double *pdVar13;
  double *pdVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  double *pdVar23;
  double *pdVar24;
  double *pdVar25;
  double *pdVar26;
  double *pdVar27;
  double *pdVar28;
  double *pdVar29;
  double *pdVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  double *pdVar33;
  int iVar34;
  double *pdVar35;
  ulong uVar36;
  long lVar37;
  long lVar38;
  byte *pbVar39;
  double *pdVar40;
  byte bVar41;
  uint uVar42;
  uint uVar43;
  int iVar44;
  double dVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  double dVar49;
  double dVar50;
  long lVar51;
  long lVar52;
  byte bVar53;
  double dVar54;
  byte bVar55;
  double dVar56;
  double dVar57;
  long lVar58;
  double dVar59;
  double dVar60;
  double dVar61;
  double dVar62;
  double dVar63;
  double dVar64;
  double dVar65;
  long lVar66;
  long lVar67;
  
  param_2 = param_2 >> 3;
  param_4 = param_4 >> 3;
  iVar44 = *param_8;
  iVar15 = param_7[1];
  iVar16 = *param_7;
  if (iVar44 - 2U < 2) {
    pdVar33 = param_3;
    uVar36 = param_4;
    param_3 = param_1;
    param_4 = param_2;
    if (iVar44 != 2) {
      bVar41 = 0;
      goto LAB_0022f3e8;
    }
  }
  else {
    pdVar33 = param_1;
    uVar36 = param_2;
    if (iVar44 != 4) {
      if (iVar44 != 1) {
        if (iVar44 == 5) {
          bVar41 = 0xff;
        }
        else {
          if (iVar44 != 0) {
            return;
          }
          bVar41 = 0;
        }
        iVar44 = iVar15 + -1;
        if (iVar15 == 0) {
          return;
        }
        uVar20 = iVar16 - 4;
        iVar21 = iVar16 + -3;
        lVar66 = NEON_shl(param_2,3);
        lVar67 = NEON_shl(param_4,3);
        uVar19 = uVar20 >> 2;
        uVar1 = uVar19 + 1;
        iVar17 = uVar1 * 4;
        lVar52 = NEON_shl((ulong)uVar1,5);
        lVar58 = NEON_shl((ulong)uVar1,2);
        uVar2 = (uVar19 - 3 >> 2) + 1;
        iVar15 = uVar2 * 0x10;
        if (uVar20 < 0xc) {
          iVar15 = 0;
        }
        if (iVar21 < 1) {
          iVar17 = 0;
        }
        iVar3 = iVar15 + 4;
        iVar4 = iVar15 + 8;
        uVar22 = iVar16 - iVar17;
        lVar37 = (long)iVar17;
        lVar51 = NEON_shl(lVar37 + (ulong)uVar22,3);
        do {
          uVar32 = _UNK_00230a28;
          uVar31 = _DAT_00230a20;
          if (0 < iVar21) {
            if ((param_1 < param_5 + lVar58 && param_5 < (byte *)((long)param_1 + lVar52) ||
                 param_3 < param_5 + lVar58 && param_5 < (byte *)((long)param_3 + lVar52)) ||
               (uVar1 < 4)) {
              pdVar33 = param_3 + 1;
              pbVar39 = param_5;
              pdVar35 = param_1;
              do {
                pdVar40 = pdVar33 + 4;
                dVar63 = pdVar33[-1];
                dVar65 = *pdVar35;
                pbVar39[1] = -(pdVar35[1] == *pdVar33) ^ bVar41;
                *pbVar39 = -(dVar65 == dVar63) ^ bVar41;
                dVar63 = pdVar33[1];
                dVar65 = pdVar35[2];
                pbVar39[3] = -(pdVar35[3] == pdVar33[2]) ^ bVar41;
                pbVar39[2] = -(dVar65 == dVar63) ^ bVar41;
                pdVar33 = pdVar40;
                pbVar39 = pbVar39 + 4;
                pdVar35 = pdVar35 + 4;
              } while (pdVar40 != param_3 + (ulong)uVar19 * 4 + 5);
            }
            else {
              if (0xb < uVar20) {
                uVar43 = 0;
                pbVar39 = param_5;
                pdVar35 = param_3;
                pdVar33 = param_1;
                do {
                  dVar45 = pdVar33[1];
                  dVar63 = *pdVar33;
                  dVar64 = pdVar35[1];
                  dVar62 = *pdVar35;
                  dVar50 = pdVar33[7];
                  dVar49 = pdVar33[6];
                  pdVar40 = pdVar33 + 8;
                  dVar59 = pdVar35[5];
                  dVar57 = pdVar35[4];
                  pdVar7 = pdVar35 + 8;
                  dVar56 = pdVar35[7];
                  dVar54 = pdVar35[6];
                  pdVar8 = pdVar33 + 10;
                  dVar48 = pdVar33[3];
                  dVar47 = pdVar33[2];
                  pdVar9 = pdVar35 + 10;
                  dVar61 = pdVar35[3];
                  dVar60 = pdVar35[2];
                  dVar46 = pdVar33[5];
                  dVar65 = pdVar33[4];
                  pdVar10 = pdVar33 + 0xc;
                  pdVar11 = pdVar35 + 0xc;
                  pdVar12 = pdVar33 + 0xe;
                  pdVar13 = pdVar35 + 0xe;
                  pdVar25 = pdVar33 + 9;
                  pdVar26 = pdVar35 + 9;
                  pdVar24 = pdVar33 + 0xb;
                  pdVar23 = pdVar33 + 0xd;
                  pdVar29 = pdVar35 + 0xb;
                  bVar53 = (byte)uVar31;
                  bVar55 = (byte)uVar32;
                  pdVar14 = pdVar33 + 0xf;
                  pdVar28 = pdVar35 + 0xd;
                  pdVar27 = pdVar35 + 0xf;
                  uVar43 = uVar43 + 1;
                  pdVar33 = pdVar33 + 0x10;
                  pdVar35 = pdVar35 + 0x10;
                  *(ulong *)(pbVar39 + 8) =
                       CONCAT17(-(-(*pdVar14 == *pdVar27) & bVar55) ^ bVar41,
                                CONCAT16(-(-(*pdVar12 == *pdVar13) & bVar53) ^ bVar41,
                                         CONCAT15(-(-(*pdVar23 == *pdVar28) & bVar55) ^ bVar41,
                                                  CONCAT14(-(-(*pdVar10 == *pdVar11) & bVar53) ^
                                                           bVar41,CONCAT13(-(-(*pdVar24 == *pdVar29)
                                                                            & bVar55) ^ bVar41,
                                                                           CONCAT12(-(-(*pdVar8 ==
                                                                                       *pdVar9) &
                                                                                     bVar53) ^
                                                                                    bVar41,CONCAT11(
                                                  -(-(*pdVar25 == *pdVar26) & bVar55) ^ bVar41,
                                                  -(-(*pdVar40 == *pdVar7) & bVar53) ^ bVar41)))))))
                  ;
                  *(ulong *)pbVar39 =
                       CONCAT17(-(-(dVar50 == dVar56) & bVar55) ^ bVar41,
                                CONCAT16(-(-(dVar49 == dVar54) & bVar53) ^ bVar41,
                                         CONCAT15(-(-(dVar46 == dVar59) & bVar55) ^ bVar41,
                                                  CONCAT14(-(-(dVar65 == dVar57) & bVar53) ^ bVar41,
                                                           CONCAT13(-(-(dVar48 == dVar61) & bVar55)
                                                                    ^ bVar41,CONCAT12(-(-(dVar47 ==
                                                                                         dVar60) &
                                                                                       bVar53) ^
                                                                                      bVar41,
                                                  CONCAT11(-(-(dVar45 == dVar64) & bVar55) ^ bVar41,
                                                           -(-(dVar63 == dVar62) & bVar53) ^ bVar41)
                                                  ))))));
                  pbVar39 = pbVar39 + 0x10;
                } while (uVar43 < uVar2);
                if (uVar1 == uVar2 * 4) goto LAB_00230460;
              }
              dVar65 = param_1[(long)iVar15 + 1];
              dVar63 = param_3[(long)iVar15 + 1];
              param_5[iVar15] = -(param_1[iVar15] == param_3[iVar15]) ^ bVar41;
              param_5[(long)iVar15 + 1] = -(dVar65 == dVar63) ^ bVar41;
              dVar63 = param_3[(long)iVar15 + 3];
              dVar65 = param_1[(long)iVar15 + 3];
              param_5[(long)iVar15 + 2] =
                   -(param_1[(long)iVar15 + 2] == param_3[(long)iVar15 + 2]) ^ bVar41;
              param_5[(long)iVar15 + 3] = -(dVar65 == dVar63) ^ bVar41;
              if (iVar3 < iVar21) {
                dVar65 = param_1[(long)iVar3 + 1];
                dVar63 = param_3[(long)iVar3 + 1];
                param_5[iVar3] = -(param_1[iVar3] == param_3[iVar3]) ^ bVar41;
                param_5[(long)iVar3 + 1] = -(dVar65 == dVar63) ^ bVar41;
                dVar63 = param_3[(long)iVar3 + 3];
                dVar65 = param_1[(long)iVar3 + 3];
                param_5[(long)iVar3 + 2] =
                     -(param_1[(long)iVar3 + 2] == param_3[(long)iVar3 + 2]) ^ bVar41;
                param_5[(long)iVar3 + 3] = -(dVar65 == dVar63) ^ bVar41;
                if (iVar4 < iVar21) {
                  dVar65 = param_1[(long)iVar4 + 1];
                  dVar63 = param_3[(long)iVar4 + 1];
                  param_5[iVar4] = -(param_1[iVar4] == param_3[iVar4]) ^ bVar41;
                  param_5[(long)iVar4 + 1] = -(dVar65 == dVar63) ^ bVar41;
                  dVar63 = param_3[(long)iVar4 + 3];
                  dVar65 = param_1[(long)iVar4 + 3];
                  param_5[(long)iVar4 + 2] =
                       -(param_1[(long)iVar4 + 2] == param_3[(long)iVar4 + 2]) ^ bVar41;
                  param_5[(long)iVar4 + 3] = -(dVar65 == dVar63) ^ bVar41;
                }
              }
            }
          }
LAB_00230460:
          if (iVar17 < iVar16) {
            pdVar33 = param_1 + lVar37;
            pdVar35 = param_3 + lVar37;
            pbVar39 = param_5 + lVar37;
            if ((pdVar33 < param_5 + lVar37 + (ulong)uVar22 &&
                 pbVar39 < (byte *)((long)param_1 + lVar51) ||
                 pdVar35 < param_5 + lVar37 + (ulong)uVar22 &&
                 pbVar39 < (byte *)((long)param_3 + lVar51)) || (uVar22 < 0x12)) {
              lVar38 = 0;
              do {
                pbVar39[lVar38] = bVar41 ^ -(pdVar33[lVar38] == pdVar35[lVar38]);
                lVar38 = lVar38 + 1;
              } while (lVar38 != (ulong)(uint)((iVar16 + -1) - iVar17) + 1);
            }
            else {
              uVar5 = (uint)((ulong)pdVar33 >> 3) & 1;
              uVar43 = uVar22;
              if (uVar5 < uVar22) {
                uVar43 = uVar5;
              }
              iVar34 = iVar17;
              if (uVar43 != 0) {
                *pbVar39 = bVar41 ^ -(*pdVar33 == *pdVar35);
                iVar34 = iVar17 + 1;
              }
              uVar32 = _UNK_00230a28;
              uVar31 = _DAT_00230a20;
              uVar42 = 0;
              uVar5 = ((uVar22 - uVar43) - 0x10 >> 4) + 1;
              iVar18 = uVar5 * 0x10;
              pbVar39 = param_5 + lVar37 + (ulong)uVar43;
              pdVar33 = param_3 + (ulong)uVar43 + lVar37;
              pdVar35 = param_1 + (ulong)uVar43 + lVar37;
              do {
                dVar45 = pdVar35[1];
                dVar63 = *pdVar35;
                dVar64 = pdVar33[1];
                dVar62 = *pdVar33;
                uVar42 = uVar42 + 1;
                dVar61 = pdVar35[3];
                dVar60 = pdVar35[2];
                dVar50 = pdVar33[3];
                dVar49 = pdVar33[2];
                dVar48 = pdVar33[5];
                dVar47 = pdVar33[4];
                bVar53 = (byte)uVar31;
                bVar55 = (byte)uVar32;
                dVar59 = pdVar35[5];
                dVar57 = pdVar35[4];
                dVar56 = pdVar33[7];
                dVar54 = pdVar33[6];
                dVar46 = pdVar35[7];
                dVar65 = pdVar35[6];
                *(ulong *)(pbVar39 + 8) =
                     CONCAT17(-(-(pdVar35[0xf] == pdVar33[0xf]) & bVar55) ^ bVar41,
                              CONCAT16(-(-(pdVar35[0xe] == pdVar33[0xe]) & bVar53) ^ bVar41,
                                       CONCAT15(-(-(pdVar35[0xd] == pdVar33[0xd]) & bVar55) ^ bVar41
                                                ,CONCAT14(-(-(pdVar35[0xc] == pdVar33[0xc]) & bVar53
                                                           ) ^ bVar41,
                                                          CONCAT13(-(-(pdVar35[0xb] == pdVar33[0xb])
                                                                    & bVar55) ^ bVar41,
                                                                   CONCAT12(-(-(pdVar35[10] ==
                                                                               pdVar33[10]) & bVar53
                                                                             ) ^ bVar41,
                                                                            CONCAT11(-(-(pdVar35[9]
                                                                                        == pdVar33[9
                                                  ]) & bVar55) ^ bVar41,
                                                  -(-(pdVar35[8] == pdVar33[8]) & bVar53) ^ bVar41))
                                                  )))));
                *(ulong *)pbVar39 =
                     CONCAT17(-(-(dVar46 == dVar56) & bVar55) ^ bVar41,
                              CONCAT16(-(-(dVar65 == dVar54) & bVar53) ^ bVar41,
                                       CONCAT15(-(-(dVar59 == dVar48) & bVar55) ^ bVar41,
                                                CONCAT14(-(-(dVar57 == dVar47) & bVar53) ^ bVar41,
                                                         CONCAT13(-(-(dVar61 == dVar50) & bVar55) ^
                                                                  bVar41,CONCAT12(-(-(dVar60 ==
                                                                                     dVar49) &
                                                                                   bVar53) ^ bVar41,
                                                                                  CONCAT11(-(-(
                                                  dVar45 == dVar64) & bVar55) ^ bVar41,
                                                  -(-(dVar63 == dVar62) & bVar53) ^ bVar41)))))));
                pbVar39 = pbVar39 + 0x10;
                pdVar33 = pdVar33 + 0x10;
                pdVar35 = pdVar35 + 0x10;
              } while (uVar42 < uVar5);
              iVar34 = iVar34 + iVar18;
              if (uVar22 - uVar43 != iVar18) {
                iVar18 = iVar34 + 1;
                param_5[iVar34] = bVar41 ^ -(param_1[iVar34] == param_3[iVar34]);
                if (iVar18 < iVar16) {
                  iVar6 = iVar34 + 2;
                  param_5[iVar18] = bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                  if (iVar6 < iVar16) {
                    iVar18 = iVar34 + 3;
                    param_5[iVar6] = bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                    if (iVar18 < iVar16) {
                      iVar6 = iVar34 + 4;
                      param_5[iVar18] = bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                      if (iVar6 < iVar16) {
                        iVar18 = iVar34 + 5;
                        param_5[iVar6] = bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                        if (iVar18 < iVar16) {
                          iVar6 = iVar34 + 6;
                          param_5[iVar18] = bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                          if (iVar6 < iVar16) {
                            iVar18 = iVar34 + 7;
                            param_5[iVar6] = bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                            if (iVar18 < iVar16) {
                              iVar6 = iVar34 + 8;
                              param_5[iVar18] = bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                              if (iVar6 < iVar16) {
                                iVar18 = iVar34 + 9;
                                param_5[iVar6] = bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                                if (iVar18 < iVar16) {
                                  iVar6 = iVar34 + 10;
                                  param_5[iVar18] = bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                                  if (iVar6 < iVar16) {
                                    iVar18 = iVar34 + 0xb;
                                    param_5[iVar6] = bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                                    if (iVar18 < iVar16) {
                                      iVar6 = iVar34 + 0xc;
                                      param_5[iVar18] =
                                           bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                                      if (iVar6 < iVar16) {
                                        iVar18 = iVar34 + 0xd;
                                        param_5[iVar6] =
                                             bVar41 ^ -(param_1[iVar6] == param_3[iVar6]);
                                        if (iVar18 < iVar16) {
                                          iVar34 = iVar34 + 0xe;
                                          param_5[iVar18] =
                                               bVar41 ^ -(param_1[iVar18] == param_3[iVar18]);
                                          if (iVar34 < iVar16) {
                                            param_5[iVar34] =
                                                 bVar41 ^ -(param_1[iVar34] == param_3[iVar34]);
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          iVar44 = iVar44 + -1;
          param_1 = (double *)((long)param_1 + lVar66);
          param_3 = (double *)((long)param_3 + lVar67);
          param_5 = param_5 + param_6;
          if (iVar44 == -1) {
            return;
          }
        } while( true );
      }
      bVar41 = 0;
      param_1 = param_3;
      param_2 = param_4;
      goto LAB_0022f3e8;
    }
  }
  bVar41 = 0xff;
  param_1 = param_3;
  param_2 = param_4;
LAB_0022f3e8:
  iVar44 = iVar15 + -1;
  if (iVar15 != 0) {
    iVar21 = iVar16 + -3;
    uVar20 = iVar16 - 4;
    uVar19 = uVar20 >> 2;
    uVar1 = uVar19 + 1;
    lVar52 = NEON_shl(uVar36,3);
    iVar17 = uVar1 * 4;
    lVar58 = NEON_shl(param_2,3);
    uVar2 = (uVar19 - 3 >> 2) + 1;
    iVar15 = uVar2 * 0x10;
    if (uVar20 < 0xc) {
      iVar15 = 0;
    }
    lVar66 = NEON_shl((ulong)uVar1,5);
    iVar3 = iVar15 + 4;
    if (iVar21 < 1) {
      iVar17 = 0;
    }
    iVar4 = iVar15 + 8;
    uVar22 = iVar16 - iVar17;
    lVar67 = (long)iVar17;
    lVar37 = NEON_shl(lVar67 + (ulong)uVar22,3);
    do {
      uVar32 = _UNK_00230a28;
      uVar31 = _DAT_00230a20;
      if (0 < iVar21) {
        if ((pdVar33 < param_5 + (ulong)uVar1 * 4 && param_5 < (byte *)((long)pdVar33 + lVar66) ||
             param_1 < param_5 + (ulong)uVar1 * 4 && param_5 < (byte *)((long)param_1 + lVar66)) ||
           (uVar1 < 4)) {
          pdVar35 = param_1 + 1;
          pbVar39 = param_5;
          pdVar40 = pdVar33;
          do {
            pdVar7 = pdVar35 + 4;
            dVar63 = pdVar35[-1];
            dVar65 = *pdVar40;
            pbVar39[1] = -(*pdVar35 < pdVar40[1]) ^ bVar41;
            *pbVar39 = -(dVar63 < dVar65) ^ bVar41;
            dVar63 = pdVar35[1];
            dVar65 = pdVar40[2];
            pbVar39[3] = -(pdVar35[2] < pdVar40[3]) ^ bVar41;
            pbVar39[2] = -(dVar63 < dVar65) ^ bVar41;
            pdVar35 = pdVar7;
            pbVar39 = pbVar39 + 4;
            pdVar40 = pdVar40 + 4;
          } while (pdVar7 != param_1 + (ulong)uVar19 * 4 + 5);
        }
        else {
          if (0xb < uVar20) {
            uVar43 = 0;
            pbVar39 = param_5;
            pdVar40 = param_1;
            pdVar35 = pdVar33;
            do {
              dVar45 = pdVar35[1];
              dVar63 = *pdVar35;
              dVar64 = pdVar40[1];
              dVar62 = *pdVar40;
              dVar50 = pdVar35[7];
              dVar49 = pdVar35[6];
              pdVar7 = pdVar35 + 8;
              dVar59 = pdVar40[5];
              dVar57 = pdVar40[4];
              pdVar8 = pdVar40 + 8;
              dVar56 = pdVar40[7];
              dVar54 = pdVar40[6];
              pdVar9 = pdVar35 + 10;
              dVar48 = pdVar35[3];
              dVar47 = pdVar35[2];
              pdVar10 = pdVar40 + 10;
              dVar61 = pdVar40[3];
              dVar60 = pdVar40[2];
              dVar46 = pdVar35[5];
              dVar65 = pdVar35[4];
              pdVar11 = pdVar35 + 0xc;
              pdVar12 = pdVar40 + 0xc;
              pdVar13 = pdVar35 + 0xe;
              pdVar14 = pdVar40 + 0xe;
              pdVar26 = pdVar35 + 9;
              pdVar29 = pdVar40 + 9;
              pdVar25 = pdVar35 + 0xb;
              pdVar24 = pdVar35 + 0xd;
              pdVar30 = pdVar40 + 0xb;
              bVar53 = (byte)uVar31;
              bVar55 = (byte)uVar32;
              pdVar23 = pdVar35 + 0xf;
              pdVar28 = pdVar40 + 0xd;
              pdVar27 = pdVar40 + 0xf;
              uVar43 = uVar43 + 1;
              pdVar35 = pdVar35 + 0x10;
              pdVar40 = pdVar40 + 0x10;
              *(ulong *)(pbVar39 + 8) =
                   CONCAT17(-(-(*pdVar27 < *pdVar23) & bVar55) ^ bVar41,
                            CONCAT16(-(-(*pdVar14 < *pdVar13) & bVar53) ^ bVar41,
                                     CONCAT15(-(-(*pdVar28 < *pdVar24) & bVar55) ^ bVar41,
                                              CONCAT14(-(-(*pdVar12 < *pdVar11) & bVar53) ^ bVar41,
                                                       CONCAT13(-(-(*pdVar30 < *pdVar25) & bVar55) ^
                                                                bVar41,CONCAT12(-(-(*pdVar10 <
                                                                                   *pdVar9) & bVar53
                                                                                 ) ^ bVar41,
                                                                                CONCAT11(-(-(*
                                                  pdVar29 < *pdVar26) & bVar55) ^ bVar41,
                                                  -(-(*pdVar8 < *pdVar7) & bVar53) ^ bVar41)))))));
              *(ulong *)pbVar39 =
                   CONCAT17(-(-(dVar56 < dVar50) & bVar55) ^ bVar41,
                            CONCAT16(-(-(dVar54 < dVar49) & bVar53) ^ bVar41,
                                     CONCAT15(-(-(dVar59 < dVar46) & bVar55) ^ bVar41,
                                              CONCAT14(-(-(dVar57 < dVar65) & bVar53) ^ bVar41,
                                                       CONCAT13(-(-(dVar61 < dVar48) & bVar55) ^
                                                                bVar41,CONCAT12(-(-(dVar60 < dVar47)
                                                                                 & bVar53) ^ bVar41,
                                                                                CONCAT11(-(-(dVar64 
                                                  < dVar45) & bVar55) ^ bVar41,
                                                  -(-(dVar62 < dVar63) & bVar53) ^ bVar41)))))));
              pbVar39 = pbVar39 + 0x10;
            } while (uVar43 < uVar2);
            if (uVar1 == uVar2 * 4) goto LAB_0022f96c;
          }
          dVar65 = pdVar33[(long)iVar15 + 1];
          dVar63 = param_1[(long)iVar15 + 1];
          param_5[iVar15] = -(param_1[iVar15] < pdVar33[iVar15]) ^ bVar41;
          param_5[(long)iVar15 + 1] = -(dVar63 < dVar65) ^ bVar41;
          dVar63 = param_1[(long)iVar15 + 3];
          dVar65 = pdVar33[(long)iVar15 + 3];
          param_5[(long)iVar15 + 2] =
               -(param_1[(long)iVar15 + 2] < pdVar33[(long)iVar15 + 2]) ^ bVar41;
          param_5[(long)iVar15 + 3] = -(dVar63 < dVar65) ^ bVar41;
          if (iVar3 < iVar21) {
            dVar65 = pdVar33[(long)iVar3 + 1];
            dVar63 = param_1[(long)iVar3 + 1];
            param_5[iVar3] = -(param_1[iVar3] < pdVar33[iVar3]) ^ bVar41;
            param_5[(long)iVar3 + 1] = -(dVar63 < dVar65) ^ bVar41;
            dVar63 = param_1[(long)iVar3 + 3];
            dVar65 = pdVar33[(long)iVar3 + 3];
            param_5[(long)iVar3 + 2] =
                 -(param_1[(long)iVar3 + 2] < pdVar33[(long)iVar3 + 2]) ^ bVar41;
            param_5[(long)iVar3 + 3] = -(dVar63 < dVar65) ^ bVar41;
            if (iVar4 < iVar21) {
              dVar65 = pdVar33[(long)iVar4 + 1];
              dVar63 = param_1[(long)iVar4 + 1];
              param_5[iVar4] = -(param_1[iVar4] < pdVar33[iVar4]) ^ bVar41;
              param_5[(long)iVar4 + 1] = -(dVar63 < dVar65) ^ bVar41;
              dVar63 = param_1[(long)iVar4 + 3];
              dVar65 = pdVar33[(long)iVar4 + 3];
              param_5[(long)iVar4 + 2] =
                   -(param_1[(long)iVar4 + 2] < pdVar33[(long)iVar4 + 2]) ^ bVar41;
              param_5[(long)iVar4 + 3] = -(dVar63 < dVar65) ^ bVar41;
            }
          }
        }
      }
LAB_0022f96c:
      if (iVar17 < iVar16) {
        pdVar35 = pdVar33 + lVar67;
        pdVar40 = param_1 + lVar67;
        pbVar39 = param_5 + lVar67;
        if ((pdVar35 < param_5 + lVar67 + (ulong)uVar22 &&
             pbVar39 < (byte *)((long)pdVar33 + lVar37) ||
             pdVar40 < param_5 + lVar67 + (ulong)uVar22 &&
             pbVar39 < (byte *)((long)param_1 + lVar37)) || (uVar22 < 0x12)) {
          lVar51 = 0;
          do {
            pbVar39[lVar51] = bVar41 ^ -(pdVar40[lVar51] < pdVar35[lVar51]);
            lVar51 = lVar51 + 1;
          } while (lVar51 != (ulong)(uint)((iVar16 + -1) - iVar17) + 1);
        }
        else {
          uVar43 = (uint)((ulong)pdVar35 >> 3) & 1;
          if (uVar22 < uVar43) {
            uVar43 = uVar22;
          }
          iVar34 = iVar17;
          if (uVar43 != 0) {
            *pbVar39 = bVar41 ^ -(*pdVar40 < *pdVar35);
            iVar34 = iVar17 + 1;
          }
          uVar32 = _UNK_00230a28;
          uVar31 = _DAT_00230a20;
          uVar42 = 0;
          uVar5 = ((uVar22 - uVar43) - 0x10 >> 4) + 1;
          iVar18 = uVar5 * 0x10;
          pbVar39 = param_5 + lVar67 + (ulong)uVar43;
          pdVar35 = pdVar33 + (ulong)uVar43 + lVar67;
          pdVar40 = param_1 + (ulong)uVar43 + lVar67;
          do {
            dVar45 = pdVar35[1];
            dVar63 = *pdVar35;
            dVar64 = pdVar40[1];
            dVar62 = *pdVar40;
            uVar42 = uVar42 + 1;
            dVar61 = pdVar35[3];
            dVar60 = pdVar35[2];
            dVar50 = pdVar40[3];
            dVar49 = pdVar40[2];
            dVar48 = pdVar40[5];
            dVar47 = pdVar40[4];
            bVar53 = (byte)uVar31;
            bVar55 = (byte)uVar32;
            dVar59 = pdVar35[5];
            dVar57 = pdVar35[4];
            dVar56 = pdVar40[7];
            dVar54 = pdVar40[6];
            dVar46 = pdVar35[7];
            dVar65 = pdVar35[6];
            *(ulong *)(pbVar39 + 8) =
                 CONCAT17(-(-(pdVar40[0xf] < pdVar35[0xf]) & bVar55) ^ bVar41,
                          CONCAT16(-(-(pdVar40[0xe] < pdVar35[0xe]) & bVar53) ^ bVar41,
                                   CONCAT15(-(-(pdVar40[0xd] < pdVar35[0xd]) & bVar55) ^ bVar41,
                                            CONCAT14(-(-(pdVar40[0xc] < pdVar35[0xc]) & bVar53) ^
                                                     bVar41,CONCAT13(-(-(pdVar40[0xb] < pdVar35[0xb]
                                                                        ) & bVar55) ^ bVar41,
                                                                     CONCAT12(-(-(pdVar40[10] <
                                                                                 pdVar35[10]) &
                                                                               bVar53) ^ bVar41,
                                                                              CONCAT11(-(-(pdVar40[9
                                                  ] < pdVar35[9]) & bVar55) ^ bVar41,
                                                  -(-(pdVar40[8] < pdVar35[8]) & bVar53) ^ bVar41)))
                                                  ))));
            *(ulong *)pbVar39 =
                 CONCAT17(-(-(dVar56 < dVar46) & bVar55) ^ bVar41,
                          CONCAT16(-(-(dVar54 < dVar65) & bVar53) ^ bVar41,
                                   CONCAT15(-(-(dVar48 < dVar59) & bVar55) ^ bVar41,
                                            CONCAT14(-(-(dVar47 < dVar57) & bVar53) ^ bVar41,
                                                     CONCAT13(-(-(dVar50 < dVar61) & bVar55) ^
                                                              bVar41,CONCAT12(-(-(dVar49 < dVar60) &
                                                                               bVar53) ^ bVar41,
                                                                              CONCAT11(-(-(dVar64 < 
                                                  dVar45) & bVar55) ^ bVar41,
                                                  -(-(dVar62 < dVar63) & bVar53) ^ bVar41)))))));
            pbVar39 = pbVar39 + 0x10;
            pdVar35 = pdVar35 + 0x10;
            pdVar40 = pdVar40 + 0x10;
          } while (uVar42 < uVar5);
          iVar34 = iVar18 + iVar34;
          if (iVar18 != uVar22 - uVar43) {
            iVar18 = iVar34 + 1;
            param_5[iVar34] = bVar41 ^ -(param_1[iVar34] < pdVar33[iVar34]);
            if (iVar18 < iVar16) {
              iVar6 = iVar34 + 2;
              param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
              if (iVar6 < iVar16) {
                iVar18 = iVar34 + 3;
                param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                if (iVar18 < iVar16) {
                  iVar6 = iVar34 + 4;
                  param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                  if (iVar6 < iVar16) {
                    iVar18 = iVar34 + 5;
                    param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                    if (iVar18 < iVar16) {
                      iVar6 = iVar34 + 6;
                      param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                      if (iVar6 < iVar16) {
                        iVar18 = iVar34 + 7;
                        param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                        if (iVar18 < iVar16) {
                          iVar6 = iVar34 + 8;
                          param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                          if (iVar6 < iVar16) {
                            iVar18 = iVar34 + 9;
                            param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                            if (iVar18 < iVar16) {
                              iVar6 = iVar34 + 10;
                              param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                              if (iVar6 < iVar16) {
                                iVar18 = iVar34 + 0xb;
                                param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                                if (iVar18 < iVar16) {
                                  iVar6 = iVar34 + 0xc;
                                  param_5[iVar18] = bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                                  if (iVar6 < iVar16) {
                                    iVar18 = iVar34 + 0xd;
                                    param_5[iVar6] = bVar41 ^ -(param_1[iVar6] < pdVar33[iVar6]);
                                    if (iVar18 < iVar16) {
                                      iVar34 = iVar34 + 0xe;
                                      param_5[iVar18] =
                                           bVar41 ^ -(param_1[iVar18] < pdVar33[iVar18]);
                                      if (iVar34 < iVar16) {
                                        param_5[iVar34] =
                                             bVar41 ^ -(param_1[iVar34] < pdVar33[iVar34]);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar44 = iVar44 + -1;
      pdVar33 = (double *)((long)pdVar33 + lVar52);
      param_1 = (double *)((long)param_1 + lVar58);
      param_5 = param_5 + param_6;
    } while (iVar44 != -1);
  }
  return;
}


==================================================================

### FUNC 00230a30 (452 bytes) name=FUN_00230a30

void FUN_00230a30(double *param_1,ulong param_2,double *param_3,ulong param_4,long param_5,
                 ulong param_6,char *param_7,long param_8,int *param_9)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  char *pcVar4;
  long lVar5;
  double *pdVar6;
  double *pdVar7;
  double *pdVar8;
  char cVar9;
  char cVar10;
  int iVar11;
  long lVar12;
  
  iVar1 = *param_9;
  iVar11 = param_9[1] + -1;
  if (param_9[1] != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar12 = (long)iVar2;
    do {
      if (0 < iVar1 + -3) {
        pdVar8 = (double *)(param_5 + 0x18);
        pcVar4 = param_7;
        pdVar6 = param_1;
        pdVar7 = param_3;
        do {
          cVar10 = '\0';
          if (*pdVar7 <= *pdVar6) {
            cVar10 = -(*pdVar6 <= pdVar8[-3]);
          }
          cVar9 = '\0';
          if (pdVar7[1] <= pdVar6[1]) {
            cVar9 = -(pdVar6[1] <= pdVar8[-2]);
          }
          *pcVar4 = cVar10;
          cVar10 = '\0';
          pcVar4[1] = cVar9;
          if (pdVar7[2] <= pdVar6[2]) {
            cVar10 = -(pdVar6[2] <= pdVar8[-1]);
          }
          cVar9 = '\0';
          if (pdVar7[3] <= pdVar6[3]) {
            cVar9 = -(pdVar6[3] <= *pdVar8);
          }
          pdVar8 = pdVar8 + 4;
          pcVar4[2] = cVar10;
          pcVar4[3] = cVar9;
          pdVar7 = pdVar7 + 4;
          pdVar6 = pdVar6 + 4;
          pcVar4 = pcVar4 + 4;
        } while (pdVar8 != (double *)(param_5 + (ulong)uVar3 * 0x20 + 0x38));
      }
      if (iVar2 < iVar1) {
        lVar5 = 0;
        do {
          cVar10 = '\0';
          if (param_3[lVar12 + lVar5] <= param_1[lVar12 + lVar5]) {
            cVar10 = -(param_1[lVar12 + lVar5] <= *(double *)(param_5 + lVar12 * 8 + lVar5 * 8));
          }
          param_7[lVar5 + lVar12] = cVar10;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar11 = iVar11 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_3 = (double *)((long)param_3 + (param_4 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffff8);
      param_7 = param_7 + param_8;
    } while (iVar11 != -1);
  }
  return;
}


==================================================================

### FUNC 00230bf4 (536 bytes) name=FUN_00230bf4

void FUN_00230bf4(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 long param_7,long param_8,int *param_9)

{
  char *pcVar1;
  int iVar2;
  char *pcVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  long lVar11;
  char *pcVar12;
  long lVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  long lVar17;
  int iVar18;
  char cVar20;
  char cVar21;
  char cVar22;
  char cVar23;
  char cVar24;
  char cVar25;
  undefined8 uVar19;
  char cVar26;
  char cVar28;
  char cVar29;
  char cVar30;
  char cVar31;
  char cVar32;
  char cVar33;
  undefined8 uVar27;
  char cVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  undefined8 uVar37;
  undefined8 uVar38;
  
  iVar18 = param_9[1];
  iVar7 = *param_9;
  if (iVar18 != 0) {
    iVar9 = iVar7 + -0xf;
    iVar2 = (iVar7 - 0x10U & 0xfffffff0) + 0x10;
    if (iVar9 < 1) {
      iVar2 = 0;
    }
    uVar8 = (uint)((iVar7 + -4) - iVar2) >> 2;
    lVar17 = (long)iVar2;
    do {
      lVar11 = 0;
      if (0 < iVar9) {
        do {
          puVar4 = (undefined8 *)(param_3 + lVar11);
          puVar5 = (undefined8 *)(param_5 + lVar11);
          puVar6 = (undefined8 *)(param_7 + lVar11);
          uVar27 = ((undefined8 *)(param_1 + lVar11))[1];
          uVar19 = *(undefined8 *)(param_1 + lVar11);
          lVar11 = lVar11 + 0x10;
          uVar36 = puVar4[1];
          uVar35 = *puVar4;
          uVar38 = puVar5[1];
          uVar37 = *puVar5;
          cVar20 = (char)((ulong)uVar19 >> 8);
          cVar21 = (char)((ulong)uVar19 >> 0x10);
          cVar22 = (char)((ulong)uVar19 >> 0x18);
          cVar23 = (char)((ulong)uVar19 >> 0x20);
          cVar24 = (char)((ulong)uVar19 >> 0x28);
          cVar25 = (char)((ulong)uVar19 >> 0x30);
          cVar26 = (char)((ulong)uVar19 >> 0x38);
          cVar28 = (char)((ulong)uVar27 >> 8);
          cVar29 = (char)((ulong)uVar27 >> 0x10);
          cVar30 = (char)((ulong)uVar27 >> 0x18);
          cVar31 = (char)((ulong)uVar27 >> 0x20);
          cVar32 = (char)((ulong)uVar27 >> 0x28);
          cVar33 = (char)((ulong)uVar27 >> 0x30);
          cVar34 = (char)((ulong)uVar27 >> 0x38);
          puVar6[1] = CONCAT17(-((char)((ulong)uVar36 >> 0x38) <= cVar34) &
                               ~-((char)((ulong)uVar38 >> 0x38) < cVar34),
                               CONCAT16(-((char)((ulong)uVar36 >> 0x30) <= cVar33) &
                                        ~-((char)((ulong)uVar38 >> 0x30) < cVar33),
                                        CONCAT15(-((char)((ulong)uVar36 >> 0x28) <= cVar32) &
                                                 ~-((char)((ulong)uVar38 >> 0x28) < cVar32),
                                                 CONCAT14(-((char)((ulong)uVar36 >> 0x20) <= cVar31)
                                                          & ~-((char)((ulong)uVar38 >> 0x20) <
                                                              cVar31),
                                                          CONCAT13(-((char)((ulong)uVar36 >> 0x18)
                                                                    <= cVar30) &
                                                                   ~-((char)((ulong)uVar38 >> 0x18)
                                                                     < cVar30),
                                                                   CONCAT12(-((char)((ulong)uVar36
                                                                                    >> 0x10) <=
                                                                             cVar29) &
                                                                            ~-((char)((ulong)uVar38
                                                                                     >> 0x10) <
                                                                              cVar29),
                                                                            CONCAT11(-((char)((ulong
                                                  )uVar36 >> 8) <= cVar28) &
                                                  ~-((char)((ulong)uVar38 >> 8) < cVar28),
                                                  -((char)uVar36 <= (char)uVar27) &
                                                  ~-((char)uVar38 < (char)uVar27))))))));
          *puVar6 = CONCAT17(-((char)((ulong)uVar35 >> 0x38) <= cVar26) &
                             ~-((char)((ulong)uVar37 >> 0x38) < cVar26),
                             CONCAT16(-((char)((ulong)uVar35 >> 0x30) <= cVar25) &
                                      ~-((char)((ulong)uVar37 >> 0x30) < cVar25),
                                      CONCAT15(-((char)((ulong)uVar35 >> 0x28) <= cVar24) &
                                               ~-((char)((ulong)uVar37 >> 0x28) < cVar24),
                                               CONCAT14(-((char)((ulong)uVar35 >> 0x20) <= cVar23) &
                                                        ~-((char)((ulong)uVar37 >> 0x20) < cVar23),
                                                        CONCAT13(-((char)((ulong)uVar35 >> 0x18) <=
                                                                  cVar22) &
                                                                 ~-((char)((ulong)uVar37 >> 0x18) <
                                                                   cVar22),
                                                                 CONCAT12(-((char)((ulong)uVar35 >>
                                                                                  0x10) <= cVar21) &
                                                                          ~-((char)((ulong)uVar37 >>
                                                                                   0x10) < cVar21),
                                                                          CONCAT11(-((char)((ulong)
                                                  uVar35 >> 8) <= cVar20) &
                                                  ~-((char)((ulong)uVar37 >> 8) < cVar20),
                                                  -((char)uVar35 <= (char)uVar19) &
                                                  ~-((char)uVar37 < (char)uVar19))))))));
        } while ((int)lVar11 < iVar9);
      }
      iVar10 = iVar2;
      if (iVar2 < iVar7 + -3) {
        pcVar15 = (char *)(param_1 + lVar17);
        pcVar14 = (char *)(param_7 + lVar17);
        pcVar16 = (char *)(param_5 + lVar17);
        pcVar12 = (char *)(param_3 + lVar17);
        do {
          cVar20 = '\0';
          cVar21 = '\0';
          cVar22 = '\0';
          cVar23 = '\0';
          if (*pcVar12 <= *pcVar15) {
            cVar20 = -(*pcVar15 <= *pcVar16);
          }
          if (pcVar12[1] <= pcVar15[1]) {
            cVar21 = -(pcVar15[1] <= pcVar16[1]);
          }
          *pcVar14 = cVar20;
          pcVar14[1] = cVar21;
          if (pcVar12[2] <= pcVar15[2]) {
            cVar22 = -(pcVar15[2] <= pcVar16[2]);
          }
          pcVar1 = pcVar15 + 3;
          pcVar3 = pcVar12 + 4;
          pcVar15 = pcVar15 + 4;
          if ((int)(uint)(byte)pcVar12[3] <= (int)*pcVar1) {
            cVar23 = -(*pcVar1 <= pcVar16[3]);
          }
          pcVar14[2] = cVar22;
          pcVar14[3] = cVar23;
          pcVar16 = pcVar16 + 4;
          pcVar14 = pcVar14 + 4;
          pcVar12 = pcVar3;
          iVar10 = iVar2 + 4 + uVar8 * 4;
        } while (pcVar3 != (char *)(param_3 + lVar17 + 4 + (ulong)uVar8 * 4));
      }
      lVar11 = (long)iVar10;
      if (iVar10 < iVar7) {
        lVar13 = 0;
        do {
          cVar21 = '\0';
          cVar20 = *(char *)(param_1 + lVar11 + lVar13);
          if (*(char *)(param_3 + lVar11 + lVar13) <= cVar20) {
            cVar21 = -(cVar20 <= *(char *)(param_5 + lVar11 + lVar13));
          }
          *(char *)(param_7 + lVar11 + lVar13) = cVar21;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar7 + -1) - iVar10) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
      param_7 = param_7 + param_8;
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 00230e0c (2740 bytes) name=FUN_00230e0c

void FUN_00230e0c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  undefined4 uVar17;
  undefined4 uVar18;
  undefined4 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined4 uVar22;
  undefined1 auVar23 [16];
  unkbyte10 Var24;
  byte bVar25;
  int iVar26;
  undefined1 (*pauVar27) [16];
  byte *pbVar28;
  char *pcVar29;
  undefined8 *puVar30;
  unkbyte10 *pVar31;
  byte *pbVar32;
  long lVar33;
  uint uVar34;
  unkbyte10 *pVar35;
  uint uVar36;
  undefined1 (*pauVar37) [16];
  long lVar38;
  int iVar39;
  long lVar40;
  undefined8 *puVar41;
  long lVar42;
  byte bVar43;
  byte bVar44;
  undefined4 uVar45;
  undefined4 uVar48;
  undefined4 uVar49;
  undefined4 uVar50;
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined4 uVar51;
  undefined4 uVar53;
  undefined4 uVar54;
  undefined1 auVar52 [16];
  undefined4 uVar55;
  undefined4 uVar56;
  undefined4 uVar57;
  undefined4 uVar58;
  undefined4 uVar59;
  
  iVar39 = param_7[1];
  iVar8 = *param_7;
  if (iVar39 != 0) {
    uVar11 = iVar8 - 0x20;
    iVar9 = ((uVar11 >> 5) + 1) * 0x20;
    if ((int)uVar11 < 0) {
      iVar9 = 0;
    }
    iVar12 = iVar8 + -3;
    uVar13 = (iVar8 + -4) - iVar9;
    lVar40 = (long)iVar9;
    uVar10 = uVar13 >> 2;
    uVar1 = (uVar10 - 3 >> 2) + 1;
    iVar6 = iVar9 + 4 + uVar10 * 4;
    lVar3 = lVar40 + 0x40;
    do {
      if (-1 < (int)uVar11) {
        pauVar27 = (undefined1 (*) [16])(param_1 + 0x10);
        pVar31 = (unkbyte10 *)(param_3 + 0x10);
        puVar30 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar37 = pauVar27 + -1;
          pVar35 = pVar31 + -1;
          auVar46 = *pauVar27;
          uVar20 = *(undefined8 *)((long)pVar31 + 8);
          Var24 = *pVar31;
          pauVar27 = pauVar27 + 2;
          uVar21 = *(undefined8 *)((long)pVar31 + -8);
          pVar31 = pVar31 + 2;
          auVar23[9] = (char)((ulong)uVar21 >> 8);
          auVar23._0_9_ = *(unkbyte9 *)pVar35;
          auVar23[10] = (char)((ulong)uVar21 >> 0x10);
          auVar23[0xb] = (char)((ulong)uVar21 >> 0x18);
          auVar23[0xc] = (char)((ulong)uVar21 >> 0x20);
          auVar23[0xd] = (char)((ulong)uVar21 >> 0x28);
          auVar23[0xe] = (char)((ulong)uVar21 >> 0x30);
          auVar23[0xf] = (char)((ulong)uVar21 >> 0x38);
          auVar52 = NEON_uabd(*pauVar37,auVar23,1);
          puVar30[-1] = auVar52._8_8_;
          puVar30[-2] = auVar52._0_8_;
          auVar52._10_2_ = (short)((ulong)uVar20 >> 0x10);
          auVar52._0_10_ = Var24;
          auVar52._12_2_ = (short)((ulong)uVar20 >> 0x20);
          auVar52._14_2_ = (short)((ulong)uVar20 >> 0x30);
          auVar52 = NEON_uabd(auVar46,auVar52,1);
          puVar30[1] = auVar52._8_8_;
          *puVar30 = auVar52._0_8_;
          puVar30 = puVar30 + 4;
        } while (pauVar27 != (undefined1 (*) [16])(param_1 + (ulong)(uVar11 >> 5) * 0x20 + 0x30));
      }
      iVar16 = iVar9;
      if (iVar9 < iVar12) {
        pbVar28 = (byte *)(param_1 + lVar40);
        pcVar29 = (char *)(param_5 + lVar40);
        pbVar32 = (byte *)(param_3 + lVar40);
        iVar16 = iVar6;
        if ((pbVar28 < (byte *)(param_5 + lVar3) && pcVar29 < (char *)(param_1 + lVar3) ||
             pbVar32 < (byte *)(param_5 + lVar3) && pcVar29 < (char *)(param_3 + lVar3)) ||
           (uVar10 + 1 < 4)) {
          do {
            pbVar5 = pbVar28 + 4;
            bVar43 = *pbVar32;
            bVar44 = *pbVar28;
            bVar25 = (byte)((int)((uint)pbVar28[1] - (uint)pbVar32[1]) >> 0x1f);
            pcVar29[1] = ((byte)((uint)pbVar28[1] - (uint)pbVar32[1]) ^ bVar25) - bVar25;
            bVar25 = (byte)((int)((uint)bVar44 - (uint)bVar43) >> 0x1f);
            *pcVar29 = ((byte)((uint)bVar44 - (uint)bVar43) ^ bVar25) - bVar25;
            bVar43 = pbVar32[2];
            bVar44 = pbVar28[2];
            bVar25 = (byte)((int)((uint)pbVar28[3] - (uint)pbVar32[3]) >> 0x1f);
            pcVar29[3] = ((byte)((uint)pbVar28[3] - (uint)pbVar32[3]) ^ bVar25) - bVar25;
            bVar25 = (byte)((int)((uint)bVar44 - (uint)bVar43) >> 0x1f);
            pcVar29[2] = ((byte)((uint)bVar44 - (uint)bVar43) ^ bVar25) - bVar25;
            pbVar28 = pbVar5;
            pcVar29 = pcVar29 + 4;
            pbVar32 = pbVar32 + 4;
          } while (pbVar5 != (byte *)(param_1 + lVar40 + 4 + (ulong)uVar10 * 4));
        }
        else {
          iVar26 = iVar9;
          if (0xb < uVar13) {
            uVar34 = 0;
            do {
              uVar34 = uVar34 + 1;
              uVar21 = *(undefined8 *)(pbVar32 + 8);
              uVar20 = *(undefined8 *)pbVar32;
              bVar43 = (byte)((ulong)uVar20 >> 0x28);
              bVar44 = (byte)((ulong)uVar21 >> 0x28);
              uVar56 = MP_INT_ABS((CONCAT12(pbVar28[1],(ushort)*pbVar28) & 0xffff) -
                                  (uint)(byte)uVar20);
              uVar57 = MP_INT_ABS((uint)pbVar28[1] - (uint)(byte)((ulong)uVar20 >> 8));
              uVar58 = MP_INT_ABS((uint)pbVar28[2] - (uint)(byte)((ulong)uVar20 >> 0x10));
              uVar59 = MP_INT_ABS((uint)pbVar28[3] - (uint)(byte)((ulong)uVar20 >> 0x18));
              uVar51 = MP_INT_ABS((uint)pbVar28[4] -
                                  (CONCAT12(bVar43,(ushort)(byte)((ulong)uVar20 >> 0x20)) & 0xffff))
              ;
              uVar53 = MP_INT_ABS((uint)pbVar28[5] - (uint)bVar43);
              uVar54 = MP_INT_ABS((uint)pbVar28[6] - (uint)(byte)((ulong)uVar20 >> 0x30));
              uVar55 = MP_INT_ABS((uint)pbVar28[7] - (uint)(byte)((ulong)uVar20 >> 0x38));
              uVar17 = MP_INT_ABS((CONCAT12(pbVar28[9],(ushort)pbVar28[8]) & 0xffff) -
                                  (uint)(byte)uVar21);
              uVar18 = MP_INT_ABS((uint)pbVar28[9] - (uint)(byte)((ulong)uVar21 >> 8));
              uVar19 = MP_INT_ABS((uint)pbVar28[10] - (uint)(byte)((ulong)uVar21 >> 0x10));
              uVar22 = MP_INT_ABS((uint)pbVar28[0xb] - (uint)(byte)((ulong)uVar21 >> 0x18));
              uVar45 = MP_INT_ABS((uint)pbVar28[0xc] -
                                  (CONCAT12(bVar44,(ushort)(byte)((ulong)uVar21 >> 0x20)) & 0xffff))
              ;
              uVar48 = MP_INT_ABS((uint)pbVar28[0xd] - (uint)bVar44);
              uVar49 = MP_INT_ABS((uint)pbVar28[0xe] - (uint)(byte)((ulong)uVar21 >> 0x30));
              uVar50 = MP_INT_ABS((uint)pbVar28[0xf] - (uint)(byte)((ulong)uVar21 >> 0x38));
              auVar46._0_8_ =
                   CONCAT17((char)uVar55,
                            CONCAT16((char)uVar54,
                                     CONCAT15((char)uVar53,
                                              CONCAT14((char)uVar51,
                                                       CONCAT13((char)uVar59,
                                                                CONCAT12((char)uVar58,
                                                                         CONCAT11((char)uVar57,
                                                                                  (char)uVar56))))))
                           );
              auVar46[8] = (char)uVar17;
              auVar46[9] = (char)uVar18;
              auVar46[10] = (char)uVar19;
              auVar46[0xb] = (char)uVar22;
              auVar46[0xc] = (char)uVar45;
              auVar46[0xd] = (char)uVar48;
              auVar46[0xe] = (char)uVar49;
              auVar46[0xf] = (char)uVar50;
              *(long *)(pcVar29 + 8) = auVar46._8_8_;
              *(undefined8 *)pcVar29 = auVar46._0_8_;
              pbVar28 = pbVar28 + 0x10;
              pcVar29 = pcVar29 + 0x10;
              pbVar32 = pbVar32 + 0x10;
            } while (uVar34 < uVar1);
            iVar26 = iVar9 + uVar1 * 0x10;
            if (uVar10 + 1 == uVar1 * 4) goto LAB_00231178;
          }
          lVar33 = (long)iVar26;
          lVar38 = lVar33 + 1;
          lVar42 = lVar33 + 2;
          lVar4 = lVar33 + 3;
          iVar14 = (uint)*(byte *)(param_1 + lVar33) - (uint)*(byte *)(param_3 + lVar33);
          iVar15 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
          bVar43 = (byte)(iVar14 >> 0x1f);
          *(byte *)(param_5 + lVar33) = ((byte)iVar14 ^ bVar43) - bVar43;
          bVar43 = (byte)(iVar15 >> 0x1f);
          *(byte *)(param_5 + lVar38) = ((byte)iVar15 ^ bVar43) - bVar43;
          iVar14 = (uint)*(byte *)(param_1 + lVar42) - (uint)*(byte *)(param_3 + lVar42);
          iVar15 = (uint)*(byte *)(param_1 + lVar4) - (uint)*(byte *)(param_3 + lVar4);
          bVar43 = (byte)(iVar14 >> 0x1f);
          *(byte *)(param_5 + lVar42) = ((byte)iVar14 ^ bVar43) - bVar43;
          bVar43 = (byte)(iVar15 >> 0x1f);
          *(byte *)(param_5 + lVar4) = ((byte)iVar15 ^ bVar43) - bVar43;
          if (iVar26 + 4 < iVar12) {
            lVar33 = (long)(iVar26 + 4);
            lVar38 = lVar33 + 1;
            lVar42 = lVar33 + 2;
            lVar4 = lVar33 + 3;
            iVar14 = (uint)*(byte *)(param_1 + lVar33) - (uint)*(byte *)(param_3 + lVar33);
            iVar15 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
            bVar43 = (byte)(iVar14 >> 0x1f);
            *(byte *)(param_5 + lVar33) = ((byte)iVar14 ^ bVar43) - bVar43;
            bVar43 = (byte)(iVar15 >> 0x1f);
            *(byte *)(param_5 + lVar38) = ((byte)iVar15 ^ bVar43) - bVar43;
            iVar14 = (uint)*(byte *)(param_1 + lVar42) - (uint)*(byte *)(param_3 + lVar42);
            iVar15 = (uint)*(byte *)(param_1 + lVar4) - (uint)*(byte *)(param_3 + lVar4);
            bVar43 = (byte)(iVar14 >> 0x1f);
            *(byte *)(param_5 + lVar42) = ((byte)iVar14 ^ bVar43) - bVar43;
            bVar43 = (byte)(iVar15 >> 0x1f);
            *(byte *)(param_5 + lVar4) = ((byte)iVar15 ^ bVar43) - bVar43;
            if (iVar26 + 8 < iVar12) {
              lVar33 = (long)(iVar26 + 8);
              lVar38 = lVar33 + 1;
              lVar42 = lVar33 + 2;
              lVar4 = lVar33 + 3;
              iVar26 = (uint)*(byte *)(param_1 + lVar33) - (uint)*(byte *)(param_3 + lVar33);
              iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
              bVar43 = (byte)(iVar26 >> 0x1f);
              *(byte *)(param_5 + lVar33) = ((byte)iVar26 ^ bVar43) - bVar43;
              bVar43 = (byte)(iVar14 >> 0x1f);
              *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
              iVar26 = (uint)*(byte *)(param_1 + lVar42) - (uint)*(byte *)(param_3 + lVar42);
              iVar14 = (uint)*(byte *)(param_1 + lVar4) - (uint)*(byte *)(param_3 + lVar4);
              bVar43 = (byte)(iVar26 >> 0x1f);
              *(byte *)(param_5 + lVar42) = ((byte)iVar26 ^ bVar43) - bVar43;
              bVar43 = (byte)(iVar14 >> 0x1f);
              *(byte *)(param_5 + lVar4) = ((byte)iVar14 ^ bVar43) - bVar43;
            }
          }
        }
      }
LAB_00231178:
      if (iVar16 < iVar8) {
        lVar42 = (long)iVar16;
        uVar34 = iVar8 - iVar16;
        lVar38 = lVar42 + 0x10;
        pbVar28 = (byte *)(param_1 + lVar42);
        pcVar29 = (char *)(param_5 + lVar42);
        pbVar32 = (byte *)(param_3 + lVar42);
        if ((pbVar28 < (byte *)(param_5 + lVar38) && pcVar29 < (char *)(param_1 + lVar38) ||
             pbVar32 < (byte *)(param_5 + lVar38) && pcVar29 < (char *)(param_3 + lVar38)) ||
           (uVar34 < 0x12)) {
          lVar38 = 0;
          do {
            bVar43 = (byte)((int)((uint)pbVar28[lVar38] - (uint)pbVar32[lVar38]) >> 0x1f);
            pcVar29[lVar38] =
                 ((byte)((uint)pbVar28[lVar38] - (uint)pbVar32[lVar38]) ^ bVar43) - bVar43;
            lVar38 = lVar38 + 1;
          } while (lVar38 != (ulong)(uint)((iVar8 + -1) - iVar16) + 1);
        }
        else {
          uVar7 = -(int)pbVar28 & 0xf;
          if (uVar34 < uVar7) {
            uVar7 = uVar34;
          }
          iVar26 = iVar16;
          if (uVar7 != 0) {
            iVar26 = iVar16 + 1;
            bVar43 = (byte)((int)((uint)*pbVar28 - (uint)*pbVar32) >> 0x1f);
            *pcVar29 = ((byte)((uint)*pbVar28 - (uint)*pbVar32) ^ bVar43) - bVar43;
            if (uVar7 != 1) {
              lVar38 = (long)iVar26;
              iVar26 = iVar16 + 2;
              iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
              bVar43 = (byte)(iVar14 >> 0x1f);
              *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
              if (uVar7 != 2) {
                lVar38 = (long)iVar26;
                iVar26 = iVar16 + 3;
                iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                bVar43 = (byte)(iVar14 >> 0x1f);
                *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                if (uVar7 != 3) {
                  lVar38 = (long)iVar26;
                  iVar26 = iVar16 + 4;
                  iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                  bVar43 = (byte)(iVar14 >> 0x1f);
                  *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                  if (uVar7 != 4) {
                    lVar38 = (long)iVar26;
                    iVar26 = iVar16 + 5;
                    iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                    bVar43 = (byte)(iVar14 >> 0x1f);
                    *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                    if (uVar7 != 5) {
                      lVar38 = (long)iVar26;
                      iVar26 = iVar16 + 6;
                      iVar14 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38)
                      ;
                      bVar43 = (byte)(iVar14 >> 0x1f);
                      *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                      if (uVar7 != 6) {
                        lVar38 = (long)iVar26;
                        iVar26 = iVar16 + 7;
                        iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                 (uint)*(byte *)(param_3 + lVar38);
                        bVar43 = (byte)(iVar14 >> 0x1f);
                        *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                        if (uVar7 != 7) {
                          lVar38 = (long)iVar26;
                          iVar26 = iVar16 + 8;
                          iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                   (uint)*(byte *)(param_3 + lVar38);
                          bVar43 = (byte)(iVar14 >> 0x1f);
                          *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                          if (uVar7 != 8) {
                            lVar38 = (long)iVar26;
                            iVar26 = iVar16 + 9;
                            iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                     (uint)*(byte *)(param_3 + lVar38);
                            bVar43 = (byte)(iVar14 >> 0x1f);
                            *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                            if (uVar7 != 9) {
                              lVar38 = (long)iVar26;
                              iVar26 = iVar16 + 10;
                              iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                       (uint)*(byte *)(param_3 + lVar38);
                              bVar43 = (byte)(iVar14 >> 0x1f);
                              *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                              if (uVar7 != 10) {
                                lVar38 = (long)iVar26;
                                iVar26 = iVar16 + 0xb;
                                iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                         (uint)*(byte *)(param_3 + lVar38);
                                bVar43 = (byte)(iVar14 >> 0x1f);
                                *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                                if (uVar7 != 0xb) {
                                  lVar38 = (long)iVar26;
                                  iVar26 = iVar16 + 0xc;
                                  iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                           (uint)*(byte *)(param_3 + lVar38);
                                  bVar43 = (byte)(iVar14 >> 0x1f);
                                  *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                                  if (uVar7 != 0xc) {
                                    lVar38 = (long)iVar26;
                                    iVar26 = iVar16 + 0xd;
                                    iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                             (uint)*(byte *)(param_3 + lVar38);
                                    bVar43 = (byte)(iVar14 >> 0x1f);
                                    *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43;
                                    if (uVar7 != 0xd) {
                                      lVar38 = (long)iVar26;
                                      iVar26 = iVar16 + 0xe;
                                      iVar14 = (uint)*(byte *)(param_1 + lVar38) -
                                               (uint)*(byte *)(param_3 + lVar38);
                                      bVar43 = (byte)(iVar14 >> 0x1f);
                                      *(byte *)(param_5 + lVar38) = ((byte)iVar14 ^ bVar43) - bVar43
                                      ;
                                      if (uVar7 == 0xf) {
                                        lVar38 = (long)iVar26;
                                        iVar26 = iVar16 + 0xf;
                                        iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                                 (uint)*(byte *)(param_3 + lVar38);
                                        bVar43 = (byte)(iVar16 >> 0x1f);
                                        *(byte *)(param_5 + lVar38) =
                                             ((byte)iVar16 ^ bVar43) - bVar43;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar2 = ((uVar34 - uVar7) - 0x10 >> 4) + 1;
          iVar16 = uVar2 * 0x10;
          if (0xe < (uVar34 - 1) - uVar7) {
            lVar42 = lVar42 + (ulong)uVar7;
            uVar36 = 0;
            puVar30 = (undefined8 *)(param_5 + lVar42);
            puVar41 = (undefined8 *)(param_3 + lVar42);
            pbVar28 = (byte *)(param_1 + lVar42);
            do {
              uVar36 = uVar36 + 1;
              uVar21 = puVar41[1];
              uVar20 = *puVar41;
              bVar43 = (byte)((ulong)uVar20 >> 0x28);
              bVar44 = (byte)((ulong)uVar21 >> 0x28);
              uVar56 = MP_INT_ABS((CONCAT12(pbVar28[1],(ushort)*pbVar28) & 0xffff) -
                                  (uint)(byte)uVar20);
              uVar57 = MP_INT_ABS((uint)pbVar28[1] - (uint)(byte)((ulong)uVar20 >> 8));
              uVar58 = MP_INT_ABS((uint)pbVar28[2] - (uint)(byte)((ulong)uVar20 >> 0x10));
              uVar59 = MP_INT_ABS((uint)pbVar28[3] - (uint)(byte)((ulong)uVar20 >> 0x18));
              uVar51 = MP_INT_ABS((uint)pbVar28[4] -
                                  (CONCAT12(bVar43,(ushort)(byte)((ulong)uVar20 >> 0x20)) & 0xffff))
              ;
              uVar53 = MP_INT_ABS((uint)pbVar28[5] - (uint)bVar43);
              uVar54 = MP_INT_ABS((uint)pbVar28[6] - (uint)(byte)((ulong)uVar20 >> 0x30));
              uVar55 = MP_INT_ABS((uint)pbVar28[7] - (uint)(byte)((ulong)uVar20 >> 0x38));
              uVar17 = MP_INT_ABS((CONCAT12(pbVar28[9],(ushort)pbVar28[8]) & 0xffff) -
                                  (uint)(byte)uVar21);
              uVar18 = MP_INT_ABS((uint)pbVar28[9] - (uint)(byte)((ulong)uVar21 >> 8));
              uVar19 = MP_INT_ABS((uint)pbVar28[10] - (uint)(byte)((ulong)uVar21 >> 0x10));
              uVar22 = MP_INT_ABS((uint)pbVar28[0xb] - (uint)(byte)((ulong)uVar21 >> 0x18));
              uVar45 = MP_INT_ABS((uint)pbVar28[0xc] -
                                  (CONCAT12(bVar44,(ushort)(byte)((ulong)uVar21 >> 0x20)) & 0xffff))
              ;
              uVar48 = MP_INT_ABS((uint)pbVar28[0xd] - (uint)bVar44);
              uVar49 = MP_INT_ABS((uint)pbVar28[0xe] - (uint)(byte)((ulong)uVar21 >> 0x30));
              uVar50 = MP_INT_ABS((uint)pbVar28[0xf] - (uint)(byte)((ulong)uVar21 >> 0x38));
              auVar47._0_8_ =
                   CONCAT17((char)uVar55,
                            CONCAT16((char)uVar54,
                                     CONCAT15((char)uVar53,
                                              CONCAT14((char)uVar51,
                                                       CONCAT13((char)uVar59,
                                                                CONCAT12((char)uVar58,
                                                                         CONCAT11((char)uVar57,
                                                                                  (char)uVar56))))))
                           );
              auVar47[8] = (char)uVar17;
              auVar47[9] = (char)uVar18;
              auVar47[10] = (char)uVar19;
              auVar47[0xb] = (char)uVar22;
              auVar47[0xc] = (char)uVar45;
              auVar47[0xd] = (char)uVar48;
              auVar47[0xe] = (char)uVar49;
              auVar47[0xf] = (char)uVar50;
              puVar30[1] = auVar47._8_8_;
              *puVar30 = auVar47._0_8_;
              puVar30 = puVar30 + 2;
              puVar41 = puVar41 + 2;
              pbVar28 = pbVar28 + 0x10;
            } while (uVar36 < uVar2);
            iVar26 = iVar26 + iVar16;
            if (uVar34 - uVar7 == iVar16) goto LAB_002317a4;
          }
          lVar38 = (long)iVar26;
          iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
          bVar43 = (byte)(iVar16 >> 0x1f);
          *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
          if (iVar26 + 1 < iVar8) {
            lVar38 = (long)(iVar26 + 1);
            iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
            bVar43 = (byte)(iVar16 >> 0x1f);
            *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
            if (iVar26 + 2 < iVar8) {
              lVar38 = (long)(iVar26 + 2);
              iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
              bVar43 = (byte)(iVar16 >> 0x1f);
              *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
              if (iVar26 + 3 < iVar8) {
                lVar38 = (long)(iVar26 + 3);
                iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                bVar43 = (byte)(iVar16 >> 0x1f);
                *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                if (iVar26 + 4 < iVar8) {
                  lVar38 = (long)(iVar26 + 4);
                  iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                  bVar43 = (byte)(iVar16 >> 0x1f);
                  *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                  if (iVar26 + 5 < iVar8) {
                    lVar38 = (long)(iVar26 + 5);
                    iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38);
                    bVar43 = (byte)(iVar16 >> 0x1f);
                    *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                    if (iVar26 + 6 < iVar8) {
                      lVar38 = (long)(iVar26 + 6);
                      iVar16 = (uint)*(byte *)(param_1 + lVar38) - (uint)*(byte *)(param_3 + lVar38)
                      ;
                      bVar43 = (byte)(iVar16 >> 0x1f);
                      *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                      if (iVar26 + 7 < iVar8) {
                        lVar38 = (long)(iVar26 + 7);
                        iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                 (uint)*(byte *)(param_3 + lVar38);
                        bVar43 = (byte)(iVar16 >> 0x1f);
                        *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                        if (iVar26 + 8 < iVar8) {
                          lVar38 = (long)(iVar26 + 8);
                          iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                   (uint)*(byte *)(param_3 + lVar38);
                          bVar43 = (byte)(iVar16 >> 0x1f);
                          *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                          if (iVar26 + 9 < iVar8) {
                            lVar38 = (long)(iVar26 + 9);
                            iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                     (uint)*(byte *)(param_3 + lVar38);
                            bVar43 = (byte)(iVar16 >> 0x1f);
                            *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                            if (iVar26 + 10 < iVar8) {
                              lVar38 = (long)(iVar26 + 10);
                              iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                       (uint)*(byte *)(param_3 + lVar38);
                              bVar43 = (byte)(iVar16 >> 0x1f);
                              *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                              if (iVar26 + 0xb < iVar8) {
                                lVar38 = (long)(iVar26 + 0xb);
                                iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                         (uint)*(byte *)(param_3 + lVar38);
                                bVar43 = (byte)(iVar16 >> 0x1f);
                                *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                                if (iVar26 + 0xc < iVar8) {
                                  lVar38 = (long)(iVar26 + 0xc);
                                  iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                           (uint)*(byte *)(param_3 + lVar38);
                                  bVar43 = (byte)(iVar16 >> 0x1f);
                                  *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                                  if (iVar26 + 0xd < iVar8) {
                                    lVar38 = (long)(iVar26 + 0xd);
                                    iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                             (uint)*(byte *)(param_3 + lVar38);
                                    bVar43 = (byte)(iVar16 >> 0x1f);
                                    *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43;
                                    if (iVar26 + 0xe < iVar8) {
                                      lVar38 = (long)(iVar26 + 0xe);
                                      iVar16 = (uint)*(byte *)(param_1 + lVar38) -
                                               (uint)*(byte *)(param_3 + lVar38);
                                      bVar43 = (byte)(iVar16 >> 0x1f);
                                      *(byte *)(param_5 + lVar38) = ((byte)iVar16 ^ bVar43) - bVar43
                                      ;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002317a4:
      iVar39 = iVar39 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar39 != 0);
  }
  return;
}


==================================================================

### FUNC 002318c0 (2040 bytes) name=FUN_002318c0

void FUN_002318c0(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  undefined8 *puVar18;
  byte *pbVar19;
  undefined8 *puVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  uint uVar24;
  uint uVar25;
  long lVar26;
  long lVar27;
  int iVar28;
  long lVar29;
  long lVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  undefined8 uVar37;
  undefined8 uVar38;
  
  iVar28 = param_7[1];
  iVar7 = *param_7;
  if (iVar28 != 0) {
    uVar13 = iVar7 - 0x20;
    iVar10 = ((uVar13 >> 5) + 1) * 0x20;
    if ((int)uVar13 < 0) {
      iVar10 = 0;
    }
    iVar14 = iVar7 + -3;
    uVar15 = (iVar7 + -4) - iVar10;
    lVar29 = (long)iVar10;
    uVar12 = uVar15 >> 2;
    uVar1 = (uVar12 - 3 >> 2) + 1;
    iVar5 = iVar10 + 4 + uVar12 * 4;
    lVar2 = lVar29 + 0x40;
    do {
      if (-1 < (int)uVar13) {
        puVar18 = (undefined8 *)(param_1 + 0x10);
        puVar22 = (undefined8 *)(param_3 + 0x10);
        puVar20 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar36 = puVar18[1];
          uVar35 = *puVar18;
          uVar38 = puVar18[-1];
          uVar37 = puVar18[-2];
          puVar18 = puVar18 + 4;
          uVar34 = puVar22[-1];
          uVar33 = puVar22[-2];
          uVar32 = puVar22[1];
          uVar31 = *puVar22;
          puVar22 = puVar22 + 4;
          puVar20[-1] = CONCAT17((byte)((ulong)uVar34 >> 0x38) & (byte)((ulong)uVar38 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar34 >> 0x30) &
                                          (byte)((ulong)uVar38 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar34 >> 0x28) &
                                                   (byte)((ulong)uVar38 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar34 >> 0x20) &
                                                            (byte)((ulong)uVar38 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar34 >> 0x18) &
                                                                     (byte)((ulong)uVar38 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar34
                                                                                    >> 0x10) &
                                                                              (byte)((ulong)uVar38
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar34 >> 8) & (byte)((ulong)uVar38 >> 8),
                                                  (byte)uVar34 & (byte)uVar38)))))));
          puVar20[-2] = CONCAT17((byte)((ulong)uVar33 >> 0x38) & (byte)((ulong)uVar37 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar33 >> 0x30) &
                                          (byte)((ulong)uVar37 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar33 >> 0x28) &
                                                   (byte)((ulong)uVar37 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar33 >> 0x20) &
                                                            (byte)((ulong)uVar37 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar33 >> 0x18) &
                                                                     (byte)((ulong)uVar37 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar33
                                                                                    >> 0x10) &
                                                                              (byte)((ulong)uVar37
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar33 >> 8) & (byte)((ulong)uVar37 >> 8),
                                                  (byte)uVar33 & (byte)uVar37)))))));
          puVar20[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) & (byte)((ulong)uVar36 >> 0x38),
                                CONCAT16((byte)((ulong)uVar32 >> 0x30) &
                                         (byte)((ulong)uVar36 >> 0x30),
                                         CONCAT15((byte)((ulong)uVar32 >> 0x28) &
                                                  (byte)((ulong)uVar36 >> 0x28),
                                                  CONCAT14((byte)((ulong)uVar32 >> 0x20) &
                                                           (byte)((ulong)uVar36 >> 0x20),
                                                           CONCAT13((byte)((ulong)uVar32 >> 0x18) &
                                                                    (byte)((ulong)uVar36 >> 0x18),
                                                                    CONCAT12((byte)((ulong)uVar32 >>
                                                                                   0x10) &
                                                                             (byte)((ulong)uVar36 >>
                                                                                   0x10),
                                                                             CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) & (byte)((ulong)uVar36 >> 8),
                                                  (byte)uVar32 & (byte)uVar36)))))));
          *puVar20 = CONCAT17((byte)((ulong)uVar31 >> 0x38) & (byte)((ulong)uVar35 >> 0x38),
                              CONCAT16((byte)((ulong)uVar31 >> 0x30) & (byte)((ulong)uVar35 >> 0x30)
                                       ,CONCAT15((byte)((ulong)uVar31 >> 0x28) &
                                                 (byte)((ulong)uVar35 >> 0x28),
                                                 CONCAT14((byte)((ulong)uVar31 >> 0x20) &
                                                          (byte)((ulong)uVar35 >> 0x20),
                                                          CONCAT13((byte)((ulong)uVar31 >> 0x18) &
                                                                   (byte)((ulong)uVar35 >> 0x18),
                                                                   CONCAT12((byte)((ulong)uVar31 >>
                                                                                  0x10) &
                                                                            (byte)((ulong)uVar35 >>
                                                                                  0x10),
                                                                            CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) & (byte)((ulong)uVar35 >> 8),
                                                  (byte)uVar31 & (byte)uVar35)))))));
          puVar20 = puVar20 + 4;
        } while (puVar18 != (undefined8 *)(param_1 + (ulong)(uVar13 >> 5) * 0x20 + 0x30));
      }
      iVar11 = iVar10;
      if (iVar10 < iVar14) {
        pbVar19 = (byte *)(param_1 + lVar29);
        pbVar21 = (byte *)(param_5 + lVar29);
        pbVar23 = (byte *)(param_3 + lVar29);
        iVar11 = iVar5;
        if ((pbVar19 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_1 + lVar2) ||
             pbVar23 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_3 + lVar2)) ||
           (uVar12 + 1 < 5)) {
          do {
            pbVar4 = pbVar19 + 4;
            bVar8 = *pbVar23;
            bVar9 = *pbVar19;
            pbVar21[1] = pbVar23[1] & pbVar19[1];
            *pbVar21 = bVar8 & bVar9;
            bVar8 = pbVar19[2];
            bVar9 = pbVar23[2];
            pbVar21[3] = pbVar23[3] & pbVar19[3];
            pbVar21[2] = bVar9 & bVar8;
            pbVar19 = pbVar4;
            pbVar21 = pbVar21 + 4;
            pbVar23 = pbVar23 + 4;
          } while (pbVar4 != (byte *)(param_1 + lVar29 + 4 + (ulong)uVar12 * 4));
        }
        else {
          iVar17 = iVar10;
          if (0xb < uVar15) {
            uVar24 = 0;
            do {
              uVar32 = *(undefined8 *)(pbVar23 + 8);
              uVar31 = *(undefined8 *)pbVar23;
              uVar24 = uVar24 + 1;
              uVar34 = *(undefined8 *)(pbVar19 + 8);
              uVar33 = *(undefined8 *)pbVar19;
              *(ulong *)(pbVar21 + 8) =
                   CONCAT17((byte)((ulong)uVar32 >> 0x38) & (byte)((ulong)uVar34 >> 0x38),
                            CONCAT16((byte)((ulong)uVar32 >> 0x30) & (byte)((ulong)uVar34 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar32 >> 0x28) &
                                              (byte)((ulong)uVar34 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar32 >> 0x20) &
                                                       (byte)((ulong)uVar34 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar32 >> 0x18) &
                                                                (byte)((ulong)uVar34 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar32 >>
                                                                               0x10) &
                                                                         (byte)((ulong)uVar34 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) & (byte)((ulong)uVar34 >> 8),
                                                  (byte)uVar32 & (byte)uVar34)))))));
              *(ulong *)pbVar21 =
                   CONCAT17((byte)((ulong)uVar31 >> 0x38) & (byte)((ulong)uVar33 >> 0x38),
                            CONCAT16((byte)((ulong)uVar31 >> 0x30) & (byte)((ulong)uVar33 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar31 >> 0x28) &
                                              (byte)((ulong)uVar33 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar31 >> 0x20) &
                                                       (byte)((ulong)uVar33 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar31 >> 0x18) &
                                                                (byte)((ulong)uVar33 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar31 >>
                                                                               0x10) &
                                                                         (byte)((ulong)uVar33 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) & (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 & (byte)uVar33)))))));
              pbVar19 = pbVar19 + 0x10;
              pbVar21 = pbVar21 + 0x10;
              pbVar23 = pbVar23 + 0x10;
            } while (uVar24 < uVar1);
            iVar17 = iVar10 + uVar1 * 0x10;
            if (uVar12 + 1 == uVar1 * 4) goto LAB_00231b58;
          }
          lVar26 = (long)iVar17;
          lVar27 = lVar26 + 1;
          lVar30 = lVar26 + 2;
          lVar3 = lVar26 + 3;
          bVar8 = *(byte *)(param_3 + lVar27);
          bVar9 = *(byte *)(param_1 + lVar27);
          *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) & *(byte *)(param_1 + lVar26);
          *(byte *)(param_5 + lVar27) = bVar8 & bVar9;
          bVar8 = *(byte *)(param_3 + lVar3);
          bVar9 = *(byte *)(param_1 + lVar3);
          *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) & *(byte *)(param_1 + lVar30);
          *(byte *)(param_5 + lVar3) = bVar8 & bVar9;
          if (iVar17 + 4 < iVar14) {
            lVar26 = (long)(iVar17 + 4);
            lVar27 = lVar26 + 1;
            lVar30 = lVar26 + 2;
            lVar3 = lVar26 + 3;
            bVar8 = *(byte *)(param_3 + lVar27);
            bVar9 = *(byte *)(param_1 + lVar27);
            *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) & *(byte *)(param_1 + lVar26);
            *(byte *)(param_5 + lVar27) = bVar8 & bVar9;
            bVar8 = *(byte *)(param_3 + lVar3);
            bVar9 = *(byte *)(param_1 + lVar3);
            *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) & *(byte *)(param_1 + lVar30);
            *(byte *)(param_5 + lVar3) = bVar8 & bVar9;
            if (iVar17 + 8 < iVar14) {
              lVar26 = (long)(iVar17 + 8);
              lVar27 = lVar26 + 1;
              lVar30 = lVar26 + 2;
              lVar3 = lVar26 + 3;
              bVar8 = *(byte *)(param_3 + lVar27);
              bVar9 = *(byte *)(param_1 + lVar27);
              *(byte *)(param_5 + lVar26) =
                   *(byte *)(param_3 + lVar26) & *(byte *)(param_1 + lVar26);
              *(byte *)(param_5 + lVar27) = bVar8 & bVar9;
              bVar8 = *(byte *)(param_3 + lVar3);
              bVar9 = *(byte *)(param_1 + lVar3);
              *(byte *)(param_5 + lVar30) =
                   *(byte *)(param_3 + lVar30) & *(byte *)(param_1 + lVar30);
              *(byte *)(param_5 + lVar3) = bVar8 & bVar9;
            }
          }
        }
      }
LAB_00231b58:
      if (iVar11 < iVar7) {
        lVar30 = (long)iVar11;
        uVar24 = iVar7 - iVar11;
        lVar27 = lVar30 + 0x10;
        pbVar19 = (byte *)(param_1 + lVar30);
        pbVar21 = (byte *)(param_5 + lVar30);
        pbVar23 = (byte *)(param_3 + lVar30);
        if ((pbVar19 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_1 + lVar27) ||
             pbVar23 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_3 + lVar27)) ||
           (uVar24 < 0x14)) {
          lVar27 = 0;
          do {
            pbVar21[lVar27] = pbVar23[lVar27] & pbVar19[lVar27];
            lVar27 = lVar27 + 1;
          } while (lVar27 != (ulong)(uint)((iVar7 + -1) - iVar11) + 1);
        }
        else {
          uVar6 = -(int)pbVar19 & 0xf;
          uVar16 = uVar24;
          if (uVar6 < uVar24) {
            uVar16 = uVar6;
          }
          iVar17 = iVar11;
          if (uVar16 != 0) {
            iVar17 = iVar11 + 1;
            *pbVar21 = *pbVar23 & *pbVar19;
            if (uVar16 != 1) {
              lVar27 = (long)iVar17;
              iVar17 = iVar11 + 2;
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
              if (uVar16 != 2) {
                lVar27 = (long)iVar17;
                iVar17 = iVar11 + 3;
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                if (uVar16 != 3) {
                  lVar27 = (long)iVar17;
                  iVar17 = iVar11 + 4;
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                  if (uVar16 != 4) {
                    lVar27 = (long)iVar17;
                    iVar17 = iVar11 + 5;
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                    if (uVar16 != 5) {
                      lVar27 = (long)iVar17;
                      iVar17 = iVar11 + 6;
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                      if (uVar16 != 6) {
                        lVar27 = (long)iVar17;
                        iVar17 = iVar11 + 7;
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                        if (uVar16 != 7) {
                          lVar27 = (long)iVar17;
                          iVar17 = iVar11 + 8;
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                          if (uVar16 != 8) {
                            lVar27 = (long)iVar17;
                            iVar17 = iVar11 + 9;
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                            if (uVar16 != 9) {
                              lVar27 = (long)iVar17;
                              iVar17 = iVar11 + 10;
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                              if (uVar16 != 10) {
                                lVar27 = (long)iVar17;
                                iVar17 = iVar11 + 0xb;
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                if (uVar16 != 0xb) {
                                  lVar27 = (long)iVar17;
                                  iVar17 = iVar11 + 0xc;
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                  if (uVar16 != 0xc) {
                                    lVar27 = (long)iVar17;
                                    iVar17 = iVar11 + 0xd;
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                    if (uVar16 != 0xd) {
                                      lVar27 = (long)iVar17;
                                      iVar17 = iVar11 + 0xe;
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27)
                                      ;
                                      if (uVar16 == 0xf) {
                                        lVar27 = (long)iVar17;
                                        iVar17 = iVar11 + 0xf;
                                        *(byte *)(param_5 + lVar27) =
                                             *(byte *)(param_3 + lVar27) &
                                             *(byte *)(param_1 + lVar27);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar6 = ((uVar24 - uVar16) - 0x10 >> 4) + 1;
          iVar11 = uVar6 * 0x10;
          if (0xe < (uVar24 - 1) - uVar16) {
            lVar30 = lVar30 + (ulong)uVar16;
            uVar25 = 0;
            puVar18 = (undefined8 *)(param_5 + lVar30);
            puVar22 = (undefined8 *)(param_3 + lVar30);
            puVar20 = (undefined8 *)(param_1 + lVar30);
            do {
              uVar32 = puVar22[1];
              uVar31 = *puVar22;
              uVar25 = uVar25 + 1;
              uVar34 = puVar20[1];
              uVar33 = *puVar20;
              puVar18[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) & (byte)((ulong)uVar34 >> 0x38),
                                    CONCAT16((byte)((ulong)uVar32 >> 0x30) &
                                             (byte)((ulong)uVar34 >> 0x30),
                                             CONCAT15((byte)((ulong)uVar32 >> 0x28) &
                                                      (byte)((ulong)uVar34 >> 0x28),
                                                      CONCAT14((byte)((ulong)uVar32 >> 0x20) &
                                                               (byte)((ulong)uVar34 >> 0x20),
                                                               CONCAT13((byte)((ulong)uVar32 >> 0x18
                                                                              ) & (byte)((ulong)
                                                  uVar34 >> 0x18),
                                                  CONCAT12((byte)((ulong)uVar32 >> 0x10) &
                                                           (byte)((ulong)uVar34 >> 0x10),
                                                           CONCAT11((byte)((ulong)uVar32 >> 8) &
                                                                    (byte)((ulong)uVar34 >> 8),
                                                                    (byte)uVar32 & (byte)uVar34)))))
                                            ));
              *puVar18 = CONCAT17((byte)((ulong)uVar31 >> 0x38) & (byte)((ulong)uVar33 >> 0x38),
                                  CONCAT16((byte)((ulong)uVar31 >> 0x30) &
                                           (byte)((ulong)uVar33 >> 0x30),
                                           CONCAT15((byte)((ulong)uVar31 >> 0x28) &
                                                    (byte)((ulong)uVar33 >> 0x28),
                                                    CONCAT14((byte)((ulong)uVar31 >> 0x20) &
                                                             (byte)((ulong)uVar33 >> 0x20),
                                                             CONCAT13((byte)((ulong)uVar31 >> 0x18)
                                                                      & (byte)((ulong)uVar33 >> 0x18
                                                                              ),
                                                                      CONCAT12((byte)((ulong)uVar31
                                                                                     >> 0x10) &
                                                                               (byte)((ulong)uVar33
                                                                                     >> 0x10),
                                                                               CONCAT11((byte)((
                                                  ulong)uVar31 >> 8) & (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 & (byte)uVar33)))))));
              puVar18 = puVar18 + 2;
              puVar22 = puVar22 + 2;
              puVar20 = puVar20 + 2;
            } while (uVar25 < uVar6);
            iVar17 = iVar17 + iVar11;
            if (uVar24 - uVar16 == iVar11) goto LAB_00231fd8;
          }
          lVar27 = (long)iVar17;
          *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
          if (iVar17 + 1 < iVar7) {
            lVar27 = (long)(iVar17 + 1);
            *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
            if (iVar17 + 2 < iVar7) {
              lVar27 = (long)(iVar17 + 2);
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
              if (iVar17 + 3 < iVar7) {
                lVar27 = (long)(iVar17 + 3);
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                if (iVar17 + 4 < iVar7) {
                  lVar27 = (long)(iVar17 + 4);
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                  if (iVar17 + 5 < iVar7) {
                    lVar27 = (long)(iVar17 + 5);
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                    if (iVar17 + 6 < iVar7) {
                      lVar27 = (long)(iVar17 + 6);
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                      if (iVar17 + 7 < iVar7) {
                        lVar27 = (long)(iVar17 + 7);
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                        if (iVar17 + 8 < iVar7) {
                          lVar27 = (long)(iVar17 + 8);
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                          if (iVar17 + 9 < iVar7) {
                            lVar27 = (long)(iVar17 + 9);
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                            if (iVar17 + 10 < iVar7) {
                              lVar27 = (long)(iVar17 + 10);
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                              if (iVar17 + 0xb < iVar7) {
                                lVar27 = (long)(iVar17 + 0xb);
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                if (iVar17 + 0xc < iVar7) {
                                  lVar27 = (long)(iVar17 + 0xc);
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                  if (iVar17 + 0xd < iVar7) {
                                    lVar27 = (long)(iVar17 + 0xd);
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27);
                                    if (iVar17 + 0xe < iVar7) {
                                      lVar27 = (long)(iVar17 + 0xe);
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) & *(byte *)(param_1 + lVar27)
                                      ;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00231fd8:
      iVar28 = iVar28 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 002320b8 (2040 bytes) name=FUN_002320b8

void FUN_002320b8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  undefined8 *puVar18;
  byte *pbVar19;
  undefined8 *puVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  uint uVar24;
  uint uVar25;
  long lVar26;
  long lVar27;
  int iVar28;
  long lVar29;
  long lVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  undefined8 uVar37;
  undefined8 uVar38;
  
  iVar28 = param_7[1];
  iVar7 = *param_7;
  if (iVar28 != 0) {
    uVar13 = iVar7 - 0x20;
    iVar10 = ((uVar13 >> 5) + 1) * 0x20;
    if ((int)uVar13 < 0) {
      iVar10 = 0;
    }
    iVar14 = iVar7 + -3;
    uVar15 = (iVar7 + -4) - iVar10;
    lVar29 = (long)iVar10;
    uVar12 = uVar15 >> 2;
    uVar1 = (uVar12 - 3 >> 2) + 1;
    iVar5 = iVar10 + 4 + uVar12 * 4;
    lVar2 = lVar29 + 0x40;
    do {
      if (-1 < (int)uVar13) {
        puVar18 = (undefined8 *)(param_1 + 0x10);
        puVar22 = (undefined8 *)(param_3 + 0x10);
        puVar20 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar36 = puVar18[1];
          uVar35 = *puVar18;
          uVar38 = puVar18[-1];
          uVar37 = puVar18[-2];
          puVar18 = puVar18 + 4;
          uVar34 = puVar22[-1];
          uVar33 = puVar22[-2];
          uVar32 = puVar22[1];
          uVar31 = *puVar22;
          puVar22 = puVar22 + 4;
          puVar20[-1] = CONCAT17((byte)((ulong)uVar34 >> 0x38) | (byte)((ulong)uVar38 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar34 >> 0x30) |
                                          (byte)((ulong)uVar38 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar34 >> 0x28) |
                                                   (byte)((ulong)uVar38 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar34 >> 0x20) |
                                                            (byte)((ulong)uVar38 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar34 >> 0x18) |
                                                                     (byte)((ulong)uVar38 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar34
                                                                                    >> 0x10) |
                                                                              (byte)((ulong)uVar38
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar34 >> 8) | (byte)((ulong)uVar38 >> 8),
                                                  (byte)uVar34 | (byte)uVar38)))))));
          puVar20[-2] = CONCAT17((byte)((ulong)uVar33 >> 0x38) | (byte)((ulong)uVar37 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar33 >> 0x30) |
                                          (byte)((ulong)uVar37 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar33 >> 0x28) |
                                                   (byte)((ulong)uVar37 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar33 >> 0x20) |
                                                            (byte)((ulong)uVar37 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar33 >> 0x18) |
                                                                     (byte)((ulong)uVar37 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar33
                                                                                    >> 0x10) |
                                                                              (byte)((ulong)uVar37
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar33 >> 8) | (byte)((ulong)uVar37 >> 8),
                                                  (byte)uVar33 | (byte)uVar37)))))));
          puVar20[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) | (byte)((ulong)uVar36 >> 0x38),
                                CONCAT16((byte)((ulong)uVar32 >> 0x30) |
                                         (byte)((ulong)uVar36 >> 0x30),
                                         CONCAT15((byte)((ulong)uVar32 >> 0x28) |
                                                  (byte)((ulong)uVar36 >> 0x28),
                                                  CONCAT14((byte)((ulong)uVar32 >> 0x20) |
                                                           (byte)((ulong)uVar36 >> 0x20),
                                                           CONCAT13((byte)((ulong)uVar32 >> 0x18) |
                                                                    (byte)((ulong)uVar36 >> 0x18),
                                                                    CONCAT12((byte)((ulong)uVar32 >>
                                                                                   0x10) |
                                                                             (byte)((ulong)uVar36 >>
                                                                                   0x10),
                                                                             CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) | (byte)((ulong)uVar36 >> 8),
                                                  (byte)uVar32 | (byte)uVar36)))))));
          *puVar20 = CONCAT17((byte)((ulong)uVar31 >> 0x38) | (byte)((ulong)uVar35 >> 0x38),
                              CONCAT16((byte)((ulong)uVar31 >> 0x30) | (byte)((ulong)uVar35 >> 0x30)
                                       ,CONCAT15((byte)((ulong)uVar31 >> 0x28) |
                                                 (byte)((ulong)uVar35 >> 0x28),
                                                 CONCAT14((byte)((ulong)uVar31 >> 0x20) |
                                                          (byte)((ulong)uVar35 >> 0x20),
                                                          CONCAT13((byte)((ulong)uVar31 >> 0x18) |
                                                                   (byte)((ulong)uVar35 >> 0x18),
                                                                   CONCAT12((byte)((ulong)uVar31 >>
                                                                                  0x10) |
                                                                            (byte)((ulong)uVar35 >>
                                                                                  0x10),
                                                                            CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) | (byte)((ulong)uVar35 >> 8),
                                                  (byte)uVar31 | (byte)uVar35)))))));
          puVar20 = puVar20 + 4;
        } while (puVar18 != (undefined8 *)(param_1 + (ulong)(uVar13 >> 5) * 0x20 + 0x30));
      }
      iVar11 = iVar10;
      if (iVar10 < iVar14) {
        pbVar19 = (byte *)(param_1 + lVar29);
        pbVar21 = (byte *)(param_5 + lVar29);
        pbVar23 = (byte *)(param_3 + lVar29);
        iVar11 = iVar5;
        if ((pbVar19 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_1 + lVar2) ||
             pbVar23 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_3 + lVar2)) ||
           (uVar12 + 1 < 5)) {
          do {
            pbVar4 = pbVar19 + 4;
            bVar8 = *pbVar23;
            bVar9 = *pbVar19;
            pbVar21[1] = pbVar23[1] | pbVar19[1];
            *pbVar21 = bVar8 | bVar9;
            bVar8 = pbVar19[2];
            bVar9 = pbVar23[2];
            pbVar21[3] = pbVar23[3] | pbVar19[3];
            pbVar21[2] = bVar9 | bVar8;
            pbVar19 = pbVar4;
            pbVar21 = pbVar21 + 4;
            pbVar23 = pbVar23 + 4;
          } while (pbVar4 != (byte *)(param_1 + lVar29 + 4 + (ulong)uVar12 * 4));
        }
        else {
          iVar17 = iVar10;
          if (0xb < uVar15) {
            uVar24 = 0;
            do {
              uVar32 = *(undefined8 *)(pbVar23 + 8);
              uVar31 = *(undefined8 *)pbVar23;
              uVar24 = uVar24 + 1;
              uVar34 = *(undefined8 *)(pbVar19 + 8);
              uVar33 = *(undefined8 *)pbVar19;
              *(ulong *)(pbVar21 + 8) =
                   CONCAT17((byte)((ulong)uVar32 >> 0x38) | (byte)((ulong)uVar34 >> 0x38),
                            CONCAT16((byte)((ulong)uVar32 >> 0x30) | (byte)((ulong)uVar34 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar32 >> 0x28) |
                                              (byte)((ulong)uVar34 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar32 >> 0x20) |
                                                       (byte)((ulong)uVar34 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar32 >> 0x18) |
                                                                (byte)((ulong)uVar34 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar32 >>
                                                                               0x10) |
                                                                         (byte)((ulong)uVar34 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) | (byte)((ulong)uVar34 >> 8),
                                                  (byte)uVar32 | (byte)uVar34)))))));
              *(ulong *)pbVar21 =
                   CONCAT17((byte)((ulong)uVar31 >> 0x38) | (byte)((ulong)uVar33 >> 0x38),
                            CONCAT16((byte)((ulong)uVar31 >> 0x30) | (byte)((ulong)uVar33 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar31 >> 0x28) |
                                              (byte)((ulong)uVar33 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar31 >> 0x20) |
                                                       (byte)((ulong)uVar33 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar31 >> 0x18) |
                                                                (byte)((ulong)uVar33 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar31 >>
                                                                               0x10) |
                                                                         (byte)((ulong)uVar33 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) | (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 | (byte)uVar33)))))));
              pbVar19 = pbVar19 + 0x10;
              pbVar21 = pbVar21 + 0x10;
              pbVar23 = pbVar23 + 0x10;
            } while (uVar24 < uVar1);
            iVar17 = iVar10 + uVar1 * 0x10;
            if (uVar12 + 1 == uVar1 * 4) goto LAB_00232350;
          }
          lVar26 = (long)iVar17;
          lVar27 = lVar26 + 1;
          lVar30 = lVar26 + 2;
          lVar3 = lVar26 + 3;
          bVar8 = *(byte *)(param_3 + lVar27);
          bVar9 = *(byte *)(param_1 + lVar27);
          *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) | *(byte *)(param_1 + lVar26);
          *(byte *)(param_5 + lVar27) = bVar8 | bVar9;
          bVar8 = *(byte *)(param_3 + lVar3);
          bVar9 = *(byte *)(param_1 + lVar3);
          *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) | *(byte *)(param_1 + lVar30);
          *(byte *)(param_5 + lVar3) = bVar8 | bVar9;
          if (iVar17 + 4 < iVar14) {
            lVar26 = (long)(iVar17 + 4);
            lVar27 = lVar26 + 1;
            lVar30 = lVar26 + 2;
            lVar3 = lVar26 + 3;
            bVar8 = *(byte *)(param_3 + lVar27);
            bVar9 = *(byte *)(param_1 + lVar27);
            *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) | *(byte *)(param_1 + lVar26);
            *(byte *)(param_5 + lVar27) = bVar8 | bVar9;
            bVar8 = *(byte *)(param_3 + lVar3);
            bVar9 = *(byte *)(param_1 + lVar3);
            *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) | *(byte *)(param_1 + lVar30);
            *(byte *)(param_5 + lVar3) = bVar8 | bVar9;
            if (iVar17 + 8 < iVar14) {
              lVar26 = (long)(iVar17 + 8);
              lVar27 = lVar26 + 1;
              lVar30 = lVar26 + 2;
              lVar3 = lVar26 + 3;
              bVar8 = *(byte *)(param_3 + lVar27);
              bVar9 = *(byte *)(param_1 + lVar27);
              *(byte *)(param_5 + lVar26) =
                   *(byte *)(param_3 + lVar26) | *(byte *)(param_1 + lVar26);
              *(byte *)(param_5 + lVar27) = bVar8 | bVar9;
              bVar8 = *(byte *)(param_3 + lVar3);
              bVar9 = *(byte *)(param_1 + lVar3);
              *(byte *)(param_5 + lVar30) =
                   *(byte *)(param_3 + lVar30) | *(byte *)(param_1 + lVar30);
              *(byte *)(param_5 + lVar3) = bVar8 | bVar9;
            }
          }
        }
      }
LAB_00232350:
      if (iVar11 < iVar7) {
        lVar30 = (long)iVar11;
        uVar24 = iVar7 - iVar11;
        lVar27 = lVar30 + 0x10;
        pbVar19 = (byte *)(param_1 + lVar30);
        pbVar21 = (byte *)(param_5 + lVar30);
        pbVar23 = (byte *)(param_3 + lVar30);
        if ((pbVar19 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_1 + lVar27) ||
             pbVar23 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_3 + lVar27)) ||
           (uVar24 < 0x14)) {
          lVar27 = 0;
          do {
            pbVar21[lVar27] = pbVar23[lVar27] | pbVar19[lVar27];
            lVar27 = lVar27 + 1;
          } while (lVar27 != (ulong)(uint)((iVar7 + -1) - iVar11) + 1);
        }
        else {
          uVar6 = -(int)pbVar19 & 0xf;
          uVar16 = uVar24;
          if (uVar6 < uVar24) {
            uVar16 = uVar6;
          }
          iVar17 = iVar11;
          if (uVar16 != 0) {
            iVar17 = iVar11 + 1;
            *pbVar21 = *pbVar23 | *pbVar19;
            if (uVar16 != 1) {
              lVar27 = (long)iVar17;
              iVar17 = iVar11 + 2;
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
              if (uVar16 != 2) {
                lVar27 = (long)iVar17;
                iVar17 = iVar11 + 3;
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                if (uVar16 != 3) {
                  lVar27 = (long)iVar17;
                  iVar17 = iVar11 + 4;
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                  if (uVar16 != 4) {
                    lVar27 = (long)iVar17;
                    iVar17 = iVar11 + 5;
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                    if (uVar16 != 5) {
                      lVar27 = (long)iVar17;
                      iVar17 = iVar11 + 6;
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                      if (uVar16 != 6) {
                        lVar27 = (long)iVar17;
                        iVar17 = iVar11 + 7;
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                        if (uVar16 != 7) {
                          lVar27 = (long)iVar17;
                          iVar17 = iVar11 + 8;
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                          if (uVar16 != 8) {
                            lVar27 = (long)iVar17;
                            iVar17 = iVar11 + 9;
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                            if (uVar16 != 9) {
                              lVar27 = (long)iVar17;
                              iVar17 = iVar11 + 10;
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                              if (uVar16 != 10) {
                                lVar27 = (long)iVar17;
                                iVar17 = iVar11 + 0xb;
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                if (uVar16 != 0xb) {
                                  lVar27 = (long)iVar17;
                                  iVar17 = iVar11 + 0xc;
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                  if (uVar16 != 0xc) {
                                    lVar27 = (long)iVar17;
                                    iVar17 = iVar11 + 0xd;
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                    if (uVar16 != 0xd) {
                                      lVar27 = (long)iVar17;
                                      iVar17 = iVar11 + 0xe;
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27)
                                      ;
                                      if (uVar16 == 0xf) {
                                        lVar27 = (long)iVar17;
                                        iVar17 = iVar11 + 0xf;
                                        *(byte *)(param_5 + lVar27) =
                                             *(byte *)(param_3 + lVar27) |
                                             *(byte *)(param_1 + lVar27);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar6 = ((uVar24 - uVar16) - 0x10 >> 4) + 1;
          iVar11 = uVar6 * 0x10;
          if (0xe < (uVar24 - 1) - uVar16) {
            lVar30 = lVar30 + (ulong)uVar16;
            uVar25 = 0;
            puVar18 = (undefined8 *)(param_5 + lVar30);
            puVar22 = (undefined8 *)(param_3 + lVar30);
            puVar20 = (undefined8 *)(param_1 + lVar30);
            do {
              uVar32 = puVar22[1];
              uVar31 = *puVar22;
              uVar25 = uVar25 + 1;
              uVar34 = puVar20[1];
              uVar33 = *puVar20;
              puVar18[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) | (byte)((ulong)uVar34 >> 0x38),
                                    CONCAT16((byte)((ulong)uVar32 >> 0x30) |
                                             (byte)((ulong)uVar34 >> 0x30),
                                             CONCAT15((byte)((ulong)uVar32 >> 0x28) |
                                                      (byte)((ulong)uVar34 >> 0x28),
                                                      CONCAT14((byte)((ulong)uVar32 >> 0x20) |
                                                               (byte)((ulong)uVar34 >> 0x20),
                                                               CONCAT13((byte)((ulong)uVar32 >> 0x18
                                                                              ) | (byte)((ulong)
                                                  uVar34 >> 0x18),
                                                  CONCAT12((byte)((ulong)uVar32 >> 0x10) |
                                                           (byte)((ulong)uVar34 >> 0x10),
                                                           CONCAT11((byte)((ulong)uVar32 >> 8) |
                                                                    (byte)((ulong)uVar34 >> 8),
                                                                    (byte)uVar32 | (byte)uVar34)))))
                                            ));
              *puVar18 = CONCAT17((byte)((ulong)uVar31 >> 0x38) | (byte)((ulong)uVar33 >> 0x38),
                                  CONCAT16((byte)((ulong)uVar31 >> 0x30) |
                                           (byte)((ulong)uVar33 >> 0x30),
                                           CONCAT15((byte)((ulong)uVar31 >> 0x28) |
                                                    (byte)((ulong)uVar33 >> 0x28),
                                                    CONCAT14((byte)((ulong)uVar31 >> 0x20) |
                                                             (byte)((ulong)uVar33 >> 0x20),
                                                             CONCAT13((byte)((ulong)uVar31 >> 0x18)
                                                                      | (byte)((ulong)uVar33 >> 0x18
                                                                              ),
                                                                      CONCAT12((byte)((ulong)uVar31
                                                                                     >> 0x10) |
                                                                               (byte)((ulong)uVar33
                                                                                     >> 0x10),
                                                                               CONCAT11((byte)((
                                                  ulong)uVar31 >> 8) | (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 | (byte)uVar33)))))));
              puVar18 = puVar18 + 2;
              puVar22 = puVar22 + 2;
              puVar20 = puVar20 + 2;
            } while (uVar25 < uVar6);
            iVar17 = iVar17 + iVar11;
            if (uVar24 - uVar16 == iVar11) goto LAB_002327d0;
          }
          lVar27 = (long)iVar17;
          *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
          if (iVar17 + 1 < iVar7) {
            lVar27 = (long)(iVar17 + 1);
            *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
            if (iVar17 + 2 < iVar7) {
              lVar27 = (long)(iVar17 + 2);
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
              if (iVar17 + 3 < iVar7) {
                lVar27 = (long)(iVar17 + 3);
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                if (iVar17 + 4 < iVar7) {
                  lVar27 = (long)(iVar17 + 4);
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                  if (iVar17 + 5 < iVar7) {
                    lVar27 = (long)(iVar17 + 5);
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                    if (iVar17 + 6 < iVar7) {
                      lVar27 = (long)(iVar17 + 6);
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                      if (iVar17 + 7 < iVar7) {
                        lVar27 = (long)(iVar17 + 7);
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                        if (iVar17 + 8 < iVar7) {
                          lVar27 = (long)(iVar17 + 8);
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                          if (iVar17 + 9 < iVar7) {
                            lVar27 = (long)(iVar17 + 9);
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                            if (iVar17 + 10 < iVar7) {
                              lVar27 = (long)(iVar17 + 10);
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                              if (iVar17 + 0xb < iVar7) {
                                lVar27 = (long)(iVar17 + 0xb);
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                if (iVar17 + 0xc < iVar7) {
                                  lVar27 = (long)(iVar17 + 0xc);
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                  if (iVar17 + 0xd < iVar7) {
                                    lVar27 = (long)(iVar17 + 0xd);
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27);
                                    if (iVar17 + 0xe < iVar7) {
                                      lVar27 = (long)(iVar17 + 0xe);
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) | *(byte *)(param_1 + lVar27)
                                      ;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002327d0:
      iVar28 = iVar28 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 002328b0 (2040 bytes) name=FUN_002328b0

void FUN_002328b0(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  undefined8 *puVar18;
  byte *pbVar19;
  undefined8 *puVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  uint uVar24;
  uint uVar25;
  long lVar26;
  long lVar27;
  int iVar28;
  long lVar29;
  long lVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  undefined8 uVar37;
  undefined8 uVar38;
  
  iVar28 = param_7[1];
  iVar7 = *param_7;
  if (iVar28 != 0) {
    uVar13 = iVar7 - 0x20;
    iVar10 = ((uVar13 >> 5) + 1) * 0x20;
    if ((int)uVar13 < 0) {
      iVar10 = 0;
    }
    iVar14 = iVar7 + -3;
    uVar15 = (iVar7 + -4) - iVar10;
    lVar29 = (long)iVar10;
    uVar12 = uVar15 >> 2;
    uVar1 = (uVar12 - 3 >> 2) + 1;
    iVar5 = iVar10 + 4 + uVar12 * 4;
    lVar2 = lVar29 + 0x40;
    do {
      if (-1 < (int)uVar13) {
        puVar18 = (undefined8 *)(param_1 + 0x10);
        puVar22 = (undefined8 *)(param_3 + 0x10);
        puVar20 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar36 = puVar18[1];
          uVar35 = *puVar18;
          uVar38 = puVar18[-1];
          uVar37 = puVar18[-2];
          puVar18 = puVar18 + 4;
          uVar34 = puVar22[-1];
          uVar33 = puVar22[-2];
          uVar32 = puVar22[1];
          uVar31 = *puVar22;
          puVar22 = puVar22 + 4;
          puVar20[-1] = CONCAT17((byte)((ulong)uVar34 >> 0x38) ^ (byte)((ulong)uVar38 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar34 >> 0x30) ^
                                          (byte)((ulong)uVar38 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar34 >> 0x28) ^
                                                   (byte)((ulong)uVar38 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar34 >> 0x20) ^
                                                            (byte)((ulong)uVar38 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar34 >> 0x18) ^
                                                                     (byte)((ulong)uVar38 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar34
                                                                                    >> 0x10) ^
                                                                              (byte)((ulong)uVar38
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar34 >> 8) ^ (byte)((ulong)uVar38 >> 8),
                                                  (byte)uVar34 ^ (byte)uVar38)))))));
          puVar20[-2] = CONCAT17((byte)((ulong)uVar33 >> 0x38) ^ (byte)((ulong)uVar37 >> 0x38),
                                 CONCAT16((byte)((ulong)uVar33 >> 0x30) ^
                                          (byte)((ulong)uVar37 >> 0x30),
                                          CONCAT15((byte)((ulong)uVar33 >> 0x28) ^
                                                   (byte)((ulong)uVar37 >> 0x28),
                                                   CONCAT14((byte)((ulong)uVar33 >> 0x20) ^
                                                            (byte)((ulong)uVar37 >> 0x20),
                                                            CONCAT13((byte)((ulong)uVar33 >> 0x18) ^
                                                                     (byte)((ulong)uVar37 >> 0x18),
                                                                     CONCAT12((byte)((ulong)uVar33
                                                                                    >> 0x10) ^
                                                                              (byte)((ulong)uVar37
                                                                                    >> 0x10),
                                                                              CONCAT11((byte)((ulong
                                                  )uVar33 >> 8) ^ (byte)((ulong)uVar37 >> 8),
                                                  (byte)uVar33 ^ (byte)uVar37)))))));
          puVar20[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) ^ (byte)((ulong)uVar36 >> 0x38),
                                CONCAT16((byte)((ulong)uVar32 >> 0x30) ^
                                         (byte)((ulong)uVar36 >> 0x30),
                                         CONCAT15((byte)((ulong)uVar32 >> 0x28) ^
                                                  (byte)((ulong)uVar36 >> 0x28),
                                                  CONCAT14((byte)((ulong)uVar32 >> 0x20) ^
                                                           (byte)((ulong)uVar36 >> 0x20),
                                                           CONCAT13((byte)((ulong)uVar32 >> 0x18) ^
                                                                    (byte)((ulong)uVar36 >> 0x18),
                                                                    CONCAT12((byte)((ulong)uVar32 >>
                                                                                   0x10) ^
                                                                             (byte)((ulong)uVar36 >>
                                                                                   0x10),
                                                                             CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) ^ (byte)((ulong)uVar36 >> 8),
                                                  (byte)uVar32 ^ (byte)uVar36)))))));
          *puVar20 = CONCAT17((byte)((ulong)uVar31 >> 0x38) ^ (byte)((ulong)uVar35 >> 0x38),
                              CONCAT16((byte)((ulong)uVar31 >> 0x30) ^ (byte)((ulong)uVar35 >> 0x30)
                                       ,CONCAT15((byte)((ulong)uVar31 >> 0x28) ^
                                                 (byte)((ulong)uVar35 >> 0x28),
                                                 CONCAT14((byte)((ulong)uVar31 >> 0x20) ^
                                                          (byte)((ulong)uVar35 >> 0x20),
                                                          CONCAT13((byte)((ulong)uVar31 >> 0x18) ^
                                                                   (byte)((ulong)uVar35 >> 0x18),
                                                                   CONCAT12((byte)((ulong)uVar31 >>
                                                                                  0x10) ^
                                                                            (byte)((ulong)uVar35 >>
                                                                                  0x10),
                                                                            CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) ^ (byte)((ulong)uVar35 >> 8),
                                                  (byte)uVar31 ^ (byte)uVar35)))))));
          puVar20 = puVar20 + 4;
        } while (puVar18 != (undefined8 *)(param_1 + (ulong)(uVar13 >> 5) * 0x20 + 0x30));
      }
      iVar11 = iVar10;
      if (iVar10 < iVar14) {
        pbVar19 = (byte *)(param_1 + lVar29);
        pbVar21 = (byte *)(param_5 + lVar29);
        pbVar23 = (byte *)(param_3 + lVar29);
        iVar11 = iVar5;
        if ((pbVar19 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_1 + lVar2) ||
             pbVar23 < (byte *)(param_5 + lVar2) && pbVar21 < (byte *)(param_3 + lVar2)) ||
           (uVar12 + 1 < 5)) {
          do {
            pbVar4 = pbVar19 + 4;
            bVar8 = *pbVar23;
            bVar9 = *pbVar19;
            pbVar21[1] = pbVar23[1] ^ pbVar19[1];
            *pbVar21 = bVar8 ^ bVar9;
            bVar8 = pbVar19[2];
            bVar9 = pbVar23[2];
            pbVar21[3] = pbVar23[3] ^ pbVar19[3];
            pbVar21[2] = bVar9 ^ bVar8;
            pbVar19 = pbVar4;
            pbVar21 = pbVar21 + 4;
            pbVar23 = pbVar23 + 4;
          } while (pbVar4 != (byte *)(param_1 + lVar29 + 4 + (ulong)uVar12 * 4));
        }
        else {
          iVar17 = iVar10;
          if (0xb < uVar15) {
            uVar24 = 0;
            do {
              uVar32 = *(undefined8 *)(pbVar23 + 8);
              uVar31 = *(undefined8 *)pbVar23;
              uVar24 = uVar24 + 1;
              uVar34 = *(undefined8 *)(pbVar19 + 8);
              uVar33 = *(undefined8 *)pbVar19;
              *(ulong *)(pbVar21 + 8) =
                   CONCAT17((byte)((ulong)uVar32 >> 0x38) ^ (byte)((ulong)uVar34 >> 0x38),
                            CONCAT16((byte)((ulong)uVar32 >> 0x30) ^ (byte)((ulong)uVar34 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar32 >> 0x28) ^
                                              (byte)((ulong)uVar34 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar32 >> 0x20) ^
                                                       (byte)((ulong)uVar34 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar32 >> 0x18) ^
                                                                (byte)((ulong)uVar34 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar32 >>
                                                                               0x10) ^
                                                                         (byte)((ulong)uVar34 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar32 >> 8) ^ (byte)((ulong)uVar34 >> 8),
                                                  (byte)uVar32 ^ (byte)uVar34)))))));
              *(ulong *)pbVar21 =
                   CONCAT17((byte)((ulong)uVar31 >> 0x38) ^ (byte)((ulong)uVar33 >> 0x38),
                            CONCAT16((byte)((ulong)uVar31 >> 0x30) ^ (byte)((ulong)uVar33 >> 0x30),
                                     CONCAT15((byte)((ulong)uVar31 >> 0x28) ^
                                              (byte)((ulong)uVar33 >> 0x28),
                                              CONCAT14((byte)((ulong)uVar31 >> 0x20) ^
                                                       (byte)((ulong)uVar33 >> 0x20),
                                                       CONCAT13((byte)((ulong)uVar31 >> 0x18) ^
                                                                (byte)((ulong)uVar33 >> 0x18),
                                                                CONCAT12((byte)((ulong)uVar31 >>
                                                                               0x10) ^
                                                                         (byte)((ulong)uVar33 >>
                                                                               0x10),
                                                                         CONCAT11((byte)((ulong)
                                                  uVar31 >> 8) ^ (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 ^ (byte)uVar33)))))));
              pbVar19 = pbVar19 + 0x10;
              pbVar21 = pbVar21 + 0x10;
              pbVar23 = pbVar23 + 0x10;
            } while (uVar24 < uVar1);
            iVar17 = iVar10 + uVar1 * 0x10;
            if (uVar12 + 1 == uVar1 * 4) goto LAB_00232b48;
          }
          lVar26 = (long)iVar17;
          lVar27 = lVar26 + 1;
          lVar30 = lVar26 + 2;
          lVar3 = lVar26 + 3;
          bVar8 = *(byte *)(param_3 + lVar27);
          bVar9 = *(byte *)(param_1 + lVar27);
          *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) ^ *(byte *)(param_1 + lVar26);
          *(byte *)(param_5 + lVar27) = bVar8 ^ bVar9;
          bVar8 = *(byte *)(param_3 + lVar3);
          bVar9 = *(byte *)(param_1 + lVar3);
          *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) ^ *(byte *)(param_1 + lVar30);
          *(byte *)(param_5 + lVar3) = bVar8 ^ bVar9;
          if (iVar17 + 4 < iVar14) {
            lVar26 = (long)(iVar17 + 4);
            lVar27 = lVar26 + 1;
            lVar30 = lVar26 + 2;
            lVar3 = lVar26 + 3;
            bVar8 = *(byte *)(param_3 + lVar27);
            bVar9 = *(byte *)(param_1 + lVar27);
            *(byte *)(param_5 + lVar26) = *(byte *)(param_3 + lVar26) ^ *(byte *)(param_1 + lVar26);
            *(byte *)(param_5 + lVar27) = bVar8 ^ bVar9;
            bVar8 = *(byte *)(param_3 + lVar3);
            bVar9 = *(byte *)(param_1 + lVar3);
            *(byte *)(param_5 + lVar30) = *(byte *)(param_3 + lVar30) ^ *(byte *)(param_1 + lVar30);
            *(byte *)(param_5 + lVar3) = bVar8 ^ bVar9;
            if (iVar17 + 8 < iVar14) {
              lVar26 = (long)(iVar17 + 8);
              lVar27 = lVar26 + 1;
              lVar30 = lVar26 + 2;
              lVar3 = lVar26 + 3;
              bVar8 = *(byte *)(param_3 + lVar27);
              bVar9 = *(byte *)(param_1 + lVar27);
              *(byte *)(param_5 + lVar26) =
                   *(byte *)(param_3 + lVar26) ^ *(byte *)(param_1 + lVar26);
              *(byte *)(param_5 + lVar27) = bVar8 ^ bVar9;
              bVar8 = *(byte *)(param_3 + lVar3);
              bVar9 = *(byte *)(param_1 + lVar3);
              *(byte *)(param_5 + lVar30) =
                   *(byte *)(param_3 + lVar30) ^ *(byte *)(param_1 + lVar30);
              *(byte *)(param_5 + lVar3) = bVar8 ^ bVar9;
            }
          }
        }
      }
LAB_00232b48:
      if (iVar11 < iVar7) {
        lVar30 = (long)iVar11;
        uVar24 = iVar7 - iVar11;
        lVar27 = lVar30 + 0x10;
        pbVar19 = (byte *)(param_1 + lVar30);
        pbVar21 = (byte *)(param_5 + lVar30);
        pbVar23 = (byte *)(param_3 + lVar30);
        if ((pbVar19 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_1 + lVar27) ||
             pbVar23 < (byte *)(param_5 + lVar27) && pbVar21 < (byte *)(param_3 + lVar27)) ||
           (uVar24 < 0x14)) {
          lVar27 = 0;
          do {
            pbVar21[lVar27] = pbVar23[lVar27] ^ pbVar19[lVar27];
            lVar27 = lVar27 + 1;
          } while (lVar27 != (ulong)(uint)((iVar7 + -1) - iVar11) + 1);
        }
        else {
          uVar6 = -(int)pbVar19 & 0xf;
          uVar16 = uVar24;
          if (uVar6 < uVar24) {
            uVar16 = uVar6;
          }
          iVar17 = iVar11;
          if (uVar16 != 0) {
            iVar17 = iVar11 + 1;
            *pbVar21 = *pbVar23 ^ *pbVar19;
            if (uVar16 != 1) {
              lVar27 = (long)iVar17;
              iVar17 = iVar11 + 2;
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
              if (uVar16 != 2) {
                lVar27 = (long)iVar17;
                iVar17 = iVar11 + 3;
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                if (uVar16 != 3) {
                  lVar27 = (long)iVar17;
                  iVar17 = iVar11 + 4;
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                  if (uVar16 != 4) {
                    lVar27 = (long)iVar17;
                    iVar17 = iVar11 + 5;
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                    if (uVar16 != 5) {
                      lVar27 = (long)iVar17;
                      iVar17 = iVar11 + 6;
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                      if (uVar16 != 6) {
                        lVar27 = (long)iVar17;
                        iVar17 = iVar11 + 7;
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                        if (uVar16 != 7) {
                          lVar27 = (long)iVar17;
                          iVar17 = iVar11 + 8;
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                          if (uVar16 != 8) {
                            lVar27 = (long)iVar17;
                            iVar17 = iVar11 + 9;
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                            if (uVar16 != 9) {
                              lVar27 = (long)iVar17;
                              iVar17 = iVar11 + 10;
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                              if (uVar16 != 10) {
                                lVar27 = (long)iVar17;
                                iVar17 = iVar11 + 0xb;
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                if (uVar16 != 0xb) {
                                  lVar27 = (long)iVar17;
                                  iVar17 = iVar11 + 0xc;
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                  if (uVar16 != 0xc) {
                                    lVar27 = (long)iVar17;
                                    iVar17 = iVar11 + 0xd;
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                    if (uVar16 != 0xd) {
                                      lVar27 = (long)iVar17;
                                      iVar17 = iVar11 + 0xe;
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27)
                                      ;
                                      if (uVar16 == 0xf) {
                                        lVar27 = (long)iVar17;
                                        iVar17 = iVar11 + 0xf;
                                        *(byte *)(param_5 + lVar27) =
                                             *(byte *)(param_3 + lVar27) ^
                                             *(byte *)(param_1 + lVar27);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar6 = ((uVar24 - uVar16) - 0x10 >> 4) + 1;
          iVar11 = uVar6 * 0x10;
          if (0xe < (uVar24 - 1) - uVar16) {
            lVar30 = lVar30 + (ulong)uVar16;
            uVar25 = 0;
            puVar18 = (undefined8 *)(param_5 + lVar30);
            puVar22 = (undefined8 *)(param_3 + lVar30);
            puVar20 = (undefined8 *)(param_1 + lVar30);
            do {
              uVar32 = puVar22[1];
              uVar31 = *puVar22;
              uVar25 = uVar25 + 1;
              uVar34 = puVar20[1];
              uVar33 = *puVar20;
              puVar18[1] = CONCAT17((byte)((ulong)uVar32 >> 0x38) ^ (byte)((ulong)uVar34 >> 0x38),
                                    CONCAT16((byte)((ulong)uVar32 >> 0x30) ^
                                             (byte)((ulong)uVar34 >> 0x30),
                                             CONCAT15((byte)((ulong)uVar32 >> 0x28) ^
                                                      (byte)((ulong)uVar34 >> 0x28),
                                                      CONCAT14((byte)((ulong)uVar32 >> 0x20) ^
                                                               (byte)((ulong)uVar34 >> 0x20),
                                                               CONCAT13((byte)((ulong)uVar32 >> 0x18
                                                                              ) ^ (byte)((ulong)
                                                  uVar34 >> 0x18),
                                                  CONCAT12((byte)((ulong)uVar32 >> 0x10) ^
                                                           (byte)((ulong)uVar34 >> 0x10),
                                                           CONCAT11((byte)((ulong)uVar32 >> 8) ^
                                                                    (byte)((ulong)uVar34 >> 8),
                                                                    (byte)uVar32 ^ (byte)uVar34)))))
                                            ));
              *puVar18 = CONCAT17((byte)((ulong)uVar31 >> 0x38) ^ (byte)((ulong)uVar33 >> 0x38),
                                  CONCAT16((byte)((ulong)uVar31 >> 0x30) ^
                                           (byte)((ulong)uVar33 >> 0x30),
                                           CONCAT15((byte)((ulong)uVar31 >> 0x28) ^
                                                    (byte)((ulong)uVar33 >> 0x28),
                                                    CONCAT14((byte)((ulong)uVar31 >> 0x20) ^
                                                             (byte)((ulong)uVar33 >> 0x20),
                                                             CONCAT13((byte)((ulong)uVar31 >> 0x18)
                                                                      ^ (byte)((ulong)uVar33 >> 0x18
                                                                              ),
                                                                      CONCAT12((byte)((ulong)uVar31
                                                                                     >> 0x10) ^
                                                                               (byte)((ulong)uVar33
                                                                                     >> 0x10),
                                                                               CONCAT11((byte)((
                                                  ulong)uVar31 >> 8) ^ (byte)((ulong)uVar33 >> 8),
                                                  (byte)uVar31 ^ (byte)uVar33)))))));
              puVar18 = puVar18 + 2;
              puVar22 = puVar22 + 2;
              puVar20 = puVar20 + 2;
            } while (uVar25 < uVar6);
            iVar17 = iVar17 + iVar11;
            if (uVar24 - uVar16 == iVar11) goto LAB_00232fc8;
          }
          lVar27 = (long)iVar17;
          *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
          if (iVar17 + 1 < iVar7) {
            lVar27 = (long)(iVar17 + 1);
            *(byte *)(param_5 + lVar27) = *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
            if (iVar17 + 2 < iVar7) {
              lVar27 = (long)(iVar17 + 2);
              *(byte *)(param_5 + lVar27) =
                   *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
              if (iVar17 + 3 < iVar7) {
                lVar27 = (long)(iVar17 + 3);
                *(byte *)(param_5 + lVar27) =
                     *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                if (iVar17 + 4 < iVar7) {
                  lVar27 = (long)(iVar17 + 4);
                  *(byte *)(param_5 + lVar27) =
                       *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                  if (iVar17 + 5 < iVar7) {
                    lVar27 = (long)(iVar17 + 5);
                    *(byte *)(param_5 + lVar27) =
                         *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                    if (iVar17 + 6 < iVar7) {
                      lVar27 = (long)(iVar17 + 6);
                      *(byte *)(param_5 + lVar27) =
                           *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                      if (iVar17 + 7 < iVar7) {
                        lVar27 = (long)(iVar17 + 7);
                        *(byte *)(param_5 + lVar27) =
                             *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                        if (iVar17 + 8 < iVar7) {
                          lVar27 = (long)(iVar17 + 8);
                          *(byte *)(param_5 + lVar27) =
                               *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                          if (iVar17 + 9 < iVar7) {
                            lVar27 = (long)(iVar17 + 9);
                            *(byte *)(param_5 + lVar27) =
                                 *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                            if (iVar17 + 10 < iVar7) {
                              lVar27 = (long)(iVar17 + 10);
                              *(byte *)(param_5 + lVar27) =
                                   *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                              if (iVar17 + 0xb < iVar7) {
                                lVar27 = (long)(iVar17 + 0xb);
                                *(byte *)(param_5 + lVar27) =
                                     *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                if (iVar17 + 0xc < iVar7) {
                                  lVar27 = (long)(iVar17 + 0xc);
                                  *(byte *)(param_5 + lVar27) =
                                       *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                  if (iVar17 + 0xd < iVar7) {
                                    lVar27 = (long)(iVar17 + 0xd);
                                    *(byte *)(param_5 + lVar27) =
                                         *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27);
                                    if (iVar17 + 0xe < iVar7) {
                                      lVar27 = (long)(iVar17 + 0xe);
                                      *(byte *)(param_5 + lVar27) =
                                           *(byte *)(param_3 + lVar27) ^ *(byte *)(param_1 + lVar27)
                                      ;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00232fc8:
      iVar28 = iVar28 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 002330a8 (1712 bytes) name=FUN_002330a8

void FUN_002330a8(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  undefined8 *puVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  byte bVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  undefined8 *puVar17;
  byte *pbVar18;
  byte *pbVar19;
  undefined8 *puVar20;
  uint uVar21;
  long lVar22;
  long lVar23;
  int iVar24;
  long lVar25;
  uint uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  
  iVar24 = param_7[1];
  iVar7 = *param_7;
  if (iVar24 != 0) {
    uVar12 = iVar7 - 0x20;
    iVar9 = ((uVar12 >> 5) + 1) * 0x20;
    if ((int)uVar12 < 0) {
      iVar9 = 0;
    }
    iVar13 = iVar7 + -3;
    uVar14 = (iVar7 + -4) - iVar9;
    uVar11 = uVar14 >> 2;
    lVar25 = (long)iVar9;
    uVar1 = (uVar11 - 3 >> 2) + 1;
    iVar5 = iVar9 + 4 + uVar11 * 4;
    do {
      if (-1 < (int)uVar12) {
        puVar20 = (undefined8 *)(param_5 + 0x10);
        puVar17 = (undefined8 *)(param_1 + 0x10);
        do {
          uVar28 = puVar17[1];
          uVar27 = *puVar17;
          puVar3 = puVar17 + 4;
          uVar30 = puVar17[-1];
          uVar29 = puVar17[-2];
          puVar20[-1] = CONCAT17(~(byte)((ulong)uVar30 >> 0x38),
                                 CONCAT16(~(byte)((ulong)uVar30 >> 0x30),
                                          CONCAT15(~(byte)((ulong)uVar30 >> 0x28),
                                                   CONCAT14(~(byte)((ulong)uVar30 >> 0x20),
                                                            CONCAT13(~(byte)((ulong)uVar30 >> 0x18),
                                                                     CONCAT12(~(byte)((ulong)uVar30
                                                                                     >> 0x10),
                                                                              CONCAT11(~(byte)((
                                                  ulong)uVar30 >> 8),~(byte)uVar30)))))));
          puVar20[-2] = CONCAT17(~(byte)((ulong)uVar29 >> 0x38),
                                 CONCAT16(~(byte)((ulong)uVar29 >> 0x30),
                                          CONCAT15(~(byte)((ulong)uVar29 >> 0x28),
                                                   CONCAT14(~(byte)((ulong)uVar29 >> 0x20),
                                                            CONCAT13(~(byte)((ulong)uVar29 >> 0x18),
                                                                     CONCAT12(~(byte)((ulong)uVar29
                                                                                     >> 0x10),
                                                                              CONCAT11(~(byte)((
                                                  ulong)uVar29 >> 8),~(byte)uVar29)))))));
          puVar20[1] = CONCAT17(~(byte)((ulong)uVar28 >> 0x38),
                                CONCAT16(~(byte)((ulong)uVar28 >> 0x30),
                                         CONCAT15(~(byte)((ulong)uVar28 >> 0x28),
                                                  CONCAT14(~(byte)((ulong)uVar28 >> 0x20),
                                                           CONCAT13(~(byte)((ulong)uVar28 >> 0x18),
                                                                    CONCAT12(~(byte)((ulong)uVar28
                                                                                    >> 0x10),
                                                                             CONCAT11(~(byte)((ulong
                                                  )uVar28 >> 8),~(byte)uVar28)))))));
          *puVar20 = CONCAT17(~(byte)((ulong)uVar27 >> 0x38),
                              CONCAT16(~(byte)((ulong)uVar27 >> 0x30),
                                       CONCAT15(~(byte)((ulong)uVar27 >> 0x28),
                                                CONCAT14(~(byte)((ulong)uVar27 >> 0x20),
                                                         CONCAT13(~(byte)((ulong)uVar27 >> 0x18),
                                                                  CONCAT12(~(byte)((ulong)uVar27 >>
                                                                                  0x10),
                                                                           CONCAT11(~(byte)((ulong)
                                                  uVar27 >> 8),~(byte)uVar27)))))));
          puVar20 = puVar20 + 4;
          puVar17 = puVar3;
        } while (puVar3 != (undefined8 *)(param_1 + (ulong)(uVar12 >> 5) * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar13) {
        pbVar18 = (byte *)(param_1 + lVar25);
        pbVar19 = (byte *)(param_5 + lVar25);
        iVar10 = iVar5;
        if ((pbVar18 < (byte *)(param_5 + lVar25 + 0x40) &&
             pbVar19 < (byte *)(param_1 + lVar25 + 0x40)) || (uVar11 + 1 < 5)) {
          do {
            pbVar4 = pbVar18 + 4;
            bVar8 = *pbVar18;
            pbVar19[1] = ~pbVar18[1];
            *pbVar19 = ~bVar8;
            bVar8 = pbVar18[2];
            pbVar19[3] = ~pbVar18[3];
            pbVar19[2] = ~bVar8;
            pbVar18 = pbVar4;
            pbVar19 = pbVar19 + 4;
          } while (pbVar4 != (byte *)(param_1 + lVar25 + 4 + (ulong)uVar11 * 4));
        }
        else {
          iVar16 = iVar9;
          if (0xb < uVar14) {
            uVar21 = 0;
            do {
              uVar28 = *(undefined8 *)(pbVar18 + 8);
              uVar27 = *(undefined8 *)pbVar18;
              uVar21 = uVar21 + 1;
              *(ulong *)(pbVar19 + 8) =
                   CONCAT17(~(byte)((ulong)uVar28 >> 0x38),
                            CONCAT16(~(byte)((ulong)uVar28 >> 0x30),
                                     CONCAT15(~(byte)((ulong)uVar28 >> 0x28),
                                              CONCAT14(~(byte)((ulong)uVar28 >> 0x20),
                                                       CONCAT13(~(byte)((ulong)uVar28 >> 0x18),
                                                                CONCAT12(~(byte)((ulong)uVar28 >>
                                                                                0x10),
                                                                         CONCAT11(~(byte)((ulong)
                                                  uVar28 >> 8),~(byte)uVar28)))))));
              *(ulong *)pbVar19 =
                   CONCAT17(~(byte)((ulong)uVar27 >> 0x38),
                            CONCAT16(~(byte)((ulong)uVar27 >> 0x30),
                                     CONCAT15(~(byte)((ulong)uVar27 >> 0x28),
                                              CONCAT14(~(byte)((ulong)uVar27 >> 0x20),
                                                       CONCAT13(~(byte)((ulong)uVar27 >> 0x18),
                                                                CONCAT12(~(byte)((ulong)uVar27 >>
                                                                                0x10),
                                                                         CONCAT11(~(byte)((ulong)
                                                  uVar27 >> 8),~(byte)uVar27)))))));
              pbVar18 = pbVar18 + 0x10;
              pbVar19 = pbVar19 + 0x10;
            } while (uVar21 < uVar1);
            iVar16 = iVar9 + uVar1 * 0x10;
            if (uVar11 + 1 == uVar1 * 4) goto LAB_002332bc;
          }
          lVar22 = (long)iVar16;
          bVar8 = *(byte *)(param_1 + lVar22 + 1);
          *(byte *)(param_5 + lVar22) = ~*(byte *)(param_1 + lVar22);
          *(byte *)(param_5 + lVar22 + 1) = ~bVar8;
          bVar8 = *(byte *)(param_1 + lVar22 + 3);
          *(byte *)(param_5 + lVar22 + 2) = ~*(byte *)(param_1 + lVar22 + 2);
          *(byte *)(param_5 + lVar22 + 3) = ~bVar8;
          if (iVar16 + 4 < iVar13) {
            lVar22 = (long)(iVar16 + 4);
            bVar8 = *(byte *)(param_1 + lVar22 + 1);
            *(byte *)(param_5 + lVar22) = ~*(byte *)(param_1 + lVar22);
            *(byte *)(param_5 + lVar22 + 1) = ~bVar8;
            bVar8 = *(byte *)(param_1 + lVar22 + 3);
            *(byte *)(param_5 + lVar22 + 2) = ~*(byte *)(param_1 + lVar22 + 2);
            *(byte *)(param_5 + lVar22 + 3) = ~bVar8;
            if (iVar16 + 8 < iVar13) {
              lVar22 = (long)(iVar16 + 8);
              bVar8 = *(byte *)(param_1 + lVar22 + 1);
              *(byte *)(param_5 + lVar22) = ~*(byte *)(param_1 + lVar22);
              *(byte *)(param_5 + lVar22 + 1) = ~bVar8;
              bVar8 = *(byte *)(param_1 + lVar22 + 3);
              *(byte *)(param_5 + lVar22 + 2) = ~*(byte *)(param_1 + lVar22 + 2);
              *(byte *)(param_5 + lVar22 + 3) = ~bVar8;
            }
          }
        }
      }
LAB_002332bc:
      if (iVar10 < iVar7) {
        lVar22 = (long)iVar10;
        uVar21 = iVar7 - iVar10;
        pbVar18 = (byte *)(param_1 + lVar22);
        pbVar19 = (byte *)(param_5 + lVar22);
        if ((pbVar18 < (byte *)(param_5 + lVar22 + 0x10) &&
             pbVar19 < (byte *)(param_1 + lVar22 + 0x10)) || (uVar21 < 0x14)) {
          lVar22 = 0;
          do {
            pbVar19[lVar22] = ~pbVar18[lVar22];
            lVar22 = lVar22 + 1;
          } while (lVar22 != (ulong)(uint)((iVar7 + -1) - iVar10) + 1);
        }
        else {
          uVar6 = -(int)pbVar18 & 0xf;
          uVar15 = uVar21;
          if (uVar6 < uVar21) {
            uVar15 = uVar6;
          }
          iVar16 = iVar10;
          if (uVar15 != 0) {
            iVar16 = iVar10 + 1;
            *pbVar19 = ~*pbVar18;
            if (uVar15 != 1) {
              lVar23 = (long)iVar16;
              iVar16 = iVar10 + 2;
              *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
              if (uVar15 != 2) {
                lVar23 = (long)iVar16;
                iVar16 = iVar10 + 3;
                *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                if (uVar15 != 3) {
                  lVar23 = (long)iVar16;
                  iVar16 = iVar10 + 4;
                  *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                  if (uVar15 != 4) {
                    lVar23 = (long)iVar16;
                    iVar16 = iVar10 + 5;
                    *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                    if (uVar15 != 5) {
                      lVar23 = (long)iVar16;
                      iVar16 = iVar10 + 6;
                      *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                      if (uVar15 != 6) {
                        lVar23 = (long)iVar16;
                        iVar16 = iVar10 + 7;
                        *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                        if (uVar15 != 7) {
                          lVar23 = (long)iVar16;
                          iVar16 = iVar10 + 8;
                          *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                          if (uVar15 != 8) {
                            lVar23 = (long)iVar16;
                            iVar16 = iVar10 + 9;
                            *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                            if (uVar15 != 9) {
                              lVar23 = (long)iVar16;
                              iVar16 = iVar10 + 10;
                              *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                              if (uVar15 != 10) {
                                lVar23 = (long)iVar16;
                                iVar16 = iVar10 + 0xb;
                                *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                                if (uVar15 != 0xb) {
                                  lVar23 = (long)iVar16;
                                  iVar16 = iVar10 + 0xc;
                                  *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                                  if (uVar15 != 0xc) {
                                    lVar23 = (long)iVar16;
                                    iVar16 = iVar10 + 0xd;
                                    *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                                    if (uVar15 != 0xd) {
                                      lVar23 = (long)iVar16;
                                      iVar16 = iVar10 + 0xe;
                                      *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                                      if (uVar15 == 0xf) {
                                        lVar23 = (long)iVar16;
                                        iVar16 = iVar10 + 0xf;
                                        *(byte *)(param_5 + lVar23) = ~*(byte *)(param_1 + lVar23);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar6 = ((uVar21 - uVar15) - 0x10 >> 4) + 1;
          iVar10 = uVar6 * 0x10;
          if (0xe < (uVar21 - 1) - uVar15) {
            uVar26 = 0;
            puVar20 = (undefined8 *)(param_5 + lVar22 + (ulong)uVar15);
            puVar17 = (undefined8 *)(param_1 + lVar22 + (ulong)uVar15);
            do {
              uVar28 = puVar17[1];
              uVar27 = *puVar17;
              uVar26 = uVar26 + 1;
              puVar20[1] = CONCAT17(~(byte)((ulong)uVar28 >> 0x38),
                                    CONCAT16(~(byte)((ulong)uVar28 >> 0x30),
                                             CONCAT15(~(byte)((ulong)uVar28 >> 0x28),
                                                      CONCAT14(~(byte)((ulong)uVar28 >> 0x20),
                                                               CONCAT13(~(byte)((ulong)uVar28 >>
                                                                               0x18),
                                                                        CONCAT12(~(byte)((ulong)
                                                  uVar28 >> 0x10),
                                                  CONCAT11(~(byte)((ulong)uVar28 >> 8),~(byte)uVar28
                                                          )))))));
              *puVar20 = CONCAT17(~(byte)((ulong)uVar27 >> 0x38),
                                  CONCAT16(~(byte)((ulong)uVar27 >> 0x30),
                                           CONCAT15(~(byte)((ulong)uVar27 >> 0x28),
                                                    CONCAT14(~(byte)((ulong)uVar27 >> 0x20),
                                                             CONCAT13(~(byte)((ulong)uVar27 >> 0x18)
                                                                      ,CONCAT12(~(byte)((ulong)
                                                  uVar27 >> 0x10),
                                                  CONCAT11(~(byte)((ulong)uVar27 >> 8),~(byte)uVar27
                                                          )))))));
              puVar20 = puVar20 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar26 < uVar6);
            iVar16 = iVar16 + iVar10;
            if (uVar21 - uVar15 == iVar10) goto LAB_0023369c;
          }
          iVar10 = iVar16 + 1;
          *(byte *)(param_5 + iVar16) = ~*(byte *)(param_1 + iVar16);
          if (iVar10 < iVar7) {
            iVar2 = iVar16 + 2;
            *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
            if (iVar2 < iVar7) {
              iVar10 = iVar16 + 3;
              *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
              if (iVar10 < iVar7) {
                iVar2 = iVar16 + 4;
                *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                if (iVar2 < iVar7) {
                  iVar10 = iVar16 + 5;
                  *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
                  if (iVar10 < iVar7) {
                    iVar2 = iVar16 + 6;
                    *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                    if (iVar2 < iVar7) {
                      iVar10 = iVar16 + 7;
                      *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
                      if (iVar10 < iVar7) {
                        iVar2 = iVar16 + 8;
                        *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                        if (iVar2 < iVar7) {
                          iVar10 = iVar16 + 9;
                          *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
                          if (iVar10 < iVar7) {
                            iVar2 = iVar16 + 10;
                            *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                            if (iVar2 < iVar7) {
                              iVar10 = iVar16 + 0xb;
                              *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
                              if (iVar10 < iVar7) {
                                iVar2 = iVar16 + 0xc;
                                *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                                if (iVar2 < iVar7) {
                                  iVar10 = iVar16 + 0xd;
                                  *(byte *)(param_5 + iVar2) = ~*(byte *)(param_1 + iVar2);
                                  if (iVar10 < iVar7) {
                                    iVar16 = iVar16 + 0xe;
                                    *(byte *)(param_5 + iVar10) = ~*(byte *)(param_1 + iVar10);
                                    if (iVar16 < iVar7) {
                                      *(byte *)(param_5 + iVar16) = ~*(byte *)(param_1 + iVar16);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0023369c:
      iVar24 = iVar24 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 00233758 (964 bytes) name=FUN_00233758

void FUN_00233758(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  float *pfVar14;
  undefined8 *puVar15;
  ulong uVar16;
  undefined8 *puVar17;
  float *pfVar18;
  int iVar19;
  undefined8 *puVar20;
  float *pfVar21;
  uint uVar22;
  long lVar23;
  uint uVar24;
  int iVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  float fVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  float fVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  long lVar37;
  
  iVar25 = param_7[1];
  iVar7 = *param_7;
  if (iVar25 != 0) {
    uVar10 = iVar7 - 8U >> 3;
    iVar8 = (uVar10 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar26 = ((long)iVar8 + 0x10) * 4;
    lVar27 = lVar26 + -0x40;
    lVar37 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
    iVar4 = iVar8 + 4 + uVar11 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar15 = (undefined8 *)(param_1 + 0x10);
        puVar20 = (undefined8 *)(param_3 + 0x10);
        puVar17 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar31 = puVar15[1];
          uVar30 = *puVar15;
          puVar12 = puVar15 + -1;
          uVar32 = puVar15[-2];
          puVar15 = puVar15 + 4;
          puVar13 = puVar20 + -1;
          uVar36 = puVar20[-2];
          uVar35 = puVar20[1];
          uVar34 = *puVar20;
          puVar20 = puVar20 + 4;
          puVar17[-1] = CONCAT44((float)((ulong)*puVar12 >> 0x20) + (float)((ulong)*puVar13 >> 0x20)
                                 ,(float)*puVar12 + (float)*puVar13);
          puVar17[-2] = CONCAT44((float)((ulong)uVar32 >> 0x20) + (float)((ulong)uVar36 >> 0x20),
                                 (float)uVar32 + (float)uVar36);
          puVar17[1] = CONCAT44((float)((ulong)uVar31 >> 0x20) + (float)((ulong)uVar35 >> 0x20),
                                (float)uVar31 + (float)uVar35);
          *puVar17 = CONCAT44((float)((ulong)uVar30 >> 0x20) + (float)((ulong)uVar34 >> 0x20),
                              (float)uVar30 + (float)uVar34);
          puVar17 = puVar17 + 4;
        } while (puVar15 != (undefined8 *)(param_1 + (ulong)uVar10 * 0x20 + 0x30));
      }
      iVar9 = iVar8;
      if (iVar8 < iVar7 + -3) {
        pfVar14 = (float *)(param_1 + lVar27);
        pfVar18 = (float *)(param_5 + lVar27);
        pfVar21 = (float *)(param_3 + lVar27);
        iVar9 = iVar4;
        if ((pfVar14 < (float *)(param_5 + lVar26) && pfVar18 < (float *)(param_1 + lVar26) ||
             pfVar21 < (float *)(param_5 + lVar26) && pfVar18 < (float *)(param_3 + lVar26)) ||
           (uVar11 + 1 < 4)) {
          do {
            pfVar3 = pfVar14 + 4;
            fVar33 = *pfVar21;
            fVar29 = *pfVar14;
            pfVar18[1] = pfVar14[1] + pfVar21[1];
            *pfVar18 = fVar29 + fVar33;
            fVar29 = pfVar14[2];
            fVar33 = pfVar21[2];
            pfVar18[3] = pfVar14[3] + pfVar21[3];
            pfVar18[2] = fVar29 + fVar33;
            pfVar14 = pfVar3;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (pfVar3 != (float *)(param_1 + lVar37));
        }
        else {
          uVar22 = 0;
          do {
            uVar30 = *(undefined8 *)pfVar14;
            uVar22 = uVar22 + 1;
            uVar31 = *(undefined8 *)pfVar21;
            *(ulong *)(pfVar18 + 2) =
                 CONCAT44((float)((ulong)*(undefined8 *)(pfVar14 + 2) >> 0x20) +
                          (float)((ulong)*(undefined8 *)(pfVar21 + 2) >> 0x20),
                          (float)*(undefined8 *)(pfVar14 + 2) + (float)*(undefined8 *)(pfVar21 + 2))
            ;
            *(ulong *)pfVar18 =
                 CONCAT44((float)((ulong)uVar30 >> 0x20) + (float)((ulong)uVar31 >> 0x20),
                          (float)uVar30 + (float)uVar31);
            pfVar14 = pfVar14 + 4;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (uVar22 < uVar11 + 1);
        }
      }
      if (iVar9 < iVar7) {
        uVar22 = iVar7 - iVar9;
        lVar23 = ((long)iVar9 + 4) * 4;
        lVar28 = lVar23 + -0x10;
        uVar16 = param_5 + lVar28;
        uVar5 = param_1 + lVar28;
        if ((uVar16 < (ulong)(param_1 + lVar23) && uVar5 < (ulong)(param_5 + lVar23) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar23) &&
             uVar16 < (ulong)(param_3 + lVar23)) || (uVar22 < 9)) {
          lVar23 = 0;
          do {
            *(float *)(uVar16 + lVar23) =
                 *(float *)(uVar5 + lVar23) + *(float *)(param_3 + lVar28 + lVar23);
            lVar23 = lVar23 + 4;
          } while (lVar23 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          if (uVar22 < uVar6) {
            uVar6 = uVar22;
          }
          iVar19 = iVar9;
          if (uVar6 != 0) {
            lVar23 = (long)iVar9 * 4;
            iVar19 = iVar9 + 1;
            *(float *)(param_5 + lVar23) =
                 *(float *)(param_1 + lVar23) + *(float *)(param_3 + lVar23);
            if (uVar6 != 1) {
              lVar2 = lVar23 + 4;
              iVar19 = iVar9 + 2;
              *(float *)(param_5 + lVar2) =
                   *(float *)(param_1 + lVar2) + *(float *)(param_3 + lVar2);
              if (uVar6 == 3) {
                lVar23 = lVar23 + 8;
                iVar19 = iVar9 + 3;
                *(float *)(param_5 + lVar23) =
                     *(float *)(param_1 + lVar23) + *(float *)(param_3 + lVar23);
              }
            }
          }
          uVar24 = 0;
          lVar28 = lVar28 + (ulong)uVar6 * 4;
          uVar1 = ((uVar22 - uVar6) - 4 >> 2) + 1;
          iVar9 = uVar1 * 4;
          puVar15 = (undefined8 *)(param_5 + lVar28);
          puVar20 = (undefined8 *)(param_3 + lVar28);
          puVar17 = (undefined8 *)(param_1 + lVar28);
          do {
            uVar30 = *puVar20;
            uVar24 = uVar24 + 1;
            uVar31 = *puVar17;
            puVar15[1] = CONCAT44((float)((ulong)puVar20[1] >> 0x20) +
                                  (float)((ulong)puVar17[1] >> 0x20),
                                  (float)puVar20[1] + (float)puVar17[1]);
            *puVar15 = CONCAT44((float)((ulong)uVar30 >> 0x20) + (float)((ulong)uVar31 >> 0x20),
                                (float)uVar30 + (float)uVar31);
            puVar15 = puVar15 + 2;
            puVar20 = puVar20 + 2;
            puVar17 = puVar17 + 2;
          } while (uVar24 < uVar1);
          uVar1 = iVar19 + iVar9;
          if (uVar22 - uVar6 != iVar9) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            *(float *)(param_5 + uVar16) =
                 *(float *)(param_1 + uVar16) + *(float *)(param_3 + uVar16);
            if ((int)(uVar1 + 1) < iVar7) {
              lVar28 = uVar16 + 4;
              *(float *)(param_5 + lVar28) =
                   *(float *)(param_1 + lVar28) + *(float *)(param_3 + lVar28);
              if ((int)(uVar1 + 2) < iVar7) {
                lVar28 = uVar16 + 8;
                *(float *)(param_5 + lVar28) =
                     *(float *)(param_1 + lVar28) + *(float *)(param_3 + lVar28);
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 00233b1c (964 bytes) name=FUN_00233b1c

void FUN_00233b1c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  float *pfVar14;
  undefined8 *puVar15;
  ulong uVar16;
  undefined8 *puVar17;
  float *pfVar18;
  int iVar19;
  undefined8 *puVar20;
  float *pfVar21;
  uint uVar22;
  long lVar23;
  uint uVar24;
  int iVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  float fVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  float fVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  long lVar37;
  
  iVar25 = param_7[1];
  iVar7 = *param_7;
  if (iVar25 != 0) {
    uVar10 = iVar7 - 8U >> 3;
    iVar8 = (uVar10 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar26 = ((long)iVar8 + 0x10) * 4;
    lVar27 = lVar26 + -0x40;
    lVar37 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
    iVar4 = iVar8 + 4 + uVar11 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar15 = (undefined8 *)(param_1 + 0x10);
        puVar20 = (undefined8 *)(param_3 + 0x10);
        puVar17 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar31 = puVar15[1];
          uVar30 = *puVar15;
          puVar12 = puVar15 + -1;
          uVar32 = puVar15[-2];
          puVar15 = puVar15 + 4;
          puVar13 = puVar20 + -1;
          uVar36 = puVar20[-2];
          uVar35 = puVar20[1];
          uVar34 = *puVar20;
          puVar20 = puVar20 + 4;
          puVar17[-1] = CONCAT44((float)((ulong)*puVar12 >> 0x20) - (float)((ulong)*puVar13 >> 0x20)
                                 ,(float)*puVar12 - (float)*puVar13);
          puVar17[-2] = CONCAT44((float)((ulong)uVar32 >> 0x20) - (float)((ulong)uVar36 >> 0x20),
                                 (float)uVar32 - (float)uVar36);
          puVar17[1] = CONCAT44((float)((ulong)uVar31 >> 0x20) - (float)((ulong)uVar35 >> 0x20),
                                (float)uVar31 - (float)uVar35);
          *puVar17 = CONCAT44((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar34 >> 0x20),
                              (float)uVar30 - (float)uVar34);
          puVar17 = puVar17 + 4;
        } while (puVar15 != (undefined8 *)(param_1 + (ulong)uVar10 * 0x20 + 0x30));
      }
      iVar9 = iVar8;
      if (iVar8 < iVar7 + -3) {
        pfVar14 = (float *)(param_1 + lVar27);
        pfVar18 = (float *)(param_5 + lVar27);
        pfVar21 = (float *)(param_3 + lVar27);
        iVar9 = iVar4;
        if ((pfVar14 < (float *)(param_5 + lVar26) && pfVar18 < (float *)(param_1 + lVar26) ||
             pfVar21 < (float *)(param_5 + lVar26) && pfVar18 < (float *)(param_3 + lVar26)) ||
           (uVar11 + 1 < 4)) {
          do {
            pfVar3 = pfVar14 + 4;
            fVar33 = *pfVar21;
            fVar29 = *pfVar14;
            pfVar18[1] = pfVar14[1] - pfVar21[1];
            *pfVar18 = fVar29 - fVar33;
            fVar29 = pfVar14[2];
            fVar33 = pfVar21[2];
            pfVar18[3] = pfVar14[3] - pfVar21[3];
            pfVar18[2] = fVar29 - fVar33;
            pfVar14 = pfVar3;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (pfVar3 != (float *)(param_1 + lVar37));
        }
        else {
          uVar22 = 0;
          do {
            uVar30 = *(undefined8 *)pfVar14;
            uVar22 = uVar22 + 1;
            uVar31 = *(undefined8 *)pfVar21;
            *(ulong *)(pfVar18 + 2) =
                 CONCAT44((float)((ulong)*(undefined8 *)(pfVar14 + 2) >> 0x20) -
                          (float)((ulong)*(undefined8 *)(pfVar21 + 2) >> 0x20),
                          (float)*(undefined8 *)(pfVar14 + 2) - (float)*(undefined8 *)(pfVar21 + 2))
            ;
            *(ulong *)pfVar18 =
                 CONCAT44((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar31 >> 0x20),
                          (float)uVar30 - (float)uVar31);
            pfVar14 = pfVar14 + 4;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (uVar22 < uVar11 + 1);
        }
      }
      if (iVar9 < iVar7) {
        uVar22 = iVar7 - iVar9;
        lVar23 = ((long)iVar9 + 4) * 4;
        lVar28 = lVar23 + -0x10;
        uVar16 = param_5 + lVar28;
        uVar5 = param_1 + lVar28;
        if ((uVar16 < (ulong)(param_1 + lVar23) && uVar5 < (ulong)(param_5 + lVar23) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar23) &&
             uVar16 < (ulong)(param_3 + lVar23)) || (uVar22 < 9)) {
          lVar23 = 0;
          do {
            *(float *)(uVar16 + lVar23) =
                 *(float *)(uVar5 + lVar23) - *(float *)(param_3 + lVar28 + lVar23);
            lVar23 = lVar23 + 4;
          } while (lVar23 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          if (uVar22 < uVar6) {
            uVar6 = uVar22;
          }
          iVar19 = iVar9;
          if (uVar6 != 0) {
            lVar23 = (long)iVar9 * 4;
            iVar19 = iVar9 + 1;
            *(float *)(param_5 + lVar23) =
                 *(float *)(param_1 + lVar23) - *(float *)(param_3 + lVar23);
            if (uVar6 != 1) {
              lVar2 = lVar23 + 4;
              iVar19 = iVar9 + 2;
              *(float *)(param_5 + lVar2) =
                   *(float *)(param_1 + lVar2) - *(float *)(param_3 + lVar2);
              if (uVar6 == 3) {
                lVar23 = lVar23 + 8;
                iVar19 = iVar9 + 3;
                *(float *)(param_5 + lVar23) =
                     *(float *)(param_1 + lVar23) - *(float *)(param_3 + lVar23);
              }
            }
          }
          uVar24 = 0;
          lVar28 = lVar28 + (ulong)uVar6 * 4;
          uVar1 = ((uVar22 - uVar6) - 4 >> 2) + 1;
          iVar9 = uVar1 * 4;
          puVar15 = (undefined8 *)(param_5 + lVar28);
          puVar20 = (undefined8 *)(param_3 + lVar28);
          puVar17 = (undefined8 *)(param_1 + lVar28);
          do {
            uVar31 = *puVar20;
            uVar24 = uVar24 + 1;
            uVar30 = *puVar17;
            puVar15[1] = CONCAT44((float)((ulong)puVar17[1] >> 0x20) -
                                  (float)((ulong)puVar20[1] >> 0x20),
                                  (float)puVar17[1] - (float)puVar20[1]);
            *puVar15 = CONCAT44((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar31 >> 0x20),
                                (float)uVar30 - (float)uVar31);
            puVar15 = puVar15 + 2;
            puVar20 = puVar20 + 2;
            puVar17 = puVar17 + 2;
          } while (uVar24 < uVar1);
          uVar1 = iVar19 + iVar9;
          if (uVar22 - uVar6 != iVar9) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            *(float *)(param_5 + uVar16) =
                 *(float *)(param_1 + uVar16) - *(float *)(param_3 + uVar16);
            if ((int)(uVar1 + 1) < iVar7) {
              lVar28 = uVar16 + 4;
              *(float *)(param_5 + lVar28) =
                   *(float *)(param_1 + lVar28) - *(float *)(param_3 + lVar28);
              if ((int)(uVar1 + 2) < iVar7) {
                lVar28 = uVar16 + 8;
                *(float *)(param_5 + lVar28) =
                     *(float *)(param_1 + lVar28) - *(float *)(param_3 + lVar28);
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 00233ee0 (1092 bytes) name=FUN_00233ee0

void FUN_00233ee0(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  long lVar1;
  float *pfVar2;
  int iVar3;
  ulong uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [12];
  undefined1 (*pauVar15) [12];
  undefined1 *puVar16;
  undefined1 (*pauVar17) [16];
  long lVar18;
  undefined8 *puVar19;
  ulong uVar20;
  float *pfVar21;
  uint uVar22;
  float *pfVar23;
  int iVar24;
  undefined1 (*pauVar25) [12];
  float *pfVar26;
  long lVar27;
  uint uVar28;
  undefined1 (*pauVar29) [16];
  int iVar30;
  long lVar31;
  long lVar32;
  float fVar33;
  float fVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  float fVar38;
  long lVar39;
  
  iVar30 = param_7[1];
  iVar7 = *param_7;
  if (iVar30 != 0) {
    uVar10 = iVar7 - 8U >> 3;
    iVar8 = (uVar10 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar31 = ((long)iVar8 + 0x10) * 4;
    lVar32 = lVar31 + -0x40;
    lVar39 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
    iVar3 = iVar8 + 4 + uVar11 * 4;
    do {
      if (0 < iVar7 + -7) {
        pauVar17 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar25 = (undefined1 (*) [12])(param_3 + 0x10);
        puVar19 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar29 = pauVar17 + -1;
          pauVar15 = pauVar25 + -2;
          auVar12 = *pauVar17;
          pauVar17 = pauVar17 + 2;
          puVar16 = *pauVar25;
          auVar14 = *pauVar25;
          pauVar25 = (undefined1 (*) [12])(pauVar25[2] + 8);
          auVar37 = NEON_fmax(*pauVar29,*(undefined1 (*) [16])(*pauVar15 + 8),4);
          auVar35._12_4_ = (int)((ulong)*(undefined8 *)(puVar16 + 8) >> 0x20);
          auVar35._0_12_ = auVar14;
          auVar35 = NEON_fmax(auVar12,auVar35,4);
          puVar19[-1] = auVar37._8_8_;
          puVar19[-2] = auVar37._0_8_;
          puVar19[1] = auVar35._8_8_;
          *puVar19 = auVar35._0_8_;
          puVar19 = puVar19 + 4;
        } while (pauVar17 != (undefined1 (*) [16])(param_1 + (ulong)uVar10 * 0x20 + 0x30));
      }
      iVar9 = iVar8;
      if (iVar8 < iVar7 + -3) {
        pfVar21 = (float *)(param_1 + lVar32);
        pfVar23 = (float *)(param_5 + lVar32);
        pfVar26 = (float *)(param_3 + lVar32);
        iVar9 = iVar3;
        if ((pfVar21 < (float *)(param_5 + lVar31) && pfVar23 < (float *)(param_1 + lVar31) ||
             pfVar26 < (float *)(param_5 + lVar31) && pfVar23 < (float *)(param_3 + lVar31)) ||
           (uVar11 + 1 < 5)) {
          do {
            fVar38 = pfVar21[1];
            fVar34 = pfVar26[1];
            fVar33 = *pfVar26;
            if (*pfVar26 <= *pfVar21) {
              fVar33 = *pfVar21;
            }
            *pfVar23 = fVar33;
            if (fVar34 <= fVar38) {
              fVar34 = fVar38;
            }
            pfVar23[1] = fVar34;
            pfVar2 = pfVar21 + 4;
            fVar38 = pfVar21[3];
            fVar34 = pfVar26[3];
            fVar33 = pfVar26[2];
            if (pfVar26[2] <= pfVar21[2]) {
              fVar33 = pfVar21[2];
            }
            pfVar23[2] = fVar33;
            if (fVar34 <= fVar38) {
              fVar34 = fVar38;
            }
            pfVar23[3] = fVar34;
            pfVar21 = pfVar2;
            pfVar23 = pfVar23 + 4;
            pfVar26 = pfVar26 + 4;
          } while (pfVar2 != (float *)(param_1 + lVar39));
        }
        else {
          lVar18 = 0;
          uVar22 = 0;
          do {
            pauVar25 = (undefined1 (*) [12])((long)pfVar26 + lVar18);
            puVar19 = (undefined8 *)((long)pfVar23 + lVar18);
            uVar22 = uVar22 + 1;
            auVar35 = *(undefined1 (*) [16])((long)pfVar21 + lVar18);
            fVar33 = (float)((ulong)*(undefined8 *)(*pauVar25 + 8) >> 0x20);
            lVar18 = lVar18 + 0x10;
            auVar37._0_4_ = -(uint)(auVar35._0_4_ < (float)*(undefined8 *)*pauVar25);
            auVar37._4_4_ =
                 -(uint)(auVar35._4_4_ < (float)((ulong)*(undefined8 *)*pauVar25 >> 0x20));
            auVar37._8_4_ = -(uint)(auVar35._8_4_ < (float)*(undefined8 *)(*pauVar25 + 8));
            auVar37._12_4_ = -(uint)(auVar35._12_4_ < fVar33);
            auVar12._12_4_ = fVar33;
            auVar12._0_12_ = *pauVar25;
            auVar35 = auVar35 ^ (auVar35 ^ auVar12) & auVar37;
            puVar19[1] = auVar35._8_8_;
            *puVar19 = auVar35._0_8_;
          } while (uVar22 < uVar11 + 1);
        }
      }
      if (iVar9 < iVar7) {
        uVar22 = iVar7 - iVar9;
        lVar27 = ((long)iVar9 + 4) * 4;
        lVar18 = lVar27 + -0x10;
        uVar20 = param_5 + lVar18;
        uVar4 = param_1 + lVar18;
        if ((uVar20 < (ulong)(param_1 + lVar27) && uVar4 < (ulong)(param_5 + lVar27) ||
             (ulong)(param_3 + lVar18) < (ulong)(param_5 + lVar27) &&
             uVar20 < (ulong)(param_3 + lVar27)) || (uVar22 < 8)) {
          lVar27 = 0;
          do {
            fVar33 = *(float *)(param_3 + lVar18 + lVar27);
            if (fVar33 <= *(float *)(uVar4 + lVar27)) {
              fVar33 = *(float *)(uVar4 + lVar27);
            }
            *(float *)(uVar20 + lVar27) = fVar33;
            lVar27 = lVar27 + 4;
          } while (lVar27 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
        }
        else {
          uVar5 = -((uint)(uVar4 >> 2) & 3) & 3;
          uVar6 = uVar22;
          if (uVar5 < uVar22) {
            uVar6 = uVar5;
          }
          iVar24 = iVar9;
          if (uVar6 != 0) {
            lVar27 = (long)iVar9 * 4;
            fVar33 = *(float *)(param_3 + lVar27);
            if (*(float *)(param_3 + lVar27) <= *(float *)(param_1 + lVar27)) {
              fVar33 = *(float *)(param_1 + lVar27);
            }
            iVar24 = iVar9 + 1;
            *(float *)(param_5 + lVar27) = fVar33;
            if (uVar6 != 1) {
              lVar1 = lVar27 + 4;
              fVar33 = *(float *)(param_3 + lVar1);
              if (*(float *)(param_3 + lVar1) <= *(float *)(param_1 + lVar1)) {
                fVar33 = *(float *)(param_1 + lVar1);
              }
              iVar24 = iVar9 + 2;
              *(float *)(param_5 + lVar1) = fVar33;
              if (uVar6 == 3) {
                lVar27 = lVar27 + 8;
                fVar33 = *(float *)(param_3 + lVar27);
                if (*(float *)(param_3 + lVar27) <= *(float *)(param_1 + lVar27)) {
                  fVar33 = *(float *)(param_1 + lVar27);
                }
                iVar24 = iVar9 + 3;
                *(float *)(param_5 + lVar27) = fVar33;
              }
            }
          }
          uVar28 = 0;
          lVar18 = lVar18 + (ulong)uVar6 * 4;
          uVar5 = ((uVar22 - uVar6) - 4 >> 2) + 1;
          iVar9 = uVar5 * 4;
          puVar19 = (undefined8 *)(param_5 + lVar18);
          pauVar25 = (undefined1 (*) [12])(param_3 + lVar18);
          pauVar17 = (undefined1 (*) [16])(param_1 + lVar18);
          do {
            auVar35 = *pauVar17;
            uVar28 = uVar28 + 1;
            fVar33 = (float)((ulong)*(undefined8 *)(*pauVar25 + 8) >> 0x20);
            auVar36._0_4_ = -(uint)(auVar35._0_4_ < (float)*(undefined8 *)*pauVar25);
            auVar36._4_4_ =
                 -(uint)(auVar35._4_4_ < (float)((ulong)*(undefined8 *)*pauVar25 >> 0x20));
            auVar36._8_4_ = -(uint)(auVar35._8_4_ < (float)*(undefined8 *)(*pauVar25 + 8));
            auVar36._12_4_ = -(uint)(auVar35._12_4_ < fVar33);
            auVar13._12_4_ = fVar33;
            auVar13._0_12_ = *pauVar25;
            auVar35 = auVar35 ^ (auVar35 ^ auVar13) & auVar36;
            puVar19[1] = auVar35._8_8_;
            *puVar19 = auVar35._0_8_;
            puVar19 = puVar19 + 2;
            pauVar25 = (undefined1 (*) [12])(pauVar25[1] + 4);
            pauVar17 = pauVar17 + 1;
          } while (uVar28 < uVar5);
          uVar5 = iVar24 + iVar9;
          if (uVar22 - uVar6 != iVar9) {
            uVar20 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
            fVar33 = *(float *)(param_3 + uVar20);
            if (*(float *)(param_3 + uVar20) <= *(float *)(param_1 + uVar20)) {
              fVar33 = *(float *)(param_1 + uVar20);
            }
            *(float *)(param_5 + uVar20) = fVar33;
            if ((int)(uVar5 + 1) < iVar7) {
              lVar18 = uVar20 + 4;
              fVar33 = *(float *)(param_3 + lVar18);
              if (*(float *)(param_3 + lVar18) <= *(float *)(param_1 + lVar18)) {
                fVar33 = *(float *)(param_1 + lVar18);
              }
              *(float *)(param_5 + lVar18) = fVar33;
              if ((int)(uVar5 + 2) < iVar7) {
                lVar18 = uVar20 + 8;
                fVar33 = *(float *)(param_3 + lVar18);
                if (*(float *)(param_3 + lVar18) <= *(float *)(param_1 + lVar18)) {
                  fVar33 = *(float *)(param_1 + lVar18);
                }
                *(float *)(param_5 + lVar18) = fVar33;
              }
            }
          }
        }
      }
      iVar30 = iVar30 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar30 != 0);
  }
  return;
}


==================================================================

### FUNC 00234324 (964 bytes) name=FUN_00234324

void FUN_00234324(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  undefined8 *puVar2;
  long lVar3;
  float *pfVar4;
  int iVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  float *pfVar15;
  undefined8 *puVar16;
  ulong uVar17;
  undefined8 *puVar18;
  float *pfVar19;
  int iVar20;
  float *pfVar21;
  uint uVar22;
  long lVar23;
  uint uVar24;
  int iVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  float fVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  float fVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  long lVar37;
  
  iVar25 = param_7[1];
  iVar8 = *param_7;
  if (iVar25 != 0) {
    uVar11 = iVar8 - 8U >> 3;
    iVar9 = (uVar11 + 1) * 8;
    if (iVar8 + -7 < 1) {
      iVar9 = 0;
    }
    uVar12 = (uint)((iVar8 + -4) - iVar9) >> 2;
    lVar26 = ((long)iVar9 + 0x10) * 4;
    lVar27 = lVar26 + -0x40;
    lVar37 = NEON_shl((long)iVar9 + 4 + (ulong)uVar12 * 4,2);
    iVar5 = iVar9 + 4 + uVar12 * 4;
    do {
      if (0 < iVar8 + -7) {
        puVar16 = (undefined8 *)(param_3 + 0x10);
        puVar18 = (undefined8 *)(param_5 + 0x10);
        puVar14 = (undefined8 *)(param_1 + 0x10);
        do {
          uVar31 = puVar14[1];
          uVar30 = *puVar14;
          uVar35 = puVar16[1];
          uVar34 = *puVar16;
          puVar2 = puVar14 + 4;
          uVar32 = puVar14[-2];
          puVar13 = puVar16 + -1;
          uVar36 = puVar16[-2];
          puVar16 = puVar16 + 4;
          puVar18[-1] = CONCAT44(ABS((float)((ulong)puVar14[-1] >> 0x20) -
                                     (float)((ulong)*puVar13 >> 0x20)),
                                 ABS((float)puVar14[-1] - (float)*puVar13));
          puVar18[-2] = CONCAT44(ABS((float)((ulong)uVar32 >> 0x20) - (float)((ulong)uVar36 >> 0x20)
                                    ),ABS((float)uVar32 - (float)uVar36));
          puVar18[1] = CONCAT44(ABS((float)((ulong)uVar31 >> 0x20) - (float)((ulong)uVar35 >> 0x20))
                                ,ABS((float)uVar31 - (float)uVar35));
          *puVar18 = CONCAT44(ABS((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar34 >> 0x20)),
                              ABS((float)uVar30 - (float)uVar34));
          puVar18 = puVar18 + 4;
          puVar14 = puVar2;
        } while (puVar2 != (undefined8 *)(param_1 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar8 + -3) {
        pfVar15 = (float *)(param_1 + lVar27);
        pfVar19 = (float *)(param_5 + lVar27);
        pfVar21 = (float *)(param_3 + lVar27);
        iVar10 = iVar5;
        if ((pfVar15 < (float *)(param_5 + lVar26) && pfVar19 < (float *)(param_1 + lVar26) ||
             pfVar21 < (float *)(param_5 + lVar26) && pfVar19 < (float *)(param_3 + lVar26)) ||
           (uVar12 + 1 < 3)) {
          do {
            pfVar4 = pfVar15 + 4;
            fVar33 = *pfVar21;
            fVar29 = *pfVar15;
            pfVar19[1] = ABS(pfVar15[1] - pfVar21[1]);
            *pfVar19 = ABS(fVar29 - fVar33);
            fVar29 = pfVar15[2];
            fVar33 = pfVar21[2];
            pfVar19[3] = ABS(pfVar15[3] - pfVar21[3]);
            pfVar19[2] = ABS(fVar29 - fVar33);
            pfVar15 = pfVar4;
            pfVar19 = pfVar19 + 4;
            pfVar21 = pfVar21 + 4;
          } while (pfVar4 != (float *)(param_1 + lVar37));
        }
        else {
          uVar22 = 0;
          do {
            uVar30 = *(undefined8 *)pfVar15;
            uVar22 = uVar22 + 1;
            uVar31 = *(undefined8 *)pfVar21;
            *(ulong *)(pfVar19 + 2) =
                 CONCAT44(ABS((float)((ulong)*(undefined8 *)(pfVar15 + 2) >> 0x20) -
                              (float)((ulong)*(undefined8 *)(pfVar21 + 2) >> 0x20)),
                          ABS((float)*(undefined8 *)(pfVar15 + 2) -
                              (float)*(undefined8 *)(pfVar21 + 2)));
            *(ulong *)pfVar19 =
                 CONCAT44(ABS((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar31 >> 0x20)),
                          ABS((float)uVar30 - (float)uVar31));
            pfVar15 = pfVar15 + 4;
            pfVar19 = pfVar19 + 4;
            pfVar21 = pfVar21 + 4;
          } while (uVar22 < uVar12 + 1);
        }
      }
      if (iVar10 < iVar8) {
        uVar22 = iVar8 - iVar10;
        lVar23 = ((long)iVar10 + 4) * 4;
        lVar28 = lVar23 + -0x10;
        uVar17 = param_5 + lVar28;
        uVar6 = param_1 + lVar28;
        if ((uVar17 < (ulong)(param_1 + lVar23) && uVar6 < (ulong)(param_5 + lVar23) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar23) &&
             uVar17 < (ulong)(param_3 + lVar23)) || (uVar22 < 8)) {
          lVar23 = 0;
          do {
            *(float *)(uVar17 + lVar23) =
                 ABS(*(float *)(uVar6 + lVar23) - *(float *)(param_3 + lVar28 + lVar23));
            lVar23 = lVar23 + 4;
          } while (lVar23 != ((ulong)(uint)((iVar8 + -1) - iVar10) + 1) * 4);
        }
        else {
          uVar7 = -((uint)(uVar6 >> 2) & 3) & 3;
          if (uVar22 < uVar7) {
            uVar7 = uVar22;
          }
          iVar20 = iVar10;
          if (uVar7 != 0) {
            lVar23 = (long)iVar10 * 4;
            iVar20 = iVar10 + 1;
            *(float *)(param_5 + lVar23) =
                 ABS(*(float *)(param_1 + lVar23) - *(float *)(param_3 + lVar23));
            if (uVar7 != 1) {
              lVar3 = lVar23 + 4;
              iVar20 = iVar10 + 2;
              *(float *)(param_5 + lVar3) =
                   ABS(*(float *)(param_1 + lVar3) - *(float *)(param_3 + lVar3));
              if (uVar7 == 3) {
                lVar23 = lVar23 + 8;
                iVar20 = iVar10 + 3;
                *(float *)(param_5 + lVar23) =
                     ABS(*(float *)(param_1 + lVar23) - *(float *)(param_3 + lVar23));
              }
            }
          }
          uVar24 = 0;
          lVar28 = lVar28 + (ulong)uVar7 * 4;
          uVar1 = ((uVar22 - uVar7) - 4 >> 2) + 1;
          iVar10 = uVar1 * 4;
          puVar16 = (undefined8 *)(param_5 + lVar28);
          puVar18 = (undefined8 *)(param_3 + lVar28);
          puVar14 = (undefined8 *)(param_1 + lVar28);
          do {
            uVar31 = *puVar18;
            uVar24 = uVar24 + 1;
            uVar30 = *puVar14;
            puVar16[1] = CONCAT44(ABS((float)((ulong)puVar14[1] >> 0x20) -
                                      (float)((ulong)puVar18[1] >> 0x20)),
                                  ABS((float)puVar14[1] - (float)puVar18[1]));
            *puVar16 = CONCAT44(ABS((float)((ulong)uVar30 >> 0x20) - (float)((ulong)uVar31 >> 0x20))
                                ,ABS((float)uVar30 - (float)uVar31));
            puVar16 = puVar16 + 2;
            puVar18 = puVar18 + 2;
            puVar14 = puVar14 + 2;
          } while (uVar24 < uVar1);
          uVar1 = iVar20 + iVar10;
          if (uVar22 - uVar7 != iVar10) {
            uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            *(float *)(param_5 + uVar17) =
                 ABS(*(float *)(param_1 + uVar17) - *(float *)(param_3 + uVar17));
            if ((int)(uVar1 + 1) < iVar8) {
              lVar28 = uVar17 + 4;
              *(float *)(param_5 + lVar28) =
                   ABS(*(float *)(param_1 + lVar28) - *(float *)(param_3 + lVar28));
              if ((int)(uVar1 + 2) < iVar8) {
                lVar28 = uVar17 + 8;
                *(float *)(param_5 + lVar28) =
                     ABS(*(float *)(param_1 + lVar28) - *(float *)(param_3 + lVar28));
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 002346e8 (964 bytes) name=FUN_002346e8

void FUN_002346e8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  int *piVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  int *piVar15;
  undefined8 *puVar16;
  ulong uVar17;
  undefined8 *puVar18;
  int *piVar19;
  int iVar20;
  undefined8 *puVar21;
  int *piVar22;
  uint uVar23;
  long lVar24;
  uint uVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  long lVar36;
  
  iVar26 = param_7[1];
  iVar7 = *param_7;
  if (iVar26 != 0) {
    uVar11 = iVar7 - 8U >> 3;
    iVar9 = (uVar11 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar9 = 0;
    }
    uVar12 = (uint)((iVar7 + -4) - iVar9) >> 2;
    lVar27 = ((long)iVar9 + 0x10) * 4;
    lVar28 = lVar27 + -0x40;
    lVar36 = NEON_shl((long)iVar9 + 4 + (ulong)uVar12 * 4,2);
    iVar4 = iVar9 + 4 + uVar12 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar16 = (undefined8 *)(param_1 + 0x10);
        puVar21 = (undefined8 *)(param_3 + 0x10);
        puVar18 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar31 = puVar16[1];
          uVar30 = *puVar16;
          puVar13 = puVar16 + -1;
          uVar32 = puVar16[-2];
          puVar16 = puVar16 + 4;
          puVar14 = puVar21 + -1;
          uVar35 = puVar21[-2];
          uVar34 = puVar21[1];
          uVar33 = *puVar21;
          puVar21 = puVar21 + 4;
          puVar18[-1] = CONCAT44((int)((ulong)*puVar13 >> 0x20) + (int)((ulong)*puVar14 >> 0x20),
                                 (int)*puVar13 + (int)*puVar14);
          puVar18[-2] = CONCAT44((int)((ulong)uVar32 >> 0x20) + (int)((ulong)uVar35 >> 0x20),
                                 (int)uVar32 + (int)uVar35);
          puVar18[1] = CONCAT44((int)((ulong)uVar31 >> 0x20) + (int)((ulong)uVar34 >> 0x20),
                                (int)uVar31 + (int)uVar34);
          *puVar18 = CONCAT44((int)((ulong)uVar30 >> 0x20) + (int)((ulong)uVar33 >> 0x20),
                              (int)uVar30 + (int)uVar33);
          puVar18 = puVar18 + 4;
        } while (puVar16 != (undefined8 *)(param_1 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar7 + -3) {
        piVar15 = (int *)(param_1 + lVar28);
        piVar19 = (int *)(param_5 + lVar28);
        piVar22 = (int *)(param_3 + lVar28);
        iVar10 = iVar4;
        if ((piVar15 < (int *)(param_5 + lVar27) && piVar19 < (int *)(param_1 + lVar27) ||
             piVar22 < (int *)(param_5 + lVar27) && piVar19 < (int *)(param_3 + lVar27)) ||
           (uVar12 + 1 < 4)) {
          do {
            piVar3 = piVar15 + 4;
            iVar20 = *piVar15;
            iVar8 = *piVar22;
            piVar19[1] = piVar15[1] + piVar22[1];
            *piVar19 = iVar20 + iVar8;
            iVar20 = piVar15[2];
            iVar8 = piVar22[2];
            piVar19[3] = piVar15[3] + piVar22[3];
            piVar19[2] = iVar20 + iVar8;
            piVar15 = piVar3;
            piVar19 = piVar19 + 4;
            piVar22 = piVar22 + 4;
          } while (piVar3 != (int *)(param_1 + lVar36));
        }
        else {
          uVar23 = 0;
          do {
            uVar30 = *(undefined8 *)piVar15;
            uVar23 = uVar23 + 1;
            uVar31 = *(undefined8 *)piVar22;
            *(ulong *)(piVar19 + 2) =
                 CONCAT44((int)((ulong)*(undefined8 *)(piVar15 + 2) >> 0x20) +
                          (int)((ulong)*(undefined8 *)(piVar22 + 2) >> 0x20),
                          (int)*(undefined8 *)(piVar15 + 2) + (int)*(undefined8 *)(piVar22 + 2));
            *(ulong *)piVar19 =
                 CONCAT44((int)((ulong)uVar30 >> 0x20) + (int)((ulong)uVar31 >> 0x20),
                          (int)uVar30 + (int)uVar31);
            piVar15 = piVar15 + 4;
            piVar19 = piVar19 + 4;
            piVar22 = piVar22 + 4;
          } while (uVar23 < uVar12 + 1);
        }
      }
      if (iVar10 < iVar7) {
        uVar23 = iVar7 - iVar10;
        lVar24 = ((long)iVar10 + 4) * 4;
        lVar29 = lVar24 + -0x10;
        uVar17 = param_5 + lVar29;
        uVar5 = param_1 + lVar29;
        if ((uVar17 < (ulong)(param_1 + lVar24) && uVar5 < (ulong)(param_5 + lVar24) ||
             (ulong)(param_3 + lVar29) < (ulong)(param_5 + lVar24) &&
             uVar17 < (ulong)(param_3 + lVar24)) || (uVar23 < 9)) {
          lVar24 = 0;
          do {
            *(int *)(uVar17 + lVar24) =
                 *(int *)(uVar5 + lVar24) + *(int *)(param_3 + lVar29 + lVar24);
            lVar24 = lVar24 + 4;
          } while (lVar24 != ((ulong)(uint)((iVar7 + -1) - iVar10) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          if (uVar23 < uVar6) {
            uVar6 = uVar23;
          }
          iVar20 = iVar10;
          if (uVar6 != 0) {
            lVar24 = (long)iVar10 * 4;
            iVar20 = iVar10 + 1;
            *(int *)(param_5 + lVar24) = *(int *)(param_1 + lVar24) + *(int *)(param_3 + lVar24);
            if (uVar6 != 1) {
              lVar2 = lVar24 + 4;
              iVar20 = iVar10 + 2;
              *(int *)(param_5 + lVar2) = *(int *)(param_1 + lVar2) + *(int *)(param_3 + lVar2);
              if (uVar6 == 3) {
                lVar24 = lVar24 + 8;
                iVar20 = iVar10 + 3;
                *(int *)(param_5 + lVar24) = *(int *)(param_1 + lVar24) + *(int *)(param_3 + lVar24)
                ;
              }
            }
          }
          uVar25 = 0;
          lVar29 = lVar29 + (ulong)uVar6 * 4;
          uVar1 = ((uVar23 - uVar6) - 4 >> 2) + 1;
          iVar10 = uVar1 * 4;
          puVar16 = (undefined8 *)(param_5 + lVar29);
          puVar21 = (undefined8 *)(param_3 + lVar29);
          puVar18 = (undefined8 *)(param_1 + lVar29);
          do {
            uVar30 = *puVar21;
            uVar25 = uVar25 + 1;
            uVar31 = *puVar18;
            puVar16[1] = CONCAT44((int)((ulong)puVar21[1] >> 0x20) +
                                  (int)((ulong)puVar18[1] >> 0x20),(int)puVar21[1] + (int)puVar18[1]
                                 );
            *puVar16 = CONCAT44((int)((ulong)uVar30 >> 0x20) + (int)((ulong)uVar31 >> 0x20),
                                (int)uVar30 + (int)uVar31);
            puVar16 = puVar16 + 2;
            puVar21 = puVar21 + 2;
            puVar18 = puVar18 + 2;
          } while (uVar25 < uVar1);
          uVar1 = iVar20 + iVar10;
          if (uVar23 - uVar6 != iVar10) {
            uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            *(int *)(param_5 + uVar17) = *(int *)(param_1 + uVar17) + *(int *)(param_3 + uVar17);
            if ((int)(uVar1 + 1) < iVar7) {
              lVar29 = uVar17 + 4;
              *(int *)(param_5 + lVar29) = *(int *)(param_1 + lVar29) + *(int *)(param_3 + lVar29);
              if ((int)(uVar1 + 2) < iVar7) {
                lVar29 = uVar17 + 8;
                *(int *)(param_5 + lVar29) = *(int *)(param_1 + lVar29) + *(int *)(param_3 + lVar29)
                ;
              }
            }
          }
        }
      }
      iVar26 = iVar26 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 00234aac (964 bytes) name=FUN_00234aac

void FUN_00234aac(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  int *piVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  int *piVar15;
  undefined8 *puVar16;
  ulong uVar17;
  undefined8 *puVar18;
  int *piVar19;
  int iVar20;
  undefined8 *puVar21;
  int *piVar22;
  uint uVar23;
  long lVar24;
  uint uVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  long lVar36;
  
  iVar26 = param_7[1];
  iVar7 = *param_7;
  if (iVar26 != 0) {
    uVar11 = iVar7 - 8U >> 3;
    iVar9 = (uVar11 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar9 = 0;
    }
    uVar12 = (uint)((iVar7 + -4) - iVar9) >> 2;
    lVar27 = ((long)iVar9 + 0x10) * 4;
    lVar28 = lVar27 + -0x40;
    lVar36 = NEON_shl((long)iVar9 + 4 + (ulong)uVar12 * 4,2);
    iVar4 = iVar9 + 4 + uVar12 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar16 = (undefined8 *)(param_1 + 0x10);
        puVar21 = (undefined8 *)(param_3 + 0x10);
        puVar18 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar31 = puVar16[1];
          uVar30 = *puVar16;
          puVar13 = puVar16 + -1;
          uVar32 = puVar16[-2];
          puVar16 = puVar16 + 4;
          puVar14 = puVar21 + -1;
          uVar35 = puVar21[-2];
          uVar34 = puVar21[1];
          uVar33 = *puVar21;
          puVar21 = puVar21 + 4;
          puVar18[-1] = CONCAT44((int)((ulong)*puVar13 >> 0x20) - (int)((ulong)*puVar14 >> 0x20),
                                 (int)*puVar13 - (int)*puVar14);
          puVar18[-2] = CONCAT44((int)((ulong)uVar32 >> 0x20) - (int)((ulong)uVar35 >> 0x20),
                                 (int)uVar32 - (int)uVar35);
          puVar18[1] = CONCAT44((int)((ulong)uVar31 >> 0x20) - (int)((ulong)uVar34 >> 0x20),
                                (int)uVar31 - (int)uVar34);
          *puVar18 = CONCAT44((int)((ulong)uVar30 >> 0x20) - (int)((ulong)uVar33 >> 0x20),
                              (int)uVar30 - (int)uVar33);
          puVar18 = puVar18 + 4;
        } while (puVar16 != (undefined8 *)(param_1 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar7 + -3) {
        piVar15 = (int *)(param_1 + lVar28);
        piVar19 = (int *)(param_5 + lVar28);
        piVar22 = (int *)(param_3 + lVar28);
        iVar10 = iVar4;
        if ((piVar15 < (int *)(param_5 + lVar27) && piVar19 < (int *)(param_1 + lVar27) ||
             piVar22 < (int *)(param_5 + lVar27) && piVar19 < (int *)(param_3 + lVar27)) ||
           (uVar12 + 1 < 4)) {
          do {
            piVar3 = piVar15 + 4;
            iVar20 = *piVar22;
            iVar8 = *piVar15;
            piVar19[1] = piVar15[1] - piVar22[1];
            *piVar19 = iVar8 - iVar20;
            iVar20 = piVar15[2];
            iVar8 = piVar22[2];
            piVar19[3] = piVar15[3] - piVar22[3];
            piVar19[2] = iVar20 - iVar8;
            piVar15 = piVar3;
            piVar19 = piVar19 + 4;
            piVar22 = piVar22 + 4;
          } while (piVar3 != (int *)(param_1 + lVar36));
        }
        else {
          uVar23 = 0;
          do {
            uVar30 = *(undefined8 *)piVar15;
            uVar23 = uVar23 + 1;
            uVar31 = *(undefined8 *)piVar22;
            *(ulong *)(piVar19 + 2) =
                 CONCAT44((int)((ulong)*(undefined8 *)(piVar15 + 2) >> 0x20) -
                          (int)((ulong)*(undefined8 *)(piVar22 + 2) >> 0x20),
                          (int)*(undefined8 *)(piVar15 + 2) - (int)*(undefined8 *)(piVar22 + 2));
            *(ulong *)piVar19 =
                 CONCAT44((int)((ulong)uVar30 >> 0x20) - (int)((ulong)uVar31 >> 0x20),
                          (int)uVar30 - (int)uVar31);
            piVar15 = piVar15 + 4;
            piVar19 = piVar19 + 4;
            piVar22 = piVar22 + 4;
          } while (uVar23 < uVar12 + 1);
        }
      }
      if (iVar10 < iVar7) {
        uVar23 = iVar7 - iVar10;
        lVar24 = ((long)iVar10 + 4) * 4;
        lVar29 = lVar24 + -0x10;
        uVar17 = param_5 + lVar29;
        uVar5 = param_1 + lVar29;
        if ((uVar17 < (ulong)(param_1 + lVar24) && uVar5 < (ulong)(param_5 + lVar24) ||
             (ulong)(param_3 + lVar29) < (ulong)(param_5 + lVar24) &&
             uVar17 < (ulong)(param_3 + lVar24)) || (uVar23 < 9)) {
          lVar24 = 0;
          do {
            *(int *)(uVar17 + lVar24) =
                 *(int *)(uVar5 + lVar24) - *(int *)(param_3 + lVar29 + lVar24);
            lVar24 = lVar24 + 4;
          } while (lVar24 != ((ulong)(uint)((iVar7 + -1) - iVar10) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          if (uVar23 < uVar6) {
            uVar6 = uVar23;
          }
          iVar20 = iVar10;
          if (uVar6 != 0) {
            lVar24 = (long)iVar10 * 4;
            iVar20 = iVar10 + 1;
            *(int *)(param_5 + lVar24) = *(int *)(param_1 + lVar24) - *(int *)(param_3 + lVar24);
            if (uVar6 != 1) {
              lVar2 = lVar24 + 4;
              iVar20 = iVar10 + 2;
              *(int *)(param_5 + lVar2) = *(int *)(param_1 + lVar2) - *(int *)(param_3 + lVar2);
              if (uVar6 == 3) {
                lVar24 = lVar24 + 8;
                iVar20 = iVar10 + 3;
                *(int *)(param_5 + lVar24) = *(int *)(param_1 + lVar24) - *(int *)(param_3 + lVar24)
                ;
              }
            }
          }
          uVar25 = 0;
          lVar29 = lVar29 + (ulong)uVar6 * 4;
          uVar1 = ((uVar23 - uVar6) - 4 >> 2) + 1;
          iVar10 = uVar1 * 4;
          puVar16 = (undefined8 *)(param_5 + lVar29);
          puVar21 = (undefined8 *)(param_3 + lVar29);
          puVar18 = (undefined8 *)(param_1 + lVar29);
          do {
            uVar31 = *puVar21;
            uVar25 = uVar25 + 1;
            uVar30 = *puVar18;
            puVar16[1] = CONCAT44((int)((ulong)puVar18[1] >> 0x20) -
                                  (int)((ulong)puVar21[1] >> 0x20),(int)puVar18[1] - (int)puVar21[1]
                                 );
            *puVar16 = CONCAT44((int)((ulong)uVar30 >> 0x20) - (int)((ulong)uVar31 >> 0x20),
                                (int)uVar30 - (int)uVar31);
            puVar16 = puVar16 + 2;
            puVar21 = puVar21 + 2;
            puVar18 = puVar18 + 2;
          } while (uVar25 < uVar1);
          uVar1 = iVar20 + iVar10;
          if (uVar23 - uVar6 != iVar10) {
            uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            *(int *)(param_5 + uVar17) = *(int *)(param_1 + uVar17) - *(int *)(param_3 + uVar17);
            if ((int)(uVar1 + 1) < iVar7) {
              lVar29 = uVar17 + 4;
              *(int *)(param_5 + lVar29) = *(int *)(param_1 + lVar29) - *(int *)(param_3 + lVar29);
              if ((int)(uVar1 + 2) < iVar7) {
                lVar29 = uVar17 + 8;
                *(int *)(param_5 + lVar29) = *(int *)(param_1 + lVar29) - *(int *)(param_3 + lVar29)
                ;
              }
            }
          }
        }
      }
      iVar26 = iVar26 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 00234e70 (1008 bytes) name=FUN_00234e70

void FUN_00234e70(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined1 auVar13 [16];
  undefined1 (*pauVar14) [16];
  undefined8 *puVar15;
  ulong uVar16;
  int iVar17;
  int *piVar18;
  undefined1 (*pauVar19) [16];
  uint uVar20;
  long lVar21;
  uint uVar22;
  undefined1 (*pauVar23) [16];
  undefined1 (*pauVar24) [16];
  int iVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  long lVar31;
  
  iVar25 = param_7[1];
  iVar6 = *param_7;
  if (iVar25 != 0) {
    uVar11 = iVar6 - 8U >> 3;
    iVar9 = (uVar11 + 1) * 8;
    if (iVar6 + -7 < 1) {
      iVar9 = 0;
    }
    uVar12 = (uint)((iVar6 + -4) - iVar9) >> 2;
    lVar26 = ((long)iVar9 + 0x10) * 4;
    lVar27 = lVar26 + -0x40;
    lVar31 = NEON_shl((long)iVar9 + 4 + (ulong)uVar12 * 4,2);
    iVar3 = iVar9 + 4 + uVar12 * 4;
    do {
      if (0 < iVar6 + -7) {
        pauVar14 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar19 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar15 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar24 = pauVar14 + -1;
          pauVar23 = pauVar19 + -1;
          auVar29 = *pauVar14;
          pauVar14 = pauVar14 + 2;
          auVar13 = *pauVar19;
          pauVar19 = pauVar19 + 2;
          auVar30 = NEON_smax(*pauVar24,*pauVar23,4);
          auVar29 = NEON_smax(auVar29,auVar13,4);
          puVar15[-1] = auVar30._8_8_;
          puVar15[-2] = auVar30._0_8_;
          puVar15[1] = auVar29._8_8_;
          *puVar15 = auVar29._0_8_;
          puVar15 = puVar15 + 4;
        } while (pauVar14 != (undefined1 (*) [16])(param_1 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar6 + -3) {
        pauVar14 = (undefined1 (*) [16])(param_1 + lVar27);
        piVar18 = (int *)(param_5 + lVar27);
        pauVar19 = (undefined1 (*) [16])(param_3 + lVar27);
        iVar10 = iVar3;
        if ((pauVar14 < (undefined1 (*) [16])(param_5 + lVar26) &&
             piVar18 < (int *)(param_1 + lVar26) ||
             pauVar19 < (undefined1 (*) [16])(param_5 + lVar26) &&
             piVar18 < (int *)(param_3 + lVar26)) || (uVar12 + 1 < 4)) {
          do {
            pauVar23 = pauVar14 + 1;
            iVar7 = *(int *)*pauVar14;
            iVar8 = *(int *)*pauVar19;
            iVar17 = *(int *)(*pauVar19 + 4);
            if (*(int *)(*pauVar19 + 4) < *(int *)(*pauVar14 + 4)) {
              iVar17 = *(int *)(*pauVar14 + 4);
            }
            piVar18[1] = iVar17;
            if (iVar8 < iVar7) {
              iVar8 = iVar7;
            }
            *piVar18 = iVar8;
            iVar7 = *(int *)(*pauVar14 + 8);
            iVar8 = *(int *)(*pauVar19 + 8);
            iVar17 = *(int *)(*pauVar19 + 0xc);
            if (*(int *)(*pauVar19 + 0xc) < *(int *)(*pauVar14 + 0xc)) {
              iVar17 = *(int *)(*pauVar14 + 0xc);
            }
            piVar18[3] = iVar17;
            if (iVar8 < iVar7) {
              iVar8 = iVar7;
            }
            piVar18[2] = iVar8;
            pauVar14 = pauVar23;
            piVar18 = piVar18 + 4;
            pauVar19 = pauVar19 + 1;
          } while (pauVar23 != (undefined1 (*) [16])(param_1 + lVar31));
        }
        else {
          uVar20 = 0;
          do {
            uVar20 = uVar20 + 1;
            auVar29 = NEON_smax(*pauVar19,*pauVar14,4);
            *(long *)(piVar18 + 2) = auVar29._8_8_;
            *(long *)piVar18 = auVar29._0_8_;
            pauVar14 = pauVar14 + 1;
            piVar18 = piVar18 + 4;
            pauVar19 = pauVar19 + 1;
          } while (uVar20 < uVar12 + 1);
        }
      }
      if (iVar10 < iVar6) {
        uVar20 = iVar6 - iVar10;
        lVar21 = ((long)iVar10 + 4) * 4;
        lVar28 = lVar21 + -0x10;
        uVar16 = param_5 + lVar28;
        uVar4 = param_1 + lVar28;
        if ((uVar16 < (ulong)(param_1 + lVar21) && uVar4 < (ulong)(param_5 + lVar21) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar21) &&
             uVar16 < (ulong)(param_3 + lVar21)) || (uVar20 < 9)) {
          lVar21 = 0;
          do {
            iVar17 = *(int *)(param_3 + lVar28 + lVar21);
            if (iVar17 < *(int *)(uVar4 + lVar21)) {
              iVar17 = *(int *)(uVar4 + lVar21);
            }
            *(int *)(uVar16 + lVar21) = iVar17;
            lVar21 = lVar21 + 4;
          } while (lVar21 != ((ulong)(uint)((iVar6 + -1) - iVar10) + 1) * 4);
        }
        else {
          uVar5 = -((uint)(uVar4 >> 2) & 3) & 3;
          if (uVar20 < uVar5) {
            uVar5 = uVar20;
          }
          iVar17 = iVar10;
          if (uVar5 != 0) {
            lVar21 = (long)iVar10 * 4;
            iVar17 = iVar10 + 1;
            iVar8 = *(int *)(param_3 + lVar21);
            if (*(int *)(param_3 + lVar21) < *(int *)(param_1 + lVar21)) {
              iVar8 = *(int *)(param_1 + lVar21);
            }
            *(int *)(param_5 + lVar21) = iVar8;
            if (uVar5 != 1) {
              lVar2 = lVar21 + 4;
              iVar17 = iVar10 + 2;
              iVar8 = *(int *)(param_3 + lVar2);
              if (*(int *)(param_3 + lVar2) < *(int *)(param_1 + lVar2)) {
                iVar8 = *(int *)(param_1 + lVar2);
              }
              *(int *)(param_5 + lVar2) = iVar8;
              if (uVar5 == 3) {
                lVar21 = lVar21 + 8;
                iVar17 = iVar10 + 3;
                iVar10 = *(int *)(param_3 + lVar21);
                if (*(int *)(param_3 + lVar21) < *(int *)(param_1 + lVar21)) {
                  iVar10 = *(int *)(param_1 + lVar21);
                }
                *(int *)(param_5 + lVar21) = iVar10;
              }
            }
          }
          uVar22 = 0;
          lVar28 = lVar28 + (ulong)uVar5 * 4;
          uVar1 = ((uVar20 - uVar5) - 4 >> 2) + 1;
          iVar10 = uVar1 * 4;
          puVar15 = (undefined8 *)(param_5 + lVar28);
          pauVar14 = (undefined1 (*) [16])(param_3 + lVar28);
          pauVar19 = (undefined1 (*) [16])(param_1 + lVar28);
          do {
            uVar22 = uVar22 + 1;
            auVar29 = NEON_smax(*pauVar14,*pauVar19,4);
            puVar15[1] = auVar29._8_8_;
            *puVar15 = auVar29._0_8_;
            puVar15 = puVar15 + 2;
            pauVar14 = pauVar14 + 1;
            pauVar19 = pauVar19 + 1;
          } while (uVar22 < uVar1);
          uVar1 = iVar17 + iVar10;
          if (uVar20 - uVar5 != iVar10) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            iVar10 = *(int *)(param_3 + uVar16);
            if (*(int *)(param_3 + uVar16) < *(int *)(param_1 + uVar16)) {
              iVar10 = *(int *)(param_1 + uVar16);
            }
            *(int *)(param_5 + uVar16) = iVar10;
            if ((int)(uVar1 + 1) < iVar6) {
              lVar28 = uVar16 + 4;
              iVar10 = *(int *)(param_3 + lVar28);
              if (*(int *)(param_3 + lVar28) < *(int *)(param_1 + lVar28)) {
                iVar10 = *(int *)(param_1 + lVar28);
              }
              *(int *)(param_5 + lVar28) = iVar10;
              if ((int)(uVar1 + 2) < iVar6) {
                lVar28 = uVar16 + 8;
                iVar10 = *(int *)(param_3 + lVar28);
                if (*(int *)(param_3 + lVar28) < *(int *)(param_1 + lVar28)) {
                  iVar10 = *(int *)(param_1 + lVar28);
                }
                *(int *)(param_5 + lVar28) = iVar10;
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 00235260 (1096 bytes) name=FUN_00235260

void FUN_00235260(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  undefined8 *puVar1;
  long lVar2;
  int *piVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  int *piVar14;
  undefined8 *puVar15;
  ulong uVar16;
  undefined8 *puVar17;
  int *piVar18;
  int *piVar19;
  uint uVar20;
  long lVar21;
  uint uVar22;
  undefined8 *puVar23;
  int iVar24;
  long lVar25;
  long lVar26;
  long lVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  undefined8 uVar31;
  int iVar32;
  int iVar33;
  undefined8 uVar34;
  int iVar35;
  int iVar36;
  int iVar37;
  int iVar38;
  int iVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  long lVar42;
  
  iVar24 = param_7[1];
  iVar7 = *param_7;
  if (iVar24 != 0) {
    uVar9 = iVar7 - 8U >> 3;
    iVar8 = (uVar9 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar10 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar25 = ((long)iVar8 + 0x10) * 4;
    lVar26 = lVar25 + -0x40;
    lVar42 = NEON_shl((long)iVar8 + 4 + (ulong)uVar10 * 4,2);
    iVar4 = iVar8 + 4 + uVar10 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar15 = (undefined8 *)(param_3 + 0x10);
        puVar17 = (undefined8 *)(param_5 + 0x10);
        puVar13 = (undefined8 *)(param_1 + 0x10);
        do {
          puVar23 = puVar15 + -2;
          uVar34 = puVar13[1];
          uVar31 = *puVar13;
          uVar41 = puVar15[1];
          uVar40 = *puVar15;
          puVar1 = puVar13 + 4;
          puVar12 = puVar15 + -1;
          puVar15 = puVar15 + 4;
          iVar28 = (int)puVar13[-2];
          iVar33 = (int)*puVar23;
          iVar29 = (int)((ulong)puVar13[-2] >> 0x20);
          iVar35 = (int)((ulong)*puVar23 >> 0x20);
          iVar30 = (int)puVar13[-1];
          iVar36 = (int)*puVar12;
          iVar32 = (int)((ulong)puVar13[-1] >> 0x20);
          iVar37 = (int)((ulong)*puVar12 >> 0x20);
          puVar17[-1] = CONCAT44((iVar32 - iVar37) + (iVar37 - iVar32) * 2 * (uint)(iVar32 < iVar37)
                                 ,(iVar30 - iVar36) +
                                  (int)(CONCAT44(iVar37 - iVar32,iVar36 - iVar30) >> 0x1e) * 2 *
                                  (uint)(iVar30 < iVar36));
          puVar17[-2] = CONCAT44((iVar29 - iVar35) + (iVar35 - iVar29) * 2 * (uint)(iVar29 < iVar35)
                                 ,(iVar28 - iVar33) +
                                  (iVar33 - iVar28) * 2 * (uint)(iVar28 < iVar33));
          iVar28 = (int)uVar31;
          iVar33 = (int)uVar40;
          iVar29 = (int)((ulong)uVar31 >> 0x20);
          iVar35 = (int)((ulong)uVar40 >> 0x20);
          iVar30 = (int)uVar34;
          iVar36 = (int)uVar41;
          iVar32 = (int)((ulong)uVar34 >> 0x20);
          iVar37 = (int)((ulong)uVar41 >> 0x20);
          puVar17[1] = CONCAT44((iVar32 - iVar37) + (iVar37 - iVar32) * 2 * (uint)(iVar32 < iVar37),
                                (iVar30 - iVar36) +
                                (int)(CONCAT44(iVar37 - iVar32,iVar36 - iVar30) >> 0x1e) * 2 *
                                (uint)(iVar30 < iVar36));
          *puVar17 = CONCAT44((iVar29 - iVar35) + (iVar35 - iVar29) * 2 * (uint)(iVar29 < iVar35),
                              (iVar28 - iVar33) + (iVar33 - iVar28) * 2 * (uint)(iVar28 < iVar33));
          puVar17 = puVar17 + 4;
          puVar13 = puVar1;
        } while (puVar1 != (undefined8 *)(param_1 + (ulong)uVar9 * 0x20 + 0x30));
      }
      iVar28 = iVar8;
      if (iVar8 < iVar7 + -3) {
        piVar14 = (int *)(param_1 + lVar26);
        piVar18 = (int *)(param_5 + lVar26);
        piVar19 = (int *)(param_3 + lVar26);
        iVar28 = iVar4;
        if ((piVar14 < (int *)(param_5 + lVar25) && piVar18 < (int *)(param_1 + lVar25) ||
             piVar19 < (int *)(param_5 + lVar25) && piVar18 < (int *)(param_3 + lVar25)) ||
           (uVar10 + 1 < 3)) {
          do {
            piVar3 = piVar14 + 4;
            iVar29 = *piVar19;
            iVar30 = *piVar14;
            uVar20 = piVar14[1] - piVar19[1] >> 0x1f;
            piVar18[1] = (piVar14[1] - piVar19[1] ^ uVar20) - uVar20;
            uVar20 = iVar30 - iVar29 >> 0x1f;
            *piVar18 = (iVar30 - iVar29 ^ uVar20) - uVar20;
            iVar29 = piVar19[2];
            iVar30 = piVar14[2];
            uVar20 = piVar14[3] - piVar19[3] >> 0x1f;
            piVar18[3] = (piVar14[3] - piVar19[3] ^ uVar20) - uVar20;
            uVar20 = iVar30 - iVar29 >> 0x1f;
            piVar18[2] = (iVar30 - iVar29 ^ uVar20) - uVar20;
            piVar14 = piVar3;
            piVar18 = piVar18 + 4;
            piVar19 = piVar19 + 4;
          } while (piVar3 != (int *)(param_1 + lVar42));
        }
        else {
          uVar20 = 0;
          do {
            uVar20 = uVar20 + 1;
            iVar29 = (int)*(undefined8 *)piVar14;
            iVar35 = (int)*(undefined8 *)piVar19;
            iVar30 = (int)((ulong)*(undefined8 *)piVar14 >> 0x20);
            iVar36 = (int)((ulong)*(undefined8 *)piVar19 >> 0x20);
            iVar32 = (int)*(undefined8 *)(piVar14 + 2);
            iVar37 = (int)*(undefined8 *)(piVar19 + 2);
            iVar33 = (int)((ulong)*(undefined8 *)(piVar14 + 2) >> 0x20);
            iVar38 = (int)((ulong)*(undefined8 *)(piVar19 + 2) >> 0x20);
            *(ulong *)(piVar18 + 2) =
                 CONCAT44((iVar33 - iVar38) + (iVar38 - iVar33) * 2 * (uint)(iVar33 < iVar38),
                          (iVar32 - iVar37) +
                          (int)(CONCAT44(iVar38 - iVar33,iVar37 - iVar32) >> 0x1e) * 2 *
                          (uint)(iVar32 < iVar37));
            *(ulong *)piVar18 =
                 CONCAT44((iVar30 - iVar36) + (iVar36 - iVar30) * 2 * (uint)(iVar30 < iVar36),
                          (iVar29 - iVar35) + (iVar35 - iVar29) * 2 * (uint)(iVar29 < iVar35));
            piVar14 = piVar14 + 4;
            piVar18 = piVar18 + 4;
            piVar19 = piVar19 + 4;
          } while (uVar20 < uVar10 + 1);
        }
      }
      if (iVar28 < iVar7) {
        uVar20 = iVar7 - iVar28;
        lVar21 = ((long)iVar28 + 4) * 4;
        lVar27 = lVar21 + -0x10;
        uVar16 = param_5 + lVar27;
        uVar5 = param_1 + lVar27;
        if ((uVar16 < (ulong)(param_1 + lVar21) && uVar5 < (ulong)(param_5 + lVar21) ||
             (ulong)(param_3 + lVar27) < (ulong)(param_5 + lVar21) &&
             uVar16 < (ulong)(param_3 + lVar21)) || (uVar20 < 8)) {
          lVar21 = 0;
          do {
            uVar20 = *(int *)(uVar5 + lVar21) - *(int *)(param_3 + lVar27 + lVar21);
            uVar6 = (int)uVar20 >> 0x1f;
            *(uint *)(uVar16 + lVar21) = (uVar20 ^ uVar6) - uVar6;
            lVar21 = lVar21 + 4;
          } while (lVar21 != ((ulong)(uint)((iVar7 + -1) - iVar28) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          if (uVar20 < uVar6) {
            uVar6 = uVar20;
          }
          iVar29 = iVar28;
          if (uVar6 != 0) {
            lVar21 = (long)iVar28 * 4;
            iVar29 = iVar28 + 1;
            uVar11 = *(int *)(param_1 + lVar21) - *(int *)(param_3 + lVar21);
            uVar22 = (int)uVar11 >> 0x1f;
            *(uint *)(param_5 + lVar21) = (uVar11 ^ uVar22) - uVar22;
            if (uVar6 != 1) {
              lVar2 = lVar21 + 4;
              iVar29 = iVar28 + 2;
              uVar11 = *(int *)(param_1 + lVar2) - *(int *)(param_3 + lVar2);
              uVar22 = (int)uVar11 >> 0x1f;
              *(uint *)(param_5 + lVar2) = (uVar11 ^ uVar22) - uVar22;
              if (uVar6 == 3) {
                lVar21 = lVar21 + 8;
                iVar29 = iVar28 + 3;
                uVar11 = *(int *)(param_1 + lVar21) - *(int *)(param_3 + lVar21);
                uVar22 = (int)uVar11 >> 0x1f;
                *(uint *)(param_5 + lVar21) = (uVar11 ^ uVar22) - uVar22;
              }
            }
          }
          uVar22 = 0;
          lVar27 = lVar27 + (ulong)uVar6 * 4;
          uVar11 = ((uVar20 - uVar6) - 4 >> 2) + 1;
          iVar28 = uVar11 * 4;
          puVar15 = (undefined8 *)(param_5 + lVar27);
          puVar17 = (undefined8 *)(param_3 + lVar27);
          puVar13 = (undefined8 *)(param_1 + lVar27);
          do {
            uVar22 = uVar22 + 1;
            iVar30 = (int)*puVar13;
            iVar36 = (int)*puVar17;
            iVar32 = (int)((ulong)*puVar13 >> 0x20);
            iVar37 = (int)((ulong)*puVar17 >> 0x20);
            iVar33 = (int)puVar13[1];
            iVar38 = (int)puVar17[1];
            iVar35 = (int)((ulong)puVar13[1] >> 0x20);
            iVar39 = (int)((ulong)puVar17[1] >> 0x20);
            puVar15[1] = CONCAT44((iVar35 - iVar39) +
                                  (iVar39 - iVar35) * 2 * (uint)(iVar35 < iVar39),
                                  (iVar33 - iVar38) +
                                  (int)(CONCAT44(iVar39 - iVar35,iVar38 - iVar33) >> 0x1e) * 2 *
                                  (uint)(iVar33 < iVar38));
            *puVar15 = CONCAT44((iVar32 - iVar37) + (iVar37 - iVar32) * 2 * (uint)(iVar32 < iVar37),
                                (iVar30 - iVar36) + (iVar36 - iVar30) * 2 * (uint)(iVar30 < iVar36))
            ;
            puVar15 = puVar15 + 2;
            puVar17 = puVar17 + 2;
            puVar13 = puVar13 + 2;
          } while (uVar22 < uVar11);
          uVar11 = iVar29 + iVar28;
          if (uVar20 - uVar6 != iVar28) {
            uVar16 = -(ulong)(uVar11 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar11 << 2;
            uVar20 = *(int *)(param_1 + uVar16) - *(int *)(param_3 + uVar16);
            uVar6 = (int)uVar20 >> 0x1f;
            *(uint *)(param_5 + uVar16) = (uVar20 ^ uVar6) - uVar6;
            if ((int)(uVar11 + 1) < iVar7) {
              lVar27 = uVar16 + 4;
              uVar20 = *(int *)(param_1 + lVar27) - *(int *)(param_3 + lVar27);
              uVar6 = (int)uVar20 >> 0x1f;
              *(uint *)(param_5 + lVar27) = (uVar20 ^ uVar6) - uVar6;
              if ((int)(uVar11 + 2) < iVar7) {
                lVar27 = uVar16 + 8;
                uVar20 = *(int *)(param_1 + lVar27) - *(int *)(param_3 + lVar27);
                uVar6 = (int)uVar20 >> 0x1f;
                *(uint *)(param_5 + lVar27) = (uVar20 ^ uVar6) - uVar6;
              }
            }
          }
        }
      }
      iVar24 = iVar24 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 002356a8 (1696 bytes) name=FUN_002356a8

void FUN_002356a8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  ushort *puVar4;
  uint uVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  ushort uVar9;
  ushort uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined1 auVar18 [16];
  unkbyte10 Var19;
  ushort uVar20;
  undefined1 (*pauVar21) [16];
  ushort *puVar22;
  ulong uVar23;
  undefined8 *puVar24;
  ulong uVar25;
  int iVar26;
  short *psVar27;
  unkbyte10 *pVar28;
  ushort *puVar29;
  uint uVar30;
  undefined1 (*pauVar31) [16];
  long lVar32;
  undefined1 (*pauVar33) [16];
  undefined8 *puVar34;
  int iVar35;
  long lVar36;
  long lVar37;
  uint uVar38;
  long lVar39;
  undefined4 uVar40;
  undefined4 uVar41;
  undefined4 uVar42;
  undefined4 uVar43;
  undefined4 uVar44;
  undefined4 uVar46;
  undefined4 uVar47;
  undefined1 auVar45 [16];
  undefined4 uVar48;
  long lVar49;
  
  iVar35 = param_7[1];
  iVar8 = *param_7;
  if (iVar35 != 0) {
    uVar13 = iVar8 - 0x10;
    uVar11 = ((uVar13 >> 4) + 1) * 0x10;
    if ((int)uVar13 < 0) {
      uVar11 = 0;
    }
    uVar14 = (iVar8 + -4) - uVar11;
    lVar36 = ((long)(int)uVar11 + 0x20) * 2;
    lVar37 = lVar36 + -0x40;
    uVar12 = uVar14 >> 2;
    uVar1 = (uVar12 - 1 >> 1) + 1;
    uVar5 = uVar11 + 4 + uVar12 * 4;
    lVar49 = NEON_shl((long)(int)uVar11 + 4 + (ulong)uVar12 * 4,1);
    do {
      if (-1 < (int)uVar13) {
        pauVar21 = (undefined1 (*) [16])(param_1 + 0x10);
        pVar28 = (unkbyte10 *)(param_3 + 0x10);
        puVar24 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar33 = pauVar21 + -1;
          pauVar31 = (undefined1 (*) [16])(pVar28 + -1);
          auVar18 = *pauVar21;
          uVar16 = *(undefined8 *)((long)pVar28 + 8);
          Var19 = *pVar28;
          pauVar21 = pauVar21 + 2;
          pVar28 = pVar28 + 2;
          auVar45 = NEON_uabd(*pauVar33,*pauVar31,2);
          puVar24[-1] = auVar45._8_8_;
          puVar24[-2] = auVar45._0_8_;
          auVar45._10_2_ = (short)((ulong)uVar16 >> 0x10);
          auVar45._0_10_ = Var19;
          auVar45._12_2_ = (short)((ulong)uVar16 >> 0x20);
          auVar45._14_2_ = (short)((ulong)uVar16 >> 0x30);
          auVar45 = NEON_uabd(auVar18,auVar45,2);
          puVar24[1] = auVar45._8_8_;
          *puVar24 = auVar45._0_8_;
          puVar24 = puVar24 + 4;
        } while (pauVar21 != (undefined1 (*) [16])(param_1 + (ulong)(uVar13 >> 4) * 0x20 + 0x30));
      }
      uVar2 = uVar11;
      if ((int)uVar11 < iVar8 + -3) {
        puVar22 = (ushort *)(param_1 + lVar37);
        psVar27 = (short *)(param_5 + lVar37);
        puVar29 = (ushort *)(param_3 + lVar37);
        uVar2 = uVar5;
        if ((puVar22 < (ushort *)(param_5 + lVar36) && psVar27 < (short *)(param_1 + lVar36) ||
             puVar29 < (ushort *)(param_5 + lVar36) && psVar27 < (short *)(param_3 + lVar36)) ||
           (uVar12 + 1 < 3)) {
          do {
            puVar4 = puVar22 + 4;
            uVar9 = *puVar29;
            uVar10 = *puVar22;
            uVar20 = (ushort)((int)((uint)puVar22[1] - (uint)puVar29[1]) >> 0x1f);
            psVar27[1] = ((ushort)((uint)puVar22[1] - (uint)puVar29[1]) ^ uVar20) - uVar20;
            uVar20 = (ushort)((int)((uint)uVar10 - (uint)uVar9) >> 0x1f);
            *psVar27 = ((ushort)((uint)uVar10 - (uint)uVar9) ^ uVar20) - uVar20;
            uVar9 = puVar29[2];
            uVar10 = puVar22[2];
            uVar20 = (ushort)((int)((uint)puVar22[3] - (uint)puVar29[3]) >> 0x1f);
            psVar27[3] = ((ushort)((uint)puVar22[3] - (uint)puVar29[3]) ^ uVar20) - uVar20;
            uVar20 = (ushort)((int)((uint)uVar10 - (uint)uVar9) >> 0x1f);
            psVar27[2] = ((ushort)((uint)uVar10 - (uint)uVar9) ^ uVar20) - uVar20;
            puVar22 = puVar4;
            psVar27 = psVar27 + 4;
            puVar29 = puVar29 + 4;
          } while (puVar4 != (ushort *)(param_1 + lVar49));
        }
        else {
          uVar30 = uVar11;
          if (3 < uVar14) {
            uVar30 = 0;
            do {
              uVar17 = *(undefined8 *)(puVar29 + 4);
              uVar16 = *(undefined8 *)puVar29;
              uVar30 = uVar30 + 1;
              uVar44 = MP_INT_ABS((uint)*puVar22 - (uint)(ushort)uVar16);
              uVar46 = MP_INT_ABS((uint)puVar22[1] - (uint)(ushort)((ulong)uVar16 >> 0x10));
              uVar47 = MP_INT_ABS((uint)puVar22[2] - (uint)(ushort)((ulong)uVar16 >> 0x20));
              uVar48 = MP_INT_ABS((uint)puVar22[3] - (uint)(ushort)((ulong)uVar16 >> 0x30));
              uVar40 = MP_INT_ABS((uint)puVar22[4] - (uint)(ushort)uVar17);
              uVar41 = MP_INT_ABS((uint)puVar22[5] - (uint)(ushort)((ulong)uVar17 >> 0x10));
              uVar42 = MP_INT_ABS((uint)puVar22[6] - (uint)(ushort)((ulong)uVar17 >> 0x20));
              uVar43 = MP_INT_ABS((uint)puVar22[7] - (uint)(ushort)((ulong)uVar17 >> 0x30));
              *(ulong *)(psVar27 + 4) =
                   CONCAT26((short)uVar43,
                            CONCAT24((short)uVar42,CONCAT22((short)uVar41,(short)uVar40)));
              *(ulong *)psVar27 =
                   CONCAT26((short)uVar48,
                            CONCAT24((short)uVar47,CONCAT22((short)uVar46,(short)uVar44)));
              puVar22 = puVar22 + 8;
              psVar27 = psVar27 + 8;
              puVar29 = puVar29 + 8;
            } while (uVar30 < uVar1);
            uVar30 = uVar11 + uVar1 * 8;
            if (uVar12 + 1 == uVar1 * 2) goto LAB_002358e4;
          }
          uVar23 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar30 << 1;
          lVar39 = uVar23 + 2;
          lVar32 = uVar23 + 4;
          lVar3 = uVar23 + 6;
          iVar15 = (uint)*(ushort *)(param_1 + uVar23) - (uint)*(ushort *)(param_3 + uVar23);
          iVar26 = (uint)*(ushort *)(param_1 + lVar39) - (uint)*(ushort *)(param_3 + lVar39);
          uVar9 = (ushort)(iVar15 >> 0x1f);
          *(ushort *)(param_5 + uVar23) = ((ushort)iVar15 ^ uVar9) - uVar9;
          uVar9 = (ushort)(iVar26 >> 0x1f);
          *(ushort *)(param_5 + lVar39) = ((ushort)iVar26 ^ uVar9) - uVar9;
          iVar15 = (uint)*(ushort *)(param_1 + lVar32) - (uint)*(ushort *)(param_3 + lVar32);
          iVar26 = (uint)*(ushort *)(param_1 + lVar3) - (uint)*(ushort *)(param_3 + lVar3);
          uVar9 = (ushort)(iVar15 >> 0x1f);
          *(ushort *)(param_5 + lVar32) = ((ushort)iVar15 ^ uVar9) - uVar9;
          uVar9 = (ushort)(iVar26 >> 0x1f);
          *(ushort *)(param_5 + lVar3) = ((ushort)iVar26 ^ uVar9) - uVar9;
        }
      }
LAB_002358e4:
      uVar23 = (ulong)uVar2;
      if ((int)uVar2 < iVar8) {
        uVar30 = iVar8 - uVar2;
        lVar32 = ((long)(int)uVar2 + 8) * 2;
        lVar39 = lVar32 + -0x10;
        uVar25 = param_5 + lVar39;
        uVar6 = param_1 + lVar39;
        if ((uVar25 < (ulong)(param_1 + lVar32) && uVar6 < (ulong)(param_5 + lVar32) ||
             (ulong)(param_3 + lVar39) < (ulong)(param_5 + lVar32) &&
             uVar25 < (ulong)(param_3 + lVar32)) || (uVar30 < 10)) {
          lVar32 = 0;
          do {
            iVar15 = (uint)*(ushort *)(uVar6 + lVar32) -
                     (uint)*(ushort *)(param_3 + lVar39 + lVar32);
            uVar9 = (ushort)(iVar15 >> 0x1f);
            *(ushort *)(uVar25 + lVar32) = ((ushort)iVar15 ^ uVar9) - uVar9;
            lVar32 = lVar32 + 2;
          } while (lVar32 != ((ulong)((iVar8 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar7 = -((uint)(uVar6 >> 1) & 7) & 7;
          if (uVar30 < uVar7) {
            uVar7 = uVar30;
          }
          if (uVar7 != 0) {
            lVar32 = (long)(int)uVar2 * 2;
            uVar38 = uVar2 + 1;
            iVar15 = (uint)*(ushort *)(param_1 + lVar32) - (uint)*(ushort *)(param_3 + lVar32);
            uVar9 = (ushort)(iVar15 >> 0x1f);
            *(ushort *)(param_5 + lVar32) = ((ushort)iVar15 ^ uVar9) - uVar9;
            if (uVar7 != 1) {
              lVar3 = lVar32 + 2;
              uVar38 = uVar2 + 2;
              iVar15 = (uint)*(ushort *)(param_1 + lVar3) - (uint)*(ushort *)(param_3 + lVar3);
              uVar9 = (ushort)(iVar15 >> 0x1f);
              *(ushort *)(param_5 + lVar3) = ((ushort)iVar15 ^ uVar9) - uVar9;
              if (uVar7 != 2) {
                lVar3 = lVar32 + 4;
                uVar38 = uVar2 + 3;
                iVar15 = (uint)*(ushort *)(param_1 + lVar3) - (uint)*(ushort *)(param_3 + lVar3);
                uVar9 = (ushort)(iVar15 >> 0x1f);
                *(ushort *)(param_5 + lVar3) = ((ushort)iVar15 ^ uVar9) - uVar9;
                if (uVar7 != 3) {
                  lVar3 = lVar32 + 6;
                  uVar38 = uVar2 + 4;
                  iVar15 = (uint)*(ushort *)(param_1 + lVar3) - (uint)*(ushort *)(param_3 + lVar3);
                  uVar9 = (ushort)(iVar15 >> 0x1f);
                  *(ushort *)(param_5 + lVar3) = ((ushort)iVar15 ^ uVar9) - uVar9;
                  if (uVar7 != 4) {
                    lVar3 = lVar32 + 8;
                    uVar38 = uVar2 + 5;
                    iVar15 = (uint)*(ushort *)(param_1 + lVar3) - (uint)*(ushort *)(param_3 + lVar3)
                    ;
                    uVar9 = (ushort)(iVar15 >> 0x1f);
                    *(ushort *)(param_5 + lVar3) = ((ushort)iVar15 ^ uVar9) - uVar9;
                    if (uVar7 != 5) {
                      lVar3 = lVar32 + 10;
                      uVar38 = uVar2 + 6;
                      iVar15 = (uint)*(ushort *)(param_1 + lVar3) -
                               (uint)*(ushort *)(param_3 + lVar3);
                      uVar9 = (ushort)(iVar15 >> 0x1f);
                      *(ushort *)(param_5 + lVar3) = ((ushort)iVar15 ^ uVar9) - uVar9;
                      if (uVar7 == 7) {
                        lVar32 = lVar32 + 0xc;
                        uVar23 = (ulong)(uVar2 + 7);
                        iVar15 = (uint)*(ushort *)(param_1 + lVar32) -
                                 (uint)*(ushort *)(param_3 + lVar32);
                        uVar9 = (ushort)(iVar15 >> 0x1f);
                        *(ushort *)(param_5 + lVar32) = ((ushort)iVar15 ^ uVar9) - uVar9;
                        goto LAB_00235a94;
                      }
                    }
                  }
                }
              }
            }
            uVar23 = (ulong)uVar38;
          }
LAB_00235a94:
          uVar2 = ((uVar30 - uVar7) - 8 >> 3) + 1;
          iVar15 = uVar2 * 8;
          if (6 < (uVar30 - 1) - uVar7) {
            lVar39 = lVar39 + (ulong)uVar7 * 2;
            uVar38 = 0;
            puVar24 = (undefined8 *)(param_5 + lVar39);
            puVar34 = (undefined8 *)(param_3 + lVar39);
            puVar22 = (ushort *)(param_1 + lVar39);
            do {
              uVar17 = puVar34[1];
              uVar16 = *puVar34;
              uVar38 = uVar38 + 1;
              uVar44 = MP_INT_ABS((uint)*puVar22 - (uint)(ushort)uVar16);
              uVar46 = MP_INT_ABS((uint)puVar22[1] - (uint)(ushort)((ulong)uVar16 >> 0x10));
              uVar47 = MP_INT_ABS((uint)puVar22[2] - (uint)(ushort)((ulong)uVar16 >> 0x20));
              uVar48 = MP_INT_ABS((uint)puVar22[3] - (uint)(ushort)((ulong)uVar16 >> 0x30));
              uVar40 = MP_INT_ABS((uint)puVar22[4] - (uint)(ushort)uVar17);
              uVar41 = MP_INT_ABS((uint)puVar22[5] - (uint)(ushort)((ulong)uVar17 >> 0x10));
              uVar42 = MP_INT_ABS((uint)puVar22[6] - (uint)(ushort)((ulong)uVar17 >> 0x20));
              uVar43 = MP_INT_ABS((uint)puVar22[7] - (uint)(ushort)((ulong)uVar17 >> 0x30));
              puVar24[1] = CONCAT26((short)uVar43,
                                    CONCAT24((short)uVar42,CONCAT22((short)uVar41,(short)uVar40)));
              *puVar24 = CONCAT26((short)uVar48,
                                  CONCAT24((short)uVar47,CONCAT22((short)uVar46,(short)uVar44)));
              puVar24 = puVar24 + 2;
              puVar34 = puVar34 + 2;
              puVar22 = puVar22 + 8;
            } while (uVar38 < uVar2);
            uVar23 = (ulong)(uint)((int)uVar23 + iVar15);
            if (uVar30 - uVar7 == iVar15) goto LAB_00235c30;
          }
          uVar25 = -(uVar23 >> 0x1f) & 0xfffffffe00000000 | uVar23 << 1;
          iVar26 = (int)uVar23;
          iVar15 = (uint)*(ushort *)(param_1 + uVar25) - (uint)*(ushort *)(param_3 + uVar25);
          uVar9 = (ushort)(iVar15 >> 0x1f);
          *(ushort *)(param_5 + uVar25) = ((ushort)iVar15 ^ uVar9) - uVar9;
          if (iVar26 + 1 < iVar8) {
            lVar39 = uVar25 + 2;
            iVar15 = (uint)*(ushort *)(param_1 + lVar39) - (uint)*(ushort *)(param_3 + lVar39);
            uVar9 = (ushort)(iVar15 >> 0x1f);
            *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
            if (iVar26 + 2 < iVar8) {
              lVar39 = uVar25 + 4;
              iVar15 = (uint)*(ushort *)(param_1 + lVar39) - (uint)*(ushort *)(param_3 + lVar39);
              uVar9 = (ushort)(iVar15 >> 0x1f);
              *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
              if (iVar26 + 3 < iVar8) {
                lVar39 = uVar25 + 6;
                iVar15 = (uint)*(ushort *)(param_1 + lVar39) - (uint)*(ushort *)(param_3 + lVar39);
                uVar9 = (ushort)(iVar15 >> 0x1f);
                *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
                if (iVar26 + 4 < iVar8) {
                  lVar39 = uVar25 + 8;
                  iVar15 = (uint)*(ushort *)(param_1 + lVar39) - (uint)*(ushort *)(param_3 + lVar39)
                  ;
                  uVar9 = (ushort)(iVar15 >> 0x1f);
                  *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
                  if (iVar26 + 5 < iVar8) {
                    lVar39 = uVar25 + 10;
                    iVar15 = (uint)*(ushort *)(param_1 + lVar39) -
                             (uint)*(ushort *)(param_3 + lVar39);
                    uVar9 = (ushort)(iVar15 >> 0x1f);
                    *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
                    if (iVar26 + 6 < iVar8) {
                      lVar39 = uVar25 + 0xc;
                      iVar15 = (uint)*(ushort *)(param_1 + lVar39) -
                               (uint)*(ushort *)(param_3 + lVar39);
                      uVar9 = (ushort)(iVar15 >> 0x1f);
                      *(ushort *)(param_5 + lVar39) = ((ushort)iVar15 ^ uVar9) - uVar9;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00235c30:
      iVar35 = iVar35 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar35 != 0);
  }
  return;
}


==================================================================

### FUNC 00235d48 (1564 bytes) name=FUN_00235d48

void FUN_00235d48(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  ulong uVar5;
  ulong uVar6;
  uint uVar7;
  short sVar8;
  int iVar9;
  short sVar10;
  short sVar11;
  short sVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined1 auVar17 [16];
  undefined1 *puVar18;
  undefined1 (*pauVar19) [16];
  undefined1 (*pauVar20) [16];
  ulong uVar21;
  undefined8 *puVar22;
  ulong uVar23;
  int iVar24;
  short *psVar25;
  uint uVar26;
  undefined1 (*pauVar27) [16];
  long lVar28;
  undefined1 (*pauVar29) [16];
  int iVar30;
  long lVar31;
  long lVar32;
  uint uVar33;
  long lVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  long lVar37;
  
  iVar30 = param_7[1];
  iVar9 = *param_7;
  if (iVar30 != 0) {
    uVar15 = iVar9 - 0x10;
    uVar13 = ((uVar15 >> 4) + 1) * 0x10;
    if ((int)uVar15 < 0) {
      uVar13 = 0;
    }
    uVar16 = (iVar9 + -4) - uVar13;
    lVar31 = ((long)(int)uVar13 + 0x20) * 2;
    lVar32 = lVar31 + -0x40;
    uVar14 = uVar16 >> 2;
    uVar1 = (uVar14 - 1 >> 1) + 1;
    uVar4 = uVar13 + 4 + uVar14 * 4;
    lVar37 = NEON_shl((long)(int)uVar13 + 4 + (ulong)uVar14 * 4,1);
    do {
      if (-1 < (int)uVar15) {
        pauVar19 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar20 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar22 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar29 = pauVar19 + -1;
          pauVar27 = pauVar20 + -1;
          auVar35 = *pauVar19;
          pauVar19 = pauVar19 + 2;
          auVar17 = *pauVar20;
          pauVar20 = pauVar20 + 2;
          auVar36 = NEON_smax(*pauVar29,*pauVar27,2);
          auVar35 = NEON_smax(auVar35,auVar17,2);
          puVar22[-1] = auVar36._8_8_;
          puVar22[-2] = auVar36._0_8_;
          puVar22[1] = auVar35._8_8_;
          *puVar22 = auVar35._0_8_;
          puVar22 = puVar22 + 4;
        } while (pauVar19 != (undefined1 (*) [16])(param_1 + (ulong)(uVar15 >> 4) * 0x20 + 0x30));
      }
      uVar2 = uVar13;
      if ((int)uVar13 < iVar9 + -3) {
        pauVar19 = (undefined1 (*) [16])(param_1 + lVar32);
        psVar25 = (short *)(param_5 + lVar32);
        pauVar20 = (undefined1 (*) [16])(param_3 + lVar32);
        uVar2 = uVar4;
        if ((pauVar19 < (undefined1 (*) [16])(param_5 + lVar31) &&
             psVar25 < (short *)(param_1 + lVar31) ||
             pauVar20 < (undefined1 (*) [16])(param_5 + lVar31) &&
             psVar25 < (short *)(param_3 + lVar31)) || (uVar14 + 1 < 4)) {
          do {
            puVar18 = *pauVar19;
            sVar11 = *(short *)*pauVar19;
            sVar12 = *(short *)*pauVar20;
            sVar10 = *(short *)*pauVar20;
            sVar8 = *(short *)(*pauVar20 + 2);
            if (*(short *)(*pauVar20 + 2) < *(short *)(*pauVar19 + 2)) {
              sVar8 = *(short *)(*pauVar19 + 2);
            }
            psVar25[1] = sVar8;
            if (sVar10 < sVar11) {
              sVar12 = sVar11;
            }
            *psVar25 = sVar12;
            sVar10 = *(short *)(*pauVar19 + 4);
            sVar12 = *(short *)(*pauVar20 + 4);
            sVar8 = *(short *)(*pauVar20 + 6);
            if (*(short *)(*pauVar20 + 6) < *(short *)(*pauVar19 + 6)) {
              sVar8 = *(short *)(*pauVar19 + 6);
            }
            sVar11 = *(short *)(*pauVar20 + 4);
            psVar25[3] = sVar8;
            if (sVar11 < sVar10) {
              sVar12 = sVar10;
            }
            psVar25[2] = sVar12;
            pauVar20 = (undefined1 (*) [16])(*pauVar20 + 8);
            pauVar19 = (undefined1 (*) [16])(puVar18 + 8);
            psVar25 = psVar25 + 4;
          } while ((undefined1 (*) [16])(puVar18 + 8) != (undefined1 (*) [16])(param_1 + lVar37));
        }
        else {
          uVar26 = uVar13;
          if (3 < uVar16) {
            uVar26 = 0;
            do {
              uVar26 = uVar26 + 1;
              auVar35 = NEON_smax(*pauVar20,*pauVar19,2);
              *(long *)(psVar25 + 4) = auVar35._8_8_;
              *(long *)psVar25 = auVar35._0_8_;
              pauVar20 = pauVar20 + 1;
              pauVar19 = pauVar19 + 1;
              psVar25 = psVar25 + 8;
            } while (uVar26 < uVar1);
            uVar26 = uVar13 + uVar1 * 8;
            if (uVar14 + 1 == uVar1 * 2) goto LAB_00235f60;
          }
          uVar21 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar26 << 1;
          lVar34 = uVar21 + 2;
          lVar28 = uVar21 + 4;
          lVar3 = uVar21 + 6;
          sVar8 = *(short *)(param_3 + lVar34);
          if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
            sVar8 = *(short *)(param_1 + lVar34);
          }
          sVar12 = *(short *)(param_3 + uVar21);
          if (*(short *)(param_3 + uVar21) < *(short *)(param_1 + uVar21)) {
            sVar12 = *(short *)(param_1 + uVar21);
          }
          *(short *)(param_5 + uVar21) = sVar12;
          *(short *)(param_5 + lVar34) = sVar8;
          sVar8 = *(short *)(param_3 + lVar3);
          if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
            sVar8 = *(short *)(param_1 + lVar3);
          }
          sVar12 = *(short *)(param_3 + lVar28);
          if (*(short *)(param_3 + lVar28) < *(short *)(param_1 + lVar28)) {
            sVar12 = *(short *)(param_1 + lVar28);
          }
          *(short *)(param_5 + lVar28) = sVar12;
          *(short *)(param_5 + lVar3) = sVar8;
        }
      }
LAB_00235f60:
      uVar21 = (ulong)uVar2;
      if ((int)uVar2 < iVar9) {
        uVar26 = iVar9 - uVar2;
        lVar28 = ((long)(int)uVar2 + 8) * 2;
        lVar34 = lVar28 + -0x10;
        uVar23 = param_5 + lVar34;
        uVar5 = param_1 + lVar34;
        uVar6 = param_3 + lVar34;
        if ((uVar23 < (ulong)(param_1 + lVar28) && uVar5 < (ulong)(param_5 + lVar28) ||
             uVar6 < (ulong)(param_5 + lVar28) && uVar23 < (ulong)(param_3 + lVar28)) ||
           (uVar26 < 0xc)) {
          lVar34 = 0;
          do {
            sVar8 = *(short *)(uVar6 + lVar34);
            if (*(short *)(uVar6 + lVar34) < *(short *)(uVar5 + lVar34)) {
              sVar8 = *(short *)(uVar5 + lVar34);
            }
            *(short *)(uVar23 + lVar34) = sVar8;
            lVar34 = lVar34 + 2;
          } while (lVar34 != ((ulong)((iVar9 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar7 = -((uint)(uVar5 >> 1) & 7) & 7;
          if (uVar26 < uVar7) {
            uVar7 = uVar26;
          }
          if (uVar7 != 0) {
            lVar28 = (long)(int)uVar2 * 2;
            uVar33 = uVar2 + 1;
            sVar8 = *(short *)(param_3 + lVar28);
            if (*(short *)(param_3 + lVar28) < *(short *)(param_1 + lVar28)) {
              sVar8 = *(short *)(param_1 + lVar28);
            }
            *(short *)(param_5 + lVar28) = sVar8;
            if (uVar7 != 1) {
              lVar3 = lVar28 + 2;
              uVar33 = uVar2 + 2;
              sVar8 = *(short *)(param_3 + lVar3);
              if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
                sVar8 = *(short *)(param_1 + lVar3);
              }
              *(short *)(param_5 + lVar3) = sVar8;
              if (uVar7 != 2) {
                lVar3 = lVar28 + 4;
                uVar33 = uVar2 + 3;
                sVar8 = *(short *)(param_3 + lVar3);
                if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
                  sVar8 = *(short *)(param_1 + lVar3);
                }
                *(short *)(param_5 + lVar3) = sVar8;
                if (uVar7 != 3) {
                  lVar3 = lVar28 + 6;
                  uVar33 = uVar2 + 4;
                  sVar8 = *(short *)(param_3 + lVar3);
                  if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
                    sVar8 = *(short *)(param_1 + lVar3);
                  }
                  *(short *)(param_5 + lVar3) = sVar8;
                  if (uVar7 != 4) {
                    lVar3 = lVar28 + 8;
                    uVar33 = uVar2 + 5;
                    sVar8 = *(short *)(param_3 + lVar3);
                    if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
                      sVar8 = *(short *)(param_1 + lVar3);
                    }
                    *(short *)(param_5 + lVar3) = sVar8;
                    if (uVar7 != 5) {
                      lVar3 = lVar28 + 10;
                      uVar33 = uVar2 + 6;
                      sVar8 = *(short *)(param_3 + lVar3);
                      if (*(short *)(param_3 + lVar3) < *(short *)(param_1 + lVar3)) {
                        sVar8 = *(short *)(param_1 + lVar3);
                      }
                      *(short *)(param_5 + lVar3) = sVar8;
                      if (uVar7 == 7) {
                        lVar28 = lVar28 + 0xc;
                        uVar21 = (ulong)(uVar2 + 7);
                        sVar8 = *(short *)(param_3 + lVar28);
                        if (*(short *)(param_3 + lVar28) < *(short *)(param_1 + lVar28)) {
                          sVar8 = *(short *)(param_1 + lVar28);
                        }
                        *(short *)(param_5 + lVar28) = sVar8;
                        goto LAB_002360f4;
                      }
                    }
                  }
                }
              }
            }
            uVar21 = (ulong)uVar33;
          }
LAB_002360f4:
          uVar2 = ((uVar26 - uVar7) - 8 >> 3) + 1;
          iVar24 = uVar2 * 8;
          if (6 < (uVar26 - 1) - uVar7) {
            lVar34 = lVar34 + (ulong)uVar7 * 2;
            uVar33 = 0;
            puVar22 = (undefined8 *)(param_5 + lVar34);
            pauVar19 = (undefined1 (*) [16])(param_3 + lVar34);
            pauVar20 = (undefined1 (*) [16])(param_1 + lVar34);
            do {
              uVar33 = uVar33 + 1;
              auVar35 = NEON_smax(*pauVar19,*pauVar20,2);
              puVar22[1] = auVar35._8_8_;
              *puVar22 = auVar35._0_8_;
              puVar22 = puVar22 + 2;
              pauVar19 = pauVar19 + 1;
              pauVar20 = pauVar20 + 1;
            } while (uVar33 < uVar2);
            uVar21 = (ulong)(uint)((int)uVar21 + iVar24);
            if (uVar26 - uVar7 == iVar24) goto LAB_00236260;
          }
          uVar23 = -(uVar21 >> 0x1f) & 0xfffffffe00000000 | uVar21 << 1;
          iVar24 = (int)uVar21;
          sVar8 = *(short *)(param_3 + uVar23);
          if (*(short *)(param_3 + uVar23) < *(short *)(param_1 + uVar23)) {
            sVar8 = *(short *)(param_1 + uVar23);
          }
          *(short *)(param_5 + uVar23) = sVar8;
          if (iVar24 + 1 < iVar9) {
            lVar34 = uVar23 + 2;
            sVar8 = *(short *)(param_3 + lVar34);
            if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
              sVar8 = *(short *)(param_1 + lVar34);
            }
            *(short *)(param_5 + lVar34) = sVar8;
            if (iVar24 + 2 < iVar9) {
              lVar34 = uVar23 + 4;
              sVar8 = *(short *)(param_3 + lVar34);
              if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
                sVar8 = *(short *)(param_1 + lVar34);
              }
              *(short *)(param_5 + lVar34) = sVar8;
              if (iVar24 + 3 < iVar9) {
                lVar34 = uVar23 + 6;
                sVar8 = *(short *)(param_3 + lVar34);
                if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
                  sVar8 = *(short *)(param_1 + lVar34);
                }
                *(short *)(param_5 + lVar34) = sVar8;
                if (iVar24 + 4 < iVar9) {
                  lVar34 = uVar23 + 8;
                  sVar8 = *(short *)(param_3 + lVar34);
                  if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
                    sVar8 = *(short *)(param_1 + lVar34);
                  }
                  *(short *)(param_5 + lVar34) = sVar8;
                  if (iVar24 + 5 < iVar9) {
                    lVar34 = uVar23 + 10;
                    sVar8 = *(short *)(param_3 + lVar34);
                    if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
                      sVar8 = *(short *)(param_1 + lVar34);
                    }
                    *(short *)(param_5 + lVar34) = sVar8;
                    if (iVar24 + 6 < iVar9) {
                      lVar34 = uVar23 + 0xc;
                      sVar8 = *(short *)(param_3 + lVar34);
                      if (*(short *)(param_3 + lVar34) < *(short *)(param_1 + lVar34)) {
                        sVar8 = *(short *)(param_1 + lVar34);
                      }
                      *(short *)(param_5 + lVar34) = sVar8;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00236260:
      iVar30 = iVar30 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar30 != 0);
  }
  return;
}


==================================================================

### FUNC 00236364 (1480 bytes) name=FUN_00236364

void FUN_00236364(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  ushort uVar8;
  ushort uVar9;
  ushort uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  undefined1 auVar15 [16];
  undefined1 *puVar16;
  undefined1 (*pauVar17) [16];
  ulong uVar18;
  undefined8 *puVar19;
  ulong uVar20;
  int iVar21;
  ushort *puVar22;
  undefined1 (*pauVar23) [16];
  uint uVar24;
  undefined1 (*pauVar25) [16];
  long lVar26;
  undefined1 (*pauVar27) [16];
  int iVar28;
  long lVar29;
  long lVar30;
  uint uVar31;
  long lVar32;
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  long lVar35;
  
  iVar28 = param_7[1];
  iVar7 = *param_7;
  if (iVar28 != 0) {
    uVar13 = iVar7 - 0x10;
    uVar11 = ((uVar13 >> 4) + 1) * 0x10;
    if ((int)uVar13 < 0) {
      uVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - uVar11;
    lVar29 = ((long)(int)uVar11 + 0x20) * 2;
    lVar30 = lVar29 + -0x40;
    uVar12 = uVar14 >> 2;
    uVar1 = (uVar12 - 1 >> 1) + 1;
    uVar4 = uVar11 + 4 + uVar12 * 4;
    lVar35 = NEON_shl((long)(int)uVar11 + 4 + (ulong)uVar12 * 4,1);
    do {
      if (-1 < (int)uVar13) {
        pauVar17 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar23 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar19 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar27 = pauVar17 + -1;
          pauVar25 = pauVar23 + -1;
          auVar33 = *pauVar17;
          pauVar17 = pauVar17 + 2;
          auVar15 = *pauVar23;
          pauVar23 = pauVar23 + 2;
          auVar34 = NEON_umax(*pauVar27,*pauVar25,2);
          auVar33 = NEON_umax(auVar33,auVar15,2);
          puVar19[-1] = auVar34._8_8_;
          puVar19[-2] = auVar34._0_8_;
          puVar19[1] = auVar33._8_8_;
          *puVar19 = auVar33._0_8_;
          puVar19 = puVar19 + 4;
        } while (pauVar17 != (undefined1 (*) [16])(param_1 + (ulong)(uVar13 >> 4) * 0x20 + 0x30));
      }
      uVar2 = uVar11;
      if ((int)uVar11 < iVar7 + -3) {
        pauVar17 = (undefined1 (*) [16])(param_1 + lVar30);
        puVar22 = (ushort *)(param_5 + lVar30);
        pauVar23 = (undefined1 (*) [16])(param_3 + lVar30);
        uVar2 = uVar4;
        if ((pauVar17 < (undefined1 (*) [16])(param_5 + lVar29) &&
             puVar22 < (ushort *)(param_1 + lVar29) ||
             pauVar23 < (undefined1 (*) [16])(param_5 + lVar29) &&
             puVar22 < (ushort *)(param_3 + lVar29)) || (uVar12 + 1 < 4)) {
          do {
            puVar16 = *pauVar17;
            uVar9 = *(ushort *)*pauVar17;
            uVar10 = *(ushort *)*pauVar23;
            uVar8 = *(ushort *)(*pauVar23 + 2);
            if (*(ushort *)(*pauVar23 + 2) < *(ushort *)(*pauVar17 + 2)) {
              uVar8 = *(ushort *)(*pauVar17 + 2);
            }
            puVar22[1] = uVar8;
            if (uVar10 < uVar9) {
              uVar10 = uVar9;
            }
            *puVar22 = uVar10;
            uVar9 = *(ushort *)(*pauVar17 + 4);
            uVar10 = *(ushort *)(*pauVar23 + 4);
            uVar8 = *(ushort *)(*pauVar23 + 6);
            if (*(ushort *)(*pauVar23 + 6) < *(ushort *)(*pauVar17 + 6)) {
              uVar8 = *(ushort *)(*pauVar17 + 6);
            }
            puVar22[3] = uVar8;
            if (uVar10 < uVar9) {
              uVar10 = uVar9;
            }
            puVar22[2] = uVar10;
            pauVar17 = (undefined1 (*) [16])(puVar16 + 8);
            puVar22 = puVar22 + 4;
            pauVar23 = (undefined1 (*) [16])(*pauVar23 + 8);
          } while ((undefined1 (*) [16])(puVar16 + 8) != (undefined1 (*) [16])(param_1 + lVar35));
        }
        else {
          uVar24 = uVar11;
          if (3 < uVar14) {
            uVar24 = 0;
            do {
              uVar24 = uVar24 + 1;
              auVar33 = NEON_umax(*pauVar23,*pauVar17,2);
              *(long *)(puVar22 + 4) = auVar33._8_8_;
              *(long *)puVar22 = auVar33._0_8_;
              pauVar17 = pauVar17 + 1;
              puVar22 = puVar22 + 8;
              pauVar23 = pauVar23 + 1;
            } while (uVar24 < uVar1);
            uVar24 = uVar11 + uVar1 * 8;
            if (uVar12 + 1 == uVar1 * 2) goto LAB_0023656c;
          }
          uVar18 = -(ulong)(uVar24 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar24 << 1;
          lVar32 = uVar18 + 2;
          lVar26 = uVar18 + 4;
          lVar3 = uVar18 + 6;
          uVar8 = *(ushort *)(param_3 + lVar32);
          if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
            uVar8 = *(ushort *)(param_1 + lVar32);
          }
          uVar10 = *(ushort *)(param_3 + uVar18);
          if (*(ushort *)(param_3 + uVar18) < *(ushort *)(param_1 + uVar18)) {
            uVar10 = *(ushort *)(param_1 + uVar18);
          }
          *(ushort *)(param_5 + uVar18) = uVar10;
          *(ushort *)(param_5 + lVar32) = uVar8;
          uVar8 = *(ushort *)(param_3 + lVar3);
          if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
            uVar8 = *(ushort *)(param_1 + lVar3);
          }
          uVar10 = *(ushort *)(param_3 + lVar26);
          if (*(ushort *)(param_3 + lVar26) < *(ushort *)(param_1 + lVar26)) {
            uVar10 = *(ushort *)(param_1 + lVar26);
          }
          *(ushort *)(param_5 + lVar26) = uVar10;
          *(ushort *)(param_5 + lVar3) = uVar8;
        }
      }
LAB_0023656c:
      uVar18 = (ulong)uVar2;
      if ((int)uVar2 < iVar7) {
        uVar24 = iVar7 - uVar2;
        lVar26 = ((long)(int)uVar2 + 8) * 2;
        lVar32 = lVar26 + -0x10;
        uVar20 = param_5 + lVar32;
        uVar5 = param_1 + lVar32;
        if ((uVar20 < (ulong)(param_1 + lVar26) && uVar5 < (ulong)(param_5 + lVar26) ||
             (ulong)(param_3 + lVar32) < (ulong)(param_5 + lVar26) &&
             uVar20 < (ulong)(param_3 + lVar26)) || (uVar24 < 0xc)) {
          lVar26 = 0;
          do {
            uVar8 = *(ushort *)(param_3 + lVar32 + lVar26);
            if (uVar8 < *(ushort *)(uVar5 + lVar26)) {
              uVar8 = *(ushort *)(uVar5 + lVar26);
            }
            *(ushort *)(uVar20 + lVar26) = uVar8;
            lVar26 = lVar26 + 2;
          } while (lVar26 != ((ulong)((iVar7 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 1) & 7) & 7;
          if (uVar24 < uVar6) {
            uVar6 = uVar24;
          }
          if (uVar6 != 0) {
            lVar26 = (long)(int)uVar2 * 2;
            uVar8 = *(ushort *)(param_3 + lVar26);
            if (*(ushort *)(param_3 + lVar26) < *(ushort *)(param_1 + lVar26)) {
              uVar8 = *(ushort *)(param_1 + lVar26);
            }
            *(ushort *)(param_5 + lVar26) = uVar8;
            if (uVar6 == 1) {
              uVar18 = (ulong)(uVar2 + 1);
            }
            else {
              lVar3 = lVar26 + 2;
              uVar31 = uVar2 + 2;
              uVar8 = *(ushort *)(param_3 + lVar3);
              if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
                uVar8 = *(ushort *)(param_1 + lVar3);
              }
              *(ushort *)(param_5 + lVar3) = uVar8;
              if (uVar6 != 2) {
                lVar3 = lVar26 + 4;
                uVar31 = uVar2 + 3;
                uVar8 = *(ushort *)(param_3 + lVar3);
                if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
                  uVar8 = *(ushort *)(param_1 + lVar3);
                }
                *(ushort *)(param_5 + lVar3) = uVar8;
                if (uVar6 != 3) {
                  lVar3 = lVar26 + 6;
                  uVar31 = uVar2 + 4;
                  uVar8 = *(ushort *)(param_3 + lVar3);
                  if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
                    uVar8 = *(ushort *)(param_1 + lVar3);
                  }
                  *(ushort *)(param_5 + lVar3) = uVar8;
                  if (uVar6 != 4) {
                    lVar3 = lVar26 + 8;
                    uVar31 = uVar2 + 5;
                    uVar8 = *(ushort *)(param_3 + lVar3);
                    if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
                      uVar8 = *(ushort *)(param_1 + lVar3);
                    }
                    *(ushort *)(param_5 + lVar3) = uVar8;
                    if (uVar6 != 5) {
                      lVar3 = lVar26 + 10;
                      uVar31 = uVar2 + 6;
                      uVar8 = *(ushort *)(param_3 + lVar3);
                      if (*(ushort *)(param_3 + lVar3) < *(ushort *)(param_1 + lVar3)) {
                        uVar8 = *(ushort *)(param_1 + lVar3);
                      }
                      *(ushort *)(param_5 + lVar3) = uVar8;
                      if (uVar6 == 7) {
                        lVar26 = lVar26 + 0xc;
                        uVar18 = (ulong)(uVar2 + 7);
                        uVar8 = *(ushort *)(param_3 + lVar26);
                        if (*(ushort *)(param_3 + lVar26) < *(ushort *)(param_1 + lVar26)) {
                          uVar8 = *(ushort *)(param_1 + lVar26);
                        }
                        *(ushort *)(param_5 + lVar26) = uVar8;
                        goto LAB_002366e4;
                      }
                    }
                  }
                }
              }
              uVar18 = (ulong)uVar31;
            }
          }
LAB_002366e4:
          uVar2 = ((uVar24 - uVar6) - 8 >> 3) + 1;
          iVar21 = uVar2 * 8;
          if (6 < (uVar24 - 1) - uVar6) {
            lVar32 = lVar32 + (ulong)uVar6 * 2;
            uVar31 = 0;
            puVar19 = (undefined8 *)(param_5 + lVar32);
            pauVar17 = (undefined1 (*) [16])(param_3 + lVar32);
            pauVar23 = (undefined1 (*) [16])(param_1 + lVar32);
            do {
              uVar31 = uVar31 + 1;
              auVar33 = NEON_umax(*pauVar17,*pauVar23,2);
              puVar19[1] = auVar33._8_8_;
              *puVar19 = auVar33._0_8_;
              puVar19 = puVar19 + 2;
              pauVar17 = pauVar17 + 1;
              pauVar23 = pauVar23 + 1;
            } while (uVar31 < uVar2);
            uVar18 = (ulong)(uint)((int)uVar18 + iVar21);
            if (uVar24 - uVar6 == iVar21) goto LAB_00236834;
          }
          uVar20 = -(uVar18 >> 0x1f) & 0xfffffffe00000000 | uVar18 << 1;
          iVar21 = (int)uVar18;
          uVar8 = *(ushort *)(param_3 + uVar20);
          if (*(ushort *)(param_3 + uVar20) < *(ushort *)(param_1 + uVar20)) {
            uVar8 = *(ushort *)(param_1 + uVar20);
          }
          *(ushort *)(param_5 + uVar20) = uVar8;
          if (iVar21 + 1 < iVar7) {
            lVar32 = uVar20 + 2;
            uVar8 = *(ushort *)(param_3 + lVar32);
            if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
              uVar8 = *(ushort *)(param_1 + lVar32);
            }
            *(ushort *)(param_5 + lVar32) = uVar8;
            if (iVar21 + 2 < iVar7) {
              lVar32 = uVar20 + 4;
              uVar8 = *(ushort *)(param_3 + lVar32);
              if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
                uVar8 = *(ushort *)(param_1 + lVar32);
              }
              *(ushort *)(param_5 + lVar32) = uVar8;
              if (iVar21 + 3 < iVar7) {
                lVar32 = uVar20 + 6;
                uVar8 = *(ushort *)(param_3 + lVar32);
                if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
                  uVar8 = *(ushort *)(param_1 + lVar32);
                }
                *(ushort *)(param_5 + lVar32) = uVar8;
                if (iVar21 + 4 < iVar7) {
                  lVar32 = uVar20 + 8;
                  uVar8 = *(ushort *)(param_3 + lVar32);
                  if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
                    uVar8 = *(ushort *)(param_1 + lVar32);
                  }
                  *(ushort *)(param_5 + lVar32) = uVar8;
                  if (iVar21 + 5 < iVar7) {
                    lVar32 = uVar20 + 10;
                    uVar8 = *(ushort *)(param_3 + lVar32);
                    if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
                      uVar8 = *(ushort *)(param_1 + lVar32);
                    }
                    *(ushort *)(param_5 + lVar32) = uVar8;
                    if (iVar21 + 6 < iVar7) {
                      lVar32 = uVar20 + 0xc;
                      uVar8 = *(ushort *)(param_3 + lVar32);
                      if (*(ushort *)(param_3 + lVar32) < *(ushort *)(param_1 + lVar32)) {
                        uVar8 = *(ushort *)(param_1 + lVar32);
                      }
                      *(ushort *)(param_5 + lVar32) = uVar8;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00236834:
      iVar28 = iVar28 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 0023692c (2416 bytes) name=FUN_0023692c

void FUN_0023692c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  char *pcVar5;
  char *pcVar6;
  uint uVar7;
  char cVar8;
  int iVar9;
  byte bVar10;
  char cVar11;
  char cVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  undefined1 auVar19 [16];
  uint uVar20;
  undefined1 *puVar21;
  int iVar22;
  undefined1 (*pauVar23) [16];
  undefined1 (*pauVar24) [16];
  undefined8 *puVar25;
  char *pcVar26;
  uint uVar27;
  undefined1 (*pauVar28) [16];
  uint uVar29;
  undefined1 (*pauVar30) [16];
  long lVar31;
  long lVar32;
  int iVar33;
  long lVar34;
  long lVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  
  iVar33 = param_7[1];
  iVar9 = *param_7;
  if (iVar33 != 0) {
    uVar16 = iVar9 - 0x20;
    iVar13 = ((uVar16 >> 5) + 1) * 0x20;
    if ((int)uVar16 < 0) {
      iVar13 = 0;
    }
    iVar17 = iVar9 + -3;
    uVar18 = (iVar9 + -4) - iVar13;
    lVar34 = (long)iVar13;
    uVar15 = uVar18 >> 2;
    uVar1 = (uVar15 - 3 >> 2) + 1;
    iVar4 = iVar13 + 4 + uVar15 * 4;
    lVar2 = lVar34 + 0x40;
    do {
      if (-1 < (int)uVar16) {
        pauVar23 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar24 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar25 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar30 = pauVar23 + -1;
          pauVar28 = pauVar24 + -1;
          auVar36 = *pauVar23;
          pauVar23 = pauVar23 + 2;
          auVar19 = *pauVar24;
          pauVar24 = pauVar24 + 2;
          auVar37 = NEON_smax(*pauVar30,*pauVar28,1);
          auVar36 = NEON_smax(auVar36,auVar19,1);
          puVar25[-1] = auVar37._8_8_;
          puVar25[-2] = auVar37._0_8_;
          puVar25[1] = auVar36._8_8_;
          *puVar25 = auVar36._0_8_;
          puVar25 = puVar25 + 4;
        } while (pauVar23 != (undefined1 (*) [16])(param_1 + (ulong)(uVar16 >> 5) * 0x20 + 0x30));
      }
      iVar14 = iVar13;
      if (iVar13 < iVar17) {
        pauVar23 = (undefined1 (*) [16])(param_1 + lVar34);
        pcVar26 = (char *)(param_5 + lVar34);
        pauVar24 = (undefined1 (*) [16])(param_3 + lVar34);
        iVar14 = iVar4;
        if ((pauVar23 < (undefined1 (*) [16])(param_5 + lVar2) &&
             pcVar26 < (char *)(param_1 + lVar2) ||
             pauVar24 < (undefined1 (*) [16])(param_5 + lVar2) &&
             pcVar26 < (char *)(param_3 + lVar2)) || (uVar15 + 1 < 5)) {
          do {
            puVar21 = *pauVar23;
            cVar11 = (*pauVar23)[0];
            cVar12 = (*pauVar24)[0];
            bVar10 = (*pauVar24)[0];
            cVar8 = (*pauVar24)[1];
            if ((int)(uint)(byte)(*pauVar24)[1] < (int)(char)(*pauVar23)[1]) {
              cVar8 = (*pauVar23)[1];
            }
            pcVar26[1] = cVar8;
            if ((int)(uint)bVar10 < (int)cVar11) {
              cVar12 = cVar11;
            }
            *pcVar26 = cVar12;
            cVar11 = (*pauVar23)[2];
            cVar12 = (*pauVar24)[2];
            cVar8 = (*pauVar24)[3];
            if ((int)(uint)(byte)(*pauVar24)[3] < (int)(char)(*pauVar23)[3]) {
              cVar8 = (*pauVar23)[3];
            }
            bVar10 = (*pauVar24)[2];
            pcVar26[3] = cVar8;
            if ((int)(uint)bVar10 < (int)cVar11) {
              cVar12 = cVar11;
            }
            pcVar26[2] = cVar12;
            pauVar24 = (undefined1 (*) [16])(*pauVar24 + 4);
            pauVar23 = (undefined1 (*) [16])(puVar21 + 4);
            pcVar26 = pcVar26 + 4;
          } while ((undefined1 (*) [16])(puVar21 + 4) !=
                   (undefined1 (*) [16])(param_1 + lVar34 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar22 = iVar13;
          if (0xb < uVar18) {
            uVar27 = 0;
            do {
              uVar27 = uVar27 + 1;
              auVar36 = NEON_smax(*pauVar24,*pauVar23,1);
              *(long *)(pcVar26 + 8) = auVar36._8_8_;
              *(long *)pcVar26 = auVar36._0_8_;
              pauVar24 = pauVar24 + 1;
              pauVar23 = pauVar23 + 1;
              pcVar26 = pcVar26 + 0x10;
            } while (uVar27 < uVar1);
            iVar22 = iVar13 + uVar1 * 0x10;
            if (uVar15 + 1 == uVar1 * 4) goto LAB_00236c24;
          }
          lVar31 = (long)iVar22;
          lVar32 = lVar31 + 1;
          lVar35 = lVar31 + 2;
          lVar3 = lVar31 + 3;
          cVar8 = *(char *)(param_3 + lVar32);
          if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
            cVar8 = *(char *)(param_1 + lVar32);
          }
          cVar12 = *(char *)(param_3 + lVar31);
          if (*(char *)(param_3 + lVar31) < *(char *)(param_1 + lVar31)) {
            cVar12 = *(char *)(param_1 + lVar31);
          }
          *(char *)(param_5 + lVar31) = cVar12;
          *(char *)(param_5 + lVar32) = cVar8;
          cVar8 = *(char *)(param_3 + lVar3);
          if (*(char *)(param_3 + lVar3) < *(char *)(param_1 + lVar3)) {
            cVar8 = *(char *)(param_1 + lVar3);
          }
          cVar12 = *(char *)(param_3 + lVar35);
          if (*(char *)(param_3 + lVar35) < *(char *)(param_1 + lVar35)) {
            cVar12 = *(char *)(param_1 + lVar35);
          }
          *(char *)(param_5 + lVar35) = cVar12;
          *(char *)(param_5 + lVar3) = cVar8;
          if (iVar22 + 4 < iVar17) {
            lVar31 = (long)(iVar22 + 4);
            lVar32 = lVar31 + 1;
            lVar35 = lVar31 + 2;
            lVar3 = lVar31 + 3;
            cVar8 = *(char *)(param_3 + lVar32);
            if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
              cVar8 = *(char *)(param_1 + lVar32);
            }
            cVar12 = *(char *)(param_3 + lVar31);
            if (*(char *)(param_3 + lVar31) < *(char *)(param_1 + lVar31)) {
              cVar12 = *(char *)(param_1 + lVar31);
            }
            *(char *)(param_5 + lVar31) = cVar12;
            *(char *)(param_5 + lVar32) = cVar8;
            cVar8 = *(char *)(param_3 + lVar3);
            if (*(char *)(param_3 + lVar3) < *(char *)(param_1 + lVar3)) {
              cVar8 = *(char *)(param_1 + lVar3);
            }
            cVar12 = *(char *)(param_3 + lVar35);
            if (*(char *)(param_3 + lVar35) < *(char *)(param_1 + lVar35)) {
              cVar12 = *(char *)(param_1 + lVar35);
            }
            *(char *)(param_5 + lVar35) = cVar12;
            *(char *)(param_5 + lVar3) = cVar8;
            if (iVar22 + 8 < iVar17) {
              lVar31 = (long)(iVar22 + 8);
              lVar32 = lVar31 + 1;
              lVar35 = lVar31 + 2;
              lVar3 = lVar31 + 3;
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              cVar12 = *(char *)(param_3 + lVar31);
              if (*(char *)(param_3 + lVar31) < *(char *)(param_1 + lVar31)) {
                cVar12 = *(char *)(param_1 + lVar31);
              }
              *(char *)(param_5 + lVar31) = cVar12;
              *(char *)(param_5 + lVar32) = cVar8;
              cVar8 = *(char *)(param_3 + lVar3);
              if (*(char *)(param_3 + lVar3) < *(char *)(param_1 + lVar3)) {
                cVar8 = *(char *)(param_1 + lVar3);
              }
              cVar12 = *(char *)(param_3 + lVar35);
              if (*(char *)(param_3 + lVar35) < *(char *)(param_1 + lVar35)) {
                cVar12 = *(char *)(param_1 + lVar35);
              }
              *(char *)(param_5 + lVar35) = cVar12;
              *(char *)(param_5 + lVar3) = cVar8;
            }
          }
        }
      }
LAB_00236c24:
      if (iVar14 < iVar9) {
        lVar35 = (long)iVar14;
        uVar27 = iVar9 - iVar14;
        lVar32 = lVar35 + 0x10;
        pcVar26 = (char *)(param_1 + lVar35);
        pcVar5 = (char *)(param_5 + lVar35);
        pcVar6 = (char *)(param_3 + lVar35);
        if ((pcVar26 < (char *)(param_5 + lVar32) && pcVar5 < (char *)(param_1 + lVar32) ||
             pcVar6 < (char *)(param_5 + lVar32) && pcVar5 < (char *)(param_3 + lVar32)) ||
           (uVar27 < 0x14)) {
          lVar32 = 0;
          do {
            cVar8 = pcVar6[lVar32];
            if (pcVar6[lVar32] < pcVar26[lVar32]) {
              cVar8 = pcVar26[lVar32];
            }
            pcVar5[lVar32] = cVar8;
            lVar32 = lVar32 + 1;
          } while (lVar32 != (ulong)(uint)((iVar9 + -1) - iVar14) + 1);
        }
        else {
          uVar7 = -(int)pcVar26 & 0xf;
          uVar20 = uVar27;
          if (uVar7 < uVar27) {
            uVar20 = uVar7;
          }
          iVar22 = iVar14;
          if (uVar20 != 0) {
            iVar22 = iVar14 + 1;
            cVar8 = *pcVar6;
            if (*pcVar6 < *pcVar26) {
              cVar8 = *pcVar26;
            }
            *pcVar5 = cVar8;
            if (uVar20 != 1) {
              lVar32 = (long)iVar22;
              iVar22 = iVar14 + 2;
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              *(char *)(param_5 + lVar32) = cVar8;
              if (uVar20 != 2) {
                lVar32 = (long)iVar22;
                iVar22 = iVar14 + 3;
                cVar8 = *(char *)(param_3 + lVar32);
                if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                  cVar8 = *(char *)(param_1 + lVar32);
                }
                *(char *)(param_5 + lVar32) = cVar8;
                if (uVar20 != 3) {
                  lVar32 = (long)iVar22;
                  iVar22 = iVar14 + 4;
                  cVar8 = *(char *)(param_3 + lVar32);
                  if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                    cVar8 = *(char *)(param_1 + lVar32);
                  }
                  *(char *)(param_5 + lVar32) = cVar8;
                  if (uVar20 != 4) {
                    lVar32 = (long)iVar22;
                    iVar22 = iVar14 + 5;
                    cVar8 = *(char *)(param_3 + lVar32);
                    if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                      cVar8 = *(char *)(param_1 + lVar32);
                    }
                    *(char *)(param_5 + lVar32) = cVar8;
                    if (uVar20 != 5) {
                      lVar32 = (long)iVar22;
                      iVar22 = iVar14 + 6;
                      cVar8 = *(char *)(param_3 + lVar32);
                      if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                        cVar8 = *(char *)(param_1 + lVar32);
                      }
                      *(char *)(param_5 + lVar32) = cVar8;
                      if (uVar20 != 6) {
                        lVar32 = (long)iVar22;
                        iVar22 = iVar14 + 7;
                        cVar8 = *(char *)(param_3 + lVar32);
                        if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                          cVar8 = *(char *)(param_1 + lVar32);
                        }
                        *(char *)(param_5 + lVar32) = cVar8;
                        if (uVar20 != 7) {
                          lVar32 = (long)iVar22;
                          iVar22 = iVar14 + 8;
                          cVar8 = *(char *)(param_3 + lVar32);
                          if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                            cVar8 = *(char *)(param_1 + lVar32);
                          }
                          *(char *)(param_5 + lVar32) = cVar8;
                          if (uVar20 != 8) {
                            lVar32 = (long)iVar22;
                            iVar22 = iVar14 + 9;
                            cVar8 = *(char *)(param_3 + lVar32);
                            if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                              cVar8 = *(char *)(param_1 + lVar32);
                            }
                            *(char *)(param_5 + lVar32) = cVar8;
                            if (uVar20 != 9) {
                              lVar32 = (long)iVar22;
                              iVar22 = iVar14 + 10;
                              cVar8 = *(char *)(param_3 + lVar32);
                              if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                cVar8 = *(char *)(param_1 + lVar32);
                              }
                              *(char *)(param_5 + lVar32) = cVar8;
                              if (uVar20 != 10) {
                                lVar32 = (long)iVar22;
                                iVar22 = iVar14 + 0xb;
                                cVar8 = *(char *)(param_3 + lVar32);
                                if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                  cVar8 = *(char *)(param_1 + lVar32);
                                }
                                *(char *)(param_5 + lVar32) = cVar8;
                                if (uVar20 != 0xb) {
                                  lVar32 = (long)iVar22;
                                  iVar22 = iVar14 + 0xc;
                                  cVar8 = *(char *)(param_3 + lVar32);
                                  if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                    cVar8 = *(char *)(param_1 + lVar32);
                                  }
                                  *(char *)(param_5 + lVar32) = cVar8;
                                  if (uVar20 != 0xc) {
                                    lVar32 = (long)iVar22;
                                    iVar22 = iVar14 + 0xd;
                                    cVar8 = *(char *)(param_3 + lVar32);
                                    if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                      cVar8 = *(char *)(param_1 + lVar32);
                                    }
                                    *(char *)(param_5 + lVar32) = cVar8;
                                    if (uVar20 != 0xd) {
                                      lVar32 = (long)iVar22;
                                      iVar22 = iVar14 + 0xe;
                                      cVar8 = *(char *)(param_3 + lVar32);
                                      if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32))
                                      {
                                        cVar8 = *(char *)(param_1 + lVar32);
                                      }
                                      *(char *)(param_5 + lVar32) = cVar8;
                                      if (uVar20 == 0xf) {
                                        lVar32 = (long)iVar22;
                                        iVar22 = iVar14 + 0xf;
                                        cVar8 = *(char *)(param_3 + lVar32);
                                        if (*(char *)(param_3 + lVar32) <
                                            *(char *)(param_1 + lVar32)) {
                                          cVar8 = *(char *)(param_1 + lVar32);
                                        }
                                        *(char *)(param_5 + lVar32) = cVar8;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar7 = ((uVar27 - uVar20) - 0x10 >> 4) + 1;
          iVar14 = uVar7 * 0x10;
          if (0xe < (uVar27 - 1) - uVar20) {
            lVar35 = lVar35 + (ulong)uVar20;
            uVar29 = 0;
            puVar25 = (undefined8 *)(param_5 + lVar35);
            pauVar23 = (undefined1 (*) [16])(param_3 + lVar35);
            pauVar24 = (undefined1 (*) [16])(param_1 + lVar35);
            do {
              uVar29 = uVar29 + 1;
              auVar36 = NEON_smax(*pauVar23,*pauVar24,1);
              puVar25[1] = auVar36._8_8_;
              *puVar25 = auVar36._0_8_;
              puVar25 = puVar25 + 2;
              pauVar23 = pauVar23 + 1;
              pauVar24 = pauVar24 + 1;
            } while (uVar29 < uVar7);
            iVar22 = iVar22 + iVar14;
            if (uVar27 - uVar20 == iVar14) goto LAB_00237194;
          }
          lVar32 = (long)iVar22;
          cVar8 = *(char *)(param_3 + lVar32);
          if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
            cVar8 = *(char *)(param_1 + lVar32);
          }
          *(char *)(param_5 + lVar32) = cVar8;
          if (iVar22 + 1 < iVar9) {
            lVar32 = (long)(iVar22 + 1);
            cVar8 = *(char *)(param_3 + lVar32);
            if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
              cVar8 = *(char *)(param_1 + lVar32);
            }
            *(char *)(param_5 + lVar32) = cVar8;
            if (iVar22 + 2 < iVar9) {
              lVar32 = (long)(iVar22 + 2);
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              *(char *)(param_5 + lVar32) = cVar8;
              if (iVar22 + 3 < iVar9) {
                lVar32 = (long)(iVar22 + 3);
                cVar8 = *(char *)(param_3 + lVar32);
                if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                  cVar8 = *(char *)(param_1 + lVar32);
                }
                *(char *)(param_5 + lVar32) = cVar8;
                if (iVar22 + 4 < iVar9) {
                  lVar32 = (long)(iVar22 + 4);
                  cVar8 = *(char *)(param_3 + lVar32);
                  if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                    cVar8 = *(char *)(param_1 + lVar32);
                  }
                  *(char *)(param_5 + lVar32) = cVar8;
                  if (iVar22 + 5 < iVar9) {
                    lVar32 = (long)(iVar22 + 5);
                    cVar8 = *(char *)(param_3 + lVar32);
                    if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                      cVar8 = *(char *)(param_1 + lVar32);
                    }
                    *(char *)(param_5 + lVar32) = cVar8;
                    if (iVar22 + 6 < iVar9) {
                      lVar32 = (long)(iVar22 + 6);
                      cVar8 = *(char *)(param_3 + lVar32);
                      if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                        cVar8 = *(char *)(param_1 + lVar32);
                      }
                      *(char *)(param_5 + lVar32) = cVar8;
                      if (iVar22 + 7 < iVar9) {
                        lVar32 = (long)(iVar22 + 7);
                        cVar8 = *(char *)(param_3 + lVar32);
                        if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                          cVar8 = *(char *)(param_1 + lVar32);
                        }
                        *(char *)(param_5 + lVar32) = cVar8;
                        if (iVar22 + 8 < iVar9) {
                          lVar32 = (long)(iVar22 + 8);
                          cVar8 = *(char *)(param_3 + lVar32);
                          if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                            cVar8 = *(char *)(param_1 + lVar32);
                          }
                          *(char *)(param_5 + lVar32) = cVar8;
                          if (iVar22 + 9 < iVar9) {
                            lVar32 = (long)(iVar22 + 9);
                            cVar8 = *(char *)(param_3 + lVar32);
                            if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                              cVar8 = *(char *)(param_1 + lVar32);
                            }
                            *(char *)(param_5 + lVar32) = cVar8;
                            if (iVar22 + 10 < iVar9) {
                              lVar32 = (long)(iVar22 + 10);
                              cVar8 = *(char *)(param_3 + lVar32);
                              if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                cVar8 = *(char *)(param_1 + lVar32);
                              }
                              *(char *)(param_5 + lVar32) = cVar8;
                              if (iVar22 + 0xb < iVar9) {
                                lVar32 = (long)(iVar22 + 0xb);
                                cVar8 = *(char *)(param_3 + lVar32);
                                if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                  cVar8 = *(char *)(param_1 + lVar32);
                                }
                                *(char *)(param_5 + lVar32) = cVar8;
                                if (iVar22 + 0xc < iVar9) {
                                  lVar32 = (long)(iVar22 + 0xc);
                                  cVar8 = *(char *)(param_3 + lVar32);
                                  if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                    cVar8 = *(char *)(param_1 + lVar32);
                                  }
                                  *(char *)(param_5 + lVar32) = cVar8;
                                  if (iVar22 + 0xd < iVar9) {
                                    lVar32 = (long)(iVar22 + 0xd);
                                    cVar8 = *(char *)(param_3 + lVar32);
                                    if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32)) {
                                      cVar8 = *(char *)(param_1 + lVar32);
                                    }
                                    *(char *)(param_5 + lVar32) = cVar8;
                                    if (iVar22 + 0xe < iVar9) {
                                      lVar32 = (long)(iVar22 + 0xe);
                                      cVar8 = *(char *)(param_3 + lVar32);
                                      if (*(char *)(param_3 + lVar32) < *(char *)(param_1 + lVar32))
                                      {
                                        cVar8 = *(char *)(param_1 + lVar32);
                                      }
                                      *(char *)(param_5 + lVar32) = cVar8;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00237194:
      iVar33 = iVar33 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar33 != 0);
  }
  return;
}


==================================================================

### FUNC 0023729c (488 bytes) name=FUN_0023729c

void FUN_0023729c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  byte *pbVar1;
  int iVar2;
  char cVar3;
  byte bVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  int iVar9;
  undefined *puVar10;
  undefined1 (*pauVar11) [16];
  byte *pbVar12;
  long lVar13;
  undefined8 *puVar14;
  char *pcVar15;
  undefined1 (*pauVar16) [16];
  byte *pbVar17;
  undefined1 (*pauVar18) [16];
  long lVar19;
  undefined1 (*pauVar20) [16];
  int iVar21;
  long lVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  
  iVar21 = param_7[1];
  iVar2 = *param_7;
  if (iVar21 != 0) {
    uVar7 = iVar2 - 0x20;
    iVar5 = ((uVar7 >> 5) + 1) * 0x20;
    if ((int)uVar7 < 0) {
      iVar5 = 0;
    }
    uVar6 = (uint)((iVar2 + -4) - iVar5) >> 2;
    lVar22 = (long)iVar5;
    do {
      if (-1 < (int)uVar7) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar16 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar14 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar20 = pauVar11 + -1;
          pauVar18 = pauVar16 + -1;
          auVar23 = *pauVar11;
          pauVar11 = pauVar11 + 2;
          auVar8 = *pauVar16;
          pauVar16 = pauVar16 + 2;
          auVar24 = NEON_umax(*pauVar20,*pauVar18,1);
          auVar23 = NEON_umax(auVar23,auVar8,1);
          puVar14[-1] = auVar24._8_8_;
          puVar14[-2] = auVar24._0_8_;
          puVar14[1] = auVar23._8_8_;
          *puVar14 = auVar23._0_8_;
          puVar14 = puVar14 + 4;
        } while (pauVar11 != (undefined1 (*) [16])(param_1 + (ulong)(uVar7 >> 5) * 0x20 + 0x30));
      }
      iVar9 = iVar5;
      if (iVar5 < iVar2 + -3) {
        pbVar12 = (byte *)(param_1 + lVar22);
        pcVar15 = (char *)(param_5 + lVar22);
        pbVar17 = (byte *)(param_3 + lVar22);
        do {
          puVar10 = PTR_DAT_00501c00;
          pbVar1 = pbVar12 + 4;
          bVar4 = pbVar12[1];
          cVar3 = PTR_DAT_00501c00[(int)(((uint)pbVar17[1] - (uint)bVar4) + 0x100)];
          *pcVar15 = *pbVar12 + PTR_DAT_00501c00[(int)(((uint)*pbVar17 - (uint)*pbVar12) + 0x100)];
          pcVar15[1] = bVar4 + cVar3;
          bVar4 = pbVar12[2];
          cVar3 = puVar10[(int)(((uint)pbVar17[2] - (uint)bVar4) + 0x100)];
          pcVar15[3] = pbVar12[3] + puVar10[(int)(((uint)pbVar17[3] - (uint)pbVar12[3]) + 0x100)];
          pcVar15[2] = bVar4 + cVar3;
          pbVar12 = pbVar1;
          pcVar15 = pcVar15 + 4;
          pbVar17 = pbVar17 + 4;
          iVar9 = iVar5 + 4 + uVar6 * 4;
        } while (pbVar1 != (byte *)(param_1 + lVar22 + 4 + (ulong)uVar6 * 4));
      }
      lVar19 = (long)iVar9;
      if (iVar9 < iVar2) {
        lVar13 = 0;
        do {
          bVar4 = *(byte *)(param_1 + lVar19 + lVar13);
          *(byte *)(param_5 + lVar19 + lVar13) =
               bVar4 + PTR_DAT_00501c00
                       [(int)(((uint)*(byte *)(param_3 + lVar19 + lVar13) - (uint)bVar4) + 0x100)];
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar2 + -1) - iVar9) + 1);
      }
      iVar21 = iVar21 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 00237484 (1092 bytes) name=FUN_00237484

void FUN_00237484(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  long lVar1;
  float *pfVar2;
  int iVar3;
  ulong uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [12];
  undefined1 (*pauVar15) [12];
  undefined1 *puVar16;
  undefined1 (*pauVar17) [16];
  long lVar18;
  undefined8 *puVar19;
  ulong uVar20;
  float *pfVar21;
  uint uVar22;
  float *pfVar23;
  int iVar24;
  undefined1 (*pauVar25) [12];
  float *pfVar26;
  long lVar27;
  uint uVar28;
  undefined1 (*pauVar29) [16];
  int iVar30;
  long lVar31;
  long lVar32;
  float fVar33;
  float fVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  float fVar38;
  long lVar39;
  
  iVar30 = param_7[1];
  iVar7 = *param_7;
  if (iVar30 != 0) {
    uVar10 = iVar7 - 8U >> 3;
    iVar8 = (uVar10 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar31 = ((long)iVar8 + 0x10) * 4;
    lVar32 = lVar31 + -0x40;
    lVar39 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
    iVar3 = iVar8 + 4 + uVar11 * 4;
    do {
      if (0 < iVar7 + -7) {
        pauVar17 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar25 = (undefined1 (*) [12])(param_3 + 0x10);
        puVar19 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar29 = pauVar17 + -1;
          pauVar15 = pauVar25 + -2;
          auVar12 = *pauVar17;
          pauVar17 = pauVar17 + 2;
          puVar16 = *pauVar25;
          auVar14 = *pauVar25;
          pauVar25 = (undefined1 (*) [12])(pauVar25[2] + 8);
          auVar37 = NEON_fmin(*pauVar29,*(undefined1 (*) [16])(*pauVar15 + 8),4);
          auVar35._12_4_ = (int)((ulong)*(undefined8 *)(puVar16 + 8) >> 0x20);
          auVar35._0_12_ = auVar14;
          auVar35 = NEON_fmin(auVar12,auVar35,4);
          puVar19[-1] = auVar37._8_8_;
          puVar19[-2] = auVar37._0_8_;
          puVar19[1] = auVar35._8_8_;
          *puVar19 = auVar35._0_8_;
          puVar19 = puVar19 + 4;
        } while (pauVar17 != (undefined1 (*) [16])(param_1 + (ulong)uVar10 * 0x20 + 0x30));
      }
      iVar9 = iVar8;
      if (iVar8 < iVar7 + -3) {
        pfVar21 = (float *)(param_1 + lVar32);
        pfVar23 = (float *)(param_5 + lVar32);
        pfVar26 = (float *)(param_3 + lVar32);
        iVar9 = iVar3;
        if ((pfVar21 < (float *)(param_5 + lVar31) && pfVar23 < (float *)(param_1 + lVar31) ||
             pfVar26 < (float *)(param_5 + lVar31) && pfVar23 < (float *)(param_3 + lVar31)) ||
           (uVar11 + 1 < 5)) {
          do {
            fVar38 = pfVar21[1];
            fVar34 = pfVar26[1];
            fVar33 = *pfVar26;
            if (*pfVar21 <= *pfVar26) {
              fVar33 = *pfVar21;
            }
            *pfVar23 = fVar33;
            if (fVar38 <= fVar34) {
              fVar34 = fVar38;
            }
            pfVar23[1] = fVar34;
            pfVar2 = pfVar21 + 4;
            fVar38 = pfVar21[3];
            fVar34 = pfVar26[3];
            fVar33 = pfVar26[2];
            if (pfVar21[2] <= pfVar26[2]) {
              fVar33 = pfVar21[2];
            }
            pfVar23[2] = fVar33;
            if (fVar38 <= fVar34) {
              fVar34 = fVar38;
            }
            pfVar23[3] = fVar34;
            pfVar21 = pfVar2;
            pfVar23 = pfVar23 + 4;
            pfVar26 = pfVar26 + 4;
          } while (pfVar2 != (float *)(param_1 + lVar39));
        }
        else {
          lVar18 = 0;
          uVar22 = 0;
          do {
            pauVar25 = (undefined1 (*) [12])((long)pfVar26 + lVar18);
            puVar19 = (undefined8 *)((long)pfVar23 + lVar18);
            uVar22 = uVar22 + 1;
            auVar35 = *(undefined1 (*) [16])((long)pfVar21 + lVar18);
            fVar33 = (float)((ulong)*(undefined8 *)(*pauVar25 + 8) >> 0x20);
            lVar18 = lVar18 + 0x10;
            auVar37._0_4_ = -(uint)((float)*(undefined8 *)*pauVar25 < auVar35._0_4_);
            auVar37._4_4_ =
                 -(uint)((float)((ulong)*(undefined8 *)*pauVar25 >> 0x20) < auVar35._4_4_);
            auVar37._8_4_ = -(uint)((float)*(undefined8 *)(*pauVar25 + 8) < auVar35._8_4_);
            auVar37._12_4_ = -(uint)(fVar33 < auVar35._12_4_);
            auVar12._12_4_ = fVar33;
            auVar12._0_12_ = *pauVar25;
            auVar35 = auVar35 ^ (auVar35 ^ auVar12) & auVar37;
            puVar19[1] = auVar35._8_8_;
            *puVar19 = auVar35._0_8_;
          } while (uVar22 < uVar11 + 1);
        }
      }
      if (iVar9 < iVar7) {
        uVar22 = iVar7 - iVar9;
        lVar27 = ((long)iVar9 + 4) * 4;
        lVar18 = lVar27 + -0x10;
        uVar20 = param_5 + lVar18;
        uVar4 = param_1 + lVar18;
        if ((uVar20 < (ulong)(param_1 + lVar27) && uVar4 < (ulong)(param_5 + lVar27) ||
             (ulong)(param_3 + lVar18) < (ulong)(param_5 + lVar27) &&
             uVar20 < (ulong)(param_3 + lVar27)) || (uVar22 < 8)) {
          lVar27 = 0;
          do {
            fVar33 = *(float *)(param_3 + lVar18 + lVar27);
            if (*(float *)(uVar4 + lVar27) <= fVar33) {
              fVar33 = *(float *)(uVar4 + lVar27);
            }
            *(float *)(uVar20 + lVar27) = fVar33;
            lVar27 = lVar27 + 4;
          } while (lVar27 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
        }
        else {
          uVar5 = -((uint)(uVar4 >> 2) & 3) & 3;
          uVar6 = uVar22;
          if (uVar5 < uVar22) {
            uVar6 = uVar5;
          }
          iVar24 = iVar9;
          if (uVar6 != 0) {
            lVar27 = (long)iVar9 * 4;
            fVar33 = *(float *)(param_3 + lVar27);
            if (*(float *)(param_1 + lVar27) <= *(float *)(param_3 + lVar27)) {
              fVar33 = *(float *)(param_1 + lVar27);
            }
            iVar24 = iVar9 + 1;
            *(float *)(param_5 + lVar27) = fVar33;
            if (uVar6 != 1) {
              lVar1 = lVar27 + 4;
              fVar33 = *(float *)(param_3 + lVar1);
              if (*(float *)(param_1 + lVar1) <= *(float *)(param_3 + lVar1)) {
                fVar33 = *(float *)(param_1 + lVar1);
              }
              iVar24 = iVar9 + 2;
              *(float *)(param_5 + lVar1) = fVar33;
              if (uVar6 == 3) {
                lVar27 = lVar27 + 8;
                fVar33 = *(float *)(param_3 + lVar27);
                if (*(float *)(param_1 + lVar27) <= *(float *)(param_3 + lVar27)) {
                  fVar33 = *(float *)(param_1 + lVar27);
                }
                iVar24 = iVar9 + 3;
                *(float *)(param_5 + lVar27) = fVar33;
              }
            }
          }
          uVar28 = 0;
          lVar18 = lVar18 + (ulong)uVar6 * 4;
          uVar5 = ((uVar22 - uVar6) - 4 >> 2) + 1;
          iVar9 = uVar5 * 4;
          puVar19 = (undefined8 *)(param_5 + lVar18);
          pauVar25 = (undefined1 (*) [12])(param_3 + lVar18);
          pauVar17 = (undefined1 (*) [16])(param_1 + lVar18);
          do {
            auVar35 = *pauVar17;
            uVar28 = uVar28 + 1;
            fVar33 = (float)((ulong)*(undefined8 *)(*pauVar25 + 8) >> 0x20);
            auVar36._0_4_ = -(uint)((float)*(undefined8 *)*pauVar25 < auVar35._0_4_);
            auVar36._4_4_ =
                 -(uint)((float)((ulong)*(undefined8 *)*pauVar25 >> 0x20) < auVar35._4_4_);
            auVar36._8_4_ = -(uint)((float)*(undefined8 *)(*pauVar25 + 8) < auVar35._8_4_);
            auVar36._12_4_ = -(uint)(fVar33 < auVar35._12_4_);
            auVar13._12_4_ = fVar33;
            auVar13._0_12_ = *pauVar25;
            auVar35 = auVar35 ^ (auVar35 ^ auVar13) & auVar36;
            puVar19[1] = auVar35._8_8_;
            *puVar19 = auVar35._0_8_;
            puVar19 = puVar19 + 2;
            pauVar25 = (undefined1 (*) [12])(pauVar25[1] + 4);
            pauVar17 = pauVar17 + 1;
          } while (uVar28 < uVar5);
          uVar5 = iVar24 + iVar9;
          if (uVar22 - uVar6 != iVar9) {
            uVar20 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
            fVar33 = *(float *)(param_3 + uVar20);
            if (*(float *)(param_1 + uVar20) <= *(float *)(param_3 + uVar20)) {
              fVar33 = *(float *)(param_1 + uVar20);
            }
            *(float *)(param_5 + uVar20) = fVar33;
            if ((int)(uVar5 + 1) < iVar7) {
              lVar18 = uVar20 + 4;
              fVar33 = *(float *)(param_3 + lVar18);
              if (*(float *)(param_1 + lVar18) <= *(float *)(param_3 + lVar18)) {
                fVar33 = *(float *)(param_1 + lVar18);
              }
              *(float *)(param_5 + lVar18) = fVar33;
              if ((int)(uVar5 + 2) < iVar7) {
                lVar18 = uVar20 + 8;
                fVar33 = *(float *)(param_3 + lVar18);
                if (*(float *)(param_1 + lVar18) <= *(float *)(param_3 + lVar18)) {
                  fVar33 = *(float *)(param_1 + lVar18);
                }
                *(float *)(param_5 + lVar18) = fVar33;
              }
            }
          }
        }
      }
      iVar30 = iVar30 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar30 != 0);
  }
  return;
}


==================================================================

### FUNC 002378c8 (1008 bytes) name=FUN_002378c8

void FUN_002378c8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined1 auVar13 [16];
  undefined1 (*pauVar14) [16];
  undefined8 *puVar15;
  ulong uVar16;
  int iVar17;
  int *piVar18;
  undefined1 (*pauVar19) [16];
  uint uVar20;
  long lVar21;
  uint uVar22;
  undefined1 (*pauVar23) [16];
  undefined1 (*pauVar24) [16];
  int iVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  long lVar31;
  
  iVar25 = param_7[1];
  iVar6 = *param_7;
  if (iVar25 != 0) {
    uVar11 = iVar6 - 8U >> 3;
    iVar9 = (uVar11 + 1) * 8;
    if (iVar6 + -7 < 1) {
      iVar9 = 0;
    }
    uVar12 = (uint)((iVar6 + -4) - iVar9) >> 2;
    lVar26 = ((long)iVar9 + 0x10) * 4;
    lVar27 = lVar26 + -0x40;
    lVar31 = NEON_shl((long)iVar9 + 4 + (ulong)uVar12 * 4,2);
    iVar3 = iVar9 + 4 + uVar12 * 4;
    do {
      if (0 < iVar6 + -7) {
        pauVar14 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar19 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar15 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar24 = pauVar14 + -1;
          pauVar23 = pauVar19 + -1;
          auVar29 = *pauVar14;
          pauVar14 = pauVar14 + 2;
          auVar13 = *pauVar19;
          pauVar19 = pauVar19 + 2;
          auVar30 = NEON_smin(*pauVar24,*pauVar23,4);
          auVar29 = NEON_smin(auVar29,auVar13,4);
          puVar15[-1] = auVar30._8_8_;
          puVar15[-2] = auVar30._0_8_;
          puVar15[1] = auVar29._8_8_;
          *puVar15 = auVar29._0_8_;
          puVar15 = puVar15 + 4;
        } while (pauVar14 != (undefined1 (*) [16])(param_1 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar10 = iVar9;
      if (iVar9 < iVar6 + -3) {
        pauVar14 = (undefined1 (*) [16])(param_1 + lVar27);
        piVar18 = (int *)(param_5 + lVar27);
        pauVar19 = (undefined1 (*) [16])(param_3 + lVar27);
        iVar10 = iVar3;
        if ((pauVar14 < (undefined1 (*) [16])(param_5 + lVar26) &&
             piVar18 < (int *)(param_1 + lVar26) ||
             pauVar19 < (undefined1 (*) [16])(param_5 + lVar26) &&
             piVar18 < (int *)(param_3 + lVar26)) || (uVar12 + 1 < 4)) {
          do {
            pauVar23 = pauVar14 + 1;
            iVar7 = *(int *)*pauVar14;
            iVar8 = *(int *)*pauVar19;
            iVar17 = *(int *)(*pauVar19 + 4);
            if (*(int *)(*pauVar14 + 4) < *(int *)(*pauVar19 + 4)) {
              iVar17 = *(int *)(*pauVar14 + 4);
            }
            piVar18[1] = iVar17;
            if (iVar7 < iVar8) {
              iVar8 = iVar7;
            }
            *piVar18 = iVar8;
            iVar7 = *(int *)(*pauVar14 + 8);
            iVar8 = *(int *)(*pauVar19 + 8);
            iVar17 = *(int *)(*pauVar19 + 0xc);
            if (*(int *)(*pauVar14 + 0xc) < *(int *)(*pauVar19 + 0xc)) {
              iVar17 = *(int *)(*pauVar14 + 0xc);
            }
            piVar18[3] = iVar17;
            if (iVar7 < iVar8) {
              iVar8 = iVar7;
            }
            piVar18[2] = iVar8;
            pauVar14 = pauVar23;
            piVar18 = piVar18 + 4;
            pauVar19 = pauVar19 + 1;
          } while (pauVar23 != (undefined1 (*) [16])(param_1 + lVar31));
        }
        else {
          uVar20 = 0;
          do {
            uVar20 = uVar20 + 1;
            auVar29 = NEON_smin(*pauVar19,*pauVar14,4);
            *(long *)(piVar18 + 2) = auVar29._8_8_;
            *(long *)piVar18 = auVar29._0_8_;
            pauVar14 = pauVar14 + 1;
            piVar18 = piVar18 + 4;
            pauVar19 = pauVar19 + 1;
          } while (uVar20 < uVar12 + 1);
        }
      }
      if (iVar10 < iVar6) {
        uVar20 = iVar6 - iVar10;
        lVar21 = ((long)iVar10 + 4) * 4;
        lVar28 = lVar21 + -0x10;
        uVar16 = param_5 + lVar28;
        uVar4 = param_1 + lVar28;
        if ((uVar16 < (ulong)(param_1 + lVar21) && uVar4 < (ulong)(param_5 + lVar21) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar21) &&
             uVar16 < (ulong)(param_3 + lVar21)) || (uVar20 < 9)) {
          lVar21 = 0;
          do {
            iVar17 = *(int *)(param_3 + lVar28 + lVar21);
            if (*(int *)(uVar4 + lVar21) < iVar17) {
              iVar17 = *(int *)(uVar4 + lVar21);
            }
            *(int *)(uVar16 + lVar21) = iVar17;
            lVar21 = lVar21 + 4;
          } while (lVar21 != ((ulong)(uint)((iVar6 + -1) - iVar10) + 1) * 4);
        }
        else {
          uVar5 = -((uint)(uVar4 >> 2) & 3) & 3;
          if (uVar20 < uVar5) {
            uVar5 = uVar20;
          }
          iVar17 = iVar10;
          if (uVar5 != 0) {
            lVar21 = (long)iVar10 * 4;
            iVar17 = iVar10 + 1;
            iVar8 = *(int *)(param_3 + lVar21);
            if (*(int *)(param_1 + lVar21) < *(int *)(param_3 + lVar21)) {
              iVar8 = *(int *)(param_1 + lVar21);
            }
            *(int *)(param_5 + lVar21) = iVar8;
            if (uVar5 != 1) {
              lVar2 = lVar21 + 4;
              iVar17 = iVar10 + 2;
              iVar8 = *(int *)(param_3 + lVar2);
              if (*(int *)(param_1 + lVar2) < *(int *)(param_3 + lVar2)) {
                iVar8 = *(int *)(param_1 + lVar2);
              }
              *(int *)(param_5 + lVar2) = iVar8;
              if (uVar5 == 3) {
                lVar21 = lVar21 + 8;
                iVar17 = iVar10 + 3;
                iVar10 = *(int *)(param_3 + lVar21);
                if (*(int *)(param_1 + lVar21) < *(int *)(param_3 + lVar21)) {
                  iVar10 = *(int *)(param_1 + lVar21);
                }
                *(int *)(param_5 + lVar21) = iVar10;
              }
            }
          }
          uVar22 = 0;
          lVar28 = lVar28 + (ulong)uVar5 * 4;
          uVar1 = ((uVar20 - uVar5) - 4 >> 2) + 1;
          iVar10 = uVar1 * 4;
          puVar15 = (undefined8 *)(param_5 + lVar28);
          pauVar14 = (undefined1 (*) [16])(param_3 + lVar28);
          pauVar19 = (undefined1 (*) [16])(param_1 + lVar28);
          do {
            uVar22 = uVar22 + 1;
            auVar29 = NEON_smin(*pauVar14,*pauVar19,4);
            puVar15[1] = auVar29._8_8_;
            *puVar15 = auVar29._0_8_;
            puVar15 = puVar15 + 2;
            pauVar14 = pauVar14 + 1;
            pauVar19 = pauVar19 + 1;
          } while (uVar22 < uVar1);
          uVar1 = iVar17 + iVar10;
          if (uVar20 - uVar5 != iVar10) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            iVar10 = *(int *)(param_3 + uVar16);
            if (*(int *)(param_1 + uVar16) < *(int *)(param_3 + uVar16)) {
              iVar10 = *(int *)(param_1 + uVar16);
            }
            *(int *)(param_5 + uVar16) = iVar10;
            if ((int)(uVar1 + 1) < iVar6) {
              lVar28 = uVar16 + 4;
              iVar10 = *(int *)(param_3 + lVar28);
              if (*(int *)(param_1 + lVar28) < *(int *)(param_3 + lVar28)) {
                iVar10 = *(int *)(param_1 + lVar28);
              }
              *(int *)(param_5 + lVar28) = iVar10;
              if ((int)(uVar1 + 2) < iVar6) {
                lVar28 = uVar16 + 8;
                iVar10 = *(int *)(param_3 + lVar28);
                if (*(int *)(param_1 + lVar28) < *(int *)(param_3 + lVar28)) {
                  iVar10 = *(int *)(param_1 + lVar28);
                }
                *(int *)(param_5 + lVar28) = iVar10;
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 00237cb8 (1564 bytes) name=FUN_00237cb8

void FUN_00237cb8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  ulong uVar5;
  ulong uVar6;
  uint uVar7;
  short sVar8;
  int iVar9;
  short sVar10;
  short sVar11;
  short sVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined1 auVar17 [16];
  undefined1 *puVar18;
  undefined1 (*pauVar19) [16];
  undefined1 (*pauVar20) [16];
  ulong uVar21;
  undefined8 *puVar22;
  ulong uVar23;
  int iVar24;
  short *psVar25;
  uint uVar26;
  undefined1 (*pauVar27) [16];
  long lVar28;
  undefined1 (*pauVar29) [16];
  int iVar30;
  long lVar31;
  long lVar32;
  uint uVar33;
  long lVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  long lVar37;
  
  iVar30 = param_7[1];
  iVar9 = *param_7;
  if (iVar30 != 0) {
    uVar15 = iVar9 - 0x10;
    uVar13 = ((uVar15 >> 4) + 1) * 0x10;
    if ((int)uVar15 < 0) {
      uVar13 = 0;
    }
    uVar16 = (iVar9 + -4) - uVar13;
    lVar31 = ((long)(int)uVar13 + 0x20) * 2;
    lVar32 = lVar31 + -0x40;
    uVar14 = uVar16 >> 2;
    uVar1 = (uVar14 - 1 >> 1) + 1;
    uVar4 = uVar13 + 4 + uVar14 * 4;
    lVar37 = NEON_shl((long)(int)uVar13 + 4 + (ulong)uVar14 * 4,1);
    do {
      if (-1 < (int)uVar15) {
        pauVar19 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar20 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar22 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar29 = pauVar19 + -1;
          pauVar27 = pauVar20 + -1;
          auVar35 = *pauVar19;
          pauVar19 = pauVar19 + 2;
          auVar17 = *pauVar20;
          pauVar20 = pauVar20 + 2;
          auVar36 = NEON_smin(*pauVar29,*pauVar27,2);
          auVar35 = NEON_smin(auVar35,auVar17,2);
          puVar22[-1] = auVar36._8_8_;
          puVar22[-2] = auVar36._0_8_;
          puVar22[1] = auVar35._8_8_;
          *puVar22 = auVar35._0_8_;
          puVar22 = puVar22 + 4;
        } while (pauVar19 != (undefined1 (*) [16])(param_1 + (ulong)(uVar15 >> 4) * 0x20 + 0x30));
      }
      uVar2 = uVar13;
      if ((int)uVar13 < iVar9 + -3) {
        pauVar19 = (undefined1 (*) [16])(param_1 + lVar32);
        psVar25 = (short *)(param_5 + lVar32);
        pauVar20 = (undefined1 (*) [16])(param_3 + lVar32);
        uVar2 = uVar4;
        if ((pauVar19 < (undefined1 (*) [16])(param_5 + lVar31) &&
             psVar25 < (short *)(param_1 + lVar31) ||
             pauVar20 < (undefined1 (*) [16])(param_5 + lVar31) &&
             psVar25 < (short *)(param_3 + lVar31)) || (uVar14 + 1 < 4)) {
          do {
            puVar18 = *pauVar19;
            sVar11 = *(short *)*pauVar19;
            sVar12 = *(short *)*pauVar20;
            sVar10 = *(short *)*pauVar20;
            sVar8 = *(short *)(*pauVar20 + 2);
            if (*(short *)(*pauVar19 + 2) < *(short *)(*pauVar20 + 2)) {
              sVar8 = *(short *)(*pauVar19 + 2);
            }
            psVar25[1] = sVar8;
            if (sVar11 < sVar10) {
              sVar12 = sVar11;
            }
            *psVar25 = sVar12;
            sVar10 = *(short *)(*pauVar19 + 4);
            sVar12 = *(short *)(*pauVar20 + 4);
            sVar8 = *(short *)(*pauVar20 + 6);
            if (*(short *)(*pauVar19 + 6) < *(short *)(*pauVar20 + 6)) {
              sVar8 = *(short *)(*pauVar19 + 6);
            }
            sVar11 = *(short *)(*pauVar20 + 4);
            psVar25[3] = sVar8;
            if (sVar10 < sVar11) {
              sVar12 = sVar10;
            }
            psVar25[2] = sVar12;
            pauVar20 = (undefined1 (*) [16])(*pauVar20 + 8);
            pauVar19 = (undefined1 (*) [16])(puVar18 + 8);
            psVar25 = psVar25 + 4;
          } while ((undefined1 (*) [16])(puVar18 + 8) != (undefined1 (*) [16])(param_1 + lVar37));
        }
        else {
          uVar26 = uVar13;
          if (3 < uVar16) {
            uVar26 = 0;
            do {
              uVar26 = uVar26 + 1;
              auVar35 = NEON_smin(*pauVar20,*pauVar19,2);
              *(long *)(psVar25 + 4) = auVar35._8_8_;
              *(long *)psVar25 = auVar35._0_8_;
              pauVar20 = pauVar20 + 1;
              pauVar19 = pauVar19 + 1;
              psVar25 = psVar25 + 8;
            } while (uVar26 < uVar1);
            uVar26 = uVar13 + uVar1 * 8;
            if (uVar14 + 1 == uVar1 * 2) goto LAB_00237ed0;
          }
          uVar21 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar26 << 1;
          lVar34 = uVar21 + 2;
          lVar28 = uVar21 + 4;
          lVar3 = uVar21 + 6;
          sVar8 = *(short *)(param_3 + lVar34);
          if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
            sVar8 = *(short *)(param_1 + lVar34);
          }
          sVar12 = *(short *)(param_3 + uVar21);
          if (*(short *)(param_1 + uVar21) < *(short *)(param_3 + uVar21)) {
            sVar12 = *(short *)(param_1 + uVar21);
          }
          *(short *)(param_5 + uVar21) = sVar12;
          *(short *)(param_5 + lVar34) = sVar8;
          sVar8 = *(short *)(param_3 + lVar3);
          if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
            sVar8 = *(short *)(param_1 + lVar3);
          }
          sVar12 = *(short *)(param_3 + lVar28);
          if (*(short *)(param_1 + lVar28) < *(short *)(param_3 + lVar28)) {
            sVar12 = *(short *)(param_1 + lVar28);
          }
          *(short *)(param_5 + lVar28) = sVar12;
          *(short *)(param_5 + lVar3) = sVar8;
        }
      }
LAB_00237ed0:
      uVar21 = (ulong)uVar2;
      if ((int)uVar2 < iVar9) {
        uVar26 = iVar9 - uVar2;
        lVar28 = ((long)(int)uVar2 + 8) * 2;
        lVar34 = lVar28 + -0x10;
        uVar23 = param_5 + lVar34;
        uVar5 = param_1 + lVar34;
        uVar6 = param_3 + lVar34;
        if ((uVar23 < (ulong)(param_1 + lVar28) && uVar5 < (ulong)(param_5 + lVar28) ||
             uVar6 < (ulong)(param_5 + lVar28) && uVar23 < (ulong)(param_3 + lVar28)) ||
           (uVar26 < 0xc)) {
          lVar34 = 0;
          do {
            sVar8 = *(short *)(uVar6 + lVar34);
            if (*(short *)(uVar5 + lVar34) < *(short *)(uVar6 + lVar34)) {
              sVar8 = *(short *)(uVar5 + lVar34);
            }
            *(short *)(uVar23 + lVar34) = sVar8;
            lVar34 = lVar34 + 2;
          } while (lVar34 != ((ulong)((iVar9 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar7 = -((uint)(uVar5 >> 1) & 7) & 7;
          if (uVar26 < uVar7) {
            uVar7 = uVar26;
          }
          if (uVar7 != 0) {
            lVar28 = (long)(int)uVar2 * 2;
            uVar33 = uVar2 + 1;
            sVar8 = *(short *)(param_3 + lVar28);
            if (*(short *)(param_1 + lVar28) < *(short *)(param_3 + lVar28)) {
              sVar8 = *(short *)(param_1 + lVar28);
            }
            *(short *)(param_5 + lVar28) = sVar8;
            if (uVar7 != 1) {
              lVar3 = lVar28 + 2;
              uVar33 = uVar2 + 2;
              sVar8 = *(short *)(param_3 + lVar3);
              if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
                sVar8 = *(short *)(param_1 + lVar3);
              }
              *(short *)(param_5 + lVar3) = sVar8;
              if (uVar7 != 2) {
                lVar3 = lVar28 + 4;
                uVar33 = uVar2 + 3;
                sVar8 = *(short *)(param_3 + lVar3);
                if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
                  sVar8 = *(short *)(param_1 + lVar3);
                }
                *(short *)(param_5 + lVar3) = sVar8;
                if (uVar7 != 3) {
                  lVar3 = lVar28 + 6;
                  uVar33 = uVar2 + 4;
                  sVar8 = *(short *)(param_3 + lVar3);
                  if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
                    sVar8 = *(short *)(param_1 + lVar3);
                  }
                  *(short *)(param_5 + lVar3) = sVar8;
                  if (uVar7 != 4) {
                    lVar3 = lVar28 + 8;
                    uVar33 = uVar2 + 5;
                    sVar8 = *(short *)(param_3 + lVar3);
                    if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
                      sVar8 = *(short *)(param_1 + lVar3);
                    }
                    *(short *)(param_5 + lVar3) = sVar8;
                    if (uVar7 != 5) {
                      lVar3 = lVar28 + 10;
                      uVar33 = uVar2 + 6;
                      sVar8 = *(short *)(param_3 + lVar3);
                      if (*(short *)(param_1 + lVar3) < *(short *)(param_3 + lVar3)) {
                        sVar8 = *(short *)(param_1 + lVar3);
                      }
                      *(short *)(param_5 + lVar3) = sVar8;
                      if (uVar7 == 7) {
                        lVar28 = lVar28 + 0xc;
                        uVar21 = (ulong)(uVar2 + 7);
                        sVar8 = *(short *)(param_3 + lVar28);
                        if (*(short *)(param_1 + lVar28) < *(short *)(param_3 + lVar28)) {
                          sVar8 = *(short *)(param_1 + lVar28);
                        }
                        *(short *)(param_5 + lVar28) = sVar8;
                        goto LAB_00238064;
                      }
                    }
                  }
                }
              }
            }
            uVar21 = (ulong)uVar33;
          }
LAB_00238064:
          uVar2 = ((uVar26 - uVar7) - 8 >> 3) + 1;
          iVar24 = uVar2 * 8;
          if (6 < (uVar26 - 1) - uVar7) {
            lVar34 = lVar34 + (ulong)uVar7 * 2;
            uVar33 = 0;
            puVar22 = (undefined8 *)(param_5 + lVar34);
            pauVar19 = (undefined1 (*) [16])(param_3 + lVar34);
            pauVar20 = (undefined1 (*) [16])(param_1 + lVar34);
            do {
              uVar33 = uVar33 + 1;
              auVar35 = NEON_smin(*pauVar19,*pauVar20,2);
              puVar22[1] = auVar35._8_8_;
              *puVar22 = auVar35._0_8_;
              puVar22 = puVar22 + 2;
              pauVar19 = pauVar19 + 1;
              pauVar20 = pauVar20 + 1;
            } while (uVar33 < uVar2);
            uVar21 = (ulong)(uint)((int)uVar21 + iVar24);
            if (uVar26 - uVar7 == iVar24) goto LAB_002381d0;
          }
          uVar23 = -(uVar21 >> 0x1f) & 0xfffffffe00000000 | uVar21 << 1;
          iVar24 = (int)uVar21;
          sVar8 = *(short *)(param_3 + uVar23);
          if (*(short *)(param_1 + uVar23) < *(short *)(param_3 + uVar23)) {
            sVar8 = *(short *)(param_1 + uVar23);
          }
          *(short *)(param_5 + uVar23) = sVar8;
          if (iVar24 + 1 < iVar9) {
            lVar34 = uVar23 + 2;
            sVar8 = *(short *)(param_3 + lVar34);
            if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
              sVar8 = *(short *)(param_1 + lVar34);
            }
            *(short *)(param_5 + lVar34) = sVar8;
            if (iVar24 + 2 < iVar9) {
              lVar34 = uVar23 + 4;
              sVar8 = *(short *)(param_3 + lVar34);
              if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
                sVar8 = *(short *)(param_1 + lVar34);
              }
              *(short *)(param_5 + lVar34) = sVar8;
              if (iVar24 + 3 < iVar9) {
                lVar34 = uVar23 + 6;
                sVar8 = *(short *)(param_3 + lVar34);
                if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
                  sVar8 = *(short *)(param_1 + lVar34);
                }
                *(short *)(param_5 + lVar34) = sVar8;
                if (iVar24 + 4 < iVar9) {
                  lVar34 = uVar23 + 8;
                  sVar8 = *(short *)(param_3 + lVar34);
                  if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
                    sVar8 = *(short *)(param_1 + lVar34);
                  }
                  *(short *)(param_5 + lVar34) = sVar8;
                  if (iVar24 + 5 < iVar9) {
                    lVar34 = uVar23 + 10;
                    sVar8 = *(short *)(param_3 + lVar34);
                    if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
                      sVar8 = *(short *)(param_1 + lVar34);
                    }
                    *(short *)(param_5 + lVar34) = sVar8;
                    if (iVar24 + 6 < iVar9) {
                      lVar34 = uVar23 + 0xc;
                      sVar8 = *(short *)(param_3 + lVar34);
                      if (*(short *)(param_1 + lVar34) < *(short *)(param_3 + lVar34)) {
                        sVar8 = *(short *)(param_1 + lVar34);
                      }
                      *(short *)(param_5 + lVar34) = sVar8;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002381d0:
      iVar30 = iVar30 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar30 != 0);
  }
  return;
}


==================================================================

### FUNC 002382d4 (1480 bytes) name=FUN_002382d4

void FUN_002382d4(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  ushort uVar8;
  ushort uVar9;
  ushort uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  undefined1 auVar15 [16];
  undefined1 *puVar16;
  undefined1 (*pauVar17) [16];
  ulong uVar18;
  undefined8 *puVar19;
  ulong uVar20;
  int iVar21;
  ushort *puVar22;
  undefined1 (*pauVar23) [16];
  uint uVar24;
  undefined1 (*pauVar25) [16];
  long lVar26;
  undefined1 (*pauVar27) [16];
  int iVar28;
  long lVar29;
  long lVar30;
  uint uVar31;
  long lVar32;
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  long lVar35;
  
  iVar28 = param_7[1];
  iVar7 = *param_7;
  if (iVar28 != 0) {
    uVar13 = iVar7 - 0x10;
    uVar11 = ((uVar13 >> 4) + 1) * 0x10;
    if ((int)uVar13 < 0) {
      uVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - uVar11;
    lVar29 = ((long)(int)uVar11 + 0x20) * 2;
    lVar30 = lVar29 + -0x40;
    uVar12 = uVar14 >> 2;
    uVar1 = (uVar12 - 1 >> 1) + 1;
    uVar4 = uVar11 + 4 + uVar12 * 4;
    lVar35 = NEON_shl((long)(int)uVar11 + 4 + (ulong)uVar12 * 4,1);
    do {
      if (-1 < (int)uVar13) {
        pauVar17 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar23 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar19 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar27 = pauVar17 + -1;
          pauVar25 = pauVar23 + -1;
          auVar33 = *pauVar17;
          pauVar17 = pauVar17 + 2;
          auVar15 = *pauVar23;
          pauVar23 = pauVar23 + 2;
          auVar34 = NEON_umin(*pauVar27,*pauVar25,2);
          auVar33 = NEON_umin(auVar33,auVar15,2);
          puVar19[-1] = auVar34._8_8_;
          puVar19[-2] = auVar34._0_8_;
          puVar19[1] = auVar33._8_8_;
          *puVar19 = auVar33._0_8_;
          puVar19 = puVar19 + 4;
        } while (pauVar17 != (undefined1 (*) [16])(param_1 + (ulong)(uVar13 >> 4) * 0x20 + 0x30));
      }
      uVar2 = uVar11;
      if ((int)uVar11 < iVar7 + -3) {
        pauVar17 = (undefined1 (*) [16])(param_1 + lVar30);
        puVar22 = (ushort *)(param_5 + lVar30);
        pauVar23 = (undefined1 (*) [16])(param_3 + lVar30);
        uVar2 = uVar4;
        if ((pauVar17 < (undefined1 (*) [16])(param_5 + lVar29) &&
             puVar22 < (ushort *)(param_1 + lVar29) ||
             pauVar23 < (undefined1 (*) [16])(param_5 + lVar29) &&
             puVar22 < (ushort *)(param_3 + lVar29)) || (uVar12 + 1 < 4)) {
          do {
            puVar16 = *pauVar17;
            uVar9 = *(ushort *)*pauVar17;
            uVar10 = *(ushort *)*pauVar23;
            uVar8 = *(ushort *)(*pauVar23 + 2);
            if (*(ushort *)(*pauVar17 + 2) < *(ushort *)(*pauVar23 + 2)) {
              uVar8 = *(ushort *)(*pauVar17 + 2);
            }
            puVar22[1] = uVar8;
            if (uVar9 < uVar10) {
              uVar10 = uVar9;
            }
            *puVar22 = uVar10;
            uVar9 = *(ushort *)(*pauVar17 + 4);
            uVar10 = *(ushort *)(*pauVar23 + 4);
            uVar8 = *(ushort *)(*pauVar23 + 6);
            if (*(ushort *)(*pauVar17 + 6) < *(ushort *)(*pauVar23 + 6)) {
              uVar8 = *(ushort *)(*pauVar17 + 6);
            }
            puVar22[3] = uVar8;
            if (uVar9 < uVar10) {
              uVar10 = uVar9;
            }
            puVar22[2] = uVar10;
            pauVar17 = (undefined1 (*) [16])(puVar16 + 8);
            puVar22 = puVar22 + 4;
            pauVar23 = (undefined1 (*) [16])(*pauVar23 + 8);
          } while ((undefined1 (*) [16])(puVar16 + 8) != (undefined1 (*) [16])(param_1 + lVar35));
        }
        else {
          uVar24 = uVar11;
          if (3 < uVar14) {
            uVar24 = 0;
            do {
              uVar24 = uVar24 + 1;
              auVar33 = NEON_umin(*pauVar23,*pauVar17,2);
              *(long *)(puVar22 + 4) = auVar33._8_8_;
              *(long *)puVar22 = auVar33._0_8_;
              pauVar17 = pauVar17 + 1;
              puVar22 = puVar22 + 8;
              pauVar23 = pauVar23 + 1;
            } while (uVar24 < uVar1);
            uVar24 = uVar11 + uVar1 * 8;
            if (uVar12 + 1 == uVar1 * 2) goto LAB_002384dc;
          }
          uVar18 = -(ulong)(uVar24 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar24 << 1;
          lVar32 = uVar18 + 2;
          lVar26 = uVar18 + 4;
          lVar3 = uVar18 + 6;
          uVar8 = *(ushort *)(param_3 + lVar32);
          if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
            uVar8 = *(ushort *)(param_1 + lVar32);
          }
          uVar10 = *(ushort *)(param_3 + uVar18);
          if (*(ushort *)(param_1 + uVar18) < *(ushort *)(param_3 + uVar18)) {
            uVar10 = *(ushort *)(param_1 + uVar18);
          }
          *(ushort *)(param_5 + uVar18) = uVar10;
          *(ushort *)(param_5 + lVar32) = uVar8;
          uVar8 = *(ushort *)(param_3 + lVar3);
          if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
            uVar8 = *(ushort *)(param_1 + lVar3);
          }
          uVar10 = *(ushort *)(param_3 + lVar26);
          if (*(ushort *)(param_1 + lVar26) < *(ushort *)(param_3 + lVar26)) {
            uVar10 = *(ushort *)(param_1 + lVar26);
          }
          *(ushort *)(param_5 + lVar26) = uVar10;
          *(ushort *)(param_5 + lVar3) = uVar8;
        }
      }
LAB_002384dc:
      uVar18 = (ulong)uVar2;
      if ((int)uVar2 < iVar7) {
        uVar24 = iVar7 - uVar2;
        lVar26 = ((long)(int)uVar2 + 8) * 2;
        lVar32 = lVar26 + -0x10;
        uVar20 = param_5 + lVar32;
        uVar5 = param_1 + lVar32;
        if ((uVar20 < (ulong)(param_1 + lVar26) && uVar5 < (ulong)(param_5 + lVar26) ||
             (ulong)(param_3 + lVar32) < (ulong)(param_5 + lVar26) &&
             uVar20 < (ulong)(param_3 + lVar26)) || (uVar24 < 0xc)) {
          lVar26 = 0;
          do {
            uVar8 = *(ushort *)(param_3 + lVar32 + lVar26);
            if (*(ushort *)(uVar5 + lVar26) < uVar8) {
              uVar8 = *(ushort *)(uVar5 + lVar26);
            }
            *(ushort *)(uVar20 + lVar26) = uVar8;
            lVar26 = lVar26 + 2;
          } while (lVar26 != ((ulong)((iVar7 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 1) & 7) & 7;
          if (uVar24 < uVar6) {
            uVar6 = uVar24;
          }
          if (uVar6 != 0) {
            lVar26 = (long)(int)uVar2 * 2;
            uVar8 = *(ushort *)(param_3 + lVar26);
            if (*(ushort *)(param_1 + lVar26) < *(ushort *)(param_3 + lVar26)) {
              uVar8 = *(ushort *)(param_1 + lVar26);
            }
            *(ushort *)(param_5 + lVar26) = uVar8;
            if (uVar6 == 1) {
              uVar18 = (ulong)(uVar2 + 1);
            }
            else {
              lVar3 = lVar26 + 2;
              uVar31 = uVar2 + 2;
              uVar8 = *(ushort *)(param_3 + lVar3);
              if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
                uVar8 = *(ushort *)(param_1 + lVar3);
              }
              *(ushort *)(param_5 + lVar3) = uVar8;
              if (uVar6 != 2) {
                lVar3 = lVar26 + 4;
                uVar31 = uVar2 + 3;
                uVar8 = *(ushort *)(param_3 + lVar3);
                if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
                  uVar8 = *(ushort *)(param_1 + lVar3);
                }
                *(ushort *)(param_5 + lVar3) = uVar8;
                if (uVar6 != 3) {
                  lVar3 = lVar26 + 6;
                  uVar31 = uVar2 + 4;
                  uVar8 = *(ushort *)(param_3 + lVar3);
                  if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
                    uVar8 = *(ushort *)(param_1 + lVar3);
                  }
                  *(ushort *)(param_5 + lVar3) = uVar8;
                  if (uVar6 != 4) {
                    lVar3 = lVar26 + 8;
                    uVar31 = uVar2 + 5;
                    uVar8 = *(ushort *)(param_3 + lVar3);
                    if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
                      uVar8 = *(ushort *)(param_1 + lVar3);
                    }
                    *(ushort *)(param_5 + lVar3) = uVar8;
                    if (uVar6 != 5) {
                      lVar3 = lVar26 + 10;
                      uVar31 = uVar2 + 6;
                      uVar8 = *(ushort *)(param_3 + lVar3);
                      if (*(ushort *)(param_1 + lVar3) < *(ushort *)(param_3 + lVar3)) {
                        uVar8 = *(ushort *)(param_1 + lVar3);
                      }
                      *(ushort *)(param_5 + lVar3) = uVar8;
                      if (uVar6 == 7) {
                        lVar26 = lVar26 + 0xc;
                        uVar18 = (ulong)(uVar2 + 7);
                        uVar8 = *(ushort *)(param_3 + lVar26);
                        if (*(ushort *)(param_1 + lVar26) < *(ushort *)(param_3 + lVar26)) {
                          uVar8 = *(ushort *)(param_1 + lVar26);
                        }
                        *(ushort *)(param_5 + lVar26) = uVar8;
                        goto LAB_00238654;
                      }
                    }
                  }
                }
              }
              uVar18 = (ulong)uVar31;
            }
          }
LAB_00238654:
          uVar2 = ((uVar24 - uVar6) - 8 >> 3) + 1;
          iVar21 = uVar2 * 8;
          if (6 < (uVar24 - 1) - uVar6) {
            lVar32 = lVar32 + (ulong)uVar6 * 2;
            uVar31 = 0;
            puVar19 = (undefined8 *)(param_5 + lVar32);
            pauVar17 = (undefined1 (*) [16])(param_3 + lVar32);
            pauVar23 = (undefined1 (*) [16])(param_1 + lVar32);
            do {
              uVar31 = uVar31 + 1;
              auVar33 = NEON_umin(*pauVar17,*pauVar23,2);
              puVar19[1] = auVar33._8_8_;
              *puVar19 = auVar33._0_8_;
              puVar19 = puVar19 + 2;
              pauVar17 = pauVar17 + 1;
              pauVar23 = pauVar23 + 1;
            } while (uVar31 < uVar2);
            uVar18 = (ulong)(uint)((int)uVar18 + iVar21);
            if (uVar24 - uVar6 == iVar21) goto LAB_002387a4;
          }
          uVar20 = -(uVar18 >> 0x1f) & 0xfffffffe00000000 | uVar18 << 1;
          iVar21 = (int)uVar18;
          uVar8 = *(ushort *)(param_3 + uVar20);
          if (*(ushort *)(param_1 + uVar20) < *(ushort *)(param_3 + uVar20)) {
            uVar8 = *(ushort *)(param_1 + uVar20);
          }
          *(ushort *)(param_5 + uVar20) = uVar8;
          if (iVar21 + 1 < iVar7) {
            lVar32 = uVar20 + 2;
            uVar8 = *(ushort *)(param_3 + lVar32);
            if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
              uVar8 = *(ushort *)(param_1 + lVar32);
            }
            *(ushort *)(param_5 + lVar32) = uVar8;
            if (iVar21 + 2 < iVar7) {
              lVar32 = uVar20 + 4;
              uVar8 = *(ushort *)(param_3 + lVar32);
              if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
                uVar8 = *(ushort *)(param_1 + lVar32);
              }
              *(ushort *)(param_5 + lVar32) = uVar8;
              if (iVar21 + 3 < iVar7) {
                lVar32 = uVar20 + 6;
                uVar8 = *(ushort *)(param_3 + lVar32);
                if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
                  uVar8 = *(ushort *)(param_1 + lVar32);
                }
                *(ushort *)(param_5 + lVar32) = uVar8;
                if (iVar21 + 4 < iVar7) {
                  lVar32 = uVar20 + 8;
                  uVar8 = *(ushort *)(param_3 + lVar32);
                  if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
                    uVar8 = *(ushort *)(param_1 + lVar32);
                  }
                  *(ushort *)(param_5 + lVar32) = uVar8;
                  if (iVar21 + 5 < iVar7) {
                    lVar32 = uVar20 + 10;
                    uVar8 = *(ushort *)(param_3 + lVar32);
                    if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
                      uVar8 = *(ushort *)(param_1 + lVar32);
                    }
                    *(ushort *)(param_5 + lVar32) = uVar8;
                    if (iVar21 + 6 < iVar7) {
                      lVar32 = uVar20 + 0xc;
                      uVar8 = *(ushort *)(param_3 + lVar32);
                      if (*(ushort *)(param_1 + lVar32) < *(ushort *)(param_3 + lVar32)) {
                        uVar8 = *(ushort *)(param_1 + lVar32);
                      }
                      *(ushort *)(param_5 + lVar32) = uVar8;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002387a4:
      iVar28 = iVar28 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 0023889c (2416 bytes) name=FUN_0023889c

void FUN_0023889c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  char *pcVar5;
  char *pcVar6;
  uint uVar7;
  char cVar8;
  int iVar9;
  byte bVar10;
  char cVar11;
  char cVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  undefined1 auVar19 [16];
  uint uVar20;
  undefined1 *puVar21;
  int iVar22;
  undefined1 (*pauVar23) [16];
  undefined1 (*pauVar24) [16];
  undefined8 *puVar25;
  char *pcVar26;
  uint uVar27;
  undefined1 (*pauVar28) [16];
  uint uVar29;
  undefined1 (*pauVar30) [16];
  long lVar31;
  long lVar32;
  int iVar33;
  long lVar34;
  long lVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  
  iVar33 = param_7[1];
  iVar9 = *param_7;
  if (iVar33 != 0) {
    uVar16 = iVar9 - 0x20;
    iVar13 = ((uVar16 >> 5) + 1) * 0x20;
    if ((int)uVar16 < 0) {
      iVar13 = 0;
    }
    iVar17 = iVar9 + -3;
    uVar18 = (iVar9 + -4) - iVar13;
    lVar34 = (long)iVar13;
    uVar15 = uVar18 >> 2;
    uVar1 = (uVar15 - 3 >> 2) + 1;
    iVar4 = iVar13 + 4 + uVar15 * 4;
    lVar2 = lVar34 + 0x40;
    do {
      if (-1 < (int)uVar16) {
        pauVar23 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar24 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar25 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar30 = pauVar23 + -1;
          pauVar28 = pauVar24 + -1;
          auVar36 = *pauVar23;
          pauVar23 = pauVar23 + 2;
          auVar19 = *pauVar24;
          pauVar24 = pauVar24 + 2;
          auVar37 = NEON_smin(*pauVar30,*pauVar28,1);
          auVar36 = NEON_smin(auVar36,auVar19,1);
          puVar25[-1] = auVar37._8_8_;
          puVar25[-2] = auVar37._0_8_;
          puVar25[1] = auVar36._8_8_;
          *puVar25 = auVar36._0_8_;
          puVar25 = puVar25 + 4;
        } while (pauVar23 != (undefined1 (*) [16])(param_1 + (ulong)(uVar16 >> 5) * 0x20 + 0x30));
      }
      iVar14 = iVar13;
      if (iVar13 < iVar17) {
        pauVar23 = (undefined1 (*) [16])(param_1 + lVar34);
        pcVar26 = (char *)(param_5 + lVar34);
        pauVar24 = (undefined1 (*) [16])(param_3 + lVar34);
        iVar14 = iVar4;
        if ((pauVar23 < (undefined1 (*) [16])(param_5 + lVar2) &&
             pcVar26 < (char *)(param_1 + lVar2) ||
             pauVar24 < (undefined1 (*) [16])(param_5 + lVar2) &&
             pcVar26 < (char *)(param_3 + lVar2)) || (uVar15 + 1 < 5)) {
          do {
            puVar21 = *pauVar23;
            cVar11 = (*pauVar23)[0];
            cVar12 = (*pauVar24)[0];
            bVar10 = (*pauVar24)[0];
            cVar8 = (*pauVar24)[1];
            if ((int)(char)(*pauVar23)[1] < (int)(uint)(byte)(*pauVar24)[1]) {
              cVar8 = (*pauVar23)[1];
            }
            pcVar26[1] = cVar8;
            if ((int)cVar11 < (int)(uint)bVar10) {
              cVar12 = cVar11;
            }
            *pcVar26 = cVar12;
            cVar11 = (*pauVar23)[2];
            cVar12 = (*pauVar24)[2];
            cVar8 = (*pauVar24)[3];
            if ((int)(char)(*pauVar23)[3] < (int)(uint)(byte)(*pauVar24)[3]) {
              cVar8 = (*pauVar23)[3];
            }
            bVar10 = (*pauVar24)[2];
            pcVar26[3] = cVar8;
            if ((int)cVar11 < (int)(uint)bVar10) {
              cVar12 = cVar11;
            }
            pcVar26[2] = cVar12;
            pauVar24 = (undefined1 (*) [16])(*pauVar24 + 4);
            pauVar23 = (undefined1 (*) [16])(puVar21 + 4);
            pcVar26 = pcVar26 + 4;
          } while ((undefined1 (*) [16])(puVar21 + 4) !=
                   (undefined1 (*) [16])(param_1 + lVar34 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar22 = iVar13;
          if (0xb < uVar18) {
            uVar27 = 0;
            do {
              uVar27 = uVar27 + 1;
              auVar36 = NEON_smin(*pauVar24,*pauVar23,1);
              *(long *)(pcVar26 + 8) = auVar36._8_8_;
              *(long *)pcVar26 = auVar36._0_8_;
              pauVar24 = pauVar24 + 1;
              pauVar23 = pauVar23 + 1;
              pcVar26 = pcVar26 + 0x10;
            } while (uVar27 < uVar1);
            iVar22 = iVar13 + uVar1 * 0x10;
            if (uVar15 + 1 == uVar1 * 4) goto LAB_00238b94;
          }
          lVar31 = (long)iVar22;
          lVar32 = lVar31 + 1;
          lVar35 = lVar31 + 2;
          lVar3 = lVar31 + 3;
          cVar8 = *(char *)(param_3 + lVar32);
          if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
            cVar8 = *(char *)(param_1 + lVar32);
          }
          cVar12 = *(char *)(param_3 + lVar31);
          if (*(char *)(param_1 + lVar31) < *(char *)(param_3 + lVar31)) {
            cVar12 = *(char *)(param_1 + lVar31);
          }
          *(char *)(param_5 + lVar31) = cVar12;
          *(char *)(param_5 + lVar32) = cVar8;
          cVar8 = *(char *)(param_3 + lVar3);
          if (*(char *)(param_1 + lVar3) < *(char *)(param_3 + lVar3)) {
            cVar8 = *(char *)(param_1 + lVar3);
          }
          cVar12 = *(char *)(param_3 + lVar35);
          if (*(char *)(param_1 + lVar35) < *(char *)(param_3 + lVar35)) {
            cVar12 = *(char *)(param_1 + lVar35);
          }
          *(char *)(param_5 + lVar35) = cVar12;
          *(char *)(param_5 + lVar3) = cVar8;
          if (iVar22 + 4 < iVar17) {
            lVar31 = (long)(iVar22 + 4);
            lVar32 = lVar31 + 1;
            lVar35 = lVar31 + 2;
            lVar3 = lVar31 + 3;
            cVar8 = *(char *)(param_3 + lVar32);
            if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
              cVar8 = *(char *)(param_1 + lVar32);
            }
            cVar12 = *(char *)(param_3 + lVar31);
            if (*(char *)(param_1 + lVar31) < *(char *)(param_3 + lVar31)) {
              cVar12 = *(char *)(param_1 + lVar31);
            }
            *(char *)(param_5 + lVar31) = cVar12;
            *(char *)(param_5 + lVar32) = cVar8;
            cVar8 = *(char *)(param_3 + lVar3);
            if (*(char *)(param_1 + lVar3) < *(char *)(param_3 + lVar3)) {
              cVar8 = *(char *)(param_1 + lVar3);
            }
            cVar12 = *(char *)(param_3 + lVar35);
            if (*(char *)(param_1 + lVar35) < *(char *)(param_3 + lVar35)) {
              cVar12 = *(char *)(param_1 + lVar35);
            }
            *(char *)(param_5 + lVar35) = cVar12;
            *(char *)(param_5 + lVar3) = cVar8;
            if (iVar22 + 8 < iVar17) {
              lVar31 = (long)(iVar22 + 8);
              lVar32 = lVar31 + 1;
              lVar35 = lVar31 + 2;
              lVar3 = lVar31 + 3;
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              cVar12 = *(char *)(param_3 + lVar31);
              if (*(char *)(param_1 + lVar31) < *(char *)(param_3 + lVar31)) {
                cVar12 = *(char *)(param_1 + lVar31);
              }
              *(char *)(param_5 + lVar31) = cVar12;
              *(char *)(param_5 + lVar32) = cVar8;
              cVar8 = *(char *)(param_3 + lVar3);
              if (*(char *)(param_1 + lVar3) < *(char *)(param_3 + lVar3)) {
                cVar8 = *(char *)(param_1 + lVar3);
              }
              cVar12 = *(char *)(param_3 + lVar35);
              if (*(char *)(param_1 + lVar35) < *(char *)(param_3 + lVar35)) {
                cVar12 = *(char *)(param_1 + lVar35);
              }
              *(char *)(param_5 + lVar35) = cVar12;
              *(char *)(param_5 + lVar3) = cVar8;
            }
          }
        }
      }
LAB_00238b94:
      if (iVar14 < iVar9) {
        lVar35 = (long)iVar14;
        uVar27 = iVar9 - iVar14;
        lVar32 = lVar35 + 0x10;
        pcVar26 = (char *)(param_1 + lVar35);
        pcVar5 = (char *)(param_5 + lVar35);
        pcVar6 = (char *)(param_3 + lVar35);
        if ((pcVar26 < (char *)(param_5 + lVar32) && pcVar5 < (char *)(param_1 + lVar32) ||
             pcVar6 < (char *)(param_5 + lVar32) && pcVar5 < (char *)(param_3 + lVar32)) ||
           (uVar27 < 0x14)) {
          lVar32 = 0;
          do {
            cVar8 = pcVar6[lVar32];
            if (pcVar26[lVar32] < pcVar6[lVar32]) {
              cVar8 = pcVar26[lVar32];
            }
            pcVar5[lVar32] = cVar8;
            lVar32 = lVar32 + 1;
          } while (lVar32 != (ulong)(uint)((iVar9 + -1) - iVar14) + 1);
        }
        else {
          uVar7 = -(int)pcVar26 & 0xf;
          uVar20 = uVar27;
          if (uVar7 < uVar27) {
            uVar20 = uVar7;
          }
          iVar22 = iVar14;
          if (uVar20 != 0) {
            iVar22 = iVar14 + 1;
            cVar8 = *pcVar6;
            if (*pcVar26 < *pcVar6) {
              cVar8 = *pcVar26;
            }
            *pcVar5 = cVar8;
            if (uVar20 != 1) {
              lVar32 = (long)iVar22;
              iVar22 = iVar14 + 2;
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              *(char *)(param_5 + lVar32) = cVar8;
              if (uVar20 != 2) {
                lVar32 = (long)iVar22;
                iVar22 = iVar14 + 3;
                cVar8 = *(char *)(param_3 + lVar32);
                if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                  cVar8 = *(char *)(param_1 + lVar32);
                }
                *(char *)(param_5 + lVar32) = cVar8;
                if (uVar20 != 3) {
                  lVar32 = (long)iVar22;
                  iVar22 = iVar14 + 4;
                  cVar8 = *(char *)(param_3 + lVar32);
                  if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                    cVar8 = *(char *)(param_1 + lVar32);
                  }
                  *(char *)(param_5 + lVar32) = cVar8;
                  if (uVar20 != 4) {
                    lVar32 = (long)iVar22;
                    iVar22 = iVar14 + 5;
                    cVar8 = *(char *)(param_3 + lVar32);
                    if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                      cVar8 = *(char *)(param_1 + lVar32);
                    }
                    *(char *)(param_5 + lVar32) = cVar8;
                    if (uVar20 != 5) {
                      lVar32 = (long)iVar22;
                      iVar22 = iVar14 + 6;
                      cVar8 = *(char *)(param_3 + lVar32);
                      if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                        cVar8 = *(char *)(param_1 + lVar32);
                      }
                      *(char *)(param_5 + lVar32) = cVar8;
                      if (uVar20 != 6) {
                        lVar32 = (long)iVar22;
                        iVar22 = iVar14 + 7;
                        cVar8 = *(char *)(param_3 + lVar32);
                        if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                          cVar8 = *(char *)(param_1 + lVar32);
                        }
                        *(char *)(param_5 + lVar32) = cVar8;
                        if (uVar20 != 7) {
                          lVar32 = (long)iVar22;
                          iVar22 = iVar14 + 8;
                          cVar8 = *(char *)(param_3 + lVar32);
                          if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                            cVar8 = *(char *)(param_1 + lVar32);
                          }
                          *(char *)(param_5 + lVar32) = cVar8;
                          if (uVar20 != 8) {
                            lVar32 = (long)iVar22;
                            iVar22 = iVar14 + 9;
                            cVar8 = *(char *)(param_3 + lVar32);
                            if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                              cVar8 = *(char *)(param_1 + lVar32);
                            }
                            *(char *)(param_5 + lVar32) = cVar8;
                            if (uVar20 != 9) {
                              lVar32 = (long)iVar22;
                              iVar22 = iVar14 + 10;
                              cVar8 = *(char *)(param_3 + lVar32);
                              if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                cVar8 = *(char *)(param_1 + lVar32);
                              }
                              *(char *)(param_5 + lVar32) = cVar8;
                              if (uVar20 != 10) {
                                lVar32 = (long)iVar22;
                                iVar22 = iVar14 + 0xb;
                                cVar8 = *(char *)(param_3 + lVar32);
                                if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                  cVar8 = *(char *)(param_1 + lVar32);
                                }
                                *(char *)(param_5 + lVar32) = cVar8;
                                if (uVar20 != 0xb) {
                                  lVar32 = (long)iVar22;
                                  iVar22 = iVar14 + 0xc;
                                  cVar8 = *(char *)(param_3 + lVar32);
                                  if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                    cVar8 = *(char *)(param_1 + lVar32);
                                  }
                                  *(char *)(param_5 + lVar32) = cVar8;
                                  if (uVar20 != 0xc) {
                                    lVar32 = (long)iVar22;
                                    iVar22 = iVar14 + 0xd;
                                    cVar8 = *(char *)(param_3 + lVar32);
                                    if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                      cVar8 = *(char *)(param_1 + lVar32);
                                    }
                                    *(char *)(param_5 + lVar32) = cVar8;
                                    if (uVar20 != 0xd) {
                                      lVar32 = (long)iVar22;
                                      iVar22 = iVar14 + 0xe;
                                      cVar8 = *(char *)(param_3 + lVar32);
                                      if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32))
                                      {
                                        cVar8 = *(char *)(param_1 + lVar32);
                                      }
                                      *(char *)(param_5 + lVar32) = cVar8;
                                      if (uVar20 == 0xf) {
                                        lVar32 = (long)iVar22;
                                        iVar22 = iVar14 + 0xf;
                                        cVar8 = *(char *)(param_3 + lVar32);
                                        if (*(char *)(param_1 + lVar32) <
                                            *(char *)(param_3 + lVar32)) {
                                          cVar8 = *(char *)(param_1 + lVar32);
                                        }
                                        *(char *)(param_5 + lVar32) = cVar8;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar7 = ((uVar27 - uVar20) - 0x10 >> 4) + 1;
          iVar14 = uVar7 * 0x10;
          if (0xe < (uVar27 - 1) - uVar20) {
            lVar35 = lVar35 + (ulong)uVar20;
            uVar29 = 0;
            puVar25 = (undefined8 *)(param_5 + lVar35);
            pauVar23 = (undefined1 (*) [16])(param_3 + lVar35);
            pauVar24 = (undefined1 (*) [16])(param_1 + lVar35);
            do {
              uVar29 = uVar29 + 1;
              auVar36 = NEON_smin(*pauVar23,*pauVar24,1);
              puVar25[1] = auVar36._8_8_;
              *puVar25 = auVar36._0_8_;
              puVar25 = puVar25 + 2;
              pauVar23 = pauVar23 + 1;
              pauVar24 = pauVar24 + 1;
            } while (uVar29 < uVar7);
            iVar22 = iVar22 + iVar14;
            if (uVar27 - uVar20 == iVar14) goto LAB_00239104;
          }
          lVar32 = (long)iVar22;
          cVar8 = *(char *)(param_3 + lVar32);
          if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
            cVar8 = *(char *)(param_1 + lVar32);
          }
          *(char *)(param_5 + lVar32) = cVar8;
          if (iVar22 + 1 < iVar9) {
            lVar32 = (long)(iVar22 + 1);
            cVar8 = *(char *)(param_3 + lVar32);
            if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
              cVar8 = *(char *)(param_1 + lVar32);
            }
            *(char *)(param_5 + lVar32) = cVar8;
            if (iVar22 + 2 < iVar9) {
              lVar32 = (long)(iVar22 + 2);
              cVar8 = *(char *)(param_3 + lVar32);
              if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                cVar8 = *(char *)(param_1 + lVar32);
              }
              *(char *)(param_5 + lVar32) = cVar8;
              if (iVar22 + 3 < iVar9) {
                lVar32 = (long)(iVar22 + 3);
                cVar8 = *(char *)(param_3 + lVar32);
                if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                  cVar8 = *(char *)(param_1 + lVar32);
                }
                *(char *)(param_5 + lVar32) = cVar8;
                if (iVar22 + 4 < iVar9) {
                  lVar32 = (long)(iVar22 + 4);
                  cVar8 = *(char *)(param_3 + lVar32);
                  if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                    cVar8 = *(char *)(param_1 + lVar32);
                  }
                  *(char *)(param_5 + lVar32) = cVar8;
                  if (iVar22 + 5 < iVar9) {
                    lVar32 = (long)(iVar22 + 5);
                    cVar8 = *(char *)(param_3 + lVar32);
                    if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                      cVar8 = *(char *)(param_1 + lVar32);
                    }
                    *(char *)(param_5 + lVar32) = cVar8;
                    if (iVar22 + 6 < iVar9) {
                      lVar32 = (long)(iVar22 + 6);
                      cVar8 = *(char *)(param_3 + lVar32);
                      if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                        cVar8 = *(char *)(param_1 + lVar32);
                      }
                      *(char *)(param_5 + lVar32) = cVar8;
                      if (iVar22 + 7 < iVar9) {
                        lVar32 = (long)(iVar22 + 7);
                        cVar8 = *(char *)(param_3 + lVar32);
                        if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                          cVar8 = *(char *)(param_1 + lVar32);
                        }
                        *(char *)(param_5 + lVar32) = cVar8;
                        if (iVar22 + 8 < iVar9) {
                          lVar32 = (long)(iVar22 + 8);
                          cVar8 = *(char *)(param_3 + lVar32);
                          if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                            cVar8 = *(char *)(param_1 + lVar32);
                          }
                          *(char *)(param_5 + lVar32) = cVar8;
                          if (iVar22 + 9 < iVar9) {
                            lVar32 = (long)(iVar22 + 9);
                            cVar8 = *(char *)(param_3 + lVar32);
                            if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                              cVar8 = *(char *)(param_1 + lVar32);
                            }
                            *(char *)(param_5 + lVar32) = cVar8;
                            if (iVar22 + 10 < iVar9) {
                              lVar32 = (long)(iVar22 + 10);
                              cVar8 = *(char *)(param_3 + lVar32);
                              if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                cVar8 = *(char *)(param_1 + lVar32);
                              }
                              *(char *)(param_5 + lVar32) = cVar8;
                              if (iVar22 + 0xb < iVar9) {
                                lVar32 = (long)(iVar22 + 0xb);
                                cVar8 = *(char *)(param_3 + lVar32);
                                if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                  cVar8 = *(char *)(param_1 + lVar32);
                                }
                                *(char *)(param_5 + lVar32) = cVar8;
                                if (iVar22 + 0xc < iVar9) {
                                  lVar32 = (long)(iVar22 + 0xc);
                                  cVar8 = *(char *)(param_3 + lVar32);
                                  if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                    cVar8 = *(char *)(param_1 + lVar32);
                                  }
                                  *(char *)(param_5 + lVar32) = cVar8;
                                  if (iVar22 + 0xd < iVar9) {
                                    lVar32 = (long)(iVar22 + 0xd);
                                    cVar8 = *(char *)(param_3 + lVar32);
                                    if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32)) {
                                      cVar8 = *(char *)(param_1 + lVar32);
                                    }
                                    *(char *)(param_5 + lVar32) = cVar8;
                                    if (iVar22 + 0xe < iVar9) {
                                      lVar32 = (long)(iVar22 + 0xe);
                                      cVar8 = *(char *)(param_3 + lVar32);
                                      if (*(char *)(param_1 + lVar32) < *(char *)(param_3 + lVar32))
                                      {
                                        cVar8 = *(char *)(param_1 + lVar32);
                                      }
                                      *(char *)(param_5 + lVar32) = cVar8;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00239104:
      iVar33 = iVar33 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar33 != 0);
  }
  return;
}


==================================================================

### FUNC 0023920c (488 bytes) name=FUN_0023920c

void FUN_0023920c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  byte *pbVar1;
  int iVar2;
  char cVar3;
  byte bVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  int iVar9;
  undefined *puVar10;
  undefined1 (*pauVar11) [16];
  byte *pbVar12;
  long lVar13;
  undefined8 *puVar14;
  char *pcVar15;
  undefined1 (*pauVar16) [16];
  byte *pbVar17;
  undefined1 (*pauVar18) [16];
  long lVar19;
  undefined1 (*pauVar20) [16];
  int iVar21;
  long lVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  
  iVar21 = param_7[1];
  iVar2 = *param_7;
  if (iVar21 != 0) {
    uVar7 = iVar2 - 0x20;
    iVar5 = ((uVar7 >> 5) + 1) * 0x20;
    if ((int)uVar7 < 0) {
      iVar5 = 0;
    }
    uVar6 = (uint)((iVar2 + -4) - iVar5) >> 2;
    lVar22 = (long)iVar5;
    do {
      if (-1 < (int)uVar7) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar16 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar14 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar20 = pauVar11 + -1;
          pauVar18 = pauVar16 + -1;
          auVar23 = *pauVar11;
          pauVar11 = pauVar11 + 2;
          auVar8 = *pauVar16;
          pauVar16 = pauVar16 + 2;
          auVar24 = NEON_umin(*pauVar20,*pauVar18,1);
          auVar23 = NEON_umin(auVar23,auVar8,1);
          puVar14[-1] = auVar24._8_8_;
          puVar14[-2] = auVar24._0_8_;
          puVar14[1] = auVar23._8_8_;
          *puVar14 = auVar23._0_8_;
          puVar14 = puVar14 + 4;
        } while (pauVar11 != (undefined1 (*) [16])(param_1 + (ulong)(uVar7 >> 5) * 0x20 + 0x30));
      }
      iVar9 = iVar5;
      if (iVar5 < iVar2 + -3) {
        pbVar12 = (byte *)(param_1 + lVar22);
        pcVar15 = (char *)(param_5 + lVar22);
        pbVar17 = (byte *)(param_3 + lVar22);
        do {
          puVar10 = PTR_DAT_00501c00;
          pbVar1 = pbVar12 + 4;
          bVar4 = pbVar12[1];
          cVar3 = PTR_DAT_00501c00[(int)(((uint)bVar4 - (uint)pbVar17[1]) + 0x100)];
          *pcVar15 = *pbVar12 - PTR_DAT_00501c00[(int)(((uint)*pbVar12 - (uint)*pbVar17) + 0x100)];
          pcVar15[1] = bVar4 - cVar3;
          bVar4 = pbVar12[2];
          cVar3 = puVar10[(int)(((uint)bVar4 - (uint)pbVar17[2]) + 0x100)];
          pcVar15[3] = pbVar12[3] - puVar10[(int)(((uint)pbVar12[3] - (uint)pbVar17[3]) + 0x100)];
          pcVar15[2] = bVar4 - cVar3;
          pbVar12 = pbVar1;
          pcVar15 = pcVar15 + 4;
          pbVar17 = pbVar17 + 4;
          iVar9 = iVar5 + 4 + uVar6 * 4;
        } while (pbVar1 != (byte *)(param_1 + lVar22 + 4 + (ulong)uVar6 * 4));
      }
      lVar19 = (long)iVar9;
      if (iVar9 < iVar2) {
        lVar13 = 0;
        do {
          bVar4 = *(byte *)(param_1 + lVar19 + lVar13);
          *(byte *)(param_5 + lVar19 + lVar13) =
               bVar4 - PTR_DAT_00501c00
                       [(int)(((uint)bVar4 - (uint)*(byte *)(param_3 + lVar19 + lVar13)) + 0x100)];
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar2 + -1) - iVar9) + 1);
      }
      iVar21 = iVar21 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 002393f4 (564 bytes) name=FUN_002393f4

void FUN_002393f4(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  short *psVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  uint uVar8;
  undefined1 (*pauVar9) [16];
  short *psVar10;
  long lVar11;
  undefined8 *puVar12;
  undefined2 *puVar13;
  undefined1 (*pauVar14) [16];
  short *psVar15;
  ulong uVar16;
  undefined2 uVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  undefined1 (*pauVar20) [16];
  undefined2 uVar21;
  undefined1 (*pauVar22) [16];
  int iVar23;
  long lVar24;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  
  iVar23 = param_7[1];
  iVar3 = *param_7;
  if (iVar23 != 0) {
    uVar6 = iVar3 - 0x10;
    uVar4 = ((uVar6 >> 4) + 1) * 0x10;
    if ((int)uVar6 < 0) {
      uVar4 = 0;
    }
    uVar5 = (iVar3 + -4) - uVar4 >> 2;
    lVar24 = (long)(int)uVar4 * 2;
    do {
      if (-1 < (int)uVar6) {
        pauVar9 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar14 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar12 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar22 = pauVar9 + -1;
          pauVar20 = pauVar14 + -1;
          auVar25 = *pauVar9;
          pauVar9 = pauVar9 + 2;
          auVar7 = *pauVar14;
          pauVar14 = pauVar14 + 2;
          auVar26 = NEON_sqadd(*pauVar22,*pauVar20,2);
          auVar25 = NEON_sqadd(auVar25,auVar7,2);
          puVar12[-1] = auVar26._8_8_;
          puVar12[-2] = auVar26._0_8_;
          puVar12[1] = auVar25._8_8_;
          *puVar12 = auVar25._0_8_;
          puVar12 = puVar12 + 4;
        } while (pauVar9 != (undefined1 (*) [16])(param_1 + (ulong)(uVar6 >> 4) * 0x20 + 0x30));
      }
      uVar17 = 0x8000;
      uVar18 = 0x7fff;
      uVar8 = uVar4;
      if ((int)uVar4 < iVar3 + -3) {
        psVar10 = (short *)(param_1 + lVar24);
        puVar13 = (undefined2 *)(param_5 + lVar24);
        psVar15 = (short *)(param_3 + lVar24);
        do {
          iVar2 = (int)*psVar10 + (int)*psVar15;
          uVar21 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar21 = uVar18, iVar2 < 1)) {
            uVar21 = uVar17;
          }
          iVar2 = (int)psVar10[1] + (int)psVar15[1];
          uVar19 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar19 = uVar18, iVar2 < 1)) {
            uVar19 = uVar17;
          }
          *puVar13 = uVar21;
          puVar13[1] = uVar19;
          iVar2 = (int)psVar10[2] + (int)psVar15[2];
          uVar21 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar21 = 0x7fff, iVar2 < 1)) {
            uVar21 = 0x8000;
          }
          psVar1 = psVar10 + 3;
          psVar10 = psVar10 + 4;
          iVar2 = (int)*psVar1 + (int)psVar15[3];
          uVar19 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar19 = 0x7fff, iVar2 < 1)) {
            uVar19 = 0x8000;
          }
          puVar13[2] = uVar21;
          puVar13[3] = uVar19;
          puVar13 = puVar13 + 4;
          psVar15 = psVar15 + 4;
          uVar8 = uVar4 + 4 + uVar5 * 4;
        } while (psVar10 != (short *)(param_1 + ((long)(int)uVar4 + 4 + (ulong)uVar5 * 4) * 2));
      }
      if ((int)uVar8 < iVar3) {
        uVar16 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        lVar11 = 0;
        do {
          iVar2 = (int)*(short *)(param_1 + uVar16 + lVar11) +
                  (int)*(short *)(param_3 + uVar16 + lVar11);
          uVar21 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar21 = uVar18, iVar2 < 1)) {
            uVar21 = uVar17;
          }
          *(undefined2 *)(param_5 + uVar16 + lVar11) = uVar21;
          lVar11 = lVar11 + 2;
        } while (lVar11 != ((ulong)((iVar3 + -1) - uVar8) + 1) * 2);
      }
      iVar23 = iVar23 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 00239628 (1640 bytes) name=FUN_00239628

void FUN_00239628(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  uint uVar1;
  long lVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  ushort *puVar6;
  ulong uVar7;
  uint uVar8;
  int iVar9;
  ushort uVar10;
  ushort uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  unkbyte10 Var20;
  undefined1 (*pauVar21) [16];
  ulong uVar22;
  undefined8 *puVar23;
  ushort *puVar24;
  int iVar25;
  undefined2 *puVar26;
  unkbyte10 *pVar27;
  ushort *puVar28;
  long lVar29;
  ulong uVar30;
  uint uVar31;
  undefined1 (*pauVar32) [16];
  long lVar33;
  undefined1 (*pauVar34) [16];
  int iVar35;
  long lVar36;
  long lVar37;
  uint uVar38;
  undefined8 *puVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  long lVar47;
  
  iVar35 = param_7[1];
  iVar9 = *param_7;
  if (iVar35 != 0) {
    uVar14 = iVar9 - 0x10;
    uVar12 = ((uVar14 >> 4) + 1) * 0x10;
    if ((int)uVar14 < 0) {
      uVar12 = 0;
    }
    uVar15 = (iVar9 + -4) - uVar12;
    lVar36 = ((long)(int)uVar12 + 0x20) * 2;
    lVar37 = lVar36 + -0x40;
    uVar13 = uVar15 >> 2;
    uVar1 = (uVar13 - 1 >> 1) + 1;
    uVar3 = uVar12 + 4 + uVar13 * 4;
    lVar47 = NEON_shl((long)(int)uVar12 + 4 + (ulong)uVar13 * 4,1);
    do {
      if (-1 < (int)uVar14) {
        pauVar21 = (undefined1 (*) [16])(param_1 + 0x10);
        pVar27 = (unkbyte10 *)(param_3 + 0x10);
        puVar23 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar34 = pauVar21 + -1;
          pauVar32 = (undefined1 (*) [16])(pVar27 + -1);
          auVar45 = *pauVar21;
          pauVar21 = pauVar21 + 2;
          uVar16 = *(undefined8 *)((long)pVar27 + 8);
          Var20 = *pVar27;
          pVar27 = pVar27 + 2;
          auVar43 = NEON_uqadd(*pauVar34,*pauVar32,2);
          auVar40._10_2_ = (short)((ulong)uVar16 >> 0x10);
          auVar40._0_10_ = Var20;
          auVar40._12_2_ = (short)((ulong)uVar16 >> 0x20);
          auVar40._14_2_ = (short)((ulong)uVar16 >> 0x30);
          auVar40 = NEON_uqadd(auVar45,auVar40,2);
          puVar23[-1] = auVar43._8_8_;
          puVar23[-2] = auVar43._0_8_;
          puVar23[1] = auVar40._8_8_;
          *puVar23 = auVar40._0_8_;
          puVar23 = puVar23 + 4;
        } while (pauVar21 != (undefined1 (*) [16])(param_1 + (ulong)(uVar14 >> 4) * 0x20 + 0x30));
      }
      uVar5 = uVar12;
      if ((int)uVar12 < iVar9 + -3) {
        puVar24 = (ushort *)(param_1 + lVar37);
        puVar26 = (undefined2 *)(param_5 + lVar37);
        puVar28 = (ushort *)(param_3 + lVar37);
        uVar5 = uVar3;
        if ((puVar24 < (ushort *)(param_5 + lVar36) && puVar26 < (undefined2 *)(param_1 + lVar36) ||
             puVar28 < (ushort *)(param_5 + lVar36) && puVar26 < (undefined2 *)(param_3 + lVar36))
           || (uVar13 + 1 < 3)) {
          do {
            puVar6 = puVar24 + 4;
            uVar10 = puVar24[1];
            uVar31 = (uint)*puVar24 + (uint)*puVar28;
            uVar11 = puVar28[1];
            if (0xffff < uVar31) {
              uVar31 = 0xffffffff;
            }
            *puVar26 = (short)uVar31;
            uVar31 = (uint)uVar10 + (uint)uVar11;
            if (0xffff < uVar31) {
              uVar31 = 0xffffffff;
            }
            puVar26[1] = (short)uVar31;
            uVar31 = (uint)puVar24[2] + (uint)puVar28[2];
            uVar38 = (uint)puVar24[3] + (uint)puVar28[3];
            if (0xffff < uVar31) {
              uVar31 = 0xffffffff;
            }
            puVar26[2] = (short)uVar31;
            if (0xffff < uVar38) {
              uVar38 = 0xffffffff;
            }
            puVar26[3] = (short)uVar38;
            puVar24 = puVar6;
            puVar26 = puVar26 + 4;
            puVar28 = puVar28 + 4;
          } while (puVar6 != (ushort *)(param_1 + lVar47));
        }
        else {
          uVar31 = uVar12;
          if (3 < uVar15) {
            lVar29 = 0;
            uVar31 = 0;
            do {
              puVar6 = (ushort *)((long)puVar28 + lVar29);
              puVar23 = (undefined8 *)((long)puVar26 + lVar29);
              uVar31 = uVar31 + 1;
              uVar17 = ((undefined8 *)((long)puVar24 + lVar29))[1];
              uVar16 = *(undefined8 *)((long)puVar24 + lVar29);
              lVar29 = lVar29 + 0x10;
              auVar44._0_4_ = (uint)*puVar6 + (uint)(ushort)uVar16;
              auVar44._4_4_ = (uint)puVar6[1] + (uint)(ushort)((ulong)uVar16 >> 0x10);
              auVar44._8_4_ = (uint)puVar6[2] + (uint)(ushort)((ulong)uVar16 >> 0x20);
              auVar44._12_4_ = (uint)puVar6[3] + (uint)(ushort)((ulong)uVar16 >> 0x30);
              auVar41._0_4_ = (uint)puVar6[4] + (uint)(ushort)uVar17;
              auVar41._4_4_ = (uint)puVar6[5] + (uint)(ushort)((ulong)uVar17 >> 0x10);
              auVar41._8_4_ = (uint)puVar6[6] + (uint)(ushort)((ulong)uVar17 >> 0x20);
              auVar41._12_4_ = (uint)puVar6[7] + (uint)(ushort)((ulong)uVar17 >> 0x30);
              auVar45._8_4_ = 0xffff;
              auVar45._0_8_ = 0xffff0000ffff;
              auVar45._12_4_ = 0xffff;
              auVar45 = NEON_smin(auVar44,auVar45,4);
              auVar43._8_4_ = 0xffff;
              auVar43._0_8_ = 0xffff0000ffff;
              auVar43._12_4_ = 0xffff;
              auVar40 = NEON_smin(auVar41,auVar43,4);
              puVar23[1] = CONCAT26(auVar40._12_2_,
                                    CONCAT24(auVar40._8_2_,CONCAT22(auVar40._4_2_,auVar40._0_2_)));
              *puVar23 = CONCAT26(auVar45._12_2_,
                                  CONCAT24(auVar45._8_2_,CONCAT22(auVar45._4_2_,auVar45._0_2_)));
            } while (uVar31 < uVar1);
            uVar31 = uVar12 + uVar1 * 8;
            if (uVar13 + 1 == uVar1 * 2) goto LAB_00239878;
          }
          uVar22 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar31 << 1;
          lVar29 = uVar22 + 2;
          lVar33 = uVar22 + 4;
          lVar2 = uVar22 + 6;
          uVar31 = (uint)*(ushort *)(param_1 + uVar22) + (uint)*(ushort *)(param_3 + uVar22);
          uVar38 = (uint)*(ushort *)(param_1 + lVar29) + (uint)*(ushort *)(param_3 + lVar29);
          if (0xffff < uVar31) {
            uVar31 = 0xffffffff;
          }
          *(short *)(param_5 + uVar22) = (short)uVar31;
          if (0xffff < uVar38) {
            uVar38 = 0xffffffff;
          }
          *(short *)(param_5 + lVar29) = (short)uVar38;
          uVar31 = (uint)*(ushort *)(param_1 + lVar33) + (uint)*(ushort *)(param_3 + lVar33);
          uVar38 = (uint)*(ushort *)(param_1 + lVar2) + (uint)*(ushort *)(param_3 + lVar2);
          if (0xffff < uVar31) {
            uVar31 = 0xffffffff;
          }
          *(short *)(param_5 + lVar33) = (short)uVar31;
          if (0xffff < uVar38) {
            uVar38 = 0xffffffff;
          }
          *(short *)(param_5 + lVar2) = (short)uVar38;
        }
      }
LAB_00239878:
      uVar22 = (ulong)uVar5;
      if ((int)uVar5 < iVar9) {
        uVar31 = iVar9 - uVar5;
        lVar33 = ((long)(int)uVar5 + 8) * 2;
        lVar29 = lVar33 + -0x10;
        uVar30 = param_5 + lVar29;
        uVar7 = param_1 + lVar29;
        if ((uVar30 < (ulong)(param_1 + lVar33) && uVar7 < (ulong)(param_5 + lVar33) ||
             (ulong)(param_3 + lVar29) < (ulong)(param_5 + lVar33) &&
             uVar30 < (ulong)(param_3 + lVar33)) || (uVar31 < 0xb)) {
          lVar33 = 0;
          do {
            uVar31 = (uint)*(ushort *)(uVar7 + lVar33) +
                     (uint)*(ushort *)(param_3 + lVar29 + lVar33);
            if (0xffff < uVar31) {
              uVar31 = 0xffffffff;
            }
            *(short *)(uVar30 + lVar33) = (short)uVar31;
            lVar33 = lVar33 + 2;
          } while (lVar33 != ((ulong)((iVar9 + -1) - uVar5) + 1) * 2);
        }
        else {
          uVar38 = -((uint)(uVar7 >> 1) & 7) & 7;
          uVar8 = uVar31;
          if (uVar38 < uVar31) {
            uVar8 = uVar38;
          }
          if (uVar8 != 0) {
            lVar33 = (long)(int)uVar5 * 2;
            uVar38 = uVar5 + 1;
            uVar4 = (uint)*(ushort *)(param_1 + lVar33) + (uint)*(ushort *)(param_3 + lVar33);
            if (0xffff < uVar4) {
              uVar4 = 0xffffffff;
            }
            *(short *)(param_5 + lVar33) = (short)uVar4;
            if (uVar8 != 1) {
              lVar2 = lVar33 + 2;
              uVar38 = uVar5 + 2;
              uVar4 = (uint)*(ushort *)(param_1 + lVar2) + (uint)*(ushort *)(param_3 + lVar2);
              if (0xffff < uVar4) {
                uVar4 = 0xffffffff;
              }
              *(short *)(param_5 + lVar2) = (short)uVar4;
              if (uVar8 != 2) {
                lVar2 = lVar33 + 4;
                uVar38 = uVar5 + 3;
                uVar4 = (uint)*(ushort *)(param_1 + lVar2) + (uint)*(ushort *)(param_3 + lVar2);
                if (0xffff < uVar4) {
                  uVar4 = 0xffffffff;
                }
                *(short *)(param_5 + lVar2) = (short)uVar4;
                if (uVar8 != 3) {
                  lVar2 = lVar33 + 6;
                  uVar38 = uVar5 + 4;
                  uVar4 = (uint)*(ushort *)(param_1 + lVar2) + (uint)*(ushort *)(param_3 + lVar2);
                  if (0xffff < uVar4) {
                    uVar4 = 0xffffffff;
                  }
                  *(short *)(param_5 + lVar2) = (short)uVar4;
                  if (uVar8 != 4) {
                    lVar2 = lVar33 + 8;
                    uVar38 = uVar5 + 5;
                    uVar4 = (uint)*(ushort *)(param_1 + lVar2) + (uint)*(ushort *)(param_3 + lVar2);
                    if (0xffff < uVar4) {
                      uVar4 = 0xffffffff;
                    }
                    *(short *)(param_5 + lVar2) = (short)uVar4;
                    if (uVar8 != 5) {
                      lVar2 = lVar33 + 10;
                      uVar38 = uVar5 + 6;
                      uVar4 = (uint)*(ushort *)(param_1 + lVar2) +
                              (uint)*(ushort *)(param_3 + lVar2);
                      if (0xffff < uVar4) {
                        uVar4 = 0xffffffff;
                      }
                      *(short *)(param_5 + lVar2) = (short)uVar4;
                      if (uVar8 == 7) {
                        lVar33 = lVar33 + 0xc;
                        uVar22 = (ulong)(uVar5 + 7);
                        uVar5 = (uint)*(ushort *)(param_1 + lVar33) +
                                (uint)*(ushort *)(param_3 + lVar33);
                        if (0xffff < uVar5) {
                          uVar5 = 0xffffffff;
                        }
                        *(short *)(param_5 + lVar33) = (short)uVar5;
                        goto LAB_00239a0c;
                      }
                    }
                  }
                }
              }
            }
            uVar22 = (ulong)uVar38;
          }
LAB_00239a0c:
          uVar5 = ((uVar31 - uVar8) - 8 >> 3) + 1;
          iVar25 = uVar5 * 8;
          if (6 < (uVar31 - 1) - uVar8) {
            lVar29 = lVar29 + (ulong)uVar8 * 2;
            uVar38 = 0;
            puVar23 = (undefined8 *)(param_5 + lVar29);
            puVar24 = (ushort *)(param_3 + lVar29);
            puVar39 = (undefined8 *)(param_1 + lVar29);
            do {
              uVar17 = puVar39[1];
              uVar16 = *puVar39;
              uVar38 = uVar38 + 1;
              auVar46._0_4_ = (uint)*puVar24 + (uint)(ushort)uVar16;
              auVar46._4_4_ = (uint)puVar24[1] + (uint)(ushort)((ulong)uVar16 >> 0x10);
              auVar46._8_4_ = (uint)puVar24[2] + (uint)(ushort)((ulong)uVar16 >> 0x20);
              auVar46._12_4_ = (uint)puVar24[3] + (uint)(ushort)((ulong)uVar16 >> 0x30);
              auVar42._0_4_ = (uint)puVar24[4] + (uint)(ushort)uVar17;
              auVar42._4_4_ = (uint)puVar24[5] + (uint)(ushort)((ulong)uVar17 >> 0x10);
              auVar42._8_4_ = (uint)puVar24[6] + (uint)(ushort)((ulong)uVar17 >> 0x20);
              auVar42._12_4_ = (uint)puVar24[7] + (uint)(ushort)((ulong)uVar17 >> 0x30);
              auVar18._8_4_ = 0xffff;
              auVar18._0_8_ = 0xffff0000ffff;
              auVar18._12_4_ = 0xffff;
              auVar45 = NEON_smin(auVar46,auVar18,4);
              auVar19._8_4_ = 0xffff;
              auVar19._0_8_ = 0xffff0000ffff;
              auVar19._12_4_ = 0xffff;
              auVar40 = NEON_smin(auVar42,auVar19,4);
              puVar23[1] = CONCAT26(auVar40._12_2_,
                                    CONCAT24(auVar40._8_2_,CONCAT22(auVar40._4_2_,auVar40._0_2_)));
              *puVar23 = CONCAT26(auVar45._12_2_,
                                  CONCAT24(auVar45._8_2_,CONCAT22(auVar45._4_2_,auVar45._0_2_)));
              puVar23 = puVar23 + 2;
              puVar24 = puVar24 + 8;
              puVar39 = puVar39 + 2;
            } while (uVar38 < uVar5);
            uVar22 = (ulong)(uint)((int)uVar22 + iVar25);
            if (uVar31 - uVar8 == iVar25) goto LAB_00239b8c;
          }
          uVar30 = -(uVar22 >> 0x1f) & 0xfffffffe00000000 | uVar22 << 1;
          iVar25 = (int)uVar22;
          uVar5 = (uint)*(ushort *)(param_1 + uVar30) + (uint)*(ushort *)(param_3 + uVar30);
          if (0xffff < uVar5) {
            uVar5 = 0xffffffff;
          }
          *(short *)(param_5 + uVar30) = (short)uVar5;
          if (iVar25 + 1 < iVar9) {
            lVar29 = uVar30 + 2;
            uVar5 = (uint)*(ushort *)(param_1 + lVar29) + (uint)*(ushort *)(param_3 + lVar29);
            if (0xffff < uVar5) {
              uVar5 = 0xffffffff;
            }
            *(short *)(param_5 + lVar29) = (short)uVar5;
            if (iVar25 + 2 < iVar9) {
              lVar29 = uVar30 + 4;
              uVar5 = (uint)*(ushort *)(param_1 + lVar29) + (uint)*(ushort *)(param_3 + lVar29);
              if (0xffff < uVar5) {
                uVar5 = 0xffffffff;
              }
              *(short *)(param_5 + lVar29) = (short)uVar5;
              if (iVar25 + 3 < iVar9) {
                lVar29 = uVar30 + 6;
                uVar5 = (uint)*(ushort *)(param_1 + lVar29) + (uint)*(ushort *)(param_3 + lVar29);
                if (0xffff < uVar5) {
                  uVar5 = 0xffffffff;
                }
                *(short *)(param_5 + lVar29) = (short)uVar5;
                if (iVar25 + 4 < iVar9) {
                  lVar29 = uVar30 + 8;
                  uVar5 = (uint)*(ushort *)(param_1 + lVar29) + (uint)*(ushort *)(param_3 + lVar29);
                  if (0xffff < uVar5) {
                    uVar5 = 0xffffffff;
                  }
                  *(short *)(param_5 + lVar29) = (short)uVar5;
                  if (iVar25 + 5 < iVar9) {
                    lVar29 = uVar30 + 10;
                    uVar5 = (uint)*(ushort *)(param_1 + lVar29) +
                            (uint)*(ushort *)(param_3 + lVar29);
                    if (0xffff < uVar5) {
                      uVar5 = 0xffffffff;
                    }
                    *(short *)(param_5 + lVar29) = (short)uVar5;
                    if (iVar25 + 6 < iVar9) {
                      lVar29 = uVar30 + 0xc;
                      uVar5 = (uint)*(ushort *)(param_1 + lVar29) +
                              (uint)*(ushort *)(param_3 + lVar29);
                      if (0xffff < uVar5) {
                        uVar5 = 0xffffffff;
                      }
                      *(short *)(param_5 + lVar29) = (short)uVar5;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00239b8c:
      iVar35 = iVar35 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar35 != 0);
  }
  return;
}


==================================================================

### FUNC 00239c90 (536 bytes) name=FUN_00239c90

void FUN_00239c90(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 (*pauVar9) [16];
  char *pcVar10;
  long lVar11;
  undefined8 *puVar12;
  undefined1 *puVar13;
  undefined1 (*pauVar14) [16];
  char *pcVar15;
  long lVar16;
  undefined1 uVar17;
  undefined1 uVar18;
  undefined1 uVar19;
  undefined1 (*pauVar20) [16];
  undefined1 uVar21;
  undefined1 (*pauVar22) [16];
  int iVar23;
  long lVar24;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  
  iVar23 = param_7[1];
  iVar4 = *param_7;
  if (iVar23 != 0) {
    uVar7 = iVar4 - 0x20;
    iVar5 = ((uVar7 >> 5) + 1) * 0x20;
    if ((int)uVar7 < 0) {
      iVar5 = 0;
    }
    uVar6 = (uint)((iVar4 + -4) - iVar5) >> 2;
    lVar24 = (long)iVar5;
    do {
      if (-1 < (int)uVar7) {
        pauVar9 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar14 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar12 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar22 = pauVar9 + -1;
          pauVar20 = pauVar14 + -1;
          auVar25 = *pauVar9;
          pauVar9 = pauVar9 + 2;
          auVar8 = *pauVar14;
          pauVar14 = pauVar14 + 2;
          auVar26 = NEON_sqadd(*pauVar22,*pauVar20,1);
          auVar25 = NEON_sqadd(auVar25,auVar8,1);
          puVar12[-1] = auVar26._8_8_;
          puVar12[-2] = auVar26._0_8_;
          puVar12[1] = auVar25._8_8_;
          *puVar12 = auVar25._0_8_;
          puVar12 = puVar12 + 4;
        } while (pauVar9 != (undefined1 (*) [16])(param_1 + (ulong)(uVar7 >> 5) * 0x20 + 0x30));
      }
      uVar17 = 0x80;
      uVar18 = 0x7f;
      iVar2 = iVar5;
      if (iVar5 < iVar4 + -3) {
        pcVar10 = (char *)(param_1 + lVar24);
        puVar13 = (undefined1 *)(param_5 + lVar24);
        pcVar15 = (char *)(param_3 + lVar24);
        do {
          iVar2 = (int)*pcVar10 + (int)*pcVar15;
          uVar21 = (char)iVar2;
          if ((0xff < iVar2 + 0x80U) && (uVar21 = uVar18, iVar2 < 1)) {
            uVar21 = uVar17;
          }
          iVar2 = (int)pcVar10[1] + (int)pcVar15[1];
          uVar19 = (char)iVar2;
          if ((0xff < iVar2 + 0x80U) && (uVar19 = uVar18, iVar2 < 1)) {
            uVar19 = uVar17;
          }
          *puVar13 = uVar21;
          puVar13[1] = uVar19;
          iVar2 = (int)pcVar10[2] + (int)pcVar15[2];
          uVar21 = (char)iVar2;
          if ((0xff < iVar2 + 0x80U) && (uVar21 = 0x7f, iVar2 < 1)) {
            uVar21 = 0x80;
          }
          pcVar1 = pcVar10 + 3;
          pcVar10 = pcVar10 + 4;
          iVar2 = (int)*pcVar1 + (uint)(byte)pcVar15[3];
          uVar19 = (char)iVar2;
          if ((0xff < iVar2 + 0x80U) && (uVar19 = 0x7f, iVar2 < 1)) {
            uVar19 = 0x80;
          }
          puVar13[2] = uVar21;
          puVar13[3] = uVar19;
          puVar13 = puVar13 + 4;
          pcVar15 = pcVar15 + 4;
          iVar2 = iVar5 + 4 + uVar6 * 4;
        } while (pcVar10 != (char *)(param_1 + lVar24 + 4 + (ulong)uVar6 * 4));
      }
      lVar16 = (long)iVar2;
      if (iVar2 < iVar4) {
        lVar11 = 0;
        do {
          iVar3 = (int)*(char *)(param_1 + lVar16 + lVar11) +
                  (int)*(char *)(param_3 + lVar16 + lVar11);
          uVar21 = (char)iVar3;
          if ((0xff < iVar3 + 0x80U) && (uVar21 = uVar18, iVar3 < 1)) {
            uVar21 = uVar17;
          }
          *(undefined1 *)(param_5 + lVar16 + lVar11) = uVar21;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar4 + -1) - iVar2) + 1);
      }
      iVar23 = iVar23 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 00239ea8 (468 bytes) name=FUN_00239ea8

void FUN_00239ea8(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  byte *pbVar1;
  int iVar2;
  undefined1 uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  int iVar8;
  undefined *puVar9;
  undefined1 (*pauVar10) [16];
  byte *pbVar11;
  long lVar12;
  undefined8 *puVar13;
  undefined1 *puVar14;
  undefined1 (*pauVar15) [16];
  byte *pbVar16;
  undefined1 (*pauVar17) [16];
  long lVar18;
  undefined1 (*pauVar19) [16];
  int iVar20;
  long lVar21;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  
  iVar20 = param_7[1];
  iVar2 = *param_7;
  if (iVar20 != 0) {
    uVar6 = iVar2 - 0x20;
    iVar4 = ((uVar6 >> 5) + 1) * 0x20;
    if ((int)uVar6 < 0) {
      iVar4 = 0;
    }
    uVar5 = (uint)((iVar2 + -4) - iVar4) >> 2;
    lVar21 = (long)iVar4;
    do {
      if (-1 < (int)uVar6) {
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar19 = pauVar10 + -1;
          pauVar17 = pauVar15 + -1;
          auVar22 = *pauVar10;
          pauVar10 = pauVar10 + 2;
          auVar7 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar23 = NEON_uqadd(*pauVar19,*pauVar17,1);
          auVar22 = NEON_uqadd(auVar22,auVar7,1);
          puVar13[-1] = auVar23._8_8_;
          puVar13[-2] = auVar23._0_8_;
          puVar13[1] = auVar22._8_8_;
          *puVar13 = auVar22._0_8_;
          puVar13 = puVar13 + 4;
        } while (pauVar10 != (undefined1 (*) [16])(param_1 + (ulong)(uVar6 >> 5) * 0x20 + 0x30));
      }
      iVar8 = iVar4;
      if (iVar4 < iVar2 + -3) {
        pbVar11 = (byte *)(param_1 + lVar21);
        puVar14 = (undefined1 *)(param_5 + lVar21);
        pbVar16 = (byte *)(param_3 + lVar21);
        do {
          puVar9 = PTR_DAT_00501c00;
          pbVar1 = pbVar11 + 4;
          uVar3 = PTR_DAT_00501c00[(int)((uint)*pbVar11 + (uint)*pbVar16 + 0x100)];
          puVar14[1] = PTR_DAT_00501c00[(int)((uint)pbVar11[1] + (uint)pbVar16[1] + 0x100)];
          *puVar14 = uVar3;
          uVar3 = puVar9[(int)((uint)pbVar11[2] + (uint)pbVar16[2] + 0x100)];
          puVar14[3] = puVar9[(int)((uint)pbVar11[3] + (uint)pbVar16[3] + 0x100)];
          puVar14[2] = uVar3;
          pbVar11 = pbVar1;
          puVar14 = puVar14 + 4;
          pbVar16 = pbVar16 + 4;
          iVar8 = iVar4 + 4 + uVar5 * 4;
        } while (pbVar1 != (byte *)(param_1 + lVar21 + 4 + (ulong)uVar5 * 4));
      }
      lVar18 = (long)iVar8;
      if (iVar8 < iVar2) {
        lVar12 = 0;
        do {
          *(undefined *)(param_5 + lVar18 + lVar12) =
               PTR_DAT_00501c00
               [(int)((uint)*(byte *)(param_1 + lVar18 + lVar12) +
                      (uint)*(byte *)(param_3 + lVar18 + lVar12) + 0x100)];
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 0023a07c (1368 bytes) name=FUN_0023a07c

void FUN_0023a07c(int *param_1,ulong param_2,int *param_3,ulong param_4,long param_5,ulong param_6,
                 int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined4 *puVar4;
  int *piVar5;
  undefined8 *puVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  int *piVar17;
  ulong uVar18;
  uint uVar19;
  int *piVar20;
  int *piVar21;
  uint uVar22;
  int iVar23;
  undefined4 *puVar24;
  ulong uVar25;
  int *piVar26;
  int *piVar27;
  uint uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  double dVar33;
  int iVar34;
  
  dVar33 = *param_8;
  iVar7 = *param_7;
  iVar34 = param_7[1];
  if (dVar33 == 1.0) {
    iVar23 = iVar34 + -1;
    if (iVar34 != 0) {
      uVar11 = iVar7 - 4U >> 2;
      uVar9 = uVar11 + 1;
      uVar10 = uVar9 * 4;
      if (iVar7 + -3 < 1) {
        uVar10 = 0;
      }
      uVar1 = uVar10 + 1;
      lVar15 = (long)(int)uVar10;
      uVar12 = iVar7 - uVar10;
      uVar2 = uVar10 + 2;
      lVar14 = lVar15 + 4;
      piVar26 = (int *)(param_5 + 0x40);
      uVar25 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
      uVar13 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      do {
        piVar27 = piVar26 + -0x10;
        if (0 < iVar7 + -3) {
          if ((param_1 + 0x10 <= piVar27 || piVar26 <= param_1) &&
              (param_3 + 0x10 <= piVar27 || piVar26 <= param_3)) {
            lVar16 = 0;
            uVar19 = 0;
            if (3 < uVar9) {
              do {
                puVar6 = (undefined8 *)((long)piVar27 + lVar16);
                uVar19 = uVar19 + 1;
                uVar30 = ((undefined8 *)((long)param_1 + lVar16))[1];
                uVar29 = *(undefined8 *)((long)param_1 + lVar16);
                uVar32 = ((undefined8 *)((long)param_3 + lVar16))[1];
                uVar31 = *(undefined8 *)((long)param_3 + lVar16);
                lVar16 = lVar16 + 0x10;
                puVar6[1] = CONCAT44((int)((ulong)uVar30 >> 0x20) * (int)((ulong)uVar32 >> 0x20),
                                     (int)uVar30 * (int)uVar32);
                *puVar6 = CONCAT44((int)((ulong)uVar29 >> 0x20) * (int)((ulong)uVar31 >> 0x20),
                                   (int)uVar29 * (int)uVar31);
              } while (uVar19 < uVar9);
              goto LAB_0023a3bc;
            }
          }
          piVar17 = piVar26 + -0xf;
          piVar20 = param_3;
          piVar21 = param_1;
          do {
            piVar5 = piVar17 + 4;
            iVar34 = *piVar21;
            iVar8 = *piVar20;
            *piVar17 = piVar21[1] * piVar20[1];
            piVar17[-1] = iVar34 * iVar8;
            iVar34 = piVar21[2];
            iVar8 = piVar20[2];
            piVar17[2] = piVar21[3] * piVar20[3];
            piVar17[1] = iVar34 * iVar8;
            piVar17 = piVar5;
            piVar20 = piVar20 + 4;
            piVar21 = piVar21 + 4;
          } while (piVar5 != piVar27 + (ulong)uVar11 * 4 + 5);
        }
LAB_0023a3bc:
        if ((int)uVar10 < iVar7) {
          piVar17 = param_1 + lVar15;
          piVar20 = piVar27 + lVar15;
          if ((piVar17 < piVar27 + lVar14 && piVar20 < param_1 + lVar14 ||
               param_3 + lVar15 < piVar27 + lVar14 && piVar20 < param_3 + lVar14) || (uVar12 < 9)) {
            lVar16 = 0;
            do {
              *(int *)((long)piVar20 + lVar16) =
                   *(int *)((long)piVar17 + lVar16) * *(int *)((long)(param_3 + lVar15) + lVar16);
              lVar16 = lVar16 + 4;
            } while (lVar16 != ((ulong)((iVar7 + -1) - uVar10) + 1) * 4);
          }
          else {
            uVar19 = -((uint)((ulong)piVar17 >> 2) & 3) & 3;
            if (uVar12 < uVar19) {
              uVar19 = uVar12;
            }
            uVar28 = uVar10;
            if (((uVar19 != 0) &&
                (piVar27[lVar15] = param_1[lVar15] * param_3[lVar15], uVar28 = uVar1, uVar19 != 1))
               && (*(int *)((long)piVar27 + uVar25) =
                        *(int *)((long)param_1 + uVar25) * *(int *)((long)param_3 + uVar25),
                  uVar28 = uVar2, uVar19 == 3)) {
              *(int *)((long)piVar27 + uVar13) =
                   *(int *)((long)param_1 + uVar13) * *(int *)((long)param_3 + uVar13);
              uVar28 = uVar10 + 3;
            }
            uVar22 = 0;
            uVar3 = ((uVar12 - uVar19) - 4 >> 2) + 1;
            iVar34 = uVar3 * 4;
            piVar17 = piVar27 + (ulong)uVar19 + lVar15;
            piVar20 = param_3 + (ulong)uVar19 + lVar15;
            piVar21 = param_1 + (ulong)uVar19 + lVar15;
            do {
              uVar29 = *(undefined8 *)piVar20;
              uVar22 = uVar22 + 1;
              uVar30 = *(undefined8 *)piVar21;
              *(ulong *)(piVar17 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar20 + 2) >> 0x20) *
                            (int)((ulong)*(undefined8 *)(piVar21 + 2) >> 0x20),
                            (int)*(undefined8 *)(piVar20 + 2) * (int)*(undefined8 *)(piVar21 + 2));
              *(ulong *)piVar17 =
                   CONCAT44((int)((ulong)uVar29 >> 0x20) * (int)((ulong)uVar30 >> 0x20),
                            (int)uVar29 * (int)uVar30);
              piVar17 = piVar17 + 4;
              piVar20 = piVar20 + 4;
              piVar21 = piVar21 + 4;
            } while (uVar22 < uVar3);
            uVar28 = uVar28 + iVar34;
            if (iVar34 != uVar12 - uVar19) {
              uVar18 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar28 << 2;
              *(int *)((long)piVar27 + uVar18) =
                   *(int *)((long)param_1 + uVar18) * *(int *)((long)param_3 + uVar18);
              if ((int)(uVar28 + 1) < iVar7) {
                lVar16 = uVar18 + 4;
                *(int *)((long)piVar27 + lVar16) =
                     *(int *)((long)param_1 + lVar16) * *(int *)((long)param_3 + lVar16);
                if ((int)(uVar28 + 2) < iVar7) {
                  lVar16 = uVar18 + 8;
                  *(int *)((long)piVar27 + lVar16) =
                       *(int *)((long)param_1 + lVar16) * *(int *)((long)param_3 + lVar16);
                }
              }
            }
          }
        }
        iVar23 = iVar23 + -1;
        param_1 = param_1 + (param_2 >> 2);
        param_3 = param_3 + (param_4 >> 2);
        piVar26 = piVar26 + (param_6 >> 2);
      } while (iVar23 != -1);
    }
  }
  else if (iVar34 != 0) {
    uVar10 = iVar7 - 4U >> 2;
    uVar9 = (uVar10 + 1) * 4;
    if (iVar7 + -3 < 1) {
      uVar9 = 0;
    }
    uVar13 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2;
    do {
      if (0 < iVar7 + -3) {
        puVar24 = (undefined4 *)(param_5 + 4);
        piVar26 = param_3;
        piVar27 = param_1;
        do {
          puVar4 = puVar24 + 4;
          lVar14 = lrint(dVar33 * (double)*piVar27 * (double)*piVar26);
          lVar15 = lrint(dVar33 * (double)piVar27[1] * (double)piVar26[1]);
          puVar24[-1] = (int)lVar14;
          *puVar24 = (int)lVar15;
          lVar14 = lrint(dVar33 * (double)piVar27[2] * (double)piVar26[2]);
          lVar15 = lrint(dVar33 * (double)piVar27[3] * (double)piVar26[3]);
          puVar24[1] = (int)lVar14;
          puVar24[2] = (int)lVar15;
          puVar24 = puVar4;
          piVar26 = piVar26 + 4;
          piVar27 = piVar27 + 4;
        } while (puVar4 != (undefined4 *)(param_5 + (ulong)uVar10 * 0x10 + 0x14));
      }
      if ((int)uVar9 < iVar7) {
        lVar14 = 0;
        do {
          lVar15 = lrint(dVar33 * (double)*(int *)((long)param_1 + lVar14 + uVar13) *
                         (double)*(int *)((long)param_3 + lVar14 + uVar13));
          *(int *)(param_5 + uVar13 + lVar14) = (int)lVar15;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((ulong)((iVar7 + -1) - uVar9) + 1) * 4);
      }
      iVar34 = iVar34 + -1;
      param_1 = param_1 + (param_2 >> 2);
      param_3 = param_3 + (param_4 >> 2);
      param_5 = param_5 + (param_6 >> 2) * 4;
    } while (iVar34 != 0);
  }
  return;
}


==================================================================

### FUNC 0023a5d4 (564 bytes) name=FUN_0023a5d4

void FUN_0023a5d4(int *param_1,ulong param_2,int *param_3,ulong param_4,long param_5,ulong param_6,
                 int *param_7,double *param_8)

{
  undefined4 *puVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  undefined4 *puVar7;
  ulong uVar8;
  int *piVar9;
  int *piVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  int iVar14;
  
  dVar11 = *param_8;
  iVar14 = param_7[1];
  iVar2 = *param_7;
  dVar12 = param_8[1];
  dVar13 = param_8[2];
  if (iVar14 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    uVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      uVar3 = 0;
    }
    uVar8 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    do {
      if (0 < iVar2 + -3) {
        puVar7 = (undefined4 *)(param_5 + 4);
        piVar9 = param_1;
        piVar10 = param_3;
        do {
          puVar1 = puVar7 + 4;
          lVar5 = lrint(dVar13 + dVar12 * (double)*piVar10 + (double)*piVar9 * dVar11);
          lVar6 = lrint(dVar13 + dVar12 * (double)piVar10[1] + (double)piVar9[1] * dVar11);
          puVar7[-1] = (int)lVar5;
          *puVar7 = (int)lVar6;
          lVar5 = lrint(dVar13 + dVar12 * (double)piVar10[2] + (double)piVar9[2] * dVar11);
          lVar6 = lrint(dVar13 + dVar12 * (double)piVar10[3] + (double)piVar9[3] * dVar11);
          puVar7[1] = (int)lVar5;
          puVar7[2] = (int)lVar6;
          puVar7 = puVar1;
          piVar9 = piVar9 + 4;
          piVar10 = piVar10 + 4;
        } while (puVar1 != (undefined4 *)(param_5 + (ulong)uVar4 * 0x10 + 0x14));
      }
      if ((int)uVar3 < iVar2) {
        lVar5 = 0;
        do {
          lVar6 = lrint(dVar13 + dVar12 * (double)*(int *)((long)param_3 + lVar5 + uVar8) +
                                 (double)*(int *)((long)param_1 + lVar5 + uVar8) * dVar11);
          *(int *)(param_5 + uVar8 + lVar5) = (int)lVar6;
          lVar5 = lVar5 + 4;
        } while (lVar5 != ((ulong)((iVar2 + -1) - uVar3) + 1) * 4);
      }
      iVar14 = iVar14 + -1;
      param_1 = (int *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_3 = (int *)((long)param_3 + (param_4 & 0xfffffffffffffffc));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar14 != 0);
  }
  return;
}


==================================================================

### FUNC 0023a808 (564 bytes) name=FUN_0023a808

void FUN_0023a808(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  short *psVar1;
  short *psVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  undefined1 auVar8 [16];
  uint uVar9;
  undefined1 (*pauVar10) [16];
  short *psVar11;
  long lVar12;
  undefined8 *puVar13;
  undefined2 *puVar14;
  undefined1 (*pauVar15) [16];
  short *psVar16;
  ulong uVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  undefined2 uVar20;
  undefined1 (*pauVar21) [16];
  undefined2 uVar22;
  undefined1 (*pauVar23) [16];
  int iVar24;
  long lVar25;
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  
  iVar24 = param_7[1];
  iVar3 = *param_7;
  if (iVar24 != 0) {
    uVar6 = iVar3 - 0x10;
    uVar4 = ((uVar6 >> 4) + 1) * 0x10;
    if ((int)uVar6 < 0) {
      uVar4 = 0;
    }
    uVar5 = (iVar3 + -4) - uVar4 >> 2;
    lVar25 = (long)(int)uVar4 * 2;
    do {
      if (-1 < (int)uVar6) {
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar23 = pauVar10 + -1;
          pauVar21 = pauVar15 + -1;
          auVar26 = *pauVar10;
          pauVar10 = pauVar10 + 2;
          auVar8 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar27 = NEON_sqsub(*pauVar23,*pauVar21,2);
          auVar26 = NEON_sqsub(auVar26,auVar8,2);
          puVar13[-1] = auVar27._8_8_;
          puVar13[-2] = auVar27._0_8_;
          puVar13[1] = auVar26._8_8_;
          *puVar13 = auVar26._0_8_;
          puVar13 = puVar13 + 4;
        } while (pauVar10 != (undefined1 (*) [16])(param_1 + (ulong)(uVar6 >> 4) * 0x20 + 0x30));
      }
      uVar18 = 0x8000;
      uVar19 = 0x7fff;
      uVar9 = uVar4;
      if ((int)uVar4 < iVar3 + -3) {
        psVar16 = (short *)(param_3 + lVar25);
        puVar14 = (undefined2 *)(param_5 + lVar25);
        psVar11 = (short *)(param_1 + lVar25);
        do {
          iVar7 = (int)*psVar11 - (int)*psVar16;
          uVar22 = (short)iVar7;
          if ((0xffff < iVar7 + 0x8000U) && (uVar22 = uVar19, iVar7 < 1)) {
            uVar22 = uVar18;
          }
          iVar7 = (int)psVar11[1] - (int)psVar16[1];
          uVar20 = (short)iVar7;
          if ((0xffff < iVar7 + 0x8000U) && (uVar20 = uVar19, iVar7 < 1)) {
            uVar20 = uVar18;
          }
          *puVar14 = uVar22;
          puVar14[1] = uVar20;
          iVar7 = (int)psVar11[2] - (int)psVar16[2];
          uVar22 = (short)iVar7;
          if ((0xffff < iVar7 + 0x8000U) && (uVar22 = 0x7fff, iVar7 < 1)) {
            uVar22 = 0x8000;
          }
          psVar1 = psVar16 + 3;
          psVar2 = psVar11 + 4;
          psVar16 = psVar16 + 4;
          iVar7 = (int)psVar11[3] - (int)*psVar1;
          uVar20 = (short)iVar7;
          if ((0xffff < iVar7 + 0x8000U) && (uVar20 = 0x7fff, iVar7 < 1)) {
            uVar20 = 0x8000;
          }
          puVar14[2] = uVar22;
          puVar14[3] = uVar20;
          puVar14 = puVar14 + 4;
          psVar11 = psVar2;
          uVar9 = uVar4 + 4 + uVar5 * 4;
        } while (psVar2 != (short *)(param_1 + ((long)(int)uVar4 + 4 + (ulong)uVar5 * 4) * 2));
      }
      if ((int)uVar9 < iVar3) {
        uVar17 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar9 << 1;
        lVar12 = 0;
        do {
          iVar7 = (int)*(short *)(param_1 + uVar17 + lVar12) -
                  (int)*(short *)(param_3 + uVar17 + lVar12);
          uVar22 = (short)iVar7;
          if ((0xffff < iVar7 + 0x8000U) && (uVar22 = uVar19, iVar7 < 1)) {
            uVar22 = uVar18;
          }
          *(undefined2 *)(param_5 + uVar17 + lVar12) = uVar22;
          lVar12 = lVar12 + 2;
        } while (lVar12 != ((ulong)((iVar3 + -1) - uVar9) + 1) * 2);
      }
      iVar24 = iVar24 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 0023aa3c (468 bytes) name=FUN_0023aa3c

void FUN_0023aa3c(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  ushort *puVar1;
  int iVar2;
  ushort uVar3;
  ushort uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  undefined1 auVar10 [16];
  undefined1 (*pauVar11) [16];
  ushort *puVar12;
  undefined8 *puVar13;
  long lVar14;
  undefined1 (*pauVar15) [16];
  undefined2 *puVar16;
  ulong uVar17;
  undefined1 (*pauVar18) [16];
  ushort *puVar19;
  undefined1 (*pauVar20) [16];
  int iVar21;
  long lVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  
  iVar21 = param_7[1];
  iVar2 = *param_7;
  if (iVar21 != 0) {
    uVar7 = iVar2 - 0x10;
    uVar5 = ((uVar7 >> 4) + 1) * 0x10;
    if ((int)uVar7 < 0) {
      uVar5 = 0;
    }
    uVar6 = (iVar2 + -4) - uVar5 >> 2;
    lVar22 = (long)(int)uVar5 * 2;
    do {
      if (-1 < (int)uVar7) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar20 = pauVar11 + -1;
          pauVar18 = pauVar15 + -1;
          auVar23 = *pauVar11;
          pauVar11 = pauVar11 + 2;
          auVar10 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar24 = NEON_uqsub(*pauVar20,*pauVar18,2);
          auVar23 = NEON_uqsub(auVar23,auVar10,2);
          puVar13[-1] = auVar24._8_8_;
          puVar13[-2] = auVar24._0_8_;
          puVar13[1] = auVar23._8_8_;
          *puVar13 = auVar23._0_8_;
          puVar13 = puVar13 + 4;
        } while (pauVar11 != (undefined1 (*) [16])(param_1 + (ulong)(uVar7 >> 4) * 0x20 + 0x30));
      }
      uVar8 = uVar5;
      if ((int)uVar5 < iVar2 + -3) {
        puVar12 = (ushort *)(param_1 + lVar22);
        puVar16 = (undefined2 *)(param_5 + lVar22);
        puVar19 = (ushort *)(param_3 + lVar22);
        do {
          puVar1 = puVar12 + 4;
          uVar3 = puVar12[1];
          uVar8 = (uint)*puVar12 - (uint)*puVar19;
          uVar4 = puVar19[1];
          if (0xffff < uVar8) {
            uVar8 = 0;
          }
          *puVar16 = (short)uVar8;
          uVar8 = (uint)uVar3 - (uint)uVar4;
          if (0xffff < uVar8) {
            uVar8 = 0;
          }
          puVar16[1] = (short)uVar8;
          uVar8 = (uint)puVar12[2] - (uint)puVar19[2];
          uVar9 = (uint)puVar12[3] - (uint)puVar19[3];
          if (0xffff < uVar8) {
            uVar8 = 0;
          }
          puVar16[2] = (short)uVar8;
          if (0xffff < uVar9) {
            uVar9 = 0;
          }
          puVar16[3] = (short)uVar9;
          puVar12 = puVar1;
          puVar16 = puVar16 + 4;
          puVar19 = puVar19 + 4;
          uVar8 = uVar5 + 4 + uVar6 * 4;
        } while (puVar1 != (ushort *)(param_1 + ((long)(int)uVar5 + 4 + (ulong)uVar6 * 4) * 2));
      }
      if ((int)uVar8 < iVar2) {
        uVar17 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        lVar14 = 0;
        do {
          uVar9 = (uint)*(ushort *)(param_1 + uVar17 + lVar14) -
                  (uint)*(ushort *)(param_3 + uVar17 + lVar14);
          if (0xffff < uVar9) {
            uVar9 = 0;
          }
          *(short *)(param_5 + uVar17 + lVar14) = (short)uVar9;
          lVar14 = lVar14 + 2;
        } while (lVar14 != ((ulong)((iVar2 + -1) - uVar8) + 1) * 2);
      }
      iVar21 = iVar21 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 0023ac10 (536 bytes) name=FUN_0023ac10

void FUN_0023ac10(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  char *pcVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  undefined1 auVar9 [16];
  undefined1 (*pauVar10) [16];
  char *pcVar11;
  long lVar12;
  undefined8 *puVar13;
  undefined1 *puVar14;
  undefined1 (*pauVar15) [16];
  char *pcVar16;
  long lVar17;
  undefined1 uVar18;
  undefined1 uVar19;
  undefined1 uVar20;
  undefined1 (*pauVar21) [16];
  undefined1 uVar22;
  undefined1 (*pauVar23) [16];
  int iVar24;
  long lVar25;
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  
  iVar24 = param_7[1];
  iVar3 = *param_7;
  if (iVar24 != 0) {
    uVar6 = iVar3 - 0x20;
    iVar4 = ((uVar6 >> 5) + 1) * 0x20;
    if ((int)uVar6 < 0) {
      iVar4 = 0;
    }
    uVar5 = (uint)((iVar3 + -4) - iVar4) >> 2;
    lVar25 = (long)iVar4;
    do {
      if (-1 < (int)uVar6) {
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar23 = pauVar10 + -1;
          pauVar21 = pauVar15 + -1;
          auVar26 = *pauVar10;
          pauVar10 = pauVar10 + 2;
          auVar9 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar27 = NEON_sqsub(*pauVar23,*pauVar21,1);
          auVar26 = NEON_sqsub(auVar26,auVar9,1);
          puVar13[-1] = auVar27._8_8_;
          puVar13[-2] = auVar27._0_8_;
          puVar13[1] = auVar26._8_8_;
          *puVar13 = auVar26._0_8_;
          puVar13 = puVar13 + 4;
        } while (pauVar10 != (undefined1 (*) [16])(param_1 + (ulong)(uVar6 >> 5) * 0x20 + 0x30));
      }
      uVar18 = 0x80;
      uVar19 = 0x7f;
      iVar7 = iVar4;
      if (iVar4 < iVar3 + -3) {
        pcVar16 = (char *)(param_3 + lVar25);
        puVar14 = (undefined1 *)(param_5 + lVar25);
        pcVar11 = (char *)(param_1 + lVar25);
        do {
          iVar7 = (int)*pcVar11 - (int)*pcVar16;
          uVar22 = (char)iVar7;
          if ((0xff < iVar7 + 0x80U) && (uVar22 = uVar19, iVar7 < 1)) {
            uVar22 = uVar18;
          }
          iVar7 = (int)pcVar11[1] - (int)pcVar16[1];
          uVar20 = (char)iVar7;
          if ((0xff < iVar7 + 0x80U) && (uVar20 = uVar19, iVar7 < 1)) {
            uVar20 = uVar18;
          }
          *puVar14 = uVar22;
          puVar14[1] = uVar20;
          iVar7 = (int)pcVar11[2] - (int)pcVar16[2];
          uVar22 = (char)iVar7;
          if ((0xff < iVar7 + 0x80U) && (uVar22 = 0x7f, iVar7 < 1)) {
            uVar22 = 0x80;
          }
          pcVar1 = pcVar16 + 3;
          pcVar2 = pcVar11 + 4;
          pcVar16 = pcVar16 + 4;
          iVar7 = (uint)(byte)pcVar11[3] - (int)*pcVar1;
          uVar20 = (char)iVar7;
          if ((0xff < iVar7 + 0x80U) && (uVar20 = 0x7f, iVar7 < 1)) {
            uVar20 = 0x80;
          }
          puVar14[2] = uVar22;
          puVar14[3] = uVar20;
          puVar14 = puVar14 + 4;
          pcVar11 = pcVar2;
          iVar7 = iVar4 + 4 + uVar5 * 4;
        } while (pcVar2 != (char *)(param_1 + lVar25 + 4 + (ulong)uVar5 * 4));
      }
      lVar17 = (long)iVar7;
      if (iVar7 < iVar3) {
        lVar12 = 0;
        do {
          iVar8 = (int)*(char *)(param_1 + lVar17 + lVar12) -
                  (int)*(char *)(param_3 + lVar17 + lVar12);
          uVar22 = (char)iVar8;
          if ((0xff < iVar8 + 0x80U) && (uVar22 = uVar19, iVar8 < 1)) {
            uVar22 = uVar18;
          }
          *(undefined1 *)(param_5 + lVar17 + lVar12) = uVar22;
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar3 + -1) - iVar7) + 1);
      }
      iVar24 = iVar24 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 0023ae28 (468 bytes) name=FUN_0023ae28

void FUN_0023ae28(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  byte *pbVar1;
  int iVar2;
  undefined1 uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  int iVar8;
  undefined *puVar9;
  undefined1 (*pauVar10) [16];
  byte *pbVar11;
  long lVar12;
  undefined8 *puVar13;
  undefined1 *puVar14;
  undefined1 (*pauVar15) [16];
  byte *pbVar16;
  undefined1 (*pauVar17) [16];
  long lVar18;
  undefined1 (*pauVar19) [16];
  int iVar20;
  long lVar21;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  
  iVar20 = param_7[1];
  iVar2 = *param_7;
  if (iVar20 != 0) {
    uVar6 = iVar2 - 0x20;
    iVar4 = ((uVar6 >> 5) + 1) * 0x20;
    if ((int)uVar6 < 0) {
      iVar4 = 0;
    }
    uVar5 = (uint)((iVar2 + -4) - iVar4) >> 2;
    lVar21 = (long)iVar4;
    do {
      if (-1 < (int)uVar6) {
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined8 *)(param_5 + 0x10);
        do {
          pauVar19 = pauVar10 + -1;
          pauVar17 = pauVar15 + -1;
          auVar22 = *pauVar10;
          pauVar10 = pauVar10 + 2;
          auVar7 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar23 = NEON_uqsub(*pauVar19,*pauVar17,1);
          auVar22 = NEON_uqsub(auVar22,auVar7,1);
          puVar13[-1] = auVar23._8_8_;
          puVar13[-2] = auVar23._0_8_;
          puVar13[1] = auVar22._8_8_;
          *puVar13 = auVar22._0_8_;
          puVar13 = puVar13 + 4;
        } while (pauVar10 != (undefined1 (*) [16])(param_1 + (ulong)(uVar6 >> 5) * 0x20 + 0x30));
      }
      iVar8 = iVar4;
      if (iVar4 < iVar2 + -3) {
        pbVar11 = (byte *)(param_1 + lVar21);
        puVar14 = (undefined1 *)(param_5 + lVar21);
        pbVar16 = (byte *)(param_3 + lVar21);
        do {
          puVar9 = PTR_DAT_00501c00;
          pbVar1 = pbVar11 + 4;
          uVar3 = PTR_DAT_00501c00[(int)(((uint)*pbVar11 - (uint)*pbVar16) + 0x100)];
          puVar14[1] = PTR_DAT_00501c00[(int)(((uint)pbVar11[1] - (uint)pbVar16[1]) + 0x100)];
          *puVar14 = uVar3;
          uVar3 = puVar9[(int)(((uint)pbVar11[2] - (uint)pbVar16[2]) + 0x100)];
          puVar14[3] = puVar9[(int)(((uint)pbVar11[3] - (uint)pbVar16[3]) + 0x100)];
          puVar14[2] = uVar3;
          pbVar11 = pbVar1;
          puVar14 = puVar14 + 4;
          pbVar16 = pbVar16 + 4;
          iVar8 = iVar4 + 4 + uVar5 * 4;
        } while (pbVar1 != (byte *)(param_1 + lVar21 + 4 + (ulong)uVar5 * 4));
      }
      lVar18 = (long)iVar8;
      if (iVar8 < iVar2) {
        lVar12 = 0;
        do {
          *(undefined *)(param_5 + lVar18 + lVar12) =
               PTR_DAT_00501c00
               [(int)(((uint)*(byte *)(param_1 + lVar18 + lVar12) -
                      (uint)*(byte *)(param_3 + lVar18 + lVar12)) + 0x100)];
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 0023affc (556 bytes) name=FUN_0023affc

void FUN_0023affc(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  short *psVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  uint uVar8;
  uint uVar9;
  int iVar10;
  undefined1 (*pauVar11) [16];
  int iVar12;
  undefined2 *puVar13;
  long lVar14;
  undefined1 (*pauVar15) [16];
  short *psVar16;
  ulong uVar17;
  undefined1 (*pauVar18) [16];
  short *psVar19;
  int iVar20;
  long lVar21;
  undefined1 (*pauVar22) [16];
  undefined2 uVar23;
  undefined2 uVar25;
  undefined2 uVar26;
  undefined2 uVar27;
  undefined2 uVar28;
  undefined2 uVar29;
  undefined2 uVar30;
  undefined1 auVar24 [16];
  undefined2 uVar31;
  undefined2 uVar32;
  undefined2 uVar34;
  undefined2 uVar35;
  undefined2 uVar36;
  undefined2 uVar37;
  undefined2 uVar38;
  undefined2 uVar39;
  undefined1 auVar33 [16];
  undefined2 uVar40;
  
  iVar20 = param_7[1];
  iVar2 = *param_7;
  if (iVar20 != 0) {
    uVar5 = iVar2 - 0x10;
    uVar3 = ((uVar5 >> 4) + 1) * 0x10;
    if ((int)uVar5 < 0) {
      uVar3 = 0;
    }
    uVar4 = (iVar2 + -4) - uVar3 >> 2;
    lVar21 = (long)(int)uVar3 * 2;
    do {
      if (-1 < (int)uVar5) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar15 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar13 = (undefined2 *)(param_5 + 0x10);
        do {
          pauVar22 = pauVar11 + -1;
          pauVar18 = pauVar15 + -1;
          auVar24 = *pauVar11;
          pauVar11 = pauVar11 + 2;
          auVar7 = *pauVar15;
          pauVar15 = pauVar15 + 2;
          auVar33 = NEON_sqsub(*pauVar22,*pauVar18,2);
          auVar24 = NEON_sqsub(auVar24,auVar7,2);
          uVar32 = MP_INT_ABS(auVar33._0_2_);
          uVar34 = MP_INT_ABS(auVar33._2_2_);
          uVar35 = MP_INT_ABS(auVar33._4_2_);
          uVar36 = MP_INT_ABS(auVar33._6_2_);
          uVar37 = MP_INT_ABS(auVar33._8_2_);
          uVar38 = MP_INT_ABS(auVar33._10_2_);
          uVar39 = MP_INT_ABS(auVar33._12_2_);
          uVar40 = MP_INT_ABS(auVar33._14_2_);
          uVar23 = MP_INT_ABS(auVar24._0_2_);
          uVar25 = MP_INT_ABS(auVar24._2_2_);
          uVar26 = MP_INT_ABS(auVar24._4_2_);
          uVar27 = MP_INT_ABS(auVar24._6_2_);
          uVar28 = MP_INT_ABS(auVar24._8_2_);
          uVar29 = MP_INT_ABS(auVar24._10_2_);
          uVar30 = MP_INT_ABS(auVar24._12_2_);
          uVar31 = MP_INT_ABS(auVar24._14_2_);
          puVar13[-4] = uVar37;
          puVar13[-3] = uVar38;
          puVar13[-2] = uVar39;
          puVar13[-1] = uVar40;
          puVar13[-8] = uVar32;
          puVar13[-7] = uVar34;
          puVar13[-6] = uVar35;
          puVar13[-5] = uVar36;
          puVar13[4] = uVar28;
          puVar13[5] = uVar29;
          puVar13[6] = uVar30;
          puVar13[7] = uVar31;
          *puVar13 = uVar23;
          puVar13[1] = uVar25;
          puVar13[2] = uVar26;
          puVar13[3] = uVar27;
          puVar13 = puVar13 + 0x10;
        } while (pauVar11 != (undefined1 (*) [16])(param_1 + (ulong)(uVar5 >> 4) * 0x20 + 0x30));
      }
      uVar8 = uVar3;
      if ((int)uVar3 < iVar2 + -3) {
        psVar16 = (short *)(param_1 + lVar21);
        puVar13 = (undefined2 *)(param_5 + lVar21);
        psVar19 = (short *)(param_3 + lVar21);
        do {
          psVar1 = psVar16 + 4;
          uVar8 = (int)*psVar16 - (int)*psVar19 >> 0x1f;
          iVar12 = ((int)*psVar16 - (int)*psVar19 ^ uVar8) - uVar8;
          uVar8 = (int)psVar16[1] - (int)psVar19[1] >> 0x1f;
          uVar23 = (undefined2)iVar12;
          iVar10 = ((int)psVar16[1] - (int)psVar19[1] ^ uVar8) - uVar8;
          if (0x7fff < iVar12) {
            uVar23 = 0x7fff;
          }
          *puVar13 = uVar23;
          uVar23 = (undefined2)iVar10;
          if (0x7fff < iVar10) {
            uVar23 = 0x7fff;
          }
          puVar13[1] = uVar23;
          uVar8 = (int)psVar16[2] - (int)psVar19[2] >> 0x1f;
          iVar12 = ((int)psVar16[2] - (int)psVar19[2] ^ uVar8) - uVar8;
          uVar8 = (int)psVar16[3] - (int)psVar19[3] >> 0x1f;
          iVar10 = ((int)psVar16[3] - (int)psVar19[3] ^ uVar8) - uVar8;
          uVar23 = (undefined2)iVar12;
          if (0x7fff < iVar12) {
            uVar23 = 0x7fff;
          }
          uVar25 = (undefined2)iVar10;
          puVar13[2] = uVar23;
          if (0x7fff < iVar10) {
            uVar25 = 0x7fff;
          }
          puVar13[3] = uVar25;
          psVar16 = psVar1;
          puVar13 = puVar13 + 4;
          psVar19 = psVar19 + 4;
          uVar8 = uVar3 + 4 + uVar4 * 4;
        } while (psVar1 != (short *)(param_1 + ((long)(int)uVar3 + 4 + (ulong)uVar4 * 4) * 2));
      }
      if ((int)uVar8 < iVar2) {
        uVar17 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        lVar14 = 0;
        do {
          uVar6 = (int)*(short *)(param_1 + uVar17 + lVar14) -
                  (int)*(short *)(param_3 + uVar17 + lVar14);
          uVar9 = (int)uVar6 >> 0x1f;
          iVar10 = (uVar6 ^ uVar9) - uVar9;
          uVar23 = (undefined2)iVar10;
          if (0x7fff < iVar10) {
            uVar23 = 0x7fff;
          }
          *(undefined2 *)(param_5 + uVar17 + lVar14) = uVar23;
          lVar14 = lVar14 + 2;
        } while (lVar14 != ((ulong)((iVar2 + -1) - uVar8) + 1) * 2);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 0023b228 (540 bytes) name=FUN_0023b228

void FUN_0023b228(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  uint uVar8;
  int iVar9;
  undefined1 (*pauVar10) [16];
  int iVar11;
  undefined1 *puVar12;
  long lVar13;
  undefined1 (*pauVar14) [16];
  char *pcVar15;
  undefined1 (*pauVar16) [16];
  byte *pbVar17;
  long lVar18;
  int iVar19;
  long lVar20;
  undefined1 (*pauVar21) [16];
  undefined1 uVar22;
  undefined1 uVar24;
  undefined1 uVar25;
  undefined1 uVar26;
  undefined1 uVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  undefined1 uVar30;
  undefined1 uVar31;
  undefined1 uVar32;
  undefined1 uVar33;
  undefined1 uVar34;
  undefined1 uVar35;
  undefined1 uVar36;
  undefined1 uVar37;
  undefined1 auVar23 [16];
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar41;
  undefined1 uVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  undefined1 uVar45;
  undefined1 uVar46;
  undefined1 uVar47;
  undefined1 uVar48;
  undefined1 uVar49;
  undefined1 uVar50;
  undefined1 uVar51;
  undefined1 uVar52;
  undefined1 uVar53;
  undefined1 uVar54;
  undefined1 auVar40 [16];
  undefined1 uVar55;
  
  iVar19 = param_7[1];
  iVar2 = *param_7;
  if (iVar19 != 0) {
    uVar5 = iVar2 - 0x20;
    iVar3 = ((uVar5 >> 5) + 1) * 0x20;
    if ((int)uVar5 < 0) {
      iVar3 = 0;
    }
    uVar4 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar20 = (long)iVar3;
    do {
      if (-1 < (int)uVar5) {
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar14 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar12 = (undefined1 *)(param_5 + 0x10);
        do {
          pauVar21 = pauVar10 + -1;
          pauVar16 = pauVar14 + -1;
          auVar23 = *pauVar10;
          pauVar10 = pauVar10 + 2;
          auVar7 = *pauVar14;
          pauVar14 = pauVar14 + 2;
          auVar40 = NEON_sqsub(*pauVar21,*pauVar16,1);
          auVar23 = NEON_sqsub(auVar23,auVar7,1);
          uVar39 = MP_INT_ABS(auVar40[0]);
          uVar41 = MP_INT_ABS(auVar40[1]);
          uVar42 = MP_INT_ABS(auVar40[2]);
          uVar43 = MP_INT_ABS(auVar40[3]);
          uVar44 = MP_INT_ABS(auVar40[4]);
          uVar45 = MP_INT_ABS(auVar40[5]);
          uVar46 = MP_INT_ABS(auVar40[6]);
          uVar47 = MP_INT_ABS(auVar40[7]);
          uVar48 = MP_INT_ABS(auVar40[8]);
          uVar49 = MP_INT_ABS(auVar40[9]);
          uVar50 = MP_INT_ABS(auVar40[10]);
          uVar51 = MP_INT_ABS(auVar40[0xb]);
          uVar52 = MP_INT_ABS(auVar40[0xc]);
          uVar53 = MP_INT_ABS(auVar40[0xd]);
          uVar54 = MP_INT_ABS(auVar40[0xe]);
          uVar55 = MP_INT_ABS(auVar40[0xf]);
          uVar22 = MP_INT_ABS(auVar23[0]);
          uVar24 = MP_INT_ABS(auVar23[1]);
          uVar25 = MP_INT_ABS(auVar23[2]);
          uVar26 = MP_INT_ABS(auVar23[3]);
          uVar27 = MP_INT_ABS(auVar23[4]);
          uVar28 = MP_INT_ABS(auVar23[5]);
          uVar29 = MP_INT_ABS(auVar23[6]);
          uVar30 = MP_INT_ABS(auVar23[7]);
          uVar31 = MP_INT_ABS(auVar23[8]);
          uVar32 = MP_INT_ABS(auVar23[9]);
          uVar33 = MP_INT_ABS(auVar23[10]);
          uVar34 = MP_INT_ABS(auVar23[0xb]);
          uVar35 = MP_INT_ABS(auVar23[0xc]);
          uVar36 = MP_INT_ABS(auVar23[0xd]);
          uVar37 = MP_INT_ABS(auVar23[0xe]);
          uVar38 = MP_INT_ABS(auVar23[0xf]);
          puVar12[-8] = uVar48;
          puVar12[-7] = uVar49;
          puVar12[-6] = uVar50;
          puVar12[-5] = uVar51;
          puVar12[-4] = uVar52;
          puVar12[-3] = uVar53;
          puVar12[-2] = uVar54;
          puVar12[-1] = uVar55;
          puVar12[-0x10] = uVar39;
          puVar12[-0xf] = uVar41;
          puVar12[-0xe] = uVar42;
          puVar12[-0xd] = uVar43;
          puVar12[-0xc] = uVar44;
          puVar12[-0xb] = uVar45;
          puVar12[-10] = uVar46;
          puVar12[-9] = uVar47;
          puVar12[8] = uVar31;
          puVar12[9] = uVar32;
          puVar12[10] = uVar33;
          puVar12[0xb] = uVar34;
          puVar12[0xc] = uVar35;
          puVar12[0xd] = uVar36;
          puVar12[0xe] = uVar37;
          puVar12[0xf] = uVar38;
          *puVar12 = uVar22;
          puVar12[1] = uVar24;
          puVar12[2] = uVar25;
          puVar12[3] = uVar26;
          puVar12[4] = uVar27;
          puVar12[5] = uVar28;
          puVar12[6] = uVar29;
          puVar12[7] = uVar30;
          puVar12 = puVar12 + 0x20;
        } while (pauVar10 != (undefined1 (*) [16])(param_1 + (ulong)(uVar5 >> 5) * 0x20 + 0x30));
      }
      iVar9 = iVar3;
      if (iVar3 < iVar2 + -3) {
        pcVar15 = (char *)(param_1 + lVar20);
        puVar12 = (undefined1 *)(param_5 + lVar20);
        pbVar17 = (byte *)(param_3 + lVar20);
        do {
          pcVar1 = pcVar15 + 4;
          uVar6 = (int)((int)*pcVar15 - (uint)*pbVar17) >> 0x1f;
          iVar11 = ((int)*pcVar15 - (uint)*pbVar17 ^ uVar6) - uVar6;
          uVar6 = (int)((uint)(byte)pcVar15[1] - (uint)pbVar17[1]) >> 0x1f;
          uVar22 = (undefined1)iVar11;
          iVar9 = ((uint)(byte)pcVar15[1] - (uint)pbVar17[1] ^ uVar6) - uVar6;
          if (0x7f < iVar11) {
            uVar22 = 0x7f;
          }
          *puVar12 = uVar22;
          uVar22 = (undefined1)iVar9;
          if (0x7f < iVar9) {
            uVar22 = 0x7f;
          }
          puVar12[1] = uVar22;
          uVar6 = (int)((uint)(byte)pcVar15[2] - (uint)pbVar17[2]) >> 0x1f;
          iVar11 = ((uint)(byte)pcVar15[2] - (uint)pbVar17[2] ^ uVar6) - uVar6;
          uVar6 = (int)((uint)(byte)pcVar15[3] - (uint)pbVar17[3]) >> 0x1f;
          iVar9 = ((uint)(byte)pcVar15[3] - (uint)pbVar17[3] ^ uVar6) - uVar6;
          uVar22 = (undefined1)iVar11;
          if (0x7f < iVar11) {
            uVar22 = 0x7f;
          }
          uVar24 = (undefined1)iVar9;
          puVar12[2] = uVar22;
          if (0x7f < iVar9) {
            uVar24 = 0x7f;
          }
          puVar12[3] = uVar24;
          pcVar15 = pcVar1;
          puVar12 = puVar12 + 4;
          pbVar17 = pbVar17 + 4;
          iVar9 = iVar3 + 4 + uVar4 * 4;
        } while (pcVar1 != (char *)(param_1 + lVar20 + 4 + (ulong)uVar4 * 4));
      }
      lVar18 = (long)iVar9;
      if (iVar9 < iVar2) {
        lVar13 = 0;
        do {
          uVar6 = (int)*(char *)(param_1 + lVar18 + lVar13) -
                  (int)*(char *)(param_3 + lVar18 + lVar13);
          uVar8 = (int)uVar6 >> 0x1f;
          iVar11 = (uVar6 ^ uVar8) - uVar8;
          uVar22 = (undefined1)iVar11;
          if (0x7f < iVar11) {
            uVar22 = 0x7f;
          }
          *(undefined1 *)(param_5 + lVar18 + lVar13) = uVar22;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar2 + -1) - iVar9) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 0023b444 (432 bytes) name=FUN_0023b444

void FUN_0023b444(long param_1,ulong param_2,undefined1 (*param_3) [16],ulong param_4,uint *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  float *pfVar6;
  float *pfVar7;
  float *pfVar8;
  float *pfVar9;
  float *pfVar10;
  float *pfVar11;
  char cVar12;
  float *pfVar13;
  long lVar14;
  float *pfVar15;
  undefined1 (*pauVar16) [16];
  ulong uVar17;
  ulong uVar18;
  undefined1 (*pauVar19) [16];
  uint *puVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  undefined1 auVar25 [16];
  float fVar26;
  float fVar29;
  float fVar30;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar31;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  float fVar34;
  
  iVar2 = *param_7;
  fVar34 = (float)*param_8;
  iVar3 = param_7[1];
  cVar12 = cv::checkHardwareSupport(3);
  if (cVar12 == '\0') {
    cVar12 = cv::checkHardwareSupport(100);
  }
  if (iVar3 != 0) {
    do {
      uVar17 = 0;
      if ((cVar12 != '\0') && (0 < iVar2 + -7)) {
        pfVar13 = (float *)(param_1 + 0x10);
        pauVar19 = param_3;
        puVar20 = param_5;
        do {
          pfVar15 = pfVar13 + -4;
          fVar21 = *pfVar13;
          pfVar6 = pfVar13 + 1;
          pfVar7 = pfVar13 + 2;
          pfVar8 = pfVar13 + 3;
          pauVar16 = pauVar19 + 1;
          auVar4 = *pauVar19;
          uVar1 = (int)uVar17 + 8;
          uVar17 = (ulong)uVar1;
          pfVar9 = pfVar13 + -3;
          pfVar10 = pfVar13 + -2;
          pfVar11 = pfVar13 + -1;
          pauVar19 = pauVar19 + 2;
          pfVar13 = pfVar13 + 8;
          auVar5 = *pauVar16;
          auVar32 = NEON_frecpe(auVar4,4);
          auVar27 = NEON_frecps(auVar4,auVar32,4);
          auVar25 = NEON_frecpe(auVar5,4);
          auVar28._0_4_ = auVar32._0_4_ * auVar27._0_4_;
          auVar28._4_4_ = auVar32._4_4_ * auVar27._4_4_;
          auVar28._8_4_ = auVar32._8_4_ * auVar27._8_4_;
          auVar28._12_4_ = auVar32._12_4_ * auVar27._12_4_;
          auVar27 = NEON_frecps(auVar5,auVar25,4);
          auVar33 = NEON_frecps(auVar4,auVar28,4);
          auVar32._0_4_ = auVar25._0_4_ * auVar27._0_4_;
          auVar32._4_4_ = auVar25._4_4_ * auVar27._4_4_;
          auVar32._8_4_ = auVar25._8_4_ * auVar27._8_4_;
          auVar32._12_4_ = auVar25._12_4_ * auVar27._12_4_;
          auVar27 = NEON_frecps(auVar5,auVar32,4);
          fVar26 = fVar34 * *pfVar15 * auVar28._0_4_ * auVar33._0_4_;
          fVar29 = fVar34 * *pfVar9 * auVar28._4_4_ * auVar33._4_4_;
          fVar30 = fVar34 * *pfVar10 * auVar28._8_4_ * auVar33._8_4_;
          fVar31 = fVar34 * *pfVar11 * auVar28._12_4_ * auVar33._12_4_;
          fVar21 = fVar34 * fVar21 * auVar32._0_4_ * auVar27._0_4_;
          fVar22 = fVar34 * *pfVar6 * auVar32._4_4_ * auVar27._4_4_;
          fVar23 = fVar34 * *pfVar7 * auVar32._8_4_ * auVar27._8_4_;
          fVar24 = fVar34 * *pfVar8 * auVar32._12_4_ * auVar27._12_4_;
          puVar20[2] = (uint)fVar30 ^ (uint)fVar30 & -(uint)(auVar4._8_4_ == 0.0);
          puVar20[3] = (uint)fVar31 ^ (uint)fVar31 & -(uint)(auVar4._12_4_ == 0.0);
          *puVar20 = (uint)fVar26 ^ (uint)fVar26 & -(uint)(auVar4._0_4_ == 0.0);
          puVar20[1] = (uint)fVar29 ^ (uint)fVar29 & -(uint)(auVar4._4_4_ == 0.0);
          puVar20[6] = (uint)fVar23 ^ (uint)fVar23 & -(uint)(auVar5._8_4_ == 0.0);
          puVar20[7] = (uint)fVar24 ^ (uint)fVar24 & -(uint)(auVar5._12_4_ == 0.0);
          puVar20[4] = (uint)fVar21 ^ (uint)fVar21 & -(uint)(auVar5._0_4_ == 0.0);
          puVar20[5] = (uint)fVar22 ^ (uint)fVar22 & -(uint)(auVar5._4_4_ == 0.0);
          puVar20 = puVar20 + 8;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar17 < iVar2) {
        uVar18 = -(uVar17 >> 0x1f) & 0xfffffffc00000000 | uVar17 << 2;
        lVar14 = 0;
        do {
          fVar21 = 0.0;
          if (*(float *)(*param_3 + lVar14 + uVar18) != 0.0) {
            fVar21 = (fVar34 * *(float *)(param_1 + uVar18 + lVar14)) /
                     *(float *)(*param_3 + lVar14 + uVar18);
          }
          *(float *)((long)param_5 + lVar14 + uVar18) = fVar21;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((ulong)(uint)((iVar2 + -1) - (int)uVar17) + 1) * 4);
      }
      iVar3 = iVar3 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_3 = (undefined1 (*) [16])(*param_3 + (param_4 & 0xfffffffffffffffc));
      param_5 = (uint *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar3 != 0);
  }
  return;
}


==================================================================

### FUNC 0023b5f4 (700 bytes) name=FUN_0023b5f4

void FUN_0023b5f4(long param_1,ulong param_2,long param_3,ulong param_4,undefined8 *param_5,
                 long param_6,int *param_7,int *param_8)

{
  bool bVar1;
  ulong uVar2;
  int iVar3;
  int iVar4;
  undefined8 *puVar5;
  long lVar6;
  undefined8 *puVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  byte bVar12;
  int iVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined4 uVar22;
  undefined4 uVar23;
  undefined4 uVar24;
  undefined4 uVar25;
  
  iVar13 = *param_8;
  param_2 = param_2 >> 1;
  param_4 = param_4 >> 1;
  if (iVar13 - 2U < 2) {
    lVar6 = param_3;
    uVar2 = param_4;
    if (iVar13 == 2) {
      bVar12 = 0xff;
      iVar13 = 4;
      goto LAB_0023b784;
    }
    iVar13 = 1;
    param_3 = param_1;
    param_4 = param_2;
  }
  else {
    lVar6 = param_1;
    uVar2 = param_2;
    if (iVar13 == 4) {
      bVar12 = 0xff;
      param_1 = param_3;
      param_2 = param_4;
      goto LAB_0023b784;
    }
    if (iVar13 != 1) {
      bVar1 = iVar13 == 0;
      if ((iVar13 != 5) && (!bVar1)) {
        return;
      }
      iVar13 = param_7[1];
      param_7[1] = iVar13 + -1;
      if (iVar13 == 0) {
        return;
      }
      iVar13 = *param_7;
      if (bVar1) goto LAB_0023b73c;
LAB_0023b660:
      uVar22 = 0xffffffff;
      uVar23 = 0xffffffff;
      uVar24 = 0xffffffff;
      uVar25 = 0xffffffff;
      if (iVar13 < 0x10) goto LAB_0023b748;
      do {
        puVar7 = (undefined8 *)(param_1 + 0x10);
        puVar5 = (undefined8 *)(param_3 + 0x10);
        iVar3 = 0;
        puVar11 = param_5;
        do {
          uVar21 = puVar7[1];
          uVar20 = *puVar7;
          iVar3 = iVar3 + 0x10;
          uVar19 = puVar7[-1];
          uVar18 = puVar7[-2];
          puVar7 = puVar7 + 4;
          uVar17 = puVar5[-1];
          uVar16 = puVar5[-2];
          uVar15 = puVar5[1];
          uVar14 = *puVar5;
          puVar5 = puVar5 + 4;
          puVar11[1] = CONCAT17(-((short)((ulong)uVar15 >> 0x30) == (short)((ulong)uVar21 >> 0x30))
                                ^ (byte)((uint)uVar25 >> 0x18),
                                CONCAT16(-((short)((ulong)uVar15 >> 0x20) ==
                                          (short)((ulong)uVar21 >> 0x20)) ^
                                         (byte)((uint)uVar25 >> 0x10),
                                         CONCAT15(-((short)((ulong)uVar15 >> 0x10) ==
                                                   (short)((ulong)uVar21 >> 0x10)) ^
                                                  (byte)((uint)uVar25 >> 8),
                                                  CONCAT14(-((short)uVar15 == (short)uVar21) ^
                                                           (byte)uVar25,
                                                           CONCAT13(-((short)((ulong)uVar14 >> 0x30)
                                                                     == (short)((ulong)uVar20 >>
                                                                               0x30)) ^
                                                                    (byte)((uint)uVar24 >> 0x18),
                                                                    CONCAT12(-((short)((ulong)uVar14
                                                                                      >> 0x20) ==
                                                                              (short)((ulong)uVar20
                                                                                     >> 0x20)) ^
                                                                             (byte)((uint)uVar24 >>
                                                                                   0x10),
                                                                             CONCAT11(-((short)((
                                                  ulong)uVar14 >> 0x10) ==
                                                  (short)((ulong)uVar20 >> 0x10)) ^
                                                  (byte)((uint)uVar24 >> 8),
                                                  -((short)uVar14 == (short)uVar20) ^ (byte)uVar24))
                                                  )))));
          *puVar11 = CONCAT17(-((short)((ulong)uVar17 >> 0x30) == (short)((ulong)uVar19 >> 0x30)) ^
                              (byte)((uint)uVar23 >> 0x18),
                              CONCAT16(-((short)((ulong)uVar17 >> 0x20) ==
                                        (short)((ulong)uVar19 >> 0x20)) ^
                                       (byte)((uint)uVar23 >> 0x10),
                                       CONCAT15(-((short)((ulong)uVar17 >> 0x10) ==
                                                 (short)((ulong)uVar19 >> 0x10)) ^
                                                (byte)((uint)uVar23 >> 8),
                                                CONCAT14(-((short)uVar17 == (short)uVar19) ^
                                                         (byte)uVar23,
                                                         CONCAT13(-((short)((ulong)uVar16 >> 0x30)
                                                                   == (short)((ulong)uVar18 >> 0x30)
                                                                   ) ^ (byte)((uint)uVar22 >> 0x18),
                                                                  CONCAT12(-((short)((ulong)uVar16
                                                                                    >> 0x20) ==
                                                                            (short)((ulong)uVar18 >>
                                                                                   0x20)) ^
                                                                           (byte)((uint)uVar22 >>
                                                                                 0x10),
                                                                           CONCAT11(-((short)((ulong
                                                  )uVar16 >> 0x10) == (short)((ulong)uVar18 >> 0x10)
                                                  ) ^ (byte)((uint)uVar22 >> 8),
                                                  -((short)uVar16 == (short)uVar18) ^ (byte)uVar22))
                                                  )))));
          iVar13 = *param_7;
          puVar11 = puVar11 + 2;
        } while (iVar3 < iVar13 + -0xf);
        while( true ) {
          if (iVar3 < iVar13) {
            lVar8 = (long)iVar3;
            lVar6 = 0;
            lVar9 = lVar8 * 2;
            do {
              iVar3 = iVar3 + 1;
              *(char *)((long)param_5 + lVar6 + lVar8) =
                   -!bVar1 ^ -(*(short *)(param_1 + lVar9 + lVar6 * 2) ==
                              *(short *)(param_3 + lVar9 + lVar6 * 2));
              lVar6 = lVar6 + 1;
              iVar13 = *param_7;
            } while (iVar3 < iVar13);
          }
          iVar3 = param_7[1];
          param_1 = param_1 + param_2 * 2;
          param_3 = param_3 + param_4 * 2;
          param_5 = (undefined8 *)((long)param_5 + param_6);
          param_7[1] = iVar3 + -1;
          if (iVar3 == 0) {
            return;
          }
          if (!bVar1) goto LAB_0023b660;
LAB_0023b73c:
          uVar22 = 0;
          uVar23 = 0;
          uVar24 = 0;
          uVar25 = 0;
          if (0xf < iVar13) break;
LAB_0023b748:
          iVar3 = 0;
        }
      } while( true );
    }
  }
  bVar12 = 0;
  param_1 = param_3;
  param_2 = param_4;
LAB_0023b784:
  iVar3 = param_7[1];
  param_7[1] = iVar3 + -1;
  if (iVar3 == 0) {
    return;
  }
  iVar3 = *param_7;
  if (iVar13 == 1) goto LAB_0023b890;
LAB_0023b7a8:
  uVar22 = 0xffffffff;
  uVar23 = 0xffffffff;
  uVar24 = 0xffffffff;
  uVar25 = 0xffffffff;
  if (iVar3 < 0x10) goto LAB_0023b89c;
  do {
    puVar7 = (undefined8 *)(lVar6 + 0x10);
    puVar5 = (undefined8 *)(param_1 + 0x10);
    iVar4 = 0;
    puVar11 = param_5;
    do {
      uVar21 = puVar7[1];
      uVar20 = *puVar7;
      iVar4 = iVar4 + 0x10;
      uVar19 = puVar7[-1];
      uVar18 = puVar7[-2];
      puVar7 = puVar7 + 4;
      uVar17 = puVar5[-1];
      uVar16 = puVar5[-2];
      uVar15 = puVar5[1];
      uVar14 = *puVar5;
      puVar5 = puVar5 + 4;
      puVar11[1] = CONCAT17(~-((short)((ulong)uVar21 >> 0x30) <= (short)((ulong)uVar15 >> 0x30)) ^
                            (byte)((uint)uVar25 >> 0x18),
                            CONCAT16(~-((short)((ulong)uVar21 >> 0x20) <=
                                       (short)((ulong)uVar15 >> 0x20)) ^
                                     (byte)((uint)uVar25 >> 0x10),
                                     CONCAT15(~-((short)((ulong)uVar21 >> 0x10) <=
                                                (short)((ulong)uVar15 >> 0x10)) ^
                                              (byte)((uint)uVar25 >> 8),
                                              CONCAT14(~-((short)uVar21 <= (short)uVar15) ^
                                                       (byte)uVar25,
                                                       CONCAT13(~-((short)((ulong)uVar20 >> 0x30) <=
                                                                  (short)((ulong)uVar14 >> 0x30)) ^
                                                                (byte)((uint)uVar24 >> 0x18),
                                                                CONCAT12(~-((short)((ulong)uVar20 >>
                                                                                   0x20) <=
                                                                           (short)((ulong)uVar14 >>
                                                                                  0x20)) ^
                                                                         (byte)((uint)uVar24 >> 0x10
                                                                               ),CONCAT11(~-((short)
                                                  ((ulong)uVar20 >> 0x10) <=
                                                  (short)((ulong)uVar14 >> 0x10)) ^
                                                  (byte)((uint)uVar24 >> 8),
                                                  ~-((short)uVar20 <= (short)uVar14) ^ (byte)uVar24)
                                                  ))))));
      *puVar11 = CONCAT17(~-((short)((ulong)uVar19 >> 0x30) <= (short)((ulong)uVar17 >> 0x30)) ^
                          (byte)((uint)uVar23 >> 0x18),
                          CONCAT16(~-((short)((ulong)uVar19 >> 0x20) <=
                                     (short)((ulong)uVar17 >> 0x20)) ^ (byte)((uint)uVar23 >> 0x10),
                                   CONCAT15(~-((short)((ulong)uVar19 >> 0x10) <=
                                              (short)((ulong)uVar17 >> 0x10)) ^
                                            (byte)((uint)uVar23 >> 8),
                                            CONCAT14(~-((short)uVar19 <= (short)uVar17) ^
                                                     (byte)uVar23,
                                                     CONCAT13(~-((short)((ulong)uVar18 >> 0x30) <=
                                                                (short)((ulong)uVar16 >> 0x30)) ^
                                                              (byte)((uint)uVar22 >> 0x18),
                                                              CONCAT12(~-((short)((ulong)uVar18 >>
                                                                                 0x20) <=
                                                                         (short)((ulong)uVar16 >>
                                                                                0x20)) ^
                                                                       (byte)((uint)uVar22 >> 0x10),
                                                                       CONCAT11(~-((short)((ulong)
                                                  uVar18 >> 0x10) <= (short)((ulong)uVar16 >> 0x10))
                                                  ^ (byte)((uint)uVar22 >> 8),
                                                  ~-((short)uVar18 <= (short)uVar16) ^ (byte)uVar22)
                                                  ))))));
      iVar3 = *param_7;
      puVar11 = puVar11 + 2;
    } while (iVar4 < iVar3 + -0xf);
    while( true ) {
      if (iVar4 < iVar3) {
        lVar9 = (long)iVar4;
        lVar8 = 0;
        lVar10 = lVar9 * 2;
        do {
          iVar4 = iVar4 + 1;
          *(byte *)((long)param_5 + lVar8 + lVar9) =
               bVar12 ^ -(*(short *)(param_1 + lVar10 + lVar8 * 2) <
                         *(short *)(lVar6 + lVar10 + lVar8 * 2));
          lVar8 = lVar8 + 1;
          iVar3 = *param_7;
        } while (iVar4 < iVar3);
      }
      iVar4 = param_7[1];
      lVar6 = lVar6 + uVar2 * 2;
      param_1 = param_1 + param_2 * 2;
      param_5 = (undefined8 *)((long)param_5 + param_6);
      param_7[1] = iVar4 + -1;
      if (iVar4 == 0) {
        return;
      }
      if (iVar13 != 1) goto LAB_0023b7a8;
LAB_0023b890:
      uVar22 = 0;
      uVar23 = 0;
      uVar24 = 0;
      uVar25 = 0;
      if (0xf < iVar3) break;
LAB_0023b89c:
      iVar4 = 0;
    }
  } while( true );
}


==================================================================

### FUNC 0023b8b0 (572 bytes) name=FUN_0023b8b0

void FUN_0023b8b0(undefined8 *param_1,long param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,int *param_8)

{
  bool bVar1;
  undefined8 *puVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  long lVar9;
  long lVar10;
  byte bVar11;
  int iVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined4 uVar17;
  undefined4 uVar18;
  undefined4 uVar19;
  undefined4 uVar20;
  
  iVar12 = *param_8;
  if (iVar12 - 2U < 2) {
    puVar2 = param_3;
    lVar5 = param_4;
    if (iVar12 == 2) {
      bVar11 = 0xff;
      iVar12 = 4;
      goto LAB_0023ba00;
    }
    iVar12 = 1;
    param_3 = param_1;
    param_4 = param_2;
  }
  else {
    puVar2 = param_1;
    lVar5 = param_2;
    if (iVar12 == 4) {
      bVar11 = 0xff;
      param_1 = param_3;
      param_2 = param_4;
      goto LAB_0023ba00;
    }
    if (iVar12 != 1) {
      bVar1 = iVar12 == 0;
      if ((iVar12 != 5) && (!bVar1)) {
        return;
      }
      iVar12 = param_7[1];
      param_7[1] = iVar12 + -1;
      if (iVar12 == 0) {
        return;
      }
      iVar12 = *param_7;
      if (bVar1) goto LAB_0023b9b8;
LAB_0023b90c:
      uVar17 = 0xffffffff;
      uVar18 = 0xffffffff;
      uVar19 = 0xffffffff;
      uVar20 = 0xffffffff;
      if (iVar12 < 0x10) goto LAB_0023b9c4;
      do {
        iVar3 = 0;
        puVar2 = param_5;
        puVar6 = param_3;
        puVar7 = param_1;
        do {
          uVar16 = puVar7[1];
          uVar15 = *puVar7;
          iVar3 = iVar3 + 0x10;
          uVar14 = puVar6[1];
          uVar13 = *puVar6;
          puVar2[1] = CONCAT17(-((char)((ulong)uVar14 >> 0x38) == (char)((ulong)uVar16 >> 0x38)) ^
                               (byte)((uint)uVar20 >> 0x18),
                               CONCAT16(-((char)((ulong)uVar14 >> 0x30) ==
                                         (char)((ulong)uVar16 >> 0x30)) ^
                                        (byte)((uint)uVar20 >> 0x10),
                                        CONCAT15(-((char)((ulong)uVar14 >> 0x28) ==
                                                  (char)((ulong)uVar16 >> 0x28)) ^
                                                 (byte)((uint)uVar20 >> 8),
                                                 CONCAT14(-((char)((ulong)uVar14 >> 0x20) ==
                                                           (char)((ulong)uVar16 >> 0x20)) ^
                                                          (byte)uVar20,
                                                          CONCAT13(-((char)((ulong)uVar14 >> 0x18)
                                                                    == (char)((ulong)uVar16 >> 0x18)
                                                                    ) ^ (byte)((uint)uVar19 >> 0x18)
                                                                   ,CONCAT12(-((char)((ulong)uVar14
                                                                                     >> 0x10) ==
                                                                              (char)((ulong)uVar16
                                                                                    >> 0x10)) ^
                                                                             (byte)((uint)uVar19 >>
                                                                                   0x10),
                                                                             CONCAT11(-((char)((
                                                  ulong)uVar14 >> 8) == (char)((ulong)uVar16 >> 8))
                                                  ^ (byte)((uint)uVar19 >> 8),
                                                  -((char)uVar14 == (char)uVar16) ^ (byte)uVar19))))
                                                )));
          *puVar2 = CONCAT17(-((char)((ulong)uVar13 >> 0x38) == (char)((ulong)uVar15 >> 0x38)) ^
                             (byte)((uint)uVar18 >> 0x18),
                             CONCAT16(-((char)((ulong)uVar13 >> 0x30) ==
                                       (char)((ulong)uVar15 >> 0x30)) ^ (byte)((uint)uVar18 >> 0x10)
                                      ,CONCAT15(-((char)((ulong)uVar13 >> 0x28) ==
                                                 (char)((ulong)uVar15 >> 0x28)) ^
                                                (byte)((uint)uVar18 >> 8),
                                                CONCAT14(-((char)((ulong)uVar13 >> 0x20) ==
                                                          (char)((ulong)uVar15 >> 0x20)) ^
                                                         (byte)uVar18,
                                                         CONCAT13(-((char)((ulong)uVar13 >> 0x18) ==
                                                                   (char)((ulong)uVar15 >> 0x18)) ^
                                                                  (byte)((uint)uVar17 >> 0x18),
                                                                  CONCAT12(-((char)((ulong)uVar13 >>
                                                                                   0x10) ==
                                                                            (char)((ulong)uVar15 >>
                                                                                  0x10)) ^
                                                                           (byte)((uint)uVar17 >>
                                                                                 0x10),
                                                                           CONCAT11(-((char)((ulong)
                                                  uVar13 >> 8) == (char)((ulong)uVar15 >> 8)) ^
                                                  (byte)((uint)uVar17 >> 8),
                                                  -((char)uVar13 == (char)uVar15) ^ (byte)uVar17))))
                                               )));
          iVar12 = *param_7;
          puVar2 = puVar2 + 2;
          puVar6 = puVar6 + 2;
          puVar7 = puVar7 + 2;
        } while (iVar3 < iVar12 + -0xf);
        while( true ) {
          if (iVar3 < iVar12) {
            lVar5 = 0;
            lVar9 = (long)iVar3;
            do {
              iVar3 = iVar3 + 1;
              *(char *)((long)param_5 + lVar5 + lVar9) =
                   -!bVar1 ^ -(*(char *)((long)param_1 + lVar5 + lVar9) ==
                              *(char *)((long)param_3 + lVar5 + lVar9));
              lVar5 = lVar5 + 1;
              iVar12 = *param_7;
            } while (iVar3 < iVar12);
          }
          iVar3 = param_7[1];
          param_1 = (undefined8 *)((long)param_1 + param_2);
          param_3 = (undefined8 *)((long)param_3 + param_4);
          param_5 = (undefined8 *)((long)param_5 + param_6);
          param_7[1] = iVar3 + -1;
          if (iVar3 == 0) {
            return;
          }
          if (!bVar1) goto LAB_0023b90c;
LAB_0023b9b8:
          uVar17 = 0;
          uVar18 = 0;
          uVar19 = 0;
          uVar20 = 0;
          if (0xf < iVar12) break;
LAB_0023b9c4:
          iVar3 = 0;
        }
      } while( true );
    }
  }
  bVar11 = 0;
  param_1 = param_3;
  param_2 = param_4;
LAB_0023ba00:
  iVar3 = param_7[1];
  param_7[1] = iVar3 + -1;
  if (iVar3 == 0) {
    return;
  }
  iVar3 = *param_7;
  if (iVar12 == 1) goto LAB_0023bacc;
LAB_0023ba1c:
  uVar17 = 0xffffffff;
  uVar18 = 0xffffffff;
  uVar19 = 0xffffffff;
  uVar20 = 0xffffffff;
  if (iVar3 < 0x10) goto LAB_0023bad8;
  do {
    iVar4 = 0;
    puVar6 = param_5;
    puVar7 = param_1;
    puVar8 = puVar2;
    do {
      uVar14 = puVar8[1];
      uVar13 = *puVar8;
      iVar4 = iVar4 + 0x10;
      uVar16 = puVar7[1];
      uVar15 = *puVar7;
      puVar6[1] = CONCAT17(-((byte)((ulong)uVar16 >> 0x38) < (byte)((ulong)uVar14 >> 0x38)) ^
                           (byte)((uint)uVar20 >> 0x18),
                           CONCAT16(-((byte)((ulong)uVar16 >> 0x30) < (byte)((ulong)uVar14 >> 0x30))
                                    ^ (byte)((uint)uVar20 >> 0x10),
                                    CONCAT15(-((byte)((ulong)uVar16 >> 0x28) <
                                              (byte)((ulong)uVar14 >> 0x28)) ^
                                             (byte)((uint)uVar20 >> 8),
                                             CONCAT14(-((byte)((ulong)uVar16 >> 0x20) <
                                                       (byte)((ulong)uVar14 >> 0x20)) ^ (byte)uVar20
                                                      ,CONCAT13(-((byte)((ulong)uVar16 >> 0x18) <
                                                                 (byte)((ulong)uVar14 >> 0x18)) ^
                                                                (byte)((uint)uVar19 >> 0x18),
                                                                CONCAT12(-((byte)((ulong)uVar16 >>
                                                                                 0x10) <
                                                                          (byte)((ulong)uVar14 >>
                                                                                0x10)) ^
                                                                         (byte)((uint)uVar19 >> 0x10
                                                                               ),CONCAT11(-((byte)((
                                                  ulong)uVar16 >> 8) < (byte)((ulong)uVar14 >> 8)) ^
                                                  (byte)((uint)uVar19 >> 8),
                                                  -((byte)uVar16 < (byte)uVar14) ^ (byte)uVar19)))))
                                   ));
      *puVar6 = CONCAT17(-((byte)((ulong)uVar15 >> 0x38) < (byte)((ulong)uVar13 >> 0x38)) ^
                         (byte)((uint)uVar18 >> 0x18),
                         CONCAT16(-((byte)((ulong)uVar15 >> 0x30) < (byte)((ulong)uVar13 >> 0x30)) ^
                                  (byte)((uint)uVar18 >> 0x10),
                                  CONCAT15(-((byte)((ulong)uVar15 >> 0x28) <
                                            (byte)((ulong)uVar13 >> 0x28)) ^
                                           (byte)((uint)uVar18 >> 8),
                                           CONCAT14(-((byte)((ulong)uVar15 >> 0x20) <
                                                     (byte)((ulong)uVar13 >> 0x20)) ^ (byte)uVar18,
                                                    CONCAT13(-((byte)((ulong)uVar15 >> 0x18) <
                                                              (byte)((ulong)uVar13 >> 0x18)) ^
                                                             (byte)((uint)uVar17 >> 0x18),
                                                             CONCAT12(-((byte)((ulong)uVar15 >> 0x10
                                                                              ) <
                                                                       (byte)((ulong)uVar13 >> 0x10)
                                                                       ) ^ (byte)((uint)uVar17 >>
                                                                                 0x10),
                                                                      CONCAT11(-((byte)((ulong)
                                                  uVar15 >> 8) < (byte)((ulong)uVar13 >> 8)) ^
                                                  (byte)((uint)uVar17 >> 8),
                                                  -((byte)uVar15 < (byte)uVar13) ^ (byte)uVar17)))))
                                 ));
      iVar3 = *param_7;
      puVar6 = puVar6 + 2;
      puVar7 = puVar7 + 2;
      puVar8 = puVar8 + 2;
    } while (iVar4 < iVar3 + -0xf);
    while( true ) {
      if (iVar4 < iVar3) {
        lVar9 = 0;
        lVar10 = (long)iVar4;
        do {
          iVar4 = iVar4 + 1;
          *(byte *)((long)param_5 + lVar9 + lVar10) =
               bVar11 ^ -(*(byte *)((long)param_1 + lVar9 + lVar10) <
                         *(byte *)((long)puVar2 + lVar9 + lVar10));
          lVar9 = lVar9 + 1;
          iVar3 = *param_7;
        } while (iVar4 < iVar3);
      }
      iVar4 = param_7[1];
      puVar2 = (undefined8 *)((long)puVar2 + lVar5);
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + param_6);
      param_7[1] = iVar4 + -1;
      if (iVar4 == 0) {
        return;
      }
      if (iVar12 != 1) goto LAB_0023ba1c;
LAB_0023bacc:
      uVar17 = 0;
      uVar18 = 0;
      uVar19 = 0;
      uVar20 = 0;
      if (0xf < iVar3) break;
LAB_0023bad8:
      iVar4 = 0;
    }
  } while( true );
}


==================================================================

### FUNC 0023baec (536 bytes) name=FUN_0023baec

void FUN_0023baec(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 long param_7,long param_8,int *param_9)

{
  byte *pbVar1;
  int iVar2;
  byte *pbVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  long lVar11;
  byte *pbVar12;
  long lVar13;
  char *pcVar14;
  byte *pbVar15;
  byte *pbVar16;
  char cVar17;
  char cVar18;
  char cVar19;
  char cVar20;
  long lVar21;
  int iVar22;
  byte bVar24;
  byte bVar25;
  byte bVar26;
  byte bVar27;
  byte bVar28;
  byte bVar29;
  undefined8 uVar23;
  byte bVar30;
  byte bVar32;
  byte bVar33;
  byte bVar34;
  byte bVar35;
  byte bVar36;
  byte bVar37;
  undefined8 uVar31;
  byte bVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  undefined8 uVar42;
  
  iVar22 = param_9[1];
  iVar7 = *param_9;
  if (iVar22 != 0) {
    iVar9 = iVar7 + -0xf;
    iVar2 = (iVar7 - 0x10U & 0xfffffff0) + 0x10;
    if (iVar9 < 1) {
      iVar2 = 0;
    }
    uVar8 = (uint)((iVar7 + -4) - iVar2) >> 2;
    lVar21 = (long)iVar2;
    do {
      lVar11 = 0;
      if (0 < iVar9) {
        do {
          puVar4 = (undefined8 *)(param_3 + lVar11);
          puVar5 = (undefined8 *)(param_5 + lVar11);
          puVar6 = (undefined8 *)(param_7 + lVar11);
          uVar31 = ((undefined8 *)(param_1 + lVar11))[1];
          uVar23 = *(undefined8 *)(param_1 + lVar11);
          lVar11 = lVar11 + 0x10;
          uVar42 = puVar4[1];
          uVar41 = *puVar4;
          uVar40 = puVar5[1];
          uVar39 = *puVar5;
          bVar24 = (byte)((ulong)uVar23 >> 8);
          bVar25 = (byte)((ulong)uVar23 >> 0x10);
          bVar26 = (byte)((ulong)uVar23 >> 0x18);
          bVar27 = (byte)((ulong)uVar23 >> 0x20);
          bVar28 = (byte)((ulong)uVar23 >> 0x28);
          bVar29 = (byte)((ulong)uVar23 >> 0x30);
          bVar30 = (byte)((ulong)uVar23 >> 0x38);
          bVar32 = (byte)((ulong)uVar31 >> 8);
          bVar33 = (byte)((ulong)uVar31 >> 0x10);
          bVar34 = (byte)((ulong)uVar31 >> 0x18);
          bVar35 = (byte)((ulong)uVar31 >> 0x20);
          bVar36 = (byte)((ulong)uVar31 >> 0x28);
          bVar37 = (byte)((ulong)uVar31 >> 0x30);
          bVar38 = (byte)((ulong)uVar31 >> 0x38);
          puVar6[1] = CONCAT17(-(bVar38 <= (byte)((ulong)uVar40 >> 0x38)) &
                               -((byte)((ulong)uVar42 >> 0x38) <= bVar38),
                               CONCAT16(-(bVar37 <= (byte)((ulong)uVar40 >> 0x30)) &
                                        -((byte)((ulong)uVar42 >> 0x30) <= bVar37),
                                        CONCAT15(-(bVar36 <= (byte)((ulong)uVar40 >> 0x28)) &
                                                 -((byte)((ulong)uVar42 >> 0x28) <= bVar36),
                                                 CONCAT14(-(bVar35 <= (byte)((ulong)uVar40 >> 0x20))
                                                          & -((byte)((ulong)uVar42 >> 0x20) <=
                                                             bVar35),
                                                          CONCAT13(-(bVar34 <=
                                                                    (byte)((ulong)uVar40 >> 0x18)) &
                                                                   -((byte)((ulong)uVar42 >> 0x18)
                                                                    <= bVar34),
                                                                   CONCAT12(-(bVar33 <=
                                                                             (byte)((ulong)uVar40 >>
                                                                                   0x10)) &
                                                                            -((byte)((ulong)uVar42
                                                                                    >> 0x10) <=
                                                                             bVar33),CONCAT11(-(
                                                  bVar32 <= (byte)((ulong)uVar40 >> 8)) &
                                                  -((byte)((ulong)uVar42 >> 8) <= bVar32),
                                                  -((byte)uVar31 <= (byte)uVar40) &
                                                  -((byte)uVar42 <= (byte)uVar31))))))));
          *puVar6 = CONCAT17(-(bVar30 <= (byte)((ulong)uVar39 >> 0x38)) &
                             -((byte)((ulong)uVar41 >> 0x38) <= bVar30),
                             CONCAT16(-(bVar29 <= (byte)((ulong)uVar39 >> 0x30)) &
                                      -((byte)((ulong)uVar41 >> 0x30) <= bVar29),
                                      CONCAT15(-(bVar28 <= (byte)((ulong)uVar39 >> 0x28)) &
                                               -((byte)((ulong)uVar41 >> 0x28) <= bVar28),
                                               CONCAT14(-(bVar27 <= (byte)((ulong)uVar39 >> 0x20)) &
                                                        -((byte)((ulong)uVar41 >> 0x20) <= bVar27),
                                                        CONCAT13(-(bVar26 <=
                                                                  (byte)((ulong)uVar39 >> 0x18)) &
                                                                 -((byte)((ulong)uVar41 >> 0x18) <=
                                                                  bVar26),CONCAT12(-(bVar25 <=
                                                                                    (byte)((ulong)
                                                  uVar39 >> 0x10)) &
                                                  -((byte)((ulong)uVar41 >> 0x10) <= bVar25),
                                                  CONCAT11(-(bVar24 <= (byte)((ulong)uVar39 >> 8)) &
                                                           -((byte)((ulong)uVar41 >> 8) <= bVar24),
                                                           -((byte)uVar23 <= (byte)uVar39) &
                                                           -((byte)uVar41 <= (byte)uVar23))))))));
        } while ((int)lVar11 < iVar9);
      }
      iVar10 = iVar2;
      if (iVar2 < iVar7 + -3) {
        pbVar15 = (byte *)(param_1 + lVar21);
        pcVar14 = (char *)(param_7 + lVar21);
        pbVar16 = (byte *)(param_5 + lVar21);
        pbVar12 = (byte *)(param_3 + lVar21);
        do {
          cVar20 = '\0';
          cVar19 = '\0';
          cVar18 = '\0';
          cVar17 = '\0';
          if (*pbVar12 <= *pbVar15) {
            cVar20 = -(*pbVar15 <= *pbVar16);
          }
          if (pbVar12[1] <= pbVar15[1]) {
            cVar19 = -(pbVar15[1] <= pbVar16[1]);
          }
          *pcVar14 = cVar20;
          pcVar14[1] = cVar19;
          if (pbVar12[2] <= pbVar15[2]) {
            cVar18 = -(pbVar15[2] <= pbVar16[2]);
          }
          pbVar1 = pbVar15 + 3;
          pbVar3 = pbVar12 + 4;
          pbVar15 = pbVar15 + 4;
          if (pbVar12[3] <= *pbVar1) {
            cVar17 = -(*pbVar1 <= pbVar16[3]);
          }
          pcVar14[2] = cVar18;
          pcVar14[3] = cVar17;
          pbVar16 = pbVar16 + 4;
          pcVar14 = pcVar14 + 4;
          pbVar12 = pbVar3;
          iVar10 = iVar2 + 4 + uVar8 * 4;
        } while (pbVar3 != (byte *)(param_3 + lVar21 + 4 + (ulong)uVar8 * 4));
      }
      lVar11 = (long)iVar10;
      if (iVar10 < iVar7) {
        lVar13 = 0;
        do {
          cVar20 = '\0';
          bVar24 = *(byte *)(param_1 + lVar11 + lVar13);
          if (*(byte *)(param_3 + lVar11 + lVar13) <= bVar24) {
            cVar20 = -(bVar24 <= *(byte *)(param_5 + lVar11 + lVar13));
          }
          *(char *)(param_7 + lVar11 + lVar13) = cVar20;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar7 + -1) - iVar10) + 1);
      }
      iVar22 = iVar22 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
      param_7 = param_7 + param_8;
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 0023bd04 (368 bytes) name=FUN_0023bd04

void FUN_0023bd04(undefined8 param_1,undefined8 param_2,long param_3,ulong param_4,uint *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  char cVar6;
  undefined1 (*pauVar7) [16];
  long lVar8;
  ulong uVar9;
  ulong uVar10;
  uint *puVar11;
  float fVar12;
  float fVar14;
  float fVar15;
  undefined1 auVar13 [16];
  float fVar16;
  undefined1 auVar17 [16];
  float fVar18;
  float fVar21;
  float fVar22;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  float fVar23;
  undefined1 auVar24 [16];
  float fVar25;
  
  iVar2 = *param_7;
  iVar3 = param_7[1];
  fVar25 = (float)*param_8;
  cVar6 = cv::checkHardwareSupport(3);
  if (cVar6 == '\0') {
    cVar6 = cv::checkHardwareSupport(100);
  }
  if (iVar3 != 0) {
    do {
      uVar9 = 0;
      if ((cVar6 != '\0') && (0 < iVar2 + -7)) {
        pauVar7 = (undefined1 (*) [16])(param_3 + 0x10);
        puVar11 = param_5;
        do {
          auVar4 = *pauVar7;
          uVar1 = (int)uVar9 + 8;
          uVar9 = (ulong)uVar1;
          auVar5 = pauVar7[-1];
          pauVar7 = pauVar7 + 2;
          auVar24 = NEON_frecpe(auVar4,4);
          auVar17 = NEON_frecpe(auVar5,4);
          auVar19 = NEON_frecps(auVar4,auVar24,4);
          auVar13 = NEON_frecps(auVar5,auVar17,4);
          auVar20._0_4_ = auVar24._0_4_ * auVar19._0_4_;
          auVar20._4_4_ = auVar24._4_4_ * auVar19._4_4_;
          auVar20._8_4_ = auVar24._8_4_ * auVar19._8_4_;
          auVar20._12_4_ = auVar24._12_4_ * auVar19._12_4_;
          auVar19._0_4_ = auVar17._0_4_ * auVar13._0_4_;
          auVar19._4_4_ = auVar17._4_4_ * auVar13._4_4_;
          auVar19._8_4_ = auVar17._8_4_ * auVar13._8_4_;
          auVar19._12_4_ = auVar17._12_4_ * auVar13._12_4_;
          auVar17 = NEON_frecps(auVar4,auVar20,4);
          auVar13 = NEON_frecps(auVar5,auVar19,4);
          fVar18 = fVar25 * auVar20._0_4_ * auVar17._0_4_;
          fVar21 = fVar25 * auVar20._4_4_ * auVar17._4_4_;
          fVar22 = fVar25 * auVar20._8_4_ * auVar17._8_4_;
          fVar23 = fVar25 * auVar20._12_4_ * auVar17._12_4_;
          fVar12 = fVar25 * auVar19._0_4_ * auVar13._0_4_;
          fVar14 = fVar25 * auVar19._4_4_ * auVar13._4_4_;
          fVar15 = fVar25 * auVar19._8_4_ * auVar13._8_4_;
          fVar16 = fVar25 * auVar19._12_4_ * auVar13._12_4_;
          puVar11[2] = (uint)fVar15 ^ (uint)fVar15 & -(uint)(auVar5._8_4_ == 0.0);
          puVar11[3] = (uint)fVar16 ^ (uint)fVar16 & -(uint)(auVar5._12_4_ == 0.0);
          *puVar11 = (uint)fVar12 ^ (uint)fVar12 & -(uint)(auVar5._0_4_ == 0.0);
          puVar11[1] = (uint)fVar14 ^ (uint)fVar14 & -(uint)(auVar5._4_4_ == 0.0);
          puVar11[6] = (uint)fVar22 ^ (uint)fVar22 & -(uint)(auVar4._8_4_ == 0.0);
          puVar11[7] = (uint)fVar23 ^ (uint)fVar23 & -(uint)(auVar4._12_4_ == 0.0);
          puVar11[4] = (uint)fVar18 ^ (uint)fVar18 & -(uint)(auVar4._0_4_ == 0.0);
          puVar11[5] = (uint)fVar21 ^ (uint)fVar21 & -(uint)(auVar4._4_4_ == 0.0);
          puVar11 = puVar11 + 8;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar9 < iVar2) {
        uVar10 = -(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar9 << 2;
        lVar8 = 0;
        do {
          fVar12 = 0.0;
          fVar14 = *(float *)(param_3 + uVar10 + lVar8);
          if (fVar14 != 0.0) {
            fVar12 = fVar25 / fVar14;
          }
          *(float *)((long)param_5 + lVar8 + uVar10) = fVar12;
          lVar8 = lVar8 + 4;
        } while (lVar8 != ((ulong)(uint)((iVar2 + -1) - (int)uVar9) + 1) * 4);
      }
      iVar3 = iVar3 + -1;
      param_3 = param_3 + (param_4 & 0xfffffffffffffffc);
      param_5 = (uint *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar3 != 0);
  }
  return;
}


==================================================================

### FUNC 0023be74 (652 bytes) name=FUN_0023be74

void FUN_0023be74(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 undefined8 *param_7,long param_8,int *param_9)

{
  ushort *puVar1;
  undefined8 *puVar2;
  char *pcVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined8 *puVar8;
  char *pcVar9;
  long lVar10;
  undefined8 *puVar11;
  ushort *puVar12;
  undefined8 *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  char cVar16;
  int iVar17;
  char cVar18;
  undefined8 *puVar19;
  char cVar20;
  char cVar21;
  long lVar22;
  int iVar23;
  long lVar24;
  long lVar25;
  ushort uVar27;
  ushort uVar28;
  undefined8 uVar26;
  ushort uVar29;
  ushort uVar31;
  ushort uVar32;
  undefined8 uVar30;
  ushort uVar33;
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  undefined8 uVar37;
  undefined8 uVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  ushort uVar43;
  ushort uVar44;
  undefined8 uVar42;
  ushort uVar45;
  ushort uVar47;
  ushort uVar48;
  undefined8 uVar46;
  ushort uVar49;
  
  iVar23 = param_9[1];
  iVar4 = *param_9;
  if (iVar23 != 0) {
    uVar6 = iVar4 - 0x10U >> 4;
    iVar5 = (uVar6 + 1) * 0x10;
    if (iVar4 + -0xf < 1) {
      iVar5 = 0;
    }
    lVar25 = (long)iVar5;
    uVar7 = (uint)((iVar4 + -4) - iVar5) >> 2;
    lVar24 = lVar25 * 2;
    do {
      if (0 < iVar4 + -0xf) {
        puVar8 = (undefined8 *)(param_1 + 0x10);
        puVar11 = (undefined8 *)(param_5 + 0x10);
        puVar13 = (undefined8 *)(param_3 + 0x10);
        puVar19 = param_7;
        do {
          uVar30 = puVar8[1];
          uVar26 = *puVar8;
          uVar35 = puVar11[1];
          uVar34 = *puVar11;
          puVar2 = puVar8 + 4;
          uVar46 = puVar8[-1];
          uVar42 = puVar8[-2];
          uVar41 = puVar13[1];
          uVar40 = *puVar13;
          uVar37 = puVar11[-1];
          uVar36 = puVar11[-2];
          uVar39 = puVar13[-1];
          uVar38 = puVar13[-2];
          uVar27 = (ushort)((ulong)uVar26 >> 0x10);
          uVar28 = (ushort)((ulong)uVar26 >> 0x20);
          uVar29 = (ushort)((ulong)uVar26 >> 0x30);
          uVar31 = (ushort)((ulong)uVar30 >> 0x10);
          uVar32 = (ushort)((ulong)uVar30 >> 0x20);
          uVar33 = (ushort)((ulong)uVar30 >> 0x30);
          uVar43 = (ushort)((ulong)uVar42 >> 0x10);
          uVar44 = (ushort)((ulong)uVar42 >> 0x20);
          uVar45 = (ushort)((ulong)uVar42 >> 0x30);
          uVar47 = (ushort)((ulong)uVar46 >> 0x10);
          uVar48 = (ushort)((ulong)uVar46 >> 0x20);
          uVar49 = (ushort)((ulong)uVar46 >> 0x30);
          puVar19[1] = CONCAT17(-(uVar33 <= (ushort)((ulong)uVar35 >> 0x30)) &
                                -((ushort)((ulong)uVar41 >> 0x30) <= uVar33),
                                CONCAT16(-(uVar32 <= (ushort)((ulong)uVar35 >> 0x20)) &
                                         -((ushort)((ulong)uVar41 >> 0x20) <= uVar32),
                                         CONCAT15(-(uVar31 <= (ushort)((ulong)uVar35 >> 0x10)) &
                                                  -((ushort)((ulong)uVar41 >> 0x10) <= uVar31),
                                                  CONCAT14(-((ushort)uVar30 <= (ushort)uVar35) &
                                                           -((ushort)uVar41 <= (ushort)uVar30),
                                                           CONCAT13(-(uVar29 <=
                                                                     (ushort)((ulong)uVar34 >> 0x30)
                                                                     ) & -((ushort)((ulong)uVar40 >>
                                                                                   0x30) <= uVar29),
                                                                    CONCAT12(-(uVar28 <=
                                                                              (ushort)((ulong)uVar34
                                                                                      >> 0x20)) &
                                                                             -((ushort)((ulong)
                                                  uVar40 >> 0x20) <= uVar28),
                                                  CONCAT11(-(uVar27 <=
                                                            (ushort)((ulong)uVar34 >> 0x10)) &
                                                           -((ushort)((ulong)uVar40 >> 0x10) <=
                                                            uVar27),-((ushort)uVar26 <=
                                                                     (ushort)uVar34) &
                                                                    -((ushort)uVar40 <=
                                                                     (ushort)uVar26))))))));
          *puVar19 = CONCAT17(-(uVar49 <= (ushort)((ulong)uVar37 >> 0x30)) &
                              -((ushort)((ulong)uVar39 >> 0x30) <= uVar49),
                              CONCAT16(-(uVar48 <= (ushort)((ulong)uVar37 >> 0x20)) &
                                       -((ushort)((ulong)uVar39 >> 0x20) <= uVar48),
                                       CONCAT15(-(uVar47 <= (ushort)((ulong)uVar37 >> 0x10)) &
                                                -((ushort)((ulong)uVar39 >> 0x10) <= uVar47),
                                                CONCAT14(-((ushort)uVar46 <= (ushort)uVar37) &
                                                         -((ushort)uVar39 <= (ushort)uVar46),
                                                         CONCAT13(-(uVar45 <=
                                                                   (ushort)((ulong)uVar36 >> 0x30))
                                                                  & -((ushort)((ulong)uVar38 >> 0x30
                                                                              ) <= uVar45),
                                                                  CONCAT12(-(uVar44 <=
                                                                            (ushort)((ulong)uVar36
                                                                                    >> 0x20)) &
                                                                           -((ushort)((ulong)uVar38
                                                                                     >> 0x20) <=
                                                                            uVar44),CONCAT11(-(
                                                  uVar43 <= (ushort)((ulong)uVar36 >> 0x10)) &
                                                  -((ushort)((ulong)uVar38 >> 0x10) <= uVar43),
                                                  -((ushort)uVar42 <= (ushort)uVar36) &
                                                  -((ushort)uVar38 <= (ushort)uVar42))))))));
          puVar8 = puVar2;
          puVar11 = puVar11 + 4;
          puVar13 = puVar13 + 4;
          puVar19 = puVar19 + 2;
        } while (puVar2 != (undefined8 *)(param_1 + (ulong)uVar6 * 0x20 + 0x30));
      }
      iVar17 = iVar5;
      if (iVar5 < iVar4 + -3) {
        puVar12 = (ushort *)(param_1 + lVar24);
        puVar15 = (ushort *)(param_5 + lVar24);
        pcVar9 = (char *)((long)param_7 + lVar25);
        puVar14 = (ushort *)(param_3 + lVar24);
        do {
          cVar21 = '\0';
          cVar20 = '\0';
          cVar18 = '\0';
          cVar16 = '\0';
          if (*puVar14 <= *puVar12) {
            cVar21 = -(*puVar12 <= *puVar15);
          }
          if (puVar14[1] <= puVar12[1]) {
            cVar20 = -(puVar12[1] <= puVar15[1]);
          }
          *pcVar9 = cVar21;
          pcVar9[1] = cVar20;
          if (puVar14[2] <= puVar12[2]) {
            cVar18 = -(puVar12[2] <= puVar15[2]);
          }
          puVar1 = puVar12 + 3;
          puVar12 = puVar12 + 4;
          if (puVar14[3] <= *puVar1) {
            cVar16 = -(*puVar1 <= puVar15[3]);
          }
          pcVar9[2] = cVar18;
          pcVar3 = pcVar9 + 4;
          puVar15 = puVar15 + 4;
          pcVar9[3] = cVar16;
          pcVar9 = pcVar3;
          puVar14 = puVar14 + 4;
          iVar17 = iVar5 + 4 + uVar7 * 4;
        } while (pcVar3 != (char *)((long)param_7 + lVar25 + 4 + (ulong)uVar7 * 4));
      }
      if (iVar17 < iVar4) {
        lVar22 = (long)iVar17 * 2;
        lVar10 = 0;
        do {
          uVar27 = *(ushort *)(param_1 + lVar22 + lVar10 * 2);
          cVar21 = '\0';
          if (*(ushort *)(param_3 + lVar22 + lVar10 * 2) <= uVar27) {
            cVar21 = -(uVar27 <= *(ushort *)(param_5 + lVar22 + lVar10 * 2));
          }
          *(char *)((long)param_7 + lVar10 + iVar17) = cVar21;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(uint)((iVar4 + -1) - iVar17) + 1);
      }
      iVar23 = iVar23 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_3 = param_3 + (param_4 & 0xfffffffffffffffe);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
      param_7 = (undefined8 *)((long)param_7 + param_8);
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 0023c100 (652 bytes) name=FUN_0023c100

void FUN_0023c100(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 undefined8 *param_7,long param_8,int *param_9)

{
  short *psVar1;
  char *pcVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined8 *puVar7;
  char *pcVar8;
  long lVar9;
  undefined8 *puVar10;
  short *psVar11;
  undefined8 *puVar12;
  short *psVar13;
  short *psVar14;
  char cVar15;
  int iVar16;
  char cVar17;
  undefined8 *puVar18;
  char cVar19;
  char cVar20;
  long lVar21;
  int iVar22;
  long lVar23;
  long lVar24;
  short sVar26;
  short sVar27;
  undefined8 uVar25;
  short sVar28;
  short sVar30;
  short sVar31;
  undefined8 uVar29;
  short sVar32;
  short sVar34;
  short sVar35;
  undefined8 uVar33;
  short sVar36;
  short sVar38;
  short sVar39;
  undefined8 uVar37;
  short sVar40;
  undefined8 uVar41;
  undefined8 uVar42;
  undefined8 uVar43;
  undefined8 uVar44;
  undefined8 uVar45;
  undefined8 uVar46;
  undefined8 uVar47;
  undefined8 uVar48;
  
  iVar22 = param_9[1];
  iVar3 = *param_9;
  if (iVar22 != 0) {
    uVar5 = iVar3 - 0x10U >> 4;
    iVar4 = (uVar5 + 1) * 0x10;
    if (iVar3 + -0xf < 1) {
      iVar4 = 0;
    }
    lVar24 = (long)iVar4;
    uVar6 = (uint)((iVar3 + -4) - iVar4) >> 2;
    lVar23 = lVar24 * 2;
    do {
      if (0 < iVar3 + -0xf) {
        puVar7 = (undefined8 *)(param_1 + 0x10);
        puVar12 = (undefined8 *)(param_3 + 0x10);
        puVar10 = (undefined8 *)(param_5 + 0x10);
        puVar18 = param_7;
        do {
          uVar29 = puVar7[1];
          uVar25 = *puVar7;
          uVar37 = puVar7[-1];
          uVar33 = puVar7[-2];
          puVar7 = puVar7 + 4;
          uVar42 = puVar12[-1];
          uVar41 = puVar12[-2];
          uVar46 = puVar10[-1];
          uVar45 = puVar10[-2];
          uVar44 = puVar12[1];
          uVar43 = *puVar12;
          puVar12 = puVar12 + 4;
          uVar48 = puVar10[1];
          uVar47 = *puVar10;
          puVar10 = puVar10 + 4;
          sVar34 = (short)((ulong)uVar33 >> 0x10);
          sVar35 = (short)((ulong)uVar33 >> 0x20);
          sVar36 = (short)((ulong)uVar33 >> 0x30);
          sVar38 = (short)((ulong)uVar37 >> 0x10);
          sVar39 = (short)((ulong)uVar37 >> 0x20);
          sVar40 = (short)((ulong)uVar37 >> 0x30);
          sVar26 = (short)((ulong)uVar25 >> 0x10);
          sVar27 = (short)((ulong)uVar25 >> 0x20);
          sVar28 = (short)((ulong)uVar25 >> 0x30);
          sVar30 = (short)((ulong)uVar29 >> 0x10);
          sVar31 = (short)((ulong)uVar29 >> 0x20);
          sVar32 = (short)((ulong)uVar29 >> 0x30);
          puVar18[1] = CONCAT17(-((short)((ulong)uVar44 >> 0x30) <= sVar32) &
                                ~-((short)((ulong)uVar48 >> 0x30) < sVar32),
                                CONCAT16(-((short)((ulong)uVar44 >> 0x20) <= sVar31) &
                                         ~-((short)((ulong)uVar48 >> 0x20) < sVar31),
                                         CONCAT15(-((short)((ulong)uVar44 >> 0x10) <= sVar30) &
                                                  ~-((short)((ulong)uVar48 >> 0x10) < sVar30),
                                                  CONCAT14(-((short)uVar44 <= (short)uVar29) &
                                                           ~-((short)uVar48 < (short)uVar29),
                                                           CONCAT13(-((short)((ulong)uVar43 >> 0x30)
                                                                     <= sVar28) &
                                                                    ~-((short)((ulong)uVar47 >> 0x30
                                                                              ) < sVar28),
                                                                    CONCAT12(-((short)((ulong)uVar43
                                                                                      >> 0x20) <=
                                                                              sVar27) &
                                                                             ~-((short)((ulong)
                                                  uVar47 >> 0x20) < sVar27),
                                                  CONCAT11(-((short)((ulong)uVar43 >> 0x10) <=
                                                            sVar26) &
                                                           ~-((short)((ulong)uVar47 >> 0x10) <
                                                             sVar26),
                                                           -((short)uVar43 <= (short)uVar25) &
                                                           ~-((short)uVar47 < (short)uVar25))))))));
          *puVar18 = CONCAT17(-((short)((ulong)uVar42 >> 0x30) <= sVar40) &
                              ~-((short)((ulong)uVar46 >> 0x30) < sVar40),
                              CONCAT16(-((short)((ulong)uVar42 >> 0x20) <= sVar39) &
                                       ~-((short)((ulong)uVar46 >> 0x20) < sVar39),
                                       CONCAT15(-((short)((ulong)uVar42 >> 0x10) <= sVar38) &
                                                ~-((short)((ulong)uVar46 >> 0x10) < sVar38),
                                                CONCAT14(-((short)uVar42 <= (short)uVar37) &
                                                         ~-((short)uVar46 < (short)uVar37),
                                                         CONCAT13(-((short)((ulong)uVar41 >> 0x30)
                                                                   <= sVar36) &
                                                                  ~-((short)((ulong)uVar45 >> 0x30)
                                                                    < sVar36),
                                                                  CONCAT12(-((short)((ulong)uVar41
                                                                                    >> 0x20) <=
                                                                            sVar35) &
                                                                           ~-((short)((ulong)uVar45
                                                                                     >> 0x20) <
                                                                             sVar35),
                                                                           CONCAT11(-((short)((ulong
                                                  )uVar41 >> 0x10) <= sVar34) &
                                                  ~-((short)((ulong)uVar45 >> 0x10) < sVar34),
                                                  -((short)uVar41 <= (short)uVar33) &
                                                  ~-((short)uVar45 < (short)uVar33))))))));
          puVar18 = puVar18 + 2;
        } while (puVar7 != (undefined8 *)(param_1 + (ulong)uVar5 * 0x20 + 0x30));
      }
      iVar16 = iVar4;
      if (iVar4 < iVar3 + -3) {
        psVar11 = (short *)(param_1 + lVar23);
        psVar14 = (short *)(param_5 + lVar23);
        pcVar8 = (char *)((long)param_7 + lVar24);
        psVar13 = (short *)(param_3 + lVar23);
        do {
          cVar20 = '\0';
          cVar19 = '\0';
          cVar17 = '\0';
          cVar15 = '\0';
          if (*psVar13 <= *psVar11) {
            cVar20 = -(*psVar11 <= *psVar14);
          }
          if (psVar13[1] <= psVar11[1]) {
            cVar19 = -(psVar11[1] <= psVar14[1]);
          }
          *pcVar8 = cVar20;
          pcVar8[1] = cVar19;
          if (psVar13[2] <= psVar11[2]) {
            cVar17 = -(psVar11[2] <= psVar14[2]);
          }
          psVar1 = psVar11 + 3;
          psVar11 = psVar11 + 4;
          if (psVar13[3] <= *psVar1) {
            cVar15 = -(*psVar1 <= psVar14[3]);
          }
          pcVar8[2] = cVar17;
          pcVar2 = pcVar8 + 4;
          psVar14 = psVar14 + 4;
          pcVar8[3] = cVar15;
          pcVar8 = pcVar2;
          psVar13 = psVar13 + 4;
          iVar16 = iVar4 + 4 + uVar6 * 4;
        } while (pcVar2 != (char *)((long)param_7 + lVar24 + 4 + (ulong)uVar6 * 4));
      }
      if (iVar16 < iVar3) {
        lVar21 = (long)iVar16 * 2;
        lVar9 = 0;
        do {
          sVar26 = *(short *)(param_1 + lVar21 + lVar9 * 2);
          cVar20 = '\0';
          if (*(short *)(param_3 + lVar21 + lVar9 * 2) <= sVar26) {
            cVar20 = -(sVar26 <= *(short *)(param_5 + lVar21 + lVar9 * 2));
          }
          *(char *)((long)param_7 + lVar9 + iVar16) = cVar20;
          lVar9 = lVar9 + 1;
        } while (lVar9 != (ulong)(uint)((iVar3 + -1) - iVar16) + 1);
      }
      iVar22 = iVar22 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_3 = param_3 + (param_4 & 0xfffffffffffffffe);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
      param_7 = (undefined8 *)((long)param_7 + param_8);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 0023c38c (656 bytes) name=FUN_0023c38c

void FUN_0023c38c(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 undefined8 *param_7,long param_8,int *param_9)

{
  int *piVar1;
  char *pcVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  char *pcVar14;
  long lVar15;
  undefined8 *puVar16;
  int *piVar17;
  undefined8 *puVar18;
  int *piVar19;
  undefined8 *puVar20;
  int *piVar21;
  char cVar22;
  undefined8 *puVar23;
  char cVar24;
  undefined8 *puVar25;
  char cVar26;
  undefined8 *puVar27;
  char cVar28;
  long lVar29;
  int iVar30;
  long lVar31;
  long lVar32;
  int iVar33;
  undefined8 uVar34;
  int iVar35;
  int iVar36;
  int iVar37;
  int iVar38;
  int iVar39;
  int iVar40;
  int iVar41;
  undefined8 uVar42;
  undefined8 uVar43;
  
  iVar30 = param_9[1];
  iVar3 = *param_9;
  if (iVar30 != 0) {
    uVar5 = iVar3 - 8U >> 3;
    iVar4 = (uVar5 + 1) * 8;
    if (iVar3 + -7 < 1) {
      iVar4 = 0;
    }
    lVar32 = (long)iVar4;
    uVar6 = (uint)((iVar3 + -4) - iVar4) >> 2;
    lVar31 = lVar32 * 4;
    do {
      if (0 < iVar3 + -7) {
        puVar13 = (undefined8 *)(param_1 + 0x10);
        puVar18 = (undefined8 *)(param_3 + 0x10);
        puVar16 = (undefined8 *)(param_5 + 0x10);
        puVar25 = param_7;
        do {
          puVar27 = puVar13 + -2;
          puVar23 = puVar18 + -2;
          puVar20 = puVar16 + -2;
          puVar7 = puVar13 + 1;
          uVar34 = *puVar13;
          puVar8 = puVar13 + -1;
          puVar13 = puVar13 + 4;
          puVar9 = puVar18 + -1;
          puVar11 = puVar16 + -1;
          puVar10 = puVar18 + 1;
          uVar42 = *puVar18;
          puVar18 = puVar18 + 4;
          puVar12 = puVar16 + 1;
          uVar43 = *puVar16;
          puVar16 = puVar16 + 4;
          iVar38 = (int)*puVar27;
          iVar39 = (int)((ulong)*puVar27 >> 0x20);
          iVar40 = (int)*puVar8;
          iVar41 = (int)((ulong)*puVar8 >> 0x20);
          iVar33 = (int)uVar34;
          iVar35 = (int)((ulong)uVar34 >> 0x20);
          iVar36 = (int)*puVar7;
          iVar37 = (int)((ulong)*puVar7 >> 0x20);
          *puVar25 = CONCAT17(-((int)((ulong)*puVar10 >> 0x20) <= iVar37) &
                              ~-((int)((ulong)*puVar12 >> 0x20) < iVar37),
                              CONCAT16(-((int)*puVar10 <= iVar36) & ~-((int)*puVar12 < iVar36),
                                       CONCAT15(-((int)((ulong)uVar42 >> 0x20) <= iVar35) &
                                                ~-((int)((ulong)uVar43 >> 0x20) < iVar35),
                                                CONCAT14(-((int)uVar42 <= iVar33) &
                                                         ~-((int)uVar43 < iVar33),
                                                         CONCAT13(-((int)((ulong)*puVar9 >> 0x20) <=
                                                                   iVar41) &
                                                                  ~-((int)((ulong)*puVar11 >> 0x20)
                                                                    < iVar41),
                                                                  CONCAT12(-((int)*puVar9 <= iVar40)
                                                                           & ~-((int)*puVar11 <
                                                                               iVar40),
                                                                           CONCAT11(-((int)((ulong)*
                                                  puVar23 >> 0x20) <= iVar39) &
                                                  ~-((int)((ulong)*puVar20 >> 0x20) < iVar39),
                                                  -((int)*puVar23 <= iVar38) &
                                                  ~-((int)*puVar20 < iVar38))))))));
          puVar25 = puVar25 + 1;
        } while (puVar13 != (undefined8 *)(param_1 + (ulong)uVar5 * 0x20 + 0x30));
      }
      iVar33 = iVar4;
      if (iVar4 < iVar3 + -3) {
        piVar17 = (int *)(param_1 + lVar31);
        piVar21 = (int *)(param_5 + lVar31);
        pcVar14 = (char *)((long)param_7 + lVar32);
        piVar19 = (int *)(param_3 + lVar31);
        do {
          cVar28 = '\0';
          cVar26 = '\0';
          cVar24 = '\0';
          cVar22 = '\0';
          if (*piVar19 <= *piVar17) {
            cVar28 = -(*piVar17 <= *piVar21);
          }
          if (piVar19[1] <= piVar17[1]) {
            cVar26 = -(piVar17[1] <= piVar21[1]);
          }
          *pcVar14 = cVar28;
          pcVar14[1] = cVar26;
          if (piVar19[2] <= piVar17[2]) {
            cVar24 = -(piVar17[2] <= piVar21[2]);
          }
          piVar1 = piVar17 + 3;
          piVar17 = piVar17 + 4;
          if (piVar19[3] <= *piVar1) {
            cVar22 = -(*piVar1 <= piVar21[3]);
          }
          pcVar14[2] = cVar24;
          pcVar2 = pcVar14 + 4;
          piVar21 = piVar21 + 4;
          pcVar14[3] = cVar22;
          pcVar14 = pcVar2;
          piVar19 = piVar19 + 4;
          iVar33 = iVar4 + 4 + uVar6 * 4;
        } while (pcVar2 != (char *)((long)param_7 + lVar32 + 4 + (ulong)uVar6 * 4));
      }
      if (iVar33 < iVar3) {
        lVar29 = (long)iVar33 * 4;
        lVar15 = 0;
        do {
          iVar35 = *(int *)(param_1 + lVar29 + lVar15 * 4);
          cVar28 = '\0';
          if (*(int *)(param_3 + lVar29 + lVar15 * 4) <= iVar35) {
            cVar28 = -(iVar35 <= *(int *)(param_5 + lVar29 + lVar15 * 4));
          }
          *(char *)((long)param_7 + lVar15 + iVar33) = cVar28;
          lVar15 = lVar15 + 1;
        } while (lVar15 != (ulong)(uint)((iVar3 + -1) - iVar33) + 1);
      }
      iVar30 = iVar30 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_3 = param_3 + (param_4 & 0xfffffffffffffffc);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
      param_7 = (undefined8 *)((long)param_7 + param_8);
    } while (iVar30 != 0);
  }
  return;
}


==================================================================

### FUNC 0023c61c (644 bytes) name=FUN_0023c61c

void FUN_0023c61c(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 undefined8 *param_7,long param_8,int *param_9)

{
  undefined8 *puVar1;
  char *pcVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined8 *puVar7;
  char *pcVar8;
  long lVar9;
  undefined8 *puVar10;
  float *pfVar11;
  int iVar12;
  undefined8 *puVar13;
  float *pfVar14;
  undefined8 *puVar15;
  float *pfVar16;
  int iVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  char cVar21;
  char cVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  
  iVar17 = param_9[1];
  iVar3 = *param_9;
  if (iVar17 != 0) {
    uVar5 = iVar3 - 8U >> 3;
    iVar4 = (uVar5 + 1) * 8;
    if (iVar3 + -7 < 1) {
      iVar4 = 0;
    }
    uVar6 = (uint)((iVar3 + -4) - iVar4) >> 2;
    lVar19 = (long)iVar4;
    lVar18 = lVar19 * 4;
    do {
      if (0 < iVar3 + -7) {
        puVar7 = (undefined8 *)(param_1 + 0x10);
        puVar10 = (undefined8 *)(param_5 + 0x10);
        puVar13 = (undefined8 *)(param_3 + 0x10);
        puVar15 = param_7;
        do {
          puVar1 = puVar7 + 4;
          fVar23 = (float)*puVar7;
          fVar24 = (float)((ulong)*puVar7 >> 0x20);
          fVar25 = (float)puVar7[1];
          fVar26 = (float)((ulong)puVar7[1] >> 0x20);
          fVar27 = (float)puVar7[-2];
          fVar28 = (float)((ulong)puVar7[-2] >> 0x20);
          fVar29 = (float)puVar7[-1];
          fVar30 = (float)((ulong)puVar7[-1] >> 0x20);
          *puVar15 = CONCAT17(-(fVar26 <= (float)((ulong)puVar10[1] >> 0x20)) &
                              -((float)((ulong)puVar13[1] >> 0x20) <= fVar26),
                              CONCAT16(-(fVar25 <= (float)puVar10[1]) &
                                       -((float)puVar13[1] <= fVar25),
                                       CONCAT15(-(fVar24 <= (float)((ulong)*puVar10 >> 0x20)) &
                                                -((float)((ulong)*puVar13 >> 0x20) <= fVar24),
                                                CONCAT14(-(fVar23 <= (float)*puVar10) &
                                                         -((float)*puVar13 <= fVar23),
                                                         CONCAT13(-(fVar30 <=
                                                                   (float)((ulong)puVar10[-1] >>
                                                                          0x20)) &
                                                                  -((float)((ulong)puVar13[-1] >>
                                                                           0x20) <= fVar30),
                                                                  CONCAT12(-(fVar29 <=
                                                                            (float)puVar10[-1]) &
                                                                           -((float)puVar13[-1] <=
                                                                            fVar29),CONCAT11(-(
                                                  fVar28 <= (float)((ulong)puVar10[-2] >> 0x20)) &
                                                  -((float)((ulong)puVar13[-2] >> 0x20) <= fVar28),
                                                  -(fVar27 <= (float)puVar10[-2]) &
                                                  -((float)puVar13[-2] <= fVar27))))))));
          puVar7 = puVar1;
          puVar10 = puVar10 + 4;
          puVar13 = puVar13 + 4;
          puVar15 = puVar15 + 1;
        } while (puVar1 != (undefined8 *)(param_1 + (ulong)uVar5 * 0x20 + 0x30));
      }
      iVar12 = iVar4;
      if (iVar4 < iVar3 + -3) {
        pfVar14 = (float *)(param_3 + lVar18);
        pfVar11 = (float *)(param_1 + lVar18);
        pfVar16 = (float *)(param_5 + lVar18);
        pcVar8 = (char *)((long)param_7 + lVar19);
        do {
          cVar21 = '\0';
          if (*pfVar14 <= *pfVar11) {
            cVar21 = -(*pfVar11 <= *pfVar16);
          }
          cVar22 = '\0';
          if (pfVar14[1] <= pfVar11[1]) {
            cVar22 = -(pfVar11[1] <= pfVar16[1]);
          }
          *pcVar8 = cVar21;
          cVar21 = '\0';
          pcVar8[1] = cVar22;
          if (pfVar14[2] <= pfVar11[2]) {
            cVar21 = -(pfVar11[2] <= pfVar16[2]);
          }
          cVar22 = '\0';
          if (pfVar14[3] <= pfVar11[3]) {
            cVar22 = -(pfVar11[3] <= pfVar16[3]);
          }
          pcVar8[2] = cVar21;
          pcVar2 = pcVar8 + 4;
          pfVar14 = pfVar14 + 4;
          pcVar8[3] = cVar22;
          pfVar11 = pfVar11 + 4;
          pfVar16 = pfVar16 + 4;
          pcVar8 = pcVar2;
          iVar12 = iVar4 + 4 + uVar6 * 4;
        } while (pcVar2 != (char *)((long)param_7 + lVar19 + 4 + (ulong)uVar6 * 4));
      }
      if (iVar12 < iVar3) {
        lVar20 = (long)iVar12 * 4;
        lVar9 = 0;
        do {
          fVar23 = *(float *)(param_1 + lVar20 + lVar9 * 4);
          cVar21 = '\0';
          if (*(float *)(param_3 + lVar20 + lVar9 * 4) <= fVar23) {
            cVar21 = -(fVar23 <= *(float *)(param_5 + lVar20 + lVar9 * 4));
          }
          *(char *)((long)param_7 + lVar9 + iVar12) = cVar21;
          lVar9 = lVar9 + 1;
        } while (lVar9 != (ulong)(uint)((iVar3 + -1) - iVar12) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_3 = param_3 + (param_4 & 0xfffffffffffffffc);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
      param_7 = (undefined8 *)((long)param_7 + param_8);
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 0023c8a0 (108 bytes) name=FUN_0023c8a0

void FUN_0023c8a0(undefined8 param_1,undefined8 param_2,long param_3,ulong param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  long lVar2;
  int iVar3;
  double dVar4;
  double dVar5;
  double dVar6;
  
  iVar1 = *param_7;
  dVar6 = *param_8;
  iVar3 = param_7[1] + -1;
  if (param_7[1] != 0) {
    do {
      lVar2 = 0;
      if (0 < iVar1) {
        do {
          dVar4 = 0.0;
          dVar5 = *(double *)(param_3 + lVar2 * 8);
          if (dVar5 != 0.0) {
            dVar4 = dVar6 / dVar5;
          }
          *(double *)(param_5 + lVar2 * 8) = dVar4;
          lVar2 = lVar2 + 1;
        } while ((int)lVar2 < iVar1);
      }
      iVar3 = iVar3 + -1;
      param_3 = param_3 + (param_4 & 0xfffffffffffffff8);
      param_5 = param_5 + (param_6 & 0xfffffffffffffff8);
    } while (iVar3 != -1);
  }
  return;
}


==================================================================

### FUNC 0023c90c name=FUN_0023c90c DECOMPILE FAILED

### FUNC 0023e05c (5716 bytes) name=FUN_0023e05c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0023e05c(byte *param_1,ulong param_2,byte *param_3,ulong param_4,byte *param_5,long param_6
                 ,int *param_7,int *param_8)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  ushort uVar10;
  ushort uVar11;
  short sVar12;
  short sVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  ulong uVar18;
  bool bVar19;
  int iVar20;
  undefined8 *puVar21;
  byte *pbVar22;
  byte *pbVar23;
  int iVar24;
  uint uVar25;
  ushort *puVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  int iVar30;
  ushort *puVar31;
  byte bVar32;
  long lVar33;
  uint uVar34;
  long lVar35;
  long lVar36;
  long lVar37;
  byte bVar38;
  long lVar39;
  long lVar40;
  long lVar41;
  uint uVar42;
  long lVar43;
  long lVar44;
  ulong uVar45;
  long lVar46;
  uint uVar47;
  long lVar48;
  int iVar49;
  int iVar50;
  undefined8 uVar51;
  uint5 uVar52;
  undefined8 uVar53;
  ulong uVar54;
  undefined8 uVar55;
  uint3 uVar56;
  undefined8 uVar57;
  undefined8 uVar58;
  undefined8 uVar59;
  undefined8 uVar60;
  long lVar61;
  undefined8 uVar62;
  long lVar63;
  byte bVar64;
  byte bVar65;
  long lVar66;
  long lVar67;
  long lVar68;
  long lVar69;
  long lVar70;
  long lVar71;
  long lVar72;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar50 = *param_8;
  iVar9 = *param_7;
  param_2 = param_2 >> 1;
  iVar49 = param_7[1];
  param_4 = param_4 >> 1;
  if (iVar50 - 2U < 2) {
    bVar19 = iVar50 != 2;
    iVar50 = 4;
    if (bVar19) {
      iVar50 = 1;
    }
    pbVar28 = param_3;
    uVar45 = param_4;
    if (iVar50 == 1) {
LAB_0023eb90:
      bVar38 = 0;
      bVar32 = 0;
    }
    else {
LAB_0023e1ac:
      bVar38 = 0xff;
      bVar32 = 0xff;
    }
    if (iVar49 != 0) {
      uVar1 = iVar9 - 8U >> 3;
      iVar16 = iVar9 + -3;
      iVar3 = iVar9 + -7;
      iVar14 = (uVar1 + 1) * 8;
      lVar63 = ((ulong)uVar1 + 1) * 0x10;
      if (iVar50 == 1) goto LAB_0023e9d8;
      do {
        if (iVar50 == 4) {
          if (iVar3 < 1) goto LAB_0023eb9c;
          pbVar23 = pbVar28;
          pbVar27 = param_5;
          pbVar29 = param_1;
          do {
            pbVar22 = pbVar23 + 0x10;
            uVar57 = *(undefined8 *)(pbVar23 + 8);
            uVar55 = *(undefined8 *)pbVar23;
            uVar53 = *(undefined8 *)(pbVar29 + 8);
            uVar51 = *(undefined8 *)pbVar29;
            *(ulong *)pbVar27 =
                 CONCAT17(-((ushort)((ulong)uVar57 >> 0x30) <= (ushort)((ulong)uVar53 >> 0x30)),
                          CONCAT16(-((ushort)((ulong)uVar57 >> 0x20) <=
                                    (ushort)((ulong)uVar53 >> 0x20)),
                                   CONCAT15(-((ushort)((ulong)uVar57 >> 0x10) <=
                                             (ushort)((ulong)uVar53 >> 0x10)),
                                            CONCAT14(-((ushort)uVar57 <= (ushort)uVar53),
                                                     CONCAT13(-((ushort)((ulong)uVar55 >> 0x30) <=
                                                               (ushort)((ulong)uVar51 >> 0x30)),
                                                              CONCAT12(-((ushort)((ulong)uVar55 >>
                                                                                 0x20) <=
                                                                        (ushort)((ulong)uVar51 >>
                                                                                0x20)),
                                                                       CONCAT11(-((ushort)((ulong)
                                                  uVar55 >> 0x10) <= (ushort)((ulong)uVar51 >> 0x10)
                                                  ),-((ushort)uVar55 <= (ushort)uVar51))))))));
            pbVar23 = pbVar22;
            pbVar27 = pbVar27 + 8;
            pbVar29 = pbVar29 + 0x10;
            iVar20 = iVar14;
          } while (pbVar22 != pbVar28 + lVar63);
        }
        else if (iVar50 == 0) {
          if (iVar3 < 1) {
            iVar20 = 0;
          }
          else {
            pbVar23 = pbVar28;
            pbVar27 = param_5;
            pbVar29 = param_1;
            do {
              pbVar22 = pbVar23 + 0x10;
              uVar53 = *(undefined8 *)(pbVar23 + 8);
              uVar51 = *(undefined8 *)pbVar23;
              uVar57 = *(undefined8 *)(pbVar29 + 8);
              uVar55 = *(undefined8 *)pbVar29;
              *(ulong *)pbVar27 =
                   CONCAT17(-((short)((ulong)uVar53 >> 0x30) == (short)((ulong)uVar57 >> 0x30)),
                            CONCAT16(-((short)((ulong)uVar53 >> 0x20) ==
                                      (short)((ulong)uVar57 >> 0x20)),
                                     CONCAT15(-((short)((ulong)uVar53 >> 0x10) ==
                                               (short)((ulong)uVar57 >> 0x10)),
                                              CONCAT14(-((short)uVar53 == (short)uVar57),
                                                       CONCAT13(-((short)((ulong)uVar51 >> 0x30) ==
                                                                 (short)((ulong)uVar55 >> 0x30)),
                                                                CONCAT12(-((short)((ulong)uVar51 >>
                                                                                  0x20) ==
                                                                          (short)((ulong)uVar55 >>
                                                                                 0x20)),
                                                                         CONCAT11(-((short)((ulong)
                                                  uVar51 >> 0x10) == (short)((ulong)uVar55 >> 0x10))
                                                  ,-((short)uVar51 == (short)uVar55))))))));
              pbVar23 = pbVar22;
              pbVar27 = pbVar27 + 8;
              pbVar29 = pbVar29 + 0x10;
              iVar20 = iVar14;
            } while (pbVar22 != pbVar28 + lVar63);
          }
        }
        else {
          iVar20 = 0;
          if ((iVar50 == 5) && (0 < iVar3)) {
            pbVar23 = pbVar28;
            pbVar27 = param_5;
            pbVar29 = param_1;
            do {
              pbVar22 = pbVar23 + 0x10;
              uVar53 = *(undefined8 *)(pbVar23 + 8);
              uVar51 = *(undefined8 *)pbVar23;
              uVar57 = *(undefined8 *)(pbVar29 + 8);
              uVar55 = *(undefined8 *)pbVar29;
              *(ulong *)pbVar27 =
                   CONCAT17(~-((short)((ulong)uVar53 >> 0x30) == (short)((ulong)uVar57 >> 0x30)),
                            CONCAT16(~-((short)((ulong)uVar53 >> 0x20) ==
                                       (short)((ulong)uVar57 >> 0x20)),
                                     CONCAT15(~-((short)((ulong)uVar53 >> 0x10) ==
                                                (short)((ulong)uVar57 >> 0x10)),
                                              CONCAT14(~-((short)uVar53 == (short)uVar57),
                                                       CONCAT13(~-((short)((ulong)uVar51 >> 0x30) ==
                                                                  (short)((ulong)uVar55 >> 0x30)),
                                                                CONCAT12(~-((short)((ulong)uVar51 >>
                                                                                   0x20) ==
                                                                           (short)((ulong)uVar55 >>
                                                                                  0x20)),
                                                                         CONCAT11(~-((short)((ulong)
                                                  uVar51 >> 0x10) == (short)((ulong)uVar55 >> 0x10))
                                                  ,~-((short)uVar51 == (short)uVar55))))))));
              pbVar23 = pbVar22;
              pbVar27 = pbVar27 + 8;
              pbVar29 = pbVar29 + 0x10;
              iVar20 = iVar14;
            } while (pbVar22 != pbVar28 + lVar63);
          }
        }
LAB_0023e244:
        if (iVar20 < iVar16) {
          uVar47 = (iVar9 + -4) - iVar20;
          lVar33 = (long)iVar20;
          uVar2 = uVar47 >> 2;
          pbVar23 = param_5 + lVar33;
          uVar1 = uVar2 + 1;
          lVar67 = lVar33 + (ulong)uVar1 * 4;
          lVar35 = lVar67 * 2;
          puVar31 = (ushort *)(pbVar28 + lVar33 * 2);
          puVar26 = (ushort *)(param_1 + lVar33 * 2);
          if ((pbVar23 < pbVar28 + lVar35 && puVar31 < param_5 + lVar67 ||
               pbVar23 < param_1 + lVar35 && puVar26 < param_5 + lVar67) || (uVar1 < 4)) {
            do {
              pbVar27 = pbVar23 + 4;
              uVar10 = *puVar26;
              uVar11 = *puVar31;
              pbVar23[1] = -(puVar26[1] < puVar31[1]) ^ bVar32;
              *pbVar23 = -(uVar10 < uVar11) ^ bVar32;
              uVar10 = puVar26[2];
              uVar11 = puVar31[2];
              pbVar23[3] = -(puVar26[3] < puVar31[3]) ^ bVar32;
              pbVar23[2] = -(uVar10 < uVar11) ^ bVar32;
              puVar26 = puVar26 + 4;
              pbVar23 = pbVar27;
              puVar31 = puVar31 + 4;
            } while (pbVar27 != param_5 + lVar33 + 4 + (ulong)uVar2 * 4);
          }
          else {
            uVar42 = (uVar2 - 3 >> 2) + 1;
            iVar24 = iVar20;
            if (0xb < uVar47) {
              uVar47 = 0;
              do {
                uVar47 = uVar47 + 1;
                uVar62 = *(undefined8 *)(puVar26 + 4);
                uVar60 = *(undefined8 *)puVar26;
                uVar57 = *(undefined8 *)(puVar31 + 4);
                uVar55 = *(undefined8 *)puVar31;
                uVar59 = *(undefined8 *)(puVar26 + 0xc);
                uVar58 = *(undefined8 *)(puVar26 + 8);
                uVar53 = *(undefined8 *)(puVar31 + 0xc);
                uVar51 = *(undefined8 *)(puVar31 + 8);
                uVar56 = CONCAT12(-((ushort)((ulong)uVar62 >> 0x10) <
                                   (ushort)((ulong)uVar57 >> 0x10)),
                                  (ushort)(-((ushort)uVar62 < (ushort)uVar57) & 1)) & 0x1ffff;
                uVar52 = CONCAT14(-((ushort)((ulong)uVar59 >> 0x20) <
                                   (ushort)((ulong)uVar53 >> 0x20)),
                                  (uint)(CONCAT12(-((ushort)((ulong)uVar59 >> 0x10) <
                                                   (ushort)((ulong)uVar53 >> 0x10)),
                                                  (ushort)(-((ushort)uVar59 < (ushort)uVar53) & 1))
                                        & 0x1ffff)) & 0x1ffffffff;
                *(ulong *)(pbVar23 + 8) =
                     CONCAT17(-(-((ushort)((ulong)uVar59 >> 0x30) < (ushort)((ulong)uVar53 >> 0x30))
                               & 1U) ^ bVar32,
                              CONCAT16(-(char)(uVar52 >> 0x20) ^ bVar32,
                                       CONCAT15(-(char)(uVar52 >> 0x10) ^ bVar32,
                                                CONCAT14(-(char)uVar52 ^ bVar32,
                                                         CONCAT13(-(-((ushort)((ulong)uVar58 >> 0x30
                                                                              ) <
                                                                     (ushort)((ulong)uVar51 >> 0x30)
                                                                     ) & 1U) ^ bVar32,
                                                                  CONCAT12(-(-((ushort)((ulong)
                                                  uVar58 >> 0x20) < (ushort)((ulong)uVar51 >> 0x20))
                                                  & 1U) ^ bVar32,
                                                  CONCAT11(-(-((ushort)((ulong)uVar58 >> 0x10) <
                                                              (ushort)((ulong)uVar51 >> 0x10)) & 1U)
                                                           ^ bVar32,-(-((ushort)uVar58 <
                                                                       (ushort)uVar51) & 1U) ^
                                                                    bVar32)))))));
                *(ulong *)pbVar23 =
                     CONCAT17(-(-((ushort)((ulong)uVar62 >> 0x30) < (ushort)((ulong)uVar57 >> 0x30))
                               & 1U) ^ bVar32,
                              CONCAT16(-(-((ushort)((ulong)uVar62 >> 0x20) <
                                          (ushort)((ulong)uVar57 >> 0x20)) & 1U) ^ bVar32,
                                       CONCAT15(-(char)(uVar56 >> 0x10) ^ bVar32,
                                                CONCAT14(-(char)uVar56 ^ bVar32,
                                                         CONCAT13(-(-((ushort)((ulong)uVar60 >> 0x30
                                                                              ) <
                                                                     (ushort)((ulong)uVar55 >> 0x30)
                                                                     ) & 1U) ^ bVar32,
                                                                  CONCAT12(-(-((ushort)((ulong)
                                                  uVar60 >> 0x20) < (ushort)((ulong)uVar55 >> 0x20))
                                                  & 1U) ^ bVar32,
                                                  CONCAT11(-(-((ushort)((ulong)uVar60 >> 0x10) <
                                                              (ushort)((ulong)uVar55 >> 0x10)) & 1U)
                                                           ^ bVar32,-(-((ushort)uVar60 <
                                                                       (ushort)uVar55) & 1U) ^
                                                                    bVar32)))))));
                puVar26 = puVar26 + 0x10;
                pbVar23 = pbVar23 + 0x10;
                puVar31 = puVar31 + 0x10;
              } while (uVar47 < uVar42);
              iVar24 = iVar20 + uVar42 * 0x10;
              if (uVar1 == uVar42 * 4) goto LAB_0023e4e8;
            }
            lVar33 = (long)iVar24;
            lVar67 = lVar33 * 2;
            uVar10 = *(ushort *)(pbVar28 + lVar67 + 2);
            uVar11 = *(ushort *)(param_1 + lVar67 + 2);
            param_5[lVar33] =
                 -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67)) ^ bVar32;
            param_5[lVar33 + 1] = -(uVar11 < uVar10) ^ bVar32;
            uVar10 = *(ushort *)(pbVar28 + lVar67 + 4);
            uVar11 = *(ushort *)(param_1 + lVar67 + 4);
            param_5[lVar33 + 3] =
                 -(*(ushort *)(param_1 + lVar67 + 6) < *(ushort *)(pbVar28 + lVar67 + 6)) ^ bVar32;
            param_5[lVar33 + 2] = -(uVar11 < uVar10) ^ bVar32;
            if (iVar24 + 4 < iVar16) {
              lVar33 = (long)(iVar24 + 4);
              lVar67 = lVar33 * 2;
              uVar10 = *(ushort *)(pbVar28 + lVar67 + 2);
              uVar11 = *(ushort *)(param_1 + lVar67 + 2);
              param_5[lVar33] =
                   -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67)) ^ bVar32;
              param_5[lVar33 + 1] = -(uVar11 < uVar10) ^ bVar32;
              uVar10 = *(ushort *)(pbVar28 + lVar67 + 4);
              uVar11 = *(ushort *)(param_1 + lVar67 + 4);
              param_5[lVar33 + 3] =
                   -(*(ushort *)(param_1 + lVar67 + 6) < *(ushort *)(pbVar28 + lVar67 + 6)) ^ bVar32
              ;
              param_5[lVar33 + 2] = -(uVar11 < uVar10) ^ bVar32;
              if (iVar24 + 8 < iVar16) {
                lVar67 = (long)(iVar24 + 8);
                lVar33 = lVar67 * 2;
                uVar10 = *(ushort *)(pbVar28 + lVar33 + 2);
                uVar11 = *(ushort *)(param_1 + lVar33 + 2);
                param_5[lVar67] =
                     -(*(ushort *)(param_1 + lVar33) < *(ushort *)(pbVar28 + lVar33)) ^ bVar32;
                param_5[lVar67 + 1] = -(uVar11 < uVar10) ^ bVar32;
                uVar10 = *(ushort *)(param_1 + lVar33 + 4);
                uVar11 = *(ushort *)(pbVar28 + lVar33 + 4);
                param_5[lVar67 + 3] =
                     -(*(ushort *)(param_1 + lVar33 + 6) < *(ushort *)(pbVar28 + lVar33 + 6)) ^
                     bVar32;
                param_5[lVar67 + 2] = -(uVar10 < uVar11) ^ bVar32;
              }
            }
          }
LAB_0023e4e8:
          iVar20 = iVar20 + 4 + uVar2 * 4;
        }
        if (iVar20 < iVar9) {
          lVar33 = (long)iVar20;
          uVar1 = iVar9 - iVar20;
          lVar35 = (lVar33 + (ulong)uVar1) * 2;
          lVar67 = lVar33 * 2;
          pbVar23 = param_5 + lVar33;
          puVar31 = (ushort *)(pbVar28 + lVar67);
          puVar26 = (ushort *)(param_1 + lVar67);
          if ((pbVar23 < pbVar28 + lVar35 && puVar31 < param_5 + lVar33 + (ulong)uVar1 ||
               pbVar23 < param_1 + lVar35 && puVar26 < param_5 + lVar33 + (ulong)uVar1) ||
             (uVar1 < 0x12)) {
            lVar67 = 0;
            do {
              pbVar23[lVar67] = bVar38 ^ -(puVar26[lVar67] < puVar31[lVar67]);
              lVar67 = lVar67 + 1;
            } while (lVar67 != (ulong)(uint)((iVar9 + -1) - iVar20) + 1);
          }
          else {
            uVar2 = -((uint)((ulong)puVar31 >> 1) & 7) & 7;
            if (uVar1 < uVar2) {
              uVar2 = uVar1;
            }
            iVar24 = iVar20;
            if (uVar2 != 0) {
              iVar24 = iVar20 + 1;
              *pbVar23 = bVar38 ^ -(*puVar26 < *puVar31);
              if (uVar2 != 1) {
                lVar35 = (long)iVar24;
                iVar24 = iVar20 + 2;
                lVar37 = lVar35 * 2;
                param_5[lVar35] =
                     bVar38 ^ -(*(ushort *)(param_1 + lVar37) < *(ushort *)(pbVar28 + lVar37));
                if (uVar2 != 2) {
                  lVar35 = (long)iVar24;
                  iVar24 = iVar20 + 3;
                  lVar37 = lVar35 * 2;
                  param_5[lVar35] =
                       bVar38 ^ -(*(ushort *)(param_1 + lVar37) < *(ushort *)(pbVar28 + lVar37));
                  if (uVar2 != 3) {
                    lVar35 = (long)iVar24;
                    iVar24 = iVar20 + 4;
                    lVar37 = lVar35 * 2;
                    param_5[lVar35] =
                         bVar38 ^ -(*(ushort *)(param_1 + lVar37) < *(ushort *)(pbVar28 + lVar37));
                    if (uVar2 != 4) {
                      lVar35 = (long)iVar24;
                      iVar24 = iVar20 + 5;
                      lVar37 = lVar35 * 2;
                      param_5[lVar35] =
                           bVar38 ^ -(*(ushort *)(param_1 + lVar37) < *(ushort *)(pbVar28 + lVar37))
                      ;
                      if (uVar2 != 5) {
                        lVar35 = (long)iVar24;
                        iVar24 = iVar20 + 6;
                        lVar37 = lVar35 * 2;
                        param_5[lVar35] =
                             bVar38 ^ -(*(ushort *)(param_1 + lVar37) <
                                       *(ushort *)(pbVar28 + lVar37));
                        if (uVar2 == 7) {
                          lVar35 = (long)iVar24;
                          iVar24 = iVar20 + 7;
                          lVar37 = lVar35 * 2;
                          param_5[lVar35] =
                               bVar38 ^ -(*(ushort *)(param_1 + lVar37) <
                                         *(ushort *)(pbVar28 + lVar37));
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar47 = ((uVar1 - uVar2) - 0x10 >> 4) + 1;
            iVar20 = uVar47 * 0x10;
            if (0xe < (uVar1 - 1) - uVar2) {
              lVar67 = lVar67 + (ulong)uVar2 * 2;
              uVar42 = 0;
              pbVar23 = pbVar28 + lVar67;
              pbVar27 = param_5 + (ulong)uVar2 + lVar33;
              pbVar29 = param_1 + lVar67;
              do {
                uVar42 = uVar42 + 1;
                uVar62 = *(undefined8 *)(pbVar29 + 8);
                uVar60 = *(undefined8 *)pbVar29;
                uVar59 = *(undefined8 *)(pbVar23 + 8);
                uVar58 = *(undefined8 *)pbVar23;
                uVar57 = *(undefined8 *)(pbVar29 + 0x18);
                uVar55 = *(undefined8 *)(pbVar29 + 0x10);
                uVar53 = *(undefined8 *)(pbVar23 + 0x18);
                uVar51 = *(undefined8 *)(pbVar23 + 0x10);
                bVar65 = -((ushort)((ulong)uVar62 >> 0x30) < (ushort)((ulong)uVar59 >> 0x30));
                uVar56 = CONCAT12(-((ushort)((ulong)uVar62 >> 0x10) <
                                   (ushort)((ulong)uVar59 >> 0x10)),
                                  (ushort)(-((ushort)uVar62 < (ushort)uVar59) & 1)) & 0x1ffff;
                bVar64 = -((ushort)uVar55 < (ushort)uVar51);
                uVar52 = CONCAT14(-((ushort)((ulong)uVar57 >> 0x20) <
                                   (ushort)((ulong)uVar53 >> 0x20)),
                                  (uint)(CONCAT12(-((ushort)((ulong)uVar57 >> 0x10) <
                                                   (ushort)((ulong)uVar53 >> 0x10)),
                                                  (ushort)(-((ushort)uVar57 < (ushort)uVar53) & 1))
                                        & 0x1ffff)) & 0x1ffffffff;
                uVar18 = (ulong)CONCAT15(bVar65,CONCAT14(-((ushort)((ulong)uVar62 >> 0x20) <
                                                          (ushort)((ulong)uVar59 >> 0x20)),
                                                         CONCAT13((char)(uVar56 >> 0x10),
                                                                  CONCAT12((char)uVar56,
                                                                           CONCAT11(-((ushort)((
                                                  ulong)uVar60 >> 0x30) <
                                                  (ushort)((ulong)uVar58 >> 0x30)),
                                                  -((ushort)((ulong)uVar60 >> 0x20) <
                                                   (ushort)((ulong)uVar58 >> 0x20))))))) &
                         0x101ffff0101;
                uVar54 = CONCAT17(-((ushort)((ulong)uVar57 >> 0x30) <
                                   (ushort)((ulong)uVar53 >> 0x30)),
                                  CONCAT16((char)(uVar52 >> 0x20),
                                           CONCAT15((char)(uVar52 >> 0x10),
                                                    CONCAT14((char)uVar52,
                                                             CONCAT13(-((ushort)((ulong)uVar55 >>
                                                                                0x30) <
                                                                       (ushort)((ulong)uVar51 >>
                                                                               0x30)),
                                                                      CONCAT12(-((ushort)((ulong)
                                                  uVar55 >> 0x20) < (ushort)((ulong)uVar51 >> 0x20))
                                                  ,CONCAT11(-((ushort)((ulong)uVar55 >> 0x10) <
                                                             (ushort)((ulong)uVar51 >> 0x10)),bVar64
                                                           ))))))) & 0x1ffffff01010101;
                *(ulong *)(pbVar27 + 8) =
                     CONCAT17(-(char)(uVar54 >> 0x38) ^ bVar38,
                              CONCAT16(-(char)(uVar54 >> 0x30) ^ bVar38,
                                       CONCAT15(-(char)(uVar54 >> 0x28) ^ bVar38,
                                                CONCAT14(-(char)(uVar54 >> 0x20) ^ bVar38,
                                                         CONCAT13(-(char)(uVar54 >> 0x18) ^ bVar38,
                                                                  CONCAT12(-(char)(uVar54 >> 0x10) ^
                                                                           bVar38,CONCAT11(-(char)(
                                                  uVar54 >> 8) ^ bVar38,-(bVar64 & 1) ^ bVar38))))))
                             );
                *(ulong *)pbVar27 =
                     CONCAT17(-(bVar65 & 1) ^ bVar38,
                              CONCAT16(-(char)(uVar18 >> 0x20) ^ bVar38,
                                       CONCAT15(-(char)(uVar18 >> 0x18) ^ bVar38,
                                                CONCAT14(-(char)(uVar18 >> 0x10) ^ bVar38,
                                                         CONCAT13(-(char)(uVar18 >> 8) ^ bVar38,
                                                                  CONCAT12(-(char)uVar18 ^ bVar38,
                                                                           CONCAT11(-(-((ushort)((
                                                  ulong)uVar60 >> 0x10) <
                                                  (ushort)((ulong)uVar58 >> 0x10)) & 1U) ^ bVar38,
                                                  -(-((ushort)uVar60 < (ushort)uVar58) & 1U) ^
                                                  bVar38)))))));
                pbVar23 = pbVar23 + 0x20;
                pbVar27 = pbVar27 + 0x10;
                pbVar29 = pbVar29 + 0x20;
              } while (uVar42 < uVar47);
              iVar24 = iVar24 + iVar20;
              if (iVar20 == uVar1 - uVar2) goto LAB_0023e9bc;
            }
            iVar20 = iVar24 + 1;
            lVar67 = (long)iVar24 * 2;
            param_5[iVar24] =
                 bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67));
            if (iVar20 < iVar9) {
              iVar4 = iVar24 + 2;
              lVar67 = (long)iVar20 * 2;
              param_5[iVar20] =
                   bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67));
              if (iVar4 < iVar9) {
                iVar20 = iVar24 + 3;
                lVar67 = (long)iVar4 * 2;
                param_5[iVar4] =
                     bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67));
                if (iVar20 < iVar9) {
                  iVar4 = iVar24 + 4;
                  lVar67 = (long)iVar20 * 2;
                  param_5[iVar20] =
                       bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67));
                  if (iVar4 < iVar9) {
                    iVar20 = iVar24 + 5;
                    lVar67 = (long)iVar4 * 2;
                    param_5[iVar4] =
                         bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67));
                    if (iVar20 < iVar9) {
                      iVar4 = iVar24 + 6;
                      lVar67 = (long)iVar20 * 2;
                      param_5[iVar20] =
                           bVar38 ^ -(*(ushort *)(param_1 + lVar67) < *(ushort *)(pbVar28 + lVar67))
                      ;
                      if (iVar4 < iVar9) {
                        iVar20 = iVar24 + 7;
                        lVar67 = (long)iVar4 * 2;
                        param_5[iVar4] =
                             bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                       *(ushort *)(pbVar28 + lVar67));
                        if (iVar20 < iVar9) {
                          iVar4 = iVar24 + 8;
                          lVar67 = (long)iVar20 * 2;
                          param_5[iVar20] =
                               bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                         *(ushort *)(pbVar28 + lVar67));
                          if (iVar4 < iVar9) {
                            iVar20 = iVar24 + 9;
                            lVar67 = (long)iVar4 * 2;
                            param_5[iVar4] =
                                 bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                           *(ushort *)(pbVar28 + lVar67));
                            if (iVar20 < iVar9) {
                              iVar4 = iVar24 + 10;
                              lVar67 = (long)iVar20 * 2;
                              param_5[iVar20] =
                                   bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                             *(ushort *)(pbVar28 + lVar67));
                              if (iVar4 < iVar9) {
                                iVar20 = iVar24 + 0xb;
                                lVar67 = (long)iVar4 * 2;
                                param_5[iVar4] =
                                     bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                               *(ushort *)(pbVar28 + lVar67));
                                if (iVar20 < iVar9) {
                                  iVar4 = iVar24 + 0xc;
                                  lVar67 = (long)iVar20 * 2;
                                  param_5[iVar20] =
                                       bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                                 *(ushort *)(pbVar28 + lVar67));
                                  if (iVar4 < iVar9) {
                                    iVar20 = iVar24 + 0xd;
                                    lVar67 = (long)iVar4 * 2;
                                    param_5[iVar4] =
                                         bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                                   *(ushort *)(pbVar28 + lVar67));
                                    if (iVar20 < iVar9) {
                                      iVar24 = iVar24 + 0xe;
                                      lVar67 = (long)iVar20 * 2;
                                      param_5[iVar20] =
                                           bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                                     *(ushort *)(pbVar28 + lVar67));
                                      if (iVar24 < iVar9) {
                                        lVar67 = (long)iVar24 * 2;
                                        param_5[iVar24] =
                                             bVar38 ^ -(*(ushort *)(param_1 + lVar67) <
                                                       *(ushort *)(pbVar28 + lVar67));
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0023e9bc:
        iVar49 = iVar49 + -1;
        pbVar28 = pbVar28 + uVar45 * 2;
        param_1 = param_1 + param_2 * 2;
        param_5 = param_5 + param_6;
        if (iVar49 == 0) {
          return;
        }
      } while (iVar50 != 1);
LAB_0023e9d8:
      if (iVar3 < 1) {
LAB_0023eb9c:
        iVar20 = 0;
      }
      else {
        pbVar23 = pbVar28;
        pbVar27 = param_5;
        pbVar29 = param_1;
        do {
          pbVar22 = pbVar23 + 0x10;
          uVar53 = *(undefined8 *)(pbVar23 + 8);
          uVar51 = *(undefined8 *)pbVar23;
          uVar57 = *(undefined8 *)(pbVar29 + 8);
          uVar55 = *(undefined8 *)pbVar29;
          *(ulong *)pbVar27 =
               CONCAT17(-((ushort)((ulong)uVar57 >> 0x30) < (ushort)((ulong)uVar53 >> 0x30)),
                        CONCAT16(-((ushort)((ulong)uVar57 >> 0x20) < (ushort)((ulong)uVar53 >> 0x20)
                                  ),CONCAT15(-((ushort)((ulong)uVar57 >> 0x10) <
                                              (ushort)((ulong)uVar53 >> 0x10)),
                                             CONCAT14(-((ushort)uVar57 < (ushort)uVar53),
                                                      CONCAT13(-((ushort)((ulong)uVar55 >> 0x30) <
                                                                (ushort)((ulong)uVar51 >> 0x30)),
                                                               CONCAT12(-((ushort)((ulong)uVar55 >>
                                                                                  0x20) <
                                                                         (ushort)((ulong)uVar51 >>
                                                                                 0x20)),
                                                                        CONCAT11(-((ushort)((ulong)
                                                  uVar55 >> 0x10) < (ushort)((ulong)uVar51 >> 0x10))
                                                  ,-((ushort)uVar55 < (ushort)uVar51))))))));
          pbVar23 = pbVar22;
          pbVar27 = pbVar27 + 8;
          pbVar29 = pbVar29 + 0x10;
          iVar20 = iVar14;
        } while (pbVar22 != pbVar28 + lVar63);
      }
      goto LAB_0023e244;
    }
  }
  else {
    if (iVar50 == 5 || iVar50 == 0) {
      if (iVar50 == 4 || iVar50 == 1) goto LAB_0023e1a4;
    }
    else {
      if (iVar50 == 4 || iVar50 == 1) {
LAB_0023e1a4:
        pbVar28 = param_1;
        param_1 = param_3;
        uVar45 = param_2;
        param_2 = param_4;
        if (iVar50 == 1) goto LAB_0023eb90;
        goto LAB_0023e1ac;
      }
      local_10 = 0;
      local_8 = 0;
      puVar21 = (undefined8 *)cv::String::allocate((String *)&local_10,0x44);
      uVar62 = _LAB_00460708;
      uVar60 = DAT_00460700;
      uVar59 = DAT_004606f8;
      uVar58 = DAT_004606f0;
      uVar57 = DAT_004606e8;
      uVar55 = DAT_004606e0;
      uVar53 = DAT_004606d8;
      uVar51 = DAT_004606d0;
      *(undefined4 *)(puVar21 + 8) = DAT_00460710;
      *puVar21 = uVar51;
      puVar21[1] = uVar53;
      puVar21[2] = uVar55;
      puVar21[3] = uVar57;
      puVar21[4] = uVar58;
      puVar21[5] = uVar59;
      puVar21[6] = uVar60;
      puVar21[7] = uVar62;
      cv::error(-0xd7,(String *)&local_10,"cv::Cmp_SIMD<short unsigned int>::Cmp_SIMD(int)",
                "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1075);
      cv::String::deallocate((String *)&local_10);
    }
    if (iVar50 == 5) {
      bVar38 = 0xff;
      bVar32 = 0xff;
    }
    else {
      if (iVar50 != 0) {
        return;
      }
      bVar32 = 0;
      bVar38 = 0;
    }
    iVar50 = iVar49 + -1;
    if (iVar49 != 0) {
      uVar42 = iVar9 - 4;
      iVar16 = iVar9 + -3;
      uVar47 = uVar42 >> 2;
      uVar1 = uVar47 + 1;
      uVar2 = (uVar47 - 3 >> 2) + 1;
      iVar49 = uVar2 * 0x10;
      lVar67 = NEON_shl(param_2,1);
      iVar14 = uVar1 * 4;
      lVar63 = NEON_shl(param_4,1);
      if (uVar42 < 0xc) {
        iVar49 = 0;
      }
      lVar33 = (long)iVar49;
      if (iVar16 < 1) {
        iVar14 = 0;
      }
      lVar43 = (long)iVar14;
      lVar41 = (ulong)uVar1 * 8;
      iVar3 = iVar14 + 1;
      lVar66 = NEON_shl((ulong)uVar1,2);
      lVar37 = (long)(iVar49 + 4);
      lVar35 = (long)(iVar49 + 8);
      iVar20 = iVar14 + 2;
      iVar24 = iVar14 + 3;
      iVar4 = iVar14 + 4;
      iVar5 = iVar14 + 5;
      lVar48 = lVar33 * 2;
      lVar46 = lVar37 * 2;
      iVar6 = iVar14 + 6;
      lVar44 = lVar35 * 2;
      uVar17 = iVar9 - iVar14;
      lVar72 = NEON_shl((long)iVar3,1);
      lVar71 = NEON_shl((long)iVar20,1);
      lVar70 = NEON_shl((long)iVar24,1);
      lVar69 = NEON_shl((long)iVar4,1);
      lVar68 = NEON_shl((long)iVar5,1);
      lVar61 = NEON_shl((long)iVar6,1);
      lVar40 = (lVar43 + (ulong)uVar17) * 2;
      lVar39 = lVar43 * 2;
      do {
        if (0 < iVar16) {
          if ((param_1 < param_5 + lVar66 && param_5 < param_1 + lVar41 ||
               param_3 < param_5 + lVar66 && param_5 < param_3 + lVar41) || (uVar1 < 4)) {
            pbVar28 = param_3 + 2;
            pbVar23 = param_5;
            pbVar27 = param_1;
            do {
              pbVar29 = pbVar28 + 8;
              sVar12 = *(short *)(pbVar28 + -2);
              sVar13 = *(short *)pbVar27;
              pbVar23[1] = -(*(short *)(pbVar27 + 2) == *(short *)pbVar28) ^ bVar32;
              *pbVar23 = -(sVar13 == sVar12) ^ bVar32;
              sVar12 = *(short *)(pbVar28 + 2);
              sVar13 = *(short *)(pbVar27 + 4);
              pbVar23[3] = -(*(short *)(pbVar27 + 6) == *(short *)(pbVar28 + 4)) ^ bVar32;
              pbVar23[2] = -(sVar13 == sVar12) ^ bVar32;
              pbVar28 = pbVar29;
              pbVar23 = pbVar23 + 4;
              pbVar27 = pbVar27 + 8;
            } while (pbVar29 != param_3 + (ulong)uVar47 * 8 + 10);
          }
          else {
            if (0xb < uVar42) {
              uVar25 = 0;
              pbVar28 = param_3;
              pbVar23 = param_1;
              pbVar27 = param_5;
              do {
                uVar25 = uVar25 + 1;
                uVar62 = *(undefined8 *)(pbVar28 + 8);
                uVar60 = *(undefined8 *)pbVar28;
                uVar57 = *(undefined8 *)(pbVar23 + 8);
                uVar55 = *(undefined8 *)pbVar23;
                uVar59 = *(undefined8 *)(pbVar28 + 0x18);
                uVar58 = *(undefined8 *)(pbVar28 + 0x10);
                uVar53 = *(undefined8 *)(pbVar23 + 0x18);
                uVar51 = *(undefined8 *)(pbVar23 + 0x10);
                *(ulong *)(pbVar27 + 8) =
                     CONCAT17(-(-((short)((ulong)uVar53 >> 0x30) == (short)((ulong)uVar59 >> 0x30))
                               & 1U) ^ bVar32,
                              CONCAT16(-(-((short)((ulong)uVar53 >> 0x20) ==
                                          (short)((ulong)uVar59 >> 0x20)) & 1U) ^ bVar32,
                                       CONCAT15(-(-((short)((ulong)uVar53 >> 0x10) ==
                                                   (short)((ulong)uVar59 >> 0x10)) & 1U) ^ bVar32,
                                                CONCAT14(-(-((short)uVar53 == (short)uVar59) & 1U) ^
                                                         bVar32,CONCAT13(-(-((short)((ulong)uVar51
                                                                                    >> 0x30) ==
                                                                            (short)((ulong)uVar58 >>
                                                                                   0x30)) & 1U) ^
                                                                         bVar32,CONCAT12(-(-((short)
                                                  ((ulong)uVar51 >> 0x20) ==
                                                  (short)((ulong)uVar58 >> 0x20)) & 1U) ^ bVar32,
                                                  CONCAT11(-(-((short)((ulong)uVar51 >> 0x10) ==
                                                              (short)((ulong)uVar58 >> 0x10)) & 1U)
                                                           ^ bVar32,-(-((short)uVar51 ==
                                                                       (short)uVar58) & 1U) ^ bVar32
                                                          )))))));
                *(ulong *)pbVar27 =
                     CONCAT17(-(-((short)((ulong)uVar57 >> 0x30) == (short)((ulong)uVar62 >> 0x30))
                               & 1U) ^ bVar32,
                              CONCAT16(-(-((short)((ulong)uVar57 >> 0x20) ==
                                          (short)((ulong)uVar62 >> 0x20)) & 1U) ^ bVar32,
                                       CONCAT15(-(-((short)((ulong)uVar57 >> 0x10) ==
                                                   (short)((ulong)uVar62 >> 0x10)) & 1U) ^ bVar32,
                                                CONCAT14(-(-((short)uVar57 == (short)uVar62) & 1U) ^
                                                         bVar32,CONCAT13(-(-((short)((ulong)uVar55
                                                                                    >> 0x30) ==
                                                                            (short)((ulong)uVar60 >>
                                                                                   0x30)) & 1U) ^
                                                                         bVar32,CONCAT12(-(-((short)
                                                  ((ulong)uVar55 >> 0x20) ==
                                                  (short)((ulong)uVar60 >> 0x20)) & 1U) ^ bVar32,
                                                  CONCAT11(-(-((short)((ulong)uVar55 >> 0x10) ==
                                                              (short)((ulong)uVar60 >> 0x10)) & 1U)
                                                           ^ bVar32,-(-((short)uVar55 ==
                                                                       (short)uVar60) & 1U) ^ bVar32
                                                          )))))));
                pbVar28 = pbVar28 + 0x20;
                pbVar23 = pbVar23 + 0x20;
                pbVar27 = pbVar27 + 0x10;
              } while (uVar25 < uVar2);
              if (uVar1 == uVar2 * 4) goto LAB_0023f0c0;
            }
            sVar12 = *(short *)(param_1 + lVar48 + 2);
            sVar13 = *(short *)(param_3 + lVar48 + 2);
            param_5[lVar33] =
                 -(*(short *)(param_1 + lVar48) == *(short *)(param_3 + lVar48)) ^ bVar32;
            param_5[lVar33 + 1] = -(sVar12 == sVar13) ^ bVar32;
            sVar12 = *(short *)(param_3 + lVar48 + 6);
            sVar13 = *(short *)(param_1 + lVar48 + 6);
            param_5[lVar33 + 2] =
                 -(*(short *)(param_1 + lVar48 + 4) == *(short *)(param_3 + lVar48 + 4)) ^ bVar32;
            param_5[lVar33 + 3] = -(sVar13 == sVar12) ^ bVar32;
            if (iVar49 + 4 < iVar16) {
              sVar12 = *(short *)(param_1 + lVar46 + 2);
              sVar13 = *(short *)(param_3 + lVar46 + 2);
              param_5[lVar37] =
                   -(*(short *)(param_1 + lVar46) == *(short *)(param_3 + lVar46)) ^ bVar32;
              param_5[lVar37 + 1] = -(sVar12 == sVar13) ^ bVar32;
              sVar12 = *(short *)(param_3 + lVar46 + 6);
              sVar13 = *(short *)(param_1 + lVar46 + 6);
              param_5[lVar37 + 2] =
                   -(*(short *)(param_1 + lVar46 + 4) == *(short *)(param_3 + lVar46 + 4)) ^ bVar32;
              param_5[lVar37 + 3] = -(sVar13 == sVar12) ^ bVar32;
              if (iVar49 + 8 < iVar16) {
                sVar12 = *(short *)(param_1 + lVar44 + 2);
                sVar13 = *(short *)(param_3 + lVar44 + 2);
                param_5[lVar35] =
                     -(*(short *)(param_1 + lVar44) == *(short *)(param_3 + lVar44)) ^ bVar32;
                param_5[lVar35 + 1] = -(sVar12 == sVar13) ^ bVar32;
                sVar12 = *(short *)(param_3 + lVar44 + 6);
                sVar13 = *(short *)(param_1 + lVar44 + 6);
                param_5[lVar35 + 2] =
                     -(*(short *)(param_1 + lVar44 + 4) == *(short *)(param_3 + lVar44 + 4)) ^
                     bVar32;
                param_5[lVar35 + 3] = -(sVar13 == sVar12) ^ bVar32;
              }
            }
          }
        }
LAB_0023f0c0:
        if (iVar14 < iVar9) {
          pbVar28 = param_1 + lVar39;
          pbVar23 = param_5 + lVar43;
          pbVar27 = param_3 + lVar39;
          if ((pbVar28 < param_5 + lVar43 + (ulong)uVar17 && pbVar23 < param_1 + lVar40 ||
               pbVar27 < param_5 + lVar43 + (ulong)uVar17 && pbVar23 < param_3 + lVar40) ||
             (uVar17 < 0x12)) {
            lVar36 = 0;
            do {
              pbVar23[lVar36] =
                   bVar38 ^ -(*(short *)(pbVar28 + lVar36 * 2) == *(short *)(pbVar27 + lVar36 * 2));
              lVar36 = lVar36 + 1;
            } while (lVar36 != (ulong)(uint)((iVar9 + -1) - iVar14) + 1);
          }
          else {
            uVar25 = -((uint)((ulong)pbVar28 >> 1) & 7) & 7;
            uVar8 = uVar17;
            if (uVar25 < uVar17) {
              uVar8 = uVar25;
            }
            iVar30 = iVar14;
            if ((((uVar8 != 0) &&
                 (*pbVar23 = bVar38 ^ -(*(short *)pbVar28 == *(short *)pbVar27), iVar30 = iVar3,
                 uVar8 != 1)) &&
                (param_5[iVar3] =
                      bVar38 ^ -(*(short *)(param_1 + lVar72) == *(short *)(param_3 + lVar72)),
                iVar30 = iVar20, uVar8 != 2)) &&
               (((param_5[iVar20] =
                       bVar38 ^ -(*(short *)(param_1 + lVar71) == *(short *)(param_3 + lVar71)),
                 iVar30 = iVar24, uVar8 != 3 &&
                 (param_5[iVar24] =
                       bVar38 ^ -(*(short *)(param_1 + lVar70) == *(short *)(param_3 + lVar70)),
                 iVar30 = iVar4, uVar8 != 4)) &&
                ((param_5[iVar4] =
                       bVar38 ^ -(*(short *)(param_1 + lVar69) == *(short *)(param_3 + lVar69)),
                 iVar30 = iVar5, uVar8 != 5 &&
                 (param_5[iVar5] =
                       bVar38 ^ -(*(short *)(param_1 + lVar68) == *(short *)(param_3 + lVar68)),
                 iVar30 = iVar6, uVar8 == 7)))))) {
              param_5[iVar6] =
                   bVar38 ^ -(*(short *)(param_1 + lVar61) == *(short *)(param_3 + lVar61));
              iVar30 = iVar14 + 7;
            }
            uVar25 = ((uVar17 - uVar8) - 0x10 >> 4) + 1;
            iVar15 = uVar25 * 0x10;
            if (0xe < (uVar17 - 1) - uVar8) {
              lVar36 = lVar39 + (ulong)uVar8 * 2;
              uVar34 = 0;
              pbVar28 = param_3 + lVar36;
              pbVar23 = param_5 + lVar43 + (ulong)uVar8;
              pbVar27 = param_1 + lVar36;
              do {
                uVar34 = uVar34 + 1;
                uVar62 = *(undefined8 *)(pbVar28 + 8);
                uVar60 = *(undefined8 *)pbVar28;
                uVar59 = *(undefined8 *)(pbVar27 + 8);
                uVar58 = *(undefined8 *)pbVar27;
                uVar57 = *(undefined8 *)(pbVar28 + 0x18);
                uVar55 = *(undefined8 *)(pbVar28 + 0x10);
                uVar53 = *(undefined8 *)(pbVar27 + 0x18);
                uVar51 = *(undefined8 *)(pbVar27 + 0x10);
                bVar65 = -((short)((ulong)uVar59 >> 0x30) == (short)((ulong)uVar62 >> 0x30));
                bVar64 = -((short)((ulong)uVar53 >> 0x30) == (short)((ulong)uVar57 >> 0x30));
                uVar45 = (ulong)CONCAT15(bVar65,CONCAT14(-((short)((ulong)uVar59 >> 0x20) ==
                                                          (short)((ulong)uVar62 >> 0x20)),
                                                         CONCAT13(-((short)((ulong)uVar59 >> 0x10)
                                                                   == (short)((ulong)uVar62 >> 0x10)
                                                                   ),CONCAT12(-((short)uVar59 ==
                                                                               (short)uVar62),
                                                                              CONCAT11(-((short)((
                                                  ulong)uVar58 >> 0x30) ==
                                                  (short)((ulong)uVar60 >> 0x30)),
                                                  -((short)((ulong)uVar58 >> 0x20) ==
                                                   (short)((ulong)uVar60 >> 0x20))))))) &
                         0x10101010101;
                uVar18 = (ulong)CONCAT15(bVar64,CONCAT14(-((short)((ulong)uVar53 >> 0x20) ==
                                                          (short)((ulong)uVar57 >> 0x20)),
                                                         CONCAT13(-((short)((ulong)uVar53 >> 0x10)
                                                                   == (short)((ulong)uVar57 >> 0x10)
                                                                   ),CONCAT12(-((short)uVar53 ==
                                                                               (short)uVar57),
                                                                              CONCAT11(-((short)((
                                                  ulong)uVar51 >> 0x30) ==
                                                  (short)((ulong)uVar55 >> 0x30)),
                                                  -((short)((ulong)uVar51 >> 0x20) ==
                                                   (short)((ulong)uVar55 >> 0x20))))))) &
                         0x10101010101;
                *(ulong *)(pbVar23 + 8) =
                     CONCAT17(-(bVar64 & 1) ^ bVar38,
                              CONCAT16(-(char)(uVar18 >> 0x20) ^ bVar38,
                                       CONCAT15(-(char)(uVar18 >> 0x18) ^ bVar38,
                                                CONCAT14(-(char)(uVar18 >> 0x10) ^ bVar38,
                                                         CONCAT13(-(char)(uVar18 >> 8) ^ bVar38,
                                                                  CONCAT12(-(char)uVar18 ^ bVar38,
                                                                           CONCAT11(-(-((short)((
                                                  ulong)uVar51 >> 0x10) ==
                                                  (short)((ulong)uVar55 >> 0x10)) & 1U) ^ bVar38,
                                                  -(-((short)uVar51 == (short)uVar55) & 1U) ^ bVar38
                                                  )))))));
                *(ulong *)pbVar23 =
                     CONCAT17(-(bVar65 & 1) ^ bVar38,
                              CONCAT16(-(char)(uVar45 >> 0x20) ^ bVar38,
                                       CONCAT15(-(char)(uVar45 >> 0x18) ^ bVar38,
                                                CONCAT14(-(char)(uVar45 >> 0x10) ^ bVar38,
                                                         CONCAT13(-(char)(uVar45 >> 8) ^ bVar38,
                                                                  CONCAT12(-(char)uVar45 ^ bVar38,
                                                                           CONCAT11(-(-((short)((
                                                  ulong)uVar58 >> 0x10) ==
                                                  (short)((ulong)uVar60 >> 0x10)) & 1U) ^ bVar38,
                                                  -(-((short)uVar58 == (short)uVar60) & 1U) ^ bVar38
                                                  )))))));
                pbVar28 = pbVar28 + 0x20;
                pbVar23 = pbVar23 + 0x10;
                pbVar27 = pbVar27 + 0x20;
              } while (uVar34 < uVar25);
              iVar30 = iVar30 + iVar15;
              if (uVar17 - uVar8 == iVar15) goto LAB_0023f584;
            }
            iVar15 = iVar30 + 1;
            lVar36 = (long)iVar30 * 2;
            param_5[iVar30] =
                 bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
            if (iVar15 < iVar9) {
              iVar7 = iVar30 + 2;
              lVar36 = (long)iVar15 * 2;
              param_5[iVar15] =
                   bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
              if (iVar7 < iVar9) {
                iVar15 = iVar30 + 3;
                lVar36 = (long)iVar7 * 2;
                param_5[iVar7] =
                     bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
                if (iVar15 < iVar9) {
                  iVar7 = iVar30 + 4;
                  lVar36 = (long)iVar15 * 2;
                  param_5[iVar15] =
                       bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
                  if (iVar7 < iVar9) {
                    iVar15 = iVar30 + 5;
                    lVar36 = (long)iVar7 * 2;
                    param_5[iVar7] =
                         bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
                    if (iVar15 < iVar9) {
                      iVar7 = iVar30 + 6;
                      lVar36 = (long)iVar15 * 2;
                      param_5[iVar15] =
                           bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36));
                      if (iVar7 < iVar9) {
                        iVar15 = iVar30 + 7;
                        lVar36 = (long)iVar7 * 2;
                        param_5[iVar7] =
                             bVar38 ^ -(*(short *)(param_1 + lVar36) == *(short *)(param_3 + lVar36)
                                       );
                        if (iVar15 < iVar9) {
                          iVar7 = iVar30 + 8;
                          lVar36 = (long)iVar15 * 2;
                          param_5[iVar15] =
                               bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                         *(short *)(param_3 + lVar36));
                          if (iVar7 < iVar9) {
                            iVar15 = iVar30 + 9;
                            lVar36 = (long)iVar7 * 2;
                            param_5[iVar7] =
                                 bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                           *(short *)(param_3 + lVar36));
                            if (iVar15 < iVar9) {
                              iVar7 = iVar30 + 10;
                              lVar36 = (long)iVar15 * 2;
                              param_5[iVar15] =
                                   bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                             *(short *)(param_3 + lVar36));
                              if (iVar7 < iVar9) {
                                iVar15 = iVar30 + 0xb;
                                lVar36 = (long)iVar7 * 2;
                                param_5[iVar7] =
                                     bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                               *(short *)(param_3 + lVar36));
                                if (iVar15 < iVar9) {
                                  iVar7 = iVar30 + 0xc;
                                  lVar36 = (long)iVar15 * 2;
                                  param_5[iVar15] =
                                       bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                                 *(short *)(param_3 + lVar36));
                                  if (iVar7 < iVar9) {
                                    iVar15 = iVar30 + 0xd;
                                    lVar36 = (long)iVar7 * 2;
                                    param_5[iVar7] =
                                         bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                                   *(short *)(param_3 + lVar36));
                                    if (iVar15 < iVar9) {
                                      iVar30 = iVar30 + 0xe;
                                      lVar36 = (long)iVar15 * 2;
                                      param_5[iVar15] =
                                           bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                                     *(short *)(param_3 + lVar36));
                                      if (iVar30 < iVar9) {
                                        lVar36 = (long)iVar30 * 2;
                                        param_5[iVar30] =
                                             bVar38 ^ -(*(short *)(param_1 + lVar36) ==
                                                       *(short *)(param_3 + lVar36));
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0023f584:
        iVar50 = iVar50 + -1;
        param_1 = param_1 + lVar67;
        param_3 = param_3 + lVar63;
        param_5 = param_5 + param_6;
      } while (iVar50 != -1);
    }
  }
  return;
}


==================================================================

### FUNC 0023f6c4 (6164 bytes) name=FUN_0023f6c4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0023f6c4(byte *param_1,ulong param_2,byte *param_3,ulong param_4,byte *param_5,long param_6
                 ,int *param_7,int *param_8)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  byte *pbVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  byte *pbVar10;
  byte *pbVar11;
  uint3 uVar12;
  uint3 uVar13;
  uint3 uVar14;
  uint5 uVar15;
  uint5 uVar16;
  uint5 uVar17;
  ulong uVar18;
  ulong uVar19;
  bool bVar20;
  int iVar21;
  int iVar22;
  undefined8 *puVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  long lVar27;
  long lVar28;
  byte *pbVar29;
  long lVar30;
  byte *pbVar31;
  byte bVar32;
  long lVar33;
  byte bVar34;
  uint uVar35;
  long lVar36;
  byte *pbVar37;
  long lVar38;
  uint uVar39;
  long lVar40;
  long lVar41;
  byte *pbVar42;
  long lVar43;
  uint uVar44;
  ulong uVar45;
  int iVar46;
  int iVar47;
  uint uVar48;
  long lVar49;
  long lVar50;
  int iVar51;
  undefined8 uVar52;
  long lVar53;
  undefined8 uVar54;
  long lVar55;
  undefined8 uVar56;
  undefined8 uVar57;
  undefined8 uVar58;
  undefined8 uVar59;
  undefined8 uVar60;
  undefined8 uVar61;
  int iVar62;
  byte bVar63;
  byte bVar64;
  long lVar65;
  long lVar66;
  long lVar67;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar47 = *param_8;
  iVar6 = *param_7;
  param_2 = param_2 >> 2;
  iVar46 = param_7[1];
  param_4 = param_4 >> 2;
  if (iVar47 - 2U < 2) {
    bVar20 = iVar47 != 2;
    iVar47 = 4;
    if (bVar20) {
      iVar47 = 1;
    }
    pbVar37 = param_1;
    uVar45 = param_4;
    if (iVar47 == 1) {
LAB_002403ac:
      bVar34 = 0;
      bVar32 = 0;
    }
    else {
LAB_0023f814:
      bVar34 = 0xff;
      bVar32 = 0xff;
    }
    if (iVar46 != 0) {
      iVar8 = iVar6 + -7;
      uVar1 = iVar6 - 8U >> 3;
      lVar27 = (ulong)uVar1 * 0x20 + 0x30;
      pbVar31 = param_3 + 0x10;
      pbVar42 = pbVar37 + 0x10;
      iVar7 = iVar6 + -3;
      iVar62 = (uVar1 + 1) * 8;
      if (iVar47 == 1) goto LAB_00240150;
      do {
        if (iVar47 == 4) {
          if (iVar8 < 1) goto LAB_002403b8;
          pbVar24 = pbVar31;
          pbVar25 = pbVar42;
          pbVar26 = param_5;
          do {
            pbVar29 = pbVar25 + -0x10;
            pbVar4 = pbVar24 + 0x20;
            pbVar10 = pbVar25 + -8;
            pbVar11 = pbVar25 + 8;
            uVar52 = *(undefined8 *)pbVar25;
            pbVar25 = pbVar25 + 0x20;
            *(ulong *)pbVar26 =
                 CONCAT17(~-((int)((ulong)*(undefined8 *)pbVar11 >> 0x20) <
                            (int)((ulong)*(undefined8 *)(pbVar24 + 8) >> 0x20)),
                          CONCAT16(~-((int)*(undefined8 *)pbVar11 <
                                     (int)*(undefined8 *)(pbVar24 + 8)),
                                   CONCAT15(~-((int)((ulong)uVar52 >> 0x20) <
                                              (int)((ulong)*(undefined8 *)pbVar24 >> 0x20)),
                                            CONCAT14(~-((int)uVar52 < (int)*(undefined8 *)pbVar24),
                                                     CONCAT13(~-((int)((ulong)*(undefined8 *)pbVar10
                                                                      >> 0x20) <
                                                                (int)((ulong)*(undefined8 *)
                                                                              (pbVar24 + -8) >> 0x20
                                                                     )),
                                                              CONCAT12(~-((int)*(undefined8 *)
                                                                                pbVar10 <
                                                                         (int)*(undefined8 *)
                                                                               (pbVar24 + -8)),
                                                                       CONCAT11(~-((int)((ulong)*(
                                                  undefined8 *)pbVar29 >> 0x20) <
                                                  (int)((ulong)*(undefined8 *)(pbVar24 + -0x10) >>
                                                       0x20)),
                                                  ~-((int)*(undefined8 *)pbVar29 <
                                                    (int)*(undefined8 *)(pbVar24 + -0x10)))))))));
            pbVar24 = pbVar4;
            pbVar26 = pbVar26 + 8;
            iVar21 = iVar62;
          } while (pbVar4 != param_3 + lVar27);
        }
        else if (iVar47 == 0) {
          if (iVar8 < 1) {
            iVar21 = 0;
          }
          else {
            pbVar24 = pbVar31;
            pbVar25 = pbVar42;
            pbVar26 = param_5;
            do {
              pbVar29 = pbVar25 + -0x10;
              pbVar4 = pbVar24 + 0x20;
              pbVar10 = pbVar25 + -8;
              pbVar11 = pbVar25 + 8;
              uVar52 = *(undefined8 *)pbVar25;
              pbVar25 = pbVar25 + 0x20;
              *(ulong *)pbVar26 =
                   CONCAT17(-((int)((ulong)*(undefined8 *)(pbVar24 + 8) >> 0x20) ==
                             (int)((ulong)*(undefined8 *)pbVar11 >> 0x20)),
                            CONCAT16(-((int)*(undefined8 *)(pbVar24 + 8) ==
                                      (int)*(undefined8 *)pbVar11),
                                     CONCAT15(-((int)((ulong)*(undefined8 *)pbVar24 >> 0x20) ==
                                               (int)((ulong)uVar52 >> 0x20)),
                                              CONCAT14(-((int)*(undefined8 *)pbVar24 == (int)uVar52)
                                                       ,CONCAT13(-((int)((ulong)*(undefined8 *)
                                                                                 (pbVar24 + -8) >>
                                                                        0x20) ==
                                                                  (int)((ulong)*(undefined8 *)
                                                                                pbVar10 >> 0x20)),
                                                                 CONCAT12(-((int)*(undefined8 *)
                                                                                  (pbVar24 + -8) ==
                                                                           (int)*(undefined8 *)
                                                                                 pbVar10),
                                                                          CONCAT11(-((int)((ulong)*(
                                                  undefined8 *)(pbVar24 + -0x10) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)pbVar29 >> 0x20)),
                                                  -((int)*(undefined8 *)(pbVar24 + -0x10) ==
                                                   (int)*(undefined8 *)pbVar29))))))));
              pbVar24 = pbVar4;
              pbVar26 = pbVar26 + 8;
              iVar21 = iVar62;
            } while (pbVar4 != param_3 + lVar27);
          }
        }
        else {
          iVar21 = 0;
          if ((iVar47 == 5) && (0 < iVar8)) {
            pbVar25 = pbVar31;
            pbVar24 = pbVar42;
            pbVar26 = param_5;
            do {
              pbVar4 = pbVar25 + 0x20;
              *(ulong *)pbVar26 =
                   CONCAT17(~-((int)((ulong)*(undefined8 *)(pbVar25 + 8) >> 0x20) ==
                              (int)((ulong)*(undefined8 *)(pbVar24 + 8) >> 0x20)),
                            CONCAT16(~-((int)*(undefined8 *)(pbVar25 + 8) ==
                                       (int)*(undefined8 *)(pbVar24 + 8)),
                                     CONCAT15(~-((int)((ulong)*(undefined8 *)pbVar25 >> 0x20) ==
                                                (int)((ulong)*(undefined8 *)pbVar24 >> 0x20)),
                                              CONCAT14(~-((int)*(undefined8 *)pbVar25 ==
                                                         (int)*(undefined8 *)pbVar24),
                                                       CONCAT13(~-((int)((ulong)*(undefined8 *)
                                                                                 (pbVar25 + -8) >>
                                                                        0x20) ==
                                                                  (int)((ulong)*(undefined8 *)
                                                                                (pbVar24 + -8) >>
                                                                       0x20)),
                                                                CONCAT12(~-((int)*(undefined8 *)
                                                                                  (pbVar25 + -8) ==
                                                                           (int)*(undefined8 *)
                                                                                 (pbVar24 + -8)),
                                                                         CONCAT11(~-((int)((ulong)*(
                                                  undefined8 *)(pbVar25 + -0x10) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)(pbVar24 + -0x10) >>
                                                       0x20)),
                                                  ~-((int)*(undefined8 *)(pbVar25 + -0x10) ==
                                                    (int)*(undefined8 *)(pbVar24 + -0x10)))))))));
              pbVar25 = pbVar4;
              pbVar24 = pbVar24 + 0x20;
              pbVar26 = pbVar26 + 8;
              iVar21 = iVar62;
            } while (pbVar4 != param_3 + lVar27);
          }
        }
LAB_0023f914:
        if (iVar21 < iVar7) {
          lVar66 = (long)iVar21;
          pbVar25 = param_5 + lVar66;
          uVar39 = (iVar6 + -4) - iVar21;
          uVar2 = uVar39 >> 2;
          pbVar24 = param_3 + lVar66 * 4;
          uVar1 = uVar2 + 1;
          lVar65 = lVar66 + (ulong)uVar1 * 4;
          lVar28 = lVar65 * 4;
          pbVar26 = pbVar37 + lVar66 * 4;
          if ((pbVar25 < param_3 + lVar28 && pbVar24 < param_5 + lVar65 ||
               pbVar25 < pbVar37 + lVar28 && pbVar26 < param_5 + lVar65) || (uVar1 < 4)) {
            do {
              pbVar4 = pbVar25 + 4;
              iVar22 = *(int *)pbVar26;
              iVar51 = *(int *)pbVar24;
              pbVar25[1] = -(*(int *)(pbVar26 + 4) < *(int *)(pbVar24 + 4)) ^ bVar32;
              *pbVar25 = -(iVar22 < iVar51) ^ bVar32;
              iVar22 = *(int *)(pbVar24 + 8);
              iVar51 = *(int *)(pbVar26 + 8);
              pbVar25[3] = -(*(int *)(pbVar26 + 0xc) < *(int *)(pbVar24 + 0xc)) ^ bVar32;
              pbVar25[2] = -(iVar51 < iVar22) ^ bVar32;
              pbVar26 = pbVar26 + 0x10;
              pbVar25 = pbVar4;
              pbVar24 = pbVar24 + 0x10;
            } while (pbVar4 != param_5 + lVar66 + 4 + (ulong)uVar2 * 4);
          }
          else {
            uVar44 = (uVar2 - 3 >> 2) + 1;
            iVar22 = iVar21;
            if (0xb < uVar39) {
              uVar39 = 0;
              do {
                uVar54 = *(undefined8 *)(pbVar24 + 8);
                uVar52 = *(undefined8 *)pbVar24;
                uVar39 = uVar39 + 1;
                uVar57 = *(undefined8 *)(pbVar26 + 8);
                uVar56 = *(undefined8 *)pbVar26;
                uVar60 = *(undefined8 *)(pbVar24 + 0x18);
                uVar58 = *(undefined8 *)(pbVar24 + 0x10);
                uVar61 = *(undefined8 *)(pbVar26 + 0x18);
                uVar59 = *(undefined8 *)(pbVar26 + 0x10);
                *(ulong *)(pbVar25 + 8) =
                     CONCAT17(-(-((int)((ulong)*(undefined8 *)(pbVar26 + 0x38) >> 0x20) <
                                 (int)((ulong)*(undefined8 *)(pbVar24 + 0x38) >> 0x20)) & 1U) ^
                              bVar32,CONCAT16(-(-((int)*(undefined8 *)(pbVar26 + 0x38) <
                                                 (int)*(undefined8 *)(pbVar24 + 0x38)) & 1U) ^
                                              bVar32,CONCAT15(-(-((int)((ulong)*(undefined8 *)
                                                                                (pbVar26 + 0x30) >>
                                                                       0x20) <
                                                                 (int)((ulong)*(undefined8 *)
                                                                               (pbVar24 + 0x30) >>
                                                                      0x20)) & 1U) ^ bVar32,
                                                              CONCAT14(-(-((int)*(undefined8 *)
                                                                                 (pbVar26 + 0x30) <
                                                                          (int)*(undefined8 *)
                                                                                (pbVar24 + 0x30)) &
                                                                        1U) ^ bVar32,
                                                                       CONCAT13(-(-((int)((ulong)*(
                                                  undefined8 *)(pbVar26 + 0x28) >> 0x20) <
                                                  (int)((ulong)*(undefined8 *)(pbVar24 + 0x28) >>
                                                       0x20)) & 1U) ^ bVar32,
                                                  CONCAT12(-(-((int)*(undefined8 *)(pbVar26 + 0x28)
                                                              < (int)*(undefined8 *)(pbVar24 + 0x28)
                                                              ) & 1U) ^ bVar32,
                                                           CONCAT11(-(-((int)((ulong)*(undefined8 *)
                                                                                      (pbVar26 +
                                                                                      0x20) >> 0x20)
                                                                       < (int)((ulong)*(undefined8 *
                                                                                       )(pbVar24 +
                                                                                        0x20) >>
                                                                              0x20)) & 1U) ^ bVar32,
                                                                    -(-((int)*(undefined8 *)
                                                                              (pbVar26 + 0x20) <
                                                                       (int)*(undefined8 *)
                                                                             (pbVar24 + 0x20)) & 1U)
                                                                    ^ bVar32)))))));
                *(ulong *)pbVar25 =
                     CONCAT17(-(-((int)((ulong)uVar61 >> 0x20) < (int)((ulong)uVar60 >> 0x20)) & 1U)
                              ^ bVar32,CONCAT16(-(-((int)uVar61 < (int)uVar60) & 1U) ^ bVar32,
                                                CONCAT15(-(-((int)((ulong)uVar59 >> 0x20) <
                                                            (int)((ulong)uVar58 >> 0x20)) & 1U) ^
                                                         bVar32,CONCAT14(-(-((int)uVar59 <
                                                                            (int)uVar58) & 1U) ^
                                                                         bVar32,CONCAT13(-(-((int)((
                                                  ulong)uVar57 >> 0x20) <
                                                  (int)((ulong)uVar54 >> 0x20)) & 1U) ^ bVar32,
                                                  CONCAT12(-(-((int)uVar57 < (int)uVar54) & 1U) ^
                                                           bVar32,CONCAT11(-(-((int)((ulong)uVar56
                                                                                    >> 0x20) <
                                                                              (int)((ulong)uVar52 >>
                                                                                   0x20)) & 1U) ^
                                                                           bVar32,-(-((int)uVar56 <
                                                                                     (int)uVar52) &
                                                                                   1U) ^ bVar32)))))
                                               ));
                pbVar26 = pbVar26 + 0x40;
                pbVar25 = pbVar25 + 0x10;
                pbVar24 = pbVar24 + 0x40;
              } while (uVar39 < uVar44);
              iVar22 = iVar21 + uVar44 * 0x10;
              if (uVar1 == uVar44 * 4) goto LAB_0023fc6c;
            }
            lVar66 = (long)iVar22;
            lVar65 = lVar66 * 4;
            iVar51 = *(int *)(param_3 + lVar65 + 4);
            iVar3 = *(int *)(pbVar37 + lVar65 + 4);
            param_5[lVar66] = -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65)) ^ bVar32;
            param_5[lVar66 + 1] = -(iVar3 < iVar51) ^ bVar32;
            iVar51 = *(int *)(param_3 + lVar65 + 8);
            iVar3 = *(int *)(pbVar37 + lVar65 + 8);
            param_5[lVar66 + 3] =
                 -(*(int *)(pbVar37 + lVar65 + 0xc) < *(int *)(param_3 + lVar65 + 0xc)) ^ bVar32;
            param_5[lVar66 + 2] = -(iVar3 < iVar51) ^ bVar32;
            if (iVar22 + 4 < iVar7) {
              lVar66 = (long)(iVar22 + 4);
              lVar65 = lVar66 * 4;
              iVar51 = *(int *)(param_3 + lVar65 + 4);
              iVar3 = *(int *)(pbVar37 + lVar65 + 4);
              param_5[lVar66] = -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65)) ^ bVar32;
              param_5[lVar66 + 1] = -(iVar3 < iVar51) ^ bVar32;
              iVar51 = *(int *)(param_3 + lVar65 + 8);
              iVar3 = *(int *)(pbVar37 + lVar65 + 8);
              param_5[lVar66 + 3] =
                   -(*(int *)(pbVar37 + lVar65 + 0xc) < *(int *)(param_3 + lVar65 + 0xc)) ^ bVar32;
              param_5[lVar66 + 2] = -(iVar3 < iVar51) ^ bVar32;
              if (iVar22 + 8 < iVar7) {
                lVar65 = (long)(iVar22 + 8);
                lVar66 = lVar65 * 4;
                iVar22 = *(int *)(param_3 + lVar66 + 4);
                iVar51 = *(int *)(pbVar37 + lVar66 + 4);
                param_5[lVar65] =
                     -(*(int *)(pbVar37 + lVar66) < *(int *)(param_3 + lVar66)) ^ bVar32;
                param_5[lVar65 + 1] = -(iVar51 < iVar22) ^ bVar32;
                iVar22 = *(int *)(pbVar37 + lVar66 + 8);
                iVar51 = *(int *)(param_3 + lVar66 + 8);
                param_5[lVar65 + 3] =
                     -(*(int *)(pbVar37 + lVar66 + 0xc) < *(int *)(param_3 + lVar66 + 0xc)) ^ bVar32
                ;
                param_5[lVar65 + 2] = -(iVar22 < iVar51) ^ bVar32;
              }
            }
          }
LAB_0023fc6c:
          iVar21 = iVar21 + 4 + uVar2 * 4;
        }
        if (iVar21 < iVar6) {
          lVar66 = (long)iVar21;
          uVar1 = iVar6 - iVar21;
          lVar28 = (lVar66 + (ulong)uVar1) * 4;
          lVar65 = lVar66 * 4;
          pbVar25 = param_5 + lVar66;
          pbVar24 = param_3 + lVar65;
          if ((pbVar25 < param_3 + lVar28 && pbVar24 < param_5 + lVar66 + (ulong)uVar1 ||
               pbVar25 < pbVar37 + lVar28 && pbVar37 + lVar65 < param_5 + lVar66 + (ulong)uVar1) ||
             (uVar1 < 0x12)) {
            lVar66 = 0;
            do {
              pbVar25[lVar66] =
                   bVar34 ^ -(*(int *)(pbVar37 + lVar65 + lVar66 * 4) <
                             *(int *)(pbVar24 + lVar66 * 4));
              lVar66 = lVar66 + 1;
            } while (lVar66 != (ulong)(uint)((iVar6 + -1) - iVar21) + 1);
          }
          else {
            uVar2 = -((uint)((ulong)pbVar24 >> 2) & 3) & 3;
            if (uVar1 < uVar2) {
              uVar2 = uVar1;
            }
            iVar22 = iVar21;
            if (uVar2 != 0) {
              iVar22 = iVar21 + 1;
              *pbVar25 = bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
              if (uVar2 != 1) {
                lVar28 = (long)iVar22;
                iVar22 = iVar21 + 2;
                lVar30 = lVar28 * 4;
                param_5[lVar28] =
                     bVar34 ^ -(*(int *)(pbVar37 + lVar30) < *(int *)(param_3 + lVar30));
                if (uVar2 == 3) {
                  lVar28 = (long)iVar22;
                  iVar22 = iVar21 + 3;
                  lVar30 = lVar28 * 4;
                  param_5[lVar28] =
                       bVar34 ^ -(*(int *)(pbVar37 + lVar30) < *(int *)(param_3 + lVar30));
                }
              }
            }
            uVar39 = ((uVar1 - uVar2) - 0x10 >> 4) + 1;
            iVar21 = uVar39 * 0x10;
            if (uVar1 - 0xf != uVar2) {
              lVar65 = lVar65 + (ulong)uVar2 * 4;
              uVar44 = 0;
              pbVar25 = param_3 + lVar65;
              pbVar24 = param_5 + (ulong)uVar2 + lVar66;
              pbVar26 = pbVar37 + lVar65;
              do {
                uVar44 = uVar44 + 1;
                bVar63 = -((int)((ulong)*(undefined8 *)(pbVar26 + 0x18) >> 0x20) <
                          (int)((ulong)*(undefined8 *)(pbVar25 + 0x18) >> 0x20));
                bVar64 = -((int)((ulong)*(undefined8 *)(pbVar26 + 0x38) >> 0x20) <
                          (int)((ulong)*(undefined8 *)(pbVar25 + 0x38) >> 0x20));
                uVar12 = CONCAT12(-((int)((ulong)*(undefined8 *)pbVar26 >> 0x20) <
                                   (int)((ulong)*(undefined8 *)pbVar25 >> 0x20)),
                                  (ushort)(-((int)*(undefined8 *)pbVar26 <
                                            (int)*(undefined8 *)pbVar25) & 1)) & 0x1ffff;
                uVar13 = CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar26 + 0x10) >> 0x20) <
                                   (int)((ulong)*(undefined8 *)(pbVar25 + 0x10) >> 0x20)),
                                  (ushort)(-((int)*(undefined8 *)(pbVar26 + 0x10) <
                                            (int)*(undefined8 *)(pbVar25 + 0x10)) & 1)) & 0x1ffff;
                uVar14 = CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar26 + 0x20) >> 0x20) <
                                   (int)((ulong)*(undefined8 *)(pbVar25 + 0x20) >> 0x20)),
                                  (ushort)(-((int)*(undefined8 *)(pbVar26 + 0x20) <
                                            (int)*(undefined8 *)(pbVar25 + 0x20)) & 1)) & 0x1ffff;
                uVar15 = CONCAT14(-((int)*(undefined8 *)(pbVar26 + 0x38) <
                                   (int)*(undefined8 *)(pbVar25 + 0x38)),
                                  (uint)(CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar26 + 0x30) >>
                                                         0x20) <
                                                   (int)((ulong)*(undefined8 *)(pbVar25 + 0x30) >>
                                                        0x20)),
                                                  (ushort)(-((int)*(undefined8 *)(pbVar26 + 0x30) <
                                                            (int)*(undefined8 *)(pbVar25 + 0x30)) &
                                                          1)) & 0x1ffff)) & 0x1ffffffff;
                uVar18 = (ulong)CONCAT15(bVar63,CONCAT14(-((int)*(undefined8 *)(pbVar26 + 0x18) <
                                                          (int)*(undefined8 *)(pbVar25 + 0x18)),
                                                         CONCAT13((char)(uVar13 >> 0x10),
                                                                  CONCAT12((char)uVar13,
                                                                           CONCAT11(-((int)((ulong)*
                                                  (undefined8 *)(pbVar26 + 8) >> 0x20) <
                                                  (int)((ulong)*(undefined8 *)(pbVar25 + 8) >> 0x20)
                                                  ),-((int)*(undefined8 *)(pbVar26 + 8) <
                                                     (int)*(undefined8 *)(pbVar25 + 8))))))) &
                         0x101ffff0101;
                uVar19 = (ulong)CONCAT15(bVar64,CONCAT14((char)(uVar15 >> 0x20),
                                                         CONCAT13((char)(uVar15 >> 0x10),
                                                                  CONCAT12((char)uVar15,
                                                                           CONCAT11(-((int)((ulong)*
                                                  (undefined8 *)(pbVar26 + 0x28) >> 0x20) <
                                                  (int)((ulong)*(undefined8 *)(pbVar25 + 0x28) >>
                                                       0x20)),
                                                  -((int)*(undefined8 *)(pbVar26 + 0x28) <
                                                   (int)*(undefined8 *)(pbVar25 + 0x28))))))) &
                         0x1ffffff0101;
                *(ulong *)(pbVar24 + 8) =
                     CONCAT17(-(bVar64 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar19 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar19 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar19 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar19 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar19 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar14 
                                                  >> 0x10) ^ bVar34,-(char)uVar14 ^ bVar34)))))));
                *(ulong *)pbVar24 =
                     CONCAT17(-(bVar63 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar18 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar18 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar18 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar18 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar18 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar12 
                                                  >> 0x10) ^ bVar34,-(char)uVar12 ^ bVar34)))))));
                pbVar25 = pbVar25 + 0x40;
                pbVar24 = pbVar24 + 0x10;
                pbVar26 = pbVar26 + 0x40;
              } while (uVar44 < uVar39);
              iVar22 = iVar22 + iVar21;
              if (iVar21 == uVar1 - uVar2) goto LAB_0024012c;
            }
            iVar21 = iVar22 + 1;
            lVar65 = (long)iVar22 * 4;
            param_5[iVar22] = bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
            if (iVar21 < iVar6) {
              iVar51 = iVar22 + 2;
              lVar65 = (long)iVar21 * 4;
              param_5[iVar21] = bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
              if (iVar51 < iVar6) {
                iVar21 = iVar22 + 3;
                lVar65 = (long)iVar51 * 4;
                param_5[iVar51] =
                     bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                if (iVar21 < iVar6) {
                  iVar51 = iVar22 + 4;
                  lVar65 = (long)iVar21 * 4;
                  param_5[iVar21] =
                       bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                  if (iVar51 < iVar6) {
                    iVar21 = iVar22 + 5;
                    lVar65 = (long)iVar51 * 4;
                    param_5[iVar51] =
                         bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                    if (iVar21 < iVar6) {
                      iVar51 = iVar22 + 6;
                      lVar65 = (long)iVar21 * 4;
                      param_5[iVar21] =
                           bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                      if (iVar51 < iVar6) {
                        iVar21 = iVar22 + 7;
                        lVar65 = (long)iVar51 * 4;
                        param_5[iVar51] =
                             bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                        if (iVar21 < iVar6) {
                          iVar51 = iVar22 + 8;
                          lVar65 = (long)iVar21 * 4;
                          param_5[iVar21] =
                               bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65));
                          if (iVar51 < iVar6) {
                            iVar21 = iVar22 + 9;
                            lVar65 = (long)iVar51 * 4;
                            param_5[iVar51] =
                                 bVar34 ^ -(*(int *)(pbVar37 + lVar65) < *(int *)(param_3 + lVar65))
                            ;
                            if (iVar21 < iVar6) {
                              iVar51 = iVar22 + 10;
                              lVar65 = (long)iVar21 * 4;
                              param_5[iVar21] =
                                   bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                             *(int *)(param_3 + lVar65));
                              if (iVar51 < iVar6) {
                                iVar21 = iVar22 + 0xb;
                                lVar65 = (long)iVar51 * 4;
                                param_5[iVar51] =
                                     bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                               *(int *)(param_3 + lVar65));
                                if (iVar21 < iVar6) {
                                  iVar51 = iVar22 + 0xc;
                                  lVar65 = (long)iVar21 * 4;
                                  param_5[iVar21] =
                                       bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                                 *(int *)(param_3 + lVar65));
                                  if (iVar51 < iVar6) {
                                    iVar21 = iVar22 + 0xd;
                                    lVar65 = (long)iVar51 * 4;
                                    param_5[iVar51] =
                                         bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                                   *(int *)(param_3 + lVar65));
                                    if (iVar21 < iVar6) {
                                      iVar22 = iVar22 + 0xe;
                                      lVar65 = (long)iVar21 * 4;
                                      param_5[iVar21] =
                                           bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                                     *(int *)(param_3 + lVar65));
                                      if (iVar22 < iVar6) {
                                        lVar65 = (long)iVar22 * 4;
                                        param_5[iVar22] =
                                             bVar34 ^ -(*(int *)(pbVar37 + lVar65) <
                                                       *(int *)(param_3 + lVar65));
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0024012c:
        iVar46 = iVar46 + -1;
        param_5 = param_5 + param_6;
        pbVar31 = pbVar31 + uVar45 * 4;
        pbVar42 = pbVar42 + param_2 * 4;
        if (iVar46 == 0) {
          return;
        }
        pbVar37 = pbVar42 + -0x10;
        param_3 = pbVar31 + -0x10;
      } while (iVar47 != 1);
LAB_00240150:
      if (iVar8 < 1) {
LAB_002403b8:
        iVar21 = 0;
      }
      else {
        pbVar24 = pbVar31;
        pbVar25 = pbVar42;
        pbVar26 = param_5;
        do {
          pbVar29 = pbVar25 + -0x10;
          pbVar4 = pbVar24 + 0x20;
          pbVar10 = pbVar25 + -8;
          pbVar11 = pbVar25 + 8;
          uVar52 = *(undefined8 *)pbVar25;
          pbVar25 = pbVar25 + 0x20;
          *(ulong *)pbVar26 =
               CONCAT17(-((int)((ulong)*(undefined8 *)pbVar11 >> 0x20) <
                         (int)((ulong)*(undefined8 *)(pbVar24 + 8) >> 0x20)),
                        CONCAT16(-((int)*(undefined8 *)pbVar11 < (int)*(undefined8 *)(pbVar24 + 8)),
                                 CONCAT15(-((int)((ulong)uVar52 >> 0x20) <
                                           (int)((ulong)*(undefined8 *)pbVar24 >> 0x20)),
                                          CONCAT14(-((int)uVar52 < (int)*(undefined8 *)pbVar24),
                                                   CONCAT13(-((int)((ulong)*(undefined8 *)pbVar10 >>
                                                                   0x20) <
                                                             (int)((ulong)*(undefined8 *)
                                                                           (pbVar24 + -8) >> 0x20)),
                                                            CONCAT12(-((int)*(undefined8 *)pbVar10 <
                                                                      (int)*(undefined8 *)
                                                                            (pbVar24 + -8)),
                                                                     CONCAT11(-((int)((ulong)*(
                                                  undefined8 *)pbVar29 >> 0x20) <
                                                  (int)((ulong)*(undefined8 *)(pbVar24 + -0x10) >>
                                                       0x20)),
                                                  -((int)*(undefined8 *)pbVar29 <
                                                   (int)*(undefined8 *)(pbVar24 + -0x10)))))))));
          pbVar24 = pbVar4;
          pbVar26 = pbVar26 + 8;
          iVar21 = iVar62;
        } while (pbVar4 != param_3 + lVar27);
      }
      goto LAB_0023f914;
    }
  }
  else {
    if (iVar47 == 5 || iVar47 == 0) {
      if (iVar47 == 4 || iVar47 == 1) goto LAB_0023f80c;
    }
    else {
      if (iVar47 == 4 || iVar47 == 1) {
LAB_0023f80c:
        pbVar37 = param_3;
        param_3 = param_1;
        uVar45 = param_2;
        param_2 = param_4;
        if (iVar47 == 1) goto LAB_002403ac;
        goto LAB_0023f814;
      }
      local_10 = 0;
      local_8 = 0;
      puVar23 = (undefined8 *)cv::String::allocate((String *)&local_10,0x44);
      uVar61 = _LAB_00460708;
      uVar60 = DAT_00460700;
      uVar59 = DAT_004606f8;
      uVar58 = DAT_004606f0;
      uVar57 = DAT_004606e8;
      uVar56 = DAT_004606e0;
      uVar54 = DAT_004606d8;
      uVar52 = DAT_004606d0;
      *(undefined4 *)(puVar23 + 8) = DAT_00460710;
      *puVar23 = uVar52;
      puVar23[1] = uVar54;
      puVar23[2] = uVar56;
      puVar23[3] = uVar57;
      puVar23[4] = uVar58;
      puVar23[5] = uVar59;
      puVar23[6] = uVar60;
      puVar23[7] = uVar61;
      cv::error(-0xd7,(String *)&local_10,"cv::Cmp_SIMD<int>::Cmp_SIMD(int)",
                "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x10a5);
      cv::String::deallocate((String *)&local_10);
    }
    if (iVar47 == 5) {
      bVar34 = 0xff;
      bVar32 = 0xff;
    }
    else {
      if (iVar47 != 0) {
        return;
      }
      bVar34 = 0;
      bVar32 = 0;
    }
    iVar47 = iVar46 + -1;
    if (iVar46 != 0) {
      uVar44 = iVar6 - 4;
      iVar8 = iVar6 + -3;
      uVar39 = uVar44 >> 2;
      uVar1 = uVar39 + 1;
      uVar2 = (uVar39 - 3 >> 2) + 1;
      iVar46 = uVar2 * 0x10;
      if (uVar44 < 0xc) {
        iVar46 = 0;
      }
      lVar65 = NEON_shl(param_2,2);
      iVar7 = uVar1 * 4;
      lVar27 = (long)iVar46;
      lVar66 = NEON_shl(param_4,2);
      if (iVar8 < 1) {
        iVar7 = 0;
      }
      lVar53 = NEON_shl((ulong)uVar1,4);
      lVar67 = NEON_shl((ulong)uVar1,2);
      lVar28 = (long)(iVar46 + 4);
      lVar30 = (long)(iVar46 + 8);
      lVar43 = lVar27 * 4;
      iVar62 = iVar7 + 1;
      lVar40 = lVar30 * 4;
      lVar41 = lVar28 * 4;
      iVar21 = iVar7 + 2;
      uVar9 = iVar6 - iVar7;
      lVar33 = (long)iVar7;
      lVar49 = NEON_shl((long)iVar62,2);
      lVar55 = NEON_shl(lVar33 + (ulong)uVar9,2);
      lVar50 = NEON_shl((long)iVar21,2);
      lVar38 = lVar33 * 4;
      do {
        if (0 < iVar8) {
          if ((param_1 < param_5 + lVar67 && param_5 < param_1 + lVar53 ||
               param_3 < param_5 + lVar67 && param_5 < param_3 + lVar53) || (uVar1 < 4)) {
            pbVar37 = param_3 + 4;
            pbVar31 = param_5;
            pbVar42 = param_1;
            do {
              pbVar25 = pbVar37 + 0x10;
              iVar22 = *(int *)pbVar42;
              iVar51 = *(int *)(pbVar37 + -4);
              pbVar31[1] = -(*(int *)(pbVar42 + 4) == *(int *)pbVar37) ^ bVar32;
              *pbVar31 = -(iVar22 == iVar51) ^ bVar32;
              iVar22 = *(int *)(pbVar37 + 4);
              iVar51 = *(int *)(pbVar42 + 8);
              pbVar31[3] = -(*(int *)(pbVar42 + 0xc) == *(int *)(pbVar37 + 8)) ^ bVar32;
              pbVar31[2] = -(iVar51 == iVar22) ^ bVar32;
              pbVar37 = pbVar25;
              pbVar31 = pbVar31 + 4;
              pbVar42 = pbVar42 + 0x10;
            } while (pbVar25 != param_3 + (ulong)uVar39 * 0x10 + 0x14);
          }
          else {
            if (0xb < uVar44) {
              uVar35 = 0;
              pbVar37 = param_3;
              pbVar31 = param_1;
              pbVar42 = param_5;
              do {
                uVar61 = *(undefined8 *)(pbVar31 + 8);
                uVar60 = *(undefined8 *)pbVar31;
                uVar59 = *(undefined8 *)(pbVar37 + 8);
                uVar58 = *(undefined8 *)pbVar37;
                uVar35 = uVar35 + 1;
                uVar56 = *(undefined8 *)(pbVar31 + 0x18);
                uVar52 = *(undefined8 *)(pbVar31 + 0x10);
                uVar57 = *(undefined8 *)(pbVar37 + 0x18);
                uVar54 = *(undefined8 *)(pbVar37 + 0x10);
                *(ulong *)(pbVar42 + 8) =
                     CONCAT17(-(-((int)((ulong)*(undefined8 *)(pbVar31 + 0x38) >> 0x20) ==
                                 (int)((ulong)*(undefined8 *)(pbVar37 + 0x38) >> 0x20)) & 1U) ^
                              bVar32,CONCAT16(-(-((int)*(undefined8 *)(pbVar31 + 0x38) ==
                                                 (int)*(undefined8 *)(pbVar37 + 0x38)) & 1U) ^
                                              bVar32,CONCAT15(-(-((int)((ulong)*(undefined8 *)
                                                                                (pbVar31 + 0x30) >>
                                                                       0x20) ==
                                                                 (int)((ulong)*(undefined8 *)
                                                                               (pbVar37 + 0x30) >>
                                                                      0x20)) & 1U) ^ bVar32,
                                                              CONCAT14(-(-((int)*(undefined8 *)
                                                                                 (pbVar31 + 0x30) ==
                                                                          (int)*(undefined8 *)
                                                                                (pbVar37 + 0x30)) &
                                                                        1U) ^ bVar32,
                                                                       CONCAT13(-(-((int)((ulong)*(
                                                  undefined8 *)(pbVar31 + 0x28) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)(pbVar37 + 0x28) >>
                                                       0x20)) & 1U) ^ bVar32,
                                                  CONCAT12(-(-((int)*(undefined8 *)(pbVar31 + 0x28)
                                                              == (int)*(undefined8 *)
                                                                       (pbVar37 + 0x28)) & 1U) ^
                                                           bVar32,CONCAT11(-(-((int)((ulong)*(
                                                  undefined8 *)(pbVar31 + 0x20) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)(pbVar37 + 0x20) >>
                                                       0x20)) & 1U) ^ bVar32,
                                                  -(-((int)*(undefined8 *)(pbVar31 + 0x20) ==
                                                     (int)*(undefined8 *)(pbVar37 + 0x20)) & 1U) ^
                                                  bVar32)))))));
                *(ulong *)pbVar42 =
                     CONCAT17(-(-((int)((ulong)uVar56 >> 0x20) == (int)((ulong)uVar57 >> 0x20)) & 1U
                               ) ^ bVar32,
                              CONCAT16(-(-((int)uVar56 == (int)uVar57) & 1U) ^ bVar32,
                                       CONCAT15(-(-((int)((ulong)uVar52 >> 0x20) ==
                                                   (int)((ulong)uVar54 >> 0x20)) & 1U) ^ bVar32,
                                                CONCAT14(-(-((int)uVar52 == (int)uVar54) & 1U) ^
                                                         bVar32,CONCAT13(-(-((int)((ulong)uVar61 >>
                                                                                  0x20) ==
                                                                            (int)((ulong)uVar59 >>
                                                                                 0x20)) & 1U) ^
                                                                         bVar32,CONCAT12(-(-((int)
                                                  uVar61 == (int)uVar59) & 1U) ^ bVar32,
                                                  CONCAT11(-(-((int)((ulong)uVar60 >> 0x20) ==
                                                              (int)((ulong)uVar58 >> 0x20)) & 1U) ^
                                                           bVar32,-(-((int)uVar60 == (int)uVar58) &
                                                                   1U) ^ bVar32)))))));
                pbVar37 = pbVar37 + 0x40;
                pbVar31 = pbVar31 + 0x40;
                pbVar42 = pbVar42 + 0x10;
              } while (uVar35 < uVar2);
              if (uVar1 == uVar2 * 4) goto LAB_002408fc;
            }
            iVar22 = *(int *)(param_1 + lVar43 + 4);
            iVar51 = *(int *)(param_3 + lVar43 + 4);
            param_5[lVar27] = -(*(int *)(param_1 + lVar43) == *(int *)(param_3 + lVar43)) ^ bVar32;
            param_5[lVar27 + 1] = -(iVar22 == iVar51) ^ bVar32;
            iVar22 = *(int *)(param_3 + lVar43 + 0xc);
            iVar51 = *(int *)(param_1 + lVar43 + 0xc);
            param_5[lVar27 + 2] =
                 -(*(int *)(param_1 + lVar43 + 8) == *(int *)(param_3 + lVar43 + 8)) ^ bVar32;
            param_5[lVar27 + 3] = -(iVar51 == iVar22) ^ bVar32;
            if (iVar46 + 4 < iVar8) {
              iVar22 = *(int *)(param_1 + lVar41 + 4);
              iVar51 = *(int *)(param_3 + lVar41 + 4);
              param_5[lVar28] = -(*(int *)(param_1 + lVar41) == *(int *)(param_3 + lVar41)) ^ bVar32
              ;
              param_5[lVar28 + 1] = -(iVar22 == iVar51) ^ bVar32;
              iVar22 = *(int *)(param_3 + lVar41 + 0xc);
              iVar51 = *(int *)(param_1 + lVar41 + 0xc);
              param_5[lVar28 + 2] =
                   -(*(int *)(param_1 + lVar41 + 8) == *(int *)(param_3 + lVar41 + 8)) ^ bVar32;
              param_5[lVar28 + 3] = -(iVar51 == iVar22) ^ bVar32;
              if (iVar46 + 8 < iVar8) {
                iVar22 = *(int *)(param_1 + lVar40 + 4);
                iVar51 = *(int *)(param_3 + lVar40 + 4);
                param_5[lVar30] =
                     -(*(int *)(param_1 + lVar40) == *(int *)(param_3 + lVar40)) ^ bVar32;
                param_5[lVar30 + 1] = -(iVar22 == iVar51) ^ bVar32;
                iVar22 = *(int *)(param_3 + lVar40 + 0xc);
                iVar51 = *(int *)(param_1 + lVar40 + 0xc);
                param_5[lVar30 + 2] =
                     -(*(int *)(param_1 + lVar40 + 8) == *(int *)(param_3 + lVar40 + 8)) ^ bVar32;
                param_5[lVar30 + 3] = -(iVar51 == iVar22) ^ bVar32;
              }
            }
          }
        }
LAB_002408fc:
        if (iVar7 < iVar6) {
          pbVar37 = param_1 + lVar38;
          pbVar31 = param_3 + lVar38;
          pbVar42 = param_5 + lVar33;
          if ((pbVar37 < param_5 + lVar33 + (ulong)uVar9 && pbVar42 < param_1 + lVar55 ||
               pbVar31 < param_5 + lVar33 + (ulong)uVar9 && pbVar42 < param_3 + lVar55) ||
             (uVar9 < 0x12)) {
            lVar36 = 0;
            do {
              pbVar42[lVar36] =
                   bVar34 ^ -(*(int *)(pbVar37 + lVar36 * 4) == *(int *)(pbVar31 + lVar36 * 4));
              lVar36 = lVar36 + 1;
            } while (lVar36 != (ulong)(uint)((iVar6 + -1) - iVar7) + 1);
          }
          else {
            uVar35 = -((uint)((ulong)pbVar37 >> 2) & 3) & 3;
            uVar5 = uVar9;
            if (uVar35 < uVar9) {
              uVar5 = uVar35;
            }
            iVar22 = iVar7;
            if (((uVar5 != 0) &&
                (*pbVar42 = bVar34 ^ -(*(int *)pbVar37 == *(int *)pbVar31), iVar22 = iVar62,
                uVar5 != 1)) &&
               (param_5[iVar62] =
                     bVar34 ^ -(*(int *)(param_1 + lVar49) == *(int *)(param_3 + lVar49)),
               iVar22 = iVar21, uVar5 == 3)) {
              param_5[iVar21] = bVar34 ^ -(*(int *)(param_1 + lVar50) == *(int *)(param_3 + lVar50))
              ;
              iVar22 = iVar7 + 3;
            }
            uVar35 = ((uVar9 - uVar5) - 0x10 >> 4) + 1;
            iVar51 = uVar35 * 0x10;
            if ((uVar9 - 1) - uVar5 != 0xe) {
              uVar48 = 0;
              lVar36 = lVar38 + (ulong)uVar5 * 4;
              pbVar37 = param_1 + lVar36;
              pbVar31 = param_3 + lVar36;
              pbVar42 = param_5 + lVar33 + (ulong)uVar5;
              do {
                uVar48 = uVar48 + 1;
                bVar64 = -((int)((ulong)*(undefined8 *)(pbVar37 + 0x18) >> 0x20) ==
                          (int)((ulong)*(undefined8 *)(pbVar31 + 0x18) >> 0x20));
                bVar63 = -((int)((ulong)*(undefined8 *)(pbVar37 + 0x38) >> 0x20) ==
                          (int)((ulong)*(undefined8 *)(pbVar31 + 0x38) >> 0x20));
                uVar12 = CONCAT12(-((int)((ulong)*(undefined8 *)pbVar37 >> 0x20) ==
                                   (int)((ulong)*(undefined8 *)pbVar31 >> 0x20)),
                                  (ushort)(-((int)*(undefined8 *)pbVar37 ==
                                            (int)*(undefined8 *)pbVar31) & 1)) & 0x1ffff;
                uVar15 = CONCAT14(-((int)*(undefined8 *)(pbVar37 + 0x18) ==
                                   (int)*(undefined8 *)(pbVar31 + 0x18)),
                                  (uint)(CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar37 + 0x10) >>
                                                         0x20) ==
                                                   (int)((ulong)*(undefined8 *)(pbVar31 + 0x10) >>
                                                        0x20)),
                                                  (ushort)(-((int)*(undefined8 *)(pbVar37 + 0x10) ==
                                                            (int)*(undefined8 *)(pbVar31 + 0x10)) &
                                                          1)) & 0x1ffff)) & 0x1ffffffff;
                uVar16 = CONCAT14(-((int)*(undefined8 *)(pbVar37 + 0x28) ==
                                   (int)*(undefined8 *)(pbVar31 + 0x28)),
                                  (uint)(CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar37 + 0x20) >>
                                                         0x20) ==
                                                   (int)((ulong)*(undefined8 *)(pbVar31 + 0x20) >>
                                                        0x20)),
                                                  (ushort)(-((int)*(undefined8 *)(pbVar37 + 0x20) ==
                                                            (int)*(undefined8 *)(pbVar31 + 0x20)) &
                                                          1)) & 0x1ffff)) & 0x1ffffffff;
                uVar17 = CONCAT14(-((int)*(undefined8 *)(pbVar37 + 0x38) ==
                                   (int)*(undefined8 *)(pbVar31 + 0x38)),
                                  (uint)(CONCAT12(-((int)((ulong)*(undefined8 *)(pbVar37 + 0x30) >>
                                                         0x20) ==
                                                   (int)((ulong)*(undefined8 *)(pbVar31 + 0x30) >>
                                                        0x20)),
                                                  (ushort)(-((int)*(undefined8 *)(pbVar37 + 0x30) ==
                                                            (int)*(undefined8 *)(pbVar31 + 0x30)) &
                                                          1)) & 0x1ffff)) & 0x1ffffffff;
                uVar45 = (ulong)CONCAT15(bVar64,CONCAT14((char)(uVar15 >> 0x20),
                                                         CONCAT13((char)(uVar15 >> 0x10),
                                                                  CONCAT12((char)uVar15,
                                                                           CONCAT11(-((int)((ulong)*
                                                  (undefined8 *)(pbVar37 + 8) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)(pbVar31 + 8) >> 0x20)
                                                  ),-((int)*(undefined8 *)(pbVar37 + 8) ==
                                                     (int)*(undefined8 *)(pbVar31 + 8))))))) &
                         0x1ffffff0101;
                uVar18 = (ulong)CONCAT15(bVar63,CONCAT14((char)(uVar17 >> 0x20),
                                                         CONCAT13((char)(uVar17 >> 0x10),
                                                                  CONCAT12((char)uVar17,
                                                                           CONCAT11(-((int)((ulong)*
                                                  (undefined8 *)(pbVar37 + 0x28) >> 0x20) ==
                                                  (int)((ulong)*(undefined8 *)(pbVar31 + 0x28) >>
                                                       0x20)),(char)(uVar16 >> 0x20)))))) &
                         0x1ffffff01ff;
                *(ulong *)(pbVar42 + 8) =
                     CONCAT17(-(bVar63 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar18 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar18 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar18 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar18 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar18 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar16 
                                                  >> 0x10) ^ bVar34,-(char)uVar16 ^ bVar34)))))));
                *(ulong *)pbVar42 =
                     CONCAT17(-(bVar64 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar45 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar45 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar45 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar45 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar45 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar12 
                                                  >> 0x10) ^ bVar34,-(char)uVar12 ^ bVar34)))))));
                pbVar37 = pbVar37 + 0x40;
                pbVar31 = pbVar31 + 0x40;
                pbVar42 = pbVar42 + 0x10;
              } while (uVar48 < uVar35);
              iVar22 = iVar22 + iVar51;
              if (uVar9 - uVar5 == iVar51) goto LAB_00240dc0;
            }
            iVar51 = iVar22 + 1;
            lVar36 = (long)iVar22 * 4;
            param_5[iVar22] = bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
            if (iVar51 < iVar6) {
              iVar3 = iVar22 + 2;
              lVar36 = (long)iVar51 * 4;
              param_5[iVar51] = bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36))
              ;
              if (iVar3 < iVar6) {
                iVar51 = iVar22 + 3;
                lVar36 = (long)iVar3 * 4;
                param_5[iVar3] =
                     bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                if (iVar51 < iVar6) {
                  iVar3 = iVar22 + 4;
                  lVar36 = (long)iVar51 * 4;
                  param_5[iVar51] =
                       bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                  if (iVar3 < iVar6) {
                    iVar51 = iVar22 + 5;
                    lVar36 = (long)iVar3 * 4;
                    param_5[iVar3] =
                         bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                    if (iVar51 < iVar6) {
                      iVar3 = iVar22 + 6;
                      lVar36 = (long)iVar51 * 4;
                      param_5[iVar51] =
                           bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                      if (iVar3 < iVar6) {
                        iVar51 = iVar22 + 7;
                        lVar36 = (long)iVar3 * 4;
                        param_5[iVar3] =
                             bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                        if (iVar51 < iVar6) {
                          iVar3 = iVar22 + 8;
                          lVar36 = (long)iVar51 * 4;
                          param_5[iVar51] =
                               bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36));
                          if (iVar3 < iVar6) {
                            iVar51 = iVar22 + 9;
                            lVar36 = (long)iVar3 * 4;
                            param_5[iVar3] =
                                 bVar34 ^ -(*(int *)(param_1 + lVar36) == *(int *)(param_3 + lVar36)
                                           );
                            if (iVar51 < iVar6) {
                              iVar3 = iVar22 + 10;
                              lVar36 = (long)iVar51 * 4;
                              param_5[iVar51] =
                                   bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                             *(int *)(param_3 + lVar36));
                              if (iVar3 < iVar6) {
                                iVar51 = iVar22 + 0xb;
                                lVar36 = (long)iVar3 * 4;
                                param_5[iVar3] =
                                     bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                               *(int *)(param_3 + lVar36));
                                if (iVar51 < iVar6) {
                                  iVar3 = iVar22 + 0xc;
                                  lVar36 = (long)iVar51 * 4;
                                  param_5[iVar51] =
                                       bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                                 *(int *)(param_3 + lVar36));
                                  if (iVar3 < iVar6) {
                                    iVar51 = iVar22 + 0xd;
                                    lVar36 = (long)iVar3 * 4;
                                    param_5[iVar3] =
                                         bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                                   *(int *)(param_3 + lVar36));
                                    if (iVar51 < iVar6) {
                                      iVar22 = iVar22 + 0xe;
                                      lVar36 = (long)iVar51 * 4;
                                      param_5[iVar51] =
                                           bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                                     *(int *)(param_3 + lVar36));
                                      if (iVar22 < iVar6) {
                                        lVar36 = (long)iVar22 * 4;
                                        param_5[iVar22] =
                                             bVar34 ^ -(*(int *)(param_1 + lVar36) ==
                                                       *(int *)(param_3 + lVar36));
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00240dc0:
        iVar47 = iVar47 + -1;
        param_1 = param_1 + lVar65;
        param_3 = param_3 + lVar66;
        param_5 = param_5 + param_6;
      } while (iVar47 != -1);
    }
  }
  return;
}


==================================================================

### FUNC 00240eec (5856 bytes) name=FUN_00240eec

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00240eec(float *param_1,ulong param_2,float *param_3,ulong param_4,byte *param_5,
                 long param_6,int *param_7,int *param_8)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  ulong uVar10;
  float *pfVar11;
  float *pfVar12;
  uint3 uVar13;
  uint3 uVar14;
  uint3 uVar15;
  uint3 uVar16;
  ulong uVar17;
  ulong uVar18;
  bool bVar19;
  int iVar20;
  int iVar21;
  undefined8 *puVar22;
  float *pfVar23;
  float *pfVar24;
  float *pfVar25;
  float *pfVar26;
  float *pfVar27;
  float *pfVar28;
  long lVar29;
  byte *pbVar30;
  int iVar31;
  long lVar32;
  byte bVar33;
  byte bVar34;
  uint uVar35;
  uint uVar36;
  uint uVar37;
  float *pfVar38;
  ulong uVar39;
  int iVar40;
  int iVar41;
  float fVar42;
  undefined8 uVar43;
  long lVar44;
  long lVar45;
  float fVar46;
  byte bVar48;
  undefined8 uVar47;
  undefined8 uVar49;
  undefined8 uVar50;
  uint uVar51;
  long lVar52;
  byte bVar53;
  int iVar54;
  long lVar55;
  undefined8 uVar56;
  undefined8 uVar57;
  undefined8 uVar58;
  undefined8 uVar59;
  int iVar60;
  long lVar61;
  long lVar62;
  long lVar63;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar41 = *param_8;
  iVar7 = *param_7;
  param_2 = param_2 >> 2;
  iVar40 = param_7[1];
  param_4 = param_4 >> 2;
  if (iVar41 - 2U < 2) {
    bVar19 = iVar41 != 2;
    iVar41 = 4;
    if (bVar19) {
      iVar41 = 1;
    }
    pfVar26 = param_1;
    uVar39 = param_4;
    if (iVar41 == 1) {
LAB_00241adc:
      bVar34 = 0;
      bVar33 = 0;
    }
    else {
LAB_0024103c:
      bVar34 = 0xff;
      bVar33 = 0xff;
    }
    if (iVar40 != 0) {
      iVar8 = iVar7 + -7;
      uVar1 = iVar7 - 8U >> 3;
      uVar10 = (ulong)uVar1;
      pfVar28 = param_3 + 4;
      pfVar38 = pfVar26 + 4;
      iVar3 = iVar7 + -3;
      iVar60 = (uVar1 + 1) * 8;
      if (iVar41 == 1) goto LAB_00241888;
      do {
        if (iVar41 == 4) {
          if (iVar8 < 1) goto LAB_00241ae8;
          pfVar23 = pfVar28;
          pfVar24 = pfVar38;
          pbVar30 = param_5;
          do {
            pfVar27 = pfVar24 + -4;
            pfVar25 = pfVar23 + 8;
            pfVar12 = pfVar24 + -2;
            pfVar11 = pfVar24 + 2;
            uVar43 = *(undefined8 *)pfVar24;
            pfVar24 = pfVar24 + 8;
            *(ulong *)pbVar30 =
                 CONCAT17(-((float)((ulong)*(undefined8 *)(pfVar23 + 2) >> 0x20) <=
                           (float)((ulong)*(undefined8 *)pfVar11 >> 0x20)),
                          CONCAT16(-((float)*(undefined8 *)(pfVar23 + 2) <=
                                    (float)*(undefined8 *)pfVar11),
                                   CONCAT15(-((float)((ulong)*(undefined8 *)pfVar23 >> 0x20) <=
                                             (float)((ulong)uVar43 >> 0x20)),
                                            CONCAT14(-((float)*(undefined8 *)pfVar23 <=
                                                      (float)uVar43),
                                                     CONCAT13(-((float)((ulong)*(undefined8 *)
                                                                                (pfVar23 + -2) >>
                                                                       0x20) <=
                                                               (float)((ulong)*(undefined8 *)pfVar12
                                                                      >> 0x20)),
                                                              CONCAT12(-((float)*(undefined8 *)
                                                                                 (pfVar23 + -2) <=
                                                                        (float)*(undefined8 *)
                                                                                pfVar12),
                                                                       CONCAT11(-((float)((ulong)*(
                                                  undefined8 *)(pfVar23 + -4) >> 0x20) <=
                                                  (float)((ulong)*(undefined8 *)pfVar27 >> 0x20)),
                                                  -((float)*(undefined8 *)(pfVar23 + -4) <=
                                                   (float)*(undefined8 *)pfVar27))))))));
            pfVar23 = pfVar25;
            pbVar30 = pbVar30 + 8;
            iVar20 = iVar60;
          } while (pfVar25 != param_3 + uVar10 * 8 + 0xc);
        }
        else if (iVar41 == 0) {
          if (iVar8 < 1) {
            iVar20 = 0;
          }
          else {
            pfVar23 = pfVar28;
            pfVar24 = pfVar38;
            pbVar30 = param_5;
            do {
              pfVar27 = pfVar24 + -4;
              pfVar25 = pfVar23 + 8;
              pfVar11 = pfVar24 + -2;
              pfVar12 = pfVar24 + 2;
              uVar43 = *(undefined8 *)pfVar24;
              pfVar24 = pfVar24 + 8;
              *(ulong *)pbVar30 =
                   CONCAT17(-((float)((ulong)*(undefined8 *)(pfVar23 + 2) >> 0x20) ==
                             (float)((ulong)*(undefined8 *)pfVar12 >> 0x20)),
                            CONCAT16(-((float)*(undefined8 *)(pfVar23 + 2) ==
                                      (float)*(undefined8 *)pfVar12),
                                     CONCAT15(-((float)((ulong)*(undefined8 *)pfVar23 >> 0x20) ==
                                               (float)((ulong)uVar43 >> 0x20)),
                                              CONCAT14(-((float)*(undefined8 *)pfVar23 ==
                                                        (float)uVar43),
                                                       CONCAT13(-((float)((ulong)*(undefined8 *)
                                                                                  (pfVar23 + -2) >>
                                                                         0x20) ==
                                                                 (float)((ulong)*(undefined8 *)
                                                                                 pfVar11 >> 0x20)),
                                                                CONCAT12(-((float)*(undefined8 *)
                                                                                   (pfVar23 + -2) ==
                                                                          (float)*(undefined8 *)
                                                                                  pfVar11),
                                                                         CONCAT11(-((float)((ulong)*
                                                  (undefined8 *)(pfVar23 + -4) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)pfVar27 >> 0x20)),
                                                  -((float)*(undefined8 *)(pfVar23 + -4) ==
                                                   (float)*(undefined8 *)pfVar27))))))));
              pfVar23 = pfVar25;
              pbVar30 = pbVar30 + 8;
              iVar20 = iVar60;
            } while (pfVar25 != param_3 + uVar10 * 8 + 0xc);
          }
        }
        else {
          iVar20 = 0;
          if ((iVar41 == 5) && (0 < iVar8)) {
            pfVar24 = pfVar28;
            pfVar23 = pfVar38;
            pbVar30 = param_5;
            do {
              pfVar25 = pfVar24 + 8;
              *(ulong *)pbVar30 =
                   CONCAT17(~-((float)((ulong)*(undefined8 *)(pfVar24 + 2) >> 0x20) ==
                              (float)((ulong)*(undefined8 *)(pfVar23 + 2) >> 0x20)),
                            CONCAT16(~-((float)*(undefined8 *)(pfVar24 + 2) ==
                                       (float)*(undefined8 *)(pfVar23 + 2)),
                                     CONCAT15(~-((float)((ulong)*(undefined8 *)pfVar24 >> 0x20) ==
                                                (float)((ulong)*(undefined8 *)pfVar23 >> 0x20)),
                                              CONCAT14(~-((float)*(undefined8 *)pfVar24 ==
                                                         (float)*(undefined8 *)pfVar23),
                                                       CONCAT13(~-((float)((ulong)*(undefined8 *)
                                                                                   (pfVar24 + -2) >>
                                                                          0x20) ==
                                                                  (float)((ulong)*(undefined8 *)
                                                                                  (pfVar23 + -2) >>
                                                                         0x20)),
                                                                CONCAT12(~-((float)*(undefined8 *)
                                                                                    (pfVar24 + -2)
                                                                           == (float)*(undefined8 *)
                                                                                      (pfVar23 + -2)
                                                                           ),CONCAT11(~-((float)((
                                                  ulong)*(undefined8 *)(pfVar24 + -4) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)(pfVar23 + -4) >>
                                                         0x20)),
                                                  ~-((float)*(undefined8 *)(pfVar24 + -4) ==
                                                    (float)*(undefined8 *)(pfVar23 + -4)))))))));
              pfVar24 = pfVar25;
              pfVar23 = pfVar23 + 8;
              pbVar30 = pbVar30 + 8;
              iVar20 = iVar60;
            } while (pfVar25 != param_3 + uVar10 * 8 + 0xc);
          }
        }
LAB_0024113c:
        if (iVar20 < iVar3) {
          lVar62 = (long)iVar20;
          pfVar24 = (float *)(param_5 + lVar62);
          uVar35 = (iVar7 + -4) - iVar20;
          uVar2 = uVar35 >> 2;
          pfVar23 = param_3 + lVar62;
          uVar1 = uVar2 + 1;
          lVar61 = lVar62 + (ulong)uVar1 * 4;
          pfVar25 = pfVar26 + lVar62;
          if ((pfVar24 < param_3 + lVar61 && pfVar23 < param_5 + lVar61 ||
               pfVar24 < pfVar26 + lVar61 && pfVar25 < param_5 + lVar61) || (uVar1 < 4)) {
            do {
              pfVar11 = pfVar24 + 1;
              fVar42 = *pfVar23;
              fVar46 = *pfVar25;
              *(byte *)((long)pfVar24 + 1) = -(pfVar25[1] < pfVar23[1]) ^ bVar33;
              *(byte *)pfVar24 = -(fVar46 < fVar42) ^ bVar33;
              fVar42 = pfVar23[2];
              fVar46 = pfVar25[2];
              *(byte *)((long)pfVar24 + 3) = -(pfVar25[3] < pfVar23[3]) ^ bVar33;
              *(byte *)((long)pfVar24 + 2) = -(fVar46 < fVar42) ^ bVar33;
              pfVar25 = pfVar25 + 4;
              pfVar24 = pfVar11;
              pfVar23 = pfVar23 + 4;
            } while (pfVar11 != (float *)(param_5 + lVar62 + 4 + (ulong)uVar2 * 4));
          }
          else {
            uVar37 = (uVar2 - 3 >> 2) + 1;
            iVar21 = iVar20;
            if (0xb < uVar35) {
              uVar35 = 0;
              do {
                uVar57 = *(undefined8 *)(pfVar25 + 2);
                uVar56 = *(undefined8 *)pfVar25;
                uVar50 = *(undefined8 *)(pfVar23 + 2);
                uVar49 = *(undefined8 *)pfVar23;
                uVar35 = uVar35 + 1;
                uVar59 = *(undefined8 *)(pfVar25 + 6);
                uVar58 = *(undefined8 *)(pfVar25 + 4);
                uVar47 = *(undefined8 *)(pfVar23 + 6);
                uVar43 = *(undefined8 *)(pfVar23 + 4);
                *(ulong *)(pfVar24 + 2) =
                     CONCAT17(-(-((float)((ulong)*(undefined8 *)(pfVar25 + 0xe) >> 0x20) <
                                 (float)((ulong)*(undefined8 *)(pfVar23 + 0xe) >> 0x20)) & 1U) ^
                              bVar33,CONCAT16(-(-((float)*(undefined8 *)(pfVar25 + 0xe) <
                                                 (float)*(undefined8 *)(pfVar23 + 0xe)) & 1U) ^
                                              bVar33,CONCAT15(-(-((float)((ulong)*(undefined8 *)
                                                                                  (pfVar25 + 0xc) >>
                                                                         0x20) <
                                                                 (float)((ulong)*(undefined8 *)
                                                                                 (pfVar23 + 0xc) >>
                                                                        0x20)) & 1U) ^ bVar33,
                                                              CONCAT14(-(-((float)*(undefined8 *)
                                                                                   (pfVar25 + 0xc) <
                                                                          (float)*(undefined8 *)
                                                                                  (pfVar23 + 0xc)) &
                                                                        1U) ^ bVar33,
                                                                       CONCAT13(-(-((float)((ulong)*
                                                  (undefined8 *)(pfVar25 + 10) >> 0x20) <
                                                  (float)((ulong)*(undefined8 *)(pfVar23 + 10) >>
                                                         0x20)) & 1U) ^ bVar33,
                                                  CONCAT12(-(-((float)*(undefined8 *)(pfVar25 + 10)
                                                              < (float)*(undefined8 *)(pfVar23 + 10)
                                                              ) & 1U) ^ bVar33,
                                                           CONCAT11(-(-((float)((ulong)*(undefined8
                                                                                         *)(pfVar25 
                                                  + 8) >> 0x20) <
                                                  (float)((ulong)*(undefined8 *)(pfVar23 + 8) >>
                                                         0x20)) & 1U) ^ bVar33,
                                                  -(-((float)*(undefined8 *)(pfVar25 + 8) <
                                                     (float)*(undefined8 *)(pfVar23 + 8)) & 1U) ^
                                                  bVar33)))))));
                *(ulong *)pfVar24 =
                     CONCAT17(-(-((float)((ulong)uVar59 >> 0x20) < (float)((ulong)uVar47 >> 0x20)) &
                               1U) ^ bVar33,
                              CONCAT16(-(-((float)uVar59 < (float)uVar47) & 1U) ^ bVar33,
                                       CONCAT15(-(-((float)((ulong)uVar58 >> 0x20) <
                                                   (float)((ulong)uVar43 >> 0x20)) & 1U) ^ bVar33,
                                                CONCAT14(-(-((float)uVar58 < (float)uVar43) & 1U) ^
                                                         bVar33,CONCAT13(-(-((float)((ulong)uVar57
                                                                                    >> 0x20) <
                                                                            (float)((ulong)uVar50 >>
                                                                                   0x20)) & 1U) ^
                                                                         bVar33,CONCAT12(-(-((float)
                                                  uVar57 < (float)uVar50) & 1U) ^ bVar33,
                                                  CONCAT11(-(-((float)((ulong)uVar56 >> 0x20) <
                                                              (float)((ulong)uVar49 >> 0x20)) & 1U)
                                                           ^ bVar33,-(-((float)uVar56 <
                                                                       (float)uVar49) & 1U) ^ bVar33
                                                          )))))));
                pfVar25 = pfVar25 + 0x10;
                pfVar24 = pfVar24 + 4;
                pfVar23 = pfVar23 + 0x10;
              } while (uVar35 < uVar37);
              iVar21 = iVar20 + uVar37 * 0x10;
              if (uVar1 == uVar37 * 4) goto LAB_00241404;
            }
            iVar4 = iVar21 + 4;
            fVar46 = pfVar26[(long)iVar21 + 1];
            fVar42 = param_3[(long)iVar21 + 1];
            param_5[iVar21] = -(pfVar26[iVar21] < param_3[iVar21]) ^ bVar33;
            param_5[(long)iVar21 + 1] = -(fVar46 < fVar42) ^ bVar33;
            fVar42 = param_3[(long)iVar21 + 2];
            fVar46 = pfVar26[(long)iVar21 + 2];
            param_5[(long)iVar21 + 3] =
                 -(pfVar26[(long)iVar21 + 3] < param_3[(long)iVar21 + 3]) ^ bVar33;
            param_5[(long)iVar21 + 2] = -(fVar46 < fVar42) ^ bVar33;
            if (iVar4 < iVar3) {
              iVar21 = iVar21 + 8;
              fVar46 = pfVar26[(long)iVar4 + 1];
              fVar42 = param_3[(long)iVar4 + 1];
              param_5[iVar4] = -(pfVar26[iVar4] < param_3[iVar4]) ^ bVar33;
              param_5[(long)iVar4 + 1] = -(fVar46 < fVar42) ^ bVar33;
              fVar42 = param_3[(long)iVar4 + 2];
              fVar46 = pfVar26[(long)iVar4 + 2];
              param_5[(long)iVar4 + 3] =
                   -(pfVar26[(long)iVar4 + 3] < param_3[(long)iVar4 + 3]) ^ bVar33;
              param_5[(long)iVar4 + 2] = -(fVar46 < fVar42) ^ bVar33;
              if (iVar21 < iVar3) {
                fVar46 = pfVar26[(long)iVar21 + 1];
                fVar42 = param_3[(long)iVar21 + 1];
                param_5[iVar21] = -(pfVar26[iVar21] < param_3[iVar21]) ^ bVar33;
                param_5[(long)iVar21 + 1] = -(fVar46 < fVar42) ^ bVar33;
                fVar42 = param_3[(long)iVar21 + 2];
                fVar46 = pfVar26[(long)iVar21 + 2];
                param_5[(long)iVar21 + 3] =
                     -(pfVar26[(long)iVar21 + 3] < param_3[(long)iVar21 + 3]) ^ bVar33;
                param_5[(long)iVar21 + 2] = -(fVar46 < fVar42) ^ bVar33;
              }
            }
          }
LAB_00241404:
          iVar20 = iVar20 + 4 + uVar2 * 4;
        }
        if (iVar20 < iVar7) {
          lVar62 = (long)iVar20;
          uVar1 = iVar7 - iVar20;
          lVar61 = lVar62 + (ulong)uVar1;
          pfVar24 = (float *)(param_5 + lVar62);
          pfVar23 = param_3 + lVar62;
          if ((pfVar24 < param_3 + lVar61 && pfVar23 < param_5 + lVar61 ||
               pfVar24 < pfVar26 + lVar61 && pfVar26 + lVar62 < param_5 + lVar61) || (uVar1 < 0x12))
          {
            lVar61 = 0;
            do {
              *(byte *)((long)pfVar24 + lVar61) =
                   bVar34 ^ -((pfVar26 + lVar62)[lVar61] < pfVar23[lVar61]);
              lVar61 = lVar61 + 1;
            } while (lVar61 != (ulong)(uint)((iVar7 + -1) - iVar20) + 1);
          }
          else {
            uVar2 = -((uint)((ulong)pfVar23 >> 2) & 3) & 3;
            if (uVar1 < uVar2) {
              uVar2 = uVar1;
            }
            iVar21 = iVar20;
            if (uVar2 != 0) {
              iVar4 = iVar20 + 1;
              *(byte *)pfVar24 = bVar34 ^ -(pfVar26[lVar62] < param_3[lVar62]);
              iVar21 = iVar4;
              if (uVar2 != 1) {
                iVar21 = iVar20 + 2;
                param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                if (uVar2 == 3) {
                  param_5[iVar21] = bVar34 ^ -(pfVar26[iVar21] < param_3[iVar21]);
                  iVar21 = iVar20 + 3;
                }
              }
            }
            uVar35 = ((uVar1 - uVar2) - 0x10 >> 4) + 1;
            iVar20 = uVar35 * 0x10;
            if (uVar1 - 0xf != uVar2) {
              uVar37 = 0;
              pfVar24 = param_3 + (ulong)uVar2 + lVar62;
              pbVar30 = param_5 + (ulong)uVar2 + lVar62;
              pfVar23 = pfVar26 + (ulong)uVar2 + lVar62;
              do {
                uVar37 = uVar37 + 1;
                bVar53 = -((float)((ulong)*(undefined8 *)(pfVar23 + 6) >> 0x20) <
                          (float)((ulong)*(undefined8 *)(pfVar24 + 6) >> 0x20));
                bVar48 = -((float)((ulong)*(undefined8 *)(pfVar23 + 0xe) >> 0x20) <
                          (float)((ulong)*(undefined8 *)(pfVar24 + 0xe) >> 0x20));
                uVar13 = CONCAT12(-((float)((ulong)*(undefined8 *)pfVar23 >> 0x20) <
                                   (float)((ulong)*(undefined8 *)pfVar24 >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)pfVar23 <
                                            (float)*(undefined8 *)pfVar24) & 1)) & 0x1ffff;
                uVar14 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar23 + 4) >> 0x20) <
                                   (float)((ulong)*(undefined8 *)(pfVar24 + 4) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar23 + 4) <
                                            (float)*(undefined8 *)(pfVar24 + 4)) & 1)) & 0x1ffff;
                uVar15 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar23 + 8) >> 0x20) <
                                   (float)((ulong)*(undefined8 *)(pfVar24 + 8) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar23 + 8) <
                                            (float)*(undefined8 *)(pfVar24 + 8)) & 1)) & 0x1ffff;
                uVar16 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar23 + 0xc) >> 0x20) <
                                   (float)((ulong)*(undefined8 *)(pfVar24 + 0xc) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar23 + 0xc) <
                                            (float)*(undefined8 *)(pfVar24 + 0xc)) & 1)) & 0x1ffff;
                uVar17 = (ulong)CONCAT15(bVar53,CONCAT14(-((float)*(undefined8 *)(pfVar23 + 6) <
                                                          (float)*(undefined8 *)(pfVar24 + 6)),
                                                         CONCAT13((char)(uVar14 >> 0x10),
                                                                  CONCAT12((char)uVar14,
                                                                           CONCAT11(-((float)((ulong
                                                  )*(undefined8 *)(pfVar23 + 2) >> 0x20) <
                                                  (float)((ulong)*(undefined8 *)(pfVar24 + 2) >>
                                                         0x20)),
                                                  -((float)*(undefined8 *)(pfVar23 + 2) <
                                                   (float)*(undefined8 *)(pfVar24 + 2))))))) &
                         0x101ffff0101;
                uVar18 = (ulong)CONCAT15(bVar48,CONCAT14(-((float)*(undefined8 *)(pfVar23 + 0xe) <
                                                          (float)*(undefined8 *)(pfVar24 + 0xe)),
                                                         CONCAT13((char)(uVar16 >> 0x10),
                                                                  CONCAT12((char)uVar16,
                                                                           CONCAT11(-((float)((ulong
                                                  )*(undefined8 *)(pfVar23 + 10) >> 0x20) <
                                                  (float)((ulong)*(undefined8 *)(pfVar24 + 10) >>
                                                         0x20)),
                                                  -((float)*(undefined8 *)(pfVar23 + 10) <
                                                   (float)*(undefined8 *)(pfVar24 + 10))))))) &
                         0x101ffff0101;
                *(ulong *)(pbVar30 + 8) =
                     CONCAT17(-(bVar48 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar18 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar18 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar18 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar18 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar18 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar15 
                                                  >> 0x10) ^ bVar34,-(char)uVar15 ^ bVar34)))))));
                *(ulong *)pbVar30 =
                     CONCAT17(-(bVar53 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar17 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar17 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar17 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar17 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar17 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar13 
                                                  >> 0x10) ^ bVar34,-(char)uVar13 ^ bVar34)))))));
                pfVar24 = pfVar24 + 0x10;
                pbVar30 = pbVar30 + 0x10;
                pfVar23 = pfVar23 + 0x10;
              } while (uVar37 < uVar35);
              iVar21 = iVar21 + iVar20;
              if (iVar20 == uVar1 - uVar2) goto LAB_00241864;
            }
            iVar20 = iVar21 + 1;
            param_5[iVar21] = bVar34 ^ -(pfVar26[iVar21] < param_3[iVar21]);
            if (iVar20 < iVar7) {
              iVar4 = iVar21 + 2;
              param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
              if (iVar4 < iVar7) {
                iVar20 = iVar21 + 3;
                param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                if (iVar20 < iVar7) {
                  iVar4 = iVar21 + 4;
                  param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                  if (iVar4 < iVar7) {
                    iVar20 = iVar21 + 5;
                    param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                    if (iVar20 < iVar7) {
                      iVar4 = iVar21 + 6;
                      param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                      if (iVar4 < iVar7) {
                        iVar20 = iVar21 + 7;
                        param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                        if (iVar20 < iVar7) {
                          iVar4 = iVar21 + 8;
                          param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                          if (iVar4 < iVar7) {
                            iVar20 = iVar21 + 9;
                            param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                            if (iVar20 < iVar7) {
                              iVar4 = iVar21 + 10;
                              param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                              if (iVar4 < iVar7) {
                                iVar20 = iVar21 + 0xb;
                                param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                                if (iVar20 < iVar7) {
                                  iVar4 = iVar21 + 0xc;
                                  param_5[iVar20] = bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                                  if (iVar4 < iVar7) {
                                    iVar20 = iVar21 + 0xd;
                                    param_5[iVar4] = bVar34 ^ -(pfVar26[iVar4] < param_3[iVar4]);
                                    if (iVar20 < iVar7) {
                                      iVar21 = iVar21 + 0xe;
                                      param_5[iVar20] =
                                           bVar34 ^ -(pfVar26[iVar20] < param_3[iVar20]);
                                      if (iVar21 < iVar7) {
                                        param_5[iVar21] =
                                             bVar34 ^ -(pfVar26[iVar21] < param_3[iVar21]);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00241864:
        iVar40 = iVar40 + -1;
        param_5 = param_5 + param_6;
        pfVar28 = pfVar28 + uVar39;
        pfVar38 = pfVar38 + param_2;
        if (iVar40 == 0) {
          return;
        }
        pfVar26 = pfVar38 + -4;
        param_3 = pfVar28 + -4;
      } while (iVar41 != 1);
LAB_00241888:
      if (iVar8 < 1) {
LAB_00241ae8:
        iVar20 = 0;
      }
      else {
        pfVar23 = pfVar28;
        pfVar24 = pfVar38;
        pbVar30 = param_5;
        do {
          pfVar27 = pfVar24 + -4;
          pfVar25 = pfVar23 + 8;
          pfVar11 = pfVar24 + -2;
          pfVar12 = pfVar24 + 2;
          uVar43 = *(undefined8 *)pfVar24;
          pfVar24 = pfVar24 + 8;
          *(ulong *)pbVar30 =
               CONCAT17(-((float)((ulong)*(undefined8 *)pfVar12 >> 0x20) <
                         (float)((ulong)*(undefined8 *)(pfVar23 + 2) >> 0x20)),
                        CONCAT16(-((float)*(undefined8 *)pfVar12 <
                                  (float)*(undefined8 *)(pfVar23 + 2)),
                                 CONCAT15(-((float)((ulong)uVar43 >> 0x20) <
                                           (float)((ulong)*(undefined8 *)pfVar23 >> 0x20)),
                                          CONCAT14(-((float)uVar43 < (float)*(undefined8 *)pfVar23),
                                                   CONCAT13(-((float)((ulong)*(undefined8 *)pfVar11
                                                                     >> 0x20) <
                                                             (float)((ulong)*(undefined8 *)
                                                                             (pfVar23 + -2) >> 0x20)
                                                             ),CONCAT12(-((float)*(undefined8 *)
                                                                                  pfVar11 <
                                                                         (float)*(undefined8 *)
                                                                                 (pfVar23 + -2)),
                                                                        CONCAT11(-((float)((ulong)*(
                                                  undefined8 *)pfVar27 >> 0x20) <
                                                  (float)((ulong)*(undefined8 *)(pfVar23 + -4) >>
                                                         0x20)),
                                                  -((float)*(undefined8 *)pfVar27 <
                                                   (float)*(undefined8 *)(pfVar23 + -4)))))))));
          pfVar23 = pfVar25;
          pbVar30 = pbVar30 + 8;
          iVar20 = iVar60;
        } while (pfVar25 != param_3 + uVar10 * 8 + 0xc);
      }
      goto LAB_0024113c;
    }
  }
  else {
    if (iVar41 == 5 || iVar41 == 0) {
      if (iVar41 == 4 || iVar41 == 1) goto LAB_00241034;
    }
    else {
      if (iVar41 == 4 || iVar41 == 1) {
LAB_00241034:
        pfVar26 = param_3;
        param_3 = param_1;
        uVar39 = param_2;
        param_2 = param_4;
        if (iVar41 == 1) goto LAB_00241adc;
        goto LAB_0024103c;
      }
      local_10 = 0;
      local_8 = 0;
      puVar22 = (undefined8 *)cv::String::allocate((String *)&local_10,0x44);
      uVar59 = _LAB_00460708;
      uVar58 = DAT_00460700;
      uVar57 = DAT_004606f8;
      uVar56 = DAT_004606f0;
      uVar50 = DAT_004606e8;
      uVar49 = DAT_004606e0;
      uVar47 = DAT_004606d8;
      uVar43 = DAT_004606d0;
      *(undefined4 *)(puVar22 + 8) = DAT_00460710;
      *puVar22 = uVar43;
      puVar22[1] = uVar47;
      puVar22[2] = uVar49;
      puVar22[3] = uVar50;
      puVar22[4] = uVar56;
      puVar22[5] = uVar57;
      puVar22[6] = uVar58;
      puVar22[7] = uVar59;
      cv::error(-0xd7,(String *)&local_10,"cv::Cmp_SIMD<float>::Cmp_SIMD(int)",
                "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x10da);
      cv::String::deallocate((String *)&local_10);
    }
    if (iVar41 == 5) {
      bVar34 = 0xff;
      bVar33 = 0xff;
    }
    else {
      if (iVar41 != 0) {
        return;
      }
      bVar34 = 0;
      bVar33 = 0;
    }
    iVar41 = iVar40 + -1;
    if (iVar40 != 0) {
      uVar37 = iVar7 - 4;
      iVar8 = iVar7 + -3;
      uVar35 = uVar37 >> 2;
      uVar1 = uVar35 + 1;
      uVar2 = (uVar35 - 3 >> 2) + 1;
      iVar40 = uVar2 * 0x10;
      lVar61 = NEON_shl(param_2,2);
      if (uVar37 < 0xc) {
        iVar40 = 0;
      }
      lVar62 = NEON_shl(param_4,2);
      iVar60 = uVar1 * 4;
      iVar3 = iVar40 + 4;
      if (iVar8 < 1) {
        iVar60 = 0;
      }
      lVar52 = NEON_shl((ulong)uVar1,4);
      lVar63 = NEON_shl((ulong)uVar1,2);
      iVar20 = iVar40 + 8;
      iVar21 = iVar60 + 1;
      iVar4 = iVar60 + 2;
      uVar9 = iVar7 - iVar60;
      lVar32 = (long)iVar60;
      lVar44 = NEON_shl((long)iVar21,2);
      lVar55 = NEON_shl(lVar32 + (ulong)uVar9,2);
      lVar45 = NEON_shl((long)iVar4,2);
      do {
        if (0 < iVar8) {
          if ((param_1 < param_5 + lVar63 && param_5 < (byte *)((long)param_1 + lVar52) ||
               param_3 < param_5 + lVar63 && param_5 < (byte *)((long)param_3 + lVar52)) ||
             (uVar1 < 4)) {
            pfVar26 = param_3 + 1;
            pbVar30 = param_5;
            pfVar28 = param_1;
            do {
              pfVar38 = pfVar26 + 4;
              fVar42 = *pfVar28;
              fVar46 = pfVar26[-1];
              pbVar30[1] = -(pfVar28[1] == *pfVar26) ^ bVar33;
              *pbVar30 = -(fVar42 == fVar46) ^ bVar33;
              fVar46 = pfVar26[1];
              fVar42 = pfVar28[2];
              pbVar30[3] = -(pfVar28[3] == pfVar26[2]) ^ bVar33;
              pbVar30[2] = -(fVar42 == fVar46) ^ bVar33;
              pfVar26 = pfVar38;
              pbVar30 = pbVar30 + 4;
              pfVar28 = pfVar28 + 4;
            } while (pfVar38 != param_3 + (ulong)uVar35 * 4 + 5);
          }
          else {
            if (0xb < uVar37) {
              uVar36 = 0;
              pfVar26 = param_3;
              pfVar28 = param_1;
              pbVar30 = param_5;
              do {
                uVar50 = *(undefined8 *)(pfVar28 + 2);
                uVar49 = *(undefined8 *)pfVar28;
                uVar59 = *(undefined8 *)(pfVar26 + 2);
                uVar58 = *(undefined8 *)pfVar26;
                uVar36 = uVar36 + 1;
                uVar47 = *(undefined8 *)(pfVar28 + 6);
                uVar43 = *(undefined8 *)(pfVar28 + 4);
                uVar57 = *(undefined8 *)(pfVar26 + 6);
                uVar56 = *(undefined8 *)(pfVar26 + 4);
                *(ulong *)(pbVar30 + 8) =
                     CONCAT17(-(-((float)((ulong)*(undefined8 *)(pfVar28 + 0xe) >> 0x20) ==
                                 (float)((ulong)*(undefined8 *)(pfVar26 + 0xe) >> 0x20)) & 1U) ^
                              bVar33,CONCAT16(-(-((float)*(undefined8 *)(pfVar28 + 0xe) ==
                                                 (float)*(undefined8 *)(pfVar26 + 0xe)) & 1U) ^
                                              bVar33,CONCAT15(-(-((float)((ulong)*(undefined8 *)
                                                                                  (pfVar28 + 0xc) >>
                                                                         0x20) ==
                                                                 (float)((ulong)*(undefined8 *)
                                                                                 (pfVar26 + 0xc) >>
                                                                        0x20)) & 1U) ^ bVar33,
                                                              CONCAT14(-(-((float)*(undefined8 *)
                                                                                   (pfVar28 + 0xc)
                                                                          == (float)*(undefined8 *)
                                                                                     (pfVar26 + 0xc)
                                                                          ) & 1U) ^ bVar33,
                                                                       CONCAT13(-(-((float)((ulong)*
                                                  (undefined8 *)(pfVar28 + 10) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)(pfVar26 + 10) >>
                                                         0x20)) & 1U) ^ bVar33,
                                                  CONCAT12(-(-((float)*(undefined8 *)(pfVar28 + 10)
                                                              == (float)*(undefined8 *)
                                                                         (pfVar26 + 10)) & 1U) ^
                                                           bVar33,CONCAT11(-(-((float)((ulong)*(
                                                  undefined8 *)(pfVar28 + 8) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)(pfVar26 + 8) >>
                                                         0x20)) & 1U) ^ bVar33,
                                                  -(-((float)*(undefined8 *)(pfVar28 + 8) ==
                                                     (float)*(undefined8 *)(pfVar26 + 8)) & 1U) ^
                                                  bVar33)))))));
                *(ulong *)pbVar30 =
                     CONCAT17(-(-((float)((ulong)uVar47 >> 0x20) == (float)((ulong)uVar57 >> 0x20))
                               & 1U) ^ bVar33,
                              CONCAT16(-(-((float)uVar47 == (float)uVar57) & 1U) ^ bVar33,
                                       CONCAT15(-(-((float)((ulong)uVar43 >> 0x20) ==
                                                   (float)((ulong)uVar56 >> 0x20)) & 1U) ^ bVar33,
                                                CONCAT14(-(-((float)uVar43 == (float)uVar56) & 1U) ^
                                                         bVar33,CONCAT13(-(-((float)((ulong)uVar50
                                                                                    >> 0x20) ==
                                                                            (float)((ulong)uVar59 >>
                                                                                   0x20)) & 1U) ^
                                                                         bVar33,CONCAT12(-(-((float)
                                                  uVar50 == (float)uVar59) & 1U) ^ bVar33,
                                                  CONCAT11(-(-((float)((ulong)uVar49 >> 0x20) ==
                                                              (float)((ulong)uVar58 >> 0x20)) & 1U)
                                                           ^ bVar33,-(-((float)uVar49 ==
                                                                       (float)uVar58) & 1U) ^ bVar33
                                                          )))))));
                pfVar26 = pfVar26 + 0x10;
                pfVar28 = pfVar28 + 0x10;
                pbVar30 = pbVar30 + 0x10;
              } while (uVar36 < uVar2);
              if (uVar1 == uVar2 * 4) goto LAB_00242000;
            }
            fVar46 = param_1[(long)iVar40 + 1];
            fVar42 = param_3[(long)iVar40 + 1];
            param_5[iVar40] = -(param_1[iVar40] == param_3[iVar40]) ^ bVar33;
            param_5[(long)iVar40 + 1] = -(fVar46 == fVar42) ^ bVar33;
            fVar46 = param_1[(long)iVar40 + 3];
            fVar42 = param_3[(long)iVar40 + 3];
            param_5[(long)iVar40 + 2] =
                 -(param_1[(long)iVar40 + 2] == param_3[(long)iVar40 + 2]) ^ bVar33;
            param_5[(long)iVar40 + 3] = -(fVar46 == fVar42) ^ bVar33;
            if (iVar3 < iVar8) {
              fVar46 = param_1[(long)iVar3 + 1];
              fVar42 = param_3[(long)iVar3 + 1];
              param_5[iVar3] = -(param_1[iVar3] == param_3[iVar3]) ^ bVar33;
              param_5[(long)iVar3 + 1] = -(fVar46 == fVar42) ^ bVar33;
              fVar46 = param_1[(long)iVar3 + 3];
              fVar42 = param_3[(long)iVar3 + 3];
              param_5[(long)iVar3 + 2] =
                   -(param_1[(long)iVar3 + 2] == param_3[(long)iVar3 + 2]) ^ bVar33;
              param_5[(long)iVar3 + 3] = -(fVar46 == fVar42) ^ bVar33;
              if (iVar20 < iVar8) {
                fVar46 = param_1[(long)iVar20 + 1];
                fVar42 = param_3[(long)iVar20 + 1];
                param_5[iVar20] = -(param_1[iVar20] == param_3[iVar20]) ^ bVar33;
                param_5[(long)iVar20 + 1] = -(fVar46 == fVar42) ^ bVar33;
                fVar46 = param_1[(long)iVar20 + 3];
                fVar42 = param_3[(long)iVar20 + 3];
                param_5[(long)iVar20 + 2] =
                     -(param_1[(long)iVar20 + 2] == param_3[(long)iVar20 + 2]) ^ bVar33;
                param_5[(long)iVar20 + 3] = -(fVar46 == fVar42) ^ bVar33;
              }
            }
          }
        }
LAB_00242000:
        if (iVar60 < iVar7) {
          pfVar26 = param_1 + lVar32;
          pbVar30 = param_5 + lVar32;
          pfVar28 = param_3 + lVar32;
          if ((pfVar26 < param_5 + lVar32 + (ulong)uVar9 &&
               pbVar30 < (byte *)((long)param_1 + lVar55) ||
               pfVar28 < param_5 + lVar32 + (ulong)uVar9 &&
               pbVar30 < (byte *)((long)param_3 + lVar55)) || (uVar9 < 0x12)) {
            lVar29 = 0;
            do {
              pbVar30[lVar29] = bVar34 ^ -(pfVar26[lVar29] == pfVar28[lVar29]);
              lVar29 = lVar29 + 1;
            } while (lVar29 != (ulong)(uint)((iVar7 + -1) - iVar60) + 1);
          }
          else {
            uVar36 = -((uint)((ulong)pfVar26 >> 2) & 3) & 3;
            uVar6 = uVar9;
            if (uVar36 < uVar9) {
              uVar6 = uVar36;
            }
            iVar31 = iVar60;
            if (((uVar6 != 0) &&
                (*pbVar30 = bVar34 ^ -(*pfVar26 == *pfVar28), iVar31 = iVar21, uVar6 != 1)) &&
               (param_5[iVar21] =
                     bVar34 ^ -(*(float *)((long)param_1 + lVar44) ==
                               *(float *)((long)param_3 + lVar44)), iVar31 = iVar4, uVar6 == 3)) {
              param_5[iVar4] =
                   bVar34 ^ -(*(float *)((long)param_1 + lVar45) ==
                             *(float *)((long)param_3 + lVar45));
              iVar31 = iVar60 + 3;
            }
            uVar36 = ((uVar9 - uVar6) - 0x10 >> 4) + 1;
            iVar54 = uVar36 * 0x10;
            if ((uVar9 - 1) - uVar6 != 0xe) {
              uVar51 = 0;
              pfVar26 = param_1 + (ulong)uVar6 + lVar32;
              pfVar28 = param_3 + (ulong)uVar6 + lVar32;
              pbVar30 = param_5 + lVar32 + (ulong)uVar6;
              do {
                uVar51 = uVar51 + 1;
                bVar53 = -((float)((ulong)*(undefined8 *)(pfVar26 + 6) >> 0x20) ==
                          (float)((ulong)*(undefined8 *)(pfVar28 + 6) >> 0x20));
                bVar48 = -((float)((ulong)*(undefined8 *)(pfVar26 + 0xe) >> 0x20) ==
                          (float)((ulong)*(undefined8 *)(pfVar28 + 0xe) >> 0x20));
                uVar13 = CONCAT12(-((float)((ulong)*(undefined8 *)pfVar26 >> 0x20) ==
                                   (float)((ulong)*(undefined8 *)pfVar28 >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)pfVar26 ==
                                            (float)*(undefined8 *)pfVar28) & 1)) & 0x1ffff;
                uVar14 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar26 + 4) >> 0x20) ==
                                   (float)((ulong)*(undefined8 *)(pfVar28 + 4) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar26 + 4) ==
                                            (float)*(undefined8 *)(pfVar28 + 4)) & 1)) & 0x1ffff;
                uVar15 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar26 + 8) >> 0x20) ==
                                   (float)((ulong)*(undefined8 *)(pfVar28 + 8) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar26 + 8) ==
                                            (float)*(undefined8 *)(pfVar28 + 8)) & 1)) & 0x1ffff;
                uVar16 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar26 + 0xc) >> 0x20) ==
                                   (float)((ulong)*(undefined8 *)(pfVar28 + 0xc) >> 0x20)),
                                  (ushort)(-((float)*(undefined8 *)(pfVar26 + 0xc) ==
                                            (float)*(undefined8 *)(pfVar28 + 0xc)) & 1)) & 0x1ffff;
                uVar39 = (ulong)CONCAT15(bVar53,CONCAT14(-((float)*(undefined8 *)(pfVar26 + 6) ==
                                                          (float)*(undefined8 *)(pfVar28 + 6)),
                                                         CONCAT13((char)(uVar14 >> 0x10),
                                                                  CONCAT12((char)uVar14,
                                                                           CONCAT11(-((float)((ulong
                                                  )*(undefined8 *)(pfVar26 + 2) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)(pfVar28 + 2) >>
                                                         0x20)),
                                                  -((float)*(undefined8 *)(pfVar26 + 2) ==
                                                   (float)*(undefined8 *)(pfVar28 + 2))))))) &
                         0x101ffff0101;
                uVar10 = (ulong)CONCAT15(bVar48,CONCAT14(-((float)*(undefined8 *)(pfVar26 + 0xe) ==
                                                          (float)*(undefined8 *)(pfVar28 + 0xe)),
                                                         CONCAT13((char)(uVar16 >> 0x10),
                                                                  CONCAT12((char)uVar16,
                                                                           CONCAT11(-((float)((ulong
                                                  )*(undefined8 *)(pfVar26 + 10) >> 0x20) ==
                                                  (float)((ulong)*(undefined8 *)(pfVar28 + 10) >>
                                                         0x20)),
                                                  -((float)*(undefined8 *)(pfVar26 + 10) ==
                                                   (float)*(undefined8 *)(pfVar28 + 10))))))) &
                         0x101ffff0101;
                *(ulong *)(pbVar30 + 8) =
                     CONCAT17(-(bVar48 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar10 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar10 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar10 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar10 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar10 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar15 
                                                  >> 0x10) ^ bVar34,-(char)uVar15 ^ bVar34)))))));
                *(ulong *)pbVar30 =
                     CONCAT17(-(bVar53 & 1) ^ bVar34,
                              CONCAT16(-(char)(uVar39 >> 0x20) ^ bVar34,
                                       CONCAT15(-(char)(uVar39 >> 0x18) ^ bVar34,
                                                CONCAT14(-(char)(uVar39 >> 0x10) ^ bVar34,
                                                         CONCAT13(-(char)(uVar39 >> 8) ^ bVar34,
                                                                  CONCAT12(-(char)uVar39 ^ bVar34,
                                                                           CONCAT11(-(char)(uVar13 
                                                  >> 0x10) ^ bVar34,-(char)uVar13 ^ bVar34)))))));
                pfVar26 = pfVar26 + 0x10;
                pfVar28 = pfVar28 + 0x10;
                pbVar30 = pbVar30 + 0x10;
              } while (uVar51 < uVar36);
              iVar31 = iVar31 + iVar54;
              if (uVar9 - uVar6 == iVar54) goto LAB_002424c0;
            }
            iVar54 = iVar31 + 1;
            param_5[iVar31] = bVar34 ^ -(param_1[iVar31] == param_3[iVar31]);
            if (iVar54 < iVar7) {
              iVar5 = iVar31 + 2;
              param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
              if (iVar5 < iVar7) {
                iVar54 = iVar31 + 3;
                param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                if (iVar54 < iVar7) {
                  iVar5 = iVar31 + 4;
                  param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                  if (iVar5 < iVar7) {
                    iVar54 = iVar31 + 5;
                    param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                    if (iVar54 < iVar7) {
                      iVar5 = iVar31 + 6;
                      param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                      if (iVar5 < iVar7) {
                        iVar54 = iVar31 + 7;
                        param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                        if (iVar54 < iVar7) {
                          iVar5 = iVar31 + 8;
                          param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                          if (iVar5 < iVar7) {
                            iVar54 = iVar31 + 9;
                            param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                            if (iVar54 < iVar7) {
                              iVar5 = iVar31 + 10;
                              param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                              if (iVar5 < iVar7) {
                                iVar54 = iVar31 + 0xb;
                                param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                                if (iVar54 < iVar7) {
                                  iVar5 = iVar31 + 0xc;
                                  param_5[iVar54] = bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                                  if (iVar5 < iVar7) {
                                    iVar54 = iVar31 + 0xd;
                                    param_5[iVar5] = bVar34 ^ -(param_1[iVar5] == param_3[iVar5]);
                                    if (iVar54 < iVar7) {
                                      iVar31 = iVar31 + 0xe;
                                      param_5[iVar54] =
                                           bVar34 ^ -(param_1[iVar54] == param_3[iVar54]);
                                      if (iVar31 < iVar7) {
                                        param_5[iVar31] =
                                             bVar34 ^ -(param_1[iVar31] == param_3[iVar31]);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002424c0:
        iVar41 = iVar41 + -1;
        param_1 = (float *)((long)param_1 + lVar61);
        param_3 = (float *)((long)param_3 + lVar62);
        param_5 = param_5 + param_6;
      } while (iVar41 != -1);
    }
  }
  return;
}


==================================================================

### FUNC 002425e0 (1148 bytes) name=FUN_002425e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002425e0(undefined1 (*param_1) [16],ulong param_2,undefined1 (*param_3) [16],ulong param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  long lVar8;
  long lVar9;
  short sVar10;
  long lVar11;
  undefined8 *puVar12;
  ushort *puVar13;
  ulong uVar14;
  undefined2 *puVar15;
  undefined1 (*pauVar16) [16];
  ushort *puVar17;
  undefined1 (*pauVar18) [16];
  undefined8 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined8 uVar26;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  int iVar32;
  int iVar33;
  
  iVar1 = *param_7;
  iVar33 = param_7[1];
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  fVar31 = (float)param_8[2];
  if (iVar33 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    uVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      uVar2 = 0;
    }
    uVar4 = (iVar1 + -4) - uVar2 >> 2;
    lVar11 = (long)(int)uVar2 * 2;
    do {
      if (0 < iVar1 + -7) {
        puVar12 = param_5;
        pauVar16 = param_1;
        pauVar18 = param_3;
        do {
          auVar21 = *pauVar16;
          auVar22 = *pauVar18;
          pauVar16 = pauVar16 + 1;
          pauVar18 = pauVar18 + 1;
          auVar24._2_2_ = 0;
          auVar24._0_2_ = auVar21._0_2_;
          auVar24._4_2_ = auVar21._2_2_;
          auVar24._6_2_ = 0;
          auVar24._8_2_ = auVar21._4_2_;
          auVar24._10_2_ = 0;
          auVar24._12_2_ = auVar21._6_2_;
          auVar24._14_2_ = 0;
          auVar28._2_2_ = 0;
          auVar28._0_2_ = auVar22._0_2_;
          auVar28._4_2_ = auVar22._2_2_;
          auVar28._6_2_ = 0;
          auVar28._8_2_ = auVar22._4_2_;
          auVar28._10_2_ = 0;
          auVar28._12_2_ = auVar22._6_2_;
          auVar28._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          auVar28 = NEON_ucvtf(auVar28,4);
          auVar25._0_8_ =
               CONCAT44(auVar24._4_4_ * fVar29 + auVar28._4_4_ * fVar30 + fVar31,
                        auVar24._0_4_ * fVar29 + auVar28._0_4_ * fVar30 + fVar31);
          auVar25._8_4_ = auVar24._8_4_ * fVar29 + auVar28._8_4_ * fVar30 + fVar31;
          auVar25._12_4_ = auVar24._12_4_ * fVar29 + auVar28._12_4_ * fVar30 + fVar31;
          if ((DAT_00531ec0 & 1) == 0) {
            uVar26 = auVar25._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar25._8_8_ = uVar26;
            if (iVar5 != 0) {
              auVar24 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar24._8_8_;
              _DAT_00531e90 = auVar24._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
          }
          auVar20._2_2_ = 0;
          auVar20._0_2_ = auVar21._8_2_;
          auVar20._4_2_ = auVar21._10_2_;
          auVar20._6_2_ = 0;
          auVar20._8_2_ = auVar21._12_2_;
          auVar20._10_2_ = 0;
          auVar20._12_2_ = auVar21._14_2_;
          auVar20._14_2_ = 0;
          auVar27._2_2_ = 0;
          auVar27._0_2_ = auVar22._8_2_;
          auVar27._4_2_ = auVar22._10_2_;
          auVar27._6_2_ = 0;
          auVar27._8_2_ = auVar22._12_2_;
          auVar27._10_2_ = 0;
          auVar27._12_2_ = auVar22._14_2_;
          auVar27._14_2_ = 0;
          auVar21 = NEON_ucvtf(auVar20,4);
          auVar24 = NEON_ucvtf(auVar27,4);
          iVar5 = (int)(auVar25._0_4_ + (float)_DAT_00531e90);
          iVar32 = (int)(auVar25._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar22._0_8_ =
               CONCAT44(auVar21._4_4_ * fVar29 + auVar24._4_4_ * fVar30 + fVar31,
                        auVar21._0_4_ * fVar29 + auVar24._0_4_ * fVar30 + fVar31);
          auVar22._8_4_ = auVar21._8_4_ * fVar29 + auVar24._8_4_ * fVar30 + fVar31;
          auVar22._12_4_ = auVar21._12_4_ * fVar29 + auVar24._12_4_ * fVar30 + fVar31;
          auVar21._4_4_ = iVar32;
          auVar21._0_4_ = iVar5;
          auVar21._8_4_ = (int)(auVar25._8_4_ + (float)uRam0000000000531e98);
          auVar21._12_4_ = (int)(auVar25._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar26 = NEON_uqxtn(CONCAT44(iVar32,iVar5),auVar21,4);
          if ((DAT_00531ec0 & 1) == 0) {
            uVar19 = auVar22._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar22._8_8_ = uVar19;
            if (iVar5 != 0) {
              auVar21 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar21._8_8_;
              _DAT_00531e90 = auVar21._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
          }
          auVar23._0_8_ =
               CONCAT44((int)(auVar22._4_4_ + DAT_00531e90_4),(int)(auVar22._0_4_ + _DAT_00531e90));
          auVar23._8_4_ = (int)(auVar22._8_4_ + (float)uRam0000000000531e98);
          auVar23._12_4_ = (int)(auVar22._12_4_ + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar23._0_8_,auVar23,4);
          puVar12[1] = uVar19;
          *puVar12 = uVar26;
          puVar12 = puVar12 + 2;
        } while (pauVar16 != param_1 + (ulong)uVar3 + 1);
      }
      uVar6 = uVar2;
      if ((int)uVar2 < iVar1 + -3) {
        puVar13 = (ushort *)(*param_1 + lVar11);
        puVar15 = (undefined2 *)((long)param_5 + lVar11);
        puVar17 = (ushort *)(*param_3 + lVar11);
        do {
          lVar8 = lrintf(fVar31 + fVar30 * (float)*puVar17 + (float)*puVar13 * fVar29);
          uVar6 = (uint)lVar8;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          lVar8 = lrintf(fVar31 + fVar30 * (float)puVar17[1] + (float)puVar13[1] * fVar29);
          uVar7 = (uint)lVar8;
          if (0xffff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          *puVar15 = (short)uVar6;
          puVar15[1] = (short)uVar7;
          lVar8 = lrintf(fVar31 + fVar30 * (float)puVar17[2] + (float)puVar13[2] * fVar29);
          uVar6 = (uint)lVar8;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          lVar8 = lrintf(fVar31 + fVar30 * (float)puVar17[3] + (float)puVar13[3] * fVar29);
          uVar7 = (uint)lVar8;
          if (0xffff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          puVar13 = puVar13 + 4;
          puVar15[2] = (short)uVar6;
          puVar15[3] = (short)uVar7;
          puVar17 = puVar17 + 4;
          puVar15 = puVar15 + 4;
          uVar6 = uVar2 + 4 + uVar4 * 4;
        } while (puVar13 != (ushort *)(*param_1 + (long)(int)uVar2 * 2 + 8 + (ulong)uVar4 * 8));
      }
      if ((int)uVar6 < iVar1) {
        lVar8 = 0;
        uVar14 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
        do {
          lVar9 = lrintf(fVar31 + fVar30 * (float)*(ushort *)(*param_3 + lVar8 + uVar14) +
                                  (float)*(ushort *)(*param_1 + lVar8 + uVar14) * fVar29);
          sVar10 = (short)lVar9;
          if (0xffff < (uint)lVar9) {
            sVar10 = -(ushort)(0 < (int)(uint)lVar9);
          }
          *(short *)((long)param_5 + lVar8 + uVar14) = sVar10;
          lVar8 = lVar8 + 2;
        } while (lVar8 != ((ulong)((iVar1 + -1) - uVar6) + 1) * 2);
      }
      iVar33 = iVar33 + -1;
      param_1 = (undefined1 (*) [16])(*param_1 + (param_2 & 0xfffffffffffffffe));
      param_3 = (undefined1 (*) [16])(*param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar33 != 0);
  }
  return;
}


==================================================================

### FUNC 00242a5c (2016 bytes) name=FUN_00242a5c

void FUN_00242a5c(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 int *param_7,double *param_8)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  ulong uVar14;
  float *pfVar15;
  undefined8 *puVar16;
  undefined8 *puVar17;
  float *pfVar18;
  int iVar19;
  undefined8 *puVar20;
  float *pfVar21;
  uint uVar22;
  long lVar23;
  int iVar24;
  long lVar25;
  long lVar26;
  uint uVar27;
  long lVar28;
  float fVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  float fVar35;
  undefined8 uVar36;
  float fVar37;
  long lVar38;
  
  iVar7 = *param_7;
  iVar24 = param_7[1];
  fVar35 = (float)*param_8;
  if (fVar35 == 1.0) {
    if (iVar24 != 0) {
      uVar10 = iVar7 - 8U >> 3;
      iVar8 = (uVar10 + 1) * 8;
      if (iVar7 + -7 < 1) {
        iVar8 = 0;
      }
      uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
      lVar25 = ((long)iVar8 + 0x10) * 4;
      lVar38 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
      lVar26 = lVar25 + -0x40;
      iVar4 = iVar8 + 4 + uVar11 * 4;
      do {
        if (0 < iVar7 + -7) {
          puVar16 = (undefined8 *)(param_1 + 0x10);
          puVar20 = (undefined8 *)(param_3 + 0x10);
          puVar17 = (undefined8 *)(param_5 + 0x10);
          do {
            uVar31 = puVar16[1];
            uVar30 = *puVar16;
            puVar12 = puVar16 + -1;
            uVar32 = puVar16[-2];
            puVar16 = puVar16 + 4;
            puVar13 = puVar20 + -1;
            uVar36 = puVar20[-2];
            uVar34 = puVar20[1];
            uVar33 = *puVar20;
            puVar20 = puVar20 + 4;
            puVar17[-1] = CONCAT44((float)((ulong)*puVar12 >> 0x20) *
                                   (float)((ulong)*puVar13 >> 0x20),
                                   (float)*puVar12 * (float)*puVar13);
            puVar17[-2] = CONCAT44((float)((ulong)uVar32 >> 0x20) * (float)((ulong)uVar36 >> 0x20),
                                   (float)uVar32 * (float)uVar36);
            puVar17[1] = CONCAT44((float)((ulong)uVar31 >> 0x20) * (float)((ulong)uVar34 >> 0x20),
                                  (float)uVar31 * (float)uVar34);
            *puVar17 = CONCAT44((float)((ulong)uVar30 >> 0x20) * (float)((ulong)uVar33 >> 0x20),
                                (float)uVar30 * (float)uVar33);
            puVar17 = puVar17 + 4;
          } while (puVar16 != (undefined8 *)(param_1 + (ulong)uVar10 * 0x20 + 0x30));
        }
        iVar9 = iVar8;
        if (iVar8 < iVar7 + -3) {
          pfVar15 = (float *)(param_1 + lVar26);
          pfVar18 = (float *)(param_5 + lVar26);
          pfVar21 = (float *)(param_3 + lVar26);
          iVar9 = iVar4;
          if ((pfVar15 < (float *)(param_5 + lVar25) && pfVar18 < (float *)(param_1 + lVar25) ||
               pfVar21 < (float *)(param_5 + lVar25) && pfVar18 < (float *)(param_3 + lVar25)) ||
             (uVar11 + 1 < 4)) {
            do {
              pfVar3 = pfVar15 + 4;
              fVar29 = *pfVar21;
              fVar35 = *pfVar15;
              pfVar18[1] = pfVar15[1] * pfVar21[1];
              *pfVar18 = fVar35 * fVar29;
              fVar35 = pfVar15[2];
              fVar29 = pfVar21[2];
              pfVar18[3] = pfVar15[3] * pfVar21[3];
              pfVar18[2] = fVar35 * fVar29;
              pfVar15 = pfVar3;
              pfVar18 = pfVar18 + 4;
              pfVar21 = pfVar21 + 4;
            } while (pfVar3 != (float *)(param_1 + lVar38));
          }
          else {
            uVar22 = 0;
            do {
              uVar30 = *(undefined8 *)pfVar15;
              uVar22 = uVar22 + 1;
              uVar31 = *(undefined8 *)pfVar21;
              *(ulong *)(pfVar18 + 2) =
                   CONCAT44((float)((ulong)*(undefined8 *)(pfVar15 + 2) >> 0x20) *
                            (float)((ulong)*(undefined8 *)(pfVar21 + 2) >> 0x20),
                            (float)*(undefined8 *)(pfVar15 + 2) *
                            (float)*(undefined8 *)(pfVar21 + 2));
              *(ulong *)pfVar18 =
                   CONCAT44((float)((ulong)uVar30 >> 0x20) * (float)((ulong)uVar31 >> 0x20),
                            (float)uVar30 * (float)uVar31);
              pfVar15 = pfVar15 + 4;
              pfVar18 = pfVar18 + 4;
              pfVar21 = pfVar21 + 4;
            } while (uVar22 < uVar11 + 1);
          }
        }
        if (iVar9 < iVar7) {
          uVar22 = iVar7 - iVar9;
          lVar23 = ((long)iVar9 + 4) * 4;
          lVar28 = lVar23 + -0x10;
          uVar14 = param_5 + lVar28;
          uVar5 = param_1 + lVar28;
          if ((uVar14 < (ulong)(param_1 + lVar23) && uVar5 < (ulong)(param_5 + lVar23) ||
               (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar23) &&
               uVar14 < (ulong)(param_3 + lVar23)) || (uVar22 < 9)) {
            lVar23 = 0;
            do {
              *(float *)(uVar14 + lVar23) =
                   *(float *)(uVar5 + lVar23) * *(float *)(param_3 + lVar28 + lVar23);
              lVar23 = lVar23 + 4;
            } while (lVar23 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
          }
          else {
            uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
            if (uVar22 < uVar6) {
              uVar6 = uVar22;
            }
            iVar19 = iVar9;
            if (uVar6 != 0) {
              lVar23 = (long)iVar9 * 4;
              iVar19 = iVar9 + 1;
              *(float *)(param_5 + lVar23) =
                   *(float *)(param_1 + lVar23) * *(float *)(param_3 + lVar23);
              if (uVar6 != 1) {
                lVar2 = lVar23 + 4;
                iVar19 = iVar9 + 2;
                *(float *)(param_5 + lVar2) =
                     *(float *)(param_1 + lVar2) * *(float *)(param_3 + lVar2);
                if (uVar6 == 3) {
                  lVar23 = lVar23 + 8;
                  iVar19 = iVar9 + 3;
                  *(float *)(param_5 + lVar23) =
                       *(float *)(param_1 + lVar23) * *(float *)(param_3 + lVar23);
                }
              }
            }
            uVar27 = 0;
            lVar28 = lVar28 + (ulong)uVar6 * 4;
            uVar1 = ((uVar22 - uVar6) - 4 >> 2) + 1;
            iVar9 = uVar1 * 4;
            puVar16 = (undefined8 *)(param_1 + lVar28);
            puVar20 = (undefined8 *)(param_3 + lVar28);
            puVar17 = (undefined8 *)(param_5 + lVar28);
            do {
              uVar30 = *puVar20;
              uVar27 = uVar27 + 1;
              uVar31 = *puVar16;
              puVar17[1] = CONCAT44((float)((ulong)puVar20[1] >> 0x20) *
                                    (float)((ulong)puVar16[1] >> 0x20),
                                    (float)puVar20[1] * (float)puVar16[1]);
              *puVar17 = CONCAT44((float)((ulong)uVar30 >> 0x20) * (float)((ulong)uVar31 >> 0x20),
                                  (float)uVar30 * (float)uVar31);
              puVar16 = puVar16 + 2;
              puVar20 = puVar20 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar27 < uVar1);
            uVar1 = iVar9 + iVar19;
            if (iVar9 != uVar22 - uVar6) {
              uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
              *(float *)(param_5 + uVar14) =
                   *(float *)(param_1 + uVar14) * *(float *)(param_3 + uVar14);
              if ((int)(uVar1 + 1) < iVar7) {
                lVar28 = uVar14 + 4;
                *(float *)(param_5 + lVar28) =
                     *(float *)(param_1 + lVar28) * *(float *)(param_3 + lVar28);
                if ((int)(uVar1 + 2) < iVar7) {
                  lVar28 = uVar14 + 8;
                  *(float *)(param_5 + lVar28) =
                       *(float *)(param_1 + lVar28) * *(float *)(param_3 + lVar28);
                }
              }
            }
          }
        }
        iVar24 = iVar24 + -1;
        param_1 = param_1 + (param_2 >> 2) * 4;
        param_3 = param_3 + (param_4 >> 2) * 4;
        param_5 = param_5 + (param_6 >> 2) * 4;
      } while (iVar24 != 0);
      return;
    }
  }
  else if (iVar24 != 0) {
    uVar10 = iVar7 - 8U >> 3;
    iVar8 = (uVar10 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar8 = 0;
    }
    uVar11 = (uint)((iVar7 + -4) - iVar8) >> 2;
    lVar25 = ((long)iVar8 + 0x10) * 4;
    lVar38 = NEON_shl((long)iVar8 + 4 + (ulong)uVar11 * 4,2);
    lVar26 = lVar25 + -0x40;
    iVar4 = iVar8 + 4 + uVar11 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar16 = (undefined8 *)(param_1 + 0x10);
        puVar20 = (undefined8 *)(param_3 + 0x10);
        puVar17 = (undefined8 *)(param_5 + 0x10);
        do {
          uVar31 = puVar16[1];
          uVar30 = *puVar16;
          puVar12 = puVar16 + -1;
          uVar32 = puVar16[-2];
          puVar16 = puVar16 + 4;
          puVar13 = puVar20 + -1;
          uVar36 = puVar20[-2];
          uVar34 = puVar20[1];
          uVar33 = *puVar20;
          puVar20 = puVar20 + 4;
          puVar17[-1] = CONCAT44((float)((ulong)*puVar12 >> 0x20) * (float)((ulong)*puVar13 >> 0x20)
                                 * fVar35,(float)*puVar12 * (float)*puVar13 * fVar35);
          puVar17[-2] = CONCAT44((float)((ulong)uVar32 >> 0x20) * (float)((ulong)uVar36 >> 0x20) *
                                 fVar35,(float)uVar32 * (float)uVar36 * fVar35);
          puVar17[1] = CONCAT44((float)((ulong)uVar31 >> 0x20) * (float)((ulong)uVar34 >> 0x20) *
                                fVar35,(float)uVar31 * (float)uVar34 * fVar35);
          *puVar17 = CONCAT44((float)((ulong)uVar30 >> 0x20) * (float)((ulong)uVar33 >> 0x20) *
                              fVar35,(float)uVar30 * (float)uVar33 * fVar35);
          puVar17 = puVar17 + 4;
        } while (puVar16 != (undefined8 *)(param_1 + (ulong)uVar10 * 0x20 + 0x30));
      }
      iVar9 = iVar8;
      if (iVar8 < iVar7 + -3) {
        pfVar15 = (float *)(param_1 + lVar26);
        pfVar18 = (float *)(param_5 + lVar26);
        pfVar21 = (float *)(param_3 + lVar26);
        iVar9 = iVar4;
        if ((pfVar15 < (float *)(param_5 + lVar25) && pfVar18 < (float *)(param_1 + lVar25) ||
             pfVar21 < (float *)(param_5 + lVar25) && pfVar18 < (float *)(param_3 + lVar25)) ||
           (uVar11 + 1 < 3)) {
          do {
            pfVar3 = pfVar15 + 4;
            fVar29 = *pfVar15;
            fVar37 = *pfVar21;
            pfVar18[1] = fVar35 * pfVar15[1] * pfVar21[1];
            *pfVar18 = fVar35 * fVar29 * fVar37;
            fVar29 = pfVar15[2];
            fVar37 = pfVar21[2];
            pfVar18[3] = fVar35 * pfVar15[3] * pfVar21[3];
            pfVar18[2] = fVar35 * fVar29 * fVar37;
            pfVar15 = pfVar3;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (pfVar3 != (float *)(param_1 + lVar38));
        }
        else {
          uVar22 = 0;
          do {
            uVar30 = *(undefined8 *)pfVar15;
            uVar22 = uVar22 + 1;
            uVar31 = *(undefined8 *)pfVar21;
            *(ulong *)(pfVar18 + 2) =
                 CONCAT44(fVar35 * (float)((ulong)*(undefined8 *)(pfVar15 + 2) >> 0x20) *
                          (float)((ulong)*(undefined8 *)(pfVar21 + 2) >> 0x20),
                          fVar35 * (float)*(undefined8 *)(pfVar15 + 2) *
                          (float)*(undefined8 *)(pfVar21 + 2));
            *(ulong *)pfVar18 =
                 CONCAT44(fVar35 * (float)((ulong)uVar30 >> 0x20) * (float)((ulong)uVar31 >> 0x20),
                          fVar35 * (float)uVar30 * (float)uVar31);
            pfVar15 = pfVar15 + 4;
            pfVar18 = pfVar18 + 4;
            pfVar21 = pfVar21 + 4;
          } while (uVar22 < uVar11 + 1);
        }
      }
      if (iVar9 < iVar7) {
        uVar22 = iVar7 - iVar9;
        lVar23 = ((long)iVar9 + 4) * 4;
        lVar28 = lVar23 + -0x10;
        uVar14 = param_5 + lVar28;
        uVar5 = param_1 + lVar28;
        if ((uVar14 < (ulong)(param_1 + lVar23) && uVar5 < (ulong)(param_5 + lVar23) ||
             (ulong)(param_3 + lVar28) < (ulong)(param_5 + lVar23) &&
             uVar14 < (ulong)(param_3 + lVar23)) || (uVar22 < 8)) {
          lVar23 = 0;
          do {
            *(float *)(uVar14 + lVar23) =
                 fVar35 * *(float *)(uVar5 + lVar23) * *(float *)(param_3 + lVar28 + lVar23);
            lVar23 = lVar23 + 4;
          } while (lVar23 != ((ulong)(uint)((iVar7 + -1) - iVar9) + 1) * 4);
        }
        else {
          uVar6 = -((uint)(uVar5 >> 2) & 3) & 3;
          uVar1 = uVar22;
          if (uVar6 < uVar22) {
            uVar1 = uVar6;
          }
          iVar19 = iVar9;
          if (uVar1 != 0) {
            lVar23 = (long)iVar9 * 4;
            iVar19 = iVar9 + 1;
            *(float *)(param_5 + lVar23) =
                 fVar35 * *(float *)(param_1 + lVar23) * *(float *)(param_3 + lVar23);
            if (uVar1 != 1) {
              lVar2 = lVar23 + 4;
              iVar19 = iVar9 + 2;
              *(float *)(param_5 + lVar2) =
                   fVar35 * *(float *)(param_1 + lVar2) * *(float *)(param_3 + lVar2);
              if (uVar1 == 3) {
                lVar23 = lVar23 + 8;
                iVar19 = iVar9 + 3;
                *(float *)(param_5 + lVar23) =
                     fVar35 * *(float *)(param_1 + lVar23) * *(float *)(param_3 + lVar23);
              }
            }
          }
          uVar27 = 0;
          lVar28 = lVar28 + (ulong)uVar1 * 4;
          uVar6 = ((uVar22 - uVar1) - 4 >> 2) + 1;
          iVar9 = uVar6 * 4;
          puVar16 = (undefined8 *)(param_5 + lVar28);
          puVar20 = (undefined8 *)(param_3 + lVar28);
          puVar17 = (undefined8 *)(param_1 + lVar28);
          do {
            uVar30 = *puVar17;
            uVar27 = uVar27 + 1;
            uVar31 = *puVar20;
            puVar16[1] = CONCAT44(fVar35 * (float)((ulong)puVar17[1] >> 0x20) *
                                  (float)((ulong)puVar20[1] >> 0x20),
                                  fVar35 * (float)puVar17[1] * (float)puVar20[1]);
            *puVar16 = CONCAT44(fVar35 * (float)((ulong)uVar30 >> 0x20) *
                                (float)((ulong)uVar31 >> 0x20),
                                fVar35 * (float)uVar30 * (float)uVar31);
            puVar16 = puVar16 + 2;
            puVar20 = puVar20 + 2;
            puVar17 = puVar17 + 2;
          } while (uVar27 < uVar6);
          uVar6 = iVar19 + iVar9;
          if (uVar22 - uVar1 != iVar9) {
            uVar14 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar6 << 2;
            *(float *)(param_5 + uVar14) =
                 fVar35 * *(float *)(param_1 + uVar14) * *(float *)(param_3 + uVar14);
            if ((int)(uVar6 + 1) < iVar7) {
              lVar28 = uVar14 + 4;
              *(float *)(param_5 + lVar28) =
                   fVar35 * *(float *)(param_1 + lVar28) * *(float *)(param_3 + lVar28);
              if ((int)(uVar6 + 2) < iVar7) {
                lVar28 = uVar14 + 8;
                *(float *)(param_5 + lVar28) =
                     fVar35 * *(float *)(param_1 + lVar28) * *(float *)(param_3 + lVar28);
              }
            }
          }
        }
      }
      iVar24 = iVar24 + -1;
      param_1 = param_1 + (param_2 >> 2) * 4;
      param_3 = param_3 + (param_4 >> 2) * 4;
      param_5 = param_5 + (param_6 >> 2) * 4;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 0024323c (1004 bytes) name=FUN_0024323c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int FUN_0024323c(float param_1,short *param_2,short *param_3,undefined8 *param_4,int param_5)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  undefined1 auVar3 [16];
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  float fVar9;
  undefined8 uVar10;
  undefined1 auVar12 [12];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined8 uVar25;
  undefined1 auVar19 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar26;
  float fVar28;
  float fVar29;
  undefined1 auVar27 [16];
  float fVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 uVar35;
  undefined1 uVar36;
  undefined1 uVar37;
  undefined1 auVar11 [12];
  undefined1 auVar13 [16];
  undefined1 auVar20 [16];
  
  param_5 = param_5 + -7;
  if (param_1 == 1.0) {
    if (0 < param_5) {
      iVar8 = 0;
      do {
        auVar15._0_4_ = (int)*param_2;
        auVar15._4_4_ = (int)param_2[1];
        auVar15._8_4_ = (int)param_2[2];
        auVar15._12_4_ = (int)param_2[3];
        auVar27 = NEON_scvtf(auVar15,4);
        auVar16._0_4_ = (int)*param_3;
        auVar16._4_4_ = (int)param_3[1];
        auVar16._8_4_ = (int)param_3[2];
        auVar16._12_4_ = (int)param_3[3];
        auVar31._0_4_ = (int)param_3[4];
        auVar31._4_4_ = (int)param_3[5];
        auVar31._8_4_ = (int)param_3[6];
        auVar31._12_4_ = (int)param_3[7];
        auVar17 = NEON_scvtf(auVar16,4);
        auVar1._4_4_ = (int)param_2[5];
        auVar1._0_4_ = (int)param_2[4];
        auVar1._8_4_ = (int)param_2[6];
        auVar1._12_4_ = (int)param_2[7];
        auVar33 = NEON_scvtf(auVar1,4);
        auVar32 = NEON_scvtf(auVar31,4);
        auVar18._0_8_ = CONCAT44(auVar27._4_4_ * auVar17._4_4_,auVar27._0_4_ * auVar17._0_4_);
        auVar18._8_4_ = auVar27._8_4_ * auVar17._8_4_;
        auVar18._12_4_ = auVar27._12_4_ * auVar17._12_4_;
        fVar26 = auVar33._0_4_ * auVar32._0_4_;
        fVar28 = auVar33._4_4_ * auVar32._4_4_;
        fVar29 = auVar33._8_4_ * auVar32._8_4_;
        fVar30 = auVar33._12_4_ * auVar32._12_4_;
        if ((DAT_00531ed0 & 1) == 0) {
          uVar25 = auVar18._8_8_;
          iVar7 = __cxa_guard_acquire(&DAT_00531ed0);
          auVar18._8_8_ = uVar25;
          if (iVar7 != 0) {
            auVar19._8_4_ = 0x80000000;
            auVar19._0_8_ = 0x8000000080000000;
            auVar19._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar19._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
        }
        if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0)) {
          bRam0000000000531ea8 = 0;
          bRam0000000000531ea9 = 0;
          bRam0000000000531eaa = 0;
          bRam0000000000531eab = 0x3f;
          bRam0000000000531eac = 0;
          bRam0000000000531ead = 0;
          bRam0000000000531eae = 0;
          bRam0000000000531eaf = 0x3f;
          DAT_00531ea0 = 0;
          bRam0000000000531ea1 = 0;
          bRam0000000000531ea2 = 0;
          bRam0000000000531ea3 = 0x3f;
          bRam0000000000531ea4 = 0;
          bRam0000000000531ea5 = 0;
          bRam0000000000531ea6 = 0;
          bRam0000000000531ea7 = 0x3f;
          __cxa_guard_release(&DAT_00531ec8);
        }
        iVar7 = (int)(auVar18._0_4_ +
                     (float)CONCAT13(auVar18[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                     bRam0000000000531ea3,
                                     CONCAT12(auVar18[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                              bRam0000000000531ea2,
                                              CONCAT11(auVar18[1] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                       bRam0000000000531ea1,
                                                       auVar18[0] & (byte)_DAT_00531eb0 |
                                                       DAT_00531ea0))));
        iVar4 = (int)(auVar18._4_4_ +
                     (float)CONCAT13(auVar18[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                     bRam0000000000531ea7,
                                     CONCAT12(auVar18[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                              bRam0000000000531ea6,
                                              CONCAT11(auVar18[5] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                       bRam0000000000531ea5,
                                                       auVar18[4] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                       bRam0000000000531ea4))));
        uVar35 = (undefined1)((uint)iVar4 >> 8);
        uVar36 = (undefined1)((uint)iVar4 >> 0x10);
        uVar37 = (undefined1)((uint)iVar4 >> 0x18);
        iVar5 = (int)(auVar18._8_4_ +
                     (float)CONCAT13(auVar18[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                     bRam0000000000531eab,
                                     CONCAT12(auVar18[10] &
                                              (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                              bRam0000000000531eaa,
                                              CONCAT11(auVar18[9] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                       bRam0000000000531ea9,
                                                       auVar18[8] & (byte)_uRam0000000000531eb8 |
                                                       bRam0000000000531ea8))));
        iVar6 = (int)(auVar18._12_4_ +
                     (float)CONCAT13(auVar18[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                     bRam0000000000531eaf,
                                     CONCAT12(auVar18[0xe] &
                                              (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                              bRam0000000000531eae,
                                              CONCAT11(auVar18[0xd] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 0x28)
                                                       | bRam0000000000531ead,
                                                       auVar18[0xc] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 0x20)
                                                       | bRam0000000000531eac))));
        auVar2[4] = (char)iVar4;
        auVar2._0_4_ = iVar7;
        auVar2[5] = uVar35;
        auVar2[6] = uVar36;
        auVar2[7] = uVar37;
        auVar2[8] = (char)iVar5;
        auVar2[9] = (char)((uint)iVar5 >> 8);
        auVar2[10] = (char)((uint)iVar5 >> 0x10);
        auVar2[0xb] = (char)((uint)iVar5 >> 0x18);
        auVar2[0xc] = (char)iVar6;
        auVar2[0xd] = (char)((uint)iVar6 >> 8);
        auVar2[0xe] = (char)((uint)iVar6 >> 0x10);
        auVar2[0xf] = (char)((uint)iVar6 >> 0x18);
        uVar25 = NEON_sqxtn(CONCAT17(uVar37,CONCAT16(uVar36,CONCAT15(uVar35,CONCAT14((char)iVar4,
                                                                                     iVar7)))),
                            auVar2,4);
        if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0)) {
          auVar24._8_4_ = 0x80000000;
          auVar24._0_8_ = 0x8000000080000000;
          auVar24._12_4_ = 0x80000000;
          _uRam0000000000531eb8 = auVar24._8_8_;
          _DAT_00531eb0 = 0x8000000080000000;
          __cxa_guard_release(&DAT_00531ed0);
        }
        if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0)) {
          bRam0000000000531ea8 = 0;
          bRam0000000000531ea9 = 0;
          bRam0000000000531eaa = 0;
          bRam0000000000531eab = 0x3f;
          bRam0000000000531eac = 0;
          bRam0000000000531ead = 0;
          bRam0000000000531eae = 0;
          bRam0000000000531eaf = 0x3f;
          DAT_00531ea0 = 0;
          bRam0000000000531ea1 = 0;
          bRam0000000000531ea2 = 0;
          bRam0000000000531ea3 = 0x3f;
          bRam0000000000531ea4 = 0;
          bRam0000000000531ea5 = 0;
          bRam0000000000531ea6 = 0;
          bRam0000000000531ea7 = 0x3f;
          __cxa_guard_release(&DAT_00531ec8);
        }
        iVar8 = iVar8 + 8;
        param_2 = param_2 + 8;
        param_3 = param_3 + 8;
        fVar9 = (float)CONCAT13((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb3 |
                                bRam0000000000531ea3,
                                CONCAT12((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb2 |
                                         bRam0000000000531ea2,
                                         CONCAT11((byte)((uint)fVar26 >> 8) & DAT_00531eb0_1 |
                                                  bRam0000000000531ea1,
                                                  SUB41(fVar26,0) & DAT_00531eb0 | DAT_00531ea0)));
        auVar11._0_8_ =
             CONCAT17((byte)((uint)fVar28 >> 0x18) & bRam0000000000531eb7 | bRam0000000000531ea7,
                      CONCAT16((byte)((uint)fVar28 >> 0x10) & bRam0000000000531eb6 |
                               bRam0000000000531ea6,
                               CONCAT15((byte)((uint)fVar28 >> 8) & bRam0000000000531eb5 |
                                        bRam0000000000531ea5,
                                        CONCAT14(SUB41(fVar28,0) & bRam0000000000531eb4 |
                                                 bRam0000000000531ea4,fVar9))));
        auVar11[8] = SUB41(fVar29,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
        auVar11[9] = (byte)((uint)fVar29 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
        auVar11[10] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
        auVar11[0xb] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
        auVar13[0xc] = SUB41(fVar30,0) & bRam0000000000531ebc | bRam0000000000531eac;
        auVar13._0_12_ = auVar11;
        auVar13[0xd] = (byte)((uint)fVar30 >> 8) & bRam0000000000531ebd | bRam0000000000531ead;
        auVar13[0xe] = (byte)((uint)fVar30 >> 0x10) & bRam0000000000531ebe | bRam0000000000531eae;
        auVar13[0xf] = (byte)((uint)fVar30 >> 0x18) & bRam0000000000531ebf | bRam0000000000531eaf;
        auVar14._0_8_ =
             CONCAT44((int)(fVar28 + (float)((ulong)auVar11._0_8_ >> 0x20)),(int)(fVar26 + fVar9));
        auVar14._8_4_ = (int)(fVar29 + auVar11._8_4_);
        auVar14._12_4_ = (int)(fVar30 + auVar13._12_4_);
        uVar10 = NEON_sqxtn(auVar14._0_8_,auVar14,4);
        param_4[1] = uVar10;
        *param_4 = uVar25;
        param_4 = param_4 + 2;
      } while (iVar8 < param_5);
      return iVar8;
    }
  }
  else if (0 < param_5) {
    iVar8 = 0;
    do {
      auVar34._0_4_ = (int)param_2[4];
      auVar34._4_4_ = (int)param_2[5];
      auVar34._8_4_ = (int)param_2[6];
      auVar34._12_4_ = (int)param_2[7];
      auVar32._0_4_ = (int)*param_2;
      auVar32._4_4_ = (int)param_2[1];
      auVar32._8_4_ = (int)param_2[2];
      auVar32._12_4_ = (int)param_2[3];
      auVar32 = NEON_scvtf(auVar32,4);
      auVar33._0_4_ = (int)*param_3;
      auVar33._4_4_ = (int)param_3[1];
      auVar33._8_4_ = (int)param_3[2];
      auVar33._12_4_ = (int)param_3[3];
      auVar27 = NEON_scvtf(auVar34,4);
      auVar33 = NEON_scvtf(auVar33,4);
      auVar17._4_4_ = (int)param_3[5];
      auVar17._0_4_ = (int)param_3[4];
      auVar17._8_4_ = (int)param_3[6];
      auVar17._12_4_ = (int)param_3[7];
      auVar17 = NEON_scvtf(auVar17,4);
      fVar26 = param_1 * auVar27._0_4_ * auVar17._0_4_;
      fVar28 = param_1 * auVar27._4_4_ * auVar17._4_4_;
      fVar29 = param_1 * auVar27._8_4_ * auVar17._8_4_;
      fVar30 = param_1 * auVar27._12_4_ * auVar17._12_4_;
      auVar27._0_8_ =
           CONCAT44(param_1 * auVar32._4_4_ * auVar33._4_4_,param_1 * auVar32._0_4_ * auVar33._0_4_)
      ;
      auVar27._8_4_ = param_1 * auVar32._8_4_ * auVar33._8_4_;
      auVar27._12_4_ = param_1 * auVar32._12_4_ * auVar33._12_4_;
      if ((DAT_00531ed0 & 1) == 0) {
        uVar25 = auVar27._8_8_;
        iVar7 = __cxa_guard_acquire(&DAT_00531ed0);
        auVar27._8_8_ = uVar25;
        if (iVar7 != 0) {
          auVar22._8_4_ = 0x80000000;
          auVar22._0_8_ = 0x8000000080000000;
          auVar22._12_4_ = 0x80000000;
          _uRam0000000000531eb8 = auVar22._8_8_;
          _DAT_00531eb0 = 0x8000000080000000;
          __cxa_guard_release(&DAT_00531ed0);
        }
      }
      if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0)) {
        bRam0000000000531ea8 = 0;
        bRam0000000000531ea9 = 0;
        bRam0000000000531eaa = 0;
        bRam0000000000531eab = 0x3f;
        bRam0000000000531eac = 0;
        bRam0000000000531ead = 0;
        bRam0000000000531eae = 0;
        bRam0000000000531eaf = 0x3f;
        DAT_00531ea0 = 0;
        bRam0000000000531ea1 = 0;
        bRam0000000000531ea2 = 0;
        bRam0000000000531ea3 = 0x3f;
        bRam0000000000531ea4 = 0;
        bRam0000000000531ea5 = 0;
        bRam0000000000531ea6 = 0;
        bRam0000000000531ea7 = 0x3f;
        __cxa_guard_release(&DAT_00531ec8);
      }
      iVar7 = (int)(auVar27._0_4_ +
                   (float)CONCAT13(auVar27[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   bRam0000000000531ea3,
                                   CONCAT12(auVar27[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            bRam0000000000531ea2,
                                            CONCAT11(auVar27[1] & (byte)((ulong)_DAT_00531eb0 >> 8)
                                                     | bRam0000000000531ea1,
                                                     auVar27[0] & (byte)_DAT_00531eb0 | DAT_00531ea0
                                                    ))));
      iVar4 = (int)(auVar27._4_4_ +
                   (float)CONCAT13(auVar27[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                   bRam0000000000531ea7,
                                   CONCAT12(auVar27[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                            bRam0000000000531ea6,
                                            CONCAT11(auVar27[5] &
                                                     (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                     bRam0000000000531ea5,
                                                     auVar27[4] &
                                                     (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                     bRam0000000000531ea4))));
      uVar35 = (undefined1)((uint)iVar4 >> 8);
      uVar36 = (undefined1)((uint)iVar4 >> 0x10);
      uVar37 = (undefined1)((uint)iVar4 >> 0x18);
      iVar5 = (int)(auVar27._8_4_ +
                   (float)CONCAT13(auVar27[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                   bRam0000000000531eab,
                                   CONCAT12(auVar27[10] &
                                            (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                            bRam0000000000531eaa,
                                            CONCAT11(auVar27[9] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                     bRam0000000000531ea9,
                                                     auVar27[8] & (byte)_uRam0000000000531eb8 |
                                                     bRam0000000000531ea8))));
      iVar6 = (int)(auVar27._12_4_ +
                   (float)CONCAT13(auVar27[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                   bRam0000000000531eaf,
                                   CONCAT12(auVar27[0xe] &
                                            (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                            bRam0000000000531eae,
                                            CONCAT11(auVar27[0xd] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 0x28) |
                                                     bRam0000000000531ead,
                                                     auVar27[0xc] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                     bRam0000000000531eac))));
      auVar3[4] = (char)iVar4;
      auVar3._0_4_ = iVar7;
      auVar3[5] = uVar35;
      auVar3[6] = uVar36;
      auVar3[7] = uVar37;
      auVar3[8] = (char)iVar5;
      auVar3[9] = (char)((uint)iVar5 >> 8);
      auVar3[10] = (char)((uint)iVar5 >> 0x10);
      auVar3[0xb] = (char)((uint)iVar5 >> 0x18);
      auVar3[0xc] = (char)iVar6;
      auVar3[0xd] = (char)((uint)iVar6 >> 8);
      auVar3[0xe] = (char)((uint)iVar6 >> 0x10);
      auVar3[0xf] = (char)((uint)iVar6 >> 0x18);
      uVar25 = NEON_sqxtn(CONCAT17(uVar37,CONCAT16(uVar36,CONCAT15(uVar35,CONCAT14((char)iVar4,iVar7
                                                                                  )))),auVar3,4);
      if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0)) {
        auVar23._8_4_ = 0x80000000;
        auVar23._0_8_ = 0x8000000080000000;
        auVar23._12_4_ = 0x80000000;
        _uRam0000000000531eb8 = auVar23._8_8_;
        _DAT_00531eb0 = 0x8000000080000000;
        __cxa_guard_release(&DAT_00531ed0);
      }
      if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0)) {
        bRam0000000000531ea8 = 0;
        bRam0000000000531ea9 = 0;
        bRam0000000000531eaa = 0;
        bRam0000000000531eab = 0x3f;
        bRam0000000000531eac = 0;
        bRam0000000000531ead = 0;
        bRam0000000000531eae = 0;
        bRam0000000000531eaf = 0x3f;
        DAT_00531ea0 = 0;
        bRam0000000000531ea1 = 0;
        bRam0000000000531ea2 = 0;
        bRam0000000000531ea3 = 0x3f;
        bRam0000000000531ea4 = 0;
        bRam0000000000531ea5 = 0;
        bRam0000000000531ea6 = 0;
        bRam0000000000531ea7 = 0x3f;
        __cxa_guard_release(&DAT_00531ec8);
      }
      iVar8 = iVar8 + 8;
      param_2 = param_2 + 8;
      param_3 = param_3 + 8;
      fVar9 = (float)CONCAT13((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb3 |
                              bRam0000000000531ea3,
                              CONCAT12((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb2 |
                                       bRam0000000000531ea2,
                                       CONCAT11((byte)((uint)fVar26 >> 8) & DAT_00531eb0_1 |
                                                bRam0000000000531ea1,
                                                SUB41(fVar26,0) & DAT_00531eb0 | DAT_00531ea0)));
      auVar12._0_8_ =
           CONCAT17((byte)((uint)fVar28 >> 0x18) & bRam0000000000531eb7 | bRam0000000000531ea7,
                    CONCAT16((byte)((uint)fVar28 >> 0x10) & bRam0000000000531eb6 |
                             bRam0000000000531ea6,
                             CONCAT15((byte)((uint)fVar28 >> 8) & bRam0000000000531eb5 |
                                      bRam0000000000531ea5,
                                      CONCAT14(SUB41(fVar28,0) & bRam0000000000531eb4 |
                                               bRam0000000000531ea4,fVar9))));
      auVar12[8] = SUB41(fVar29,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
      auVar12[9] = (byte)((uint)fVar29 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
      auVar12[10] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
      auVar12[0xb] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
      auVar20[0xc] = SUB41(fVar30,0) & bRam0000000000531ebc | bRam0000000000531eac;
      auVar20._0_12_ = auVar12;
      auVar20[0xd] = (byte)((uint)fVar30 >> 8) & bRam0000000000531ebd | bRam0000000000531ead;
      auVar20[0xe] = (byte)((uint)fVar30 >> 0x10) & bRam0000000000531ebe | bRam0000000000531eae;
      auVar20[0xf] = (byte)((uint)fVar30 >> 0x18) & bRam0000000000531ebf | bRam0000000000531eaf;
      auVar21._0_8_ =
           CONCAT44((int)(fVar28 + (float)((ulong)auVar12._0_8_ >> 0x20)),(int)(fVar26 + fVar9));
      auVar21._8_4_ = (int)(fVar29 + auVar12._8_4_);
      auVar21._12_4_ = (int)(fVar30 + auVar20._12_4_);
      uVar10 = NEON_sqxtn(auVar21._0_8_,auVar21,4);
      param_4[1] = uVar10;
      *param_4 = uVar25;
      param_4 = param_4 + 2;
    } while (iVar8 < param_5);
    return iVar8;
  }
  return 0;
}


==================================================================

### FUNC 00243628 (1208 bytes) name=FUN_00243628

void FUN_00243628(long param_1,ulong param_2,long param_3,ulong param_4,long param_5,ulong param_6,
                 int *param_7,double *param_8)

{
  short *psVar1;
  short *psVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  long lVar8;
  ulong uVar9;
  undefined2 uVar10;
  short *psVar11;
  undefined2 *puVar12;
  short *psVar13;
  long lVar14;
  undefined2 uVar15;
  undefined2 uVar16;
  undefined2 uVar17;
  ulong uVar18;
  float fVar19;
  int iVar20;
  
  iVar3 = *param_7;
  iVar20 = param_7[1];
  fVar19 = (float)*param_8;
  if (fVar19 == 1.0) {
    if (iVar20 != 0) {
      do {
        uVar18 = FUN_0024323c(0x3f800000,param_1,param_3,param_5,iVar3);
        iVar7 = (int)uVar18;
        uVar15 = 0x7fff;
        uVar16 = 0x8000;
        if (iVar7 < iVar3 + -3) {
          lVar14 = (long)iVar7 * 2;
          psVar13 = (short *)(param_3 + lVar14);
          uVar6 = (uint)((iVar3 + -4) - iVar7) >> 2;
          puVar12 = (undefined2 *)(param_5 + lVar14);
          psVar11 = (short *)(param_1 + lVar14);
          do {
            iVar5 = (int)*psVar11 * (int)*psVar13;
            uVar17 = (short)iVar5;
            if ((0xffff < iVar5 + 0x8000U) && (uVar17 = uVar15, iVar5 < 1)) {
              uVar17 = uVar16;
            }
            iVar5 = (int)psVar11[1] * (int)psVar13[1];
            uVar10 = (short)iVar5;
            if ((0xffff < iVar5 + 0x8000U) && (uVar10 = uVar15, iVar5 < 1)) {
              uVar10 = uVar16;
            }
            *puVar12 = uVar17;
            puVar12[1] = uVar10;
            iVar5 = (int)psVar11[2] * (int)psVar13[2];
            uVar17 = (short)iVar5;
            if ((0xffff < iVar5 + 0x8000U) && (uVar17 = 0x7fff, iVar5 < 1)) {
              uVar17 = 0x8000;
            }
            psVar1 = psVar13 + 3;
            psVar2 = psVar11 + 4;
            psVar13 = psVar13 + 4;
            iVar5 = (int)psVar11[3] * (int)*psVar1;
            uVar10 = (short)iVar5;
            if ((0xffff < iVar5 + 0x8000U) && (uVar10 = 0x7fff, iVar5 < 1)) {
              uVar10 = 0x8000;
            }
            puVar12[2] = uVar17;
            puVar12[3] = uVar10;
            puVar12 = puVar12 + 4;
            psVar11 = psVar2;
          } while (psVar2 != (short *)(param_1 + ((long)iVar7 + 4 + (ulong)uVar6 * 4) * 2));
          uVar18 = (ulong)(iVar7 + 4 + uVar6 * 4);
        }
        if ((int)uVar18 < iVar3) {
          lVar14 = 0;
          uVar9 = -(uVar18 >> 0x1f & 1) & 0xfffffffe00000000 | (uVar18 & 0xffffffff) << 1;
          do {
            iVar7 = (int)*(short *)(param_1 + uVar9 + lVar14) *
                    (int)*(short *)(param_3 + uVar9 + lVar14);
            uVar17 = (short)iVar7;
            if ((0xffff < iVar7 + 0x8000U) && (uVar17 = uVar15, iVar7 < 1)) {
              uVar17 = uVar16;
            }
            *(undefined2 *)(param_5 + uVar9 + lVar14) = uVar17;
            lVar14 = lVar14 + 2;
          } while (lVar14 != ((ulong)(uint)((iVar3 + -1) - (int)uVar18) + 1) * 2);
        }
        iVar20 = iVar20 + -1;
        param_1 = param_1 + (param_2 >> 1) * 2;
        param_3 = param_3 + (param_4 >> 1) * 2;
        param_5 = param_5 + (param_6 >> 1) * 2;
      } while (iVar20 != 0);
    }
  }
  else if (iVar20 != 0) {
    do {
      uVar6 = FUN_0024323c(fVar19,param_1,param_3,param_5,iVar3);
      uVar15 = 0x8000;
      uVar16 = 0x7fff;
      if ((int)uVar6 < iVar3 + -3) {
        lVar14 = (long)(int)uVar6 * 2;
        psVar13 = (short *)(param_1 + lVar14);
        uVar4 = (iVar3 + -4) - uVar6 >> 2;
        puVar12 = (undefined2 *)(param_5 + lVar14);
        psVar11 = (short *)(param_3 + lVar14);
        do {
          lVar14 = lrintf(fVar19 * (float)(int)*psVar13 * (float)(int)*psVar11);
          uVar17 = (short)lVar14;
          if ((0xffff < (int)lVar14 + 0x8000U) && (uVar17 = uVar16, (int)lVar14 < 1)) {
            uVar17 = uVar15;
          }
          lVar14 = lrintf(fVar19 * (float)(int)psVar13[1] * (float)(int)psVar11[1]);
          uVar10 = (short)lVar14;
          if ((0xffff < (int)lVar14 + 0x8000U) && (uVar10 = uVar16, (int)lVar14 < 1)) {
            uVar10 = uVar15;
          }
          *puVar12 = uVar17;
          puVar12[1] = uVar10;
          lVar14 = lrintf(fVar19 * (float)(int)psVar13[2] * (float)(int)psVar11[2]);
          uVar17 = (short)lVar14;
          if ((0xffff < (int)lVar14 + 0x8000U) && (uVar17 = 0x7fff, (int)lVar14 < 1)) {
            uVar17 = 0x8000;
          }
          psVar1 = psVar13 + 3;
          psVar13 = psVar13 + 4;
          lVar14 = lrintf(fVar19 * (float)(int)*psVar1 * (float)(int)psVar11[3]);
          uVar10 = (short)lVar14;
          if ((0xffff < (int)lVar14 + 0x8000U) && (uVar10 = 0x7fff, (int)lVar14 < 1)) {
            uVar10 = 0x8000;
          }
          puVar12[2] = uVar17;
          puVar12[3] = uVar10;
          puVar12 = puVar12 + 4;
          psVar11 = psVar11 + 4;
        } while (psVar13 != (short *)(param_1 + ((long)(int)uVar6 + 4 + (ulong)uVar4 * 4) * 2));
        uVar6 = uVar6 + 4 + uVar4 * 4;
      }
      if ((int)uVar6 < iVar3) {
        lVar14 = 0;
        uVar18 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
        do {
          lVar8 = lrintf(fVar19 * (float)(int)*(short *)(param_1 + uVar18 + lVar14) *
                         (float)(int)*(short *)(param_3 + uVar18 + lVar14));
          uVar17 = (short)lVar8;
          if ((0xffff < (int)lVar8 + 0x8000U) && (uVar17 = uVar16, (int)lVar8 < 1)) {
            uVar17 = uVar15;
          }
          *(undefined2 *)(param_5 + uVar18 + lVar14) = uVar17;
          lVar14 = lVar14 + 2;
        } while (lVar14 != ((ulong)((iVar3 + -1) - uVar6) + 1) * 2);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + (param_2 >> 1) * 2;
      param_3 = param_3 + (param_4 >> 1) * 2;
      param_5 = param_5 + (param_6 >> 1) * 2;
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 00243ae0 (1040 bytes) name=FUN_00243ae0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int FUN_00243ae0(float param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,
                int param_5)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  float fVar8;
  undefined1 auVar10 [12];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  float fVar22;
  float fVar26;
  float fVar27;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar28;
  undefined1 auVar25 [16];
  undefined8 uVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined8 uVar33;
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 uVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 auVar9 [12];
  undefined1 auVar11 [16];
  undefined1 auVar18 [16];
  
  param_5 = param_5 + -7;
  if (param_1 == 1.0) {
    if (0 < param_5) {
      iVar7 = 0;
      do {
        uVar33 = *param_2;
        uVar29 = *param_3;
        auVar13._0_4_ = (int)(short)(char)uVar33;
        auVar13._4_4_ = (int)(short)(char)((ulong)uVar33 >> 8);
        auVar13._8_4_ = (int)(short)(char)((ulong)uVar33 >> 0x10);
        auVar13._12_4_ = (int)(short)(char)((ulong)uVar33 >> 0x18);
        auVar24 = NEON_scvtf(auVar13,4);
        auVar14._0_4_ = (int)(short)(char)uVar29;
        auVar14._4_4_ = (int)(short)(char)((ulong)uVar29 >> 8);
        auVar14._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x10);
        auVar14._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x18);
        auVar34._0_4_ = (int)(short)(char)((ulong)uVar33 >> 0x20);
        auVar34._4_4_ = (int)(short)(char)((ulong)uVar33 >> 0x28);
        auVar34._8_4_ = (int)(short)(char)((ulong)uVar33 >> 0x30);
        auVar34._12_4_ = (int)(short)(char)((ulong)uVar33 >> 0x38);
        auVar15 = NEON_scvtf(auVar14,4);
        auVar35 = NEON_scvtf(auVar34,4);
        auVar30._0_4_ = (int)(short)(char)((ulong)uVar29 >> 0x20);
        auVar30._4_4_ = (int)(short)(char)((ulong)uVar29 >> 0x28);
        auVar30._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x30);
        auVar30._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x38);
        auVar31 = NEON_scvtf(auVar30,4);
        auVar16._0_8_ = CONCAT44(auVar24._4_4_ * auVar15._4_4_,auVar24._0_4_ * auVar15._0_4_);
        auVar16._8_4_ = auVar24._8_4_ * auVar15._8_4_;
        auVar16._12_4_ = auVar24._12_4_ * auVar15._12_4_;
        fVar22 = auVar35._0_4_ * auVar31._0_4_;
        fVar26 = auVar35._4_4_ * auVar31._4_4_;
        fVar27 = auVar35._8_4_ * auVar31._8_4_;
        fVar28 = auVar35._12_4_ * auVar31._12_4_;
        if ((DAT_00531ed0 & 1) == 0) {
          uVar29 = auVar16._8_8_;
          iVar6 = __cxa_guard_acquire(&DAT_00531ed0);
          auVar16._8_8_ = uVar29;
          if (iVar6 != 0) {
            auVar17._8_4_ = 0x80000000;
            auVar17._0_8_ = 0x8000000080000000;
            auVar17._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar17._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
        }
        if (((DAT_00531ec8 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec8), iVar6 != 0)) {
          bRam0000000000531ea8 = 0;
          bRam0000000000531ea9 = 0;
          bRam0000000000531eaa = 0;
          bRam0000000000531eab = 0x3f;
          bRam0000000000531eac = 0;
          bRam0000000000531ead = 0;
          bRam0000000000531eae = 0;
          bRam0000000000531eaf = 0x3f;
          DAT_00531ea0 = 0;
          bRam0000000000531ea1 = 0;
          bRam0000000000531ea2 = 0;
          bRam0000000000531ea3 = 0x3f;
          bRam0000000000531ea4 = 0;
          bRam0000000000531ea5 = 0;
          bRam0000000000531ea6 = 0;
          bRam0000000000531ea7 = 0x3f;
          __cxa_guard_release(&DAT_00531ec8);
        }
        iVar6 = (int)(auVar16._0_4_ +
                     (float)CONCAT13(auVar16[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                     bRam0000000000531ea3,
                                     CONCAT12(auVar16[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                              bRam0000000000531ea2,
                                              CONCAT11(auVar16[1] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                       bRam0000000000531ea1,
                                                       auVar16[0] & (byte)_DAT_00531eb0 |
                                                       DAT_00531ea0))));
        iVar3 = (int)(auVar16._4_4_ +
                     (float)CONCAT13(auVar16[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                     bRam0000000000531ea7,
                                     CONCAT12(auVar16[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                              bRam0000000000531ea6,
                                              CONCAT11(auVar16[5] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                       bRam0000000000531ea5,
                                                       auVar16[4] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                       bRam0000000000531ea4))));
        uVar37 = (undefined1)((uint)iVar3 >> 8);
        uVar38 = (undefined1)((uint)iVar3 >> 0x10);
        uVar39 = (undefined1)((uint)iVar3 >> 0x18);
        iVar4 = (int)(auVar16._8_4_ +
                     (float)CONCAT13(auVar16[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                     bRam0000000000531eab,
                                     CONCAT12(auVar16[10] &
                                              (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                              bRam0000000000531eaa,
                                              CONCAT11(auVar16[9] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                       bRam0000000000531ea9,
                                                       auVar16[8] & (byte)_uRam0000000000531eb8 |
                                                       bRam0000000000531ea8))));
        iVar5 = (int)(auVar16._12_4_ +
                     (float)CONCAT13(auVar16[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                     bRam0000000000531eaf,
                                     CONCAT12(auVar16[0xe] &
                                              (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                              bRam0000000000531eae,
                                              CONCAT11(auVar16[0xd] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 0x28)
                                                       | bRam0000000000531ead,
                                                       auVar16[0xc] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 0x20)
                                                       | bRam0000000000531eac))));
        auVar1[4] = (char)iVar3;
        auVar1._0_4_ = iVar6;
        auVar1[5] = uVar37;
        auVar1[6] = uVar38;
        auVar1[7] = uVar39;
        auVar1[8] = (char)iVar4;
        auVar1[9] = (char)((uint)iVar4 >> 8);
        auVar1[10] = (char)((uint)iVar4 >> 0x10);
        auVar1[0xb] = (char)((uint)iVar4 >> 0x18);
        auVar1[0xc] = (char)iVar5;
        auVar1[0xd] = (char)((uint)iVar5 >> 8);
        auVar1[0xe] = (char)((uint)iVar5 >> 0x10);
        auVar1[0xf] = (char)((uint)iVar5 >> 0x18);
        uVar29 = NEON_sqxtn(CONCAT17(uVar39,CONCAT16(uVar38,CONCAT15(uVar37,CONCAT14((char)iVar3,
                                                                                     iVar6)))),
                            auVar1,4);
        if (((DAT_00531ed0 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ed0), iVar6 != 0)) {
          auVar21._8_4_ = 0x80000000;
          auVar21._0_8_ = 0x8000000080000000;
          auVar21._12_4_ = 0x80000000;
          _uRam0000000000531eb8 = auVar21._8_8_;
          _DAT_00531eb0 = 0x8000000080000000;
          __cxa_guard_release(&DAT_00531ed0);
        }
        if (((DAT_00531ec8 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec8), iVar6 != 0)) {
          bRam0000000000531ea8 = 0;
          bRam0000000000531ea9 = 0;
          bRam0000000000531eaa = 0;
          bRam0000000000531eab = 0x3f;
          bRam0000000000531eac = 0;
          bRam0000000000531ead = 0;
          bRam0000000000531eae = 0;
          bRam0000000000531eaf = 0x3f;
          DAT_00531ea0 = 0;
          bRam0000000000531ea1 = 0;
          bRam0000000000531ea2 = 0;
          bRam0000000000531ea3 = 0x3f;
          bRam0000000000531ea4 = 0;
          bRam0000000000531ea5 = 0;
          bRam0000000000531ea6 = 0;
          bRam0000000000531ea7 = 0x3f;
          __cxa_guard_release(&DAT_00531ec8);
        }
        iVar7 = iVar7 + 8;
        param_2 = param_2 + 1;
        param_3 = param_3 + 1;
        fVar8 = (float)CONCAT13((byte)((uint)fVar22 >> 0x18) & bRam0000000000531eb3 |
                                bRam0000000000531ea3,
                                CONCAT12((byte)((uint)fVar22 >> 0x10) & bRam0000000000531eb2 |
                                         bRam0000000000531ea2,
                                         CONCAT11((byte)((uint)fVar22 >> 8) & DAT_00531eb0_1 |
                                                  bRam0000000000531ea1,
                                                  SUB41(fVar22,0) & DAT_00531eb0 | DAT_00531ea0)));
        auVar9._0_8_ = CONCAT17((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb7 |
                                bRam0000000000531ea7,
                                CONCAT16((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb6 |
                                         bRam0000000000531ea6,
                                         CONCAT15((byte)((uint)fVar26 >> 8) & bRam0000000000531eb5 |
                                                  bRam0000000000531ea5,
                                                  CONCAT14(SUB41(fVar26,0) & bRam0000000000531eb4 |
                                                           bRam0000000000531ea4,fVar8))));
        auVar9[8] = SUB41(fVar27,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
        auVar9[9] = (byte)((uint)fVar27 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
        auVar9[10] = (byte)((uint)fVar27 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
        auVar9[0xb] = (byte)((uint)fVar27 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
        auVar11[0xc] = SUB41(fVar28,0) & bRam0000000000531ebc | bRam0000000000531eac;
        auVar11._0_12_ = auVar9;
        auVar11[0xd] = (byte)((uint)fVar28 >> 8) & bRam0000000000531ebd | bRam0000000000531ead;
        auVar11[0xe] = (byte)((uint)fVar28 >> 0x10) & bRam0000000000531ebe | bRam0000000000531eae;
        auVar11[0xf] = (byte)((uint)fVar28 >> 0x18) & bRam0000000000531ebf | bRam0000000000531eaf;
        auVar12._0_8_ =
             CONCAT44((int)(fVar26 + (float)((ulong)auVar9._0_8_ >> 0x20)),(int)(fVar22 + fVar8));
        auVar12._8_4_ = (int)(fVar27 + auVar9._8_4_);
        auVar12._12_4_ = (int)(fVar28 + auVar11._12_4_);
        uVar33 = NEON_sqxtn(auVar12._0_8_,auVar12,4);
        auVar23._8_8_ = uVar33;
        auVar23._0_8_ = uVar29;
        uVar29 = NEON_sqxtn(uVar33,auVar23,2);
        *param_4 = uVar29;
        param_4 = param_4 + 1;
      } while (iVar7 < param_5);
      return iVar7;
    }
  }
  else if (0 < param_5) {
    iVar7 = 0;
    do {
      uVar29 = *param_2;
      uVar33 = *param_3;
      auVar35._0_4_ = (int)(short)(char)uVar29;
      auVar35._4_4_ = (int)(short)(char)((ulong)uVar29 >> 8);
      auVar35._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x10);
      auVar35._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x18);
      auVar32 = NEON_scvtf(auVar35,4);
      auVar36._0_4_ = (int)(short)(char)uVar33;
      auVar36._4_4_ = (int)(short)(char)((ulong)uVar33 >> 8);
      auVar36._8_4_ = (int)(short)(char)((ulong)uVar33 >> 0x10);
      auVar36._12_4_ = (int)(short)(char)((ulong)uVar33 >> 0x18);
      auVar35 = NEON_scvtf(auVar36,4);
      auVar24._0_4_ = (int)(short)(char)((ulong)uVar29 >> 0x20);
      auVar24._4_4_ = (int)(short)(char)((ulong)uVar29 >> 0x28);
      auVar24._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x30);
      auVar24._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x38);
      auVar36 = NEON_scvtf(auVar24,4);
      auVar31._0_4_ = (int)(short)(char)((ulong)uVar33 >> 0x20);
      auVar31._4_4_ = (int)(short)(char)((ulong)uVar33 >> 0x28);
      auVar31._8_4_ = (int)(short)(char)((ulong)uVar33 >> 0x30);
      auVar31._12_4_ = (int)(short)(char)((ulong)uVar33 >> 0x38);
      auVar24 = NEON_scvtf(auVar31,4);
      auVar15._0_8_ =
           CONCAT44(param_1 * auVar32._4_4_ * auVar35._4_4_,param_1 * auVar32._0_4_ * auVar35._0_4_)
      ;
      auVar15._8_4_ = param_1 * auVar32._8_4_ * auVar35._8_4_;
      auVar15._12_4_ = param_1 * auVar32._12_4_ * auVar35._12_4_;
      fVar22 = param_1 * auVar36._0_4_ * auVar24._0_4_;
      fVar26 = param_1 * auVar36._4_4_ * auVar24._4_4_;
      fVar27 = param_1 * auVar36._8_4_ * auVar24._8_4_;
      fVar28 = param_1 * auVar36._12_4_ * auVar24._12_4_;
      if ((DAT_00531ed0 & 1) == 0) {
        uVar29 = auVar15._8_8_;
        iVar6 = __cxa_guard_acquire(&DAT_00531ed0);
        auVar15._8_8_ = uVar29;
        if (iVar6 != 0) {
          auVar32._8_4_ = 0x80000000;
          auVar32._0_8_ = 0x8000000080000000;
          auVar32._12_4_ = 0x80000000;
          _uRam0000000000531eb8 = auVar32._8_8_;
          _DAT_00531eb0 = 0x8000000080000000;
          __cxa_guard_release(&DAT_00531ed0);
        }
      }
      if (((DAT_00531ec8 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec8), iVar6 != 0)) {
        bRam0000000000531ea8 = 0;
        bRam0000000000531ea9 = 0;
        bRam0000000000531eaa = 0;
        bRam0000000000531eab = 0x3f;
        bRam0000000000531eac = 0;
        bRam0000000000531ead = 0;
        bRam0000000000531eae = 0;
        bRam0000000000531eaf = 0x3f;
        DAT_00531ea0 = 0;
        bRam0000000000531ea1 = 0;
        bRam0000000000531ea2 = 0;
        bRam0000000000531ea3 = 0x3f;
        bRam0000000000531ea4 = 0;
        bRam0000000000531ea5 = 0;
        bRam0000000000531ea6 = 0;
        bRam0000000000531ea7 = 0x3f;
        __cxa_guard_release(&DAT_00531ec8);
      }
      iVar6 = (int)(auVar15._0_4_ +
                   (float)CONCAT13(auVar15[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   bRam0000000000531ea3,
                                   CONCAT12(auVar15[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            bRam0000000000531ea2,
                                            CONCAT11(auVar15[1] & (byte)((ulong)_DAT_00531eb0 >> 8)
                                                     | bRam0000000000531ea1,
                                                     auVar15[0] & (byte)_DAT_00531eb0 | DAT_00531ea0
                                                    ))));
      iVar3 = (int)(auVar15._4_4_ +
                   (float)CONCAT13(auVar15[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                   bRam0000000000531ea7,
                                   CONCAT12(auVar15[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                            bRam0000000000531ea6,
                                            CONCAT11(auVar15[5] &
                                                     (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                     bRam0000000000531ea5,
                                                     auVar15[4] &
                                                     (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                     bRam0000000000531ea4))));
      uVar37 = (undefined1)((uint)iVar3 >> 8);
      uVar38 = (undefined1)((uint)iVar3 >> 0x10);
      uVar39 = (undefined1)((uint)iVar3 >> 0x18);
      iVar4 = (int)(auVar15._8_4_ +
                   (float)CONCAT13(auVar15[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                   bRam0000000000531eab,
                                   CONCAT12(auVar15[10] &
                                            (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                            bRam0000000000531eaa,
                                            CONCAT11(auVar15[9] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                     bRam0000000000531ea9,
                                                     auVar15[8] & (byte)_uRam0000000000531eb8 |
                                                     bRam0000000000531ea8))));
      iVar5 = (int)(auVar15._12_4_ +
                   (float)CONCAT13(auVar15[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                   bRam0000000000531eaf,
                                   CONCAT12(auVar15[0xe] &
                                            (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                            bRam0000000000531eae,
                                            CONCAT11(auVar15[0xd] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 0x28) |
                                                     bRam0000000000531ead,
                                                     auVar15[0xc] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                     bRam0000000000531eac))));
      auVar2[4] = (char)iVar3;
      auVar2._0_4_ = iVar6;
      auVar2[5] = uVar37;
      auVar2[6] = uVar38;
      auVar2[7] = uVar39;
      auVar2[8] = (char)iVar4;
      auVar2[9] = (char)((uint)iVar4 >> 8);
      auVar2[10] = (char)((uint)iVar4 >> 0x10);
      auVar2[0xb] = (char)((uint)iVar4 >> 0x18);
      auVar2[0xc] = (char)iVar5;
      auVar2[0xd] = (char)((uint)iVar5 >> 8);
      auVar2[0xe] = (char)((uint)iVar5 >> 0x10);
      auVar2[0xf] = (char)((uint)iVar5 >> 0x18);
      uVar29 = NEON_sqxtn(CONCAT17(uVar39,CONCAT16(uVar38,CONCAT15(uVar37,CONCAT14((char)iVar3,iVar6
                                                                                  )))),auVar2,4);
      if (((DAT_00531ed0 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ed0), iVar6 != 0)) {
        auVar20._8_4_ = 0x80000000;
        auVar20._0_8_ = 0x8000000080000000;
        auVar20._12_4_ = 0x80000000;
        _uRam0000000000531eb8 = auVar20._8_8_;
        _DAT_00531eb0 = 0x8000000080000000;
        __cxa_guard_release(&DAT_00531ed0);
      }
      if (((DAT_00531ec8 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec8), iVar6 != 0)) {
        bRam0000000000531ea8 = 0;
        bRam0000000000531ea9 = 0;
        bRam0000000000531eaa = 0;
        bRam0000000000531eab = 0x3f;
        bRam0000000000531eac = 0;
        bRam0000000000531ead = 0;
        bRam0000000000531eae = 0;
        bRam0000000000531eaf = 0x3f;
        DAT_00531ea0 = 0;
        bRam0000000000531ea1 = 0;
        bRam0000000000531ea2 = 0;
        bRam0000000000531ea3 = 0x3f;
        bRam0000000000531ea4 = 0;
        bRam0000000000531ea5 = 0;
        bRam0000000000531ea6 = 0;
        bRam0000000000531ea7 = 0x3f;
        __cxa_guard_release(&DAT_00531ec8);
      }
      iVar7 = iVar7 + 8;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
      fVar8 = (float)CONCAT13((byte)((uint)fVar22 >> 0x18) & bRam0000000000531eb3 |
                              bRam0000000000531ea3,
                              CONCAT12((byte)((uint)fVar22 >> 0x10) & bRam0000000000531eb2 |
                                       bRam0000000000531ea2,
                                       CONCAT11((byte)((uint)fVar22 >> 8) & DAT_00531eb0_1 |
                                                bRam0000000000531ea1,
                                                SUB41(fVar22,0) & DAT_00531eb0 | DAT_00531ea0)));
      auVar10._0_8_ =
           CONCAT17((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb7 | bRam0000000000531ea7,
                    CONCAT16((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb6 |
                             bRam0000000000531ea6,
                             CONCAT15((byte)((uint)fVar26 >> 8) & bRam0000000000531eb5 |
                                      bRam0000000000531ea5,
                                      CONCAT14(SUB41(fVar26,0) & bRam0000000000531eb4 |
                                               bRam0000000000531ea4,fVar8))));
      auVar10[8] = SUB41(fVar27,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
      auVar10[9] = (byte)((uint)fVar27 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
      auVar10[10] = (byte)((uint)fVar27 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
      auVar10[0xb] = (byte)((uint)fVar27 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
      auVar18[0xc] = SUB41(fVar28,0) & bRam0000000000531ebc | bRam0000000000531eac;
      auVar18._0_12_ = auVar10;
      auVar18[0xd] = (byte)((uint)fVar28 >> 8) & bRam0000000000531ebd | bRam0000000000531ead;
      auVar18[0xe] = (byte)((uint)fVar28 >> 0x10) & bRam0000000000531ebe | bRam0000000000531eae;
      auVar18[0xf] = (byte)((uint)fVar28 >> 0x18) & bRam0000000000531ebf | bRam0000000000531eaf;
      auVar19._0_8_ =
           CONCAT44((int)(fVar26 + (float)((ulong)auVar10._0_8_ >> 0x20)),(int)(fVar22 + fVar8));
      auVar19._8_4_ = (int)(fVar27 + auVar10._8_4_);
      auVar19._12_4_ = (int)(fVar28 + auVar18._12_4_);
      uVar33 = NEON_sqxtn(auVar19._0_8_,auVar19,4);
      auVar25._8_8_ = uVar33;
      auVar25._0_8_ = uVar29;
      uVar29 = NEON_sqxtn(uVar33,auVar25,2);
      *param_4 = uVar29;
      param_4 = param_4 + 1;
    } while (iVar7 < param_5);
    return iVar7;
  }
  return 0;
}


==================================================================

### FUNC 00243ef0 (1104 bytes) name=FUN_00243ef0

void FUN_00243ef0(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7,double *param_8)

{
  char *pcVar1;
  char *pcVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  long lVar8;
  undefined1 uVar9;
  char *pcVar10;
  undefined1 *puVar11;
  char *pcVar12;
  long lVar13;
  undefined1 uVar14;
  undefined1 uVar15;
  undefined1 uVar16;
  int iVar17;
  float fVar18;
  
  iVar3 = *param_7;
  iVar17 = param_7[1];
  fVar18 = (float)*param_8;
  if (fVar18 == 1.0) {
    if (iVar17 != 0) {
      do {
        iVar6 = FUN_00243ae0(0x3f800000,param_1,param_3,param_5,iVar3);
        uVar15 = 0x80;
        uVar16 = 0x7f;
        if (iVar6 < iVar3 + -3) {
          lVar13 = (long)iVar6;
          uVar4 = (uint)((iVar3 + -4) - iVar6) >> 2;
          pcVar12 = (char *)(param_3 + lVar13);
          puVar11 = (undefined1 *)(param_5 + lVar13);
          pcVar10 = (char *)(param_1 + lVar13);
          do {
            iVar5 = (int)*pcVar10 * (int)*pcVar12;
            uVar14 = (char)iVar5;
            if ((0xff < iVar5 + 0x80U) && (uVar14 = uVar16, iVar5 < 1)) {
              uVar14 = uVar15;
            }
            iVar5 = (int)pcVar10[1] * (int)pcVar12[1];
            uVar9 = (char)iVar5;
            if ((0xff < iVar5 + 0x80U) && (uVar9 = uVar16, iVar5 < 1)) {
              uVar9 = uVar15;
            }
            *puVar11 = uVar14;
            puVar11[1] = uVar9;
            iVar5 = (int)pcVar10[2] * (int)pcVar12[2];
            uVar14 = (char)iVar5;
            if ((0xff < iVar5 + 0x80U) && (uVar14 = 0x7f, iVar5 < 1)) {
              uVar14 = 0x80;
            }
            pcVar1 = pcVar12 + 3;
            pcVar2 = pcVar10 + 4;
            pcVar12 = pcVar12 + 4;
            iVar5 = (uint)(byte)pcVar10[3] * (int)*pcVar1;
            uVar9 = (char)iVar5;
            if ((0xff < iVar5 + 0x80U) && (uVar9 = 0x7f, iVar5 < 1)) {
              uVar9 = 0x80;
            }
            puVar11[2] = uVar14;
            puVar11[3] = uVar9;
            puVar11 = puVar11 + 4;
            pcVar10 = pcVar2;
          } while (pcVar2 != (char *)(param_1 + lVar13 + 4 + (ulong)uVar4 * 4));
          iVar6 = iVar6 + 4 + uVar4 * 4;
        }
        if (iVar6 < iVar3) {
          lVar13 = 0;
          lVar7 = (long)iVar6;
          do {
            iVar5 = (int)*(char *)(param_1 + lVar7 + lVar13) *
                    (int)*(char *)(param_3 + lVar7 + lVar13);
            uVar14 = (char)iVar5;
            if ((0xff < iVar5 + 0x80U) && (uVar14 = uVar16, iVar5 < 1)) {
              uVar14 = uVar15;
            }
            *(undefined1 *)(param_5 + lVar7 + lVar13) = uVar14;
            lVar13 = lVar13 + 1;
          } while (lVar13 != (ulong)(uint)((iVar3 + -1) - iVar6) + 1);
        }
        iVar17 = iVar17 + -1;
        param_1 = param_1 + param_2;
        param_3 = param_3 + param_4;
        param_5 = param_5 + param_6;
      } while (iVar17 != 0);
    }
  }
  else if (iVar17 != 0) {
    do {
      iVar6 = FUN_00243ae0(fVar18,param_1,param_3,param_5,iVar3);
      uVar15 = 0x80;
      uVar16 = 0x7f;
      if (iVar6 < iVar3 + -3) {
        lVar13 = (long)iVar6;
        pcVar12 = (char *)(param_1 + lVar13);
        uVar4 = (uint)((iVar3 + -4) - iVar6) >> 2;
        puVar11 = (undefined1 *)(param_5 + lVar13);
        pcVar10 = (char *)(param_3 + lVar13);
        do {
          lVar7 = lrintf(fVar18 * (float)(int)*pcVar12 * (float)(int)*pcVar10);
          uVar14 = (char)lVar7;
          if ((0xff < (int)lVar7 + 0x80U) && (uVar14 = uVar16, (int)lVar7 < 1)) {
            uVar14 = uVar15;
          }
          lVar7 = lrintf(fVar18 * (float)(int)pcVar12[1] * (float)(int)pcVar10[1]);
          uVar9 = (char)lVar7;
          if ((0xff < (int)lVar7 + 0x80U) && (uVar9 = uVar16, (int)lVar7 < 1)) {
            uVar9 = uVar15;
          }
          *puVar11 = uVar14;
          puVar11[1] = uVar9;
          lVar7 = lrintf(fVar18 * (float)(int)pcVar12[2] * (float)(int)pcVar10[2]);
          uVar14 = (char)lVar7;
          if ((0xff < (int)lVar7 + 0x80U) && (uVar14 = 0x7f, (int)lVar7 < 1)) {
            uVar14 = 0x80;
          }
          pcVar1 = pcVar12 + 3;
          pcVar12 = pcVar12 + 4;
          lVar7 = lrintf(fVar18 * (float)(int)*pcVar1 * (float)(byte)pcVar10[3]);
          uVar9 = (char)lVar7;
          if ((0xff < (int)lVar7 + 0x80U) && (uVar9 = 0x7f, (int)lVar7 < 1)) {
            uVar9 = 0x80;
          }
          puVar11[2] = uVar14;
          puVar11[3] = uVar9;
          puVar11 = puVar11 + 4;
          pcVar10 = pcVar10 + 4;
        } while (pcVar12 != (char *)(param_1 + lVar13 + 4 + (ulong)uVar4 * 4));
        iVar6 = iVar6 + 4 + uVar4 * 4;
      }
      if (iVar6 < iVar3) {
        lVar13 = 0;
        lVar7 = (long)iVar6;
        do {
          lVar8 = lrintf(fVar18 * (float)(int)*(char *)(param_1 + lVar7 + lVar13) *
                         (float)(int)*(char *)(param_3 + lVar7 + lVar13));
          uVar14 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar14 = uVar16, (int)lVar8 < 1)) {
            uVar14 = uVar15;
          }
          *(undefined1 *)(param_5 + lVar7 + lVar13) = uVar14;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar3 + -1) - iVar6) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 00244340 (1216 bytes) name=FUN_00244340

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00244340(undefined8 *param_1,long param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 auVar1 [16];
  float fVar2;
  float fVar3;
  float fVar4;
  int iVar5;
  uint uVar6;
  long lVar7;
  int iVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined1 *puVar11;
  undefined8 *puVar12;
  byte *pbVar13;
  long lVar14;
  byte *pbVar15;
  undefined8 *puVar16;
  undefined1 uVar17;
  undefined1 uVar18;
  undefined1 uVar19;
  float fVar20;
  undefined8 uVar21;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  byte bVar28;
  byte bVar29;
  byte bVar30;
  byte bVar31;
  byte bVar32;
  byte bVar33;
  undefined1 auVar34 [16];
  undefined8 uVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  float fVar38;
  undefined1 auVar39 [12];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  float fVar44;
  double dVar45;
  float fVar46;
  double dVar47;
  float fVar48;
  double dVar49;
  undefined1 auVar22 [12];
  undefined1 auVar23 [16];
  undefined1 auVar40 [16];
  
  dVar47 = param_8[1];
  iVar5 = param_7[1];
  dVar49 = param_8[2];
  dVar45 = *param_8;
  param_7[1] = iVar5 + -1;
  fVar44 = (float)dVar45;
  fVar46 = (float)dVar47;
  fVar48 = (float)dVar49;
  if (iVar5 != 0) {
    iVar5 = *param_7;
    do {
      if (iVar5 < 8) {
        iVar8 = 0;
      }
      else {
        iVar8 = 0;
        puVar9 = param_3;
        puVar12 = param_1;
        puVar16 = param_5;
        do {
          uVar21 = *puVar12;
          uVar35 = *puVar9;
          uVar17 = (undefined1)((ulong)uVar21 >> 8);
          uVar19 = (undefined1)((ulong)uVar21 >> 0x28);
          uVar18 = (undefined1)((ulong)uVar35 >> 8);
          auVar25._6_2_ = 0;
          auVar25._0_6_ =
               (uint6)CONCAT14(uVar17,(uint)CONCAT12(uVar17,(ushort)(byte)uVar21)) & 0xffff0000ffff;
          auVar25[8] = (char)((ulong)uVar21 >> 0x10);
          auVar25._9_3_ = 0;
          auVar25[0xc] = (char)((ulong)uVar21 >> 0x18);
          auVar25._13_3_ = 0;
          auVar37._6_2_ = 0;
          auVar37._0_6_ =
               (uint6)CONCAT14(uVar19,(uint)CONCAT12(uVar19,(ushort)(byte)((ulong)uVar21 >> 0x20)))
               & 0xffff0000ffff;
          auVar37[8] = (char)((ulong)uVar21 >> 0x30);
          auVar37._9_3_ = 0;
          auVar37[0xc] = (char)((ulong)uVar21 >> 0x38);
          auVar37._13_3_ = 0;
          auVar25 = NEON_ucvtf(auVar25,4);
          auVar34 = NEON_ucvtf(auVar37,4);
          auVar43._6_2_ = 0;
          auVar43._0_6_ =
               (uint6)CONCAT14(uVar18,(uint)CONCAT12(uVar18,(ushort)(byte)uVar35)) & 0xffff0000ffff;
          auVar43[8] = (char)((ulong)uVar35 >> 0x10);
          auVar43._9_3_ = 0;
          auVar43[0xc] = (char)((ulong)uVar35 >> 0x18);
          auVar43._13_3_ = 0;
          auVar43 = NEON_ucvtf(auVar43,4);
          auVar36._1_3_ = 0;
          auVar36[0] = (byte)((ulong)uVar35 >> 0x20);
          auVar36[4] = (char)((ulong)uVar35 >> 0x28);
          auVar36._5_3_ = 0;
          auVar36[8] = (char)((ulong)uVar35 >> 0x30);
          auVar36._9_3_ = 0;
          auVar36[0xc] = (char)((ulong)uVar35 >> 0x38);
          auVar36._13_3_ = 0;
          auVar37 = NEON_ucvtf(auVar36,4);
          fVar38 = auVar34._0_4_ * fVar44 + auVar37._0_4_ * fVar46 + fVar48;
          fVar2 = auVar34._4_4_ * fVar44 + auVar37._4_4_ * fVar46 + fVar48;
          bVar28 = (byte)((uint)fVar2 >> 8);
          bVar29 = (byte)((uint)fVar2 >> 0x10);
          bVar30 = (byte)((uint)fVar2 >> 0x18);
          fVar3 = auVar34._8_4_ * fVar44 + auVar37._8_4_ * fVar46 + fVar48;
          fVar4 = auVar34._12_4_ * fVar44 + auVar37._12_4_ * fVar46 + fVar48;
          bVar31 = (byte)((uint)fVar4 >> 8);
          bVar32 = (byte)((uint)fVar4 >> 0x10);
          bVar33 = (byte)((uint)fVar4 >> 0x18);
          auVar34._0_8_ =
               CONCAT44(auVar25._4_4_ * fVar44 + auVar43._4_4_ * fVar46 + fVar48,
                        auVar25._0_4_ * fVar44 + auVar43._0_4_ * fVar46 + fVar48);
          auVar34._8_4_ = auVar25._8_4_ * fVar44 + auVar43._8_4_ * fVar46 + fVar48;
          auVar34._12_4_ = auVar25._12_4_ * fVar44 + auVar43._12_4_ * fVar46 + fVar48;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar21 = auVar34._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar34._8_8_ = uVar21;
            if (iVar5 != 0) {
              auVar26._8_4_ = 0x80000000;
              auVar26._0_8_ = 0x8000000080000000;
              auVar26._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar26._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar5 != 0) {
              bRam0000000000531ea8 = 0;
              bRam0000000000531ea9 = 0;
              bRam0000000000531eaa = 0;
              bRam0000000000531eab = 0x3f;
              bRam0000000000531eac = 0;
              bRam0000000000531ead = 0;
              bRam0000000000531eae = 0;
              bRam0000000000531eaf = 0x3f;
              DAT_00531ea0 = 0;
              bRam0000000000531ea1 = 0;
              bRam0000000000531ea2 = 0;
              bRam0000000000531ea3 = 0x3f;
              bRam0000000000531ea4 = 0;
              bRam0000000000531ea5 = 0;
              bRam0000000000531ea6 = 0;
              bRam0000000000531ea7 = 0x3f;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          fVar20 = (float)CONCAT13(auVar34[3] & bRam0000000000531eb3 | bRam0000000000531ea3,
                                   CONCAT12(auVar34[2] & bRam0000000000531eb2 | bRam0000000000531ea2
                                            ,CONCAT11(auVar34[1] & DAT_00531eb0_1 |
                                                      bRam0000000000531ea1,
                                                      auVar34[0] & DAT_00531eb0 | DAT_00531ea0)));
          auVar39._0_8_ =
               CONCAT17(auVar34[7] & bRam0000000000531eb7 | bRam0000000000531ea7,
                        CONCAT16(auVar34[6] & bRam0000000000531eb6 | bRam0000000000531ea6,
                                 CONCAT15(auVar34[5] & bRam0000000000531eb5 | bRam0000000000531ea5,
                                          CONCAT14(auVar34[4] & bRam0000000000531eb4 |
                                                   bRam0000000000531ea4,fVar20))));
          auVar39[8] = auVar34[8] & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
          auVar39[9] = auVar34[9] & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
          auVar39[10] = auVar34[10] & bRam0000000000531eba | bRam0000000000531eaa;
          auVar39[0xb] = auVar34[0xb] & bRam0000000000531ebb | bRam0000000000531eab;
          auVar40[0xc] = auVar34[0xc] & bRam0000000000531ebc | bRam0000000000531eac;
          auVar40._0_12_ = auVar39;
          auVar40[0xd] = auVar34[0xd] & bRam0000000000531ebd | bRam0000000000531ead;
          auVar40[0xe] = auVar34[0xe] & bRam0000000000531ebe | bRam0000000000531eae;
          auVar40[0xf] = auVar34[0xf] & bRam0000000000531ebf | bRam0000000000531eaf;
          auVar41._0_8_ =
               CONCAT44((int)(auVar34._4_4_ + (float)((ulong)auVar39._0_8_ >> 0x20)),
                        (int)(auVar34._0_4_ + fVar20));
          auVar41._8_4_ = (int)(auVar34._8_4_ + auVar39._8_4_);
          auVar41._12_4_ = (int)(auVar34._12_4_ + auVar40._12_4_);
          auVar42._8_8_ = auVar41._8_8_;
          auVar42._0_8_ = NEON_sqxtun(auVar41._0_8_,auVar41,4);
          if ((DAT_00531ed0 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar5 != 0) {
              auVar27._8_4_ = 0x80000000;
              auVar27._0_8_ = 0x8000000080000000;
              auVar27._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar27._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          uVar21 = auVar42._0_8_;
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar5 = __cxa_guard_acquire(&DAT_00531ec8), uVar21 = auVar42._0_8_, iVar5 != 0)) {
            bRam0000000000531ea8 = 0;
            bRam0000000000531ea9 = 0;
            bRam0000000000531eaa = 0;
            bRam0000000000531eab = 0x3f;
            bRam0000000000531eac = 0;
            bRam0000000000531ead = 0;
            bRam0000000000531eae = 0;
            bRam0000000000531eaf = 0x3f;
            DAT_00531ea0 = 0;
            bRam0000000000531ea1 = 0;
            bRam0000000000531ea2 = 0;
            bRam0000000000531ea3 = 0x3f;
            bRam0000000000531ea4 = 0;
            bRam0000000000531ea5 = 0;
            bRam0000000000531ea6 = 0;
            bRam0000000000531ea7 = 0x3f;
            __cxa_guard_release(&DAT_00531ec8);
            uVar21 = auVar42._0_8_;
          }
          iVar8 = iVar8 + 8;
          puVar12 = puVar12 + 1;
          puVar9 = puVar9 + 1;
          fVar20 = (float)CONCAT13((byte)((uint)fVar38 >> 0x18) & bRam0000000000531eb3 |
                                   bRam0000000000531ea3,
                                   CONCAT12((byte)((uint)fVar38 >> 0x10) & bRam0000000000531eb2 |
                                            bRam0000000000531ea2,
                                            CONCAT11((byte)((uint)fVar38 >> 8) & DAT_00531eb0_1 |
                                                     bRam0000000000531ea1,
                                                     SUB41(fVar38,0) & DAT_00531eb0 | DAT_00531ea0))
                                  );
          auVar22._0_8_ =
               CONCAT17(bVar30 & bRam0000000000531eb7 | bRam0000000000531ea7,
                        CONCAT16(bVar29 & bRam0000000000531eb6 | bRam0000000000531ea6,
                                 CONCAT15(bVar28 & bRam0000000000531eb5 | bRam0000000000531ea5,
                                          CONCAT14(SUB41(fVar2,0) & bRam0000000000531eb4 |
                                                   bRam0000000000531ea4,fVar20))));
          auVar22[8] = SUB41(fVar3,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
          auVar22[9] = (byte)((uint)fVar3 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
          auVar22[10] = (byte)((uint)fVar3 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
          auVar22[0xb] = (byte)((uint)fVar3 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
          auVar23[0xc] = SUB41(fVar4,0) & bRam0000000000531ebc | bRam0000000000531eac;
          auVar23._0_12_ = auVar22;
          auVar23[0xd] = bVar31 & bRam0000000000531ebd | bRam0000000000531ead;
          auVar23[0xe] = bVar32 & bRam0000000000531ebe | bRam0000000000531eae;
          auVar23[0xf] = bVar33 & bRam0000000000531ebf | bRam0000000000531eaf;
          auVar24._0_8_ =
               CONCAT44((int)((float)(CONCAT17(bVar30,CONCAT16(bVar29,CONCAT15(bVar28,CONCAT14(SUB41
                                                  (fVar2,0),fVar38)))) >> 0x20) +
                             (float)((ulong)auVar22._0_8_ >> 0x20)),(int)(fVar38 + fVar20));
          auVar24._8_4_ = (int)(fVar3 + auVar22._8_4_);
          auVar24._12_4_ =
               (int)((float)(CONCAT17(bVar33,CONCAT16(bVar32,CONCAT15(bVar31,CONCAT14(SUB41(fVar4,0)
                                                                                      ,fVar3)))) >>
                            0x20) + auVar23._12_4_);
          uVar35 = NEON_sqxtun(auVar24._0_8_,auVar24,4);
          auVar1[8] = (char)uVar35;
          auVar1._0_8_ = uVar21;
          auVar1[9] = (char)((ulong)uVar35 >> 8);
          auVar1[10] = (char)((ulong)uVar35 >> 0x10);
          auVar1[0xb] = (char)((ulong)uVar35 >> 0x18);
          auVar1[0xc] = (char)((ulong)uVar35 >> 0x20);
          auVar1[0xd] = (char)((ulong)uVar35 >> 0x28);
          auVar1[0xe] = (char)((ulong)uVar35 >> 0x30);
          auVar1[0xf] = (char)((ulong)uVar35 >> 0x38);
          uVar21 = NEON_uqxtn(uVar35,auVar1,2);
          *puVar16 = uVar21;
          iVar5 = *param_7;
          puVar16 = puVar16 + 1;
        } while (iVar8 < iVar5 + -7);
      }
      if (iVar8 < iVar5 + -3) {
        lVar10 = (long)iVar8;
        pbVar13 = (byte *)((long)param_3 + lVar10);
        pbVar15 = (byte *)((long)param_1 + lVar10);
        puVar11 = (undefined1 *)((long)param_5 + lVar10);
        do {
          fVar38 = fVar46 * *(float *)(PTR_DAT_00501fd0 + (long)(int)(pbVar13[1] + 0x80) * 4) +
                   fVar44 * *(float *)(PTR_DAT_00501fd0 + (long)(int)(pbVar15[1] + 0x80) * 4) +
                   fVar48;
          lVar10 = lrintf(fVar46 * *(float *)(PTR_DAT_00501fd0 + (long)(int)(*pbVar13 + 0x80) * 4) +
                          fVar44 * *(float *)(PTR_DAT_00501fd0 + (long)(int)(*pbVar15 + 0x80) * 4) +
                          fVar48);
          uVar6 = (uint)lVar10;
          if (0xff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          *puVar11 = (char)uVar6;
          lVar10 = lrintf(fVar38);
          uVar6 = (uint)lVar10;
          if (0xff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          puVar11[1] = (char)uVar6;
          auVar34 = ZEXT416((uint)(fVar46 * *(float *)(PTR_DAT_00501fd0 +
                                                      (long)(int)(pbVar13[3] + 0x80) * 4) +
                                   fVar44 * *(float *)(PTR_DAT_00501fd0 +
                                                      (long)(int)(pbVar15[3] + 0x80) * 4) + fVar48))
          ;
          lVar10 = lrintf(fVar46 * *(float *)(PTR_DAT_00501fd0 + (long)(int)(pbVar13[2] + 0x80) * 4)
                          + fVar44 * *(float *)(PTR_DAT_00501fd0 +
                                               (long)(int)(pbVar15[2] + 0x80) * 4) + fVar48);
          uVar6 = (uint)lVar10;
          if (0xff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          puVar11[2] = (char)uVar6;
          lVar10 = lrintf(auVar34._0_4_);
          uVar6 = (uint)lVar10;
          if (0xff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          puVar11[3] = (char)uVar6;
          iVar8 = iVar8 + 4;
          pbVar15 = pbVar15 + 4;
          iVar5 = *param_7;
          pbVar13 = pbVar13 + 4;
          puVar11 = puVar11 + 4;
        } while (iVar8 < iVar5 + -3);
      }
      if (iVar8 < iVar5) {
        lVar10 = 0;
        lVar14 = (long)iVar8;
        do {
          lVar7 = lrintf(fVar46 * *(float *)(PTR_DAT_00501fd0 +
                                            (long)(int)(*(byte *)((long)param_3 + lVar10 + lVar14) +
                                                       0x80) * 4) +
                         fVar44 * *(float *)(PTR_DAT_00501fd0 +
                                            (long)(int)(*(byte *)((long)param_1 + lVar10 + lVar14) +
                                                       0x80) * 4) + fVar48);
          uVar6 = (uint)lVar7;
          if (0xff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          iVar8 = iVar8 + 1;
          *(char *)((long)param_5 + lVar10 + lVar14) = (char)uVar6;
          lVar10 = lVar10 + 1;
          iVar5 = *param_7;
        } while (iVar8 < iVar5);
      }
      iVar8 = param_7[1];
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_3 = (undefined8 *)((long)param_3 + param_4);
      param_5 = (undefined8 *)((long)param_5 + param_6);
      param_7[1] = iVar8 + -1;
    } while (iVar8 != 0);
  }
  return;
}


==================================================================

### FUNC 00244800 (1236 bytes) name=FUN_00244800

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00244800(undefined8 *param_1,long param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined4 uVar3;
  undefined6 uVar4;
  undefined1 auVar5 [16];
  short sVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  undefined1 auVar11 [16];
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  long lVar16;
  long lVar17;
  undefined1 uVar18;
  int iVar19;
  undefined8 *puVar20;
  char *pcVar21;
  undefined8 *puVar22;
  long lVar23;
  undefined1 *puVar24;
  char *pcVar25;
  undefined8 *puVar26;
  char cVar27;
  char cVar28;
  char cVar29;
  char cVar30;
  char cVar31;
  float fVar32;
  undefined8 uVar33;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  byte bVar41;
  byte bVar42;
  char cVar43;
  byte bVar44;
  byte bVar45;
  byte bVar46;
  byte bVar47;
  undefined1 auVar48 [16];
  undefined8 uVar49;
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  float fVar52;
  float fVar53;
  float fVar54;
  undefined1 uVar55;
  undefined1 uVar56;
  undefined1 uVar57;
  int iVar58;
  float fStack_4c;
  undefined1 auVar34 [12];
  undefined1 auVar35 [16];
  
  iVar58 = param_7[1];
  iVar1 = *param_7;
  fVar52 = (float)*param_8;
  fVar53 = (float)param_8[1];
  fVar54 = (float)param_8[2];
  if (iVar58 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar19 = 0;
      }
      else {
        iVar19 = 0;
        puVar20 = param_3;
        puVar22 = param_1;
        puVar26 = param_5;
        do {
          uVar33 = *puVar22;
          cVar43 = (char)((ulong)uVar33 >> 0x38);
          cVar27 = (char)((ulong)uVar33 >> 8);
          cVar28 = (char)((ulong)uVar33 >> 0x10);
          cVar29 = (char)((ulong)uVar33 >> 0x18);
          cVar30 = (char)((ulong)uVar33 >> 0x28);
          cVar31 = (char)((ulong)uVar33 >> 0x30);
          uVar3 = CONCAT13(cVar27 >> 7,CONCAT12(cVar27,(short)(char)uVar33));
          uVar4 = CONCAT15(cVar28 >> 7,CONCAT14(cVar28,uVar3));
          auVar37._0_4_ = (int)(short)(char)uVar33;
          auVar37._4_4_ = (int)(short)((uint)uVar3 >> 0x10);
          auVar37._8_4_ = (int)(short)((uint6)uVar4 >> 0x20);
          auVar37._12_4_ = (int)(short)(CONCAT17(cVar29 >> 7,CONCAT16(cVar29,uVar4)) >> 0x30);
          auVar37 = NEON_scvtf(auVar37,4);
          uVar49 = *puVar20;
          sVar6 = (short)(char)((ulong)uVar33 >> 0x20);
          uVar3 = CONCAT13(cVar30 >> 7,CONCAT12(cVar30,sVar6));
          uVar4 = CONCAT15(cVar31 >> 7,CONCAT14(cVar31,uVar3));
          auVar51._0_4_ = (int)sVar6;
          auVar51._4_4_ = (int)(short)((uint)uVar3 >> 0x10);
          auVar51._8_4_ = (int)(short)((uint6)uVar4 >> 0x20);
          auVar51._12_4_ = (int)(short)(CONCAT17(cVar43 >> 7,CONCAT16(cVar43,uVar4)) >> 0x30);
          auVar38._4_4_ = (int)(short)(char)((ulong)uVar49 >> 8);
          auVar38._0_4_ = (int)(short)(char)uVar49;
          auVar38._8_4_ = (int)(short)(char)((ulong)uVar49 >> 0x10);
          auVar38._12_4_ = (int)(short)(char)((ulong)uVar49 >> 0x18);
          auVar38 = NEON_scvtf(auVar38,4);
          auVar50._0_4_ = (int)(short)(char)((ulong)uVar49 >> 0x20);
          auVar50._4_4_ = (int)(short)(char)((ulong)uVar49 >> 0x28);
          auVar50._8_4_ = (int)(short)(char)((ulong)uVar49 >> 0x30);
          auVar50._12_4_ = (int)(short)(char)((ulong)uVar49 >> 0x38);
          auVar48 = NEON_scvtf(auVar51,4);
          auVar51 = NEON_scvtf(auVar50,4);
          fVar7 = auVar48._0_4_ * fVar52 + auVar51._0_4_ * fVar53 + fVar54;
          fVar8 = auVar48._4_4_ * fVar52 + auVar51._4_4_ * fVar53 + fVar54;
          bVar41 = (byte)((uint)fVar8 >> 8);
          bVar42 = (byte)((uint)fVar8 >> 0x10);
          bVar44 = (byte)((uint)fVar8 >> 0x18);
          fVar9 = auVar48._8_4_ * fVar52 + auVar51._8_4_ * fVar53 + fVar54;
          fVar10 = auVar48._12_4_ * fVar52 + auVar51._12_4_ * fVar53 + fVar54;
          bVar45 = (byte)((uint)fVar10 >> 8);
          bVar46 = (byte)((uint)fVar10 >> 0x10);
          bVar47 = (byte)((uint)fVar10 >> 0x18);
          auVar48._0_8_ =
               CONCAT44(auVar37._4_4_ * fVar52 + auVar38._4_4_ * fVar53 + fVar54,
                        auVar37._0_4_ * fVar52 + auVar38._0_4_ * fVar53 + fVar54);
          auVar48._8_4_ = auVar37._8_4_ * fVar52 + auVar38._8_4_ * fVar53 + fVar54;
          auVar48._12_4_ = auVar37._12_4_ * fVar52 + auVar38._12_4_ * fVar53 + fVar54;
          fStack_4c = (float)(CONCAT17(bVar44,CONCAT16(bVar42,CONCAT15(bVar41,CONCAT14(SUB41(fVar8,0
                                                  ),fVar7)))) >> 0x20);
          if ((DAT_00531ed0 & 1) == 0) {
            uVar33 = auVar48._8_8_;
            iVar15 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar48._8_8_ = uVar33;
            if (iVar15 != 0) {
              auVar39._8_4_ = 0x80000000;
              auVar39._0_8_ = 0x8000000080000000;
              auVar39._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar39._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar15 = __cxa_guard_acquire(&DAT_00531ec8), iVar15 != 0)) {
            bRam0000000000531ea8 = 0;
            bRam0000000000531ea9 = 0;
            bRam0000000000531eaa = 0;
            bRam0000000000531eab = 0x3f;
            bRam0000000000531eac = 0;
            bRam0000000000531ead = 0;
            bRam0000000000531eae = 0;
            bRam0000000000531eaf = 0x3f;
            DAT_00531ea0 = 0;
            bRam0000000000531ea1 = 0;
            bRam0000000000531ea2 = 0;
            bRam0000000000531ea3 = 0x3f;
            bRam0000000000531ea4 = 0;
            bRam0000000000531ea5 = 0;
            bRam0000000000531ea6 = 0;
            bRam0000000000531ea7 = 0x3f;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = (int)(auVar48._0_4_ +
                        (float)CONCAT13(auVar48[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                        bRam0000000000531ea3,
                                        CONCAT12(auVar48[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                 bRam0000000000531ea2,
                                                 CONCAT11(auVar48[1] &
                                                          (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                          bRam0000000000531ea1,
                                                          auVar48[0] & (byte)_DAT_00531eb0 |
                                                          DAT_00531ea0))));
          iVar12 = (int)(auVar48._4_4_ +
                        (float)CONCAT13(auVar48[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                        bRam0000000000531ea7,
                                        CONCAT12(auVar48[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                 bRam0000000000531ea6,
                                                 CONCAT11(auVar48[5] &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                          bRam0000000000531ea5,
                                                          auVar48[4] &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                          bRam0000000000531ea4))));
          uVar55 = (undefined1)((uint)iVar12 >> 8);
          uVar56 = (undefined1)((uint)iVar12 >> 0x10);
          uVar57 = (undefined1)((uint)iVar12 >> 0x18);
          iVar13 = (int)(auVar48._8_4_ +
                        (float)CONCAT13(auVar48[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18)
                                        | bRam0000000000531eab,
                                        CONCAT12(auVar48[10] &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                                 bRam0000000000531eaa,
                                                 CONCAT11(auVar48[9] &
                                                          (byte)((ulong)_uRam0000000000531eb8 >> 8)
                                                          | bRam0000000000531ea9,
                                                          auVar48[8] & (byte)_uRam0000000000531eb8 |
                                                          bRam0000000000531ea8))));
          iVar14 = (int)(auVar48._12_4_ +
                        (float)CONCAT13(auVar48[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38)
                                        | bRam0000000000531eaf,
                                        CONCAT12(auVar48[0xe] &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                                 bRam0000000000531eae,
                                                 CONCAT11(auVar48[0xd] &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x28) | bRam0000000000531ead,
                                                          auVar48[0xc] &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x20) | bRam0000000000531eac))));
          auVar11[4] = (char)iVar12;
          auVar11._0_4_ = iVar15;
          auVar11[5] = uVar55;
          auVar11[6] = uVar56;
          auVar11[7] = uVar57;
          auVar11[8] = (char)iVar13;
          auVar11[9] = (char)((uint)iVar13 >> 8);
          auVar11[10] = (char)((uint)iVar13 >> 0x10);
          auVar11[0xb] = (char)((uint)iVar13 >> 0x18);
          auVar11[0xc] = (char)iVar14;
          auVar11[0xd] = (char)((uint)iVar14 >> 8);
          auVar11[0xe] = (char)((uint)iVar14 >> 0x10);
          auVar11[0xf] = (char)((uint)iVar14 >> 0x18);
          uVar33 = NEON_sqxtn(CONCAT17(uVar57,CONCAT16(uVar56,CONCAT15(uVar55,CONCAT14((char)iVar12,
                                                                                       iVar15)))),
                              auVar11,4);
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar15 = __cxa_guard_acquire(&DAT_00531ed0), iVar15 != 0)) {
            auVar40._8_4_ = 0x80000000;
            auVar40._0_8_ = 0x8000000080000000;
            auVar40._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar40._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar15 = __cxa_guard_acquire(&DAT_00531ec8), iVar15 != 0)) {
            bRam0000000000531ea8 = 0;
            bRam0000000000531ea9 = 0;
            bRam0000000000531eaa = 0;
            bRam0000000000531eab = 0x3f;
            bRam0000000000531eac = 0;
            bRam0000000000531ead = 0;
            bRam0000000000531eae = 0;
            bRam0000000000531eaf = 0x3f;
            DAT_00531ea0 = 0;
            bRam0000000000531ea1 = 0;
            bRam0000000000531ea2 = 0;
            bRam0000000000531ea3 = 0x3f;
            bRam0000000000531ea4 = 0;
            bRam0000000000531ea5 = 0;
            bRam0000000000531ea6 = 0;
            bRam0000000000531ea7 = 0x3f;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar19 = iVar19 + 8;
          puVar22 = puVar22 + 1;
          puVar20 = puVar20 + 1;
          fVar32 = (float)CONCAT13((byte)((uint)fVar7 >> 0x18) & bRam0000000000531eb3 |
                                   bRam0000000000531ea3,
                                   CONCAT12((byte)((uint)fVar7 >> 0x10) & bRam0000000000531eb2 |
                                            bRam0000000000531ea2,
                                            CONCAT11((byte)((uint)fVar7 >> 8) & DAT_00531eb0_1 |
                                                     bRam0000000000531ea1,
                                                     SUB41(fVar7,0) & DAT_00531eb0 | DAT_00531ea0)))
          ;
          auVar34._0_8_ =
               CONCAT17(bVar44 & bRam0000000000531eb7 | bRam0000000000531ea7,
                        CONCAT16(bVar42 & bRam0000000000531eb6 | bRam0000000000531ea6,
                                 CONCAT15(bVar41 & bRam0000000000531eb5 | bRam0000000000531ea5,
                                          CONCAT14(SUB41(fVar8,0) & bRam0000000000531eb4 |
                                                   bRam0000000000531ea4,fVar32))));
          auVar34[8] = SUB41(fVar9,0) & (byte)uRam0000000000531eb8 | bRam0000000000531ea8;
          auVar34[9] = (byte)((uint)fVar9 >> 8) & uRam0000000000531eb8._1_1_ | bRam0000000000531ea9;
          auVar34[10] = (byte)((uint)fVar9 >> 0x10) & bRam0000000000531eba | bRam0000000000531eaa;
          auVar34[0xb] = (byte)((uint)fVar9 >> 0x18) & bRam0000000000531ebb | bRam0000000000531eab;
          auVar35[0xc] = SUB41(fVar10,0) & bRam0000000000531ebc | bRam0000000000531eac;
          auVar35._0_12_ = auVar34;
          auVar35[0xd] = bVar45 & bRam0000000000531ebd | bRam0000000000531ead;
          auVar35[0xe] = bVar46 & bRam0000000000531ebe | bRam0000000000531eae;
          auVar35[0xf] = bVar47 & bRam0000000000531ebf | bRam0000000000531eaf;
          auVar36._0_8_ =
               CONCAT44((int)(fStack_4c + (float)((ulong)auVar34._0_8_ >> 0x20)),
                        (int)(fVar7 + fVar32));
          auVar36._8_4_ = (int)(fVar9 + auVar34._8_4_);
          auVar36._12_4_ =
               (int)((float)(CONCAT17(bVar47,CONCAT16(bVar46,CONCAT15(bVar45,CONCAT14(SUB41(fVar10,0
                                                  ),fVar9)))) >> 0x20) + auVar35._12_4_);
          uVar49 = NEON_sqxtn(auVar36._0_8_,auVar36,4);
          auVar5[8] = (char)uVar49;
          auVar5._0_8_ = uVar33;
          auVar5[9] = (char)((ulong)uVar49 >> 8);
          auVar5[10] = (char)((ulong)uVar49 >> 0x10);
          auVar5[0xb] = (char)((ulong)uVar49 >> 0x18);
          auVar5[0xc] = (char)((ulong)uVar49 >> 0x20);
          auVar5[0xd] = (char)((ulong)uVar49 >> 0x28);
          auVar5[0xe] = (char)((ulong)uVar49 >> 0x30);
          auVar5[0xf] = (char)((ulong)uVar49 >> 0x38);
          uVar33 = NEON_sqxtn(uVar49,auVar5,2);
          *puVar26 = uVar33;
          puVar26 = puVar26 + 1;
        } while (iVar19 < iVar1 + -7);
      }
      if (iVar19 < iVar1 + -3) {
        lVar23 = (long)iVar19;
        pcVar21 = (char *)((long)param_1 + lVar23);
        pcVar25 = (char *)((long)param_3 + lVar23);
        uVar2 = (uint)((iVar1 + -4) - iVar19) >> 2;
        puVar24 = (undefined1 *)((long)param_5 + lVar23);
        do {
          lVar16 = lrintf(fVar54 + fVar53 * (float)(int)*pcVar25 + (float)(int)*pcVar21 * fVar52);
          uVar56 = 0x80;
          uVar57 = 0x7f;
          uVar55 = (char)lVar16;
          if ((0xff < (int)lVar16 + 0x80U) && (uVar55 = uVar57, (int)lVar16 < 1)) {
            uVar55 = uVar56;
          }
          lVar16 = lrintf(fVar54 + fVar53 * (float)(int)pcVar25[1] + (float)(int)pcVar21[1] * fVar52
                         );
          uVar18 = (char)lVar16;
          if ((0xff < (int)lVar16 + 0x80U) && (uVar18 = uVar57, (int)lVar16 < 1)) {
            uVar18 = uVar56;
          }
          *puVar24 = uVar55;
          puVar24[1] = uVar18;
          lVar16 = lrintf(fVar54 + fVar53 * (float)(int)pcVar25[2] + (float)(int)pcVar21[2] * fVar52
                         );
          uVar55 = (char)lVar16;
          if ((0xff < (int)lVar16 + 0x80U) && (uVar55 = uVar57, (int)lVar16 < 1)) {
            uVar55 = uVar56;
          }
          lVar16 = lrintf(fVar54 + fVar53 * (float)(int)pcVar25[3] + (float)(int)pcVar21[3] * fVar52
                         );
          uVar18 = (char)lVar16;
          if ((0xff < (int)lVar16 + 0x80U) && (uVar18 = uVar57, (int)lVar16 < 1)) {
            uVar18 = uVar56;
          }
          pcVar21 = pcVar21 + 4;
          puVar24[2] = uVar55;
          pcVar25 = pcVar25 + 4;
          puVar24[3] = uVar18;
          puVar24 = puVar24 + 4;
        } while (pcVar21 != (char *)((long)param_1 + lVar23 + 4 + (ulong)uVar2 * 4));
        iVar19 = iVar19 + 4 + uVar2 * 4;
      }
      if (iVar19 < iVar1) {
        lVar23 = 0;
        lVar16 = (long)iVar19;
        do {
          lVar17 = lrintf(fVar54 + fVar53 * (float)(int)*(char *)((long)param_3 + lVar23 + lVar16) +
                                   (float)(int)*(char *)((long)param_1 + lVar23 + lVar16) * fVar52);
          uVar55 = (undefined1)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar55 = 0x7f, (int)lVar17 < 1)) {
            uVar55 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar23 + lVar16) = uVar55;
          lVar23 = lVar23 + 1;
        } while (lVar23 != (ulong)(uint)((iVar1 + -1) - iVar19) + 1);
      }
      iVar58 = iVar58 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_3 = (undefined8 *)((long)param_3 + param_4);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar58 != 0);
  }
  return;
}


==================================================================

### FUNC 00244cd4 (1316 bytes) name=FUN_00244cd4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00244cd4(undefined1 (*param_1) [16],ulong param_2,undefined8 *param_3,ulong param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  undefined2 uVar5;
  undefined8 *puVar6;
  short *psVar7;
  ulong uVar8;
  undefined1 (*pauVar9) [16];
  long lVar10;
  undefined2 *puVar11;
  short *psVar12;
  ulong uVar13;
  undefined2 uVar14;
  undefined8 *puVar15;
  undefined2 uVar16;
  undefined2 uVar17;
  undefined8 uVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  float fVar27;
  float fVar28;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined8 uVar31;
  char cVar32;
  char cVar33;
  char cVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  undefined8 uVar38;
  short *psVar39;
  undefined1 auVar40 [12];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  int iVar44;
  float local_60;
  float fStack_5c;
  undefined1 auVar41 [16];
  
  iVar2 = *param_7;
  iVar44 = param_7[1];
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  fVar37 = (float)param_8[2];
  if (iVar44 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        uVar13 = 0;
      }
      else {
        uVar13 = 0;
        puVar6 = param_3;
        pauVar9 = param_1;
        puVar15 = param_5;
        do {
          auVar21 = *pauVar9;
          uVar18 = puVar6[1];
          uVar38 = *puVar6;
          auVar29._0_4_ = (int)auVar21._0_2_;
          auVar29._4_4_ = (int)auVar21._2_2_;
          auVar29._8_4_ = (int)auVar21._4_2_;
          auVar29._12_4_ = (int)auVar21._6_2_;
          auVar43._0_4_ = (int)(short)uVar38;
          auVar43._4_4_ = (int)(short)((ulong)uVar38 >> 0x10);
          auVar43._8_4_ = (int)(short)((ulong)uVar38 >> 0x20);
          auVar43._12_4_ = (int)(short)((ulong)uVar38 >> 0x30);
          auVar29 = NEON_scvtf(auVar29,4);
          auVar43 = NEON_scvtf(auVar43,4);
          auVar30._0_8_ =
               CONCAT44(auVar29._4_4_ * fVar35 + auVar43._4_4_ * fVar36 + fVar37,
                        auVar29._0_4_ * fVar35 + auVar43._0_4_ * fVar36 + fVar37);
          auVar30._8_4_ = auVar29._8_4_ * fVar35 + auVar43._8_4_ * fVar36 + fVar37;
          auVar30._12_4_ = auVar29._12_4_ * fVar35 + auVar43._12_4_ * fVar36 + fVar37;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar31 = auVar30._8_8_;
            iVar3 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar30._8_8_ = uVar31;
            if (iVar3 != 0) {
              auVar25._8_4_ = 0x80000000;
              auVar25._0_8_ = 0x8000000080000000;
              auVar25._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar25._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar3 = __cxa_guard_acquire(&DAT_00531ec8), iVar3 != 0))
          {
            auVar19._8_4_ = 0x3f000000;
            auVar19._0_8_ = 0x3f0000003f000000;
            auVar19._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar19._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(auVar19,uVar38,&DAT_00531ec8);
          }
          auVar20._0_4_ = (int)auVar21._8_2_;
          auVar20._4_4_ = (int)auVar21._10_2_;
          auVar20._8_4_ = (int)auVar21._12_2_;
          auVar20._12_4_ = (int)auVar21._14_2_;
          auVar29 = NEON_scvtf(auVar20,4);
          cVar32 = (char)((short)((ulong)uVar18 >> 0x10) >> 0xf);
          cVar33 = (char)((short)((ulong)uVar18 >> 0x20) >> 0xf);
          cVar34 = (char)((long)uVar18 >> 0x3f);
          auVar21[3] = (undefined1)((short)uVar18 >> 0xf);
          auVar21._0_3_ = (int3)(short)uVar18;
          auVar21[4] = (char)((ulong)uVar18 >> 0x10);
          auVar21[5] = (char)((ulong)uVar18 >> 0x18);
          auVar21[6] = cVar32;
          auVar21[7] = cVar32;
          auVar21[8] = (char)((ulong)uVar18 >> 0x20);
          auVar21[9] = (char)((ulong)uVar18 >> 0x28);
          auVar21[10] = cVar33;
          auVar21[0xb] = cVar33;
          auVar21[0xc] = (char)((ulong)uVar18 >> 0x30);
          auVar21[0xd] = (char)((ulong)uVar18 >> 0x38);
          auVar21[0xe] = cVar34;
          auVar21[0xf] = cVar34;
          auVar21 = NEON_scvtf(auVar21,4);
          fVar27 = (float)CONCAT13(auVar30[3] & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12(auVar30[2] & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11(auVar30[1] & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     auVar30[0] & DAT_00531eb0 | (byte)_DAT_00531ea0
                                                    )));
          auVar40._0_8_ =
               CONCAT17(auVar30[7] & bRam0000000000531eb7 | (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16(auVar30[6] & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15(auVar30[5] & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(auVar30[4] & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar27))));
          auVar40[8] = auVar30[8] & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar40[9] = auVar30[9] & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar40[10] = auVar30[10] & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar40[0xb] = auVar30[0xb] & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar41[0xc] = auVar30[0xc] & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar41._0_12_ = auVar40;
          auVar41[0xd] = auVar30[0xd] & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar41[0xe] = auVar30[0xe] & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar41[0xf] = auVar30[0xf] & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar22._0_4_ = auVar29._0_4_ * fVar35 + auVar21._0_4_ * fVar36 + fVar37;
          auVar22._4_4_ = auVar29._4_4_ * fVar35 + auVar21._4_4_ * fVar36 + fVar37;
          auVar22._8_4_ = auVar29._8_4_ * fVar35 + auVar21._8_4_ * fVar36 + fVar37;
          auVar22._12_4_ = auVar29._12_4_ * fVar35 + auVar21._12_4_ * fVar36 + fVar37;
          auVar42._0_8_ =
               CONCAT44((int)(auVar30._4_4_ + (float)((ulong)auVar40._0_8_ >> 0x20)),
                        (int)(auVar30._0_4_ + fVar27));
          auVar42._8_4_ = (int)(auVar30._8_4_ + auVar40._8_4_);
          auVar42._12_4_ = (int)(auVar30._12_4_ + auVar41._12_4_);
          uVar38 = NEON_sqxtn(auVar42._0_8_,auVar42,4);
          if ((DAT_00531ed0 & 1) == 0) {
            uVar18 = auVar22._8_8_;
            iVar3 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar22._8_8_ = uVar18;
            if (iVar3 != 0) {
              auVar26._8_4_ = 0x80000000;
              auVar26._0_8_ = 0x8000000080000000;
              auVar26._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar26._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          local_60 = auVar22._0_4_;
          fStack_5c = auVar22._4_4_;
          if (((DAT_00531ec8 & 1) == 0) && (iVar3 = __cxa_guard_acquire(&DAT_00531ec8), iVar3 != 0))
          {
            auVar23._8_4_ = 0x3f000000;
            auVar23._0_8_ = 0x3f0000003f000000;
            auVar23._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar23._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar1 = (int)uVar13 + 8;
          uVar13 = (ulong)uVar1;
          pauVar9 = pauVar9 + 1;
          puVar6 = puVar6 + 2;
          fVar27 = (float)CONCAT13(auVar22[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12(auVar22[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11(auVar22[1] & (byte)((ulong)_DAT_00531eb0 >> 8)
                                                     | (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     auVar22[0] & (byte)_DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          fVar28 = (float)CONCAT13(auVar22[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                   (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                   CONCAT12(auVar22[10] &
                                            (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                            (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                            CONCAT11(auVar22[9] &
                                                     (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                     (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                     auVar22[8] & (byte)_uRam0000000000531eb8 |
                                                     (byte)uRam0000000000531ea8)));
          auVar24._0_8_ =
               CONCAT44((int)(fStack_5c +
                             (float)(CONCAT17(auVar22[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                              (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                              CONCAT16(auVar22[6] &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                       (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                       CONCAT15(auVar22[5] &
                                                                (byte)((ulong)_DAT_00531eb0 >> 0x28)
                                                                | (byte)((ulong)_DAT_00531ea0 >>
                                                                        0x28),
                                                                CONCAT14(auVar22[4] &
                                                                         (byte)((ulong)_DAT_00531eb0
                                                                               >> 0x20) |
                                                                         (byte)((ulong)_DAT_00531ea0
                                                                               >> 0x20),fVar27))))
                                    >> 0x20)),(int)(local_60 + fVar27));
          auVar24._8_4_ = (int)(auVar22._8_4_ + fVar28);
          auVar24._12_4_ =
               (int)(auVar22._12_4_ +
                    (float)(CONCAT17(auVar22[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                     (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                     CONCAT16(auVar22[0xe] &
                                              (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                              (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                              CONCAT15(auVar22[0xd] &
                                                       (byte)((ulong)_uRam0000000000531eb8 >> 0x28)
                                                       | (byte)((ulong)uRam0000000000531ea8 >> 0x28)
                                                       ,CONCAT14(auVar22[0xc] &
                                                                 (byte)((ulong)_uRam0000000000531eb8
                                                                       >> 0x20) |
                                                                 (byte)((ulong)uRam0000000000531ea8
                                                                       >> 0x20),fVar28)))) >> 0x20))
          ;
          uVar18 = NEON_sqxtn(auVar24._0_8_,auVar24,4);
          puVar15[1] = uVar18;
          *puVar15 = uVar38;
          puVar15 = puVar15 + 2;
        } while ((int)uVar1 < iVar2 + -7);
      }
      iVar3 = (int)uVar13;
      if (iVar3 < iVar2 + -3) {
        lVar10 = (long)iVar3 * 2;
        uVar1 = (uint)((iVar2 + -4) - iVar3) >> 2;
        psVar7 = (short *)(*param_1 + lVar10);
        psVar12 = (short *)((long)param_3 + lVar10);
        puVar11 = (undefined2 *)((long)param_5 + lVar10);
        psVar39 = (short *)(*param_1 + (long)iVar3 * 2 + 8 + (ulong)uVar1 * 8);
        do {
          lVar10 = lrintf(fVar37 + fVar36 * (float)(int)*psVar12 + (float)(int)*psVar7 * fVar35);
          uVar14 = 0x8000;
          uVar16 = 0x7fff;
          uVar17 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar17 = uVar16, (int)lVar10 < 1)) {
            uVar17 = uVar14;
          }
          lVar10 = lrintf(fVar37 + fVar36 * (float)(int)psVar12[1] + (float)(int)psVar7[1] * fVar35)
          ;
          uVar5 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar5 = uVar16, (int)lVar10 < 1)) {
            uVar5 = uVar14;
          }
          *puVar11 = uVar17;
          puVar11[1] = uVar5;
          lVar10 = lrintf(fVar37 + fVar36 * (float)(int)psVar12[2] + (float)(int)psVar7[2] * fVar35)
          ;
          uVar17 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar17 = uVar16, (int)lVar10 < 1)) {
            uVar17 = uVar14;
          }
          lVar10 = lrintf(fVar37 + fVar36 * (float)(int)psVar12[3] + (float)(int)psVar7[3] * fVar35)
          ;
          uVar5 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar5 = uVar16, (int)lVar10 < 1)) {
            uVar5 = uVar14;
          }
          psVar7 = psVar7 + 4;
          puVar11[2] = uVar17;
          psVar12 = psVar12 + 4;
          puVar11[3] = uVar5;
          puVar11 = puVar11 + 4;
        } while (psVar7 != psVar39);
        uVar13 = (ulong)(iVar3 + 4 + uVar1 * 4);
      }
      if ((int)uVar13 < iVar2) {
        uVar8 = -(uVar13 >> 0x1f) & 0xfffffffe00000000 | uVar13 << 1;
        lVar10 = 0;
        do {
          lVar4 = lrintf(fVar37 + fVar36 * (float)(int)*(short *)((long)param_3 + lVar10 + uVar8) +
                                  (float)(int)*(short *)(*param_1 + lVar10 + uVar8) * fVar35);
          uVar17 = (undefined2)lVar4;
          if ((0xffff < (int)lVar4 + 0x8000U) && (uVar17 = 0x7fff, (int)lVar4 < 1)) {
            uVar17 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar10 + uVar8) = uVar17;
          lVar10 = lVar10 + 2;
        } while (lVar10 != ((ulong)(uint)((iVar2 + -1) - (int)uVar13) + 1) * 2);
      }
      iVar44 = iVar44 + -1;
      param_1 = (undefined1 (*) [16])(*param_1 + (param_2 & 0xfffffffffffffffe));
      param_3 = (undefined8 *)((long)param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar44 != 0);
  }
  return;
}


==================================================================

### FUNC 002451f8 (904 bytes) name=FUN_002451f8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002451f8(undefined8 param_1,undefined8 param_2,short *param_3,ulong param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  undefined1 auVar3 [16];
  char cVar4;
  int iVar5;
  long lVar6;
  undefined2 uVar7;
  ulong uVar8;
  ulong uVar9;
  short *psVar10;
  long lVar11;
  undefined8 *puVar12;
  long lVar13;
  float fVar14;
  undefined8 uVar15;
  undefined1 auVar17 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  short sVar23;
  short sVar27;
  short sVar28;
  short sVar29;
  short sVar30;
  undefined1 auVar24 [12];
  short sVar31;
  short sVar32;
  short sVar33;
  undefined1 auVar26 [16];
  float fVar34;
  float fVar36;
  float fVar37;
  undefined1 auVar35 [16];
  float fVar38;
  undefined8 uVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  float fVar44;
  double dVar45;
  int iVar46;
  undefined1 auVar16 [12];
  undefined1 auVar18 [16];
  undefined1 auVar25 [16];
  
  iVar2 = *param_7;
  dVar45 = *param_8;
  iVar46 = param_7[1];
  cVar4 = cv::checkHardwareSupport(3);
  if (cVar4 == '\0') {
    cVar4 = cv::checkHardwareSupport(100);
  }
  fVar44 = (float)dVar45;
  if (iVar46 != 0) {
    do {
      uVar9 = 0;
      if ((cVar4 != '\0') && (psVar10 = param_3, puVar12 = param_5, 0 < iVar2 + -7)) {
        do {
          sVar23 = *psVar10;
          sVar27 = psVar10[1];
          sVar28 = psVar10[2];
          sVar29 = psVar10[3];
          sVar30 = psVar10[4];
          sVar31 = psVar10[5];
          sVar32 = psVar10[6];
          sVar33 = psVar10[7];
          auVar35._0_4_ = (int)sVar30;
          auVar35._4_4_ = (int)sVar31;
          auVar35._8_4_ = (int)sVar32;
          auVar35._12_4_ = (int)sVar33;
          auVar40 = NEON_scvtf(auVar35,4);
          auVar26._0_4_ = (int)sVar23;
          auVar26._4_4_ = (int)sVar27;
          auVar26._8_4_ = (int)sVar28;
          auVar26._12_4_ = (int)sVar29;
          auVar21 = NEON_scvtf(auVar26,4);
          auVar41 = NEON_frecpe(auVar40,4);
          auVar35 = NEON_frecpe(auVar21,4);
          auVar43 = NEON_frecps(auVar40,auVar41,4);
          auVar26 = NEON_frecps(auVar21,auVar35,4);
          auVar42._0_4_ = auVar41._0_4_ * auVar43._0_4_;
          auVar42._4_4_ = auVar41._4_4_ * auVar43._4_4_;
          auVar42._8_4_ = auVar41._8_4_ * auVar43._8_4_;
          auVar42._12_4_ = auVar41._12_4_ * auVar43._12_4_;
          auVar41._0_4_ = auVar35._0_4_ * auVar26._0_4_;
          auVar41._4_4_ = auVar35._4_4_ * auVar26._4_4_;
          auVar41._8_4_ = auVar35._8_4_ * auVar26._8_4_;
          auVar41._12_4_ = auVar35._12_4_ * auVar26._12_4_;
          auVar35 = NEON_frecps(auVar40,auVar42,4);
          auVar26 = NEON_frecps(auVar21,auVar41,4);
          fVar34 = fVar44 * auVar42._0_4_ * auVar35._0_4_;
          fVar36 = fVar44 * auVar42._4_4_ * auVar35._4_4_;
          fVar37 = fVar44 * auVar42._8_4_ * auVar35._8_4_;
          fVar38 = fVar44 * auVar42._12_4_ * auVar35._12_4_;
          auVar21._0_8_ =
               CONCAT44(fVar44 * auVar41._4_4_ * auVar26._4_4_,
                        fVar44 * auVar41._0_4_ * auVar26._0_4_);
          auVar21._8_4_ = fVar44 * auVar41._8_4_ * auVar26._8_4_;
          auVar21._12_4_ = fVar44 * auVar41._12_4_ * auVar26._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar15 = auVar21._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531f08);
            auVar21._8_8_ = uVar15;
            if (iVar5 != 0) {
              auVar40._8_4_ = 0x80000000;
              auVar40._0_8_ = 0x8000000080000000;
              auVar40._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar40._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f00), iVar5 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar43[1] = bRam0000000000531ee1;
          auVar43[0] = DAT_00531ee0;
          auVar43[2] = bRam0000000000531ee2;
          auVar43[3] = bRam0000000000531ee3;
          auVar43[4] = bRam0000000000531ee4;
          auVar43[5] = bRam0000000000531ee5;
          auVar43[6] = bRam0000000000531ee6;
          auVar43[7] = bRam0000000000531ee7;
          auVar43[8] = bRam0000000000531ee8;
          auVar43[9] = bRam0000000000531ee9;
          auVar43[10] = bRam0000000000531eea;
          auVar43[0xb] = bRam0000000000531eeb;
          auVar43[0xc] = bRam0000000000531eec;
          auVar43[0xd] = bRam0000000000531eed;
          auVar43[0xe] = bRam0000000000531eee;
          auVar43[0xf] = bRam0000000000531eef;
          fVar14 = (float)CONCAT13(auVar21[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar21[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar21[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar21[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar24._0_8_ =
               CONCAT17(auVar21[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar21[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar21[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar21[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar14))));
          auVar24[8] = auVar21[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar24[9] = auVar21[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar24[10] = auVar21[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar24[0xb] = auVar21[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar25[0xc] = auVar21[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar25._0_12_ = auVar24;
          auVar25[0xd] = auVar21[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar25[0xe] = auVar21[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar25[0xf] = auVar21[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar17._0_8_ =
               CONCAT44((int)(auVar21._4_4_ + (float)((ulong)auVar24._0_8_ >> 0x20)),
                        (int)(auVar21._0_4_ + fVar14));
          auVar17._8_4_ = (int)(auVar21._8_4_ + auVar24._8_4_);
          auVar17._12_4_ = (int)(auVar21._12_4_ + auVar25._12_4_);
          if (((DAT_00531f08 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f08), iVar5 != 0))
          {
            auVar22._8_4_ = 0x80000000;
            auVar22._0_8_ = 0x8000000080000000;
            auVar22._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar22._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar15 = auVar43._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531f00);
            uVar15 = auVar43._0_8_;
            if (iVar5 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar15 = auVar43._0_8_;
            }
          }
          uVar1 = (int)uVar9 + 8;
          uVar9 = (ulong)uVar1;
          auVar3._8_8_ = auVar17._8_8_;
          auVar3._0_8_ = auVar17._0_8_;
          uVar39 = NEON_sqxtn(uVar15,auVar3,4);
          sVar23 = -(ushort)(sVar23 == 0);
          sVar27 = -(ushort)(sVar27 == 0);
          sVar28 = -(ushort)(sVar28 == 0);
          sVar29 = -(ushort)(sVar29 == 0);
          sVar30 = -(ushort)(sVar30 == 0);
          sVar31 = -(ushort)(sVar31 == 0);
          sVar32 = -(ushort)(sVar32 == 0);
          sVar33 = -(ushort)(sVar33 == 0);
          fVar14 = (float)CONCAT13((byte)((uint)fVar34 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar34 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar34 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar34,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar16._0_8_ =
               CONCAT17((byte)((uint)fVar36 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar36 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar36 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar36,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar14))));
          auVar16[8] = SUB41(fVar37,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar16[9] = (byte)((uint)fVar37 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar16[10] = (byte)((uint)fVar37 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar16[0xb] = (byte)((uint)fVar37 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar18[0xc] = SUB41(fVar38,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar18._0_12_ = auVar16;
          auVar18[0xd] = (byte)((uint)fVar38 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar18[0xe] = (byte)((uint)fVar38 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar18[0xf] = (byte)((uint)fVar38 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar19._0_8_ =
               CONCAT44((int)(fVar36 + (float)((ulong)auVar16._0_8_ >> 0x20)),(int)(fVar34 + fVar14)
                       );
          auVar19._8_4_ = (int)(fVar37 + auVar16._8_4_);
          auVar19._12_4_ = (int)(fVar38 + auVar18._12_4_);
          uVar15 = NEON_sqxtn(auVar19._0_8_,auVar19,4);
          auVar20._0_8_ =
               CONCAT17((byte)((ulong)uVar39 >> 0x38) & ~(byte)((ushort)sVar29 >> 8),
                        CONCAT16((byte)((ulong)uVar39 >> 0x30) & ~(byte)sVar29,
                                 CONCAT15((byte)((ulong)uVar39 >> 0x28) &
                                          ~(byte)((ushort)sVar28 >> 8),
                                          CONCAT14((byte)((ulong)uVar39 >> 0x20) & ~(byte)sVar28,
                                                   CONCAT13((byte)((ulong)uVar39 >> 0x18) &
                                                            ~(byte)((ushort)sVar27 >> 8),
                                                            CONCAT12((byte)((ulong)uVar39 >> 0x10) &
                                                                     ~(byte)sVar27,
                                                                     CONCAT11((byte)((ulong)uVar39
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar23
                                                                                     >> 8),
                                                                              (byte)uVar39 &
                                                                              ~(byte)sVar23)))))));
          auVar20[8] = (byte)uVar15 & ~(byte)sVar30;
          auVar20[9] = (byte)((ulong)uVar15 >> 8) & ~(byte)((ushort)sVar30 >> 8);
          auVar20[10] = (byte)((ulong)uVar15 >> 0x10) & ~(byte)sVar31;
          auVar20[0xb] = (byte)((ulong)uVar15 >> 0x18) & ~(byte)((ushort)sVar31 >> 8);
          auVar20[0xc] = (byte)((ulong)uVar15 >> 0x20) & ~(byte)sVar32;
          auVar20[0xd] = (byte)((ulong)uVar15 >> 0x28) & ~(byte)((ushort)sVar32 >> 8);
          auVar20[0xe] = (byte)((ulong)uVar15 >> 0x30) & ~(byte)sVar33;
          auVar20[0xf] = (byte)((ulong)uVar15 >> 0x38) & ~(byte)((ushort)sVar33 >> 8);
          puVar12[1] = auVar20._8_8_;
          *puVar12 = auVar20._0_8_;
          psVar10 = psVar10 + 8;
          puVar12 = puVar12 + 2;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar9 < iVar2) {
        uVar8 = -(uVar9 >> 0x1f) & 0xfffffffe00000000 | uVar9 << 1;
        lVar11 = 0;
        lVar13 = ((ulong)(uint)((iVar2 + -1) - (int)uVar9) + 1) * 2;
        do {
          while( true ) {
            uVar7 = 0;
            iVar5 = (int)*(short *)((long)param_3 + lVar11 + uVar8);
            if (iVar5 != 0) break;
LAB_002454c4:
            *(undefined2 *)((long)param_5 + lVar11 + uVar8) = uVar7;
            lVar11 = lVar11 + 2;
            if (lVar11 == lVar13) goto LAB_00245514;
          }
          lVar6 = lrintf(fVar44 / (float)iVar5);
          uVar7 = (undefined2)lVar6;
          if ((int)lVar6 + 0x8000U < 0x10000) goto LAB_002454c4;
          uVar7 = 0x7fff;
          if ((int)lVar6 < 1) {
            uVar7 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar11 + uVar8) = uVar7;
          lVar11 = lVar11 + 2;
        } while (lVar11 != lVar13);
      }
LAB_00245514:
      iVar46 = iVar46 + -1;
      param_3 = (short *)((long)param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar46 != 0);
  }
  return;
}


==================================================================

### FUNC 00245580 (920 bytes) name=FUN_00245580

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00245580(undefined8 param_1,undefined8 param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  long lVar1;
  int iVar2;
  undefined1 auVar3 [16];
  char cVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  undefined1 uVar8;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined8 *puVar12;
  short sVar13;
  undefined8 uVar14;
  short sVar19;
  short sVar20;
  short sVar22;
  short sVar23;
  short sVar24;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  short sVar21;
  short sVar25;
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  float fVar26;
  float fVar27;
  float fVar35;
  undefined1 auVar29 [12];
  float fVar36;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  float fVar37;
  undefined1 auVar38 [16];
  undefined8 uVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  float fVar43;
  double dVar44;
  int iVar45;
  undefined1 auVar28 [12];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  
  iVar2 = *param_7;
  dVar44 = *param_8;
  iVar45 = param_7[1];
  cVar4 = cv::checkHardwareSupport(3);
  if (cVar4 == '\0') {
    cVar4 = cv::checkHardwareSupport(100);
  }
  fVar43 = (float)dVar44;
  if (iVar45 != 0) {
    do {
      iVar6 = 0;
      if ((cVar4 != '\0') && (puVar10 = param_3, puVar12 = param_5, 0 < iVar2 + -7)) {
        do {
          uVar14 = *puVar10;
          sVar19 = (short)(char)((ulong)uVar14 >> 8);
          sVar20 = (short)(char)((ulong)uVar14 >> 0x10);
          sVar21 = (short)(char)((ulong)uVar14 >> 0x18);
          sVar22 = (short)(char)((ulong)uVar14 >> 0x20);
          sVar23 = (short)(char)((ulong)uVar14 >> 0x28);
          sVar24 = (short)(char)((ulong)uVar14 >> 0x30);
          sVar25 = (short)(char)((ulong)uVar14 >> 0x38);
          auVar33._0_4_ = (int)(short)(char)uVar14;
          auVar33._4_4_ = (int)sVar19;
          auVar33._8_4_ = (int)sVar20;
          auVar33._12_4_ = (int)sVar21;
          auVar17 = NEON_scvtf(auVar33,4);
          auVar40._0_4_ = (int)sVar22;
          auVar40._4_4_ = (int)sVar23;
          auVar40._8_4_ = (int)sVar24;
          auVar40._12_4_ = (int)sVar25;
          auVar40 = NEON_scvtf(auVar40,4);
          auVar38 = NEON_frecpe(auVar17,4);
          auVar41 = NEON_frecpe(auVar40,4);
          auVar33 = NEON_frecps(auVar17,auVar38,4);
          auVar42 = NEON_frecps(auVar40,auVar41,4);
          auVar34._0_4_ = auVar38._0_4_ * auVar33._0_4_;
          auVar34._4_4_ = auVar38._4_4_ * auVar33._4_4_;
          auVar34._8_4_ = auVar38._8_4_ * auVar33._8_4_;
          auVar34._12_4_ = auVar38._12_4_ * auVar33._12_4_;
          auVar38._0_4_ = auVar41._0_4_ * auVar42._0_4_;
          auVar38._4_4_ = auVar41._4_4_ * auVar42._4_4_;
          auVar38._8_4_ = auVar41._8_4_ * auVar42._8_4_;
          auVar38._12_4_ = auVar41._12_4_ * auVar42._12_4_;
          auVar33 = NEON_frecps(auVar17,auVar34,4);
          auVar40 = NEON_frecps(auVar40,auVar38,4);
          auVar17._0_8_ =
               CONCAT44(fVar43 * auVar34._4_4_ * auVar33._4_4_,
                        fVar43 * auVar34._0_4_ * auVar33._0_4_);
          auVar17._8_4_ = fVar43 * auVar34._8_4_ * auVar33._8_4_;
          auVar17._12_4_ = fVar43 * auVar34._12_4_ * auVar33._12_4_;
          fVar27 = fVar43 * auVar38._0_4_ * auVar40._0_4_;
          fVar35 = fVar43 * auVar38._4_4_ * auVar40._4_4_;
          fVar36 = fVar43 * auVar38._8_4_ * auVar40._8_4_;
          fVar37 = fVar43 * auVar38._12_4_ * auVar40._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar39 = auVar17._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531f08);
            auVar17._8_8_ = uVar39;
            if (iVar5 != 0) {
              auVar41._8_4_ = 0x80000000;
              auVar41._0_8_ = 0x8000000080000000;
              auVar41._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar41._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f00), iVar5 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar42[1] = bRam0000000000531ee1;
          auVar42[0] = DAT_00531ee0;
          auVar42[2] = bRam0000000000531ee2;
          auVar42[3] = bRam0000000000531ee3;
          auVar42[4] = bRam0000000000531ee4;
          auVar42[5] = bRam0000000000531ee5;
          auVar42[6] = bRam0000000000531ee6;
          auVar42[7] = bRam0000000000531ee7;
          auVar42[8] = bRam0000000000531ee8;
          auVar42[9] = bRam0000000000531ee9;
          auVar42[10] = bRam0000000000531eea;
          auVar42[0xb] = bRam0000000000531eeb;
          auVar42[0xc] = bRam0000000000531eec;
          auVar42[0xd] = bRam0000000000531eed;
          auVar42[0xe] = bRam0000000000531eee;
          auVar42[0xf] = bRam0000000000531eef;
          fVar26 = (float)CONCAT13(auVar17[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar17[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar17[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar17[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar28._0_8_ =
               CONCAT17(auVar17[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar17[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar17[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar17[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar26))));
          auVar28[8] = auVar17[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar28[9] = auVar17[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar28[10] = auVar17[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar28[0xb] = auVar17[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar30[0xc] = auVar17[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar30._0_12_ = auVar28;
          auVar30[0xd] = auVar17[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar30[0xe] = auVar17[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar30[0xf] = auVar17[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar15._0_8_ =
               CONCAT44((int)(auVar17._4_4_ + (float)((ulong)auVar28._0_8_ >> 0x20)),
                        (int)(auVar17._0_4_ + fVar26));
          auVar15._8_4_ = (int)(auVar17._8_4_ + auVar28._8_4_);
          auVar15._12_4_ = (int)(auVar17._12_4_ + auVar30._12_4_);
          if (((DAT_00531f08 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f08), iVar5 != 0))
          {
            auVar18._8_4_ = 0x80000000;
            auVar18._0_8_ = 0x8000000080000000;
            auVar18._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar18._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar39 = auVar42._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531f00);
            uVar39 = auVar42._0_8_;
            if (iVar5 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar39 = auVar42._0_8_;
            }
          }
          iVar6 = iVar6 + 8;
          auVar3._8_8_ = auVar15._8_8_;
          auVar3._0_8_ = auVar15._0_8_;
          uVar39 = NEON_sqxtn(uVar39,auVar3,4);
          sVar13 = -(ushort)((char)uVar14 == 0);
          sVar19 = -(ushort)(sVar19 == 0);
          sVar20 = -(ushort)(sVar20 == 0);
          sVar21 = -(ushort)(sVar21 == 0);
          sVar22 = -(ushort)(sVar22 == 0);
          sVar23 = -(ushort)(sVar23 == 0);
          sVar24 = -(ushort)(sVar24 == 0);
          sVar25 = -(ushort)(sVar25 == 0);
          fVar26 = (float)CONCAT13((byte)((uint)fVar27 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar27 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar27 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar27,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar29._0_8_ =
               CONCAT17((byte)((uint)fVar35 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar35 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar35 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar35,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar26))));
          auVar29[8] = SUB41(fVar36,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar29[9] = (byte)((uint)fVar36 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar29[10] = (byte)((uint)fVar36 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar29[0xb] = (byte)((uint)fVar36 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar31[0xc] = SUB41(fVar37,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar31._0_12_ = auVar29;
          auVar31[0xd] = (byte)((uint)fVar37 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar31[0xe] = (byte)((uint)fVar37 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar31[0xf] = (byte)((uint)fVar37 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar32._0_8_ =
               CONCAT44((int)(fVar35 + (float)((ulong)auVar29._0_8_ >> 0x20)),(int)(fVar27 + fVar26)
                       );
          auVar32._8_4_ = (int)(fVar36 + auVar29._8_4_);
          auVar32._12_4_ = (int)(fVar37 + auVar31._12_4_);
          uVar14 = NEON_sqxtn(auVar32._0_8_,auVar32,4);
          auVar16._0_8_ =
               CONCAT17((byte)((ulong)uVar39 >> 0x38) & ~(byte)((ushort)sVar21 >> 8),
                        CONCAT16((byte)((ulong)uVar39 >> 0x30) & ~(byte)sVar21,
                                 CONCAT15((byte)((ulong)uVar39 >> 0x28) &
                                          ~(byte)((ushort)sVar20 >> 8),
                                          CONCAT14((byte)((ulong)uVar39 >> 0x20) & ~(byte)sVar20,
                                                   CONCAT13((byte)((ulong)uVar39 >> 0x18) &
                                                            ~(byte)((ushort)sVar19 >> 8),
                                                            CONCAT12((byte)((ulong)uVar39 >> 0x10) &
                                                                     ~(byte)sVar19,
                                                                     CONCAT11((byte)((ulong)uVar39
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar13
                                                                                     >> 8),
                                                                              (byte)uVar39 &
                                                                              ~(byte)sVar13)))))));
          auVar16[8] = (byte)uVar14 & ~(byte)sVar22;
          auVar16[9] = (byte)((ulong)uVar14 >> 8) & ~(byte)((ushort)sVar22 >> 8);
          auVar16[10] = (byte)((ulong)uVar14 >> 0x10) & ~(byte)sVar23;
          auVar16[0xb] = (byte)((ulong)uVar14 >> 0x18) & ~(byte)((ushort)sVar23 >> 8);
          auVar16[0xc] = (byte)((ulong)uVar14 >> 0x20) & ~(byte)sVar24;
          auVar16[0xd] = (byte)((ulong)uVar14 >> 0x28) & ~(byte)((ushort)sVar24 >> 8);
          auVar16[0xe] = (byte)((ulong)uVar14 >> 0x30) & ~(byte)sVar25;
          auVar16[0xf] = (byte)((ulong)uVar14 >> 0x38) & ~(byte)((ushort)sVar25 >> 8);
          uVar14 = NEON_sqxtn(auVar16._0_8_,auVar16,2);
          *puVar12 = uVar14;
          puVar10 = puVar10 + 1;
          puVar12 = puVar12 + 1;
        } while (iVar6 < iVar2 + -7);
      }
      if (iVar6 < iVar2) {
        lVar11 = 0;
        lVar9 = (long)iVar6;
        lVar1 = (ulong)(uint)((iVar2 + -1) - iVar6) + 1;
        do {
          while( true ) {
            uVar8 = 0;
            iVar6 = (int)*(char *)((long)param_3 + lVar11 + lVar9);
            if (iVar6 != 0) break;
LAB_0024584c:
            *(undefined1 *)((long)param_5 + lVar11 + lVar9) = uVar8;
            lVar11 = lVar11 + 1;
            if (lVar11 == lVar1) goto LAB_002458ac;
          }
          lVar7 = lrintf(fVar43 / (float)iVar6);
          uVar8 = (undefined1)lVar7;
          if ((int)lVar7 + 0x80U < 0x100) goto LAB_0024584c;
          uVar8 = 0x7f;
          if ((int)lVar7 < 1) {
            uVar8 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar11 + lVar9) = uVar8;
          lVar11 = lVar11 + 1;
        } while (lVar11 != lVar1);
      }
LAB_002458ac:
      iVar45 = iVar45 + -1;
      param_3 = (undefined8 *)((long)param_3 + param_4);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar45 != 0);
  }
  return;
}


==================================================================

### FUNC 00245918 (892 bytes) name=FUN_00245918

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00245918(undefined8 param_1,undefined8 param_2,ushort *param_3,ulong param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  ushort uVar2;
  ushort uVar3;
  ushort uVar4;
  ushort uVar5;
  ushort uVar6;
  ushort uVar7;
  ushort uVar8;
  ushort uVar9;
  undefined1 auVar10 [16];
  char cVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  ulong uVar15;
  long lVar16;
  ushort *puVar17;
  long lVar18;
  ulong uVar19;
  undefined8 *puVar20;
  float fVar21;
  undefined8 uVar22;
  undefined1 auVar24 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  short sVar30;
  short sVar34;
  short sVar35;
  short sVar36;
  short sVar37;
  undefined1 auVar31 [12];
  short sVar38;
  short sVar39;
  short sVar40;
  undefined1 auVar33 [16];
  float fVar41;
  float fVar43;
  float fVar44;
  undefined1 auVar42 [16];
  float fVar45;
  undefined8 uVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  float fVar51;
  double dVar52;
  int iVar53;
  undefined1 auVar23 [12];
  undefined1 auVar25 [16];
  undefined1 auVar32 [16];
  
  iVar1 = *param_7;
  dVar52 = *param_8;
  iVar53 = param_7[1];
  cVar11 = cv::checkHardwareSupport(3);
  if (cVar11 == '\0') {
    cVar11 = cv::checkHardwareSupport(100);
  }
  fVar51 = (float)dVar52;
  if (iVar53 != 0) {
    do {
      uVar15 = 0;
      if ((cVar11 != '\0') && (puVar17 = param_3, puVar20 = param_5, 0 < iVar1 + -7)) {
        do {
          uVar2 = *puVar17;
          uVar3 = puVar17[1];
          uVar4 = puVar17[2];
          uVar5 = puVar17[3];
          uVar6 = puVar17[4];
          uVar7 = puVar17[5];
          uVar8 = puVar17[6];
          uVar9 = puVar17[7];
          auVar42._2_2_ = 0;
          auVar42._0_2_ = uVar6;
          auVar42._4_2_ = uVar7;
          auVar42._6_2_ = 0;
          auVar42._8_2_ = uVar8;
          auVar42._10_2_ = 0;
          auVar42._12_2_ = uVar9;
          auVar42._14_2_ = 0;
          auVar47 = NEON_scvtf(auVar42,4);
          auVar33._2_2_ = 0;
          auVar33._0_2_ = uVar2;
          auVar33._4_2_ = uVar3;
          auVar33._6_2_ = 0;
          auVar33._8_2_ = uVar4;
          auVar33._10_2_ = 0;
          auVar33._12_2_ = uVar5;
          auVar33._14_2_ = 0;
          auVar28 = NEON_scvtf(auVar33,4);
          auVar48 = NEON_frecpe(auVar47,4);
          auVar42 = NEON_frecpe(auVar28,4);
          auVar50 = NEON_frecps(auVar47,auVar48,4);
          auVar33 = NEON_frecps(auVar28,auVar42,4);
          auVar49._0_4_ = auVar48._0_4_ * auVar50._0_4_;
          auVar49._4_4_ = auVar48._4_4_ * auVar50._4_4_;
          auVar49._8_4_ = auVar48._8_4_ * auVar50._8_4_;
          auVar49._12_4_ = auVar48._12_4_ * auVar50._12_4_;
          auVar48._0_4_ = auVar42._0_4_ * auVar33._0_4_;
          auVar48._4_4_ = auVar42._4_4_ * auVar33._4_4_;
          auVar48._8_4_ = auVar42._8_4_ * auVar33._8_4_;
          auVar48._12_4_ = auVar42._12_4_ * auVar33._12_4_;
          auVar42 = NEON_frecps(auVar47,auVar49,4);
          auVar33 = NEON_frecps(auVar28,auVar48,4);
          fVar41 = fVar51 * auVar49._0_4_ * auVar42._0_4_;
          fVar43 = fVar51 * auVar49._4_4_ * auVar42._4_4_;
          fVar44 = fVar51 * auVar49._8_4_ * auVar42._8_4_;
          fVar45 = fVar51 * auVar49._12_4_ * auVar42._12_4_;
          auVar28._0_8_ =
               CONCAT44(fVar51 * auVar48._4_4_ * auVar33._4_4_,
                        fVar51 * auVar48._0_4_ * auVar33._0_4_);
          auVar28._8_4_ = fVar51 * auVar48._8_4_ * auVar33._8_4_;
          auVar28._12_4_ = fVar51 * auVar48._12_4_ * auVar33._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar22 = auVar28._8_8_;
            iVar12 = __cxa_guard_acquire(&DAT_00531f08);
            auVar28._8_8_ = uVar22;
            if (iVar12 != 0) {
              auVar47._8_4_ = 0x80000000;
              auVar47._0_8_ = 0x8000000080000000;
              auVar47._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar47._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531f00), iVar12 != 0)) {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar50[1] = bRam0000000000531ee1;
          auVar50[0] = DAT_00531ee0;
          auVar50[2] = bRam0000000000531ee2;
          auVar50[3] = bRam0000000000531ee3;
          auVar50[4] = bRam0000000000531ee4;
          auVar50[5] = bRam0000000000531ee5;
          auVar50[6] = bRam0000000000531ee6;
          auVar50[7] = bRam0000000000531ee7;
          auVar50[8] = bRam0000000000531ee8;
          auVar50[9] = bRam0000000000531ee9;
          auVar50[10] = bRam0000000000531eea;
          auVar50[0xb] = bRam0000000000531eeb;
          auVar50[0xc] = bRam0000000000531eec;
          auVar50[0xd] = bRam0000000000531eed;
          auVar50[0xe] = bRam0000000000531eee;
          auVar50[0xf] = bRam0000000000531eef;
          fVar21 = (float)CONCAT13(auVar28[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar28[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar28[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar28[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar31._0_8_ =
               CONCAT17(auVar28[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar28[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar28[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar28[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar21))));
          auVar31[8] = auVar28[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar31[9] = auVar28[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar31[10] = auVar28[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar31[0xb] = auVar28[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar32[0xc] = auVar28[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar32._0_12_ = auVar31;
          auVar32[0xd] = auVar28[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar32[0xe] = auVar28[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar32[0xf] = auVar28[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar24._0_8_ =
               CONCAT44((int)(auVar28._4_4_ + (float)((ulong)auVar31._0_8_ >> 0x20)),
                        (int)(auVar28._0_4_ + fVar21));
          auVar24._8_4_ = (int)(auVar28._8_4_ + auVar31._8_4_);
          auVar24._12_4_ = (int)(auVar28._12_4_ + auVar32._12_4_);
          if (((DAT_00531f08 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531f08), iVar12 != 0)) {
            auVar29._8_4_ = 0x80000000;
            auVar29._0_8_ = 0x8000000080000000;
            auVar29._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar29._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar22 = auVar50._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar12 = __cxa_guard_acquire(&DAT_00531f00);
            uVar22 = auVar50._0_8_;
            if (iVar12 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar22 = auVar50._0_8_;
            }
          }
          uVar13 = (int)uVar15 + 8;
          uVar15 = (ulong)uVar13;
          auVar10._8_8_ = auVar24._8_8_;
          auVar10._0_8_ = auVar24._0_8_;
          uVar46 = NEON_sqxtun(uVar22,auVar10,4);
          sVar30 = -(ushort)(uVar2 == 0);
          sVar34 = -(ushort)(uVar3 == 0);
          sVar35 = -(ushort)(uVar4 == 0);
          sVar36 = -(ushort)(uVar5 == 0);
          sVar37 = -(ushort)(uVar6 == 0);
          sVar38 = -(ushort)(uVar7 == 0);
          sVar39 = -(ushort)(uVar8 == 0);
          sVar40 = -(ushort)(uVar9 == 0);
          fVar21 = (float)CONCAT13((byte)((uint)fVar41 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar41 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar41 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar41,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar23._0_8_ =
               CONCAT17((byte)((uint)fVar43 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar43 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar43 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar43,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar21))));
          auVar23[8] = SUB41(fVar44,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar23[9] = (byte)((uint)fVar44 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar23[10] = (byte)((uint)fVar44 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar23[0xb] = (byte)((uint)fVar44 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar25[0xc] = SUB41(fVar45,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar25._0_12_ = auVar23;
          auVar25[0xd] = (byte)((uint)fVar45 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar25[0xe] = (byte)((uint)fVar45 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar25[0xf] = (byte)((uint)fVar45 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar26._0_8_ =
               CONCAT44((int)(fVar43 + (float)((ulong)auVar23._0_8_ >> 0x20)),(int)(fVar41 + fVar21)
                       );
          auVar26._8_4_ = (int)(fVar44 + auVar23._8_4_);
          auVar26._12_4_ = (int)(fVar45 + auVar25._12_4_);
          uVar22 = NEON_sqxtun(auVar26._0_8_,auVar26,4);
          auVar27._0_8_ =
               CONCAT17((byte)((ulong)uVar46 >> 0x38) & ~(byte)((ushort)sVar36 >> 8),
                        CONCAT16((byte)((ulong)uVar46 >> 0x30) & ~(byte)sVar36,
                                 CONCAT15((byte)((ulong)uVar46 >> 0x28) &
                                          ~(byte)((ushort)sVar35 >> 8),
                                          CONCAT14((byte)((ulong)uVar46 >> 0x20) & ~(byte)sVar35,
                                                   CONCAT13((byte)((ulong)uVar46 >> 0x18) &
                                                            ~(byte)((ushort)sVar34 >> 8),
                                                            CONCAT12((byte)((ulong)uVar46 >> 0x10) &
                                                                     ~(byte)sVar34,
                                                                     CONCAT11((byte)((ulong)uVar46
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar30
                                                                                     >> 8),
                                                                              (byte)uVar46 &
                                                                              ~(byte)sVar30)))))));
          auVar27[8] = (byte)uVar22 & ~(byte)sVar37;
          auVar27[9] = (byte)((ulong)uVar22 >> 8) & ~(byte)((ushort)sVar37 >> 8);
          auVar27[10] = (byte)((ulong)uVar22 >> 0x10) & ~(byte)sVar38;
          auVar27[0xb] = (byte)((ulong)uVar22 >> 0x18) & ~(byte)((ushort)sVar38 >> 8);
          auVar27[0xc] = (byte)((ulong)uVar22 >> 0x20) & ~(byte)sVar39;
          auVar27[0xd] = (byte)((ulong)uVar22 >> 0x28) & ~(byte)((ushort)sVar39 >> 8);
          auVar27[0xe] = (byte)((ulong)uVar22 >> 0x30) & ~(byte)sVar40;
          auVar27[0xf] = (byte)((ulong)uVar22 >> 0x38) & ~(byte)((ushort)sVar40 >> 8);
          puVar20[1] = auVar27._8_8_;
          *puVar20 = auVar27._0_8_;
          puVar17 = puVar17 + 8;
          puVar20 = puVar20 + 2;
        } while ((int)uVar13 < iVar1 + -7);
      }
      if ((int)uVar15 < iVar1) {
        uVar19 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
        lVar18 = 0;
        lVar16 = ((ulong)(uint)((iVar1 + -1) - (int)uVar15) + 1) * 2;
        do {
          while (uVar2 = *(ushort *)((long)param_3 + lVar18 + uVar19), uVar2 == 0) {
            *(undefined2 *)((long)param_5 + lVar18 + uVar19) = 0;
            lVar18 = lVar18 + 2;
            if (lVar18 == lVar16) goto LAB_00245c28;
          }
          lVar14 = lrintf(fVar51 / (float)uVar2);
          uVar13 = (uint)lVar14;
          if (0xffff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          *(short *)((long)param_5 + lVar18 + uVar19) = (short)uVar13;
          lVar18 = lVar18 + 2;
        } while (lVar18 != lVar16);
      }
LAB_00245c28:
      iVar53 = iVar53 + -1;
      param_3 = (ushort *)((long)param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar53 != 0);
  }
  return;
}


==================================================================

### FUNC 00245c94 (916 bytes) name=FUN_00245c94

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00245c94(double param_1,undefined8 *param_2,long param_3,undefined8 *param_4,long param_5,
                 int *param_6)

{
  undefined1 auVar1 [16];
  char cVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  int iVar7;
  undefined8 *puVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  char cVar12;
  char cVar13;
  char cVar14;
  byte bVar15;
  char cVar16;
  char cVar17;
  char cVar18;
  short sVar19;
  short sVar25;
  short sVar27;
  short sVar28;
  short sVar29;
  undefined1 auVar21 [16];
  short sVar26;
  short sVar30;
  undefined1 auVar22 [16];
  undefined8 uVar20;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar31;
  float fVar32;
  float fVar40;
  undefined1 auVar34 [12];
  float fVar41;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  float fVar42;
  undefined1 auVar43 [16];
  undefined8 uVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  float fVar48;
  undefined1 auVar33 [12];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  
  cVar2 = cv::checkHardwareSupport(3);
  if (cVar2 == '\0') {
    cVar2 = cv::checkHardwareSupport(100);
  }
  iVar3 = param_6[1];
  fVar48 = (float)param_1;
  param_6[1] = iVar3 + -1;
  if (iVar3 != 0) {
    iVar3 = *param_6;
    do {
      iVar7 = 0;
      if ((cVar2 != '\0') && (puVar8 = param_2, puVar11 = param_4, 0 < iVar3 + -7)) {
        do {
          uVar20 = *puVar8;
          cVar12 = (char)((ulong)uVar20 >> 8);
          cVar13 = (char)((ulong)uVar20 >> 0x10);
          cVar14 = (char)((ulong)uVar20 >> 0x18);
          bVar15 = (byte)((ulong)uVar20 >> 0x20);
          cVar16 = (char)((ulong)uVar20 >> 0x28);
          cVar17 = (char)((ulong)uVar20 >> 0x30);
          cVar18 = (char)((ulong)uVar20 >> 0x38);
          auVar38._6_2_ = 0;
          auVar38._0_6_ =
               (uint6)CONCAT14(cVar12,(uint)CONCAT12(cVar12,(ushort)(byte)uVar20)) & 0xffff0000ffff;
          auVar38[8] = cVar13;
          auVar38._9_3_ = 0;
          auVar38[0xc] = cVar14;
          auVar38._13_3_ = 0;
          auVar23 = NEON_scvtf(auVar38,4);
          auVar45._1_3_ = 0;
          auVar45[0] = bVar15;
          auVar45[4] = cVar16;
          auVar45._5_3_ = 0;
          auVar45[8] = cVar17;
          auVar45._9_3_ = 0;
          auVar45[0xc] = cVar18;
          auVar45._13_3_ = 0;
          auVar45 = NEON_scvtf(auVar45,4);
          auVar43 = NEON_frecpe(auVar23,4);
          auVar46 = NEON_frecpe(auVar45,4);
          auVar38 = NEON_frecps(auVar23,auVar43,4);
          auVar47 = NEON_frecps(auVar45,auVar46,4);
          auVar39._0_4_ = auVar43._0_4_ * auVar38._0_4_;
          auVar39._4_4_ = auVar43._4_4_ * auVar38._4_4_;
          auVar39._8_4_ = auVar43._8_4_ * auVar38._8_4_;
          auVar39._12_4_ = auVar43._12_4_ * auVar38._12_4_;
          auVar43._0_4_ = auVar46._0_4_ * auVar47._0_4_;
          auVar43._4_4_ = auVar46._4_4_ * auVar47._4_4_;
          auVar43._8_4_ = auVar46._8_4_ * auVar47._8_4_;
          auVar43._12_4_ = auVar46._12_4_ * auVar47._12_4_;
          auVar38 = NEON_frecps(auVar23,auVar39,4);
          auVar45 = NEON_frecps(auVar45,auVar43,4);
          auVar23._0_8_ =
               CONCAT44(fVar48 * auVar39._4_4_ * auVar38._4_4_,
                        fVar48 * auVar39._0_4_ * auVar38._0_4_);
          auVar23._8_4_ = fVar48 * auVar39._8_4_ * auVar38._8_4_;
          auVar23._12_4_ = fVar48 * auVar39._12_4_ * auVar38._12_4_;
          fVar32 = fVar48 * auVar43._0_4_ * auVar45._0_4_;
          fVar40 = fVar48 * auVar43._4_4_ * auVar45._4_4_;
          fVar41 = fVar48 * auVar43._8_4_ * auVar45._8_4_;
          fVar42 = fVar48 * auVar43._12_4_ * auVar45._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar44 = auVar23._8_8_;
            iVar4 = __cxa_guard_acquire(&DAT_00531f08);
            auVar23._8_8_ = uVar44;
            if (iVar4 != 0) {
              auVar46._8_4_ = 0x80000000;
              auVar46._0_8_ = 0x8000000080000000;
              auVar46._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar46._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f00), iVar4 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar47[1] = bRam0000000000531ee1;
          auVar47[0] = DAT_00531ee0;
          auVar47[2] = bRam0000000000531ee2;
          auVar47[3] = bRam0000000000531ee3;
          auVar47[4] = bRam0000000000531ee4;
          auVar47[5] = bRam0000000000531ee5;
          auVar47[6] = bRam0000000000531ee6;
          auVar47[7] = bRam0000000000531ee7;
          auVar47[8] = bRam0000000000531ee8;
          auVar47[9] = bRam0000000000531ee9;
          auVar47[10] = bRam0000000000531eea;
          auVar47[0xb] = bRam0000000000531eeb;
          auVar47[0xc] = bRam0000000000531eec;
          auVar47[0xd] = bRam0000000000531eed;
          auVar47[0xe] = bRam0000000000531eee;
          auVar47[0xf] = bRam0000000000531eef;
          fVar31 = (float)CONCAT13(auVar23[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar23[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar23[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar23[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar33._0_8_ =
               CONCAT17(auVar23[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar23[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar23[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar23[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar31))));
          auVar33[8] = auVar23[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar33[9] = auVar23[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar33[10] = auVar23[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar33[0xb] = auVar23[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar35[0xc] = auVar23[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar35._0_12_ = auVar33;
          auVar35[0xd] = auVar23[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar35[0xe] = auVar23[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar35[0xf] = auVar23[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar21._0_8_ =
               CONCAT44((int)(auVar23._4_4_ + (float)((ulong)auVar33._0_8_ >> 0x20)),
                        (int)(auVar23._0_4_ + fVar31));
          auVar21._8_4_ = (int)(auVar23._8_4_ + auVar33._8_4_);
          auVar21._12_4_ = (int)(auVar23._12_4_ + auVar35._12_4_);
          if (((DAT_00531f08 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f08), iVar4 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar24._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar44 = auVar47._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531f00);
            uVar44 = auVar47._0_8_;
            if (iVar4 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar44 = auVar47._0_8_;
            }
          }
          iVar7 = iVar7 + 8;
          auVar1._8_8_ = auVar21._8_8_;
          auVar1._0_8_ = auVar21._0_8_;
          uVar44 = NEON_sqxtun(uVar44,auVar1,4);
          sVar19 = -(ushort)((byte)uVar20 == 0);
          sVar25 = -(ushort)(cVar13 == '\0');
          sVar26 = -(ushort)(cVar14 == '\0');
          sVar27 = -(ushort)(bVar15 == 0);
          sVar28 = -(ushort)(cVar16 == '\0');
          sVar29 = -(ushort)(cVar17 == '\0');
          sVar30 = -(ushort)(cVar18 == '\0');
          fVar31 = (float)CONCAT13((byte)((uint)fVar32 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar32 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar32 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar32,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar34._0_8_ =
               CONCAT17((byte)((uint)fVar40 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar40 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar40 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar40,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar31))));
          auVar34[8] = SUB41(fVar41,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar34[9] = (byte)((uint)fVar41 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar34[10] = (byte)((uint)fVar41 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar34[0xb] = (byte)((uint)fVar41 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar36[0xc] = SUB41(fVar42,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar36._0_12_ = auVar34;
          auVar36[0xd] = (byte)((uint)fVar42 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar36[0xe] = (byte)((uint)fVar42 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar36[0xf] = (byte)((uint)fVar42 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar37._0_8_ =
               CONCAT44((int)(fVar40 + (float)((ulong)auVar34._0_8_ >> 0x20)),(int)(fVar32 + fVar31)
                       );
          auVar37._8_4_ = (int)(fVar41 + auVar34._8_4_);
          auVar37._12_4_ = (int)(fVar42 + auVar36._12_4_);
          uVar20 = NEON_sqxtun(auVar37._0_8_,auVar37,4);
          auVar22._0_8_ =
               CONCAT17((byte)((ulong)uVar44 >> 0x38) & ~(byte)((ushort)sVar26 >> 8),
                        CONCAT16((byte)((ulong)uVar44 >> 0x30) & ~(byte)sVar26,
                                 CONCAT15((byte)((ulong)uVar44 >> 0x28) &
                                          ~(byte)((ushort)sVar25 >> 8),
                                          CONCAT14((byte)((ulong)uVar44 >> 0x20) & ~(byte)sVar25,
                                                   CONCAT13((byte)((ulong)uVar44 >> 0x18) &
                                                            ~(byte)((ushort)-(ushort)(cVar12 == '\0'
                                                                                     ) >> 8),
                                                            CONCAT12((byte)((ulong)uVar44 >> 0x10) &
                                                                     ~(byte)-(ushort)(cVar12 == '\0'
                                                                                     ),
                                                                     CONCAT11((byte)((ulong)uVar44
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar19
                                                                                     >> 8),
                                                                              (byte)uVar44 &
                                                                              ~(byte)sVar19)))))));
          auVar22[8] = (byte)uVar20 & ~(byte)sVar27;
          auVar22[9] = (byte)((ulong)uVar20 >> 8) & ~(byte)((ushort)sVar27 >> 8);
          auVar22[10] = (byte)((ulong)uVar20 >> 0x10) & ~(byte)sVar28;
          auVar22[0xb] = (byte)((ulong)uVar20 >> 0x18) & ~(byte)((ushort)sVar28 >> 8);
          auVar22[0xc] = (byte)((ulong)uVar20 >> 0x20) & ~(byte)sVar29;
          auVar22[0xd] = (byte)((ulong)uVar20 >> 0x28) & ~(byte)((ushort)sVar29 >> 8);
          auVar22[0xe] = (byte)((ulong)uVar20 >> 0x30) & ~(byte)sVar30;
          auVar22[0xf] = (byte)((ulong)uVar20 >> 0x38) & ~(byte)((ushort)sVar30 >> 8);
          uVar20 = NEON_uqxtn(auVar22._0_8_,auVar22,2);
          *puVar11 = uVar20;
          puVar8 = puVar8 + 1;
          puVar11 = puVar11 + 1;
        } while (iVar7 < iVar3 + -7);
        iVar3 = *param_6;
      }
      if (iVar7 < iVar3) {
        lVar9 = 0;
        lVar10 = (long)iVar7;
        do {
          while (bVar15 = *(byte *)((long)param_2 + lVar9 + lVar10), bVar15 == 0) {
            iVar7 = iVar7 + 1;
            *(undefined1 *)((long)param_4 + lVar9 + lVar10) = 0;
            lVar9 = lVar9 + 1;
            iVar3 = *param_6;
            if (iVar3 <= iVar7) goto LAB_00245fb8;
          }
          lVar6 = lrintf(fVar48 / (float)bVar15);
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          iVar7 = iVar7 + 1;
          *(char *)((long)param_4 + lVar9 + lVar10) = (char)uVar5;
          lVar9 = lVar9 + 1;
          iVar3 = *param_6;
        } while (iVar7 < iVar3);
      }
LAB_00245fb8:
      iVar7 = param_6[1];
      param_2 = (undefined8 *)((long)param_2 + param_3);
      param_4 = (undefined8 *)((long)param_4 + param_5);
      param_6[1] = iVar7 + -1;
    } while (iVar7 != 0);
  }
  return;
}


==================================================================

### FUNC 00246028 (60 bytes) name=FUN_00246028

void FUN_00246028(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,undefined8 *param_7,undefined8 *param_8)

{
  undefined8 local_8;
  
  local_8 = *param_7;
  FUN_00245c94(*param_8,param_3,param_4,param_5,param_6,&local_8);
  return;
}


==================================================================

### FUNC 00246064 (1040 bytes) name=FUN_00246064

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00246064(undefined8 *param_1,long param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  long lVar1;
  int iVar2;
  undefined1 auVar3 [16];
  char cVar4;
  int iVar5;
  uint uVar6;
  long lVar7;
  int iVar8;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  char cVar14;
  undefined1 uVar15;
  char cVar16;
  char cVar17;
  byte bVar18;
  char cVar19;
  char cVar20;
  char cVar21;
  short sVar22;
  undefined8 uVar23;
  short sVar32;
  short sVar34;
  short sVar35;
  short sVar36;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  short sVar33;
  short sVar37;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  float fVar38;
  float fVar39;
  float fVar45;
  undefined1 auVar41 [12];
  float fVar46;
  undefined1 auVar44 [16];
  float fVar47;
  undefined8 uVar48;
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  float fVar56;
  double dVar57;
  int iVar58;
  undefined8 local_8;
  undefined1 auVar40 [12];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  
  if (param_1 == (undefined8 *)0x0) {
    local_8 = *(undefined8 *)param_7;
    auVar28._0_8_ = *param_8;
    auVar28._8_8_ = 0;
    FUN_00245c94(auVar28,param_3,param_4,param_5,param_6,&local_8);
  }
  else {
    iVar2 = *param_7;
    dVar57 = *param_8;
    iVar58 = param_7[1];
    cVar4 = cv::checkHardwareSupport(3);
    if (cVar4 == '\0') {
      cVar4 = cv::checkHardwareSupport(100);
    }
    fVar56 = (float)dVar57;
    if (iVar58 != 0) {
      do {
        iVar8 = 0;
        if ((cVar4 != '\0') &&
           (puVar10 = param_3, puVar12 = param_1, puVar13 = param_5, 0 < iVar2 + -7)) {
          do {
            uVar23 = *puVar10;
            cVar14 = (char)((ulong)uVar23 >> 8);
            cVar16 = (char)((ulong)uVar23 >> 0x10);
            cVar17 = (char)((ulong)uVar23 >> 0x18);
            bVar18 = (byte)((ulong)uVar23 >> 0x20);
            cVar19 = (char)((ulong)uVar23 >> 0x28);
            cVar20 = (char)((ulong)uVar23 >> 0x30);
            cVar21 = (char)((ulong)uVar23 >> 0x38);
            auVar51._6_2_ = 0;
            auVar51._0_6_ =
                 (uint6)CONCAT14(cVar14,(uint)CONCAT12(cVar14,(ushort)(byte)uVar23)) &
                 0xffff0000ffff;
            auVar51[8] = cVar16;
            auVar51._9_3_ = 0;
            auVar51[0xc] = cVar17;
            auVar51._13_3_ = 0;
            auVar55._1_3_ = 0;
            auVar55[0] = bVar18;
            auVar55[4] = cVar19;
            auVar55._5_3_ = 0;
            auVar55[8] = cVar20;
            auVar55._9_3_ = 0;
            auVar55[0xc] = cVar21;
            auVar55._13_3_ = 0;
            auVar51 = NEON_scvtf(auVar51,4);
            auVar49 = NEON_scvtf(auVar55,4);
            auVar28 = NEON_frecpe(auVar51,4);
            auVar52 = NEON_frecpe(auVar49,4);
            uVar48 = *puVar12;
            uVar15 = (undefined1)((ulong)uVar48 >> 8);
            auVar55 = NEON_frecps(auVar51,auVar28,4);
            auVar54 = NEON_frecps(auVar49,auVar52,4);
            auVar29._0_4_ = auVar28._0_4_ * auVar55._0_4_;
            auVar29._4_4_ = auVar28._4_4_ * auVar55._4_4_;
            auVar29._8_4_ = auVar28._8_4_ * auVar55._8_4_;
            auVar29._12_4_ = auVar28._12_4_ * auVar55._12_4_;
            auVar53._0_4_ = auVar52._0_4_ * auVar54._0_4_;
            auVar53._4_4_ = auVar52._4_4_ * auVar54._4_4_;
            auVar53._8_4_ = auVar52._8_4_ * auVar54._8_4_;
            auVar53._12_4_ = auVar52._12_4_ * auVar54._12_4_;
            auVar52._6_2_ = 0;
            auVar52._0_6_ =
                 (uint6)CONCAT14(uVar15,(uint)CONCAT12(uVar15,(ushort)(byte)uVar48)) &
                 0xffff0000ffff;
            auVar52[8] = (char)((ulong)uVar48 >> 0x10);
            auVar52._9_3_ = 0;
            auVar52[0xc] = (char)((ulong)uVar48 >> 0x18);
            auVar52._13_3_ = 0;
            auVar54._1_3_ = 0;
            auVar54[0] = (byte)((ulong)uVar48 >> 0x20);
            auVar54[4] = (char)((ulong)uVar48 >> 0x28);
            auVar54._5_3_ = 0;
            auVar54[8] = (char)((ulong)uVar48 >> 0x30);
            auVar54._9_3_ = 0;
            auVar54[0xc] = (char)((ulong)uVar48 >> 0x38);
            auVar54._13_3_ = 0;
            auVar55 = NEON_frecps(auVar51,auVar29,4);
            auVar28 = NEON_scvtf(auVar52,4);
            auVar52 = NEON_scvtf(auVar54,4);
            auVar54 = NEON_frecps(auVar49,auVar53,4);
            auVar49._0_8_ =
                 CONCAT44(fVar56 * auVar28._4_4_ * auVar29._4_4_ * auVar55._4_4_,
                          fVar56 * auVar28._0_4_ * auVar29._0_4_ * auVar55._0_4_);
            auVar49._8_4_ = fVar56 * auVar28._8_4_ * auVar29._8_4_ * auVar55._8_4_;
            auVar49._12_4_ = fVar56 * auVar28._12_4_ * auVar29._12_4_ * auVar55._12_4_;
            fVar39 = fVar56 * auVar52._0_4_ * auVar53._0_4_ * auVar54._0_4_;
            fVar45 = fVar56 * auVar52._4_4_ * auVar53._4_4_ * auVar54._4_4_;
            fVar46 = fVar56 * auVar52._8_4_ * auVar53._8_4_ * auVar54._8_4_;
            fVar47 = fVar56 * auVar52._12_4_ * auVar53._12_4_ * auVar54._12_4_;
            if ((DAT_00531f08 & 1) == 0) {
              uVar48 = auVar49._8_8_;
              iVar5 = __cxa_guard_acquire(&DAT_00531f08);
              auVar49._8_8_ = uVar48;
              if (iVar5 != 0) {
                auVar30._8_4_ = 0x80000000;
                auVar30._0_8_ = 0x8000000080000000;
                auVar30._12_4_ = 0x80000000;
                _uRam0000000000531ef8 = auVar30._8_8_;
                _DAT_00531ef0 = 0x8000000080000000;
                __cxa_guard_release(&DAT_00531f08);
              }
            }
            if (((DAT_00531f00 & 1) == 0) &&
               (iVar5 = __cxa_guard_acquire(&DAT_00531f00), iVar5 != 0)) {
              auVar24._8_4_ = 0x3f000000;
              auVar24._0_8_ = 0x3f0000003f000000;
              auVar24._12_4_ = 0x3f000000;
              uRam0000000000531ee8 = auVar24._8_8_;
              _DAT_00531ee0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531f00);
            }
            auVar50._8_8_ = uRam0000000000531ee8;
            auVar50._0_8_ = _DAT_00531ee0;
            fVar38 = (float)CONCAT13(auVar49[3] & bRam0000000000531ef3 |
                                     (byte)((ulong)_DAT_00531ee0 >> 0x18),
                                     CONCAT12(auVar49[2] & bRam0000000000531ef2 |
                                              (byte)((ulong)_DAT_00531ee0 >> 0x10),
                                              CONCAT11(auVar49[1] & DAT_00531ef0_1 |
                                                       (byte)((ulong)_DAT_00531ee0 >> 8),
                                                       auVar49[0] & DAT_00531ef0 |
                                                       (byte)_DAT_00531ee0)));
            auVar40._0_8_ =
                 CONCAT17(auVar49[7] & bRam0000000000531ef7 | (byte)((ulong)_DAT_00531ee0 >> 0x38),
                          CONCAT16(auVar49[6] & bRam0000000000531ef6 |
                                   (byte)((ulong)_DAT_00531ee0 >> 0x30),
                                   CONCAT15(auVar49[5] & bRam0000000000531ef5 |
                                            (byte)((ulong)_DAT_00531ee0 >> 0x28),
                                            CONCAT14(auVar49[4] & bRam0000000000531ef4 |
                                                     (byte)((ulong)_DAT_00531ee0 >> 0x20),fVar38))))
            ;
            auVar40[8] = auVar49[8] & (byte)uRam0000000000531ef8 | (byte)uRam0000000000531ee8;
            auVar40[9] = auVar49[9] & uRam0000000000531ef8._1_1_ |
                         (byte)((ulong)uRam0000000000531ee8 >> 8);
            auVar40[10] = auVar49[10] & bRam0000000000531efa |
                          (byte)((ulong)uRam0000000000531ee8 >> 0x10);
            auVar40[0xb] = auVar49[0xb] & bRam0000000000531efb |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x18);
            auVar42[0xc] = auVar49[0xc] & bRam0000000000531efc |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x20);
            auVar42._0_12_ = auVar40;
            auVar42[0xd] = auVar49[0xd] & bRam0000000000531efd |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x28);
            auVar42[0xe] = auVar49[0xe] & bRam0000000000531efe |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x30);
            auVar42[0xf] = auVar49[0xf] & bRam0000000000531eff |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x38);
            auVar25._0_8_ =
                 CONCAT44((int)(auVar49._4_4_ + (float)((ulong)auVar40._0_8_ >> 0x20)),
                          (int)(auVar49._0_4_ + fVar38));
            auVar25._8_4_ = (int)(auVar49._8_4_ + auVar40._8_4_);
            auVar25._12_4_ = (int)(auVar49._12_4_ + auVar42._12_4_);
            if (((DAT_00531f08 & 1) == 0) &&
               (iVar5 = __cxa_guard_acquire(&DAT_00531f08), iVar5 != 0)) {
              auVar31._8_4_ = 0x80000000;
              auVar31._0_8_ = 0x8000000080000000;
              auVar31._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar31._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
            uVar48 = auVar50._0_8_;
            if ((DAT_00531f00 & 1) == 0) {
              iVar5 = __cxa_guard_acquire(&DAT_00531f00);
              uVar48 = auVar50._0_8_;
              if (iVar5 != 0) {
                auVar26._8_4_ = 0x3f000000;
                auVar26._0_8_ = 0x3f0000003f000000;
                auVar26._12_4_ = 0x3f000000;
                uRam0000000000531ee8 = auVar26._8_8_;
                _DAT_00531ee0 = 0x3f0000003f000000;
                __cxa_guard_release(&DAT_00531f00);
                uVar48 = auVar50._0_8_;
              }
            }
            iVar8 = iVar8 + 8;
            auVar3._8_8_ = auVar25._8_8_;
            auVar3._0_8_ = auVar25._0_8_;
            uVar48 = NEON_sqxtun(uVar48,auVar3,4);
            sVar22 = -(ushort)((byte)uVar23 == 0);
            sVar32 = -(ushort)(cVar16 == '\0');
            sVar33 = -(ushort)(cVar17 == '\0');
            sVar34 = -(ushort)(bVar18 == 0);
            sVar35 = -(ushort)(cVar19 == '\0');
            sVar36 = -(ushort)(cVar20 == '\0');
            sVar37 = -(ushort)(cVar21 == '\0');
            fVar38 = (float)CONCAT13((byte)((uint)fVar39 >> 0x18) & bRam0000000000531ef3 |
                                     (byte)((ulong)_DAT_00531ee0 >> 0x18),
                                     CONCAT12((byte)((uint)fVar39 >> 0x10) & bRam0000000000531ef2 |
                                              (byte)((ulong)_DAT_00531ee0 >> 0x10),
                                              CONCAT11((byte)((uint)fVar39 >> 8) & DAT_00531ef0_1 |
                                                       (byte)((ulong)_DAT_00531ee0 >> 8),
                                                       SUB41(fVar39,0) & DAT_00531ef0 |
                                                       (byte)_DAT_00531ee0)));
            auVar41._0_8_ =
                 CONCAT17((byte)((uint)fVar45 >> 0x18) & bRam0000000000531ef7 |
                          (byte)((ulong)_DAT_00531ee0 >> 0x38),
                          CONCAT16((byte)((uint)fVar45 >> 0x10) & bRam0000000000531ef6 |
                                   (byte)((ulong)_DAT_00531ee0 >> 0x30),
                                   CONCAT15((byte)((uint)fVar45 >> 8) & bRam0000000000531ef5 |
                                            (byte)((ulong)_DAT_00531ee0 >> 0x28),
                                            CONCAT14(SUB41(fVar45,0) & bRam0000000000531ef4 |
                                                     (byte)((ulong)_DAT_00531ee0 >> 0x20),fVar38))))
            ;
            auVar41[8] = SUB41(fVar46,0) & (byte)uRam0000000000531ef8 | (byte)uRam0000000000531ee8;
            auVar41[9] = (byte)((uint)fVar46 >> 8) & uRam0000000000531ef8._1_1_ |
                         (byte)((ulong)uRam0000000000531ee8 >> 8);
            auVar41[10] = (byte)((uint)fVar46 >> 0x10) & bRam0000000000531efa |
                          (byte)((ulong)uRam0000000000531ee8 >> 0x10);
            auVar41[0xb] = (byte)((uint)fVar46 >> 0x18) & bRam0000000000531efb |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x18);
            auVar43[0xc] = SUB41(fVar47,0) & bRam0000000000531efc |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x20);
            auVar43._0_12_ = auVar41;
            auVar43[0xd] = (byte)((uint)fVar47 >> 8) & bRam0000000000531efd |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x28);
            auVar43[0xe] = (byte)((uint)fVar47 >> 0x10) & bRam0000000000531efe |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x30);
            auVar43[0xf] = (byte)((uint)fVar47 >> 0x18) & bRam0000000000531eff |
                           (byte)((ulong)uRam0000000000531ee8 >> 0x38);
            auVar44._0_8_ =
                 CONCAT44((int)(fVar45 + (float)((ulong)auVar41._0_8_ >> 0x20)),
                          (int)(fVar39 + fVar38));
            auVar44._8_4_ = (int)(fVar46 + auVar41._8_4_);
            auVar44._12_4_ = (int)(fVar47 + auVar43._12_4_);
            uVar23 = NEON_sqxtun(auVar44._0_8_,auVar44,4);
            auVar27._0_8_ =
                 CONCAT17((byte)((ulong)uVar48 >> 0x38) & ~(byte)((ushort)sVar33 >> 8),
                          CONCAT16((byte)((ulong)uVar48 >> 0x30) & ~(byte)sVar33,
                                   CONCAT15((byte)((ulong)uVar48 >> 0x28) &
                                            ~(byte)((ushort)sVar32 >> 8),
                                            CONCAT14((byte)((ulong)uVar48 >> 0x20) & ~(byte)sVar32,
                                                     CONCAT13((byte)((ulong)uVar48 >> 0x18) &
                                                              ~(byte)((ushort)-(ushort)(cVar14 ==
                                                                                       '\0') >> 8),
                                                              CONCAT12((byte)((ulong)uVar48 >> 0x10)
                                                                       & ~(byte)-(ushort)(cVar14 ==
                                                                                         '\0'),
                                                                       CONCAT11((byte)((ulong)uVar48
                                                                                      >> 8) &
                                                                                ~(byte)((ushort)
                                                  sVar22 >> 8),(byte)uVar48 & ~(byte)sVar22)))))));
            auVar27[8] = (byte)uVar23 & ~(byte)sVar34;
            auVar27[9] = (byte)((ulong)uVar23 >> 8) & ~(byte)((ushort)sVar34 >> 8);
            auVar27[10] = (byte)((ulong)uVar23 >> 0x10) & ~(byte)sVar35;
            auVar27[0xb] = (byte)((ulong)uVar23 >> 0x18) & ~(byte)((ushort)sVar35 >> 8);
            auVar27[0xc] = (byte)((ulong)uVar23 >> 0x20) & ~(byte)sVar36;
            auVar27[0xd] = (byte)((ulong)uVar23 >> 0x28) & ~(byte)((ushort)sVar36 >> 8);
            auVar27[0xe] = (byte)((ulong)uVar23 >> 0x30) & ~(byte)sVar37;
            auVar27[0xf] = (byte)((ulong)uVar23 >> 0x38) & ~(byte)((ushort)sVar37 >> 8);
            uVar23 = NEON_uqxtn(auVar27._0_8_,auVar27,2);
            *puVar13 = uVar23;
            puVar10 = puVar10 + 1;
            puVar12 = puVar12 + 1;
            puVar13 = puVar13 + 1;
          } while (iVar8 < iVar2 + -7);
        }
        if (iVar8 < iVar2) {
          lVar11 = 0;
          lVar9 = (long)iVar8;
          lVar1 = (ulong)(uint)((iVar2 + -1) - iVar8) + 1;
          do {
            while( true ) {
              bVar18 = *(byte *)((long)param_3 + lVar11 + lVar9);
              if (bVar18 == 0) break;
              lVar7 = lrintf((fVar56 * (float)*(byte *)((long)param_1 + lVar11 + lVar9)) /
                             (float)bVar18);
              uVar6 = (uint)lVar7;
              if (0xff < uVar6) {
                uVar6 = -(uint)(0 < (int)uVar6);
              }
              *(char *)((long)param_5 + lVar11 + lVar9) = (char)uVar6;
              lVar11 = lVar11 + 1;
              if (lVar11 == lVar1) goto LAB_002463c4;
            }
            *(undefined1 *)((long)param_5 + lVar11 + lVar9) = 0;
            lVar11 = lVar11 + 1;
          } while (lVar11 != lVar1);
        }
LAB_002463c4:
        iVar58 = iVar58 + -1;
        param_1 = (undefined8 *)((long)param_1 + param_2);
        param_3 = (undefined8 *)((long)param_3 + param_4);
        param_5 = (undefined8 *)((long)param_5 + param_6);
      } while (iVar58 != 0);
    }
  }
  return;
}


==================================================================

### FUNC 00246474 (888 bytes) name=FUN_00246474

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00246474(undefined8 param_1,undefined8 param_2,long param_3,ulong param_4,byte *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  int iVar4;
  long lVar5;
  undefined1 (*pauVar6) [16];
  long lVar7;
  ulong uVar8;
  long lVar9;
  byte *pbVar10;
  ulong uVar11;
  float fVar12;
  int iVar17;
  int iVar18;
  int iVar19;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar20 [12];
  int iVar21;
  float fVar22;
  int iVar24;
  float fVar25;
  int iVar26;
  float fVar27;
  int iVar28;
  undefined1 auVar23 [16];
  float fVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  float fVar34;
  double dVar35;
  int iVar36;
  int local_50;
  int iStack_4c;
  int iStack_48;
  int iStack_44;
  int local_40;
  int iStack_3c;
  int iStack_38;
  int iStack_34;
  byte local_20;
  byte bStack_1f;
  byte bStack_1e;
  byte bStack_1d;
  byte bStack_1c;
  byte bStack_1b;
  byte bStack_1a;
  byte bStack_19;
  byte bStack_18;
  byte bStack_17;
  byte bStack_16;
  byte bStack_15;
  byte bStack_14;
  byte bStack_13;
  byte bStack_12;
  byte bStack_11;
  undefined1 auVar13 [12];
  undefined1 auVar14 [16];
  
  iVar2 = *param_7;
  dVar35 = *param_8;
  iVar36 = param_7[1];
  cVar3 = cv::checkHardwareSupport(3);
  if (cVar3 == '\0') {
    cVar3 = cv::checkHardwareSupport(100);
  }
  fVar34 = (float)dVar35;
  if (iVar36 != 0) {
    do {
      uVar8 = 0;
      if ((cVar3 != '\0') && (0 < iVar2 + -7)) {
        pauVar6 = (undefined1 (*) [16])(param_3 + 0x10);
        pbVar10 = param_5;
        do {
          auVar14 = *pauVar6;
          auVar33 = NEON_scvtf(auVar14,4);
          auVar15 = pauVar6[-1];
          auVar32 = NEON_frecpe(auVar33,4);
          auVar16 = NEON_scvtf(auVar15,4);
          auVar30 = NEON_frecps(auVar33,auVar32,4);
          auVar23 = NEON_frecpe(auVar16,4);
          auVar31._0_4_ = auVar32._0_4_ * auVar30._0_4_;
          auVar31._4_4_ = auVar32._4_4_ * auVar30._4_4_;
          auVar31._8_4_ = auVar32._8_4_ * auVar30._8_4_;
          auVar31._12_4_ = auVar32._12_4_ * auVar30._12_4_;
          auVar30 = NEON_frecps(auVar16,auVar23,4);
          auVar33 = NEON_frecps(auVar33,auVar31,4);
          auVar32._0_4_ = auVar23._0_4_ * auVar30._0_4_;
          auVar32._4_4_ = auVar23._4_4_ * auVar30._4_4_;
          auVar32._8_4_ = auVar23._8_4_ * auVar30._8_4_;
          auVar32._12_4_ = auVar23._12_4_ * auVar30._12_4_;
          auVar30 = NEON_frecps(auVar16,auVar32,4);
          fVar22 = fVar34 * auVar31._0_4_ * auVar33._0_4_;
          fVar25 = fVar34 * auVar31._4_4_ * auVar33._4_4_;
          fVar27 = fVar34 * auVar31._8_4_ * auVar33._8_4_;
          fVar29 = fVar34 * auVar31._12_4_ * auVar33._12_4_;
          auVar16._0_4_ = fVar34 * auVar32._0_4_ * auVar30._0_4_;
          auVar16._4_4_ = fVar34 * auVar32._4_4_ * auVar30._4_4_;
          auVar16._8_4_ = fVar34 * auVar32._8_4_ * auVar30._8_4_;
          auVar16._12_4_ = fVar34 * auVar32._12_4_ * auVar30._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            bStack_18 = SUB41(auVar16._8_4_,0);
            bStack_17 = (byte)((uint)auVar16._8_4_ >> 8);
            bStack_16 = (byte)((uint)auVar16._8_4_ >> 0x10);
            bStack_15 = (byte)((uint)auVar16._8_4_ >> 0x18);
            bStack_14 = SUB41(auVar16._12_4_,0);
            bStack_13 = (byte)((uint)auVar16._12_4_ >> 8);
            bStack_12 = (byte)((uint)auVar16._12_4_ >> 0x10);
            bStack_11 = (byte)((uint)auVar16._12_4_ >> 0x18);
            bStack_1c = SUB41(auVar16._4_4_,0);
            bStack_1b = (byte)((uint)auVar16._4_4_ >> 8);
            bStack_1a = (byte)((uint)auVar16._4_4_ >> 0x10);
            bStack_19 = (byte)((uint)auVar16._4_4_ >> 0x18);
            iVar4 = __cxa_guard_acquire(&DAT_00531f08);
            auVar16[4] = bStack_1c;
            auVar16[5] = bStack_1b;
            auVar16[6] = bStack_1a;
            auVar16[7] = bStack_19;
            auVar16[8] = bStack_18;
            auVar16[9] = bStack_17;
            auVar16[10] = bStack_16;
            auVar16[0xb] = bStack_15;
            auVar16[0xc] = bStack_14;
            auVar16[0xd] = bStack_13;
            auVar16[0xe] = bStack_12;
            auVar16[0xf] = bStack_11;
            if (iVar4 != 0) {
              auVar30._8_4_ = 0x80000000;
              auVar30._0_8_ = 0x8000000080000000;
              auVar30._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar30._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if ((DAT_00531f00 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531f00);
            if (iVar4 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
            }
          }
          fVar12 = (float)CONCAT13(auVar16[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar16[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar16[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar16[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar20._0_8_ =
               CONCAT17(auVar16[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar16[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar16[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar16[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar12))));
          auVar20[8] = auVar16[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar20[9] = auVar16[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar20[10] = auVar16[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar20[0xb] = auVar16[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar23[0xc] = auVar16[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar23._0_12_ = auVar20;
          auVar23[0xd] = auVar16[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar23[0xe] = auVar16[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar23[0xf] = auVar16[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          iVar4 = (int)(auVar16._0_4_ + fVar12);
          iVar17 = (int)(auVar16._4_4_ + (float)((ulong)auVar20._0_8_ >> 0x20));
          iVar18 = (int)(auVar16._8_4_ + auVar20._8_4_);
          iVar19 = (int)(auVar16._12_4_ + auVar23._12_4_);
          bStack_18 = (byte)iVar18;
          bStack_17 = (byte)((uint)iVar18 >> 8);
          bStack_16 = (byte)((uint)iVar18 >> 0x10);
          bStack_15 = (byte)((uint)iVar18 >> 0x18);
          bStack_14 = (byte)iVar19;
          bStack_13 = (byte)((uint)iVar19 >> 8);
          bStack_12 = (byte)((uint)iVar19 >> 0x10);
          bStack_11 = (byte)((uint)iVar19 >> 0x18);
          local_20 = (byte)iVar4;
          bStack_1f = (byte)((uint)iVar4 >> 8);
          bStack_1e = (byte)((uint)iVar4 >> 0x10);
          bStack_1d = (byte)((uint)iVar4 >> 0x18);
          bStack_1c = (byte)iVar17;
          bStack_1b = (byte)((uint)iVar17 >> 8);
          bStack_1a = (byte)((uint)iVar17 >> 0x10);
          bStack_19 = (byte)((uint)iVar17 >> 0x18);
          if (((DAT_00531f08 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f08), iVar4 != 0))
          {
            auVar33._8_4_ = 0x80000000;
            auVar33._0_8_ = 0x8000000080000000;
            auVar33._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar33._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f00), iVar4 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          uVar1 = (int)uVar8 + 8;
          uVar8 = (ulong)uVar1;
          pauVar6 = pauVar6 + 2;
          local_50 = auVar15._0_4_;
          iStack_4c = auVar15._4_4_;
          iStack_48 = auVar15._8_4_;
          iStack_44 = auVar15._12_4_;
          local_40 = auVar14._0_4_;
          iStack_3c = auVar14._4_4_;
          iStack_38 = auVar14._8_4_;
          iStack_34 = auVar14._12_4_;
          iVar4 = -(uint)(local_50 == 0);
          iVar17 = -(uint)(iStack_4c == 0);
          iVar18 = -(uint)(iStack_48 == 0);
          iVar19 = -(uint)(iStack_44 == 0);
          iVar21 = -(uint)(local_40 == 0);
          iVar24 = -(uint)(iStack_3c == 0);
          iVar26 = -(uint)(iStack_38 == 0);
          iVar28 = -(uint)(iStack_34 == 0);
          fVar12 = (float)CONCAT13((byte)((uint)fVar22 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar22 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar22 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar22,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar13._0_8_ =
               CONCAT17((byte)((uint)fVar25 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar25 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar25 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar25,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar12))));
          auVar13[8] = SUB41(fVar27,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar13[9] = (byte)((uint)fVar27 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar13[10] = (byte)((uint)fVar27 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar13[0xb] = (byte)((uint)fVar27 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar14[0xc] = SUB41(fVar29,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar14._0_12_ = auVar13;
          auVar14[0xd] = (byte)((uint)fVar29 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar14[0xe] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar14[0xf] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          pbVar10[8] = bStack_18 & ~(byte)iVar18;
          pbVar10[9] = bStack_17 & ~(byte)((uint)iVar18 >> 8);
          pbVar10[10] = bStack_16 & ~(byte)((uint)iVar18 >> 0x10);
          pbVar10[0xb] = bStack_15 & ~(byte)((uint)iVar18 >> 0x18);
          pbVar10[0xc] = bStack_14 & ~(byte)iVar19;
          pbVar10[0xd] = bStack_13 & ~(byte)((uint)iVar19 >> 8);
          pbVar10[0xe] = bStack_12 & ~(byte)((uint)iVar19 >> 0x10);
          pbVar10[0xf] = bStack_11 & ~(byte)((uint)iVar19 >> 0x18);
          *pbVar10 = local_20 & ~(byte)iVar4;
          pbVar10[1] = bStack_1f & ~(byte)((uint)iVar4 >> 8);
          pbVar10[2] = bStack_1e & ~(byte)((uint)iVar4 >> 0x10);
          pbVar10[3] = bStack_1d & ~(byte)((uint)iVar4 >> 0x18);
          pbVar10[4] = bStack_1c & ~(byte)iVar17;
          pbVar10[5] = bStack_1b & ~(byte)((uint)iVar17 >> 8);
          pbVar10[6] = bStack_1a & ~(byte)((uint)iVar17 >> 0x10);
          pbVar10[7] = bStack_19 & ~(byte)((uint)iVar17 >> 0x18);
          iVar4 = (int)(fVar22 + fVar12);
          iVar17 = (int)(fVar25 + (float)((ulong)auVar13._0_8_ >> 0x20));
          iVar18 = (int)(fVar27 + auVar13._8_4_);
          iVar19 = (int)(fVar29 + auVar14._12_4_);
          auVar15._0_8_ =
               CONCAT17((byte)((uint)iVar17 >> 0x18) & ~(byte)((uint)iVar24 >> 0x18),
                        CONCAT16((byte)((uint)iVar17 >> 0x10) & ~(byte)((uint)iVar24 >> 0x10),
                                 CONCAT15((byte)((uint)iVar17 >> 8) & ~(byte)((uint)iVar24 >> 8),
                                          CONCAT14((byte)iVar17 & ~(byte)iVar24,
                                                   CONCAT13((byte)((uint)iVar4 >> 0x18) &
                                                            ~(byte)((uint)iVar21 >> 0x18),
                                                            CONCAT12((byte)((uint)iVar4 >> 0x10) &
                                                                     ~(byte)((uint)iVar21 >> 0x10),
                                                                     CONCAT11((byte)((uint)iVar4 >>
                                                                                    8) &
                                                                              ~(byte)((uint)iVar21
                                                                                     >> 8),
                                                                              (byte)iVar4 &
                                                                              ~(byte)iVar21)))))));
          auVar15[8] = (byte)iVar18 & ~(byte)iVar26;
          auVar15[9] = (byte)((uint)iVar18 >> 8) & ~(byte)((uint)iVar26 >> 8);
          auVar15[10] = (byte)((uint)iVar18 >> 0x10) & ~(byte)((uint)iVar26 >> 0x10);
          auVar15[0xb] = (byte)((uint)iVar18 >> 0x18) & ~(byte)((uint)iVar26 >> 0x18);
          auVar15[0xc] = (byte)iVar19 & ~(byte)iVar28;
          auVar15[0xd] = (byte)((uint)iVar19 >> 8) & ~(byte)((uint)iVar28 >> 8);
          auVar15[0xe] = (byte)((uint)iVar19 >> 0x10) & ~(byte)((uint)iVar28 >> 0x10);
          auVar15[0xf] = (byte)((uint)iVar19 >> 0x18) & ~(byte)((uint)iVar28 >> 0x18);
          *(long *)(pbVar10 + 0x18) = auVar15._8_8_;
          *(undefined8 *)(pbVar10 + 0x10) = auVar15._0_8_;
          pbVar10 = pbVar10 + 0x20;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar8 < iVar2) {
        uVar11 = -(uVar8 >> 0x1f) & 0xfffffffc00000000 | uVar8 << 2;
        lVar7 = 0;
        lVar9 = ((ulong)(uint)((iVar2 + -1) - (int)uVar8) + 1) * 4;
        do {
          while (iVar4 = *(int *)(param_3 + uVar11 + lVar7), iVar4 != 0) {
            lVar5 = lrintf(fVar34 / (float)iVar4);
            *(int *)(param_5 + lVar7 + uVar11) = (int)lVar5;
            lVar7 = lVar7 + 4;
            if (lVar7 == lVar9) goto LAB_00246780;
          }
          pbVar10 = param_5 + lVar7 + uVar11;
          pbVar10[0] = 0;
          pbVar10[1] = 0;
          pbVar10[2] = 0;
          pbVar10[3] = 0;
          lVar7 = lVar7 + 4;
        } while (lVar7 != lVar9);
      }
LAB_00246780:
      iVar36 = iVar36 + -1;
      param_3 = param_3 + (param_4 & 0xfffffffffffffffc);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar36 != 0);
  }
  return;
}


==================================================================

### FUNC 002467ec (992 bytes) name=FUN_002467ec

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002467ec(long param_1,ulong param_2,undefined1 (*param_3) [16],ulong param_4,byte *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  int iVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  undefined1 (*pauVar8) [16];
  long lVar9;
  byte *pbVar10;
  ulong uVar11;
  undefined1 (*pauVar12) [16];
  float fVar13;
  int iVar18;
  int iVar19;
  int iVar20;
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  float fVar21;
  float fVar24;
  undefined1 auVar22 [12];
  float fVar25;
  undefined1 auVar23 [16];
  float fVar26;
  int iVar27;
  int iVar29;
  int iVar30;
  int iVar31;
  undefined1 auVar28 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  float fVar37;
  double dVar38;
  int iVar39;
  undefined1 auVar40 [16];
  int local_60;
  int iStack_5c;
  int iStack_58;
  int iStack_54;
  int local_50;
  int iStack_4c;
  int iStack_48;
  int iStack_44;
  byte local_30;
  byte bStack_2f;
  byte bStack_2e;
  byte bStack_2d;
  byte bStack_2c;
  byte bStack_2b;
  byte bStack_2a;
  byte bStack_29;
  byte bStack_28;
  byte bStack_27;
  byte bStack_26;
  byte bStack_25;
  byte bStack_24;
  byte bStack_23;
  byte bStack_22;
  byte bStack_21;
  undefined1 auVar14 [12];
  undefined1 auVar15 [16];
  
  dVar38 = *param_8;
  iVar2 = *param_7;
  iVar39 = param_7[1];
  cVar3 = cv::checkHardwareSupport(3);
  if (cVar3 == '\0') {
    cVar3 = cv::checkHardwareSupport(100);
  }
  fVar37 = (float)dVar38;
  if (iVar39 != 0) {
    do {
      uVar6 = 0;
      if ((cVar3 != '\0') && (0 < iVar2 + -7)) {
        pauVar12 = (undefined1 (*) [16])(param_1 + 0x10);
        pauVar8 = param_3;
        pbVar10 = param_5;
        do {
          auVar15 = *pauVar8;
          auVar23 = NEON_scvtf(*pauVar12,4);
          auVar16 = pauVar8[1];
          auVar40 = NEON_scvtf(auVar15,4);
          auVar36 = NEON_scvtf(auVar16,4);
          auVar17 = NEON_scvtf(pauVar12[-1],4);
          auVar35 = NEON_frecpe(auVar40,4);
          auVar32 = NEON_frecpe(auVar36,4);
          auVar33 = NEON_frecps(auVar40,auVar35,4);
          auVar28 = NEON_frecps(auVar36,auVar32,4);
          auVar34._0_4_ = auVar35._0_4_ * auVar33._0_4_;
          auVar34._4_4_ = auVar35._4_4_ * auVar33._4_4_;
          auVar34._8_4_ = auVar35._8_4_ * auVar33._8_4_;
          auVar34._12_4_ = auVar35._12_4_ * auVar33._12_4_;
          auVar33._0_4_ = auVar32._0_4_ * auVar28._0_4_;
          auVar33._4_4_ = auVar32._4_4_ * auVar28._4_4_;
          auVar33._8_4_ = auVar32._8_4_ * auVar28._8_4_;
          auVar33._12_4_ = auVar32._12_4_ * auVar28._12_4_;
          auVar32 = NEON_frecps(auVar40,auVar34,4);
          auVar35 = NEON_frecps(auVar36,auVar33,4);
          auVar28._0_4_ = fVar37 * auVar17._0_4_ * auVar34._0_4_ * auVar32._0_4_;
          auVar28._4_4_ = fVar37 * auVar17._4_4_ * auVar34._4_4_ * auVar32._4_4_;
          auVar28._8_4_ = fVar37 * auVar17._8_4_ * auVar34._8_4_ * auVar32._8_4_;
          auVar28._12_4_ = fVar37 * auVar17._12_4_ * auVar34._12_4_ * auVar32._12_4_;
          fVar21 = fVar37 * auVar23._0_4_ * auVar33._0_4_ * auVar35._0_4_;
          fVar24 = fVar37 * auVar23._4_4_ * auVar33._4_4_ * auVar35._4_4_;
          fVar25 = fVar37 * auVar23._8_4_ * auVar33._8_4_ * auVar35._8_4_;
          fVar26 = fVar37 * auVar23._12_4_ * auVar33._12_4_ * auVar35._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            bStack_28 = SUB41(auVar28._8_4_,0);
            bStack_27 = (byte)((uint)auVar28._8_4_ >> 8);
            bStack_26 = (byte)((uint)auVar28._8_4_ >> 0x10);
            bStack_25 = (byte)((uint)auVar28._8_4_ >> 0x18);
            bStack_24 = SUB41(auVar28._12_4_,0);
            bStack_23 = (byte)((uint)auVar28._12_4_ >> 8);
            bStack_22 = (byte)((uint)auVar28._12_4_ >> 0x10);
            bStack_21 = (byte)((uint)auVar28._12_4_ >> 0x18);
            bStack_2c = SUB41(auVar28._4_4_,0);
            bStack_2b = (byte)((uint)auVar28._4_4_ >> 8);
            bStack_2a = (byte)((uint)auVar28._4_4_ >> 0x10);
            bStack_29 = (byte)((uint)auVar28._4_4_ >> 0x18);
            iVar4 = __cxa_guard_acquire(&DAT_00531f08);
            auVar28[4] = bStack_2c;
            auVar28[5] = bStack_2b;
            auVar28[6] = bStack_2a;
            auVar28[7] = bStack_29;
            auVar28[8] = bStack_28;
            auVar28[9] = bStack_27;
            auVar28[10] = bStack_26;
            auVar28[0xb] = bStack_25;
            auVar28[0xc] = bStack_24;
            auVar28[0xd] = bStack_23;
            auVar28[0xe] = bStack_22;
            auVar28[0xf] = bStack_21;
            if (iVar4 != 0) {
              auVar17._8_4_ = 0x80000000;
              auVar17._0_8_ = 0x8000000080000000;
              auVar17._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar17._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if ((DAT_00531f00 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531f00);
            if (iVar4 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
            }
          }
          fVar13 = (float)CONCAT13(auVar28[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar28[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar28[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar28[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar22._0_8_ =
               CONCAT17(auVar28[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar28[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar28[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar28[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar13))));
          auVar22[8] = auVar28[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar22[9] = auVar28[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar22[10] = auVar28[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar22[0xb] = auVar28[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar32[0xc] = auVar28[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar32._0_12_ = auVar22;
          auVar32[0xd] = auVar28[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar32[0xe] = auVar28[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar32[0xf] = auVar28[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          iVar4 = (int)(auVar28._0_4_ + fVar13);
          iVar18 = (int)(auVar28._4_4_ + (float)((ulong)auVar22._0_8_ >> 0x20));
          iVar19 = (int)(auVar28._8_4_ + auVar22._8_4_);
          iVar20 = (int)(auVar28._12_4_ + auVar32._12_4_);
          bStack_28 = (byte)iVar19;
          bStack_27 = (byte)((uint)iVar19 >> 8);
          bStack_26 = (byte)((uint)iVar19 >> 0x10);
          bStack_25 = (byte)((uint)iVar19 >> 0x18);
          bStack_24 = (byte)iVar20;
          bStack_23 = (byte)((uint)iVar20 >> 8);
          bStack_22 = (byte)((uint)iVar20 >> 0x10);
          bStack_21 = (byte)((uint)iVar20 >> 0x18);
          local_30 = (byte)iVar4;
          bStack_2f = (byte)((uint)iVar4 >> 8);
          bStack_2e = (byte)((uint)iVar4 >> 0x10);
          bStack_2d = (byte)((uint)iVar4 >> 0x18);
          bStack_2c = (byte)iVar18;
          bStack_2b = (byte)((uint)iVar18 >> 8);
          bStack_2a = (byte)((uint)iVar18 >> 0x10);
          bStack_29 = (byte)((uint)iVar18 >> 0x18);
          if (((DAT_00531f08 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f08), iVar4 != 0))
          {
            auVar23._8_4_ = 0x80000000;
            auVar23._0_8_ = 0x8000000080000000;
            auVar23._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar23._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531f00), iVar4 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          uVar1 = (int)uVar6 + 8;
          uVar6 = (ulong)uVar1;
          pauVar8 = pauVar8 + 2;
          pauVar12 = pauVar12 + 2;
          local_60 = auVar15._0_4_;
          iStack_5c = auVar15._4_4_;
          iStack_58 = auVar15._8_4_;
          iStack_54 = auVar15._12_4_;
          iVar4 = -(uint)(local_60 == 0);
          iVar18 = -(uint)(iStack_5c == 0);
          iVar19 = -(uint)(iStack_58 == 0);
          iVar20 = -(uint)(iStack_54 == 0);
          local_50 = auVar16._0_4_;
          iStack_4c = auVar16._4_4_;
          iStack_48 = auVar16._8_4_;
          iStack_44 = auVar16._12_4_;
          iVar27 = -(uint)(local_50 == 0);
          iVar29 = -(uint)(iStack_4c == 0);
          iVar30 = -(uint)(iStack_48 == 0);
          iVar31 = -(uint)(iStack_44 == 0);
          fVar13 = (float)CONCAT13((byte)((uint)fVar21 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar21 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar21 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar21,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar14._0_8_ =
               CONCAT17((byte)((uint)fVar24 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar24 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar24 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar24,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar13))));
          auVar14[8] = SUB41(fVar25,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar14[9] = (byte)((uint)fVar25 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar14[10] = (byte)((uint)fVar25 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar14[0xb] = (byte)((uint)fVar25 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar15[0xc] = SUB41(fVar26,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar15._0_12_ = auVar14;
          auVar15[0xd] = (byte)((uint)fVar26 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar15[0xe] = (byte)((uint)fVar26 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar15[0xf] = (byte)((uint)fVar26 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          pbVar10[8] = bStack_28 & ~(byte)iVar19;
          pbVar10[9] = bStack_27 & ~(byte)((uint)iVar19 >> 8);
          pbVar10[10] = bStack_26 & ~(byte)((uint)iVar19 >> 0x10);
          pbVar10[0xb] = bStack_25 & ~(byte)((uint)iVar19 >> 0x18);
          pbVar10[0xc] = bStack_24 & ~(byte)iVar20;
          pbVar10[0xd] = bStack_23 & ~(byte)((uint)iVar20 >> 8);
          pbVar10[0xe] = bStack_22 & ~(byte)((uint)iVar20 >> 0x10);
          pbVar10[0xf] = bStack_21 & ~(byte)((uint)iVar20 >> 0x18);
          *pbVar10 = local_30 & ~(byte)iVar4;
          pbVar10[1] = bStack_2f & ~(byte)((uint)iVar4 >> 8);
          pbVar10[2] = bStack_2e & ~(byte)((uint)iVar4 >> 0x10);
          pbVar10[3] = bStack_2d & ~(byte)((uint)iVar4 >> 0x18);
          pbVar10[4] = bStack_2c & ~(byte)iVar18;
          pbVar10[5] = bStack_2b & ~(byte)((uint)iVar18 >> 8);
          pbVar10[6] = bStack_2a & ~(byte)((uint)iVar18 >> 0x10);
          pbVar10[7] = bStack_29 & ~(byte)((uint)iVar18 >> 0x18);
          iVar4 = (int)(fVar21 + fVar13);
          iVar18 = (int)(fVar24 + (float)((ulong)auVar14._0_8_ >> 0x20));
          iVar19 = (int)(fVar25 + auVar14._8_4_);
          iVar20 = (int)(fVar26 + auVar15._12_4_);
          auVar16._0_8_ =
               CONCAT17((byte)((uint)iVar18 >> 0x18) & ~(byte)((uint)iVar29 >> 0x18),
                        CONCAT16((byte)((uint)iVar18 >> 0x10) & ~(byte)((uint)iVar29 >> 0x10),
                                 CONCAT15((byte)((uint)iVar18 >> 8) & ~(byte)((uint)iVar29 >> 8),
                                          CONCAT14((byte)iVar18 & ~(byte)iVar29,
                                                   CONCAT13((byte)((uint)iVar4 >> 0x18) &
                                                            ~(byte)((uint)iVar27 >> 0x18),
                                                            CONCAT12((byte)((uint)iVar4 >> 0x10) &
                                                                     ~(byte)((uint)iVar27 >> 0x10),
                                                                     CONCAT11((byte)((uint)iVar4 >>
                                                                                    8) &
                                                                              ~(byte)((uint)iVar27
                                                                                     >> 8),
                                                                              (byte)iVar4 &
                                                                              ~(byte)iVar27)))))));
          auVar16[8] = (byte)iVar19 & ~(byte)iVar30;
          auVar16[9] = (byte)((uint)iVar19 >> 8) & ~(byte)((uint)iVar30 >> 8);
          auVar16[10] = (byte)((uint)iVar19 >> 0x10) & ~(byte)((uint)iVar30 >> 0x10);
          auVar16[0xb] = (byte)((uint)iVar19 >> 0x18) & ~(byte)((uint)iVar30 >> 0x18);
          auVar16[0xc] = (byte)iVar20 & ~(byte)iVar31;
          auVar16[0xd] = (byte)((uint)iVar20 >> 8) & ~(byte)((uint)iVar31 >> 8);
          auVar16[0xe] = (byte)((uint)iVar20 >> 0x10) & ~(byte)((uint)iVar31 >> 0x10);
          auVar16[0xf] = (byte)((uint)iVar20 >> 0x18) & ~(byte)((uint)iVar31 >> 0x18);
          *(long *)(pbVar10 + 0x18) = auVar16._8_8_;
          *(undefined8 *)(pbVar10 + 0x10) = auVar16._0_8_;
          pbVar10 = pbVar10 + 0x20;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar6 < iVar2) {
        uVar11 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
        lVar9 = 0;
        lVar7 = ((ulong)(uint)((iVar2 + -1) - (int)uVar6) + 1) * 4;
        do {
          while( true ) {
            if (*(int *)(*param_3 + lVar9 + uVar11) == 0) break;
            lVar5 = lrintf((fVar37 * (float)*(int *)(param_1 + uVar11 + lVar9)) /
                           (float)*(int *)(*param_3 + lVar9 + uVar11));
            *(int *)(param_5 + lVar9 + uVar11) = (int)lVar5;
            lVar9 = lVar9 + 4;
            if (lVar9 == lVar7) goto LAB_00246b48;
          }
          pbVar10 = param_5 + lVar9 + uVar11;
          pbVar10[0] = 0;
          pbVar10[1] = 0;
          pbVar10[2] = 0;
          pbVar10[3] = 0;
          lVar9 = lVar9 + 4;
        } while (lVar9 != lVar7);
      }
LAB_00246b48:
      iVar39 = iVar39 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_3 = (undefined1 (*) [16])(*param_3 + (param_4 & 0xfffffffffffffffc));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar39 != 0);
  }
  return;
}


==================================================================

### FUNC 00246bcc (1020 bytes) name=FUN_00246bcc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00246bcc(short *param_1,ulong param_2,short *param_3,ulong param_4,undefined8 *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  undefined1 auVar3 [16];
  char cVar4;
  int iVar5;
  long lVar6;
  undefined2 uVar7;
  ulong uVar8;
  short *psVar9;
  short *psVar10;
  long lVar11;
  long lVar12;
  undefined8 *puVar13;
  ulong uVar14;
  float fVar15;
  float fVar16;
  undefined8 uVar17;
  float fVar26;
  undefined1 auVar19 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  float fVar25;
  float fVar27;
  undefined1 auVar24 [16];
  short sVar28;
  short sVar31;
  short sVar32;
  short sVar33;
  short sVar34;
  undefined1 auVar29 [12];
  short sVar35;
  short sVar36;
  short sVar37;
  undefined1 auVar38 [16];
  undefined8 uVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  float fVar47;
  double dVar48;
  int iVar49;
  undefined1 auVar18 [12];
  undefined1 auVar20 [16];
  undefined1 auVar30 [16];
  
  dVar48 = *param_8;
  iVar2 = *param_7;
  iVar49 = param_7[1];
  cVar4 = cv::checkHardwareSupport(3);
  if (cVar4 == '\0') {
    cVar4 = cv::checkHardwareSupport(100);
  }
  fVar47 = (float)dVar48;
  if (iVar49 != 0) {
    do {
      uVar8 = 0;
      if ((cVar4 != '\0') &&
         (psVar9 = param_3, psVar10 = param_1, puVar13 = param_5, 0 < iVar2 + -7)) {
        do {
          sVar28 = *psVar9;
          sVar31 = psVar9[1];
          sVar32 = psVar9[2];
          sVar33 = psVar9[3];
          sVar34 = psVar9[4];
          sVar35 = psVar9[5];
          sVar36 = psVar9[6];
          sVar37 = psVar9[7];
          auVar46._0_4_ = (int)sVar34;
          auVar46._4_4_ = (int)sVar35;
          auVar46._8_4_ = (int)sVar36;
          auVar46._12_4_ = (int)sVar37;
          auVar40 = NEON_scvtf(auVar46,4);
          auVar42 = NEON_frecpe(auVar40,4);
          auVar38._0_4_ = (int)sVar28;
          auVar38._4_4_ = (int)sVar31;
          auVar38._8_4_ = (int)sVar32;
          auVar38._12_4_ = (int)sVar33;
          auVar38 = NEON_scvtf(auVar38,4);
          auVar46 = NEON_frecps(auVar40,auVar42,4);
          auVar23 = NEON_frecpe(auVar38,4);
          auVar43._0_4_ = auVar42._0_4_ * auVar46._0_4_;
          auVar43._4_4_ = auVar42._4_4_ * auVar46._4_4_;
          auVar43._8_4_ = auVar42._8_4_ * auVar46._8_4_;
          auVar43._12_4_ = auVar42._12_4_ * auVar46._12_4_;
          auVar44._0_4_ = (int)psVar10[4];
          auVar44._4_4_ = (int)psVar10[5];
          auVar44._8_4_ = (int)psVar10[6];
          auVar44._12_4_ = (int)psVar10[7];
          auVar44 = NEON_scvtf(auVar44,4);
          auVar45 = NEON_frecps(auVar38,auVar23,4);
          auVar46 = NEON_frecps(auVar40,auVar43,4);
          auVar42._0_4_ = (int)*psVar10;
          auVar42._4_4_ = (int)psVar10[1];
          auVar42._8_4_ = (int)psVar10[2];
          auVar42._12_4_ = (int)psVar10[3];
          auVar40._0_4_ = auVar23._0_4_ * auVar45._0_4_;
          auVar40._4_4_ = auVar23._4_4_ * auVar45._4_4_;
          auVar40._8_4_ = auVar23._8_4_ * auVar45._8_4_;
          auVar40._12_4_ = auVar23._12_4_ * auVar45._12_4_;
          auVar42 = NEON_scvtf(auVar42,4);
          auVar38 = NEON_frecps(auVar38,auVar40,4);
          fVar16 = fVar47 * auVar44._0_4_ * auVar43._0_4_ * auVar46._0_4_;
          fVar25 = fVar47 * auVar44._4_4_ * auVar43._4_4_ * auVar46._4_4_;
          fVar26 = fVar47 * auVar44._8_4_ * auVar43._8_4_ * auVar46._8_4_;
          fVar27 = fVar47 * auVar44._12_4_ * auVar43._12_4_ * auVar46._12_4_;
          auVar23._0_8_ =
               CONCAT44(fVar47 * auVar42._4_4_ * auVar40._4_4_ * auVar38._4_4_,
                        fVar47 * auVar42._0_4_ * auVar40._0_4_ * auVar38._0_4_);
          auVar23._8_4_ = fVar47 * auVar42._8_4_ * auVar40._8_4_ * auVar38._8_4_;
          auVar23._12_4_ = fVar47 * auVar42._12_4_ * auVar40._12_4_ * auVar38._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar17 = auVar23._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531f08);
            auVar23._8_8_ = uVar17;
            if (iVar5 != 0) {
              auVar45._8_4_ = 0x80000000;
              auVar45._0_8_ = 0x8000000080000000;
              auVar45._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar45._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f00), iVar5 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar41[1] = bRam0000000000531ee1;
          auVar41[0] = DAT_00531ee0;
          auVar41[2] = bRam0000000000531ee2;
          auVar41[3] = bRam0000000000531ee3;
          auVar41[4] = bRam0000000000531ee4;
          auVar41[5] = bRam0000000000531ee5;
          auVar41[6] = bRam0000000000531ee6;
          auVar41[7] = bRam0000000000531ee7;
          auVar41[8] = bRam0000000000531ee8;
          auVar41[9] = bRam0000000000531ee9;
          auVar41[10] = bRam0000000000531eea;
          auVar41[0xb] = bRam0000000000531eeb;
          auVar41[0xc] = bRam0000000000531eec;
          auVar41[0xd] = bRam0000000000531eed;
          auVar41[0xe] = bRam0000000000531eee;
          auVar41[0xf] = bRam0000000000531eef;
          fVar15 = (float)CONCAT13(auVar23[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar23[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar23[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar23[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar29._0_8_ =
               CONCAT17(auVar23[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar23[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar23[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar23[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar15))));
          auVar29[8] = auVar23[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar29[9] = auVar23[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar29[10] = auVar23[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar29[0xb] = auVar23[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar30[0xc] = auVar23[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar30._0_12_ = auVar29;
          auVar30[0xd] = auVar23[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar30[0xe] = auVar23[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar30[0xf] = auVar23[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar19._0_8_ =
               CONCAT44((int)(auVar23._4_4_ + (float)((ulong)auVar29._0_8_ >> 0x20)),
                        (int)(auVar23._0_4_ + fVar15));
          auVar19._8_4_ = (int)(auVar23._8_4_ + auVar29._8_4_);
          auVar19._12_4_ = (int)(auVar23._12_4_ + auVar30._12_4_);
          if (((DAT_00531f08 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f08), iVar5 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar24._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar17 = auVar41._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531f00);
            uVar17 = auVar41._0_8_;
            if (iVar5 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar17 = auVar41._0_8_;
            }
          }
          uVar1 = (int)uVar8 + 8;
          uVar8 = (ulong)uVar1;
          auVar3._8_8_ = auVar19._8_8_;
          auVar3._0_8_ = auVar19._0_8_;
          uVar39 = NEON_sqxtn(uVar17,auVar3,4);
          sVar28 = -(ushort)(sVar28 == 0);
          sVar31 = -(ushort)(sVar31 == 0);
          sVar32 = -(ushort)(sVar32 == 0);
          sVar33 = -(ushort)(sVar33 == 0);
          sVar34 = -(ushort)(sVar34 == 0);
          sVar35 = -(ushort)(sVar35 == 0);
          sVar36 = -(ushort)(sVar36 == 0);
          sVar37 = -(ushort)(sVar37 == 0);
          fVar15 = (float)CONCAT13((byte)((uint)fVar16 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar16 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar16 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar16,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar18._0_8_ =
               CONCAT17((byte)((uint)fVar25 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar25 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar25 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar25,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar15))));
          auVar18[8] = SUB41(fVar26,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar18[9] = (byte)((uint)fVar26 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar18[10] = (byte)((uint)fVar26 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar18[0xb] = (byte)((uint)fVar26 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar20[0xc] = SUB41(fVar27,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar20._0_12_ = auVar18;
          auVar20[0xd] = (byte)((uint)fVar27 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar20[0xe] = (byte)((uint)fVar27 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar20[0xf] = (byte)((uint)fVar27 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar21._0_8_ =
               CONCAT44((int)(fVar25 + (float)((ulong)auVar18._0_8_ >> 0x20)),(int)(fVar16 + fVar15)
                       );
          auVar21._8_4_ = (int)(fVar26 + auVar18._8_4_);
          auVar21._12_4_ = (int)(fVar27 + auVar20._12_4_);
          uVar17 = NEON_sqxtn(auVar21._0_8_,auVar21,4);
          auVar22._0_8_ =
               CONCAT17((byte)((ulong)uVar39 >> 0x38) & ~(byte)((ushort)sVar33 >> 8),
                        CONCAT16((byte)((ulong)uVar39 >> 0x30) & ~(byte)sVar33,
                                 CONCAT15((byte)((ulong)uVar39 >> 0x28) &
                                          ~(byte)((ushort)sVar32 >> 8),
                                          CONCAT14((byte)((ulong)uVar39 >> 0x20) & ~(byte)sVar32,
                                                   CONCAT13((byte)((ulong)uVar39 >> 0x18) &
                                                            ~(byte)((ushort)sVar31 >> 8),
                                                            CONCAT12((byte)((ulong)uVar39 >> 0x10) &
                                                                     ~(byte)sVar31,
                                                                     CONCAT11((byte)((ulong)uVar39
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar28
                                                                                     >> 8),
                                                                              (byte)uVar39 &
                                                                              ~(byte)sVar28)))))));
          auVar22[8] = (byte)uVar17 & ~(byte)sVar34;
          auVar22[9] = (byte)((ulong)uVar17 >> 8) & ~(byte)((ushort)sVar34 >> 8);
          auVar22[10] = (byte)((ulong)uVar17 >> 0x10) & ~(byte)sVar35;
          auVar22[0xb] = (byte)((ulong)uVar17 >> 0x18) & ~(byte)((ushort)sVar35 >> 8);
          auVar22[0xc] = (byte)((ulong)uVar17 >> 0x20) & ~(byte)sVar36;
          auVar22[0xd] = (byte)((ulong)uVar17 >> 0x28) & ~(byte)((ushort)sVar36 >> 8);
          auVar22[0xe] = (byte)((ulong)uVar17 >> 0x30) & ~(byte)sVar37;
          auVar22[0xf] = (byte)((ulong)uVar17 >> 0x38) & ~(byte)((ushort)sVar37 >> 8);
          puVar13[1] = auVar22._8_8_;
          *puVar13 = auVar22._0_8_;
          psVar9 = psVar9 + 8;
          psVar10 = psVar10 + 8;
          puVar13 = puVar13 + 2;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar8 < iVar2) {
        uVar14 = -(uVar8 >> 0x1f) & 0xfffffffe00000000 | uVar8 << 1;
        lVar11 = 0;
        lVar12 = ((ulong)(uint)((iVar2 + -1) - (int)uVar8) + 1) * 2;
        do {
          while( true ) {
            uVar7 = 0;
            iVar5 = (int)*(short *)((long)param_3 + lVar11 + uVar14);
            if (iVar5 != 0) break;
LAB_00246ee8:
            *(undefined2 *)((long)param_5 + lVar11 + uVar14) = uVar7;
            lVar11 = lVar11 + 2;
            if (lVar11 == lVar12) goto LAB_00246f44;
          }
          lVar6 = lrintf((fVar47 * (float)(int)*(short *)((long)param_1 + lVar11 + uVar14)) /
                         (float)iVar5);
          uVar7 = (undefined2)lVar6;
          if ((int)lVar6 + 0x8000U < 0x10000) goto LAB_00246ee8;
          uVar7 = 0x7fff;
          if ((int)lVar6 < 1) {
            uVar7 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar11 + uVar14) = uVar7;
          lVar11 = lVar11 + 2;
        } while (lVar11 != lVar12);
      }
LAB_00246f44:
      iVar49 = iVar49 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_3 = (short *)((long)param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar49 != 0);
  }
  return;
}


==================================================================

### FUNC 00246fc8 (1004 bytes) name=FUN_00246fc8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00246fc8(undefined8 *param_1,long param_2,undefined8 *param_3,long param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  long lVar1;
  int iVar2;
  undefined1 auVar3 [16];
  char cVar4;
  int iVar5;
  long lVar6;
  int iVar7;
  undefined1 uVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  long lVar12;
  undefined8 *puVar13;
  short sVar14;
  undefined8 uVar15;
  short sVar22;
  short sVar23;
  short sVar25;
  short sVar26;
  short sVar27;
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  short sVar24;
  short sVar28;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  float fVar29;
  float fVar30;
  float fVar36;
  undefined1 auVar32 [12];
  float fVar37;
  undefined1 auVar35 [16];
  float fVar38;
  undefined8 uVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  float fVar46;
  double dVar47;
  int iVar48;
  undefined1 auVar31 [12];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  
  iVar2 = *param_7;
  dVar47 = *param_8;
  iVar48 = param_7[1];
  cVar4 = cv::checkHardwareSupport(3);
  if (cVar4 == '\0') {
    cVar4 = cv::checkHardwareSupport(100);
  }
  fVar46 = (float)dVar47;
  if (iVar48 != 0) {
    do {
      iVar7 = 0;
      if ((cVar4 != '\0') &&
         (puVar10 = param_3, puVar11 = param_1, puVar13 = param_5, 0 < iVar2 + -7)) {
        do {
          uVar15 = *puVar10;
          sVar22 = (short)(char)((ulong)uVar15 >> 8);
          sVar23 = (short)(char)((ulong)uVar15 >> 0x10);
          sVar24 = (short)(char)((ulong)uVar15 >> 0x18);
          sVar25 = (short)(char)((ulong)uVar15 >> 0x20);
          sVar26 = (short)(char)((ulong)uVar15 >> 0x28);
          sVar27 = (short)(char)((ulong)uVar15 >> 0x30);
          sVar28 = (short)(char)((ulong)uVar15 >> 0x38);
          auVar42._0_4_ = (int)(short)(char)uVar15;
          auVar42._4_4_ = (int)sVar22;
          auVar42._8_4_ = (int)sVar23;
          auVar42._12_4_ = (int)sVar24;
          auVar40._0_4_ = (int)sVar25;
          auVar40._4_4_ = (int)sVar26;
          auVar40._8_4_ = (int)sVar27;
          auVar40._12_4_ = (int)sVar28;
          auVar42 = NEON_scvtf(auVar42,4);
          auVar40 = NEON_scvtf(auVar40,4);
          auVar18 = NEON_frecpe(auVar42,4);
          auVar43 = NEON_frecpe(auVar40,4);
          uVar39 = *puVar11;
          auVar45 = NEON_frecps(auVar42,auVar18,4);
          auVar44 = NEON_frecps(auVar40,auVar43,4);
          auVar19._0_4_ = auVar18._0_4_ * auVar45._0_4_;
          auVar19._4_4_ = auVar18._4_4_ * auVar45._4_4_;
          auVar19._8_4_ = auVar18._8_4_ * auVar45._8_4_;
          auVar19._12_4_ = auVar18._12_4_ * auVar45._12_4_;
          auVar45._0_4_ = auVar43._0_4_ * auVar44._0_4_;
          auVar45._4_4_ = auVar43._4_4_ * auVar44._4_4_;
          auVar45._8_4_ = auVar43._8_4_ * auVar44._8_4_;
          auVar45._12_4_ = auVar43._12_4_ * auVar44._12_4_;
          auVar43._0_4_ = (int)(short)(char)uVar39;
          auVar43._4_4_ = (int)(short)(char)((ulong)uVar39 >> 8);
          auVar43._8_4_ = (int)(short)(char)((ulong)uVar39 >> 0x10);
          auVar43._12_4_ = (int)(short)(char)((ulong)uVar39 >> 0x18);
          auVar44._0_4_ = (int)(short)(char)((ulong)uVar39 >> 0x20);
          auVar44._4_4_ = (int)(short)(char)((ulong)uVar39 >> 0x28);
          auVar44._8_4_ = (int)(short)(char)((ulong)uVar39 >> 0x30);
          auVar44._12_4_ = (int)(short)(char)((ulong)uVar39 >> 0x38);
          auVar42 = NEON_frecps(auVar42,auVar19,4);
          auVar43 = NEON_scvtf(auVar43,4);
          auVar44 = NEON_scvtf(auVar44,4);
          auVar40 = NEON_frecps(auVar40,auVar45,4);
          auVar18._0_8_ =
               CONCAT44(fVar46 * auVar43._4_4_ * auVar19._4_4_ * auVar42._4_4_,
                        fVar46 * auVar43._0_4_ * auVar19._0_4_ * auVar42._0_4_);
          auVar18._8_4_ = fVar46 * auVar43._8_4_ * auVar19._8_4_ * auVar42._8_4_;
          auVar18._12_4_ = fVar46 * auVar43._12_4_ * auVar19._12_4_ * auVar42._12_4_;
          fVar30 = fVar46 * auVar44._0_4_ * auVar45._0_4_ * auVar40._0_4_;
          fVar36 = fVar46 * auVar44._4_4_ * auVar45._4_4_ * auVar40._4_4_;
          fVar37 = fVar46 * auVar44._8_4_ * auVar45._8_4_ * auVar40._8_4_;
          fVar38 = fVar46 * auVar44._12_4_ * auVar45._12_4_ * auVar40._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar39 = auVar18._8_8_;
            iVar5 = __cxa_guard_acquire(&DAT_00531f08);
            auVar18._8_8_ = uVar39;
            if (iVar5 != 0) {
              auVar20._8_4_ = 0x80000000;
              auVar20._0_8_ = 0x8000000080000000;
              auVar20._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar20._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f00), iVar5 != 0))
          {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar41[1] = bRam0000000000531ee1;
          auVar41[0] = DAT_00531ee0;
          auVar41[2] = bRam0000000000531ee2;
          auVar41[3] = bRam0000000000531ee3;
          auVar41[4] = bRam0000000000531ee4;
          auVar41[5] = bRam0000000000531ee5;
          auVar41[6] = bRam0000000000531ee6;
          auVar41[7] = bRam0000000000531ee7;
          auVar41[8] = bRam0000000000531ee8;
          auVar41[9] = bRam0000000000531ee9;
          auVar41[10] = bRam0000000000531eea;
          auVar41[0xb] = bRam0000000000531eeb;
          auVar41[0xc] = bRam0000000000531eec;
          auVar41[0xd] = bRam0000000000531eed;
          auVar41[0xe] = bRam0000000000531eee;
          auVar41[0xf] = bRam0000000000531eef;
          fVar29 = (float)CONCAT13(auVar18[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar18[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar18[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar18[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar31._0_8_ =
               CONCAT17(auVar18[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar18[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar18[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar18[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar29))));
          auVar31[8] = auVar18[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar31[9] = auVar18[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar31[10] = auVar18[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar31[0xb] = auVar18[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar33[0xc] = auVar18[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar33._0_12_ = auVar31;
          auVar33[0xd] = auVar18[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar33[0xe] = auVar18[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar33[0xf] = auVar18[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar16._0_8_ =
               CONCAT44((int)(auVar18._4_4_ + (float)((ulong)auVar31._0_8_ >> 0x20)),
                        (int)(auVar18._0_4_ + fVar29));
          auVar16._8_4_ = (int)(auVar18._8_4_ + auVar31._8_4_);
          auVar16._12_4_ = (int)(auVar18._12_4_ + auVar33._12_4_);
          if (((DAT_00531f08 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531f08), iVar5 != 0))
          {
            auVar21._8_4_ = 0x80000000;
            auVar21._0_8_ = 0x8000000080000000;
            auVar21._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar21._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar39 = auVar41._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531f00);
            uVar39 = auVar41._0_8_;
            if (iVar5 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar39 = auVar41._0_8_;
            }
          }
          iVar7 = iVar7 + 8;
          auVar3._8_8_ = auVar16._8_8_;
          auVar3._0_8_ = auVar16._0_8_;
          uVar39 = NEON_sqxtn(uVar39,auVar3,4);
          sVar14 = -(ushort)((char)uVar15 == 0);
          sVar22 = -(ushort)(sVar22 == 0);
          sVar23 = -(ushort)(sVar23 == 0);
          sVar24 = -(ushort)(sVar24 == 0);
          sVar25 = -(ushort)(sVar25 == 0);
          sVar26 = -(ushort)(sVar26 == 0);
          sVar27 = -(ushort)(sVar27 == 0);
          sVar28 = -(ushort)(sVar28 == 0);
          fVar29 = (float)CONCAT13((byte)((uint)fVar30 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar30 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar30 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar30,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar32._0_8_ =
               CONCAT17((byte)((uint)fVar36 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar36 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar36 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar36,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar29))));
          auVar32[8] = SUB41(fVar37,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar32[9] = (byte)((uint)fVar37 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar32[10] = (byte)((uint)fVar37 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar32[0xb] = (byte)((uint)fVar37 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar34[0xc] = SUB41(fVar38,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar34._0_12_ = auVar32;
          auVar34[0xd] = (byte)((uint)fVar38 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar34[0xe] = (byte)((uint)fVar38 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar34[0xf] = (byte)((uint)fVar38 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar35._0_8_ =
               CONCAT44((int)(fVar36 + (float)((ulong)auVar32._0_8_ >> 0x20)),(int)(fVar30 + fVar29)
                       );
          auVar35._8_4_ = (int)(fVar37 + auVar32._8_4_);
          auVar35._12_4_ = (int)(fVar38 + auVar34._12_4_);
          uVar15 = NEON_sqxtn(auVar35._0_8_,auVar35,4);
          auVar17._0_8_ =
               CONCAT17((byte)((ulong)uVar39 >> 0x38) & ~(byte)((ushort)sVar24 >> 8),
                        CONCAT16((byte)((ulong)uVar39 >> 0x30) & ~(byte)sVar24,
                                 CONCAT15((byte)((ulong)uVar39 >> 0x28) &
                                          ~(byte)((ushort)sVar23 >> 8),
                                          CONCAT14((byte)((ulong)uVar39 >> 0x20) & ~(byte)sVar23,
                                                   CONCAT13((byte)((ulong)uVar39 >> 0x18) &
                                                            ~(byte)((ushort)sVar22 >> 8),
                                                            CONCAT12((byte)((ulong)uVar39 >> 0x10) &
                                                                     ~(byte)sVar22,
                                                                     CONCAT11((byte)((ulong)uVar39
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar14
                                                                                     >> 8),
                                                                              (byte)uVar39 &
                                                                              ~(byte)sVar14)))))));
          auVar17[8] = (byte)uVar15 & ~(byte)sVar25;
          auVar17[9] = (byte)((ulong)uVar15 >> 8) & ~(byte)((ushort)sVar25 >> 8);
          auVar17[10] = (byte)((ulong)uVar15 >> 0x10) & ~(byte)sVar26;
          auVar17[0xb] = (byte)((ulong)uVar15 >> 0x18) & ~(byte)((ushort)sVar26 >> 8);
          auVar17[0xc] = (byte)((ulong)uVar15 >> 0x20) & ~(byte)sVar27;
          auVar17[0xd] = (byte)((ulong)uVar15 >> 0x28) & ~(byte)((ushort)sVar27 >> 8);
          auVar17[0xe] = (byte)((ulong)uVar15 >> 0x30) & ~(byte)sVar28;
          auVar17[0xf] = (byte)((ulong)uVar15 >> 0x38) & ~(byte)((ushort)sVar28 >> 8);
          uVar15 = NEON_sqxtn(auVar17._0_8_,auVar17,2);
          *puVar13 = uVar15;
          puVar10 = puVar10 + 1;
          puVar11 = puVar11 + 1;
          puVar13 = puVar13 + 1;
        } while (iVar7 < iVar2 + -7);
      }
      if (iVar7 < iVar2) {
        lVar12 = 0;
        lVar9 = (long)iVar7;
        lVar1 = (ulong)(uint)((iVar2 + -1) - iVar7) + 1;
        do {
          while( true ) {
            uVar8 = 0;
            iVar7 = (int)*(char *)((long)param_3 + lVar12 + lVar9);
            if (iVar7 != 0) break;
LAB_002472b4:
            *(undefined1 *)((long)param_5 + lVar12 + lVar9) = uVar8;
            lVar12 = lVar12 + 1;
            if (lVar12 == lVar1) goto LAB_00247330;
          }
          lVar6 = lrintf((fVar46 * (float)(int)*(char *)((long)param_1 + lVar12 + lVar9)) /
                         (float)iVar7);
          uVar8 = (undefined1)lVar6;
          if ((int)lVar6 + 0x80U < 0x100) goto LAB_002472b4;
          uVar8 = 0x7f;
          if ((int)lVar6 < 1) {
            uVar8 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar12 + lVar9) = uVar8;
          lVar12 = lVar12 + 1;
        } while (lVar12 != lVar1);
      }
LAB_00247330:
      iVar48 = iVar48 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_3 = (undefined8 *)((long)param_3 + param_4);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar48 != 0);
  }
  return;
}


==================================================================

### FUNC 002473b4 (1008 bytes) name=FUN_002473b4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002473b4(ushort *param_1,ulong param_2,ushort *param_3,ulong param_4,undefined8 *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  ushort uVar2;
  ushort uVar3;
  ushort uVar4;
  ushort uVar5;
  ushort uVar6;
  ushort uVar7;
  ushort uVar8;
  ushort uVar9;
  undefined1 auVar10 [16];
  char cVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  ulong uVar15;
  ushort *puVar16;
  long lVar17;
  ushort *puVar18;
  long lVar19;
  ulong uVar20;
  undefined8 *puVar21;
  float fVar22;
  float fVar23;
  undefined8 uVar24;
  float fVar33;
  undefined1 auVar26 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  float fVar32;
  float fVar34;
  undefined1 auVar31 [16];
  short sVar35;
  short sVar38;
  short sVar39;
  short sVar40;
  short sVar41;
  undefined1 auVar36 [12];
  short sVar42;
  short sVar43;
  short sVar44;
  undefined1 auVar45 [16];
  undefined8 uVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  float fVar54;
  double dVar55;
  int iVar56;
  undefined1 auVar25 [12];
  undefined1 auVar27 [16];
  undefined1 auVar37 [16];
  
  dVar55 = *param_8;
  iVar1 = *param_7;
  iVar56 = param_7[1];
  cVar11 = cv::checkHardwareSupport(3);
  if (cVar11 == '\0') {
    cVar11 = cv::checkHardwareSupport(100);
  }
  fVar54 = (float)dVar55;
  if (iVar56 != 0) {
    do {
      uVar15 = 0;
      if ((cVar11 != '\0') &&
         (puVar16 = param_3, puVar18 = param_1, puVar21 = param_5, 0 < iVar1 + -7)) {
        do {
          uVar2 = *puVar16;
          uVar3 = puVar16[1];
          uVar4 = puVar16[2];
          uVar5 = puVar16[3];
          uVar6 = puVar16[4];
          uVar7 = puVar16[5];
          uVar8 = puVar16[6];
          uVar9 = puVar16[7];
          auVar53._2_2_ = 0;
          auVar53._0_2_ = uVar6;
          auVar53._4_2_ = uVar7;
          auVar53._6_2_ = 0;
          auVar53._8_2_ = uVar8;
          auVar53._10_2_ = 0;
          auVar53._12_2_ = uVar9;
          auVar53._14_2_ = 0;
          auVar47 = NEON_scvtf(auVar53,4);
          auVar49 = NEON_frecpe(auVar47,4);
          auVar45._2_2_ = 0;
          auVar45._0_2_ = uVar2;
          auVar45._4_2_ = uVar3;
          auVar45._6_2_ = 0;
          auVar45._8_2_ = uVar4;
          auVar45._10_2_ = 0;
          auVar45._12_2_ = uVar5;
          auVar45._14_2_ = 0;
          auVar45 = NEON_scvtf(auVar45,4);
          auVar53 = NEON_frecps(auVar47,auVar49,4);
          auVar30 = NEON_frecpe(auVar45,4);
          auVar50._0_4_ = auVar49._0_4_ * auVar53._0_4_;
          auVar50._4_4_ = auVar49._4_4_ * auVar53._4_4_;
          auVar50._8_4_ = auVar49._8_4_ * auVar53._8_4_;
          auVar50._12_4_ = auVar49._12_4_ * auVar53._12_4_;
          auVar51._2_2_ = 0;
          auVar51._0_2_ = puVar18[4];
          auVar51._4_2_ = puVar18[5];
          auVar51._6_2_ = 0;
          auVar51._8_2_ = puVar18[6];
          auVar51._10_2_ = 0;
          auVar51._12_2_ = puVar18[7];
          auVar51._14_2_ = 0;
          auVar51 = NEON_scvtf(auVar51,4);
          auVar52 = NEON_frecps(auVar45,auVar30,4);
          auVar53 = NEON_frecps(auVar47,auVar50,4);
          auVar49._2_2_ = 0;
          auVar49._0_2_ = *puVar18;
          auVar49._4_2_ = puVar18[1];
          auVar49._6_2_ = 0;
          auVar49._8_2_ = puVar18[2];
          auVar49._10_2_ = 0;
          auVar49._12_2_ = puVar18[3];
          auVar49._14_2_ = 0;
          auVar47._0_4_ = auVar30._0_4_ * auVar52._0_4_;
          auVar47._4_4_ = auVar30._4_4_ * auVar52._4_4_;
          auVar47._8_4_ = auVar30._8_4_ * auVar52._8_4_;
          auVar47._12_4_ = auVar30._12_4_ * auVar52._12_4_;
          auVar49 = NEON_scvtf(auVar49,4);
          auVar45 = NEON_frecps(auVar45,auVar47,4);
          fVar23 = fVar54 * auVar51._0_4_ * auVar50._0_4_ * auVar53._0_4_;
          fVar32 = fVar54 * auVar51._4_4_ * auVar50._4_4_ * auVar53._4_4_;
          fVar33 = fVar54 * auVar51._8_4_ * auVar50._8_4_ * auVar53._8_4_;
          fVar34 = fVar54 * auVar51._12_4_ * auVar50._12_4_ * auVar53._12_4_;
          auVar30._0_8_ =
               CONCAT44(fVar54 * auVar49._4_4_ * auVar47._4_4_ * auVar45._4_4_,
                        fVar54 * auVar49._0_4_ * auVar47._0_4_ * auVar45._0_4_);
          auVar30._8_4_ = fVar54 * auVar49._8_4_ * auVar47._8_4_ * auVar45._8_4_;
          auVar30._12_4_ = fVar54 * auVar49._12_4_ * auVar47._12_4_ * auVar45._12_4_;
          if ((DAT_00531f08 & 1) == 0) {
            uVar24 = auVar30._8_8_;
            iVar12 = __cxa_guard_acquire(&DAT_00531f08);
            auVar30._8_8_ = uVar24;
            if (iVar12 != 0) {
              auVar52._8_4_ = 0x80000000;
              auVar52._0_8_ = 0x8000000080000000;
              auVar52._12_4_ = 0x80000000;
              _uRam0000000000531ef8 = auVar52._8_8_;
              _DAT_00531ef0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531f08);
            }
          }
          if (((DAT_00531f00 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531f00), iVar12 != 0)) {
            bRam0000000000531ee8 = 0;
            bRam0000000000531ee9 = 0;
            bRam0000000000531eea = 0;
            bRam0000000000531eeb = 0x3f;
            bRam0000000000531eec = 0;
            bRam0000000000531eed = 0;
            bRam0000000000531eee = 0;
            bRam0000000000531eef = 0x3f;
            DAT_00531ee0 = 0;
            bRam0000000000531ee1 = 0;
            bRam0000000000531ee2 = 0;
            bRam0000000000531ee3 = 0x3f;
            bRam0000000000531ee4 = 0;
            bRam0000000000531ee5 = 0;
            bRam0000000000531ee6 = 0;
            bRam0000000000531ee7 = 0x3f;
            __cxa_guard_release(&DAT_00531f00);
          }
          auVar48[1] = bRam0000000000531ee1;
          auVar48[0] = DAT_00531ee0;
          auVar48[2] = bRam0000000000531ee2;
          auVar48[3] = bRam0000000000531ee3;
          auVar48[4] = bRam0000000000531ee4;
          auVar48[5] = bRam0000000000531ee5;
          auVar48[6] = bRam0000000000531ee6;
          auVar48[7] = bRam0000000000531ee7;
          auVar48[8] = bRam0000000000531ee8;
          auVar48[9] = bRam0000000000531ee9;
          auVar48[10] = bRam0000000000531eea;
          auVar48[0xb] = bRam0000000000531eeb;
          auVar48[0xc] = bRam0000000000531eec;
          auVar48[0xd] = bRam0000000000531eed;
          auVar48[0xe] = bRam0000000000531eee;
          auVar48[0xf] = bRam0000000000531eef;
          fVar22 = (float)CONCAT13(auVar30[3] & bRam0000000000531ef3 | bRam0000000000531ee3,
                                   CONCAT12(auVar30[2] & bRam0000000000531ef2 | bRam0000000000531ee2
                                            ,CONCAT11(auVar30[1] & DAT_00531ef0_1 |
                                                      bRam0000000000531ee1,
                                                      auVar30[0] & DAT_00531ef0 | DAT_00531ee0)));
          auVar36._0_8_ =
               CONCAT17(auVar30[7] & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16(auVar30[6] & bRam0000000000531ef6 | bRam0000000000531ee6,
                                 CONCAT15(auVar30[5] & bRam0000000000531ef5 | bRam0000000000531ee5,
                                          CONCAT14(auVar30[4] & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar22))));
          auVar36[8] = auVar30[8] & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar36[9] = auVar30[9] & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9;
          auVar36[10] = auVar30[10] & bRam0000000000531efa | bRam0000000000531eea;
          auVar36[0xb] = auVar30[0xb] & bRam0000000000531efb | bRam0000000000531eeb;
          auVar37[0xc] = auVar30[0xc] & bRam0000000000531efc | bRam0000000000531eec;
          auVar37._0_12_ = auVar36;
          auVar37[0xd] = auVar30[0xd] & bRam0000000000531efd | bRam0000000000531eed;
          auVar37[0xe] = auVar30[0xe] & bRam0000000000531efe | bRam0000000000531eee;
          auVar37[0xf] = auVar30[0xf] & bRam0000000000531eff | bRam0000000000531eef;
          auVar26._0_8_ =
               CONCAT44((int)(auVar30._4_4_ + (float)((ulong)auVar36._0_8_ >> 0x20)),
                        (int)(auVar30._0_4_ + fVar22));
          auVar26._8_4_ = (int)(auVar30._8_4_ + auVar36._8_4_);
          auVar26._12_4_ = (int)(auVar30._12_4_ + auVar37._12_4_);
          if (((DAT_00531f08 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531f08), iVar12 != 0)) {
            auVar31._8_4_ = 0x80000000;
            auVar31._0_8_ = 0x8000000080000000;
            auVar31._12_4_ = 0x80000000;
            _uRam0000000000531ef8 = auVar31._8_8_;
            _DAT_00531ef0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531f08);
          }
          uVar24 = auVar48._0_8_;
          if ((DAT_00531f00 & 1) == 0) {
            iVar12 = __cxa_guard_acquire(&DAT_00531f00);
            uVar24 = auVar48._0_8_;
            if (iVar12 != 0) {
              bRam0000000000531ee8 = 0;
              bRam0000000000531ee9 = 0;
              bRam0000000000531eea = 0;
              bRam0000000000531eeb = 0x3f;
              bRam0000000000531eec = 0;
              bRam0000000000531eed = 0;
              bRam0000000000531eee = 0;
              bRam0000000000531eef = 0x3f;
              DAT_00531ee0 = 0;
              bRam0000000000531ee1 = 0;
              bRam0000000000531ee2 = 0;
              bRam0000000000531ee3 = 0x3f;
              bRam0000000000531ee4 = 0;
              bRam0000000000531ee5 = 0;
              bRam0000000000531ee6 = 0;
              bRam0000000000531ee7 = 0x3f;
              __cxa_guard_release(&DAT_00531f00);
              uVar24 = auVar48._0_8_;
            }
          }
          uVar13 = (int)uVar15 + 8;
          uVar15 = (ulong)uVar13;
          auVar10._8_8_ = auVar26._8_8_;
          auVar10._0_8_ = auVar26._0_8_;
          uVar46 = NEON_sqxtun(uVar24,auVar10,4);
          sVar35 = -(ushort)(uVar2 == 0);
          sVar38 = -(ushort)(uVar3 == 0);
          sVar39 = -(ushort)(uVar4 == 0);
          sVar40 = -(ushort)(uVar5 == 0);
          sVar41 = -(ushort)(uVar6 == 0);
          sVar42 = -(ushort)(uVar7 == 0);
          sVar43 = -(ushort)(uVar8 == 0);
          sVar44 = -(ushort)(uVar9 == 0);
          fVar22 = (float)CONCAT13((byte)((uint)fVar23 >> 0x18) & bRam0000000000531ef3 |
                                   bRam0000000000531ee3,
                                   CONCAT12((byte)((uint)fVar23 >> 0x10) & bRam0000000000531ef2 |
                                            bRam0000000000531ee2,
                                            CONCAT11((byte)((uint)fVar23 >> 8) & DAT_00531ef0_1 |
                                                     bRam0000000000531ee1,
                                                     SUB41(fVar23,0) & DAT_00531ef0 | DAT_00531ee0))
                                  );
          auVar25._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & bRam0000000000531ef7 | bRam0000000000531ee7,
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & bRam0000000000531ef6 |
                                 bRam0000000000531ee6,
                                 CONCAT15((byte)((uint)fVar32 >> 8) & bRam0000000000531ef5 |
                                          bRam0000000000531ee5,
                                          CONCAT14(SUB41(fVar32,0) & bRam0000000000531ef4 |
                                                   bRam0000000000531ee4,fVar22))));
          auVar25[8] = SUB41(fVar33,0) & (byte)uRam0000000000531ef8 | bRam0000000000531ee8;
          auVar25[9] = (byte)((uint)fVar33 >> 8) & uRam0000000000531ef8._1_1_ | bRam0000000000531ee9
          ;
          auVar25[10] = (byte)((uint)fVar33 >> 0x10) & bRam0000000000531efa | bRam0000000000531eea;
          auVar25[0xb] = (byte)((uint)fVar33 >> 0x18) & bRam0000000000531efb | bRam0000000000531eeb;
          auVar27[0xc] = SUB41(fVar34,0) & bRam0000000000531efc | bRam0000000000531eec;
          auVar27._0_12_ = auVar25;
          auVar27[0xd] = (byte)((uint)fVar34 >> 8) & bRam0000000000531efd | bRam0000000000531eed;
          auVar27[0xe] = (byte)((uint)fVar34 >> 0x10) & bRam0000000000531efe | bRam0000000000531eee;
          auVar27[0xf] = (byte)((uint)fVar34 >> 0x18) & bRam0000000000531eff | bRam0000000000531eef;
          auVar28._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar25._0_8_ >> 0x20)),(int)(fVar23 + fVar22)
                       );
          auVar28._8_4_ = (int)(fVar33 + auVar25._8_4_);
          auVar28._12_4_ = (int)(fVar34 + auVar27._12_4_);
          uVar24 = NEON_sqxtun(auVar28._0_8_,auVar28,4);
          auVar29._0_8_ =
               CONCAT17((byte)((ulong)uVar46 >> 0x38) & ~(byte)((ushort)sVar40 >> 8),
                        CONCAT16((byte)((ulong)uVar46 >> 0x30) & ~(byte)sVar40,
                                 CONCAT15((byte)((ulong)uVar46 >> 0x28) &
                                          ~(byte)((ushort)sVar39 >> 8),
                                          CONCAT14((byte)((ulong)uVar46 >> 0x20) & ~(byte)sVar39,
                                                   CONCAT13((byte)((ulong)uVar46 >> 0x18) &
                                                            ~(byte)((ushort)sVar38 >> 8),
                                                            CONCAT12((byte)((ulong)uVar46 >> 0x10) &
                                                                     ~(byte)sVar38,
                                                                     CONCAT11((byte)((ulong)uVar46
                                                                                    >> 8) &
                                                                              ~(byte)((ushort)sVar35
                                                                                     >> 8),
                                                                              (byte)uVar46 &
                                                                              ~(byte)sVar35)))))));
          auVar29[8] = (byte)uVar24 & ~(byte)sVar41;
          auVar29[9] = (byte)((ulong)uVar24 >> 8) & ~(byte)((ushort)sVar41 >> 8);
          auVar29[10] = (byte)((ulong)uVar24 >> 0x10) & ~(byte)sVar42;
          auVar29[0xb] = (byte)((ulong)uVar24 >> 0x18) & ~(byte)((ushort)sVar42 >> 8);
          auVar29[0xc] = (byte)((ulong)uVar24 >> 0x20) & ~(byte)sVar43;
          auVar29[0xd] = (byte)((ulong)uVar24 >> 0x28) & ~(byte)((ushort)sVar43 >> 8);
          auVar29[0xe] = (byte)((ulong)uVar24 >> 0x30) & ~(byte)sVar44;
          auVar29[0xf] = (byte)((ulong)uVar24 >> 0x38) & ~(byte)((ushort)sVar44 >> 8);
          puVar21[1] = auVar29._8_8_;
          *puVar21 = auVar29._0_8_;
          puVar16 = puVar16 + 8;
          puVar18 = puVar18 + 8;
          puVar21 = puVar21 + 2;
        } while ((int)uVar13 < iVar1 + -7);
      }
      if ((int)uVar15 < iVar1) {
        uVar20 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
        lVar17 = 0;
        lVar19 = ((ulong)(uint)((iVar1 + -1) - (int)uVar15) + 1) * 2;
        do {
          while( true ) {
            uVar2 = *(ushort *)((long)param_3 + lVar17 + uVar20);
            if (uVar2 == 0) break;
            lVar14 = lrintf((fVar54 * (float)*(ushort *)((long)param_1 + lVar17 + uVar20)) /
                            (float)uVar2);
            uVar13 = (uint)lVar14;
            if (0xffff < uVar13) {
              uVar13 = -(uint)(0 < (int)uVar13);
            }
            *(short *)((long)param_5 + lVar17 + uVar20) = (short)uVar13;
            lVar17 = lVar17 + 2;
            if (lVar17 == lVar19) goto LAB_00247720;
          }
          *(undefined2 *)((long)param_5 + lVar17 + uVar20) = 0;
          lVar17 = lVar17 + 2;
        } while (lVar17 != lVar19);
      }
LAB_00247720:
      iVar56 = iVar56 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_3 = (ushort *)((long)param_3 + (param_4 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar56 != 0);
  }
  return;
}


==================================================================

### FUNC 002477a4 (3040 bytes) name=FUN_002477a4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002477a4(ushort *param_1,ulong param_2,undefined1 (*param_3) [16],ulong param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  ushort *puVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  undefined8 *puVar15;
  ulong uVar16;
  long lVar17;
  long lVar18;
  ushort *puVar19;
  ushort *puVar20;
  short sVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  ushort *puVar25;
  long lVar26;
  uint uVar27;
  undefined1 (*pauVar28) [16];
  undefined1 (*pauVar29) [16];
  uint uVar30;
  ushort *puVar31;
  ulong uVar32;
  undefined2 *puVar33;
  undefined8 uVar34;
  float fVar44;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  float fVar57;
  undefined4 uVar58;
  undefined4 uVar59;
  int iVar60;
  int iVar61;
  
  iVar3 = *param_7;
  iVar61 = param_7[1];
  fVar57 = (float)*param_8;
  if (fVar57 == 1.0) {
    if (iVar61 != 0) {
      uVar5 = iVar3 - 8U >> 3;
      lVar22 = NEON_shl(param_6 >> 1,1);
      uVar4 = (uVar5 + 1) * 8;
      if (iVar3 + -7 < 1) {
        uVar4 = 0;
      }
      uVar7 = (iVar3 + -4) - uVar4;
      uVar14 = uVar7 >> 2;
      lVar18 = (long)(int)uVar4;
      uVar13 = uVar4 + 4 + uVar14 * 4;
      uVar6 = (uVar14 - 1 >> 1) + 1;
      lVar17 = lVar18 * 2;
      do {
        if (0 < iVar3 + -7) {
          pauVar28 = param_3;
          puVar31 = param_1;
          puVar15 = param_5;
          do {
            auVar53 = *pauVar28;
            puVar19 = puVar31 + 4;
            puVar20 = puVar31 + 5;
            puVar25 = puVar31 + 6;
            puVar11 = puVar31 + 7;
            auVar39._2_2_ = 0;
            auVar39._0_2_ = *puVar31;
            auVar39._4_2_ = puVar31[1];
            auVar39._6_2_ = 0;
            auVar39._8_2_ = puVar31[2];
            auVar39._10_2_ = 0;
            auVar39._12_2_ = puVar31[3];
            auVar39._14_2_ = 0;
            auVar46 = NEON_ucvtf(auVar39,4);
            puVar31 = puVar31 + 8;
            auVar45._2_2_ = 0;
            auVar45._0_2_ = auVar53._0_2_;
            auVar45._4_2_ = auVar53._2_2_;
            auVar45._6_2_ = 0;
            auVar45._8_2_ = auVar53._4_2_;
            auVar45._10_2_ = 0;
            auVar45._12_2_ = auVar53._6_2_;
            auVar45._14_2_ = 0;
            auVar56._2_2_ = 0;
            auVar56._0_2_ = *puVar19;
            auVar56._4_2_ = *puVar20;
            auVar56._6_2_ = 0;
            auVar56._8_2_ = *puVar25;
            auVar56._10_2_ = 0;
            auVar56._12_2_ = *puVar11;
            auVar56._14_2_ = 0;
            auVar39 = NEON_ucvtf(auVar45,4);
            pauVar28 = pauVar28 + 1;
            auVar56 = NEON_ucvtf(auVar56,4);
            auVar50._2_2_ = 0;
            auVar50._0_2_ = auVar53._8_2_;
            auVar50._4_2_ = auVar53._10_2_;
            auVar50._6_2_ = 0;
            auVar50._8_2_ = auVar53._12_2_;
            auVar50._10_2_ = 0;
            auVar50._12_2_ = auVar53._14_2_;
            auVar50._14_2_ = 0;
            auVar45 = NEON_ucvtf(auVar50,4);
            fVar57 = auVar46._0_4_ * auVar39._0_4_;
            fVar44 = auVar46._4_4_ * auVar39._4_4_;
            auVar47._0_8_ = CONCAT44(fVar44,fVar57);
            auVar47._8_4_ = auVar46._8_4_ * auVar39._8_4_;
            auVar47._12_4_ = auVar46._12_4_ * auVar39._12_4_;
            auVar53 = auVar47;
            if ((DAT_00531ec0 & 1) == 0) {
              iVar12 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar53._8_8_ = auVar47._8_8_;
              auVar53._0_8_ = auVar47._0_8_;
              if (iVar12 == 0) goto LAB_00247fe8;
              auVar53 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar53._8_8_;
              _DAT_00531e90 = auVar53._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
              iVar12 = (int)(fVar57 + (float)_DAT_00531e90);
              iVar60 = (int)(fVar44 + (float)((ulong)_DAT_00531e90 >> 0x20));
              auVar10._4_4_ = iVar60;
              auVar10._0_4_ = iVar12;
              auVar10._8_4_ = (int)(auVar47._8_4_ + (float)uRam0000000000531e98);
              auVar10._12_4_ = (int)(auVar47._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
              uVar34 = NEON_uqxtn(CONCAT44(iVar60,iVar12),auVar10,4);
              uVar58 = (undefined4)uVar34;
              uVar59 = (undefined4)((ulong)uVar34 >> 0x20);
            }
            else {
LAB_00247fe8:
              iVar12 = (int)(auVar53._0_4_ + (float)_DAT_00531e90);
              iVar60 = (int)(auVar53._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
              auVar46._4_4_ = iVar60;
              auVar46._0_4_ = iVar12;
              auVar46._8_4_ = (int)(auVar53._8_4_ + (float)uRam0000000000531e98);
              auVar46._12_4_ = (int)(auVar53._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
              uVar34 = NEON_uqxtn(CONCAT44(iVar60,iVar12),auVar46,4);
              uVar58 = (undefined4)uVar34;
              uVar59 = (undefined4)((ulong)uVar34 >> 0x20);
            }
            if (((DAT_00531ec0 & 1) == 0) &&
               (iVar12 = __cxa_guard_acquire(&DAT_00531ec0), iVar12 != 0)) {
              auVar53 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar53._8_8_;
              _DAT_00531e90 = auVar53._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
            auVar43._0_8_ =
                 CONCAT44((int)(auVar56._4_4_ * auVar45._4_4_ + DAT_00531e90_4),
                          (int)(auVar56._0_4_ * auVar45._0_4_ + _DAT_00531e90));
            auVar43._8_4_ = (int)(auVar56._8_4_ * auVar45._8_4_ + (float)uRam0000000000531e98);
            auVar43._12_4_ = (int)(auVar56._12_4_ * auVar45._12_4_ + uRam0000000000531e98._4_4_);
            uVar34 = NEON_uqxtn(auVar43._0_8_,auVar43,4);
            puVar15[1] = uVar34;
            *puVar15 = CONCAT44(uVar59,uVar58);
            puVar15 = puVar15 + 2;
          } while (puVar31 != param_1 + ((ulong)uVar5 + 1) * 8);
        }
        uVar1 = uVar4;
        if ((int)uVar4 < iVar3 + -3) {
          puVar31 = (ushort *)((long)param_5 + lVar17 + 0x40);
          puVar19 = param_1 + lVar18;
          puVar20 = (ushort *)((long)param_5 + lVar17);
          puVar25 = (ushort *)(*param_3 + lVar17);
          uVar1 = uVar13;
          if ((puVar19 < puVar31 && puVar20 < param_1 + lVar18 + 0x20 ||
               puVar25 < puVar31 && puVar20 < param_3[4] + lVar17) || (uVar14 + 1 < 3)) {
            do {
              puVar31 = puVar19 + 4;
              iVar12 = (uint)*puVar19 * (uint)*puVar25;
              iVar60 = (uint)puVar19[1] * (uint)puVar25[1];
              if (0xffff < iVar12) {
                iVar12 = -1;
              }
              *puVar20 = (ushort)iVar12;
              if (0xffff < iVar60) {
                iVar60 = -1;
              }
              puVar20[1] = (ushort)iVar60;
              iVar12 = (uint)puVar19[2] * (uint)puVar25[2];
              iVar60 = (uint)puVar19[3] * (uint)puVar25[3];
              if (0xffff < iVar12) {
                iVar12 = -1;
              }
              if (0xffff < iVar60) {
                iVar60 = -1;
              }
              puVar20[2] = (ushort)iVar12;
              puVar20[3] = (ushort)iVar60;
              puVar19 = puVar31;
              puVar20 = puVar20 + 4;
              puVar25 = puVar25 + 4;
            } while (puVar31 != param_1 + lVar18 + 4 + (ulong)uVar14 * 4);
          }
          else {
            uVar27 = uVar4;
            if (3 < uVar7) {
              lVar26 = 0;
              uVar27 = 0;
              do {
                auVar54._8_4_ = 0xffff;
                auVar54._0_8_ = 0xffff0000ffff;
                auVar54._12_4_ = 0xffff;
                puVar15 = (undefined8 *)((long)puVar20 + lVar26);
                auVar53 = *(undefined1 (*) [16])((long)puVar19 + lVar26);
                uVar27 = uVar27 + 1;
                auVar39 = *(undefined1 (*) [16])((long)puVar25 + lVar26);
                lVar26 = lVar26 + 0x10;
                auVar45 = NEON_umull(auVar39._0_8_,auVar53._0_8_,2);
                auVar41._0_4_ = (uint)auVar39._8_2_ * (uint)auVar53._8_2_;
                auVar41._4_4_ = (uint)auVar39._10_2_ * (uint)auVar53._10_2_;
                auVar41._8_4_ = (uint)auVar39._12_2_ * (uint)auVar53._12_2_;
                auVar41._12_4_ = (uint)auVar39._14_2_ * (uint)auVar53._14_2_;
                auVar39 = NEON_smin(auVar45,auVar54,4);
                auVar53 = NEON_smin(auVar41,auVar54,4);
                auVar48._0_8_ =
                     CONCAT26(auVar39._12_2_,
                              CONCAT24(auVar39._8_2_,CONCAT22(auVar39._4_2_,auVar39._0_2_)));
                auVar48._8_2_ = auVar53._0_2_;
                auVar48._10_2_ = auVar53._4_2_;
                auVar48._12_2_ = auVar53._8_2_;
                auVar48._14_2_ = auVar53._12_2_;
                puVar15[1] = auVar48._8_8_;
                *puVar15 = auVar48._0_8_;
              } while (uVar27 < uVar6);
              uVar27 = uVar4 + uVar6 * 8;
              if (uVar14 + 1 == uVar6 * 2) goto LAB_00247b4c;
            }
            uVar32 = -(ulong)(uVar27 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar27 << 1;
            lVar26 = uVar32 + 2;
            lVar23 = uVar32 + 4;
            lVar24 = uVar32 + 6;
            iVar12 = (uint)*(ushort *)((long)param_1 + uVar32) *
                     (uint)*(ushort *)(*param_3 + uVar32);
            iVar60 = (uint)*(ushort *)((long)param_1 + lVar26) *
                     (uint)*(ushort *)(*param_3 + lVar26);
            if (0xffff < iVar12) {
              iVar12 = -1;
            }
            *(short *)((long)param_5 + uVar32) = (short)iVar12;
            if (0xffff < iVar60) {
              iVar60 = -1;
            }
            *(short *)((long)param_5 + lVar26) = (short)iVar60;
            iVar12 = (uint)*(ushort *)((long)param_1 + lVar23) *
                     (uint)*(ushort *)(*param_3 + lVar23);
            iVar60 = (uint)*(ushort *)((long)param_1 + lVar24) *
                     (uint)*(ushort *)(*param_3 + lVar24);
            if (0xffff < iVar12) {
              iVar12 = -1;
            }
            *(short *)((long)param_5 + lVar23) = (short)iVar12;
            if (0xffff < iVar60) {
              iVar60 = -1;
            }
            *(short *)((long)param_5 + lVar24) = (short)iVar60;
          }
        }
LAB_00247b4c:
        uVar32 = (ulong)uVar1;
        if ((int)uVar1 < iVar3) {
          lVar23 = (long)(int)uVar1;
          lVar26 = lVar23 * 2;
          puVar31 = (ushort *)((long)param_5 + lVar26);
          uVar27 = iVar3 - uVar1;
          puVar19 = param_1 + lVar23;
          puVar20 = (ushort *)((long)param_5 + lVar26 + 0x10);
          if ((puVar31 < param_1 + lVar23 + 8 && puVar19 < puVar20 ||
               *param_3 + lVar26 < puVar20 && puVar31 < param_3[1] + lVar26) || (uVar27 < 0xb)) {
            lVar23 = 0;
            do {
              iVar12 = (uint)*(ushort *)((long)puVar19 + lVar23) *
                       (uint)*(ushort *)((long)(*param_3 + lVar26) + lVar23);
              if (0xffff < iVar12) {
                iVar12 = -1;
              }
              *(short *)((long)puVar31 + lVar23) = (short)iVar12;
              lVar23 = lVar23 + 2;
            } while (lVar23 != ((ulong)((iVar3 + -1) - uVar1) + 1) * 2);
          }
          else {
            uVar2 = -((uint)((ulong)puVar19 >> 1) & 7) & 7;
            if (uVar27 < uVar2) {
              uVar2 = uVar27;
            }
            if (uVar2 != 0) {
              lVar24 = lVar23 * 2;
              iVar12 = (uint)param_1[lVar23] * (uint)*(ushort *)(*param_3 + lVar24);
              if (0xffff < iVar12) {
                iVar12 = -1;
              }
              *(short *)((long)param_5 + lVar24) = (short)iVar12;
              if (uVar2 == 1) {
                uVar32 = (ulong)(uVar1 + 1);
              }
              else {
                uVar30 = uVar1 + 2;
                iVar12 = (uint)param_1[lVar23 + 1] * (uint)*(ushort *)(*param_3 + lVar24 + 2);
                if (0xffff < iVar12) {
                  iVar12 = -1;
                }
                *(short *)((long)param_5 + lVar24 + 2) = (short)iVar12;
                if (uVar2 != 2) {
                  uVar30 = uVar1 + 3;
                  iVar12 = (uint)param_1[lVar23 + 2] * (uint)*(ushort *)(*param_3 + lVar24 + 4);
                  if (0xffff < iVar12) {
                    iVar12 = -1;
                  }
                  *(short *)((long)param_5 + lVar24 + 4) = (short)iVar12;
                  if (uVar2 != 3) {
                    uVar30 = uVar1 + 4;
                    iVar12 = (uint)param_1[lVar23 + 3] * (uint)*(ushort *)(*param_3 + lVar24 + 6);
                    if (0xffff < iVar12) {
                      iVar12 = -1;
                    }
                    *(short *)((long)param_5 + lVar24 + 6) = (short)iVar12;
                    if (uVar2 != 4) {
                      uVar30 = uVar1 + 5;
                      iVar12 = (uint)param_1[lVar23 + 4] * (uint)*(ushort *)(*param_3 + lVar24 + 8);
                      if (0xffff < iVar12) {
                        iVar12 = -1;
                      }
                      *(short *)((long)param_5 + lVar24 + 8) = (short)iVar12;
                      if (uVar2 != 5) {
                        uVar30 = uVar1 + 6;
                        iVar12 = (uint)param_1[lVar23 + 5] *
                                 (uint)*(ushort *)(*param_3 + lVar24 + 10);
                        if (0xffff < iVar12) {
                          iVar12 = -1;
                        }
                        *(short *)((long)param_5 + lVar24 + 10) = (short)iVar12;
                        if (uVar2 == 7) {
                          uVar32 = (ulong)(uVar1 + 7);
                          iVar12 = (uint)param_1[lVar23 + 6] *
                                   (uint)*(ushort *)(*param_3 + lVar24 + 0xc);
                          if (0xffff < iVar12) {
                            iVar12 = -1;
                          }
                          *(short *)((long)param_5 + lVar24 + 0xc) = (short)iVar12;
                          goto LAB_00247cf0;
                        }
                      }
                    }
                  }
                }
                uVar32 = (ulong)uVar30;
              }
            }
LAB_00247cf0:
            uVar1 = ((uVar27 - uVar2) - 8 >> 3) + 1;
            iVar12 = uVar1 * 8;
            if (6 < (uVar27 - 1) - uVar2) {
              lVar24 = (ulong)uVar2 * 2;
              uVar30 = 0;
              puVar15 = (undefined8 *)((long)param_5 + lVar26 + lVar24);
              pauVar28 = (undefined1 (*) [16])(*param_3 + lVar24 + lVar26);
              pauVar29 = (undefined1 (*) [16])(param_1 + (ulong)uVar2 + lVar23);
              do {
                auVar53 = *pauVar29;
                auVar55._8_4_ = 0xffff;
                auVar55._0_8_ = 0xffff0000ffff;
                auVar55._12_4_ = 0xffff;
                auVar39 = *pauVar28;
                uVar30 = uVar30 + 1;
                auVar45 = NEON_umull(auVar39._0_8_,auVar53._0_8_,2);
                auVar42._0_4_ = (uint)auVar39._8_2_ * (uint)auVar53._8_2_;
                auVar42._4_4_ = (uint)auVar39._10_2_ * (uint)auVar53._10_2_;
                auVar42._8_4_ = (uint)auVar39._12_2_ * (uint)auVar53._12_2_;
                auVar42._12_4_ = (uint)auVar39._14_2_ * (uint)auVar53._14_2_;
                auVar39 = NEON_smin(auVar45,auVar55,4);
                auVar53 = NEON_smin(auVar42,auVar55,4);
                auVar49._0_8_ =
                     CONCAT26(auVar39._12_2_,
                              CONCAT24(auVar39._8_2_,CONCAT22(auVar39._4_2_,auVar39._0_2_)));
                auVar49._8_2_ = auVar53._0_2_;
                auVar49._10_2_ = auVar53._4_2_;
                auVar49._12_2_ = auVar53._8_2_;
                auVar49._14_2_ = auVar53._12_2_;
                puVar15[1] = auVar49._8_8_;
                *puVar15 = auVar49._0_8_;
                puVar15 = puVar15 + 2;
                pauVar28 = pauVar28 + 1;
                pauVar29 = pauVar29 + 1;
              } while (uVar30 < uVar1);
              uVar32 = (ulong)(uint)((int)uVar32 + iVar12);
              if (iVar12 == uVar27 - uVar2) goto LAB_00247e7c;
            }
            uVar16 = -(uVar32 >> 0x1f) & 0xfffffffe00000000 | uVar32 << 1;
            iVar60 = (int)uVar32;
            iVar12 = (uint)*(ushort *)((long)param_1 + uVar16) *
                     (uint)*(ushort *)(*param_3 + uVar16);
            if (0xffff < iVar12) {
              iVar12 = -1;
            }
            *(short *)((long)param_5 + uVar16) = (short)iVar12;
            if (iVar60 + 1 < iVar3) {
              lVar26 = uVar16 + 2;
              iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                       (uint)*(ushort *)(*param_3 + lVar26);
              if (0xffff < iVar12) {
                iVar12 = -1;
              }
              *(short *)((long)param_5 + lVar26) = (short)iVar12;
              if (iVar60 + 2 < iVar3) {
                lVar26 = uVar16 + 4;
                iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                         (uint)*(ushort *)(*param_3 + lVar26);
                if (0xffff < iVar12) {
                  iVar12 = -1;
                }
                *(short *)((long)param_5 + lVar26) = (short)iVar12;
                if (iVar60 + 3 < iVar3) {
                  lVar26 = uVar16 + 6;
                  iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                           (uint)*(ushort *)(*param_3 + lVar26);
                  if (0xffff < iVar12) {
                    iVar12 = -1;
                  }
                  *(short *)((long)param_5 + lVar26) = (short)iVar12;
                  if (iVar60 + 4 < iVar3) {
                    lVar26 = uVar16 + 8;
                    iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                             (uint)*(ushort *)(*param_3 + lVar26);
                    if (0xffff < iVar12) {
                      iVar12 = -1;
                    }
                    *(short *)((long)param_5 + lVar26) = (short)iVar12;
                    if (iVar60 + 5 < iVar3) {
                      lVar26 = uVar16 + 10;
                      iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                               (uint)*(ushort *)(*param_3 + lVar26);
                      if (0xffff < iVar12) {
                        iVar12 = -1;
                      }
                      *(short *)((long)param_5 + lVar26) = (short)iVar12;
                      if (iVar60 + 6 < iVar3) {
                        lVar26 = uVar16 + 0xc;
                        iVar12 = (uint)*(ushort *)((long)param_1 + lVar26) *
                                 (uint)*(ushort *)(*param_3 + lVar26);
                        if (0xffff < iVar12) {
                          iVar12 = -1;
                        }
                        *(short *)((long)param_5 + lVar26) = (short)iVar12;
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00247e7c:
        iVar61 = iVar61 + -1;
        param_1 = param_1 + (param_2 >> 1);
        param_3 = (undefined1 (*) [16])(*param_3 + (param_4 >> 1) * 2);
        param_5 = (undefined8 *)((long)param_5 + lVar22);
      } while (iVar61 != 0);
    }
  }
  else if (iVar61 != 0) {
    uVar5 = iVar3 - 8U >> 3;
    uVar4 = (uVar5 + 1) * 8;
    if (iVar3 + -7 < 1) {
      uVar4 = 0;
    }
    uVar6 = (iVar3 + -4) - uVar4 >> 2;
    lVar22 = (long)(int)uVar4;
    do {
      if (0 < iVar3 + -7) {
        puVar15 = param_5;
        pauVar28 = param_3;
        puVar31 = param_1;
        do {
          auVar53 = *pauVar28;
          auVar51._2_2_ = 0;
          auVar51._0_2_ = puVar31[4];
          auVar51._4_2_ = puVar31[5];
          auVar51._6_2_ = 0;
          auVar51._8_2_ = puVar31[6];
          auVar51._10_2_ = 0;
          auVar51._12_2_ = puVar31[7];
          auVar51._14_2_ = 0;
          auVar37._2_2_ = 0;
          auVar37._0_2_ = *puVar31;
          auVar37._4_2_ = puVar31[1];
          auVar37._6_2_ = 0;
          auVar37._8_2_ = puVar31[2];
          auVar37._10_2_ = 0;
          auVar37._12_2_ = puVar31[3];
          auVar37._14_2_ = 0;
          auVar45 = NEON_ucvtf(auVar37,4);
          auVar38._2_2_ = 0;
          auVar38._0_2_ = auVar53._0_2_;
          auVar38._4_2_ = auVar53._2_2_;
          auVar38._6_2_ = 0;
          auVar38._8_2_ = auVar53._4_2_;
          auVar38._10_2_ = 0;
          auVar38._12_2_ = auVar53._6_2_;
          auVar38._14_2_ = 0;
          auVar47 = NEON_ucvtf(auVar51,4);
          puVar31 = puVar31 + 8;
          auVar39 = NEON_ucvtf(auVar38,4);
          pauVar28 = pauVar28 + 1;
          auVar52._2_2_ = 0;
          auVar52._0_2_ = auVar53._8_2_;
          auVar52._4_2_ = auVar53._10_2_;
          auVar52._6_2_ = 0;
          auVar52._8_2_ = auVar53._12_2_;
          auVar52._10_2_ = 0;
          auVar52._12_2_ = auVar53._14_2_;
          auVar52._14_2_ = 0;
          auVar53 = NEON_ucvtf(auVar52,4);
          auVar40._0_4_ = auVar45._0_4_ * auVar39._0_4_ * fVar57;
          auVar40._4_4_ = auVar45._4_4_ * auVar39._4_4_ * fVar57;
          auVar40._8_4_ = auVar45._8_4_ * auVar39._8_4_ * fVar57;
          auVar40._12_4_ = auVar45._12_4_ * auVar39._12_4_ * fVar57;
          auVar35 = auVar40;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar12 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar35._4_4_ = auVar40._4_4_;
            auVar35._0_4_ = auVar40._0_4_;
            auVar35._8_8_ = auVar40._8_8_;
            if (iVar12 == 0) goto LAB_002478e4;
            auVar39 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar39._8_8_;
            _DAT_00531e90 = auVar39._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar12 = (int)(auVar40._0_4_ + (float)_DAT_00531e90);
            iVar60 = (int)(auVar40._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar8._4_4_ = iVar60;
            auVar8._0_4_ = iVar12;
            auVar8._8_4_ = (int)(auVar40._8_4_ + (float)uRam0000000000531e98);
            auVar8._12_4_ = (int)(auVar40._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar34 = NEON_uqxtn(CONCAT44(iVar60,iVar12),auVar8,4);
            uVar58 = (undefined4)uVar34;
            uVar59 = (undefined4)((ulong)uVar34 >> 0x20);
          }
          else {
LAB_002478e4:
            iVar12 = (int)(auVar35._0_4_ + (float)_DAT_00531e90);
            iVar60 = (int)(auVar35._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar9._4_4_ = iVar60;
            auVar9._0_4_ = iVar12;
            auVar9._8_4_ = (int)(auVar35._8_4_ + (float)uRam0000000000531e98);
            auVar9._12_4_ = (int)(auVar35._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar34 = NEON_uqxtn(CONCAT44(iVar60,iVar12),auVar9,4);
            uVar58 = (undefined4)uVar34;
            uVar59 = (undefined4)((ulong)uVar34 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531ec0), iVar12 != 0)) {
            auVar39 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar39._8_8_;
            _DAT_00531e90 = auVar39._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar36._0_8_ =
               CONCAT44((int)(auVar47._4_4_ * auVar53._4_4_ * fVar57 + DAT_00531e90_4),
                        (int)(auVar47._0_4_ * auVar53._0_4_ * fVar57 + _DAT_00531e90));
          auVar36._8_4_ =
               (int)(auVar47._8_4_ * auVar53._8_4_ * fVar57 + (float)uRam0000000000531e98);
          auVar36._12_4_ =
               (int)(auVar47._12_4_ * auVar53._12_4_ * fVar57 + uRam0000000000531e98._4_4_);
          uVar34 = NEON_uqxtn(auVar36._0_8_,auVar36,4);
          puVar15[1] = uVar34;
          *puVar15 = CONCAT44(uVar59,uVar58);
          puVar15 = puVar15 + 2;
        } while (puVar31 != param_1 + ((ulong)uVar5 + 1) * 8);
      }
      uVar13 = uVar4;
      if ((int)uVar4 < iVar3 + -3) {
        puVar31 = param_1 + lVar22;
        puVar19 = (ushort *)(*param_3 + lVar22 * 2);
        puVar33 = (undefined2 *)((long)param_5 + lVar22 * 2);
        do {
          lVar17 = lrintf(fVar57 * (float)*puVar31 * (float)*puVar19);
          uVar13 = (uint)lVar17;
          if (0xffff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar17 = lrintf(fVar57 * (float)puVar31[1] * (float)puVar19[1]);
          uVar14 = (uint)lVar17;
          if (0xffff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          *puVar33 = (short)uVar13;
          puVar33[1] = (short)uVar14;
          lVar17 = lrintf(fVar57 * (float)puVar31[2] * (float)puVar19[2]);
          uVar13 = (uint)lVar17;
          if (0xffff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar17 = lrintf(fVar57 * (float)puVar31[3] * (float)puVar19[3]);
          uVar14 = (uint)lVar17;
          if (0xffff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          puVar31 = puVar31 + 4;
          puVar33[2] = (short)uVar13;
          puVar33[3] = (short)uVar14;
          puVar19 = puVar19 + 4;
          puVar33 = puVar33 + 4;
          uVar13 = uVar4 + 4 + uVar6 * 4;
        } while (puVar31 != param_1 + lVar22 + 4 + (ulong)uVar6 * 4);
      }
      if ((int)uVar13 < iVar3) {
        lVar17 = 0;
        uVar32 = -(ulong)(uVar13 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar13 << 1;
        do {
          lVar18 = lrintf(fVar57 * (float)*(ushort *)((long)param_1 + lVar17 + uVar32) *
                          (float)*(ushort *)(*param_3 + lVar17 + uVar32));
          sVar21 = (short)lVar18;
          if (0xffff < (uint)lVar18) {
            sVar21 = -(ushort)(0 < (int)(uint)lVar18);
          }
          *(short *)((long)param_5 + lVar17 + uVar32) = sVar21;
          lVar17 = lVar17 + 2;
        } while (lVar17 != ((ulong)((iVar3 + -1) - uVar13) + 1) * 2);
      }
      iVar61 = iVar61 + -1;
      param_1 = param_1 + (param_2 >> 1);
      param_3 = (undefined1 (*) [16])(*param_3 + (param_4 >> 1) * 2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 >> 1) * 2);
    } while (iVar61 != 0);
  }
  return;
}


==================================================================

### FUNC 00248384 (3860 bytes) name=FUN_00248384

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00248384(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7,double *param_8)

{
  int iVar1;
  long lVar2;
  byte *pbVar3;
  byte *pbVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  char cVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  int iVar23;
  int iVar24;
  uint uVar25;
  uint uVar26;
  long lVar27;
  byte *pbVar28;
  undefined8 *puVar29;
  undefined1 *puVar30;
  long lVar31;
  byte *pbVar32;
  long lVar33;
  uint uVar34;
  uint uVar35;
  long lVar36;
  long lVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  float fVar40;
  float fVar51;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined8 uVar57;
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined8 uVar61;
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined1 auVar64 [16];
  undefined1 auVar65 [16];
  float fVar66;
  undefined4 uVar67;
  undefined4 uVar68;
  int iVar69;
  int iVar70;
  int iVar71;
  undefined1 auVar45 [16];
  
  iVar5 = *param_7;
  iVar71 = param_7[1];
  fVar66 = (float)*param_8;
  if (fVar66 == 1.0) {
    if (iVar71 != 0) {
      iVar9 = iVar5 + -7;
      iVar1 = (iVar5 - 8U & 0xfffffff8) + 8;
      if (iVar9 < 1) {
        iVar1 = 0;
      }
      uVar26 = (iVar5 + -4) - iVar1;
      lVar36 = (long)iVar1;
      iVar69 = iVar5 + -3;
      uVar25 = uVar26 >> 2;
      iVar23 = iVar1 + 4 + uVar25 * 4;
      uVar6 = (uVar25 - 3 >> 2) + 1;
      lVar31 = lVar36 + 0x40;
      do {
        if (0 < iVar9) {
          lVar37 = 0;
          do {
            uVar61 = *(undefined8 *)(param_1 + lVar37);
            uVar57 = *(undefined8 *)(param_3 + lVar37);
            uVar38 = (undefined1)((ulong)uVar61 >> 8);
            uVar39 = (undefined1)((ulong)uVar57 >> 8);
            auVar62._6_2_ = 0;
            auVar62._0_6_ =
                 (uint6)CONCAT14(uVar38,(uint)CONCAT12(uVar38,(ushort)(byte)uVar61)) &
                 0xffff0000ffff;
            auVar62[8] = (char)((ulong)uVar61 >> 0x10);
            auVar62._9_3_ = 0;
            auVar62[0xc] = (char)((ulong)uVar61 >> 0x18);
            auVar62._13_3_ = 0;
            auVar53._6_2_ = 0;
            auVar53._0_6_ =
                 (uint6)CONCAT14(uVar39,(uint)CONCAT12(uVar39,(ushort)(byte)uVar57)) &
                 0xffff0000ffff;
            auVar53[8] = (char)((ulong)uVar57 >> 0x10);
            auVar53._9_3_ = 0;
            auVar53[0xc] = (char)((ulong)uVar57 >> 0x18);
            auVar53._13_3_ = 0;
            auVar62 = NEON_ucvtf(auVar62,4);
            auVar44 = NEON_ucvtf(auVar53,4);
            auVar63._1_3_ = 0;
            auVar63[0] = (byte)((ulong)uVar61 >> 0x20);
            auVar63[4] = (char)((ulong)uVar61 >> 0x28);
            auVar63._5_3_ = 0;
            auVar63[8] = (char)((ulong)uVar61 >> 0x30);
            auVar63._9_3_ = 0;
            auVar63[0xc] = (char)((ulong)uVar61 >> 0x38);
            auVar63._13_3_ = 0;
            auVar60._1_3_ = 0;
            auVar60[0] = (byte)((ulong)uVar57 >> 0x20);
            auVar60[4] = (char)((ulong)uVar57 >> 0x28);
            auVar60._5_3_ = 0;
            auVar60[8] = (char)((ulong)uVar57 >> 0x30);
            auVar60._9_3_ = 0;
            auVar60[0xc] = (char)((ulong)uVar57 >> 0x38);
            auVar60._13_3_ = 0;
            auVar63 = NEON_ucvtf(auVar63,4);
            auVar53 = NEON_ucvtf(auVar60,4);
            fVar66 = auVar62._0_4_ * auVar44._0_4_;
            fVar40 = auVar62._4_4_ * auVar44._4_4_;
            auVar59._0_8_ = CONCAT44(fVar40,fVar66);
            auVar59._8_4_ = auVar62._8_4_ * auVar44._8_4_;
            auVar59._12_4_ = auVar62._12_4_ * auVar44._12_4_;
            auVar44 = auVar59;
            if ((DAT_00531ec0 & 1) == 0) {
              iVar24 = __cxa_guard_acquire(&DAT_00531ec0);
              auVar44._8_8_ = auVar59._8_8_;
              auVar44._0_8_ = auVar59._0_8_;
              if (iVar24 == 0) goto LAB_00248ef4;
              auVar44 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar44._8_8_;
              _DAT_00531e90 = auVar44._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
              iVar24 = (int)(fVar66 + (float)_DAT_00531e90);
              iVar70 = (int)(fVar40 + (float)((ulong)_DAT_00531e90 >> 0x20));
              auVar21._4_4_ = iVar70;
              auVar21._0_4_ = iVar24;
              auVar21._8_4_ = (int)(auVar59._8_4_ + (float)uRam0000000000531e98);
              auVar21._12_4_ = (int)(auVar59._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
              uVar57 = NEON_uqxtn(CONCAT44(iVar70,iVar24),auVar21,4);
              uVar67 = (undefined4)uVar57;
              uVar68 = (undefined4)((ulong)uVar57 >> 0x20);
            }
            else {
LAB_00248ef4:
              iVar24 = (int)(auVar44._0_4_ + (float)_DAT_00531e90);
              iVar70 = (int)(auVar44._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
              auVar22._4_4_ = iVar70;
              auVar22._0_4_ = iVar24;
              auVar22._8_4_ = (int)(auVar44._8_4_ + (float)uRam0000000000531e98);
              auVar22._12_4_ = (int)(auVar44._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
              uVar57 = NEON_uqxtn(CONCAT44(iVar70,iVar24),auVar22,4);
              uVar67 = (undefined4)uVar57;
              uVar68 = (undefined4)((ulong)uVar57 >> 0x20);
            }
            if (((DAT_00531ec0 & 1) == 0) &&
               (iVar24 = __cxa_guard_acquire(&DAT_00531ec0), iVar24 != 0)) {
              auVar44 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar44._8_8_;
              _DAT_00531e90 = auVar44._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
            puVar29 = (undefined8 *)(param_5 + lVar37);
            lVar37 = lVar37 + 8;
            auVar56._4_4_ = uVar68;
            auVar56._0_4_ = uVar67;
            auVar50._0_8_ =
                 CONCAT44((int)(auVar63._4_4_ * auVar53._4_4_ + DAT_00531e90_4),
                          (int)(auVar63._0_4_ * auVar53._0_4_ + _DAT_00531e90));
            auVar50._8_4_ = (int)(auVar63._8_4_ * auVar53._8_4_ + (float)uRam0000000000531e98);
            auVar50._12_4_ = (int)(auVar63._12_4_ * auVar53._12_4_ + uRam0000000000531e98._4_4_);
            uVar57 = NEON_uqxtn(auVar50._0_8_,auVar50,4);
            auVar56._8_8_ = uVar57;
            uVar57 = NEON_uqxtn(uVar57,auVar56,2);
            *puVar29 = uVar57;
          } while ((int)lVar37 < iVar9);
        }
        iVar24 = iVar1;
        if (iVar1 < iVar69) {
          pbVar28 = (byte *)(param_1 + lVar36);
          puVar30 = (undefined1 *)(param_5 + lVar36);
          pbVar32 = (byte *)(param_3 + lVar36);
          iVar24 = iVar23;
          if ((pbVar28 < (byte *)(param_5 + lVar31) && puVar30 < (undefined1 *)(param_1 + lVar31) ||
               pbVar32 < (byte *)(param_5 + lVar31) && puVar30 < (undefined1 *)(param_3 + lVar31))
             || (uVar25 + 1 < 4)) {
            do {
              pbVar3 = pbVar28 + 4;
              uVar34 = (uint)*pbVar28 * (uint)*pbVar32;
              uVar7 = (uint)pbVar28[1] * (uint)pbVar32[1];
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              *puVar30 = (char)uVar34;
              if (0xff < uVar7) {
                uVar7 = 0xffffffff;
              }
              puVar30[1] = (char)uVar7;
              uVar34 = (uint)pbVar28[2] * (uint)pbVar32[2];
              uVar7 = (uint)pbVar28[3] * (uint)pbVar32[3];
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              if (0xff < uVar7) {
                uVar7 = 0xffffffff;
              }
              puVar30[2] = (char)uVar34;
              puVar30[3] = (char)uVar7;
              pbVar28 = pbVar3;
              puVar30 = puVar30 + 4;
              pbVar32 = pbVar32 + 4;
            } while (pbVar3 != (byte *)(param_1 + lVar36 + 4 + (ulong)uVar25 * 4));
          }
          else {
            iVar70 = iVar1;
            if (0xb < uVar26) {
              lVar37 = 0;
              uVar34 = 0;
              do {
                pbVar3 = pbVar28 + lVar37;
                pbVar4 = pbVar32 + lVar37;
                puVar29 = (undefined8 *)(puVar30 + lVar37);
                uVar34 = uVar34 + 1;
                lVar37 = lVar37 + 0x10;
                auVar53 = NEON_umull((ulong)CONCAT16(pbVar4[3],
                                                     (uint6)CONCAT14(pbVar4[2],
                                                                     (uint)CONCAT12(pbVar4[1],
                                                                                    (ushort)*pbVar4)
                                                                    )),
                                     (ulong)CONCAT16(pbVar3[3],
                                                     (uint6)CONCAT14(pbVar3[2],
                                                                     (uint)CONCAT12(pbVar3[1],
                                                                                    (ushort)*pbVar3)
                                                                    )),2);
                auVar54._0_4_ = (uint)pbVar4[4] * (uint)pbVar3[4];
                auVar54._4_4_ = (uint)pbVar4[5] * (uint)pbVar3[5];
                auVar54._8_4_ = (uint)pbVar4[6] * (uint)pbVar3[6];
                auVar54._12_4_ = (uint)pbVar4[7] * (uint)pbVar3[7];
                auVar44 = NEON_umull((ulong)CONCAT16(pbVar4[0xb],
                                                     (uint6)CONCAT14(pbVar4[10],
                                                                     (uint)CONCAT12(pbVar4[9],
                                                                                    (ushort)pbVar4[8
                                                  ]))),
                                     (ulong)CONCAT16(pbVar3[0xb],
                                                     (uint6)CONCAT14(pbVar3[10],
                                                                     (uint)CONCAT12(pbVar3[9],
                                                                                    (ushort)pbVar3[8
                                                  ]))),2);
                auVar46._0_4_ = (uint)pbVar4[0xc] * (uint)pbVar3[0xc];
                auVar46._4_4_ = (uint)pbVar4[0xd] * (uint)pbVar3[0xd];
                auVar46._8_4_ = (uint)pbVar4[0xe] * (uint)pbVar3[0xe];
                auVar46._12_4_ = (uint)pbVar4[0xf] * (uint)pbVar3[0xf];
                auVar11._8_4_ = 0xff;
                auVar11._0_8_ = 0xff000000ff;
                auVar11._12_4_ = 0xff;
                auVar62 = NEON_smin(auVar53,auVar11,4);
                auVar12._8_4_ = 0xff;
                auVar12._0_8_ = 0xff000000ff;
                auVar12._12_4_ = 0xff;
                auVar53 = NEON_smin(auVar54,auVar12,4);
                auVar13._8_4_ = 0xff;
                auVar13._0_8_ = 0xff000000ff;
                auVar13._12_4_ = 0xff;
                auVar59 = NEON_smin(auVar44,auVar13,4);
                auVar14._8_4_ = 0xff;
                auVar14._0_8_ = 0xff000000ff;
                auVar14._12_4_ = 0xff;
                auVar44 = NEON_smin(auVar46,auVar14,4);
                auVar47._0_8_ =
                     CONCAT17(auVar53[0xc],
                              CONCAT16(auVar53[8],
                                       CONCAT15(auVar53[4],
                                                CONCAT14(auVar53[0],
                                                         CONCAT13(auVar62[0xc],
                                                                  CONCAT12(auVar62[8],
                                                                           CONCAT11(auVar62[4],
                                                                                    auVar62[0]))))))
                             );
                auVar47[8] = auVar59[0];
                auVar47[9] = auVar59[4];
                auVar47[10] = auVar59[8];
                auVar47[0xb] = auVar59[0xc];
                auVar47[0xc] = auVar44[0];
                auVar47[0xd] = auVar44[4];
                auVar47[0xe] = auVar44[8];
                auVar47[0xf] = auVar44[0xc];
                puVar29[1] = auVar47._8_8_;
                *puVar29 = auVar47._0_8_;
              } while (uVar34 < uVar6);
              iVar70 = iVar1 + uVar6 * 0x10;
              if (uVar25 + 1 == uVar6 * 4) goto LAB_00248820;
            }
            lVar33 = (long)iVar70;
            lVar37 = lVar33 + 1;
            lVar27 = lVar33 + 2;
            lVar2 = lVar33 + 3;
            uVar34 = (uint)*(byte *)(param_1 + lVar33) * (uint)*(byte *)(param_3 + lVar33);
            uVar7 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
            if (0xff < uVar34) {
              uVar34 = 0xffffffff;
            }
            *(char *)(param_5 + lVar33) = (char)uVar34;
            if (0xff < uVar7) {
              uVar7 = 0xffffffff;
            }
            *(char *)(param_5 + lVar37) = (char)uVar7;
            uVar34 = (uint)*(byte *)(param_1 + lVar27) * (uint)*(byte *)(param_3 + lVar27);
            uVar7 = (uint)*(byte *)(param_1 + lVar2) * (uint)*(byte *)(param_3 + lVar2);
            if (0xff < uVar34) {
              uVar34 = 0xffffffff;
            }
            *(char *)(param_5 + lVar27) = (char)uVar34;
            if (0xff < uVar7) {
              uVar7 = 0xffffffff;
            }
            *(char *)(param_5 + lVar2) = (char)uVar7;
            if (iVar70 + 4 < iVar69) {
              lVar33 = (long)(iVar70 + 4);
              lVar37 = lVar33 + 1;
              lVar27 = lVar33 + 2;
              lVar2 = lVar33 + 3;
              uVar34 = (uint)*(byte *)(param_1 + lVar33) * (uint)*(byte *)(param_3 + lVar33);
              uVar7 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              *(char *)(param_5 + lVar33) = (char)uVar34;
              if (0xff < uVar7) {
                uVar7 = 0xffffffff;
              }
              *(char *)(param_5 + lVar37) = (char)uVar7;
              uVar34 = (uint)*(byte *)(param_1 + lVar27) * (uint)*(byte *)(param_3 + lVar27);
              uVar7 = (uint)*(byte *)(param_1 + lVar2) * (uint)*(byte *)(param_3 + lVar2);
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              *(char *)(param_5 + lVar27) = (char)uVar34;
              if (0xff < uVar7) {
                uVar7 = 0xffffffff;
              }
              *(char *)(param_5 + lVar2) = (char)uVar7;
              if (iVar70 + 8 < iVar69) {
                lVar33 = (long)(iVar70 + 8);
                lVar37 = lVar33 + 1;
                lVar27 = lVar33 + 2;
                lVar2 = lVar33 + 3;
                uVar34 = (uint)*(byte *)(param_1 + lVar33) * (uint)*(byte *)(param_3 + lVar33);
                uVar7 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                if (0xff < uVar34) {
                  uVar34 = 0xffffffff;
                }
                *(char *)(param_5 + lVar33) = (char)uVar34;
                if (0xff < uVar7) {
                  uVar7 = 0xffffffff;
                }
                *(char *)(param_5 + lVar37) = (char)uVar7;
                uVar34 = (uint)*(byte *)(param_1 + lVar27) * (uint)*(byte *)(param_3 + lVar27);
                uVar7 = (uint)*(byte *)(param_1 + lVar2) * (uint)*(byte *)(param_3 + lVar2);
                if (0xff < uVar34) {
                  uVar34 = 0xffffffff;
                }
                *(char *)(param_5 + lVar27) = (char)uVar34;
                if (0xff < uVar7) {
                  uVar7 = 0xffffffff;
                }
                *(char *)(param_5 + lVar2) = (char)uVar7;
              }
            }
          }
        }
LAB_00248820:
        if (iVar24 < iVar5) {
          lVar27 = (long)iVar24;
          lVar37 = lVar27 + 0x10;
          pbVar28 = (byte *)(param_1 + lVar27);
          puVar30 = (undefined1 *)(param_5 + lVar27);
          pbVar32 = (byte *)(param_3 + lVar27);
          uVar34 = iVar5 - iVar24;
          if ((pbVar28 < (byte *)(param_5 + lVar37) && puVar30 < (undefined1 *)(param_1 + lVar37) ||
               pbVar32 < (byte *)(param_5 + lVar37) && puVar30 < (undefined1 *)(param_3 + lVar37))
             || (uVar34 < 0x13)) {
            lVar37 = 0;
            do {
              uVar34 = (uint)pbVar28[lVar37] * (uint)pbVar32[lVar37];
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              puVar30[lVar37] = (char)uVar34;
              lVar37 = lVar37 + 1;
            } while (lVar37 != (ulong)(uint)((iVar5 + -1) - iVar24) + 1);
          }
          else {
            uVar7 = -(int)pbVar28 & 0xf;
            if (uVar34 < uVar7) {
              uVar7 = uVar34;
            }
            iVar70 = iVar24;
            if (uVar7 != 0) {
              iVar70 = iVar24 + 1;
              uVar8 = (uint)*pbVar28 * (uint)*pbVar32;
              if (0xff < uVar8) {
                uVar8 = 0xffffffff;
              }
              *puVar30 = (char)uVar8;
              if (uVar7 != 1) {
                lVar37 = (long)iVar70;
                iVar70 = iVar24 + 2;
                uVar8 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                if (0xff < uVar8) {
                  uVar8 = 0xffffffff;
                }
                *(char *)(param_5 + lVar37) = (char)uVar8;
                if (uVar7 != 2) {
                  lVar37 = (long)iVar70;
                  iVar70 = iVar24 + 3;
                  uVar8 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                  if (0xff < uVar8) {
                    uVar8 = 0xffffffff;
                  }
                  *(char *)(param_5 + lVar37) = (char)uVar8;
                  if (uVar7 != 3) {
                    lVar37 = (long)iVar70;
                    iVar70 = iVar24 + 4;
                    uVar8 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                    if (0xff < uVar8) {
                      uVar8 = 0xffffffff;
                    }
                    *(char *)(param_5 + lVar37) = (char)uVar8;
                    if (uVar7 != 4) {
                      lVar37 = (long)iVar70;
                      iVar70 = iVar24 + 5;
                      uVar8 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                      if (0xff < uVar8) {
                        uVar8 = 0xffffffff;
                      }
                      *(char *)(param_5 + lVar37) = (char)uVar8;
                      if (uVar7 != 5) {
                        lVar37 = (long)iVar70;
                        iVar70 = iVar24 + 6;
                        uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                (uint)*(byte *)(param_3 + lVar37);
                        if (0xff < uVar8) {
                          uVar8 = 0xffffffff;
                        }
                        *(char *)(param_5 + lVar37) = (char)uVar8;
                        if (uVar7 != 6) {
                          lVar37 = (long)iVar70;
                          iVar70 = iVar24 + 7;
                          uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                  (uint)*(byte *)(param_3 + lVar37);
                          if (0xff < uVar8) {
                            uVar8 = 0xffffffff;
                          }
                          *(char *)(param_5 + lVar37) = (char)uVar8;
                          if (uVar7 != 7) {
                            lVar37 = (long)iVar70;
                            iVar70 = iVar24 + 8;
                            uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                    (uint)*(byte *)(param_3 + lVar37);
                            if (0xff < uVar8) {
                              uVar8 = 0xffffffff;
                            }
                            *(char *)(param_5 + lVar37) = (char)uVar8;
                            if (uVar7 != 8) {
                              lVar37 = (long)iVar70;
                              iVar70 = iVar24 + 9;
                              uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                      (uint)*(byte *)(param_3 + lVar37);
                              if (0xff < uVar8) {
                                uVar8 = 0xffffffff;
                              }
                              *(char *)(param_5 + lVar37) = (char)uVar8;
                              if (uVar7 != 9) {
                                lVar37 = (long)iVar70;
                                iVar70 = iVar24 + 10;
                                uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                        (uint)*(byte *)(param_3 + lVar37);
                                if (0xff < uVar8) {
                                  uVar8 = 0xffffffff;
                                }
                                *(char *)(param_5 + lVar37) = (char)uVar8;
                                if (uVar7 != 10) {
                                  lVar37 = (long)iVar70;
                                  iVar70 = iVar24 + 0xb;
                                  uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                          (uint)*(byte *)(param_3 + lVar37);
                                  if (0xff < uVar8) {
                                    uVar8 = 0xffffffff;
                                  }
                                  *(char *)(param_5 + lVar37) = (char)uVar8;
                                  if (uVar7 != 0xb) {
                                    lVar37 = (long)iVar70;
                                    iVar70 = iVar24 + 0xc;
                                    uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                            (uint)*(byte *)(param_3 + lVar37);
                                    if (0xff < uVar8) {
                                      uVar8 = 0xffffffff;
                                    }
                                    *(char *)(param_5 + lVar37) = (char)uVar8;
                                    if (uVar7 != 0xc) {
                                      lVar37 = (long)iVar70;
                                      iVar70 = iVar24 + 0xd;
                                      uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                              (uint)*(byte *)(param_3 + lVar37);
                                      if (0xff < uVar8) {
                                        uVar8 = 0xffffffff;
                                      }
                                      *(char *)(param_5 + lVar37) = (char)uVar8;
                                      if (uVar7 != 0xd) {
                                        lVar37 = (long)iVar70;
                                        iVar70 = iVar24 + 0xe;
                                        uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                                (uint)*(byte *)(param_3 + lVar37);
                                        if (0xff < uVar8) {
                                          uVar8 = 0xffffffff;
                                        }
                                        *(char *)(param_5 + lVar37) = (char)uVar8;
                                        if (uVar7 == 0xf) {
                                          lVar37 = (long)iVar70;
                                          iVar70 = iVar24 + 0xf;
                                          uVar8 = (uint)*(byte *)(param_1 + lVar37) *
                                                  (uint)*(byte *)(param_3 + lVar37);
                                          if (0xff < uVar8) {
                                            uVar8 = 0xffffffff;
                                          }
                                          *(char *)(param_5 + lVar37) = (char)uVar8;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar8 = ((uVar34 - uVar7) - 0x10 >> 4) + 1;
            iVar24 = uVar8 * 0x10;
            if (0xe < (uVar34 - 1) - uVar7) {
              lVar27 = (ulong)uVar7 + lVar27;
              uVar35 = 0;
              puVar29 = (undefined8 *)(param_5 + lVar27);
              pbVar28 = (byte *)(param_3 + lVar27);
              pbVar32 = (byte *)(param_1 + lVar27);
              do {
                uVar35 = uVar35 + 1;
                auVar53 = NEON_umull((ulong)CONCAT16(pbVar28[3],
                                                     (uint6)CONCAT14(pbVar28[2],
                                                                     (uint)CONCAT12(pbVar28[1],
                                                                                    (ushort)*pbVar28
                                                                                   ))),
                                     (ulong)CONCAT16(pbVar32[3],
                                                     (uint6)CONCAT14(pbVar32[2],
                                                                     (uint)CONCAT12(pbVar32[1],
                                                                                    (ushort)*pbVar32
                                                                                   ))),2);
                auVar55._0_4_ = (uint)pbVar28[4] * (uint)pbVar32[4];
                auVar55._4_4_ = (uint)pbVar28[5] * (uint)pbVar32[5];
                auVar55._8_4_ = (uint)pbVar28[6] * (uint)pbVar32[6];
                auVar55._12_4_ = (uint)pbVar28[7] * (uint)pbVar32[7];
                auVar44 = NEON_umull((ulong)CONCAT16(pbVar28[0xb],
                                                     (uint6)CONCAT14(pbVar28[10],
                                                                     (uint)CONCAT12(pbVar28[9],
                                                                                    (ushort)pbVar28[
                                                  8]))),
                                     (ulong)CONCAT16(pbVar32[0xb],
                                                     (uint6)CONCAT14(pbVar32[10],
                                                                     (uint)CONCAT12(pbVar32[9],
                                                                                    (ushort)pbVar32[
                                                  8]))),2);
                auVar48._0_4_ = (uint)pbVar28[0xc] * (uint)pbVar32[0xc];
                auVar48._4_4_ = (uint)pbVar28[0xd] * (uint)pbVar32[0xd];
                auVar48._8_4_ = (uint)pbVar28[0xe] * (uint)pbVar32[0xe];
                auVar48._12_4_ = (uint)pbVar28[0xf] * (uint)pbVar32[0xf];
                auVar15._8_4_ = 0xff;
                auVar15._0_8_ = 0xff000000ff;
                auVar15._12_4_ = 0xff;
                auVar62 = NEON_smin(auVar53,auVar15,4);
                auVar16._8_4_ = 0xff;
                auVar16._0_8_ = 0xff000000ff;
                auVar16._12_4_ = 0xff;
                auVar53 = NEON_smin(auVar55,auVar16,4);
                auVar17._8_4_ = 0xff;
                auVar17._0_8_ = 0xff000000ff;
                auVar17._12_4_ = 0xff;
                auVar59 = NEON_smin(auVar44,auVar17,4);
                auVar18._8_4_ = 0xff;
                auVar18._0_8_ = 0xff000000ff;
                auVar18._12_4_ = 0xff;
                auVar44 = NEON_smin(auVar48,auVar18,4);
                auVar49._0_8_ =
                     CONCAT17(auVar53[0xc],
                              CONCAT16(auVar53[8],
                                       CONCAT15(auVar53[4],
                                                CONCAT14(auVar53[0],
                                                         CONCAT13(auVar62[0xc],
                                                                  CONCAT12(auVar62[8],
                                                                           CONCAT11(auVar62[4],
                                                                                    auVar62[0]))))))
                             );
                auVar49[8] = auVar59[0];
                auVar49[9] = auVar59[4];
                auVar49[10] = auVar59[8];
                auVar49[0xb] = auVar59[0xc];
                auVar49[0xc] = auVar44[0];
                auVar49[0xd] = auVar44[4];
                auVar49[0xe] = auVar44[8];
                auVar49[0xf] = auVar44[0xc];
                puVar29[1] = auVar49._8_8_;
                *puVar29 = auVar49._0_8_;
                puVar29 = puVar29 + 2;
                pbVar28 = pbVar28 + 0x10;
                pbVar32 = pbVar32 + 0x10;
              } while (uVar35 < uVar8);
              iVar70 = iVar70 + iVar24;
              if (iVar24 == uVar34 - uVar7) goto LAB_00248de4;
            }
            lVar37 = (long)iVar70;
            uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
            if (0xff < uVar34) {
              uVar34 = 0xffffffff;
            }
            *(char *)(param_5 + lVar37) = (char)uVar34;
            if (iVar70 + 1 < iVar5) {
              lVar37 = (long)(iVar70 + 1);
              uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
              if (0xff < uVar34) {
                uVar34 = 0xffffffff;
              }
              *(char *)(param_5 + lVar37) = (char)uVar34;
              if (iVar70 + 2 < iVar5) {
                lVar37 = (long)(iVar70 + 2);
                uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                if (0xff < uVar34) {
                  uVar34 = 0xffffffff;
                }
                *(char *)(param_5 + lVar37) = (char)uVar34;
                if (iVar70 + 3 < iVar5) {
                  lVar37 = (long)(iVar70 + 3);
                  uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                  if (0xff < uVar34) {
                    uVar34 = 0xffffffff;
                  }
                  *(char *)(param_5 + lVar37) = (char)uVar34;
                  if (iVar70 + 4 < iVar5) {
                    lVar37 = (long)(iVar70 + 4);
                    uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37);
                    if (0xff < uVar34) {
                      uVar34 = 0xffffffff;
                    }
                    *(char *)(param_5 + lVar37) = (char)uVar34;
                    if (iVar70 + 5 < iVar5) {
                      lVar37 = (long)(iVar70 + 5);
                      uVar34 = (uint)*(byte *)(param_1 + lVar37) * (uint)*(byte *)(param_3 + lVar37)
                      ;
                      if (0xff < uVar34) {
                        uVar34 = 0xffffffff;
                      }
                      *(char *)(param_5 + lVar37) = (char)uVar34;
                      if (iVar70 + 6 < iVar5) {
                        lVar37 = (long)(iVar70 + 6);
                        uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                 (uint)*(byte *)(param_3 + lVar37);
                        if (0xff < uVar34) {
                          uVar34 = 0xffffffff;
                        }
                        *(char *)(param_5 + lVar37) = (char)uVar34;
                        if (iVar70 + 7 < iVar5) {
                          lVar37 = (long)(iVar70 + 7);
                          uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                   (uint)*(byte *)(param_3 + lVar37);
                          if (0xff < uVar34) {
                            uVar34 = 0xffffffff;
                          }
                          *(char *)(param_5 + lVar37) = (char)uVar34;
                          if (iVar70 + 8 < iVar5) {
                            lVar37 = (long)(iVar70 + 8);
                            uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                     (uint)*(byte *)(param_3 + lVar37);
                            if (0xff < uVar34) {
                              uVar34 = 0xffffffff;
                            }
                            *(char *)(param_5 + lVar37) = (char)uVar34;
                            if (iVar70 + 9 < iVar5) {
                              lVar37 = (long)(iVar70 + 9);
                              uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                       (uint)*(byte *)(param_3 + lVar37);
                              if (0xff < uVar34) {
                                uVar34 = 0xffffffff;
                              }
                              *(char *)(param_5 + lVar37) = (char)uVar34;
                              if (iVar70 + 10 < iVar5) {
                                lVar37 = (long)(iVar70 + 10);
                                uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                         (uint)*(byte *)(param_3 + lVar37);
                                if (0xff < uVar34) {
                                  uVar34 = 0xffffffff;
                                }
                                *(char *)(param_5 + lVar37) = (char)uVar34;
                                if (iVar70 + 0xb < iVar5) {
                                  lVar37 = (long)(iVar70 + 0xb);
                                  uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                           (uint)*(byte *)(param_3 + lVar37);
                                  if (0xff < uVar34) {
                                    uVar34 = 0xffffffff;
                                  }
                                  *(char *)(param_5 + lVar37) = (char)uVar34;
                                  if (iVar70 + 0xc < iVar5) {
                                    lVar37 = (long)(iVar70 + 0xc);
                                    uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                             (uint)*(byte *)(param_3 + lVar37);
                                    if (0xff < uVar34) {
                                      uVar34 = 0xffffffff;
                                    }
                                    *(char *)(param_5 + lVar37) = (char)uVar34;
                                    if (iVar70 + 0xd < iVar5) {
                                      lVar37 = (long)(iVar70 + 0xd);
                                      uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                               (uint)*(byte *)(param_3 + lVar37);
                                      if (0xff < uVar34) {
                                        uVar34 = 0xffffffff;
                                      }
                                      *(char *)(param_5 + lVar37) = (char)uVar34;
                                      if (iVar70 + 0xe < iVar5) {
                                        lVar37 = (long)(iVar70 + 0xe);
                                        uVar34 = (uint)*(byte *)(param_1 + lVar37) *
                                                 (uint)*(byte *)(param_3 + lVar37);
                                        if (0xff < uVar34) {
                                          uVar34 = 0xffffffff;
                                        }
                                        *(char *)(param_5 + lVar37) = (char)uVar34;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00248de4:
        iVar71 = iVar71 + -1;
        param_1 = param_1 + param_2;
        param_3 = param_3 + param_4;
        param_5 = param_5 + param_6;
      } while (iVar71 != 0);
    }
  }
  else if (iVar71 != 0) {
    iVar9 = iVar5 + -7;
    iVar1 = (iVar5 - 8U & 0xfffffff8) + 8;
    if (iVar9 < 1) {
      iVar1 = 0;
    }
    uVar6 = (uint)((iVar5 + -4) - iVar1) >> 2;
    lVar31 = (long)iVar1;
    do {
      if (0 < iVar9) {
        lVar36 = 0;
        do {
          uVar61 = *(undefined8 *)(param_3 + lVar36);
          uVar38 = (undefined1)((ulong)uVar61 >> 8);
          uVar57 = *(undefined8 *)(param_1 + lVar36);
          uVar39 = (undefined1)((ulong)uVar57 >> 8);
          auVar64._6_2_ = 0;
          auVar64._0_6_ =
               (uint6)CONCAT14(uVar38,(uint)CONCAT12(uVar38,(ushort)(byte)uVar61)) & 0xffff0000ffff;
          auVar64[8] = (char)((ulong)uVar61 >> 0x10);
          auVar64._9_3_ = 0;
          auVar64[0xc] = (char)((ulong)uVar61 >> 0x18);
          auVar64._13_3_ = 0;
          auVar43._6_2_ = 0;
          auVar43._0_6_ =
               (uint6)CONCAT14(uVar39,(uint)CONCAT12(uVar39,(ushort)(byte)uVar57)) & 0xffff0000ffff;
          auVar43[8] = (char)((ulong)uVar57 >> 0x10);
          auVar43._9_3_ = 0;
          auVar43[0xc] = (char)((ulong)uVar57 >> 0x18);
          auVar43._13_3_ = 0;
          auVar53 = NEON_ucvtf(auVar43,4);
          auVar44 = NEON_ucvtf(auVar64,4);
          auVar65._1_3_ = 0;
          auVar65[0] = (byte)((ulong)uVar61 >> 0x20);
          auVar65[4] = (char)((ulong)uVar61 >> 0x28);
          auVar65._5_3_ = 0;
          auVar65[8] = (char)((ulong)uVar61 >> 0x30);
          auVar65._9_3_ = 0;
          auVar65[0xc] = (char)((ulong)uVar61 >> 0x38);
          auVar65._13_3_ = 0;
          auVar58._1_3_ = 0;
          auVar58[0] = (byte)((ulong)uVar57 >> 0x20);
          auVar58[4] = (char)((ulong)uVar57 >> 0x28);
          auVar58._5_3_ = 0;
          auVar58[8] = (char)((ulong)uVar57 >> 0x30);
          auVar58._9_3_ = 0;
          auVar58[0xc] = (char)((ulong)uVar57 >> 0x38);
          auVar58._13_3_ = 0;
          auVar62 = NEON_ucvtf(auVar58,4);
          auVar59 = NEON_ucvtf(auVar65,4);
          fVar40 = fVar66 * auVar53._0_4_ * auVar44._0_4_;
          fVar51 = fVar66 * auVar53._4_4_ * auVar44._4_4_;
          auVar45._0_8_ = CONCAT44(fVar51,fVar40);
          auVar45._8_4_ = fVar66 * auVar53._8_4_ * auVar44._8_4_;
          auVar45._12_4_ = fVar66 * auVar53._12_4_ * auVar44._12_4_;
          auVar41 = auVar45;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar23 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar41._8_8_ = auVar45._8_8_;
            auVar41._0_8_ = auVar45._0_8_;
            if (iVar23 == 0) goto LAB_00248484;
            auVar44 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar44._8_8_;
            _DAT_00531e90 = auVar44._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar23 = (int)(fVar40 + (float)_DAT_00531e90);
            iVar69 = (int)(fVar51 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar19._4_4_ = iVar69;
            auVar19._0_4_ = iVar23;
            auVar19._8_4_ = (int)(auVar45._8_4_ + (float)uRam0000000000531e98);
            auVar19._12_4_ = (int)(auVar45._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar57 = NEON_uqxtn(CONCAT44(iVar69,iVar23),auVar19,4);
            uVar67 = (undefined4)uVar57;
            uVar68 = (undefined4)((ulong)uVar57 >> 0x20);
          }
          else {
LAB_00248484:
            iVar23 = (int)(auVar41._0_4_ + (float)_DAT_00531e90);
            iVar69 = (int)(auVar41._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar20._4_4_ = iVar69;
            auVar20._0_4_ = iVar23;
            auVar20._8_4_ = (int)(auVar41._8_4_ + (float)uRam0000000000531e98);
            auVar20._12_4_ = (int)(auVar41._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar57 = NEON_uqxtn(CONCAT44(iVar69,iVar23),auVar20,4);
            uVar67 = (undefined4)uVar57;
            uVar68 = (undefined4)((ulong)uVar57 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar23 = __cxa_guard_acquire(&DAT_00531ec0), iVar23 != 0)) {
            auVar44 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar44._8_8_;
            _DAT_00531e90 = auVar44._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          puVar29 = (undefined8 *)(param_5 + lVar36);
          lVar36 = lVar36 + 8;
          auVar52._4_4_ = uVar68;
          auVar52._0_4_ = uVar67;
          auVar42._0_8_ =
               CONCAT44((int)(fVar66 * auVar62._4_4_ * auVar59._4_4_ + DAT_00531e90_4),
                        (int)(fVar66 * auVar62._0_4_ * auVar59._0_4_ + _DAT_00531e90));
          auVar42._8_4_ =
               (int)(fVar66 * auVar62._8_4_ * auVar59._8_4_ + (float)uRam0000000000531e98);
          auVar42._12_4_ =
               (int)(fVar66 * auVar62._12_4_ * auVar59._12_4_ + uRam0000000000531e98._4_4_);
          uVar57 = NEON_uqxtn(auVar42._0_8_,auVar42,4);
          auVar52._8_8_ = uVar57;
          uVar57 = NEON_uqxtn(uVar57,auVar52,2);
          *puVar29 = uVar57;
        } while ((int)lVar36 < iVar9);
      }
      iVar23 = iVar1;
      if (iVar1 < iVar5 + -3) {
        pbVar28 = (byte *)(param_1 + lVar31);
        pbVar32 = (byte *)(param_3 + lVar31);
        puVar30 = (undefined1 *)(param_5 + lVar31);
        do {
          lVar36 = lrintf(fVar66 * (float)*pbVar28 * (float)*pbVar32);
          uVar25 = (uint)lVar36;
          if (0xff < uVar25) {
            uVar25 = -(uint)(0 < (int)uVar25);
          }
          lVar36 = lrintf(fVar66 * (float)pbVar28[1] * (float)pbVar32[1]);
          uVar26 = (uint)lVar36;
          if (0xff < uVar26) {
            uVar26 = -(uint)(0 < (int)uVar26);
          }
          *puVar30 = (char)uVar25;
          puVar30[1] = (char)uVar26;
          lVar36 = lrintf(fVar66 * (float)pbVar28[2] * (float)pbVar32[2]);
          uVar25 = (uint)lVar36;
          if (0xff < uVar25) {
            uVar25 = -(uint)(0 < (int)uVar25);
          }
          lVar36 = lrintf(fVar66 * (float)pbVar28[3] * (float)pbVar32[3]);
          uVar26 = (uint)lVar36;
          if (0xff < uVar26) {
            uVar26 = -(uint)(0 < (int)uVar26);
          }
          pbVar28 = pbVar28 + 4;
          puVar30[2] = (char)uVar25;
          puVar30[3] = (char)uVar26;
          pbVar32 = pbVar32 + 4;
          puVar30 = puVar30 + 4;
          iVar23 = iVar1 + 4 + uVar6 * 4;
        } while (pbVar28 != (byte *)(param_1 + lVar31 + 4 + (ulong)uVar6 * 4));
      }
      if (iVar23 < iVar5) {
        lVar36 = 0;
        lVar37 = (long)iVar23;
        do {
          lVar27 = lrintf(fVar66 * (float)*(byte *)(param_1 + lVar37 + lVar36) *
                          (float)*(byte *)(param_3 + lVar37 + lVar36));
          cVar10 = (char)lVar27;
          if (0xff < (uint)lVar27) {
            cVar10 = -(0 < (int)(uint)lVar27);
          }
          *(char *)(param_5 + lVar37 + lVar36) = cVar10;
          lVar36 = lVar36 + 1;
        } while (lVar36 != (ulong)(uint)((iVar5 + -1) - iVar23) + 1);
      }
      iVar71 = iVar71 + -1;
      param_1 = param_1 + param_2;
      param_3 = param_3 + param_4;
      param_5 = param_5 + param_6;
    } while (iVar71 != 0);
  }
  return;
}


==================================================================

### FUNC 00249298 (7884 bytes) name=FUN_00249298

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00249298(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                 _InputArray *param_4,undefined8 *param_5,char param_6,int param_7)

{
  uint uVar1;
  ulong uVar2;
  ulong uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  bool bVar10;
  bool bVar11;
  byte bVar12;
  byte bVar13;
  char cVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  uint uVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  void *__dest;
  char *pcVar25;
  code *pcVar26;
  code *pcVar27;
  ulong uVar28;
  undefined8 *puVar29;
  long lVar30;
  Mat *pMVar31;
  undefined8 *puVar32;
  int *piVar33;
  undefined4 *puVar34;
  ulong uVar35;
  ulong uVar36;
  undefined8 *puVar37;
  ulong uVar38;
  _InputArray *p_Var39;
  ulong uVar40;
  long lVar41;
  uint uVar42;
  byte bVar43;
  uint uVar44;
  uint uVar45;
  code *pcVar46;
  undefined8 uVar47;
  uint uVar48;
  Mat *local_678;
  Mat *local_670;
  Mat *local_668;
  int local_650;
  int iStack_64c;
  int local_648;
  int iStack_644;
  ulong local_640;
  int local_638 [2];
  int local_630 [4];
  uchar *local_620;
  long local_618;
  undefined8 *local_610;
  long local_608;
  Mat *local_600;
  Mat *local_5f8;
  Mat *local_5f0;
  Mat *local_5e8;
  undefined8 local_5e0;
  NAryMatIterator aNStack_5d8 [32];
  ulong local_5b8;
  ulong local_5b0;
  uint local_598;
  int local_594;
  undefined4 local_590;
  undefined4 local_58c;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  undefined4 *local_558;
  undefined8 *local_550;
  undefined8 local_548;
  undefined8 local_540;
  undefined8 local_538;
  int local_530;
  int local_52c;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  int *local_4f8;
  undefined8 *local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  uint local_4d8;
  int local_4d4;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  undefined8 *local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  uint local_478;
  int local_474;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  undefined8 *local_438;
  undefined8 *local_430;
  undefined8 local_428;
  undefined8 local_420;
  undefined8 local_418;
  ulong local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  long local_3e0;
  ulong *local_3d8;
  undefined8 *local_3d0;
  undefined8 local_3c8;
  undefined8 local_3c0;
  int iVar20;
  
  iVar15 = cv::_InputArray::kind(param_1);
  iVar16 = cv::_InputArray::kind(param_2);
  uVar23 = cv::_InputArray::type(param_1,-1);
  uVar42 = (uint)uVar23;
  uVar48 = uVar42 & 7;
  uVar21 = ((uint)((uVar23 & 0xffffffff) >> 3) & 0x1ff) + 1;
  uVar24 = cv::_InputArray::type(param_2,-1);
  uVar45 = (uint)uVar24;
  iVar17 = cv::_InputArray::dims(param_1,-1);
  iVar18 = cv::_InputArray::dims(param_2,-1);
  iVar19 = (int)param_2;
  iVar20 = (int)param_1;
  p_Var39 = param_1;
  uVar44 = uVar21;
  if (iVar17 < 3) {
    cv::_InputArray::size(iVar20);
    if (2 < iVar18) goto LAB_00249368;
    cv::_InputArray::size(iVar19);
    bVar13 = cv::_InputArray::empty(param_4);
    bVar43 = bVar13 ^ 1;
    if (iVar15 == iVar16) {
      if (local_648 == local_650) {
        if ((iStack_64c == iStack_644) && (bVar12 = bVar13 & uVar42 == uVar45, bVar12 != 0)) {
          local_418 = (undefined8 *)CONCAT44(iStack_64c,local_648);
          cv::_OutputArray::create
                    ((_OutputArray *)param_3,(Mat *)&local_418,uVar23 & 0xffffffff,0xffffffff,0,0);
          if (param_6 == '\0') {
            pcVar26 = (code *)param_5[(int)uVar48];
          }
          else {
            pcVar26 = (code *)*param_5;
            uVar44 = uVar21 << (ulong)((uint)(0xfa50L >> (uVar48 << 1)) & 3);
          }
          iVar17 = cv::_InputArray::kind(param_1);
          if (iVar17 == 0x10000) {
            pMVar31 = *(Mat **)(param_1 + 8);
            local_498 = &local_4d0;
            local_490 = &local_488;
            local_4d8 = *(uint *)pMVar31;
            local_4c8 = *(undefined8 *)(pMVar31 + 0x10);
            local_4d4 = *(int *)(pMVar31 + 4);
            local_4d0 = *(undefined8 **)(pMVar31 + 8);
            local_4c0 = *(undefined8 *)(pMVar31 + 0x18);
            local_4b8 = *(undefined8 *)(pMVar31 + 0x20);
            local_4b0 = *(undefined8 *)(pMVar31 + 0x28);
            local_4a8 = *(undefined8 *)(pMVar31 + 0x30);
            local_4a0 = *(long *)(pMVar31 + 0x38);
            local_480 = 0;
            local_488 = 0;
            if (local_4a0 != 0) {
              piVar33 = (int *)(local_4a0 + 0x14);
              do {
                cVar14 = '\x01';
                bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
                if (bVar10) {
                  *piVar33 = *piVar33 + 1;
                  cVar14 = ExclusiveMonitorsStatus();
                }
              } while (cVar14 != '\0');
            }
            if (2 < *(int *)(pMVar31 + 4)) {
              local_4d4 = 0;
              cv::Mat::copySize((Mat *)&local_4d8,pMVar31);
            }
          }
          else {
            cv::_InputArray::getMat_(iVar20);
          }
          local_678 = (Mat *)&local_4d8;
          iVar17 = cv::_InputArray::kind(param_2);
          if (iVar17 == 0x10000) {
            pMVar31 = *(Mat **)(param_2 + 8);
            local_438 = &local_470;
            local_430 = &local_428;
            local_478 = *(uint *)pMVar31;
            local_468 = *(undefined8 *)(pMVar31 + 0x10);
            local_474 = *(int *)(pMVar31 + 4);
            local_470 = *(undefined8 *)(pMVar31 + 8);
            local_460 = *(undefined8 *)(pMVar31 + 0x18);
            local_458 = *(undefined8 *)(pMVar31 + 0x20);
            local_450 = *(undefined8 *)(pMVar31 + 0x28);
            local_448 = *(undefined8 *)(pMVar31 + 0x30);
            local_440 = *(long *)(pMVar31 + 0x38);
            local_420 = 0;
            local_428 = 0;
            if (local_440 != 0) {
              piVar33 = (int *)(local_440 + 0x14);
              do {
                cVar14 = '\x01';
                bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
                if (bVar10) {
                  *piVar33 = *piVar33 + 1;
                  cVar14 = ExclusiveMonitorsStatus();
                }
              } while (cVar14 != '\0');
            }
            if (*(int *)(pMVar31 + 4) < 3) {
              local_428 = **(undefined8 **)(pMVar31 + 0x48);
              local_420 = (*(undefined8 **)(pMVar31 + 0x48))[1];
            }
            else {
              local_474 = 0;
              cv::Mat::copySize((Mat *)&local_478,pMVar31);
            }
          }
          else {
            cv::_InputArray::getMat_(iVar19);
          }
          iVar17 = cv::_InputArray::kind(param_3);
          if (iVar17 == 0x10000) {
            pMVar31 = *(Mat **)(param_3 + 8);
            uVar1 = *(uint *)pMVar31;
            local_3d8 = &local_410;
            local_408 = *(undefined8 *)(pMVar31 + 0x10);
            local_3d0 = &local_3c8;
            local_418 = *(undefined8 **)pMVar31;
            local_410 = *(ulong *)(pMVar31 + 8);
            local_400 = *(undefined8 *)(pMVar31 + 0x18);
            local_3f8 = *(undefined8 *)(pMVar31 + 0x20);
            local_3f0 = *(undefined8 *)(pMVar31 + 0x28);
            local_3e8 = *(undefined8 *)(pMVar31 + 0x30);
            local_3e0 = *(long *)(pMVar31 + 0x38);
            local_3c0 = 0;
            local_3c8 = 0;
            if (local_3e0 != 0) {
              piVar33 = (int *)(local_3e0 + 0x14);
              do {
                cVar14 = '\x01';
                bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
                if (bVar10) {
                  *piVar33 = *piVar33 + 1;
                  cVar14 = ExclusiveMonitorsStatus();
                }
              } while (cVar14 != '\0');
            }
            if (*(int *)(pMVar31 + 4) < 3) {
              local_3c8 = **(undefined8 **)(pMVar31 + 0x48);
              local_3c0 = (*(undefined8 **)(pMVar31 + 0x48))[1];
            }
            else {
              local_418 = (undefined8 *)(ulong)uVar1;
              cv::Mat::copySize((Mat *)&local_418,pMVar31);
            }
          }
          else {
            cv::_InputArray::getMat_((int)param_3);
          }
          iVar18 = (int)local_4d0;
          iVar17 = local_4d0._4_4_;
          if ((local_4d8 & local_478 & 0x4000 & (uint)local_418) != 0) {
            lVar41 = (long)local_4d0._4_4_ * (long)(int)local_4d0;
            iVar22 = (int)lVar41;
            if (lVar41 - iVar22 == 0) {
              iVar17 = iVar22;
            }
            if (lVar41 - iVar22 == 0) {
              iVar18 = 1;
            }
          }
          iVar22 = (int)((long)iVar17 * (long)(int)uVar44);
          if ((long)iVar22 == (long)iVar17 * (long)(int)uVar44) {
            local_538 = CONCAT44(iVar18,iVar22);
            (*pcVar26)(local_4c8,local_488,local_468,local_428,local_408,local_3c8,&local_538,0);
            cv::Mat::release((Mat *)&local_418);
            if (local_3d0 != &local_3c8) {
              cv::fastFree(local_3d0);
            }
            cv::Mat::release((Mat *)&local_478);
            if (local_430 != &local_428) {
              cv::fastFree(local_430);
            }
            cv::Mat::release(local_678);
            if (local_490 == &local_488) {
              return;
            }
            cv::fastFree(local_490);
            return;
          }
          cv::Mat::release((Mat *)&local_418);
          if (local_3d0 != &local_3c8) {
            cv::fastFree(local_3d0);
          }
          cv::Mat::release((Mat *)&local_478);
          if (local_430 != &local_428) {
            cv::fastFree(local_430);
          }
          cv::Mat::release(local_678);
          if (local_490 != &local_488) {
            cv::fastFree(local_490);
          }
          goto LAB_00249394;
        }
      }
    }
    if (param_7 != 0xc) goto LAB_002493a0;
LAB_002494e4:
    bVar10 = true;
  }
  else {
    if (iVar18 < 3) {
      cv::_InputArray::size(iVar19);
      bVar12 = cv::_InputArray::empty(param_4);
      bVar43 = bVar12 ^ 1;
    }
    else {
LAB_00249368:
      bVar12 = cv::_InputArray::empty(param_4);
      bVar43 = bVar12 ^ 1;
    }
LAB_00249394:
    bVar13 = bVar12;
    if (param_7 == 0xc) goto LAB_002494e4;
LAB_002493a0:
    bVar10 = iVar15 == 0x20000;
    bVar11 = iVar16 == 0x20000;
    if (((char)(bVar10 + bVar11) == '\x01') ||
       (bVar12 = cv::_InputArray::sameSize(param_1,param_2), bVar12 <= (uVar42 != uVar45))) {
      iVar17 = cv::_InputArray::dims(param_1,-1);
      if ((iVar17 < 3) && (cVar14 = cv::_InputArray::isContinuous(param_1,-1), cVar14 != '\0')) {
        uVar1 = ((uint)((uVar24 & 0xffffffff) >> 3) & 0x1ff) + 1;
        cv::_InputArray::size(iVar20);
        if ((uint)local_418 == 1) {
          if (((iVar15 == 0x20000) || (!bVar11)) &&
             (((local_418._4_4_ == 1 || (uVar1 == local_418._4_4_)) ||
              (((local_418._4_4_ == 4 && (iVar15 = cv::_InputArray::type(param_1,-1), iVar15 == 6))
               && (uVar1 < 5)))))) goto LAB_0024ae70;
        }
        else if ((local_418._4_4_ == 1) &&
                (((iVar15 == 0x20000 || (!bVar11)) && (uVar1 == (uint)local_418)))) {
LAB_0024ae70:
          uVar48 = uVar45 & 7;
          bVar10 = true;
          p_Var39 = param_2;
          param_2 = param_1;
          uVar21 = uVar1;
          uVar44 = uVar1;
          uVar42 = uVar45;
          goto LAB_00249580;
        }
      }
      iVar15 = cv::_InputArray::dims(param_2,-1);
      if ((iVar15 < 3) && (cVar14 = cv::_InputArray::isContinuous(param_2,-1), cVar14 != '\0')) {
        cv::_InputArray::size(iVar19);
        if ((uint)local_418 == 1) {
          if ((iVar16 == 0x20000) || (!bVar10)) {
            if ((local_418._4_4_ == 1) || (uVar21 == local_418._4_4_)) goto LAB_002494e4;
            if (((local_418._4_4_ == 4) && (iVar15 = cv::_InputArray::type(param_2,-1), iVar15 == 6)
                ) && (uVar21 < 5)) {
              bVar10 = true;
              goto LAB_00249580;
            }
          }
        }
        else if (((local_418._4_4_ == 1) && ((iVar16 == 0x20000 || (!bVar10)))) &&
                (uVar21 == (uint)local_418)) goto LAB_002494e4;
      }
      local_418 = (undefined8 *)0x0;
      local_410 = 0;
      __dest = (void *)cv::String::allocate((String *)&local_418,0x82);
      memcpy(__dest,&DAT_00460758,0x82);
      cv::error(-0xd1,(String *)&local_418,
                "void cv::binary_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, void (* const*)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x625);
      bVar10 = true;
      cv::String::deallocate((String *)&local_418);
    }
    else {
      cVar14 = cv::_InputArray::sameSize(param_1,param_2);
      if ((cVar14 == '\0') || (uVar42 != uVar45)) {
        local_418 = (undefined8 *)0x0;
        local_410 = 0;
        pcVar25 = (char *)cv::String::allocate((String *)&local_418,0x29);
        cVar14 = s_psrc1_>sameSize__psrc2_____type1_004607f0[0x28];
        uVar6 = s_psrc1_>sameSize__psrc2_____type1_004607f0._24_8_;
        uVar5 = s_psrc1_>sameSize__psrc2_____type1_004607f0._16_8_;
        uVar4 = s_psrc1_>sameSize__psrc2_____type1_004607f0._8_8_;
        uVar47 = s_psrc1_>sameSize__psrc2_____type1_004607f0._0_8_;
        *(undefined8 *)(pcVar25 + 0x20) = s_psrc1_>sameSize__psrc2_____type1_004607f0._32_8_;
        pcVar25[0x28] = cVar14;
        *(undefined8 *)pcVar25 = uVar47;
        *(undefined8 *)(pcVar25 + 8) = uVar4;
        *(undefined8 *)(pcVar25 + 0x10) = uVar5;
        *(undefined8 *)(pcVar25 + 0x18) = uVar6;
        cv::error(-0xd7,(String *)&local_418,
                  "void cv::binary_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, void (* const*)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x62a);
        bVar10 = false;
        cv::String::deallocate((String *)&local_418);
      }
      else {
        bVar10 = false;
      }
    }
  }
LAB_00249580:
  local_640 = (ulong)(int)(uVar21 << (ulong)((uint)(0xfa50L >> (uVar48 << 1)) & 3));
  uVar23 = 0;
  if (local_640 != 0) {
    uVar23 = (local_640 + 0x3ff) / local_640;
  }
  if (bVar43 == 0) {
    pcVar26 = (code *)0x0;
    bVar11 = false;
  }
  else {
    uVar21 = cv::_InputArray::type(param_4,-1);
    if ((1 < uVar21) || (cVar14 = cv::_InputArray::sameSize(param_4,p_Var39), cVar14 == '\0')) {
      local_418 = (undefined8 *)0x0;
      local_410 = 0;
      pcVar25 = (char *)cv::String::allocate((String *)&local_418,0x3c);
      uVar9 = s__mtype____CV_8U____mtype____CV_8_00460820._56_4_;
      uVar8 = s__mtype____CV_8U____mtype____CV_8_00460820._40_8_;
      uVar7 = s__mtype____CV_8U____mtype____CV_8_00460820._32_8_;
      uVar6 = s__mtype____CV_8U____mtype____CV_8_00460820._24_8_;
      uVar5 = s__mtype____CV_8U____mtype____CV_8_00460820._16_8_;
      uVar4 = s__mtype____CV_8U____mtype____CV_8_00460820._8_8_;
      uVar47 = s__mtype____CV_8U____mtype____CV_8_00460820._0_8_;
      *(undefined8 *)(pcVar25 + 0x30) = s__mtype____CV_8U____mtype____CV_8_00460820._48_8_;
      *(undefined4 *)(pcVar25 + 0x38) = uVar9;
      *(undefined8 *)pcVar25 = uVar47;
      *(undefined8 *)(pcVar25 + 8) = uVar4;
      *(undefined8 *)(pcVar25 + 0x10) = uVar5;
      *(undefined8 *)(pcVar25 + 0x18) = uVar6;
      *(undefined8 *)(pcVar25 + 0x20) = uVar7;
      *(undefined8 *)(pcVar25 + 0x28) = uVar8;
      cv::error(-0xd7,(String *)&local_418,
                "void cv::binary_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, void (* const*)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x635);
      cv::String::deallocate((String *)&local_418);
    }
    bVar11 = true;
    pcVar26 = (code *)FUN_0028cd18(local_640);
    cVar14 = cv::_InputArray::sameSize(param_3,p_Var39);
    if (cVar14 != '\0') {
      uVar21 = cv::_InputArray::type(param_3,-1);
      bVar11 = uVar21 != uVar42;
    }
  }
  local_418 = &local_408;
  local_410 = 0x408;
  cv::_OutputArray::createSameSize((_OutputArray *)param_3,p_Var39,uVar42);
  if (bVar13 < bVar11) {
    local_4d0 = &local_538;
    local_4c8 = 0x100000001;
    local_468 = 0;
    local_478 = 0;
    local_470 = 0;
    local_538 = 0;
    local_4d8 = 0xc1020006;
    cv::_OutputArray::setTo
              ((_OutputArray *)param_3,(_InputArray *)&local_4d8,(_InputArray *)&local_478);
  }
  iVar15 = cv::_InputArray::kind(p_Var39);
  if (iVar15 == 0x10000) {
    pMVar31 = *(Mat **)(p_Var39 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(uint *)pMVar31;
    local_594 = *(int *)(pMVar31 + 4);
    local_590 = *(undefined4 *)(pMVar31 + 8);
    local_58c = *(undefined4 *)(pMVar31 + 0xc);
    local_588 = *(undefined8 *)(pMVar31 + 0x10);
    local_580 = *(undefined8 *)(pMVar31 + 0x18);
    local_578 = *(undefined8 *)(pMVar31 + 0x20);
    local_570 = *(undefined8 *)(pMVar31 + 0x28);
    local_568 = *(undefined8 *)(pMVar31 + 0x30);
    local_560 = *(long *)(pMVar31 + 0x38);
    local_540 = 0;
    local_548 = 0;
    if (local_560 != 0) {
      piVar33 = (int *)(local_560 + 0x14);
      do {
        cVar14 = '\x01';
        bVar11 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar11) {
          *piVar33 = *piVar33 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (2 < *(int *)(pMVar31 + 4)) {
      local_594 = 0;
      cv::Mat::copySize((Mat *)&local_598,pMVar31);
    }
  }
  else {
    cv::_InputArray::getMat_((int)p_Var39);
  }
  local_668 = (Mat *)&local_598;
  iVar15 = cv::_InputArray::kind(param_2);
  if (iVar15 == 0x10000) {
    pMVar31 = *(Mat **)(param_2 + 8);
    local_4f8 = &local_530;
    local_4f0 = &local_4e8;
    local_528 = *(undefined8 *)(pMVar31 + 0x10);
    local_538 = *(undefined8 *)pMVar31;
    local_530 = *(int *)(pMVar31 + 8);
    local_52c = *(int *)(pMVar31 + 0xc);
    local_520 = *(undefined8 *)(pMVar31 + 0x18);
    local_518 = *(undefined8 *)(pMVar31 + 0x20);
    local_510 = *(undefined8 *)(pMVar31 + 0x28);
    local_508 = *(undefined8 *)(pMVar31 + 0x30);
    local_500 = *(long *)(pMVar31 + 0x38);
    local_4e0 = 0;
    local_4e8 = 0;
    if (local_500 != 0) {
      piVar33 = (int *)(local_500 + 0x14);
      do {
        cVar14 = '\x01';
        bVar11 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar11) {
          *piVar33 = *piVar33 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (2 < *(int *)(pMVar31 + 4)) {
                    /* WARNING: Ignoring partial resolution of indirect */
      local_538._4_4_ = 0;
      cv::Mat::copySize((Mat *)&local_538,pMVar31);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  local_670 = (Mat *)&local_538;
  iVar15 = cv::_InputArray::kind(param_3);
  if (iVar15 == 0x10000) {
    pMVar31 = *(Mat **)(param_3 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(uint *)pMVar31;
    local_4c8 = *(undefined8 *)(pMVar31 + 0x10);
    local_4d4 = *(int *)(pMVar31 + 4);
    local_4d0 = *(undefined8 **)(pMVar31 + 8);
    local_4c0 = *(undefined8 *)(pMVar31 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar31 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar31 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar31 + 0x30);
    local_4a0 = *(long *)(pMVar31 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar33 = (int *)(local_4a0 + 0x14);
      do {
        cVar14 = '\x01';
        bVar11 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar11) {
          *piVar33 = *piVar33 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (2 < *(int *)(pMVar31 + 4)) {
      local_4d4 = 0;
      cv::Mat::copySize((Mat *)&local_4d8,pMVar31);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_3);
  }
  local_678 = (Mat *)&local_4d8;
  iVar15 = cv::_InputArray::kind(param_4);
  if (iVar15 == 0x10000) {
    local_438 = &local_470;
    local_430 = &local_428;
    pMVar31 = *(Mat **)(param_4 + 8);
    local_478 = *(uint *)pMVar31;
    local_468 = *(undefined8 *)(pMVar31 + 0x10);
    local_474 = *(int *)(pMVar31 + 4);
    local_470 = *(undefined8 *)(pMVar31 + 8);
    local_460 = *(undefined8 *)(pMVar31 + 0x18);
    local_458 = *(undefined8 *)(pMVar31 + 0x20);
    local_450 = *(undefined8 *)(pMVar31 + 0x28);
    local_448 = *(undefined8 *)(pMVar31 + 0x30);
    local_440 = *(long *)(pMVar31 + 0x38);
    local_420 = 0;
    local_428 = 0;
    if (local_440 != 0) {
      piVar33 = (int *)(local_440 + 0x14);
      do {
        cVar14 = '\x01';
        bVar11 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar11) {
          *piVar33 = *piVar33 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (*(int *)(pMVar31 + 4) < 3) {
      local_428 = **(undefined8 **)(pMVar31 + 0x48);
      local_420 = (*(undefined8 **)(pMVar31 + 0x48))[1];
    }
    else {
      local_474 = 0;
      cv::Mat::copySize((Mat *)&local_478,pMVar31);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_4);
  }
  if (param_6 == '\0') {
    pcVar46 = (code *)param_5[(int)uVar48];
  }
  else {
    pcVar46 = (code *)*param_5;
    uVar44 = (uint)local_640;
  }
  if (!bVar10) {
    local_600 = local_668;
    local_5f8 = local_670;
    local_5e0 = 0;
    local_5f0 = local_678;
    local_5e8 = (Mat *)&local_478;
    cv::NAryMatIterator::NAryMatIterator(aNStack_5d8,&local_600,&local_620,-1);
    uVar24 = local_5b0;
    if (0x7fffffff < (long)(int)uVar44 * local_5b0) {
      iVar15 = 0;
      if (uVar44 != 0) {
        iVar15 = 0x7fffffff / (int)uVar44;
      }
      uVar24 = (ulong)iVar15;
    }
    if (bVar43 == 0) {
      puVar32 = (undefined8 *)0x0;
      uVar23 = local_410;
    }
    else {
      if (uVar23 < uVar24) {
        uVar24 = uVar23;
      }
      uVar40 = uVar24 * local_640;
      puVar32 = local_418;
      uVar23 = uVar40;
      if (local_410 <= uVar40 && uVar40 - local_410 != 0) {
        if (local_418 != &local_408) {
          if (local_418 != (undefined8 *)0x0) {
            operator_delete__(local_418);
          }
          local_418 = &local_408;
          local_410 = 0x408;
        }
        puVar32 = &local_408;
        uVar23 = local_410;
        if (0x408 < uVar40) {
          local_418 = operator_new__(uVar40);
          puVar32 = local_418;
          uVar23 = uVar40;
        }
      }
    }
    local_410 = uVar23;
    uVar23 = 0;
    if (local_5b8 != 0) {
      do {
        uVar40 = local_5b0;
        uVar35 = uVar24;
        if (local_5b0 != 0) {
          do {
            uVar36 = uVar24;
            if (uVar40 < uVar24) {
              uVar36 = uVar40;
            }
            puVar29 = puVar32;
            if (bVar43 == 0) {
              puVar29 = local_610;
            }
            iVar15 = (int)uVar36;
            local_630[1] = 1;
            local_630[0] = uVar44 * iVar15;
            (*pcVar46)(local_620,0,local_618,0,puVar29,0,local_630,0);
            if (bVar43 != 0) {
              local_630[1] = 1;
              local_630[0] = iVar15;
              (*pcVar26)(puVar32,0,local_608,0,local_610,0,local_630,&local_640);
              local_608 = local_608 + iVar15;
            }
            lVar41 = (long)(iVar15 * (int)local_640);
            local_620 = local_620 + lVar41;
            local_618 = local_618 + lVar41;
            local_610 = (undefined8 *)((long)local_610 + lVar41);
            bVar10 = uVar35 < local_5b0;
            uVar40 = uVar40 - uVar24;
            uVar35 = uVar35 + uVar24;
          } while (bVar10);
        }
        uVar23 = uVar23 + 1;
        cv::NAryMatIterator::operator++(aNStack_5d8);
      } while (uVar23 < local_5b8);
    }
    goto LAB_00249d80;
  }
  local_600 = local_668;
  local_5e8 = (Mat *)0x0;
  local_5f8 = local_678;
  local_5f0 = (Mat *)&local_478;
  cv::NAryMatIterator::NAryMatIterator(aNStack_5d8,&local_600,&local_620,-1);
  if (local_5b0 < uVar23) {
    uVar23 = local_5b0;
  }
  lVar41 = 2;
  if (bVar43 == 0) {
    lVar41 = 1;
  }
  lVar30 = uVar23 * local_640;
  uVar24 = lVar41 * lVar30 + 0x20;
  puVar32 = local_418;
  if (local_410 < uVar24) {
    if (local_418 != &local_408) {
      if (local_418 != (undefined8 *)0x0) {
        operator_delete__(local_418);
      }
      local_418 = &local_408;
      local_410 = 0x408;
    }
    if (uVar24 < 0x409) {
      lVar30 = uVar23 * local_640;
      puVar32 = &local_408;
      uVar24 = local_410;
    }
    else {
      local_418 = operator_new__(uVar24);
      lVar30 = uVar23 * local_640;
      puVar32 = local_418;
    }
  }
  local_410 = uVar24;
  uVar24 = (ulong)((long)puVar32 + lVar30 + 0xf) & 0xfffffffffffffff0;
  if (local_538._4_4_ < 3) {
    iVar15 = local_52c * local_530;
  }
  else {
    iVar15 = 1;
    lVar41 = 0;
    do {
      piVar33 = local_4f8 + lVar41;
      lVar41 = lVar41 + 1;
      iVar15 = iVar15 * *piVar33;
    } while ((int)lVar41 < local_538._4_4_);
  }
  uVar21 = local_598 & 7;
  iVar16 = (local_598 >> 3 & 0x1ff) + 1;
  uVar40 = (ulong)(iVar16 << (ulong)((uint)(0xfa50L >> (uVar21 << 1)) & 3));
  pcVar27 = (code *)FUN_00283fe0((uint)local_538 & 7,local_598 & 0xfff);
  local_638[1] = 1;
  local_638[0] = iVar15;
  if (iVar16 < iVar15) {
    local_638[0] = iVar16;
  }
  (*pcVar27)(local_528,1,0,1,puVar32,1,local_638,0);
  if (iVar15 < iVar16) {
    if (iVar15 != 1) {
      local_630[0] = 0;
      local_630[1] = 0;
      local_630[2] = 0;
      local_630[3] = 0;
      pcVar25 = (char *)cv::String::allocate((String *)local_630,8);
      *(undefined8 *)pcVar25 = s_scn____1_004607e0._0_8_;
      cv::error(-0xd7,(String *)local_630,
                "void cv::convertAndUnrollScalar(const cv::Mat&, int, uchar*, size_t)",
                "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x588);
      cv::String::deallocate((String *)local_630);
    }
    uVar35 = 0x88442211UL >> (uVar21 << 2) & 0xf;
    if (uVar35 < uVar40) {
      uVar36 = uVar40 - uVar35;
      if (((undefined8 *)((long)puVar32 + uVar35) < puVar32 + 2) || (uVar36 < 0x16)) {
        uVar36 = uVar35;
        do {
          *(undefined1 *)((long)puVar32 + uVar36) =
               *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
          uVar36 = uVar36 + 1;
        } while (uVar40 != uVar36);
      }
      else {
        uVar3 = -(long)puVar32 & 0xfU;
        if (uVar36 < (-(long)puVar32 & 0xfU)) {
          uVar3 = uVar36;
        }
        uVar28 = uVar35;
        if (uVar3 != 0) {
          *(undefined1 *)((long)puVar32 + uVar35) = *(undefined1 *)puVar32;
          uVar28 = uVar35 + 1;
          if (uVar3 != 1) {
            *(undefined1 *)((long)puVar32 + uVar35 + 1) = *(undefined1 *)((long)puVar32 + 1);
            uVar28 = uVar35 + 2;
            if (uVar3 != 2) {
              *(undefined1 *)((long)puVar32 + uVar35 + 2) = *(undefined1 *)((long)puVar32 + 2);
              uVar28 = uVar35 + 3;
              if (uVar3 != 3) {
                *(undefined1 *)((long)puVar32 + uVar35 + 3) = *(undefined1 *)((long)puVar32 + 3);
                uVar28 = uVar35 + 4;
                if (uVar3 != 4) {
                  *(undefined1 *)((long)puVar32 + uVar35 + 4) = *(undefined1 *)((long)puVar32 + 4);
                  uVar28 = uVar35 + 5;
                  if (uVar3 != 5) {
                    *(undefined1 *)((long)puVar32 + uVar35 + 5) = *(undefined1 *)((long)puVar32 + 5)
                    ;
                    uVar28 = uVar35 + 6;
                    if (uVar3 != 6) {
                      *(undefined1 *)((long)puVar32 + uVar35 + 6) =
                           *(undefined1 *)((long)puVar32 + 6);
                      uVar28 = uVar35 + 7;
                      if (uVar3 != 7) {
                        *(undefined1 *)((long)puVar32 + uVar35 + 7) =
                             *(undefined1 *)((long)puVar32 + 7);
                        uVar28 = uVar35 + 8;
                        if (uVar3 != 8) {
                          *(undefined1 *)((long)puVar32 + uVar35 + 8) = *(undefined1 *)(puVar32 + 1)
                          ;
                          uVar28 = uVar35 + 9;
                          if (uVar3 != 9) {
                            *(undefined1 *)((long)puVar32 + uVar35 + 9) =
                                 *(undefined1 *)((long)puVar32 + 9);
                            uVar28 = uVar35 + 10;
                            if (uVar3 != 10) {
                              *(undefined1 *)((long)puVar32 + uVar35 + 10) =
                                   *(undefined1 *)((long)puVar32 + 10);
                              uVar28 = uVar35 + 0xb;
                              if (uVar3 != 0xb) {
                                *(undefined1 *)((long)puVar32 + uVar35 + 0xb) =
                                     *(undefined1 *)((long)puVar32 + 0xb);
                                uVar28 = uVar35 + 0xc;
                                if (uVar3 != 0xc) {
                                  *(undefined1 *)((long)puVar32 + uVar35 + 0xc) =
                                       *(undefined1 *)((long)puVar32 + 0xc);
                                  uVar28 = uVar35 + 0xd;
                                  if (uVar3 != 0xd) {
                                    *(undefined1 *)((long)puVar32 + uVar35 + 0xd) =
                                         *(undefined1 *)((long)puVar32 + 0xd);
                                    uVar28 = uVar35 + 0xe;
                                    if (uVar3 == 0xf) {
                                      *(undefined1 *)((long)puVar32 + uVar35 + 0xe) =
                                           *(undefined1 *)((long)puVar32 + 0xe);
                                      uVar28 = uVar35 + 0xf;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar2 = ((uVar36 - uVar3) - 0x10 >> 4) + 1;
        lVar41 = uVar2 * 0x10;
        if (0xe < (uVar36 - 1) - uVar3) {
          uVar38 = 0;
          puVar29 = (undefined8 *)((long)puVar32 + uVar3);
          puVar37 = (undefined8 *)((long)puVar32 + uVar3 + uVar35);
          do {
            uVar47 = *puVar29;
            uVar38 = uVar38 + 1;
            puVar37[1] = puVar29[1];
            *puVar37 = uVar47;
            puVar29 = puVar29 + 2;
            puVar37 = puVar37 + 2;
          } while (uVar38 < uVar2);
          uVar28 = uVar28 + lVar41;
          if (lVar41 - (uVar36 - uVar3) == 0) goto LAB_0024a480;
        }
        uVar36 = uVar28 + 1;
        *(undefined1 *)((long)puVar32 + uVar28) = *(undefined1 *)((long)puVar32 + (uVar28 - uVar35))
        ;
        if (uVar36 < uVar40) {
          uVar3 = uVar28 + 2;
          *(undefined1 *)((long)puVar32 + uVar36) =
               *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
          if (uVar3 < uVar40) {
            uVar36 = uVar28 + 3;
            *(undefined1 *)((long)puVar32 + uVar3) =
                 *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
            if (uVar36 < uVar40) {
              uVar3 = uVar28 + 4;
              *(undefined1 *)((long)puVar32 + uVar36) =
                   *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
              if (uVar3 < uVar40) {
                uVar36 = uVar28 + 5;
                *(undefined1 *)((long)puVar32 + uVar3) =
                     *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
                if (uVar36 < uVar40) {
                  uVar3 = uVar28 + 6;
                  *(undefined1 *)((long)puVar32 + uVar36) =
                       *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
                  if (uVar3 < uVar40) {
                    uVar36 = uVar28 + 7;
                    *(undefined1 *)((long)puVar32 + uVar3) =
                         *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
                    if (uVar36 < uVar40) {
                      uVar3 = uVar28 + 8;
                      *(undefined1 *)((long)puVar32 + uVar36) =
                           *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
                      if (uVar3 < uVar40) {
                        uVar36 = uVar28 + 9;
                        *(undefined1 *)((long)puVar32 + uVar3) =
                             *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
                        if (uVar36 < uVar40) {
                          uVar3 = uVar28 + 10;
                          *(undefined1 *)((long)puVar32 + uVar36) =
                               *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
                          if (uVar3 < uVar40) {
                            uVar36 = uVar28 + 0xb;
                            *(undefined1 *)((long)puVar32 + uVar3) =
                                 *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
                            if (uVar36 < uVar40) {
                              uVar3 = uVar28 + 0xc;
                              *(undefined1 *)((long)puVar32 + uVar36) =
                                   *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
                              if (uVar3 < uVar40) {
                                uVar36 = uVar28 + 0xd;
                                *(undefined1 *)((long)puVar32 + uVar3) =
                                     *(undefined1 *)((long)puVar32 + (uVar3 - uVar35));
                                if (uVar36 < uVar40) {
                                  uVar28 = uVar28 + 0xe;
                                  *(undefined1 *)((long)puVar32 + uVar36) =
                                       *(undefined1 *)((long)puVar32 + (uVar36 - uVar35));
                                  if (uVar28 < uVar40) {
                                    *(undefined1 *)((long)puVar32 + uVar28) =
                                         *(undefined1 *)((long)puVar32 + (uVar28 - uVar35));
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0024a480:
  uVar35 = uVar23 * uVar40;
  if (uVar40 < uVar35) {
    uVar36 = uVar35 - uVar40;
    if (((undefined8 *)((long)puVar32 + uVar40) < puVar32 + 2) || (uVar36 < 0x16)) {
      puVar29 = puVar32;
      do {
        *(undefined1 *)((long)puVar29 + uVar40) = *(undefined1 *)puVar29;
        puVar29 = (undefined8 *)((long)puVar29 + 1);
      } while (puVar29 != (undefined8 *)((long)puVar32 + uVar36));
    }
    else {
      uVar3 = uVar36;
      if ((-(long)puVar32 & 0xfU) < uVar36) {
        uVar3 = -(long)puVar32 & 0xfU;
      }
      uVar28 = uVar40;
      if (uVar3 != 0) {
        *(undefined1 *)((long)puVar32 + uVar40) = *(undefined1 *)puVar32;
        uVar28 = uVar40 + 1;
        if (uVar3 != 1) {
          *(undefined1 *)((long)puVar32 + uVar40 + 1) = *(undefined1 *)((long)puVar32 + 1);
          uVar28 = uVar40 + 2;
          if (uVar3 != 2) {
            *(undefined1 *)((long)puVar32 + uVar40 + 2) = *(undefined1 *)((long)puVar32 + 2);
            uVar28 = uVar40 + 3;
            if (uVar3 != 3) {
              *(undefined1 *)((long)puVar32 + uVar40 + 3) = *(undefined1 *)((long)puVar32 + 3);
              uVar28 = uVar40 + 4;
              if (uVar3 != 4) {
                *(undefined1 *)((long)puVar32 + uVar40 + 4) = *(undefined1 *)((long)puVar32 + 4);
                uVar28 = uVar40 + 5;
                if (uVar3 != 5) {
                  *(undefined1 *)((long)puVar32 + uVar40 + 5) = *(undefined1 *)((long)puVar32 + 5);
                  uVar28 = uVar40 + 6;
                  if (uVar3 != 6) {
                    *(undefined1 *)((long)puVar32 + uVar40 + 6) = *(undefined1 *)((long)puVar32 + 6)
                    ;
                    uVar28 = uVar40 + 7;
                    if (uVar3 != 7) {
                      *(undefined1 *)((long)puVar32 + uVar40 + 7) =
                           *(undefined1 *)((long)puVar32 + 7);
                      uVar28 = uVar40 + 8;
                      if (uVar3 != 8) {
                        *(undefined1 *)((long)puVar32 + uVar40 + 8) = *(undefined1 *)(puVar32 + 1);
                        uVar28 = uVar40 + 9;
                        if (uVar3 != 9) {
                          *(undefined1 *)((long)puVar32 + uVar40 + 9) =
                               *(undefined1 *)((long)puVar32 + 9);
                          uVar28 = uVar40 + 10;
                          if (uVar3 != 10) {
                            *(undefined1 *)((long)puVar32 + uVar40 + 10) =
                                 *(undefined1 *)((long)puVar32 + 10);
                            uVar28 = uVar40 + 0xb;
                            if (uVar3 != 0xb) {
                              *(undefined1 *)((long)puVar32 + uVar40 + 0xb) =
                                   *(undefined1 *)((long)puVar32 + 0xb);
                              uVar28 = uVar40 + 0xc;
                              if (uVar3 != 0xc) {
                                *(undefined1 *)((long)puVar32 + uVar40 + 0xc) =
                                     *(undefined1 *)((long)puVar32 + 0xc);
                                uVar28 = uVar40 + 0xd;
                                if (uVar3 != 0xd) {
                                  *(undefined1 *)((long)puVar32 + uVar40 + 0xd) =
                                       *(undefined1 *)((long)puVar32 + 0xd);
                                  uVar28 = uVar40 + 0xe;
                                  if (uVar3 == 0xf) {
                                    *(undefined1 *)((long)puVar32 + uVar40 + 0xe) =
                                         *(undefined1 *)((long)puVar32 + 0xe);
                                    uVar28 = uVar40 + 0xf;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      uVar2 = ((uVar36 - uVar3) - 0x10 >> 4) + 1;
      lVar41 = uVar2 * 0x10;
      if (0xe < (uVar36 - 1) - uVar3) {
        uVar38 = 0;
        puVar29 = (undefined8 *)((long)puVar32 + uVar3);
        puVar37 = (undefined8 *)((long)puVar32 + uVar3 + uVar40);
        do {
          uVar47 = *puVar29;
          uVar38 = uVar38 + 1;
          puVar37[1] = puVar29[1];
          *puVar37 = uVar47;
          puVar29 = puVar29 + 2;
          puVar37 = puVar37 + 2;
        } while (uVar38 < uVar2);
        uVar28 = uVar28 + lVar41;
        if (lVar41 - (uVar36 - uVar3) == 0) goto LAB_0024a7a0;
      }
      uVar36 = uVar28 + 1;
      *(undefined1 *)((long)puVar32 + uVar28) = *(undefined1 *)((long)puVar32 + (uVar28 - uVar40));
      if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
        uVar3 = uVar28 + 2;
        *(undefined1 *)((long)puVar32 + uVar36) = *(undefined1 *)((long)puVar32 + (uVar36 - uVar40))
        ;
        if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
          uVar36 = uVar28 + 3;
          *(undefined1 *)((long)puVar32 + uVar3) = *(undefined1 *)((long)puVar32 + (uVar3 - uVar40))
          ;
          if (uVar36 < uVar35) {
            uVar3 = uVar28 + 4;
            *(undefined1 *)((long)puVar32 + uVar36) =
                 *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
            if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
              uVar36 = uVar28 + 5;
              *(undefined1 *)((long)puVar32 + uVar3) =
                   *(undefined1 *)((long)puVar32 + (uVar3 - uVar40));
              if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
                uVar3 = uVar28 + 6;
                *(undefined1 *)((long)puVar32 + uVar36) =
                     *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
                if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
                  uVar36 = uVar28 + 7;
                  *(undefined1 *)((long)puVar32 + uVar3) =
                       *(undefined1 *)((long)puVar32 + (uVar3 - uVar40));
                  if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
                    uVar3 = uVar28 + 8;
                    *(undefined1 *)((long)puVar32 + uVar36) =
                         *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
                    if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
                      uVar36 = uVar28 + 9;
                      *(undefined1 *)((long)puVar32 + uVar3) =
                           *(undefined1 *)((long)puVar32 + (uVar3 - uVar40));
                      if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
                        uVar3 = uVar28 + 10;
                        *(undefined1 *)((long)puVar32 + uVar36) =
                             *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
                        if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
                          uVar36 = uVar28 + 0xb;
                          *(undefined1 *)((long)puVar32 + uVar3) =
                               *(undefined1 *)((long)puVar32 + (uVar3 - uVar40));
                          if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
                            uVar3 = uVar28 + 0xc;
                            *(undefined1 *)((long)puVar32 + uVar36) =
                                 *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
                            if (uVar3 <= uVar35 && uVar35 - uVar3 != 0) {
                              uVar36 = uVar28 + 0xd;
                              *(undefined1 *)((long)puVar32 + uVar3) =
                                   *(undefined1 *)((long)puVar32 + (uVar3 - uVar40));
                              if (uVar36 <= uVar35 && uVar35 - uVar36 != 0) {
                                uVar28 = uVar28 + 0xe;
                                *(undefined1 *)((long)puVar32 + uVar36) =
                                     *(undefined1 *)((long)puVar32 + (uVar36 - uVar40));
                                if (uVar28 <= uVar35 && uVar35 - uVar28 != 0) {
                                  *(undefined1 *)((long)puVar32 + uVar28) =
                                       *(undefined1 *)((long)puVar32 + (uVar28 - uVar40));
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0024a7a0:
  uVar40 = 0;
  while (uVar40 < local_5b8) {
    if (local_5b0 == 0) {
LAB_0024a844:
      uVar40 = uVar40 + 1;
      cv::NAryMatIterator::operator++(aNStack_5d8);
    }
    else {
      uVar35 = local_5b0;
      uVar36 = uVar23;
      if (bVar43 == 0) {
        do {
          uVar3 = uVar23;
          if (uVar35 < uVar23) {
            uVar3 = uVar35;
          }
          local_630[1] = 1;
          local_630[0] = uVar44 * (int)uVar3;
          (*pcVar46)(local_620,0,puVar32,0,local_618,0,local_630,0);
          uVar35 = uVar35 - uVar23;
          lVar41 = (long)((int)uVar3 * (int)local_640);
          local_620 = local_620 + lVar41;
          local_618 = local_618 + lVar41;
          bVar10 = uVar36 < local_5b0;
          uVar36 = uVar36 + uVar23;
        } while (bVar10);
        goto LAB_0024a844;
      }
      do {
        uVar3 = uVar23;
        if (uVar35 < uVar23) {
          uVar3 = uVar35;
        }
        iVar15 = (int)uVar3;
        local_630[1] = 1;
        local_630[0] = uVar44 * iVar15;
        (*pcVar46)(local_620,0,puVar32,0,uVar24,0,local_630,0);
        local_630[1] = 1;
        local_630[0] = iVar15;
        (*pcVar26)(uVar24,0,local_610,0,local_618,0,local_630,&local_640);
        uVar35 = uVar35 - uVar23;
        local_610 = (undefined8 *)((long)local_610 + uVar3);
        lVar41 = (long)(iVar15 * (int)local_640);
        local_620 = local_620 + lVar41;
        local_618 = local_618 + lVar41;
        bVar10 = uVar36 < local_5b0;
        uVar36 = uVar36 + uVar23;
      } while (bVar10);
      uVar40 = uVar40 + 1;
      cv::NAryMatIterator::operator++(aNStack_5d8);
    }
  }
LAB_00249d80:
  if (local_440 != 0) {
    piVar33 = (int *)(local_440 + 0x14);
    do {
      iVar15 = *piVar33;
      cVar14 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar10) {
        *piVar33 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_478);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar15 = 0;
    puVar32 = local_438;
    do {
      *(undefined4 *)puVar32 = 0;
      iVar15 = iVar15 + 1;
      puVar32 = (undefined8 *)((long)puVar32 + 4);
    } while (iVar15 < local_474);
  }
  if (local_430 != &local_428) {
    cv::fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar33 = (int *)(local_4a0 + 0x14);
    do {
      iVar15 = *piVar33;
      cVar14 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar10) {
        *piVar33 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate(local_678);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar15 = 0;
    puVar32 = local_498;
    do {
      iVar15 = iVar15 + 1;
      *(undefined4 *)puVar32 = 0;
      puVar32 = (undefined8 *)((long)puVar32 + 4);
    } while (iVar15 < local_4d4);
  }
  if (local_490 != &local_488) {
    cv::fastFree(local_490);
  }
  if (local_500 != 0) {
    piVar33 = (int *)(local_500 + 0x14);
    do {
      iVar15 = *piVar33;
      cVar14 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar10) {
        *piVar33 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate(local_670);
    }
  }
  local_500 = 0;
  local_528 = 0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_538._4_4_) {
    iVar15 = 0;
    piVar33 = local_4f8;
    do {
      iVar15 = iVar15 + 1;
      *piVar33 = 0;
      piVar33 = piVar33 + 1;
    } while (iVar15 < local_538._4_4_);
  }
  if (local_4f0 != &local_4e8) {
    cv::fastFree(local_4f0);
  }
  if (local_560 != 0) {
    piVar33 = (int *)(local_560 + 0x14);
    do {
      iVar15 = *piVar33;
      cVar14 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar10) {
        *piVar33 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate(local_668);
    }
  }
  local_560 = 0;
  local_588 = 0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar15 = 0;
    puVar34 = local_558;
    do {
      iVar15 = iVar15 + 1;
      *puVar34 = 0;
      puVar34 = puVar34 + 1;
    } while (iVar15 < local_594);
  }
  if (local_550 != &local_548) {
    cv::fastFree(local_550);
  }
  if ((local_418 != &local_408) && (local_418 != (undefined8 *)0x0)) {
    operator_delete__(local_418);
  }
  return;
}


==================================================================

### FUNC 0024b2e8 (160 bytes) name=operator==

/* cv::MatSize::TEMPNAMEPLACEHOLDERVALUE(cv::MatSize const&) const */

bool __thiscall cv::MatSize::operator==(MatSize *this,MatSize *param_1)

{
  int *piVar1;
  int iVar2;
  int *piVar3;
  int *piVar4;
  
  piVar4 = *(int **)this;
  piVar3 = *(int **)param_1;
  iVar2 = piVar4[-1];
  if (iVar2 == piVar3[-1]) {
    if (iVar2 != 2) {
      if (0 < iVar2) {
        if (*piVar4 != *piVar3) {
          return false;
        }
        piVar1 = piVar4 + (iVar2 - 1);
        while (piVar3 = piVar3 + 1, piVar4 != piVar1) {
          piVar4 = piVar4 + 1;
          if (*piVar4 != *piVar3) {
            return false;
          }
        }
      }
      return true;
    }
    if (*piVar4 == *piVar3) {
      return piVar4[1] == piVar3[1];
    }
  }
  return false;
}


==================================================================

### FUNC 0024b388 (316 bytes) name=FUN_0024b388

bool FUN_0024b388(_InputArray *param_1,ulong param_2,int param_3,int param_4)

{
  uint uVar1;
  char cVar2;
  int iVar3;
  int local_8;
  uint local_4;
  
  iVar3 = cv::_InputArray::dims(param_1,-1);
  if ((iVar3 < 3) && (cVar2 = cv::_InputArray::isContinuous(param_1,-1), cVar2 != '\0')) {
    cv::_InputArray::size((int)param_1);
    if (local_8 != 1) {
      if (local_4 != 1) {
        return false;
      }
      if ((param_4 == 0x20000) && (param_3 != 0x20000)) {
        return false;
      }
      return local_8 == ((uint)((param_2 & 0xffffffff) >> 3) & 0x1ff) + 1;
    }
    if (param_4 != 0x20000 || param_3 == 0x20000) {
      uVar1 = ((uint)((param_2 & 0xffffffff) >> 3) & 0x1ff) + 1;
      if (local_4 == 1) {
        return (bool)cVar2;
      }
      if (local_4 == uVar1) {
        return (bool)cVar2;
      }
      if (local_4 != 4) {
        return false;
      }
      iVar3 = cv::_InputArray::type(param_1,-1);
      return iVar3 == 6 && uVar1 < 5;
    }
  }
  return false;
}


==================================================================

### FUNC 0024b4c4 (2012 bytes) name=FUN_0024b4c4

void FUN_0024b4c4(uint *param_1,ulong param_2,undefined1 *param_3,long param_4)

{
  long lVar1;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  undefined1 *puVar5;
  uint uVar6;
  code *pcVar7;
  char *pcVar8;
  ulong uVar9;
  ulong uVar10;
  undefined8 *puVar11;
  ulong uVar12;
  undefined8 *puVar13;
  int iVar14;
  long lVar15;
  ulong uVar16;
  ulong uVar17;
  undefined8 uVar18;
  int local_10 [4];
  
  if ((int)param_1[1] < 3) {
    iVar14 = param_1[3] * param_1[2];
  }
  else {
    lVar15 = 0;
    iVar14 = 1;
    do {
      lVar1 = lVar15 * 4;
      lVar15 = lVar15 + 1;
      iVar14 = iVar14 * *(int *)(*(long *)(param_1 + 0x10) + lVar1);
    } while ((int)lVar15 < (int)param_1[1]);
  }
  uVar6 = (uint)param_2 & 7;
  iVar2 = ((uint)(param_2 >> 3) & 0x1ff) + 1;
  pcVar7 = (code *)FUN_00283fe0(*param_1 & 7);
  local_10[0] = iVar14;
  if (iVar2 < iVar14) {
    local_10[0] = iVar2;
  }
  local_10[1] = 1;
  (*pcVar7)(*(undefined8 *)(param_1 + 4),1,0,1,param_3,1,(String *)local_10,0);
  uVar17 = (ulong)(iVar2 << (ulong)((uint)(0xfa50L >> (uVar6 << 1)) & 3));
  if (iVar14 < iVar2) {
    if (iVar14 != 1) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      pcVar8 = (char *)cv::String::allocate((String *)local_10,8);
      *(undefined8 *)pcVar8 = s_scn____1_004607e0._0_8_;
      cv::error(-0xd7,(String *)local_10,
                "void cv::convertAndUnrollScalar(const cv::Mat&, int, uchar*, size_t)",
                "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x588);
      cv::String::deallocate((String *)local_10);
    }
    uVar9 = 0x88442211UL >> (uVar6 << 2) & 0xf;
    if (uVar9 < uVar17) {
      uVar12 = uVar17 - uVar9;
      if ((uVar12 < 0x16) || (param_3 + uVar9 < param_3 + 0x10)) {
        uVar12 = uVar9;
        do {
          param_3[uVar12] = param_3[uVar12 - uVar9];
          uVar12 = uVar12 + 1;
        } while (uVar17 != uVar12);
      }
      else {
        uVar4 = uVar12;
        if ((-(long)param_3 & 0xfU) < uVar12) {
          uVar4 = -(long)param_3 & 0xfU;
        }
        uVar10 = uVar9;
        if (uVar4 != 0) {
          param_3[uVar9] = *param_3;
          uVar10 = uVar9 + 1;
          if (uVar4 != 1) {
            param_3[uVar9 + 1] = param_3[1];
            uVar10 = uVar9 + 2;
            if (uVar4 != 2) {
              param_3[uVar9 + 2] = param_3[2];
              uVar10 = uVar9 + 3;
              if (uVar4 != 3) {
                param_3[uVar9 + 3] = param_3[3];
                uVar10 = uVar9 + 4;
                if (uVar4 != 4) {
                  param_3[uVar9 + 4] = param_3[4];
                  uVar10 = uVar9 + 5;
                  if (uVar4 != 5) {
                    param_3[uVar9 + 5] = param_3[5];
                    uVar10 = uVar9 + 6;
                    if (uVar4 != 6) {
                      param_3[uVar9 + 6] = param_3[6];
                      uVar10 = uVar9 + 7;
                      if (uVar4 != 7) {
                        param_3[uVar9 + 7] = param_3[7];
                        uVar10 = uVar9 + 8;
                        if (uVar4 != 8) {
                          param_3[uVar9 + 8] = param_3[8];
                          uVar10 = uVar9 + 9;
                          if (uVar4 != 9) {
                            param_3[uVar9 + 9] = param_3[9];
                            uVar10 = uVar9 + 10;
                            if (uVar4 != 10) {
                              param_3[uVar9 + 10] = param_3[10];
                              uVar10 = uVar9 + 0xb;
                              if (uVar4 != 0xb) {
                                param_3[uVar9 + 0xb] = param_3[0xb];
                                uVar10 = uVar9 + 0xc;
                                if (uVar4 != 0xc) {
                                  param_3[uVar9 + 0xc] = param_3[0xc];
                                  uVar10 = uVar9 + 0xd;
                                  if (uVar4 != 0xd) {
                                    param_3[uVar9 + 0xd] = param_3[0xd];
                                    uVar10 = uVar9 + 0xe;
                                    if (uVar4 == 0xf) {
                                      param_3[uVar9 + 0xe] = param_3[0xe];
                                      uVar10 = uVar9 + 0xf;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar3 = ((uVar12 - uVar4) - 0x10 >> 4) + 1;
        lVar15 = uVar3 * 0x10;
        if (0xe < (uVar12 - 1) - uVar4) {
          uVar16 = 0;
          puVar11 = (undefined8 *)(param_3 + uVar4);
          puVar13 = (undefined8 *)(param_3 + uVar4 + uVar9);
          do {
            uVar18 = *puVar11;
            uVar16 = uVar16 + 1;
            puVar13[1] = puVar11[1];
            *puVar13 = uVar18;
            puVar11 = puVar11 + 2;
            puVar13 = puVar13 + 2;
          } while (uVar16 < uVar3);
          uVar10 = uVar10 + lVar15;
          if (uVar12 - uVar4 == lVar15) goto LAB_0024b8ec;
        }
        uVar12 = uVar10 + 1;
        param_3[uVar10] = param_3[uVar10 - uVar9];
        if (uVar12 < uVar17) {
          uVar4 = uVar10 + 2;
          param_3[uVar12] = param_3[uVar12 - uVar9];
          if (uVar4 < uVar17) {
            uVar12 = uVar10 + 3;
            param_3[uVar4] = param_3[uVar4 - uVar9];
            if (uVar12 < uVar17) {
              uVar4 = uVar10 + 4;
              param_3[uVar12] = param_3[uVar12 - uVar9];
              if (uVar4 < uVar17) {
                uVar12 = uVar10 + 5;
                param_3[uVar4] = param_3[uVar4 - uVar9];
                if (uVar12 < uVar17) {
                  uVar4 = uVar10 + 6;
                  param_3[uVar12] = param_3[uVar12 - uVar9];
                  if (uVar4 < uVar17) {
                    uVar12 = uVar10 + 7;
                    param_3[uVar4] = param_3[uVar4 - uVar9];
                    if (uVar12 < uVar17) {
                      uVar4 = uVar10 + 8;
                      param_3[uVar12] = param_3[uVar12 - uVar9];
                      if (uVar4 < uVar17) {
                        uVar12 = uVar10 + 9;
                        param_3[uVar4] = param_3[uVar4 - uVar9];
                        if (uVar12 < uVar17) {
                          uVar4 = uVar10 + 10;
                          param_3[uVar12] = param_3[uVar12 - uVar9];
                          if (uVar4 < uVar17) {
                            uVar12 = uVar10 + 0xb;
                            param_3[uVar4] = param_3[uVar4 - uVar9];
                            if (uVar12 < uVar17) {
                              uVar4 = uVar10 + 0xc;
                              param_3[uVar12] = param_3[uVar12 - uVar9];
                              if (uVar4 < uVar17) {
                                uVar12 = uVar10 + 0xd;
                                param_3[uVar4] = param_3[uVar4 - uVar9];
                                if (uVar12 < uVar17) {
                                  uVar10 = uVar10 + 0xe;
                                  param_3[uVar12] = param_3[uVar12 - uVar9];
                                  if (uVar10 < uVar17) {
                                    param_3[uVar10] = param_3[uVar10 - uVar9];
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0024b8ec:
  uVar9 = uVar17 * param_4;
  if (uVar17 < uVar9) {
    uVar12 = uVar9 - uVar17;
    if ((param_3 + uVar17 < param_3 + 0x10) || (uVar12 < 0x16)) {
      puVar5 = param_3 + uVar12;
      do {
        param_3[uVar17] = *param_3;
        param_3 = param_3 + 1;
      } while (param_3 != puVar5);
      return;
    }
    uVar4 = uVar12;
    if ((-(long)param_3 & 0xfU) < uVar12) {
      uVar4 = -(long)param_3 & 0xfU;
    }
    uVar10 = uVar17;
    if (uVar4 != 0) {
      param_3[uVar17] = *param_3;
      uVar10 = uVar17 + 1;
      if (uVar4 != 1) {
        param_3[uVar17 + 1] = param_3[1];
        uVar10 = uVar17 + 2;
        if (uVar4 != 2) {
          param_3[uVar17 + 2] = param_3[2];
          uVar10 = uVar17 + 3;
          if (uVar4 != 3) {
            param_3[uVar17 + 3] = param_3[3];
            uVar10 = uVar17 + 4;
            if (uVar4 != 4) {
              param_3[uVar17 + 4] = param_3[4];
              uVar10 = uVar17 + 5;
              if (uVar4 != 5) {
                param_3[uVar17 + 5] = param_3[5];
                uVar10 = uVar17 + 6;
                if (uVar4 != 6) {
                  param_3[uVar17 + 6] = param_3[6];
                  uVar10 = uVar17 + 7;
                  if (uVar4 != 7) {
                    param_3[uVar17 + 7] = param_3[7];
                    uVar10 = uVar17 + 8;
                    if (uVar4 != 8) {
                      param_3[uVar17 + 8] = param_3[8];
                      uVar10 = uVar17 + 9;
                      if (uVar4 != 9) {
                        param_3[uVar17 + 9] = param_3[9];
                        uVar10 = uVar17 + 10;
                        if (uVar4 != 10) {
                          param_3[uVar17 + 10] = param_3[10];
                          uVar10 = uVar17 + 0xb;
                          if (uVar4 != 0xb) {
                            param_3[uVar17 + 0xb] = param_3[0xb];
                            uVar10 = uVar17 + 0xc;
                            if (uVar4 != 0xc) {
                              param_3[uVar17 + 0xc] = param_3[0xc];
                              uVar10 = uVar17 + 0xd;
                              if (uVar4 != 0xd) {
                                param_3[uVar17 + 0xd] = param_3[0xd];
                                uVar10 = uVar17 + 0xe;
                                if (uVar4 == 0xf) {
                                  param_3[uVar17 + 0xe] = param_3[0xe];
                                  uVar10 = uVar17 + 0xf;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    uVar3 = ((uVar12 - uVar4) - 0x10 >> 4) + 1;
    lVar15 = uVar3 * 0x10;
    if (0xe < (uVar12 - 1) - uVar4) {
      uVar16 = 0;
      puVar11 = (undefined8 *)(param_3 + uVar4);
      puVar13 = (undefined8 *)(param_3 + uVar4 + uVar17);
      do {
        uVar18 = *puVar11;
        uVar16 = uVar16 + 1;
        puVar13[1] = puVar11[1];
        *puVar13 = uVar18;
        puVar11 = puVar11 + 2;
        puVar13 = puVar13 + 2;
      } while (uVar16 < uVar3);
      uVar10 = uVar10 + lVar15;
      if (uVar12 - uVar4 == lVar15) {
        return;
      }
    }
    uVar12 = uVar10 + 1;
    param_3[uVar10] = param_3[uVar10 - uVar17];
    if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
      uVar4 = uVar10 + 2;
      param_3[uVar12] = param_3[uVar12 - uVar17];
      if (uVar4 < uVar9) {
        uVar12 = uVar10 + 3;
        param_3[uVar4] = param_3[uVar4 - uVar17];
        if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
          uVar4 = uVar10 + 4;
          param_3[uVar12] = param_3[uVar12 - uVar17];
          if (uVar4 <= uVar9 && uVar9 - uVar4 != 0) {
            uVar12 = uVar10 + 5;
            param_3[uVar4] = param_3[uVar4 - uVar17];
            if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
              uVar4 = uVar10 + 6;
              param_3[uVar12] = param_3[uVar12 - uVar17];
              if (uVar4 <= uVar9 && uVar9 - uVar4 != 0) {
                uVar12 = uVar10 + 7;
                param_3[uVar4] = param_3[uVar4 - uVar17];
                if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
                  uVar4 = uVar10 + 8;
                  param_3[uVar12] = param_3[uVar12 - uVar17];
                  if (uVar4 <= uVar9 && uVar9 - uVar4 != 0) {
                    uVar12 = uVar10 + 9;
                    param_3[uVar4] = param_3[uVar4 - uVar17];
                    if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
                      uVar4 = uVar10 + 10;
                      param_3[uVar12] = param_3[uVar12 - uVar17];
                      if (uVar4 <= uVar9 && uVar9 - uVar4 != 0) {
                        uVar12 = uVar10 + 0xb;
                        param_3[uVar4] = param_3[uVar4 - uVar17];
                        if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
                          uVar4 = uVar10 + 0xc;
                          param_3[uVar12] = param_3[uVar12 - uVar17];
                          if (uVar4 <= uVar9 && uVar9 - uVar4 != 0) {
                            uVar12 = uVar10 + 0xd;
                            param_3[uVar4] = param_3[uVar4 - uVar17];
                            if (uVar12 <= uVar9 && uVar9 - uVar12 != 0) {
                              uVar10 = uVar10 + 0xe;
                              param_3[uVar12] = param_3[uVar12 - uVar17];
                              if (uVar10 <= uVar9 && uVar9 - uVar10 != 0) {
                                param_3[uVar10] = param_3[uVar10 - uVar17];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0024bcb4 (8272 bytes) name=FUN_0024bcb4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0024bcb4(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                 _InputArray *param_4,uint param_5,long param_6,char param_7,undefined8 param_8)

{
  ulong uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  undefined8 uVar9;
  uint uVar10;
  uint uVar11;
  bool bVar12;
  bool bVar13;
  bool bVar14;
  byte bVar15;
  char cVar16;
  byte bVar17;
  byte bVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  uint uVar26;
  ulong uVar27;
  ulong uVar28;
  char *pcVar29;
  void *pvVar30;
  undefined8 *puVar31;
  code *pcVar32;
  code *pcVar33;
  code *pcVar34;
  code *pcVar35;
  code *pcVar36;
  ulong uVar37;
  long lVar38;
  long lVar39;
  ulong uVar40;
  int *piVar41;
  undefined4 *puVar42;
  Mat *pMVar43;
  code *pcVar44;
  ulong uVar45;
  uint uVar46;
  long lVar47;
  uint uVar48;
  code *pcVar49;
  uint uVar50;
  code *pcVar51;
  uint uVar52;
  _InputArray *p_Var53;
  uint uVar54;
  ulong uVar55;
  uint uVar56;
  uint uVar57;
  code *pcVar58;
  code *local_6e0;
  code *local_6b8;
  code *local_6a0;
  code *local_698;
  code *local_690;
  code *local_680;
  NAryMatIterator *local_678;
  ulong local_670;
  Mat *local_668;
  Mat *local_660;
  Mat *local_658;
  Mat *local_650;
  Mat *local_648;
  undefined8 local_640;
  undefined8 local_638;
  long local_630;
  int local_628;
  undefined4 local_624;
  code *local_620;
  code *local_618;
  long local_610;
  long local_608;
  Mat *local_600;
  Mat *local_5f8;
  Mat *local_5f0;
  Mat *local_5e8;
  undefined8 local_5e0;
  NAryMatIterator aNStack_5d8 [32];
  ulong local_5b8;
  ulong local_5b0;
  undefined4 local_598;
  int local_594;
  undefined4 local_590;
  undefined4 local_58c;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  undefined4 *local_558;
  undefined8 *local_550;
  undefined8 local_548;
  undefined8 local_540;
  int local_538;
  int local_534;
  undefined4 local_530;
  undefined4 local_52c;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  undefined4 *local_4f8;
  undefined8 *local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  undefined8 local_4d8;
  int local_4d0;
  int local_4cc;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  uint local_478;
  int local_474;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  undefined8 *local_438;
  undefined8 *local_430;
  undefined8 local_428;
  undefined8 local_420;
  undefined8 local_418;
  undefined8 *local_410;
  long local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  long local_3e0;
  undefined8 **local_3d8;
  undefined8 *local_3d0;
  undefined8 local_3c8;
  undefined8 local_3c0;
  
  iVar19 = cv::_InputArray::kind(param_1);
  iVar20 = cv::_InputArray::kind(param_2);
  bVar15 = cv::_InputArray::empty(param_4);
  uVar27 = cv::_InputArray::type(param_1,-1);
  uVar52 = (uint)uVar27;
  uVar57 = ((uint)((uVar27 & 0xffffffff) >> 3) & 0x1ff) + 1;
  uVar46 = uVar52 & 7;
  uVar28 = cv::_InputArray::type(param_2,-1);
  uVar50 = (uint)uVar28;
  iVar21 = cv::_InputArray::dims(param_1,-1);
  uVar48 = ((uint)((uVar28 & 0xffffffff) >> 3) & 0x1ff) + 1;
  iVar22 = cv::_InputArray::dims(param_2,-1);
  iVar23 = (int)param_1;
  if (iVar21 < 3) {
    cv::_InputArray::size(iVar23);
  }
  else {
    local_640 = 0;
  }
  iVar24 = (int)param_2;
  if (iVar22 < 3) {
    cv::_InputArray::size(iVar24);
  }
  else {
    local_638 = 0;
  }
  iVar25 = cv::_InputArray::dims(param_1,-1);
  if ((iVar25 < 3) && (bVar18 = cv::_InputArray::isContinuous(param_1,-1), bVar18 != 0)) {
    cv::_InputArray::size(iVar23);
    if ((uint)local_418 == 1) {
      if (iVar19 != 0x20000 && iVar20 == 0x20000) goto LAB_0024bdd0;
      if (((local_418._4_4_ != 1) && (uVar48 != local_418._4_4_)) &&
         (bVar18 = 0, local_418._4_4_ == 4)) {
        iVar25 = cv::_InputArray::type(param_1,-1);
        bVar18 = iVar25 == 6 && uVar48 < 5;
      }
    }
    else {
      bVar18 = 0;
      if ((local_418._4_4_ == 1) && ((iVar19 == 0x20000 || (bVar18 = 0, iVar20 != 0x20000)))) {
        bVar18 = uVar48 == (uint)local_418;
      }
    }
  }
  else {
LAB_0024bdd0:
    bVar18 = 0;
  }
  iVar25 = cv::_InputArray::dims(param_2,-1);
  if ((iVar25 < 3) && (bVar17 = cv::_InputArray::isContinuous(param_2,-1), bVar17 != 0)) {
    cv::_InputArray::size(iVar24);
    if ((uint)local_418 == 1) {
      if (iVar20 != 0x20000 && iVar19 == 0x20000) goto LAB_0024bde8;
      if ((local_418._4_4_ != 1) && (uVar57 != local_418._4_4_)) {
        if (local_418._4_4_ == 4) {
          iVar25 = cv::_InputArray::type(param_2,-1);
          bVar17 = iVar25 == 6 && uVar57 < 5;
        }
        else {
          bVar17 = 0;
        }
      }
    }
    else {
      bVar17 = 0;
      if ((local_418._4_4_ == 1) && ((iVar20 == 0x20000 || (iVar19 != 0x20000)))) {
        bVar17 = uVar57 == (uint)local_418;
      }
    }
  }
  else {
LAB_0024bde8:
    bVar17 = 0;
  }
  if ((uVar57 == 1) || (iVar19 == iVar20)) {
    if ((int)local_640 != (int)local_638) {
LAB_0024be1c:
      iVar21 = cv::_InputArray::dims(param_1,-1);
      goto joined_r0x0024cc74;
    }
    if (local_640._4_4_ == local_638._4_4_) {
      if (((((iVar21 < 3) && (iVar22 < 3)) && (bVar15 != 0)) && (uVar52 == uVar50)) &&
         ((((cVar16 = cv::_OutputArray::fixedType(param_3), cVar16 == '\0' &&
            (((int)param_5 < 0 || (uVar46 == (param_5 & 7))))) ||
           ((cVar16 = cv::_OutputArray::fixedType(param_3), cVar16 != '\0' &&
            (uVar26 = cv::_InputArray::type((_InputArray *)param_3,-1), uVar52 == uVar26)))) &&
          (bVar18 != (bVar17 ^ 1))))) {
        cv::_OutputArray::createSameSize(param_3,param_1,uVar52);
        iVar19 = cv::_InputArray::kind(param_1);
        if (iVar19 == 0x10000) {
          pMVar43 = *(Mat **)(param_1 + 8);
          local_498 = &local_4d0;
          local_490 = &local_488;
          local_4c8 = *(undefined8 *)(pMVar43 + 0x10);
          local_4d8 = *(undefined8 *)pMVar43;
          local_4d0 = *(int *)(pMVar43 + 8);
          local_4cc = *(int *)(pMVar43 + 0xc);
          local_4c0 = *(undefined8 *)(pMVar43 + 0x18);
          local_4b8 = *(undefined8 *)(pMVar43 + 0x20);
          local_4b0 = *(undefined8 *)(pMVar43 + 0x28);
          local_4a8 = *(undefined8 *)(pMVar43 + 0x30);
          local_4a0 = *(long *)(pMVar43 + 0x38);
          local_480 = 0;
          local_488 = 0;
          if (local_4a0 != 0) {
            piVar41 = (int *)(local_4a0 + 0x14);
            do {
              cVar16 = '\x01';
              bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
              if (bVar14) {
                *piVar41 = *piVar41 + 1;
                cVar16 = ExclusiveMonitorsStatus();
              }
            } while (cVar16 != '\0');
          }
          if (2 < *(int *)(pMVar43 + 4)) {
                    /* WARNING: Ignoring partial resolution of indirect */
            local_4d8._4_4_ = 0;
            cv::Mat::copySize((Mat *)&local_4d8,pMVar43);
          }
        }
        else {
          cv::_InputArray::getMat_(iVar23);
        }
        local_658 = (Mat *)&local_4d8;
        iVar19 = cv::_InputArray::kind(param_2);
        if (iVar19 == 0x10000) {
          pMVar43 = *(Mat **)(param_2 + 8);
          local_438 = &local_470;
          local_430 = &local_428;
          local_478 = *(uint *)pMVar43;
          local_468 = *(undefined8 *)(pMVar43 + 0x10);
          local_474 = *(int *)(pMVar43 + 4);
          local_470 = *(undefined8 *)(pMVar43 + 8);
          local_460 = *(undefined8 *)(pMVar43 + 0x18);
          local_458 = *(undefined8 *)(pMVar43 + 0x20);
          local_450 = *(undefined8 *)(pMVar43 + 0x28);
          local_448 = *(undefined8 *)(pMVar43 + 0x30);
          local_440 = *(long *)(pMVar43 + 0x38);
          local_420 = 0;
          local_428 = 0;
          if (local_440 != 0) {
            piVar41 = (int *)(local_440 + 0x14);
            do {
              cVar16 = '\x01';
              bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
              if (bVar14) {
                *piVar41 = *piVar41 + 1;
                cVar16 = ExclusiveMonitorsStatus();
              }
            } while (cVar16 != '\0');
          }
          if (2 < *(int *)(pMVar43 + 4)) {
            local_474 = 0;
            cv::Mat::copySize((Mat *)&local_478,pMVar43);
          }
        }
        else {
          cv::_InputArray::getMat_(iVar24);
        }
        local_660 = (Mat *)&local_478;
        iVar19 = cv::_InputArray::kind((_InputArray *)param_3);
        if (iVar19 == 0x10000) {
          pMVar43 = *(Mat **)(param_3 + 8);
          local_3d8 = &local_410;
          local_3d0 = &local_3c8;
          local_408 = *(long *)(pMVar43 + 0x10);
          local_418 = *(code **)pMVar43;
          local_410 = *(undefined8 **)(pMVar43 + 8);
          local_400 = *(undefined8 *)(pMVar43 + 0x18);
          local_3f8 = *(undefined8 *)(pMVar43 + 0x20);
          local_3f0 = *(undefined8 *)(pMVar43 + 0x28);
          local_3e8 = *(undefined8 *)(pMVar43 + 0x30);
          local_3e0 = *(long *)(pMVar43 + 0x38);
          local_3c0 = 0;
          local_3c8 = 0;
          if (local_3e0 != 0) {
            piVar41 = (int *)(local_3e0 + 0x14);
            do {
              cVar16 = '\x01';
              bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
              if (bVar14) {
                *piVar41 = *piVar41 + 1;
                cVar16 = ExclusiveMonitorsStatus();
              }
            } while (cVar16 != '\0');
          }
          if (2 < *(int *)(pMVar43 + 4)) {
                    /* WARNING: Ignoring partial resolution of indirect */
            local_418._4_4_ = 0;
            cv::Mat::copySize((Mat *)&local_418,pMVar43);
          }
        }
        else {
          cv::_InputArray::getMat_((int)param_3);
        }
        local_668 = (Mat *)&local_418;
        iVar19 = ((uint)local_4d8 >> 3 & 0x1ff) + 1;
        if ((((uint)local_4d8 & local_478 & 0x4000 & (uint)local_418) == 0) ||
           (lVar39 = (long)local_4cc * (long)local_4d0 * (long)iVar19, local_538 = (int)lVar39,
           lVar39 - local_538 != 0)) {
          local_538 = iVar19 * local_4cc;
          local_534 = local_4d0;
        }
        else {
          local_534 = 1;
        }
        (**(code **)(param_6 + (long)(int)uVar46 * 8))
                  (local_4c8,local_488,local_468,local_428,local_408,local_3c8,&local_538,param_8);
        cv::Mat::release(local_668);
        if (local_3d0 != &local_3c8) {
          cv::fastFree(local_3d0);
        }
        cv::Mat::release(local_660);
        if (local_430 != &local_428) {
          cv::fastFree(local_430);
        }
        cv::Mat::release(local_658);
        puVar31 = local_490;
        if (local_490 == &local_488) {
          return;
        }
        goto LAB_0024c8d0;
      }
      goto LAB_0024be08;
    }
    if (iVar21 != iVar22) goto LAB_0024be1c;
LAB_0024bfb8:
    uVar26 = uVar50 & 7;
    if (((local_640._4_4_ != local_638._4_4_) || (uVar57 != uVar48)) ||
       ((((iVar19 == 0x20000 || (iVar20 == 0x20000)) && ((int)local_640 == 1)) &&
        ((local_640._4_4_ == 4 || (local_640._4_4_ == 1)))))) goto LAB_0024be1c;
    bVar14 = false;
    bVar12 = false;
    uVar48 = uVar57;
    uVar54 = uVar26;
LAB_0024c004:
    if (-1 < (int)param_5) goto LAB_0024c00c;
LAB_0024bf00:
    cVar16 = cv::_OutputArray::fixedType(param_3);
    if (cVar16 != '\0') {
      param_5 = cv::_InputArray::type((_InputArray *)param_3,-1);
      goto LAB_0024c00c;
    }
    param_5 = uVar46;
    if (bVar12 < (uVar50 != uVar52)) {
      local_418 = (code *)0x0;
      local_410 = (undefined8 *)0x0;
      pvVar30 = (void *)cv::String::allocate((String *)&local_418,0x88);
      memcpy(pvVar30,&DAT_00460900,0x88);
      cv::error(-5,(String *)&local_418,
                "void cv::arithm_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, int, void (**)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, void*, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x7db);
      cv::String::deallocate((String *)&local_418);
    }
LAB_0024c01c:
    uVar56 = param_5;
    if (uVar46 != uVar26) goto LAB_0024c028;
  }
  else {
LAB_0024be08:
    if (iVar21 != iVar22) goto LAB_0024be1c;
    if ((int)local_640 == (int)local_638) goto LAB_0024bfb8;
    iVar21 = cv::_InputArray::dims(param_1,-1);
joined_r0x0024cc74:
    if (iVar21 < 3) {
      uVar26 = uVar50 & 7;
      cVar16 = cv::_InputArray::isContinuous(param_1,-1);
      if (cVar16 == '\0') goto LAB_0024be30;
      cv::_InputArray::size(iVar23);
      if ((uint)local_418 != 1) {
        if ((local_418._4_4_ == 1) &&
           (((iVar19 == 0x20000 || (iVar20 != 0x20000)) && (uVar48 == (uint)local_418))))
        goto LAB_0024ccec;
        goto LAB_0024be30;
      }
      if (((iVar19 != 0x20000) && (iVar20 == 0x20000)) ||
         (((local_418._4_4_ != 1 && (uVar48 != local_418._4_4_)) &&
          (((local_418._4_4_ != 4 || (iVar21 = cv::_InputArray::type(param_1,-1), iVar21 != 6)) ||
           (4 < uVar48)))))) goto LAB_0024be30;
LAB_0024ccec:
      local_638 = local_640;
      bVar14 = true;
      p_Var53 = param_1;
      param_1 = param_2;
      uVar56 = uVar48;
      uVar48 = uVar57;
      uVar54 = uVar46;
      uVar10 = uVar50;
      uVar11 = uVar52;
      uVar57 = uVar50;
      uVar50 = uVar52;
      if (uVar52 == 6) goto LAB_0024cd38;
LAB_0024be5c:
      uVar50 = uVar11;
      uVar52 = uVar10;
      local_418 = (code *)0x0;
      local_410 = (undefined8 *)0x0;
      pcVar29 = (char *)cv::String::allocate((String *)&local_418,0x37);
      cVar16 = s_type2____CV_64F_____sz2_height___00460990[0x36];
      uVar8 = s_type2____CV_64F_____sz2_height___00460990._52_2_;
      uVar7 = s_type2____CV_64F_____sz2_height___00460990._40_8_;
      uVar6 = s_type2____CV_64F_____sz2_height___00460990._32_8_;
      uVar5 = s_type2____CV_64F_____sz2_height___00460990._24_8_;
      uVar4 = s_type2____CV_64F_____sz2_height___00460990._16_8_;
      uVar3 = s_type2____CV_64F_____sz2_height___00460990._8_8_;
      uVar2 = s_type2____CV_64F_____sz2_height___00460990._0_8_;
      *(undefined4 *)(pcVar29 + 0x30) = s_type2____CV_64F_____sz2_height___00460990._48_4_;
      *(undefined2 *)(pcVar29 + 0x34) = uVar8;
      pcVar29[0x36] = cVar16;
      *(undefined8 *)pcVar29 = uVar2;
      *(undefined8 *)(pcVar29 + 8) = uVar3;
      *(undefined8 *)(pcVar29 + 0x10) = uVar4;
      *(undefined8 *)(pcVar29 + 0x18) = uVar5;
      *(undefined8 *)(pcVar29 + 0x20) = uVar6;
      *(undefined8 *)(pcVar29 + 0x28) = uVar7;
      cv::error(-0xd7,(String *)&local_418,
                "void cv::arithm_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, int, void (**)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, void*, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x7c5);
      cv::String::deallocate((String *)&local_418);
      param_2 = p_Var53;
      uVar46 = uVar26;
      uVar57 = uVar56;
    }
    else {
LAB_0024be30:
      cVar16 = FUN_0024b388(param_2,uVar27 & 0xffffffff,iVar20,iVar19);
      if (cVar16 == '\0') {
        local_418 = (code *)0x0;
        local_410 = (undefined8 *)0x0;
        pvVar30 = (void *)cv::String::allocate((String *)&local_418,0x99);
        memcpy(pvVar30,&DAT_00460860,0x99);
        cv::error(-0xd1,(String *)&local_418,
                  "void cv::arithm_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, int, void (**)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, void*, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x7c3);
        cv::String::deallocate((String *)&local_418);
      }
      bVar14 = false;
      p_Var53 = param_2;
      uVar26 = uVar46;
      uVar56 = uVar57;
      uVar54 = uVar50 & 7;
      uVar10 = uVar52;
      uVar11 = uVar50;
      uVar57 = uVar52;
      if (uVar50 != 6) goto LAB_0024be5c;
LAB_0024cd38:
      uVar52 = uVar57;
      param_2 = p_Var53;
      uVar46 = uVar26;
      uVar57 = uVar56;
      if ((local_638._4_4_ != 4) && (uVar10 = uVar52, uVar11 = uVar50, local_638._4_4_ != 1))
      goto LAB_0024be5c;
    }
    if (param_7 == '\0') {
      iVar19 = cv::_InputArray::kind(param_2);
      if (iVar19 == 0x10000) {
        pMVar43 = *(Mat **)(param_2 + 8);
        local_3d8 = &local_410;
        local_3d0 = &local_3c8;
        local_408 = *(long *)(pMVar43 + 0x10);
        local_418 = *(code **)pMVar43;
        local_410 = *(undefined8 **)(pMVar43 + 8);
        local_400 = *(undefined8 *)(pMVar43 + 0x18);
        local_3f8 = *(undefined8 *)(pMVar43 + 0x20);
        local_3f0 = *(undefined8 *)(pMVar43 + 0x28);
        local_3e8 = *(undefined8 *)(pMVar43 + 0x30);
        local_3e0 = *(long *)(pMVar43 + 0x38);
        local_3c0 = 0;
        local_3c8 = 0;
        if (local_3e0 != 0) {
          piVar41 = (int *)(local_3e0 + 0x14);
          do {
            cVar16 = '\x01';
            bVar12 = (bool)ExclusiveMonitorPass(piVar41,0x10);
            if (bVar12) {
              *piVar41 = *piVar41 + 1;
              cVar16 = ExclusiveMonitorsStatus();
            }
          } while (cVar16 != '\0');
        }
        if (2 < *(int *)(pMVar43 + 4)) {
                    /* WARNING: Ignoring partial resolution of indirect */
          local_418._4_4_ = 0;
          cv::Mat::copySize((Mat *)&local_418,pMVar43);
        }
      }
      else {
        cv::_InputArray::getMat_((int)param_2);
      }
      lVar47 = local_408;
      local_668 = (Mat *)&local_418;
      lVar39 = 0;
      iVar20 = -0x80000000;
      iVar19 = 0x7fffffff;
      do {
        lVar38 = lrint(*(double *)(lVar47 + lVar39 * 8));
        iVar21 = (int)lVar38;
        if ((double)iVar21 != *(double *)(lVar47 + lVar39 * 8)) {
          if ((int)lVar39 < (int)uVar57) {
            if ((uVar46 == 5) || (uVar46 < 4)) {
              uVar26 = 5;
            }
            else {
              uVar26 = 6;
            }
            goto LAB_0024d6e8;
          }
          break;
        }
        lVar39 = lVar39 + 1;
        if (iVar21 < iVar19) {
          iVar19 = iVar21;
        }
        if (iVar20 < iVar21) {
          iVar20 = iVar21;
        }
      } while ((int)lVar39 < (int)uVar57);
      if (((((0xff < iVar20) || (uVar26 = 0, iVar19 < 0)) &&
           ((0x7f < iVar20 || (uVar26 = 1, iVar19 < -0x80)))) &&
          ((0xffff < iVar20 || (uVar26 = 2, iVar19 < 0)))) &&
         ((0x7fff < iVar20 || (uVar26 = 3, iVar19 < -0x8000)))) {
        uVar26 = 4;
      }
LAB_0024d6e8:
      cv::Mat::release(local_668);
      if (local_3d0 != &local_3c8) {
        cv::fastFree(local_3d0);
      }
      bVar12 = true;
      goto LAB_0024c004;
    }
    uVar26 = 6;
    bVar12 = true;
    if ((int)param_5 < 0) goto LAB_0024bf00;
LAB_0024c00c:
    param_5 = param_5 & 7;
    if (uVar46 == param_5) goto LAB_0024c01c;
LAB_0024c028:
    if (param_7 == '\0') {
      if (uVar46 < 2) {
        uVar56 = 3;
        if (1 < uVar26) goto LAB_0024d5d8;
      }
      else if (uVar46 < 5) {
LAB_0024d5d8:
        uVar56 = uVar26;
        if (uVar26 < 5) {
          uVar56 = param_5;
          if (param_5 < 4) {
            uVar56 = 4;
          }
          if (param_5 < 5) {
            uVar56 = 4;
          }
          goto LAB_0024c068;
        }
      }
      else {
        uVar56 = uVar46;
        if (uVar46 < uVar26) {
          uVar56 = uVar26;
        }
      }
      if (uVar56 < param_5) {
        uVar56 = param_5;
      }
      if ((param_5 < 5) && ((uVar46 < 5 || (uVar26 < 5)))) {
        uVar56 = 4;
      }
    }
    else {
      if (uVar26 < 5) {
        uVar26 = 5;
      }
      uVar56 = param_5;
      if (param_5 < uVar46) {
        uVar56 = uVar46;
      }
      if (uVar56 < uVar26) {
        uVar56 = uVar26;
      }
    }
  }
LAB_0024c068:
  iVar19 = (uVar57 - 1) * 8;
  bVar18 = bVar15 ^ 1;
  param_5 = iVar19 + param_5;
  uVar56 = iVar19 + uVar56;
  if (bVar15 == 1) {
LAB_0024d1d4:
    cv::_OutputArray::createSameSize(param_3,param_1,param_5);
  }
  else {
    uVar26 = cv::_InputArray::type(param_4,-1);
    if ((1 < uVar26) || (cVar16 = cv::_InputArray::sameSize(param_4,param_1), cVar16 == '\0')) {
      local_418 = (code *)0x0;
      local_410 = (undefined8 *)0x0;
      puVar31 = (undefined8 *)cv::String::allocate((String *)&local_418,0x40);
      uVar9 = s___psrc1__00460a00._0_8_;
      uVar7 = _LAB_004609f8;
      uVar6 = _DAT_004609f0;
      uVar5 = DAT_004609e8;
      uVar4 = _LAB_004609e0;
      uVar3 = DAT_004609d8;
      uVar2 = DAT_004609d0;
      *puVar31 = DAT_004609c8;
      puVar31[1] = uVar2;
      puVar31[2] = uVar3;
      puVar31[3] = uVar4;
      puVar31[4] = uVar5;
      puVar31[5] = uVar6;
      puVar31[6] = uVar7;
      puVar31[7] = uVar9;
      cv::error(-0xd7,(String *)&local_418,
                "void cv::arithm_op(cv::InputArray, cv::InputArray, cv::OutputArray, cv::InputArray, int, void (**)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, void*, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x7fb);
      cv::String::deallocate((String *)&local_418);
    }
    cVar16 = cv::_InputArray::sameSize((_InputArray *)param_3,param_1);
    if ((cVar16 != '\0') &&
       (uVar26 = cv::_InputArray::type((_InputArray *)param_3,-1), param_5 == uVar26))
    goto LAB_0024d1d4;
    cv::_OutputArray::createSameSize(param_3,param_1,param_5);
    local_410 = &local_4d8;
    local_4d8 = 0;
    local_418 = (code *)CONCAT44(local_418._4_4_,0xc1020006);
    local_408 = 0x100000001;
    local_468 = 0;
    local_478 = 0;
    local_470 = 0;
    cv::_OutputArray::setTo(param_3,(_InputArray *)&local_418,(_InputArray *)&local_478);
  }
  pcVar58 = (code *)0x0;
  if (uVar52 != uVar56) {
    pcVar58 = (code *)FUN_00283fe0(uVar52,uVar56);
  }
  local_690 = pcVar58;
  if ((uVar50 != uVar52) && (local_690 = (code *)0x0, uVar50 != uVar56)) {
    local_690 = (code *)FUN_00283fe0(uVar50,uVar56);
  }
  local_6b8 = (code *)0x0;
  if (param_5 != uVar56) {
    local_6b8 = (code *)FUN_00283fe0(uVar56,param_5);
  }
  local_630 = (long)(int)((param_5 >> 3 & 0x1ff) + 1 <<
                         (ulong)((uint)(0xfa50L >> ((param_5 & 7) << 1)) & 3));
  lVar39 = (long)(int)(uVar57 << (ulong)((uint)(0xfa50L >> (uVar46 << 1)) & 3));
  uVar28 = (ulong)(int)((uVar56 >> 3 & 0x1ff) + 1 <<
                       (ulong)((uint)(0xfa50L >> (ulong)((uVar56 & 7) << 1)) & 3));
  uVar27 = 0;
  if (uVar28 != 0) {
    uVar27 = (uVar28 + 0x3ff) / uVar28;
  }
  pcVar32 = (code *)FUN_0028cd18();
  iVar19 = cv::_InputArray::kind(param_1);
  if (iVar19 == 0x10000) {
    pMVar43 = *(Mat **)(param_1 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(undefined4 *)pMVar43;
    local_594 = *(int *)(pMVar43 + 4);
    local_590 = *(undefined4 *)(pMVar43 + 8);
    local_58c = *(undefined4 *)(pMVar43 + 0xc);
    local_588 = *(undefined8 *)(pMVar43 + 0x10);
    local_580 = *(undefined8 *)(pMVar43 + 0x18);
    local_578 = *(undefined8 *)(pMVar43 + 0x20);
    local_570 = *(undefined8 *)(pMVar43 + 0x28);
    local_568 = *(undefined8 *)(pMVar43 + 0x30);
    local_560 = *(long *)(pMVar43 + 0x38);
    local_540 = 0;
    local_548 = 0;
    if (local_560 != 0) {
      piVar41 = (int *)(local_560 + 0x14);
      do {
        cVar16 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar41,0x10);
        if (bVar13) {
          *piVar41 = *piVar41 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar43 + 4)) {
      local_594 = 0;
      cv::Mat::copySize((Mat *)&local_598,pMVar43);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  local_650 = (Mat *)&local_598;
  iVar19 = cv::_InputArray::kind(param_2);
  if (iVar19 == 0x10000) {
    pMVar43 = *(Mat **)(param_2 + 8);
    local_4f8 = &local_530;
    local_4f0 = &local_4e8;
    local_538 = *(int *)pMVar43;
    local_528 = *(undefined8 *)(pMVar43 + 0x10);
    local_534 = *(int *)(pMVar43 + 4);
    local_530 = *(undefined4 *)(pMVar43 + 8);
    local_52c = *(undefined4 *)(pMVar43 + 0xc);
    local_520 = *(undefined8 *)(pMVar43 + 0x18);
    local_518 = *(undefined8 *)(pMVar43 + 0x20);
    local_510 = *(undefined8 *)(pMVar43 + 0x28);
    local_508 = *(undefined8 *)(pMVar43 + 0x30);
    local_500 = *(long *)(pMVar43 + 0x38);
    local_4e0 = 0;
    local_4e8 = 0;
    if (local_500 != 0) {
      piVar41 = (int *)(local_500 + 0x14);
      do {
        cVar16 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar41,0x10);
        if (bVar13) {
          *piVar41 = *piVar41 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar43 + 4)) {
      local_534 = 0;
      cv::Mat::copySize((Mat *)&local_538,pMVar43);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_2);
  }
  local_648 = (Mat *)&local_538;
  iVar19 = cv::_InputArray::kind((_InputArray *)param_3);
  if (iVar19 == 0x10000) {
    pMVar43 = *(Mat **)(param_3 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4c8 = *(undefined8 *)(pMVar43 + 0x10);
    local_4d8 = *(undefined8 *)pMVar43;
    local_4d0 = *(int *)(pMVar43 + 8);
    local_4cc = *(int *)(pMVar43 + 0xc);
    local_4c0 = *(undefined8 *)(pMVar43 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar43 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar43 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar43 + 0x30);
    local_4a0 = *(long *)(pMVar43 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar41 = (int *)(local_4a0 + 0x14);
      do {
        cVar16 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar41,0x10);
        if (bVar13) {
          *piVar41 = *piVar41 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar43 + 4)) {
                    /* WARNING: Ignoring partial resolution of indirect */
      local_4d8._4_4_ = 0;
      cv::Mat::copySize((Mat *)&local_4d8,pMVar43);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_3);
  }
  local_658 = (Mat *)&local_4d8;
  iVar19 = cv::_InputArray::kind(param_4);
  if (iVar19 == 0x10000) {
    local_438 = &local_470;
    local_430 = &local_428;
    pMVar43 = *(Mat **)(param_4 + 8);
    local_478 = *(uint *)pMVar43;
    local_468 = *(undefined8 *)(pMVar43 + 0x10);
    local_474 = *(int *)(pMVar43 + 4);
    local_470 = *(undefined8 *)(pMVar43 + 8);
    local_460 = *(undefined8 *)(pMVar43 + 0x18);
    local_458 = *(undefined8 *)(pMVar43 + 0x20);
    local_450 = *(undefined8 *)(pMVar43 + 0x28);
    local_448 = *(undefined8 *)(pMVar43 + 0x30);
    local_440 = *(long *)(pMVar43 + 0x38);
    local_420 = 0;
    local_428 = 0;
    if (local_440 != 0) {
      piVar41 = (int *)(local_440 + 0x14);
      do {
        cVar16 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar41,0x10);
        if (bVar13) {
          *piVar41 = *piVar41 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar43 + 4)) {
      local_474 = 0;
      cv::Mat::copySize((Mat *)&local_478,pMVar43);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_4);
  }
  local_660 = (Mat *)&local_478;
  uVar45 = uVar28;
  if (pcVar58 == (code *)0x0) {
    uVar45 = 0;
  }
  bVar13 = local_690 != (code *)0x0;
  local_418 = (code *)&local_408;
  local_410 = (undefined8 *)0x408;
  if ((bVar13) || (uVar40 = 0, bVar12)) {
    uVar40 = uVar28;
  }
  uVar55 = uVar28;
  if (local_6b8 == (code *)0x0) {
    uVar55 = 0;
  }
  lVar47 = 0;
  if (bVar18 != 0) {
    lVar47 = local_630;
  }
  lVar47 = uVar40 + uVar45 + uVar55 + lVar47;
  pcVar33 = *(code **)(param_6 + ((ulong)uVar56 & 7) * 8);
  if (bVar12) {
    local_600 = local_650;
    local_5f8 = local_658;
    local_5e8 = (Mat *)0x0;
    local_5f0 = local_660;
    cv::NAryMatIterator::NAryMatIterator(aNStack_5d8,&local_600,(uchar **)&local_620,-1);
    if (local_5b0 < uVar27) {
      uVar27 = local_5b0;
    }
    puVar31 = (undefined8 *)(lVar47 * uVar27 + 0x40);
    if (local_410 < puVar31) {
      if (local_418 != (code *)&local_408) {
        if (local_418 != (code *)0x0) {
          operator_delete__(local_418);
        }
        local_418 = (code *)&local_408;
        local_410 = (undefined8 *)0x408;
      }
      pcVar34 = (code *)&local_408;
      if ((undefined8 *)0x408 < puVar31) {
        pcVar34 = operator_new__((ulong)puVar31);
        local_418 = pcVar34;
        local_410 = puVar31;
      }
      pcVar49 = pcVar34;
      if (pcVar58 == (code *)0x0) goto LAB_0024d574;
LAB_0024cf2c:
      pcVar34 = (code *)((ulong)(pcVar49 + uVar27 * uVar28 + 0xf) & 0xfffffffffffffff0);
      pcVar51 = pcVar34 + uVar27 * uVar28 + 0xf;
    }
    else {
      pcVar34 = local_418;
      pcVar49 = local_418;
      local_410 = puVar31;
      if (pcVar58 != (code *)0x0) goto LAB_0024cf2c;
LAB_0024d574:
      pcVar51 = pcVar34 + uVar27 * uVar28 + 0xf;
      pcVar49 = pcVar58;
    }
    uVar40 = (ulong)pcVar51 & 0xfffffffffffffff0;
    uVar45 = uVar40;
    if (local_6b8 != (code *)0x0) {
      uVar45 = uVar40 + uVar27 * uVar28 + 0xf & 0xfffffffffffffff0;
    }
    local_678 = aNStack_5d8;
    if (bVar18 == 0) {
      uVar45 = uVar40;
    }
    FUN_0024b4c4(local_648,uVar56,pcVar34,uVar27);
    local_6a0 = (code *)0x0;
    while (local_6a0 < local_5b8) {
      uVar28 = local_5b0;
      uVar55 = uVar27;
      if (local_5b0 != 0) {
        do {
          pcVar51 = local_618;
          uVar1 = uVar28;
          if (uVar27 < uVar28) {
            uVar1 = uVar27;
          }
          iVar19 = uVar57 * (int)uVar1;
          pcVar35 = local_620;
          if (pcVar58 != (code *)0x0) {
            local_624 = 1;
            local_628 = iVar19;
            (*pcVar58)();
            pcVar35 = pcVar49;
          }
          pcVar36 = pcVar35;
          pcVar44 = pcVar34;
          if (bVar14) {
            pcVar36 = pcVar34;
            pcVar44 = pcVar35;
          }
          if ((local_6b8 == (code *)0x0 & bVar15) == 0) {
            local_624 = 1;
            local_628 = iVar19;
            (*pcVar33)();
            if (bVar15 == 0) {
              uVar37 = uVar40;
              if (local_6b8 != (code *)0x0) {
                local_624 = 1;
                local_628 = iVar19;
                (*local_6b8)(uVar40,1,0,1,uVar45,1,&local_628,0);
                uVar37 = uVar45;
              }
              local_624 = 1;
              local_628 = (int)uVar1;
              (*pcVar32)(uVar37,1,local_610,1,pcVar51,1,&local_628,&local_630);
              local_610 = local_610 + uVar1;
            }
            else {
              local_624 = 1;
              local_628 = iVar19;
              (*local_6b8)(uVar40,1,0,1,pcVar51,1,&local_628,0);
            }
          }
          else {
            local_624 = 1;
            local_628 = iVar19;
            (*pcVar33)(pcVar36,1,pcVar44,1,pcVar51,1,&local_628,param_8);
          }
          local_620 = local_620 + uVar1 * lVar39;
          local_618 = local_618 + uVar1 * local_630;
          bVar12 = uVar55 < local_5b0;
          uVar28 = uVar28 - uVar27;
          uVar55 = uVar55 + uVar27;
        } while (bVar12);
      }
      local_6a0 = (code *)((long)local_6a0 + 1);
      cv::NAryMatIterator::operator++(local_678);
    }
  }
  else {
    local_600 = local_650;
    local_5f8 = local_648;
    local_5f0 = local_658;
    local_5e0 = 0;
    local_5e8 = local_660;
    cv::NAryMatIterator::NAryMatIterator(aNStack_5d8,&local_600,(uchar **)&local_620,-1);
    bVar14 = pcVar58 != (code *)0x0;
    if (((bVar15 <= bVar14) || (bVar13)) || (local_6b8 != (code *)0x0)) {
      if (local_5b0 < uVar27) {
        uVar27 = local_5b0;
      }
      puVar31 = (undefined8 *)(uVar27 * lVar47 + 0x40);
      if (local_410 < puVar31) goto LAB_0024c424;
LAB_0024d384:
      local_6a0 = local_418;
      local_410 = puVar31;
      if (bVar14) goto LAB_0024c46c;
LAB_0024d39c:
      local_698 = local_6a0;
      local_6a0 = (code *)0x0;
      if (bVar13) goto LAB_0024c488;
LAB_0024d3b0:
      local_6e0 = local_698;
      local_698 = (code *)0x0;
      if (local_6b8 != (code *)0x0) goto LAB_0024c4a4;
LAB_0024d3c4:
      local_680 = local_6e0;
    }
    else {
      puVar31 = (undefined8 *)(local_5b0 * lVar47 + 0x40);
      uVar27 = local_5b0;
      if (puVar31 <= local_410) goto LAB_0024d384;
LAB_0024c424:
      if (local_418 != (code *)&local_408) {
        if (local_418 != (code *)0x0) {
          operator_delete__(local_418);
        }
        local_418 = (code *)&local_408;
        local_410 = (undefined8 *)0x408;
      }
      local_6a0 = (code *)&local_408;
      if ((undefined8 *)0x408 < puVar31) {
        local_6a0 = operator_new__((ulong)puVar31);
        local_418 = local_6a0;
        local_410 = puVar31;
      }
      if (!bVar14) goto LAB_0024d39c;
LAB_0024c46c:
      local_698 = (code *)((ulong)(local_6a0 + uVar27 * uVar28 + 0xf) & 0xfffffffffffffff0);
      if (!bVar13) goto LAB_0024d3b0;
LAB_0024c488:
      local_6e0 = (code *)((ulong)(local_698 + uVar27 * uVar28 + 0xf) & 0xfffffffffffffff0);
      if (local_6b8 == (code *)0x0) goto LAB_0024d3c4;
LAB_0024c4a4:
      local_680 = (code *)((ulong)(local_6e0 + uVar27 * uVar28 + 0xf) & 0xfffffffffffffff0);
    }
    local_670 = 0;
    if (bVar18 == 0) {
      local_680 = local_6e0;
    }
    if (local_5b8 != 0) {
      do {
        uVar28 = local_5b0;
        uVar45 = uVar27;
        if (local_5b0 != 0) {
          do {
            lVar47 = local_610;
            pcVar34 = local_618;
            uVar40 = uVar27;
            if (uVar28 < uVar27) {
              uVar40 = uVar28;
            }
            iVar20 = (int)uVar40;
            iVar19 = uVar57 * iVar20;
            if (bVar14) {
              local_624 = 1;
              local_628 = iVar19;
              (*pcVar58)(local_620,1,0,1,local_6a0,1,&local_628,0);
              pcVar49 = local_6a0;
              pcVar51 = local_6a0;
              if (local_620 != local_618) {
LAB_0024c5b0:
                pcVar51 = pcVar34;
                if (bVar13) {
                  local_624 = 1;
                  local_628 = iVar19;
                  (*local_690)(pcVar34,1,0,1,local_698,1,&local_628,0);
                  pcVar51 = local_698;
                }
              }
            }
            else {
              pcVar49 = local_620;
              pcVar51 = local_620;
              if (local_620 != local_618) goto LAB_0024c5b0;
            }
            local_624 = 1;
            if ((local_6b8 == (code *)0x0 & bVar15) == 0) {
              local_628 = iVar19;
              (*pcVar33)(pcVar49,1,pcVar51,1,local_6e0,0,&local_628,param_8);
              if (bVar15 == 0) {
                pcVar34 = local_6e0;
                if (local_6b8 != (code *)0x0) {
                  local_624 = 1;
                  local_628 = iVar19;
                  (*local_6b8)(local_6e0,1,0,1,local_680,1,&local_628,0);
                  pcVar34 = local_680;
                }
                local_624 = 1;
                local_628 = iVar20;
                (*pcVar32)(pcVar34,1,local_608,1,lVar47,1,&local_628,&local_630);
                local_608 = local_608 + iVar20;
              }
              else {
                local_624 = 1;
                local_628 = iVar19;
                (*local_6b8)(local_6e0,1,0,1,lVar47,1,&local_628,0);
              }
            }
            else {
              local_628 = iVar19;
              (*pcVar33)(pcVar49,1,pcVar51,1,lVar47,1,&local_628,param_8);
            }
            lVar47 = (long)iVar20;
            local_610 = local_610 + lVar47 * local_630;
            local_620 = local_620 + lVar47 * lVar39;
            local_618 = local_618 +
                        lVar47 * (int)(uVar48 << (ulong)((uint)(0xfa50L >> (uVar54 << 1)) & 3));
            bVar12 = uVar45 < local_5b0;
            uVar28 = uVar28 - uVar27;
            uVar45 = uVar45 + uVar27;
          } while (bVar12);
        }
        local_670 = local_670 + 1;
        cv::NAryMatIterator::operator++(aNStack_5d8);
      } while (local_670 < local_5b8);
    }
  }
  if ((local_418 != (code *)&local_408) && (local_418 != (code *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_440 != 0) {
    piVar41 = (int *)(local_440 + 0x14);
    do {
      iVar19 = *piVar41;
      cVar16 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
      if (bVar14) {
        *piVar41 = iVar19 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar19 == 1) {
      cv::Mat::deallocate(local_660);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar19 = 0;
    puVar31 = local_438;
    do {
      iVar19 = iVar19 + 1;
      *(undefined4 *)puVar31 = 0;
      puVar31 = (undefined8 *)((long)puVar31 + 4);
    } while (iVar19 < local_474);
  }
  if (local_430 != &local_428) {
    cv::fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar41 = (int *)(local_4a0 + 0x14);
    do {
      iVar19 = *piVar41;
      cVar16 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
      if (bVar14) {
        *piVar41 = iVar19 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar19 == 1) {
      cv::Mat::deallocate(local_658);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d8._4_4_) {
    iVar19 = 0;
    piVar41 = local_498;
    do {
      iVar19 = iVar19 + 1;
      *piVar41 = 0;
      piVar41 = piVar41 + 1;
    } while (iVar19 < local_4d8._4_4_);
  }
  if (local_490 != &local_488) {
    cv::fastFree(local_490);
  }
  if (local_500 != 0) {
    piVar41 = (int *)(local_500 + 0x14);
    do {
      iVar19 = *piVar41;
      cVar16 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
      if (bVar14) {
        *piVar41 = iVar19 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar19 == 1) {
      cv::Mat::deallocate(local_648);
    }
  }
  local_500 = 0;
  local_528 = 0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_534) {
    iVar19 = 0;
    puVar42 = local_4f8;
    do {
      iVar19 = iVar19 + 1;
      *puVar42 = 0;
      puVar42 = puVar42 + 1;
    } while (iVar19 < local_534);
  }
  if (local_4f0 != &local_4e8) {
    cv::fastFree(local_4f0);
  }
  if (local_560 != 0) {
    piVar41 = (int *)(local_560 + 0x14);
    do {
      iVar19 = *piVar41;
      cVar16 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar41,0x10);
      if (bVar14) {
        *piVar41 = iVar19 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar19 == 1) {
      cv::Mat::deallocate(local_650);
    }
  }
  local_560 = 0;
  local_588 = 0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar19 = 0;
    puVar42 = local_558;
    do {
      iVar19 = iVar19 + 1;
      *puVar42 = 0;
      puVar42 = puVar42 + 1;
    } while (iVar19 < local_594);
  }
  puVar31 = local_550;
  if (local_550 == &local_548) {
    return;
  }
LAB_0024c8d0:
  cv::fastFree(puVar31);
  return;
}


==================================================================

### FUNC 0024deac (48 bytes) name=bitwise_and

/* cv::bitwise_and(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_InputArray const&) */

void cv::bitwise_and(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _InputArray *param_4)

{
  FUN_00249298();
  return;
}


==================================================================

### FUNC 0024dedc (48 bytes) name=bitwise_or

/* cv::bitwise_or(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_InputArray const&) */

void cv::bitwise_or(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                   _InputArray *param_4)

{
  FUN_00249298();
  return;
}


==================================================================

### FUNC 0024df0c (48 bytes) name=bitwise_xor

/* cv::bitwise_xor(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_InputArray const&) */

void cv::bitwise_xor(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _InputArray *param_4)

{
  FUN_00249298();
  return;
}


==================================================================

### FUNC 0024df3c (64 bytes) name=bitwise_not

/* cv::bitwise_not(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) */

void cv::bitwise_not(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  code *local_8;
  
  local_8 = FUN_002330a8;
  FUN_00249298(param_1,param_1,param_2,param_3,&local_8,1,0xc);
  return;
}


==================================================================

### FUNC 0024df7c (68 bytes) name=max

/* cv::max(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::max(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  undefined8 uVar1;
  
  uVar1 = noArray();
  FUN_00249298(param_1,param_2,param_3,uVar1,&PTR_FUN_00509200,0,0xe);
  return;
}


==================================================================

### FUNC 0024dfc0 (68 bytes) name=min

/* cv::min(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::min(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  undefined8 uVar1;
  
  uVar1 = noArray();
  FUN_00249298(param_1,param_2,param_3,uVar1,&PTR_FUN_00509240,0,0xd);
  return;
}


==================================================================

### FUNC 0024e004 (116 bytes) name=max

/* cv::max(cv::Mat const&, cv::Mat const&, cv::Mat&) */

void cv::max(Mat *param_1,Mat *param_2,Mat *param_3)

{
  undefined8 uVar1;
  undefined4 local_48 [2];
  Mat *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  Mat *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  Mat *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_48[0] = 0x2010000;
  local_30[0] = 0x1010000;
  local_18[0] = 0x1010000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_40 = param_3;
  local_28 = param_1;
  local_10 = param_2;
  uVar1 = noArray();
  FUN_00249298(local_30,local_18,local_48,uVar1,&PTR_FUN_00509200,0,0xe);
  return;
}


==================================================================

### FUNC 0024e078 (116 bytes) name=min

/* cv::min(cv::Mat const&, cv::Mat const&, cv::Mat&) */

void cv::min(Mat *param_1,Mat *param_2,Mat *param_3)

{
  undefined8 uVar1;
  undefined4 local_48 [2];
  Mat *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  Mat *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  Mat *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_48[0] = 0x2010000;
  local_30[0] = 0x1010000;
  local_18[0] = 0x1010000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_40 = param_3;
  local_28 = param_1;
  local_10 = param_2;
  uVar1 = noArray();
  FUN_00249298(local_30,local_18,local_48,uVar1,&PTR_FUN_00509240,0,0xd);
  return;
}


==================================================================

### FUNC 0024e0ec (116 bytes) name=max

/* cv::max(cv::UMat const&, cv::UMat const&, cv::UMat&) */

void cv::max(UMat *param_1,UMat *param_2,UMat *param_3)

{
  undefined8 uVar1;
  undefined4 local_48 [2];
  UMat *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  UMat *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  UMat *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_48[0] = 0x20a0000;
  local_30[0] = 0x10a0000;
  local_18[0] = 0x10a0000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_40 = param_3;
  local_28 = param_1;
  local_10 = param_2;
  uVar1 = noArray();
  FUN_00249298(local_30,local_18,local_48,uVar1,&PTR_FUN_00509200,0,0xe);
  return;
}


==================================================================

### FUNC 0024e160 (116 bytes) name=min

/* cv::min(cv::UMat const&, cv::UMat const&, cv::UMat&) */

void cv::min(UMat *param_1,UMat *param_2,UMat *param_3)

{
  undefined8 uVar1;
  undefined4 local_48 [2];
  UMat *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  UMat *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  UMat *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_48[0] = 0x20a0000;
  local_30[0] = 0x10a0000;
  local_18[0] = 0x10a0000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_40 = param_3;
  local_28 = param_1;
  local_10 = param_2;
  uVar1 = noArray();
  FUN_00249298(local_30,local_18,local_48,uVar1,&PTR_FUN_00509240,0,0xd);
  return;
}


==================================================================

### FUNC 0024e1d4 (20 bytes) name=add

/* cv::add(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray
   const&, int) */

void cv::add(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,_InputArray *param_4,
            int param_5)

{
  FUN_0024bcb4();
  return;
}


==================================================================

### FUNC 0024e1e8 (20 bytes) name=subtract

/* cv::subtract(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_InputArray const&, int) */

void cv::subtract(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                 _InputArray *param_4,int param_5)

{
  FUN_0024bcb4();
  return;
}


==================================================================

### FUNC 0024e1fc (72 bytes) name=absdiff

/* cv::absdiff(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::absdiff(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  undefined8 uVar1;
  
  uVar1 = noArray();
  FUN_0024bcb4(param_1,param_2,param_3,uVar1,0xffffffff,&PTR_FUN_00509180,0,0);
  return;
}


==================================================================

### FUNC 0024e244 (100 bytes) name=multiply

/* cv::multiply(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, double,
   int) */

void cv::multiply(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,double param_4,
                 int param_5)

{
  undefined8 uVar1;
  double local_8;
  
  local_8 = param_4;
  uVar1 = noArray();
  FUN_0024bcb4(param_1,param_2,param_3,uVar1,param_5,&PTR_FUN_005091c0,1,&local_8);
  return;
}


==================================================================

### FUNC 0024e2a8 (100 bytes) name=divide

/* cv::divide(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, double, int)
    */

void cv::divide(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,double param_4,
               int param_5)

{
  undefined8 uVar1;
  double local_8;
  
  local_8 = param_4;
  uVar1 = noArray();
  FUN_0024bcb4(param_1,param_2,param_3,uVar1,param_5,&PTR_FUN_005090c0,1,&local_8);
  return;
}


==================================================================

### FUNC 0024e30c (104 bytes) name=divide

/* cv::divide(double, cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::divide(double param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  undefined8 uVar1;
  double local_8;
  
  local_8 = param_1;
  uVar1 = noArray();
  FUN_0024bcb4(param_2,param_2,param_3,uVar1,param_4,&PTR_FUN_00509100,1,&local_8);
  return;
}


==================================================================

### FUNC 0024e374 (96 bytes) name=addWeighted

/* cv::addWeighted(cv::_InputArray const&, double, cv::_InputArray const&, double, double,
   cv::_OutputArray const&, int) */

void cv::addWeighted(_InputArray *param_1,double param_2,_InputArray *param_3,double param_4,
                    double param_5,_OutputArray *param_6,int param_7)

{
  undefined8 uVar1;
  double local_18;
  double local_10;
  double local_8;
  
  local_18 = param_2;
  local_10 = param_4;
  local_8 = param_5;
  uVar1 = noArray();
  FUN_0024bcb4(param_1,param_3,param_6,uVar1,param_7,&PTR_FUN_00509040,1,&local_18);
  return;
}


==================================================================

### FUNC 0024e3e0 (7368 bytes) name=compare

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::compare(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::compare(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  ulong uVar1;
  ulong uVar2;
  long lVar3;
  uint uVar4;
  uint uVar5;
  bool bVar6;
  bool bVar7;
  ulong uVar8;
  uint uVar9;
  ulong uVar10;
  char cVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  void *pvVar15;
  ulong uVar16;
  int *piVar17;
  ulong *puVar18;
  ulong uVar19;
  undefined8 *puVar20;
  code *pcVar21;
  char *pcVar22;
  ulong uVar23;
  ulong uVar24;
  undefined8 *puVar25;
  Mat *pMVar26;
  Mat **ppMVar27;
  ulong uVar28;
  long lVar29;
  undefined8 *puVar30;
  ulong uVar31;
  code *pcVar32;
  undefined8 uVar33;
  int local_694 [3];
  int local_688 [2];
  uchar *local_680;
  long local_678;
  double local_670 [2];
  uint local_660;
  int local_65c;
  int local_658;
  int local_654;
  undefined8 local_650;
  undefined8 uStack_648;
  undefined8 local_640;
  undefined8 uStack_638;
  undefined8 local_630;
  long lStack_628;
  int *local_620;
  undefined8 *local_618;
  undefined8 local_610;
  undefined8 local_608;
  uint local_600;
  int local_5fc;
  int local_5f8;
  int local_5f4;
  undefined8 local_5f0;
  undefined8 uStack_5e8;
  ulong local_5e0;
  ulong uStack_5d8;
  undefined8 local_5d0;
  long lStack_5c8;
  int *local_5c0;
  undefined8 *local_5b8;
  undefined8 local_5b0;
  undefined8 local_5a8;
  undefined8 local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  undefined8 uStack_588;
  undefined8 local_580;
  undefined8 uStack_578;
  undefined8 local_570;
  long lStack_568;
  undefined4 *local_560;
  undefined8 *local_558;
  undefined8 auStack_550 [2];
  uint local_540;
  int iStack_53c;
  int local_538;
  int iStack_534;
  undefined8 local_530;
  undefined8 uStack_528;
  ulong local_520;
  ulong uStack_518;
  undefined8 local_510;
  long lStack_508;
  undefined4 *local_500;
  undefined8 *local_4f8;
  undefined8 auStack_4f0 [2];
  undefined8 local_4e0;
  Mat *pMStack_4d8;
  Mat *local_4d0;
  Mat *pMStack_4c8;
  int *local_4c0;
  int *local_4b8;
  undefined8 local_4b0;
  long local_4a8;
  Mat **local_4a0;
  undefined8 *local_498;
  undefined8 local_490;
  undefined8 uStack_488;
  undefined4 local_478;
  int local_474;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  long local_440;
  undefined4 *local_438;
  undefined8 *local_430;
  undefined8 auStack_428 [2];
  undefined8 local_418;
  ulong local_410;
  undefined8 local_408;
  undefined8 local_400;
  ulong local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  long local_3e0;
  ulong *local_3d8;
  undefined8 *local_3d0;
  undefined8 local_3c8;
  undefined8 local_3c0;
  
  local_694[0] = param_4;
  if (5 < (uint)param_4) {
    local_418 = (undefined8 *)0x0;
    local_410 = 0;
    pvVar15 = (void *)String::allocate((String *)&local_418,0x5c);
    memcpy(pvVar15,
           "op == CMP_LT || op == CMP_LE || op == CMP_EQ || op == CMP_NE || op == CMP_GE || op == CMP_GT"
           ,0x5c);
    error(-0xd7,(String *)&local_418,
          "void cv::compare(cv::InputArray, cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x137c);
    String::deallocate((String *)&local_418);
  }
  iVar12 = _InputArray::kind(param_1);
  iVar13 = _InputArray::kind(param_2);
  cVar11 = iVar12 == 0x20000;
  if (iVar13 == 0x20000) {
    cVar11 = cVar11 + '\x01';
  }
  if ((cVar11 == '\x01') || (cVar11 = _InputArray::sameSize(param_1,param_2), cVar11 == '\0')) {
LAB_0024e4c0:
    uVar16 = _InputArray::type(param_2,-1);
    iVar12 = _InputArray::kind(param_1);
    iVar13 = _InputArray::kind(param_2);
    iVar14 = _InputArray::dims(param_1,-1);
    if ((iVar14 < 3) && (cVar11 = _InputArray::isContinuous(param_1,-1), cVar11 != '\0')) {
      _InputArray::size((int)param_1);
      if ((uint)local_418 == 1) {
        if (((iVar12 == 0x20000) || (iVar13 != 0x20000)) &&
           (((uVar4 = ((uint)((uVar16 & 0xffffffff) >> 3) & 0x1ff) + 1, local_418._4_4_ == 1 ||
             (uVar4 == local_418._4_4_)) ||
            (((local_418._4_4_ == 4 && (iVar12 = _InputArray::type(param_1,-1), iVar12 == 6)) &&
             (uVar4 < 5)))))) goto LAB_0024fa48;
      }
      else if ((local_418._4_4_ == 1) &&
              (((iVar12 == 0x20000 || (iVar13 != 0x20000)) &&
               ((uint)local_418 == ((uint)((uVar16 & 0xffffffff) >> 3) & 0x1ff) + 1)))) {
LAB_0024fa48:
        if (local_694[0] == 3) {
          local_694[0] = 1;
        }
        else if (local_694[0] == 4) {
          local_694[0] = 2;
        }
        else if (local_694[0] == 2) {
          local_694[0] = 4;
        }
        else if (local_694[0] == 1) {
          local_694[0] = 3;
        }
        compare(param_2,param_1,param_3,local_694[0]);
        return;
      }
    }
    uVar16 = _InputArray::type(param_1,-1);
    iVar12 = _InputArray::kind(param_2);
    iVar13 = _InputArray::kind(param_1);
    iVar14 = _InputArray::dims(param_2,-1);
    if ((iVar14 < 3) && (cVar11 = _InputArray::isContinuous(param_2,-1), cVar11 != '\0')) {
      _InputArray::size((int)param_2);
      if ((uint)local_418 == 1) {
        if ((iVar12 == 0x20000) || (iVar13 != 0x20000)) {
          uVar4 = ((uint)((uVar16 & 0xffffffff) >> 3) & 0x1ff) + 1;
          if ((local_418._4_4_ == 1) || (uVar4 == local_418._4_4_)) goto LAB_0024ed84;
          if (((local_418._4_4_ == 4) && (iVar12 = _InputArray::type(param_2,-1), iVar12 == 6)) &&
             (uVar4 < 5)) {
            bVar7 = true;
            goto LAB_0024e594;
          }
        }
      }
      else if (((local_418._4_4_ == 1) && ((iVar12 == 0x20000 || (iVar13 != 0x20000)))) &&
              ((uint)local_418 == ((uint)((uVar16 & 0xffffffff) >> 3) & 0x1ff) + 1)) {
LAB_0024ed84:
        bVar7 = true;
        goto LAB_0024e594;
      }
    }
    local_418 = (undefined8 *)0x0;
    local_410 = 0;
    pvVar15 = (void *)String::allocate((String *)&local_418,0x8b);
    memcpy(pvVar15,&DAT_00460a70,0x8b);
    error(-0xd1,(String *)&local_418,
          "void cv::compare(cv::InputArray, cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x138f);
    bVar7 = true;
    String::deallocate((String *)&local_418);
  }
  else {
    iVar12 = _InputArray::type(param_1,-1);
    iVar13 = _InputArray::type(param_2,-1);
    if (iVar12 != iVar13) goto LAB_0024e4c0;
    bVar7 = false;
  }
LAB_0024e594:
  iVar12 = _InputArray::kind(param_1);
  iVar13 = _InputArray::kind(param_2);
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x10000) {
    pMVar26 = *(Mat **)(param_1 + 8);
    local_620 = &local_658;
    local_618 = &local_610;
    local_660 = *(uint *)pMVar26;
    local_65c = *(int *)(pMVar26 + 4);
    local_658 = *(int *)(pMVar26 + 8);
    local_654 = *(int *)(pMVar26 + 0xc);
    local_650 = *(undefined8 *)(pMVar26 + 0x10);
    uStack_648 = *(undefined8 *)(pMVar26 + 0x18);
    local_640 = *(undefined8 *)(pMVar26 + 0x20);
    uStack_638 = *(undefined8 *)(pMVar26 + 0x28);
    local_630 = *(undefined8 *)(pMVar26 + 0x30);
    lStack_628 = *(long *)(pMVar26 + 0x38);
    local_608 = 0;
    local_610 = 0;
    if (lStack_628 != 0) {
      piVar17 = (int *)(lStack_628 + 0x14);
      do {
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = *piVar17 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (*(int *)(pMVar26 + 4) < 3) {
      local_610 = **(undefined8 **)(pMVar26 + 0x48);
      local_608 = (*(undefined8 **)(pMVar26 + 0x48))[1];
    }
    else {
      local_65c = 0;
      Mat::copySize((Mat *)&local_660,pMVar26);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar14 = _InputArray::kind(param_2);
  if (iVar14 == 0x10000) {
    pMVar26 = *(Mat **)(param_2 + 8);
    local_5c0 = &local_5f8;
    local_5b8 = &local_5b0;
    local_600 = *(uint *)pMVar26;
    local_5fc = *(int *)(pMVar26 + 4);
    local_5f8 = *(int *)(pMVar26 + 8);
    local_5f4 = *(int *)(pMVar26 + 0xc);
    local_5f0 = *(undefined8 *)(pMVar26 + 0x10);
    uStack_5e8 = *(undefined8 *)(pMVar26 + 0x18);
    local_5e0 = *(ulong *)(pMVar26 + 0x20);
    uStack_5d8 = *(ulong *)(pMVar26 + 0x28);
    local_5d0 = *(undefined8 *)(pMVar26 + 0x30);
    lStack_5c8 = *(long *)(pMVar26 + 0x38);
    local_5a8 = 0;
    local_5b0 = 0;
    if (lStack_5c8 != 0) {
      piVar17 = (int *)(lStack_5c8 + 0x14);
      do {
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = *piVar17 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (2 < *(int *)(pMVar26 + 4)) {
      local_5fc = 0;
      Mat::copySize((Mat *)&local_600,pMVar26);
      goto LAB_0024e5fc;
    }
    if (iVar12 == iVar13) goto LAB_0024ef08;
LAB_0024e61c:
    uVar9 = local_600;
    uVar4 = local_660 & 7;
    _OutputArray::create(param_3,local_65c,local_620,local_660 & 0xff8,-1,false,0);
    Mat::reshape((int)(Mat *)&local_660,1);
    if (lStack_568 != 0) {
      piVar17 = (int *)(lStack_568 + 0x14);
      do {
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = *piVar17 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (lStack_628 != 0) {
      piVar17 = (int *)(lStack_628 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_660);
      }
    }
    puVar20 = local_558;
    lStack_628 = 0;
    local_650 = 0;
    uStack_638 = 0;
    local_640 = 0;
    uStack_648 = 0;
    if (local_65c < 1) {
LAB_0024e6ec:
      local_660 = (uint)local_5a0;
      if (2 < local_5a0._4_4_) goto LAB_0024f220;
      local_654 = local_598._4_4_;
      local_658 = (int)local_598;
      local_65c = local_5a0._4_4_;
      *local_618 = *local_558;
      local_618[1] = puVar20[1];
    }
    else {
      iVar12 = 0;
      piVar17 = local_620;
      do {
        *piVar17 = 0;
        iVar12 = iVar12 + 1;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_65c);
      if (local_65c < 3) goto LAB_0024e6ec;
LAB_0024f220:
      local_660 = (uint)local_5a0;
      Mat::copySize((Mat *)&local_660,(Mat *)&local_5a0);
    }
    uStack_638 = uStack_578;
    local_640 = local_580;
    lStack_628 = lStack_568;
    local_630 = local_570;
    uStack_648 = uStack_588;
    local_650 = local_590;
    if (lStack_568 != 0) {
      piVar17 = (int *)(lStack_568 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_5a0);
      }
    }
    lStack_568 = 0;
    local_590 = 0;
    uStack_578 = 0;
    local_580 = 0;
    uStack_588 = 0;
    if (0 < local_5a0._4_4_) {
      iVar12 = 0;
      do {
        *local_560 = 0;
        iVar12 = iVar12 + 1;
        local_560 = local_560 + 1;
      } while (iVar12 < local_5a0._4_4_);
    }
    if (local_558 != auStack_550) {
      fastFree(local_558);
    }
    Mat::reshape((int)(Mat *)&local_600,1);
    if (lStack_508 != 0) {
      piVar17 = (int *)(lStack_508 + 0x14);
      do {
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = *piVar17 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (lStack_5c8 != 0) {
      piVar17 = (int *)(lStack_5c8 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    lStack_5c8 = 0;
    local_5f0 = 0;
    uStack_5d8 = 0;
    local_5e0 = 0;
    uStack_5e8 = 0;
    if (local_5fc < 1) {
LAB_0024e890:
      local_600 = local_540;
      if (2 < iStack_53c) goto LAB_0024f210;
      local_5f4 = iStack_534;
      local_5f8 = local_538;
      local_5fc = iStack_53c;
      *local_5b8 = *local_4f8;
      local_5b8[1] = local_4f8[1];
    }
    else {
      iVar12 = 0;
      piVar17 = local_5c0;
      do {
        iVar12 = iVar12 + 1;
        *piVar17 = 0;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_5fc);
      if (local_5fc < 3) goto LAB_0024e890;
LAB_0024f210:
      local_600 = local_540;
      Mat::copySize((Mat *)&local_600,(Mat *)&local_540);
    }
    uStack_5d8 = uStack_518;
    local_5e0 = local_520;
    lStack_5c8 = lStack_508;
    local_5d0 = local_510;
    uStack_5e8 = uStack_528;
    local_5f0 = local_530;
    if (lStack_508 != 0) {
      piVar17 = (int *)(lStack_508 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_540);
      }
    }
    lStack_508 = 0;
    local_530 = 0;
    uStack_518 = 0;
    local_520 = 0;
    uStack_528 = 0;
    if (0 < iStack_53c) {
      iVar12 = 0;
      do {
        *local_500 = 0;
        iVar12 = iVar12 + 1;
        local_500 = local_500 + 1;
      } while (iVar12 < iStack_53c);
    }
    if (local_4f8 != auStack_4f0) {
      fastFree(local_4f8);
    }
    iVar12 = _InputArray::kind((_InputArray *)param_3);
    if (iVar12 == 0x10000) {
      pMVar26 = *(Mat **)(param_3 + 8);
      local_3d8 = &local_410;
      local_3d0 = &local_3c8;
      uVar5 = *(uint *)pMVar26;
      local_408 = *(undefined8 *)(pMVar26 + 0x10);
      local_418 = *(undefined8 **)pMVar26;
      local_410 = *(ulong *)(pMVar26 + 8);
      local_400 = *(undefined8 *)(pMVar26 + 0x18);
      local_3f8 = *(ulong *)(pMVar26 + 0x20);
      local_3f0 = *(undefined8 *)(pMVar26 + 0x28);
      local_3e8 = *(undefined8 *)(pMVar26 + 0x30);
      local_3e0 = *(long *)(pMVar26 + 0x38);
      local_3c0 = 0;
      local_3c8 = 0;
      if (local_3e0 != 0) {
        piVar17 = (int *)(local_3e0 + 0x14);
        do {
          cVar11 = '\x01';
          bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
          if (bVar6) {
            *piVar17 = *piVar17 + 1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
      }
      if (*(int *)(pMVar26 + 4) < 3) {
        local_3c8 = **(undefined8 **)(pMVar26 + 0x48);
        local_3c0 = (*(undefined8 **)(pMVar26 + 0x48))[1];
      }
      else {
        local_418 = (undefined8 *)(ulong)uVar5;
        Mat::copySize((Mat *)&local_418,pMVar26);
      }
    }
    else {
      _InputArray::getMat_((int)param_3);
    }
    Mat::reshape((int)(NAryMatIterator *)&local_418,1);
    if (local_3e0 != 0) {
      piVar17 = (int *)(local_3e0 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar6) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_418);
      }
    }
    local_3e0 = 0;
    local_408 = 0;
    local_3f0 = 0;
    local_3f8 = 0;
    local_400 = 0;
    if (0 < (int)local_418._4_4_) {
      iVar12 = 0;
      puVar18 = local_3d8;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar12 = iVar12 + 1;
        puVar18 = (ulong *)((long)puVar18 + 4);
      } while (iVar12 < (int)local_418._4_4_);
    }
    if (local_3d0 != &local_3c8) {
      fastFree(local_3d0);
    }
    if (local_65c < 1) {
      uVar16 = 0x3ff;
      uVar19 = 0;
    }
    else {
      uVar19 = local_618[(long)local_65c + -1];
      uVar16 = uVar19 + 0x3ff;
    }
    pcVar32 = (code *)(&PTR_FUN_004f5a00)[(int)uVar4];
    if (bVar7) {
      local_590 = 0;
      local_5a0 = (Mat *)&local_660;
      local_598 = (Mat *)&local_478;
      NAryMatIterator::NAryMatIterator
                ((NAryMatIterator *)&local_540,(Mat **)&local_5a0,&local_680,-1);
      uVar10 = uStack_518;
      uVar8 = 0;
      if (uVar19 != 0) {
        uVar8 = uVar16 / uVar19;
      }
      puVar20 = &local_408;
      if (uStack_518 < uVar8) {
        uVar8 = uStack_518;
      }
      local_410 = 0x408;
      uVar16 = uVar8 * uVar19;
      if (0x408 < uVar16) {
        local_418 = puVar20;
        puVar20 = operator_new__(uVar16);
      }
      local_418 = puVar20;
      local_410 = uVar16;
      if (uVar4 < 5) {
        local_670[0] = 0.0;
        pcVar21 = (code *)FUN_00283fe0(uVar9 & 7,6);
        local_4e0 = (Mat *)0x100000001;
        (*pcVar21)();
        if (*(double *)(&DAT_00461300 + (long)(int)uVar4 * 8) <= local_670[0]) {
          if (local_670[0] <= *(double *)(&DAT_00460df0 + (long)(int)uVar4 * 8)) {
            lVar29 = lrint(local_670[0]);
            local_688[0] = (int)lVar29;
            local_4d0 = (Mat *)local_688;
            if ((double)local_688[0] != local_670[0]) {
              if (local_694[0] - 2U < 2) {
                local_688[0] = (int)local_670[0] + (uint)((double)(int)local_670[0] < local_670[0]);
              }
              else {
                if ((local_694[0] != 1) && (local_694[0] != 4)) goto LAB_0024fc5c;
                local_688[0] = (int)local_670[0] - (uint)(local_670[0] < (double)(int)local_670[0]);
              }
            }
            local_4c0 = local_688 + 1;
            local_498 = &local_490;
            local_4b0 = 0;
            local_4a8 = 0;
            local_4a0 = &pMStack_4d8;
            pMStack_4d8 = _UNK_00250288;
            local_4e0 = _DAT_00250280;
            uStack_488 = _UNK_00250298;
            local_490 = _DAT_00250290;
            pMStack_4c8 = local_4d0;
            local_4b8 = local_4c0;
            FUN_0024b4c4((Mat *)&local_4e0,uVar4,puVar20,uVar8);
            if (local_4a8 != 0) {
              piVar17 = (int *)(local_4a8 + 0x14);
              do {
                iVar12 = *piVar17;
                cVar11 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
                if (bVar7) {
                  *piVar17 = iVar12 + -1;
                  cVar11 = ExclusiveMonitorsStatus();
                }
              } while (cVar11 != '\0');
              if (iVar12 == 1) {
                Mat::deallocate((Mat *)&local_4e0);
              }
            }
            local_4a8 = 0;
            local_4d0 = (Mat *)0x0;
            local_4b8 = (int *)0x0;
            local_4c0 = (int *)0x0;
            pMStack_4c8 = (Mat *)0x0;
            if (0 < local_4e0._4_4_) {
              iVar12 = 0;
              ppMVar27 = local_4a0;
              do {
                *(undefined4 *)ppMVar27 = 0;
                iVar12 = iVar12 + 1;
                ppMVar27 = (Mat **)((long)ppMVar27 + 4);
              } while (iVar12 < local_4e0._4_4_);
            }
            if (local_498 != &local_490) {
              fastFree(local_498);
            }
            goto LAB_0024f930;
          }
          local_4e0 = DAT_00250270;
          if (2 < local_694[0] - 3U) goto LAB_0024fc64;
        }
        else {
          local_4e0 = DAT_00250270;
          if (1 < local_694[0] - 1U) {
LAB_0024fc5c:
            local_4e0 = DAT_00250270;
            if (local_694[0] != 5) {
LAB_0024fc64:
              local_4e0 = (Mat *)0x0;
            }
          }
        }
        pMStack_4d8 = local_4e0;
        local_4d0 = local_4e0;
        pMStack_4c8 = local_4e0;
        Mat::operator=((Mat *)&local_478,(Scalar_ *)&local_4e0);
        if ((local_418 != &local_408) && (local_418 != (undefined8 *)0x0)) {
          operator_delete__(local_418);
        }
        Mat::release((Mat *)&local_478);
        if (local_430 != auStack_428) {
LAB_0024f110:
          fastFree(local_430);
        }
        goto LAB_0024f114;
      }
      if (local_5fc < 3) {
        iVar12 = local_5f4 * local_5f8;
      }
      else {
        iVar12 = 1;
        lVar29 = 0;
        do {
          piVar17 = local_5c0 + lVar29;
          lVar29 = lVar29 + 1;
          iVar12 = iVar12 * *piVar17;
        } while ((int)lVar29 < local_5fc);
      }
      uVar16 = (ulong)(1 << (ulong)((uint)(0xfa50L >> (ulong)(uVar4 << 1)) & 3));
      pcVar21 = (code *)FUN_00283fe0(local_600 & 7,uVar4);
      local_688[0] = iVar12;
      if (0 < iVar12) {
        local_688[0] = 1;
      }
      local_688[1] = 1;
      (*pcVar21)(local_5f0,1,0,1,puVar20,1,local_688,0);
      if (iVar12 < 1) {
        local_670[0] = 0.0;
        local_670[1] = 0.0;
        pcVar22 = (char *)String::allocate((String *)local_670,8);
        *(undefined8 *)pcVar22 = s_scn____1_004607e0._0_8_;
        error(-0xd7,(String *)local_670,
              "void cv::convertAndUnrollScalar(const cv::Mat&, int, uchar*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x588);
        String::deallocate((String *)local_670);
        uVar23 = 0x88442211UL >> (uVar4 << 2) & 0xf;
        if (uVar23 < uVar16) {
          uVar28 = uVar16 - uVar23;
          if (((undefined8 *)((long)puVar20 + uVar23) < puVar20 + 2) || (uVar28 < 0x16)) {
            uVar28 = uVar23;
            do {
              *(undefined1 *)((long)puVar20 + uVar28) =
                   *(undefined1 *)((long)puVar20 + (uVar28 - uVar23));
              uVar28 = uVar28 + 1;
            } while (uVar16 != uVar28);
          }
          else {
            uVar2 = -(long)puVar20 & 0xfU;
            if (uVar28 < (-(long)puVar20 & 0xfU)) {
              uVar2 = uVar28;
            }
            uVar24 = uVar23;
            if (uVar2 != 0) {
              *(undefined1 *)((long)puVar20 + uVar23) = *(undefined1 *)puVar20;
              uVar24 = uVar23 + 1;
              if (uVar2 != 1) {
                *(undefined1 *)((long)puVar20 + uVar23 + 1) = *(undefined1 *)((long)puVar20 + 1);
                uVar24 = uVar23 + 2;
                if (uVar2 != 2) {
                  *(undefined1 *)((long)puVar20 + uVar23 + 2) = *(undefined1 *)((long)puVar20 + 2);
                  uVar24 = uVar23 + 3;
                  if (uVar2 != 3) {
                    *(undefined1 *)((long)puVar20 + uVar23 + 3) = *(undefined1 *)((long)puVar20 + 3)
                    ;
                    uVar24 = uVar23 + 4;
                    if (uVar2 != 4) {
                      *(undefined1 *)((long)puVar20 + uVar23 + 4) =
                           *(undefined1 *)((long)puVar20 + 4);
                      uVar24 = uVar23 + 5;
                      if (uVar2 != 5) {
                        *(undefined1 *)((long)puVar20 + uVar23 + 5) =
                             *(undefined1 *)((long)puVar20 + 5);
                        uVar24 = uVar23 + 6;
                        if (uVar2 != 6) {
                          *(undefined1 *)((long)puVar20 + uVar23 + 6) =
                               *(undefined1 *)((long)puVar20 + 6);
                          uVar24 = uVar23 + 7;
                          if (uVar2 != 7) {
                            *(undefined1 *)((long)puVar20 + uVar23 + 7) =
                                 *(undefined1 *)((long)puVar20 + 7);
                            uVar24 = uVar23 + 8;
                            if (uVar2 != 8) {
                              *(undefined1 *)((long)puVar20 + uVar23 + 8) =
                                   *(undefined1 *)(puVar20 + 1);
                              uVar24 = uVar23 + 9;
                              if (uVar2 != 9) {
                                *(undefined1 *)((long)puVar20 + uVar23 + 9) =
                                     *(undefined1 *)((long)puVar20 + 9);
                                uVar24 = uVar23 + 10;
                                if (uVar2 != 10) {
                                  *(undefined1 *)((long)puVar20 + uVar23 + 10) =
                                       *(undefined1 *)((long)puVar20 + 10);
                                  uVar24 = uVar23 + 0xb;
                                  if (uVar2 != 0xb) {
                                    *(undefined1 *)((long)puVar20 + uVar23 + 0xb) =
                                         *(undefined1 *)((long)puVar20 + 0xb);
                                    uVar24 = uVar23 + 0xc;
                                    if (uVar2 != 0xc) {
                                      *(undefined1 *)((long)puVar20 + uVar23 + 0xc) =
                                           *(undefined1 *)((long)puVar20 + 0xc);
                                      uVar24 = uVar23 + 0xd;
                                      if (uVar2 != 0xd) {
                                        *(undefined1 *)((long)puVar20 + uVar23 + 0xd) =
                                             *(undefined1 *)((long)puVar20 + 0xd);
                                        uVar24 = uVar23 + 0xe;
                                        if (uVar2 == 0xf) {
                                          *(undefined1 *)((long)puVar20 + uVar23 + 0xe) =
                                               *(undefined1 *)((long)puVar20 + 0xe);
                                          uVar24 = uVar23 + 0xf;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar1 = ((uVar28 - uVar2) - 0x10 >> 4) + 1;
            uVar31 = 0;
            lVar29 = uVar1 * 0x10;
            puVar25 = (undefined8 *)((long)puVar20 + uVar2);
            puVar30 = (undefined8 *)((long)puVar20 + uVar2 + uVar23);
            do {
              uVar33 = *puVar25;
              uVar31 = uVar31 + 1;
              puVar30[1] = puVar25[1];
              *puVar30 = uVar33;
              puVar25 = puVar25 + 2;
              puVar30 = puVar30 + 2;
            } while (uVar31 < uVar1);
            lVar3 = uVar24 + lVar29;
            if (lVar29 - (uVar28 - uVar2) != 0) {
              uVar28 = lVar3 + 1;
              *(undefined1 *)((long)puVar20 + lVar3) =
                   *(undefined1 *)((long)puVar20 + (lVar3 - uVar23));
              if (uVar28 < uVar16) {
                uVar2 = lVar3 + 2;
                *(undefined1 *)((long)puVar20 + uVar28) =
                     *(undefined1 *)((long)puVar20 + (uVar28 - uVar23));
                if (uVar2 < uVar16) {
                  uVar28 = lVar3 + 3;
                  *(undefined1 *)((long)puVar20 + uVar2) =
                       *(undefined1 *)((long)puVar20 + (uVar2 - uVar23));
                  if (uVar28 < uVar16) {
                    uVar2 = lVar3 + 4;
                    *(undefined1 *)((long)puVar20 + uVar28) =
                         *(undefined1 *)((long)puVar20 + (uVar28 - uVar23));
                    if (uVar2 < uVar16) {
                      uVar28 = lVar3 + 5;
                      *(undefined1 *)((long)puVar20 + uVar2) =
                           *(undefined1 *)((long)puVar20 + (uVar2 - uVar23));
                      if (uVar28 < uVar16) {
                        uVar2 = lVar3 + 6;
                        *(undefined1 *)((long)puVar20 + uVar28) =
                             *(undefined1 *)((long)puVar20 + (uVar28 - uVar23));
                        if (uVar2 < uVar16) {
                          uVar28 = lVar3 + 7;
                          *(undefined1 *)((long)puVar20 + uVar2) =
                               *(undefined1 *)((long)puVar20 + (uVar2 - uVar23));
                          if ((uVar28 < uVar16) &&
                             (*(undefined1 *)((long)puVar20 + uVar28) =
                                   *(undefined1 *)((long)puVar20 + (uVar28 - uVar23)),
                             lVar3 + 8U < uVar16)) {
                            *(undefined1 *)((long)puVar20 + 7) =
                                 *(undefined1 *)((long)puVar20 + (7 - uVar23));
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      uVar23 = uVar8 * uVar16;
      if (uVar16 < uVar23) {
        uVar28 = uVar23 - uVar16;
        if (((undefined8 *)((long)puVar20 + uVar16) < puVar20 + 2) || (uVar28 < 0x16)) {
          puVar25 = puVar20;
          do {
            *(undefined1 *)((long)puVar25 + uVar16) = *(undefined1 *)puVar25;
            puVar25 = (undefined8 *)((long)puVar25 + 1);
          } while (puVar25 != (undefined8 *)((long)puVar20 + uVar28));
        }
        else {
          uVar2 = uVar28;
          if ((-(long)puVar20 & 0xfU) < uVar28) {
            uVar2 = -(long)puVar20 & 0xfU;
          }
          uVar24 = uVar16;
          if (uVar2 != 0) {
            *(undefined1 *)((long)puVar20 + uVar16) = *(undefined1 *)puVar20;
            uVar24 = uVar16 + 1;
            if (uVar2 != 1) {
              *(undefined1 *)((long)puVar20 + uVar16 + 1) = *(undefined1 *)((long)puVar20 + 1);
              uVar24 = uVar16 + 2;
              if (uVar2 != 2) {
                *(undefined1 *)((long)puVar20 + uVar16 + 2) = *(undefined1 *)((long)puVar20 + 2);
                uVar24 = uVar16 + 3;
                if (uVar2 != 3) {
                  *(undefined1 *)((long)puVar20 + uVar16 + 3) = *(undefined1 *)((long)puVar20 + 3);
                  uVar24 = uVar16 + 4;
                  if (uVar2 != 4) {
                    *(undefined1 *)((long)puVar20 + uVar16 + 4) = *(undefined1 *)((long)puVar20 + 4)
                    ;
                    uVar24 = uVar16 + 5;
                    if (uVar2 != 5) {
                      *(undefined1 *)((long)puVar20 + uVar16 + 5) =
                           *(undefined1 *)((long)puVar20 + 5);
                      uVar24 = uVar16 + 6;
                      if (uVar2 != 6) {
                        *(undefined1 *)((long)puVar20 + uVar16 + 6) =
                             *(undefined1 *)((long)puVar20 + 6);
                        uVar24 = uVar16 + 7;
                        if (uVar2 != 7) {
                          *(undefined1 *)((long)puVar20 + uVar16 + 7) =
                               *(undefined1 *)((long)puVar20 + 7);
                          uVar24 = uVar16 + 8;
                          if (uVar2 != 8) {
                            *(undefined1 *)((long)puVar20 + uVar16 + 8) =
                                 *(undefined1 *)(puVar20 + 1);
                            uVar24 = uVar16 + 9;
                            if (uVar2 != 9) {
                              *(undefined1 *)((long)puVar20 + uVar16 + 9) =
                                   *(undefined1 *)((long)puVar20 + 9);
                              uVar24 = uVar16 + 10;
                              if (uVar2 != 10) {
                                *(undefined1 *)((long)puVar20 + uVar16 + 10) =
                                     *(undefined1 *)((long)puVar20 + 10);
                                uVar24 = uVar16 + 0xb;
                                if (uVar2 != 0xb) {
                                  *(undefined1 *)((long)puVar20 + uVar16 + 0xb) =
                                       *(undefined1 *)((long)puVar20 + 0xb);
                                  uVar24 = uVar16 + 0xc;
                                  if (uVar2 != 0xc) {
                                    *(undefined1 *)((long)puVar20 + uVar16 + 0xc) =
                                         *(undefined1 *)((long)puVar20 + 0xc);
                                    uVar24 = uVar16 + 0xd;
                                    if (uVar2 != 0xd) {
                                      *(undefined1 *)((long)puVar20 + uVar16 + 0xd) =
                                           *(undefined1 *)((long)puVar20 + 0xd);
                                      uVar24 = uVar16 + 0xe;
                                      if (uVar2 == 0xf) {
                                        *(undefined1 *)((long)puVar20 + uVar16 + 0xe) =
                                             *(undefined1 *)((long)puVar20 + 0xe);
                                        uVar24 = uVar16 + 0xf;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar1 = ((uVar28 - uVar2) - 0x10 >> 4) + 1;
          lVar29 = uVar1 * 0x10;
          if (0xe < (uVar28 - 1) - uVar2) {
            uVar31 = 0;
            puVar25 = (undefined8 *)((long)puVar20 + uVar2);
            puVar30 = (undefined8 *)((long)puVar20 + uVar16 + uVar2);
            do {
              uVar33 = *puVar25;
              uVar31 = uVar31 + 1;
              puVar30[1] = puVar25[1];
              *puVar30 = uVar33;
              puVar25 = puVar25 + 2;
              puVar30 = puVar30 + 2;
            } while (uVar31 < uVar1);
            uVar24 = uVar24 + lVar29;
            if (uVar28 - uVar2 == lVar29) goto LAB_0024f930;
          }
          uVar28 = uVar24 + 1;
          *(undefined1 *)((long)puVar20 + uVar24) =
               *(undefined1 *)((long)puVar20 + (uVar24 - uVar16));
          if (uVar28 <= uVar23 && uVar23 - uVar28 != 0) {
            uVar2 = uVar24 + 2;
            *(undefined1 *)((long)puVar20 + uVar28) =
                 *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
            if (uVar2 <= uVar23 && uVar23 - uVar2 != 0) {
              uVar28 = uVar24 + 3;
              *(undefined1 *)((long)puVar20 + uVar2) =
                   *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
              if (uVar28 < uVar23) {
                uVar2 = uVar24 + 4;
                *(undefined1 *)((long)puVar20 + uVar28) =
                     *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                if (uVar2 < uVar23) {
                  uVar28 = uVar24 + 5;
                  *(undefined1 *)((long)puVar20 + uVar2) =
                       *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
                  if (uVar28 <= uVar23 && uVar23 - uVar28 != 0) {
                    uVar2 = uVar24 + 6;
                    *(undefined1 *)((long)puVar20 + uVar28) =
                         *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                    if (uVar2 <= uVar23 && uVar23 - uVar2 != 0) {
                      uVar28 = uVar24 + 7;
                      *(undefined1 *)((long)puVar20 + uVar2) =
                           *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
                      if (uVar28 <= uVar23 && uVar23 - uVar28 != 0) {
                        uVar2 = uVar24 + 8;
                        *(undefined1 *)((long)puVar20 + uVar28) =
                             *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                        if (uVar2 <= uVar23 && uVar23 - uVar2 != 0) {
                          uVar28 = uVar24 + 9;
                          *(undefined1 *)((long)puVar20 + uVar2) =
                               *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
                          if (uVar28 <= uVar23 && uVar23 - uVar28 != 0) {
                            uVar2 = uVar24 + 10;
                            *(undefined1 *)((long)puVar20 + uVar28) =
                                 *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                            if (uVar2 <= uVar23 && uVar23 - uVar2 != 0) {
                              uVar28 = uVar24 + 0xb;
                              *(undefined1 *)((long)puVar20 + uVar2) =
                                   *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
                              if (uVar28 <= uVar23 && uVar23 - uVar28 != 0) {
                                uVar2 = uVar24 + 0xc;
                                *(undefined1 *)((long)puVar20 + uVar28) =
                                     *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                                if (uVar2 <= uVar23 && uVar23 - uVar2 != 0) {
                                  uVar28 = uVar24 + 0xd;
                                  *(undefined1 *)((long)puVar20 + uVar2) =
                                       *(undefined1 *)((long)puVar20 + (uVar2 - uVar16));
                                  if (uVar28 < uVar23) {
                                    uVar24 = uVar24 + 0xe;
                                    *(undefined1 *)((long)puVar20 + uVar28) =
                                         *(undefined1 *)((long)puVar20 + (uVar28 - uVar16));
                                    if (uVar24 < uVar23) {
                                      *(undefined1 *)((long)puVar20 + uVar24) =
                                           *(undefined1 *)((long)puVar20 + (uVar24 - uVar16));
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0024f930:
      for (uVar16 = 0; uVar16 < local_520; uVar16 = uVar16 + 1) {
        uVar23 = uVar10;
        uVar28 = uVar8;
        if (uVar10 != 0) {
          do {
            uVar2 = uVar8;
            if (uVar23 < uVar8) {
              uVar2 = uVar23;
            }
            iVar12 = (int)uVar2;
            local_4e0 = (Mat *)CONCAT44(1,iVar12);
            (*pcVar32)(local_680,0,puVar20,0,local_678,0,&local_4e0,local_694);
            local_678 = local_678 + iVar12;
            local_680 = local_680 + (long)iVar12 * uVar19;
            bVar7 = uVar28 < uVar10;
            uVar23 = uVar23 - uVar8;
            uVar28 = uVar28 + uVar8;
          } while (bVar7);
        }
        NAryMatIterator::operator++((NAryMatIterator *)&local_540);
      }
      if ((local_418 != &local_408) && (local_418 != (undefined8 *)0x0)) {
        operator_delete__(local_418);
      }
    }
    else {
      pMStack_4c8 = (Mat *)0x0;
      local_4e0 = (Mat *)&local_660;
      pMStack_4d8 = (Mat *)&local_600;
      local_4d0 = (Mat *)&local_478;
      NAryMatIterator::NAryMatIterator
                ((NAryMatIterator *)&local_418,(Mat **)&local_4e0,(uchar **)&local_540,-1);
      uVar33 = local_3f0;
      for (uVar16 = 0; uVar16 < local_3f8; uVar16 = uVar16 + 1) {
        local_5a0 = (Mat *)CONCAT44(1,(int)uVar33);
        (*pcVar32)(CONCAT44(iStack_53c,local_540),0,CONCAT44(iStack_534,local_538),0,local_530,0,
                   (Mat *)&local_5a0,local_694);
        NAryMatIterator::operator++((NAryMatIterator *)&local_418);
      }
    }
    if (local_440 != 0) {
      piVar17 = (int *)(local_440 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_478);
      }
    }
    local_440 = 0;
    local_468 = 0;
    local_450 = 0;
    local_458 = 0;
    local_460 = 0;
    if (0 < local_474) {
      iVar12 = 0;
      do {
        *local_438 = 0;
        iVar12 = iVar12 + 1;
        local_438 = local_438 + 1;
      } while (iVar12 < local_474);
    }
    if (local_430 != auStack_428) {
      fastFree(local_430);
    }
    if (lStack_5c8 != 0) {
      piVar17 = (int *)(lStack_5c8 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    lStack_5c8 = 0;
    local_5f0 = 0;
    uStack_5d8 = 0;
    local_5e0 = 0;
    uStack_5e8 = 0;
    if (0 < local_5fc) {
      iVar12 = 0;
      piVar17 = local_5c0;
      do {
        iVar12 = iVar12 + 1;
        *piVar17 = 0;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_5fc);
    }
    if (local_5b8 != &local_5b0) {
      fastFree(local_5b8);
    }
    if (lStack_628 != 0) {
      piVar17 = (int *)(lStack_628 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_660);
      }
    }
    if (0 < local_65c) {
      iVar12 = 0;
      piVar17 = local_620;
      do {
        *piVar17 = 0;
        iVar12 = iVar12 + 1;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_65c);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_0024e5fc:
    if (iVar12 != iVar13) goto LAB_0024e61c;
LAB_0024ef08:
    if ((2 < local_65c) || (2 < local_5fc)) goto LAB_0024e61c;
    if ((local_620[1] != local_5c0[1]) ||
       ((*local_620 != *local_5c0 || ((local_660 & 0xfff) != (local_600 & 0xfff)))))
    goto LAB_0024e61c;
    local_418 = (undefined8 *)CONCAT44(*local_620,local_620[1]);
    _OutputArray::create(param_3,(Mat *)&local_418,local_660 & 0xff8,0xffffffff,0,0);
    iVar12 = _InputArray::kind((_InputArray *)param_3);
    if (iVar12 == 0x10000) {
      pMVar26 = *(Mat **)(param_3 + 8);
      uVar4 = *(uint *)pMVar26;
      local_3d8 = &local_410;
      local_408 = *(undefined8 *)(pMVar26 + 0x10);
      local_3d0 = &local_3c8;
      local_418 = *(undefined8 **)pMVar26;
      local_410 = *(ulong *)(pMVar26 + 8);
      local_400 = *(undefined8 *)(pMVar26 + 0x18);
      local_3f8 = *(ulong *)(pMVar26 + 0x20);
      local_3f0 = *(undefined8 *)(pMVar26 + 0x28);
      local_3e8 = *(undefined8 *)(pMVar26 + 0x30);
      local_3e0 = *(long *)(pMVar26 + 0x38);
      local_3c0 = 0;
      local_3c8 = 0;
      if (local_3e0 != 0) {
        piVar17 = (int *)(local_3e0 + 0x14);
        do {
          cVar11 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
          if (bVar7) {
            *piVar17 = *piVar17 + 1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
      }
      if (*(int *)(pMVar26 + 4) < 3) {
        local_3c8 = **(undefined8 **)(pMVar26 + 0x48);
        local_3c0 = (*(undefined8 **)(pMVar26 + 0x48))[1];
      }
      else {
        local_418 = (undefined8 *)(ulong)uVar4;
        Mat::copySize((Mat *)&local_418,pMVar26);
      }
    }
    else {
      _InputArray::getMat_((int)param_3);
    }
    iVar12 = (local_660 >> 3 & 0x1ff) + 1;
    if (((local_660 & local_600 & 0x4000 & (uint)local_418) == 0) ||
       (uVar16 = (long)local_654 * (long)local_658 * (long)iVar12, uVar16 - (long)(int)uVar16 != 0))
    {
      uVar16 = (ulong)(uint)(local_654 * iVar12);
      local_474 = local_658;
    }
    else {
      local_474 = 1;
    }
    local_478 = (undefined4)uVar16;
    (*(code *)(&PTR_FUN_004f5a00)[(int)(local_660 & 7)])
              (local_650,local_610,local_5f0,local_5b0,local_408,local_3c8,&local_478,local_694);
    if (local_3e0 != 0) {
      piVar17 = (int *)(local_3e0 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_418);
      }
    }
    local_3e0 = 0;
    local_408 = 0;
    local_3f0 = 0;
    local_3f8 = 0;
    local_400 = 0;
    if (0 < (int)local_418._4_4_) {
      iVar12 = 0;
      puVar18 = local_3d8;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar12 = iVar12 + 1;
        puVar18 = (ulong *)((long)puVar18 + 4);
      } while (iVar12 < (int)local_418._4_4_);
    }
    local_430 = local_3d0;
    if (local_3d0 != &local_3c8) goto LAB_0024f110;
LAB_0024f114:
    if (lStack_5c8 != 0) {
      piVar17 = (int *)(lStack_5c8 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    lStack_5c8 = 0;
    local_5f0 = 0;
    uStack_5d8 = 0;
    local_5e0 = 0;
    uStack_5e8 = 0;
    if (0 < local_5fc) {
      iVar12 = 0;
      piVar17 = local_5c0;
      do {
        iVar12 = iVar12 + 1;
        *piVar17 = 0;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_5fc);
    }
    if (local_5b8 != &local_5b0) {
      fastFree(local_5b8);
    }
    if (lStack_628 != 0) {
      piVar17 = (int *)(lStack_628 + 0x14);
      do {
        iVar12 = *piVar17;
        cVar11 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar7) {
          *piVar17 = iVar12 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_660);
      }
    }
    if (0 < local_65c) {
      iVar12 = 0;
      piVar17 = local_620;
      do {
        *piVar17 = 0;
        iVar12 = iVar12 + 1;
        piVar17 = piVar17 + 1;
      } while (iVar12 < local_65c);
    }
  }
  lStack_628 = 0;
  uStack_638 = 0;
  local_640 = 0;
  uStack_648 = 0;
  local_650 = 0;
  if (local_618 != &local_610) {
    fastFree(local_618);
  }
  return;
}


==================================================================

### FUNC 002502a0 (6824 bytes) name=inRange

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::inRange(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_OutputArray const&) */

void cv::inRange(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                _OutputArray *param_4)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  uint uVar4;
  uint uVar5;
  int *piVar6;
  long lVar7;
  undefined8 *puVar8;
  uint uVar9;
  Mat **ppMVar10;
  byte bVar11;
  ulong uVar12;
  undefined8 uVar13;
  undefined2 uVar14;
  bool bVar15;
  char cVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  uint uVar21;
  uint uVar22;
  uint uVar23;
  void *pvVar24;
  char *pcVar25;
  ulong uVar26;
  byte *pbVar27;
  undefined8 *puVar28;
  code *pcVar29;
  long lVar30;
  long lVar31;
  ulong uVar32;
  uint *puVar33;
  byte *pbVar34;
  Mat *pMVar35;
  undefined8 *puVar36;
  uchar *puVar37;
  ulong uVar38;
  ulong uVar39;
  ulong uVar40;
  uchar *puVar41;
  ulong uVar42;
  byte *pbVar43;
  code *pcVar44;
  uint uVar45;
  long lVar46;
  ulong uVar47;
  ulong uVar48;
  undefined8 uVar49;
  Mat *local_7c0;
  uchar *local_7b8;
  Mat *local_7a8;
  ulong local_790;
  int local_768 [3];
  undefined4 local_75c;
  undefined8 local_758;
  undefined8 local_750;
  undefined8 local_748;
  undefined8 local_740;
  undefined8 local_738;
  undefined8 local_730;
  undefined8 local_728;
  undefined8 local_720;
  undefined8 local_718;
  undefined8 local_710;
  undefined8 local_708;
  undefined8 local_700;
  Mat *local_6f8;
  Mat *local_6f0;
  undefined8 local_6e8;
  uchar *local_6e0;
  byte *pbStack_6d8;
  ulong local_6d0;
  Mat *local_6c0;
  Mat *local_6b8;
  Mat *local_6b0;
  Mat *local_6a8;
  undefined8 local_6a0;
  NAryMatIterator aNStack_698 [32];
  ulong local_678;
  ulong local_670;
  uint local_658;
  int local_654;
  int local_650;
  undefined4 local_64c;
  undefined8 local_648;
  undefined8 local_640;
  undefined8 local_638;
  undefined8 local_630;
  undefined8 local_628;
  long local_620;
  int *local_618;
  undefined8 *local_610;
  undefined8 local_608;
  undefined8 local_600;
  uint local_5f8;
  int local_5f4;
  uint local_5f0;
  int local_5ec;
  undefined8 local_5e8;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  long local_5c0;
  uint *local_5b8;
  undefined8 *local_5b0;
  undefined8 local_5a8;
  undefined8 local_5a0;
  uint local_598;
  int local_594;
  uint local_590;
  int local_58c;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  uint *local_558;
  undefined8 *local_550;
  undefined8 local_548;
  undefined8 local_540;
  undefined4 local_538;
  undefined4 local_534;
  undefined4 local_530;
  undefined4 local_52c;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  undefined4 *local_4f8;
  undefined8 *local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  undefined4 local_4d8;
  undefined4 local_4d4;
  uint local_4d0 [2];
  ulong local_4c8;
  ulong local_4c0;
  long local_4b8;
  long local_4b0;
  undefined8 local_4a8;
  undefined8 local_4a0;
  uint *local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  uint local_478;
  int local_474;
  uint local_470 [2];
  long local_468;
  long local_460;
  long local_458;
  long local_450;
  undefined8 local_448;
  long local_440;
  uint *local_438;
  undefined8 *local_430;
  undefined8 local_428;
  undefined8 local_420;
  byte *local_418;
  ulong local_410;
  byte abStack_408 [1032];
  
  iVar17 = _InputArray::kind(param_1);
  iVar18 = _InputArray::kind(param_2);
  iVar19 = _InputArray::kind(param_3);
  iVar20 = _InputArray::kind(param_1);
  if (iVar20 == 0x10000) {
    pMVar35 = *(Mat **)(param_1 + 8);
    local_618 = &local_650;
    local_610 = &local_608;
    local_658 = *(uint *)pMVar35;
    local_654 = *(int *)(pMVar35 + 4);
    local_650 = *(int *)(pMVar35 + 8);
    local_64c = *(undefined4 *)(pMVar35 + 0xc);
    local_648 = *(undefined8 *)(pMVar35 + 0x10);
    local_640 = *(undefined8 *)(pMVar35 + 0x18);
    local_638 = *(undefined8 *)(pMVar35 + 0x20);
    local_630 = *(undefined8 *)(pMVar35 + 0x28);
    local_628 = *(undefined8 *)(pMVar35 + 0x30);
    local_620 = *(long *)(pMVar35 + 0x38);
    local_600 = 0;
    local_608 = 0;
    if (local_620 != 0) {
      piVar6 = (int *)(local_620 + 0x14);
      do {
        cVar16 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar15) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar35 + 4)) {
      local_654 = 0;
      Mat::copySize((Mat *)&local_658,pMVar35);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_7c0 = (Mat *)&local_658;
  iVar20 = _InputArray::kind(param_2);
  if (iVar20 == 0x10000) {
    pMVar35 = *(Mat **)(param_2 + 8);
    local_5b8 = &local_5f0;
    local_5b0 = &local_5a8;
    local_5f8 = *(uint *)pMVar35;
    local_5f4 = *(int *)(pMVar35 + 4);
    local_5f0 = *(uint *)(pMVar35 + 8);
    local_5ec = *(int *)(pMVar35 + 0xc);
    local_5e8 = *(undefined8 *)(pMVar35 + 0x10);
    local_5e0 = *(undefined8 *)(pMVar35 + 0x18);
    local_5d8 = *(undefined8 *)(pMVar35 + 0x20);
    local_5d0 = *(undefined8 *)(pMVar35 + 0x28);
    local_5c8 = *(undefined8 *)(pMVar35 + 0x30);
    local_5c0 = *(long *)(pMVar35 + 0x38);
    local_5a0 = 0;
    local_5a8 = 0;
    if (local_5c0 != 0) {
      piVar6 = (int *)(local_5c0 + 0x14);
      do {
        cVar16 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar15) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (*(int *)(pMVar35 + 4) < 3) {
      local_5a8 = **(undefined8 **)(pMVar35 + 0x48);
      local_5a0 = (*(undefined8 **)(pMVar35 + 0x48))[1];
    }
    else {
      local_5f4 = 0;
      Mat::copySize((Mat *)&local_5f8,pMVar35);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar20 = _InputArray::kind(param_3);
  if (iVar20 == 0x10000) {
    pMVar35 = *(Mat **)(param_3 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(uint *)pMVar35;
    local_594 = *(int *)(pMVar35 + 4);
    local_590 = *(uint *)(pMVar35 + 8);
    local_58c = *(int *)(pMVar35 + 0xc);
    local_588 = *(undefined8 *)(pMVar35 + 0x10);
    local_580 = *(undefined8 *)(pMVar35 + 0x18);
    local_578 = *(undefined8 *)(pMVar35 + 0x20);
    local_570 = *(undefined8 *)(pMVar35 + 0x28);
    local_568 = *(undefined8 *)(pMVar35 + 0x30);
    local_560 = *(long *)(pMVar35 + 0x38);
    local_540 = 0;
    local_548 = 0;
    if (local_560 != 0) {
      piVar6 = (int *)(local_560 + 0x14);
      do {
        cVar16 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar15) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (*(int *)(pMVar35 + 4) < 3) {
      local_548 = **(undefined8 **)(pMVar35 + 0x48);
      local_540 = (*(undefined8 **)(pMVar35 + 0x48))[1];
    }
    else {
      local_594 = 0;
      Mat::copySize((Mat *)&local_598,pMVar35);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  if (((iVar17 == 0x20000) || (iVar18 != 0x20000)) &&
     (cVar16 = MatSize::operator==((MatSize *)&local_618,(MatSize *)&local_5b8), cVar16 != '\0')) {
    uVar21 = 0;
    uVar48 = (ulong)local_658;
    if ((local_658 & 0xfff) != (local_5f8 & 0xfff)) goto LAB_00250394;
    goto LAB_00250404;
  }
  uVar48 = (ulong)local_658;
LAB_00250394:
  if ((local_5f4 < 3) && ((local_5f8 >> 0xe & 1) != 0)) {
    uVar21 = local_5b8[1];
    uVar22 = *local_5b8;
    if (((uVar21 != 1) && (uVar22 != 1)) ||
       ((uVar4 = ((uint)(uVar48 >> 3) & 0x1ff) + 1, iVar18 != 0x20000 && (iVar17 == 0x20000))))
    goto LAB_002503a4;
    bVar15 = uVar21 == 1;
    if (((bVar15) && (uVar22 == 1)) ||
       (((uVar22 == uVar4 && (bVar15)) || ((uVar21 == uVar4 && (uVar22 == 1)))))) {
      uVar21 = 1;
    }
    else if ((((uVar22 != 4) || (!bVar15)) || (4 < uVar4)) || (uVar21 = 1, (local_5f8 & 0xfff) != 6)
            ) goto LAB_002503a4;
  }
  else {
LAB_002503a4:
    local_758 = 0;
    local_750 = 0;
    pvVar24 = (void *)String::allocate((String *)&local_758,0x59);
    memcpy(pvVar24,
           "The lower bounary is neither an array of the same size and same type as src, nor a scalar"
           ,0x59);
    error(-0xd1,(String *)&local_758,
          "void cv::inRange(cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1640);
    String::deallocate((String *)&local_758);
    uVar48 = (ulong)local_658;
    uVar21 = 1;
  }
LAB_00250404:
  if (((iVar19 == 0x20000) && (iVar17 != 0x20000)) ||
     ((cVar16 = MatSize::operator==((MatSize *)&local_618,(MatSize *)&local_558), cVar16 == '\0' ||
      (uVar22 = 0, ((uint)uVar48 & 0xfff) != (local_598 & 0xfff))))) {
    if ((local_594 < 3) && ((local_598 >> 0xe & 1) != 0)) {
      uVar22 = local_558[1];
      uVar4 = *local_558;
      if (((uVar22 != 1) && (uVar4 != 1)) ||
         ((uVar5 = ((uint)(uVar48 >> 3) & 0x1ff) + 1, iVar19 != 0x20000 && (iVar17 == 0x20000))))
      goto LAB_0025041c;
      bVar15 = uVar22 != 1;
      if ((((bVar15) || (uVar4 != 1)) && ((uVar4 != uVar5 || (bVar15)))) &&
         ((uVar22 != uVar5 || (uVar4 != 1)))) {
        if ((((uVar4 == 4) && (!bVar15)) && (uVar5 < 5)) && (uVar22 = 1, (local_598 & 0xfff) == 6))
        goto LAB_00250474;
        goto LAB_0025041c;
      }
    }
    else {
LAB_0025041c:
      local_748 = 0;
      local_740 = 0;
      pvVar24 = (void *)String::allocate((String *)&local_748,0x59);
      memcpy(pvVar24,
             "The upper bounary is neither an array of the same size and same type as src, nor a scalar"
             ,0x59);
      error(-0xd1,(String *)&local_748,
            "void cv::inRange(cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1649);
      String::deallocate((String *)&local_748);
    }
    uVar22 = 1;
  }
LAB_00250474:
  if (uVar21 != uVar22) {
    local_738 = 0;
    local_730 = 0;
    pcVar25 = (char *)String::allocate((String *)&local_738,0x14);
    uVar13 = s_lbScalar____ubScalar_00460bc0._8_8_;
    uVar49 = s_lbScalar____ubScalar_00460bc0._0_8_;
    *(undefined4 *)(pcVar25 + 0x10) = s_lbScalar____ubScalar_00460bc0._16_4_;
    *(undefined8 *)pcVar25 = uVar49;
    *(undefined8 *)(pcVar25 + 8) = uVar13;
    error(-0xd7,(String *)&local_738,
          "void cv::inRange(cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x164d);
    String::deallocate((String *)&local_738);
  }
  uVar5 = local_658 >> 3 & 0x1ff;
  uVar9 = local_658 & 7;
  uVar4 = uVar5 + 1;
  if (local_654 < 1) {
    uVar48 = 0x3ff;
    uVar26 = 0;
  }
  else {
    uVar26 = local_610[(long)local_654 + -1];
    uVar48 = uVar26 + 0x3ff;
  }
  uVar12 = 0;
  if (uVar26 != 0) {
    uVar12 = uVar48 / uVar26;
  }
  _OutputArray::create(param_4,local_654,local_618,0,-1,false,0);
  iVar17 = _InputArray::kind((_InputArray *)param_4);
  if (iVar17 == 0x10000) {
    pMVar35 = *(Mat **)(param_4 + 8);
    local_4f8 = &local_530;
    local_4f0 = &local_4e8;
    local_538 = *(undefined4 *)pMVar35;
    local_534 = *(undefined4 *)(pMVar35 + 4);
    local_530 = *(undefined4 *)(pMVar35 + 8);
    local_52c = *(undefined4 *)(pMVar35 + 0xc);
    local_528 = *(undefined8 *)(pMVar35 + 0x10);
    local_520 = *(undefined8 *)(pMVar35 + 0x18);
    local_518 = *(undefined8 *)(pMVar35 + 0x20);
    local_510 = *(undefined8 *)(pMVar35 + 0x28);
    local_508 = *(undefined8 *)(pMVar35 + 0x30);
    local_500 = *(long *)(pMVar35 + 0x38);
    local_4e0 = 0;
    local_4e8 = 0;
    if (local_500 != 0) {
      piVar6 = (int *)(local_500 + 0x14);
      do {
        cVar16 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar15) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar35 + 4)) {
      local_534 = 0;
      Mat::copySize((Mat *)&local_538,pMVar35);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  local_7a8 = (Mat *)&local_538;
  pcVar44 = (code *)(&PTR_FUN_004f5a40)[(int)uVar9];
  ppMVar10 = &local_6f8;
  if ((uVar22 & uVar21) == 0) {
    ppMVar10 = &local_6c0;
  }
  local_6e8 = 0;
  local_6f8 = local_7c0;
  local_6f0 = local_7a8;
  local_6a0 = 0;
  local_6c0 = local_7c0;
  local_6b8 = local_7a8;
  local_6b0 = (Mat *)&local_5f8;
  local_6a8 = (Mat *)&local_598;
  NAryMatIterator::NAryMatIterator(aNStack_698,ppMVar10,&local_6e0,-1);
  lVar46 = (long)(int)uVar4;
  if (local_670 < uVar12) {
    uVar12 = local_670;
  }
  pbVar27 = abStack_408;
  local_418 = pbVar27;
  uVar48 = (long)(int)(uVar4 * 2) * 4 + 0x80 +
           (lVar46 + uVar26 * (long)(int)(uVar21 + uVar22)) * uVar12;
  local_410 = 0x408;
  if (uVar48 < 0x409) {
    local_410 = uVar48;
  }
  else {
    pbVar27 = operator_new__(uVar48);
  }
  uVar47 = (ulong)(pbVar27 + uVar12 * lVar46 + 0xf) & 0xfffffffffffffff0;
  local_418 = pbVar27;
  local_410 = uVar48;
  if ((uVar22 & uVar21) == 0) {
    uVar47 = 0;
    local_7b8 = (uchar *)0x0;
    goto LAB_00250ea8;
  }
  local_7b8 = (uchar *)(uVar47 + uVar12 * uVar26 + 0xf & 0xfffffffffffffff0);
  if ((local_5f8 & 0xfff) != (local_598 & 0xfff)) {
    local_728 = 0;
    local_720 = 0;
    puVar28 = (undefined8 *)String::allocate((String *)&local_728,0x16);
    uVar14 = _LAB_00460bec;
    uVar13 = DAT_00460be0;
    uVar49 = DAT_00460bd8;
    *(undefined4 *)(puVar28 + 2) = _LAB_00460be8;
    *(undefined2 *)((long)puVar28 + 0x14) = uVar14;
    *puVar28 = uVar49;
    puVar28[1] = uVar13;
    error(-0xd7,(String *)&local_728,
          "void cv::inRange(cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1668);
    String::deallocate((String *)&local_728);
  }
  uVar23 = local_5f8 & 7;
  if ((uVar23 != uVar9) && (uVar9 < 4)) {
    uVar48 = (ulong)(local_7b8 + uVar12 * uVar26 + 0xf) & 0xfffffffffffffff0;
    lVar7 = uVar48 + lVar46 * 4;
    pcVar29 = (code *)FUN_00283fe0(uVar23,4);
    local_474 = 1;
    local_478 = uVar4;
    (*pcVar29)();
    local_474 = 1;
    local_478 = uVar4;
    (*pcVar29)(local_588,1,0,1,lVar7,1,(Mat *)&local_478,0);
    lVar30 = lrint(*(double *)(&DAT_00461300 + (long)(int)uVar9 * 8));
    iVar17 = (int)lVar30;
    lVar31 = lrint(*(double *)(&DAT_00460df0 + (long)(int)uVar9 * 8));
    lVar30 = 0;
    do {
      while ((iVar18 = *(int *)(lVar7 + lVar30 * 4), iVar19 = *(int *)(uVar48 + lVar30 * 4),
             iVar19 <= iVar18 && iVar19 <= (int)lVar31 && (iVar17 <= iVar18))) {
        lVar30 = lVar30 + 1;
        if ((int)uVar4 <= (int)lVar30) goto LAB_00250844;
      }
      *(int *)(uVar48 + lVar30 * 4) = iVar17 + 1;
      *(int *)(lVar7 + lVar30 * 4) = iVar17;
      lVar30 = lVar30 + 1;
    } while ((int)lVar30 < (int)uVar4);
LAB_00250844:
    local_498 = local_4d0;
    local_4d4 = 2;
    local_4d0[1] = 1;
    local_490 = &local_488;
    local_488 = 4;
    local_480 = 4;
    local_4a8 = 0;
    local_4a0 = 0;
    local_4d8 = 0x42ff4004;
    local_4d0[0] = uVar4;
    local_4c8 = uVar48;
    local_4c0 = uVar48;
    local_4b8 = lVar7;
    local_4b0 = lVar7;
    Mat::operator=((Mat *)&local_5f8,(Mat *)&local_4d8);
    Mat::release((Mat *)&local_4d8);
    if (local_490 != &local_488) {
      fastFree(local_490);
    }
    local_438 = local_470;
    local_430 = &local_428;
    local_474 = 2;
    local_458 = lVar7 + lVar46 * 4;
    local_428 = 4;
    local_420 = 4;
    local_470[1] = 1;
    local_448 = 0;
    local_440 = 0;
    local_478 = 0x42ff4004;
    local_470[0] = uVar4;
    local_468 = lVar7;
    local_460 = lVar7;
    local_450 = local_458;
    Mat::operator=((Mat *)&local_598,(Mat *)&local_478);
    if (local_440 != 0) {
      piVar6 = (int *)(local_440 + 0x14);
      do {
        iVar17 = *piVar6;
        cVar16 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar15) {
          *piVar6 = iVar17 + -1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
      if (iVar17 == 1) {
        Mat::deallocate((Mat *)&local_478);
      }
    }
    local_440 = 0;
    local_468 = 0;
    local_450 = 0;
    local_458 = 0;
    local_460 = 0;
    if (0 < local_474) {
      iVar17 = 0;
      puVar33 = local_438;
      do {
        *puVar33 = 0;
        iVar17 = iVar17 + 1;
        puVar33 = puVar33 + 1;
      } while (iVar17 < local_474);
    }
    if (local_430 != &local_428) {
      fastFree(local_430);
    }
    uVar23 = local_5f8 & 7;
  }
  if (local_5f4 < 3) {
    iVar17 = local_5ec * local_5f0;
  }
  else {
    iVar17 = 1;
    lVar30 = 0;
    do {
      puVar33 = local_5b8 + lVar30;
      lVar30 = lVar30 + 1;
      iVar17 = iVar17 * *puVar33;
    } while ((int)lVar30 < local_5f4);
  }
  uVar9 = local_658 & 7;
  iVar18 = (local_658 >> 3 & 0x1ff) + 1;
  uVar48 = (ulong)(iVar18 << (ulong)((uint)(0xfa50L >> (uVar9 << 1)) & 3));
  pcVar29 = (code *)FUN_00283fe0(uVar23,local_658 & 0xfff);
  local_768[0] = iVar17;
  if (iVar18 < iVar17) {
    local_768[0] = iVar18;
  }
  local_768[1] = 1;
  (*pcVar29)(local_5e8,1,0,1,uVar47,1,local_768,0);
  if (iVar17 < iVar18) {
    if (iVar17 != 1) {
      local_718 = 0;
      local_710 = 0;
      pcVar25 = (char *)String::allocate((String *)&local_718,8);
      *(undefined8 *)pcVar25 = s_scn____1_004607e0._0_8_;
      error(-0xd7,(String *)&local_718,
            "void cv::convertAndUnrollScalar(const cv::Mat&, int, uchar*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x588);
      String::deallocate((String *)&local_718);
    }
    uVar42 = 0x88442211UL >> (uVar9 << 2) & 0xf;
    if (uVar42 < uVar48) {
      puVar28 = (undefined8 *)(uVar47 + uVar42);
      uVar39 = uVar48 - uVar42;
      if ((puVar28 < (undefined8 *)(uVar47 + 0x10)) || (uVar39 < 0x10)) {
        lVar30 = uVar47 - uVar42;
        do {
          *(undefined1 *)(uVar47 + uVar42) = *(undefined1 *)(lVar30 + uVar42);
          uVar42 = uVar42 + 1;
        } while (uVar48 != uVar42);
      }
      else {
        uVar38 = (uVar39 - 0x10 >> 4) + 1;
        lVar30 = uVar38 * 0x10;
        uVar40 = uVar42;
        if (0xe < uVar48 + ~uVar42) {
          uVar40 = 0;
          puVar36 = puVar28;
          do {
            puVar8 = (undefined8 *)((long)puVar36 + (uVar47 - (long)puVar28));
            uVar40 = uVar40 + 1;
            uVar49 = *puVar8;
            puVar36[1] = puVar8[1];
            *puVar36 = uVar49;
            puVar36 = puVar36 + 2;
          } while (uVar40 < uVar38);
          uVar40 = lVar30 + uVar42;
          if (lVar30 - uVar39 == 0) goto LAB_00250a60;
        }
        uVar39 = uVar40 + 1;
        *(undefined1 *)(uVar47 + uVar40) = *(undefined1 *)(uVar47 + (uVar40 - uVar42));
        if (uVar39 < uVar48) {
          uVar38 = uVar40 + 2;
          *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar42));
          if (uVar38 < uVar48) {
            uVar39 = uVar40 + 3;
            *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar42));
            if (uVar39 < uVar48) {
              uVar38 = uVar40 + 4;
              *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar42));
              if (uVar38 < uVar48) {
                uVar39 = uVar40 + 5;
                *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar42));
                if (uVar39 < uVar48) {
                  uVar38 = uVar40 + 6;
                  *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar42));
                  if (uVar38 < uVar48) {
                    uVar39 = uVar40 + 7;
                    *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar42));
                    if (uVar39 < uVar48) {
                      uVar38 = uVar40 + 8;
                      *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar42))
                      ;
                      if (uVar38 < uVar48) {
                        uVar39 = uVar40 + 9;
                        *(undefined1 *)(uVar47 + uVar38) =
                             *(undefined1 *)(uVar47 + (uVar38 - uVar42));
                        if (uVar39 < uVar48) {
                          uVar38 = uVar40 + 10;
                          *(undefined1 *)(uVar47 + uVar39) =
                               *(undefined1 *)(uVar47 + (uVar39 - uVar42));
                          if (uVar38 < uVar48) {
                            uVar39 = uVar40 + 0xb;
                            *(undefined1 *)(uVar47 + uVar38) =
                                 *(undefined1 *)(uVar47 + (uVar38 - uVar42));
                            if (uVar39 < uVar48) {
                              uVar38 = uVar40 + 0xc;
                              *(undefined1 *)(uVar47 + uVar39) =
                                   *(undefined1 *)(uVar47 + (uVar39 - uVar42));
                              if (uVar38 < uVar48) {
                                uVar39 = uVar40 + 0xd;
                                *(undefined1 *)(uVar47 + uVar38) =
                                     *(undefined1 *)(uVar47 + (uVar38 - uVar42));
                                if (uVar39 < uVar48) {
                                  uVar40 = uVar40 + 0xe;
                                  *(undefined1 *)(uVar47 + uVar39) =
                                       *(undefined1 *)(uVar47 + (uVar39 - uVar42));
                                  if (uVar40 < uVar48) {
                                    *(undefined1 *)(uVar47 + uVar40) =
                                         *(undefined1 *)(uVar47 + (uVar40 - uVar42));
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00250a60:
  uVar42 = uVar12 * uVar48;
  if (uVar48 < uVar42) {
    puVar28 = (undefined8 *)(uVar47 + uVar48);
    uVar39 = uVar42 - uVar48;
    if ((puVar28 < (undefined8 *)(uVar47 + 0x10)) || (uVar39 < 0x10)) {
      lVar30 = uVar47 - uVar48;
      do {
        *(undefined1 *)(uVar47 + uVar48) = *(undefined1 *)(lVar30 + uVar48);
        uVar48 = uVar48 + 1;
      } while (uVar48 != uVar42);
    }
    else {
      uVar38 = (uVar39 - 0x10 >> 4) + 1;
      lVar30 = uVar38 * 0x10;
      uVar40 = uVar48;
      if (0xe < ~uVar48 + uVar42) {
        uVar40 = 0;
        puVar36 = puVar28;
        do {
          puVar8 = (undefined8 *)((long)puVar36 + (uVar47 - (long)puVar28));
          uVar40 = uVar40 + 1;
          uVar49 = *puVar8;
          puVar36[1] = puVar8[1];
          *puVar36 = uVar49;
          puVar36 = puVar36 + 2;
        } while (uVar40 < uVar38);
        uVar40 = lVar30 + uVar48;
        if (lVar30 - uVar39 == 0) goto LAB_00250c30;
      }
      uVar39 = uVar40 + 1;
      *(undefined1 *)(uVar47 + uVar40) = *(undefined1 *)(uVar47 + (uVar40 - uVar48));
      if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
        uVar38 = uVar40 + 2;
        *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar48));
        if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
          uVar39 = uVar40 + 3;
          *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar48));
          if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
            uVar38 = uVar40 + 4;
            *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar48));
            if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
              uVar39 = uVar40 + 5;
              *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar48));
              if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                uVar38 = uVar40 + 6;
                *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar48));
                if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                  uVar39 = uVar40 + 7;
                  *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar48));
                  if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                    uVar38 = uVar40 + 8;
                    *(undefined1 *)(uVar47 + uVar39) = *(undefined1 *)(uVar47 + (uVar39 - uVar48));
                    if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                      uVar39 = uVar40 + 9;
                      *(undefined1 *)(uVar47 + uVar38) = *(undefined1 *)(uVar47 + (uVar38 - uVar48))
                      ;
                      if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                        uVar38 = uVar40 + 10;
                        *(undefined1 *)(uVar47 + uVar39) =
                             *(undefined1 *)(uVar47 + (uVar39 - uVar48));
                        if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                          uVar39 = uVar40 + 0xb;
                          *(undefined1 *)(uVar47 + uVar38) =
                               *(undefined1 *)(uVar47 + (uVar38 - uVar48));
                          if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                            uVar38 = uVar40 + 0xc;
                            *(undefined1 *)(uVar47 + uVar39) =
                                 *(undefined1 *)(uVar47 + (uVar39 - uVar48));
                            if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                              uVar39 = uVar40 + 0xd;
                              *(undefined1 *)(uVar47 + uVar38) =
                                   *(undefined1 *)(uVar47 + (uVar38 - uVar48));
                              if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                                uVar40 = uVar40 + 0xe;
                                *(undefined1 *)(uVar47 + uVar39) =
                                     *(undefined1 *)(uVar47 + (uVar39 - uVar48));
                                if (uVar40 <= uVar42 && uVar42 - uVar40 != 0) {
                                  *(undefined1 *)(uVar47 + uVar40) =
                                       *(undefined1 *)(uVar47 + (uVar40 - uVar48));
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00250c30:
  if (local_594 < 3) {
    iVar17 = local_58c * local_590;
  }
  else {
    lVar30 = 0;
    iVar17 = 1;
    do {
      puVar33 = local_558 + lVar30;
      lVar30 = lVar30 + 1;
      iVar17 = iVar17 * *puVar33;
    } while ((int)lVar30 < local_594);
  }
  uVar9 = local_658 & 7;
  iVar18 = (local_658 >> 3 & 0x1ff) + 1;
  uVar48 = (ulong)(iVar18 << (ulong)((uint)(0xfa50L >> (uVar9 << 1)) & 3));
  pcVar29 = (code *)FUN_00283fe0(local_598 & 7,local_658 & 0xfff);
  local_75c = 1;
  local_768[2] = iVar17;
  if (iVar18 < iVar17) {
    local_768[2] = iVar18;
  }
  (*pcVar29)(local_588,1,0,1,local_7b8,1,local_768 + 2,0);
  if (iVar17 < iVar18) {
    if (iVar17 != 1) {
      local_708 = 0;
      local_700 = 0;
      pcVar25 = (char *)String::allocate((String *)&local_708,8);
      *(undefined8 *)pcVar25 = s_scn____1_004607e0._0_8_;
      error(-0xd7,(String *)&local_708,
            "void cv::convertAndUnrollScalar(const cv::Mat&, int, uchar*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x588);
      String::deallocate((String *)&local_708);
    }
    uVar42 = 0x88442211UL >> (uVar9 << 2) & 0xf;
    if (uVar42 < uVar48) {
      puVar41 = local_7b8 + uVar42;
      uVar39 = uVar48 - uVar42;
      if ((puVar41 < local_7b8 + 0x10) || (uVar39 < 0x10)) {
        uVar39 = uVar42;
        do {
          local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
          uVar39 = uVar39 + 1;
        } while (uVar48 != uVar39);
      }
      else {
        uVar38 = (uVar39 - 0x10 >> 4) + 1;
        lVar30 = uVar38 * 0x10;
        uVar40 = uVar42;
        if (0xe < uVar48 + ~uVar42) {
          uVar40 = 0;
          puVar37 = puVar41;
          do {
            uVar40 = uVar40 + 1;
            uVar49 = *(undefined8 *)(puVar37 + ((long)local_7b8 - (long)puVar41));
            *(undefined8 *)(puVar37 + 8) =
                 *(undefined8 *)(puVar37 + ((long)local_7b8 - (long)puVar41) + 8);
            *(undefined8 *)puVar37 = uVar49;
            puVar37 = puVar37 + 0x10;
          } while (uVar40 < uVar38);
          uVar40 = lVar30 + uVar42;
          if (lVar30 - uVar39 == 0) goto LAB_00250cd8;
        }
        uVar39 = uVar40 + 1;
        local_7b8[uVar40] = local_7b8[uVar40 - uVar42];
        if (uVar39 < uVar48) {
          uVar38 = uVar40 + 2;
          local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
          if (uVar38 < uVar48) {
            uVar39 = uVar40 + 3;
            local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
            if (uVar39 < uVar48) {
              uVar38 = uVar40 + 4;
              local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
              if (uVar38 < uVar48) {
                uVar39 = uVar40 + 5;
                local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
                if (uVar39 < uVar48) {
                  uVar38 = uVar40 + 6;
                  local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
                  if (uVar38 < uVar48) {
                    uVar39 = uVar40 + 7;
                    local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
                    if (uVar39 < uVar48) {
                      uVar38 = uVar40 + 8;
                      local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
                      if (uVar38 < uVar48) {
                        uVar39 = uVar40 + 9;
                        local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
                        if (uVar39 < uVar48) {
                          uVar38 = uVar40 + 10;
                          local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
                          if (uVar38 < uVar48) {
                            uVar39 = uVar40 + 0xb;
                            local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
                            if (uVar39 < uVar48) {
                              uVar38 = uVar40 + 0xc;
                              local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
                              if (uVar38 < uVar48) {
                                uVar39 = uVar40 + 0xd;
                                local_7b8[uVar38] = local_7b8[uVar38 - uVar42];
                                if (uVar39 < uVar48) {
                                  uVar40 = uVar40 + 0xe;
                                  local_7b8[uVar39] = local_7b8[uVar39 - uVar42];
                                  if (uVar40 < uVar48) {
                                    local_7b8[uVar40] = local_7b8[uVar40 - uVar42];
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00250cd8:
  uVar42 = uVar12 * uVar48;
  if (uVar48 < uVar42) {
    puVar41 = local_7b8 + uVar48;
    uVar39 = uVar42 - uVar48;
    if ((puVar41 < local_7b8 + 0x10) || (uVar39 < 0x10)) {
      uVar39 = uVar48;
      do {
        local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
        uVar39 = uVar39 + 1;
      } while (uVar39 != uVar42);
    }
    else {
      uVar38 = (uVar39 - 0x10 >> 4) + 1;
      uVar32 = uVar38 * 0x10;
      uVar40 = uVar48;
      if (0xe < ~uVar48 + uVar42) {
        uVar40 = 0;
        puVar37 = puVar41;
        do {
          uVar40 = uVar40 + 1;
          uVar49 = *(undefined8 *)(puVar37 + ((long)local_7b8 - (long)puVar41));
          *(undefined8 *)(puVar37 + 8) =
               *(undefined8 *)(puVar37 + ((long)local_7b8 - (long)puVar41) + 8);
          *(undefined8 *)puVar37 = uVar49;
          puVar37 = puVar37 + 0x10;
        } while (uVar40 < uVar38);
        uVar40 = uVar32 + uVar48;
        if (uVar39 == uVar32) goto LAB_00250ea8;
      }
      uVar39 = uVar40 + 1;
      local_7b8[uVar40] = local_7b8[uVar40 - uVar48];
      if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
        uVar38 = uVar40 + 2;
        local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
        if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
          uVar39 = uVar40 + 3;
          local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
          if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
            uVar38 = uVar40 + 4;
            local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
            if (uVar38 < uVar42) {
              uVar39 = uVar40 + 5;
              local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
              if (uVar39 < uVar42) {
                uVar38 = uVar40 + 6;
                local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
                if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                  uVar39 = uVar40 + 7;
                  local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
                  if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                    uVar38 = uVar40 + 8;
                    local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
                    if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                      uVar39 = uVar40 + 9;
                      local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
                      if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                        uVar38 = uVar40 + 10;
                        local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
                        if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                          uVar39 = uVar40 + 0xb;
                          local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
                          if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                            uVar38 = uVar40 + 0xc;
                            local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
                            if (uVar38 <= uVar42 && uVar42 - uVar38 != 0) {
                              uVar39 = uVar40 + 0xd;
                              local_7b8[uVar38] = local_7b8[uVar38 - uVar48];
                              if (uVar39 <= uVar42 && uVar42 - uVar39 != 0) {
                                uVar40 = uVar40 + 0xe;
                                local_7b8[uVar39] = local_7b8[uVar39 - uVar48];
                                if (uVar40 <= uVar42 && uVar42 - uVar40 != 0) {
                                  local_7b8[uVar40] = local_7b8[uVar40 - uVar48];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00250ea8:
  uVar9 = uVar4 & 3;
  local_790 = 0;
  uVar23 = uVar9;
  if (uVar9 == 0) {
    uVar23 = 4;
  }
  if (local_678 != 0) {
    do {
      uVar48 = local_670;
      uVar42 = uVar12;
      if (local_670 != 0) {
        do {
          uVar38 = local_6d0;
          uVar39 = uVar12;
          if (uVar48 < uVar12) {
            uVar39 = uVar48;
          }
          uVar40 = (ulong)(int)uVar39;
          lVar30 = uVar40 * uVar26;
          puVar41 = local_7b8;
          if (uVar21 == 0) {
            local_6d0 = local_6d0 + lVar30;
            if (uVar22 == 0) {
              iVar17 = 3;
LAB_00250f3c:
              puVar41 = (&local_6e0)[iVar17];
              (&local_6e0)[iVar17] = puVar41 + lVar30;
            }
          }
          else {
            uVar38 = uVar47;
            if (uVar22 == 0) {
              iVar17 = 2;
              goto LAB_00250f3c;
            }
          }
          pbVar34 = pbVar27;
          if (uVar4 == 1) {
            pbVar34 = pbStack_6d8;
          }
          local_478 = uVar4 * (int)uVar39;
          local_474 = 1;
          (*pcVar44)(local_6e0,0,uVar38,0,puVar41,0,pbVar34,0,&local_478);
          if (uVar4 != 1) {
            if (uVar9 == 0) {
LAB_00250f9c:
              uVar39 = 0;
              pbVar34 = pbVar27;
              uVar45 = uVar23;
              if (uVar40 != 0) {
                do {
                  pbVar43 = pbVar34 + 1;
                  bVar11 = *pbVar34;
                  pbVar1 = pbVar34 + 2;
                  pbVar2 = pbVar34 + 3;
                  pbVar34 = pbVar34 + lVar46;
                  pbStack_6d8[uVar39] = *pbVar43 & bVar11 & *pbVar1 & *pbVar2;
                  uVar39 = uVar39 + 1;
                } while (uVar39 < uVar40);
              }
LAB_00250fdc:
              if (uVar4 <= uVar45) goto LAB_00251058;
            }
            else {
              if (uVar9 != 1) {
                if (uVar9 == 2) {
                  uVar39 = 0;
                  pbVar34 = pbVar27;
                  if (uVar40 != 0) {
                    do {
                      pbVar43 = pbVar34 + 1;
                      bVar11 = *pbVar34;
                      pbVar34 = pbVar34 + lVar46;
                      pbStack_6d8[uVar39] = *pbVar43 & bVar11;
                      uVar39 = uVar39 + 1;
                    } while (uVar39 < uVar40);
                  }
                  uVar45 = 2;
                }
                else {
                  if (uVar9 != 3) goto LAB_00250f9c;
                  uVar39 = 0;
                  pbVar34 = pbVar27;
                  if (uVar40 != 0) {
                    do {
                      pbVar43 = pbVar34 + 1;
                      bVar11 = *pbVar34;
                      pbVar1 = pbVar34 + 2;
                      pbVar34 = pbVar34 + lVar46;
                      pbStack_6d8[uVar39] = *pbVar43 & bVar11 & *pbVar1;
                      uVar39 = uVar39 + 1;
                    } while (uVar39 < uVar40);
                  }
                  uVar45 = 3;
                }
                goto LAB_00250fdc;
              }
              uVar39 = 0;
              pbVar34 = pbVar27;
              if (uVar40 != 0) {
                do {
                  bVar11 = *pbVar34;
                  pbVar34 = pbVar34 + lVar46;
                  pbStack_6d8[uVar39] = bVar11;
                  uVar39 = uVar39 + 1;
                } while (uVar39 < uVar40);
              }
              uVar45 = 1;
            }
            pbVar34 = pbVar27 + (int)uVar45;
            do {
              uVar39 = 0;
              pbVar43 = pbVar34;
              if (uVar40 != 0) {
                do {
                  bVar11 = *pbVar43;
                  pbVar1 = pbVar43 + 1;
                  pbVar2 = pbVar43 + 2;
                  pbVar3 = pbVar43 + 3;
                  pbVar43 = pbVar43 + lVar46;
                  pbStack_6d8[uVar39] = bVar11 & *pbVar1 & pbStack_6d8[uVar39] & *pbVar2 & *pbVar3;
                  uVar39 = uVar39 + 1;
                } while (uVar39 < uVar40);
              }
              pbVar34 = pbVar34 + 4;
            } while (pbVar34 != pbVar27 + (long)(int)uVar45 + 4 + (ulong)(uVar5 - uVar45 >> 2) * 4);
          }
LAB_00251058:
          uVar48 = uVar48 - uVar12;
          pbStack_6d8 = pbStack_6d8 + uVar40;
          local_6e0 = local_6e0 + lVar30;
          bVar15 = uVar42 < local_670;
          uVar42 = uVar42 + uVar12;
        } while (bVar15);
      }
      local_790 = local_790 + 1;
      NAryMatIterator::operator++(aNStack_698);
    } while (local_790 < local_678);
  }
  if ((local_418 != abStack_408) && (local_418 != (byte *)0x0)) {
    operator_delete__(local_418);
  }
  Mat::release(local_7a8);
  if (local_4f0 != &local_4e8) {
    fastFree(local_4f0);
  }
  if (local_560 != 0) {
    piVar6 = (int *)(local_560 + 0x14);
    do {
      iVar17 = *piVar6;
      cVar16 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar15) {
        *piVar6 = iVar17 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_598);
    }
  }
  local_560 = 0;
  local_588 = 0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar17 = 0;
    puVar33 = local_558;
    do {
      *puVar33 = 0;
      iVar17 = iVar17 + 1;
      puVar33 = puVar33 + 1;
    } while (iVar17 < local_594);
  }
  if (local_550 != &local_548) {
    fastFree(local_550);
  }
  Mat::release((Mat *)&local_5f8);
  if (local_5b0 != &local_5a8) {
    fastFree(local_5b0);
  }
  Mat::release(local_7c0);
  if (local_610 != &local_608) {
    fastFree(local_610);
  }
  return;
}


==================================================================

### FUNC 00251eb0 (668 bytes) name=cvNot

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvNot(cv *param_1,cv *param_2)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  _InputArray *p_Var9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_0025210c;
    }
    else if (iVar11 < 1) {
LAB_0025210c:
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_00251f78;
    }
    else if (*local_80 == *local_20) {
      piVar10 = local_80;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_0025210c;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar12);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar8 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_t_type___0045fdf8._0_8_;
  uVar6 = _LAB_0045fdf0;
  uVar5 = _LAB_0045fde8;
  uVar4 = DAT_0045fde0;
  uVar3 = DAT_0045fdd8;
  *puVar8 = DAT_0045fdd0;
  puVar8[1] = uVar3;
  puVar8[2] = uVar4;
  puVar8[3] = uVar5;
  puVar8[4] = uVar6;
  puVar8[5] = uVar7;
  cv::error(-0xd7,(String *)&local_d8,"void cvNot(const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16a5);
  cv::String::deallocate((String *)&local_d8);
LAB_00251f78:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  p_Var9 = (_InputArray *)cv::noArray();
  cv::bitwise_not((_InputArray *)local_f0,(_OutputArray *)&local_d8,p_Var9);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002521b0 (1560 bytes) name=cvAnd

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAnd(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  int *piVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int *piVar13;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  local_1a0 = &local_1d8;
  local_1e0 = DAT_002528a0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_1d8 = 0;
  local_188 = 0;
  local_190 = 0;
  iVar9 = local_e0[-1];
  if (iVar9 == local_20[-1]) {
    if (iVar9 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_0025277c;
      goto LAB_00252290;
    }
    if (0 < iVar9) {
      if (*local_e0 == *local_20) {
        piVar10 = local_e0;
        piVar13 = local_20;
        do {
          piVar13 = piVar13 + 1;
          if (piVar10 == local_e0 + (iVar9 - 1)) goto LAB_0025277c;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar13);
      }
      goto LAB_00252290;
    }
LAB_0025277c:
    if ((local_120 & 0xfff) != (local_60 & 0xfff)) goto LAB_00252290;
  }
  else {
LAB_00252290:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_1f8,0x32);
    uVar8 = _LAB_00460c18;
    uVar7 = DAT_00460c10;
    uVar6 = DAT_00460c08;
    uVar5 = DAT_00460c00;
    uVar4 = DAT_00460bf8;
    uVar3 = DAT_00460bf0;
    *(undefined2 *)(param_6 + 0x30) = _LAB_00460c20;
    *(undefined8 *)param_6 = uVar3;
    *(undefined8 *)(param_6 + 8) = uVar4;
    *(undefined8 *)(param_6 + 0x10) = uVar5;
    *(undefined8 *)(param_6 + 0x18) = uVar6;
    *(undefined8 *)(param_6 + 0x20) = uVar7;
    *(undefined8 *)(param_6 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_1f8,
              "void cvAnd(const CvArr*, const CvArr*, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16af);
    cv::String::deallocate((String *)&local_1f8);
  }
  if (param_4 == (cv *)0x0) goto LAB_00252468;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar12 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_002523ac:
    if (2 < local_17c) goto LAB_002523b8;
    local_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar12[1];
  }
  else {
    iVar9 = 0;
    puVar11 = local_1a0;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar9 = iVar9 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar9 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_002523ac;
LAB_002523b8:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar9 = 0;
    do {
      *local_140 = 0;
      iVar9 = iVar9 + 1;
      local_140 = local_140 + 1;
    } while (iVar9 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
LAB_00252468:
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_170 = 0;
  local_180 = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_60;
  local_178 = (Mat *)&local_1e0;
  cv::bitwise_and((_InputArray *)local_228,(_InputArray *)local_210,(_OutputArray *)&local_1f8,
                  (_InputArray *)&local_180);
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar9 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar9 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002528a8 (1560 bytes) name=cvOr

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvOr(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  int *piVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int *piVar13;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  local_1a0 = &local_1d8;
  local_1e0 = DAT_00252f98;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_1d8 = 0;
  local_188 = 0;
  local_190 = 0;
  iVar9 = local_e0[-1];
  if (iVar9 == local_20[-1]) {
    if (iVar9 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_00252e74;
      goto LAB_00252988;
    }
    if (0 < iVar9) {
      if (*local_e0 == *local_20) {
        piVar10 = local_e0;
        piVar13 = local_20;
        do {
          piVar13 = piVar13 + 1;
          if (piVar10 == local_e0 + (iVar9 - 1)) goto LAB_00252e74;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar13);
      }
      goto LAB_00252988;
    }
LAB_00252e74:
    if ((local_120 & 0xfff) != (local_60 & 0xfff)) goto LAB_00252988;
  }
  else {
LAB_00252988:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_1f8,0x32);
    uVar8 = _LAB_00460c18;
    uVar7 = DAT_00460c10;
    uVar6 = DAT_00460c08;
    uVar5 = DAT_00460c00;
    uVar4 = DAT_00460bf8;
    uVar3 = DAT_00460bf0;
    *(undefined2 *)(param_6 + 0x30) = _LAB_00460c20;
    *(undefined8 *)param_6 = uVar3;
    *(undefined8 *)(param_6 + 8) = uVar4;
    *(undefined8 *)(param_6 + 0x10) = uVar5;
    *(undefined8 *)(param_6 + 0x18) = uVar6;
    *(undefined8 *)(param_6 + 0x20) = uVar7;
    *(undefined8 *)(param_6 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_1f8,
              "void cvOr(const CvArr*, const CvArr*, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16bb);
    cv::String::deallocate((String *)&local_1f8);
  }
  if (param_4 == (cv *)0x0) goto LAB_00252b60;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar12 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_00252aa4:
    if (2 < local_17c) goto LAB_00252ab0;
    local_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar12[1];
  }
  else {
    iVar9 = 0;
    puVar11 = local_1a0;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar9 = iVar9 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar9 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_00252aa4;
LAB_00252ab0:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar9 = 0;
    do {
      *local_140 = 0;
      iVar9 = iVar9 + 1;
      local_140 = local_140 + 1;
    } while (iVar9 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
LAB_00252b60:
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_170 = 0;
  local_180 = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_60;
  local_178 = (Mat *)&local_1e0;
  cv::bitwise_or((_InputArray *)local_228,(_InputArray *)local_210,(_OutputArray *)&local_1f8,
                 (_InputArray *)&local_180);
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar9 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar9 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00252fa0 (1560 bytes) name=cvXor

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvXor(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  int *piVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int *piVar13;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  local_1a0 = &local_1d8;
  local_1e0 = DAT_00253690;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_1d8 = 0;
  local_188 = 0;
  local_190 = 0;
  iVar9 = local_e0[-1];
  if (iVar9 == local_20[-1]) {
    if (iVar9 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_0025356c;
      goto LAB_00253080;
    }
    if (0 < iVar9) {
      if (*local_e0 == *local_20) {
        piVar10 = local_e0;
        piVar13 = local_20;
        do {
          piVar13 = piVar13 + 1;
          if (piVar10 == local_e0 + (iVar9 - 1)) goto LAB_0025356c;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar13);
      }
      goto LAB_00253080;
    }
LAB_0025356c:
    if ((local_120 & 0xfff) != (local_60 & 0xfff)) goto LAB_00253080;
  }
  else {
LAB_00253080:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_1f8,0x32);
    uVar8 = _LAB_00460c18;
    uVar7 = DAT_00460c10;
    uVar6 = DAT_00460c08;
    uVar5 = DAT_00460c00;
    uVar4 = DAT_00460bf8;
    uVar3 = DAT_00460bf0;
    *(undefined2 *)(param_6 + 0x30) = _LAB_00460c20;
    *(undefined8 *)param_6 = uVar3;
    *(undefined8 *)(param_6 + 8) = uVar4;
    *(undefined8 *)(param_6 + 0x10) = uVar5;
    *(undefined8 *)(param_6 + 0x18) = uVar6;
    *(undefined8 *)(param_6 + 0x20) = uVar7;
    *(undefined8 *)(param_6 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_1f8,
              "void cvXor(const CvArr*, const CvArr*, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16c7);
    cv::String::deallocate((String *)&local_1f8);
  }
  if (param_4 == (cv *)0x0) goto LAB_00253258;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar12 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_0025319c:
    if (2 < local_17c) goto LAB_002531a8;
    local_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar12[1];
  }
  else {
    iVar9 = 0;
    puVar11 = local_1a0;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar9 = iVar9 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar9 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_0025319c;
LAB_002531a8:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar9 = 0;
    do {
      *local_140 = 0;
      iVar9 = iVar9 + 1;
      local_140 = local_140 + 1;
    } while (iVar9 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
LAB_00253258:
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_170 = 0;
  local_180 = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_60;
  local_178 = (Mat *)&local_1e0;
  cv::bitwise_xor((_InputArray *)local_228,(_InputArray *)local_210,(_OutputArray *)&local_1f8,
                  (_InputArray *)&local_180);
  if (lStack_1a8 != 0) {
    piVar10 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar9 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar9 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00253698 (1452 bytes) name=cvAndS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAndS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
           cv *param_6,cv *param_7,undefined8 param_8,undefined8 param_9,AutoBuffer *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  local_138 = &local_130;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  local_140 = &local_178;
  local_180 = DAT_00253cf0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_178 = 0;
  local_128 = 0;
  local_130 = 0;
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00253bec;
      goto LAB_00253768;
    }
    if (0 < iVar11) {
      if (*local_80 == *local_20) {
        piVar10 = local_80;
        piVar12 = local_20;
        do {
          piVar12 = piVar12 + 1;
          if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_00253bec;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar12);
      }
      goto LAB_00253768;
    }
LAB_00253bec:
    if ((local_c0 & 0xfff) != (local_60 & 0xfff)) goto LAB_00253768;
  }
  else {
LAB_00253768:
    local_198 = 0;
    local_190 = (Mat *)0x0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_198,0x30);
    uVar7 = s_t_type___0045fdf8._0_8_;
    uVar6 = _LAB_0045fdf0;
    uVar5 = _LAB_0045fde8;
    uVar4 = DAT_0045fde0;
    uVar3 = DAT_0045fdd8;
    param_10 = (AutoBuffer *)&DAT_0045fdd0;
    *puVar8 = DAT_0045fdd0;
    puVar8[1] = uVar3;
    puVar8[2] = uVar4;
    puVar8[3] = uVar5;
    puVar8[4] = uVar6;
    puVar8[5] = uVar7;
    cv::error(-0xd7,(String *)&local_198,"void cvAndS(const CvArr*, CvScalar, CvArr*, const CvArr*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16d2);
    cv::String::deallocate((String *)&local_198);
  }
  if (param_7 == (cv *)0x0) goto LAB_00253958;
  cv::cvarrToMat(param_7,(void *)0x0,true,false,0,param_10);
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar8 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_0025387c:
    if (2 < local_120._4_4_) goto LAB_00253b64;
    local_178 = local_118;
    local_180 = local_120;
    *local_138 = *local_d8;
    local_138[1] = puVar8[1];
  }
  else {
    iVar11 = 0;
    puVar9 = local_140;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar11 = iVar11 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar11 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_0025387c;
LAB_00253b64:
    local_180 = CONCAT44(local_180._4_4_,(undefined4)local_120);
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar11 = 0;
    do {
      *local_e0 = 0;
      iVar11 = iVar11 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar11 < local_120._4_4_);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00253958:
  local_1b8 = 1;
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_1d0 = 0;
  local_1cc = 0;
  local_1e0[0] = 0x1010000;
  local_1c8[0] = 0xc1020006;
  local_1b4 = 4;
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x2010000;
  local_1d8 = (Mat *)&local_c0;
  local_1c0 = (Mat *)&local_120;
  local_1a8 = (Mat *)&local_60;
  local_190 = (Mat *)&local_180;
  local_120 = param_1;
  local_118 = param_2;
  local_110 = param_3;
  uStack_108 = param_4;
  cv::bitwise_and((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_OutputArray *)local_1b0,
                  (_InputArray *)&local_198);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar11 = 0;
    puVar8 = local_140;
    do {
      *(undefined4 *)puVar8 = 0;
      iVar11 = iVar11 + 1;
      puVar8 = (undefined8 *)((long)puVar8 + 4);
    } while (iVar11 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00253cf8 (1452 bytes) name=cvOrS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvOrS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
          cv *param_6,cv *param_7,undefined8 param_8,undefined8 param_9,AutoBuffer *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  local_138 = &local_130;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  local_140 = &local_178;
  local_180 = DAT_00254350;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_178 = 0;
  local_128 = 0;
  local_130 = 0;
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_0025424c;
      goto LAB_00253dc8;
    }
    if (0 < iVar11) {
      if (*local_80 == *local_20) {
        piVar10 = local_80;
        piVar12 = local_20;
        do {
          piVar12 = piVar12 + 1;
          if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_0025424c;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar12);
      }
      goto LAB_00253dc8;
    }
LAB_0025424c:
    if ((local_c0 & 0xfff) != (local_60 & 0xfff)) goto LAB_00253dc8;
  }
  else {
LAB_00253dc8:
    local_198 = 0;
    local_190 = (Mat *)0x0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_198,0x30);
    uVar7 = s_t_type___0045fdf8._0_8_;
    uVar6 = _LAB_0045fdf0;
    uVar5 = _LAB_0045fde8;
    uVar4 = DAT_0045fde0;
    uVar3 = DAT_0045fdd8;
    param_10 = (AutoBuffer *)&DAT_0045fdd0;
    *puVar8 = DAT_0045fdd0;
    puVar8[1] = uVar3;
    puVar8[2] = uVar4;
    puVar8[3] = uVar5;
    puVar8[4] = uVar6;
    puVar8[5] = uVar7;
    cv::error(-0xd7,(String *)&local_198,"void cvOrS(const CvArr*, CvScalar, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16dd);
    cv::String::deallocate((String *)&local_198);
  }
  if (param_7 == (cv *)0x0) goto LAB_00253fb8;
  cv::cvarrToMat(param_7,(void *)0x0,true,false,0,param_10);
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar8 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_00253edc:
    if (2 < local_120._4_4_) goto LAB_002541c4;
    local_178 = local_118;
    local_180 = local_120;
    *local_138 = *local_d8;
    local_138[1] = puVar8[1];
  }
  else {
    iVar11 = 0;
    puVar9 = local_140;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar11 = iVar11 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar11 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_00253edc;
LAB_002541c4:
    local_180 = CONCAT44(local_180._4_4_,(undefined4)local_120);
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar11 = 0;
    do {
      *local_e0 = 0;
      iVar11 = iVar11 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar11 < local_120._4_4_);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00253fb8:
  local_1b8 = 1;
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_1d0 = 0;
  local_1cc = 0;
  local_1e0[0] = 0x1010000;
  local_1c8[0] = 0xc1020006;
  local_1b4 = 4;
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x2010000;
  local_1d8 = (Mat *)&local_c0;
  local_1c0 = (Mat *)&local_120;
  local_1a8 = (Mat *)&local_60;
  local_190 = (Mat *)&local_180;
  local_120 = param_1;
  local_118 = param_2;
  local_110 = param_3;
  uStack_108 = param_4;
  cv::bitwise_or((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_OutputArray *)local_1b0,
                 (_InputArray *)&local_198);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar11 = 0;
    puVar8 = local_140;
    do {
      *(undefined4 *)puVar8 = 0;
      iVar11 = iVar11 + 1;
      puVar8 = (undefined8 *)((long)puVar8 + 4);
    } while (iVar11 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00254358 (1452 bytes) name=cvXorS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvXorS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
           cv *param_6,cv *param_7,undefined8 param_8,undefined8 param_9,AutoBuffer *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  local_138 = &local_130;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  local_140 = &local_178;
  local_180 = DAT_002549b0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_178 = 0;
  local_128 = 0;
  local_130 = 0;
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002548ac;
      goto LAB_00254428;
    }
    if (0 < iVar11) {
      if (*local_80 == *local_20) {
        piVar10 = local_80;
        piVar12 = local_20;
        do {
          piVar12 = piVar12 + 1;
          if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_002548ac;
          piVar10 = piVar10 + 1;
        } while (*piVar10 == *piVar12);
      }
      goto LAB_00254428;
    }
LAB_002548ac:
    if ((local_c0 & 0xfff) != (local_60 & 0xfff)) goto LAB_00254428;
  }
  else {
LAB_00254428:
    local_198 = 0;
    local_190 = (Mat *)0x0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_198,0x30);
    uVar7 = s_t_type___0045fdf8._0_8_;
    uVar6 = _LAB_0045fdf0;
    uVar5 = _LAB_0045fde8;
    uVar4 = DAT_0045fde0;
    uVar3 = DAT_0045fdd8;
    param_10 = (AutoBuffer *)&DAT_0045fdd0;
    *puVar8 = DAT_0045fdd0;
    puVar8[1] = uVar3;
    puVar8[2] = uVar4;
    puVar8[3] = uVar5;
    puVar8[4] = uVar6;
    puVar8[5] = uVar7;
    cv::error(-0xd7,(String *)&local_198,"void cvXorS(const CvArr*, CvScalar, CvArr*, const CvArr*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16e8);
    cv::String::deallocate((String *)&local_198);
  }
  if (param_7 == (cv *)0x0) goto LAB_00254618;
  cv::cvarrToMat(param_7,(void *)0x0,true,false,0,param_10);
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = *piVar10 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar8 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_0025453c:
    if (2 < local_120._4_4_) goto LAB_00254824;
    local_178 = local_118;
    local_180 = local_120;
    *local_138 = *local_d8;
    local_138[1] = puVar8[1];
  }
  else {
    iVar11 = 0;
    puVar9 = local_140;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar11 = iVar11 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar11 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_0025453c;
LAB_00254824:
    local_180 = CONCAT44(local_180._4_4_,(undefined4)local_120);
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar11 = 0;
    do {
      *local_e0 = 0;
      iVar11 = iVar11 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar11 < local_120._4_4_);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00254618:
  local_1b8 = 1;
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_1d0 = 0;
  local_1cc = 0;
  local_1e0[0] = 0x1010000;
  local_1c8[0] = 0xc1020006;
  local_1b4 = 4;
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x2010000;
  local_1d8 = (Mat *)&local_c0;
  local_1c0 = (Mat *)&local_120;
  local_1a8 = (Mat *)&local_60;
  local_190 = (Mat *)&local_180;
  local_120 = param_1;
  local_118 = param_2;
  local_110 = param_3;
  uStack_108 = param_4;
  cv::bitwise_xor((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_OutputArray *)local_1b0,
                  (_InputArray *)&local_198);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar11 = 0;
    puVar8 = local_140;
    do {
      *(undefined4 *)puVar8 = 0;
      iVar11 = iVar11 + 1;
      puVar8 = (undefined8 *)((long)puVar8 + 4);
    } while (iVar11 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002549b8 (1584 bytes) name=cvAdd

void cvAdd(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  int iVar10;
  int *piVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  int *piVar14;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  local_1a0 = &local_1d8;
  local_1e0 = DAT_002550c0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_1d8 = 0;
  local_188 = 0;
  local_190 = 0;
  iVar10 = local_e0[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_00254f94;
      goto LAB_00254a98;
    }
    if (0 < iVar10) {
      if (*local_e0 == *local_20) {
        piVar11 = local_e0;
        piVar14 = local_20;
        do {
          piVar14 = piVar14 + 1;
          if (piVar11 == local_e0 + (iVar10 - 1)) goto LAB_00254f94;
          piVar11 = piVar11 + 1;
        } while (*piVar11 == *piVar14);
      }
      goto LAB_00254a98;
    }
LAB_00254f94:
    if ((local_120 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1) goto LAB_00254a98;
  }
  else {
LAB_00254a98:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_1f8,0x3a);
    uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
    uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
    uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
    uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
    uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
    uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
    uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
    *(undefined8 *)(param_6 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
    *(undefined2 *)(param_6 + 0x38) = uVar9;
    *(undefined8 *)param_6 = uVar3;
    *(undefined8 *)(param_6 + 8) = uVar4;
    *(undefined8 *)(param_6 + 0x10) = uVar5;
    *(undefined8 *)(param_6 + 0x18) = uVar6;
    *(undefined8 *)(param_6 + 0x20) = uVar7;
    *(undefined8 *)(param_6 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_1f8,
              "void cvAdd(const CvArr*, const CvArr*, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16f3);
    cv::String::deallocate((String *)&local_1f8);
  }
  if (param_4 == (cv *)0x0) goto LAB_00254c78;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar11 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar13 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_00254bbc:
    if (2 < local_17c) goto LAB_00254bc8;
    local_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar13[1];
  }
  else {
    iVar10 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar10 = iVar10 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar10 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_00254bbc;
LAB_00254bc8:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar10 = 0;
    do {
      *local_140 = 0;
      iVar10 = iVar10 + 1;
      local_140 = local_140 + 1;
    } while (iVar10 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
LAB_00254c78:
  local_170 = 0;
  local_180 = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_60;
  local_178 = (Mat *)&local_1e0;
  cv::add((_InputArray *)local_228,(_InputArray *)local_210,(_OutputArray *)&local_1f8,
          (_InputArray *)&local_180,local_60 & 0xfff);
  if (lStack_1a8 != 0) {
    piVar11 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar10 = 0;
    puVar13 = local_1a0;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar10 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002550c8 (1584 bytes) name=cvSub

void cvSub(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  int iVar10;
  int *piVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  int *piVar14;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  local_1a0 = &local_1d8;
  local_1e0 = DAT_002557d0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_1d8 = 0;
  local_188 = 0;
  local_190 = 0;
  iVar10 = local_e0[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_002556a4;
      goto LAB_002551a8;
    }
    if (0 < iVar10) {
      if (*local_e0 == *local_20) {
        piVar11 = local_e0;
        piVar14 = local_20;
        do {
          piVar14 = piVar14 + 1;
          if (piVar11 == local_e0 + (iVar10 - 1)) goto LAB_002556a4;
          piVar11 = piVar11 + 1;
        } while (*piVar11 == *piVar14);
      }
      goto LAB_002551a8;
    }
LAB_002556a4:
    if ((local_120 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1) goto LAB_002551a8;
  }
  else {
LAB_002551a8:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_1f8,0x3a);
    uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
    uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
    uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
    uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
    uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
    uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
    uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
    *(undefined8 *)(param_6 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
    *(undefined2 *)(param_6 + 0x38) = uVar9;
    *(undefined8 *)param_6 = uVar3;
    *(undefined8 *)(param_6 + 8) = uVar4;
    *(undefined8 *)(param_6 + 0x10) = uVar5;
    *(undefined8 *)(param_6 + 0x18) = uVar6;
    *(undefined8 *)(param_6 + 0x20) = uVar7;
    *(undefined8 *)(param_6 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_1f8,
              "void cvSub(const CvArr*, const CvArr*, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x16fe);
    cv::String::deallocate((String *)&local_1f8);
  }
  if (param_4 == (cv *)0x0) goto LAB_00255388;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar11 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar13 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_002552cc:
    if (2 < local_17c) goto LAB_002552d8;
    local_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar13[1];
  }
  else {
    iVar10 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar10 = iVar10 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar10 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_002552cc;
LAB_002552d8:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar10 = 0;
    do {
      *local_140 = 0;
      iVar10 = iVar10 + 1;
      local_140 = local_140 + 1;
    } while (iVar10 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
LAB_00255388:
  local_170 = 0;
  local_180 = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_60;
  local_178 = (Mat *)&local_1e0;
  cv::subtract((_InputArray *)local_228,(_InputArray *)local_210,(_OutputArray *)&local_1f8,
               (_InputArray *)&local_180,local_60 & 0xfff);
  if (lStack_1a8 != 0) {
    piVar11 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar10 = 0;
    puVar13 = local_1a0;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar10 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002557d8 (1484 bytes) name=cvAddS

void cvAddS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
           cv *param_6,cv *param_7,undefined8 param_8,undefined8 param_9,AutoBuffer *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  undefined8 *puVar10;
  int *piVar11;
  int iVar12;
  undefined8 *puVar13;
  int *piVar14;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  local_138 = &local_130;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  local_140 = &local_178;
  local_180 = DAT_00255e50;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_178 = 0;
  local_128 = 0;
  local_130 = 0;
  iVar12 = local_80[-1];
  if (iVar12 == local_20[-1]) {
    if (iVar12 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00255d44;
      goto LAB_002558a8;
    }
    if (0 < iVar12) {
      if (*local_80 == *local_20) {
        piVar11 = local_80;
        piVar14 = local_20;
        do {
          piVar14 = piVar14 + 1;
          if (piVar11 == local_80 + (iVar12 - 1)) goto LAB_00255d44;
          piVar11 = piVar11 + 1;
        } while (*piVar11 == *piVar14);
      }
      goto LAB_002558a8;
    }
LAB_00255d44:
    if ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1) goto LAB_002558a8;
  }
  else {
LAB_002558a8:
    local_198 = 0;
    local_190 = (Mat *)0x0;
    param_10 = (AutoBuffer *)cv::String::allocate((String *)&local_198,0x3a);
    uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
    uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
    uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
    uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
    uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
    uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
    uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
    *(undefined8 *)(param_10 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
    *(undefined2 *)(param_10 + 0x38) = uVar9;
    *(undefined8 *)param_10 = uVar3;
    *(undefined8 *)(param_10 + 8) = uVar4;
    *(undefined8 *)(param_10 + 0x10) = uVar5;
    *(undefined8 *)(param_10 + 0x18) = uVar6;
    *(undefined8 *)(param_10 + 0x20) = uVar7;
    *(undefined8 *)(param_10 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_198,"void cvAddS(const CvArr*, CvScalar, CvArr*, const CvArr*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1709);
    cv::String::deallocate((String *)&local_198);
  }
  if (param_7 == (cv *)0x0) goto LAB_00255aa8;
  cv::cvarrToMat(param_7,(void *)0x0,true,false,0,param_10);
  if (lStack_e8 != 0) {
    piVar11 = (int *)(lStack_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar13 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_002559cc:
    if (2 < local_120._4_4_) goto LAB_00255cbc;
    local_178 = local_118;
    local_180 = local_120;
    *local_138 = *local_d8;
    local_138[1] = puVar13[1];
  }
  else {
    iVar12 = 0;
    puVar10 = local_140;
    do {
      *(undefined4 *)puVar10 = 0;
      iVar12 = iVar12 + 1;
      puVar10 = (undefined8 *)((long)puVar10 + 4);
    } while (iVar12 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_002559cc;
LAB_00255cbc:
    local_180 = CONCAT44(local_180._4_4_,(undefined4)local_120);
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar11 = (int *)(lStack_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_120._4_4_);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00255aa8:
  local_1b8 = 1;
  local_1d0 = 0;
  local_1cc = 0;
  local_1e0[0] = 0x1010000;
  local_1c8[0] = 0xc1020006;
  local_1b4 = 4;
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x2010000;
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_1d8 = (Mat *)&local_c0;
  local_1c0 = (Mat *)&local_120;
  local_1a8 = (Mat *)&local_60;
  local_190 = (Mat *)&local_180;
  local_120 = param_1;
  local_118 = param_2;
  local_110 = param_3;
  uStack_108 = param_4;
  cv::add((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_OutputArray *)local_1b0,
          (_InputArray *)&local_198,local_60 & 0xfff);
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar12 = 0;
    puVar13 = local_140;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar12 = iVar12 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar12 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00255e58 (1484 bytes) name=cvSubRS

void cvSubRS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5
            ,cv *param_6,cv *param_7,undefined8 param_8,undefined8 param_9,AutoBuffer *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  undefined8 *puVar10;
  int *piVar11;
  int iVar12;
  undefined8 *puVar13;
  int *piVar14;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_10);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_10);
  local_138 = &local_130;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  local_140 = &local_178;
  local_180 = DAT_002564d0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_178 = 0;
  local_128 = 0;
  local_130 = 0;
  iVar12 = local_80[-1];
  if (iVar12 == local_20[-1]) {
    if (iVar12 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002563c4;
      goto LAB_00255f28;
    }
    if (0 < iVar12) {
      if (*local_80 == *local_20) {
        piVar11 = local_80;
        piVar14 = local_20;
        do {
          piVar14 = piVar14 + 1;
          if (piVar11 == local_80 + (iVar12 - 1)) goto LAB_002563c4;
          piVar11 = piVar11 + 1;
        } while (*piVar11 == *piVar14);
      }
      goto LAB_00255f28;
    }
LAB_002563c4:
    if ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1) goto LAB_00255f28;
  }
  else {
LAB_00255f28:
    local_198 = 0;
    local_190 = (Mat *)0x0;
    param_10 = (AutoBuffer *)cv::String::allocate((String *)&local_198,0x3a);
    uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
    uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
    uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
    uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
    uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
    uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
    uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
    *(undefined8 *)(param_10 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
    *(undefined2 *)(param_10 + 0x38) = uVar9;
    *(undefined8 *)param_10 = uVar3;
    *(undefined8 *)(param_10 + 8) = uVar4;
    *(undefined8 *)(param_10 + 0x10) = uVar5;
    *(undefined8 *)(param_10 + 0x18) = uVar6;
    *(undefined8 *)(param_10 + 0x20) = uVar7;
    *(undefined8 *)(param_10 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_198,
              "void cvSubRS(const CvArr*, CvScalar, CvArr*, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1714);
    cv::String::deallocate((String *)&local_198);
  }
  if (param_7 == (cv *)0x0) goto LAB_00256128;
  cv::cvarrToMat(param_7,(void *)0x0,true,false,0,param_10);
  if (lStack_e8 != 0) {
    piVar11 = (int *)(lStack_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar13 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_0025604c:
    if (2 < local_120._4_4_) goto LAB_0025633c;
    local_178 = local_118;
    local_180 = local_120;
    *local_138 = *local_d8;
    local_138[1] = puVar13[1];
  }
  else {
    iVar12 = 0;
    puVar10 = local_140;
    do {
      *(undefined4 *)puVar10 = 0;
      iVar12 = iVar12 + 1;
      puVar10 = (undefined8 *)((long)puVar10 + 4);
    } while (iVar12 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_0025604c;
LAB_0025633c:
    local_180 = CONCAT44(local_180._4_4_,(undefined4)local_120);
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar11 = (int *)(lStack_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_120._4_4_);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00256128:
  local_1d0 = 1;
  local_1e0[0] = 0xc1020006;
  local_1cc = 4;
  local_1b8 = 0;
  local_1b4 = 0;
  local_1c8[0] = 0x1010000;
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x2010000;
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x1010000);
  local_1d8 = (Mat *)&local_120;
  local_1c0 = (Mat *)&local_c0;
  local_1a8 = (Mat *)&local_60;
  local_190 = (Mat *)&local_180;
  local_120 = param_1;
  local_118 = param_2;
  local_110 = param_3;
  uStack_108 = param_4;
  cv::subtract((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_OutputArray *)local_1b0,
               (_InputArray *)&local_198,local_60 & 0xfff);
  if (lStack_148 != 0) {
    piVar11 = (int *)(lStack_148 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar12 = 0;
    puVar13 = local_140;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar12 = iVar12 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar12 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002564d8 (912 bytes) name=cvMul

void cvMul(double param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,undefined8 param_6,
          AutoBuffer *param_7)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  char *pcVar10;
  int *piVar11;
  int iVar12;
  int *piVar13;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_7);
  iVar12 = local_e0[-1];
  if (iVar12 == local_20[-1]) {
    if (iVar12 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_0025681c;
    }
    else if (iVar12 < 1) {
LAB_0025681c:
      if ((local_120 >> 3 & 0x1ff) + 1 == (local_60 >> 3 & 0x1ff) + 1) goto LAB_002565e4;
    }
    else if (*local_e0 == *local_20) {
      piVar11 = local_e0;
      piVar13 = local_20;
      do {
        piVar13 = piVar13 + 1;
        if (piVar11 == local_e0 + (iVar12 - 1)) goto LAB_0025681c;
        piVar11 = piVar11 + 1;
      } while (*piVar11 == *piVar13);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  pcVar10 = (char *)cv::String::allocate((String *)&local_138,0x3a);
  uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
  uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
  uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
  uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
  uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
  uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
  uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
  *(undefined8 *)(pcVar10 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
  *(undefined2 *)(pcVar10 + 0x38) = uVar9;
  *(undefined8 *)pcVar10 = uVar3;
  *(undefined8 *)(pcVar10 + 8) = uVar4;
  *(undefined8 *)(pcVar10 + 0x10) = uVar5;
  *(undefined8 *)(pcVar10 + 0x18) = uVar6;
  *(undefined8 *)(pcVar10 + 0x20) = uVar7;
  *(undefined8 *)(pcVar10 + 0x28) = uVar8;
  cv::error(-0xd7,(String *)&local_138,"void cvMul(const CvArr*, const CvArr*, CvArr*, double)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1720);
  cv::String::deallocate((String *)&local_138);
LAB_002565e4:
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  local_148 = aMStack_c0;
  local_130 = (Mat *)&local_60;
  cv::multiply((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138,param_1,
               local_60 & 0xfff);
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002568f8 (1200 bytes) name=cvDiv

void cvDiv(double param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,undefined8 param_6,
          AutoBuffer *param_7)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  int iVar10;
  int *piVar11;
  undefined8 *puVar12;
  int *piVar13;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  uint local_180;
  int local_17c;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  int *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  undefined8 uStack_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_7);
  local_78 = &local_70;
  local_b0 = 0;
  local_a8 = 0;
  local_80 = &local_b8;
  uStack_c0 = DAT_00256e58;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_b8 = 0;
  local_68 = 0;
  local_70 = 0;
  iVar10 = local_140[-1];
  if (iVar10 == local_e0[-1]) {
    if (iVar10 == 2) {
      if ((*local_140 == *local_e0) && (local_140[1] == local_e0[1])) goto LAB_00256d18;
    }
    else if (iVar10 < 1) {
LAB_00256d18:
      if ((local_180 >> 3 & 0x1ff) + 1 == (local_120 >> 3 & 0x1ff) + 1) goto joined_r0x00256d38;
    }
    else if (*local_140 == *local_e0) {
      piVar11 = local_140;
      piVar13 = local_e0;
      do {
        piVar13 = piVar13 + 1;
        if (piVar11 == local_140 + (iVar10 - 1)) goto LAB_00256d18;
        piVar11 = piVar11 + 1;
      } while (*piVar11 == *piVar13);
    }
  }
  local_198 = 0;
  local_190 = (Mat *)0x0;
  param_7 = (AutoBuffer *)cv::String::allocate((String *)&local_198,0x3a);
  uVar9 = s_src2_size____dst_size____src2_ch_00460c68._56_2_;
  uVar8 = s_src2_size____dst_size____src2_ch_00460c68._40_8_;
  uVar7 = s_src2_size____dst_size____src2_ch_00460c68._32_8_;
  uVar6 = s_src2_size____dst_size____src2_ch_00460c68._24_8_;
  uVar5 = s_src2_size____dst_size____src2_ch_00460c68._16_8_;
  uVar4 = s_src2_size____dst_size____src2_ch_00460c68._8_8_;
  uVar3 = s_src2_size____dst_size____src2_ch_00460c68._0_8_;
  *(undefined8 *)(param_7 + 0x30) = s_src2_size____dst_size____src2_ch_00460c68._48_8_;
  *(undefined2 *)(param_7 + 0x38) = uVar9;
  *(undefined8 *)param_7 = uVar3;
  *(undefined8 *)(param_7 + 8) = uVar4;
  *(undefined8 *)(param_7 + 0x10) = uVar5;
  *(undefined8 *)(param_7 + 0x18) = uVar6;
  *(undefined8 *)(param_7 + 0x20) = uVar7;
  *(undefined8 *)(param_7 + 0x28) = uVar8;
  cv::error(-0xd7,(String *)&local_198,"void cvDiv(const CvArr*, const CvArr*, CvArr*, double)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x172a);
  cv::String::deallocate((String *)&local_198);
joined_r0x00256d38:
  if (param_2 == (cv *)0x0) {
    local_188 = 0;
    local_198._4_4_ = (undefined4)((ulong)local_198 >> 0x20);
    local_198 = CONCAT44(local_198._4_4_,0x1010000);
    local_50 = 0;
    local_60 = 0x2010000;
    local_190 = (Mat *)&local_180;
    local_184 = local_188;
    local_58 = (Mat *)&local_120;
    cv::divide(param_1,(_InputArray *)&local_198,(_OutputArray *)&local_60,local_120 & 0xfff);
  }
  else {
    cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_7);
    local_1b8 = 0;
    local_1b4 = 0;
    local_1c8[0] = 0x1010000;
    local_1a0 = 0;
    local_19c = 0;
    local_1b0[0] = 0x1010000;
    local_188 = 0;
    local_184 = 0;
    local_198 = CONCAT44(local_198._4_4_,0x2010000);
    local_1c0 = (Mat *)&local_60;
    local_1a8 = (Mat *)&local_180;
    local_190 = (Mat *)&local_120;
    cv::divide((_InputArray *)local_1c8,(_InputArray *)local_1b0,(_OutputArray *)&local_198,param_1,
               local_120 & 0xfff);
    if (local_28 != 0) {
      piVar11 = (int *)(local_28 + 0x14);
      do {
        iVar10 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar10 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar10 == 1) {
        cv::Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar10 = 0;
      do {
        *local_20 = 0;
        iVar10 = iVar10 + 1;
        local_20 = local_20 + 1;
      } while (iVar10 < local_5c);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&uStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < uStack_c0._4_4_) {
    iVar10 = 0;
    puVar12 = local_80;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar10 = iVar10 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar10 < uStack_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar11 = (int *)(local_148 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar10 = 0;
    do {
      *local_140 = 0;
      iVar10 = iVar10 + 1;
      local_140 = local_140 + 1;
    } while (iVar10 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 00256e60 (936 bytes) name=cvAddWeighted

void cvAddWeighted(double param_1,double param_2,double param_3,cv *param_4,cv *param_5,cv *param_6,
                  undefined8 param_7,undefined8 param_8,AutoBuffer *param_9)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  char *pcVar10;
  int *piVar11;
  int iVar12;
  int *piVar13;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_9);
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,param_9);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_9);
  iVar12 = local_e0[-1];
  if (iVar12 == local_20[-1]) {
    if (iVar12 == 2) {
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_002571bc;
    }
    else if (iVar12 < 1) {
LAB_002571bc:
      if ((local_120 >> 3 & 0x1ff) + 1 == (local_60 >> 3 & 0x1ff) + 1) goto LAB_00256f78;
    }
    else if (*local_e0 == *local_20) {
      piVar11 = local_e0;
      piVar13 = local_20;
      do {
        piVar13 = piVar13 + 1;
        if (piVar11 == local_e0 + (iVar12 - 1)) goto LAB_002571bc;
        piVar11 = piVar11 + 1;
      } while (*piVar11 == *piVar13);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  pcVar10 = (char *)cv::String::allocate((String *)&local_138,0x3a);
  uVar9 = s_src1_size____dst_size____src1_ch_00460c28._56_2_;
  uVar8 = s_src1_size____dst_size____src1_ch_00460c28._40_8_;
  uVar7 = s_src1_size____dst_size____src1_ch_00460c28._32_8_;
  uVar6 = s_src1_size____dst_size____src1_ch_00460c28._24_8_;
  uVar5 = s_src1_size____dst_size____src1_ch_00460c28._16_8_;
  uVar4 = s_src1_size____dst_size____src1_ch_00460c28._8_8_;
  uVar3 = s_src1_size____dst_size____src1_ch_00460c28._0_8_;
  *(undefined8 *)(pcVar10 + 0x30) = s_src1_size____dst_size____src1_ch_00460c28._48_8_;
  *(undefined2 *)(pcVar10 + 0x38) = uVar9;
  *(undefined8 *)pcVar10 = uVar3;
  *(undefined8 *)(pcVar10 + 8) = uVar4;
  *(undefined8 *)(pcVar10 + 0x10) = uVar5;
  *(undefined8 *)(pcVar10 + 0x18) = uVar6;
  *(undefined8 *)(pcVar10 + 0x20) = uVar7;
  *(undefined8 *)(pcVar10 + 0x28) = uVar8;
  cv::error(-0xd7,(String *)&local_138,
            "void cvAddWeighted(const CvArr*, double, const CvArr*, double, double, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x173a);
  cv::String::deallocate((String *)&local_138);
LAB_00256f78:
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  local_148 = aMStack_c0;
  local_130 = (Mat *)&local_60;
  cv::addWeighted((_InputArray *)local_168,param_1,(_InputArray *)local_150,param_2,param_3,
                  (_OutputArray *)&local_138,local_60 & 0xfff);
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00257294 (876 bytes) name=cvAbsDiff

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAbsDiff(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
              AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int iVar10;
  int *piVar11;
  int *piVar12;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  iVar10 = local_e0[-1];
  if (iVar10 == local_80[-1]) {
    if (iVar10 == 2) {
      if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_002575c0;
    }
    else if (iVar10 < 1) {
LAB_002575c0:
      if ((local_120 & 0xfff) == (local_c0 & 0xfff)) goto LAB_0025736c;
    }
    else if (*local_e0 == *local_80) {
      piVar11 = local_e0;
      piVar12 = local_80;
      do {
        piVar12 = piVar12 + 1;
        if (piVar11 == local_e0 + (iVar10 - 1)) goto LAB_002575c0;
        piVar11 = piVar11 + 1;
      } while (*piVar11 == *piVar12);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  puVar9 = (undefined8 *)cv::String::allocate((String *)&local_138,0x32);
  uVar8 = _LAB_00460c18;
  uVar7 = DAT_00460c10;
  uVar6 = DAT_00460c08;
  uVar5 = DAT_00460c00;
  uVar4 = DAT_00460bf8;
  uVar3 = DAT_00460bf0;
  *(undefined2 *)(puVar9 + 6) = _LAB_00460c20;
  *puVar9 = uVar3;
  puVar9[1] = uVar4;
  puVar9[2] = uVar5;
  puVar9[3] = uVar6;
  puVar9[4] = uVar7;
  puVar9[5] = uVar8;
  cv::error(-0xd7,(String *)&local_138,"void cvAbsDiff(const CvArr*, const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1743);
  cv::String::deallocate((String *)&local_138);
LAB_0025736c:
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_60;
  local_130 = (Mat *)&local_c0;
  cv::absdiff((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138);
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00257688 (768 bytes) name=cvAbsDiffS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAbsDiffS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               cv *param_5,cv *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  AutoBuffer *in_x5;
  undefined4 local_128 [2];
  Mat *local_120;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110 [2];
  undefined8 *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,in_x5);
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00257944;
    }
    else if (iVar11 < 1) {
LAB_00257944:
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_00257770;
    }
    else if (*local_80 == *local_20) {
      piVar10 = local_80;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_00257944;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar12);
    }
  }
  local_e0 = 0;
  local_d8 = 0;
  puVar9 = (undefined8 *)cv::String::allocate((String *)&local_e0,0x32);
  uVar8 = _LAB_00460c18;
  uVar7 = DAT_00460c10;
  uVar6 = DAT_00460c08;
  uVar5 = DAT_00460c00;
  uVar4 = DAT_00460bf8;
  uVar3 = DAT_00460bf0;
  *(undefined2 *)(puVar9 + 6) = _LAB_00460c20;
  *puVar9 = uVar3;
  puVar9[1] = uVar4;
  puVar9[2] = uVar5;
  puVar9[3] = uVar6;
  puVar9[4] = uVar7;
  puVar9[5] = uVar8;
  cv::error(-0xd7,(String *)&local_e0,"void cvAbsDiffS(const CvArr*, CvArr*, CvScalar)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x174d);
  cv::String::deallocate((String *)&local_e0);
LAB_00257770:
  local_108 = &local_e0;
  local_100 = 1;
  local_fc = 4;
  local_118 = 0;
  local_114 = 0;
  local_128[0] = 0x1010000;
  local_110[0] = 0xc1020006;
  local_e8 = 0;
  local_e4 = 0;
  local_f8[0] = 0x2010000;
  local_120 = (Mat *)&local_c0;
  local_f0 = (Mat *)&local_60;
  local_e0 = param_1;
  local_d8 = param_2;
  local_d0 = param_3;
  uStack_c8 = param_4;
  cv::absdiff((_InputArray *)local_128,(_InputArray *)local_110,(_OutputArray *)local_f8);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002579e8 (1072 bytes) name=cvInRange

void cvInRange(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,
              AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  int iVar9;
  int *piVar10;
  int *piVar11;
  undefined4 local_1e0 [2];
  Mat *local_1d8;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8 [2];
  Mat *local_1c0;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  Mat aMStack_180 [4];
  int local_17c;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  int *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  iVar9 = local_140[-1];
  if (iVar9 == local_e0[-1]) {
    if (iVar9 == 2) {
      if ((*local_140 == *local_e0) && (local_140[1] == local_e0[1])) goto LAB_00257de4;
    }
    else if (iVar9 < 1) {
LAB_00257de4:
      if ((local_120 & 0xfff) == 0) goto LAB_00257acc;
    }
    else if (*local_140 == *local_e0) {
      piVar10 = local_140;
      piVar11 = local_e0;
      do {
        piVar11 = piVar11 + 1;
        if (piVar10 == local_140 + (iVar9 - 1)) goto LAB_00257de4;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar11);
    }
  }
  local_198 = 0;
  local_190 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_198,0x2c);
  uVar7 = s_src1_size____dst_size____dst_typ_00460ca8._40_4_;
  uVar6 = s_src1_size____dst_size____dst_typ_00460ca8._24_8_;
  uVar5 = s_src1_size____dst_size____dst_typ_00460ca8._16_8_;
  uVar4 = s_src1_size____dst_size____dst_typ_00460ca8._8_8_;
  uVar3 = s_src1_size____dst_size____dst_typ_00460ca8._0_8_;
  *(undefined8 *)(pcVar8 + 0x20) = s_src1_size____dst_size____dst_typ_00460ca8._32_8_;
  *(undefined4 *)(pcVar8 + 0x28) = uVar7;
  *(undefined8 *)pcVar8 = uVar3;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  cv::error(-0xd7,(String *)&local_198,
            "void cvInRange(const void*, const void*, const void*, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1758);
  cv::String::deallocate((String *)&local_198);
LAB_00257acc:
  local_1d0 = 0;
  local_1cc = 0;
  local_1e0[0] = 0x1010000;
  local_1d8 = aMStack_180;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_1b8 = 0;
  local_1b4 = 0;
  local_1c8[0] = 0x1010000;
  local_1c0 = aMStack_c0;
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x2010000);
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x1010000;
  local_1a8 = aMStack_60;
  local_190 = (Mat *)&local_120;
  cv::inRange((_InputArray *)local_1e0,(_InputArray *)local_1c8,(_InputArray *)local_1b0,
              (_OutputArray *)&local_198);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar10 = (int *)(local_148 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar9 = 0;
    do {
      *local_140 = 0;
      iVar9 = iVar9 + 1;
      local_140 = local_140 + 1;
    } while (iVar9 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 00257ec8 (840 bytes) name=cvInRangeS

void cvInRangeS(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8,
               cv *param_9,cv *param_10)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  AutoBuffer *in_x5;
  undefined4 local_160 [2];
  Mat *local_158;
  undefined4 local_150;
  undefined4 local_14c;
  undefined4 local_148 [2];
  undefined8 *local_140;
  undefined4 local_138;
  undefined4 local_134;
  undefined4 local_130 [2];
  undefined8 *local_128;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118 [2];
  Mat *local_110;
  undefined4 local_108;
  undefined4 local_104;
  undefined8 uStack_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  undefined8 uStack_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_9,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_10,(void *)0x0,true,false,0,in_x5);
  iVar10 = local_80[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002581d8;
    }
    else if (iVar10 < 1) {
LAB_002581d8:
      if ((local_60 & 0xfff) == 0) goto LAB_00257fc4;
    }
    else if (*local_80 == *local_20) {
      piVar9 = local_80;
      piVar11 = local_20;
      do {
        piVar11 = piVar11 + 1;
        if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002581d8;
        piVar9 = piVar9 + 1;
      } while (*piVar9 == *piVar11);
    }
  }
  local_e0 = 0;
  local_d8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_e0,0x2c);
  uVar7 = s_src1_size____dst_size____dst_typ_00460ca8._40_4_;
  uVar6 = s_src1_size____dst_size____dst_typ_00460ca8._24_8_;
  uVar5 = s_src1_size____dst_size____dst_typ_00460ca8._16_8_;
  uVar4 = s_src1_size____dst_size____dst_typ_00460ca8._8_8_;
  uVar3 = s_src1_size____dst_size____dst_typ_00460ca8._0_8_;
  *(undefined8 *)(pcVar8 + 0x20) = s_src1_size____dst_size____dst_typ_00460ca8._32_8_;
  *(undefined4 *)(pcVar8 + 0x28) = uVar7;
  *(undefined8 *)pcVar8 = uVar3;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  cv::error(-0xd7,(String *)&local_e0,"void cvInRangeS(const void*, CvScalar, CvScalar, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1762);
  cv::String::deallocate((String *)&local_e0);
LAB_00257fc4:
  local_128 = &local_e0;
  local_140 = &uStack_100;
  local_150 = 0;
  local_14c = 0;
  local_160[0] = 0x1010000;
  local_148[0] = 0xc1020006;
  local_138 = 1;
  local_134 = 4;
  local_130[0] = 0xc1020006;
  local_120 = 1;
  local_11c = 4;
  local_108 = 0;
  local_104 = 0;
  local_118[0] = 0x2010000;
  local_158 = aMStack_c0;
  local_110 = (Mat *)&local_60;
  uStack_100 = param_1;
  uStack_f8 = param_2;
  local_f0 = param_3;
  uStack_e8 = param_4;
  local_e0 = param_5;
  local_d8 = param_6;
  local_d0 = param_7;
  uStack_c8 = param_8;
  cv::inRange((_InputArray *)local_160,(_InputArray *)local_148,(_InputArray *)local_130,
              (_OutputArray *)local_118);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00258270 (880 bytes) name=cvCmp

void cvCmp(cv *param_1,cv *param_2,cv *param_3,int param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  int iVar9;
  int *piVar10;
  int *piVar11;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  Mat aMStack_120 [4];
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  iVar9 = local_e0[-1];
  if (iVar9 == local_80[-1]) {
    if (iVar9 == 2) {
      if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_002585ac;
    }
    else if (iVar9 < 1) {
LAB_002585ac:
      if ((local_c0 & 0xfff) == 0) goto LAB_00258350;
    }
    else if (*local_e0 == *local_80) {
      piVar10 = local_e0;
      piVar11 = local_80;
      do {
        piVar11 = piVar11 + 1;
        if (piVar10 == local_e0 + (iVar9 - 1)) goto LAB_002585ac;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar11);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_138,0x2c);
  uVar7 = s_src1_size____dst_size____dst_typ_00460ca8._40_4_;
  uVar6 = s_src1_size____dst_size____dst_typ_00460ca8._24_8_;
  uVar5 = s_src1_size____dst_size____dst_typ_00460ca8._16_8_;
  uVar4 = s_src1_size____dst_size____dst_typ_00460ca8._8_8_;
  uVar3 = s_src1_size____dst_size____dst_typ_00460ca8._0_8_;
  *(undefined8 *)(pcVar8 + 0x20) = s_src1_size____dst_size____dst_typ_00460ca8._32_8_;
  *(undefined4 *)(pcVar8 + 0x28) = uVar7;
  *(undefined8 *)pcVar8 = uVar3;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  cv::error(-0xd7,(String *)&local_138,"void cvCmp(const void*, const void*, void*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x176c);
  cv::String::deallocate((String *)&local_138);
LAB_00258350:
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_160 = aMStack_120;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_60;
  local_130 = (Mat *)&local_c0;
  cv::compare((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138,param_4);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00258668 (720 bytes) name=cvCmpS

void cvCmpS(undefined8 param_1,cv *param_2,cv *param_3,int param_4,undefined8 param_5,
           undefined8 param_6,AutoBuffer *param_7)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  undefined8 local_118 [2];
  undefined4 local_108 [2];
  Mat *local_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  undefined8 *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_118[0] = param_1;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_7);
  iVar10 = local_80[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00258900;
    }
    else if (iVar10 < 1) {
LAB_00258900:
      if ((local_60 & 0xfff) == 0) goto LAB_00258748;
    }
    else if (*local_80 == *local_20) {
      piVar9 = local_80;
      piVar11 = local_20;
      do {
        piVar11 = piVar11 + 1;
        if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_00258900;
        piVar9 = piVar9 + 1;
      } while (*piVar9 == *piVar11);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_d8,0x2c);
  uVar7 = s_src1_size____dst_size____dst_typ_00460ca8._40_4_;
  uVar6 = s_src1_size____dst_size____dst_typ_00460ca8._24_8_;
  uVar5 = s_src1_size____dst_size____dst_typ_00460ca8._16_8_;
  uVar4 = s_src1_size____dst_size____dst_typ_00460ca8._8_8_;
  uVar3 = s_src1_size____dst_size____dst_typ_00460ca8._0_8_;
  *(undefined8 *)(pcVar8 + 0x20) = s_src1_size____dst_size____dst_typ_00460ca8._32_8_;
  *(undefined4 *)(pcVar8 + 0x28) = uVar7;
  *(undefined8 *)pcVar8 = uVar3;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  cv::error(-0xd7,(String *)&local_d8,"void cvCmpS(const void*, double, void*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1776);
  cv::String::deallocate((String *)&local_d8);
LAB_00258748:
  local_f8 = 0;
  local_f4 = 0;
  local_108[0] = 0x1010000;
  local_f0[0] = 0xc1020006;
  local_e0 = 1;
  local_dc = 1;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_100 = aMStack_c0;
  local_e8 = local_118;
  local_d0 = (Mat *)&local_60;
  cv::compare((_InputArray *)local_108,(_InputArray *)local_f0,(_OutputArray *)&local_d8,param_4);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0025899c (804 bytes) name=cvMin

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMin(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
          AutoBuffer *param_6)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  uint *puVar11;
  int iVar12;
  uint *puVar13;
  undefined8 local_130;
  undefined8 local_128;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  uint *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  uint *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  uVar2 = local_e0[-1];
  if (uVar2 == local_80[-1]) {
    if (uVar2 == 2) {
      if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_00258c80;
    }
    else if ((int)uVar2 < 1) {
LAB_00258c80:
      if ((local_120 & 0xfff) == (local_c0 & 0xfff)) goto LAB_00258a74;
    }
    else if (*local_e0 == *local_80) {
      puVar11 = local_e0;
      puVar13 = local_80;
      do {
        puVar13 = puVar13 + 1;
        if (puVar11 == local_e0 + (uVar2 - 1)) goto LAB_00258c80;
        puVar11 = puVar11 + 1;
        param_6 = (AutoBuffer *)(ulong)*puVar13;
      } while (*puVar11 == *puVar13);
    }
  }
  local_130 = 0;
  local_128 = 0;
  param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_130,0x32);
  uVar10 = _LAB_00460c18;
  uVar9 = DAT_00460c10;
  uVar8 = DAT_00460c08;
  uVar7 = DAT_00460c00;
  uVar6 = DAT_00460bf8;
  uVar5 = DAT_00460bf0;
  *(undefined2 *)(param_6 + 0x30) = _LAB_00460c20;
  *(undefined8 *)param_6 = uVar5;
  *(undefined8 *)(param_6 + 8) = uVar6;
  *(undefined8 *)(param_6 + 0x10) = uVar7;
  *(undefined8 *)(param_6 + 0x18) = uVar8;
  *(undefined8 *)(param_6 + 0x20) = uVar9;
  *(undefined8 *)(param_6 + 0x28) = uVar10;
  cv::error(-0xd7,(String *)&local_130,"void cvMin(const void*, const void*, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1780);
  cv::String::deallocate((String *)&local_130);
LAB_00258a74:
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::min((Mat *)&local_120,aMStack_60,(Mat *)&local_c0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00258d48 (804 bytes) name=cvMax

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMax(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
          AutoBuffer *param_6)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  uint *puVar11;
  int iVar12;
  uint *puVar13;
  undefined8 local_130;
  undefined8 local_128;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  uint *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  uint *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  uVar2 = local_e0[-1];
  if (uVar2 == local_80[-1]) {
    if (uVar2 == 2) {
      if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_0025902c;
    }
    else if ((int)uVar2 < 1) {
LAB_0025902c:
      if ((local_120 & 0xfff) == (local_c0 & 0xfff)) goto LAB_00258e20;
    }
    else if (*local_e0 == *local_80) {
      puVar11 = local_e0;
      puVar13 = local_80;
      do {
        puVar13 = puVar13 + 1;
        if (puVar11 == local_e0 + (uVar2 - 1)) goto LAB_0025902c;
        puVar11 = puVar11 + 1;
        param_6 = (AutoBuffer *)(ulong)*puVar13;
      } while (*puVar11 == *puVar13);
    }
  }
  local_130 = 0;
  local_128 = 0;
  param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_130,0x32);
  uVar10 = _LAB_00460c18;
  uVar9 = DAT_00460c10;
  uVar8 = DAT_00460c08;
  uVar7 = DAT_00460c00;
  uVar6 = DAT_00460bf8;
  uVar5 = DAT_00460bf0;
  *(undefined2 *)(param_6 + 0x30) = _LAB_00460c20;
  *(undefined8 *)param_6 = uVar5;
  *(undefined8 *)(param_6 + 8) = uVar6;
  *(undefined8 *)(param_6 + 0x10) = uVar7;
  *(undefined8 *)(param_6 + 0x18) = uVar8;
  *(undefined8 *)(param_6 + 0x20) = uVar9;
  *(undefined8 *)(param_6 + 0x28) = uVar10;
  cv::error(-0xd7,(String *)&local_130,"void cvMax(const void*, const void*, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x178a);
  cv::String::deallocate((String *)&local_130);
LAB_00258e20:
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::max((Mat *)&local_120,aMStack_60,(Mat *)&local_c0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002590f4 (724 bytes) name=cvMinS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMinS(undefined8 param_1,cv *param_2,cv *param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  AutoBuffer *in_x5;
  undefined8 local_118 [2];
  undefined4 local_108 [2];
  Mat *local_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  undefined8 *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_118[0] = param_1;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00259384;
    }
    else if (iVar11 < 1) {
LAB_00259384:
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_002591d0;
    }
    else if (*local_80 == *local_20) {
      piVar10 = local_80;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_00259384;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar12);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar9 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x32);
  uVar8 = _LAB_00460c18;
  uVar7 = DAT_00460c10;
  uVar6 = DAT_00460c08;
  uVar5 = DAT_00460c00;
  uVar4 = DAT_00460bf8;
  uVar3 = DAT_00460bf0;
  *(undefined2 *)(puVar9 + 6) = _LAB_00460c20;
  *puVar9 = uVar3;
  puVar9[1] = uVar4;
  puVar9[2] = uVar5;
  puVar9[3] = uVar6;
  puVar9[4] = uVar7;
  puVar9[5] = uVar8;
  cv::error(-0xd7,(String *)&local_d8,"void cvMinS(const void*, double, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x1794);
  cv::String::deallocate((String *)&local_d8);
LAB_002591d0:
  local_f8 = 0;
  local_f4 = 0;
  local_108[0] = 0x1010000;
  local_f0[0] = 0xc1020006;
  local_e0 = 1;
  local_dc = 1;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_100 = (Mat *)&local_c0;
  local_e8 = local_118;
  local_d0 = (Mat *)&local_60;
  cv::min((_InputArray *)local_108,(_InputArray *)local_f0,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00259428 (724 bytes) name=cvMaxS

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMaxS(undefined8 param_1,cv *param_2,cv *param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  AutoBuffer *in_x5;
  undefined8 local_118 [2];
  undefined4 local_108 [2];
  Mat *local_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  undefined8 *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_118[0] = param_1;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002596b8;
    }
    else if (iVar11 < 1) {
LAB_002596b8:
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_00259504;
    }
    else if (*local_80 == *local_20) {
      piVar10 = local_80;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_002596b8;
        piVar10 = piVar10 + 1;
      } while (*piVar10 == *piVar12);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar9 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x32);
  uVar8 = _LAB_00460c18;
  uVar7 = DAT_00460c10;
  uVar6 = DAT_00460c08;
  uVar5 = DAT_00460c00;
  uVar4 = DAT_00460bf8;
  uVar3 = DAT_00460bf0;
  *(undefined2 *)(puVar9 + 6) = _LAB_00460c20;
  *puVar9 = uVar3;
  puVar9[1] = uVar4;
  puVar9[2] = uVar5;
  puVar9[3] = uVar6;
  puVar9[4] = uVar7;
  puVar9[5] = uVar8;
  cv::error(-0xd7,(String *)&local_d8,"void cvMaxS(const void*, double, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/arithm.cpp",0x179e);
  cv::String::deallocate((String *)&local_d8);
LAB_00259504:
  local_f8 = 0;
  local_f4 = 0;
  local_108[0] = 0x1010000;
  local_f0[0] = 0xc1020006;
  local_e0 = 1;
  local_dc = 1;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_100 = (Mat *)&local_c0;
  local_e8 = local_118;
  local_d0 = (Mat *)&local_60;
  cv::max((_InputArray *)local_108,(_InputArray *)local_f0,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0025975c (268 bytes) name=cvSetIPLAllocators

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvSetIPLAllocators(long param_1,long param_2,long param_3,long param_4,long param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  char cVar10;
  undefined8 *puVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  cVar10 = param_1 != 0;
  if (param_2 != 0) {
    cVar10 = cVar10 + '\x01';
  }
  if (param_3 != 0) {
    cVar10 = cVar10 + '\x01';
  }
  if (param_4 != 0) {
    cVar10 = cVar10 + '\x01';
  }
  if (param_5 != 0) {
    cVar10 = cVar10 + '\x01';
  }
  if ((cVar10 != '\x05') && (cVar10 != '\0')) {
    local_10 = 0;
    local_8 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_10,0x45);
    uVar9 = _LAB_00461700;
    uVar8 = _LAB_004616f8;
    uVar7 = _DAT_004616f0;
    uVar6 = DAT_004616e8;
    uVar5 = DAT_004616e0;
    uVar4 = DAT_004616d8;
    uVar3 = DAT_004616d0;
    uVar2 = DAT_004616c8;
    uVar1 = DAT_004616c0;
    *(undefined1 *)((long)puVar11 + 0x44) = LAB_00461704;
    *(undefined4 *)(puVar11 + 8) = uVar9;
    *puVar11 = uVar1;
    puVar11[1] = uVar2;
    puVar11[2] = uVar3;
    puVar11[3] = uVar4;
    puVar11[4] = uVar5;
    puVar11[5] = uVar6;
    puVar11[6] = uVar7;
    puVar11[7] = uVar8;
    cv::error(-5,(String *)&local_10,
              "void cvSetIPLAllocators(Cv_iplCreateImageHeader, Cv_iplAllocateImageData, Cv_iplDeallocate, Cv_iplCreateROI, Cv_iplCloneImage)"
              ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x51);
    cv::String::deallocate((String *)&local_10);
  }
  DAT_00531f10 = param_1;
  DAT_00531f18 = param_2;
  DAT_00531f20 = param_3;
  DAT_00531f28 = param_4;
  DAT_00531f30 = param_5;
  return;
}


==================================================================

### FUNC 0025987c (392 bytes) name=cvCreateMatHeader

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvCreateMatHeader(uint param_1,uint param_2,uint param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  char cVar5;
  uint *puVar6;
  undefined8 *puVar7;
  char *pcVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (((int)param_1 < 0) || ((int)param_2 < 1)) {
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1c);
    uVar4 = DAT_00461760;
    uVar3 = _LAB_00461750;
    uVar2 = _LAB_00461748;
    puVar7[2] = DAT_00461758;
    *(undefined4 *)(puVar7 + 3) = uVar4;
    *puVar7 = uVar2;
    puVar7[1] = uVar3;
    cv::error(-0xc9,(String *)&local_10,"CvMat* cvCreateMatHeader(int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x77);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = ((param_3 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((param_3 & 7) << 1)) & 3)) *
          param_2;
  if ((int)uVar1 < 1) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
    cVar5 = s_Invalid_matrix_type_00461768[0x12];
    uVar3 = s_Invalid_matrix_type_00461768._8_8_;
    uVar2 = s_Invalid_matrix_type_00461768._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_Invalid_matrix_type_00461768._16_2_;
    pcVar8[0x12] = cVar5;
    *(undefined8 *)pcVar8 = uVar2;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0xd2,(String *)&local_10,"CvMat* cvCreateMatHeader(int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x7b);
    cv::String::deallocate((String *)&local_10);
  }
  puVar6 = (uint *)cv::cvAlloc(0x28);
  puVar6[1] = uVar1;
  puVar6[8] = param_1;
  *puVar6 = param_3 & 0xfff | 0x42424000;
  puVar6[9] = param_2;
  puVar6[6] = 0;
  puVar6[7] = 0;
  puVar6[2] = 0;
  puVar6[3] = 0;
  puVar6[4] = 1;
  if (0x7fffffff < (long)(int)uVar1 * (long)(int)param_1) {
    *puVar6 = param_3 & 0xfff | 0x42420000;
  }
  return;
}


==================================================================

### FUNC 00259a2c (528 bytes) name=cvInitMatHeader

uint * cvInitMatHeader(uint *param_1,uint param_2,uint param_3,uint param_4,undefined8 param_5,
                      uint param_6)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  uint uVar6;
  uint *local_10;
  uint *local_8;
  
  if (param_1 == (uint *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvMat* cvInitMatHeader(CvMat*, int, int, int, void*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x92);
    cv::String::deallocate((String *)&local_10);
  }
  if (((int)param_2 < 0) || ((int)param_3 < 1)) {
    local_10 = (uint *)0x0;
    local_8 = (uint *)0x0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x19);
    cVar4 = s_Non_positive_cols_or_rows_00461780[0x18];
    uVar3 = s_Non_positive_cols_or_rows_00461780._8_8_;
    uVar2 = s_Non_positive_cols_or_rows_00461780._0_8_;
    *(undefined8 *)(pcVar5 + 0x10) = s_Non_positive_cols_or_rows_00461780._16_8_;
    pcVar5[0x18] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    cv::error(-0xc9,(String *)&local_10,"CvMat* cvInitMatHeader(CvMat*, int, int, int, void*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x98);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = param_4 & 0xfff | 0x42420000;
  param_1[8] = param_2;
  param_1[9] = param_3;
  *param_1 = uVar1;
  *(undefined8 *)(param_1 + 6) = param_5;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_3 = param_3 * ((param_4 >> 3 & 0x1ff) + 1 <<
                      (ulong)((uint)(0xfa50L >> ((param_4 & 7) << 1)) & 3));
  if ((param_6 == 0) || (param_6 == 0x7fffffff)) {
    param_1[1] = param_3;
    uVar6 = 0x4000;
    param_6 = param_3;
  }
  else {
    if ((int)param_6 < (int)param_3) {
      local_10 = (uint *)0x0;
      local_8 = (uint *)0x0;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0xd,(String *)&local_10,"CvMat* cvInitMatHeader(CvMat*, int, int, int, void*, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa8);
      cv::String::deallocate((String *)&local_10);
      param_2 = param_1[8];
    }
    param_1[1] = param_6;
    if (param_2 == 1) {
      uVar6 = param_4 & 0xfff | 0x42424000;
      goto LAB_00259afc;
    }
    uVar6 = 0;
    if (param_3 == param_6) {
      uVar6 = 0x4000;
      param_6 = param_3;
    }
  }
  uVar6 = uVar6 | uVar1;
  if (0x7fffffff < (long)(int)param_6 * (long)(int)param_2) {
    uVar6 = uVar1;
  }
LAB_00259afc:
  *param_1 = uVar6;
  return param_1;
}


==================================================================

### FUNC 00259c78 (352 bytes) name=cvReleaseMat

void cvReleaseMat(undefined8 *param_1)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  uint *puVar4;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"void cvReleaseMat(CvMat**)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbd);
    cv::String::deallocate((String *)&local_10);
  }
  puVar4 = (uint *)*param_1;
  if (puVar4 == (uint *)0x0) {
    return;
  }
  if ((*puVar4 & 0xffff0000) == 0x42420000) {
    if (((int)puVar4[9] < 0) || ((int)puVar4[8] < 0)) goto LAB_00259cb4;
    *param_1 = 0;
LAB_00259d78:
    if (((int)puVar4[9] < 1) || ((int)puVar4[8] < 1)) goto LAB_00259d18;
  }
  else if ((*puVar4 & 0xffff0000) == 0x42430000) {
    *param_1 = 0;
  }
  else {
LAB_00259cb4:
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xce,(String *)&local_10,"void cvReleaseMat(CvMat**)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc4);
    cv::String::deallocate((String *)&local_10);
    uVar1 = *puVar4;
    *param_1 = 0;
    if ((uVar1 & 0xffff0000) == 0x42420000) goto LAB_00259d78;
    if ((uVar1 & 0xffff0000) != 0x42430000) goto LAB_00259d18;
  }
  if (*(long *)(puVar4 + 6) != 0) {
    piVar3 = *(int **)(puVar4 + 2);
    puVar4[6] = 0;
    puVar4[7] = 0;
    if ((piVar3 != (int *)0x0) && (iVar2 = *piVar3, *piVar3 = iVar2 + -1, iVar2 + -1 == 0)) {
      cv::cvFree_(piVar3);
    }
    puVar4[2] = 0;
    puVar4[3] = 0;
  }
LAB_00259d18:
  cv::cvFree_(puVar4);
  return;
}


==================================================================

### FUNC 00259e00 (816 bytes) name=cvInitMatNDHeader

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint * cvInitMatNDHeader(uint *param_1,uint param_2,long param_3,ulong param_4,undefined8 param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  char cVar7;
  char *pcVar8;
  undefined8 *puVar9;
  uint uVar10;
  long lVar11;
  uint uVar12;
  uint *puVar13;
  uint *local_10;
  uint *local_8;
  
  lVar11 = (long)(int)(((uint)(param_4 >> 3) & 0x1ff) + 1 <<
                      (ulong)((uint)(0xfa50L >> (((uint)param_4 & 7) << 1)) & 3));
  if (param_1 == (uint *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1a);
    uVar3 = _LAB_004617b8;
    uVar2 = DAT_004617a8;
    uVar1 = DAT_004617a0;
    puVar9[2] = DAT_004617b0;
    *(undefined2 *)(puVar9 + 3) = uVar3;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    cv::error(-0x1b,(String *)&local_10,
              "CvMatND* cvInitMatNDHeader(CvMatND*, int, const int*, int, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xed);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 == 0) {
    local_10 = (uint *)param_3;
    local_8 = (uint *)param_3;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x14);
    uVar2 = s_NULL_<sizes>_pointer_004617c0._8_8_;
    uVar1 = s_NULL_<sizes>_pointer_004617c0._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_NULL_<sizes>_pointer_004617c0._16_4_;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,
              "CvMatND* cvInitMatNDHeader(CvMatND*, int, const int*, int, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xf3);
    cv::String::deallocate((String *)&local_10);
  }
  uVar12 = param_2 - 1;
  if (0x1f < uVar12) {
    local_10 = (uint *)0x0;
    local_8 = (uint *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x2e);
    uVar3 = s_non_positive_or_too_large_number_004617d8._44_2_;
    uVar6 = s_non_positive_or_too_large_number_004617d8._40_4_;
    uVar5 = s_non_positive_or_too_large_number_004617d8._24_8_;
    uVar4 = s_non_positive_or_too_large_number_004617d8._16_8_;
    uVar2 = s_non_positive_or_too_large_number_004617d8._8_8_;
    uVar1 = s_non_positive_or_too_large_number_004617d8._0_8_;
    *(undefined8 *)(pcVar8 + 0x20) = s_non_positive_or_too_large_number_004617d8._32_8_;
    *(undefined4 *)(pcVar8 + 0x28) = uVar6;
    *(undefined2 *)(pcVar8 + 0x2c) = uVar3;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    *(undefined8 *)(pcVar8 + 0x10) = uVar4;
    *(undefined8 *)(pcVar8 + 0x18) = uVar5;
    cv::error(-0xd3,(String *)&local_10,
              "CvMatND* cvInitMatNDHeader(CvMatND*, int, const int*, int, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xf7);
    cv::String::deallocate((String *)&local_10);
  }
  if (-1 < (int)uVar12) {
    puVar13 = (uint *)(param_3 + (long)(int)uVar12 * 4);
    do {
      while( true ) {
        uVar10 = *puVar13;
        if ((int)uVar10 < 0) {
          local_10 = (uint *)0x0;
          local_8 = (uint *)0x0;
          pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x25);
          cVar7 = s_one_of_dimesion_sizes_is_non_pos_00461808[0x24];
          uVar5 = s_one_of_dimesion_sizes_is_non_pos_00461808._24_8_;
          uVar4 = s_one_of_dimesion_sizes_is_non_pos_00461808._16_8_;
          uVar2 = s_one_of_dimesion_sizes_is_non_pos_00461808._8_8_;
          uVar1 = s_one_of_dimesion_sizes_is_non_pos_00461808._0_8_;
          *(undefined4 *)(pcVar8 + 0x20) = s_one_of_dimesion_sizes_is_non_pos_00461808._32_4_;
          pcVar8[0x24] = cVar7;
          *(undefined8 *)pcVar8 = uVar1;
          *(undefined8 *)(pcVar8 + 8) = uVar2;
          *(undefined8 *)(pcVar8 + 0x10) = uVar4;
          *(undefined8 *)(pcVar8 + 0x18) = uVar5;
          cv::error(-0xc9,(String *)&local_10,
                    "CvMatND* cvInitMatNDHeader(CvMatND*, int, const int*, int, void*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xfc);
          cv::String::deallocate((String *)&local_10);
          uVar10 = *puVar13;
        }
        param_1[(long)(int)uVar12 * 2 + 8] = uVar10;
        if (lVar11 < 0x80000000) break;
        local_10 = (uint *)0x0;
        local_8 = (uint *)0x0;
        pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x14);
        uVar2 = s_The_array_is_too_big_00461830._8_8_;
        uVar1 = s_The_array_is_too_big_00461830._0_8_;
        *(undefined4 *)(pcVar8 + 0x10) = s_The_array_is_too_big_00461830._16_4_;
        *(undefined8 *)pcVar8 = uVar1;
        *(undefined8 *)(pcVar8 + 8) = uVar2;
        cv::error(-0xd3,(String *)&local_10,
                  "CvMatND* cvInitMatNDHeader(CvMatND*, int, const int*, int, void*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xff);
        uVar10 = uVar12 - 1;
        cv::String::deallocate((String *)&local_10);
        param_1[(long)(int)uVar12 * 2 + 9] = (uint)lVar11;
        lVar11 = lVar11 * (int)*puVar13;
        puVar13 = puVar13 + -1;
        uVar12 = uVar10;
        if (uVar10 == 0xffffffff) goto LAB_00259f30;
      }
      param_1[(long)(int)uVar12 * 2 + 9] = (uint)lVar11;
      uVar12 = uVar12 - 1;
      lVar11 = lVar11 * (int)*puVar13;
      puVar13 = puVar13 + -1;
    } while (uVar12 != 0xffffffff);
LAB_00259f30:
    if (0x7fffffff < lVar11) {
      uVar12 = 0x42430000;
      goto LAB_00259f40;
    }
  }
  uVar12 = 0x42434000;
LAB_00259f40:
  param_1[1] = param_2;
  *(undefined8 *)(param_1 + 6) = param_5;
  *param_1 = uVar12 | (uint)param_4 & 0xfff;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  return param_1;
}


==================================================================

### FUNC 0025a194 (220 bytes) name=cvCreateMatNDHeader

long cvCreateMatNDHeader(int param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  long lVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (0x1f < param_1 - 1U) {
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x2e);
    uVar6 = s_non_positive_or_too_large_number_004617d8._44_2_;
    uVar5 = s_non_positive_or_too_large_number_004617d8._40_4_;
    uVar4 = s_non_positive_or_too_large_number_004617d8._24_8_;
    uVar3 = s_non_positive_or_too_large_number_004617d8._16_8_;
    uVar2 = s_non_positive_or_too_large_number_004617d8._8_8_;
    uVar1 = s_non_positive_or_too_large_number_004617d8._0_8_;
    *(undefined8 *)(pcVar7 + 0x20) = s_non_positive_or_too_large_number_004617d8._32_8_;
    *(undefined4 *)(pcVar7 + 0x28) = uVar5;
    *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    *(undefined8 *)(pcVar7 + 0x10) = uVar3;
    *(undefined8 *)(pcVar7 + 0x18) = uVar4;
    cv::error(-0xd3,(String *)&local_10,"CvMatND* cvCreateMatNDHeader(int, const int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x11e);
    cv::String::deallocate((String *)&local_10);
  }
  lVar8 = cv::cvAlloc(0x120);
  cvInitMatNDHeader(lVar8,param_1,param_2,param_3,0);
  *(undefined4 *)(lVar8 + 0x10) = 1;
  return lVar8;
}


==================================================================

### FUNC 0025a284 (776 bytes) name=cvNextNArraySlice

bool cvNextNArraySlice(int *param_1)

{
  long lVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  
  iVar9 = param_1[1];
  if (0 < iVar9) {
    iVar2 = *param_1;
    do {
      iVar8 = iVar9 + -1;
      lVar7 = (long)iVar8;
      if (iVar2 < 1) {
        iVar4 = param_1[lVar7 + 0x18];
        param_1[lVar7 + 0x18] = iVar4 + -1;
        if (0 < iVar4 + -1) break;
        iVar9 = *(int *)(*(long *)(param_1 + 0x38) + lVar7 * 8 + 0x20);
      }
      else {
        lVar1 = *(long *)(param_1 + 0x38) + lVar7 * 8;
        iVar4 = *(int *)(lVar1 + 0x24);
        lVar6 = *(long *)(param_1 + 4) + (long)iVar4;
        *(long *)(param_1 + 4) = lVar6;
        if (iVar2 != 1) {
          lVar5 = (lVar7 + 4) * 8;
          *(long *)(param_1 + 6) =
               *(long *)(param_1 + 6) + (long)*(int *)(*(long *)(param_1 + 0x3a) + lVar5 + 4);
          if (((((iVar2 != 2) &&
                (*(long *)(param_1 + 8) =
                      *(long *)(param_1 + 8) + (long)*(int *)(*(long *)(param_1 + 0x3c) + lVar5 + 4)
                , iVar2 != 3)) &&
               (*(long *)(param_1 + 10) =
                     *(long *)(param_1 + 10) + (long)*(int *)(*(long *)(param_1 + 0x3e) + lVar5 + 4)
               , iVar2 != 4)) &&
              ((*(long *)(param_1 + 0xc) =
                     *(long *)(param_1 + 0xc) +
                     (long)*(int *)(*(long *)(param_1 + 0x40) + lVar5 + 4), iVar2 != 5 &&
               (*(long *)(param_1 + 0xe) =
                     *(long *)(param_1 + 0xe) +
                     (long)*(int *)(*(long *)(param_1 + 0x42) + lVar5 + 4), iVar2 != 6)))) &&
             ((*(long *)(param_1 + 0x10) =
                    *(long *)(param_1 + 0x10) +
                    (long)*(int *)(*(long *)(param_1 + 0x44) + lVar5 + 4), iVar2 != 7 &&
              ((*(long *)(param_1 + 0x12) =
                     *(long *)(param_1 + 0x12) +
                     (long)*(int *)(*(long *)(param_1 + 0x46) + lVar5 + 4), iVar2 != 8 &&
               (*(long *)(param_1 + 0x14) =
                     *(long *)(param_1 + 0x14) +
                     (long)*(int *)(*(long *)(param_1 + 0x48) + lVar5 + 4), iVar2 != 9)))))) {
            *(long *)(param_1 + 0x16) =
                 *(long *)(param_1 + 0x16) +
                 (long)*(int *)(*(long *)(param_1 + 0x4a) + lVar7 * 8 + 0x24);
          }
        }
        iVar3 = param_1[lVar7 + 0x18];
        param_1[lVar7 + 0x18] = iVar3 + -1;
        if (0 < iVar3 + -1) break;
        iVar9 = *(int *)(lVar1 + 0x20);
        *(long *)(param_1 + 4) = lVar6 - (long)iVar9 * (long)iVar4;
        if (iVar2 != 1) {
          lVar6 = (lVar7 + 4) * 8;
          *(long *)(param_1 + 6) =
               *(long *)(param_1 + 6) -
               (long)*(int *)(*(long *)(param_1 + 0x3a) + lVar6 + 4) * (long)iVar9;
          if ((((iVar2 != 2) &&
               (*(long *)(param_1 + 8) =
                     *(long *)(param_1 + 8) -
                     (long)*(int *)(*(long *)(param_1 + 0x3c) + lVar6 + 4) * (long)iVar9, iVar2 != 3
               )) && (*(long *)(param_1 + 10) =
                           *(long *)(param_1 + 10) -
                           (long)*(int *)(*(long *)(param_1 + 0x3e) + lVar6 + 4) * (long)iVar9,
                     iVar2 != 4)) &&
             (((*(long *)(param_1 + 0xc) =
                     *(long *)(param_1 + 0xc) -
                     (long)*(int *)(*(long *)(param_1 + 0x40) + lVar6 + 4) * (long)iVar9, iVar2 != 5
               && (*(long *)(param_1 + 0xe) =
                        *(long *)(param_1 + 0xe) -
                        (long)*(int *)(*(long *)(param_1 + 0x42) + lVar6 + 4) * (long)iVar9,
                  iVar2 != 6)) &&
              ((*(long *)(param_1 + 0x10) =
                     *(long *)(param_1 + 0x10) -
                     (long)*(int *)(*(long *)(param_1 + 0x44) + lVar6 + 4) * (long)iVar9, iVar2 != 7
               && ((*(long *)(param_1 + 0x12) =
                         *(long *)(param_1 + 0x12) -
                         (long)*(int *)(*(long *)(param_1 + 0x46) + lVar6 + 4) * (long)iVar9,
                   iVar2 != 8 &&
                   (*(long *)(param_1 + 0x14) =
                         *(long *)(param_1 + 0x14) -
                         (long)*(int *)(*(long *)(param_1 + 0x48) + lVar6 + 4) * (long)iVar9,
                   iVar2 != 9)))))))) {
            *(long *)(param_1 + 0x16) =
                 *(long *)(param_1 + 0x16) -
                 (long)*(int *)(*(long *)(param_1 + 0x4a) + lVar7 * 8 + 0x24) * (long)iVar9;
          }
        }
      }
      param_1[lVar7 + 0x18] = iVar9;
      iVar9 = iVar8;
    } while (0 < iVar8);
  }
  return 0 < iVar9;
}


==================================================================

### FUNC 0025a58c (804 bytes) name=cvCreateSparseMat

uint * cvCreateSparseMat(uint param_1,int *param_2,ulong param_3)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  undefined2 uVar7;
  char *pcVar8;
  uint *puVar9;
  undefined8 uVar10;
  void *__s;
  ulong uVar11;
  int *piVar12;
  int *local_10;
  int *local_8;
  
  uVar1 = (uint)(0x88442211L >> (((uint)param_3 & 7) << 2)) & 0xf;
  iVar2 = uVar1 + ((uint)(param_3 >> 3) & 0x1ff) * uVar1;
  if (iVar2 == 0) {
    local_10 = (int *)0x0;
    local_8 = (int *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x17);
    cVar6 = s_invalid_array_data_type_00461848[0x16];
    uVar7 = s_invalid_array_data_type_00461848._20_2_;
    uVar3 = s_invalid_array_data_type_00461848._8_8_;
    uVar10 = s_invalid_array_data_type_00461848._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_invalid_array_data_type_00461848._16_4_;
    *(undefined2 *)(pcVar8 + 0x14) = uVar7;
    pcVar8[0x16] = cVar6;
    *(undefined8 *)pcVar8 = uVar10;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0xd2,(String *)&local_10,"CvSparseMat* cvCreateSparseMat(int, const int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x221);
    cv::String::deallocate((String *)&local_10);
  }
  if (0x3ff < param_1 - 1) {
    local_10 = (int *)0x0;
    local_8 = (int *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x18);
    uVar3 = s_bad_number_of_dimensions_00461860._8_8_;
    uVar10 = s_bad_number_of_dimensions_00461860._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s_bad_number_of_dimensions_00461860._16_8_;
    *(undefined8 *)pcVar8 = uVar10;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0xd3,(String *)&local_10,"CvSparseMat* cvCreateSparseMat(int, const int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x224);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 == (int *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x14);
    uVar3 = s_NULL_<sizes>_pointer_004617c0._8_8_;
    uVar10 = s_NULL_<sizes>_pointer_004617c0._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_NULL_<sizes>_pointer_004617c0._16_4_;
    *(undefined8 *)pcVar8 = uVar10;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_10,"CvSparseMat* cvCreateSparseMat(int, const int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x227);
    cv::String::deallocate((String *)&local_10);
  }
  if (0 < (int)param_1) {
    piVar12 = param_2;
    do {
      while (*piVar12 < 1) {
        local_10 = (int *)0x0;
        local_8 = (int *)0x0;
        pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x25);
        cVar6 = s_one_of_dimesion_sizes_is_non_pos_00461808[0x24];
        uVar5 = s_one_of_dimesion_sizes_is_non_pos_00461808._24_8_;
        uVar4 = s_one_of_dimesion_sizes_is_non_pos_00461808._16_8_;
        uVar3 = s_one_of_dimesion_sizes_is_non_pos_00461808._8_8_;
        uVar10 = s_one_of_dimesion_sizes_is_non_pos_00461808._0_8_;
        *(undefined4 *)(pcVar8 + 0x20) = s_one_of_dimesion_sizes_is_non_pos_00461808._32_4_;
        pcVar8[0x24] = cVar6;
        *(undefined8 *)pcVar8 = uVar10;
        *(undefined8 *)(pcVar8 + 8) = uVar3;
        *(undefined8 *)(pcVar8 + 0x10) = uVar4;
        *(undefined8 *)(pcVar8 + 0x18) = uVar5;
        cv::error(-0xc9,(String *)&local_10,"CvSparseMat* cvCreateSparseMat(int, const int*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x22c);
        piVar12 = piVar12 + 1;
        cv::String::deallocate((String *)&local_10);
        if (piVar12 == param_2 + (ulong)(param_1 - 1) + 1) goto LAB_0025a69c;
      }
      piVar12 = piVar12 + 1;
    } while (piVar12 != param_2 + (ulong)(param_1 - 1) + 1);
LAB_0025a69c:
    if (0x20 < (int)param_1) {
      uVar11 = (long)(int)(param_1 - 0x20) * 4 + 0xb8;
      goto LAB_0025a6b0;
    }
  }
  uVar11 = 0xb8;
LAB_0025a6b0:
  puVar9 = (uint *)cv::cvAlloc(uVar11);
  puVar9[1] = param_1;
  puVar9[2] = 0;
  puVar9[3] = 0;
  *puVar9 = (uint)param_3 & 0xfff | 0x42440000;
  puVar9[4] = 1;
  memcpy(puVar9 + 0xd,param_2,-(ulong)(param_1 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_1 << 2);
  uVar1 = -uVar1 & uVar1 + 0xf;
  puVar9[0xb] = uVar1;
  uVar1 = iVar2 + uVar1 + 3 & 0xfffffffc;
  puVar9[0xc] = uVar1;
  uVar10 = cvCreateMemStorage(0x1000);
  uVar10 = cvCreateSet(0,0x70,uVar1 + param_1 * 4 + 0xf & 0xfffffff0,uVar10);
  *(undefined8 *)(puVar9 + 6) = uVar10;
  puVar9[10] = 0x400;
  __s = (void *)cv::cvAlloc(0x2000);
  *(void **)(puVar9 + 8) = __s;
  memset(__s,0,0x2000);
  return puVar9;
}


==================================================================

### FUNC 0025a900 (240 bytes) name=cvReleaseSparseMat

void cvReleaseSparseMat(undefined8 *param_1)

{
  uint *puVar1;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"void cvReleaseSparseMat(CvSparseMat**)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x24d);
    cv::String::deallocate((String *)&local_10);
  }
  puVar1 = (uint *)*param_1;
  if (puVar1 != (uint *)0x0) {
    if ((*puVar1 & 0xffff0000) != 0x42440000) {
      local_10 = (undefined8 *)0x0;
      local_8 = (undefined8 *)0x0;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0xce,(String *)&local_10,"void cvReleaseSparseMat(CvSparseMat**)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x254);
      cv::String::deallocate((String *)&local_10);
    }
    *param_1 = 0;
    local_10 = *(undefined8 **)(*(long *)(puVar1 + 6) + 0x48);
    cvReleaseMemStorage((String *)&local_10);
    cv::cvFree_(*(void **)(puVar1 + 8));
    puVar1[8] = 0;
    puVar1[9] = 0;
    cv::cvFree_(puVar1);
  }
  return;
}


==================================================================

### FUNC 0025aa18 (204 bytes) name=cvCloneSparseMat

undefined8 cvCloneSparseMat(uint *param_1)

{
  uint uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  char cVar4;
  char *pcVar5;
  undefined8 uVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == (uint *)0x0) || (uVar1 = *param_1, (uVar1 & 0xffff0000) != 0x42440000)) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x1b);
    cVar4 = s_Invalid_sparse_array_header_00461880[0x1a];
    uVar3 = s_Invalid_sparse_array_header_00461880._24_2_;
    uVar2 = s_Invalid_sparse_array_header_00461880._8_8_;
    uVar6 = s_Invalid_sparse_array_header_00461880._0_8_;
    *(undefined8 *)(pcVar5 + 0x10) = s_Invalid_sparse_array_header_00461880._16_8_;
    *(undefined2 *)(pcVar5 + 0x18) = uVar3;
    pcVar5[0x1a] = cVar4;
    *(undefined8 *)pcVar5 = uVar6;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-5,(String *)&local_10,"CvSparseMat* cvCloneSparseMat(const CvSparseMat*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x265);
    cv::String::deallocate((String *)&local_10);
    uVar1 = *param_1;
  }
  uVar6 = cvCreateSparseMat(param_1[1],param_1 + 0xd,uVar1);
  cvCopy(param_1,uVar6,0);
  return uVar6;
}


==================================================================

### FUNC 0025aaf8 (388 bytes) name=cvInitSparseMatIterator

long cvInitSparseMatIterator(uint *param_1,undefined8 *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  uint uVar7;
  long *plVar8;
  uint uVar9;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42440000)) {
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x1c);
    uVar3 = s_Invalid_sparse_matrix_header_004618a0._24_4_;
    uVar2 = s_Invalid_sparse_matrix_header_004618a0._8_8_;
    uVar1 = s_Invalid_sparse_matrix_header_004618a0._0_8_;
    *(undefined8 *)(pcVar5 + 0x10) = s_Invalid_sparse_matrix_header_004618a0._16_8_;
    *(undefined4 *)(pcVar5 + 0x18) = uVar3;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-5,(String *)&local_10,
              "CvSparseNode* cvInitSparseMatIterator(const CvSparseMat*, CvSparseMatIterator*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x274);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 == (undefined8 *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar4 = s_NULL_iterator_pointer_004618c0[0x14];
    uVar2 = s_NULL_iterator_pointer_004618c0._8_8_;
    uVar1 = s_NULL_iterator_pointer_004618c0._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_NULL_iterator_pointer_004618c0._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,
              "CvSparseNode* cvInitSparseMatIterator(const CvSparseMat*, CvSparseMatIterator*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x277);
    cv::String::deallocate((String *)&local_10);
  }
  uVar9 = param_1[10];
  *param_2 = param_1;
  param_2[1] = 0;
  if (0 < (int)uVar9) {
    plVar8 = *(long **)(param_1 + 8);
    lVar6 = *plVar8;
    uVar7 = 0;
    if (lVar6 == 0) {
      do {
        plVar8 = plVar8 + 1;
        uVar7 = uVar7 + 1;
        if (uVar7 == uVar9) goto LAB_0025abcc;
        lVar6 = *plVar8;
      } while (lVar6 == 0);
    }
    else {
      uVar7 = 0;
    }
    param_2[1] = lVar6;
    *(uint *)(param_2 + 2) = uVar7;
    return lVar6;
  }
  uVar9 = 0;
LAB_0025abcc:
  *(uint *)(param_2 + 2) = uVar9;
  return 0;
}


==================================================================

### FUNC 0025aca4 (1024 bytes) name=FUN_0025aca4

void * FUN_0025aca4(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)

{
  uint uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  long lVar4;
  void *pvVar5;
  char *pcVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  uint *puVar10;
  uint *puVar11;
  uint *puVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  ulong uVar16;
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  if (param_5 == (uint *)0x0) {
    uVar7 = param_1[1];
    uVar15 = 0;
    uVar13 = uVar15;
    if (0 < (int)uVar7) {
      iVar14 = 0;
      puVar12 = param_2;
      do {
        uVar13 = *puVar12;
        if (param_1[(long)iVar14 + 0xd] <= uVar13) {
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar6 = (char *)cv::String::allocate((String *)&local_18,0x1e);
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          *(undefined8 *)(pcVar6 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          *(undefined4 *)(pcVar6 + 0x18) = uVar3;
          *(undefined2 *)(pcVar6 + 0x1c) = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          *(undefined8 *)pcVar6 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined8 *)(pcVar6 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_18,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          cv::String::deallocate((String *)&local_18);
          uVar7 = param_1[1];
        }
        iVar14 = iVar14 + 1;
        puVar12 = puVar12 + 1;
        uVar15 = uVar13 + uVar15 * 0x5bd1e995;
      } while (iVar14 < (int)uVar7);
      goto LAB_0025acdc;
    }
  }
  else {
    uVar15 = *param_5;
LAB_0025acdc:
    uVar13 = uVar15 & 0x7fffffff;
  }
  uVar7 = param_1[10];
  uVar15 = uVar15 & uVar7 - 1;
  uVar16 = (ulong)uVar15;
  if (param_4 < -1) {
    pvVar5 = (void *)0x0;
  }
  else {
    for (puVar12 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)uVar15 * 8);
        puVar12 != (uint *)0x0; puVar12 = *(uint **)(puVar12 + 2)) {
      if (*puVar12 == uVar13) {
        uVar15 = param_1[1];
        if ((int)uVar15 < 1) {
          if (uVar15 == 0) {
LAB_0025ad68:
            pvVar5 = (void *)((long)puVar12 + (long)(int)param_1[0xb]);
            if (pvVar5 != (void *)0x0) goto LAB_0025ae2c;
            goto LAB_0025ad74;
          }
        }
        else if (*param_2 == *(uint *)((long)puVar12 + (long)(int)param_1[0xc])) {
          uVar9 = 0;
          puVar10 = (uint *)((long)puVar12 + (long)(int)param_1[0xc] + 4);
          puVar11 = param_2;
          do {
            puVar11 = puVar11 + 1;
            uVar9 = uVar9 + 1;
            if (uVar9 == uVar15) goto LAB_0025ad68;
            uVar1 = *puVar10;
            puVar10 = puVar10 + 1;
          } while (*puVar11 == uVar1);
        }
      }
    }
    pvVar5 = (void *)0x0;
  }
LAB_0025ad74:
  if (param_4 == 0) goto LAB_0025ae2c;
  lVar4 = *(long *)(param_1 + 6);
  uVar15 = uVar7 * 2;
  if (*(int *)(lVar4 + 0x68) < (int)(uVar7 * 3)) {
    local_18 = *(uint **)(lVar4 + 0x60);
    if (local_18 == (uint *)0x0) goto LAB_0025af84;
LAB_0025ad9c:
    uVar15 = *local_18;
    iVar14 = *(int *)(lVar4 + 0x68);
    *(undefined8 *)(lVar4 + 0x60) = *(undefined8 *)(local_18 + 2);
    *local_18 = uVar15 & 0x3ffffff;
    *(int *)(lVar4 + 0x68) = iVar14 + 1;
  }
  else {
    if ((int)uVar15 < 0x400) {
      uVar15 = 0x400;
    }
    pvVar5 = (void *)cv::cvAlloc((long)(int)(uVar15 << 3));
    memset(pvVar5,0,(long)(int)(uVar15 << 3));
    puVar12 = (uint *)cvInitSparseMatIterator(param_1,&local_18);
    if (puVar12 != (uint *)0x0) {
      uVar7 = uVar15 - 1;
      while( true ) {
        puVar10 = *(uint **)(local_10 + 2);
        puVar11 = puVar12;
        while (puVar12 = puVar10, puVar12 != (uint *)0x0) {
          lVar4 = (ulong)(uVar7 & *puVar11) * 8;
          *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)pvVar5 + lVar4);
          *(uint **)((long)pvVar5 + lVar4) = puVar11;
          puVar11 = puVar12;
          local_10 = puVar12;
          puVar10 = *(uint **)(puVar12 + 2);
        }
        uVar9 = local_8 + 1;
        if ((int)local_18[10] <= (int)uVar9) break;
        uVar16 = -(ulong)(uVar9 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar9 << 3;
        puVar8 = (undefined8 *)(*(long *)(local_18 + 8) + uVar16);
        puVar12 = *(uint **)(*(long *)(local_18 + 8) + uVar16);
        local_8 = uVar9;
        while (puVar12 == (uint *)0x0) {
          local_8 = local_8 + 1;
          if (local_8 == local_18[10]) goto LAB_0025af44;
          puVar8 = puVar8 + 1;
          puVar12 = (uint *)*puVar8;
        }
        lVar4 = (ulong)(uVar7 & *puVar11) * 8;
        *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)pvVar5 + lVar4);
        *(uint **)((long)pvVar5 + lVar4) = puVar11;
        local_10 = puVar12;
      }
LAB_0025af44:
      lVar4 = (ulong)(uVar7 & *puVar11) * 8;
      *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)pvVar5 + lVar4);
      *(uint **)((long)pvVar5 + lVar4) = puVar11;
      local_8 = uVar9;
    }
    uVar16 = (ulong)(uVar15 - 1 & uVar13);
    cv::cvFree_(*(void **)(param_1 + 8));
    *(void **)(param_1 + 8) = pvVar5;
    lVar4 = *(long *)(param_1 + 6);
    param_1[10] = uVar15;
    local_18 = *(uint **)(lVar4 + 0x60);
    if (local_18 != (uint *)0x0) goto LAB_0025ad9c;
LAB_0025af84:
    cvSetAdd(lVar4,local_18,&local_18);
  }
  puVar12 = local_18;
  lVar4 = *(long *)(param_1 + 8);
  uVar16 = -(uVar16 >> 0x1f) & 0xfffffff800000000 | uVar16 << 3;
  uVar15 = param_1[0xc];
  uVar7 = param_1[1];
  *(undefined8 *)(local_18 + 2) = *(undefined8 *)(lVar4 + uVar16);
  *local_18 = uVar13;
  *(uint **)(lVar4 + uVar16) = local_18;
  memcpy((void *)((long)local_18 + (long)(int)uVar15),param_2,(long)(int)uVar7 << 2);
  pvVar5 = (void *)((long)puVar12 + (long)(int)param_1[0xb]);
  if (0 < param_4) {
    memset(pvVar5,0,(long)(int)((*param_1 >> 3 & 0x1ff) + 1 <<
                               (ulong)((uint)(0xfa50L >> ((*param_1 & 7) << 1)) & 3)));
  }
LAB_0025ae2c:
  if (param_3 != (uint *)0x0) {
    *param_3 = *param_1 & 0xfff;
  }
  return pvVar5;
}


==================================================================

### FUNC 0025b0b8 (912 bytes) name=cvCreateData

void cvCreateData(uint *param_1)

{
  ulong uVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  code *pcVar9;
  int iVar10;
  char *pcVar11;
  undefined4 *puVar12;
  undefined8 uVar13;
  uint uVar14;
  ulong uVar15;
  long lVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    uVar14 = *param_1;
    if ((uVar14 & 0xffff0000) == 0x42420000) {
      if (-1 < (int)param_1[9]) {
        uVar14 = param_1[8];
        if (-1 < (int)uVar14) {
          uVar2 = param_1[1];
          if (uVar14 == 0) {
            return;
          }
          if (param_1[9] == 0) {
            return;
          }
          if (*(long *)(param_1 + 6) != 0) {
            local_10 = 0;
            local_8 = 0;
            pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x19);
            cVar5 = s_Data_is_already_allocated_004618f8[0x18];
            uVar4 = s_Data_is_already_allocated_004618f8._8_8_;
            uVar13 = s_Data_is_already_allocated_004618f8._0_8_;
            *(undefined8 *)(pcVar11 + 0x10) = s_Data_is_already_allocated_004618f8._16_8_;
            pcVar11[0x18] = cVar5;
            *(undefined8 *)pcVar11 = uVar13;
            *(undefined8 *)(pcVar11 + 8) = uVar4;
            cv::error(-2,(String *)&local_10,"void cvCreateData(CvArr*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x32e);
            cv::String::deallocate((String *)&local_10);
            uVar14 = param_1[8];
          }
          lVar16 = (long)(int)uVar2;
          if (lVar16 == 0) {
            lVar16 = (long)(int)(((*param_1 >> 3 & 0x1ff) + 1 <<
                                 (ulong)((uint)(0xfa50L >> ((*param_1 & 7) << 1)) & 3)) * param_1[9]
                                );
          }
          uVar15 = (int)uVar14 * lVar16;
          goto LAB_0025b3cc;
        }
      }
    }
    else {
      if (uVar14 == 0x90) {
        if (*(long *)(param_1 + 0x16) != 0) {
          local_10 = 0;
          local_8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x19);
          cVar5 = s_Data_is_already_allocated_004618f8[0x18];
          uVar4 = s_Data_is_already_allocated_004618f8._8_8_;
          uVar13 = s_Data_is_already_allocated_004618f8._0_8_;
          *(undefined8 *)(pcVar11 + 0x10) = s_Data_is_already_allocated_004618f8._16_8_;
          pcVar11[0x18] = cVar5;
          *(undefined8 *)pcVar11 = uVar13;
          *(undefined8 *)(pcVar11 + 8) = uVar4;
          cv::error(-2,(String *)&local_10,"void cvCreateData(CvArr*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x340);
          cv::String::deallocate((String *)&local_10);
        }
        pcVar9 = DAT_00531f18;
        if (DAT_00531f18 == (code *)0x0) {
          uVar13 = cv::cvAlloc((long)(int)param_1[0x14]);
          *(undefined8 *)(param_1 + 0x22) = uVar13;
          *(undefined8 *)(param_1 + 0x16) = uVar13;
          return;
        }
        uVar14 = param_1[4];
        uVar2 = param_1[10];
        if ((uVar14 - 0x20 & 0xffffffdf) == 0) {
          param_1[4] = 8;
          iVar10 = 4;
          if (uVar14 != 0x20) {
            iVar10 = 8;
          }
          param_1[10] = iVar10 * uVar2;
        }
        (*pcVar9)(param_1,0,0);
        param_1[10] = uVar2;
        param_1[4] = uVar14;
        return;
      }
      if ((uVar14 & 0xffff0000) == 0x42430000) {
        if (param_1[8] == 0) {
          return;
        }
        uVar2 = uVar14;
        if (*(long *)(param_1 + 6) != 0) {
          local_10 = 0;
          local_8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x19);
          cVar5 = s_Data_is_already_allocated_004618f8[0x18];
          uVar4 = s_Data_is_already_allocated_004618f8._8_8_;
          uVar13 = s_Data_is_already_allocated_004618f8._0_8_;
          *(undefined8 *)(pcVar11 + 0x10) = s_Data_is_already_allocated_004618f8._16_8_;
          pcVar11[0x18] = cVar5;
          *(undefined8 *)pcVar11 = uVar13;
          *(undefined8 *)(pcVar11 + 8) = uVar4;
          cv::error(-2,(String *)&local_10,"void cvCreateData(CvArr*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x361);
          cv::String::deallocate((String *)&local_10);
          uVar2 = *param_1;
        }
        uVar15 = (ulong)(int)((uVar14 >> 3 & 0x1ff) + 1 <<
                             (ulong)((uint)(0xfa50L >> ((uVar14 & 7) << 1)) & 3));
        if ((uVar2 >> 0xe & 1) == 0) {
          iVar10 = param_1[1] - 1;
          if (-1 < iVar10) {
            do {
              lVar16 = (long)iVar10;
              lVar3 = (long)iVar10;
              iVar10 = iVar10 + -1;
              if (uVar15 < (ulong)((long)(int)param_1[lVar3 * 2 + 8] *
                                  (long)(int)param_1[lVar16 * 2 + 9])) {
                uVar15 = (long)(int)param_1[lVar3 * 2 + 8] * (long)(int)param_1[lVar16 * 2 + 9];
              }
            } while (iVar10 != -1);
          }
        }
        else {
          uVar1 = (long)(int)param_1[9];
          if (param_1[9] == 0) {
            uVar1 = uVar15;
          }
          uVar15 = uVar1 * (long)(int)param_1[8];
        }
LAB_0025b3cc:
        puVar12 = (undefined4 *)cv::cvAlloc(uVar15 + 0x14);
        *(undefined4 **)(param_1 + 2) = puVar12;
        *(ulong *)(param_1 + 6) = (long)puVar12 + 0x13U & 0xfffffffffffffff0;
        *puVar12 = 1;
        return;
      }
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar8 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar7 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar13 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar11 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar11 + 0x24) = uVar8;
  *(undefined8 *)pcVar11 = uVar13;
  *(undefined8 *)(pcVar11 + 8) = uVar4;
  *(undefined8 *)(pcVar11 + 0x10) = uVar6;
  *(undefined8 *)(pcVar11 + 0x18) = uVar7;
  cv::error(-5,(String *)&local_10,"void cvCreateData(CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x37a);
  cv::String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 0025b498 (36 bytes) name=cvCreateMat

undefined8 cvCreateMat(void)

{
  undefined8 uVar1;
  
  uVar1 = cvCreateMatHeader();
  cvCreateData();
  return uVar1;
}


==================================================================

### FUNC 0025b4bc (216 bytes) name=cvCloneMat

undefined8 cvCloneMat(uint *param_1)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  char *pcVar4;
  undefined8 uVar5;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((((param_1 == (uint *)0x0) || (uVar1 = *param_1, (uVar1 & 0xffff0000) != 0x42420000)) ||
      (uVar3 = param_1[9], (int)uVar3 < 1)) || (uVar2 = param_1[8], (int)uVar2 < 1)) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)cv::String::allocate((String *)&local_10,0x10);
    uVar5 = s_Bad_CvMat_header_00461940._8_8_;
    *(undefined8 *)pcVar4 = s_Bad_CvMat_header_00461940._0_8_;
    *(undefined8 *)(pcVar4 + 8) = uVar5;
    cv::error(-5,(String *)&local_10,"CvMat* cvCloneMat(const CvMat*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xd3);
    cv::String::deallocate((String *)&local_10);
    uVar2 = param_1[8];
    uVar3 = param_1[9];
    uVar1 = *param_1;
  }
  uVar5 = cvCreateMatHeader(uVar2,uVar3,uVar1);
  if (*(long *)(param_1 + 6) != 0) {
    cvCreateData();
    cvCopy(param_1,uVar5,0);
  }
  return uVar5;
}


==================================================================

### FUNC 0025b5a8 (36 bytes) name=cvCreateMatND

undefined8 cvCreateMatND(void)

{
  undefined8 uVar1;
  
  uVar1 = cvCreateMatNDHeader();
  cvCreateData();
  return uVar1;
}


==================================================================

### FUNC 0025b5cc (1200 bytes) name=cvCloneMatND

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

cv * cvCloneMatND(cv *param_1)

{
  int iVar1;
  int iVar2;
  int *piVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  cv *this;
  char *pcVar9;
  int iVar10;
  int iVar11;
  AutoBuffer *in_x5;
  long lVar12;
  undefined4 uVar13;
  undefined4 uVar14;
  undefined4 uVar15;
  undefined4 uVar16;
  undefined4 uVar17;
  undefined4 uVar18;
  undefined4 uVar19;
  undefined4 uVar20;
  AutoBuffer local_180;
  undefined1 uStack_17f;
  undefined1 uStack_17e;
  undefined1 uStack_17d;
  undefined1 uStack_17c;
  undefined1 uStack_17b;
  undefined1 uStack_17a;
  undefined1 uStack_179;
  undefined1 uStack_178;
  undefined1 uStack_177;
  undefined1 uStack_176;
  undefined1 uStack_175;
  undefined1 uStack_174;
  undefined1 uStack_173;
  undefined1 uStack_172;
  undefined1 uStack_171;
  undefined1 uStack_170;
  undefined1 uStack_16f;
  undefined1 uStack_16e;
  undefined1 uStack_16d;
  undefined1 uStack_16c;
  undefined1 uStack_16b;
  undefined1 uStack_16a;
  undefined1 uStack_169;
  undefined1 uStack_168;
  undefined1 uStack_167;
  undefined1 uStack_166;
  undefined1 uStack_165;
  undefined1 uStack_164;
  undefined1 uStack_163;
  undefined1 uStack_162;
  undefined1 uStack_161;
  undefined8 local_158;
  Mat *local_150;
  undefined4 local_148;
  undefined4 local_144;
  Mat aMStack_140 [4];
  int local_13c;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  long local_108;
  undefined4 *local_100;
  undefined1 *local_f8;
  undefined1 auStack_f0 [16];
  Mat aMStack_e0 [4];
  int local_dc;
  long local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_a8;
  undefined4 *local_a0;
  undefined1 *local_98;
  undefined1 auStack_90 [16];
  undefined8 local_80;
  undefined8 uStack_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  
  if ((param_1 == (cv *)0x0) || ((*(uint *)param_1 & 0xffff0000) != 0x42430000)) {
    local_80 = 0;
    uStack_78 = 0;
    in_x5 = (AutoBuffer *)cv::String::allocate((String *)&local_80,0x12);
    uVar7 = DAT_00461960;
    uVar6 = DAT_00461958;
    *(undefined2 *)(in_x5 + 0x10) = _LAB_00461968;
    *(undefined8 *)in_x5 = uVar6;
    *(undefined8 *)(in_x5 + 8) = uVar7;
    cv::error(-5,(String *)&local_80,"CvMatND* cvCloneMatND(const CvMatND*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x12d);
    cv::String::deallocate((String *)&local_80);
  }
  iVar11 = *(int *)(param_1 + 4);
  if (0x20 < iVar11) {
    local_80 = 0;
    uStack_78 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_80,0x17);
    cVar4 = s_src_>dims_<__CV_MAX_DIM_00461970[0x16];
    uVar8 = s_src_>dims_<__CV_MAX_DIM_00461970._20_2_;
    uVar7 = s_src_>dims_<__CV_MAX_DIM_00461970._8_8_;
    uVar6 = s_src_>dims_<__CV_MAX_DIM_00461970._0_8_;
    in_x5 = (AutoBuffer *)(ulong)(byte)s_src_>dims_<__CV_MAX_DIM_00461970[0x16];
    *(undefined4 *)(pcVar9 + 0x10) = s_src_>dims_<__CV_MAX_DIM_00461970._16_4_;
    *(undefined2 *)(pcVar9 + 0x14) = uVar8;
    pcVar9[0x16] = cVar4;
    *(undefined8 *)pcVar9 = uVar6;
    *(undefined8 *)(pcVar9 + 8) = uVar7;
    cv::error(-0xd7,(String *)&local_80,"CvMatND* cvCloneMatND(const CvMatND*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x12f);
    cv::String::deallocate((String *)&local_80);
    iVar11 = *(int *)(param_1 + 4);
  }
  if (0 < iVar11) {
    iVar1 = (iVar11 - 5U >> 2) + 1;
    iVar10 = iVar1 * 4;
    if (iVar11 - 1U < 4) {
      iVar10 = 0;
    }
    else {
      uVar13 = *(undefined4 *)(param_1 + 0x20);
      uVar17 = *(undefined4 *)(param_1 + 0x24);
      uVar14 = *(undefined4 *)(param_1 + 0x28);
      uVar18 = *(undefined4 *)(param_1 + 0x2c);
      uVar15 = *(undefined4 *)(param_1 + 0x30);
      uVar19 = *(undefined4 *)(param_1 + 0x34);
      uVar16 = *(undefined4 *)(param_1 + 0x38);
      uVar20 = *(undefined4 *)(param_1 + 0x3c);
      local_180 = SUB41(uVar13,0);
      uStack_17f = (undefined1)((uint)uVar13 >> 8);
      uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
      uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
      uStack_17c = (undefined1)uVar14;
      uStack_17b = (undefined1)((uint)uVar14 >> 8);
      uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
      uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
      uStack_178 = (undefined1)uVar15;
      uStack_177 = (undefined1)((uint)uVar15 >> 8);
      uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
      uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
      uStack_174 = (undefined1)uVar16;
      uStack_173 = (undefined1)((uint)uVar16 >> 8);
      uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
      uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
      uStack_170 = (undefined1)uVar17;
      uStack_16f = (undefined1)((uint)uVar17 >> 8);
      uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
      uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
      uStack_16c = (undefined1)uVar18;
      uStack_16b = (undefined1)((uint)uVar18 >> 8);
      uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
      uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
      uStack_168 = (undefined1)uVar19;
      uStack_167 = (undefined1)((uint)uVar19 >> 8);
      uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
      uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
      uStack_164 = (undefined1)uVar20;
      uStack_163 = (undefined1)((uint)uVar20 >> 8);
      uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
      uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
      uStack_78 = CONCAT17(uStack_171,
                           CONCAT16(uStack_172,CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
      local_80 = CONCAT17(uStack_179,
                          CONCAT16(uStack_17a,CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))));
      if (iVar1 != 1) {
        uVar13 = *(undefined4 *)(param_1 + 0x40);
        uVar17 = *(undefined4 *)(param_1 + 0x44);
        uVar14 = *(undefined4 *)(param_1 + 0x48);
        uVar18 = *(undefined4 *)(param_1 + 0x4c);
        uVar15 = *(undefined4 *)(param_1 + 0x50);
        uVar19 = *(undefined4 *)(param_1 + 0x54);
        uVar16 = *(undefined4 *)(param_1 + 0x58);
        uVar20 = *(undefined4 *)(param_1 + 0x5c);
        in_x5 = &local_180;
        local_180 = SUB41(uVar13,0);
        uStack_17f = (undefined1)((uint)uVar13 >> 8);
        uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
        uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
        uStack_17c = (undefined1)uVar14;
        uStack_17b = (undefined1)((uint)uVar14 >> 8);
        uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
        uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
        uStack_178 = (undefined1)uVar15;
        uStack_177 = (undefined1)((uint)uVar15 >> 8);
        uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
        uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
        uStack_174 = (undefined1)uVar16;
        uStack_173 = (undefined1)((uint)uVar16 >> 8);
        uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
        uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
        uStack_170 = (undefined1)uVar17;
        uStack_16f = (undefined1)((uint)uVar17 >> 8);
        uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
        uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
        uStack_16c = (undefined1)uVar18;
        uStack_16b = (undefined1)((uint)uVar18 >> 8);
        uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
        uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
        uStack_168 = (undefined1)uVar19;
        uStack_167 = (undefined1)((uint)uVar19 >> 8);
        uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
        uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
        uStack_164 = (undefined1)uVar20;
        uStack_163 = (undefined1)((uint)uVar20 >> 8);
        uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
        uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
        uStack_68 = CONCAT17(uStack_171,
                             CONCAT16(uStack_172,CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
        local_70 = CONCAT17(uStack_179,
                            CONCAT16(uStack_17a,CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))));
        if (iVar1 != 2) {
          uVar13 = *(undefined4 *)(param_1 + 0x60);
          uVar17 = *(undefined4 *)(param_1 + 100);
          uVar14 = *(undefined4 *)(param_1 + 0x68);
          uVar18 = *(undefined4 *)(param_1 + 0x6c);
          uVar15 = *(undefined4 *)(param_1 + 0x70);
          uVar19 = *(undefined4 *)(param_1 + 0x74);
          uVar16 = *(undefined4 *)(param_1 + 0x78);
          uVar20 = *(undefined4 *)(param_1 + 0x7c);
          local_180 = SUB41(uVar13,0);
          uStack_17f = (undefined1)((uint)uVar13 >> 8);
          uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
          uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
          uStack_17c = (undefined1)uVar14;
          uStack_17b = (undefined1)((uint)uVar14 >> 8);
          uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
          uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
          uStack_178 = (undefined1)uVar15;
          uStack_177 = (undefined1)((uint)uVar15 >> 8);
          uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
          uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
          uStack_174 = (undefined1)uVar16;
          uStack_173 = (undefined1)((uint)uVar16 >> 8);
          uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
          uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
          uStack_170 = (undefined1)uVar17;
          uStack_16f = (undefined1)((uint)uVar17 >> 8);
          uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
          uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
          uStack_16c = (undefined1)uVar18;
          uStack_16b = (undefined1)((uint)uVar18 >> 8);
          uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
          uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
          uStack_168 = (undefined1)uVar19;
          uStack_167 = (undefined1)((uint)uVar19 >> 8);
          uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
          uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
          uStack_164 = (undefined1)uVar20;
          uStack_163 = (undefined1)((uint)uVar20 >> 8);
          uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
          uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
          uStack_58 = CONCAT17(uStack_171,
                               CONCAT16(uStack_172,CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15)))
                              );
          local_60 = CONCAT17(uStack_179,
                              CONCAT16(uStack_17a,CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))))
          ;
          if (iVar1 != 3) {
            uVar13 = *(undefined4 *)(param_1 + 0x80);
            uVar17 = *(undefined4 *)(param_1 + 0x84);
            uVar14 = *(undefined4 *)(param_1 + 0x88);
            uVar18 = *(undefined4 *)(param_1 + 0x8c);
            uVar15 = *(undefined4 *)(param_1 + 0x90);
            uVar19 = *(undefined4 *)(param_1 + 0x94);
            uVar16 = *(undefined4 *)(param_1 + 0x98);
            uVar20 = *(undefined4 *)(param_1 + 0x9c);
            local_180 = SUB41(uVar13,0);
            uStack_17f = (undefined1)((uint)uVar13 >> 8);
            uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
            uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
            uStack_17c = (undefined1)uVar14;
            uStack_17b = (undefined1)((uint)uVar14 >> 8);
            uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
            uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
            uStack_178 = (undefined1)uVar15;
            uStack_177 = (undefined1)((uint)uVar15 >> 8);
            uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
            uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
            uStack_174 = (undefined1)uVar16;
            uStack_173 = (undefined1)((uint)uVar16 >> 8);
            uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
            uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
            uStack_170 = (undefined1)uVar17;
            uStack_16f = (undefined1)((uint)uVar17 >> 8);
            uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
            uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
            uStack_16c = (undefined1)uVar18;
            uStack_16b = (undefined1)((uint)uVar18 >> 8);
            uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
            uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
            uStack_168 = (undefined1)uVar19;
            uStack_167 = (undefined1)((uint)uVar19 >> 8);
            uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
            uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
            uStack_164 = (undefined1)uVar20;
            uStack_163 = (undefined1)((uint)uVar20 >> 8);
            uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
            uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
            uStack_48 = CONCAT17(uStack_171,
                                 CONCAT16(uStack_172,
                                          CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
            local_50 = CONCAT17(uStack_179,
                                CONCAT16(uStack_17a,CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))
                                        ));
            if (iVar1 != 4) {
              uVar13 = *(undefined4 *)(param_1 + 0xa0);
              uVar17 = *(undefined4 *)(param_1 + 0xa4);
              uVar14 = *(undefined4 *)(param_1 + 0xa8);
              uVar18 = *(undefined4 *)(param_1 + 0xac);
              uVar15 = *(undefined4 *)(param_1 + 0xb0);
              uVar19 = *(undefined4 *)(param_1 + 0xb4);
              uVar16 = *(undefined4 *)(param_1 + 0xb8);
              uVar20 = *(undefined4 *)(param_1 + 0xbc);
              local_180 = SUB41(uVar13,0);
              uStack_17f = (undefined1)((uint)uVar13 >> 8);
              uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
              uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
              uStack_17c = (undefined1)uVar14;
              uStack_17b = (undefined1)((uint)uVar14 >> 8);
              uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
              uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
              uStack_178 = (undefined1)uVar15;
              uStack_177 = (undefined1)((uint)uVar15 >> 8);
              uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
              uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
              uStack_174 = (undefined1)uVar16;
              uStack_173 = (undefined1)((uint)uVar16 >> 8);
              uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
              uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
              uStack_170 = (undefined1)uVar17;
              uStack_16f = (undefined1)((uint)uVar17 >> 8);
              uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
              uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
              uStack_16c = (undefined1)uVar18;
              uStack_16b = (undefined1)((uint)uVar18 >> 8);
              uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
              uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
              uStack_168 = (undefined1)uVar19;
              uStack_167 = (undefined1)((uint)uVar19 >> 8);
              uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
              uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
              uStack_164 = (undefined1)uVar20;
              uStack_163 = (undefined1)((uint)uVar20 >> 8);
              uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
              uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
              uStack_38 = CONCAT17(uStack_171,
                                   CONCAT16(uStack_172,
                                            CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
              local_40 = CONCAT17(uStack_179,
                                  CONCAT16(uStack_17a,
                                           CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))));
              if (iVar1 != 5) {
                uVar13 = *(undefined4 *)(param_1 + 0xc0);
                uVar17 = *(undefined4 *)(param_1 + 0xc4);
                uVar14 = *(undefined4 *)(param_1 + 200);
                uVar18 = *(undefined4 *)(param_1 + 0xcc);
                uVar15 = *(undefined4 *)(param_1 + 0xd0);
                uVar19 = *(undefined4 *)(param_1 + 0xd4);
                uVar16 = *(undefined4 *)(param_1 + 0xd8);
                uVar20 = *(undefined4 *)(param_1 + 0xdc);
                local_180 = SUB41(uVar13,0);
                uStack_17f = (undefined1)((uint)uVar13 >> 8);
                uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
                uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
                uStack_17c = (undefined1)uVar14;
                uStack_17b = (undefined1)((uint)uVar14 >> 8);
                uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
                uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
                uStack_178 = (undefined1)uVar15;
                uStack_177 = (undefined1)((uint)uVar15 >> 8);
                uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
                uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
                uStack_174 = (undefined1)uVar16;
                uStack_173 = (undefined1)((uint)uVar16 >> 8);
                uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
                uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
                uStack_170 = (undefined1)uVar17;
                uStack_16f = (undefined1)((uint)uVar17 >> 8);
                uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
                uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
                uStack_16c = (undefined1)uVar18;
                uStack_16b = (undefined1)((uint)uVar18 >> 8);
                uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
                uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
                uStack_168 = (undefined1)uVar19;
                uStack_167 = (undefined1)((uint)uVar19 >> 8);
                uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
                uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
                uStack_164 = (undefined1)uVar20;
                uStack_163 = (undefined1)((uint)uVar20 >> 8);
                uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
                uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
                uStack_28 = CONCAT17(uStack_171,
                                     CONCAT16(uStack_172,
                                              CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
                local_30 = CONCAT17(uStack_179,
                                    CONCAT16(uStack_17a,
                                             CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))));
                if (iVar1 != 6) {
                  uVar13 = *(undefined4 *)(param_1 + 0xe0);
                  uVar17 = *(undefined4 *)(param_1 + 0xe4);
                  uVar14 = *(undefined4 *)(param_1 + 0xe8);
                  uVar18 = *(undefined4 *)(param_1 + 0xec);
                  uVar15 = *(undefined4 *)(param_1 + 0xf0);
                  uVar19 = *(undefined4 *)(param_1 + 0xf4);
                  uVar16 = *(undefined4 *)(param_1 + 0xf8);
                  uVar20 = *(undefined4 *)(param_1 + 0xfc);
                  local_180 = SUB41(uVar13,0);
                  uStack_17f = (undefined1)((uint)uVar13 >> 8);
                  uStack_17e = (undefined1)((uint)uVar13 >> 0x10);
                  uStack_17d = (undefined1)((uint)uVar13 >> 0x18);
                  uStack_17c = (undefined1)uVar14;
                  uStack_17b = (undefined1)((uint)uVar14 >> 8);
                  uStack_17a = (undefined1)((uint)uVar14 >> 0x10);
                  uStack_179 = (undefined1)((uint)uVar14 >> 0x18);
                  uStack_178 = (undefined1)uVar15;
                  uStack_177 = (undefined1)((uint)uVar15 >> 8);
                  uStack_176 = (undefined1)((uint)uVar15 >> 0x10);
                  uStack_175 = (undefined1)((uint)uVar15 >> 0x18);
                  uStack_174 = (undefined1)uVar16;
                  uStack_173 = (undefined1)((uint)uVar16 >> 8);
                  uStack_172 = (undefined1)((uint)uVar16 >> 0x10);
                  uStack_171 = (undefined1)((uint)uVar16 >> 0x18);
                  uStack_170 = (undefined1)uVar17;
                  uStack_16f = (undefined1)((uint)uVar17 >> 8);
                  uStack_16e = (undefined1)((uint)uVar17 >> 0x10);
                  uStack_16d = (undefined1)((uint)uVar17 >> 0x18);
                  uStack_16c = (undefined1)uVar18;
                  uStack_16b = (undefined1)((uint)uVar18 >> 8);
                  uStack_16a = (undefined1)((uint)uVar18 >> 0x10);
                  uStack_169 = (undefined1)((uint)uVar18 >> 0x18);
                  uStack_168 = (undefined1)uVar19;
                  uStack_167 = (undefined1)((uint)uVar19 >> 8);
                  uStack_166 = (undefined1)((uint)uVar19 >> 0x10);
                  uStack_165 = (undefined1)((uint)uVar19 >> 0x18);
                  uStack_164 = (undefined1)uVar20;
                  uStack_163 = (undefined1)((uint)uVar20 >> 8);
                  uStack_162 = (undefined1)((uint)uVar20 >> 0x10);
                  uStack_161 = (undefined1)((uint)uVar20 >> 0x18);
                  uStack_18 = CONCAT17(uStack_171,
                                       CONCAT16(uStack_172,
                                                CONCAT15(uStack_173,CONCAT14(uStack_174,uVar15))));
                  local_20 = CONCAT17(uStack_179,
                                      CONCAT16(uStack_17a,
                                               CONCAT15(uStack_17b,CONCAT14(uStack_17c,uVar13))));
                }
              }
            }
          }
        }
      }
      if (iVar11 == iVar10) goto LAB_0025b804;
    }
    iVar1 = iVar10 + 1;
    *(undefined4 *)((String *)&local_80 + (long)iVar10 * 4) =
         *(undefined4 *)(param_1 + (long)iVar10 * 8 + 0x20);
    if (iVar1 < iVar11) {
      iVar2 = iVar10 + 2;
      *(undefined4 *)((String *)&local_80 + (long)iVar1 * 4) =
           *(undefined4 *)(param_1 + (long)iVar1 * 8 + 0x20);
      if (iVar2 < iVar11) {
        iVar1 = iVar10 + 3;
        *(undefined4 *)((String *)&local_80 + (long)iVar2 * 4) =
             *(undefined4 *)(param_1 + (long)iVar2 * 8 + 0x20);
        if (iVar1 < iVar11) {
          iVar2 = iVar10 + 4;
          *(undefined4 *)((String *)&local_80 + (long)iVar1 * 4) =
               *(undefined4 *)(param_1 + (long)iVar1 * 8 + 0x20);
          if (iVar2 < iVar11) {
            iVar1 = iVar10 + 5;
            *(undefined4 *)((String *)&local_80 + (long)iVar2 * 4) =
                 *(undefined4 *)(param_1 + (long)iVar2 * 8 + 0x20);
            if (iVar1 < iVar11) {
              iVar10 = iVar10 + 6;
              *(undefined4 *)((String *)&local_80 + (long)iVar1 * 4) =
                   *(undefined4 *)(param_1 + (long)iVar1 * 8 + 0x20);
              if (iVar10 < iVar11) {
                *(undefined4 *)((String *)&local_80 + (long)iVar10 * 4) =
                     *(undefined4 *)(param_1 + (long)iVar10 * 8 + 0x20);
              }
            }
          }
        }
      }
    }
  }
LAB_0025b804:
  this = (cv *)cvCreateMatNDHeader(iVar11,(String *)&local_80,*(undefined4 *)param_1);
  if (*(long *)(param_1 + 0x18) != 0) {
    cvCreateData();
    cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
    cv::cvarrToMat(this,(void *)0x0,true,false,0,in_x5);
    lVar12 = *(long *)(this + 0x18);
    local_148 = 0;
    local_144 = 0;
    local_158 = CONCAT44(local_158._4_4_,0x2010000);
    local_150 = aMStack_e0;
    cv::Mat::copyTo(aMStack_140,(_OutputArray *)&local_158);
    if (local_d0 != lVar12) {
      local_158 = 0;
      local_150 = (Mat *)0x0;
      pcVar9 = (char *)cv::String::allocate((String *)&local_158,0x12);
      uVar7 = s__dst_data____data0_00461988._8_8_;
      uVar6 = s__dst_data____data0_00461988._0_8_;
      *(undefined2 *)(pcVar9 + 0x10) = s__dst_data____data0_00461988._16_2_;
      *(undefined8 *)pcVar9 = uVar6;
      *(undefined8 *)(pcVar9 + 8) = uVar7;
      cv::error(-0xd7,(String *)&local_158,"CvMatND* cvCloneMatND(const CvMatND*)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x13e);
      cv::String::deallocate((String *)&local_158);
    }
    if (local_a8 != 0) {
      piVar3 = (int *)(local_a8 + 0x14);
      do {
        iVar11 = *piVar3;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar5) {
          *piVar3 = iVar11 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate(aMStack_e0);
      }
    }
    local_a8 = 0;
    local_d0 = 0;
    local_b8 = 0;
    local_c0 = 0;
    local_c8 = 0;
    if (0 < local_dc) {
      iVar11 = 0;
      do {
        *local_a0 = 0;
        iVar11 = iVar11 + 1;
        local_a0 = local_a0 + 1;
      } while (iVar11 < local_dc);
    }
    if (local_98 != auStack_90) {
      cv::fastFree(local_98);
    }
    if (local_108 != 0) {
      piVar3 = (int *)(local_108 + 0x14);
      do {
        iVar11 = *piVar3;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar5) {
          *piVar3 = iVar11 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate(aMStack_140);
      }
    }
    local_108 = 0;
    local_130 = 0;
    local_118 = 0;
    local_120 = 0;
    local_128 = 0;
    if (0 < local_13c) {
      iVar11 = 0;
      do {
        *local_100 = 0;
        iVar11 = iVar11 + 1;
        local_100 = local_100 + 1;
      } while (iVar11 < local_13c);
    }
    if (local_f8 != auStack_f0) {
      cv::fastFree(local_f8);
    }
  }
  return this;
}


==================================================================

### FUNC 0025bb08 (312 bytes) name=cvReleaseData

void cvReleaseData(uint *param_1)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  char *pcVar8;
  int *piVar9;
  void *pvVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    uVar1 = *param_1 & 0xffff0000;
    if (uVar1 == 0x42420000) {
      if ((0 < (int)param_1[9]) && (0 < (int)param_1[8])) goto LAB_0025bbd8;
    }
    else {
      if (uVar1 == 0x42430000) {
LAB_0025bbd8:
        if (*(long *)(param_1 + 6) == 0) {
          return;
        }
        piVar9 = *(int **)(param_1 + 2);
        param_1[6] = 0;
        param_1[7] = 0;
        if ((piVar9 != (int *)0x0) && (iVar2 = *piVar9, *piVar9 = iVar2 + -1, iVar2 + -1 == 0)) {
          cv::cvFree_(piVar9);
        }
        param_1[2] = 0;
        param_1[3] = 0;
        return;
      }
      if (*param_1 == 0x90) {
        if (DAT_00531f20 == (code *)0x0) {
          pvVar10 = *(void **)(param_1 + 0x22);
          param_1[0x16] = 0;
          param_1[0x17] = 0;
          param_1[0x22] = 0;
          param_1[0x23] = 0;
          cv::cvFree_(pvVar10);
          return;
        }
        (*DAT_00531f20)(param_1,2);
        return;
      }
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar7 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar8 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar8 + 0x24) = uVar7;
  *(undefined8 *)pcVar8 = uVar3;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  cv::error(-5,(String *)&local_10,"void cvReleaseData(CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x3eb);
  cv::String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 0025bc54 (1176 bytes) name=cvSetData

void cvSetData(uint *param_1,long param_2,uint param_3)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char cVar9;
  uint uVar10;
  uint uVar11;
  char *pcVar12;
  ulong uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  int iVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (uint *)0x0) goto LAB_0025bca0;
  uVar10 = *param_1;
  uVar13 = (ulong)uVar10;
  if ((uVar10 & 0xffff0000) == 0x42420000) {
    uVar11 = param_1[9];
    uVar10 = 0x42420000;
    if ((0 < (int)uVar11) && (0 < (int)param_1[8])) goto LAB_0025bd3c;
LAB_0025bf08:
    if ((0 < (int)uVar11) && (uVar14 = param_1[8], 0 < (int)uVar14)) {
      uVar10 = (uint)uVar13 & 0xfff;
      uVar11 = uVar11 * (((uint)(uVar13 >> 3) & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> (((uint)uVar13 & 7) << 1)) & 3));
      if ((param_3 == 0) || (param_3 == 0x7fffffff)) {
        param_1[1] = uVar11;
        *(long *)(param_1 + 6) = param_2;
        uVar15 = 0x4000;
        param_3 = uVar11;
      }
      else {
        if (((int)param_3 < (int)uVar11) && (param_2 != 0)) {
          local_10 = 0;
          local_8 = 0;
          cv::String::allocate((String *)&local_10,0);
          cv::error(-0xd,(String *)&local_10,"void cvSetData(CvArr*, void*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x392);
          cv::String::deallocate((String *)&local_10);
          uVar14 = param_1[8];
        }
        param_1[1] = param_3;
        *(long *)(param_1 + 6) = param_2;
        if (uVar14 == 1) {
          *param_1 = uVar10 | 0x42424000;
          return;
        }
        uVar15 = 0;
        if (uVar11 == param_3) {
          uVar15 = 0x4000;
          param_3 = uVar11;
        }
      }
      if (0x7fffffff < (long)(int)param_3 * (long)(int)uVar14) {
        uVar15 = 0;
      }
      *param_1 = uVar10 | 0x42420000 | uVar15;
      return;
    }
  }
  else {
    if ((uVar10 & 0xffff0000) != 0x42430000) {
      if (uVar10 != 0x90) goto LAB_0025bca0;
      goto LAB_0025bebc;
    }
LAB_0025bd3c:
    cvReleaseData(param_1);
    uVar11 = *param_1;
    uVar13 = (ulong)uVar11;
    uVar10 = uVar11 & 0xffff0000;
    if (uVar10 == 0x42420000) {
      uVar11 = param_1[9];
      goto LAB_0025bf08;
    }
    if (uVar11 == 0x90) {
LAB_0025bebc:
      iVar17 = ((int)(uint)(byte)param_1[4] >> 3) * param_1[2];
      uVar10 = param_1[0xb];
      uVar11 = iVar17 * param_1[10];
      if ((param_3 == 0x7fffffff) || ((int)uVar10 < 2)) {
        param_1[0x18] = uVar11;
      }
      else {
        if (((int)param_3 < (int)uVar11) && (param_2 != 0)) {
          local_10 = 0;
          local_8 = 0;
          cv::String::allocate((String *)&local_10,0);
          cv::error(-0xd,(String *)&local_10,"void cvSetData(CvArr*, void*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x3a7);
          cv::String::deallocate((String *)&local_10);
          uVar10 = param_1[0xb];
        }
        param_1[0x18] = param_3;
        uVar11 = param_3;
      }
      param_1[0x14] = uVar11 * uVar10;
      *(long *)(param_1 + 0x22) = param_2;
      *(long *)(param_1 + 0x16) = param_2;
      if ((((param_3 | (uint)param_2) & 7) == 0) &&
         (param_3 == (iVar17 * param_1[10] + 7 & 0xfffffff8))) {
        param_1[9] = 8;
        return;
      }
      param_1[9] = 4;
      return;
    }
  }
  if (uVar10 == 0x42430000) {
    if (param_3 != 0x7fffffff) {
      local_10 = 0;
      local_8 = 0;
      pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x3b);
      cVar9 = s_For_multidimensional_array_only_C_004619a0[0x3a];
      uVar6 = s_For_multidimensional_array_only_C_004619a0._56_2_;
      uVar8 = s_For_multidimensional_array_only_C_004619a0._40_8_;
      uVar7 = s_For_multidimensional_array_only_C_004619a0._32_8_;
      uVar5 = s_For_multidimensional_array_only_C_004619a0._24_8_;
      uVar4 = s_For_multidimensional_array_only_C_004619a0._16_8_;
      uVar3 = s_For_multidimensional_array_only_C_004619a0._8_8_;
      uVar2 = s_For_multidimensional_array_only_C_004619a0._0_8_;
      *(undefined8 *)(pcVar12 + 0x30) = s_For_multidimensional_array_only_C_004619a0._48_8_;
      *(undefined2 *)(pcVar12 + 0x38) = uVar6;
      pcVar12[0x3a] = cVar9;
      *(undefined8 *)pcVar12 = uVar2;
      *(undefined8 *)(pcVar12 + 8) = uVar3;
      *(undefined8 *)(pcVar12 + 0x10) = uVar4;
      *(undefined8 *)(pcVar12 + 0x18) = uVar5;
      *(undefined8 *)(pcVar12 + 0x20) = uVar7;
      *(undefined8 *)(pcVar12 + 0x28) = uVar8;
      cv::error(-0xd,(String *)&local_10,"void cvSetData(CvArr*, void*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x3c0);
      cv::String::deallocate((String *)&local_10);
      uVar13 = (ulong)*param_1;
    }
    *(long *)(param_1 + 6) = param_2;
    iVar17 = param_1[1] - 1;
    lVar16 = (long)(int)(((uint)(uVar13 >> 3) & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> (((uint)uVar13 & 7) << 1)) & 3));
    if (iVar17 < 0) {
      return;
    }
    do {
      if (0x7fffffff < lVar16) {
        local_10 = 0;
        local_8 = 0;
        pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x14);
        uVar3 = s_The_array_is_too_big_00461830._8_8_;
        uVar2 = s_The_array_is_too_big_00461830._0_8_;
        *(undefined4 *)(pcVar12 + 0x10) = s_The_array_is_too_big_00461830._16_4_;
        *(undefined8 *)pcVar12 = uVar2;
        *(undefined8 *)(pcVar12 + 8) = uVar3;
        cv::error(-0xd3,(String *)&local_10,"void cvSetData(CvArr*, void*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x3c8);
        cv::String::deallocate((String *)&local_10);
      }
      iVar1 = iVar17 + -1;
      uVar10 = param_1[(long)iVar17 * 2 + 8];
      param_1[(long)iVar17 * 2 + 9] = (uint)lVar16;
      lVar16 = lVar16 * (int)uVar10;
      iVar17 = iVar1;
    } while (iVar1 != -1);
    return;
  }
LAB_0025bca0:
  local_10 = 0;
  local_8 = 0;
  pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar2 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar12 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar12 + 0x24) = uVar6;
  *(undefined8 *)pcVar12 = uVar2;
  *(undefined8 *)(pcVar12 + 8) = uVar3;
  *(undefined8 *)(pcVar12 + 0x10) = uVar4;
  *(undefined8 *)(pcVar12 + 0x18) = uVar5;
  cv::error(-5,(String *)&local_10,"void cvSetData(CvArr*, void*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x3ce);
  cv::String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 0025c150 (296 bytes) name=cvGetElemType

uint cvGetElemType(uint *param_1)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  int iVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    uVar1 = *param_1;
    if ((uVar1 & 0xffff0000) == 0x42420000) {
      if ((0 < (int)param_1[9]) && (0 < (int)param_1[8])) goto LAB_0025c1d8;
    }
    else {
      if (((uVar1 & 0xffff0000) + 0xbdbd0000 & 0xfffe0000) == 0) {
LAB_0025c1d8:
        return uVar1 & 0xfff;
      }
      if ((uVar1 == 0x90) && (*(long *)(param_1 + 0x16) != 0)) {
        iVar8 = 0x14;
        if (-1 < (int)param_1[4]) {
          iVar8 = 0;
        }
        return (0x43160520 >> (iVar8 + ((param_1[4] & 0xf0) >> 2) & 0x1f) & 7U) +
               (param_1[2] - 1) * 8;
      }
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar2 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar7 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar7 + 0x24) = uVar6;
  *(undefined8 *)pcVar7 = uVar2;
  *(undefined8 *)(pcVar7 + 8) = uVar3;
  *(undefined8 *)(pcVar7 + 0x10) = uVar4;
  *(undefined8 *)(pcVar7 + 0x18) = uVar5;
  cv::error(-5,(String *)&local_10,"int cvGetElemType(const CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x448);
  cv::String::deallocate((String *)&local_10);
  return 0xffffffff;
}


==================================================================

### FUNC 0025c28c (692 bytes) name=cvGetDims

ulong cvGetDims(uint *param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  uint *puVar9;
  uint uVar10;
  char *pcVar11;
  uint *puVar12;
  long lVar13;
  uint *puVar14;
  ulong uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    uVar2 = *param_1 & 0xffff0000;
    if (uVar2 == 0x42420000) {
      if ((0 < (int)param_1[9]) && (0 < (int)param_1[8])) {
        if (param_2 == (uint *)0x0) {
          return 2;
        }
        *param_2 = param_1[8];
        param_2[1] = param_1[9];
        return 2;
      }
    }
    else {
      if ((*param_1 == 0x90) && (*(long *)(param_1 + 0x16) != 0)) {
        if (param_2 == (uint *)0x0) {
          return 2;
        }
        *param_2 = param_1[0xb];
        param_2[1] = param_1[10];
        return 2;
      }
      if (uVar2 == 0x42430000) {
        uVar2 = param_1[1];
        uVar15 = (ulong)uVar2;
        if (param_2 == (uint *)0x0) {
          return uVar15;
        }
        if ((int)uVar2 < 1) {
          return uVar15;
        }
        puVar12 = param_1 + 8;
        if ((puVar12 < param_2 + (int)uVar2 && param_2 < param_1 + ((long)(int)uVar2 + 4) * 2) ||
           (uVar2 < 9)) {
          do {
            puVar14 = puVar12 + 2;
            *param_2 = *puVar12;
            param_2 = param_2 + 1;
            puVar12 = puVar14;
          } while (puVar14 != param_1 + ((ulong)(uVar2 - 1) + 5) * 2);
          return uVar15;
        }
        uVar10 = 0;
        uVar1 = (uVar2 - 5 >> 2) + 1;
        uVar3 = uVar1 * 4;
        puVar14 = param_2;
        do {
          uVar16 = *puVar12;
          uVar17 = puVar12[2];
          puVar9 = puVar12 + 4;
          uVar18 = puVar12[6];
          puVar12 = puVar12 + 8;
          uVar10 = uVar10 + 1;
          *(ulong *)(puVar14 + 2) =
               CONCAT17((char)(uVar18 >> 0x18),
                        CONCAT16((char)(uVar18 >> 0x10),
                                 CONCAT15((char)(uVar18 >> 8),CONCAT14((char)uVar18,*puVar9))));
          *(ulong *)puVar14 =
               CONCAT17((char)(uVar17 >> 0x18),
                        CONCAT16((char)(uVar17 >> 0x10),
                                 CONCAT15((char)(uVar17 >> 8),CONCAT14((char)uVar17,uVar16))));
          puVar14 = puVar14 + 4;
        } while (uVar10 < uVar1);
        if (uVar2 == uVar3) {
          return uVar15;
        }
        lVar13 = (long)(int)uVar3;
        param_2[lVar13] = param_1[lVar13 * 2 + 8];
        if ((int)uVar2 <= (int)(uVar3 + 1)) {
          return uVar15;
        }
        param_2[lVar13 + 1] = param_1[(long)(int)(uVar3 + 1) * 2 + 8];
        if ((int)uVar2 <= (int)(uVar3 + 2)) {
          return uVar15;
        }
        param_2[lVar13 + 2] = param_1[(long)(int)(uVar3 + 2) * 2 + 8];
        if ((int)uVar2 <= (int)(uVar3 + 3)) {
          return uVar15;
        }
        param_2[lVar13 + 3] = param_1[(long)(int)(uVar3 + 3) * 2 + 8];
        if ((int)(uVar3 + 4) < (int)uVar2) {
          param_2[lVar13 + 4] = param_1[(long)(int)(uVar3 + 4) * 2 + 8];
          if ((int)uVar2 <= (int)(uVar3 + 5)) {
            return uVar15;
          }
          param_2[lVar13 + 5] = param_1[(long)(int)(uVar3 + 5) * 2 + 8];
          if ((int)(uVar3 + 6) < (int)uVar2) {
            param_2[lVar13 + 6] = param_1[(long)(int)(uVar3 + 6) * 2 + 8];
            return uVar15;
          }
          return uVar15;
        }
        return uVar15;
      }
      if (uVar2 == 0x42440000) {
        uVar15 = (ulong)param_1[1];
        if (param_2 != (uint *)0x0) {
          memcpy(param_2,param_1 + 0xd,
                 -(ulong)(param_1[1] >> 0x1f) & 0xfffffffc00000000 | uVar15 << 2);
          return uVar15;
        }
        return uVar15;
      }
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar8 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar7 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar11 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar11 + 0x24) = uVar8;
  *(undefined8 *)pcVar11 = uVar4;
  *(undefined8 *)(pcVar11 + 8) = uVar5;
  *(undefined8 *)(pcVar11 + 0x10) = uVar6;
  *(undefined8 *)(pcVar11 + 0x18) = uVar7;
  cv::error(-5,(String *)&local_10,"int cvGetDims(const CvArr*, int*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x47e);
  cv::String::deallocate((String *)&local_10);
  return 0xffffffff;
}


==================================================================

### FUNC 0025c554 (792 bytes) name=cvGetDimSize

uint cvGetDimSize(uint *param_1,uint param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  char cVar6;
  uint uVar7;
  char *pcVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    uVar7 = *param_1 & 0xffff0000;
    if (uVar7 == 0x42420000) {
      if (((0 < (int)param_1[9]) && (0 < (int)param_1[8])) && (*(long *)(param_1 + 6) != 0)) {
        if (param_2 == 0) {
          return param_1[8];
        }
        if (param_2 == 1) {
          return param_1[9];
        }
        local_10 = 0;
        local_8 = 0;
        pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
        cVar6 = s_bad_dimension_index_004619e0[0x12];
        uVar2 = s_bad_dimension_index_004619e0._8_8_;
        uVar1 = s_bad_dimension_index_004619e0._0_8_;
        *(undefined2 *)(pcVar8 + 0x10) = s_bad_dimension_index_004619e0._16_2_;
        pcVar8[0x12] = cVar6;
        *(undefined8 *)pcVar8 = uVar1;
        *(undefined8 *)(pcVar8 + 8) = uVar2;
        cv::error(-0xd3,(String *)&local_10,"int cvGetDimSize(const CvArr*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x497);
        goto LAB_0025c700;
      }
    }
    else {
      if ((*param_1 == 0x90) && (*(long *)(param_1 + 0x16) != 0)) {
        if (param_2 == 0) {
          if (*(long *)(param_1 + 0xc) == 0) {
            uVar7 = param_1[0xb];
          }
          else {
            uVar7 = *(uint *)(*(long *)(param_1 + 0xc) + 0x10);
          }
        }
        else {
          if (param_2 != 1) {
            local_10 = 0;
            local_8 = 0;
            pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
            cVar6 = s_bad_dimension_index_004619e0[0x12];
            uVar2 = s_bad_dimension_index_004619e0._8_8_;
            uVar1 = s_bad_dimension_index_004619e0._0_8_;
            *(undefined2 *)(pcVar8 + 0x10) = s_bad_dimension_index_004619e0._16_2_;
            pcVar8[0x12] = cVar6;
            *(undefined8 *)pcVar8 = uVar1;
            *(undefined8 *)(pcVar8 + 8) = uVar2;
            cv::error(-0xd3,(String *)&local_10,"int cvGetDimSize(const CvArr*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4a7);
            goto LAB_0025c700;
          }
          if (*(long *)(param_1 + 0xc) == 0) {
            uVar7 = param_1[10];
          }
          else {
            uVar7 = *(uint *)(*(long *)(param_1 + 0xc) + 0xc);
          }
        }
        return uVar7;
      }
      if (uVar7 == 0x42430000) {
        if (param_1[1] <= param_2) {
          local_10 = 0;
          local_8 = 0;
          pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
          cVar6 = s_bad_dimension_index_004619e0[0x12];
          uVar2 = s_bad_dimension_index_004619e0._8_8_;
          uVar1 = s_bad_dimension_index_004619e0._0_8_;
          *(undefined2 *)(pcVar8 + 0x10) = s_bad_dimension_index_004619e0._16_2_;
          pcVar8[0x12] = cVar6;
          *(undefined8 *)pcVar8 = uVar1;
          *(undefined8 *)(pcVar8 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_10,"int cvGetDimSize(const CvArr*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4af);
          cv::String::deallocate((String *)&local_10);
        }
        return param_1[(long)(int)param_2 * 2 + 8];
      }
      if (uVar7 == 0x42440000) {
        if (param_1[1] <= param_2) {
          local_10 = 0;
          local_8 = 0;
          pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
          cVar6 = s_bad_dimension_index_004619e0[0x12];
          uVar2 = s_bad_dimension_index_004619e0._8_8_;
          uVar1 = s_bad_dimension_index_004619e0._0_8_;
          *(undefined2 *)(pcVar8 + 0x10) = s_bad_dimension_index_004619e0._16_2_;
          pcVar8[0x12] = cVar6;
          *(undefined8 *)pcVar8 = uVar1;
          *(undefined8 *)(pcVar8 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_10,"int cvGetDimSize(const CvArr*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4b8);
          cv::String::deallocate((String *)&local_10);
        }
        return param_1[(long)(int)param_2 + 0xd];
      }
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar2 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar1 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar8 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar8 + 0x24) = uVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  *(undefined8 *)(pcVar8 + 0x10) = uVar3;
  *(undefined8 *)(pcVar8 + 0x18) = uVar4;
  cv::error(-5,(String *)&local_10,"int cvGetDimSize(const CvArr*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4bd);
LAB_0025c700:
  cv::String::deallocate((String *)&local_10);
  return 0xffffffff;
}


==================================================================

### FUNC 0025c8d0 (280 bytes) name=cvGetSize

ulong cvGetSize(uint *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char *pcVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 != (uint *)0x0) {
    if ((*param_1 & 0xffff0000) == 0x42420000) {
      if ((-1 < (int)param_1[9]) && (-1 < (int)param_1[8])) {
        return CONCAT44(param_1[8],param_1[9]);
      }
    }
    else if (*param_1 == 0x90) {
      if (*(long *)(param_1 + 0xc) != 0) {
        return *(ulong *)(*(long *)(param_1 + 0xc) + 0xc);
      }
      uVar7 = (ulong)param_1[10];
      uVar6 = (ulong)param_1[0xb];
      goto LAB_0025c968;
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x21);
  uVar4 = s_Array_should_be_CvMat_or_IplImag_004619f8._24_8_;
  uVar3 = s_Array_should_be_CvMat_or_IplImag_004619f8._16_8_;
  uVar2 = s_Array_should_be_CvMat_or_IplImag_004619f8._8_8_;
  uVar1 = s_Array_should_be_CvMat_or_IplImag_004619f8._0_8_;
  pcVar5[0x20] = s_Array_should_be_CvMat_or_IplImag_004619f8[0x20];
  *(undefined8 *)pcVar5 = uVar1;
  *(undefined8 *)(pcVar5 + 8) = uVar2;
  *(undefined8 *)(pcVar5 + 0x10) = uVar3;
  *(undefined8 *)(pcVar5 + 0x18) = uVar4;
  cv::error(-5,(String *)&local_10,"CvSize cvGetSize(const CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4e0);
  cv::String::deallocate((String *)&local_10);
  uVar6 = 0;
  uVar7 = 0;
LAB_0025c968:
  return uVar7 | uVar6 << 0x20;
}


==================================================================

### FUNC 0025c9fc (952 bytes) name=cvScalarToRawData

void cvScalarToRawData(long param_1,void *param_2,ulong param_3,int param_4)

{
  int iVar1;
  uint uVar2;
  undefined2 *puVar3;
  undefined1 *puVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char cVar9;
  uint uVar10;
  int iVar11;
  char *pcVar12;
  float *pfVar13;
  undefined8 *puVar14;
  ulong uVar15;
  long lVar16;
  undefined1 uVar17;
  undefined2 uVar18;
  uint uVar19;
  ulong uVar20;
  void *__dest;
  undefined4 *puVar21;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar20 = param_3 >> 3 & 0x1ff;
  uVar19 = (uint)uVar20;
  iVar1 = uVar19 + 1;
  uVar2 = (uint)param_3 & 7;
  if (3 < uVar19) {
    local_10 = 0;
    local_8 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x2b);
    cVar9 = s_The_number_of_channels_must_be_1_00461a20[0x2a];
    uVar18 = s_The_number_of_channels_must_be_1_00461a20._40_2_;
    uVar8 = s_The_number_of_channels_must_be_1_00461a20._24_8_;
    uVar7 = s_The_number_of_channels_must_be_1_00461a20._16_8_;
    uVar6 = s_The_number_of_channels_must_be_1_00461a20._8_8_;
    uVar5 = s_The_number_of_channels_must_be_1_00461a20._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_The_number_of_channels_must_be_1_00461a20._32_8_;
    *(undefined2 *)(pcVar12 + 0x28) = uVar18;
    pcVar12[0x2a] = cVar9;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xd3,(String *)&local_10,"void cvScalarToRawData(const CvScalar*, void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x5bc);
    cv::String::deallocate((String *)&local_10);
  }
  switch(uVar2) {
  case 0:
    uVar15 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
    uVar10 = (uint)uVar15;
    puVar4 = (undefined1 *)((long)param_2 + (long)(int)uVar19);
    while( true ) {
      if (0xff < uVar10) {
        uVar15 = (ulong)-(uint)(0 < (int)uVar15);
      }
      uVar19 = (int)uVar20 - 1;
      uVar20 = (ulong)uVar19;
      *puVar4 = (char)uVar15;
      if (uVar19 == 0xffffffff) break;
      uVar15 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
      uVar10 = (uint)uVar15;
      puVar4 = puVar4 + -1;
    }
    break;
  case 1:
    lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
    iVar11 = (int)lVar16;
    uVar17 = (undefined1)lVar16;
    puVar4 = (undefined1 *)((long)param_2 + (long)(int)uVar19);
    while( true ) {
      if ((0xff < iVar11 + 0x80U) && (uVar17 = 0x7f, (int)lVar16 < 1)) {
        uVar17 = 0x80;
      }
      uVar19 = (int)uVar20 - 1;
      uVar20 = (ulong)uVar19;
      *puVar4 = uVar17;
      if (uVar19 == 0xffffffff) break;
      lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
      iVar11 = (int)lVar16;
      uVar17 = (undefined1)lVar16;
      puVar4 = puVar4 + -1;
    }
    break;
  case 2:
    uVar15 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
    uVar10 = (uint)uVar15;
    puVar3 = (undefined2 *)((long)param_2 + (long)(int)uVar19 * 2);
    while( true ) {
      if (0xffff < uVar10) {
        uVar15 = (ulong)-(uint)(0 < (int)uVar15);
      }
      uVar19 = (int)uVar20 - 1;
      uVar20 = (ulong)uVar19;
      *puVar3 = (short)uVar15;
      if (uVar19 == 0xffffffff) break;
      uVar15 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
      uVar10 = (uint)uVar15;
      puVar3 = puVar3 + -1;
    }
    break;
  case 3:
    lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
    iVar11 = (int)lVar16;
    uVar18 = (undefined2)lVar16;
    puVar3 = (undefined2 *)((long)param_2 + (long)(int)uVar19 * 2);
    while( true ) {
      if ((0xffff < iVar11 + 0x8000U) && (uVar18 = 0x7fff, (int)lVar16 < 1)) {
        uVar18 = 0x8000;
      }
      uVar19 = (int)uVar20 - 1;
      uVar20 = (ulong)uVar19;
      *puVar3 = uVar18;
      if (uVar19 == 0xffffffff) break;
      lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
      iVar11 = (int)lVar16;
      uVar18 = (undefined2)lVar16;
      puVar3 = puVar3 + -1;
    }
    break;
  case 4:
    puVar21 = (undefined4 *)((long)param_2 + (long)(int)uVar19 * 4);
    lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
    *puVar21 = (int)lVar16;
    while (uVar19 = uVar19 - 1, uVar19 != 0xffffffff) {
      puVar21 = puVar21 + -1;
      lVar16 = lrint(*(double *)(param_1 + (long)(int)uVar19 * 8));
      *puVar21 = (int)lVar16;
    }
    break;
  case 5:
    pfVar13 = (float *)((long)param_2 + (long)(int)uVar19 * 4);
    *pfVar13 = (float)*(double *)(param_1 + (long)(int)uVar19 * 8);
    while (uVar19 = uVar19 - 1, uVar19 != 0xffffffff) {
      pfVar13 = pfVar13 + -1;
      *pfVar13 = (float)*(double *)(param_1 + (long)(int)uVar19 * 8);
    }
    break;
  case 6:
    puVar14 = (undefined8 *)((long)param_2 + (long)(int)uVar19 * 8);
    *puVar14 = *(undefined8 *)(param_1 + (long)(int)uVar19 * 8);
    while (uVar19 = uVar19 - 1, uVar19 != 0xffffffff) {
      puVar14 = puVar14 + -1;
      *puVar14 = *(undefined8 *)(param_1 + (long)(int)uVar19 * 8);
    }
    break;
  default:
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x11,(String *)&local_10,"void cvScalarToRawData(const CvScalar*, void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x5ea);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_4 != 0) {
    iVar1 = iVar1 << (ulong)((uint)(0xfa50L >> (uVar2 << 1)) & 3);
    uVar20 = (ulong)(((uint)(0x88442211L >> (uVar2 << 2)) & 0xf) * 0xc);
    __dest = (void *)((long)param_2 + (uVar20 - (long)iVar1));
    do {
      uVar2 = (int)uVar20 - iVar1;
      uVar20 = (ulong)uVar2;
      memcpy(__dest,param_2,(long)iVar1);
      __dest = (void *)((long)__dest + (long)-iVar1);
    } while (iVar1 < (int)uVar2);
  }
  return;
}


==================================================================

### FUNC 0025cddc (708 bytes) name=cvRawDataToScalar

void cvRawDataToScalar(long param_1,uint param_2,undefined8 *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  char cVar6;
  char *pcVar7;
  long lVar8;
  uint uVar9;
  float *pfVar10;
  undefined8 *puVar11;
  byte *pbVar12;
  ushort *puVar13;
  short *psVar14;
  int *piVar15;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar9 = param_2 >> 3 & 0x1ff;
  if (3 < uVar9) {
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x2b);
    cVar6 = s_The_number_of_channels_must_be_1_00461a20[0x2a];
    uVar5 = s_The_number_of_channels_must_be_1_00461a20._40_2_;
    uVar4 = s_The_number_of_channels_must_be_1_00461a20._24_8_;
    uVar3 = s_The_number_of_channels_must_be_1_00461a20._16_8_;
    uVar2 = s_The_number_of_channels_must_be_1_00461a20._8_8_;
    uVar1 = s_The_number_of_channels_must_be_1_00461a20._0_8_;
    *(undefined8 *)(pcVar7 + 0x20) = s_The_number_of_channels_must_be_1_00461a20._32_8_;
    *(undefined2 *)(pcVar7 + 0x28) = uVar5;
    pcVar7[0x2a] = cVar6;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    *(undefined8 *)(pcVar7 + 0x10) = uVar3;
    *(undefined8 *)(pcVar7 + 0x18) = uVar4;
    cv::error(-0xd3,(String *)&local_10,"void cvRawDataToScalar(const void*, int, CvScalar*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x605);
    cv::String::deallocate((String *)&local_10);
  }
  *param_3 = 0;
  param_3[1] = 0;
  param_3[2] = 0;
  param_3[3] = 0;
  switch(param_2 & 7) {
  case 0:
    lVar8 = (long)(int)uVar9;
    pbVar12 = (byte *)(param_1 + lVar8);
    while( true ) {
      uVar9 = uVar9 - 1;
      param_3[lVar8] = (double)*(float *)(PTR_DAT_00501fd0 + (long)(int)(*pbVar12 + 0x80) * 4);
      if (uVar9 == 0xffffffff) break;
      lVar8 = (long)(int)uVar9;
      pbVar12 = pbVar12 + -1;
    }
    break;
  case 1:
    lVar8 = (long)(int)uVar9;
    pcVar7 = (char *)(param_1 + lVar8);
    while( true ) {
      uVar9 = uVar9 - 1;
      param_3[lVar8] = (double)*(float *)(PTR_DAT_00501fd0 + (long)(*pcVar7 + 0x80) * 4);
      if (uVar9 == 0xffffffff) break;
      lVar8 = (long)(int)uVar9;
      pcVar7 = pcVar7 + -1;
    }
    break;
  case 2:
    puVar13 = (ushort *)(param_1 + (long)(int)uVar9 * 2);
    param_3[(int)uVar9] = (double)*puVar13;
    while (uVar9 = uVar9 - 1, uVar9 != 0xffffffff) {
      puVar13 = puVar13 + -1;
      param_3[(int)uVar9] = (double)*puVar13;
    }
    break;
  case 3:
    psVar14 = (short *)(param_1 + (long)(int)uVar9 * 2);
    param_3[(int)uVar9] = (double)(int)*psVar14;
    while (uVar9 = uVar9 - 1, uVar9 != 0xffffffff) {
      psVar14 = psVar14 + -1;
      param_3[(int)uVar9] = (double)(int)*psVar14;
    }
    break;
  case 4:
    piVar15 = (int *)(param_1 + (long)(int)uVar9 * 4);
    param_3[(int)uVar9] = (double)*piVar15;
    while (uVar9 = uVar9 - 1, uVar9 != 0xffffffff) {
      piVar15 = piVar15 + -1;
      param_3[(int)uVar9] = (double)*piVar15;
    }
    break;
  case 5:
    pfVar10 = (float *)(param_1 + (long)(int)uVar9 * 4);
    param_3[(int)uVar9] = (double)*pfVar10;
    while (uVar9 = uVar9 - 1, uVar9 != 0xffffffff) {
      pfVar10 = pfVar10 + -1;
      param_3[(int)uVar9] = (double)*pfVar10;
    }
    break;
  case 6:
    puVar11 = (undefined8 *)(param_1 + (long)(int)uVar9 * 8);
    param_3[(int)uVar9] = *puVar11;
    while (uVar9 = uVar9 - 1, uVar9 != 0xffffffff) {
      puVar11 = puVar11 + -1;
      param_3[(int)uVar9] = *puVar11;
    }
    break;
  default:
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x11,(String *)&local_10,"void cvRawDataToScalar(const void*, int, CvScalar*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x629);
    cv::String::deallocate((String *)&local_10);
  }
  return;
}


==================================================================

### FUNC 0025d0c8 (1292 bytes) name=cvPtr2D

long cvPtr2D(uint *param_1,uint param_2,uint param_3,uint *param_4)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  char cVar10;
  undefined4 uVar11;
  long lVar12;
  char *pcVar13;
  long lVar14;
  int *piVar15;
  int iVar16;
  uint uVar17;
  uint uVar18;
  uint local_10 [4];
  
  if (param_1 == (uint *)0x0) {
LAB_0025d188:
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar13 = (char *)cv::String::allocate((String *)local_10,0x26);
    uVar9 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
    uVar8 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
    uVar7 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
    uVar6 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
    uVar5 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
    *(undefined4 *)(pcVar13 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
    *(undefined2 *)(pcVar13 + 0x24) = uVar9;
    *(undefined8 *)pcVar13 = uVar5;
    *(undefined8 *)(pcVar13 + 8) = uVar6;
    *(undefined8 *)(pcVar13 + 0x10) = uVar7;
    *(undefined8 *)(pcVar13 + 0x18) = uVar8;
    cv::error(-5,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x730);
    cv::String::deallocate((String *)local_10);
    return 0;
  }
  uVar18 = *param_1;
  uVar17 = uVar18 & 0xffff0000;
  if (uVar17 == 0x42420000) {
    if (((0 < (int)param_1[9]) && (0 < (int)param_1[8])) && (*(long *)(param_1 + 6) != 0)) {
      if ((param_1[8] <= param_2) || (param_1[9] <= param_3)) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar13 = (char *)cv::String::allocate((String *)local_10,0x15);
        cVar10 = s_index_is_out_of_range_00461a50[0x14];
        uVar6 = s_index_is_out_of_range_00461a50._8_8_;
        uVar5 = s_index_is_out_of_range_00461a50._0_8_;
        *(undefined4 *)(pcVar13 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
        pcVar13[0x14] = cVar10;
        *(undefined8 *)pcVar13 = uVar5;
        *(undefined8 *)(pcVar13 + 8) = uVar6;
        cv::error(-0xd3,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x6e4);
        cv::String::deallocate((String *)local_10);
        uVar18 = *param_1;
      }
      if (param_4 != (uint *)0x0) {
        *param_4 = uVar18 & 0xfff;
      }
      return *(long *)(param_1 + 6) +
             (long)(int)param_2 * (long)(int)param_1[1] +
             (long)(int)(((uVar18 >> 3 & 0x1ff) + 1 <<
                         (ulong)((uint)(0xfa50L >> ((uVar18 & 7) << 1)) & 3)) * param_3);
    }
    goto LAB_0025d188;
  }
  if ((uVar18 != 0x90) || (lVar12 = *(long *)(param_1 + 0x16), lVar12 == 0)) {
    if (uVar17 == 0x42430000) {
      lVar12 = *(long *)(param_1 + 6);
      if (lVar12 != 0) {
        if (((param_1[1] != 2) || (param_1[8] <= param_2)) || (param_1[10] <= param_3)) {
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar13 = (char *)cv::String::allocate((String *)local_10,0x15);
          cVar10 = s_index_is_out_of_range_00461a50[0x14];
          uVar6 = s_index_is_out_of_range_00461a50._8_8_;
          uVar5 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar13 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar13[0x14] = cVar10;
          *(undefined8 *)pcVar13 = uVar5;
          *(undefined8 *)(pcVar13 + 8) = uVar6;
          cv::error(-0xd3,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x723);
          cv::String::deallocate((String *)local_10);
          lVar12 = *(long *)(param_1 + 6);
        }
        lVar12 = lVar12 + (long)(int)(param_3 * param_1[0xb]) +
                          (long)(int)param_2 * (long)(int)param_1[9];
        if (param_4 == (uint *)0x0) {
          return lVar12;
        }
        *param_4 = *param_1 & 0xfff;
        return lVar12;
      }
    }
    else if (uVar17 == 0x42440000) {
      local_10[1] = param_3;
      local_10[0] = param_2;
      lVar12 = FUN_0025aca4(param_1,local_10,param_4,1,0);
      return lVar12;
    }
    goto LAB_0025d188;
  }
  iVar16 = (int)(uint)(byte)param_1[4] >> 3;
  if (param_1[7] == 0) {
    lVar14 = *(long *)(param_1 + 0xc);
    iVar16 = iVar16 * param_1[2];
    if (lVar14 != 0) {
      uVar17 = *(uint *)(lVar14 + 0xc);
      uVar18 = *(uint *)(lVar14 + 0x10);
      lVar12 = lVar12 + (int)(iVar16 * *(int *)(lVar14 + 4) + *(int *)(lVar14 + 8) * param_1[0x18]);
      goto LAB_0025d248;
    }
  }
  else {
    piVar15 = *(int **)(param_1 + 0xc);
    if (piVar15 != (int *)0x0) {
      iVar1 = piVar15[1];
      iVar2 = piVar15[2];
      uVar3 = param_1[0x18];
      iVar4 = *piVar15;
      uVar17 = piVar15[3];
      uVar18 = piVar15[4];
      if (iVar4 == 0) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar13 = (char *)cv::String::allocate((String *)local_10,0x2d);
        cVar10 = s_COI_must_be_non_null_in_case_of_p_00461a68[0x2c];
        uVar11 = s_COI_must_be_non_null_in_case_of_p_00461a68._40_4_;
        uVar8 = s_COI_must_be_non_null_in_case_of_p_00461a68._24_8_;
        uVar7 = s_COI_must_be_non_null_in_case_of_p_00461a68._16_8_;
        uVar6 = s_COI_must_be_non_null_in_case_of_p_00461a68._8_8_;
        uVar5 = s_COI_must_be_non_null_in_case_of_p_00461a68._0_8_;
        *(undefined8 *)(pcVar13 + 0x20) = s_COI_must_be_non_null_in_case_of_p_00461a68._32_8_;
        *(undefined4 *)(pcVar13 + 0x28) = uVar11;
        pcVar13[0x2c] = cVar10;
        *(undefined8 *)pcVar13 = uVar5;
        *(undefined8 *)(pcVar13 + 8) = uVar6;
        *(undefined8 *)(pcVar13 + 0x10) = uVar7;
        *(undefined8 *)(pcVar13 + 0x18) = uVar8;
        cv::error(-0x18,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x703);
        cv::String::deallocate((String *)local_10);
      }
      lVar12 = lVar12 + (long)(int)(iVar16 * iVar1 + iVar2 * uVar3) +
                        (long)(int)((iVar4 + -1) * param_1[0x14]);
      goto LAB_0025d248;
    }
  }
  uVar18 = param_1[0xb];
  uVar17 = param_1[10];
LAB_0025d248:
  if ((uVar17 <= param_3) || (uVar18 <= param_2)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar13 = (char *)cv::String::allocate((String *)local_10,0x15);
    cVar10 = s_index_is_out_of_range_00461a50[0x14];
    uVar6 = s_index_is_out_of_range_00461a50._8_8_;
    uVar5 = s_index_is_out_of_range_00461a50._0_8_;
    *(undefined4 *)(pcVar13 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
    pcVar13[0x14] = cVar10;
    *(undefined8 *)pcVar13 = uVar5;
    *(undefined8 *)(pcVar13 + 8) = uVar6;
    cv::error(-0xd3,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x70f);
    cv::String::deallocate((String *)local_10);
  }
  lVar12 = lVar12 + (int)(param_3 * iVar16 + param_2 * param_1[0x18]);
  if (param_4 == (uint *)0x0) {
    return lVar12;
  }
  uVar17 = param_1[4];
  uVar18 = param_1[2] - 1;
  iVar16 = 0x14;
  if (-1 < (int)uVar17) {
    iVar16 = 0;
  }
  if (3 < uVar18) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    cv::String::allocate((String *)local_10,0);
    cv::error(-0xd2,(String *)local_10,"uchar* cvPtr2D(const CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x717);
    cv::String::deallocate((String *)local_10);
    uVar18 = param_1[2] - 1;
  }
  *param_4 = (0x43160520 >> (iVar16 + ((uVar17 & 0xf0) >> 2) & 0x1f) & 7U) + uVar18 * 8;
  return lVar12;
}


==================================================================

### FUNC 0025d64c (1024 bytes) name=cvPtr1D

long cvPtr1D(uint *param_1,uint param_2,uint *param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  long lVar8;
  uint *puVar9;
  char *pcVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint local_1004;
  undefined8 local_1000;
  undefined8 local_ff8;
  uint *puVar10;
  
  local_1004 = param_2;
  if (param_1 != (uint *)0x0) {
    uVar1 = *param_1;
    uVar12 = uVar1 & 0xffff0000;
    if (uVar12 == 0x42420000) {
      uVar12 = param_1[9];
      if (((0 < (int)uVar12) && (uVar13 = param_1[8], 0 < (int)uVar13)) &&
         (*(long *)(param_1 + 6) != 0)) {
        iVar14 = (uVar1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3);
        if (param_3 != (uint *)0x0) {
          *param_3 = uVar1 & 0xfff;
          uVar13 = param_1[8];
          uVar12 = param_1[9];
        }
        if (((uVar13 + uVar12) - 1 <= param_2) && (uVar13 * uVar12 <= param_2)) {
          local_1000 = 0;
          local_ff8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_1000,0x15);
          cVar7 = s_index_is_out_of_range_00461a50[0x14];
          uVar3 = s_index_is_out_of_range_00461a50._8_8_;
          uVar2 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar11 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar11[0x14] = cVar7;
          *(undefined8 *)pcVar11 = uVar2;
          *(undefined8 *)(pcVar11 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_1000,"uchar* cvPtr1D(const CvArr*, int, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x680);
          cv::String::deallocate((String *)&local_1000);
          param_2 = local_1004;
        }
        if ((*param_1 >> 0xe & 1) == 0) {
          uVar12 = param_1[9];
          if (uVar12 == 1) {
            lVar8 = 0;
          }
          else {
            uVar1 = 0;
            if (uVar12 != 0) {
              uVar1 = (int)param_2 / (int)uVar12;
            }
            lVar8 = (long)(int)(iVar14 * (param_2 - uVar12 * uVar1));
            param_2 = uVar1;
          }
          return *(long *)(param_1 + 6) + lVar8 + (long)(int)param_2 * (long)(int)param_1[1];
        }
        return *(long *)(param_1 + 6) + (long)(int)param_2 * (long)iVar14;
      }
    }
    else {
      if (uVar1 == 0x90) {
        if (*(long *)(param_1 + 0xc) == 0) {
          uVar12 = param_1[10];
        }
        else {
          uVar12 = *(uint *)(*(long *)(param_1 + 0xc) + 0xc);
        }
        iVar14 = 0;
        if (uVar12 != 0) {
          iVar14 = (int)param_2 / (int)uVar12;
        }
        lVar8 = cvPtr2D(param_1,iVar14,param_2 - uVar12 * iVar14);
        return lVar8;
      }
      if (uVar12 == 0x42430000) {
        if (*(long *)(param_1 + 6) != 0) {
          uVar12 = param_1[8];
          if (param_3 != (uint *)0x0) {
            *param_3 = uVar1 & 0xfff;
          }
          if (1 < (int)param_1[1]) {
            puVar9 = param_1 + 10;
            do {
              puVar10 = puVar9 + 2;
              uVar12 = uVar12 * *puVar9;
              puVar9 = puVar10;
            } while (puVar10 != param_1 + ((ulong)(param_1[1] - 2) + 6) * 2);
          }
          if (uVar12 <= param_2) {
            local_1000 = 0;
            local_ff8 = 0;
            pcVar11 = (char *)cv::String::allocate((String *)&local_1000,0x15);
            cVar7 = s_index_is_out_of_range_00461a50[0x14];
            uVar3 = s_index_is_out_of_range_00461a50._8_8_;
            uVar2 = s_index_is_out_of_range_00461a50._0_8_;
            *(undefined4 *)(pcVar11 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
            pcVar11[0x14] = cVar7;
            *(undefined8 *)pcVar11 = uVar2;
            *(undefined8 *)(pcVar11 + 8) = uVar3;
            cv::error(-0xd3,(String *)&local_1000,"uchar* cvPtr1D(const CvArr*, int, int*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x6a5);
            cv::String::deallocate((String *)&local_1000);
          }
          if ((*param_1 >> 0xe & 1) == 0) {
            lVar8 = *(long *)(param_1 + 6);
            iVar14 = param_1[1] - 1;
            if (iVar14 < 0) {
              return lVar8;
            }
            do {
              uVar12 = param_1[(long)iVar14 * 2 + 8];
              if (uVar12 != 0) {
                uVar1 = 0;
                if (uVar12 != 0) {
                  uVar1 = (int)local_1004 / (int)uVar12;
                }
                lVar8 = lVar8 + (int)((local_1004 - uVar1 * uVar12) * param_1[(long)iVar14 * 2 + 9])
                ;
                local_1004 = uVar1;
              }
              iVar14 = iVar14 + -1;
            } while (iVar14 != -1);
            return lVar8;
          }
          return *(long *)(param_1 + 6) +
                 (long)(int)((uVar1 >> 3 & 0x1ff) + 1 <<
                            (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3)) *
                 (long)(int)local_1004;
        }
      }
      else if (uVar12 == 0x42440000) {
        if (param_1[1] == 1) {
          lVar8 = FUN_0025aca4(param_1,&local_1004,param_3,1,0);
        }
        else {
          iVar14 = param_1[1] - 1;
          if (-1 < iVar14) {
            do {
              uVar12 = param_1[(long)iVar14 + 0xd];
              local_1004 = 0;
              if (uVar12 != 0) {
                local_1004 = (int)param_2 / (int)uVar12;
              }
              *(uint *)((String *)&local_1000 + (long)iVar14 * 4) = param_2 - uVar12 * local_1004;
              iVar14 = iVar14 + -1;
              param_2 = local_1004;
            } while (iVar14 != -1);
          }
          lVar8 = FUN_0025aca4(param_1,(String *)&local_1000,param_3,1,0);
        }
        return lVar8;
      }
    }
  }
  local_1000 = 0;
  local_ff8 = 0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_1000,0x26);
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar2 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar11 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar11 + 0x24) = uVar6;
  *(undefined8 *)pcVar11 = uVar2;
  *(undefined8 *)(pcVar11 + 8) = uVar3;
  *(undefined8 *)(pcVar11 + 0x10) = uVar4;
  *(undefined8 *)(pcVar11 + 0x18) = uVar5;
  cv::error(-5,(String *)&local_1000,"uchar* cvPtr1D(const CvArr*, int, int*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x6d1);
  cv::String::deallocate((String *)&local_1000);
  return 0;
}


==================================================================

### FUNC 0025da88 (904 bytes) name=cvGetRawData

void cvGetRawData(uint *param_1,undefined8 *param_2,uint *param_3,uint *param_4)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  undefined4 uVar7;
  uint *puVar8;
  uint uVar9;
  char *pcVar10;
  undefined8 uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  uint uVar21;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (uint *)0x0) {
LAB_0025dad4:
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x26);
    uVar6 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
    uVar5 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
    uVar4 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
    uVar3 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
    uVar11 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
    *(undefined2 *)(pcVar10 + 0x24) = uVar6;
    *(undefined8 *)pcVar10 = uVar11;
    *(undefined8 *)(pcVar10 + 8) = uVar3;
    *(undefined8 *)(pcVar10 + 0x10) = uVar4;
    *(undefined8 *)(pcVar10 + 0x18) = uVar5;
    cv::error(-5,(String *)&local_10,"void cvGetRawData(const CvArr*, uchar**, int*, CvSize*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x438);
    cv::String::deallocate((String *)&local_10);
    return;
  }
  uVar12 = *param_1;
  if ((uVar12 & 0xffff0000) == 0x42420000) {
    if (((0 < (int)param_1[9]) && (0 < (int)param_1[8])) && (*(long *)(param_1 + 6) != 0)) {
      if (param_3 != (uint *)0x0) {
        *param_3 = param_1[1];
      }
      if (param_2 != (undefined8 *)0x0) {
        *param_2 = *(undefined8 *)(param_1 + 6);
      }
      if (param_4 == (uint *)0x0) {
        return;
      }
      uVar12 = param_1[8];
      *param_4 = param_1[9];
      param_4[1] = uVar12;
      return;
    }
    goto LAB_0025dad4;
  }
  if ((uVar12 == 0x90) && (*(long *)(param_1 + 0x16) != 0)) {
    if (param_3 != (uint *)0x0) {
      *param_3 = param_1[0x18];
    }
    if (param_2 != (undefined8 *)0x0) {
      uVar11 = cvPtr2D(param_1,0,0,0);
      *param_2 = uVar11;
    }
    if (param_4 == (uint *)0x0) {
      return;
    }
    if (*(long *)(param_1 + 0xc) == 0) {
      *(undefined8 *)param_4 = *(undefined8 *)(param_1 + 10);
      return;
    }
    *(undefined8 *)param_4 = *(undefined8 *)(*(long *)(param_1 + 0xc) + 0xc);
    return;
  }
  if (((uVar12 & 0xffff0000) != 0x42430000) || (*(long *)(param_1 + 6) == 0)) goto LAB_0025dad4;
  if ((uVar12 >> 0xe & 1) == 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x2c);
    uVar7 = s_Only_continuous_nD_arrays_are_su_00461a98._40_4_;
    uVar5 = s_Only_continuous_nD_arrays_are_su_00461a98._24_8_;
    uVar4 = s_Only_continuous_nD_arrays_are_su_00461a98._16_8_;
    uVar3 = s_Only_continuous_nD_arrays_are_su_00461a98._8_8_;
    uVar11 = s_Only_continuous_nD_arrays_are_su_00461a98._0_8_;
    *(undefined8 *)(pcVar10 + 0x20) = s_Only_continuous_nD_arrays_are_su_00461a98._32_8_;
    *(undefined4 *)(pcVar10 + 0x28) = uVar7;
    *(undefined8 *)pcVar10 = uVar11;
    *(undefined8 *)(pcVar10 + 8) = uVar3;
    *(undefined8 *)(pcVar10 + 0x10) = uVar4;
    *(undefined8 *)(pcVar10 + 0x18) = uVar5;
    cv::error(-5,(String *)&local_10,"void cvGetRawData(const CvArr*, uchar**, int*, CvSize*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x41b);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 != (undefined8 *)0x0) {
    *param_2 = *(undefined8 *)(param_1 + 6);
  }
  if (param_3 != (uint *)0x0) {
    if (param_4 == (uint *)0x0) goto LAB_0025ddd8;
  }
  else if (param_4 == (uint *)0x0) {
    return;
  }
  uVar12 = param_1[1];
  uVar9 = param_1[8];
  if ((int)uVar12 < 3) {
    uVar12 = param_1[10];
  }
  else {
    uVar1 = (uVar12 - 6 >> 2) + 1;
    iVar2 = uVar1 * 4;
    if (uVar12 - 2 < 7) {
      iVar15 = 2;
      uVar9 = uVar9 * param_1[10];
LAB_0025dcd0:
      uVar9 = uVar9 * param_1[(long)iVar15 * 2 + 8];
      if (iVar15 + 1 < (int)uVar12) {
        uVar9 = uVar9 * param_1[(long)(iVar15 + 1) * 2 + 8];
        if (iVar15 + 2 < (int)uVar12) {
          uVar9 = uVar9 * param_1[(long)(iVar15 + 2) * 2 + 8];
          if (iVar15 + 3 < (int)uVar12) {
            uVar9 = uVar9 * param_1[(long)(iVar15 + 3) * 2 + 8];
            if (iVar15 + 4 < (int)uVar12) {
              uVar9 = uVar9 * param_1[(long)(iVar15 + 4) * 2 + 8];
              if (iVar15 + 5 < (int)uVar12) {
                uVar9 = uVar9 * param_1[(long)(iVar15 + 5) * 2 + 8];
              }
            }
          }
        }
      }
    }
    else {
      iVar15 = 1;
      iVar16 = 1;
      iVar17 = 1;
      iVar18 = 1;
      puVar14 = param_1 + 10;
      uVar13 = 0;
      do {
        uVar19 = *puVar14;
        uVar20 = puVar14[2];
        puVar8 = puVar14 + 4;
        uVar21 = puVar14[6];
        puVar14 = puVar14 + 8;
        uVar13 = uVar13 + 1;
        iVar15 = iVar15 * uVar19;
        iVar16 = iVar16 * (int)(CONCAT17((char)(uVar20 >> 0x18),
                                         CONCAT16((char)(uVar20 >> 0x10),
                                                  CONCAT15((char)(uVar20 >> 8),
                                                           CONCAT14((char)uVar20,uVar19)))) >> 0x20)
        ;
        iVar17 = iVar17 * *puVar8;
        iVar18 = iVar18 * (int)(CONCAT17((char)(uVar21 >> 0x18),
                                         CONCAT16((char)(uVar21 >> 0x10),
                                                  CONCAT15((char)(uVar21 >> 8),
                                                           CONCAT14((char)uVar21,*puVar8)))) >> 0x20
                               );
      } while (uVar13 < uVar1);
      uVar9 = uVar9 * iVar18 * iVar17 * iVar16 * iVar15;
      if (uVar12 - 1 != iVar2) {
        iVar15 = iVar2 + 2;
        uVar9 = uVar9 * param_1[(long)(iVar2 + 1) * 2 + 8];
        if (iVar15 < (int)uVar12) goto LAB_0025dcd0;
      }
    }
    uVar12 = 1;
  }
  *param_4 = uVar12;
  param_4[1] = uVar9;
LAB_0025ddd8:
  if (param_3 == (uint *)0x0) {
    return;
  }
  *param_3 = param_1[9];
  return;
}


==================================================================

### FUNC 0025de38 (504 bytes) name=cvPtr3D

long cvPtr3D(uint *param_1,uint param_2,uint param_3,uint param_4,uint *param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  char cVar6;
  long lVar7;
  char *pcVar8;
  uint local_10 [4];
  
  if (param_1 != (uint *)0x0) {
    if ((*param_1 & 0xffff0000) == 0x42430000) {
      lVar7 = *(long *)(param_1 + 6);
      if (lVar7 == 0) goto LAB_0025debc;
      if ((((param_1[1] != 3) || (param_1[8] <= param_2)) || (param_1[10] <= param_3)) ||
         (param_1[0xc] <= param_4)) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar8 = (char *)cv::String::allocate((String *)local_10,0x15);
        cVar6 = s_index_is_out_of_range_00461a50[0x14];
        uVar2 = s_index_is_out_of_range_00461a50._8_8_;
        uVar1 = s_index_is_out_of_range_00461a50._0_8_;
        *(undefined4 *)(pcVar8 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
        pcVar8[0x14] = cVar6;
        *(undefined8 *)pcVar8 = uVar1;
        *(undefined8 *)(pcVar8 + 8) = uVar2;
        cv::error(-0xd3,(String *)local_10,"uchar* cvPtr3D(const CvArr*, int, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x744);
        cv::String::deallocate((String *)local_10);
        lVar7 = *(long *)(param_1 + 6);
      }
      lVar7 = lVar7 + (long)(int)(param_4 * param_1[0xd]) +
                      (long)(int)param_3 * (long)(int)param_1[0xb] +
                      (long)(int)param_2 * (long)(int)param_1[9];
      if (param_5 != (uint *)0x0) {
        *param_5 = *param_1 & 0xfff;
        return lVar7;
      }
    }
    else {
      if ((*param_1 & 0xffff0000) != 0x42440000) goto LAB_0025debc;
      local_10[1] = param_3;
      local_10[0] = param_2;
      local_10[2] = param_4;
      lVar7 = FUN_0025aca4(param_1,local_10,param_5,1,0);
    }
    return lVar7;
  }
LAB_0025debc:
  local_10[0] = 0;
  local_10[1] = 0;
  local_10[2] = 0;
  local_10[3] = 0;
  pcVar8 = (char *)cv::String::allocate((String *)local_10,0x26);
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar3 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar2 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar1 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar8 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar8 + 0x24) = uVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  *(undefined8 *)(pcVar8 + 0x10) = uVar3;
  *(undefined8 *)(pcVar8 + 0x18) = uVar4;
  cv::error(-5,(String *)local_10,"uchar* cvPtr3D(const CvArr*, int, int, int, int*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x753);
  cv::String::deallocate((String *)local_10);
  return 0;
}


==================================================================

### FUNC 0025e058 (684 bytes) name=cvPtrND

long cvPtrND(uint *param_1,uint *param_2,uint *param_3,undefined4 param_4,undefined8 param_5)

{
  int iVar1;
  uint uVar2;
  long lVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  char cVar9;
  long lVar10;
  char *pcVar11;
  uint uVar12;
  int iVar13;
  uint *local_10;
  uint *local_8;
  
  if (param_2 == (uint *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x17);
    cVar9 = s_NULL_pointer_to_indices_00461ac8[0x16];
    uVar8 = s_NULL_pointer_to_indices_00461ac8._20_2_;
    uVar5 = s_NULL_pointer_to_indices_00461ac8._8_8_;
    uVar4 = s_NULL_pointer_to_indices_00461ac8._0_8_;
    *(undefined4 *)(pcVar11 + 0x10) = s_NULL_pointer_to_indices_00461ac8._16_4_;
    *(undefined2 *)(pcVar11 + 0x14) = uVar8;
    pcVar11[0x16] = cVar9;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    cv::error(-0x1b,(String *)&local_10,
              "uchar* cvPtrND(const CvArr*, const int*, int*, int, unsigned int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x761);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 != (uint *)0x0) {
    uVar12 = *param_1 & 0xffff0000;
    if (uVar12 == 0x42440000) {
      lVar10 = FUN_0025aca4(param_1,param_2,param_3,param_4,param_5);
      return lVar10;
    }
    if (uVar12 == 0x42430000) {
      lVar10 = *(long *)(param_1 + 6);
      if (lVar10 != 0) {
        uVar12 = param_1[1];
        if (0 < (int)uVar12) {
          iVar13 = 0;
          do {
            while( true ) {
              uVar2 = *param_2;
              if (uVar2 < param_1[(long)iVar13 * 2 + 8]) break;
              local_10 = (uint *)0x0;
              local_8 = (uint *)0x0;
              pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x15);
              cVar9 = s_index_is_out_of_range_00461a50[0x14];
              uVar5 = s_index_is_out_of_range_00461a50._8_8_;
              uVar4 = s_index_is_out_of_range_00461a50._0_8_;
              *(undefined4 *)(pcVar11 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
              pcVar11[0x14] = cVar9;
              *(undefined8 *)pcVar11 = uVar4;
              *(undefined8 *)(pcVar11 + 8) = uVar5;
              cv::error(-0xd3,(String *)&local_10,
                        "uchar* cvPtrND(const CvArr*, const int*, int*, int, unsigned int*)",
                        "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x76f);
              iVar1 = iVar13 + 1;
              cv::String::deallocate((String *)&local_10);
              uVar12 = param_1[1];
              lVar10 = lVar10 + (long)(int)*param_2 * (long)(int)param_1[(long)iVar13 * 2 + 9];
              param_2 = param_2 + 1;
              iVar13 = iVar1;
              if ((int)uVar12 <= iVar1) goto LAB_0025e1d4;
            }
            lVar3 = (long)iVar13;
            iVar13 = iVar13 + 1;
            param_2 = param_2 + 1;
            lVar10 = lVar10 + (long)(int)uVar2 * (long)(int)param_1[lVar3 * 2 + 9];
          } while (iVar13 < (int)uVar12);
        }
LAB_0025e1d4:
        if (param_3 == (uint *)0x0) {
          return lVar10;
        }
        *param_3 = *param_1 & 0xfff;
        return lVar10;
      }
    }
    else if (uVar12 == 0x42420000) {
      if ((0 < (int)param_1[9]) && (0 < (int)param_1[8])) goto LAB_0025e0c4;
    }
    else if (*param_1 == 0x90) {
LAB_0025e0c4:
      lVar10 = cvPtr2D(param_1,*param_2,param_2[1],param_3);
      return lVar10;
    }
  }
  local_10 = (uint *)0x0;
  local_8 = (uint *)0x0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x26);
  uVar8 = s_unrecognized_or_unsupported_arra_00461918._36_2_;
  uVar7 = s_unrecognized_or_unsupported_arra_00461918._24_8_;
  uVar6 = s_unrecognized_or_unsupported_arra_00461918._16_8_;
  uVar5 = s_unrecognized_or_unsupported_arra_00461918._8_8_;
  uVar4 = s_unrecognized_or_unsupported_arra_00461918._0_8_;
  *(undefined4 *)(pcVar11 + 0x20) = s_unrecognized_or_unsupported_arra_00461918._32_4_;
  *(undefined2 *)(pcVar11 + 0x24) = uVar8;
  *(undefined8 *)pcVar11 = uVar4;
  *(undefined8 *)(pcVar11 + 8) = uVar5;
  *(undefined8 *)(pcVar11 + 0x10) = uVar6;
  *(undefined8 *)(pcVar11 + 0x18) = uVar7;
  cv::error(-5,(String *)&local_10,
            "uchar* cvPtrND(const CvArr*, const int*, int*, int, unsigned int*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x779);
  cv::String::deallocate((String *)&local_10);
  return 0;
}


==================================================================

### FUNC 0025e340 (784 bytes) name=cvGet1D

undefined1  [16] cvGet1D(uint *param_1,uint param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  long lVar6;
  char *pcVar7;
  uint *puVar8;
  uint uVar9;
  uint *puVar10;
  uint *puVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  undefined1 auVar16 [16];
  uint local_54 [5];
  ulong local_40 [4];
  undefined8 local_20;
  undefined8 local_18;
  
  local_54[0] = param_2;
  local_40[1] = 0;
  local_40[0] = 0;
  local_54[4] = 0;
  local_40[3] = 0;
  local_40[2] = 0;
  if (param_1 != (uint *)0x0) {
    uVar9 = *param_1;
    if ((uVar9 & 0xffff0000) == 0x42420000) {
      uVar12 = param_1[9];
      if ((((0 < (int)uVar12) && (uVar13 = param_1[8], 0 < (int)uVar13)) &&
          (lVar6 = *(long *)(param_1 + 6), lVar6 != 0)) && ((uVar9 >> 0xe & 1) != 0)) {
        local_54[4] = uVar9 & 0xfff;
        if (((uVar12 + uVar13) - 1 <= param_2) && (uVar12 * uVar13 <= param_2)) {
          local_20 = 0;
          local_18 = 0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_20,0x15);
          cVar5 = s_index_is_out_of_range_00461a50[0x14];
          uVar2 = s_index_is_out_of_range_00461a50._8_8_;
          uVar1 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar7[0x14] = cVar5;
          *(undefined8 *)pcVar7 = uVar1;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_20,"CvScalar cvGet1D(const CvArr*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x792);
          cv::String::deallocate((String *)&local_20);
          lVar6 = *(long *)(param_1 + 6);
        }
        lVar6 = lVar6 + (long)(int)((uVar9 >> 3 & 0x1ff) + 1 <<
                                   (ulong)((uint)(0xfa50L >> ((uVar9 & 7) << 1)) & 3)) *
                        (long)(int)param_2;
        goto LAB_0025e3b0;
      }
    }
    else if ((uVar9 & 0xffff0000) == 0x42440000) {
      uVar12 = param_1[1];
      if ((int)uVar12 < 2) {
        if (uVar12 == 1) {
          lVar6 = 0;
          uVar15 = 0;
          do {
            uVar9 = local_54[lVar6];
            iVar14 = (int)lVar6;
            if (param_1[(long)iVar14 + 0xd] <= uVar9) {
              local_20 = 0;
              local_18 = 0;
              pcVar7 = (char *)cv::String::allocate((String *)&local_20,0x1e);
              uVar4 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
              uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
              uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
              uVar1 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
              *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
              *(undefined4 *)(pcVar7 + 0x18) = uVar3;
              *(undefined2 *)(pcVar7 + 0x1c) = uVar4;
              *(undefined8 *)pcVar7 = uVar1;
              *(undefined8 *)(pcVar7 + 8) = uVar2;
              cv::error(-0xd3,(String *)&local_20,
                        "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                        "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
              cv::String::deallocate((String *)&local_20);
              uVar12 = param_1[1];
            }
            lVar6 = lVar6 + 1;
            uVar15 = uVar9 + uVar15 * 0x5bd1e995;
          } while (iVar14 + 1 < (int)uVar12);
          uVar9 = *param_1;
          uVar13 = uVar15 & 0x7fffffff;
        }
        else {
          uVar13 = 0;
          uVar15 = 0;
        }
        for (puVar8 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar15 & param_1[10] - 1) * 8)
            ; lVar6 = 0, puVar8 != (uint *)0x0; puVar8 = *(uint **)(puVar8 + 2)) {
          if (*puVar8 == uVar13) {
            if ((int)uVar12 < 1) {
              if (uVar12 == 0) {
LAB_0025e628:
                lVar6 = (long)puVar8 + (long)(int)param_1[0xb];
                break;
              }
            }
            else {
              puVar10 = (uint *)((long)puVar8 + (long)(int)param_1[0xc]);
              if (local_54[0] == *(uint *)((long)puVar8 + (long)(int)param_1[0xc])) {
                puVar11 = local_54;
                uVar15 = 0;
                do {
                  puVar11 = puVar11 + 1;
                  uVar15 = uVar15 + 1;
                  if (uVar15 == uVar12) goto LAB_0025e628;
                  puVar10 = puVar10 + 1;
                } while (*puVar11 == *puVar10);
              }
            }
          }
        }
        local_54[4] = uVar9 & 0xfff;
        goto LAB_0025e3b0;
      }
    }
  }
  lVar6 = cvPtr1D(param_1,param_2,local_54 + 4);
LAB_0025e3b0:
  if (lVar6 != 0) {
    cvRawDataToScalar(lVar6,local_54[4],local_40);
  }
  auVar16._8_8_ = 0;
  auVar16._0_8_ = local_40[0];
  return auVar16;
}


==================================================================

### FUNC 0025e678 (840 bytes) name=cvGet2D

undefined1  [16] cvGet2D(uint *param_1,uint param_2,uint param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  long lVar7;
  char *pcVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint *puVar12;
  uint *puVar13;
  uint *puVar14;
  uint uVar15;
  int iVar16;
  undefined1 auVar17 [16];
  uint local_4c;
  uint local_48 [2];
  ulong local_40 [4];
  undefined8 local_20;
  undefined8 local_18;
  
  local_4c = 0;
  local_40[1] = 0;
  local_40[0] = 0;
  local_40[3] = 0;
  local_40[2] = 0;
  if (param_1 != (uint *)0x0) {
    uVar9 = *param_1;
    if ((uVar9 & 0xffff0000) == 0x42420000) {
      if (((0 < (int)param_1[9]) && (0 < (int)param_1[8])) &&
         (lVar7 = *(long *)(param_1 + 6), lVar7 != 0)) {
        if ((param_1[8] <= param_2) || (param_1[9] <= param_3)) {
          local_20 = 0;
          local_18 = 0;
          pcVar8 = (char *)cv::String::allocate((String *)&local_20,0x15);
          cVar6 = s_index_is_out_of_range_00461a50[0x14];
          uVar3 = s_index_is_out_of_range_00461a50._8_8_;
          uVar2 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar8 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar8[0x14] = cVar6;
          *(undefined8 *)pcVar8 = uVar2;
          *(undefined8 *)(pcVar8 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_20,"CvScalar cvGet2D(const CvArr*, int, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x7b0);
          cv::String::deallocate((String *)&local_20);
          uVar9 = *param_1;
          lVar7 = *(long *)(param_1 + 6);
        }
        local_4c = uVar9 & 0xfff;
        lVar7 = lVar7 + (long)(int)param_2 * (long)(int)param_1[1] +
                        (long)(int)(((uVar9 >> 3 & 0x1ff) + 1 <<
                                    (ulong)((uint)(0xfa50L >> ((uVar9 & 7) << 1)) & 3)) * param_3);
        goto LAB_0025e6f4;
      }
    }
    else if ((uVar9 & 0xffff0000) == 0x42440000) {
      uVar15 = param_1[1];
      local_48[0] = param_2;
      local_48[1] = param_3;
      if ((int)uVar15 < 1) {
        uVar10 = 0;
        uVar11 = 0;
      }
      else {
        lVar7 = 0;
        uVar11 = 0;
        do {
          while( true ) {
            uVar9 = local_48[lVar7];
            iVar16 = (int)lVar7;
            if (uVar9 < param_1[(long)iVar16 + 0xd]) break;
            local_20 = 0;
            local_18 = 0;
            pcVar8 = (char *)cv::String::allocate((String *)&local_20,0x1e);
            uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
            *(undefined8 *)(pcVar8 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
            uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
            uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
            uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
            *(undefined4 *)(pcVar8 + 0x18) = uVar4;
            *(undefined2 *)(pcVar8 + 0x1c) = uVar5;
            *(undefined8 *)pcVar8 = uVar2;
            *(undefined8 *)(pcVar8 + 8) = uVar3;
            cv::error(-0xd3,(String *)&local_20,
                      "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
            cv::String::deallocate((String *)&local_20);
            uVar15 = param_1[1];
            lVar7 = lVar7 + 1;
            uVar11 = uVar9 + uVar11 * 0x5bd1e995;
            if ((int)uVar15 <= iVar16 + 1) goto LAB_0025e90c;
          }
          lVar7 = lVar7 + 1;
          uVar11 = uVar9 + uVar11 * 0x5bd1e995;
        } while (iVar16 + 1 < (int)uVar15);
LAB_0025e90c:
        uVar9 = *param_1;
        uVar10 = uVar11 & 0x7fffffff;
      }
      puVar13 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar11 & param_1[10] - 1) * 8);
      if (puVar13 != (uint *)0x0) {
        do {
          if (*puVar13 == uVar10) {
            if ((int)uVar15 < 1) {
              if (uVar15 == 0) {
LAB_0025e990:
                lVar7 = (long)puVar13 + (long)(int)param_1[0xb];
                goto LAB_0025e9a0;
              }
            }
            else if (param_2 == *(uint *)((long)puVar13 + (long)(int)param_1[0xc])) {
              uVar11 = 0;
              puVar12 = (uint *)((long)puVar13 + (long)(int)param_1[0xc] + 4);
              puVar14 = local_48;
              do {
                puVar14 = puVar14 + 1;
                uVar11 = uVar11 + 1;
                if (uVar11 == uVar15) goto LAB_0025e990;
                uVar1 = *puVar12;
                puVar12 = puVar12 + 1;
              } while (*puVar14 == uVar1);
            }
          }
          puVar13 = *(uint **)(puVar13 + 2);
        } while (puVar13 != (uint *)0x0);
      }
      lVar7 = 0;
LAB_0025e9a0:
      local_4c = uVar9 & 0xfff;
      goto LAB_0025e6f4;
    }
  }
  lVar7 = cvPtr2D(param_1,param_2,param_3,&local_4c);
LAB_0025e6f4:
  if (lVar7 != 0) {
    cvRawDataToScalar(lVar7,local_4c,local_40);
  }
  auVar17._8_8_ = 0;
  auVar17._0_8_ = local_40[0];
  return auVar17;
}


==================================================================

### FUNC 0025e9e8 (608 bytes) name=cvGet3D

undefined1  [16] cvGet3D(uint *param_1,uint param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  long lVar6;
  char *pcVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint *puVar11;
  uint *puVar12;
  uint *puVar13;
  uint uVar14;
  int iVar15;
  undefined1 auVar16 [16];
  uint local_54;
  uint local_50 [4];
  ulong local_40 [4];
  undefined8 local_20;
  undefined8 local_18;
  
  local_54 = 0;
  local_40[1] = 0;
  local_40[0] = 0;
  local_40[3] = 0;
  local_40[2] = 0;
  if ((param_1 == (uint *)0x0) || (uVar8 = *param_1, (uVar8 & 0xffff0000) != 0x42440000)) {
    lVar6 = cvPtr3D(param_1,param_2,param_3,param_4,&local_54);
  }
  else {
    uVar14 = param_1[1];
    local_50[0] = param_2;
    local_50[1] = (int)param_3;
    local_50[2] = (int)param_4;
    if ((int)uVar14 < 1) {
      uVar9 = 0;
      uVar10 = 0;
    }
    else {
      lVar6 = 0;
      uVar10 = 0;
      do {
        while( true ) {
          uVar8 = local_50[lVar6];
          iVar15 = (int)lVar6;
          if (uVar8 < param_1[(long)iVar15 + 0xd]) break;
          local_20 = 0;
          local_18 = 0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_20,0x1e);
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined4 *)(pcVar7 + 0x18) = uVar4;
          *(undefined2 *)(pcVar7 + 0x1c) = uVar5;
          *(undefined8 *)pcVar7 = uVar2;
          *(undefined8 *)(pcVar7 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_20,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          cv::String::deallocate((String *)&local_20);
          uVar14 = param_1[1];
          lVar6 = lVar6 + 1;
          uVar10 = uVar8 + uVar10 * 0x5bd1e995;
          if ((int)uVar14 <= iVar15 + 1) goto LAB_0025eb94;
        }
        lVar6 = lVar6 + 1;
        uVar10 = uVar8 + uVar10 * 0x5bd1e995;
      } while (iVar15 + 1 < (int)uVar14);
LAB_0025eb94:
      uVar8 = *param_1;
      uVar9 = uVar10 & 0x7fffffff;
    }
    puVar12 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar10 & param_1[10] - 1) * 8);
    if (puVar12 != (uint *)0x0) {
      do {
        if (*puVar12 == uVar9) {
          if ((int)uVar14 < 1) {
            if (uVar14 == 0) {
LAB_0025ec18:
              lVar6 = (long)puVar12 + (long)(int)param_1[0xb];
              goto LAB_0025ec28;
            }
          }
          else if (param_2 == *(uint *)((long)puVar12 + (long)(int)param_1[0xc])) {
            uVar10 = 0;
            puVar11 = (uint *)((long)puVar12 + (long)(int)param_1[0xc] + 4);
            puVar13 = local_50;
            do {
              puVar13 = puVar13 + 1;
              uVar10 = uVar10 + 1;
              if (uVar10 == uVar14) goto LAB_0025ec18;
              uVar1 = *puVar11;
              puVar11 = puVar11 + 1;
            } while (*puVar13 == uVar1);
          }
        }
        puVar12 = *(uint **)(puVar12 + 2);
      } while (puVar12 != (uint *)0x0);
    }
    lVar6 = 0;
LAB_0025ec28:
    local_54 = uVar8 & 0xfff;
  }
  if (lVar6 != 0) {
    cvRawDataToScalar(lVar6,local_54,local_40);
  }
  auVar16._8_8_ = 0;
  auVar16._0_8_ = local_40[0];
  return auVar16;
}


==================================================================

### FUNC 0025ec5c (600 bytes) name=cvGetND

undefined1  [16] cvGetND(uint *param_1,uint *param_2)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  long lVar6;
  char *pcVar7;
  uint uVar8;
  uint uVar9;
  uint *puVar10;
  uint *puVar11;
  uint *puVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  undefined1 auVar16 [16];
  uint local_44;
  ulong local_40 [4];
  undefined8 local_20;
  undefined8 local_18;
  
  local_44 = 0;
  local_40[1] = 0;
  local_40[0] = 0;
  local_40[3] = 0;
  local_40[2] = 0;
  if ((param_1 == (uint *)0x0) || (uVar8 = *param_1, (uVar8 & 0xffff0000) != 0x42440000)) {
    lVar6 = cvPtrND(param_1,param_2,&local_44,1,0);
  }
  else {
    uVar13 = param_1[1];
    uVar9 = 0;
    uVar15 = 0;
    if (0 < (int)uVar13) {
      uVar15 = 0;
      iVar14 = 0;
      puVar11 = param_2;
      do {
        while (uVar8 = *puVar11, param_1[(long)iVar14 + 0xd] <= uVar8) {
          local_20 = 0;
          local_18 = 0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_20,0x1e);
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined4 *)(pcVar7 + 0x18) = uVar4;
          *(undefined2 *)(pcVar7 + 0x1c) = uVar5;
          *(undefined8 *)pcVar7 = uVar2;
          *(undefined8 *)(pcVar7 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_20,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          iVar14 = iVar14 + 1;
          puVar11 = puVar11 + 1;
          cv::String::deallocate((String *)&local_20);
          uVar13 = param_1[1];
          uVar15 = uVar8 + uVar15 * 0x5bd1e995;
          if ((int)uVar13 <= iVar14) goto LAB_0025ee0c;
        }
        iVar14 = iVar14 + 1;
        puVar11 = puVar11 + 1;
        uVar15 = uVar8 + uVar15 * 0x5bd1e995;
      } while (iVar14 < (int)uVar13);
LAB_0025ee0c:
      uVar8 = *param_1;
      uVar9 = uVar15 & 0x7fffffff;
    }
    for (puVar11 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar15 & param_1[10] - 1) * 8);
        puVar11 != (uint *)0x0; puVar11 = *(uint **)(puVar11 + 2)) {
      if (*puVar11 == uVar9) {
        if ((int)uVar13 < 1) {
          if (uVar13 == 0) {
LAB_0025ee90:
            lVar6 = (long)puVar11 + (long)(int)param_1[0xb];
            goto LAB_0025eea0;
          }
        }
        else if (*param_2 == *(uint *)((long)puVar11 + (long)(int)param_1[0xc])) {
          uVar15 = 0;
          puVar10 = (uint *)((long)puVar11 + (long)(int)param_1[0xc] + 4);
          puVar12 = param_2;
          do {
            puVar12 = puVar12 + 1;
            uVar15 = uVar15 + 1;
            if (uVar15 == uVar13) goto LAB_0025ee90;
            uVar1 = *puVar10;
            puVar10 = puVar10 + 1;
          } while (*puVar12 == uVar1);
        }
      }
    }
    lVar6 = 0;
LAB_0025eea0:
    local_44 = uVar8 & 0xfff;
  }
  if (lVar6 != 0) {
    cvRawDataToScalar(lVar6,local_44,local_40);
  }
  auVar16._8_8_ = 0;
  auVar16._0_8_ = local_40[0];
  return auVar16;
}


==================================================================

### FUNC 0025eec8 (1172 bytes) name=cvGetReal1D

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvGetReal1D(uint *param_1,uint param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 uVar8;
  float *pfVar9;
  undefined8 *puVar10;
  char *pcVar11;
  uint *puVar12;
  uint *puVar13;
  uint uVar14;
  uint *puVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  long lVar19;
  uint uVar20;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  uint local_24 [5];
  undefined8 local_10;
  undefined8 local_8;
  
  local_24[0] = param_2;
  local_24[4] = 0;
  if (param_1 != (uint *)0x0) {
    uVar16 = *param_1;
    if ((uVar16 & 0xffff0000) == 0x42420000) {
      uVar14 = param_1[9];
      if ((((0 < (int)uVar14) && (uVar17 = param_1[8], 0 < (int)uVar17)) &&
          (lVar19 = *(long *)(param_1 + 6), lVar19 != 0)) && ((uVar16 >> 0xe & 1) != 0)) {
        local_24[4] = uVar16 & 0xfff;
        if (((uVar14 + uVar17) - 1 <= param_2) && (uVar14 * uVar17 <= param_2)) {
          local_10 = 0;
          local_8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x15);
          cVar5 = s_index_is_out_of_range_00461a50[0x14];
          uVar2 = s_index_is_out_of_range_00461a50._8_8_;
          uVar1 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar11 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar11[0x14] = cVar5;
          *(undefined8 *)pcVar11 = uVar1;
          *(undefined8 *)(pcVar11 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_10,"double cvGetReal1D(const CvArr*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x801);
          cv::String::deallocate((String *)&local_10);
          lVar19 = *(long *)(param_1 + 6);
        }
        pfVar9 = (float *)(lVar19 + (long)(int)((uVar16 >> 3 & 0x1ff) + 1 <<
                                               (ulong)((uint)(0xfa50L >> ((uVar16 & 7) << 1)) & 3))
                                    * (long)(int)param_2);
        goto joined_r0x0025f18c;
      }
    }
    else if ((uVar16 & 0xffff0000) == 0x42440000) {
      uVar14 = param_1[1];
      if ((int)uVar14 < 2) {
        if (uVar14 == 1) {
          lVar19 = 0;
          uVar20 = 0;
          do {
            uVar16 = local_24[lVar19];
            iVar18 = (int)lVar19;
            if (param_1[(long)iVar18 + 0xd] <= uVar16) {
              local_10 = 0;
              local_8 = 0;
              pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x1e);
              uVar4 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
              uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
              uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
              uVar1 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
              *(undefined8 *)(pcVar11 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
              *(undefined4 *)(pcVar11 + 0x18) = uVar3;
              *(undefined2 *)(pcVar11 + 0x1c) = uVar4;
              *(undefined8 *)pcVar11 = uVar1;
              *(undefined8 *)(pcVar11 + 8) = uVar2;
              cv::error(-0xd3,(String *)&local_10,
                        "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                        "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
              cv::String::deallocate((String *)&local_10);
              uVar14 = param_1[1];
            }
            lVar19 = lVar19 + 1;
            uVar20 = uVar16 + uVar20 * 0x5bd1e995;
          } while (iVar18 + 1 < (int)uVar14);
          uVar16 = *param_1;
          uVar17 = uVar20 & 0x7fffffff;
        }
        else {
          uVar17 = 0;
          uVar20 = 0;
        }
        for (puVar15 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar20 & param_1[10] - 1) * 8
                                 ); puVar15 != (uint *)0x0; puVar15 = *(uint **)(puVar15 + 2)) {
          if (*puVar15 == uVar17) {
            if ((int)uVar14 < 1) {
              if (uVar14 == 0) {
LAB_0025f32c:
                pfVar9 = (float *)((long)puVar15 + (long)(int)param_1[0xb]);
                goto LAB_0025f334;
              }
            }
            else {
              puVar12 = (uint *)((long)puVar15 + (long)(int)param_1[0xc]);
              if (local_24[0] == *(uint *)((long)puVar15 + (long)(int)param_1[0xc])) {
                puVar13 = local_24;
                uVar20 = 0;
                do {
                  puVar13 = puVar13 + 1;
                  uVar20 = uVar20 + 1;
                  if (uVar20 == uVar14) goto LAB_0025f32c;
                  puVar12 = puVar12 + 1;
                } while (*puVar13 == *puVar12);
              }
            }
          }
        }
        pfVar9 = (float *)0x0;
LAB_0025f334:
        local_24[4] = uVar16 & 0xfff;
        goto joined_r0x0025f18c;
      }
    }
  }
  pfVar9 = (float *)cvPtr1D(param_1,param_2,local_24 + 4);
joined_r0x0025f18c:
  if (pfVar9 == (float *)0x0) {
    s_One_of_indices_is_out_of_range_004618d8[0] =
         (char)s_One_of_indices_is_out_of_range_004618d8._0_8_;
    s_One_of_indices_is_out_of_range_004618d8[1] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,1);
    s_One_of_indices_is_out_of_range_004618d8[2] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,2);
    s_One_of_indices_is_out_of_range_004618d8[3] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,3);
    s_One_of_indices_is_out_of_range_004618d8[4] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,4);
    s_One_of_indices_is_out_of_range_004618d8[5] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,5);
    s_One_of_indices_is_out_of_range_004618d8[6] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,6);
    s_One_of_indices_is_out_of_range_004618d8[7] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,7);
    s_One_of_indices_is_out_of_range_004618d8[8] =
         (char)s_One_of_indices_is_out_of_range_004618d8._8_8_;
    s_One_of_indices_is_out_of_range_004618d8[9] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,1);
    s_One_of_indices_is_out_of_range_004618d8[10] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,2);
    s_One_of_indices_is_out_of_range_004618d8[0xb] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,3);
    s_One_of_indices_is_out_of_range_004618d8[0xc] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,4);
    s_One_of_indices_is_out_of_range_004618d8[0xd] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,5);
    s_One_of_indices_is_out_of_range_004618d8[0xe] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,6);
    s_One_of_indices_is_out_of_range_004618d8[0xf] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,7);
    s_One_of_indices_is_out_of_range_004618d8[0x10] =
         (char)s_One_of_indices_is_out_of_range_004618d8._16_8_;
    s_One_of_indices_is_out_of_range_004618d8[0x11] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,1);
    s_One_of_indices_is_out_of_range_004618d8[0x12] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,2);
    s_One_of_indices_is_out_of_range_004618d8[0x13] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,3);
    s_One_of_indices_is_out_of_range_004618d8[0x14] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,4);
    s_One_of_indices_is_out_of_range_004618d8[0x15] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,5);
    s_One_of_indices_is_out_of_range_004618d8[0x16] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,6);
    s_One_of_indices_is_out_of_range_004618d8[0x17] =
         SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,7);
    s_One_of_indices_is_out_of_range_004618d8[0x18] =
         (char)s_One_of_indices_is_out_of_range_004618d8._24_4_;
    s_One_of_indices_is_out_of_range_004618d8[0x19] =
         SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,1);
    s_One_of_indices_is_out_of_range_004618d8[0x1a] =
         SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,2);
    s_One_of_indices_is_out_of_range_004618d8[0x1b] =
         SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,3);
    s_One_of_indices_is_out_of_range_004618d8[0x1c] =
         (char)s_One_of_indices_is_out_of_range_004618d8._28_2_;
    s_One_of_indices_is_out_of_range_004618d8[0x1d] =
         SUB21(s_One_of_indices_is_out_of_range_004618d8._28_2_,1);
    s_index_is_out_of_range_00461a50[0] = (char)s_index_is_out_of_range_00461a50._0_8_;
    s_index_is_out_of_range_00461a50[1] = SUB81(s_index_is_out_of_range_00461a50._0_8_,1);
    s_index_is_out_of_range_00461a50[2] = SUB81(s_index_is_out_of_range_00461a50._0_8_,2);
    s_index_is_out_of_range_00461a50[3] = SUB81(s_index_is_out_of_range_00461a50._0_8_,3);
    s_index_is_out_of_range_00461a50[4] = SUB81(s_index_is_out_of_range_00461a50._0_8_,4);
    s_index_is_out_of_range_00461a50[5] = SUB81(s_index_is_out_of_range_00461a50._0_8_,5);
    s_index_is_out_of_range_00461a50[6] = SUB81(s_index_is_out_of_range_00461a50._0_8_,6);
    s_index_is_out_of_range_00461a50[7] = SUB81(s_index_is_out_of_range_00461a50._0_8_,7);
    s_index_is_out_of_range_00461a50[8] = (char)s_index_is_out_of_range_00461a50._8_8_;
    s_index_is_out_of_range_00461a50[9] = SUB81(s_index_is_out_of_range_00461a50._8_8_,1);
    s_index_is_out_of_range_00461a50[10] = SUB81(s_index_is_out_of_range_00461a50._8_8_,2);
    s_index_is_out_of_range_00461a50[0xb] = SUB81(s_index_is_out_of_range_00461a50._8_8_,3);
    s_index_is_out_of_range_00461a50[0xc] = SUB81(s_index_is_out_of_range_00461a50._8_8_,4);
    s_index_is_out_of_range_00461a50[0xd] = SUB81(s_index_is_out_of_range_00461a50._8_8_,5);
    s_index_is_out_of_range_00461a50[0xe] = SUB81(s_index_is_out_of_range_00461a50._8_8_,6);
    s_index_is_out_of_range_00461a50[0xf] = SUB81(s_index_is_out_of_range_00461a50._8_8_,7);
    s_index_is_out_of_range_00461a50[0x10] = (char)s_index_is_out_of_range_00461a50._16_4_;
    s_index_is_out_of_range_00461a50[0x11] = SUB41(s_index_is_out_of_range_00461a50._16_4_,1);
    s_index_is_out_of_range_00461a50[0x12] = SUB41(s_index_is_out_of_range_00461a50._16_4_,2);
    s_index_is_out_of_range_00461a50[0x13] = SUB41(s_index_is_out_of_range_00461a50._16_4_,3);
    return ZEXT816(0);
  }
  if ((local_24[4] >> 3 & 0x1ff) != 0) {
    local_10 = 0;
    local_8 = 0;
    puVar10 = (undefined8 *)cv::String::allocate((String *)&local_10,0x2d);
    uVar8 = DAT_00461b0c;
    uVar3 = DAT_00461b08;
    uVar7 = DAT_00461af8;
    uVar6 = _LAB_00461af0;
    uVar2 = DAT_00461ae8;
    uVar1 = DAT_00461ae0;
    puVar10[4] = DAT_00461b00;
    *(undefined4 *)(puVar10 + 5) = uVar3;
    *(undefined1 *)((long)puVar10 + 0x2c) = uVar8;
    *puVar10 = uVar1;
    puVar10[1] = uVar2;
    puVar10[2] = uVar6;
    puVar10[3] = uVar7;
    cv::error(-0xf,(String *)&local_10,"double cvGetReal1D(const CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x80d);
    cv::String::deallocate((String *)&local_10);
  }
  switch(local_24[4]) {
  case 0:
    auVar26._0_8_ = (double)*(byte *)pfVar9;
    auVar26._8_8_ = 0;
    return auVar26;
  case 1:
    auVar25._0_8_ = (double)(int)(char)*(byte *)pfVar9;
    auVar25._8_8_ = 0;
    return auVar25;
  case 2:
    auVar24._0_8_ = (double)*(ushort *)pfVar9;
    auVar24._8_8_ = 0;
    return auVar24;
  case 3:
    auVar23._0_8_ = (double)(int)(short)*(ushort *)pfVar9;
    auVar23._8_8_ = 0;
    return auVar23;
  case 4:
    auVar22._0_8_ = (double)(int)*pfVar9;
    auVar22._8_8_ = 0;
    return auVar22;
  case 5:
    auVar21._0_8_ = (double)*pfVar9;
    auVar21._8_8_ = 0;
    return auVar21;
  case 6:
    auVar27._0_8_ = *(ulong *)pfVar9;
    auVar27._8_8_ = 0;
    return auVar27;
  default:
    return ZEXT816(0);
  }
}


==================================================================

### FUNC 0025f398 (1248 bytes) name=cvGetReal2D

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvGetReal2D(uint *param_1,uint param_2,uint param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined1 uVar9;
  float *pfVar10;
  undefined8 *puVar11;
  char *pcVar12;
  uint uVar13;
  uint *puVar14;
  uint *puVar15;
  uint uVar16;
  uint *puVar17;
  uint uVar18;
  uint uVar19;
  int iVar20;
  long lVar21;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  uint local_1c;
  uint local_18 [2];
  undefined8 local_10;
  undefined8 local_8;
  
  local_1c = 0;
  if (param_1 != (uint *)0x0) {
    uVar13 = *param_1;
    if ((uVar13 & 0xffff0000) == 0x42420000) {
      if (((0 < (int)param_1[9]) && (0 < (int)param_1[8])) &&
         (lVar21 = *(long *)(param_1 + 6), lVar21 != 0)) {
        if ((param_1[8] <= param_2) || (param_1[9] <= param_3)) {
          local_10 = 0;
          local_8 = 0;
          pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x15);
          cVar6 = s_index_is_out_of_range_00461a50[0x14];
          uVar3 = s_index_is_out_of_range_00461a50._8_8_;
          uVar2 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar12 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar12[0x14] = cVar6;
          *(undefined8 *)pcVar12 = uVar2;
          *(undefined8 *)(pcVar12 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_10,"double cvGetReal2D(const CvArr*, int, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x823);
          cv::String::deallocate((String *)&local_10);
          uVar13 = *param_1;
          lVar21 = *(long *)(param_1 + 6);
        }
        local_1c = uVar13 & 0xfff;
        pfVar10 = (float *)(lVar21 + (long)(int)param_2 * (long)(int)param_1[1] +
                                     (long)(int)(((uVar13 >> 3 & 0x1ff) + 1 <<
                                                 (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3)
                                                 ) * param_3));
        goto joined_r0x0025f5a0;
      }
    }
    else if ((uVar13 & 0xffff0000) == 0x42440000) {
      uVar16 = param_1[1];
      local_18[0] = param_2;
      local_18[1] = param_3;
      if ((int)uVar16 < 1) {
        uVar18 = 0;
        uVar19 = 0;
      }
      else {
        lVar21 = 0;
        uVar19 = 0;
        do {
          while( true ) {
            uVar13 = local_18[lVar21];
            iVar20 = (int)lVar21;
            if (uVar13 < param_1[(long)iVar20 + 0xd]) break;
            local_10 = 0;
            local_8 = 0;
            pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x1e);
            uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
            uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
            uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
            uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
            *(undefined8 *)(pcVar12 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
            *(undefined4 *)(pcVar12 + 0x18) = uVar4;
            *(undefined2 *)(pcVar12 + 0x1c) = uVar5;
            *(undefined8 *)pcVar12 = uVar2;
            *(undefined8 *)(pcVar12 + 8) = uVar3;
            cv::error(-0xd3,(String *)&local_10,
                      "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
            cv::String::deallocate((String *)&local_10);
            uVar16 = param_1[1];
            lVar21 = lVar21 + 1;
            uVar19 = uVar13 + uVar19 * 0x5bd1e995;
            if ((int)uVar16 <= iVar20 + 1) goto LAB_0025f7c4;
          }
          lVar21 = lVar21 + 1;
          uVar19 = uVar13 + uVar19 * 0x5bd1e995;
        } while (iVar20 + 1 < (int)uVar16);
LAB_0025f7c4:
        uVar13 = *param_1;
        uVar18 = uVar19 & 0x7fffffff;
      }
      puVar17 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar19 & param_1[10] - 1) * 8);
      if (puVar17 != (uint *)0x0) {
        do {
          if (*puVar17 == uVar18) {
            if ((int)uVar16 < 1) {
              if (uVar16 == 0) {
LAB_0025f848:
                pfVar10 = (float *)((long)puVar17 + (long)(int)param_1[0xb]);
                goto LAB_0025f858;
              }
            }
            else if (param_2 == *(uint *)((long)puVar17 + (long)(int)param_1[0xc])) {
              uVar19 = 0;
              puVar14 = (uint *)((long)puVar17 + (long)(int)param_1[0xc] + 4);
              puVar15 = local_18;
              do {
                puVar15 = puVar15 + 1;
                uVar19 = uVar19 + 1;
                if (uVar19 == uVar16) goto LAB_0025f848;
                uVar1 = *puVar14;
                puVar14 = puVar14 + 1;
              } while (*puVar15 == uVar1);
            }
          }
          puVar17 = *(uint **)(puVar17 + 2);
        } while (puVar17 != (uint *)0x0);
      }
      pfVar10 = (float *)0x0;
LAB_0025f858:
      local_1c = uVar13 & 0xfff;
      goto joined_r0x0025f5a0;
    }
  }
  pfVar10 = (float *)cvPtr2D(param_1,param_2,param_3,&local_1c);
joined_r0x0025f5a0:
  if (pfVar10 != (float *)0x0) {
    if ((local_1c >> 3 & 0x1ff) != 0) {
      local_10 = 0;
      local_8 = 0;
      puVar11 = (undefined8 *)cv::String::allocate((String *)&local_10,0x2d);
      uVar9 = DAT_00461b0c;
      uVar4 = DAT_00461b08;
      uVar8 = DAT_00461af8;
      uVar7 = _LAB_00461af0;
      uVar3 = DAT_00461ae8;
      uVar2 = DAT_00461ae0;
      puVar11[4] = DAT_00461b00;
      *(undefined4 *)(puVar11 + 5) = uVar4;
      *(undefined1 *)((long)puVar11 + 0x2c) = uVar9;
      *puVar11 = uVar2;
      puVar11[1] = uVar3;
      puVar11[2] = uVar7;
      puVar11[3] = uVar8;
      cv::error(-0xf,(String *)&local_10,"double cvGetReal2D(const CvArr*, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x833);
      cv::String::deallocate((String *)&local_10);
    }
    switch(local_1c) {
    case 0:
      auVar27._0_8_ = (double)*(byte *)pfVar10;
      auVar27._8_8_ = 0;
      return auVar27;
    case 1:
      auVar26._0_8_ = (double)(int)(char)*(byte *)pfVar10;
      auVar26._8_8_ = 0;
      return auVar26;
    case 2:
      auVar25._0_8_ = (double)*(ushort *)pfVar10;
      auVar25._8_8_ = 0;
      return auVar25;
    case 3:
      auVar24._0_8_ = (double)(int)(short)*(ushort *)pfVar10;
      auVar24._8_8_ = 0;
      return auVar24;
    case 4:
      auVar23._0_8_ = (double)(int)*pfVar10;
      auVar23._8_8_ = 0;
      return auVar23;
    case 5:
      auVar22._0_8_ = (double)*pfVar10;
      auVar22._8_8_ = 0;
      return auVar22;
    case 6:
      auVar28._0_8_ = *(ulong *)pfVar10;
      auVar28._8_8_ = 0;
      return auVar28;
    default:
      return ZEXT816(0);
    }
  }
  s_One_of_indices_is_out_of_range_004618d8[0] =
       (char)s_One_of_indices_is_out_of_range_004618d8._0_8_;
  s_One_of_indices_is_out_of_range_004618d8[1] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,1);
  s_One_of_indices_is_out_of_range_004618d8[2] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,2);
  s_One_of_indices_is_out_of_range_004618d8[3] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,3);
  s_One_of_indices_is_out_of_range_004618d8[4] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,4);
  s_One_of_indices_is_out_of_range_004618d8[5] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,5);
  s_One_of_indices_is_out_of_range_004618d8[6] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,6);
  s_One_of_indices_is_out_of_range_004618d8[7] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._0_8_,7);
  s_One_of_indices_is_out_of_range_004618d8[8] =
       (char)s_One_of_indices_is_out_of_range_004618d8._8_8_;
  s_One_of_indices_is_out_of_range_004618d8[9] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,1);
  s_One_of_indices_is_out_of_range_004618d8[10] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,2);
  s_One_of_indices_is_out_of_range_004618d8[0xb] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,3);
  s_One_of_indices_is_out_of_range_004618d8[0xc] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,4);
  s_One_of_indices_is_out_of_range_004618d8[0xd] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,5);
  s_One_of_indices_is_out_of_range_004618d8[0xe] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,6);
  s_One_of_indices_is_out_of_range_004618d8[0xf] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._8_8_,7);
  s_One_of_indices_is_out_of_range_004618d8[0x10] =
       (char)s_One_of_indices_is_out_of_range_004618d8._16_8_;
  s_One_of_indices_is_out_of_range_004618d8[0x11] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,1);
  s_One_of_indices_is_out_of_range_004618d8[0x12] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,2);
  s_One_of_indices_is_out_of_range_004618d8[0x13] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,3);
  s_One_of_indices_is_out_of_range_004618d8[0x14] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,4);
  s_One_of_indices_is_out_of_range_004618d8[0x15] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,5);
  s_One_of_indices_is_out_of_range_004618d8[0x16] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,6);
  s_One_of_indices_is_out_of_range_004618d8[0x17] =
       SUB81(s_One_of_indices_is_out_of_range_004618d8._16_8_,7);
  s_One_of_indices_is_out_of_range_004618d8[0x18] =
       (char)s_One_of_indices_is_out_of_range_004618d8._24_4_;
  s_One_of_indices_is_out_of_range_004618d8[0x19] =
       SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,1);
  s_One_of_indices_is_out_of_range_004618d8[0x1a] =
       SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,2);
  s_One_of_indices_is_out_of_range_004618d8[0x1b] =
       SUB41(s_One_of_indices_is_out_of_range_004618d8._24_4_,3);
  s_One_of_indices_is_out_of_range_004618d8[0x1c] =
       (char)s_One_of_indices_is_out_of_range_004618d8._28_2_;
  s_One_of_indices_is_out_of_range_004618d8[0x1d] =
       SUB21(s_One_of_indices_is_out_of_range_004618d8._28_2_,1);
  s_index_is_out_of_range_00461a50[0] = (char)s_index_is_out_of_range_00461a50._0_8_;
  s_index_is_out_of_range_00461a50[1] = SUB81(s_index_is_out_of_range_00461a50._0_8_,1);
  s_index_is_out_of_range_00461a50[2] = SUB81(s_index_is_out_of_range_00461a50._0_8_,2);
  s_index_is_out_of_range_00461a50[3] = SUB81(s_index_is_out_of_range_00461a50._0_8_,3);
  s_index_is_out_of_range_00461a50[4] = SUB81(s_index_is_out_of_range_00461a50._0_8_,4);
  s_index_is_out_of_range_00461a50[5] = SUB81(s_index_is_out_of_range_00461a50._0_8_,5);
  s_index_is_out_of_range_00461a50[6] = SUB81(s_index_is_out_of_range_00461a50._0_8_,6);
  s_index_is_out_of_range_00461a50[7] = SUB81(s_index_is_out_of_range_00461a50._0_8_,7);
  s_index_is_out_of_range_00461a50[8] = (char)s_index_is_out_of_range_00461a50._8_8_;
  s_index_is_out_of_range_00461a50[9] = SUB81(s_index_is_out_of_range_00461a50._8_8_,1);
  s_index_is_out_of_range_00461a50[10] = SUB81(s_index_is_out_of_range_00461a50._8_8_,2);
  s_index_is_out_of_range_00461a50[0xb] = SUB81(s_index_is_out_of_range_00461a50._8_8_,3);
  s_index_is_out_of_range_00461a50[0xc] = SUB81(s_index_is_out_of_range_00461a50._8_8_,4);
  s_index_is_out_of_range_00461a50[0xd] = SUB81(s_index_is_out_of_range_00461a50._8_8_,5);
  s_index_is_out_of_range_00461a50[0xe] = SUB81(s_index_is_out_of_range_00461a50._8_8_,6);
  s_index_is_out_of_range_00461a50[0xf] = SUB81(s_index_is_out_of_range_00461a50._8_8_,7);
  s_index_is_out_of_range_00461a50[0x10] = (char)s_index_is_out_of_range_00461a50._16_4_;
  s_index_is_out_of_range_00461a50[0x11] = SUB41(s_index_is_out_of_range_00461a50._16_4_,1);
  s_index_is_out_of_range_00461a50[0x12] = SUB41(s_index_is_out_of_range_00461a50._16_4_,2);
  s_index_is_out_of_range_00461a50[0x13] = SUB41(s_index_is_out_of_range_00461a50._16_4_,3);
  return ZEXT816(0);
}


==================================================================

### FUNC 0025f8b4 (1016 bytes) name=cvGetReal3D

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvGetReal3D(uint *param_1,uint param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 uVar8;
  float *pfVar9;
  undefined8 *puVar10;
  char *pcVar11;
  uint uVar12;
  uint *puVar13;
  uint *puVar14;
  uint uVar15;
  uint *puVar16;
  uint uVar17;
  uint uVar18;
  int iVar19;
  long lVar20;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  uint local_24;
  uint local_20 [4];
  undefined8 local_10;
  undefined8 local_8;
  
  local_24 = 0;
  if ((param_1 == (uint *)0x0) || (uVar12 = *param_1, (uVar12 & 0xffff0000) != 0x42440000)) {
    pfVar9 = (float *)cvPtr3D(param_1,param_2,param_3,param_4,&local_24);
  }
  else {
    uVar15 = param_1[1];
    local_20[0] = param_2;
    local_20[1] = (int)param_3;
    local_20[2] = (int)param_4;
    if ((int)uVar15 < 1) {
      uVar17 = 0;
      uVar18 = 0;
    }
    else {
      lVar20 = 0;
      uVar18 = 0;
      do {
        while( true ) {
          uVar12 = local_20[lVar20];
          iVar19 = (int)lVar20;
          if (uVar12 < param_1[(long)iVar19 + 0xd]) break;
          local_10 = 0;
          local_8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x1e);
          uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined8 *)(pcVar11 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          *(undefined4 *)(pcVar11 + 0x18) = uVar4;
          *(undefined2 *)(pcVar11 + 0x1c) = uVar5;
          *(undefined8 *)pcVar11 = uVar2;
          *(undefined8 *)(pcVar11 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_10,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          cv::String::deallocate((String *)&local_10);
          uVar15 = param_1[1];
          lVar20 = lVar20 + 1;
          uVar18 = uVar12 + uVar18 * 0x5bd1e995;
          if ((int)uVar15 <= iVar19 + 1) goto LAB_0025fbd4;
        }
        lVar20 = lVar20 + 1;
        uVar18 = uVar12 + uVar18 * 0x5bd1e995;
      } while (iVar19 + 1 < (int)uVar15);
LAB_0025fbd4:
      uVar12 = *param_1;
      uVar17 = uVar18 & 0x7fffffff;
    }
    puVar16 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar18 & param_1[10] - 1) * 8);
    if (puVar16 != (uint *)0x0) {
      do {
        if (*puVar16 == uVar17) {
          if ((int)uVar15 < 1) {
            if (uVar15 == 0) {
LAB_0025fc58:
              pfVar9 = (float *)((long)puVar16 + (long)(int)param_1[0xb]);
              goto LAB_0025fc8c;
            }
          }
          else if (param_2 == *(uint *)((long)puVar16 + (long)(int)param_1[0xc])) {
            uVar18 = 0;
            puVar13 = (uint *)((long)puVar16 + (long)(int)param_1[0xc] + 4);
            puVar14 = local_20;
            do {
              puVar14 = puVar14 + 1;
              uVar18 = uVar18 + 1;
              if (uVar18 == uVar15) goto LAB_0025fc58;
              uVar1 = *puVar13;
              puVar13 = puVar13 + 1;
            } while (*puVar14 == uVar1);
          }
        }
        puVar16 = *(uint **)(puVar16 + 2);
      } while (puVar16 != (uint *)0x0);
    }
    pfVar9 = (float *)0x0;
LAB_0025fc8c:
    local_24 = uVar12 & 0xfff;
  }
  if (pfVar9 != (float *)0x0) {
    if ((local_24 >> 3 & 0x1ff) != 0) {
      local_10 = 0;
      local_8 = 0;
      puVar10 = (undefined8 *)cv::String::allocate((String *)&local_10,0x2d);
      uVar8 = DAT_00461b0c;
      uVar4 = DAT_00461b08;
      uVar7 = DAT_00461af8;
      uVar6 = _LAB_00461af0;
      uVar3 = DAT_00461ae8;
      uVar2 = DAT_00461ae0;
      puVar10[4] = DAT_00461b00;
      *(undefined4 *)(puVar10 + 5) = uVar4;
      *(undefined1 *)((long)puVar10 + 0x2c) = uVar8;
      *puVar10 = uVar2;
      puVar10[1] = uVar3;
      puVar10[2] = uVar6;
      puVar10[3] = uVar7;
      cv::error(-0xf,(String *)&local_10,"double cvGetReal3D(const CvArr*, int, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x84f);
      cv::String::deallocate((String *)&local_10);
    }
    switch(local_24) {
    case 0:
      auVar26._0_8_ = (double)*(byte *)pfVar9;
      auVar26._8_8_ = 0;
      return auVar26;
    case 1:
      auVar25._0_8_ = (double)(int)(char)*(byte *)pfVar9;
      auVar25._8_8_ = 0;
      return auVar25;
    case 2:
      auVar24._0_8_ = (double)*(ushort *)pfVar9;
      auVar24._8_8_ = 0;
      return auVar24;
    case 3:
      auVar23._0_8_ = (double)(int)(short)*(ushort *)pfVar9;
      auVar23._8_8_ = 0;
      return auVar23;
    case 4:
      auVar22._0_8_ = (double)(int)*pfVar9;
      auVar22._8_8_ = 0;
      return auVar22;
    case 5:
      auVar21._0_8_ = (double)*pfVar9;
      auVar21._8_8_ = 0;
      return auVar21;
    case 6:
      auVar27._0_8_ = *(ulong *)pfVar9;
      auVar27._8_8_ = 0;
      return auVar27;
    default:
      return ZEXT816(0);
    }
  }
  return ZEXT816(0);
}


==================================================================

### FUNC 0025fcd4 (1008 bytes) name=cvGetRealND

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvGetRealND(uint *param_1,uint *param_2)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 uVar8;
  float *pfVar9;
  undefined8 *puVar10;
  char *pcVar11;
  uint uVar12;
  uint *puVar13;
  uint *puVar14;
  uint uVar15;
  uint *puVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  uint local_14;
  undefined8 local_10;
  undefined8 local_8;
  
  local_14 = 0;
  if ((param_1 == (uint *)0x0) || (uVar12 = *param_1, (uVar12 & 0xffff0000) != 0x42440000)) {
    pfVar9 = (float *)cvPtrND(param_1,param_2,&local_14,1,0);
  }
  else {
    uVar15 = param_1[1];
    uVar17 = 0;
    uVar19 = 0;
    if (0 < (int)uVar15) {
      uVar19 = 0;
      iVar18 = 0;
      puVar16 = param_2;
      do {
        while (uVar12 = *puVar16, param_1[(long)iVar18 + 0xd] <= uVar12) {
          local_10 = 0;
          local_8 = 0;
          pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x1e);
          uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar2 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined8 *)(pcVar11 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          *(undefined4 *)(pcVar11 + 0x18) = uVar4;
          *(undefined2 *)(pcVar11 + 0x1c) = uVar5;
          *(undefined8 *)pcVar11 = uVar2;
          *(undefined8 *)(pcVar11 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_10,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          iVar18 = iVar18 + 1;
          puVar16 = puVar16 + 1;
          cv::String::deallocate((String *)&local_10);
          uVar15 = param_1[1];
          uVar19 = uVar12 + uVar19 * 0x5bd1e995;
          if ((int)uVar15 <= iVar18) goto LAB_0025fff8;
        }
        iVar18 = iVar18 + 1;
        puVar16 = puVar16 + 1;
        uVar19 = uVar12 + uVar19 * 0x5bd1e995;
      } while (iVar18 < (int)uVar15);
LAB_0025fff8:
      uVar12 = *param_1;
      uVar17 = uVar19 & 0x7fffffff;
    }
    for (puVar16 = *(uint **)(*(long *)(param_1 + 8) + (long)(int)(uVar19 & param_1[10] - 1) * 8);
        puVar16 != (uint *)0x0; puVar16 = *(uint **)(puVar16 + 2)) {
      if (*puVar16 == uVar17) {
        if ((int)uVar15 < 1) {
          if (uVar15 == 0) {
LAB_0026007c:
            pfVar9 = (float *)((long)puVar16 + (long)(int)param_1[0xb]);
            goto LAB_002600b0;
          }
        }
        else if (*param_2 == *(uint *)((long)puVar16 + (long)(int)param_1[0xc])) {
          uVar19 = 0;
          puVar13 = (uint *)((long)puVar16 + (long)(int)param_1[0xc] + 4);
          puVar14 = param_2;
          do {
            puVar14 = puVar14 + 1;
            uVar19 = uVar19 + 1;
            if (uVar19 == uVar15) goto LAB_0026007c;
            uVar1 = *puVar13;
            puVar13 = puVar13 + 1;
          } while (*puVar14 == uVar1);
        }
      }
    }
    pfVar9 = (float *)0x0;
LAB_002600b0:
    local_14 = uVar12 & 0xfff;
  }
  if (pfVar9 == (float *)0x0) {
    return ZEXT816(0);
  }
  if ((local_14 >> 3 & 0x1ff) != 0) {
    local_10 = 0;
    local_8 = 0;
    puVar10 = (undefined8 *)cv::String::allocate((String *)&local_10,0x2d);
    uVar8 = DAT_00461b0c;
    uVar4 = DAT_00461b08;
    uVar7 = DAT_00461af8;
    uVar6 = _LAB_00461af0;
    uVar3 = DAT_00461ae8;
    uVar2 = DAT_00461ae0;
    puVar10[4] = DAT_00461b00;
    *(undefined4 *)(puVar10 + 5) = uVar4;
    *(undefined1 *)((long)puVar10 + 0x2c) = uVar8;
    *puVar10 = uVar2;
    puVar10[1] = uVar3;
    puVar10[2] = uVar6;
    puVar10[3] = uVar7;
    cv::error(-0xf,(String *)&local_10,"double cvGetRealND(const CvArr*, const int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x868);
    cv::String::deallocate((String *)&local_10);
  }
  switch(local_14) {
  case 0:
    auVar25._0_8_ = (double)*(byte *)pfVar9;
    auVar25._8_8_ = 0;
    return auVar25;
  case 1:
    auVar24._0_8_ = (double)(int)(char)*(byte *)pfVar9;
    auVar24._8_8_ = 0;
    return auVar24;
  case 2:
    auVar23._0_8_ = (double)*(ushort *)pfVar9;
    auVar23._8_8_ = 0;
    return auVar23;
  case 3:
    auVar22._0_8_ = (double)(int)(short)*(ushort *)pfVar9;
    auVar22._8_8_ = 0;
    return auVar22;
  case 4:
    auVar21._0_8_ = (double)(int)*pfVar9;
    auVar21._8_8_ = 0;
    return auVar21;
  case 5:
    auVar20._0_8_ = (double)*pfVar9;
    auVar20._8_8_ = 0;
    return auVar20;
  case 6:
    auVar26._0_8_ = *(ulong *)pfVar9;
    auVar26._8_8_ = 0;
    return auVar26;
  default:
    return ZEXT816(0);
  }
}


==================================================================

### FUNC 002600ec (1208 bytes) name=cvSet1D

void cvSet1D(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            uint *param_5,uint param_6)

{
  uint uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  long lVar6;
  char *pcVar7;
  uint *puVar8;
  void *__s;
  uint *puVar9;
  uint *puVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  ulong uVar17;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  uint local_24 [3];
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_24[0] = param_6;
  local_24[2] = 0;
  local_48 = param_1;
  local_40 = param_2;
  local_38 = param_3;
  local_30 = param_4;
  if (param_5 != (uint *)0x0) {
    uVar13 = *param_5;
    if ((uVar13 & 0xffff0000) == 0x42420000) {
      uVar15 = param_5[9];
      if ((((0 < (int)uVar15) && (uVar16 = param_5[8], 0 < (int)uVar16)) &&
          (lVar6 = *(long *)(param_5 + 6), lVar6 != 0)) && ((uVar13 >> 0xe & 1) != 0)) {
        local_24[2] = uVar13 & 0xfff;
        if (((uVar15 + uVar16) - 1 <= param_6) && (uVar15 * uVar16 <= param_6)) {
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_18,0x15);
          cVar5 = s_index_is_out_of_range_00461a50[0x14];
          uVar2 = s_index_is_out_of_range_00461a50._8_8_;
          uVar12 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar7[0x14] = cVar5;
          *(undefined8 *)pcVar7 = uVar12;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_18,"void cvSet1D(CvArr*, int, CvScalar)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x883);
          cv::String::deallocate((String *)&local_18);
          lVar6 = *(long *)(param_5 + 6);
        }
        lVar6 = lVar6 + (long)(int)((uVar13 >> 3 & 0x1ff) + 1 <<
                                   (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3)) *
                        (long)(int)param_6;
        goto LAB_0026015c;
      }
    }
    else if ((uVar13 & 0xffff0000) == 0x42440000) {
      uVar13 = param_5[1];
      if ((int)uVar13 < 2) {
        if (uVar13 == 1) {
          lVar6 = 0;
          uVar16 = 0;
          do {
            uVar15 = local_24[lVar6];
            iVar14 = (int)lVar6;
            if (param_5[(long)iVar14 + 0xd] <= uVar15) {
              local_18 = (uint *)0x0;
              local_10 = (uint *)0x0;
              pcVar7 = (char *)cv::String::allocate((String *)&local_18,0x1e);
              uVar4 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
              uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
              uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
              uVar12 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
              *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
              *(undefined4 *)(pcVar7 + 0x18) = uVar3;
              *(undefined2 *)(pcVar7 + 0x1c) = uVar4;
              *(undefined8 *)pcVar7 = uVar12;
              *(undefined8 *)(pcVar7 + 8) = uVar2;
              cv::error(-0xd3,(String *)&local_18,
                        "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                        "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
              cv::String::deallocate((String *)&local_18);
              uVar13 = param_5[1];
            }
            lVar6 = lVar6 + 1;
            uVar16 = uVar15 + uVar16 * 0x5bd1e995;
          } while (iVar14 + 1 < (int)uVar13);
          uVar15 = uVar16 & 0x7fffffff;
        }
        else {
          uVar15 = 0;
          uVar16 = 0;
        }
        uVar1 = param_5[10];
        uVar16 = uVar16 & uVar1 - 1;
        uVar17 = -(ulong)(uVar16 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar16 << 3;
        for (puVar9 = *(uint **)(*(long *)(param_5 + 8) + uVar17); puVar9 != (uint *)0x0;
            puVar9 = *(uint **)(puVar9 + 2)) {
          if (*puVar9 == uVar15) {
            if ((int)uVar13 < 1) {
              if (uVar13 == 0) {
LAB_002603b4:
                lVar6 = (long)puVar9 + (long)(int)param_5[0xb];
                if (lVar6 != 0) goto LAB_002603c0;
                break;
              }
            }
            else {
              puVar10 = (uint *)((long)puVar9 + (long)(int)param_5[0xc]);
              if (local_24[0] == *(uint *)((long)puVar9 + (long)(int)param_5[0xc])) {
                puVar8 = local_24;
                uVar16 = 0;
                do {
                  puVar8 = puVar8 + 1;
                  uVar16 = uVar16 + 1;
                  if (uVar16 == uVar13) goto LAB_002603b4;
                  puVar10 = puVar10 + 1;
                } while (*puVar8 == *puVar10);
              }
            }
          }
        }
        lVar6 = *(long *)(param_5 + 6);
        uVar13 = uVar1 * 2;
        if ((int)(uVar1 * 3) <= *(int *)(lVar6 + 0x68)) {
          if ((int)uVar13 < 0x400) {
            uVar13 = 0x400;
          }
          __s = (void *)cv::cvAlloc((long)(int)(uVar13 << 3));
          memset(__s,0,(long)(int)(uVar13 << 3));
          puVar9 = (uint *)cvInitSparseMatIterator(param_5,&local_18);
          if (puVar9 != (uint *)0x0) {
            uVar16 = uVar13 - 1;
            while( true ) {
              puVar8 = *(uint **)(local_10 + 2);
              puVar10 = puVar9;
              while (puVar9 = puVar8, puVar9 != (uint *)0x0) {
                lVar6 = (ulong)(uVar16 & *puVar10) * 8;
                *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
                *(uint **)((long)__s + lVar6) = puVar10;
                puVar10 = puVar9;
                local_10 = puVar9;
                puVar8 = *(uint **)(puVar9 + 2);
              }
              uVar1 = local_8 + 1;
              if ((int)local_18[10] <= (int)uVar1) break;
              uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
              puVar11 = (undefined8 *)(*(long *)(local_18 + 8) + uVar17);
              puVar9 = *(uint **)(*(long *)(local_18 + 8) + uVar17);
              local_8 = uVar1;
              while (puVar9 == (uint *)0x0) {
                local_8 = local_8 + 1;
                if (local_8 == local_18[10]) goto LAB_00260520;
                puVar11 = puVar11 + 1;
                puVar9 = (uint *)*puVar11;
              }
              lVar6 = (ulong)(uVar16 & *puVar10) * 8;
              *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
              *(uint **)((long)__s + lVar6) = puVar10;
              local_10 = puVar9;
            }
LAB_00260520:
            lVar6 = (ulong)(uVar16 & *puVar10) * 8;
            *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
            *(uint **)((long)__s + lVar6) = puVar10;
            local_8 = uVar1;
          }
          uVar17 = (ulong)(uVar13 - 1 & uVar15) << 3;
          cv::cvFree_(*(void **)(param_5 + 8));
          *(void **)(param_5 + 8) = __s;
          lVar6 = *(long *)(param_5 + 6);
          param_5[10] = uVar13;
        }
        local_18 = *(uint **)(lVar6 + 0x60);
        if (local_18 == (uint *)0x0) {
          cvSetAdd(lVar6,0,&local_18);
        }
        else {
          uVar13 = *local_18;
          iVar14 = *(int *)(lVar6 + 0x68);
          *(undefined8 *)(lVar6 + 0x60) = *(undefined8 *)(local_18 + 2);
          *local_18 = uVar13 & 0x3ffffff;
          *(int *)(lVar6 + 0x68) = iVar14 + 1;
        }
        puVar9 = local_18;
        lVar6 = *(long *)(param_5 + 8);
        uVar13 = param_5[0xc];
        uVar16 = param_5[1];
        uVar12 = *(undefined8 *)(lVar6 + uVar17);
        *local_18 = uVar15;
        *(undefined8 *)(local_18 + 2) = uVar12;
        *(uint **)(lVar6 + uVar17) = local_18;
        memcpy((void *)((long)local_18 + (long)(int)uVar13),local_24,(long)(int)uVar16 << 2);
        lVar6 = (long)puVar9 + (long)(int)param_5[0xb];
LAB_002603c0:
        local_24[2] = *param_5 & 0xfff;
        goto LAB_0026015c;
      }
    }
  }
  lVar6 = cvPtr1D(param_5,param_6,local_24 + 2);
LAB_0026015c:
  cvScalarToRawData(&local_48,lVar6,local_24[2],0);
  return;
}


==================================================================

### FUNC 002605cc (1240 bytes) name=cvSet2D

void cvSet2D(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            uint *param_5,uint param_6,uint param_7)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  long lVar7;
  char *pcVar8;
  void *__s;
  uint *puVar9;
  undefined8 *puVar10;
  uint *puVar11;
  undefined8 uVar12;
  uint uVar13;
  uint *puVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  ulong uVar18;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  uint local_24;
  uint local_20 [2];
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_24 = 0;
  local_50 = param_1;
  local_48 = param_2;
  local_40 = param_3;
  local_38 = param_4;
  if (param_5 != (uint *)0x0) {
    uVar13 = *param_5;
    if ((uVar13 & 0xffff0000) == 0x42420000) {
      if (((0 < (int)param_5[9]) && (0 < (int)param_5[8])) &&
         (lVar7 = *(long *)(param_5 + 6), lVar7 != 0)) {
        if ((param_5[8] <= param_6) || (param_5[9] <= param_7)) {
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar8 = (char *)cv::String::allocate((String *)&local_18,0x15);
          cVar6 = s_index_is_out_of_range_00461a50[0x14];
          uVar3 = s_index_is_out_of_range_00461a50._8_8_;
          uVar12 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar8 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar8[0x14] = cVar6;
          *(undefined8 *)pcVar8 = uVar12;
          *(undefined8 *)(pcVar8 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_18,"void cvSet2D(CvArr*, int, int, CvScalar)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x89d);
          cv::String::deallocate((String *)&local_18);
          uVar13 = *param_5;
          lVar7 = *(long *)(param_5 + 6);
        }
        local_24 = uVar13 & 0xfff;
        lVar7 = lVar7 + (long)(int)param_6 * (long)(int)param_5[1] +
                        (long)(int)(((uVar13 >> 3 & 0x1ff) + 1 <<
                                    (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3)) * param_7);
        goto LAB_00260648;
      }
    }
    else if ((uVar13 & 0xffff0000) == 0x42440000) {
      uVar13 = param_5[1];
      local_20[0] = param_6;
      local_20[1] = param_7;
      if ((int)uVar13 < 1) {
        uVar16 = 0;
        uVar17 = 0;
      }
      else {
        lVar7 = 0;
        uVar17 = 0;
        do {
          while( true ) {
            uVar16 = local_20[lVar7];
            iVar15 = (int)lVar7;
            if (uVar16 < param_5[(long)iVar15 + 0xd]) break;
            local_18 = (uint *)0x0;
            local_10 = (uint *)0x0;
            pcVar8 = (char *)cv::String::allocate((String *)&local_18,0x1e);
            uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
            uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
            uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
            uVar12 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
            *(undefined8 *)(pcVar8 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
            *(undefined4 *)(pcVar8 + 0x18) = uVar4;
            *(undefined2 *)(pcVar8 + 0x1c) = uVar5;
            *(undefined8 *)pcVar8 = uVar12;
            *(undefined8 *)(pcVar8 + 8) = uVar3;
            cv::error(-0xd3,(String *)&local_18,
                      "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
            cv::String::deallocate((String *)&local_18);
            uVar13 = param_5[1];
            lVar7 = lVar7 + 1;
            uVar17 = uVar16 + uVar17 * 0x5bd1e995;
            if ((int)uVar13 <= iVar15 + 1) goto LAB_00260834;
          }
          lVar7 = lVar7 + 1;
          uVar17 = uVar16 + uVar17 * 0x5bd1e995;
        } while (iVar15 + 1 < (int)uVar13);
LAB_00260834:
        uVar16 = uVar17 & 0x7fffffff;
      }
      uVar1 = param_5[10];
      uVar17 = uVar17 & uVar1 - 1;
      uVar18 = -(ulong)(uVar17 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar17 << 3;
      puVar14 = *(uint **)(*(long *)(param_5 + 8) + uVar18);
      if (puVar14 != (uint *)0x0) {
        do {
          if (*puVar14 == uVar16) {
            if ((int)uVar13 < 1) {
              if (uVar13 == 0) {
LAB_002608b8:
                lVar7 = (long)puVar14 + (long)(int)param_5[0xb];
                if (lVar7 != 0) goto LAB_0026093c;
                break;
              }
            }
            else if (param_6 == *(uint *)((long)puVar14 + (long)(int)param_5[0xc])) {
              uVar17 = 0;
              puVar9 = (uint *)((long)puVar14 + (long)(int)param_5[0xc] + 4);
              puVar11 = local_20;
              do {
                puVar11 = puVar11 + 1;
                uVar17 = uVar17 + 1;
                if (uVar17 == uVar13) goto LAB_002608b8;
                uVar2 = *puVar9;
                puVar9 = puVar9 + 1;
              } while (*puVar11 == uVar2);
            }
          }
          puVar14 = *(uint **)(puVar14 + 2);
        } while (puVar14 != (uint *)0x0);
      }
      lVar7 = *(long *)(param_5 + 6);
      uVar13 = uVar1 * 2;
      if ((int)(uVar1 * 3) <= *(int *)(lVar7 + 0x68)) {
        if ((int)uVar13 < 0x400) {
          uVar13 = 0x400;
        }
        __s = (void *)cv::cvAlloc((long)(int)(uVar13 << 3));
        memset(__s,0,(long)(int)(uVar13 << 3));
        puVar14 = (uint *)cvInitSparseMatIterator(param_5,&local_18);
        if (puVar14 != (uint *)0x0) {
          uVar17 = uVar13 - 1;
          while( true ) {
            puVar9 = *(uint **)(local_10 + 2);
            puVar11 = puVar14;
            while (puVar14 = puVar9, puVar14 != (uint *)0x0) {
              lVar7 = (ulong)(uVar17 & *puVar11) * 8;
              *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)__s + lVar7);
              *(uint **)((long)__s + lVar7) = puVar11;
              puVar11 = puVar14;
              local_10 = puVar14;
              puVar9 = *(uint **)(puVar14 + 2);
            }
            uVar1 = local_8 + 1;
            if ((int)local_18[10] <= (int)uVar1) break;
            uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
            puVar10 = (undefined8 *)(*(long *)(local_18 + 8) + uVar18);
            puVar14 = *(uint **)(*(long *)(local_18 + 8) + uVar18);
            local_8 = uVar1;
            while (puVar14 == (uint *)0x0) {
              local_8 = local_8 + 1;
              if (local_8 == local_18[10]) goto LAB_00260a20;
              puVar10 = puVar10 + 1;
              puVar14 = (uint *)*puVar10;
            }
            lVar7 = (ulong)(uVar17 & *puVar11) * 8;
            *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)__s + lVar7);
            *(uint **)((long)__s + lVar7) = puVar11;
            local_10 = puVar14;
          }
LAB_00260a20:
          lVar7 = (ulong)(uVar17 & *puVar11) * 8;
          *(undefined8 *)(puVar11 + 2) = *(undefined8 *)((long)__s + lVar7);
          *(uint **)((long)__s + lVar7) = puVar11;
          local_8 = uVar1;
        }
        uVar18 = (ulong)(uVar13 - 1 & uVar16) << 3;
        cv::cvFree_(*(void **)(param_5 + 8));
        *(void **)(param_5 + 8) = __s;
        lVar7 = *(long *)(param_5 + 6);
        param_5[10] = uVar13;
      }
      local_18 = *(uint **)(lVar7 + 0x60);
      if (local_18 == (uint *)0x0) {
        cvSetAdd(lVar7,0,&local_18);
      }
      else {
        uVar13 = *local_18;
        iVar15 = *(int *)(lVar7 + 0x68);
        *(undefined8 *)(lVar7 + 0x60) = *(undefined8 *)(local_18 + 2);
        *local_18 = uVar13 & 0x3ffffff;
        *(int *)(lVar7 + 0x68) = iVar15 + 1;
      }
      puVar14 = local_18;
      lVar7 = *(long *)(param_5 + 8);
      uVar13 = param_5[0xc];
      uVar17 = param_5[1];
      uVar12 = *(undefined8 *)(lVar7 + uVar18);
      *local_18 = uVar16;
      *(undefined8 *)(local_18 + 2) = uVar12;
      *(uint **)(lVar7 + uVar18) = local_18;
      memcpy((void *)((long)local_18 + (long)(int)uVar13),local_20,(long)(int)uVar17 << 2);
      lVar7 = (long)puVar14 + (long)(int)param_5[0xb];
LAB_0026093c:
      local_24 = *param_5 & 0xfff;
      goto LAB_00260648;
    }
  }
  lVar7 = cvPtr2D(param_5,param_6,param_7,&local_24);
LAB_00260648:
  cvScalarToRawData(&local_50,lVar7,local_24,0);
  return;
}


==================================================================

### FUNC 00260acc (1008 bytes) name=cvSet3D

void cvSet3D(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            uint *param_5,uint param_6,undefined8 param_7,undefined8 param_8)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  long lVar6;
  char *pcVar7;
  void *__s;
  uint *puVar8;
  undefined8 *puVar9;
  uint *puVar10;
  undefined8 uVar11;
  uint uVar12;
  uint *puVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  ulong uVar17;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  uint local_2c;
  uint local_28 [4];
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_2c = 0;
  local_50 = param_1;
  local_48 = param_2;
  local_40 = param_3;
  local_38 = param_4;
  if ((param_5 == (uint *)0x0) || ((*param_5 & 0xffff0000) != 0x42440000)) {
    lVar6 = cvPtr3D(param_5,param_6,param_7,param_8,&local_2c);
  }
  else {
    uVar12 = param_5[1];
    local_28[0] = param_6;
    local_28[1] = (int)param_7;
    local_28[2] = (int)param_8;
    if ((int)uVar12 < 1) {
      uVar15 = 0;
      uVar16 = 0;
    }
    else {
      lVar6 = 0;
      uVar16 = 0;
      do {
        while( true ) {
          uVar15 = local_28[lVar6];
          iVar14 = (int)lVar6;
          if (uVar15 < param_5[(long)iVar14 + 0xd]) break;
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_18,0x1e);
          uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar11 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          *(undefined4 *)(pcVar7 + 0x18) = uVar4;
          *(undefined2 *)(pcVar7 + 0x1c) = uVar5;
          *(undefined8 *)pcVar7 = uVar11;
          *(undefined8 *)(pcVar7 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_18,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          cv::String::deallocate((String *)&local_18);
          uVar12 = param_5[1];
          lVar6 = lVar6 + 1;
          uVar16 = uVar15 + uVar16 * 0x5bd1e995;
          if ((int)uVar12 <= iVar14 + 1) goto LAB_00260c4c;
        }
        lVar6 = lVar6 + 1;
        uVar16 = uVar15 + uVar16 * 0x5bd1e995;
      } while (iVar14 + 1 < (int)uVar12);
LAB_00260c4c:
      uVar15 = uVar16 & 0x7fffffff;
    }
    uVar1 = param_5[10];
    uVar16 = uVar16 & uVar1 - 1;
    uVar17 = -(ulong)(uVar16 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar16 << 3;
    puVar13 = *(uint **)(*(long *)(param_5 + 8) + uVar17);
    if (puVar13 != (uint *)0x0) {
      do {
        if (*puVar13 == uVar15) {
          if ((int)uVar12 < 1) {
            if (uVar12 == 0) {
LAB_00260cd0:
              lVar6 = (long)puVar13 + (long)(int)param_5[0xb];
              if (lVar6 != 0) goto LAB_00260d54;
              break;
            }
          }
          else if (param_6 == *(uint *)((long)puVar13 + (long)(int)param_5[0xc])) {
            uVar16 = 0;
            puVar8 = (uint *)((long)puVar13 + (long)(int)param_5[0xc] + 4);
            puVar10 = local_28;
            do {
              puVar10 = puVar10 + 1;
              uVar16 = uVar16 + 1;
              if (uVar16 == uVar12) goto LAB_00260cd0;
              uVar2 = *puVar8;
              puVar8 = puVar8 + 1;
            } while (*puVar10 == uVar2);
          }
        }
        puVar13 = *(uint **)(puVar13 + 2);
      } while (puVar13 != (uint *)0x0);
    }
    lVar6 = *(long *)(param_5 + 6);
    uVar12 = uVar1 * 2;
    if ((int)(uVar1 * 3) <= *(int *)(lVar6 + 0x68)) {
      if ((int)uVar12 < 0x400) {
        uVar12 = 0x400;
      }
      __s = (void *)cv::cvAlloc((long)(int)(uVar12 << 3));
      memset(__s,0,(long)(int)(uVar12 << 3));
      puVar13 = (uint *)cvInitSparseMatIterator(param_5,&local_18);
      if (puVar13 != (uint *)0x0) {
        uVar16 = uVar12 - 1;
        while( true ) {
          puVar8 = *(uint **)(local_10 + 2);
          puVar10 = puVar13;
          while (puVar13 = puVar8, puVar13 != (uint *)0x0) {
            lVar6 = (ulong)(uVar16 & *puVar10) * 8;
            *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
            *(uint **)((long)__s + lVar6) = puVar10;
            puVar10 = puVar13;
            local_10 = puVar13;
            puVar8 = *(uint **)(puVar13 + 2);
          }
          uVar1 = local_8 + 1;
          if ((int)local_18[10] <= (int)uVar1) break;
          uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
          puVar9 = (undefined8 *)(*(long *)(local_18 + 8) + uVar17);
          puVar13 = *(uint **)(*(long *)(local_18 + 8) + uVar17);
          local_8 = uVar1;
          while (puVar13 == (uint *)0x0) {
            local_8 = local_8 + 1;
            if (local_8 == local_18[10]) goto LAB_00260e38;
            puVar9 = puVar9 + 1;
            puVar13 = (uint *)*puVar9;
          }
          lVar6 = (ulong)(uVar16 & *puVar10) * 8;
          *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
          *(uint **)((long)__s + lVar6) = puVar10;
          local_10 = puVar13;
        }
LAB_00260e38:
        lVar6 = (ulong)(uVar16 & *puVar10) * 8;
        *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
        *(uint **)((long)__s + lVar6) = puVar10;
        local_8 = uVar1;
      }
      uVar17 = (ulong)(uVar12 - 1 & uVar15) << 3;
      cv::cvFree_(*(void **)(param_5 + 8));
      *(void **)(param_5 + 8) = __s;
      lVar6 = *(long *)(param_5 + 6);
      param_5[10] = uVar12;
    }
    local_18 = *(uint **)(lVar6 + 0x60);
    if (local_18 == (uint *)0x0) {
      cvSetAdd(lVar6,0,&local_18);
    }
    else {
      uVar12 = *local_18;
      iVar14 = *(int *)(lVar6 + 0x68);
      *(undefined8 *)(lVar6 + 0x60) = *(undefined8 *)(local_18 + 2);
      *local_18 = uVar12 & 0x3ffffff;
      *(int *)(lVar6 + 0x68) = iVar14 + 1;
    }
    puVar13 = local_18;
    lVar6 = *(long *)(param_5 + 8);
    uVar12 = param_5[0xc];
    uVar16 = param_5[1];
    uVar11 = *(undefined8 *)(lVar6 + uVar17);
    *local_18 = uVar15;
    *(undefined8 *)(local_18 + 2) = uVar11;
    *(uint **)(lVar6 + uVar17) = local_18;
    memcpy((void *)((long)local_18 + (long)(int)uVar12),local_28,(long)(int)uVar16 << 2);
    lVar6 = (long)puVar13 + (long)(int)param_5[0xb];
LAB_00260d54:
    local_2c = *param_5 & 0xfff;
  }
  cvScalarToRawData(&local_50,lVar6,local_2c,0);
  return;
}


==================================================================

### FUNC 00260ed0 (1000 bytes) name=cvSetND

void cvSetND(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            uint *param_5,uint *param_6)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  long lVar6;
  char *pcVar7;
  void *__s;
  uint *puVar8;
  undefined8 *puVar9;
  uint *puVar10;
  undefined8 uVar11;
  uint uVar12;
  uint *puVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  ulong uVar17;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  uint local_1c;
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_1c = 0;
  local_40 = param_1;
  local_38 = param_2;
  local_30 = param_3;
  local_28 = param_4;
  if ((param_5 == (uint *)0x0) || ((*param_5 & 0xffff0000) != 0x42440000)) {
    lVar6 = cvPtrND(param_5,param_6,&local_1c,1,0);
  }
  else {
    uVar12 = param_5[1];
    uVar15 = 0;
    uVar16 = 0;
    if (0 < (int)uVar12) {
      uVar16 = 0;
      iVar14 = 0;
      puVar13 = param_6;
      do {
        while (uVar15 = *puVar13, uVar15 < param_5[(long)iVar14 + 0xd]) {
          iVar14 = iVar14 + 1;
          puVar13 = puVar13 + 1;
          uVar16 = uVar15 + uVar16 * 0x5bd1e995;
          if ((int)uVar12 <= iVar14) goto LAB_00261054;
        }
        local_18 = (uint *)0x0;
        local_10 = (uint *)0x0;
        pcVar7 = (char *)cv::String::allocate((String *)&local_18,0x1e);
        uVar5 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
        uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
        uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
        uVar11 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
        *(undefined8 *)(pcVar7 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
        *(undefined4 *)(pcVar7 + 0x18) = uVar4;
        *(undefined2 *)(pcVar7 + 0x1c) = uVar5;
        *(undefined8 *)pcVar7 = uVar11;
        *(undefined8 *)(pcVar7 + 8) = uVar3;
        cv::error(-0xd3,(String *)&local_18,
                  "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
        iVar14 = iVar14 + 1;
        puVar13 = puVar13 + 1;
        cv::String::deallocate((String *)&local_18);
        uVar12 = param_5[1];
        uVar16 = uVar15 + uVar16 * 0x5bd1e995;
      } while (iVar14 < (int)uVar12);
LAB_00261054:
      uVar15 = uVar16 & 0x7fffffff;
    }
    uVar1 = param_5[10];
    uVar16 = uVar16 & uVar1 - 1;
    uVar17 = -(ulong)(uVar16 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar16 << 3;
    for (puVar13 = *(uint **)(*(long *)(param_5 + 8) + uVar17); puVar13 != (uint *)0x0;
        puVar13 = *(uint **)(puVar13 + 2)) {
      if (*puVar13 == uVar15) {
        if ((int)uVar12 < 1) {
          if (uVar12 == 0) {
LAB_002610d8:
            lVar6 = (long)puVar13 + (long)(int)param_5[0xb];
            if (lVar6 != 0) goto LAB_0026115c;
            break;
          }
        }
        else if (*param_6 == *(uint *)((long)puVar13 + (long)(int)param_5[0xc])) {
          uVar16 = 0;
          puVar8 = (uint *)((long)puVar13 + (long)(int)param_5[0xc] + 4);
          puVar10 = param_6;
          do {
            puVar10 = puVar10 + 1;
            uVar16 = uVar16 + 1;
            if (uVar16 == uVar12) goto LAB_002610d8;
            uVar2 = *puVar8;
            puVar8 = puVar8 + 1;
          } while (*puVar10 == uVar2);
        }
      }
    }
    lVar6 = *(long *)(param_5 + 6);
    uVar16 = uVar1 * 2;
    if ((int)(uVar1 * 3) <= *(int *)(lVar6 + 0x68)) {
      if ((int)uVar16 < 0x400) {
        uVar16 = 0x400;
      }
      __s = (void *)cv::cvAlloc((long)(int)(uVar16 << 3));
      memset(__s,0,(long)(int)(uVar16 << 3));
      puVar13 = (uint *)cvInitSparseMatIterator(param_5,&local_18);
      if (puVar13 != (uint *)0x0) {
        uVar12 = uVar16 - 1;
        while( true ) {
          puVar8 = *(uint **)(local_10 + 2);
          puVar10 = puVar13;
          while (puVar13 = puVar8, puVar13 != (uint *)0x0) {
            lVar6 = (ulong)(uVar12 & *puVar10) * 8;
            *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
            *(uint **)((long)__s + lVar6) = puVar10;
            puVar10 = puVar13;
            local_10 = puVar13;
            puVar8 = *(uint **)(puVar13 + 2);
          }
          uVar1 = local_8 + 1;
          if ((int)local_18[10] <= (int)uVar1) break;
          uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
          puVar9 = (undefined8 *)(*(long *)(local_18 + 8) + uVar17);
          puVar13 = *(uint **)(*(long *)(local_18 + 8) + uVar17);
          local_8 = uVar1;
          while (puVar13 == (uint *)0x0) {
            local_8 = local_8 + 1;
            if (local_8 == local_18[10]) goto LAB_00261240;
            puVar9 = puVar9 + 1;
            puVar13 = (uint *)*puVar9;
          }
          lVar6 = (ulong)(uVar12 & *puVar10) * 8;
          *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
          *(uint **)((long)__s + lVar6) = puVar10;
          local_10 = puVar13;
        }
LAB_00261240:
        lVar6 = (ulong)(uVar12 & *puVar10) * 8;
        *(undefined8 *)(puVar10 + 2) = *(undefined8 *)((long)__s + lVar6);
        *(uint **)((long)__s + lVar6) = puVar10;
        local_8 = uVar1;
      }
      uVar17 = (ulong)(uVar16 - 1 & uVar15) << 3;
      cv::cvFree_(*(void **)(param_5 + 8));
      *(void **)(param_5 + 8) = __s;
      lVar6 = *(long *)(param_5 + 6);
      param_5[10] = uVar16;
    }
    local_18 = *(uint **)(lVar6 + 0x60);
    if (local_18 == (uint *)0x0) {
      cvSetAdd(lVar6,0,&local_18);
    }
    else {
      uVar16 = *local_18;
      iVar14 = *(int *)(lVar6 + 0x68);
      *(undefined8 *)(lVar6 + 0x60) = *(undefined8 *)(local_18 + 2);
      *local_18 = uVar16 & 0x3ffffff;
      *(int *)(lVar6 + 0x68) = iVar14 + 1;
    }
    puVar13 = local_18;
    lVar6 = *(long *)(param_5 + 8);
    uVar16 = param_5[0xc];
    uVar12 = param_5[1];
    uVar11 = *(undefined8 *)(lVar6 + uVar17);
    *local_18 = uVar15;
    *(undefined8 *)(local_18 + 2) = uVar11;
    *(uint **)(lVar6 + uVar17) = local_18;
    memcpy((void *)((long)local_18 + (long)(int)uVar16),param_6,(long)(int)uVar12 << 2);
    lVar6 = (long)puVar13 + (long)(int)param_5[0xb];
LAB_0026115c:
    local_1c = *param_5 & 0xfff;
  }
  cvScalarToRawData(&local_40,lVar6,local_1c,0);
  return;
}


==================================================================

### FUNC 002612cc (1584 bytes) name=cvSetReal1D

void cvSetReal1D(double param_1,uint *param_2,uint param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  char cVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  uint uVar7;
  double *pdVar8;
  char *pcVar9;
  void *__s;
  undefined2 uVar11;
  uint *puVar12;
  undefined1 uVar13;
  ulong uVar14;
  uint *puVar15;
  undefined8 *puVar16;
  uint uVar17;
  undefined8 uVar18;
  uint *puVar19;
  int iVar20;
  uint uVar21;
  uint local_24 [3];
  uint *local_18;
  uint *local_10;
  uint local_8;
  long lVar10;
  
  local_24[0] = param_3;
  local_24[2] = 0;
  if (param_2 != (uint *)0x0) {
    uVar17 = *param_2;
    if ((uVar17 & 0xffff0000) == 0x42420000) {
      uVar7 = param_2[9];
      if ((((0 < (int)uVar7) && (uVar21 = param_2[8], 0 < (int)uVar21)) &&
          (lVar10 = *(long *)(param_2 + 6), lVar10 != 0)) && ((uVar17 >> 0xe & 1) != 0)) {
        local_24[2] = uVar17 & 0xfff;
        uVar14 = (ulong)local_24[2];
        if (((uVar7 + uVar21) - 1 <= param_3) && (uVar7 * uVar21 <= param_3)) {
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x15);
          cVar4 = s_index_is_out_of_range_00461a50[0x14];
          uVar2 = s_index_is_out_of_range_00461a50._8_8_;
          uVar18 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar9 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar9[0x14] = cVar4;
          *(undefined8 *)pcVar9 = uVar18;
          *(undefined8 *)(pcVar9 + 8) = uVar2;
          cv::error(-0xd3,(String *)&local_18,"void cvSetReal1D(CvArr*, int, double)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x8df);
          cv::String::deallocate((String *)&local_18);
          lVar10 = *(long *)(param_2 + 6);
          uVar14 = (ulong)local_24[2];
        }
        pdVar8 = (double *)
                 (lVar10 + (long)(int)((uVar17 >> 3 & 0x1ff) + 1 <<
                                      (ulong)((uint)(0xfa50L >> ((uVar17 & 7) << 1)) & 3)) *
                           (long)(int)param_3);
        goto LAB_00261334;
      }
    }
    else if ((uVar17 & 0xffff0000) == 0x42440000) {
      uVar17 = param_2[1];
      if ((int)uVar17 < 2) {
        if (uVar17 == 1) {
          lVar10 = 0;
          uVar21 = 0;
          do {
            uVar7 = local_24[lVar10];
            iVar20 = (int)lVar10;
            if (param_2[(long)iVar20 + 0xd] <= uVar7) {
              local_18 = (uint *)0x0;
              local_10 = (uint *)0x0;
              pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x1e);
              uVar11 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
              uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
              uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
              uVar18 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
              *(undefined8 *)(pcVar9 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
              *(undefined4 *)(pcVar9 + 0x18) = uVar3;
              *(undefined2 *)(pcVar9 + 0x1c) = uVar11;
              *(undefined8 *)pcVar9 = uVar18;
              *(undefined8 *)(pcVar9 + 8) = uVar2;
              cv::error(-0xd3,(String *)&local_18,
                        "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                        "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
              cv::String::deallocate((String *)&local_18);
              uVar17 = param_2[1];
            }
            lVar10 = lVar10 + 1;
            uVar21 = uVar7 + uVar21 * 0x5bd1e995;
          } while (iVar20 + 1 < (int)uVar17);
          uVar7 = uVar21 & 0x7fffffff;
        }
        else {
          uVar7 = 0;
          uVar21 = 0;
        }
        uVar1 = param_2[10];
        uVar21 = uVar21 & uVar1 - 1;
        uVar14 = -(ulong)(uVar21 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar21 << 3;
        for (puVar19 = *(uint **)(*(long *)(param_2 + 8) + uVar14); puVar19 != (uint *)0x0;
            puVar19 = *(uint **)(puVar19 + 2)) {
          if (*puVar19 == uVar7) {
            if ((int)uVar17 < 1) {
              if (uVar17 == 0) {
LAB_0026170c:
                pdVar8 = (double *)((long)puVar19 + (long)(int)param_2[0xb]);
                if (pdVar8 != (double *)0x0) goto LAB_00261718;
                break;
              }
            }
            else {
              puVar12 = (uint *)((long)puVar19 + (long)(int)param_2[0xc]);
              if (local_24[0] == *(uint *)((long)puVar19 + (long)(int)param_2[0xc])) {
                puVar15 = local_24;
                uVar21 = 0;
                do {
                  puVar15 = puVar15 + 1;
                  uVar21 = uVar21 + 1;
                  if (uVar21 == uVar17) goto LAB_0026170c;
                  puVar12 = puVar12 + 1;
                } while (*puVar15 == *puVar12);
              }
            }
          }
        }
        lVar10 = *(long *)(param_2 + 6);
        uVar17 = uVar1 * 2;
        if ((int)(uVar1 * 3) <= *(int *)(lVar10 + 0x68)) {
          if ((int)uVar17 < 0x400) {
            uVar17 = 0x400;
          }
          __s = (void *)cv::cvAlloc((long)(int)(uVar17 << 3));
          memset(__s,0,(long)(int)(uVar17 << 3));
          puVar19 = (uint *)cvInitSparseMatIterator(param_2,&local_18);
          if (puVar19 != (uint *)0x0) {
            uVar21 = uVar17 - 1;
            while( true ) {
              puVar15 = *(uint **)(local_10 + 2);
              puVar12 = puVar19;
              while (puVar19 = puVar15, puVar19 != (uint *)0x0) {
                lVar10 = (ulong)(uVar21 & *puVar12) * 8;
                *(undefined8 *)(puVar12 + 2) = *(undefined8 *)((long)__s + lVar10);
                *(uint **)((long)__s + lVar10) = puVar12;
                puVar12 = puVar19;
                local_10 = puVar19;
                puVar15 = *(uint **)(puVar19 + 2);
              }
              uVar1 = local_8 + 1;
              if ((int)local_18[10] <= (int)uVar1) break;
              uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
              puVar16 = (undefined8 *)(*(long *)(local_18 + 8) + uVar14);
              puVar19 = *(uint **)(*(long *)(local_18 + 8) + uVar14);
              local_8 = uVar1;
              while (puVar19 == (uint *)0x0) {
                local_8 = local_8 + 1;
                if (local_8 == local_18[10]) goto LAB_00261878;
                puVar16 = puVar16 + 1;
                puVar19 = (uint *)*puVar16;
              }
              lVar10 = (ulong)(uVar21 & *puVar12) * 8;
              *(undefined8 *)(puVar12 + 2) = *(undefined8 *)((long)__s + lVar10);
              *(uint **)((long)__s + lVar10) = puVar12;
              local_10 = puVar19;
            }
LAB_00261878:
            lVar10 = (ulong)(uVar21 & *puVar12) * 8;
            *(undefined8 *)(puVar12 + 2) = *(undefined8 *)((long)__s + lVar10);
            *(uint **)((long)__s + lVar10) = puVar12;
            local_8 = uVar1;
          }
          uVar14 = (ulong)(uVar17 - 1 & uVar7) << 3;
          cv::cvFree_(*(void **)(param_2 + 8));
          *(void **)(param_2 + 8) = __s;
          lVar10 = *(long *)(param_2 + 6);
          param_2[10] = uVar17;
        }
        local_18 = *(uint **)(lVar10 + 0x60);
        if (local_18 == (uint *)0x0) {
          cvSetAdd(lVar10,0,&local_18);
        }
        else {
          uVar17 = *local_18;
          iVar20 = *(int *)(lVar10 + 0x68);
          *(undefined8 *)(lVar10 + 0x60) = *(undefined8 *)(local_18 + 2);
          *local_18 = uVar17 & 0x3ffffff;
          *(int *)(lVar10 + 0x68) = iVar20 + 1;
        }
        puVar19 = local_18;
        lVar10 = *(long *)(param_2 + 8);
        uVar17 = param_2[0xc];
        uVar21 = param_2[1];
        uVar18 = *(undefined8 *)(lVar10 + uVar14);
        *local_18 = uVar7;
        *(undefined8 *)(local_18 + 2) = uVar18;
        *(uint **)(lVar10 + uVar14) = local_18;
        memcpy((void *)((long)local_18 + (long)(int)uVar17),local_24,(long)(int)uVar21 << 2);
        pdVar8 = (double *)((long)puVar19 + (long)(int)param_2[0xb]);
LAB_00261718:
        local_24[2] = *param_2 & 0xfff;
        uVar14 = (ulong)local_24[2];
        goto LAB_00261334;
      }
    }
  }
  pdVar8 = (double *)cvPtr1D(param_2,param_3,local_24 + 2);
  uVar14 = (ulong)local_24[2];
LAB_00261334:
  if ((uVar14 >> 3 & 0x1ff) != 0) {
    local_18 = (uint *)0x0;
    local_10 = (uint *)0x0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x2d);
    cVar4 = s_cvSetReal__support_only_single_c_00461b10[0x2c];
    uVar3 = s_cvSetReal__support_only_single_c_00461b10._40_4_;
    uVar6 = s_cvSetReal__support_only_single_c_00461b10._24_8_;
    uVar5 = s_cvSetReal__support_only_single_c_00461b10._16_8_;
    uVar2 = s_cvSetReal__support_only_single_c_00461b10._8_8_;
    uVar18 = s_cvSetReal__support_only_single_c_00461b10._0_8_;
    *(undefined8 *)(pcVar9 + 0x20) = s_cvSetReal__support_only_single_c_00461b10._32_8_;
    *(undefined4 *)(pcVar9 + 0x28) = uVar3;
    pcVar9[0x2c] = cVar4;
    *(undefined8 *)pcVar9 = uVar18;
    *(undefined8 *)(pcVar9 + 8) = uVar2;
    *(undefined8 *)(pcVar9 + 0x10) = uVar5;
    *(undefined8 *)(pcVar9 + 0x18) = uVar6;
    cv::error(-0xf,(String *)&local_18,"void cvSetReal1D(CvArr*, int, double)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x8e9);
    cv::String::deallocate((String *)&local_18);
  }
  uVar17 = local_24[2];
  if (pdVar8 != (double *)0x0) {
    if ((int)local_24[2] < 5) {
      lVar10 = lrint(param_1);
      uVar7 = (uint)lVar10;
      switch(uVar17) {
      case 0:
        if (0xff < uVar7) {
          uVar7 = -(uint)(0 < (int)uVar7);
        }
        *(char *)pdVar8 = (char)uVar7;
        break;
      case 1:
        uVar13 = (undefined1)lVar10;
        if ((0xff < uVar7 + 0x80) && (uVar13 = 0x7f, (int)uVar7 < 1)) {
          uVar13 = 0x80;
        }
        *(undefined1 *)pdVar8 = uVar13;
        break;
      case 2:
        if (0xffff < uVar7) {
          uVar7 = -(uint)(0 < (int)uVar7);
        }
        *(short *)pdVar8 = (short)uVar7;
        break;
      case 3:
        uVar11 = (undefined2)lVar10;
        if ((0xffff < uVar7 + 0x8000) && (uVar11 = 0x7fff, (int)uVar7 < 1)) {
          uVar11 = 0x8000;
        }
        *(undefined2 *)pdVar8 = uVar11;
        break;
      case 4:
        *(uint *)pdVar8 = uVar7;
      }
    }
    else {
      if (local_24[2] == 5) {
        *(float *)pdVar8 = (float)param_1;
        return;
      }
      if (local_24[2] == 6) {
        *pdVar8 = param_1;
      }
    }
  }
  return;
}


==================================================================

### FUNC 00261938 (1588 bytes) name=cvSetReal2D

void cvSetReal2D(double param_1,uint *param_2,uint param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  double *pdVar8;
  char *pcVar9;
  long lVar10;
  uint *puVar11;
  void *__s;
  undefined2 uVar12;
  undefined1 uVar13;
  ulong uVar14;
  uint *puVar15;
  undefined8 *puVar16;
  uint *puVar17;
  undefined8 uVar18;
  uint uVar19;
  int iVar20;
  uint uVar21;
  uint uVar22;
  uint local_24;
  uint local_20 [2];
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_24 = 0;
  if (param_2 != (uint *)0x0) {
    uVar19 = *param_2;
    if ((uVar19 & 0xffff0000) == 0x42420000) {
      if (((0 < (int)param_2[9]) && (0 < (int)param_2[8])) &&
         (lVar10 = *(long *)(param_2 + 6), lVar10 != 0)) {
        if ((param_2[8] <= param_3) || (param_2[9] <= param_4)) {
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x15);
          cVar5 = s_index_is_out_of_range_00461a50[0x14];
          uVar3 = s_index_is_out_of_range_00461a50._8_8_;
          uVar18 = s_index_is_out_of_range_00461a50._0_8_;
          *(undefined4 *)(pcVar9 + 0x10) = s_index_is_out_of_range_00461a50._16_4_;
          pcVar9[0x14] = cVar5;
          *(undefined8 *)pcVar9 = uVar18;
          *(undefined8 *)(pcVar9 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_18,"void cvSetReal2D(CvArr*, int, int, double)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x8fc);
          cv::String::deallocate((String *)&local_18);
          uVar19 = *param_2;
          lVar10 = *(long *)(param_2 + 6);
        }
        local_24 = uVar19 & 0xfff;
        uVar14 = (ulong)local_24;
        pdVar8 = (double *)
                 (lVar10 + (long)(int)param_3 * (long)(int)param_2[1] +
                           (long)(int)(((uVar19 >> 3 & 0x1ff) + 1 <<
                                       (ulong)((uint)(0xfa50L >> ((uVar19 & 7) << 1)) & 3)) *
                                      param_4));
        goto LAB_002619ac;
      }
    }
    else if ((uVar19 & 0xffff0000) == 0x42440000) {
      uVar19 = param_2[1];
      local_20[0] = param_3;
      local_20[1] = param_4;
      if ((int)uVar19 < 1) {
        uVar21 = 0;
        uVar22 = 0;
      }
      else {
        lVar10 = 0;
        uVar22 = 0;
        do {
          while( true ) {
            uVar21 = local_20[lVar10];
            iVar20 = (int)lVar10;
            if (uVar21 < param_2[(long)iVar20 + 0xd]) break;
            local_18 = (uint *)0x0;
            local_10 = (uint *)0x0;
            pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x1e);
            uVar12 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
            uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
            uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
            uVar18 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
            *(undefined8 *)(pcVar9 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
            *(undefined4 *)(pcVar9 + 0x18) = uVar4;
            *(undefined2 *)(pcVar9 + 0x1c) = uVar12;
            *(undefined8 *)pcVar9 = uVar18;
            *(undefined8 *)(pcVar9 + 8) = uVar3;
            cv::error(-0xd3,(String *)&local_18,
                      "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
            cv::String::deallocate((String *)&local_18);
            uVar19 = param_2[1];
            lVar10 = lVar10 + 1;
            uVar22 = uVar21 + uVar22 * 0x5bd1e995;
            if ((int)uVar19 <= iVar20 + 1) goto LAB_00261c64;
          }
          lVar10 = lVar10 + 1;
          uVar22 = uVar21 + uVar22 * 0x5bd1e995;
        } while (iVar20 + 1 < (int)uVar19);
LAB_00261c64:
        uVar21 = uVar22 & 0x7fffffff;
      }
      uVar1 = param_2[10];
      uVar22 = uVar22 & uVar1 - 1;
      uVar14 = -(ulong)(uVar22 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar22 << 3;
      puVar11 = *(uint **)(*(long *)(param_2 + 8) + uVar14);
      if (puVar11 != (uint *)0x0) {
        do {
          if (*puVar11 == uVar21) {
            if ((int)uVar19 < 1) {
              if (uVar19 == 0) {
LAB_00261ce8:
                pdVar8 = (double *)((long)puVar11 + (long)(int)param_2[0xb]);
                if (pdVar8 != (double *)0x0) goto LAB_00261d6c;
                break;
              }
            }
            else if (param_3 == *(uint *)((long)puVar11 + (long)(int)param_2[0xc])) {
              uVar22 = 0;
              puVar15 = (uint *)((long)puVar11 + (long)(int)param_2[0xc] + 4);
              puVar17 = local_20;
              do {
                puVar17 = puVar17 + 1;
                uVar22 = uVar22 + 1;
                if (uVar22 == uVar19) goto LAB_00261ce8;
                uVar2 = *puVar15;
                puVar15 = puVar15 + 1;
              } while (*puVar17 == uVar2);
            }
          }
          puVar11 = *(uint **)(puVar11 + 2);
        } while (puVar11 != (uint *)0x0);
      }
      lVar10 = *(long *)(param_2 + 6);
      uVar19 = uVar1 * 2;
      if ((int)(uVar1 * 3) <= *(int *)(lVar10 + 0x68)) {
        if ((int)uVar19 < 0x400) {
          uVar19 = 0x400;
        }
        __s = (void *)cv::cvAlloc((long)(int)(uVar19 << 3));
        memset(__s,0,(long)(int)(uVar19 << 3));
        puVar11 = (uint *)cvInitSparseMatIterator(param_2,&local_18);
        if (puVar11 != (uint *)0x0) {
          uVar22 = uVar19 - 1;
          while( true ) {
            puVar15 = *(uint **)(local_10 + 2);
            puVar17 = puVar11;
            while (puVar11 = puVar15, puVar11 != (uint *)0x0) {
              lVar10 = (ulong)(uVar22 & *puVar17) * 8;
              *(undefined8 *)(puVar17 + 2) = *(undefined8 *)((long)__s + lVar10);
              *(uint **)((long)__s + lVar10) = puVar17;
              puVar17 = puVar11;
              local_10 = puVar11;
              puVar15 = *(uint **)(puVar11 + 2);
            }
            uVar1 = local_8 + 1;
            if ((int)local_18[10] <= (int)uVar1) break;
            uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
            puVar16 = (undefined8 *)(*(long *)(local_18 + 8) + uVar14);
            puVar11 = *(uint **)(*(long *)(local_18 + 8) + uVar14);
            local_8 = uVar1;
            while (puVar11 == (uint *)0x0) {
              local_8 = local_8 + 1;
              if (local_8 == local_18[10]) goto LAB_00261ee0;
              puVar16 = puVar16 + 1;
              puVar11 = (uint *)*puVar16;
            }
            lVar10 = (ulong)(uVar22 & *puVar17) * 8;
            *(undefined8 *)(puVar17 + 2) = *(undefined8 *)((long)__s + lVar10);
            *(uint **)((long)__s + lVar10) = puVar17;
            local_10 = puVar11;
          }
LAB_00261ee0:
          lVar10 = (ulong)(uVar22 & *puVar17) * 8;
          *(undefined8 *)(puVar17 + 2) = *(undefined8 *)((long)__s + lVar10);
          *(uint **)((long)__s + lVar10) = puVar17;
          local_8 = uVar1;
        }
        uVar14 = (ulong)(uVar19 - 1 & uVar21) << 3;
        cv::cvFree_(*(void **)(param_2 + 8));
        *(void **)(param_2 + 8) = __s;
        lVar10 = *(long *)(param_2 + 6);
        param_2[10] = uVar19;
      }
      local_18 = *(uint **)(lVar10 + 0x60);
      if (local_18 == (uint *)0x0) {
        cvSetAdd(lVar10,0,&local_18);
      }
      else {
        uVar19 = *local_18;
        iVar20 = *(int *)(lVar10 + 0x68);
        *(undefined8 *)(lVar10 + 0x60) = *(undefined8 *)(local_18 + 2);
        *local_18 = uVar19 & 0x3ffffff;
        *(int *)(lVar10 + 0x68) = iVar20 + 1;
      }
      puVar11 = local_18;
      lVar10 = *(long *)(param_2 + 8);
      uVar19 = param_2[0xc];
      uVar22 = param_2[1];
      uVar18 = *(undefined8 *)(lVar10 + uVar14);
      *local_18 = uVar21;
      *(undefined8 *)(local_18 + 2) = uVar18;
      *(uint **)(lVar10 + uVar14) = local_18;
      memcpy((void *)((long)local_18 + (long)(int)uVar19),local_20,(long)(int)uVar22 << 2);
      pdVar8 = (double *)((long)puVar11 + (long)(int)param_2[0xb]);
LAB_00261d6c:
      local_24 = *param_2 & 0xfff;
      uVar14 = (ulong)local_24;
      goto LAB_002619ac;
    }
  }
  pdVar8 = (double *)cvPtr2D(param_2,param_3,param_4,&local_24);
  uVar14 = (ulong)local_24;
LAB_002619ac:
  if ((uVar14 >> 3 & 0x1ff) != 0) {
    local_18 = (uint *)0x0;
    local_10 = (uint *)0x0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x2d);
    cVar5 = s_cvSetReal__support_only_single_c_00461b10[0x2c];
    uVar4 = s_cvSetReal__support_only_single_c_00461b10._40_4_;
    uVar7 = s_cvSetReal__support_only_single_c_00461b10._24_8_;
    uVar6 = s_cvSetReal__support_only_single_c_00461b10._16_8_;
    uVar3 = s_cvSetReal__support_only_single_c_00461b10._8_8_;
    uVar18 = s_cvSetReal__support_only_single_c_00461b10._0_8_;
    *(undefined8 *)(pcVar9 + 0x20) = s_cvSetReal__support_only_single_c_00461b10._32_8_;
    *(undefined4 *)(pcVar9 + 0x28) = uVar4;
    pcVar9[0x2c] = cVar5;
    *(undefined8 *)pcVar9 = uVar18;
    *(undefined8 *)(pcVar9 + 8) = uVar3;
    *(undefined8 *)(pcVar9 + 0x10) = uVar6;
    *(undefined8 *)(pcVar9 + 0x18) = uVar7;
    cv::error(-0xf,(String *)&local_18,"void cvSetReal2D(CvArr*, int, int, double)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x90b);
    cv::String::deallocate((String *)&local_18);
  }
  uVar19 = local_24;
  if (pdVar8 != (double *)0x0) {
    if ((int)local_24 < 5) {
      lVar10 = lrint(param_1);
      uVar21 = (uint)lVar10;
      switch(uVar19) {
      case 0:
        if (0xff < uVar21) {
          uVar21 = -(uint)(0 < (int)uVar21);
        }
        *(char *)pdVar8 = (char)uVar21;
        break;
      case 1:
        uVar13 = (undefined1)lVar10;
        if ((0xff < uVar21 + 0x80) && (uVar13 = 0x7f, (int)uVar21 < 1)) {
          uVar13 = 0x80;
        }
        *(undefined1 *)pdVar8 = uVar13;
        break;
      case 2:
        if (0xffff < uVar21) {
          uVar21 = -(uint)(0 < (int)uVar21);
        }
        *(short *)pdVar8 = (short)uVar21;
        break;
      case 3:
        uVar12 = (undefined2)lVar10;
        if ((0xffff < uVar21 + 0x8000) && (uVar12 = 0x7fff, (int)uVar21 < 1)) {
          uVar12 = 0x8000;
        }
        *(undefined2 *)pdVar8 = uVar12;
        break;
      case 4:
        *(uint *)pdVar8 = uVar21;
      }
    }
    else if (local_24 == 5) {
      *(float *)pdVar8 = (float)param_1;
    }
    else if (local_24 == 6) {
      *pdVar8 = param_1;
    }
  }
  return;
}


==================================================================

### FUNC 00261fa8 (1356 bytes) name=cvSetReal3D

void cvSetReal3D(double param_1,uint *param_2,uint param_3,undefined8 param_4,undefined8 param_5)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  double *pdVar8;
  char *pcVar9;
  long lVar10;
  void *__s;
  undefined2 uVar11;
  undefined1 uVar12;
  uint *puVar13;
  undefined8 *puVar14;
  uint *puVar15;
  undefined8 uVar16;
  uint uVar17;
  uint *puVar18;
  int iVar19;
  uint uVar20;
  uint uVar21;
  ulong uVar22;
  uint local_2c;
  uint local_28 [4];
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_2c = 0;
  if ((param_2 == (uint *)0x0) || ((*param_2 & 0xffff0000) != 0x42440000)) {
    pdVar8 = (double *)cvPtr3D(param_2,param_3,param_4,param_5,&local_2c);
  }
  else {
    uVar17 = param_2[1];
    local_28[0] = param_3;
    local_28[1] = (int)param_4;
    local_28[2] = (int)param_5;
    if ((int)uVar17 < 1) {
      uVar20 = 0;
      uVar21 = 0;
    }
    else {
      lVar10 = 0;
      uVar21 = 0;
      do {
        while( true ) {
          uVar20 = local_28[lVar10];
          iVar19 = (int)lVar10;
          if (uVar20 < param_2[(long)iVar19 + 0xd]) break;
          local_18 = (uint *)0x0;
          local_10 = (uint *)0x0;
          pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x1e);
          uVar11 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
          uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
          uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
          uVar16 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
          *(undefined8 *)(pcVar9 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
          *(undefined4 *)(pcVar9 + 0x18) = uVar4;
          *(undefined2 *)(pcVar9 + 0x1c) = uVar11;
          *(undefined8 *)pcVar9 = uVar16;
          *(undefined8 *)(pcVar9 + 8) = uVar3;
          cv::error(-0xd3,(String *)&local_18,
                    "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
          cv::String::deallocate((String *)&local_18);
          uVar17 = param_2[1];
          lVar10 = lVar10 + 1;
          uVar21 = uVar20 + uVar21 * 0x5bd1e995;
          if ((int)uVar17 <= iVar19 + 1) goto LAB_002621ec;
        }
        lVar10 = lVar10 + 1;
        uVar21 = uVar20 + uVar21 * 0x5bd1e995;
      } while (iVar19 + 1 < (int)uVar17);
LAB_002621ec:
      uVar20 = uVar21 & 0x7fffffff;
    }
    uVar1 = param_2[10];
    uVar21 = uVar21 & uVar1 - 1;
    uVar22 = -(ulong)(uVar21 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar21 << 3;
    puVar18 = *(uint **)(*(long *)(param_2 + 8) + uVar22);
    if (puVar18 != (uint *)0x0) {
      do {
        if (*puVar18 == uVar20) {
          if ((int)uVar17 < 1) {
            if (uVar17 == 0) {
LAB_00262270:
              pdVar8 = (double *)((long)puVar18 + (long)(int)param_2[0xb]);
              if (pdVar8 != (double *)0x0) goto LAB_002622f4;
              break;
            }
          }
          else if (param_3 == *(uint *)((long)puVar18 + (long)(int)param_2[0xc])) {
            uVar21 = 0;
            puVar13 = (uint *)((long)puVar18 + (long)(int)param_2[0xc] + 4);
            puVar15 = local_28;
            do {
              puVar15 = puVar15 + 1;
              uVar21 = uVar21 + 1;
              if (uVar21 == uVar17) goto LAB_00262270;
              uVar2 = *puVar13;
              puVar13 = puVar13 + 1;
            } while (*puVar15 == uVar2);
          }
        }
        puVar18 = *(uint **)(puVar18 + 2);
      } while (puVar18 != (uint *)0x0);
    }
    lVar10 = *(long *)(param_2 + 6);
    uVar17 = uVar1 * 2;
    if ((int)(uVar1 * 3) <= *(int *)(lVar10 + 0x68)) {
      if ((int)uVar17 < 0x400) {
        uVar17 = 0x400;
      }
      __s = (void *)cv::cvAlloc((long)(int)(uVar17 << 3));
      memset(__s,0,(long)(int)(uVar17 << 3));
      puVar18 = (uint *)cvInitSparseMatIterator(param_2,&local_18);
      if (puVar18 != (uint *)0x0) {
        uVar21 = uVar17 - 1;
        while( true ) {
          puVar13 = *(uint **)(local_10 + 2);
          puVar15 = puVar18;
          while (puVar18 = puVar13, puVar18 != (uint *)0x0) {
            lVar10 = (ulong)(uVar21 & *puVar15) * 8;
            *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
            *(uint **)((long)__s + lVar10) = puVar15;
            puVar15 = puVar18;
            local_10 = puVar18;
            puVar13 = *(uint **)(puVar18 + 2);
          }
          uVar1 = local_8 + 1;
          if ((int)local_18[10] <= (int)uVar1) break;
          uVar22 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
          puVar14 = (undefined8 *)(*(long *)(local_18 + 8) + uVar22);
          puVar18 = *(uint **)(*(long *)(local_18 + 8) + uVar22);
          local_8 = uVar1;
          while (puVar18 == (uint *)0x0) {
            local_8 = local_8 + 1;
            if (local_8 == local_18[10]) goto LAB_00262468;
            puVar14 = puVar14 + 1;
            puVar18 = (uint *)*puVar14;
          }
          lVar10 = (ulong)(uVar21 & *puVar15) * 8;
          *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
          *(uint **)((long)__s + lVar10) = puVar15;
          local_10 = puVar18;
        }
LAB_00262468:
        lVar10 = (ulong)(uVar21 & *puVar15) * 8;
        *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
        *(uint **)((long)__s + lVar10) = puVar15;
        local_8 = uVar1;
      }
      uVar22 = (ulong)(uVar17 - 1 & uVar20) << 3;
      cv::cvFree_(*(void **)(param_2 + 8));
      *(void **)(param_2 + 8) = __s;
      lVar10 = *(long *)(param_2 + 6);
      param_2[10] = uVar17;
    }
    local_18 = *(uint **)(lVar10 + 0x60);
    if (local_18 == (uint *)0x0) {
      cvSetAdd(lVar10,0,&local_18);
    }
    else {
      uVar17 = *local_18;
      iVar19 = *(int *)(lVar10 + 0x68);
      *(undefined8 *)(lVar10 + 0x60) = *(undefined8 *)(local_18 + 2);
      *local_18 = uVar17 & 0x3ffffff;
      *(int *)(lVar10 + 0x68) = iVar19 + 1;
    }
    puVar18 = local_18;
    lVar10 = *(long *)(param_2 + 8);
    uVar17 = param_2[0xc];
    uVar21 = param_2[1];
    uVar16 = *(undefined8 *)(lVar10 + uVar22);
    *local_18 = uVar20;
    *(undefined8 *)(local_18 + 2) = uVar16;
    *(uint **)(lVar10 + uVar22) = local_18;
    memcpy((void *)((long)local_18 + (long)(int)uVar17),local_28,(long)(int)uVar21 << 2);
    pdVar8 = (double *)((long)puVar18 + (long)(int)param_2[0xb]);
LAB_002622f4:
    local_2c = *param_2 & 0xfff;
  }
  if ((local_2c >> 3 & 0x1ff) != 0) {
    local_18 = (uint *)0x0;
    local_10 = (uint *)0x0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x2d);
    cVar7 = s_cvSetReal__support_only_single_c_00461b10[0x2c];
    uVar4 = s_cvSetReal__support_only_single_c_00461b10._40_4_;
    uVar6 = s_cvSetReal__support_only_single_c_00461b10._24_8_;
    uVar5 = s_cvSetReal__support_only_single_c_00461b10._16_8_;
    uVar3 = s_cvSetReal__support_only_single_c_00461b10._8_8_;
    uVar16 = s_cvSetReal__support_only_single_c_00461b10._0_8_;
                    /* catch() { ... } // from try @ 002620dc with catch @ 0026204c */
    *(undefined8 *)(pcVar9 + 0x20) = s_cvSetReal__support_only_single_c_00461b10._32_8_;
    *(undefined4 *)(pcVar9 + 0x28) = uVar4;
                    /* try { // try from 0026206c to 0036206f has its CatchHandler @ 002620a8 */
    pcVar9[0x2c] = cVar7;
    *(undefined8 *)pcVar9 = uVar16;
    *(undefined8 *)(pcVar9 + 8) = uVar3;
    *(undefined8 *)(pcVar9 + 0x10) = uVar5;
    *(undefined8 *)(pcVar9 + 0x18) = uVar6;
    cv::error(-0xf,(String *)&local_18,"void cvSetReal3D(CvArr*, int, int, int, double)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x920);
    cv::String::deallocate((String *)&local_18);
  }
  uVar17 = local_2c;
  if (pdVar8 != (double *)0x0) {
    if ((int)local_2c < 5) {
      lVar10 = lrint(param_1);
      uVar20 = (uint)lVar10;
                    /* try { // try from 002620dc to 003620df has its CatchHandler @ 0026204c */
      switch(uVar17) {
      case 0:
        if (0xff < uVar20) {
          uVar20 = -(uint)(0 < (int)uVar20);
        }
        *(char *)pdVar8 = (char)uVar20;
        break;
      case 1:
        uVar12 = (undefined1)lVar10;
        if ((0xff < uVar20 + 0x80) && (uVar12 = 0x7f, (int)uVar20 < 1)) {
          uVar12 = 0x80;
        }
        *(undefined1 *)pdVar8 = uVar12;
        break;
      case 2:
        if (0xffff < uVar20) {
          uVar20 = -(uint)(0 < (int)uVar20);
        }
        *(short *)pdVar8 = (short)uVar20;
        break;
      case 3:
        uVar11 = (undefined2)lVar10;
        if ((0xffff < uVar20 + 0x8000) && (uVar11 = 0x7fff, (int)uVar20 < 1)) {
          uVar11 = 0x8000;
        }
        *(undefined2 *)pdVar8 = uVar11;
        break;
      case 4:
        *(uint *)pdVar8 = uVar20;
      }
    }
    else if (local_2c == 5) {
      *(float *)pdVar8 = (float)param_1;
    }
    else if (local_2c == 6) {
      *pdVar8 = param_1;
    }
  }
                    /* catch() { ... } // from try @ 0026206c with catch @ 002620a8 */
  return;
}


==================================================================

### FUNC 0026251c (1348 bytes) name=cvSetRealND

void cvSetRealND(double param_1,uint *param_2,uint *param_3)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  double *pdVar8;
  char *pcVar9;
  long lVar10;
  void *__s;
  undefined2 uVar11;
  undefined1 uVar12;
  uint *puVar13;
  undefined8 *puVar14;
  uint *puVar15;
  undefined8 uVar16;
  uint uVar17;
  uint *puVar18;
  int iVar19;
  uint uVar20;
  uint uVar21;
  ulong uVar22;
  uint local_1c;
  uint *local_18;
  uint *local_10;
  uint local_8;
  
  local_1c = 0;
  if ((param_2 == (uint *)0x0) || ((*param_2 & 0xffff0000) != 0x42440000)) {
    pdVar8 = (double *)cvPtrND(param_2,param_3,&local_1c,1,0);
  }
  else {
    uVar17 = param_2[1];
    uVar20 = 0;
    uVar21 = 0;
    if (0 < (int)uVar17) {
      uVar21 = 0;
      iVar19 = 0;
      puVar18 = param_3;
      do {
        while (uVar20 = *puVar18, uVar20 < param_2[(long)iVar19 + 0xd]) {
          iVar19 = iVar19 + 1;
          puVar18 = puVar18 + 1;
          uVar21 = uVar20 + uVar21 * 0x5bd1e995;
          if ((int)uVar17 <= iVar19) goto LAB_00262764;
        }
        local_18 = (uint *)0x0;
        local_10 = (uint *)0x0;
        pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x1e);
        uVar11 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
        uVar4 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
        uVar3 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
        uVar16 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
        *(undefined8 *)(pcVar9 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
        *(undefined4 *)(pcVar9 + 0x18) = uVar4;
        *(undefined2 *)(pcVar9 + 0x1c) = uVar11;
        *(undefined8 *)pcVar9 = uVar16;
        *(undefined8 *)(pcVar9 + 8) = uVar3;
        cv::error(-0xd3,(String *)&local_18,
                  "uchar* icvGetNodePtr(CvSparseMat*, const int*, int*, int, unsigned int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x299);
        iVar19 = iVar19 + 1;
        puVar18 = puVar18 + 1;
        cv::String::deallocate((String *)&local_18);
        uVar17 = param_2[1];
        uVar21 = uVar20 + uVar21 * 0x5bd1e995;
      } while (iVar19 < (int)uVar17);
LAB_00262764:
      uVar20 = uVar21 & 0x7fffffff;
    }
    uVar1 = param_2[10];
    uVar21 = uVar21 & uVar1 - 1;
    uVar22 = -(ulong)(uVar21 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar21 << 3;
    for (puVar18 = *(uint **)(*(long *)(param_2 + 8) + uVar22); puVar18 != (uint *)0x0;
        puVar18 = *(uint **)(puVar18 + 2)) {
      if (*puVar18 == uVar20) {
        if ((int)uVar17 < 1) {
          if (uVar17 == 0) {
LAB_002627e8:
            pdVar8 = (double *)((long)puVar18 + (long)(int)param_2[0xb]);
            if (pdVar8 != (double *)0x0) goto LAB_0026286c;
            break;
          }
        }
        else if (*param_3 == *(uint *)((long)puVar18 + (long)(int)param_2[0xc])) {
          uVar21 = 0;
          puVar13 = (uint *)((long)puVar18 + (long)(int)param_2[0xc] + 4);
          puVar15 = param_3;
          do {
            puVar15 = puVar15 + 1;
            uVar21 = uVar21 + 1;
            if (uVar21 == uVar17) goto LAB_002627e8;
            uVar2 = *puVar13;
            puVar13 = puVar13 + 1;
          } while (*puVar15 == uVar2);
        }
      }
    }
    lVar10 = *(long *)(param_2 + 6);
    uVar21 = uVar1 * 2;
    if ((int)(uVar1 * 3) <= *(int *)(lVar10 + 0x68)) {
      if ((int)uVar21 < 0x400) {
        uVar21 = 0x400;
      }
      __s = (void *)cv::cvAlloc((long)(int)(uVar21 << 3));
      memset(__s,0,(long)(int)(uVar21 << 3));
      puVar18 = (uint *)cvInitSparseMatIterator(param_2,&local_18);
      if (puVar18 != (uint *)0x0) {
        uVar17 = uVar21 - 1;
        while( true ) {
          puVar13 = *(uint **)(local_10 + 2);
          puVar15 = puVar18;
          while (puVar18 = puVar13, puVar18 != (uint *)0x0) {
            lVar10 = (ulong)(uVar17 & *puVar15) * 8;
            *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
            *(uint **)((long)__s + lVar10) = puVar15;
            puVar15 = puVar18;
            local_10 = puVar18;
            puVar13 = *(uint **)(puVar18 + 2);
          }
          uVar1 = local_8 + 1;
          if ((int)local_18[10] <= (int)uVar1) break;
          uVar22 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
          puVar14 = (undefined8 *)(*(long *)(local_18 + 8) + uVar22);
          puVar18 = *(uint **)(*(long *)(local_18 + 8) + uVar22);
          local_8 = uVar1;
          while (puVar18 == (uint *)0x0) {
            local_8 = local_8 + 1;
            if (local_8 == local_18[10]) goto LAB_002629e0;
            puVar14 = puVar14 + 1;
            puVar18 = (uint *)*puVar14;
          }
          lVar10 = (ulong)(uVar17 & *puVar15) * 8;
          *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
          *(uint **)((long)__s + lVar10) = puVar15;
          local_10 = puVar18;
        }
LAB_002629e0:
        lVar10 = (ulong)(uVar17 & *puVar15) * 8;
        *(undefined8 *)(puVar15 + 2) = *(undefined8 *)((long)__s + lVar10);
        *(uint **)((long)__s + lVar10) = puVar15;
        local_8 = uVar1;
      }
      uVar22 = (ulong)(uVar21 - 1 & uVar20) << 3;
      cv::cvFree_(*(void **)(param_2 + 8));
      *(void **)(param_2 + 8) = __s;
      lVar10 = *(long *)(param_2 + 6);
      param_2[10] = uVar21;
    }
    local_18 = *(uint **)(lVar10 + 0x60);
    if (local_18 == (uint *)0x0) {
                    /* try { // try from 00262a50 to 00362aa3 has its CatchHandler @ 00262a50
                       catch() { ... } // from try @ 00262a50 with catch @ 00262a50
                       catch() { ... } // from try @ 00262ab4 with catch @ 00262a50
                       catch() { ... } // from try @ 00262b04 with catch @ 00262a50 */
      cvSetAdd(lVar10,0,&local_18);
    }
    else {
      uVar21 = *local_18;
      iVar19 = *(int *)(lVar10 + 0x68);
      *(undefined8 *)(lVar10 + 0x60) = *(undefined8 *)(local_18 + 2);
      *local_18 = uVar21 & 0x3ffffff;
      *(int *)(lVar10 + 0x68) = iVar19 + 1;
    }
    puVar18 = local_18;
    lVar10 = *(long *)(param_2 + 8);
    uVar21 = param_2[0xc];
    uVar17 = param_2[1];
    uVar16 = *(undefined8 *)(lVar10 + uVar22);
    *local_18 = uVar20;
    *(undefined8 *)(local_18 + 2) = uVar16;
    *(uint **)(lVar10 + uVar22) = local_18;
    memcpy((void *)((long)local_18 + (long)(int)uVar21),param_3,(long)(int)uVar17 << 2);
    pdVar8 = (double *)((long)puVar18 + (long)(int)param_2[0xb]);
LAB_0026286c:
    local_1c = *param_2 & 0xfff;
  }
  if ((local_1c >> 3 & 0x1ff) != 0) {
    local_18 = (uint *)0x0;
    local_10 = (uint *)0x0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_18,0x2d);
    cVar7 = s_cvSetReal__support_only_single_c_00461b10[0x2c];
    uVar4 = s_cvSetReal__support_only_single_c_00461b10._40_4_;
    uVar6 = s_cvSetReal__support_only_single_c_00461b10._24_8_;
    uVar5 = s_cvSetReal__support_only_single_c_00461b10._16_8_;
    uVar3 = s_cvSetReal__support_only_single_c_00461b10._8_8_;
    uVar16 = s_cvSetReal__support_only_single_c_00461b10._0_8_;
    *(undefined8 *)(pcVar9 + 0x20) = s_cvSetReal__support_only_single_c_00461b10._32_8_;
    *(undefined4 *)(pcVar9 + 0x28) = uVar4;
    pcVar9[0x2c] = cVar7;
    *(undefined8 *)pcVar9 = uVar16;
    *(undefined8 *)(pcVar9 + 8) = uVar3;
    *(undefined8 *)(pcVar9 + 0x10) = uVar5;
    *(undefined8 *)(pcVar9 + 0x18) = uVar6;
    cv::error(-0xf,(String *)&local_18,"void cvSetRealND(CvArr*, const int*, double)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x933);
    cv::String::deallocate((String *)&local_18);
  }
  uVar20 = local_1c;
  if (pdVar8 != (double *)0x0) {
    if ((int)local_1c < 5) {
      lVar10 = lrint(param_1);
      uVar21 = (uint)lVar10;
      switch(uVar20) {
      case 0:
        if (0xff < uVar21) {
          uVar21 = -(uint)(0 < (int)uVar21);
        }
        *(char *)pdVar8 = (char)uVar21;
        break;
      case 1:
        uVar12 = (undefined1)lVar10;
        if ((0xff < uVar21 + 0x80) && (uVar12 = 0x7f, (int)uVar21 < 1)) {
          uVar12 = 0x80;
        }
        *(undefined1 *)pdVar8 = uVar12;
        break;
      case 2:
        if (0xffff < uVar21) {
          uVar21 = -(uint)(0 < (int)uVar21);
        }
        *(short *)pdVar8 = (short)uVar21;
        break;
      case 3:
        uVar11 = (undefined2)lVar10;
        if ((0xffff < uVar21 + 0x8000) && (uVar11 = 0x7fff, (int)uVar21 < 1)) {
          uVar11 = 0x8000;
        }
        *(undefined2 *)pdVar8 = uVar11;
        break;
      case 4:
        *(uint *)pdVar8 = uVar21;
      }
    }
    else if (local_1c == 5) {
      *(float *)pdVar8 = (float)param_1;
    }
    else if (local_1c == 6) {
      *pdVar8 = param_1;
    }
  }
  return;
}


==================================================================

### FUNC 00262a88 (648 bytes) name=cvClearND

void cvClearND(uint *param_1,uint *param_2)

{
  uint uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  void *__s;
  char *pcVar5;
  uint *puVar6;
  long lVar7;
  undefined8 uVar8;
  uint *puVar9;
  uint *puVar10;
  uint uVar11;
  uint *puVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  ulong uVar16;
  uint local_10 [4];
  
                    /* try { // try from 00262aa4 to 00362ab3 has its CatchHandler @ 00262b04 */
                    /* try { // try from 00262ab4 to 00362af3 has its CatchHandler @ 00262a50 */
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42440000)) {
    __s = (void *)cvPtrND(param_1,param_2,local_10,1,0);
    if (__s != (void *)0x0) {
                    /* try { // try from 00262af4 to 00362b03 has its CatchHandler @ 00262b04 */
                    /* catch() { ... } // from try @ 00262aa4 with catch @ 00262b04
                       catch() { ... } // from try @ 00262af4 with catch @ 00262b04
                       try { // try from 00262b04 to 00362b2b has its CatchHandler @ 00262a50 */
      memset(__s,0,(long)(int)((local_10[0] >> 3 & 0x1ff) + 1 <<
                              (ulong)((uint)(0xfa50L >> ((local_10[0] & 7) << 1)) & 3)));
    }
  }
  else {
    uVar11 = param_1[1];
    uVar13 = 0;
    uVar15 = 0;
    if (0 < (int)uVar11) {
      uVar15 = 0;
      iVar14 = 0;
      puVar12 = param_2;
      do {
        while (uVar13 = *puVar12, uVar13 < param_1[(long)iVar14 + 0xd]) {
          iVar14 = iVar14 + 1;
          puVar12 = puVar12 + 1;
          uVar15 = uVar13 + uVar15 * 0x5bd1e995;
          if ((int)uVar11 <= iVar14) goto LAB_00262c14;
        }
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar5 = (char *)cv::String::allocate((String *)local_10,0x1e);
        uVar4 = s_One_of_indices_is_out_of_range_004618d8._28_2_;
        uVar3 = s_One_of_indices_is_out_of_range_004618d8._24_4_;
        uVar2 = s_One_of_indices_is_out_of_range_004618d8._8_8_;
        uVar8 = s_One_of_indices_is_out_of_range_004618d8._0_8_;
        *(undefined8 *)(pcVar5 + 0x10) = s_One_of_indices_is_out_of_range_004618d8._16_8_;
        *(undefined4 *)(pcVar5 + 0x18) = uVar3;
        *(undefined2 *)(pcVar5 + 0x1c) = uVar4;
        *(undefined8 *)pcVar5 = uVar8;
        *(undefined8 *)(pcVar5 + 8) = uVar2;
        cv::error(-0xd3,(String *)local_10,
                  "void icvDeleteNode(CvSparseMat*, const int*, unsigned int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x2f7);
        iVar14 = iVar14 + 1;
        puVar12 = puVar12 + 1;
        cv::String::deallocate((String *)local_10);
        uVar11 = param_1[1];
        uVar15 = uVar13 + uVar15 * 0x5bd1e995;
      } while (iVar14 < (int)uVar11);
LAB_00262c14:
      uVar13 = uVar15 & 0x7fffffff;
    }
    uVar15 = uVar15 & param_1[10] - 1;
    uVar16 = -(ulong)(uVar15 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar15 << 3;
    puVar12 = *(uint **)(*(long *)(param_1 + 8) + uVar16);
    if (puVar12 != (uint *)0x0) {
      puVar6 = (uint *)0x0;
      do {
        if (*puVar12 == uVar13) {
          if ((int)uVar11 < 1) {
            if (uVar11 == 0) {
LAB_00262ca4:
              if (puVar6 == (uint *)0x0) {
                *(undefined8 *)(*(long *)(param_1 + 8) + uVar16) = *(undefined8 *)(puVar12 + 2);
              }
              else {
                *(undefined8 *)(puVar6 + 2) = *(undefined8 *)(puVar12 + 2);
              }
              lVar7 = *(long *)(param_1 + 6);
                    /* try { // try from 00262cb8 to 00362d3f has its CatchHandler @ 00262cb8
                       catch() { ... } // from try @ 00262cb8 with catch @ 00262cb8
                       catch() { ... } // from try @ 00262d50 with catch @ 00262cb8 */
              uVar8 = *(undefined8 *)(lVar7 + 0x60);
              *puVar12 = *puVar12 & 0x3ffffff | 0x80000000;
              *(undefined8 *)(puVar12 + 2) = uVar8;
              *(uint **)(lVar7 + 0x60) = puVar12;
              *(int *)(lVar7 + 0x68) = *(int *)(lVar7 + 0x68) + -1;
              return;
            }
          }
          else if (*param_2 == *(uint *)((long)puVar12 + (long)(int)param_1[0xc])) {
            uVar15 = 0;
            puVar9 = (uint *)((long)puVar12 + (long)(int)param_1[0xc] + 4);
            puVar10 = param_2;
            do {
              puVar10 = puVar10 + 1;
              uVar15 = uVar15 + 1;
              if (uVar15 == uVar11) goto LAB_00262ca4;
              uVar1 = *puVar9;
              puVar9 = puVar9 + 1;
            } while (*puVar10 == uVar1);
          }
        }
        puVar10 = puVar12 + 2;
        puVar6 = puVar12;
        puVar12 = *(uint **)puVar10;
      } while (*(uint **)puVar10 != (uint *)0x0);
    }
  }
  return;
}


==================================================================

### FUNC 00262d24 (2024 bytes) name=cvGetMat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint * cvGetMat(uint *param_1,uint *param_2,int *param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  char cVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  uint *puVar12;
  undefined8 *puVar13;
  char *pcVar14;
  void *__dest;
  uint uVar15;
  int iVar16;
  int *piVar17;
  uint uVar18;
  uint *puVar19;
  undefined8 uVar20;
  ulong uVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  uint uVar26;
  uint uVar27;
  uint uVar28;
  int *local_10;
  int *local_8;
  
                    /* try { // try from 00262d40 to 00362d4f has its CatchHandler @ 00262d50 */
  if ((param_1 == (uint *)0x0) || (param_2 == (uint *)0x0)) {
    local_10 = (int *)0x0;
    local_8 = (int *)0x0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x1c);
    uVar7 = s_NULL_array_pointer_is_passed_00461b40._24_4_;
    uVar4 = s_NULL_array_pointer_is_passed_00461b40._8_8_;
    uVar20 = s_NULL_array_pointer_is_passed_00461b40._0_8_;
    *(undefined8 *)(pcVar14 + 0x10) = s_NULL_array_pointer_is_passed_00461b40._16_8_;
    *(undefined4 *)(pcVar14 + 0x18) = uVar7;
    *(undefined8 *)pcVar14 = uVar20;
    *(undefined8 *)(pcVar14 + 8) = uVar4;
    cv::error(-0x1b,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x958);
    cv::String::deallocate((String *)&local_10);
    if (param_1 != (uint *)0x0) goto LAB_00262d50;
  }
  else {
LAB_00262d50:
                    /* catch() { ... } // from try @ 00262d40 with catch @ 00262d50
                       try { // try from 00262d50 to 00362d77 has its CatchHandler @ 00262cb8 */
    uVar1 = *param_1;
    if ((uVar1 & 0xffff0000) == 0x42420000) {
      if ((0 < (int)param_1[9]) && (0 < (int)param_1[8])) {
        local_10 = *(int **)(param_1 + 6);
        iVar16 = 0;
        if (local_10 == (int *)0x0) {
          local_8 = local_10;
          pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x20);
          uVar5 = s_The_matrix_has_NULL_data_pointer_00461b60._24_8_;
          uVar4 = s_The_matrix_has_NULL_data_pointer_00461b60._16_8_;
          uVar20 = s_The_matrix_has_NULL_data_pointer_00461b60._8_8_;
          *(undefined8 *)pcVar14 = s_The_matrix_has_NULL_data_pointer_00461b60._0_8_;
          *(undefined8 *)(pcVar14 + 8) = uVar20;
          *(undefined8 *)(pcVar14 + 0x10) = uVar4;
          *(undefined8 *)(pcVar14 + 0x18) = uVar5;
          cv::error(-0x1b,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x95d);
          cv::String::deallocate((String *)&local_10);
        }
        goto LAB_00262f58;
      }
    }
    else if (uVar1 == 0x90) {
                    /* try { // try from 00262e28 to 00362e2f has its CatchHandler @ 00263374 */
      piVar17 = *(int **)(param_1 + 0x16);
      if (piVar17 == (int *)0x0) {
        local_10 = piVar17;
        local_8 = piVar17;
        pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x1f);
        cVar9 = s_The_image_has_NULL_data_pointer_00461b88[0x1e];
        uVar8 = s_The_image_has_NULL_data_pointer_00461b88._28_2_;
        uVar7 = s_The_image_has_NULL_data_pointer_00461b88._24_4_;
        uVar4 = s_The_image_has_NULL_data_pointer_00461b88._8_8_;
        uVar20 = s_The_image_has_NULL_data_pointer_00461b88._0_8_;
        *(undefined8 *)(pcVar14 + 0x10) = s_The_image_has_NULL_data_pointer_00461b88._16_8_;
        *(undefined4 *)(pcVar14 + 0x18) = uVar7;
        *(undefined2 *)(pcVar14 + 0x1c) = uVar8;
        pcVar14[0x1e] = cVar9;
        *(undefined8 *)pcVar14 = uVar20;
        *(undefined8 *)(pcVar14 + 8) = uVar4;
        cv::error(-0x1b,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x967);
        cv::String::deallocate((String *)&local_10);
      }
                    /* try { // try from 00262e38 to 00362e3f has its CatchHandler @ 0026336c */
      uVar1 = param_1[2];
                    /* try { // try from 00262e40 to 00362f07 has its CatchHandler @ 00262dbc */
      iVar16 = 0x14;
      if (-1 < (int)param_1[4]) {
        iVar16 = 0;
      }
      uVar2 = 0x43160520 >> (iVar16 + ((param_1[4] & 0xf0) >> 2) & 0x1f);
      piVar17 = *(int **)(param_1 + 0xc);
      if ((int)uVar1 < 2) {
        if (piVar17 == (int *)0x0) {
          iVar22 = (uVar2 & 7) + (uVar1 - 1) * 8;
          goto LAB_0026345c;
        }
        iVar16 = *piVar17;
        uVar21 = (ulong)((uVar2 & 7) + (uVar1 - 1) * 8);
      }
      else {
        if (piVar17 == (int *)0x0) {
          iVar22 = (uVar2 & 7) + (uVar1 - 1) * 8;
          if (param_1[7] != 0) {
            local_10 = piVar17;
            local_8 = piVar17;
            pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x28);
            uVar6 = s_Pixel_order_should_be_used_with_c_00461c28._24_8_;
            uVar5 = s_Pixel_order_should_be_used_with_c_00461c28._16_8_;
            uVar4 = s_Pixel_order_should_be_used_with_c_00461c28._8_8_;
            uVar20 = s_Pixel_order_should_be_used_with_c_00461c28._0_8_;
            *(undefined8 *)(pcVar14 + 0x20) = s_Pixel_order_should_be_used_with_c_00461c28._32_8_;
            *(undefined8 *)pcVar14 = uVar20;
            *(undefined8 *)(pcVar14 + 8) = uVar4;
            *(undefined8 *)(pcVar14 + 0x10) = uVar5;
            *(undefined8 *)(pcVar14 + 0x18) = uVar6;
            cv::error(-0xce,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x995);
            cv::String::deallocate((String *)&local_10);
          }
LAB_0026345c:
          iVar16 = 0;
          cvInitMatHeader(param_2,param_1[0xb],param_1[10],iVar22,*(undefined8 *)(param_1 + 0x16),
                          param_1[0x18]);
          param_1 = param_2;
          goto LAB_00262f58;
        }
        if (param_1[7] == 1) {
          iVar22 = *piVar17;
          if (iVar22 == 0) {
            local_10 = (int *)0x0;
            local_8 = (int *)0x0;
            __dest = (void *)cv::String::allocate((String *)&local_10,0x3f);
            memcpy(__dest,&DAT_00461ba8,0x3f);
            cv::error(-0xce,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x977);
            cv::String::deallocate((String *)&local_10);
            piVar17 = *(int **)(param_1 + 0xc);
            iVar22 = *piVar17;
          }
                    /* try { // try from 00263348 to 0036334f has its CatchHandler @ 0026339c */
                    /* catch() { ... } // from try @ 00262e38 with catch @ 0026336c */
          iVar16 = 0;
                    /* catch() { ... } // from try @ 00262e28 with catch @ 00263374 */
          cvInitMatHeader(param_2,piVar17[4],piVar17[3],uVar2 & 0xf,
                          *(long *)(param_1 + 0x16) +
                          (long)(int)(param_1[0x18] * piVar17[2]) +
                          (long)(int)(((uVar2 >> 3 & 1) + 1 <<
                                      (ulong)((uint)(0xfa50L >> ((uVar2 & 7) << 1)) & 3)) *
                                     piVar17[1]) + (long)(int)((iVar22 + -1) * param_1[0x14]));
          param_1 = param_2;
          goto LAB_00262f58;
        }
        iVar16 = *piVar17;
        uVar21 = (ulong)((uVar2 & 7) + (uVar1 - 1) * 8);
        if (0x200 < (int)uVar1) {
          local_10 = (int *)0x0;
          local_8 = (int *)0x0;
          pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x38);
          uVar11 = s_The_image_is_interleaved_and_has_00461be8._40_8_;
          uVar10 = s_The_image_is_interleaved_and_has_00461be8._32_8_;
          uVar6 = s_The_image_is_interleaved_and_has_00461be8._24_8_;
          uVar5 = s_The_image_is_interleaved_and_has_00461be8._16_8_;
          uVar4 = s_The_image_is_interleaved_and_has_00461be8._8_8_;
          uVar20 = s_The_image_is_interleaved_and_has_00461be8._0_8_;
          *(undefined8 *)(pcVar14 + 0x30) = s_The_image_is_interleaved_and_has_00461be8._48_8_;
          *(undefined8 *)pcVar14 = uVar20;
          *(undefined8 *)(pcVar14 + 8) = uVar4;
          *(undefined8 *)(pcVar14 + 0x10) = uVar5;
          *(undefined8 *)(pcVar14 + 0x18) = uVar6;
          *(undefined8 *)(pcVar14 + 0x20) = uVar10;
          *(undefined8 *)(pcVar14 + 0x28) = uVar11;
          cv::error(-0xf,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x987);
          cv::String::deallocate((String *)&local_10);
          piVar17 = *(int **)(param_1 + 0xc);
        }
      }
                    /* try { // try from 00262f08 to 00362f0f has its CatchHandler @ 0026339c */
                    /* try { // try from 00262f10 to 00363347 has its CatchHandler @ 00262dbc */
      cvInitMatHeader(param_2,piVar17[4],piVar17[3],uVar21,
                      *(long *)(param_1 + 0x16) +
                      (long)(int)(param_1[0x18] * piVar17[2]) +
                      (long)(int)((((uint)(uVar21 >> 3) & 0x1ff) + 1 <<
                                  (ulong)((uint)(0xfa50L >> (((uint)uVar21 & 7) << 1)) & 3)) *
                                 piVar17[1]),param_1[0x18]);
      param_1 = param_2;
      goto LAB_00262f58;
    }
    if ((param_4 != 0) && ((uVar1 & 0xffff0000) == 0x42430000)) {
      local_10 = *(int **)(param_1 + 6);
      uVar2 = param_1[8];
      if (local_10 == (int *)0x0) {
                    /* catch() { ... } // from try @ 00262e1c with catch @ 0026337c */
        local_8 = local_10;
                    /* catch() { ... } // from try @ 00262e10 with catch @ 0026338c */
        pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x21);
        uVar6 = s_Input_array_has_NULL_data_pointe_00461c58._24_8_;
        uVar5 = s_Input_array_has_NULL_data_pointe_00461c58._16_8_;
        uVar4 = s_Input_array_has_NULL_data_pointe_00461c58._8_8_;
        uVar20 = s_Input_array_has_NULL_data_pointe_00461c58._0_8_;
                    /* catch() { ... } // from try @ 00262e00 with catch @ 00263394 */
                    /* catch() { ... } // from try @ 00262f08 with catch @ 0026339c
                       catch() { ... } // from try @ 00263348 with catch @ 0026339c */
        pcVar14[0x20] = s_Input_array_has_NULL_data_pointe_00461c58[0x20];
        *(undefined8 *)pcVar14 = uVar20;
        *(undefined8 *)(pcVar14 + 8) = uVar4;
        *(undefined8 *)(pcVar14 + 0x10) = uVar5;
        *(undefined8 *)(pcVar14 + 0x18) = uVar6;
                    /* try { // try from 002633d4 to 003633db has its CatchHandler @ 002633e4 */
        cv::error(-0x1b,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9a3);
                    /* try { // try from 002633dc to 003633e7 has its CatchHandler @ 00262dbc */
        cv::String::deallocate((String *)&local_10);
        uVar1 = *param_1;
                    /* catch() { ... } // from try @ 002633d4 with catch @ 002633e4 */
      }
      if ((uVar1 >> 0xe & 1) == 0) {
        local_10 = (int *)0x0;
        local_8 = (int *)0x0;
        pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x2c);
        uVar7 = s_Only_continuous_nD_arrays_are_su_00461a98._40_4_;
        uVar6 = s_Only_continuous_nD_arrays_are_su_00461a98._24_8_;
        uVar5 = s_Only_continuous_nD_arrays_are_su_00461a98._16_8_;
        uVar4 = s_Only_continuous_nD_arrays_are_su_00461a98._8_8_;
        uVar20 = s_Only_continuous_nD_arrays_are_su_00461a98._0_8_;
        *(undefined8 *)(pcVar14 + 0x20) = s_Only_continuous_nD_arrays_are_su_00461a98._32_8_;
        *(undefined4 *)(pcVar14 + 0x28) = uVar7;
        *(undefined8 *)pcVar14 = uVar20;
        *(undefined8 *)(pcVar14 + 8) = uVar4;
        *(undefined8 *)(pcVar14 + 0x10) = uVar5;
        *(undefined8 *)(pcVar14 + 0x18) = uVar6;
        cv::error(-5,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9a6);
        cv::String::deallocate((String *)&local_10);
        uVar1 = *param_1;
      }
      uVar3 = param_1[1];
      if ((int)uVar3 < 3) {
        if (uVar3 == 1) {
          uVar15 = 1;
        }
        else {
          uVar15 = param_1[10];
        }
      }
      else {
        uVar15 = (uVar3 - 6 >> 2) + 1;
        iVar16 = uVar15 * 4;
        if (uVar3 - 2 < 7) {
          uVar15 = param_1[10];
          iVar22 = 2;
LAB_00263178:
          uVar15 = uVar15 * param_1[(long)iVar22 * 2 + 8];
          if (iVar22 + 1 < (int)uVar3) {
            uVar15 = uVar15 * param_1[(long)(iVar22 + 1) * 2 + 8];
            if (iVar22 + 2 < (int)uVar3) {
              uVar15 = uVar15 * param_1[(long)(iVar22 + 2) * 2 + 8];
              if (iVar22 + 3 < (int)uVar3) {
                uVar15 = uVar15 * param_1[(long)(iVar22 + 3) * 2 + 8];
                if (iVar22 + 4 < (int)uVar3) {
                  uVar15 = uVar15 * param_1[(long)(iVar22 + 4) * 2 + 8];
                  if (iVar22 + 5 < (int)uVar3) {
                    uVar15 = uVar15 * param_1[(long)(iVar22 + 5) * 2 + 8];
                  }
                }
              }
            }
          }
        }
        else {
          iVar22 = 1;
          iVar23 = 1;
          iVar24 = 1;
          iVar25 = 1;
                    /* try { // try from 00262dbc to 00362dff has its CatchHandler @ 00262dbc
                       catch() { ... } // from try @ 00262dbc with catch @ 00262dbc
                       catch() { ... } // from try @ 00262e40 with catch @ 00262dbc
                       catch() { ... } // from try @ 00262f10 with catch @ 00262dbc
                       catch() { ... } // from try @ 002633dc with catch @ 00262dbc */
          puVar19 = param_1 + 10;
          uVar18 = 0;
          do {
            uVar26 = *puVar19;
            uVar27 = puVar19[2];
            puVar12 = puVar19 + 4;
            uVar28 = puVar19[6];
            puVar19 = puVar19 + 8;
            uVar18 = uVar18 + 1;
            iVar22 = iVar22 * uVar26;
            iVar23 = iVar23 * (int)(CONCAT17((char)(uVar27 >> 0x18),
                                             CONCAT16((char)(uVar27 >> 0x10),
                                                      CONCAT15((char)(uVar27 >> 8),
                                                               CONCAT14((char)uVar27,uVar26)))) >>
                                   0x20);
            iVar24 = iVar24 * *puVar12;
            iVar25 = iVar25 * (int)(CONCAT17((char)(uVar28 >> 0x18),
                                             CONCAT16((char)(uVar28 >> 0x10),
                                                      CONCAT15((char)(uVar28 >> 8),
                                                               CONCAT14((char)uVar28,*puVar12)))) >>
                                   0x20);
          } while (uVar18 < uVar15);
                    /* try { // try from 00262e00 to 00362e07 has its CatchHandler @ 00263394 */
          uVar15 = iVar25 * iVar24 * iVar23 * iVar22;
          if (uVar3 - 1 != iVar16) {
            iVar22 = iVar16 + 2;
                    /* try { // try from 00262e10 to 00362e13 has its CatchHandler @ 0026338c */
                    /* try { // try from 00262e1c to 00362e1f has its CatchHandler @ 0026337c */
            uVar15 = uVar15 * param_1[(long)(iVar16 + 1) * 2 + 8];
            if (iVar22 < (int)uVar3) goto LAB_00263178;
          }
        }
      }
      param_2[2] = 0;
      param_2[3] = 0;
      param_2[4] = 0;
      uVar20 = *(undefined8 *)(param_1 + 6);
      param_2[9] = uVar15;
      uVar15 = ((uVar1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3)) *
               uVar15;
      *(undefined8 *)(param_2 + 6) = uVar20;
      param_2[8] = uVar2;
      *param_2 = uVar1 & 0xfff | 0x42424000;
      param_2[1] = uVar15;
      if ((int)uVar2 < 2) {
        param_2[1] = 0;
        iVar16 = 0;
        param_1 = param_2;
      }
      else if ((long)(int)uVar15 * (long)(int)uVar2 < 0x80000000) {
        iVar16 = 0;
        param_1 = param_2;
      }
      else {
        iVar16 = 0;
        *param_2 = uVar1 & 0xfff | 0x42420000;
        param_1 = param_2;
      }
      goto LAB_00262f58;
    }
  }
  local_10 = (int *)0x0;
  local_8 = (int *)0x0;
  puVar13 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
  uVar8 = DAT_00461ca4;
  uVar6 = DAT_00461c98;
  uVar5 = DAT_00461c90;
  uVar4 = DAT_00461c88;
  uVar20 = _DAT_00461c80;
  *(undefined4 *)(puVar13 + 4) = DAT_00461ca0;
  *(undefined2 *)((long)puVar13 + 0x24) = uVar8;
  *puVar13 = uVar20;
  puVar13[1] = uVar4;
  puVar13[2] = uVar5;
  puVar13[3] = uVar6;
  cv::error(-0xce,(String *)&local_10,"CvMat* cvGetMat(const CvArr*, CvMat*, int*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9be);
  iVar16 = 0;
  cv::String::deallocate((String *)&local_10);
  param_1 = (uint *)0x0;
LAB_00262f58:
  if (param_3 != (int *)0x0) {
    *param_3 = iVar16;
  }
  return param_1;
}


==================================================================

### FUNC 002635c0 (524 bytes) name=cvGetSubRect

uint * cvGetSubRect(uint *param_1,uint *param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint *local_38;
  uint *local_30;
  undefined1 auStack_28 [40];
  
  if ((((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42420000)) ||
      ((int)param_1[9] < 1)) || (((int)param_1[8] < 1 || (*(long *)(param_1 + 6) == 0)))) {
    param_1 = (uint *)cvGetMat(param_1,auStack_28,0,0);
  }
  if (param_2 == (uint *)0x0) {
    local_38 = param_2;
    local_30 = param_2;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0x1b,(String *)&local_38,"CvMat* cvGetSubRect(const CvArr*, CvMat*, CvRect)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4f1);
    cv::String::deallocate((String *)&local_38);
  }
  uVar8 = (uint)((ulong)param_3 >> 0x20);
  uVar9 = (uint)param_3;
  uVar6 = (uint)param_4;
  uVar7 = (uint)((ulong)param_4 >> 0x20);
  if ((int)(uVar8 | uVar9 | uVar6 | uVar7) < 0) {
    local_38 = (uint *)0x0;
    local_30 = (uint *)0x0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xc9,(String *)&local_38,"CvMat* cvGetSubRect(const CvArr*, CvMat*, CvRect)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4f4);
    cv::String::deallocate((String *)&local_38);
  }
  uVar4 = param_1[9];
  if (((int)uVar4 < (int)(uVar6 + uVar9)) || ((int)param_1[8] < (int)(uVar8 + uVar7))) {
    local_38 = (uint *)0x0;
    local_30 = (uint *)0x0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xc9,(String *)&local_38,"CvMat* cvGetSubRect(const CvArr*, CvMat*, CvRect)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x4f8);
    cv::String::deallocate((String *)&local_38);
    uVar4 = param_1[9];
  }
  uVar1 = *param_1;
  uVar2 = param_1[1];
  uVar3 = 0xffffbfff;
  if ((int)uVar4 <= (int)uVar6) {
    uVar3 = 0xffffffff;
  }
  lVar5 = *(long *)(param_1 + 6);
  uVar4 = 0x4000;
  if (1 < (int)uVar7) {
    uVar4 = 0;
  }
  param_2[1] = uVar2;
  param_2[8] = uVar7;
  param_2[9] = uVar6;
  *param_2 = uVar4 | uVar3 & uVar1;
  param_2[2] = 0;
  param_2[3] = 0;
  *(long *)(param_2 + 6) =
       lVar5 + (long)(int)uVar2 * (long)(int)uVar8 +
               (long)(int)(((uVar1 >> 3 & 0x1ff) + 1 <<
                           (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3)) * uVar9);
  return param_2;
}


==================================================================

### FUNC 00263808 (468 bytes) name=cvGetRows

uint * cvGetRows(uint *param_1,uint *param_2,uint param_3,uint param_4,int param_5)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  uint *local_38;
  uint *local_30;
  undefined1 auStack_28 [40];
  
  if ((((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42420000)) ||
      ((int)param_1[9] < 1)) || (((int)param_1[8] < 1 || (*(long *)(param_1 + 6) == 0)))) {
    param_1 = (uint *)cvGetMat(param_1,auStack_28,0,0);
  }
  if (param_2 == (uint *)0x0) {
    local_38 = param_2;
    local_30 = param_2;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0x1b,(String *)&local_38,"CvMat* cvGetRows(const CvArr*, CvMat*, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x51e);
    cv::String::deallocate((String *)&local_38);
  }
  if (((param_1[8] <= param_3) || (param_1[8] < param_4)) || (param_5 < 1)) {
    local_38 = (uint *)0x0;
    local_30 = (uint *)0x0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xd3,(String *)&local_38,"CvMat* cvGetRows(const CvArr*, CvMat*, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x522);
    cv::String::deallocate((String *)&local_38);
  }
  param_4 = param_4 - param_3;
  uVar3 = param_1[1];
  if (param_5 != 1) {
    iVar1 = param_4 + param_5;
    uVar3 = param_5 * uVar3;
    param_4 = 0;
    if (param_5 != 0) {
      param_4 = (iVar1 + -1) / param_5;
    }
  }
  param_2[1] = uVar3;
  param_2[8] = param_4;
  param_2[9] = param_1[9];
  if ((int)param_4 < 2) {
    param_2[1] = 0;
    uVar3 = 0;
    if (param_4 == 1) {
      uVar3 = 0x4000;
    }
    uVar2 = 0xffffffff;
    *(long *)(param_2 + 6) = *(long *)(param_1 + 6) + (long)(int)param_3 * (long)(int)param_1[1];
    uVar3 = uVar3 | *param_1;
  }
  else {
    uVar2 = 0xffffbfff;
    if (param_5 == 1) {
      uVar2 = 0xffffffff;
    }
    *(long *)(param_2 + 6) = *(long *)(param_1 + 6) + (long)(int)param_3 * (long)(int)param_1[1];
    uVar3 = *param_1;
  }
  param_2[2] = 0;
  param_2[3] = 0;
  param_2[4] = 0;
  *param_2 = uVar3 & uVar2;
  return param_2;
}


==================================================================

### FUNC 00263a04 (420 bytes) name=cvGetCols

uint * cvGetCols(uint *param_1,uint *param_2,uint param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint *local_38;
  uint *local_30;
  undefined1 auStack_28 [40];
  
  if ((((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42420000)) ||
      ((int)param_1[9] < 1)) || (((int)param_1[8] < 1 || (*(long *)(param_1 + 6) == 0)))) {
    param_1 = (uint *)cvGetMat(param_1,auStack_28,0,0);
  }
  if (param_2 == (uint *)0x0) {
    local_38 = param_2;
    local_30 = param_2;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0x1b,(String *)&local_38,"CvMat* cvGetCols(const CvArr*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x552);
    cv::String::deallocate((String *)&local_38);
  }
  uVar3 = param_1[9];
  if ((uVar3 <= param_3) || (uVar3 < param_4)) {
    local_38 = (uint *)0x0;
    local_30 = (uint *)0x0;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0xd3,(String *)&local_38,"CvMat* cvGetCols(const CvArr*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x557);
    cv::String::deallocate((String *)&local_38);
  }
  uVar1 = param_1[8];
  param_2[8] = uVar1;
  param_2[9] = param_4 - param_3;
  uVar2 = *param_1;
  param_2[1] = param_1[1];
  *(long *)(param_2 + 6) =
       *(long *)(param_1 + 6) +
       (long)(int)((uVar2 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar2 & 7) << 1)) & 3)) *
       (long)(int)param_3;
  if (((int)uVar3 <= (int)(param_4 - param_3)) || (uVar3 = 0xffffbfff, (int)uVar1 < 2)) {
    uVar3 = 0xffffffff;
  }
  param_2[2] = 0;
  param_2[3] = 0;
  param_2[4] = 0;
  *param_2 = uVar3 & uVar2;
  return param_2;
}


==================================================================

### FUNC 00263bd0 (580 bytes) name=cvGetDiag

uint * cvGetDiag(uint *param_1,uint *param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint *local_38;
  uint *local_30;
  undefined1 auStack_28 [40];
  
  if ((((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42420000)) ||
      ((int)param_1[9] < 1)) || (((int)param_1[8] < 1 || (*(long *)(param_1 + 6) == 0)))) {
    param_1 = (uint *)cvGetMat(param_1,auStack_28,0,0);
  }
  if (param_2 == (uint *)0x0) {
    local_38 = param_2;
    local_30 = param_2;
    cv::String::allocate((String *)&local_38,0);
    cv::error(-0x1b,(String *)&local_38,"CvMat* cvGetDiag(const CvArr*, CvMat*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x57c);
    cv::String::deallocate((String *)&local_38);
  }
  uVar2 = *param_1;
  iVar1 = (uVar2 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar2 & 7) << 1)) & 3);
  if (param_3 < 0) {
    uVar4 = param_3 + param_1[8];
    if ((int)uVar4 < 1) {
      local_38 = (uint *)0x0;
      local_30 = (uint *)0x0;
      cv::String::allocate((String *)&local_38,0);
      cv::error(-0xd3,(String *)&local_38,"CvMat* cvGetDiag(const CvArr*, CvMat*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x598);
      cv::String::deallocate((String *)&local_38);
      uVar2 = *param_1;
    }
    uVar3 = param_1[1];
    uVar4 = -(uint)((int)param_1[9] <= (int)uVar4) & (uVar4 ^ param_1[9]) ^ uVar4;
    *(long *)(param_2 + 6) = *(long *)(param_1 + 6) - (long)(int)(uVar3 * param_3);
  }
  else {
    uVar4 = param_1[9] - param_3;
    if ((int)uVar4 < 1) {
      local_38 = (uint *)0x0;
      local_30 = (uint *)0x0;
      cv::String::allocate((String *)&local_38,0);
      cv::error(-0xd3,(String *)&local_38,"CvMat* cvGetDiag(const CvArr*, CvMat*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x58e);
      cv::String::deallocate((String *)&local_38);
      uVar2 = *param_1;
    }
    uVar3 = param_1[8];
    *(long *)(param_2 + 6) = *(long *)(param_1 + 6) + (long)(param_3 * iVar1);
    uVar4 = -(uint)((int)uVar3 <= (int)uVar4) & (uVar4 ^ uVar3) ^ uVar4;
    uVar3 = param_1[1];
  }
  param_2[8] = uVar4;
  param_2[9] = 1;
  if ((int)uVar4 < 2) {
    param_2[1] = uVar3;
    *param_2 = uVar2 | 0x4000;
  }
  else {
    param_2[1] = iVar1 + uVar3;
    *param_2 = uVar2 & 0xffffbfff;
  }
  param_2[2] = 0;
  param_2[3] = 0;
  param_2[4] = 0;
  return param_2;
}


==================================================================

### FUNC 00263e50 (3152 bytes) name=cvInitNArrayIterator

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvInitNArrayIterator
               (uint param_1,long param_2,uint *param_3,uint *param_4,uint *param_5,uint param_6)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  undefined1 uVar8;
  char cVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  code *pcVar12;
  uint uVar13;
  undefined8 *puVar14;
  char *pcVar15;
  uint *puVar16;
  uint *puVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  uint *puVar21;
  uint uVar22;
  uint *puVar23;
  long lVar24;
  int iVar25;
  uint uVar26;
  uint uVar27;
  uint uVar28;
  int local_3c;
  long local_38;
  long local_30;
  uint *local_28;
  uint *local_20;
  
  if (9 < param_1 - 1) {
    local_28 = (uint *)0x0;
    local_20 = (uint *)0x0;
    puVar14 = (undefined8 *)cv::String::allocate((String *)&local_28,0x1a);
    uVar7 = _LAB_00461cc0;
    uVar3 = DAT_00461cb0;
    uVar2 = DAT_00461ca8;
    puVar14[2] = DAT_00461cb8;
    *(undefined2 *)(puVar14 + 3) = uVar7;
    *puVar14 = uVar2;
    puVar14[1] = uVar3;
    cv::error(-0xd3,(String *)&local_28,
              "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x189);
    cv::String::deallocate((String *)&local_28);
  }
  if ((param_2 == 0) || (param_4 == (uint *)0x0)) {
    local_28 = (uint *)0x0;
    local_20 = (uint *)0x0;
    puVar14 = (undefined8 *)cv::String::allocate((String *)&local_28,0x27);
    uVar8 = DAT_00461cee;
    uVar7 = DAT_00461cec;
    uVar6 = DAT_00461ce0;
    uVar5 = _DAT_00461cd8;
    uVar3 = DAT_00461cd0;
    uVar2 = DAT_00461cc8;
    *(undefined4 *)(puVar14 + 4) = DAT_00461ce8;
    *(undefined2 *)((long)puVar14 + 0x24) = uVar7;
    *(undefined1 *)((long)puVar14 + 0x26) = uVar8;
    *puVar14 = uVar2;
    puVar14[1] = uVar3;
    puVar14[2] = uVar5;
    puVar14[3] = uVar6;
    cv::error(-0x1b,(String *)&local_28,
              "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x18c);
    cv::String::deallocate((String *)&local_28);
  }
  if (param_5 == (uint *)0x0) {
    local_28 = param_5;
    local_20 = param_5;
    pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x18);
    uVar3 = s_Iterator_pointer_is_NULL_00461cf0._8_8_;
    uVar2 = s_Iterator_pointer_is_NULL_00461cf0._0_8_;
    *(undefined8 *)(pcVar15 + 0x10) = s_Iterator_pointer_is_NULL_00461cf0._16_8_;
    *(undefined8 *)pcVar15 = uVar2;
    *(undefined8 *)(pcVar15 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_28,
              "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",399);
    cv::String::deallocate((String *)&local_28);
  }
  if ((int)param_1 < 0) {
                    /* WARNING: Does not return */
    pcVar12 = (code *)SoftwareBreakpoint(1000,0x264a1c);
    (*pcVar12)();
  }
  lVar24 = 0;
  uVar22 = 0xffffffff;
  puVar23 = (uint *)0x0;
  puVar17 = param_5 + 0x38;
  do {
    iVar25 = (int)lVar24;
    puVar16 = param_3;
    if (iVar25 < (int)param_1) {
      puVar16 = *(uint **)(param_2 + lVar24 * 8);
    }
    if (puVar16 == (uint *)0x0) {
      if (iVar25 < (int)param_1) {
        local_28 = puVar16;
        local_20 = puVar16;
        puVar14 = (undefined8 *)cv::String::allocate((String *)&local_28,0x27);
        uVar8 = DAT_00461cee;
        uVar7 = DAT_00461cec;
        uVar6 = DAT_00461ce0;
        uVar5 = _DAT_00461cd8;
        uVar3 = DAT_00461cd0;
        uVar2 = DAT_00461cc8;
        *(undefined4 *)(puVar14 + 4) = DAT_00461ce8;
        *(undefined2 *)((long)puVar14 + 0x24) = uVar7;
        *(undefined1 *)((long)puVar14 + 0x26) = uVar8;
        *puVar14 = uVar2;
        puVar14[1] = uVar3;
        puVar14[2] = uVar5;
        puVar14[3] = uVar6;
        cv::error(-0x1b,(String *)&local_28,
                  "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x199);
        cv::String::deallocate((String *)&local_28);
      }
      break;
    }
    uVar13 = *puVar16;
    uVar26 = uVar13 & 0xffff0000;
    if (uVar26 == 0x42430000) {
      if (*(long *)(puVar16 + 6) == 0) {
        local_3c = 0;
        if (param_4 == (uint *)0x0) goto LAB_002646ec;
LAB_002644d0:
        local_28 = (uint *)0x0;
        local_20 = (uint *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x20);
        uVar5 = s_The_matrix_has_NULL_data_pointer_00461b60._24_8_;
        uVar3 = s_The_matrix_has_NULL_data_pointer_00461b60._16_8_;
        uVar2 = s_The_matrix_has_NULL_data_pointer_00461b60._8_8_;
        *(undefined8 *)pcVar15 = s_The_matrix_has_NULL_data_pointer_00461b60._0_8_;
        *(undefined8 *)(pcVar15 + 8) = uVar2;
        *(undefined8 *)(pcVar15 + 0x10) = uVar3;
        *(undefined8 *)(pcVar15 + 0x18) = uVar5;
        cv::error(-0x1b,(String *)&local_28,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x154);
        cv::String::deallocate((String *)&local_28);
        goto joined_r0x00264530;
      }
    }
    else {
      local_3c = 0;
      puVar21 = param_4;
      if (param_4 == (uint *)0x0) {
LAB_002646ec:
        local_3c = 0;
        local_28 = (uint *)0x0;
        local_20 = (uint *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x1c);
        uVar4 = s_NULL_array_pointer_is_passed_00461b40._24_4_;
        uVar3 = s_NULL_array_pointer_is_passed_00461b40._8_8_;
        uVar2 = s_NULL_array_pointer_is_passed_00461b40._0_8_;
        *(undefined8 *)(pcVar15 + 0x10) = s_NULL_array_pointer_is_passed_00461b40._16_8_;
        *(undefined4 *)(pcVar15 + 0x18) = uVar4;
        *(undefined8 *)pcVar15 = uVar2;
        *(undefined8 *)(pcVar15 + 8) = uVar3;
        cv::error(-0x1b,(String *)&local_28,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x14f);
        puVar21 = (uint *)0x0;
        cv::String::deallocate((String *)&local_28);
        uVar13 = *puVar16;
        uVar26 = uVar13 & 0xffff0000;
        if (uVar26 == 0x42430000) {
          if (*(long *)(puVar16 + 6) == 0) goto LAB_002644d0;
          goto joined_r0x00264530;
        }
      }
      if (uVar13 == 0x90) {
        puVar16 = (uint *)cvGetMat(puVar16,&local_28,&local_3c,0);
        if ((puVar16 != (uint *)0x0) && ((*puVar16 & 0xffff0000) == 0x42420000)) goto LAB_002647a4;
LAB_00263f50:
        local_38 = 0;
        local_30 = 0;
        puVar14 = (undefined8 *)cv::String::allocate((String *)&local_38,0x26);
        uVar7 = DAT_00461ca4;
        uVar6 = DAT_00461c98;
        uVar5 = DAT_00461c90;
        uVar3 = DAT_00461c88;
        uVar2 = _DAT_00461c80;
        *(undefined4 *)(puVar14 + 4) = DAT_00461ca0;
        *(undefined2 *)((long)puVar14 + 0x24) = uVar7;
        *puVar14 = uVar2;
        puVar14[1] = uVar3;
        puVar14[2] = uVar5;
        puVar14[3] = uVar6;
        cv::error(-5,(String *)&local_38,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x160);
        cv::String::deallocate((String *)&local_38);
        lVar18 = *(long *)(puVar16 + 6);
      }
      else {
        if (uVar26 != 0x42420000) goto LAB_00263f50;
LAB_002647a4:
        if (((int)puVar16[9] < 1) || ((int)puVar16[8] < 1)) goto LAB_00263f50;
        lVar18 = *(long *)(puVar16 + 6);
      }
      if (lVar18 == 0) {
        local_38 = lVar18;
        local_30 = lVar18;
        pcVar15 = (char *)cv::String::allocate((String *)&local_38,0x21);
        uVar6 = s_Input_array_has_NULL_data_pointe_00461c58._24_8_;
        uVar5 = s_Input_array_has_NULL_data_pointe_00461c58._16_8_;
        uVar3 = s_Input_array_has_NULL_data_pointe_00461c58._8_8_;
        uVar2 = s_Input_array_has_NULL_data_pointe_00461c58._0_8_;
        pcVar15[0x20] = s_Input_array_has_NULL_data_pointe_00461c58[0x20];
        *(undefined8 *)pcVar15 = uVar2;
        *(undefined8 *)(pcVar15 + 8) = uVar3;
        *(undefined8 *)(pcVar15 + 0x10) = uVar5;
        *(undefined8 *)(pcVar15 + 0x18) = uVar6;
        cv::error(-0x1b,(String *)&local_38,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x163);
        cv::String::deallocate((String *)&local_38);
        lVar18 = *(long *)(puVar16 + 6);
      }
      puVar21[4] = 0;
      *(long *)(puVar21 + 6) = lVar18;
      uVar26 = *puVar16;
      *puVar21 = uVar26;
      puVar21[1] = 2;
      puVar21[2] = 0;
      puVar21[3] = 0;
      puVar21[8] = puVar16[8];
      puVar21[9] = puVar16[1];
      puVar21[10] = puVar16[9];
      puVar21[0xb] = (uVar26 >> 3 & 0x1ff) + 1 <<
                     (ulong)((uint)(0xfa50L >> ((uVar26 & 7) << 1)) & 3);
      puVar16 = puVar21;
joined_r0x00264530:
      if (local_3c != 0) {
        local_28 = (uint *)0x0;
        local_20 = (uint *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x1b);
        cVar9 = s_COI_set_is_not_allowed_here_00461d10[0x1a];
        uVar7 = s_COI_set_is_not_allowed_here_00461d10._24_2_;
        uVar3 = s_COI_set_is_not_allowed_here_00461d10._8_8_;
        uVar2 = s_COI_set_is_not_allowed_here_00461d10._0_8_;
        *(undefined8 *)(pcVar15 + 0x10) = s_COI_set_is_not_allowed_here_00461d10._16_8_;
        *(undefined2 *)(pcVar15 + 0x18) = uVar7;
        pcVar15[0x1a] = cVar9;
        *(undefined8 *)pcVar15 = uVar2;
        *(undefined8 *)(pcVar15 + 8) = uVar3;
        cv::error(-0x18,(String *)&local_28,
                  "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1a4);
        cv::String::deallocate((String *)&local_28);
      }
    }
    *(uint **)puVar17 = puVar16;
    uVar26 = puVar16[1];
    puVar21 = puVar16;
    if (iVar25 != 0) {
      if (uVar26 != puVar23[1]) {
        local_28 = (uint *)0x0;
        local_20 = (uint *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x2f);
        cVar9 = s_Number_of_dimensions_is_the_same_00461d30[0x2e];
        uVar7 = s_Number_of_dimensions_is_the_same_00461d30._44_2_;
        uVar4 = s_Number_of_dimensions_is_the_same_00461d30._40_4_;
        uVar6 = s_Number_of_dimensions_is_the_same_00461d30._24_8_;
        uVar5 = s_Number_of_dimensions_is_the_same_00461d30._16_8_;
        uVar3 = s_Number_of_dimensions_is_the_same_00461d30._8_8_;
        uVar2 = s_Number_of_dimensions_is_the_same_00461d30._0_8_;
        *(undefined8 *)(pcVar15 + 0x20) = s_Number_of_dimensions_is_the_same_00461d30._32_8_;
        *(undefined4 *)(pcVar15 + 0x28) = uVar4;
        *(undefined2 *)(pcVar15 + 0x2c) = uVar7;
        pcVar15[0x2e] = cVar9;
        *(undefined8 *)pcVar15 = uVar2;
        *(undefined8 *)(pcVar15 + 8) = uVar3;
        *(undefined8 *)(pcVar15 + 0x10) = uVar5;
        *(undefined8 *)(pcVar15 + 0x18) = uVar6;
        cv::error(-0xd1,(String *)&local_28,
                  "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1ad);
        cv::String::deallocate((String *)&local_28);
      }
      if (iVar25 < (int)param_1) {
        uVar26 = param_6 & 3;
        if (uVar26 == 1) {
          if (((*puVar23 ^ *puVar16) & 0xff8) != 0) {
            local_28 = (uint *)0x0;
            local_20 = (uint *)0x0;
            pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x31);
            uVar11 = s_Number_of_channels_is_not_the_sa_00461d90._40_8_;
            uVar10 = s_Number_of_channels_is_not_the_sa_00461d90._32_8_;
            uVar6 = s_Number_of_channels_is_not_the_sa_00461d90._24_8_;
            uVar5 = s_Number_of_channels_is_not_the_sa_00461d90._16_8_;
            uVar3 = s_Number_of_channels_is_not_the_sa_00461d90._8_8_;
            uVar2 = s_Number_of_channels_is_not_the_sa_00461d90._0_8_;
            pcVar15[0x30] = s_Number_of_channels_is_not_the_sa_00461d90[0x30];
            *(undefined8 *)pcVar15 = uVar2;
            *(undefined8 *)(pcVar15 + 8) = uVar3;
            *(undefined8 *)(pcVar15 + 0x10) = uVar5;
            *(undefined8 *)(pcVar15 + 0x18) = uVar6;
            *(undefined8 *)(pcVar15 + 0x20) = uVar10;
            *(undefined8 *)(pcVar15 + 0x28) = uVar11;
            cv::error(-0xcd,(String *)&local_28,
                      "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1bb);
            goto LAB_00264600;
          }
        }
        else if (uVar26 == 2) {
          if (((*puVar23 ^ *puVar16) & 0xff8) != 0) {
            local_28 = (uint *)0x0;
            local_20 = (uint *)0x0;
            pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x24);
            uVar6 = s_Depth_is_not_the_same_for_all_ar_00461dc8._24_8_;
            uVar5 = s_Depth_is_not_the_same_for_all_ar_00461dc8._16_8_;
            uVar3 = s_Depth_is_not_the_same_for_all_ar_00461dc8._8_8_;
            uVar2 = s_Depth_is_not_the_same_for_all_ar_00461dc8._0_8_;
            *(undefined4 *)(pcVar15 + 0x20) = s_Depth_is_not_the_same_for_all_ar_00461dc8._32_4_;
            *(undefined8 *)pcVar15 = uVar2;
            *(undefined8 *)(pcVar15 + 8) = uVar3;
            *(undefined8 *)(pcVar15 + 0x10) = uVar5;
            *(undefined8 *)(pcVar15 + 0x18) = uVar6;
            cv::error(-0xcd,(String *)&local_28,
                      "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1c0);
            goto LAB_00264600;
          }
        }
        else if ((uVar26 == 0) && (((*puVar23 ^ *puVar16) & 0xfff) != 0)) {
          local_28 = (uint *)0x0;
          local_20 = (uint *)0x0;
          pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x28);
          uVar6 = s_Data_type_is_not_the_same_for_al_00461d60._24_8_;
          uVar5 = s_Data_type_is_not_the_same_for_al_00461d60._16_8_;
          uVar3 = s_Data_type_is_not_the_same_for_al_00461d60._8_8_;
          uVar2 = s_Data_type_is_not_the_same_for_al_00461d60._0_8_;
          *(undefined8 *)(pcVar15 + 0x20) = s_Data_type_is_not_the_same_for_al_00461d60._32_8_;
          *(undefined8 *)pcVar15 = uVar2;
          *(undefined8 *)(pcVar15 + 8) = uVar3;
          *(undefined8 *)(pcVar15 + 0x10) = uVar5;
          *(undefined8 *)(pcVar15 + 0x18) = uVar6;
          cv::error(-0xcd,(String *)&local_28,
                    "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                    ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1b6);
LAB_00264600:
          cv::String::deallocate((String *)&local_28);
        }
      }
      else if ((*puVar16 & 0xffe) != 0) {
        local_28 = (uint *)0x0;
        local_20 = (uint *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x27);
        cVar9 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0[0x26];
        uVar7 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._36_2_;
        uVar6 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._24_8_;
        uVar5 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._16_8_;
        uVar3 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._8_8_;
        uVar2 = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._0_8_;
        *(undefined4 *)(pcVar15 + 0x20) = s_Mask_should_have_8uC1_or_8sC1_da_00461df0._32_4_;
        *(undefined2 *)(pcVar15 + 0x24) = uVar7;
        pcVar15[0x26] = cVar9;
        *(undefined8 *)pcVar15 = uVar2;
        *(undefined8 *)(pcVar15 + 8) = uVar3;
        *(undefined8 *)(pcVar15 + 0x10) = uVar5;
        *(undefined8 *)(pcVar15 + 0x18) = uVar6;
        cv::error(-0xd0,(String *)&local_28,
                  "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1c7);
        goto LAB_00264600;
      }
      uVar26 = puVar16[1];
      puVar21 = puVar23;
      if (((param_6 & 4) == 0) && (0 < (int)uVar26)) {
        iVar25 = 0;
        do {
          if (puVar16[((long)iVar25 + 4) * 2] != puVar23[((long)iVar25 + 4) * 2]) {
            local_28 = (uint *)0x0;
            local_20 = (uint *)0x0;
            pcVar15 = (char *)cv::String::allocate((String *)&local_28,0x2b);
            cVar9 = s_Dimension_sizes_are_the_same_for_00461e18[0x2a];
            uVar7 = s_Dimension_sizes_are_the_same_for_00461e18._40_2_;
            uVar6 = s_Dimension_sizes_are_the_same_for_00461e18._24_8_;
            uVar5 = s_Dimension_sizes_are_the_same_for_00461e18._16_8_;
            uVar3 = s_Dimension_sizes_are_the_same_for_00461e18._8_8_;
            uVar2 = s_Dimension_sizes_are_the_same_for_00461e18._0_8_;
            *(undefined8 *)(pcVar15 + 0x20) = s_Dimension_sizes_are_the_same_for_00461e18._32_8_;
            *(undefined2 *)(pcVar15 + 0x28) = uVar7;
            pcVar15[0x2a] = cVar9;
            *(undefined8 *)pcVar15 = uVar2;
            *(undefined8 *)(pcVar15 + 8) = uVar3;
            *(undefined8 *)(pcVar15 + 0x10) = uVar5;
            *(undefined8 *)(pcVar15 + 0x18) = uVar6;
            cv::error(-0xd1,(String *)&local_28,
                      "int cvInitNArrayIterator(int, CvArr**, const CvArr*, CvMatND*, CvNArrayIterator*, int)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x1cf);
            cv::String::deallocate((String *)&local_28);
            uVar26 = puVar16[1];
          }
          iVar25 = iVar25 + 1;
        } while (iVar25 < (int)uVar26);
      }
    }
    uVar26 = uVar26 - 1;
    lVar18 = (long)(int)((*puVar16 >> 3 & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> ((*puVar16 & 7) << 1)) & 3));
    if ((int)uVar22 < (int)uVar26) {
      lVar19 = (long)(int)uVar26;
      lVar20 = (long)(int)puVar16[lVar19 * 2 + 9];
      if (lVar18 == lVar20) {
        while( true ) {
          uVar26 = uVar26 - 1;
          lVar18 = (int)puVar16[lVar19 * 2 + 8] * lVar20;
          if (uVar26 == uVar22) break;
          lVar20 = (long)(int)puVar16[lVar19 * 2 + 7];
          if (lVar20 != lVar18) goto LAB_00264204;
          lVar19 = (long)(int)uVar26;
        }
      }
      if ((0x7fffffff < lVar18) && (uVar26 == uVar22)) {
        uVar26 = uVar26 + 1;
      }
    }
LAB_00264204:
    *(uint **)puVar17 = puVar16;
    if ((int)uVar22 < (int)uVar26) {
      uVar22 = uVar26;
    }
    lVar24 = lVar24 + 1;
    *(undefined8 *)(puVar17 + -0x34) = *(undefined8 *)(puVar16 + 6);
    param_4 = param_4 + 0x48;
    puVar23 = puVar21;
    puVar17 = puVar17 + 2;
  } while ((int)lVar24 <= (int)param_1);
  uVar26 = 1;
  uVar13 = puVar23[1] - 1;
  if ((int)uVar22 < (int)uVar13) {
    do {
      lVar24 = (long)(int)uVar13;
      uVar13 = uVar13 - 1;
      uVar26 = uVar26 * puVar23[lVar24 * 2 + 8];
    } while (uVar13 != uVar22);
  }
  uVar13 = uVar22 + 1;
  param_5[1] = uVar13;
  *param_5 = param_1;
  param_5[2] = uVar26;
  param_5[3] = 1;
  if (uVar13 != 0) {
    puVar17 = puVar23 + 8;
    puVar16 = param_5 + 0x18;
    if ((puVar17 < param_5 + (ulong)uVar13 + 0x18 && puVar16 < puVar23 + ((ulong)uVar13 + 4) * 2) ||
       (uVar13 < 9)) {
      do {
        puVar21 = puVar17 + 2;
        *puVar16 = *puVar17;
        puVar17 = puVar21;
        puVar16 = puVar16 + 1;
      } while (puVar21 != puVar23 + ((ulong)uVar22 + 5) * 2);
    }
    else {
      uVar26 = *puVar17;
      uVar27 = puVar23[10];
      uVar28 = puVar23[0xe];
      *(ulong *)(param_5 + 0x1a) =
           CONCAT17((char)(uVar28 >> 0x18),
                    CONCAT16((char)(uVar28 >> 0x10),
                             CONCAT15((char)(uVar28 >> 8),CONCAT14((char)uVar28,puVar23[0xc]))));
      *(ulong *)puVar16 =
           CONCAT17((char)(uVar27 >> 0x18),
                    CONCAT16((char)(uVar27 >> 0x10),
                             CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
      iVar25 = (uVar22 - 4 >> 2) + 1;
      uVar26 = puVar23[0x10];
      uVar27 = puVar23[0x12];
      uVar28 = puVar23[0x16];
      uVar22 = iVar25 * 4;
      *(ulong *)(param_5 + 0x1e) =
           CONCAT17((char)(uVar28 >> 0x18),
                    CONCAT16((char)(uVar28 >> 0x10),
                             CONCAT15((char)(uVar28 >> 8),CONCAT14((char)uVar28,puVar23[0x14]))));
      *(ulong *)(param_5 + 0x1c) =
           CONCAT17((char)(uVar27 >> 0x18),
                    CONCAT16((char)(uVar27 >> 0x10),
                             CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
      if (iVar25 != 2) {
        uVar26 = puVar23[0x18];
        uVar27 = puVar23[0x1a];
        uVar28 = puVar23[0x1e];
        *(ulong *)(param_5 + 0x22) =
             CONCAT17((char)(uVar28 >> 0x18),
                      CONCAT16((char)(uVar28 >> 0x10),
                               CONCAT15((char)(uVar28 >> 8),CONCAT14((char)uVar28,puVar23[0x1c]))));
        *(ulong *)(param_5 + 0x20) =
             CONCAT17((char)(uVar27 >> 0x18),
                      CONCAT16((char)(uVar27 >> 0x10),
                               CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
        if (iVar25 != 3) {
          uVar26 = puVar23[0x20];
          uVar27 = puVar23[0x22];
          uVar28 = puVar23[0x26];
          *(ulong *)(param_5 + 0x26) =
               CONCAT17((char)(uVar28 >> 0x18),
                        CONCAT16((char)(uVar28 >> 0x10),
                                 CONCAT15((char)(uVar28 >> 8),CONCAT14((char)uVar28,puVar23[0x24])))
                       );
          *(ulong *)(param_5 + 0x24) =
               CONCAT17((char)(uVar27 >> 0x18),
                        CONCAT16((char)(uVar27 >> 0x10),
                                 CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
          if (iVar25 != 4) {
            uVar26 = puVar23[0x28];
            uVar27 = puVar23[0x2a];
            uVar28 = puVar23[0x2e];
            *(ulong *)(param_5 + 0x2a) =
                 CONCAT17((char)(uVar28 >> 0x18),
                          CONCAT16((char)(uVar28 >> 0x10),
                                   CONCAT15((char)(uVar28 >> 8),CONCAT14((char)uVar28,puVar23[0x2c])
                                           )));
            *(ulong *)(param_5 + 0x28) =
                 CONCAT17((char)(uVar27 >> 0x18),
                          CONCAT16((char)(uVar27 >> 0x10),
                                   CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
            if (iVar25 != 5) {
              uVar26 = puVar23[0x30];
              uVar27 = puVar23[0x32];
              uVar28 = puVar23[0x36];
              *(ulong *)(param_5 + 0x2e) =
                   CONCAT17((char)(uVar28 >> 0x18),
                            CONCAT16((char)(uVar28 >> 0x10),
                                     CONCAT15((char)(uVar28 >> 8),
                                              CONCAT14((char)uVar28,puVar23[0x34]))));
              *(ulong *)(param_5 + 0x2c) =
                   CONCAT17((char)(uVar27 >> 0x18),
                            CONCAT16((char)(uVar27 >> 0x10),
                                     CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))));
              if (iVar25 != 6) {
                uVar26 = puVar23[0x38];
                uVar27 = puVar23[0x3a];
                uVar28 = puVar23[0x3e];
                *(ulong *)(param_5 + 0x32) =
                     CONCAT17((char)(uVar28 >> 0x18),
                              CONCAT16((char)(uVar28 >> 0x10),
                                       CONCAT15((char)(uVar28 >> 8),
                                                CONCAT14((char)uVar28,puVar23[0x3c]))));
                *(ulong *)(param_5 + 0x30) =
                     CONCAT17((char)(uVar27 >> 0x18),
                              CONCAT16((char)(uVar27 >> 0x10),
                                       CONCAT15((char)(uVar27 >> 8),CONCAT14((char)uVar27,uVar26))))
                ;
              }
            }
          }
        }
      }
      if (uVar22 != uVar13) {
        iVar25 = uVar22 + 1;
        param_5[(long)(int)uVar22 + 0x18] = puVar23[(long)(int)uVar22 * 2 + 8];
        if (iVar25 < (int)uVar13) {
          iVar1 = uVar22 + 2;
          param_5[(long)iVar25 + 0x18] = puVar23[(long)iVar25 * 2 + 8];
          if (iVar1 < (int)uVar13) {
            iVar25 = uVar22 + 3;
            param_5[(long)iVar1 + 0x18] = puVar23[(long)iVar1 * 2 + 8];
            if (iVar25 < (int)uVar13) {
              iVar1 = uVar22 + 4;
              param_5[(long)iVar25 + 0x18] = puVar23[(long)iVar25 * 2 + 8];
              if (iVar1 < (int)uVar13) {
                iVar25 = uVar22 + 5;
                param_5[(long)iVar1 + 0x18] = puVar23[(long)iVar1 * 2 + 8];
                if (iVar25 < (int)uVar13) {
                  iVar1 = uVar22 + 6;
                  param_5[(long)iVar25 + 0x18] = puVar23[(long)iVar25 * 2 + 8];
                  if (iVar1 < (int)uVar13) {
                    param_5[(long)iVar1 + 0x18] = puVar23[(long)iVar1 * 2 + 8];
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00264bcc (4444 bytes) name=cvReshapeMatND

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

String * cvReshapeMatND(String *param_1,int param_2,String *param_3,int param_4,int param_5,
                       int *param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  bool bVar11;
  String *pSVar12;
  int iVar14;
  uint uVar15;
  undefined8 *puVar16;
  char *pcVar17;
  void *pvVar18;
  uint *puVar19;
  uint uVar20;
  int *piVar21;
  int iVar22;
  long lVar23;
  uint uVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  undefined8 uVar33;
  uint local_15c;
  long local_158;
  long local_150;
  undefined8 local_148;
  undefined8 local_140;
  undefined4 local_138;
  undefined4 uStack_134;
  long local_130;
  int local_128;
  int iStack_124;
  undefined8 local_120;
  int *local_118;
  undefined4 local_110;
  long local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8;
  int local_f4;
  String *pSVar13;
  
  bVar11 = param_1 == (String *)0x0;
  local_15c = 0;
  if ((bVar11) || (param_3 == (String *)0x0)) {
    local_120 = (int *)0x0;
    local_118 = (int *)0x0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x2b);
    cVar5 = s_NULL_pointer_to_array_or_destina_00461e48[0x2a];
    uVar4 = s_NULL_pointer_to_array_or_destina_00461e48._40_2_;
    uVar3 = s_NULL_pointer_to_array_or_destina_00461e48._24_8_;
    uVar2 = s_NULL_pointer_to_array_or_destina_00461e48._16_8_;
    uVar1 = s_NULL_pointer_to_array_or_destina_00461e48._8_8_;
    uVar33 = s_NULL_pointer_to_array_or_destina_00461e48._0_8_;
    *(undefined8 *)(pcVar17 + 0x20) = s_NULL_pointer_to_array_or_destina_00461e48._32_8_;
    *(undefined2 *)(pcVar17 + 0x28) = uVar4;
    pcVar17[0x2a] = cVar5;
    *(undefined8 *)pcVar17 = uVar33;
    *(undefined8 *)(pcVar17 + 8) = uVar1;
    *(undefined8 *)(pcVar17 + 0x10) = uVar2;
    *(undefined8 *)(pcVar17 + 0x18) = uVar3;
    cv::error(-0x1b,(String *)&local_120,
              "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9d0);
    cv::String::deallocate((String *)&local_120);
  }
  uVar24 = (uint)bVar11;
  if (param_4 == 0 && param_5 == 0) {
    local_120 = (int *)0x0;
    local_118 = (int *)0x0;
    puVar16 = (undefined8 *)cv::String::allocate((String *)&local_120,0x30);
    uVar6 = s_my_call__00461ea0._0_8_;
    uVar3 = DAT_00461e98;
    uVar2 = _DAT_00461e90;
    uVar1 = DAT_00461e88;
    uVar33 = DAT_00461e80;
    *puVar16 = DAT_00461e78;
    puVar16[1] = uVar33;
    puVar16[2] = uVar1;
    puVar16[3] = uVar2;
    puVar16[4] = uVar3;
    puVar16[5] = uVar6;
    cv::error(-5,(String *)&local_120,
              "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9d3);
    param_6 = (int *)0x0;
    cv::String::deallocate((String *)&local_120);
    iVar14 = cvGetDims(param_1,0);
    param_5 = iVar14;
LAB_00264cb4:
    if (2 < param_5) {
      if (param_2 != 0x120) {
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x23);
        cVar5 = s_The_output_header_should_be_CvMa_00462018[0x22];
        uVar3 = s_The_output_header_should_be_CvMa_00462018._24_8_;
        uVar2 = s_The_output_header_should_be_CvMa_00462018._16_8_;
        uVar1 = s_The_output_header_should_be_CvMa_00462018._8_8_;
        uVar33 = s_The_output_header_should_be_CvMa_00462018._0_8_;
        *(undefined2 *)(pcVar17 + 0x20) = s_The_output_header_should_be_CvMa_00462018._32_2_;
        pcVar17[0x22] = cVar5;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        *(undefined8 *)(pcVar17 + 0x10) = uVar2;
        *(undefined8 *)(pcVar17 + 0x18) = uVar3;
        cv::error(-0xc9,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa39);
        cv::String::deallocate((String *)&local_120);
      }
      if (param_6 == (int *)0x0) {
        if (((bVar11) || (uVar24 = *(uint *)param_1, (uVar24 & 0xffff0000) != 0x42430000)) ||
           (*(long *)(param_1 + 0x18) == 0)) {
          local_120 = (int *)0x0;
          local_118 = (int *)0x0;
          pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x1f);
          cVar5 = s_The_input_array_must_be_CvMatND_00462040[0x1e];
          uVar4 = s_The_input_array_must_be_CvMatND_00462040._28_2_;
          uVar31 = s_The_input_array_must_be_CvMatND_00462040._24_4_;
          uVar1 = s_The_input_array_must_be_CvMatND_00462040._8_8_;
          uVar33 = s_The_input_array_must_be_CvMatND_00462040._0_8_;
          *(undefined8 *)(pcVar17 + 0x10) = s_The_input_array_must_be_CvMatND_00462040._16_8_;
          *(undefined4 *)(pcVar17 + 0x18) = uVar31;
          *(undefined2 *)(pcVar17 + 0x1c) = uVar4;
          pcVar17[0x1e] = cVar5;
          *(undefined8 *)pcVar17 = uVar33;
          *(undefined8 *)(pcVar17 + 8) = uVar1;
          cv::error(-5,(String *)&local_120,
                    "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa3e);
          cv::String::deallocate((String *)&local_120);
          uVar24 = *(uint *)param_1;
        }
        iVar14 = *(int *)(param_1 + (long)(*(int *)(param_1 + 4) + -1) * 8 + 0x20) +
                 (uVar24 >> 3 & 0x1ff) *
                 *(int *)(param_1 + (long)(*(int *)(param_1 + 4) + -1) * 8 + 0x20);
        iVar25 = 0;
        if (param_4 != 0) {
          iVar25 = iVar14 / param_4;
        }
        if (iVar25 * param_4 != iVar14) {
          local_120 = (int *)0x0;
          local_118 = (int *)0x0;
          pvVar18 = (void *)cv::String::allocate((String *)&local_120,0x47);
          memcpy(pvVar18,&DAT_00462060,0x47);
          cv::error(-5,(String *)&local_120,
                    "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa48);
          cv::String::deallocate((String *)&local_120);
        }
        if (param_1 != param_3) {
          memcpy(param_3,param_1,0x120);
          *(undefined8 *)(param_3 + 8) = 0;
          *(undefined4 *)(param_3 + 0x10) = 0;
        }
        uVar24 = *(uint *)param_3;
        *(int *)(param_3 + (long)(*(int *)(param_3 + 4) + -1) * 8 + 0x20) = iVar25;
        *(uint *)param_3 = (uVar24 & 7) + (param_4 + -1) * 8 | uVar24 & 0xfffff000;
        goto joined_r0x0026549c;
      }
      if (param_4 != 0) {
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pvVar18 = (void *)cv::String::allocate((String *)&local_120,0x5f);
        memcpy(pvVar18,
               "Simultaneous change of shape and number of channels is not supported. Do it by 2 separate calls"
               ,0x5f);
        cv::error(-5,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa5f);
        cv::String::deallocate((String *)&local_120);
      }
      if (uVar24 == 0) {
        uVar15 = *(uint *)param_1;
        uVar20 = uVar15 & 0xffff0000;
        if (uVar20 != 0x42430000) {
          local_15c = uVar24;
          if (uVar15 == 0x90) {
            param_1 = (String *)cvGetMat(param_1,&local_148,&local_15c,0);
            if (param_1 == (String *)0x0) goto LAB_00264d78;
            uVar20 = *(uint *)param_1 & 0xffff0000;
          }
          if (((uVar20 != 0x42420000) || (*(int *)(param_1 + 0x24) < 1)) ||
             (*(int *)(param_1 + 0x20) < 1)) goto LAB_00264d78;
          goto LAB_00264dd8;
        }
        piVar21 = *(int **)(param_1 + 0x18);
        if (piVar21 == (int *)0x0) {
          param_1 = (String *)&local_120;
          local_15c = 0;
          local_120 = piVar21;
          local_118 = piVar21;
          pcVar17 = (char *)cv::String::allocate(param_1,0x20);
          uVar2 = s_The_matrix_has_NULL_data_pointer_00461b60._24_8_;
          uVar1 = s_The_matrix_has_NULL_data_pointer_00461b60._16_8_;
          uVar33 = s_The_matrix_has_NULL_data_pointer_00461b60._8_8_;
          *(undefined8 *)pcVar17 = s_The_matrix_has_NULL_data_pointer_00461b60._0_8_;
          *(undefined8 *)(pcVar17 + 8) = uVar33;
          *(undefined8 *)(pcVar17 + 0x10) = uVar1;
          *(undefined8 *)(pcVar17 + 0x18) = uVar2;
          cv::error(-0x1b,param_1,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x154);
          cv::String::deallocate(param_1);
          uVar15 = (uint)local_120;
        }
      }
      else {
        local_15c = 0;
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x1c);
        uVar31 = s_NULL_array_pointer_is_passed_00461b40._24_4_;
        uVar1 = s_NULL_array_pointer_is_passed_00461b40._8_8_;
        uVar33 = s_NULL_array_pointer_is_passed_00461b40._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_NULL_array_pointer_is_passed_00461b40._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar31;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        cv::error(-0x1b,(String *)&local_120,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x14f);
        param_1 = (String *)0x0;
        cv::String::deallocate((String *)&local_120);
LAB_00264d78:
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        puVar16 = (undefined8 *)cv::String::allocate((String *)&local_120,0x26);
        uVar4 = DAT_00461ca4;
        uVar3 = DAT_00461c98;
        uVar2 = DAT_00461c90;
        uVar1 = DAT_00461c88;
        uVar33 = _DAT_00461c80;
        *(undefined4 *)(puVar16 + 4) = DAT_00461ca0;
        *(undefined2 *)((long)puVar16 + 0x24) = uVar4;
        *puVar16 = uVar33;
        puVar16[1] = uVar1;
        puVar16[2] = uVar2;
        puVar16[3] = uVar3;
        cv::error(-5,(String *)&local_120,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x160);
        cv::String::deallocate((String *)&local_120);
LAB_00264dd8:
        local_120 = *(int **)(param_1 + 0x18);
        if (local_120 == (int *)0x0) {
          local_118 = local_120;
          pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x21);
          uVar3 = s_Input_array_has_NULL_data_pointe_00461c58._24_8_;
          uVar2 = s_Input_array_has_NULL_data_pointe_00461c58._16_8_;
          uVar1 = s_Input_array_has_NULL_data_pointe_00461c58._8_8_;
          uVar33 = s_Input_array_has_NULL_data_pointe_00461c58._0_8_;
          pcVar17[0x20] = s_Input_array_has_NULL_data_pointe_00461c58[0x20];
          *(undefined8 *)pcVar17 = uVar33;
          *(undefined8 *)(pcVar17 + 8) = uVar1;
          *(undefined8 *)(pcVar17 + 0x10) = uVar2;
          *(undefined8 *)(pcVar17 + 0x18) = uVar3;
          cv::error(-0x1b,(String *)&local_120,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x163);
          cv::String::deallocate((String *)&local_120);
          local_120 = *(int **)(param_1 + 0x18);
        }
        local_108 = (long)local_120;
        local_110 = 0;
        local_118 = (int *)0x0;
        uVar15 = *(uint *)param_1;
        local_120 = (int *)CONCAT44(2,uVar15);
        local_100 = *(undefined4 *)(param_1 + 0x20);
        local_fc = *(undefined4 *)(param_1 + 4);
        local_f8 = *(undefined4 *)(param_1 + 0x24);
        local_f4 = (uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3);
        param_1 = (String *)&local_120;
      }
      if ((uVar15 >> 0xe & 1) != 0) {
        local_148 = 0;
        local_140 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_148,0x2a);
        uVar4 = s_Non_continuous_nD_arrays_are_not_00462108._40_2_;
        uVar3 = s_Non_continuous_nD_arrays_are_not_00462108._24_8_;
        uVar2 = s_Non_continuous_nD_arrays_are_not_00462108._16_8_;
        uVar1 = s_Non_continuous_nD_arrays_are_not_00462108._8_8_;
        uVar33 = s_Non_continuous_nD_arrays_are_not_00462108._0_8_;
        *(undefined8 *)(pcVar17 + 0x20) = s_Non_continuous_nD_arrays_are_not_00462108._32_8_;
        *(undefined2 *)(pcVar17 + 0x28) = uVar4;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        *(undefined8 *)(pcVar17 + 0x10) = uVar2;
        *(undefined8 *)(pcVar17 + 0x18) = uVar3;
        cv::error(-5,(String *)&local_148,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa68);
        cv::String::deallocate((String *)&local_148);
      }
      iVar25 = *(int *)(param_1 + 0x20);
      if (1 < iVar14) {
        uVar24 = (iVar14 - 6U >> 2) + 1;
        iVar22 = uVar24 * 4;
        if (iVar14 - 2U < 7) {
          iVar30 = 1;
        }
        else {
          iVar26 = 1;
          iVar27 = 1;
          iVar28 = 1;
          iVar29 = 1;
          pSVar13 = param_1 + 0x28;
          uVar20 = 0;
          do {
            iVar30 = *(int *)pSVar13;
            uVar31 = *(undefined4 *)(pSVar13 + 8);
            pSVar12 = pSVar13 + 0x10;
            uVar32 = *(undefined4 *)(pSVar13 + 0x18);
            pSVar13 = pSVar13 + 0x20;
            uVar20 = uVar20 + 1;
            iVar26 = iVar26 * iVar30;
            iVar27 = iVar27 * (int)(CONCAT17((char)((uint)uVar31 >> 0x18),
                                             CONCAT16((char)((uint)uVar31 >> 0x10),
                                                      CONCAT15((char)((uint)uVar31 >> 8),
                                                               CONCAT14((char)uVar31,iVar30)))) >>
                                   0x20);
            iVar28 = iVar28 * *(int *)pSVar12;
            iVar29 = iVar29 * (int)(CONCAT17((char)((uint)uVar32 >> 0x18),
                                             CONCAT16((char)((uint)uVar32 >> 0x10),
                                                      CONCAT15((char)((uint)uVar32 >> 8),
                                                               CONCAT14((char)uVar32,*(int *)pSVar12
                                                                       )))) >> 0x20);
          } while (uVar20 < uVar24);
          iVar30 = iVar22 + 1;
          iVar25 = iVar25 * iVar29 * iVar28 * iVar27 * iVar26;
          if (iVar22 == iVar14 + -1) goto LAB_00264f5c;
        }
        iVar25 = iVar25 * *(int *)(param_1 + (long)iVar30 * 8 + 0x20);
        if (iVar30 + 1 < iVar14) {
          iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 1) * 8 + 0x20);
          if (iVar30 + 2 < iVar14) {
            iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 2) * 8 + 0x20);
            if (iVar30 + 3 < iVar14) {
              iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 3) * 8 + 0x20);
              if (iVar30 + 4 < iVar14) {
                iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 4) * 8 + 0x20);
                if (iVar30 + 5 < iVar14) {
                  iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 5) * 8 + 0x20);
                  if (iVar30 + 6 < iVar14) {
                    iVar25 = iVar25 * *(int *)(param_1 + (long)(iVar30 + 6) * 8 + 0x20);
                  }
                }
              }
            }
          }
        }
      }
LAB_00264f5c:
      lVar23 = 0;
      iVar14 = 1;
      do {
        while (piVar21 = param_6 + lVar23, *piVar21 < 1) {
          local_148 = 0;
          local_140 = 0;
          puVar16 = (undefined8 *)cv::String::allocate((String *)&local_148,0x2a);
          uVar33 = DAT_00462158;
          *(undefined2 *)(puVar16 + 5) = DAT_00462160;
          puVar16[4] = uVar33;
          uVar2 = DAT_00462150;
          uVar1 = DAT_00462148;
          uVar33 = _DAT_00462140;
          *puVar16 = DAT_00462138;
          puVar16[1] = uVar33;
          puVar16[2] = uVar1;
          puVar16[3] = uVar2;
          cv::error(-0xc9,(String *)&local_148,
                    "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                    "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa73);
          cv::String::deallocate((String *)&local_148);
          piVar21 = param_6 + lVar23;
          lVar23 = lVar23 + 1;
          iVar14 = iVar14 * *piVar21;
          if (param_5 <= (int)lVar23) goto LAB_00265014;
        }
        lVar23 = lVar23 + 1;
        iVar14 = iVar14 * *piVar21;
      } while ((int)lVar23 < param_5);
LAB_00265014:
      if (iVar25 != iVar14) {
        local_148 = 0;
        local_140 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_148,0x42);
        uVar7 = s_Number_of_elements_in_the_origin_00462168._40_8_;
        uVar6 = s_Number_of_elements_in_the_origin_00462168._32_8_;
        uVar3 = s_Number_of_elements_in_the_origin_00462168._24_8_;
        uVar2 = s_Number_of_elements_in_the_origin_00462168._16_8_;
        uVar1 = s_Number_of_elements_in_the_origin_00462168._8_8_;
        uVar33 = s_Number_of_elements_in_the_origin_00462168._0_8_;
        *(undefined2 *)(pcVar17 + 0x40) = s_Number_of_elements_in_the_origin_00462168._64_2_;
        uVar9 = s_Number_of_elements_in_the_origin_00462168._56_8_;
        uVar8 = s_Number_of_elements_in_the_origin_00462168._48_8_;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        *(undefined8 *)(pcVar17 + 0x10) = uVar2;
        *(undefined8 *)(pcVar17 + 0x18) = uVar3;
        *(undefined8 *)(pcVar17 + 0x20) = uVar6;
        *(undefined8 *)(pcVar17 + 0x28) = uVar7;
        *(undefined8 *)(pcVar17 + 0x30) = uVar8;
        *(undefined8 *)(pcVar17 + 0x38) = uVar9;
        cv::error(-0xc9,(String *)&local_148,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa79);
        cv::String::deallocate((String *)&local_148);
      }
      if (param_1 != param_3) {
        *(undefined8 *)(param_3 + 8) = 0;
        *(undefined4 *)(param_3 + 0x10) = 0;
      }
      uVar24 = *(uint *)param_1;
      iVar25 = param_5 + -1;
      *(uint *)param_3 = uVar24;
      *(int *)(param_3 + 4) = param_5;
      lVar23 = (long)iVar25;
      *(undefined8 *)(param_3 + 0x18) = *(undefined8 *)(param_1 + 0x18);
      iVar14 = (uVar24 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar24 & 7) << 1)) & 3);
      piVar21 = param_6 + lVar23;
      while( true ) {
        iVar22 = *piVar21;
        iVar25 = iVar25 + -1;
        *(int *)(param_3 + lVar23 * 8 + 0x24) = iVar14;
        *(int *)(param_3 + lVar23 * 8 + 0x20) = iVar22;
        iVar14 = iVar14 * *piVar21;
        if (iVar25 == -1) break;
        lVar23 = (long)iVar25;
        piVar21 = piVar21 + -1;
      }
      goto joined_r0x0026549c;
    }
  }
  else {
    iVar14 = cvGetDims(param_1,0);
    if (param_5 == 0) {
      param_6 = (int *)0x0;
      param_5 = iVar14;
      goto LAB_00264cb4;
    }
    if (param_5 != 1) {
      if (0x1f < param_5 - 1U) {
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x2e);
        uVar4 = s_Non_positive_or_too_large_number_00461eb0._44_2_;
        uVar31 = s_Non_positive_or_too_large_number_00461eb0._40_4_;
        uVar3 = s_Non_positive_or_too_large_number_00461eb0._24_8_;
        uVar2 = s_Non_positive_or_too_large_number_00461eb0._16_8_;
        uVar1 = s_Non_positive_or_too_large_number_00461eb0._8_8_;
        uVar33 = s_Non_positive_or_too_large_number_00461eb0._0_8_;
        *(undefined8 *)(pcVar17 + 0x20) = s_Non_positive_or_too_large_number_00461eb0._32_8_;
        *(undefined4 *)(pcVar17 + 0x28) = uVar31;
        *(undefined2 *)(pcVar17 + 0x2c) = uVar4;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        *(undefined8 *)(pcVar17 + 0x10) = uVar2;
        *(undefined8 *)(pcVar17 + 0x18) = uVar3;
        cv::error(-0xd3,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9e3);
        cv::String::deallocate((String *)&local_120);
      }
      if (param_6 == (int *)0x0) {
        local_120 = param_6;
        local_118 = param_6;
        pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x25);
        cVar5 = s_New_dimension_sizes_are_not_spec_00461ee0[0x24];
        uVar3 = s_New_dimension_sizes_are_not_spec_00461ee0._24_8_;
        uVar2 = s_New_dimension_sizes_are_not_spec_00461ee0._16_8_;
        uVar1 = s_New_dimension_sizes_are_not_spec_00461ee0._8_8_;
        uVar33 = s_New_dimension_sizes_are_not_spec_00461ee0._0_8_;
        *(undefined4 *)(pcVar17 + 0x20) = s_New_dimension_sizes_are_not_spec_00461ee0._32_4_;
        pcVar17[0x24] = cVar5;
        *(undefined8 *)pcVar17 = uVar33;
        *(undefined8 *)(pcVar17 + 8) = uVar1;
        *(undefined8 *)(pcVar17 + 0x10) = uVar2;
        *(undefined8 *)(pcVar17 + 0x18) = uVar3;
        cv::error(-0x1b,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9e5);
        cv::String::deallocate((String *)&local_120);
      }
      goto LAB_00264cb4;
    }
    param_6 = (int *)0x0;
  }
  if ((param_2 != 0x28) && (param_2 != 0x120)) {
    local_120 = (int *)0x0;
    local_118 = (int *)0x0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x2c);
    uVar31 = s_The_output_header_should_be_CvMa_00461f08._40_4_;
    uVar3 = s_The_output_header_should_be_CvMa_00461f08._24_8_;
    uVar2 = s_The_output_header_should_be_CvMa_00461f08._16_8_;
    uVar1 = s_The_output_header_should_be_CvMa_00461f08._8_8_;
    uVar33 = s_The_output_header_should_be_CvMa_00461f08._0_8_;
    *(undefined8 *)(pcVar17 + 0x20) = s_The_output_header_should_be_CvMa_00461f08._32_8_;
    *(undefined4 *)(pcVar17 + 0x28) = uVar31;
    *(undefined8 *)pcVar17 = uVar33;
    *(undefined8 *)(pcVar17 + 8) = uVar1;
    *(undefined8 *)(pcVar17 + 0x10) = uVar2;
    *(undefined8 *)(pcVar17 + 0x18) = uVar3;
    cv::error(-5,(String *)&local_120,
              "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x9f1);
    cv::String::deallocate((String *)&local_120);
  }
  if (param_1 == param_3) {
    uVar33 = *(undefined8 *)(param_1 + 8);
    uVar31 = *(undefined4 *)(param_1 + 0x10);
  }
  else {
    uVar31 = 0;
    uVar33 = 0;
  }
  if ((((uVar24 != 0) || (uVar24 = *(uint *)param_1, (uVar24 & 0xffff0000) != 0x42420000)) ||
      (iVar14 = *(int *)(param_1 + 0x24), iVar14 < 1)) ||
     ((local_128 = *(int *)(param_1 + 0x20), local_128 < 1 || (*(long *)(param_1 + 0x18) == 0)))) {
    param_1 = (String *)cvGetMat(param_1,&local_148,&local_15c,1);
    uVar24 = *(uint *)param_1;
    iVar14 = *(int *)(param_1 + 0x24);
    local_128 = *(int *)(param_1 + 0x20);
  }
  iVar25 = (uVar24 >> 3 & 0x1ff) + 1;
  if (param_4 == 0) {
    param_4 = iVar25;
  }
  iVar25 = iVar25 * iVar14;
  if (param_6 == (int *)0x0) {
    if ((param_5 == 1) || (iVar25 < param_4)) {
      iVar14 = 0;
      if (param_4 != 0) {
        iVar14 = (iVar25 * local_128) / param_4;
      }
      goto LAB_00265308;
    }
    iVar22 = 0;
    if (param_4 != 0) {
      iVar22 = iVar25 / param_4;
    }
    iStack_124 = iVar22;
    iVar14 = local_128;
    if (iVar25 != param_4 * iVar22) goto LAB_002653a4;
  }
  else {
    iVar14 = *param_6;
LAB_00265308:
    if (iVar14 != local_128) {
      iVar22 = iVar25 * local_128;
      if ((uVar24 >> 0xe & 1) == 0) {
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x45);
        cVar5 = s_The_matrix_is_not_continuous_so_t_00461f38[0x44];
        uVar10 = s_The_matrix_is_not_continuous_so_t_00461f38._56_8_;
        uVar9 = s_The_matrix_is_not_continuous_so_t_00461f38._48_8_;
        uVar8 = s_The_matrix_is_not_continuous_so_t_00461f38._40_8_;
        uVar7 = s_The_matrix_is_not_continuous_so_t_00461f38._32_8_;
        uVar6 = s_The_matrix_is_not_continuous_so_t_00461f38._24_8_;
        uVar3 = s_The_matrix_is_not_continuous_so_t_00461f38._16_8_;
        uVar2 = s_The_matrix_is_not_continuous_so_t_00461f38._8_8_;
        uVar1 = s_The_matrix_is_not_continuous_so_t_00461f38._0_8_;
        *(undefined4 *)(pcVar17 + 0x40) = s_The_matrix_is_not_continuous_so_t_00461f38._64_4_;
        pcVar17[0x44] = cVar5;
        *(undefined8 *)pcVar17 = uVar1;
        *(undefined8 *)(pcVar17 + 8) = uVar2;
        *(undefined8 *)(pcVar17 + 0x10) = uVar3;
        *(undefined8 *)(pcVar17 + 0x18) = uVar6;
        *(undefined8 *)(pcVar17 + 0x20) = uVar7;
        *(undefined8 *)(pcVar17 + 0x28) = uVar8;
        *(undefined8 *)(pcVar17 + 0x30) = uVar9;
        *(undefined8 *)(pcVar17 + 0x38) = uVar10;
        cv::error(-0xd,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa13);
        cv::String::deallocate((String *)&local_120);
      }
      iVar25 = 0;
      if (iVar14 != 0) {
        iVar25 = iVar22 / iVar14;
      }
      if (iVar25 * iVar14 != iVar22) {
        local_120 = (int *)0x0;
        local_118 = (int *)0x0;
        pvVar18 = (void *)cv::String::allocate((String *)&local_120,0x4e);
        memcpy(pvVar18,&DAT_00461f80,0x4e);
        cv::error(-5,(String *)&local_120,
                  "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa19);
        cv::String::deallocate((String *)&local_120);
      }
    }
    iVar22 = 0;
    if (param_4 != 0) {
      iVar22 = iVar25 / param_4;
    }
    local_128 = iVar14;
    iStack_124 = iVar22;
    if ((param_4 * iVar22 != iVar25) ||
       ((param_6 != (int *)0x0 && (bVar11 = iVar22 != param_6[1], iVar22 = param_6[1], bVar11)))) {
LAB_002653a4:
      iVar14 = local_128;
      local_120 = (int *)0x0;
      local_118 = (int *)0x0;
      pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x44);
      uVar8 = s_The_total_matrix_width_is_not_di_00461fd0._40_8_;
      uVar7 = s_The_total_matrix_width_is_not_di_00461fd0._32_8_;
      uVar6 = s_The_total_matrix_width_is_not_di_00461fd0._24_8_;
      uVar3 = s_The_total_matrix_width_is_not_di_00461fd0._16_8_;
      uVar2 = s_The_total_matrix_width_is_not_di_00461fd0._8_8_;
      uVar1 = s_The_total_matrix_width_is_not_di_00461fd0._0_8_;
      *(undefined4 *)(pcVar17 + 0x40) = s_The_total_matrix_width_is_not_di_00461fd0._64_4_;
      uVar10 = s_The_total_matrix_width_is_not_di_00461fd0._56_8_;
      uVar9 = s_The_total_matrix_width_is_not_di_00461fd0._48_8_;
      *(undefined8 *)pcVar17 = uVar1;
      *(undefined8 *)(pcVar17 + 8) = uVar2;
      *(undefined8 *)(pcVar17 + 0x10) = uVar3;
      *(undefined8 *)(pcVar17 + 0x18) = uVar6;
      *(undefined8 *)(pcVar17 + 0x20) = uVar7;
      *(undefined8 *)(pcVar17 + 0x28) = uVar8;
      *(undefined8 *)(pcVar17 + 0x30) = uVar9;
      *(undefined8 *)(pcVar17 + 0x38) = uVar10;
      cv::error(-5,(String *)&local_120,
                "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa22);
      cv::String::deallocate((String *)&local_120);
      iVar22 = iStack_124;
    }
  }
  puVar19 = (uint *)&local_148;
  uVar24 = (*(uint *)param_1 & 7) + (param_4 + -1) * 8 | *(uint *)param_1 & 0xfffff000;
  local_140 = uVar33;
  local_138 = uVar31;
  local_148 = CONCAT44(((*(uint *)param_1 >> 3 & 0x1ff) + 1 <<
                       (ulong)((uint)(0xfa50L >> ((*(uint *)param_1 & 7) << 1)) & 3)) * iVar22 &
                       -(uint)(1 < iVar14),uVar24);
  if (param_2 == 0x28) {
    *(ulong *)(param_3 + 0x20) = CONCAT44(iStack_124,local_128);
    *(undefined8 *)param_3 = local_148;
    *(undefined8 *)(param_3 + 8) = uVar33;
    *(ulong *)(param_3 + 0x10) = CONCAT44(uStack_134,uVar31);
    *(long *)(param_3 + 0x18) = local_130;
    goto joined_r0x0026549c;
  }
  if (param_3 == (String *)0x0) {
    local_120 = (int *)0x0;
    local_118 = (int *)0x0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x1c);
    uVar31 = s_NULL_array_pointer_is_passed_00461b40._24_4_;
    uVar1 = s_NULL_array_pointer_is_passed_00461b40._8_8_;
    uVar33 = s_NULL_array_pointer_is_passed_00461b40._0_8_;
    *(undefined8 *)(pcVar17 + 0x10) = s_NULL_array_pointer_is_passed_00461b40._16_8_;
    *(undefined4 *)(pcVar17 + 0x18) = uVar31;
    *(undefined8 *)pcVar17 = uVar33;
    *(undefined8 *)(pcVar17 + 8) = uVar1;
    cv::error(-0x1b,(String *)&local_120,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x14f);
    cv::String::deallocate((String *)&local_120);
    uVar24 = (uint)local_148;
  }
  uVar20 = uVar24 & 0xffff0000;
  if (uVar20 == 0x42430000) {
    if (local_130 == 0) {
      local_120 = (int *)local_130;
      local_118 = (int *)local_130;
      pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x20);
      uVar2 = s_The_matrix_has_NULL_data_pointer_00461b60._24_8_;
      uVar1 = s_The_matrix_has_NULL_data_pointer_00461b60._16_8_;
      uVar33 = s_The_matrix_has_NULL_data_pointer_00461b60._8_8_;
      *(undefined8 *)pcVar17 = s_The_matrix_has_NULL_data_pointer_00461b60._0_8_;
      *(undefined8 *)(pcVar17 + 8) = uVar33;
      *(undefined8 *)(pcVar17 + 0x10) = uVar1;
      *(undefined8 *)(pcVar17 + 0x18) = uVar2;
      cv::error(-0x1b,(String *)&local_120,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x154);
      cv::String::deallocate((String *)&local_120);
    }
  }
  else {
    if (uVar24 == 0x90) {
      puVar19 = (uint *)cvGetMat(puVar19,&local_120,0,0);
      if (puVar19 != (uint *)0x0) {
        uVar20 = *puVar19 & 0xffff0000;
        goto LAB_00265568;
      }
LAB_00265574:
      local_158 = 0;
      local_150 = 0;
      puVar16 = (undefined8 *)cv::String::allocate((String *)&local_158,0x26);
      uVar4 = DAT_00461ca4;
      uVar3 = DAT_00461c98;
      uVar2 = DAT_00461c90;
      uVar1 = DAT_00461c88;
      uVar33 = _DAT_00461c80;
      *(undefined4 *)(puVar16 + 4) = DAT_00461ca0;
      *(undefined2 *)((long)puVar16 + 0x24) = uVar4;
      *puVar16 = uVar33;
      puVar16[1] = uVar1;
      puVar16[2] = uVar2;
      puVar16[3] = uVar3;
      cv::error(-5,(String *)&local_158,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x160);
      cv::String::deallocate((String *)&local_158);
    }
    else {
LAB_00265568:
      if (((uVar20 != 0x42420000) || ((int)puVar19[9] < 1)) || ((int)puVar19[8] < 1))
      goto LAB_00265574;
    }
    lVar23 = *(long *)(puVar19 + 6);
    if (lVar23 == 0) {
      local_158 = lVar23;
      local_150 = lVar23;
      pcVar17 = (char *)cv::String::allocate((String *)&local_158,0x21);
      uVar3 = s_Input_array_has_NULL_data_pointe_00461c58._24_8_;
      uVar2 = s_Input_array_has_NULL_data_pointe_00461c58._16_8_;
      uVar1 = s_Input_array_has_NULL_data_pointe_00461c58._8_8_;
      uVar33 = s_Input_array_has_NULL_data_pointe_00461c58._0_8_;
      pcVar17[0x20] = s_Input_array_has_NULL_data_pointe_00461c58[0x20];
      *(undefined8 *)pcVar17 = uVar33;
      *(undefined8 *)(pcVar17 + 8) = uVar1;
      *(undefined8 *)(pcVar17 + 0x10) = uVar2;
      *(undefined8 *)(pcVar17 + 0x18) = uVar3;
      cv::error(-0x1b,(String *)&local_158,"CvMatND* cvGetMatND(const CvArr*, CvMatND*, int*)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0x163);
      cv::String::deallocate((String *)&local_158);
      lVar23 = *(long *)(puVar19 + 6);
    }
    *(long *)(param_3 + 0x18) = lVar23;
    *(undefined8 *)(param_3 + 8) = 0;
    uVar24 = *puVar19;
    *(uint *)param_3 = uVar24;
    *(undefined4 *)(param_3 + 0x10) = 0;
    *(undefined4 *)(param_3 + 4) = 2;
    uVar20 = puVar19[1];
    *(uint *)(param_3 + 0x20) = puVar19[8];
    *(uint *)(param_3 + 0x24) = uVar20;
    *(uint *)(param_3 + 0x28) = puVar19[9];
    *(uint *)(param_3 + 0x2c) =
         (uVar24 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar24 & 7) << 1)) & 3);
  }
  if (0 < param_5) {
    *(int *)(param_3 + 4) = param_5;
  }
joined_r0x0026549c:
  if (local_15c != 0) {
    local_120 = (int *)0x0;
    local_118 = (int *)0x0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_120,0x26);
    uVar4 = s_COI_is_not_supported_by_this_ope_004621b0._36_2_;
    uVar3 = s_COI_is_not_supported_by_this_ope_004621b0._24_8_;
    uVar2 = s_COI_is_not_supported_by_this_ope_004621b0._16_8_;
    uVar1 = s_COI_is_not_supported_by_this_ope_004621b0._8_8_;
    uVar33 = s_COI_is_not_supported_by_this_ope_004621b0._0_8_;
    *(undefined4 *)(pcVar17 + 0x20) = s_COI_is_not_supported_by_this_ope_004621b0._32_4_;
    *(undefined2 *)(pcVar17 + 0x24) = uVar4;
    *(undefined8 *)pcVar17 = uVar33;
    *(undefined8 *)(pcVar17 + 8) = uVar1;
    *(undefined8 *)(pcVar17 + 0x10) = uVar2;
    *(undefined8 *)(pcVar17 + 0x18) = uVar3;
    cv::error(-0x18,(String *)&local_120,
              "CvArr* cvReshapeMatND(const CvArr*, int, CvArr*, int, int, int*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xa90);
    cv::String::deallocate((String *)&local_120);
  }
  return param_3;
}


==================================================================

### FUNC 00265f08 (1100 bytes) name=cvReshape

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint * cvReshape(uint *param_1,uint *param_2,int param_3,uint param_4)

{
  undefined8 uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined4 uVar11;
  uint uVar12;
  undefined8 *puVar13;
  void *__dest;
  char *pcVar14;
  uint uVar15;
  int iVar16;
  int local_14;
  uint *local_10;
  uint *local_8;
  
  if (param_2 == (uint *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaa0);
    cv::String::deallocate((String *)&local_10);
  }
  if ((((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42420000)) ||
      ((int)param_1[9] < 1)) || (((int)param_1[8] < 1 || (*(long *)(param_1 + 6) == 0)))) {
    local_14 = 0;
    param_1 = (uint *)cvGetMat(param_1,param_2,&local_14,1);
    if (local_14 != 0) {
      local_10 = (uint *)0x0;
      local_8 = (uint *)0x0;
      pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x14);
      uVar3 = s_COI_is_not_supported_004621d8._8_8_;
      uVar1 = s_COI_is_not_supported_004621d8._0_8_;
      *(undefined4 *)(pcVar14 + 0x10) = s_COI_is_not_supported_004621d8._16_4_;
      *(undefined8 *)pcVar14 = uVar1;
      *(undefined8 *)(pcVar14 + 8) = uVar3;
      cv::error(-0x18,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaa7);
      cv::String::deallocate((String *)&local_10);
    }
  }
  if (param_3 == 0) {
    param_3 = (*param_1 >> 3 & 0x1ff) + 1;
  }
  else if (3 < param_3 - 1U) {
    local_10 = (uint *)0x0;
    local_8 = (uint *)0x0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xf,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaad);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 != param_2) {
    uVar1 = *(undefined8 *)(param_1 + 2);
    *(undefined8 *)param_2 = *(undefined8 *)param_1;
    *(undefined8 *)(param_2 + 2) = uVar1;
    uVar12 = param_2[4];
    uVar1 = *(undefined8 *)(param_1 + 6);
    *(undefined8 *)(param_2 + 4) = *(undefined8 *)(param_1 + 4);
    *(undefined8 *)(param_2 + 6) = uVar1;
    *(undefined8 *)(param_2 + 8) = *(undefined8 *)(param_1 + 8);
    param_2[2] = 0;
    param_2[3] = 0;
    param_2[4] = uVar12;
  }
  uVar12 = *param_1;
  iVar16 = param_1[9] + (uVar12 >> 3 & 0x1ff) * param_1[9];
  if (iVar16 < param_3) {
LAB_00265fcc:
    uVar15 = param_1[8];
    if (param_4 == 0) {
      param_4 = 0;
      if (param_3 != 0) {
        param_4 = (int)(uVar15 * iVar16) / param_3;
      }
      if (param_4 == 0) goto LAB_00265fe0;
    }
LAB_002660b4:
    if (param_4 != uVar15) {
      uVar15 = iVar16 * uVar15;
      if ((uVar12 >> 0xe & 1) == 0) {
        local_10 = (uint *)0x0;
        local_8 = (uint *)0x0;
        puVar13 = (undefined8 *)cv::String::allocate((String *)&local_10,0x48);
        uVar9 = _DAT_00462228;
        uVar8 = DAT_00462220;
        uVar7 = DAT_00462218;
        uVar6 = DAT_00462210;
        uVar5 = DAT_00462208;
        uVar4 = DAT_00462200;
        uVar3 = DAT_004621f8;
        uVar1 = DAT_004621f0;
        puVar13[8] = s_changed_00462230._0_8_;
        *puVar13 = uVar1;
        puVar13[1] = uVar3;
        puVar13[2] = uVar4;
        puVar13[3] = uVar5;
        puVar13[4] = uVar6;
        puVar13[5] = uVar7;
        puVar13[6] = uVar8;
        puVar13[7] = uVar9;
        cv::error(-0xd,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xac6);
        cv::String::deallocate((String *)&local_10);
      }
      if (uVar15 < param_4) {
        local_10 = (uint *)0x0;
        local_8 = (uint *)0x0;
        pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x16);
        uVar10 = s_Bad_new_number_of_rows_00462240._20_2_;
        uVar3 = s_Bad_new_number_of_rows_00462240._8_8_;
        uVar1 = s_Bad_new_number_of_rows_00462240._0_8_;
        *(undefined4 *)(pcVar14 + 0x10) = s_Bad_new_number_of_rows_00462240._16_4_;
        *(undefined2 *)(pcVar14 + 0x14) = uVar10;
        *(undefined8 *)pcVar14 = uVar1;
        *(undefined8 *)(pcVar14 + 8) = uVar3;
        cv::error(-0xd3,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xac9);
        cv::String::deallocate((String *)&local_10);
      }
      iVar16 = 0;
      if (param_4 != 0) {
        iVar16 = (int)uVar15 / (int)param_4;
      }
      if (iVar16 * param_4 != uVar15) {
        local_10 = (uint *)0x0;
        local_8 = (uint *)0x0;
        __dest = (void *)cv::String::allocate((String *)&local_10,0x4e);
        memcpy(__dest,&DAT_00461f80,0x4e);
        cv::error(-5,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xacf);
        cv::String::deallocate((String *)&local_10);
      }
      param_2[8] = param_4;
      uVar12 = *param_1;
      param_2[1] = ((uint)(0x88442211L >> ((uVar12 & 7) << 2)) & 0xf) * iVar16;
      goto LAB_00265fec;
    }
  }
  else {
    iVar2 = 0;
    if (param_3 != 0) {
      iVar2 = iVar16 / param_3;
    }
    if (iVar16 != iVar2 * param_3) goto LAB_00265fcc;
    uVar15 = param_1[8];
    if (param_4 != 0) goto LAB_002660b4;
  }
LAB_00265fe0:
  param_2[8] = uVar15;
  param_2[1] = param_1[1];
LAB_00265fec:
  uVar15 = 0;
  if (param_3 != 0) {
    uVar15 = iVar16 / param_3;
  }
  if (uVar15 * param_3 != iVar16) {
    local_10 = (uint *)0x0;
    local_8 = (uint *)0x0;
    puVar13 = (undefined8 *)cv::String::allocate((String *)&local_10,0x3e);
    uVar10 = DAT_00462294;
    uVar11 = DAT_00462290;
    uVar7 = DAT_00462280;
    uVar6 = DAT_00462278;
    uVar5 = DAT_00462270;
    uVar4 = _LAB_00462268;
    uVar3 = DAT_00462260;
    uVar1 = DAT_00462258;
    puVar13[6] = DAT_00462288;
    *(undefined4 *)(puVar13 + 7) = uVar11;
    *(undefined2 *)((long)puVar13 + 0x3c) = uVar10;
    *puVar13 = uVar1;
    puVar13[1] = uVar3;
    puVar13[2] = uVar4;
    puVar13[3] = uVar5;
    puVar13[4] = uVar6;
    puVar13[5] = uVar7;
    cv::error(-0xf,(String *)&local_10,"CvMat* cvReshape(const CvArr*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xad9);
    cv::String::deallocate((String *)&local_10);
    uVar12 = *param_1;
  }
  param_2[9] = uVar15;
  *param_2 = (uVar12 & 7) + (param_3 + -1) * 8 | uVar12 & 0xfffff000;
  return param_2;
}


==================================================================

### FUNC 002663e0 (912 bytes) name=cvInitImageHeader

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 *
cvInitImageHeader(undefined8 *param_1,long param_2,uint param_3,int param_4,uint param_5,int param_6
                 )

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined2 uVar4;
  undefined4 uVar5;
  char cVar6;
  ulong uVar7;
  undefined4 *puVar8;
  undefined8 *puVar9;
  int iVar10;
  char *pcVar11;
  int iVar12;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x16);
    uVar4 = DAT_004622ac;
    uVar3 = DAT_004622a0;
    uVar2 = _DAT_00462298;
    *(undefined4 *)(puVar9 + 2) = DAT_004622a8;
    *(undefined2 *)((long)puVar9 + 0x14) = uVar4;
    *puVar9 = uVar2;
    puVar9[1] = uVar3;
    cv::error(-9,(String *)&local_10,
              "IplImage* cvInitImageHeader(IplImage*, CvSize, int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb67);
    cv::String::deallocate((String *)&local_10);
  }
  *param_1 = 0;
  param_1[1] = 0;
  uVar1 = param_4 - 1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  *(undefined4 *)param_1 = 0x90;
  iVar12 = (int)param_2;
  iVar10 = (int)((ulong)param_2 >> 0x20);
  if (uVar1 < 4) {
    uVar7 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar1 << 4;
    pcVar11 = *(char **)((long)&PTR_DAT_004f5a88 + uVar7);
    strncpy((char *)((long)param_1 + 0x14),*(char **)((long)&PTR_DAT_004f5a80 + uVar7),4);
    strncpy((char *)(param_1 + 3),pcVar11,4);
  }
  else {
    strncpy((char *)((long)param_1 + 0x14),"",4);
    strncpy((char *)(param_1 + 3),"",4);
  }
  if ((iVar12 < 0) || (param_2 < 0)) {
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0xd);
    cVar6 = s_Bad_input_roi_004622b0[0xc];
    uVar5 = s_Bad_input_roi_004622b0._8_4_;
    *(undefined8 *)pcVar11 = s_Bad_input_roi_004622b0._0_8_;
    *(undefined4 *)(pcVar11 + 8) = uVar5;
    pcVar11[0xc] = cVar6;
    cv::error(-0x19,(String *)&local_10,
              "IplImage* cvInitImageHeader(IplImage*, CvSize, int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb71);
    cv::String::deallocate((String *)&local_10);
  }
  if (((((param_3 != 1) && (((param_3 & 0x7fffffff) - 8 & 0xfffffff7) != 0)) &&
       ((param_3 & 0x7fffffff) != 0x20)) && (param_3 != 0x40)) || (param_4 < 0)) {
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x12);
    uVar3 = s_Unsupported_format_004622c0._8_8_;
    uVar2 = s_Unsupported_format_004622c0._0_8_;
    *(undefined2 *)(pcVar11 + 0x10) = s_Unsupported_format_004622c0._16_2_;
    *(undefined8 *)pcVar11 = uVar2;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    cv::error(-0x11,(String *)&local_10,
              "IplImage* cvInitImageHeader(IplImage*, CvSize, int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb78);
    cv::String::deallocate((String *)&local_10);
  }
  if (1 < param_5) {
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x10);
    uVar2 = s_Bad_input_origin_004622d8._8_8_;
    *(undefined8 *)pcVar11 = s_Bad_input_origin_004622d8._0_8_;
    *(undefined8 *)(pcVar11 + 8) = uVar2;
    cv::error(-0x14,(String *)&local_10,
              "IplImage* cvInitImageHeader(IplImage*, CvSize, int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb7a);
    cv::String::deallocate((String *)&local_10);
  }
  if ((param_6 - 4U & 0xfffffffb) != 0) {
    local_10 = (undefined8 *)0x0;
    local_8 = (undefined8 *)0x0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0xf);
    cVar6 = s_Bad_input_align_004622f0[0xe];
    uVar4 = s_Bad_input_align_004622f0._12_2_;
    uVar5 = s_Bad_input_align_004622f0._8_4_;
    *(undefined8 *)pcVar11 = s_Bad_input_align_004622f0._0_8_;
    *(undefined4 *)(pcVar11 + 8) = uVar5;
    *(undefined2 *)(pcVar11 + 0xc) = uVar4;
    pcVar11[0xe] = cVar6;
    cv::error(-0x15,(String *)&local_10,
              "IplImage* cvInitImageHeader(IplImage*, CvSize, int, int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb7d);
    cv::String::deallocate((String *)&local_10);
  }
  puVar8 = (undefined4 *)param_1[6];
  *(int *)(param_1 + 5) = iVar12;
  *(int *)((long)param_1 + 0x2c) = iVar10;
  if (puVar8 != (undefined4 *)0x0) {
    *puVar8 = 0;
    puVar8[2] = 0;
    puVar8[1] = 0;
    puVar8[3] = iVar12;
    puVar8[4] = iVar10;
  }
  if (param_4 < 1) {
    param_4 = 1;
  }
  *(int *)(param_1 + 1) = param_4;
  *(uint *)(param_1 + 2) = param_3;
  *(int *)((long)param_1 + 0x24) = param_6;
  *(uint *)(param_1 + 4) = param_5;
  uVar1 = param_6 + -1 + (param_4 * iVar12 * (param_3 & 0x7fffffff) + 7 >> 3) & -param_6;
  *(uint *)(param_1 + 0xc) = uVar1;
  *(uint *)(param_1 + 10) = iVar10 * uVar1;
  return param_1;
}


==================================================================

### FUNC 002667d4 (456 bytes) name=cvGetImage

uint * cvGetImage(uint *param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  uint *puVar3;
  uint *local_10;
  uint *local_8;
  
  if (param_2 == (uint *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"IplImage* cvGetImage(const CvArr*, IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaeb);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 != (uint *)0x0) {
    if (*param_1 == 0x90) {
      return param_1;
    }
    if ((((*param_1 & 0xffff0000) == 0x42420000) && (0 < (int)param_1[9])) && (0 < (int)param_1[8]))
    goto LAB_0026684c;
  }
  local_10 = (uint *)0x0;
  local_8 = (uint *)0x0;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0xce,(String *)&local_10,"IplImage* cvGetImage(const CvArr*, IplImage*)",
            "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaf2);
  cv::String::deallocate((String *)&local_10);
LAB_0026684c:
  puVar3 = *(uint **)(param_1 + 6);
  if (puVar3 == (uint *)0x0) {
    local_10 = puVar3;
    local_8 = puVar3;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"IplImage* cvGetImage(const CvArr*, IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xaf5);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = *param_1 & 7;
  if ((uVar1 - 3 < 2) || (uVar2 = 0, uVar1 == 1)) {
    uVar2 = 0x80000000;
  }
  cvInitImageHeader(param_2,CONCAT44(param_1[8],param_1[9]),
                    uVar2 | ((uint)(0x88442211L >> (uVar1 << 2)) & 0xf) << 3,
                    (*param_1 >> 3 & 0x1ff) + 1,0,4);
  cvSetData(param_2,*(undefined8 *)(param_1 + 6),param_1[1]);
  return param_2;
}


==================================================================

### FUNC 002669d8 (216 bytes) name=cvCreateImageHeader

undefined8 cvCreateImageHeader(undefined8 param_1,undefined4 param_2,int param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined1 *puVar3;
  undefined1 *puVar4;
  ulong uVar5;
  
  if (DAT_00531f10 == (code *)0x0) {
    uVar2 = cv::cvAlloc(0x90);
    cvInitImageHeader(uVar2,param_1,param_2,param_3,0,4);
  }
  else {
    uVar1 = param_3 - 1;
    if (uVar1 < 4) {
      uVar5 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar1 << 4;
      puVar3 = *(undefined1 **)((long)&PTR_DAT_004f5a80 + uVar5);
      puVar4 = *(undefined1 **)((long)&PTR_DAT_004f5a88 + uVar5);
    }
    else {
      puVar3 = &DAT_00472008;
      puVar4 = puVar3;
    }
    uVar2 = (*DAT_00531f10)(param_3,0,param_2,puVar3,puVar4,0,0,4,(int)param_1,
                            (int)((ulong)param_1 >> 0x20),0,0,0,0);
  }
  return uVar2;
}


==================================================================

### FUNC 00266ab0 (36 bytes) name=cvCreateImage

undefined8 cvCreateImage(void)

{
  undefined8 uVar1;
  
  uVar1 = cvCreateImageHeader();
  cvCreateData();
  return uVar1;
}


==================================================================

### FUNC 00266ad4 (164 bytes) name=cvReleaseImageHeader

void cvReleaseImageHeader(undefined8 *param_1)

{
  void *pvVar1;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvReleaseImageHeader(IplImage**)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xb9a);
    cv::String::deallocate((String *)&local_10);
  }
  pvVar1 = (void *)*param_1;
  if (pvVar1 != (void *)0x0) {
    *param_1 = 0;
    if (DAT_00531f20 == (code *)0x0) {
      cv::cvFree_(*(void **)((long)pvVar1 + 0x30));
      *(undefined8 *)((long)pvVar1 + 0x30) = 0;
      cv::cvFree_(pvVar1);
    }
    else {
      (*DAT_00531f20)(pvVar1,5);
    }
  }
  return;
}


==================================================================

### FUNC 00266b8c (140 bytes) name=cvReleaseImage

void cvReleaseImage(long *param_1)

{
  long *local_10;
  long *local_8;
  
  if (param_1 == (long *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvReleaseImage(IplImage**)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbb2);
    cv::String::deallocate((String *)&local_10);
  }
  local_10 = (long *)*param_1;
  if (local_10 != (long *)0x0) {
    *param_1 = 0;
    cvReleaseData(local_10);
    cvReleaseImageHeader(&local_10);
  }
  return;
}


==================================================================

### FUNC 00266c2c (508 bytes) name=cvSetImageROI

void cvSetImageROI(long param_1,long param_2,long param_3)

{
  void *__dest;
  long lVar1;
  undefined8 uVar2;
  undefined4 *puVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"void cvSetImageROI(IplImage*, CvRect)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbc3);
    cv::String::deallocate((String *)&local_10);
  }
  iVar8 = (int)param_3;
  iVar6 = (int)param_2;
  iVar7 = (int)((ulong)param_2 >> 0x20);
  iVar9 = (int)((ulong)param_3 >> 0x20);
  if ((((iVar8 < 0) || (param_3 < 0)) || (iVar4 = *(int *)(param_1 + 0x28), iVar4 <= iVar6)) ||
     (((iVar5 = *(int *)(param_1 + 0x2c), iVar5 <= iVar7 || (iVar6 + iVar8 < (int)(uint)(0 < iVar8))
       ) || (iVar9 + iVar7 < (int)(uint)(0 < iVar9))))) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_10,0xb8);
    memcpy(__dest,&DAT_00462300,0xb8);
    cv::error(-0xd7,(String *)&local_10,"void cvSetImageROI(IplImage*, CvRect)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbc9);
    cv::String::deallocate((String *)&local_10);
    iVar4 = *(int *)(param_1 + 0x28);
    iVar5 = *(int *)(param_1 + 0x2c);
  }
  iVar9 = iVar9 + iVar7;
  iVar8 = iVar6 + iVar8;
  lVar1 = *(long *)(param_1 + 0x30);
  if (iVar6 < 0) {
    iVar6 = 0;
  }
  if (param_2 < 0) {
    iVar7 = 0;
  }
  if (iVar8 < iVar4) {
    iVar4 = iVar8;
  }
  if (iVar9 < iVar5) {
    iVar5 = iVar9;
  }
  if (lVar1 == 0) {
    if (DAT_00531f28 == (code *)0x0) {
      puVar3 = (undefined4 *)cv::cvAlloc(0x14);
      *puVar3 = 0;
      puVar3[1] = iVar6;
      puVar3[2] = iVar7;
      puVar3[3] = iVar4 - iVar6;
      puVar3[4] = iVar5 - iVar7;
      *(undefined4 **)(param_1 + 0x30) = puVar3;
    }
    else {
      uVar2 = (*DAT_00531f28)();
      *(undefined8 *)(param_1 + 0x30) = uVar2;
    }
    return;
  }
  *(ulong *)(lVar1 + 0xc) = CONCAT44(iVar5 - iVar7,iVar4 - iVar6);
  *(ulong *)(lVar1 + 4) = CONCAT44(iVar7,iVar6);
  return;
}


==================================================================

### FUNC 00266e50 (152 bytes) name=cvResetImageROI

void cvResetImageROI(long param_1)

{
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"void cvResetImageROI(IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbe6);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(void **)(param_1 + 0x30) != (void *)0x0) {
    if (DAT_00531f20 == (code *)0x0) {
      cv::cvFree_(*(void **)(param_1 + 0x30));
      *(undefined8 *)(param_1 + 0x30) = 0;
    }
    else {
      (*DAT_00531f20)(param_1,4);
      *(undefined8 *)(param_1 + 0x30) = 0;
    }
  }
  return;
}


==================================================================

### FUNC 00266efc (216 bytes) name=cvGetImageROI

undefined1  [16] cvGetImageROI(long param_1)

{
  undefined1 auVar1 [16];
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  long lVar9;
  undefined4 uVar10;
  long local_10;
  long lStack_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    lStack_8 = param_1;
    pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar4 = s_Null_pointer_to_image_004623c0[0x14];
    uVar3 = s_Null_pointer_to_image_004623c0._8_8_;
    uVar2 = s_Null_pointer_to_image_004623c0._0_8_;
    *(undefined4 *)(pcVar6 + 0x10) = s_Null_pointer_to_image_004623c0._16_4_;
    pcVar6[0x14] = cVar4;
    *(undefined8 *)pcVar6 = uVar2;
    *(undefined8 *)(pcVar6 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_10,"CvRect cvGetImageROI(const IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xbfc);
    cv::String::deallocate((String *)&local_10);
  }
  lVar9 = *(long *)(param_1 + 0x30);
  if (lVar9 == 0) {
    uVar7 = *(undefined4 *)(param_1 + 0x28);
    uVar8 = 0;
    uVar5 = *(undefined4 *)(param_1 + 0x2c);
    uVar10 = uVar8;
  }
  else {
    uVar8 = *(undefined4 *)(lVar9 + 4);
    uVar7 = *(undefined4 *)(lVar9 + 0xc);
    uVar5 = *(undefined4 *)(lVar9 + 0x10);
    uVar10 = *(undefined4 *)(lVar9 + 8);
  }
  auVar1._12_4_ = uVar5;
  auVar1._8_4_ = uVar7;
  auVar1._4_4_ = uVar10;
  auVar1._0_4_ = uVar8;
  return auVar1;
}


==================================================================

### FUNC 00266fe8 (300 bytes) name=cvSetImageCOI

void cvSetImageCOI(long param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  uint *puVar4;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"void cvSetImageCOI(IplImage*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc0c);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(uint *)(param_1 + 8) < param_2) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x18,(String *)&local_10,"void cvSetImageCOI(IplImage*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc0f);
    cv::String::deallocate((String *)&local_10);
    puVar4 = *(uint **)(param_1 + 0x30);
  }
  else {
    puVar4 = *(uint **)(param_1 + 0x30);
  }
  if (puVar4 == (uint *)0x0) {
    if (param_2 != 0) {
      uVar1 = *(uint *)(param_1 + 0x28);
      uVar2 = *(uint *)(param_1 + 0x2c);
      if (DAT_00531f28 == (code *)0x0) {
        puVar4 = (uint *)cv::cvAlloc(0x14);
        *puVar4 = param_2;
        puVar4[1] = 0;
        puVar4[2] = 0;
        puVar4[3] = uVar1;
        puVar4[4] = uVar2;
        *(uint **)(param_1 + 0x30) = puVar4;
      }
      else {
        uVar3 = (*DAT_00531f28)(param_2,0);
        *(undefined8 *)(param_1 + 0x30) = uVar3;
      }
    }
  }
  else {
    *puVar4 = param_2;
  }
  return;
}


==================================================================

### FUNC 0026713c (116 bytes) name=cvGetImageCOI

undefined4 cvGetImageCOI(long param_1)

{
  undefined4 uVar1;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-9,(String *)&local_10,"int cvGetImageCOI(const IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc23);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = 0;
  if (*(undefined4 **)(param_1 + 0x30) != (undefined4 *)0x0) {
    uVar1 = **(undefined4 **)(param_1 + 0x30);
  }
  return uVar1;
}


==================================================================

### FUNC 002671c4 (376 bytes) name=cvCloneImage

void * cvCloneImage(int *param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  int iVar6;
  undefined8 uVar7;
  char *pcVar8;
  void *__dest;
  undefined4 *puVar9;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == (int *)0x0) || (*param_1 != 0x90)) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x10);
    uVar7 = s_Bad_image_header_004623d8._8_8_;
    *(undefined8 *)pcVar8 = s_Bad_image_header_004623d8._0_8_;
    *(undefined8 *)(pcVar8 + 8) = uVar7;
    cv::error(-5,(String *)&local_10,"IplImage* cvCloneImage(const IplImage*)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc2f);
    cv::String::deallocate((String *)&local_10);
  }
  if (DAT_00531f30 == (code *)0x0) {
    __dest = (void *)cv::cvAlloc(0x90);
    memcpy(__dest,param_1,0x90);
    *(undefined8 *)((long)__dest + 0x30) = 0;
    *(undefined8 *)((long)__dest + 0x88) = 0;
    puVar9 = *(undefined4 **)(param_1 + 0xc);
    *(undefined8 *)((long)__dest + 0x58) = 0;
    if (puVar9 != (undefined4 *)0x0) {
      uVar1 = puVar9[1];
      uVar2 = *puVar9;
      uVar3 = puVar9[2];
      uVar4 = puVar9[3];
      uVar5 = puVar9[4];
      if (DAT_00531f28 == (code *)0x0) {
        puVar9 = (undefined4 *)cv::cvAlloc(0x14);
        *puVar9 = uVar2;
        puVar9[1] = uVar1;
        puVar9[2] = uVar3;
        puVar9[3] = uVar4;
        puVar9[4] = uVar5;
      }
      else {
        puVar9 = (undefined4 *)(*DAT_00531f28)(uVar2);
      }
      *(undefined4 **)((long)__dest + 0x30) = puVar9;
    }
    if (*(long *)(param_1 + 0x16) != 0) {
      iVar6 = param_1[0x14];
      cvCreateData(__dest);
      memcpy(*(void **)((long)__dest + 0x58),*(void **)(param_1 + 0x16),(long)iVar6);
      return __dest;
    }
  }
  else {
    __dest = (void *)(*DAT_00531f30)(param_1);
  }
  return __dest;
}


==================================================================

### FUNC 00267350 (572 bytes) name=cvCheckTermCriteria

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvCheckTermCriteria(double param_1,ulong param_2,double param_3,uint param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined1 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  undefined8 *puVar8;
  void *pvVar9;
  double dVar10;
  undefined1 auVar11 [16];
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_2 & 0xfffffffc) != 0) {
    local_10 = 0;
    local_8 = 0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1d);
    uVar4 = LAB_0046240c;
    uVar3 = DAT_00462408;
    uVar2 = _LAB_004623f8;
    uVar1 = DAT_004623f0;
    puVar8[2] = DAT_00462400;
    *(undefined4 *)(puVar8 + 3) = uVar3;
    *(undefined1 *)((long)puVar8 + 0x1c) = uVar4;
    *puVar8 = uVar1;
    puVar8[1] = uVar2;
    cv::error(-5,(String *)&local_10,
              "CvTermCriteria cvCheckTermCriteria(CvTermCriteria, double, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc5d);
    cv::String::deallocate((String *)&local_10);
  }
  if (((param_2 & 1) != 0) && (param_4 = (uint)(param_2 >> 0x20), (int)param_4 < 1)) {
    local_10 = 0;
    local_8 = 0;
    pvVar9 = (void *)cv::String::allocate((String *)&local_10,0x3f);
    memcpy(pvVar9,&DAT_00462410,0x3f);
    cv::error(-5,(String *)&local_10,
              "CvTermCriteria cvCheckTermCriteria(CvTermCriteria, double, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc63);
    cv::String::deallocate((String *)&local_10);
  }
  if (((uint)param_2 >> 1 & 1) == 0) {
    param_3 = (double)(float)param_1;
  }
  else if (param_3 < 0.0) {
    local_10 = 0;
    local_8 = 0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_10,0x27);
    uVar4 = DAT_00462476;
    uVar7 = DAT_00462474;
    uVar6 = _DAT_00462468;
    uVar5 = DAT_00462460;
    uVar2 = DAT_00462458;
    uVar1 = DAT_00462450;
    *(undefined4 *)(puVar8 + 4) = DAT_00462470;
    *(undefined2 *)((long)puVar8 + 0x24) = uVar7;
    *(undefined1 *)((long)puVar8 + 0x26) = uVar4;
    *puVar8 = uVar1;
    puVar8[1] = uVar2;
    puVar8[2] = uVar5;
    puVar8[3] = uVar6;
    cv::error(-5,(String *)&local_10,
              "CvTermCriteria cvCheckTermCriteria(CvTermCriteria, double, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc6a);
    cv::String::deallocate((String *)&local_10);
  }
  if ((param_2 & 3) == 0) {
    local_10 = 0;
    local_8 = 0;
    pvVar9 = (void *)cv::String::allocate((String *)&local_10,0x4d);
    memcpy(pvVar9,"Neither accuracy nor maximum iterations number flags are set in criteria type",
           0x4d);
    cv::error(-5,(String *)&local_10,
              "CvTermCriteria cvCheckTermCriteria(CvTermCriteria, double, int)",
              "/builds/master_pack-android/opencv/modules/core/src/array.cpp",0xc72);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 <= 0.0) {
    dVar10 = 0.0;
  }
  else {
    dVar10 = (double)(float)param_3;
  }
  if ((int)param_4 < 1) {
    param_4 = 1;
  }
  auVar11._8_8_ = dVar10;
  auVar11._0_8_ = (ulong)param_4 << 0x20 | 3;
  return auVar11;
}


==================================================================

### FUNC 002675dc (32 bytes) name=operator()

/* cv::DefaultDeleter<CvMat>::TEMPNAMEPLACEHOLDERVALUE(CvMat*) const */

void __thiscall cv::DefaultDeleter<CvMat>::operator()(DefaultDeleter<CvMat> *this,CvMat *param_1)

{
  cvReleaseMat();
  return;
}


==================================================================

### FUNC 002675fc (32 bytes) name=operator()

/* cv::DefaultDeleter<_IplImage>::TEMPNAMEPLACEHOLDERVALUE(_IplImage*) const */

void __thiscall
cv::DefaultDeleter<_IplImage>::operator()(DefaultDeleter<_IplImage> *this,_IplImage *param_1)

{
  cvReleaseImage();
  return;
}


==================================================================

### FUNC 0026761c (32 bytes) name=operator()

/* cv::DefaultDeleter<CvMatND>::TEMPNAMEPLACEHOLDERVALUE(CvMatND*) const */

void __thiscall
cv::DefaultDeleter<CvMatND>::operator()(DefaultDeleter<CvMatND> *this,CvMatND *param_1)

{
  cvReleaseMat();
  return;
}


==================================================================

### FUNC 0026763c (32 bytes) name=operator()

/* cv::DefaultDeleter<CvSparseMat>::TEMPNAMEPLACEHOLDERVALUE(CvSparseMat*) const */

void __thiscall
cv::DefaultDeleter<CvSparseMat>::operator()(DefaultDeleter<CvSparseMat> *this,CvSparseMat *param_1)

{
  cvReleaseSparseMat();
  return;
}


==================================================================

### FUNC 0026765c (32 bytes) name=operator()

/* cv::DefaultDeleter<CvMemStorage>::TEMPNAMEPLACEHOLDERVALUE(CvMemStorage*) const */

void __thiscall
cv::DefaultDeleter<CvMemStorage>::operator()
          (DefaultDeleter<CvMemStorage> *this,CvMemStorage *param_1)

{
  cvReleaseMemStorage();
  return;
}


==================================================================

### FUNC 0026767c (32 bytes) name=operator()

/* cv::DefaultDeleter<CvFileStorage>::TEMPNAMEPLACEHOLDERVALUE(CvFileStorage*) const */

void __thiscall
cv::DefaultDeleter<CvFileStorage>::operator()
          (DefaultDeleter<CvFileStorage> *this,CvFileStorage *param_1)

{
  cvReleaseFileStorage();
  return;
}


==================================================================

### FUNC 0026769c (272 bytes) name=FUN_0026769c

void FUN_0026769c(long param_1,long param_2,long param_3,long param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  undefined1 uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  undefined1 *puVar8;
  undefined1 *puVar9;
  int iVar10;
  long lVar11;
  undefined1 *puVar12;
  long lVar13;
  undefined1 *puVar14;
  
  if (0 < param_6) {
    iVar6 = param_5 + -1;
    uVar5 = param_5 - 2U >> 1;
    lVar13 = 0;
    lVar1 = (ulong)uVar5 + 1;
    iVar4 = (uVar5 + 1) * 2;
    do {
      puVar12 = *(undefined1 **)(param_1 + lVar13 * 8);
      puVar14 = *(undefined1 **)(param_3 + lVar13 * 8);
      iVar7 = *(int *)(param_2 + lVar13 * 4);
      iVar2 = *(int *)(param_4 + lVar13 * 4);
      if (puVar12 == (undefined1 *)0x0) {
        iVar7 = 0;
        if (0 < iVar6) {
          iVar7 = 0;
          puVar12 = puVar14;
          do {
            puVar12[iVar2] = 0;
            iVar7 = iVar7 + 2;
            *puVar12 = 0;
            puVar12 = puVar12 + (iVar2 << 1);
          } while (iVar7 < iVar6);
          puVar14 = puVar14 + lVar1 * (iVar2 << 1);
          iVar7 = iVar4;
        }
        if (iVar7 < param_5) {
          *puVar14 = 0;
        }
      }
      else {
        if (iVar6 < 1) {
          iVar7 = 0;
        }
        else {
          iVar10 = 0;
          lVar11 = (long)(iVar7 << 1);
          puVar8 = puVar12;
          puVar9 = puVar14;
          do {
            iVar10 = iVar10 + 2;
            uVar3 = puVar8[iVar7];
            *puVar9 = *puVar8;
            puVar8 = puVar8 + lVar11;
            puVar9[iVar2] = uVar3;
            puVar9 = puVar9 + (iVar2 << 1);
          } while (iVar10 < iVar6);
          puVar12 = puVar12 + lVar11 * lVar1;
          puVar14 = puVar14 + lVar1 * (iVar2 << 1);
          iVar7 = iVar4;
        }
        if (iVar7 < param_5) {
          *puVar14 = *puVar12;
        }
      }
      lVar13 = lVar13 + 1;
    } while ((int)lVar13 < param_6);
  }
  return;
}


==================================================================

### FUNC 002677ac (272 bytes) name=FUN_002677ac

void FUN_002677ac(long param_1,long param_2,long param_3,long param_4,int param_5,int param_6)

{
  long lVar1;
  uint uVar2;
  undefined2 uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  undefined2 *puVar7;
  undefined2 *puVar8;
  int iVar9;
  ulong uVar10;
  ulong uVar11;
  undefined2 *puVar12;
  long lVar13;
  undefined2 *puVar14;
  
  if (0 < param_6) {
    iVar6 = param_5 + -1;
    uVar5 = param_5 - 2U >> 1;
    lVar13 = 0;
    lVar1 = (ulong)uVar5 + 1;
    iVar4 = (uVar5 + 1) * 2;
    do {
      puVar12 = *(undefined2 **)(param_1 + lVar13 * 8);
      puVar14 = *(undefined2 **)(param_3 + lVar13 * 8);
      uVar5 = *(uint *)(param_2 + lVar13 * 4);
      uVar2 = *(uint *)(param_4 + lVar13 * 4);
      if (puVar12 == (undefined2 *)0x0) {
        iVar9 = 0;
        if (0 < iVar6) {
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                   (ulong)(uVar2 << 1) << 1;
          iVar9 = 0;
          puVar12 = puVar14;
          do {
            *(undefined2 *)
             ((long)puVar12 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1)) =
                 0;
            iVar9 = iVar9 + 2;
            *puVar12 = 0;
            puVar12 = (undefined2 *)((long)puVar12 + uVar10);
          } while (iVar9 < iVar6);
          puVar14 = (undefined2 *)((long)puVar14 + lVar1 * uVar10);
          iVar9 = iVar4;
        }
        if (iVar9 < param_5) {
          *puVar14 = 0;
        }
      }
      else {
        if (iVar6 < 1) {
          iVar9 = 0;
        }
        else {
          iVar9 = 0;
          uVar11 = -(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                   (ulong)(uVar5 << 1) << 1;
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffffe00000000 |
                   (ulong)(uVar2 << 1) << 1;
          puVar7 = puVar12;
          puVar8 = puVar14;
          do {
            iVar9 = iVar9 + 2;
            uVar3 = *(undefined2 *)
                     ((long)puVar7 +
                     (-(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1));
            *puVar8 = *puVar7;
            puVar7 = (undefined2 *)((long)puVar7 + uVar11);
            *(undefined2 *)
             ((long)puVar8 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1)) =
                 uVar3;
            puVar8 = (undefined2 *)((long)puVar8 + uVar10);
          } while (iVar9 < iVar6);
          puVar12 = (undefined2 *)((long)puVar12 + uVar11 * lVar1);
          puVar14 = (undefined2 *)((long)puVar14 + lVar1 * uVar10);
          iVar9 = iVar4;
        }
        if (iVar9 < param_5) {
          *puVar14 = *puVar12;
        }
      }
      lVar13 = lVar13 + 1;
    } while ((int)lVar13 < param_6);
  }
  return;
}


==================================================================

### FUNC 002678bc (272 bytes) name=FUN_002678bc

void FUN_002678bc(long param_1,long param_2,long param_3,long param_4,int param_5,int param_6)

{
  long lVar1;
  uint uVar2;
  undefined4 uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  int iVar9;
  ulong uVar10;
  ulong uVar11;
  undefined4 *puVar12;
  long lVar13;
  undefined4 *puVar14;
  
  if (0 < param_6) {
    iVar6 = param_5 + -1;
    uVar5 = param_5 - 2U >> 1;
    lVar13 = 0;
    lVar1 = (ulong)uVar5 + 1;
    iVar4 = (uVar5 + 1) * 2;
    do {
      puVar12 = *(undefined4 **)(param_1 + lVar13 * 8);
      puVar14 = *(undefined4 **)(param_3 + lVar13 * 8);
      uVar5 = *(uint *)(param_2 + lVar13 * 4);
      uVar2 = *(uint *)(param_4 + lVar13 * 4);
      if (puVar12 == (undefined4 *)0x0) {
        iVar9 = 0;
        if (0 < iVar6) {
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                   (ulong)(uVar2 << 1) << 2;
          iVar9 = 0;
          puVar12 = puVar14;
          do {
            *(undefined4 *)
             ((long)puVar12 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2)) =
                 0;
            iVar9 = iVar9 + 2;
            *puVar12 = 0;
            puVar12 = (undefined4 *)((long)puVar12 + uVar10);
          } while (iVar9 < iVar6);
          puVar14 = (undefined4 *)((long)puVar14 + lVar1 * uVar10);
          iVar9 = iVar4;
        }
        if (iVar9 < param_5) {
          *puVar14 = 0;
        }
      }
      else {
        if (iVar6 < 1) {
          iVar9 = 0;
        }
        else {
          iVar9 = 0;
          uVar11 = -(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                   (ulong)(uVar5 << 1) << 2;
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                   (ulong)(uVar2 << 1) << 2;
          puVar7 = puVar12;
          puVar8 = puVar14;
          do {
            iVar9 = iVar9 + 2;
            uVar3 = *(undefined4 *)
                     ((long)puVar7 +
                     (-(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2));
            *puVar8 = *puVar7;
            puVar7 = (undefined4 *)((long)puVar7 + uVar11);
            *(undefined4 *)
             ((long)puVar8 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2)) =
                 uVar3;
            puVar8 = (undefined4 *)((long)puVar8 + uVar10);
          } while (iVar9 < iVar6);
          puVar12 = (undefined4 *)((long)puVar12 + uVar11 * lVar1);
          puVar14 = (undefined4 *)((long)puVar14 + lVar1 * uVar10);
          iVar9 = iVar4;
        }
        if (iVar9 < param_5) {
          *puVar14 = *puVar12;
        }
      }
      lVar13 = lVar13 + 1;
    } while ((int)lVar13 < param_6);
  }
  return;
}


==================================================================

### FUNC 002679cc (272 bytes) name=FUN_002679cc

void FUN_002679cc(long param_1,long param_2,long param_3,long param_4,int param_5,int param_6)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  int iVar8;
  undefined8 uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined8 *puVar12;
  long lVar13;
  undefined8 *puVar14;
  
  if (0 < param_6) {
    iVar5 = param_5 + -1;
    uVar4 = param_5 - 2U >> 1;
    lVar13 = 0;
    lVar1 = (ulong)uVar4 + 1;
    iVar3 = (uVar4 + 1) * 2;
    do {
      puVar12 = *(undefined8 **)(param_1 + lVar13 * 8);
      puVar14 = *(undefined8 **)(param_3 + lVar13 * 8);
      uVar4 = *(uint *)(param_2 + lVar13 * 4);
      uVar2 = *(uint *)(param_4 + lVar13 * 4);
      if (puVar12 == (undefined8 *)0x0) {
        iVar8 = 0;
        if (0 < iVar5) {
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                   (ulong)(uVar2 << 1) << 3;
          iVar8 = 0;
          puVar12 = puVar14;
          do {
            *(undefined8 *)
             ((long)puVar12 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3)) =
                 0;
            iVar8 = iVar8 + 2;
            *puVar12 = 0;
            puVar12 = (undefined8 *)((long)puVar12 + uVar10);
          } while (iVar8 < iVar5);
          puVar14 = (undefined8 *)((long)puVar14 + lVar1 * uVar10);
          iVar8 = iVar3;
        }
        if (iVar8 < param_5) {
          *puVar14 = 0;
        }
      }
      else {
        if (iVar5 < 1) {
          iVar8 = 0;
        }
        else {
          iVar8 = 0;
          uVar11 = -(ulong)((uVar4 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                   (ulong)(uVar4 << 1) << 3;
          uVar10 = -(ulong)((uVar2 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                   (ulong)(uVar2 << 1) << 3;
          puVar6 = puVar12;
          puVar7 = puVar14;
          do {
            iVar8 = iVar8 + 2;
            uVar9 = *(undefined8 *)
                     ((long)puVar6 +
                     (-(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3));
            *puVar7 = *puVar6;
            puVar6 = (undefined8 *)((long)puVar6 + uVar11);
            *(undefined8 *)
             ((long)puVar7 + (-(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3)) =
                 uVar9;
            puVar7 = (undefined8 *)((long)puVar7 + uVar10);
          } while (iVar8 < iVar5);
          puVar12 = (undefined8 *)((long)puVar12 + uVar11 * lVar1);
          puVar14 = (undefined8 *)((long)puVar14 + lVar1 * uVar10);
          iVar8 = iVar3;
        }
        if (iVar8 < param_5) {
          *puVar14 = *puVar12;
        }
      }
      lVar13 = lVar13 + 1;
    } while ((int)lVar13 < param_6);
  }
  return;
}


==================================================================

### FUNC 00267adc (680 bytes) name=FUN_00267adc

void FUN_00267adc(int *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int *piVar11;
  undefined8 *puVar12;
  ulong uVar13;
  ulong uVar14;
  int iVar15;
  ulong uVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  uint uVar20;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  double dVar25;
  double dVar26;
  
  dVar26 = *param_8;
  iVar6 = *param_7;
  dVar25 = param_8[1];
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar6 - 4U >> 2) + 1;
    uVar7 = uVar1 * 4;
    if (iVar6 + -3 < 1) {
      uVar7 = 0;
    }
    uVar2 = uVar7 + 1;
    uVar9 = iVar6 - uVar7;
    uVar3 = uVar7 + 2;
    lVar19 = (long)(int)uVar7;
    uVar4 = uVar7 + 3;
    uVar18 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar17 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    uVar16 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar4 << 2;
    do {
      if (0 < iVar6 + -3) {
        uVar10 = 0;
        puVar12 = param_5;
        piVar11 = param_1;
        do {
          uVar10 = uVar10 + 1;
          auVar23._0_8_ = (long)*piVar11;
          auVar23._8_8_ = (long)piVar11[1];
          auVar21._0_8_ = (long)piVar11[2];
          auVar21._8_8_ = (long)piVar11[3];
          auVar23 = NEON_scvtf(auVar23,8);
          auVar21 = NEON_scvtf(auVar21,8);
          puVar12[1] = CONCAT44((float)(dVar25 + dVar26 * auVar21._8_8_),
                                (float)(dVar25 + dVar26 * auVar21._0_8_));
          *puVar12 = CONCAT44((float)(dVar25 + dVar26 * auVar23._8_8_),
                              (float)(dVar25 + dVar26 * auVar23._0_8_));
          puVar12 = puVar12 + 2;
          piVar11 = piVar11 + 4;
        } while (uVar10 < uVar1);
      }
      if ((int)uVar7 < iVar6) {
        uVar10 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
        uVar13 = (ulong)uVar10;
        if (uVar9 < uVar10) {
          uVar13 = (ulong)uVar9;
        }
        if (uVar9 < 5) {
          uVar13 = (ulong)uVar9;
        }
        uVar10 = (uint)uVar13;
        if (uVar10 == 0) {
          uVar14 = (ulong)uVar7;
        }
        else {
          *(float *)((long)param_5 + lVar19 * 4) =
               (float)(dVar25 + (double)param_1[lVar19] * dVar26);
          if (uVar10 == 1) {
            uVar14 = (ulong)uVar2;
          }
          else {
            *(float *)((long)param_5 + uVar18) =
                 (float)(dVar25 + (double)*(int *)((long)param_1 + uVar18) * dVar26);
            if (uVar10 == 2) {
              uVar14 = (ulong)uVar3;
            }
            else {
              *(float *)((long)param_5 + uVar17) =
                   (float)(dVar25 + (double)*(int *)((long)param_1 + uVar17) * dVar26);
              if (uVar10 == 4) {
                uVar14 = (ulong)(uVar7 + 4);
                *(float *)((long)param_5 + uVar16) =
                     (float)(dVar25 + (double)*(int *)((long)param_1 + uVar16) * dVar26);
              }
              else {
                uVar14 = (ulong)uVar4;
              }
            }
          }
          if (uVar10 == uVar9) goto LAB_00267d38;
        }
        uVar5 = ((uVar9 - uVar10) - 4 >> 2) + 1;
        iVar8 = uVar5 * 4;
        if (2 < (uVar9 - 1) - uVar10) {
          uVar20 = 0;
          piVar11 = param_1 + uVar13 + lVar19;
          puVar12 = (undefined8 *)((long)param_5 + (uVar13 + lVar19) * 4);
          do {
            uVar20 = uVar20 + 1;
            auVar24._0_8_ = (long)*piVar11;
            auVar24._8_8_ = (long)piVar11[1];
            auVar22._0_8_ = (long)piVar11[2];
            auVar22._8_8_ = (long)piVar11[3];
            auVar23 = NEON_scvtf(auVar24,8);
            auVar21 = NEON_scvtf(auVar22,8);
            puVar12[1] = CONCAT44((float)(dVar25 + dVar26 * auVar21._8_8_),
                                  (float)(dVar25 + dVar26 * auVar21._0_8_));
            *puVar12 = CONCAT44((float)(dVar25 + dVar26 * auVar23._8_8_),
                                (float)(dVar25 + dVar26 * auVar23._0_8_));
            piVar11 = piVar11 + 4;
            puVar12 = puVar12 + 2;
          } while (uVar20 < uVar5);
          uVar14 = (ulong)(uint)((int)uVar14 + iVar8);
          if (iVar8 == uVar9 - uVar10) goto LAB_00267d38;
        }
        uVar13 = -(uVar14 >> 0x1f) & 0xfffffffc00000000 | uVar14 << 2;
        *(float *)((long)param_5 + uVar13) =
             (float)(dVar25 + (double)*(int *)((long)param_1 + uVar13) * dVar26);
        if ((int)uVar14 + 1 < iVar6) {
          *(float *)((long)param_5 + uVar13 + 4) =
               (float)(dVar25 + (double)*(int *)((long)param_1 + uVar13 + 4) * dVar26);
          if ((int)uVar14 + 2 < iVar6) {
            *(float *)((long)param_5 + uVar13 + 8) =
                 (float)(dVar25 + (double)*(int *)((long)param_1 + uVar13 + 8) * dVar26);
          }
        }
      }
LAB_00267d38:
      iVar15 = iVar15 + -1;
      param_1 = (int *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 00267d84 (764 bytes) name=FUN_00267d84

void FUN_00267d84(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  double *pdVar11;
  uint uVar12;
  int iVar13;
  undefined8 *puVar14;
  int iVar15;
  long lVar16;
  uint uVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  long lVar22;
  long lVar23;
  
  dVar21 = *param_8;
  iVar7 = *param_7;
  dVar20 = param_8[1];
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar7 - 4U >> 2) + 1;
    iVar8 = uVar1 * 4;
    if (iVar7 + -3 < 1) {
      iVar8 = 0;
    }
    iVar2 = iVar8 + 1;
    uVar10 = iVar7 - iVar8;
    lVar16 = (long)iVar8;
    iVar3 = iVar8 + 2;
    iVar4 = iVar8 + 3;
    iVar5 = iVar8 + 4;
    lVar23 = NEON_shl((long)iVar4,2);
    lVar22 = NEON_shl((long)iVar5,2);
    do {
      if (0 < iVar7 + -3) {
        uVar12 = 0;
        pdVar11 = param_1;
        puVar14 = param_5;
        do {
          uVar12 = uVar12 + 1;
          dVar19 = pdVar11[1];
          dVar18 = *pdVar11;
          puVar14[1] = CONCAT44((float)(dVar20 + dVar21 * pdVar11[3]),
                                (float)(dVar20 + dVar21 * pdVar11[2]));
          *puVar14 = CONCAT44((float)(dVar20 + dVar21 * dVar19),(float)(dVar20 + dVar21 * dVar18));
          pdVar11 = pdVar11 + 4;
          puVar14 = puVar14 + 2;
        } while (uVar12 < uVar1);
      }
      if (iVar8 < iVar7) {
        uVar12 = (uint)((ulong)param_1 >> 3) & 1;
        if (uVar10 < uVar12) {
          uVar12 = uVar10;
        }
        if (uVar10 < 6) {
          uVar12 = uVar10;
        }
        iVar13 = iVar8;
        if (uVar12 != 0) {
          *(float *)((long)param_5 + lVar16 * 4) = (float)(dVar20 + param_1[lVar16] * dVar21);
          iVar13 = iVar2;
          if ((((uVar12 != 1) &&
               (*(float *)((long)param_5 + (long)iVar2 * 4) =
                     (float)(dVar20 + param_1[iVar2] * dVar21), iVar13 = iVar3, uVar12 != 2)) &&
              (*(float *)((long)param_5 + (long)iVar3 * 4) =
                    (float)(dVar20 + param_1[iVar3] * dVar21), iVar13 = iVar4, uVar12 != 3)) &&
             (*(float *)((long)param_5 + lVar23) = (float)(dVar20 + param_1[iVar4] * dVar21),
             iVar13 = iVar5, uVar12 == 5)) {
            *(float *)((long)param_5 + lVar22) = (float)(dVar20 + param_1[iVar5] * dVar21);
            iVar13 = iVar8 + 5;
          }
          if (uVar12 == uVar10) goto LAB_00268028;
        }
        uVar6 = ((uVar10 - uVar12) - 4 >> 2) + 1;
        iVar9 = uVar6 * 4;
        if (2 < (uVar10 - 1) - uVar12) {
          uVar17 = 0;
          pdVar11 = param_1 + (ulong)uVar12 + lVar16;
          puVar14 = (undefined8 *)((long)param_5 + ((ulong)uVar12 + lVar16) * 4);
          do {
            uVar17 = uVar17 + 1;
            dVar19 = pdVar11[1];
            dVar18 = *pdVar11;
            puVar14[1] = CONCAT44((float)(dVar20 + dVar21 * pdVar11[3]),
                                  (float)(dVar20 + dVar21 * pdVar11[2]));
            *puVar14 = CONCAT44((float)(dVar20 + dVar21 * dVar19),(float)(dVar20 + dVar21 * dVar18))
            ;
            pdVar11 = pdVar11 + 4;
            puVar14 = puVar14 + 2;
          } while (uVar17 < uVar6);
          iVar13 = iVar13 + iVar9;
          if (iVar9 == uVar10 - uVar12) goto LAB_00268028;
        }
        iVar9 = iVar13 + 1;
        *(float *)((long)param_5 + (long)iVar13 * 4) = (float)(dVar20 + param_1[iVar13] * dVar21);
        if (iVar9 < iVar7) {
          iVar13 = iVar13 + 2;
          *(float *)((long)param_5 + (long)iVar9 * 4) = (float)(dVar20 + param_1[iVar9] * dVar21);
          if (iVar13 < iVar7) {
            *(float *)((long)param_5 + (long)iVar13 * 4) =
                 (float)(dVar20 + param_1[iVar13] * dVar21);
          }
        }
      }
LAB_00268028:
      iVar15 = iVar15 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 00268080 (2236 bytes) name=FUN_00268080

void FUN_00268080(double *param_1,long param_2,undefined8 param_3,undefined8 param_4,double *param_5
                 ,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  byte bVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  byte bVar15;
  byte bVar16;
  byte bVar17;
  byte bVar18;
  byte bVar19;
  long lVar20;
  byte *pbVar21;
  double *pdVar22;
  long lVar23;
  int iVar24;
  int iVar25;
  long lVar26;
  double *pdVar27;
  uint uVar28;
  uint uVar29;
  long lVar30;
  long lVar31;
  double dVar32;
  double dVar33;
  undefined1 auVar34 [16];
  long lVar35;
  long lVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  long lVar52;
  long lVar53;
  long lVar54;
  
  dVar33 = *param_8;
  iVar6 = *param_7;
  iVar25 = param_7[1] + -1;
  dVar32 = param_8[1];
  if (param_7[1] != 0) {
    uVar12 = iVar6 - 4;
    iVar13 = iVar6 + -3;
    uVar11 = uVar12 >> 2;
    uVar1 = uVar11 + 1;
    uVar2 = (uVar11 - 3 >> 2) + 1;
    iVar8 = uVar2 * 0x10;
    if (uVar12 < 0xc) {
      iVar8 = 0;
    }
    iVar9 = uVar1 * 4;
    if (iVar13 < 1) {
      iVar9 = 0;
    }
    uVar14 = iVar6 - iVar9;
    lVar26 = (long)iVar9;
    lVar35 = NEON_shl((ulong)uVar1,2);
    lVar20 = (long)iVar8;
    lVar31 = (long)(iVar8 + 4);
    lVar53 = NEON_shl(lVar20,3);
    lVar30 = (long)(iVar8 + 8);
    lVar52 = NEON_shl(lVar31,3);
    lVar54 = NEON_shl(lVar26 + (ulong)uVar14,3);
    lVar36 = NEON_shl(lVar30,3);
    do {
      if (0 < iVar13) {
        if ((param_1 < param_5 + (ulong)uVar1 * 4 && param_5 < (double *)((long)param_1 + lVar35))
           || (uVar1 < 4)) {
          pbVar21 = (byte *)((long)param_1 + 1);
          pdVar22 = param_5;
          do {
            pbVar5 = pbVar21 + 4;
            bVar7 = pbVar21[-1];
            pdVar22[1] = dVar32 + (double)*pbVar21 * dVar33;
            *pdVar22 = dVar32 + (double)bVar7 * dVar33;
            bVar7 = pbVar21[1];
            pdVar22[3] = dVar32 + (double)pbVar21[2] * dVar33;
            pdVar22[2] = dVar32 + (double)bVar7 * dVar33;
            pbVar21 = pbVar5;
            pdVar22 = pdVar22 + 4;
          } while (pbVar5 != (byte *)((long)param_1 + (ulong)uVar11 * 4 + 5));
        }
        else {
          if (0xb < uVar12) {
            uVar28 = 0;
            pdVar22 = param_1;
            pdVar27 = param_5;
            do {
              bVar7 = *(byte *)((long)pdVar22 + 10);
              bVar15 = *(byte *)((long)pdVar22 + 0xb);
              bVar16 = *(byte *)((long)pdVar22 + 0xc);
              bVar17 = *(byte *)((long)pdVar22 + 0xd);
              bVar18 = *(byte *)((long)pdVar22 + 0xe);
              bVar19 = *(byte *)((long)pdVar22 + 0xf);
              uVar28 = uVar28 + 1;
              auVar47._0_8_ =
                   (long)(int)(CONCAT12(*(byte *)((long)pdVar22 + 1),(ushort)*(byte *)pdVar22) &
                              0xffff);
              auVar47._8_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 1);
              auVar43._0_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 2);
              auVar43._8_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 3);
              auVar46._0_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 4);
              auVar46._8_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 5);
              auVar37._0_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 6);
              auVar37._8_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 7);
              auVar41 = NEON_scvtf(auVar47,8);
              auVar40 = NEON_scvtf(auVar43,8);
              auVar47 = NEON_scvtf(auVar46,8);
              auVar37 = NEON_scvtf(auVar37,8);
              auVar42._0_8_ =
                   (long)(int)(CONCAT12(*(byte *)((long)pdVar22 + 9),(ushort)*(byte *)(pdVar22 + 1))
                              & 0xffff);
              auVar42._8_8_ = (long)(int)(uint)*(byte *)((long)pdVar22 + 9);
              pdVar27[1] = dVar32 + dVar33 * auVar41._8_8_;
              *pdVar27 = dVar32 + dVar33 * auVar41._0_8_;
              auVar43 = NEON_scvtf(auVar42,8);
              auVar41._0_8_ = (long)(int)(uint)bVar7;
              auVar41._8_8_ = (long)(int)(uint)bVar15;
              pdVar27[3] = dVar32 + dVar33 * auVar40._8_8_;
              pdVar27[2] = dVar32 + dVar33 * auVar40._0_8_;
              auVar41 = NEON_scvtf(auVar41,8);
              auVar50._0_8_ = (long)(int)(uint)bVar16;
              auVar50._8_8_ = (long)(int)(uint)bVar17;
              auVar40._0_8_ = (long)(int)(uint)bVar18;
              auVar40._8_8_ = (long)(int)(uint)bVar19;
              pdVar27[5] = dVar32 + dVar33 * auVar47._8_8_;
              pdVar27[4] = dVar32 + dVar33 * auVar47._0_8_;
              pdVar27[7] = dVar32 + dVar33 * auVar37._8_8_;
              pdVar27[6] = dVar32 + dVar33 * auVar37._0_8_;
              auVar40 = NEON_scvtf(auVar40,8);
              auVar37 = NEON_scvtf(auVar50,8);
              pdVar27[9] = dVar32 + dVar33 * auVar43._8_8_;
              pdVar27[8] = dVar32 + dVar33 * auVar43._0_8_;
              pdVar27[0xb] = dVar32 + dVar33 * auVar41._8_8_;
              pdVar27[10] = dVar32 + dVar33 * auVar41._0_8_;
              pdVar27[0xd] = dVar32 + dVar33 * auVar37._8_8_;
              pdVar27[0xc] = dVar32 + dVar33 * auVar37._0_8_;
              pdVar27[0xf] = dVar32 + dVar33 * auVar40._8_8_;
              pdVar27[0xe] = dVar32 + dVar33 * auVar40._0_8_;
              pdVar22 = pdVar22 + 2;
              pdVar27 = pdVar27 + 0x10;
            } while (uVar28 < uVar2);
            if (uVar1 == uVar2 * 4) goto LAB_00268510;
          }
          bVar7 = *(byte *)((long)param_1 + lVar20 + 1);
          *(double *)((long)param_5 + lVar53) =
               dVar32 + (double)*(byte *)((long)param_1 + lVar20) * dVar33;
          *(double *)((long)param_5 + lVar53 + 8) = dVar32 + (double)bVar7 * dVar33;
          bVar7 = *(byte *)((long)param_1 + lVar20 + 3);
          *(double *)((long)param_5 + lVar53 + 0x10) =
               dVar32 + (double)*(byte *)((long)param_1 + lVar20 + 2) * dVar33;
          *(double *)((long)param_5 + lVar53 + 0x18) = dVar32 + (double)bVar7 * dVar33;
          if (iVar8 + 4 < iVar13) {
            bVar7 = *(byte *)((long)param_1 + lVar31 + 1);
            *(double *)((long)param_5 + lVar52) =
                 dVar32 + (double)*(byte *)((long)param_1 + lVar31) * dVar33;
            *(double *)((long)param_5 + lVar52 + 8) = dVar32 + (double)bVar7 * dVar33;
            bVar7 = *(byte *)((long)param_1 + lVar31 + 3);
            *(double *)((long)param_5 + lVar52 + 0x10) =
                 dVar32 + (double)*(byte *)((long)param_1 + lVar31 + 2) * dVar33;
            *(double *)((long)param_5 + lVar52 + 0x18) = dVar32 + (double)bVar7 * dVar33;
            if (iVar8 + 8 < iVar13) {
              bVar7 = *(byte *)((long)param_1 + lVar30 + 1);
              *(double *)((long)param_5 + lVar36) =
                   dVar32 + (double)*(byte *)((long)param_1 + lVar30) * dVar33;
              *(double *)((long)param_5 + lVar36 + 8) = dVar32 + (double)bVar7 * dVar33;
              bVar7 = *(byte *)((long)param_1 + lVar30 + 3);
              *(double *)((long)param_5 + lVar36 + 0x10) =
                   dVar32 + (double)*(byte *)((long)param_1 + lVar30 + 2) * dVar33;
              *(double *)((long)param_5 + lVar36 + 0x18) = dVar32 + (double)bVar7 * dVar33;
            }
          }
        }
      }
LAB_00268510:
      if (iVar9 < iVar6) {
        pdVar22 = param_5 + lVar26;
        pbVar21 = (byte *)((long)param_1 + lVar26);
        if ((pdVar22 < (double *)((long)param_1 + lVar26 + (ulong)uVar14) &&
             pbVar21 < (byte *)((long)param_5 + lVar54)) || (uVar14 < 0x14)) {
          lVar23 = 0;
          do {
            pdVar22[lVar23] = dVar32 + (double)pbVar21[lVar23] * dVar33;
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar6 + -1) - iVar9) + 1);
        }
        else {
          uVar28 = (uint)((ulong)pdVar22 >> 3) & 1;
          if (uVar14 < uVar28) {
            uVar28 = uVar14;
          }
          iVar24 = iVar9;
          if (uVar28 != 0) {
            *pdVar22 = dVar32 + (double)*pbVar21 * dVar33;
            iVar24 = iVar9 + 1;
          }
          uVar3 = ((uVar14 - uVar28) - 0x10 >> 4) + 1;
          uVar29 = 0;
          iVar10 = uVar3 * 0x10;
          pdVar22 = param_5 + (ulong)uVar28 + lVar26;
          pbVar21 = (byte *)((long)param_1 + lVar26 + (ulong)uVar28);
          do {
            bVar7 = pbVar21[0xc];
            bVar15 = pbVar21[0xd];
            bVar16 = pbVar21[0xe];
            bVar17 = pbVar21[0xf];
            uVar29 = uVar29 + 1;
            auVar48._0_8_ = (long)(int)(CONCAT12(pbVar21[1],(ushort)*pbVar21) & 0xffff);
            auVar48._8_8_ = (long)(int)(uint)pbVar21[1];
            auVar51._0_8_ = (long)(int)(uint)pbVar21[2];
            auVar51._8_8_ = (long)(int)(uint)pbVar21[3];
            auVar44._0_8_ = (long)(int)(uint)pbVar21[4];
            auVar44._8_8_ = (long)(int)(uint)pbVar21[5];
            auVar38._0_8_ = (long)(int)(uint)pbVar21[6];
            auVar38._8_8_ = (long)(int)(uint)pbVar21[7];
            auVar41 = NEON_scvtf(auVar48,8);
            auVar43 = NEON_scvtf(auVar51,8);
            auVar49._0_8_ = (long)(int)(CONCAT12(pbVar21[9],(ushort)pbVar21[8]) & 0xffff);
            auVar49._8_8_ = (long)(int)(uint)pbVar21[9];
            auVar40 = NEON_scvtf(auVar44,8);
            auVar37 = NEON_scvtf(auVar38,8);
            auVar39._0_8_ = (long)(int)(uint)pbVar21[10];
            auVar39._8_8_ = (long)(int)(uint)pbVar21[0xb];
            pdVar22[1] = dVar32 + dVar33 * auVar41._8_8_;
            *pdVar22 = dVar32 + dVar33 * auVar41._0_8_;
            auVar50 = NEON_scvtf(auVar49,8);
            auVar41 = NEON_scvtf(auVar39,8);
            pdVar22[3] = dVar32 + dVar33 * auVar43._8_8_;
            pdVar22[2] = dVar32 + dVar33 * auVar43._0_8_;
            auVar45._0_8_ = (long)(int)(uint)bVar7;
            auVar45._8_8_ = (long)(int)(uint)bVar15;
            auVar34._0_8_ = (long)(int)(uint)bVar16;
            auVar34._8_8_ = (long)(int)(uint)bVar17;
            pdVar22[5] = dVar32 + dVar33 * auVar40._8_8_;
            pdVar22[4] = dVar32 + dVar33 * auVar40._0_8_;
            auVar43 = NEON_scvtf(auVar45,8);
            auVar40 = NEON_scvtf(auVar34,8);
            pdVar22[7] = dVar32 + dVar33 * auVar37._8_8_;
            pdVar22[6] = dVar32 + dVar33 * auVar37._0_8_;
            pdVar22[9] = dVar32 + dVar33 * auVar50._8_8_;
            pdVar22[8] = dVar32 + dVar33 * auVar50._0_8_;
            pdVar22[0xb] = dVar32 + dVar33 * auVar41._8_8_;
            pdVar22[10] = dVar32 + dVar33 * auVar41._0_8_;
            pdVar22[0xd] = dVar32 + dVar33 * auVar43._8_8_;
            pdVar22[0xc] = dVar32 + dVar33 * auVar43._0_8_;
            pdVar22[0xf] = dVar32 + dVar33 * auVar40._8_8_;
            pdVar22[0xe] = dVar32 + dVar33 * auVar40._0_8_;
            pdVar22 = pdVar22 + 0x10;
            pbVar21 = pbVar21 + 0x10;
          } while (uVar29 < uVar3);
          iVar24 = iVar24 + iVar10;
          if (uVar14 - uVar28 != iVar10) {
            iVar10 = iVar24 + 1;
            param_5[iVar24] = dVar32 + (double)*(byte *)((long)param_1 + (long)iVar24) * dVar33;
            if (iVar10 < iVar6) {
              iVar4 = iVar24 + 2;
              param_5[iVar10] = dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) * dVar33;
              if (iVar4 < iVar6) {
                iVar10 = iVar24 + 3;
                param_5[iVar4] = dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) * dVar33;
                if (iVar10 < iVar6) {
                  iVar4 = iVar24 + 4;
                  param_5[iVar10] =
                       dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) * dVar33;
                  if (iVar4 < iVar6) {
                    iVar10 = iVar24 + 5;
                    param_5[iVar4] =
                         dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) * dVar33;
                    if (iVar10 < iVar6) {
                      iVar4 = iVar24 + 6;
                      param_5[iVar10] =
                           dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) * dVar33;
                      if (iVar4 < iVar6) {
                        iVar10 = iVar24 + 7;
                        param_5[iVar4] =
                             dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) * dVar33;
                        if (iVar10 < iVar6) {
                          iVar4 = iVar24 + 8;
                          param_5[iVar10] =
                               dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) * dVar33;
                          if (iVar4 < iVar6) {
                            iVar10 = iVar24 + 9;
                            param_5[iVar4] =
                                 dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) * dVar33;
                            if (iVar10 < iVar6) {
                              iVar4 = iVar24 + 10;
                              param_5[iVar10] =
                                   dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) * dVar33
                              ;
                              if (iVar4 < iVar6) {
                                iVar10 = iVar24 + 0xb;
                                param_5[iVar4] =
                                     dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) *
                                              dVar33;
                                if (iVar10 < iVar6) {
                                  iVar4 = iVar24 + 0xc;
                                  param_5[iVar10] =
                                       dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10) *
                                                dVar33;
                                  if (iVar4 < iVar6) {
                                    iVar10 = iVar24 + 0xd;
                                    param_5[iVar4] =
                                         dVar32 + (double)*(byte *)((long)param_1 + (long)iVar4) *
                                                  dVar33;
                                    if (iVar10 < iVar6) {
                                      iVar24 = iVar24 + 0xe;
                                      param_5[iVar10] =
                                           dVar32 + (double)*(byte *)((long)param_1 + (long)iVar10)
                                                    * dVar33;
                                      if (iVar24 < iVar6) {
                                        param_5[iVar24] =
                                             dVar32 + (double)*(byte *)((long)param_1 + (long)iVar24
                                                                       ) * dVar33;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar25 = iVar25 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar25 != -1);
  }
  return;
}


==================================================================

### FUNC 0026893c (2236 bytes) name=FUN_0026893c

void FUN_0026893c(double *param_1,long param_2,undefined8 param_3,undefined8 param_4,double *param_5
                 ,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  int iVar6;
  byte bVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  char cVar16;
  char cVar17;
  char cVar18;
  char cVar19;
  char cVar20;
  long lVar21;
  char *pcVar22;
  double *pdVar23;
  long lVar24;
  int iVar25;
  int iVar26;
  long lVar27;
  double *pdVar28;
  uint uVar29;
  uint uVar30;
  long lVar31;
  long lVar32;
  double dVar33;
  double dVar34;
  undefined1 auVar35 [16];
  long lVar36;
  long lVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  long lVar53;
  long lVar54;
  long lVar55;
  
  dVar34 = *param_8;
  iVar6 = *param_7;
  iVar26 = param_7[1] + -1;
  dVar33 = param_8[1];
  if (param_7[1] != 0) {
    uVar13 = iVar6 - 4;
    iVar14 = iVar6 + -3;
    uVar12 = uVar13 >> 2;
    uVar1 = uVar12 + 1;
    uVar2 = (uVar12 - 3 >> 2) + 1;
    iVar9 = uVar2 * 0x10;
    if (uVar13 < 0xc) {
      iVar9 = 0;
    }
    iVar10 = uVar1 * 4;
    if (iVar14 < 1) {
      iVar10 = 0;
    }
    uVar15 = iVar6 - iVar10;
    lVar27 = (long)iVar10;
    lVar36 = NEON_shl((ulong)uVar1,2);
    lVar21 = (long)iVar9;
    lVar32 = (long)(iVar9 + 4);
    lVar54 = NEON_shl(lVar21,3);
    lVar31 = (long)(iVar9 + 8);
    lVar53 = NEON_shl(lVar32,3);
    lVar55 = NEON_shl(lVar27 + (ulong)uVar15,3);
    lVar37 = NEON_shl(lVar31,3);
    do {
      if (0 < iVar14) {
        if ((param_1 < param_5 + (ulong)uVar1 * 4 && param_5 < (double *)((long)param_1 + lVar36))
           || (uVar1 < 4)) {
          pcVar22 = (char *)((long)param_1 + 1);
          pdVar23 = param_5;
          do {
            pcVar5 = pcVar22 + 4;
            bVar7 = pcVar22[-1];
            pdVar23[1] = dVar33 + (double)(int)*pcVar22 * dVar34;
            *pdVar23 = dVar33 + (double)bVar7 * dVar34;
            bVar7 = pcVar22[1];
            pdVar23[3] = dVar33 + (double)(byte)pcVar22[2] * dVar34;
            pdVar23[2] = dVar33 + (double)bVar7 * dVar34;
            pcVar22 = pcVar5;
            pdVar23 = pdVar23 + 4;
          } while (pcVar5 != (char *)((long)param_1 + (ulong)uVar12 * 4 + 5));
        }
        else {
          if (0xb < uVar13) {
            uVar29 = 0;
            pdVar23 = param_1;
            pdVar28 = param_5;
            do {
              cVar8 = *(char *)((long)pdVar23 + 10);
              cVar16 = *(char *)((long)pdVar23 + 0xb);
              cVar17 = *(char *)((long)pdVar23 + 0xc);
              cVar18 = *(char *)((long)pdVar23 + 0xd);
              cVar19 = *(char *)((long)pdVar23 + 0xe);
              cVar20 = *(char *)((long)pdVar23 + 0xf);
              uVar29 = uVar29 + 1;
              auVar48._0_8_ = (long)(int)(short)*(char *)pdVar23;
              auVar48._8_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 1);
              auVar44._0_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 2);
              auVar44._8_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 3);
              auVar47._0_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 4);
              auVar47._8_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 5);
              auVar38._0_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 6);
              auVar38._8_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 7);
              auVar42 = NEON_scvtf(auVar48,8);
              auVar41 = NEON_scvtf(auVar44,8);
              auVar48 = NEON_scvtf(auVar47,8);
              auVar38 = NEON_scvtf(auVar38,8);
              auVar43._0_8_ = (long)(int)(short)*(char *)(pdVar23 + 1);
              auVar43._8_8_ = (long)(int)(short)*(char *)((long)pdVar23 + 9);
              pdVar28[1] = dVar33 + dVar34 * auVar42._8_8_;
              *pdVar28 = dVar33 + dVar34 * auVar42._0_8_;
              auVar44 = NEON_scvtf(auVar43,8);
              auVar42._0_8_ = (long)(int)(short)cVar8;
              auVar42._8_8_ = (long)(int)(short)cVar16;
              pdVar28[3] = dVar33 + dVar34 * auVar41._8_8_;
              pdVar28[2] = dVar33 + dVar34 * auVar41._0_8_;
              auVar42 = NEON_scvtf(auVar42,8);
              auVar51._0_8_ = (long)(int)(short)cVar17;
              auVar51._8_8_ = (long)(int)(short)cVar18;
              auVar41._0_8_ = (long)(int)(short)cVar19;
              auVar41._8_8_ = (long)(int)(short)cVar20;
              pdVar28[5] = dVar33 + dVar34 * auVar48._8_8_;
              pdVar28[4] = dVar33 + dVar34 * auVar48._0_8_;
              pdVar28[7] = dVar33 + dVar34 * auVar38._8_8_;
              pdVar28[6] = dVar33 + dVar34 * auVar38._0_8_;
              auVar41 = NEON_scvtf(auVar41,8);
              auVar38 = NEON_scvtf(auVar51,8);
              pdVar28[9] = dVar33 + dVar34 * auVar44._8_8_;
              pdVar28[8] = dVar33 + dVar34 * auVar44._0_8_;
              pdVar28[0xb] = dVar33 + dVar34 * auVar42._8_8_;
              pdVar28[10] = dVar33 + dVar34 * auVar42._0_8_;
                    /* try { // try from 00268c68 to 00368c6b has its CatchHandler @ 00268c74 */
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00268c68 with catch @ 00268c74
                        */
              pdVar28[0xd] = dVar33 + dVar34 * auVar38._8_8_;
              pdVar28[0xc] = dVar33 + dVar34 * auVar38._0_8_;
              pdVar28[0xf] = dVar33 + dVar34 * auVar41._8_8_;
              pdVar28[0xe] = dVar33 + dVar34 * auVar41._0_8_;
              pdVar23 = pdVar23 + 2;
              pdVar28 = pdVar28 + 0x10;
            } while (uVar29 < uVar2);
            if (uVar1 == uVar2 * 4) goto LAB_00268dcc;
          }
                    /* try { // try from 00268c9c to 00368c9f has its CatchHandler @ 00268cfc */
          cVar8 = *(char *)((long)param_1 + lVar21 + 1);
          *(double *)((long)param_5 + lVar54) =
               dVar33 + (double)(int)*(char *)((long)param_1 + lVar21) * dVar34;
          *(double *)((long)param_5 + lVar54 + 8) = dVar33 + (double)(int)cVar8 * dVar34;
          cVar8 = *(char *)((long)param_1 + lVar21 + 3);
                    /* try { // try from 00268ce4 to 00368ce7 has its CatchHandler @ 00268cf8 */
          *(double *)((long)param_5 + lVar54 + 0x10) =
               dVar33 + (double)(int)*(char *)((long)param_1 + lVar21 + 2) * dVar34;
                    /* catch() { ... } // from try @ 00268ce4 with catch @ 00268cf8 */
          *(double *)((long)param_5 + lVar54 + 0x18) = dVar33 + (double)(int)cVar8 * dVar34;
                    /* catch() { ... } // from try @ 00268c9c with catch @ 00268cfc */
          if (iVar9 + 4 < iVar14) {
            cVar8 = *(char *)((long)param_1 + lVar32 + 1);
            *(double *)((long)param_5 + lVar53) =
                 dVar33 + (double)(int)*(char *)((long)param_1 + lVar32) * dVar34;
            *(double *)((long)param_5 + lVar53 + 8) = dVar33 + (double)(int)cVar8 * dVar34;
            cVar8 = *(char *)((long)param_1 + lVar32 + 3);
            *(double *)((long)param_5 + lVar53 + 0x10) =
                 dVar33 + (double)(int)*(char *)((long)param_1 + lVar32 + 2) * dVar34;
            *(double *)((long)param_5 + lVar53 + 0x18) = dVar33 + (double)(int)cVar8 * dVar34;
            if (iVar9 + 8 < iVar14) {
              cVar8 = *(char *)((long)param_1 + lVar31 + 1);
              *(double *)((long)param_5 + lVar37) =
                   dVar33 + (double)(int)*(char *)((long)param_1 + lVar31) * dVar34;
              *(double *)((long)param_5 + lVar37 + 8) = dVar33 + (double)(int)cVar8 * dVar34;
              cVar8 = *(char *)((long)param_1 + lVar31 + 3);
              *(double *)((long)param_5 + lVar37 + 0x10) =
                   dVar33 + (double)(int)*(char *)((long)param_1 + lVar31 + 2) * dVar34;
              *(double *)((long)param_5 + lVar37 + 0x18) = dVar33 + (double)(int)cVar8 * dVar34;
            }
          }
        }
      }
LAB_00268dcc:
      if (iVar10 < iVar6) {
        pdVar23 = param_5 + lVar27;
        pcVar22 = (char *)((long)param_1 + lVar27);
        if ((pdVar23 < (double *)((long)param_1 + lVar27 + (ulong)uVar15) &&
             pcVar22 < (char *)((long)param_5 + lVar55)) || (uVar15 < 0x14)) {
          lVar24 = 0;
          do {
            pdVar23[lVar24] = dVar33 + (double)(int)pcVar22[lVar24] * dVar34;
            lVar24 = lVar24 + 1;
          } while (lVar24 != (ulong)(uint)((iVar6 + -1) - iVar10) + 1);
        }
        else {
          uVar3 = (uint)((ulong)pdVar23 >> 3) & 1;
          uVar29 = uVar15;
          if (uVar3 < uVar15) {
            uVar29 = uVar3;
          }
          iVar25 = iVar10;
          if (uVar29 != 0) {
            *pdVar23 = dVar33 + (double)(int)*pcVar22 * dVar34;
            iVar25 = iVar10 + 1;
          }
          uVar3 = ((uVar15 - uVar29) - 0x10 >> 4) + 1;
          uVar30 = 0;
          iVar11 = uVar3 * 0x10;
          pdVar23 = param_5 + (ulong)uVar29 + lVar27;
          pcVar22 = (char *)((long)param_1 + lVar27 + (ulong)uVar29);
          do {
            cVar8 = pcVar22[0xc];
            cVar16 = pcVar22[0xd];
            cVar17 = pcVar22[0xe];
            cVar18 = pcVar22[0xf];
            uVar30 = uVar30 + 1;
            auVar49._0_8_ = (long)(int)(short)*pcVar22;
            auVar49._8_8_ = (long)(int)(short)pcVar22[1];
            auVar52._0_8_ = (long)(int)(short)pcVar22[2];
            auVar52._8_8_ = (long)(int)(short)pcVar22[3];
            auVar45._0_8_ = (long)(int)(short)pcVar22[4];
            auVar45._8_8_ = (long)(int)(short)pcVar22[5];
            auVar39._0_8_ = (long)(int)(short)pcVar22[6];
            auVar39._8_8_ = (long)(int)(short)pcVar22[7];
            auVar42 = NEON_scvtf(auVar49,8);
            auVar44 = NEON_scvtf(auVar52,8);
            auVar50._0_8_ = (long)(int)(short)pcVar22[8];
            auVar50._8_8_ = (long)(int)(short)pcVar22[9];
            auVar41 = NEON_scvtf(auVar45,8);
            auVar38 = NEON_scvtf(auVar39,8);
            auVar40._0_8_ = (long)(int)(short)pcVar22[10];
            auVar40._8_8_ = (long)(int)(short)pcVar22[0xb];
            pdVar23[1] = dVar33 + dVar34 * auVar42._8_8_;
            *pdVar23 = dVar33 + dVar34 * auVar42._0_8_;
            auVar51 = NEON_scvtf(auVar50,8);
            auVar42 = NEON_scvtf(auVar40,8);
            pdVar23[3] = dVar33 + dVar34 * auVar44._8_8_;
            pdVar23[2] = dVar33 + dVar34 * auVar44._0_8_;
            auVar46._0_8_ = (long)(int)(short)cVar8;
            auVar46._8_8_ = (long)(int)(short)cVar16;
            auVar35._0_8_ = (long)(int)(short)cVar17;
            auVar35._8_8_ = (long)(int)(short)cVar18;
            pdVar23[5] = dVar33 + dVar34 * auVar41._8_8_;
            pdVar23[4] = dVar33 + dVar34 * auVar41._0_8_;
            auVar44 = NEON_scvtf(auVar46,8);
            auVar41 = NEON_scvtf(auVar35,8);
            pdVar23[7] = dVar33 + dVar34 * auVar38._8_8_;
            pdVar23[6] = dVar33 + dVar34 * auVar38._0_8_;
            pdVar23[9] = dVar33 + dVar34 * auVar51._8_8_;
            pdVar23[8] = dVar33 + dVar34 * auVar51._0_8_;
            pdVar23[0xb] = dVar33 + dVar34 * auVar42._8_8_;
            pdVar23[10] = dVar33 + dVar34 * auVar42._0_8_;
            pdVar23[0xd] = dVar33 + dVar34 * auVar44._8_8_;
            pdVar23[0xc] = dVar33 + dVar34 * auVar44._0_8_;
            pdVar23[0xf] = dVar33 + dVar34 * auVar41._8_8_;
            pdVar23[0xe] = dVar33 + dVar34 * auVar41._0_8_;
            pdVar23 = pdVar23 + 0x10;
            pcVar22 = pcVar22 + 0x10;
          } while (uVar30 < uVar3);
          iVar25 = iVar25 + iVar11;
          if (uVar15 - uVar29 != iVar11) {
            iVar11 = iVar25 + 1;
            param_5[iVar25] = dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar25) * dVar34
            ;
            if (iVar11 < iVar6) {
              iVar4 = iVar25 + 2;
              param_5[iVar11] =
                   dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11) * dVar34;
              if (iVar4 < iVar6) {
                iVar11 = iVar25 + 3;
                param_5[iVar4] =
                     dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4) * dVar34;
                if (iVar11 < iVar6) {
                  iVar4 = iVar25 + 4;
                  param_5[iVar11] =
                       dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11) * dVar34;
                  if (iVar4 < iVar6) {
                    iVar11 = iVar25 + 5;
                    param_5[iVar4] =
                         dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4) * dVar34;
                    if (iVar11 < iVar6) {
                      iVar4 = iVar25 + 6;
                    /* try { // try from 00269000 to 0036936b has its CatchHandler @ 00269000
                       catch() { ... } // from try @ 00269000 with catch @ 00269000
                       catch() { ... } // from try @ 0026937c with catch @ 00269000
                       catch() { ... } // from try @ 002693ec with catch @ 00269000
                       catch() { ... } // from try @ 00269410 with catch @ 00269000
                       catch() { ... } // from try @ 00269434 with catch @ 00269000
                       catch() { ... } // from try @ 00269458 with catch @ 00269000
                       catch() { ... } // from try @ 0026947c with catch @ 00269000 */
                      param_5[iVar11] =
                           dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11) * dVar34;
                      if (iVar4 < iVar6) {
                        iVar11 = iVar25 + 7;
                        param_5[iVar4] =
                             dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4) * dVar34;
                        if (iVar11 < iVar6) {
                          iVar4 = iVar25 + 8;
                          param_5[iVar11] =
                               dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11) *
                                        dVar34;
                          if (iVar4 < iVar6) {
                            iVar11 = iVar25 + 9;
                            param_5[iVar4] =
                                 dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4) *
                                          dVar34;
                            if (iVar11 < iVar6) {
                              iVar4 = iVar25 + 10;
                              param_5[iVar11] =
                                   dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11) *
                                            dVar34;
                              if (iVar4 < iVar6) {
                                iVar11 = iVar25 + 0xb;
                                param_5[iVar4] =
                                     dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4) *
                                              dVar34;
                                if (iVar11 < iVar6) {
                                  iVar4 = iVar25 + 0xc;
                                  param_5[iVar11] =
                                       dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar11)
                                                * dVar34;
                                  if (iVar4 < iVar6) {
                                    iVar11 = iVar25 + 0xd;
                                    param_5[iVar4] =
                                         dVar33 + (double)(int)*(char *)((long)param_1 + (long)iVar4
                                                                        ) * dVar34;
                                    if (iVar11 < iVar6) {
                                      iVar25 = iVar25 + 0xe;
                                      param_5[iVar11] =
                                           dVar33 + (double)(int)*(char *)((long)param_1 +
                                                                          (long)iVar11) * dVar34;
                                      if (iVar25 < iVar6) {
                                        param_5[iVar25] =
                                             dVar33 + (double)(int)*(char *)((long)param_1 +
                                                                            (long)iVar25) * dVar34;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar26 = iVar26 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar26 != -1);
  }
  return;
}


==================================================================

### FUNC 002691f8 (1484 bytes) name=FUN_002691f8

void FUN_002691f8(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 double *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  ushort uVar12;
  ushort uVar13;
  ushort uVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  uint uVar19;
  undefined1 auVar20 [16];
  ushort *puVar21;
  int iVar22;
  long lVar23;
  double *pdVar24;
  uint uVar25;
  int iVar26;
  long lVar27;
  uint uVar28;
  double dVar29;
  double dVar30;
  long lVar31;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  long lVar39;
  long lVar40;
  long lVar41;
  long lVar42;
  long lVar43;
  long lVar44;
  long lVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  long lVar49;
  long lVar50;
  long lVar51;
  
  dVar30 = *param_8;
  iVar11 = *param_7;
  dVar29 = param_8[1];
  iVar26 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar18 = iVar11 - 4;
    iVar1 = (uVar18 >> 2) + 1;
    uVar2 = ((uVar18 >> 2) - 1 >> 1) + 1;
    iVar15 = iVar1 * 4;
    iVar16 = uVar2 * 8;
    if (uVar18 < 4) {
      iVar16 = 0;
    }
    if (iVar11 + -3 < 1) {
      iVar15 = 0;
    }
    iVar3 = iVar15 + 1;
    lVar23 = (long)iVar15;
    lVar27 = (long)iVar16;
    iVar16 = iVar15 + 2;
    iVar4 = iVar15 + 3;
    iVar5 = iVar15 + 4;
    lVar31 = NEON_shl(lVar23,3);
    iVar6 = iVar15 + 5;
    iVar7 = iVar15 + 6;
    iVar8 = iVar15 + 7;
    lVar51 = NEON_shl(lVar23,1);
    uVar19 = iVar11 - iVar15;
    lVar50 = NEON_shl((long)iVar3,3);
    lVar42 = NEON_shl((long)iVar3,1);
    lVar49 = NEON_shl((long)iVar16,3);
    lVar41 = NEON_shl((long)iVar16,1);
    lVar48 = NEON_shl((long)iVar4,3);
    lVar40 = NEON_shl((long)iVar4,1);
    lVar47 = NEON_shl((long)iVar5,3);
                    /* try { // try from 0026936c to 0036937b has its CatchHandler @ 002694e0 */
    lVar39 = NEON_shl((long)iVar5,1);
                    /* try { // try from 0026937c to 003693db has its CatchHandler @ 00269000 */
    lVar46 = NEON_shl((long)iVar6,3);
    lVar45 = NEON_shl((long)iVar7,3);
    lVar44 = NEON_shl((long)iVar8,3);
    lVar43 = NEON_shl((long)iVar8,1);
    do {
      if (0 < iVar11 + -3) {
        if (3 < uVar18) {
          uVar25 = 0;
          pdVar24 = param_5;
          puVar21 = param_1;
          do {
            uVar12 = puVar21[4];
            uVar13 = puVar21[5];
            uVar25 = uVar25 + 1;
                    /* try { // try from 002693dc to 003693eb has its CatchHandler @ 002694d4 */
            auVar36._0_8_ = (long)(int)(uint)*puVar21;
            auVar36._8_8_ = (long)(int)(uint)puVar21[1];
            auVar34._0_8_ = (long)(int)(uint)puVar21[2];
            auVar34._8_8_ = (long)(int)(uint)puVar21[3];
                    /* try { // try from 002693ec to 003693ff has its CatchHandler @ 00269000 */
            auVar32._0_8_ = (long)(int)(uint)puVar21[6];
            auVar32._8_8_ = (long)(int)(uint)puVar21[7];
            auVar37 = NEON_scvtf(auVar36,8);
                    /* try { // try from 00269400 to 0036940f has its CatchHandler @ 002694c8 */
            auVar34 = NEON_scvtf(auVar34,8);
            auVar32 = NEON_scvtf(auVar32,8);
            pdVar24[1] = dVar29 + dVar30 * auVar37._8_8_;
            *pdVar24 = dVar29 + dVar30 * auVar37._0_8_;
            auVar37._8_8_ = (long)(int)(uint)uVar13;
            auVar37._0_8_ = (long)(int)(uint)uVar12;
                    /* try { // try from 00269410 to 00369423 has its CatchHandler @ 00269000 */
            auVar37 = NEON_scvtf(auVar37,8);
            pdVar24[3] = dVar29 + dVar30 * auVar34._8_8_;
            pdVar24[2] = dVar29 + dVar30 * auVar34._0_8_;
                    /* try { // try from 00269424 to 00369433 has its CatchHandler @ 002694bc */
            pdVar24[5] = dVar29 + dVar30 * auVar37._8_8_;
            pdVar24[4] = dVar29 + dVar30 * auVar37._0_8_;
            pdVar24[7] = dVar29 + dVar30 * auVar32._8_8_;
            pdVar24[6] = dVar29 + dVar30 * auVar32._0_8_;
                    /* try { // try from 00269434 to 00369447 has its CatchHandler @ 00269000 */
            pdVar24 = pdVar24 + 8;
            puVar21 = puVar21 + 8;
          } while (uVar25 < uVar2);
                    /* try { // try from 00269448 to 00369457 has its CatchHandler @ 002694b0 */
          if (iVar1 == uVar2 * 2) goto LAB_0026948c;
        }
        uVar12 = param_1[lVar27 + 1];
        uVar13 = param_1[lVar27 + 2];
                    /* try { // try from 00269458 to 0036946b has its CatchHandler @ 00269000 */
        uVar14 = param_1[lVar27 + 3];
                    /* try { // try from 0026946c to 0036947b has its CatchHandler @ 002694a4 */
                    /* try { // try from 0026947c to 003694f3 has its CatchHandler @ 00269000 */
        param_5[lVar27] = dVar29 + (double)param_1[lVar27] * dVar30;
        param_5[lVar27 + 1] = dVar29 + (double)uVar12 * dVar30;
        param_5[lVar27 + 2] = dVar29 + (double)uVar13 * dVar30;
        param_5[lVar27 + 3] = dVar29 + (double)uVar14 * dVar30;
      }
LAB_0026948c:
      if (iVar15 < iVar11) {
        uVar25 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar19 < uVar25) {
          uVar25 = uVar19;
        }
                    /* catch() { ... } // from try @ 0026946c with catch @ 002694a4 */
        if (uVar19 < 9) {
          uVar25 = uVar19;
        }
        iVar22 = iVar15;
        if (uVar25 != 0) {
                    /* catch() { ... } // from try @ 00269448 with catch @ 002694b0 */
                    /* catch() { ... } // from try @ 00269424 with catch @ 002694bc */
          *(double *)((long)param_5 + lVar31) =
               dVar29 + (double)*(ushort *)((long)param_1 + lVar51) * dVar30;
          iVar22 = iVar3;
                    /* catch() { ... } // from try @ 00269400 with catch @ 002694c8 */
                    /* catch() { ... } // from try @ 002693dc with catch @ 002694d4 */
                    /* catch() { ... } // from try @ 0026936c with catch @ 002694e0 */
          if ((((uVar25 != 1) &&
               (*(double *)((long)param_5 + lVar50) =
                     dVar29 + (double)*(ushort *)((long)param_1 + lVar42) * dVar30, iVar22 = iVar16,
               uVar25 != 2)) &&
              (*(double *)((long)param_5 + lVar49) =
                    dVar29 + (double)*(ushort *)((long)param_1 + lVar41) * dVar30, iVar22 = iVar4,
              uVar25 != 3)) &&
             (((*(double *)((long)param_5 + lVar48) =
                     dVar29 + (double)*(ushort *)((long)param_1 + lVar40) * dVar30, iVar22 = iVar5,
               uVar25 != 4 &&
               (*(double *)((long)param_5 + lVar47) =
                     dVar29 + (double)*(ushort *)((long)param_1 + lVar39) * dVar30, iVar22 = iVar6,
               uVar25 != 5)) &&
              ((*(double *)((long)param_5 + lVar46) = dVar29 + (double)param_1[iVar6] * dVar30,
               iVar22 = iVar7, uVar25 != 6 &&
               (*(double *)((long)param_5 + lVar45) = dVar29 + (double)param_1[iVar7] * dVar30,
               iVar22 = iVar8, uVar25 == 8)))))) {
            *(double *)((long)param_5 + lVar44) =
                 dVar29 + (double)*(ushort *)((long)param_1 + lVar43) * dVar30;
            iVar22 = iVar15 + 8;
          }
          if (uVar25 == uVar19) goto LAB_00269744;
        }
        uVar9 = ((uVar19 - uVar25) - 8 >> 3) + 1;
        iVar17 = uVar9 * 8;
        if (6 < (uVar19 - 1) - uVar25) {
          uVar28 = 0;
          puVar21 = param_1 + (ulong)uVar25 + lVar23;
          pdVar24 = param_5 + (ulong)uVar25 + lVar23;
          do {
            uVar12 = puVar21[4];
            uVar13 = puVar21[5];
            uVar28 = uVar28 + 1;
            auVar38._0_8_ = (long)(int)(uint)*puVar21;
            auVar38._8_8_ = (long)(int)(uint)puVar21[1];
            auVar35._0_8_ = (long)(int)(uint)puVar21[2];
            auVar35._8_8_ = (long)(int)(uint)puVar21[3];
            auVar33._0_8_ = (long)(int)(uint)puVar21[6];
            auVar33._8_8_ = (long)(int)(uint)puVar21[7];
            auVar34 = NEON_scvtf(auVar38,8);
            auVar32 = NEON_scvtf(auVar35,8);
            auVar37 = NEON_scvtf(auVar33,8);
            pdVar24[1] = dVar29 + dVar30 * auVar34._8_8_;
            *pdVar24 = dVar29 + dVar30 * auVar34._0_8_;
            auVar20._8_8_ = (long)(int)(uint)uVar13;
            auVar20._0_8_ = (long)(int)(uint)uVar12;
            auVar34 = NEON_scvtf(auVar20,8);
            pdVar24[3] = dVar29 + dVar30 * auVar32._8_8_;
            pdVar24[2] = dVar29 + dVar30 * auVar32._0_8_;
            pdVar24[5] = dVar29 + dVar30 * auVar34._8_8_;
            pdVar24[4] = dVar29 + dVar30 * auVar34._0_8_;
            pdVar24[7] = dVar29 + dVar30 * auVar37._8_8_;
            pdVar24[6] = dVar29 + dVar30 * auVar37._0_8_;
            puVar21 = puVar21 + 8;
            pdVar24 = pdVar24 + 8;
          } while (uVar28 < uVar9);
          iVar22 = iVar22 + iVar17;
          if (iVar17 == uVar19 - uVar25) goto LAB_00269744;
        }
        iVar17 = iVar22 + 1;
        param_5[iVar22] = dVar29 + (double)param_1[iVar22] * dVar30;
        if (iVar17 < iVar11) {
          iVar10 = iVar22 + 2;
          param_5[iVar17] = dVar29 + (double)param_1[iVar17] * dVar30;
          if (iVar10 < iVar11) {
            iVar17 = iVar22 + 3;
            param_5[iVar10] = dVar29 + (double)param_1[iVar10] * dVar30;
            if (iVar17 < iVar11) {
              iVar10 = iVar22 + 4;
              param_5[iVar17] = dVar29 + (double)param_1[iVar17] * dVar30;
              if (iVar10 < iVar11) {
                iVar17 = iVar22 + 5;
                param_5[iVar10] = dVar29 + (double)param_1[iVar10] * dVar30;
                if (iVar17 < iVar11) {
                  iVar22 = iVar22 + 6;
                  param_5[iVar17] = dVar29 + (double)param_1[iVar17] * dVar30;
                  if (iVar22 < iVar11) {
                    param_5[iVar22] = dVar29 + (double)param_1[iVar22] * dVar30;
                  }
                }
              }
            }
          }
        }
      }
LAB_00269744:
      iVar26 = iVar26 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar26 != -1);
  }
  return;
}


==================================================================

### FUNC 002697c4 (1484 bytes) name=FUN_002697c4

void FUN_002697c4(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,double *param_5
                 ,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  short sVar12;
  short sVar13;
  short sVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  uint uVar19;
  undefined1 auVar20 [16];
  double *pdVar21;
  int iVar22;
  long lVar23;
  int iVar24;
  uint uVar25;
  short *psVar26;
  long lVar27;
  uint uVar28;
  double dVar29;
  double dVar30;
  long lVar31;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  long lVar39;
  long lVar40;
  long lVar41;
  long lVar42;
  long lVar43;
  long lVar44;
  long lVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  long lVar49;
  long lVar50;
  long lVar51;
  
  dVar30 = *param_8;
  iVar11 = *param_7;
  dVar29 = param_8[1];
  iVar24 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar18 = iVar11 - 4;
    iVar1 = (uVar18 >> 2) + 1;
    uVar2 = ((uVar18 >> 2) - 1 >> 1) + 1;
    iVar15 = iVar1 * 4;
    iVar16 = uVar2 * 8;
    if (uVar18 < 4) {
      iVar16 = 0;
    }
    if (iVar11 + -3 < 1) {
      iVar15 = 0;
    }
    iVar3 = iVar15 + 1;
    lVar23 = (long)iVar15;
    lVar27 = (long)iVar16;
    iVar16 = iVar15 + 2;
    iVar4 = iVar15 + 3;
    iVar5 = iVar15 + 4;
    lVar31 = NEON_shl(lVar23,3);
    iVar6 = iVar15 + 5;
    iVar7 = iVar15 + 6;
    iVar8 = iVar15 + 7;
    lVar51 = NEON_shl(lVar23,1);
    uVar19 = iVar11 - iVar15;
    lVar50 = NEON_shl((long)iVar3,3);
    lVar42 = NEON_shl((long)iVar3,1);
    lVar49 = NEON_shl((long)iVar16,3);
    lVar41 = NEON_shl((long)iVar16,1);
    lVar48 = NEON_shl((long)iVar4,3);
    lVar40 = NEON_shl((long)iVar4,1);
    lVar47 = NEON_shl((long)iVar5,3);
    lVar39 = NEON_shl((long)iVar5,1);
    lVar46 = NEON_shl((long)iVar6,3);
    lVar45 = NEON_shl((long)iVar7,3);
    lVar44 = NEON_shl((long)iVar8,3);
    lVar43 = NEON_shl((long)iVar8,1);
    do {
      if (0 < iVar11 + -3) {
        if (3 < uVar18) {
          uVar25 = 0;
          pdVar21 = param_5;
          psVar26 = param_1;
          do {
            sVar12 = psVar26[4];
            sVar13 = psVar26[5];
            uVar25 = uVar25 + 1;
            auVar36._0_8_ = (long)(int)*psVar26;
            auVar36._8_8_ = (long)(int)psVar26[1];
            auVar34._0_8_ = (long)(int)psVar26[2];
            auVar34._8_8_ = (long)(int)psVar26[3];
            auVar32._0_8_ = (long)(int)psVar26[6];
            auVar32._8_8_ = (long)(int)psVar26[7];
            auVar37 = NEON_scvtf(auVar36,8);
            auVar34 = NEON_scvtf(auVar34,8);
            auVar32 = NEON_scvtf(auVar32,8);
            pdVar21[1] = dVar29 + dVar30 * auVar37._8_8_;
            *pdVar21 = dVar29 + dVar30 * auVar37._0_8_;
            auVar37._8_8_ = (long)(int)sVar13;
            auVar37._0_8_ = (long)(int)sVar12;
            auVar37 = NEON_scvtf(auVar37,8);
            pdVar21[3] = dVar29 + dVar30 * auVar34._8_8_;
            pdVar21[2] = dVar29 + dVar30 * auVar34._0_8_;
            pdVar21[5] = dVar29 + dVar30 * auVar37._8_8_;
            pdVar21[4] = dVar29 + dVar30 * auVar37._0_8_;
            pdVar21[7] = dVar29 + dVar30 * auVar32._8_8_;
            pdVar21[6] = dVar29 + dVar30 * auVar32._0_8_;
            pdVar21 = pdVar21 + 8;
            psVar26 = psVar26 + 8;
          } while (uVar25 < uVar2);
          if (iVar1 == uVar2 * 2) goto LAB_00269a58;
        }
        sVar12 = param_1[lVar27 + 1];
        sVar13 = param_1[lVar27 + 2];
        sVar14 = param_1[lVar27 + 3];
        param_5[lVar27] = dVar29 + (double)(int)param_1[lVar27] * dVar30;
        param_5[lVar27 + 1] = dVar29 + (double)(int)sVar12 * dVar30;
        param_5[lVar27 + 2] = dVar29 + (double)(int)sVar13 * dVar30;
        param_5[lVar27 + 3] = dVar29 + (double)(int)sVar14 * dVar30;
      }
LAB_00269a58:
      if (iVar15 < iVar11) {
        uVar25 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar19 < uVar25) {
          uVar25 = uVar19;
        }
        if (uVar19 < 9) {
          uVar25 = uVar19;
        }
        iVar22 = iVar15;
        if (uVar25 != 0) {
          *(double *)((long)param_5 + lVar31) =
               dVar29 + (double)(int)*(short *)((long)param_1 + lVar51) * dVar30;
          iVar22 = iVar3;
          if ((((uVar25 != 1) &&
               (*(double *)((long)param_5 + lVar50) =
                     dVar29 + (double)(int)*(short *)((long)param_1 + lVar42) * dVar30,
               iVar22 = iVar16, uVar25 != 2)) &&
              (*(double *)((long)param_5 + lVar49) =
                    dVar29 + (double)(int)*(short *)((long)param_1 + lVar41) * dVar30,
              iVar22 = iVar4, uVar25 != 3)) &&
             (((*(double *)((long)param_5 + lVar48) =
                     dVar29 + (double)(int)*(short *)((long)param_1 + lVar40) * dVar30,
               iVar22 = iVar5, uVar25 != 4 &&
               (*(double *)((long)param_5 + lVar47) =
                     dVar29 + (double)(int)*(short *)((long)param_1 + lVar39) * dVar30,
               iVar22 = iVar6, uVar25 != 5)) &&
              ((*(double *)((long)param_5 + lVar46) = dVar29 + (double)(int)param_1[iVar6] * dVar30,
               iVar22 = iVar7, uVar25 != 6 &&
               (*(double *)((long)param_5 + lVar45) = dVar29 + (double)(int)param_1[iVar7] * dVar30,
               iVar22 = iVar8, uVar25 == 8)))))) {
            *(double *)((long)param_5 + lVar44) =
                 dVar29 + (double)(int)*(short *)((long)param_1 + lVar43) * dVar30;
            iVar22 = iVar15 + 8;
          }
          if (uVar25 == uVar19) goto LAB_00269d10;
        }
        uVar9 = ((uVar19 - uVar25) - 8 >> 3) + 1;
        iVar17 = uVar9 * 8;
        if (6 < (uVar19 - 1) - uVar25) {
          uVar28 = 0;
          pdVar21 = param_5 + (ulong)uVar25 + lVar23;
          psVar26 = param_1 + (ulong)uVar25 + lVar23;
          do {
            sVar12 = psVar26[4];
            sVar13 = psVar26[5];
            uVar28 = uVar28 + 1;
            auVar38._0_8_ = (long)(int)*psVar26;
            auVar38._8_8_ = (long)(int)psVar26[1];
            auVar35._0_8_ = (long)(int)psVar26[2];
            auVar35._8_8_ = (long)(int)psVar26[3];
            auVar33._0_8_ = (long)(int)psVar26[6];
            auVar33._8_8_ = (long)(int)psVar26[7];
            auVar34 = NEON_scvtf(auVar38,8);
            auVar32 = NEON_scvtf(auVar35,8);
            auVar37 = NEON_scvtf(auVar33,8);
            pdVar21[1] = dVar29 + dVar30 * auVar34._8_8_;
            *pdVar21 = dVar29 + dVar30 * auVar34._0_8_;
            auVar20._8_8_ = (long)(int)sVar13;
            auVar20._0_8_ = (long)(int)sVar12;
            auVar34 = NEON_scvtf(auVar20,8);
            pdVar21[3] = dVar29 + dVar30 * auVar32._8_8_;
            pdVar21[2] = dVar29 + dVar30 * auVar32._0_8_;
            pdVar21[5] = dVar29 + dVar30 * auVar34._8_8_;
            pdVar21[4] = dVar29 + dVar30 * auVar34._0_8_;
            pdVar21[7] = dVar29 + dVar30 * auVar37._8_8_;
            pdVar21[6] = dVar29 + dVar30 * auVar37._0_8_;
            pdVar21 = pdVar21 + 8;
            psVar26 = psVar26 + 8;
          } while (uVar28 < uVar9);
          iVar22 = iVar22 + iVar17;
          if (iVar17 == uVar19 - uVar25) goto LAB_00269d10;
        }
        iVar17 = iVar22 + 1;
        param_5[iVar22] = dVar29 + (double)(int)param_1[iVar22] * dVar30;
        if (iVar17 < iVar11) {
          iVar10 = iVar22 + 2;
          param_5[iVar17] = dVar29 + (double)(int)param_1[iVar17] * dVar30;
          if (iVar10 < iVar11) {
            iVar17 = iVar22 + 3;
            param_5[iVar10] = dVar29 + (double)(int)param_1[iVar10] * dVar30;
            if (iVar17 < iVar11) {
              iVar10 = iVar22 + 4;
              param_5[iVar17] = dVar29 + (double)(int)param_1[iVar17] * dVar30;
              if (iVar10 < iVar11) {
                iVar17 = iVar22 + 5;
                param_5[iVar10] = dVar29 + (double)(int)param_1[iVar10] * dVar30;
                if (iVar17 < iVar11) {
                  iVar22 = iVar22 + 6;
                  param_5[iVar17] = dVar29 + (double)(int)param_1[iVar17] * dVar30;
                  if (iVar22 < iVar11) {
                    param_5[iVar22] = dVar29 + (double)(int)param_1[iVar22] * dVar30;
                  }
                }
              }
            }
          }
        }
      }
LAB_00269d10:
      iVar24 = iVar24 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar24 != -1);
  }
  return;
}


==================================================================

### FUNC 00269d90 (788 bytes) name=FUN_00269d90

void FUN_00269d90(int *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,double *param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int *piVar11;
  uint uVar12;
  int iVar13;
  double *pdVar14;
  int iVar15;
  long lVar16;
  uint uVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  double dVar22;
  double dVar23;
  long lVar24;
  long lVar25;
  
  dVar23 = *param_8;
  iVar7 = *param_7;
  dVar22 = param_8[1];
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar7 - 4U >> 2) + 1;
    iVar8 = uVar1 * 4;
    if (iVar7 + -3 < 1) {
      iVar8 = 0;
    }
    iVar2 = iVar8 + 1;
    uVar10 = iVar7 - iVar8;
    lVar16 = (long)iVar8;
    iVar3 = iVar8 + 2;
    iVar4 = iVar8 + 3;
    iVar5 = iVar8 + 4;
    lVar25 = NEON_shl((long)iVar4,3);
    lVar24 = NEON_shl((long)iVar5,3);
    do {
      if (0 < iVar7 + -3) {
        uVar12 = 0;
        pdVar14 = param_5;
        piVar11 = param_1;
        do {
          uVar12 = uVar12 + 1;
          auVar20._0_8_ = (long)*piVar11;
          auVar20._8_8_ = (long)piVar11[1];
          auVar18._0_8_ = (long)piVar11[2];
          auVar18._8_8_ = (long)piVar11[3];
          auVar20 = NEON_scvtf(auVar20,8);
          auVar18 = NEON_scvtf(auVar18,8);
          pdVar14[1] = dVar22 + dVar23 * auVar20._8_8_;
          *pdVar14 = dVar22 + dVar23 * auVar20._0_8_;
          pdVar14[3] = dVar22 + dVar23 * auVar18._8_8_;
          pdVar14[2] = dVar22 + dVar23 * auVar18._0_8_;
          pdVar14 = pdVar14 + 4;
          piVar11 = piVar11 + 4;
        } while (uVar12 < uVar1);
      }
      if (iVar8 < iVar7) {
        uVar12 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar10 < uVar12) {
          uVar12 = uVar10;
        }
        if (uVar10 < 6) {
          uVar12 = uVar10;
        }
        iVar13 = iVar8;
        if (uVar12 != 0) {
          param_5[lVar16] = dVar22 + (double)param_1[lVar16] * dVar23;
          iVar13 = iVar2;
          if ((((uVar12 != 1) &&
               (param_5[iVar2] = dVar22 + (double)param_1[iVar2] * dVar23, iVar13 = iVar3,
               uVar12 != 2)) &&
              (param_5[iVar3] = dVar22 + (double)param_1[iVar3] * dVar23, iVar13 = iVar4,
              uVar12 != 3)) &&
             (*(double *)((long)param_5 + lVar25) = dVar22 + (double)param_1[iVar4] * dVar23,
             iVar13 = iVar5, uVar12 == 5)) {
            *(double *)((long)param_5 + lVar24) = dVar22 + (double)param_1[iVar5] * dVar23;
            iVar13 = iVar8 + 5;
          }
          if (uVar12 == uVar10) goto LAB_0026a04c;
        }
        uVar6 = ((uVar10 - uVar12) - 4 >> 2) + 1;
        iVar9 = uVar6 * 4;
        if (2 < (uVar10 - 1) - uVar12) {
          uVar17 = 0;
          piVar11 = param_1 + (ulong)uVar12 + lVar16;
          pdVar14 = param_5 + (ulong)uVar12 + lVar16;
          do {
            uVar17 = uVar17 + 1;
            auVar21._0_8_ = (long)*piVar11;
            auVar21._8_8_ = (long)piVar11[1];
            auVar19._0_8_ = (long)piVar11[2];
            auVar19._8_8_ = (long)piVar11[3];
            auVar20 = NEON_scvtf(auVar21,8);
            auVar18 = NEON_scvtf(auVar19,8);
            pdVar14[1] = dVar22 + dVar23 * auVar20._8_8_;
            *pdVar14 = dVar22 + dVar23 * auVar20._0_8_;
            pdVar14[3] = dVar22 + dVar23 * auVar18._8_8_;
            pdVar14[2] = dVar22 + dVar23 * auVar18._0_8_;
            piVar11 = piVar11 + 4;
            pdVar14 = pdVar14 + 4;
          } while (uVar17 < uVar6);
          iVar13 = iVar13 + iVar9;
          if (iVar9 == uVar10 - uVar12) goto LAB_0026a04c;
        }
        iVar9 = iVar13 + 1;
        param_5[iVar13] = dVar22 + (double)param_1[iVar13] * dVar23;
        if (iVar9 < iVar7) {
          iVar13 = iVar13 + 2;
          param_5[iVar9] = dVar22 + (double)param_1[iVar9] * dVar23;
          if (iVar13 < iVar7) {
            param_5[iVar13] = dVar22 + (double)param_1[iVar13] * dVar23;
          }
        }
      }
LAB_0026a04c:
      iVar15 = iVar15 + -1;
      param_1 = (int *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 0026a0a4 (772 bytes) name=FUN_0026a0a4

void FUN_0026a0a4(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 double *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  undefined8 *puVar11;
  uint uVar12;
  int iVar13;
  double *pdVar14;
  int iVar15;
  long lVar16;
  uint uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  double dVar20;
  double dVar21;
  long lVar22;
  long lVar23;
  
  dVar21 = *param_8;
  iVar7 = *param_7;
  dVar20 = param_8[1];
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar7 - 4U >> 2) + 1;
    iVar8 = uVar1 * 4;
    if (iVar7 + -3 < 1) {
      iVar8 = 0;
    }
    iVar2 = iVar8 + 1;
    uVar10 = iVar7 - iVar8;
    lVar16 = (long)iVar8;
    iVar3 = iVar8 + 2;
    iVar4 = iVar8 + 3;
    iVar5 = iVar8 + 4;
    lVar23 = NEON_shl((long)iVar4,3);
    lVar22 = NEON_shl((long)iVar5,3);
    do {
      if (0 < iVar7 + -3) {
        uVar12 = 0;
        pdVar14 = param_5;
        puVar11 = param_1;
        do {
          uVar19 = puVar11[1];
          uVar18 = *puVar11;
          uVar12 = uVar12 + 1;
          pdVar14[1] = dVar20 + dVar21 * (double)(float)((ulong)uVar18 >> 0x20);
          *pdVar14 = dVar20 + dVar21 * (double)(float)uVar18;
          pdVar14[3] = dVar20 + dVar21 * (double)(float)((ulong)uVar19 >> 0x20);
          pdVar14[2] = dVar20 + dVar21 * (double)(float)uVar19;
          pdVar14 = pdVar14 + 4;
          puVar11 = puVar11 + 2;
        } while (uVar12 < uVar1);
      }
      if (iVar8 < iVar7) {
        uVar12 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar10 < uVar12) {
          uVar12 = uVar10;
        }
        if (uVar10 < 6) {
          uVar12 = uVar10;
        }
        iVar13 = iVar8;
        if (uVar12 != 0) {
          param_5[lVar16] = dVar20 + (double)*(float *)((long)param_1 + lVar16 * 4) * dVar21;
          iVar13 = iVar2;
          if ((((uVar12 != 1) &&
               (param_5[iVar2] =
                     dVar20 + (double)*(float *)((long)param_1 + (long)iVar2 * 4) * dVar21,
               iVar13 = iVar3, uVar12 != 2)) &&
              (param_5[iVar3] =
                    dVar20 + (double)*(float *)((long)param_1 + (long)iVar3 * 4) * dVar21,
              iVar13 = iVar4, uVar12 != 3)) &&
             (*(double *)((long)param_5 + lVar23) =
                   dVar20 + (double)*(float *)((long)param_1 + (long)iVar4 * 4) * dVar21,
             iVar13 = iVar5, uVar12 == 5)) {
            *(double *)((long)param_5 + lVar22) =
                 dVar20 + (double)*(float *)((long)param_1 + (long)iVar5 * 4) * dVar21;
            iVar13 = iVar8 + 5;
          }
          if (uVar12 == uVar10) goto LAB_0026a350;
        }
        uVar6 = ((uVar10 - uVar12) - 4 >> 2) + 1;
        iVar9 = uVar6 * 4;
        if (2 < (uVar10 - 1) - uVar12) {
          uVar17 = 0;
          puVar11 = (undefined8 *)((long)param_1 + ((ulong)uVar12 + lVar16) * 4);
          pdVar14 = param_5 + (ulong)uVar12 + lVar16;
          do {
            uVar19 = puVar11[1];
            uVar18 = *puVar11;
            uVar17 = uVar17 + 1;
            pdVar14[1] = dVar20 + dVar21 * (double)(float)((ulong)uVar18 >> 0x20);
            *pdVar14 = dVar20 + dVar21 * (double)(float)uVar18;
            pdVar14[3] = dVar20 + dVar21 * (double)(float)((ulong)uVar19 >> 0x20);
            pdVar14[2] = dVar20 + dVar21 * (double)(float)uVar19;
            puVar11 = puVar11 + 2;
            pdVar14 = pdVar14 + 4;
          } while (uVar17 < uVar6);
          iVar13 = iVar13 + iVar9;
          if (iVar9 == uVar10 - uVar12) goto LAB_0026a350;
        }
        iVar9 = iVar13 + 1;
        param_5[iVar13] = dVar20 + (double)*(float *)((long)param_1 + (long)iVar13 * 4) * dVar21;
        if (iVar9 < iVar7) {
          iVar13 = iVar13 + 2;
          param_5[iVar9] = dVar20 + (double)*(float *)((long)param_1 + (long)iVar9 * 4) * dVar21;
          if (iVar13 < iVar7) {
            param_5[iVar13] = dVar20 + (double)*(float *)((long)param_1 + (long)iVar13 * 4) * dVar21
            ;
          }
        }
      }
LAB_0026a350:
      iVar15 = iVar15 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 0026a3a8 (620 bytes) name=FUN_0026a3a8

void FUN_0026a3a8(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 double *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  double *pdVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  ulong uVar11;
  uint uVar12;
  double *pdVar13;
  long lVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  
  dVar22 = *param_8;
  iVar4 = *param_7;
  dVar21 = param_8[1];
  iVar16 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    uVar1 = uVar7 + 1;
    iVar5 = uVar1 * 4;
    if (iVar4 + -3 < 1) {
      iVar5 = 0;
    }
    uVar8 = iVar4 - iVar5;
    lVar17 = (long)iVar5;
    do {
      if (0 < iVar4 + -3) {
        if ((param_1 < param_5 + 8 && param_5 < param_1 + 8) || (uVar1 < 4)) {
          pdVar10 = param_5 + 1;
          pdVar13 = param_1;
          do {
            pdVar3 = pdVar10 + 4;
            dVar18 = *pdVar13;
            *pdVar10 = dVar21 + pdVar13[1] * dVar22;
            pdVar10[-1] = dVar21 + dVar18 * dVar22;
            dVar18 = pdVar13[2];
            pdVar10[2] = dVar21 + pdVar13[3] * dVar22;
            pdVar10[1] = dVar21 + dVar18 * dVar22;
            pdVar10 = pdVar3;
            pdVar13 = pdVar13 + 4;
          } while (pdVar3 != param_5 + (ulong)uVar7 * 4 + 5);
        }
        else {
          uVar15 = 0;
          pdVar10 = param_1;
          pdVar13 = param_5;
          do {
            dVar20 = *pdVar10;
            uVar15 = uVar15 + 1;
            dVar19 = pdVar10[3];
            dVar18 = pdVar10[2];
            pdVar13[1] = dVar21 + dVar22 * pdVar10[1];
            *pdVar13 = dVar21 + dVar22 * dVar20;
            pdVar13[3] = dVar21 + dVar22 * dVar19;
            pdVar13[2] = dVar21 + dVar22 * dVar18;
            pdVar10 = pdVar10 + 4;
            pdVar13 = pdVar13 + 4;
          } while (uVar15 < uVar1);
        }
      }
      if (iVar5 < iVar4) {
        pdVar10 = param_1 + lVar17;
        if ((pdVar10 < param_5 + lVar17 + 2 && param_5 + lVar17 < param_1 + lVar17 + 2) ||
           (uVar8 < 9)) {
          lVar14 = 0;
          do {
            *(double *)((long)(param_5 + lVar17) + lVar14) =
                 dVar21 + *(double *)((long)pdVar10 + lVar14) * dVar22;
            lVar14 = lVar14 + 8;
          } while (lVar14 != ((ulong)(uint)((iVar4 + -1) - iVar5) + 1) * 8);
        }
        else {
          uVar2 = (uint)((ulong)pdVar10 >> 3) & 1;
          uVar15 = uVar8;
          if (uVar2 < uVar8) {
            uVar15 = uVar2;
          }
          iVar9 = iVar5;
          if (uVar15 != 0) {
            param_5[lVar17] = dVar21 + param_1[lVar17] * dVar22;
            iVar9 = iVar5 + 1;
          }
          uVar12 = 0;
          uVar2 = ((uVar8 - uVar15) - 2 >> 1) + 1;
          iVar6 = uVar2 * 2;
          pdVar10 = param_5 + (ulong)uVar15 + lVar17;
          pdVar13 = param_1 + (ulong)uVar15 + lVar17;
          do {
            dVar18 = *pdVar13;
            uVar12 = uVar12 + 1;
            pdVar10[1] = dVar21 + dVar22 * pdVar13[1];
            *pdVar10 = dVar21 + dVar22 * dVar18;
            pdVar10 = pdVar10 + 2;
            pdVar13 = pdVar13 + 2;
          } while (uVar12 < uVar2);
          uVar2 = iVar9 + iVar6;
          if (uVar8 - uVar15 != iVar6) {
            uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
            *(double *)((long)param_5 + uVar11) =
                 dVar21 + *(double *)((long)param_1 + uVar11) * dVar22;
          }
        }
      }
      iVar16 = iVar16 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar16 != -1);
  }
  return;
}


==================================================================

### FUNC 0026a614 (612 bytes) name=FUN_0026a614

void FUN_0026a614(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  double dVar10;
  undefined8 *puVar11;
  uint uVar12;
  int iVar13;
  double *pdVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  double dVar18;
  
  iVar6 = *param_7;
  iVar16 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar6 - 4U >> 2) + 1;
    iVar7 = uVar1 * 4;
    if (iVar6 + -3 < 1) {
      iVar7 = 0;
    }
    iVar2 = iVar7 + 1;
    uVar9 = iVar6 - iVar7;
    lVar17 = (long)iVar7;
    iVar3 = iVar7 + 2;
    iVar4 = iVar7 + 3;
    do {
      if (0 < iVar6 + -3) {
        uVar12 = 0;
        pdVar14 = param_1;
        puVar11 = param_5;
        do {
          uVar12 = uVar12 + 1;
          dVar18 = pdVar14[1];
          dVar10 = *pdVar14;
          puVar11[1] = CONCAT44((float)pdVar14[3],(float)pdVar14[2]);
          *puVar11 = CONCAT44((float)dVar18,(float)dVar10);
          pdVar14 = pdVar14 + 4;
          puVar11 = puVar11 + 2;
        } while (uVar12 < uVar1);
      }
      if (iVar7 < iVar6) {
        uVar12 = (uint)((ulong)param_1 >> 3) & 1;
        if (uVar9 < uVar12) {
          uVar12 = uVar9;
        }
        if (uVar9 < 5) {
          uVar12 = uVar9;
        }
        iVar13 = iVar7;
        if (uVar12 != 0) {
          *(float *)((long)param_5 + lVar17 * 4) = (float)param_1[lVar17];
          iVar13 = iVar2;
          if (((uVar12 != 1) &&
              (*(float *)((long)param_5 + (long)iVar2 * 4) = (float)param_1[iVar2], iVar13 = iVar3,
              uVar12 != 2)) &&
             (*(float *)((long)param_5 + (long)iVar3 * 4) = (float)param_1[iVar3], iVar13 = iVar4,
             uVar12 == 4)) {
            *(float *)((long)param_5 + (long)iVar4 * 4) = (float)param_1[iVar4];
            iVar13 = iVar7 + 4;
          }
          if (uVar12 == uVar9) goto LAB_0026a828;
        }
        uVar5 = ((uVar9 - uVar12) - 4 >> 2) + 1;
        iVar8 = uVar5 * 4;
        if (2 < (uVar9 - 1) - uVar12) {
          uVar15 = 0;
          puVar11 = (undefined8 *)((long)param_5 + ((ulong)uVar12 + lVar17) * 4);
          pdVar14 = param_1 + (ulong)uVar12 + lVar17;
          do {
            dVar18 = pdVar14[1];
            dVar10 = *pdVar14;
            uVar15 = uVar15 + 1;
            puVar11[1] = CONCAT44((float)pdVar14[3],(float)pdVar14[2]);
            *puVar11 = CONCAT44((float)dVar18,(float)dVar10);
            puVar11 = puVar11 + 2;
            pdVar14 = pdVar14 + 4;
          } while (uVar15 < uVar5);
          iVar13 = iVar13 + iVar8;
          if (iVar8 == uVar9 - uVar12) goto LAB_0026a828;
        }
        iVar8 = iVar13 + 1;
        *(float *)((long)param_5 + (long)iVar13 * 4) = (float)param_1[iVar13];
        if (iVar8 < iVar6) {
          iVar13 = iVar13 + 2;
          *(float *)((long)param_5 + (long)iVar8 * 4) = (float)param_1[iVar8];
          if (iVar13 < iVar6) {
            *(float *)((long)param_5 + (long)iVar13 * 4) = (float)param_1[iVar13];
          }
        }
      }
LAB_0026a828:
      iVar16 = iVar16 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar16 != -1);
  }
  return;
}


==================================================================

### FUNC 0026a878 (1948 bytes) name=FUN_0026a878

void FUN_0026a878(double *param_1,long param_2,undefined8 param_3,undefined8 param_4,double *param_5
                 ,ulong param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  byte bVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [13];
  undefined1 auVar18 [13];
  undefined1 auVar19 [13];
  undefined1 auVar20 [13];
  undefined1 auVar21 [13];
  undefined1 auVar22 [13];
  undefined1 auVar23 [13];
  byte bVar24;
  byte bVar25;
  byte bVar26;
  byte bVar27;
  byte bVar28;
  byte *pbVar29;
  long lVar30;
  double *pdVar31;
  int iVar32;
  long lVar33;
  long lVar34;
  int iVar35;
  uint uVar36;
  double *pdVar37;
  long lVar38;
  uint uVar39;
  long lVar40;
  ulong uVar41;
  undefined1 auVar42 [16];
  ulong uVar43;
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  long lVar46;
  long lVar47;
  long lVar48;
  long lVar49;
  ulong uVar50;
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  ulong uVar54;
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  
  iVar6 = *param_7;
  iVar32 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar12 = iVar6 - 4;
    iVar13 = iVar6 + -3;
    uVar11 = uVar12 >> 2;
    uVar1 = uVar11 + 1;
    uVar2 = (uVar11 - 3 >> 2) + 1;
    iVar8 = uVar2 * 0x10;
    if (uVar12 < 0xc) {
      iVar8 = 0;
    }
    iVar9 = uVar1 * 4;
    if (iVar13 < 1) {
      iVar9 = 0;
    }
    uVar14 = iVar6 - iVar9;
    lVar34 = (long)iVar8;
    lVar46 = NEON_shl((ulong)uVar1,2);
    lVar33 = (long)iVar9;
    lVar49 = NEON_shl(lVar34,3);
    lVar40 = (long)(iVar8 + 4);
    lVar38 = (long)(iVar8 + 8);
    lVar48 = NEON_shl(lVar40,3);
    lVar47 = NEON_shl(lVar38,3);
    do {
      if (0 < iVar13) {
        if ((param_1 < param_5 + (ulong)uVar1 * 4 && param_5 < (double *)((long)param_1 + lVar46))
           || (uVar1 < 5)) {
          pbVar29 = (byte *)((long)param_1 + 1);
          pdVar31 = param_5;
          do {
            pbVar5 = pbVar29 + 4;
            bVar7 = pbVar29[-1];
            pdVar31[1] = (double)*pbVar29;
            *pdVar31 = (double)bVar7;
            bVar7 = pbVar29[1];
            pdVar31[3] = (double)pbVar29[2];
            pdVar31[2] = (double)bVar7;
            pbVar29 = pbVar5;
            pdVar31 = pdVar31 + 4;
          } while (pbVar5 != (byte *)((long)param_1 + (ulong)uVar11 * 4 + 5));
        }
        else {
          if (0xb < uVar12) {
            uVar36 = 0;
            pdVar31 = param_5;
            pdVar37 = param_1;
            do {
              bVar7 = *(byte *)((long)pdVar37 + 1);
              bVar24 = *(byte *)((long)pdVar37 + 9);
              bVar25 = *(byte *)((long)pdVar37 + 0xd);
              uVar36 = uVar36 + 1;
              uVar54 = CONCAT26(0,(uint6)CONCAT14(bVar7,(uint)CONCAT12(bVar7,(ushort)*(byte *)
                                                  pdVar37)) & 0xffff0000ffff);
              auVar21[8] = *(byte *)((long)pdVar37 + 2);
              auVar21._0_8_ = uVar54;
              auVar21._9_3_ = 0;
              auVar21[0xc] = *(byte *)((long)pdVar37 + 3);
              uVar43 = CONCAT35(0,CONCAT14(*(byte *)((long)pdVar37 + 5),
                                           (uint)*(byte *)((long)pdVar37 + 4)));
              auVar17[8] = *(byte *)((long)pdVar37 + 6);
              auVar17._0_8_ = uVar43;
              auVar17._9_3_ = 0;
              auVar17[0xc] = *(byte *)((long)pdVar37 + 7);
              uVar50 = CONCAT26(0,(uint6)CONCAT14(bVar24,(uint)CONCAT12(bVar24,(ushort)*(byte *)(
                                                  pdVar37 + 1))) & 0xffff0000ffff);
              auVar22[8] = *(byte *)((long)pdVar37 + 10);
              auVar22._0_8_ = uVar50;
              auVar22._9_3_ = 0;
              auVar22[0xc] = *(byte *)((long)pdVar37 + 0xb);
              uVar41 = CONCAT35(0,CONCAT14(bVar25,(uint)*(byte *)((long)pdVar37 + 0xc)));
              auVar18[8] = *(byte *)((long)pdVar37 + 0xe);
              auVar18._0_8_ = uVar41;
              auVar18._9_3_ = 0;
              auVar18[0xc] = *(byte *)((long)pdVar37 + 0xf);
              auVar55._0_8_ = uVar54 & 0xffffffff;
              auVar55[8] = bVar7;
              auVar55._9_7_ = 0;
              auVar59._0_8_ = (ulong)auVar21._8_5_ & 0xffffffff;
              auVar59._8_5_ = auVar21._8_5_ >> 0x20;
              auVar59._13_3_ = 0;
              auVar58._0_8_ = uVar43 & 0xffffffff;
              auVar58[8] = *(byte *)((long)pdVar37 + 5);
              auVar58._9_7_ = 0;
              auVar52._0_8_ = (ulong)auVar17._8_5_ & 0xffffffff;
              auVar52._8_5_ = auVar17._8_5_ >> 0x20;
              auVar52._13_3_ = 0;
              auVar56 = NEON_scvtf(auVar55,8);
              pdVar31[1] = auVar56._8_8_;
              *pdVar31 = auVar56._0_8_;
              auVar56 = NEON_scvtf(auVar59,8);
              auVar51._0_8_ = (ulong)auVar22._8_5_ & 0xffffffff;
              auVar51._8_5_ = auVar22._8_5_ >> 0x20;
              auVar51._13_3_ = 0;
              auVar59 = NEON_scvtf(auVar58,8);
              auVar57._0_8_ = uVar41 & 0xffffffff;
              auVar57[8] = bVar25;
              auVar57._9_7_ = 0;
              auVar44 = NEON_scvtf(auVar52,8);
              pdVar31[3] = auVar56._8_8_;
              pdVar31[2] = auVar56._0_8_;
              pdVar31[5] = auVar59._8_8_;
              pdVar31[4] = auVar59._0_8_;
              auVar56[8] = bVar24;
              auVar56._0_8_ = uVar50 & 0xffffffff;
              auVar56._9_7_ = 0;
              auVar59 = NEON_scvtf(auVar56,8);
              pdVar31[7] = auVar44._8_8_;
              pdVar31[6] = auVar44._0_8_;
              auVar52 = NEON_scvtf(auVar51,8);
              auVar44._0_8_ = (ulong)auVar18._8_5_ & 0xffffffff;
              auVar44._8_5_ = auVar18._8_5_ >> 0x20;
              auVar44._13_3_ = 0;
              auVar56 = NEON_scvtf(auVar57,8);
              pdVar31[9] = auVar59._8_8_;
              pdVar31[8] = auVar59._0_8_;
              pdVar31[0xb] = auVar52._8_8_;
              pdVar31[10] = auVar52._0_8_;
              pdVar31[0xd] = auVar56._8_8_;
              pdVar31[0xc] = auVar56._0_8_;
              auVar56 = NEON_scvtf(auVar44,8);
              pdVar31[0xf] = auVar56._8_8_;
              pdVar31[0xe] = auVar56._0_8_;
              pdVar31 = pdVar31 + 0x10;
              pdVar37 = pdVar37 + 2;
            } while (uVar36 < uVar2);
            if (uVar1 == uVar2 * 4) goto LAB_0026ac7c;
          }
          bVar7 = *(byte *)((long)param_1 + lVar34 + 1);
          *(double *)((long)param_5 + lVar49) = (double)*(byte *)((long)param_1 + lVar34);
          *(double *)((long)param_5 + lVar49 + 8) = (double)bVar7;
          bVar7 = *(byte *)((long)param_1 + lVar34 + 3);
          *(double *)((long)param_5 + lVar49 + 0x10) = (double)*(byte *)((long)param_1 + lVar34 + 2)
          ;
          *(double *)((long)param_5 + lVar49 + 0x18) = (double)bVar7;
          if (iVar8 + 4 < iVar13) {
            bVar7 = *(byte *)((long)param_1 + lVar40 + 1);
            *(double *)((long)param_5 + lVar48) = (double)*(byte *)((long)param_1 + lVar40);
            *(double *)((long)param_5 + lVar48 + 8) = (double)bVar7;
            bVar7 = *(byte *)((long)param_1 + lVar40 + 3);
            *(double *)((long)param_5 + lVar48 + 0x10) =
                 (double)*(byte *)((long)param_1 + lVar40 + 2);
            *(double *)((long)param_5 + lVar48 + 0x18) = (double)bVar7;
            if (iVar8 + 8 < iVar13) {
              bVar7 = *(byte *)((long)param_1 + lVar38 + 1);
              *(double *)((long)param_5 + lVar47) = (double)*(byte *)((long)param_1 + lVar38);
              *(double *)((long)param_5 + lVar47 + 8) = (double)bVar7;
              bVar7 = *(byte *)((long)param_1 + lVar38 + 3);
              *(double *)((long)param_5 + lVar47 + 0x10) =
                   (double)*(byte *)((long)param_1 + lVar38 + 2);
              *(double *)((long)param_5 + lVar47 + 0x18) = (double)bVar7;
            }
          }
        }
      }
LAB_0026ac7c:
      if (iVar9 < iVar6) {
        pdVar31 = param_5 + lVar33;
        pdVar37 = (double *)((long)param_1 + lVar33);
        if ((pdVar31 < (double *)((long)param_1 + lVar33 + (ulong)uVar14) &&
             pdVar37 < param_5 + lVar33 + (ulong)uVar14) || (uVar14 < 0x15)) {
          lVar30 = 0;
          do {
            pdVar31[lVar30] = (double)*(byte *)((long)pdVar37 + lVar30);
            lVar30 = lVar30 + 1;
          } while (lVar30 != (ulong)(uint)((iVar6 + -1) - iVar9) + 1);
        }
        else {
          uVar3 = (uint)((ulong)pdVar31 >> 3) & 1;
          uVar36 = uVar14;
          if (uVar3 < uVar14) {
            uVar36 = uVar3;
          }
          iVar35 = iVar9;
          if (uVar36 != 0) {
            *pdVar31 = (double)*(byte *)pdVar37;
            iVar35 = iVar9 + 1;
          }
          uVar3 = ((uVar14 - uVar36) - 0x10 >> 4) + 1;
          uVar39 = 0;
          iVar10 = uVar3 * 0x10;
          pdVar31 = param_5 + (ulong)uVar36 + lVar33;
          pbVar29 = (byte *)((long)param_1 + lVar33 + (ulong)uVar36);
          do {
            bVar7 = pbVar29[1];
            bVar24 = pbVar29[8];
            bVar25 = pbVar29[9];
            bVar26 = pbVar29[10];
            bVar27 = pbVar29[0xb];
            bVar28 = pbVar29[0xd];
            uVar39 = uVar39 + 1;
            uVar50 = CONCAT26(0,(uint6)CONCAT14(bVar7,(uint)CONCAT12(bVar7,(ushort)*pbVar29)) &
                                0xffff0000ffff);
            auVar23[8] = pbVar29[2];
            auVar23._0_8_ = uVar50;
            auVar23._9_3_ = 0;
            auVar23[0xc] = pbVar29[3];
            uVar43 = CONCAT35(0,CONCAT14(pbVar29[5],(uint)pbVar29[4]));
            auVar19[8] = pbVar29[6];
            auVar19._0_8_ = uVar43;
            auVar19._9_3_ = 0;
            auVar19[0xc] = pbVar29[7];
            uVar41 = CONCAT35(0,CONCAT14(bVar28,(uint)pbVar29[0xc]));
            auVar20[8] = pbVar29[0xe];
            auVar20._0_8_ = uVar41;
            auVar20._9_3_ = 0;
            auVar20[0xc] = pbVar29[0xf];
            auVar60._0_8_ = uVar50 & 0xffffffff;
            auVar60[8] = bVar7;
            auVar60._9_7_ = 0;
            auVar53._0_8_ = (ulong)auVar23._8_5_ & 0xffffffff;
            auVar53._8_5_ = auVar23._8_5_ >> 0x20;
            auVar53._13_3_ = 0;
            auVar62._0_8_ = uVar43 & 0xffffffff;
            auVar62[8] = pbVar29[5];
            auVar62._9_7_ = 0;
            auVar45._0_8_ = (ulong)auVar19._8_5_ & 0xffffffff;
            auVar45._8_5_ = auVar19._8_5_ >> 0x20;
            auVar45._13_3_ = 0;
            auVar56 = NEON_scvtf(auVar60,8);
            pdVar31[1] = auVar56._8_8_;
            *pdVar31 = auVar56._0_8_;
            auVar44 = NEON_scvtf(auVar53,8);
            auVar52 = NEON_scvtf(auVar62,8);
            auVar61._0_8_ = uVar41 & 0xffffffff;
            auVar61[8] = bVar28;
            auVar61._9_7_ = 0;
            auVar56 = NEON_scvtf(auVar45,8);
            pdVar31[3] = auVar44._8_8_;
            pdVar31[2] = auVar44._0_8_;
            *(undefined1 (*) [16])(pdVar31 + 4) = auVar52;
            auVar16[8] = bVar25;
            auVar16._0_8_ =
                 (ulong)((uint6)CONCAT14(bVar25,(uint)CONCAT12(bVar25,(ushort)bVar24)) &
                        0xffff0000ffff) & 0xffffffff;
            auVar16._9_7_ = 0;
            auVar52 = NEON_scvtf(auVar16,8);
            pdVar31[7] = auVar56._8_8_;
            pdVar31[6] = auVar56._0_8_;
            auVar15[8] = bVar27;
            auVar15._0_8_ = (ulong)CONCAT14(bVar27,(uint)bVar26) & 0xffffffff;
            auVar15._9_7_ = 0;
            auVar44 = NEON_scvtf(auVar15,8);
            pdVar31[9] = auVar52._8_8_;
            pdVar31[8] = auVar52._0_8_;
            auVar56 = NEON_scvtf(auVar61,8);
            pdVar31[0xb] = auVar44._8_8_;
            pdVar31[10] = auVar44._0_8_;
            pdVar31[0xd] = auVar56._8_8_;
            pdVar31[0xc] = auVar56._0_8_;
            auVar42._0_8_ = (ulong)auVar20._8_5_ & 0xffffffff;
            auVar42._8_5_ = auVar20._8_5_ >> 0x20;
            auVar42._13_3_ = 0;
            auVar56 = NEON_scvtf(auVar42,8);
            pdVar31[0xf] = auVar56._8_8_;
            pdVar31[0xe] = auVar56._0_8_;
            pdVar31 = pdVar31 + 0x10;
            pbVar29 = pbVar29 + 0x10;
          } while (uVar39 < uVar3);
          iVar35 = iVar35 + iVar10;
          if (uVar14 - uVar36 != iVar10) {
            iVar10 = iVar35 + 1;
            param_5[iVar35] = (double)*(byte *)((long)param_1 + (long)iVar35);
            if (iVar10 < iVar6) {
              iVar4 = iVar35 + 2;
              param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
              if (iVar4 < iVar6) {
                iVar10 = iVar35 + 3;
                param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                if (iVar10 < iVar6) {
                  iVar4 = iVar35 + 4;
                  param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
                  if (iVar4 < iVar6) {
                    iVar10 = iVar35 + 5;
                    param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                    if (iVar10 < iVar6) {
                      iVar4 = iVar35 + 6;
                      param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
                      if (iVar4 < iVar6) {
                        iVar10 = iVar35 + 7;
                        param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                        if (iVar10 < iVar6) {
                          iVar4 = iVar35 + 8;
                          param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
                          if (iVar4 < iVar6) {
                            iVar10 = iVar35 + 9;
                            param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                            if (iVar10 < iVar6) {
                              iVar4 = iVar35 + 10;
                              param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
                              if (iVar4 < iVar6) {
                                iVar10 = iVar35 + 0xb;
                                param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                                if (iVar10 < iVar6) {
                                  iVar4 = iVar35 + 0xc;
                                  param_5[iVar10] = (double)*(byte *)((long)param_1 + (long)iVar10);
                                  if (iVar4 < iVar6) {
                                    iVar10 = iVar35 + 0xd;
                                    param_5[iVar4] = (double)*(byte *)((long)param_1 + (long)iVar4);
                                    if (iVar10 < iVar6) {
                                      iVar35 = iVar35 + 0xe;
                                      param_5[iVar10] =
                                           (double)*(byte *)((long)param_1 + (long)iVar10);
                                      if (iVar35 < iVar6) {
                                        param_5[iVar35] =
                                             (double)*(byte *)((long)param_1 + (long)iVar35);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar32 = iVar32 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar32 != -1);
  }
  return;
}


==================================================================

### FUNC 0026b014 (1948 bytes) name=FUN_0026b014

void FUN_0026b014(double *param_1,long param_2,undefined8 param_3,undefined8 param_4,double *param_5
                 ,ulong param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  int iVar6;
  byte bVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  char cVar18;
  char cVar19;
  char cVar20;
  char cVar21;
  char cVar22;
  char cVar23;
  char cVar24;
  char *pcVar25;
  long lVar26;
  double *pdVar27;
  int iVar28;
  long lVar29;
  long lVar30;
  int iVar31;
  uint uVar32;
  double *pdVar33;
  long lVar34;
  uint uVar35;
  long lVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  long lVar40;
  long lVar41;
  long lVar42;
  long lVar43;
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  
  iVar6 = *param_7;
  iVar28 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar13 = iVar6 - 4;
    iVar14 = iVar6 + -3;
    uVar12 = uVar13 >> 2;
    uVar1 = uVar12 + 1;
    uVar2 = (uVar12 - 3 >> 2) + 1;
    iVar9 = uVar2 * 0x10;
    if (uVar13 < 0xc) {
      iVar9 = 0;
    }
    iVar10 = uVar1 * 4;
    if (iVar14 < 1) {
      iVar10 = 0;
    }
    uVar15 = iVar6 - iVar10;
    lVar30 = (long)iVar9;
    lVar40 = NEON_shl((ulong)uVar1,2);
    lVar29 = (long)iVar10;
    lVar43 = NEON_shl(lVar30,3);
    lVar36 = (long)(iVar9 + 4);
    lVar34 = (long)(iVar9 + 8);
    lVar42 = NEON_shl(lVar36,3);
    lVar41 = NEON_shl(lVar34,3);
    do {
      if (0 < iVar14) {
        if ((param_1 < param_5 + (ulong)uVar1 * 4 && param_5 < (double *)((long)param_1 + lVar40))
           || (uVar1 < 5)) {
          pcVar25 = (char *)((long)param_1 + 1);
          pdVar27 = param_5;
          do {
            pcVar5 = pcVar25 + 4;
            bVar7 = pcVar25[-1];
            pdVar27[1] = (double)(int)*pcVar25;
            *pdVar27 = (double)bVar7;
            bVar7 = pcVar25[1];
            pdVar27[3] = (double)(byte)pcVar25[2];
            pdVar27[2] = (double)bVar7;
            pcVar25 = pcVar5;
            pdVar27 = pdVar27 + 4;
          } while (pcVar5 != (char *)((long)param_1 + (ulong)uVar12 * 4 + 5));
        }
        else {
          if (0xb < uVar13) {
            uVar32 = 0;
            pdVar27 = param_5;
            pdVar33 = param_1;
            do {
              cVar8 = *(char *)(pdVar33 + 1);
              cVar18 = *(char *)((long)pdVar33 + 9);
              cVar19 = *(char *)((long)pdVar33 + 10);
              cVar20 = *(char *)((long)pdVar33 + 0xb);
              cVar21 = *(char *)((long)pdVar33 + 0xc);
              cVar22 = *(char *)((long)pdVar33 + 0xd);
              cVar23 = *(char *)((long)pdVar33 + 0xe);
              cVar24 = *(char *)((long)pdVar33 + 0xf);
              uVar32 = uVar32 + 1;
              auVar47._0_8_ = (long)(int)(short)*(char *)pdVar33;
              auVar47._8_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 1);
              auVar51._0_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 2);
              auVar51._8_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 3);
              auVar50._0_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 4);
              auVar50._8_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 5);
              auVar45._0_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 6);
              auVar45._8_8_ = (long)(int)(short)*(char *)((long)pdVar33 + 7);
              auVar48 = NEON_scvtf(auVar47,8);
              pdVar27[1] = auVar48._8_8_;
              *pdVar27 = auVar48._0_8_;
              auVar48 = NEON_scvtf(auVar51,8);
              auVar44._0_8_ = (long)(int)(short)cVar19;
              auVar44._8_8_ = (long)(int)(short)cVar20;
              auVar51 = NEON_scvtf(auVar50,8);
              auVar49._0_8_ = (long)(int)(short)cVar21;
              auVar49._8_8_ = (long)(int)(short)cVar22;
              auVar38 = NEON_scvtf(auVar45,8);
              pdVar27[3] = auVar48._8_8_;
              pdVar27[2] = auVar48._0_8_;
              pdVar27[5] = auVar51._8_8_;
              pdVar27[4] = auVar51._0_8_;
              auVar48._8_4_ = (int)(short)cVar18;
              auVar48._0_8_ = (long)(int)(short)cVar8;
              auVar48._12_4_ = (int)(short)cVar18 >> 0x1f;
              auVar51 = NEON_scvtf(auVar48,8);
              pdVar27[7] = auVar38._8_8_;
              pdVar27[6] = auVar38._0_8_;
              auVar45 = NEON_scvtf(auVar44,8);
              auVar38._0_8_ = (long)(int)(short)cVar23;
              auVar38._8_8_ = (long)(int)(short)cVar24;
              auVar48 = NEON_scvtf(auVar49,8);
              pdVar27[9] = auVar51._8_8_;
              pdVar27[8] = auVar51._0_8_;
              pdVar27[0xb] = auVar45._8_8_;
              pdVar27[10] = auVar45._0_8_;
              pdVar27[0xd] = auVar48._8_8_;
              pdVar27[0xc] = auVar48._0_8_;
              auVar48 = NEON_scvtf(auVar38,8);
              pdVar27[0xf] = auVar48._8_8_;
              pdVar27[0xe] = auVar48._0_8_;
              pdVar27 = pdVar27 + 0x10;
              pdVar33 = pdVar33 + 2;
            } while (uVar32 < uVar2);
            if (uVar1 == uVar2 * 4) goto LAB_0026b418;
          }
          cVar8 = *(char *)((long)param_1 + lVar30 + 1);
          *(double *)((long)param_5 + lVar43) = (double)(int)*(char *)((long)param_1 + lVar30);
          *(double *)((long)param_5 + lVar43 + 8) = (double)(int)cVar8;
          cVar8 = *(char *)((long)param_1 + lVar30 + 3);
          *(double *)((long)param_5 + lVar43 + 0x10) =
               (double)(int)*(char *)((long)param_1 + lVar30 + 2);
          *(double *)((long)param_5 + lVar43 + 0x18) = (double)(int)cVar8;
          if (iVar9 + 4 < iVar14) {
            cVar8 = *(char *)((long)param_1 + lVar36 + 1);
            *(double *)((long)param_5 + lVar42) = (double)(int)*(char *)((long)param_1 + lVar36);
            *(double *)((long)param_5 + lVar42 + 8) = (double)(int)cVar8;
            cVar8 = *(char *)((long)param_1 + lVar36 + 3);
            *(double *)((long)param_5 + lVar42 + 0x10) =
                 (double)(int)*(char *)((long)param_1 + lVar36 + 2);
            *(double *)((long)param_5 + lVar42 + 0x18) = (double)(int)cVar8;
            if (iVar9 + 8 < iVar14) {
              cVar8 = *(char *)((long)param_1 + lVar34 + 1);
              *(double *)((long)param_5 + lVar41) = (double)(int)*(char *)((long)param_1 + lVar34);
              *(double *)((long)param_5 + lVar41 + 8) = (double)(int)cVar8;
              cVar8 = *(char *)((long)param_1 + lVar34 + 3);
              *(double *)((long)param_5 + lVar41 + 0x10) =
                   (double)(int)*(char *)((long)param_1 + lVar34 + 2);
              *(double *)((long)param_5 + lVar41 + 0x18) = (double)(int)cVar8;
            }
          }
        }
      }
LAB_0026b418:
      if (iVar10 < iVar6) {
        pdVar27 = param_5 + lVar29;
        pdVar33 = (double *)((long)param_1 + lVar29);
        if ((pdVar27 < (double *)((long)param_1 + lVar29 + (ulong)uVar15) &&
             pdVar33 < param_5 + lVar29 + (ulong)uVar15) || (uVar15 < 0x15)) {
          lVar26 = 0;
          do {
            pdVar27[lVar26] = (double)(int)*(char *)((long)pdVar33 + lVar26);
            lVar26 = lVar26 + 1;
          } while (lVar26 != (ulong)(uint)((iVar6 + -1) - iVar10) + 1);
        }
        else {
          uVar3 = (uint)((ulong)pdVar27 >> 3) & 1;
          uVar32 = uVar15;
          if (uVar3 < uVar15) {
            uVar32 = uVar3;
          }
          iVar31 = iVar10;
          if (uVar32 != 0) {
            *pdVar27 = (double)(int)*(char *)pdVar33;
            iVar31 = iVar10 + 1;
          }
          uVar3 = ((uVar15 - uVar32) - 0x10 >> 4) + 1;
          uVar35 = 0;
          iVar11 = uVar3 * 0x10;
          pdVar27 = param_5 + (ulong)uVar32 + lVar29;
          pcVar25 = (char *)((long)param_1 + lVar29 + (ulong)uVar32);
          do {
            cVar8 = pcVar25[8];
            cVar18 = pcVar25[9];
            cVar19 = pcVar25[10];
            cVar20 = pcVar25[0xb];
            cVar21 = pcVar25[0xc];
            cVar22 = pcVar25[0xd];
            cVar23 = pcVar25[0xe];
            cVar24 = pcVar25[0xf];
            uVar35 = uVar35 + 1;
            auVar52._0_8_ = (long)(int)(short)*pcVar25;
            auVar52._8_8_ = (long)(int)(short)pcVar25[1];
            auVar46._0_8_ = (long)(int)(short)pcVar25[2];
            auVar46._8_8_ = (long)(int)(short)pcVar25[3];
            auVar54._0_8_ = (long)(int)(short)pcVar25[4];
            auVar54._8_8_ = (long)(int)(short)pcVar25[5];
            auVar39._0_8_ = (long)(int)(short)pcVar25[6];
            auVar39._8_8_ = (long)(int)(short)pcVar25[7];
            auVar48 = NEON_scvtf(auVar52,8);
            pdVar27[1] = auVar48._8_8_;
            *pdVar27 = auVar48._0_8_;
            auVar38 = NEON_scvtf(auVar46,8);
            auVar45 = NEON_scvtf(auVar54,8);
            auVar53._0_8_ = (long)(int)(short)cVar21;
            auVar53._8_8_ = (long)(int)(short)cVar22;
            auVar48 = NEON_scvtf(auVar39,8);
            pdVar27[3] = auVar38._8_8_;
            pdVar27[2] = auVar38._0_8_;
            *(undefined1 (*) [16])(pdVar27 + 4) = auVar45;
            auVar17._8_8_ = (long)(int)(short)cVar18;
            auVar17._0_8_ = (long)(int)(short)cVar8;
            auVar45 = NEON_scvtf(auVar17,8);
            pdVar27[7] = auVar48._8_8_;
            pdVar27[6] = auVar48._0_8_;
            auVar16._8_4_ = (int)(short)cVar20;
            auVar16._0_8_ = (long)(int)(short)cVar19;
            auVar16._12_4_ = (int)(short)cVar20 >> 0x1f;
            auVar38 = NEON_scvtf(auVar16,8);
            pdVar27[9] = auVar45._8_8_;
            pdVar27[8] = auVar45._0_8_;
            auVar48 = NEON_scvtf(auVar53,8);
            pdVar27[0xb] = auVar38._8_8_;
            pdVar27[10] = auVar38._0_8_;
            pdVar27[0xd] = auVar48._8_8_;
            pdVar27[0xc] = auVar48._0_8_;
            auVar37._0_8_ = (long)(int)(short)cVar23;
            auVar37._8_8_ = (long)(int)(short)cVar24;
            auVar48 = NEON_scvtf(auVar37,8);
            pdVar27[0xf] = auVar48._8_8_;
            pdVar27[0xe] = auVar48._0_8_;
            pdVar27 = pdVar27 + 0x10;
            pcVar25 = pcVar25 + 0x10;
          } while (uVar35 < uVar3);
          iVar31 = iVar31 + iVar11;
          if (uVar15 - uVar32 != iVar11) {
            iVar11 = iVar31 + 1;
            param_5[iVar31] = (double)(int)*(char *)((long)param_1 + (long)iVar31);
            if (iVar11 < iVar6) {
              iVar4 = iVar31 + 2;
              param_5[iVar11] = (double)(int)*(char *)((long)param_1 + (long)iVar11);
              if (iVar4 < iVar6) {
                iVar11 = iVar31 + 3;
                param_5[iVar4] = (double)(int)*(char *)((long)param_1 + (long)iVar4);
                if (iVar11 < iVar6) {
                  iVar4 = iVar31 + 4;
                  param_5[iVar11] = (double)(int)*(char *)((long)param_1 + (long)iVar11);
                  if (iVar4 < iVar6) {
                    iVar11 = iVar31 + 5;
                    param_5[iVar4] = (double)(int)*(char *)((long)param_1 + (long)iVar4);
                    if (iVar11 < iVar6) {
                      iVar4 = iVar31 + 6;
                      param_5[iVar11] = (double)(int)*(char *)((long)param_1 + (long)iVar11);
                      if (iVar4 < iVar6) {
                        iVar11 = iVar31 + 7;
                        param_5[iVar4] = (double)(int)*(char *)((long)param_1 + (long)iVar4);
                        if (iVar11 < iVar6) {
                          iVar4 = iVar31 + 8;
                          param_5[iVar11] = (double)(int)*(char *)((long)param_1 + (long)iVar11);
                          if (iVar4 < iVar6) {
                            iVar11 = iVar31 + 9;
                            param_5[iVar4] = (double)(int)*(char *)((long)param_1 + (long)iVar4);
                            if (iVar11 < iVar6) {
                              iVar4 = iVar31 + 10;
                              param_5[iVar11] = (double)(int)*(char *)((long)param_1 + (long)iVar11)
                              ;
                              if (iVar4 < iVar6) {
                                iVar11 = iVar31 + 0xb;
                                param_5[iVar4] = (double)(int)*(char *)((long)param_1 + (long)iVar4)
                                ;
                                if (iVar11 < iVar6) {
                                  iVar4 = iVar31 + 0xc;
                                  param_5[iVar11] =
                                       (double)(int)*(char *)((long)param_1 + (long)iVar11);
                                  if (iVar4 < iVar6) {
                                    iVar11 = iVar31 + 0xd;
                                    param_5[iVar4] =
                                         (double)(int)*(char *)((long)param_1 + (long)iVar4);
                                    if (iVar11 < iVar6) {
                                      iVar31 = iVar31 + 0xe;
                                      param_5[iVar11] =
                                           (double)(int)*(char *)((long)param_1 + (long)iVar11);
                                      if (iVar31 < iVar6) {
                                        param_5[iVar31] =
                                             (double)(int)*(char *)((long)param_1 + (long)iVar31);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar28 = iVar28 + -1;
      param_1 = (double *)((long)param_1 + param_2);
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar28 != -1);
  }
  return;
}


==================================================================

### FUNC 0026b7b0 (1348 bytes) name=FUN_0026b7b0

void FUN_0026b7b0(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 (*param_5) [16],ulong param_6,int *param_7)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  ushort uVar12;
  ushort uVar13;
  ushort uVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  uint uVar19;
  undefined1 auVar20 [14];
  undefined1 auVar21 [14];
  undefined1 auVar22 [14];
  undefined1 auVar23 [14];
  long lVar24;
  undefined8 *puVar25;
  int iVar26;
  int iVar27;
  undefined1 (*pauVar28) [16];
  uint uVar29;
  long lVar30;
  long lVar31;
  ushort *puVar32;
  uint uVar33;
  ulong uVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  long lVar37;
  long lVar38;
  long lVar39;
  long lVar40;
  long lVar41;
  ulong uVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  long lVar47;
  long lVar48;
  long lVar49;
  long lVar50;
  long lVar51;
  long lVar52;
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  
  iVar11 = *param_7;
  iVar27 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar18 = iVar11 - 4;
    iVar1 = (uVar18 >> 2) + 1;
    uVar2 = ((uVar18 >> 2) - 1 >> 1) + 1;
    iVar15 = iVar1 * 4;
    iVar16 = uVar2 * 8;
    if (uVar18 < 4) {
      iVar16 = 0;
    }
    if (iVar11 + -3 < 1) {
      iVar15 = 0;
    }
    iVar3 = iVar15 + 1;
    lVar30 = (long)iVar16;
    iVar16 = iVar15 + 2;
    uVar19 = iVar11 - iVar15;
    lVar24 = (long)iVar15;
    lVar31 = lVar30 * 8;
    lVar52 = NEON_shl(lVar24,3);
    lVar51 = NEON_shl(lVar24,1);
    iVar4 = iVar15 + 3;
    iVar5 = iVar15 + 4;
    iVar6 = iVar15 + 5;
    iVar7 = iVar15 + 6;
    lVar50 = NEON_shl((long)iVar3,3);
    lVar37 = NEON_shl((long)iVar3,1);
    iVar8 = iVar15 + 7;
    lVar49 = NEON_shl((long)iVar16,3);
    lVar48 = NEON_shl((long)iVar4,3);
    lVar47 = NEON_shl((long)iVar5,3);
    lVar41 = NEON_shl((long)iVar6,3);
    lVar40 = NEON_shl((long)iVar7,3);
    lVar39 = NEON_shl((long)iVar8,3);
    lVar38 = NEON_shl((long)iVar8,1);
    do {
      if (0 < iVar11 + -3) {
        if (3 < uVar18) {
          uVar29 = 0;
          pauVar28 = param_5;
          puVar32 = param_1;
          do {
            uVar29 = uVar29 + 1;
            uVar42 = CONCAT26(0,CONCAT24(puVar32[1],(uint)*puVar32));
            auVar20._8_2_ = puVar32[2];
            auVar20._0_8_ = uVar42;
            auVar20._10_2_ = 0;
            auVar20._12_2_ = puVar32[3];
            uVar34 = CONCAT26(0,CONCAT24(puVar32[5],(uint)puVar32[4]));
            auVar21._8_2_ = puVar32[6];
            auVar21._0_8_ = uVar34;
            auVar21._10_2_ = 0;
            auVar21._12_2_ = puVar32[7];
            auVar53._0_8_ = uVar42 & 0xffffffff;
            auVar53._8_2_ = puVar32[1];
            auVar53._10_6_ = 0;
            auVar43._0_8_ = (ulong)auVar20._8_6_ & 0xffffffff;
            auVar43._8_6_ = auVar20._8_6_ >> 0x20;
            auVar43._14_2_ = 0;
            auVar44._0_8_ = uVar34 & 0xffffffff;
            auVar44._8_2_ = puVar32[5];
            auVar44._10_6_ = 0;
            auVar35._0_8_ = (ulong)auVar21._8_6_ & 0xffffffff;
            auVar35._8_6_ = auVar21._8_6_ >> 0x20;
            auVar35._14_2_ = 0;
            auVar53 = NEON_scvtf(auVar53,8);
            *pauVar28 = auVar53;
            auVar43 = NEON_scvtf(auVar43,8);
            auVar44 = NEON_scvtf(auVar44,8);
            auVar35 = NEON_scvtf(auVar35,8);
            *(long *)(pauVar28[1] + 8) = auVar43._8_8_;
            *(long *)pauVar28[1] = auVar43._0_8_;
            *(long *)(pauVar28[2] + 8) = auVar44._8_8_;
            *(long *)pauVar28[2] = auVar44._0_8_;
            *(long *)(pauVar28[3] + 8) = auVar35._8_8_;
            *(long *)pauVar28[3] = auVar35._0_8_;
            pauVar28 = pauVar28 + 4;
            puVar32 = puVar32 + 8;
          } while (uVar29 < uVar2);
          if (iVar1 == uVar2 * 2) goto LAB_0026ba1c;
        }
        uVar12 = param_1[lVar30 + 1];
        uVar13 = param_1[lVar30 + 2];
        uVar14 = param_1[lVar30 + 3];
        *(double *)(*param_5 + lVar31) = (double)param_1[lVar30];
        *(double *)(*param_5 + lVar31 + 8) = (double)uVar12;
        *(double *)(param_5[1] + lVar31) = (double)uVar13;
        *(double *)(param_5[1] + lVar31 + 8) = (double)uVar14;
      }
LAB_0026ba1c:
      if (iVar15 < iVar11) {
        uVar29 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar19 < uVar29) {
          uVar29 = uVar19;
        }
        if (uVar19 < 9) {
          uVar29 = uVar19;
        }
        iVar26 = iVar15;
        if (uVar29 != 0) {
          *(double *)(*param_5 + lVar52) = (double)*(ushort *)((long)param_1 + lVar51);
          iVar26 = iVar3;
          if ((((uVar29 != 1) &&
               (*(double *)(*param_5 + lVar50) = (double)*(ushort *)((long)param_1 + lVar37),
               iVar26 = iVar16, uVar29 != 2)) &&
              (*(double *)(*param_5 + lVar49) = (double)param_1[iVar16], iVar26 = iVar4, uVar29 != 3
              )) && (((*(double *)(*param_5 + lVar48) = (double)param_1[iVar4], iVar26 = iVar5,
                      uVar29 != 4 &&
                      (*(double *)(*param_5 + lVar47) = (double)param_1[iVar5], iVar26 = iVar6,
                      uVar29 != 5)) &&
                     ((*(double *)(*param_5 + lVar41) = (double)param_1[iVar6], iVar26 = iVar7,
                      uVar29 != 6 &&
                      (*(double *)(*param_5 + lVar40) = (double)param_1[iVar7], iVar26 = iVar8,
                      uVar29 == 8)))))) {
            *(double *)(*param_5 + lVar39) = (double)*(ushort *)((long)param_1 + lVar38);
            iVar26 = iVar15 + 8;
          }
          if (uVar29 == uVar19) goto LAB_0026bc74;
        }
        uVar9 = ((uVar19 - uVar29) - 8 >> 3) + 1;
        iVar17 = uVar9 * 8;
        if (6 < (uVar19 - 1) - uVar29) {
          uVar33 = 0;
          puVar25 = (undefined8 *)(*param_5 + ((ulong)uVar29 + lVar24) * 8);
          puVar32 = param_1 + (ulong)uVar29 + lVar24;
          do {
            uVar33 = uVar33 + 1;
            uVar42 = CONCAT26(0,CONCAT24(puVar32[1],(uint)*puVar32));
            auVar22._8_2_ = puVar32[2];
            auVar22._0_8_ = uVar42;
            auVar22._10_2_ = 0;
            auVar22._12_2_ = puVar32[3];
            uVar34 = CONCAT26(0,CONCAT24(puVar32[5],(uint)puVar32[4]));
            auVar23._8_2_ = puVar32[6];
            auVar23._0_8_ = uVar34;
            auVar23._10_2_ = 0;
            auVar23._12_2_ = puVar32[7];
            auVar46._0_8_ = uVar42 & 0xffffffff;
            auVar46._8_2_ = puVar32[1];
            auVar46._10_6_ = 0;
            auVar54._0_8_ = (ulong)auVar22._8_6_ & 0xffffffff;
            auVar54._8_6_ = auVar22._8_6_ >> 0x20;
            auVar54._14_2_ = 0;
            auVar45._0_8_ = uVar34 & 0xffffffff;
            auVar45._8_2_ = puVar32[5];
            auVar45._10_6_ = 0;
            auVar36._0_8_ = (ulong)auVar23._8_6_ & 0xffffffff;
            auVar36._8_6_ = auVar23._8_6_ >> 0x20;
            auVar36._14_2_ = 0;
            auVar35 = NEON_scvtf(auVar46,8);
            puVar25[1] = auVar35._8_8_;
            *puVar25 = auVar35._0_8_;
            auVar44 = NEON_scvtf(auVar54,8);
            auVar43 = NEON_scvtf(auVar45,8);
            auVar35 = NEON_scvtf(auVar36,8);
            *(undefined1 (*) [16])(puVar25 + 2) = auVar44;
            puVar25[5] = auVar43._8_8_;
            puVar25[4] = auVar43._0_8_;
            puVar25[7] = auVar35._8_8_;
            puVar25[6] = auVar35._0_8_;
            puVar25 = puVar25 + 8;
            puVar32 = puVar32 + 8;
          } while (uVar33 < uVar9);
          iVar26 = iVar26 + iVar17;
          if (iVar17 == uVar19 - uVar29) goto LAB_0026bc74;
        }
        iVar17 = iVar26 + 1;
        *(double *)(*param_5 + (long)iVar26 * 8) = (double)param_1[iVar26];
        if (iVar17 < iVar11) {
          iVar10 = iVar26 + 2;
          *(double *)(*param_5 + (long)iVar17 * 8) = (double)param_1[iVar17];
          if (iVar10 < iVar11) {
            iVar17 = iVar26 + 3;
            *(double *)(*param_5 + (long)iVar10 * 8) = (double)param_1[iVar10];
            if (iVar17 < iVar11) {
              iVar10 = iVar26 + 4;
              *(double *)(*param_5 + (long)iVar17 * 8) = (double)param_1[iVar17];
              if (iVar10 < iVar11) {
                iVar17 = iVar26 + 5;
                *(double *)(*param_5 + (long)iVar10 * 8) = (double)param_1[iVar10];
                if (iVar17 < iVar11) {
                  iVar26 = iVar26 + 6;
                  *(double *)(*param_5 + (long)iVar17 * 8) = (double)param_1[iVar17];
                  if (iVar26 < iVar11) {
                    *(double *)(*param_5 + (long)iVar26 * 8) = (double)param_1[iVar26];
                  }
                }
              }
            }
          }
        }
      }
LAB_0026bc74:
      iVar27 = iVar27 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined1 (*) [16])(*param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar27 != -1);
  }
  return;
}


==================================================================

### FUNC 0026bcf4 (1348 bytes) name=FUN_0026bcf4

void FUN_0026bcf4(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 (*param_5) [16],ulong param_6,int *param_7)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  short sVar12;
  short sVar13;
  short sVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  uint uVar19;
  long lVar20;
  undefined8 *puVar21;
  int iVar22;
  int iVar23;
  undefined1 (*pauVar24) [16];
  uint uVar25;
  long lVar26;
  long lVar27;
  short *psVar28;
  uint uVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  long lVar32;
  long lVar33;
  long lVar34;
  long lVar35;
  long lVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  long lVar41;
  long lVar42;
  long lVar43;
  long lVar44;
  long lVar45;
  long lVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  
  iVar11 = *param_7;
  iVar23 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar18 = iVar11 - 4;
    iVar1 = (uVar18 >> 2) + 1;
    uVar2 = ((uVar18 >> 2) - 1 >> 1) + 1;
    iVar15 = iVar1 * 4;
    iVar16 = uVar2 * 8;
    if (uVar18 < 4) {
      iVar16 = 0;
    }
    if (iVar11 + -3 < 1) {
      iVar15 = 0;
    }
    iVar3 = iVar15 + 1;
    lVar26 = (long)iVar16;
    iVar16 = iVar15 + 2;
    uVar19 = iVar11 - iVar15;
    lVar20 = (long)iVar15;
    lVar27 = lVar26 * 8;
    lVar46 = NEON_shl(lVar20,3);
    lVar45 = NEON_shl(lVar20,1);
    iVar4 = iVar15 + 3;
    iVar5 = iVar15 + 4;
    iVar6 = iVar15 + 5;
    iVar7 = iVar15 + 6;
    lVar44 = NEON_shl((long)iVar3,3);
    lVar32 = NEON_shl((long)iVar3,1);
    iVar8 = iVar15 + 7;
    lVar43 = NEON_shl((long)iVar16,3);
    lVar42 = NEON_shl((long)iVar4,3);
    lVar41 = NEON_shl((long)iVar5,3);
    lVar36 = NEON_shl((long)iVar6,3);
    lVar35 = NEON_shl((long)iVar7,3);
    lVar34 = NEON_shl((long)iVar8,3);
    lVar33 = NEON_shl((long)iVar8,1);
    do {
      if (0 < iVar11 + -3) {
        if (3 < uVar18) {
          uVar25 = 0;
          pauVar24 = param_5;
          psVar28 = param_1;
          do {
            uVar25 = uVar25 + 1;
            auVar47._0_8_ = (long)(int)*psVar28;
            auVar47._8_8_ = (long)(int)psVar28[1];
            auVar37._0_8_ = (long)(int)psVar28[2];
            auVar37._8_8_ = (long)(int)psVar28[3];
            auVar38._0_8_ = (long)(int)psVar28[4];
            auVar38._8_8_ = (long)(int)psVar28[5];
            auVar30._0_8_ = (long)(int)psVar28[6];
            auVar30._8_8_ = (long)(int)psVar28[7];
            auVar47 = NEON_scvtf(auVar47,8);
            *pauVar24 = auVar47;
            auVar37 = NEON_scvtf(auVar37,8);
            auVar38 = NEON_scvtf(auVar38,8);
            auVar30 = NEON_scvtf(auVar30,8);
            *(long *)(pauVar24[1] + 8) = auVar37._8_8_;
            *(long *)pauVar24[1] = auVar37._0_8_;
            *(long *)(pauVar24[2] + 8) = auVar38._8_8_;
            *(long *)pauVar24[2] = auVar38._0_8_;
            *(long *)(pauVar24[3] + 8) = auVar30._8_8_;
            *(long *)pauVar24[3] = auVar30._0_8_;
            pauVar24 = pauVar24 + 4;
            psVar28 = psVar28 + 8;
          } while (uVar25 < uVar2);
          if (iVar1 == uVar2 * 2) goto LAB_0026bf60;
        }
        sVar12 = param_1[lVar26 + 1];
        sVar13 = param_1[lVar26 + 2];
        sVar14 = param_1[lVar26 + 3];
        *(double *)(*param_5 + lVar27) = (double)(int)param_1[lVar26];
        *(double *)(*param_5 + lVar27 + 8) = (double)(int)sVar12;
        *(double *)(param_5[1] + lVar27) = (double)(int)sVar13;
        *(double *)(param_5[1] + lVar27 + 8) = (double)(int)sVar14;
      }
LAB_0026bf60:
      if (iVar15 < iVar11) {
        uVar25 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar19 < uVar25) {
          uVar25 = uVar19;
        }
        if (uVar19 < 9) {
          uVar25 = uVar19;
        }
        iVar22 = iVar15;
        if (uVar25 != 0) {
          *(double *)(*param_5 + lVar46) = (double)(int)*(short *)((long)param_1 + lVar45);
          iVar22 = iVar3;
          if ((((uVar25 != 1) &&
               (*(double *)(*param_5 + lVar44) = (double)(int)*(short *)((long)param_1 + lVar32),
               iVar22 = iVar16, uVar25 != 2)) &&
              (*(double *)(*param_5 + lVar43) = (double)(int)param_1[iVar16], iVar22 = iVar4,
              uVar25 != 3)) &&
             (((*(double *)(*param_5 + lVar42) = (double)(int)param_1[iVar4], iVar22 = iVar5,
               uVar25 != 4 &&
               (*(double *)(*param_5 + lVar41) = (double)(int)param_1[iVar5], iVar22 = iVar6,
               uVar25 != 5)) &&
              ((*(double *)(*param_5 + lVar36) = (double)(int)param_1[iVar6], iVar22 = iVar7,
               uVar25 != 6 &&
               (*(double *)(*param_5 + lVar35) = (double)(int)param_1[iVar7], iVar22 = iVar8,
               uVar25 == 8)))))) {
            *(double *)(*param_5 + lVar34) = (double)(int)*(short *)((long)param_1 + lVar33);
            iVar22 = iVar15 + 8;
          }
          if (uVar25 == uVar19) goto LAB_0026c1b8;
        }
        uVar9 = ((uVar19 - uVar25) - 8 >> 3) + 1;
        iVar17 = uVar9 * 8;
        if (6 < (uVar19 - 1) - uVar25) {
          uVar29 = 0;
          puVar21 = (undefined8 *)(*param_5 + ((ulong)uVar25 + lVar20) * 8);
          psVar28 = param_1 + (ulong)uVar25 + lVar20;
          do {
            uVar29 = uVar29 + 1;
            auVar40._0_8_ = (long)(int)*psVar28;
            auVar40._8_8_ = (long)(int)psVar28[1];
            auVar48._0_8_ = (long)(int)psVar28[2];
            auVar48._8_8_ = (long)(int)psVar28[3];
            auVar39._0_8_ = (long)(int)psVar28[4];
            auVar39._8_8_ = (long)(int)psVar28[5];
            auVar31._0_8_ = (long)(int)psVar28[6];
            auVar31._8_8_ = (long)(int)psVar28[7];
            auVar30 = NEON_scvtf(auVar40,8);
            puVar21[1] = auVar30._8_8_;
            *puVar21 = auVar30._0_8_;
            auVar38 = NEON_scvtf(auVar48,8);
            auVar37 = NEON_scvtf(auVar39,8);
            auVar30 = NEON_scvtf(auVar31,8);
            *(undefined1 (*) [16])(puVar21 + 2) = auVar38;
            puVar21[5] = auVar37._8_8_;
            puVar21[4] = auVar37._0_8_;
            puVar21[7] = auVar30._8_8_;
            puVar21[6] = auVar30._0_8_;
            puVar21 = puVar21 + 8;
            psVar28 = psVar28 + 8;
          } while (uVar29 < uVar9);
          iVar22 = iVar22 + iVar17;
          if (iVar17 == uVar19 - uVar25) goto LAB_0026c1b8;
        }
        iVar17 = iVar22 + 1;
        *(double *)(*param_5 + (long)iVar22 * 8) = (double)(int)param_1[iVar22];
        if (iVar17 < iVar11) {
          iVar10 = iVar22 + 2;
          *(double *)(*param_5 + (long)iVar17 * 8) = (double)(int)param_1[iVar17];
          if (iVar10 < iVar11) {
            iVar17 = iVar22 + 3;
            *(double *)(*param_5 + (long)iVar10 * 8) = (double)(int)param_1[iVar10];
            if (iVar17 < iVar11) {
              iVar10 = iVar22 + 4;
              *(double *)(*param_5 + (long)iVar17 * 8) = (double)(int)param_1[iVar17];
              if (iVar10 < iVar11) {
                iVar17 = iVar22 + 5;
                *(double *)(*param_5 + (long)iVar10 * 8) = (double)(int)param_1[iVar10];
                if (iVar17 < iVar11) {
                  iVar22 = iVar22 + 6;
                  *(double *)(*param_5 + (long)iVar17 * 8) = (double)(int)param_1[iVar17];
                  if (iVar22 < iVar11) {
                    *(double *)(*param_5 + (long)iVar22 * 8) = (double)(int)param_1[iVar22];
                  }
                }
              }
            }
          }
        }
      }
LAB_0026c1b8:
      iVar23 = iVar23 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined1 (*) [16])(*param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar23 != -1);
  }
  return;
}


==================================================================

### FUNC 0026c238 (628 bytes) name=FUN_0026c238

void FUN_0026c238(int *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  undefined8 *puVar10;
  uint uVar11;
  int iVar12;
  int *piVar13;
  uint uVar14;
  int iVar15;
  long lVar16;
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  
  iVar6 = *param_7;
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar6 - 4U >> 2) + 1;
    iVar7 = uVar1 * 4;
    if (iVar6 + -3 < 1) {
      iVar7 = 0;
    }
    iVar2 = iVar7 + 1;
    uVar9 = iVar6 - iVar7;
    lVar16 = (long)iVar7;
    iVar3 = iVar7 + 2;
    iVar4 = iVar7 + 3;
    do {
      if (0 < iVar6 + -3) {
        uVar11 = 0;
        puVar10 = param_5;
        piVar13 = param_1;
        do {
          uVar11 = uVar11 + 1;
          auVar19._0_8_ = (long)*piVar13;
          auVar19._8_8_ = (long)piVar13[1];
          auVar17._0_8_ = (long)piVar13[2];
          auVar17._8_8_ = (long)piVar13[3];
          auVar19 = NEON_scvtf(auVar19,8);
          puVar10[1] = auVar19._8_8_;
          *puVar10 = auVar19._0_8_;
          auVar17 = NEON_scvtf(auVar17,8);
          puVar10[3] = auVar17._8_8_;
          puVar10[2] = auVar17._0_8_;
          puVar10 = puVar10 + 4;
          piVar13 = piVar13 + 4;
        } while (uVar11 < uVar1);
      }
      if (iVar7 < iVar6) {
        uVar11 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar9 < uVar11) {
          uVar11 = uVar9;
        }
        if (uVar9 < 5) {
          uVar11 = uVar9;
        }
        iVar12 = iVar7;
        if (uVar11 != 0) {
          param_5[lVar16] = (double)param_1[lVar16];
          iVar12 = iVar2;
          if (((uVar11 != 1) &&
              (param_5[iVar2] = (double)param_1[iVar2], iVar12 = iVar3, uVar11 != 2)) &&
             (param_5[iVar3] = (double)param_1[iVar3], iVar12 = iVar4, uVar11 == 4)) {
            param_5[iVar4] = (double)param_1[iVar4];
            iVar12 = iVar7 + 4;
          }
          if (uVar11 == uVar9) goto LAB_0026c45c;
        }
        uVar5 = ((uVar9 - uVar11) - 4 >> 2) + 1;
        iVar8 = uVar5 * 4;
        if (2 < (uVar9 - 1) - uVar11) {
          uVar14 = 0;
          puVar10 = param_5 + (ulong)uVar11 + lVar16;
          piVar13 = param_1 + (ulong)uVar11 + lVar16;
          do {
            uVar14 = uVar14 + 1;
            auVar20._0_8_ = (long)*piVar13;
            auVar20._8_8_ = (long)piVar13[1];
            auVar18._0_8_ = (long)piVar13[2];
            auVar18._8_8_ = (long)piVar13[3];
            auVar17 = NEON_scvtf(auVar20,8);
            puVar10[1] = auVar17._8_8_;
            *puVar10 = auVar17._0_8_;
            auVar17 = NEON_scvtf(auVar18,8);
            puVar10[3] = auVar17._8_8_;
            puVar10[2] = auVar17._0_8_;
            puVar10 = puVar10 + 4;
            piVar13 = piVar13 + 4;
          } while (uVar14 < uVar5);
          iVar12 = iVar12 + iVar8;
          if (iVar8 == uVar9 - uVar11) goto LAB_0026c45c;
        }
        iVar8 = iVar12 + 1;
        param_5[iVar12] = (double)param_1[iVar12];
        if (iVar8 < iVar6) {
          iVar12 = iVar12 + 2;
          param_5[iVar8] = (double)param_1[iVar8];
          if (iVar12 < iVar6) {
            param_5[iVar12] = (double)param_1[iVar12];
          }
        }
      }
LAB_0026c45c:
      iVar15 = iVar15 + -1;
      param_1 = (int *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 0026c4ac (612 bytes) name=FUN_0026c4ac

void FUN_0026c4ac(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 double *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  double *pdVar10;
  uint uVar11;
  int iVar12;
  undefined8 *puVar13;
  uint uVar14;
  int iVar15;
  long lVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  
  iVar6 = *param_7;
  iVar15 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar1 = (iVar6 - 4U >> 2) + 1;
    iVar7 = uVar1 * 4;
    if (iVar6 + -3 < 1) {
      iVar7 = 0;
    }
    iVar2 = iVar7 + 1;
    uVar9 = iVar6 - iVar7;
    lVar16 = (long)iVar7;
    iVar3 = iVar7 + 2;
    iVar4 = iVar7 + 3;
    do {
      if (0 < iVar6 + -3) {
        uVar11 = 0;
        pdVar10 = param_5;
        puVar13 = param_1;
        do {
          uVar18 = puVar13[1];
          uVar17 = *puVar13;
          uVar11 = uVar11 + 1;
          pdVar10[1] = (double)(float)((ulong)uVar17 >> 0x20);
          *pdVar10 = (double)(float)uVar17;
          pdVar10[3] = (double)(float)((ulong)uVar18 >> 0x20);
          pdVar10[2] = (double)(float)uVar18;
          pdVar10 = pdVar10 + 4;
          puVar13 = puVar13 + 2;
        } while (uVar11 < uVar1);
      }
      if (iVar7 < iVar6) {
        uVar11 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar9 < uVar11) {
          uVar11 = uVar9;
        }
        if (uVar9 < 5) {
          uVar11 = uVar9;
        }
        iVar12 = iVar7;
        if (uVar11 != 0) {
          param_5[lVar16] = (double)*(float *)((long)param_1 + lVar16 * 4);
          iVar12 = iVar2;
          if (((uVar11 != 1) &&
              (param_5[iVar2] = (double)*(float *)((long)param_1 + (long)iVar2 * 4), iVar12 = iVar3,
              uVar11 != 2)) &&
             (param_5[iVar3] = (double)*(float *)((long)param_1 + (long)iVar3 * 4), iVar12 = iVar4,
             uVar11 == 4)) {
            param_5[iVar4] = (double)*(float *)((long)param_1 + (long)iVar4 * 4);
            iVar12 = iVar7 + 4;
          }
          if (uVar11 == uVar9) goto LAB_0026c6c0;
        }
        uVar5 = ((uVar9 - uVar11) - 4 >> 2) + 1;
        iVar8 = uVar5 * 4;
        if (2 < (uVar9 - 1) - uVar11) {
          uVar14 = 0;
          pdVar10 = param_5 + (ulong)uVar11 + lVar16;
          puVar13 = (undefined8 *)((long)param_1 + ((ulong)uVar11 + lVar16) * 4);
          do {
            uVar18 = puVar13[1];
            uVar17 = *puVar13;
            uVar14 = uVar14 + 1;
            pdVar10[1] = (double)(float)((ulong)uVar17 >> 0x20);
            *pdVar10 = (double)(float)uVar17;
            pdVar10[3] = (double)(float)((ulong)uVar18 >> 0x20);
            pdVar10[2] = (double)(float)uVar18;
            pdVar10 = pdVar10 + 4;
            puVar13 = puVar13 + 2;
          } while (uVar14 < uVar5);
          iVar12 = iVar12 + iVar8;
          if (iVar8 == uVar9 - uVar11) goto LAB_0026c6c0;
        }
        iVar8 = iVar12 + 1;
        param_5[iVar12] = (double)*(float *)((long)param_1 + (long)iVar12 * 4);
        if (iVar8 < iVar6) {
          iVar12 = iVar12 + 2;
          param_5[iVar8] = (double)*(float *)((long)param_1 + (long)iVar8 * 4);
          if (iVar12 < iVar6) {
            param_5[iVar12] = (double)*(float *)((long)param_1 + (long)iVar12 * 4);
          }
        }
      }
LAB_0026c6c0:
      iVar15 = iVar15 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (iVar15 != -1);
  }
  return;
}


==================================================================

### FUNC 0026c710 (136 bytes) name=FUN_0026c710

void FUN_0026c710(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined1 *)(param_3 + lVar1) =
             *(undefined1 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1));
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined1 *)(param_3 + lVar1) =
               *(undefined1 *)
                (param_2 + (int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)));
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + param_5;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026c798 (136 bytes) name=FUN_0026c798

void FUN_0026c798(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined1 *)(param_3 + lVar1) =
             *(undefined1 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1));
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined1 *)(param_3 + lVar1) =
               *(undefined1 *)
                (param_2 + (int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)));
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + param_5;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026c820 (136 bytes) name=FUN_0026c820

void FUN_0026c820(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined2 *)(param_3 + lVar1 * 2) =
             *(undefined2 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1) * 2);
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined2 *)(param_3 + lVar1 * 2) =
               *(undefined2 *)
                (param_2 + (long)(int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)) * 2)
          ;
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + (long)param_5 * 2;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026c8a8 (136 bytes) name=FUN_0026c8a8

void FUN_0026c8a8(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined2 *)(param_3 + lVar1 * 2) =
             *(undefined2 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1) * 2);
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined2 *)(param_3 + lVar1 * 2) =
               *(undefined2 *)
                (param_2 + (long)(int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)) * 2)
          ;
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + (long)param_5 * 2;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026c930 (136 bytes) name=FUN_0026c930

void FUN_0026c930(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined4 *)(param_3 + lVar1 * 4) =
             *(undefined4 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1) * 4);
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined4 *)(param_3 + lVar1 * 4) =
               *(undefined4 *)
                (param_2 + (long)(int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)) * 4)
          ;
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + (long)param_5 * 4;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026c9b8 (136 bytes) name=FUN_0026c9b8

void FUN_0026c9b8(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined4 *)(param_3 + lVar1 * 4) =
             *(undefined4 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1) * 4);
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined4 *)(param_3 + lVar1 * 4) =
               *(undefined4 *)
                (param_2 + (long)(int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)) * 4)
          ;
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + (long)param_5 * 4;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026ca40 (136 bytes) name=FUN_0026ca40

void FUN_0026ca40(long param_1,long param_2,long param_3,int param_4,int param_5,int param_6)

{
  long lVar1;
  int iVar2;
  
  if (param_6 == 1) {
    if (0 < param_4 * param_5) {
      lVar1 = 0;
      do {
        *(undefined8 *)(param_3 + lVar1 * 8) =
             *(undefined8 *)(param_2 + (ulong)*(byte *)(param_1 + lVar1) * 8);
        lVar1 = lVar1 + 1;
      } while ((int)lVar1 < param_4 * param_5);
      return;
    }
  }
  else if (0 < param_4 * param_5) {
    iVar2 = 0;
    do {
      lVar1 = 0;
      if (0 < param_5) {
        do {
          *(undefined8 *)(param_3 + lVar1 * 8) =
               *(undefined8 *)
                (param_2 + (long)(int)((int)lVar1 + param_5 * (uint)*(byte *)(param_1 + lVar1)) * 8)
          ;
          lVar1 = lVar1 + 1;
        } while ((int)lVar1 < param_5);
      }
      iVar2 = iVar2 + param_5;
      param_1 = param_1 + param_5;
      param_3 = param_3 + (long)param_5 * 8;
    } while (iVar2 < param_4 * param_5);
  }
  return;
}


==================================================================

### FUNC 0026cac8 (4 bytes) name=FUN_0026cac8

void FUN_0026cac8(void)

{
  return;
}


==================================================================

### FUNC 0026cacc (60 bytes) name=FUN_0026cacc

void FUN_0026cacc(long *param_1)

{
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 0026cb08 (116 bytes) name=FUN_0026cb08

void FUN_0026cb08(void *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,void *param_5,
                 ulong param_6,uint *param_7)

{
  uint uVar1;
  uint uVar2;
  
  uVar2 = param_7[1];
  uVar1 = *param_7;
  if (uVar2 != 0) {
    do {
      memcpy(param_5,param_1,-(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3);
      uVar2 = uVar2 - 1;
      param_1 = (void *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = (void *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
    } while (uVar2 != 0);
  }
  return;
}


==================================================================

### FUNC 0026cb7c (116 bytes) name=FUN_0026cb7c

void FUN_0026cb7c(void *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,void *param_5,
                 ulong param_6,uint *param_7)

{
  uint uVar1;
  uint uVar2;
  
  uVar2 = param_7[1];
  uVar1 = *param_7;
  if (uVar2 != 0) {
    do {
      memcpy(param_5,param_1,-(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2);
      uVar2 = uVar2 - 1;
      param_1 = (void *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (void *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (uVar2 != 0);
  }
  return;
}


==================================================================

### FUNC 0026cbf0 (116 bytes) name=FUN_0026cbf0

void FUN_0026cbf0(void *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,void *param_5,
                 ulong param_6,uint *param_7)

{
  uint uVar1;
  uint uVar2;
  
  uVar2 = param_7[1];
  uVar1 = *param_7;
  if (uVar2 != 0) {
    do {
      memcpy(param_5,param_1,-(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1);
      uVar2 = uVar2 - 1;
      param_1 = (void *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (void *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (uVar2 != 0);
  }
  return;
}


==================================================================

### FUNC 0026cc64 (104 bytes) name=FUN_0026cc64

void FUN_0026cc64(void *param_1,long param_2,undefined8 param_3,undefined8 param_4,void *param_5,
                 long param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  
  iVar2 = *param_7;
  for (iVar1 = param_7[1]; iVar1 != 0; iVar1 = iVar1 + -1) {
    memcpy(param_5,param_1,(long)iVar2);
    param_5 = (void *)((long)param_5 + param_6);
    param_1 = (void *)((long)param_1 + param_2);
  }
  return;
}


==================================================================

### FUNC 0026cccc (720 bytes) name=FUN_0026cccc

void FUN_0026cccc(undefined8 *param_1,long *param_2,ulong param_3,uint param_4)

{
  undefined8 *puVar1;
  uint uVar2;
  void *__dest;
  long lVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  undefined8 *puVar7;
  undefined8 uVar8;
  ulong uVar9;
  uint uVar10;
  long lVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  long lVar15;
  long *plVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  
  iVar5 = (int)param_3;
  if ((param_4 & 3) == 0) {
    iVar12 = 4;
  }
  else {
    iVar12 = (int)param_4 % 4;
    if (iVar12 == 1) {
      __dest = (void *)*param_2;
      if (param_4 == 1) {
        memcpy(__dest,param_1,
               -(param_3 >> 0x1f & 1) & 0xfffffff800000000 | (param_3 & 0xffffffff) << 3);
        return;
      }
      lVar6 = 0;
      puVar7 = param_1;
      if (0 < iVar5) {
        do {
          uVar8 = *puVar7;
          puVar7 = puVar7 + (int)param_4;
          *(undefined8 *)((long)__dest + lVar6 * 8) = uVar8;
          lVar6 = lVar6 + 1;
        } while ((int)lVar6 < iVar5);
      }
      goto LAB_0026cd28;
    }
    if (iVar12 == 2) {
      lVar6 = *param_2;
      lVar3 = param_2[1];
      if (param_4 == 2) {
        uVar2 = iVar5 - 1;
        if ((int)uVar2 < 1) {
          uVar10 = 0;
          uVar2 = uVar10;
        }
        else {
          lVar11 = 0;
          puVar7 = param_1;
          do {
            uVar8 = *puVar7;
            uVar17 = puVar7[1];
            puVar7 = puVar7 + 2;
            *(undefined8 *)(lVar6 + lVar11 * 8) = uVar8;
            *(undefined8 *)(lVar3 + lVar11 * 8) = uVar17;
            lVar11 = lVar11 + 1;
          } while ((int)lVar11 < (int)uVar2);
          uVar10 = iVar5 * 2 - 2;
        }
        uVar9 = (ulong)uVar2;
        if (iVar5 <= (int)uVar2) {
          return;
        }
      }
      else {
        uVar9 = 0;
        uVar10 = 0;
        if (iVar5 < 1) goto LAB_0026cd28;
      }
      uVar4 = -(uVar9 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
      lVar11 = 0;
      puVar7 = param_1 + (int)uVar10;
      do {
        *(undefined8 *)(lVar6 + uVar4 + lVar11 * 8) = *puVar7;
        puVar1 = puVar7 + 1;
        puVar7 = puVar7 + (int)param_4;
        *(undefined8 *)(lVar3 + uVar4 + lVar11 * 8) = *puVar1;
        lVar11 = lVar11 + 1;
      } while ((int)uVar9 + (int)lVar11 < iVar5);
      goto LAB_0026cd28;
    }
    if (iVar12 == 3) {
      lVar6 = *param_2;
      lVar3 = param_2[1];
      lVar11 = param_2[2];
      if (param_4 == 3) {
        if (iVar5 < 1) {
          return;
        }
        lVar13 = 0;
        do {
          uVar8 = *param_1;
          uVar17 = param_1[1];
          uVar19 = param_1[2];
          param_1 = param_1 + 3;
          *(undefined8 *)(lVar6 + lVar13 * 8) = uVar8;
          *(undefined8 *)(lVar3 + lVar13 * 8) = uVar17;
          *(undefined8 *)(lVar11 + lVar13 * 8) = uVar19;
          lVar13 = lVar13 + 1;
        } while ((int)lVar13 < iVar5);
        return;
      }
      lVar13 = 0;
      puVar7 = param_1;
      if (0 < iVar5) {
        do {
          *(undefined8 *)(lVar6 + lVar13 * 8) = *puVar7;
          *(undefined8 *)(lVar3 + lVar13 * 8) = puVar7[1];
          puVar1 = puVar7 + 2;
          puVar7 = puVar7 + (int)param_4;
          *(undefined8 *)(lVar11 + lVar13 * 8) = *puVar1;
          lVar13 = lVar13 + 1;
        } while ((int)lVar13 < iVar5);
      }
      goto LAB_0026cd28;
    }
  }
  lVar6 = *param_2;
  lVar3 = param_2[1];
  lVar11 = param_2[2];
  lVar13 = param_2[3];
  if (param_4 == 4) {
    if (0 < iVar5) {
      lVar14 = 0;
      puVar7 = param_1;
      do {
        uVar8 = *puVar7;
        uVar17 = puVar7[1];
        uVar19 = puVar7[2];
        uVar18 = puVar7[3];
        puVar7 = puVar7 + 4;
        *(undefined8 *)(lVar6 + lVar14 * 8) = uVar8;
        *(undefined8 *)(lVar3 + lVar14 * 8) = uVar17;
        *(undefined8 *)(lVar11 + lVar14 * 8) = uVar19;
        *(undefined8 *)(lVar13 + lVar14 * 8) = uVar18;
        lVar14 = lVar14 + 1;
      } while ((int)lVar14 < iVar5);
    }
  }
  else if (0 < iVar5) {
    lVar14 = 0;
    puVar7 = param_1;
    do {
      *(undefined8 *)(lVar6 + lVar14 * 8) = *puVar7;
      *(undefined8 *)(lVar3 + lVar14 * 8) = puVar7[1];
      *(undefined8 *)(lVar11 + lVar14 * 8) = puVar7[2];
      puVar1 = puVar7 + 3;
      puVar7 = puVar7 + (int)param_4;
      *(undefined8 *)(lVar13 + lVar14 * 8) = *puVar1;
      lVar14 = lVar14 + 1;
    } while ((int)lVar14 < iVar5);
  }
LAB_0026cd28:
  if (iVar12 < (int)param_4) {
    lVar6 = (long)iVar12;
    plVar16 = param_2 + lVar6;
    param_1 = param_1 + lVar6;
    do {
      lVar15 = *plVar16;
      lVar14 = plVar16[1];
      lVar13 = plVar16[2];
      lVar3 = 0;
      lVar11 = plVar16[3];
      puVar7 = param_1;
      if (0 < iVar5) {
        do {
          *(undefined8 *)(lVar15 + lVar3 * 8) = *puVar7;
          *(undefined8 *)(lVar14 + lVar3 * 8) = puVar7[1];
          *(undefined8 *)(lVar13 + lVar3 * 8) = puVar7[2];
          puVar1 = puVar7 + 3;
          puVar7 = puVar7 + (int)param_4;
          *(undefined8 *)(lVar11 + lVar3 * 8) = *puVar1;
          lVar3 = lVar3 + 1;
        } while ((int)lVar3 < iVar5);
      }
      plVar16 = plVar16 + 4;
      param_1 = param_1 + 4;
    } while (plVar16 != param_2 + lVar6 + 4 + (ulong)((param_4 - 1) - iVar12 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026cf9c (996 bytes) name=FUN_0026cf9c

void FUN_0026cf9c(undefined4 *param_1,long *param_2,ulong param_3,uint param_4)

{
  uint uVar1;
  undefined4 *puVar2;
  void *__dest;
  long lVar3;
  ulong uVar4;
  undefined4 *puVar5;
  int iVar6;
  long lVar7;
  int iVar8;
  ulong uVar9;
  undefined8 *puVar10;
  uint uVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  undefined8 *puVar16;
  long lVar17;
  undefined8 *puVar18;
  long *plVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  undefined4 uVar23;
  undefined4 uVar24;
  undefined4 uVar25;
  undefined4 uVar26;
  undefined4 uVar27;
  undefined4 uVar28;
  undefined4 uVar29;
  undefined4 uVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  undefined4 uVar33;
  undefined4 uVar34;
  undefined4 uVar35;
  undefined4 uVar36;
  undefined4 uVar37;
  
  iVar6 = (int)param_3;
  if ((param_4 & 3) == 0) {
    iVar13 = 4;
  }
  else {
    iVar13 = (int)param_4 % 4;
    if (iVar13 == 1) {
      __dest = (void *)*param_2;
      if (param_4 == 1) {
        memcpy(__dest,param_1,
               -(param_3 >> 0x1f & 1) & 0xfffffffc00000000 | (param_3 & 0xffffffff) << 2);
        return;
      }
      lVar7 = 0;
      puVar5 = param_1;
      if (0 < iVar6) {
        do {
          uVar23 = *puVar5;
          puVar5 = puVar5 + (int)param_4;
          *(undefined4 *)((long)__dest + lVar7 * 4) = uVar23;
          lVar7 = lVar7 + 1;
        } while ((int)lVar7 < iVar6);
      }
      goto LAB_0026cffc;
    }
    if (iVar13 == 2) {
      puVar18 = (undefined8 *)*param_2;
      puVar16 = (undefined8 *)param_2[1];
      if (param_4 == 2) {
        if (iVar6 < 5) {
          uVar11 = 0;
          uVar1 = uVar11;
        }
        else {
          uVar11 = iVar6 - 5U >> 2;
          puVar5 = param_1;
          puVar20 = puVar16;
          puVar10 = puVar18;
          do {
            uVar23 = *puVar5;
            uVar26 = puVar5[1];
            uVar24 = puVar5[2];
            uVar27 = puVar5[3];
            puVar2 = puVar5 + 4;
            uVar28 = puVar5[5];
            uVar25 = puVar5[6];
            uVar29 = puVar5[7];
            puVar5 = puVar5 + 8;
            puVar10[1] = CONCAT17((char)((uint)uVar25 >> 0x18),
                                  CONCAT16((char)((uint)uVar25 >> 0x10),
                                           CONCAT15((char)((uint)uVar25 >> 8),
                                                    CONCAT14((char)uVar25,*puVar2))));
            *puVar10 = CONCAT17((char)((uint)uVar24 >> 0x18),
                                CONCAT16((char)((uint)uVar24 >> 0x10),
                                         CONCAT15((char)((uint)uVar24 >> 8),
                                                  CONCAT14((char)uVar24,uVar23))));
            puVar20[1] = CONCAT17((char)((uint)uVar29 >> 0x18),
                                  CONCAT16((char)((uint)uVar29 >> 0x10),
                                           CONCAT15((char)((uint)uVar29 >> 8),
                                                    CONCAT14((char)uVar29,uVar28))));
            *puVar20 = CONCAT17((char)((uint)uVar27 >> 0x18),
                                CONCAT16((char)((uint)uVar27 >> 0x10),
                                         CONCAT15((char)((uint)uVar27 >> 8),
                                                  CONCAT14((char)uVar27,uVar26))));
            puVar20 = puVar20 + 2;
            puVar10 = puVar10 + 2;
          } while (puVar5 != param_1 + ((ulong)uVar11 + 1) * 8);
          iVar8 = uVar11 + 1;
          uVar11 = iVar8 * 8;
          uVar1 = iVar8 * 4;
        }
        uVar9 = (ulong)uVar1;
        if (iVar6 <= (int)uVar1) {
          return;
        }
      }
      else {
        uVar9 = 0;
        uVar11 = 0;
        if (iVar6 < 1) goto LAB_0026cffc;
      }
      uVar4 = -(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar9 << 2;
      lVar7 = 0;
      puVar5 = param_1 + (int)uVar11;
      do {
        *(undefined4 *)((long)puVar18 + lVar7 * 4 + uVar4) = *puVar5;
        puVar2 = puVar5 + 1;
        puVar5 = puVar5 + (int)param_4;
        *(undefined4 *)((long)puVar16 + lVar7 * 4 + uVar4) = *puVar2;
        lVar7 = lVar7 + 1;
      } while ((int)uVar9 + (int)lVar7 < iVar6);
      goto LAB_0026cffc;
    }
    if (iVar13 == 3) {
      puVar18 = (undefined8 *)*param_2;
      puVar20 = (undefined8 *)param_2[1];
      puVar16 = (undefined8 *)param_2[2];
      if (param_4 == 3) {
        if (iVar6 < 4) {
          uVar11 = 0;
          uVar1 = uVar11;
        }
        else {
          uVar11 = iVar6 - 4U >> 2;
          puVar5 = param_1;
          puVar10 = puVar16;
          puVar21 = puVar20;
          puVar22 = puVar18;
          do {
            uVar23 = *puVar5;
            uVar26 = puVar5[1];
            uVar30 = puVar5[2];
            uVar24 = puVar5[3];
            uVar27 = puVar5[4];
            uVar31 = puVar5[5];
            puVar2 = puVar5 + 6;
            uVar28 = puVar5[7];
            uVar32 = puVar5[8];
            uVar25 = puVar5[9];
            uVar29 = puVar5[10];
            uVar33 = puVar5[0xb];
            puVar5 = puVar5 + 0xc;
            puVar22[1] = CONCAT17((char)((uint)uVar25 >> 0x18),
                                  CONCAT16((char)((uint)uVar25 >> 0x10),
                                           CONCAT15((char)((uint)uVar25 >> 8),
                                                    CONCAT14((char)uVar25,*puVar2))));
            *puVar22 = CONCAT17((char)((uint)uVar24 >> 0x18),
                                CONCAT16((char)((uint)uVar24 >> 0x10),
                                         CONCAT15((char)((uint)uVar24 >> 8),
                                                  CONCAT14((char)uVar24,uVar23))));
            puVar21[1] = CONCAT17((char)((uint)uVar29 >> 0x18),
                                  CONCAT16((char)((uint)uVar29 >> 0x10),
                                           CONCAT15((char)((uint)uVar29 >> 8),
                                                    CONCAT14((char)uVar29,uVar28))));
            *puVar21 = CONCAT17((char)((uint)uVar27 >> 0x18),
                                CONCAT16((char)((uint)uVar27 >> 0x10),
                                         CONCAT15((char)((uint)uVar27 >> 8),
                                                  CONCAT14((char)uVar27,uVar26))));
            puVar10[1] = CONCAT17((char)((uint)uVar33 >> 0x18),
                                  CONCAT16((char)((uint)uVar33 >> 0x10),
                                           CONCAT15((char)((uint)uVar33 >> 8),
                                                    CONCAT14((char)uVar33,uVar32))));
            *puVar10 = CONCAT17((char)((uint)uVar31 >> 0x18),
                                CONCAT16((char)((uint)uVar31 >> 0x10),
                                         CONCAT15((char)((uint)uVar31 >> 8),
                                                  CONCAT14((char)uVar31,uVar30))));
            puVar10 = puVar10 + 2;
            puVar21 = puVar21 + 2;
            puVar22 = puVar22 + 2;
          } while (puVar5 != param_1 + ((ulong)uVar11 + 1) * 0xc);
          iVar8 = uVar11 + 1;
          uVar11 = iVar8 * 0xc;
          uVar1 = iVar8 * 4;
        }
        uVar9 = (ulong)uVar1;
        if (iVar6 <= (int)uVar1) {
          return;
        }
      }
      else {
        uVar9 = 0;
        uVar11 = 0;
        if (iVar6 < 1) goto LAB_0026cffc;
      }
      uVar4 = -(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar9 << 2;
      lVar7 = 0;
      puVar5 = param_1 + (int)uVar11;
      do {
        *(undefined4 *)((long)puVar18 + lVar7 * 4 + uVar4) = *puVar5;
        *(undefined4 *)((long)puVar20 + lVar7 * 4 + uVar4) = puVar5[1];
        puVar2 = puVar5 + 2;
        puVar5 = puVar5 + (int)param_4;
        *(undefined4 *)((long)puVar16 + lVar7 * 4 + uVar4) = *puVar2;
        lVar7 = lVar7 + 1;
      } while ((int)uVar9 + (int)lVar7 < iVar6);
      goto LAB_0026cffc;
    }
  }
  lVar14 = *param_2;
  lVar12 = param_2[1];
  lVar3 = param_2[2];
  lVar7 = param_2[3];
  if ((param_4 == 4) && (3 < iVar6)) {
    uVar11 = iVar6 - 4U >> 2;
    lVar15 = 0;
    puVar5 = param_1;
    do {
      uVar23 = *puVar5;
      uVar26 = puVar5[1];
      uVar30 = puVar5[2];
      uVar34 = puVar5[3];
      uVar24 = puVar5[4];
      uVar27 = puVar5[5];
      uVar31 = puVar5[6];
      uVar35 = puVar5[7];
      puVar2 = puVar5 + 8;
      uVar28 = puVar5[9];
      uVar32 = puVar5[10];
      uVar36 = puVar5[0xb];
      uVar25 = puVar5[0xc];
      uVar29 = puVar5[0xd];
      uVar33 = puVar5[0xe];
      uVar37 = puVar5[0xf];
      puVar5 = puVar5 + 0x10;
      puVar16 = (undefined8 *)(lVar14 + lVar15);
      puVar18 = (undefined8 *)(lVar12 + lVar15);
      puVar20 = (undefined8 *)(lVar3 + lVar15);
      puVar10 = (undefined8 *)(lVar7 + lVar15);
      lVar15 = lVar15 + 0x10;
      puVar16[1] = CONCAT17((char)((uint)uVar25 >> 0x18),
                            CONCAT16((char)((uint)uVar25 >> 0x10),
                                     CONCAT15((char)((uint)uVar25 >> 8),
                                              CONCAT14((char)uVar25,*puVar2))));
      *puVar16 = CONCAT17((char)((uint)uVar24 >> 0x18),
                          CONCAT16((char)((uint)uVar24 >> 0x10),
                                   CONCAT15((char)((uint)uVar24 >> 8),CONCAT14((char)uVar24,uVar23))
                                  ));
      puVar18[1] = CONCAT17((char)((uint)uVar29 >> 0x18),
                            CONCAT16((char)((uint)uVar29 >> 0x10),
                                     CONCAT15((char)((uint)uVar29 >> 8),
                                              CONCAT14((char)uVar29,uVar28))));
      *puVar18 = CONCAT17((char)((uint)uVar27 >> 0x18),
                          CONCAT16((char)((uint)uVar27 >> 0x10),
                                   CONCAT15((char)((uint)uVar27 >> 8),CONCAT14((char)uVar27,uVar26))
                                  ));
      puVar20[1] = CONCAT17((char)((uint)uVar33 >> 0x18),
                            CONCAT16((char)((uint)uVar33 >> 0x10),
                                     CONCAT15((char)((uint)uVar33 >> 8),
                                              CONCAT14((char)uVar33,uVar32))));
      *puVar20 = CONCAT17((char)((uint)uVar31 >> 0x18),
                          CONCAT16((char)((uint)uVar31 >> 0x10),
                                   CONCAT15((char)((uint)uVar31 >> 8),CONCAT14((char)uVar31,uVar30))
                                  ));
      puVar10[1] = CONCAT17((char)((uint)uVar37 >> 0x18),
                            CONCAT16((char)((uint)uVar37 >> 0x10),
                                     CONCAT15((char)((uint)uVar37 >> 8),
                                              CONCAT14((char)uVar37,uVar36))));
      *puVar10 = CONCAT17((char)((uint)uVar35 >> 0x18),
                          CONCAT16((char)((uint)uVar35 >> 0x10),
                                   CONCAT15((char)((uint)uVar35 >> 8),CONCAT14((char)uVar35,uVar34))
                                  ));
    } while (lVar15 != ((ulong)uVar11 + 1) * 0x10);
    iVar8 = uVar11 + 1;
    uVar9 = (ulong)(uint)(iVar8 * 4);
    iVar8 = iVar8 * 0x10;
  }
  else {
    iVar8 = 0;
    uVar9 = 0;
  }
  if ((int)uVar9 < iVar6) {
    uVar4 = -(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar9 << 2;
    lVar15 = 0;
    puVar5 = param_1 + iVar8;
    do {
      *(undefined4 *)(lVar14 + uVar4 + lVar15) = *puVar5;
      *(undefined4 *)(lVar12 + uVar4 + lVar15) = puVar5[1];
      *(undefined4 *)(lVar3 + uVar4 + lVar15) = puVar5[2];
      puVar2 = puVar5 + 3;
      puVar5 = puVar5 + (int)param_4;
      *(undefined4 *)(lVar7 + uVar4 + lVar15) = *puVar2;
      lVar15 = lVar15 + 4;
    } while (lVar15 != ((ulong)(uint)((iVar6 + -1) - (int)uVar9) + 1) * 4);
  }
LAB_0026cffc:
  if (iVar13 < (int)param_4) {
    lVar7 = (long)iVar13;
    plVar19 = param_2 + lVar7;
    param_1 = param_1 + lVar7;
    do {
      lVar17 = *plVar19;
      lVar15 = plVar19[1];
      lVar14 = plVar19[2];
      lVar3 = 0;
      lVar12 = plVar19[3];
      puVar5 = param_1;
      if (0 < iVar6) {
        do {
          *(undefined4 *)(lVar17 + lVar3 * 4) = *puVar5;
          *(undefined4 *)(lVar15 + lVar3 * 4) = puVar5[1];
          *(undefined4 *)(lVar14 + lVar3 * 4) = puVar5[2];
          puVar2 = puVar5 + 3;
          puVar5 = puVar5 + (int)param_4;
          *(undefined4 *)(lVar12 + lVar3 * 4) = *puVar2;
          lVar3 = lVar3 + 1;
        } while ((int)lVar3 < iVar6);
      }
      plVar19 = plVar19 + 4;
      param_1 = param_1 + 4;
    } while (plVar19 != param_2 + lVar7 + 4 + (ulong)((param_4 - 1) - iVar13 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026d380 name=FUN_0026d380 DECOMPILE FAILED

### FUNC 0026d764 name=FUN_0026d764 DECOMPILE FAILED

### FUNC 0026db3c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 0026db40 (972 bytes) name=FUN_0026db40

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0026db40(long *param_1,undefined8 *param_2,int param_3,uint param_4)

{
  long lVar1;
  undefined8 *puVar2;
  ulong uVar3;
  int iVar4;
  long lVar5;
  undefined8 *puVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  undefined8 uVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  long lVar15;
  ulong uVar16;
  undefined8 uVar17;
  long *plVar18;
  undefined8 uVar19;
  
  if ((param_4 & 3) == 0) {
    iVar12 = 4;
  }
  else {
    iVar12 = (int)param_4 % 4;
    if (iVar12 == 1) {
      lVar5 = *param_1;
      lVar7 = 0;
      puVar6 = param_2;
      if (0 < param_3) {
        do {
          lVar10 = lVar7 * 8;
          lVar7 = lVar7 + 1;
          *puVar6 = *(undefined8 *)(lVar5 + lVar10);
          puVar6 = puVar6 + (int)param_4;
        } while ((int)lVar7 < param_3);
      }
      goto LAB_0026db94;
    }
    if (iVar12 == 2) {
      lVar7 = *param_1;
      lVar5 = param_1[1];
      if (param_4 == 2) {
        uVar8 = param_3 - 1;
        if ((int)uVar8 < 1) {
          uVar9 = 0;
          uVar8 = uVar9;
        }
        else {
          lVar10 = 0;
          puVar6 = param_2;
          do {
            lVar13 = lVar10 * 8;
            uVar11 = *(undefined8 *)(lVar5 + lVar10 * 8);
            lVar10 = lVar10 + 1;
            *puVar6 = *(undefined8 *)(lVar7 + lVar13);
            puVar6[1] = uVar11;
            puVar6 = puVar6 + 2;
          } while ((int)lVar10 < (int)uVar8);
          uVar9 = param_3 * 2 - 2;
        }
        uVar16 = (ulong)uVar8;
        if (param_3 <= (int)uVar8) {
          return;
        }
      }
      else {
        uVar9 = 0;
        uVar16 = 0;
        if (param_3 < 1) goto LAB_0026db94;
      }
      uVar3 = -(uVar16 >> 0x1f) & 0xfffffff800000000 | uVar16 << 3;
      lVar10 = 0;
      puVar6 = param_2 + (int)uVar9;
      do {
        *puVar6 = *(undefined8 *)(lVar7 + uVar3 + lVar10 * 8);
        lVar13 = lVar10 * 8;
        lVar10 = lVar10 + 1;
        puVar6[1] = *(undefined8 *)(lVar5 + uVar3 + lVar13);
        puVar6 = puVar6 + (int)param_4;
      } while ((int)uVar16 + (int)lVar10 < param_3);
      goto LAB_0026db94;
    }
    if (iVar12 == 3) {
      lVar5 = *param_1;
      lVar10 = param_1[1];
      lVar7 = param_1[2];
      if (param_4 == 3) {
        if (param_3 < 2) {
          uVar8 = 0;
          uVar9 = uVar8;
        }
        else {
          lVar13 = 0;
          puVar6 = param_2;
          do {
            puVar2 = (undefined8 *)(lVar5 + lVar13);
            uVar17 = *(undefined8 *)(lVar10 + lVar13);
            uVar11 = *(undefined8 *)(lVar7 + lVar13);
            lVar13 = lVar13 + 8;
            *puVar6 = *puVar2;
            puVar6[1] = uVar17;
            puVar6[2] = uVar11;
            puVar6 = puVar6 + 3;
          } while (lVar13 != ((ulong)(param_3 - 2) + 1) * 8);
          uVar8 = param_3 * 3 - 3;
          uVar9 = param_3 - 1;
        }
        uVar16 = (ulong)uVar9;
        if (param_3 <= (int)uVar9) {
          return;
        }
      }
      else {
        uVar16 = 0;
        uVar8 = 0;
        if (param_3 < 1) goto LAB_0026db94;
      }
      uVar3 = -(uVar16 >> 0x1f) & 0xfffffff800000000 | uVar16 << 3;
      lVar13 = 0;
      puVar6 = param_2 + (int)uVar8;
      do {
        *puVar6 = *(undefined8 *)(lVar5 + uVar3 + lVar13 * 8);
        puVar6[1] = *(undefined8 *)(lVar10 + uVar3 + lVar13 * 8);
        lVar14 = lVar13 * 8;
        lVar13 = lVar13 + 1;
        puVar6[2] = *(undefined8 *)(lVar7 + uVar3 + lVar14);
        puVar6 = puVar6 + (int)param_4;
      } while ((int)uVar16 + (int)lVar13 < param_3);
      goto LAB_0026db94;
    }
  }
  lVar13 = *param_1;
  lVar10 = param_1[1];
  lVar5 = param_1[2];
  lVar7 = param_1[3];
  if ((param_4 == 4) && (uVar8 = param_3 - 1, 0 < (int)uVar8)) {
    lVar14 = 0;
    puVar6 = param_2;
    do {
      lVar15 = lVar14 * 8;
      uVar19 = *(undefined8 *)(lVar10 + lVar14 * 8);
      uVar17 = *(undefined8 *)(lVar5 + lVar14 * 8);
      uVar11 = *(undefined8 *)(lVar7 + lVar14 * 8);
      lVar14 = lVar14 + 1;
      *puVar6 = *(undefined8 *)(lVar13 + lVar15);
      puVar6[1] = uVar19;
      puVar6[2] = uVar17;
      puVar6[3] = uVar11;
      puVar6 = puVar6 + 4;
    } while ((int)lVar14 < (int)uVar8);
    uVar16 = (ulong)uVar8;
    iVar4 = param_3 * 4 + -4;
  }
  else {
    iVar4 = 0;
    uVar16 = 0;
  }
  if ((int)uVar16 < param_3) {
    uVar3 = -(uVar16 >> 0x1f) & 0xfffffff800000000 | uVar16 << 3;
    lVar14 = 0;
    puVar6 = param_2 + iVar4;
    do {
      *puVar6 = *(undefined8 *)(lVar13 + uVar3 + lVar14);
      puVar6[1] = *(undefined8 *)(lVar10 + uVar3 + lVar14);
      puVar6[2] = *(undefined8 *)(lVar5 + uVar3 + lVar14);
      puVar2 = (undefined8 *)(lVar7 + uVar3 + lVar14);
      lVar14 = lVar14 + 8;
      puVar6[3] = *puVar2;
      puVar6 = puVar6 + (int)param_4;
    } while (lVar14 != ((ulong)(uint)((param_3 + -1) - (int)uVar16) + 1) * 8);
  }
LAB_0026db94:
  if (iVar12 < (int)param_4) {
    lVar7 = (long)iVar12;
    plVar18 = param_1 + lVar7;
    param_2 = param_2 + lVar7;
    do {
      lVar15 = *plVar18;
      lVar14 = plVar18[1];
      lVar13 = plVar18[2];
      lVar5 = 0;
      lVar10 = plVar18[3];
      puVar6 = param_2;
      if (0 < param_3) {
        do {
          *puVar6 = *(undefined8 *)(lVar15 + lVar5 * 8);
          puVar6[1] = *(undefined8 *)(lVar14 + lVar5 * 8);
          puVar6[2] = *(undefined8 *)(lVar13 + lVar5 * 8);
          lVar1 = lVar5 * 8;
          lVar5 = lVar5 + 1;
          puVar6[3] = *(undefined8 *)(lVar10 + lVar1);
          puVar6 = puVar6 + (int)param_4;
        } while ((int)lVar5 < param_3);
      }
      plVar18 = plVar18 + 4;
      param_2 = param_2 + 4;
    } while (plVar18 != param_1 + lVar7 + 4 + (ulong)((param_4 - 1) - iVar12 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026dfa0 (1084 bytes) name=FUN_0026dfa0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0026dfa0(long *param_1,undefined4 *param_2,int param_3,uint param_4)

{
  long lVar1;
  undefined4 *puVar2;
  uint uVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ulong uVar7;
  undefined4 *puVar8;
  long lVar9;
  undefined8 *puVar10;
  uint uVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  undefined8 *puVar16;
  long lVar17;
  undefined8 *puVar18;
  long *plVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  undefined4 local_30;
  undefined4 uStack_2c;
  undefined4 uStack_28;
  undefined4 uStack_24;
  undefined4 local_20;
  undefined4 uStack_1c;
  undefined4 uStack_18;
  undefined4 uStack_14;
  undefined4 local_10;
  undefined4 uStack_c;
  undefined4 uStack_8;
  undefined4 uStack_4;
  
  if ((param_4 & 3) == 0) {
    iVar13 = 4;
  }
  else {
    iVar13 = (int)param_4 % 4;
    if (iVar13 == 1) {
      lVar6 = *param_1;
      lVar9 = 0;
      puVar8 = param_2;
      if (0 < param_3) {
        do {
          lVar12 = lVar9 * 4;
          lVar9 = lVar9 + 1;
          *puVar8 = *(undefined4 *)(lVar6 + lVar12);
          puVar8 = puVar8 + (int)param_4;
        } while ((int)lVar9 < param_3);
      }
      goto LAB_0026e000;
    }
    if (iVar13 == 2) {
      puVar20 = (undefined8 *)*param_1;
      puVar18 = (undefined8 *)param_1[1];
      if (param_4 == 2) {
        if (param_3 < 5) {
          uVar11 = 0;
          uVar3 = uVar11;
        }
        else {
          uVar11 = param_3 - 5U >> 2;
          puVar21 = puVar20;
          puVar8 = param_2;
          puVar10 = puVar18;
          do {
            puVar16 = puVar21 + 2;
            uVar24 = puVar21[1];
            uVar23 = *puVar21;
            local_30 = (undefined4)*puVar10;
            uStack_2c = (undefined4)((ulong)*puVar10 >> 0x20);
            uStack_28 = (undefined4)puVar10[1];
            uStack_24 = (undefined4)((ulong)puVar10[1] >> 0x20);
            *puVar8 = (int)uVar23;
            puVar8[1] = local_30;
            puVar8[2] = (int)((ulong)uVar23 >> 0x20);
            puVar8[3] = uStack_2c;
            puVar8[4] = (int)uVar24;
            puVar8[5] = uStack_28;
            puVar8[6] = (int)((ulong)uVar24 >> 0x20);
            puVar8[7] = uStack_24;
            puVar8 = puVar8 + 8;
            puVar21 = puVar16;
            puVar10 = puVar10 + 2;
          } while (puVar16 != puVar20 + ((ulong)uVar11 + 1) * 2);
          iVar5 = uVar11 + 1;
          uVar11 = iVar5 * 8;
          uVar3 = iVar5 * 4;
        }
        uVar4 = (ulong)uVar3;
        if (param_3 <= (int)uVar3) {
          return;
        }
      }
      else {
        uVar11 = 0;
        uVar4 = 0;
        if (param_3 < 1) goto LAB_0026e000;
      }
      uVar7 = -(uVar4 >> 0x1f) & 0xfffffffc00000000 | uVar4 << 2;
      lVar9 = 0;
      puVar8 = param_2 + (int)uVar11;
      do {
        *puVar8 = *(undefined4 *)((long)puVar20 + lVar9 * 4 + uVar7);
        lVar6 = lVar9 * 4;
        lVar9 = lVar9 + 1;
        puVar8[1] = *(undefined4 *)((long)puVar18 + lVar6 + uVar7);
        puVar8 = puVar8 + (int)param_4;
      } while ((int)uVar4 + (int)lVar9 < param_3);
      goto LAB_0026e000;
    }
    if (iVar13 == 3) {
      puVar20 = (undefined8 *)*param_1;
      puVar21 = (undefined8 *)param_1[1];
      puVar18 = (undefined8 *)param_1[2];
      if (param_4 == 3) {
        if (param_3 < 5) {
          uVar11 = 0;
          uVar3 = uVar11;
        }
        else {
          uVar11 = param_3 - 5U >> 2;
          puVar8 = param_2;
          puVar10 = puVar18;
          puVar16 = puVar21;
          puVar22 = puVar20;
          do {
            uVar24 = puVar22[1];
            uVar23 = *puVar22;
            local_30 = (undefined4)*puVar16;
            uStack_2c = (undefined4)((ulong)*puVar16 >> 0x20);
            uStack_28 = (undefined4)puVar16[1];
            uStack_24 = (undefined4)((ulong)puVar16[1] >> 0x20);
            local_20 = (undefined4)*puVar10;
            uStack_1c = (undefined4)((ulong)*puVar10 >> 0x20);
            uStack_18 = (undefined4)puVar10[1];
            uStack_14 = (undefined4)((ulong)puVar10[1] >> 0x20);
            *puVar8 = (int)uVar23;
            puVar8[1] = local_30;
            puVar8[2] = local_20;
            puVar8[3] = (int)((ulong)uVar23 >> 0x20);
            puVar8[4] = uStack_2c;
            puVar8[5] = uStack_1c;
            puVar8[6] = (int)uVar24;
            puVar8[7] = uStack_28;
            puVar8[8] = uStack_18;
            puVar8[9] = (int)((ulong)uVar24 >> 0x20);
            puVar8[10] = uStack_24;
            puVar8[0xb] = uStack_14;
            puVar8 = puVar8 + 0xc;
            puVar10 = puVar10 + 2;
            puVar16 = puVar16 + 2;
            puVar22 = puVar22 + 2;
          } while (puVar8 != param_2 + ((ulong)uVar11 + 1) * 0xc);
          iVar5 = uVar11 + 1;
          uVar11 = iVar5 * 0xc;
          uVar3 = iVar5 * 4;
        }
        uVar4 = (ulong)uVar3;
        if (param_3 <= (int)uVar3) {
          return;
        }
      }
      else {
        uVar4 = 0;
        uVar11 = 0;
        if (param_3 < 1) goto LAB_0026e000;
      }
      uVar7 = -(uVar4 >> 0x1f) & 0xfffffffc00000000 | uVar4 << 2;
      lVar9 = 0;
      puVar8 = param_2 + (int)uVar11;
      do {
        *puVar8 = *(undefined4 *)((long)puVar20 + lVar9 * 4 + uVar7);
        puVar8[1] = *(undefined4 *)((long)puVar21 + lVar9 * 4 + uVar7);
        lVar6 = lVar9 * 4;
        lVar9 = lVar9 + 1;
        puVar8[2] = *(undefined4 *)((long)puVar18 + lVar6 + uVar7);
        puVar8 = puVar8 + (int)param_4;
      } while ((int)uVar4 + (int)lVar9 < param_3);
      goto LAB_0026e000;
    }
  }
  lVar12 = *param_1;
  lVar6 = param_1[1];
  lVar9 = param_1[2];
  lVar14 = param_1[3];
  if ((param_4 == 4) && (4 < param_3)) {
    uVar11 = param_3 - 5U >> 2;
    lVar15 = 0;
    puVar8 = param_2;
    do {
      puVar18 = (undefined8 *)(lVar12 + lVar15);
      puVar20 = (undefined8 *)(lVar6 + lVar15);
      puVar21 = (undefined8 *)(lVar9 + lVar15);
      uVar27 = puVar18[1];
      uVar23 = *puVar18;
      puVar18 = (undefined8 *)(lVar14 + lVar15);
      lVar15 = lVar15 + 0x10;
      uVar28 = puVar20[1];
      uVar24 = *puVar20;
      uVar29 = puVar21[1];
      uVar25 = *puVar21;
      uVar30 = puVar18[1];
      uVar26 = *puVar18;
      local_30 = (undefined4)uVar24;
      uStack_2c = (undefined4)((ulong)uVar24 >> 0x20);
      uStack_28 = (undefined4)uVar28;
      uStack_24 = (undefined4)((ulong)uVar28 >> 0x20);
      local_20 = (undefined4)uVar25;
      uStack_1c = (undefined4)((ulong)uVar25 >> 0x20);
      uStack_18 = (undefined4)uVar29;
      uStack_14 = (undefined4)((ulong)uVar29 >> 0x20);
      local_10 = (undefined4)uVar26;
      uStack_c = (undefined4)((ulong)uVar26 >> 0x20);
      uStack_8 = (undefined4)uVar30;
      uStack_4 = (undefined4)((ulong)uVar30 >> 0x20);
      *puVar8 = (int)uVar23;
      puVar8[1] = local_30;
      puVar8[2] = local_20;
      puVar8[3] = local_10;
      puVar8[4] = (int)((ulong)uVar23 >> 0x20);
      puVar8[5] = uStack_2c;
      puVar8[6] = uStack_1c;
      puVar8[7] = uStack_c;
      puVar8[8] = (int)uVar27;
      puVar8[9] = uStack_28;
      puVar8[10] = uStack_18;
      puVar8[0xb] = uStack_8;
      puVar8[0xc] = (int)((ulong)uVar27 >> 0x20);
      puVar8[0xd] = uStack_24;
      puVar8[0xe] = uStack_14;
      puVar8[0xf] = uStack_4;
      puVar8 = puVar8 + 0x10;
    } while (lVar15 != ((ulong)uVar11 + 1) * 0x10);
    iVar5 = uVar11 + 1;
    uVar4 = (ulong)(uint)(iVar5 * 4);
    iVar5 = iVar5 * 0x10;
  }
  else {
    iVar5 = 0;
    uVar4 = 0;
  }
  if ((int)uVar4 < param_3) {
    uVar7 = -(uVar4 >> 0x1f) & 0xfffffffc00000000 | uVar4 << 2;
    lVar15 = 0;
    puVar8 = param_2 + iVar5;
    do {
      *puVar8 = *(undefined4 *)(lVar12 + uVar7 + lVar15);
      puVar8[1] = *(undefined4 *)(lVar6 + uVar7 + lVar15);
      puVar8[2] = *(undefined4 *)(lVar9 + uVar7 + lVar15);
      puVar2 = (undefined4 *)(lVar14 + uVar7 + lVar15);
      lVar15 = lVar15 + 4;
      puVar8[3] = *puVar2;
      puVar8 = puVar8 + (int)param_4;
    } while (lVar15 != ((ulong)(uint)((param_3 + -1) - (int)uVar4) + 1) * 4);
  }
LAB_0026e000:
  if (iVar13 < (int)param_4) {
    lVar9 = (long)iVar13;
    plVar19 = param_1 + lVar9;
    param_2 = param_2 + lVar9;
    do {
      lVar17 = *plVar19;
      lVar15 = plVar19[1];
      lVar14 = plVar19[2];
      lVar6 = 0;
      lVar12 = plVar19[3];
      puVar8 = param_2;
      if (0 < param_3) {
        do {
          *puVar8 = *(undefined4 *)(lVar17 + lVar6 * 4);
          puVar8[1] = *(undefined4 *)(lVar15 + lVar6 * 4);
          puVar8[2] = *(undefined4 *)(lVar14 + lVar6 * 4);
          lVar1 = lVar6 * 4;
          lVar6 = lVar6 + 1;
          puVar8[3] = *(undefined4 *)(lVar12 + lVar1);
          puVar8 = puVar8 + (int)param_4;
        } while ((int)lVar6 < param_3);
      }
      plVar19 = plVar19 + 4;
      param_2 = param_2 + 4;
    } while (plVar19 != param_1 + lVar9 + 4 + (ulong)((param_4 - 1) - iVar13 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026e470 (1084 bytes) name=FUN_0026e470

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0026e470(long *param_1,undefined2 *param_2,int param_3,uint param_4)

{
  long lVar1;
  undefined2 *puVar2;
  uint uVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ulong uVar7;
  undefined2 *puVar8;
  long lVar9;
  undefined8 *puVar10;
  uint uVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  undefined8 *puVar16;
  long lVar17;
  undefined8 *puVar18;
  long *plVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  undefined2 local_30;
  undefined2 uStack_2e;
  undefined2 uStack_2c;
  undefined2 uStack_2a;
  undefined2 uStack_28;
  undefined2 uStack_26;
  undefined2 uStack_24;
  undefined2 uStack_22;
  undefined2 local_20;
  undefined2 uStack_1e;
  undefined2 uStack_1c;
  undefined2 uStack_1a;
  undefined2 uStack_18;
  undefined2 uStack_16;
  undefined2 uStack_14;
  undefined2 uStack_12;
  undefined2 local_10;
  undefined2 uStack_e;
  undefined2 uStack_c;
  undefined2 uStack_a;
  undefined2 uStack_8;
  undefined2 uStack_6;
  undefined2 uStack_4;
  undefined2 uStack_2;
  
  if ((param_4 & 3) == 0) {
    iVar13 = 4;
  }
  else {
    iVar13 = (int)param_4 % 4;
    if (iVar13 == 1) {
      lVar6 = *param_1;
      lVar9 = 0;
      puVar8 = param_2;
      if (0 < param_3) {
        do {
          lVar12 = lVar9 * 2;
          lVar9 = lVar9 + 1;
          *puVar8 = *(undefined2 *)(lVar6 + lVar12);
          puVar8 = puVar8 + (int)param_4;
        } while ((int)lVar9 < param_3);
      }
      goto LAB_0026e4d0;
    }
    if (iVar13 == 2) {
      puVar20 = (undefined8 *)*param_1;
      puVar18 = (undefined8 *)param_1[1];
      if (param_4 == 2) {
        if (param_3 < 9) {
          uVar11 = 0;
          uVar3 = uVar11;
        }
        else {
          uVar11 = param_3 - 9U >> 3;
          puVar21 = puVar20;
          puVar8 = param_2;
          puVar10 = puVar18;
          do {
            puVar16 = puVar21 + 2;
            uVar25 = puVar21[1];
            uVar23 = *puVar21;
            uVar26 = puVar10[1];
            uVar24 = *puVar10;
            local_30 = (undefined2)uVar24;
            uStack_2e = (undefined2)((ulong)uVar24 >> 0x10);
            uStack_2c = (undefined2)((ulong)uVar24 >> 0x20);
            uStack_2a = (undefined2)((ulong)uVar24 >> 0x30);
            uStack_28 = (undefined2)uVar26;
            uStack_26 = (undefined2)((ulong)uVar26 >> 0x10);
            uStack_24 = (undefined2)((ulong)uVar26 >> 0x20);
            uStack_22 = (undefined2)((ulong)uVar26 >> 0x30);
            *puVar8 = (short)uVar23;
            puVar8[1] = local_30;
            puVar8[2] = (short)((ulong)uVar23 >> 0x10);
            puVar8[3] = uStack_2e;
            puVar8[4] = (short)((ulong)uVar23 >> 0x20);
            puVar8[5] = uStack_2c;
            puVar8[6] = (short)((ulong)uVar23 >> 0x30);
            puVar8[7] = uStack_2a;
            puVar8[8] = (short)uVar25;
            puVar8[9] = uStack_28;
            puVar8[10] = (short)((ulong)uVar25 >> 0x10);
            puVar8[0xb] = uStack_26;
            puVar8[0xc] = (short)((ulong)uVar25 >> 0x20);
            puVar8[0xd] = uStack_24;
            puVar8[0xe] = (short)((ulong)uVar25 >> 0x30);
            puVar8[0xf] = uStack_22;
            puVar8 = puVar8 + 0x10;
            puVar21 = puVar16;
            puVar10 = puVar10 + 2;
          } while (puVar16 != puVar20 + ((ulong)uVar11 + 1) * 2);
          iVar5 = uVar11 + 1;
          uVar11 = iVar5 * 0x10;
          uVar3 = iVar5 * 8;
        }
        uVar4 = (ulong)uVar3;
        if (param_3 <= (int)uVar3) {
          return;
        }
      }
      else {
        uVar11 = 0;
        uVar4 = 0;
        if (param_3 < 1) goto LAB_0026e4d0;
      }
      uVar7 = -(uVar4 >> 0x1f) & 0xfffffffe00000000 | uVar4 << 1;
      lVar9 = 0;
      puVar8 = param_2 + (int)uVar11;
      do {
        *puVar8 = *(undefined2 *)((long)puVar20 + lVar9 * 2 + uVar7);
        lVar6 = lVar9 * 2;
        lVar9 = lVar9 + 1;
        puVar8[1] = *(undefined2 *)((long)puVar18 + lVar6 + uVar7);
        puVar8 = puVar8 + (int)param_4;
      } while ((int)uVar4 + (int)lVar9 < param_3);
      goto LAB_0026e4d0;
    }
    if (iVar13 == 3) {
      puVar20 = (undefined8 *)*param_1;
      puVar21 = (undefined8 *)param_1[1];
      puVar18 = (undefined8 *)param_1[2];
      if (param_4 == 3) {
        if (param_3 < 9) {
          uVar11 = 0;
          uVar3 = uVar11;
        }
        else {
          uVar11 = param_3 - 9U >> 3;
          puVar8 = param_2;
          puVar10 = puVar18;
          puVar16 = puVar21;
          puVar22 = puVar20;
          do {
            uVar26 = puVar22[1];
            uVar23 = *puVar22;
            uVar27 = puVar16[1];
            uVar24 = *puVar16;
            uVar28 = puVar10[1];
            uVar25 = *puVar10;
            local_30 = (undefined2)uVar24;
            uStack_2e = (undefined2)((ulong)uVar24 >> 0x10);
            uStack_2c = (undefined2)((ulong)uVar24 >> 0x20);
            uStack_2a = (undefined2)((ulong)uVar24 >> 0x30);
            uStack_28 = (undefined2)uVar27;
            uStack_26 = (undefined2)((ulong)uVar27 >> 0x10);
            uStack_24 = (undefined2)((ulong)uVar27 >> 0x20);
            uStack_22 = (undefined2)((ulong)uVar27 >> 0x30);
            local_20 = (undefined2)uVar25;
            uStack_1e = (undefined2)((ulong)uVar25 >> 0x10);
            uStack_1c = (undefined2)((ulong)uVar25 >> 0x20);
            uStack_1a = (undefined2)((ulong)uVar25 >> 0x30);
            uStack_18 = (undefined2)uVar28;
            uStack_16 = (undefined2)((ulong)uVar28 >> 0x10);
            uStack_14 = (undefined2)((ulong)uVar28 >> 0x20);
            uStack_12 = (undefined2)((ulong)uVar28 >> 0x30);
            *puVar8 = (short)uVar23;
            puVar8[1] = local_30;
            puVar8[2] = local_20;
            puVar8[3] = (short)((ulong)uVar23 >> 0x10);
            puVar8[4] = uStack_2e;
            puVar8[5] = uStack_1e;
            puVar8[6] = (short)((ulong)uVar23 >> 0x20);
            puVar8[7] = uStack_2c;
            puVar8[8] = uStack_1c;
            puVar8[9] = (short)((ulong)uVar23 >> 0x30);
            puVar8[10] = uStack_2a;
            puVar8[0xb] = uStack_1a;
            puVar8[0xc] = (short)uVar26;
            puVar8[0xd] = uStack_28;
            puVar8[0xe] = uStack_18;
            puVar8[0xf] = (short)((ulong)uVar26 >> 0x10);
            puVar8[0x10] = uStack_26;
            puVar8[0x11] = uStack_16;
            puVar8[0x12] = (short)((ulong)uVar26 >> 0x20);
            puVar8[0x13] = uStack_24;
            puVar8[0x14] = uStack_14;
            puVar8[0x15] = (short)((ulong)uVar26 >> 0x30);
            puVar8[0x16] = uStack_22;
            puVar8[0x17] = uStack_12;
            puVar8 = puVar8 + 0x18;
            puVar10 = puVar10 + 2;
            puVar16 = puVar16 + 2;
            puVar22 = puVar22 + 2;
          } while (puVar8 != param_2 + ((ulong)uVar11 + 1) * 0x18);
          iVar5 = uVar11 + 1;
          uVar11 = iVar5 * 0x18;
          uVar3 = iVar5 * 8;
        }
        uVar4 = (ulong)uVar3;
        if (param_3 <= (int)uVar3) {
          return;
        }
      }
      else {
        uVar4 = 0;
        uVar11 = 0;
        if (param_3 < 1) goto LAB_0026e4d0;
      }
      uVar7 = -(uVar4 >> 0x1f) & 0xfffffffe00000000 | uVar4 << 1;
      lVar9 = 0;
      puVar8 = param_2 + (int)uVar11;
      do {
        *puVar8 = *(undefined2 *)((long)puVar20 + lVar9 * 2 + uVar7);
        puVar8[1] = *(undefined2 *)((long)puVar21 + lVar9 * 2 + uVar7);
        lVar6 = lVar9 * 2;
        lVar9 = lVar9 + 1;
        puVar8[2] = *(undefined2 *)((long)puVar18 + lVar6 + uVar7);
        puVar8 = puVar8 + (int)param_4;
      } while ((int)uVar4 + (int)lVar9 < param_3);
      goto LAB_0026e4d0;
    }
  }
  lVar12 = *param_1;
  lVar6 = param_1[1];
  lVar9 = param_1[2];
  lVar14 = param_1[3];
  if ((param_4 == 4) && (8 < param_3)) {
    uVar11 = param_3 - 9U >> 3;
    lVar15 = 0;
    puVar8 = param_2;
    do {
      puVar18 = (undefined8 *)(lVar12 + lVar15);
      puVar20 = (undefined8 *)(lVar6 + lVar15);
      puVar21 = (undefined8 *)(lVar9 + lVar15);
      uVar27 = puVar18[1];
      uVar23 = *puVar18;
      puVar18 = (undefined8 *)(lVar14 + lVar15);
      lVar15 = lVar15 + 0x10;
      uVar28 = puVar20[1];
      uVar24 = *puVar20;
      uVar29 = puVar21[1];
      uVar25 = *puVar21;
      uVar30 = puVar18[1];
      uVar26 = *puVar18;
      local_30 = (undefined2)uVar24;
      uStack_2e = (undefined2)((ulong)uVar24 >> 0x10);
      uStack_2c = (undefined2)((ulong)uVar24 >> 0x20);
      uStack_2a = (undefined2)((ulong)uVar24 >> 0x30);
      uStack_28 = (undefined2)uVar28;
      uStack_26 = (undefined2)((ulong)uVar28 >> 0x10);
      uStack_24 = (undefined2)((ulong)uVar28 >> 0x20);
      uStack_22 = (undefined2)((ulong)uVar28 >> 0x30);
      local_20 = (undefined2)uVar25;
      uStack_1e = (undefined2)((ulong)uVar25 >> 0x10);
      uStack_1c = (undefined2)((ulong)uVar25 >> 0x20);
      uStack_1a = (undefined2)((ulong)uVar25 >> 0x30);
      uStack_18 = (undefined2)uVar29;
      uStack_16 = (undefined2)((ulong)uVar29 >> 0x10);
      uStack_14 = (undefined2)((ulong)uVar29 >> 0x20);
      uStack_12 = (undefined2)((ulong)uVar29 >> 0x30);
      local_10 = (undefined2)uVar26;
      uStack_e = (undefined2)((ulong)uVar26 >> 0x10);
      uStack_c = (undefined2)((ulong)uVar26 >> 0x20);
      uStack_a = (undefined2)((ulong)uVar26 >> 0x30);
      uStack_8 = (undefined2)uVar30;
      uStack_6 = (undefined2)((ulong)uVar30 >> 0x10);
      uStack_4 = (undefined2)((ulong)uVar30 >> 0x20);
      uStack_2 = (undefined2)((ulong)uVar30 >> 0x30);
      *puVar8 = (short)uVar23;
      puVar8[1] = local_30;
      puVar8[2] = local_20;
      puVar8[3] = local_10;
      puVar8[4] = (short)((ulong)uVar23 >> 0x10);
      puVar8[5] = uStack_2e;
      puVar8[6] = uStack_1e;
      puVar8[7] = uStack_e;
      puVar8[8] = (short)((ulong)uVar23 >> 0x20);
      puVar8[9] = uStack_2c;
      puVar8[10] = uStack_1c;
      puVar8[0xb] = uStack_c;
      puVar8[0xc] = (short)((ulong)uVar23 >> 0x30);
      puVar8[0xd] = uStack_2a;
      puVar8[0xe] = uStack_1a;
      puVar8[0xf] = uStack_a;
      puVar8[0x10] = (short)uVar27;
      puVar8[0x11] = uStack_28;
      puVar8[0x12] = uStack_18;
      puVar8[0x13] = uStack_8;
      puVar8[0x14] = (short)((ulong)uVar27 >> 0x10);
      puVar8[0x15] = uStack_26;
      puVar8[0x16] = uStack_16;
      puVar8[0x17] = uStack_6;
      puVar8[0x18] = (short)((ulong)uVar27 >> 0x20);
      puVar8[0x19] = uStack_24;
      puVar8[0x1a] = uStack_14;
      puVar8[0x1b] = uStack_4;
      puVar8[0x1c] = (short)((ulong)uVar27 >> 0x30);
      puVar8[0x1d] = uStack_22;
      puVar8[0x1e] = uStack_12;
      puVar8[0x1f] = uStack_2;
      puVar8 = puVar8 + 0x20;
    } while (lVar15 != ((ulong)uVar11 + 1) * 0x10);
    iVar5 = uVar11 + 1;
    uVar4 = (ulong)(uint)(iVar5 * 8);
    iVar5 = iVar5 * 0x20;
  }
  else {
    iVar5 = 0;
    uVar4 = 0;
  }
  if ((int)uVar4 < param_3) {
    uVar7 = -(uVar4 >> 0x1f) & 0xfffffffe00000000 | uVar4 << 1;
    lVar15 = 0;
    puVar8 = param_2 + iVar5;
    do {
      *puVar8 = *(undefined2 *)(lVar12 + uVar7 + lVar15);
      puVar8[1] = *(undefined2 *)(lVar6 + uVar7 + lVar15);
      puVar8[2] = *(undefined2 *)(lVar9 + uVar7 + lVar15);
      puVar2 = (undefined2 *)(lVar14 + uVar7 + lVar15);
      lVar15 = lVar15 + 2;
      puVar8[3] = *puVar2;
      puVar8 = puVar8 + (int)param_4;
    } while (lVar15 != ((ulong)(uint)((param_3 + -1) - (int)uVar4) + 1) * 2);
  }
LAB_0026e4d0:
  if (iVar13 < (int)param_4) {
    lVar9 = (long)iVar13;
    plVar19 = param_1 + lVar9;
    param_2 = param_2 + lVar9;
    do {
      lVar17 = *plVar19;
      lVar15 = plVar19[1];
      lVar14 = plVar19[2];
      lVar6 = 0;
      lVar12 = plVar19[3];
      puVar8 = param_2;
      if (0 < param_3) {
        do {
          *puVar8 = *(undefined2 *)(lVar17 + lVar6 * 2);
          puVar8[1] = *(undefined2 *)(lVar15 + lVar6 * 2);
          puVar8[2] = *(undefined2 *)(lVar14 + lVar6 * 2);
          lVar1 = lVar6 * 2;
          lVar6 = lVar6 + 1;
          puVar8[3] = *(undefined2 *)(lVar12 + lVar1);
          puVar8 = puVar8 + (int)param_4;
        } while ((int)lVar6 < param_3);
      }
      plVar19 = plVar19 + 4;
      param_2 = param_2 + 4;
    } while (plVar19 != param_1 + lVar9 + 4 + (ulong)((param_4 - 1) - iVar13 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026e940 (1132 bytes) name=FUN_0026e940

void FUN_0026e940(long *param_1,undefined1 *param_2,int param_3,uint param_4)

{
  undefined1 *puVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined1 *puVar5;
  long lVar6;
  undefined1 *puVar7;
  int iVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  int iVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined1 local_30;
  undefined1 uStack_2f;
  undefined1 uStack_2e;
  undefined1 uStack_2d;
  undefined1 uStack_2c;
  undefined1 uStack_2b;
  undefined1 uStack_2a;
  undefined1 uStack_29;
  undefined1 uStack_28;
  undefined1 uStack_27;
  undefined1 uStack_26;
  undefined1 uStack_25;
  undefined1 uStack_24;
  undefined1 uStack_23;
  undefined1 uStack_22;
  undefined1 uStack_21;
  undefined1 local_20;
  undefined1 uStack_1f;
  undefined1 uStack_1e;
  undefined1 uStack_1d;
  undefined1 uStack_1c;
  undefined1 uStack_1b;
  undefined1 uStack_1a;
  undefined1 uStack_19;
  undefined1 uStack_18;
  undefined1 uStack_17;
  undefined1 uStack_16;
  undefined1 uStack_15;
  undefined1 uStack_14;
  undefined1 uStack_13;
  undefined1 uStack_12;
  undefined1 uStack_11;
  undefined1 local_10;
  undefined1 uStack_f;
  undefined1 uStack_e;
  undefined1 uStack_d;
  undefined1 uStack_c;
  undefined1 uStack_b;
  undefined1 uStack_a;
  undefined1 uStack_9;
  undefined1 uStack_8;
  undefined1 uStack_7;
  undefined1 uStack_6;
  undefined1 uStack_5;
  undefined1 uStack_4;
  undefined1 uStack_3;
  undefined1 uStack_2;
  undefined1 uStack_1;
  
  if ((param_4 & 3) == 0) {
    iVar15 = 4;
  }
  else {
    iVar15 = (int)param_4 % 4;
    if (iVar15 == 1) {
      lVar10 = *param_1;
      if (0 < param_3) {
        lVar6 = 0;
        puVar5 = param_2;
        do {
          puVar7 = (undefined1 *)(lVar10 + lVar6);
          lVar6 = lVar6 + 1;
          *puVar5 = *puVar7;
          puVar5 = puVar5 + (int)param_4;
        } while ((int)lVar6 < param_3);
      }
      goto LAB_0026e9a4;
    }
    if (iVar15 == 2) {
      lVar10 = *param_1;
      lVar6 = param_1[1];
      if (param_4 == 2) {
        if (param_3 + -0x10 < 1) {
          iVar8 = 0;
          iVar13 = iVar8;
        }
        else {
          lVar9 = 0;
          puVar5 = param_2;
          do {
            puVar2 = (undefined8 *)(lVar10 + lVar9);
            puVar3 = (undefined8 *)(lVar6 + lVar9);
            lVar9 = lVar9 + 0x10;
            uVar18 = puVar2[1];
            uVar16 = *puVar2;
            uVar19 = puVar3[1];
            uVar17 = *puVar3;
            local_30 = (undefined1)uVar17;
            uStack_2f = (undefined1)((ulong)uVar17 >> 8);
            uStack_2e = (undefined1)((ulong)uVar17 >> 0x10);
            uStack_2d = (undefined1)((ulong)uVar17 >> 0x18);
            uStack_2c = (undefined1)((ulong)uVar17 >> 0x20);
            uStack_2b = (undefined1)((ulong)uVar17 >> 0x28);
            uStack_2a = (undefined1)((ulong)uVar17 >> 0x30);
            uStack_29 = (undefined1)((ulong)uVar17 >> 0x38);
            uStack_28 = (undefined1)uVar19;
            uStack_27 = (undefined1)((ulong)uVar19 >> 8);
            uStack_26 = (undefined1)((ulong)uVar19 >> 0x10);
            uStack_25 = (undefined1)((ulong)uVar19 >> 0x18);
            uStack_24 = (undefined1)((ulong)uVar19 >> 0x20);
            uStack_23 = (undefined1)((ulong)uVar19 >> 0x28);
            uStack_22 = (undefined1)((ulong)uVar19 >> 0x30);
            uStack_21 = (undefined1)((ulong)uVar19 >> 0x38);
            *puVar5 = (char)uVar16;
            puVar5[1] = local_30;
            puVar5[2] = (char)((ulong)uVar16 >> 8);
            puVar5[3] = uStack_2f;
            puVar5[4] = (char)((ulong)uVar16 >> 0x10);
            puVar5[5] = uStack_2e;
            puVar5[6] = (char)((ulong)uVar16 >> 0x18);
            puVar5[7] = uStack_2d;
            puVar5[8] = (char)((ulong)uVar16 >> 0x20);
            puVar5[9] = uStack_2c;
            puVar5[10] = (char)((ulong)uVar16 >> 0x28);
            puVar5[0xb] = uStack_2b;
            puVar5[0xc] = (char)((ulong)uVar16 >> 0x30);
            puVar5[0xd] = uStack_2a;
            puVar5[0xe] = (char)((ulong)uVar16 >> 0x38);
            puVar5[0xf] = uStack_29;
            puVar5[0x10] = (char)uVar18;
            puVar5[0x11] = uStack_28;
            puVar5[0x12] = (char)((ulong)uVar18 >> 8);
            puVar5[0x13] = uStack_27;
            puVar5[0x14] = (char)((ulong)uVar18 >> 0x10);
            puVar5[0x15] = uStack_26;
            puVar5[0x16] = (char)((ulong)uVar18 >> 0x18);
            puVar5[0x17] = uStack_25;
            puVar5[0x18] = (char)((ulong)uVar18 >> 0x20);
            puVar5[0x19] = uStack_24;
            puVar5[0x1a] = (char)((ulong)uVar18 >> 0x28);
            puVar5[0x1b] = uStack_23;
            puVar5[0x1c] = (char)((ulong)uVar18 >> 0x30);
            puVar5[0x1d] = uStack_22;
            puVar5[0x1e] = (char)((ulong)uVar18 >> 0x38);
            puVar5[0x1f] = uStack_21;
            puVar5 = puVar5 + 0x20;
          } while ((int)lVar9 < param_3 + -0x10);
          iVar13 = (param_3 - 0x11U >> 4) + 1;
          iVar8 = iVar13 * 0x20;
          iVar13 = iVar13 * 0x10;
        }
        if (param_3 <= iVar13) {
          return;
        }
      }
      else {
        iVar8 = 0;
        iVar13 = 0;
        if (param_3 < 1) goto LAB_0026e9a4;
      }
      lVar9 = 0;
      puVar5 = param_2 + iVar8;
      do {
        *puVar5 = *(undefined1 *)(lVar10 + iVar13 + lVar9);
        puVar7 = (undefined1 *)(lVar6 + iVar13 + lVar9);
        lVar9 = lVar9 + 1;
        puVar5[1] = *puVar7;
        puVar5 = puVar5 + (int)param_4;
      } while (iVar13 + (int)lVar9 < param_3);
      goto LAB_0026e9a4;
    }
    if (iVar15 == 3) {
      lVar10 = *param_1;
      lVar6 = param_1[1];
      lVar9 = param_1[2];
      if (param_4 == 3) {
        if (param_3 + -0x10 < 1) {
          iVar8 = 0;
          iVar13 = iVar8;
        }
        else {
          lVar11 = 0;
          puVar5 = param_2;
          do {
            puVar2 = (undefined8 *)(lVar10 + lVar11);
            puVar3 = (undefined8 *)(lVar6 + lVar11);
            puVar4 = (undefined8 *)(lVar9 + lVar11);
            uVar19 = puVar2[1];
            uVar16 = *puVar2;
            lVar11 = lVar11 + 0x10;
            uVar20 = puVar3[1];
            uVar17 = *puVar3;
            uVar21 = puVar4[1];
            uVar18 = *puVar4;
            local_30 = (undefined1)uVar17;
            uStack_2f = (undefined1)((ulong)uVar17 >> 8);
            uStack_2e = (undefined1)((ulong)uVar17 >> 0x10);
            uStack_2d = (undefined1)((ulong)uVar17 >> 0x18);
            uStack_2c = (undefined1)((ulong)uVar17 >> 0x20);
            uStack_2b = (undefined1)((ulong)uVar17 >> 0x28);
            uStack_2a = (undefined1)((ulong)uVar17 >> 0x30);
            uStack_29 = (undefined1)((ulong)uVar17 >> 0x38);
            uStack_28 = (undefined1)uVar20;
            uStack_27 = (undefined1)((ulong)uVar20 >> 8);
            uStack_26 = (undefined1)((ulong)uVar20 >> 0x10);
            uStack_25 = (undefined1)((ulong)uVar20 >> 0x18);
            uStack_24 = (undefined1)((ulong)uVar20 >> 0x20);
            uStack_23 = (undefined1)((ulong)uVar20 >> 0x28);
            uStack_22 = (undefined1)((ulong)uVar20 >> 0x30);
            uStack_21 = (undefined1)((ulong)uVar20 >> 0x38);
            local_20 = (undefined1)uVar18;
            uStack_1f = (undefined1)((ulong)uVar18 >> 8);
            uStack_1e = (undefined1)((ulong)uVar18 >> 0x10);
            uStack_1d = (undefined1)((ulong)uVar18 >> 0x18);
            uStack_1c = (undefined1)((ulong)uVar18 >> 0x20);
            uStack_1b = (undefined1)((ulong)uVar18 >> 0x28);
            uStack_1a = (undefined1)((ulong)uVar18 >> 0x30);
            uStack_19 = (undefined1)((ulong)uVar18 >> 0x38);
            uStack_18 = (undefined1)uVar21;
            uStack_17 = (undefined1)((ulong)uVar21 >> 8);
            uStack_16 = (undefined1)((ulong)uVar21 >> 0x10);
            uStack_15 = (undefined1)((ulong)uVar21 >> 0x18);
            uStack_14 = (undefined1)((ulong)uVar21 >> 0x20);
            uStack_13 = (undefined1)((ulong)uVar21 >> 0x28);
            uStack_12 = (undefined1)((ulong)uVar21 >> 0x30);
            uStack_11 = (undefined1)((ulong)uVar21 >> 0x38);
            *puVar5 = (char)uVar16;
            puVar5[1] = local_30;
            puVar5[2] = local_20;
            puVar5[3] = (char)((ulong)uVar16 >> 8);
            puVar5[4] = uStack_2f;
            puVar5[5] = uStack_1f;
            puVar5[6] = (char)((ulong)uVar16 >> 0x10);
            puVar5[7] = uStack_2e;
            puVar5[8] = uStack_1e;
            puVar5[9] = (char)((ulong)uVar16 >> 0x18);
            puVar5[10] = uStack_2d;
            puVar5[0xb] = uStack_1d;
            puVar5[0xc] = (char)((ulong)uVar16 >> 0x20);
            puVar5[0xd] = uStack_2c;
            puVar5[0xe] = uStack_1c;
            puVar5[0xf] = (char)((ulong)uVar16 >> 0x28);
            puVar5[0x10] = uStack_2b;
            puVar5[0x11] = uStack_1b;
            puVar5[0x12] = (char)((ulong)uVar16 >> 0x30);
            puVar5[0x13] = uStack_2a;
            puVar5[0x14] = uStack_1a;
            puVar5[0x15] = (char)((ulong)uVar16 >> 0x38);
            puVar5[0x16] = uStack_29;
            puVar5[0x17] = uStack_19;
            puVar5[0x18] = (char)uVar19;
            puVar5[0x19] = uStack_28;
            puVar5[0x1a] = uStack_18;
            puVar5[0x1b] = (char)((ulong)uVar19 >> 8);
            puVar5[0x1c] = uStack_27;
            puVar5[0x1d] = uStack_17;
            puVar5[0x1e] = (char)((ulong)uVar19 >> 0x10);
            puVar5[0x1f] = uStack_26;
            puVar5[0x20] = uStack_16;
            puVar5[0x21] = (char)((ulong)uVar19 >> 0x18);
            puVar5[0x22] = uStack_25;
            puVar5[0x23] = uStack_15;
            puVar5[0x24] = (char)((ulong)uVar19 >> 0x20);
            puVar5[0x25] = uStack_24;
            puVar5[0x26] = uStack_14;
            puVar5[0x27] = (char)((ulong)uVar19 >> 0x28);
            puVar5[0x28] = uStack_23;
            puVar5[0x29] = uStack_13;
            puVar5[0x2a] = (char)((ulong)uVar19 >> 0x30);
            puVar5[0x2b] = uStack_22;
            puVar5[0x2c] = uStack_12;
            puVar5[0x2d] = (char)((ulong)uVar19 >> 0x38);
            puVar5[0x2e] = uStack_21;
            puVar5[0x2f] = uStack_11;
            puVar5 = puVar5 + 0x30;
          } while ((int)lVar11 < param_3 + -0x10);
          iVar13 = (param_3 - 0x11U >> 4) + 1;
          iVar8 = iVar13 * 0x30;
          iVar13 = iVar13 * 0x10;
        }
        if (param_3 <= iVar13) {
          return;
        }
      }
      else {
        iVar13 = 0;
        iVar8 = 0;
        if (param_3 < 1) goto LAB_0026e9a4;
      }
      lVar11 = 0;
      lVar12 = (long)iVar13;
      puVar5 = param_2 + iVar8;
      do {
        *puVar5 = *(undefined1 *)(lVar10 + lVar12 + lVar11);
        puVar5[1] = *(undefined1 *)(lVar6 + lVar12 + lVar11);
        puVar7 = (undefined1 *)(lVar9 + lVar12 + lVar11);
        lVar11 = lVar11 + 1;
        puVar5[2] = *puVar7;
        puVar5 = puVar5 + (int)param_4;
      } while (iVar13 + (int)lVar11 < param_3);
      goto LAB_0026e9a4;
    }
  }
  lVar10 = *param_1;
  lVar6 = param_1[1];
  lVar9 = param_1[2];
  lVar11 = param_1[3];
  if ((param_4 == 4) && (0 < param_3 + -0x10)) {
    lVar12 = 0;
    puVar5 = param_2;
    do {
      puVar2 = (undefined8 *)(lVar10 + lVar12);
      puVar3 = (undefined8 *)(lVar6 + lVar12);
      puVar4 = (undefined8 *)(lVar9 + lVar12);
      uVar20 = puVar2[1];
      uVar16 = *puVar2;
      puVar2 = (undefined8 *)(lVar11 + lVar12);
      lVar12 = lVar12 + 0x10;
      uVar21 = puVar3[1];
      uVar17 = *puVar3;
      uVar22 = puVar4[1];
      uVar18 = *puVar4;
      uVar23 = puVar2[1];
      uVar19 = *puVar2;
      local_30 = (undefined1)uVar17;
      uStack_2f = (undefined1)((ulong)uVar17 >> 8);
      uStack_2e = (undefined1)((ulong)uVar17 >> 0x10);
      uStack_2d = (undefined1)((ulong)uVar17 >> 0x18);
      uStack_2c = (undefined1)((ulong)uVar17 >> 0x20);
      uStack_2b = (undefined1)((ulong)uVar17 >> 0x28);
      uStack_2a = (undefined1)((ulong)uVar17 >> 0x30);
      uStack_29 = (undefined1)((ulong)uVar17 >> 0x38);
      uStack_28 = (undefined1)uVar21;
      uStack_27 = (undefined1)((ulong)uVar21 >> 8);
      uStack_26 = (undefined1)((ulong)uVar21 >> 0x10);
      uStack_25 = (undefined1)((ulong)uVar21 >> 0x18);
      uStack_24 = (undefined1)((ulong)uVar21 >> 0x20);
      uStack_23 = (undefined1)((ulong)uVar21 >> 0x28);
      uStack_22 = (undefined1)((ulong)uVar21 >> 0x30);
      uStack_21 = (undefined1)((ulong)uVar21 >> 0x38);
      local_20 = (undefined1)uVar18;
      uStack_1f = (undefined1)((ulong)uVar18 >> 8);
      uStack_1e = (undefined1)((ulong)uVar18 >> 0x10);
      uStack_1d = (undefined1)((ulong)uVar18 >> 0x18);
      uStack_1c = (undefined1)((ulong)uVar18 >> 0x20);
      uStack_1b = (undefined1)((ulong)uVar18 >> 0x28);
      uStack_1a = (undefined1)((ulong)uVar18 >> 0x30);
      uStack_19 = (undefined1)((ulong)uVar18 >> 0x38);
      uStack_18 = (undefined1)uVar22;
      uStack_17 = (undefined1)((ulong)uVar22 >> 8);
      uStack_16 = (undefined1)((ulong)uVar22 >> 0x10);
      uStack_15 = (undefined1)((ulong)uVar22 >> 0x18);
      uStack_14 = (undefined1)((ulong)uVar22 >> 0x20);
      uStack_13 = (undefined1)((ulong)uVar22 >> 0x28);
      uStack_12 = (undefined1)((ulong)uVar22 >> 0x30);
      uStack_11 = (undefined1)((ulong)uVar22 >> 0x38);
      local_10 = (undefined1)uVar19;
      uStack_f = (undefined1)((ulong)uVar19 >> 8);
      uStack_e = (undefined1)((ulong)uVar19 >> 0x10);
      uStack_d = (undefined1)((ulong)uVar19 >> 0x18);
      uStack_c = (undefined1)((ulong)uVar19 >> 0x20);
      uStack_b = (undefined1)((ulong)uVar19 >> 0x28);
      uStack_a = (undefined1)((ulong)uVar19 >> 0x30);
      uStack_9 = (undefined1)((ulong)uVar19 >> 0x38);
      uStack_8 = (undefined1)uVar23;
      uStack_7 = (undefined1)((ulong)uVar23 >> 8);
      uStack_6 = (undefined1)((ulong)uVar23 >> 0x10);
      uStack_5 = (undefined1)((ulong)uVar23 >> 0x18);
      uStack_4 = (undefined1)((ulong)uVar23 >> 0x20);
      uStack_3 = (undefined1)((ulong)uVar23 >> 0x28);
      uStack_2 = (undefined1)((ulong)uVar23 >> 0x30);
      uStack_1 = (undefined1)((ulong)uVar23 >> 0x38);
      *puVar5 = (char)uVar16;
      puVar5[1] = local_30;
      puVar5[2] = local_20;
      puVar5[3] = local_10;
      puVar5[4] = (char)((ulong)uVar16 >> 8);
      puVar5[5] = uStack_2f;
      puVar5[6] = uStack_1f;
      puVar5[7] = uStack_f;
      puVar5[8] = (char)((ulong)uVar16 >> 0x10);
      puVar5[9] = uStack_2e;
      puVar5[10] = uStack_1e;
      puVar5[0xb] = uStack_e;
      puVar5[0xc] = (char)((ulong)uVar16 >> 0x18);
      puVar5[0xd] = uStack_2d;
      puVar5[0xe] = uStack_1d;
      puVar5[0xf] = uStack_d;
      puVar5[0x10] = (char)((ulong)uVar16 >> 0x20);
      puVar5[0x11] = uStack_2c;
      puVar5[0x12] = uStack_1c;
      puVar5[0x13] = uStack_c;
      puVar5[0x14] = (char)((ulong)uVar16 >> 0x28);
      puVar5[0x15] = uStack_2b;
      puVar5[0x16] = uStack_1b;
      puVar5[0x17] = uStack_b;
      puVar5[0x18] = (char)((ulong)uVar16 >> 0x30);
      puVar5[0x19] = uStack_2a;
      puVar5[0x1a] = uStack_1a;
      puVar5[0x1b] = uStack_a;
      puVar5[0x1c] = (char)((ulong)uVar16 >> 0x38);
      puVar5[0x1d] = uStack_29;
      puVar5[0x1e] = uStack_19;
      puVar5[0x1f] = uStack_9;
      puVar5[0x20] = (char)uVar20;
      puVar5[0x21] = uStack_28;
      puVar5[0x22] = uStack_18;
      puVar5[0x23] = uStack_8;
      puVar5[0x24] = (char)((ulong)uVar20 >> 8);
      puVar5[0x25] = uStack_27;
      puVar5[0x26] = uStack_17;
      puVar5[0x27] = uStack_7;
      puVar5[0x28] = (char)((ulong)uVar20 >> 0x10);
      puVar5[0x29] = uStack_26;
      puVar5[0x2a] = uStack_16;
      puVar5[0x2b] = uStack_6;
      puVar5[0x2c] = (char)((ulong)uVar20 >> 0x18);
      puVar5[0x2d] = uStack_25;
      puVar5[0x2e] = uStack_15;
      puVar5[0x2f] = uStack_5;
      puVar5[0x30] = (char)((ulong)uVar20 >> 0x20);
      puVar5[0x31] = uStack_24;
      puVar5[0x32] = uStack_14;
      puVar5[0x33] = uStack_4;
      puVar5[0x34] = (char)((ulong)uVar20 >> 0x28);
      puVar5[0x35] = uStack_23;
      puVar5[0x36] = uStack_13;
      puVar5[0x37] = uStack_3;
      puVar5[0x38] = (char)((ulong)uVar20 >> 0x30);
      puVar5[0x39] = uStack_22;
      puVar5[0x3a] = uStack_12;
      puVar5[0x3b] = uStack_2;
      puVar5[0x3c] = (char)((ulong)uVar20 >> 0x38);
      puVar5[0x3d] = uStack_21;
      puVar5[0x3e] = uStack_11;
      puVar5[0x3f] = uStack_1;
      puVar5 = puVar5 + 0x40;
    } while ((int)lVar12 < param_3 + -0x10);
    iVar8 = (param_3 - 0x11U >> 4) + 1;
    iVar13 = iVar8 * 0x10;
    iVar8 = iVar8 * 0x40;
  }
  else {
    iVar8 = 0;
    iVar13 = 0;
  }
  if (iVar13 < param_3) {
    lVar12 = 0;
    lVar14 = (long)iVar13;
    puVar5 = param_2 + iVar8;
    do {
      *puVar5 = *(undefined1 *)(lVar10 + lVar14 + lVar12);
      puVar5[1] = *(undefined1 *)(lVar6 + lVar14 + lVar12);
      puVar5[2] = *(undefined1 *)(lVar9 + lVar14 + lVar12);
      puVar7 = (undefined1 *)(lVar11 + lVar14 + lVar12);
      lVar12 = lVar12 + 1;
      puVar5[3] = *puVar7;
      puVar5 = puVar5 + (int)param_4;
    } while (lVar12 != (ulong)(uint)((param_3 + -1) - iVar13) + 1);
  }
LAB_0026e9a4:
  if (iVar15 < (int)param_4) {
    lVar10 = (long)iVar15;
    param_1 = param_1 + lVar10;
    puVar5 = param_2 + lVar10;
    do {
      lVar14 = *param_1;
      lVar12 = param_1[1];
      lVar11 = param_1[2];
      lVar6 = 0;
      lVar9 = param_1[3];
      puVar7 = puVar5;
      if (0 < param_3) {
        do {
          *puVar7 = *(undefined1 *)(lVar14 + lVar6);
          puVar7[1] = *(undefined1 *)(lVar12 + lVar6);
          puVar7[2] = *(undefined1 *)(lVar11 + lVar6);
          puVar1 = (undefined1 *)(lVar9 + lVar6);
          lVar6 = lVar6 + 1;
          puVar7[3] = *puVar1;
          puVar7 = puVar7 + (int)param_4;
        } while ((int)lVar6 < param_3);
      }
      puVar5 = puVar5 + 4;
      param_1 = param_1 + 4;
    } while (puVar5 != param_2 + lVar10 + 4 + (ulong)((param_4 - 1) - iVar15 >> 2) * 4);
  }
  return;
}


==================================================================

### FUNC 0026ee40 (524 bytes) name=FUN_0026ee40

void FUN_0026ee40(undefined1 (*param_1) [16],ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  uint uVar11;
  undefined1 (*pauVar12) [16];
  long lVar14;
  undefined8 *puVar15;
  ulong uVar16;
  ulong uVar17;
  int iVar18;
  uint uVar19;
  ulong uVar20;
  ulong uVar21;
  long lVar22;
  undefined1 auVar23 [16];
  undefined1 (*pauVar13) [16];
  
  iVar18 = param_7[1];
  iVar5 = *param_7;
  if (iVar18 != 0) {
    uVar8 = iVar5 - 4U >> 2;
    uVar6 = (uVar8 + 1) * 4;
    if (iVar5 + -3 < 1) {
      uVar6 = 0;
    }
    uVar1 = uVar6 + 1;
    uVar9 = iVar5 - uVar6;
    uVar2 = uVar6 + 2;
    uVar3 = uVar6 + 3;
    uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    lVar22 = (long)(int)uVar6 * 4;
    uVar21 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar20 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    do {
      if (0 < iVar5 + -3) {
        pauVar12 = param_1;
        puVar15 = param_5;
        do {
          pauVar13 = pauVar12 + 1;
          auVar23 = NEON_scvtf(*pauVar12,4);
          puVar15[1] = auVar23._8_8_;
          *puVar15 = auVar23._0_8_;
          pauVar12 = pauVar13;
          puVar15 = puVar15 + 2;
        } while (pauVar13 != param_1 + (ulong)uVar8 + 1);
      }
      if ((int)uVar6 < iVar5) {
        uVar11 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
        uVar16 = (ulong)uVar11;
        if (uVar9 < uVar11) {
          uVar16 = (ulong)uVar9;
        }
        if (uVar9 < 5) {
          uVar16 = (ulong)uVar9;
        }
        uVar11 = (uint)uVar16;
        if (uVar11 == 0) {
          uVar17 = (ulong)uVar6;
        }
        else {
          *(float *)((long)param_5 + lVar22) = (float)*(int *)(*param_1 + lVar22);
          if (uVar11 == 1) {
            uVar17 = (ulong)uVar1;
          }
          else {
            *(float *)((long)param_5 + uVar10) = (float)*(int *)(*param_1 + uVar10);
            if (uVar11 == 2) {
              uVar17 = (ulong)uVar2;
            }
            else {
              *(float *)((long)param_5 + uVar21) = (float)*(int *)(*param_1 + uVar21);
              if (uVar11 == 4) {
                uVar17 = (ulong)(uVar6 + 4);
                *(float *)((long)param_5 + uVar20) = (float)*(int *)(*param_1 + uVar20);
              }
              else {
                uVar17 = (ulong)uVar3;
              }
            }
          }
          if (uVar11 == uVar9) goto LAB_0026f004;
        }
        uVar4 = ((uVar9 - uVar11) - 4 >> 2) + 1;
        iVar7 = uVar4 * 4;
        if (2 < (uVar9 - 1) - uVar11) {
          uVar19 = 0;
          lVar14 = ((long)(int)uVar6 + uVar16) * 4;
          puVar15 = (undefined8 *)((long)param_5 + lVar14);
          pauVar12 = (undefined1 (*) [16])(*param_1 + lVar14);
          do {
            uVar19 = uVar19 + 1;
            auVar23 = NEON_scvtf(*pauVar12,4);
            puVar15[1] = auVar23._8_8_;
            *puVar15 = auVar23._0_8_;
            puVar15 = puVar15 + 2;
            pauVar12 = pauVar12 + 1;
          } while (uVar19 < uVar4);
          uVar17 = (ulong)(uint)((int)uVar17 + iVar7);
          if (uVar9 - uVar11 == iVar7) goto LAB_0026f004;
        }
        uVar16 = -(uVar17 >> 0x1f) & 0xfffffffc00000000 | uVar17 << 2;
        *(float *)((long)param_5 + uVar16) = (float)*(int *)(*param_1 + uVar16);
        if ((int)uVar17 + 1 < iVar5) {
          *(float *)((long)param_5 + uVar16 + 4) = (float)*(int *)(*param_1 + uVar16 + 4);
          if ((int)uVar17 + 2 < iVar5) {
            *(float *)((long)param_5 + uVar16 + 8) = (float)*(int *)(*param_1 + uVar16 + 8);
          }
        }
      }
LAB_0026f004:
      iVar18 = iVar18 + -1;
      param_1 = (undefined1 (*) [16])(*param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0026f04c (1388 bytes) name=FUN_0026f04c

void FUN_0026f04c(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 ulong *param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  ushort *puVar8;
  uint uVar9;
  int iVar10;
  byte bVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ulong *puVar19;
  ulong *puVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  long lVar23;
  uint uVar24;
  long lVar25;
  int iVar26;
  long lVar27;
  uint uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  
  iVar26 = param_7[1];
  iVar10 = *param_7;
  if (iVar26 != 0) {
    uVar14 = iVar10 - 8U >> 3;
    iVar12 = (uVar14 + 1) * 8;
    if (iVar10 + -7 < 1) {
      iVar12 = 0;
    }
    uVar17 = (iVar10 + -4) - iVar12;
    uVar15 = uVar17 >> 2;
    lVar27 = (long)iVar12;
    uVar2 = uVar15 + 1;
    uVar3 = (uVar15 - 3 >> 2) + 1;
    lVar1 = lVar27 + (ulong)uVar2 * 4;
    iVar16 = iVar10 + -3;
    iVar7 = iVar12 + 4 + uVar15 * 4;
    do {
      if (0 < iVar10 + -7) {
        puVar19 = param_5;
        puVar22 = param_1;
        do {
          uVar29 = *puVar22;
          puVar20 = puVar19 + 2;
          puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                       (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                       (uint)CONCAT12((char)((ulong)uVar29 >> 0x28),
                                                                      (ushort)(byte)((ulong)uVar29
                                                                                    >> 0x20))));
          *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                     (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                     (uint)(CONCAT12((char)((ulong)uVar29 >> 8),
                                                                     (short)uVar29) & 0xff00ff)));
          puVar19 = puVar20;
          puVar22 = puVar22 + 1;
        } while (puVar20 != param_5 + ((ulong)uVar14 + 1) * 2);
      }
      iVar13 = iVar12;
      if (iVar12 < iVar16) {
        puVar19 = (ulong *)((long)param_5 + lVar27 * 2);
        pbVar21 = (byte *)((long)param_1 + lVar27);
        iVar13 = iVar7;
        if ((puVar19 < (ulong *)((long)param_1 + lVar1) &&
             pbVar21 < (byte *)((long)param_5 + lVar1 * 2)) || (uVar2 < 5)) {
          do {
            bVar11 = pbVar21[1];
            pbVar6 = pbVar21 + 4;
            *(ushort *)puVar19 = (ushort)*pbVar21;
            *(ushort *)((long)puVar19 + 2) = (ushort)bVar11;
            bVar11 = pbVar21[3];
            *(ushort *)((long)puVar19 + 4) = (ushort)pbVar21[2];
            *(ushort *)((long)puVar19 + 6) = (ushort)bVar11;
            pbVar21 = pbVar6;
            puVar19 = puVar19 + 1;
          } while (pbVar6 != (byte *)((long)param_1 + lVar27 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar18 = iVar12;
          if (0xb < uVar17) {
            uVar24 = 0;
            do {
              uVar30 = *(undefined8 *)(pbVar21 + 8);
              uVar29 = *(undefined8 *)pbVar21;
              uVar24 = uVar24 + 1;
              puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar29 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar29 >> 0x20))));
              *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                         (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                         (uint)CONCAT12((char)((ulong)uVar29 >> 8),
                                                                        (ushort)(byte)uVar29)));
              puVar19[3] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar30 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar30 >> 0x20))));
              puVar19[2] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x18),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x10),
                                                           (uint)(CONCAT12((char)((ulong)uVar30 >> 8
                                                                                 ),(short)uVar30) &
                                                                 0xff00ff)));
              pbVar21 = pbVar21 + 0x10;
              puVar19 = puVar19 + 4;
            } while (uVar24 < uVar3);
            iVar18 = iVar12 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_0026f240;
          }
          lVar23 = (long)iVar18;
          lVar25 = lVar23 * 2;
          bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
          *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
          *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
          bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
          *(ushort *)((long)param_5 + lVar25 + 4) = (ushort)*(byte *)((long)param_1 + lVar23 + 2);
          *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
          if (iVar18 + 4 < iVar16) {
            lVar23 = (long)(iVar18 + 4);
            lVar25 = lVar23 * 2;
            bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
            *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
            *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
            bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
            *(ushort *)((long)param_5 + lVar25 + 4) = (ushort)*(byte *)((long)param_1 + lVar23 + 2);
            *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
            if (iVar18 + 8 < iVar16) {
              lVar23 = (long)(iVar18 + 8);
              lVar25 = lVar23 * 2;
              bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
              *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
              *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
              bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
              *(ushort *)((long)param_5 + lVar25 + 4) =
                   (ushort)*(byte *)((long)param_1 + lVar23 + 2);
              *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
            }
          }
        }
      }
LAB_0026f240:
      if (iVar13 < iVar10) {
        lVar23 = (long)iVar13;
        uVar24 = iVar10 - iVar13;
        pbVar21 = (byte *)((long)param_1 + lVar23);
        puVar8 = (ushort *)((long)param_5 + lVar23 * 2);
        if ((pbVar21 < (byte *)((long)param_5 + (lVar23 + (ulong)uVar24) * 2) &&
             puVar8 < (ushort *)((long)param_1 + lVar23 + (ulong)uVar24)) || (uVar24 < 0x15)) {
          lVar23 = 0;
          do {
            puVar8[lVar23] = (ushort)pbVar21[lVar23];
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar10 + -1) - iVar13) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)puVar8 >> 1) & 7) & 7;
          if (uVar24 < uVar9) {
            uVar9 = uVar24;
          }
          iVar18 = iVar13;
          if (uVar9 != 0) {
            *puVar8 = (ushort)*pbVar21;
            iVar18 = iVar13 + 1;
            if (uVar9 != 1) {
              lVar25 = (long)iVar18;
              iVar18 = iVar13 + 2;
              *(ushort *)((long)param_5 + lVar25 * 2) = (ushort)*(byte *)((long)param_1 + lVar25);
              if (uVar9 != 2) {
                lVar25 = (long)iVar18;
                iVar18 = iVar13 + 3;
                *(ushort *)((long)param_5 + lVar25 * 2) = (ushort)*(byte *)((long)param_1 + lVar25);
                if (uVar9 != 3) {
                  lVar25 = (long)iVar18;
                  iVar18 = iVar13 + 4;
                  *(ushort *)((long)param_5 + lVar25 * 2) =
                       (ushort)*(byte *)((long)param_1 + lVar25);
                  if (uVar9 != 4) {
                    lVar25 = (long)iVar18;
                    iVar18 = iVar13 + 5;
                    *(ushort *)((long)param_5 + lVar25 * 2) =
                         (ushort)*(byte *)((long)param_1 + lVar25);
                    if (uVar9 != 5) {
                      lVar25 = (long)iVar18;
                      iVar18 = iVar13 + 6;
                      *(ushort *)((long)param_5 + lVar25 * 2) =
                           (ushort)*(byte *)((long)param_1 + lVar25);
                      if (uVar9 == 7) {
                        lVar25 = (long)iVar18;
                        iVar18 = iVar13 + 7;
                        *(ushort *)((long)param_5 + lVar25 * 2) =
                             (ushort)*(byte *)((long)param_1 + lVar25);
                      }
                    }
                  }
                }
              }
            }
          }
          uVar4 = ((uVar24 - uVar9) - 0x10 >> 4) + 1;
          iVar13 = uVar4 * 0x10;
          if (0xe < (uVar24 - 1) - uVar9) {
            uVar28 = 0;
            puVar19 = (ulong *)((long)param_5 + lVar23 * 2 + (ulong)uVar9 * 2);
            puVar22 = (undefined8 *)((long)param_1 + lVar23 + (ulong)uVar9);
            do {
              uVar30 = puVar22[1];
              uVar29 = *puVar22;
              uVar28 = uVar28 + 1;
              puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar29 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar29 >> 0x20))));
              *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                         (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                         (uint)CONCAT12((char)((ulong)uVar29 >> 8),
                                                                        (ushort)(byte)uVar29)));
              puVar19[3] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar30 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar30 >> 0x20))));
              puVar19[2] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x18),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x10),
                                                           (uint)(CONCAT12((char)((ulong)uVar30 >> 8
                                                                                 ),(short)uVar30) &
                                                                 0xff00ff)));
              puVar19 = puVar19 + 4;
              puVar22 = puVar22 + 2;
            } while (uVar28 < uVar4);
            iVar18 = iVar18 + iVar13;
            if (uVar24 - uVar9 == iVar13) goto LAB_0026f508;
          }
          iVar13 = iVar18 + 1;
          *(ushort *)((long)param_5 + (long)iVar18 * 2) =
               (ushort)*(byte *)((long)param_1 + (long)iVar18);
          if (iVar13 < iVar10) {
            iVar5 = iVar18 + 2;
            *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                 (ushort)*(byte *)((long)param_1 + (long)iVar13);
            if (iVar5 < iVar10) {
              iVar13 = iVar18 + 3;
              *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                   (ushort)*(byte *)((long)param_1 + (long)iVar5);
              if (iVar13 < iVar10) {
                iVar5 = iVar18 + 4;
                *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                     (ushort)*(byte *)((long)param_1 + (long)iVar13);
                if (iVar5 < iVar10) {
                  iVar13 = iVar18 + 5;
                  *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                       (ushort)*(byte *)((long)param_1 + (long)iVar5);
                  if (iVar13 < iVar10) {
                    iVar5 = iVar18 + 6;
                    *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                         (ushort)*(byte *)((long)param_1 + (long)iVar13);
                    if (iVar5 < iVar10) {
                      iVar13 = iVar18 + 7;
                      *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                           (ushort)*(byte *)((long)param_1 + (long)iVar5);
                      if (iVar13 < iVar10) {
                        iVar5 = iVar18 + 8;
                        *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                             (ushort)*(byte *)((long)param_1 + (long)iVar13);
                        if (iVar5 < iVar10) {
                          iVar13 = iVar18 + 9;
                          *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                               (ushort)*(byte *)((long)param_1 + (long)iVar5);
                          if (iVar13 < iVar10) {
                            iVar5 = iVar18 + 10;
                            *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                 (ushort)*(byte *)((long)param_1 + (long)iVar13);
                            if (iVar5 < iVar10) {
                              iVar13 = iVar18 + 0xb;
                              *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                                   (ushort)*(byte *)((long)param_1 + (long)iVar5);
                              if (iVar13 < iVar10) {
                                iVar5 = iVar18 + 0xc;
                                *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                     (ushort)*(byte *)((long)param_1 + (long)iVar13);
                                if (iVar5 < iVar10) {
                                  iVar13 = iVar18 + 0xd;
                                  *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                                       (ushort)*(byte *)((long)param_1 + (long)iVar5);
                                  if (iVar13 < iVar10) {
                                    iVar18 = iVar18 + 0xe;
                                    *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                         (ushort)*(byte *)((long)param_1 + (long)iVar13);
                                    if (iVar18 < iVar10) {
                                      *(ushort *)((long)param_5 + (long)iVar18 * 2) =
                                           (ushort)*(byte *)((long)param_1 + (long)iVar18);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0026f508:
      iVar26 = iVar26 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (ulong *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 0026f5b8 (1388 bytes) name=FUN_0026f5b8

void FUN_0026f5b8(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  char *pcVar8;
  short *psVar9;
  uint uVar10;
  int iVar11;
  char cVar12;
  byte bVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  undefined8 *puVar24;
  ushort *puVar25;
  long lVar26;
  uint uVar27;
  long lVar28;
  int iVar29;
  long lVar30;
  uint uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  
  iVar29 = param_7[1];
  iVar11 = *param_7;
  if (iVar29 != 0) {
    uVar16 = iVar11 - 8U >> 3;
    iVar14 = (uVar16 + 1) * 8;
    if (iVar11 + -7 < 1) {
      iVar14 = 0;
    }
    uVar19 = (iVar11 + -4) - iVar14;
    uVar17 = uVar19 >> 2;
    lVar30 = (long)iVar14;
    uVar2 = uVar17 + 1;
    uVar3 = (uVar17 - 3 >> 2) + 1;
    lVar1 = lVar30 + (ulong)uVar2 * 4;
    iVar18 = iVar11 + -3;
    iVar7 = iVar14 + 4 + uVar17 * 4;
    do {
      if (0 < iVar11 + -7) {
        puVar21 = param_5;
        puVar24 = param_1;
        do {
          uVar32 = *puVar24;
          puVar22 = puVar21 + 2;
          puVar21[1] = CONCAT26((short)(char)((ulong)uVar32 >> 0x38),
                                CONCAT24((short)(char)((ulong)uVar32 >> 0x30),
                                         CONCAT22((short)(char)((ulong)uVar32 >> 0x28),
                                                  (short)(char)((ulong)uVar32 >> 0x20))));
          *puVar21 = CONCAT26((short)(char)((ulong)uVar32 >> 0x18),
                              CONCAT24((short)(char)((ulong)uVar32 >> 0x10),
                                       CONCAT22((short)(char)((ulong)uVar32 >> 8),
                                                (short)(char)uVar32)));
          puVar21 = puVar22;
          puVar24 = puVar24 + 1;
        } while (puVar22 != param_5 + ((ulong)uVar16 + 1) * 2);
      }
      iVar15 = iVar14;
      if (iVar14 < iVar18) {
        puVar25 = (ushort *)((long)param_5 + lVar30 * 2);
        pbVar23 = (byte *)((long)param_1 + lVar30);
        iVar15 = iVar7;
                    /* try { // try from 0026f6b8 to 0036f6ff has its CatchHandler @ 0026f6b8
                       catch() { ... } // from try @ 0026f6b8 with catch @ 0026f6b8
                       catch() { ... } // from try @ 0026f7a4 with catch @ 0026f6b8
                       catch() { ... } // from try @ 0026f844 with catch @ 0026f6b8
                       catch() { ... } // from try @ 0026f900 with catch @ 0026f6b8
                       catch() { ... } // from try @ 0026f98c with catch @ 0026f6b8 */
        if ((puVar25 < (ushort *)((long)param_1 + lVar1) &&
             pbVar23 < (byte *)((long)param_5 + lVar1 * 2)) || (uVar2 < 5)) {
          do {
            bVar13 = pbVar23[1];
            pbVar6 = pbVar23 + 4;
                    /* try { // try from 0026fad0 to 0036fd77 has its CatchHandler @ 002708ac */
            *puVar25 = (ushort)*pbVar23;
            puVar25[1] = (short)(char)bVar13;
            bVar13 = pbVar23[3];
            puVar25[2] = (ushort)pbVar23[2];
            puVar25[3] = (ushort)bVar13;
            pbVar23 = pbVar6;
            puVar25 = puVar25 + 4;
          } while (pbVar6 != (byte *)((long)param_1 + lVar30 + 4 + (ulong)uVar17 * 4));
        }
        else {
          iVar20 = iVar14;
          if (0xb < uVar19) {
            uVar27 = 0;
            do {
              uVar33 = *(undefined8 *)(pbVar23 + 8);
              uVar32 = *(undefined8 *)pbVar23;
              uVar27 = uVar27 + 1;
              *(ulong *)(puVar25 + 4) =
                   CONCAT26((short)(char)((ulong)uVar32 >> 0x38),
                            CONCAT24((short)(char)((ulong)uVar32 >> 0x30),
                                     CONCAT22((short)(char)((ulong)uVar32 >> 0x28),
                                              (short)(char)((ulong)uVar32 >> 0x20))));
              *(ulong *)puVar25 =
                   CONCAT26((short)(char)((ulong)uVar32 >> 0x18),
                            CONCAT24((short)(char)((ulong)uVar32 >> 0x10),
                                     CONCAT22((short)(char)((ulong)uVar32 >> 8),(short)(char)uVar32)
                                    ));
              *(ulong *)(puVar25 + 0xc) =
                   CONCAT26((short)(char)((ulong)uVar33 >> 0x38),
                            CONCAT24((short)(char)((ulong)uVar33 >> 0x30),
                                     CONCAT22((short)(char)((ulong)uVar33 >> 0x28),
                                              (short)(char)((ulong)uVar33 >> 0x20))));
              *(ulong *)(puVar25 + 8) =
                   CONCAT26((short)(char)((ulong)uVar33 >> 0x18),
                            CONCAT24((short)(char)((ulong)uVar33 >> 0x10),
                                     CONCAT22((short)(char)((ulong)uVar33 >> 8),(short)(char)uVar33)
                                    ));
              pbVar23 = pbVar23 + 0x10;
              puVar25 = puVar25 + 0x10;
            } while (uVar27 < uVar3);
            iVar20 = iVar14 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_0026f7ac;
          }
                    /* try { // try from 0026f700 to 0036f7a3 has its CatchHandler @ 0026f998 */
          lVar26 = (long)iVar20;
          lVar28 = lVar26 * 2;
          cVar12 = *(char *)((long)param_1 + lVar26 + 1);
          *(short *)((long)param_5 + lVar28) = (short)*(char *)((long)param_1 + lVar26);
          *(short *)((long)param_5 + lVar28 + 2) = (short)cVar12;
          cVar12 = *(char *)((long)param_1 + lVar26 + 3);
          *(short *)((long)param_5 + lVar28 + 4) = (short)*(char *)((long)param_1 + lVar26 + 2);
          *(short *)((long)param_5 + lVar28 + 6) = (short)cVar12;
          if (iVar20 + 4 < iVar18) {
            lVar26 = (long)(iVar20 + 4);
            lVar28 = lVar26 * 2;
            cVar12 = *(char *)((long)param_1 + lVar26 + 1);
            *(short *)((long)param_5 + lVar28) = (short)*(char *)((long)param_1 + lVar26);
            *(short *)((long)param_5 + lVar28 + 2) = (short)cVar12;
            cVar12 = *(char *)((long)param_1 + lVar26 + 3);
            *(short *)((long)param_5 + lVar28 + 4) = (short)*(char *)((long)param_1 + lVar26 + 2);
            *(short *)((long)param_5 + lVar28 + 6) = (short)cVar12;
            if (iVar20 + 8 < iVar18) {
              lVar26 = (long)(iVar20 + 8);
              lVar28 = lVar26 * 2;
              cVar12 = *(char *)((long)param_1 + lVar26 + 1);
              *(short *)((long)param_5 + lVar28) = (short)*(char *)((long)param_1 + lVar26);
              *(short *)((long)param_5 + lVar28 + 2) = (short)cVar12;
              cVar12 = *(char *)((long)param_1 + lVar26 + 3);
              *(short *)((long)param_5 + lVar28 + 4) = (short)*(char *)((long)param_1 + lVar26 + 2);
                    /* try { // try from 0026f7a4 to 0036f7b3 has its CatchHandler @ 0026f6b8 */
              *(short *)((long)param_5 + lVar28 + 6) = (short)cVar12;
            }
          }
        }
      }
LAB_0026f7ac:
      if (iVar15 < iVar11) {
                    /* try { // try from 0026f7b4 to 0036f803 has its CatchHandler @ 0026f998 */
        lVar26 = (long)iVar15;
        uVar27 = iVar11 - iVar15;
        pcVar8 = (char *)((long)param_1 + lVar26);
        psVar9 = (short *)((long)param_5 + lVar26 * 2);
        if ((pcVar8 < (char *)((long)param_5 + (lVar26 + (ulong)uVar27) * 2) &&
             psVar9 < (short *)((long)param_1 + lVar26 + (ulong)uVar27)) || (uVar27 < 0x15)) {
          lVar26 = 0;
          do {
            psVar9[lVar26] = (short)pcVar8[lVar26];
            lVar26 = lVar26 + 1;
          } while (lVar26 != (ulong)(uint)((iVar11 + -1) - iVar15) + 1);
        }
        else {
          uVar10 = -((uint)((ulong)psVar9 >> 1) & 7) & 7;
          if (uVar27 < uVar10) {
            uVar10 = uVar27;
          }
          iVar20 = iVar15;
          if (uVar10 != 0) {
                    /* try { // try from 0026f814 to 0036f843 has its CatchHandler @ 0026f954 */
            *psVar9 = (short)*pcVar8;
            iVar20 = iVar15 + 1;
            if (uVar10 != 1) {
              lVar28 = (long)iVar20;
              iVar20 = iVar15 + 2;
              *(short *)((long)param_5 + lVar28 * 2) = (short)*(char *)((long)param_1 + lVar28);
              if (uVar10 != 2) {
                lVar28 = (long)iVar20;
                iVar20 = iVar15 + 3;
                    /* try { // try from 0026f844 to 0036f8ab has its CatchHandler @ 0026f6b8 */
                *(short *)((long)param_5 + lVar28 * 2) = (short)*(char *)((long)param_1 + lVar28);
                if (uVar10 != 3) {
                  lVar28 = (long)iVar20;
                  iVar20 = iVar15 + 4;
                  *(short *)((long)param_5 + lVar28 * 2) = (short)*(char *)((long)param_1 + lVar28);
                  if (uVar10 != 4) {
                    lVar28 = (long)iVar20;
                    iVar20 = iVar15 + 5;
                    *(short *)((long)param_5 + lVar28 * 2) =
                         (short)*(char *)((long)param_1 + lVar28);
                    if (uVar10 != 5) {
                      lVar28 = (long)iVar20;
                      iVar20 = iVar15 + 6;
                      *(short *)((long)param_5 + lVar28 * 2) =
                           (short)*(char *)((long)param_1 + lVar28);
                      if (uVar10 == 7) {
                        lVar28 = (long)iVar20;
                        iVar20 = iVar15 + 7;
                        *(short *)((long)param_5 + lVar28 * 2) =
                             (short)*(char *)((long)param_1 + lVar28);
                      }
                    }
                  }
                }
              }
            }
          }
                    /* try { // try from 0026f8ac to 0036f8c3 has its CatchHandler @ 0026f958 */
          uVar4 = ((uVar27 - uVar10) - 0x10 >> 4) + 1;
                    /* try { // try from 0026f8c4 to 0036f8ff has its CatchHandler @ 0026f960 */
          iVar15 = uVar4 * 0x10;
          if (0xe < (uVar27 - 1) - uVar10) {
            uVar31 = 0;
            puVar21 = (undefined8 *)((long)param_5 + lVar26 * 2 + (ulong)uVar10 * 2);
            puVar24 = (undefined8 *)((long)param_1 + lVar26 + (ulong)uVar10);
            do {
              uVar33 = puVar24[1];
              uVar32 = *puVar24;
              uVar31 = uVar31 + 1;
                    /* try { // try from 0026f900 to 0036f987 has its CatchHandler @ 0026f6b8 */
              puVar21[1] = CONCAT26((short)(char)((ulong)uVar32 >> 0x38),
                                    CONCAT24((short)(char)((ulong)uVar32 >> 0x30),
                                             CONCAT22((short)(char)((ulong)uVar32 >> 0x28),
                                                      (short)(char)((ulong)uVar32 >> 0x20))));
              *puVar21 = CONCAT26((short)(char)((ulong)uVar32 >> 0x18),
                                  CONCAT24((short)(char)((ulong)uVar32 >> 0x10),
                                           CONCAT22((short)(char)((ulong)uVar32 >> 8),
                                                    (short)(char)uVar32)));
              puVar21[3] = CONCAT26((short)(char)((ulong)uVar33 >> 0x38),
                                    CONCAT24((short)(char)((ulong)uVar33 >> 0x30),
                                             CONCAT22((short)(char)((ulong)uVar33 >> 0x28),
                                                      (short)(char)((ulong)uVar33 >> 0x20))));
              puVar21[2] = CONCAT26((short)(char)((ulong)uVar33 >> 0x18),
                                    CONCAT24((short)(char)((ulong)uVar33 >> 0x10),
                                             CONCAT22((short)(char)((ulong)uVar33 >> 8),
                                                      (short)(char)uVar33)));
              puVar21 = puVar21 + 4;
              puVar24 = puVar24 + 2;
            } while (uVar31 < uVar4);
            iVar20 = iVar20 + iVar15;
            if (uVar27 - uVar10 == iVar15) goto LAB_0026fa74;
          }
          iVar15 = iVar20 + 1;
          *(short *)((long)param_5 + (long)iVar20 * 2) =
               (short)*(char *)((long)param_1 + (long)iVar20);
          if (iVar15 < iVar11) {
            iVar5 = iVar20 + 2;
            *(short *)((long)param_5 + (long)iVar15 * 2) =
                 (short)*(char *)((long)param_1 + (long)iVar15);
            if (iVar5 < iVar11) {
              iVar15 = iVar20 + 3;
                    /* catch() { ... } // from try @ 0026f814 with catch @ 0026f954 */
                    /* catch() { ... } // from try @ 0026f8ac with catch @ 0026f958 */
              *(short *)((long)param_5 + (long)iVar5 * 2) =
                   (short)*(char *)((long)param_1 + (long)iVar5);
              if (iVar15 < iVar11) {
                    /* catch() { ... } // from try @ 0026f8c4 with catch @ 0026f960 */
                iVar5 = iVar20 + 4;
                *(short *)((long)param_5 + (long)iVar15 * 2) =
                     (short)*(char *)((long)param_1 + (long)iVar15);
                if (iVar5 < iVar11) {
                  iVar15 = iVar20 + 5;
                    /* try { // try from 0026f988 to 0036f98b has its CatchHandler @ 0026f994 */
                  *(short *)((long)param_5 + (long)iVar5 * 2) =
                       (short)*(char *)((long)param_1 + (long)iVar5);
                    /* try { // try from 0026f98c to 0036f9ab has its CatchHandler @ 0026f6b8 */
                  if (iVar15 < iVar11) {
                    /* catch() { ... } // from try @ 0026f988 with catch @ 0026f994 */
                    iVar5 = iVar20 + 6;
                    /* catch() { ... } // from try @ 0026f700 with catch @ 0026f998
                       catch() { ... } // from try @ 0026f7b4 with catch @ 0026f998 */
                    *(short *)((long)param_5 + (long)iVar15 * 2) =
                         (short)*(char *)((long)param_1 + (long)iVar15);
                    if (iVar5 < iVar11) {
                    /* try { // try from 0026f9ac to 0036facf has its CatchHandler @ 0026f9ac
                       catch() { ... } // from try @ 0026f9ac with catch @ 0026f9ac
                       catch() { ... } // from try @ 00270548 with catch @ 0026f9ac
                       catch() { ... } // from try @ 00270794 with catch @ 0026f9ac
                       catch() { ... } // from try @ 002708a0 with catch @ 0026f9ac */
                      iVar15 = iVar20 + 7;
                      *(short *)((long)param_5 + (long)iVar5 * 2) =
                           (short)*(char *)((long)param_1 + (long)iVar5);
                      if (iVar15 < iVar11) {
                        iVar5 = iVar20 + 8;
                        *(short *)((long)param_5 + (long)iVar15 * 2) =
                             (short)*(char *)((long)param_1 + (long)iVar15);
                        if (iVar5 < iVar11) {
                          iVar15 = iVar20 + 9;
                          *(short *)((long)param_5 + (long)iVar5 * 2) =
                               (short)*(char *)((long)param_1 + (long)iVar5);
                          if (iVar15 < iVar11) {
                            iVar5 = iVar20 + 10;
                            *(short *)((long)param_5 + (long)iVar15 * 2) =
                                 (short)*(char *)((long)param_1 + (long)iVar15);
                            if (iVar5 < iVar11) {
                              iVar15 = iVar20 + 0xb;
                              *(short *)((long)param_5 + (long)iVar5 * 2) =
                                   (short)*(char *)((long)param_1 + (long)iVar5);
                              if (iVar15 < iVar11) {
                                iVar5 = iVar20 + 0xc;
                                *(short *)((long)param_5 + (long)iVar15 * 2) =
                                     (short)*(char *)((long)param_1 + (long)iVar15);
                                if (iVar5 < iVar11) {
                                  iVar15 = iVar20 + 0xd;
                                  *(short *)((long)param_5 + (long)iVar5 * 2) =
                                       (short)*(char *)((long)param_1 + (long)iVar5);
                                  if (iVar15 < iVar11) {
                                    iVar20 = iVar20 + 0xe;
                                    *(short *)((long)param_5 + (long)iVar15 * 2) =
                                         (short)*(char *)((long)param_1 + (long)iVar15);
                                    if (iVar20 < iVar11) {
                                      *(short *)((long)param_5 + (long)iVar20 * 2) =
                                           (short)*(char *)((long)param_1 + (long)iVar20);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0026fa74:
      iVar29 = iVar29 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar29 != 0);
  }
  return;
}


==================================================================

### FUNC 0026fb24 (552 bytes) name=FUN_0026fb24

void FUN_0026fb24(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  char cVar8;
  undefined1 *puVar9;
  int iVar10;
  double *pdVar11;
  long lVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  
  dVar15 = *param_8;
  iVar10 = param_7[1];
  dVar16 = param_8[1];
  iVar1 = *param_7;
  if (iVar10 != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar12 = NEON_shl((long)iVar2,3);
    do {
      if (0 < iVar1 + -3) {
        dVar14 = (double)(float)dVar15;
        pdVar11 = (double *)(param_1 + 0x18);
        dVar13 = (double)(float)dVar16;
        puVar9 = param_5;
        do {
          lVar6 = lrint(ABS(dVar13 + dVar14 * pdVar11[-3]));
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(ABS(dVar13 + dVar14 * pdVar11[-2]));
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar9 = (char)uVar4;
          puVar9[1] = (char)uVar5;
          lVar6 = lrint(ABS(dVar13 + dVar14 * pdVar11[-1]));
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(ABS(dVar13 + dVar14 * *pdVar11));
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          pdVar11 = pdVar11 + 4;
          puVar9[2] = (char)uVar4;
          puVar9[3] = (char)uVar5;
          puVar9 = puVar9 + 4;
        } while (pdVar11 != (double *)(param_1 + (ulong)uVar3 * 0x20 + 0x38));
      }
      if (iVar2 < iVar1) {
        lVar6 = 0;
        do {
          lVar7 = lrint(ABS((double)(float)dVar16 +
                            (double)(float)dVar15 * *(double *)(param_1 + lVar12 + lVar6 * 8)));
          cVar8 = (char)lVar7;
          if (0xff < (uint)lVar7) {
            cVar8 = -(0 < (int)(uint)lVar7);
          }
          param_5[lVar6 + iVar2] = cVar8;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar10 = iVar10 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
      param_5 = param_5 + param_6;
    } while (iVar10 != 0);
  }
  return;
}


==================================================================

### FUNC 0026fd4c (532 bytes) name=FUN_0026fd4c

void FUN_0026fd4c(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  char cVar8;
  undefined1 *puVar9;
  int iVar10;
  double *pdVar11;
  long lVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  
  dVar15 = *param_8;
  iVar10 = param_7[1];
  dVar16 = param_8[1];
  iVar1 = *param_7;
  if (iVar10 != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar12 = NEON_shl((long)iVar2,3);
    do {
      if (0 < iVar1 + -3) {
        dVar14 = (double)(float)dVar15;
        pdVar11 = (double *)(param_1 + 0x18);
        dVar13 = (double)(float)dVar16;
        puVar9 = param_5;
        do {
          lVar6 = lrint(dVar13 + dVar14 * pdVar11[-3]);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
                    /* try { // try from 0026fe38 to 0036feb3 has its CatchHandler @ 002708a4 */
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(dVar13 + dVar14 * pdVar11[-2]);
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar9 = (char)uVar4;
          puVar9[1] = (char)uVar5;
          lVar6 = lrint(dVar13 + dVar14 * pdVar11[-1]);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(dVar13 + dVar14 * *pdVar11);
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          pdVar11 = pdVar11 + 4;
          puVar9[2] = (char)uVar4;
          puVar9[3] = (char)uVar5;
          puVar9 = puVar9 + 4;
        } while (pdVar11 != (double *)(param_1 + (ulong)uVar3 * 0x20 + 0x38));
      }
      if (iVar2 < iVar1) {
                    /* try { // try from 0026fec8 to 003700b3 has its CatchHandler @ 002708a8 */
        lVar6 = 0;
        do {
          lVar7 = lrint((double)(float)dVar16 +
                        (double)(float)dVar15 * *(double *)(param_1 + lVar12 + lVar6 * 8));
          cVar8 = (char)lVar7;
          if (0xff < (uint)lVar7) {
            cVar8 = -(0 < (int)(uint)lVar7);
          }
          param_5[lVar6 + iVar2] = cVar8;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar10 = iVar10 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
      param_5 = param_5 + param_6;
    } while (iVar10 != 0);
  }
  return;
}


==================================================================

### FUNC 0026ff60 (576 bytes) name=FUN_0026ff60

void FUN_0026ff60(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  undefined1 uVar6;
  undefined1 *puVar7;
  undefined1 uVar8;
  undefined1 uVar9;
  int iVar10;
  double *pdVar11;
  undefined1 uVar12;
  long lVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  
  dVar17 = *param_8;
  iVar10 = param_7[1];
  iVar1 = *param_7;
  dVar18 = param_8[1];
  if (iVar10 != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar13 = NEON_shl((long)iVar2,3);
    do {
      uVar8 = 0x80;
      uVar9 = 0x7f;
      if (0 < iVar1 + -3) {
        dVar16 = (double)(float)dVar17;
        pdVar11 = (double *)(param_1 + 0x18);
        dVar15 = (double)(float)dVar18;
        puVar7 = param_5;
        do {
          lVar4 = lrint(dVar15 + dVar16 * pdVar11[-3]);
          uVar12 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar12 = uVar9, (int)lVar4 < 1)) {
            uVar12 = uVar8;
          }
          lVar4 = lrint(dVar15 + dVar16 * pdVar11[-2]);
          uVar6 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar6 = uVar9, (int)lVar4 < 1)) {
            uVar6 = uVar8;
          }
          *puVar7 = uVar12;
          puVar7[1] = uVar6;
          lVar4 = lrint(dVar15 + dVar16 * pdVar11[-1]);
          uVar12 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar12 = 0x7f, (int)lVar4 < 1)) {
            uVar12 = 0x80;
          }
          dVar14 = *pdVar11;
          pdVar11 = pdVar11 + 4;
          lVar4 = lrint(dVar15 + dVar16 * dVar14);
          uVar6 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar6 = 0x7f, (int)lVar4 < 1)) {
            uVar6 = 0x80;
          }
          puVar7[2] = uVar12;
                    /* try { // try from 002700e8 to 003700fb has its CatchHandler @ 002708b0 */
          puVar7[3] = uVar6;
          puVar7 = puVar7 + 4;
        } while (pdVar11 != (double *)(param_1 + (ulong)uVar3 * 0x20 + 0x38));
      }
      if (iVar2 < iVar1) {
        lVar4 = 0;
                    /* try { // try from 00270118 to 00370547 has its CatchHandler @ 002708b4 */
        do {
          lVar5 = lrint((double)(float)dVar18 +
                        (double)(float)dVar17 * *(double *)(param_1 + lVar13 + lVar4 * 8));
          uVar12 = (char)lVar5;
          if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = uVar9, (int)lVar5 < 1)) {
            uVar12 = uVar8;
          }
          param_5[lVar4 + iVar2] = uVar12;
          lVar4 = lVar4 + 1;
        } while (lVar4 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar10 = iVar10 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
      param_5 = param_5 + param_6;
    } while (iVar10 != 0);
  }
  return;
}


==================================================================

### FUNC 002701a0 (548 bytes) name=FUN_002701a0

void FUN_002701a0(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  undefined2 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  long lVar8;
  short sVar9;
  undefined2 *puVar10;
  int iVar11;
  double *pdVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  
  dVar16 = *param_8;
  iVar11 = param_7[1];
  dVar17 = param_8[1];
  iVar2 = *param_7;
  if (iVar11 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      if (0 < iVar2 + -3) {
        dVar15 = (double)(float)dVar16;
        dVar14 = (double)(float)dVar17;
        puVar10 = (undefined2 *)(param_5 + 4);
        pdVar12 = param_1;
        do {
          lVar7 = lrint(dVar14 + dVar15 * *pdVar12);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar7 = lrint(dVar14 + dVar15 * pdVar12[1]);
          uVar6 = (uint)lVar7;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          dVar13 = pdVar12[2];
          puVar10[-2] = (short)uVar5;
          puVar10[-1] = (short)uVar6;
          lVar7 = lrint(dVar14 + dVar15 * dVar13);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar7 = lrint(dVar14 + dVar15 * pdVar12[3]);
          uVar6 = (uint)lVar7;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          *puVar10 = (short)uVar5;
          puVar1 = puVar10 + 4;
          pdVar12 = pdVar12 + 4;
          puVar10[1] = (short)uVar6;
          puVar10 = puVar1;
        } while (puVar1 != (undefined2 *)(param_5 + (ulong)uVar4 * 8 + 0xc));
      }
      if (iVar3 < iVar2) {
        lVar7 = 0;
        do {
          lVar8 = lrint((double)(float)dVar17 + (double)(float)dVar16 * param_1[iVar3 + lVar7]);
          sVar9 = (short)lVar8;
          if (0xffff < (uint)lVar8) {
            sVar9 = -(ushort)(0 < (int)(uint)lVar8);
          }
          *(short *)(param_5 + (long)iVar3 * 2 + lVar7 * 2) = sVar9;
          lVar7 = lVar7 + 1;
        } while (lVar7 != (ulong)(uint)((iVar2 + -1) - iVar3) + 1);
      }
      iVar11 = iVar11 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
    } while (iVar11 != 0);
  }
  return;
}


==================================================================

### FUNC 002703c4 (596 bytes) name=FUN_002703c4

void FUN_002703c4(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  double *pdVar1;
  undefined2 *puVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  undefined2 uVar8;
  undefined2 *puVar9;
  undefined2 uVar10;
  undefined2 uVar11;
  undefined2 uVar12;
  double *pdVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  int iVar19;
  
  dVar17 = *param_8;
  iVar19 = param_7[1];
  iVar3 = *param_7;
  dVar18 = param_8[1];
  if (iVar19 != 0) {
    uVar5 = iVar3 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar4 = 0;
    }
    do {
      uVar10 = 0x8000;
      uVar11 = 0x7fff;
      if (0 < iVar3 + -3) {
        dVar16 = (double)(float)dVar17;
        dVar15 = (double)(float)dVar18;
        puVar9 = (undefined2 *)(param_5 + 4);
        pdVar13 = param_1;
        do {
          lVar6 = lrint(dVar15 + dVar16 * *pdVar13);
          uVar12 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar12 = uVar11, (int)lVar6 < 1)) {
            uVar12 = uVar10;
          }
          lVar6 = lrint(dVar15 + dVar16 * pdVar13[1]);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = uVar11, (int)lVar6 < 1)) {
            uVar8 = uVar10;
          }
          dVar14 = pdVar13[2];
          puVar9[-2] = uVar12;
          puVar9[-1] = uVar8;
          lVar6 = lrint(dVar15 + dVar16 * dVar14);
          uVar12 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar12 = 0x7fff, (int)lVar6 < 1)) {
            uVar12 = 0x8000;
          }
          pdVar1 = pdVar13 + 3;
          pdVar13 = pdVar13 + 4;
          lVar6 = lrint(dVar15 + dVar16 * *pdVar1);
                    /* try { // try from 00270548 to 0037078b has its CatchHandler @ 0026f9ac */
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar6 < 1)) {
            uVar8 = 0x8000;
          }
          *puVar9 = uVar12;
          puVar2 = puVar9 + 4;
          puVar9[1] = uVar8;
          puVar9 = puVar2;
        } while (puVar2 != (undefined2 *)(param_5 + (ulong)uVar5 * 8 + 0xc));
      }
      if (iVar4 < iVar3) {
        lVar6 = 0;
        do {
          lVar7 = lrint((double)(float)dVar18 + (double)(float)dVar17 * param_1[iVar4 + lVar6]);
          uVar12 = (short)lVar7;
          if ((0xffff < (int)lVar7 + 0x8000U) && (uVar12 = uVar11, (int)lVar7 < 1)) {
            uVar12 = uVar10;
          }
          *(undefined2 *)(param_5 + (long)iVar4 * 2 + lVar6 * 2) = uVar12;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar3 + -1) - iVar4) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 00270618 (424 bytes) name=FUN_00270618

void FUN_00270618(int *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  undefined4 *puVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  undefined4 *puVar7;
  int *piVar8;
  int iVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  
  iVar9 = param_7[1];
  iVar2 = *param_7;
  dVar11 = *param_8;
  dVar12 = param_8[1];
  if (iVar9 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    uVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      uVar3 = 0;
    }
    uVar10 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    do {
      if (0 < iVar2 + -3) {
        puVar7 = (undefined4 *)(param_5 + 4);
        piVar8 = param_1;
        do {
          puVar1 = puVar7 + 4;
          lVar5 = lrint(dVar12 + (double)*piVar8 * dVar11);
          lVar6 = lrint(dVar12 + (double)piVar8[1] * dVar11);
          puVar7[-1] = (int)lVar5;
          *puVar7 = (int)lVar6;
          lVar5 = lrint(dVar12 + (double)piVar8[2] * dVar11);
          lVar6 = lrint(dVar12 + (double)piVar8[3] * dVar11);
          puVar7[1] = (int)lVar5;
          puVar7[2] = (int)lVar6;
          puVar7 = puVar1;
          piVar8 = piVar8 + 4;
        } while (puVar1 != (undefined4 *)(param_5 + (ulong)uVar4 * 0x10 + 0x14));
      }
      if ((int)uVar3 < iVar2) {
        lVar5 = 0;
        do {
          lVar6 = lrint(dVar12 + (double)*(int *)((long)param_1 + lVar5 + uVar10) * dVar11);
          *(int *)(param_5 + uVar10 + lVar5) = (int)lVar6;
          lVar5 = lVar5 + 4;
        } while (lVar5 != ((ulong)((iVar2 + -1) - uVar3) + 1) * 4);
      }
      iVar9 = iVar9 + -1;
      param_1 = (int *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
                    /* try { // try from 0027078c to 00370793 has its CatchHandler @ 002708a8 */
    } while (iVar9 != 0);
  }
                    /* try { // try from 00270794 to 0037089b has its CatchHandler @ 0026f9ac */
  return;
}


==================================================================

### FUNC 002707c0 (416 bytes) name=FUN_002707c0

void FUN_002707c0(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  undefined4 *puVar7;
  double *pdVar8;
  int iVar9;
  double dVar10;
  double dVar11;
  double dVar12;
  
  dVar11 = *param_8;
  iVar9 = param_7[1];
  iVar2 = *param_7;
  dVar12 = param_8[1];
  if (iVar9 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      if (0 < iVar2 + -3) {
        puVar7 = (undefined4 *)(param_5 + 4);
        pdVar8 = param_1;
        do {
          puVar1 = puVar7 + 4;
          lVar5 = lrint(dVar12 + *pdVar8 * dVar11);
                    /* try { // try from 0027089c to 0037089f has its CatchHandler @ 002708a0 */
                    /* catch() { ... } // from try @ 0027089c with catch @ 002708a0
                       try { // try from 002708a0 to 003708c7 has its CatchHandler @ 0026f9ac */
                    /* catch() { ... } // from try @ 0026fe38 with catch @ 002708a4 */
                    /* catch() { ... } // from try @ 0026fec8 with catch @ 002708a8
                       catch() { ... } // from try @ 0027078c with catch @ 002708a8 */
          lVar6 = lrint(dVar12 + pdVar8[1] * dVar11);
                    /* catch() { ... } // from try @ 0026fad0 with catch @ 002708ac */
          puVar7[-1] = (int)lVar5;
                    /* catch() { ... } // from try @ 002700e8 with catch @ 002708b0 */
          dVar10 = pdVar8[2];
                    /* catch() { ... } // from try @ 00270118 with catch @ 002708b4 */
          *puVar7 = (int)lVar6;
          lVar5 = lrint(dVar12 + dVar10 * dVar11);
                    /* try { // try from 002708c8 to 0037090f has its CatchHandler @ 002708c8
                       catch() { ... } // from try @ 002708c8 with catch @ 002708c8
                       catch() { ... } // from try @ 00270af0 with catch @ 002708c8
                       catch() { ... } // from try @ 00270c50 with catch @ 002708c8
                       catch() { ... } // from try @ 00270c98 with catch @ 002708c8 */
          lVar6 = lrint(dVar12 + pdVar8[3] * dVar11);
          puVar7[1] = (int)lVar5;
          puVar7[2] = (int)lVar6;
          puVar7 = puVar1;
          pdVar8 = pdVar8 + 4;
        } while (puVar1 != (undefined4 *)(param_5 + (ulong)uVar4 * 0x10 + 0x14));
      }
      if (iVar3 < iVar2) {
        lVar5 = 0;
        do {
          lVar6 = lrint(dVar12 + param_1[iVar3 + lVar5] * dVar11);
          *(int *)(param_5 + (long)iVar3 * 4 + lVar5 * 4) = (int)lVar6;
          lVar5 = lVar5 + 1;
                    /* try { // try from 00270910 to 00370aef has its CatchHandler @ 00270ca0 */
        } while (lVar5 != (ulong)(uint)((iVar2 + -1) - iVar3) + 1);
      }
      iVar9 = iVar9 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar9 != 0);
  }
  return;
}


==================================================================

### FUNC 00270960 (468 bytes) name=FUN_00270960

void FUN_00270960(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 *param_5,long param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  char cVar8;
  double *pdVar9;
  undefined1 *puVar10;
  int iVar11;
  long lVar12;
  
  iVar11 = param_7[1];
  iVar1 = *param_7;
  if (iVar11 != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar12 = NEON_shl((long)iVar2,3);
    do {
      if (0 < iVar1 + -3) {
        pdVar9 = (double *)(param_1 + 0x18);
        puVar10 = param_5;
        do {
          lVar6 = lrint(pdVar9[-3]);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(pdVar9[-2]);
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar10 = (char)uVar4;
          puVar10[1] = (char)uVar5;
          lVar6 = lrint(pdVar9[-1]);
          uVar4 = (uint)lVar6;
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          lVar6 = lrint(*pdVar9);
          uVar5 = (uint)lVar6;
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          pdVar9 = pdVar9 + 4;
          puVar10[2] = (char)uVar4;
          puVar10[3] = (char)uVar5;
          puVar10 = puVar10 + 4;
        } while (pdVar9 != (double *)(param_1 + (ulong)uVar3 * 0x20 + 0x38));
      }
      if (iVar2 < iVar1) {
        lVar6 = 0;
        do {
          lVar7 = lrint(*(double *)(param_1 + lVar12 + lVar6 * 8));
          cVar8 = (char)lVar7;
          if (0xff < (uint)lVar7) {
            cVar8 = -(0 < (int)(uint)lVar7);
          }
          param_5[lVar6 + iVar2] = cVar8;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
                    /* try { // try from 00270af0 to 00370aff has its CatchHandler @ 002708c8 */
      iVar11 = iVar11 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
                    /* try { // try from 00270b00 to 00370b17 has its CatchHandler @ 00270ca0 */
      param_5 = param_5 + param_6;
    } while (iVar11 != 0);
  }
                    /* try { // try from 00270b1c to 00370b4b has its CatchHandler @ 00270c60 */
  return;
}


==================================================================

### FUNC 00270b34 (520 bytes) name=FUN_00270b34

void FUN_00270b34(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined1 *param_5,long param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  undefined1 uVar6;
  double *pdVar7;
  undefined1 *puVar8;
  undefined1 uVar9;
  undefined1 uVar10;
  int iVar11;
  undefined1 uVar12;
  long lVar13;
  double __x;
  
                    /* try { // try from 00270b4c to 00370b63 has its CatchHandler @ 00270c64 */
  iVar11 = param_7[1];
  iVar1 = *param_7;
                    /* try { // try from 00270b64 to 00370bcb has its CatchHandler @ 00270c6c */
  if (iVar11 != 0) {
    uVar3 = iVar1 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    if (iVar1 + -3 < 1) {
      iVar2 = 0;
    }
    lVar13 = NEON_shl((long)iVar2,3);
    do {
      uVar9 = 0x80;
      uVar10 = 0x7f;
      if (0 < iVar1 + -3) {
        pdVar7 = (double *)(param_1 + 0x18);
        puVar8 = param_5;
        do {
          lVar4 = lrint(pdVar7[-3]);
          uVar12 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar12 = uVar10, (int)lVar4 < 1)) {
            uVar12 = uVar9;
          }
          lVar4 = lrint(pdVar7[-2]);
          uVar6 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar6 = uVar10, (int)lVar4 < 1)) {
            uVar6 = uVar9;
          }
          *puVar8 = uVar12;
          puVar8[1] = uVar6;
                    /* try { // try from 00270c48 to 00370c4f has its CatchHandler @ 00270ca0 */
          lVar4 = lrint(pdVar7[-1]);
                    /* try { // try from 00270c50 to 00370c93 has its CatchHandler @ 002708c8 */
          uVar12 = (char)lVar4;
                    /* catch() { ... } // from try @ 00270b1c with catch @ 00270c60 */
                    /* catch() { ... } // from try @ 00270b4c with catch @ 00270c64 */
          if ((0xff < (int)lVar4 + 0x80U) && (uVar12 = 0x7f, (int)lVar4 < 1)) {
            uVar12 = 0x80;
          }
          __x = *pdVar7;
                    /* catch() { ... } // from try @ 00270b64 with catch @ 00270c6c */
          pdVar7 = pdVar7 + 4;
          lVar4 = lrint(__x);
          uVar6 = (char)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar6 = 0x7f, (int)lVar4 < 1)) {
            uVar6 = 0x80;
          }
          puVar8[2] = uVar12;
                    /* try { // try from 00270c94 to 00370c97 has its CatchHandler @ 00270ca0 */
          puVar8[3] = uVar6;
                    /* try { // try from 00270c98 to 00370cb3 has its CatchHandler @ 002708c8 */
          puVar8 = puVar8 + 4;
        } while (pdVar7 != (double *)(param_1 + (ulong)uVar3 * 0x20 + 0x38));
      }
                    /* catch() { ... } // from try @ 00270910 with catch @ 00270ca0
                       catch() { ... } // from try @ 00270b00 with catch @ 00270ca0
                       catch() { ... } // from try @ 00270c48 with catch @ 00270ca0
                       catch() { ... } // from try @ 00270c94 with catch @ 00270ca0 */
      if (iVar2 < iVar1) {
        lVar4 = 0;
        do {
          lVar5 = lrint(*(double *)(param_1 + lVar13 + lVar4 * 8));
          uVar12 = (char)lVar5;
          if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = uVar10, (int)lVar5 < 1)) {
            uVar12 = uVar9;
          }
          param_5[lVar4 + iVar2] = uVar12;
          lVar4 = lVar4 + 1;
        } while (lVar4 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar11 = iVar11 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffff8);
      param_5 = param_5 + param_6;
    } while (iVar11 != 0);
  }
  return;
}


==================================================================

### FUNC 00270d3c (496 bytes) name=FUN_00270d3c

void FUN_00270d3c(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7)

{
  undefined2 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  long lVar8;
  short sVar9;
  undefined2 *puVar10;
  double *pdVar11;
  int iVar12;
  double __x;
  
  iVar12 = param_7[1];
  iVar2 = *param_7;
  if (iVar12 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      if (0 < iVar2 + -3) {
        puVar10 = (undefined2 *)(param_5 + 4);
        pdVar11 = param_1;
        do {
          lVar7 = lrint(*pdVar11);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar7 = lrint(pdVar11[1]);
          uVar6 = (uint)lVar7;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          __x = pdVar11[2];
          puVar10[-2] = (short)uVar5;
          puVar10[-1] = (short)uVar6;
          lVar7 = lrint(__x);
          uVar5 = (uint)lVar7;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          lVar7 = lrint(pdVar11[3]);
          uVar6 = (uint)lVar7;
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          *puVar10 = (short)uVar5;
          puVar1 = puVar10 + 4;
          pdVar11 = pdVar11 + 4;
          puVar10[1] = (short)uVar6;
          puVar10 = puVar1;
        } while (puVar1 != (undefined2 *)(param_5 + (ulong)uVar4 * 8 + 0xc));
      }
      if (iVar3 < iVar2) {
        lVar7 = 0;
        do {
          lVar8 = lrint(param_1[iVar3 + lVar7]);
          sVar9 = (short)lVar8;
          if (0xffff < (uint)lVar8) {
            sVar9 = -(ushort)(0 < (int)(uint)lVar8);
          }
          *(short *)(param_5 + (long)iVar3 * 2 + lVar7 * 2) = sVar9;
          lVar7 = lVar7 + 1;
        } while (lVar7 != (ulong)(uint)((iVar2 + -1) - iVar3) + 1);
      }
      iVar12 = iVar12 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
    } while (iVar12 != 0);
  }
  return;
}


==================================================================

### FUNC 00270f2c (544 bytes) name=FUN_00270f2c

void FUN_00270f2c(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7)

{
  double *pdVar1;
  undefined2 *puVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  undefined2 uVar8;
  undefined2 *puVar9;
  double *pdVar10;
  undefined2 uVar11;
  undefined2 uVar12;
  undefined2 uVar13;
  double __x;
  int iVar14;
  
  iVar14 = param_7[1];
  iVar3 = *param_7;
  if (iVar14 != 0) {
    uVar5 = iVar3 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar4 = 0;
    }
    do {
      uVar11 = 0x8000;
      uVar12 = 0x7fff;
      if (0 < iVar3 + -3) {
        puVar9 = (undefined2 *)(param_5 + 4);
        pdVar10 = param_1;
        do {
          lVar6 = lrint(*pdVar10);
          uVar13 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar13 = uVar12, (int)lVar6 < 1)) {
            uVar13 = uVar11;
          }
          lVar6 = lrint(pdVar10[1]);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = uVar12, (int)lVar6 < 1)) {
            uVar8 = uVar11;
          }
          __x = pdVar10[2];
          puVar9[-2] = uVar13;
          puVar9[-1] = uVar8;
          lVar6 = lrint(__x);
          uVar13 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar13 = 0x7fff, (int)lVar6 < 1)) {
            uVar13 = 0x8000;
          }
          pdVar1 = pdVar10 + 3;
          pdVar10 = pdVar10 + 4;
          lVar6 = lrint(*pdVar1);
          uVar8 = (short)lVar6;
          if ((0xffff < (int)lVar6 + 0x8000U) && (uVar8 = 0x7fff, (int)lVar6 < 1)) {
            uVar8 = 0x8000;
          }
          *puVar9 = uVar13;
          puVar2 = puVar9 + 4;
          puVar9[1] = uVar8;
          puVar9 = puVar2;
        } while (puVar2 != (undefined2 *)(param_5 + (ulong)uVar5 * 8 + 0xc));
      }
      if (iVar4 < iVar3) {
        lVar6 = 0;
        do {
          lVar7 = lrint(param_1[iVar4 + lVar6]);
          uVar13 = (short)lVar7;
          if ((0xffff < (int)lVar7 + 0x8000U) && (uVar13 = uVar12, (int)lVar7 < 1)) {
            uVar13 = uVar11;
          }
          *(undefined2 *)(param_5 + (long)iVar4 * 2 + lVar6 * 2) = uVar13;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar3 + -1) - iVar4) + 1);
      }
      iVar14 = iVar14 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffe);
    } while (iVar14 != 0);
  }
  return;
}


==================================================================

### FUNC 0027114c (380 bytes) name=FUN_0027114c

void FUN_0027114c(double *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  undefined4 *puVar7;
  double *pdVar8;
  int iVar9;
  double __x;
  
  iVar9 = param_7[1];
  iVar2 = *param_7;
  if (iVar9 != 0) {
    uVar4 = iVar2 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar3 = 0;
    }
    do {
      if (0 < iVar2 + -3) {
        puVar7 = (undefined4 *)(param_5 + 4);
        pdVar8 = param_1;
        do {
          puVar1 = puVar7 + 4;
          lVar5 = lrint(*pdVar8);
          lVar6 = lrint(pdVar8[1]);
          puVar7[-1] = (int)lVar5;
          __x = pdVar8[2];
          *puVar7 = (int)lVar6;
          lVar5 = lrint(__x);
          lVar6 = lrint(pdVar8[3]);
          puVar7[1] = (int)lVar5;
          puVar7[2] = (int)lVar6;
          puVar7 = puVar1;
          pdVar8 = pdVar8 + 4;
        } while (puVar1 != (undefined4 *)(param_5 + (ulong)uVar4 * 0x10 + 0x14));
      }
      if (iVar3 < iVar2) {
        lVar5 = 0;
        do {
          lVar6 = lrint(param_1[iVar3 + lVar5]);
          *(int *)(param_5 + (long)iVar3 * 4 + lVar5 * 4) = (int)lVar6;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (ulong)(uint)((iVar2 + -1) - iVar3) + 1);
      }
      iVar9 = iVar9 + -1;
      param_1 = (double *)((long)param_1 + (param_2 & 0xfffffffffffffff8));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar9 != 0);
  }
  return;
}


==================================================================

### FUNC 002712c8 (596 bytes) name=FUN_002712c8

void FUN_002712c8(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  long lVar12;
  undefined8 *puVar13;
  ulong uVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  ulong uVar20;
  ulong uVar21;
  uint uVar22;
  undefined8 uVar23;
  float fVar24;
  float fVar25;
  
  iVar16 = param_7[1];
  iVar5 = *param_7;
  fVar24 = (float)*param_8;
  fVar25 = (float)param_8[1];
  if (iVar16 != 0) {
    uVar8 = iVar5 - 4U >> 2;
    uVar6 = (uVar8 + 1) * 4;
    if (iVar5 + -3 < 1) {
      uVar6 = 0;
    }
    uVar1 = uVar6 + 1;
    uVar9 = iVar5 - uVar6;
    uVar2 = uVar6 + 2;
    lVar18 = ((long)(int)uVar6 + 4) * 4;
    lVar19 = (long)(int)uVar6 * 4;
    uVar21 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    lVar17 = lVar18 + -0x10;
    do {
      if (0 < iVar5 + -3) {
        puVar11 = param_1;
        puVar13 = param_5;
        do {
          puVar10 = puVar11 + 2;
          uVar23 = *puVar11;
          puVar13[1] = CONCAT44(fVar25 + fVar24 * (float)((ulong)puVar11[1] >> 0x20),
                                fVar25 + fVar24 * (float)puVar11[1]);
          *puVar13 = CONCAT44(fVar25 + fVar24 * (float)((ulong)uVar23 >> 0x20),
                              fVar25 + fVar24 * (float)uVar23);
          puVar11 = puVar10;
          puVar13 = puVar13 + 2;
        } while (puVar10 != param_1 + ((ulong)uVar8 + 1) * 2);
      }
      if ((int)uVar6 < iVar5) {
        uVar14 = (long)param_1 + lVar17;
        if ((uVar14 < (ulong)((long)param_5 + lVar18) &&
             (ulong)((long)param_5 + lVar17) < (ulong)((long)param_1 + lVar18)) || (uVar9 < 9)) {
          lVar12 = 0;
          do {
            *(float *)((long)param_5 + lVar17 + lVar12) =
                 fVar25 + *(float *)(uVar14 + lVar12) * fVar24;
            lVar12 = lVar12 + 4;
          } while (lVar12 != ((ulong)((iVar5 + -1) - uVar6) + 1) * 4);
        }
        else {
          uVar22 = -((uint)(uVar14 >> 2) & 3) & 3;
          uVar4 = uVar9;
          if (uVar22 < uVar9) {
            uVar4 = uVar22;
          }
          uVar22 = uVar6;
          if (((uVar4 != 0) &&
              (*(float *)((long)param_5 + lVar19) =
                    fVar25 + *(float *)((long)param_1 + lVar19) * fVar24, uVar22 = uVar1, uVar4 != 1
              )) && (*(float *)((long)param_5 + uVar21) =
                          fVar25 + *(float *)((long)param_1 + uVar21) * fVar24, uVar22 = uVar2,
                    uVar4 == 3)) {
            *(float *)((long)param_5 + uVar20) =
                 fVar25 + *(float *)((long)param_1 + uVar20) * fVar24;
            uVar22 = uVar6 + 3;
          }
          uVar15 = 0;
          lVar12 = lVar17 + (ulong)uVar4 * 4;
          uVar3 = ((uVar9 - uVar4) - 4 >> 2) + 1;
          iVar7 = uVar3 * 4;
          puVar11 = (undefined8 *)((long)param_5 + lVar12);
          puVar13 = (undefined8 *)((long)param_1 + lVar12);
          do {
            uVar23 = *puVar13;
            uVar15 = uVar15 + 1;
            puVar11[1] = CONCAT44(fVar25 + fVar24 * (float)((ulong)puVar13[1] >> 0x20),
                                  fVar25 + fVar24 * (float)puVar13[1]);
            *puVar11 = CONCAT44(fVar25 + fVar24 * (float)((ulong)uVar23 >> 0x20),
                                fVar25 + fVar24 * (float)uVar23);
            puVar11 = puVar11 + 2;
            puVar13 = puVar13 + 2;
          } while (uVar15 < uVar3);
          uVar22 = uVar22 + iVar7;
          if (uVar9 - uVar4 != iVar7) {
            uVar14 = -(ulong)(uVar22 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar22 << 2;
            *(float *)((long)param_5 + uVar14) =
                 fVar25 + *(float *)((long)param_1 + uVar14) * fVar24;
            if (((int)(uVar22 + 1) < iVar5) &&
               (*(float *)((long)param_5 + uVar14 + 4) =
                     fVar25 + *(float *)((long)param_1 + uVar14 + 4) * fVar24,
               (int)(uVar22 + 2) < iVar5)) {
              *(float *)((long)param_5 + uVar14 + 8) =
                   fVar25 + *(float *)((long)param_1 + uVar14 + 8) * fVar24;
            }
          }
        }
      }
      iVar16 = iVar16 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar16 != 0);
  }
  return;
}


==================================================================

### FUNC 0027151c (1388 bytes) name=FUN_0027151c

void FUN_0027151c(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 ulong *param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  ushort *puVar8;
  uint uVar9;
  int iVar10;
  byte bVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ulong *puVar19;
  ulong *puVar20;
  byte *pbVar21;
  undefined8 *puVar22;
  long lVar23;
  uint uVar24;
  long lVar25;
  int iVar26;
  long lVar27;
  uint uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  
  iVar26 = param_7[1];
  iVar10 = *param_7;
  if (iVar26 != 0) {
    uVar14 = iVar10 - 8U >> 3;
    iVar12 = (uVar14 + 1) * 8;
    if (iVar10 + -7 < 1) {
      iVar12 = 0;
    }
    uVar17 = (iVar10 + -4) - iVar12;
    uVar15 = uVar17 >> 2;
    lVar27 = (long)iVar12;
    uVar2 = uVar15 + 1;
    uVar3 = (uVar15 - 3 >> 2) + 1;
    lVar1 = lVar27 + (ulong)uVar2 * 4;
    iVar16 = iVar10 + -3;
    iVar7 = iVar12 + 4 + uVar15 * 4;
    do {
      if (0 < iVar10 + -7) {
        puVar19 = param_5;
        puVar22 = param_1;
        do {
          uVar29 = *puVar22;
          puVar20 = puVar19 + 2;
          puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                       (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                       (uint)CONCAT12((char)((ulong)uVar29 >> 0x28),
                                                                      (ushort)(byte)((ulong)uVar29
                                                                                    >> 0x20))));
          *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                     (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                     (uint)(CONCAT12((char)((ulong)uVar29 >> 8),
                                                                     (short)uVar29) & 0xff00ff)));
          puVar19 = puVar20;
          puVar22 = puVar22 + 1;
        } while (puVar20 != param_5 + ((ulong)uVar14 + 1) * 2);
      }
      iVar13 = iVar12;
      if (iVar12 < iVar16) {
        puVar19 = (ulong *)((long)param_5 + lVar27 * 2);
        pbVar21 = (byte *)((long)param_1 + lVar27);
        iVar13 = iVar7;
        if ((puVar19 < (ulong *)((long)param_1 + lVar1) &&
             pbVar21 < (byte *)((long)param_5 + lVar1 * 2)) || (uVar2 < 5)) {
          do {
            bVar11 = pbVar21[1];
            pbVar6 = pbVar21 + 4;
            *(ushort *)puVar19 = (ushort)*pbVar21;
            *(ushort *)((long)puVar19 + 2) = (ushort)bVar11;
            bVar11 = pbVar21[3];
            *(ushort *)((long)puVar19 + 4) = (ushort)pbVar21[2];
            *(ushort *)((long)puVar19 + 6) = (ushort)bVar11;
            pbVar21 = pbVar6;
            puVar19 = puVar19 + 1;
          } while (pbVar6 != (byte *)((long)param_1 + lVar27 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar18 = iVar12;
          if (0xb < uVar17) {
            uVar24 = 0;
            do {
              uVar30 = *(undefined8 *)(pbVar21 + 8);
              uVar29 = *(undefined8 *)pbVar21;
              uVar24 = uVar24 + 1;
              puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar29 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar29 >> 0x20))));
              *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                         (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                         (uint)CONCAT12((char)((ulong)uVar29 >> 8),
                                                                        (ushort)(byte)uVar29)));
              puVar19[3] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar30 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar30 >> 0x20))));
              puVar19[2] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x18),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x10),
                                                           (uint)(CONCAT12((char)((ulong)uVar30 >> 8
                                                                                 ),(short)uVar30) &
                                                                 0xff00ff)));
              pbVar21 = pbVar21 + 0x10;
              puVar19 = puVar19 + 4;
            } while (uVar24 < uVar3);
            iVar18 = iVar12 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00271710;
          }
          lVar23 = (long)iVar18;
          lVar25 = lVar23 * 2;
          bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
          *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
          *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
          bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
          *(ushort *)((long)param_5 + lVar25 + 4) = (ushort)*(byte *)((long)param_1 + lVar23 + 2);
          *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
          if (iVar18 + 4 < iVar16) {
            lVar23 = (long)(iVar18 + 4);
            lVar25 = lVar23 * 2;
            bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
            *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
            *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
            bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
            *(ushort *)((long)param_5 + lVar25 + 4) = (ushort)*(byte *)((long)param_1 + lVar23 + 2);
            *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
            if (iVar18 + 8 < iVar16) {
              lVar23 = (long)(iVar18 + 8);
              lVar25 = lVar23 * 2;
              bVar11 = *(byte *)((long)param_1 + lVar23 + 1);
              *(ushort *)((long)param_5 + lVar25) = (ushort)*(byte *)((long)param_1 + lVar23);
              *(ushort *)((long)param_5 + lVar25 + 2) = (ushort)bVar11;
              bVar11 = *(byte *)((long)param_1 + lVar23 + 3);
              *(ushort *)((long)param_5 + lVar25 + 4) =
                   (ushort)*(byte *)((long)param_1 + lVar23 + 2);
              *(ushort *)((long)param_5 + lVar25 + 6) = (ushort)bVar11;
            }
          }
        }
      }
LAB_00271710:
      if (iVar13 < iVar10) {
        lVar23 = (long)iVar13;
        uVar24 = iVar10 - iVar13;
        pbVar21 = (byte *)((long)param_1 + lVar23);
        puVar8 = (ushort *)((long)param_5 + lVar23 * 2);
        if ((pbVar21 < (byte *)((long)param_5 + (lVar23 + (ulong)uVar24) * 2) &&
             puVar8 < (ushort *)((long)param_1 + lVar23 + (ulong)uVar24)) || (uVar24 < 0x15)) {
          lVar23 = 0;
          do {
            puVar8[lVar23] = (ushort)pbVar21[lVar23];
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar10 + -1) - iVar13) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)puVar8 >> 1) & 7) & 7;
          if (uVar24 < uVar9) {
            uVar9 = uVar24;
          }
          iVar18 = iVar13;
          if (uVar9 != 0) {
            *puVar8 = (ushort)*pbVar21;
            iVar18 = iVar13 + 1;
            if (uVar9 != 1) {
              lVar25 = (long)iVar18;
              iVar18 = iVar13 + 2;
              *(ushort *)((long)param_5 + lVar25 * 2) = (ushort)*(byte *)((long)param_1 + lVar25);
              if (uVar9 != 2) {
                lVar25 = (long)iVar18;
                iVar18 = iVar13 + 3;
                *(ushort *)((long)param_5 + lVar25 * 2) = (ushort)*(byte *)((long)param_1 + lVar25);
                if (uVar9 != 3) {
                  lVar25 = (long)iVar18;
                  iVar18 = iVar13 + 4;
                  *(ushort *)((long)param_5 + lVar25 * 2) =
                       (ushort)*(byte *)((long)param_1 + lVar25);
                  if (uVar9 != 4) {
                    lVar25 = (long)iVar18;
                    iVar18 = iVar13 + 5;
                    *(ushort *)((long)param_5 + lVar25 * 2) =
                         (ushort)*(byte *)((long)param_1 + lVar25);
                    if (uVar9 != 5) {
                      lVar25 = (long)iVar18;
                      iVar18 = iVar13 + 6;
                      *(ushort *)((long)param_5 + lVar25 * 2) =
                           (ushort)*(byte *)((long)param_1 + lVar25);
                      if (uVar9 == 7) {
                        lVar25 = (long)iVar18;
                        iVar18 = iVar13 + 7;
                        *(ushort *)((long)param_5 + lVar25 * 2) =
                             (ushort)*(byte *)((long)param_1 + lVar25);
                      }
                    }
                  }
                }
              }
            }
          }
          uVar4 = ((uVar24 - uVar9) - 0x10 >> 4) + 1;
          iVar13 = uVar4 * 0x10;
          if (0xe < (uVar24 - 1) - uVar9) {
            uVar28 = 0;
            puVar19 = (ulong *)((long)param_5 + lVar23 * 2 + (ulong)uVar9 * 2);
            puVar22 = (undefined8 *)((long)param_1 + lVar23 + (ulong)uVar9);
            do {
              uVar30 = puVar22[1];
              uVar29 = *puVar22;
              uVar28 = uVar28 + 1;
              puVar19[1] = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar29 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar29 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar29 >> 0x20))));
              *puVar19 = (ulong)CONCAT16((char)((ulong)uVar29 >> 0x18),
                                         (uint6)CONCAT14((char)((ulong)uVar29 >> 0x10),
                                                         (uint)CONCAT12((char)((ulong)uVar29 >> 8),
                                                                        (ushort)(byte)uVar29)));
              puVar19[3] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x38),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x30),
                                                           (uint)CONCAT12((char)((ulong)uVar30 >>
                                                                                0x28),
                                                                          (ushort)(byte)((ulong)
                                                  uVar30 >> 0x20))));
              puVar19[2] = (ulong)CONCAT16((char)((ulong)uVar30 >> 0x18),
                                           (uint6)CONCAT14((char)((ulong)uVar30 >> 0x10),
                                                           (uint)(CONCAT12((char)((ulong)uVar30 >> 8
                                                                                 ),(short)uVar30) &
                                                                 0xff00ff)));
              puVar19 = puVar19 + 4;
              puVar22 = puVar22 + 2;
            } while (uVar28 < uVar4);
            iVar18 = iVar18 + iVar13;
            if (uVar24 - uVar9 == iVar13) goto LAB_002719d8;
          }
          iVar13 = iVar18 + 1;
          *(ushort *)((long)param_5 + (long)iVar18 * 2) =
               (ushort)*(byte *)((long)param_1 + (long)iVar18);
          if (iVar13 < iVar10) {
            iVar5 = iVar18 + 2;
            *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                 (ushort)*(byte *)((long)param_1 + (long)iVar13);
            if (iVar5 < iVar10) {
              iVar13 = iVar18 + 3;
              *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                   (ushort)*(byte *)((long)param_1 + (long)iVar5);
              if (iVar13 < iVar10) {
                iVar5 = iVar18 + 4;
                *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                     (ushort)*(byte *)((long)param_1 + (long)iVar13);
                if (iVar5 < iVar10) {
                  iVar13 = iVar18 + 5;
                  *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                       (ushort)*(byte *)((long)param_1 + (long)iVar5);
                  if (iVar13 < iVar10) {
                    iVar5 = iVar18 + 6;
                    *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                         (ushort)*(byte *)((long)param_1 + (long)iVar13);
                    if (iVar5 < iVar10) {
                      iVar13 = iVar18 + 7;
                      *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                           (ushort)*(byte *)((long)param_1 + (long)iVar5);
                      if (iVar13 < iVar10) {
                        iVar5 = iVar18 + 8;
                        *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                             (ushort)*(byte *)((long)param_1 + (long)iVar13);
                        if (iVar5 < iVar10) {
                          iVar13 = iVar18 + 9;
                          *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                               (ushort)*(byte *)((long)param_1 + (long)iVar5);
                          if (iVar13 < iVar10) {
                            iVar5 = iVar18 + 10;
                            *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                 (ushort)*(byte *)((long)param_1 + (long)iVar13);
                            if (iVar5 < iVar10) {
                              iVar13 = iVar18 + 0xb;
                              *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                                   (ushort)*(byte *)((long)param_1 + (long)iVar5);
                              if (iVar13 < iVar10) {
                                iVar5 = iVar18 + 0xc;
                                *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                     (ushort)*(byte *)((long)param_1 + (long)iVar13);
                                if (iVar5 < iVar10) {
                                  iVar13 = iVar18 + 0xd;
                                  *(ushort *)((long)param_5 + (long)iVar5 * 2) =
                                       (ushort)*(byte *)((long)param_1 + (long)iVar5);
                                  if (iVar13 < iVar10) {
                                    iVar18 = iVar18 + 0xe;
                                    *(ushort *)((long)param_5 + (long)iVar13 * 2) =
                                         (ushort)*(byte *)((long)param_1 + (long)iVar13);
                                    if (iVar18 < iVar10) {
                                      *(ushort *)((long)param_5 + (long)iVar18 * 2) =
                                           (ushort)*(byte *)((long)param_1 + (long)iVar18);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002719d8:
      iVar26 = iVar26 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (ulong *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 00271a88 (472 bytes) name=FUN_00271a88

void FUN_00271a88(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 *puVar1;
  int iVar2;
  short sVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  undefined1 (*pauVar8) [16];
  undefined1 *puVar9;
  long lVar10;
  undefined8 *puVar11;
  short *psVar12;
  undefined1 (*pauVar13) [16];
  undefined1 uVar14;
  undefined1 uVar15;
  undefined1 uVar16;
  int iVar17;
  undefined1 uVar18;
  int iVar19;
  long lVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  iVar19 = param_7[1];
  iVar2 = *param_7;
  if (iVar19 != 0) {
    uVar5 = iVar2 - 0x10U >> 4;
    iVar4 = (uVar5 + 1) * 0x10;
    if (iVar2 + -0xf < 1) {
      iVar4 = 0;
    }
    uVar6 = (uint)((iVar2 + -4) - iVar4) >> 2;
    lVar20 = (long)iVar4;
    do {
      if (0 < iVar2 + -0xf) {
        pauVar8 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar11 = param_5;
        do {
          pauVar13 = pauVar8 + -1;
          puVar9 = *pauVar8;
          auVar7 = *pauVar8;
          pauVar8 = pauVar8 + 2;
          uVar21 = NEON_sqxtn(*(undefined8 *)puVar9,auVar7,2);
          uVar22 = NEON_sqxtn(*(undefined8 *)*pauVar13,*pauVar13,2);
          puVar11[1] = uVar21;
          *puVar11 = uVar22;
          puVar11 = puVar11 + 2;
        } while (pauVar8 != (undefined1 (*) [16])(param_1 + (ulong)uVar5 * 0x20 + 0x30));
      }
      uVar14 = 0x80;
      uVar15 = 0x7f;
      iVar17 = iVar4;
      if (iVar4 < iVar2 + -3) {
        psVar12 = (short *)(param_1 + lVar20 * 2);
        puVar9 = (undefined1 *)((long)param_5 + lVar20);
        do {
          sVar3 = *psVar12;
          uVar18 = (char)sVar3;
          if ((0xff < (int)sVar3 + 0x80U) && (uVar18 = uVar15, sVar3 < 1)) {
            uVar18 = uVar14;
          }
          sVar3 = psVar12[1];
          uVar16 = (char)sVar3;
          if ((0xff < (int)sVar3 + 0x80U) && (uVar16 = uVar15, sVar3 < 1)) {
            uVar16 = uVar14;
          }
          *puVar9 = uVar18;
          puVar9[1] = uVar16;
          sVar3 = psVar12[2];
          uVar18 = (char)sVar3;
          if ((0xff < (int)sVar3 + 0x80U) && (uVar18 = 0x7f, sVar3 < 1)) {
            uVar18 = 0x80;
          }
          sVar3 = psVar12[3];
          psVar12 = psVar12 + 4;
          uVar16 = (char)sVar3;
          if ((0xff < (int)sVar3 + 0x80U) && (uVar16 = 0x7f, sVar3 < 1)) {
            uVar16 = 0x80;
          }
          puVar9[2] = uVar18;
          puVar1 = puVar9 + 4;
          puVar9[3] = uVar16;
          puVar9 = puVar1;
          iVar17 = iVar4 + 4 + uVar6 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar20 + 4 + (ulong)uVar6 * 4));
      }
      if (iVar17 < iVar2) {
        lVar10 = 0;
        do {
          sVar3 = *(short *)(param_1 + (long)iVar17 * 2 + lVar10 * 2);
          uVar18 = (char)sVar3;
          if ((0xff < (int)sVar3 + 0x80U) && (uVar18 = uVar15, sVar3 < 1)) {
            uVar18 = uVar14;
          }
          *(undefined1 *)((long)param_5 + lVar10 + iVar17) = uVar18;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(uint)((iVar2 + -1) - iVar17) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 00271c60 (2000 bytes) name=FUN_00271c60

void FUN_00271c60(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  undefined8 *puVar7;
  uint uVar8;
  int iVar9;
  byte bVar10;
  byte bVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  int iVar22;
  long lVar23;
  byte *pbVar24;
  byte bVar25;
  byte *pbVar26;
  undefined8 *puVar27;
  uint uVar28;
  int iVar29;
  long lVar30;
  long lVar31;
  uint uVar32;
  undefined8 uVar33;
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  
  iVar29 = param_7[1];
  iVar9 = *param_7;
  if (iVar29 != 0) {
    iVar14 = iVar9 + -7;
    iVar1 = (iVar9 - 8U & 0xfffffff8) + 8;
    if (iVar14 < 1) {
      iVar1 = 0;
    }
    uVar16 = (iVar9 + -4) - iVar1;
    uVar13 = uVar16 >> 2;
    lVar30 = (long)iVar1;
    uVar2 = (uVar13 - 3 >> 2) + 1;
    iVar15 = iVar9 + -3;
    iVar6 = iVar1 + 4 + uVar13 * 4;
    do {
      lVar23 = 0;
      if (0 < iVar14) {
        do {
          puVar27 = (undefined8 *)(param_1 + lVar23);
          puVar7 = (undefined8 *)(param_5 + lVar23);
          lVar23 = lVar23 + 8;
          uVar33 = *puVar27;
          auVar35._0_8_ =
               CONCAT17(0,CONCAT16((char)((ulong)uVar33 >> 0x18),
                                   (uint6)CONCAT14((char)((ulong)uVar33 >> 0x10),
                                                   (uint)CONCAT12((char)((ulong)uVar33 >> 8),
                                                                  (ushort)(byte)uVar33))));
          auVar35[8] = (char)((ulong)uVar33 >> 0x20);
          auVar35[9] = 0;
          auVar35[10] = (char)((ulong)uVar33 >> 0x28);
          auVar35[0xb] = 0;
          auVar35[0xc] = (char)((ulong)uVar33 >> 0x30);
          auVar35[0xd] = 0;
          auVar35[0xe] = (char)((ulong)uVar33 >> 0x38);
          auVar35[0xf] = 0;
          uVar33 = NEON_sqxtn(auVar35._0_8_,auVar35,2);
          *puVar7 = uVar33;
        } while ((int)lVar23 < iVar14);
      }
      bVar25 = 0x7f;
      iVar12 = iVar1;
      if (iVar1 < iVar15) {
        pbVar24 = (byte *)(param_1 + lVar30);
        pbVar26 = (byte *)(param_5 + lVar30);
        iVar12 = iVar6;
        if ((pbVar24 < (byte *)(param_5 + lVar30 + 0x40) &&
             pbVar26 < (byte *)(param_1 + lVar30 + 0x40)) || (uVar13 + 1 < 4)) {
          do {
            pbVar5 = pbVar24 + 4;
            bVar11 = *pbVar24;
            bVar10 = pbVar24[1];
            if (0x7f < pbVar24[1]) {
              bVar10 = bVar25;
            }
            pbVar26[1] = bVar10;
            if (0x7f < bVar11) {
              bVar11 = bVar25;
            }
            *pbVar26 = bVar11;
            bVar10 = pbVar24[3];
            if (0x7f < pbVar24[3]) {
              bVar10 = bVar25;
            }
            bVar11 = pbVar24[2];
            if (0x7f < pbVar24[2]) {
              bVar11 = bVar25;
            }
            pbVar26[3] = bVar10;
            pbVar26[2] = bVar11;
            pbVar24 = pbVar5;
            pbVar26 = pbVar26 + 4;
          } while (pbVar5 != (byte *)(param_1 + lVar30 + 4 + (ulong)uVar13 * 4));
        }
        else {
          iVar22 = iVar1;
          if (0xb < uVar16) {
            uVar28 = 0;
            do {
              uVar28 = uVar28 + 1;
              auVar44._6_2_ = 0;
              auVar44._0_6_ =
                   (uint6)CONCAT14(pbVar24[1],(uint)CONCAT12(pbVar24[1],(ushort)*pbVar24)) &
                   0xffff0000ffff;
              auVar44[8] = pbVar24[2];
              auVar44._9_3_ = 0;
              auVar44[0xc] = pbVar24[3];
              auVar44._13_3_ = 0;
              auVar41._6_2_ = 0;
              auVar41._0_6_ =
                   (uint6)CONCAT14(pbVar24[9],(uint)CONCAT12(pbVar24[9],(ushort)pbVar24[8])) &
                   0xffff0000ffff;
              auVar41[8] = pbVar24[10];
              auVar41._9_3_ = 0;
              auVar41[0xc] = pbVar24[0xb];
              auVar41._13_3_ = 0;
              auVar38._1_3_ = 0;
              auVar38[0] = pbVar24[4];
              auVar38[4] = pbVar24[5];
              auVar38._5_3_ = 0;
              auVar38[8] = pbVar24[6];
              auVar38._9_3_ = 0;
              auVar38[0xc] = pbVar24[7];
              auVar38._13_3_ = 0;
              auVar34._1_3_ = 0;
              auVar34[0] = pbVar24[0xc];
              auVar34[4] = pbVar24[0xd];
              auVar34._5_3_ = 0;
              auVar34[8] = pbVar24[0xe];
              auVar34._9_3_ = 0;
              auVar34[0xc] = pbVar24[0xf];
              auVar34._13_3_ = 0;
              auVar39._8_4_ = 0x7f;
              auVar39._0_8_ = 0x7f0000007f;
              auVar39._12_4_ = 0x7f;
              auVar45 = NEON_smin(auVar44,auVar39,4);
              auVar42._8_4_ = 0x7f;
              auVar42._0_8_ = 0x7f0000007f;
              auVar42._12_4_ = 0x7f;
              auVar42 = NEON_smin(auVar41,auVar42,4);
              auVar47._8_4_ = 0x7f;
              auVar47._0_8_ = 0x7f0000007f;
              auVar47._12_4_ = 0x7f;
              auVar39 = NEON_smin(auVar38,auVar47,4);
              auVar17._8_4_ = 0x7f;
              auVar17._0_8_ = 0x7f0000007f;
              auVar17._12_4_ = 0x7f;
              auVar35 = NEON_smin(auVar34,auVar17,4);
              auVar45._0_8_ =
                   CONCAT17(auVar39[0xc],
                            CONCAT16(auVar39[8],
                                     CONCAT15(auVar39[4],
                                              CONCAT14(auVar39[0],
                                                       CONCAT13(auVar45[0xc],
                                                                CONCAT12(auVar45[8],
                                                                         CONCAT11(auVar45[4],
                                                                                  auVar45[0])))))));
              auVar45[8] = auVar42[0];
              auVar45[9] = auVar42[4];
              auVar45[10] = auVar42[8];
              auVar45[0xb] = auVar42[0xc];
              auVar45[0xc] = auVar35[0];
              auVar45[0xd] = auVar35[4];
              auVar45[0xe] = auVar35[8];
              auVar45[0xf] = auVar35[0xc];
              *(long *)(pbVar26 + 8) = auVar45._8_8_;
              *(undefined8 *)pbVar26 = auVar45._0_8_;
              pbVar24 = pbVar24 + 0x10;
              pbVar26 = pbVar26 + 0x10;
            } while (uVar28 < uVar2);
            iVar22 = iVar1 + uVar2 * 0x10;
            if (uVar13 + 1 == uVar2 * 4) goto LAB_00271ecc;
          }
          lVar23 = (long)iVar22;
          bVar10 = *(byte *)(param_1 + lVar23 + 1);
          if (0x7f < bVar10) {
            bVar10 = bVar25;
          }
          bVar11 = *(byte *)(param_1 + lVar23);
          if (0x7f < *(byte *)(param_1 + lVar23)) {
            bVar11 = bVar25;
          }
          *(byte *)(param_5 + lVar23) = bVar11;
          *(byte *)(param_5 + lVar23 + 1) = bVar10;
          bVar10 = *(byte *)(param_1 + lVar23 + 3);
          bVar11 = *(byte *)(param_1 + lVar23 + 2);
          if (0x7f < bVar10) {
            bVar10 = 0x7f;
          }
          if (0x7f < bVar11) {
            bVar11 = 0x7f;
          }
          *(byte *)(param_5 + lVar23 + 2) = bVar11;
          *(byte *)(param_5 + lVar23 + 3) = bVar10;
          if (iVar22 + 4 < iVar15) {
            lVar23 = (long)(iVar22 + 4);
            bVar11 = *(byte *)(param_1 + lVar23);
            bVar10 = *(byte *)(param_1 + lVar23 + 1);
            if (0x7f < bVar10) {
              bVar10 = 0x7f;
            }
            if (0x7f < bVar11) {
              bVar11 = 0x7f;
            }
            *(byte *)(param_5 + lVar23) = bVar11;
            *(byte *)(param_5 + lVar23 + 1) = bVar10;
            bVar10 = *(byte *)(param_1 + lVar23 + 3);
            bVar11 = *(byte *)(param_1 + lVar23 + 2);
            if (0x7f < bVar10) {
              bVar10 = 0x7f;
            }
            if (0x7f < bVar11) {
              bVar11 = 0x7f;
            }
            *(byte *)(param_5 + lVar23 + 2) = bVar11;
            *(byte *)(param_5 + lVar23 + 3) = bVar10;
            if (iVar22 + 8 < iVar15) {
              lVar23 = (long)(iVar22 + 8);
              bVar11 = *(byte *)(param_1 + lVar23);
              bVar10 = *(byte *)(param_1 + lVar23 + 1);
              if (0x7f < bVar10) {
                bVar10 = 0x7f;
              }
              if (0x7f < bVar11) {
                bVar11 = 0x7f;
              }
              *(byte *)(param_5 + lVar23) = bVar11;
              *(byte *)(param_5 + lVar23 + 1) = bVar10;
              bVar10 = *(byte *)(param_1 + lVar23 + 3);
              bVar11 = *(byte *)(param_1 + lVar23 + 2);
              if (0x7f < bVar10) {
                bVar10 = bVar25;
              }
              if (0x7f < bVar11) {
                bVar11 = bVar25;
              }
              *(byte *)(param_5 + lVar23 + 2) = bVar11;
              *(byte *)(param_5 + lVar23 + 3) = bVar10;
            }
          }
        }
      }
LAB_00271ecc:
      if (iVar12 < iVar9) {
        lVar23 = (long)iVar12;
        uVar28 = iVar9 - iVar12;
        pbVar24 = (byte *)(param_1 + lVar23);
        pbVar26 = (byte *)(param_5 + lVar23);
        if ((pbVar24 < (byte *)(param_5 + lVar23 + 0x10) &&
             pbVar26 < (byte *)(param_1 + lVar23 + 0x10)) || (uVar28 < 0x13)) {
          lVar23 = 0;
          do {
            bVar10 = pbVar24[lVar23];
            if (0x7f < pbVar24[lVar23]) {
              bVar10 = bVar25;
            }
            pbVar26[lVar23] = bVar10;
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar9 + -1) - iVar12) + 1);
        }
        else {
          uVar8 = -(int)pbVar24 & 0xf;
          if (uVar28 < uVar8) {
            uVar8 = uVar28;
          }
          iVar22 = iVar12;
          if (uVar8 != 0) {
            iVar22 = iVar12 + 1;
            bVar10 = *pbVar24;
            if (0x7f < *pbVar24) {
              bVar10 = bVar25;
            }
            *pbVar26 = bVar10;
            if (uVar8 != 1) {
              lVar31 = (long)iVar22;
              iVar22 = iVar12 + 2;
              bVar10 = *(byte *)(param_1 + lVar31);
              if (0x7f < bVar10) {
                bVar10 = bVar25;
              }
              *(byte *)(param_5 + lVar31) = bVar10;
              if (uVar8 != 2) {
                lVar31 = (long)iVar22;
                iVar22 = iVar12 + 3;
                bVar25 = *(byte *)(param_1 + lVar31);
                if (0x7f < bVar25) {
                  bVar25 = 0x7f;
                }
                *(byte *)(param_5 + lVar31) = bVar25;
                if (uVar8 != 3) {
                  lVar31 = (long)iVar22;
                  iVar22 = iVar12 + 4;
                  bVar25 = *(byte *)(param_1 + lVar31);
                  if (0x7f < bVar25) {
                    bVar25 = 0x7f;
                  }
                  *(byte *)(param_5 + lVar31) = bVar25;
                  if (uVar8 != 4) {
                    lVar31 = (long)iVar22;
                    iVar22 = iVar12 + 5;
                    bVar25 = *(byte *)(param_1 + lVar31);
                    if (0x7f < bVar25) {
                      bVar25 = 0x7f;
                    }
                    *(byte *)(param_5 + lVar31) = bVar25;
                    if (uVar8 != 5) {
                      lVar31 = (long)iVar22;
                      iVar22 = iVar12 + 6;
                      bVar25 = *(byte *)(param_1 + lVar31);
                      if (0x7f < bVar25) {
                        bVar25 = 0x7f;
                      }
                      *(byte *)(param_5 + lVar31) = bVar25;
                      if (uVar8 != 6) {
                        lVar31 = (long)iVar22;
                        iVar22 = iVar12 + 7;
                        bVar25 = *(byte *)(param_1 + lVar31);
                        if (0x7f < bVar25) {
                          bVar25 = 0x7f;
                        }
                        *(byte *)(param_5 + lVar31) = bVar25;
                        if (uVar8 != 7) {
                          lVar31 = (long)iVar22;
                          iVar22 = iVar12 + 8;
                          bVar25 = *(byte *)(param_1 + lVar31);
                          if (0x7f < bVar25) {
                            bVar25 = 0x7f;
                          }
                          *(byte *)(param_5 + lVar31) = bVar25;
                          if (uVar8 != 8) {
                            lVar31 = (long)iVar22;
                            iVar22 = iVar12 + 9;
                            bVar25 = *(byte *)(param_1 + lVar31);
                            if (0x7f < bVar25) {
                              bVar25 = 0x7f;
                            }
                            *(byte *)(param_5 + lVar31) = bVar25;
                            if (uVar8 != 9) {
                              lVar31 = (long)iVar22;
                              iVar22 = iVar12 + 10;
                              bVar25 = *(byte *)(param_1 + lVar31);
                              if (0x7f < bVar25) {
                                bVar25 = 0x7f;
                              }
                              *(byte *)(param_5 + lVar31) = bVar25;
                              if (uVar8 != 10) {
                                lVar31 = (long)iVar22;
                                iVar22 = iVar12 + 0xb;
                                bVar25 = *(byte *)(param_1 + lVar31);
                                if (0x7f < bVar25) {
                                  bVar25 = 0x7f;
                                }
                                *(byte *)(param_5 + lVar31) = bVar25;
                                if (uVar8 != 0xb) {
                                  lVar31 = (long)iVar22;
                                  iVar22 = iVar12 + 0xc;
                                  bVar25 = *(byte *)(param_1 + lVar31);
                                  if (0x7f < bVar25) {
                                    bVar25 = 0x7f;
                                  }
                                  *(byte *)(param_5 + lVar31) = bVar25;
                                  if (uVar8 != 0xc) {
                                    lVar31 = (long)iVar22;
                                    iVar22 = iVar12 + 0xd;
                                    bVar25 = *(byte *)(param_1 + lVar31);
                                    if (0x7f < bVar25) {
                                      bVar25 = 0x7f;
                                    }
                                    *(byte *)(param_5 + lVar31) = bVar25;
                                    if (uVar8 != 0xd) {
                                      lVar31 = (long)iVar22;
                                      iVar22 = iVar12 + 0xe;
                                      bVar25 = *(byte *)(param_1 + lVar31);
                                      if (0x7f < bVar25) {
                                        bVar25 = 0x7f;
                                      }
                                      *(byte *)(param_5 + lVar31) = bVar25;
                                      if (uVar8 == 0xf) {
                                        lVar31 = (long)iVar22;
                                        iVar22 = iVar12 + 0xf;
                                        bVar25 = *(byte *)(param_1 + lVar31);
                                        if (0x7f < bVar25) {
                                          bVar25 = 0x7f;
                                        }
                                        *(byte *)(param_5 + lVar31) = bVar25;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar3 = ((uVar28 - uVar8) - 0x10 >> 4) + 1;
          iVar12 = uVar3 * 0x10;
          if (0xe < (uVar28 - 1) - uVar8) {
            uVar32 = 0;
            puVar27 = (undefined8 *)(param_5 + lVar23 + (ulong)uVar8);
            pbVar24 = (byte *)(param_1 + lVar23 + (ulong)uVar8);
            do {
              uVar32 = uVar32 + 1;
              auVar46._6_2_ = 0;
              auVar46._0_6_ =
                   (uint6)CONCAT14(pbVar24[1],(uint)CONCAT12(pbVar24[1],(ushort)*pbVar24)) &
                   0xffff0000ffff;
              auVar46[8] = pbVar24[2];
              auVar46._9_3_ = 0;
              auVar46[0xc] = pbVar24[3];
              auVar46._13_3_ = 0;
              auVar43._6_2_ = 0;
              auVar43._0_6_ =
                   (uint6)CONCAT14(pbVar24[9],(uint)CONCAT12(pbVar24[9],(ushort)pbVar24[8])) &
                   0xffff0000ffff;
              auVar43[8] = pbVar24[10];
              auVar43._9_3_ = 0;
              auVar43[0xc] = pbVar24[0xb];
              auVar43._13_3_ = 0;
              auVar40._1_3_ = 0;
              auVar40[0] = pbVar24[4];
              auVar40[4] = pbVar24[5];
              auVar40._5_3_ = 0;
              auVar40[8] = pbVar24[6];
              auVar40._9_3_ = 0;
              auVar40[0xc] = pbVar24[7];
              auVar40._13_3_ = 0;
              auVar36._1_3_ = 0;
              auVar36[0] = pbVar24[0xc];
              auVar36[4] = pbVar24[0xd];
              auVar36._5_3_ = 0;
              auVar36[8] = pbVar24[0xe];
              auVar36._9_3_ = 0;
              auVar36[0xc] = pbVar24[0xf];
              auVar36._13_3_ = 0;
              auVar18._8_4_ = 0x7f;
              auVar18._0_8_ = 0x7f0000007f;
              auVar18._12_4_ = 0x7f;
              auVar47 = NEON_smin(auVar46,auVar18,4);
              auVar19._8_4_ = 0x7f;
              auVar19._0_8_ = 0x7f0000007f;
              auVar19._12_4_ = 0x7f;
              auVar42 = NEON_smin(auVar43,auVar19,4);
              auVar20._8_4_ = 0x7f;
              auVar20._0_8_ = 0x7f0000007f;
              auVar20._12_4_ = 0x7f;
              auVar39 = NEON_smin(auVar40,auVar20,4);
              auVar21._8_4_ = 0x7f;
              auVar21._0_8_ = 0x7f0000007f;
              auVar21._12_4_ = 0x7f;
              auVar35 = NEON_smin(auVar36,auVar21,4);
              auVar37._0_8_ =
                   CONCAT17(auVar39[0xc],
                            CONCAT16(auVar39[8],
                                     CONCAT15(auVar39[4],
                                              CONCAT14(auVar39[0],
                                                       CONCAT13(auVar47[0xc],
                                                                CONCAT12(auVar47[8],
                                                                         CONCAT11(auVar47[4],
                                                                                  auVar47[0])))))));
              auVar37[8] = auVar42[0];
              auVar37[9] = auVar42[4];
              auVar37[10] = auVar42[8];
              auVar37[0xb] = auVar42[0xc];
              auVar37[0xc] = auVar35[0];
              auVar37[0xd] = auVar35[4];
              auVar37[0xe] = auVar35[8];
              auVar37[0xf] = auVar35[0xc];
              puVar27[1] = auVar37._8_8_;
              *puVar27 = auVar37._0_8_;
              puVar27 = puVar27 + 2;
              pbVar24 = pbVar24 + 0x10;
            } while (uVar32 < uVar3);
            iVar22 = iVar22 + iVar12;
            if (uVar28 - uVar8 == iVar12) goto LAB_00272360;
          }
          iVar12 = iVar22 + 1;
          bVar25 = *(byte *)(param_1 + iVar22);
          if (0x7f < bVar25) {
            bVar25 = 0x7f;
          }
          *(byte *)(param_5 + iVar22) = bVar25;
          if (iVar12 < iVar9) {
            iVar4 = iVar22 + 2;
            bVar25 = *(byte *)(param_1 + iVar12);
            if (0x7f < bVar25) {
              bVar25 = 0x7f;
            }
            *(byte *)(param_5 + iVar12) = bVar25;
            if (iVar4 < iVar9) {
              iVar12 = iVar22 + 3;
              bVar25 = *(byte *)(param_1 + iVar4);
              if (0x7f < bVar25) {
                bVar25 = 0x7f;
              }
              *(byte *)(param_5 + iVar4) = bVar25;
              if (iVar12 < iVar9) {
                iVar4 = iVar22 + 4;
                bVar25 = *(byte *)(param_1 + iVar12);
                if (0x7f < bVar25) {
                  bVar25 = 0x7f;
                }
                *(byte *)(param_5 + iVar12) = bVar25;
                if (iVar4 < iVar9) {
                  iVar12 = iVar22 + 5;
                  bVar25 = *(byte *)(param_1 + iVar4);
                  if (0x7f < bVar25) {
                    bVar25 = 0x7f;
                  }
                  *(byte *)(param_5 + iVar4) = bVar25;
                  if (iVar12 < iVar9) {
                    iVar4 = iVar22 + 6;
                    bVar25 = *(byte *)(param_1 + iVar12);
                    if (0x7f < bVar25) {
                      bVar25 = 0x7f;
                    }
                    *(byte *)(param_5 + iVar12) = bVar25;
                    if (iVar4 < iVar9) {
                      iVar12 = iVar22 + 7;
                      bVar25 = *(byte *)(param_1 + iVar4);
                      if (0x7f < bVar25) {
                        bVar25 = 0x7f;
                      }
                      *(byte *)(param_5 + iVar4) = bVar25;
                      if (iVar12 < iVar9) {
                        iVar4 = iVar22 + 8;
                        bVar25 = *(byte *)(param_1 + iVar12);
                        if (0x7f < bVar25) {
                          bVar25 = 0x7f;
                        }
                        *(byte *)(param_5 + iVar12) = bVar25;
                        if (iVar4 < iVar9) {
                          iVar12 = iVar22 + 9;
                          bVar25 = *(byte *)(param_1 + iVar4);
                          if (0x7f < bVar25) {
                            bVar25 = 0x7f;
                          }
                          *(byte *)(param_5 + iVar4) = bVar25;
                          if (iVar12 < iVar9) {
                            iVar4 = iVar22 + 10;
                            bVar25 = *(byte *)(param_1 + iVar12);
                            if (0x7f < bVar25) {
                              bVar25 = 0x7f;
                            }
                            *(byte *)(param_5 + iVar12) = bVar25;
                            if (iVar4 < iVar9) {
                              iVar12 = iVar22 + 0xb;
                              bVar25 = *(byte *)(param_1 + iVar4);
                              if (0x7f < bVar25) {
                                bVar25 = 0x7f;
                              }
                              *(byte *)(param_5 + iVar4) = bVar25;
                              if (iVar12 < iVar9) {
                                iVar4 = iVar22 + 0xc;
                                bVar25 = *(byte *)(param_1 + iVar12);
                                if (0x7f < bVar25) {
                                  bVar25 = 0x7f;
                                }
                                *(byte *)(param_5 + iVar12) = bVar25;
                                if (iVar4 < iVar9) {
                                  iVar12 = iVar22 + 0xd;
                                  bVar25 = *(byte *)(param_1 + iVar4);
                                  if (0x7f < bVar25) {
                                    bVar25 = 0x7f;
                                  }
                                  *(byte *)(param_5 + iVar4) = bVar25;
                                  if (iVar12 < iVar9) {
                                    iVar22 = iVar22 + 0xe;
                                    bVar25 = *(byte *)(param_1 + iVar12);
                                    if (0x7f < bVar25) {
                                      bVar25 = 0x7f;
                                    }
                                    *(byte *)(param_5 + iVar12) = bVar25;
                                    if (iVar22 < iVar9) {
                                      bVar25 = *(byte *)(param_1 + iVar22);
                                      if (0x7f < bVar25) {
                                        bVar25 = 0x7f;
                                      }
                                      *(byte *)(param_5 + iVar22) = bVar25;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00272360:
      iVar29 = iVar29 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar29 != 0);
  }
  return;
}


==================================================================

### FUNC 00272430 (1828 bytes) name=FUN_00272430

void FUN_00272430(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  int iVar7;
  undefined1 *puVar8;
  uint uVar9;
  int iVar10;
  ushort uVar11;
  ushort uVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  int iVar23;
  undefined1 (*pauVar24) [16];
  undefined8 *puVar25;
  ushort uVar26;
  ushort *puVar27;
  undefined1 uVar28;
  undefined1 (*pauVar29) [16];
  long lVar30;
  undefined1 uVar31;
  uint uVar32;
  long lVar33;
  int iVar34;
  long lVar35;
  uint uVar36;
  undefined8 uVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined8 uVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  
  iVar34 = param_7[1];
  iVar10 = *param_7;
  if (iVar34 != 0) {
    uVar15 = iVar10 - 0x10U >> 4;
    iVar13 = (uVar15 + 1) * 0x10;
    if (iVar10 + -0xf < 1) {
      iVar13 = 0;
    }
    uVar18 = (iVar10 + -4) - iVar13;
    lVar35 = (long)iVar13;
    uVar16 = uVar18 >> 2;
    uVar2 = uVar16 + 1;
    uVar3 = (uVar16 - 3 >> 2) + 1;
    iVar7 = iVar13 + 4 + uVar16 * 4;
    lVar1 = lVar35 + (ulong)uVar2 * 4;
    iVar17 = iVar10 + -3;
    do {
      if (0 < iVar10 + -0xf) {
        pauVar24 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar25 = param_5;
        do {
          pauVar29 = pauVar24 + -1;
          auVar39 = *pauVar24;
          pauVar24 = pauVar24 + 2;
          uVar37 = NEON_uqxtn(auVar39._0_8_,auVar39,2);
          uVar42 = NEON_uqxtn(SUB168(*pauVar29,0),*pauVar29,2);
          puVar25[1] = uVar37;
          *puVar25 = uVar42;
          puVar25 = puVar25 + 2;
        } while (pauVar24 != (undefined1 (*) [16])(param_1 + (ulong)uVar15 * 0x20 + 0x30));
      }
      uVar26 = 0xff;
      iVar14 = iVar13;
      if (iVar13 < iVar17) {
        puVar27 = (ushort *)(param_1 + lVar35 * 2);
        puVar25 = (undefined8 *)((long)param_5 + lVar35);
        iVar14 = iVar7;
        if ((puVar27 < (ushort *)((long)param_5 + lVar1) &&
             puVar25 < (undefined8 *)(param_1 + lVar1 * 2)) || (uVar2 < 4)) {
          do {
            puVar6 = (undefined8 *)((long)puVar25 + 4);
            uVar12 = puVar27[1];
            if (0xff < puVar27[1]) {
              uVar12 = uVar26;
            }
            uVar11 = *puVar27;
            if (0xff < *puVar27) {
              uVar11 = uVar26;
            }
            *(char *)((long)puVar25 + 1) = (char)uVar12;
            *(char *)puVar25 = (char)uVar11;
            uVar12 = puVar27[3];
            if (0xff < puVar27[3]) {
              uVar12 = uVar26;
            }
            uVar11 = puVar27[2];
            if (0xff < puVar27[2]) {
              uVar11 = uVar26;
            }
            *(char *)((long)puVar25 + 3) = (char)uVar12;
            *(char *)((long)puVar25 + 2) = (char)uVar11;
            puVar25 = puVar6;
            puVar27 = puVar27 + 4;
          } while (puVar6 != (undefined8 *)((long)param_5 + lVar35 + 4 + (ulong)uVar16 * 4));
        }
        else {
          iVar23 = iVar13;
          if (0xb < uVar18) {
            uVar32 = 0;
            do {
              uVar32 = uVar32 + 1;
              auVar48._2_2_ = 0;
              auVar48._0_2_ = *puVar27;
              auVar48._4_2_ = puVar27[1];
              auVar48._6_2_ = 0;
              auVar48._8_2_ = puVar27[2];
              auVar48._10_2_ = 0;
              auVar48._12_2_ = puVar27[3];
              auVar48._14_2_ = 0;
              auVar43._2_2_ = 0;
              auVar43._0_2_ = puVar27[4];
              auVar43._4_2_ = puVar27[5];
              auVar43._6_2_ = 0;
              auVar43._8_2_ = puVar27[6];
              auVar43._10_2_ = 0;
              auVar43._12_2_ = puVar27[7];
              auVar43._14_2_ = 0;
              auVar39._8_4_ = 0xff;
              auVar39._0_8_ = 0xff000000ff;
              auVar39._12_4_ = 0xff;
              auVar49 = NEON_umin(auVar48,auVar39,4);
              auVar46._2_2_ = 0;
              auVar46._0_2_ = puVar27[8];
              auVar46._4_2_ = puVar27[9];
              auVar46._6_2_ = 0;
              auVar46._8_2_ = puVar27[10];
              auVar46._10_2_ = 0;
              auVar46._12_2_ = puVar27[0xb];
              auVar46._14_2_ = 0;
              auVar38._2_2_ = 0;
              auVar38._0_2_ = puVar27[0xc];
              auVar38._4_2_ = puVar27[0xd];
              auVar38._6_2_ = 0;
              auVar38._8_2_ = puVar27[0xe];
              auVar38._10_2_ = 0;
              auVar38._12_2_ = puVar27[0xf];
              auVar38._14_2_ = 0;
              auVar44._8_4_ = 0xff;
              auVar44._0_8_ = 0xff000000ff;
              auVar44._12_4_ = 0xff;
              auVar44 = NEON_umin(auVar43,auVar44,4);
              auVar47._8_4_ = 0xff;
              auVar47._0_8_ = 0xff000000ff;
              auVar47._12_4_ = 0xff;
              auVar47 = NEON_umin(auVar46,auVar47,4);
              auVar52._8_4_ = 0xff;
              auVar52._0_8_ = 0xff000000ff;
              auVar52._12_4_ = 0xff;
              auVar39 = NEON_umin(auVar38,auVar52,4);
              auVar49._0_8_ =
                   CONCAT17(auVar44[0xc],
                            CONCAT16(auVar44[8],
                                     CONCAT15(auVar44[4],
                                              CONCAT14(auVar44[0],
                                                       CONCAT13(auVar49[0xc],
                                                                CONCAT12(auVar49[8],
                                                                         CONCAT11(auVar49[4],
                                                                                  auVar49[0])))))));
              auVar49[8] = auVar47[0];
              auVar49[9] = auVar47[4];
              auVar49[10] = auVar47[8];
              auVar49[0xb] = auVar47[0xc];
              auVar49[0xc] = auVar39[0];
              auVar49[0xd] = auVar39[4];
              auVar49[0xe] = auVar39[8];
              auVar49[0xf] = auVar39[0xc];
              puVar25[1] = auVar49._8_8_;
              *puVar25 = auVar49._0_8_;
              puVar25 = puVar25 + 2;
              puVar27 = puVar27 + 0x10;
            } while (uVar32 < uVar3);
            iVar23 = iVar13 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_002726dc;
          }
          lVar30 = (long)iVar23;
          lVar33 = param_1 + lVar30 * 2;
          uVar11 = *(ushort *)(param_1 + lVar30 * 2);
          uVar12 = *(ushort *)(lVar33 + 2);
          if (0xff < *(ushort *)(lVar33 + 2)) {
            uVar12 = uVar26;
          }
          if (0xff < uVar11) {
            uVar11 = uVar26;
          }
          *(char *)((long)param_5 + lVar30) = (char)uVar11;
          *(char *)((long)param_5 + lVar30 + 1) = (char)uVar12;
          uVar12 = *(ushort *)(lVar33 + 6);
          if (0xff < *(ushort *)(lVar33 + 6)) {
            uVar12 = 0xff;
          }
          uVar28 = (undefined1)*(ushort *)(lVar33 + 4);
          if (0xff < *(ushort *)(lVar33 + 4)) {
            uVar28 = 0xff;
          }
          *(char *)((long)param_5 + lVar30 + 3) = (char)uVar12;
          *(undefined1 *)((long)param_5 + lVar30 + 2) = uVar28;
          if (iVar23 + 4 < iVar17) {
            lVar30 = (long)(iVar23 + 4);
            lVar33 = param_1 + lVar30 * 2;
            uVar12 = *(ushort *)(param_1 + lVar30 * 2);
            uVar28 = (undefined1)*(ushort *)(lVar33 + 2);
            if (0xff < *(ushort *)(lVar33 + 2)) {
              uVar28 = 0xff;
            }
            uVar31 = (undefined1)uVar12;
            if (0xff < uVar12) {
              uVar31 = 0xff;
            }
            *(undefined1 *)((long)param_5 + lVar30) = uVar31;
            *(undefined1 *)((long)param_5 + lVar30 + 1) = uVar28;
            uVar28 = (undefined1)*(ushort *)(lVar33 + 6);
            if (0xff < *(ushort *)(lVar33 + 6)) {
              uVar28 = 0xff;
            }
            uVar31 = (undefined1)*(ushort *)(lVar33 + 4);
            if (0xff < *(ushort *)(lVar33 + 4)) {
              uVar31 = 0xff;
            }
            *(undefined1 *)((long)param_5 + lVar30 + 3) = uVar28;
            *(undefined1 *)((long)param_5 + lVar30 + 2) = uVar31;
            if (iVar23 + 8 < iVar17) {
              lVar30 = (long)(iVar23 + 8);
              lVar33 = param_1 + lVar30 * 2;
              uVar12 = *(ushort *)(param_1 + lVar30 * 2);
              uVar28 = (undefined1)*(ushort *)(lVar33 + 2);
              if (0xff < *(ushort *)(lVar33 + 2)) {
                uVar28 = 0xff;
              }
              uVar31 = (undefined1)uVar12;
              if (0xff < uVar12) {
                uVar31 = 0xff;
              }
              *(undefined1 *)((long)param_5 + lVar30) = uVar31;
              *(undefined1 *)((long)param_5 + lVar30 + 1) = uVar28;
              uVar12 = *(ushort *)(lVar33 + 6);
              if (0xff < *(ushort *)(lVar33 + 6)) {
                uVar12 = uVar26;
              }
              uVar11 = *(ushort *)(lVar33 + 4);
              if (0xff < *(ushort *)(lVar33 + 4)) {
                uVar11 = uVar26;
              }
              *(char *)((long)param_5 + lVar30 + 3) = (char)uVar12;
              *(char *)((long)param_5 + lVar30 + 2) = (char)uVar11;
            }
          }
        }
      }
LAB_002726dc:
      if (iVar14 < iVar10) {
        lVar33 = (long)iVar14;
        uVar32 = iVar10 - iVar14;
        puVar8 = (undefined1 *)((long)param_5 + lVar33);
        puVar27 = (ushort *)(param_1 + lVar33 * 2);
        if ((puVar8 < (undefined1 *)(param_1 + (lVar33 + (ulong)uVar32) * 2) &&
             puVar27 < (ushort *)((long)param_5 + lVar33 + (ulong)uVar32)) || (uVar32 < 0x13)) {
          lVar33 = 0;
          do {
            uVar12 = puVar27[lVar33];
            if (0xff < puVar27[lVar33]) {
              uVar12 = uVar26;
            }
            puVar8[lVar33] = (char)uVar12;
            lVar33 = lVar33 + 1;
          } while (lVar33 != (ulong)(uint)((iVar10 + -1) - iVar14) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)puVar27 >> 1) & 7) & 7;
          if (uVar32 < uVar9) {
            uVar9 = uVar32;
          }
          iVar23 = iVar14;
          if (uVar9 != 0) {
            iVar23 = iVar14 + 1;
            uVar12 = *puVar27;
            if (0xff < *puVar27) {
              uVar12 = uVar26;
            }
            *puVar8 = (char)uVar12;
            if (uVar9 != 1) {
              lVar30 = (long)iVar23;
              iVar23 = iVar14 + 2;
              uVar12 = *(ushort *)(param_1 + lVar30 * 2);
              if (0xff < uVar12) {
                uVar12 = uVar26;
              }
              *(char *)((long)param_5 + lVar30) = (char)uVar12;
              if (uVar9 != 2) {
                lVar30 = (long)iVar23;
                iVar23 = iVar14 + 3;
                uVar26 = *(ushort *)(param_1 + lVar30 * 2);
                uVar28 = (undefined1)uVar26;
                if (0xff < uVar26) {
                  uVar28 = 0xff;
                }
                *(undefined1 *)((long)param_5 + lVar30) = uVar28;
                if (uVar9 != 3) {
                  lVar30 = (long)iVar23;
                  iVar23 = iVar14 + 4;
                  uVar26 = *(ushort *)(param_1 + lVar30 * 2);
                  uVar28 = (undefined1)uVar26;
                  if (0xff < uVar26) {
                    uVar28 = 0xff;
                  }
                  *(undefined1 *)((long)param_5 + lVar30) = uVar28;
                  if (uVar9 != 4) {
                    lVar30 = (long)iVar23;
                    iVar23 = iVar14 + 5;
                    uVar26 = *(ushort *)(param_1 + lVar30 * 2);
                    uVar28 = (undefined1)uVar26;
                    if (0xff < uVar26) {
                      uVar28 = 0xff;
                    }
                    *(undefined1 *)((long)param_5 + lVar30) = uVar28;
                    if (uVar9 != 5) {
                      lVar30 = (long)iVar23;
                      iVar23 = iVar14 + 6;
                      uVar26 = *(ushort *)(param_1 + lVar30 * 2);
                      uVar28 = (undefined1)uVar26;
                      if (0xff < uVar26) {
                        uVar28 = 0xff;
                      }
                      *(undefined1 *)((long)param_5 + lVar30) = uVar28;
                      if (uVar9 == 7) {
                        lVar30 = (long)iVar23;
                        iVar23 = iVar14 + 7;
                        uVar26 = *(ushort *)(param_1 + lVar30 * 2);
                        uVar28 = (undefined1)uVar26;
                        if (0xff < uVar26) {
                          uVar28 = 0xff;
                        }
                        *(undefined1 *)((long)param_5 + lVar30) = uVar28;
                      }
                    }
                  }
                }
              }
            }
          }
          uVar4 = ((uVar32 - uVar9) - 0x10 >> 4) + 1;
          iVar14 = uVar4 * 0x10;
          if (0xe < (uVar32 - 1) - uVar9) {
            uVar36 = 0;
            puVar27 = (ushort *)(param_1 + lVar33 * 2 + (ulong)uVar9 * 2);
            puVar25 = (undefined8 *)((long)param_5 + (ulong)uVar9 + lVar33);
            do {
              uVar36 = uVar36 + 1;
              auVar51._2_2_ = 0;
              auVar51._0_2_ = *puVar27;
              auVar51._4_2_ = puVar27[1];
              auVar51._6_2_ = 0;
              auVar51._8_2_ = puVar27[2];
              auVar51._10_2_ = 0;
              auVar51._12_2_ = puVar27[3];
              auVar51._14_2_ = 0;
              auVar45._2_2_ = 0;
              auVar45._0_2_ = puVar27[4];
              auVar45._4_2_ = puVar27[5];
              auVar45._6_2_ = 0;
              auVar45._8_2_ = puVar27[6];
              auVar45._10_2_ = 0;
              auVar45._12_2_ = puVar27[7];
              auVar45._14_2_ = 0;
              auVar19._8_4_ = 0xff;
              auVar19._0_8_ = 0xff000000ff;
              auVar19._12_4_ = 0xff;
              auVar52 = NEON_umin(auVar51,auVar19,4);
              auVar50._2_2_ = 0;
              auVar50._0_2_ = puVar27[8];
              auVar50._4_2_ = puVar27[9];
              auVar50._6_2_ = 0;
              auVar50._8_2_ = puVar27[10];
              auVar50._10_2_ = 0;
              auVar50._12_2_ = puVar27[0xb];
              auVar50._14_2_ = 0;
              auVar40._2_2_ = 0;
              auVar40._0_2_ = puVar27[0xc];
              auVar40._4_2_ = puVar27[0xd];
              auVar40._6_2_ = 0;
              auVar40._8_2_ = puVar27[0xe];
              auVar40._10_2_ = 0;
              auVar40._12_2_ = puVar27[0xf];
              auVar40._14_2_ = 0;
              auVar20._8_4_ = 0xff;
              auVar20._0_8_ = 0xff000000ff;
              auVar20._12_4_ = 0xff;
              auVar44 = NEON_umin(auVar45,auVar20,4);
              auVar21._8_4_ = 0xff;
              auVar21._0_8_ = 0xff000000ff;
              auVar21._12_4_ = 0xff;
              auVar47 = NEON_umin(auVar50,auVar21,4);
              auVar22._8_4_ = 0xff;
              auVar22._0_8_ = 0xff000000ff;
              auVar22._12_4_ = 0xff;
              auVar39 = NEON_umin(auVar40,auVar22,4);
              auVar41._0_8_ =
                   CONCAT17(auVar44[0xc],
                            CONCAT16(auVar44[8],
                                     CONCAT15(auVar44[4],
                                              CONCAT14(auVar44[0],
                                                       CONCAT13(auVar52[0xc],
                                                                CONCAT12(auVar52[8],
                                                                         CONCAT11(auVar52[4],
                                                                                  auVar52[0])))))));
              auVar41[8] = auVar47[0];
              auVar41[9] = auVar47[4];
              auVar41[10] = auVar47[8];
              auVar41[0xb] = auVar47[0xc];
              auVar41[0xc] = auVar39[0];
              auVar41[0xd] = auVar39[4];
              auVar41[0xe] = auVar39[8];
              auVar41[0xf] = auVar39[0xc];
              puVar25[1] = auVar41._8_8_;
              *puVar25 = auVar41._0_8_;
              puVar27 = puVar27 + 0x10;
              puVar25 = puVar25 + 2;
            } while (uVar36 < uVar4);
            iVar23 = iVar23 + iVar14;
            if (uVar32 - uVar9 == iVar14) goto LAB_00272a84;
          }
          iVar14 = iVar23 + 1;
          uVar26 = *(ushort *)(param_1 + (long)iVar23 * 2);
          uVar28 = (undefined1)uVar26;
          if (0xff < uVar26) {
            uVar28 = 0xff;
          }
          *(undefined1 *)((long)param_5 + (long)iVar23) = uVar28;
          if (iVar14 < iVar10) {
            iVar5 = iVar23 + 2;
            uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
            uVar28 = (undefined1)uVar26;
            if (0xff < uVar26) {
              uVar28 = 0xff;
            }
            *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
            if (iVar5 < iVar10) {
              iVar14 = iVar23 + 3;
              uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
              uVar28 = (undefined1)uVar26;
              if (0xff < uVar26) {
                uVar28 = 0xff;
              }
              *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
              if (iVar14 < iVar10) {
                iVar5 = iVar23 + 4;
                uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                uVar28 = (undefined1)uVar26;
                if (0xff < uVar26) {
                  uVar28 = 0xff;
                }
                *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                if (iVar5 < iVar10) {
                  iVar14 = iVar23 + 5;
                  uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
                  uVar28 = (undefined1)uVar26;
                  if (0xff < uVar26) {
                    uVar28 = 0xff;
                  }
                  *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
                  if (iVar14 < iVar10) {
                    iVar5 = iVar23 + 6;
                    uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                    uVar28 = (undefined1)uVar26;
                    if (0xff < uVar26) {
                      uVar28 = 0xff;
                    }
                    *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                    if (iVar5 < iVar10) {
                      iVar14 = iVar23 + 7;
                      uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
                      uVar28 = (undefined1)uVar26;
                      if (0xff < uVar26) {
                        uVar28 = 0xff;
                      }
                      *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
                      if (iVar14 < iVar10) {
                        iVar5 = iVar23 + 8;
                        uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                        uVar28 = (undefined1)uVar26;
                        if (0xff < uVar26) {
                          uVar28 = 0xff;
                        }
                        *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                        if (iVar5 < iVar10) {
                          iVar14 = iVar23 + 9;
                          uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
                          uVar28 = (undefined1)uVar26;
                          if (0xff < uVar26) {
                            uVar28 = 0xff;
                          }
                          *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
                          if (iVar14 < iVar10) {
                            iVar5 = iVar23 + 10;
                            uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                            uVar28 = (undefined1)uVar26;
                            if (0xff < uVar26) {
                              uVar28 = 0xff;
                            }
                            *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                            if (iVar5 < iVar10) {
                              iVar14 = iVar23 + 0xb;
                              uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
                              uVar28 = (undefined1)uVar26;
                              if (0xff < uVar26) {
                                uVar28 = 0xff;
                              }
                              *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
                              if (iVar14 < iVar10) {
                                iVar5 = iVar23 + 0xc;
                                uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                                uVar28 = (undefined1)uVar26;
                                if (0xff < uVar26) {
                                  uVar28 = 0xff;
                                }
                                *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                                if (iVar5 < iVar10) {
                                  iVar14 = iVar23 + 0xd;
                                  uVar26 = *(ushort *)(param_1 + (long)iVar5 * 2);
                                  uVar28 = (undefined1)uVar26;
                                  if (0xff < uVar26) {
                                    uVar28 = 0xff;
                                  }
                                  *(undefined1 *)((long)param_5 + (long)iVar5) = uVar28;
                                  if (iVar14 < iVar10) {
                                    iVar23 = iVar23 + 0xe;
                                    uVar26 = *(ushort *)(param_1 + (long)iVar14 * 2);
                                    uVar28 = (undefined1)uVar26;
                                    if (0xff < uVar26) {
                                      uVar28 = 0xff;
                                    }
                                    *(undefined1 *)((long)param_5 + (long)iVar14) = uVar28;
                                    if (iVar23 < iVar10) {
                                      uVar26 = *(ushort *)(param_1 + (long)iVar23 * 2);
                                      uVar28 = (undefined1)uVar26;
                                      if (0xff < uVar26) {
                                        uVar28 = 0xff;
                                      }
                                      *(undefined1 *)((long)param_5 + (long)iVar23) = uVar28;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00272a84:
      iVar34 = iVar34 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar34 != 0);
  }
  return;
}


==================================================================

### FUNC 00272b54 (416 bytes) name=FUN_00272b54

void FUN_00272b54(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  short sVar5;
  short sVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined1 auVar10 [16];
  undefined1 (*pauVar11) [16];
  undefined1 *puVar12;
  undefined8 *puVar13;
  short *psVar14;
  long lVar15;
  undefined1 (*pauVar16) [16];
  int iVar17;
  int iVar18;
  long lVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  
  iVar18 = param_7[1];
  iVar4 = *param_7;
  if (iVar18 != 0) {
    uVar8 = iVar4 - 0x10U >> 4;
    iVar7 = (uVar8 + 1) * 0x10;
    if (iVar4 + -0xf < 1) {
      iVar7 = 0;
    }
    uVar9 = (uint)((iVar4 + -4) - iVar7) >> 2;
    lVar19 = (long)iVar7;
    do {
      if (0 < iVar4 + -0xf) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar13 = param_5;
        do {
          pauVar16 = pauVar11 + -1;
          puVar12 = *pauVar11;
          auVar10 = *pauVar11;
          pauVar11 = pauVar11 + 2;
          uVar20 = NEON_sqxtun(*(undefined8 *)puVar12,auVar10,2);
          uVar21 = NEON_sqxtun(*(undefined8 *)*pauVar16,*pauVar16,2);
          puVar13[1] = uVar20;
          *puVar13 = uVar21;
          puVar13 = puVar13 + 2;
        } while (pauVar11 != (undefined1 (*) [16])(param_1 + (ulong)uVar8 * 0x20 + 0x30));
      }
      iVar17 = iVar7;
      if (iVar7 < iVar4 + -3) {
        puVar12 = (undefined1 *)((long)param_5 + lVar19);
        psVar14 = (short *)(param_1 + lVar19 * 2);
        do {
          sVar5 = *psVar14;
          puVar1 = puVar12 + 4;
          sVar6 = psVar14[1];
          uVar2 = (int)sVar5;
          if (0xff < (uint)(int)sVar5) {
            uVar2 = -(uint)(0 < sVar5);
          }
          uVar3 = (int)sVar6;
          if (0xff < (uint)(int)sVar6) {
            uVar3 = -(uint)(0 < sVar6);
          }
          *puVar12 = (char)uVar2;
          puVar12[1] = (char)uVar3;
          sVar5 = psVar14[2];
          sVar6 = psVar14[3];
          uVar2 = (int)sVar5;
          if (0xff < (uint)(int)sVar5) {
            uVar2 = -(uint)(0 < sVar5);
          }
          uVar3 = (int)sVar6;
          if (0xff < (uint)(int)sVar6) {
            uVar3 = -(uint)(0 < sVar6);
          }
          puVar12[2] = (char)uVar2;
          puVar12[3] = (char)uVar3;
          puVar12 = puVar1;
          psVar14 = psVar14 + 4;
          iVar17 = iVar7 + 4 + uVar9 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar19 + 4 + (ulong)uVar9 * 4));
      }
      if (iVar17 < iVar4) {
        lVar15 = 0;
        do {
          sVar5 = *(short *)(param_1 + (long)iVar17 * 2 + lVar15 * 2);
          uVar2 = (int)sVar5;
          if (0xff < (uint)(int)sVar5) {
            uVar2 = -(uint)(0 < sVar5);
          }
          *(char *)((long)param_5 + lVar15 + iVar17) = (char)uVar2;
          lVar15 = lVar15 + 1;
        } while (lVar15 != (ulong)(uint)((iVar4 + -1) - iVar17) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 00272cf4 (1996 bytes) name=FUN_00272cf4

/* WARNING: Removing unreachable block (ram,0x00273458) */
/* WARNING: Removing unreachable block (ram,0x0027346c) */
/* WARNING: Removing unreachable block (ram,0x00273474) */

void FUN_00272cf4(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  char *pcVar5;
  int iVar6;
  undefined8 *puVar7;
  uint uVar8;
  int iVar9;
  char cVar10;
  char cVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  long lVar18;
  char *pcVar19;
  char *pcVar20;
  undefined8 *puVar21;
  uint uVar22;
  int iVar23;
  long lVar24;
  long lVar25;
  uint uVar26;
  undefined8 uVar27;
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  
  iVar23 = param_7[1];
  iVar9 = *param_7;
  if (iVar23 != 0) {
    iVar14 = iVar9 + -7;
    iVar1 = (iVar9 - 8U & 0xfffffff8) + 8;
    if (iVar14 < 1) {
      iVar1 = 0;
    }
    uVar16 = (iVar9 + -4) - iVar1;
    uVar13 = uVar16 >> 2;
    lVar24 = (long)iVar1;
    uVar2 = (uVar13 - 3 >> 2) + 1;
    iVar15 = iVar9 + -3;
    iVar6 = iVar1 + 4 + uVar13 * 4;
    do {
      lVar18 = 0;
      if (0 < iVar14) {
        do {
          puVar21 = (undefined8 *)(param_1 + lVar18);
          puVar7 = (undefined8 *)(param_5 + lVar18);
          lVar18 = lVar18 + 8;
          uVar27 = *puVar21;
          auVar28._0_8_ =
               CONCAT26((short)(char)((ulong)uVar27 >> 0x18),
                        CONCAT24((short)(char)((ulong)uVar27 >> 0x10),
                                 CONCAT22((short)(char)((ulong)uVar27 >> 8),(short)(char)uVar27)));
          auVar28._8_2_ = (short)(char)((ulong)uVar27 >> 0x20);
          auVar28._10_2_ = (short)(char)((ulong)uVar27 >> 0x28);
          auVar28._12_2_ = (short)(char)((ulong)uVar27 >> 0x30);
          auVar28._14_2_ = (short)(char)((ulong)uVar27 >> 0x38);
          uVar27 = NEON_sqxtun(auVar28._0_8_,auVar28,2);
          *puVar7 = uVar27;
        } while ((int)lVar18 < iVar14);
      }
      iVar12 = iVar1;
      if (iVar1 < iVar15) {
        pcVar19 = (char *)(param_1 + lVar24);
        pcVar20 = (char *)(param_5 + lVar24);
        iVar12 = iVar6;
        if ((pcVar19 < (char *)(param_5 + lVar24 + 0x40) &&
             pcVar20 < (char *)(param_1 + lVar24 + 0x40)) || (uVar13 + 1 < 4)) {
          do {
            cVar11 = pcVar19[1];
            pcVar5 = pcVar19 + 4;
            cVar10 = *pcVar19;
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            pcVar20[1] = cVar11;
                    /* catch() { ... } // from try @ 00273330 with catch @ 00273454 */
            *pcVar20 = cVar10;
            cVar11 = pcVar19[2];
            pcVar20[3] = pcVar19[3];
            pcVar20[2] = cVar11;
            pcVar19 = pcVar5;
            pcVar20 = pcVar20 + 4;
          } while (pcVar5 != (char *)(param_1 + lVar24 + 4 + (ulong)uVar13 * 4));
        }
        else {
          iVar17 = iVar1;
          if (0xb < uVar16) {
            uVar22 = 0;
            do {
              uVar22 = uVar22 + 1;
              auVar36._0_4_ = (int)(short)*pcVar19;
              auVar36._4_4_ = (int)(short)pcVar19[1];
              auVar36._8_4_ = (int)(short)pcVar19[2];
              auVar36._12_4_ = (int)(short)pcVar19[3];
              auVar34._0_4_ = (int)(short)pcVar19[8];
              auVar34._4_4_ = (int)(short)pcVar19[9];
              auVar34._8_4_ = (int)(short)pcVar19[10];
              auVar34._12_4_ = (int)(short)pcVar19[0xb];
              auVar38._0_4_ = (int)(short)pcVar19[4];
              auVar38._4_4_ = (int)(short)pcVar19[5];
              auVar38._8_4_ = (int)(short)pcVar19[6];
              auVar38._12_4_ = (int)(short)pcVar19[7];
              auVar33._0_4_ = (int)(short)pcVar19[0xc];
              auVar33._4_4_ = (int)(short)pcVar19[0xd];
              auVar33._8_4_ = (int)(short)pcVar19[0xe];
              auVar33._12_4_ = (int)(short)pcVar19[0xf];
              auVar36 = NEON_smax(auVar36,ZEXT816(0),4);
              auVar34 = NEON_smax(auVar34,ZEXT816(0),4);
              auVar31 = NEON_smax(auVar38,ZEXT816(0),4);
              auVar28 = NEON_smax(auVar33,ZEXT816(0),4);
              auVar31._0_8_ =
                   CONCAT17(auVar31[0xc],
                            CONCAT16(auVar31[8],
                                     CONCAT15(auVar31[4],
                                              CONCAT14(auVar31[0],
                                                       CONCAT13(auVar36[0xc],
                                                                CONCAT12(auVar36[8],
                                                                         CONCAT11(auVar36[4],
                                                                                  auVar36[0])))))));
              auVar31[8] = auVar34[0];
              auVar31[9] = auVar34[4];
              auVar31[10] = auVar34[8];
              auVar31[0xb] = auVar34[0xc];
              auVar31[0xc] = auVar28[0];
              auVar31[0xd] = auVar28[4];
              auVar31[0xe] = auVar28[8];
              auVar31[0xf] = auVar28[0xc];
              *(long *)(pcVar20 + 8) = auVar31._8_8_;
              *(undefined8 *)pcVar20 = auVar31._0_8_;
              pcVar19 = pcVar19 + 0x10;
              pcVar20 = pcVar20 + 0x10;
            } while (uVar22 < uVar2);
            iVar17 = iVar1 + uVar2 * 0x10;
            if (uVar13 + 1 == uVar2 * 4) goto LAB_00272f5c;
          }
          lVar18 = (long)iVar17;
          cVar10 = *(char *)(param_1 + lVar18);
          cVar11 = *(char *)(param_1 + lVar18 + 1);
          if (cVar11 < '\0') {
            cVar11 = '\0';
          }
          if (cVar10 < '\0') {
            cVar10 = '\0';
          }
          *(char *)(param_5 + lVar18) = cVar10;
          *(char *)(param_5 + lVar18 + 1) = cVar11;
          cVar11 = *(char *)(param_1 + lVar18 + 3);
          cVar10 = *(char *)(param_1 + lVar18 + 2);
          if (cVar11 < '\0') {
            cVar11 = '\0';
          }
          if (cVar10 < '\0') {
            cVar10 = '\0';
          }
          *(char *)(param_5 + lVar18 + 2) = cVar10;
          *(char *)(param_5 + lVar18 + 3) = cVar11;
          if (iVar17 + 4 < iVar15) {
            lVar18 = (long)(iVar17 + 4);
            cVar10 = *(char *)(param_1 + lVar18);
            cVar11 = *(char *)(param_1 + lVar18 + 1);
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            if (cVar10 < '\0') {
              cVar10 = '\0';
            }
            *(char *)(param_5 + lVar18) = cVar10;
            *(char *)(param_5 + lVar18 + 1) = cVar11;
            cVar11 = *(char *)(param_1 + lVar18 + 3);
            cVar10 = *(char *)(param_1 + lVar18 + 2);
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            if (cVar10 < '\0') {
              cVar10 = '\0';
            }
            *(char *)(param_5 + lVar18 + 2) = cVar10;
            *(char *)(param_5 + lVar18 + 3) = cVar11;
            if (iVar17 + 8 < iVar15) {
              lVar18 = (long)(iVar17 + 8);
              cVar10 = *(char *)(param_1 + lVar18);
              cVar11 = *(char *)(param_1 + lVar18 + 1);
              if (cVar11 < '\0') {
                cVar11 = '\0';
              }
              if (cVar10 < '\0') {
                cVar10 = '\0';
              }
              *(char *)(param_5 + lVar18) = cVar10;
              *(char *)(param_5 + lVar18 + 1) = cVar11;
              cVar11 = *(char *)(param_1 + lVar18 + 3);
              cVar10 = *(char *)(param_1 + lVar18 + 2);
              if (cVar11 < '\0') {
                cVar11 = '\0';
              }
              if (cVar10 < '\0') {
                cVar10 = '\0';
              }
              *(char *)(param_5 + lVar18 + 2) = cVar10;
              *(char *)(param_5 + lVar18 + 3) = cVar11;
            }
          }
        }
      }
LAB_00272f5c:
      if (iVar12 < iVar9) {
        lVar18 = (long)iVar12;
        uVar22 = iVar9 - iVar12;
        pcVar19 = (char *)(param_1 + lVar18);
        pcVar20 = (char *)(param_5 + lVar18);
        if ((pcVar19 < (char *)(param_5 + lVar18 + 0x10) &&
             pcVar20 < (char *)(param_1 + lVar18 + 0x10)) || (uVar22 < 0x13)) {
          lVar18 = 0;
          do {
            cVar11 = pcVar19[lVar18];
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            pcVar20[lVar18] = cVar11;
            lVar18 = lVar18 + 1;
          } while (lVar18 != (ulong)(uint)((iVar9 + -1) - iVar12) + 1);
        }
        else {
          uVar8 = -(int)pcVar19 & 0xf;
          if (uVar22 < uVar8) {
            uVar8 = uVar22;
          }
          iVar17 = iVar12;
          if (uVar8 != 0) {
            cVar11 = *pcVar19;
            iVar17 = iVar12 + 1;
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            *pcVar20 = cVar11;
            if (uVar8 != 1) {
              lVar25 = (long)iVar17;
              iVar17 = iVar12 + 2;
              cVar11 = *(char *)(param_1 + lVar25);
              if (cVar11 < '\0') {
                cVar11 = '\0';
              }
              *(char *)(param_5 + lVar25) = cVar11;
              if (uVar8 != 2) {
                lVar25 = (long)iVar17;
                iVar17 = iVar12 + 3;
                cVar11 = *(char *)(param_1 + lVar25);
                if (cVar11 < '\0') {
                  cVar11 = '\0';
                }
                *(char *)(param_5 + lVar25) = cVar11;
                if (uVar8 != 3) {
                  lVar25 = (long)iVar17;
                  iVar17 = iVar12 + 4;
                  cVar11 = *(char *)(param_1 + lVar25);
                  if (cVar11 < '\0') {
                    cVar11 = '\0';
                  }
                  *(char *)(param_5 + lVar25) = cVar11;
                  if (uVar8 != 4) {
                    lVar25 = (long)iVar17;
                    iVar17 = iVar12 + 5;
                    cVar11 = *(char *)(param_1 + lVar25);
                    if (cVar11 < '\0') {
                      cVar11 = '\0';
                    }
                    *(char *)(param_5 + lVar25) = cVar11;
                    if (uVar8 != 5) {
                      lVar25 = (long)iVar17;
                      iVar17 = iVar12 + 6;
                      cVar11 = *(char *)(param_1 + lVar25);
                      if (cVar11 < '\0') {
                        cVar11 = '\0';
                      }
                      *(char *)(param_5 + lVar25) = cVar11;
                      if (uVar8 != 6) {
                        lVar25 = (long)iVar17;
                        iVar17 = iVar12 + 7;
                        cVar11 = *(char *)(param_1 + lVar25);
                        if (cVar11 < '\0') {
                          cVar11 = '\0';
                        }
                        *(char *)(param_5 + lVar25) = cVar11;
                        if (uVar8 != 7) {
                          lVar25 = (long)iVar17;
                          iVar17 = iVar12 + 8;
                          cVar11 = *(char *)(param_1 + lVar25);
                          if (cVar11 < '\0') {
                            cVar11 = '\0';
                          }
                          *(char *)(param_5 + lVar25) = cVar11;
                          if (uVar8 != 8) {
                            lVar25 = (long)iVar17;
                            iVar17 = iVar12 + 9;
                            cVar11 = *(char *)(param_1 + lVar25);
                            if (cVar11 < '\0') {
                              cVar11 = '\0';
                            }
                            *(char *)(param_5 + lVar25) = cVar11;
                            if (uVar8 != 9) {
                              lVar25 = (long)iVar17;
                              iVar17 = iVar12 + 10;
                              cVar11 = *(char *)(param_1 + lVar25);
                              if (cVar11 < '\0') {
                                cVar11 = '\0';
                              }
                              *(char *)(param_5 + lVar25) = cVar11;
                              if (uVar8 != 10) {
                                lVar25 = (long)iVar17;
                                iVar17 = iVar12 + 0xb;
                                cVar11 = *(char *)(param_1 + lVar25);
                                if (cVar11 < '\0') {
                                  cVar11 = '\0';
                                }
                                *(char *)(param_5 + lVar25) = cVar11;
                                if (uVar8 != 0xb) {
                                  lVar25 = (long)iVar17;
                                  iVar17 = iVar12 + 0xc;
                                  cVar11 = *(char *)(param_1 + lVar25);
                                  if (cVar11 < '\0') {
                                    cVar11 = '\0';
                                  }
                    /* try { // try from 00273124 to 0037332f has its CatchHandler @ 00273124
                       catch() { ... } // from try @ 00273124 with catch @ 00273124
                       catch() { ... } // from try @ 00273424 with catch @ 00273124 */
                                  *(char *)(param_5 + lVar25) = cVar11;
                                  if (uVar8 != 0xc) {
                                    lVar25 = (long)iVar17;
                                    iVar17 = iVar12 + 0xd;
                                    cVar11 = *(char *)(param_1 + lVar25);
                                    if (cVar11 < '\0') {
                                      cVar11 = '\0';
                                    }
                                    *(char *)(param_5 + lVar25) = cVar11;
                                    if (uVar8 != 0xd) {
                                      lVar25 = (long)iVar17;
                                      iVar17 = iVar12 + 0xe;
                                      cVar11 = *(char *)(param_1 + lVar25);
                                      if (cVar11 < '\0') {
                                        cVar11 = '\0';
                                      }
                                      *(char *)(param_5 + lVar25) = cVar11;
                                      if (uVar8 == 0xf) {
                                        lVar25 = (long)iVar17;
                                        iVar17 = iVar12 + 0xf;
                                        cVar11 = *(char *)(param_1 + lVar25);
                                        if (cVar11 < '\0') {
                                          cVar11 = '\0';
                                        }
                                        *(char *)(param_5 + lVar25) = cVar11;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar3 = ((uVar22 - uVar8) - 0x10 >> 4) + 1;
          iVar12 = uVar3 * 0x10;
          if (0xe < (uVar22 - 1) - uVar8) {
            uVar26 = 0;
            puVar21 = (undefined8 *)(param_5 + lVar18 + (ulong)uVar8);
            pcVar19 = (char *)(param_1 + lVar18 + (ulong)uVar8);
            do {
              uVar26 = uVar26 + 1;
              auVar37._0_4_ = (int)(short)*pcVar19;
              auVar37._4_4_ = (int)(short)pcVar19[1];
              auVar37._8_4_ = (int)(short)pcVar19[2];
              auVar37._12_4_ = (int)(short)pcVar19[3];
              auVar35._0_4_ = (int)(short)pcVar19[8];
              auVar35._4_4_ = (int)(short)pcVar19[9];
              auVar35._8_4_ = (int)(short)pcVar19[10];
              auVar35._12_4_ = (int)(short)pcVar19[0xb];
              auVar32._0_4_ = (int)(short)pcVar19[4];
              auVar32._4_4_ = (int)(short)pcVar19[5];
              auVar32._8_4_ = (int)(short)pcVar19[6];
              auVar32._12_4_ = (int)(short)pcVar19[7];
              auVar29._0_4_ = (int)(short)pcVar19[0xc];
              auVar29._4_4_ = (int)(short)pcVar19[0xd];
              auVar29._8_4_ = (int)(short)pcVar19[0xe];
              auVar29._12_4_ = (int)(short)pcVar19[0xf];
              auVar38 = NEON_smax(auVar37,ZEXT816(0),4);
              auVar31 = NEON_smax(auVar35,ZEXT816(0),4);
              auVar33 = NEON_smax(auVar32,ZEXT816(0),4);
              auVar28 = NEON_smax(auVar29,ZEXT816(0),4);
              auVar30._0_8_ =
                   CONCAT17(auVar33[0xc],
                            CONCAT16(auVar33[8],
                                     CONCAT15(auVar33[4],
                                              CONCAT14(auVar33[0],
                                                       CONCAT13(auVar38[0xc],
                                                                CONCAT12(auVar38[8],
                                                                         CONCAT11(auVar38[4],
                                                                                  auVar38[0])))))));
              auVar30[8] = auVar31[0];
              auVar30[9] = auVar31[4];
              auVar30[10] = auVar31[8];
              auVar30[0xb] = auVar31[0xc];
              auVar30[0xc] = auVar28[0];
              auVar30[0xd] = auVar28[4];
              auVar30[0xe] = auVar28[8];
              auVar30[0xf] = auVar28[0xc];
              puVar21[1] = auVar30._8_8_;
              *puVar21 = auVar30._0_8_;
              puVar21 = puVar21 + 2;
              pcVar19 = pcVar19 + 0x10;
            } while (uVar26 < uVar3);
            iVar17 = iVar17 + iVar12;
            if (uVar22 - uVar8 == iVar12) goto LAB_002733f0;
          }
          iVar12 = iVar17 + 1;
          cVar11 = *(char *)(param_1 + iVar17);
          if (cVar11 < '\0') {
            cVar11 = '\0';
          }
          *(char *)(param_5 + iVar17) = cVar11;
          if (iVar12 < iVar9) {
            iVar4 = iVar17 + 2;
            cVar11 = *(char *)(param_1 + iVar12);
            if (cVar11 < '\0') {
              cVar11 = '\0';
            }
            *(char *)(param_5 + iVar12) = cVar11;
            if (iVar4 < iVar9) {
              iVar12 = iVar17 + 3;
              cVar11 = *(char *)(param_1 + iVar4);
              if (cVar11 < '\0') {
                cVar11 = '\0';
              }
              *(char *)(param_5 + iVar4) = cVar11;
              if (iVar12 < iVar9) {
                iVar4 = iVar17 + 4;
                cVar11 = *(char *)(param_1 + iVar12);
                if (cVar11 < '\0') {
                  cVar11 = '\0';
                }
                *(char *)(param_5 + iVar12) = cVar11;
                if (iVar4 < iVar9) {
                  iVar12 = iVar17 + 5;
                  cVar11 = *(char *)(param_1 + iVar4);
                  if (cVar11 < '\0') {
                    cVar11 = '\0';
                  }
                  *(char *)(param_5 + iVar4) = cVar11;
                  if (iVar12 < iVar9) {
                    iVar4 = iVar17 + 6;
                    cVar11 = *(char *)(param_1 + iVar12);
                    if (cVar11 < '\0') {
                      cVar11 = '\0';
                    }
                    *(char *)(param_5 + iVar12) = cVar11;
                    if (iVar4 < iVar9) {
                      iVar12 = iVar17 + 7;
                      cVar11 = *(char *)(param_1 + iVar4);
                      if (cVar11 < '\0') {
                        cVar11 = '\0';
                      }
                      *(char *)(param_5 + iVar4) = cVar11;
                      if (iVar12 < iVar9) {
                        iVar4 = iVar17 + 8;
                        cVar11 = *(char *)(param_1 + iVar12);
                        if (cVar11 < '\0') {
                          cVar11 = '\0';
                        }
                        *(char *)(param_5 + iVar12) = cVar11;
                        if (iVar4 < iVar9) {
                          iVar12 = iVar17 + 9;
                          cVar11 = *(char *)(param_1 + iVar4);
                          if (cVar11 < '\0') {
                            cVar11 = '\0';
                          }
                    /* try { // try from 00273330 to 00373423 has its CatchHandler @ 00273454 */
                          *(char *)(param_5 + iVar4) = cVar11;
                          if (iVar12 < iVar9) {
                            iVar4 = iVar17 + 10;
                            cVar11 = *(char *)(param_1 + iVar12);
                            if (cVar11 < '\0') {
                              cVar11 = '\0';
                            }
                            *(char *)(param_5 + iVar12) = cVar11;
                            if (iVar4 < iVar9) {
                              iVar12 = iVar17 + 0xb;
                              cVar11 = *(char *)(param_1 + iVar4);
                              if (cVar11 < '\0') {
                                cVar11 = '\0';
                              }
                              *(char *)(param_5 + iVar4) = cVar11;
                              if (iVar12 < iVar9) {
                                iVar4 = iVar17 + 0xc;
                                cVar11 = *(char *)(param_1 + iVar12);
                                if (cVar11 < '\0') {
                                  cVar11 = '\0';
                                }
                                *(char *)(param_5 + iVar12) = cVar11;
                                if (iVar4 < iVar9) {
                                  iVar12 = iVar17 + 0xd;
                                  cVar11 = *(char *)(param_1 + iVar4);
                                  if (cVar11 < '\0') {
                                    cVar11 = '\0';
                                  }
                                  *(char *)(param_5 + iVar4) = cVar11;
                                  if (iVar12 < iVar9) {
                                    iVar17 = iVar17 + 0xe;
                                    cVar11 = *(char *)(param_1 + iVar12);
                                    if (cVar11 < '\0') {
                                      cVar11 = '\0';
                                    }
                                    *(char *)(param_5 + iVar12) = cVar11;
                                    if (iVar17 < iVar9) {
                                      cVar11 = *(char *)(param_1 + iVar17);
                                      if (cVar11 < '\0') {
                                        cVar11 = '\0';
                                      }
                                      *(char *)(param_5 + iVar17) = cVar11;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002733f0:
      iVar23 = iVar23 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 002734c0 (16 bytes) name=FUN_002734c0

void FUN_002734c0(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f5ad0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 002734d0 (44 bytes) name=FUN_002734d0

void FUN_002734d0(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f5ad0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002734fc (1800 bytes) name=FUN_002734fc

void FUN_002734fc(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7,double *param_8)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  byte bVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  float *pfVar18;
  undefined8 *puVar19;
  byte *pbVar20;
  long lVar21;
  long lVar22;
  int iVar23;
  long lVar24;
  uint uVar25;
  uint uVar26;
  undefined1 uVar27;
  undefined8 uVar28;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  float fVar34;
  float fVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  
  iVar23 = param_7[1];
  iVar9 = *param_7;
  fVar34 = (float)*param_8;
  fVar35 = (float)param_8[1];
  if (iVar23 != 0) {
    uVar13 = iVar9 - 8U >> 3;
    iVar11 = (uVar13 + 1) * 8;
    if (iVar9 + -7 < 1) {
      iVar11 = 0;
    }
    uVar16 = (iVar9 + -4) - iVar11;
    lVar24 = (long)iVar11;
    uVar14 = uVar16 >> 2;
    uVar2 = uVar14 + 1;
    uVar3 = (uVar14 - 3 >> 2) + 1;
    iVar7 = iVar11 + 4 + uVar14 * 4;
    lVar1 = lVar24 + (ulong)uVar2 * 4;
    iVar15 = iVar9 + -3;
                    /* try { // try from 002735bc to 003736b3 has its CatchHandler @ 002735bc
                       catch() { ... } // from try @ 002735bc with catch @ 002735bc
                       catch() { ... } // from try @ 002736bc with catch @ 002735bc */
    do {
      if (0 < iVar9 + -7) {
        pfVar18 = (float *)(param_5 + 0x10);
        puVar19 = param_1;
        do {
          uVar28 = *puVar19;
          uVar27 = (undefined1)((ulong)uVar28 >> 8);
          auVar31._6_2_ = 0;
          auVar31._0_6_ =
               (uint6)CONCAT14(uVar27,(uint)CONCAT12(uVar27,(ushort)(byte)uVar28)) & 0xffff0000ffff;
          auVar31[8] = (char)((ulong)uVar28 >> 0x10);
          auVar31._9_3_ = 0;
          auVar31[0xc] = (char)((ulong)uVar28 >> 0x18);
          auVar31._13_3_ = 0;
          auVar31 = NEON_ucvtf(auVar31,4);
          auVar29._1_3_ = 0;
          auVar29[0] = (byte)((ulong)uVar28 >> 0x20);
          auVar29[4] = (char)((ulong)uVar28 >> 0x28);
          auVar29._5_3_ = 0;
          auVar29[8] = (char)((ulong)uVar28 >> 0x30);
          auVar29._9_3_ = 0;
          auVar29[0xc] = (char)((ulong)uVar28 >> 0x38);
          auVar29._13_3_ = 0;
          auVar29 = NEON_ucvtf(auVar29,4);
          auVar37._0_8_ = CONCAT44(fVar35 + auVar31._4_4_ * fVar34,fVar35 + auVar31._0_4_ * fVar34);
          auVar37._8_4_ = fVar35 + auVar31._8_4_ * fVar34;
          auVar37._12_4_ = fVar35 + auVar31._12_4_ * fVar34;
          *(long *)(pfVar18 + -2) = auVar37._8_8_;
          *(undefined8 *)(pfVar18 + -4) = auVar37._0_8_;
          pfVar18[2] = fVar35 + auVar29._8_4_ * fVar34;
          pfVar18[3] = fVar35 + auVar29._12_4_ * fVar34;
          *pfVar18 = fVar35 + auVar29._0_4_ * fVar34;
          pfVar18[1] = fVar35 + auVar29._4_4_ * fVar34;
          pfVar18 = pfVar18 + 8;
          puVar19 = puVar19 + 1;
        } while (pfVar18 != (float *)(param_5 + (ulong)uVar13 * 0x20 + 0x30));
      }
      iVar12 = iVar11;
      if (iVar11 < iVar15) {
        pfVar18 = (float *)(param_5 + lVar24 * 4);
        pbVar20 = (byte *)((long)param_1 + lVar24);
        iVar12 = iVar7;
        if ((pfVar18 < (float *)((long)param_1 + lVar1) && pbVar20 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 4)) {
          do {
            pbVar6 = pbVar20 + 4;
            bVar10 = *pbVar20;
            pfVar18[1] = fVar35 + (float)pbVar20[1] * fVar34;
            *pfVar18 = fVar35 + (float)bVar10 * fVar34;
            bVar10 = pbVar20[2];
            pfVar18[3] = fVar35 + (float)pbVar20[3] * fVar34;
            pfVar18[2] = fVar35 + (float)bVar10 * fVar34;
            pfVar18 = pfVar18 + 4;
            pbVar20 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar24 + 4 + (ulong)uVar14 * 4));
        }
        else {
          iVar17 = iVar11;
          if (0xb < uVar16) {
            uVar26 = 0;
            do {
              uVar26 = uVar26 + 1;
              auVar39._6_2_ = 0;
              auVar39._0_6_ =
                   (uint6)CONCAT14(pbVar20[1],(uint)CONCAT12(pbVar20[1],(ushort)*pbVar20)) &
                   0xffff0000ffff;
              auVar39[8] = pbVar20[2];
              auVar39._9_3_ = 0;
              auVar39[0xc] = pbVar20[3];
              auVar39._13_3_ = 0;
              auVar32._1_3_ = 0;
              auVar32[0] = pbVar20[4];
              auVar32[4] = pbVar20[5];
              auVar32._5_3_ = 0;
              auVar32[8] = pbVar20[6];
              auVar32._9_3_ = 0;
              auVar32[0xc] = pbVar20[7];
              auVar32._13_3_ = 0;
              auVar36._6_2_ = 0;
              auVar36._0_6_ =
                   (uint6)CONCAT14(pbVar20[9],(uint)CONCAT12(pbVar20[9],(ushort)pbVar20[8])) &
                   0xffff0000ffff;
              auVar36[8] = pbVar20[10];
              auVar36._9_3_ = 0;
              auVar36[0xc] = pbVar20[0xb];
              auVar36._13_3_ = 0;
              auVar43._1_3_ = 0;
              auVar43[0] = pbVar20[0xc];
              auVar43[4] = pbVar20[0xd];
              auVar43._5_3_ = 0;
              auVar43[8] = pbVar20[0xe];
              auVar43._9_3_ = 0;
              auVar43[0xc] = pbVar20[0xf];
              auVar43._13_3_ = 0;
              auVar40 = NEON_scvtf(auVar39,4);
              auVar31 = NEON_scvtf(auVar32,4);
              auVar37 = NEON_scvtf(auVar36,4);
              auVar29 = NEON_scvtf(auVar43,4);
                    /* try { // try from 002736b4 to 003736bb has its CatchHandler @ 002736f8 */
              *(ulong *)(pfVar18 + 2) =
                   CONCAT44(fVar35 + fVar34 * auVar40._12_4_,fVar35 + fVar34 * auVar40._8_4_);
              *(ulong *)pfVar18 =
                   CONCAT44(fVar35 + fVar34 * auVar40._4_4_,fVar35 + fVar34 * auVar40._0_4_);
                    /* try { // try from 002736bc to 0037370b has its CatchHandler @ 002735bc */
              pfVar18[6] = fVar35 + fVar34 * auVar31._8_4_;
              pfVar18[7] = fVar35 + fVar34 * auVar31._12_4_;
              pfVar18[4] = fVar35 + fVar34 * auVar31._0_4_;
              pfVar18[5] = fVar35 + fVar34 * auVar31._4_4_;
              auVar40._0_8_ =
                   CONCAT44(fVar35 + fVar34 * auVar37._4_4_,fVar35 + fVar34 * auVar37._0_4_);
              auVar40._8_4_ = fVar35 + fVar34 * auVar37._8_4_;
              auVar40._12_4_ = fVar35 + fVar34 * auVar37._12_4_;
              *(long *)(pfVar18 + 10) = auVar40._8_8_;
              *(undefined8 *)(pfVar18 + 8) = auVar40._0_8_;
              pfVar18[0xe] = fVar35 + fVar34 * auVar29._8_4_;
              pfVar18[0xf] = fVar35 + fVar34 * auVar29._12_4_;
              pfVar18[0xc] = fVar35 + fVar34 * auVar29._0_4_;
              pfVar18[0xd] = fVar35 + fVar34 * auVar29._4_4_;
              pfVar18 = pfVar18 + 0x10;
              pbVar20 = pbVar20 + 0x10;
            } while (uVar26 < uVar3);
            iVar17 = iVar11 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_002737f8;
          }
          lVar22 = (long)iVar17;
                    /* catch() { ... } // from try @ 002736b4 with catch @ 002736f8 */
          lVar21 = param_5 + lVar22 * 4;
          bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
          *(float *)(param_5 + lVar22 * 4) =
               fVar35 + (float)*(byte *)((long)param_1 + lVar22) * fVar34;
          *(float *)(lVar21 + 4) = fVar35 + (float)bVar10 * fVar34;
          bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
          *(float *)(lVar21 + 0xc) = fVar35 + (float)*(byte *)((long)param_1 + lVar22 + 3) * fVar34;
          *(float *)(lVar21 + 8) = fVar35 + (float)bVar10 * fVar34;
          if (iVar17 + 4 < iVar15) {
            lVar22 = (long)(iVar17 + 4);
            lVar21 = param_5 + lVar22 * 4;
            bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
            *(float *)(param_5 + lVar22 * 4) =
                 fVar35 + (float)*(byte *)((long)param_1 + lVar22) * fVar34;
            *(float *)(lVar21 + 4) = fVar35 + (float)bVar10 * fVar34;
            bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
            *(float *)(lVar21 + 0xc) =
                 fVar35 + (float)*(byte *)((long)param_1 + lVar22 + 3) * fVar34;
            *(float *)(lVar21 + 8) = fVar35 + (float)bVar10 * fVar34;
            if (iVar17 + 8 < iVar15) {
              lVar22 = (long)(iVar17 + 8);
              lVar21 = param_5 + lVar22 * 4;
              bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
              *(float *)(param_5 + lVar22 * 4) =
                   fVar35 + (float)*(byte *)((long)param_1 + lVar22) * fVar34;
              *(float *)(lVar21 + 4) = fVar35 + (float)bVar10 * fVar34;
              bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
              *(float *)(lVar21 + 0xc) =
                   fVar35 + (float)*(byte *)((long)param_1 + lVar22 + 3) * fVar34;
              *(float *)(lVar21 + 8) = fVar35 + (float)bVar10 * fVar34;
            }
          }
        }
      }
LAB_002737f8:
      if (iVar12 < iVar9) {
        lVar21 = (long)iVar12;
        uVar26 = iVar9 - iVar12;
        pbVar20 = (byte *)((long)param_1 + lVar21);
        pfVar18 = (float *)(param_5 + lVar21 * 4);
        if ((pbVar20 < (byte *)(param_5 + (lVar21 + (ulong)uVar26) * 4) &&
             pfVar18 < (float *)((long)param_1 + lVar21 + (ulong)uVar26)) || (uVar26 < 0x13)) {
          lVar21 = 0;
          do {
            pfVar18[lVar21] = fVar35 + (float)pbVar20[lVar21] * fVar34;
            lVar21 = lVar21 + 1;
          } while (lVar21 != (ulong)(uint)((iVar9 + -1) - iVar12) + 1);
        }
        else {
          uVar8 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
          if (uVar26 < uVar8) {
            uVar8 = uVar26;
          }
          iVar17 = iVar12;
          if (uVar8 != 0) {
            iVar17 = iVar12 + 1;
            *pfVar18 = fVar35 + (float)*pbVar20 * fVar34;
            if (uVar8 != 1) {
              lVar22 = (long)iVar17;
              iVar17 = iVar12 + 2;
              *(float *)(param_5 + lVar22 * 4) =
                   fVar35 + (float)*(byte *)((long)param_1 + lVar22) * fVar34;
              if (uVar8 == 3) {
                lVar22 = (long)iVar17;
                iVar17 = iVar12 + 3;
                *(float *)(param_5 + lVar22 * 4) =
                     fVar35 + (float)*(byte *)((long)param_1 + lVar22) * fVar34;
              }
            }
          }
          uVar4 = ((uVar26 - uVar8) - 0x10 >> 4) + 1;
          uVar25 = 0;
          iVar12 = uVar4 * 0x10;
          puVar19 = (undefined8 *)(param_5 + lVar21 * 4 + (ulong)uVar8 * 4);
          pbVar20 = (byte *)((long)param_1 + lVar21 + (ulong)uVar8);
          do {
            uVar25 = uVar25 + 1;
            auVar42._6_2_ = 0;
            auVar42._0_6_ =
                 (uint6)CONCAT14(pbVar20[1],(uint)CONCAT12(pbVar20[1],(ushort)*pbVar20)) &
                 0xffff0000ffff;
            auVar42[8] = pbVar20[2];
            auVar42._9_3_ = 0;
            auVar42[0xc] = pbVar20[3];
            auVar42._13_3_ = 0;
            auVar38._1_3_ = 0;
            auVar38[0] = pbVar20[4];
            auVar38[4] = pbVar20[5];
            auVar38._5_3_ = 0;
            auVar38[8] = pbVar20[6];
            auVar38._9_3_ = 0;
            auVar38[0xc] = pbVar20[7];
            auVar38._13_3_ = 0;
            auVar41._6_2_ = 0;
            auVar41._0_6_ =
                 (uint6)CONCAT14(pbVar20[9],(uint)CONCAT12(pbVar20[9],(ushort)pbVar20[8])) &
                 0xffff0000ffff;
            auVar41[8] = pbVar20[10];
            auVar41._9_3_ = 0;
            auVar41[0xc] = pbVar20[0xb];
            auVar41._13_3_ = 0;
            auVar33._1_3_ = 0;
            auVar33[0] = pbVar20[0xc];
            auVar33[4] = pbVar20[0xd];
            auVar33._5_3_ = 0;
            auVar33[8] = pbVar20[0xe];
            auVar33._9_3_ = 0;
            auVar33[0xc] = pbVar20[0xf];
            auVar33._13_3_ = 0;
            auVar43 = NEON_scvtf(auVar42,4);
            auVar31 = NEON_scvtf(auVar38,4);
            auVar37 = NEON_scvtf(auVar41,4);
            auVar29 = NEON_scvtf(auVar33,4);
            auVar30._0_8_ =
                 CONCAT44(fVar35 + fVar34 * auVar29._4_4_,fVar35 + fVar34 * auVar29._0_4_);
            auVar30._8_4_ = fVar35 + fVar34 * auVar29._8_4_;
            auVar30._12_4_ = fVar35 + fVar34 * auVar29._12_4_;
            puVar19[1] = CONCAT44(fVar35 + fVar34 * auVar43._12_4_,fVar35 + fVar34 * auVar43._8_4_);
            *puVar19 = CONCAT44(fVar35 + fVar34 * auVar43._4_4_,fVar35 + fVar34 * auVar43._0_4_);
            *(float *)(puVar19 + 3) = fVar35 + fVar34 * auVar31._8_4_;
            *(float *)((long)puVar19 + 0x1c) = fVar35 + fVar34 * auVar31._12_4_;
            *(float *)(puVar19 + 2) = fVar35 + fVar34 * auVar31._0_4_;
            *(float *)((long)puVar19 + 0x14) = fVar35 + fVar34 * auVar31._4_4_;
            *(float *)(puVar19 + 5) = fVar35 + fVar34 * auVar37._8_4_;
            *(float *)((long)puVar19 + 0x2c) = fVar35 + fVar34 * auVar37._12_4_;
            *(float *)(puVar19 + 4) = fVar35 + fVar34 * auVar37._0_4_;
            *(float *)((long)puVar19 + 0x24) = fVar35 + fVar34 * auVar37._4_4_;
            puVar19[7] = auVar30._8_8_;
            puVar19[6] = auVar30._0_8_;
            puVar19 = puVar19 + 8;
            pbVar20 = pbVar20 + 0x10;
          } while (uVar25 < uVar4);
          iVar17 = iVar17 + iVar12;
          if (uVar26 - uVar8 != iVar12) {
            iVar12 = iVar17 + 1;
            *(float *)(param_5 + (long)iVar17 * 4) =
                 fVar35 + (float)*(byte *)((long)param_1 + (long)iVar17) * fVar34;
            if (iVar12 < iVar9) {
              iVar5 = iVar17 + 2;
              *(float *)(param_5 + (long)iVar12 * 4) =
                   fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) * fVar34;
              if (iVar5 < iVar9) {
                iVar12 = iVar17 + 3;
                *(float *)(param_5 + (long)iVar5 * 4) =
                     fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) * fVar34;
                if (iVar12 < iVar9) {
                  iVar5 = iVar17 + 4;
                  *(float *)(param_5 + (long)iVar12 * 4) =
                       fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) * fVar34;
                  if (iVar5 < iVar9) {
                    iVar12 = iVar17 + 5;
                    *(float *)(param_5 + (long)iVar5 * 4) =
                         fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) * fVar34;
                    if (iVar12 < iVar9) {
                      iVar5 = iVar17 + 6;
                      *(float *)(param_5 + (long)iVar12 * 4) =
                           fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) * fVar34;
                      if (iVar5 < iVar9) {
                        iVar12 = iVar17 + 7;
                        *(float *)(param_5 + (long)iVar5 * 4) =
                             fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) * fVar34;
                        if (iVar12 < iVar9) {
                          iVar5 = iVar17 + 8;
                          *(float *)(param_5 + (long)iVar12 * 4) =
                               fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) * fVar34;
                          if (iVar5 < iVar9) {
                            iVar12 = iVar17 + 9;
                            *(float *)(param_5 + (long)iVar5 * 4) =
                                 fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) * fVar34;
                            if (iVar12 < iVar9) {
                              iVar5 = iVar17 + 10;
                              *(float *)(param_5 + (long)iVar12 * 4) =
                                   fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) * fVar34;
                              if (iVar5 < iVar9) {
                                iVar12 = iVar17 + 0xb;
                                *(float *)(param_5 + (long)iVar5 * 4) =
                                     fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) * fVar34
                                ;
                                if (iVar12 < iVar9) {
                                  iVar5 = iVar17 + 0xc;
                                  *(float *)(param_5 + (long)iVar12 * 4) =
                                       fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) *
                                                fVar34;
                                  if (iVar5 < iVar9) {
                                    iVar12 = iVar17 + 0xd;
                                    *(float *)(param_5 + (long)iVar5 * 4) =
                                         fVar35 + (float)*(byte *)((long)param_1 + (long)iVar5) *
                                                  fVar34;
                                    if (iVar12 < iVar9) {
                                      iVar17 = iVar17 + 0xe;
                                      *(float *)(param_5 + (long)iVar12 * 4) =
                                           fVar35 + (float)*(byte *)((long)param_1 + (long)iVar12) *
                                                    fVar34;
                                      if (iVar17 < iVar9) {
                                        *(float *)(param_5 + (long)iVar17 * 4) =
                                             fVar35 + (float)*(byte *)((long)param_1 + (long)iVar17)
                                                      * fVar34;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar23 = iVar23 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 00273c04 (1800 bytes) name=FUN_00273c04

void FUN_00273c04(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7,double *param_8)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  char cVar10;
  byte bVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  float *pfVar19;
  undefined8 *puVar20;
  byte *pbVar21;
  long lVar22;
  long lVar23;
  int iVar24;
  long lVar25;
  uint uVar26;
  char *pcVar27;
  uint uVar28;
  undefined8 uVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  float fVar35;
  float fVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  
  iVar24 = param_7[1];
  iVar9 = *param_7;
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar24 != 0) {
    uVar14 = iVar9 - 8U >> 3;
    iVar12 = (uVar14 + 1) * 8;
    if (iVar9 + -7 < 1) {
      iVar12 = 0;
    }
    uVar17 = (iVar9 + -4) - iVar12;
    lVar25 = (long)iVar12;
    uVar15 = uVar17 >> 2;
    uVar2 = uVar15 + 1;
    uVar3 = (uVar15 - 3 >> 2) + 1;
    iVar7 = iVar12 + 4 + uVar15 * 4;
    lVar1 = lVar25 + (ulong)uVar2 * 4;
    iVar16 = iVar9 + -3;
    do {
      if (0 < iVar9 + -7) {
        pfVar19 = (float *)(param_5 + 0x10);
        puVar20 = param_1;
        do {
          uVar29 = *puVar20;
          auVar32._0_4_ = (int)(short)(char)uVar29;
          auVar32._4_4_ = (int)(short)(char)((ulong)uVar29 >> 8);
          auVar32._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x10);
          auVar32._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x18);
          auVar32 = NEON_scvtf(auVar32,4);
          auVar30._0_4_ = (int)(short)(char)((ulong)uVar29 >> 0x20);
          auVar30._4_4_ = (int)(short)(char)((ulong)uVar29 >> 0x28);
          auVar30._8_4_ = (int)(short)(char)((ulong)uVar29 >> 0x30);
          auVar30._12_4_ = (int)(short)(char)((ulong)uVar29 >> 0x38);
          auVar30 = NEON_scvtf(auVar30,4);
          auVar38._0_8_ = CONCAT44(fVar36 + auVar32._4_4_ * fVar35,fVar36 + auVar32._0_4_ * fVar35);
          auVar38._8_4_ = fVar36 + auVar32._8_4_ * fVar35;
          auVar38._12_4_ = fVar36 + auVar32._12_4_ * fVar35;
          *(long *)(pfVar19 + -2) = auVar38._8_8_;
          *(undefined8 *)(pfVar19 + -4) = auVar38._0_8_;
          pfVar19[2] = fVar36 + auVar30._8_4_ * fVar35;
          pfVar19[3] = fVar36 + auVar30._12_4_ * fVar35;
          *pfVar19 = fVar36 + auVar30._0_4_ * fVar35;
          pfVar19[1] = fVar36 + auVar30._4_4_ * fVar35;
          pfVar19 = pfVar19 + 8;
          puVar20 = puVar20 + 1;
        } while (pfVar19 != (float *)(param_5 + (ulong)uVar14 * 0x20 + 0x30));
      }
      iVar13 = iVar12;
      if (iVar12 < iVar16) {
        pfVar19 = (float *)(param_5 + lVar25 * 4);
        pbVar21 = (byte *)((long)param_1 + lVar25);
        iVar13 = iVar7;
        if ((pfVar19 < (float *)((long)param_1 + lVar1) && pbVar21 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 4)) {
          do {
            pbVar6 = pbVar21 + 4;
            bVar11 = *pbVar21;
            pfVar19[1] = fVar36 + (float)(int)(char)pbVar21[1] * fVar35;
            *pfVar19 = fVar36 + (float)bVar11 * fVar35;
            bVar11 = pbVar21[2];
            pfVar19[3] = fVar36 + (float)pbVar21[3] * fVar35;
            pfVar19[2] = fVar36 + (float)bVar11 * fVar35;
            pfVar19 = pfVar19 + 4;
            pbVar21 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar25 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar18 = iVar12;
          if (0xb < uVar17) {
            uVar28 = 0;
            do {
              uVar28 = uVar28 + 1;
              auVar40._0_4_ = (int)(short)(char)*pbVar21;
              auVar40._4_4_ = (int)(short)(char)pbVar21[1];
              auVar40._8_4_ = (int)(short)(char)pbVar21[2];
              auVar40._12_4_ = (int)(short)(char)pbVar21[3];
              auVar33._0_4_ = (int)(short)(char)pbVar21[4];
              auVar33._4_4_ = (int)(short)(char)pbVar21[5];
              auVar33._8_4_ = (int)(short)(char)pbVar21[6];
              auVar33._12_4_ = (int)(short)(char)pbVar21[7];
              auVar37._0_4_ = (int)(short)(char)pbVar21[8];
              auVar37._4_4_ = (int)(short)(char)pbVar21[9];
              auVar37._8_4_ = (int)(short)(char)pbVar21[10];
              auVar37._12_4_ = (int)(short)(char)pbVar21[0xb];
              auVar44._0_4_ = (int)(short)(char)pbVar21[0xc];
              auVar44._4_4_ = (int)(short)(char)pbVar21[0xd];
              auVar44._8_4_ = (int)(short)(char)pbVar21[0xe];
              auVar44._12_4_ = (int)(short)(char)pbVar21[0xf];
              auVar41 = NEON_scvtf(auVar40,4);
              auVar32 = NEON_scvtf(auVar33,4);
              auVar38 = NEON_scvtf(auVar37,4);
              auVar30 = NEON_scvtf(auVar44,4);
              *(ulong *)(pfVar19 + 2) =
                   CONCAT44(fVar36 + fVar35 * auVar41._12_4_,fVar36 + fVar35 * auVar41._8_4_);
              *(ulong *)pfVar19 =
                   CONCAT44(fVar36 + fVar35 * auVar41._4_4_,fVar36 + fVar35 * auVar41._0_4_);
              pfVar19[6] = fVar36 + fVar35 * auVar32._8_4_;
              pfVar19[7] = fVar36 + fVar35 * auVar32._12_4_;
              pfVar19[4] = fVar36 + fVar35 * auVar32._0_4_;
              pfVar19[5] = fVar36 + fVar35 * auVar32._4_4_;
              auVar41._0_8_ =
                   CONCAT44(fVar36 + fVar35 * auVar38._4_4_,fVar36 + fVar35 * auVar38._0_4_);
              auVar41._8_4_ = fVar36 + fVar35 * auVar38._8_4_;
              auVar41._12_4_ = fVar36 + fVar35 * auVar38._12_4_;
              *(long *)(pfVar19 + 10) = auVar41._8_8_;
              *(undefined8 *)(pfVar19 + 8) = auVar41._0_8_;
              pfVar19[0xe] = fVar36 + fVar35 * auVar30._8_4_;
              pfVar19[0xf] = fVar36 + fVar35 * auVar30._12_4_;
              pfVar19[0xc] = fVar36 + fVar35 * auVar30._0_4_;
              pfVar19[0xd] = fVar36 + fVar35 * auVar30._4_4_;
              pfVar19 = pfVar19 + 0x10;
              pbVar21 = pbVar21 + 0x10;
            } while (uVar28 < uVar3);
            iVar18 = iVar12 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00273f00;
          }
          lVar23 = (long)iVar18;
          lVar22 = param_5 + lVar23 * 4;
          cVar10 = *(char *)((long)param_1 + lVar23 + 1);
          *(float *)(param_5 + lVar23 * 4) =
               fVar36 + (float)(int)*(char *)((long)param_1 + lVar23) * fVar35;
          *(float *)(lVar22 + 4) = fVar36 + (float)(int)cVar10 * fVar35;
          cVar10 = *(char *)((long)param_1 + lVar23 + 2);
          *(float *)(lVar22 + 0xc) =
               fVar36 + (float)(int)*(char *)((long)param_1 + lVar23 + 3) * fVar35;
          *(float *)(lVar22 + 8) = fVar36 + (float)(int)cVar10 * fVar35;
          if (iVar18 + 4 < iVar16) {
            lVar23 = (long)(iVar18 + 4);
            lVar22 = param_5 + lVar23 * 4;
            cVar10 = *(char *)((long)param_1 + lVar23 + 1);
            *(float *)(param_5 + lVar23 * 4) =
                 fVar36 + (float)(int)*(char *)((long)param_1 + lVar23) * fVar35;
            *(float *)(lVar22 + 4) = fVar36 + (float)(int)cVar10 * fVar35;
            cVar10 = *(char *)((long)param_1 + lVar23 + 2);
            *(float *)(lVar22 + 0xc) =
                 fVar36 + (float)(int)*(char *)((long)param_1 + lVar23 + 3) * fVar35;
            *(float *)(lVar22 + 8) = fVar36 + (float)(int)cVar10 * fVar35;
            if (iVar18 + 8 < iVar16) {
              lVar23 = (long)(iVar18 + 8);
              lVar22 = param_5 + lVar23 * 4;
              cVar10 = *(char *)((long)param_1 + lVar23 + 1);
              *(float *)(param_5 + lVar23 * 4) =
                   fVar36 + (float)(int)*(char *)((long)param_1 + lVar23) * fVar35;
              *(float *)(lVar22 + 4) = fVar36 + (float)(int)cVar10 * fVar35;
              cVar10 = *(char *)((long)param_1 + lVar23 + 2);
              *(float *)(lVar22 + 0xc) =
                   fVar36 + (float)(int)*(char *)((long)param_1 + lVar23 + 3) * fVar35;
              *(float *)(lVar22 + 8) = fVar36 + (float)(int)cVar10 * fVar35;
            }
          }
        }
      }
LAB_00273f00:
      if (iVar13 < iVar9) {
        lVar22 = (long)iVar13;
        uVar28 = iVar9 - iVar13;
        pcVar27 = (char *)((long)param_1 + lVar22);
        pfVar19 = (float *)(param_5 + lVar22 * 4);
        if ((pcVar27 < (char *)(param_5 + (lVar22 + (ulong)uVar28) * 4) &&
             pfVar19 < (float *)((long)param_1 + lVar22 + (ulong)uVar28)) || (uVar28 < 0x14)) {
          lVar22 = 0;
          do {
            pfVar19[lVar22] = fVar36 + (float)(int)pcVar27[lVar22] * fVar35;
            lVar22 = lVar22 + 1;
          } while (lVar22 != (ulong)(uint)((iVar9 + -1) - iVar13) + 1);
        }
        else {
          uVar8 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
          if (uVar28 < uVar8) {
            uVar8 = uVar28;
          }
          iVar18 = iVar13;
          if (uVar8 != 0) {
            iVar18 = iVar13 + 1;
            *pfVar19 = fVar36 + (float)(int)*pcVar27 * fVar35;
            if (uVar8 != 1) {
              lVar23 = (long)iVar18;
              iVar18 = iVar13 + 2;
              *(float *)(param_5 + lVar23 * 4) =
                   fVar36 + (float)(int)*(char *)((long)param_1 + lVar23) * fVar35;
              if (uVar8 == 3) {
                lVar23 = (long)iVar18;
                iVar18 = iVar13 + 3;
                *(float *)(param_5 + lVar23 * 4) =
                     fVar36 + (float)(int)*(char *)((long)param_1 + lVar23) * fVar35;
              }
            }
          }
          uVar4 = ((uVar28 - uVar8) - 0x10 >> 4) + 1;
          uVar26 = 0;
          iVar13 = uVar4 * 0x10;
          puVar20 = (undefined8 *)(param_5 + lVar22 * 4 + (ulong)uVar8 * 4);
          pcVar27 = (char *)((long)param_1 + lVar22 + (ulong)uVar8);
          do {
            uVar26 = uVar26 + 1;
            auVar43._0_4_ = (int)(short)*pcVar27;
            auVar43._4_4_ = (int)(short)pcVar27[1];
            auVar43._8_4_ = (int)(short)pcVar27[2];
            auVar43._12_4_ = (int)(short)pcVar27[3];
            auVar39._0_4_ = (int)(short)pcVar27[4];
            auVar39._4_4_ = (int)(short)pcVar27[5];
            auVar39._8_4_ = (int)(short)pcVar27[6];
            auVar39._12_4_ = (int)(short)pcVar27[7];
            auVar42._0_4_ = (int)(short)pcVar27[8];
            auVar42._4_4_ = (int)(short)pcVar27[9];
            auVar42._8_4_ = (int)(short)pcVar27[10];
            auVar42._12_4_ = (int)(short)pcVar27[0xb];
            auVar34._0_4_ = (int)(short)pcVar27[0xc];
            auVar34._4_4_ = (int)(short)pcVar27[0xd];
            auVar34._8_4_ = (int)(short)pcVar27[0xe];
            auVar34._12_4_ = (int)(short)pcVar27[0xf];
            auVar44 = NEON_scvtf(auVar43,4);
            auVar32 = NEON_scvtf(auVar39,4);
            auVar38 = NEON_scvtf(auVar42,4);
            auVar30 = NEON_scvtf(auVar34,4);
            auVar31._0_8_ =
                 CONCAT44(fVar36 + fVar35 * auVar30._4_4_,fVar36 + fVar35 * auVar30._0_4_);
            auVar31._8_4_ = fVar36 + fVar35 * auVar30._8_4_;
            auVar31._12_4_ = fVar36 + fVar35 * auVar30._12_4_;
            puVar20[1] = CONCAT44(fVar36 + fVar35 * auVar44._12_4_,fVar36 + fVar35 * auVar44._8_4_);
            *puVar20 = CONCAT44(fVar36 + fVar35 * auVar44._4_4_,fVar36 + fVar35 * auVar44._0_4_);
            *(float *)(puVar20 + 3) = fVar36 + fVar35 * auVar32._8_4_;
            *(float *)((long)puVar20 + 0x1c) = fVar36 + fVar35 * auVar32._12_4_;
            *(float *)(puVar20 + 2) = fVar36 + fVar35 * auVar32._0_4_;
            *(float *)((long)puVar20 + 0x14) = fVar36 + fVar35 * auVar32._4_4_;
            *(float *)(puVar20 + 5) = fVar36 + fVar35 * auVar38._8_4_;
            *(float *)((long)puVar20 + 0x2c) = fVar36 + fVar35 * auVar38._12_4_;
            *(float *)(puVar20 + 4) = fVar36 + fVar35 * auVar38._0_4_;
            *(float *)((long)puVar20 + 0x24) = fVar36 + fVar35 * auVar38._4_4_;
            puVar20[7] = auVar31._8_8_;
            puVar20[6] = auVar31._0_8_;
            puVar20 = puVar20 + 8;
            pcVar27 = pcVar27 + 0x10;
          } while (uVar26 < uVar4);
          iVar18 = iVar18 + iVar13;
          if (uVar28 - uVar8 != iVar13) {
            iVar13 = iVar18 + 1;
            *(float *)(param_5 + (long)iVar18 * 4) =
                 fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar18) * fVar35;
            if (iVar13 < iVar9) {
              iVar5 = iVar18 + 2;
              *(float *)(param_5 + (long)iVar13 * 4) =
                   fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13) * fVar35;
              if (iVar5 < iVar9) {
                iVar13 = iVar18 + 3;
                *(float *)(param_5 + (long)iVar5 * 4) =
                     fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5) * fVar35;
                if (iVar13 < iVar9) {
                  iVar5 = iVar18 + 4;
                  *(float *)(param_5 + (long)iVar13 * 4) =
                       fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13) * fVar35;
                  if (iVar5 < iVar9) {
                    iVar13 = iVar18 + 5;
                    *(float *)(param_5 + (long)iVar5 * 4) =
                         fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5) * fVar35;
                    if (iVar13 < iVar9) {
                      iVar5 = iVar18 + 6;
                      *(float *)(param_5 + (long)iVar13 * 4) =
                           fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13) * fVar35;
                      if (iVar5 < iVar9) {
                        iVar13 = iVar18 + 7;
                        *(float *)(param_5 + (long)iVar5 * 4) =
                             fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5) * fVar35;
                        if (iVar13 < iVar9) {
                          iVar5 = iVar18 + 8;
                          *(float *)(param_5 + (long)iVar13 * 4) =
                               fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13) * fVar35
                          ;
                          if (iVar5 < iVar9) {
                            iVar13 = iVar18 + 9;
                            *(float *)(param_5 + (long)iVar5 * 4) =
                                 fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5) *
                                          fVar35;
                            if (iVar13 < iVar9) {
                              iVar5 = iVar18 + 10;
                              *(float *)(param_5 + (long)iVar13 * 4) =
                                   fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13) *
                                            fVar35;
                              if (iVar5 < iVar9) {
                                iVar13 = iVar18 + 0xb;
                                *(float *)(param_5 + (long)iVar5 * 4) =
                                     fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5) *
                                              fVar35;
                                if (iVar13 < iVar9) {
                                  iVar5 = iVar18 + 0xc;
                                  *(float *)(param_5 + (long)iVar13 * 4) =
                                       fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar13)
                                                * fVar35;
                                  if (iVar5 < iVar9) {
                                    iVar13 = iVar18 + 0xd;
                                    *(float *)(param_5 + (long)iVar5 * 4) =
                                         fVar36 + (float)(int)*(char *)((long)param_1 + (long)iVar5)
                                                  * fVar35;
                                    if (iVar13 < iVar9) {
                                      iVar18 = iVar18 + 0xe;
                                      *(float *)(param_5 + (long)iVar13 * 4) =
                                           fVar36 + (float)(int)*(char *)((long)param_1 +
                                                                         (long)iVar13) * fVar35;
                                      if (iVar18 < iVar9) {
                                        *(float *)(param_5 + (long)iVar18 * 4) =
                                             fVar36 + (float)(int)*(char *)((long)param_1 +
                                                                           (long)iVar18) * fVar35;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar24 = iVar24 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 0027430c (1176 bytes) name=FUN_0027430c

void FUN_0027430c(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  ushort uVar8;
  ushort uVar9;
  ushort uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  long lVar18;
  ushort *puVar19;
  int iVar20;
  long lVar21;
  int iVar22;
  uint uVar23;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  float fVar30;
  float fVar31;
  
  iVar22 = param_7[1];
  iVar7 = *param_7;
  fVar30 = (float)*param_8;
  fVar31 = (float)param_8[1];
  if (iVar22 != 0) {
    uVar12 = iVar7 - 8U >> 3;
    iVar11 = (uVar12 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - iVar11;
    uVar13 = uVar14 >> 2;
    uVar1 = (uVar13 - 1 >> 1) + 1;
    iVar5 = iVar11 + 4 + uVar13 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar17 = (undefined8 *)(param_5 + 0x10);
        puVar19 = param_1;
        do {
          auVar27._2_2_ = 0;
          auVar27._0_2_ = puVar19[4];
          auVar27._4_2_ = puVar19[5];
          auVar27._6_2_ = 0;
          auVar27._8_2_ = puVar19[6];
          auVar27._10_2_ = 0;
          auVar27._12_2_ = puVar19[7];
          auVar27._14_2_ = 0;
          auVar27 = NEON_ucvtf(auVar27,4);
          auVar24._2_2_ = 0;
          auVar24._0_2_ = *puVar19;
          auVar24._4_2_ = puVar19[1];
          auVar24._6_2_ = 0;
          auVar24._8_2_ = puVar19[2];
          auVar24._10_2_ = 0;
          auVar24._12_2_ = puVar19[3];
          auVar24._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          puVar17[-1] = CONCAT44(fVar31 + auVar24._12_4_ * fVar30,fVar31 + auVar24._8_4_ * fVar30);
          puVar17[-2] = CONCAT44(fVar31 + auVar24._4_4_ * fVar30,fVar31 + auVar24._0_4_ * fVar30);
          puVar17[1] = CONCAT44(fVar31 + auVar27._12_4_ * fVar30,fVar31 + auVar27._8_4_ * fVar30);
          *puVar17 = CONCAT44(fVar31 + auVar27._4_4_ * fVar30,fVar31 + auVar27._0_4_ * fVar30);
          puVar17 = puVar17 + 4;
          puVar19 = puVar19 + 8;
        } while (puVar17 != (undefined8 *)(param_5 + (ulong)uVar12 * 0x20 + 0x30));
      }
      iVar20 = iVar11;
      if (iVar11 < iVar7 + -3) {
        iVar2 = iVar11;
        iVar20 = iVar5;
        if (3 < uVar14) {
          uVar16 = 0;
          puVar17 = (undefined8 *)(param_5 + (long)iVar11 * 4);
          puVar19 = param_1 + iVar11;
          do {
            uVar16 = uVar16 + 1;
            auVar28._2_2_ = 0;
            auVar28._0_2_ = *puVar19;
            auVar28._4_2_ = puVar19[1];
            auVar28._6_2_ = 0;
            auVar28._8_2_ = puVar19[2];
            auVar28._10_2_ = 0;
            auVar28._12_2_ = puVar19[3];
            auVar28._14_2_ = 0;
            auVar25._2_2_ = 0;
            auVar25._0_2_ = puVar19[4];
            auVar25._4_2_ = puVar19[5];
            auVar25._6_2_ = 0;
            auVar25._8_2_ = puVar19[6];
            auVar25._10_2_ = 0;
            auVar25._12_2_ = puVar19[7];
            auVar25._14_2_ = 0;
            auVar27 = NEON_scvtf(auVar28,4);
            auVar24 = NEON_scvtf(auVar25,4);
            puVar17[1] = CONCAT44(fVar31 + fVar30 * auVar27._12_4_,fVar31 + fVar30 * auVar27._8_4_);
            *puVar17 = CONCAT44(fVar31 + fVar30 * auVar27._4_4_,fVar31 + fVar30 * auVar27._0_4_);
            puVar17[3] = CONCAT44(fVar31 + fVar30 * auVar24._12_4_,fVar31 + fVar30 * auVar24._8_4_);
            puVar17[2] = CONCAT44(fVar31 + fVar30 * auVar24._4_4_,fVar31 + fVar30 * auVar24._0_4_);
            puVar17 = puVar17 + 4;
            puVar19 = puVar19 + 8;
          } while (uVar16 < uVar1);
          iVar2 = iVar11 + uVar1 * 8;
          if (uVar1 * 2 == uVar13 + 1) goto LAB_002744d0;
        }
        lVar18 = (long)iVar2;
        lVar21 = param_5 + lVar18 * 4;
        uVar8 = param_1[lVar18 + 1];
        uVar9 = param_1[lVar18 + 3];
        uVar10 = param_1[lVar18 + 2];
        *(float *)(param_5 + lVar18 * 4) = fVar31 + (float)param_1[lVar18] * fVar30;
        *(float *)(lVar21 + 4) = fVar31 + (float)uVar8 * fVar30;
        *(float *)(lVar21 + 0xc) = fVar31 + (float)uVar9 * fVar30;
        *(float *)(lVar21 + 8) = fVar31 + (float)uVar10 * fVar30;
      }
LAB_002744d0:
      if (iVar20 < iVar7) {
        lVar21 = (long)iVar20;
        uVar15 = iVar7 - iVar20;
        uVar16 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
        uVar6 = (ulong)uVar16;
        if (uVar15 < uVar16) {
          uVar6 = (ulong)uVar15;
        }
        if (uVar15 < 9) {
          uVar6 = (ulong)uVar15;
        }
        uVar16 = (uint)uVar6;
        if (uVar16 != 0) {
          iVar2 = iVar20 + 1;
          *(float *)(param_5 + lVar21 * 4) = fVar31 + (float)param_1[lVar21] * fVar30;
          if (uVar16 != 1) {
            iVar3 = iVar20 + 2;
            *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
            iVar2 = iVar3;
            if (uVar16 != 2) {
              iVar2 = iVar20 + 3;
              *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)param_1[iVar3] * fVar30;
              if (uVar16 != 3) {
                iVar3 = iVar20 + 4;
                *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
                iVar2 = iVar3;
                if (uVar16 != 4) {
                  iVar2 = iVar20 + 5;
                  *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)param_1[iVar3] * fVar30;
                  if (uVar16 != 5) {
                    iVar3 = iVar20 + 6;
                    *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
                    iVar2 = iVar3;
                    if (uVar16 != 6) {
                      iVar2 = iVar20 + 7;
                      *(float *)(param_5 + (long)iVar3 * 4) =
                           fVar31 + (float)param_1[iVar3] * fVar30;
                      if (uVar16 == 8) {
                        *(float *)(param_5 + (long)iVar2 * 4) =
                             fVar31 + (float)param_1[iVar2] * fVar30;
                        iVar2 = iVar20 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar20 = iVar2;
          if (uVar16 == uVar15) goto LAB_0027475c;
        }
        uVar4 = ((uVar15 - uVar16) - 8 >> 3) + 1;
        iVar2 = uVar4 * 8;
        if (6 < (uVar15 - 1) - uVar16) {
          uVar23 = 0;
          puVar19 = param_1 + uVar6 + lVar21;
          puVar17 = (undefined8 *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar23 = uVar23 + 1;
            auVar29._2_2_ = 0;
            auVar29._0_2_ = *puVar19;
            auVar29._4_2_ = puVar19[1];
            auVar29._6_2_ = 0;
            auVar29._8_2_ = puVar19[2];
            auVar29._10_2_ = 0;
            auVar29._12_2_ = puVar19[3];
            auVar29._14_2_ = 0;
            auVar26._2_2_ = 0;
            auVar26._0_2_ = puVar19[4];
            auVar26._4_2_ = puVar19[5];
            auVar26._6_2_ = 0;
            auVar26._8_2_ = puVar19[6];
            auVar26._10_2_ = 0;
            auVar26._12_2_ = puVar19[7];
            auVar26._14_2_ = 0;
            auVar27 = NEON_scvtf(auVar29,4);
            auVar24 = NEON_scvtf(auVar26,4);
            puVar17[1] = CONCAT44(fVar31 + fVar30 * auVar27._12_4_,fVar31 + fVar30 * auVar27._8_4_);
            *puVar17 = CONCAT44(fVar31 + fVar30 * auVar27._4_4_,fVar31 + fVar30 * auVar27._0_4_);
            puVar17[3] = CONCAT44(fVar31 + fVar30 * auVar24._12_4_,fVar31 + fVar30 * auVar24._8_4_);
            puVar17[2] = CONCAT44(fVar31 + fVar30 * auVar24._4_4_,fVar31 + fVar30 * auVar24._0_4_);
            puVar19 = puVar19 + 8;
            puVar17 = puVar17 + 4;
          } while (uVar23 < uVar4);
          iVar20 = iVar20 + iVar2;
          if (iVar2 == uVar15 - uVar16) goto LAB_0027475c;
        }
        iVar2 = iVar20 + 1;
        *(float *)(param_5 + (long)iVar20 * 4) = fVar31 + (float)param_1[iVar20] * fVar30;
        if (iVar2 < iVar7) {
          iVar3 = iVar20 + 2;
          *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
          if (iVar3 < iVar7) {
            iVar2 = iVar20 + 3;
            *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)param_1[iVar3] * fVar30;
            if (iVar2 < iVar7) {
              iVar3 = iVar20 + 4;
              *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
              if (iVar3 < iVar7) {
                iVar2 = iVar20 + 5;
                *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)param_1[iVar3] * fVar30;
                if (iVar2 < iVar7) {
                  iVar20 = iVar20 + 6;
                  *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)param_1[iVar2] * fVar30;
                  if (iVar20 < iVar7) {
                    *(float *)(param_5 + (long)iVar20 * 4) =
                         fVar31 + (float)param_1[iVar20] * fVar30;
                  }
                }
              }
            }
          }
        }
      }
LAB_0027475c:
      iVar22 = iVar22 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 002747a4 (1176 bytes) name=FUN_002747a4

void FUN_002747a4(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  short sVar8;
  short sVar9;
  short sVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  long lVar18;
  short *psVar19;
  int iVar20;
  long lVar21;
  int iVar22;
  uint uVar23;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  float fVar30;
  float fVar31;
  
  iVar22 = param_7[1];
  iVar7 = *param_7;
  fVar30 = (float)*param_8;
  fVar31 = (float)param_8[1];
  if (iVar22 != 0) {
    uVar12 = iVar7 - 8U >> 3;
    iVar11 = (uVar12 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - iVar11;
    uVar13 = uVar14 >> 2;
    uVar1 = (uVar13 - 1 >> 1) + 1;
    iVar5 = iVar11 + 4 + uVar13 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar17 = (undefined8 *)(param_5 + 0x10);
        psVar19 = param_1;
        do {
          auVar27._0_4_ = (int)psVar19[4];
          auVar27._4_4_ = (int)psVar19[5];
          auVar27._8_4_ = (int)psVar19[6];
          auVar27._12_4_ = (int)psVar19[7];
          auVar27 = NEON_scvtf(auVar27,4);
          auVar24._0_4_ = (int)*psVar19;
          auVar24._4_4_ = (int)psVar19[1];
          auVar24._8_4_ = (int)psVar19[2];
          auVar24._12_4_ = (int)psVar19[3];
          auVar24 = NEON_scvtf(auVar24,4);
          puVar17[-1] = CONCAT44(fVar31 + auVar24._12_4_ * fVar30,fVar31 + auVar24._8_4_ * fVar30);
          puVar17[-2] = CONCAT44(fVar31 + auVar24._4_4_ * fVar30,fVar31 + auVar24._0_4_ * fVar30);
          puVar17[1] = CONCAT44(fVar31 + auVar27._12_4_ * fVar30,fVar31 + auVar27._8_4_ * fVar30);
          *puVar17 = CONCAT44(fVar31 + auVar27._4_4_ * fVar30,fVar31 + auVar27._0_4_ * fVar30);
          puVar17 = puVar17 + 4;
          psVar19 = psVar19 + 8;
        } while (puVar17 != (undefined8 *)(param_5 + (ulong)uVar12 * 0x20 + 0x30));
      }
      iVar20 = iVar11;
      if (iVar11 < iVar7 + -3) {
        iVar2 = iVar11;
        iVar20 = iVar5;
        if (3 < uVar14) {
          uVar16 = 0;
          puVar17 = (undefined8 *)(param_5 + (long)iVar11 * 4);
          psVar19 = param_1 + iVar11;
          do {
            uVar16 = uVar16 + 1;
            auVar28._0_4_ = (int)*psVar19;
            auVar28._4_4_ = (int)psVar19[1];
            auVar28._8_4_ = (int)psVar19[2];
            auVar28._12_4_ = (int)psVar19[3];
            auVar25._0_4_ = (int)psVar19[4];
            auVar25._4_4_ = (int)psVar19[5];
            auVar25._8_4_ = (int)psVar19[6];
            auVar25._12_4_ = (int)psVar19[7];
            auVar27 = NEON_scvtf(auVar28,4);
            auVar24 = NEON_scvtf(auVar25,4);
            puVar17[1] = CONCAT44(fVar31 + fVar30 * auVar27._12_4_,fVar31 + fVar30 * auVar27._8_4_);
            *puVar17 = CONCAT44(fVar31 + fVar30 * auVar27._4_4_,fVar31 + fVar30 * auVar27._0_4_);
            puVar17[3] = CONCAT44(fVar31 + fVar30 * auVar24._12_4_,fVar31 + fVar30 * auVar24._8_4_);
            puVar17[2] = CONCAT44(fVar31 + fVar30 * auVar24._4_4_,fVar31 + fVar30 * auVar24._0_4_);
            puVar17 = puVar17 + 4;
            psVar19 = psVar19 + 8;
          } while (uVar16 < uVar1);
          iVar2 = iVar11 + uVar1 * 8;
          if (uVar1 * 2 == uVar13 + 1) goto LAB_00274968;
        }
        lVar18 = (long)iVar2;
        lVar21 = param_5 + lVar18 * 4;
        sVar8 = param_1[lVar18 + 1];
        sVar9 = param_1[lVar18 + 3];
        sVar10 = param_1[lVar18 + 2];
        *(float *)(param_5 + lVar18 * 4) = fVar31 + (float)(int)param_1[lVar18] * fVar30;
        *(float *)(lVar21 + 4) = fVar31 + (float)(int)sVar8 * fVar30;
        *(float *)(lVar21 + 0xc) = fVar31 + (float)(int)sVar9 * fVar30;
        *(float *)(lVar21 + 8) = fVar31 + (float)(int)sVar10 * fVar30;
      }
LAB_00274968:
      if (iVar20 < iVar7) {
        lVar21 = (long)iVar20;
        uVar15 = iVar7 - iVar20;
        uVar16 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
        uVar6 = (ulong)uVar16;
        if (uVar15 < uVar16) {
          uVar6 = (ulong)uVar15;
        }
        if (uVar15 < 9) {
          uVar6 = (ulong)uVar15;
        }
        uVar16 = (uint)uVar6;
        if (uVar16 != 0) {
          iVar2 = iVar20 + 1;
          *(float *)(param_5 + lVar21 * 4) = fVar31 + (float)(int)param_1[lVar21] * fVar30;
          if (uVar16 != 1) {
            iVar3 = iVar20 + 2;
            *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)(int)param_1[iVar2] * fVar30;
            iVar2 = iVar3;
            if (uVar16 != 2) {
              iVar2 = iVar20 + 3;
              *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)(int)param_1[iVar3] * fVar30;
              if (uVar16 != 3) {
                iVar3 = iVar20 + 4;
                *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)(int)param_1[iVar2] * fVar30
                ;
                iVar2 = iVar3;
                if (uVar16 != 4) {
                  iVar2 = iVar20 + 5;
                  *(float *)(param_5 + (long)iVar3 * 4) =
                       fVar31 + (float)(int)param_1[iVar3] * fVar30;
                  if (uVar16 != 5) {
                    iVar3 = iVar20 + 6;
                    *(float *)(param_5 + (long)iVar2 * 4) =
                         fVar31 + (float)(int)param_1[iVar2] * fVar30;
                    iVar2 = iVar3;
                    if (uVar16 != 6) {
                      iVar2 = iVar20 + 7;
                      *(float *)(param_5 + (long)iVar3 * 4) =
                           fVar31 + (float)(int)param_1[iVar3] * fVar30;
                      if (uVar16 == 8) {
                        *(float *)(param_5 + (long)iVar2 * 4) =
                             fVar31 + (float)(int)param_1[iVar2] * fVar30;
                        iVar2 = iVar20 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar20 = iVar2;
          if (uVar16 == uVar15) goto LAB_00274bf4;
        }
        uVar4 = ((uVar15 - uVar16) - 8 >> 3) + 1;
        iVar2 = uVar4 * 8;
        if (6 < (uVar15 - 1) - uVar16) {
          uVar23 = 0;
          psVar19 = param_1 + uVar6 + lVar21;
          puVar17 = (undefined8 *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar23 = uVar23 + 1;
            auVar29._0_4_ = (int)*psVar19;
            auVar29._4_4_ = (int)psVar19[1];
            auVar29._8_4_ = (int)psVar19[2];
            auVar29._12_4_ = (int)psVar19[3];
            auVar26._0_4_ = (int)psVar19[4];
            auVar26._4_4_ = (int)psVar19[5];
            auVar26._8_4_ = (int)psVar19[6];
            auVar26._12_4_ = (int)psVar19[7];
            auVar27 = NEON_scvtf(auVar29,4);
            auVar24 = NEON_scvtf(auVar26,4);
            puVar17[1] = CONCAT44(fVar31 + fVar30 * auVar27._12_4_,fVar31 + fVar30 * auVar27._8_4_);
            *puVar17 = CONCAT44(fVar31 + fVar30 * auVar27._4_4_,fVar31 + fVar30 * auVar27._0_4_);
            puVar17[3] = CONCAT44(fVar31 + fVar30 * auVar24._12_4_,fVar31 + fVar30 * auVar24._8_4_);
            puVar17[2] = CONCAT44(fVar31 + fVar30 * auVar24._4_4_,fVar31 + fVar30 * auVar24._0_4_);
            psVar19 = psVar19 + 8;
            puVar17 = puVar17 + 4;
          } while (uVar23 < uVar4);
          iVar20 = iVar20 + iVar2;
          if (iVar2 == uVar15 - uVar16) goto LAB_00274bf4;
        }
        iVar2 = iVar20 + 1;
        *(float *)(param_5 + (long)iVar20 * 4) = fVar31 + (float)(int)param_1[iVar20] * fVar30;
        if (iVar2 < iVar7) {
          iVar3 = iVar20 + 2;
          *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)(int)param_1[iVar2] * fVar30;
          if (iVar3 < iVar7) {
            iVar2 = iVar20 + 3;
            *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)(int)param_1[iVar3] * fVar30;
            if (iVar2 < iVar7) {
              iVar3 = iVar20 + 4;
              *(float *)(param_5 + (long)iVar2 * 4) = fVar31 + (float)(int)param_1[iVar2] * fVar30;
              if (iVar3 < iVar7) {
                iVar2 = iVar20 + 5;
                *(float *)(param_5 + (long)iVar3 * 4) = fVar31 + (float)(int)param_1[iVar3] * fVar30
                ;
                if (iVar2 < iVar7) {
                  iVar20 = iVar20 + 6;
                  *(float *)(param_5 + (long)iVar2 * 4) =
                       fVar31 + (float)(int)param_1[iVar2] * fVar30;
                  if (iVar20 < iVar7) {
                    *(float *)(param_5 + (long)iVar20 * 4) =
                         fVar31 + (float)(int)param_1[iVar20] * fVar30;
                  }
                }
              }
            }
          }
        }
      }
LAB_00274bf4:
      iVar22 = iVar22 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 00274c3c (1372 bytes) name=FUN_00274c3c

void FUN_00274c3c(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  uint *puVar8;
  uint uVar9;
  int iVar10;
  byte bVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  uint3 uVar18;
  uint3 uVar19;
  int iVar20;
  ulong *puVar21;
  byte *pbVar22;
  long lVar23;
  undefined8 *puVar24;
  long lVar25;
  int iVar26;
  long lVar27;
  uint uVar28;
  uint uVar29;
  undefined1 uVar30;
  undefined1 uVar31;
  undefined1 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  
  iVar26 = param_7[1];
  iVar10 = *param_7;
  if (iVar26 != 0) {
    uVar14 = iVar10 - 8U >> 3;
    iVar12 = (uVar14 + 1) * 8;
    if (iVar10 + -7 < 1) {
      iVar12 = 0;
    }
    uVar17 = (iVar10 + -4) - iVar12;
    lVar27 = (long)iVar12;
    uVar15 = uVar17 >> 2;
    uVar2 = uVar15 + 1;
    uVar3 = (uVar15 - 3 >> 2) + 1;
    iVar7 = iVar12 + 4 + uVar15 * 4;
    lVar1 = lVar27 + (ulong)uVar2 * 4;
    iVar16 = iVar10 + -3;
    do {
      if (0 < iVar10 + -7) {
        puVar21 = (ulong *)(param_5 + 0x10);
        puVar24 = param_1;
        do {
          uVar33 = *puVar24;
          uVar18 = CONCAT12((char)((ulong)uVar33 >> 8),(short)uVar33) & 0xff00ff;
          uVar30 = (undefined1)((ulong)uVar33 >> 0x28);
          puVar21[-1] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x18),
                                        (uint)(byte)((ulong)uVar33 >> 0x10));
          puVar21[-2] = (ulong)((uint6)CONCAT14((char)(uVar18 >> 0x10),(uint)uVar18) &
                               0xffff0000ffff);
          puVar21[1] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x38),
                                       (uint)(byte)((ulong)uVar33 >> 0x30));
          *puVar21 = (ulong)((uint6)CONCAT14(uVar30,(uint)CONCAT12(uVar30,(ushort)(byte)((ulong)
                                                  uVar33 >> 0x20))) & 0xffff0000ffff);
          puVar21 = puVar21 + 4;
          puVar24 = puVar24 + 1;
        } while (puVar21 != (ulong *)(param_5 + (ulong)uVar14 * 0x20 + 0x30));
      }
      iVar13 = iVar12;
      if (iVar12 < iVar16) {
        puVar21 = (ulong *)(param_5 + lVar27 * 4);
        pbVar22 = (byte *)((long)param_1 + lVar27);
        iVar13 = iVar7;
        if ((puVar21 < (ulong *)((long)param_1 + lVar1) && pbVar22 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 5)) {
          do {
            bVar11 = pbVar22[1];
            pbVar6 = pbVar22 + 4;
            *(uint *)puVar21 = (uint)*pbVar22;
            *(uint *)((long)puVar21 + 4) = (uint)bVar11;
            bVar11 = pbVar22[3];
            *(uint *)(puVar21 + 1) = (uint)pbVar22[2];
            *(uint *)((long)puVar21 + 0xc) = (uint)bVar11;
            puVar21 = puVar21 + 2;
            pbVar22 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar27 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar20 = iVar12;
          if (0xb < uVar17) {
            uVar29 = 0;
            do {
              uVar34 = *(undefined8 *)(pbVar22 + 8);
              uVar33 = *(undefined8 *)pbVar22;
              uVar29 = uVar29 + 1;
              uVar18 = CONCAT12((char)((ulong)uVar33 >> 8),(short)uVar33) & 0xff00ff;
              uVar30 = (undefined1)((ulong)uVar33 >> 0x28);
              uVar19 = CONCAT12((char)((ulong)uVar34 >> 8),(short)uVar34) & 0xff00ff;
              uVar31 = (undefined1)((ulong)uVar34 >> 0x28);
              puVar21[1] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x18),
                                           (uint)(byte)((ulong)uVar33 >> 0x10));
              *puVar21 = (ulong)((uint6)CONCAT14((char)(uVar18 >> 0x10),(uint)uVar18) &
                                0xffff0000ffff);
              puVar21[3] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x38),
                                           (uint)(byte)((ulong)uVar33 >> 0x30));
              puVar21[2] = (ulong)((uint6)CONCAT14(uVar30,(uint)CONCAT12(uVar30,(ushort)(byte)((
                                                  ulong)uVar33 >> 0x20))) & 0xffff0000ffff);
              puVar21[5] = (ulong)CONCAT14((char)((ulong)uVar34 >> 0x18),
                                           (uint)(byte)((ulong)uVar34 >> 0x10));
              puVar21[4] = (ulong)((uint6)CONCAT14((char)(uVar19 >> 0x10),(uint)uVar19) &
                                  0xffff0000ffff);
              puVar21[7] = (ulong)CONCAT14((char)((ulong)uVar34 >> 0x38),
                                           (uint)(byte)((ulong)uVar34 >> 0x30));
              puVar21[6] = (ulong)((uint6)CONCAT14(uVar31,(uint)CONCAT12(uVar31,(ushort)(byte)((
                                                  ulong)uVar34 >> 0x20))) & 0xffff0000ffff);
              puVar21 = puVar21 + 8;
              pbVar22 = pbVar22 + 0x10;
            } while (uVar29 < uVar3);
            iVar20 = iVar12 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00274e74;
          }
          lVar25 = (long)iVar20;
          lVar23 = param_5 + lVar25 * 4;
          bVar11 = *(byte *)((long)param_1 + lVar25 + 1);
          *(uint *)(param_5 + lVar25 * 4) = (uint)*(byte *)((long)param_1 + lVar25);
          *(uint *)(lVar23 + 4) = (uint)bVar11;
          bVar11 = *(byte *)((long)param_1 + lVar25 + 3);
          *(uint *)(lVar23 + 8) = (uint)*(byte *)((long)param_1 + lVar25 + 2);
          *(uint *)(lVar23 + 0xc) = (uint)bVar11;
          if (iVar20 + 4 < iVar16) {
            lVar25 = (long)(iVar20 + 4);
            lVar23 = param_5 + lVar25 * 4;
            bVar11 = *(byte *)((long)param_1 + lVar25 + 1);
            *(uint *)(param_5 + lVar25 * 4) = (uint)*(byte *)((long)param_1 + lVar25);
            *(uint *)(lVar23 + 4) = (uint)bVar11;
            bVar11 = *(byte *)((long)param_1 + lVar25 + 3);
            *(uint *)(lVar23 + 8) = (uint)*(byte *)((long)param_1 + lVar25 + 2);
            *(uint *)(lVar23 + 0xc) = (uint)bVar11;
            if (iVar20 + 8 < iVar16) {
              lVar25 = (long)(iVar20 + 8);
              lVar23 = param_5 + lVar25 * 4;
              bVar11 = *(byte *)((long)param_1 + lVar25 + 1);
              *(uint *)(param_5 + lVar25 * 4) = (uint)*(byte *)((long)param_1 + lVar25);
              *(uint *)(lVar23 + 4) = (uint)bVar11;
              bVar11 = *(byte *)((long)param_1 + lVar25 + 3);
              *(uint *)(lVar23 + 8) = (uint)*(byte *)((long)param_1 + lVar25 + 2);
              *(uint *)(lVar23 + 0xc) = (uint)bVar11;
            }
          }
        }
      }
LAB_00274e74:
      if (iVar13 < iVar10) {
        lVar23 = (long)iVar13;
        uVar29 = iVar10 - iVar13;
        pbVar22 = (byte *)((long)param_1 + lVar23);
        puVar8 = (uint *)(param_5 + lVar23 * 4);
        if ((pbVar22 < (byte *)(param_5 + (lVar23 + (ulong)uVar29) * 4) &&
             puVar8 < (uint *)((long)param_1 + lVar23 + (ulong)uVar29)) || (uVar29 < 0x15)) {
          lVar23 = 0;
          do {
            puVar8[lVar23] = (uint)pbVar22[lVar23];
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar10 + -1) - iVar13) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)puVar8 >> 2) & 3) & 3;
          if (uVar29 < uVar9) {
            uVar9 = uVar29;
          }
          iVar20 = iVar13;
          if (uVar9 != 0) {
            *puVar8 = (uint)*pbVar22;
            iVar20 = iVar13 + 1;
            if (uVar9 != 1) {
              lVar25 = (long)iVar20;
              iVar20 = iVar13 + 2;
              *(uint *)(param_5 + lVar25 * 4) = (uint)*(byte *)((long)param_1 + lVar25);
              if (uVar9 == 3) {
                lVar25 = (long)iVar20;
                iVar20 = iVar13 + 3;
                *(uint *)(param_5 + lVar25 * 4) = (uint)*(byte *)((long)param_1 + lVar25);
              }
            }
          }
          uVar4 = ((uVar29 - uVar9) - 0x10 >> 4) + 1;
          uVar28 = 0;
          iVar13 = uVar4 * 0x10;
          puVar21 = (ulong *)(param_5 + lVar23 * 4 + (ulong)uVar9 * 4);
          puVar24 = (undefined8 *)((long)param_1 + lVar23 + (ulong)uVar9);
          do {
            uVar34 = puVar24[1];
            uVar33 = *puVar24;
            uVar28 = uVar28 + 1;
            uVar30 = (undefined1)((ulong)uVar33 >> 8);
            uVar31 = (undefined1)((ulong)uVar33 >> 0x28);
            uVar18 = CONCAT12((char)((ulong)uVar34 >> 8),(short)uVar34) & 0xff00ff;
            uVar32 = (undefined1)((ulong)uVar34 >> 0x28);
            puVar21[1] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x18),
                                         (uint)(byte)((ulong)uVar33 >> 0x10));
            *puVar21 = (ulong)((uint6)CONCAT14(uVar30,(uint)CONCAT12(uVar30,(ushort)(byte)uVar33)) &
                              0xffff0000ffff);
            puVar21[3] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x38),
                                         (uint)(byte)((ulong)uVar33 >> 0x30));
            puVar21[2] = (ulong)((uint6)CONCAT14(uVar31,(uint)CONCAT12(uVar31,(ushort)(byte)((ulong)
                                                  uVar33 >> 0x20))) & 0xffff0000ffff);
            puVar21[5] = (ulong)CONCAT14((char)((ulong)uVar34 >> 0x18),
                                         (uint)(byte)((ulong)uVar34 >> 0x10));
            puVar21[4] = (ulong)((uint6)CONCAT14((char)(uVar18 >> 0x10),(uint)uVar18) &
                                0xffff0000ffff);
            puVar21[7] = (ulong)CONCAT14((char)((ulong)uVar34 >> 0x38),
                                         (uint)(byte)((ulong)uVar34 >> 0x30));
            puVar21[6] = (ulong)((uint6)CONCAT14(uVar32,(uint)CONCAT12(uVar32,(ushort)(byte)((ulong)
                                                  uVar34 >> 0x20))) & 0xffff0000ffff);
            puVar21 = puVar21 + 8;
            puVar24 = puVar24 + 2;
          } while (uVar28 < uVar4);
          iVar20 = iVar20 + iVar13;
          if (uVar29 - uVar9 != iVar13) {
            iVar13 = iVar20 + 1;
            *(uint *)(param_5 + (long)iVar20 * 4) = (uint)*(byte *)((long)param_1 + (long)iVar20);
            if (iVar13 < iVar10) {
              iVar5 = iVar20 + 2;
              *(uint *)(param_5 + (long)iVar13 * 4) = (uint)*(byte *)((long)param_1 + (long)iVar13);
              if (iVar5 < iVar10) {
                iVar13 = iVar20 + 3;
                *(uint *)(param_5 + (long)iVar5 * 4) = (uint)*(byte *)((long)param_1 + (long)iVar5);
                if (iVar13 < iVar10) {
                  iVar5 = iVar20 + 4;
                  *(uint *)(param_5 + (long)iVar13 * 4) =
                       (uint)*(byte *)((long)param_1 + (long)iVar13);
                  if (iVar5 < iVar10) {
                    iVar13 = iVar20 + 5;
                    *(uint *)(param_5 + (long)iVar5 * 4) =
                         (uint)*(byte *)((long)param_1 + (long)iVar5);
                    if (iVar13 < iVar10) {
                      iVar5 = iVar20 + 6;
                      *(uint *)(param_5 + (long)iVar13 * 4) =
                           (uint)*(byte *)((long)param_1 + (long)iVar13);
                      if (iVar5 < iVar10) {
                        iVar13 = iVar20 + 7;
                        *(uint *)(param_5 + (long)iVar5 * 4) =
                             (uint)*(byte *)((long)param_1 + (long)iVar5);
                        if (iVar13 < iVar10) {
                          iVar5 = iVar20 + 8;
                          *(uint *)(param_5 + (long)iVar13 * 4) =
                               (uint)*(byte *)((long)param_1 + (long)iVar13);
                          if (iVar5 < iVar10) {
                            iVar13 = iVar20 + 9;
                            *(uint *)(param_5 + (long)iVar5 * 4) =
                                 (uint)*(byte *)((long)param_1 + (long)iVar5);
                            if (iVar13 < iVar10) {
                              iVar5 = iVar20 + 10;
                              *(uint *)(param_5 + (long)iVar13 * 4) =
                                   (uint)*(byte *)((long)param_1 + (long)iVar13);
                              if (iVar5 < iVar10) {
                                iVar13 = iVar20 + 0xb;
                                *(uint *)(param_5 + (long)iVar5 * 4) =
                                     (uint)*(byte *)((long)param_1 + (long)iVar5);
                                if (iVar13 < iVar10) {
                                  iVar5 = iVar20 + 0xc;
                                  *(uint *)(param_5 + (long)iVar13 * 4) =
                                       (uint)*(byte *)((long)param_1 + (long)iVar13);
                                  if (iVar5 < iVar10) {
                                    iVar13 = iVar20 + 0xd;
                                    *(uint *)(param_5 + (long)iVar5 * 4) =
                                         (uint)*(byte *)((long)param_1 + (long)iVar5);
                                    if (iVar13 < iVar10) {
                                      iVar20 = iVar20 + 0xe;
                                      *(uint *)(param_5 + (long)iVar13 * 4) =
                                           (uint)*(byte *)((long)param_1 + (long)iVar13);
                                      if (iVar20 < iVar10) {
                                        *(uint *)(param_5 + (long)iVar20 * 4) =
                                             (uint)*(byte *)((long)param_1 + (long)iVar20);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar26 = iVar26 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 00275198 (1552 bytes) name=FUN_00275198

void FUN_00275198(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  byte bVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  float *pfVar18;
  undefined8 *puVar19;
  undefined8 *puVar20;
  byte *pbVar21;
  long lVar22;
  long lVar23;
  int iVar24;
  long lVar25;
  uint uVar26;
  uint uVar27;
  undefined1 uVar28;
  undefined8 uVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  
  iVar24 = param_7[1];
  iVar9 = *param_7;
  if (iVar24 != 0) {
    uVar13 = iVar9 - 8U >> 3;
    iVar11 = (uVar13 + 1) * 8;
    if (iVar9 + -7 < 1) {
      iVar11 = 0;
    }
    uVar16 = (iVar9 + -4) - iVar11;
    lVar25 = (long)iVar11;
    uVar14 = uVar16 >> 2;
    uVar2 = uVar14 + 1;
    uVar3 = (uVar14 - 3 >> 2) + 1;
    iVar7 = iVar11 + 4 + uVar14 * 4;
    lVar1 = lVar25 + (ulong)uVar2 * 4;
    iVar15 = iVar9 + -3;
    do {
      if (0 < iVar9 + -7) {
        puVar19 = (undefined8 *)(param_5 + 0x10);
        puVar20 = param_1;
        do {
          uVar29 = *puVar20;
          uVar28 = (undefined1)((ulong)uVar29 >> 8);
          auVar31._6_2_ = 0;
          auVar31._0_6_ =
               (uint6)CONCAT14(uVar28,(uint)CONCAT12(uVar28,(ushort)(byte)uVar29)) & 0xffff0000ffff;
          auVar31[8] = (char)((ulong)uVar29 >> 0x10);
          auVar31._9_3_ = 0;
          auVar31[0xc] = (char)((ulong)uVar29 >> 0x18);
          auVar31._13_3_ = 0;
          auVar31 = NEON_ucvtf(auVar31,4);
          auVar30._1_3_ = 0;
          auVar30[0] = (byte)((ulong)uVar29 >> 0x20);
          auVar30[4] = (char)((ulong)uVar29 >> 0x28);
          auVar30._5_3_ = 0;
          auVar30[8] = (char)((ulong)uVar29 >> 0x30);
          auVar30._9_3_ = 0;
          auVar30[0xc] = (char)((ulong)uVar29 >> 0x38);
          auVar30._13_3_ = 0;
          auVar30 = NEON_ucvtf(auVar30,4);
          puVar19[-1] = auVar31._8_8_;
          puVar19[-2] = auVar31._0_8_;
          puVar19[1] = auVar30._8_8_;
          *puVar19 = auVar30._0_8_;
          puVar19 = puVar19 + 4;
          puVar20 = puVar20 + 1;
        } while (puVar19 != (undefined8 *)(param_5 + (ulong)uVar13 * 0x20 + 0x30));
      }
      iVar12 = iVar11;
      if (iVar11 < iVar15) {
        pfVar18 = (float *)(param_5 + lVar25 * 4);
        pbVar21 = (byte *)((long)param_1 + lVar25);
        iVar12 = iVar7;
        if ((pfVar18 < (float *)((long)param_1 + lVar1) && pbVar21 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 5)) {
          do {
            pbVar6 = pbVar21 + 4;
            bVar10 = *pbVar21;
            pfVar18[1] = (float)pbVar21[1];
            *pfVar18 = (float)bVar10;
            bVar10 = pbVar21[2];
            pfVar18[3] = (float)pbVar21[3];
            pfVar18[2] = (float)bVar10;
            pfVar18 = pfVar18 + 4;
            pbVar21 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar25 + 4 + (ulong)uVar14 * 4));
        }
        else {
          iVar17 = iVar11;
          if (0xb < uVar16) {
            uVar27 = 0;
            do {
              uVar27 = uVar27 + 1;
              auVar36._6_2_ = 0;
              auVar36._0_6_ =
                   (uint6)CONCAT14(pbVar21[1],(uint)CONCAT12(pbVar21[1],(ushort)*pbVar21)) &
                   0xffff0000ffff;
              auVar36[8] = pbVar21[2];
              auVar36._9_3_ = 0;
              auVar36[0xc] = pbVar21[3];
              auVar36._13_3_ = 0;
              auVar34._1_3_ = 0;
              auVar34[0] = pbVar21[4];
              auVar34[4] = pbVar21[5];
              auVar34._5_3_ = 0;
              auVar34[8] = pbVar21[6];
              auVar34._9_3_ = 0;
              auVar34[0xc] = pbVar21[7];
              auVar34._13_3_ = 0;
              auVar33._6_2_ = 0;
              auVar33._0_6_ =
                   (uint6)CONCAT14(pbVar21[9],(uint)CONCAT12(pbVar21[9],(ushort)pbVar21[8])) &
                   0xffff0000ffff;
              auVar33[8] = pbVar21[10];
              auVar33._9_3_ = 0;
              auVar33[0xc] = pbVar21[0xb];
              auVar33._13_3_ = 0;
              auVar38._1_3_ = 0;
              auVar38[0] = pbVar21[0xc];
              auVar38[4] = pbVar21[0xd];
              auVar38._5_3_ = 0;
              auVar38[8] = pbVar21[0xe];
              auVar38._9_3_ = 0;
              auVar38[0xc] = pbVar21[0xf];
              auVar38._13_3_ = 0;
              auVar36 = NEON_scvtf(auVar36,4);
              auVar31 = NEON_scvtf(auVar34,4);
              auVar34 = NEON_scvtf(auVar33,4);
              auVar30 = NEON_scvtf(auVar38,4);
              *(long *)(pfVar18 + 2) = auVar36._8_8_;
              *(long *)pfVar18 = auVar36._0_8_;
              *(long *)(pfVar18 + 6) = auVar31._8_8_;
              *(long *)(pfVar18 + 4) = auVar31._0_8_;
              *(long *)(pfVar18 + 10) = auVar34._8_8_;
              *(long *)(pfVar18 + 8) = auVar34._0_8_;
              *(long *)(pfVar18 + 0xe) = auVar30._8_8_;
              *(long *)(pfVar18 + 0xc) = auVar30._0_8_;
              pfVar18 = pfVar18 + 0x10;
              pbVar21 = pbVar21 + 0x10;
            } while (uVar27 < uVar3);
            iVar17 = iVar11 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00275418;
          }
          lVar22 = (long)iVar17;
          bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
          lVar23 = param_5 + lVar22 * 4;
          *(float *)(param_5 + lVar22 * 4) = (float)*(byte *)((long)param_1 + lVar22);
          *(float *)(lVar23 + 4) = (float)bVar10;
          bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
          *(float *)(lVar23 + 0xc) = (float)*(byte *)((long)param_1 + lVar22 + 3);
          *(float *)(lVar23 + 8) = (float)bVar10;
          if (iVar17 + 4 < iVar15) {
            lVar22 = (long)(iVar17 + 4);
            bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
            lVar23 = param_5 + lVar22 * 4;
            *(float *)(param_5 + lVar22 * 4) = (float)*(byte *)((long)param_1 + lVar22);
            *(float *)(lVar23 + 4) = (float)bVar10;
            bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
            *(float *)(lVar23 + 0xc) = (float)*(byte *)((long)param_1 + lVar22 + 3);
            *(float *)(lVar23 + 8) = (float)bVar10;
            if (iVar17 + 8 < iVar15) {
              lVar22 = (long)(iVar17 + 8);
              bVar10 = *(byte *)((long)param_1 + lVar22 + 1);
              lVar23 = param_5 + lVar22 * 4;
              *(float *)(param_5 + lVar22 * 4) = (float)*(byte *)((long)param_1 + lVar22);
              *(float *)(lVar23 + 4) = (float)bVar10;
              bVar10 = *(byte *)((long)param_1 + lVar22 + 2);
              *(float *)(lVar23 + 0xc) = (float)*(byte *)((long)param_1 + lVar22 + 3);
              *(float *)(lVar23 + 8) = (float)bVar10;
            }
          }
        }
      }
LAB_00275418:
      if (iVar12 < iVar9) {
        lVar23 = (long)iVar12;
        uVar27 = iVar9 - iVar12;
        pbVar21 = (byte *)((long)param_1 + lVar23);
        pfVar18 = (float *)(param_5 + lVar23 * 4);
        if ((pbVar21 < (byte *)(param_5 + (lVar23 + (ulong)uVar27) * 4) &&
             pfVar18 < (float *)((long)param_1 + lVar23 + (ulong)uVar27)) || (uVar27 < 0x15)) {
          lVar23 = 0;
          do {
            pfVar18[lVar23] = (float)pbVar21[lVar23];
            lVar23 = lVar23 + 1;
          } while (lVar23 != (ulong)(uint)((iVar9 + -1) - iVar12) + 1);
        }
        else {
          uVar8 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
          if (uVar27 < uVar8) {
            uVar8 = uVar27;
          }
          iVar17 = iVar12;
          if (uVar8 != 0) {
            iVar17 = iVar12 + 1;
            *pfVar18 = (float)*pbVar21;
            if (uVar8 != 1) {
              lVar22 = (long)iVar17;
              iVar17 = iVar12 + 2;
              *(float *)(param_5 + lVar22 * 4) = (float)*(byte *)((long)param_1 + lVar22);
              if (uVar8 == 3) {
                lVar22 = (long)iVar17;
                iVar17 = iVar12 + 3;
                *(float *)(param_5 + lVar22 * 4) = (float)*(byte *)((long)param_1 + lVar22);
              }
            }
          }
          uVar4 = ((uVar27 - uVar8) - 0x10 >> 4) + 1;
          uVar26 = 0;
          iVar12 = uVar4 * 0x10;
          puVar19 = (undefined8 *)(param_5 + lVar23 * 4 + (ulong)uVar8 * 4);
          pbVar21 = (byte *)((long)param_1 + lVar23 + (ulong)uVar8);
          do {
            uVar26 = uVar26 + 1;
            auVar39._6_2_ = 0;
            auVar39._0_6_ =
                 (uint6)CONCAT14(pbVar21[1],(uint)CONCAT12(pbVar21[1],(ushort)*pbVar21)) &
                 0xffff0000ffff;
            auVar39[8] = pbVar21[2];
            auVar39._9_3_ = 0;
            auVar39[0xc] = pbVar21[3];
            auVar39._13_3_ = 0;
            auVar35._1_3_ = 0;
            auVar35[0] = pbVar21[4];
            auVar35[4] = pbVar21[5];
            auVar35._5_3_ = 0;
            auVar35[8] = pbVar21[6];
            auVar35._9_3_ = 0;
            auVar35[0xc] = pbVar21[7];
            auVar35._13_3_ = 0;
            auVar37._6_2_ = 0;
            auVar37._0_6_ =
                 (uint6)CONCAT14(pbVar21[9],(uint)CONCAT12(pbVar21[9],(ushort)pbVar21[8])) &
                 0xffff0000ffff;
            auVar37[8] = pbVar21[10];
            auVar37._9_3_ = 0;
            auVar37[0xc] = pbVar21[0xb];
            auVar37._13_3_ = 0;
            auVar32._1_3_ = 0;
            auVar32[0] = pbVar21[0xc];
            auVar32[4] = pbVar21[0xd];
            auVar32._5_3_ = 0;
            auVar32[8] = pbVar21[0xe];
            auVar32._9_3_ = 0;
            auVar32[0xc] = pbVar21[0xf];
            auVar32._13_3_ = 0;
            auVar34 = NEON_scvtf(auVar39,4);
            auVar31 = NEON_scvtf(auVar35,4);
            auVar38 = NEON_scvtf(auVar37,4);
            auVar30 = NEON_scvtf(auVar32,4);
            puVar19[1] = auVar34._8_8_;
            *puVar19 = auVar34._0_8_;
            puVar19[3] = auVar31._8_8_;
            puVar19[2] = auVar31._0_8_;
            puVar19[5] = auVar38._8_8_;
            puVar19[4] = auVar38._0_8_;
            puVar19[7] = auVar30._8_8_;
            puVar19[6] = auVar30._0_8_;
            puVar19 = puVar19 + 8;
            pbVar21 = pbVar21 + 0x10;
          } while (uVar26 < uVar4);
          iVar17 = iVar17 + iVar12;
          if (uVar27 - uVar8 != iVar12) {
            iVar12 = iVar17 + 1;
            *(float *)(param_5 + (long)iVar17 * 4) = (float)*(byte *)((long)param_1 + (long)iVar17);
            if (iVar12 < iVar9) {
              iVar5 = iVar17 + 2;
              *(float *)(param_5 + (long)iVar12 * 4) =
                   (float)*(byte *)((long)param_1 + (long)iVar12);
              if (iVar5 < iVar9) {
                iVar12 = iVar17 + 3;
                *(float *)(param_5 + (long)iVar5 * 4) =
                     (float)*(byte *)((long)param_1 + (long)iVar5);
                if (iVar12 < iVar9) {
                  iVar5 = iVar17 + 4;
                  *(float *)(param_5 + (long)iVar12 * 4) =
                       (float)*(byte *)((long)param_1 + (long)iVar12);
                  if (iVar5 < iVar9) {
                    iVar12 = iVar17 + 5;
                    *(float *)(param_5 + (long)iVar5 * 4) =
                         (float)*(byte *)((long)param_1 + (long)iVar5);
                    if (iVar12 < iVar9) {
                      iVar5 = iVar17 + 6;
                      *(float *)(param_5 + (long)iVar12 * 4) =
                           (float)*(byte *)((long)param_1 + (long)iVar12);
                      if (iVar5 < iVar9) {
                        iVar12 = iVar17 + 7;
                        *(float *)(param_5 + (long)iVar5 * 4) =
                             (float)*(byte *)((long)param_1 + (long)iVar5);
                        if (iVar12 < iVar9) {
                          iVar5 = iVar17 + 8;
                          *(float *)(param_5 + (long)iVar12 * 4) =
                               (float)*(byte *)((long)param_1 + (long)iVar12);
                          if (iVar5 < iVar9) {
                            iVar12 = iVar17 + 9;
                            *(float *)(param_5 + (long)iVar5 * 4) =
                                 (float)*(byte *)((long)param_1 + (long)iVar5);
                            if (iVar12 < iVar9) {
                              iVar5 = iVar17 + 10;
                              *(float *)(param_5 + (long)iVar12 * 4) =
                                   (float)*(byte *)((long)param_1 + (long)iVar12);
                              if (iVar5 < iVar9) {
                                iVar12 = iVar17 + 0xb;
                                *(float *)(param_5 + (long)iVar5 * 4) =
                                     (float)*(byte *)((long)param_1 + (long)iVar5);
                                if (iVar12 < iVar9) {
                                  iVar5 = iVar17 + 0xc;
                                  *(float *)(param_5 + (long)iVar12 * 4) =
                                       (float)*(byte *)((long)param_1 + (long)iVar12);
                                  if (iVar5 < iVar9) {
                                    iVar12 = iVar17 + 0xd;
                                    *(float *)(param_5 + (long)iVar5 * 4) =
                                         (float)*(byte *)((long)param_1 + (long)iVar5);
                                    if (iVar12 < iVar9) {
                                      iVar17 = iVar17 + 0xe;
                                      *(float *)(param_5 + (long)iVar12 * 4) =
                                           (float)*(byte *)((long)param_1 + (long)iVar12);
                                      if (iVar17 < iVar9) {
                                        *(float *)(param_5 + (long)iVar17 * 4) =
                                             (float)*(byte *)((long)param_1 + (long)iVar17);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar24 = iVar24 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 002757a8 (1832 bytes) name=FUN_002757a8

/* WARNING: Removing unreachable block (ram,0x00275e64) */
/* WARNING: Removing unreachable block (ram,0x00275e78) */
/* WARNING: Removing unreachable block (ram,0x00275e80) */

void FUN_002757a8(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  short *psVar8;
  uint uVar9;
  int iVar10;
  char cVar11;
  char cVar12;
  byte bVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  undefined8 *puVar24;
  ushort *puVar25;
  short sVar26;
  long lVar27;
  short sVar28;
  ushort uVar29;
  uint uVar30;
  int iVar31;
  long lVar32;
  uint uVar33;
  long lVar34;
  char *pcVar35;
  undefined8 uVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined8 uVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  
  iVar31 = param_7[1];
  iVar10 = *param_7;
  if (iVar31 != 0) {
    uVar16 = iVar10 - 8U >> 3;
    iVar14 = (uVar16 + 1) * 8;
    if (iVar10 + -7 < 1) {
      iVar14 = 0;
    }
    uVar19 = (iVar10 + -4) - iVar14;
    uVar17 = uVar19 >> 2;
    lVar32 = (long)iVar14;
    uVar2 = uVar17 + 1;
    uVar3 = (uVar17 - 3 >> 2) + 1;
    lVar1 = lVar32 + (ulong)uVar2 * 4;
    iVar18 = iVar10 + -3;
    iVar7 = iVar14 + 4 + uVar17 * 4;
    do {
      if (0 < iVar10 + -7) {
        puVar21 = param_5;
        puVar24 = param_1;
        do {
          uVar36 = *puVar24;
          auVar41._0_8_ = CONCAT44((int)(short)(char)((ulong)uVar36 >> 8),(int)(short)(char)uVar36);
          auVar41._8_4_ = (int)(short)(char)((ulong)uVar36 >> 0x10);
          auVar41._12_4_ = (int)(short)(char)((ulong)uVar36 >> 0x18);
          uVar40 = NEON_sqxtun(auVar41._0_8_,auVar41,4);
          auVar37._0_8_ =
               CONCAT44((int)(short)(char)((ulong)uVar36 >> 0x28),
                        (int)(short)(char)((ulong)uVar36 >> 0x20));
          auVar37._8_4_ = (int)(short)(char)((ulong)uVar36 >> 0x30);
          auVar37._12_4_ = (int)(short)(char)((ulong)uVar36 >> 0x38);
          uVar36 = NEON_sqxtun(auVar37._0_8_,auVar37,4);
          puVar22 = puVar21 + 2;
          puVar21[1] = uVar36;
          *puVar21 = uVar40;
          puVar21 = puVar22;
          puVar24 = puVar24 + 1;
        } while (puVar22 != param_5 + ((ulong)uVar16 + 1) * 2);
      }
      iVar15 = iVar14;
      if (iVar14 < iVar18) {
        puVar25 = (ushort *)((long)param_5 + lVar32 * 2);
        pbVar23 = (byte *)((long)param_1 + lVar32);
        iVar15 = iVar7;
        if ((puVar25 < (ushort *)((long)param_1 + lVar1) &&
             pbVar23 < (byte *)((long)param_5 + lVar1 * 2)) || (uVar2 < 4)) {
          do {
            pbVar6 = pbVar23 + 4;
            bVar13 = *pbVar23;
            uVar29 = (ushort)(char)pbVar23[1];
            if ((char)pbVar23[1] < '\0') {
              uVar29 = 0;
            }
            puVar25[1] = uVar29;
            *puVar25 = (ushort)bVar13;
            bVar13 = pbVar23[2];
            puVar25[3] = (ushort)pbVar23[3];
            puVar25[2] = (ushort)bVar13;
            pbVar23 = pbVar6;
            puVar25 = puVar25 + 4;
          } while (pbVar6 != (byte *)((long)param_1 + lVar32 + 4 + (ulong)uVar17 * 4));
        }
        else {
          iVar20 = iVar14;
          if (0xb < uVar19) {
            uVar30 = 0;
            do {
              uVar30 = uVar30 + 1;
              auVar45._0_4_ = (int)(short)(char)*pbVar23;
              auVar45._4_4_ = (int)(short)(char)pbVar23[1];
              auVar45._8_4_ = (int)(short)(char)pbVar23[2];
              auVar45._12_4_ = (int)(short)(char)pbVar23[3];
              auVar44._0_4_ = (int)(short)(char)pbVar23[4];
              auVar44._4_4_ = (int)(short)(char)pbVar23[5];
              auVar44._8_4_ = (int)(short)(char)pbVar23[6];
              auVar44._12_4_ = (int)(short)(char)pbVar23[7];
              auVar43._0_4_ = (int)(short)(char)pbVar23[8];
              auVar43._4_4_ = (int)(short)(char)pbVar23[9];
              auVar43._8_4_ = (int)(short)(char)pbVar23[10];
              auVar43._12_4_ = (int)(short)(char)pbVar23[0xb];
              auVar49._0_4_ = (int)(short)(char)pbVar23[0xc];
              auVar49._4_4_ = (int)(short)(char)pbVar23[0xd];
              auVar49._8_4_ = (int)(short)(char)pbVar23[0xe];
              auVar49._12_4_ = (int)(short)(char)pbVar23[0xf];
              auVar46 = NEON_smax(auVar45,ZEXT816(0),4);
              auVar41 = NEON_smax(auVar44,ZEXT816(0),4);
              auVar44 = NEON_smax(auVar43,ZEXT816(0),4);
              auVar37 = NEON_smax(auVar49,ZEXT816(0),4);
              auVar47._0_8_ =
                   CONCAT26(auVar46._12_2_,
                            CONCAT24(auVar46._8_2_,CONCAT22(auVar46._4_2_,auVar46._0_2_)));
              auVar47._8_2_ = auVar41._0_2_;
              auVar47._10_2_ = auVar41._4_2_;
              auVar47._12_2_ = auVar41._8_2_;
              auVar47._14_2_ = auVar41._12_2_;
              *(long *)(puVar25 + 4) = auVar47._8_8_;
              *(undefined8 *)puVar25 = auVar47._0_8_;
              auVar46._0_8_ =
                   CONCAT26(auVar44._12_2_,
                            CONCAT24(auVar44._8_2_,CONCAT22(auVar44._4_2_,auVar44._0_2_)));
              auVar46._8_2_ = auVar37._0_2_;
              auVar46._10_2_ = auVar37._4_2_;
              auVar46._12_2_ = auVar37._8_2_;
              auVar46._14_2_ = auVar37._12_2_;
              *(long *)(puVar25 + 0xc) = auVar46._8_8_;
              *(undefined8 *)(puVar25 + 8) = auVar46._0_8_;
              pbVar23 = pbVar23 + 0x10;
              puVar25 = puVar25 + 0x10;
            } while (uVar30 < uVar3);
            iVar20 = iVar14 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00275a50;
          }
          lVar27 = (long)iVar20;
          lVar34 = lVar27 * 2;
          cVar11 = *(char *)((long)param_1 + lVar27 + 1);
          sVar26 = (short)cVar11;
          if (cVar11 < '\0') {
            sVar26 = 0;
          }
          sVar28 = (short)*(char *)((long)param_1 + lVar27);
          if (*(char *)((long)param_1 + lVar27) < '\0') {
            sVar28 = 0;
          }
          *(short *)((long)param_5 + lVar34) = sVar28;
          *(short *)((long)param_5 + lVar34 + 2) = sVar26;
          cVar11 = *(char *)((long)param_1 + lVar27 + 3);
          cVar12 = *(char *)((long)param_1 + lVar27 + 2);
          sVar26 = (short)cVar11;
          if (cVar11 < '\0') {
            sVar26 = 0;
          }
          sVar28 = (short)cVar12;
          if (cVar12 < '\0') {
            sVar28 = 0;
          }
          *(short *)((long)param_5 + lVar34 + 6) = sVar26;
          *(short *)((long)param_5 + lVar34 + 4) = sVar28;
          if (iVar20 + 4 < iVar18) {
            lVar27 = (long)(iVar20 + 4);
            lVar34 = lVar27 * 2;
            cVar11 = *(char *)((long)param_1 + lVar27 + 1);
            sVar26 = (short)cVar11;
            if (cVar11 < '\0') {
              sVar26 = 0;
            }
            sVar28 = (short)*(char *)((long)param_1 + lVar27);
            if (*(char *)((long)param_1 + lVar27) < '\0') {
              sVar28 = 0;
            }
            *(short *)((long)param_5 + lVar34) = sVar28;
            *(short *)((long)param_5 + lVar34 + 2) = sVar26;
            cVar11 = *(char *)((long)param_1 + lVar27 + 3);
            cVar12 = *(char *)((long)param_1 + lVar27 + 2);
            sVar26 = (short)cVar11;
            if (cVar11 < '\0') {
              sVar26 = 0;
            }
            sVar28 = (short)cVar12;
            if (cVar12 < '\0') {
              sVar28 = 0;
            }
            *(short *)((long)param_5 + lVar34 + 6) = sVar26;
            *(short *)((long)param_5 + lVar34 + 4) = sVar28;
            if (iVar20 + 8 < iVar18) {
              lVar27 = (long)(iVar20 + 8);
              lVar34 = lVar27 * 2;
              cVar11 = *(char *)((long)param_1 + lVar27 + 1);
              sVar26 = (short)cVar11;
              if (cVar11 < '\0') {
                sVar26 = 0;
              }
              sVar28 = (short)*(char *)((long)param_1 + lVar27);
              if (*(char *)((long)param_1 + lVar27) < '\0') {
                sVar28 = 0;
              }
              *(short *)((long)param_5 + lVar34) = sVar28;
              *(short *)((long)param_5 + lVar34 + 2) = sVar26;
              cVar11 = *(char *)((long)param_1 + lVar27 + 3);
              cVar12 = *(char *)((long)param_1 + lVar27 + 2);
              sVar26 = (short)cVar11;
              if (cVar11 < '\0') {
                sVar26 = 0;
              }
              sVar28 = (short)cVar12;
              if (cVar12 < '\0') {
                sVar28 = 0;
              }
              *(short *)((long)param_5 + lVar34 + 6) = sVar26;
              *(short *)((long)param_5 + lVar34 + 4) = sVar28;
            }
          }
        }
      }
LAB_00275a50:
      if (iVar15 < iVar10) {
        lVar27 = (long)iVar15;
        uVar30 = iVar10 - iVar15;
        pcVar35 = (char *)((long)param_1 + lVar27);
        psVar8 = (short *)((long)param_5 + lVar27 * 2);
        if ((pcVar35 < (char *)((long)param_5 + (lVar27 + (ulong)uVar30) * 2) &&
             psVar8 < (short *)((long)param_1 + lVar27 + (ulong)uVar30)) || (uVar30 < 0x13)) {
          lVar27 = 0;
          do {
            sVar26 = (short)pcVar35[lVar27];
            if (pcVar35[lVar27] < '\0') {
              sVar26 = 0;
            }
            psVar8[lVar27] = sVar26;
            lVar27 = lVar27 + 1;
          } while (lVar27 != (ulong)(uint)((iVar10 + -1) - iVar15) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)psVar8 >> 1) & 7) & 7;
          if (uVar30 < uVar9) {
            uVar9 = uVar30;
          }
          iVar20 = iVar15;
          if (uVar9 != 0) {
            iVar20 = iVar15 + 1;
            sVar26 = (short)*pcVar35;
            if (*pcVar35 < '\0') {
              sVar26 = 0;
            }
            *psVar8 = sVar26;
            if (uVar9 != 1) {
              lVar34 = (long)iVar20;
              iVar20 = iVar15 + 2;
              cVar11 = *(char *)((long)param_1 + lVar34);
              sVar26 = (short)cVar11;
              if (cVar11 < '\0') {
                sVar26 = 0;
              }
              *(short *)((long)param_5 + lVar34 * 2) = sVar26;
              if (uVar9 != 2) {
                lVar34 = (long)iVar20;
                iVar20 = iVar15 + 3;
                cVar11 = *(char *)((long)param_1 + lVar34);
                sVar26 = (short)cVar11;
                if (cVar11 < '\0') {
                  sVar26 = 0;
                }
                *(short *)((long)param_5 + lVar34 * 2) = sVar26;
                if (uVar9 != 3) {
                  lVar34 = (long)iVar20;
                  iVar20 = iVar15 + 4;
                  cVar11 = *(char *)((long)param_1 + lVar34);
                  sVar26 = (short)cVar11;
                  if (cVar11 < '\0') {
                    sVar26 = 0;
                  }
                  *(short *)((long)param_5 + lVar34 * 2) = sVar26;
                  if (uVar9 != 4) {
                    lVar34 = (long)iVar20;
                    iVar20 = iVar15 + 5;
                    cVar11 = *(char *)((long)param_1 + lVar34);
                    sVar26 = (short)cVar11;
                    if (cVar11 < '\0') {
                      sVar26 = 0;
                    }
                    *(short *)((long)param_5 + lVar34 * 2) = sVar26;
                    if (uVar9 != 5) {
                      lVar34 = (long)iVar20;
                      iVar20 = iVar15 + 6;
                      cVar11 = *(char *)((long)param_1 + lVar34);
                      sVar26 = (short)cVar11;
                      if (cVar11 < '\0') {
                        sVar26 = 0;
                      }
                      *(short *)((long)param_5 + lVar34 * 2) = sVar26;
                      if (uVar9 == 7) {
                        lVar34 = (long)iVar20;
                        iVar20 = iVar15 + 7;
                        cVar11 = *(char *)((long)param_1 + lVar34);
                        sVar26 = (short)cVar11;
                        if (cVar11 < '\0') {
                          sVar26 = 0;
                        }
                        *(short *)((long)param_5 + lVar34 * 2) = sVar26;
                      }
                    }
                  }
                }
              }
            }
          }
          uVar4 = ((uVar30 - uVar9) - 0x10 >> 4) + 1;
          iVar15 = uVar4 * 0x10;
          if (0xe < (uVar30 - 1) - uVar9) {
            uVar33 = 0;
            puVar21 = (undefined8 *)((long)param_5 + lVar27 * 2 + (ulong)uVar9 * 2);
            pcVar35 = (char *)((long)param_1 + lVar27 + (ulong)uVar9);
            do {
              uVar33 = uVar33 + 1;
              auVar50._0_4_ = (int)(short)*pcVar35;
              auVar50._4_4_ = (int)(short)pcVar35[1];
              auVar50._8_4_ = (int)(short)pcVar35[2];
              auVar50._12_4_ = (int)(short)pcVar35[3];
              auVar38._0_4_ = (int)(short)pcVar35[4];
              auVar38._4_4_ = (int)(short)pcVar35[5];
              auVar38._8_4_ = (int)(short)pcVar35[6];
              auVar38._12_4_ = (int)(short)pcVar35[7];
              auVar48._0_4_ = (int)(short)pcVar35[8];
              auVar48._4_4_ = (int)(short)pcVar35[9];
              auVar48._8_4_ = (int)(short)pcVar35[10];
              auVar48._12_4_ = (int)(short)pcVar35[0xb];
              auVar42._0_4_ = (int)(short)pcVar35[0xc];
              auVar42._4_4_ = (int)(short)pcVar35[0xd];
              auVar42._8_4_ = (int)(short)pcVar35[0xe];
              auVar42._12_4_ = (int)(short)pcVar35[0xf];
                    /* catch() { ... } // from try @ 00275c74 with catch @ 00275bec
                       catch() { ... } // from try @ 00275d18 with catch @ 00275bec
                       catch() { ... } // from try @ 00275d74 with catch @ 00275bec */
              auVar44 = NEON_smax(auVar50,ZEXT816(0),4);
              auVar37 = NEON_smax(auVar38,ZEXT816(0),4);
              auVar49 = NEON_smax(auVar48,ZEXT816(0),4);
              auVar41 = NEON_smax(auVar42,ZEXT816(0),4);
              puVar21[1] = CONCAT26(auVar37._12_2_,
                                    CONCAT24(auVar37._8_2_,CONCAT22(auVar37._4_2_,auVar37._0_2_)));
              *puVar21 = CONCAT26(auVar44._12_2_,
                                  CONCAT24(auVar44._8_2_,CONCAT22(auVar44._4_2_,auVar44._0_2_)));
              auVar39._0_8_ =
                   CONCAT26(auVar49._12_2_,
                            CONCAT24(auVar49._8_2_,CONCAT22(auVar49._4_2_,auVar49._0_2_)));
              auVar39._8_2_ = auVar41._0_2_;
              auVar39._10_2_ = auVar41._4_2_;
              auVar39._12_2_ = auVar41._8_2_;
              auVar39._14_2_ = auVar41._12_2_;
              puVar21[3] = auVar39._8_8_;
              puVar21[2] = auVar39._0_8_;
              puVar21 = puVar21 + 4;
              pcVar35 = pcVar35 + 0x10;
            } while (uVar33 < uVar4);
            iVar20 = iVar20 + iVar15;
            if (uVar30 - uVar9 == iVar15) goto LAB_00275df8;
          }
          iVar15 = iVar20 + 1;
          cVar11 = *(char *)((long)param_1 + (long)iVar20);
          sVar26 = (short)cVar11;
          if (cVar11 < '\0') {
            sVar26 = 0;
          }
          *(short *)((long)param_5 + (long)iVar20 * 2) = sVar26;
          if (iVar15 < iVar10) {
            iVar5 = iVar20 + 2;
            cVar11 = *(char *)((long)param_1 + (long)iVar15);
            sVar26 = (short)cVar11;
            if (cVar11 < '\0') {
              sVar26 = 0;
            }
            *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
            if (iVar5 < iVar10) {
                    /* try { // try from 00275c68 to 00375c73 has its CatchHandler @ 00275de8 */
              iVar15 = iVar20 + 3;
              cVar11 = *(char *)((long)param_1 + (long)iVar5);
              sVar26 = (short)cVar11;
                    /* try { // try from 00275c74 to 00375cc3 has its CatchHandler @ 00275bec */
              if (cVar11 < '\0') {
                sVar26 = 0;
              }
              *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
              if (iVar15 < iVar10) {
                iVar5 = iVar20 + 4;
                cVar11 = *(char *)((long)param_1 + (long)iVar15);
                sVar26 = (short)cVar11;
                if (cVar11 < '\0') {
                  sVar26 = 0;
                }
                *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                if (iVar5 < iVar10) {
                  iVar15 = iVar20 + 5;
                  cVar11 = *(char *)((long)param_1 + (long)iVar5);
                  sVar26 = (short)cVar11;
                  if (cVar11 < '\0') {
                    sVar26 = 0;
                  }
                  *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
                  if (iVar15 < iVar10) {
                    /* try { // try from 00275cc4 to 00375ccf has its CatchHandler @ 00275dd0 */
                    iVar5 = iVar20 + 6;
                    cVar11 = *(char *)((long)param_1 + (long)iVar15);
                    sVar26 = (short)cVar11;
                    if (cVar11 < '\0') {
                      sVar26 = 0;
                    }
                    *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                    if (iVar5 < iVar10) {
                      iVar15 = iVar20 + 7;
                      cVar11 = *(char *)((long)param_1 + (long)iVar5);
                      sVar26 = (short)cVar11;
                      if (cVar11 < '\0') {
                        sVar26 = 0;
                      }
                      *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
                      if (iVar15 < iVar10) {
                        iVar5 = iVar20 + 8;
                    /* try { // try from 00275d0c to 00375d17 has its CatchHandler @ 00275dc4 */
                        cVar11 = *(char *)((long)param_1 + (long)iVar15);
                        sVar26 = (short)cVar11;
                        if (cVar11 < '\0') {
                          sVar26 = 0;
                        }
                    /* try { // try from 00275d18 to 00375d67 has its CatchHandler @ 00275bec */
                        *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                        if (iVar5 < iVar10) {
                          iVar15 = iVar20 + 9;
                          cVar11 = *(char *)((long)param_1 + (long)iVar5);
                          sVar26 = (short)cVar11;
                          if (cVar11 < '\0') {
                            sVar26 = 0;
                          }
                          *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
                          if (iVar15 < iVar10) {
                            iVar5 = iVar20 + 10;
                            cVar11 = *(char *)((long)param_1 + (long)iVar15);
                            sVar26 = (short)cVar11;
                            if (cVar11 < '\0') {
                              sVar26 = 0;
                            }
                            *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                            if (iVar5 < iVar10) {
                    /* try { // try from 00275d68 to 00375d73 has its CatchHandler @ 00275db4 */
                              iVar15 = iVar20 + 0xb;
                              cVar11 = *(char *)((long)param_1 + (long)iVar5);
                              sVar26 = (short)cVar11;
                    /* try { // try from 00275d74 to 00375e2b has its CatchHandler @ 00275bec */
                              if (cVar11 < '\0') {
                                sVar26 = 0;
                              }
                              *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
                              if (iVar15 < iVar10) {
                                iVar5 = iVar20 + 0xc;
                                cVar11 = *(char *)((long)param_1 + (long)iVar15);
                                sVar26 = (short)cVar11;
                                if (cVar11 < '\0') {
                                  sVar26 = 0;
                                }
                                *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                                if (iVar5 < iVar10) {
                                  iVar15 = iVar20 + 0xd;
                                  cVar11 = *(char *)((long)param_1 + (long)iVar5);
                                  sVar26 = (short)cVar11;
                    /* catch() { ... } // from try @ 00275d68 with catch @ 00275db4 */
                                  if (cVar11 < '\0') {
                                    sVar26 = 0;
                                  }
                                  *(short *)((long)param_5 + (long)iVar5 * 2) = sVar26;
                                  if (iVar15 < iVar10) {
                    /* catch() { ... } // from try @ 00275d0c with catch @ 00275dc4 */
                                    iVar20 = iVar20 + 0xe;
                                    cVar11 = *(char *)((long)param_1 + (long)iVar15);
                    /* catch() { ... } // from try @ 00275cc4 with catch @ 00275dd0 */
                                    sVar26 = (short)cVar11;
                                    if (cVar11 < '\0') {
                                      sVar26 = 0;
                                    }
                                    *(short *)((long)param_5 + (long)iVar15 * 2) = sVar26;
                                    if (iVar20 < iVar10) {
                    /* catch() { ... } // from try @ 00275c68 with catch @ 00275de8 */
                                      cVar11 = *(char *)((long)param_1 + (long)iVar20);
                                      sVar26 = (short)cVar11;
                                      if (cVar11 < '\0') {
                                        sVar26 = 0;
                                      }
                                      *(short *)((long)param_5 + (long)iVar20 * 2) = sVar26;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00275df8:
      iVar31 = iVar31 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar31 != 0);
  }
  return;
}


==================================================================

### FUNC 00275ed0 (1372 bytes) name=FUN_00275ed0

void FUN_00275ed0(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  char *pcVar8;
  int *piVar9;
  uint uVar10;
  int iVar11;
  char cVar12;
  byte bVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  uint *puVar21;
  undefined8 *puVar22;
  byte *pbVar23;
  long lVar24;
  undefined8 *puVar25;
  long lVar26;
  int iVar27;
  long lVar28;
  uint uVar29;
  uint uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  short sVar33;
  short sVar34;
  
  iVar27 = param_7[1];
  iVar11 = *param_7;
  if (iVar27 != 0) {
    uVar16 = iVar11 - 8U >> 3;
                    /* try { // try from 00275f0c to 00375f17 has its CatchHandler @ 00276098 */
    iVar14 = (uVar16 + 1) * 8;
                    /* try { // try from 00275f18 to 00375f5b has its CatchHandler @ 00275e2c */
    if (iVar11 + -7 < 1) {
      iVar14 = 0;
    }
    uVar19 = (iVar11 + -4) - iVar14;
    lVar28 = (long)iVar14;
    uVar17 = uVar19 >> 2;
    uVar2 = uVar17 + 1;
    uVar3 = (uVar17 - 3 >> 2) + 1;
    iVar7 = iVar14 + 4 + uVar17 * 4;
                    /* try { // try from 00275f5c to 00375f6b has its CatchHandler @ 00276080 */
    lVar1 = lVar28 + (ulong)uVar2 * 4;
    iVar18 = iVar11 + -3;
    do {
      if (0 < iVar11 + -7) {
        puVar22 = (undefined8 *)(param_5 + 0x10);
        puVar25 = param_1;
        do {
                    /* try { // try from 00275f9c to 00375fa7 has its CatchHandler @ 0027606c */
          uVar31 = *puVar25;
                    /* try { // try from 00275fa8 to 00376003 has its CatchHandler @ 00275e2c */
          puVar22[-1] = CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x18),
                                 (int)(short)(char)((ulong)uVar31 >> 0x10));
          puVar22[-2] = CONCAT44((int)(short)(char)((ulong)uVar31 >> 8),(int)(short)(char)uVar31);
          puVar22[1] = CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x38),
                                (int)(short)(char)((ulong)uVar31 >> 0x30));
          *puVar22 = CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x28),
                              (int)(short)(char)((ulong)uVar31 >> 0x20));
          puVar22 = puVar22 + 4;
          puVar25 = puVar25 + 1;
        } while (puVar22 != (undefined8 *)(param_5 + (ulong)uVar16 * 0x20 + 0x30));
      }
      iVar15 = iVar14;
      if (iVar14 < iVar18) {
        puVar21 = (uint *)(param_5 + lVar28 * 4);
        pbVar23 = (byte *)((long)param_1 + lVar28);
        iVar15 = iVar7;
        if ((puVar21 < (uint *)((long)param_1 + lVar1) && pbVar23 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 5)) {
          do {
            bVar13 = pbVar23[1];
            pbVar6 = pbVar23 + 4;
            *puVar21 = (uint)*pbVar23;
            puVar21[1] = (int)(char)bVar13;
            bVar13 = pbVar23[3];
            puVar21[2] = (uint)pbVar23[2];
            puVar21[3] = (uint)bVar13;
            puVar21 = puVar21 + 4;
            pbVar23 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar28 + 4 + (ulong)uVar17 * 4));
        }
        else {
          iVar20 = iVar14;
          if (0xb < uVar19) {
                    /* try { // try from 00276004 to 0037600f has its CatchHandler @ 00276050 */
            uVar30 = 0;
            do {
              uVar32 = *(undefined8 *)(pbVar23 + 8);
              uVar31 = *(undefined8 *)pbVar23;
                    /* try { // try from 00276010 to 003760df has its CatchHandler @ 00275e2c */
              uVar30 = uVar30 + 1;
              *(ulong *)(puVar21 + 2) =
                   CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x18),
                            (int)(short)(char)((ulong)uVar31 >> 0x10));
              *(ulong *)puVar21 =
                   CONCAT44((int)(short)(char)((ulong)uVar31 >> 8),(int)(short)(char)uVar31);
              *(ulong *)(puVar21 + 6) =
                   CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x38),
                            (int)(short)(char)((ulong)uVar31 >> 0x30));
              *(ulong *)(puVar21 + 4) =
                   CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x28),
                            (int)(short)(char)((ulong)uVar31 >> 0x20));
              *(ulong *)(puVar21 + 10) =
                   CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x18),
                            (int)(short)(char)((ulong)uVar32 >> 0x10));
              *(ulong *)(puVar21 + 8) =
                   CONCAT44((int)(short)(char)((ulong)uVar32 >> 8),(int)(short)(char)uVar32);
              *(ulong *)(puVar21 + 0xe) =
                   CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x38),
                            (int)(short)(char)((ulong)uVar32 >> 0x30));
              *(ulong *)(puVar21 + 0xc) =
                   CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x28),
                            (int)(short)(char)((ulong)uVar32 >> 0x20));
              puVar21 = puVar21 + 0x10;
              pbVar23 = pbVar23 + 0x10;
            } while (uVar30 < uVar3);
                    /* catch() { ... } // from try @ 00276004 with catch @ 00276050 */
            iVar20 = iVar14 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00276108;
          }
          lVar26 = (long)iVar20;
                    /* catch() { ... } // from try @ 00275f9c with catch @ 0027606c */
          lVar24 = param_5 + lVar26 * 4;
          cVar12 = *(char *)((long)param_1 + lVar26 + 1);
          *(int *)(param_5 + lVar26 * 4) = (int)*(char *)((long)param_1 + lVar26);
                    /* catch() { ... } // from try @ 00275f5c with catch @ 00276080 */
          *(int *)(lVar24 + 4) = (int)cVar12;
          cVar12 = *(char *)((long)param_1 + lVar26 + 3);
          *(int *)(lVar24 + 8) = (int)*(char *)((long)param_1 + lVar26 + 2);
          *(int *)(lVar24 + 0xc) = (int)cVar12;
          if (iVar20 + 4 < iVar18) {
                    /* catch() { ... } // from try @ 00275f0c with catch @ 00276098 */
            lVar26 = (long)(iVar20 + 4);
            lVar24 = param_5 + lVar26 * 4;
            cVar12 = *(char *)((long)param_1 + lVar26 + 1);
            *(int *)(param_5 + lVar26 * 4) = (int)*(char *)((long)param_1 + lVar26);
            *(int *)(lVar24 + 4) = (int)cVar12;
            cVar12 = *(char *)((long)param_1 + lVar26 + 3);
            *(int *)(lVar24 + 8) = (int)*(char *)((long)param_1 + lVar26 + 2);
            *(int *)(lVar24 + 0xc) = (int)cVar12;
            if (iVar20 + 8 < iVar18) {
              lVar26 = (long)(iVar20 + 8);
              lVar24 = param_5 + lVar26 * 4;
              cVar12 = *(char *)((long)param_1 + lVar26 + 1);
              *(int *)(param_5 + lVar26 * 4) = (int)*(char *)((long)param_1 + lVar26);
              *(int *)(lVar24 + 4) = (int)cVar12;
              cVar12 = *(char *)((long)param_1 + lVar26 + 3);
              *(int *)(lVar24 + 8) = (int)*(char *)((long)param_1 + lVar26 + 2);
              *(int *)(lVar24 + 0xc) = (int)cVar12;
            }
          }
        }
      }
LAB_00276108:
      if (iVar15 < iVar11) {
        lVar24 = (long)iVar15;
        uVar30 = iVar11 - iVar15;
        pcVar8 = (char *)((long)param_1 + lVar24);
        piVar9 = (int *)(param_5 + lVar24 * 4);
        if ((pcVar8 < (char *)(param_5 + (lVar24 + (ulong)uVar30) * 4) &&
             piVar9 < (int *)((long)param_1 + lVar24 + (ulong)uVar30)) || (uVar30 < 0x15)) {
          lVar24 = 0;
          do {
            piVar9[lVar24] = (int)pcVar8[lVar24];
            lVar24 = lVar24 + 1;
          } while (lVar24 != (ulong)(uint)((iVar11 + -1) - iVar15) + 1);
        }
        else {
          uVar10 = -((uint)((ulong)piVar9 >> 2) & 3) & 3;
          if (uVar30 < uVar10) {
            uVar10 = uVar30;
          }
          iVar20 = iVar15;
          if (uVar10 != 0) {
            *piVar9 = (int)*pcVar8;
            iVar20 = iVar15 + 1;
            if (uVar10 != 1) {
              lVar26 = (long)iVar20;
              iVar20 = iVar15 + 2;
              *(int *)(param_5 + lVar26 * 4) = (int)*(char *)((long)param_1 + lVar26);
              if (uVar10 == 3) {
                lVar26 = (long)iVar20;
                iVar20 = iVar15 + 3;
                *(int *)(param_5 + lVar26 * 4) = (int)*(char *)((long)param_1 + lVar26);
              }
            }
          }
          uVar4 = ((uVar30 - uVar10) - 0x10 >> 4) + 1;
          uVar29 = 0;
          iVar15 = uVar4 * 0x10;
          puVar22 = (undefined8 *)(param_5 + lVar24 * 4 + (ulong)uVar10 * 4);
          puVar25 = (undefined8 *)((long)param_1 + lVar24 + (ulong)uVar10);
          do {
            uVar32 = puVar25[1];
            uVar31 = *puVar25;
            uVar29 = uVar29 + 1;
            sVar33 = (short)(char)((ulong)uVar31 >> 0x28);
            sVar34 = (short)(char)((ulong)uVar31 >> 0x38);
            puVar22[1] = CONCAT44((int)(short)(char)((ulong)uVar31 >> 0x18),
                                  (int)(short)(char)((ulong)uVar31 >> 0x10));
            *puVar22 = CONCAT44((int)(short)(char)((ulong)uVar31 >> 8),(int)(short)(char)uVar31);
            puVar22[3] = CONCAT26(sVar34 >> 0xf,
                                  CONCAT24(sVar34,(int)(short)(char)((ulong)uVar31 >> 0x30)));
            puVar22[2] = CONCAT26(sVar33 >> 0xf,
                                  CONCAT24(sVar33,(int)(short)(char)((ulong)uVar31 >> 0x20)));
            puVar22[5] = CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x18),
                                  (int)(short)(char)((ulong)uVar32 >> 0x10));
            puVar22[4] = CONCAT44((int)(short)(char)((ulong)uVar32 >> 8),(int)(short)(char)uVar32);
            puVar22[7] = CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x38),
                                  (int)(short)(char)((ulong)uVar32 >> 0x30));
            puVar22[6] = CONCAT44((int)(short)(char)((ulong)uVar32 >> 0x28),
                                  (int)(short)(char)((ulong)uVar32 >> 0x20));
            puVar22 = puVar22 + 8;
            puVar25 = puVar25 + 2;
          } while (uVar29 < uVar4);
          iVar20 = iVar20 + iVar15;
          if (uVar30 - uVar10 != iVar15) {
            iVar15 = iVar20 + 1;
            *(int *)(param_5 + (long)iVar20 * 4) = (int)*(char *)((long)param_1 + (long)iVar20);
            if (iVar15 < iVar11) {
              iVar5 = iVar20 + 2;
              *(int *)(param_5 + (long)iVar15 * 4) = (int)*(char *)((long)param_1 + (long)iVar15);
              if (iVar5 < iVar11) {
                iVar15 = iVar20 + 3;
                *(int *)(param_5 + (long)iVar5 * 4) = (int)*(char *)((long)param_1 + (long)iVar5);
                if (iVar15 < iVar11) {
                  iVar5 = iVar20 + 4;
                  *(int *)(param_5 + (long)iVar15 * 4) =
                       (int)*(char *)((long)param_1 + (long)iVar15);
                  if (iVar5 < iVar11) {
                    iVar15 = iVar20 + 5;
                    *(int *)(param_5 + (long)iVar5 * 4) =
                         (int)*(char *)((long)param_1 + (long)iVar5);
                    if (iVar15 < iVar11) {
                      iVar5 = iVar20 + 6;
                      *(int *)(param_5 + (long)iVar15 * 4) =
                           (int)*(char *)((long)param_1 + (long)iVar15);
                      if (iVar5 < iVar11) {
                        iVar15 = iVar20 + 7;
                        *(int *)(param_5 + (long)iVar5 * 4) =
                             (int)*(char *)((long)param_1 + (long)iVar5);
                        if (iVar15 < iVar11) {
                          iVar5 = iVar20 + 8;
                          *(int *)(param_5 + (long)iVar15 * 4) =
                               (int)*(char *)((long)param_1 + (long)iVar15);
                          if (iVar5 < iVar11) {
                            iVar15 = iVar20 + 9;
                            *(int *)(param_5 + (long)iVar5 * 4) =
                                 (int)*(char *)((long)param_1 + (long)iVar5);
                            if (iVar15 < iVar11) {
                              iVar5 = iVar20 + 10;
                              *(int *)(param_5 + (long)iVar15 * 4) =
                                   (int)*(char *)((long)param_1 + (long)iVar15);
                              if (iVar5 < iVar11) {
                                iVar15 = iVar20 + 0xb;
                                *(int *)(param_5 + (long)iVar5 * 4) =
                                     (int)*(char *)((long)param_1 + (long)iVar5);
                                if (iVar15 < iVar11) {
                                  iVar5 = iVar20 + 0xc;
                                  *(int *)(param_5 + (long)iVar15 * 4) =
                                       (int)*(char *)((long)param_1 + (long)iVar15);
                                  if (iVar5 < iVar11) {
                                    iVar15 = iVar20 + 0xd;
                                    *(int *)(param_5 + (long)iVar5 * 4) =
                                         (int)*(char *)((long)param_1 + (long)iVar5);
                                    if (iVar15 < iVar11) {
                                      iVar20 = iVar20 + 0xe;
                                      *(int *)(param_5 + (long)iVar15 * 4) =
                                           (int)*(char *)((long)param_1 + (long)iVar15);
                                      if (iVar20 < iVar11) {
                                        *(int *)(param_5 + (long)iVar20 * 4) =
                                             (int)*(char *)((long)param_1 + (long)iVar20);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar27 = iVar27 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar27 != 0);
  }
  return;
}


==================================================================

### FUNC 0027642c (1552 bytes) name=FUN_0027642c

void FUN_0027642c(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  char cVar10;
  byte bVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  float *pfVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  byte *pbVar22;
  long lVar23;
  long lVar24;
  char *pcVar25;
  int iVar26;
  long lVar27;
  uint uVar28;
  uint uVar29;
  undefined8 uVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  
  iVar26 = param_7[1];
  iVar9 = *param_7;
  if (iVar26 != 0) {
    uVar14 = iVar9 - 8U >> 3;
    iVar12 = (uVar14 + 1) * 8;
    if (iVar9 + -7 < 1) {
      iVar12 = 0;
    }
    uVar17 = (iVar9 + -4) - iVar12;
    lVar27 = (long)iVar12;
    uVar15 = uVar17 >> 2;
    uVar2 = uVar15 + 1;
    uVar3 = (uVar15 - 3 >> 2) + 1;
    iVar7 = iVar12 + 4 + uVar15 * 4;
    lVar1 = lVar27 + (ulong)uVar2 * 4;
    iVar16 = iVar9 + -3;
    do {
      if (0 < iVar9 + -7) {
        puVar20 = (undefined8 *)(param_5 + 0x10);
        puVar21 = param_1;
        do {
          uVar30 = *puVar21;
          auVar32._0_4_ = (int)(short)(char)uVar30;
          auVar32._4_4_ = (int)(short)(char)((ulong)uVar30 >> 8);
          auVar32._8_4_ = (int)(short)(char)((ulong)uVar30 >> 0x10);
          auVar32._12_4_ = (int)(short)(char)((ulong)uVar30 >> 0x18);
          auVar32 = NEON_scvtf(auVar32,4);
          auVar31._0_4_ = (int)(short)(char)((ulong)uVar30 >> 0x20);
          auVar31._4_4_ = (int)(short)(char)((ulong)uVar30 >> 0x28);
          auVar31._8_4_ = (int)(short)(char)((ulong)uVar30 >> 0x30);
          auVar31._12_4_ = (int)(short)(char)((ulong)uVar30 >> 0x38);
          auVar31 = NEON_scvtf(auVar31,4);
          puVar20[-1] = auVar32._8_8_;
          puVar20[-2] = auVar32._0_8_;
          puVar20[1] = auVar31._8_8_;
          *puVar20 = auVar31._0_8_;
          puVar20 = puVar20 + 4;
          puVar21 = puVar21 + 1;
        } while (puVar20 != (undefined8 *)(param_5 + (ulong)uVar14 * 0x20 + 0x30));
      }
      iVar13 = iVar12;
      if (iVar12 < iVar16) {
        pfVar19 = (float *)(param_5 + lVar27 * 4);
        pbVar22 = (byte *)((long)param_1 + lVar27);
        iVar13 = iVar7;
        if ((pfVar19 < (float *)((long)param_1 + lVar1) && pbVar22 < (byte *)(param_5 + lVar1 * 4))
           || (uVar2 < 5)) {
          do {
            pbVar6 = pbVar22 + 4;
            bVar11 = *pbVar22;
            pfVar19[1] = (float)(int)(char)pbVar22[1];
            *pfVar19 = (float)bVar11;
            bVar11 = pbVar22[2];
            pfVar19[3] = (float)pbVar22[3];
            pfVar19[2] = (float)bVar11;
            pfVar19 = pfVar19 + 4;
            pbVar22 = pbVar6;
          } while (pbVar6 != (byte *)((long)param_1 + lVar27 + 4 + (ulong)uVar15 * 4));
        }
        else {
          iVar18 = iVar12;
          if (0xb < uVar17) {
            uVar29 = 0;
            do {
              uVar29 = uVar29 + 1;
              auVar37._0_4_ = (int)(short)(char)*pbVar22;
              auVar37._4_4_ = (int)(short)(char)pbVar22[1];
              auVar37._8_4_ = (int)(short)(char)pbVar22[2];
              auVar37._12_4_ = (int)(short)(char)pbVar22[3];
              auVar35._0_4_ = (int)(short)(char)pbVar22[4];
              auVar35._4_4_ = (int)(short)(char)pbVar22[5];
              auVar35._8_4_ = (int)(short)(char)pbVar22[6];
              auVar35._12_4_ = (int)(short)(char)pbVar22[7];
              auVar34._0_4_ = (int)(short)(char)pbVar22[8];
              auVar34._4_4_ = (int)(short)(char)pbVar22[9];
              auVar34._8_4_ = (int)(short)(char)pbVar22[10];
              auVar34._12_4_ = (int)(short)(char)pbVar22[0xb];
              auVar39._0_4_ = (int)(short)(char)pbVar22[0xc];
              auVar39._4_4_ = (int)(short)(char)pbVar22[0xd];
              auVar39._8_4_ = (int)(short)(char)pbVar22[0xe];
              auVar39._12_4_ = (int)(short)(char)pbVar22[0xf];
              auVar37 = NEON_scvtf(auVar37,4);
              auVar32 = NEON_scvtf(auVar35,4);
              auVar35 = NEON_scvtf(auVar34,4);
              auVar31 = NEON_scvtf(auVar39,4);
              *(long *)(pfVar19 + 2) = auVar37._8_8_;
              *(long *)pfVar19 = auVar37._0_8_;
              *(long *)(pfVar19 + 6) = auVar32._8_8_;
              *(long *)(pfVar19 + 4) = auVar32._0_8_;
              *(long *)(pfVar19 + 10) = auVar35._8_8_;
              *(long *)(pfVar19 + 8) = auVar35._0_8_;
              *(long *)(pfVar19 + 0xe) = auVar31._8_8_;
              *(long *)(pfVar19 + 0xc) = auVar31._0_8_;
              pfVar19 = pfVar19 + 0x10;
              pbVar22 = pbVar22 + 0x10;
            } while (uVar29 < uVar3);
            iVar18 = iVar12 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_002766ac;
          }
          lVar23 = (long)iVar18;
          cVar10 = *(char *)((long)param_1 + lVar23 + 1);
          lVar24 = param_5 + lVar23 * 4;
          *(float *)(param_5 + lVar23 * 4) = (float)(int)*(char *)((long)param_1 + lVar23);
          *(float *)(lVar24 + 4) = (float)(int)cVar10;
          cVar10 = *(char *)((long)param_1 + lVar23 + 2);
          *(float *)(lVar24 + 0xc) = (float)(int)*(char *)((long)param_1 + lVar23 + 3);
          *(float *)(lVar24 + 8) = (float)(int)cVar10;
          if (iVar18 + 4 < iVar16) {
            lVar23 = (long)(iVar18 + 4);
            cVar10 = *(char *)((long)param_1 + lVar23 + 1);
            lVar24 = param_5 + lVar23 * 4;
            *(float *)(param_5 + lVar23 * 4) = (float)(int)*(char *)((long)param_1 + lVar23);
            *(float *)(lVar24 + 4) = (float)(int)cVar10;
            cVar10 = *(char *)((long)param_1 + lVar23 + 2);
            *(float *)(lVar24 + 0xc) = (float)(int)*(char *)((long)param_1 + lVar23 + 3);
            *(float *)(lVar24 + 8) = (float)(int)cVar10;
            if (iVar18 + 8 < iVar16) {
              lVar23 = (long)(iVar18 + 8);
              cVar10 = *(char *)((long)param_1 + lVar23 + 1);
              lVar24 = param_5 + lVar23 * 4;
              *(float *)(param_5 + lVar23 * 4) = (float)(int)*(char *)((long)param_1 + lVar23);
              *(float *)(lVar24 + 4) = (float)(int)cVar10;
              cVar10 = *(char *)((long)param_1 + lVar23 + 2);
              *(float *)(lVar24 + 0xc) = (float)(int)*(char *)((long)param_1 + lVar23 + 3);
              *(float *)(lVar24 + 8) = (float)(int)cVar10;
            }
          }
        }
      }
LAB_002766ac:
      if (iVar13 < iVar9) {
        lVar24 = (long)iVar13;
        uVar29 = iVar9 - iVar13;
        pcVar25 = (char *)((long)param_1 + lVar24);
        pfVar19 = (float *)(param_5 + lVar24 * 4);
        if ((pcVar25 < (char *)(param_5 + (lVar24 + (ulong)uVar29) * 4) &&
             pfVar19 < (float *)((long)param_1 + lVar24 + (ulong)uVar29)) || (uVar29 < 0x15)) {
          lVar24 = 0;
          do {
            pfVar19[lVar24] = (float)(int)pcVar25[lVar24];
            lVar24 = lVar24 + 1;
          } while (lVar24 != (ulong)(uint)((iVar9 + -1) - iVar13) + 1);
        }
        else {
          uVar8 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
          if (uVar29 < uVar8) {
            uVar8 = uVar29;
          }
          iVar18 = iVar13;
          if (uVar8 != 0) {
            iVar18 = iVar13 + 1;
            *pfVar19 = (float)(int)*pcVar25;
            if (uVar8 != 1) {
              lVar23 = (long)iVar18;
              iVar18 = iVar13 + 2;
              *(float *)(param_5 + lVar23 * 4) = (float)(int)*(char *)((long)param_1 + lVar23);
              if (uVar8 == 3) {
                lVar23 = (long)iVar18;
                iVar18 = iVar13 + 3;
                *(float *)(param_5 + lVar23 * 4) = (float)(int)*(char *)((long)param_1 + lVar23);
              }
            }
          }
          uVar4 = ((uVar29 - uVar8) - 0x10 >> 4) + 1;
          uVar28 = 0;
          iVar13 = uVar4 * 0x10;
          puVar20 = (undefined8 *)(param_5 + lVar24 * 4 + (ulong)uVar8 * 4);
          pcVar25 = (char *)((long)param_1 + lVar24 + (ulong)uVar8);
          do {
                    /* try { // try from 00276780 to 00376827 has its CatchHandler @ 00276780
                       catch() { ... } // from try @ 00276780 with catch @ 00276780
                       catch() { ... } // from try @ 00276894 with catch @ 00276780 */
            uVar28 = uVar28 + 1;
            auVar40._0_4_ = (int)(short)*pcVar25;
            auVar40._4_4_ = (int)(short)pcVar25[1];
            auVar40._8_4_ = (int)(short)pcVar25[2];
            auVar40._12_4_ = (int)(short)pcVar25[3];
            auVar36._0_4_ = (int)(short)pcVar25[4];
            auVar36._4_4_ = (int)(short)pcVar25[5];
            auVar36._8_4_ = (int)(short)pcVar25[6];
            auVar36._12_4_ = (int)(short)pcVar25[7];
            auVar38._0_4_ = (int)(short)pcVar25[8];
            auVar38._4_4_ = (int)(short)pcVar25[9];
            auVar38._8_4_ = (int)(short)pcVar25[10];
            auVar38._12_4_ = (int)(short)pcVar25[0xb];
            auVar33._0_4_ = (int)(short)pcVar25[0xc];
            auVar33._4_4_ = (int)(short)pcVar25[0xd];
            auVar33._8_4_ = (int)(short)pcVar25[0xe];
            auVar33._12_4_ = (int)(short)pcVar25[0xf];
            auVar35 = NEON_scvtf(auVar40,4);
            auVar32 = NEON_scvtf(auVar36,4);
            auVar39 = NEON_scvtf(auVar38,4);
            auVar31 = NEON_scvtf(auVar33,4);
            puVar20[1] = auVar35._8_8_;
            *puVar20 = auVar35._0_8_;
            puVar20[3] = auVar32._8_8_;
            puVar20[2] = auVar32._0_8_;
            puVar20[5] = auVar39._8_8_;
            puVar20[4] = auVar39._0_8_;
            puVar20[7] = auVar31._8_8_;
            puVar20[6] = auVar31._0_8_;
            puVar20 = puVar20 + 8;
            pcVar25 = pcVar25 + 0x10;
          } while (uVar28 < uVar4);
          iVar18 = iVar18 + iVar13;
          if (uVar29 - uVar8 != iVar13) {
            iVar13 = iVar18 + 1;
            *(float *)(param_5 + (long)iVar18 * 4) =
                 (float)(int)*(char *)((long)param_1 + (long)iVar18);
            if (iVar13 < iVar9) {
              iVar5 = iVar18 + 2;
              *(float *)(param_5 + (long)iVar13 * 4) =
                   (float)(int)*(char *)((long)param_1 + (long)iVar13);
              if (iVar5 < iVar9) {
                iVar13 = iVar18 + 3;
                    /* try { // try from 00276828 to 00376833 has its CatchHandler @ 002773a8 */
                *(float *)(param_5 + (long)iVar5 * 4) =
                     (float)(int)*(char *)((long)param_1 + (long)iVar5);
                if (iVar13 < iVar9) {
                    /* try { // try from 00276834 to 00376893 has its CatchHandler @ 00277398 */
                  iVar5 = iVar18 + 4;
                  *(float *)(param_5 + (long)iVar13 * 4) =
                       (float)(int)*(char *)((long)param_1 + (long)iVar13);
                  if (iVar5 < iVar9) {
                    iVar13 = iVar18 + 5;
                    *(float *)(param_5 + (long)iVar5 * 4) =
                         (float)(int)*(char *)((long)param_1 + (long)iVar5);
                    if (iVar13 < iVar9) {
                      iVar5 = iVar18 + 6;
                      *(float *)(param_5 + (long)iVar13 * 4) =
                           (float)(int)*(char *)((long)param_1 + (long)iVar13);
                      if (iVar5 < iVar9) {
                        iVar13 = iVar18 + 7;
                    /* try { // try from 00276894 to 00377437 has its CatchHandler @ 00276780 */
                        *(float *)(param_5 + (long)iVar5 * 4) =
                             (float)(int)*(char *)((long)param_1 + (long)iVar5);
                        if (iVar13 < iVar9) {
                          iVar5 = iVar18 + 8;
                          *(float *)(param_5 + (long)iVar13 * 4) =
                               (float)(int)*(char *)((long)param_1 + (long)iVar13);
                          if (iVar5 < iVar9) {
                            iVar13 = iVar18 + 9;
                            *(float *)(param_5 + (long)iVar5 * 4) =
                                 (float)(int)*(char *)((long)param_1 + (long)iVar5);
                            if (iVar13 < iVar9) {
                              iVar5 = iVar18 + 10;
                              *(float *)(param_5 + (long)iVar13 * 4) =
                                   (float)(int)*(char *)((long)param_1 + (long)iVar13);
                              if (iVar5 < iVar9) {
                                iVar13 = iVar18 + 0xb;
                                *(float *)(param_5 + (long)iVar5 * 4) =
                                     (float)(int)*(char *)((long)param_1 + (long)iVar5);
                                if (iVar13 < iVar9) {
                                  iVar5 = iVar18 + 0xc;
                                  *(float *)(param_5 + (long)iVar13 * 4) =
                                       (float)(int)*(char *)((long)param_1 + (long)iVar13);
                                  if (iVar5 < iVar9) {
                                    iVar13 = iVar18 + 0xd;
                                    *(float *)(param_5 + (long)iVar5 * 4) =
                                         (float)(int)*(char *)((long)param_1 + (long)iVar5);
                                    if (iVar13 < iVar9) {
                                      iVar18 = iVar18 + 0xe;
                                      *(float *)(param_5 + (long)iVar13 * 4) =
                                           (float)(int)*(char *)((long)param_1 + (long)iVar13);
                                      if (iVar18 < iVar9) {
                                        *(float *)(param_5 + (long)iVar18 * 4) =
                                             (float)(int)*(char *)((long)param_1 + (long)iVar18);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar26 = iVar26 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar26 != 0);
  }
  return;
}


==================================================================

### FUNC 00276a3c (1884 bytes) name=FUN_00276a3c

void FUN_00276a3c(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  int iVar7;
  undefined1 *puVar8;
  uint uVar9;
  int iVar10;
  ushort uVar11;
  ushort uVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  ushort *puVar27;
  ushort *puVar28;
  ushort *puVar29;
  ushort *puVar30;
  ushort *puVar31;
  ushort *puVar32;
  ushort *puVar33;
  ushort *puVar34;
  ushort *puVar35;
  ushort *puVar36;
  ushort *puVar37;
  ushort *puVar38;
  ushort *puVar39;
  ushort *puVar40;
  int iVar41;
  ushort *puVar42;
  undefined8 *puVar43;
  ushort uVar44;
  undefined1 uVar45;
  ushort *puVar46;
  long lVar47;
  int iVar48;
  long lVar49;
  uint uVar50;
  undefined1 uVar51;
  uint uVar52;
  long lVar53;
  undefined8 uVar54;
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined8 uVar60;
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined8 uVar64;
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  undefined8 uVar67;
  undefined1 auVar68 [16];
  undefined1 auVar69 [16];
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  undefined1 auVar72 [16];
  undefined1 auVar73 [16];
  
  iVar48 = param_7[1];
  iVar10 = *param_7;
  if (iVar48 != 0) {
    uVar15 = iVar10 - 0x10U >> 4;
    iVar13 = (uVar15 + 1) * 0x10;
    if (iVar10 + -0xf < 1) {
      iVar13 = 0;
    }
    uVar18 = (iVar10 + -4) - iVar13;
    lVar49 = (long)iVar13;
    uVar16 = uVar18 >> 2;
    uVar2 = uVar16 + 1;
    uVar3 = (uVar16 - 3 >> 2) + 1;
    iVar7 = iVar13 + 4 + uVar16 * 4;
    lVar1 = lVar49 + (ulong)uVar2 * 4;
    iVar17 = iVar10 + -3;
    do {
      if (0 < iVar10 + -0xf) {
        puVar42 = (ushort *)(param_1 + 0x10);
        puVar43 = param_5;
        do {
          puVar46 = puVar42 + -8;
          uVar44 = *puVar42;
          puVar27 = puVar42 + 1;
          puVar28 = puVar42 + 2;
          puVar29 = puVar42 + 3;
          puVar30 = puVar42 + 4;
          puVar31 = puVar42 + 5;
          puVar32 = puVar42 + 6;
          puVar33 = puVar42 + 7;
          puVar34 = puVar42 + -7;
          puVar35 = puVar42 + -6;
          puVar36 = puVar42 + -5;
          puVar37 = puVar42 + -4;
          puVar38 = puVar42 + -3;
          puVar39 = puVar42 + -2;
          puVar40 = puVar42 + -1;
          puVar42 = puVar42 + 0x10;
          auVar62._0_8_ = CONCAT26(0,CONCAT24(*puVar34,(uint)*puVar46));
          auVar62._8_2_ = *puVar35;
          auVar62._10_2_ = 0;
          auVar62._12_2_ = *puVar36;
          auVar62._14_2_ = 0;
          uVar60 = NEON_sqxtn(auVar62._0_8_,auVar62,4);
          auVar68._0_8_ = CONCAT26(0,CONCAT24(*puVar38,(uint)*puVar37));
          auVar68._8_2_ = *puVar39;
          auVar68._10_2_ = 0;
          auVar68._12_2_ = *puVar40;
          auVar68._14_2_ = 0;
          auVar56._0_8_ = CONCAT26(0,CONCAT24(*puVar27,(uint)uVar44));
          auVar56._8_2_ = *puVar28;
          auVar56._10_2_ = 0;
          auVar56._12_2_ = *puVar29;
          auVar56._14_2_ = 0;
          uVar67 = NEON_sqxtn(auVar68._0_8_,auVar68,4);
          uVar54 = NEON_sqxtn(auVar56._0_8_,auVar56,4);
          auVar70._0_8_ = CONCAT26(0,CONCAT24(*puVar31,(uint)*puVar30));
          auVar70._8_2_ = *puVar32;
          auVar70._10_2_ = 0;
          auVar70._12_2_ = *puVar33;
          auVar70._14_2_ = 0;
          uVar64 = NEON_sqxtn(auVar70._0_8_,auVar70,4);
          auVar71._8_8_ = uVar67;
          auVar71._0_8_ = uVar60;
          auVar66._8_8_ = uVar64;
          auVar66._0_8_ = uVar54;
          uVar60 = NEON_sqxtn(uVar64,auVar71,2);
          uVar54 = NEON_sqxtn(uVar54,auVar66,2);
          puVar43[1] = uVar54;
          *puVar43 = uVar60;
          puVar43 = puVar43 + 2;
        } while (puVar42 != (ushort *)(param_1 + (ulong)uVar15 * 0x20 + 0x30));
      }
      uVar44 = 0x7f;
      iVar14 = iVar13;
      if (iVar13 < iVar17) {
        puVar42 = (ushort *)(param_1 + lVar49 * 2);
        puVar43 = (undefined8 *)((long)param_5 + lVar49);
        iVar14 = iVar7;
        if ((puVar42 < (ushort *)((long)param_5 + lVar1) &&
             puVar43 < (undefined8 *)(param_1 + lVar1 * 2)) || (uVar2 < 4)) {
          do {
            puVar6 = (undefined8 *)((long)puVar43 + 4);
            uVar12 = puVar42[1];
            if (0x7f < puVar42[1]) {
              uVar12 = uVar44;
            }
            uVar11 = *puVar42;
            if (0x7f < *puVar42) {
              uVar11 = uVar44;
            }
            *(char *)((long)puVar43 + 1) = (char)uVar12;
            *(char *)puVar43 = (char)uVar11;
            uVar12 = puVar42[3];
            if (0x7f < puVar42[3]) {
              uVar12 = uVar44;
            }
            uVar11 = puVar42[2];
            if (0x7f < puVar42[2]) {
              uVar11 = uVar44;
            }
            *(char *)((long)puVar43 + 3) = (char)uVar12;
            *(char *)((long)puVar43 + 2) = (char)uVar11;
            puVar43 = puVar6;
            puVar42 = puVar42 + 4;
          } while (puVar6 != (undefined8 *)((long)param_5 + lVar49 + 4 + (ulong)uVar16 * 4));
        }
        else {
          iVar41 = iVar13;
          if (0xb < uVar18) {
            uVar52 = 0;
            do {
              uVar52 = uVar52 + 1;
              auVar69._2_2_ = 0;
              auVar69._0_2_ = *puVar42;
              auVar69._4_2_ = puVar42[1];
              auVar69._6_2_ = 0;
              auVar69._8_2_ = puVar42[2];
              auVar69._10_2_ = 0;
              auVar69._12_2_ = puVar42[3];
              auVar69._14_2_ = 0;
              auVar61._2_2_ = 0;
              auVar61._0_2_ = puVar42[4];
              auVar61._4_2_ = puVar42[5];
              auVar61._6_2_ = 0;
              auVar61._8_2_ = puVar42[6];
              auVar61._10_2_ = 0;
              auVar61._12_2_ = puVar42[7];
              auVar61._14_2_ = 0;
              auVar19._8_4_ = 0x7f;
              auVar19._0_8_ = 0x7f0000007f;
              auVar19._12_4_ = 0x7f;
              auVar70 = NEON_umin(auVar69,auVar19,4);
              auVar65._2_2_ = 0;
              auVar65._0_2_ = puVar42[8];
              auVar65._4_2_ = puVar42[9];
              auVar65._6_2_ = 0;
              auVar65._8_2_ = puVar42[10];
              auVar65._10_2_ = 0;
              auVar65._12_2_ = puVar42[0xb];
              auVar65._14_2_ = 0;
              auVar55._2_2_ = 0;
              auVar55._0_2_ = puVar42[0xc];
              auVar55._4_2_ = puVar42[0xd];
              auVar55._6_2_ = 0;
              auVar55._8_2_ = puVar42[0xe];
              auVar55._10_2_ = 0;
              auVar55._12_2_ = puVar42[0xf];
              auVar55._14_2_ = 0;
              auVar20._8_4_ = 0x7f;
              auVar20._0_8_ = 0x7f0000007f;
              auVar20._12_4_ = 0x7f;
              auVar62 = NEON_umin(auVar61,auVar20,4);
              auVar21._8_4_ = 0x7f;
              auVar21._0_8_ = 0x7f0000007f;
              auVar21._12_4_ = 0x7f;
              auVar66 = NEON_umin(auVar65,auVar21,4);
              auVar22._8_4_ = 0x7f;
              auVar22._0_8_ = 0x7f0000007f;
              auVar22._12_4_ = 0x7f;
              auVar56 = NEON_umin(auVar55,auVar22,4);
              auVar57._0_8_ =
                   CONCAT17(auVar62[0xc],
                            CONCAT16(auVar62[8],
                                     CONCAT15(auVar62[4],
                                              CONCAT14(auVar62[0],
                                                       CONCAT13(auVar70[0xc],
                                                                CONCAT12(auVar70[8],
                                                                         CONCAT11(auVar70[4],
                                                                                  auVar70[0])))))));
              auVar57[8] = auVar66[0];
              auVar57[9] = auVar66[4];
              auVar57[10] = auVar66[8];
              auVar57[0xb] = auVar66[0xc];
              auVar57[0xc] = auVar56[0];
              auVar57[0xd] = auVar56[4];
              auVar57[0xe] = auVar56[8];
              auVar57[0xf] = auVar56[0xc];
              puVar43[1] = auVar57._8_8_;
              *puVar43 = auVar57._0_8_;
              puVar43 = puVar43 + 2;
              puVar42 = puVar42 + 0x10;
            } while (uVar52 < uVar3);
            iVar41 = iVar13 + uVar3 * 0x10;
            if (uVar2 == uVar3 * 4) goto LAB_00276d20;
          }
          lVar47 = (long)iVar41;
          lVar53 = param_1 + lVar47 * 2;
          uVar11 = *(ushort *)(param_1 + lVar47 * 2);
          uVar12 = *(ushort *)(lVar53 + 2);
          if (0x7f < *(ushort *)(lVar53 + 2)) {
            uVar12 = uVar44;
          }
          if (0x7f < uVar11) {
            uVar11 = uVar44;
          }
          *(char *)((long)param_5 + lVar47) = (char)uVar11;
          *(char *)((long)param_5 + lVar47 + 1) = (char)uVar12;
          uVar12 = *(ushort *)(lVar53 + 6);
          if (0x7f < *(ushort *)(lVar53 + 6)) {
            uVar12 = 0x7f;
          }
          uVar45 = (undefined1)*(ushort *)(lVar53 + 4);
          if (0x7f < *(ushort *)(lVar53 + 4)) {
            uVar45 = 0x7f;
          }
          *(char *)((long)param_5 + lVar47 + 3) = (char)uVar12;
          *(undefined1 *)((long)param_5 + lVar47 + 2) = uVar45;
          if (iVar41 + 4 < iVar17) {
            lVar47 = (long)(iVar41 + 4);
            lVar53 = param_1 + lVar47 * 2;
            uVar12 = *(ushort *)(param_1 + lVar47 * 2);
            uVar45 = (undefined1)*(ushort *)(lVar53 + 2);
            if (0x7f < *(ushort *)(lVar53 + 2)) {
              uVar45 = 0x7f;
            }
            uVar51 = (undefined1)uVar12;
            if (0x7f < uVar12) {
              uVar51 = 0x7f;
            }
            *(undefined1 *)((long)param_5 + lVar47) = uVar51;
            *(undefined1 *)((long)param_5 + lVar47 + 1) = uVar45;
            uVar45 = (undefined1)*(ushort *)(lVar53 + 6);
            if (0x7f < *(ushort *)(lVar53 + 6)) {
              uVar45 = 0x7f;
            }
            uVar51 = (undefined1)*(ushort *)(lVar53 + 4);
            if (0x7f < *(ushort *)(lVar53 + 4)) {
              uVar51 = 0x7f;
            }
            *(undefined1 *)((long)param_5 + lVar47 + 3) = uVar45;
            *(undefined1 *)((long)param_5 + lVar47 + 2) = uVar51;
            if (iVar41 + 8 < iVar17) {
              lVar47 = (long)(iVar41 + 8);
              lVar53 = param_1 + lVar47 * 2;
              uVar12 = *(ushort *)(param_1 + lVar47 * 2);
              uVar45 = (undefined1)*(ushort *)(lVar53 + 2);
              if (0x7f < *(ushort *)(lVar53 + 2)) {
                uVar45 = 0x7f;
              }
              uVar51 = (undefined1)uVar12;
              if (0x7f < uVar12) {
                uVar51 = 0x7f;
              }
              *(undefined1 *)((long)param_5 + lVar47) = uVar51;
              *(undefined1 *)((long)param_5 + lVar47 + 1) = uVar45;
              uVar12 = *(ushort *)(lVar53 + 6);
              if (0x7f < *(ushort *)(lVar53 + 6)) {
                uVar12 = uVar44;
              }
              uVar11 = *(ushort *)(lVar53 + 4);
              if (0x7f < *(ushort *)(lVar53 + 4)) {
                uVar11 = uVar44;
              }
              *(char *)((long)param_5 + lVar47 + 3) = (char)uVar12;
              *(char *)((long)param_5 + lVar47 + 2) = (char)uVar11;
            }
          }
        }
      }
LAB_00276d20:
      if (iVar14 < iVar10) {
        lVar53 = (long)iVar14;
        uVar52 = iVar10 - iVar14;
        puVar8 = (undefined1 *)((long)param_5 + lVar53);
        puVar42 = (ushort *)(param_1 + lVar53 * 2);
        if ((puVar8 < (undefined1 *)(param_1 + (lVar53 + (ulong)uVar52) * 2) &&
             puVar42 < (ushort *)((long)param_5 + lVar53 + (ulong)uVar52)) || (uVar52 < 0x13)) {
          lVar53 = 0;
          do {
            uVar12 = puVar42[lVar53];
            if (0x7f < puVar42[lVar53]) {
              uVar12 = uVar44;
            }
            puVar8[lVar53] = (char)uVar12;
            lVar53 = lVar53 + 1;
          } while (lVar53 != (ulong)(uint)((iVar10 + -1) - iVar14) + 1);
        }
        else {
          uVar9 = -((uint)((ulong)puVar42 >> 1) & 7) & 7;
          if (uVar52 < uVar9) {
            uVar9 = uVar52;
          }
          iVar41 = iVar14;
          if (uVar9 != 0) {
            iVar41 = iVar14 + 1;
            uVar12 = *puVar42;
            if (0x7f < *puVar42) {
              uVar12 = uVar44;
            }
            *puVar8 = (char)uVar12;
            if (uVar9 != 1) {
              lVar47 = (long)iVar41;
              iVar41 = iVar14 + 2;
              uVar12 = *(ushort *)(param_1 + lVar47 * 2);
              if (0x7f < uVar12) {
                uVar12 = uVar44;
              }
              *(char *)((long)param_5 + lVar47) = (char)uVar12;
              if (uVar9 != 2) {
                lVar47 = (long)iVar41;
                iVar41 = iVar14 + 3;
                uVar44 = *(ushort *)(param_1 + lVar47 * 2);
                uVar45 = (undefined1)uVar44;
                if (0x7f < uVar44) {
                  uVar45 = 0x7f;
                }
                *(undefined1 *)((long)param_5 + lVar47) = uVar45;
                if (uVar9 != 3) {
                  lVar47 = (long)iVar41;
                  iVar41 = iVar14 + 4;
                  uVar44 = *(ushort *)(param_1 + lVar47 * 2);
                  uVar45 = (undefined1)uVar44;
                  if (0x7f < uVar44) {
                    uVar45 = 0x7f;
                  }
                  *(undefined1 *)((long)param_5 + lVar47) = uVar45;
                  if (uVar9 != 4) {
                    lVar47 = (long)iVar41;
                    iVar41 = iVar14 + 5;
                    uVar44 = *(ushort *)(param_1 + lVar47 * 2);
                    uVar45 = (undefined1)uVar44;
                    if (0x7f < uVar44) {
                      uVar45 = 0x7f;
                    }
                    *(undefined1 *)((long)param_5 + lVar47) = uVar45;
                    if (uVar9 != 5) {
                      lVar47 = (long)iVar41;
                      iVar41 = iVar14 + 6;
                      uVar44 = *(ushort *)(param_1 + lVar47 * 2);
                      uVar45 = (undefined1)uVar44;
                      if (0x7f < uVar44) {
                        uVar45 = 0x7f;
                      }
                      *(undefined1 *)((long)param_5 + lVar47) = uVar45;
                      if (uVar9 == 7) {
                        lVar47 = (long)iVar41;
                        iVar41 = iVar14 + 7;
                        uVar44 = *(ushort *)(param_1 + lVar47 * 2);
                        uVar45 = (undefined1)uVar44;
                        if (0x7f < uVar44) {
                          uVar45 = 0x7f;
                        }
                        *(undefined1 *)((long)param_5 + lVar47) = uVar45;
                      }
                    }
                  }
                }
              }
            }
          }
          uVar4 = ((uVar52 - uVar9) - 0x10 >> 4) + 1;
          iVar14 = uVar4 * 0x10;
          if (0xe < (uVar52 - 1) - uVar9) {
            uVar50 = 0;
            puVar42 = (ushort *)(param_1 + lVar53 * 2 + (ulong)uVar9 * 2);
            puVar43 = (undefined8 *)((long)param_5 + (ulong)uVar9 + lVar53);
            do {
              uVar50 = uVar50 + 1;
              auVar73._2_2_ = 0;
              auVar73._0_2_ = *puVar42;
              auVar73._4_2_ = puVar42[1];
              auVar73._6_2_ = 0;
              auVar73._8_2_ = puVar42[2];
              auVar73._10_2_ = 0;
              auVar73._12_2_ = puVar42[3];
              auVar73._14_2_ = 0;
              auVar63._2_2_ = 0;
              auVar63._0_2_ = puVar42[4];
              auVar63._4_2_ = puVar42[5];
              auVar63._6_2_ = 0;
              auVar63._8_2_ = puVar42[6];
              auVar63._10_2_ = 0;
              auVar63._12_2_ = puVar42[7];
              auVar63._14_2_ = 0;
              auVar23._8_4_ = 0x7f;
              auVar23._0_8_ = 0x7f0000007f;
              auVar23._12_4_ = 0x7f;
              auVar70 = NEON_umin(auVar73,auVar23,4);
              auVar72._2_2_ = 0;
              auVar72._0_2_ = puVar42[8];
              auVar72._4_2_ = puVar42[9];
              auVar72._6_2_ = 0;
              auVar72._8_2_ = puVar42[10];
              auVar72._10_2_ = 0;
              auVar72._12_2_ = puVar42[0xb];
              auVar72._14_2_ = 0;
              auVar58._2_2_ = 0;
              auVar58._0_2_ = puVar42[0xc];
              auVar58._4_2_ = puVar42[0xd];
              auVar58._6_2_ = 0;
              auVar58._8_2_ = puVar42[0xe];
              auVar58._10_2_ = 0;
              auVar58._12_2_ = puVar42[0xf];
              auVar58._14_2_ = 0;
              auVar24._8_4_ = 0x7f;
              auVar24._0_8_ = 0x7f0000007f;
              auVar24._12_4_ = 0x7f;
              auVar62 = NEON_umin(auVar63,auVar24,4);
              auVar25._8_4_ = 0x7f;
              auVar25._0_8_ = 0x7f0000007f;
              auVar25._12_4_ = 0x7f;
              auVar66 = NEON_umin(auVar72,auVar25,4);
              auVar26._8_4_ = 0x7f;
              auVar26._0_8_ = 0x7f0000007f;
              auVar26._12_4_ = 0x7f;
              auVar56 = NEON_umin(auVar58,auVar26,4);
              auVar59._0_8_ =
                   CONCAT17(auVar62[0xc],
                            CONCAT16(auVar62[8],
                                     CONCAT15(auVar62[4],
                                              CONCAT14(auVar62[0],
                                                       CONCAT13(auVar70[0xc],
                                                                CONCAT12(auVar70[8],
                                                                         CONCAT11(auVar70[4],
                                                                                  auVar70[0])))))));
              auVar59[8] = auVar66[0];
              auVar59[9] = auVar66[4];
              auVar59[10] = auVar66[8];
              auVar59[0xb] = auVar66[0xc];
              auVar59[0xc] = auVar56[0];
              auVar59[0xd] = auVar56[4];
              auVar59[0xe] = auVar56[8];
              auVar59[0xf] = auVar56[0xc];
              puVar43[1] = auVar59._8_8_;
              *puVar43 = auVar59._0_8_;
              puVar42 = puVar42 + 0x10;
              puVar43 = puVar43 + 2;
            } while (uVar50 < uVar4);
            iVar41 = iVar41 + iVar14;
            if (uVar52 - uVar9 == iVar14) goto LAB_002770c8;
          }
          iVar14 = iVar41 + 1;
          uVar44 = *(ushort *)(param_1 + (long)iVar41 * 2);
          uVar45 = (undefined1)uVar44;
          if (0x7f < uVar44) {
            uVar45 = 0x7f;
          }
          *(undefined1 *)((long)param_5 + (long)iVar41) = uVar45;
          if (iVar14 < iVar10) {
            iVar5 = iVar41 + 2;
            uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
            uVar45 = (undefined1)uVar44;
            if (0x7f < uVar44) {
              uVar45 = 0x7f;
            }
            *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
            if (iVar5 < iVar10) {
              iVar14 = iVar41 + 3;
              uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
              uVar45 = (undefined1)uVar44;
              if (0x7f < uVar44) {
                uVar45 = 0x7f;
              }
              *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
              if (iVar14 < iVar10) {
                iVar5 = iVar41 + 4;
                uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                uVar45 = (undefined1)uVar44;
                if (0x7f < uVar44) {
                  uVar45 = 0x7f;
                }
                *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                if (iVar5 < iVar10) {
                  iVar14 = iVar41 + 5;
                  uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
                  uVar45 = (undefined1)uVar44;
                  if (0x7f < uVar44) {
                    uVar45 = 0x7f;
                  }
                  *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
                  if (iVar14 < iVar10) {
                    iVar5 = iVar41 + 6;
                    uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                    uVar45 = (undefined1)uVar44;
                    if (0x7f < uVar44) {
                      uVar45 = 0x7f;
                    }
                    *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                    if (iVar5 < iVar10) {
                      iVar14 = iVar41 + 7;
                      uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
                      uVar45 = (undefined1)uVar44;
                      if (0x7f < uVar44) {
                        uVar45 = 0x7f;
                      }
                      *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
                      if (iVar14 < iVar10) {
                        iVar5 = iVar41 + 8;
                        uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                        uVar45 = (undefined1)uVar44;
                        if (0x7f < uVar44) {
                          uVar45 = 0x7f;
                        }
                        *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                        if (iVar5 < iVar10) {
                          iVar14 = iVar41 + 9;
                          uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
                          uVar45 = (undefined1)uVar44;
                          if (0x7f < uVar44) {
                            uVar45 = 0x7f;
                          }
                          *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
                          if (iVar14 < iVar10) {
                            iVar5 = iVar41 + 10;
                            uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                            uVar45 = (undefined1)uVar44;
                            if (0x7f < uVar44) {
                              uVar45 = 0x7f;
                            }
                            *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                            if (iVar5 < iVar10) {
                              iVar14 = iVar41 + 0xb;
                              uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
                              uVar45 = (undefined1)uVar44;
                              if (0x7f < uVar44) {
                                uVar45 = 0x7f;
                              }
                              *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
                              if (iVar14 < iVar10) {
                                iVar5 = iVar41 + 0xc;
                                uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                                uVar45 = (undefined1)uVar44;
                                if (0x7f < uVar44) {
                                  uVar45 = 0x7f;
                                }
                                *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                                if (iVar5 < iVar10) {
                                  iVar14 = iVar41 + 0xd;
                                  uVar44 = *(ushort *)(param_1 + (long)iVar5 * 2);
                                  uVar45 = (undefined1)uVar44;
                                  if (0x7f < uVar44) {
                                    uVar45 = 0x7f;
                                  }
                                  *(undefined1 *)((long)param_5 + (long)iVar5) = uVar45;
                                  if (iVar14 < iVar10) {
                                    iVar41 = iVar41 + 0xe;
                                    uVar44 = *(ushort *)(param_1 + (long)iVar14 * 2);
                                    uVar45 = (undefined1)uVar44;
                                    if (0x7f < uVar44) {
                                      uVar45 = 0x7f;
                                    }
                                    *(undefined1 *)((long)param_5 + (long)iVar14) = uVar45;
                                    if (iVar41 < iVar10) {
                                      uVar44 = *(ushort *)(param_1 + (long)iVar41 * 2);
                                      uVar45 = (undefined1)uVar44;
                                      if (0x7f < uVar44) {
                                        uVar45 = 0x7f;
                                      }
                                      *(undefined1 *)((long)param_5 + (long)iVar41) = uVar45;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002770c8:
      iVar48 = iVar48 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffe);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar48 != 0);
  }
  return;
}


==================================================================

### FUNC 00277198 (1308 bytes) name=FUN_00277198

void FUN_00277198(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  ushort *puVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  ushort uVar7;
  ushort uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  ushort uVar17;
  long lVar18;
  ushort *puVar19;
  ulong uVar20;
  undefined8 *puVar21;
  ulong uVar22;
  int iVar23;
  ushort *puVar24;
  uint uVar25;
  long lVar26;
  int iVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  uint uVar31;
  undefined8 uVar32;
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined8 uVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  long lVar40;
  
  iVar27 = param_7[1];
  iVar6 = *param_7;
  if (iVar27 != 0) {
    uVar10 = iVar6 - 8U >> 3;
    uVar9 = (uVar10 + 1) * 8;
    if (iVar6 + -7 < 1) {
      uVar9 = 0;
    }
    uVar12 = (iVar6 + -4) - uVar9;
    lVar18 = (long)(int)uVar9;
    uVar11 = uVar12 >> 2;
    uVar1 = (uVar11 - 1 >> 1) + 1;
    lVar28 = (lVar18 + 0x20) * 2;
    lVar40 = NEON_shl(lVar18 + 4 + (ulong)uVar11 * 4,1);
    uVar4 = uVar9 + 4 + uVar11 * 4;
    do {
      if (0 < iVar6 + -7) {
        puVar19 = param_1;
        puVar21 = param_5;
        do {
          puVar24 = puVar19 + 8;
          auVar34._0_8_ = CONCAT26(0,CONCAT24(puVar19[1],(uint)*puVar19));
          auVar34._8_2_ = puVar19[2];
          auVar34._10_2_ = 0;
          auVar34._12_2_ = puVar19[3];
          auVar34._14_2_ = 0;
          uVar32 = NEON_sqxtn(auVar34._0_8_,auVar34,4);
          auVar38._0_8_ = CONCAT26(0,CONCAT24(puVar19[5],(uint)puVar19[4]));
          auVar38._8_2_ = puVar19[6];
          auVar38._10_2_ = 0;
          auVar38._12_2_ = puVar19[7];
          auVar38._14_2_ = 0;
          uVar36 = NEON_sqxtn(auVar38._0_8_,auVar38,4);
          puVar21[1] = uVar36;
          *puVar21 = uVar32;
          puVar19 = puVar24;
          puVar21 = puVar21 + 2;
        } while (puVar24 != param_1 + ((ulong)uVar10 + 1) * 8);
      }
      uVar17 = 0x7fff;
      uVar2 = uVar9;
      if ((int)uVar9 < iVar6 + -3) {
        puVar19 = param_1 + lVar18;
        puVar24 = (ushort *)((long)param_5 + lVar28 + -0x40);
        uVar2 = uVar4;
        if ((puVar19 < (ushort *)((long)param_5 + lVar28) && puVar24 < param_1 + lVar18 + 0x20) ||
           (uVar11 + 1 < 3)) {
          do {
            puVar3 = puVar19 + 4;
            uVar8 = *puVar19;
            uVar7 = puVar19[1];
            if (0x7fff < puVar19[1]) {
              uVar7 = uVar17;
            }
            puVar24[1] = uVar7;
                    /* try { // try from 00277640 to 0037767f has its CatchHandler @ 00277640
                       catch() { ... } // from try @ 00277640 with catch @ 00277640
                       catch() { ... } // from try @ 002776c0 with catch @ 00277640
                       catch() { ... } // from try @ 002777f8 with catch @ 00277640 */
            if (0x7fff < uVar8) {
              uVar8 = uVar17;
            }
            *puVar24 = uVar8;
            uVar7 = puVar19[3];
            if (0x7fff < puVar19[3]) {
              uVar7 = uVar17;
            }
            uVar8 = puVar19[2];
            if (0x7fff < puVar19[2]) {
              uVar8 = uVar17;
            }
            puVar24[3] = uVar7;
            puVar24[2] = uVar8;
            puVar19 = puVar3;
            puVar24 = puVar24 + 4;
          } while (puVar3 != (ushort *)((long)param_1 + lVar40));
        }
        else {
          uVar25 = uVar9;
          if (3 < uVar12) {
            uVar25 = 0;
            do {
              uVar25 = uVar25 + 1;
              auVar37._2_2_ = 0;
              auVar37._0_2_ = *puVar19;
              auVar37._4_2_ = puVar19[1];
              auVar37._6_2_ = 0;
              auVar37._8_2_ = puVar19[2];
              auVar37._10_2_ = 0;
              auVar37._12_2_ = puVar19[3];
              auVar37._14_2_ = 0;
              auVar33._2_2_ = 0;
              auVar33._0_2_ = puVar19[4];
              auVar33._4_2_ = puVar19[5];
              auVar33._6_2_ = 0;
              auVar33._8_2_ = puVar19[6];
              auVar33._10_2_ = 0;
              auVar33._12_2_ = puVar19[7];
              auVar33._14_2_ = 0;
              auVar13._8_4_ = 0x7fff;
              auVar13._0_8_ = 0x7fff00007fff;
              auVar13._12_4_ = 0x7fff;
              auVar38 = NEON_smin(auVar37,auVar13,4);
              auVar14._8_4_ = 0x7fff;
              auVar14._0_8_ = 0x7fff00007fff;
              auVar14._12_4_ = 0x7fff;
              auVar34 = NEON_smin(auVar33,auVar14,4);
              *(ulong *)(puVar24 + 4) =
                   CONCAT26(auVar34._12_2_,
                            CONCAT24(auVar34._8_2_,CONCAT22(auVar34._4_2_,auVar34._0_2_)));
              *(ulong *)puVar24 =
                   CONCAT26(auVar38._12_2_,
                            CONCAT24(auVar38._8_2_,CONCAT22(auVar38._4_2_,auVar38._0_2_)));
              puVar19 = puVar19 + 8;
              puVar24 = puVar24 + 8;
            } while (uVar25 < uVar1);
            uVar25 = uVar9 + uVar1 * 8;
            if (uVar11 + 1 == uVar1 * 2) goto LAB_00277360;
          }
          uVar20 = -(ulong)(uVar25 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar25 << 1;
          uVar7 = *(ushort *)((long)param_1 + uVar20 + 2);
          if (0x7fff < uVar7) {
            uVar7 = uVar17;
          }
          uVar8 = *(ushort *)((long)param_1 + uVar20);
          if (0x7fff < *(ushort *)((long)param_1 + uVar20)) {
            uVar8 = uVar17;
          }
          *(ushort *)((long)param_5 + uVar20) = uVar8;
          *(ushort *)((long)param_5 + uVar20 + 2) = uVar7;
          uVar7 = *(ushort *)((long)param_1 + uVar20 + 6);
          uVar8 = *(ushort *)((long)param_1 + uVar20 + 4);
          if (0x7fff < uVar7) {
            uVar7 = uVar17;
          }
          if (0x7fff < uVar8) {
            uVar8 = uVar17;
          }
          *(ushort *)((long)param_5 + uVar20 + 4) = uVar8;
          *(ushort *)((long)param_5 + uVar20 + 6) = uVar7;
        }
      }
LAB_00277360:
      uVar20 = (ulong)uVar2;
      if ((int)uVar2 < iVar6) {
        lVar26 = (long)(int)uVar2;
        uVar25 = iVar6 - uVar2;
        lVar30 = (lVar26 + 8) * 2;
        lVar29 = lVar30 + -0x10;
        puVar19 = (ushort *)((long)param_5 + lVar29);
        puVar24 = param_1 + lVar26;
                    /* catch() { ... } // from try @ 00276834 with catch @ 00277398 */
                    /* catch() { ... } // from try @ 00276828 with catch @ 002773a8 */
        if ((puVar19 < param_1 + lVar26 + 8 && puVar24 < (ushort *)((long)param_5 + lVar30)) ||
           (uVar25 < 0xb)) {
          lVar26 = 0;
                    /* try { // try from 00277680 to 00377687 has its CatchHandler @ 00277808 */
          do {
                    /* try { // try from 0027768c to 00377693 has its CatchHandler @ 002777e4 */
            uVar7 = *(ushort *)((long)puVar24 + lVar26);
            if (0x7fff < *(ushort *)((long)puVar24 + lVar26)) {
              uVar7 = uVar17;
            }
            *(ushort *)((long)puVar19 + lVar26) = uVar7;
            lVar26 = lVar26 + 2;
                    /* try { // try from 00277698 to 0037769f has its CatchHandler @ 002777d0 */
          } while (lVar26 != ((ulong)((iVar6 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar5 = -((uint)((ulong)puVar24 >> 1) & 7) & 7;
          if (uVar25 < uVar5) {
            uVar5 = uVar25;
          }
          if (uVar5 != 0) {
            lVar30 = lVar26 * 2;
            uVar7 = param_1[lVar26];
            if (0x7fff < param_1[lVar26]) {
              uVar7 = uVar17;
            }
            *(ushort *)((long)param_5 + lVar30) = uVar7;
            if (uVar5 == 1) {
              uVar20 = (ulong)(uVar2 + 1);
                    /* try { // try from 002776b0 to 003776b7 has its CatchHandler @ 0027776c */
            }
            else {
              uVar31 = uVar2 + 2;
              uVar7 = param_1[lVar26 + 1];
              if (0x7fff < uVar7) {
                uVar7 = 0x7fff;
              }
              *(ushort *)((long)param_5 + lVar30 + 2) = uVar7;
              if (uVar5 != 2) {
                uVar31 = uVar2 + 3;
                uVar7 = param_1[lVar26 + 2];
                if (0x7fff < param_1[lVar26 + 2]) {
                  uVar7 = uVar17;
                }
                *(ushort *)((long)param_5 + lVar30 + 4) = uVar7;
                if (uVar5 != 3) {
                  uVar31 = uVar2 + 4;
                  uVar7 = param_1[lVar26 + 3];
                  if (0x7fff < uVar7) {
                    uVar7 = 0x7fff;
                  }
                  *(ushort *)((long)param_5 + lVar30 + 6) = uVar7;
                  if (uVar5 != 4) {
                    uVar31 = uVar2 + 5;
                    uVar7 = param_1[lVar26 + 4];
                    if (0x7fff < param_1[lVar26 + 4]) {
                      uVar7 = uVar17;
                    }
                    *(ushort *)((long)param_5 + lVar30 + 8) = uVar7;
                    if (uVar5 != 5) {
                      uVar31 = uVar2 + 6;
                      uVar7 = param_1[lVar26 + 5];
                      if (0x7fff < uVar7) {
                        uVar7 = 0x7fff;
                      }
                      *(ushort *)((long)param_5 + lVar30 + 10) = uVar7;
                      if (uVar5 == 7) {
                        uVar20 = (ulong)(uVar2 + 7);
                        uVar7 = param_1[lVar26 + 6];
                        if (0x7fff < param_1[lVar26 + 6]) {
                          uVar7 = uVar17;
                        }
                        *(ushort *)((long)param_5 + lVar30 + 0xc) = uVar7;
                        goto LAB_0027749c;
                      }
                    }
                  }
                }
              }
              uVar20 = (ulong)uVar31;
            }
          }
LAB_0027749c:
          uVar2 = ((uVar25 - uVar5) - 8 >> 3) + 1;
          iVar23 = uVar2 * 8;
          if (6 < (uVar25 - 1) - uVar5) {
            uVar31 = 0;
            puVar21 = (undefined8 *)((long)param_5 + lVar29 + (ulong)uVar5 * 2);
            puVar19 = param_1 + (ulong)uVar5 + lVar26;
            do {
              uVar31 = uVar31 + 1;
              auVar39._2_2_ = 0;
              auVar39._0_2_ = *puVar19;
              auVar39._4_2_ = puVar19[1];
              auVar39._6_2_ = 0;
              auVar39._8_2_ = puVar19[2];
              auVar39._10_2_ = 0;
              auVar39._12_2_ = puVar19[3];
              auVar39._14_2_ = 0;
              auVar35._2_2_ = 0;
              auVar35._0_2_ = puVar19[4];
              auVar35._4_2_ = puVar19[5];
              auVar35._6_2_ = 0;
              auVar35._8_2_ = puVar19[6];
              auVar35._10_2_ = 0;
              auVar35._12_2_ = puVar19[7];
              auVar35._14_2_ = 0;
              auVar15._8_4_ = 0x7fff;
              auVar15._0_8_ = 0x7fff00007fff;
              auVar15._12_4_ = 0x7fff;
              auVar38 = NEON_smin(auVar39,auVar15,4);
              auVar16._8_4_ = 0x7fff;
              auVar16._0_8_ = 0x7fff00007fff;
              auVar16._12_4_ = 0x7fff;
              auVar34 = NEON_smin(auVar35,auVar16,4);
              puVar21[1] = CONCAT26(auVar34._12_2_,
                                    CONCAT24(auVar34._8_2_,CONCAT22(auVar34._4_2_,auVar34._0_2_)));
              *puVar21 = CONCAT26(auVar38._12_2_,
                                  CONCAT24(auVar38._8_2_,CONCAT22(auVar38._4_2_,auVar38._0_2_)));
              puVar21 = puVar21 + 2;
              puVar19 = puVar19 + 8;
            } while (uVar31 < uVar2);
            uVar20 = (ulong)(uint)((int)uVar20 + iVar23);
            if (uVar25 - uVar5 == iVar23) goto LAB_002775dc;
          }
          uVar22 = -(uVar20 >> 0x1f) & 0xfffffffe00000000 | uVar20 << 1;
          iVar23 = (int)uVar20;
          uVar7 = *(ushort *)((long)param_1 + uVar22);
          if (0x7fff < uVar7) {
            uVar7 = 0x7fff;
          }
          *(ushort *)((long)param_5 + uVar22) = uVar7;
          if (iVar23 + 1 < iVar6) {
            uVar7 = *(ushort *)((long)param_1 + uVar22 + 2);
            if (0x7fff < uVar7) {
              uVar7 = uVar17;
            }
            *(ushort *)((long)param_5 + uVar22 + 2) = uVar7;
            if (iVar23 + 2 < iVar6) {
              uVar7 = *(ushort *)((long)param_1 + uVar22 + 4);
              if (0x7fff < uVar7) {
                uVar7 = 0x7fff;
              }
              *(ushort *)((long)param_5 + uVar22 + 4) = uVar7;
              if (iVar23 + 3 < iVar6) {
                uVar7 = *(ushort *)((long)param_1 + uVar22 + 6);
                if (0x7fff < uVar7) {
                  uVar7 = uVar17;
                }
                *(ushort *)((long)param_5 + uVar22 + 6) = uVar7;
                if (iVar23 + 4 < iVar6) {
                  uVar7 = *(ushort *)((long)param_1 + uVar22 + 8);
                  if (0x7fff < uVar7) {
                    uVar7 = 0x7fff;
                  }
                  *(ushort *)((long)param_5 + uVar22 + 8) = uVar7;
                  if (iVar23 + 5 < iVar6) {
                    uVar7 = *(ushort *)((long)param_1 + uVar22 + 10);
                    if (0x7fff < uVar7) {
                      uVar7 = uVar17;
                    }
                    *(ushort *)((long)param_5 + uVar22 + 10) = uVar7;
                    if (iVar23 + 6 < iVar6) {
                      uVar7 = *(ushort *)((long)param_1 + uVar22 + 0xc);
                      if (0x7fff < uVar7) {
                        uVar7 = uVar17;
                      }
                      *(ushort *)((long)param_5 + uVar22 + 0xc) = uVar7;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_002775dc:
      iVar27 = iVar27 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar27 != 0);
  }
  return;
}


==================================================================

### FUNC 002776b4 (916 bytes) name=FUN_002776b4

void FUN_002776b4(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  ushort uVar8;
  ushort uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  ulong *puVar16;
  long lVar17;
  undefined8 *puVar18;
  int iVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  uint uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  
                    /* try { // try from 002776bc to 003776bf has its CatchHandler @ 00277750 */
                    /* try { // try from 002776c0 to 0037775b has its CatchHandler @ 00277640 */
  iVar22 = param_7[1];
  iVar7 = *param_7;
  if (iVar22 != 0) {
    uVar11 = iVar7 - 8U >> 3;
    iVar10 = (uVar11 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar10 = 0;
    }
    uVar13 = (iVar7 + -4) - iVar10;
    uVar12 = uVar13 >> 2;
    uVar1 = (uVar12 - 1 >> 1) + 1;
    iVar5 = iVar10 + 4 + uVar12 * 4;
    do {
      if (0 < iVar7 + -7) {
                    /* catch() { ... } // from try @ 002776bc with catch @ 00277750 */
        puVar16 = (ulong *)(param_5 + 0x10);
        puVar18 = param_1;
        do {
                    /* try { // try from 0027775c to 00377763 has its CatchHandler @ 00277768 */
          uVar25 = puVar18[1];
          uVar24 = *puVar18;
                    /* catch() { ... } // from try @ 0027775c with catch @ 00277768 */
                    /* catch() { ... } // from try @ 002776b0 with catch @ 0027776c */
          puVar16[-1] = (ulong)CONCAT24((short)((ulong)uVar24 >> 0x30),
                                        (uint)(ushort)((ulong)uVar24 >> 0x20));
          puVar16[-2] = (ulong)(CONCAT24((short)((ulong)uVar24 >> 0x10),(int)uVar24) &
                               0xffff0000ffff);
          puVar16[1] = (ulong)CONCAT24((short)((ulong)uVar25 >> 0x30),
                                       (uint)(ushort)((ulong)uVar25 >> 0x20));
          *puVar16 = (ulong)(CONCAT24((short)((ulong)uVar25 >> 0x10),(int)uVar25) & 0xffff0000ffff);
          puVar16 = puVar16 + 4;
                    /* try { // try from 0027777c to 0037777f has its CatchHandler @ 00277790 */
          puVar18 = puVar18 + 2;
                    /* try { // try from 00277780 to 00377787 has its CatchHandler @ 0027778c */
        } while (puVar16 != (ulong *)(param_5 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar19 = iVar10;
      if (iVar10 < iVar7 + -3) {
                    /* catch() { ... } // from try @ 00277780 with catch @ 0027778c */
                    /* catch() { ... } // from try @ 0027777c with catch @ 00277790 */
        iVar2 = iVar10;
        iVar19 = iVar5;
        if (3 < uVar13) {
                    /* catch() { ... } // from try @ 002776a4 with catch @ 0027779c */
          uVar15 = 0;
          puVar16 = (ulong *)(param_5 + (long)iVar10 * 4);
          puVar18 = (undefined8 *)((long)param_1 + (long)iVar10 * 2);
          do {
            uVar25 = puVar18[1];
            uVar24 = *puVar18;
                    /* try { // try from 002777a8 to 003777ab has its CatchHandler @ 002777bc */
            uVar15 = uVar15 + 1;
                    /* try { // try from 002777ac to 003777b3 has its CatchHandler @ 002777b8 */
                    /* catch() { ... } // from try @ 002777ac with catch @ 002777b8 */
                    /* catch() { ... } // from try @ 002777a8 with catch @ 002777bc */
            puVar16[1] = (ulong)CONCAT24((short)((ulong)uVar24 >> 0x30),
                                         (uint)(ushort)((ulong)uVar24 >> 0x20));
            *puVar16 = (ulong)(CONCAT24((short)((ulong)uVar24 >> 0x10),(int)uVar24) & 0xffff0000ffff
                              );
            puVar16[3] = (ulong)CONCAT24((short)((ulong)uVar25 >> 0x30),
                                         (uint)(ushort)((ulong)uVar25 >> 0x20));
            puVar16[2] = (ulong)(CONCAT24((short)((ulong)uVar25 >> 0x10),(int)uVar25) &
                                0xffff0000ffff);
            puVar16 = puVar16 + 4;
            puVar18 = puVar18 + 2;
          } while (uVar15 < uVar1);
          iVar2 = iVar10 + uVar1 * 8;
          if (uVar12 + 1 == uVar1 * 2) goto LAB_00277808;
        }
                    /* catch() { ... } // from try @ 00277698 with catch @ 002777d0 */
                    /* try { // try from 002777d4 to 003777db has its CatchHandler @ 002777e0 */
        lVar20 = (long)iVar2 * 2;
        lVar17 = (long)iVar2 * 4;
                    /* catch() { ... } // from try @ 002777d4 with catch @ 002777e0 */
                    /* catch() { ... } // from try @ 0027768c with catch @ 002777e4 */
        lVar21 = param_5 + lVar17;
                    /* try { // try from 002777e8 to 003777ef has its CatchHandler @ 00277800 */
        uVar8 = *(ushort *)((long)param_1 + lVar20 + 2);
        uVar9 = *(ushort *)((long)param_1 + lVar20 + 6);
                    /* try { // try from 002777f0 to 003777f7 has its CatchHandler @ 00277804 */
        *(uint *)(param_5 + lVar17) = (uint)*(ushort *)((long)param_1 + lVar20);
                    /* try { // try from 002777f8 to 0037780f has its CatchHandler @ 00277640 */
        *(uint *)(lVar21 + 8) = (uint)*(ushort *)((long)param_1 + lVar20 + 4);
        *(uint *)(lVar21 + 4) = (uint)uVar8;
                    /* catch() { ... } // from try @ 002777e8 with catch @ 00277800 */
        *(uint *)(lVar21 + 0xc) = (uint)uVar9;
      }
LAB_00277808:
                    /* catch() { ... } // from try @ 00277680 with catch @ 00277808 */
      if (iVar19 < iVar7) {
                    /* try { // try from 00277810 to 0037782b has its CatchHandler @ 00277810
                       catch() { ... } // from try @ 00277810 with catch @ 00277810
                       catch() { ... } // from try @ 00277834 with catch @ 00277810
                       catch() { ... } // from try @ 00277874 with catch @ 00277810 */
        lVar21 = (long)iVar19;
        uVar14 = iVar7 - iVar19;
        uVar15 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
                    /* try { // try from 0027782c to 00377833 has its CatchHandler @ 00277868 */
        uVar6 = (ulong)uVar15;
        if (uVar14 < uVar15) {
          uVar6 = (ulong)uVar14;
        }
                    /* try { // try from 00277834 to 00377857 has its CatchHandler @ 00277810 */
        if (uVar14 < 9) {
          uVar6 = (ulong)uVar14;
        }
        uVar15 = (uint)uVar6;
        if (uVar15 != 0) {
          *(uint *)(param_5 + lVar21 * 4) = (uint)*(ushort *)((long)param_1 + lVar21 * 2);
          iVar2 = iVar19 + 1;
          if (uVar15 != 1) {
                    /* try { // try from 00277858 to 00377867 has its CatchHandler @ 00277868 */
            iVar3 = iVar19 + 2;
            *(uint *)(param_5 + (long)iVar2 * 4) =
                 (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
            iVar2 = iVar3;
                    /* catch() { ... } // from try @ 0027782c with catch @ 00277868
                       catch() { ... } // from try @ 00277858 with catch @ 00277868 */
            if (uVar15 != 2) {
                    /* try { // try from 0027786c to 00377873 has its CatchHandler @ 0027787c */
                    /* try { // try from 00277874 to 0037787f has its CatchHandler @ 00277810 */
              iVar2 = iVar19 + 3;
                    /* catch() { ... } // from try @ 0027786c with catch @ 0027787c */
              *(uint *)(param_5 + (long)iVar3 * 4) =
                   (uint)*(ushort *)((long)param_1 + (long)iVar3 * 2);
              if (uVar15 != 3) {
                iVar3 = iVar19 + 4;
                    /* try { // try from 00277894 to 00377897 has its CatchHandler @ 002778b0 */
                *(uint *)(param_5 + (long)iVar2 * 4) =
                     (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
                iVar2 = iVar3;
                    /* try { // try from 00277898 to 0037789f has its CatchHandler @ 002778ac */
                if (uVar15 != 4) {
                  iVar2 = iVar19 + 5;
                    /* catch() { ... } // from try @ 00277898 with catch @ 002778ac */
                  *(uint *)(param_5 + (long)iVar3 * 4) =
                       (uint)*(ushort *)((long)param_1 + (long)iVar3 * 2);
                    /* catch() { ... } // from try @ 00277894 with catch @ 002778b0 */
                  if (uVar15 != 5) {
                    iVar3 = iVar19 + 6;
                    *(uint *)(param_5 + (long)iVar2 * 4) =
                         (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
                    iVar2 = iVar3;
                    if (uVar15 != 6) {
                      iVar2 = iVar19 + 7;
                      *(uint *)(param_5 + (long)iVar3 * 4) =
                           (uint)*(ushort *)((long)param_1 + (long)iVar3 * 2);
                      if (uVar15 == 8) {
                    /* try { // try from 002778e4 to 003778e7 has its CatchHandler @ 00277978 */
                    /* try { // try from 002778ec to 003778ef has its CatchHandler @ 00277974 */
                        *(uint *)(param_5 + (long)iVar2 * 4) =
                             (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
                        iVar2 = iVar19 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar19 = iVar2;
                    /* try { // try from 002778f4 to 003778f7 has its CatchHandler @ 00277970 */
          if (uVar15 == uVar14) goto LAB_00277a00;
        }
                    /* try { // try from 00277900 to 00377903 has its CatchHandler @ 0027795c */
                    /* try { // try from 00277904 to 0037790b has its CatchHandler @ 00277958 */
                    /* try { // try from 00277914 to 00377917 has its CatchHandler @ 00277954 */
        uVar4 = ((uVar14 - uVar15) - 8 >> 3) + 1;
                    /* try { // try from 00277918 to 0037791f has its CatchHandler @ 00277950 */
        iVar2 = uVar4 * 8;
        if (6 < (uVar14 - 1) - uVar15) {
                    /* try { // try from 00277924 to 00377927 has its CatchHandler @ 0027794c */
          uVar23 = 0;
                    /* try { // try from 0027792c to 0037792f has its CatchHandler @ 00277948 */
          puVar18 = (undefined8 *)((long)param_1 + (uVar6 + lVar21) * 2);
          puVar16 = (ulong *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar25 = puVar18[1];
            uVar24 = *puVar18;
                    /* try { // try from 00277934 to 00377937 has its CatchHandler @ 00277944 */
            uVar23 = uVar23 + 1;
                    /* catch() { ... } // from try @ 00277934 with catch @ 00277944 */
                    /* catch() { ... } // from try @ 0027792c with catch @ 00277948 */
                    /* catch() { ... } // from try @ 00277924 with catch @ 0027794c */
            puVar16[1] = (ulong)CONCAT24((short)((ulong)uVar24 >> 0x30),
                                         (uint)(ushort)((ulong)uVar24 >> 0x20));
            *puVar16 = (ulong)(CONCAT24((short)((ulong)uVar24 >> 0x10),(int)uVar24) & 0xffff0000ffff
                              );
                    /* catch() { ... } // from try @ 00277918 with catch @ 00277950 */
            puVar16[3] = (ulong)CONCAT24((short)((ulong)uVar25 >> 0x30),
                                         (uint)(ushort)((ulong)uVar25 >> 0x20));
            puVar16[2] = (ulong)(CONCAT24((short)((ulong)uVar25 >> 0x10),(int)uVar25) &
                                0xffff0000ffff);
                    /* catch() { ... } // from try @ 00277914 with catch @ 00277954 */
            puVar18 = puVar18 + 2;
            puVar16 = puVar16 + 4;
          } while (uVar23 < uVar4);
                    /* catch() { ... } // from try @ 00277904 with catch @ 00277958 */
                    /* catch() { ... } // from try @ 00277900 with catch @ 0027795c */
          iVar19 = iVar19 + iVar2;
          if (iVar2 == uVar14 - uVar15) goto LAB_00277a00;
        }
        iVar2 = iVar19 + 1;
                    /* catch() { ... } // from try @ 002778f4 with catch @ 00277970 */
                    /* catch() { ... } // from try @ 002778ec with catch @ 00277974 */
        *(uint *)(param_5 + (long)iVar19 * 4) = (uint)*(ushort *)((long)param_1 + (long)iVar19 * 2);
                    /* catch() { ... } // from try @ 002778e4 with catch @ 00277978 */
        if (iVar2 < iVar7) {
          iVar3 = iVar19 + 2;
          *(uint *)(param_5 + (long)iVar2 * 4) = (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
          if (iVar3 < iVar7) {
            iVar2 = iVar19 + 3;
            *(uint *)(param_5 + (long)iVar3 * 4) =
                 (uint)*(ushort *)((long)param_1 + (long)iVar3 * 2);
            if (iVar2 < iVar7) {
              iVar3 = iVar19 + 4;
                    /* try { // try from 002779bc to 003779e3 has its CatchHandler @ 002779bc
                       catch() { ... } // from try @ 002779bc with catch @ 002779bc
                       catch() { ... } // from try @ 002779f8 with catch @ 002779bc
                       catch() { ... } // from try @ 00277abc with catch @ 002779bc */
              *(uint *)(param_5 + (long)iVar2 * 4) =
                   (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
              if (iVar3 < iVar7) {
                iVar2 = iVar19 + 5;
                *(uint *)(param_5 + (long)iVar3 * 4) =
                     (uint)*(ushort *)((long)param_1 + (long)iVar3 * 2);
                if (iVar2 < iVar7) {
                  iVar19 = iVar19 + 6;
                    /* try { // try from 002779e4 to 003779e7 has its CatchHandler @ 00277ab0 */
                  *(uint *)(param_5 + (long)iVar2 * 4) =
                       (uint)*(ushort *)((long)param_1 + (long)iVar2 * 2);
                    /* try { // try from 002779f0 to 003779f7 has its CatchHandler @ 00277aac */
                  if (iVar19 < iVar7) {
                    /* try { // try from 002779f8 to 00377ab3 has its CatchHandler @ 002779bc */
                    *(uint *)(param_5 + (long)iVar19 * 4) =
                         (uint)*(ushort *)((long)param_1 + (long)iVar19 * 2);
                  }
                }
              }
            }
          }
        }
      }
LAB_00277a00:
      iVar22 = iVar22 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 00277a48 (1016 bytes) name=FUN_00277a48

void FUN_00277a48(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  ushort uVar8;
  ushort uVar9;
  ushort uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  long lVar18;
  ushort *puVar19;
  int iVar20;
  long lVar21;
  uint uVar22;
  int iVar23;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  
  iVar23 = param_7[1];
  iVar7 = *param_7;
  if (iVar23 != 0) {
    uVar12 = iVar7 - 8U >> 3;
    iVar11 = (uVar12 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - iVar11;
    uVar13 = uVar14 >> 2;
                    /* catch() { ... } // from try @ 002779f0 with catch @ 00277aac */
                    /* catch() { ... } // from try @ 002779e4 with catch @ 00277ab0 */
                    /* try { // try from 00277ab4 to 00377abb has its CatchHandler @ 00277ac4 */
                    /* try { // try from 00277abc to 00377ac7 has its CatchHandler @ 002779bc */
    uVar1 = (uVar13 - 1 >> 1) + 1;
                    /* catch() { ... } // from try @ 00277ab4 with catch @ 00277ac4 */
    iVar5 = iVar11 + 4 + uVar13 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar17 = (undefined8 *)(param_5 + 0x10);
                    /* try { // try from 00277aec to 00377b4b has its CatchHandler @ 00277aec
                       catch() { ... } // from try @ 00277aec with catch @ 00277aec
                       catch() { ... } // from try @ 00277b64 with catch @ 00277aec */
        puVar19 = param_1;
        do {
          auVar24._2_2_ = 0;
          auVar24._0_2_ = *puVar19;
          auVar24._4_2_ = puVar19[1];
          auVar24._6_2_ = 0;
          auVar24._8_2_ = puVar19[2];
          auVar24._10_2_ = 0;
          auVar24._12_2_ = puVar19[3];
          auVar24._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          auVar27._2_2_ = 0;
          auVar27._0_2_ = puVar19[4];
          auVar27._4_2_ = puVar19[5];
          auVar27._6_2_ = 0;
          auVar27._8_2_ = puVar19[6];
          auVar27._10_2_ = 0;
          auVar27._12_2_ = puVar19[7];
          auVar27._14_2_ = 0;
          auVar27 = NEON_ucvtf(auVar27,4);
          puVar17[-1] = auVar24._8_8_;
          puVar17[-2] = auVar24._0_8_;
          puVar17[1] = auVar27._8_8_;
          *puVar17 = auVar27._0_8_;
          puVar17 = puVar17 + 4;
          puVar19 = puVar19 + 8;
        } while (puVar17 != (undefined8 *)(param_5 + (ulong)uVar12 * 0x20 + 0x30));
      }
      iVar20 = iVar11;
      if (iVar11 < iVar7 + -3) {
        iVar2 = iVar11;
        iVar20 = iVar5;
        if (3 < uVar14) {
          uVar16 = 0;
          puVar17 = (undefined8 *)(param_5 + (long)iVar11 * 4);
          puVar19 = param_1 + iVar11;
          do {
            uVar16 = uVar16 + 1;
                    /* try { // try from 00277b4c to 00377b63 has its CatchHandler @ 00277c90 */
            auVar28._2_2_ = 0;
            auVar28._0_2_ = *puVar19;
            auVar28._4_2_ = puVar19[1];
            auVar28._6_2_ = 0;
            auVar28._8_2_ = puVar19[2];
            auVar28._10_2_ = 0;
            auVar28._12_2_ = puVar19[3];
            auVar28._14_2_ = 0;
            auVar25._2_2_ = 0;
            auVar25._0_2_ = puVar19[4];
            auVar25._4_2_ = puVar19[5];
            auVar25._6_2_ = 0;
            auVar25._8_2_ = puVar19[6];
            auVar25._10_2_ = 0;
            auVar25._12_2_ = puVar19[7];
            auVar25._14_2_ = 0;
            auVar27 = NEON_scvtf(auVar28,4);
            auVar24 = NEON_scvtf(auVar25,4);
            puVar17[1] = auVar27._8_8_;
            *puVar17 = auVar27._0_8_;
                    /* try { // try from 00277b64 to 00377ca3 has its CatchHandler @ 00277aec */
            puVar17[3] = auVar24._8_8_;
            puVar17[2] = auVar24._0_8_;
            puVar17 = puVar17 + 4;
            puVar19 = puVar19 + 8;
          } while (uVar16 < uVar1);
          iVar2 = iVar11 + uVar1 * 8;
          if (uVar13 + 1 == uVar1 * 2) goto LAB_00277bbc;
        }
        lVar18 = (long)iVar2;
        lVar21 = param_5 + lVar18 * 4;
        uVar8 = param_1[lVar18 + 1];
        uVar9 = param_1[lVar18 + 3];
        uVar10 = param_1[lVar18 + 2];
        *(float *)(param_5 + lVar18 * 4) = (float)param_1[lVar18];
        *(float *)(lVar21 + 4) = (float)uVar8;
        *(float *)(lVar21 + 0xc) = (float)uVar9;
        *(float *)(lVar21 + 8) = (float)uVar10;
      }
LAB_00277bbc:
      if (iVar20 < iVar7) {
        lVar21 = (long)iVar20;
        uVar15 = iVar7 - iVar20;
        uVar16 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
        uVar6 = (ulong)uVar16;
        if (uVar15 < uVar16) {
          uVar6 = (ulong)uVar15;
        }
        if (uVar15 < 9) {
          uVar6 = (ulong)uVar15;
        }
        uVar16 = (uint)uVar6;
        if (uVar16 != 0) {
          iVar2 = iVar20 + 1;
          *(float *)(param_5 + lVar21 * 4) = (float)param_1[lVar21];
          if (uVar16 != 1) {
            iVar3 = iVar20 + 2;
            *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
            iVar2 = iVar3;
            if (uVar16 != 2) {
              iVar2 = iVar20 + 3;
              *(float *)(param_5 + (long)iVar3 * 4) = (float)param_1[iVar3];
              if (uVar16 != 3) {
                iVar3 = iVar20 + 4;
                *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
                iVar2 = iVar3;
                if (uVar16 != 4) {
                  iVar2 = iVar20 + 5;
                  *(float *)(param_5 + (long)iVar3 * 4) = (float)param_1[iVar3];
                  if (uVar16 != 5) {
                    iVar3 = iVar20 + 6;
                    /* catch() { ... } // from try @ 00277b4c with catch @ 00277c90 */
                    *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
                    iVar2 = iVar3;
                    if (uVar16 != 6) {
                      iVar2 = iVar20 + 7;
                      *(float *)(param_5 + (long)iVar3 * 4) = (float)param_1[iVar3];
                      if (uVar16 == 8) {
                        *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
                        iVar2 = iVar20 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar20 = iVar2;
          if (uVar16 == uVar15) goto LAB_00277df8;
        }
        uVar4 = ((uVar15 - uVar16) - 8 >> 3) + 1;
        iVar2 = uVar4 * 8;
        if (6 < (uVar15 - 1) - uVar16) {
          uVar22 = 0;
          puVar19 = param_1 + uVar6 + lVar21;
          puVar17 = (undefined8 *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar22 = uVar22 + 1;
            auVar29._2_2_ = 0;
            auVar29._0_2_ = *puVar19;
            auVar29._4_2_ = puVar19[1];
            auVar29._6_2_ = 0;
            auVar29._8_2_ = puVar19[2];
            auVar29._10_2_ = 0;
            auVar29._12_2_ = puVar19[3];
            auVar29._14_2_ = 0;
            auVar26._2_2_ = 0;
            auVar26._0_2_ = puVar19[4];
            auVar26._4_2_ = puVar19[5];
            auVar26._6_2_ = 0;
            auVar26._8_2_ = puVar19[6];
            auVar26._10_2_ = 0;
            auVar26._12_2_ = puVar19[7];
            auVar26._14_2_ = 0;
            auVar27 = NEON_scvtf(auVar29,4);
            auVar24 = NEON_scvtf(auVar26,4);
            puVar17[1] = auVar27._8_8_;
            *puVar17 = auVar27._0_8_;
            puVar17[3] = auVar24._8_8_;
            puVar17[2] = auVar24._0_8_;
            puVar19 = puVar19 + 8;
            puVar17 = puVar17 + 4;
          } while (uVar22 < uVar4);
          iVar20 = iVar20 + iVar2;
          if (iVar2 == uVar15 - uVar16) goto LAB_00277df8;
        }
        iVar2 = iVar20 + 1;
        *(float *)(param_5 + (long)iVar20 * 4) = (float)param_1[iVar20];
        if (iVar2 < iVar7) {
          iVar3 = iVar20 + 2;
          *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
          if (iVar3 < iVar7) {
            iVar2 = iVar20 + 3;
            *(float *)(param_5 + (long)iVar3 * 4) = (float)param_1[iVar3];
            if (iVar2 < iVar7) {
              iVar3 = iVar20 + 4;
              *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
              if (iVar3 < iVar7) {
                iVar2 = iVar20 + 5;
                *(float *)(param_5 + (long)iVar3 * 4) = (float)param_1[iVar3];
                if (iVar2 < iVar7) {
                  iVar20 = iVar20 + 6;
                  *(float *)(param_5 + (long)iVar2 * 4) = (float)param_1[iVar2];
                  if (iVar20 < iVar7) {
                    *(float *)(param_5 + (long)iVar20 * 4) = (float)param_1[iVar20];
                  }
                }
              }
            }
          }
        }
      }
LAB_00277df8:
      iVar23 = iVar23 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 00277e40 (1296 bytes) name=FUN_00277e40

void FUN_00277e40(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  uint uVar2;
  short *psVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  short sVar7;
  short sVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  long lVar13;
  short *psVar14;
  short *psVar15;
  ulong uVar16;
  undefined8 *puVar17;
  ulong uVar18;
  int iVar19;
  uint uVar20;
  long lVar21;
  int iVar22;
  long lVar23;
  long lVar24;
  uint uVar25;
  long lVar26;
  undefined8 uVar27;
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined8 uVar31;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  
  iVar22 = param_7[1];
  iVar6 = *param_7;
  if (iVar22 != 0) {
    uVar10 = iVar6 - 8U >> 3;
                    /* try { // try from 00277e78 to 00377e8f has its CatchHandler @ 00277f34 */
    uVar9 = (uVar10 + 1) * 8;
    if (iVar6 + -7 < 1) {
      uVar9 = 0;
    }
    uVar12 = (iVar6 + -4) - uVar9;
    uVar11 = uVar12 >> 2;
    lVar13 = (long)(int)uVar9;
                    /* try { // try from 00277ea8 to 00377ebf has its CatchHandler @ 00277f30 */
    uVar1 = (uVar11 - 1 >> 1) + 1;
    lVar23 = (lVar13 + 0x20) * 2;
                    /* try { // try from 00277ed4 to 00377edb has its CatchHandler @ 00277f4c */
    uVar4 = uVar9 + 4 + uVar11 * 4;
    do {
      if (0 < iVar6 + -7) {
        psVar14 = param_1;
        puVar17 = param_5;
        do {
          psVar15 = psVar14 + 8;
          auVar29._0_8_ = CONCAT44((int)psVar14[1],(int)*psVar14);
          auVar29._8_4_ = (int)psVar14[2];
          auVar29._12_4_ = (int)psVar14[3];
          uVar27 = NEON_sqxtun(auVar29._0_8_,auVar29,4);
          auVar33._0_8_ = CONCAT44((int)psVar14[5],(int)psVar14[4]);
          auVar33._8_4_ = (int)psVar14[6];
          auVar33._12_4_ = (int)psVar14[7];
                    /* try { // try from 00277f1c to 00377f23 has its CatchHandler @ 00277f30 */
          uVar31 = NEON_sqxtun(auVar33._0_8_,auVar33,4);
                    /* try { // try from 00277f24 to 00377f37 has its CatchHandler @ 00277e24 */
          puVar17[1] = uVar31;
          *puVar17 = uVar27;
          psVar14 = psVar15;
          puVar17 = puVar17 + 2;
                    /* catch() { ... } // from try @ 00277ea8 with catch @ 00277f30
                       catch() { ... } // from try @ 00277f1c with catch @ 00277f30 */
        } while (psVar15 != param_1 + ((ulong)uVar10 + 1) * 8);
      }
                    /* catch() { ... } // from try @ 00277e78 with catch @ 00277f34 */
                    /* try { // try from 00277f38 to 00377f3f has its CatchHandler @ 00277f48 */
      uVar2 = uVar9;
      if ((int)uVar9 < iVar6 + -3) {
                    /* try { // try from 00277f40 to 00377f4f has its CatchHandler @ 00277e24 */
        psVar14 = (short *)((long)param_5 + lVar23 + -0x40);
                    /* catch() { ... } // from try @ 00277f38 with catch @ 00277f48 */
                    /* catch() { ... } // from try @ 00277ed4 with catch @ 00277f4c */
        psVar15 = param_1 + lVar13;
        uVar2 = uVar4;
        if ((psVar14 < param_1 + lVar13 + 0x20 && psVar15 < (short *)((long)param_5 + lVar23)) ||
           (uVar11 + 1 < 3)) {
                    /* catch() { ... } // from try @ 00278240 with catch @ 002782b8 */
          do {
                    /* try { // try from 002782bc to 003782c3 has its CatchHandler @ 002782cc */
            sVar8 = psVar15[1];
            psVar3 = psVar15 + 4;
                    /* try { // try from 002782c4 to 003782cf has its CatchHandler @ 002781a8 */
                    /* catch() { ... } // from try @ 002782bc with catch @ 002782cc */
            sVar7 = *psVar15;
            if (sVar8 < 0) {
              sVar8 = 0;
            }
            psVar14[1] = sVar8;
            if (sVar7 < 0) {
              sVar7 = 0;
            }
            *psVar14 = sVar7;
            sVar8 = psVar15[3];
            sVar7 = psVar15[2];
            if (sVar8 < 0) {
              sVar8 = 0;
            }
            if (sVar7 < 0) {
              sVar7 = 0;
            }
            psVar14[3] = sVar8;
            psVar14[2] = sVar7;
            psVar15 = psVar3;
            psVar14 = psVar14 + 4;
          } while (psVar3 != param_1 + lVar13 + 4 + (ulong)uVar11 * 4);
        }
        else {
          uVar20 = uVar9;
          if (3 < uVar12) {
            uVar20 = 0;
            do {
              uVar20 = uVar20 + 1;
              auVar32._0_4_ = (int)*psVar15;
              auVar32._4_4_ = (int)psVar15[1];
              auVar32._8_4_ = (int)psVar15[2];
              auVar32._12_4_ = (int)psVar15[3];
              auVar28._0_4_ = (int)psVar15[4];
              auVar28._4_4_ = (int)psVar15[5];
              auVar28._8_4_ = (int)psVar15[6];
              auVar28._12_4_ = (int)psVar15[7];
              auVar33 = NEON_smax(auVar32,ZEXT816(0),4);
              auVar29 = NEON_smax(auVar28,ZEXT816(0),4);
              *(ulong *)(psVar14 + 4) =
                   CONCAT26(auVar29._12_2_,
                            CONCAT24(auVar29._8_2_,CONCAT22(auVar29._4_2_,auVar29._0_2_)));
              *(ulong *)psVar14 =
                   CONCAT26(auVar33._12_2_,
                            CONCAT24(auVar33._8_2_,CONCAT22(auVar33._4_2_,auVar33._0_2_)));
              psVar15 = psVar15 + 8;
              psVar14 = psVar14 + 8;
            } while (uVar20 < uVar1);
            uVar20 = uVar9 + uVar1 * 8;
            if (uVar11 + 1 == uVar1 * 2) goto LAB_00278000;
          }
          uVar16 = -(ulong)(uVar20 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar20 << 1;
          sVar7 = *(short *)((long)param_1 + uVar16);
          sVar8 = *(short *)((long)param_1 + uVar16 + 2);
          if (sVar8 < 0) {
            sVar8 = 0;
          }
          if (sVar7 < 0) {
            sVar7 = 0;
          }
          *(short *)((long)param_5 + uVar16) = sVar7;
          *(short *)((long)param_5 + uVar16 + 2) = sVar8;
          sVar8 = *(short *)((long)param_1 + uVar16 + 6);
          sVar7 = *(short *)((long)param_1 + uVar16 + 4);
          if (sVar8 < 0) {
            sVar8 = 0;
          }
          if (sVar7 < 0) {
            sVar7 = 0;
          }
          *(short *)((long)param_5 + uVar16 + 4) = sVar7;
          *(short *)((long)param_5 + uVar16 + 6) = sVar8;
        }
      }
LAB_00278000:
      uVar16 = (ulong)uVar2;
      if ((int)uVar2 < iVar6) {
        lVar21 = (long)(int)uVar2;
        uVar20 = iVar6 - uVar2;
        lVar24 = (lVar21 + 8) * 2;
        lVar26 = lVar24 + -0x10;
        psVar14 = param_1 + lVar21;
        psVar15 = (short *)((long)param_5 + lVar26);
        if ((psVar14 < (short *)((long)param_5 + lVar24) && psVar15 < param_1 + lVar21 + 8) ||
           (uVar20 < 0xb)) {
          lVar21 = 0;
          do {
            sVar8 = *(short *)((long)psVar14 + lVar21);
            if (sVar8 < 0) {
              sVar8 = 0;
            }
            *(short *)((long)psVar15 + lVar21) = sVar8;
            lVar21 = lVar21 + 2;
          } while (lVar21 != ((ulong)((iVar6 + -1) - uVar2) + 1) * 2);
        }
        else {
          uVar5 = -((uint)((ulong)psVar14 >> 1) & 7) & 7;
          if (uVar20 < uVar5) {
            uVar5 = uVar20;
          }
          if (uVar5 != 0) {
            lVar24 = lVar21 * 2;
            sVar8 = param_1[lVar21];
            if (sVar8 < 0) {
              sVar8 = 0;
            }
            *(short *)((long)param_5 + lVar24) = sVar8;
            if (uVar5 == 1) {
              uVar16 = (ulong)(uVar2 + 1);
            }
            else {
              uVar25 = uVar2 + 2;
              sVar8 = param_1[lVar21 + 1];
              if (sVar8 < 0) {
                sVar8 = 0;
              }
              *(short *)((long)param_5 + lVar24 + 2) = sVar8;
              if (uVar5 != 2) {
                uVar25 = uVar2 + 3;
                sVar8 = param_1[lVar21 + 2];
                if (sVar8 < 0) {
                  sVar8 = 0;
                }
                *(short *)((long)param_5 + lVar24 + 4) = sVar8;
                if (uVar5 != 3) {
                  uVar25 = uVar2 + 4;
                  sVar8 = param_1[lVar21 + 3];
                  if (sVar8 < 0) {
                    sVar8 = 0;
                  }
                  *(short *)((long)param_5 + lVar24 + 6) = sVar8;
                  if (uVar5 != 4) {
                    uVar25 = uVar2 + 5;
                    sVar8 = param_1[lVar21 + 4];
                    if (sVar8 < 0) {
                      sVar8 = 0;
                    }
                    *(short *)((long)param_5 + lVar24 + 8) = sVar8;
                    if (uVar5 != 5) {
                      uVar25 = uVar2 + 6;
                      sVar8 = param_1[lVar21 + 5];
                      if (sVar8 < 0) {
                        sVar8 = 0;
                      }
                      *(short *)((long)param_5 + lVar24 + 10) = sVar8;
                      if (uVar5 == 7) {
                        uVar16 = (ulong)(uVar2 + 7);
                        sVar8 = param_1[lVar21 + 6];
                        if (sVar8 < 0) {
                          sVar8 = 0;
                        }
                        *(short *)((long)param_5 + lVar24 + 0xc) = sVar8;
                        goto LAB_0027813c;
                      }
                    }
                  }
                }
              }
              uVar16 = (ulong)uVar25;
            }
          }
LAB_0027813c:
          uVar2 = ((uVar20 - uVar5) - 8 >> 3) + 1;
          iVar19 = uVar2 * 8;
          if (6 < (uVar20 - 1) - uVar5) {
            uVar25 = 0;
            puVar17 = (undefined8 *)((long)param_5 + lVar26 + (ulong)uVar5 * 2);
            psVar14 = param_1 + (ulong)uVar5 + lVar21;
            do {
              uVar25 = uVar25 + 1;
              auVar34._0_4_ = (int)*psVar14;
              auVar34._4_4_ = (int)psVar14[1];
              auVar34._8_4_ = (int)psVar14[2];
              auVar34._12_4_ = (int)psVar14[3];
              auVar30._0_4_ = (int)psVar14[4];
              auVar30._4_4_ = (int)psVar14[5];
              auVar30._8_4_ = (int)psVar14[6];
              auVar30._12_4_ = (int)psVar14[7];
              auVar33 = NEON_smax(auVar34,ZEXT816(0),4);
              auVar29 = NEON_smax(auVar30,ZEXT816(0),4);
              puVar17[1] = CONCAT26(auVar29._12_2_,
                                    CONCAT24(auVar29._8_2_,CONCAT22(auVar29._4_2_,auVar29._0_2_)));
              *puVar17 = CONCAT26(auVar33._12_2_,
                                  CONCAT24(auVar33._8_2_,CONCAT22(auVar33._4_2_,auVar33._0_2_)));
              puVar17 = puVar17 + 2;
              psVar14 = psVar14 + 8;
            } while (uVar25 < uVar2);
            uVar16 = (ulong)(uint)((int)uVar16 + iVar19);
            if (uVar20 - uVar5 == iVar19) goto LAB_0027827c;
          }
                    /* try { // try from 002781a8 to 0037823f has its CatchHandler @ 002781a8
                       catch() { ... } // from try @ 002781a8 with catch @ 002781a8
                       catch() { ... } // from try @ 00278254 with catch @ 002781a8
                       catch() { ... } // from try @ 002782c4 with catch @ 002781a8 */
          uVar18 = -(uVar16 >> 0x1f) & 0xfffffffe00000000 | uVar16 << 1;
          iVar19 = (int)uVar16;
          sVar8 = *(short *)((long)param_1 + uVar18);
          if (sVar8 < 0) {
            sVar8 = 0;
          }
          *(short *)((long)param_5 + uVar18) = sVar8;
          if (iVar19 + 1 < iVar6) {
            sVar8 = *(short *)((long)param_1 + uVar18 + 2);
            if (sVar8 < 0) {
              sVar8 = 0;
            }
            *(short *)((long)param_5 + uVar18 + 2) = sVar8;
            if (iVar19 + 2 < iVar6) {
              sVar8 = *(short *)((long)param_1 + uVar18 + 4);
              if (sVar8 < 0) {
                sVar8 = 0;
              }
              *(short *)((long)param_5 + uVar18 + 4) = sVar8;
              if (iVar19 + 3 < iVar6) {
                sVar8 = *(short *)((long)param_1 + uVar18 + 6);
                if (sVar8 < 0) {
                  sVar8 = 0;
                }
                *(short *)((long)param_5 + uVar18 + 6) = sVar8;
                if (iVar19 + 4 < iVar6) {
                  sVar8 = *(short *)((long)param_1 + uVar18 + 8);
                  if (sVar8 < 0) {
                    sVar8 = 0;
                  }
                    /* try { // try from 00278240 to 00378243 has its CatchHandler @ 002782b8 */
                  *(short *)((long)param_5 + uVar18 + 8) = sVar8;
                  if (iVar19 + 5 < iVar6) {
                    /* try { // try from 0027824c to 00378253 has its CatchHandler @ 002782b4 */
                    sVar8 = *(short *)((long)param_1 + uVar18 + 10);
                    /* try { // try from 00278254 to 003782bb has its CatchHandler @ 002781a8 */
                    if (sVar8 < 0) {
                      sVar8 = 0;
                    }
                    *(short *)((long)param_5 + uVar18 + 10) = sVar8;
                    if (iVar19 + 6 < iVar6) {
                      sVar8 = *(short *)((long)param_1 + uVar18 + 0xc);
                      if (sVar8 < 0) {
                        sVar8 = 0;
                      }
                      *(short *)((long)param_5 + uVar18 + 0xc) = sVar8;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0027827c:
      iVar22 = iVar22 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 00278350 (916 bytes) name=FUN_00278350

void FUN_00278350(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  short sVar8;
  short sVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  long lVar16;
  undefined8 *puVar17;
  int iVar18;
  undefined8 *puVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  uint uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  
  iVar22 = param_7[1];
  iVar7 = *param_7;
  if (iVar22 != 0) {
    uVar11 = iVar7 - 8U >> 3;
    iVar10 = (uVar11 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar10 = 0;
    }
    uVar13 = (iVar7 + -4) - iVar10;
    uVar12 = uVar13 >> 2;
    uVar1 = (uVar12 - 1 >> 1) + 1;
    iVar5 = iVar10 + 4 + uVar12 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar17 = (undefined8 *)(param_5 + 0x10);
        puVar19 = param_1;
        do {
          uVar25 = puVar19[1];
          uVar24 = *puVar19;
          puVar17[-1] = CONCAT44((int)(short)((ulong)uVar24 >> 0x30),
                                 (int)(short)((ulong)uVar24 >> 0x20));
          puVar17[-2] = CONCAT44((int)(short)((ulong)uVar24 >> 0x10),(int)(short)uVar24);
          puVar17[1] = CONCAT44((int)(short)((ulong)uVar25 >> 0x30),
                                (int)(short)((ulong)uVar25 >> 0x20));
          *puVar17 = CONCAT44((int)(short)((ulong)uVar25 >> 0x10),(int)(short)uVar25);
          puVar17 = puVar17 + 4;
          puVar19 = puVar19 + 2;
        } while (puVar17 != (undefined8 *)(param_5 + (ulong)uVar11 * 0x20 + 0x30));
      }
      iVar18 = iVar10;
      if (iVar10 < iVar7 + -3) {
        iVar2 = iVar10;
        iVar18 = iVar5;
        if (3 < uVar13) {
          uVar15 = 0;
          puVar17 = (undefined8 *)(param_5 + (long)iVar10 * 4);
          puVar19 = (undefined8 *)((long)param_1 + (long)iVar10 * 2);
          do {
            uVar25 = puVar19[1];
            uVar24 = *puVar19;
            uVar15 = uVar15 + 1;
            puVar17[1] = CONCAT44((int)(short)((ulong)uVar24 >> 0x30),
                                  (int)(short)((ulong)uVar24 >> 0x20));
            *puVar17 = CONCAT44((int)(short)((ulong)uVar24 >> 0x10),(int)(short)uVar24);
            puVar17[3] = CONCAT44((int)(short)((ulong)uVar25 >> 0x30),
                                  (int)(short)((ulong)uVar25 >> 0x20));
            puVar17[2] = CONCAT44((int)(short)((ulong)uVar25 >> 0x10),(int)(short)uVar25);
            puVar17 = puVar17 + 4;
            puVar19 = puVar19 + 2;
          } while (uVar15 < uVar1);
          iVar2 = iVar10 + uVar1 * 8;
          if (uVar12 + 1 == uVar1 * 2) goto LAB_002784a4;
        }
        lVar20 = (long)iVar2 * 2;
        lVar16 = (long)iVar2 * 4;
        lVar21 = param_5 + lVar16;
        sVar8 = *(short *)((long)param_1 + lVar20 + 2);
        sVar9 = *(short *)((long)param_1 + lVar20 + 6);
        *(int *)(param_5 + lVar16) = (int)*(short *)((long)param_1 + lVar20);
        *(int *)(lVar21 + 8) = (int)*(short *)((long)param_1 + lVar20 + 4);
        *(int *)(lVar21 + 4) = (int)sVar8;
        *(int *)(lVar21 + 0xc) = (int)sVar9;
      }
LAB_002784a4:
      if (iVar18 < iVar7) {
        lVar21 = (long)iVar18;
        uVar14 = iVar7 - iVar18;
        uVar15 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
        uVar6 = (ulong)uVar15;
        if (uVar14 < uVar15) {
          uVar6 = (ulong)uVar14;
        }
        if (uVar14 < 9) {
          uVar6 = (ulong)uVar14;
        }
        uVar15 = (uint)uVar6;
        if (uVar15 != 0) {
          *(int *)(param_5 + lVar21 * 4) = (int)*(short *)((long)param_1 + lVar21 * 2);
          iVar2 = iVar18 + 1;
          if (uVar15 != 1) {
            iVar3 = iVar18 + 2;
            *(int *)(param_5 + (long)iVar2 * 4) = (int)*(short *)((long)param_1 + (long)iVar2 * 2);
            iVar2 = iVar3;
            if (uVar15 != 2) {
              iVar2 = iVar18 + 3;
              *(int *)(param_5 + (long)iVar3 * 4) = (int)*(short *)((long)param_1 + (long)iVar3 * 2)
              ;
              if (uVar15 != 3) {
                iVar3 = iVar18 + 4;
                *(int *)(param_5 + (long)iVar2 * 4) =
                     (int)*(short *)((long)param_1 + (long)iVar2 * 2);
                iVar2 = iVar3;
                if (uVar15 != 4) {
                  iVar2 = iVar18 + 5;
                  *(int *)(param_5 + (long)iVar3 * 4) =
                       (int)*(short *)((long)param_1 + (long)iVar3 * 2);
                  if (uVar15 != 5) {
                    iVar3 = iVar18 + 6;
                    *(int *)(param_5 + (long)iVar2 * 4) =
                         (int)*(short *)((long)param_1 + (long)iVar2 * 2);
                    iVar2 = iVar3;
                    if (uVar15 != 6) {
                      iVar2 = iVar18 + 7;
                      *(int *)(param_5 + (long)iVar3 * 4) =
                           (int)*(short *)((long)param_1 + (long)iVar3 * 2);
                      if (uVar15 == 8) {
                        *(int *)(param_5 + (long)iVar2 * 4) =
                             (int)*(short *)((long)param_1 + (long)iVar2 * 2);
                        iVar2 = iVar18 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar18 = iVar2;
          if (uVar15 == uVar14) goto LAB_0027869c;
        }
        uVar4 = ((uVar14 - uVar15) - 8 >> 3) + 1;
        iVar2 = uVar4 * 8;
        if (6 < (uVar14 - 1) - uVar15) {
          uVar23 = 0;
          puVar17 = (undefined8 *)((long)param_1 + (uVar6 + lVar21) * 2);
          puVar19 = (undefined8 *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar25 = puVar17[1];
            uVar24 = *puVar17;
            uVar23 = uVar23 + 1;
            puVar19[1] = CONCAT44((int)(short)((ulong)uVar24 >> 0x30),
                                  (int)(short)((ulong)uVar24 >> 0x20));
            *puVar19 = CONCAT44((int)(short)((ulong)uVar24 >> 0x10),(int)(short)uVar24);
            puVar19[3] = CONCAT44((int)(short)((ulong)uVar25 >> 0x30),
                                  (int)(short)((ulong)uVar25 >> 0x20));
            puVar19[2] = CONCAT44((int)(short)((ulong)uVar25 >> 0x10),(int)(short)uVar25);
            puVar17 = puVar17 + 2;
            puVar19 = puVar19 + 4;
          } while (uVar23 < uVar4);
          iVar18 = iVar18 + iVar2;
          if (iVar2 == uVar14 - uVar15) goto LAB_0027869c;
        }
        iVar2 = iVar18 + 1;
        *(int *)(param_5 + (long)iVar18 * 4) = (int)*(short *)((long)param_1 + (long)iVar18 * 2);
        if (iVar2 < iVar7) {
          iVar3 = iVar18 + 2;
          *(int *)(param_5 + (long)iVar2 * 4) = (int)*(short *)((long)param_1 + (long)iVar2 * 2);
          if (iVar3 < iVar7) {
            iVar2 = iVar18 + 3;
            *(int *)(param_5 + (long)iVar3 * 4) = (int)*(short *)((long)param_1 + (long)iVar3 * 2);
            if (iVar2 < iVar7) {
              iVar3 = iVar18 + 4;
              *(int *)(param_5 + (long)iVar2 * 4) = (int)*(short *)((long)param_1 + (long)iVar2 * 2)
              ;
              if (iVar3 < iVar7) {
                iVar2 = iVar18 + 5;
                *(int *)(param_5 + (long)iVar3 * 4) =
                     (int)*(short *)((long)param_1 + (long)iVar3 * 2);
                if (iVar2 < iVar7) {
                  iVar18 = iVar18 + 6;
                  *(int *)(param_5 + (long)iVar2 * 4) =
                       (int)*(short *)((long)param_1 + (long)iVar2 * 2);
                  if (iVar18 < iVar7) {
                    *(int *)(param_5 + (long)iVar18 * 4) =
                         (int)*(short *)((long)param_1 + (long)iVar18 * 2);
                  }
                }
              }
            }
          }
        }
      }
LAB_0027869c:
      iVar22 = iVar22 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 002786e4 (1016 bytes) name=FUN_002786e4

void FUN_002786e4(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  int iVar7;
  short sVar8;
  short sVar9;
  short sVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  long lVar18;
  short *psVar19;
  int iVar20;
  long lVar21;
  uint uVar22;
  int iVar23;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  
  iVar23 = param_7[1];
  iVar7 = *param_7;
  if (iVar23 != 0) {
    uVar12 = iVar7 - 8U >> 3;
    iVar11 = (uVar12 + 1) * 8;
    if (iVar7 + -7 < 1) {
      iVar11 = 0;
    }
    uVar14 = (iVar7 + -4) - iVar11;
    uVar13 = uVar14 >> 2;
    uVar1 = (uVar13 - 1 >> 1) + 1;
                    /* try { // try from 00278760 to 00378a03 has its CatchHandler @ 00278760
                       catch() { ... } // from try @ 00278760 with catch @ 00278760
                       catch() { ... } // from try @ 00278a18 with catch @ 00278760
                       catch() { ... } // from try @ 00278a90 with catch @ 00278760 */
    iVar5 = iVar11 + 4 + uVar13 * 4;
    do {
      if (0 < iVar7 + -7) {
        puVar17 = (undefined8 *)(param_5 + 0x10);
        psVar19 = param_1;
        do {
          auVar24._0_4_ = (int)*psVar19;
          auVar24._4_4_ = (int)psVar19[1];
          auVar24._8_4_ = (int)psVar19[2];
          auVar24._12_4_ = (int)psVar19[3];
          auVar24 = NEON_scvtf(auVar24,4);
          auVar27._0_4_ = (int)psVar19[4];
          auVar27._4_4_ = (int)psVar19[5];
          auVar27._8_4_ = (int)psVar19[6];
          auVar27._12_4_ = (int)psVar19[7];
          auVar27 = NEON_scvtf(auVar27,4);
          puVar17[-1] = auVar24._8_8_;
          puVar17[-2] = auVar24._0_8_;
          puVar17[1] = auVar27._8_8_;
          *puVar17 = auVar27._0_8_;
          puVar17 = puVar17 + 4;
          psVar19 = psVar19 + 8;
        } while (puVar17 != (undefined8 *)(param_5 + (ulong)uVar12 * 0x20 + 0x30));
      }
      iVar20 = iVar11;
      if (iVar11 < iVar7 + -3) {
        iVar2 = iVar11;
        iVar20 = iVar5;
        if (3 < uVar14) {
          uVar16 = 0;
          puVar17 = (undefined8 *)(param_5 + (long)iVar11 * 4);
          psVar19 = param_1 + iVar11;
          do {
            uVar16 = uVar16 + 1;
            auVar28._0_4_ = (int)*psVar19;
            auVar28._4_4_ = (int)psVar19[1];
            auVar28._8_4_ = (int)psVar19[2];
            auVar28._12_4_ = (int)psVar19[3];
            auVar25._0_4_ = (int)psVar19[4];
            auVar25._4_4_ = (int)psVar19[5];
            auVar25._8_4_ = (int)psVar19[6];
            auVar25._12_4_ = (int)psVar19[7];
            auVar27 = NEON_scvtf(auVar28,4);
            auVar24 = NEON_scvtf(auVar25,4);
            puVar17[1] = auVar27._8_8_;
            *puVar17 = auVar27._0_8_;
            puVar17[3] = auVar24._8_8_;
            puVar17[2] = auVar24._0_8_;
            puVar17 = puVar17 + 4;
            psVar19 = psVar19 + 8;
          } while (uVar16 < uVar1);
          iVar2 = iVar11 + uVar1 * 8;
          if (uVar13 + 1 == uVar1 * 2) goto LAB_00278858;
        }
        lVar18 = (long)iVar2;
        lVar21 = param_5 + lVar18 * 4;
        sVar8 = param_1[lVar18 + 1];
        sVar9 = param_1[lVar18 + 3];
        sVar10 = param_1[lVar18 + 2];
        *(float *)(param_5 + lVar18 * 4) = (float)(int)param_1[lVar18];
        *(float *)(lVar21 + 4) = (float)(int)sVar8;
        *(float *)(lVar21 + 0xc) = (float)(int)sVar9;
        *(float *)(lVar21 + 8) = (float)(int)sVar10;
      }
LAB_00278858:
      if (iVar20 < iVar7) {
        lVar21 = (long)iVar20;
        uVar15 = iVar7 - iVar20;
        uVar16 = -((uint)((ulong)(param_5 + lVar21 * 4) >> 2) & 3) & 3;
        uVar6 = (ulong)uVar16;
        if (uVar15 < uVar16) {
          uVar6 = (ulong)uVar15;
        }
        if (uVar15 < 9) {
          uVar6 = (ulong)uVar15;
        }
        uVar16 = (uint)uVar6;
        if (uVar16 != 0) {
          iVar2 = iVar20 + 1;
          *(float *)(param_5 + lVar21 * 4) = (float)(int)param_1[lVar21];
          if (uVar16 != 1) {
            iVar3 = iVar20 + 2;
            *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
            iVar2 = iVar3;
            if (uVar16 != 2) {
              iVar2 = iVar20 + 3;
              *(float *)(param_5 + (long)iVar3 * 4) = (float)(int)param_1[iVar3];
              if (uVar16 != 3) {
                iVar3 = iVar20 + 4;
                *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
                iVar2 = iVar3;
                if (uVar16 != 4) {
                  iVar2 = iVar20 + 5;
                  *(float *)(param_5 + (long)iVar3 * 4) = (float)(int)param_1[iVar3];
                  if (uVar16 != 5) {
                    iVar3 = iVar20 + 6;
                    *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
                    iVar2 = iVar3;
                    if (uVar16 != 6) {
                      iVar2 = iVar20 + 7;
                      *(float *)(param_5 + (long)iVar3 * 4) = (float)(int)param_1[iVar3];
                      if (uVar16 == 8) {
                        *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
                        iVar2 = iVar20 + 8;
                      }
                    }
                  }
                }
              }
            }
          }
          iVar20 = iVar2;
          if (uVar16 == uVar15) goto LAB_00278a94;
        }
        uVar4 = ((uVar15 - uVar16) - 8 >> 3) + 1;
        iVar2 = uVar4 * 8;
        if (6 < (uVar15 - 1) - uVar16) {
          uVar22 = 0;
          psVar19 = param_1 + uVar6 + lVar21;
          puVar17 = (undefined8 *)(param_5 + (uVar6 + lVar21) * 4);
          do {
            uVar22 = uVar22 + 1;
            auVar29._0_4_ = (int)*psVar19;
            auVar29._4_4_ = (int)psVar19[1];
            auVar29._8_4_ = (int)psVar19[2];
            auVar29._12_4_ = (int)psVar19[3];
            auVar26._0_4_ = (int)psVar19[4];
            auVar26._4_4_ = (int)psVar19[5];
            auVar26._8_4_ = (int)psVar19[6];
            auVar26._12_4_ = (int)psVar19[7];
            auVar27 = NEON_scvtf(auVar29,4);
            auVar24 = NEON_scvtf(auVar26,4);
            puVar17[1] = auVar27._8_8_;
            *puVar17 = auVar27._0_8_;
            puVar17[3] = auVar24._8_8_;
            puVar17[2] = auVar24._0_8_;
            psVar19 = psVar19 + 8;
            puVar17 = puVar17 + 4;
          } while (uVar22 < uVar4);
          iVar20 = iVar20 + iVar2;
          if (iVar2 == uVar15 - uVar16) goto LAB_00278a94;
        }
        iVar2 = iVar20 + 1;
        *(float *)(param_5 + (long)iVar20 * 4) = (float)(int)param_1[iVar20];
        if (iVar2 < iVar7) {
          iVar3 = iVar20 + 2;
                    /* try { // try from 00278a04 to 00378a0b has its CatchHandler @ 00278a84 */
          *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
                    /* try { // try from 00278a10 to 00378a17 has its CatchHandler @ 00278a80 */
          if (iVar3 < iVar7) {
                    /* try { // try from 00278a18 to 00378a87 has its CatchHandler @ 00278760 */
            iVar2 = iVar20 + 3;
            *(float *)(param_5 + (long)iVar3 * 4) = (float)(int)param_1[iVar3];
            if (iVar2 < iVar7) {
              iVar3 = iVar20 + 4;
              *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
              if (iVar3 < iVar7) {
                iVar2 = iVar20 + 5;
                *(float *)(param_5 + (long)iVar3 * 4) = (float)(int)param_1[iVar3];
                if (iVar2 < iVar7) {
                  iVar20 = iVar20 + 6;
                  *(float *)(param_5 + (long)iVar2 * 4) = (float)(int)param_1[iVar2];
                    /* catch() { ... } // from try @ 00278a10 with catch @ 00278a80 */
                  if (iVar20 < iVar7) {
                    /* catch() { ... } // from try @ 00278a04 with catch @ 00278a84 */
                    /* try { // try from 00278a88 to 00378a8f has its CatchHandler @ 00278a98 */
                    /* try { // try from 00278a90 to 00378a9b has its CatchHandler @ 00278760 */
                    *(float *)(param_5 + (long)iVar20 * 4) = (float)(int)param_1[iVar20];
                  }
                }
              }
            }
          }
        }
      }
LAB_00278a94:
      iVar23 = iVar23 + -1;
                    /* catch() { ... } // from try @ 00278a88 with catch @ 00278a98 */
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar23 != 0);
  }
  return;
}


==================================================================

### FUNC 00278adc (464 bytes) name=FUN_00278adc

void FUN_00278adc(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 (*pauVar1) [16];
  undefined1 *puVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 (*pauVar11) [16];
  undefined1 *puVar12;
  uint *puVar13;
  long lVar14;
  undefined8 *puVar15;
  int iVar16;
  int iVar17;
  long lVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  iVar17 = param_7[1];
  iVar3 = *param_7;
  if (iVar17 != 0) {
    uVar7 = iVar3 - 0x10U >> 4;
    iVar6 = (uVar7 + 1) * 0x10;
    if (iVar3 + -0xf < 1) {
      iVar6 = 0;
    }
    uVar8 = (uint)((iVar3 + -4) - iVar6) >> 2;
    lVar18 = (long)iVar6;
    do {
                    /* try { // try from 00278b4c to 00378c53 has its CatchHandler @ 00278b4c
                       catch(type#1 @ 00000000) { ... } // from try @ 00278b4c with catch @ 00278b4c
                       catch(type#1 @ 00000000) { ... } // from try @ 00278c5c with catch @ 00278b4c
                       catch(type#1 @ 00000000) { ... } // from try @ 00278d38 with catch @ 00278b4c
                        */
      if (0 < iVar3 + -0xf) {
        pauVar11 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar15 = param_5;
        do {
          pauVar1 = pauVar11 + 4;
          uVar19 = NEON_sqxtun(*(undefined8 *)*pauVar11,*pauVar11,4);
          uVar22 = NEON_sqxtun(*(undefined8 *)pauVar11[-1],pauVar11[-1],4);
          uVar20 = NEON_sqxtun(*(undefined8 *)pauVar11[2],pauVar11[2],4);
          uVar21 = NEON_sqxtun(*(undefined8 *)pauVar11[1],pauVar11[1],4);
          auVar10._8_8_ = uVar19;
          auVar10._0_8_ = uVar22;
          uVar22 = NEON_uqxtn(uVar22,auVar10,2);
          auVar9._8_8_ = uVar20;
          auVar9._0_8_ = uVar21;
          uVar19 = NEON_uqxtn(uVar21,auVar9,2);
          puVar15[1] = uVar19;
          *puVar15 = uVar22;
          pauVar11 = pauVar1;
          puVar15 = puVar15 + 2;
        } while (pauVar1 != (undefined1 (*) [16])(param_1 + (ulong)uVar7 * 0x40 + 0x50));
      }
      iVar16 = iVar6;
      if (iVar6 < iVar3 + -3) {
        puVar12 = (undefined1 *)((long)param_5 + lVar18);
        puVar13 = (uint *)(param_1 + lVar18 * 4);
        do {
          uVar4 = *puVar13;
          puVar2 = puVar12 + 4;
          uVar5 = puVar13[1];
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          *puVar12 = (char)uVar4;
          puVar12[1] = (char)uVar5;
          uVar4 = puVar13[2];
          uVar5 = puVar13[3];
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          if (0xff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          puVar12[2] = (char)uVar4;
          puVar12[3] = (char)uVar5;
          puVar12 = puVar2;
          puVar13 = puVar13 + 4;
          iVar16 = iVar6 + 4 + uVar8 * 4;
        } while (puVar2 != (undefined1 *)((long)param_5 + lVar18 + 4 + (ulong)uVar8 * 4));
      }
      if (iVar16 < iVar3) {
                    /* try { // try from 00278c54 to 00378c5b has its CatchHandler @ 00278d98 */
        lVar14 = 0;
                    /* try { // try from 00278c5c to 00378d27 has its CatchHandler @ 00278b4c */
        do {
          uVar4 = *(uint *)(param_1 + (long)iVar16 * 4 + lVar14 * 4);
          if (0xff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          *(char *)((long)param_5 + lVar14 + iVar16) = (char)uVar4;
          lVar14 = lVar14 + 1;
        } while (lVar14 != (ulong)(uint)((iVar3 + -1) - iVar16) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 00278cac (520 bytes) name=FUN_00278cac

void FUN_00278cac(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 (*pauVar1) [16];
  undefined1 *puVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 (*pauVar10) [16];
  undefined1 *puVar11;
  long lVar12;
  int *piVar13;
  undefined8 *puVar14;
  undefined1 uVar15;
  undefined1 uVar16;
  undefined1 uVar17;
  int iVar18;
  undefined1 uVar19;
  int iVar20;
  long lVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  
  iVar20 = param_7[1];
  iVar3 = *param_7;
  if (iVar20 != 0) {
    uVar6 = iVar3 - 0x10U >> 4;
    iVar5 = (uVar6 + 1) * 0x10;
    if (iVar3 + -0xf < 1) {
      iVar5 = 0;
    }
    uVar7 = (uint)((iVar3 + -4) - iVar5) >> 2;
    lVar21 = (long)iVar5;
    do {
                    /* try { // try from 00278d28 to 00378d37 has its CatchHandler @ 00278d84 */
      if (0 < iVar3 + -0xf) {
                    /* try { // try from 00278d38 to 00378d9b has its CatchHandler @ 00278b4c */
        pauVar10 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar14 = param_5;
        do {
          pauVar1 = pauVar10 + 4;
          uVar22 = NEON_sqxtn(*(undefined8 *)*pauVar10,*pauVar10,4);
          uVar25 = NEON_sqxtn(*(undefined8 *)pauVar10[-1],pauVar10[-1],4);
          uVar23 = NEON_sqxtn(*(undefined8 *)pauVar10[2],pauVar10[2],4);
          uVar24 = NEON_sqxtn(*(undefined8 *)pauVar10[1],pauVar10[1],4);
          auVar9._8_8_ = uVar22;
          auVar9._0_8_ = uVar25;
          uVar25 = NEON_sqxtn(uVar25,auVar9,2);
          auVar8._8_8_ = uVar23;
          auVar8._0_8_ = uVar24;
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00278d28 with catch @ 00278d84
                        */
          uVar22 = NEON_sqxtn(uVar24,auVar8,2);
          puVar14[1] = uVar22;
          *puVar14 = uVar25;
          pauVar10 = pauVar1;
          puVar14 = puVar14 + 2;
        } while (pauVar1 != (undefined1 (*) [16])(param_1 + (ulong)uVar6 * 0x40 + 0x50));
      }
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00278c54 with catch @ 00278d98
                        */
      uVar15 = 0x80;
      uVar16 = 0x7f;
      iVar18 = iVar5;
      if (iVar5 < iVar3 + -3) {
        piVar13 = (int *)(param_1 + lVar21 * 4);
        puVar11 = (undefined1 *)((long)param_5 + lVar21);
        do {
          iVar18 = *piVar13;
          uVar19 = (char)iVar18;
          if ((0xff < iVar18 + 0x80U) && (uVar19 = uVar16, iVar18 < 1)) {
            uVar19 = uVar15;
          }
          iVar18 = piVar13[1];
          uVar17 = (char)iVar18;
          if ((0xff < iVar18 + 0x80U) && (uVar17 = uVar16, iVar18 < 1)) {
            uVar17 = uVar15;
          }
          *puVar11 = uVar19;
          puVar11[1] = uVar17;
          iVar18 = piVar13[2];
          uVar19 = (char)iVar18;
          if ((0xff < iVar18 + 0x80U) && (uVar19 = 0x7f, iVar18 < 1)) {
            uVar19 = 0x80;
          }
          iVar18 = piVar13[3];
          piVar13 = piVar13 + 4;
          uVar17 = (char)iVar18;
          if ((0xff < iVar18 + 0x80U) && (uVar17 = 0x7f, iVar18 < 1)) {
            uVar17 = 0x80;
          }
          puVar11[2] = uVar19;
          puVar2 = puVar11 + 4;
          puVar11[3] = uVar17;
          puVar11 = puVar2;
          iVar18 = iVar5 + 4 + uVar7 * 4;
        } while (puVar2 != (undefined1 *)((long)param_5 + lVar21 + 4 + (ulong)uVar7 * 4));
      }
      if (iVar18 < iVar3) {
        lVar12 = 0;
        do {
          iVar4 = *(int *)(param_1 + (long)iVar18 * 4 + lVar12 * 4);
          uVar19 = (char)iVar4;
          if ((0xff < iVar4 + 0x80U) && (uVar19 = uVar16, iVar4 < 1)) {
            uVar19 = uVar15;
          }
          *(undefined1 *)((long)param_5 + lVar12 + iVar18) = uVar19;
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar3 + -1) - iVar18) + 1);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 00278eb4 (452 bytes) name=FUN_00278eb4

void FUN_00278eb4(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint *puVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined1 auVar10 [16];
  undefined1 *puVar11;
  undefined1 (*pauVar12) [16];
  uint *puVar13;
  undefined8 *puVar14;
  undefined2 *puVar15;
  long lVar16;
  undefined1 (*pauVar17) [16];
  int iVar18;
  int iVar19;
  long lVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  iVar19 = param_7[1];
  iVar2 = *param_7;
  if (iVar19 != 0) {
    uVar8 = iVar2 - 8U >> 3;
    iVar7 = (uVar8 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar7 = 0;
    }
    uVar9 = (uint)((iVar2 + -4) - iVar7) >> 2;
    lVar20 = (long)iVar7;
    do {
      if (0 < iVar2 + -7) {
        pauVar12 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar14 = param_5;
        do {
          pauVar17 = pauVar12 + -1;
          puVar11 = *pauVar12;
          auVar10 = *pauVar12;
          pauVar12 = pauVar12 + 2;
          uVar21 = NEON_sqxtun(*(undefined8 *)puVar11,auVar10,4);
          uVar22 = NEON_sqxtun(*(undefined8 *)*pauVar17,*pauVar17,4);
          puVar14[1] = uVar21;
          *puVar14 = uVar22;
          puVar14 = puVar14 + 2;
        } while (pauVar12 != (undefined1 (*) [16])(param_1 + (ulong)uVar8 * 0x20 + 0x30));
      }
      iVar18 = iVar7;
      if (iVar7 < iVar2 + -3) {
        puVar13 = (uint *)(param_1 + lVar20 * 4);
        puVar15 = (undefined2 *)((long)param_5 + lVar20 * 2);
        do {
          uVar3 = *puVar13;
          puVar1 = puVar13 + 4;
          uVar4 = puVar13[1];
          uVar5 = puVar13[2];
          if (0xffff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          uVar6 = puVar13[3];
          if (0xffff < uVar4) {
            uVar4 = -(uint)(0 < (int)uVar4);
          }
          *puVar15 = (short)uVar3;
          if (0xffff < uVar5) {
            uVar5 = -(uint)(0 < (int)uVar5);
          }
          if (0xffff < uVar6) {
            uVar6 = -(uint)(0 < (int)uVar6);
          }
          puVar15[1] = (short)uVar4;
          puVar15[2] = (short)uVar5;
          puVar15[3] = (short)uVar6;
          puVar13 = puVar1;
          puVar15 = puVar15 + 4;
          iVar18 = iVar7 + 4 + uVar9 * 4;
        } while (puVar1 != (uint *)(param_1 + (lVar20 + 4 + (ulong)uVar9 * 4) * 4));
      }
      if (iVar18 < iVar2) {
        lVar16 = 0;
        do {
          uVar3 = *(uint *)(param_1 + (long)iVar18 * 4 + lVar16 * 4);
          if (0xffff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          *(short *)((long)param_5 + lVar16 * 2 + (long)iVar18 * 2) = (short)uVar3;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar2 + -1) - iVar18) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 00279078 (500 bytes) name=FUN_00279078

void FUN_00279078(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 *puVar7;
  long lVar8;
  undefined1 (*pauVar9) [16];
  int *piVar10;
  long lVar11;
  undefined8 *puVar12;
  undefined2 *puVar13;
  undefined1 (*pauVar14) [16];
  undefined2 uVar15;
  undefined2 uVar16;
  undefined2 uVar17;
  int iVar18;
  undefined2 uVar19;
  int iVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  iVar20 = param_7[1];
  iVar1 = *param_7;
  if (iVar20 != 0) {
    uVar4 = iVar1 - 8U >> 3;
                    /* try { // try from 002790ac to 0037915f has its CatchHandler @ 002790ac
                       catch() { ... } // from try @ 002790ac with catch @ 002790ac
                       catch() { ... } // from try @ 00279170 with catch @ 002790ac
                       catch() { ... } // from try @ 00279328 with catch @ 002790ac
                       catch() { ... } // from try @ 002793ac with catch @ 002790ac
                       catch() { ... } // from try @ 002793bc with catch @ 002790ac */
    iVar3 = (uVar4 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar3 = 0;
    }
    uVar5 = (uint)((iVar1 + -4) - iVar3) >> 2;
    lVar8 = (long)iVar3;
    do {
      if (0 < iVar1 + -7) {
        pauVar9 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar12 = param_5;
        do {
          pauVar14 = pauVar9 + -1;
          puVar7 = *pauVar9;
          auVar6 = *pauVar9;
          pauVar9 = pauVar9 + 2;
          uVar21 = NEON_sqxtn(*(undefined8 *)puVar7,auVar6,4);
          uVar22 = NEON_sqxtn(*(undefined8 *)*pauVar14,*pauVar14,4);
          puVar12[1] = uVar21;
          *puVar12 = uVar22;
          puVar12 = puVar12 + 2;
        } while (pauVar9 != (undefined1 (*) [16])(param_1 + (ulong)uVar4 * 0x20 + 0x30));
      }
      uVar15 = 0x8000;
      uVar16 = 0x7fff;
      iVar18 = iVar3;
      if (iVar3 < iVar1 + -3) {
        piVar10 = (int *)(param_1 + lVar8 * 4);
        puVar13 = (undefined2 *)((long)param_5 + lVar8 * 2);
        do {
                    /* try { // try from 00279160 to 0037916f has its CatchHandler @ 002793c4 */
          iVar18 = *piVar10;
                    /* try { // try from 00279170 to 003792ff has its CatchHandler @ 002790ac */
          uVar19 = (short)iVar18;
          if ((0xffff < iVar18 + 0x8000U) && (uVar19 = uVar16, iVar18 < 1)) {
            uVar19 = uVar15;
          }
          iVar18 = piVar10[1];
          uVar17 = (short)iVar18;
          if ((0xffff < iVar18 + 0x8000U) && (uVar17 = uVar16, iVar18 < 1)) {
            uVar17 = uVar15;
          }
          iVar18 = piVar10[2];
          *puVar13 = uVar19;
          puVar13[1] = uVar17;
          uVar19 = (short)iVar18;
          if ((0xffff < iVar18 + 0x8000U) && (uVar19 = 0x7fff, iVar18 < 1)) {
            uVar19 = 0x8000;
          }
          iVar18 = piVar10[3];
          piVar10 = piVar10 + 4;
          uVar17 = (short)iVar18;
          if ((0xffff < iVar18 + 0x8000U) && (uVar17 = 0x7fff, iVar18 < 1)) {
            uVar17 = 0x8000;
          }
          puVar13[2] = uVar19;
          puVar13[3] = uVar17;
          puVar13 = puVar13 + 4;
          iVar18 = iVar3 + 4 + uVar5 * 4;
        } while (piVar10 != (int *)(param_1 + (lVar8 + 4 + (ulong)uVar5 * 4) * 4));
      }
      if (iVar18 < iVar1) {
        lVar11 = 0;
        do {
          iVar2 = *(int *)(param_1 + (long)iVar18 * 4 + lVar11 * 4);
          uVar19 = (short)iVar2;
          if ((0xffff < iVar2 + 0x8000U) && (uVar19 = uVar16, iVar2 < 1)) {
            uVar19 = uVar15;
          }
          *(undefined2 *)((long)param_5 + lVar11 * 2 + (long)iVar18 * 2) = uVar19;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar1 + -1) - iVar18) + 1);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 0027926c (844 bytes) name=FUN_0027926c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027926c(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  short sVar13;
  long lVar14;
  undefined8 *puVar15;
  float *pfVar16;
  undefined2 *puVar17;
  int iVar18;
  undefined1 (*pauVar19) [16];
  float fVar20;
  undefined8 uVar21;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  
  iVar18 = param_7[1];
  iVar1 = *param_7;
  if (iVar18 != 0) {
    uVar3 = iVar1 - 8U >> 3;
                    /* try { // try from 00279300 to 0037930f has its CatchHandler @ 00279370 */
    iVar2 = (uVar3 + 1) * 8;
                    /* try { // try from 00279314 to 00379327 has its CatchHandler @ 00279360 */
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
                    /* try { // try from 00279328 to 0037939f has its CatchHandler @ 002790ac */
    lVar14 = (long)iVar2;
    uVar4 = (uint)((iVar1 + -4) - iVar2) >> 2;
    do {
                    /* catch() { ... } // from try @ 00279314 with catch @ 00279360 */
      if (0 < iVar1 + -7) {
                    /* catch() { ... } // from try @ 00279300 with catch @ 00279370 */
        pauVar19 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar15 = param_5;
        do {
                    /* catch() { ... } // from try @ 00279160 with catch @ 002793c4 */
          uVar21 = *(undefined8 *)(pauVar19[-1] + 8);
          uVar5 = *(undefined8 *)pauVar19[-1];
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar23 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar23._8_8_;
            _DAT_00531e90 = auVar23._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            auVar23 = *pauVar19;
            fVar20 = (float)_DAT_00531e90;
            fVar25 = (float)((ulong)_DAT_00531e90 >> 0x20);
            fVar26 = (float)uRam0000000000531e98;
            fVar27 = (float)((ulong)uRam0000000000531e98 >> 0x20);
          }
          else {
            auVar23 = *pauVar19;
            fVar20 = (float)_DAT_00531e90;
            fVar25 = (float)((ulong)_DAT_00531e90 >> 0x20);
            fVar26 = (float)uRam0000000000531e98;
            fVar27 = (float)((ulong)uRam0000000000531e98 >> 0x20);
          }
          iVar6 = (int)((float)((ulong)uVar5 >> 0x20) + fVar25);
          iVar7 = (int)((float)uVar5 + fVar20);
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          pauVar19 = pauVar19 + 2;
          auVar24._4_4_ = iVar6;
          auVar24._0_4_ = iVar7;
          auVar24._8_4_ = (int)((float)uVar21 + fVar26);
          auVar24._12_4_ = (int)((float)((ulong)uVar21 >> 0x20) + fVar27);
          uVar5 = NEON_uqxtn(CONCAT44(iVar6,iVar7),auVar24,4);
                    /* try { // try from 002793a0 to 003793ab has its CatchHandler @ 002793b4 */
                    /* try { // try from 002793ac to 003793b7 has its CatchHandler @ 002790ac */
          auVar22._0_8_ =
               CONCAT44((int)(auVar23._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                        (int)(auVar23._0_4_ + (float)_DAT_00531e90));
          auVar22._8_4_ = (int)(auVar23._8_4_ + (float)uRam0000000000531e98);
          auVar22._12_4_ = (int)(auVar23._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
                    /* catch() { ... } // from try @ 002793a0 with catch @ 002793b4 */
          uVar21 = NEON_uqxtn(auVar22._0_8_,auVar22,4);
                    /* try { // try from 002793b8 to 003793bb has its CatchHandler @ 002793c0 */
                    /* try { // try from 002793bc to 003793d7 has its CatchHandler @ 002790ac */
          puVar15[1] = uVar21;
          *puVar15 = uVar5;
          puVar15 = puVar15 + 2;
                    /* catch() { ... } // from try @ 002793b8 with catch @ 002793c0 */
        } while (pauVar19 != (undefined1 (*) [16])(param_1 + (ulong)uVar3 * 0x20 + 0x30));
      }
      iVar7 = iVar2;
      if (iVar2 < iVar1 + -3) {
        pfVar16 = (float *)(param_1 + lVar14 * 4);
        puVar17 = (undefined2 *)((long)param_5 + lVar14 * 2);
        do {
          lVar11 = lrintf(*pfVar16);
          uVar9 = (uint)lVar11;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(pfVar16[1]);
          uVar10 = (uint)lVar11;
          if (0xffff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          fVar20 = pfVar16[2];
          *puVar17 = (short)uVar9;
          puVar17[1] = (short)uVar10;
          lVar11 = lrintf(fVar20);
          uVar9 = (uint)lVar11;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(pfVar16[3]);
          uVar10 = (uint)lVar11;
          if (0xffff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          pfVar16 = pfVar16 + 4;
          puVar17[2] = (short)uVar9;
          puVar17[3] = (short)uVar10;
          puVar17 = puVar17 + 4;
          iVar7 = iVar2 + 4 + uVar4 * 4;
        } while (pfVar16 != (float *)(param_1 + (lVar14 + 4 + (ulong)uVar4 * 4) * 4));
      }
      if (iVar7 < iVar1) {
        lVar11 = 0;
        do {
          lVar12 = lrintf(*(float *)(param_1 + (long)iVar7 * 4 + lVar11 * 4));
          sVar13 = (short)lVar12;
          if (0xffff < (uint)lVar12) {
            sVar13 = -(ushort)(0 < (int)(uint)lVar12);
          }
          *(short *)((long)param_5 + lVar11 * 2 + (long)iVar7 * 2) = sVar13;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar1 + -1) - iVar7) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 002795b8 (908 bytes) name=FUN_002795b8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002795b8(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined8 uVar7;
  undefined1 auVar8 [16];
  undefined8 uVar9;
  float *pfVar10;
  float *pfVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  float *pfVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  char cVar19;
  undefined8 *puVar20;
  undefined1 *puVar21;
  int iVar22;
  undefined8 *puVar23;
  float *pfVar24;
  long lVar25;
  undefined1 auVar27 [16];
  undefined8 uVar26;
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  undefined4 uVar35;
  undefined4 uVar36;
  int iVar37;
  
  iVar22 = param_7[1];
  iVar2 = *param_7;
  fVar33 = (float)*param_8;
  fVar34 = (float)param_8[1];
  if (iVar22 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar18 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar25 = NEON_shl(lVar18,2);
    do {
      if (0 < iVar2 + -7) {
        puVar23 = (undefined8 *)(param_1 + 0x10);
        puVar20 = param_5;
        do {
          uVar7 = puVar23[1];
          uVar26 = *puVar23;
          pfVar15 = (float *)(puVar23 + -2);
          pfVar24 = (float *)((long)puVar23 + -0xc);
          pfVar10 = (float *)(puVar23 + -1);
          pfVar11 = (float *)((long)puVar23 + -4);
          puVar23 = puVar23 + 4;
          fVar29 = fVar34 + *pfVar15 * fVar33;
          fVar30 = fVar34 + *pfVar24 * fVar33;
          fVar31 = fVar34 + *pfVar10 * fVar33;
          fVar32 = fVar34 + *pfVar11 * fVar33;
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531ec0), iVar12 != 0)) {
            auVar28 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar28._8_8_;
            _DAT_00531e90 = auVar28._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar12 = (int)(fVar29 + (float)_DAT_00531e90);
            iVar37 = (int)(fVar30 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar8._4_4_ = iVar37;
            auVar8._0_4_ = iVar12;
            auVar8._8_4_ = (int)(fVar31 + (float)uRam0000000000531e98);
            auVar8._12_4_ = (int)(fVar32 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar9 = NEON_uqxtn(CONCAT44(iVar37,iVar12),auVar8,4);
            uVar35 = (undefined4)uVar9;
            uVar36 = (undefined4)((ulong)uVar9 >> 0x20);
          }
          else {
            iVar12 = (int)(fVar29 + (float)_DAT_00531e90);
            iVar37 = (int)(fVar30 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar28._4_4_ = iVar37;
            auVar28._0_4_ = iVar12;
            auVar28._8_4_ = (int)(fVar31 + (float)uRam0000000000531e98);
            auVar28._12_4_ = (int)(fVar32 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar9 = NEON_uqxtn(CONCAT44(iVar37,iVar12),auVar28,4);
            uVar35 = (undefined4)uVar9;
            uVar36 = (undefined4)((ulong)uVar9 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531ec0), iVar12 != 0)) {
            auVar28 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar28._8_8_;
            _DAT_00531e90 = auVar28._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar27._0_8_ =
               CONCAT44((int)(fVar34 + (float)((ulong)uVar26 >> 0x20) * fVar33 + DAT_00531e90_4),
                        (int)(fVar34 + (float)uVar26 * fVar33 + _DAT_00531e90));
          auVar27._8_4_ = (int)(fVar34 + (float)uVar7 * fVar33 + (float)uRam0000000000531e98);
          auVar27._12_4_ =
               (int)(fVar34 + (float)((ulong)uVar7 >> 0x20) * fVar33 + uRam0000000000531e98._4_4_);
          uVar26 = NEON_uqxtn(auVar27._0_8_,auVar27,4);
          auVar6._4_4_ = uVar36;
          auVar6._0_4_ = uVar35;
          auVar6._8_4_ = (int)uVar26;
          auVar6._12_4_ = (int)((ulong)uVar26 >> 0x20);
          uVar26 = NEON_uqxtn(uVar26,auVar6,2);
          *puVar20 = uVar26;
          puVar20 = puVar20 + 1;
        } while (puVar23 != (undefined8 *)(param_1 + (ulong)uVar4 * 0x20 + 0x30));
      }
      iVar12 = iVar3;
      if (iVar3 < iVar2 + -3) {
        pfVar24 = (float *)(param_1 + lVar25);
        puVar21 = (undefined1 *)((long)param_5 + lVar18);
        do {
          lVar16 = lrintf(fVar34 + *pfVar24 * fVar33);
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar16 = lrintf(fVar34 + pfVar24[1] * fVar33);
          uVar14 = (uint)lVar16;
          if (0xff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          *puVar21 = (char)uVar13;
          puVar21[1] = (char)uVar14;
          lVar16 = lrintf(fVar34 + pfVar24[2] * fVar33);
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar16 = lrintf(fVar34 + pfVar24[3] * fVar33);
          uVar14 = (uint)lVar16;
          if (0xff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          puVar21[2] = (char)uVar13;
          puVar1 = puVar21 + 4;
          pfVar24 = pfVar24 + 4;
          puVar21[3] = (char)uVar14;
          puVar21 = puVar1;
          iVar12 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar18 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar12 < iVar2) {
        lVar16 = 0;
        do {
          lVar17 = lrintf(fVar34 + *(float *)(param_1 + (long)iVar12 * 4 + lVar16 * 4) * fVar33);
          cVar19 = (char)lVar17;
          if (0xff < (uint)lVar17) {
            cVar19 = -(0 < (int)(uint)lVar17);
          }
          *(char *)((long)param_5 + lVar16 + iVar12) = cVar19;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar2 + -1) - iVar12) + 1);
      }
      iVar22 = iVar22 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 00279944 (904 bytes) name=FUN_00279944

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00279944(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7,double *param_8)

{
  int iVar1;
  undefined8 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  int iVar9;
  uint uVar10;
  uint uVar11;
  long lVar12;
  long lVar13;
  byte *pbVar14;
  undefined1 *puVar15;
  long lVar16;
  int iVar17;
  undefined1 uVar18;
  undefined8 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  undefined4 uVar30;
  undefined4 uVar31;
  int iVar32;
  
  iVar17 = param_7[1];
  iVar3 = *param_7;
  fVar28 = (float)*param_8;
  fVar29 = (float)param_8[1];
  if (iVar17 != 0) {
    iVar5 = iVar3 + -7;
    iVar1 = (iVar3 - 8U & 0xfffffff8) + 8;
    if (iVar5 < 1) {
      iVar1 = 0;
    }
    uVar4 = (uint)((iVar3 + -4) - iVar1) >> 2;
    lVar13 = (long)iVar1;
    do {
      if (0 < iVar5) {
        lVar16 = 0;
        do {
          uVar19 = *(undefined8 *)(param_1 + lVar16);
          uVar18 = (undefined1)((ulong)uVar19 >> 8);
          auVar23._6_2_ = 0;
          auVar23._0_6_ =
               (uint6)CONCAT14(uVar18,(uint)CONCAT12(uVar18,(ushort)(byte)uVar19)) & 0xffff0000ffff;
          auVar23[8] = (char)((ulong)uVar19 >> 0x10);
          auVar23._9_3_ = 0;
          auVar23[0xc] = (char)((ulong)uVar19 >> 0x18);
          auVar23._13_3_ = 0;
          auVar23 = NEON_ucvtf(auVar23,4);
          auVar21._1_3_ = 0;
          auVar21[0] = (byte)((ulong)uVar19 >> 0x20);
          auVar21[4] = (char)((ulong)uVar19 >> 0x28);
          auVar21._5_3_ = 0;
          auVar21[8] = (char)((ulong)uVar19 >> 0x30);
          auVar21._9_3_ = 0;
          auVar21[0xc] = (char)((ulong)uVar19 >> 0x38);
          auVar21._13_3_ = 0;
          auVar21 = NEON_ucvtf(auVar21,4);
          fVar24 = fVar29 + auVar23._0_4_ * fVar28;
          fVar25 = fVar29 + auVar23._4_4_ * fVar28;
          fVar26 = fVar29 + auVar23._8_4_ * fVar28;
          fVar27 = fVar29 + auVar23._12_4_ * fVar28;
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar23 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar23._8_8_;
            _DAT_00531e90 = auVar23._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar9 = (int)(fVar24 + (float)_DAT_00531e90);
            iVar32 = (int)(fVar25 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar32;
            auVar7._0_4_ = iVar9;
            auVar7._8_4_ = (int)(fVar26 + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(fVar27 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar32,iVar9),auVar7,4);
            uVar30 = (undefined4)uVar19;
            uVar31 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          else {
            iVar9 = (int)(fVar24 + (float)_DAT_00531e90);
            iVar32 = (int)(fVar25 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar8._4_4_ = iVar32;
            auVar8._0_4_ = iVar9;
            auVar8._8_4_ = (int)(fVar26 + (float)uRam0000000000531e98);
            auVar8._12_4_ = (int)(fVar27 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar32,iVar9),auVar8,4);
            uVar30 = (undefined4)uVar19;
            uVar31 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar23 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar23._8_8_;
            _DAT_00531e90 = auVar23._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          puVar2 = (undefined8 *)(param_5 + lVar16);
          lVar16 = lVar16 + 8;
          auVar22._4_4_ = uVar31;
          auVar22._0_4_ = uVar30;
          auVar20._0_8_ =
               CONCAT44((int)(fVar29 + auVar21._4_4_ * fVar28 + DAT_00531e90_4),
                        (int)(fVar29 + auVar21._0_4_ * fVar28 + _DAT_00531e90));
          auVar20._8_4_ = (int)(fVar29 + auVar21._8_4_ * fVar28 + (float)uRam0000000000531e98);
          auVar20._12_4_ = (int)(fVar29 + auVar21._12_4_ * fVar28 + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar20._0_8_,auVar20,4);
          auVar22._8_8_ = uVar19;
          uVar19 = NEON_uqxtn(uVar19,auVar22,2);
          *puVar2 = uVar19;
        } while ((int)lVar16 < iVar5);
      }
      iVar9 = iVar1;
      if (iVar1 < iVar3 + -3) {
        pbVar14 = (byte *)(param_1 + lVar13);
        puVar15 = (undefined1 *)(param_5 + lVar13);
        do {
          lVar16 = lrintf(fVar29 + (float)*pbVar14 * fVar28);
          uVar10 = (uint)lVar16;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar16 = lrintf(fVar29 + (float)pbVar14[1] * fVar28);
          uVar11 = (uint)lVar16;
          if (0xff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          *puVar15 = (char)uVar10;
          puVar15[1] = (char)uVar11;
          lVar16 = lrintf(fVar29 + (float)pbVar14[2] * fVar28);
          uVar10 = (uint)lVar16;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar16 = lrintf(fVar29 + (float)pbVar14[3] * fVar28);
          uVar11 = (uint)lVar16;
          if (0xff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          pbVar14 = pbVar14 + 4;
          puVar15[2] = (char)uVar10;
          puVar15[3] = (char)uVar11;
          puVar15 = puVar15 + 4;
          iVar9 = iVar1 + 4 + uVar4 * 4;
        } while (pbVar14 != (byte *)(param_1 + lVar13 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar9 < iVar3) {
        lVar16 = 0;
        do {
          lVar12 = lrintf(fVar29 + (float)*(byte *)(param_1 + iVar9 + lVar16) * fVar28);
          cVar6 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar6 = -(0 < (int)(uint)lVar12);
          }
          *(char *)(param_5 + iVar9 + lVar16) = cVar6;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar3 + -1) - iVar9) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 00279ccc (904 bytes) name=FUN_00279ccc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00279ccc(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7,double *param_8)

{
  int iVar1;
  undefined8 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  int iVar9;
  uint uVar10;
  uint uVar11;
  long lVar12;
  long lVar13;
  char *pcVar14;
  undefined1 *puVar15;
  long lVar16;
  int iVar17;
  undefined8 uVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  undefined4 uVar29;
  undefined4 uVar30;
  int iVar31;
  
  iVar17 = param_7[1];
  iVar3 = *param_7;
  fVar27 = (float)*param_8;
  fVar28 = (float)param_8[1];
  if (iVar17 != 0) {
    iVar5 = iVar3 + -7;
    iVar1 = (iVar3 - 8U & 0xfffffff8) + 8;
    if (iVar5 < 1) {
      iVar1 = 0;
    }
    uVar4 = (uint)((iVar3 + -4) - iVar1) >> 2;
    lVar13 = (long)iVar1;
    do {
      if (0 < iVar5) {
        lVar16 = 0;
        do {
          uVar18 = *(undefined8 *)(param_1 + lVar16);
          auVar22._0_4_ = (int)(short)(char)uVar18;
          auVar22._4_4_ = (int)(short)(char)((ulong)uVar18 >> 8);
          auVar22._8_4_ = (int)(short)(char)((ulong)uVar18 >> 0x10);
          auVar22._12_4_ = (int)(short)(char)((ulong)uVar18 >> 0x18);
          auVar22 = NEON_scvtf(auVar22,4);
          auVar20._0_4_ = (int)(short)(char)((ulong)uVar18 >> 0x20);
          auVar20._4_4_ = (int)(short)(char)((ulong)uVar18 >> 0x28);
          auVar20._8_4_ = (int)(short)(char)((ulong)uVar18 >> 0x30);
          auVar20._12_4_ = (int)(short)(char)((ulong)uVar18 >> 0x38);
          auVar20 = NEON_scvtf(auVar20,4);
          fVar23 = fVar28 + auVar22._0_4_ * fVar27;
          fVar24 = fVar28 + auVar22._4_4_ * fVar27;
          fVar25 = fVar28 + auVar22._8_4_ * fVar27;
          fVar26 = fVar28 + auVar22._12_4_ * fVar27;
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar9 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar31;
            auVar7._0_4_ = iVar9;
            auVar7._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar18 = NEON_uqxtn(CONCAT44(iVar31,iVar9),auVar7,4);
            uVar29 = (undefined4)uVar18;
            uVar30 = (undefined4)((ulong)uVar18 >> 0x20);
          }
          else {
            iVar9 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar8._4_4_ = iVar31;
            auVar8._0_4_ = iVar9;
            auVar8._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar8._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar18 = NEON_uqxtn(CONCAT44(iVar31,iVar9),auVar8,4);
            uVar29 = (undefined4)uVar18;
            uVar30 = (undefined4)((ulong)uVar18 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          puVar2 = (undefined8 *)(param_5 + lVar16);
          lVar16 = lVar16 + 8;
          auVar21._4_4_ = uVar30;
          auVar21._0_4_ = uVar29;
          auVar19._0_8_ =
               CONCAT44((int)(fVar28 + auVar20._4_4_ * fVar27 + DAT_00531e90_4),
                        (int)(fVar28 + auVar20._0_4_ * fVar27 + _DAT_00531e90));
          auVar19._8_4_ = (int)(fVar28 + auVar20._8_4_ * fVar27 + (float)uRam0000000000531e98);
          auVar19._12_4_ = (int)(fVar28 + auVar20._12_4_ * fVar27 + uRam0000000000531e98._4_4_);
          uVar18 = NEON_uqxtn(auVar19._0_8_,auVar19,4);
          auVar21._8_8_ = uVar18;
          uVar18 = NEON_uqxtn(uVar18,auVar21,2);
          *puVar2 = uVar18;
        } while ((int)lVar16 < iVar5);
      }
      iVar9 = iVar1;
      if (iVar1 < iVar3 + -3) {
        pcVar14 = (char *)(param_1 + lVar13);
        puVar15 = (undefined1 *)(param_5 + lVar13);
        do {
          lVar16 = lrintf(fVar28 + (float)(int)*pcVar14 * fVar27);
          uVar10 = (uint)lVar16;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar16 = lrintf(fVar28 + (float)(int)pcVar14[1] * fVar27);
          uVar11 = (uint)lVar16;
          if (0xff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          *puVar15 = (char)uVar10;
          puVar15[1] = (char)uVar11;
          lVar16 = lrintf(fVar28 + (float)(int)pcVar14[2] * fVar27);
          uVar10 = (uint)lVar16;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar16 = lrintf(fVar28 + (float)(int)pcVar14[3] * fVar27);
          uVar11 = (uint)lVar16;
          if (0xff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          pcVar14 = pcVar14 + 4;
          puVar15[2] = (char)uVar10;
          puVar15[3] = (char)uVar11;
          puVar15 = puVar15 + 4;
          iVar9 = iVar1 + 4 + uVar4 * 4;
        } while (pcVar14 != (char *)(param_1 + lVar13 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar9 < iVar3) {
        lVar16 = 0;
        do {
          lVar12 = lrintf(fVar28 + (float)(int)*(char *)(param_1 + iVar9 + lVar16) * fVar27);
          cVar6 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar6 = -(0 < (int)(uint)lVar12);
          }
          *(char *)(param_5 + iVar9 + lVar16) = cVar6;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar3 + -1) - iVar9) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 0027a054 (928 bytes) name=FUN_0027a054

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027a054(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined8 uVar6;
  float *pfVar7;
  float *pfVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  float *pfVar12;
  long lVar13;
  long lVar14;
  short sVar15;
  long lVar16;
  undefined8 *puVar17;
  undefined2 *puVar18;
  int iVar19;
  undefined8 *puVar20;
  float *pfVar21;
  undefined8 uVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined8 uVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  undefined4 uVar32;
  undefined4 uVar33;
  int iVar34;
  
  iVar19 = param_7[1];
  iVar1 = *param_7;
  fVar30 = (float)*param_8;
  fVar31 = (float)param_8[1];
  if (iVar19 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    iVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
    uVar4 = (uint)((iVar1 + -4) - iVar2) >> 2;
    lVar16 = (long)iVar2;
    do {
      if (0 < iVar1 + -7) {
        puVar20 = (undefined8 *)(param_1 + 0x10);
        puVar17 = param_5;
        do {
          uVar25 = puVar20[1];
          uVar22 = *puVar20;
          pfVar12 = (float *)(puVar20 + -2);
          pfVar21 = (float *)((long)puVar20 + -0xc);
          pfVar7 = (float *)(puVar20 + -1);
          pfVar8 = (float *)((long)puVar20 + -4);
          puVar20 = puVar20 + 4;
          fVar26 = fVar31 + *pfVar12 * fVar30;
          fVar27 = fVar31 + *pfVar21 * fVar30;
          fVar28 = fVar31 + *pfVar7 * fVar30;
          fVar29 = fVar31 + *pfVar8 * fVar30;
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar9 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar34;
            auVar5._0_4_ = iVar9;
            auVar5._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar6 = NEON_uqxtn(CONCAT44(iVar34,iVar9),auVar5,4);
            uVar32 = (undefined4)uVar6;
            uVar33 = (undefined4)((ulong)uVar6 >> 0x20);
          }
          else {
            iVar9 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar24._4_4_ = iVar34;
            auVar24._0_4_ = iVar9;
            auVar24._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar24._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar6 = NEON_uqxtn(CONCAT44(iVar34,iVar9),auVar24,4);
            uVar32 = (undefined4)uVar6;
            uVar33 = (undefined4)((ulong)uVar6 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec0), iVar9 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar23._0_8_ =
               CONCAT44((int)(fVar31 + (float)((ulong)uVar22 >> 0x20) * fVar30 + DAT_00531e90_4),
                        (int)(fVar31 + (float)uVar22 * fVar30 + _DAT_00531e90));
          auVar23._8_4_ = (int)(fVar31 + (float)uVar25 * fVar30 + (float)uRam0000000000531e98);
          auVar23._12_4_ =
               (int)(fVar31 + (float)((ulong)uVar25 >> 0x20) * fVar30 + uRam0000000000531e98._4_4_);
          uVar22 = NEON_uqxtn(auVar23._0_8_,auVar23,4);
          puVar17[1] = uVar22;
          *puVar17 = CONCAT44(uVar33,uVar32);
          puVar17 = puVar17 + 2;
        } while (puVar20 != (undefined8 *)(param_1 + (ulong)uVar3 * 0x20 + 0x30));
      }
      iVar9 = iVar2;
      if (iVar2 < iVar1 + -3) {
        pfVar21 = (float *)(param_1 + lVar16 * 4);
        puVar18 = (undefined2 *)((long)param_5 + lVar16 * 2);
        do {
          lVar13 = lrintf(fVar31 + *pfVar21 * fVar30);
          uVar10 = (uint)lVar13;
          if (0xffff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar13 = lrintf(fVar31 + pfVar21[1] * fVar30);
          uVar11 = (uint)lVar13;
          if (0xffff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          fVar26 = pfVar21[2];
          *puVar18 = (short)uVar10;
          puVar18[1] = (short)uVar11;
          lVar13 = lrintf(fVar31 + fVar26 * fVar30);
          uVar10 = (uint)lVar13;
          if (0xffff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          lVar13 = lrintf(fVar31 + pfVar21[3] * fVar30);
          uVar11 = (uint)lVar13;
          if (0xffff < uVar11) {
            uVar11 = -(uint)(0 < (int)uVar11);
          }
          pfVar21 = pfVar21 + 4;
          puVar18[2] = (short)uVar10;
          puVar18[3] = (short)uVar11;
          puVar18 = puVar18 + 4;
          iVar9 = iVar2 + 4 + uVar4 * 4;
        } while (pfVar21 != (float *)(param_1 + (lVar16 + 4 + (ulong)uVar4 * 4) * 4));
      }
      if (iVar9 < iVar1) {
        lVar13 = 0;
        do {
          lVar14 = lrintf(fVar31 + *(float *)(param_1 + (long)iVar9 * 4 + lVar13 * 4) * fVar30);
          sVar15 = (short)lVar14;
          if (0xffff < (uint)lVar14) {
            sVar15 = -(ushort)(0 < (int)(uint)lVar14);
          }
          *(short *)((long)param_5 + lVar13 * 2 + (long)iVar9 * 2) = sVar15;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar1 + -1) - iVar9) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 0027a3f4 (936 bytes) name=FUN_0027a3f4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027a3f4(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined1 (*pauVar10) [16];
  long lVar11;
  long lVar12;
  long lVar13;
  char cVar14;
  undefined8 *puVar15;
  undefined1 *puVar16;
  int iVar17;
  undefined1 (*pauVar18) [16];
  int *piVar19;
  long lVar20;
  undefined1 auVar22 [16];
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  undefined4 uVar32;
  undefined4 uVar33;
  int iVar34;
  
  iVar17 = param_7[1];
  iVar2 = *param_7;
  fVar30 = (float)*param_8;
  fVar31 = (float)param_8[1];
  if (iVar17 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar13 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar20 = NEON_shl(lVar13,2);
    do {
      if (0 < iVar2 + -7) {
        pauVar18 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar15 = param_5;
        do {
          auVar23 = *pauVar18;
          pauVar10 = pauVar18 + -1;
          pauVar18 = pauVar18 + 2;
          auVar25 = NEON_scvtf(auVar23,4);
          auVar23 = NEON_scvtf(*pauVar10,4);
          fVar26 = fVar31 + auVar23._0_4_ * fVar30;
          fVar27 = fVar31 + auVar23._4_4_ * fVar30;
          fVar28 = fVar31 + auVar23._8_4_ * fVar30;
          fVar29 = fVar31 + auVar23._12_4_ * fVar30;
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar23 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar23._8_8_;
            _DAT_00531e90 = auVar23._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar7 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar34;
            auVar6._0_4_ = iVar7;
            auVar6._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar34,iVar7),auVar6,4);
            uVar32 = (undefined4)uVar21;
            uVar33 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
            iVar7 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar23._4_4_ = iVar34;
            auVar23._0_4_ = iVar7;
            auVar23._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar23._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar34,iVar7),auVar23,4);
            uVar32 = (undefined4)uVar21;
            uVar33 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar23 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar23._8_8_;
            _DAT_00531e90 = auVar23._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar24._4_4_ = uVar33;
          auVar24._0_4_ = uVar32;
          auVar22._0_8_ =
               CONCAT44((int)(fVar31 + auVar25._4_4_ * fVar30 + DAT_00531e90_4),
                        (int)(fVar31 + auVar25._0_4_ * fVar30 + _DAT_00531e90));
          auVar22._8_4_ = (int)(fVar31 + auVar25._8_4_ * fVar30 + (float)uRam0000000000531e98);
          auVar22._12_4_ = (int)(fVar31 + auVar25._12_4_ * fVar30 + uRam0000000000531e98._4_4_);
          uVar21 = NEON_uqxtn(auVar22._0_8_,auVar22,4);
          auVar24._8_8_ = uVar21;
          uVar21 = NEON_uqxtn(uVar21,auVar24,2);
          *puVar15 = uVar21;
          puVar15 = puVar15 + 1;
        } while (pauVar18 != (undefined1 (*) [16])(param_1 + (ulong)uVar4 * 0x20 + 0x30));
      }
      iVar7 = iVar3;
      if (iVar3 < iVar2 + -3) {
        piVar19 = (int *)(param_1 + lVar20);
        puVar16 = (undefined1 *)((long)param_5 + lVar13);
        do {
          lVar11 = lrintf(fVar31 + (float)*piVar19 * fVar30);
          uVar8 = (uint)lVar11;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar11 = lrintf(fVar31 + (float)piVar19[1] * fVar30);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          *puVar16 = (char)uVar8;
          puVar16[1] = (char)uVar9;
          lVar11 = lrintf(fVar31 + (float)piVar19[2] * fVar30);
          uVar8 = (uint)lVar11;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar11 = lrintf(fVar31 + (float)piVar19[3] * fVar30);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          puVar16[2] = (char)uVar8;
          puVar1 = puVar16 + 4;
          piVar19 = piVar19 + 4;
          puVar16[3] = (char)uVar9;
          puVar16 = puVar1;
          iVar7 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar13 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar7 < iVar2) {
        lVar11 = 0;
                    /* try { // try from 0027a70c to 0037a7cb has its CatchHandler @ 0027a70c
                       catch() { ... } // from try @ 0027a70c with catch @ 0027a70c
                       catch() { ... } // from try @ 0027a7d0 with catch @ 0027a70c
                       catch() { ... } // from try @ 0027a7e4 with catch @ 0027a70c
                       catch() { ... } // from try @ 0027a7f8 with catch @ 0027a70c */
        do {
          lVar12 = lrintf(fVar31 + (float)*(int *)(param_1 + (long)iVar7 * 4 + lVar11 * 4) * fVar30)
          ;
          cVar14 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar14 = -(0 < (int)(uint)lVar12);
          }
          *(char *)((long)param_5 + lVar11 + iVar7) = cVar14;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar7) + 1);
      }
      iVar17 = iVar17 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 0027a79c (896 bytes) name=FUN_0027a79c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027a79c(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  float fVar7;
  float *pfVar8;
  float *pfVar9;
  float *pfVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  char cVar17;
  undefined8 *puVar18;
  undefined1 *puVar19;
  int iVar20;
  float *pfVar21;
  long lVar22;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined8 uVar23;
  undefined8 uVar24;
  undefined1 auVar27 [16];
  float fVar28;
  float fVar29;
  int iVar30;
  
  iVar20 = param_7[1];
                    /* try { // try from 0027a7cc to 0037a7cf has its CatchHandler @ 0027a87c */
                    /* try { // try from 0027a7d0 to 0037a7df has its CatchHandler @ 0027a70c */
                    /* try { // try from 0027a7e0 to 0037a7e3 has its CatchHandler @ 0027a878 */
                    /* try { // try from 0027a7e4 to 0037a7f3 has its CatchHandler @ 0027a70c */
  iVar2 = *param_7;
  fVar28 = (float)*param_8;
  fVar29 = (float)param_8[1];
  if (iVar20 != 0) {
                    /* try { // try from 0027a7f4 to 0037a7f7 has its CatchHandler @ 0027a874 */
                    /* try { // try from 0027a7f8 to 0037a88f has its CatchHandler @ 0027a70c */
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar16 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
                    /* catch() { ... } // from try @ 0027a7f4 with catch @ 0027a874 */
                    /* catch() { ... } // from try @ 0027a7e0 with catch @ 0027a878 */
                    /* catch() { ... } // from try @ 0027a7cc with catch @ 0027a87c */
    lVar22 = NEON_shl(lVar16,2);
    do {
      if (0 < iVar2 + -7) {
        pfVar21 = (float *)(param_1 + 0x10);
        puVar18 = param_5;
        do {
          uVar23 = *(undefined8 *)(pfVar21 + -2);
          uVar24 = *(undefined8 *)(pfVar21 + -4);
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar27 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar27._8_8_;
            _DAT_00531e90 = auVar27._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          fVar7 = *pfVar21;
          pfVar8 = pfVar21 + 1;
          pfVar9 = pfVar21 + 2;
          pfVar10 = pfVar21 + 3;
          pfVar21 = pfVar21 + 8;
          iVar11 = (int)(ABS((float)uVar24 * fVar28 + fVar29) + (float)_DAT_00531e90);
          iVar30 = (int)(ABS((float)((ulong)uVar24 >> 0x20) * fVar28 + fVar29) +
                        (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar25._0_8_ = CONCAT44(ABS(*pfVar8 * fVar28 + fVar29),ABS(fVar7 * fVar28 + fVar29));
          auVar25._8_4_ = ABS(*pfVar9 * fVar28 + fVar29);
          auVar25._12_4_ = ABS(*pfVar10 * fVar28 + fVar29);
          auVar27._4_4_ = iVar30;
          auVar27._0_4_ = iVar11;
          auVar27._8_4_ = (int)(ABS((float)uVar23 * fVar28 + fVar29) + (float)uRam0000000000531e98);
          auVar27._12_4_ =
               (int)(ABS((float)((ulong)uVar23 >> 0x20) * fVar28 + fVar29) +
                    (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar24 = NEON_uqxtn(CONCAT44(iVar30,iVar11),auVar27,4);
          if ((DAT_00531ec0 & 1) == 0) {
            uVar23 = auVar25._8_8_;
            iVar11 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar25._8_8_ = uVar23;
            if (iVar11 != 0) {
              auVar27 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar27._8_8_;
              _DAT_00531e90 = auVar27._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
          }
          auVar26._0_8_ =
               CONCAT44((int)(auVar25._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                        (int)(auVar25._0_4_ + (float)_DAT_00531e90));
          auVar26._8_4_ = (int)(auVar25._8_4_ + (float)uRam0000000000531e98);
          auVar26._12_4_ = (int)(auVar25._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar23 = NEON_uqxtn(auVar26._0_8_,auVar26,4);
          auVar6._8_4_ = (int)uVar23;
          auVar6._0_8_ = uVar24;
          auVar6._12_4_ = (int)((ulong)uVar23 >> 0x20);
          uVar24 = NEON_uqxtn(uVar23,auVar6,2);
          *puVar18 = uVar24;
          puVar18 = puVar18 + 1;
        } while (pfVar21 != (float *)(param_1 + (ulong)uVar4 * 0x20 + 0x30));
      }
      iVar11 = iVar3;
      if (iVar3 < iVar2 + -3) {
        pfVar21 = (float *)(param_1 + lVar22);
        puVar19 = (undefined1 *)((long)param_5 + lVar16);
        do {
          lVar14 = lrintf(ABS(fVar29 + *pfVar21 * fVar28));
          uVar12 = (uint)lVar14;
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar14 = lrintf(ABS(fVar29 + pfVar21[1] * fVar28));
          uVar13 = (uint)lVar14;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          *puVar19 = (char)uVar12;
          puVar19[1] = (char)uVar13;
          lVar14 = lrintf(ABS(fVar29 + pfVar21[2] * fVar28));
          uVar12 = (uint)lVar14;
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar14 = lrintf(ABS(fVar29 + pfVar21[3] * fVar28));
          uVar13 = (uint)lVar14;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          puVar19[2] = (char)uVar12;
          puVar1 = puVar19 + 4;
          pfVar21 = pfVar21 + 4;
          puVar19[3] = (char)uVar13;
          puVar19 = puVar1;
          iVar11 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar16 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar11 < iVar2) {
        lVar14 = 0;
        do {
          lVar15 = lrintf(ABS(fVar29 + *(float *)(param_1 + (long)iVar11 * 4 + lVar14 * 4) * fVar28)
                         );
          cVar17 = (char)lVar15;
          if (0xff < (uint)lVar15) {
            cVar17 = -(0 < (int)(uint)lVar15);
          }
          *(char *)((long)param_5 + lVar14 + iVar11) = cVar17;
          lVar14 = lVar14 + 1;
        } while (lVar14 != (ulong)(uint)((iVar2 + -1) - iVar11) + 1);
      }
      iVar20 = iVar20 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar20 != 0);
  }
  return;
}


==================================================================

### FUNC 0027ab1c (952 bytes) name=FUN_0027ab1c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027ab1c(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  int iVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  short sVar12;
  undefined8 *puVar13;
  short *psVar14;
  ulong uVar15;
  undefined2 *puVar16;
  int iVar17;
  long lVar18;
  undefined8 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  undefined4 uVar29;
  undefined4 uVar30;
  int iVar31;
  
  iVar17 = param_7[1];
  iVar1 = *param_7;
  fVar27 = (float)*param_8;
  fVar28 = (float)param_8[1];
  if (iVar17 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    uVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      uVar2 = 0;
    }
    lVar18 = (long)(int)uVar2;
    uVar4 = (iVar1 + -4) - uVar2 >> 2;
    do {
      if (0 < iVar1 + -7) {
        puVar13 = param_5;
        psVar14 = param_1;
        do {
          auVar22._0_4_ = (int)psVar14[4];
          auVar22._4_4_ = (int)psVar14[5];
          auVar22._8_4_ = (int)psVar14[6];
          auVar22._12_4_ = (int)psVar14[7];
          auVar22 = NEON_scvtf(auVar22,4);
          auVar21._0_4_ = (int)*psVar14;
          auVar21._4_4_ = (int)psVar14[1];
          auVar21._8_4_ = (int)psVar14[2];
          auVar21._12_4_ = (int)psVar14[3];
          auVar21 = NEON_scvtf(auVar21,4);
          psVar14 = psVar14 + 8;
          fVar23 = fVar28 + auVar21._0_4_ * fVar27;
          fVar24 = fVar28 + auVar21._4_4_ * fVar27;
          fVar25 = fVar28 + auVar21._8_4_ * fVar27;
          fVar26 = fVar28 + auVar21._12_4_ * fVar27;
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar7 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar31;
            auVar5._0_4_ = iVar7;
            auVar5._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar7),auVar5,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          else {
            iVar7 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar31;
            auVar6._0_4_ = iVar7;
            auVar6._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar7),auVar6,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar20._0_8_ =
               CONCAT44((int)(fVar28 + auVar22._4_4_ * fVar27 + DAT_00531e90_4),
                        (int)(fVar28 + auVar22._0_4_ * fVar27 + _DAT_00531e90));
          auVar20._8_4_ = (int)(fVar28 + auVar22._8_4_ * fVar27 + (float)uRam0000000000531e98);
          auVar20._12_4_ = (int)(fVar28 + auVar22._12_4_ * fVar27 + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar20._0_8_,auVar20,4);
          puVar13[1] = uVar19;
          *puVar13 = CONCAT44(uVar30,uVar29);
          puVar13 = puVar13 + 2;
        } while (psVar14 != param_1 + ((ulong)uVar3 + 1) * 8);
      }
      uVar8 = uVar2;
      if ((int)uVar2 < iVar1 + -3) {
        psVar14 = param_1 + lVar18;
        puVar16 = (undefined2 *)((long)param_5 + lVar18 * 2);
        do {
          lVar10 = lrintf(fVar28 + (float)(int)*psVar14 * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar28 + (float)(int)psVar14[1] * fVar27);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          *puVar16 = (short)uVar8;
          puVar16[1] = (short)uVar9;
          lVar10 = lrintf(fVar28 + (float)(int)psVar14[2] * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar28 + (float)(int)psVar14[3] * fVar27);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          psVar14 = psVar14 + 4;
                    /* try { // try from 0027ae04 to 0037af27 has its CatchHandler @ 0027ae04
                       catch() { ... } // from try @ 0027ae04 with catch @ 0027ae04
                       catch() { ... } // from try @ 0027af3c with catch @ 0027ae04
                       catch() { ... } // from try @ 0027b010 with catch @ 0027ae04 */
          puVar16[2] = (short)uVar8;
          puVar16[3] = (short)uVar9;
          puVar16 = puVar16 + 4;
          uVar8 = uVar2 + 4 + uVar4 * 4;
        } while (psVar14 != param_1 + lVar18 + 4 + (ulong)uVar4 * 4);
      }
      if ((int)uVar8 < iVar1) {
        lVar10 = 0;
        uVar15 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        do {
          lVar11 = lrintf(fVar28 + (float)(int)*(short *)((long)param_1 + lVar10 + uVar15) * fVar27)
          ;
          sVar12 = (short)lVar11;
          if (0xffff < (uint)lVar11) {
            sVar12 = -(ushort)(0 < (int)(uint)lVar11);
          }
          *(short *)((long)param_5 + lVar10 + uVar15) = sVar12;
          lVar10 = lVar10 + 2;
        } while (lVar10 != ((ulong)((iVar1 + -1) - uVar8) + 1) * 2);
      }
      iVar17 = iVar17 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar17 != 0);
  }
  return;
}


==================================================================

### FUNC 0027aed4 (952 bytes) name=FUN_0027aed4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027aed4(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  int iVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  short sVar12;
  undefined8 *puVar13;
  ushort *puVar14;
  ulong uVar15;
  undefined2 *puVar16;
  int iVar17;
  long lVar18;
  undefined8 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  undefined4 uVar29;
  undefined4 uVar30;
  int iVar31;
  
  iVar17 = param_7[1];
  iVar1 = *param_7;
                    /* try { // try from 0027af28 to 0037af3b has its CatchHandler @ 0027b258 */
  fVar27 = (float)*param_8;
  fVar28 = (float)param_8[1];
  if (iVar17 != 0) {
                    /* try { // try from 0027af3c to 0037af4b has its CatchHandler @ 0027ae04 */
    uVar3 = iVar1 - 8U >> 3;
                    /* try { // try from 0027af4c to 0037af5b has its CatchHandler @ 0027b244 */
    uVar2 = (uVar3 + 1) * 8;
                    /* try { // try from 0027af6c to 0037b00f has its CatchHandler @ 0027b258 */
    if (iVar1 + -7 < 1) {
      uVar2 = 0;
    }
    lVar18 = (long)(int)uVar2;
    uVar4 = (iVar1 + -4) - uVar2 >> 2;
    do {
      if (0 < iVar1 + -7) {
        puVar13 = param_5;
        puVar14 = param_1;
        do {
          auVar22._2_2_ = 0;
          auVar22._0_2_ = puVar14[4];
          auVar22._4_2_ = puVar14[5];
          auVar22._6_2_ = 0;
          auVar22._8_2_ = puVar14[6];
          auVar22._10_2_ = 0;
          auVar22._12_2_ = puVar14[7];
          auVar22._14_2_ = 0;
          auVar22 = NEON_ucvtf(auVar22,4);
          auVar21._2_2_ = 0;
          auVar21._0_2_ = *puVar14;
          auVar21._4_2_ = puVar14[1];
          auVar21._6_2_ = 0;
          auVar21._8_2_ = puVar14[2];
          auVar21._10_2_ = 0;
          auVar21._12_2_ = puVar14[3];
          auVar21._14_2_ = 0;
          auVar21 = NEON_ucvtf(auVar21,4);
          puVar14 = puVar14 + 8;
          fVar23 = fVar28 + auVar21._0_4_ * fVar27;
          fVar24 = fVar28 + auVar21._4_4_ * fVar27;
          fVar25 = fVar28 + auVar21._8_4_ * fVar27;
          fVar26 = fVar28 + auVar21._12_4_ * fVar27;
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar7 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar31;
            auVar5._0_4_ = iVar7;
            auVar5._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar7),auVar5,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          else {
                    /* try { // try from 0027b010 to 0037b2c3 has its CatchHandler @ 0027ae04 */
            iVar7 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar31;
            auVar6._0_4_ = iVar7;
            auVar6._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar7),auVar6,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar20._0_8_ =
               CONCAT44((int)(fVar28 + auVar22._4_4_ * fVar27 + DAT_00531e90_4),
                        (int)(fVar28 + auVar22._0_4_ * fVar27 + _DAT_00531e90));
          auVar20._8_4_ = (int)(fVar28 + auVar22._8_4_ * fVar27 + (float)uRam0000000000531e98);
          auVar20._12_4_ = (int)(fVar28 + auVar22._12_4_ * fVar27 + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar20._0_8_,auVar20,4);
          puVar13[1] = uVar19;
          *puVar13 = CONCAT44(uVar30,uVar29);
          puVar13 = puVar13 + 2;
        } while (puVar14 != param_1 + ((ulong)uVar3 + 1) * 8);
      }
      uVar8 = uVar2;
      if ((int)uVar2 < iVar1 + -3) {
        puVar14 = param_1 + lVar18;
        puVar16 = (undefined2 *)((long)param_5 + lVar18 * 2);
        do {
          lVar10 = lrintf(fVar28 + (float)*puVar14 * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar28 + (float)puVar14[1] * fVar27);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          *puVar16 = (short)uVar8;
          puVar16[1] = (short)uVar9;
          lVar10 = lrintf(fVar28 + (float)puVar14[2] * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar28 + (float)puVar14[3] * fVar27);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          puVar14 = puVar14 + 4;
          puVar16[2] = (short)uVar8;
          puVar16[3] = (short)uVar9;
          puVar16 = puVar16 + 4;
          uVar8 = uVar2 + 4 + uVar4 * 4;
        } while (puVar14 != param_1 + lVar18 + 4 + (ulong)uVar4 * 4);
      }
      if ((int)uVar8 < iVar1) {
        lVar10 = 0;
        uVar15 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
        do {
          lVar11 = lrintf(fVar28 + (float)*(ushort *)((long)param_1 + lVar10 + uVar15) * fVar27);
          sVar12 = (short)lVar11;
          if (0xffff < (uint)lVar11) {
            sVar12 = -(ushort)(0 < (int)(uint)lVar11);
          }
          *(short *)((long)param_5 + lVar10 + uVar15) = sVar12;
          lVar10 = lVar10 + 2;
        } while (lVar10 != ((ulong)((iVar1 + -1) - uVar8) + 1) * 2);
      }
      iVar17 = iVar17 + -1;
                    /* catch() { ... } // from try @ 0027af4c with catch @ 0027b244 */
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar17 != 0);
  }
                    /* catch() { ... } // from try @ 0027af28 with catch @ 0027b258
                       catch() { ... } // from try @ 0027af6c with catch @ 0027b258 */
  return;
}


==================================================================

### FUNC 0027b28c (936 bytes) name=FUN_0027b28c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027b28c(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  int iVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  char cVar14;
  undefined8 *puVar15;
  undefined1 *puVar16;
  ushort *puVar17;
  int iVar18;
  long lVar19;
  undefined1 auVar21 [16];
  undefined8 uVar20;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  int iVar33;
  
  iVar18 = param_7[1];
  iVar2 = *param_7;
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar13 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar19 = NEON_shl(lVar13,1);
    do {
      if (0 < iVar2 + -7) {
        puVar15 = param_5;
        puVar17 = param_1;
        do {
          auVar24._2_2_ = 0;
          auVar24._0_2_ = puVar17[4];
          auVar24._4_2_ = puVar17[5];
          auVar24._6_2_ = 0;
          auVar24._8_2_ = puVar17[6];
          auVar24._10_2_ = 0;
          auVar24._12_2_ = puVar17[7];
          auVar24._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          auVar22._2_2_ = 0;
          auVar22._0_2_ = *puVar17;
          auVar22._4_2_ = puVar17[1];
          auVar22._6_2_ = 0;
          auVar22._8_2_ = puVar17[2];
          auVar22._10_2_ = 0;
          auVar22._12_2_ = puVar17[3];
          auVar22._14_2_ = 0;
          auVar22 = NEON_ucvtf(auVar22,4);
          puVar17 = puVar17 + 8;
          fVar25 = fVar30 + auVar22._0_4_ * fVar29;
          fVar26 = fVar30 + auVar22._4_4_ * fVar29;
          fVar27 = fVar30 + auVar22._8_4_ * fVar29;
          fVar28 = fVar30 + auVar22._12_4_ * fVar29;
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar8 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar33;
            auVar6._0_4_ = iVar8;
            auVar6._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar20 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar6,4);
            uVar31 = (undefined4)uVar20;
            uVar32 = (undefined4)((ulong)uVar20 >> 0x20);
          }
          else {
            iVar8 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar33;
            auVar7._0_4_ = iVar8;
            auVar7._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar20 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar7,4);
            uVar31 = (undefined4)uVar20;
            uVar32 = (undefined4)((ulong)uVar20 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar23._4_4_ = uVar32;
          auVar23._0_4_ = uVar31;
          auVar21._0_8_ =
               CONCAT44((int)(fVar30 + auVar24._4_4_ * fVar29 + DAT_00531e90_4),
                        (int)(fVar30 + auVar24._0_4_ * fVar29 + _DAT_00531e90));
          auVar21._8_4_ = (int)(fVar30 + auVar24._8_4_ * fVar29 + (float)uRam0000000000531e98);
          auVar21._12_4_ = (int)(fVar30 + auVar24._12_4_ * fVar29 + uRam0000000000531e98._4_4_);
          uVar20 = NEON_uqxtn(auVar21._0_8_,auVar21,4);
          auVar23._8_8_ = uVar20;
          uVar20 = NEON_uqxtn(uVar20,auVar23,2);
          *puVar15 = uVar20;
          puVar15 = puVar15 + 1;
        } while (puVar17 != param_1 + ((ulong)uVar4 + 1) * 8);
      }
      iVar8 = iVar3;
      if (iVar3 < iVar2 + -3) {
        puVar17 = (ushort *)((long)param_1 + lVar19);
        puVar16 = (undefined1 *)((long)param_5 + lVar13);
        do {
          lVar11 = lrintf(fVar30 + (float)*puVar17 * fVar29);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(fVar30 + (float)puVar17[1] * fVar29);
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          *puVar16 = (char)uVar9;
          puVar16[1] = (char)uVar10;
          lVar11 = lrintf(fVar30 + (float)puVar17[2] * fVar29);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(fVar30 + (float)puVar17[3] * fVar29);
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar16[2] = (char)uVar9;
          puVar1 = puVar16 + 4;
          puVar17 = puVar17 + 4;
          puVar16[3] = (char)uVar10;
          puVar16 = puVar1;
          iVar8 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar13 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar8 < iVar2) {
        lVar11 = 0;
        do {
          lVar12 = lrintf(fVar30 + (float)param_1[iVar8 + lVar11] * fVar29);
          cVar14 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar14 = -(0 < (int)(uint)lVar12);
          }
          *(char *)((long)param_5 + lVar11 + iVar8) = cVar14;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027b634 (964 bytes) name=FUN_0027b634

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027b634(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  int iVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  short sVar13;
  char *pcVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  undefined2 *puVar17;
  int iVar18;
  undefined8 *puVar19;
  long lVar20;
  undefined1 auVar22 [16];
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  int iVar33;
  
  iVar18 = param_7[1];
  iVar1 = *param_7;
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    iVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
    lVar12 = (long)iVar2;
    uVar4 = (uint)((iVar1 + -4) - iVar2) >> 2;
    lVar20 = NEON_shl(lVar12,1);
    do {
      if (0 < iVar1 + -7) {
        puVar16 = param_5;
        puVar19 = param_1;
        do {
          uVar21 = *puVar19;
          auVar24._0_4_ = (int)(short)(char)uVar21;
          auVar24._4_4_ = (int)(short)(char)((ulong)uVar21 >> 8);
          auVar24._8_4_ = (int)(short)(char)((ulong)uVar21 >> 0x10);
          auVar24._12_4_ = (int)(short)(char)((ulong)uVar21 >> 0x18);
          auVar24 = NEON_scvtf(auVar24,4);
          puVar19 = puVar19 + 1;
          auVar23._0_4_ = (int)(short)(char)((ulong)uVar21 >> 0x20);
          auVar23._4_4_ = (int)(short)(char)((ulong)uVar21 >> 0x28);
          auVar23._8_4_ = (int)(short)(char)((ulong)uVar21 >> 0x30);
          auVar23._12_4_ = (int)(short)(char)((ulong)uVar21 >> 0x38);
          auVar23 = NEON_scvtf(auVar23,4);
          fVar25 = fVar30 + auVar24._0_4_ * fVar29;
          fVar26 = fVar30 + auVar24._4_4_ * fVar29;
          fVar27 = fVar30 + auVar24._8_4_ * fVar29;
          fVar28 = fVar30 + auVar24._12_4_ * fVar29;
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar7 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar33;
            auVar5._0_4_ = iVar7;
            auVar5._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar7),auVar5,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
            iVar7 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar33;
            auVar6._0_4_ = iVar7;
            auVar6._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar7),auVar6,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar22._0_8_ =
               CONCAT44((int)(fVar30 + auVar23._4_4_ * fVar29 + DAT_00531e90_4),
                        (int)(fVar30 + auVar23._0_4_ * fVar29 + _DAT_00531e90));
          auVar22._8_4_ = (int)(fVar30 + auVar23._8_4_ * fVar29 + (float)uRam0000000000531e98);
          auVar22._12_4_ = (int)(fVar30 + auVar23._12_4_ * fVar29 + uRam0000000000531e98._4_4_);
          uVar21 = NEON_uqxtn(auVar22._0_8_,auVar22,4);
          puVar15 = puVar16 + 2;
          puVar16[1] = uVar21;
          *puVar16 = CONCAT44(uVar32,uVar31);
          puVar16 = puVar15;
        } while (puVar15 != param_5 + ((ulong)uVar3 + 1) * 2);
      }
      iVar7 = iVar2;
      if (iVar2 < iVar1 + -3) {
        pcVar14 = (char *)((long)param_1 + lVar12);
        puVar17 = (undefined2 *)((long)param_5 + lVar20);
        do {
          lVar10 = lrintf(fVar30 + (float)(int)*pcVar14 * fVar29);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar30 + (float)(int)pcVar14[1] * fVar29);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          *puVar17 = (short)uVar8;
          puVar17[1] = (short)uVar9;
          lVar10 = lrintf(fVar30 + (float)(int)pcVar14[2] * fVar29);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar30 + (float)(int)pcVar14[3] * fVar29);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          pcVar14 = pcVar14 + 4;
          puVar17[2] = (short)uVar8;
          puVar17[3] = (short)uVar9;
          puVar17 = puVar17 + 4;
          iVar7 = iVar2 + 4 + uVar4 * 4;
        } while (pcVar14 != (char *)((long)param_1 + lVar12 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar7 < iVar1) {
        lVar10 = 0;
        do {
          lVar11 = lrintf(fVar30 + (float)(int)*(char *)((long)param_1 + lVar10 + iVar7) * fVar29);
          sVar13 = (short)lVar11;
          if (0xffff < (uint)lVar11) {
            sVar13 = -(ushort)(0 < (int)(uint)lVar11);
          }
          *(short *)((long)param_5 + lVar10 * 2 + (long)iVar7 * 2) = sVar13;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(uint)((iVar1 + -1) - iVar7) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027b9f8 (964 bytes) name=FUN_0027b9f8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027b9f8(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  int iVar7;
  uint uVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  short sVar13;
  byte *pbVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  undefined2 *puVar17;
  int iVar18;
  undefined8 *puVar19;
  undefined1 uVar20;
  long lVar21;
  undefined1 auVar23 [16];
  undefined8 uVar22;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  undefined4 uVar32;
  undefined4 uVar33;
  int iVar34;
  
  iVar18 = param_7[1];
  iVar1 = *param_7;
  fVar30 = (float)*param_8;
  fVar31 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    iVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
    lVar12 = (long)iVar2;
    uVar4 = (uint)((iVar1 + -4) - iVar2) >> 2;
    lVar21 = NEON_shl(lVar12,1);
    do {
      if (0 < iVar1 + -7) {
        puVar16 = param_5;
        puVar19 = param_1;
        do {
          uVar22 = *puVar19;
          uVar20 = (undefined1)((ulong)uVar22 >> 8);
          auVar25._6_2_ = 0;
          auVar25._0_6_ =
               (uint6)CONCAT14(uVar20,(uint)CONCAT12(uVar20,(ushort)(byte)uVar22)) & 0xffff0000ffff;
          auVar25[8] = (char)((ulong)uVar22 >> 0x10);
          auVar25._9_3_ = 0;
          auVar25[0xc] = (char)((ulong)uVar22 >> 0x18);
          auVar25._13_3_ = 0;
          auVar25 = NEON_ucvtf(auVar25,4);
          puVar19 = puVar19 + 1;
          auVar24._1_3_ = 0;
          auVar24[0] = (byte)((ulong)uVar22 >> 0x20);
          auVar24[4] = (char)((ulong)uVar22 >> 0x28);
          auVar24._5_3_ = 0;
          auVar24[8] = (char)((ulong)uVar22 >> 0x30);
          auVar24._9_3_ = 0;
          auVar24[0xc] = (char)((ulong)uVar22 >> 0x38);
          auVar24._13_3_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          fVar26 = fVar31 + auVar25._0_4_ * fVar30;
          fVar27 = fVar31 + auVar25._4_4_ * fVar30;
          fVar28 = fVar31 + auVar25._8_4_ * fVar30;
          fVar29 = fVar31 + auVar25._12_4_ * fVar30;
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar25 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar25._8_8_;
            _DAT_00531e90 = auVar25._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar7 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar34;
            auVar5._0_4_ = iVar7;
            auVar5._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar22 = NEON_uqxtn(CONCAT44(iVar34,iVar7),auVar5,4);
            uVar32 = (undefined4)uVar22;
            uVar33 = (undefined4)((ulong)uVar22 >> 0x20);
          }
          else {
            iVar7 = (int)(fVar26 + (float)_DAT_00531e90);
            iVar34 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar34;
            auVar6._0_4_ = iVar7;
            auVar6._8_4_ = (int)(fVar28 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar29 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar22 = NEON_uqxtn(CONCAT44(iVar34,iVar7),auVar6,4);
            uVar32 = (undefined4)uVar22;
            uVar33 = (undefined4)((ulong)uVar22 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec0), iVar7 != 0))
          {
            auVar25 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar25._8_8_;
            _DAT_00531e90 = auVar25._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar23._0_8_ =
               CONCAT44((int)(fVar31 + auVar24._4_4_ * fVar30 + DAT_00531e90_4),
                        (int)(fVar31 + auVar24._0_4_ * fVar30 + _DAT_00531e90));
          auVar23._8_4_ = (int)(fVar31 + auVar24._8_4_ * fVar30 + (float)uRam0000000000531e98);
          auVar23._12_4_ = (int)(fVar31 + auVar24._12_4_ * fVar30 + uRam0000000000531e98._4_4_);
          uVar22 = NEON_uqxtn(auVar23._0_8_,auVar23,4);
          puVar15 = puVar16 + 2;
          puVar16[1] = uVar22;
          *puVar16 = CONCAT44(uVar33,uVar32);
          puVar16 = puVar15;
        } while (puVar15 != param_5 + ((ulong)uVar3 + 1) * 2);
      }
      iVar7 = iVar2;
      if (iVar2 < iVar1 + -3) {
        pbVar14 = (byte *)((long)param_1 + lVar12);
        puVar17 = (undefined2 *)((long)param_5 + lVar21);
        do {
          lVar10 = lrintf(fVar31 + (float)*pbVar14 * fVar30);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar31 + (float)pbVar14[1] * fVar30);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          *puVar17 = (short)uVar8;
          puVar17[1] = (short)uVar9;
          lVar10 = lrintf(fVar31 + (float)pbVar14[2] * fVar30);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          lVar10 = lrintf(fVar31 + (float)pbVar14[3] * fVar30);
          uVar9 = (uint)lVar10;
          if (0xffff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          pbVar14 = pbVar14 + 4;
          puVar17[2] = (short)uVar8;
          puVar17[3] = (short)uVar9;
          puVar17 = puVar17 + 4;
          iVar7 = iVar2 + 4 + uVar4 * 4;
        } while (pbVar14 != (byte *)((long)param_1 + lVar12 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar7 < iVar1) {
        lVar10 = 0;
        do {
          lVar11 = lrintf(fVar31 + (float)*(byte *)((long)param_1 + lVar10 + iVar7) * fVar30);
          sVar13 = (short)lVar11;
          if (0xffff < (uint)lVar11) {
            sVar13 = -(ushort)(0 < (int)(uint)lVar11);
          }
          *(short *)((long)param_5 + lVar10 * 2 + (long)iVar7 * 2) = sVar13;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(uint)((iVar1 + -1) - iVar7) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027bdbc (936 bytes) name=FUN_0027bdbc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027bdbc(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  int iVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  char cVar14;
  undefined8 *puVar15;
  undefined1 *puVar16;
  short *psVar17;
  int iVar18;
  long lVar19;
  undefined1 auVar21 [16];
  undefined8 uVar20;
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  int iVar33;
  
  iVar18 = param_7[1];
  iVar2 = *param_7;
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar13 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar19 = NEON_shl(lVar13,1);
    do {
      if (0 < iVar2 + -7) {
        puVar15 = param_5;
        psVar17 = param_1;
        do {
          auVar24._0_4_ = (int)psVar17[4];
          auVar24._4_4_ = (int)psVar17[5];
          auVar24._8_4_ = (int)psVar17[6];
          auVar24._12_4_ = (int)psVar17[7];
          auVar24 = NEON_scvtf(auVar24,4);
          auVar22._0_4_ = (int)*psVar17;
          auVar22._4_4_ = (int)psVar17[1];
          auVar22._8_4_ = (int)psVar17[2];
          auVar22._12_4_ = (int)psVar17[3];
          auVar22 = NEON_scvtf(auVar22,4);
          psVar17 = psVar17 + 8;
          fVar25 = fVar30 + auVar22._0_4_ * fVar29;
          fVar26 = fVar30 + auVar22._4_4_ * fVar29;
          fVar27 = fVar30 + auVar22._8_4_ * fVar29;
          fVar28 = fVar30 + auVar22._12_4_ * fVar29;
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar8 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar33;
            auVar6._0_4_ = iVar8;
            auVar6._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar20 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar6,4);
            uVar31 = (undefined4)uVar20;
            uVar32 = (undefined4)((ulong)uVar20 >> 0x20);
          }
          else {
            iVar8 = (int)(fVar25 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar33;
            auVar7._0_4_ = iVar8;
            auVar7._8_4_ = (int)(fVar27 + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(fVar28 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar20 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar7,4);
            uVar31 = (undefined4)uVar20;
            uVar32 = (undefined4)((ulong)uVar20 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar22 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar22._8_8_;
            _DAT_00531e90 = auVar22._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar23._4_4_ = uVar32;
          auVar23._0_4_ = uVar31;
          auVar21._0_8_ =
               CONCAT44((int)(fVar30 + auVar24._4_4_ * fVar29 + DAT_00531e90_4),
                        (int)(fVar30 + auVar24._0_4_ * fVar29 + _DAT_00531e90));
          auVar21._8_4_ = (int)(fVar30 + auVar24._8_4_ * fVar29 + (float)uRam0000000000531e98);
          auVar21._12_4_ = (int)(fVar30 + auVar24._12_4_ * fVar29 + uRam0000000000531e98._4_4_);
          uVar20 = NEON_uqxtn(auVar21._0_8_,auVar21,4);
          auVar23._8_8_ = uVar20;
          uVar20 = NEON_uqxtn(uVar20,auVar23,2);
          *puVar15 = uVar20;
          puVar15 = puVar15 + 1;
        } while (psVar17 != param_1 + ((ulong)uVar4 + 1) * 8);
      }
      iVar8 = iVar3;
      if (iVar3 < iVar2 + -3) {
        psVar17 = (short *)((long)param_1 + lVar19);
        puVar16 = (undefined1 *)((long)param_5 + lVar13);
        do {
          lVar11 = lrintf(fVar30 + (float)(int)*psVar17 * fVar29);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(fVar30 + (float)(int)psVar17[1] * fVar29);
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          *puVar16 = (char)uVar9;
          puVar16[1] = (char)uVar10;
          lVar11 = lrintf(fVar30 + (float)(int)psVar17[2] * fVar29);
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(fVar30 + (float)(int)psVar17[3] * fVar29);
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar16[2] = (char)uVar9;
          puVar1 = puVar16 + 4;
          psVar17 = psVar17 + 4;
          puVar16[3] = (char)uVar10;
          puVar16 = puVar1;
          iVar8 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar13 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar8 < iVar2) {
        lVar11 = 0;
        do {
          lVar12 = lrintf(fVar30 + (float)(int)param_1[iVar8 + lVar11] * fVar29);
          cVar14 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar14 = -(0 < (int)(uint)lVar12);
          }
          *(char *)((long)param_5 + lVar11 + iVar8) = cVar14;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027c164 (956 bytes) name=FUN_0027c164

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027c164(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  undefined1 auVar5 [16];
  int iVar6;
  uint uVar7;
  uint uVar8;
  undefined1 (*pauVar9) [16];
  long lVar10;
  long lVar11;
  short sVar12;
  long lVar13;
  undefined8 *puVar14;
  undefined2 *puVar15;
  int iVar16;
  undefined1 (*pauVar17) [16];
  int *piVar18;
  undefined8 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  undefined4 uVar29;
  undefined4 uVar30;
  int iVar31;
  
  iVar16 = param_7[1];
  iVar1 = *param_7;
  fVar27 = (float)*param_8;
  fVar28 = (float)param_8[1];
  if (iVar16 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    iVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
    uVar4 = (uint)((iVar1 + -4) - iVar2) >> 2;
    lVar13 = (long)iVar2;
    do {
      if (0 < iVar1 + -7) {
        pauVar17 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar14 = param_5;
        do {
          auVar21 = *pauVar17;
          pauVar9 = pauVar17 + -1;
          pauVar17 = pauVar17 + 2;
          auVar22 = NEON_scvtf(auVar21,4);
          auVar21 = NEON_scvtf(*pauVar9,4);
          fVar23 = fVar28 + auVar21._0_4_ * fVar27;
          fVar24 = fVar28 + auVar21._4_4_ * fVar27;
          fVar25 = fVar28 + auVar21._8_4_ * fVar27;
          fVar26 = fVar28 + auVar21._12_4_ * fVar27;
          if (((DAT_00531ec0 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec0), iVar6 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar6 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar5._4_4_ = iVar31;
            auVar5._0_4_ = iVar6;
            auVar5._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar5._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar6),auVar5,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          else {
            iVar6 = (int)(fVar23 + (float)_DAT_00531e90);
            iVar31 = (int)(fVar24 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar21._4_4_ = iVar31;
            auVar21._0_4_ = iVar6;
            auVar21._8_4_ = (int)(fVar25 + (float)uRam0000000000531e98);
            auVar21._12_4_ = (int)(fVar26 + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar19 = NEON_uqxtn(CONCAT44(iVar31,iVar6),auVar21,4);
            uVar29 = (undefined4)uVar19;
            uVar30 = (undefined4)((ulong)uVar19 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00531ec0), iVar6 != 0))
          {
            auVar21 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar21._8_8_;
            _DAT_00531e90 = auVar21._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar20._0_8_ =
               CONCAT44((int)(fVar28 + auVar22._4_4_ * fVar27 + DAT_00531e90_4),
                        (int)(fVar28 + auVar22._0_4_ * fVar27 + _DAT_00531e90));
          auVar20._8_4_ = (int)(fVar28 + auVar22._8_4_ * fVar27 + (float)uRam0000000000531e98);
          auVar20._12_4_ = (int)(fVar28 + auVar22._12_4_ * fVar27 + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar20._0_8_,auVar20,4);
          puVar14[1] = uVar19;
          *puVar14 = CONCAT44(uVar30,uVar29);
          puVar14 = puVar14 + 2;
        } while (pauVar17 != (undefined1 (*) [16])(param_1 + (ulong)uVar3 * 0x20 + 0x30));
      }
      iVar6 = iVar2;
      if (iVar2 < iVar1 + -3) {
        piVar18 = (int *)(param_1 + lVar13 * 4);
        puVar15 = (undefined2 *)((long)param_5 + lVar13 * 2);
        do {
          lVar10 = lrintf(fVar28 + (float)*piVar18 * fVar27);
          uVar7 = (uint)lVar10;
          if (0xffff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          lVar10 = lrintf(fVar28 + (float)piVar18[1] * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          iVar6 = piVar18[2];
          *puVar15 = (short)uVar7;
          puVar15[1] = (short)uVar8;
          lVar10 = lrintf(fVar28 + (float)iVar6 * fVar27);
          uVar7 = (uint)lVar10;
          if (0xffff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          lVar10 = lrintf(fVar28 + (float)piVar18[3] * fVar27);
          uVar8 = (uint)lVar10;
          if (0xffff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          piVar18 = piVar18 + 4;
          puVar15[2] = (short)uVar7;
          puVar15[3] = (short)uVar8;
          puVar15 = puVar15 + 4;
          iVar6 = iVar2 + 4 + uVar4 * 4;
        } while (piVar18 != (int *)(param_1 + (lVar13 + 4 + (ulong)uVar4 * 4) * 4));
      }
      if (iVar6 < iVar1) {
        lVar10 = 0;
        do {
          lVar11 = lrintf(fVar28 + (float)*(int *)(param_1 + (long)iVar6 * 4 + lVar10 * 4) * fVar27)
          ;
          sVar12 = (short)lVar11;
          if (0xffff < (uint)lVar11) {
            sVar12 = -(ushort)(0 < (int)(uint)lVar11);
          }
          *(short *)((long)param_5 + lVar10 * 2 + (long)iVar6 * 2) = sVar12;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(uint)((iVar1 + -1) - iVar6) + 1);
      }
      iVar16 = iVar16 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar16 != 0);
  }
  return;
}


==================================================================

### FUNC 0027c520 (924 bytes) name=FUN_0027c520

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027c520(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  char cVar12;
  undefined8 *puVar13;
  undefined1 *puVar14;
  int iVar15;
  undefined1 (*pauVar16) [16];
  int *piVar17;
  long lVar18;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined8 uVar19;
  undefined8 uVar20;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  float fVar26;
  float fVar27;
  int iVar28;
  
  iVar15 = param_7[1];
  iVar2 = *param_7;
  fVar26 = (float)*param_8;
  fVar27 = (float)param_8[1];
  if (iVar15 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar11 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar18 = NEON_shl(lVar11,2);
    do {
      if (0 < iVar2 + -7) {
        pauVar16 = (undefined1 (*) [16])(param_1 + 0x10);
        puVar13 = param_5;
        do {
          auVar25 = NEON_scvtf(pauVar16[-1],4);
          auVar23._0_8_ =
               CONCAT44(ABS(auVar25._4_4_ * fVar26 + fVar27),ABS(auVar25._0_4_ * fVar26 + fVar27));
          auVar23._8_4_ = ABS(auVar25._8_4_ * fVar26 + fVar27);
          auVar23._12_4_ = ABS(auVar25._12_4_ * fVar26 + fVar27);
          if ((DAT_00531ec0 & 1) == 0) {
            uVar20 = auVar23._8_8_;
            iVar6 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar23._8_8_ = uVar20;
            if (iVar6 != 0) {
              auVar25 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar25._8_8_;
              _DAT_00531e90 = auVar25._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
          }
          auVar25 = *pauVar16;
          pauVar16 = pauVar16 + 2;
          auVar21 = NEON_scvtf(auVar25,4);
          iVar6 = (int)(auVar23._0_4_ + (float)_DAT_00531e90);
          iVar28 = (int)(auVar23._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar25._4_4_ = iVar28;
          auVar25._0_4_ = iVar6;
          auVar25._8_4_ = (int)(auVar23._8_4_ + (float)uRam0000000000531e98);
          auVar25._12_4_ = (int)(auVar23._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar20 = NEON_uqxtn(CONCAT44(iVar28,iVar6),auVar25,4);
          auVar22._0_8_ =
               CONCAT44(ABS(auVar21._4_4_ * fVar26 + fVar27),ABS(auVar21._0_4_ * fVar26 + fVar27));
          auVar22._8_4_ = ABS(auVar21._8_4_ * fVar26 + fVar27);
          auVar22._12_4_ = ABS(auVar21._12_4_ * fVar26 + fVar27);
          if ((DAT_00531ec0 & 1) == 0) {
            uVar19 = auVar22._8_8_;
            iVar6 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar22._8_8_ = uVar19;
            if (iVar6 != 0) {
              auVar23 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar23._8_8_;
              _DAT_00531e90 = auVar23._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
            }
          }
          auVar21._0_8_ =
               CONCAT44((int)(auVar22._4_4_ + DAT_00531e90_4),(int)(auVar22._0_4_ + _DAT_00531e90));
          auVar21._8_4_ = (int)(auVar22._8_4_ + (float)uRam0000000000531e98);
          auVar21._12_4_ = (int)(auVar22._12_4_ + uRam0000000000531e98._4_4_);
          uVar19 = NEON_uqxtn(auVar21._0_8_,auVar21,4);
          auVar24._8_8_ = uVar19;
          auVar24._0_8_ = uVar20;
          uVar20 = NEON_uqxtn(uVar19,auVar24,2);
          *puVar13 = uVar20;
          puVar13 = puVar13 + 1;
        } while (pauVar16 != (undefined1 (*) [16])(param_1 + (ulong)uVar4 * 0x20 + 0x30));
      }
      iVar6 = iVar3;
      if (iVar3 < iVar2 + -3) {
        piVar17 = (int *)(param_1 + lVar18);
        puVar14 = (undefined1 *)((long)param_5 + lVar11);
        do {
          lVar9 = lrintf(ABS(fVar27 + (float)*piVar17 * fVar26));
          uVar7 = (uint)lVar9;
          if (0xff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          lVar9 = lrintf(ABS(fVar27 + (float)piVar17[1] * fVar26));
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          *puVar14 = (char)uVar7;
          puVar14[1] = (char)uVar8;
          lVar9 = lrintf(ABS(fVar27 + (float)piVar17[2] * fVar26));
          uVar7 = (uint)lVar9;
          if (0xff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          lVar9 = lrintf(ABS(fVar27 + (float)piVar17[3] * fVar26));
          uVar8 = (uint)lVar9;
          if (0xff < uVar8) {
            uVar8 = -(uint)(0 < (int)uVar8);
          }
          puVar14[2] = (char)uVar7;
          puVar1 = puVar14 + 4;
          piVar17 = piVar17 + 4;
          puVar14[3] = (char)uVar8;
          puVar14 = puVar1;
          iVar6 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar11 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar6 < iVar2) {
        lVar9 = 0;
        do {
          lVar10 = lrintf(ABS(fVar27 + (float)*(int *)(param_1 + (long)iVar6 * 4 + lVar9 * 4) *
                                       fVar26));
          cVar12 = (char)lVar10;
          if (0xff < (uint)lVar10) {
            cVar12 = -(0 < (int)(uint)lVar10);
          }
          *(char *)((long)param_5 + lVar9 + iVar6) = cVar12;
          lVar9 = lVar9 + 1;
        } while (lVar9 != (ulong)(uint)((iVar2 + -1) - iVar6) + 1);
      }
      iVar15 = iVar15 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar15 != 0);
  }
  return;
}


==================================================================

### FUNC 0027c8bc (940 bytes) name=FUN_0027c8bc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027c8bc(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  int iVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  char cVar14;
  undefined8 *puVar15;
  undefined1 *puVar16;
  ushort *puVar17;
  int iVar18;
  float fVar19;
  long lVar20;
  float fVar26;
  undefined1 auVar22 [16];
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  int iVar33;
  undefined1 auVar25 [16];
  
  iVar18 = param_7[1];
  iVar2 = *param_7;
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar13 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar20 = NEON_shl(lVar13,1);
    do {
      if (0 < iVar2 + -7) {
        puVar15 = param_5;
        puVar17 = param_1;
        do {
          auVar28._2_2_ = 0;
          auVar28._0_2_ = puVar17[4];
          auVar28._4_2_ = puVar17[5];
          auVar28._6_2_ = 0;
          auVar28._8_2_ = puVar17[6];
          auVar28._10_2_ = 0;
          auVar28._12_2_ = puVar17[7];
          auVar28._14_2_ = 0;
          auVar28 = NEON_ucvtf(auVar28,4);
          auVar23._2_2_ = 0;
          auVar23._0_2_ = *puVar17;
          auVar23._4_2_ = puVar17[1];
          auVar23._6_2_ = 0;
          auVar23._8_2_ = puVar17[2];
          auVar23._10_2_ = 0;
          auVar23._12_2_ = puVar17[3];
          auVar23._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar23,4);
          puVar17 = puVar17 + 8;
          fVar19 = ABS(auVar24._0_4_ * fVar29 + fVar30);
          fVar26 = ABS(auVar24._4_4_ * fVar29 + fVar30);
          auVar25._0_8_ = CONCAT44(fVar26,fVar19);
          auVar25._8_4_ = ABS(auVar24._8_4_ * fVar29 + fVar30);
          auVar25._12_4_ = ABS(auVar24._12_4_ * fVar29 + fVar30);
          auVar24 = auVar25;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar8 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar24._8_8_ = auVar25._8_8_;
            auVar24._0_8_ = auVar25._0_8_;
            if (iVar8 == 0) goto LAB_0027c9d0;
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar8 = (int)(fVar19 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar33;
            auVar6._0_4_ = iVar8;
            auVar6._8_4_ = (int)(auVar25._8_4_ + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(auVar25._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar6,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
LAB_0027c9d0:
            iVar8 = (int)(auVar24._0_4_ + (float)_DAT_00531e90);
            iVar33 = (int)(auVar24._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar33;
            auVar7._0_4_ = iVar8;
            auVar7._8_4_ = (int)(auVar24._8_4_ + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(auVar24._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar7,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar27._4_4_ = uVar32;
          auVar27._0_4_ = uVar31;
          auVar22._0_8_ =
               CONCAT44((int)(ABS(auVar28._4_4_ * fVar29 + fVar30) + DAT_00531e90_4),
                        (int)(ABS(auVar28._0_4_ * fVar29 + fVar30) + _DAT_00531e90));
          auVar22._8_4_ = (int)(ABS(auVar28._8_4_ * fVar29 + fVar30) + (float)uRam0000000000531e98);
          auVar22._12_4_ = (int)(ABS(auVar28._12_4_ * fVar29 + fVar30) + uRam0000000000531e98._4_4_)
          ;
          uVar21 = NEON_uqxtn(auVar22._0_8_,auVar22,4);
          auVar27._8_8_ = uVar21;
          uVar21 = NEON_uqxtn(uVar21,auVar27,2);
          *puVar15 = uVar21;
          puVar15 = puVar15 + 1;
        } while (puVar17 != param_1 + ((ulong)uVar4 + 1) * 8);
      }
      iVar8 = iVar3;
      if (iVar3 < iVar2 + -3) {
        puVar17 = (ushort *)((long)param_1 + lVar20);
        puVar16 = (undefined1 *)((long)param_5 + lVar13);
        do {
          lVar11 = lrintf(ABS(fVar30 + (float)*puVar17 * fVar29));
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(ABS(fVar30 + (float)puVar17[1] * fVar29));
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          *puVar16 = (char)uVar9;
          puVar16[1] = (char)uVar10;
          lVar11 = lrintf(ABS(fVar30 + (float)puVar17[2] * fVar29));
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(ABS(fVar30 + (float)puVar17[3] * fVar29));
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar16[2] = (char)uVar9;
          puVar1 = puVar16 + 4;
          puVar17 = puVar17 + 4;
          puVar16[3] = (char)uVar10;
          puVar16 = puVar1;
          iVar8 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar13 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar8 < iVar2) {
        lVar11 = 0;
        do {
          lVar12 = lrintf(ABS(fVar30 + (float)param_1[iVar8 + lVar11] * fVar29));
          cVar14 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar14 = -(0 < (int)(uint)lVar12);
          }
          *(char *)((long)param_5 + lVar11 + iVar8) = cVar14;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027cc68 (940 bytes) name=FUN_0027cc68

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027cc68(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  int iVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  char cVar14;
  undefined8 *puVar15;
  undefined1 *puVar16;
  short *psVar17;
  int iVar18;
  float fVar19;
  long lVar20;
  float fVar26;
  undefined1 auVar22 [16];
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  undefined4 uVar31;
  undefined4 uVar32;
  int iVar33;
  undefined1 auVar25 [16];
  
  iVar18 = param_7[1];
  iVar2 = *param_7;
  fVar29 = (float)*param_8;
  fVar30 = (float)param_8[1];
  if (iVar18 != 0) {
    uVar4 = iVar2 - 8U >> 3;
    iVar3 = (uVar4 + 1) * 8;
    if (iVar2 + -7 < 1) {
      iVar3 = 0;
    }
    lVar13 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar20 = NEON_shl(lVar13,1);
    do {
      if (0 < iVar2 + -7) {
        puVar15 = param_5;
        psVar17 = param_1;
        do {
          auVar28._0_4_ = (int)psVar17[4];
          auVar28._4_4_ = (int)psVar17[5];
          auVar28._8_4_ = (int)psVar17[6];
          auVar28._12_4_ = (int)psVar17[7];
          auVar28 = NEON_scvtf(auVar28,4);
          auVar23._0_4_ = (int)*psVar17;
          auVar23._4_4_ = (int)psVar17[1];
          auVar23._8_4_ = (int)psVar17[2];
          auVar23._12_4_ = (int)psVar17[3];
          auVar24 = NEON_scvtf(auVar23,4);
          psVar17 = psVar17 + 8;
          fVar19 = ABS(auVar24._0_4_ * fVar29 + fVar30);
          fVar26 = ABS(auVar24._4_4_ * fVar29 + fVar30);
          auVar25._0_8_ = CONCAT44(fVar26,fVar19);
          auVar25._8_4_ = ABS(auVar24._8_4_ * fVar29 + fVar30);
          auVar25._12_4_ = ABS(auVar24._12_4_ * fVar29 + fVar30);
          auVar24 = auVar25;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar8 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar24._8_8_ = auVar25._8_8_;
            auVar24._0_8_ = auVar25._0_8_;
            if (iVar8 == 0) goto LAB_0027cd7c;
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar8 = (int)(fVar19 + (float)_DAT_00531e90);
            iVar33 = (int)(fVar26 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar6._4_4_ = iVar33;
            auVar6._0_4_ = iVar8;
            auVar6._8_4_ = (int)(auVar25._8_4_ + (float)uRam0000000000531e98);
            auVar6._12_4_ = (int)(auVar25._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar6,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
LAB_0027cd7c:
            iVar8 = (int)(auVar24._0_4_ + (float)_DAT_00531e90);
            iVar33 = (int)(auVar24._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar33;
            auVar7._0_4_ = iVar8;
            auVar7._8_4_ = (int)(auVar24._8_4_ + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(auVar24._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar33,iVar8),auVar7,4);
            uVar31 = (undefined4)uVar21;
            uVar32 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec0), iVar8 != 0))
          {
            auVar24 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar24._8_8_;
            _DAT_00531e90 = auVar24._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar27._4_4_ = uVar32;
          auVar27._0_4_ = uVar31;
          auVar22._0_8_ =
               CONCAT44((int)(ABS(auVar28._4_4_ * fVar29 + fVar30) + DAT_00531e90_4),
                        (int)(ABS(auVar28._0_4_ * fVar29 + fVar30) + _DAT_00531e90));
          auVar22._8_4_ = (int)(ABS(auVar28._8_4_ * fVar29 + fVar30) + (float)uRam0000000000531e98);
          auVar22._12_4_ = (int)(ABS(auVar28._12_4_ * fVar29 + fVar30) + uRam0000000000531e98._4_4_)
          ;
          uVar21 = NEON_uqxtn(auVar22._0_8_,auVar22,4);
          auVar27._8_8_ = uVar21;
          uVar21 = NEON_uqxtn(uVar21,auVar27,2);
          *puVar15 = uVar21;
          puVar15 = puVar15 + 1;
        } while (psVar17 != param_1 + ((ulong)uVar4 + 1) * 8);
      }
      iVar8 = iVar3;
      if (iVar3 < iVar2 + -3) {
        psVar17 = (short *)((long)param_1 + lVar20);
        puVar16 = (undefined1 *)((long)param_5 + lVar13);
        do {
          lVar11 = lrintf(ABS(fVar30 + (float)(int)*psVar17 * fVar29));
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(ABS(fVar30 + (float)(int)psVar17[1] * fVar29));
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          *puVar16 = (char)uVar9;
          puVar16[1] = (char)uVar10;
          lVar11 = lrintf(ABS(fVar30 + (float)(int)psVar17[2] * fVar29));
          uVar9 = (uint)lVar11;
          if (0xff < uVar9) {
            uVar9 = -(uint)(0 < (int)uVar9);
          }
          lVar11 = lrintf(ABS(fVar30 + (float)(int)psVar17[3] * fVar29));
          uVar10 = (uint)lVar11;
          if (0xff < uVar10) {
            uVar10 = -(uint)(0 < (int)uVar10);
          }
          puVar16[2] = (char)uVar9;
          puVar1 = puVar16 + 4;
          psVar17 = psVar17 + 4;
          puVar16[3] = (char)uVar10;
          puVar16 = puVar1;
          iVar8 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar13 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar8 < iVar2) {
        lVar11 = 0;
        do {
          lVar12 = lrintf(ABS(fVar30 + (float)(int)param_1[iVar8 + lVar11] * fVar29));
          cVar14 = (char)lVar12;
          if (0xff < (uint)lVar12) {
            cVar14 = -(0 < (int)(uint)lVar12);
          }
          *(char *)((long)param_5 + lVar11 + iVar8) = cVar14;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar8) + 1);
      }
      iVar18 = iVar18 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar18 != 0);
  }
  return;
}


==================================================================

### FUNC 0027d014 (1016 bytes) name=FUN_0027d014

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027d014(long param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  long lVar16;
  char cVar17;
  long lVar18;
  undefined8 *puVar19;
  undefined1 *puVar20;
  float *pfVar21;
  int iVar22;
  undefined1 (*pauVar23) [16];
  long lVar24;
  undefined8 uVar25;
  undefined1 auVar28 [16];
  undefined8 uVar26;
  undefined8 uVar27;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  int iVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  undefined8 uVar36;
  undefined8 in_d4;
  
  iVar22 = param_7[1];
  iVar2 = *param_7;
  if (iVar22 != 0) {
    uVar4 = iVar2 - 0x10U >> 4;
    iVar3 = (uVar4 + 1) * 0x10;
    if (iVar2 + -0xf < 1) {
      iVar3 = 0;
    }
    lVar18 = (long)iVar3;
    uVar5 = (uint)((iVar2 + -4) - iVar3) >> 2;
    lVar24 = NEON_shl(lVar18,2);
    do {
      if (0 < iVar2 + -0xf) {
        pauVar23 = (undefined1 (*) [16])(param_1 + 0x30);
        puVar19 = param_5;
        do {
          uVar36 = *(undefined8 *)(pauVar23[-3] + 8);
          uVar27 = *(undefined8 *)pauVar23[-3];
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar29 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar29._8_8_;
            _DAT_00531e90 = auVar29._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          fVar33 = (float)uRam0000000000531e98;
          uVar8 = (ulong)uRam0000000000531e98 >> 0x20;
          auVar7 = pauVar23[-2];
          auVar29._4_4_ =
               (int)((float)((ulong)uVar27 >> 0x20) + (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar29._0_4_ = (int)((float)uVar27 + (float)_DAT_00531e90);
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar31 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar31._8_8_;
            _DAT_00531e90 = auVar31._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          fVar34 = (float)uRam0000000000531e98;
          uVar9 = (ulong)uRam0000000000531e98 >> 0x20;
          uVar26 = *(undefined8 *)(pauVar23[-1] + 8);
          uVar27 = *(undefined8 *)pauVar23[-1];
          uVar25 = CONCAT44((int)(auVar7._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                            (int)(auVar7._0_4_ + (float)_DAT_00531e90));
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar31 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar31._8_8_;
            _DAT_00531e90 = auVar31._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar31 = *pauVar23;
          fVar35 = (float)uRam0000000000531e98;
          uVar10 = (ulong)uRam0000000000531e98 >> 0x20;
          iVar11 = (int)((float)uVar27 + (float)_DAT_00531e90);
          iVar32 = (int)((float)((ulong)uVar27 >> 0x20) + (float)((ulong)_DAT_00531e90 >> 0x20));
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar12 = __cxa_guard_acquire(&DAT_00531ec0), iVar12 != 0)) {
            auVar30 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar30._8_8_;
            _DAT_00531e90 = auVar30._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar30._4_4_ = iVar32;
          auVar30._0_4_ = iVar11;
          auVar30._8_4_ = (int)((float)uVar26 + fVar35);
          auVar30._12_4_ = (int)((float)((ulong)uVar26 >> 0x20) + (float)uVar10);
          uVar27 = NEON_uqxtn(CONCAT44(iVar32,iVar11),auVar30,4);
          pauVar23 = pauVar23 + 4;
          auVar29._8_4_ = (int)((float)uVar36 + fVar33);
          auVar29._12_4_ = (int)((float)((ulong)uVar36 >> 0x20) + (float)uVar8);
          in_d4 = NEON_uqxtn(in_d4,auVar29,4);
          auVar6._8_4_ = (int)(auVar7._8_4_ + fVar34);
          auVar6._0_8_ = uVar25;
          auVar6._12_4_ = (int)(auVar7._12_4_ + (float)uVar9);
          uVar36 = NEON_uqxtn(uVar25,auVar6,4);
          auVar28._0_8_ =
               CONCAT44((int)(auVar31._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20)),
                        (int)(auVar31._0_4_ + (float)_DAT_00531e90));
          auVar28._8_4_ = (int)(auVar31._8_4_ + (float)uRam0000000000531e98);
          auVar28._12_4_ = (int)(auVar31._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar26 = NEON_uqxtn(auVar28._0_8_,auVar28,4);
          auVar31._8_8_ = uVar36;
          auVar31._0_8_ = in_d4;
          uVar36 = NEON_uqxtn(in_d4,auVar31,2);
          auVar7._8_4_ = (int)uVar26;
          auVar7._0_8_ = uVar27;
          auVar7._12_4_ = (int)((ulong)uVar26 >> 0x20);
          uVar27 = NEON_uqxtn(uVar26,auVar7,2);
          puVar19[1] = uVar27;
          *puVar19 = uVar36;
          puVar19 = puVar19 + 2;
        } while (pauVar23 != (undefined1 (*) [16])(param_1 + (ulong)uVar4 * 0x40 + 0x70));
      }
      iVar11 = iVar3;
      if (iVar3 < iVar2 + -3) {
        pfVar21 = (float *)(param_1 + lVar24);
        puVar20 = (undefined1 *)((long)param_5 + lVar18);
        do {
          lVar15 = lrintf(*pfVar21);
          uVar13 = (uint)lVar15;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar15 = lrintf(pfVar21[1]);
          uVar14 = (uint)lVar15;
          if (0xff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          *puVar20 = (char)uVar13;
          puVar20[1] = (char)uVar14;
          lVar15 = lrintf(pfVar21[2]);
          uVar13 = (uint)lVar15;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          lVar15 = lrintf(pfVar21[3]);
          uVar14 = (uint)lVar15;
          if (0xff < uVar14) {
            uVar14 = -(uint)(0 < (int)uVar14);
          }
          puVar20[2] = (char)uVar13;
                    /* try { // try from 0027d34c to 0037d3cf has its CatchHandler @ 0027d34c
                       catch() { ... } // from try @ 0027d34c with catch @ 0027d34c
                       catch() { ... } // from try @ 0027d484 with catch @ 0027d34c */
          puVar1 = puVar20 + 4;
          pfVar21 = pfVar21 + 4;
          puVar20[3] = (char)uVar14;
          puVar20 = puVar1;
          iVar11 = iVar3 + 4 + uVar5 * 4;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar18 + 4 + (ulong)uVar5 * 4));
      }
      if (iVar11 < iVar2) {
        lVar15 = 0;
        do {
          lVar16 = lrintf(*(float *)(param_1 + (long)iVar11 * 4 + lVar15 * 4));
          cVar17 = (char)lVar16;
          if (0xff < (uint)lVar16) {
            cVar17 = -(0 < (int)(uint)lVar16);
          }
          *(char *)((long)param_5 + lVar15 + iVar11) = cVar17;
          lVar15 = lVar15 + 1;
        } while (lVar15 != (ulong)(uint)((iVar2 + -1) - iVar11) + 1);
      }
      iVar22 = iVar22 + -1;
      param_1 = param_1 + (param_2 & 0xfffffffffffffffc);
      param_5 = (undefined8 *)((long)param_5 + param_6);
                    /* try { // try from 0027d3d0 to 0037d3db has its CatchHandler @ 0027d49c */
    } while (iVar22 != 0);
  }
  return;
}


==================================================================

### FUNC 0027d40c (1156 bytes) name=FUN_0027d40c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027d40c(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7,double *param_8)

{
  int iVar1;
  undefined8 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int iVar11;
  uint uVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  byte *pbVar17;
  undefined1 *puVar18;
  int iVar19;
  float fVar20;
  undefined8 uVar21;
  float fVar27;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined8 uVar22;
  undefined1 auVar25 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined8 uVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  float fVar35;
  float fVar36;
  undefined4 uVar37;
  undefined4 uVar38;
  int iVar39;
  undefined4 uStack_68;
  undefined4 uStack_64;
  undefined1 auVar26 [16];
  
                    /* try { // try from 0027d424 to 0037d453 has its CatchHandler @ 0027d494 */
  iVar19 = param_7[1];
  iVar3 = *param_7;
                    /* try { // try from 0027d45c to 0037d477 has its CatchHandler @ 0027d49c */
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar19 != 0) {
    iVar5 = iVar3 + -0xf;
    iVar1 = (iVar3 - 0x10U & 0xfffffff0) + 0x10;
                    /* try { // try from 0027d480 to 0037d483 has its CatchHandler @ 0027d498 */
                    /* try { // try from 0027d484 to 0037d4af has its CatchHandler @ 0027d34c */
    if (iVar5 < 1) {
      iVar1 = 0;
    }
                    /* catch() { ... } // from try @ 0027d424 with catch @ 0027d494 */
                    /* catch() { ... } // from try @ 0027d480 with catch @ 0027d498 */
                    /* catch() { ... } // from try @ 0027d3d0 with catch @ 0027d49c
                       catch() { ... } // from try @ 0027d45c with catch @ 0027d49c */
    uVar4 = (uint)((iVar3 + -4) - iVar1) >> 2;
                    /* try { // try from 0027d4b0 to 0037d5cb has its CatchHandler @ 0027d4b0
                       catch() { ... } // from try @ 0027d4b0 with catch @ 0027d4b0
                       catch() { ... } // from try @ 0027d8b0 with catch @ 0027d4b0 */
    lVar15 = (long)iVar1;
    do {
      if (0 < iVar5) {
        lVar16 = 0;
        do {
          pbVar17 = (byte *)(param_1 + lVar16);
                    /* try { // try from 0027d5cc to 0037d5e7 has its CatchHandler @ 0027d91c */
          auVar29._1_3_ = 0;
          auVar29[0] = pbVar17[4];
          auVar29[4] = pbVar17[5];
          auVar29._5_3_ = 0;
          auVar29[8] = pbVar17[6];
          auVar29._9_3_ = 0;
          auVar29[0xc] = pbVar17[7];
          auVar29._13_3_ = 0;
          auVar29 = NEON_ucvtf(auVar29,4);
          auVar33._6_2_ = 0;
          auVar33._0_6_ =
               (uint6)CONCAT14(pbVar17[9],(uint)CONCAT12(pbVar17[9],(ushort)pbVar17[8])) &
               0xffff0000ffff;
          auVar33[8] = pbVar17[10];
          auVar33._9_3_ = 0;
          auVar33[0xc] = pbVar17[0xb];
          auVar33._13_3_ = 0;
          auVar31._1_3_ = 0;
          auVar31[0] = pbVar17[0xc];
          auVar31[4] = pbVar17[0xd];
          auVar31._5_3_ = 0;
          auVar31[8] = pbVar17[0xe];
          auVar31._9_3_ = 0;
          auVar31[0xc] = pbVar17[0xf];
          auVar31._13_3_ = 0;
          auVar34 = NEON_ucvtf(auVar33,4);
          auVar31 = NEON_ucvtf(auVar31,4);
          auVar32._0_4_ = ABS(auVar34._0_4_ * fVar35 + fVar36);
          auVar32._4_4_ = ABS(auVar34._4_4_ * fVar35 + fVar36);
          auVar32._8_4_ = ABS(auVar34._8_4_ * fVar35 + fVar36);
          auVar32._12_4_ = ABS(auVar34._12_4_ * fVar35 + fVar36);
          auVar25._6_2_ = 0;
          auVar25._0_6_ =
               (uint6)CONCAT14(pbVar17[1],(uint)CONCAT12(pbVar17[1],(ushort)*pbVar17)) &
               0xffff0000ffff;
          auVar25[8] = pbVar17[2];
          auVar25._9_3_ = 0;
          auVar25[0xc] = pbVar17[3];
          auVar25._13_3_ = 0;
          auVar34 = NEON_ucvtf(auVar25,4);
          fVar20 = ABS(auVar34._0_4_ * fVar35 + fVar36);
          fVar27 = ABS(auVar34._4_4_ * fVar35 + fVar36);
          auVar26._0_8_ = CONCAT44(fVar27,fVar20);
          auVar26._8_4_ = ABS(auVar34._8_4_ * fVar35 + fVar36);
          auVar26._12_4_ = ABS(auVar34._12_4_ * fVar35 + fVar36);
          auVar34 = auVar26;
          auVar25 = auVar32;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar11 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar34._8_8_ = auVar26._8_8_;
            auVar34._0_8_ = auVar26._0_8_;
            if (iVar11 == 0) goto LAB_0027d4f0;
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
            iVar11 = (int)(fVar20 + (float)_DAT_00531e90);
            iVar39 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar39;
            auVar7._0_4_ = iVar11;
            auVar7._8_4_ = (int)(auVar26._8_4_ + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(auVar26._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar7,4);
            uVar37 = (undefined4)uVar21;
            uVar38 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
LAB_0027d4f0:
            iVar11 = (int)(auVar34._0_4_ + (float)_DAT_00531e90);
            iVar39 = (int)(auVar34._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar9._4_4_ = iVar39;
            auVar9._0_4_ = iVar11;
            auVar9._8_4_ = (int)(auVar34._8_4_ + (float)uRam0000000000531e98);
            auVar9._12_4_ = (int)(auVar34._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar9,4);
            uVar37 = (undefined4)uVar21;
            uVar38 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          auVar23._0_8_ =
               CONCAT44((int)(ABS(auVar29._4_4_ * fVar35 + fVar36) + DAT_00531e90_4),
                        (int)(ABS(auVar29._0_4_ * fVar35 + fVar36) + _DAT_00531e90));
          auVar23._8_4_ = (int)(ABS(auVar29._8_4_ * fVar35 + fVar36) + (float)uRam0000000000531e98);
          auVar23._12_4_ = (int)(ABS(auVar29._12_4_ * fVar35 + fVar36) + uRam0000000000531e98._4_4_)
          ;
          uVar21 = NEON_uqxtn(auVar23._0_8_,auVar23,4);
          uStack_68 = (undefined4)uVar21;
          uStack_64 = (undefined4)((ulong)uVar21 >> 0x20);
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          uVar22 = auVar25._0_8_;
          iVar11 = (int)(auVar32._0_4_ + (float)_DAT_00531e90);
          iVar39 = (int)(auVar32._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar8._4_4_ = iVar39;
          auVar8._0_4_ = iVar11;
          auVar8._8_4_ = (int)(auVar32._8_4_ + (float)uRam0000000000531e98);
          auVar8._12_4_ = (int)(auVar32._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar8,4);
          if ((DAT_00531ec0 & 1) == 0) {
            iVar11 = __cxa_guard_acquire(&DAT_00531ec0);
            uVar22 = auVar25._0_8_;
            if (iVar11 != 0) {
              auVar34 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar34._8_8_;
              _DAT_00531e90 = auVar34._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
              uVar22 = auVar25._0_8_;
            }
          }
          auVar10._4_4_ = uVar38;
          auVar10._0_4_ = uVar37;
          auVar10._8_4_ = uStack_68;
          auVar10._12_4_ = uStack_64;
          puVar2 = (undefined8 *)(param_5 + lVar16);
          lVar16 = lVar16 + 0x10;
          uVar30 = NEON_uqxtn(uVar22,auVar10,2);
          auVar24._0_8_ =
               CONCAT44((int)(ABS(auVar31._4_4_ * fVar35 + fVar36) + DAT_00531e90_4),
                        (int)(ABS(auVar31._0_4_ * fVar35 + fVar36) + _DAT_00531e90));
          auVar24._8_4_ = (int)(ABS(auVar31._8_4_ * fVar35 + fVar36) + (float)uRam0000000000531e98);
          auVar24._12_4_ = (int)(ABS(auVar31._12_4_ * fVar35 + fVar36) + uRam0000000000531e98._4_4_)
          ;
          uVar22 = NEON_uqxtn(auVar24._0_8_,auVar24,4);
          auVar28._8_8_ = uVar22;
          auVar28._0_8_ = uVar21;
          uVar21 = NEON_uqxtn(uVar22,auVar28,2);
          puVar2[1] = uVar21;
          *puVar2 = uVar30;
        } while ((int)lVar16 < iVar5);
      }
      iVar11 = iVar1;
      if (iVar1 < iVar3 + -3) {
        pbVar17 = (byte *)(param_1 + lVar15);
        puVar18 = (undefined1 *)(param_5 + lVar15);
        do {
          lVar16 = lrintf(ABS(fVar36 + (float)*pbVar17 * fVar35));
          uVar12 = (uint)lVar16;
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar16 = lrintf(ABS(fVar36 + (float)pbVar17[1] * fVar35));
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
                    /* try { // try from 0027d75c to 0037d76b has its CatchHandler @ 0027d90c */
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          *puVar18 = (char)uVar12;
                    /* try { // try from 0027d76c to 0037d787 has its CatchHandler @ 0027d918 */
          puVar18[1] = (char)uVar13;
          lVar16 = lrintf(ABS(fVar36 + (float)pbVar17[2] * fVar35));
          uVar12 = (uint)lVar16;
                    /* try { // try from 0027d788 to 0037d7bf has its CatchHandler @ 0027d914 */
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar16 = lrintf(ABS(fVar36 + (float)pbVar17[3] * fVar35));
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          pbVar17 = pbVar17 + 4;
          puVar18[2] = (char)uVar12;
                    /* try { // try from 0027d7cc to 0037d8af has its CatchHandler @ 0027d930 */
          puVar18[3] = (char)uVar13;
          puVar18 = puVar18 + 4;
          iVar11 = iVar1 + 4 + uVar4 * 4;
        } while (pbVar17 != (byte *)(param_1 + lVar15 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar11 < iVar3) {
        lVar16 = 0;
        do {
          lVar14 = lrintf(ABS(fVar36 + (float)*(byte *)(param_1 + iVar11 + lVar16) * fVar35));
          cVar6 = (char)lVar14;
          if (0xff < (uint)lVar14) {
            cVar6 = -(0 < (int)(uint)lVar14);
          }
          *(char *)(param_5 + iVar11 + lVar16) = cVar6;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar3 + -1) - iVar11) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar19 != 0);
  }
  return;
}


==================================================================

### FUNC 0027d890 (1156 bytes) name=FUN_0027d890

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027d890(long param_1,long param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 long param_6,int *param_7,double *param_8)

{
  int iVar1;
  undefined8 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int iVar11;
  uint uVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  char *pcVar17;
  undefined1 *puVar18;
  int iVar19;
  float fVar20;
  undefined8 uVar21;
  float fVar27;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined8 uVar22;
  undefined1 auVar25 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined8 uVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  float fVar35;
  float fVar36;
  undefined4 uVar37;
  undefined4 uVar38;
  int iVar39;
  undefined4 uStack_68;
  undefined4 uStack_64;
  undefined1 auVar26 [16];
  
                    /* try { // try from 0027d8b0 to 0037d943 has its CatchHandler @ 0027d4b0 */
  iVar19 = param_7[1];
  iVar3 = *param_7;
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar19 != 0) {
    iVar5 = iVar3 + -0xf;
    iVar1 = (iVar3 - 0x10U & 0xfffffff0) + 0x10;
    if (iVar5 < 1) {
      iVar1 = 0;
    }
                    /* catch() { ... } // from try @ 0027d75c with catch @ 0027d90c */
                    /* catch() { ... } // from try @ 0027d788 with catch @ 0027d914 */
                    /* catch() { ... } // from try @ 0027d76c with catch @ 0027d918 */
                    /* catch() { ... } // from try @ 0027d5cc with catch @ 0027d91c */
    uVar4 = (uint)((iVar3 + -4) - iVar1) >> 2;
                    /* catch() { ... } // from try @ 0027d7cc with catch @ 0027d930 */
                    /* try { // try from 0027d944 to 0037d94f has its CatchHandler @ 0027d998 */
    lVar15 = (long)iVar1;
                    /* try { // try from 0027d950 to 0037d95f has its CatchHandler @ 0027d988 */
    do {
      if (0 < iVar5) {
        lVar16 = 0;
        do {
          pcVar17 = (char *)(param_1 + lVar16);
          auVar29._0_4_ = (int)(short)pcVar17[4];
          auVar29._4_4_ = (int)(short)pcVar17[5];
          auVar29._8_4_ = (int)(short)pcVar17[6];
          auVar29._12_4_ = (int)(short)pcVar17[7];
          auVar29 = NEON_scvtf(auVar29,4);
          auVar33._0_4_ = (int)(short)pcVar17[8];
          auVar33._4_4_ = (int)(short)pcVar17[9];
          auVar33._8_4_ = (int)(short)pcVar17[10];
          auVar33._12_4_ = (int)(short)pcVar17[0xb];
          auVar31._0_4_ = (int)(short)pcVar17[0xc];
          auVar31._4_4_ = (int)(short)pcVar17[0xd];
          auVar31._8_4_ = (int)(short)pcVar17[0xe];
          auVar31._12_4_ = (int)(short)pcVar17[0xf];
                    /* try { // try from 0027da80 to 0037daaf has its CatchHandler @ 0027dafc */
          auVar34 = NEON_scvtf(auVar33,4);
          auVar31 = NEON_scvtf(auVar31,4);
          auVar32._0_4_ = ABS(auVar34._0_4_ * fVar35 + fVar36);
          auVar32._4_4_ = ABS(auVar34._4_4_ * fVar35 + fVar36);
          auVar32._8_4_ = ABS(auVar34._8_4_ * fVar35 + fVar36);
          auVar32._12_4_ = ABS(auVar34._12_4_ * fVar35 + fVar36);
          auVar25._0_4_ = (int)(short)*pcVar17;
          auVar25._4_4_ = (int)(short)pcVar17[1];
          auVar25._8_4_ = (int)(short)pcVar17[2];
          auVar25._12_4_ = (int)(short)pcVar17[3];
                    /* try { // try from 0027dab8 to 0037dad7 has its CatchHandler @ 0027db04 */
          auVar34 = NEON_scvtf(auVar25,4);
          fVar20 = ABS(auVar34._0_4_ * fVar35 + fVar36);
          fVar27 = ABS(auVar34._4_4_ * fVar35 + fVar36);
          auVar26._0_8_ = CONCAT44(fVar27,fVar20);
          auVar26._8_4_ = ABS(auVar34._8_4_ * fVar35 + fVar36);
          auVar26._12_4_ = ABS(auVar34._12_4_ * fVar35 + fVar36);
          auVar34 = auVar26;
          auVar25 = auVar32;
          if ((DAT_00531ec0 & 1) == 0) {
            iVar11 = __cxa_guard_acquire(&DAT_00531ec0);
            auVar34._8_8_ = auVar26._8_8_;
            auVar34._0_8_ = auVar26._0_8_;
                    /* try { // try from 0027dae0 to 0037dae3 has its CatchHandler @ 0027db00 */
            if (iVar11 == 0) goto LAB_0027d974;
                    /* try { // try from 0027dae4 to 0037db17 has its CatchHandler @ 0027d9a8 */
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
                    /* catch() { ... } // from try @ 0027da80 with catch @ 0027dafc */
                    /* catch() { ... } // from try @ 0027dae0 with catch @ 0027db00 */
                    /* catch() { ... } // from try @ 0027da2c with catch @ 0027db04
                       catch() { ... } // from try @ 0027dab8 with catch @ 0027db04 */
            iVar11 = (int)(fVar20 + (float)_DAT_00531e90);
            iVar39 = (int)(fVar27 + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar7._4_4_ = iVar39;
            auVar7._0_4_ = iVar11;
            auVar7._8_4_ = (int)(auVar26._8_4_ + (float)uRam0000000000531e98);
            auVar7._12_4_ = (int)(auVar26._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
            uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar7,4);
            uVar37 = (undefined4)uVar21;
            uVar38 = (undefined4)((ulong)uVar21 >> 0x20);
          }
          else {
LAB_0027d974:
                    /* try { // try from 0027d978 to 0037d97b has its CatchHandler @ 0027d984 */
                    /* catch() { ... } // from try @ 0027d978 with catch @ 0027d984 */
            iVar11 = (int)(auVar34._0_4_ + (float)_DAT_00531e90);
            iVar39 = (int)(auVar34._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
            auVar9._4_4_ = iVar39;
            auVar9._0_4_ = iVar11;
            auVar9._8_4_ = (int)(auVar34._8_4_ + (float)uRam0000000000531e98);
            auVar9._12_4_ = (int)(auVar34._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
                    /* catch() { ... } // from try @ 0027d950 with catch @ 0027d988 */
            uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar9,4);
            uVar37 = (undefined4)uVar21;
            uVar38 = (undefined4)((ulong)uVar21 >> 0x20);
          }
                    /* try { // try from 0027db18 to 0037dd07 has its CatchHandler @ 0027db18
                       catch() { ... } // from try @ 0027db18 with catch @ 0027db18
                       catch() { ... } // from try @ 0027dd4c with catch @ 0027db18
                       catch() { ... } // from try @ 0027ddd0 with catch @ 0027db18
                       catch() { ... } // from try @ 0027de10 with catch @ 0027db18 */
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
                    /* catch() { ... } // from try @ 0027d944 with catch @ 0027d998 */
                    /* try { // try from 0027d99c to 0037d99f has its CatchHandler @ 0027d9a4 */
                    /* catch() { ... } // from try @ 0027d99c with catch @ 0027d9a4 */
                    /* try { // try from 0027d9a8 to 0037da2b has its CatchHandler @ 0027d9a8
                       catch() { ... } // from try @ 0027d9a8 with catch @ 0027d9a8
                       catch() { ... } // from try @ 0027dae4 with catch @ 0027d9a8 */
          auVar23._0_8_ =
               CONCAT44((int)(ABS(auVar29._4_4_ * fVar35 + fVar36) + DAT_00531e90_4),
                        (int)(ABS(auVar29._0_4_ * fVar35 + fVar36) + _DAT_00531e90));
          auVar23._8_4_ = (int)(ABS(auVar29._8_4_ * fVar35 + fVar36) + (float)uRam0000000000531e98);
          auVar23._12_4_ = (int)(ABS(auVar29._12_4_ * fVar35 + fVar36) + uRam0000000000531e98._4_4_)
          ;
          uVar21 = NEON_uqxtn(auVar23._0_8_,auVar23,4);
          uStack_68 = (undefined4)uVar21;
          uStack_64 = (undefined4)((ulong)uVar21 >> 0x20);
          if (((DAT_00531ec0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec0), iVar11 != 0)) {
            auVar34 = NEON_fmov(0x3f000000,4);
            uRam0000000000531e98 = auVar34._8_8_;
            _DAT_00531e90 = auVar34._0_8_;
            __cxa_guard_release(&DAT_00531ec0);
          }
          uVar22 = auVar25._0_8_;
          iVar11 = (int)(auVar32._0_4_ + (float)_DAT_00531e90);
          iVar39 = (int)(auVar32._4_4_ + (float)((ulong)_DAT_00531e90 >> 0x20));
          auVar8._4_4_ = iVar39;
          auVar8._0_4_ = iVar11;
          auVar8._8_4_ = (int)(auVar32._8_4_ + (float)uRam0000000000531e98);
          auVar8._12_4_ = (int)(auVar32._12_4_ + (float)((ulong)uRam0000000000531e98 >> 0x20));
          uVar21 = NEON_uqxtn(CONCAT44(iVar39,iVar11),auVar8,4);
          if ((DAT_00531ec0 & 1) == 0) {
            iVar11 = __cxa_guard_acquire(&DAT_00531ec0);
            uVar22 = auVar25._0_8_;
            if (iVar11 != 0) {
              auVar34 = NEON_fmov(0x3f000000,4);
              uRam0000000000531e98 = auVar34._8_8_;
              _DAT_00531e90 = auVar34._0_8_;
              __cxa_guard_release(&DAT_00531ec0);
              uVar22 = auVar25._0_8_;
            }
          }
          auVar10._4_4_ = uVar38;
          auVar10._0_4_ = uVar37;
          auVar10._8_4_ = uStack_68;
          auVar10._12_4_ = uStack_64;
          puVar2 = (undefined8 *)(param_5 + lVar16);
          lVar16 = lVar16 + 0x10;
          uVar30 = NEON_uqxtn(uVar22,auVar10,2);
          auVar24._0_8_ =
               CONCAT44((int)(ABS(auVar31._4_4_ * fVar35 + fVar36) + DAT_00531e90_4),
                        (int)(ABS(auVar31._0_4_ * fVar35 + fVar36) + _DAT_00531e90));
          auVar24._8_4_ = (int)(ABS(auVar31._8_4_ * fVar35 + fVar36) + (float)uRam0000000000531e98);
          auVar24._12_4_ = (int)(ABS(auVar31._12_4_ * fVar35 + fVar36) + uRam0000000000531e98._4_4_)
          ;
          uVar22 = NEON_uqxtn(auVar24._0_8_,auVar24,4);
          auVar28._8_8_ = uVar22;
          auVar28._0_8_ = uVar21;
          uVar21 = NEON_uqxtn(uVar22,auVar28,2);
                    /* try { // try from 0027da2c to 0037da37 has its CatchHandler @ 0027db04 */
          puVar2[1] = uVar21;
          *puVar2 = uVar30;
        } while ((int)lVar16 < iVar5);
      }
      iVar11 = iVar1;
      if (iVar1 < iVar3 + -3) {
        pcVar17 = (char *)(param_1 + lVar15);
        puVar18 = (undefined1 *)(param_5 + lVar15);
        do {
          lVar16 = lrintf(ABS(fVar36 + (float)(int)*pcVar17 * fVar35));
          uVar12 = (uint)lVar16;
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar16 = lrintf(ABS(fVar36 + (float)(int)pcVar17[1] * fVar35));
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          *puVar18 = (char)uVar12;
          puVar18[1] = (char)uVar13;
          lVar16 = lrintf(ABS(fVar36 + (float)(int)pcVar17[2] * fVar35));
          uVar12 = (uint)lVar16;
          if (0xff < uVar12) {
            uVar12 = -(uint)(0 < (int)uVar12);
          }
          lVar16 = lrintf(ABS(fVar36 + (float)(int)pcVar17[3] * fVar35));
          uVar13 = (uint)lVar16;
          if (0xff < uVar13) {
            uVar13 = -(uint)(0 < (int)uVar13);
          }
          pcVar17 = pcVar17 + 4;
          puVar18[2] = (char)uVar12;
          puVar18[3] = (char)uVar13;
          puVar18 = puVar18 + 4;
          iVar11 = iVar1 + 4 + uVar4 * 4;
        } while (pcVar17 != (char *)(param_1 + lVar15 + 4 + (ulong)uVar4 * 4));
      }
      if (iVar11 < iVar3) {
        lVar16 = 0;
        do {
          lVar14 = lrintf(ABS(fVar36 + (float)(int)*(char *)(param_1 + iVar11 + lVar16) * fVar35));
          cVar6 = (char)lVar14;
          if (0xff < (uint)lVar14) {
            cVar6 = -(0 < (int)(uint)lVar14);
          }
          *(char *)(param_5 + iVar11 + lVar16) = cVar6;
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar3 + -1) - iVar11) + 1);
      }
      iVar19 = iVar19 + -1;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar19 != 0);
  }
                    /* try { // try from 0027dd08 to 0037dd17 has its CatchHandler @ 0027dd98 */
  return;
}


==================================================================

### FUNC 0027dd14 (692 bytes) name=FUN_0027dd14

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027dd14(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  int iVar1;
  undefined1 auVar2 [16];
  undefined8 uVar3;
  undefined8 uVar4;
  undefined1 auVar5 [16];
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  undefined2 uVar11;
  int iVar12;
  undefined8 *puVar13;
  long lVar14;
  undefined8 *puVar15;
  undefined1 uVar16;
  undefined1 uVar17;
  undefined1 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  int iVar21;
  
                    /* try { // try from 0027dd18 to 0037dd4b has its CatchHandler @ 0027dda0 */
  iVar1 = *param_7;
  iVar21 = param_7[1];
                    /* try { // try from 0027dd4c to 0037ddb3 has its CatchHandler @ 0027db18 */
  if (iVar21 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar12 = 0;
      }
      else {
                    /* catch() { ... } // from try @ 0027dd08 with catch @ 0027dd98 */
        iVar12 = 0;
        puVar13 = param_1;
        puVar15 = param_5;
                    /* catch() { ... } // from try @ 0027dd18 with catch @ 0027dda0 */
        do {
          uVar20 = puVar13[1];
          uVar19 = *puVar13;
          uVar4 = puVar13[3];
          uVar3 = puVar13[2];
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
                    /* try { // try from 0027ddb4 to 0037ddbf has its CatchHandler @ 0027de08 */
                    /* try { // try from 0027ddc0 to 0037ddcf has its CatchHandler @ 0027ddf8 */
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
                    /* try { // try from 0027ddd0 to 0037de0b has its CatchHandler @ 0027db18 */
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
                    /* catch() { ... } // from try @ 0027ddc0 with catch @ 0027ddf8 */
          iVar9 = (int)((float)uVar19 +
                       (float)CONCAT13((byte)((ulong)uVar19 >> 0x18) &
                                       (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar19 >> 0x10) &
                                                (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar19 >> 8) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         (byte)uVar19 & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar6 = (int)((float)((ulong)uVar19 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar19 >> 0x38) &
                                       (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar19 >> 0x30) &
                                                (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar19 >> 0x28) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         (byte)((ulong)uVar19 >> 0x20) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar16 = (undefined1)((uint)iVar6 >> 8);
          uVar17 = (undefined1)((uint)iVar6 >> 0x10);
          uVar18 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)((float)uVar20 +
                       (float)CONCAT13((byte)((ulong)uVar20 >> 0x18) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar20 >> 0x10) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar20 >> 8) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         (byte)uVar20 & (byte)uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar8 = (int)((float)((ulong)uVar20 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar20 >> 0x38) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar20 >> 0x30) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar20 >> 0x28) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                         (byte)((ulong)uVar20 >> 0x20) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20)))));
          auVar5[4] = (char)iVar6;
          auVar5._0_4_ = iVar9;
          auVar5[5] = uVar16;
          auVar5[6] = uVar17;
          auVar5[7] = uVar18;
          auVar5[8] = (char)iVar7;
          auVar5[9] = (char)((uint)iVar7 >> 8);
          auVar5[10] = (char)((uint)iVar7 >> 0x10);
          auVar5[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar5[0xc] = (char)iVar8;
          auVar5[0xd] = (char)((uint)iVar8 >> 8);
          auVar5[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar5[0xf] = (char)((uint)iVar8 >> 0x18);
                    /* catch() { ... } // from try @ 0027ddb4 with catch @ 0027de08 */
          uVar19 = NEON_sqxtn(CONCAT17(uVar18,CONCAT16(uVar17,CONCAT15(uVar16,CONCAT14((char)iVar6,
                                                                                       iVar9)))),
                              auVar5,4);
                    /* try { // try from 0027de0c to 0037de0f has its CatchHandler @ 0027de18 */
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
                    /* try { // try from 0027de10 to 0037de1b has its CatchHandler @ 0027db18 */
                    /* catch() { ... } // from try @ 0027de0c with catch @ 0027de18 */
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar12 = iVar12 + 8;
          puVar13 = puVar13 + 4;
          iVar9 = (int)((float)uVar3 +
                       (float)CONCAT13((byte)((ulong)uVar3 >> 0x18) &
                                       (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar3 >> 0x10) &
                                                (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar3 >> 8) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         (byte)uVar3 & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar6 = (int)((float)((ulong)uVar3 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar3 >> 0x38) &
                                       (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar3 >> 0x30) &
                                                (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar3 >> 0x28) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         (byte)((ulong)uVar3 >> 0x20) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar16 = (undefined1)((uint)iVar6 >> 8);
          uVar17 = (undefined1)((uint)iVar6 >> 0x10);
          uVar18 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)((float)uVar4 +
                       (float)CONCAT13((byte)((ulong)uVar4 >> 0x18) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar4 >> 0x10) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar4 >> 8) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         (byte)uVar4 & (byte)uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar8 = (int)((float)((ulong)uVar4 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar4 >> 0x38) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar4 >> 0x30) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar4 >> 0x28) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                         (byte)((ulong)uVar4 >> 0x20) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20)))));
          auVar2[4] = (char)iVar6;
          auVar2._0_4_ = iVar9;
          auVar2[5] = uVar16;
          auVar2[6] = uVar17;
          auVar2[7] = uVar18;
          auVar2[8] = (char)iVar7;
          auVar2[9] = (char)((uint)iVar7 >> 8);
          auVar2[10] = (char)((uint)iVar7 >> 0x10);
          auVar2[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar2[0xc] = (char)iVar8;
          auVar2[0xd] = (char)((uint)iVar8 >> 8);
          auVar2[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar2[0xf] = (char)((uint)iVar8 >> 0x18);
          uVar3 = NEON_sqxtn(CONCAT17(uVar18,CONCAT16(uVar17,CONCAT15(uVar16,CONCAT14((char)iVar6,
                                                                                      iVar9)))),
                             auVar2,4);
          puVar15[1] = uVar3;
          *puVar15 = uVar19;
          puVar15 = puVar15 + 2;
        } while (iVar12 < iVar1 + -7);
      }
      if (iVar12 < iVar1) {
        lVar14 = 0;
        do {
          lVar10 = lrintf(*(float *)((long)param_1 + lVar14 * 4 + (long)iVar12 * 4));
          uVar11 = (undefined2)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar11 = 0x7fff, (int)lVar10 < 1)) {
            uVar11 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar14 * 2 + (long)iVar12 * 2) = uVar11;
          lVar14 = lVar14 + 1;
        } while (lVar14 != (ulong)(uint)((iVar1 + -1) - iVar12) + 1);
      }
      iVar21 = iVar21 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 0027dfc8 (740 bytes) name=FUN_0027dfc8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027dfc8(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  int iVar2;
  long lVar3;
  int iVar4;
  int *piVar5;
  long lVar6;
  short *psVar7;
  float fVar8;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar14 [16];
  undefined8 uVar17;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  float fVar18;
  float fVar23;
  undefined1 auVar19 [12];
  float fVar24;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  int iVar28;
  undefined1 auVar9 [12];
  undefined1 auVar13 [16];
  undefined1 auVar20 [16];
  
  iVar1 = *param_7;
  iVar28 = param_7[1];
  fVar26 = (float)*param_8;
  fVar27 = (float)param_8[1];
  if (iVar28 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar4 = 0;
      }
      else {
        iVar4 = 0;
        piVar5 = (int *)(param_5 + 0x10);
        psVar7 = param_1;
        do {
          auVar21._0_4_ = (int)psVar7[4];
          auVar21._4_4_ = (int)psVar7[5];
          auVar21._8_4_ = (int)psVar7[6];
          auVar21._12_4_ = (int)psVar7[7];
          auVar22 = NEON_scvtf(auVar21,4);
          auVar14._0_4_ = (int)*psVar7;
          auVar14._4_4_ = (int)psVar7[1];
          auVar14._8_4_ = (int)psVar7[2];
          auVar14._12_4_ = (int)psVar7[3];
          fVar18 = auVar22._0_4_ * fVar26 + fVar27;
          fVar23 = auVar22._4_4_ * fVar26 + fVar27;
          fVar24 = auVar22._8_4_ * fVar26 + fVar27;
          fVar25 = auVar22._12_4_ * fVar26 + fVar27;
          auVar14 = NEON_scvtf(auVar14,4);
          auVar22._0_8_ = CONCAT44(auVar14._4_4_ * fVar26 + fVar27,auVar14._0_4_ * fVar26 + fVar27);
          auVar22._8_4_ = auVar14._8_4_ * fVar26 + fVar27;
          auVar22._12_4_ = auVar14._12_4_ * fVar26 + fVar27;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar17 = auVar22._8_8_;
            iVar2 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar22._8_8_ = uVar17;
            if (iVar2 != 0) {
              auVar15._8_4_ = 0x80000000;
              auVar15._0_8_ = 0x8000000080000000;
              auVar15._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar15._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar2 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar2 != 0) {
              auVar10._8_4_ = 0x3f000000;
              auVar10._0_8_ = 0x3f0000003f000000;
              auVar10._12_4_ = 0x3f000000;
              uRam0000000000531ea8 = auVar10._8_8_;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          fVar8 = (float)CONCAT13(auVar22[3] & bRam0000000000531eb3 |
                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                  CONCAT12(auVar22[2] & bRam0000000000531eb2 |
                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                           CONCAT11(auVar22[1] & DAT_00531eb0_1 |
                                                    (byte)((ulong)_DAT_00531ea0 >> 8),
                                                    auVar22[0] & DAT_00531eb0 | (byte)_DAT_00531ea0)
                                          ));
          auVar19._0_8_ =
               CONCAT17(auVar22[7] & bRam0000000000531eb7 | (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16(auVar22[6] & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15(auVar22[5] & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(auVar22[4] & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar8))));
          auVar19[8] = auVar22[8] & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar19[9] = auVar22[9] & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar19[10] = auVar22[10] & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar19[0xb] = auVar22[0xb] & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar20[0xc] = auVar22[0xc] & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar20._0_12_ = auVar19;
          auVar20[0xd] = auVar22[0xd] & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar20[0xe] = auVar22[0xe] & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar20[0xf] = auVar22[0xf] & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar11._0_8_ =
               CONCAT44((int)(auVar22._4_4_ + (float)((ulong)auVar19._0_8_ >> 0x20)),
                        (int)(auVar22._0_4_ + fVar8));
          auVar11._8_4_ = (int)(auVar22._8_4_ + auVar19._8_4_);
          auVar11._12_4_ = (int)(auVar22._12_4_ + auVar20._12_4_);
          *(long *)(piVar5 + -2) = auVar11._8_8_;
          *(undefined8 *)(piVar5 + -4) = auVar11._0_8_;
          if (((DAT_00531ed0 & 1) == 0) && (iVar2 = __cxa_guard_acquire(&DAT_00531ed0), iVar2 != 0))
          {
            auVar16._8_4_ = 0x80000000;
            auVar16._0_8_ = 0x8000000080000000;
            auVar16._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar16._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar2 = __cxa_guard_acquire(&DAT_00531ec8), iVar2 != 0))
          {
            auVar12._8_4_ = 0x3f000000;
            auVar12._0_8_ = 0x3f0000003f000000;
            auVar12._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar12._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar4 = iVar4 + 8;
          psVar7 = psVar7 + 8;
          fVar8 = (float)CONCAT13((byte)((uint)fVar18 >> 0x18) & bRam0000000000531eb3 |
                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                  CONCAT12((byte)((uint)fVar18 >> 0x10) & bRam0000000000531eb2 |
                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                           CONCAT11((byte)((uint)fVar18 >> 8) & DAT_00531eb0_1 |
                                                    (byte)((ulong)_DAT_00531ea0 >> 8),
                                                    SUB41(fVar18,0) & DAT_00531eb0 |
                                                    (byte)_DAT_00531ea0)));
          auVar9._0_8_ = CONCAT17((byte)((uint)fVar23 >> 0x18) & bRam0000000000531eb7 |
                                  (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                  CONCAT16((byte)((uint)fVar23 >> 0x10) & bRam0000000000531eb6 |
                                           (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                           CONCAT15((byte)((uint)fVar23 >> 8) & bRam0000000000531eb5
                                                    | (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                    CONCAT14(SUB41(fVar23,0) & bRam0000000000531eb4
                                                             | (byte)((ulong)_DAT_00531ea0 >> 0x20),
                                                             fVar8))));
          auVar9[8] = SUB41(fVar24,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar9[9] = (byte)((uint)fVar24 >> 8) & uRam0000000000531eb8._1_1_ |
                      (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar9[10] = (byte)((uint)fVar24 >> 0x10) & bRam0000000000531eba |
                       (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar9[0xb] = (byte)((uint)fVar24 >> 0x18) & bRam0000000000531ebb |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar13[0xc] = SUB41(fVar25,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar13._0_12_ = auVar9;
          auVar13[0xd] = (byte)((uint)fVar25 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar13[0xe] = (byte)((uint)fVar25 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar13[0xf] = (byte)((uint)fVar25 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          piVar5[2] = (int)(fVar24 + auVar9._8_4_);
          piVar5[3] = (int)(fVar25 + auVar13._12_4_);
          *piVar5 = (int)(fVar18 + fVar8);
          piVar5[1] = (int)(fVar23 + (float)((ulong)auVar9._0_8_ >> 0x20));
          piVar5 = piVar5 + 8;
        } while (iVar4 < iVar1 + -7);
      }
      if (iVar4 < iVar1) {
        lVar6 = 0;
        do {
          lVar3 = lrintf(fVar27 + (float)(int)param_1[iVar4 + lVar6] * fVar26);
          *(int *)(param_5 + (long)iVar4 * 4 + lVar6 * 4) = (int)lVar3;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar1 + -1) - iVar4) + 1);
      }
      iVar28 = iVar28 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar28 != 0);
  }
  return;
}


==================================================================

### FUNC 0027e2ac (768 bytes) name=FUN_0027e2ac

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027e2ac(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  undefined1 auVar3 [16];
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  ulong uVar9;
  ulong uVar10;
  short *psVar11;
  undefined2 uVar12;
  undefined8 *puVar13;
  long lVar14;
  float fVar15;
  undefined8 uVar16;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined8 uVar25;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar26;
  float fVar29;
  float fVar30;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar31;
  undefined1 uVar32;
  undefined1 uVar33;
  undefined1 uVar34;
  float fVar35;
  float fVar36;
  int iVar37;
  undefined1 auVar17 [12];
  undefined1 auVar20 [16];
  
  iVar2 = *param_7;
  iVar37 = param_7[1];
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar37 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        uVar9 = 0;
      }
      else {
        uVar9 = 0;
        psVar11 = param_1;
        puVar13 = param_5;
        do {
                    /* try { // try from 0027e460 to 0037e4f3 has its CatchHandler @ 0027e3ec */
          auVar27._0_4_ = (int)psVar11[4];
          auVar27._4_4_ = (int)psVar11[5];
          auVar27._8_4_ = (int)psVar11[6];
          auVar27._12_4_ = (int)psVar11[7];
          auVar28 = NEON_scvtf(auVar27,4);
          auVar22._0_4_ = (int)*psVar11;
          auVar22._4_4_ = (int)psVar11[1];
          auVar22._8_4_ = (int)psVar11[2];
          auVar22._12_4_ = (int)psVar11[3];
          fVar26 = auVar28._0_4_ * fVar35 + fVar36;
          fVar29 = auVar28._4_4_ * fVar35 + fVar36;
          fVar30 = auVar28._8_4_ * fVar35 + fVar36;
          fVar31 = auVar28._12_4_ * fVar35 + fVar36;
          auVar22 = NEON_scvtf(auVar22,4);
          auVar28._0_8_ = CONCAT44(auVar22._4_4_ * fVar35 + fVar36,auVar22._0_4_ * fVar35 + fVar36);
          auVar28._8_4_ = auVar22._8_4_ * fVar35 + fVar36;
          auVar28._12_4_ = auVar22._12_4_ * fVar35 + fVar36;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar25 = auVar28._8_8_;
            iVar7 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar28._8_8_ = uVar25;
            if (iVar7 != 0) {
              auVar23._8_4_ = 0x80000000;
              auVar23._0_8_ = 0x8000000080000000;
              auVar23._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar23._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar18._8_4_ = 0x3f000000;
            auVar18._0_8_ = 0x3f0000003f000000;
            auVar18._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar18._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar7 = (int)(auVar28._0_4_ +
                       (float)CONCAT13(auVar28[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12(auVar28[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11(auVar28[1] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         auVar28[0] & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar4 = (int)(auVar28._4_4_ +
                       (float)CONCAT13(auVar28[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12(auVar28[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11(auVar28[5] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         auVar28[4] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar32 = (undefined1)((uint)iVar4 >> 8);
          uVar33 = (undefined1)((uint)iVar4 >> 0x10);
          uVar34 = (undefined1)((uint)iVar4 >> 0x18);
          iVar5 = (int)(auVar28._8_4_ +
                       (float)CONCAT13(auVar28[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12(auVar28[10] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11(auVar28[9] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         auVar28[8] & (byte)_uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar6 = (int)(auVar28._12_4_ +
                       (float)CONCAT13(auVar28[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12(auVar28[0xe] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11(auVar28[0xd] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 0x28
                                                               ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x28),
                                                  auVar28[0xc] &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar3[4] = (char)iVar4;
          auVar3._0_4_ = iVar7;
          auVar3[5] = uVar32;
          auVar3[6] = uVar33;
          auVar3[7] = uVar34;
          auVar3[8] = (char)iVar5;
          auVar3[9] = (char)((uint)iVar5 >> 8);
          auVar3[10] = (char)((uint)iVar5 >> 0x10);
          auVar3[0xb] = (char)((uint)iVar5 >> 0x18);
          auVar3[0xc] = (char)iVar6;
          auVar3[0xd] = (char)((uint)iVar6 >> 8);
          auVar3[0xe] = (char)((uint)iVar6 >> 0x10);
          auVar3[0xf] = (char)((uint)iVar6 >> 0x18);
          uVar25 = NEON_sqxtn(CONCAT17(uVar34,CONCAT16(uVar33,CONCAT15(uVar32,CONCAT14((char)iVar4,
                                                                                       iVar7)))),
                              auVar3,4);
                    /* catch() { ... } // from try @ 0027e444 with catch @ 0027e4c4 */
          if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar24._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
                    /* catch() { ... } // from try @ 0027e438 with catch @ 0027e4d4 */
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar19._8_4_ = 0x3f000000;
            auVar19._0_8_ = 0x3f0000003f000000;
            auVar19._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar19._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
                    /* try { // try from 0027e3ec to 0037e437 has its CatchHandler @ 0027e3ec
                       catch() { ... } // from try @ 0027e3ec with catch @ 0027e3ec
                       catch() { ... } // from try @ 0027e460 with catch @ 0027e3ec */
          uVar1 = (int)uVar9 + 8;
          uVar9 = (ulong)uVar1;
          psVar11 = psVar11 + 8;
          fVar15 = (float)CONCAT13((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar26 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar26,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar17._0_8_ =
               CONCAT17((byte)((uint)fVar29 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar29 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar29 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar29,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar15))));
          auVar17[8] = SUB41(fVar30,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar17[9] = (byte)((uint)fVar30 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar17[10] = (byte)((uint)fVar30 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar17[0xb] = (byte)((uint)fVar30 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar20[0xc] = SUB41(fVar31,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar20._0_12_ = auVar17;
          auVar20[0xd] = (byte)((uint)fVar31 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar20[0xe] = (byte)((uint)fVar31 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar20[0xf] = (byte)((uint)fVar31 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
                    /* try { // try from 0027e438 to 0037e443 has its CatchHandler @ 0027e4d4 */
          auVar21._0_8_ =
               CONCAT44((int)(fVar29 + (float)((ulong)auVar17._0_8_ >> 0x20)),(int)(fVar26 + fVar15)
                       );
          auVar21._8_4_ = (int)(fVar30 + auVar17._8_4_);
          auVar21._12_4_ = (int)(fVar31 + auVar20._12_4_);
          uVar16 = NEON_sqxtn(auVar21._0_8_,auVar21,4);
                    /* try { // try from 0027e444 to 0037e45f has its CatchHandler @ 0027e4c4 */
          puVar13[1] = uVar16;
          *puVar13 = uVar25;
          puVar13 = puVar13 + 2;
        } while ((int)uVar1 < iVar2 + -7);
      }
      if ((int)uVar9 < iVar2) {
        lVar14 = 0;
                    /* catch() { ... } // from try @ 0027e60c with catch @ 0027e4f8 */
        uVar10 = -(uVar9 >> 0x1f) & 0xfffffffe00000000 | uVar9 << 1;
        do {
                    /* try { // try from 0027e524 to 0037e52f has its CatchHandler @ 0027e664 */
          lVar8 = lrintf(fVar36 + (float)(int)*(short *)((long)param_1 + lVar14 + uVar10) * fVar35);
                    /* try { // try from 0027e530 to 0037e543 has its CatchHandler @ 0027e66c */
          uVar12 = (undefined2)lVar8;
          if ((0xffff < (int)lVar8 + 0x8000U) && (uVar12 = 0x7fff, (int)lVar8 < 1)) {
            uVar12 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar14 + uVar10) = uVar12;
          lVar14 = lVar14 + 2;
        } while (lVar14 != ((ulong)(uint)((iVar2 + -1) - (int)uVar9) + 1) * 2);
      }
      iVar37 = iVar37 + -1;
                    /* try { // try from 0027e560 to 0037e573 has its CatchHandler @ 0027e65c */
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
                    /* try { // try from 0027e578 to 0037e5a3 has its CatchHandler @ 0027e66c */
    } while (iVar37 != 0);
  }
  return;
}


==================================================================

### FUNC 0027e5ac (464 bytes) name=FUN_0027e5ac

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027e5ac(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7)

{
  uint uVar1;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  int iVar10;
  long lVar11;
  ulong uVar12;
  undefined8 *puVar13;
  long lVar14;
  undefined8 *puVar15;
  ulong uVar16;
  float fVar17;
  float fVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  int iVar21;
  
                    /* try { // try from 0027e5c4 to 0037e5e3 has its CatchHandler @ 0027e660 */
  iVar21 = param_7[1];
  iVar2 = *param_7;
                    /* try { // try from 0027e5e8 to 0037e60b has its CatchHandler @ 0027e66c */
  if (iVar21 != 0) {
                    /* try { // try from 0027e60c to 0037e68b has its CatchHandler @ 0027e4f8 */
    do {
      if (iVar2 + -3 < 1) {
        uVar16 = 0;
      }
      else {
        uVar16 = 0;
        puVar13 = param_5;
        puVar15 = param_1;
        do {
          uVar20 = puVar15[1];
          uVar19 = *puVar15;
          if ((DAT_00531ed0 & 1) == 0) {
            iVar10 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar10 != 0) {
              uRam0000000000531eb8 = 0x8000000080000000;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar10 = __cxa_guard_acquire(&DAT_00531ec8);
                    /* catch() { ... } // from try @ 0027e560 with catch @ 0027e65c */
            if (iVar10 != 0) {
                    /* catch() { ... } // from try @ 0027e5c4 with catch @ 0027e660 */
                    /* catch() { ... } // from try @ 0027e524 with catch @ 0027e664 */
                    /* catch() { ... } // from try @ 0027e530 with catch @ 0027e66c
                       catch() { ... } // from try @ 0027e578 with catch @ 0027e66c
                       catch() { ... } // from try @ 0027e5e8 with catch @ 0027e66c */
              uRam0000000000531ea8 = 0x3f0000003f000000;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          uVar1 = (int)uVar16 + 4;
          uVar16 = (ulong)uVar1;
          puVar15 = puVar15 + 2;
          uVar12 = (ulong)_DAT_00531eb0 >> 0x20;
          uVar3 = (ulong)_DAT_00531eb0 >> 0x28;
          uVar4 = (ulong)_DAT_00531eb0 >> 0x30;
          uVar5 = (ulong)_DAT_00531eb0 >> 0x38;
          fVar17 = (float)CONCAT13((byte)((ulong)uVar19 >> 0x18) &
                                   (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((ulong)uVar19 >> 0x10) &
                                            (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((ulong)uVar19 >> 8) &
                                                     (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     (byte)uVar19 & (byte)_DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          uVar6 = (ulong)_DAT_00531ea0 >> 0x20;
          uVar7 = (ulong)_DAT_00531ea0 >> 0x28;
          uVar8 = (ulong)_DAT_00531ea0 >> 0x30;
          uVar9 = (ulong)_DAT_00531ea0 >> 0x38;
          fVar18 = (float)CONCAT13((byte)((ulong)uVar20 >> 0x18) &
                                   (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                   (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                   CONCAT12((byte)((ulong)uVar20 >> 0x10) &
                                            (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                            (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                            CONCAT11((byte)((ulong)uVar20 >> 8) &
                                                     (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                     (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                     (byte)uVar20 & (byte)uRam0000000000531eb8 |
                                                     (byte)uRam0000000000531ea8)));
          puVar13[1] = CONCAT44((int)((float)((ulong)uVar20 >> 0x20) +
                                     (float)(CONCAT17((byte)((ulong)uVar20 >> 0x38) &
                                                      (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                                      (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                      CONCAT16((byte)((ulong)uVar20 >> 0x30) &
                                                               (byte)((ulong)uRam0000000000531eb8 >>
                                                                     0x30) |
                                                               (byte)((ulong)uRam0000000000531ea8 >>
                                                                     0x30),
                                                               CONCAT15((byte)((ulong)uVar20 >> 0x28
                                                                              ) & (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  CONCAT14((byte)((ulong)uVar20 >> 0x20) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x20) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20),fVar18)))) >> 0x20)),
                                (int)((float)uVar20 + fVar18));
          *puVar13 = CONCAT44((int)((float)((ulong)uVar19 >> 0x20) +
                                   (float)(CONCAT17((byte)((ulong)uVar19 >> 0x38) & (byte)uVar5 |
                                                    (byte)uVar9,
                                                    CONCAT16((byte)((ulong)uVar19 >> 0x30) &
                                                             (byte)uVar4 | (byte)uVar8,
                                                             CONCAT15((byte)((ulong)uVar19 >> 0x28)
                                                                      & (byte)uVar3 | (byte)uVar7,
                                                                      CONCAT14((byte)((ulong)uVar19
                                                                                     >> 0x20) &
                                                                               (byte)uVar12 |
                                                                               (byte)uVar6,fVar17)))
                                                   ) >> 0x20)),(int)((float)uVar19 + fVar17));
          puVar13 = puVar13 + 2;
        } while ((int)uVar1 < iVar2 + -3);
      }
      if ((int)uVar16 < iVar2) {
        uVar12 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
        lVar14 = 0;
        do {
          lVar11 = lrintf(*(float *)((long)param_1 + lVar14 + uVar12));
          *(int *)((long)param_5 + lVar14 + uVar12) = (int)lVar11;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((ulong)(uint)((iVar2 + -1) - (int)uVar16) + 1) * 4);
      }
      iVar21 = iVar21 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar21 != 0);
  }
  return;
}


==================================================================

### FUNC 0027e77c (536 bytes) name=FUN_0027e77c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027e77c(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  int iVar10;
  long lVar11;
  ulong uVar12;
  undefined8 *puVar13;
  long lVar14;
  undefined8 *puVar15;
  ulong uVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  int iVar25;
  
  iVar25 = param_7[1];
  iVar2 = *param_7;
  fVar23 = (float)*param_8;
  fVar24 = (float)param_8[1];
  if (iVar25 != 0) {
    do {
      if (iVar2 + -3 < 1) {
        uVar16 = 0;
      }
      else {
        uVar16 = 0;
        puVar13 = param_5;
        puVar15 = param_1;
        do {
          fVar19 = fVar24 + (float)*puVar15 * fVar23;
          fVar20 = fVar24 + (float)((ulong)*puVar15 >> 0x20) * fVar23;
          fVar21 = fVar24 + (float)puVar15[1] * fVar23;
          fVar22 = fVar24 + (float)((ulong)puVar15[1] >> 0x20) * fVar23;
          if ((DAT_00531ed0 & 1) == 0) {
            iVar10 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar10 != 0) {
              uRam0000000000531eb8 = 0x8000000080000000;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar10 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar10 != 0) {
              uRam0000000000531ea8 = 0x3f0000003f000000;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          uVar1 = (int)uVar16 + 4;
          uVar16 = (ulong)uVar1;
          puVar15 = puVar15 + 2;
          uVar12 = (ulong)_DAT_00531eb0 >> 0x20;
          uVar3 = (ulong)_DAT_00531eb0 >> 0x28;
          uVar4 = (ulong)_DAT_00531eb0 >> 0x30;
          uVar5 = (ulong)_DAT_00531eb0 >> 0x38;
          fVar17 = (float)CONCAT13((byte)((uint)fVar19 >> 0x18) &
                                   (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar19 >> 0x10) &
                                            (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar19 >> 8) &
                                                     (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar19,0) & (byte)_DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          uVar6 = (ulong)_DAT_00531ea0 >> 0x20;
          uVar7 = (ulong)_DAT_00531ea0 >> 0x28;
          uVar8 = (ulong)_DAT_00531ea0 >> 0x30;
          uVar9 = (ulong)_DAT_00531ea0 >> 0x38;
          fVar18 = (float)CONCAT13((byte)((uint)fVar21 >> 0x18) &
                                   (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                   (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                   CONCAT12((byte)((uint)fVar21 >> 0x10) &
                                            (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                            (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                            CONCAT11((byte)((uint)fVar21 >> 8) &
                                                     (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                     (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                     SUB41(fVar21,0) & (byte)uRam0000000000531eb8 |
                                                     (byte)uRam0000000000531ea8)));
          puVar13[1] = CONCAT44((int)(fVar22 + (float)(CONCAT17((byte)((uint)fVar22 >> 0x18) &
                                                                (byte)((ulong)uRam0000000000531eb8
                                                                      >> 0x38) |
                                                                (byte)((ulong)uRam0000000000531ea8
                                                                      >> 0x38),
                                                                CONCAT16((byte)((uint)fVar22 >> 0x10
                                                                               ) & (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x30) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                  CONCAT15((byte)((uint)fVar22 >> 8) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x28) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                           CONCAT14(SUB41(fVar22,0) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20),fVar18
                                                  )))) >> 0x20)),(int)(fVar21 + fVar18));
          *puVar13 = CONCAT44((int)(fVar20 + (float)(CONCAT17((byte)((uint)fVar20 >> 0x18) &
                                                              (byte)uVar5 | (byte)uVar9,
                                                              CONCAT16((byte)((uint)fVar20 >> 0x10)
                                                                       & (byte)uVar4 | (byte)uVar8,
                                                                       CONCAT15((byte)((uint)fVar20
                                                                                      >> 8) &
                                                                                (byte)uVar3 |
                                                                                (byte)uVar7,
                                                                                CONCAT14(SUB41(
                                                  fVar20,0) & (byte)uVar12 | (byte)uVar6,fVar17))))
                                                  >> 0x20)),(int)(fVar19 + fVar17));
          puVar13 = puVar13 + 2;
        } while ((int)uVar1 < iVar2 + -3);
      }
      if ((int)uVar16 < iVar2) {
        uVar12 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
        lVar14 = 0;
        do {
          lVar11 = lrintf(fVar24 + *(float *)((long)param_1 + lVar14 + uVar12) * fVar23);
          *(int *)((long)param_5 + lVar14 + uVar12) = (int)lVar11;
          lVar14 = lVar14 + 4;
        } while (lVar14 != ((ulong)(uint)((iVar2 + -1) - (int)uVar16) + 1) * 4);
      }
      iVar25 = iVar25 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffc));
    } while (iVar25 != 0);
  }
  return;
}


==================================================================

### FUNC 0027e994 (940 bytes) name=FUN_0027e994

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027e994(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7,double *param_8)

{
  char *pcVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  int *piVar7;
  char *pcVar8;
  int iVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined4 *puVar12;
  float fVar13;
  undefined1 auVar16 [12];
  undefined8 uVar14;
  undefined1 auVar17 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar27;
  float fVar28;
  undefined1 auVar26 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  int iVar36;
  undefined1 auVar15 [12];
  undefined1 auVar18 [16];
  undefined1 auVar21 [16];
  
  iVar36 = param_7[1];
  iVar2 = *param_7;
  fVar34 = (float)*param_8;
  fVar35 = (float)param_8[1];
  if (iVar36 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        iVar9 = 0;
      }
      else {
        iVar9 = 0;
        piVar7 = (int *)(param_5 + 0x10);
        puVar10 = param_1;
        do {
          uVar14 = *puVar10;
          auVar26._0_4_ = (int)(short)(char)uVar14;
          auVar26._4_4_ = (int)(short)(char)((ulong)uVar14 >> 8);
          auVar26._8_4_ = (int)(short)(char)((ulong)uVar14 >> 0x10);
          auVar26._12_4_ = (int)(short)(char)((ulong)uVar14 >> 0x18);
          auVar26 = NEON_scvtf(auVar26,4);
          auVar22._0_4_ = (int)(short)(char)((ulong)uVar14 >> 0x20);
          auVar22._4_4_ = (int)(short)(char)((ulong)uVar14 >> 0x28);
          auVar22._8_4_ = (int)(short)(char)((ulong)uVar14 >> 0x30);
          auVar22._12_4_ = (int)(short)(char)((ulong)uVar14 >> 0x38);
          auVar22 = NEON_scvtf(auVar22,4);
          fVar30 = fVar35 + auVar26._0_4_ * fVar34;
          fVar31 = fVar35 + auVar26._4_4_ * fVar34;
          fVar32 = fVar35 + auVar26._8_4_ * fVar34;
          fVar33 = fVar35 + auVar26._12_4_ * fVar34;
          fVar25 = fVar35 + auVar22._0_4_ * fVar34;
          fVar27 = fVar35 + auVar22._4_4_ * fVar34;
          fVar28 = fVar35 + auVar22._8_4_ * fVar34;
          fVar29 = fVar35 + auVar22._12_4_ * fVar34;
          if ((DAT_00531ed0 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar4 != 0) {
              auVar23._8_4_ = 0x80000000;
              auVar23._0_8_ = 0x8000000080000000;
              auVar23._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar23._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar4 != 0) {
              auVar17._8_4_ = 0x3f000000;
              auVar17._0_8_ = 0x3f0000003f000000;
              auVar17._12_4_ = 0x3f000000;
              _uRam0000000000531ea8 = auVar17._8_8_;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          fVar13 = (float)CONCAT13((byte)((uint)fVar30 >> 0x18) &
                                   (byte)((ulong)_DAT_00531eb0 >> 0x18) | bRam0000000000531ea3,
                                   CONCAT12((byte)((uint)fVar30 >> 0x10) &
                                            (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            bRam0000000000531ea2,
                                            CONCAT11((byte)((uint)fVar30 >> 8) &
                                                     (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                     DAT_00531ea0_1,
                                                     SUB41(fVar30,0) & (byte)_DAT_00531eb0 |
                                                     DAT_00531ea0)));
          auVar15._0_8_ =
               CONCAT17((byte)((uint)fVar31 >> 0x18) & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                        bRam0000000000531ea7,
                        CONCAT16((byte)((uint)fVar31 >> 0x10) & (byte)((ulong)_DAT_00531eb0 >> 0x30)
                                 | bRam0000000000531ea6,
                                 CONCAT15((byte)((uint)fVar31 >> 8) &
                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                          bRam0000000000531ea5,
                                          CONCAT14(SUB41(fVar31,0) &
                                                   (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                   bRam0000000000531ea4,fVar13))));
          auVar15[8] = SUB41(fVar32,0) & (byte)_uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar15[9] = (byte)((uint)fVar32 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                       uRam0000000000531ea8._1_1_;
          auVar15[10] = (byte)((uint)fVar32 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x10)
                        | bRam0000000000531eaa;
          auVar15[0xb] = (byte)((uint)fVar32 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x18)
                         | bRam0000000000531eab;
          auVar18[0xc] = SUB41(fVar33,0) & (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                         bRam0000000000531eac;
          auVar18._0_12_ = auVar15;
          auVar18[0xd] = (byte)((uint)fVar33 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 0x28) |
                         bRam0000000000531ead;
          auVar18[0xe] = (byte)((uint)fVar33 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x30)
                         | bRam0000000000531eae;
          auVar18[0xf] = (byte)((uint)fVar33 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x38)
                         | bRam0000000000531eaf;
          auVar19._0_8_ =
               CONCAT44((int)(fVar31 + (float)((ulong)auVar15._0_8_ >> 0x20)),(int)(fVar30 + fVar13)
                       );
          auVar19._8_4_ = (int)(fVar32 + auVar15._8_4_);
          auVar19._12_4_ = (int)(fVar33 + auVar18._12_4_);
          *(long *)(piVar7 + -2) = auVar19._8_8_;
          *(undefined8 *)(piVar7 + -4) = auVar19._0_8_;
          if (((DAT_00531ed0 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531ed0), iVar4 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar24._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531ec8), iVar4 != 0))
          {
            auVar20._8_4_ = 0x3f000000;
            auVar20._0_8_ = 0x3f0000003f000000;
            auVar20._12_4_ = 0x3f000000;
            _uRam0000000000531ea8 = auVar20._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = iVar9 + 8;
          puVar10 = puVar10 + 1;
          fVar30 = (float)CONCAT13((byte)((uint)fVar25 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar25 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar25 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar25,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar16._0_8_ =
               CONCAT17((byte)((uint)fVar27 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar27 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar27 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar27,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar30))));
          auVar16[8] = SUB41(fVar28,0) & (byte)uRam0000000000531eb8 | (byte)_uRam0000000000531ea8;
          auVar16[9] = (byte)((uint)fVar28 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)_uRam0000000000531ea8 >> 8);
          auVar16[10] = (byte)((uint)fVar28 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)_uRam0000000000531ea8 >> 0x10);
          auVar16[0xb] = (byte)((uint)fVar28 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x18);
          auVar21[0xc] = SUB41(fVar29,0) & bRam0000000000531ebc |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x20);
          auVar21._0_12_ = auVar16;
          auVar21[0xd] = (byte)((uint)fVar29 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x28);
          auVar21[0xe] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x30);
          auVar21[0xf] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x38);
          piVar7[2] = (int)(fVar28 + auVar16._8_4_);
          piVar7[3] = (int)(fVar29 + auVar21._12_4_);
          *piVar7 = (int)(fVar25 + fVar30);
          piVar7[1] = (int)(fVar27 + (float)((ulong)auVar16._0_8_ >> 0x20));
          piVar7 = piVar7 + 8;
        } while (iVar9 < iVar2 + -7);
      }
      if (iVar9 < iVar2 + -3) {
        lVar11 = (long)iVar9;
        uVar3 = (uint)((iVar2 + -4) - iVar9) >> 2;
        pcVar8 = (char *)((long)param_1 + lVar11);
        puVar12 = (undefined4 *)(param_5 + lVar11 * 4);
        do {
          pcVar1 = pcVar8 + 4;
          lVar5 = lrintf(fVar35 + (float)(int)*pcVar8 * fVar34);
          lVar6 = lrintf(fVar35 + (float)(byte)pcVar8[1] * fVar34);
          *puVar12 = (int)lVar5;
          puVar12[1] = (int)lVar6;
          lVar5 = lrintf(fVar35 + (float)(byte)pcVar8[2] * fVar34);
          lVar6 = lrintf(fVar35 + (float)(byte)pcVar8[3] * fVar34);
          puVar12[2] = (int)lVar5;
          puVar12[3] = (int)lVar6;
          pcVar8 = pcVar1;
          puVar12 = puVar12 + 4;
        } while (pcVar1 != (char *)((long)param_1 + lVar11 + 4 + (ulong)uVar3 * 4));
        iVar9 = iVar9 + 4 + uVar3 * 4;
      }
      if (iVar9 < iVar2) {
        lVar11 = 0;
        do {
          lVar5 = lrintf(fVar35 + (float)(int)*(char *)((long)param_1 + lVar11 + iVar9) * fVar34);
          *(int *)(param_5 + (long)iVar9 * 4 + lVar11 * 4) = (int)lVar5;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar9) + 1);
      }
      iVar36 = iVar36 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar36 != 0);
  }
  return;
}


==================================================================

### FUNC 0027ed40 (940 bytes) name=FUN_0027ed40

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027ed40(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 long param_5,ulong param_6,int *param_7,double *param_8)

{
  byte *pbVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  int *piVar7;
  byte *pbVar8;
  int iVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined4 *puVar12;
  undefined1 uVar13;
  float fVar14;
  undefined1 auVar17 [12];
  undefined8 uVar15;
  undefined1 auVar18 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  float fVar26;
  float fVar28;
  float fVar29;
  undefined1 auVar27 [16];
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  int iVar37;
  undefined1 auVar16 [12];
  undefined1 auVar19 [16];
  undefined1 auVar22 [16];
  
  iVar37 = param_7[1];
  iVar2 = *param_7;
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar37 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        iVar9 = 0;
      }
      else {
        iVar9 = 0;
        piVar7 = (int *)(param_5 + 0x10);
        puVar10 = param_1;
        do {
          uVar15 = *puVar10;
          uVar13 = (undefined1)((ulong)uVar15 >> 8);
          auVar27._6_2_ = 0;
          auVar27._0_6_ =
               (uint6)CONCAT14(uVar13,(uint)CONCAT12(uVar13,(ushort)(byte)uVar15)) & 0xffff0000ffff;
          auVar27[8] = (char)((ulong)uVar15 >> 0x10);
          auVar27._9_3_ = 0;
          auVar27[0xc] = (char)((ulong)uVar15 >> 0x18);
          auVar27._13_3_ = 0;
          auVar27 = NEON_ucvtf(auVar27,4);
          auVar23._1_3_ = 0;
          auVar23[0] = (byte)((ulong)uVar15 >> 0x20);
          auVar23[4] = (char)((ulong)uVar15 >> 0x28);
          auVar23._5_3_ = 0;
          auVar23[8] = (char)((ulong)uVar15 >> 0x30);
          auVar23._9_3_ = 0;
          auVar23[0xc] = (char)((ulong)uVar15 >> 0x38);
          auVar23._13_3_ = 0;
          auVar23 = NEON_ucvtf(auVar23,4);
          fVar31 = fVar36 + auVar27._0_4_ * fVar35;
          fVar32 = fVar36 + auVar27._4_4_ * fVar35;
          fVar33 = fVar36 + auVar27._8_4_ * fVar35;
          fVar34 = fVar36 + auVar27._12_4_ * fVar35;
          fVar26 = fVar36 + auVar23._0_4_ * fVar35;
          fVar28 = fVar36 + auVar23._4_4_ * fVar35;
          fVar29 = fVar36 + auVar23._8_4_ * fVar35;
          fVar30 = fVar36 + auVar23._12_4_ * fVar35;
          if ((DAT_00531ed0 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar4 != 0) {
              auVar24._8_4_ = 0x80000000;
              auVar24._0_8_ = 0x8000000080000000;
              auVar24._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar24._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar4 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar4 != 0) {
              auVar18._8_4_ = 0x3f000000;
              auVar18._0_8_ = 0x3f0000003f000000;
              auVar18._12_4_ = 0x3f000000;
              _uRam0000000000531ea8 = auVar18._8_8_;
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          fVar14 = (float)CONCAT13((byte)((uint)fVar31 >> 0x18) &
                                   (byte)((ulong)_DAT_00531eb0 >> 0x18) | bRam0000000000531ea3,
                                   CONCAT12((byte)((uint)fVar31 >> 0x10) &
                                            (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            bRam0000000000531ea2,
                                            CONCAT11((byte)((uint)fVar31 >> 8) &
                                                     (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                     DAT_00531ea0_1,
                                                     SUB41(fVar31,0) & (byte)_DAT_00531eb0 |
                                                     DAT_00531ea0)));
          auVar16._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                        bRam0000000000531ea7,
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & (byte)((ulong)_DAT_00531eb0 >> 0x30)
                                 | bRam0000000000531ea6,
                                 CONCAT15((byte)((uint)fVar32 >> 8) &
                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                          bRam0000000000531ea5,
                                          CONCAT14(SUB41(fVar32,0) &
                                                   (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                   bRam0000000000531ea4,fVar14))));
          auVar16[8] = SUB41(fVar33,0) & (byte)_uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar16[9] = (byte)((uint)fVar33 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                       uRam0000000000531ea8._1_1_;
          auVar16[10] = (byte)((uint)fVar33 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x10)
                        | bRam0000000000531eaa;
          auVar16[0xb] = (byte)((uint)fVar33 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x18)
                         | bRam0000000000531eab;
          auVar19[0xc] = SUB41(fVar34,0) & (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                         bRam0000000000531eac;
          auVar19._0_12_ = auVar16;
          auVar19[0xd] = (byte)((uint)fVar34 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 0x28) |
                         bRam0000000000531ead;
          auVar19[0xe] = (byte)((uint)fVar34 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x30)
                         | bRam0000000000531eae;
          auVar19[0xf] = (byte)((uint)fVar34 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x38)
                         | bRam0000000000531eaf;
          auVar20._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar16._0_8_ >> 0x20)),(int)(fVar31 + fVar14)
                       );
          auVar20._8_4_ = (int)(fVar33 + auVar16._8_4_);
          auVar20._12_4_ = (int)(fVar34 + auVar19._12_4_);
          *(long *)(piVar7 + -2) = auVar20._8_8_;
          *(undefined8 *)(piVar7 + -4) = auVar20._0_8_;
          if (((DAT_00531ed0 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531ed0), iVar4 != 0))
          {
            auVar25._8_4_ = 0x80000000;
            auVar25._0_8_ = 0x8000000080000000;
            auVar25._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar25._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar4 = __cxa_guard_acquire(&DAT_00531ec8), iVar4 != 0))
          {
            auVar21._8_4_ = 0x3f000000;
            auVar21._0_8_ = 0x3f0000003f000000;
            auVar21._12_4_ = 0x3f000000;
            _uRam0000000000531ea8 = auVar21._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = iVar9 + 8;
          puVar10 = puVar10 + 1;
          fVar31 = (float)CONCAT13((byte)((uint)fVar26 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar26 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar26 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar26,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar17._0_8_ =
               CONCAT17((byte)((uint)fVar28 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar28 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar28 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar28,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar31))));
          auVar17[8] = SUB41(fVar29,0) & (byte)uRam0000000000531eb8 | (byte)_uRam0000000000531ea8;
          auVar17[9] = (byte)((uint)fVar29 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)_uRam0000000000531ea8 >> 8);
          auVar17[10] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)_uRam0000000000531ea8 >> 0x10);
          auVar17[0xb] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x18);
          auVar22[0xc] = SUB41(fVar30,0) & bRam0000000000531ebc |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x20);
          auVar22._0_12_ = auVar17;
          auVar22[0xd] = (byte)((uint)fVar30 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x28);
          auVar22[0xe] = (byte)((uint)fVar30 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x30);
          auVar22[0xf] = (byte)((uint)fVar30 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x38);
          piVar7[2] = (int)(fVar29 + auVar17._8_4_);
          piVar7[3] = (int)(fVar30 + auVar22._12_4_);
          *piVar7 = (int)(fVar26 + fVar31);
          piVar7[1] = (int)(fVar28 + (float)((ulong)auVar17._0_8_ >> 0x20));
          piVar7 = piVar7 + 8;
        } while (iVar9 < iVar2 + -7);
      }
      if (iVar9 < iVar2 + -3) {
        lVar11 = (long)iVar9;
        uVar3 = (uint)((iVar2 + -4) - iVar9) >> 2;
        pbVar8 = (byte *)((long)param_1 + lVar11);
        puVar12 = (undefined4 *)(param_5 + lVar11 * 4);
        do {
          pbVar1 = pbVar8 + 4;
          lVar5 = lrintf(fVar36 + (float)*pbVar8 * fVar35);
          lVar6 = lrintf(fVar36 + (float)pbVar8[1] * fVar35);
          *puVar12 = (int)lVar5;
          puVar12[1] = (int)lVar6;
          lVar5 = lrintf(fVar36 + (float)pbVar8[2] * fVar35);
          lVar6 = lrintf(fVar36 + (float)pbVar8[3] * fVar35);
          puVar12[2] = (int)lVar5;
          puVar12[3] = (int)lVar6;
          pbVar8 = pbVar1;
          puVar12 = puVar12 + 4;
        } while (pbVar1 != (byte *)((long)param_1 + lVar11 + 4 + (ulong)uVar3 * 4));
        iVar9 = iVar9 + 4 + uVar3 * 4;
      }
      if (iVar9 < iVar2) {
        lVar11 = 0;
        do {
          lVar5 = lrintf(fVar36 + (float)*(byte *)((long)param_1 + lVar11 + iVar9) * fVar35);
          *(int *)(param_5 + (long)iVar9 * 4 + lVar11 * 4) = (int)lVar5;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar9) + 1);
      }
      iVar37 = iVar37 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar37 != 0);
  }
  return;
}


==================================================================

### FUNC 0027f0ec (940 bytes) name=FUN_0027f0ec

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027f0ec(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,long param_5,
                 ulong param_6,int *param_7,double *param_8)

{
  undefined4 *puVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  ushort *puVar9;
  int iVar10;
  long lVar11;
  undefined4 *puVar12;
  float fVar13;
  undefined1 auVar15 [12];
  undefined1 auVar16 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  int iVar35;
  undefined1 auVar14 [12];
  undefined1 auVar17 [16];
  undefined1 auVar20 [16];
  
  iVar2 = *param_7;
                    /* try { // try from 0027f10c to 0037f153 has its CatchHandler @ 0027f16c */
  iVar35 = param_7[1];
  fVar33 = (float)*param_8;
  fVar34 = (float)param_8[1];
  if (iVar35 != 0) {
                    /* try { // try from 0027f154 to 0037f15b has its CatchHandler @ 0027f168 */
                    /* catch() { ... } // from try @ 0027f154 with catch @ 0027f168 */
                    /* catch() { ... } // from try @ 0027f10c with catch @ 0027f16c */
    do {
      if (iVar2 + -7 < 1) {
        iVar10 = 0;
      }
      else {
        iVar10 = 0;
        piVar8 = (int *)(param_5 + 0x10);
        puVar9 = param_1;
        do {
          auVar24._2_2_ = 0;
          auVar24._0_2_ = puVar9[4];
          auVar24._4_2_ = puVar9[5];
          auVar24._6_2_ = 0;
          auVar24._8_2_ = puVar9[6];
          auVar24._10_2_ = 0;
          auVar24._12_2_ = puVar9[7];
          auVar24._14_2_ = 0;
          auVar24 = NEON_ucvtf(auVar24,4);
          auVar21._2_2_ = 0;
          auVar21._0_2_ = *puVar9;
          auVar21._4_2_ = puVar9[1];
          auVar21._6_2_ = 0;
          auVar21._8_2_ = puVar9[2];
          auVar21._10_2_ = 0;
          auVar21._12_2_ = puVar9[3];
          auVar21._14_2_ = 0;
          auVar21 = NEON_ucvtf(auVar21,4);
          fVar25 = fVar34 + auVar24._0_4_ * fVar33;
          fVar27 = fVar34 + auVar24._4_4_ * fVar33;
          fVar29 = fVar34 + auVar24._8_4_ * fVar33;
          fVar31 = fVar34 + auVar24._12_4_ * fVar33;
          fVar26 = fVar34 + auVar21._0_4_ * fVar33;
          fVar28 = fVar34 + auVar21._4_4_ * fVar33;
          fVar30 = fVar34 + auVar21._8_4_ * fVar33;
          fVar32 = fVar34 + auVar21._12_4_ * fVar33;
          if ((DAT_00531ed0 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531ed0);
            if (iVar5 != 0) {
              auVar22._8_4_ = 0x80000000;
              auVar22._0_8_ = 0x8000000080000000;
              auVar22._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar22._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if ((DAT_00531ec8 & 1) == 0) {
            iVar5 = __cxa_guard_acquire(&DAT_00531ec8);
            if (iVar5 != 0) {
              auVar16._8_4_ = 0x3f000000;
              auVar16._0_8_ = 0x3f0000003f000000;
              auVar16._12_4_ = 0x3f000000;
              _uRam0000000000531ea8 = auVar16._8_8_;
                    /* try { // try from 0027f1e4 to 0037f35b has its CatchHandler @ 0027f1e4
                       catch() { ... } // from try @ 0027f1e4 with catch @ 0027f1e4
                       catch() { ... } // from try @ 0027f36c with catch @ 0027f1e4 */
              _DAT_00531ea0 = 0x3f0000003f000000;
              __cxa_guard_release(&DAT_00531ec8);
            }
          }
          fVar13 = (float)CONCAT13((byte)((uint)fVar26 >> 0x18) &
                                   (byte)((ulong)_DAT_00531eb0 >> 0x18) | bRam0000000000531ea3,
                                   CONCAT12((byte)((uint)fVar26 >> 0x10) &
                                            (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                            bRam0000000000531ea2,
                                            CONCAT11((byte)((uint)fVar26 >> 8) &
                                                     (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                     DAT_00531ea0_1,
                                                     SUB41(fVar26,0) & (byte)_DAT_00531eb0 |
                                                     DAT_00531ea0)));
          auVar14._0_8_ =
               CONCAT17((byte)((uint)fVar28 >> 0x18) & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                        bRam0000000000531ea7,
                        CONCAT16((byte)((uint)fVar28 >> 0x10) & (byte)((ulong)_DAT_00531eb0 >> 0x30)
                                 | bRam0000000000531ea6,
                                 CONCAT15((byte)((uint)fVar28 >> 8) &
                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                          bRam0000000000531ea5,
                                          CONCAT14(SUB41(fVar28,0) &
                                                   (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                   bRam0000000000531ea4,fVar13))));
          auVar14[8] = SUB41(fVar30,0) & (byte)_uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar14[9] = (byte)((uint)fVar30 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                       uRam0000000000531ea8._1_1_;
          auVar14[10] = (byte)((uint)fVar30 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x10)
                        | bRam0000000000531eaa;
          auVar14[0xb] = (byte)((uint)fVar30 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x18)
                         | bRam0000000000531eab;
          auVar17[0xc] = SUB41(fVar32,0) & (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                         bRam0000000000531eac;
          auVar17._0_12_ = auVar14;
          auVar17[0xd] = (byte)((uint)fVar32 >> 8) & (byte)((ulong)_uRam0000000000531eb8 >> 0x28) |
                         bRam0000000000531ead;
          auVar17[0xe] = (byte)((uint)fVar32 >> 0x10) & (byte)((ulong)_uRam0000000000531eb8 >> 0x30)
                         | bRam0000000000531eae;
          auVar17[0xf] = (byte)((uint)fVar32 >> 0x18) & (byte)((ulong)_uRam0000000000531eb8 >> 0x38)
                         | bRam0000000000531eaf;
          auVar18._0_8_ =
               CONCAT44((int)(fVar28 + (float)((ulong)auVar14._0_8_ >> 0x20)),(int)(fVar26 + fVar13)
                       );
          auVar18._8_4_ = (int)(fVar30 + auVar14._8_4_);
          auVar18._12_4_ = (int)(fVar32 + auVar17._12_4_);
          *(long *)(piVar8 + -2) = auVar18._8_8_;
          *(undefined8 *)(piVar8 + -4) = auVar18._0_8_;
          if (((DAT_00531ed0 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531ed0), iVar5 != 0))
          {
            auVar23._8_4_ = 0x80000000;
            auVar23._0_8_ = 0x8000000080000000;
            auVar23._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar23._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00531ec8), iVar5 != 0))
          {
            auVar19._8_4_ = 0x3f000000;
            auVar19._0_8_ = 0x3f0000003f000000;
            auVar19._12_4_ = 0x3f000000;
            _uRam0000000000531ea8 = auVar19._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar10 = iVar10 + 8;
          puVar9 = puVar9 + 8;
          fVar26 = (float)CONCAT13((byte)((uint)fVar25 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar25 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar25 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar25,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar15._0_8_ =
               CONCAT17((byte)((uint)fVar27 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar27 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar27 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar27,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar26))));
          auVar15[8] = SUB41(fVar29,0) & (byte)uRam0000000000531eb8 | (byte)_uRam0000000000531ea8;
          auVar15[9] = (byte)((uint)fVar29 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)_uRam0000000000531ea8 >> 8);
          auVar15[10] = (byte)((uint)fVar29 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)_uRam0000000000531ea8 >> 0x10);
          auVar15[0xb] = (byte)((uint)fVar29 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x18);
          auVar20[0xc] = SUB41(fVar31,0) & bRam0000000000531ebc |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x20);
          auVar20._0_12_ = auVar15;
          auVar20[0xd] = (byte)((uint)fVar31 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x28);
          auVar20[0xe] = (byte)((uint)fVar31 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x30);
          auVar20[0xf] = (byte)((uint)fVar31 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)_uRam0000000000531ea8 >> 0x38);
          piVar8[2] = (int)(fVar29 + auVar15._8_4_);
          piVar8[3] = (int)(fVar31 + auVar20._12_4_);
          *piVar8 = (int)(fVar25 + fVar26);
          piVar8[1] = (int)(fVar27 + (float)((ulong)auVar15._0_8_ >> 0x20));
          piVar8 = piVar8 + 8;
        } while (iVar10 < iVar2 + -7);
      }
      if (iVar10 < iVar2 + -3) {
        lVar11 = (long)iVar10;
                    /* try { // try from 0027f35c to 0037f36b has its CatchHandler @ 0027f3c4 */
        uVar4 = (uint)((iVar2 + -4) - iVar10) >> 2;
                    /* try { // try from 0027f36c to 0037f3d7 has its CatchHandler @ 0027f1e4 */
        puVar9 = param_1 + lVar11;
        puVar12 = (undefined4 *)(param_5 + lVar11 * 4);
        do {
          puVar1 = puVar12 + 4;
          lVar6 = lrintf(fVar34 + (float)*puVar9 * fVar33);
          lVar7 = lrintf(fVar34 + (float)puVar9[1] * fVar33);
          uVar3 = puVar9[2];
          *puVar12 = (int)lVar6;
          puVar12[1] = (int)lVar7;
          lVar6 = lrintf(fVar34 + (float)uVar3 * fVar33);
                    /* catch() { ... } // from try @ 0027f35c with catch @ 0027f3c4 */
          lVar7 = lrintf(fVar34 + (float)puVar9[3] * fVar33);
          puVar12[2] = (int)lVar6;
          puVar12[3] = (int)lVar7;
          puVar9 = puVar9 + 4;
          puVar12 = puVar1;
        } while (puVar1 != (undefined4 *)(param_5 + (lVar11 + 4 + (ulong)uVar4 * 4) * 4));
        iVar10 = iVar10 + 4 + uVar4 * 4;
      }
      if (iVar10 < iVar2) {
        lVar11 = 0;
        do {
          lVar6 = lrintf(fVar34 + (float)param_1[iVar10 + lVar11] * fVar33);
          *(int *)(param_5 + (long)iVar10 * 4 + lVar11 * 4) = (int)lVar6;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar10) + 1);
      }
      iVar35 = iVar35 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = param_5 + (param_6 & 0xfffffffffffffffc);
    } while (iVar35 != 0);
  }
  return;
}


==================================================================

### FUNC 0027f498 (1032 bytes) name=FUN_0027f498

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027f498(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined1 auVar4 [16];
  undefined8 uVar5;
  undefined1 auVar6 [16];
  undefined3 uVar7;
  undefined1 auVar8 [16];
  undefined8 uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  undefined1 uVar16;
  int iVar17;
  undefined8 *puVar18;
  undefined1 *puVar19;
  undefined8 *puVar20;
  float *pfVar21;
  undefined1 uVar22;
  undefined1 uVar23;
  undefined1 uVar24;
  undefined1 uVar25;
  undefined1 uVar26;
  undefined1 uVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  undefined1 uVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  byte bVar40;
  float fVar41;
  float fVar42;
  int iVar43;
  
  iVar2 = *param_7;
  iVar43 = param_7[1];
  fVar41 = (float)*param_8;
  fVar42 = (float)param_8[1];
  if (iVar43 != 0) {
    uVar22 = (undefined1)((uint)fVar42 >> 8);
    uVar24 = (undefined1)((uint)fVar42 >> 0x10);
    uVar26 = (undefined1)((uint)fVar42 >> 0x18);
    uVar23 = (undefined1)((uint)fVar41 >> 8);
    uVar25 = (undefined1)((uint)fVar41 >> 0x10);
    uVar27 = (undefined1)((uint)fVar41 >> 0x18);
    do {
      if (iVar2 + -7 < 1) {
        iVar17 = 0;
      }
      else {
        iVar17 = 0;
        puVar18 = param_1;
        puVar20 = param_5;
        do {
          fVar36 = (float)(CONCAT17(uVar27,CONCAT16(uVar25,CONCAT15(uVar23,CONCAT14(SUB41(fVar41,0),
                                                                                    fVar41)))) >>
                          0x20);
          fVar39 = (float)(CONCAT17(uVar27,CONCAT16(uVar25,CONCAT15(uVar23,CONCAT14(SUB41(fVar41,0),
                                                                                    fVar41)))) >>
                          0x20);
          fVar34 = (float)(CONCAT17(uVar26,CONCAT16(uVar24,CONCAT15(uVar22,CONCAT14(SUB41(fVar42,0),
                                                                                    fVar42)))) >>
                          0x20);
          fVar31 = fVar42 + (float)*puVar18 * fVar41;
          fVar33 = fVar34 + (float)((ulong)*puVar18 >> 0x20) * fVar36;
          fVar38 = (float)(CONCAT17(uVar26,CONCAT16(uVar24,CONCAT15(uVar22,CONCAT14(SUB41(fVar42,0),
                                                                                    fVar42)))) >>
                          0x20);
          fVar35 = fVar42 + (float)puVar18[1] * fVar41;
          fVar37 = fVar38 + (float)((ulong)puVar18[1] >> 0x20) * fVar39;
          fVar32 = fVar42 + (float)puVar18[2] * fVar41;
          fVar34 = fVar34 + (float)((ulong)puVar18[2] >> 0x20) * fVar36;
          fVar36 = fVar42 + (float)puVar18[3] * fVar41;
          fVar38 = fVar38 + (float)((ulong)puVar18[3] >> 0x20) * fVar39;
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar13 = __cxa_guard_acquire(&DAT_00531ed0), iVar13 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar13 = __cxa_guard_acquire(&DAT_00531ec8), iVar13 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar13 = (int)(fVar31 + (float)CONCAT13((byte)((uint)fVar31 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar31 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                           CONCAT11((byte)((uint)fVar31 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >> 8
                                                                          ) | (byte)((ulong)
                                                  _DAT_00531ea0 >> 8),
                                                  SUB41(fVar31,0) & (byte)_DAT_00531eb0 |
                                                  (byte)_DAT_00531ea0))));
          iVar10 = (int)(fVar33 + (float)CONCAT13((byte)((uint)fVar33 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar33 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                           CONCAT11((byte)((uint)fVar33 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >>
                                                                          0x28) |
                                                                    (byte)((ulong)_DAT_00531ea0 >>
                                                                          0x28),
                                                                    SUB41(fVar33,0) &
                                                                    (byte)((ulong)_DAT_00531eb0 >>
                                                                          0x20) |
                                                                    (byte)((ulong)_DAT_00531ea0 >>
                                                                          0x20)))));
          uVar28 = (undefined1)((uint)iVar10 >> 8);
          uVar29 = (undefined1)((uint)iVar10 >> 0x10);
          uVar30 = (undefined1)((uint)iVar10 >> 0x18);
          iVar11 = (int)(fVar35 + (float)CONCAT13((byte)((uint)fVar35 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar35 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x10) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x10),
                                                           CONCAT11((byte)((uint)fVar35 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar35,0) & (byte)uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar12 = (int)(fVar37 + (float)CONCAT13((byte)((uint)fVar37 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar37 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x30) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x30),
                                                           CONCAT11((byte)((uint)fVar37 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar37,0) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar8[4] = (char)iVar10;
          auVar8._0_4_ = iVar13;
          auVar8[5] = uVar28;
          auVar8[6] = uVar29;
          auVar8[7] = uVar30;
          auVar8[8] = (char)iVar11;
          auVar8[9] = (char)((uint)iVar11 >> 8);
          auVar8[10] = (char)((uint)iVar11 >> 0x10);
          auVar8[0xb] = (char)((uint)iVar11 >> 0x18);
          auVar8[0xc] = (char)iVar12;
          auVar8[0xd] = (char)((uint)iVar12 >> 8);
          auVar8[0xe] = (char)((uint)iVar12 >> 0x10);
          auVar8[0xf] = (char)((uint)iVar12 >> 0x18);
          uVar9 = NEON_sqxtn(CONCAT17(uVar30,CONCAT16(uVar29,CONCAT15(uVar28,CONCAT14((char)iVar10,
                                                                                      iVar13)))),
                             auVar8,4);
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar13 = __cxa_guard_acquire(&DAT_00531ed0), iVar13 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar13 = __cxa_guard_acquire(&DAT_00531ec8), iVar13 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar17 = iVar17 + 8;
          puVar18 = puVar18 + 4;
          iVar13 = (int)(fVar32 + (float)CONCAT13((byte)((uint)fVar32 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar32 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                           CONCAT11((byte)((uint)fVar32 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >> 8
                                                                          ) | (byte)((ulong)
                                                  _DAT_00531ea0 >> 8),
                                                  SUB41(fVar32,0) & (byte)_DAT_00531eb0 |
                                                  (byte)_DAT_00531ea0))));
          iVar10 = (int)(fVar34 + (float)CONCAT13((byte)((uint)fVar34 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar34 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                           CONCAT11((byte)((uint)fVar34 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >>
                                                                          0x28) |
                                                                    (byte)((ulong)_DAT_00531ea0 >>
                                                                          0x28),
                                                                    SUB41(fVar34,0) &
                                                                    (byte)((ulong)_DAT_00531eb0 >>
                                                                          0x20) |
                                                                    (byte)((ulong)_DAT_00531ea0 >>
                                                                          0x20)))));
          uVar28 = (undefined1)((uint)iVar10 >> 8);
          uVar29 = (undefined1)((uint)iVar10 >> 0x10);
          uVar30 = (undefined1)((uint)iVar10 >> 0x18);
          iVar11 = (int)(fVar36 + (float)CONCAT13((byte)((uint)fVar36 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar36 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x10) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x10),
                                                           CONCAT11((byte)((uint)fVar36 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar36,0) & (byte)uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar12 = (int)(fVar38 + (float)CONCAT13((byte)((uint)fVar38 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar38 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x30) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x30),
                                                           CONCAT11((byte)((uint)fVar38 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar38,0) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar4[4] = (char)iVar10;
          auVar4._0_4_ = iVar13;
          auVar4[5] = uVar28;
          auVar4[6] = uVar29;
          auVar4[7] = uVar30;
          auVar4[8] = (char)iVar11;
          auVar4[9] = (char)((uint)iVar11 >> 8);
          auVar4[10] = (char)((uint)iVar11 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar11 >> 0x18);
          auVar4[0xc] = (char)iVar12;
          auVar4[0xd] = (char)((uint)iVar12 >> 8);
          auVar4[0xe] = (char)((uint)iVar12 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar12 >> 0x18);
          uVar5 = NEON_sqxtn(CONCAT17(uVar30,CONCAT16(uVar29,CONCAT15(uVar28,CONCAT14((char)iVar10,
                                                                                      iVar13)))),
                             auVar4,4);
          auVar6[8] = (char)uVar5;
          auVar6._0_8_ = uVar9;
          auVar6[9] = (char)((ulong)uVar5 >> 8);
          auVar6[10] = (char)((ulong)uVar5 >> 0x10);
          auVar6[0xb] = (char)((ulong)uVar5 >> 0x18);
          auVar6[0xc] = (char)((ulong)uVar5 >> 0x20);
          auVar6[0xd] = (char)((ulong)uVar5 >> 0x28);
          auVar6[0xe] = (char)((ulong)uVar5 >> 0x30);
          auVar6[0xf] = (char)((ulong)uVar5 >> 0x38);
          uVar9 = NEON_sqxtn(uVar5,auVar6,2);
          *puVar20 = uVar9;
          puVar20 = puVar20 + 1;
        } while (iVar17 < iVar2 + -7);
      }
      if (iVar17 < iVar2 + -3) {
        lVar15 = (long)iVar17;
        uVar3 = (iVar2 + -4) - iVar17;
        bVar40 = (byte)(uVar3 >> 0x1a);
        pfVar21 = (float *)((long)param_1 + lVar15 * 4);
        uVar7 = (undefined3)(uVar3 >> 2);
        puVar19 = (undefined1 *)((long)param_5 + lVar15);
        do {
          lVar14 = lrintf(fVar42 + *pfVar21 * fVar41);
          uVar29 = 0x80;
          uVar30 = 0x7f;
          uVar28 = (char)lVar14;
          if ((0xff < (int)lVar14 + 0x80U) && (uVar28 = uVar30, (int)lVar14 < 1)) {
            uVar28 = uVar29;
          }
          lVar14 = lrintf(fVar42 + pfVar21[1] * fVar41);
          uVar16 = (char)lVar14;
          if ((0xff < (int)lVar14 + 0x80U) && (uVar16 = uVar30, (int)lVar14 < 1)) {
            uVar16 = uVar29;
          }
          *puVar19 = uVar28;
          puVar19[1] = uVar16;
          lVar14 = lrintf(fVar42 + pfVar21[2] * fVar41);
          uVar28 = (char)lVar14;
          if ((0xff < (int)lVar14 + 0x80U) && (uVar28 = uVar30, (int)lVar14 < 1)) {
            uVar28 = uVar29;
          }
          lVar14 = lrintf(fVar42 + pfVar21[3] * fVar41);
          uVar16 = (char)lVar14;
          if ((0xff < (int)lVar14 + 0x80U) && (uVar16 = uVar30, (int)lVar14 < 1)) {
            uVar16 = uVar29;
          }
          puVar19[2] = uVar28;
          puVar1 = puVar19 + 4;
          pfVar21 = pfVar21 + 4;
          puVar19[3] = uVar16;
          puVar19 = puVar1;
        } while (puVar1 != (undefined1 *)
                           ((long)param_5 + lVar15 + 4 + (ulong)CONCAT13(bVar40,uVar7) * 4));
        iVar17 = iVar17 + 4 + CONCAT13(bVar40,uVar7) * 4;
      }
      if (iVar17 < iVar2) {
        lVar15 = 0;
        do {
          lVar14 = lrintf(fVar42 + *(float *)((long)param_1 + lVar15 * 4 + (long)iVar17 * 4) *
                                   fVar41);
          uVar28 = (undefined1)lVar14;
          if ((0xff < (int)lVar14 + 0x80U) && (uVar28 = 0x7f, (int)lVar14 < 1)) {
            uVar28 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar15 + iVar17) = uVar28;
          lVar15 = lVar15 + 1;
        } while (lVar15 != (ulong)(uint)((iVar2 + -1) - iVar17) + 1);
      }
      iVar43 = iVar43 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar43 != 0);
  }
  return;
}


==================================================================

### FUNC 0027f8a0 (1060 bytes) name=FUN_0027f8a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027f8a0(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined1 auVar3 [16];
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  undefined1 uVar9;
  undefined8 *puVar10;
  byte *pbVar11;
  long lVar12;
  undefined1 *puVar13;
  int iVar14;
  undefined8 *puVar15;
  undefined1 uVar16;
  undefined1 auVar19 [12];
  undefined8 uVar17;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar23 [16];
  undefined8 uVar18;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  int iVar41;
  undefined1 auVar22 [16];
  
  iVar41 = param_7[1];
  iVar1 = *param_7;
  fVar37 = (float)*param_8;
  fVar38 = (float)param_8[1];
  if (iVar41 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar14 = 0;
      }
      else {
        iVar14 = 0;
        puVar10 = param_1;
        puVar15 = param_5;
        do {
          uVar18 = *puVar10;
          uVar16 = (undefined1)((ulong)uVar18 >> 8);
          auVar28._6_2_ = 0;
          auVar28._0_6_ =
               (uint6)CONCAT14(uVar16,(uint)CONCAT12(uVar16,(ushort)(byte)uVar18)) & 0xffff0000ffff;
          auVar28[8] = (char)((ulong)uVar18 >> 0x10);
          auVar28._9_3_ = 0;
          auVar28[0xc] = (char)((ulong)uVar18 >> 0x18);
          auVar28._13_3_ = 0;
          auVar28 = NEON_ucvtf(auVar28,4);
          auVar24._1_3_ = 0;
          auVar24[0] = (byte)((ulong)uVar18 >> 0x20);
          auVar24[4] = (char)((ulong)uVar18 >> 0x28);
          auVar24._5_3_ = 0;
          auVar24[8] = (char)((ulong)uVar18 >> 0x30);
          auVar24._9_3_ = 0;
          auVar24[0xc] = (char)((ulong)uVar18 >> 0x38);
          auVar24._13_3_ = 0;
                    /* try { // try from 0027fa80 to 0037fa8b has its CatchHandler @ 0027fb9c */
          auVar24 = NEON_ucvtf(auVar24,4);
          fVar29 = fVar38 + auVar28._0_4_ * fVar37;
          fVar31 = fVar38 + auVar28._4_4_ * fVar37;
          fVar33 = fVar38 + auVar28._8_4_ * fVar37;
          fVar35 = fVar38 + auVar28._12_4_ * fVar37;
                    /* try { // try from 0027fa8c to 0037faa7 has its CatchHandler @ 0027f9f0 */
          fVar30 = fVar38 + auVar24._0_4_ * fVar37;
          fVar32 = fVar38 + auVar24._4_4_ * fVar37;
          fVar34 = fVar38 + auVar24._8_4_ * fVar37;
          fVar36 = fVar38 + auVar24._12_4_ * fVar37;
                    /* try { // try from 0027faa8 to 0037fad7 has its CatchHandler @ 0027fba0 */
          if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0))
          {
            auVar25._8_4_ = 0x80000000;
            auVar25._0_8_ = 0x8000000080000000;
            auVar25._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar25._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar20._8_4_ = 0x3f000000;
            auVar20._0_8_ = 0x3f0000003f000000;
            auVar20._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar20._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar7 = (int)(fVar29 + (float)CONCAT13((byte)((uint)fVar29 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar29 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar29 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar29,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar4 = (int)(fVar31 + (float)CONCAT13((byte)((uint)fVar31 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar31 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar31 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar31,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar16 = (undefined1)((uint)iVar4 >> 8);
          uVar39 = (undefined1)((uint)iVar4 >> 0x10);
          uVar40 = (undefined1)((uint)iVar4 >> 0x18);
          iVar5 = (int)(fVar33 + (float)CONCAT13((byte)((uint)fVar33 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar33 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar33 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar33,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar6 = (int)(fVar35 + (float)CONCAT13((byte)((uint)fVar35 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar35 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar35 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar35,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar3[4] = (char)iVar4;
          auVar3._0_4_ = iVar7;
          auVar3[5] = uVar16;
          auVar3[6] = uVar39;
          auVar3[7] = uVar40;
          auVar3[8] = (char)iVar5;
          auVar3[9] = (char)((uint)iVar5 >> 8);
          auVar3[10] = (char)((uint)iVar5 >> 0x10);
          auVar3[0xb] = (char)((uint)iVar5 >> 0x18);
          auVar3[0xc] = (char)iVar6;
          auVar3[0xd] = (char)((uint)iVar6 >> 8);
          auVar3[0xe] = (char)((uint)iVar6 >> 0x10);
          auVar3[0xf] = (char)((uint)iVar6 >> 0x18);
          uVar18 = NEON_sqxtn(CONCAT17(uVar40,CONCAT16(uVar39,CONCAT15(uVar16,CONCAT14((char)iVar4,
                                                                                       iVar7)))),
                              auVar3,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0))
          {
            auVar26._8_4_ = 0x80000000;
            auVar26._0_8_ = 0x8000000080000000;
            auVar26._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar26._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar21._8_4_ = 0x3f000000;
            auVar21._0_8_ = 0x3f0000003f000000;
            auVar21._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar21._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar14 = iVar14 + 8;
                    /* try { // try from 0027f9f0 to 0037fa7f has its CatchHandler @ 0027f9f0
                       catch() { ... } // from try @ 0027f9f0 with catch @ 0027f9f0
                       catch() { ... } // from try @ 0027fa8c with catch @ 0027f9f0
                       catch() { ... } // from try @ 0027fb4c with catch @ 0027f9f0 */
          puVar10 = puVar10 + 1;
          fVar29 = (float)CONCAT13((byte)((uint)fVar30 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar30 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar30 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar30,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar19._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar32 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar32,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar29))));
          auVar19[8] = SUB41(fVar34,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar19[9] = (byte)((uint)fVar34 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar19[10] = (byte)((uint)fVar34 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar19[0xb] = (byte)((uint)fVar34 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar22[0xc] = SUB41(fVar36,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar22._0_12_ = auVar19;
          auVar22[0xd] = (byte)((uint)fVar36 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar22[0xe] = (byte)((uint)fVar36 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar22[0xf] = (byte)((uint)fVar36 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar23._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar19._0_8_ >> 0x20)),(int)(fVar30 + fVar29)
                       );
          auVar23._8_4_ = (int)(fVar34 + auVar19._8_4_);
          auVar23._12_4_ = (int)(fVar36 + auVar22._12_4_);
          uVar17 = NEON_sqxtn(auVar23._0_8_,auVar23,4);
          auVar27._8_8_ = uVar17;
          auVar27._0_8_ = uVar18;
          uVar18 = NEON_sqxtn(uVar17,auVar27,2);
          *puVar15 = uVar18;
          puVar15 = puVar15 + 1;
        } while (iVar14 < iVar1 + -7);
      }
                    /* try { // try from 0027faf8 to 0037fb0f has its CatchHandler @ 0027fbb4 */
      if (iVar14 < iVar1 + -3) {
        lVar12 = (long)iVar14;
                    /* try { // try from 0027fb10 to 0037fb4b has its CatchHandler @ 0027fbbc */
        pbVar11 = (byte *)((long)param_1 + lVar12);
        uVar2 = (uint)((iVar1 + -4) - iVar14) >> 2;
        puVar13 = (undefined1 *)((long)param_5 + lVar12);
        do {
          lVar8 = lrintf(fVar38 + (float)*pbVar11 * fVar37);
                    /* try { // try from 0027fb4c to 0037fbe3 has its CatchHandler @ 0027f9f0 */
          uVar39 = 0x80;
          uVar40 = 0x7f;
          uVar16 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar16 = uVar40, (int)lVar8 < 1)) {
            uVar16 = uVar39;
          }
          lVar8 = lrintf(fVar38 + (float)pbVar11[1] * fVar37);
          uVar9 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar9 = uVar40, (int)lVar8 < 1)) {
            uVar9 = uVar39;
          }
          *puVar13 = uVar16;
          puVar13[1] = uVar9;
                    /* catch() { ... } // from try @ 0027fa80 with catch @ 0027fb9c */
          lVar8 = lrintf(fVar38 + (float)pbVar11[2] * fVar37);
                    /* catch() { ... } // from try @ 0027faa8 with catch @ 0027fba0 */
          uVar16 = (char)lVar8;
                    /* catch() { ... } // from try @ 0027faf8 with catch @ 0027fbb4 */
          if ((0xff < (int)lVar8 + 0x80U) && (uVar16 = uVar40, (int)lVar8 < 1)) {
            uVar16 = uVar39;
          }
                    /* catch() { ... } // from try @ 0027fb10 with catch @ 0027fbbc */
          lVar8 = lrintf(fVar38 + (float)pbVar11[3] * fVar37);
          uVar9 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar9 = uVar40, (int)lVar8 < 1)) {
            uVar9 = uVar39;
          }
                    /* try { // try from 0027fbe4 to 0037fbe7 has its CatchHandler @ 0027fbf0 */
          pbVar11 = pbVar11 + 4;
          puVar13[2] = uVar16;
                    /* catch() { ... } // from try @ 0027fbe4 with catch @ 0027fbf0 */
          puVar13[3] = uVar9;
                    /* try { // try from 0027fbf4 to 0037fc23 has its CatchHandler @ 0027fbf4
                       catch() { ... } // from try @ 0027fbf4 with catch @ 0027fbf4
                       catch() { ... } // from try @ 0027fc68 with catch @ 0027fbf4 */
          puVar13 = puVar13 + 4;
        } while (pbVar11 != (byte *)((long)param_1 + lVar12 + 4 + (ulong)uVar2 * 4));
        iVar14 = iVar14 + 4 + uVar2 * 4;
      }
      if (iVar14 < iVar1) {
        lVar12 = 0;
                    /* try { // try from 0027fc24 to 0037fc33 has its CatchHandler @ 0027fc94 */
        do {
          lVar8 = lrintf(fVar38 + (float)*(byte *)((long)param_1 + lVar12 + iVar14) * fVar37);
          uVar16 = (undefined1)lVar8;
                    /* try { // try from 0027fc54 to 0037fc67 has its CatchHandler @ 0027fc90 */
          if ((0xff < (int)lVar8 + 0x80U) && (uVar16 = 0x7f, (int)lVar8 < 1)) {
            uVar16 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar12 + iVar14) = uVar16;
                    /* try { // try from 0027fc68 to 0037fca7 has its CatchHandler @ 0027fbf4 */
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar1 + -1) - iVar14) + 1);
      }
      iVar41 = iVar41 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + param_6);
                    /* catch() { ... } // from try @ 0027fc54 with catch @ 0027fc90 */
    } while (iVar41 != 0);
  }
                    /* catch() { ... } // from try @ 0027fc24 with catch @ 0027fc94 */
                    /* try { // try from 0027fcb8 to 0037fcd3 has its CatchHandler @ 0027fcec */
  return;
}


==================================================================

### FUNC 0027fcc4 (1060 bytes) name=FUN_0027fcc4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0027fcc4(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined1 auVar3 [16];
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  undefined1 uVar9;
  undefined8 *puVar10;
  char *pcVar11;
  long lVar12;
  undefined1 *puVar13;
  int iVar14;
  undefined8 *puVar15;
  undefined1 auVar18 [12];
  undefined8 uVar16;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar22 [16];
  undefined8 uVar17;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  int iVar41;
  undefined1 auVar21 [16];
  
  iVar41 = param_7[1];
                    /* catch(type#1 @ 00000000) { ... } // from try @ 0027fcb8 with catch @ 0027fcec
                        */
  iVar1 = *param_7;
  fVar36 = (float)*param_8;
  fVar37 = (float)param_8[1];
  if (iVar41 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar14 = 0;
      }
      else {
        iVar14 = 0;
        puVar10 = param_1;
        puVar15 = param_5;
        do {
          uVar17 = *puVar10;
          auVar27._0_4_ = (int)(short)(char)uVar17;
          auVar27._4_4_ = (int)(short)(char)((ulong)uVar17 >> 8);
          auVar27._8_4_ = (int)(short)(char)((ulong)uVar17 >> 0x10);
          auVar27._12_4_ = (int)(short)(char)((ulong)uVar17 >> 0x18);
          auVar27 = NEON_scvtf(auVar27,4);
          auVar23._0_4_ = (int)(short)(char)((ulong)uVar17 >> 0x20);
          auVar23._4_4_ = (int)(short)(char)((ulong)uVar17 >> 0x28);
          auVar23._8_4_ = (int)(short)(char)((ulong)uVar17 >> 0x30);
          auVar23._12_4_ = (int)(short)(char)((ulong)uVar17 >> 0x38);
          auVar23 = NEON_scvtf(auVar23,4);
          fVar28 = fVar37 + auVar27._0_4_ * fVar36;
          fVar30 = fVar37 + auVar27._4_4_ * fVar36;
          fVar32 = fVar37 + auVar27._8_4_ * fVar36;
          fVar34 = fVar37 + auVar27._12_4_ * fVar36;
          fVar29 = fVar37 + auVar23._0_4_ * fVar36;
          fVar31 = fVar37 + auVar23._4_4_ * fVar36;
          fVar33 = fVar37 + auVar23._8_4_ * fVar36;
          fVar35 = fVar37 + auVar23._12_4_ * fVar36;
          if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar24._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar19._8_4_ = 0x3f000000;
            auVar19._0_8_ = 0x3f0000003f000000;
            auVar19._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar19._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar7 = (int)(fVar28 + (float)CONCAT13((byte)((uint)fVar28 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar28 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar28 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar28,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar4 = (int)(fVar30 + (float)CONCAT13((byte)((uint)fVar30 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar30 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar30 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar30,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar38 = (undefined1)((uint)iVar4 >> 8);
          uVar39 = (undefined1)((uint)iVar4 >> 0x10);
          uVar40 = (undefined1)((uint)iVar4 >> 0x18);
          iVar5 = (int)(fVar32 + (float)CONCAT13((byte)((uint)fVar32 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar32 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar32 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar32,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar6 = (int)(fVar34 + (float)CONCAT13((byte)((uint)fVar34 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar34 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar34 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar34,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar3[4] = (char)iVar4;
          auVar3._0_4_ = iVar7;
          auVar3[5] = uVar38;
          auVar3[6] = uVar39;
          auVar3[7] = uVar40;
          auVar3[8] = (char)iVar5;
          auVar3[9] = (char)((uint)iVar5 >> 8);
          auVar3[10] = (char)((uint)iVar5 >> 0x10);
          auVar3[0xb] = (char)((uint)iVar5 >> 0x18);
          auVar3[0xc] = (char)iVar6;
          auVar3[0xd] = (char)((uint)iVar6 >> 8);
          auVar3[0xe] = (char)((uint)iVar6 >> 0x10);
          auVar3[0xf] = (char)((uint)iVar6 >> 0x18);
          uVar17 = NEON_sqxtn(CONCAT17(uVar40,CONCAT16(uVar39,CONCAT15(uVar38,CONCAT14((char)iVar4,
                                                                                       iVar7)))),
                              auVar3,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ed0), iVar7 != 0))
          {
            auVar25._8_4_ = 0x80000000;
            auVar25._0_8_ = 0x8000000080000000;
            auVar25._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar25._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar7 = __cxa_guard_acquire(&DAT_00531ec8), iVar7 != 0))
          {
            auVar20._8_4_ = 0x3f000000;
            auVar20._0_8_ = 0x3f0000003f000000;
            auVar20._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar20._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar14 = iVar14 + 8;
          puVar10 = puVar10 + 1;
          fVar28 = (float)CONCAT13((byte)((uint)fVar29 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar29 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar29 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar29,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar18._0_8_ =
               CONCAT17((byte)((uint)fVar31 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar31 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar31 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar31,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar28))));
          auVar18[8] = SUB41(fVar33,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar18[9] = (byte)((uint)fVar33 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar18[10] = (byte)((uint)fVar33 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar18[0xb] = (byte)((uint)fVar33 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar21[0xc] = SUB41(fVar35,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar21._0_12_ = auVar18;
          auVar21[0xd] = (byte)((uint)fVar35 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar21[0xe] = (byte)((uint)fVar35 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar21[0xf] = (byte)((uint)fVar35 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar22._0_8_ =
               CONCAT44((int)(fVar31 + (float)((ulong)auVar18._0_8_ >> 0x20)),(int)(fVar29 + fVar28)
                       );
          auVar22._8_4_ = (int)(fVar33 + auVar18._8_4_);
          auVar22._12_4_ = (int)(fVar35 + auVar21._12_4_);
          uVar16 = NEON_sqxtn(auVar22._0_8_,auVar22,4);
          auVar26._8_8_ = uVar16;
          auVar26._0_8_ = uVar17;
          uVar17 = NEON_sqxtn(uVar16,auVar26,2);
          *puVar15 = uVar17;
          puVar15 = puVar15 + 1;
        } while (iVar14 < iVar1 + -7);
      }
      if (iVar14 < iVar1 + -3) {
        lVar12 = (long)iVar14;
        pcVar11 = (char *)((long)param_1 + lVar12);
        uVar2 = (uint)((iVar1 + -4) - iVar14) >> 2;
        puVar13 = (undefined1 *)((long)param_5 + lVar12);
        do {
          lVar8 = lrintf(fVar37 + (float)(int)*pcVar11 * fVar36);
          uVar39 = 0x80;
          uVar40 = 0x7f;
          uVar38 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar38 = uVar40, (int)lVar8 < 1)) {
            uVar38 = uVar39;
          }
          lVar8 = lrintf(fVar37 + (float)(int)pcVar11[1] * fVar36);
          uVar9 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar9 = uVar40, (int)lVar8 < 1)) {
            uVar9 = uVar39;
          }
          *puVar13 = uVar38;
          puVar13[1] = uVar9;
          lVar8 = lrintf(fVar37 + (float)(int)pcVar11[2] * fVar36);
          uVar38 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar38 = uVar40, (int)lVar8 < 1)) {
            uVar38 = uVar39;
          }
          lVar8 = lrintf(fVar37 + (float)(int)pcVar11[3] * fVar36);
          uVar9 = (char)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar9 = uVar40, (int)lVar8 < 1)) {
            uVar9 = uVar39;
          }
          pcVar11 = pcVar11 + 4;
          puVar13[2] = uVar38;
          puVar13[3] = uVar9;
          puVar13 = puVar13 + 4;
        } while (pcVar11 != (char *)((long)param_1 + lVar12 + 4 + (ulong)uVar2 * 4));
        iVar14 = iVar14 + 4 + uVar2 * 4;
      }
      if (iVar14 < iVar1) {
        lVar12 = 0;
        do {
          lVar8 = lrintf(fVar37 + (float)(int)*(char *)((long)param_1 + lVar12 + iVar14) * fVar36);
          uVar38 = (undefined1)lVar8;
          if ((0xff < (int)lVar8 + 0x80U) && (uVar38 = 0x7f, (int)lVar8 < 1)) {
            uVar38 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar12 + iVar14) = uVar38;
          lVar12 = lVar12 + 1;
        } while (lVar12 != (ulong)(uint)((iVar1 + -1) - iVar14) + 1);
      }
      iVar41 = iVar41 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar41 != 0);
  }
  return;
}


==================================================================

### FUNC 002800e8 (1060 bytes) name=FUN_002800e8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002800e8(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined1 auVar3 [16];
  undefined8 uVar4;
  undefined3 uVar5;
  undefined1 auVar6 [16];
  undefined8 uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  long lVar12;
  undefined2 uVar13;
  undefined8 *puVar14;
  long lVar15;
  undefined2 *puVar16;
  int iVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  undefined8 *puVar20;
  float *pfVar21;
  undefined2 uVar22;
  undefined1 uVar23;
  undefined1 uVar24;
  undefined1 uVar25;
  undefined1 uVar26;
  undefined1 uVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  undefined1 uVar30;
  undefined1 uVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float fVar42;
  byte bVar43;
  int iVar44;
  
  iVar1 = *param_7;
  iVar44 = param_7[1];
  fVar41 = (float)*param_8;
  fVar42 = (float)param_8[1];
  if (iVar44 != 0) {
    uVar23 = (undefined1)((uint)fVar42 >> 8);
    uVar25 = (undefined1)((uint)fVar42 >> 0x10);
    uVar27 = (undefined1)((uint)fVar42 >> 0x18);
    uVar24 = (undefined1)((uint)fVar41 >> 8);
    uVar26 = (undefined1)((uint)fVar41 >> 0x10);
    uVar28 = (undefined1)((uint)fVar41 >> 0x18);
    do {
      if (iVar1 + -7 < 1) {
        iVar17 = 0;
      }
      else {
        iVar17 = 0;
        puVar14 = param_1;
        puVar20 = param_5;
        do {
          fVar37 = (float)(CONCAT17(uVar28,CONCAT16(uVar26,CONCAT15(uVar24,CONCAT14(SUB41(fVar41,0),
                                                                                    fVar41)))) >>
                          0x20);
          fVar40 = (float)(CONCAT17(uVar28,CONCAT16(uVar26,CONCAT15(uVar24,CONCAT14(SUB41(fVar41,0),
                                                                                    fVar41)))) >>
                          0x20);
          fVar35 = (float)(CONCAT17(uVar27,CONCAT16(uVar25,CONCAT15(uVar23,CONCAT14(SUB41(fVar42,0),
                                                                                    fVar42)))) >>
                          0x20);
          fVar32 = fVar42 + (float)*puVar14 * fVar41;
          fVar34 = fVar35 + (float)((ulong)*puVar14 >> 0x20) * fVar37;
          fVar39 = (float)(CONCAT17(uVar27,CONCAT16(uVar25,CONCAT15(uVar23,CONCAT14(SUB41(fVar42,0),
                                                                                    fVar42)))) >>
                          0x20);
          fVar36 = fVar42 + (float)puVar14[1] * fVar41;
          fVar38 = fVar39 + (float)((ulong)puVar14[1] >> 0x20) * fVar40;
          fVar33 = fVar42 + (float)puVar14[2] * fVar41;
          fVar35 = fVar35 + (float)((ulong)puVar14[2] >> 0x20) * fVar37;
          fVar37 = fVar42 + (float)puVar14[3] * fVar41;
          fVar39 = fVar39 + (float)((ulong)puVar14[3] >> 0x20) * fVar40;
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ed0), iVar11 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec8), iVar11 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar11 = (int)(fVar32 + (float)CONCAT13((byte)((uint)fVar32 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar32 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                           CONCAT11((byte)((uint)fVar32 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >> 8
                                                                          ) | (byte)((ulong)
                                                  _DAT_00531ea0 >> 8),
                                                  SUB41(fVar32,0) & (byte)_DAT_00531eb0 |
                                                  (byte)_DAT_00531ea0))));
          iVar8 = (int)(fVar34 + (float)CONCAT13((byte)((uint)fVar34 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar34 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar34 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar34,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar29 = (undefined1)((uint)iVar8 >> 8);
          uVar30 = (undefined1)((uint)iVar8 >> 0x10);
          uVar31 = (undefined1)((uint)iVar8 >> 0x18);
          iVar9 = (int)(fVar36 + (float)CONCAT13((byte)((uint)fVar36 >> 0x18) &
                                                 (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar36 >> 0x10) &
                                                          (byte)((ulong)uRam0000000000531eb8 >> 0x10
                                                                ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x10),
                                                  CONCAT11((byte)((uint)fVar36 >> 8) &
                                                           (byte)((ulong)uRam0000000000531eb8 >> 8)
                                                           | (byte)((ulong)uRam0000000000531ea8 >> 8
                                                                   ),
                                                           SUB41(fVar36,0) &
                                                           (byte)uRam0000000000531eb8 |
                                                           (byte)uRam0000000000531ea8))));
          iVar10 = (int)(fVar38 + (float)CONCAT13((byte)((uint)fVar38 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar38 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x30) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x30),
                                                           CONCAT11((byte)((uint)fVar38 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar38,0) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar6[4] = (char)iVar8;
          auVar6._0_4_ = iVar11;
          auVar6[5] = uVar29;
          auVar6[6] = uVar30;
          auVar6[7] = uVar31;
          auVar6[8] = (char)iVar9;
          auVar6[9] = (char)((uint)iVar9 >> 8);
          auVar6[10] = (char)((uint)iVar9 >> 0x10);
          auVar6[0xb] = (char)((uint)iVar9 >> 0x18);
          auVar6[0xc] = (char)iVar10;
          auVar6[0xd] = (char)((uint)iVar10 >> 8);
          auVar6[0xe] = (char)((uint)iVar10 >> 0x10);
          auVar6[0xf] = (char)((uint)iVar10 >> 0x18);
          uVar7 = NEON_sqxtn(CONCAT17(uVar31,CONCAT16(uVar30,CONCAT15(uVar29,CONCAT14((char)iVar8,
                                                                                      iVar11)))),
                             auVar6,4);
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ed0), iVar11 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar11 = __cxa_guard_acquire(&DAT_00531ec8), iVar11 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar17 = iVar17 + 8;
          puVar14 = puVar14 + 4;
          iVar11 = (int)(fVar33 + (float)CONCAT13((byte)((uint)fVar33 >> 0x18) &
                                                  (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                  (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                  CONCAT12((byte)((uint)fVar33 >> 0x10) &
                                                           (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                           (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                           CONCAT11((byte)((uint)fVar33 >> 8) &
                                                                    (byte)((ulong)_DAT_00531eb0 >> 8
                                                                          ) | (byte)((ulong)
                                                  _DAT_00531ea0 >> 8),
                                                  SUB41(fVar33,0) & (byte)_DAT_00531eb0 |
                                                  (byte)_DAT_00531ea0))));
          iVar8 = (int)(fVar35 + (float)CONCAT13((byte)((uint)fVar35 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar35 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar35 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar35,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar29 = (undefined1)((uint)iVar8 >> 8);
          uVar30 = (undefined1)((uint)iVar8 >> 0x10);
          uVar31 = (undefined1)((uint)iVar8 >> 0x18);
          iVar9 = (int)(fVar37 + (float)CONCAT13((byte)((uint)fVar37 >> 0x18) &
                                                 (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar37 >> 0x10) &
                                                          (byte)((ulong)uRam0000000000531eb8 >> 0x10
                                                                ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x10),
                                                  CONCAT11((byte)((uint)fVar37 >> 8) &
                                                           (byte)((ulong)uRam0000000000531eb8 >> 8)
                                                           | (byte)((ulong)uRam0000000000531ea8 >> 8
                                                                   ),
                                                           SUB41(fVar37,0) &
                                                           (byte)uRam0000000000531eb8 |
                                                           (byte)uRam0000000000531ea8))));
          iVar10 = (int)(fVar39 + (float)CONCAT13((byte)((uint)fVar39 >> 0x18) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                  CONCAT12((byte)((uint)fVar39 >> 0x10) &
                                                           (byte)((ulong)uRam0000000000531eb8 >>
                                                                 0x30) |
                                                           (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x30),
                                                           CONCAT11((byte)((uint)fVar39 >> 8) &
                                                                    (byte)((ulong)
                                                  uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar39,0) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar3[4] = (char)iVar8;
          auVar3._0_4_ = iVar11;
          auVar3[5] = uVar29;
          auVar3[6] = uVar30;
          auVar3[7] = uVar31;
          auVar3[8] = (char)iVar9;
          auVar3[9] = (char)((uint)iVar9 >> 8);
          auVar3[10] = (char)((uint)iVar9 >> 0x10);
          auVar3[0xb] = (char)((uint)iVar9 >> 0x18);
          auVar3[0xc] = (char)iVar10;
          auVar3[0xd] = (char)((uint)iVar10 >> 8);
          auVar3[0xe] = (char)((uint)iVar10 >> 0x10);
          auVar3[0xf] = (char)((uint)iVar10 >> 0x18);
          uVar4 = NEON_sqxtn(CONCAT17(uVar31,CONCAT16(uVar30,CONCAT15(uVar29,CONCAT14((char)iVar8,
                                                                                      iVar11)))),
                             auVar3,4);
          puVar20[1] = uVar4;
          *puVar20 = uVar7;
          puVar20 = puVar20 + 2;
        } while (iVar17 < iVar1 + -7);
      }
      if (iVar17 < iVar1 + -3) {
        lVar15 = (long)iVar17;
        uVar2 = (iVar1 + -4) - iVar17;
        pfVar21 = (float *)((long)param_1 + lVar15 * 4);
        puVar16 = (undefined2 *)((long)param_5 + lVar15 * 2);
        bVar43 = (byte)(uVar2 >> 0x1a);
        uVar5 = (undefined3)(uVar2 >> 2);
        do {
          lVar12 = lrintf(fVar42 + *pfVar21 * fVar41);
          uVar18 = 0x8000;
          uVar19 = 0x7fff;
          uVar22 = (short)lVar12;
          if ((0xffff < (int)lVar12 + 0x8000U) && (uVar22 = uVar19, (int)lVar12 < 1)) {
            uVar22 = uVar18;
          }
          lVar12 = lrintf(fVar42 + pfVar21[1] * fVar41);
          uVar13 = (short)lVar12;
          if ((0xffff < (int)lVar12 + 0x8000U) && (uVar13 = uVar19, (int)lVar12 < 1)) {
            uVar13 = uVar18;
          }
          fVar32 = pfVar21[2];
          *puVar16 = uVar22;
          puVar16[1] = uVar13;
          lVar12 = lrintf(fVar42 + fVar32 * fVar41);
          uVar22 = (short)lVar12;
          if ((0xffff < (int)lVar12 + 0x8000U) && (uVar22 = uVar19, (int)lVar12 < 1)) {
            uVar22 = uVar18;
          }
          lVar12 = lrintf(fVar42 + pfVar21[3] * fVar41);
          uVar13 = (short)lVar12;
          if ((0xffff < (int)lVar12 + 0x8000U) && (uVar13 = uVar19, (int)lVar12 < 1)) {
            uVar13 = uVar18;
          }
          pfVar21 = pfVar21 + 4;
          puVar16[2] = uVar22;
          puVar16[3] = uVar13;
          puVar16 = puVar16 + 4;
        } while (pfVar21 !=
                 (float *)((long)param_1 + (lVar15 + 4 + (ulong)CONCAT13(bVar43,uVar5) * 4) * 4));
        iVar17 = iVar17 + 4 + CONCAT13(bVar43,uVar5) * 4;
      }
      if (iVar17 < iVar1) {
        lVar15 = 0;
        do {
          lVar12 = lrintf(fVar42 + *(float *)((long)param_1 + lVar15 * 4 + (long)iVar17 * 4) *
                                   fVar41);
          uVar22 = (undefined2)lVar12;
          if ((0xffff < (int)lVar12 + 0x8000U) && (uVar22 = 0x7fff, (int)lVar12 < 1)) {
            uVar22 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar15 * 2 + (long)iVar17 * 2) = uVar22;
          lVar15 = lVar15 + 1;
        } while (lVar15 != (ulong)(uint)((iVar1 + -1) - iVar17) + 1);
      }
      iVar44 = iVar44 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar44 != 0);
  }
  return;
}


==================================================================

### FUNC 0028050c (1060 bytes) name=FUN_0028050c

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0028050c(undefined1 (*param_1) [16],ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined3 uVar4;
  undefined1 auVar5 [16];
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  undefined1 uVar12;
  int iVar13;
  undefined1 (*pauVar14) [16];
  undefined1 *puVar15;
  undefined8 *puVar16;
  int *piVar17;
  undefined1 auVar20 [12];
  undefined8 uVar18;
  undefined8 uVar19;
  undefined1 auVar21 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  byte bVar36;
  undefined1 uVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  float fVar40;
  float fVar41;
  int iVar42;
  undefined1 auVar22 [16];
  
  iVar2 = *param_7;
  iVar42 = param_7[1];
  fVar40 = (float)*param_8;
  fVar41 = (float)param_8[1];
  if (iVar42 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        iVar13 = 0;
      }
      else {
        iVar13 = 0;
        pauVar14 = param_1;
        puVar16 = param_5;
        do {
          auVar27 = NEON_scvtf(*pauVar14,4);
          auVar24 = NEON_scvtf(pauVar14[1],4);
          fVar28 = fVar41 + auVar27._0_4_ * fVar40;
          fVar30 = fVar41 + auVar27._4_4_ * fVar40;
          fVar32 = fVar41 + auVar27._8_4_ * fVar40;
          fVar34 = fVar41 + auVar27._12_4_ * fVar40;
          fVar29 = fVar41 + auVar24._0_4_ * fVar40;
          fVar31 = fVar41 + auVar24._4_4_ * fVar40;
          fVar33 = fVar41 + auVar24._8_4_ * fVar40;
          fVar35 = fVar41 + auVar24._12_4_ * fVar40;
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar24._8_4_ = 0x80000000;
            auVar24._0_8_ = 0x8000000080000000;
            auVar24._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar24._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar27._8_4_ = 0x3f000000;
            auVar27._0_8_ = 0x3f0000003f000000;
            auVar27._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar27._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = (int)(fVar28 + (float)CONCAT13((byte)((uint)fVar28 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar28 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar28 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar28,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar6 = (int)(fVar30 + (float)CONCAT13((byte)((uint)fVar30 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar30 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar30 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar30,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar37 = (undefined1)((uint)iVar6 >> 8);
          uVar38 = (undefined1)((uint)iVar6 >> 0x10);
          uVar39 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)(fVar32 + (float)CONCAT13((byte)((uint)fVar32 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar32 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar32 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar32,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar8 = (int)(fVar34 + (float)CONCAT13((byte)((uint)fVar34 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar34 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar34 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar34,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar5[4] = (char)iVar6;
          auVar5._0_4_ = iVar9;
          auVar5[5] = uVar37;
          auVar5[6] = uVar38;
          auVar5[7] = uVar39;
          auVar5[8] = (char)iVar7;
          auVar5[9] = (char)((uint)iVar7 >> 8);
          auVar5[10] = (char)((uint)iVar7 >> 0x10);
          auVar5[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar5[0xc] = (char)iVar8;
          auVar5[0xd] = (char)((uint)iVar8 >> 8);
          auVar5[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar5[0xf] = (char)((uint)iVar8 >> 0x18);
          uVar19 = NEON_sqxtn(CONCAT17(uVar39,CONCAT16(uVar38,CONCAT15(uVar37,CONCAT14((char)iVar6,
                                                                                       iVar9)))),
                              auVar5,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar25._8_4_ = 0x80000000;
            auVar25._0_8_ = 0x8000000080000000;
            auVar25._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar25._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar21._8_4_ = 0x3f000000;
            auVar21._0_8_ = 0x3f0000003f000000;
            auVar21._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar21._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar13 = iVar13 + 8;
          pauVar14 = pauVar14 + 2;
          fVar28 = (float)CONCAT13((byte)((uint)fVar29 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar29 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar29 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar29,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar20._0_8_ =
               CONCAT17((byte)((uint)fVar31 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar31 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar31 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar31,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar28))));
          auVar20[8] = SUB41(fVar33,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar20[9] = (byte)((uint)fVar33 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar20[10] = (byte)((uint)fVar33 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar20[0xb] = (byte)((uint)fVar33 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar22[0xc] = SUB41(fVar35,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar22._0_12_ = auVar20;
          auVar22[0xd] = (byte)((uint)fVar35 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar22[0xe] = (byte)((uint)fVar35 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar22[0xf] = (byte)((uint)fVar35 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar23._0_8_ =
               CONCAT44((int)(fVar31 + (float)((ulong)auVar20._0_8_ >> 0x20)),(int)(fVar29 + fVar28)
                       );
          auVar23._8_4_ = (int)(fVar33 + auVar20._8_4_);
          auVar23._12_4_ = (int)(fVar35 + auVar22._12_4_);
          uVar18 = NEON_sqxtn(auVar23._0_8_,auVar23,4);
          auVar26._8_8_ = uVar18;
          auVar26._0_8_ = uVar19;
          uVar19 = NEON_sqxtn(uVar18,auVar26,2);
          *puVar16 = uVar19;
          puVar16 = puVar16 + 1;
        } while (iVar13 < iVar2 + -7);
      }
      if (iVar13 < iVar2 + -3) {
        lVar11 = (long)iVar13;
        uVar3 = (iVar2 + -4) - iVar13;
        bVar36 = (byte)(uVar3 >> 0x1a);
        piVar17 = (int *)(*param_1 + lVar11 * 4);
        uVar4 = (undefined3)(uVar3 >> 2);
        puVar15 = (undefined1 *)((long)param_5 + lVar11);
        do {
          lVar10 = lrintf(fVar41 + (float)*piVar17 * fVar40);
          uVar38 = 0x80;
          uVar39 = 0x7f;
          uVar37 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar37 = uVar39, (int)lVar10 < 1)) {
            uVar37 = uVar38;
          }
          lVar10 = lrintf(fVar41 + (float)piVar17[1] * fVar40);
          uVar12 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar12 = uVar39, (int)lVar10 < 1)) {
            uVar12 = uVar38;
          }
          *puVar15 = uVar37;
          puVar15[1] = uVar12;
          lVar10 = lrintf(fVar41 + (float)piVar17[2] * fVar40);
          uVar37 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar37 = uVar39, (int)lVar10 < 1)) {
            uVar37 = uVar38;
          }
          lVar10 = lrintf(fVar41 + (float)piVar17[3] * fVar40);
          uVar12 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar12 = uVar39, (int)lVar10 < 1)) {
            uVar12 = uVar38;
          }
          puVar15[2] = uVar37;
          puVar1 = puVar15 + 4;
          piVar17 = piVar17 + 4;
          puVar15[3] = uVar12;
          puVar15 = puVar1;
        } while (puVar1 != (undefined1 *)
                           ((long)param_5 + lVar11 + 4 + (ulong)CONCAT13(bVar36,uVar4) * 4));
        iVar13 = iVar13 + 4 + CONCAT13(bVar36,uVar4) * 4;
      }
      if (iVar13 < iVar2) {
        lVar11 = 0;
        do {
          lVar10 = lrintf(fVar41 + (float)*(int *)(*param_1 + lVar11 * 4 + (long)iVar13 * 4) *
                                   fVar40);
          uVar37 = (undefined1)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar37 = 0x7f, (int)lVar10 < 1)) {
            uVar37 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar11 + iVar13) = uVar37;
          lVar11 = lVar11 + 1;
        } while (lVar11 != (ulong)(uint)((iVar2 + -1) - iVar13) + 1);
      }
      iVar42 = iVar42 + -1;
      param_1 = (undefined1 (*) [16])(*param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar42 != 0);
  }
  return;
}


==================================================================

### FUNC 00280930 (1096 bytes) name=FUN_00280930

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00280930(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  uint uVar1;
  int iVar2;
  undefined3 uVar3;
  undefined1 auVar4 [16];
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  undefined2 uVar10;
  ushort *puVar11;
  ulong uVar12;
  long lVar13;
  undefined2 *puVar14;
  ulong uVar15;
  undefined2 uVar16;
  undefined8 *puVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  float fVar20;
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined8 uVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  byte bVar39;
  undefined1 uVar40;
  undefined1 uVar41;
  undefined1 uVar42;
  int iVar43;
  undefined1 auVar22 [12];
  undefined1 auVar25 [16];
  
  iVar2 = *param_7;
  iVar43 = param_7[1];
  fVar37 = (float)*param_8;
  fVar38 = (float)param_8[1];
  if (iVar43 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        uVar15 = 0;
      }
      else {
        uVar15 = 0;
        puVar11 = param_1;
        puVar17 = param_5;
        do {
          auVar30._2_2_ = 0;
          auVar30._0_2_ = puVar11[4];
          auVar30._4_2_ = puVar11[5];
          auVar30._6_2_ = 0;
          auVar30._8_2_ = puVar11[6];
          auVar30._10_2_ = 0;
          auVar30._12_2_ = puVar11[7];
          auVar30._14_2_ = 0;
          auVar31 = NEON_ucvtf(auVar30,4);
          auVar27._2_2_ = 0;
          auVar27._0_2_ = *puVar11;
          auVar27._4_2_ = puVar11[1];
          auVar27._6_2_ = 0;
          auVar27._8_2_ = puVar11[2];
          auVar27._10_2_ = 0;
          auVar27._12_2_ = puVar11[3];
          auVar27._14_2_ = 0;
          auVar27 = NEON_ucvtf(auVar27,4);
          fVar33 = fVar38 + auVar31._0_4_ * fVar37;
          fVar34 = fVar38 + auVar31._4_4_ * fVar37;
          fVar35 = fVar38 + auVar31._8_4_ * fVar37;
          fVar36 = fVar38 + auVar31._12_4_ * fVar37;
          auVar31._0_8_ = CONCAT44(fVar38 + auVar27._4_4_ * fVar37,fVar38 + auVar27._0_4_ * fVar37);
          auVar31._8_4_ = fVar38 + auVar27._8_4_ * fVar37;
          auVar31._12_4_ = fVar38 + auVar27._12_4_ * fVar37;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar32 = auVar31._8_8_;
            iVar8 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar31._8_8_ = uVar32;
            if (iVar8 != 0) {
              auVar28._8_4_ = 0x80000000;
              auVar28._0_8_ = 0x8000000080000000;
              auVar28._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar28._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar23._8_4_ = 0x3f000000;
            auVar23._0_8_ = 0x3f0000003f000000;
            auVar23._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar23._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar8 = (int)(auVar31._0_4_ +
                       (float)CONCAT13(auVar31[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12(auVar31[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11(auVar31[1] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         auVar31[0] & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar5 = (int)(auVar31._4_4_ +
                       (float)CONCAT13(auVar31[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12(auVar31[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11(auVar31[5] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         auVar31[4] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar40 = (undefined1)((uint)iVar5 >> 8);
          uVar41 = (undefined1)((uint)iVar5 >> 0x10);
          uVar42 = (undefined1)((uint)iVar5 >> 0x18);
          iVar6 = (int)(auVar31._8_4_ +
                       (float)CONCAT13(auVar31[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12(auVar31[10] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11(auVar31[9] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         auVar31[8] & (byte)_uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar7 = (int)(auVar31._12_4_ +
                       (float)CONCAT13(auVar31[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12(auVar31[0xe] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11(auVar31[0xd] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 0x28
                                                               ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x28),
                                                  auVar31[0xc] &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar4[4] = (char)iVar5;
          auVar4._0_4_ = iVar8;
          auVar4[5] = uVar40;
          auVar4[6] = uVar41;
          auVar4[7] = uVar42;
          auVar4[8] = (char)iVar6;
          auVar4[9] = (char)((uint)iVar6 >> 8);
          auVar4[10] = (char)((uint)iVar6 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar6 >> 0x18);
          auVar4[0xc] = (char)iVar7;
          auVar4[0xd] = (char)((uint)iVar7 >> 8);
          auVar4[0xe] = (char)((uint)iVar7 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar7 >> 0x18);
          uVar32 = NEON_sqxtn(CONCAT17(uVar42,CONCAT16(uVar41,CONCAT15(uVar40,CONCAT14((char)iVar5,
                                                                                       iVar8)))),
                              auVar4,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ed0), iVar8 != 0))
          {
            auVar29._8_4_ = 0x80000000;
            auVar29._0_8_ = 0x8000000080000000;
            auVar29._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar29._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar24._8_4_ = 0x3f000000;
            auVar24._0_8_ = 0x3f0000003f000000;
            auVar24._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar24._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar1 = (int)uVar15 + 8;
          uVar15 = (ulong)uVar1;
          puVar11 = puVar11 + 8;
          fVar20 = (float)CONCAT13((byte)((uint)fVar33 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar33 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar33 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar33,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar22._0_8_ =
               CONCAT17((byte)((uint)fVar34 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar34 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar34 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar34,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar20))));
          auVar22[8] = SUB41(fVar35,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar22[9] = (byte)((uint)fVar35 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar22[10] = (byte)((uint)fVar35 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar22[0xb] = (byte)((uint)fVar35 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar25[0xc] = SUB41(fVar36,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar25._0_12_ = auVar22;
          auVar25[0xd] = (byte)((uint)fVar36 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar25[0xe] = (byte)((uint)fVar36 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar25[0xf] = (byte)((uint)fVar36 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar26._0_8_ =
               CONCAT44((int)(fVar34 + (float)((ulong)auVar22._0_8_ >> 0x20)),(int)(fVar33 + fVar20)
                       );
          auVar26._8_4_ = (int)(fVar35 + auVar22._8_4_);
          auVar26._12_4_ = (int)(fVar36 + auVar25._12_4_);
          uVar21 = NEON_sqxtn(auVar26._0_8_,auVar26,4);
          puVar17[1] = uVar21;
          *puVar17 = uVar32;
          puVar17 = puVar17 + 2;
        } while ((int)uVar1 < iVar2 + -7);
      }
      iVar8 = (int)uVar15;
      if (iVar8 < iVar2 + -3) {
        lVar13 = (long)iVar8;
        uVar1 = (iVar2 + -4) - iVar8;
        puVar11 = param_1 + lVar13;
        puVar14 = (undefined2 *)((long)param_5 + lVar13 * 2);
        bVar39 = (byte)(uVar1 >> 0x1a);
        uVar3 = (undefined3)(uVar1 >> 2);
        do {
          lVar9 = lrintf(fVar38 + (float)*puVar11 * fVar37);
          uVar16 = 0x8000;
          uVar18 = 0x7fff;
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar38 + (float)puVar11[1] * fVar37);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          *puVar14 = uVar19;
          puVar14[1] = uVar10;
          lVar9 = lrintf(fVar38 + (float)puVar11[2] * fVar37);
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar38 + (float)puVar11[3] * fVar37);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          puVar11 = puVar11 + 4;
          puVar14[2] = uVar19;
          puVar14[3] = uVar10;
          puVar14 = puVar14 + 4;
        } while (puVar11 != param_1 + lVar13 + 4 + (ulong)CONCAT13(bVar39,uVar3) * 4);
        uVar15 = (ulong)(uint)(iVar8 + 4 + CONCAT13(bVar39,uVar3) * 4);
      }
      if ((int)uVar15 < iVar2) {
        uVar12 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
        lVar13 = 0;
        do {
          lVar9 = lrintf(fVar38 + (float)*(ushort *)((long)param_1 + lVar13 + uVar12) * fVar37);
          uVar19 = (undefined2)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = 0x7fff, (int)lVar9 < 1)) {
            uVar19 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar13 + uVar12) = uVar19;
          lVar13 = lVar13 + 2;
        } while (lVar13 != ((ulong)(uint)((iVar2 + -1) - (int)uVar15) + 1) * 2);
      }
      iVar43 = iVar43 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar43 != 0);
  }
  return;
}


==================================================================

### FUNC 00280d78 (1092 bytes) name=FUN_00280d78

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00280d78(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined3 uVar3;
  undefined1 auVar4 [16];
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  undefined2 uVar10;
  undefined8 *puVar11;
  byte *pbVar12;
  long lVar13;
  undefined2 *puVar14;
  int iVar15;
  undefined2 uVar16;
  undefined8 *puVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  undefined1 uVar20;
  undefined1 auVar23 [12];
  undefined8 uVar21;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar27 [16];
  undefined8 uVar22;
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  byte bVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  int iVar45;
  undefined1 auVar26 [16];
  
  iVar1 = *param_7;
  iVar45 = param_7[1];
  fVar40 = (float)*param_8;
  fVar41 = (float)param_8[1];
  if (iVar45 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar15 = 0;
      }
      else {
        iVar15 = 0;
        puVar11 = param_1;
        puVar17 = param_5;
                    /* try { // try from 00280e30 to 00380e4f has its CatchHandler @ 00280e30
                       catch(type#1 @ 00000000) { ... } // from try @ 00280e30 with catch @ 00280e30
                       catch(type#1 @ 00000000) { ... } // from try @ 00280e88 with catch @ 00280e30
                        */
        do {
          uVar22 = *puVar11;
          uVar20 = (undefined1)((ulong)uVar22 >> 8);
          auVar31._6_2_ = 0;
          auVar31._0_6_ =
               (uint6)CONCAT14(uVar20,(uint)CONCAT12(uVar20,(ushort)(byte)uVar22)) & 0xffff0000ffff;
                    /* try { // try from 00280f44 to 00380f53 has its CatchHandler @ 00280fa4 */
          auVar31[8] = (char)((ulong)uVar22 >> 0x10);
          auVar31._9_3_ = 0;
          auVar31[0xc] = (char)((ulong)uVar22 >> 0x18);
          auVar31._13_3_ = 0;
          auVar31 = NEON_ucvtf(auVar31,4);
          auVar28._1_3_ = 0;
          auVar28[0] = (byte)((ulong)uVar22 >> 0x20);
          auVar28[4] = (char)((ulong)uVar22 >> 0x28);
          auVar28._5_3_ = 0;
          auVar28[8] = (char)((ulong)uVar22 >> 0x30);
          auVar28._9_3_ = 0;
          auVar28[0xc] = (char)((ulong)uVar22 >> 0x38);
          auVar28._13_3_ = 0;
          auVar28 = NEON_ucvtf(auVar28,4);
          fVar32 = fVar41 + auVar31._0_4_ * fVar40;
          fVar34 = fVar41 + auVar31._4_4_ * fVar40;
          fVar36 = fVar41 + auVar31._8_4_ * fVar40;
          fVar38 = fVar41 + auVar31._12_4_ * fVar40;
                    /* try { // try from 00280f6c to 00380f73 has its CatchHandler @ 00280fa0 */
          fVar33 = fVar41 + auVar28._0_4_ * fVar40;
          fVar35 = fVar41 + auVar28._4_4_ * fVar40;
          fVar37 = fVar41 + auVar28._8_4_ * fVar40;
          fVar39 = fVar41 + auVar28._12_4_ * fVar40;
                    /* try { // try from 00280f74 to 00380fa7 has its CatchHandler @ 00280e94 */
          if (((DAT_00531ed0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ed0), iVar8 != 0))
          {
            auVar29._8_4_ = 0x80000000;
            auVar29._0_8_ = 0x8000000080000000;
            auVar29._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar29._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
                    /* catch() { ... } // from try @ 00280f6c with catch @ 00280fa0 */
                    /* catch() { ... } // from try @ 00280f44 with catch @ 00280fa4 */
          }
                    /* try { // try from 00280e50 to 00380e5b has its CatchHandler @ 00280e7c */
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar24._8_4_ = 0x3f000000;
            auVar24._0_8_ = 0x3f0000003f000000;
            auVar24._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar24._8_8_;
                    /* try { // try from 00280e64 to 00380e6b has its CatchHandler @ 00280e78 */
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00280e64 with catch @ 00280e78
                        */
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00280e50 with catch @ 00280e7c
                        */
                    /* try { // try from 00280e80 to 00380e87 has its CatchHandler @ 00280e90 */
                    /* try { // try from 00280e88 to 00380e93 has its CatchHandler @ 00280e30 */
                    /* catch(type#1 @ 00000000) { ... } // from try @ 00280e80 with catch @ 00280e90
                        */
          iVar8 = (int)(fVar32 + (float)CONCAT13((byte)((uint)fVar32 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar32 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar32 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar32,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar5 = (int)(fVar34 + (float)CONCAT13((byte)((uint)fVar34 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar34 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar34 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar34,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar20 = (undefined1)((uint)iVar5 >> 8);
          uVar43 = (undefined1)((uint)iVar5 >> 0x10);
          uVar44 = (undefined1)((uint)iVar5 >> 0x18);
          iVar6 = (int)(fVar36 + (float)CONCAT13((byte)((uint)fVar36 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar36 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar36 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar36,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar7 = (int)(fVar38 + (float)CONCAT13((byte)((uint)fVar38 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar38 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar38 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar38,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar4[4] = (char)iVar5;
          auVar4._0_4_ = iVar8;
          auVar4[5] = uVar20;
          auVar4[6] = uVar43;
          auVar4[7] = uVar44;
          auVar4[8] = (char)iVar6;
          auVar4[9] = (char)((uint)iVar6 >> 8);
          auVar4[10] = (char)((uint)iVar6 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar6 >> 0x18);
          auVar4[0xc] = (char)iVar7;
          auVar4[0xd] = (char)((uint)iVar7 >> 8);
          auVar4[0xe] = (char)((uint)iVar7 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar7 >> 0x18);
                    /* try { // try from 00280e94 to 00380f43 has its CatchHandler @ 00280e94
                       catch() { ... } // from try @ 00280e94 with catch @ 00280e94
                       catch() { ... } // from try @ 00280f74 with catch @ 00280e94
                       catch() { ... } // from try @ 00280fb0 with catch @ 00280e94 */
          uVar22 = NEON_sqxtn(CONCAT17(uVar44,CONCAT16(uVar43,CONCAT15(uVar20,CONCAT14((char)iVar5,
                                                                                       iVar8)))),
                              auVar4,4);
                    /* try { // try from 00280fa8 to 00380faf has its CatchHandler @ 00280fb8 */
                    /* try { // try from 00280fb0 to 00380fbb has its CatchHandler @ 00280e94 */
          if (((DAT_00531ed0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ed0), iVar8 != 0))
          {
            auVar30._8_4_ = 0x80000000;
            auVar30._0_8_ = 0x8000000080000000;
            auVar30._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar30._8_8_;
                    /* catch() { ... } // from try @ 00280fa8 with catch @ 00280fb8 */
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar25._8_4_ = 0x3f000000;
            auVar25._0_8_ = 0x3f0000003f000000;
            auVar25._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar25._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = iVar15 + 8;
          puVar11 = puVar11 + 1;
          fVar32 = (float)CONCAT13((byte)((uint)fVar33 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar33 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar33 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar33,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar23._0_8_ =
               CONCAT17((byte)((uint)fVar35 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar35 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar35 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar35,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar32))));
          auVar23[8] = SUB41(fVar37,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar23[9] = (byte)((uint)fVar37 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar23[10] = (byte)((uint)fVar37 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar23[0xb] = (byte)((uint)fVar37 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar26[0xc] = SUB41(fVar39,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar26._0_12_ = auVar23;
          auVar26[0xd] = (byte)((uint)fVar39 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar26[0xe] = (byte)((uint)fVar39 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar26[0xf] = (byte)((uint)fVar39 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar27._0_8_ =
               CONCAT44((int)(fVar35 + (float)((ulong)auVar23._0_8_ >> 0x20)),(int)(fVar33 + fVar32)
                       );
          auVar27._8_4_ = (int)(fVar37 + auVar23._8_4_);
          auVar27._12_4_ = (int)(fVar39 + auVar26._12_4_);
          uVar21 = NEON_sqxtn(auVar27._0_8_,auVar27,4);
          puVar17[1] = uVar21;
          *puVar17 = uVar22;
          puVar17 = puVar17 + 2;
        } while (iVar15 < iVar1 + -7);
      }
      if (iVar15 < iVar1 + -3) {
        lVar13 = (long)iVar15;
        uVar2 = (iVar1 + -4) - iVar15;
        pbVar12 = (byte *)((long)param_1 + lVar13);
        puVar14 = (undefined2 *)((long)param_5 + lVar13 * 2);
        bVar42 = (byte)(uVar2 >> 0x1a);
        uVar3 = (undefined3)(uVar2 >> 2);
        do {
          lVar9 = lrintf(fVar41 + (float)*pbVar12 * fVar40);
          uVar16 = 0x8000;
          uVar18 = 0x7fff;
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar41 + (float)pbVar12[1] * fVar40);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          *puVar14 = uVar19;
          puVar14[1] = uVar10;
          lVar9 = lrintf(fVar41 + (float)pbVar12[2] * fVar40);
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar41 + (float)pbVar12[3] * fVar40);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          pbVar12 = pbVar12 + 4;
          puVar14[2] = uVar19;
          puVar14[3] = uVar10;
          puVar14 = puVar14 + 4;
        } while (pbVar12 != (byte *)((long)param_1 + lVar13 + 4 + (ulong)CONCAT13(bVar42,uVar3) * 4)
                );
                    /* try { // try from 002810dc to 0038112b has its CatchHandler @ 00281140 */
        iVar15 = iVar15 + 4 + CONCAT13(bVar42,uVar3) * 4;
      }
      if (iVar15 < iVar1) {
        lVar13 = 0;
        do {
          lVar9 = lrintf(fVar41 + (float)*(byte *)((long)param_1 + lVar13 + iVar15) * fVar40);
          uVar19 = (undefined2)lVar9;
                    /* catch(type#1 @ 00000000) { ... } // from try @ 002810dc with catch @ 00281140
                        */
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = 0x7fff, (int)lVar9 < 1)) {
            uVar19 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar13 * 2 + (long)iVar15 * 2) = uVar19;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar1 + -1) - iVar15) + 1);
      }
      iVar45 = iVar45 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar45 != 0);
  }
  return;
}


==================================================================

### FUNC 002811bc (1092 bytes) name=FUN_002811bc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002811bc(undefined8 *param_1,long param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined3 uVar3;
  undefined1 auVar4 [16];
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  long lVar9;
  undefined2 uVar10;
  undefined8 *puVar11;
  char *pcVar12;
  long lVar13;
  undefined2 *puVar14;
  int iVar15;
  undefined2 uVar16;
  undefined8 *puVar17;
  undefined2 uVar18;
  undefined2 uVar19;
  undefined1 auVar22 [12];
  undefined8 uVar20;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar26 [16];
  undefined8 uVar21;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  byte bVar41;
  undefined1 uVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  int iVar45;
  undefined1 auVar25 [16];
  
  iVar1 = *param_7;
  iVar45 = param_7[1];
  fVar39 = (float)*param_8;
  fVar40 = (float)param_8[1];
  if (iVar45 != 0) {
    do {
      if (iVar1 + -7 < 1) {
        iVar15 = 0;
      }
      else {
        iVar15 = 0;
        puVar11 = param_1;
        puVar17 = param_5;
        do {
          uVar21 = *puVar11;
          auVar30._0_4_ = (int)(short)(char)uVar21;
          auVar30._4_4_ = (int)(short)(char)((ulong)uVar21 >> 8);
          auVar30._8_4_ = (int)(short)(char)((ulong)uVar21 >> 0x10);
          auVar30._12_4_ = (int)(short)(char)((ulong)uVar21 >> 0x18);
          auVar30 = NEON_scvtf(auVar30,4);
          auVar27._0_4_ = (int)(short)(char)((ulong)uVar21 >> 0x20);
          auVar27._4_4_ = (int)(short)(char)((ulong)uVar21 >> 0x28);
          auVar27._8_4_ = (int)(short)(char)((ulong)uVar21 >> 0x30);
          auVar27._12_4_ = (int)(short)(char)((ulong)uVar21 >> 0x38);
          auVar27 = NEON_scvtf(auVar27,4);
          fVar31 = fVar40 + auVar30._0_4_ * fVar39;
          fVar33 = fVar40 + auVar30._4_4_ * fVar39;
          fVar35 = fVar40 + auVar30._8_4_ * fVar39;
          fVar37 = fVar40 + auVar30._12_4_ * fVar39;
          fVar32 = fVar40 + auVar27._0_4_ * fVar39;
          fVar34 = fVar40 + auVar27._4_4_ * fVar39;
          fVar36 = fVar40 + auVar27._8_4_ * fVar39;
          fVar38 = fVar40 + auVar27._12_4_ * fVar39;
          if (((DAT_00531ed0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ed0), iVar8 != 0))
          {
            auVar28._8_4_ = 0x80000000;
            auVar28._0_8_ = 0x8000000080000000;
            auVar28._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar28._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar23._8_4_ = 0x3f000000;
            auVar23._0_8_ = 0x3f0000003f000000;
            auVar23._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar23._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar8 = (int)(fVar31 + (float)CONCAT13((byte)((uint)fVar31 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar31 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar31 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar31,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar5 = (int)(fVar33 + (float)CONCAT13((byte)((uint)fVar33 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar33 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar33 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar33,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar42 = (undefined1)((uint)iVar5 >> 8);
          uVar43 = (undefined1)((uint)iVar5 >> 0x10);
          uVar44 = (undefined1)((uint)iVar5 >> 0x18);
          iVar6 = (int)(fVar35 + (float)CONCAT13((byte)((uint)fVar35 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar35 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar35 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar35,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar7 = (int)(fVar37 + (float)CONCAT13((byte)((uint)fVar37 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar37 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar37 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar37,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar4[4] = (char)iVar5;
          auVar4._0_4_ = iVar8;
          auVar4[5] = uVar42;
          auVar4[6] = uVar43;
          auVar4[7] = uVar44;
          auVar4[8] = (char)iVar6;
          auVar4[9] = (char)((uint)iVar6 >> 8);
          auVar4[10] = (char)((uint)iVar6 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar6 >> 0x18);
          auVar4[0xc] = (char)iVar7;
          auVar4[0xd] = (char)((uint)iVar7 >> 8);
          auVar4[0xe] = (char)((uint)iVar7 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar7 >> 0x18);
          uVar21 = NEON_sqxtn(CONCAT17(uVar44,CONCAT16(uVar43,CONCAT15(uVar42,CONCAT14((char)iVar5,
                                                                                       iVar8)))),
                              auVar4,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ed0), iVar8 != 0))
          {
            auVar29._8_4_ = 0x80000000;
            auVar29._0_8_ = 0x8000000080000000;
            auVar29._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar29._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar8 = __cxa_guard_acquire(&DAT_00531ec8), iVar8 != 0))
          {
            auVar24._8_4_ = 0x3f000000;
            auVar24._0_8_ = 0x3f0000003f000000;
            auVar24._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar24._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = iVar15 + 8;
          puVar11 = puVar11 + 1;
          fVar31 = (float)CONCAT13((byte)((uint)fVar32 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar32 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar32 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar32,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar22._0_8_ =
               CONCAT17((byte)((uint)fVar34 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar34 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar34 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar34,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar31))));
          auVar22[8] = SUB41(fVar36,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar22[9] = (byte)((uint)fVar36 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar22[10] = (byte)((uint)fVar36 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar22[0xb] = (byte)((uint)fVar36 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar25[0xc] = SUB41(fVar38,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar25._0_12_ = auVar22;
          auVar25[0xd] = (byte)((uint)fVar38 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar25[0xe] = (byte)((uint)fVar38 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar25[0xf] = (byte)((uint)fVar38 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar26._0_8_ =
               CONCAT44((int)(fVar34 + (float)((ulong)auVar22._0_8_ >> 0x20)),(int)(fVar32 + fVar31)
                       );
          auVar26._8_4_ = (int)(fVar36 + auVar22._8_4_);
          auVar26._12_4_ = (int)(fVar38 + auVar25._12_4_);
          uVar20 = NEON_sqxtn(auVar26._0_8_,auVar26,4);
          puVar17[1] = uVar20;
          *puVar17 = uVar21;
          puVar17 = puVar17 + 2;
        } while (iVar15 < iVar1 + -7);
      }
      if (iVar15 < iVar1 + -3) {
        lVar13 = (long)iVar15;
        uVar2 = (iVar1 + -4) - iVar15;
        pcVar12 = (char *)((long)param_1 + lVar13);
        puVar14 = (undefined2 *)((long)param_5 + lVar13 * 2);
        bVar41 = (byte)(uVar2 >> 0x1a);
        uVar3 = (undefined3)(uVar2 >> 2);
        do {
          lVar9 = lrintf(fVar40 + (float)(int)*pcVar12 * fVar39);
          uVar16 = 0x8000;
          uVar18 = 0x7fff;
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar40 + (float)(int)pcVar12[1] * fVar39);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          *puVar14 = uVar19;
          puVar14[1] = uVar10;
          lVar9 = lrintf(fVar40 + (float)(int)pcVar12[2] * fVar39);
          uVar19 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = uVar18, (int)lVar9 < 1)) {
            uVar19 = uVar16;
          }
          lVar9 = lrintf(fVar40 + (float)(int)pcVar12[3] * fVar39);
          uVar10 = (short)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar10 = uVar18, (int)lVar9 < 1)) {
            uVar10 = uVar16;
          }
          pcVar12 = pcVar12 + 4;
          puVar14[2] = uVar19;
          puVar14[3] = uVar10;
          puVar14 = puVar14 + 4;
        } while (pcVar12 != (char *)((long)param_1 + lVar13 + 4 + (ulong)CONCAT13(bVar41,uVar3) * 4)
                );
        iVar15 = iVar15 + 4 + CONCAT13(bVar41,uVar3) * 4;
      }
      if (iVar15 < iVar1) {
        lVar13 = 0;
        do {
          lVar9 = lrintf(fVar40 + (float)(int)*(char *)((long)param_1 + lVar13 + iVar15) * fVar39);
          uVar19 = (undefined2)lVar9;
          if ((0xffff < (int)lVar9 + 0x8000U) && (uVar19 = 0x7fff, (int)lVar9 < 1)) {
            uVar19 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar13 * 2 + (long)iVar15 * 2) = uVar19;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar1 + -1) - iVar15) + 1);
      }
      iVar45 = iVar45 + -1;
      param_1 = (undefined8 *)((long)param_1 + param_2);
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar45 != 0);
  }
  return;
}


==================================================================

### FUNC 00281600 (1060 bytes) name=FUN_00281600

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00281600(ushort *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined3 uVar4;
  undefined1 auVar5 [16];
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  undefined1 uVar11;
  ushort *puVar12;
  undefined1 *puVar13;
  long lVar14;
  int iVar15;
  undefined8 *puVar16;
  float fVar17;
  undefined8 uVar18;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar24 [16];
  undefined8 uVar19;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  byte bVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  int iVar41;
  undefined1 auVar20 [12];
  undefined1 auVar23 [16];
  
  iVar2 = *param_7;
  iVar41 = param_7[1];
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar41 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        iVar15 = 0;
      }
      else {
        iVar15 = 0;
        puVar12 = param_1;
        puVar16 = param_5;
        do {
          auVar29._2_2_ = 0;
          auVar29._0_2_ = puVar12[4];
          auVar29._4_2_ = puVar12[5];
          auVar29._6_2_ = 0;
          auVar29._8_2_ = puVar12[6];
          auVar29._10_2_ = 0;
          auVar29._12_2_ = puVar12[7];
          auVar29._14_2_ = 0;
          auVar30 = NEON_ucvtf(auVar29,4);
          auVar25._2_2_ = 0;
          auVar25._0_2_ = *puVar12;
          auVar25._4_2_ = puVar12[1];
          auVar25._6_2_ = 0;
          auVar25._8_2_ = puVar12[2];
          auVar25._10_2_ = 0;
          auVar25._12_2_ = puVar12[3];
          auVar25._14_2_ = 0;
          auVar25 = NEON_ucvtf(auVar25,4);
          fVar31 = fVar36 + auVar30._0_4_ * fVar35;
          fVar32 = fVar36 + auVar30._4_4_ * fVar35;
          fVar33 = fVar36 + auVar30._8_4_ * fVar35;
          fVar34 = fVar36 + auVar30._12_4_ * fVar35;
          auVar30._0_8_ = CONCAT44(fVar36 + auVar25._4_4_ * fVar35,fVar36 + auVar25._0_4_ * fVar35);
          auVar30._8_4_ = fVar36 + auVar25._8_4_ * fVar35;
          auVar30._12_4_ = fVar36 + auVar25._12_4_ * fVar35;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar19 = auVar30._8_8_;
            iVar9 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar30._8_8_ = uVar19;
            if (iVar9 != 0) {
              auVar26._8_4_ = 0x80000000;
              auVar26._0_8_ = 0x8000000080000000;
              auVar26._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar26._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar21._8_4_ = 0x3f000000;
            auVar21._0_8_ = 0x3f0000003f000000;
            auVar21._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar21._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = (int)(auVar30._0_4_ +
                       (float)CONCAT13(auVar30[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12(auVar30[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11(auVar30[1] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         auVar30[0] & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar6 = (int)(auVar30._4_4_ +
                       (float)CONCAT13(auVar30[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12(auVar30[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11(auVar30[5] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         auVar30[4] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar38 = (undefined1)((uint)iVar6 >> 8);
          uVar39 = (undefined1)((uint)iVar6 >> 0x10);
          uVar40 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)(auVar30._8_4_ +
                       (float)CONCAT13(auVar30[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12(auVar30[10] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11(auVar30[9] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         auVar30[8] & (byte)_uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar8 = (int)(auVar30._12_4_ +
                       (float)CONCAT13(auVar30[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12(auVar30[0xe] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11(auVar30[0xd] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 0x28
                                                               ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x28),
                                                  auVar30[0xc] &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar5[4] = (char)iVar6;
          auVar5._0_4_ = iVar9;
          auVar5[5] = uVar38;
          auVar5[6] = uVar39;
          auVar5[7] = uVar40;
          auVar5[8] = (char)iVar7;
          auVar5[9] = (char)((uint)iVar7 >> 8);
          auVar5[10] = (char)((uint)iVar7 >> 0x10);
          auVar5[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar5[0xc] = (char)iVar8;
          auVar5[0xd] = (char)((uint)iVar8 >> 8);
          auVar5[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar5[0xf] = (char)((uint)iVar8 >> 0x18);
          uVar19 = NEON_sqxtn(CONCAT17(uVar40,CONCAT16(uVar39,CONCAT15(uVar38,CONCAT14((char)iVar6,
                                                                                       iVar9)))),
                              auVar5,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar27._8_4_ = 0x80000000;
            auVar27._0_8_ = 0x8000000080000000;
            auVar27._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar27._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar22._8_4_ = 0x3f000000;
            auVar22._0_8_ = 0x3f0000003f000000;
            auVar22._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar22._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = iVar15 + 8;
          puVar12 = puVar12 + 8;
          fVar17 = (float)CONCAT13((byte)((uint)fVar31 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar31 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar31 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar31,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar20._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar32 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar32,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar17))));
          auVar20[8] = SUB41(fVar33,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar20[9] = (byte)((uint)fVar33 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar20[10] = (byte)((uint)fVar33 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar20[0xb] = (byte)((uint)fVar33 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar23[0xc] = SUB41(fVar34,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar23._0_12_ = auVar20;
          auVar23[0xd] = (byte)((uint)fVar34 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar23[0xe] = (byte)((uint)fVar34 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar23[0xf] = (byte)((uint)fVar34 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar24._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar20._0_8_ >> 0x20)),(int)(fVar31 + fVar17)
                       );
          auVar24._8_4_ = (int)(fVar33 + auVar20._8_4_);
          auVar24._12_4_ = (int)(fVar34 + auVar23._12_4_);
          uVar18 = NEON_sqxtn(auVar24._0_8_,auVar24,4);
          auVar28._8_8_ = uVar18;
          auVar28._0_8_ = uVar19;
          uVar19 = NEON_sqxtn(uVar18,auVar28,2);
          *puVar16 = uVar19;
          puVar16 = puVar16 + 1;
        } while (iVar15 < iVar2 + -7);
      }
      if (iVar15 < iVar2 + -3) {
        lVar14 = (long)iVar15;
        uVar3 = (iVar2 + -4) - iVar15;
        puVar12 = param_1 + lVar14;
        bVar37 = (byte)(uVar3 >> 0x1a);
        uVar4 = (undefined3)(uVar3 >> 2);
        puVar13 = (undefined1 *)((long)param_5 + lVar14);
        do {
          lVar10 = lrintf(fVar36 + (float)*puVar12 * fVar35);
          uVar39 = 0x80;
          uVar40 = 0x7f;
          uVar38 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = uVar40, (int)lVar10 < 1)) {
            uVar38 = uVar39;
          }
          lVar10 = lrintf(fVar36 + (float)puVar12[1] * fVar35);
          uVar11 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar11 = uVar40, (int)lVar10 < 1)) {
            uVar11 = uVar39;
          }
          *puVar13 = uVar38;
          puVar13[1] = uVar11;
          lVar10 = lrintf(fVar36 + (float)puVar12[2] * fVar35);
          uVar38 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = uVar40, (int)lVar10 < 1)) {
            uVar38 = uVar39;
          }
          lVar10 = lrintf(fVar36 + (float)puVar12[3] * fVar35);
          uVar11 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar11 = uVar40, (int)lVar10 < 1)) {
            uVar11 = uVar39;
          }
          puVar13[2] = uVar38;
          puVar1 = puVar13 + 4;
          puVar12 = puVar12 + 4;
          puVar13[3] = uVar11;
          puVar13 = puVar1;
        } while (puVar1 != (undefined1 *)
                           ((long)param_5 + lVar14 + 4 + (ulong)CONCAT13(bVar37,uVar4) * 4));
        iVar15 = iVar15 + 4 + CONCAT13(bVar37,uVar4) * 4;
      }
      if (iVar15 < iVar2) {
        lVar14 = 0;
        do {
          lVar10 = lrintf(fVar36 + (float)param_1[iVar15 + lVar14] * fVar35);
          uVar38 = (undefined1)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = 0x7f, (int)lVar10 < 1)) {
            uVar38 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar14 + iVar15) = uVar38;
          lVar14 = lVar14 + 1;
        } while (lVar14 != (ulong)(uint)((iVar2 + -1) - iVar15) + 1);
      }
      iVar41 = iVar41 + -1;
      param_1 = (ushort *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar41 != 0);
  }
  return;
}


==================================================================

### FUNC 00281a24 (1060 bytes) name=FUN_00281a24

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00281a24(short *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7,double *param_8)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined3 uVar4;
  undefined1 auVar5 [16];
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  undefined1 uVar11;
  short *psVar12;
  undefined1 *puVar13;
  long lVar14;
  int iVar15;
  undefined8 *puVar16;
  float fVar17;
  undefined8 uVar18;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar24 [16];
  undefined8 uVar19;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  byte bVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  int iVar41;
  undefined1 auVar20 [12];
  undefined1 auVar23 [16];
  
  iVar2 = *param_7;
  iVar41 = param_7[1];
  fVar35 = (float)*param_8;
  fVar36 = (float)param_8[1];
  if (iVar41 != 0) {
    do {
      if (iVar2 + -7 < 1) {
        iVar15 = 0;
      }
      else {
        iVar15 = 0;
        psVar12 = param_1;
        puVar16 = param_5;
        do {
          auVar29._0_4_ = (int)psVar12[4];
          auVar29._4_4_ = (int)psVar12[5];
          auVar29._8_4_ = (int)psVar12[6];
          auVar29._12_4_ = (int)psVar12[7];
          auVar30 = NEON_scvtf(auVar29,4);
          auVar25._0_4_ = (int)*psVar12;
          auVar25._4_4_ = (int)psVar12[1];
          auVar25._8_4_ = (int)psVar12[2];
          auVar25._12_4_ = (int)psVar12[3];
          auVar25 = NEON_scvtf(auVar25,4);
          fVar31 = fVar36 + auVar30._0_4_ * fVar35;
          fVar32 = fVar36 + auVar30._4_4_ * fVar35;
          fVar33 = fVar36 + auVar30._8_4_ * fVar35;
          fVar34 = fVar36 + auVar30._12_4_ * fVar35;
          auVar30._0_8_ = CONCAT44(fVar36 + auVar25._4_4_ * fVar35,fVar36 + auVar25._0_4_ * fVar35);
          auVar30._8_4_ = fVar36 + auVar25._8_4_ * fVar35;
          auVar30._12_4_ = fVar36 + auVar25._12_4_ * fVar35;
          if ((DAT_00531ed0 & 1) == 0) {
            uVar19 = auVar30._8_8_;
            iVar9 = __cxa_guard_acquire(&DAT_00531ed0);
            auVar30._8_8_ = uVar19;
            if (iVar9 != 0) {
              auVar26._8_4_ = 0x80000000;
              auVar26._0_8_ = 0x8000000080000000;
              auVar26._12_4_ = 0x80000000;
              _uRam0000000000531eb8 = auVar26._8_8_;
              _DAT_00531eb0 = 0x8000000080000000;
              __cxa_guard_release(&DAT_00531ed0);
            }
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar21._8_4_ = 0x3f000000;
            auVar21._0_8_ = 0x3f0000003f000000;
            auVar21._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar21._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = (int)(auVar30._0_4_ +
                       (float)CONCAT13(auVar30[3] & (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                       CONCAT12(auVar30[2] & (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                CONCAT11(auVar30[1] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 8),
                                                         auVar30[0] & (byte)_DAT_00531eb0 |
                                                         (byte)_DAT_00531ea0))));
          iVar6 = (int)(auVar30._4_4_ +
                       (float)CONCAT13(auVar30[7] & (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12(auVar30[6] & (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11(auVar30[5] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         auVar30[4] &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar38 = (undefined1)((uint)iVar6 >> 8);
          uVar39 = (undefined1)((uint)iVar6 >> 0x10);
          uVar40 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)(auVar30._8_4_ +
                       (float)CONCAT13(auVar30[0xb] & (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12(auVar30[10] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11(auVar30[9] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         auVar30[8] & (byte)_uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar8 = (int)(auVar30._12_4_ +
                       (float)CONCAT13(auVar30[0xf] & (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12(auVar30[0xe] &
                                                (byte)((ulong)_uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11(auVar30[0xd] &
                                                         (byte)((ulong)_uRam0000000000531eb8 >> 0x28
                                                               ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x28),
                                                  auVar30[0xc] &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar5[4] = (char)iVar6;
          auVar5._0_4_ = iVar9;
          auVar5[5] = uVar38;
          auVar5[6] = uVar39;
          auVar5[7] = uVar40;
          auVar5[8] = (char)iVar7;
          auVar5[9] = (char)((uint)iVar7 >> 8);
          auVar5[10] = (char)((uint)iVar7 >> 0x10);
          auVar5[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar5[0xc] = (char)iVar8;
          auVar5[0xd] = (char)((uint)iVar8 >> 8);
          auVar5[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar5[0xf] = (char)((uint)iVar8 >> 0x18);
          uVar19 = NEON_sqxtn(CONCAT17(uVar40,CONCAT16(uVar39,CONCAT15(uVar38,CONCAT14((char)iVar6,
                                                                                       iVar9)))),
                              auVar5,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar27._8_4_ = 0x80000000;
            auVar27._0_8_ = 0x8000000080000000;
            auVar27._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar27._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar22._8_4_ = 0x3f000000;
            auVar22._0_8_ = 0x3f0000003f000000;
            auVar22._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar22._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = iVar15 + 8;
          psVar12 = psVar12 + 8;
          fVar17 = (float)CONCAT13((byte)((uint)fVar31 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar31 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar31 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar31,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar20._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar32 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar32,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar17))));
          auVar20[8] = SUB41(fVar33,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar20[9] = (byte)((uint)fVar33 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar20[10] = (byte)((uint)fVar33 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar20[0xb] = (byte)((uint)fVar33 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar23[0xc] = SUB41(fVar34,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar23._0_12_ = auVar20;
          auVar23[0xd] = (byte)((uint)fVar34 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar23[0xe] = (byte)((uint)fVar34 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar23[0xf] = (byte)((uint)fVar34 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar24._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar20._0_8_ >> 0x20)),(int)(fVar31 + fVar17)
                       );
          auVar24._8_4_ = (int)(fVar33 + auVar20._8_4_);
          auVar24._12_4_ = (int)(fVar34 + auVar23._12_4_);
          uVar18 = NEON_sqxtn(auVar24._0_8_,auVar24,4);
          auVar28._8_8_ = uVar18;
          auVar28._0_8_ = uVar19;
          uVar19 = NEON_sqxtn(uVar18,auVar28,2);
          *puVar16 = uVar19;
          puVar16 = puVar16 + 1;
        } while (iVar15 < iVar2 + -7);
      }
      if (iVar15 < iVar2 + -3) {
        lVar14 = (long)iVar15;
        uVar3 = (iVar2 + -4) - iVar15;
        psVar12 = param_1 + lVar14;
        bVar37 = (byte)(uVar3 >> 0x1a);
        uVar4 = (undefined3)(uVar3 >> 2);
        puVar13 = (undefined1 *)((long)param_5 + lVar14);
        do {
          lVar10 = lrintf(fVar36 + (float)(int)*psVar12 * fVar35);
          uVar39 = 0x80;
          uVar40 = 0x7f;
          uVar38 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = uVar40, (int)lVar10 < 1)) {
            uVar38 = uVar39;
          }
          lVar10 = lrintf(fVar36 + (float)(int)psVar12[1] * fVar35);
          uVar11 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar11 = uVar40, (int)lVar10 < 1)) {
            uVar11 = uVar39;
          }
          *puVar13 = uVar38;
          puVar13[1] = uVar11;
          lVar10 = lrintf(fVar36 + (float)(int)psVar12[2] * fVar35);
          uVar38 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = uVar40, (int)lVar10 < 1)) {
            uVar38 = uVar39;
          }
          lVar10 = lrintf(fVar36 + (float)(int)psVar12[3] * fVar35);
          uVar11 = (char)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar11 = uVar40, (int)lVar10 < 1)) {
            uVar11 = uVar39;
          }
          puVar13[2] = uVar38;
          puVar1 = puVar13 + 4;
          psVar12 = psVar12 + 4;
          puVar13[3] = uVar11;
          puVar13 = puVar1;
        } while (puVar1 != (undefined1 *)
                           ((long)param_5 + lVar14 + 4 + (ulong)CONCAT13(bVar37,uVar4) * 4));
        iVar15 = iVar15 + 4 + CONCAT13(bVar37,uVar4) * 4;
      }
      if (iVar15 < iVar2) {
        lVar14 = 0;
        do {
          lVar10 = lrintf(fVar36 + (float)(int)param_1[iVar15 + lVar14] * fVar35);
          uVar38 = (undefined1)lVar10;
          if ((0xff < (int)lVar10 + 0x80U) && (uVar38 = 0x7f, (int)lVar10 < 1)) {
            uVar38 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar14 + iVar15) = uVar38;
          lVar14 = lVar14 + 1;
        } while (lVar14 != (ulong)(uint)((iVar2 + -1) - iVar15) + 1);
      }
      iVar41 = iVar41 + -1;
      param_1 = (short *)((long)param_1 + (param_2 & 0xfffffffffffffffe));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar41 != 0);
  }
  return;
}


==================================================================

### FUNC 00281e48 (1088 bytes) name=FUN_00281e48

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00281e48(undefined1 (*param_1) [16],ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,ulong param_6,int *param_7,double *param_8)

{
  int iVar1;
  uint uVar2;
  undefined3 uVar3;
  undefined1 auVar4 [16];
  undefined8 uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  undefined2 uVar11;
  undefined1 (*pauVar12) [16];
  long lVar13;
  undefined2 *puVar14;
  int iVar15;
  undefined2 uVar16;
  undefined2 uVar17;
  undefined8 *puVar18;
  int *piVar19;
  undefined2 uVar20;
  undefined1 auVar22 [12];
  undefined8 uVar21;
  undefined1 auVar23 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  byte bVar39;
  undefined1 uVar40;
  undefined1 uVar41;
  undefined1 uVar42;
  int iVar43;
  undefined1 auVar24 [16];
  
  iVar1 = *param_7;
  iVar43 = param_7[1];
  fVar37 = (float)*param_8;
  fVar38 = (float)param_8[1];
  if (iVar43 != 0) {
                    /* try { // try from 00281edc to 00381efb has its CatchHandler @ 00281edc
                       catch() { ... } // from try @ 00281edc with catch @ 00281edc
                       catch() { ... } // from try @ 00281f00 with catch @ 00281edc */
    do {
      if (iVar1 + -7 < 1) {
        iVar15 = 0;
      }
      else {
        iVar15 = 0;
        pauVar12 = param_1;
        puVar18 = param_5;
                    /* try { // try from 00281efc to 00381eff has its CatchHandler @ 00281f7c */
                    /* try { // try from 00281f00 to 00381f8f has its CatchHandler @ 00281edc */
        do {
          auVar28 = NEON_scvtf(*pauVar12,4);
          auVar26 = NEON_scvtf(pauVar12[1],4);
          fVar29 = fVar38 + auVar28._0_4_ * fVar37;
          fVar31 = fVar38 + auVar28._4_4_ * fVar37;
          fVar33 = fVar38 + auVar28._8_4_ * fVar37;
          fVar35 = fVar38 + auVar28._12_4_ * fVar37;
          fVar30 = fVar38 + auVar26._0_4_ * fVar37;
          fVar32 = fVar38 + auVar26._4_4_ * fVar37;
          fVar34 = fVar38 + auVar26._8_4_ * fVar37;
          fVar36 = fVar38 + auVar26._12_4_ * fVar37;
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar26._8_4_ = 0x80000000;
            auVar26._0_8_ = 0x8000000080000000;
            auVar26._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar26._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar28._8_4_ = 0x3f000000;
            auVar28._0_8_ = 0x3f0000003f000000;
            auVar28._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar28._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar9 = (int)(fVar29 + (float)CONCAT13((byte)((uint)fVar29 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar29 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                          CONCAT11((byte)((uint)fVar29 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >> 8)
                                                                   | (byte)((ulong)_DAT_00531ea0 >>
                                                                           8),
                                                                   SUB41(fVar29,0) &
                                                                   (byte)_DAT_00531eb0 |
                                                                   (byte)_DAT_00531ea0))));
          iVar6 = (int)(fVar31 + (float)CONCAT13((byte)((uint)fVar31 >> 0x18) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar31 >> 0x10) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                          CONCAT11((byte)((uint)fVar31 >> 8) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x28) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                                   SUB41(fVar31,0) &
                                                                   (byte)((ulong)_DAT_00531eb0 >>
                                                                         0x20) |
                                                                   (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          uVar40 = (undefined1)((uint)iVar6 >> 8);
          uVar41 = (undefined1)((uint)iVar6 >> 0x10);
          uVar42 = (undefined1)((uint)iVar6 >> 0x18);
          iVar7 = (int)(fVar33 + (float)CONCAT13((byte)((uint)fVar33 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x18) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                                 CONCAT12((byte)((uint)fVar33 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x10) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x10
                                                                ),CONCAT11((byte)((uint)fVar33 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 8) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                  SUB41(fVar33,0) & (byte)_uRam0000000000531eb8 |
                                                  (byte)uRam0000000000531ea8))));
          iVar8 = (int)(fVar35 + (float)CONCAT13((byte)((uint)fVar35 >> 0x18) &
                                                 (byte)((ulong)_uRam0000000000531eb8 >> 0x38) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                                 CONCAT12((byte)((uint)fVar35 >> 0x10) &
                                                          (byte)((ulong)_uRam0000000000531eb8 >>
                                                                0x30) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 0x30
                                                                ),CONCAT11((byte)((uint)fVar35 >> 8)
                                                                           & (byte)((ulong)
                                                  _uRam0000000000531eb8 >> 0x28) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x28),
                                                  SUB41(fVar35,0) &
                                                  (byte)((ulong)_uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          auVar4[4] = (char)iVar6;
          auVar4._0_4_ = iVar9;
          auVar4[5] = uVar40;
          auVar4[6] = uVar41;
          auVar4[7] = uVar42;
          auVar4[8] = (char)iVar7;
          auVar4[9] = (char)((uint)iVar7 >> 8);
          auVar4[10] = (char)((uint)iVar7 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar4[0xc] = (char)iVar8;
          auVar4[0xd] = (char)((uint)iVar8 >> 8);
          auVar4[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar8 >> 0x18);
          uVar5 = NEON_sqxtn(CONCAT17(uVar42,CONCAT16(uVar41,CONCAT15(uVar40,CONCAT14((char)iVar6,
                                                                                      iVar9)))),
                             auVar4,4);
          if (((DAT_00531ed0 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ed0), iVar9 != 0))
          {
            auVar27._8_4_ = 0x80000000;
            auVar27._0_8_ = 0x8000000080000000;
            auVar27._12_4_ = 0x80000000;
            _uRam0000000000531eb8 = auVar27._8_8_;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
                    /* catch() { ... } // from try @ 00281efc with catch @ 00281f7c */
          if (((DAT_00531ec8 & 1) == 0) && (iVar9 = __cxa_guard_acquire(&DAT_00531ec8), iVar9 != 0))
          {
            auVar23._8_4_ = 0x3f000000;
            auVar23._0_8_ = 0x3f0000003f000000;
            auVar23._12_4_ = 0x3f000000;
            uRam0000000000531ea8 = auVar23._8_8_;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar15 = iVar15 + 8;
          pauVar12 = pauVar12 + 2;
          fVar29 = (float)CONCAT13((byte)((uint)fVar30 >> 0x18) & bRam0000000000531eb3 |
                                   (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                   CONCAT12((byte)((uint)fVar30 >> 0x10) & bRam0000000000531eb2 |
                                            (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                            CONCAT11((byte)((uint)fVar30 >> 8) & DAT_00531eb0_1 |
                                                     (byte)((ulong)_DAT_00531ea0 >> 8),
                                                     SUB41(fVar30,0) & DAT_00531eb0 |
                                                     (byte)_DAT_00531ea0)));
          auVar22._0_8_ =
               CONCAT17((byte)((uint)fVar32 >> 0x18) & bRam0000000000531eb7 |
                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                        CONCAT16((byte)((uint)fVar32 >> 0x10) & bRam0000000000531eb6 |
                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                 CONCAT15((byte)((uint)fVar32 >> 8) & bRam0000000000531eb5 |
                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                          CONCAT14(SUB41(fVar32,0) & bRam0000000000531eb4 |
                                                   (byte)((ulong)_DAT_00531ea0 >> 0x20),fVar29))));
          auVar22[8] = SUB41(fVar34,0) & (byte)uRam0000000000531eb8 | (byte)uRam0000000000531ea8;
          auVar22[9] = (byte)((uint)fVar34 >> 8) & uRam0000000000531eb8._1_1_ |
                       (byte)((ulong)uRam0000000000531ea8 >> 8);
          auVar22[10] = (byte)((uint)fVar34 >> 0x10) & bRam0000000000531eba |
                        (byte)((ulong)uRam0000000000531ea8 >> 0x10);
          auVar22[0xb] = (byte)((uint)fVar34 >> 0x18) & bRam0000000000531ebb |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x18);
          auVar24[0xc] = SUB41(fVar36,0) & bRam0000000000531ebc |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x20);
          auVar24._0_12_ = auVar22;
          auVar24[0xd] = (byte)((uint)fVar36 >> 8) & bRam0000000000531ebd |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x28);
          auVar24[0xe] = (byte)((uint)fVar36 >> 0x10) & bRam0000000000531ebe |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x30);
          auVar24[0xf] = (byte)((uint)fVar36 >> 0x18) & bRam0000000000531ebf |
                         (byte)((ulong)uRam0000000000531ea8 >> 0x38);
          auVar25._0_8_ =
               CONCAT44((int)(fVar32 + (float)((ulong)auVar22._0_8_ >> 0x20)),(int)(fVar30 + fVar29)
                       );
          auVar25._8_4_ = (int)(fVar34 + auVar22._8_4_);
          auVar25._12_4_ = (int)(fVar36 + auVar24._12_4_);
          uVar21 = NEON_sqxtn(auVar25._0_8_,auVar25,4);
          puVar18[1] = uVar21;
          *puVar18 = uVar5;
          puVar18 = puVar18 + 2;
        } while (iVar15 < iVar1 + -7);
      }
      if (iVar15 < iVar1 + -3) {
        lVar13 = (long)iVar15;
        uVar2 = (iVar1 + -4) - iVar15;
        piVar19 = (int *)(*param_1 + lVar13 * 4);
        puVar14 = (undefined2 *)((long)param_5 + lVar13 * 2);
        bVar39 = (byte)(uVar2 >> 0x1a);
        uVar3 = (undefined3)(uVar2 >> 2);
        do {
          lVar10 = lrintf(fVar38 + (float)*piVar19 * fVar37);
          uVar16 = 0x8000;
          uVar17 = 0x7fff;
          uVar20 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar20 = uVar17, (int)lVar10 < 1)) {
            uVar20 = uVar16;
          }
          lVar10 = lrintf(fVar38 + (float)piVar19[1] * fVar37);
          uVar11 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar11 = uVar17, (int)lVar10 < 1)) {
            uVar11 = uVar16;
          }
          iVar9 = piVar19[2];
          *puVar14 = uVar20;
          puVar14[1] = uVar11;
          lVar10 = lrintf(fVar38 + (float)iVar9 * fVar37);
          uVar20 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar20 = uVar17, (int)lVar10 < 1)) {
            uVar20 = uVar16;
          }
          lVar10 = lrintf(fVar38 + (float)piVar19[3] * fVar37);
          uVar11 = (short)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar11 = uVar17, (int)lVar10 < 1)) {
            uVar11 = uVar16;
          }
          piVar19 = piVar19 + 4;
          puVar14[2] = uVar20;
          puVar14[3] = uVar11;
          puVar14 = puVar14 + 4;
        } while (piVar19 != (int *)(param_1[(ulong)CONCAT13(bVar39,uVar3) + 1] + lVar13 * 4));
        iVar15 = iVar15 + 4 + CONCAT13(bVar39,uVar3) * 4;
      }
      if (iVar15 < iVar1) {
        lVar13 = 0;
        do {
          lVar10 = lrintf(fVar38 + (float)*(int *)(*param_1 + lVar13 * 4 + (long)iVar15 * 4) *
                                   fVar37);
          uVar20 = (undefined2)lVar10;
          if ((0xffff < (int)lVar10 + 0x8000U) && (uVar20 = 0x7fff, (int)lVar10 < 1)) {
            uVar20 = 0x8000;
          }
          *(undefined2 *)((long)param_5 + lVar13 * 2 + (long)iVar15 * 2) = uVar20;
          lVar13 = lVar13 + 1;
        } while (lVar13 != (ulong)(uint)((iVar1 + -1) - iVar15) + 1);
      }
      iVar43 = iVar43 + -1;
      param_1 = (undefined1 (*) [16])(*param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + (param_6 & 0xfffffffffffffffe));
    } while (iVar43 != 0);
  }
  return;
}


==================================================================

### FUNC 00282288 (1280 bytes) name=FUN_00282288

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00282288(undefined8 *param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 *param_5,long param_6,int *param_7)

{
  undefined1 *puVar1;
  int iVar2;
  uint uVar3;
  undefined1 auVar4 [16];
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int iVar11;
  int iVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  int iVar16;
  long lVar17;
  undefined1 uVar18;
  undefined8 *puVar19;
  undefined1 *puVar20;
  long lVar21;
  float *pfVar22;
  int iVar23;
  undefined8 *puVar24;
  undefined1 uVar25;
  undefined1 uVar26;
  undefined1 uVar27;
  byte bVar28;
  byte bVar31;
  byte bVar32;
  byte bVar33;
  byte bVar34;
  byte bVar35;
  byte bVar36;
  byte bVar37;
  undefined8 uVar30;
  undefined8 uVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  undefined8 in_d5;
  undefined8 in_d6;
  int iVar42;
  undefined1 uStack_38;
  undefined1 uStack_28;
  undefined1 uStack_18;
  undefined8 uVar29;
  
  iVar2 = *param_7;
  iVar42 = param_7[1];
  if (iVar42 != 0) {
    do {
      if (iVar2 + -0xf < 1) {
        iVar23 = 0;
      }
      else {
        iVar23 = 0;
        puVar19 = param_1;
        puVar24 = param_5;
        do {
          uVar30 = puVar19[1];
          uVar40 = *puVar19;
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ed0), iVar16 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ec8), iVar16 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar41 = puVar19[3];
          uVar38 = puVar19[2];
          iVar16 = (int)((float)((ulong)uVar40 >> 0x20) +
                        (float)CONCAT13((byte)((ulong)uVar40 >> 0x38) &
                                        (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                        CONCAT12((byte)((ulong)uVar40 >> 0x30) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                 CONCAT11((byte)((ulong)uVar40 >> 0x28) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                          (byte)((ulong)uVar40 >> 0x20) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          iVar5 = (int)((float)uVar30 +
                       (float)CONCAT13((byte)((ulong)uVar30 >> 0x18) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar30 >> 0x10) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar30 >> 8) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         (byte)uVar30 & (byte)uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar7 = (int)((float)((ulong)uVar30 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar30 >> 0x38) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar30 >> 0x30) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar30 >> 0x28) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                         (byte)((ulong)uVar30 >> 0x20) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20)))));
          uStack_38 = (undefined1)iVar5;
          auVar9[4] = (char)iVar16;
          auVar9._0_4_ = (int)((float)uVar40 +
                              (float)CONCAT13((byte)((ulong)uVar40 >> 0x18) &
                                              (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                              (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                              CONCAT12((byte)((ulong)uVar40 >> 0x10) &
                                                       (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                       (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                       CONCAT11((byte)((ulong)uVar40 >> 8) &
                                                                (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                                (byte)((ulong)_DAT_00531ea0 >> 8),
                                                                (byte)uVar40 & (byte)_DAT_00531eb0 |
                                                                (byte)_DAT_00531ea0))));
          auVar9[5] = (char)((uint)iVar16 >> 8);
          auVar9[6] = (char)((uint)iVar16 >> 0x10);
          auVar9[7] = (char)((uint)iVar16 >> 0x18);
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ed0), iVar16 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ec8), iVar16 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar30 = puVar19[5];
          uVar40 = puVar19[4];
          iVar16 = (int)((float)((ulong)uVar38 >> 0x20) +
                        (float)CONCAT13((byte)((ulong)uVar38 >> 0x38) &
                                        (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                        (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                        CONCAT12((byte)((ulong)uVar38 >> 0x30) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                 CONCAT11((byte)((ulong)uVar38 >> 0x28) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                          (byte)((ulong)uVar38 >> 0x20) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          iVar6 = (int)((float)uVar41 +
                       (float)CONCAT13((byte)((ulong)uVar41 >> 0x18) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar41 >> 0x10) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar41 >> 8) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         (byte)uVar41 & (byte)uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar8 = (int)((float)((ulong)uVar41 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar41 >> 0x38) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar41 >> 0x30) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar41 >> 0x28) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                         (byte)((ulong)uVar41 >> 0x20) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20)))));
          uStack_28 = (undefined1)iVar6;
          auVar13[4] = (char)iVar16;
          auVar13._0_4_ =
               (int)((float)uVar38 +
                    (float)CONCAT13((byte)((ulong)uVar38 >> 0x18) &
                                    (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                    (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                    CONCAT12((byte)((ulong)uVar38 >> 0x10) &
                                             (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                             (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                             CONCAT11((byte)((ulong)uVar38 >> 8) &
                                                      (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                      (byte)((ulong)_DAT_00531ea0 >> 8),
                                                      (byte)uVar38 & (byte)_DAT_00531eb0 |
                                                      (byte)_DAT_00531ea0))));
          auVar13[5] = (char)((uint)iVar16 >> 8);
          auVar13[6] = (char)((uint)iVar16 >> 0x10);
          auVar13[7] = (char)((uint)iVar16 >> 0x18);
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ed0), iVar16 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ec8), iVar16 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          uVar41 = puVar19[7];
          uVar38 = puVar19[6];
          bVar28 = (byte)uVar40 & (byte)_DAT_00531eb0;
          bVar31 = (byte)((ulong)uVar40 >> 8) & (byte)((ulong)_DAT_00531eb0 >> 8);
          bVar32 = (byte)((ulong)uVar40 >> 0x10) & (byte)((ulong)_DAT_00531eb0 >> 0x10);
          bVar33 = (byte)((ulong)uVar40 >> 0x18) & (byte)((ulong)_DAT_00531eb0 >> 0x18);
          bVar34 = (byte)((ulong)uVar40 >> 0x20) & (byte)((ulong)_DAT_00531eb0 >> 0x20);
          bVar35 = (byte)((ulong)uVar40 >> 0x28) & (byte)((ulong)_DAT_00531eb0 >> 0x28);
          bVar36 = (byte)((ulong)uVar40 >> 0x30) & (byte)((ulong)_DAT_00531eb0 >> 0x30);
          bVar37 = (byte)((ulong)uVar40 >> 0x38) & (byte)((ulong)_DAT_00531eb0 >> 0x38);
          uVar29 = CONCAT17(bVar37,CONCAT16(bVar36,CONCAT15(bVar35,CONCAT14(bVar34,CONCAT13(bVar33,
                                                  CONCAT12(bVar32,CONCAT11(bVar31,bVar28)))))));
          iVar16 = (int)((float)((ulong)uVar40 >> 0x20) +
                        (float)CONCAT13(bVar37 | (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                        CONCAT12(bVar36 | (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                 CONCAT11(bVar35 | (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x28),
                                                          bVar34 | (byte)((ulong)_DAT_00531ea0 >>
                                                                         0x20)))));
          iVar11 = (int)((float)uVar30 +
                        (float)CONCAT13((byte)((ulong)uVar30 >> 0x18) &
                                        (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                        (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                        CONCAT12((byte)((ulong)uVar30 >> 0x10) &
                                                 (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                 CONCAT11((byte)((ulong)uVar30 >> 8) &
                                                          (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                          (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                          (byte)uVar30 & (byte)uRam0000000000531eb8
                                                          | (byte)uRam0000000000531ea8))));
          iVar12 = (int)((float)((ulong)uVar30 >> 0x20) +
                        (float)CONCAT13((byte)((ulong)uVar30 >> 0x38) &
                                        (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                        (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                        CONCAT12((byte)((ulong)uVar30 >> 0x30) &
                                                 (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                 (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                 CONCAT11((byte)((ulong)uVar30 >> 0x28) &
                                                          (byte)((ulong)uRam0000000000531eb8 >> 0x28
                                                                ) | (byte)((ulong)
                                                  uRam0000000000531ea8 >> 0x28),
                                                  (byte)((ulong)uVar30 >> 0x20) &
                                                  (byte)((ulong)uRam0000000000531eb8 >> 0x20) |
                                                  (byte)((ulong)uRam0000000000531ea8 >> 0x20)))));
          uStack_18 = (undefined1)iVar11;
          auVar14[4] = (char)iVar16;
          auVar14._0_4_ =
               (int)((float)uVar40 +
                    (float)CONCAT13(bVar33 | (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                    CONCAT12(bVar32 | (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                             CONCAT11(bVar31 | (byte)((ulong)_DAT_00531ea0 >> 8),
                                                      bVar28 | (byte)_DAT_00531ea0))));
          auVar14[5] = (char)((uint)iVar16 >> 8);
          auVar14[6] = (char)((uint)iVar16 >> 0x10);
          auVar14[7] = (char)((uint)iVar16 >> 0x18);
          uVar40 = _DAT_00531eb0;
          if (((DAT_00531ed0 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ed0), iVar16 != 0)) {
            uRam0000000000531eb8 = 0x8000000080000000;
            _DAT_00531eb0 = 0x8000000080000000;
            __cxa_guard_release(&DAT_00531ed0);
          }
          if (((DAT_00531ec8 & 1) == 0) &&
             (iVar16 = __cxa_guard_acquire(&DAT_00531ec8), iVar16 != 0)) {
            uRam0000000000531ea8 = 0x3f0000003f000000;
            _DAT_00531ea0 = 0x3f0000003f000000;
            __cxa_guard_release(&DAT_00531ec8);
          }
          iVar23 = iVar23 + 0x10;
          auVar9[8] = uStack_38;
          auVar13[8] = uStack_28;
          puVar19 = puVar19 + 8;
          auVar9[9] = (char)((uint)iVar5 >> 8);
          auVar9[10] = (char)((uint)iVar5 >> 0x10);
          auVar9[0xb] = (char)((uint)iVar5 >> 0x18);
          auVar9[0xc] = (char)iVar7;
          auVar9[0xd] = (char)((uint)iVar7 >> 8);
          auVar9[0xe] = (char)((uint)iVar7 >> 0x10);
          auVar9[0xf] = (char)((uint)iVar7 >> 0x18);
          in_d6 = NEON_sqxtn(in_d6,auVar9,4);
          auVar13[9] = (char)((uint)iVar6 >> 8);
          auVar13[10] = (char)((uint)iVar6 >> 0x10);
          auVar13[0xb] = (char)((uint)iVar6 >> 0x18);
          auVar13[0xc] = (char)iVar8;
          auVar13[0xd] = (char)((uint)iVar8 >> 8);
          auVar13[0xe] = (char)((uint)iVar8 >> 0x10);
          auVar13[0xf] = (char)((uint)iVar8 >> 0x18);
          in_d5 = NEON_sqxtn(in_d5,auVar13,4);
          auVar14[8] = uStack_18;
          auVar14[9] = (char)((uint)iVar11 >> 8);
          auVar14[10] = (char)((uint)iVar11 >> 0x10);
          auVar14[0xb] = (char)((uint)iVar11 >> 0x18);
          auVar14[0xc] = (char)iVar12;
          auVar14[0xd] = (char)((uint)iVar12 >> 8);
          auVar14[0xe] = (char)((uint)iVar12 >> 0x10);
          auVar14[0xf] = (char)((uint)iVar12 >> 0x18);
          uVar39 = NEON_sqxtn(uVar40,auVar14,4);
          auVar15[8] = (char)in_d5;
          auVar15._0_8_ = in_d6;
          auVar15[9] = (char)((ulong)in_d5 >> 8);
          auVar15[10] = (char)((ulong)in_d5 >> 0x10);
          auVar15[0xb] = (char)((ulong)in_d5 >> 0x18);
          auVar15[0xc] = (char)((ulong)in_d5 >> 0x20);
          auVar15[0xd] = (char)((ulong)in_d5 >> 0x28);
          auVar15[0xe] = (char)((ulong)in_d5 >> 0x30);
          auVar15[0xf] = (char)((ulong)in_d5 >> 0x38);
          uVar30 = NEON_sqxtn(uVar29,auVar15,2);
          iVar16 = (int)((float)uVar38 +
                        (float)CONCAT13((byte)((ulong)uVar38 >> 0x18) &
                                        (byte)((ulong)_DAT_00531eb0 >> 0x18) |
                                        (byte)((ulong)_DAT_00531ea0 >> 0x18),
                                        CONCAT12((byte)((ulong)uVar38 >> 0x10) &
                                                 (byte)((ulong)_DAT_00531eb0 >> 0x10) |
                                                 (byte)((ulong)_DAT_00531ea0 >> 0x10),
                                                 CONCAT11((byte)((ulong)uVar38 >> 8) &
                                                          (byte)((ulong)_DAT_00531eb0 >> 8) |
                                                          (byte)((ulong)_DAT_00531ea0 >> 8),
                                                          (byte)uVar38 & (byte)_DAT_00531eb0 |
                                                          (byte)_DAT_00531ea0))));
          iVar5 = (int)((float)((ulong)uVar38 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar38 >> 0x38) &
                                       (byte)((ulong)_DAT_00531eb0 >> 0x38) |
                                       (byte)((ulong)_DAT_00531ea0 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar38 >> 0x30) &
                                                (byte)((ulong)_DAT_00531eb0 >> 0x30) |
                                                (byte)((ulong)_DAT_00531ea0 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar38 >> 0x28) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x28) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x28),
                                                         (byte)((ulong)uVar38 >> 0x20) &
                                                         (byte)((ulong)_DAT_00531eb0 >> 0x20) |
                                                         (byte)((ulong)_DAT_00531ea0 >> 0x20)))));
          uVar25 = (undefined1)((uint)iVar5 >> 8);
          uVar26 = (undefined1)((uint)iVar5 >> 0x10);
          uVar27 = (undefined1)((uint)iVar5 >> 0x18);
          iVar7 = (int)((float)uVar41 +
                       (float)CONCAT13((byte)((ulong)uVar41 >> 0x18) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x18) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x18),
                                       CONCAT12((byte)((ulong)uVar41 >> 0x10) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x10) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x10),
                                                CONCAT11((byte)((ulong)uVar41 >> 8) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 8) |
                                                         (byte)((ulong)uRam0000000000531ea8 >> 8),
                                                         (byte)uVar41 & (byte)uRam0000000000531eb8 |
                                                         (byte)uRam0000000000531ea8))));
          iVar6 = (int)((float)((ulong)uVar41 >> 0x20) +
                       (float)CONCAT13((byte)((ulong)uVar41 >> 0x38) &
                                       (byte)((ulong)uRam0000000000531eb8 >> 0x38) |
                                       (byte)((ulong)uRam0000000000531ea8 >> 0x38),
                                       CONCAT12((byte)((ulong)uVar41 >> 0x30) &
                                                (byte)((ulong)uRam0000000000531eb8 >> 0x30) |
                                                (byte)((ulong)uRam0000000000531ea8 >> 0x30),
                                                CONCAT11((byte)((ulong)uVar41 >> 0x28) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x28)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x28),
                                                         (byte)((ulong)uVar41 >> 0x20) &
                                                         (byte)((ulong)uRam0000000000531eb8 >> 0x20)
                                                         | (byte)((ulong)uRam0000000000531ea8 >>
                                                                 0x20)))));
          auVar4[4] = (char)iVar5;
          auVar4._0_4_ = iVar16;
          auVar4[5] = uVar25;
          auVar4[6] = uVar26;
          auVar4[7] = uVar27;
          auVar4[8] = (char)iVar7;
          auVar4[9] = (char)((uint)iVar7 >> 8);
          auVar4[10] = (char)((uint)iVar7 >> 0x10);
          auVar4[0xb] = (char)((uint)iVar7 >> 0x18);
          auVar4[0xc] = (char)iVar6;
          auVar4[0xd] = (char)((uint)iVar6 >> 8);
          auVar4[0xe] = (char)((uint)iVar6 >> 0x10);
          auVar4[0xf] = (char)((uint)iVar6 >> 0x18);
          uVar40 = NEON_sqxtn(CONCAT17(uVar27,CONCAT16(uVar26,CONCAT15(uVar25,CONCAT14((char)iVar5,
                                                                                       iVar16)))),
                              auVar4,4);
          auVar10[8] = (char)uVar40;
          auVar10._0_8_ = uVar39;
          auVar10[9] = (char)((ulong)uVar40 >> 8);
          auVar10[10] = (char)((ulong)uVar40 >> 0x10);
          auVar10[0xb] = (char)((ulong)uVar40 >> 0x18);
          auVar10[0xc] = (char)((ulong)uVar40 >> 0x20);
          auVar10[0xd] = (char)((ulong)uVar40 >> 0x28);
          auVar10[0xe] = (char)((ulong)uVar40 >> 0x30);
          auVar10[0xf] = (char)((ulong)uVar40 >> 0x38);
          uVar40 = NEON_sqxtn(uVar40,auVar10,2);
          puVar24[1] = uVar40;
          *puVar24 = uVar30;
          puVar24 = puVar24 + 2;
        } while (iVar23 < iVar2 + -0xf);
      }
      if (iVar23 < iVar2 + -3) {
        lVar21 = (long)iVar23;
        uVar3 = (uint)((iVar2 + -4) - iVar23) >> 2;
        pfVar22 = (float *)((long)param_1 + lVar21 * 4);
        puVar20 = (undefined1 *)((long)param_5 + lVar21);
        do {
          lVar17 = lrintf(*pfVar22);
          uVar26 = 0x80;
          uVar27 = 0x7f;
          uVar25 = (char)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar25 = uVar27, (int)lVar17 < 1)) {
            uVar25 = uVar26;
          }
          lVar17 = lrintf(pfVar22[1]);
          uVar18 = (char)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar18 = uVar27, (int)lVar17 < 1)) {
            uVar18 = uVar26;
          }
          *puVar20 = uVar25;
          puVar20[1] = uVar18;
          lVar17 = lrintf(pfVar22[2]);
          uVar25 = (char)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar25 = uVar27, (int)lVar17 < 1)) {
            uVar25 = uVar26;
          }
          lVar17 = lrintf(pfVar22[3]);
          uVar18 = (char)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar18 = uVar27, (int)lVar17 < 1)) {
            uVar18 = uVar26;
          }
          puVar20[2] = uVar25;
          puVar1 = puVar20 + 4;
          pfVar22 = pfVar22 + 4;
          puVar20[3] = uVar18;
          puVar20 = puVar1;
        } while (puVar1 != (undefined1 *)((long)param_5 + lVar21 + 4 + (ulong)uVar3 * 4));
        iVar23 = iVar23 + 4 + uVar3 * 4;
      }
      if (iVar23 < iVar2) {
        lVar21 = 0;
        do {
          lVar17 = lrintf(*(float *)((long)param_1 + lVar21 * 4 + (long)iVar23 * 4));
          uVar25 = (undefined1)lVar17;
          if ((0xff < (int)lVar17 + 0x80U) && (uVar25 = 0x7f, (int)lVar17 < 1)) {
            uVar25 = 0x80;
          }
          *(undefined1 *)((long)param_5 + lVar21 + iVar23) = uVar25;
          lVar21 = lVar21 + 1;
        } while (lVar21 != (ulong)(uint)((iVar2 + -1) - iVar23) + 1);
      }
      iVar42 = iVar42 + -1;
      param_1 = (undefined8 *)((long)param_1 + (param_2 & 0xfffffffffffffffc));
      param_5 = (undefined8 *)((long)param_5 + param_6);
    } while (iVar42 != 0);
  }
  return;
}


==================================================================

### FUNC 00282788 (564 bytes) name=FUN_00282788

void FUN_00282788(long param_1,undefined4 *param_2)

{
  int *piVar1;
  undefined4 uVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  ulong uVar7;
  undefined4 local_138;
  undefined4 local_134;
  undefined4 local_130;
  int local_12c;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  undefined4 local_100;
  undefined4 local_fc;
  ulong local_e0;
  undefined4 local_d8;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined4 local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  uVar2 = *param_2;
  iVar6 = param_2[1];
  local_100 = 0x80000000;
  local_fc = 0x7fffffff;
  local_60 = uVar2;
  local_5c = iVar6;
  cv::Mat::Mat((Mat *)&local_c0,*(Mat **)(param_1 + 0x10),(Range *)&local_60,(Range *)&local_100);
  local_138 = 0x80000000;
  local_134 = 0x7fffffff;
  local_130 = uVar2;
  local_12c = iVar6;
  cv::Mat::Mat((Mat *)&local_60,*(Mat **)(param_1 + 0x20),(Range *)&local_130,(Range *)&local_138);
  uVar3 = **(uint **)(param_1 + 0x18);
  local_108 = 0;
  local_118 = (Mat *)&local_c0;
  local_110 = (Mat *)&local_60;
  cv::NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_100,&local_118,&local_128,-1);
  for (uVar7 = 0; uVar7 < local_e0; uVar7 = uVar7 + 1) {
    (**(code **)(param_1 + 0x28))
              (local_128,*(undefined8 *)(*(long *)(param_1 + 0x18) + 0x10),local_120,local_d8,
               (local_c0 >> 3 & 0x1ff) + 1,(uVar3 >> 3 & 0x1ff) + 1);
    cv::NAryMatIterator::operator++((NAryMatIterator *)&local_100);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    do {
      *local_80 = 0;
      iVar6 = iVar6 + 1;
      local_80 = local_80 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00282a08 (1052 bytes) name=split

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::split(cv::Mat const&, cv::Mat*) */

void cv::split(Mat *param_1,Mat *param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  char cVar8;
  uint uVar9;
  code *pcVar10;
  Mat **ppMVar11;
  uchar *puVar12;
  char *pcVar13;
  int iVar14;
  uint uVar15;
  uchar **ppuVar16;
  uchar **ppuVar17;
  uchar **ppuVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  Mat **ppMVar22;
  int iVar23;
  ulong uVar24;
  NAryMatIterator aNStack_458 [32];
  ulong local_438;
  int local_430;
  Mat **local_418;
  Mat *local_410;
  undefined4 local_408;
  undefined4 uStack_404;
  
  uVar7 = *(uint *)param_1 >> 3 & 0x1ff;
  uVar3 = *(uint *)param_1 & 7;
  uVar1 = uVar7 + 1;
  if (uVar7 == 0) {
    local_408 = 0;
    uStack_404 = 0;
    local_418 = (Mat **)CONCAT44(local_418._4_4_,0x2010000);
    local_410 = param_2;
    Mat::copyTo(param_1,(_OutputArray *)&local_418);
  }
  else {
    pcVar10 = (code *)(&PTR_FUN_004f5fe0)[(int)uVar3];
    uVar6 = uVar3;
    if (pcVar10 == (code *)0x0) {
      local_418 = (Mat **)pcVar10;
      local_410 = (Mat *)pcVar10;
      pcVar13 = (char *)String::allocate((String *)&local_418,9);
      cVar8 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar13 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar13[8] = cVar8;
      error(-0xd7,(String *)&local_418,"void cv::split(const cv::Mat&, cv::Mat*)",
            "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x340);
      String::deallocate((String *)&local_418);
      uVar6 = *(uint *)param_1 & 7;
    }
    iVar14 = *(int *)(param_1 + 4);
    if (iVar14 < 1) {
      iVar20 = 0x3ff;
      iVar19 = 0;
    }
    else {
      iVar19 = (int)*(undefined8 *)(*(long *)(param_1 + 0x48) + (long)iVar14 * 8 + -8);
      iVar20 = iVar19 + 0x3ff;
    }
    uVar24 = (long)(int)(uVar7 + 2) * 0x10 + 0x10;
    local_410 = (Mat *)0x408;
    ppMVar11 = (Mat **)&local_408;
    iVar21 = 0;
    if (iVar19 != 0) {
      iVar21 = iVar20 / iVar19;
    }
    if (0x408 < uVar24) {
      local_418 = ppMVar11;
      ppMVar11 = operator_new__(uVar24);
      iVar14 = *(int *)(param_1 + 4);
    }
    ppuVar18 = (uchar **)((long)ppMVar11 + (long)(int)uVar1 * 8 + 0x17 & 0xfffffffffffffff0);
    *ppMVar11 = param_1;
    ppMVar22 = ppMVar11;
    local_418 = ppMVar11;
    local_410 = (Mat *)uVar24;
    while( true ) {
      Mat::create(param_2,iVar14,*(int **)(param_1 + 0x40),uVar3);
      ppMVar22[1] = param_2;
      param_2 = param_2 + 0x60;
      if (ppMVar22 == ppMVar11 + (int)uVar7) break;
      iVar14 = *(int *)(param_1 + 4);
      ppMVar22 = ppMVar22 + 1;
    }
    NAryMatIterator::NAryMatIterator(aNStack_458,ppMVar11,ppuVar18,uVar7 + 2);
    if ((local_430 <= iVar21) || (uVar1 < 5)) {
      iVar21 = local_430;
    }
    uVar3 = uVar1;
    if (4 < uVar1) {
      uVar3 = 1;
    }
    uVar24 = 0;
    uVar2 = ((uVar1 - uVar3) - 2 >> 1) + 1;
    iVar14 = uVar2 * 2;
    if (local_438 != 0) {
      do {
        if (0 < local_430) {
          puVar12 = *ppuVar18;
          iVar23 = 0;
          iVar20 = iVar21;
          while( true ) {
            iVar4 = iVar21;
            if (iVar23 + local_430 < iVar21) {
              iVar4 = iVar23 + local_430;
            }
            (*pcVar10)(puVar12,ppuVar18 + 1,iVar4,uVar1);
            if (local_430 <= iVar20) break;
            iVar5 = iVar4 * ((uint)(0x88442211L >> (uVar6 << 2)) & 0xf);
            puVar12 = *ppuVar18 + iVar4 * iVar19;
            *ppuVar18 = puVar12;
            ppuVar18[1] = ppuVar18[1] + iVar5;
            uVar15 = uVar3;
            if (((uVar3 != 1) && (ppuVar18[2] = ppuVar18[2] + iVar5, uVar3 != 2)) &&
               (ppuVar18[3] = ppuVar18[3] + iVar5, uVar3 != 3)) {
              ppuVar18[4] = ppuVar18[4] + iVar5;
              uVar15 = 4;
            }
            if (uVar1 != uVar3) {
              if (uVar7 == uVar3) {
LAB_00282cd8:
                ppuVar18[(long)(int)uVar15 + 1] = ppuVar18[(long)(int)uVar15 + 1] + iVar5;
              }
              else {
                uVar9 = 0;
                ppuVar16 = ppuVar18 + (ulong)uVar3 + 1;
                ppuVar17 = ppuVar18 + (ulong)uVar3 + 1;
                do {
                  puVar12 = *ppuVar17;
                  uVar9 = uVar9 + 1;
                  ppuVar16[1] = ppuVar17[1] + iVar5;
                  *ppuVar16 = puVar12 + iVar5;
                  ppuVar16 = ppuVar16 + 2;
                  ppuVar17 = ppuVar17 + 2;
                } while (uVar9 < uVar2);
                uVar15 = uVar15 + iVar14;
                if (iVar14 != uVar1 - uVar3) goto LAB_00282cd8;
              }
              puVar12 = *ppuVar18;
            }
            iVar20 = iVar20 + iVar21;
            iVar23 = iVar23 - iVar21;
          }
        }
        uVar24 = uVar24 + 1;
        NAryMatIterator::operator++(aNStack_458);
      } while (uVar24 < local_438);
    }
    if ((local_418 != (Mat **)&local_408) && (local_418 != (Mat **)0x0)) {
      operator_delete__(local_418);
    }
  }
  return;
}


==================================================================

### FUNC 00282e5c (1704 bytes) name=mixChannels

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::mixChannels(cv::Mat const*, unsigned long, cv::Mat*, unsigned long, int const*, unsigned
   long) */

void cv::mixChannels(Mat *param_1,ulong param_2,Mat *param_3,ulong param_4,int *param_5,
                    ulong param_6)

{
  Mat **ppMVar1;
  Mat **ppMVar2;
  Mat **ppMVar3;
  Mat **ppMVar4;
  Mat **ppMVar5;
  int *piVar6;
  uint uVar7;
  int iVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined4 uVar15;
  undefined2 uVar16;
  char cVar17;
  bool bVar18;
  uint uVar19;
  Mat **ppMVar20;
  ulong uVar21;
  char *pcVar22;
  code *pcVar23;
  long lVar24;
  Mat *pMVar25;
  uint uVar26;
  ulong uVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  ulong uVar31;
  ulong uVar32;
  Mat **ppMVar33;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  NAryMatIterator aNStack_458 [32];
  ulong local_438;
  int local_430;
  Mat **local_418;
  ulong local_410;
  Mat *local_408 [129];
  
  if (param_6 != 0) {
    bVar18 = param_2 != 0;
    if ((((param_1 == (Mat *)0x0) || (!bVar18)) || (param_3 == (Mat *)0x0)) ||
       ((param_4 == 0 || (param_5 == (int *)0x0)))) {
      local_418 = (Mat **)0x0;
      local_410 = 0;
      pcVar22 = (char *)String::allocate((String *)&local_418,0x3c);
      uVar15 = s_src____nsrcs_>_0____dst____ndsts_004632a0._56_4_;
      uVar14 = s_src____nsrcs_>_0____dst____ndsts_004632a0._40_8_;
      uVar13 = s_src____nsrcs_>_0____dst____ndsts_004632a0._32_8_;
      uVar12 = s_src____nsrcs_>_0____dst____ndsts_004632a0._24_8_;
      uVar11 = s_src____nsrcs_>_0____dst____ndsts_004632a0._16_8_;
      uVar10 = s_src____nsrcs_>_0____dst____ndsts_004632a0._8_8_;
      uVar9 = s_src____nsrcs_>_0____dst____ndsts_004632a0._0_8_;
      *(undefined8 *)(pcVar22 + 0x30) = s_src____nsrcs_>_0____dst____ndsts_004632a0._48_8_;
      *(undefined4 *)(pcVar22 + 0x38) = uVar15;
      *(undefined8 *)pcVar22 = uVar9;
      *(undefined8 *)(pcVar22 + 8) = uVar10;
      *(undefined8 *)(pcVar22 + 0x10) = uVar11;
      *(undefined8 *)(pcVar22 + 0x18) = uVar12;
      *(undefined8 *)(pcVar22 + 0x20) = uVar13;
      *(undefined8 *)(pcVar22 + 0x28) = uVar14;
      error(-0xd7,(String *)&local_418,
            "void cv::mixChannels(const cv::Mat*, size_t, cv::Mat*, size_t, const int*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x49a);
      String::deallocate((String *)&local_418);
    }
    lVar24 = param_2 + param_4;
    uVar7 = *(uint *)param_3 & 7;
    uVar31 = (lVar24 + 1) * 0x10 + param_6 * 0x28;
    ppMVar20 = local_408;
    local_410 = 0x408;
    uVar27 = 0x88442211UL >> (uVar7 << 2) & 0xf;
    if (0x408 < uVar31) {
      local_418 = ppMVar20;
      ppMVar20 = operator_new__(uVar31);
    }
    ppMVar1 = ppMVar20 + lVar24;
    ppMVar2 = ppMVar1 + lVar24 + 1;
    uVar21 = 0;
    ppMVar3 = ppMVar2 + param_6 * 2;
    ppMVar4 = ppMVar3 + param_6 * 2;
    ppMVar5 = ppMVar2 + param_6;
    piVar6 = (int *)((long)ppMVar4 + param_6 * 4);
    pMVar25 = param_1;
    if (bVar18) {
      do {
        ppMVar20[uVar21] = pMVar25;
        uVar21 = uVar21 + 1;
        pMVar25 = pMVar25 + 0x60;
      } while (uVar21 < param_2);
    }
    if (param_4 != 0) {
      uVar21 = 0;
      pMVar25 = param_3;
      do {
        ppMVar20[param_2 + uVar21] = pMVar25;
        uVar21 = uVar21 + 1;
        pMVar25 = pMVar25 + 0x60;
      } while (uVar21 != param_4);
    }
    uVar21 = 0;
    ppMVar1[lVar24] = (Mat *)0x0;
    ppMVar33 = ppMVar3;
    local_418 = ppMVar20;
    local_410 = uVar31;
    do {
      iVar29 = *param_5;
      iVar28 = param_5[1];
      iVar30 = (int)param_2;
      uVar31 = param_4;
      if (iVar29 < 0) {
        *(int *)ppMVar33 = iVar30 + (int)param_4;
        *(int *)((long)ppMVar33 + 4) = 0;
        *(int *)((long)ppMVar4 + uVar21 * 4) = 0;
        if (param_4 != 0) goto LAB_00283194;
LAB_002831dc:
        local_468 = 0;
        local_460 = 0;
        pcVar22 = (char *)String::allocate((String *)&local_468,0x2f);
        cVar17 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308[0x2e];
        uVar16 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._44_2_;
        uVar15 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._40_4_;
        uVar12 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._24_8_;
        uVar11 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._16_8_;
        uVar10 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._8_8_;
        uVar9 = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._0_8_;
        *(undefined8 *)(pcVar22 + 0x20) = s_i1_>__0____j_<_ndsts_&&_dst[j]_d_00463308._32_8_;
        *(undefined4 *)(pcVar22 + 0x28) = uVar15;
        *(undefined2 *)(pcVar22 + 0x2c) = uVar16;
        pcVar22[0x2e] = cVar17;
        *(undefined8 *)pcVar22 = uVar9;
        *(undefined8 *)(pcVar22 + 8) = uVar10;
        *(undefined8 *)(pcVar22 + 0x10) = uVar11;
        *(undefined8 *)(pcVar22 + 0x18) = uVar12;
        error(-0xd7,(String *)&local_468,
              "void cv::mixChannels(const cv::Mat*, size_t, cv::Mat*, size_t, const int*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x4c2);
        String::deallocate((String *)&local_468);
        lVar24 = uVar31 * 0x60;
      }
      else {
        if (bVar18) {
          uVar26 = *(uint *)param_1;
          uVar19 = uVar26 >> 3 & 0x1ff;
          pMVar25 = param_1;
          if ((int)uVar19 < iVar29) {
            uVar32 = 0;
            do {
              pMVar25 = pMVar25 + 0x60;
              uVar32 = uVar32 + 1;
              iVar29 = iVar29 - (uVar19 + 1);
              if (param_2 <= uVar32) goto LAB_00283100;
              uVar26 = *(uint *)pMVar25;
              uVar19 = uVar26 >> 3 & 0x1ff;
            } while ((int)uVar19 < iVar29);
          }
          else {
            uVar32 = 0;
          }
          if (uVar7 != (uVar26 & 7)) goto LAB_00283100;
        }
        else {
          uVar32 = 0;
LAB_00283100:
          local_478 = 0;
          local_470 = 0;
          pcVar22 = (char *)String::allocate((String *)&local_478,0x24);
          *(undefined4 *)(pcVar22 + 0x20) = s_j_<_nsrcs_&&_src[j]_depth()____d_004632e0._32_4_;
          uVar11 = s_j_<_nsrcs_&&_src[j]_depth()____d_004632e0._24_8_;
          uVar10 = s_j_<_nsrcs_&&_src[j]_depth()____d_004632e0._16_8_;
          uVar9 = s_j_<_nsrcs_&&_src[j]_depth()____d_004632e0._8_8_;
          *(undefined8 *)pcVar22 = s_j_<_nsrcs_&&_src[j]_depth()____d_004632e0._0_8_;
          *(undefined8 *)(pcVar22 + 8) = uVar9;
          *(undefined8 *)(pcVar22 + 0x10) = uVar10;
          *(undefined8 *)(pcVar22 + 0x18) = uVar11;
          error(-0xd7,(String *)&local_478,
                "void cv::mixChannels(const cv::Mat*, size_t, cv::Mat*, size_t, const int*, size_t)"
                ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x4b5);
          String::deallocate((String *)&local_478);
          pMVar25 = param_1 + uVar32 * 0x60;
        }
        *(int *)ppMVar33 = (int)uVar32;
        *(int *)((long)ppMVar33 + 4) = iVar29 * (int)uVar27;
        *(uint *)((long)ppMVar4 + uVar21 * 4) = (*(uint *)pMVar25 >> 3 & 0x1ff) + 1;
        if (param_4 == 0) goto LAB_002831dc;
LAB_00283194:
        uVar26 = *(uint *)param_3 >> 3 & 0x1ff;
        if ((int)uVar26 < iVar28) {
          uVar31 = 0;
          pMVar25 = param_3;
          do {
            pMVar25 = pMVar25 + 0x60;
            uVar31 = uVar31 + 1;
            iVar28 = iVar28 - (uVar26 + 1);
            if (uVar31 == param_4) goto LAB_002831dc;
            uVar26 = *(uint *)pMVar25 >> 3 & 0x1ff;
          } while ((int)uVar26 < iVar28);
        }
        else {
          uVar31 = 0;
        }
        if (((param_4 <= uVar31) || (iVar28 < 0)) ||
           (lVar24 = uVar31 * 0x60, uVar7 != (*(uint *)(param_3 + lVar24) & 7))) goto LAB_002831dc;
      }
      *(int *)((long)ppMVar33 + 0xc) = iVar28 * (int)uVar27;
      *(int *)(ppMVar33 + 1) = iVar30 + (int)uVar31;
      param_5 = param_5 + 2;
      piVar6[uVar21] = (*(uint *)(param_3 + lVar24) >> 3 & 0x1ff) + 1;
      uVar21 = uVar21 + 1;
      ppMVar33 = ppMVar33 + 2;
    } while (uVar21 != param_6);
    NAryMatIterator::NAryMatIterator(aNStack_458,ppMVar20,(uchar **)ppMVar1,iVar30 + (int)param_4);
    uVar31 = 0;
    iVar29 = 0;
    if (uVar27 != 0) {
      iVar29 = (int)((uVar27 + 0x3ff) / uVar27);
    }
    iVar28 = local_430;
    if (iVar29 <= local_430) {
      iVar28 = iVar29;
    }
    pcVar23 = (code *)(&PTR_FUN_004f6020)[(int)uVar7];
    if (local_438 != 0) {
      do {
        uVar21 = 0;
        ppMVar20 = ppMVar3;
        do {
          iVar29 = *(int *)(ppMVar20 + 1);
          iVar30 = *(int *)((long)ppMVar20 + 0xc);
          ppMVar2[uVar21] = ppMVar1[*(int *)ppMVar20] + *(int *)((long)ppMVar20 + 4);
          ppMVar5[uVar21] = ppMVar1[iVar29] + iVar30;
          uVar21 = uVar21 + 1;
          ppMVar20 = ppMVar20 + 2;
        } while (uVar21 != param_6);
        if (0 < local_430) {
          iVar30 = 0;
          iVar29 = iVar28;
          while( true ) {
            iVar8 = iVar30 + local_430;
            if (iVar28 < iVar30 + local_430) {
              iVar8 = iVar28;
            }
            (*pcVar23)(ppMVar2,ppMVar4,ppMVar5,piVar6,iVar8,param_6 & 0xffffffff);
            if (local_430 <= iVar29) break;
            uVar21 = 0;
            do {
              iVar8 = piVar6[uVar21];
              ppMVar2[uVar21] =
                   ppMVar2[uVar21] + (long)(iVar28 * *(int *)((long)ppMVar4 + uVar21 * 4)) * uVar27;
              ppMVar5[uVar21] = ppMVar5[uVar21] + (long)(iVar28 * iVar8) * uVar27;
              uVar21 = uVar21 + 1;
            } while (uVar21 != param_6);
            iVar29 = iVar29 + iVar28;
            iVar30 = iVar30 - iVar28;
          }
        }
        uVar31 = uVar31 + 1;
        NAryMatIterator::operator++(aNStack_458);
      } while (uVar31 < local_438);
    }
    if ((local_418 != local_408) && (local_418 != (Mat **)0x0)) {
      operator_delete__(local_418);
    }
  }
  return;
}


==================================================================

### FUNC 00283560 (2524 bytes) name=merge

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::merge(cv::Mat const*, unsigned long, cv::_OutputArray const&) */

void cv::merge(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  uint *puVar1;
  int *piVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  bool bVar7;
  uint uVar8;
  undefined2 uVar9;
  undefined1 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  bool bVar14;
  int iVar15;
  int iVar16;
  int *piVar17;
  char *pcVar18;
  ulong uVar19;
  undefined8 *puVar20;
  uint uVar21;
  int *piVar22;
  code *pcVar23;
  uchar *puVar24;
  undefined4 *puVar25;
  Mat *pMVar26;
  int iVar27;
  Mat **ppMVar28;
  uchar **ppuVar29;
  uchar **ppuVar30;
  uint uVar31;
  long lVar32;
  ulong uVar33;
  uchar **ppuVar34;
  uint uVar35;
  uint uVar36;
  int iVar38;
  undefined8 uVar37;
  int iVar40;
  undefined8 uVar39;
  int iVar41;
  int iVar42;
  int iVar43;
  int iVar44;
  String *local_4d8;
  NAryMatIterator aNStack_4d0 [32];
  ulong local_4b0;
  int local_4a8;
  uint local_490;
  int local_48c;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  undefined4 *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  Mat **local_430;
  uint *local_428;
  undefined4 local_420;
  undefined4 uStack_41c;
  
  bVar14 = param_2 != 0;
  if ((param_1 == (Mat *)0x0) || (!bVar14)) {
    local_430 = (Mat **)0x0;
    local_428 = (uint *)0x0;
    puVar20 = (undefined8 *)String::allocate((String *)&local_430,0xb);
    uVar10 = DAT_00463342;
    uVar9 = DAT_00463340;
    *puVar20 = DAT_00463338;
    *(undefined2 *)(puVar20 + 1) = uVar9;
    *(undefined1 *)((long)puVar20 + 10) = uVar10;
    error(-0xd7,(String *)&local_430,"void cv::merge(const cv::Mat*, size_t, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x3ad);
    String::deallocate((String *)&local_430);
    uVar35 = *(uint *)param_1 & 7;
    if (bVar14) goto LAB_002835bc;
    bVar7 = true;
    uVar36 = 0;
LAB_002836a0:
    local_4d8 = (String *)&local_430;
    local_430 = (Mat **)0x0;
    local_428 = (uint *)0x0;
    pcVar18 = (char *)String::allocate(local_4d8,0x19);
    cVar4 = s_0_<_cn_&&_cn_<__CV_CN_MAX_00463380[0x18];
    uVar39 = s_0_<_cn_&&_cn_<__CV_CN_MAX_00463380._8_8_;
    uVar37 = s_0_<_cn_&&_cn_<__CV_CN_MAX_00463380._0_8_;
    *(undefined8 *)(pcVar18 + 0x10) = s_0_<_cn_&&_cn_<__CV_CN_MAX_00463380._16_8_;
    pcVar18[0x18] = cVar4;
    *(undefined8 *)pcVar18 = uVar37;
    *(undefined8 *)(pcVar18 + 8) = uVar39;
    error(-0xd7,local_4d8,"void cv::merge(const cv::Mat*, size_t, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x3bb);
    uVar31 = uVar36 - 1;
    String::deallocate(local_4d8);
  }
  else {
    uVar35 = *(uint *)param_1 & 7;
LAB_002835bc:
    local_4d8 = (String *)&local_430;
    uVar33 = 0;
    uVar36 = 0;
    bVar5 = true;
    pMVar26 = param_1;
LAB_002835ec:
    do {
      piVar17 = *(int **)(pMVar26 + 0x40);
      piVar22 = *(int **)(param_1 + 0x40);
      iVar15 = piVar17[-1];
      if (iVar15 == piVar22[-1]) {
        if (iVar15 != 2) {
          if (iVar15 < 1) {
LAB_00283b68:
            uVar19 = (ulong)*(uint *)pMVar26;
            if (uVar35 == (*(uint *)pMVar26 & 7)) goto LAB_00283668;
          }
          else if (*piVar17 == *piVar22) {
            piVar2 = piVar17 + (iVar15 - 1);
            do {
              piVar22 = piVar22 + 1;
              if (piVar17 == piVar2) goto LAB_00283b68;
              piVar17 = piVar17 + 1;
            } while (*piVar17 == *piVar22);
          }
          goto LAB_00283604;
        }
        if (((*piVar17 != *piVar22) || (piVar17[1] != piVar22[1])) ||
           (uVar19 = (ulong)*(uint *)pMVar26, uVar35 != (*(uint *)pMVar26 & 7))) goto LAB_00283604;
      }
      else {
LAB_00283604:
        local_430 = (Mat **)0x0;
        local_428 = (uint *)0x0;
        pcVar18 = (char *)String::allocate(local_4d8,0x32);
        *(undefined2 *)(pcVar18 + 0x30) = s_mv_i__size____mv_0__size____mv_i_00463348._48_2_;
        uVar13 = s_mv_i__size____mv_0__size____mv_i_00463348._40_8_;
        uVar12 = s_mv_i__size____mv_0__size____mv_i_00463348._32_8_;
        uVar11 = s_mv_i__size____mv_0__size____mv_i_00463348._24_8_;
        uVar39 = s_mv_i__size____mv_0__size____mv_i_00463348._16_8_;
        uVar37 = s_mv_i__size____mv_0__size____mv_i_00463348._8_8_;
        *(undefined8 *)pcVar18 = s_mv_i__size____mv_0__size____mv_i_00463348._0_8_;
        *(undefined8 *)(pcVar18 + 8) = uVar37;
        *(undefined8 *)(pcVar18 + 0x10) = uVar39;
        *(undefined8 *)(pcVar18 + 0x18) = uVar11;
        *(undefined8 *)(pcVar18 + 0x20) = uVar12;
        *(undefined8 *)(pcVar18 + 0x28) = uVar13;
        error(-0xd7,local_4d8,"void cv::merge(const cv::Mat*, size_t, cv::OutputArray)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x3b6);
        String::deallocate(local_4d8);
        uVar19 = (ulong)*(uint *)pMVar26;
      }
LAB_00283668:
      uVar31 = (uint)(uVar19 >> 3) & 0x1ff;
      if ((!bVar5) || ((uVar19 >> 3 & 0x1ff) != 0)) {
        uVar33 = uVar33 + 1;
        bVar5 = false;
        uVar36 = uVar36 + uVar31 + 1;
        pMVar26 = pMVar26 + 0x60;
        bVar7 = bVar5;
        if (param_2 <= uVar33) break;
        goto LAB_002835ec;
      }
      uVar33 = uVar33 + 1;
      uVar36 = uVar36 + uVar31 + 1;
      pMVar26 = pMVar26 + 0x60;
      bVar7 = true;
    } while (uVar33 < param_2);
    uVar31 = uVar36 - 1;
    if (0x1ff < uVar31) goto LAB_002836a0;
  }
  local_4d8 = (String *)&local_430;
  _OutputArray::create
            (param_3,*(int *)(param_1 + 4),*(int **)(param_1 + 0x40),uVar35 + uVar31 * 8,-1,false,0)
  ;
  iVar15 = _InputArray::kind((_InputArray *)param_3);
  if (iVar15 == 0x10000) {
    pMVar26 = *(Mat **)(param_3 + 8);
    local_450 = &local_488;
    local_448 = &local_440;
    local_490 = *(uint *)pMVar26;
    local_48c = *(int *)(pMVar26 + 4);
    local_488 = *(undefined4 *)(pMVar26 + 8);
    local_484 = *(undefined4 *)(pMVar26 + 0xc);
    local_480 = *(undefined8 *)(pMVar26 + 0x10);
    local_478 = *(undefined8 *)(pMVar26 + 0x18);
    local_470 = *(undefined8 *)(pMVar26 + 0x20);
    local_468 = *(undefined8 *)(pMVar26 + 0x28);
    local_460 = *(undefined8 *)(pMVar26 + 0x30);
    local_458 = *(long *)(pMVar26 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar17 = (int *)(local_458 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar17,0x10);
        if (bVar5) {
          *piVar17 = *piVar17 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (2 < *(int *)(pMVar26 + 4)) {
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar26);
      goto LAB_00283748;
    }
    if (param_2 != 1) goto LAB_00283750;
LAB_00283c70:
    local_428 = &local_490;
    local_420 = 0;
    uStack_41c = 0;
                    /* WARNING: Ignoring partial resolution of indirect */
    local_430._0_4_ = 0x2010000;
    Mat::copyTo(param_1,(_OutputArray *)local_4d8);
  }
  else {
    _InputArray::getMat_((int)param_3);
LAB_00283748:
    if (param_2 == 1) goto LAB_00283c70;
LAB_00283750:
    if (bVar7) {
      if (local_48c < 1) {
        uVar33 = 0x3ff;
        uVar19 = 0;
      }
      else {
        uVar19 = local_448[(long)local_48c + -1];
        uVar33 = uVar19 + 0x3ff;
      }
      puVar1 = (uint *)((long)(int)(uVar36 + 1) * 0x10 + 0x10);
      uVar8 = local_490 & 7;
      iVar15 = 0;
      if (uVar19 != 0) {
        iVar15 = (int)(uVar33 / uVar19);
      }
      local_430 = (Mat **)&local_420;
      local_428 = (uint *)0x408;
      if ((uint *)0x408 < puVar1) {
        local_430 = operator_new__((ulong)puVar1);
      }
      *local_430 = (Mat *)&local_490;
      ppuVar34 = (uchar **)((long)local_430 + (long)(int)uVar36 * 8 + 0x17 & 0xfffffffffffffff0);
      if (uVar36 != 0) {
        pMVar26 = param_1 + ((ulong)uVar31 + 1) * 0x60;
        ppMVar28 = local_430;
        do {
          ppMVar28 = ppMVar28 + 1;
          *ppMVar28 = param_1;
          param_1 = param_1 + 0x60;
        } while (param_1 != pMVar26);
      }
      local_428 = puVar1;
      NAryMatIterator::NAryMatIterator(aNStack_4d0,local_430,ppuVar34,uVar36 + 1);
      if ((local_4a8 <= iVar15) || ((int)uVar36 < 5)) {
        iVar15 = local_4a8;
      }
      uVar31 = uVar36;
      if (uVar36 != 0) {
        uVar31 = 1;
      }
      uVar3 = uVar36;
      if (4 < uVar36) {
        uVar3 = uVar31;
      }
      iVar6 = uVar36 - uVar3;
      uVar33 = 0;
      uVar31 = (iVar6 - 2U >> 1) + 1;
      pcVar23 = (code *)(&PTR_FUN_004f5d60)[(int)uVar35];
      iVar27 = uVar31 * 2;
      if (local_4b0 != 0) {
        do {
          if (0 < local_4a8) {
            puVar24 = *ppuVar34;
            iVar38 = 0;
            iVar16 = iVar15;
            while( true ) {
              iVar40 = iVar15;
              if (iVar38 + local_4a8 < iVar15) {
                iVar40 = iVar38 + local_4a8;
              }
              (*pcVar23)(ppuVar34 + 1,puVar24,iVar40,uVar36);
              if (local_4a8 <= iVar16) break;
              puVar24 = *ppuVar34 + (long)iVar40 * uVar19;
              *ppuVar34 = puVar24;
              if (uVar36 != 0) {
                lVar32 = (long)iVar40 * (0x88442211UL >> (uVar8 << 2) & 0xf);
                uVar35 = uVar3;
                if (uVar3 != 0) {
                  ppuVar34[1] = ppuVar34[1] + lVar32;
                  if (((uVar3 != 1) && (ppuVar34[2] = ppuVar34[2] + lVar32, uVar3 != 2)) &&
                     (ppuVar34[3] = ppuVar34[3] + lVar32, uVar3 != 3)) {
                    ppuVar34[4] = ppuVar34[4] + lVar32;
                    uVar35 = 4;
                  }
                  if (uVar3 == uVar36) goto LAB_002839ec;
                }
                if (iVar6 == 1) {
LAB_002839cc:
                  ppuVar34[(long)(int)uVar35 + 1] = ppuVar34[(long)(int)uVar35 + 1] + lVar32;
                }
                else {
                  uVar21 = 0;
                  ppuVar29 = ppuVar34 + (ulong)uVar3 + 1;
                  ppuVar30 = ppuVar34 + (ulong)uVar3 + 1;
                  do {
                    puVar24 = *ppuVar30;
                    uVar21 = uVar21 + 1;
                    ppuVar29[1] = ppuVar30[1] + lVar32;
                    *ppuVar29 = puVar24 + lVar32;
                    ppuVar29 = ppuVar29 + 2;
                    ppuVar30 = ppuVar30 + 2;
                  } while (uVar21 < uVar31);
                  uVar35 = uVar35 + iVar27;
                  if (iVar27 != iVar6) goto LAB_002839cc;
                }
                puVar24 = *ppuVar34;
              }
LAB_002839ec:
              iVar16 = iVar16 + iVar15;
              iVar38 = iVar38 - iVar15;
            }
          }
          uVar33 = uVar33 + 1;
          NAryMatIterator::operator++(aNStack_4d0);
        } while (uVar33 < local_4b0);
      }
      if ((local_430 != (Mat **)&local_420) && (local_430 != (Mat **)0x0)) {
        operator_delete__(local_430);
      }
      if (local_458 != 0) {
        piVar17 = (int *)(local_458 + 0x14);
        do {
          iVar15 = *piVar17;
          cVar4 = '\x01';
          bVar14 = (bool)ExclusiveMonitorPass(piVar17,0x10);
          if (bVar14) {
            *piVar17 = iVar15 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar15 == 1) {
          Mat::deallocate((Mat *)&local_490);
        }
      }
      if (0 < local_48c) {
        iVar15 = 0;
        puVar25 = local_450;
        do {
          iVar15 = iVar15 + 1;
          *puVar25 = 0;
          puVar25 = puVar25 + 1;
        } while (iVar15 < local_48c);
      }
      goto LAB_00283ac8;
    }
    iVar15 = uVar36 * 2;
    local_430 = (Mat **)&local_420;
    local_428 = (uint *)0x108;
    if (0x108 < iVar15) {
      local_430 = operator_new__((long)iVar15 << 2);
    }
    if (bVar14) {
      iVar27 = 0;
      uVar33 = 0;
      pMVar26 = param_1;
      do {
        uVar31 = *(uint *)pMVar26 >> 3 & 0x1ff;
        iVar6 = uVar31 + 1;
        uVar35 = (uVar31 - 3 >> 2) + 1;
        iVar16 = uVar35 * 4;
        if (uVar31 < 3) {
          iVar16 = 0;
LAB_00283d94:
          iVar38 = iVar16 + iVar27;
          *(int *)((long)local_430 + (long)(iVar38 * 2) * 4) = iVar38;
          *(int *)((long)local_430 + (long)(iVar38 * 2 + 1) * 4) = iVar38;
          if (iVar16 + 1 < iVar6) {
            iVar38 = iVar27 + iVar16 + 1;
            *(int *)((long)local_430 + (long)(iVar38 * 2) * 4) = iVar38;
            *(int *)((long)local_430 + (long)(iVar38 * 2 + 1) * 4) = iVar38;
            if (iVar16 + 2 < iVar6) {
              iVar16 = iVar16 + 2 + iVar27;
              *(int *)((long)local_430 + (long)(iVar16 * 2) * 4) = iVar16;
              *(int *)((long)local_430 + (long)(iVar16 * 2 + 1) * 4) = iVar16;
            }
          }
        }
        else {
          uVar31 = 0;
          piVar17 = (int *)((long)local_430 + (long)(iVar27 << 1) * 4);
          uVar37 = _DAT_00283fd0;
          uVar39 = _UNK_00283fd8;
          do {
            iVar41 = iVar27 + (int)uVar37;
            iVar38 = (int)((ulong)uVar37 >> 0x20);
            iVar42 = iVar27 + iVar38;
            iVar43 = iVar27 + (int)uVar39;
            iVar40 = (int)((ulong)uVar39 >> 0x20);
            iVar44 = iVar27 + iVar40;
            uVar31 = uVar31 + 1;
            uVar37 = CONCAT44(iVar38 + 4,(int)uVar37 + 4);
            uVar39 = CONCAT44(iVar40 + 4,(int)uVar39 + 4);
            *piVar17 = iVar41;
            piVar17[1] = iVar41;
            piVar17[2] = iVar42;
            piVar17[3] = iVar42;
            piVar17[4] = iVar43;
            piVar17[5] = iVar43;
            piVar17[6] = iVar44;
            piVar17[7] = iVar44;
            piVar17 = piVar17 + 8;
          } while (uVar31 < uVar35);
          if (iVar16 != iVar6) goto LAB_00283d94;
        }
        uVar33 = uVar33 + 1;
        iVar27 = iVar27 + iVar6;
        pMVar26 = pMVar26 + 0x60;
      } while (uVar33 < param_2);
    }
    local_428 = (uint *)(long)iVar15;
    mixChannels(param_1,param_2,(Mat *)&local_490,1,(int *)local_430,(long)(int)uVar36);
    if ((local_430 != (Mat **)&local_420) && (local_430 != (Mat **)0x0)) {
      operator_delete__(local_430);
    }
  }
  if (local_458 != 0) {
    piVar17 = (int *)(local_458 + 0x14);
    do {
      iVar15 = *piVar17;
      cVar4 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar17,0x10);
      if (bVar14) {
        *piVar17 = iVar15 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_490);
    }
  }
  if (0 < local_48c) {
    iVar15 = 0;
    puVar25 = local_450;
    do {
      iVar15 = iVar15 + 1;
      *puVar25 = 0;
      puVar25 = puVar25 + 1;
    } while (iVar15 < local_48c);
  }
LAB_00283ac8:
  local_458 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  local_480 = 0;
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  return;
}


==================================================================

### FUNC 00283fe0 (28 bytes) name=FUN_00283fe0

undefined * FUN_00283fe0(ulong param_1,ulong param_2)

{
  return (&PTR_FUN_004f5b20)[(param_2 & 7) * 8 + (param_1 & 7)];
}


==================================================================

### FUNC 00283ffc (1220 bytes) name=convertScaleAbs

/* cv::convertScaleAbs(cv::_InputArray const&, cv::_OutputArray const&, double, double) */

void cv::convertScaleAbs(_InputArray *param_1,_OutputArray *param_2,double param_3,double param_4)

{
  char cVar1;
  bool bVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  Mat *pMVar7;
  undefined4 *puVar8;
  int *piVar9;
  ulong uVar10;
  code *pcVar11;
  int local_140 [2];
  double local_138;
  double local_130;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  code *local_100;
  code *local_f8;
  ulong local_e0;
  int local_d8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar7 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar7;
    local_bc = *(int *)(pMVar7 + 4);
    local_b8 = *(int *)(pMVar7 + 8);
    local_b4 = *(int *)(pMVar7 + 0xc);
    local_b0 = *(undefined8 *)(pMVar7 + 0x10);
    local_a8 = *(undefined8 *)(pMVar7 + 0x18);
    local_a0 = *(undefined8 *)(pMVar7 + 0x20);
    local_98 = *(undefined8 *)(pMVar7 + 0x28);
    local_90 = *(undefined8 *)(pMVar7 + 0x30);
    local_88 = *(long *)(pMVar7 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar9 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar7 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar7 + 0x48);
      local_68 = (*(undefined8 **)(pMVar7 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar7);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar3 = local_c0 >> 3 & 0x1ff;
  iVar4 = uVar3 + 1;
  local_138 = param_3;
  local_130 = param_4;
  _OutputArray::create(param_2,local_bc,local_80,uVar3 << 3,-1,false,0);
  iVar5 = _InputArray::kind((_InputArray *)param_2);
  if (iVar5 == 0x10000) {
    pMVar7 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar7;
    local_5c = *(int *)(pMVar7 + 4);
    local_58 = *(undefined4 *)(pMVar7 + 8);
    local_54 = *(undefined4 *)(pMVar7 + 0xc);
    local_50 = *(undefined8 *)(pMVar7 + 0x10);
    local_48 = *(undefined8 *)(pMVar7 + 0x18);
    local_40 = *(undefined8 *)(pMVar7 + 0x20);
    local_38 = *(undefined8 *)(pMVar7 + 0x28);
    local_30 = *(undefined8 *)(pMVar7 + 0x30);
    local_28 = *(long *)(pMVar7 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar9 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar7 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar7 + 0x48);
      local_8 = (*(undefined8 **)(pMVar7 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar7);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  pcVar11 = (code *)(&PTR_FUN_004f5da0)[(int)(local_c0 & 7)];
  if (pcVar11 == (code *)0x0) {
    local_100 = pcVar11;
    local_f8 = pcVar11;
    pcVar6 = (char *)String::allocate((String *)&local_100,9);
    cVar1 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar6 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar6[8] = cVar1;
    error(-0xd7,(String *)&local_100,
          "void cv::convertScaleAbs(cv::InputArray, cv::OutputArray, double, double)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x15ad);
    String::deallocate((String *)&local_100);
  }
  if (local_bc < 3) {
    if ((((local_c0 & local_60) >> 0xe & 1) == 0) ||
       (uVar10 = (long)local_b4 * (long)local_b8 * (long)iVar4, uVar10 - (long)(int)uVar10 != 0)) {
      uVar10 = (ulong)(uint)(local_b4 * iVar4);
      iVar4 = local_b8;
    }
    else {
      iVar4 = 1;
    }
    local_100 = (code *)CONCAT44(iVar4,(int)uVar10);
    (*pcVar11)(local_b0,local_70,0,0,local_50,local_10,(NAryMatIterator *)&local_100,&local_138);
  }
  else {
    local_108 = 0;
    local_118 = (Mat *)&local_c0;
    local_110 = (Mat *)&local_60;
    NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_100,&local_118,&local_128,-1);
    for (uVar10 = 0; uVar10 < local_e0; uVar10 = uVar10 + 1) {
      local_140[1] = 1;
      local_140[0] = iVar4 * local_d8;
      (*pcVar11)(local_128,0,0,0,local_120,0,local_140,&local_138);
      NAryMatIterator::operator++((NAryMatIterator *)&local_100);
    }
  }
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    puVar8 = local_20;
    do {
      *puVar8 = 0;
      iVar4 = iVar4 + 1;
      puVar8 = puVar8 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    piVar9 = local_80;
    do {
      *piVar9 = 0;
      iVar4 = iVar4 + 1;
      piVar9 = piVar9 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00284520 (1776 bytes) name=convertTo

/* WARNING: Type propagation algorithm not settling */
/* cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const */

void __thiscall
cv::Mat::convertTo(Mat *this,_OutputArray *param_1,int param_2,double param_3,double param_4)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  char cVar7;
  int iVar8;
  uint uVar9;
  char *pcVar10;
  code **ppcVar11;
  Mat *pMVar12;
  int iVar13;
  int *piVar14;
  ulong uVar15;
  code *pcVar16;
  int local_140;
  undefined4 local_13c;
  double local_138;
  double local_130;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  undefined4 local_100;
  int local_fc;
  ulong local_e0;
  int local_d8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  code *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  code **local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  bVar5 = ABS(param_3 - 1.0) < DAT_00284c90;
  bVar6 = ABS(param_4) < DAT_00284c90;
  if (param_2 < 0) {
    cVar7 = _OutputArray::fixedType(param_1);
    if (cVar7 == '\0') {
      local_c0 = *(uint *)this;
      uVar9 = local_c0 & 0xfff;
    }
    else {
      uVar9 = _InputArray::type((_InputArray *)param_1,-1);
      local_c0 = *(uint *)this;
    }
  }
  else {
    local_c0 = *(uint *)this;
    uVar9 = (param_2 & 7U) + (local_c0 & 0xff8);
  }
  uVar2 = local_c0 & 7;
  uVar3 = uVar9 & 7;
  if ((uVar3 == uVar2) && (bVar5 && bVar6)) {
    copyTo(this,param_1);
    return;
  }
  local_bc = *(int *)(this + 4);
  local_b8 = *(int *)(this + 8);
  local_80 = &local_b8;
  local_b4 = *(int *)(this + 0xc);
  local_78 = &local_70;
                    /* try { // try from 002845d4 to 00384633 has its CatchHandler @ 002845d4
                       catch() { ... } // from try @ 002845d4 with catch @ 002845d4
                       catch() { ... } // from try @ 00284638 with catch @ 002845d4 */
  local_b0 = *(undefined8 *)(this + 0x10);
  local_a8 = *(undefined8 *)(this + 0x18);
  local_a0 = *(undefined8 *)(this + 0x20);
  local_98 = *(undefined8 *)(this + 0x28);
  local_90 = *(undefined8 *)(this + 0x30);
  local_88 = *(long *)(this + 0x38);
  local_68 = 0;
  local_70 = 0;
  iVar13 = local_bc;
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
                    /* try { // try from 00284634 to 00384637 has its CatchHandler @ 00284ee0 */
      cVar7 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar4) {
        *piVar14 = *piVar14 + 1;
        cVar7 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 00284638 to 00384ef3 has its CatchHandler @ 002845d4 */
    } while (cVar7 != '\0');
    iVar13 = *(int *)(this + 4);
  }
  if (iVar13 < 3) {
    lVar1 = (ulong)uVar3 * 8 + (long)(int)uVar2;
    local_70 = **(undefined8 **)(this + 0x48);
    local_68 = (*(undefined8 **)(this + 0x48))[1];
  }
  else {
    local_bc = 0;
    copySize((Mat *)&local_c0,this);
    lVar1 = (ulong)uVar3 * 8 + (long)(int)uVar2;
  }
  if (bVar5 && bVar6) {
    pcVar16 = (code *)(&PTR_FUN_004f5b20)[lVar1];
  }
  else {
    pcVar16 = (code *)(&PTR_FUN_004f5de0)[lVar1];
  }
  iVar13 = (*(uint *)this >> 3 & 0x1ff) + 1;
  local_138 = param_3;
  local_130 = param_4;
  if (pcVar16 == (code *)0x0) {
    local_60 = pcVar16;
    local_58 = pcVar16;
    pcVar10 = (char *)String::allocate((String *)&local_60,9);
    cVar7 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar10 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar10[8] = cVar7;
    error(-0xd7,(String *)&local_60,
          "void cv::Mat::convertTo(cv::OutputArray, int, double, double) const",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x15d5);
    String::deallocate((String *)&local_60);
  }
  if (*(int *)(this + 4) < 3) {
    local_60 = (code *)CONCAT44(**(undefined4 **)(this + 0x40),(*(undefined4 **)(this + 0x40))[1]);
    _OutputArray::create(param_1,(Mat *)&local_60,uVar9,0xffffffff,0,0);
    iVar8 = _InputArray::kind((_InputArray *)param_1);
    if (iVar8 == 0x10000) {
      pMVar12 = *(Mat **)(param_1 + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar9 = *(uint *)pMVar12;
      local_50 = *(undefined8 *)(pMVar12 + 0x10);
      local_60 = *(code **)pMVar12;
      local_58 = *(code **)(pMVar12 + 8);
      local_48 = *(undefined8 *)(pMVar12 + 0x18);
      local_40 = *(undefined8 *)(pMVar12 + 0x20);
      local_38 = *(undefined8 *)(pMVar12 + 0x28);
      local_30 = *(undefined8 *)(pMVar12 + 0x30);
      local_28 = *(long *)(pMVar12 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar14 = (int *)(local_28 + 0x14);
        do {
          cVar7 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = *piVar14 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
      }
      if (*(int *)(pMVar12 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar12 + 0x48);
        local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
      }
      else {
        local_60 = (code *)(ulong)uVar9;
        copySize((Mat *)&local_60,pMVar12);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    if ((((local_c0 & (uint)local_60) >> 0xe & 1) == 0) ||
       (uVar15 = (long)local_b4 * (long)local_b8 * (long)iVar13, uVar15 - (long)(int)uVar15 != 0)) {
      uVar15 = (ulong)(uint)(local_b4 * iVar13);
      local_fc = local_b8;
    }
    else {
      local_fc = 1;
    }
    local_100 = (undefined4)uVar15;
    (*pcVar16)(local_b0,local_70,0,0,local_50,local_10,&local_100,&local_138);
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        iVar13 = *piVar14;
        cVar7 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar13 + -1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
      if (iVar13 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar13 = 0;
      ppcVar11 = local_20;
      do {
        *(undefined4 *)ppcVar11 = 0;
        iVar13 = iVar13 + 1;
        ppcVar11 = (code **)((long)ppcVar11 + 4);
      } while (iVar13 < local_60._4_4_);
    }
  }
  else {
    _OutputArray::create(param_1,*(int *)(this + 4),*(int **)(this + 0x40),uVar9,-1,false,0);
    iVar8 = _InputArray::kind((_InputArray *)param_1);
    if (iVar8 == 0x10000) {
      pMVar12 = *(Mat **)(param_1 + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar9 = *(uint *)pMVar12;
      local_50 = *(undefined8 *)(pMVar12 + 0x10);
      local_60 = *(code **)pMVar12;
      local_58 = *(code **)(pMVar12 + 8);
      local_48 = *(undefined8 *)(pMVar12 + 0x18);
      local_40 = *(undefined8 *)(pMVar12 + 0x20);
      local_38 = *(undefined8 *)(pMVar12 + 0x28);
      local_30 = *(undefined8 *)(pMVar12 + 0x30);
      local_28 = *(long *)(pMVar12 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar14 = (int *)(local_28 + 0x14);
        do {
          cVar7 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = *piVar14 + 1;
            cVar7 = ExclusiveMonitorsStatus();
          }
        } while (cVar7 != '\0');
      }
      if (*(int *)(pMVar12 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar12 + 0x48);
        local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
      }
      else {
        local_60 = (code *)(ulong)uVar9;
        copySize((Mat *)&local_60,pMVar12);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    local_108 = 0;
    local_118 = (Mat *)&local_c0;
    local_110 = (Mat *)&local_60;
    NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_100,&local_118,&local_128,-1);
    for (uVar15 = 0; uVar15 < local_e0; uVar15 = uVar15 + 1) {
      local_13c = 1;
      local_140 = iVar13 * local_d8;
      (*pcVar16)(local_128,1,0,0,local_120,1,&local_140,&local_138);
      NAryMatIterator::operator++((NAryMatIterator *)&local_100);
    }
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        iVar13 = *piVar14;
        cVar7 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar13 + -1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
      if (iVar13 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar13 = 0;
      ppcVar11 = local_20;
      do {
        *(undefined4 *)ppcVar11 = 0;
        iVar13 = iVar13 + 1;
        ppcVar11 = (code **)((long)ppcVar11 + 4);
      } while (iVar13 < local_60._4_4_);
    }
  }
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = 0;
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar14;
      cVar7 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar13 + -1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
    if (iVar13 == 1) {
      deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    piVar14 = local_80;
    do {
      *piVar14 = 0;
      iVar13 = iVar13 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
    return;
  }
  return;
}


==================================================================

### FUNC 00284c98 (3144 bytes) name=LUT

/* cv::LUT(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::LUT(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  long *plVar1;
  bool bVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  void *__dest;
  int *piVar8;
  ParallelLoopBody *pPVar9;
  long *plVar10;
  char *pcVar11;
  Mat *pMVar12;
  undefined *puVar13;
  long lVar14;
  undefined4 *puVar15;
  ulong uVar16;
  code *pcVar17;
  undefined4 local_2e0;
  undefined4 local_2dc;
  undefined4 local_2d8;
  int local_2d4;
  undefined4 local_2d0;
  undefined4 local_2cc;
  undefined4 local_2c8;
  int local_2c4;
  code *local_2c0;
  code *local_2b8;
  uchar *local_2b0;
  undefined8 local_2a8;
  uchar *local_2a0;
  undefined8 local_298;
  Mat *local_290;
  Mat *local_288;
  undefined8 local_280;
  Mat *local_278;
  Mat *local_270;
  undefined8 local_268;
  undefined4 local_260;
  int local_25c;
  ulong local_240;
  undefined4 local_238;
  NAryMatIterator aNStack_220 [32];
  ulong local_200;
  undefined4 local_1f8;
  undefined4 local_1e0;
  int local_1dc;
  int local_1d8;
  undefined4 local_1d4;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  int *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  uint local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined4 local_120;
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar4 = _InputArray::channels(param_1,-1);
  uVar5 = _InputArray::depth(param_1,-1);
  iVar6 = _InputArray::channels(param_2,-1);
  if ((((iVar6 != 1) && (iVar4 != iVar6)) ||
      (lVar14 = _InputArray::total(param_2,-1), lVar14 != 0x100)) ||
     ((cVar3 = _InputArray::isContinuous(param_2,-1), cVar3 == '\0' || (1 < uVar5)))) {
    local_60 = 0;
    local_58 = 0;
    __dest = (void *)String::allocate((String *)&local_60,0x6f);
    memcpy(__dest,
           "(lutcn == cn || lutcn == 1) && _lut.total() == 256 && _lut.isContinuous() && (depth == CV_8U || depth == CV_8S)"
           ,0x6f);
    error(-0xd7,(String *)&local_60,"void cv::LUT(cv::InputArray, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x171d);
    String::deallocate((String *)&local_60);
  }
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_1a0 = &local_1d8;
    local_198 = &local_190;
    local_1e0 = *(undefined4 *)pMVar12;
    local_1dc = *(int *)(pMVar12 + 4);
    local_1d8 = *(int *)(pMVar12 + 8);
    local_1d4 = *(undefined4 *)(pMVar12 + 0xc);
    local_1d0 = *(undefined8 *)(pMVar12 + 0x10);
    local_1c8 = *(undefined8 *)(pMVar12 + 0x18);
    local_1c0 = *(undefined8 *)(pMVar12 + 0x20);
    local_1b8 = *(undefined8 *)(pMVar12 + 0x28);
    local_1b0 = *(undefined8 *)(pMVar12 + 0x30);
    local_1a8 = *(long *)(pMVar12 + 0x38);
    local_188 = 0;
    local_190 = 0;
    if (local_1a8 != 0) {
      piVar8 = (int *)(local_1a8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_190 = **(undefined8 **)(pMVar12 + 0x48);
      local_188 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_1dc = 0;
      Mat::copySize((Mat *)&local_1e0,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar7 = _InputArray::kind(param_2);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_2 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(uint *)pMVar12;
    local_17c = *(int *)(pMVar12 + 4);
    local_178 = *(undefined4 *)(pMVar12 + 8);
    local_174 = *(undefined4 *)(pMVar12 + 0xc);
    local_170 = *(undefined8 *)(pMVar12 + 0x10);
    local_168 = *(undefined8 *)(pMVar12 + 0x18);
    local_160 = *(undefined8 *)(pMVar12 + 0x20);
    local_158 = *(undefined8 *)(pMVar12 + 0x28);
    local_150 = *(undefined8 *)(pMVar12 + 0x30);
    local_148 = *(long *)(pMVar12 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (local_148 != 0) {
      piVar8 = (int *)(local_148 + 0x14);
      do {
        cVar3 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar12 + 0x48);
      local_128 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  piVar8 = local_1a0;
  iVar7 = local_1dc;
  uVar5 = _InputArray::depth(param_2,-1);
  _OutputArray::create(param_3,iVar7,piVar8,(uVar5 & 7) + (iVar4 + -1) * 8,-1,false,0);
  iVar7 = _InputArray::kind((_InputArray *)param_3);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_3 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(undefined4 *)pMVar12;
    local_11c = *(int *)(pMVar12 + 4);
    local_118 = *(int *)(pMVar12 + 8);
    local_114 = *(int *)(pMVar12 + 0xc);
    local_110 = *(undefined8 *)(pMVar12 + 0x10);
    local_108 = *(undefined8 *)(pMVar12 + 0x18);
    local_100 = *(undefined8 *)(pMVar12 + 0x20);
    local_f8 = *(undefined8 *)(pMVar12 + 0x28);
    local_f0 = *(undefined8 *)(pMVar12 + 0x30);
    local_e8 = *(long *)(pMVar12 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar8 = (int *)(local_e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar12 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  iVar7 = _InputArray::dims(param_1,-1);
  if (iVar7 < 3) {
    local_290 = (Mat *)((ulong)local_290 & 0xffffffffffffff00);
    pPVar9 = operator_new(0x30);
    *(undefined ***)pPVar9 = &PTR_FUN_004f5ad0;
    puVar13 = (&PTR_FUN_004f5d20)[(int)(local_180 & 7)];
    *(Mat ***)(pPVar9 + 8) = &local_290;
    *(Mat **)(pPVar9 + 0x10) = (Mat *)&local_1e0;
    *(Mat **)(pPVar9 + 0x18) = (Mat *)&local_180;
    *(Mat **)(pPVar9 + 0x20) = (Mat *)&local_120;
    *(undefined **)(pPVar9 + 0x28) = puVar13;
    local_290 = (Mat *)CONCAT71(local_290._1_7_,puVar13 != (undefined *)0x0);
    plVar10 = operator_new(0x20);
    iVar7 = local_118;
    *(undefined4 *)(plVar10 + 1) = 1;
    plVar10[2] = (long)pPVar9;
    *plVar10 = (long)&PTR_FUN_004f5b00;
    if ((char)local_290 != '\0') {
      local_260 = 0;
      local_25c = local_118;
      if (local_11c < 3) {
        uVar16 = (long)local_114 * (long)local_118;
        if (uVar16 >> 0x12 != 0) goto LAB_00285380;
LAB_00285618:
        if (*(code **)(*(long *)pPVar9 + 0x10) == FUN_00282788) {
          local_2e0 = 0x80000000;
          local_2dc = 0x7fffffff;
          local_2d8 = 0;
          local_2d4 = local_118;
          Mat::Mat((Mat *)&local_c0,*(Mat **)(pPVar9 + 0x10),(Range *)&local_2d8,(Range *)&local_2e0
                  );
          local_2d0 = 0x80000000;
          local_2cc = 0x7fffffff;
          local_2c8 = 0;
          local_2c4 = iVar7;
          Mat::Mat((Mat *)&local_60,*(Mat **)(pPVar9 + 0x20),(Range *)&local_2c8,(Range *)&local_2d0
                  );
          uVar5 = **(uint **)(pPVar9 + 0x18);
          local_268 = 0;
          local_278 = (Mat *)&local_c0;
          local_270 = (Mat *)&local_60;
          NAryMatIterator::NAryMatIterator(aNStack_220,&local_278,&local_2a0,-1);
          for (uVar16 = 0; uVar16 < local_200; uVar16 = uVar16 + 1) {
            (**(code **)(pPVar9 + 0x28))
                      (local_2a0,*(undefined8 *)(*(long *)(pPVar9 + 0x18) + 0x10),local_298,
                       local_1f8,(local_c0 >> 3 & 0x1ff) + 1,(uVar5 >> 3 & 0x1ff) + 1);
            NAryMatIterator::operator++(aNStack_220);
          }
          if (local_28 != 0) {
            piVar8 = (int *)(local_28 + 0x14);
            do {
              iVar7 = *piVar8;
              cVar3 = '\x01';
              bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
              if (bVar2) {
                *piVar8 = iVar7 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            if (iVar7 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
          local_28 = 0;
          local_50 = 0;
          local_38 = 0;
                    /* catch() { ... } // from try @ 00284f70 with catch @ 0028577c */
          local_40 = 0;
          local_48 = 0;
          if (0 < local_60._4_4_) {
            iVar7 = 0;
            do {
              *local_20 = 0;
              iVar7 = iVar7 + 1;
              local_20 = local_20 + 1;
            } while (iVar7 < local_60._4_4_);
          }
          if (local_18 != auStack_10) {
            fastFree(local_18);
          }
          if (local_88 != 0) {
            piVar8 = (int *)(local_88 + 0x14);
            do {
              iVar7 = *piVar8;
              cVar3 = '\x01';
              bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
              if (bVar2) {
                *piVar8 = iVar7 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            if (iVar7 == 1) {
              Mat::deallocate((Mat *)&local_c0);
            }
          }
          local_88 = 0;
          local_b0 = 0;
          local_98 = 0;
          local_a0 = 0;
          local_a8 = 0;
          if (0 < local_bc) {
            iVar7 = 0;
            do {
              *local_80 = 0;
              iVar7 = iVar7 + 1;
              local_80 = local_80 + 1;
            } while (iVar7 < local_bc);
          }
          if (local_78 != auStack_70) {
            fastFree(local_78);
          }
        }
        else {
          (**(code **)(*(long *)pPVar9 + 0x10))(pPVar9,(Range *)&local_260);
        }
      }
      else {
        lVar14 = 0;
        uVar16 = 1;
        do {
          piVar8 = local_e0 + lVar14;
          lVar14 = lVar14 + 1;
          uVar16 = uVar16 * (long)*piVar8;
        } while ((int)lVar14 < local_11c);
        if (uVar16 >> 0x12 == 0) goto LAB_00285618;
        lVar14 = 0;
        uVar16 = 1;
        do {
          piVar8 = local_e0 + lVar14;
          lVar14 = lVar14 + 1;
          uVar16 = uVar16 * (long)*piVar8;
        } while ((int)lVar14 < local_11c);
LAB_00285380:
        uVar16 = uVar16 >> 0x10;
        if (uVar16 == 0) {
          uVar16 = 1;
        }
        parallel_for_((Range *)&local_260,pPVar9,(double)uVar16);
      }
      if ((char)local_290 != '\0') {
        plVar1 = plVar10 + 1;
        do {
          lVar14 = *plVar1;
          cVar3 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(plVar1,0x10);
          if (bVar2) {
            *(int *)plVar1 = (int)lVar14 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if ((int)lVar14 == 1) {
          lVar14 = *plVar10;
          if (*(code **)(lVar14 + 0x10) == FUN_0026cacc) {
            if ((long *)plVar10[2] != (long *)0x0) {
              (**(code **)(*(long *)plVar10[2] + 8))();
              lVar14 = *plVar10;
            }
            (**(code **)(lVar14 + 8))(plVar10);
          }
          else {
            (**(code **)(lVar14 + 0x10))(plVar10);
          }
        }
        if (local_e8 != 0) {
          piVar8 = (int *)(local_e8 + 0x14);
          do {
            iVar4 = *piVar8;
            cVar3 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
            if (bVar2) {
              *piVar8 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar4 == 1) {
            Mat::deallocate((Mat *)&local_120);
          }
        }
        local_e8 = 0;
        local_110 = 0;
        local_f8 = 0;
        local_100 = 0;
        local_108 = 0;
        if (0 < local_11c) {
          iVar4 = 0;
          piVar8 = local_e0;
          do {
            *piVar8 = 0;
            iVar4 = iVar4 + 1;
            piVar8 = piVar8 + 1;
          } while (iVar4 < local_11c);
        }
        if (local_d8 != &local_d0) {
          fastFree(local_d8);
        }
        if (local_148 != 0) {
          piVar8 = (int *)(local_148 + 0x14);
          do {
            iVar4 = *piVar8;
            cVar3 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
            if (bVar2) {
              *piVar8 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar4 == 1) {
            Mat::deallocate((Mat *)&local_180);
          }
        }
        local_148 = 0;
        local_170 = 0;
        local_158 = 0;
        local_160 = 0;
        local_168 = 0;
        if (0 < local_17c) {
          iVar4 = 0;
          puVar15 = local_140;
          do {
            *puVar15 = 0;
            iVar4 = iVar4 + 1;
            puVar15 = puVar15 + 1;
          } while (iVar4 < local_17c);
        }
        if (local_138 != &local_130) {
          fastFree(local_138);
        }
        if (local_1a8 != 0) {
          piVar8 = (int *)(local_1a8 + 0x14);
          do {
            iVar4 = *piVar8;
            cVar3 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
            if (bVar2) {
              *piVar8 = iVar4 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar4 == 1) {
            Mat::deallocate((Mat *)&local_1e0);
          }
        }
        if (0 < local_1dc) {
          iVar4 = 0;
          piVar8 = local_1a0;
          do {
            *piVar8 = 0;
            iVar4 = iVar4 + 1;
            piVar8 = piVar8 + 1;
          } while (iVar4 < local_1dc);
        }
        goto LAB_00284fe8;
      }
    }
    plVar1 = plVar10 + 1;
    do {
      lVar14 = *plVar1;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar2) {
        *(int *)plVar1 = (int)lVar14 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar14 == 1) {
      lVar14 = *plVar10;
      if (*(code **)(lVar14 + 0x10) == FUN_0026cacc) {
        if ((long *)plVar10[2] != (long *)0x0) {
          (**(code **)(*(long *)plVar10[2] + 8))();
          lVar14 = *plVar10;
        }
        (**(code **)(lVar14 + 8))(plVar10);
      }
      else {
        (**(code **)(lVar14 + 0x10))(plVar10);
      }
    }
  }
  pcVar17 = (code *)(&PTR_FUN_004f5d20)[(int)(local_180 & 7)];
  if (pcVar17 == (code *)0x0) {
    local_2c0 = pcVar17;
    local_2b8 = pcVar17;
    pcVar11 = (char *)String::allocate((String *)&local_2c0,9);
    cVar3 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar11 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar11[8] = cVar3;
    error(-0xd7,(String *)&local_2c0,"void cv::LUT(cv::InputArray, cv::InputArray, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x1750);
    String::deallocate((String *)&local_2c0);
  }
  local_280 = 0;
  local_290 = (Mat *)&local_1e0;
  local_288 = (Mat *)&local_120;
  NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_260,&local_290,&local_2b0,-1);
  for (uVar16 = 0; uVar16 < local_240; uVar16 = uVar16 + 1) {
    (*pcVar17)(local_2b0,local_170,local_2a8,local_238,iVar4,iVar6);
    NAryMatIterator::operator++((NAryMatIterator *)&local_260);
  }
  if (local_e8 != 0) {
    piVar8 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar4 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
                    /* catch() { ... } // from try @ 00284634 with catch @ 00284ee0 */
  if (0 < local_11c) {
    iVar4 = 0;
    piVar8 = local_e0;
    do {
      *piVar8 = 0;
      iVar4 = iVar4 + 1;
                    /* try { // try from 00284ef4 to 00384f6f has its CatchHandler @ 00284ef4
                       catch() { ... } // from try @ 00284ef4 with catch @ 00284ef4
                       catch() { ... } // from try @ 00284f74 with catch @ 00284ef4 */
      piVar8 = piVar8 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar8 = (int *)(local_148 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar4 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar4 = 0;
    puVar15 = local_140;
    do {
      *puVar15 = 0;
      iVar4 = iVar4 + 1;
                    /* try { // try from 00284f70 to 00384f73 has its CatchHandler @ 0028577c */
      puVar15 = puVar15 + 1;
    } while (iVar4 < local_17c);
  }
                    /* try { // try from 00284f74 to 0038578f has its CatchHandler @ 00284ef4 */
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  if (local_1a8 != 0) {
    piVar8 = (int *)(local_1a8 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar4 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  if (0 < local_1dc) {
    iVar4 = 0;
    piVar8 = local_1a0;
    do {
      *piVar8 = 0;
      iVar4 = iVar4 + 1;
      piVar8 = piVar8 + 1;
    } while (iVar4 < local_1dc);
  }
LAB_00284fe8:
  local_1a8 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  local_1d0 = 0;
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  return;
}


==================================================================

### FUNC 00285a00 (1580 bytes) name=normalize

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::normalize(cv::_InputArray const&, cv::_InputOutputArray const&, double, double, int, int,
   cv::_InputArray const&) */

void cv::normalize(_InputArray *param_1,_InputOutputArray *param_2,double param_3,double param_4,
                  int param_5,int param_6,_InputArray *param_7)

{
  int *piVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char cVar6;
  int iVar7;
  uint uVar8;
  char *pcVar9;
  ulong uVar10;
  Mat **ppMVar11;
  Mat *pMVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  uint uVar15;
  double dVar16;
  double dVar17;
  undefined4 local_138 [2];
  Mat *local_130;
  uint local_128;
  uint local_124;
  undefined8 local_120;
  Mat *pMStack_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  Mat **local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_5 == 0x20) {
    local_c0 = 0.0;
    local_60 = 0.0;
    dVar17 = param_3;
    if (param_4 < param_3) {
      dVar17 = param_4;
    }
    if (param_4 <= param_3) {
      param_4 = param_3;
    }
    minMaxLoc(param_1,(double *)&local_c0,(double *)&local_60,(Point_ *)0x0,(Point_ *)0x0,param_7);
    dVar16 = 0.0;
    if (DAT_002860b8 < local_60 - local_c0) {
      dVar16 = 1.0 / (local_60 - local_c0);
    }
    dVar16 = (param_4 - dVar17) * dVar16;
    dVar17 = dVar17 - dVar16 * local_c0;
  }
  else if ((param_5 - 1U < 2) || (param_5 == 4)) {
    dVar16 = (double)norm(param_1,param_5,param_7);
    if (DAT_002860b8 < dVar16) {
      dVar16 = param_3 / dVar16;
      dVar17 = 0.0;
      uVar10 = _InputArray::type(param_1,-1);
      uVar15 = (uint)uVar10;
      uVar8 = (uint)((uVar10 & 0xffffffff) >> 3);
      goto joined_r0x00285cb8;
    }
    dVar17 = 0.0;
    dVar16 = 0.0;
  }
  else {
    local_60 = 0.0;
    local_58 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_60,0x1d);
    cVar6 = s_Unknown_unsupported_norm_type_00463410[0x1c];
    uVar5 = s_Unknown_unsupported_norm_type_00463410._24_4_;
    uVar4 = s_Unknown_unsupported_norm_type_00463410._8_8_;
    uVar3 = s_Unknown_unsupported_norm_type_00463410._0_8_;
    *(undefined8 *)(pcVar9 + 0x10) = s_Unknown_unsupported_norm_type_00463410._16_8_;
    *(undefined4 *)(pcVar9 + 0x18) = uVar5;
    pcVar9[0x1c] = cVar6;
    *(undefined8 *)pcVar9 = uVar3;
    *(undefined8 *)(pcVar9 + 8) = uVar4;
    error(-5,(String *)&local_60,
          "void cv::normalize(cv::InputArray, cv::InputOutputArray, double, double, int, int, cv::InputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17cb);
    dVar17 = 0.0;
    String::deallocate((String *)&local_60);
    dVar16 = 1.0;
  }
  uVar10 = _InputArray::type(param_1,-1);
  uVar15 = (uint)uVar10;
  uVar8 = (uint)((uVar10 & 0xffffffff) >> 3);
joined_r0x00285cb8:
  if (param_6 < 0) {
    cVar6 = _OutputArray::fixedType((_OutputArray *)param_2);
    if (cVar6 == '\0') {
      param_6 = uVar15 & 7;
    }
    else {
      param_6 = _InputArray::depth((_InputArray *)param_2,-1);
    }
  }
  _OutputArray::createSameSize((_OutputArray *)param_2,param_1,(param_6 & 7U) + (uVar8 & 0x1ff) * 8)
  ;
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    uVar8 = *(uint *)pMVar12;
    local_b0 = *(undefined8 *)(pMVar12 + 0x10);
    local_c0 = *(double *)pMVar12;
    local_b8 = *(undefined4 *)(pMVar12 + 8);
    local_b4 = *(undefined4 *)(pMVar12 + 0xc);
    local_a8 = *(undefined8 *)(pMVar12 + 0x18);
    local_a0 = *(undefined8 *)(pMVar12 + 0x20);
    local_98 = *(undefined8 *)(pMVar12 + 0x28);
    local_90 = *(undefined8 *)(pMVar12 + 0x30);
    local_88 = *(long *)(pMVar12 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar6 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = *piVar1 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar12 + 0x48);
      local_68 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_c0 = (double)(ulong)uVar8;
      Mat::copySize((Mat *)&local_c0,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar7 = _InputArray::kind((_InputArray *)param_2);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar8 = *(uint *)pMVar12;
    local_50 = *(undefined8 *)(pMVar12 + 0x10);
    local_60 = *(double *)pMVar12;
    local_58 = *(undefined8 *)(pMVar12 + 8);
    local_48 = *(undefined8 *)(pMVar12 + 0x18);
    local_40 = *(undefined8 *)(pMVar12 + 0x20);
    local_38 = *(undefined8 *)(pMVar12 + 0x28);
    local_30 = *(undefined8 *)(pMVar12 + 0x30);
    local_28 = *(long *)(pMVar12 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar6 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = *piVar1 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar12 + 0x48);
      local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_60 = (double)(ulong)uVar8;
      Mat::copySize((Mat *)&local_60,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar8 = _InputArray::empty(param_7);
  if ((uVar8 & 0xff) == 0) {
    local_d8 = &local_d0;
    local_e0 = &pMStack_118;
    local_110 = 0;
    local_108 = 0;
    pMStack_118 = _UNK_002860c8;
    local_120 = _DAT_002860c0;
    local_124 = uVar8 & 0xff;
    local_100 = 0;
    uStack_c8 = 0;
    local_d0 = 0;
    local_138[0] = 0x2010000;
    local_f8 = 0;
    local_f0 = 0;
    local_e8 = 0;
    local_130 = (Mat *)&local_120;
    local_128 = uVar8 & 0xff;
    Mat::convertTo((Mat *)&local_c0,(_OutputArray *)local_138,param_6,dVar16,dVar17);
    local_128 = 0;
    local_124 = 0;
    local_138[0] = 0x2010000;
    local_130 = (Mat *)&local_60;
    Mat::copyTo((Mat *)&local_120,(_OutputArray *)local_138,param_7);
    if (local_e8 != 0) {
      piVar1 = (int *)(local_e8 + 0x14);
      do {
        iVar7 = *piVar1;
        cVar6 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = iVar7 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = 0;
    local_f8 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_120._4_4_) {
      iVar7 = 0;
      ppMVar11 = local_e0;
      do {
        *(undefined4 *)ppMVar11 = 0;
        iVar7 = iVar7 + 1;
        ppMVar11 = (Mat **)((long)ppMVar11 + 4);
      } while (iVar7 < local_120._4_4_);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
  }
  else {
    local_110 = 0;
    local_120 = CONCAT44(local_120._4_4_,0x2010000);
    pMStack_118 = (Mat *)&local_60;
    Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_120,param_6,dVar16,dVar17);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar6 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar2) {
        *piVar1 = iVar7 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar7 = 0;
    puVar13 = local_20;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar7 = iVar7 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar7 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar6 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar2) {
        *piVar1 = iVar7 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar7 = 0;
    puVar14 = local_80;
    do {
      *puVar14 = 0;
      iVar7 = iVar7 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar7 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002860d0 (704 bytes) name=cvConvertScaleAbs

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvConvertScaleAbs(double param_1,double param_2,cv *param_3,cv *param_4)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined8 *puVar10;
  int *piVar11;
  int iVar12;
  int *piVar13;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,in_x5);
                    /* try { // try from 00286128 to 003862df has its CatchHandler @ 0028632c */
  iVar12 = local_80[-1];
  if (iVar12 == local_20[-1]) {
    if (iVar12 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_0028634c;
    }
    else if (iVar12 < 1) {
LAB_0028634c:
      if ((local_c0 & 0xff8) == (local_60 & 0xfff)) goto LAB_002861b4;
    }
    else if (*local_80 == *local_20) {
                    /* catch() { ... } // from try @ 00286128 with catch @ 0028632c */
      piVar11 = local_80;
      piVar13 = local_20;
      do {
        piVar13 = piVar13 + 1;
        if (piVar11 == local_80 + (iVar12 - 1)) goto LAB_0028634c;
        piVar11 = piVar11 + 1;
                    /* try { // try from 00286340 to 0038639b has its CatchHandler @ 00286340
                       catch() { ... } // from try @ 00286340 with catch @ 00286340
                       catch() { ... } // from try @ 00286fa0 with catch @ 00286340 */
      } while (*piVar11 == *piVar13);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar10 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x3c);
  uVar9 = DAT_00463468;
  uVar8 = DAT_00463458;
  uVar7 = DAT_00463450;
  uVar6 = DAT_00463448;
  uVar5 = _LAB_00463440;
  uVar4 = DAT_00463438;
  uVar3 = DAT_00463430;
  puVar10[6] = DAT_00463460;
  *(undefined4 *)(puVar10 + 7) = uVar9;
  *puVar10 = uVar3;
  puVar10[1] = uVar4;
  puVar10[2] = uVar5;
  puVar10[3] = uVar6;
  puVar10[4] = uVar7;
  puVar10[5] = uVar8;
  cv::error(-0xd7,(String *)&local_d8,"void cvConvertScaleAbs(const void*, void*, double, double)",
            "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x183b);
  cv::String::deallocate((String *)&local_d8);
LAB_002861b4:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::convertScaleAbs((_InputArray *)local_f0,(_OutputArray *)&local_d8,param_1,param_2);
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
                    /* try { // try from 002862e0 to 0038633f has its CatchHandler @ 002858f8 */
  return;
}


==================================================================

### FUNC 002863f4 (692 bytes) name=cvConvertScale

void cvConvertScale(double param_1,double param_2,cv *param_3,cv *param_4)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char *pcVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  AutoBuffer *in_x5;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
                    /* try { // try from 00286410 to 0038641f has its CatchHandler @ 00287014 */
                    /* try { // try from 0028642c to 0038646f has its CatchHandler @ 00287054 */
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,in_x5);
  iVar11 = local_80[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
                    /* try { // try from 0028668c to 0038669b has its CatchHandler @ 0028701c */
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_0028665c;
    }
    else if (iVar11 < 1) {
LAB_0028665c:
      if ((local_c0 >> 3 & 0x1ff) + 1 == (local_60 >> 3 & 0x1ff) + 1) goto LAB_002864d4;
    }
    else if (*local_80 == *local_20) {
      piVar10 = local_80;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_80 + (iVar11 - 1)) goto LAB_0028665c;
        piVar10 = piVar10 + 1;
                    /* try { // try from 00286650 to 00386687 has its CatchHandler @ 00287040 */
      } while (*piVar10 == *piVar12);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
                    /* try { // try from 00286478 to 003864af has its CatchHandler @ 00287050 */
  pcVar9 = (char *)cv::String::allocate((String *)&local_d8,0x38);
  uVar8 = s_src_size____dst_size____src_chan_00463470._40_8_;
  uVar7 = s_src_size____dst_size____src_chan_00463470._32_8_;
  uVar6 = s_src_size____dst_size____src_chan_00463470._24_8_;
  uVar5 = s_src_size____dst_size____src_chan_00463470._16_8_;
  uVar4 = s_src_size____dst_size____src_chan_00463470._8_8_;
  uVar3 = s_src_size____dst_size____src_chan_00463470._0_8_;
  *(undefined8 *)(pcVar9 + 0x30) = s_src_size____dst_size____src_chan_00463470._48_8_;
                    /* try { // try from 002864b4 to 003864c3 has its CatchHandler @ 00287024 */
  *(undefined8 *)pcVar9 = uVar3;
  *(undefined8 *)(pcVar9 + 8) = uVar4;
  *(undefined8 *)(pcVar9 + 0x10) = uVar5;
  *(undefined8 *)(pcVar9 + 0x18) = uVar6;
  *(undefined8 *)(pcVar9 + 0x20) = uVar7;
  *(undefined8 *)(pcVar9 + 0x28) = uVar8;
  cv::error(-0xd7,(String *)&local_d8,"void cvConvertScale(const void*, void*, double, double)",
            "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x1845);
  cv::String::deallocate((String *)&local_d8);
LAB_002864d4:
                    /* try { // try from 002864d4 to 003864f3 has its CatchHandler @ 00287048 */
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_d0 = (Mat *)&local_60;
                    /* try { // try from 002864fc to 0038650b has its CatchHandler @ 00287010 */
  cv::Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_d8,local_60 & 0xfff,param_1,param_2);
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 00286518 to 0038655b has its CatchHandler @ 0028704c */
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
                    /* try { // try from 00286564 to 0038659b has its CatchHandler @ 00287048 */
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
                    /* try { // try from 00286604 to 00386647 has its CatchHandler @ 00287044 */
    }
  }
  local_88 = 0;
                    /* try { // try from 002865a0 to 003865af has its CatchHandler @ 00287020 */
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
                    /* try { // try from 002865c0 to 003865df has its CatchHandler @ 00287040 */
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
                    /* try { // try from 002865e8 to 003865f7 has its CatchHandler @ 0028700c */
  return;
}


==================================================================

### FUNC 0028670c (808 bytes) name=cvLUT

void cvLUT(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
          AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  char *pcVar14;
  int iVar15;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
                    /* try { // try from 0028670c to 0038672b has its CatchHandler @ 00287008 */
                    /* try { // try from 00286734 to 0038674b has its CatchHandler @ 00287004 */
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
                    /* try { // try from 00286764 to 00386777 has its CatchHandler @ 00287068 */
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
                    /* try { // try from 00286780 to 00386af7 has its CatchHandler @ 0028706c */
  if (((local_80[1] != local_e0[1]) || (*local_80 != *local_e0)) ||
     ((local_60 & 7) + (local_120 & 0xff8) != (local_c0 & 0xfff))) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_138,0x52);
    uVar13 = s_dst_size______src_size______dst__004634b0._72_8_;
    uVar12 = s_dst_size______src_size______dst__004634b0._64_8_;
    uVar11 = s_dst_size______src_size______dst__004634b0._56_8_;
    uVar10 = s_dst_size______src_size______dst__004634b0._48_8_;
    uVar9 = s_dst_size______src_size______dst__004634b0._40_8_;
    uVar8 = s_dst_size______src_size______dst__004634b0._32_8_;
    uVar7 = s_dst_size______src_size______dst__004634b0._24_8_;
    uVar6 = s_dst_size______src_size______dst__004634b0._16_8_;
    uVar5 = s_dst_size______src_size______dst__004634b0._8_8_;
    uVar4 = s_dst_size______src_size______dst__004634b0._0_8_;
    *(undefined2 *)(pcVar14 + 0x50) = s_dst_size______src_size______dst__004634b0._80_2_;
    *(undefined8 *)pcVar14 = uVar4;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    *(undefined8 *)(pcVar14 + 0x10) = uVar6;
    *(undefined8 *)(pcVar14 + 0x18) = uVar7;
    *(undefined8 *)(pcVar14 + 0x20) = uVar8;
    *(undefined8 *)(pcVar14 + 0x28) = uVar9;
    *(undefined8 *)(pcVar14 + 0x30) = uVar10;
    *(undefined8 *)(pcVar14 + 0x38) = uVar11;
    *(undefined8 *)(pcVar14 + 0x40) = uVar12;
    *(undefined8 *)(pcVar14 + 0x48) = uVar13;
    cv::error(-0xd7,(String *)&local_138,"void cvLUT(const void*, void*, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x184d);
    cv::String::deallocate((String *)&local_138);
  }
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  local_148 = (Mat *)&local_60;
  local_130 = (Mat *)&local_c0;
  cv::LUT((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar15 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar15 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar15 = 0;
    do {
      *local_20 = 0;
      iVar15 = iVar15 + 1;
      local_20 = local_20 + 1;
    } while (iVar15 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar15 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar15 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar15 = 0;
    do {
      *local_80 = 0;
      iVar15 = iVar15 + 1;
      local_80 = local_80 + 1;
    } while (iVar15 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar15 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar15 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar15 = 0;
    do {
      *local_e0 = 0;
      iVar15 = iVar15 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar15 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00286ac0 (1332 bytes) name=cvNormalize

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvNormalize(double param_1,double param_2,cv *param_3,cv *param_4,int param_5,cv *param_6,
                undefined8 param_7,AutoBuffer *param_8)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int iVar13;
  undefined4 local_1b0 [2];
  Mat *local_1a8;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  undefined8 local_180;
  undefined8 uStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
                    /* try { // try from 00286b0c to 00386b17 has its CatchHandler @ 00287064 */
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
                    /* try { // try from 00286b20 to 00386bcf has its CatchHandler @ 0028706c */
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
  local_138 = &local_130;
  local_140 = &uStack_178;
  local_170 = 0;
  uStack_168 = 0;
  uStack_128 = 0;
  local_130 = 0;
  local_160 = 0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  uStack_178 = _UNK_002870a8;
  local_180 = _DAT_002870a0;
  if (param_6 == (cv *)0x0) goto LAB_00286cf8;
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,param_8);
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar11 = local_d8;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
                    /* try { // try from 00286bec to 00386bf7 has its CatchHandler @ 0028705c */
  if (local_180._4_4_ < 1) {
LAB_00286c1c:
    if (2 < local_11c) goto LAB_00286f9c;
                    /* try { // try from 00286c34 to 00386d53 has its CatchHandler @ 0028706c */
    uStack_178 = local_118;
    local_180 = CONCAT44(local_11c,local_120);
    *local_138 = *local_d8;
    local_138[1] = puVar11[1];
  }
  else {
    iVar13 = 0;
    puVar12 = local_140;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar13 = iVar13 + 1;
                    /* try { // try from 00286c04 to 00386c2b has its CatchHandler @ 00287060 */
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar13 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_00286c1c;
LAB_00286f9c:
    local_180 = CONCAT44(local_180._4_4_,local_120);
                    /* try { // try from 00286fa0 to 0038707f has its CatchHandler @ 00286340 */
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
  }
  uStack_158 = uStack_f8;
  local_160 = local_100;
  lStack_148 = lStack_e8;
  local_150 = local_f0;
  uStack_168 = uStack_108;
  local_170 = local_110;
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00286cf8:
  if (((local_20[1] != local_80[1]) || (*local_20 != *local_80)) ||
     ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1)) {
    local_198 = 0;
    local_190 = (Mat *)0x0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_198,0x3c);
    uVar10 = DAT_00463540;
    uVar9 = _LAB_00463530;
    uVar8 = _LAB_00463528;
    uVar7 = DAT_00463520;
    uVar6 = DAT_00463518;
    uVar5 = DAT_00463510;
    uVar4 = DAT_00463508;
    puVar11[6] = DAT_00463538;
    *(undefined4 *)(puVar11 + 7) = uVar10;
                    /* try { // try from 00286d7c to 00386dc7 has its CatchHandler @ 00287018 */
    *puVar11 = uVar4;
    puVar11[1] = uVar5;
    puVar11[2] = uVar6;
    puVar11[3] = uVar7;
    puVar11[4] = uVar8;
    puVar11[5] = uVar9;
    cv::error(-0xd7,(String *)&local_198,
              "void cvNormalize(const CvArr*, CvArr*, double, double, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x1857);
    cv::String::deallocate((String *)&local_198);
  }
  local_188 = 0;
  local_184 = 0;
                    /* try { // try from 00286dcc to 00386ddb has its CatchHandler @ 00287000 */
  local_198 = CONCAT44(local_198._4_4_,0x3010000);
  local_1a0 = 0;
  local_19c = 0;
  local_1b0[0] = 0x1010000;
  local_110 = 0;
                    /* try { // try from 00286dec to 00386e0b has its CatchHandler @ 00287034 */
  local_120 = 0x1010000;
  local_1a8 = (Mat *)&local_c0;
  local_190 = (Mat *)&local_60;
  local_118 = (Mat *)&local_180;
  cv::normalize((_InputArray *)local_1b0,(_InputOutputArray *)&local_198,param_1,param_2,param_5,
                local_60 & 0xfff,(_InputArray *)&local_120);
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 00286e14 to 00386e23 has its CatchHandler @ 00286ff8 */
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
                    /* try { // try from 00286e30 to 00386e73 has its CatchHandler @ 00287038 */
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar13 = 0;
    puVar11 = local_140;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar13 = iVar13 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar13 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
                    /* try { // try from 00286e7c to 00386eb3 has its CatchHandler @ 00287034 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
                    /* try { // try from 00286eb8 to 00386ec7 has its CatchHandler @ 00286ffc */
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
                    /* try { // try from 00286ed8 to 00386ef7 has its CatchHandler @ 0028702c */
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 00286f00 to 00386f0f has its CatchHandler @ 00286ff4 */
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
                    /* try { // try from 00286f1c to 00386f5f has its CatchHandler @ 00287030 */
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
                    /* try { // try from 00286f68 to 00386f9f has its CatchHandler @ 0028702c */
  return;
}


==================================================================

### FUNC 002870b0 (216 bytes) name=~vector

/* std::vector<cv::Mat, std::allocator<cv::Mat> >::~vector() */

void __thiscall
std::vector<cv::Mat,std::allocator<cv::Mat>>::~vector(vector<cv::Mat,std::allocator<cv::Mat>> *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  Mat *this_00;
  Mat *pMVar6;
  
  this_00 = *(Mat **)this;
  pMVar6 = *(Mat **)(this + 8);
  if (this_00 != pMVar6) {
    do {
      if (*(long *)(this_00 + 0x38) != 0) {
        piVar1 = (int *)(*(long *)(this_00 + 0x38) + 0x14);
        do {
          iVar4 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar4 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar4 == 1) {
          cv::Mat::deallocate(this_00);
        }
      }
      *(undefined8 *)(this_00 + 0x38) = 0;
      *(undefined8 *)(this_00 + 0x10) = 0;
      *(undefined8 *)(this_00 + 0x28) = 0;
      *(undefined8 *)(this_00 + 0x20) = 0;
      *(undefined8 *)(this_00 + 0x18) = 0;
      if (0 < *(int *)(this_00 + 4)) {
        iVar4 = 0;
        puVar5 = *(undefined4 **)(this_00 + 0x40);
        do {
          *puVar5 = 0;
          iVar4 = iVar4 + 1;
          puVar5 = puVar5 + 1;
        } while (iVar4 < *(int *)(this_00 + 4));
      }
      if (*(Mat **)(this_00 + 0x48) != this_00 + 0x50) {
        cv::fastFree(*(Mat **)(this_00 + 0x48));
      }
      this_00 = this_00 + 0x60;
    } while (pMVar6 != this_00);
    pMVar6 = *(Mat **)this;
  }
  if (pMVar6 != (Mat *)0x0) {
    operator_delete(pMVar6);
    return;
  }
  return;
}


==================================================================

### FUNC 002871a4 (1136 bytes) name=split

/* cv::split(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::split(_InputArray *param_1,_OutputArray *param_2)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  Mat *pMVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  Mat *pMVar13;
  char cVar14;
  int iVar15;
  uint uVar16;
  long lVar17;
  char *pcVar18;
  int *piVar19;
  Mat *pMVar20;
  long lVar21;
  undefined4 *puVar22;
  int iVar23;
  uint uVar24;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  Mat *local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar20 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar20;
    local_5c = *(int *)(pMVar20 + 4);
    local_58 = *(int *)(pMVar20 + 8);
    local_54 = *(int *)(pMVar20 + 0xc);
    local_50 = *(long *)(pMVar20 + 0x10);
    local_48 = *(undefined8 *)(pMVar20 + 0x18);
    local_40 = *(undefined8 *)(pMVar20 + 0x20);
    local_38 = *(undefined8 *)(pMVar20 + 0x28);
    local_30 = *(undefined8 *)(pMVar20 + 0x30);
    local_28 = *(long *)(pMVar20 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar19 = (int *)(local_28 + 0x14);
      do {
        cVar14 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar4) {
          *piVar19 = *piVar19 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar20 + 0x48);
      local_8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar20);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (local_50 != 0) {
    if (local_5c < 3) {
      lVar17 = (long)local_54 * (long)local_58;
    }
    else {
      lVar21 = 0;
      lVar17 = 1;
      do {
        piVar19 = local_20 + lVar21;
        lVar21 = lVar21 + 1;
        lVar17 = lVar17 * *piVar19;
      } while ((int)lVar21 < local_5c);
    }
    if (lVar17 != 0) {
      cVar14 = _OutputArray::fixedType(param_2);
      if ((cVar14 == '\0') || (cVar14 = _InputArray::empty((_InputArray *)param_2), cVar14 != '\0'))
      {
LAB_0028722c:
        uVar24 = local_60 & 7;
      }
      else {
        uVar16 = _InputArray::type((_InputArray *)param_2,-1);
        uVar24 = local_60 & 7;
        if (uVar16 != uVar24) {
          local_88 = 0;
          local_80 = 0;
          pcVar18 = (char *)String::allocate((String *)&local_88,0x3a);
          uVar12 = s___mv_fixedType_______mv_empty_____00463548._56_2_;
          uVar11 = s___mv_fixedType_______mv_empty_____00463548._40_8_;
          uVar10 = s___mv_fixedType_______mv_empty_____00463548._32_8_;
          uVar9 = s___mv_fixedType_______mv_empty_____00463548._24_8_;
          uVar8 = s___mv_fixedType_______mv_empty_____00463548._16_8_;
          uVar7 = s___mv_fixedType_______mv_empty_____00463548._8_8_;
          uVar6 = s___mv_fixedType_______mv_empty_____00463548._0_8_;
          *(undefined8 *)(pcVar18 + 0x30) = s___mv_fixedType_______mv_empty_____00463548._48_8_;
          *(undefined2 *)(pcVar18 + 0x38) = uVar12;
          *(undefined8 *)pcVar18 = uVar6;
          *(undefined8 *)(pcVar18 + 8) = uVar7;
          *(undefined8 *)(pcVar18 + 0x10) = uVar8;
          *(undefined8 *)(pcVar18 + 0x18) = uVar9;
          *(undefined8 *)(pcVar18 + 0x20) = uVar10;
          *(undefined8 *)(pcVar18 + 0x28) = uVar11;
          error(-0xd7,(String *)&local_88,"void cv::split(cv::InputArray, cv::OutputArrayOfArrays)",
                "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x39d);
          String::deallocate((String *)&local_88);
          goto LAB_0028722c;
        }
      }
      iVar15 = (local_60 >> 3 & 0x1ff) + 1;
      iVar2 = local_20[1];
      iVar3 = *local_20;
      _OutputArray::create(param_2,iVar15,1,uVar24,-1,false,0);
      iVar23 = 0;
      do {
        local_78 = (Mat *)CONCAT44(iVar3,iVar2);
        _OutputArray::create(param_2,(vector *)&local_78,uVar24,iVar23,0,0);
        iVar23 = iVar23 + 1;
      } while (iVar23 != iVar15);
      local_78 = (Mat *)0x0;
      local_70 = (Mat *)0x0;
      local_68 = 0;
      _InputArray::getMatVector((_InputArray *)param_2,(vector *)&local_78);
      split((Mat *)&local_60,local_78);
      pMVar13 = local_70;
      pMVar5 = local_70;
      for (pMVar20 = local_78; pMVar20 != pMVar13; pMVar20 = pMVar20 + 0x60) {
        if (*(long *)(pMVar20 + 0x38) != 0) {
          piVar19 = (int *)(*(long *)(pMVar20 + 0x38) + 0x14);
          do {
            iVar15 = *piVar19;
            cVar14 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
            if (bVar4) {
              *piVar19 = iVar15 + -1;
              cVar14 = ExclusiveMonitorsStatus();
            }
          } while (cVar14 != '\0');
          if (iVar15 == 1) {
            Mat::deallocate(pMVar20);
          }
        }
        *(undefined8 *)(pMVar20 + 0x38) = 0;
        *(undefined8 *)(pMVar20 + 0x10) = 0;
        *(undefined8 *)(pMVar20 + 0x28) = 0;
        *(undefined8 *)(pMVar20 + 0x20) = 0;
        *(undefined8 *)(pMVar20 + 0x18) = 0;
        if (0 < *(int *)(pMVar20 + 4)) {
          iVar15 = 0;
          puVar22 = *(undefined4 **)(pMVar20 + 0x40);
          do {
            *puVar22 = 0;
            iVar15 = iVar15 + 1;
            puVar22 = puVar22 + 1;
          } while (iVar15 < *(int *)(pMVar20 + 4));
        }
        if (*(Mat **)(pMVar20 + 0x48) != pMVar20 + 0x50) {
          fastFree(*(Mat **)(pMVar20 + 0x48));
        }
        pMVar5 = local_78;
      }
      if (pMVar5 != (Mat *)0x0) {
        operator_delete(pMVar5);
      }
      if (local_28 != 0) {
        piVar19 = (int *)(local_28 + 0x14);
        do {
          iVar15 = *piVar19;
          cVar14 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
          if (bVar4) {
            *piVar19 = iVar15 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar15 == 1) {
          Mat::deallocate((Mat *)&local_60);
        }
      }
      if (0 < local_5c) {
        iVar15 = 0;
        piVar19 = local_20;
        do {
          *piVar19 = 0;
          iVar15 = iVar15 + 1;
          piVar19 = piVar19 + 1;
        } while (iVar15 < local_5c);
      }
      goto LAB_002873cc;
    }
  }
  _OutputArray::release(param_2);
  piVar19 = local_20;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar15 = *piVar1;
      cVar14 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_60);
      piVar19 = local_20;
    }
  }
  local_20 = piVar19;
  if (0 < local_5c) {
    iVar15 = 0;
    do {
      *piVar19 = 0;
      iVar15 = iVar15 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar15 < local_5c);
  }
LAB_002873cc:
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = 0;
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00287678 (268 bytes) name=merge

/* cv::merge(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::merge(_InputArray *param_1,_OutputArray *param_2)

{
  int *piVar1;
  Mat *pMVar2;
  char cVar3;
  bool bVar4;
  Mat *pMVar5;
  Mat *pMVar6;
  int iVar7;
  undefined4 *puVar8;
  Mat *local_18;
  Mat *local_10;
  undefined8 local_8;
  
  local_18 = (Mat *)0x0;
  local_10 = (Mat *)0x0;
  local_8 = 0;
  _InputArray::getMatVector(param_1,(vector *)&local_18);
  pMVar2 = local_18;
  if (local_18 == local_10) {
    pMVar2 = (Mat *)0x0;
  }
  merge(pMVar2,((long)local_10 - (long)local_18 >> 5) * -0x5555555555555555,param_2);
  pMVar6 = local_10;
  pMVar5 = local_10;
  for (pMVar2 = local_18; pMVar2 != pMVar6; pMVar2 = pMVar2 + 0x60) {
    if (*(long *)(pMVar2 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(pMVar2 + 0x38) + 0x14);
      do {
        iVar7 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar7 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate(pMVar2);
      }
    }
    *(undefined8 *)(pMVar2 + 0x38) = 0;
    *(undefined8 *)(pMVar2 + 0x10) = 0;
    *(undefined8 *)(pMVar2 + 0x28) = 0;
    *(undefined8 *)(pMVar2 + 0x20) = 0;
    *(undefined8 *)(pMVar2 + 0x18) = 0;
    if (0 < *(int *)(pMVar2 + 4)) {
      iVar7 = 0;
      puVar8 = *(undefined4 **)(pMVar2 + 0x40);
      do {
        *puVar8 = 0;
        iVar7 = iVar7 + 1;
        puVar8 = puVar8 + 1;
      } while (iVar7 < *(int *)(pMVar2 + 4));
    }
    if (*(Mat **)(pMVar2 + 0x48) != pMVar2 + 0x50) {
      fastFree(*(Mat **)(pMVar2 + 0x48));
    }
    pMVar5 = local_18;
  }
  if (pMVar5 != (Mat *)0x0) {
    operator_delete(pMVar5);
  }
  return;
}


==================================================================

### FUNC 002877c0 (2408 bytes) name=cvSplit

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvSplit(cv *param_1,long param_2,long param_3,long param_4,long param_5)

{
  int *piVar1;
  Mat *pMVar2;
  int iVar3;
  uint uVar4;
  char cVar5;
  bool bVar6;
  ulong uVar7;
  Mat *pMVar8;
  undefined2 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  Mat *pMVar14;
  int iVar15;
  undefined8 *puVar16;
  char *pcVar17;
  AutoBuffer *pAVar18;
  Mat *pMVar19;
  undefined4 *puVar20;
  ulong uVar21;
  int iVar22;
  int *piVar23;
  int iVar24;
  long lVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  byte bVar29;
  byte bVar30;
  byte bVar31;
  byte bVar32;
  byte bVar33;
  byte bVar34;
  long local_1d0;
  long lStack_1c8;
  long local_1c0;
  long lStack_1b8;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  Mat *local_158;
  Mat *local_150;
  Mat *local_148;
  long local_140 [4];
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  int local_bc;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_1d0 = param_4;
  lStack_1c8 = param_5;
  local_1c0 = param_2;
  lStack_1b8 = param_3;
  local_140[0] = param_2;
  local_140[1] = param_3;
  local_140[2] = param_4;
  local_140[3] = param_5;
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,(AutoBuffer *)&local_1d0);
  lVar27 = -(ulong)(local_140[0] == 0);
  lVar28 = -(ulong)(local_140[1] == 0);
  lVar25 = -(ulong)(local_140[2] == 0);
  lVar26 = -(ulong)(local_140[3] == 0);
  bVar29 = (byte)((ulong)_DAT_00288290 >> 8);
  bVar30 = (byte)((ulong)_DAT_00288290 >> 0x10);
  bVar31 = (byte)((ulong)_DAT_00288290 >> 0x18);
  bVar32 = (byte)((ulong)_UNK_00288298 >> 8);
  bVar33 = (byte)((ulong)_UNK_00288298 >> 0x10);
  bVar34 = (byte)((ulong)_UNK_00288298 >> 0x18);
  iVar24 = CONCAT13(bVar31 & ~(byte)((ulong)lVar27 >> 0x18),
                    CONCAT12(bVar30 & ~(byte)((ulong)lVar27 >> 0x10),
                             CONCAT11(bVar29 & ~(byte)((ulong)lVar27 >> 8),
                                      (byte)_DAT_00288290 & ~(byte)lVar27))) +
           CONCAT13(bVar34 & ~(byte)((ulong)lVar28 >> 0x18),
                    CONCAT12(bVar33 & ~(byte)((ulong)lVar28 >> 0x10),
                             CONCAT11(bVar32 & ~(byte)((ulong)lVar28 >> 8),
                                      (byte)_UNK_00288298 & ~(byte)lVar28))) +
           CONCAT13(bVar31 & ~(byte)((ulong)lVar25 >> 0x18),
                    CONCAT12(bVar30 & ~(byte)((ulong)lVar25 >> 0x10),
                             CONCAT11(bVar29 & ~(byte)((ulong)lVar25 >> 8),
                                      (byte)_DAT_00288290 & ~(byte)lVar25))) +
           CONCAT13(bVar34 & ~(byte)((ulong)lVar26 >> 0x18),
                    CONCAT12(bVar33 & ~(byte)((ulong)lVar26 >> 0x10),
                             CONCAT11(bVar32 & ~(byte)((ulong)lVar26 >> 8),
                                      (byte)_UNK_00288298 & ~(byte)lVar26)));
  if (iVar24 == 0) {
    local_1a8 = 0;
    local_1a0 = 0;
    puVar20 = (undefined4 *)cv::String::allocate((String *)&local_1a8,6);
    uVar9 = DAT_0046358c;
    *puVar20 = DAT_00463588;
    *(undefined2 *)(puVar20 + 1) = uVar9;
    cv::error(-0xd7,(String *)&local_1a8,"void cvSplit(const void*, void*, void*, void*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17e8);
    cv::String::deallocate((String *)&local_1a8);
  }
  local_100 = 0;
  local_d8 = &local_d0;
  local_e0 = &uStack_118;
  local_158 = (Mat *)0x0;
  uVar21 = (ulong)iVar24;
  uStack_c8 = 0;
  local_d0 = 0;
  local_150 = (Mat *)0x0;
  local_f8 = 0;
  local_110 = 0;
  local_108 = 0;
  local_148 = (Mat *)0x0;
  uStack_118 = _UNK_002882a8;
  local_120 = _DAT_002882a0;
  local_f0 = 0;
  local_e8 = 0;
  if (iVar24 == 0) {
    local_148 = (Mat *)0x0;
    local_150 = (Mat *)0x0;
  }
  else {
    pMVar19 = operator_new(uVar21 * 0x60);
    local_148 = pMVar19 + uVar21 * 0x60;
    local_158 = pMVar19;
    local_150 = pMVar19;
    lVar25 = local_e8;
    for (uVar7 = uVar21; uVar7 != 0; uVar7 = uVar7 - 1) {
      if (pMVar19 != (Mat *)0x0) {
        *(undefined4 *)pMVar19 = (undefined4)local_120;
        local_120._4_4_ = (int)((ulong)local_120 >> 0x20);
        *(int *)(pMVar19 + 4) = local_120._4_4_;
        *(undefined4 *)(pMVar19 + 8) = (undefined4)uStack_118;
        uStack_118._4_4_ = (undefined4)((ulong)uStack_118 >> 0x20);
        *(undefined8 *)(pMVar19 + 0x10) = local_110;
        *(undefined4 *)(pMVar19 + 0xc) = uStack_118._4_4_;
        *(undefined8 *)(pMVar19 + 0x18) = local_108;
        *(undefined8 *)(pMVar19 + 0x20) = local_100;
        *(undefined8 *)(pMVar19 + 0x28) = local_f8;
        *(undefined8 *)(pMVar19 + 0x30) = local_f0;
        *(long *)(pMVar19 + 0x38) = lVar25;
        *(Mat **)(pMVar19 + 0x40) = pMVar19 + 8;
        *(Mat **)(pMVar19 + 0x48) = pMVar19 + 0x50;
        *(undefined8 *)(pMVar19 + 0x58) = 0;
        *(undefined8 *)(pMVar19 + 0x50) = 0;
        if (lVar25 != 0) {
          piVar23 = (int *)(lVar25 + 0x14);
          do {
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar23,0x10);
            if (bVar6) {
              *piVar23 = *piVar23 + 1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
        }
        if (local_120._4_4_ < 3) {
          puVar16 = *(undefined8 **)(pMVar19 + 0x48);
          *puVar16 = *local_d8;
          puVar16[1] = local_d8[1];
          lVar25 = local_e8;
        }
        else {
          *(undefined4 *)(pMVar19 + 4) = 0;
          cv::Mat::copySize(pMVar19,(Mat *)&local_120);
          lVar25 = local_e8;
        }
      }
      pMVar19 = pMVar19 + 0x60;
    }
    local_150 = local_148;
    if (lVar25 != 0) {
      piVar23 = (int *)(lVar25 + 0x14);
      do {
        iVar15 = *piVar23;
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar23,0x10);
        if (bVar6) {
          *piVar23 = iVar15 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar15 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_120._4_4_) {
    iVar15 = 0;
    puVar16 = local_e0;
    do {
      *(undefined4 *)puVar16 = 0;
      iVar15 = iVar15 + 1;
      puVar16 = (undefined8 *)((long)puVar16 + 4);
    } while (iVar15 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  lVar25 = (long)(iVar24 * 2);
  if (iVar24 * 2 == 0) {
    piVar23 = (int *)0x0;
  }
  else {
    piVar23 = operator_new(lVar25 << 2);
  }
  if (lVar25 != 0) {
    memset(piVar23,0,lVar25 << 2);
  }
  lVar25 = 0;
  iVar15 = 0;
  do {
    pMVar19 = local_158;
    if ((cv *)local_140[lVar25] != (cv *)0x0) {
      lVar26 = (long)iVar15 * 0x60;
      pMVar2 = local_158 + lVar26;
      cv::cvarrToMat((cv *)local_140[lVar25],(void *)0x0,true,false,0,(AutoBuffer *)local_158);
      if (pMVar2 != (Mat *)&local_c0) {
        if (lStack_88 != 0) {
          piVar1 = (int *)(lStack_88 + 0x14);
          do {
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar6) {
              *piVar1 = *piVar1 + 1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
        }
        if (*(long *)(pMVar2 + 0x38) == 0) {
LAB_00287a14:
          *(undefined8 *)(pMVar2 + 0x38) = 0;
          *(undefined8 *)(pMVar2 + 0x10) = 0;
          *(undefined8 *)(pMVar2 + 0x28) = 0;
          *(undefined8 *)(pMVar2 + 0x20) = 0;
          *(undefined8 *)(pMVar2 + 0x18) = 0;
          if (0 < *(int *)(pMVar2 + 4)) goto LAB_00287a34;
LAB_00287f3c:
          *(undefined4 *)(pMVar19 + lVar26) = local_c0;
LAB_00287a64:
          if (2 < local_bc) goto LAB_00287e30;
          *(int *)(pMVar2 + 4) = local_bc;
          *(undefined4 *)(pMVar2 + 8) = (undefined4)local_b8;
          puVar16 = *(undefined8 **)(pMVar2 + 0x48);
          *(undefined4 *)(pMVar2 + 0xc) = local_b8._4_4_;
          *puVar16 = *local_78;
          puVar16[1] = local_78[1];
        }
        else {
          piVar1 = (int *)(*(long *)(pMVar2 + 0x38) + 0x14);
          do {
            iVar22 = *piVar1;
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar6) {
              *piVar1 = iVar22 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar22 != 1) goto LAB_00287a14;
          cv::Mat::deallocate(pMVar2);
          *(undefined8 *)(pMVar2 + 0x38) = 0;
          *(undefined8 *)(pMVar2 + 0x10) = 0;
          *(undefined8 *)(pMVar2 + 0x28) = 0;
          *(undefined8 *)(pMVar2 + 0x20) = 0;
          *(undefined8 *)(pMVar2 + 0x18) = 0;
          if (*(int *)(pMVar2 + 4) < 1) goto LAB_00287f3c;
LAB_00287a34:
          iVar22 = 0;
          puVar20 = *(undefined4 **)(pMVar2 + 0x40);
          do {
            *puVar20 = 0;
            iVar22 = iVar22 + 1;
            iVar3 = *(int *)(pMVar2 + 4);
            puVar20 = puVar20 + 1;
          } while (iVar22 < iVar3);
          *(undefined4 *)(pMVar19 + lVar26) = local_c0;
          if (iVar3 < 3) goto LAB_00287a64;
LAB_00287e30:
          cv::Mat::copySize(pMVar2,(Mat *)&local_c0);
        }
        *(undefined8 *)(pMVar2 + 0x18) = uStack_a8;
        *(undefined8 *)(pMVar2 + 0x10) = local_b0;
        *(undefined8 *)(pMVar2 + 0x28) = uStack_98;
        *(undefined8 *)(pMVar2 + 0x20) = local_a0;
        *(long *)(pMVar2 + 0x38) = lStack_88;
        *(undefined8 *)(pMVar2 + 0x30) = local_90;
      }
      if (lStack_88 != 0) {
        piVar1 = (int *)(lStack_88 + 0x14);
        do {
          iVar22 = *piVar1;
          cVar5 = '\x01';
          bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar6) {
            *piVar1 = iVar22 + -1;
            cVar5 = ExclusiveMonitorsStatus();
          }
        } while (cVar5 != '\0');
        if (iVar22 == 1) {
          cv::Mat::deallocate((Mat *)&local_c0);
        }
      }
      lStack_88 = 0;
      local_b0 = 0;
      uStack_98 = 0;
      local_a0 = 0;
      uStack_a8 = 0;
      if (0 < local_bc) {
        iVar22 = 0;
        puVar20 = local_80;
        do {
          *puVar20 = 0;
          iVar22 = iVar22 + 1;
          puVar20 = puVar20 + 1;
        } while (iVar22 < local_bc);
      }
      if (local_78 != auStack_70) {
        cv::fastFree(local_78);
      }
      pAVar18 = (AutoBuffer *)(local_158 + lVar26);
      if (((*(int **)(pAVar18 + 0x40))[1] != local_20[1]) ||
         (**(int **)(pAVar18 + 0x40) != *local_20)) {
        local_198 = 0;
        local_190 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_198,0x1c);
        uVar12 = s_dvec_j__size______src_size___00463590._16_8_;
        uVar11 = s_dvec_j__size______src_size___00463590._8_8_;
        uVar10 = s_dvec_j__size______src_size___00463590._0_8_;
        *(undefined4 *)(pcVar17 + 0x18) = s_dvec_j__size______src_size___00463590._24_4_;
        *(undefined8 *)(pcVar17 + 0x10) = uVar12;
        *(undefined8 *)pcVar17 = uVar10;
        *(undefined8 *)(pcVar17 + 8) = uVar11;
        cv::error(-0xd7,(String *)&local_198,"void cvSplit(const void*, void*, void*, void*, void*)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17f1);
        cv::String::deallocate((String *)&local_198);
        pAVar18 = (AutoBuffer *)(local_158 + lVar26);
      }
      uVar4 = *(uint *)pAVar18;
      if ((uVar4 & 7) != (local_60 & 7)) {
        local_188 = 0;
        local_180 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_188,0x1e);
        uVar9 = s_dvec_j__depth______src_depth___004635b0._28_2_;
        uVar13 = s_dvec_j__depth______src_depth___004635b0._24_4_;
        uVar11 = s_dvec_j__depth______src_depth___004635b0._8_8_;
        uVar10 = s_dvec_j__depth______src_depth___004635b0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_dvec_j__depth______src_depth___004635b0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar13;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar9;
        *(undefined8 *)pcVar17 = uVar10;
        *(undefined8 *)(pcVar17 + 8) = uVar11;
        cv::error(-0xd7,(String *)&local_188,"void cvSplit(const void*, void*, void*, void*, void*)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17f2);
        cv::String::deallocate((String *)&local_188);
        uVar4 = *(uint *)(local_158 + lVar26);
      }
      if ((uVar4 >> 3 & 0x1ff) != 0) {
        local_178 = 0;
        local_170 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_178,0x17);
        cVar5 = s_dvec_j__channels______1_004635d0[0x16];
        uVar9 = s_dvec_j__channels______1_004635d0._20_2_;
        uVar11 = s_dvec_j__channels______1_004635d0._8_8_;
        uVar10 = s_dvec_j__channels______1_004635d0._0_8_;
        *(undefined4 *)(pcVar17 + 0x10) = s_dvec_j__channels______1_004635d0._16_4_;
        *(undefined2 *)(pcVar17 + 0x14) = uVar9;
        pcVar17[0x16] = cVar5;
        *(undefined8 *)pcVar17 = uVar10;
        *(undefined8 *)(pcVar17 + 8) = uVar11;
        cv::error(-0xd7,(String *)&local_178,"void cvSplit(const void*, void*, void*, void*, void*)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17f3);
        cv::String::deallocate((String *)&local_178);
      }
      if ((int)(local_60 >> 3 & 0x1ff) < (int)lVar25) {
        local_168 = 0;
        local_160 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_168,0x12);
        uVar11 = s_i_<_src_channels()_004635e8._8_8_;
        uVar10 = s_i_<_src_channels()_004635e8._0_8_;
        *(undefined2 *)(pcVar17 + 0x10) = s_i_<_src_channels()_004635e8._16_2_;
        *(undefined8 *)pcVar17 = uVar10;
        *(undefined8 *)(pcVar17 + 8) = uVar11;
        cv::error(-0xd7,(String *)&local_168,"void cvSplit(const void*, void*, void*, void*, void*)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x17f4);
        cv::String::deallocate((String *)&local_168);
      }
      piVar23[iVar15 * 2] = (int)lVar25;
      piVar23[iVar15 * 2 + 1] = iVar15;
      iVar15 = iVar15 + 1;
    }
    lVar25 = lVar25 + 1;
    if (lVar25 == 4) {
      if ((local_60 >> 3 & 0x1ff) + 1 == iVar24) {
        local_120 = CONCAT44(local_120._4_4_,0x1010000);
        local_110 = 0;
        local_b0 = 0;
        local_c0 = 0x2050000;
        uStack_118 = (Mat *)&local_60;
        local_b8 = &local_158;
        cv::split((_InputArray *)&local_120,(_OutputArray *)&local_c0);
      }
      else {
        cv::mixChannels((Mat *)&local_60,1,local_158,uVar21,piVar23,uVar21);
      }
      pMVar19 = local_158;
      pMVar2 = local_150;
      pMVar8 = local_150;
      if (piVar23 != (int *)0x0) {
        operator_delete(piVar23);
        pMVar19 = local_158;
        pMVar2 = local_150;
        pMVar8 = local_150;
      }
      for (; pMVar14 = local_150, pMVar19 != local_150; pMVar19 = pMVar19 + 0x60) {
        local_150 = pMVar8;
        if (*(long *)(pMVar19 + 0x38) != 0) {
          piVar23 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
          do {
            iVar24 = *piVar23;
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar23,0x10);
            if (bVar6) {
              *piVar23 = iVar24 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar24 == 1) {
            cv::Mat::deallocate(pMVar19);
          }
        }
        *(undefined8 *)(pMVar19 + 0x38) = 0;
        *(undefined8 *)(pMVar19 + 0x10) = 0;
        *(undefined8 *)(pMVar19 + 0x28) = 0;
        *(undefined8 *)(pMVar19 + 0x20) = 0;
        *(undefined8 *)(pMVar19 + 0x18) = 0;
        if (0 < *(int *)(pMVar19 + 4)) {
          iVar24 = 0;
          puVar20 = *(undefined4 **)(pMVar19 + 0x40);
          do {
            *puVar20 = 0;
            iVar24 = iVar24 + 1;
            puVar20 = puVar20 + 1;
          } while (iVar24 < *(int *)(pMVar19 + 4));
        }
        if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
          cv::fastFree(*(Mat **)(pMVar19 + 0x48));
        }
        pMVar2 = local_158;
        pMVar8 = local_150;
        local_150 = pMVar14;
      }
      local_150 = pMVar8;
      if (pMVar2 != (Mat *)0x0) {
        operator_delete(pMVar2);
      }
      if (local_28 != 0) {
        piVar23 = (int *)(local_28 + 0x14);
        do {
          iVar24 = *piVar23;
          cVar5 = '\x01';
          bVar6 = (bool)ExclusiveMonitorPass(piVar23,0x10);
          if (bVar6) {
            *piVar23 = iVar24 + -1;
            cVar5 = ExclusiveMonitorsStatus();
          }
        } while (cVar5 != '\0');
        if (iVar24 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar24 = 0;
        do {
          *local_20 = 0;
          iVar24 = iVar24 + 1;
          local_20 = local_20 + 1;
        } while (iVar24 < local_5c);
      }
      if (local_18 != auStack_10) {
        cv::fastFree(local_18);
      }
      return;
    }
  } while( true );
}


==================================================================

### FUNC 002882b0 (2156 bytes) name=cvMerge

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMerge(long param_1,long param_2,long param_3,long param_4,cv *param_5)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  ulong uVar5;
  Mat *pMVar6;
  Mat *pMVar7;
  ushort uVar8;
  AutoBuffer *pAVar9;
  Mat *pMVar10;
  int iVar11;
  undefined8 *puVar12;
  int *piVar13;
  void *__dest;
  Mat *pMVar14;
  undefined4 *puVar15;
  int *piVar16;
  ulong uVar17;
  int iVar18;
  AutoBuffer *pAVar19;
  int *piVar20;
  int iVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  byte bVar26;
  byte bVar27;
  byte bVar28;
  byte bVar29;
  byte bVar30;
  byte bVar31;
  long local_1a0;
  long lStack_198;
  long local_190;
  long lStack_188;
  undefined8 local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  AutoBuffer *local_158;
  Mat *local_150;
  Mat *local_148;
  long local_140 [4];
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  int local_bc;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  pAVar19 = (AutoBuffer *)&local_1a0;
  local_1a0 = param_3;
  lStack_198 = param_4;
  local_190 = param_1;
  lStack_188 = param_2;
  local_140[0] = param_1;
  local_140[1] = param_2;
  local_140[2] = param_3;
  local_140[3] = param_4;
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,(AutoBuffer *)&local_1a0);
  lVar24 = -(ulong)(local_140[0] == 0);
  lVar25 = -(ulong)(local_140[1] == 0);
  lVar22 = -(ulong)(local_140[2] == 0);
  lVar23 = -(ulong)(local_140[3] == 0);
  bVar26 = (byte)((ulong)_DAT_00288c50 >> 8);
  bVar27 = (byte)((ulong)_DAT_00288c50 >> 0x10);
  bVar28 = (byte)((ulong)_DAT_00288c50 >> 0x18);
  bVar29 = (byte)((ulong)_UNK_00288c58 >> 8);
  bVar30 = (byte)((ulong)_UNK_00288c58 >> 0x10);
  bVar31 = (byte)((ulong)_UNK_00288c58 >> 0x18);
  iVar21 = CONCAT13(bVar28 & ~(byte)((ulong)lVar24 >> 0x18),
                    CONCAT12(bVar27 & ~(byte)((ulong)lVar24 >> 0x10),
                             CONCAT11(bVar26 & ~(byte)((ulong)lVar24 >> 8),
                                      (byte)_DAT_00288c50 & ~(byte)lVar24))) +
           CONCAT13(bVar31 & ~(byte)((ulong)lVar25 >> 0x18),
                    CONCAT12(bVar30 & ~(byte)((ulong)lVar25 >> 0x10),
                             CONCAT11(bVar29 & ~(byte)((ulong)lVar25 >> 8),
                                      (byte)_UNK_00288c58 & ~(byte)lVar25))) +
           CONCAT13(bVar28 & ~(byte)((ulong)lVar22 >> 0x18),
                    CONCAT12(bVar27 & ~(byte)((ulong)lVar22 >> 0x10),
                             CONCAT11(bVar26 & ~(byte)((ulong)lVar22 >> 8),
                                      (byte)_DAT_00288c50 & ~(byte)lVar22))) +
           CONCAT13(bVar31 & ~(byte)((ulong)lVar23 >> 0x18),
                    CONCAT12(bVar30 & ~(byte)((ulong)lVar23 >> 0x10),
                             CONCAT11(bVar29 & ~(byte)((ulong)lVar23 >> 8),
                                      (byte)_UNK_00288c58 & ~(byte)lVar23)));
  if (iVar21 == 0) {
    local_178 = 0;
    local_170 = 0;
    puVar15 = (undefined4 *)cv::String::allocate((String *)&local_178,6);
    uVar8 = DAT_0046358c;
    pAVar19 = (AutoBuffer *)(ulong)DAT_0046358c;
    *puVar15 = DAT_00463588;
    *(ushort *)(puVar15 + 1) = uVar8;
    cv::error(-0xd7,(String *)&local_178,
              "void cvMerge(const void*, const void*, const void*, const void*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x180c);
    cv::String::deallocate((String *)&local_178);
  }
  local_100 = 0;
  local_d8 = &local_d0;
  local_e0 = &uStack_118;
  local_158 = (AutoBuffer *)0x0;
  uVar17 = (ulong)iVar21;
  uStack_c8 = 0;
  local_d0 = 0;
  local_150 = (Mat *)0x0;
  local_f8 = 0;
  local_110 = 0;
  local_108 = 0;
  local_148 = (Mat *)0x0;
  uStack_118 = _UNK_00288c68;
  local_120 = _DAT_00288c60;
  local_f0 = 0;
  local_e8 = 0;
  if (iVar21 == 0) {
    local_148 = (Mat *)0x0;
    local_150 = (Mat *)0x0;
  }
  else {
    pMVar14 = operator_new(uVar17 * 0x60);
    local_148 = pMVar14 + uVar17 * 0x60;
    local_158 = (AutoBuffer *)pMVar14;
    local_150 = pMVar14;
    lVar22 = local_e8;
    for (uVar5 = uVar17; uVar5 != 0; uVar5 = uVar5 - 1) {
      if (pMVar14 != (Mat *)0x0) {
        *(undefined4 *)pMVar14 = (undefined4)local_120;
        local_120._4_4_ = (int)((ulong)local_120 >> 0x20);
        *(int *)(pMVar14 + 4) = local_120._4_4_;
        *(undefined4 *)(pMVar14 + 8) = (undefined4)uStack_118;
        uStack_118._4_4_ = (undefined4)((ulong)uStack_118 >> 0x20);
        *(undefined8 *)(pMVar14 + 0x10) = local_110;
        *(undefined4 *)(pMVar14 + 0xc) = uStack_118._4_4_;
        *(undefined8 *)(pMVar14 + 0x18) = local_108;
        *(undefined8 *)(pMVar14 + 0x20) = local_100;
        *(undefined8 *)(pMVar14 + 0x28) = local_f8;
        *(undefined8 *)(pMVar14 + 0x30) = local_f0;
        *(long *)(pMVar14 + 0x38) = lVar22;
        *(Mat **)(pMVar14 + 0x40) = pMVar14 + 8;
        *(Mat **)(pMVar14 + 0x48) = pMVar14 + 0x50;
        *(undefined8 *)(pMVar14 + 0x58) = 0;
        *(undefined8 *)(pMVar14 + 0x50) = 0;
        if (lVar22 != 0) {
          piVar20 = (int *)(lVar22 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
            if (bVar4) {
              *piVar20 = *piVar20 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (local_120._4_4_ < 3) {
          puVar12 = *(undefined8 **)(pMVar14 + 0x48);
          *puVar12 = *local_d8;
          puVar12[1] = local_d8[1];
          lVar22 = local_e8;
        }
        else {
          *(undefined4 *)(pMVar14 + 4) = 0;
          cv::Mat::copySize(pMVar14,(Mat *)&local_120);
          lVar22 = local_e8;
        }
      }
      pMVar14 = pMVar14 + 0x60;
    }
    local_150 = local_148;
    if (lVar22 != 0) {
      piVar20 = (int *)(lVar22 + 0x14);
      do {
        iVar11 = *piVar20;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar4) {
          *piVar20 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_120._4_4_) {
    iVar11 = 0;
    puVar12 = local_e0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar11 = iVar11 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar11 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  lVar22 = (long)(iVar21 * 2);
  if (iVar21 * 2 == 0) {
    piVar20 = (int *)0x0;
  }
  else {
    piVar20 = operator_new(lVar22 << 2);
  }
  if (lVar22 != 0) {
    memset(piVar20,0,lVar22 << 2);
  }
  lVar22 = 0;
  iVar11 = 0;
  do {
    pAVar9 = local_158;
    if ((cv *)local_140[lVar22] != (cv *)0x0) {
      lVar23 = (long)iVar11 * 0x60;
      pMVar14 = (Mat *)(local_158 + lVar23);
      cv::cvarrToMat((cv *)local_140[lVar22],(void *)0x0,true,false,0,pAVar19);
      if (pMVar14 != (Mat *)&local_c0) {
        if (lStack_88 != 0) {
          piVar13 = (int *)(lStack_88 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar13,0x10);
            if (bVar4) {
              *piVar13 = *piVar13 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (*(long *)(pMVar14 + 0x38) == 0) {
LAB_00288504:
          *(undefined8 *)(pMVar14 + 0x38) = 0;
          *(undefined8 *)(pMVar14 + 0x10) = 0;
          *(undefined8 *)(pMVar14 + 0x28) = 0;
          *(undefined8 *)(pMVar14 + 0x20) = 0;
          *(undefined8 *)(pMVar14 + 0x18) = 0;
          if (0 < *(int *)(pMVar14 + 4)) goto LAB_00288524;
LAB_00288910:
          *(undefined4 *)(pAVar9 + lVar23) = local_c0;
LAB_00288550:
          if (2 < local_bc) goto LAB_00288850;
          *(int *)(pMVar14 + 4) = local_bc;
          *(undefined4 *)(pMVar14 + 8) = (undefined4)local_b8;
          puVar12 = *(undefined8 **)(pMVar14 + 0x48);
          *(undefined4 *)(pMVar14 + 0xc) = local_b8._4_4_;
          *puVar12 = *local_78;
          puVar12[1] = local_78[1];
        }
        else {
          piVar13 = (int *)(*(long *)(pMVar14 + 0x38) + 0x14);
          do {
            iVar18 = *piVar13;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar13,0x10);
            if (bVar4) {
              *piVar13 = iVar18 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar18 != 1) goto LAB_00288504;
          cv::Mat::deallocate(pMVar14);
          *(undefined8 *)(pMVar14 + 0x38) = 0;
          *(undefined8 *)(pMVar14 + 0x10) = 0;
          *(undefined8 *)(pMVar14 + 0x28) = 0;
          *(undefined8 *)(pMVar14 + 0x20) = 0;
          *(undefined8 *)(pMVar14 + 0x18) = 0;
          if (*(int *)(pMVar14 + 4) < 1) goto LAB_00288910;
LAB_00288524:
          iVar18 = 0;
          puVar15 = *(undefined4 **)(pMVar14 + 0x40);
          do {
            *puVar15 = 0;
            iVar18 = iVar18 + 1;
            iVar2 = *(int *)(pMVar14 + 4);
            puVar15 = puVar15 + 1;
          } while (iVar18 < iVar2);
          *(undefined4 *)(pAVar9 + lVar23) = local_c0;
          if (iVar2 < 3) goto LAB_00288550;
LAB_00288850:
          cv::Mat::copySize(pMVar14,(Mat *)&local_c0);
        }
        *(undefined8 *)(pMVar14 + 0x18) = uStack_a8;
        *(undefined8 *)(pMVar14 + 0x10) = local_b0;
        *(undefined8 *)(pMVar14 + 0x28) = uStack_98;
        *(undefined8 *)(pMVar14 + 0x20) = local_a0;
        *(long *)(pMVar14 + 0x38) = lStack_88;
        *(undefined8 *)(pMVar14 + 0x30) = local_90;
      }
      if (lStack_88 != 0) {
        piVar13 = (int *)(lStack_88 + 0x14);
        do {
          iVar18 = *piVar13;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar4) {
            *piVar13 = iVar18 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar18 == 1) {
          cv::Mat::deallocate((Mat *)&local_c0);
        }
      }
      lStack_88 = 0;
      local_b0 = 0;
      uStack_98 = 0;
      local_a0 = 0;
      uStack_a8 = 0;
      if (0 < local_bc) {
        iVar18 = 0;
        puVar15 = local_80;
        do {
          *puVar15 = 0;
          iVar18 = iVar18 + 1;
          puVar15 = puVar15 + 1;
        } while (iVar18 < local_bc);
      }
      if (local_78 != auStack_70) {
        cv::fastFree(local_78);
      }
      piVar13 = *(int **)(local_158 + lVar23 + 0x40);
      iVar18 = piVar13[-1];
      pAVar19 = local_158;
      if (iVar18 == local_20[-1]) {
        if (iVar18 == 2) {
          if ((*piVar13 == *local_20) && (piVar13[1] == local_20[1])) goto LAB_002888a8;
          goto LAB_0028864c;
        }
        if (0 < iVar18) {
          if (*piVar13 == *local_20) {
            piVar1 = piVar13 + (iVar18 - 1);
            piVar16 = local_20;
            do {
              piVar16 = piVar16 + 1;
              if (piVar13 == piVar1) goto LAB_002888a8;
              piVar13 = piVar13 + 1;
            } while (*piVar13 == *piVar16);
          }
          goto LAB_0028864c;
        }
LAB_002888a8:
        if ((((*(uint *)(local_158 + lVar23) & 7) != (local_60 & 7)) ||
            ((*(uint *)(local_158 + lVar23) >> 3 & 0x1ff) != 0)) ||
           ((int)(local_60 >> 3 & 0x1ff) < (int)lVar22)) goto LAB_0028864c;
      }
      else {
LAB_0028864c:
        local_168 = 0;
        local_160 = 0;
        __dest = (void *)cv::String::allocate((String *)&local_168,0x6b);
        memcpy(__dest,&DAT_00463600,0x6b);
        cv::error(-0xd7,(String *)&local_168,
                  "void cvMerge(const void*, const void*, const void*, const void*, void*)",
                  "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x1817);
        cv::String::deallocate((String *)&local_168);
      }
      iVar18 = iVar11 * 2;
      piVar20[iVar18] = iVar11;
      iVar11 = iVar11 + 1;
      piVar20[iVar18 + 1] = (int)lVar22;
    }
    lVar22 = lVar22 + 1;
    if (lVar22 == 4) {
      if ((local_60 >> 3 & 0x1ff) + 1 == iVar21) {
        local_120 = CONCAT44(local_120._4_4_,0x1050000);
        local_110 = 0;
        local_b0 = 0;
        local_c0 = 0x2010000;
        uStack_118 = &local_158;
        local_b8 = (Mat *)&local_60;
        cv::merge((_InputArray *)&local_120,(_OutputArray *)&local_c0);
      }
      else {
        cv::mixChannels((Mat *)local_158,uVar17,(Mat *)&local_60,1,piVar20,uVar17);
      }
      pMVar14 = (Mat *)local_158;
      pMVar6 = local_150;
      pMVar7 = local_150;
      if (piVar20 != (int *)0x0) {
        operator_delete(piVar20);
        pMVar14 = (Mat *)local_158;
        pMVar6 = local_150;
        pMVar7 = local_150;
      }
      for (; pMVar10 = local_150, pMVar14 != local_150; pMVar14 = pMVar14 + 0x60) {
        local_150 = pMVar7;
        if (*(long *)(pMVar14 + 0x38) != 0) {
          piVar20 = (int *)(*(long *)(pMVar14 + 0x38) + 0x14);
          do {
            iVar21 = *piVar20;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
            if (bVar4) {
              *piVar20 = iVar21 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar21 == 1) {
            cv::Mat::deallocate(pMVar14);
          }
        }
        *(undefined8 *)(pMVar14 + 0x38) = 0;
        *(undefined8 *)(pMVar14 + 0x10) = 0;
        *(undefined8 *)(pMVar14 + 0x28) = 0;
        *(undefined8 *)(pMVar14 + 0x20) = 0;
        *(undefined8 *)(pMVar14 + 0x18) = 0;
        if (0 < *(int *)(pMVar14 + 4)) {
          iVar21 = 0;
          puVar15 = *(undefined4 **)(pMVar14 + 0x40);
          do {
            *puVar15 = 0;
            iVar21 = iVar21 + 1;
            puVar15 = puVar15 + 1;
          } while (iVar21 < *(int *)(pMVar14 + 4));
        }
        if (*(Mat **)(pMVar14 + 0x48) != pMVar14 + 0x50) {
          cv::fastFree(*(Mat **)(pMVar14 + 0x48));
        }
        pMVar6 = (Mat *)local_158;
        pMVar7 = local_150;
        local_150 = pMVar10;
      }
      local_150 = pMVar7;
      if (pMVar6 != (Mat *)0x0) {
        operator_delete(pMVar6);
      }
      if (local_28 != 0) {
        piVar20 = (int *)(local_28 + 0x14);
        do {
          iVar21 = *piVar20;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar20,0x10);
          if (bVar4) {
            *piVar20 = iVar21 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar21 == 1) {
          cv::Mat::deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar21 = 0;
        do {
          *local_20 = 0;
          iVar21 = iVar21 + 1;
          local_20 = local_20 + 1;
        } while (iVar21 < local_5c);
      }
      if (local_18 != auStack_10) {
        cv::fastFree(local_18);
      }
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00288c70 (392 bytes) name=FUN_00288c70

void FUN_00288c70(long *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  Mat *pMVar4;
  Mat *pMVar5;
  undefined4 *puVar6;
  int iVar7;
  Mat *pMVar8;
  Mat *pMVar9;
  
  pMVar9 = (Mat *)(param_1 + 2);
  pMVar5 = (Mat *)*param_1;
  if (pMVar5 != pMVar9) {
    if (pMVar5 != (Mat *)0x0) {
      pMVar8 = pMVar5 + *(long *)(pMVar5 + -8) * 0x60;
      pMVar4 = pMVar8;
      if (pMVar5 != pMVar8) {
        do {
          pMVar8 = pMVar4 + -0x60;
          if (*(long *)(pMVar4 + -0x28) != 0) {
            piVar1 = (int *)(*(long *)(pMVar4 + -0x28) + 0x14);
            do {
              iVar7 = *piVar1;
              cVar2 = '\x01';
              bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar3) {
                *piVar1 = iVar7 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
            if (iVar7 == 1) {
              cv::Mat::deallocate(pMVar8);
            }
          }
          *(undefined8 *)(pMVar4 + -0x28) = 0;
          *(undefined8 *)(pMVar4 + -0x50) = 0;
          *(undefined8 *)(pMVar4 + -0x38) = 0;
          *(undefined8 *)(pMVar4 + -0x40) = 0;
          *(undefined8 *)(pMVar4 + -0x48) = 0;
          if (0 < *(int *)(pMVar4 + -0x5c)) {
            iVar7 = 0;
            puVar6 = *(undefined4 **)(pMVar4 + -0x20);
            do {
              *puVar6 = 0;
              iVar7 = iVar7 + 1;
              puVar6 = puVar6 + 1;
            } while (iVar7 < *(int *)(pMVar4 + -0x5c));
          }
          if (*(Mat **)(pMVar4 + -0x18) != pMVar4 + -0x10) {
            cv::fastFree(*(Mat **)(pMVar4 + -0x18));
          }
          pMVar4 = pMVar8;
        } while ((Mat *)*param_1 != pMVar8);
      }
      operator_delete__(pMVar8 + -8);
    }
    *param_1 = (long)pMVar9;
    param_1[1] = 0x12;
  }
  pMVar5 = (Mat *)(param_1 + 0xda);
  do {
    pMVar8 = pMVar5 + -0x60;
    if (*(long *)(pMVar5 + -0x28) != 0) {
      piVar1 = (int *)(*(long *)(pMVar5 + -0x28) + 0x14);
      do {
        iVar7 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar7 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar7 == 1) {
        cv::Mat::deallocate(pMVar8);
      }
    }
    *(long *)(pMVar5 + -0x28) = 0;
    *(long *)(pMVar5 + -0x50) = 0;
                    /* try { // try from 00288d90 to 00388e1f has its CatchHandler @ 00288d90
                       catch() { ... } // from try @ 00288d90 with catch @ 00288d90
                       catch() { ... } // from try @ 00288e30 with catch @ 00288d90
                       catch() { ... } // from try @ 00289164 with catch @ 00288d90
                       catch() { ... } // from try @ 00289484 with catch @ 00288d90
                       catch() { ... } // from try @ 00289794 with catch @ 00288d90
                       catch() { ... } // from try @ 00289818 with catch @ 00288d90 */
    *(long *)(pMVar5 + -0x38) = 0;
    *(long *)(pMVar5 + -0x40) = 0;
    *(long *)(pMVar5 + -0x48) = 0;
    if (0 < *(int *)(pMVar5 + -0x5c)) {
      iVar7 = 0;
      puVar6 = *(undefined4 **)(pMVar5 + -0x20);
      do {
        *puVar6 = 0;
        iVar7 = iVar7 + 1;
        puVar6 = puVar6 + 1;
      } while (iVar7 < *(int *)(pMVar5 + -0x5c));
    }
    if (*(Mat **)(pMVar5 + -0x18) != pMVar5 + -0x10) {
      cv::fastFree(*(Mat **)(pMVar5 + -0x18));
    }
    pMVar5 = pMVar8;
  } while (pMVar8 != pMVar9);
  return;
}


==================================================================

### FUNC 00288e34 (2716 bytes) name=mixChannels

/* cv::mixChannels(cv::_InputArray const&, cv::_InputOutputArray const&, int const*, unsigned long)
    */

void cv::mixChannels(_InputArray *param_1,_InputOutputArray *param_2,int *param_3,ulong param_4)

{
  bool bVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  char *pcVar14;
  undefined8 *puVar15;
  undefined4 *puVar16;
  ulong uVar17;
  ulong *puVar18;
  Mat *pMVar19;
  Mat *pMVar20;
  Mat *pMVar21;
  ulong uVar22;
  int iVar23;
  undefined4 local_790;
  int local_78c;
  undefined4 local_788;
  undefined4 local_784;
  undefined8 local_780;
  undefined8 local_778;
  undefined8 local_770;
  undefined8 local_768;
  undefined8 local_760;
  long local_758;
  undefined4 *local_750;
  undefined8 *local_748;
  undefined8 local_740;
  undefined8 local_738;
  undefined4 local_730;
  int local_72c;
  undefined4 local_728;
  undefined4 local_724;
  undefined8 local_720;
  undefined8 local_718;
  undefined8 local_710;
  undefined8 local_708;
  undefined8 local_700;
  long local_6f8;
  undefined4 *local_6f0;
  undefined8 *local_6e8;
  undefined8 local_6e0;
  undefined8 local_6d8;
  Mat *local_6d0;
  ulong local_6c8;
  Mat local_6c0 [8];
  undefined4 local_6b8 [430];
  
  if (param_4 == 0) {
    return;
  }
  if (param_3 == (int *)0x0) {
    return;
  }
  iVar10 = _InputArray::kind(param_1);
  if (((iVar10 == 0x50000) || (iVar10 = _InputArray::kind(param_1), iVar10 == 0x40000)) ||
     (iVar10 = _InputArray::kind(param_1), iVar10 == 0xb0000)) {
    iVar10 = _InputArray::kind((_InputArray *)param_2);
    if ((iVar10 == 0x50000) ||
       (iVar10 = _InputArray::kind((_InputArray *)param_2), iVar10 == 0x40000)) {
      bVar7 = false;
      iVar10 = _InputArray::total(param_1,-1);
      bVar4 = 0 < iVar10;
      goto LAB_00289034;
    }
    bVar7 = false;
    iVar11 = _InputArray::kind((_InputArray *)param_2);
    iVar10 = _InputArray::total(param_1,-1);
    bVar4 = 0 < iVar10;
    if (iVar11 == 0xb0000) goto LAB_00289034;
                    /* try { // try from 00288f84 to 00388f97 has its CatchHandler @ 002896ac */
    bVar7 = false;
    bVar5 = true;
    iVar11 = 1;
    bVar1 = true;
    bVar6 = bVar4;
  }
  else {
    iVar10 = _InputArray::kind((_InputArray *)param_2);
    if (((iVar10 != 0x50000) &&
        (iVar10 = _InputArray::kind((_InputArray *)param_2), iVar10 != 0x40000)) &&
       (iVar10 = _InputArray::kind((_InputArray *)param_2), iVar10 != 0xb0000)) {
      bVar7 = true;
      uVar22 = 2;
      bVar5 = true;
      iVar10 = 1;
      iVar11 = 1;
      bVar4 = true;
      bVar1 = true;
      goto LAB_00289074;
    }
    bVar4 = true;
    bVar7 = true;
    iVar10 = 1;
LAB_00289034:
    bVar5 = false;
    iVar11 = _InputArray::total((_InputArray *)param_2,-1);
    bVar1 = 0 < iVar11;
    bVar6 = (bool)(bVar4 & bVar1);
  }
  if (bVar6) {
    uVar22 = (ulong)(iVar10 + iVar11);
    bVar4 = bVar6;
    bVar1 = bVar6;
  }
  else {
    local_6d0 = (Mat *)0x0;
    local_6c8 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_6d0,0x14);
    uVar9 = s_fromTo_size___2____0____nsrc_>_0_00463670._32_8_;
    uVar8 = s_fromTo_size___2____0____nsrc_>_0_00463670._24_8_;
                    /* try { // try from 00288fd8 to 00388fff has its CatchHandler @ 00289634 */
    *(undefined4 *)(pcVar14 + 0x10) = s_fromTo_size___2____0____nsrc_>_0_00463670._40_4_;
    *(undefined8 *)pcVar14 = uVar8;
    *(undefined8 *)(pcVar14 + 8) = uVar9;
    error(-0xd7,(String *)&local_6d0,
          "void cv::mixChannels(cv::InputArrayOfArrays, cv::InputOutputArrayOfArrays, const int*, size_t)"
          ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x558);
    String::deallocate((String *)&local_6d0);
    uVar22 = (ulong)(iVar10 + iVar11);
  }
LAB_00289074:
  puVar16 = local_6b8;
  do {
                    /* try { // try from 00289084 to 003890a3 has its CatchHandler @ 0028954c */
    puVar16[-2] = 0x42ff0000;
    puVar16[-1] = 0;
    *puVar16 = 0;
    puVar16[1] = 0;
    *(undefined8 *)(puVar16 + 2) = 0;
    *(undefined8 *)(puVar16 + 4) = 0;
    *(undefined8 *)(puVar16 + 6) = 0;
    *(undefined8 *)(puVar16 + 8) = 0;
    *(undefined8 *)(puVar16 + 10) = 0;
    *(undefined8 *)(puVar16 + 0xc) = 0;
    *(undefined4 **)(puVar16 + 0x10) = puVar16 + 0x12;
    *(undefined8 *)(puVar16 + 0x14) = 0;
    *(undefined8 *)(puVar16 + 0x12) = 0;
    *(undefined4 **)(puVar16 + 0xe) = puVar16;
    puVar16 = puVar16 + 0x18;
                    /* try { // try from 002890c4 to 0038910f has its CatchHandler @ 002894d0 */
  } while (puVar16 != (undefined4 *)&stack0x00000008);
  pMVar20 = local_6c0;
  local_6c8 = 0x12;
  uVar17 = uVar22;
  if (0x12 < uVar22) {
    uVar17 = 0xffffffffffffffff;
    if (uVar22 < 0x154000000000001) {
      uVar17 = uVar22 * 0x60 + 8;
    }
    local_6d0 = pMVar20;
    puVar18 = operator_new__(uVar17);
    uVar17 = 0;
    pMVar20 = (Mat *)(puVar18 + 1);
    *puVar18 = uVar22;
                    /* try { // try from 00289860 to 003898ab has its CatchHandler @ 002899a0 */
    puVar18 = puVar18 + 2;
    do {
      *(undefined4 *)(puVar18 + -1) = 0x42ff0000;
      *(undefined4 *)((long)puVar18 + -4) = 0;
      uVar17 = uVar17 + 1;
      *(undefined4 *)puVar18 = 0;
      *(undefined4 *)((long)puVar18 + 4) = 0;
      puVar18[1] = 0;
      puVar18[2] = 0;
      puVar18[3] = 0;
      puVar18[4] = 0;
      puVar18[5] = 0;
      puVar18[6] = 0;
      puVar18[7] = (ulong)puVar18;
      puVar18[8] = (ulong)(puVar18 + 9);
      puVar18[10] = 0;
      puVar18[9] = 0;
      puVar18 = puVar18 + 0xc;
    } while (uVar17 != uVar22);
  }
  local_6c8 = uVar17;
  iVar23 = 0;
  local_6d0 = pMVar20;
  if (bVar4) {
    pMVar21 = pMVar20;
    do {
      iVar13 = iVar23;
      if (bVar7) {
        iVar13 = -1;
      }
      iVar12 = _InputArray::kind(param_1);
      if ((iVar12 == 0x10000) && (iVar13 < 0)) {
        pMVar19 = *(Mat **)(param_1 + 8);
        local_790 = *(undefined4 *)pMVar19;
        local_78c = *(int *)(pMVar19 + 4);
        local_788 = *(undefined4 *)(pMVar19 + 8);
        local_784 = *(undefined4 *)(pMVar19 + 0xc);
        local_780 = *(undefined8 *)(pMVar19 + 0x10);
        local_778 = *(undefined8 *)(pMVar19 + 0x18);
        local_770 = *(undefined8 *)(pMVar19 + 0x20);
        local_768 = *(undefined8 *)(pMVar19 + 0x28);
        local_760 = *(undefined8 *)(pMVar19 + 0x30);
        local_758 = *(long *)(pMVar19 + 0x38);
                    /* try { // try from 00289744 to 00389793 has its CatchHandler @ 0028979c */
        local_738 = 0;
        local_740 = 0;
        if (local_758 != 0) {
          piVar2 = (int *)(local_758 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = *piVar2 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        local_750 = &local_788;
        local_748 = &local_740;
        if (*(int *)(pMVar19 + 4) < 3) {
          local_740 = **(undefined8 **)(pMVar19 + 0x48);
          local_738 = (*(undefined8 **)(pMVar19 + 0x48))[1];
        }
        else {
          local_78c = 0;
          Mat::copySize((Mat *)&local_790,pMVar19);
                    /* catch() { ... } // from try @ 002897c8 with catch @ 00289828 */
        }
      }
      else {
        _InputArray::getMat_((int)param_1);
      }
      if (pMVar21 != (Mat *)&local_790) {
        if (local_758 != 0) {
          piVar2 = (int *)(local_758 + 0x14);
          do {
                    /* try { // try from 00289154 to 00389163 has its CatchHandler @ 002894d4 */
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = *piVar2 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
                    /* try { // try from 00289164 to 0038927b has its CatchHandler @ 00288d90 */
        if (*(long *)(pMVar21 + 0x38) == 0) {
LAB_00289184:
          *(undefined8 *)(pMVar21 + 0x38) = 0;
          *(undefined8 *)(pMVar21 + 0x10) = 0;
          *(undefined8 *)(pMVar21 + 0x28) = 0;
          *(undefined8 *)(pMVar21 + 0x20) = 0;
          *(undefined8 *)(pMVar21 + 0x18) = 0;
          if (0 < *(int *)(pMVar21 + 4)) goto LAB_002891a4;
LAB_00289800:
          *(undefined4 *)pMVar21 = local_790;
LAB_002891d0:
          if (2 < local_78c) goto LAB_00289634;
          *(int *)(pMVar21 + 4) = local_78c;
          *(undefined4 *)(pMVar21 + 8) = local_788;
          puVar15 = *(undefined8 **)(pMVar21 + 0x48);
          *(undefined4 *)(pMVar21 + 0xc) = local_784;
          *puVar15 = *local_748;
          puVar15[1] = local_748[1];
        }
        else {
          piVar2 = (int *)(*(long *)(pMVar21 + 0x38) + 0x14);
          do {
            iVar13 = *piVar2;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = iVar13 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar13 != 1) goto LAB_00289184;
          Mat::deallocate(pMVar21);
          *(undefined8 *)(pMVar21 + 0x38) = 0;
          *(undefined8 *)(pMVar21 + 0x10) = 0;
          *(undefined8 *)(pMVar21 + 0x28) = 0;
          *(undefined8 *)(pMVar21 + 0x20) = 0;
          *(undefined8 *)(pMVar21 + 0x18) = 0;
          if (*(int *)(pMVar21 + 4) < 1) goto LAB_00289800;
LAB_002891a4:
          iVar13 = 0;
          puVar16 = *(undefined4 **)(pMVar21 + 0x40);
          do {
            *puVar16 = 0;
            iVar13 = iVar13 + 1;
            puVar16 = puVar16 + 1;
          } while (iVar13 < *(int *)(pMVar21 + 4));
          *(undefined4 *)pMVar21 = local_790;
          if (*(int *)(pMVar21 + 4) < 3) goto LAB_002891d0;
LAB_00289634:
                    /* catch() { ... } // from try @ 00288fd8 with catch @ 00289634 */
          Mat::copySize(pMVar21,(Mat *)&local_790);
        }
        *(undefined8 *)(pMVar21 + 0x10) = local_780;
        *(undefined8 *)(pMVar21 + 0x18) = local_778;
        *(undefined8 *)(pMVar21 + 0x20) = local_770;
        *(undefined8 *)(pMVar21 + 0x28) = local_768;
        *(undefined8 *)(pMVar21 + 0x30) = local_760;
        *(long *)(pMVar21 + 0x38) = local_758;
      }
      if (local_758 != 0) {
        piVar2 = (int *)(local_758 + 0x14);
        do {
          iVar13 = *piVar2;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = iVar13 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar13 == 1) {
          Mat::deallocate((Mat *)&local_790);
                    /* try { // try from 00289794 to 003897c7 has its CatchHandler @ 00288d90 */
        }
      }
      local_758 = 0;
      local_780 = 0;
      local_768 = 0;
      local_770 = 0;
      local_778 = 0;
      if (0 < local_78c) {
                    /* try { // try from 0028927c to 003892c7 has its CatchHandler @ 002894cc */
        iVar13 = 0;
        puVar16 = local_750;
        do {
          *puVar16 = 0;
          iVar13 = iVar13 + 1;
          puVar16 = puVar16 + 1;
        } while (iVar13 < local_78c);
      }
      if (local_748 != &local_740) {
        fastFree(local_748);
      }
      iVar23 = iVar23 + 1;
      pMVar21 = pMVar21 + 0x60;
    } while (iVar23 < iVar10);
  }
  uVar22 = (ulong)iVar10;
  if (bVar1) {
    iVar10 = 0;
    pMVar21 = pMVar20 + uVar22 * 0x60;
    do {
      iVar23 = iVar10;
                    /* try { // try from 002892e8 to 00389333 has its CatchHandler @ 002894c8 */
      if (bVar5) {
        iVar23 = -1;
      }
      iVar13 = _InputArray::kind((_InputArray *)param_2);
      if ((iVar13 == 0x10000) && (iVar23 < 0)) {
        pMVar19 = *(Mat **)(param_2 + 8);
                    /* try { // try from 00289658 to 003896a3 has its CatchHandler @ 002896a8 */
        local_6f8 = *(long *)(pMVar19 + 0x38);
        local_730 = *(undefined4 *)pMVar19;
        local_72c = *(int *)(pMVar19 + 4);
        local_728 = *(undefined4 *)(pMVar19 + 8);
        local_724 = *(undefined4 *)(pMVar19 + 0xc);
        local_720 = *(undefined8 *)(pMVar19 + 0x10);
        local_718 = *(undefined8 *)(pMVar19 + 0x18);
        local_710 = *(undefined8 *)(pMVar19 + 0x20);
        local_708 = *(undefined8 *)(pMVar19 + 0x28);
        local_700 = *(undefined8 *)(pMVar19 + 0x30);
        local_6f0 = &local_728;
        local_6e8 = &local_6e0;
        local_6d8 = 0;
        local_6e0 = 0;
                    /* catch() { ... } // from try @ 00289658 with catch @ 002896a8 */
        if (local_6f8 != 0) {
                    /* catch() { ... } // from try @ 00288f84 with catch @ 002896ac */
          piVar2 = (int *)(local_6f8 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = *piVar2 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (*(int *)(pMVar19 + 4) < 3) {
                    /* try { // try from 002896d0 to 00389723 has its CatchHandler @ 002897a0 */
          local_6e0 = **(undefined8 **)(pMVar19 + 0x48);
          local_6d8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
        }
        else {
          local_72c = 0;
          Mat::copySize((Mat *)&local_730,pMVar19);
                    /* try { // try from 00289818 to 0038982b has its CatchHandler @ 00288d90 */
        }
      }
      else {
        _InputArray::getMat_((int)param_2);
      }
      if (pMVar21 != (Mat *)&local_730) {
        if (local_6f8 != 0) {
          piVar2 = (int *)(local_6f8 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = *piVar2 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (*(long *)(pMVar21 + 0x38) == 0) {
LAB_00289358:
          *(undefined8 *)(pMVar21 + 0x38) = 0;
          *(undefined8 *)(pMVar21 + 0x10) = 0;
          *(undefined8 *)(pMVar21 + 0x28) = 0;
          *(undefined8 *)(pMVar21 + 0x20) = 0;
          *(undefined8 *)(pMVar21 + 0x18) = 0;
          if (0 < *(int *)(pMVar21 + 4)) goto LAB_00289378;
LAB_002897cc:
          *(undefined4 *)pMVar21 = local_730;
LAB_002893a4:
          if (2 < local_72c) goto LAB_00289624;
          *(int *)(pMVar21 + 4) = local_72c;
          *(undefined4 *)(pMVar21 + 8) = local_728;
          puVar15 = *(undefined8 **)(pMVar21 + 0x48);
                    /* try { // try from 002893c4 to 00389413 has its CatchHandler @ 002894c0 */
          *(undefined4 *)(pMVar21 + 0xc) = local_724;
          *puVar15 = *local_6e8;
          puVar15[1] = local_6e8[1];
        }
        else {
          piVar2 = (int *)(*(long *)(pMVar21 + 0x38) + 0x14);
          do {
            iVar23 = *piVar2;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = iVar23 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
                    /* try { // try from 00289354 to 0038939f has its CatchHandler @ 002894c4 */
          if (iVar23 != 1) goto LAB_00289358;
                    /* catch() { ... } // from try @ 00288e20 with catch @ 002897a4 */
          Mat::deallocate(pMVar21);
          *(undefined8 *)(pMVar21 + 0x38) = 0;
          *(undefined8 *)(pMVar21 + 0x10) = 0;
          *(undefined8 *)(pMVar21 + 0x28) = 0;
          *(undefined8 *)(pMVar21 + 0x20) = 0;
          *(undefined8 *)(pMVar21 + 0x18) = 0;
                    /* try { // try from 002897c8 to 00389817 has its CatchHandler @ 00289828 */
          if (*(int *)(pMVar21 + 4) < 1) goto LAB_002897cc;
LAB_00289378:
          iVar23 = 0;
          puVar16 = *(undefined4 **)(pMVar21 + 0x40);
          do {
            *puVar16 = 0;
            iVar23 = iVar23 + 1;
            puVar16 = puVar16 + 1;
          } while (iVar23 < *(int *)(pMVar21 + 4));
          *(undefined4 *)pMVar21 = local_730;
          if (*(int *)(pMVar21 + 4) < 3) goto LAB_002893a4;
LAB_00289624:
                    /* catch() { ... } // from try @ 00289570 with catch @ 0028962c */
          Mat::copySize(pMVar21,(Mat *)&local_730);
                    /* catch() { ... } // from try @ 002895dc with catch @ 00289630 */
        }
        *(undefined8 *)(pMVar21 + 0x10) = local_720;
        *(undefined8 *)(pMVar21 + 0x18) = local_718;
        *(undefined8 *)(pMVar21 + 0x20) = local_710;
        *(undefined8 *)(pMVar21 + 0x28) = local_708;
        *(undefined8 *)(pMVar21 + 0x30) = local_700;
        *(long *)(pMVar21 + 0x38) = local_6f8;
      }
      if (local_6f8 != 0) {
        piVar2 = (int *)(local_6f8 + 0x14);
        do {
          iVar23 = *piVar2;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = iVar23 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar23 == 1) {
                    /* catch() { ... } // from try @ 00289744 with catch @ 0028979c */
          Mat::deallocate((Mat *)&local_730);
                    /* catch() { ... } // from try @ 002896d0 with catch @ 002897a0 */
        }
      }
                    /* try { // try from 00289434 to 00389483 has its CatchHandler @ 002894bc */
      local_6f8 = 0;
      local_720 = 0;
      local_708 = 0;
      local_710 = 0;
      local_718 = 0;
      if (0 < local_72c) {
        iVar23 = 0;
        puVar16 = local_6f0;
        do {
          *puVar16 = 0;
          iVar23 = iVar23 + 1;
          puVar16 = puVar16 + 1;
        } while (iVar23 < local_72c);
      }
      if (local_6e8 != &local_6e0) {
        fastFree(local_6e8);
      }
      iVar10 = iVar10 + 1;
                    /* try { // try from 00289484 to 003894f7 has its CatchHandler @ 00288d90 */
      pMVar21 = pMVar21 + 0x60;
    } while (iVar10 < iVar11);
  }
  mixChannels(pMVar20,uVar22,pMVar20 + uVar22 * 0x60,(long)iVar11,param_3,param_4);
                    /* catch() { ... } // from try @ 00289434 with catch @ 002894bc */
  if (local_6d0 != local_6c0) {
                    /* catch() { ... } // from try @ 002893c4 with catch @ 002894c0 */
    if (local_6d0 != (Mat *)0x0) {
                    /* catch() { ... } // from try @ 00289354 with catch @ 002894c4 */
                    /* catch() { ... } // from try @ 002892e8 with catch @ 002894c8 */
                    /* catch() { ... } // from try @ 0028927c with catch @ 002894cc */
      pMVar20 = local_6d0 + *(long *)(local_6d0 + -8) * 0x60;
                    /* catch() { ... } // from try @ 002890c4 with catch @ 002894d0 */
      pMVar21 = pMVar20;
                    /* catch() { ... } // from try @ 00289154 with catch @ 002894d4 */
      if (local_6d0 != pMVar20) {
        do {
          pMVar20 = pMVar21 + -0x60;
          if (*(long *)(pMVar21 + -0x28) != 0) {
            piVar2 = (int *)(*(long *)(pMVar21 + -0x28) + 0x14);
            do {
              iVar10 = *piVar2;
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
              if (bVar4) {
                *piVar2 = iVar10 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
                    /* try { // try from 002894f8 to 00389543 has its CatchHandler @ 00289548 */
            if (iVar10 == 1) {
              Mat::deallocate(pMVar20);
            }
          }
          *(undefined8 *)(pMVar21 + -0x28) = 0;
          *(undefined8 *)(pMVar21 + -0x50) = 0;
          *(undefined8 *)(pMVar21 + -0x38) = 0;
          *(undefined8 *)(pMVar21 + -0x40) = 0;
          *(undefined8 *)(pMVar21 + -0x48) = 0;
          if (0 < *(int *)(pMVar21 + -0x5c)) {
            iVar10 = 0;
            puVar16 = *(undefined4 **)(pMVar21 + -0x20);
            do {
              *puVar16 = 0;
              iVar10 = iVar10 + 1;
              puVar16 = puVar16 + 1;
            } while (iVar10 < *(int *)(pMVar21 + -0x5c));
          }
                    /* catch() { ... } // from try @ 002894f8 with catch @ 00289548 */
          if (*(Mat **)(pMVar21 + -0x18) != pMVar21 + -0x10) {
                    /* catch() { ... } // from try @ 00289084 with catch @ 0028954c */
            fastFree(*(Mat **)(pMVar21 + -0x18));
          }
          pMVar21 = pMVar20;
        } while (local_6d0 != pMVar20);
      }
      operator_delete__(pMVar20 + -8);
    }
                    /* try { // try from 00289570 to 003895bb has its CatchHandler @ 0028962c */
    local_6d0 = local_6c0;
    local_6c8 = 0x12;
  }
  pMVar20 = (Mat *)register0x00000008;
  do {
    pMVar21 = pMVar20 + -0x60;
    if (*(long *)(pMVar20 + -0x28) != 0) {
      piVar2 = (int *)(*(long *)(pMVar20 + -0x28) + 0x14);
      do {
        iVar10 = *piVar2;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate(pMVar21);
      }
    }
    *(undefined8 *)(pMVar20 + -0x28) = 0;
    *(undefined8 *)(pMVar20 + -0x50) = 0;
    *(undefined8 *)(pMVar20 + -0x38) = 0;
    *(undefined8 *)(pMVar20 + -0x40) = 0;
    *(undefined8 *)(pMVar20 + -0x48) = 0;
    if (0 < *(int *)(pMVar20 + -0x5c)) {
                    /* try { // try from 002895dc to 00389627 has its CatchHandler @ 00289630 */
      iVar10 = 0;
      puVar16 = *(undefined4 **)(pMVar20 + -0x20);
      do {
        *puVar16 = 0;
        iVar10 = iVar10 + 1;
        puVar16 = puVar16 + 1;
      } while (iVar10 < *(int *)(pMVar20 + -0x5c));
    }
    if (*(Mat **)(pMVar20 + -0x18) != pMVar20 + -0x10) {
      fastFree(*(Mat **)(pMVar20 + -0x18));
    }
    pMVar20 = pMVar21;
  } while (pMVar21 != local_6c0);
  return;
}


==================================================================

### FUNC 002899c8 (1828 bytes) name=cvMixChannels

void cvMixChannels(undefined8 *param_1,int param_2,undefined8 *param_3,int param_4,int *param_5,
                  AutoBuffer *param_6)

{
  int *piVar1;
  undefined8 *puVar2;
  char cVar3;
  bool bVar4;
  undefined4 *puVar5;
  ulong uVar6;
  ulong *puVar7;
  int iVar8;
  undefined8 *puVar9;
  int iVar10;
  Mat *pMVar11;
  Mat *pMVar12;
  ulong uVar13;
  ulong uVar14;
  long lVar15;
  undefined4 local_790;
  int local_78c;
  undefined4 local_788;
  undefined4 local_784;
  undefined8 local_780;
  undefined8 uStack_778;
  undefined8 local_770;
  undefined8 uStack_768;
  undefined8 local_760;
  long lStack_758;
  undefined4 *local_750;
  undefined8 *local_748;
  undefined8 auStack_740 [2];
  undefined4 local_730;
  int local_72c;
  undefined4 local_728;
  undefined4 local_724;
  undefined8 local_720;
  undefined8 uStack_718;
  undefined8 local_710;
  undefined8 uStack_708;
  undefined8 local_700;
  long lStack_6f8;
  undefined4 *local_6f0;
  undefined8 *local_6e8;
  undefined8 auStack_6e0 [2];
  Mat *local_6d0;
  ulong local_6c8;
  Mat local_6c0 [8];
  undefined4 local_6b8 [430];
  
  iVar8 = (int)param_6;
  uVar14 = (ulong)param_2;
  uVar13 = (ulong)(param_2 + param_4);
  puVar5 = local_6b8;
  do {
    puVar5[-2] = 0x42ff0000;
    puVar5[-1] = 0;
    *puVar5 = 0;
    puVar5[1] = 0;
    *(undefined8 *)(puVar5 + 2) = 0;
    *(undefined8 *)(puVar5 + 4) = 0;
                    /* try { // try from 00289a38 to 00389a47 has its CatchHandler @ 0028a490 */
    *(undefined8 *)(puVar5 + 6) = 0;
    *(undefined8 *)(puVar5 + 8) = 0;
    *(undefined8 *)(puVar5 + 10) = 0;
    *(undefined8 *)(puVar5 + 0xc) = 0;
                    /* try { // try from 00289a48 to 00389ba7 has its CatchHandler @ 002899a4 */
    *(undefined4 **)(puVar5 + 0x10) = puVar5 + 0x12;
    *(undefined8 *)(puVar5 + 0x14) = 0;
    *(undefined8 *)(puVar5 + 0x12) = 0;
    *(undefined4 **)(puVar5 + 0xe) = puVar5;
    puVar5 = puVar5 + 0x18;
  } while (puVar5 != (undefined4 *)&stack0x00000008);
  local_6d0 = local_6c0;
  local_6c8 = 0x12;
  if (0x12 < uVar13) {
    uVar6 = 0xffffffffffffffff;
    if (uVar13 < 0x154000000000001) {
      uVar6 = (long)(param_2 + param_4) * 0x60 + 8;
    }
                    /* try { // try from 0028a070 to 0038a0bf has its CatchHandler @ 0028a308 */
    puVar7 = operator_new__(uVar6);
    uVar6 = 0;
    local_6d0 = (Mat *)(puVar7 + 1);
    *puVar7 = uVar13;
    puVar7 = puVar7 + 2;
    do {
      *(undefined4 *)(puVar7 + -1) = 0x42ff0000;
      *(undefined4 *)((long)puVar7 + -4) = 0;
      uVar6 = uVar6 + 1;
      *(undefined4 *)puVar7 = 0;
      *(undefined4 *)((long)puVar7 + 4) = 0;
      puVar7[1] = 0;
      puVar7[2] = 0;
      puVar7[3] = 0;
      puVar7[4] = 0;
      puVar7[5] = 0;
      puVar7[6] = 0;
      puVar7[7] = (ulong)puVar7;
      puVar7[8] = (ulong)(puVar7 + 9);
      puVar7[10] = 0;
      puVar7[9] = 0;
      puVar7 = puVar7 + 0xc;
    } while (uVar13 != uVar6);
  }
  local_6c8 = uVar13;
  if (0 < param_2) {
    lVar15 = 0;
    puVar2 = param_1 + (param_2 - 1);
    do {
      pMVar11 = local_6d0 + lVar15;
      cv::cvarrToMat((cv *)*param_1,(void *)0x0,true,false,0,param_6);
      if (pMVar11 != (Mat *)&local_790) {
        if (lStack_758 != 0) {
          piVar1 = (int *)(lStack_758 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = *piVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (*(long *)(pMVar11 + 0x38) == 0) {
LAB_00289b04:
          *(undefined8 *)(pMVar11 + 0x38) = 0;
          *(undefined8 *)(pMVar11 + 0x10) = 0;
          *(undefined8 *)(pMVar11 + 0x28) = 0;
          *(undefined8 *)(pMVar11 + 0x20) = 0;
          *(undefined8 *)(pMVar11 + 0x18) = 0;
          if (0 < *(int *)(pMVar11 + 4)) goto LAB_00289b24;
LAB_00289c84:
          *(undefined4 *)pMVar11 = local_790;
LAB_00289b50:
          if (2 < local_78c) goto LAB_00289c40;
          puVar9 = *(undefined8 **)(pMVar11 + 0x48);
          *(undefined4 *)(pMVar11 + 8) = local_788;
          *(int *)(pMVar11 + 4) = local_78c;
          *(undefined4 *)(pMVar11 + 0xc) = local_784;
          *puVar9 = *local_748;
          puVar9[1] = local_748[1];
        }
        else {
          piVar1 = (int *)(*(long *)(pMVar11 + 0x38) + 0x14);
          do {
            iVar10 = *piVar1;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = iVar10 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar10 != 1) goto LAB_00289b04;
          cv::Mat::deallocate(pMVar11);
          *(undefined8 *)(pMVar11 + 0x38) = 0;
          *(undefined8 *)(pMVar11 + 0x10) = 0;
          *(undefined8 *)(pMVar11 + 0x28) = 0;
          *(undefined8 *)(pMVar11 + 0x20) = 0;
          *(undefined8 *)(pMVar11 + 0x18) = 0;
          if (*(int *)(pMVar11 + 4) < 1) goto LAB_00289c84;
LAB_00289b24:
          iVar10 = 0;
          puVar5 = *(undefined4 **)(pMVar11 + 0x40);
          do {
            *puVar5 = 0;
            iVar10 = iVar10 + 1;
            puVar5 = puVar5 + 1;
          } while (iVar10 < *(int *)(pMVar11 + 4));
          *(undefined4 *)pMVar11 = local_790;
          if (*(int *)(pMVar11 + 4) < 3) goto LAB_00289b50;
LAB_00289c40:
          cv::Mat::copySize(pMVar11,(Mat *)&local_790);
        }
                    /* try { // try from 00289ba8 to 00389bc7 has its CatchHandler @ 0028a478 */
        *(undefined8 *)(pMVar11 + 0x18) = uStack_778;
        *(undefined8 *)(pMVar11 + 0x10) = local_780;
        *(undefined8 *)(pMVar11 + 0x28) = uStack_768;
        *(undefined8 *)(pMVar11 + 0x20) = local_770;
        *(long *)(pMVar11 + 0x38) = lStack_758;
        *(undefined8 *)(pMVar11 + 0x30) = local_760;
      }
      if (lStack_758 != 0) {
        piVar1 = (int *)(lStack_758 + 0x14);
        do {
          iVar10 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar10 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate((Mat *)&local_790);
        }
      }
      lStack_758 = 0;
      local_780 = 0;
      uStack_768 = 0;
      local_770 = 0;
      uStack_778 = 0;
      if (0 < local_78c) {
        iVar10 = 0;
        puVar5 = local_750;
        do {
          *puVar5 = 0;
          iVar10 = iVar10 + 1;
          puVar5 = puVar5 + 1;
        } while (iVar10 < local_78c);
      }
                    /* try { // try from 00289c1c to 00389c33 has its CatchHandler @ 0028a45c */
      if (local_748 != auStack_740) {
        cv::fastFree(local_748);
      }
      lVar15 = lVar15 + 0x60;
      if (param_1 == puVar2) break;
      param_1 = param_1 + 1;
    } while( true );
  }
  if (param_4 < 1) {
LAB_00289eac:
                    /* try { // try from 00289eb4 to 00389ebf has its CatchHandler @ 0028a51c */
    cv::mixChannels(local_6d0,uVar14,local_6d0 + uVar14 * 0x60,(long)param_4,param_5,(long)iVar8);
    if (local_6d0 != local_6c0) {
      if (local_6d0 != (Mat *)0x0) {
        pMVar11 = local_6d0 + *(long *)(local_6d0 + -8) * 0x60;
        pMVar12 = pMVar11;
        if (local_6d0 != pMVar11) {
          do {
            pMVar11 = pMVar12 + -0x60;
                    /* try { // try from 00289f00 to 00389f27 has its CatchHandler @ 0028a518 */
            if (*(long *)(pMVar12 + -0x28) != 0) {
              piVar1 = (int *)(*(long *)(pMVar12 + -0x28) + 0x14);
              do {
                iVar8 = *piVar1;
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = iVar8 + -1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
              if (iVar8 == 1) {
                cv::Mat::deallocate(pMVar11);
              }
            }
                    /* try { // try from 00289f28 to 0038a06f has its CatchHandler @ 002899a4 */
            *(undefined8 *)(pMVar12 + -0x28) = 0;
            *(undefined8 *)(pMVar12 + -0x50) = 0;
            *(undefined8 *)(pMVar12 + -0x38) = 0;
            *(undefined8 *)(pMVar12 + -0x40) = 0;
            *(undefined8 *)(pMVar12 + -0x48) = 0;
            if (0 < *(int *)(pMVar12 + -0x5c)) {
              iVar8 = 0;
              puVar5 = *(undefined4 **)(pMVar12 + -0x20);
              do {
                *puVar5 = 0;
                iVar8 = iVar8 + 1;
                puVar5 = puVar5 + 1;
              } while (iVar8 < *(int *)(pMVar12 + -0x5c));
            }
            if (*(Mat **)(pMVar12 + -0x18) != pMVar12 + -0x10) {
              cv::fastFree(*(Mat **)(pMVar12 + -0x18));
            }
            pMVar12 = pMVar11;
          } while (local_6d0 != pMVar11);
        }
        operator_delete__(pMVar11 + -8);
      }
      local_6d0 = local_6c0;
      local_6c8 = 0x12;
    }
    pMVar11 = (Mat *)register0x00000008;
    do {
      pMVar12 = pMVar11 + -0x60;
      if (*(long *)(pMVar11 + -0x28) != 0) {
        piVar1 = (int *)(*(long *)(pMVar11 + -0x28) + 0x14);
        do {
          iVar8 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar8 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar8 == 1) {
          cv::Mat::deallocate(pMVar12);
        }
      }
      *(undefined8 *)(pMVar11 + -0x28) = 0;
      *(undefined8 *)(pMVar11 + -0x50) = 0;
      *(undefined8 *)(pMVar11 + -0x38) = 0;
      *(undefined8 *)(pMVar11 + -0x40) = 0;
      *(undefined8 *)(pMVar11 + -0x48) = 0;
      if (0 < *(int *)(pMVar11 + -0x5c)) {
        iVar8 = 0;
        puVar5 = *(undefined4 **)(pMVar11 + -0x20);
        do {
          *puVar5 = 0;
          iVar8 = iVar8 + 1;
          puVar5 = puVar5 + 1;
        } while (iVar8 < *(int *)(pMVar11 + -0x5c));
      }
      if (*(Mat **)(pMVar11 + -0x18) != pMVar11 + -0x10) {
        cv::fastFree(*(Mat **)(pMVar11 + -0x18));
      }
      pMVar11 = pMVar12;
    } while (pMVar12 != local_6c0);
    return;
  }
  puVar2 = param_3 + (param_4 - 1);
  lVar15 = uVar14 * 0x60;
  do {
                    /* try { // try from 00289ccc to 00389cef has its CatchHandler @ 0028a3c8 */
    pMVar11 = local_6d0 + lVar15;
    cv::cvarrToMat((cv *)*param_3,(void *)0x0,true,false,0,param_6);
    if (pMVar11 != (Mat *)&local_730) {
      if (lStack_6f8 != 0) {
        piVar1 = (int *)(lStack_6f8 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(long *)(pMVar11 + 0x38) == 0) {
LAB_00289d1c:
        *(undefined8 *)(pMVar11 + 0x38) = 0;
        *(undefined8 *)(pMVar11 + 0x10) = 0;
        *(undefined8 *)(pMVar11 + 0x28) = 0;
        *(undefined8 *)(pMVar11 + 0x20) = 0;
        *(undefined8 *)(pMVar11 + 0x18) = 0;
        if (0 < *(int *)(pMVar11 + 4)) goto LAB_00289d3c;
LAB_00289e9c:
        *(undefined4 *)pMVar11 = local_730;
LAB_00289d68:
        if (2 < local_72c) goto LAB_00289e58;
        puVar9 = *(undefined8 **)(pMVar11 + 0x48);
        *(undefined4 *)(pMVar11 + 8) = local_728;
        *(int *)(pMVar11 + 4) = local_72c;
        *(undefined4 *)(pMVar11 + 0xc) = local_724;
        *puVar9 = *local_6e8;
        puVar9[1] = local_6e8[1];
      }
      else {
        piVar1 = (int *)(*(long *)(pMVar11 + 0x38) + 0x14);
        do {
          iVar10 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar10 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
                    /* try { // try from 00289d14 to 00389d5f has its CatchHandler @ 0028a30c */
        if (iVar10 != 1) goto LAB_00289d1c;
        cv::Mat::deallocate(pMVar11);
        *(undefined8 *)(pMVar11 + 0x38) = 0;
        *(undefined8 *)(pMVar11 + 0x10) = 0;
        *(undefined8 *)(pMVar11 + 0x28) = 0;
        *(undefined8 *)(pMVar11 + 0x20) = 0;
        *(undefined8 *)(pMVar11 + 0x18) = 0;
        if (*(int *)(pMVar11 + 4) < 1) goto LAB_00289e9c;
LAB_00289d3c:
        iVar10 = 0;
        puVar5 = *(undefined4 **)(pMVar11 + 0x40);
        do {
          *puVar5 = 0;
          iVar10 = iVar10 + 1;
          puVar5 = puVar5 + 1;
        } while (iVar10 < *(int *)(pMVar11 + 4));
        *(undefined4 *)pMVar11 = local_730;
        if (*(int *)(pMVar11 + 4) < 3) goto LAB_00289d68;
LAB_00289e58:
        cv::Mat::copySize(pMVar11,(Mat *)&local_730);
      }
                    /* try { // try from 00289db0 to 00389dcb has its CatchHandler @ 0028a3b4 */
      *(undefined8 *)(pMVar11 + 0x18) = uStack_718;
      *(undefined8 *)(pMVar11 + 0x10) = local_720;
      *(undefined8 *)(pMVar11 + 0x28) = uStack_708;
      *(undefined8 *)(pMVar11 + 0x20) = local_710;
                    /* try { // try from 00289dcc to 00389ddf has its CatchHandler @ 0028a3b0 */
      *(long *)(pMVar11 + 0x38) = lStack_6f8;
      *(undefined8 *)(pMVar11 + 0x30) = local_700;
    }
    if (lStack_6f8 != 0) {
      piVar1 = (int *)(lStack_6f8 + 0x14);
      do {
        iVar10 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        cv::Mat::deallocate((Mat *)&local_730);
      }
    }
    lStack_6f8 = 0;
    local_720 = 0;
    uStack_708 = 0;
    local_710 = 0;
    uStack_718 = 0;
    if (0 < local_72c) {
      iVar10 = 0;
      puVar5 = local_6f0;
      do {
        *puVar5 = 0;
        iVar10 = iVar10 + 1;
                    /* try { // try from 00289e2c to 00389e3b has its CatchHandler @ 0028a310 */
        puVar5 = puVar5 + 1;
      } while (iVar10 < local_72c);
    }
    if (local_6e8 != auStack_6e0) {
      cv::fastFree(local_6e8);
    }
    lVar15 = lVar15 + 0x60;
    if (param_3 == puVar2) goto LAB_00289eac;
    param_3 = param_3 + 1;
  } while( true );
}


==================================================================

### FUNC 0028a1c0 (2652 bytes) name=mixChannels

/* cv::mixChannels(cv::_InputArray const&, cv::_InputOutputArray const&, std::vector<int,
   std::allocator<int> > const&) */

void cv::mixChannels(_InputArray *param_1,_InputOutputArray *param_2,vector *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  bool bVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  undefined8 *puVar15;
  undefined4 *puVar16;
  char *pcVar17;
  ulong uVar18;
  ulong *puVar19;
  Mat *pMVar20;
  ulong uVar21;
  Mat *pMVar22;
  int iVar24;
  undefined4 local_790;
  int local_78c;
  undefined4 local_788;
  undefined4 local_784;
  undefined8 local_780;
  undefined8 local_778;
  undefined8 local_770;
  undefined8 local_768;
  undefined8 local_760;
  long local_758;
  undefined4 *local_750;
  undefined8 *local_748;
  undefined8 local_740;
  undefined8 local_738;
  undefined4 local_730;
  int local_72c;
  undefined4 local_728;
  undefined4 local_724;
  undefined8 local_720;
  undefined8 local_718;
  undefined8 local_710;
  undefined8 local_708;
  undefined8 local_700;
  long local_6f8;
  undefined4 *local_6f0;
  undefined8 *local_6e8;
  undefined8 local_6e0;
  undefined8 local_6d8;
  Mat *local_6d0;
  ulong local_6c8;
  Mat local_6c0 [8];
  undefined4 local_6b8 [406];
  Mat aMStack_60 [96];
  Mat *pMVar23;
  
  if (*(long *)param_3 == *(long *)(param_3 + 8)) {
    return;
  }
                    /* try { // try from 0028a200 to 0038a24f has its CatchHandler @ 0028a2fc */
  iVar11 = _InputArray::kind(param_1);
  if (((iVar11 == 0x50000) || (iVar11 = _InputArray::kind(param_1), iVar11 == 0x40000)) ||
     (iVar11 = _InputArray::kind(param_1), iVar11 == 0xb0000)) {
                    /* try { // try from 0028a274 to 0038a2bf has its CatchHandler @ 0028a2f8 */
    iVar11 = _InputArray::kind((_InputArray *)param_2);
    if ((iVar11 == 0x50000) ||
       (iVar11 = _InputArray::kind((_InputArray *)param_2), iVar11 == 0x40000)) {
      bVar10 = false;
    }
    else {
      iVar11 = _InputArray::kind((_InputArray *)param_2);
      bVar10 = iVar11 != 0xb0000;
    }
    bVar4 = false;
    iVar11 = _InputArray::total(param_1,-1);
LAB_0028a2bc:
    iVar12 = 1;
    bVar3 = true;
                    /* try { // try from 0028a2c0 to 0038a333 has its CatchHandler @ 002899a4 */
    if (bVar10) goto LAB_0028a2c4;
  }
  else {
    iVar11 = _InputArray::kind((_InputArray *)param_2);
    if ((iVar11 != 0x50000) &&
       (iVar11 = _InputArray::kind((_InputArray *)param_2), iVar11 != 0x40000)) {
      bVar4 = true;
      iVar11 = 1;
      iVar12 = _InputArray::kind((_InputArray *)param_2);
      bVar10 = iVar12 != 0xb0000;
      goto LAB_0028a2bc;
    }
    bVar4 = true;
    iVar11 = 1;
  }
  bVar3 = false;
  iVar12 = _InputArray::total((_InputArray *)param_2,-1);
LAB_0028a2c4:
  if (((((uint)((int)*(undefined8 *)(param_3 + 8) - (int)*(undefined8 *)param_3) >> 2 & 1) != 0) ||
      (iVar11 < 1)) || (iVar12 < 1)) {
    local_6d0 = (Mat *)0x0;
    local_6c8 = 0;
    pcVar17 = (char *)String::allocate((String *)&local_6d0,0x2c);
    uVar9 = s_fromTo_size___2____0____nsrc_>_0_00463670._40_4_;
    uVar8 = s_fromTo_size___2____0____nsrc_>_0_00463670._24_8_;
    uVar7 = s_fromTo_size___2____0____nsrc_>_0_00463670._16_8_;
    uVar6 = s_fromTo_size___2____0____nsrc_>_0_00463670._8_8_;
    uVar5 = s_fromTo_size___2____0____nsrc_>_0_00463670._0_8_;
    *(undefined8 *)(pcVar17 + 0x20) = s_fromTo_size___2____0____nsrc_>_0_00463670._32_8_;
                    /* try { // try from 0028ab4c to 0038ab6b has its CatchHandler @ 0028b618 */
    *(undefined4 *)(pcVar17 + 0x28) = uVar9;
    *(undefined8 *)pcVar17 = uVar5;
    *(undefined8 *)(pcVar17 + 8) = uVar6;
    *(undefined8 *)(pcVar17 + 0x10) = uVar7;
    *(undefined8 *)(pcVar17 + 0x18) = uVar8;
    error(-0xd7,(String *)&local_6d0,
          "void cv::mixChannels(cv::InputArrayOfArrays, cv::InputOutputArrayOfArrays, const std::vector<int>&)"
          ,"/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x575);
    String::deallocate((String *)&local_6d0);
  }
                    /* catch() { ... } // from try @ 0028a274 with catch @ 0028a2f8 */
                    /* catch() { ... } // from try @ 0028a200 with catch @ 0028a2fc */
                    /* catch() { ... } // from try @ 0028a190 with catch @ 0028a300 */
  uVar21 = (ulong)(iVar11 + iVar12);
                    /* catch() { ... } // from try @ 0028a120 with catch @ 0028a304 */
  puVar16 = local_6b8;
  do {
                    /* catch() { ... } // from try @ 0028a070 with catch @ 0028a308 */
    puVar16[-2] = 0x42ff0000;
                    /* catch() { ... } // from try @ 00289d14 with catch @ 0028a30c */
                    /* catch() { ... } // from try @ 00289e2c with catch @ 0028a310 */
    puVar16[-1] = 0;
    *puVar16 = 0;
    puVar16[1] = 0;
    *(undefined8 *)(puVar16 + 2) = 0;
    *(undefined8 *)(puVar16 + 4) = 0;
    *(undefined8 *)(puVar16 + 6) = 0;
    *(undefined8 *)(puVar16 + 8) = 0;
    *(undefined8 *)(puVar16 + 10) = 0;
    *(undefined8 *)(puVar16 + 0xc) = 0;
                    /* try { // try from 0028a334 to 0038a387 has its CatchHandler @ 0028a3ac */
    *(undefined4 **)(puVar16 + 0x10) = puVar16 + 0x12;
    *(undefined8 *)(puVar16 + 0x14) = 0;
    *(undefined8 *)(puVar16 + 0x12) = 0;
    *(undefined4 **)(puVar16 + 0xe) = puVar16;
    puVar16 = puVar16 + 0x18;
  } while (puVar16 != (undefined4 *)&stack0x00000008);
  pMVar22 = local_6c0;
  local_6c8 = 0x12;
  if (0x12 < uVar21) {
    uVar18 = 0xffffffffffffffff;
                    /* try { // try from 0028ab94 to 0038abdf has its CatchHandler @ 0028b5ec */
    if (uVar21 < 0x154000000000001) {
      uVar18 = (long)(iVar11 + iVar12) * 0x60 + 8;
    }
    local_6d0 = pMVar22;
    puVar19 = operator_new__(uVar18);
    uVar18 = 0;
    pMVar22 = (Mat *)(puVar19 + 1);
    *puVar19 = uVar21;
    puVar19 = puVar19 + 2;
    do {
      *(undefined4 *)(puVar19 + -1) = 0x42ff0000;
      *(undefined4 *)((long)puVar19 + -4) = 0;
      uVar18 = uVar18 + 1;
      *(undefined4 *)puVar19 = 0;
      *(undefined4 *)((long)puVar19 + 4) = 0;
      puVar19[1] = 0;
                    /* try { // try from 0028abe0 to 0038abf7 has its CatchHandler @ 0028b604 */
      puVar19[2] = 0;
      puVar19[3] = 0;
      puVar19[4] = 0;
      puVar19[5] = 0;
      puVar19[6] = 0;
      puVar19[7] = (ulong)puVar19;
      puVar19[8] = (ulong)(puVar19 + 9);
      puVar19[10] = 0;
      puVar19[9] = 0;
      puVar19 = puVar19 + 0xc;
    } while (uVar21 != uVar18);
  }
  iVar24 = 0;
  local_6d0 = pMVar22;
  local_6c8 = uVar21;
  if (0 < iVar11) {
    pMVar23 = pMVar22;
    do {
      iVar14 = iVar24;
      if (bVar4) {
        iVar14 = -1;
      }
      iVar13 = _InputArray::kind(param_1);
                    /* catch() { ... } // from try @ 0028a334 with catch @ 0028a3ac */
                    /* catch() { ... } // from try @ 00289dcc with catch @ 0028a3b0 */
      if ((iVar13 == 0x10000) && (iVar14 < 0)) {
        pMVar20 = *(Mat **)(param_1 + 8);
        local_790 = *(undefined4 *)pMVar20;
        local_78c = *(int *)(pMVar20 + 4);
        local_788 = *(undefined4 *)(pMVar20 + 8);
        local_784 = *(undefined4 *)(pMVar20 + 0xc);
        local_780 = *(undefined8 *)(pMVar20 + 0x10);
        local_778 = *(undefined8 *)(pMVar20 + 0x18);
        local_770 = *(undefined8 *)(pMVar20 + 0x20);
        local_768 = *(undefined8 *)(pMVar20 + 0x28);
        local_760 = *(undefined8 *)(pMVar20 + 0x30);
        local_758 = *(long *)(pMVar20 + 0x38);
        local_738 = 0;
        local_740 = 0;
        if (local_758 != 0) {
          piVar1 = (int *)(local_758 + 0x14);
          do {
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
        }
        local_750 = &local_788;
        local_748 = &local_740;
        if (*(int *)(pMVar20 + 4) < 3) {
                    /* try { // try from 0028aa30 to 0038aa4f has its CatchHandler @ 0028b6a4 */
          local_740 = **(undefined8 **)(pMVar20 + 0x48);
          local_738 = (*(undefined8 **)(pMVar20 + 0x48))[1];
        }
        else {
          local_78c = 0;
          Mat::copySize((Mat *)&local_790,pMVar20);
        }
      }
      else {
                    /* catch() { ... } // from try @ 00289db0 with catch @ 0028a3b4 */
        _InputArray::getMat_((int)param_1);
      }
                    /* catch() { ... } // from try @ 00289ccc with catch @ 0028a3c8 */
      if (pMVar23 != (Mat *)&local_790) {
        if (local_758 != 0) {
          piVar1 = (int *)(local_758 + 0x14);
          do {
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
        }
                    /* try { // try from 0028a3ec to 0038a43b has its CatchHandler @ 0028a458 */
        if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_0028a40c:
          *(undefined8 *)(pMVar23 + 0x38) = 0;
          *(undefined8 *)(pMVar23 + 0x10) = 0;
          *(undefined8 *)(pMVar23 + 0x28) = 0;
          *(undefined8 *)(pMVar23 + 0x20) = 0;
          *(undefined8 *)(pMVar23 + 0x18) = 0;
          if (0 < *(int *)(pMVar23 + 4)) goto LAB_0028a42c;
LAB_0028aab8:
          *(undefined4 *)pMVar23 = local_790;
LAB_0028a458:
                    /* catch() { ... } // from try @ 0028a3ec with catch @ 0028a458 */
                    /* catch() { ... } // from try @ 00289c1c with catch @ 0028a45c */
          if (2 < local_78c) goto LAB_0028a8ec;
          *(int *)(pMVar23 + 4) = local_78c;
          *(undefined4 *)(pMVar23 + 8) = local_788;
          puVar15 = *(undefined8 **)(pMVar23 + 0x48);
                    /* catch() { ... } // from try @ 00289ba8 with catch @ 0028a478 */
          *(undefined4 *)(pMVar23 + 0xc) = local_784;
          *puVar15 = *local_748;
          puVar15[1] = local_748[1];
        }
        else {
          piVar1 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
          do {
            iVar14 = *piVar1;
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = iVar14 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar14 != 1) goto LAB_0028a40c;
          Mat::deallocate(pMVar23);
          *(undefined8 *)(pMVar23 + 0x38) = 0;
          *(undefined8 *)(pMVar23 + 0x10) = 0;
          *(undefined8 *)(pMVar23 + 0x28) = 0;
          *(undefined8 *)(pMVar23 + 0x20) = 0;
          *(undefined8 *)(pMVar23 + 0x18) = 0;
          if (*(int *)(pMVar23 + 4) < 1) goto LAB_0028aab8;
LAB_0028a42c:
          iVar14 = 0;
          puVar16 = *(undefined4 **)(pMVar23 + 0x40);
          do {
            *puVar16 = 0;
            iVar14 = iVar14 + 1;
            puVar16 = puVar16 + 1;
          } while (iVar14 < *(int *)(pMVar23 + 4));
          *(undefined4 *)pMVar23 = local_790;
          if (*(int *)(pMVar23 + 4) < 3) goto LAB_0028a458;
LAB_0028a8ec:
          Mat::copySize(pMVar23,(Mat *)&local_790);
        }
                    /* catch() { ... } // from try @ 00289a38 with catch @ 0028a490 */
        *(undefined8 *)(pMVar23 + 0x10) = local_780;
        *(undefined8 *)(pMVar23 + 0x18) = local_778;
        *(undefined8 *)(pMVar23 + 0x20) = local_770;
        *(undefined8 *)(pMVar23 + 0x28) = local_768;
                    /* try { // try from 0028a4b4 to 0038a503 has its CatchHandler @ 0028a514 */
        *(undefined8 *)(pMVar23 + 0x30) = local_760;
        *(long *)(pMVar23 + 0x38) = local_758;
      }
      if (local_758 != 0) {
        piVar1 = (int *)(local_758 + 0x14);
        do {
          iVar14 = *piVar1;
          cVar2 = '\x01';
          bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar10) {
            *piVar1 = iVar14 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar14 == 1) {
          Mat::deallocate((Mat *)&local_790);
        }
      }
      local_758 = 0;
      local_780 = 0;
      local_768 = 0;
      local_770 = 0;
      local_778 = 0;
      if (0 < local_78c) {
                    /* try { // try from 0028a504 to 0038a54f has its CatchHandler @ 002899a4 */
        iVar14 = 0;
        puVar16 = local_750;
        do {
          *puVar16 = 0;
          iVar14 = iVar14 + 1;
                    /* catch() { ... } // from try @ 0028a4b4 with catch @ 0028a514 */
                    /* catch() { ... } // from try @ 00289f00 with catch @ 0028a518 */
                    /* catch() { ... } // from try @ 00289eb4 with catch @ 0028a51c */
          puVar16 = puVar16 + 1;
        } while (iVar14 < local_78c);
      }
      if (local_748 != &local_740) {
        fastFree(local_748);
      }
      iVar24 = iVar24 + 1;
      pMVar23 = pMVar23 + 0x60;
    } while (iVar24 != iVar11);
  }
  uVar21 = (ulong)iVar11;
                    /* try { // try from 0028a550 to 0038a59f has its CatchHandler @ 0028a7a8 */
  if (0 < iVar12) {
    iVar11 = 0;
    pMVar23 = pMVar22 + uVar21 * 0x60;
    do {
      iVar24 = iVar11;
      if (bVar3) {
        iVar24 = -1;
      }
      iVar14 = _InputArray::kind((_InputArray *)param_2);
      if ((iVar14 == 0x10000) && (iVar24 < 0)) {
        pMVar20 = *(Mat **)(param_2 + 8);
        local_6f8 = *(long *)(pMVar20 + 0x38);
        local_730 = *(undefined4 *)pMVar20;
        local_72c = *(int *)(pMVar20 + 4);
        local_728 = *(undefined4 *)(pMVar20 + 8);
                    /* try { // try from 0028a934 to 0038a947 has its CatchHandler @ 0028b748 */
        local_724 = *(undefined4 *)(pMVar20 + 0xc);
        local_720 = *(undefined8 *)(pMVar20 + 0x10);
        local_718 = *(undefined8 *)(pMVar20 + 0x18);
        local_710 = *(undefined8 *)(pMVar20 + 0x20);
        local_708 = *(undefined8 *)(pMVar20 + 0x28);
        local_700 = *(undefined8 *)(pMVar20 + 0x30);
        local_6f0 = &local_728;
        local_6e8 = &local_6e0;
        local_6d8 = 0;
        local_6e0 = 0;
        if (local_6f8 != 0) {
          piVar1 = (int *)(local_6f8 + 0x14);
          do {
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
        }
                    /* try { // try from 0028a980 to 0038a997 has its CatchHandler @ 0028b734 */
        if (*(int *)(pMVar20 + 4) < 3) {
          local_6e0 = **(undefined8 **)(pMVar20 + 0x48);
          local_6d8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
        }
        else {
          local_72c = 0;
          Mat::copySize((Mat *)&local_730,pMVar20);
        }
      }
      else {
        _InputArray::getMat_((int)param_2);
      }
      if (pMVar23 != (Mat *)&local_730) {
        if (local_6f8 != 0) {
          piVar1 = (int *)(local_6f8 + 0x14);
          do {
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = *piVar1 + 1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
        }
        if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_0028a5e4:
          *(undefined8 *)(pMVar23 + 0x38) = 0;
          *(undefined8 *)(pMVar23 + 0x10) = 0;
          *(undefined8 *)(pMVar23 + 0x28) = 0;
          *(undefined8 *)(pMVar23 + 0x20) = 0;
          *(undefined8 *)(pMVar23 + 0x18) = 0;
                    /* try { // try from 0028a600 to 0038a64f has its CatchHandler @ 0028a7ac */
          if (0 < *(int *)(pMVar23 + 4)) goto LAB_0028a604;
LAB_0028aa84:
          *(undefined4 *)pMVar23 = local_730;
LAB_0028a630:
          if (2 < local_72c) goto LAB_0028a8dc;
          *(int *)(pMVar23 + 4) = local_72c;
          *(undefined4 *)(pMVar23 + 8) = local_728;
          puVar15 = *(undefined8 **)(pMVar23 + 0x48);
          *(undefined4 *)(pMVar23 + 0xc) = local_724;
          *puVar15 = *local_6e8;
          puVar15[1] = local_6e8[1];
        }
        else {
          piVar1 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
          do {
            iVar24 = *piVar1;
            cVar2 = '\x01';
            bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar10) {
              *piVar1 = iVar24 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar24 != 1) goto LAB_0028a5e4;
          Mat::deallocate(pMVar23);
          *(undefined8 *)(pMVar23 + 0x38) = 0;
          *(undefined8 *)(pMVar23 + 0x10) = 0;
                    /* try { // try from 0028aa70 to 0038aabf has its CatchHandler @ 0028b5f0 */
          *(undefined8 *)(pMVar23 + 0x28) = 0;
          *(undefined8 *)(pMVar23 + 0x20) = 0;
          *(undefined8 *)(pMVar23 + 0x18) = 0;
          if (*(int *)(pMVar23 + 4) < 1) goto LAB_0028aa84;
LAB_0028a604:
          iVar24 = 0;
          puVar16 = *(undefined4 **)(pMVar23 + 0x40);
          do {
            *puVar16 = 0;
            iVar24 = iVar24 + 1;
            puVar16 = puVar16 + 1;
          } while (iVar24 < *(int *)(pMVar23 + 4));
          *(undefined4 *)pMVar23 = local_730;
          if (*(int *)(pMVar23 + 4) < 3) goto LAB_0028a630;
LAB_0028a8dc:
          Mat::copySize(pMVar23,(Mat *)&local_730);
        }
        *(undefined8 *)(pMVar23 + 0x10) = local_720;
                    /* try { // try from 0028a670 to 0038a6bf has its CatchHandler @ 0028a7b0 */
        *(undefined8 *)(pMVar23 + 0x18) = local_718;
        *(undefined8 *)(pMVar23 + 0x20) = local_710;
        *(undefined8 *)(pMVar23 + 0x28) = local_708;
        *(undefined8 *)(pMVar23 + 0x30) = local_700;
        *(long *)(pMVar23 + 0x38) = local_6f8;
      }
      if (local_6f8 != 0) {
        piVar1 = (int *)(local_6f8 + 0x14);
        do {
          iVar24 = *piVar1;
          cVar2 = '\x01';
          bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar10) {
            *piVar1 = iVar24 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar24 == 1) {
          Mat::deallocate((Mat *)&local_730);
        }
      }
      local_6f8 = 0;
      local_720 = 0;
      local_708 = 0;
      local_710 = 0;
      local_718 = 0;
      if (0 < local_72c) {
                    /* try { // try from 0028a6e0 to 0038a72f has its CatchHandler @ 0028a7b4 */
        iVar24 = 0;
        puVar16 = local_6f0;
        do {
          *puVar16 = 0;
          iVar24 = iVar24 + 1;
          puVar16 = puVar16 + 1;
        } while (iVar24 < local_72c);
      }
      if (local_6e8 != &local_6e0) {
        fastFree(local_6e8);
      }
      iVar11 = iVar11 + 1;
      pMVar23 = pMVar23 + 0x60;
    } while (iVar11 != iVar12);
  }
  mixChannels(pMVar22,uVar21,pMVar22 + uVar21 * 0x60,(long)iVar12,*(int **)param_3,
              (ulong)(*(long *)(param_3 + 8) - (long)*(int **)param_3 >> 2) >> 1);
                    /* try { // try from 0028a750 to 0038a79b has its CatchHandler @ 0028a7a4 */
  if (local_6d0 != local_6c0) {
    if (local_6d0 != (Mat *)0x0) {
      pMVar22 = local_6d0 + *(long *)(local_6d0 + -8) * 0x60;
      pMVar23 = pMVar22;
      if (local_6d0 != pMVar22) {
        do {
          pMVar22 = pMVar23 + -0x60;
          if (*(long *)(pMVar23 + -0x28) != 0) {
            piVar1 = (int *)(*(long *)(pMVar23 + -0x28) + 0x14);
            do {
              iVar11 = *piVar1;
              cVar2 = '\x01';
              bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar10) {
                *piVar1 = iVar11 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
            if (iVar11 == 1) {
              Mat::deallocate(pMVar22);
            }
          }
                    /* try { // try from 0028a79c to 0038a7b7 has its CatchHandler @ 002899a4 */
          *(undefined8 *)(pMVar23 + -0x28) = 0;
                    /* catch() { ... } // from try @ 0028a750 with catch @ 0028a7a4 */
          *(undefined8 *)(pMVar23 + -0x50) = 0;
                    /* catch() { ... } // from try @ 0028a550 with catch @ 0028a7a8 */
                    /* catch() { ... } // from try @ 0028a600 with catch @ 0028a7ac */
          *(undefined8 *)(pMVar23 + -0x38) = 0;
                    /* catch() { ... } // from try @ 0028a670 with catch @ 0028a7b0 */
          *(undefined8 *)(pMVar23 + -0x40) = 0;
                    /* catch() { ... } // from try @ 0028a6e0 with catch @ 0028a7b4 */
          *(undefined8 *)(pMVar23 + -0x48) = 0;
          if (0 < *(int *)(pMVar23 + -0x5c)) {
            iVar11 = 0;
            puVar16 = *(undefined4 **)(pMVar23 + -0x20);
            do {
              *puVar16 = 0;
              iVar11 = iVar11 + 1;
              puVar16 = puVar16 + 1;
            } while (iVar11 < *(int *)(pMVar23 + -0x5c));
          }
          if (*(Mat **)(pMVar23 + -0x18) != pMVar23 + -0x10) {
            fastFree(*(Mat **)(pMVar23 + -0x18));
          }
                    /* catch() { ... } // from try @ 0028b174 with catch @ 0028a7f4
                       catch() { ... } // from try @ 0028b5cc with catch @ 0028a7f4
                       catch() { ... } // from try @ 0028baf4 with catch @ 0028a7f4 */
          pMVar23 = pMVar22;
        } while (local_6d0 != pMVar22);
      }
      operator_delete__(pMVar22 + -8);
    }
    local_6d0 = local_6c0;
    local_6c8 = 0x12;
  }
  pMVar22 = aMStack_60;
  do {
    if (*(long *)(pMVar22 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(pMVar22 + 0x38) + 0x14);
      do {
        iVar11 = *piVar1;
        cVar2 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar10) {
          *piVar1 = iVar11 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar11 == 1) {
        Mat::deallocate(pMVar22);
      }
    }
                    /* try { // try from 0028a850 to 0038a85f has its CatchHandler @ 0028b770 */
    *(undefined8 *)(pMVar22 + 0x38) = 0;
    *(undefined8 *)(pMVar22 + 0x10) = 0;
    *(undefined8 *)(pMVar22 + 0x28) = 0;
    *(undefined8 *)(pMVar22 + 0x20) = 0;
    *(undefined8 *)(pMVar22 + 0x18) = 0;
                    /* try { // try from 0028a86c to 0038a877 has its CatchHandler @ 0028b768 */
    if (0 < *(int *)(pMVar22 + 4)) {
      iVar11 = 0;
      puVar16 = *(undefined4 **)(pMVar22 + 0x40);
      do {
        *puVar16 = 0;
        iVar11 = iVar11 + 1;
        puVar16 = puVar16 + 1;
      } while (iVar11 < *(int *)(pMVar22 + 4));
    }
    if (*(Mat **)(pMVar22 + 0x48) != pMVar22 + 0x50) {
      fastFree(*(Mat **)(pMVar22 + 0x48));
    }
    pMVar22 = pMVar22 + -0x60;
  } while (pMVar22 != (Mat *)&local_720);
                    /* try { // try from 0028a8c0 to 0038a8d7 has its CatchHandler @ 0028b760 */
  return;
}


==================================================================

### FUNC 0028ad10 (96 bytes) name=~vector

/* std::vector<cv::UMat, std::allocator<cv::UMat> >::~vector() */

void __thiscall
std::vector<cv::UMat,std::allocator<cv::UMat>>::~vector
          (vector<cv::UMat,std::allocator<cv::UMat>> *this)

{
  UMat *this_00;
  UMat *pUVar1;
  
  this_00 = *(UMat **)this;
  pUVar1 = *(UMat **)(this + 8);
  if (this_00 != pUVar1) {
    do {
                    /* try { // try from 0028ad34 to 0038ad7f has its CatchHandler @ 0028b5e4 */
      cv::UMat::~UMat(this_00);
      this_00 = this_00 + 0x50;
    } while (pUVar1 != this_00);
    pUVar1 = *(UMat **)this;
  }
  if (pUVar1 != (UMat *)0x0) {
    operator_delete(pUVar1);
    return;
  }
  return;
}


==================================================================

### FUNC 0028ad8c (1732 bytes) name=extractChannel

/* cv::extractChannel(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::extractChannel(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  UMat *pUVar1;
  uint uVar2;
  bool bVar3;
  UMat *pUVar4;
  UMat *pUVar5;
  UMat *pUVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char cVar9;
  int iVar10;
  ulong uVar11;
  char *pcVar12;
  undefined8 *puVar13;
  Mat *pMVar14;
  int *piVar15;
  ulong local_128;
  UMat *local_120;
  UMat *local_118;
  UMat *local_110;
  UMat *local_108;
  UMat *local_100;
  UMat *local_f8;
  undefined4 local_f0 [2];
  UMat **local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8 [2];
  UMat **local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  long local_a0;
  undefined8 local_98;
  int *local_90;
  undefined8 *local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  long local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 *local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 0028ada0 to 0038adef has its CatchHandler @ 0028b5e0 */
  uVar11 = _InputArray::type(param_1,-1);
  uVar2 = (uint)uVar11 & 7;
  if (((int)((uint)((uVar11 & 0xffffffff) >> 3) & 0x1ff) < param_3) || (param_3 < 0)) {
    local_60 = 0;
    local_58 = 0;
    pcVar12 = (char *)String::allocate((String *)&local_60,0x14);
    uVar8 = s_0_<__coi_&&_coi_<_cn_004636a0._8_8_;
    uVar7 = s_0_<__coi_&&_coi_<_cn_004636a0._0_8_;
    *(undefined4 *)(pcVar12 + 0x10) = s_0_<__coi_&&_coi_<_cn_004636a0._16_4_;
    *(undefined8 *)pcVar12 = uVar7;
    *(undefined8 *)(pcVar12 + 8) = uVar8;
    error(-0xd7,(String *)&local_60,"void cv::extractChannel(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x582);
    String::deallocate((String *)&local_60);
    local_128 = (ulong)(uint)param_3;
    cVar9 = ocl::useOpenCL();
  }
  else {
    local_128 = (ulong)(uint)param_3;
    cVar9 = ocl::useOpenCL();
  }
  if (cVar9 != '\0') {
    iVar10 = _InputArray::dims(param_1,-1);
    if ((iVar10 < 3) && (iVar10 = _InputArray::kind((_InputArray *)param_2), iVar10 == 0xa0000)) {
      _InputArray::getUMat((int)param_1);
      _OutputArray::create(param_2,local_bc,local_90,uVar2,-1,false,0);
      _InputArray::getUMat((int)param_2);
      local_120 = (UMat *)0x0;
      local_118 = (UMat *)0x0;
      local_110 = (UMat *)0x0;
      local_120 = operator_new(0x50);
      local_110 = local_120 + 0x50;
      *(undefined4 *)local_120 = local_c0;
      *(int *)(local_120 + 4) = local_bc;
      *(int *)(local_120 + 8) = local_b8;
      *(undefined8 *)(local_120 + 0x10) = local_b0;
                    /* try { // try from 0028b0ac to 0038b0bf has its CatchHandler @ 0028b83c */
      *(undefined4 *)(local_120 + 0xc) = local_b4;
      *(long *)(local_120 + 0x20) = local_a0;
      *(undefined4 *)(local_120 + 0x18) = (undefined4)local_a8;
      *(undefined8 *)(local_120 + 0x28) = local_98;
      *(UMat **)(local_120 + 0x30) = local_120 + 8;
      *(UMat **)(local_120 + 0x38) = local_120 + 0x40;
      *(undefined8 *)(local_120 + 0x48) = 0;
      *(undefined8 *)(local_120 + 0x40) = 0;
      if (local_a0 != 0) {
        piVar15 = (int *)(local_a0 + 0x10);
        do {
          cVar9 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
          if (bVar3) {
            *piVar15 = *piVar15 + 1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
      }
      if (local_bc < 3) {
        puVar13 = *(undefined8 **)(local_120 + 0x38);
        *puVar13 = *local_88;
        puVar13[1] = local_88[1];
      }
      else {
        *(undefined4 *)(local_120 + 4) = 0;
        local_118 = local_120;
        UMat::copySize(local_120,(UMat *)&local_c0);
      }
      local_118 = local_110;
      local_108 = (UMat *)0x0;
      local_e0 = 0;
      local_dc = 0;
                    /* try { // try from 0028b12c to 0038b133 has its CatchHandler @ 0028b7e0 */
      local_f0[0] = 0x10b0000;
      local_100 = (UMat *)0x0;
      local_f8 = (UMat *)0x0;
      local_e8 = &local_120;
      local_108 = operator_new(0x50);
      local_f8 = local_108 + 0x50;
      *(undefined4 *)local_108 = (undefined4)local_60;
      *(int *)(local_108 + 4) = local_60._4_4_;
                    /* try { // try from 0028b16c to 0038b173 has its CatchHandler @ 0028b780 */
                    /* try { // try from 0028b174 to 0038b44b has its CatchHandler @ 0028a7f4 */
      *(undefined4 *)(local_108 + 8) = (undefined4)local_58;
      *(undefined8 *)(local_108 + 0x10) = local_50;
      *(undefined4 *)(local_108 + 0xc) = local_58._4_4_;
      *(long *)(local_108 + 0x20) = local_40;
      *(undefined4 *)(local_108 + 0x18) = (undefined4)local_48;
      *(undefined8 *)(local_108 + 0x28) = local_38;
      *(UMat **)(local_108 + 0x30) = local_108 + 8;
      *(UMat **)(local_108 + 0x38) = local_108 + 0x40;
      *(undefined8 *)(local_108 + 0x48) = 0;
      *(undefined8 *)(local_108 + 0x40) = 0;
      if (local_40 != 0) {
        piVar15 = (int *)(local_40 + 0x10);
        do {
          cVar9 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
          if (bVar3) {
            *piVar15 = *piVar15 + 1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
      }
      if (local_60._4_4_ < 3) {
        puVar13 = *(undefined8 **)(local_108 + 0x38);
        *puVar13 = *local_28;
        puVar13[1] = local_28[1];
      }
      else {
        *(undefined4 *)(local_108 + 4) = 0;
        local_100 = local_108;
        UMat::copySize(local_108,(UMat *)&local_60);
      }
      local_100 = local_f8;
      local_c8 = 0;
      local_c4 = 0;
      local_d8[0] = 0x430b0000;
      local_d0 = &local_108;
      mixChannels((_InputArray *)local_f0,(_InputOutputArray *)local_d8,(int *)&local_128,1);
      pUVar5 = local_100;
      pUVar4 = local_100;
      for (pUVar1 = local_108; pUVar1 != pUVar5; pUVar1 = pUVar1 + 0x50) {
        UMat::~UMat(pUVar1);
        pUVar4 = local_108;
      }
      pUVar1 = local_120;
      pUVar5 = local_118;
      pUVar6 = local_118;
      if (pUVar4 != (UMat *)0x0) {
        operator_delete(pUVar4);
        pUVar1 = local_120;
        pUVar5 = local_118;
        pUVar6 = local_118;
      }
      for (; pUVar4 = local_118, pUVar1 != local_118; pUVar1 = pUVar1 + 0x50) {
        local_118 = pUVar6;
        UMat::~UMat(pUVar1);
        pUVar5 = local_120;
        pUVar6 = local_118;
        local_118 = pUVar4;
      }
      local_118 = pUVar6;
      if (pUVar5 != (UMat *)0x0) {
        operator_delete(pUVar5);
      }
      UMat::~UMat((UMat *)&local_60);
      UMat::~UMat((UMat *)&local_c0);
      return;
    }
  }
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar14 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar14;
    local_b0 = *(undefined8 *)(pMVar14 + 0x10);
    local_bc = *(int *)(pMVar14 + 4);
    local_b8 = *(int *)(pMVar14 + 8);
    local_b4 = *(undefined4 *)(pMVar14 + 0xc);
    local_a8 = *(undefined8 *)(pMVar14 + 0x18);
    local_a0 = *(long *)(pMVar14 + 0x20);
    local_98 = *(undefined8 *)(pMVar14 + 0x28);
    local_90 = *(int **)(pMVar14 + 0x30);
    local_88 = *(undefined8 **)(pMVar14 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != (undefined8 *)0x0) {
      piVar15 = (int *)((long)local_88 + 0x14);
      do {
        cVar9 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
        if (bVar3) {
          *piVar15 = *piVar15 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar14 + 0x48);
      local_68 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar14);
                    /* try { // try from 0028b44c to 0038b45b has its CatchHandler @ 0028b5d4 */
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
                    /* try { // try from 0028ae10 to 0038ae5b has its CatchHandler @ 0028b5dc */
  _OutputArray::create(param_2,local_bc,local_80,uVar2,-1,false,0);
  iVar10 = _InputArray::kind((_InputArray *)param_2);
  if (iVar10 == 0x10000) {
    pMVar14 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar2 = *(uint *)pMVar14;
    local_50 = *(undefined8 *)(pMVar14 + 0x10);
    local_60 = *(ulong *)pMVar14;
    local_58 = *(undefined8 *)(pMVar14 + 8);
    local_48 = *(undefined8 *)(pMVar14 + 0x18);
    local_40 = *(long *)(pMVar14 + 0x20);
    local_38 = *(undefined8 *)(pMVar14 + 0x28);
    local_30 = *(undefined8 *)(pMVar14 + 0x30);
    local_28 = *(undefined8 **)(pMVar14 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != (undefined8 *)0x0) {
      piVar15 = (int *)((long)local_28 + 0x14);
      do {
        cVar9 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
        if (bVar3) {
          *piVar15 = *piVar15 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar14 + 0x48);
      local_8 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar2;
      Mat::copySize((Mat *)&local_60,pMVar14);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  mixChannels((Mat *)&local_c0,1,(Mat *)&local_60,1,(int *)&local_128,1);
  if (local_28 != (undefined8 *)0x0) {
    piVar15 = (int *)((long)local_28 + 0x14);
    do {
      iVar10 = *piVar15;
                    /* try { // try from 0028ae7c to 0038aecf has its CatchHandler @ 0028b5d8 */
      cVar9 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
      if (bVar3) {
        *piVar15 = iVar10 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = (undefined8 *)0x0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar10 = 0;
    puVar13 = local_20;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar10 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != (undefined8 *)0x0) {
    piVar15 = (int *)((long)local_88 + 0x14);
    do {
      iVar10 = *piVar15;
      cVar9 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar15,0x10);
      if (bVar3) {
        *piVar15 = iVar10 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = (undefined8 *)0x0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    piVar15 = local_80;
    do {
      *piVar15 = 0;
      iVar10 = iVar10 + 1;
      piVar15 = piVar15 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
                    /* try { // try from 0028af6c to 0038af73 has its CatchHandler @ 0028b834 */
  return;
}


==================================================================

### FUNC 0028b55c (1860 bytes) name=insertChannel

/* cv::insertChannel(cv::_InputArray const&, cv::_InputOutputArray const&, int) */

void cv::insertChannel(_InputArray *param_1,_InputOutputArray *param_2,int param_3)

{
  int *piVar1;
  UMat *pUVar2;
  uint uVar3;
  bool bVar4;
  UMat *pUVar5;
  UMat *pUVar6;
  UMat *pUVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  char cVar13;
  int iVar14;
  ulong uVar15;
  ulong uVar16;
  char *pcVar17;
  undefined8 *puVar18;
  Mat *pMVar19;
  undefined4 *puVar20;
  long local_128;
  UMat *local_120;
  UMat *local_118;
  UMat *local_110;
  UMat *local_108;
  UMat *local_100;
  UMat *local_f8;
  undefined4 local_f0 [2];
  UMat **local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8 [2];
  UMat **local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  long local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 *local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  long local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 *local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar15 = _InputArray::type(param_1,-1);
  uVar16 = _InputArray::type((_InputArray *)param_2,-1);
  cVar13 = _InputArray::sameSize(param_1,(_InputArray *)param_2);
  if ((((uint)uVar15 & 7) != ((uint)uVar16 & 7)) || (cVar13 == '\0')) {
                    /* try { // try from 0028b5c8 to 0038b5cb has its CatchHandler @ 0028b5d0 */
                    /* try { // try from 0028b5cc to 0038b63b has its CatchHandler @ 0028a7f4 */
                    /* catch() { ... } // from try @ 0028b5c8 with catch @ 0028b5d0 */
    local_60 = 0;
                    /* catch() { ... } // from try @ 0028b44c with catch @ 0028b5d4 */
    local_58 = 0;
                    /* catch() { ... } // from try @ 0028ae7c with catch @ 0028b5d8 */
    pcVar17 = (char *)String::allocate((String *)&local_60,0x27);
    cVar13 = s__src_sameSize__dst_____sdepth____004636e0[0x26];
    uVar12 = s__src_sameSize__dst_____sdepth____004636e0._36_2_;
    uVar11 = s__src_sameSize__dst_____sdepth____004636e0._24_8_;
    uVar10 = s__src_sameSize__dst_____sdepth____004636e0._16_8_;
    uVar9 = s__src_sameSize__dst_____sdepth____004636e0._8_8_;
    uVar8 = s__src_sameSize__dst_____sdepth____004636e0._0_8_;
                    /* catch() { ... } // from try @ 0028ae10 with catch @ 0028b5dc */
                    /* catch() { ... } // from try @ 0028ada0 with catch @ 0028b5e0 */
                    /* catch() { ... } // from try @ 0028ad34 with catch @ 0028b5e4 */
                    /* catch() { ... } // from try @ 0028acc4 with catch @ 0028b5e8 */
                    /* catch() { ... } // from try @ 0028ab94 with catch @ 0028b5ec */
                    /* catch() { ... } // from try @ 0028aa70 with catch @ 0028b5f0 */
                    /* catch() { ... } // from try @ 0028ac3c with catch @ 0028b5f4 */
                    /* catch() { ... } // from try @ 0028abe0 with catch @ 0028b604 */
                    /* catch() { ... } // from try @ 0028ab4c with catch @ 0028b618 */
    *(undefined4 *)(pcVar17 + 0x20) = s__src_sameSize__dst_____sdepth____004636e0._32_4_;
    *(undefined2 *)(pcVar17 + 0x24) = uVar12;
    pcVar17[0x26] = cVar13;
    *(undefined8 *)pcVar17 = uVar8;
    *(undefined8 *)(pcVar17 + 8) = uVar9;
    *(undefined8 *)(pcVar17 + 0x10) = uVar10;
    *(undefined8 *)(pcVar17 + 0x18) = uVar11;
    error(-0xd7,(String *)&local_60,
          "void cv::insertChannel(cv::InputArray, cv::InputOutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x598);
    String::deallocate((String *)&local_60);
  }
                    /* try { // try from 0028b63c to 0038b687 has its CatchHandler @ 0028b6a0 */
  if (((int)((uint)((uVar16 & 0xffffffff) >> 3) & 0x1ff) < param_3 ||
       ((uVar15 & 0xffffffff) >> 3 & 0x1ff) != 0) || (param_3 < 0)) {
                    /* catch() { ... } // from try @ 0028b12c with catch @ 0028b7e0 */
    local_60 = 0;
    local_58 = 0;
    pcVar17 = (char *)String::allocate((String *)&local_60,0x21);
    uVar11 = s_0_<__coi_&&_coi_<_dcn_&&_scn____1_004636b8._24_8_;
    uVar10 = s_0_<__coi_&&_coi_<_dcn_&&_scn____1_004636b8._16_8_;
    uVar9 = s_0_<__coi_&&_coi_<_dcn_&&_scn____1_004636b8._8_8_;
    uVar8 = s_0_<__coi_&&_coi_<_dcn_&&_scn____1_004636b8._0_8_;
    pcVar17[0x20] = s_0_<__coi_&&_coi_<_dcn_&&_scn____1_004636b8[0x20];
    *(undefined8 *)pcVar17 = uVar8;
    *(undefined8 *)(pcVar17 + 8) = uVar9;
    *(undefined8 *)(pcVar17 + 0x10) = uVar10;
    *(undefined8 *)(pcVar17 + 0x18) = uVar11;
    error(-0xd7,(String *)&local_60,
          "void cv::insertChannel(cv::InputArray, cv::InputOutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/convert.cpp",0x599);
                    /* catch() { ... } // from try @ 0028af6c with catch @ 0028b834 */
                    /* catch() { ... } // from try @ 0028b0ac with catch @ 0028b83c */
    String::deallocate((String *)&local_60);
    local_128 = (ulong)(uint)param_3 << 0x20;
    cVar13 = ocl::useOpenCL();
  }
  else {
    local_128 = (ulong)(uint)param_3 << 0x20;
    cVar13 = ocl::useOpenCL();
  }
  if (cVar13 != '\0') {
    iVar14 = _InputArray::dims(param_1,-1);
    if ((iVar14 < 3) && (iVar14 = _InputArray::kind((_InputArray *)param_2), iVar14 == 0xa0000)) {
      _InputArray::getUMat((int)param_1);
      _InputArray::getUMat((int)param_2);
      local_120 = (UMat *)0x0;
      local_118 = (UMat *)0x0;
      local_110 = (UMat *)0x0;
      local_120 = operator_new(0x50);
      local_110 = local_120 + 0x50;
      *(undefined4 *)local_120 = local_c0;
      *(int *)(local_120 + 4) = local_bc;
                    /* try { // try from 0028b8e4 to 0038b933 has its CatchHandler @ 0028bb0c */
      *(undefined4 *)(local_120 + 8) = local_b8;
      *(undefined8 *)(local_120 + 0x10) = local_b0;
      *(undefined4 *)(local_120 + 0xc) = local_b4;
      *(long *)(local_120 + 0x20) = local_a0;
      *(undefined4 *)(local_120 + 0x18) = (undefined4)local_a8;
      *(undefined8 *)(local_120 + 0x28) = local_98;
      *(UMat **)(local_120 + 0x30) = local_120 + 8;
      *(UMat **)(local_120 + 0x38) = local_120 + 0x40;
      *(undefined8 *)(local_120 + 0x48) = 0;
      *(undefined8 *)(local_120 + 0x40) = 0;
      if (local_a0 != 0) {
        piVar1 = (int *)(local_a0 + 0x10);
        do {
          cVar13 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar13 = ExclusiveMonitorsStatus();
          }
        } while (cVar13 != '\0');
      }
      if (local_bc < 3) {
        puVar18 = *(undefined8 **)(local_120 + 0x38);
        *puVar18 = *local_88;
                    /* try { // try from 0028b954 to 0038b99f has its CatchHandler @ 0028bb10 */
        puVar18[1] = local_88[1];
      }
      else {
        *(undefined4 *)(local_120 + 4) = 0;
        local_118 = local_120;
        UMat::copySize(local_120,(UMat *)&local_c0);
      }
      local_118 = local_110;
      local_108 = (UMat *)0x0;
      local_e0 = 0;
      local_dc = 0;
      local_f0[0] = 0x10b0000;
      local_100 = (UMat *)0x0;
      local_f8 = (UMat *)0x0;
      local_e8 = &local_120;
      local_108 = operator_new(0x50);
      local_f8 = local_108 + 0x50;
      *(undefined4 *)local_108 = (undefined4)local_60;
      *(int *)(local_108 + 4) = local_60._4_4_;
                    /* try { // try from 0028b9c0 to 0038ba0f has its CatchHandler @ 0028bb14 */
      *(undefined4 *)(local_108 + 8) = (undefined4)local_58;
      *(undefined8 *)(local_108 + 0x10) = local_50;
      *(undefined4 *)(local_108 + 0xc) = local_58._4_4_;
      *(long *)(local_108 + 0x20) = local_40;
      *(undefined4 *)(local_108 + 0x18) = (undefined4)local_48;
      *(undefined8 *)(local_108 + 0x28) = local_38;
      *(UMat **)(local_108 + 0x30) = local_108 + 8;
      *(UMat **)(local_108 + 0x38) = local_108 + 0x40;
      *(undefined8 *)(local_108 + 0x48) = 0;
      *(undefined8 *)(local_108 + 0x40) = 0;
      if (local_40 != 0) {
        piVar1 = (int *)(local_40 + 0x10);
        do {
          cVar13 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar13 = ExclusiveMonitorsStatus();
          }
        } while (cVar13 != '\0');
      }
      if (local_60._4_4_ < 3) {
        puVar18 = *(undefined8 **)(local_108 + 0x38);
        *puVar18 = *local_28;
                    /* try { // try from 0028ba30 to 0038ba7b has its CatchHandler @ 0028bb18 */
        puVar18[1] = local_28[1];
      }
      else {
        *(undefined4 *)(local_108 + 4) = 0;
        local_100 = local_108;
        UMat::copySize(local_108,(UMat *)&local_60);
      }
      local_100 = local_f8;
      local_c8 = 0;
      local_c4 = 0;
      local_d8[0] = 0x430b0000;
      local_d0 = &local_108;
      mixChannels((_InputArray *)local_f0,(_InputOutputArray *)local_d8,(int *)&local_128,1);
      pUVar6 = local_100;
      pUVar5 = local_100;
      for (pUVar2 = local_108; pUVar2 != pUVar6; pUVar2 = pUVar2 + 0x50) {
        UMat::~UMat(pUVar2);
        pUVar5 = local_108;
      }
      pUVar2 = local_120;
      pUVar6 = local_118;
      pUVar7 = local_118;
      if (pUVar5 != (UMat *)0x0) {
        operator_delete(pUVar5);
        pUVar2 = local_120;
        pUVar6 = local_118;
        pUVar7 = local_118;
      }
                    /* try { // try from 0028baa0 to 0038baf3 has its CatchHandler @ 0028bb08 */
      for (; pUVar5 = local_118, pUVar2 != local_118; pUVar2 = pUVar2 + 0x50) {
        local_118 = pUVar7;
        UMat::~UMat(pUVar2);
        pUVar6 = local_120;
        pUVar7 = local_118;
        local_118 = pUVar5;
      }
      local_118 = pUVar7;
      if (pUVar6 != (UMat *)0x0) {
        operator_delete(pUVar6);
      }
      UMat::~UMat((UMat *)&local_60);
      UMat::~UMat((UMat *)&local_c0);
      return;
    }
  }
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x10000) {
    pMVar19 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar19;
    local_b0 = *(undefined8 *)(pMVar19 + 0x10);
    local_bc = *(int *)(pMVar19 + 4);
    local_b8 = *(undefined4 *)(pMVar19 + 8);
    local_b4 = *(undefined4 *)(pMVar19 + 0xc);
    local_a8 = *(undefined8 *)(pMVar19 + 0x18);
    local_a0 = *(long *)(pMVar19 + 0x20);
    local_98 = *(undefined8 *)(pMVar19 + 0x28);
    local_90 = *(undefined8 *)(pMVar19 + 0x30);
    local_88 = *(undefined8 **)(pMVar19 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != (undefined8 *)0x0) {
      piVar1 = (int *)((long)local_88 + 0x14);
      do {
        cVar13 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar13 = ExclusiveMonitorsStatus();
        }
      } while (cVar13 != '\0');
    }
    if (*(int *)(pMVar19 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar19 + 0x48);
      local_68 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar19);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar14 = _InputArray::kind((_InputArray *)param_2);
  if (iVar14 == 0x10000) {
                    /* try { // try from 0028baf4 to 0038bb1b has its CatchHandler @ 0028a7f4 */
    pMVar19 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar3 = *(uint *)pMVar19;
                    /* catch() { ... } // from try @ 0028baa0 with catch @ 0028bb08 */
                    /* catch() { ... } // from try @ 0028b8e4 with catch @ 0028bb0c */
    local_50 = *(undefined8 *)(pMVar19 + 0x10);
                    /* catch() { ... } // from try @ 0028b954 with catch @ 0028bb10 */
    local_60 = *(ulong *)pMVar19;
                    /* catch() { ... } // from try @ 0028b9c0 with catch @ 0028bb14 */
                    /* catch() { ... } // from try @ 0028ba30 with catch @ 0028bb18 */
                    /* try { // try from 0028bb1c to 0038bb6f has its CatchHandler @ 0028bb1c
                       catch() { ... } // from try @ 0028bb1c with catch @ 0028bb1c
                       catch() { ... } // from try @ 0028bb80 with catch @ 0028bb1c */
    local_58 = *(undefined8 *)(pMVar19 + 8);
    local_48 = *(undefined8 *)(pMVar19 + 0x18);
    local_40 = *(long *)(pMVar19 + 0x20);
    local_38 = *(undefined8 *)(pMVar19 + 0x28);
    local_30 = *(undefined8 *)(pMVar19 + 0x30);
    local_28 = *(undefined8 **)(pMVar19 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != (undefined8 *)0x0) {
      piVar1 = (int *)((long)local_28 + 0x14);
      do {
                    /* try { // try from 0028bb70 to 0038bb7f has its CatchHandler @ 0028bca4 */
        cVar13 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar13 = ExclusiveMonitorsStatus();
        }
      } while (cVar13 != '\0');
    }
                    /* try { // try from 0028bb80 to 0038bcb7 has its CatchHandler @ 0028bb1c */
    if (*(int *)(pMVar19 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar19 + 0x48);
      local_8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar3;
      Mat::copySize((Mat *)&local_60,pMVar19);
    }
  }
  else {
                    /* catch() { ... } // from try @ 0028b63c with catch @ 0028b6a0 */
                    /* catch() { ... } // from try @ 0028aa30 with catch @ 0028b6a4 */
    _InputArray::getMat_((int)param_2);
  }
                    /* try { // try from 0028b6c8 to 0038b71b has its CatchHandler @ 0028b730 */
  mixChannels((Mat *)&local_c0,1,(Mat *)&local_60,1,(int *)&local_128,1);
  if (local_28 != (undefined8 *)0x0) {
    piVar1 = (int *)((long)local_28 + 0x14);
    do {
      iVar14 = *piVar1;
      cVar13 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar14 + -1;
        cVar13 = ExclusiveMonitorsStatus();
      }
    } while (cVar13 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = (undefined8 *)0x0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar14 = 0;
    puVar18 = local_20;
    do {
      *(undefined4 *)puVar18 = 0;
      iVar14 = iVar14 + 1;
      puVar18 = (undefined8 *)((long)puVar18 + 4);
    } while (iVar14 < local_60._4_4_);
  }
                    /* catch() { ... } // from try @ 0028b6c8 with catch @ 0028b730 */
                    /* catch() { ... } // from try @ 0028a980 with catch @ 0028b734 */
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
                    /* catch() { ... } // from try @ 0028a934 with catch @ 0028b748 */
  if (local_88 != (undefined8 *)0x0) {
    piVar1 = (int *)((long)local_88 + 0x14);
    do {
      iVar14 = *piVar1;
      cVar13 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar14 + -1;
        cVar13 = ExclusiveMonitorsStatus();
      }
    } while (cVar13 != '\0');
                    /* catch() { ... } // from try @ 0028a8c0 with catch @ 0028b760 */
    if (iVar14 == 1) {
                    /* catch() { ... } // from try @ 0028a86c with catch @ 0028b768 */
      Mat::deallocate((Mat *)&local_c0);
    }
  }
                    /* catch() { ... } // from try @ 0028a850 with catch @ 0028b770 */
  local_88 = (undefined8 *)0x0;
  local_b0 = 0;
                    /* catch() { ... } // from try @ 0028b16c with catch @ 0028b780 */
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
                    /* catch() { ... } // from try @ 0028b50c with catch @ 0028b78c */
  if (0 < local_bc) {
    iVar14 = 0;
    puVar20 = local_80;
    do {
      *puVar20 = 0;
      iVar14 = iVar14 + 1;
      puVar20 = puVar20 + 1;
    } while (iVar14 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0028bdc0 (880 bytes) name=FUN_0028bdc0

void FUN_0028bdc0(undefined1 *param_1,long param_2,char *param_3,long param_4,undefined1 *param_5,
                 long param_6,int *param_7,ulong *param_8)

{
  ulong uVar1;
  int iVar2;
  undefined1 *puVar3;
  int iVar4;
  undefined1 *puVar5;
  ulong uVar6;
  undefined8 *puVar7;
  ulong uVar8;
  int iVar9;
  ulong uVar10;
  char *pcVar11;
  ulong uVar12;
  long lVar13;
  ulong uVar14;
  ulong uVar15;
  undefined8 *puVar16;
  undefined8 uVar17;
  
  uVar6 = *param_8;
  iVar9 = param_7[1];
  iVar4 = iVar9 + -1;
  param_7[1] = iVar4;
  if (iVar9 != 0) {
    iVar9 = *param_7;
    uVar15 = -(long)param_1;
    do {
      iVar2 = iVar4;
      if (0 < iVar9) {
        iVar4 = 0;
        puVar3 = param_1;
        puVar5 = param_5;
        pcVar11 = param_3;
        uVar12 = uVar15;
        do {
          if ((*pcVar11 != '\0') && (uVar6 != 0)) {
            if ((puVar3 < puVar5 + 0x10 && puVar5 < puVar3 + 0x10) || (uVar6 < 0x16)) {
              uVar8 = 0;
              do {
                puVar5[uVar8] = puVar3[uVar8];
                uVar8 = uVar8 + 1;
              } while (uVar8 != uVar6);
            }
            else {
              uVar8 = uVar12 & 0xf;
              if (uVar6 < (uVar12 & 0xf)) {
                uVar8 = uVar6;
              }
              uVar10 = uVar8;
              if ((((uVar8 != 0) && (*puVar5 = *puVar3, uVar8 != 1)) &&
                  (puVar5[1] = puVar3[1], uVar8 != 2)) &&
                 ((puVar5[2] = puVar3[2], uVar8 != 3 && (puVar5[3] = puVar3[3], uVar8 != 4)))) {
                puVar5[4] = puVar3[4];
                if (uVar8 == 5) {
                  uVar10 = 5;
                }
                else {
                  puVar5[5] = puVar3[5];
                  if (((uVar8 != 6) && (puVar5[6] = puVar3[6], uVar8 != 7)) &&
                     ((puVar5[7] = puVar3[7], uVar8 != 8 &&
                      ((((puVar5[8] = puVar3[8], uVar8 != 9 && (puVar5[9] = puVar3[9], uVar8 != 10))
                        && (puVar5[10] = puVar3[10], uVar8 != 0xb)) &&
                       ((puVar5[0xb] = puVar3[0xb], uVar8 != 0xc &&
                        (puVar5[0xc] = puVar3[0xc], uVar8 != 0xd)))))))) {
                    puVar5[0xd] = puVar3[0xd];
                    if (uVar8 == 0xf) {
                      puVar5[0xe] = puVar3[0xe];
                    }
                    else {
                      uVar10 = 0xe;
                    }
                  }
                }
              }
              uVar1 = ((uVar6 - uVar8) - 0x10 >> 4) + 1;
              lVar13 = uVar1 * 0x10;
              if (0xe < (uVar6 - 1) - uVar8) {
                uVar14 = 0;
                puVar7 = (undefined8 *)(puVar5 + uVar8);
                puVar16 = (undefined8 *)(puVar3 + uVar8);
                do {
                  uVar17 = *puVar16;
                  uVar14 = uVar14 + 1;
                  puVar7[1] = puVar16[1];
                  *puVar7 = uVar17;
                  puVar7 = puVar7 + 2;
                  puVar16 = puVar16 + 2;
                } while (uVar14 < uVar1);
                uVar10 = uVar10 + lVar13;
                if (uVar6 - uVar8 == lVar13) goto LAB_0028c0a4;
              }
              uVar8 = uVar10 + 1;
              puVar5[uVar10] = puVar3[uVar10];
              if (uVar8 < uVar6) {
                uVar1 = uVar10 + 2;
                puVar5[uVar8] = puVar3[uVar8];
                if (uVar1 < uVar6) {
                  uVar8 = uVar10 + 3;
                  puVar5[uVar1] = puVar3[uVar1];
                  if (uVar8 < uVar6) {
                    uVar1 = uVar10 + 4;
                    puVar5[uVar8] = puVar3[uVar8];
                    if (uVar1 < uVar6) {
                      uVar8 = uVar10 + 5;
                      puVar5[uVar1] = puVar3[uVar1];
                      if (uVar8 < uVar6) {
                        uVar1 = uVar10 + 6;
                        puVar5[uVar8] = puVar3[uVar8];
                        if (uVar1 < uVar6) {
                          uVar8 = uVar10 + 7;
                          puVar5[uVar1] = puVar3[uVar1];
                          if (uVar8 < uVar6) {
                            uVar1 = uVar10 + 8;
                            puVar5[uVar8] = puVar3[uVar8];
                            if (uVar1 < uVar6) {
                    /* catch() { ... } // from try @ 0028bd14 with catch @ 0028c024 */
                              uVar8 = uVar10 + 9;
                              puVar5[uVar1] = puVar3[uVar1];
                              if (uVar8 < uVar6) {
                                uVar1 = uVar10 + 10;
                                puVar5[uVar8] = puVar3[uVar8];
                                if (uVar1 < uVar6) {
                                  uVar8 = uVar10 + 0xb;
                                  puVar5[uVar1] = puVar3[uVar1];
                                  if (uVar8 < uVar6) {
                                    uVar1 = uVar10 + 0xc;
                                    puVar5[uVar8] = puVar3[uVar8];
                                    if (uVar1 < uVar6) {
                                      uVar8 = uVar10 + 0xd;
                                      puVar5[uVar1] = puVar3[uVar1];
                                      if (uVar8 < uVar6) {
                                        uVar10 = uVar10 + 0xe;
                                        puVar5[uVar8] = puVar3[uVar8];
                                        if (uVar10 < uVar6) {
                                          puVar5[uVar10] = puVar3[uVar10];
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
LAB_0028c0a4:
            iVar9 = *param_7;
          }
          iVar4 = iVar4 + 1;
          puVar3 = puVar3 + uVar6;
          puVar5 = puVar5 + uVar6;
          pcVar11 = pcVar11 + 1;
          uVar12 = uVar12 - uVar6;
        } while (iVar4 < iVar9);
        iVar2 = param_7[1];
      }
      iVar4 = iVar2 + -1;
      param_7[1] = iVar4;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
      uVar15 = uVar15 - param_2;
    } while (iVar2 != 0);
  }
  return;
}


==================================================================

### FUNC 0028c130 (348 bytes) name=FUN_0028c130

void FUN_0028c130(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  char cVar5;
  int iVar6;
  uint uVar7;
  long lVar8;
  long lVar9;
  char *pcVar10;
  undefined2 *puVar11;
  undefined2 *puVar12;
  int iVar13;
  
  iVar4 = *param_7;
  iVar13 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    iVar6 = (uVar7 + 1) * 4;
    if (iVar4 + -3 < 1) {
      iVar6 = 0;
    }
    lVar8 = (long)iVar6 * 3;
    do {
      if (0 < iVar4 + -3) {
        puVar12 = (undefined2 *)(param_1 + 9);
        puVar11 = (undefined2 *)(param_5 + 9);
        lVar9 = 0;
        pcVar10 = param_3;
        do {
          if (*pcVar10 != '\0') {
            *(undefined2 *)(param_5 + lVar9) = *(undefined2 *)(param_1 + lVar9);
            *(undefined1 *)(param_5 + lVar9 + 2) = *(undefined1 *)(param_1 + lVar9 + 2);
          }
          lVar9 = lVar9 + 0xc;
          if (pcVar10[1] != '\0') {
            puVar11[-3] = puVar12[-3];
            *(undefined1 *)(puVar11 + -2) = *(undefined1 *)(puVar12 + -2);
          }
          if (pcVar10[2] != '\0') {
            *(undefined2 *)((long)puVar11 + -3) = *(undefined2 *)((long)puVar12 + -3);
            *(undefined1 *)((long)puVar11 + -1) = *(undefined1 *)((long)puVar12 + -1);
          }
          pcVar1 = pcVar10 + 3;
          pcVar10 = pcVar10 + 4;
          if (*pcVar1 != '\0') {
            *puVar11 = *puVar12;
            *(undefined1 *)(puVar11 + 1) = *(undefined1 *)(puVar12 + 1);
          }
          puVar12 = puVar12 + 6;
          puVar11 = puVar11 + 6;
        } while (lVar9 != ((ulong)uVar7 + 1) * 0xc);
      }
      if (iVar6 < iVar4) {
        pcVar10 = param_3 + iVar6;
        lVar2 = param_1 + lVar8;
        lVar3 = param_5 + lVar8;
        lVar9 = 0;
        do {
          cVar5 = *pcVar10;
          pcVar10 = pcVar10 + 1;
          if (cVar5 != '\0') {
            *(undefined2 *)(lVar3 + lVar9) = *(undefined2 *)(lVar2 + lVar9);
            *(undefined1 *)(lVar3 + lVar9 + 2) = *(undefined1 *)(lVar2 + lVar9 + 2);
          }
          lVar9 = lVar9 + 3;
        } while (lVar9 != ((ulong)(uint)((iVar4 + -1) - iVar6) + 1) * 3);
      }
      iVar13 = iVar13 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar13 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c28c (260 bytes) name=FUN_0028c28c

void FUN_0028c28c(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  char *pcVar5;
  long lVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  int iVar9;
  long lVar10;
  
  iVar2 = *param_7;
  iVar9 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar4 = iVar2 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar3 = 0;
    }
    lVar10 = (long)iVar3 * 4;
    do {
      if (0 < iVar2 + -3) {
        puVar7 = (undefined4 *)(param_1 + 0xc);
        puVar8 = (undefined4 *)(param_5 + 0xc);
        pcVar5 = param_3;
        do {
          if (*pcVar5 != '\0') {
            puVar8[-3] = puVar7[-3];
          }
          if (pcVar5[1] != '\0') {
            puVar8[-2] = puVar7[-2];
          }
          if (pcVar5[2] != '\0') {
            puVar8[-1] = puVar7[-1];
          }
          pcVar1 = pcVar5 + 3;
          pcVar5 = pcVar5 + 4;
          if (*pcVar1 != '\0') {
            *puVar8 = *puVar7;
          }
          puVar7 = puVar7 + 4;
          puVar8 = puVar8 + 4;
        } while (puVar7 != (undefined4 *)(param_1 + (ulong)uVar4 * 0x10 + 0x1c));
      }
      if (iVar3 < iVar2) {
        lVar6 = 0;
        do {
          if (param_3[lVar6 + iVar3] != '\0') {
            *(undefined4 *)(param_5 + lVar10 + lVar6 * 4) =
                 *(undefined4 *)(param_1 + lVar10 + lVar6 * 4);
          }
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar2 + -1) - iVar3) + 1);
      }
      iVar9 = iVar9 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar9 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c390 (356 bytes) name=FUN_0028c390

void FUN_0028c390(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  char cVar5;
  int iVar6;
  uint uVar7;
  long lVar8;
  char *pcVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  int iVar12;
  long lVar13;
  
  iVar4 = *param_7;
  iVar12 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    iVar6 = (uVar7 + 1) * 4;
    if (iVar4 + -3 < 1) {
      iVar6 = 0;
    }
    lVar13 = (long)iVar6 * 6;
    do {
      if (0 < iVar4 + -3) {
        puVar11 = (undefined4 *)(param_1 + 0x12);
        puVar10 = (undefined4 *)(param_5 + 0x12);
                    /* try { // try from 0028c404 to 0038c457 has its CatchHandler @ 0028c404
                       catch() { ... } // from try @ 0028c404 with catch @ 0028c404
                       catch() { ... } // from try @ 0028c468 with catch @ 0028c404 */
        lVar8 = 0;
        pcVar9 = param_3;
        do {
          if (*pcVar9 != '\0') {
            *(undefined4 *)(param_5 + lVar8) = *(undefined4 *)(param_1 + lVar8);
            *(undefined2 *)(param_5 + lVar8 + 4) = *(undefined2 *)(param_1 + lVar8 + 4);
          }
          lVar8 = lVar8 + 0x18;
          if (pcVar9[1] != '\0') {
            puVar10[-3] = puVar11[-3];
            *(undefined2 *)(puVar10 + -2) = *(undefined2 *)(puVar11 + -2);
          }
          if (pcVar9[2] != '\0') {
            *(undefined4 *)((long)puVar10 + -6) = *(undefined4 *)((long)puVar11 + -6);
                    /* try { // try from 0028c458 to 0038c467 has its CatchHandler @ 0028c5a4 */
            *(undefined2 *)((long)puVar10 + -2) = *(undefined2 *)((long)puVar11 + -2);
          }
          pcVar1 = pcVar9 + 3;
          pcVar9 = pcVar9 + 4;
                    /* try { // try from 0028c468 to 0038c5b7 has its CatchHandler @ 0028c404 */
          if (*pcVar1 != '\0') {
            *puVar10 = *puVar11;
            *(undefined2 *)(puVar10 + 1) = *(undefined2 *)(puVar11 + 1);
          }
          puVar11 = puVar11 + 6;
          puVar10 = puVar10 + 6;
        } while (lVar8 != ((ulong)uVar7 + 1) * 0x18);
      }
      if (iVar6 < iVar4) {
        pcVar9 = param_3 + iVar6;
        lVar2 = param_1 + lVar13;
        lVar3 = param_5 + lVar13;
        lVar8 = 0;
        do {
          cVar5 = *pcVar9;
          pcVar9 = pcVar9 + 1;
          if (cVar5 != '\0') {
            *(undefined4 *)(lVar3 + lVar8) = *(undefined4 *)(lVar2 + lVar8);
            *(undefined2 *)(lVar3 + lVar8 + 4) = *(undefined2 *)(lVar2 + lVar8 + 4);
          }
          lVar8 = lVar8 + 6;
        } while (lVar8 != ((ulong)(uint)((iVar4 + -1) - iVar6) + 1) * 6);
      }
      iVar12 = iVar12 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar12 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c4f4 (272 bytes) name=FUN_0028c4f4

void FUN_0028c4f4(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  int iVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  char *pcVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int iVar10;
  long lVar11;
  
  iVar2 = *param_7;
  iVar10 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar5 = iVar2 - 4U >> 2;
    iVar4 = (uVar5 + 1) * 4;
    if (iVar2 + -3 < 1) {
      iVar4 = 0;
    }
    lVar11 = (long)iVar4 * 8;
    do {
      if (0 < iVar2 + -3) {
        puVar9 = (undefined8 *)(param_1 + 0x18);
        puVar8 = (undefined8 *)(param_5 + 0x18);
        lVar7 = 0;
        pcVar6 = param_3;
        do {
          if (*pcVar6 != '\0') {
            *(undefined8 *)(param_5 + lVar7) = *(undefined8 *)(param_1 + lVar7);
          }
          lVar7 = lVar7 + 0x20;
          if (pcVar6[1] != '\0') {
            puVar8[-2] = puVar9[-2];
          }
          if (pcVar6[2] != '\0') {
            puVar8[-1] = puVar9[-1];
          }
          pcVar1 = pcVar6 + 3;
          pcVar6 = pcVar6 + 4;
          if (*pcVar1 != '\0') {
            *puVar8 = *puVar9;
          }
                    /* catch() { ... } // from try @ 0028c458 with catch @ 0028c5a4 */
          puVar9 = puVar9 + 4;
          puVar8 = puVar8 + 4;
        } while (lVar7 != ((ulong)uVar5 + 1) * 0x20);
      }
      if (iVar4 < iVar2) {
        pcVar6 = param_3 + iVar4;
        lVar7 = 0;
        do {
          cVar3 = *pcVar6;
          pcVar6 = pcVar6 + 1;
          if (cVar3 != '\0') {
            *(undefined8 *)(param_5 + lVar11 + lVar7) = *(undefined8 *)(param_1 + lVar11 + lVar7);
          }
          lVar7 = lVar7 + 8;
        } while (lVar7 != ((ulong)(uint)((iVar2 + -1) - iVar4) + 1) * 8);
      }
      iVar10 = iVar10 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar10 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c604 (356 bytes) name=FUN_0028c604

void FUN_0028c604(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  char cVar5;
  int iVar6;
  uint uVar7;
  long lVar8;
  char *pcVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  int iVar12;
  long lVar13;
  
  iVar4 = *param_7;
  iVar12 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar7 = iVar4 - 4U >> 2;
    iVar6 = (uVar7 + 1) * 4;
    if (iVar4 + -3 < 1) {
      iVar6 = 0;
    }
    lVar13 = (long)iVar6 * 0xc;
    do {
      if (0 < iVar4 + -3) {
        puVar11 = (undefined8 *)(param_1 + 0x24);
        puVar10 = (undefined8 *)(param_5 + 0x24);
        lVar8 = 0;
        pcVar9 = param_3;
        do {
          if (*pcVar9 != '\0') {
            *(undefined8 *)(param_5 + lVar8) = *(undefined8 *)(param_1 + lVar8);
            *(undefined4 *)(param_5 + lVar8 + 8) = *(undefined4 *)(param_1 + lVar8 + 8);
          }
          lVar8 = lVar8 + 0x30;
          if (pcVar9[1] != '\0') {
            puVar10[-3] = puVar11[-3];
            *(undefined4 *)(puVar10 + -2) = *(undefined4 *)(puVar11 + -2);
          }
          if (pcVar9[2] != '\0') {
            *(undefined8 *)((long)puVar10 + -0xc) = *(undefined8 *)((long)puVar11 + -0xc);
            *(undefined4 *)((long)puVar10 + -4) = *(undefined4 *)((long)puVar11 + -4);
          }
          pcVar1 = pcVar9 + 3;
          pcVar9 = pcVar9 + 4;
          if (*pcVar1 != '\0') {
            *puVar10 = *puVar11;
            *(undefined4 *)(puVar10 + 1) = *(undefined4 *)(puVar11 + 1);
          }
          puVar11 = puVar11 + 6;
          puVar10 = puVar10 + 6;
        } while (lVar8 != ((ulong)uVar7 + 1) * 0x30);
      }
      if (iVar6 < iVar4) {
        pcVar9 = param_3 + iVar6;
        lVar2 = param_1 + lVar13;
        lVar3 = param_5 + lVar13;
        lVar8 = 0;
        do {
          cVar5 = *pcVar9;
          pcVar9 = pcVar9 + 1;
          if (cVar5 != '\0') {
            *(undefined8 *)(lVar3 + lVar8) = *(undefined8 *)(lVar2 + lVar8);
            *(undefined4 *)(lVar3 + lVar8 + 8) = *(undefined4 *)(lVar2 + lVar8 + 8);
          }
          lVar8 = lVar8 + 0xc;
        } while (lVar8 != ((ulong)(uint)((iVar4 + -1) - iVar6) + 1) * 0xc);
      }
      iVar12 = iVar12 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar12 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c768 (312 bytes) name=FUN_0028c768

void FUN_0028c768(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 uVar4;
  int iVar5;
  char cVar6;
  int iVar7;
  uint uVar8;
  char *pcVar9;
  long lVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int iVar13;
  long lVar14;
  
  iVar5 = *param_7;
  iVar13 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar8 = iVar5 - 4U >> 2;
    iVar7 = (uVar8 + 1) * 4;
    if (iVar5 + -3 < 1) {
      iVar7 = 0;
    }
    lVar14 = (long)iVar7 * 0x10;
    do {
      if (0 < iVar5 + -3) {
        puVar12 = (undefined8 *)(param_1 + 0x30);
        puVar11 = (undefined8 *)(param_5 + 0x30);
        lVar10 = 0;
        pcVar9 = param_3;
        do {
          puVar2 = (undefined8 *)(param_1 + lVar10);
          puVar3 = (undefined8 *)(param_5 + lVar10);
          lVar10 = lVar10 + 0x40;
          if (*pcVar9 != '\0') {
            uVar4 = puVar2[1];
            *puVar3 = *puVar2;
            puVar3[1] = uVar4;
          }
          if (pcVar9[1] != '\0') {
            uVar4 = puVar12[-3];
            puVar11[-4] = puVar12[-4];
            puVar11[-3] = uVar4;
          }
          if (pcVar9[2] != '\0') {
            uVar4 = puVar12[-1];
            puVar11[-2] = puVar12[-2];
            puVar11[-1] = uVar4;
          }
          pcVar1 = pcVar9 + 3;
          pcVar9 = pcVar9 + 4;
          if (*pcVar1 != '\0') {
            uVar4 = puVar12[1];
            *puVar11 = *puVar12;
            puVar11[1] = uVar4;
          }
          puVar12 = puVar12 + 8;
          puVar11 = puVar11 + 8;
        } while (lVar10 != ((ulong)uVar8 + 1) * 0x40);
      }
      if (iVar7 < iVar5) {
        pcVar9 = param_3 + iVar7;
        lVar10 = 0;
        do {
          cVar6 = *pcVar9;
          puVar12 = (undefined8 *)(param_1 + lVar14 + lVar10);
          puVar11 = (undefined8 *)(param_5 + lVar14 + lVar10);
          lVar10 = lVar10 + 0x10;
          pcVar9 = pcVar9 + 1;
          if (cVar6 != '\0') {
            uVar4 = puVar12[1];
            *puVar11 = *puVar12;
            puVar11[1] = uVar4;
          }
        } while (lVar10 != ((ulong)(uint)((iVar5 + -1) - iVar7) + 1) * 0x10);
      }
      iVar13 = iVar13 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar13 != -1);
  }
  return;
}


==================================================================

### FUNC 0028c8a0 (380 bytes) name=FUN_0028c8a0

void FUN_0028c8a0(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 uVar4;
  int iVar5;
  char cVar6;
  int iVar7;
  uint uVar8;
  char *pcVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  long lVar12;
  int iVar13;
  long lVar14;
  
  iVar5 = *param_7;
  iVar13 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar8 = iVar5 - 4U >> 2;
    iVar7 = (uVar8 + 1) * 4;
    if (iVar5 + -3 < 1) {
      iVar7 = 0;
    }
    lVar14 = (long)iVar7 * 0x18;
    do {
      if (0 < iVar5 + -3) {
        puVar11 = (undefined8 *)(param_1 + 0x48);
        puVar10 = (undefined8 *)(param_5 + 0x48);
        lVar12 = 0;
        pcVar9 = param_3;
        do {
          puVar2 = (undefined8 *)(param_1 + lVar12);
          puVar3 = (undefined8 *)(param_5 + lVar12);
          lVar12 = lVar12 + 0x60;
          if (*pcVar9 != '\0') {
            uVar4 = puVar2[1];
            *puVar3 = *puVar2;
            puVar3[1] = uVar4;
            puVar3[2] = puVar2[2];
          }
          if (pcVar9[1] != '\0') {
            uVar4 = puVar11[-5];
            puVar10[-6] = puVar11[-6];
            puVar10[-5] = uVar4;
            puVar10[-4] = puVar11[-4];
          }
          if (pcVar9[2] != '\0') {
            uVar4 = puVar11[-2];
            puVar10[-3] = puVar11[-3];
            puVar10[-2] = uVar4;
            puVar10[-1] = puVar11[-1];
          }
          pcVar1 = pcVar9 + 3;
          pcVar9 = pcVar9 + 4;
          if (*pcVar1 != '\0') {
            uVar4 = puVar11[1];
            *puVar10 = *puVar11;
            puVar10[1] = uVar4;
            puVar10[2] = puVar11[2];
          }
          puVar11 = puVar11 + 0xc;
          puVar10 = puVar10 + 0xc;
        } while (lVar12 != ((ulong)uVar8 + 1) * 0x60);
      }
      if (iVar7 < iVar5) {
        pcVar9 = param_3 + iVar7;
        lVar12 = 0;
        do {
          cVar6 = *pcVar9;
          puVar11 = (undefined8 *)(param_1 + lVar14 + lVar12);
          puVar10 = (undefined8 *)(param_5 + lVar14 + lVar12);
          lVar12 = lVar12 + 0x18;
          pcVar9 = pcVar9 + 1;
          if (cVar6 != '\0') {
            uVar4 = puVar11[1];
            *puVar10 = *puVar11;
            puVar10[1] = uVar4;
            puVar10[2] = puVar11[2];
          }
        } while (lVar12 != ((ulong)(uint)((iVar5 + -1) - iVar7) + 1) * 0x18);
      }
      iVar13 = iVar13 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar13 != -1);
  }
  return;
}


==================================================================

### FUNC 0028ca1c (352 bytes) name=FUN_0028ca1c

void FUN_0028ca1c(long param_1,long param_2,char *param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  char *pcVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 uVar4;
  int iVar5;
  char cVar6;
  int iVar7;
  uint uVar8;
  char *pcVar9;
  long lVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  int iVar13;
  long lVar14;
  
  iVar5 = *param_7;
  iVar13 = param_7[1] + -1;
  if (param_7[1] != 0) {
    uVar8 = iVar5 - 4U >> 2;
    iVar7 = (uVar8 + 1) * 4;
    if (iVar5 + -3 < 1) {
      iVar7 = 0;
    }
    lVar14 = (long)iVar7 * 0x20;
    do {
      if (0 < iVar5 + -3) {
        puVar12 = (undefined8 *)(param_1 + 0x60);
        puVar11 = (undefined8 *)(param_5 + 0x60);
        lVar10 = 0;
        pcVar9 = param_3;
        do {
          puVar2 = (undefined8 *)(param_1 + lVar10);
          puVar3 = (undefined8 *)(param_5 + lVar10);
          lVar10 = lVar10 + 0x80;
          if (*pcVar9 != '\0') {
            uVar4 = puVar2[1];
            *puVar3 = *puVar2;
            puVar3[1] = uVar4;
            uVar4 = puVar2[3];
            puVar3[2] = puVar2[2];
            puVar3[3] = uVar4;
          }
          if (pcVar9[1] != '\0') {
            uVar4 = puVar12[-7];
            puVar11[-8] = puVar12[-8];
            puVar11[-7] = uVar4;
            uVar4 = puVar12[-5];
            puVar11[-6] = puVar12[-6];
            puVar11[-5] = uVar4;
          }
          if (pcVar9[2] != '\0') {
            uVar4 = puVar12[-3];
            puVar11[-4] = puVar12[-4];
            puVar11[-3] = uVar4;
            uVar4 = puVar12[-1];
            puVar11[-2] = puVar12[-2];
            puVar11[-1] = uVar4;
          }
          pcVar1 = pcVar9 + 3;
          pcVar9 = pcVar9 + 4;
          if (*pcVar1 != '\0') {
            uVar4 = puVar12[1];
            *puVar11 = *puVar12;
            puVar11[1] = uVar4;
            uVar4 = puVar12[3];
            puVar11[2] = puVar12[2];
            puVar11[3] = uVar4;
          }
          puVar12 = puVar12 + 0x10;
          puVar11 = puVar11 + 0x10;
        } while (lVar10 != ((ulong)uVar8 + 1) * 0x80);
      }
      if (iVar7 < iVar5) {
        pcVar9 = param_3 + iVar7;
        lVar10 = 0;
        do {
          cVar6 = *pcVar9;
          puVar12 = (undefined8 *)(param_1 + lVar14 + lVar10);
          puVar11 = (undefined8 *)(param_5 + lVar14 + lVar10);
          lVar10 = lVar10 + 0x20;
          pcVar9 = pcVar9 + 1;
          if (cVar6 != '\0') {
            uVar4 = puVar12[1];
            *puVar11 = *puVar12;
            puVar11[1] = uVar4;
            uVar4 = puVar12[3];
            puVar11[2] = puVar12[2];
            puVar11[3] = uVar4;
          }
        } while (lVar10 != ((ulong)(uint)((iVar5 + -1) - iVar7) + 1) * 0x20);
      }
      iVar13 = iVar13 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar13 != -1);
  }
  return;
}


==================================================================

### FUNC 0028cb7c (220 bytes) name=FUN_0028cb7c

void FUN_0028cb7c(ulong *param_1,long param_2,undefined8 *param_3,long param_4,ulong *param_5,
                 long param_6,int *param_7)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  ulong *puVar5;
  long lVar6;
  ulong *puVar7;
  ulong *puVar8;
  undefined8 *puVar9;
  int iVar10;
  long lVar11;
  char cVar12;
  char cVar20;
  undefined7 uVar13;
  char cVar15;
  char cVar16;
  char cVar17;
  char cVar18;
  byte bVar19;
  undefined8 uVar14;
  char cVar21;
  
  iVar10 = param_7[1];
  iVar1 = *param_7;
  if (iVar10 != 0) {
    uVar3 = iVar1 - 8U >> 3;
    iVar2 = (uVar3 + 1) * 8;
    if (iVar1 + -7 < 1) {
      iVar2 = 0;
    }
    lVar11 = (long)iVar2 * 2;
    do {
      if (0 < iVar1 + -7) {
        puVar5 = param_5;
        puVar7 = param_1;
        puVar9 = param_3;
        do {
          uVar14 = *puVar9;
          puVar8 = puVar7 + 2;
          uVar4 = *puVar7;
          cVar12 = -((char)uVar14 != '\0');
          cVar15 = -((char)((ulong)uVar14 >> 8) != '\0');
          cVar16 = -((char)((ulong)uVar14 >> 0x10) != '\0');
          cVar17 = -((char)((ulong)uVar14 >> 0x18) != '\0');
          cVar18 = -((char)((ulong)uVar14 >> 0x20) != '\0');
          bVar19 = -((char)((ulong)uVar14 >> 0x28) != '\0');
          cVar20 = -((char)((ulong)uVar14 >> 0x30) != '\0');
          cVar21 = -((char)((ulong)uVar14 >> 0x38) != '\0');
          uVar13 = CONCAT16(cVar21,(uint6)CONCAT14(cVar20,(uint)bVar19 << 0x10));
          puVar5[1] = puVar5[1] ^
                      (puVar5[1] ^ puVar7[1]) &
                      CONCAT17(cVar21,CONCAT16(cVar21,CONCAT15(cVar20,(int5)CONCAT34((int3)((uint7)
                                                  uVar13 >> 0x20),
                                                  CONCAT13(bVar19,(int3)CONCAT52((int5)((uint7)
                                                  uVar13 >> 0x10),CONCAT11(cVar18,cVar18)))))));
          *puVar5 = *puVar5 ^ (*puVar5 ^ uVar4) &
                              CONCAT17(cVar17,CONCAT16(cVar17,CONCAT15(cVar16,CONCAT14(cVar16,
                                                  CONCAT13(cVar15,CONCAT12(cVar15,CONCAT11(cVar12,
                                                  cVar12)))))));
          puVar5 = puVar5 + 2;
          puVar7 = puVar8;
          puVar9 = puVar9 + 1;
        } while (puVar8 != param_1 + ((ulong)uVar3 + 1) * 2);
      }
      if (iVar2 < iVar1) {
        lVar6 = 0;
        do {
          if (*(char *)((long)param_3 + lVar6 + iVar2) != '\0') {
            *(undefined2 *)((long)param_5 + lVar6 * 2 + lVar11) =
                 *(undefined2 *)((long)param_1 + lVar6 * 2 + lVar11);
          }
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(uint)((iVar1 + -1) - iVar2) + 1);
      }
      iVar10 = iVar10 + -1;
      param_3 = (undefined8 *)((long)param_3 + param_4);
      param_1 = (ulong *)((long)param_1 + param_2);
      param_5 = (ulong *)((long)param_5 + param_6);
    } while (iVar10 != 0);
  }
  return;
}


==================================================================

### FUNC 0028cc58 (192 bytes) name=FUN_0028cc58

void FUN_0028cc58(long param_1,long param_2,long param_3,long param_4,long param_5,long param_6,
                 int *param_7)

{
  int iVar1;
  undefined8 *puVar2;
  byte *pbVar3;
  byte *pbVar4;
  int iVar5;
  int iVar6;
  byte bVar7;
  byte bVar8;
  byte bVar9;
  byte bVar10;
  byte bVar11;
  byte bVar12;
  byte bVar13;
  byte bVar14;
  byte bVar15;
  byte bVar16;
  byte bVar17;
  byte bVar18;
  byte bVar19;
  byte bVar20;
  byte bVar21;
  long lVar22;
  long lVar23;
  int iVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  
  iVar24 = param_7[1];
  iVar5 = *param_7;
  if (iVar24 != 0) {
    iVar6 = iVar5 + -0xf;
    iVar1 = (iVar5 - 0x10U & 0xfffffff0) + 0x10;
    if (iVar6 < 1) {
      iVar1 = 0;
    }
    lVar23 = (long)iVar1;
    do {
      lVar22 = 0;
      if (0 < iVar6) {
        do {
          puVar2 = (undefined8 *)(param_3 + lVar22);
          pbVar3 = (byte *)(param_5 + lVar22);
          pbVar4 = (byte *)(param_1 + lVar22);
          lVar22 = lVar22 + 0x10;
          uVar26 = puVar2[1];
          uVar25 = *puVar2;
          bVar7 = *pbVar4;
          bVar8 = pbVar4[1];
          bVar9 = pbVar4[2];
          bVar10 = pbVar4[3];
          bVar11 = pbVar4[4];
          bVar12 = pbVar4[5];
          bVar13 = pbVar4[6];
          bVar14 = pbVar4[7];
          bVar15 = pbVar4[9];
          bVar16 = pbVar4[10];
          bVar17 = pbVar4[0xb];
          bVar18 = pbVar4[0xc];
          bVar19 = pbVar4[0xd];
          bVar20 = pbVar4[0xe];
          bVar21 = pbVar4[0xf];
          pbVar3[8] = pbVar3[8] ^ (pbVar3[8] ^ pbVar4[8]) & -((char)uVar26 != '\0');
          pbVar3[9] = pbVar3[9] ^ (pbVar3[9] ^ bVar15) & -((char)((ulong)uVar26 >> 8) != '\0');
          pbVar3[10] = pbVar3[10] ^ (pbVar3[10] ^ bVar16) & -((char)((ulong)uVar26 >> 0x10) != '\0')
          ;
          pbVar3[0xb] = pbVar3[0xb] ^
                        (pbVar3[0xb] ^ bVar17) & -((char)((ulong)uVar26 >> 0x18) != '\0');
          pbVar3[0xc] = pbVar3[0xc] ^
                        (pbVar3[0xc] ^ bVar18) & -((char)((ulong)uVar26 >> 0x20) != '\0');
          pbVar3[0xd] = pbVar3[0xd] ^
                        (pbVar3[0xd] ^ bVar19) & -((char)((ulong)uVar26 >> 0x28) != '\0');
          pbVar3[0xe] = pbVar3[0xe] ^
                        (pbVar3[0xe] ^ bVar20) & -((char)((ulong)uVar26 >> 0x30) != '\0');
          pbVar3[0xf] = pbVar3[0xf] ^
                        (pbVar3[0xf] ^ bVar21) & -((char)((ulong)uVar26 >> 0x38) != '\0');
          *pbVar3 = *pbVar3 ^ (*pbVar3 ^ bVar7) & -((char)uVar25 != '\0');
          pbVar3[1] = pbVar3[1] ^ (pbVar3[1] ^ bVar8) & -((char)((ulong)uVar25 >> 8) != '\0');
          pbVar3[2] = pbVar3[2] ^ (pbVar3[2] ^ bVar9) & -((char)((ulong)uVar25 >> 0x10) != '\0');
          pbVar3[3] = pbVar3[3] ^ (pbVar3[3] ^ bVar10) & -((char)((ulong)uVar25 >> 0x18) != '\0');
          pbVar3[4] = pbVar3[4] ^ (pbVar3[4] ^ bVar11) & -((char)((ulong)uVar25 >> 0x20) != '\0');
          pbVar3[5] = pbVar3[5] ^ (pbVar3[5] ^ bVar12) & -((char)((ulong)uVar25 >> 0x28) != '\0');
          pbVar3[6] = pbVar3[6] ^ (pbVar3[6] ^ bVar13) & -((char)((ulong)uVar25 >> 0x30) != '\0');
          pbVar3[7] = pbVar3[7] ^ (pbVar3[7] ^ bVar14) & -((char)((ulong)uVar25 >> 0x38) != '\0');
        } while ((int)lVar22 < iVar6);
      }
      lVar22 = 0;
      if (iVar1 < iVar5) {
        do {
          if (*(char *)(param_3 + lVar23 + lVar22) != '\0') {
            *(undefined1 *)(param_5 + lVar23 + lVar22) = *(undefined1 *)(param_1 + lVar23 + lVar22);
          }
          lVar22 = lVar22 + 1;
        } while (lVar22 != (ulong)(uint)((iVar5 + -1) - iVar1) + 1);
      }
      iVar24 = iVar24 + -1;
      param_3 = param_3 + param_4;
      param_1 = param_1 + param_2;
      param_5 = param_5 + param_6;
    } while (iVar24 != 0);
  }
  return;
}


==================================================================

### FUNC 0028cd18 (40 bytes) name=FUN_0028cd18

code * FUN_0028cd18(ulong param_1)

{
  if ((param_1 < 0x21) && ((code *)(&DAT_00509280)[param_1] != (code *)0x0)) {
    return (code *)(&DAT_00509280)[param_1];
  }
  return FUN_0028bdc0;
}


==================================================================

### FUNC 0028cd40 (2320 bytes) name=copyTo

/* cv::Mat::copyTo(cv::_OutputArray const&) const */

void __thiscall cv::Mat::copyTo(Mat *this,_OutputArray *param_1)

{
  int *piVar1;
  ulong uVar2;
  ulong uVar3;
  uint uVar4;
  bool bVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  ulong uVar11;
  char *pcVar12;
  void *pvVar13;
  int iVar14;
  Mat *pMVar15;
  long lVar16;
  long lVar17;
  undefined8 uVar18;
  long lVar19;
  undefined8 *puVar20;
  undefined8 uVar21;
  long *plVar22;
  code *pcVar23;
  void *__src;
  size_t sVar24;
  Mat *local_260;
  Mat *local_258;
  uchar *local_250;
  void *local_248;
  long local_230;
  undefined8 local_218;
  long local_200 [4];
  ulong local_1e0;
  long lStack_1d8;
  long local_1d0;
  long lStack_1c8;
  long local_1c0;
  long lStack_1b8;
  long local_1b0;
  long lStack_1a8;
  long local_1a0;
  long lStack_198;
  long local_190;
  long lStack_188;
  long local_180;
  long lStack_178;
  long local_170;
  long lStack_168;
  long local_160;
  long lStack_158;
  long local_150;
  long lStack_148;
  long local_140;
  long lStack_138;
  long local_130;
  long lStack_128;
  long local_120;
  long lStack_118;
  long local_110;
  long lStack_108;
  undefined8 local_100;
  undefined8 local_f8;
  void *local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  long local_c8;
  undefined8 *local_c0;
  long *local_b8;
  long local_b0;
  long local_a8;
  
  uVar11 = _InputArray::type((_InputArray *)param_1,-1);
  cVar8 = _OutputArray::fixedType(param_1);
  if (cVar8 != '\0') {
    if ((uint)uVar11 != (*(uint *)this & 0xfff)) {
      if (((uint)((uVar11 & 0xffffffff) >> 3) & 0x1ff) + 1 != (*(uint *)this >> 3 & 0x1ff) + 1) {
        local_100 = 0;
        local_f8 = 0;
        pcVar12 = (char *)String::allocate((String *)&local_100,0x1e);
        uVar7 = s_channels______CV_MAT_CN_dtype__00463e20._28_2_;
        uVar6 = s_channels______CV_MAT_CN_dtype__00463e20._24_4_;
        uVar21 = s_channels______CV_MAT_CN_dtype__00463e20._8_8_;
        uVar18 = s_channels______CV_MAT_CN_dtype__00463e20._0_8_;
        *(undefined8 *)(pcVar12 + 0x10) = s_channels______CV_MAT_CN_dtype__00463e20._16_8_;
        *(undefined4 *)(pcVar12 + 0x18) = uVar6;
        *(undefined2 *)(pcVar12 + 0x1c) = uVar7;
        *(undefined8 *)pcVar12 = uVar18;
        *(undefined8 *)(pcVar12 + 8) = uVar21;
        error(-0xd7,(String *)&local_100,"void cv::Mat::copyTo(cv::OutputArray) const",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x119);
        String::deallocate((String *)&local_100);
      }
      convertTo(this,param_1,(uint)uVar11,1.0,0.0);
      return;
    }
  }
  if (*(long *)(this + 0x10) == 0) {
LAB_0028d038:
    _OutputArray::release(param_1);
    return;
  }
  if (*(int *)(this + 4) < 3) {
    lVar19 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
  }
  else {
    lVar17 = 0;
    lVar19 = 1;
    do {
      lVar16 = lVar17 * 4;
      lVar17 = lVar17 + 1;
      lVar19 = lVar19 * *(int *)(*(long *)(this + 0x40) + lVar16);
    } while ((int)lVar17 < *(int *)(this + 4));
  }
  if (lVar19 == 0) goto LAB_0028d038;
  iVar9 = _InputArray::kind((_InputArray *)param_1);
  iVar10 = (int)param_1;
  if (iVar9 != 0xa0000) {
    if (*(int *)(this + 4) < 3) {
      _OutputArray::create
                (param_1,*(int *)(this + 8),*(int *)(this + 0xc),*(uint *)this & 0xfff,-1,false,0);
      iVar9 = _InputArray::kind((_InputArray *)param_1);
      if (iVar9 == 0x10000) {
        pMVar15 = *(Mat **)(param_1 + 8);
        local_c0 = &local_f8;
        local_b8 = &local_b0;
        uVar4 = *(uint *)pMVar15;
        local_f0 = *(void **)(pMVar15 + 0x10);
        local_100 = *(ulong *)pMVar15;
        local_f8 = *(undefined8 *)(pMVar15 + 8);
        local_e8 = *(undefined8 *)(pMVar15 + 0x18);
        local_e0 = *(undefined8 *)(pMVar15 + 0x20);
        local_d8 = *(undefined8 *)(pMVar15 + 0x28);
        local_d0 = *(undefined8 *)(pMVar15 + 0x30);
        local_c8 = *(long *)(pMVar15 + 0x38);
        local_a8 = 0;
        local_b0 = 0;
        if (local_c8 != 0) {
          piVar1 = (int *)(local_c8 + 0x14);
          do {
            cVar8 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar8 = ExclusiveMonitorsStatus();
            }
          } while (cVar8 != '\0');
        }
        if (*(int *)(pMVar15 + 4) < 3) {
          local_b0 = **(long **)(pMVar15 + 0x48);
          local_a8 = (*(long **)(pMVar15 + 0x48))[1];
        }
        else {
          local_100 = (ulong)uVar4;
          copySize((Mat *)&local_100,pMVar15);
        }
      }
      else {
        _InputArray::getMat_(iVar10);
      }
      __src = *(void **)(this + 0x10);
      if (((__src != local_f0) && (iVar9 = *(int *)(this + 8), 0 < iVar9)) &&
         (iVar10 = *(int *)(this + 0xc), 0 < iVar10)) {
        if ((((uint)local_100 & 0x4000 & *(uint *)this) == 0) ||
           (iVar14 = (int)((long)iVar10 * (long)iVar9),
           (long)iVar10 * (long)iVar9 - (long)iVar14 != 0)) {
          iVar9 = iVar9 + -1;
          iVar14 = iVar10;
        }
        else {
          iVar9 = 0;
        }
        if (*(int *)(this + 4) < 1) {
          sVar24 = 0;
        }
        else {
          sVar24 = (long)iVar14 *
                   *(long *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
        }
        lVar19 = 0;
        pvVar13 = local_f0;
        do {
          lVar19 = lVar19 + 1;
          pvVar13 = memcpy(pvVar13,__src,sVar24);
          __src = (void *)((long)__src + *(long *)(this + 0x50));
          pvVar13 = (void *)((long)pvVar13 + local_b0);
        } while (lVar19 != (long)iVar9 + 1);
      }
      if (local_c8 != 0) {
        piVar1 = (int *)(local_c8 + 0x14);
        do {
          iVar9 = *piVar1;
          cVar8 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar9 + -1;
            cVar8 = ExclusiveMonitorsStatus();
          }
        } while (cVar8 != '\0');
        if (iVar9 == 1) {
          deallocate((Mat *)&local_100);
        }
      }
      if (0 < local_100._4_4_) {
        iVar9 = 0;
        puVar20 = local_c0;
        do {
          *(undefined4 *)puVar20 = 0;
          iVar9 = iVar9 + 1;
          puVar20 = (undefined8 *)((long)puVar20 + 4);
        } while (iVar9 < local_100._4_4_);
      }
    }
    else {
      _OutputArray::create
                (param_1,*(int *)(this + 4),*(int **)(this + 0x40),*(uint *)this & 0xfff,-1,false,0)
      ;
      iVar9 = _InputArray::kind((_InputArray *)param_1);
      if (iVar9 == 0x10000) {
        pMVar15 = *(Mat **)(param_1 + 8);
        local_c0 = &local_f8;
        local_b8 = &local_b0;
        uVar4 = *(uint *)pMVar15;
        local_f0 = *(void **)(pMVar15 + 0x10);
        local_100 = *(ulong *)pMVar15;
        local_f8 = *(undefined8 *)(pMVar15 + 8);
        local_e8 = *(undefined8 *)(pMVar15 + 0x18);
        local_e0 = *(undefined8 *)(pMVar15 + 0x20);
        local_d8 = *(undefined8 *)(pMVar15 + 0x28);
        local_d0 = *(undefined8 *)(pMVar15 + 0x30);
        local_c8 = *(long *)(pMVar15 + 0x38);
        local_a8 = 0;
        local_b0 = 0;
        if (local_c8 != 0) {
          piVar1 = (int *)(local_c8 + 0x14);
          do {
            cVar8 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar8 = ExclusiveMonitorsStatus();
            }
          } while (cVar8 != '\0');
        }
        if (*(int *)(pMVar15 + 4) < 3) {
          local_b0 = **(long **)(pMVar15 + 0x48);
          local_a8 = (*(long **)(pMVar15 + 0x48))[1];
        }
        else {
          local_100 = (ulong)uVar4;
          copySize((Mat *)&local_100,pMVar15);
        }
      }
      else {
        _InputArray::getMat_(iVar10);
      }
      if (*(void **)(this + 0x10) == local_f0) {
        if (local_c8 != 0) {
          piVar1 = (int *)(local_c8 + 0x14);
          do {
            iVar9 = *piVar1;
            cVar8 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar9 + -1;
              cVar8 = ExclusiveMonitorsStatus();
            }
          } while (cVar8 != '\0');
          if (iVar9 == 1) {
            deallocate((Mat *)&local_100);
          }
        }
        if (0 < local_100._4_4_) {
          iVar9 = 0;
          puVar20 = local_c0;
          do {
            *(undefined4 *)puVar20 = 0;
            iVar9 = iVar9 + 1;
            puVar20 = (undefined8 *)((long)puVar20 + 4);
          } while (iVar9 < local_100._4_4_);
        }
      }
      else {
        if (*(int *)(this + 4) < 3) {
          lVar17 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
        }
        else {
          lVar19 = 0;
          lVar17 = 1;
          do {
            lVar16 = lVar19 * 4;
            lVar19 = lVar19 + 1;
            lVar17 = lVar17 * *(int *)(*(long *)(this + 0x40) + lVar16);
          } while ((int)lVar19 < *(int *)(this + 4));
        }
        if (lVar17 != 0) {
          local_260 = this;
          local_258 = (Mat *)&local_100;
          NAryMatIterator::NAryMatIterator((NAryMatIterator *)local_200,&local_260,&local_250,2);
          if (*(int *)(this + 4) < 1) {
            sVar24 = 0;
          }
          else {
            sVar24 = lStack_1d8 *
                     *(long *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
          }
          for (uVar11 = 0; uVar11 < local_1e0; uVar11 = uVar11 + 1) {
            memcpy(local_248,local_250,sVar24);
            NAryMatIterator::operator++((NAryMatIterator *)local_200);
          }
        }
        if (local_c8 != 0) {
          piVar1 = (int *)(local_c8 + 0x14);
          do {
            iVar9 = *piVar1;
            cVar8 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = iVar9 + -1;
              cVar8 = ExclusiveMonitorsStatus();
            }
          } while (cVar8 != '\0');
          if (iVar9 == 1) {
            deallocate((Mat *)&local_100);
          }
        }
        if (0 < local_100._4_4_) {
          iVar9 = 0;
          puVar20 = local_c0;
          do {
            *(undefined4 *)puVar20 = 0;
            iVar9 = iVar9 + 1;
            puVar20 = (undefined8 *)((long)puVar20 + 4);
          } while (iVar9 < local_100._4_4_);
        }
      }
    }
    local_c8 = 0;
    local_d8 = 0;
    local_e0 = 0;
    local_e8 = 0;
    local_f0 = (void *)0x0;
    if (local_b8 == &local_b0) {
      return;
    }
    fastFree(local_b8);
    return;
  }
  _OutputArray::create
            (param_1,*(int *)(this + 4),*(int **)(this + 0x40),*(uint *)this & 0xfff,-1,false,0);
  _InputArray::getUMat(iVar10);
  iVar9 = *(int *)(this + 4);
  if (iVar9 < 1) {
    lVar19 = 0;
    if (iVar9 == 0) goto LAB_0028d52c;
  }
  else {
    lVar19 = *(long *)(*(long *)(this + 0x48) + (long)iVar9 * 8 + -8);
  }
  uVar11 = (ulong)iVar9;
  lVar17 = (uVar11 - 4 >> 2) + 1;
  puVar20 = *(undefined8 **)(this + 0x40);
  lVar16 = lVar17 * 4;
  if (uVar11 - 1 < 3) {
    lVar16 = 0;
  }
  else {
    local_200[1] = (long)(int)((ulong)*puVar20 >> 0x20);
    local_200[0] = (long)(int)*puVar20;
    local_200[3] = (long)(int)((ulong)puVar20[1] >> 0x20);
    local_200[2] = (long)(int)puVar20[1];
    if (lVar17 != 1) {
      lStack_1d8 = (long)(int)((ulong)puVar20[2] >> 0x20);
      local_1e0 = (long)(int)puVar20[2];
      lStack_1c8 = (long)(int)((ulong)puVar20[3] >> 0x20);
      local_1d0 = (long)(int)puVar20[3];
      if (lVar17 != 2) {
        lStack_1b8 = (long)(int)((ulong)puVar20[4] >> 0x20);
        local_1c0 = (long)(int)puVar20[4];
        lStack_1a8 = (long)(int)((ulong)puVar20[5] >> 0x20);
        local_1b0 = (long)(int)puVar20[5];
        if (lVar17 != 3) {
          lStack_198 = (long)(int)((ulong)puVar20[6] >> 0x20);
          local_1a0 = (long)(int)puVar20[6];
          lStack_188 = (long)(int)((ulong)puVar20[7] >> 0x20);
          local_190 = (long)(int)puVar20[7];
          if (lVar17 != 4) {
            lStack_178 = (long)(int)((ulong)puVar20[8] >> 0x20);
            local_180 = (long)(int)puVar20[8];
            lStack_168 = (long)(int)((ulong)puVar20[9] >> 0x20);
            local_170 = (long)(int)puVar20[9];
            if (lVar17 != 5) {
              lStack_158 = (long)(int)((ulong)puVar20[10] >> 0x20);
              local_160 = (long)(int)puVar20[10];
              lStack_148 = (long)(int)((ulong)puVar20[0xb] >> 0x20);
              local_150 = (long)(int)puVar20[0xb];
              if (lVar17 != 6) {
                lStack_138 = (long)(int)((ulong)puVar20[0xc] >> 0x20);
                local_140 = (long)(int)puVar20[0xc];
                lStack_128 = (long)(int)((ulong)puVar20[0xd] >> 0x20);
                local_130 = (long)(int)puVar20[0xd];
                if (lVar17 != 7) {
                  lStack_118 = (long)(int)((ulong)puVar20[0xe] >> 0x20);
                  local_120 = (long)(int)puVar20[0xe];
                  lStack_108 = (long)(int)((ulong)puVar20[0xf] >> 0x20);
                  local_110 = (long)(int)puVar20[0xf];
                }
              }
            }
          }
        }
      }
    }
    if (lVar16 - uVar11 == 0) goto LAB_0028d52c;
  }
  uVar2 = lVar16 + 1;
  local_200[lVar16] = (long)*(int *)((long)puVar20 + lVar16 * 4);
  if (uVar2 < uVar11) {
    uVar3 = lVar16 + 2;
    local_200[uVar2] = (long)*(int *)((long)puVar20 + uVar2 * 4);
    if (uVar3 < uVar11) {
      local_200[uVar3] = (long)*(int *)((long)puVar20 + uVar3 * 4);
    }
  }
LAB_0028d52c:
  local_200[iVar9 + -1] = lVar19 * local_200[iVar9 + -1];
  UMat::ndoffset((UMat *)&local_250,&local_100);
  iVar9 = *(int *)(this + 4);
  uVar18 = *(undefined8 *)(this + 0x10);
  plVar22 = *(long **)(local_230 + 8);
  iVar10 = iVar9 + -1;
  uVar21 = *(undefined8 *)(this + 0x48);
  pcVar23 = *(code **)(*plVar22 + 0x40);
  (&local_100)[iVar10] = lVar19 * (&local_100)[iVar10];
  (*pcVar23)(plVar22,local_230,uVar18,iVar9,local_200,&local_100,local_218,uVar21);
  UMat::~UMat((UMat *)&local_250);
  return;
}


==================================================================

### FUNC 0028d6a0 (420 bytes) name=operator=

/* cv::Mat::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&) */

Mat * __thiscall cv::Mat::operator=(Mat *this,Scalar_ *param_1)

{
  uchar *__dest;
  size_t __n;
  ulong uVar1;
  ulong uVar2;
  ulong __n_00;
  ulong uVar3;
  ulong uVar4;
  Mat *local_b0;
  uchar *local_a8;
  NAryMatIterator aNStack_a0 [32];
  ulong local_80;
  long local_78;
  undefined1 auStack_60 [96];
  
  local_b0 = this;
  NAryMatIterator::NAryMatIterator(aNStack_a0,&local_b0,&local_a8,1);
  if (*(int *)(this + 4) < 1) {
    __n_00 = 0;
  }
  else {
    __n_00 = local_78 * *(long *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
  }
  if ((((*(long *)param_1 == 0) && (*(long *)(param_1 + 8) == 0)) &&
      (*(long *)(param_1 + 0x10) == 0)) && (*(long *)(param_1 + 0x18) == 0)) {
    uVar3 = 0;
    if (local_80 != 0) {
      do {
        uVar3 = uVar3 + 1;
        memset(local_a8,0,__n_00);
        NAryMatIterator::operator++(aNStack_a0);
      } while (uVar3 < local_80);
    }
  }
  else if (local_80 != 0) {
    uVar3 = 0;
    scalarToRawData(param_1,auStack_60,*(uint *)this & 0xfff,0xc);
    uVar1 = 0x88442211UL >> ((*(uint *)this & 7) << 2) & 0xf;
    uVar2 = uVar1 * 0xc;
    uVar4 = __n_00;
    if (__n_00 != 0) {
      do {
        __n = uVar4;
        if (uVar2 < uVar4) {
          __n = uVar2;
        }
        __dest = local_a8 + uVar3;
        uVar3 = uVar3 + uVar2;
        uVar4 = uVar4 + uVar1 * -0xc;
        memcpy(__dest,auStack_60,__n);
      } while (uVar3 < __n_00);
    }
    uVar3 = 1;
    if (1 < local_80) {
      do {
        uVar3 = uVar3 + 1;
        NAryMatIterator::operator++(aNStack_a0);
        memcpy(local_a8,*(void **)(this + 0x10),__n_00);
      } while (uVar3 < local_80);
      return this;
    }
  }
  return this;
}


==================================================================

### FUNC 0028d844 (2176 bytes) name=copyTo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::copyTo(cv::_OutputArray const&, cv::_InputArray const&) const */

void __thiscall cv::Mat::copyTo(Mat *this,_OutputArray *param_1,_InputArray *param_2)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined1 uVar9;
  long lVar10;
  int iVar11;
  int iVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  Mat *pMVar15;
  int *piVar16;
  ulong uVar17;
  code *pcVar18;
  ulong local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  uchar *local_198;
  undefined8 local_190;
  undefined8 local_188;
  Mat *local_180;
  Mat *local_178;
  Mat *local_170;
  undefined8 uStack_168;
  NAryMatIterator aNStack_160 [32];
  ulong local_140;
  int local_138;
  uint local_120;
  int local_11c;
  int local_118;
  undefined4 local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar11 = _InputArray::kind(param_2);
  if (iVar11 == 0x10000) {
    pMVar15 = *(Mat **)(param_2 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar15;
    local_11c = *(int *)(pMVar15 + 4);
    local_118 = *(int *)(pMVar15 + 8);
    local_114 = *(undefined4 *)(pMVar15 + 0xc);
    local_110 = *(long *)(pMVar15 + 0x10);
    local_108 = *(undefined8 *)(pMVar15 + 0x18);
    local_100 = *(undefined8 *)(pMVar15 + 0x20);
    local_f8 = *(undefined8 *)(pMVar15 + 0x28);
    local_f0 = *(undefined8 *)(pMVar15 + 0x30);
    local_e8 = *(long *)(pMVar15 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar16 = (int *)(local_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar3) {
          *piVar16 = *piVar16 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar15 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_11c = 0;
      copySize((Mat *)&local_120,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (local_110 == 0) {
    copyTo(this,param_1);
  }
  else {
    iVar11 = (local_120 >> 3 & 0x1ff) + 1;
    if ((local_120 & 7) == 0) {
      if ((*(uint *)this >> 3 & 0x1ff) + 1 == iVar11) goto LAB_0028d91c;
      if (iVar11 != 1) goto LAB_0028d8b8;
LAB_0028dc78:
      if (*(int *)(this + 4) < 1) {
        local_1c0 = 0;
        goto LAB_0028d944;
      }
      local_1c0 = *(ulong *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
      pcVar18 = FUN_0028bdc0;
      if (local_1c0 < 0x21) goto LAB_0028d944;
    }
    else {
LAB_0028d8b8:
      local_1b8 = 0;
      local_1b0 = 0;
      puVar13 = (undefined8 *)String::allocate((String *)&local_1b8,0x30);
      uVar8 = _LAB_00463ea8;
      uVar7 = DAT_00463ea0;
      uVar6 = DAT_00463e98;
      uVar5 = DAT_00463e90;
      uVar4 = _LAB_00463e88;
      *puVar13 = _DAT_00463e80;
      puVar13[1] = uVar4;
      puVar13[2] = uVar5;
      puVar13[3] = uVar6;
      puVar13[4] = uVar7;
      puVar13[5] = uVar8;
      error(-0xd7,(String *)&local_1b8,"void cv::Mat::copyTo(cv::OutputArray, cv::InputArray) const"
            ,"/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x16f);
      String::deallocate((String *)&local_1b8);
LAB_0028d91c:
      if (iVar11 == 1) goto LAB_0028dc78;
      local_1c0 = 0x88442211UL >> ((*(uint *)this & 7) << 2) & 0xf;
LAB_0028d944:
      pcVar18 = (code *)(&DAT_00509280)[local_1c0];
      if (pcVar18 == (code *)0x0) {
        pcVar18 = FUN_0028bdc0;
      }
    }
    iVar12 = _InputArray::kind((_InputArray *)param_1);
    if (iVar12 == 0x10000) {
      pMVar15 = *(Mat **)(param_1 + 8);
      local_80 = &local_b8;
      local_78 = &local_70;
      uVar1 = *(uint *)pMVar15;
      local_b0 = *(long *)(pMVar15 + 0x10);
      local_c0 = *(ulong *)pMVar15;
      local_b8 = *(undefined8 *)(pMVar15 + 8);
      uStack_a8 = *(undefined8 *)(pMVar15 + 0x18);
      local_a0 = *(undefined8 *)(pMVar15 + 0x20);
      local_98 = *(undefined8 *)(pMVar15 + 0x28);
      local_90 = *(undefined8 *)(pMVar15 + 0x30);
      local_88 = *(long *)(pMVar15 + 0x38);
      local_68 = 0;
      local_70 = 0;
      if (local_88 != 0) {
        piVar16 = (int *)(local_88 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar3) {
            *piVar16 = *piVar16 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar15 + 4) < 3) {
        local_70 = **(undefined8 **)(pMVar15 + 0x48);
        local_68 = (*(undefined8 **)(pMVar15 + 0x48))[1];
      }
      else {
        local_c0 = (ulong)uVar1;
        copySize((Mat *)&local_c0,pMVar15);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    lVar10 = local_b0;
    if (local_88 != 0) {
      piVar16 = (int *)(local_88 + 0x14);
      do {
        iVar12 = *piVar16;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar3) {
          *piVar16 = iVar12 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar12 == 1) {
        deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar12 = 0;
      puVar13 = local_80;
      do {
        *(undefined4 *)puVar13 = 0;
        iVar12 = iVar12 + 1;
        puVar13 = (undefined8 *)((long)puVar13 + 4);
      } while (iVar12 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    _OutputArray::create
              (param_1,*(int *)(this + 4),*(int **)(this + 0x40),*(uint *)this & 0xfff,-1,false,0);
    iVar12 = _InputArray::kind((_InputArray *)param_1);
    if (iVar12 == 0x10000) {
      pMVar15 = *(Mat **)(param_1 + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      local_60 = *(uint *)pMVar15;
      local_5c = *(int *)(pMVar15 + 4);
      local_58 = *(undefined4 *)(pMVar15 + 8);
      local_54 = *(undefined4 *)(pMVar15 + 0xc);
      local_50 = *(long *)(pMVar15 + 0x10);
      local_48 = *(undefined8 *)(pMVar15 + 0x18);
      local_40 = *(undefined8 *)(pMVar15 + 0x20);
      local_38 = *(undefined8 *)(pMVar15 + 0x28);
      local_30 = *(undefined8 *)(pMVar15 + 0x30);
      local_28 = *(long *)(pMVar15 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar16 = (int *)(local_28 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar3) {
            *piVar16 = *piVar16 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar15 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar15 + 0x48);
        local_8 = (*(undefined8 **)(pMVar15 + 0x48))[1];
      }
      else {
        local_5c = 0;
        copySize((Mat *)&local_60,pMVar15);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    if (local_50 != lVar10) {
      local_b8 = 0;
      local_c0 = 0;
      uStack_a8 = 0;
      local_b0 = 0;
      operator=((Mat *)&local_60,(Scalar_ *)&local_c0);
    }
    if (2 < *(int *)(this + 4)) {
      uStack_168 = 0;
      local_180 = this;
      local_178 = (Mat *)&local_60;
      local_170 = (Mat *)&local_120;
      NAryMatIterator::NAryMatIterator(aNStack_160,&local_180,&local_198,-1);
      for (uVar17 = 0; uVar17 < local_140; uVar17 = uVar17 + 1) {
        local_c0 = CONCAT44(1,iVar11 * local_138);
        (*pcVar18)(local_198,0,local_188,0,local_190,0,(Mat *)&local_c0,&local_1c0);
        NAryMatIterator::operator++(aNStack_160);
      }
      if (local_28 != 0) {
        piVar16 = (int *)(local_28 + 0x14);
        do {
          iVar11 = *piVar16;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar3) {
            *piVar16 = iVar11 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar11 == 1) {
          deallocate((Mat *)&local_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar11 = 0;
        puVar14 = local_20;
        do {
          *puVar14 = 0;
          iVar11 = iVar11 + 1;
          puVar14 = puVar14 + 1;
        } while (iVar11 < local_5c);
      }
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      if (local_e8 != 0) {
        piVar16 = (int *)(local_e8 + 0x14);
        do {
          iVar11 = *piVar16;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar3) {
            *piVar16 = iVar11 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar11 == 1) {
          deallocate((Mat *)&local_120);
        }
      }
      if (0 < local_11c) {
        iVar11 = 0;
        piVar16 = local_e0;
        do {
          *piVar16 = 0;
          iVar11 = iVar11 + 1;
          piVar16 = piVar16 + 1;
        } while (iVar11 < local_11c);
      }
      goto LAB_0028dc20;
    }
    if (((*(int **)(this + 0x40))[1] != local_e0[1]) || (**(int **)(this + 0x40) != *local_e0)) {
      local_1a8 = 0;
      local_1a0 = 0;
      puVar13 = (undefined8 *)String::allocate((String *)&local_1a8,0x15);
      uVar9 = DAT_00463ecc;
      uVar5 = DAT_00463ec0;
      uVar4 = _DAT_00463eb8;
      *(undefined4 *)(puVar13 + 2) = DAT_00463ec8;
      *(undefined1 *)((long)puVar13 + 0x14) = uVar9;
      *puVar13 = uVar4;
      puVar13[1] = uVar5;
      error(-0xd7,(String *)&local_1a8,"void cv::Mat::copyTo(cv::OutputArray, cv::InputArray) const"
            ,"/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x17e);
      String::deallocate((String *)&local_1a8);
    }
    iVar12 = *(int *)(this + 8);
    if (((local_60 & local_120 & 0x4000 & *(uint *)this) == 0) ||
       (uVar17 = (long)*(int *)(this + 0xc) * (long)iVar12 * (long)iVar11,
       uVar17 - (long)(int)uVar17 != 0)) {
      uVar17 = (ulong)(uint)(*(int *)(this + 0xc) * iVar11);
    }
    else {
      iVar12 = 1;
    }
    local_c0 = CONCAT44(iVar12,(int)uVar17);
    (*pcVar18)(*(undefined8 *)(this + 0x10),*(undefined8 *)(this + 0x50),local_110,local_d0,local_50
               ,local_10,(Mat *)&local_c0,&local_1c0);
    if (local_28 != 0) {
      piVar16 = (int *)(local_28 + 0x14);
      do {
        iVar11 = *piVar16;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar3) {
          *piVar16 = iVar11 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar11 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar11 = 0;
      puVar14 = local_20;
      do {
        *puVar14 = 0;
        iVar11 = iVar11 + 1;
        puVar14 = puVar14 + 1;
      } while (iVar11 < local_5c);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
  }
  if (local_e8 != 0) {
    piVar16 = (int *)(local_e8 + 0x14);
    do {
      iVar11 = *piVar16;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar3) {
        *piVar16 = iVar11 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar11 == 1) {
      deallocate((Mat *)&local_120);
    }
  }
  if (0 < local_11c) {
    iVar11 = 0;
    piVar16 = local_e0;
    do {
      *piVar16 = 0;
      iVar11 = iVar11 + 1;
      piVar16 = piVar16 + 1;
    } while (iVar11 < local_11c);
  }
LAB_0028dc20:
  local_e8 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  local_110 = 0;
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 0028e134 (2288 bytes) name=setTo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::Mat::setTo(cv::_InputArray const&, cv::_InputArray const&) */

Mat * __thiscall cv::Mat::setTo(Mat *this,_InputArray *param_1,_InputArray *param_2)

{
  bool bVar1;
  long lVar2;
  int *piVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  char cVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined4 uVar15;
  undefined2 uVar16;
  undefined1 uVar17;
  int iVar18;
  undefined8 *puVar19;
  int *piVar20;
  void *__src;
  code *pcVar21;
  int *piVar22;
  uint *puVar23;
  Mat *pMVar24;
  long lVar25;
  long lVar26;
  int iVar27;
  size_t __n;
  ulong uVar28;
  ulong local_568;
  undefined8 local_560;
  undefined8 local_558;
  int local_550 [4];
  uchar *local_540;
  long local_538;
  Mat *local_530;
  Mat *local_528;
  undefined8 local_520;
  NAryMatIterator aNStack_518 [32];
  ulong local_4f8;
  int local_4f0;
  uint local_4d8;
  int local_4d4;
  uint local_4d0;
  undefined4 local_4cc;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  uint *local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  uint local_478;
  int local_474;
  int local_470;
  int local_46c;
  long local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  int *local_438;
  undefined8 *local_430;
  undefined8 local_428;
  undefined8 local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  if (*(long *)(this + 0x10) == 0) {
    return this;
  }
  if (*(int *)(this + 4) < 3) {
    lVar26 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
  }
  else {
    lVar25 = 0;
    lVar26 = 1;
    do {
      lVar2 = lVar25 * 4;
      lVar25 = lVar25 + 1;
      lVar26 = lVar26 * *(int *)(*(long *)(this + 0x40) + lVar2);
    } while ((int)lVar25 < *(int *)(this + 4));
  }
  if (lVar26 == 0) {
    return this;
  }
  iVar18 = _InputArray::kind(param_1);
  if (iVar18 == 0x10000) {
    pMVar24 = *(Mat **)(param_1 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(uint *)pMVar24;
    local_4d4 = *(int *)(pMVar24 + 4);
    local_4d0 = *(uint *)(pMVar24 + 8);
    local_4cc = *(undefined4 *)(pMVar24 + 0xc);
    local_4c8 = *(undefined8 *)(pMVar24 + 0x10);
    local_4c0 = *(undefined8 *)(pMVar24 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar24 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar24 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar24 + 0x30);
    local_4a0 = *(long *)(pMVar24 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar20 = (int *)(local_4a0 + 0x14);
      do {
        cVar8 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar1) {
          *piVar20 = *piVar20 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_488 = **(undefined8 **)(pMVar24 + 0x48);
      local_480 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      local_4d4 = 0;
      copySize((Mat *)&local_4d8,pMVar24);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar18 = _InputArray::kind(param_2);
  if (iVar18 == 0x10000) {
    pMVar24 = *(Mat **)(param_2 + 8);
    local_438 = &local_470;
    local_430 = &local_428;
    local_478 = *(uint *)pMVar24;
    local_474 = *(int *)(pMVar24 + 4);
    local_470 = *(int *)(pMVar24 + 8);
    local_46c = *(int *)(pMVar24 + 0xc);
    local_468 = *(long *)(pMVar24 + 0x10);
    local_460 = *(undefined8 *)(pMVar24 + 0x18);
    local_458 = *(undefined8 *)(pMVar24 + 0x20);
    local_450 = *(undefined8 *)(pMVar24 + 0x28);
    local_448 = *(undefined8 *)(pMVar24 + 0x30);
    local_440 = *(long *)(pMVar24 + 0x38);
    local_420 = 0;
    local_428 = 0;
    if (local_440 != 0) {
      piVar20 = (int *)(local_440 + 0x14);
      do {
        cVar8 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar20,0x10);
        if (bVar1) {
          *piVar20 = *piVar20 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_428 = **(undefined8 **)(pMVar24 + 0x48);
      local_420 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      local_474 = 0;
      copySize((Mat *)&local_478,pMVar24);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar6 = *(uint *)this;
  _InputArray::kind(param_1);
  if ((local_4d4 < 3) && ((local_4d8 >> 0xe & 1) != 0)) {
    uVar7 = *local_498;
    if (local_498[1] == 1) {
      if (((uVar7 != 1) && (uVar6 = (uVar6 >> 3 & 0x1ff) + 1, uVar7 != uVar6)) &&
         ((uVar7 != 4 || (((local_4d8 & 0xfff) != 6 || (4 < uVar6)))))) goto LAB_0028e21c;
    }
    else if ((uVar7 != 1) || ((uVar6 >> 3 & 0x1ff) + 1 != local_498[1])) goto LAB_0028e21c;
  }
  else {
LAB_0028e21c:
    local_560 = 0;
    local_558 = 0;
    puVar19 = (undefined8 *)String::allocate((String *)&local_560,0x3c);
    uVar15 = DAT_00463f08;
    uVar14 = DAT_00463ef8;
    uVar13 = DAT_00463ef0;
    uVar12 = DAT_00463ee8;
    uVar11 = _DAT_00463ee0;
    uVar10 = DAT_00463ed8;
    uVar9 = DAT_00463ed0;
    puVar19[6] = DAT_00463f00;
    *(undefined4 *)(puVar19 + 7) = uVar15;
    *puVar19 = uVar9;
    puVar19[1] = uVar10;
    puVar19[2] = uVar11;
    puVar19[3] = uVar12;
    puVar19[4] = uVar13;
    puVar19[5] = uVar14;
    error(-0xd7,(String *)&local_560,"cv::Mat& cv::Mat::setTo(cv::InputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x1d8);
    String::deallocate((String *)&local_560);
  }
  if (local_468 != 0) {
    if (local_474 < 3) {
      lVar25 = (long)local_46c * (long)local_470;
    }
    else {
      lVar26 = 0;
      lVar25 = 1;
      do {
        piVar20 = local_438 + lVar26;
        lVar26 = lVar26 + 1;
        lVar25 = lVar25 * *piVar20;
      } while ((int)lVar26 < local_474);
    }
    if (lVar25 != 0) {
      if ((local_478 & 0xfff) == 0) {
        piVar20 = *(int **)(this + 0x40);
        iVar18 = piVar20[-1];
        if (iVar18 == local_438[-1]) {
          if (iVar18 == 2) {
            if ((*piVar20 != *local_438) || (piVar20[1] != local_438[1])) goto LAB_0028e7b0;
          }
          else if (0 < iVar18) {
            if (*piVar20 == *local_438) {
              piVar3 = piVar20 + (iVar18 - 1);
              piVar22 = local_438;
              do {
                piVar22 = piVar22 + 1;
                if (piVar20 == piVar3) goto LAB_0028e334;
                piVar20 = piVar20 + 1;
              } while (*piVar20 == *piVar22);
            }
            goto LAB_0028e7b0;
          }
          goto LAB_0028e334;
        }
      }
LAB_0028e7b0:
      local_550[0] = 0;
      local_550[1] = 0;
      local_550[2] = 0;
      local_550[3] = 0;
      puVar19 = (undefined8 *)String::allocate((String *)local_550,0x3b);
      uVar17 = DAT_00463f4a;
      uVar16 = DAT_00463f48;
      uVar14 = DAT_00463f38;
      uVar13 = DAT_00463f30;
      uVar12 = _LAB_00463f28;
      uVar11 = _DAT_00463f20;
      uVar10 = DAT_00463f18;
      uVar9 = DAT_00463f10;
      puVar19[6] = DAT_00463f40;
      *(undefined2 *)(puVar19 + 7) = uVar16;
      *(undefined1 *)((long)puVar19 + 0x3a) = uVar17;
      *puVar19 = uVar9;
      puVar19[1] = uVar10;
      puVar19[2] = uVar11;
      puVar19[3] = uVar12;
      puVar19[4] = uVar13;
      puVar19[5] = uVar14;
      error(-0xd7,(String *)local_550,"cv::Mat& cv::Mat::setTo(cv::InputArray, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x1d9);
      String::deallocate((String *)local_550);
    }
  }
LAB_0028e334:
  if (*(int *)(this + 4) < 1) {
    local_568 = 0;
LAB_0028e714:
    pcVar21 = (code *)(&DAT_00509280)[local_568];
    if (pcVar21 != (code *)0x0) goto LAB_0028e370;
  }
  else {
    local_568 = *(ulong *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
    if (local_568 < 0x21) goto LAB_0028e714;
  }
  pcVar21 = FUN_0028bdc0;
LAB_0028e370:
  local_520 = 0;
  local_528 = (Mat *)0x0;
  if (local_468 != 0) {
    if (local_474 < 3) {
      lVar25 = (long)local_46c * (long)local_470;
    }
    else {
      lVar25 = 1;
      lVar26 = 0;
      do {
        piVar20 = local_438 + lVar26;
        lVar26 = lVar26 + 1;
        lVar25 = lVar25 * *piVar20;
      } while ((int)lVar26 < local_474);
    }
    local_528 = (Mat *)&local_478;
    if (lVar25 == 0) {
      local_528 = (Mat *)0x0;
    }
  }
  local_540 = (uchar *)0x0;
  local_538 = 0;
  local_530 = this;
  NAryMatIterator::NAryMatIterator(aNStack_518,&local_530,&local_540,-1);
  local_418 = auStack_408;
  iVar18 = 0;
  if (local_568 != 0) {
    iVar18 = (int)((local_568 + 0x3ff) / local_568);
  }
  local_410 = 0x408;
  iVar4 = local_4f0;
  if (iVar18 <= local_4f0) {
    iVar4 = iVar18;
  }
  uVar28 = (long)iVar4 * local_568 + 0x20;
  if (0x408 < uVar28) {
    local_418 = operator_new__(uVar28);
  }
  __src = (void *)((ulong)(local_418 + 7) & 0xfffffffffffffff8);
  local_410 = uVar28;
  FUN_0024b4c4((Mat *)&local_4d8,*(uint *)this & 0xfff,__src,(long)iVar4);
  uVar28 = 0;
  if (local_4f8 != 0) {
    do {
      if (0 < local_4f0) {
        iVar18 = 0;
        iVar27 = iVar4;
        do {
          while( true ) {
            iVar5 = iVar4;
            if (iVar18 + local_4f0 < iVar4) {
              iVar5 = iVar18 + local_4f0;
            }
            __n = (long)iVar5 * local_568;
            if (local_538 != 0) break;
            memcpy(local_540,__src,__n);
            local_540 = local_540 + __n;
            iVar18 = iVar18 + -iVar4;
            bVar1 = local_4f0 <= iVar27;
            iVar27 = iVar27 + iVar4;
            if (bVar1) goto LAB_0028e548;
          }
          local_550[1] = 1;
          local_550[0] = iVar5;
          (*pcVar21)(__src,0,local_538,0,local_540,0,local_550,&local_568);
          local_538 = local_538 + iVar5;
          local_540 = local_540 + __n;
          iVar18 = iVar18 + -iVar4;
          bVar1 = iVar27 < local_4f0;
          iVar27 = iVar27 + iVar4;
        } while (bVar1);
      }
LAB_0028e548:
      uVar28 = uVar28 + 1;
      NAryMatIterator::operator++(aNStack_518);
    } while (uVar28 < local_4f8);
  }
  if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_440 != 0) {
    piVar20 = (int *)(local_440 + 0x14);
    do {
      iVar18 = *piVar20;
      cVar8 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar20,0x10);
      if (bVar1) {
        *piVar20 = iVar18 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar18 == 1) {
      deallocate((Mat *)&local_478);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar18 = 0;
    piVar20 = local_438;
    do {
      *piVar20 = 0;
      iVar18 = iVar18 + 1;
      piVar20 = piVar20 + 1;
    } while (iVar18 < local_474);
  }
  if (local_430 != &local_428) {
    fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar20 = (int *)(local_4a0 + 0x14);
    do {
      iVar18 = *piVar20;
      cVar8 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar20,0x10);
      if (bVar1) {
        *piVar20 = iVar18 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar18 == 1) {
      deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar18 = 0;
    puVar23 = local_498;
    do {
      *puVar23 = 0;
      iVar18 = iVar18 + 1;
      puVar23 = puVar23 + 1;
    } while (iVar18 < local_4d4);
  }
  if (local_490 != &local_488) {
    fastFree(local_490);
  }
  return this;
}


==================================================================

### FUNC 0028eac0 (5136 bytes) name=flip

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::flip(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::flip(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined1 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  undefined1 *puVar15;
  long lVar16;
  int iVar17;
  undefined4 uVar18;
  undefined1 uVar19;
  uint uVar20;
  char cVar21;
  long lVar22;
  bool bVar23;
  int iVar24;
  undefined8 *puVar25;
  ulong uVar26;
  int *piVar27;
  undefined4 *puVar28;
  ulong uVar29;
  Mat *pMVar30;
  ulong uVar31;
  int *piVar32;
  undefined4 *puVar33;
  ulong uVar34;
  ulong uVar35;
  int iVar36;
  undefined4 *puVar37;
  long lVar38;
  undefined4 *puVar39;
  int *piVar40;
  undefined4 *puVar41;
  undefined4 *puVar42;
  long lVar43;
  undefined4 *puVar44;
  uint uVar45;
  int iVar46;
  ulong uVar47;
  undefined4 *puVar48;
  int iVar49;
  undefined4 *puVar50;
  long lVar51;
  undefined4 *puVar52;
  int iVar53;
  int iVar54;
  undefined4 *puVar55;
  uint uVar56;
  long lVar57;
  long lVar58;
  undefined4 *puVar59;
  uint uVar60;
  ulong uVar61;
  int iVar62;
  ulong uVar63;
  long lVar64;
  undefined4 *puVar65;
  undefined8 uVar66;
  undefined8 uVar67;
  undefined8 uVar68;
  long lVar69;
  int local_928;
  int iStack_924;
  uint local_920;
  int local_91c;
  int local_918;
  undefined4 local_914;
  undefined4 *local_910;
  undefined8 local_908;
  undefined8 local_900;
  undefined8 local_8f8;
  undefined8 local_8f0;
  long local_8e8;
  int *local_8e0;
  long *local_8d8;
  long local_8d0;
  long local_8c8;
  undefined4 local_8c0;
  int local_8bc;
  int local_8b8;
  undefined4 local_8b4;
  undefined4 *local_8b0;
  undefined8 local_8a8;
  undefined8 local_8a0;
  undefined8 local_898;
  undefined8 local_890;
  long local_888;
  int *local_880;
  long *local_878;
  long local_870;
  long local_868;
  int *local_860;
  ulong local_858;
  int aiStack_850 [264];
  int *local_430;
  ulong local_428;
  int aiStack_420 [264];
  
  iVar24 = _InputArray::dims(param_1,-1);
  if (2 < iVar24) {
    local_430 = (int *)0x0;
    local_428 = 0;
    puVar25 = (undefined8 *)String::allocate((String *)&local_430,0x10);
    uVar66 = _DAT_00463f58;
    *puVar25 = DAT_00463f50;
    puVar25[1] = uVar66;
    error(-0xd7,(String *)&local_430,"void cv::flip(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x2da);
    String::deallocate((String *)&local_430);
  }
  _InputArray::size((int)param_1);
  if (param_3 < 0) {
    if (local_928 == 1) {
      if (iStack_924 == 1) goto LAB_0028eb8c;
      param_3 = 0;
    }
    else if (iStack_924 == 1) {
      param_3 = 1;
    }
LAB_0028ebd8:
    iVar24 = _InputArray::kind(param_1);
  }
  else {
    if ((0 < param_3) && (local_928 == 1)) {
LAB_0028eb8c:
      _InputArray::copyTo(param_1,param_2);
      return;
    }
    if (iStack_924 != 1) goto LAB_0028ebd8;
    if (param_3 == 0) goto LAB_0028eb8c;
    iVar24 = _InputArray::kind(param_1);
  }
  if (iVar24 == 0x10000) {
    pMVar30 = *(Mat **)(param_1 + 8);
    local_8e0 = &local_918;
    local_8d8 = &local_8d0;
    local_920 = *(uint *)pMVar30;
    local_91c = *(int *)(pMVar30 + 4);
    local_918 = *(int *)(pMVar30 + 8);
    local_914 = *(undefined4 *)(pMVar30 + 0xc);
    local_910 = *(undefined4 **)(pMVar30 + 0x10);
    local_908 = *(undefined8 *)(pMVar30 + 0x18);
    local_900 = *(undefined8 *)(pMVar30 + 0x20);
    local_8f8 = *(undefined8 *)(pMVar30 + 0x28);
    local_8f0 = *(undefined8 *)(pMVar30 + 0x30);
    local_8e8 = *(long *)(pMVar30 + 0x38);
    local_8c8 = 0;
    local_8d0 = 0;
    if (local_8e8 != 0) {
      piVar27 = (int *)(local_8e8 + 0x14);
      do {
        cVar21 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar23) {
          *piVar27 = *piVar27 + 1;
          cVar21 = ExclusiveMonitorsStatus();
        }
      } while (cVar21 != '\0');
    }
    if (*(int *)(pMVar30 + 4) < 3) {
      local_8d0 = **(long **)(pMVar30 + 0x48);
      local_8c8 = (*(long **)(pMVar30 + 0x48))[1];
    }
    else {
      local_91c = 0;
      Mat::copySize((Mat *)&local_920,pMVar30);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar1 = local_920;
  local_430 = (int *)CONCAT44(iStack_924,local_928);
  _OutputArray::create(param_2,&local_430,local_920 & 0xfff,0xffffffff,0,0);
  iVar24 = _InputArray::kind((_InputArray *)param_2);
  if (iVar24 == 0x10000) {
    pMVar30 = *(Mat **)(param_2 + 8);
    local_888 = *(long *)(pMVar30 + 0x38);
    local_8c0 = *(undefined4 *)pMVar30;
    local_8bc = *(int *)(pMVar30 + 4);
    local_8b8 = *(int *)(pMVar30 + 8);
    local_8b4 = *(undefined4 *)(pMVar30 + 0xc);
    local_8b0 = *(undefined4 **)(pMVar30 + 0x10);
    local_8a8 = *(undefined8 *)(pMVar30 + 0x18);
    local_8a0 = *(undefined8 *)(pMVar30 + 0x20);
    local_898 = *(undefined8 *)(pMVar30 + 0x28);
    local_890 = *(undefined8 *)(pMVar30 + 0x30);
    local_880 = &local_8b8;
    local_878 = &local_870;
    local_868 = 0;
    local_870 = 0;
    if (local_888 != 0) {
      piVar27 = (int *)(local_888 + 0x14);
      do {
        cVar21 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar23) {
          *piVar27 = *piVar27 + 1;
          cVar21 = ExclusiveMonitorsStatus();
        }
      } while (cVar21 != '\0');
    }
    if (*(int *)(pMVar30 + 4) < 3) {
      local_870 = **(long **)(pMVar30 + 0x48);
      local_868 = (*(long **)(pMVar30 + 0x48))[1];
    }
    else {
      local_8bc = 0;
      Mat::copySize((Mat *)&local_8c0,pMVar30);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  lVar22 = local_870;
  puVar59 = local_8b0;
  lVar38 = local_8d0;
  puVar44 = local_910;
  iVar24 = (uVar1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3);
  uVar61 = (ulong)iVar24;
  if (param_3 < 1) {
    lVar38 = (long)(*local_8e0 + -1);
    puVar44 = (undefined4 *)((long)local_910 + lVar38 * local_8d0);
    iVar17 = iVar24 * local_8e0[1];
    puVar39 = (undefined4 *)((long)local_8b0 + lVar38 * local_870);
    iVar62 = (*local_8e0 + 1) / 2;
    if (0 < iVar62) {
      puVar65 = local_910 + 0x10;
      iVar53 = 0;
      puVar28 = puVar44 + 0x10;
      uVar20 = iVar17 - 0x10U >> 4;
      puVar50 = local_8b0 + 0x10;
      iVar36 = iVar17 + -3;
      uVar1 = uVar20 + 1;
      puVar52 = puVar39 + 0x10;
      iVar49 = uVar1 * 0x10;
      if (iVar17 + -0xf < 1) {
        iVar49 = 0;
      }
      iVar2 = iVar49 + 4;
      uVar45 = (uint)((iVar17 + -4) - iVar49) >> 2;
      lVar43 = (long)iVar49;
      lVar38 = lVar43 + 0x10;
      lVar64 = (long)iVar2;
      lVar51 = (long)(iVar49 + 8);
      uVar3 = uVar45 + 1;
      lVar69 = NEON_shl((ulong)uVar45 + 1,2);
      iVar5 = iVar2 + uVar45 * 4;
      puVar41 = local_8b0;
      puVar42 = local_910;
      do {
        iVar46 = 0;
        if ((((ulong)puVar39 | (ulong)puVar41 | (ulong)puVar42 | (ulong)puVar44) & 3) == 0) {
          if (0 < iVar17 + -0xf) {
            if ((((uVar1 < 8 ||
                  (puVar42 < puVar50 && puVar41 < puVar65 || puVar42 < puVar52 && puVar39 < puVar65)
                  ) || puVar41 < puVar28 && puVar44 < puVar50) ||
                 puVar41 < puVar52 && puVar39 < puVar50) || (puVar44 < puVar52 && puVar39 < puVar28)
               ) {
              puVar33 = puVar39 + 1;
              puVar37 = puVar42;
              puVar48 = puVar44;
              puVar55 = puVar41;
              do {
                puVar8 = puVar33 + 4;
                uVar18 = *puVar37;
                *puVar55 = *puVar48;
                puVar33[-1] = uVar18;
                uVar18 = puVar37[1];
                puVar55[1] = puVar48[1];
                *puVar33 = uVar18;
                uVar18 = puVar37[2];
                puVar55[2] = puVar48[2];
                puVar33[1] = uVar18;
                uVar18 = puVar37[3];
                puVar55[3] = puVar48[3];
                puVar33[2] = uVar18;
                puVar33 = puVar8;
                puVar37 = puVar37 + 4;
                puVar48 = puVar48 + 4;
                puVar55 = puVar55 + 4;
              } while (puVar8 != puVar39 + (ulong)uVar20 * 4 + 5);
            }
            else {
              lVar57 = 0;
              uVar45 = 0;
              do {
                puVar25 = (undefined8 *)((long)puVar44 + lVar57);
                puVar6 = (undefined8 *)((long)puVar41 + lVar57);
                puVar7 = (undefined8 *)((long)puVar39 + lVar57);
                uVar68 = *puVar25;
                uVar45 = uVar45 + 1;
                uVar67 = ((undefined8 *)((long)puVar42 + lVar57))[1];
                uVar66 = *(undefined8 *)((long)puVar42 + lVar57);
                lVar57 = lVar57 + 0x10;
                puVar6[1] = puVar25[1];
                *puVar6 = uVar68;
                puVar7[1] = uVar67;
                *puVar7 = uVar66;
              } while (uVar45 < uVar1);
            }
          }
          iVar46 = iVar49;
          if (iVar49 < iVar36) {
            puVar33 = (undefined4 *)((long)puVar41 + lVar38);
            puVar37 = (undefined4 *)((long)puVar42 + lVar43);
            puVar48 = (undefined4 *)((long)puVar41 + lVar43);
            puVar55 = (undefined4 *)((long)puVar39 + lVar38);
            puVar8 = (undefined4 *)((long)puVar39 + lVar43);
            puVar9 = (undefined4 *)((long)puVar44 + lVar43);
            iVar46 = iVar5;
            if ((((uVar3 < 10 ||
                  (puVar37 < puVar33 && puVar48 < (undefined4 *)((long)puVar42 + lVar38) ||
                  puVar37 < puVar55 && puVar8 < (undefined4 *)((long)puVar42 + lVar38))) ||
                 puVar48 < (undefined4 *)((long)puVar44 + lVar38) && puVar9 < puVar33) ||
                 puVar48 < puVar55 && puVar8 < puVar33) ||
               (puVar9 < puVar55 && puVar8 < (undefined4 *)((long)puVar44 + lVar38))) {
              lVar57 = 0;
              do {
                uVar18 = *(undefined4 *)((long)puVar37 + lVar57);
                *(undefined4 *)((long)puVar48 + lVar57) = *(undefined4 *)((long)puVar9 + lVar57);
                *(undefined4 *)((long)puVar8 + lVar57) = uVar18;
                lVar57 = lVar57 + 4;
              } while (lVar57 != lVar69);
            }
            else {
              uVar45 = -((uint)((ulong)puVar37 >> 2) & 3) & 3;
              if (uVar3 < uVar45) {
                uVar45 = uVar3;
              }
              iVar54 = iVar49;
              if (uVar45 != 0) {
                uVar18 = *puVar37;
                *puVar48 = *puVar9;
                *puVar8 = uVar18;
                iVar54 = iVar2;
                if (uVar45 != 1) {
                  uVar18 = *(undefined4 *)((long)puVar42 + lVar64);
                  *(undefined4 *)((long)puVar41 + lVar64) = *(undefined4 *)((long)puVar44 + lVar64);
                  *(undefined4 *)((long)puVar39 + lVar64) = uVar18;
                  iVar54 = iVar49 + 8;
                  if (uVar45 == 3) {
                    uVar18 = *(undefined4 *)((long)puVar42 + lVar51);
                    *(undefined4 *)((long)puVar41 + lVar51) =
                         *(undefined4 *)((long)puVar44 + lVar51);
                    *(undefined4 *)((long)puVar39 + lVar51) = uVar18;
                    iVar54 = iVar49 + 0xc;
                  }
                }
              }
              lVar57 = 0;
              uVar56 = 0;
              uVar4 = ((uVar3 - uVar45) - 4 >> 2) + 1;
              do {
                lVar58 = lVar57 + lVar43 + (ulong)uVar45 * 4;
                uVar56 = uVar56 + 1;
                uVar68 = *(undefined8 *)((long)puVar44 + lVar58);
                uVar67 = ((undefined8 *)((long)puVar42 + lVar58))[1];
                uVar66 = *(undefined8 *)((long)puVar42 + lVar58);
                lVar57 = lVar57 + 0x10;
                ((undefined8 *)((long)puVar41 + lVar58))[1] =
                     ((undefined8 *)((long)puVar44 + lVar58))[1];
                *(undefined8 *)((long)puVar41 + lVar58) = uVar68;
                ((undefined8 *)((long)puVar39 + lVar58))[1] = uVar67;
                *(undefined8 *)((long)puVar39 + lVar58) = uVar66;
              } while (uVar56 < uVar4);
              iVar54 = iVar54 + uVar4 * 0x10;
              if (uVar4 * 4 != uVar3 - uVar45) {
                lVar57 = (long)iVar54;
                uVar18 = *(undefined4 *)((long)puVar42 + lVar57);
                *(undefined4 *)((long)puVar41 + lVar57) = *(undefined4 *)((long)puVar44 + lVar57);
                *(undefined4 *)((long)puVar39 + lVar57) = uVar18;
                if (iVar54 + 4 < iVar36) {
                  lVar57 = (long)(iVar54 + 4);
                  uVar18 = *(undefined4 *)((long)puVar42 + lVar57);
                  *(undefined4 *)((long)puVar41 + lVar57) = *(undefined4 *)((long)puVar44 + lVar57);
                  *(undefined4 *)((long)puVar39 + lVar57) = uVar18;
                  if (iVar54 + 8 < iVar36) {
                    lVar57 = (long)(iVar54 + 8);
                    uVar18 = *(undefined4 *)((long)puVar42 + lVar57);
                    *(undefined4 *)((long)puVar41 + lVar57) =
                         *(undefined4 *)((long)puVar44 + lVar57);
                    *(undefined4 *)((long)puVar39 + lVar57) = uVar18;
                  }
                }
              }
            }
          }
        }
        if (iVar46 < iVar17) {
          lVar58 = (long)iVar46;
          uVar45 = iVar17 - iVar46;
          lVar57 = lVar58 + 0x10;
          puVar10 = (undefined1 *)((long)puVar42 + lVar58);
          puVar11 = (undefined1 *)((long)puVar41 + lVar57);
          puVar12 = (undefined1 *)((long)puVar41 + lVar58);
          puVar13 = (undefined1 *)((long)puVar39 + lVar57);
          puVar14 = (undefined1 *)((long)puVar39 + lVar58);
          puVar15 = (undefined1 *)((long)puVar44 + lVar58);
          if ((((uVar45 < 0x15 ||
                (puVar10 < puVar11 && puVar12 < (undefined1 *)((long)puVar42 + lVar57) ||
                puVar10 < puVar13 && puVar14 < (undefined1 *)((long)puVar42 + lVar57))) ||
               puVar12 < (undefined1 *)((long)puVar44 + lVar57) && puVar15 < puVar11) ||
               puVar12 < puVar13 && puVar14 < puVar11) ||
             (puVar15 < puVar13 && puVar14 < (undefined1 *)((long)puVar44 + lVar57))) {
            lVar57 = 0;
            do {
              uVar19 = puVar10[lVar57];
              puVar12[lVar57] = puVar15[lVar57];
              puVar14[lVar57] = uVar19;
              lVar57 = lVar57 + 1;
            } while (lVar57 != (ulong)(uint)((iVar17 + -1) - iVar46) + 1);
          }
          else {
            uVar4 = -(int)puVar10 & 0xf;
            if (uVar45 < uVar4) {
              uVar4 = uVar45;
            }
            iVar54 = iVar46;
            if (uVar4 != 0) {
              uVar19 = *puVar10;
              iVar54 = iVar46 + 1;
              *puVar12 = *puVar15;
              *puVar14 = uVar19;
              if (uVar4 != 1) {
                lVar57 = (long)iVar54;
                iVar54 = iVar46 + 2;
                uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
                *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                if (uVar4 != 2) {
                  lVar57 = (long)iVar54;
                  iVar54 = iVar46 + 3;
                  uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                  *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
                  *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                  if (uVar4 != 3) {
                    lVar57 = (long)iVar54;
                    iVar54 = iVar46 + 4;
                    uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                    *(undefined1 *)((long)puVar41 + lVar57) =
                         *(undefined1 *)((long)puVar44 + lVar57);
                    *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                    if (uVar4 != 4) {
                      lVar57 = (long)iVar54;
                      iVar54 = iVar46 + 5;
                      uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                      *(undefined1 *)((long)puVar41 + lVar57) =
                           *(undefined1 *)((long)puVar44 + lVar57);
                      *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                      if (uVar4 != 5) {
                        lVar57 = (long)iVar54;
                        iVar54 = iVar46 + 6;
                        uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                        *(undefined1 *)((long)puVar41 + lVar57) =
                             *(undefined1 *)((long)puVar44 + lVar57);
                        *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                        if (uVar4 != 6) {
                          lVar57 = (long)iVar54;
                          iVar54 = iVar46 + 7;
                          uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                          *(undefined1 *)((long)puVar41 + lVar57) =
                               *(undefined1 *)((long)puVar44 + lVar57);
                          *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                          if (uVar4 != 7) {
                            lVar57 = (long)iVar54;
                            iVar54 = iVar46 + 8;
                            uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                            *(undefined1 *)((long)puVar41 + lVar57) =
                                 *(undefined1 *)((long)puVar44 + lVar57);
                            *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                            if (uVar4 != 8) {
                              lVar57 = (long)iVar54;
                              iVar54 = iVar46 + 9;
                              uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                              *(undefined1 *)((long)puVar41 + lVar57) =
                                   *(undefined1 *)((long)puVar44 + lVar57);
                              *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                              if (uVar4 != 9) {
                                lVar57 = (long)iVar54;
                                iVar54 = iVar46 + 10;
                                uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                *(undefined1 *)((long)puVar41 + lVar57) =
                                     *(undefined1 *)((long)puVar44 + lVar57);
                                *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                if (uVar4 != 10) {
                                  lVar57 = (long)iVar54;
                                  iVar54 = iVar46 + 0xb;
                                  uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                  *(undefined1 *)((long)puVar41 + lVar57) =
                                       *(undefined1 *)((long)puVar44 + lVar57);
                                  *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                  if (uVar4 != 0xb) {
                                    lVar57 = (long)iVar54;
                                    iVar54 = iVar46 + 0xc;
                                    uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                    *(undefined1 *)((long)puVar41 + lVar57) =
                                         *(undefined1 *)((long)puVar44 + lVar57);
                                    *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                    if (uVar4 != 0xc) {
                                      lVar57 = (long)iVar54;
                                      iVar54 = iVar46 + 0xd;
                                      uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                      *(undefined1 *)((long)puVar41 + lVar57) =
                                           *(undefined1 *)((long)puVar44 + lVar57);
                                      *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                      if (uVar4 != 0xd) {
                                        lVar57 = (long)iVar54;
                                        iVar54 = iVar46 + 0xe;
                                        uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                        *(undefined1 *)((long)puVar41 + lVar57) =
                                             *(undefined1 *)((long)puVar44 + lVar57);
                                        *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                        if (uVar4 == 0xf) {
                                          lVar57 = (long)iVar54;
                                          iVar54 = iVar46 + 0xf;
                                          uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                          *(undefined1 *)((long)puVar41 + lVar57) =
                                               *(undefined1 *)((long)puVar44 + lVar57);
                                          *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar56 = ((uVar45 - uVar4) - 0x10 >> 4) + 1;
            iVar46 = uVar56 * 0x10;
            if (0xe < (uVar45 - 1) - uVar4) {
              lVar57 = 0;
              uVar60 = 0;
              do {
                lVar16 = lVar57 + (ulong)uVar4 + lVar58;
                uVar60 = uVar60 + 1;
                uVar68 = *(undefined8 *)((long)puVar44 + lVar16);
                uVar67 = ((undefined8 *)((long)puVar42 + lVar16))[1];
                uVar66 = *(undefined8 *)((long)puVar42 + lVar16);
                lVar57 = lVar57 + 0x10;
                ((undefined8 *)((long)puVar41 + lVar16))[1] =
                     ((undefined8 *)((long)puVar44 + lVar16))[1];
                *(undefined8 *)((long)puVar41 + lVar16) = uVar68;
                ((undefined8 *)((long)puVar39 + lVar16))[1] = uVar67;
                *(undefined8 *)((long)puVar39 + lVar16) = uVar66;
              } while (uVar60 < uVar56);
              iVar54 = iVar54 + iVar46;
              if (iVar46 == uVar45 - uVar4) goto LAB_0028fb14;
            }
            lVar57 = (long)iVar54;
            uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
            *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
            *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
            if (iVar54 + 1 < iVar17) {
              lVar57 = (long)(iVar54 + 1);
              uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
              *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
              *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
              if (iVar54 + 2 < iVar17) {
                lVar57 = (long)(iVar54 + 2);
                uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
                *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                if (iVar54 + 3 < iVar17) {
                  lVar57 = (long)(iVar54 + 3);
                  uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                  *(undefined1 *)((long)puVar41 + lVar57) = *(undefined1 *)((long)puVar44 + lVar57);
                  *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                  if (iVar54 + 4 < iVar17) {
                    lVar57 = (long)(iVar54 + 4);
                    uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                    *(undefined1 *)((long)puVar41 + lVar57) =
                         *(undefined1 *)((long)puVar44 + lVar57);
                    *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                    if (iVar54 + 5 < iVar17) {
                      lVar57 = (long)(iVar54 + 5);
                      uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                      *(undefined1 *)((long)puVar41 + lVar57) =
                           *(undefined1 *)((long)puVar44 + lVar57);
                      *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                      if (iVar54 + 6 < iVar17) {
                        lVar57 = (long)(iVar54 + 6);
                        uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                        *(undefined1 *)((long)puVar41 + lVar57) =
                             *(undefined1 *)((long)puVar44 + lVar57);
                        *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                        if (iVar54 + 7 < iVar17) {
                          lVar57 = (long)(iVar54 + 7);
                          uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                          *(undefined1 *)((long)puVar41 + lVar57) =
                               *(undefined1 *)((long)puVar44 + lVar57);
                          *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                          if (iVar54 + 8 < iVar17) {
                            lVar57 = (long)(iVar54 + 8);
                            uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                            *(undefined1 *)((long)puVar41 + lVar57) =
                                 *(undefined1 *)((long)puVar44 + lVar57);
                            *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                            if (iVar54 + 9 < iVar17) {
                              lVar57 = (long)(iVar54 + 9);
                              uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                              *(undefined1 *)((long)puVar41 + lVar57) =
                                   *(undefined1 *)((long)puVar44 + lVar57);
                              *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                              if (iVar54 + 10 < iVar17) {
                                lVar57 = (long)(iVar54 + 10);
                                uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                *(undefined1 *)((long)puVar41 + lVar57) =
                                     *(undefined1 *)((long)puVar44 + lVar57);
                                *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                if (iVar54 + 0xb < iVar17) {
                                  lVar57 = (long)(iVar54 + 0xb);
                                  uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                  *(undefined1 *)((long)puVar41 + lVar57) =
                                       *(undefined1 *)((long)puVar44 + lVar57);
                                  *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                  if (iVar54 + 0xc < iVar17) {
                                    lVar57 = (long)(iVar54 + 0xc);
                                    uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                    *(undefined1 *)((long)puVar41 + lVar57) =
                                         *(undefined1 *)((long)puVar44 + lVar57);
                                    *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                    if (iVar54 + 0xd < iVar17) {
                                      lVar57 = (long)(iVar54 + 0xd);
                                      uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                      *(undefined1 *)((long)puVar41 + lVar57) =
                                           *(undefined1 *)((long)puVar44 + lVar57);
                                      *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                      if (iVar54 + 0xe < iVar17) {
                                        lVar57 = (long)(iVar54 + 0xe);
                                        uVar19 = *(undefined1 *)((long)puVar42 + lVar57);
                                        *(undefined1 *)((long)puVar41 + lVar57) =
                                             *(undefined1 *)((long)puVar44 + lVar57);
                                        *(undefined1 *)((long)puVar39 + lVar57) = uVar19;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0028fb14:
        iVar53 = iVar53 + 1;
        puVar42 = (undefined4 *)((long)puVar42 + local_8d0);
        puVar41 = (undefined4 *)((long)puVar41 + local_870);
        puVar50 = (undefined4 *)((long)puVar50 + local_870);
        puVar52 = (undefined4 *)((long)puVar52 - local_870);
        puVar44 = (undefined4 *)((long)puVar44 - local_8d0);
        puVar39 = (undefined4 *)((long)puVar39 - local_870);
        puVar65 = (undefined4 *)((long)puVar65 + local_8d0);
        puVar28 = (undefined4 *)((long)puVar28 - local_8d0);
      } while (iVar53 != iVar62);
    }
    if (param_3 == 0) goto LAB_0028efdc;
    piVar27 = aiStack_420;
    iVar17 = local_880[1];
    iVar62 = *local_880;
    local_428 = 0x108;
    uVar34 = (long)iVar24 * (long)iVar17;
    local_430 = piVar27;
    iVar53 = iVar24 * ((iVar17 + 1) / 2);
    if (uVar34 < 0x109) {
      local_428 = uVar34;
      bVar23 = false;
    }
    else {
      uVar26 = uVar34 * 4;
      if (0x1fc0000000000000 < uVar34) {
        uVar26 = 0xffffffffffffffff;
      }
      piVar27 = operator_new__(uVar26);
      local_430 = piVar27;
      bVar23 = piVar27 != aiStack_420;
      local_428 = uVar34;
    }
    if (0 < iVar17) {
      lVar38 = 0;
      uVar26 = uVar61;
      if (iVar24 == 0) {
        uVar26 = 1;
      }
      iVar49 = 0;
      iVar36 = iVar24 * (iVar17 + -1);
      piVar40 = piVar27;
      do {
        uVar29 = -((ulong)piVar40 >> 2 & 3) & 3;
        if (uVar26 < uVar29) {
          uVar29 = uVar26;
        }
        uVar31 = uVar26;
        if ((uVar26 < 6) || (uVar35 = 0, uVar31 = uVar29, uVar29 != 0)) {
          *piVar40 = iVar36;
          uVar35 = uVar31;
          if ((uVar31 != 1) &&
             ((piVar40[1] = iVar36 + 1, uVar31 != 2 && (piVar40[2] = iVar36 + 2, uVar31 != 3)))) {
            piVar40[3] = iVar36 + 3;
            if (uVar31 == 5) {
              piVar40[4] = iVar36 + 4;
            }
            else {
              uVar35 = 4;
            }
          }
          uVar29 = uVar31;
          if (uVar26 != uVar31) goto LAB_0028fc7c;
        }
        else {
LAB_0028fc7c:
          lVar43 = uVar61 - 1;
          if (iVar24 == 0) {
            lVar43 = 0;
          }
          uVar31 = ((uVar26 - uVar29) - 4 >> 2) + 1;
          lVar64 = uVar31 * 4;
          if (2 < lVar43 - uVar29) {
            lVar43 = uVar35 + 1;
            uVar47 = 0;
            piVar32 = piVar27 + uVar29 + lVar38;
            uVar63 = uVar35;
            do {
              iVar5 = (int)uVar63;
              iVar2 = (int)lVar43;
              uVar47 = uVar47 + 1;
              uVar63 = uVar63 + _DAT_0028ff40;
              lVar43 = lVar43 + _UNK_0028ff48;
              *(ulong *)(piVar32 + 2) =
                   CONCAT44(iVar2 + (int)_UNK_0028ff38 + iVar36,iVar5 + (int)_DAT_0028ff30 + iVar36)
              ;
              *(ulong *)piVar32 = CONCAT44(iVar2 + iVar36,iVar5 + iVar36);
              piVar32 = piVar32 + 4;
            } while (uVar47 < uVar31);
            uVar35 = uVar35 + lVar64;
            if (lVar64 - (uVar26 - uVar29) == 0) goto LAB_0028fd48;
          }
          uVar29 = uVar35 + 1;
          piVar27[uVar35 + lVar38] = iVar36 + (int)uVar35;
          if (uVar29 < uVar61) {
            uVar35 = uVar35 + 2;
            piVar27[uVar29 + lVar38] = iVar36 + (int)uVar29;
            if (uVar35 < uVar61) {
              piVar27[uVar35 + lVar38] = iVar36 + (int)uVar35;
            }
          }
        }
LAB_0028fd48:
        iVar49 = iVar49 + 1;
        piVar40 = piVar40 + iVar24;
        iVar36 = iVar36 - iVar24;
        lVar38 = lVar38 + uVar61;
      } while (iVar49 != iVar17);
    }
    iVar24 = iVar62 + -1;
    local_430 = piVar27;
    local_428 = uVar34;
    if (iVar62 != 0) {
      do {
        lVar38 = 0;
        if (0 < iVar53) {
          do {
            iVar17 = piVar27[lVar38];
            uVar19 = *(undefined1 *)((long)puVar59 + lVar38);
            *(undefined1 *)((long)puVar59 + lVar38) = *(undefined1 *)((long)puVar59 + (long)iVar17);
            lVar38 = lVar38 + 1;
            *(undefined1 *)((long)puVar59 + (long)iVar17) = uVar19;
          } while ((int)lVar38 < iVar53);
        }
        iVar24 = iVar24 + -1;
        puVar59 = (undefined4 *)((long)puVar59 + lVar22);
      } while (iVar24 != -1);
    }
  }
  else {
    piVar27 = aiStack_850;
    iVar17 = local_8e0[1];
    iVar62 = *local_8e0;
    local_860 = piVar27;
    uVar34 = (long)iVar24 * (long)iVar17;
    local_858 = 0x108;
    iVar53 = iVar24 * ((iVar17 + 1) / 2);
    if (uVar34 < 0x109) {
      bVar23 = false;
      local_858 = uVar34;
    }
    else {
      uVar26 = uVar34 * 4;
      if (0x1fc0000000000000 < uVar34) {
        uVar26 = 0xffffffffffffffff;
      }
      piVar27 = operator_new__(uVar26);
      local_860 = piVar27;
      bVar23 = piVar27 != aiStack_850;
      local_858 = uVar34;
    }
    if (0 < iVar17) {
      lVar43 = 0;
      uVar26 = uVar61;
      if (iVar24 == 0) {
        uVar26 = 1;
      }
      iVar49 = 0;
      iVar36 = iVar24 * (iVar17 + -1);
      piVar40 = piVar27;
      do {
        uVar29 = -((ulong)piVar40 >> 2 & 3) & 3;
        if (uVar26 < uVar29) {
          uVar29 = uVar26;
        }
        uVar31 = uVar26;
        if ((uVar26 < 6) || (uVar35 = 0, uVar31 = uVar29, uVar29 != 0)) {
          *piVar40 = iVar36;
          uVar35 = uVar31;
          if ((uVar31 != 1) &&
             ((piVar40[1] = iVar36 + 1, uVar31 != 2 && (piVar40[2] = iVar36 + 2, uVar31 != 3)))) {
            piVar40[3] = iVar36 + 3;
            if (uVar31 == 5) {
              piVar40[4] = iVar36 + 4;
            }
            else {
              uVar35 = 4;
            }
          }
          if (uVar26 != uVar31) goto LAB_0028ee74;
        }
        else {
LAB_0028ee74:
          lVar64 = uVar61 - 1;
          if (iVar24 == 0) {
            lVar64 = 0;
          }
          uVar29 = ((uVar26 - uVar31) - 4 >> 2) + 1;
          lVar51 = uVar29 * 4;
          if (2 < lVar64 - uVar31) {
            lVar64 = uVar35 + 1;
            uVar47 = 0;
            piVar32 = piVar27 + lVar43 + uVar31;
            uVar63 = uVar35;
            do {
              iVar5 = (int)uVar63;
              iVar2 = (int)lVar64;
              uVar47 = uVar47 + 1;
              uVar63 = uVar63 + _DAT_0028ff40;
              lVar64 = lVar64 + _UNK_0028ff48;
              *(ulong *)(piVar32 + 2) =
                   CONCAT44(iVar2 + (int)_UNK_0028ff38 + iVar36,iVar5 + (int)_DAT_0028ff30 + iVar36)
              ;
              *(ulong *)piVar32 = CONCAT44(iVar2 + iVar36,iVar5 + iVar36);
              piVar32 = piVar32 + 4;
            } while (uVar47 < uVar29);
            uVar35 = uVar35 + lVar51;
            if (uVar26 - uVar31 == lVar51) goto LAB_0028ef38;
          }
          uVar29 = uVar35 + 1;
          piVar27[lVar43 + uVar35] = iVar36 + (int)uVar35;
          if (uVar29 < uVar61) {
            uVar35 = uVar35 + 2;
            piVar27[lVar43 + uVar29] = iVar36 + (int)uVar29;
            if (uVar35 < uVar61) {
              piVar27[lVar43 + uVar35] = iVar36 + (int)uVar35;
            }
          }
        }
LAB_0028ef38:
        iVar49 = iVar49 + 1;
        piVar40 = piVar40 + iVar24;
        iVar36 = iVar36 - iVar24;
        lVar43 = lVar43 + uVar61;
      } while (iVar49 != iVar17);
    }
    iVar24 = iVar62 + -1;
    local_860 = piVar27;
    local_858 = uVar34;
    if (iVar62 != 0) {
      do {
        lVar43 = 0;
        if (0 < iVar53) {
          do {
            iVar17 = piVar27[lVar43];
            uVar19 = *(undefined1 *)((long)puVar44 + lVar43);
            *(undefined1 *)((long)puVar59 + lVar43) = *(undefined1 *)((long)puVar44 + (long)iVar17);
            lVar43 = lVar43 + 1;
            *(undefined1 *)((long)puVar59 + (long)iVar17) = uVar19;
          } while ((int)lVar43 < iVar53);
        }
        iVar24 = iVar24 + -1;
        puVar44 = (undefined4 *)((long)puVar44 + lVar38);
        puVar59 = (undefined4 *)((long)puVar59 + lVar22);
      } while (iVar24 != -1);
    }
  }
  if (bVar23) {
    operator_delete__(piVar27);
  }
LAB_0028efdc:
  if (local_888 != 0) {
    piVar27 = (int *)(local_888 + 0x14);
    do {
      iVar24 = *piVar27;
      cVar21 = '\x01';
      bVar23 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar23) {
        *piVar27 = iVar24 + -1;
        cVar21 = ExclusiveMonitorsStatus();
      }
    } while (cVar21 != '\0');
    if (iVar24 == 1) {
      Mat::deallocate((Mat *)&local_8c0);
    }
  }
  local_888 = 0;
  local_8b0 = (undefined4 *)0x0;
  local_898 = 0;
  local_8a0 = 0;
  local_8a8 = 0;
  if (0 < local_8bc) {
    iVar24 = 0;
    piVar27 = local_880;
    do {
      *piVar27 = 0;
      iVar24 = iVar24 + 1;
      piVar27 = piVar27 + 1;
    } while (iVar24 < local_8bc);
  }
  if (local_878 != &local_870) {
    fastFree(local_878);
  }
  if (local_8e8 != 0) {
    piVar27 = (int *)(local_8e8 + 0x14);
    do {
      iVar24 = *piVar27;
      cVar21 = '\x01';
      bVar23 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar23) {
        *piVar27 = iVar24 + -1;
        cVar21 = ExclusiveMonitorsStatus();
      }
    } while (cVar21 != '\0');
    if (iVar24 == 1) {
      Mat::deallocate((Mat *)&local_920);
    }
  }
  local_8e8 = 0;
  local_910 = (undefined4 *)0x0;
  local_8f8 = 0;
  local_900 = 0;
  local_908 = 0;
  if (0 < local_91c) {
    iVar24 = 0;
    piVar27 = local_8e0;
    do {
      *piVar27 = 0;
      iVar24 = iVar24 + 1;
      piVar27 = piVar27 + 1;
    } while (iVar24 < local_91c);
  }
  if (local_8d8 != &local_8d0) {
    fastFree(local_8d8);
  }
  return;
}


==================================================================

### FUNC 0028ff50 (1340 bytes) name=repeat

/* WARNING: Heritage AFTER dead removal. Example location: s0xffffffffffffffa8 : 0x00290348 */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::repeat(cv::_InputArray const&, int, int, cv::_OutputArray const&) */

void cv::repeat(_InputArray *param_1,int param_2,int param_3,_OutputArray *param_4)

{
  int iVar1;
  uint uVar2;
  long lVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  int iVar7;
  undefined8 *puVar8;
  int *piVar9;
  undefined4 *puVar10;
  Mat *pMVar11;
  int iVar12;
  int iVar13;
  long lVar14;
  int local_c8;
  int local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  long *local_78;
  long local_70;
  long local_68;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  iVar7 = _InputArray::dims(param_1,-1);
  if (2 < iVar7) {
    local_60 = 0;
    local_58 = 0;
    puVar8 = (undefined8 *)String::allocate((String *)&local_60,0x10);
    uVar6 = _DAT_00463f58;
    *puVar8 = DAT_00463f50;
    puVar8[1] = uVar6;
    error(-0xd7,(String *)&local_60,"void cv::repeat(cv::InputArray, int, int, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x366);
    String::deallocate((String *)&local_60);
  }
  if ((param_2 < 1) || (param_3 < 1)) {
    local_60 = 0;
    local_58 = 0;
    puVar8 = (undefined8 *)String::allocate((String *)&local_60,0x10);
    uVar6 = _LAB_00463f70;
    *puVar8 = DAT_00463f68;
    puVar8[1] = uVar6;
    error(-0xd7,(String *)&local_60,"void cv::repeat(cv::InputArray, int, int, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x367);
    String::deallocate((String *)&local_60);
  }
  _InputArray::size((int)param_1);
  iVar7 = _InputArray::type(param_1,-1);
  _OutputArray::create(param_4,param_2 * local_c4,param_3 * local_c8,iVar7,-1,false,0);
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar11 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar11;
    local_bc = *(int *)(pMVar11 + 4);
    local_b8 = *(undefined4 *)(pMVar11 + 8);
    local_b4 = *(undefined4 *)(pMVar11 + 0xc);
    local_b0 = *(long *)(pMVar11 + 0x10);
    local_a8 = *(undefined8 *)(pMVar11 + 0x18);
    local_a0 = *(undefined8 *)(pMVar11 + 0x20);
    local_98 = *(undefined8 *)(pMVar11 + 0x28);
    local_90 = *(undefined8 *)(pMVar11 + 0x30);
    local_88 = *(long *)(pMVar11 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar9 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = *piVar9 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar11 + 4) < 3) {
      local_70 = **(long **)(pMVar11 + 0x48);
      local_68 = (*(long **)(pMVar11 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar11);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar7 = _InputArray::kind((_InputArray *)param_4);
  if (iVar7 == 0x10000) {
    pMVar11 = *(Mat **)(param_4 + 8);
    local_20 = (int *)&local_58;
    local_18 = &local_10;
    uVar2 = *(uint *)pMVar11;
    local_50 = *(long *)(pMVar11 + 0x10);
    local_60 = *(ulong *)pMVar11;
    uVar6 = *(undefined8 *)(pMVar11 + 8);
    local_48 = *(undefined8 *)(pMVar11 + 0x18);
    local_40 = *(undefined8 *)(pMVar11 + 0x20);
    local_38 = *(undefined8 *)(pMVar11 + 0x28);
    local_30 = *(undefined8 *)(pMVar11 + 0x30);
    local_28 = *(long *)(pMVar11 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar9 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = *piVar9 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar11 + 4) < 3) {
      local_10 = **(long **)(pMVar11 + 0x48);
      local_8 = (*(long **)(pMVar11 + 0x48))[1];
      iVar7 = local_58._4_4_;
      iVar1 = (int)local_58;
      local_58 = uVar6;
      goto joined_r0x0029034c;
    }
    local_60 = (ulong)uVar2;
    local_58 = uVar6;
    Mat::copySize((Mat *)&local_60,pMVar11);
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  iVar7 = local_20[1];
  iVar1 = *local_20;
joined_r0x0029034c:
  if (local_bc < 1) {
    iVar7 = 0;
    iVar12 = 0;
  }
  else {
    iVar12 = (int)local_78[(long)local_bc + -1];
    iVar7 = iVar7 * iVar12;
  }
  lVar14 = 0;
  iVar13 = 0;
  if (0 < local_c4) {
    do {
      if (0 < iVar7) {
        iVar13 = 0;
        do {
          memcpy((void *)(local_50 + lVar14 * *local_18 + (long)iVar13),
                 (void *)(local_b0 + lVar14 * *local_78),(long)(local_c8 * iVar12));
          iVar13 = iVar13 + local_c8 * iVar12;
        } while (iVar13 < iVar7);
      }
      iVar13 = (int)lVar14 + 1;
      lVar14 = lVar14 + 1;
    } while (iVar13 < local_c4);
  }
  lVar14 = (long)iVar13;
  if (iVar13 < iVar1) {
    do {
      iVar12 = iVar13 - local_c4;
      iVar13 = iVar13 + 1;
      lVar3 = *local_18 * lVar14;
      lVar14 = lVar14 + 1;
      memcpy((void *)(local_50 + lVar3),(void *)(local_50 + (long)iVar12 * *local_18),(long)iVar7);
    } while (iVar13 != iVar1);
  }
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar9;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar5) {
        *piVar9 = iVar7 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar7 = 0;
    piVar9 = local_20;
    do {
      *piVar9 = 0;
      iVar7 = iVar7 + 1;
      piVar9 = piVar9 + 1;
    } while (iVar7 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar9;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar5) {
        *piVar9 = iVar7 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    puVar10 = local_80;
    do {
      *puVar10 = 0;
      iVar7 = iVar7 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002904e0 (672 bytes) name=repeat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::repeat(cv::Mat const&, int, int) */

void __thiscall cv::repeat(cv *this,Mat *param_1,int param_2,int param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  int iVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  Mat *in_x8;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined4 local_90 [2];
  cv *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if ((param_2 != 1) || ((int)param_1 != 1)) {
    local_18 = &local_10;
    local_20 = &uStack_58;
    uStack_8 = 0;
    local_10 = 0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    uStack_58 = _UNK_002907b8;
    local_60 = _DAT_002907b0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    local_80 = 0;
    local_7c = 0;
    local_90[0] = 0x1010000;
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_88 = this;
    local_70 = (Mat *)&local_60;
    repeat((_InputArray *)local_90,(int)param_1,param_2,(_OutputArray *)local_78);
    *(undefined8 *)(in_x8 + 0x10) = local_50;
    *(undefined8 *)(in_x8 + 0x18) = local_48;
    *(undefined8 *)(in_x8 + 8) = uStack_58;
    *(undefined8 *)in_x8 = local_60;
    *(undefined8 *)(in_x8 + 0x20) = local_40;
    *(undefined8 *)(in_x8 + 0x28) = local_38;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x30) = local_30;
    *(long *)(in_x8 + 0x38) = local_28;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (local_60._4_4_ < 3) {
      puVar5 = *(undefined8 **)(in_x8 + 0x48);
      *puVar5 = *local_18;
      puVar5[1] = local_18[1];
    }
    else {
      *(undefined4 *)(in_x8 + 4) = 0;
      Mat::copySize(in_x8,(Mat *)&local_60);
    }
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar7 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar7 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar7 = 0;
      puVar5 = local_20;
      do {
        *(undefined4 *)puVar5 = 0;
        iVar7 = iVar7 + 1;
        puVar5 = (undefined8 *)((long)puVar5 + 4);
      } while (iVar7 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    return;
  }
  uVar11 = *(undefined8 *)(this + 0x18);
  uVar12 = *(undefined8 *)(this + 0x10);
  uVar10 = *(undefined8 *)(this + 0x20);
  uVar13 = *(undefined8 *)(this + 8);
  uVar9 = *(undefined8 *)(this + 0x28);
  uVar8 = *(undefined8 *)(this + 0x30);
  lVar4 = *(long *)(this + 0x38);
  *(undefined8 *)in_x8 = *(undefined8 *)this;
  *(undefined8 *)(in_x8 + 8) = uVar13;
  *(undefined8 *)(in_x8 + 0x10) = uVar12;
  *(undefined8 *)(in_x8 + 0x18) = uVar11;
  *(undefined8 *)(in_x8 + 0x20) = uVar10;
  *(undefined8 *)(in_x8 + 0x28) = uVar9;
  *(undefined8 *)(in_x8 + 0x30) = uVar8;
  *(long *)(in_x8 + 0x38) = lVar4;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  if (lVar4 != 0) {
    piVar1 = (int *)(lVar4 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (2 < *(int *)(this + 4)) {
    *(undefined4 *)(in_x8 + 4) = 0;
    Mat::copySize(in_x8,(Mat *)this);
    return;
  }
  puVar6 = *(undefined8 **)(this + 0x48);
  puVar5 = *(undefined8 **)(in_x8 + 0x48);
  *puVar5 = *puVar6;
  puVar5[1] = puVar6[1];
  return;
}


==================================================================

### FUNC 002907c0 (456 bytes) name=borderInterpolate

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::borderInterpolate(int, int, int) */

uint cv::borderInterpolate(int param_1,int param_2,int param_3)

{
  int iVar1;
  undefined2 uVar2;
  undefined1 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  bool bVar7;
  uint uVar8;
  undefined8 *puVar9;
  undefined4 *puVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar8 = param_1;
  if ((uint)param_2 <= (uint)param_1) {
    if (param_3 == 1) {
      if (-1 < param_1) {
        return param_2 - 1;
      }
      uVar8 = 0;
    }
    else if ((param_3 - 2U & 0xfffffffd) == 0) {
      uVar8 = 0;
      if (param_2 != 1) {
        do {
          iVar1 = (param_2 * 2 + -1) - param_1;
          bVar7 = -1 < param_1;
          param_1 = ~param_1 + (uint)(param_3 == 4);
          if (bVar7) {
            param_1 = iVar1 - (uint)(param_3 == 4);
          }
          uVar8 = param_1;
        } while ((uint)param_2 <= (uint)param_1);
      }
    }
    else if (param_3 == 3) {
      if (param_2 < 1) {
        local_10 = 0;
        local_8 = 0;
        puVar10 = (undefined4 *)String::allocate((String *)&local_10,7);
        uVar3 = DAT_00463f86;
        uVar2 = DAT_00463f84;
        *puVar10 = DAT_00463f80;
        *(undefined2 *)(puVar10 + 1) = uVar2;
        *(undefined1 *)((long)puVar10 + 6) = uVar3;
        error(-0xd7,(String *)&local_10,"int cv::borderInterpolate(int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x3ad);
        String::deallocate((String *)&local_10);
      }
      if (param_1 < 0) {
        iVar1 = 0;
        if (param_2 != 0) {
          iVar1 = ((param_1 - param_2) + 1) / param_2;
        }
        param_1 = param_1 - iVar1 * param_2;
      }
      uVar8 = param_1;
      if (param_2 <= param_1) {
        iVar1 = 0;
        if (param_2 != 0) {
          iVar1 = param_1 / param_2;
        }
        uVar8 = param_1 - iVar1 * param_2;
      }
    }
    else {
      uVar8 = 0xffffffff;
      if (param_3 != 0) {
        local_10 = 0;
        local_8 = 0;
        puVar9 = (undefined8 *)String::allocate((String *)&local_10,0x1f);
        uVar3 = DAT_00463fa6;
        uVar2 = DAT_00463fa4;
        uVar6 = DAT_00463fa0;
        uVar5 = DAT_00463f90;
        uVar4 = _LAB_00463f88;
        puVar9[2] = DAT_00463f98;
        *(undefined4 *)(puVar9 + 3) = uVar6;
        *(undefined2 *)((long)puVar9 + 0x1c) = uVar2;
        *(undefined1 *)((long)puVar9 + 0x1e) = uVar3;
        *puVar9 = uVar4;
        puVar9[1] = uVar5;
        error(-5,(String *)&local_10,"int cv::borderInterpolate(int, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x3b6);
        String::deallocate((String *)&local_10);
        uVar8 = param_1;
      }
    }
  }
  return uVar8;
}


==================================================================

### FUNC 002909b0 (5316 bytes) name=copyMakeBorder

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::copyMakeBorder(cv::_InputArray const&, cv::_OutputArray const&, int, int, int, int, int,
   cv::Scalar_<double> const&) */

void cv::copyMakeBorder(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,
                       int param_5,int param_6,int param_7,Scalar_ *param_8)

{
  void *__dest;
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  ulong uVar10;
  void *pvVar11;
  ulong uVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  undefined8 *puVar18;
  ulong uVar19;
  void *pvVar20;
  char *pcVar21;
  uint uVar22;
  int *piVar23;
  long lVar24;
  int *piVar25;
  int iVar26;
  ulong uVar27;
  uint uVar28;
  int iVar29;
  undefined8 *puVar30;
  int iVar31;
  uint uVar32;
  int iVar33;
  ulong uVar34;
  void *pvVar35;
  uint uVar36;
  int *piVar37;
  long lVar38;
  size_t __n;
  Mat *pMVar39;
  int iVar40;
  int iVar41;
  int iVar45;
  long lVar42;
  double dVar43;
  undefined8 uVar44;
  int iVar46;
  int iVar47;
  int iVar48;
  int iVar49;
  int local_970;
  int local_94c;
  undefined8 local_938;
  undefined8 local_930;
  uint local_928;
  int local_924;
  int local_920;
  int local_91c;
  void *local_918;
  undefined8 local_910;
  undefined8 local_908;
  undefined8 local_900;
  undefined8 local_8f8;
  long local_8f0;
  int *local_8e8;
  ulong *local_8e0;
  ulong local_8d8;
  ulong local_8d0;
  undefined4 local_8c8;
  int local_8c4;
  int local_8c0;
  undefined4 local_8bc;
  void *local_8b8;
  undefined8 local_8b0;
  undefined8 local_8a8;
  undefined8 local_8a0;
  undefined8 local_898;
  long local_890;
  int *local_888;
  ulong *local_880;
  ulong local_878;
  ulong local_870;
  undefined8 local_868;
  ulong local_860;
  int aiStack_858 [258];
  undefined8 local_450;
  Mat *local_448;
  int local_440 [272];
  
  if ((((param_3 < 0) || (param_4 < 0)) || (param_5 < 0)) || (param_6 < 0)) {
    local_450 = (int *)0x0;
    local_448 = (Mat *)0x0;
    puVar18 = (undefined8 *)String::allocate((String *)&local_450,0x32);
    uVar7 = DAT_00463fd0;
    uVar6 = DAT_00463fc8;
    uVar5 = DAT_00463fc0;
    uVar4 = DAT_00463fb8;
    uVar3 = DAT_00463fb0;
    uVar44 = _DAT_00463fa8;
    *(undefined2 *)(puVar18 + 6) = DAT_00463fd8;
    *puVar18 = uVar44;
    puVar18[1] = uVar3;
    puVar18[2] = uVar4;
    puVar18[3] = uVar5;
    puVar18[4] = uVar6;
    puVar18[5] = uVar7;
    error(-0xd7,(String *)&local_450,
          "void cv::copyMakeBorder(cv::InputArray, cv::OutputArray, int, int, int, int, int, const Scalar&)"
          ,"/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x47e);
    String::deallocate((String *)&local_450);
    iVar13 = _InputArray::kind(param_1);
    if (iVar13 == 0x10000) goto LAB_00290d98;
LAB_00290a24:
    _InputArray::getMat_((int)param_1);
  }
  else {
    iVar13 = _InputArray::kind(param_1);
    if (iVar13 != 0x10000) goto LAB_00290a24;
LAB_00290d98:
    pMVar39 = *(Mat **)(param_1 + 8);
    local_8e8 = &local_920;
    local_8e0 = &local_8d8;
    local_928 = *(uint *)pMVar39;
    local_924 = *(int *)(pMVar39 + 4);
    local_920 = *(int *)(pMVar39 + 8);
    local_91c = *(int *)(pMVar39 + 0xc);
    local_918 = *(void **)(pMVar39 + 0x10);
    local_910 = *(undefined8 *)(pMVar39 + 0x18);
    local_908 = *(undefined8 *)(pMVar39 + 0x20);
    local_900 = *(undefined8 *)(pMVar39 + 0x28);
    local_8f8 = *(undefined8 *)(pMVar39 + 0x30);
    local_8f0 = *(long *)(pMVar39 + 0x38);
    local_8d0 = 0;
    local_8d8 = 0;
    if (local_8f0 != 0) {
      piVar25 = (int *)(local_8f0 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar2) {
          *piVar25 = *piVar25 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar39 + 4) < 3) {
      local_8d8 = **(ulong **)(pMVar39 + 0x48);
      local_8d0 = (*(ulong **)(pMVar39 + 0x48))[1];
    }
    else {
      local_924 = 0;
      Mat::copySize((Mat *)&local_928,pMVar39);
    }
  }
  uVar36 = local_928 & 0xfff;
  local_970 = param_3;
  if (((local_928 >> 0xf & 1) != 0) && (((uint)param_7 >> 4 & 1) == 0)) {
    local_868 = (int *)(CONCAT44(param_7,param_7) & 0x1000000010);
    local_450 = (int *)(CONCAT44(param_7,param_7) & 0x1000000010);
    Mat::locateROI((Mat *)&local_928,(Size_ *)&local_868,(Point_ *)&local_450);
    iVar13 = (local_868._4_4_ - local_920) - local_450._4_4_;
    if (local_450._4_4_ < param_3) {
      local_970 = local_450._4_4_;
    }
    iVar33 = ((int)local_868 - local_91c) - (int)local_450;
    iVar29 = param_4;
    if (iVar13 < param_4) {
      iVar29 = iVar13;
    }
    iVar13 = param_5;
    if ((int)local_450 < param_5) {
      iVar13 = (int)local_450;
    }
    iVar16 = param_6;
    if (iVar33 < param_6) {
      iVar16 = iVar33;
    }
    Mat::adjustROI((Mat *)&local_928,local_970,iVar29,iVar13,iVar16);
    param_4 = param_4 - iVar29;
    param_6 = param_6 - iVar16;
    local_970 = param_3 - local_970;
    param_5 = param_5 - iVar13;
  }
  _OutputArray::create
            (param_2,param_4 + local_970 + local_920,param_6 + param_5 + local_91c,uVar36,-1,false,0
            );
  iVar13 = _InputArray::kind((_InputArray *)param_2);
  if (iVar13 == 0x10000) {
    pMVar39 = *(Mat **)(param_2 + 8);
    local_890 = *(long *)(pMVar39 + 0x38);
    local_8c8 = *(undefined4 *)pMVar39;
    local_8c4 = *(int *)(pMVar39 + 4);
    local_8c0 = *(int *)(pMVar39 + 8);
    local_8bc = *(undefined4 *)(pMVar39 + 0xc);
    local_8b8 = *(void **)(pMVar39 + 0x10);
    local_8b0 = *(undefined8 *)(pMVar39 + 0x18);
    local_8a8 = *(undefined8 *)(pMVar39 + 0x20);
    local_8a0 = *(undefined8 *)(pMVar39 + 0x28);
    local_898 = *(undefined8 *)(pMVar39 + 0x30);
    local_888 = &local_8c0;
    local_880 = &local_878;
    local_870 = 0;
    local_878 = 0;
    if (local_890 != 0) {
      piVar25 = (int *)(local_890 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar2) {
          *piVar25 = *piVar25 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar39 + 4) < 3) {
      local_878 = **(ulong **)(pMVar39 + 0x48);
      local_870 = (*(ulong **)(pMVar39 + 0x48))[1];
    }
    else {
      local_8c4 = 0;
      Mat::copySize((Mat *)&local_8c8,pMVar39);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar12 = local_878;
  pvVar11 = local_8b8;
  uVar10 = local_8d8;
  pvVar35 = local_918;
  if (((param_5 == 0 && param_6 == 0) && param_4 == 0) && local_970 == 0) {
    if ((local_918 != local_8b8) || (local_8d8 != local_878)) {
      local_440[0] = 0;
      local_440[1] = 0;
      local_450 = (int *)CONCAT44(local_450._4_4_,0x2010000);
      local_448 = (Mat *)&local_8c8;
      Mat::copyTo((Mat *)&local_928,(_OutputArray *)&local_450);
    }
    if (local_890 != 0) {
      piVar25 = (int *)(local_890 + 0x14);
      do {
        iVar13 = *piVar25;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar2) {
          *piVar25 = iVar13 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar13 == 1) {
        Mat::deallocate((Mat *)&local_8c8);
      }
    }
    local_890 = 0;
    local_8b8 = (void *)0x0;
    local_8a0 = 0;
    local_8a8 = 0;
    local_8b0 = 0;
    if (0 < local_8c4) {
      iVar13 = 0;
      piVar25 = local_888;
      do {
        *piVar25 = 0;
        iVar13 = iVar13 + 1;
        piVar25 = piVar25 + 1;
      } while (iVar13 < local_8c4);
    }
    if (local_880 != &local_878) {
      fastFree(local_880);
    }
    if (local_8f0 != 0) {
      piVar25 = (int *)(local_8f0 + 0x14);
      do {
        iVar13 = *piVar25;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar2) {
          *piVar25 = iVar13 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar13 == 1) {
        Mat::deallocate((Mat *)&local_928);
      }
    }
    if (0 < local_924) {
      iVar13 = 0;
      piVar25 = local_8e8;
      do {
        *piVar25 = 0;
        iVar13 = iVar13 + 1;
        piVar25 = piVar25 + 1;
      } while (iVar13 < local_924);
    }
    goto LAB_00290bfc;
  }
  uVar36 = param_7 & 0xffffffef;
  if ((param_7 & 0xffffffefU) == 0) {
    local_450 = local_440;
    uVar32 = local_928 >> 3 & 0x1ff;
    uVar36 = uVar32 + 1;
    local_448 = (Mat *)0x88;
    pMVar39 = (Mat *)(long)(int)uVar36;
    if (uVar36 < 0x89) {
      if (4 < uVar36) goto LAB_0029177c;
      iVar13 = uVar32 << 3;
      local_448 = pMVar39;
    }
    else {
      local_450 = operator_new__((long)pMVar39 << 3);
LAB_0029177c:
      dVar43 = *(double *)param_8;
      if (((dVar43 == *(double *)(param_8 + 8)) && (dVar43 == *(double *)(param_8 + 0x10))) &&
         (dVar43 == *(double *)(param_8 + 0x18))) {
        iVar13 = 0;
        local_448 = pMVar39;
      }
      else {
        local_938 = 0;
        local_930 = 0;
        local_448 = pMVar39;
        pcVar21 = (char *)String::allocate((String *)&local_938,0x44);
        uVar7 = s_value_0_____value_1_____value_0__00463fe0._40_8_;
        uVar6 = s_value_0_____value_1_____value_0__00463fe0._32_8_;
        uVar5 = s_value_0_____value_1_____value_0__00463fe0._24_8_;
        uVar4 = s_value_0_____value_1_____value_0__00463fe0._16_8_;
        uVar3 = s_value_0_____value_1_____value_0__00463fe0._8_8_;
        uVar44 = s_value_0_____value_1_____value_0__00463fe0._0_8_;
        *(undefined4 *)(pcVar21 + 0x40) = s_value_0_____value_1_____value_0__00463fe0._64_4_;
        uVar9 = s_value_0_____value_1_____value_0__00463fe0._56_8_;
        uVar8 = s_value_0_____value_1_____value_0__00463fe0._48_8_;
        *(undefined8 *)pcVar21 = uVar44;
        *(undefined8 *)(pcVar21 + 8) = uVar3;
        *(undefined8 *)(pcVar21 + 0x10) = uVar4;
        *(undefined8 *)(pcVar21 + 0x18) = uVar5;
        *(undefined8 *)(pcVar21 + 0x20) = uVar6;
        *(undefined8 *)(pcVar21 + 0x28) = uVar7;
        *(undefined8 *)(pcVar21 + 0x30) = uVar8;
        *(undefined8 *)(pcVar21 + 0x38) = uVar9;
        error(-0xd7,(String *)&local_938,
              "void cv::copyMakeBorder(cv::InputArray, cv::OutputArray, int, int, int, int, int, const Scalar&)"
              ,"/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x51f);
        String::deallocate((String *)&local_938);
        iVar13 = 0;
      }
    }
    scalarToRawData(param_8,local_450,(local_928 & 7) + iVar13,uVar36);
    piVar25 = local_450;
    uVar12 = local_878;
    pvVar11 = local_8b8;
    uVar10 = local_8d8;
    pvVar35 = local_918;
    iVar13 = *local_8e8;
    iVar29 = local_8e8[1];
    iVar33 = local_888[1];
    iVar16 = *local_888;
    if (local_924 < 1) {
      __n = 0;
      iVar29 = 0;
      iVar49 = 0;
      iVar31 = 0;
      uVar19 = 0;
      uVar36 = 0;
LAB_00291e0c:
      local_868 = aiStack_858;
      local_860 = uVar19;
    }
    else {
      local_868 = aiStack_858;
      local_860 = 0x408;
      uVar36 = (uint)local_8e0[(long)local_924 + -1];
      iVar49 = iVar33 * uVar36;
      uVar19 = (ulong)iVar49;
      if (uVar19 < 0x409) {
        iVar31 = iVar29 * uVar36;
        iVar29 = ((iVar33 - iVar29) - param_5) * uVar36;
        __n = (size_t)(int)(param_5 * uVar36);
        goto LAB_00291e0c;
      }
      local_868 = operator_new__(uVar19);
      iVar31 = iVar29 * uVar36;
      iVar29 = ((iVar33 - iVar29) - param_5) * uVar36;
      __n = (size_t)(int)(param_5 * uVar36);
      local_860 = uVar19;
    }
    piVar37 = local_868;
    iVar16 = (iVar16 - iVar13) - local_970;
    if (0 < iVar33) {
      uVar32 = -(int)piVar25 & 0xf;
      iVar40 = 0;
      uVar22 = uVar36;
      if (uVar32 < uVar36) {
        uVar22 = uVar32;
      }
      iVar14 = 0;
      uVar32 = ((uVar36 - uVar22) - 0x10 >> 4) + 1;
      iVar15 = uVar32 * 0x10;
      piVar23 = local_868;
      do {
        if (0 < (int)uVar36) {
          if ((piVar25 < piVar23 + 4 && piVar23 < piVar25 + 4) || (uVar36 < 0x16)) {
            lVar38 = 0;
            do {
              *(undefined1 *)((long)piVar23 + lVar38) = *(undefined1 *)((long)piVar25 + lVar38);
              lVar38 = lVar38 + 1;
            } while ((int)lVar38 < (int)uVar36);
          }
          else {
            uVar17 = uVar22;
            if (((uVar22 != 0) && (*(char *)piVar23 = (char)*piVar25, uVar22 != 1)) &&
               ((*(undefined1 *)((long)piVar23 + 1) = *(undefined1 *)((long)piVar25 + 1),
                uVar22 != 2 &&
                (((*(undefined1 *)((long)piVar23 + 2) = *(undefined1 *)((long)piVar25 + 2),
                  uVar22 != 3 &&
                  (*(undefined1 *)((long)piVar23 + 3) = *(undefined1 *)((long)piVar25 + 3),
                  uVar22 != 4)) && (*(char *)(piVar23 + 1) = (char)piVar25[1], uVar22 != 5)))))) {
              *(undefined1 *)((long)piVar23 + 5) = *(undefined1 *)((long)piVar25 + 5);
              if (uVar22 == 6) {
                uVar17 = 6;
              }
              else {
                *(undefined1 *)((long)piVar23 + 6) = *(undefined1 *)((long)piVar25 + 6);
                if (((uVar22 != 7) &&
                    (*(undefined1 *)((long)piVar23 + 7) = *(undefined1 *)((long)piVar25 + 7),
                    uVar22 != 8)) &&
                   ((((*(char *)(piVar23 + 2) = (char)piVar25[2], uVar22 != 9 &&
                      ((*(undefined1 *)((long)piVar23 + 9) = *(undefined1 *)((long)piVar25 + 9),
                       uVar22 != 10 &&
                       (*(undefined1 *)((long)piVar23 + 10) = *(undefined1 *)((long)piVar25 + 10),
                       uVar22 != 0xb)))) &&
                     (*(undefined1 *)((long)piVar23 + 0xb) = *(undefined1 *)((long)piVar25 + 0xb),
                     uVar22 != 0xc)) && (*(char *)(piVar23 + 3) = (char)piVar25[3], uVar22 != 0xd)))
                   ) {
                  *(undefined1 *)((long)piVar23 + 0xd) = *(undefined1 *)((long)piVar25 + 0xd);
                  if (uVar22 == 0xf) {
                    *(undefined1 *)((long)piVar23 + 0xe) = *(undefined1 *)((long)piVar25 + 0xe);
                  }
                  else {
                    uVar17 = 0xe;
                  }
                }
              }
            }
            if (0xe < (uVar36 - 1) - uVar22) {
              uVar28 = 0;
              puVar18 = (undefined8 *)((long)piVar23 + (ulong)uVar22);
              puVar30 = (undefined8 *)((long)piVar25 + (ulong)uVar22);
              do {
                uVar44 = *puVar30;
                uVar28 = uVar28 + 1;
                puVar18[1] = puVar30[1];
                *puVar18 = uVar44;
                puVar18 = puVar18 + 2;
                puVar30 = puVar30 + 2;
              } while (uVar28 < uVar32);
              uVar17 = uVar17 + iVar15;
              if (iVar15 == uVar36 - uVar22) goto LAB_00291c38;
            }
            iVar26 = uVar17 + 1;
            *(undefined1 *)((long)local_868 + (long)(int)(uVar17 + iVar40)) =
                 *(undefined1 *)((long)piVar25 + (long)(int)uVar17);
            if (iVar26 < (int)uVar36) {
              iVar41 = uVar17 + 2;
              *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                   *(undefined1 *)((long)piVar25 + (long)iVar26);
              if (iVar41 < (int)uVar36) {
                iVar26 = uVar17 + 3;
                *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                     *(undefined1 *)((long)piVar25 + (long)iVar41);
                if (iVar26 < (int)uVar36) {
                  iVar41 = uVar17 + 4;
                  *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                       *(undefined1 *)((long)piVar25 + (long)iVar26);
                  if (iVar41 < (int)uVar36) {
                    iVar26 = uVar17 + 5;
                    *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                         *(undefined1 *)((long)piVar25 + (long)iVar41);
                    if (iVar26 < (int)uVar36) {
                      iVar41 = uVar17 + 6;
                      *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                           *(undefined1 *)((long)piVar25 + (long)iVar26);
                      if (iVar41 < (int)uVar36) {
                        iVar26 = uVar17 + 7;
                        *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                             *(undefined1 *)((long)piVar25 + (long)iVar41);
                        if (iVar26 < (int)uVar36) {
                          iVar41 = uVar17 + 8;
                          *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                               *(undefined1 *)((long)piVar25 + (long)iVar26);
                          if (iVar41 < (int)uVar36) {
                            iVar26 = uVar17 + 9;
                            *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                                 *(undefined1 *)((long)piVar25 + (long)iVar41);
                            if (iVar26 < (int)uVar36) {
                              iVar41 = uVar17 + 10;
                              *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                                   *(undefined1 *)((long)piVar25 + (long)iVar26);
                              if (iVar41 < (int)uVar36) {
                                iVar26 = uVar17 + 0xb;
                                *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                                     *(undefined1 *)((long)piVar25 + (long)iVar41);
                                if (iVar26 < (int)uVar36) {
                                  iVar41 = uVar17 + 0xc;
                                  *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                                       *(undefined1 *)((long)piVar25 + (long)iVar26);
                                  if (iVar41 < (int)uVar36) {
                                    iVar26 = uVar17 + 0xd;
                                    *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                                         *(undefined1 *)((long)piVar25 + (long)iVar41);
                                    if (iVar26 < (int)uVar36) {
                                      iVar41 = uVar17 + 0xe;
                                      *(undefined1 *)((long)local_868 + (long)(iVar26 + iVar40)) =
                                           *(undefined1 *)((long)piVar25 + (long)iVar26);
                                      if (iVar41 < (int)uVar36) {
                                        *(undefined1 *)((long)local_868 + (long)(iVar41 + iVar40)) =
                                             *(undefined1 *)((long)piVar25 + (long)iVar41);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00291c38:
        iVar14 = iVar14 + 1;
        piVar23 = (int *)((long)piVar23 + (long)(int)uVar36);
        iVar40 = iVar40 + uVar36;
      } while (iVar14 != iVar33);
    }
    lVar38 = (long)local_970 * uVar12;
    pvVar20 = (void *)((long)pvVar11 + __n + lVar38);
    if (0 < iVar13) {
      iVar33 = 0;
      do {
        if (pvVar20 != pvVar35) {
          memcpy(pvVar20,pvVar35,(long)iVar31);
        }
        iVar33 = iVar33 + 1;
        pvVar35 = (void *)((long)pvVar35 + uVar10);
        memcpy((void *)((long)pvVar20 - __n),piVar37,__n);
        __dest = (void *)((long)pvVar20 + (long)iVar31);
        pvVar20 = (void *)((long)pvVar20 + uVar12);
        memcpy(__dest,piVar37,(long)iVar29);
      } while (iVar33 != iVar13);
    }
    if (0 < local_970) {
      iVar29 = 0;
      pvVar35 = (void *)((long)pvVar11 + (long)-local_970 * uVar12 + lVar38);
      do {
        iVar29 = iVar29 + 1;
        memcpy(pvVar35,piVar37,(long)iVar49);
        pvVar35 = (void *)((long)pvVar35 + uVar12);
      } while (iVar29 != local_970);
    }
    if (0 < iVar16) {
      iVar29 = 0;
      pvVar35 = (void *)((long)pvVar11 + (long)iVar13 * uVar12 + lVar38);
      do {
        iVar29 = iVar29 + 1;
        memcpy(pvVar35,piVar37,(long)iVar49);
        pvVar35 = (void *)((long)pvVar35 + uVar12);
      } while (iVar29 != iVar16);
    }
    if ((local_868 != aiStack_858) && (local_868 != (int *)0x0)) {
      operator_delete__(local_868);
    }
  }
  else {
    iVar13 = local_8e8[1];
    iVar29 = *local_8e8;
    iVar33 = *local_888;
    iVar16 = local_888[1];
    if (local_924 < 1) {
      uVar19 = 0;
      uVar34 = 0;
    }
    else {
      uVar34 = local_8e0[(long)local_924 + -1] & 0xffffffff;
      uVar19 = (ulong)(int)local_8e0[(long)local_924 + -1];
    }
    if ((((ulong)local_8b8 | (ulong)local_918 | local_878 | local_8d8 | uVar19) & 3) == 0) {
      iVar31 = (int)uVar34;
      iVar49 = iVar31 + 3;
      if (-1 < iVar31) {
        iVar49 = iVar31;
      }
      bVar2 = true;
      uVar34 = (ulong)(uint)(iVar49 >> 2);
      local_94c = 4;
    }
    else {
      bVar2 = false;
      local_94c = 1;
    }
    local_450 = local_440;
    iVar49 = iVar16 - iVar13;
    uVar32 = (uint)uVar34;
    local_448 = (Mat *)0x108;
    pMVar39 = (Mat *)(long)(int)(iVar49 * uVar32);
    if ((Mat *)0x108 < pMVar39) {
      uVar19 = (long)pMVar39 << 2;
      if ((Mat *)0x1fc0000000000000 < pMVar39) {
        uVar19 = 0xffffffffffffffff;
      }
      local_450 = operator_new__(uVar19);
    }
    piVar25 = local_450;
    iVar49 = iVar49 - param_5;
    iVar33 = (iVar33 - iVar29) - local_970;
    local_448 = pMVar39;
    if (0 < param_5) {
      lVar38 = 0;
      iVar31 = -param_5;
      iVar40 = 0;
      piVar37 = local_450;
      do {
        iVar14 = borderInterpolate(iVar31,iVar13,uVar36);
        iVar14 = uVar32 * iVar14;
        if (0 < (int)uVar32) {
          uVar22 = -((uint)((ulong)piVar37 >> 2) & 3) & 3;
          uVar19 = uVar34;
          if (uVar22 < uVar32) {
            uVar19 = (ulong)uVar22;
          }
          if (uVar32 < 7) {
            uVar19 = uVar34;
          }
          uVar22 = (uint)uVar19;
          uVar27 = uVar19;
          if (uVar22 != 0) {
            *piVar37 = iVar14;
            if ((((uVar22 != 1) && (piVar37[1] = iVar14 + 1, uVar22 != 2)) &&
                (piVar37[2] = iVar14 + 2, uVar22 != 3)) && (piVar37[3] = iVar14 + 3, uVar22 != 4)) {
              piVar37[4] = iVar14 + 4;
              if (uVar22 == 6) {
                piVar37[5] = iVar14 + 5;
              }
              else {
                uVar27 = 5;
              }
            }
            if (uVar32 == uVar22) goto LAB_002910b8;
          }
          iVar15 = (int)uVar27;
          uVar17 = ((uVar32 - uVar22) - 4 >> 2) + 1;
          iVar26 = uVar17 * 4;
          if (2 < (uVar32 - 1) - uVar22) {
            uVar28 = 0;
            iVar41 = iVar15 + (int)_DAT_00291f30;
            iVar45 = iVar15 + (int)((ulong)_DAT_00291f30 >> 0x20);
            iVar46 = iVar15 + (int)_UNK_00291f38;
            iVar47 = iVar15 + (int)((ulong)_UNK_00291f38 >> 0x20);
            piVar23 = piVar25 + lVar38 + uVar19;
            do {
              uVar28 = uVar28 + 1;
              *(ulong *)(piVar23 + 2) = CONCAT44(iVar14 + iVar47,iVar14 + iVar46);
              *(ulong *)piVar23 = CONCAT44(iVar14 + iVar45,iVar14 + iVar41);
              iVar41 = iVar41 + 4;
              iVar45 = iVar45 + 4;
              iVar46 = iVar46 + 4;
              iVar47 = iVar47 + 4;
              piVar23 = piVar23 + 4;
            } while (uVar28 < uVar17);
            iVar15 = iVar15 + iVar26;
            if (iVar26 == uVar32 - uVar22) goto LAB_002910b8;
          }
          iVar26 = iVar15 + 1;
          piVar25[iVar15 + iVar40] = iVar14 + iVar15;
          if (iVar26 < (int)uVar32) {
            iVar15 = iVar15 + 2;
            piVar25[iVar26 + iVar40] = iVar14 + iVar26;
            if (iVar15 < (int)uVar32) {
              piVar25[iVar15 + iVar40] = iVar14 + iVar15;
            }
          }
        }
LAB_002910b8:
        iVar31 = iVar31 + 1;
        piVar37 = piVar37 + (int)uVar32;
        iVar40 = iVar40 + uVar32;
        lVar38 = lVar38 + (int)uVar32;
      } while (iVar31 != 0);
    }
    iVar31 = param_5 * uVar32;
    if (0 < iVar49) {
      lVar38 = (long)iVar31;
      piVar37 = piVar25 + lVar38;
      iVar40 = iVar13;
      iVar14 = iVar31;
      do {
        iVar15 = borderInterpolate(iVar40,iVar13,uVar36);
        iVar15 = uVar32 * iVar15;
        if (0 < (int)uVar32) {
          uVar22 = -((uint)((ulong)piVar37 >> 2) & 3) & 3;
          uVar19 = (ulong)uVar22;
          if (uVar32 < uVar22) {
            uVar19 = uVar34;
          }
          if (uVar32 < 7) {
            uVar19 = uVar34;
          }
          uVar22 = (uint)uVar19;
          uVar27 = uVar19;
          if (uVar22 != 0) {
            *piVar37 = iVar15;
            if (((uVar22 != 1) && (piVar37[1] = iVar15 + 1, uVar22 != 2)) &&
               ((piVar37[2] = iVar15 + 2, uVar22 != 3 && (piVar37[3] = iVar15 + 3, uVar22 != 4)))) {
              piVar37[4] = iVar15 + 4;
              if (uVar22 == 6) {
                piVar37[5] = iVar15 + 5;
              }
              else {
                uVar27 = 5;
              }
            }
            if (uVar22 == uVar32) goto LAB_00291274;
          }
          iVar26 = (int)uVar27;
          uVar17 = ((uVar32 - uVar22) - 4 >> 2) + 1;
          iVar41 = uVar17 * 4;
          if (2 < (uVar32 - 1) - uVar22) {
            uVar28 = 0;
            iVar45 = iVar26 + (int)_DAT_00291f30;
            iVar46 = iVar26 + (int)((ulong)_DAT_00291f30 >> 0x20);
            iVar47 = iVar26 + (int)_UNK_00291f38;
            iVar48 = iVar26 + (int)((ulong)_UNK_00291f38 >> 0x20);
            piVar23 = piVar25 + lVar38 + uVar19;
            do {
              uVar28 = uVar28 + 1;
              *(ulong *)(piVar23 + 2) = CONCAT44(iVar15 + iVar48,iVar15 + iVar47);
              *(ulong *)piVar23 = CONCAT44(iVar15 + iVar46,iVar15 + iVar45);
              iVar45 = iVar45 + 4;
              iVar46 = iVar46 + 4;
              iVar47 = iVar47 + 4;
              iVar48 = iVar48 + 4;
              piVar23 = piVar23 + 4;
            } while (uVar28 < uVar17);
            iVar26 = iVar26 + iVar41;
            if (iVar41 == uVar32 - uVar22) goto LAB_00291274;
          }
          iVar41 = iVar26 + 1;
          piVar25[iVar26 + iVar14] = iVar15 + iVar26;
          if (iVar41 < (int)uVar32) {
            iVar26 = iVar26 + 2;
            piVar25[iVar41 + iVar14] = iVar15 + iVar41;
            if (iVar26 < (int)uVar32) {
              piVar25[iVar14 + iVar26] = iVar15 + iVar26;
            }
          }
        }
LAB_00291274:
        iVar40 = iVar40 + 1;
        piVar37 = piVar37 + (int)uVar32;
        iVar14 = iVar14 + uVar32;
        lVar38 = lVar38 + (int)uVar32;
      } while (iVar40 != iVar49 + iVar13);
    }
    lVar38 = (long)local_970 * uVar12;
    iVar13 = iVar13 * uVar32;
    iVar49 = uVar32 * iVar49;
    pvVar20 = (void *)((long)pvVar11 + lVar38 + iVar31 * local_94c);
    if (0 < iVar29) {
      iVar40 = 0;
      lVar42 = NEON_shl((long)iVar13,2);
      do {
        while( true ) {
          if (pvVar20 != pvVar35) {
            pvVar20 = memcpy(pvVar20,pvVar35,(long)(iVar13 * local_94c));
          }
          if (bVar2) break;
          lVar24 = 0;
          if (0 < iVar31) {
            do {
              *(undefined1 *)((long)pvVar20 + lVar24 + -iVar31) =
                   *(undefined1 *)((long)pvVar35 + (long)piVar25[lVar24]);
              lVar24 = lVar24 + 1;
            } while ((int)lVar24 < iVar31);
          }
          lVar24 = 0;
          if (0 < iVar49) {
            do {
              *(undefined1 *)((long)pvVar20 + lVar24 + iVar13) =
                   *(undefined1 *)((long)pvVar35 + (long)piVar25[iVar31 + lVar24]);
              lVar24 = lVar24 + 1;
            } while ((int)lVar24 < iVar49);
          }
LAB_002913e0:
          iVar40 = iVar40 + 1;
          pvVar20 = (void *)((long)pvVar20 + uVar12);
          pvVar35 = (void *)((long)pvVar35 + uVar10);
          if (iVar40 == iVar29) goto LAB_002913fc;
        }
        lVar24 = 0;
        if (0 < iVar31) {
          do {
            *(undefined4 *)((long)pvVar20 + lVar24 * 4 + (long)-iVar31 * 4) =
                 *(undefined4 *)((long)pvVar35 + (long)piVar25[lVar24] * 4);
            lVar24 = lVar24 + 1;
          } while ((int)lVar24 < iVar31);
        }
        lVar24 = 0;
        if (iVar49 < 1) goto LAB_002913e0;
        do {
          *(undefined4 *)((long)pvVar20 + lVar24 * 4 + lVar42) =
               *(undefined4 *)((long)pvVar35 + (long)piVar25[iVar31 + lVar24] * 4);
          lVar24 = lVar24 + 1;
        } while ((int)lVar24 < iVar49);
        iVar40 = iVar40 + 1;
        pvVar20 = (void *)((long)pvVar20 + uVar12);
        pvVar35 = (void *)((long)pvVar35 + uVar10);
      } while (iVar40 != iVar29);
    }
LAB_002913fc:
    local_94c = iVar16 * uVar32 * local_94c;
    if (0 < local_970) {
      local_970 = -local_970;
      pvVar35 = (void *)((long)pvVar11 + (long)local_970 * uVar12 + lVar38);
      do {
        iVar13 = borderInterpolate(local_970,iVar29,uVar36);
        memcpy(pvVar35,(void *)((long)pvVar11 + (long)iVar13 * uVar12 + lVar38),(long)local_94c);
        local_970 = local_970 + 1;
        pvVar35 = (void *)((long)pvVar35 + uVar12);
      } while (local_970 != 0);
    }
    if (0 < iVar33) {
      pvVar35 = (void *)((long)pvVar11 + (long)iVar29 * uVar12 + lVar38);
      iVar13 = iVar29;
      do {
        iVar16 = borderInterpolate(iVar13,iVar29,uVar36);
        iVar13 = iVar13 + 1;
        memcpy(pvVar35,(void *)((long)pvVar11 + (long)iVar16 * uVar12 + lVar38),(long)local_94c);
        pvVar35 = (void *)((long)pvVar35 + uVar12);
      } while (iVar13 != iVar29 + iVar33);
    }
  }
  if ((local_450 != local_440) && (local_450 != (int *)0x0)) {
    operator_delete__(local_450);
  }
  if (local_890 != 0) {
    piVar25 = (int *)(local_890 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar2) {
        *piVar25 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_8c8);
    }
  }
  local_890 = 0;
  local_8b8 = (void *)0x0;
  local_8a0 = 0;
  local_8a8 = 0;
  local_8b0 = 0;
  if (0 < local_8c4) {
    iVar13 = 0;
    piVar25 = local_888;
    do {
      *piVar25 = 0;
      iVar13 = iVar13 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar13 < local_8c4);
  }
  if (local_880 != &local_878) {
    fastFree(local_880);
  }
  if (local_8f0 != 0) {
    piVar25 = (int *)(local_8f0 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar2) {
        *piVar25 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_928);
    }
  }
  if (0 < local_924) {
    iVar13 = 0;
    piVar25 = local_8e8;
    do {
      *piVar25 = 0;
      iVar13 = iVar13 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar13 < local_924);
  }
LAB_00290bfc:
  local_8f0 = 0;
  local_900 = 0;
  local_908 = 0;
  local_910 = 0;
  local_918 = (void *)0x0;
  if (local_8e0 != &local_8d8) {
    fastFree(local_8e0);
  }
  return;
}


==================================================================

### FUNC 00291f40 (2120 bytes) name=cvCopy

void cvCopy(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
           AutoBuffer *param_6)

{
  undefined4 uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  int iVar14;
  char *pcVar15;
  int *piVar16;
  void *pvVar17;
  Mat *__src;
  ulong uVar18;
  int *piVar19;
  undefined8 *puVar20;
  ulong uVar21;
  long lVar22;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  undefined8 local_c0;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((((param_1 != (cv *)0x0) && (param_2 != (cv *)0x0)) &&
      ((*(uint *)param_1 & 0xffff0000) == 0x42440000)) &&
     ((*(uint *)param_2 & 0xffff0000) == 0x42440000)) {
    if (param_3 != (cv *)0x0) {
      local_60 = 0;
      local_58 = (Mat *)0x0;
      pcVar15 = (char *)cv::String::allocate((String *)&local_60,0xc);
      uVar1 = s_maskarr____0_00464028._8_4_;
      *(undefined8 *)pcVar15 = s_maskarr____0_00464028._0_8_;
      *(undefined4 *)(pcVar15 + 8) = uVar1;
      cv::error(-0xd7,(String *)&local_60,"void cvCopy(const void*, void*, const void*)",
                "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x52f);
      cv::String::deallocate((String *)&local_60);
    }
    *(undefined4 *)(param_2 + 4) = *(undefined4 *)(param_1 + 4);
    memcpy(param_2 + 0x34,param_1 + 0x34,(long)*(int *)(param_1 + 4) << 2);
    uVar1 = *(undefined4 *)(param_1 + 0x30);
    *(undefined4 *)(param_2 + 0x2c) = *(undefined4 *)(param_1 + 0x2c);
    *(undefined4 *)(param_2 + 0x30) = uVar1;
    cvClearSet(*(undefined8 *)(param_2 + 0x18));
    uVar2 = *(uint *)(param_2 + 0x28);
    pvVar17 = *(void **)(param_2 + 0x20);
    if ((int)(uVar2 * 3) <= *(int *)(*(long *)(param_1 + 0x18) + 0x68)) {
      cv::cvFree_(pvVar17);
      uVar2 = *(uint *)(param_1 + 0x28);
      *(uint *)(param_2 + 0x28) = uVar2;
      *(undefined8 *)(param_2 + 0x20) = 0;
      pvVar17 = (void *)cv::cvAlloc(-(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3
                                   );
      uVar2 = *(uint *)(param_2 + 0x28);
      *(void **)(param_2 + 0x20) = pvVar17;
    }
    memset(pvVar17,0,-(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3);
    __src = (Mat *)cvInitSparseMatIterator(param_1,(String *)&local_60);
    if (__src == (Mat *)0x0) {
      return;
    }
    while( true ) {
      do {
        lVar22 = *(long *)(param_2 + 0x18);
        local_c0 = *(uint **)(lVar22 + 0x60);
        if (local_c0 == (uint *)0x0) {
          cvSetAdd(lVar22,0,&local_c0);
          lVar22 = *(long *)(param_2 + 0x18);
        }
        else {
          uVar2 = *local_c0;
          iVar13 = *(int *)(lVar22 + 0x68);
          *(undefined8 *)(lVar22 + 0x60) = *(undefined8 *)(local_c0 + 2);
          *local_c0 = uVar2 & 0x3ffffff;
          *(int *)(lVar22 + 0x68) = iVar13 + 1;
        }
        uVar2 = *(int *)(param_2 + 0x28) - 1U & *(uint *)__src;
        pvVar17 = memcpy(local_c0,__src,(long)*(int *)(lVar22 + 0x2c));
        lVar22 = *(long *)(param_2 + 0x20);
        uVar18 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
        *(undefined8 *)((long)pvVar17 + 8) = *(undefined8 *)(lVar22 + uVar18);
        *(void **)(lVar22 + uVar18) = pvVar17;
        __src = *(Mat **)(local_58 + 8);
        local_58 = __src;
      } while (__src != (Mat *)0x0);
      uVar2 = (int)local_50 + 1;
      uVar18 = (ulong)uVar2;
      if ((int)*(uint *)(local_60 + 0x28) <= (int)uVar2) break;
      uVar21 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | uVar18 << 3;
      puVar20 = (undefined8 *)(*(long *)(local_60 + 0x20) + uVar21);
      __src = *(Mat **)(*(long *)(local_60 + 0x20) + uVar21);
      while (__src == (Mat *)0x0) {
        uVar2 = (int)uVar18 + 1;
        uVar18 = (ulong)uVar2;
        if (uVar2 == *(uint *)(local_60 + 0x28)) {
          return;
        }
        puVar20 = puVar20 + 1;
        __src = (Mat *)*puVar20;
      }
      local_50 = CONCAT44((int)((ulong)local_50 >> 0x20),uVar2);
      local_58 = __src;
    }
    return;
  }
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,true,0,param_6);
  if (((local_120 & 7) == ((uint)local_c0 & 7)) && (iVar13 = local_e0[-1], iVar13 == local_80[-1]))
  {
    if (iVar13 == 2) {
      if ((*local_e0 != *local_80) || (local_e0[1] != local_80[1])) goto LAB_00291fe4;
    }
    else if (0 < iVar13) {
      if (*local_e0 == *local_80) {
        piVar16 = local_e0;
        piVar19 = local_80;
        do {
          piVar19 = piVar19 + 1;
          if (piVar16 == local_e0 + (iVar13 - 1)) goto LAB_00292050;
          piVar16 = piVar16 + 1;
        } while (*piVar16 == *piVar19);
      }
      goto LAB_00291fe4;
    }
  }
  else {
LAB_00291fe4:
    local_160 = 0;
    local_158 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_160,0x32);
    uVar10 = s_src_depth______dst_depth______sr_00464038._40_8_;
    uVar9 = s_src_depth______dst_depth______sr_00464038._32_8_;
    uVar8 = s_src_depth______dst_depth______sr_00464038._24_8_;
    uVar7 = s_src_depth______dst_depth______sr_00464038._16_8_;
    uVar6 = s_src_depth______dst_depth______sr_00464038._8_8_;
    uVar5 = s_src_depth______dst_depth______sr_00464038._0_8_;
    *(undefined2 *)(pcVar15 + 0x30) = s_src_depth______dst_depth______sr_00464038._48_2_;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
    *(undefined8 *)(pcVar15 + 0x20) = uVar9;
    *(undefined8 *)(pcVar15 + 0x28) = uVar10;
    cv::error(-0xd7,(String *)&local_160,"void cvCopy(const void*, void*, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x551);
    cv::String::deallocate((String *)&local_160);
  }
LAB_00292050:
  if (((param_1 == (cv *)0x0) || (*(int *)param_1 != 0x90)) || (*(long *)(param_1 + 0x58) == 0)) {
    if (((param_2 != (cv *)0x0) && (*(int *)param_2 == 0x90)) &&
       (iVar13 = 0, *(long *)(param_2 + 0x58) != 0)) {
LAB_00292370:
      iVar14 = cvGetImageCOI(param_2);
      goto LAB_0029237c;
    }
  }
  else {
    iVar13 = cvGetImageCOI(param_1);
    if (param_2 == (cv *)0x0) {
      iVar14 = 0;
    }
    else {
      iVar14 = 0;
      if ((*(int *)param_2 == 0x90) && (*(long *)(param_2 + 0x58) != 0)) goto LAB_00292370;
    }
LAB_0029237c:
    if (iVar13 != 0 || iVar14 != 0) {
      if (((iVar13 == 0) && ((local_120 >> 3 & 0x1ff) != 0)) ||
         ((iVar14 == 0 && (((uint)local_c0 >> 3 & 0x1ff) != 0)))) {
        local_150 = 0;
        local_148 = (Mat *)0x0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_150,0x48);
        uVar10 = s__coi1____0____src_channels______1_00464070._40_8_;
        uVar9 = s__coi1____0____src_channels______1_00464070._32_8_;
        uVar8 = s__coi1____0____src_channels______1_00464070._24_8_;
        uVar7 = s__coi1____0____src_channels______1_00464070._16_8_;
        uVar6 = s__coi1____0____src_channels______1_00464070._8_8_;
        uVar5 = s__coi1____0____src_channels______1_00464070._0_8_;
        *(undefined8 *)(pcVar15 + 0x40) = s__coi1____0____src_channels______1_00464070._64_8_;
        uVar12 = s__coi1____0____src_channels______1_00464070._56_8_;
        uVar11 = s__coi1____0____src_channels______1_00464070._48_8_;
        *(undefined8 *)pcVar15 = uVar5;
        *(undefined8 *)(pcVar15 + 8) = uVar6;
        *(undefined8 *)(pcVar15 + 0x10) = uVar7;
        *(undefined8 *)(pcVar15 + 0x18) = uVar8;
        *(undefined8 *)(pcVar15 + 0x20) = uVar9;
        *(undefined8 *)(pcVar15 + 0x28) = uVar10;
        *(undefined8 *)(pcVar15 + 0x30) = uVar11;
        *(undefined8 *)(pcVar15 + 0x38) = uVar12;
        cv::error(-0xd7,(String *)&local_150,"void cvCopy(const void*, void*, const void*)",
                  "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x55c);
        cv::String::deallocate((String *)&local_150);
      }
      iVar13 = iVar13 + -1;
      if (iVar13 < 0) {
        iVar13 = 0;
      }
      iVar14 = iVar14 + -1;
      if (iVar14 < 0) {
        iVar14 = 0;
      }
      local_60 = CONCAT44(iVar14,iVar13);
      cv::mixChannels((Mat *)&local_120,1,(Mat *)&local_c0,1,(int *)&local_60,1);
      if (local_88 != 0) {
        piVar16 = (int *)(local_88 + 0x14);
        do {
          iVar13 = *piVar16;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar4) {
            *piVar16 = iVar13 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar13 == 1) {
          cv::Mat::deallocate((Mat *)&local_c0);
        }
      }
      local_88 = 0;
      local_b0 = 0;
      local_98 = 0;
      local_a0 = 0;
      local_a8 = 0;
      if (0 < local_c0._4_4_) {
        iVar13 = 0;
        do {
          *local_80 = 0;
          iVar13 = iVar13 + 1;
          local_80 = local_80 + 1;
        } while (iVar13 < local_c0._4_4_);
      }
      if (local_78 != auStack_70) {
        cv::fastFree(local_78);
      }
      if (local_e8 != 0) {
        piVar16 = (int *)(local_e8 + 0x14);
        do {
          iVar13 = *piVar16;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar4) {
            *piVar16 = iVar13 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar13 == 1) {
          cv::Mat::deallocate((Mat *)&local_120);
        }
      }
      if (0 < local_11c) {
        iVar13 = 0;
        do {
          *local_e0 = 0;
          iVar13 = iVar13 + 1;
          local_e0 = local_e0 + 1;
        } while (iVar13 < local_11c);
      }
      goto LAB_002922a0;
    }
  }
  if ((local_120 >> 3 & 0x1ff) + 1 != ((uint)local_c0 >> 3 & 0x1ff) + 1) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_138,0x20);
    uVar7 = s_src_size____dst_size____src_chan_00463470._48_8_;
    uVar6 = s_src_size____dst_size____src_chan_00463470._40_8_;
    uVar5 = s_src_size____dst_size____src_chan_00463470._32_8_;
    *(undefined8 *)pcVar15 = s_src_size____dst_size____src_chan_00463470._24_8_;
    *(undefined8 *)(pcVar15 + 8) = uVar5;
    *(undefined8 *)(pcVar15 + 0x10) = uVar6;
    *(undefined8 *)(pcVar15 + 0x18) = uVar7;
    cv::error(-0xd7,(String *)&local_138,"void cvCopy(const void*, void*, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x563);
    cv::String::deallocate((String *)&local_138);
  }
  if (param_3 == (cv *)0x0) {
    local_50 = 0;
    local_60 = CONCAT44(local_60._4_4_,0x2010000);
    local_58 = (Mat *)&local_c0;
    cv::Mat::copyTo((Mat *)&local_120,(_OutputArray *)&local_60);
  }
  else {
    local_140 = 0;
    local_13c = 0;
    local_150 = CONCAT44(local_150._4_4_,0x2010000);
    local_148 = (Mat *)&local_c0;
    cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)0x2010000);
    local_128 = 0;
    local_124 = 0;
    local_138 = CONCAT44(local_138._4_4_,0x1010000);
    local_130 = (Mat *)&local_60;
    cv::Mat::copyTo((Mat *)&local_120,(_OutputArray *)&local_150,(_InputArray *)&local_138);
    if (local_28 != 0) {
      piVar16 = (int *)(local_28 + 0x14);
      do {
        iVar13 = *piVar16;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar4) {
          *piVar16 = iVar13 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar13 == 1) {
        cv::Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar13 = 0;
      do {
        *local_20 = 0;
        iVar13 = iVar13 + 1;
        local_20 = local_20 + 1;
      } while (iVar13 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar16 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar16;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar4) {
        *piVar16 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_c0._4_4_);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar16 = (int *)(local_e8 + 0x14);
    do {
      iVar13 = *piVar16;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar4) {
        *piVar16 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
LAB_002922a0:
  local_e8 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  local_110 = 0;
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00292844 (588 bytes) name=cvSet

void cvSet(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,cv *param_5,
          cv *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined4 local_110 [2];
  undefined8 *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 uStack_e0;
  undefined8 uStack_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 uStack_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,in_x5);
  if (param_6 == (cv *)0x0) {
    uStack_60 = param_1;
    uStack_58 = param_2;
    local_50 = param_3;
    uStack_48 = param_4;
    cv::Mat::operator=(aMStack_c0,(Scalar_ *)&uStack_60);
  }
  else {
    local_108 = &uStack_e0;
    local_110[0] = 0xc1020006;
    local_100 = 1;
    local_fc = 4;
    uStack_e0 = param_1;
    uStack_d8 = param_2;
    local_d0 = param_3;
    uStack_c8 = param_4;
    cv::cvarrToMat(param_6,(void *)0x0,true,false,0,(AutoBuffer *)0x4);
    local_e8 = 0;
    local_e4 = 0;
    local_f8[0] = 0x1010000;
    local_f0 = (Mat *)&uStack_60;
    cv::Mat::setTo(aMStack_c0,(_InputArray *)local_110,(_InputArray *)local_f8);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate((Mat *)&uStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    uStack_48 = 0;
    if (0 < uStack_60._4_4_) {
      iVar4 = 0;
      do {
        *local_20 = 0;
        iVar4 = iVar4 + 1;
        local_20 = local_20 + 1;
      } while (iVar4 < uStack_60._4_4_);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00292ae0 (284 bytes) name=cvSetZero

void cvSetZero(cv *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((param_1 == (cv *)0x0) || ((*(uint *)param_1 & 0xffff0000) != 0x42440000)) {
    cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
    local_80 = 0;
    local_78 = 0;
    local_70 = 0;
    local_68 = 0;
    cv::Mat::operator=(aMStack_60,(Scalar_ *)&local_80);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar4 = 0;
      do {
        *local_20 = 0;
        iVar4 = iVar4 + 1;
        local_20 = local_20 + 1;
      } while (iVar4 < local_5c);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  else {
    cvClearSet(*(undefined8 *)(param_1 + 0x18));
    if (*(void **)(param_1 + 0x20) != (void *)0x0) {
      memset(*(void **)(param_1 + 0x20),0,(long)*(int *)(param_1 + 0x28) << 3);
    }
  }
  return;
}


==================================================================

### FUNC 00292c24 (1384 bytes) name=cvFlip

/* WARNING: Removing unreachable block (ram,0x00293078) */
/* WARNING: Removing unreachable block (ram,0x0029307c) */
/* WARNING: Removing unreachable block (ram,0x00293084) */
/* WARNING: Removing unreachable block (ram,0x0029308c) */
/* WARNING: Removing unreachable block (ram,0x00293174) */
/* WARNING: Removing unreachable block (ram,0x002930b4) */
/* WARNING: Removing unreachable block (ram,0x002930bc) */
/* WARNING: Removing unreachable block (ram,0x002930d0) */

void cvFlip(cv *param_1,cv *param_2,int param_3,undefined8 param_4,undefined8 param_5,
           AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  char *pcVar10;
  int *piVar11;
  int iVar12;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  int local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  local_bc = 0;
  local_80 = &local_b8;
  local_78 = &local_70;
  local_b8 = 0;
  local_c0 = 0x42ff0000;
  local_b4 = 0;
  local_b0 = 0;
  uStack_a8 = 0;
  local_a0 = 0;
  uStack_98 = 0;
  local_90 = 0;
  lStack_88 = 0;
  local_68 = 0;
  local_70 = 0;
  if (param_2 == (cv *)0x0) {
    if (lStack_e8 != 0) {
      piVar11 = (int *)(lStack_e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = *piVar11 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    local_c0 = local_120;
    if (local_11c < 3) {
      local_b4 = local_114;
      local_b8 = local_118;
      local_70 = *local_d8;
      local_bc = local_11c;
      local_68 = local_d8[1];
    }
    else {
      cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    }
    uStack_98 = uStack_f8;
    local_a0 = local_100;
    lStack_88 = lStack_e8;
    local_90 = local_f0;
    uStack_a8 = uStack_108;
    local_b0 = local_110;
    goto LAB_00292e14;
  }
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if (lStack_28 != 0) {
    piVar11 = (int *)(lStack_28 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = *piVar11 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_88 != 0) {
    piVar11 = (int *)(lStack_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  puVar9 = local_18;
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (local_bc < 1) {
LAB_00292d50:
    local_c0 = local_60;
    if (2 < local_5c) goto LAB_00292d5c;
    local_b8 = (int)local_58;
    local_b4 = local_58._4_4_;
    local_bc = local_5c;
    *local_78 = *local_18;
    local_78[1] = puVar9[1];
  }
  else {
    iVar12 = 0;
    piVar11 = local_80;
    do {
      *piVar11 = 0;
      iVar12 = iVar12 + 1;
      piVar11 = piVar11 + 1;
    } while (iVar12 < local_bc);
    if (local_bc < 3) goto LAB_00292d50;
LAB_00292d5c:
    local_c0 = local_60;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_60);
  }
  uStack_98 = uStack_38;
  local_a0 = local_40;
  lStack_88 = lStack_28;
  local_90 = local_30;
  uStack_a8 = uStack_48;
  local_b0 = local_50;
  if (lStack_28 != 0) {
    piVar11 = (int *)(lStack_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
LAB_00292e14:
  if ((((local_120 & 0xfff) != (local_c0 & 0xfff)) || (local_e0[1] != local_80[1])) ||
     (*local_e0 != *local_80)) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_138,0x34);
    uVar8 = s_src_type______dst_type______src__004640c0._40_8_;
    uVar7 = s_src_type______dst_type______src__004640c0._32_8_;
    uVar6 = s_src_type______dst_type______src__004640c0._24_8_;
    uVar5 = s_src_type______dst_type______src__004640c0._16_8_;
    uVar4 = s_src_type______dst_type______src__004640c0._8_8_;
    uVar3 = s_src_type______dst_type______src__004640c0._0_8_;
    *(undefined4 *)(pcVar10 + 0x30) = s_src_type______dst_type______src__004640c0._48_4_;
    *(undefined8 *)pcVar10 = uVar3;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    *(undefined8 *)(pcVar10 + 0x10) = uVar5;
    *(undefined8 *)(pcVar10 + 0x18) = uVar6;
    *(undefined8 *)(pcVar10 + 0x20) = uVar7;
    *(undefined8 *)(pcVar10 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_138,"void cvFlip(const CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x58f);
    cv::String::deallocate((String *)&local_138);
  }
  local_138 = CONCAT44(local_138._4_4_,0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_50 = 0;
  local_60 = 0x2010000;
  local_130 = (Mat *)&local_120;
  local_58 = (Mat *)&local_c0;
  cv::flip((_InputArray *)&local_138,(_OutputArray *)&local_60,param_3);
  if (lStack_88 != 0) {
    piVar11 = (int *)(lStack_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    piVar11 = local_80;
    do {
      *piVar11 = 0;
      iVar12 = iVar12 + 1;
      piVar11 = piVar11 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar11 = (int *)(lStack_e8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00293214 (612 bytes) name=cvRepeat

void cvRepeat(cv *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  char *pcVar13;
  int iVar14;
  int iVar15;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  if ((local_c0 & 0xfff) == (local_60 & 0xfff)) {
    iVar14 = 0;
    if (local_b8 != 0) {
      iVar14 = local_58 / local_b8;
    }
    if (local_58 == iVar14 * local_b8) {
      iVar15 = 0;
      if (local_b4 != 0) {
        iVar15 = local_54 / local_b4;
      }
      if (local_54 == iVar15 * local_b4) goto LAB_00293304;
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar13 = (char *)cv::String::allocate((String *)&local_d8,0x50);
  uVar12 = s_src_type______dst_type______dst__004640f8._72_8_;
  uVar11 = s_src_type______dst_type______dst__004640f8._64_8_;
  uVar10 = s_src_type______dst_type______dst__004640f8._56_8_;
  uVar9 = s_src_type______dst_type______dst__004640f8._48_8_;
  uVar8 = s_src_type______dst_type______dst__004640f8._40_8_;
  uVar7 = s_src_type______dst_type______dst__004640f8._32_8_;
  uVar6 = s_src_type______dst_type______dst__004640f8._24_8_;
  uVar5 = s_src_type______dst_type______dst__004640f8._16_8_;
  uVar4 = s_src_type______dst_type______dst__004640f8._8_8_;
  *(undefined8 *)pcVar13 = s_src_type______dst_type______dst__004640f8._0_8_;
  *(undefined8 *)(pcVar13 + 8) = uVar4;
  *(undefined8 *)(pcVar13 + 0x10) = uVar5;
  *(undefined8 *)(pcVar13 + 0x18) = uVar6;
  *(undefined8 *)(pcVar13 + 0x20) = uVar7;
  *(undefined8 *)(pcVar13 + 0x28) = uVar8;
  *(undefined8 *)(pcVar13 + 0x30) = uVar9;
  *(undefined8 *)(pcVar13 + 0x38) = uVar10;
  *(undefined8 *)(pcVar13 + 0x40) = uVar11;
  *(undefined8 *)(pcVar13 + 0x48) = uVar12;
  cv::error(-0xd7,(String *)&local_d8,"void cvRepeat(const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/copy.cpp",0x598);
  cv::String::deallocate((String *)&local_d8);
  iVar14 = 0;
  if (local_b8 != 0) {
    iVar14 = local_58 / local_b8;
  }
  iVar15 = 0;
  if (local_b4 != 0) {
    iVar15 = local_54 / local_b4;
  }
LAB_00293304:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::repeat((_InputArray *)local_f0,iVar14,iVar15,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar14 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar14 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar14 = 0;
    do {
      *local_20 = 0;
      iVar14 = iVar14 + 1;
      local_20 = local_20 + 1;
    } while (iVar14 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar14 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar14 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar14 = 0;
    do {
      *local_80 = 0;
      iVar14 = iVar14 + 1;
      local_80 = local_80 + 1;
    } while (iVar14 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002934dc (168 bytes) name=cvCreateMemStorage

undefined8 * cvCreateMemStorage(int param_1)

{
  undefined8 *puVar1;
  uint uVar2;
  undefined8 *local_10;
  undefined8 *local_8;
  
  puVar1 = (undefined8 *)cv::cvAlloc(0x28);
  if (puVar1 == (undefined8 *)0x0) {
    local_10 = puVar1;
    local_8 = puVar1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void icvInitMemStorage(CvMemStorage*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x5c);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 < 1) {
    uVar2 = 0xff80;
  }
  else {
    uVar2 = param_1 + 7U & 0xfffffff8;
  }
  *puVar1 = 0;
  puVar1[1] = 0;
  puVar1[4] = 0;
  puVar1[2] = 0;
  puVar1[3] = 0;
  *(undefined4 *)puVar1 = 0x42890000;
  *(uint *)(puVar1 + 4) = uVar2;
  return puVar1;
}


==================================================================

### FUNC 00293598 (140 bytes) name=cvCreateChildMemStorage

void cvCreateChildMemStorage(long param_1)

{
  long lVar1;
  long local_10;
  long local_8;
  
  if (param_1 != 0) {
    lVar1 = cvCreateMemStorage(*(undefined4 *)(param_1 + 0x20));
    *(long *)(lVar1 + 0x18) = param_1;
    return;
  }
  local_10 = param_1;
  local_8 = param_1;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0x1b,(String *)&local_10,"CvMemStorage* cvCreateChildMemStorage(CvMemStorage*)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x79);
  cv::String::deallocate((String *)&local_10);
  lVar1 = cvCreateMemStorage(uRam0000000000000020);
  *(undefined8 *)(lVar1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 00293638 (268 bytes) name=cvReleaseMemStorage

void cvReleaseMemStorage(undefined8 *param_1)

{
  int iVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  void *pvVar7;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvReleaseMemStorage(CvMemStorage**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb7);
    cv::String::deallocate((String *)&local_10);
  }
  pvVar7 = (void *)*param_1;
  *param_1 = 0;
  if (pvVar7 != (void *)0x0) {
    lVar3 = *(long *)((long)pvVar7 + 0x18);
    if (lVar3 == 0) {
      puVar5 = (undefined8 *)0x0;
    }
    else {
      puVar5 = *(undefined8 **)(lVar3 + 0x10);
    }
    puVar2 = *(undefined8 **)((long)pvVar7 + 8);
    if (puVar2 != (undefined8 *)0x0) {
      puVar6 = (undefined8 *)puVar2[1];
      if (lVar3 == 0) goto LAB_002936a8;
      do {
        if (puVar5 == (undefined8 *)0x0) {
          *(undefined8 **)(lVar3 + 0x10) = puVar2;
          *(undefined8 **)(lVar3 + 8) = puVar2;
          iVar1 = *(int *)((long)pvVar7 + 0x20);
          puVar2[1] = 0;
          *puVar2 = 0;
          *(int *)((long)pvVar7 + 0x24) = iVar1 + -0x10;
          puVar5 = puVar2;
          puVar2 = puVar6;
        }
        else {
          puVar4 = (undefined8 *)puVar5[1];
          puVar2[1] = puVar4;
          *puVar2 = puVar5;
          if (puVar4 != (undefined8 *)0x0) {
            *puVar4 = puVar2;
          }
          puVar5[1] = puVar2;
          puVar5 = puVar2;
          puVar2 = puVar6;
        }
        while( true ) {
          if (puVar2 == (undefined8 *)0x0) goto LAB_002936b0;
          lVar3 = *(long *)((long)pvVar7 + 0x18);
          puVar6 = (undefined8 *)puVar2[1];
          if (lVar3 != 0) break;
LAB_002936a8:
          cv::cvFree_(puVar2);
          puVar2 = puVar6;
        }
      } while( true );
    }
LAB_002936b0:
    *(undefined8 *)((long)pvVar7 + 8) = 0;
    *(undefined8 *)((long)pvVar7 + 0x10) = 0;
    *(undefined4 *)((long)pvVar7 + 0x24) = 0;
    cv::cvFree_(pvVar7);
  }
  return;
}


==================================================================

### FUNC 00293758 (292 bytes) name=cvClearMemStorage

void cvClearMemStorage(long param_1)

{
  int iVar1;
  undefined8 *puVar2;
  long lVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvClearMemStorage(CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",200);
    cv::String::deallocate((String *)&local_10);
    lVar3 = lRam0000000000000018;
  }
  else {
    lVar3 = *(long *)(param_1 + 0x18);
  }
  if (lVar3 == 0) {
    *(long *)(param_1 + 0x10) = *(long *)(param_1 + 8);
    iVar1 = 0;
    if (*(long *)(param_1 + 8) != 0) {
      iVar1 = *(int *)(param_1 + 0x20) + -0x10;
    }
    *(int *)(param_1 + 0x24) = iVar1;
    return;
  }
  puVar2 = *(undefined8 **)(param_1 + 8);
  puVar5 = *(undefined8 **)(lVar3 + 0x10);
  if (puVar2 != (undefined8 *)0x0) {
    puVar6 = (undefined8 *)puVar2[1];
    if (lVar3 == 0) goto LAB_002937bc;
    do {
      if (puVar5 == (undefined8 *)0x0) {
        *(undefined8 **)(lVar3 + 0x10) = puVar2;
        *(undefined8 **)(lVar3 + 8) = puVar2;
        iVar1 = *(int *)(param_1 + 0x20);
        puVar2[1] = 0;
        *puVar2 = 0;
        *(int *)(param_1 + 0x24) = iVar1 + -0x10;
        puVar5 = puVar2;
        puVar2 = puVar6;
      }
      else {
        puVar4 = (undefined8 *)puVar5[1];
        puVar2[1] = puVar4;
        *puVar2 = puVar5;
        if (puVar4 != (undefined8 *)0x0) {
          *puVar4 = puVar2;
        }
        puVar5[1] = puVar2;
        puVar5 = puVar2;
        puVar2 = puVar6;
      }
      while( true ) {
        if (puVar2 == (undefined8 *)0x0) goto LAB_002937c8;
        lVar3 = *(long *)(param_1 + 0x18);
        puVar6 = (undefined8 *)puVar2[1];
        if (lVar3 != 0) break;
LAB_002937bc:
        cv::cvFree_(puVar2);
        puVar2 = puVar6;
      }
    } while( true );
  }
LAB_002937c8:
  *(undefined8 *)(param_1 + 8) = 0;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined4 *)(param_1 + 0x24) = 0;
  return;
}


==================================================================

### FUNC 00293890 (156 bytes) name=cvSaveMemStoragePos

void cvSaveMemStoragePos(long param_1,undefined8 *param_2)

{
  undefined8 uVar1;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 != 0) && (param_2 != (undefined8 *)0x0)) {
    uVar1 = *(undefined8 *)(param_1 + 0x10);
    *(undefined4 *)(param_2 + 1) = *(undefined4 *)(param_1 + 0x24);
    *param_2 = uVar1;
    return;
  }
  local_10 = 0;
  local_8 = 0;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0x1b,(String *)&local_10,
            "void cvSaveMemStoragePos(const CvMemStorage*, CvMemStoragePos*)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x114);
  cv::String::deallocate((String *)&local_10);
  uVar1 = *(undefined8 *)(param_1 + 0x10);
  *(undefined4 *)(param_2 + 1) = *(undefined4 *)(param_1 + 0x24);
  *param_2 = uVar1;
  return;
}


==================================================================

### FUNC 00293940 (280 bytes) name=cvRestoreMemStoragePos

void cvRestoreMemStoragePos(long param_1,long *param_2)

{
  long lVar1;
  int iVar2;
  long lVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == (long *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "void cvRestoreMemStoragePos(CvMemStorage*, CvMemStoragePos*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x120);
    cv::String::deallocate((String *)&local_10);
    iVar2 = (int)param_2[1];
    if (*(int *)(param_1 + 0x20) < iVar2) goto LAB_002939dc;
  }
  else {
    iVar2 = (int)param_2[1];
    if (*(int *)(param_1 + 0x20) < iVar2) {
LAB_002939dc:
      local_10 = 0;
      local_8 = 0;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0xc9,(String *)&local_10,
                "void cvRestoreMemStoragePos(CvMemStorage*, CvMemStoragePos*)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x122);
      cv::String::deallocate((String *)&local_10);
      lVar1 = param_2[1];
      lVar3 = *param_2;
      *(long *)(param_1 + 0x10) = lVar3;
      *(int *)(param_1 + 0x24) = (int)lVar1;
      goto joined_r0x00293a2c;
    }
  }
  lVar3 = *param_2;
  *(long *)(param_1 + 0x10) = lVar3;
  *(int *)(param_1 + 0x24) = iVar2;
joined_r0x00293a2c:
  if (lVar3 != 0) {
    return;
  }
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 8);
  iVar2 = 0;
  if (*(long *)(param_1 + 8) != 0) {
    iVar2 = *(int *)(param_1 + 0x20) + -0x10;
  }
  *(int *)(param_1 + 0x24) = iVar2;
  return;
}


==================================================================

### FUNC 00293a80 (480 bytes) name=FUN_00293a80

void FUN_00293a80(long param_1)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  long lVar4;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void icvGoNextMemBlock(CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xda);
    cv::String::deallocate((String *)&local_10);
  }
  if ((*(long *)(param_1 + 0x10) == 0) ||
     (plVar1 = *(long **)(*(long *)(param_1 + 0x10) + 8), plVar1 == (long *)0x0)) {
    lVar3 = *(long *)(param_1 + 0x18);
    if (lVar3 == 0) {
      plVar1 = (long *)cv::cvAlloc((long)*(int *)(param_1 + 0x20));
    }
    else {
      cvSaveMemStoragePos(lVar3,auStack_20);
      if ((*(long *)(lVar3 + 0x10) == 0) ||
         (plVar1 = *(long **)(*(long *)(lVar3 + 0x10) + 8), plVar1 == (long *)0x0)) {
        lVar4 = *(long *)(lVar3 + 0x18);
        if (lVar4 == 0) {
          plVar1 = (long *)cv::cvAlloc((long)*(int *)(lVar3 + 0x20));
        }
        else {
          cvSaveMemStoragePos(lVar4,&local_10);
          FUN_00293a80(lVar4);
          plVar1 = *(long **)(lVar4 + 0x10);
          cvRestoreMemStoragePos(lVar4,&local_10);
          plVar2 = *(long **)(lVar4 + 0x10);
          if (plVar1 == plVar2) {
            *(undefined8 *)(lVar4 + 8) = 0;
            *(undefined8 *)(lVar4 + 0x10) = 0;
            *(undefined4 *)(lVar4 + 0x24) = 0;
          }
          else {
            plVar2[1] = plVar1[1];
            if ((undefined8 *)plVar1[1] != (undefined8 *)0x0) {
              *(undefined8 *)plVar1[1] = plVar2;
            }
          }
        }
        lVar4 = *(long *)(lVar3 + 0x10);
        *plVar1 = lVar4;
        plVar1[1] = 0;
        if (lVar4 != 0) {
          *(long **)(lVar4 + 8) = plVar1;
          goto LAB_00293afc;
        }
        *(long **)(lVar3 + 8) = plVar1;
        *(long **)(lVar3 + 0x10) = plVar1;
      }
      else {
LAB_00293afc:
        *(long **)(lVar3 + 0x10) = plVar1;
      }
      *(int *)(lVar3 + 0x24) = *(int *)(lVar3 + 0x20) + -0x10;
      cvRestoreMemStoragePos(lVar3,auStack_20);
      plVar2 = *(long **)(lVar3 + 0x10);
      if (plVar2 == plVar1) {
        *(undefined8 *)(lVar3 + 8) = 0;
        *(undefined8 *)(lVar3 + 0x10) = 0;
        *(undefined4 *)(lVar3 + 0x24) = 0;
      }
      else {
        plVar2[1] = plVar1[1];
        if ((long *)plVar1[1] != (long *)0x0) {
          *(long *)plVar1[1] = (long)plVar2;
        }
      }
    }
    lVar3 = *(long *)(param_1 + 0x10);
    *plVar1 = lVar3;
    plVar1[1] = 0;
    if (lVar3 == 0) {
      *(long **)(param_1 + 8) = plVar1;
      *(long **)(param_1 + 0x10) = plVar1;
      goto LAB_00293ab0;
    }
    *(long **)(lVar3 + 8) = plVar1;
  }
  *(long **)(param_1 + 0x10) = plVar1;
LAB_00293ab0:
  *(int *)(param_1 + 0x24) = *(int *)(param_1 + 0x20) + -0x10;
  return;
}


==================================================================

### FUNC 00293c74 (1428 bytes) name=cvMemStorageAlloc

long cvMemStorageAlloc(long param_1,ulong param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char cVar5;
  ulong uVar6;
  char *pcVar7;
  long *plVar8;
  long *plVar9;
  int iVar10;
  long lVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  undefined1 auStack_50 [16];
  undefined1 auStack_40 [16];
  undefined1 auStack_30 [16];
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x14);
    uVar2 = s_NULL_storage_pointer_0043dfe8._8_8_;
    uVar1 = s_NULL_storage_pointer_0043dfe8._0_8_;
    *(undefined4 *)(pcVar7 + 0x10) = s_NULL_storage_pointer_0043dfe8._16_4_;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,"void* cvMemStorageAlloc(CvMemStorage*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x147);
    cv::String::deallocate((String *)&local_10);
  }
  if (0x7fffffff < param_2) {
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x23);
    cVar5 = s_Too_large_memory_block_is_reques_00464238[0x22];
    uVar4 = s_Too_large_memory_block_is_reques_00464238._24_8_;
    uVar3 = s_Too_large_memory_block_is_reques_00464238._16_8_;
    uVar2 = s_Too_large_memory_block_is_reques_00464238._8_8_;
    uVar1 = s_Too_large_memory_block_is_reques_00464238._0_8_;
    *(undefined2 *)(pcVar7 + 0x20) = s_Too_large_memory_block_is_reques_00464238._32_2_;
    pcVar7[0x22] = cVar5;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    *(undefined8 *)(pcVar7 + 0x10) = uVar3;
    *(undefined8 *)(pcVar7 + 0x18) = uVar4;
    cv::error(-0xd3,(String *)&local_10,"void* cvMemStorageAlloc(CvMemStorage*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x14a);
    cv::String::deallocate((String *)&local_10);
  }
  iVar12 = *(int *)(param_1 + 0x24);
  uVar6 = (ulong)iVar12;
  if (param_2 <= uVar6) {
    iVar10 = *(int *)(param_1 + 0x20);
    plVar9 = *(long **)(param_1 + 0x10);
    goto LAB_00293d5c;
  }
  if ((ulong)(long)(int)(*(int *)(param_1 + 0x20) - 0x10U & 0xfffffff8) < param_2) {
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x25);
    cVar5 = s_requested_size_is_negative_or_to_00464260[0x24];
    uVar4 = s_requested_size_is_negative_or_to_00464260._24_8_;
    uVar3 = s_requested_size_is_negative_or_to_00464260._16_8_;
    uVar2 = s_requested_size_is_negative_or_to_00464260._8_8_;
    uVar1 = s_requested_size_is_negative_or_to_00464260._0_8_;
    *(undefined4 *)(pcVar7 + 0x20) = s_requested_size_is_negative_or_to_00464260._32_4_;
    pcVar7[0x24] = cVar5;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    *(undefined8 *)(pcVar7 + 0x10) = uVar3;
    *(undefined8 *)(pcVar7 + 0x18) = uVar4;
    cv::error(-0xd3,(String *)&local_10,"void* cvMemStorageAlloc(CvMemStorage*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x152);
    cv::String::deallocate((String *)&local_10);
  }
  if ((*(long *)(param_1 + 0x10) == 0) ||
     (plVar9 = *(long **)(*(long *)(param_1 + 0x10) + 8), plVar9 == (long *)0x0)) {
    lVar13 = *(long *)(param_1 + 0x18);
    if (lVar13 == 0) {
      plVar9 = (long *)cv::cvAlloc((long)*(int *)(param_1 + 0x20));
    }
    else {
      cvSaveMemStoragePos(lVar13,auStack_50);
      if ((*(long *)(lVar13 + 0x10) == 0) ||
         (plVar9 = *(long **)(*(long *)(lVar13 + 0x10) + 8), plVar9 == (long *)0x0)) {
        lVar15 = *(long *)(lVar13 + 0x18);
        if (lVar15 == 0) {
          plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar13 + 0x20));
        }
        else {
          cvSaveMemStoragePos(lVar15,auStack_40);
          if ((*(long *)(lVar15 + 0x10) == 0) ||
             (plVar9 = *(long **)(*(long *)(lVar15 + 0x10) + 8), plVar9 == (long *)0x0)) {
            lVar16 = *(long *)(lVar15 + 0x18);
            if (lVar16 == 0) {
              plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar15 + 0x20));
            }
            else {
              cvSaveMemStoragePos(lVar16,auStack_30);
              if ((*(long *)(lVar16 + 0x10) == 0) ||
                 (plVar9 = *(long **)(*(long *)(lVar16 + 0x10) + 8), plVar9 == (long *)0x0)) {
                lVar11 = *(long *)(lVar16 + 0x18);
                if (lVar11 == 0) {
                  plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar16 + 0x20));
                }
                else {
                  cvSaveMemStoragePos(lVar11,auStack_20);
                  if ((*(long *)(lVar11 + 0x10) == 0) ||
                     (plVar8 = *(long **)(*(long *)(lVar11 + 0x10) + 8), plVar8 == (long *)0x0)) {
                    lVar14 = *(long *)(lVar11 + 0x18);
                    if (lVar14 == 0) {
                      plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar11 + 0x20));
                    }
                    else {
                      cvSaveMemStoragePos(lVar14,&local_10);
                      FUN_00293a80(lVar14);
                      plVar9 = *(long **)(lVar14 + 0x10);
                      cvRestoreMemStoragePos(lVar14,&local_10);
                      plVar8 = *(long **)(lVar14 + 0x10);
                      if (plVar9 == plVar8) {
                        *(undefined8 *)(lVar14 + 8) = 0;
                        *(undefined8 *)(lVar14 + 0x10) = 0;
                        *(undefined4 *)(lVar14 + 0x24) = 0;
                      }
                      else {
                        plVar8[1] = plVar9[1];
                        if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                          *(undefined8 *)plVar9[1] = plVar8;
                        }
                      }
                    }
                    plVar8 = *(long **)(lVar11 + 0x10);
                    *plVar9 = (long)plVar8;
                    plVar9[1] = 0;
                    if (plVar8 == (long *)0x0) {
                      *(long **)(lVar11 + 8) = plVar9;
                      *(long **)(lVar11 + 0x10) = plVar9;
                    }
                    else {
                      plVar8[1] = (long)plVar9;
                      plVar9 = plVar8;
                    }
                    plVar8 = (long *)plVar9[1];
                    if (plVar8 != (long *)0x0) goto LAB_00294058;
                  }
                  else {
LAB_00294058:
                    *(long **)(lVar11 + 0x10) = plVar8;
                    plVar9 = plVar8;
                  }
                  *(int *)(lVar11 + 0x24) = *(int *)(lVar11 + 0x20) + -0x10;
                  cvRestoreMemStoragePos(lVar11,auStack_20);
                  plVar8 = *(long **)(lVar11 + 0x10);
                  if (plVar8 == plVar9) {
                    *(undefined8 *)(lVar11 + 8) = 0;
                    *(undefined8 *)(lVar11 + 0x10) = 0;
                    *(undefined4 *)(lVar11 + 0x24) = 0;
                  }
                  else {
                    plVar8[1] = plVar9[1];
                    if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                      *(undefined8 *)plVar9[1] = plVar8;
                    }
                  }
                }
                lVar11 = *(long *)(lVar16 + 0x10);
                *plVar9 = lVar11;
                plVar9[1] = 0;
                if (lVar11 != 0) {
                  *(long **)(lVar11 + 8) = plVar9;
                  goto LAB_00293fd0;
                }
                *(long **)(lVar16 + 8) = plVar9;
                *(long **)(lVar16 + 0x10) = plVar9;
              }
              else {
LAB_00293fd0:
                *(long **)(lVar16 + 0x10) = plVar9;
              }
              *(int *)(lVar16 + 0x24) = *(int *)(lVar16 + 0x20) + -0x10;
              cvRestoreMemStoragePos(lVar16,auStack_30);
              plVar8 = *(long **)(lVar16 + 0x10);
              if (plVar8 == plVar9) {
                *(undefined8 *)(lVar16 + 8) = 0;
                *(undefined8 *)(lVar16 + 0x10) = 0;
                *(undefined4 *)(lVar16 + 0x24) = 0;
              }
              else {
                plVar8[1] = plVar9[1];
                if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                  *(undefined8 *)plVar9[1] = plVar8;
                }
              }
            }
            lVar16 = *(long *)(lVar15 + 0x10);
            *plVar9 = lVar16;
            plVar9[1] = 0;
            if (lVar16 != 0) {
              *(long **)(lVar16 + 8) = plVar9;
              goto LAB_00293f1c;
            }
            *(long **)(lVar15 + 8) = plVar9;
            *(long **)(lVar15 + 0x10) = plVar9;
          }
          else {
LAB_00293f1c:
            *(long **)(lVar15 + 0x10) = plVar9;
          }
          *(int *)(lVar15 + 0x24) = *(int *)(lVar15 + 0x20) + -0x10;
          cvRestoreMemStoragePos(lVar15,auStack_40);
          plVar8 = *(long **)(lVar15 + 0x10);
          if (plVar8 == plVar9) {
            *(undefined8 *)(lVar15 + 8) = 0;
            *(undefined8 *)(lVar15 + 0x10) = 0;
            *(undefined4 *)(lVar15 + 0x24) = 0;
          }
          else {
            plVar8[1] = plVar9[1];
            if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
              *(undefined8 *)plVar9[1] = plVar8;
            }
          }
        }
        lVar15 = *(long *)(lVar13 + 0x10);
        *plVar9 = lVar15;
        plVar9[1] = 0;
        if (lVar15 != 0) {
          *(long **)(lVar15 + 8) = plVar9;
          goto LAB_00293e3c;
        }
        *(long **)(lVar13 + 8) = plVar9;
        *(long **)(lVar13 + 0x10) = plVar9;
      }
      else {
LAB_00293e3c:
        *(long **)(lVar13 + 0x10) = plVar9;
      }
      *(int *)(lVar13 + 0x24) = *(int *)(lVar13 + 0x20) + -0x10;
      cvRestoreMemStoragePos(lVar13,auStack_50);
      plVar8 = *(long **)(lVar13 + 0x10);
      if (plVar8 == plVar9) {
        *(undefined8 *)(lVar13 + 8) = 0;
        *(undefined8 *)(lVar13 + 0x10) = 0;
        *(undefined4 *)(lVar13 + 0x24) = 0;
      }
      else {
        plVar8[1] = plVar9[1];
        if ((long *)plVar9[1] != (long *)0x0) {
          *(long *)plVar9[1] = (long)plVar8;
        }
      }
    }
    lVar13 = *(long *)(param_1 + 0x10);
    *plVar9 = lVar13;
    plVar9[1] = 0;
    if (lVar13 != 0) {
      *(long **)(lVar13 + 8) = plVar9;
      goto LAB_00293d4c;
    }
    *(long **)(param_1 + 8) = plVar9;
    *(long **)(param_1 + 0x10) = plVar9;
  }
  else {
LAB_00293d4c:
    *(long **)(param_1 + 0x10) = plVar9;
  }
  iVar10 = *(int *)(param_1 + 0x20);
  iVar12 = iVar10 + -0x10;
  uVar6 = (ulong)iVar12;
LAB_00293d5c:
  *(uint *)(param_1 + 0x24) = iVar12 - (int)param_2 & 0xfffffff8;
  return (long)plVar9 + ((long)iVar10 - uVar6);
}


==================================================================

### FUNC 00294244 (104 bytes) name=cvMemStorageAllocString

int cvMemStorageAllocString(undefined8 param_1,char *param_2,int param_3)

{
  size_t sVar1;
  void *pvVar2;
  
  if (param_3 < 0) {
    sVar1 = strlen(param_2);
    param_3 = (int)sVar1;
  }
  pvVar2 = (void *)cvMemStorageAlloc(param_1,(long)(param_3 + 1));
  pvVar2 = memcpy(pvVar2,param_2,(long)param_3);
  *(undefined1 *)((long)pvVar2 + (long)param_3) = 0;
  return param_3;
}


==================================================================

### FUNC 002942ac (416 bytes) name=cvSetSeqBlockSize

void cvSetSeqBlockSize(long param_1,int param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  uint uVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (*(long *)(param_1 + 0x48) == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSetSeqBlockSize(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x19e);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 < 0) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xd3,(String *)&local_10,"void cvSetSeqBlockSize(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x1a0);
    cv::String::deallocate((String *)&local_10);
    iVar10 = *(int *)(param_1 + 0x2c);
    uVar9 = *(int *)(*(long *)(param_1 + 0x48) + 0x20) - 0x30U & 0xfffffff8;
  }
  else {
    iVar10 = *(int *)(param_1 + 0x2c);
    uVar9 = *(int *)(*(long *)(param_1 + 0x48) + 0x20) - 0x30U & 0xfffffff8;
    if (param_2 == 0) {
      param_2 = 0;
      if (iVar10 != 0) {
        param_2 = 0x400 / iVar10;
      }
      if (param_2 < 1) {
        param_2 = 1;
      }
    }
  }
  if ((int)uVar9 < param_2 * iVar10) {
    param_2 = 0;
    if (iVar10 != 0) {
      param_2 = (int)uVar9 / iVar10;
    }
    if (param_2 == 0) {
      local_10 = 0;
      local_8 = 0;
      puVar8 = (undefined8 *)cv::String::allocate((String *)&local_10,0x3c);
      uVar7 = DAT_004642b8;
      uVar6 = DAT_004642b0;
      uVar5 = DAT_004642a8;
      uVar4 = DAT_004642a0;
      uVar3 = DAT_00464298;
      uVar2 = DAT_00464290;
      uVar1 = DAT_00464288;
      *(undefined4 *)(puVar8 + 7) = DAT_004642c0;
      puVar8[6] = uVar7;
      *puVar8 = uVar1;
      puVar8[1] = uVar2;
      puVar8[2] = uVar3;
      puVar8[3] = uVar4;
      puVar8[4] = uVar5;
      puVar8[5] = uVar6;
      cv::error(-0xd3,(String *)&local_10,"void cvSetSeqBlockSize(CvSeq*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x1b0);
      cv::String::deallocate((String *)&local_10);
      *(undefined4 *)(param_1 + 0x40) = 0;
      return;
    }
  }
  *(int *)(param_1 + 0x40) = param_2;
  return;
}


==================================================================

### FUNC 00294488 (432 bytes) name=cvCreateSeq

uint * cvCreateSeq(uint param_1,size_t param_2,ulong param_3,long param_4)

{
  ulong uVar1;
  uint *__s;
  void *__dest;
  long local_10;
  long local_8;
  
  if (param_4 == 0) {
    local_10 = param_4;
    local_8 = param_4;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvSeq* cvCreateSeq(int, size_t, size_t, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x178);
    cv::String::deallocate((String *)&local_10);
  }
  if ((param_2 < 0x60) || (param_3 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"CvSeq* cvCreateSeq(int, size_t, size_t, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x17a);
    cv::String::deallocate((String *)&local_10);
  }
  __s = (uint *)cvMemStorageAlloc(param_4,param_2);
  memset(__s,0,param_2);
  __s[1] = (uint)param_2;
  *__s = param_1 & 0xffff | 0x42990000;
  if ((((param_1 & 0xfff) != 7) && ((param_1 & 0xfff) != 0)) &&
     ((uint)param_3 !=
      (param_1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((param_1 & 7) << 1)) & 3))) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_10,0x6e);
    memcpy(__dest,&DAT_004642c8,0x6e);
    cv::error(-0xc9,(String *)&local_10,"CvSeq* cvCreateSeq(int, size_t, size_t, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x18a);
    cv::String::deallocate((String *)&local_10);
  }
  __s[0xb] = (uint)param_3;
  *(long *)(__s + 0x12) = param_4;
  uVar1 = 0;
  if (param_3 != 0) {
    uVar1 = 0x400 / param_3;
  }
  cvSetSeqBlockSize(__s,uVar1);
  return __s;
}


==================================================================

### FUNC 00294674 (1028 bytes) name=FUN_00294674

void FUN_00294674(long param_1)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  int iVar8;
  long *plVar9;
  char *pcVar10;
  int iVar11;
  long *plVar12;
  long lVar13;
  int iVar14;
  long lVar15;
  int iVar16;
  long lVar17;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x27c);
    cv::String::deallocate((String *)&local_10);
  }
  plVar12 = *(long **)(param_1 + 0x50);
  if (plVar12 != (long *)0x0) {
    *(long *)(param_1 + 0x50) = plVar12[1];
    plVar9 = *(long **)(param_1 + 0x58);
    goto joined_r0x002947e8;
  }
  iVar8 = *(int *)(param_1 + 0x40);
  iVar2 = *(int *)(param_1 + 0x2c);
  lVar13 = *(long *)(param_1 + 0x48);
  if (iVar8 * 4 <= *(int *)(param_1 + 0x28)) {
    cvSetSeqBlockSize(param_1,iVar8 << 1);
  }
  if (lVar13 == 0) {
    local_10 = lVar13;
    local_8 = lVar13;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x25);
    cVar7 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
    uVar6 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
    uVar5 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
    uVar4 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
    uVar3 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
    pcVar10[0x24] = cVar7;
    *(undefined8 *)pcVar10 = uVar3;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    *(undefined8 *)(pcVar10 + 0x10) = uVar5;
    *(undefined8 *)(pcVar10 + 0x18) = uVar6;
    cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
    cv::String::deallocate((String *)&local_10);
  }
  iVar14 = *(int *)(lVar13 + 0x20);
  lVar15 = *(long *)(lVar13 + 0x10);
  iVar1 = *(int *)(lVar13 + 0x24);
  if (((ulong)((lVar15 + ((long)iVar14 - (long)iVar1)) - *(long *)(param_1 + 0x30)) < 8) &&
     (*(int *)(param_1 + 0x2c) <= iVar1)) {
    iVar16 = 0;
    if (iVar2 != 0) {
      iVar16 = iVar1 / iVar2;
    }
    if (iVar8 < iVar16) {
      iVar16 = iVar8;
    }
    lVar17 = *(long *)(param_1 + 0x30) + (long)(iVar2 * iVar16);
    *(long *)(param_1 + 0x30) = lVar17;
    *(uint *)(lVar13 + 0x24) = ((int)lVar15 + iVar14) - (int)lVar17 & 0xfffffff8;
    return;
  }
  iVar16 = iVar2 * iVar8 + 0x20;
  if (iVar1 < iVar16) {
    iVar11 = 1;
    if (5 < iVar8) {
      iVar11 = iVar8 / 3;
    }
    if (iVar1 < iVar2 * iVar11 + 0x28) {
      if ((lVar15 == 0) || (plVar12 = *(long **)(lVar15 + 8), plVar12 == (long *)0x0)) {
        lVar15 = *(long *)(lVar13 + 0x18);
        if (lVar15 == 0) {
          plVar12 = (long *)cv::cvAlloc((long)iVar14);
        }
        else {
          cvSaveMemStoragePos(lVar15,auStack_20);
          if ((*(long *)(lVar15 + 0x10) == 0) ||
             (plVar9 = *(long **)(*(long *)(lVar15 + 0x10) + 8), plVar9 == (long *)0x0)) {
            lVar17 = *(long *)(lVar15 + 0x18);
            if (lVar17 == 0) {
              plVar12 = (long *)cv::cvAlloc((long)*(int *)(lVar15 + 0x20));
            }
            else {
              cvSaveMemStoragePos(lVar17,&local_10);
              FUN_00293a80(lVar17);
              plVar12 = *(long **)(lVar17 + 0x10);
              cvRestoreMemStoragePos(lVar17,&local_10);
              plVar9 = *(long **)(lVar17 + 0x10);
              if (plVar12 == plVar9) {
                *(undefined8 *)(lVar17 + 8) = 0;
                *(undefined8 *)(lVar17 + 0x10) = 0;
                *(undefined4 *)(lVar17 + 0x24) = 0;
              }
              else {
                plVar9[1] = plVar12[1];
                if ((undefined8 *)plVar12[1] != (undefined8 *)0x0) {
                  *(undefined8 *)plVar12[1] = plVar9;
                }
              }
            }
            plVar9 = *(long **)(lVar15 + 0x10);
            *plVar12 = (long)plVar9;
            plVar12[1] = 0;
            if (plVar9 == (long *)0x0) {
              *(long **)(lVar15 + 8) = plVar12;
              *(long **)(lVar15 + 0x10) = plVar12;
            }
            else {
              plVar9[1] = (long)plVar12;
              plVar12 = plVar9;
            }
            plVar9 = (long *)plVar12[1];
            if (plVar9 != (long *)0x0) goto LAB_002948d8;
          }
          else {
LAB_002948d8:
            *(long **)(lVar15 + 0x10) = plVar9;
            plVar12 = plVar9;
          }
          *(int *)(lVar15 + 0x24) = *(int *)(lVar15 + 0x20) + -0x10;
          cvRestoreMemStoragePos(lVar15,auStack_20);
          plVar9 = *(long **)(lVar15 + 0x10);
          if (plVar9 == plVar12) {
            *(undefined8 *)(lVar15 + 8) = 0;
            *(undefined8 *)(lVar15 + 0x10) = 0;
            *(undefined4 *)(lVar15 + 0x24) = 0;
          }
          else {
            plVar9[1] = plVar12[1];
            if ((long *)plVar12[1] != (long *)0x0) {
              *(long *)plVar12[1] = (long)plVar9;
            }
          }
        }
        lVar15 = *(long *)(lVar13 + 0x10);
        *plVar12 = lVar15;
        plVar12[1] = 0;
        if (lVar15 != 0) {
          *(long **)(lVar15 + 8) = plVar12;
          iVar14 = *(int *)(lVar13 + 0x20);
          goto LAB_002948a0;
        }
        *(long **)(lVar13 + 8) = plVar12;
        *(long **)(lVar13 + 0x10) = plVar12;
        iVar14 = *(int *)(lVar13 + 0x20);
      }
      else {
LAB_002948a0:
        *(long **)(lVar13 + 0x10) = plVar12;
      }
      *(int *)(lVar13 + 0x24) = iVar14 + -0x10;
    }
    else {
      iVar8 = *(int *)(param_1 + 0x2c);
      iVar2 = 0;
      if (iVar8 != 0) {
        iVar2 = (iVar1 + -0x20) / iVar8;
      }
      iVar16 = iVar8 * iVar2 + 0x20;
    }
  }
  plVar12 = (long *)cvMemStorageAlloc(lVar13,(long)iVar16);
  plVar12[3] = (long)plVar12 + 0x27U & 0xfffffffffffffff8;
  plVar9 = *(long **)(param_1 + 0x58);
  *(int *)((long)plVar12 + 0x14) = iVar16 + -0x20;
  plVar12[1] = 0;
  *plVar12 = 0;
joined_r0x002947e8:
  if (plVar9 == (long *)0x0) {
    lVar13 = plVar12[3];
    iVar8 = 0;
    *(long **)(param_1 + 0x58) = plVar12;
    iVar2 = *(int *)((long)plVar12 + 0x14);
    plVar12[1] = (long)plVar12;
    *plVar12 = (long)plVar12;
    *(long *)(param_1 + 0x38) = lVar13;
    *(long *)(param_1 + 0x30) = lVar13 + iVar2;
  }
  else {
    lVar15 = *plVar9;
    iVar8 = 0;
    *plVar12 = lVar15;
    plVar12[1] = (long)plVar9;
    *plVar9 = (long)plVar12;
    lVar13 = plVar12[3];
    plVar9 = (long *)*plVar12;
    iVar2 = *(int *)((long)plVar12 + 0x14);
    *(long **)(lVar15 + 8) = plVar12;
    *(long *)(param_1 + 0x38) = lVar13;
    *(long *)(param_1 + 0x30) = lVar13 + iVar2;
    if (plVar12 != plVar9) {
      iVar8 = (int)plVar9[2] + *(int *)((long)plVar9 + 0x14);
    }
  }
  *(int *)(plVar12 + 2) = iVar8;
  *(undefined4 *)((long)plVar12 + 0x14) = 0;
  return;
}


==================================================================

### FUNC 00294aa0 (180 bytes) name=cvGetSeqElem

long cvGetSeqElem(long param_1,uint param_2)

{
  uint uVar1;
  long *plVar2;
  int iVar3;
  uint uVar4;
  
  uVar4 = *(uint *)(param_1 + 0x28);
  if (uVar4 <= param_2) {
    if ((int)param_2 < 0) {
      uVar1 = uVar4;
      if ((int)(param_2 + uVar4) < (int)uVar4) {
        uVar1 = 0;
      }
      param_2 = (param_2 + uVar4) - uVar1;
    }
    else {
      if ((int)param_2 < (int)uVar4) {
        return 0;
      }
      param_2 = param_2 - uVar4;
    }
    if (uVar4 <= param_2) {
      return 0;
    }
  }
  plVar2 = *(long **)(param_1 + 0x58);
  if ((int)uVar4 < (int)(param_2 * 2)) {
    do {
      plVar2 = (long *)*plVar2;
      uVar4 = uVar4 - *(int *)((long)plVar2 + 0x14);
    } while ((int)param_2 < (int)uVar4);
    param_2 = param_2 - uVar4;
  }
  else {
    iVar3 = *(int *)((long)plVar2 + 0x14);
    if (iVar3 <= (int)param_2) {
      do {
        plVar2 = (long *)plVar2[1];
        param_2 = param_2 - iVar3;
        iVar3 = *(int *)((long)plVar2 + 0x14);
      } while (iVar3 <= (int)param_2);
      return plVar2[3] + (long)(int)(param_2 * *(int *)(param_1 + 0x2c));
    }
  }
  return plVar2[3] + (long)(int)(param_2 * *(int *)(param_1 + 0x2c));
}


==================================================================

### FUNC 00294b54 (280 bytes) name=cvSeqElemIdx

int cvSeqElemIdx(long param_1,long param_2,long *param_3)

{
  int iVar1;
  long lVar2;
  int iVar3;
  ulong uVar4;
  long lVar5;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_2 == 0) || (param_1 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvSeqElemIdx(const CvSeq*, const void*, CvSeqBlock**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x1e9);
    cv::String::deallocate((String *)&local_10);
  }
  lVar5 = *(long *)(param_1 + 0x58);
  iVar1 = *(int *)(param_1 + 0x2c);
  lVar2 = lVar5;
  do {
    uVar4 = param_2 - *(long *)(lVar2 + 0x18);
    if ((uint)uVar4 < (uint)(iVar1 * *(int *)(lVar2 + 0x14))) {
      if (param_3 != (long *)0x0) {
        *param_3 = lVar2;
        lVar5 = *(long *)(param_1 + 0x58);
        uVar4 = param_2 - *(long *)(lVar2 + 0x18);
      }
      if ((iVar1 < 0x21) && (-1 < (char)(&DAT_00464c90)[iVar1 + -1])) {
        iVar3 = (int)(uVar4 >> ((long)(char)(&DAT_00464c90)[iVar1 + -1] & 0x3fU));
      }
      else {
        iVar3 = 0;
        if ((long)iVar1 != 0) {
          iVar3 = (int)(uVar4 / (ulong)(long)iVar1);
        }
      }
      return (*(int *)(lVar2 + 0x10) - *(int *)(lVar5 + 0x10)) + iVar3;
    }
    lVar2 = *(long *)(lVar2 + 8);
  } while (lVar2 != lVar5);
  return -1;
}


==================================================================

### FUNC 00294c80 (76 bytes) name=cvSliceLength

int cvSliceLength(undefined8 param_1,long param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  iVar2 = *(int *)(param_2 + 0x28);
  iVar3 = (int)param_1;
  iVar5 = (int)((ulong)param_1 >> 0x20);
  iVar4 = 0;
  if (iVar3 != iVar5) {
    iVar1 = iVar2 + iVar3;
    if (-1 < iVar3) {
      iVar1 = iVar3;
    }
    iVar4 = iVar5 + iVar2;
    if (0 < iVar5) {
      iVar4 = iVar5;
    }
    for (iVar4 = iVar4 - iVar1; iVar4 < 0; iVar4 = iVar4 + iVar2) {
    }
  }
  if (iVar2 < iVar4) {
    iVar4 = iVar2;
  }
  return iVar4;
}


==================================================================

### FUNC 00294ccc (492 bytes) name=cvMakeSeqHeaderForArray

uint * cvMakeSeqHeaderForArray
                 (uint param_1,uint param_2,uint param_3,long param_4,uint param_5,uint *param_6,
                 long param_7)

{
  long lVar1;
  void *__dest;
  undefined8 local_10;
  undefined8 local_8;
  
  if (((int)param_2 < 0x60 || (int)param_5 < 0) || ((int)param_3 < 1)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,
              "CvSeq* cvMakeSeqHeaderForArray(int, int, int, void*, int, CvSeq*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x24d);
    cv::String::deallocate((String *)&local_10);
  }
  if ((param_6 == (uint *)0x0) || ((0 < (int)param_5 && (param_4 == 0 || param_7 == 0)))) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "CvSeq* cvMakeSeqHeaderForArray(int, int, int, void*, int, CvSeq*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x250);
    cv::String::deallocate((String *)&local_10);
  }
  memset(param_6,0,(long)(int)param_2);
  param_6[1] = param_2;
  *param_6 = param_1 & 0xffff | 0x42990000;
  if ((param_3 != (param_1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((param_1 & 7) << 1)) & 3)
      ) && ((param_1 & 0xfff) != 0)) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_10,0x6a);
    memcpy(__dest,
           "Element size doesn\'t match to the size of predefined element type (try to use 0 for sequence element type)"
           ,0x6a);
    cv::error(-0xc9,(String *)&local_10,
              "CvSeq* cvMakeSeqHeaderForArray(int, int, int, void*, int, CvSeq*, CvSeqBlock*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x25e);
    cv::String::deallocate((String *)&local_10);
  }
  lVar1 = param_4 + (int)(param_5 * param_3);
  param_6[0xb] = param_3;
  param_6[10] = param_5;
  *(long *)(param_6 + 0xe) = lVar1;
  *(long *)(param_6 + 0xc) = lVar1;
  if (0 < (int)param_5) {
    *(long *)(param_6 + 0x16) = param_7;
    *(long *)(param_7 + 8) = param_7;
    *(long *)param_7 = param_7;
    *(undefined4 *)(param_7 + 0x10) = 0;
    *(uint *)(param_7 + 0x14) = param_5;
    *(long *)(param_7 + 0x18) = param_4;
  }
  return param_6;
}


==================================================================

### FUNC 00294ef4 (168 bytes) name=cvStartAppendToSeq

void cvStartAppendToSeq(long param_1,undefined8 *param_2)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == (undefined8 *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvStartAppendToSeq(CvSeq*, CvSeqWriter*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x333);
    cv::String::deallocate((String *)&local_10);
  }
  *param_2 = 0;
  param_2[1] = 0;
  param_2[2] = 0;
  param_2[3] = 0;
  param_2[4] = 0;
  param_2[5] = 0;
  *(undefined4 *)param_2 = 0x30;
  puVar1 = *(undefined8 **)(param_1 + 0x58);
  param_2[1] = param_1;
  uVar2 = 0;
  if (puVar1 != (undefined8 *)0x0) {
    uVar2 = *puVar1;
  }
  uVar3 = *(undefined8 *)(param_1 + 0x38);
  param_2[5] = *(undefined8 *)(param_1 + 0x30);
  param_2[2] = uVar2;
  param_2[3] = uVar3;
  return;
}


==================================================================

### FUNC 00294fb0 (168 bytes) name=cvStartWriteSeq

void cvStartWriteSeq(undefined4 param_1,int param_2,int param_3,long param_4,long param_5)

{
  undefined8 uVar1;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_4 == 0) || (param_5 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "void cvStartWriteSeq(int, int, int, CvMemStorage*, CvSeqWriter*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x345);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = cvCreateSeq(param_1,(long)param_2,(long)param_3,param_4);
  cvStartAppendToSeq(uVar1,param_5);
  return;
}


==================================================================

### FUNC 0029506c (180 bytes) name=cvFlushSeqWriter

void cvFlushSeqWriter(long param_1)

{
  int *piVar1;
  undefined4 uVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvFlushSeqWriter(CvSeqWriter*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x351);
    cv::String::deallocate((String *)&local_10);
  }
  lVar6 = *(long *)(param_1 + 8);
  lVar4 = *(long *)(param_1 + 0x18);
  lVar7 = *(long *)(param_1 + 0x10);
  *(long *)(lVar6 + 0x38) = lVar4;
  if (lVar7 != 0) {
    iVar3 = 0;
    lVar5 = *(long *)(lVar6 + 0x58);
    uVar2 = 0;
    if ((long)*(int *)(lVar6 + 0x2c) != 0) {
      uVar2 = (undefined4)((lVar4 - *(long *)(lVar7 + 0x18)) / (long)*(int *)(lVar6 + 0x2c));
    }
    *(undefined4 *)(lVar7 + 0x14) = uVar2;
    lVar4 = lVar5;
    do {
      piVar1 = (int *)(lVar4 + 0x14);
      lVar4 = *(long *)(lVar4 + 8);
      iVar3 = iVar3 + *piVar1;
    } while (lVar4 != lVar5);
    *(int *)(lVar6 + 0x28) = iVar3;
  }
  return;
}


==================================================================

### FUNC 00295134 (192 bytes) name=cvEndWriteSeq

void cvEndWriteSeq(long param_1)

{
  int iVar1;
  long lVar2;
  undefined8 uVar3;
  long lVar4;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvSeq* cvEndWriteSeq(CvSeqWriter*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x370);
    cv::String::deallocate((String *)&local_10);
  }
  cvFlushSeqWriter(param_1);
  lVar2 = *(long *)(param_1 + 8);
  if (((*(long *)(param_1 + 0x10) != 0) && (lVar4 = *(long *)(lVar2 + 0x48), lVar4 != 0)) &&
     (iVar1 = (int)*(undefined8 *)(lVar4 + 0x10) + *(int *)(lVar4 + 0x20),
     (uint)((iVar1 - *(int *)(lVar4 + 0x24)) - (int)*(undefined8 *)(lVar2 + 0x30)) < 8)) {
    uVar3 = *(undefined8 *)(lVar2 + 0x38);
    *(uint *)(lVar4 + 0x24) = iVar1 - (int)uVar3 & 0xfffffff8;
    *(undefined8 *)(lVar2 + 0x30) = uVar3;
  }
  *(undefined8 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 00295208 (1140 bytes) name=cvCreateSeqBlock

void cvCreateSeqBlock(long param_1)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  int iVar8;
  long *plVar9;
  long lVar10;
  char *pcVar11;
  int iVar12;
  long lVar13;
  long *plVar14;
  long lVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  int iVar19;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if ((param_1 == 0) || (lVar18 = *(long *)(param_1 + 8), lVar18 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvCreateSeqBlock(CvSeqWriter*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x38f);
    cv::String::deallocate((String *)&local_10);
    lVar18 = *(long *)(param_1 + 8);
    cvFlushSeqWriter(param_1);
    if (lVar18 == 0) {
      local_10 = lVar18;
      local_8 = lVar18;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x27c);
      cv::String::deallocate((String *)&local_10);
    }
  }
  else {
    cvFlushSeqWriter();
  }
  plVar14 = *(long **)(lVar18 + 0x50);
  if (plVar14 == (long *)0x0) {
    iVar8 = *(int *)(lVar18 + 0x40);
    iVar2 = *(int *)(lVar18 + 0x2c);
    lVar17 = *(long *)(lVar18 + 0x48);
    if (iVar8 * 4 <= *(int *)(lVar18 + 0x28)) {
      cvSetSeqBlockSize(lVar18,iVar8 << 1);
    }
    if (lVar17 == 0) {
      local_10 = lVar17;
      local_8 = lVar17;
      pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x25);
      cVar7 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
      uVar6 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
      uVar5 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
      uVar4 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
      uVar3 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
      *(undefined4 *)(pcVar11 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
      pcVar11[0x24] = cVar7;
      *(undefined8 *)pcVar11 = uVar3;
      *(undefined8 *)(pcVar11 + 8) = uVar4;
      *(undefined8 *)(pcVar11 + 0x10) = uVar5;
      *(undefined8 *)(pcVar11 + 0x18) = uVar6;
      cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
      cv::String::deallocate((String *)&local_10);
    }
    iVar16 = *(int *)(lVar17 + 0x20);
    lVar10 = *(long *)(lVar17 + 0x10);
    iVar1 = *(int *)(lVar17 + 0x24);
    if (((ulong)((lVar10 + ((long)iVar16 - (long)iVar1)) - *(long *)(lVar18 + 0x30)) < 8) &&
       (*(int *)(lVar18 + 0x2c) <= iVar1)) {
      iVar19 = 0;
      if (iVar2 != 0) {
        iVar19 = iVar1 / iVar2;
      }
      lVar15 = *(long *)(lVar18 + 0x38);
      if (iVar8 < iVar19) {
        iVar19 = iVar8;
      }
      plVar14 = (long *)**(undefined8 **)(lVar18 + 0x58);
      lVar13 = *(long *)(lVar18 + 0x30) + (long)(iVar2 * iVar19);
      *(long *)(lVar18 + 0x30) = lVar13;
      *(uint *)(lVar17 + 0x24) = ((int)lVar10 + iVar16) - (int)lVar13 & 0xfffffff8;
      goto LAB_0029529c;
    }
    iVar19 = iVar2 * iVar8 + 0x20;
    if (iVar1 < iVar19) {
      iVar12 = 1;
      if (5 < iVar8) {
        iVar12 = iVar8 / 3;
      }
      if (iVar1 < iVar2 * iVar12 + 0x28) {
        if ((lVar10 == 0) || (plVar14 = *(long **)(lVar10 + 8), plVar14 == (long *)0x0)) {
          lVar10 = *(long *)(lVar17 + 0x18);
          if (lVar10 == 0) {
            plVar14 = (long *)cv::cvAlloc((long)iVar16);
          }
          else {
            cvSaveMemStoragePos(lVar10,auStack_20);
            if ((*(long *)(lVar10 + 0x10) == 0) ||
               (plVar9 = *(long **)(*(long *)(lVar10 + 0x10) + 8), plVar9 == (long *)0x0)) {
              lVar15 = *(long *)(lVar10 + 0x18);
              if (lVar15 == 0) {
                plVar14 = (long *)cv::cvAlloc((long)*(int *)(lVar10 + 0x20));
              }
              else {
                cvSaveMemStoragePos(lVar15,&local_10);
                FUN_00293a80(lVar15);
                plVar14 = *(long **)(lVar15 + 0x10);
                cvRestoreMemStoragePos(lVar15,&local_10);
                plVar9 = *(long **)(lVar15 + 0x10);
                if (plVar14 == plVar9) {
                  *(undefined8 *)(lVar15 + 8) = 0;
                  *(undefined8 *)(lVar15 + 0x10) = 0;
                  *(undefined4 *)(lVar15 + 0x24) = 0;
                }
                else {
                  plVar9[1] = plVar14[1];
                  if ((undefined8 *)plVar14[1] != (undefined8 *)0x0) {
                    *(undefined8 *)plVar14[1] = plVar9;
                  }
                }
              }
              plVar9 = *(long **)(lVar10 + 0x10);
              *plVar14 = (long)plVar9;
              plVar14[1] = 0;
              if (plVar9 == (long *)0x0) {
                *(long **)(lVar10 + 8) = plVar14;
                *(long **)(lVar10 + 0x10) = plVar14;
              }
              else {
                plVar9[1] = (long)plVar14;
                plVar14 = plVar9;
              }
              plVar9 = (long *)plVar14[1];
              if (plVar9 != (long *)0x0) goto LAB_002954dc;
            }
            else {
LAB_002954dc:
              *(long **)(lVar10 + 0x10) = plVar9;
              plVar14 = plVar9;
            }
            *(int *)(lVar10 + 0x24) = *(int *)(lVar10 + 0x20) + -0x10;
            cvRestoreMemStoragePos(lVar10,auStack_20);
            plVar9 = *(long **)(lVar10 + 0x10);
            if (plVar9 == plVar14) {
              *(undefined8 *)(lVar10 + 8) = 0;
              *(undefined8 *)(lVar10 + 0x10) = 0;
              *(undefined4 *)(lVar10 + 0x24) = 0;
            }
            else {
              plVar9[1] = plVar14[1];
              if ((long *)plVar14[1] != (long *)0x0) {
                *(long *)plVar14[1] = (long)plVar9;
              }
            }
          }
          lVar10 = *(long *)(lVar17 + 0x10);
          *plVar14 = lVar10;
          plVar14[1] = 0;
          if (lVar10 != 0) {
            *(long **)(lVar10 + 8) = plVar14;
            iVar16 = *(int *)(lVar17 + 0x20);
            goto LAB_002954a4;
          }
          *(long **)(lVar17 + 8) = plVar14;
          *(long **)(lVar17 + 0x10) = plVar14;
          iVar16 = *(int *)(lVar17 + 0x20);
        }
        else {
LAB_002954a4:
          *(long **)(lVar17 + 0x10) = plVar14;
        }
        *(int *)(lVar17 + 0x24) = iVar16 + -0x10;
      }
      else {
        iVar8 = *(int *)(lVar18 + 0x2c);
        iVar2 = 0;
        if (iVar8 != 0) {
          iVar2 = (iVar1 + -0x20) / iVar8;
        }
        iVar19 = iVar8 * iVar2 + 0x20;
      }
    }
    plVar14 = (long *)cvMemStorageAlloc(lVar17,(long)iVar19);
    plVar14[3] = (long)plVar14 + 0x27U & 0xfffffffffffffff8;
    plVar9 = *(long **)(lVar18 + 0x58);
    *(int *)((long)plVar14 + 0x14) = iVar19 + -0x20;
    plVar14[1] = 0;
    *plVar14 = 0;
    if (plVar9 != (long *)0x0) goto LAB_0029524c;
LAB_00295428:
    lVar15 = plVar14[3];
    iVar8 = 0;
    iVar2 = *(int *)((long)plVar14 + 0x14);
    *(long **)(lVar18 + 0x58) = plVar14;
    plVar14[1] = (long)plVar14;
    lVar13 = lVar15 + iVar2;
    *plVar14 = (long)plVar14;
    *(long *)(lVar18 + 0x38) = lVar15;
    *(long *)(lVar18 + 0x30) = lVar13;
  }
  else {
    *(long *)(lVar18 + 0x50) = plVar14[1];
    plVar9 = *(long **)(lVar18 + 0x58);
    if (plVar9 == (long *)0x0) goto LAB_00295428;
LAB_0029524c:
    lVar17 = *plVar9;
    iVar8 = 0;
    *plVar14 = lVar17;
    plVar14[1] = (long)plVar9;
    *plVar9 = (long)plVar14;
    lVar15 = plVar14[3];
    plVar9 = (long *)*plVar14;
    iVar2 = *(int *)((long)plVar14 + 0x14);
    *(long **)(lVar17 + 8) = plVar14;
    lVar13 = lVar15 + iVar2;
    *(long *)(lVar18 + 0x38) = lVar15;
    *(long *)(lVar18 + 0x30) = lVar13;
    if (plVar14 != plVar9) {
      iVar8 = (int)plVar9[2] + *(int *)((long)plVar9 + 0x14);
    }
  }
  *(int *)(plVar14 + 2) = iVar8;
  *(undefined4 *)((long)plVar14 + 0x14) = 0;
LAB_0029529c:
  *(long **)(param_1 + 0x10) = plVar14;
  *(long *)(param_1 + 0x18) = lVar15;
  *(long *)(param_1 + 0x28) = lVar13;
  return;
}


==================================================================

### FUNC 002956b8 (320 bytes) name=cvStartReadSeq

void cvStartReadSeq(long param_1,undefined4 *param_2,int param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  long *plVar5;
  long lVar6;
  int iVar7;
  long lVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_2 != (undefined4 *)0x0) {
    *(undefined8 *)(param_2 + 2) = 0;
    *(undefined8 *)(param_2 + 4) = 0;
    *(undefined8 *)(param_2 + 8) = 0;
    *(undefined8 *)(param_2 + 10) = 0;
    *(undefined8 *)(param_2 + 6) = 0;
    if (param_1 != 0) {
      plVar4 = *(long **)(param_1 + 0x58);
      *(long *)(param_2 + 2) = param_1;
      *param_2 = 0x40;
      goto joined_r0x002957c8;
    }
  }
  local_10 = 0;
  local_8 = 0;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0x1b,(String *)&local_10,"void cvStartReadSeq(const CvSeq*, CvSeqReader*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x3b0);
  cv::String::deallocate((String *)&local_10);
  plVar4 = *(long **)(param_1 + 0x58);
  *(long *)(param_2 + 2) = param_1;
  *param_2 = 0x40;
joined_r0x002957c8:
  if (plVar4 != (long *)0x0) {
    plVar5 = (long *)*plVar4;
    iVar2 = *(int *)(param_1 + 0x2c);
    lVar6 = plVar4[3];
    iVar7 = *(int *)((long)plVar5 + 0x14);
    lVar3 = plVar4[2];
    lVar8 = plVar5[3];
    *(long *)(param_2 + 6) = lVar6;
    lVar1 = lVar8 + (iVar7 + -1) * iVar2;
    param_2[0xc] = (int)lVar3;
    *(long *)(param_2 + 0xe) = lVar1;
    if (param_3 == 0) {
      iVar7 = *(int *)((long)plVar4 + 0x14);
      plVar5 = plVar4;
      lVar8 = lVar6;
    }
    else {
      *(long *)(param_2 + 0xe) = lVar6;
      *(long *)(param_2 + 6) = lVar1;
    }
    *(long **)(param_2 + 4) = plVar5;
    *(long *)(param_2 + 8) = lVar8;
    *(long *)(param_2 + 10) = lVar8 + iVar2 * iVar7;
    return;
  }
  param_2[0xc] = 0;
  *(undefined8 *)(param_2 + 4) = 0;
  *(undefined8 *)(param_2 + 10) = 0;
  *(undefined8 *)(param_2 + 8) = 0;
  *(undefined8 *)(param_2 + 0xe) = 0;
  *(undefined8 *)(param_2 + 6) = 0;
  return;
}


==================================================================

### FUNC 0029580c (200 bytes) name=cvChangeSeqBlock

void cvChangeSeqBlock(long param_1,int param_2)

{
  int iVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  int iVar5;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvChangeSeqBlock(void*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x3e2);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 < 1) {
    lVar3 = **(long **)(param_1 + 0x10);
    iVar1 = *(int *)(*(long *)(param_1 + 8) + 0x2c);
    iVar5 = *(int *)(lVar3 + 0x14);
    lVar4 = *(long *)(lVar3 + 0x18);
    lVar2 = lVar4 + (iVar5 + -1) * iVar1;
  }
  else {
    lVar3 = (*(long **)(param_1 + 0x10))[1];
    iVar1 = *(int *)(*(long *)(param_1 + 8) + 0x2c);
    lVar2 = *(long *)(lVar3 + 0x18);
    iVar5 = *(int *)(lVar3 + 0x14);
    lVar4 = lVar2;
  }
  *(long *)(param_1 + 0x18) = lVar2;
  *(long *)(param_1 + 0x10) = lVar3;
  *(long *)(param_1 + 0x20) = lVar4;
  *(long *)(param_1 + 0x28) = lVar4 + iVar1 * iVar5;
  return;
}


==================================================================

### FUNC 002958e8 (204 bytes) name=cvGetSeqReaderPos

int cvGetSeqReaderPos(long param_1)

{
  int iVar1;
  int iVar2;
  long lVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (lVar3 = *(long *)(param_1 + 0x18), lVar3 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvGetSeqReaderPos(CvSeqReader*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x3fb);
    cv::String::deallocate((String *)&local_10);
    lVar3 = *(long *)(param_1 + 0x18);
  }
  iVar1 = *(int *)(*(long *)(param_1 + 8) + 0x2c);
  if ((iVar1 < 0x21) && (-1 < (char)(&DAT_00464c90)[iVar1 + -1])) {
    iVar2 = (int)(lVar3 - *(long *)(param_1 + 0x20) >>
                 ((long)(char)(&DAT_00464c90)[iVar1 + -1] & 0x3fU));
  }
  else {
    iVar2 = 0;
    if ((long)iVar1 != 0) {
      iVar2 = (int)((lVar3 - *(long *)(param_1 + 0x20)) / (long)iVar1);
    }
  }
  return (*(int *)(*(long *)(param_1 + 0x10) + 0x10) - *(int *)(param_1 + 0x30)) + iVar2;
}


==================================================================

### FUNC 002959c8 (680 bytes) name=cvSetSeqReaderPos

void cvSetSeqReaderPos(long param_1,int param_2,int param_3)

{
  int iVar1;
  int iVar2;
  long lVar3;
  ulong uVar4;
  long *plVar5;
  ulong uVar6;
  int iVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (lVar3 = *(long *)(param_1 + 8), lVar3 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSetSeqReaderPos(CvSeqReader*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x414);
    cv::String::deallocate((String *)&local_10);
    lVar3 = *(long *)(param_1 + 8);
  }
  iVar7 = *(int *)(lVar3 + 0x28);
  iVar1 = *(int *)(lVar3 + 0x2c);
  if (param_3 == 0) {
    if (param_2 < 0) {
      if (param_2 < -iVar7) {
        local_10 = 0;
        local_8 = 0;
        cv::String::allocate((String *)&local_10,0);
        cv::error(-0xd3,(String *)&local_10,"void cvSetSeqReaderPos(CvSeqReader*, int, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x41e);
        param_2 = param_2 + iVar7;
        cv::String::deallocate((String *)&local_10);
        lVar3 = *(long *)(param_1 + 8);
      }
      else {
        param_2 = param_2 + iVar7;
      }
    }
    else if ((iVar7 <= param_2) && (param_2 = param_2 - iVar7, iVar7 <= param_2)) {
      local_10 = 0;
      local_8 = 0;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0xd3,(String *)&local_10,"void cvSetSeqReaderPos(CvSeqReader*, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x425);
      cv::String::deallocate((String *)&local_10);
      lVar3 = *(long *)(param_1 + 8);
    }
    plVar5 = *(long **)(lVar3 + 0x58);
    iVar2 = *(int *)((long)plVar5 + 0x14);
    if (iVar2 <= param_2) {
      if (iVar7 < param_2 * 2) {
        do {
          plVar5 = (long *)*plVar5;
          iVar2 = *(int *)((long)plVar5 + 0x14);
          iVar7 = iVar7 - iVar2;
        } while (param_2 < iVar7);
        param_2 = param_2 - iVar7;
      }
      else {
        do {
          plVar5 = (long *)plVar5[1];
          param_2 = param_2 - iVar2;
          iVar2 = *(int *)((long)plVar5 + 0x14);
        } while (iVar2 <= param_2);
      }
    }
    lVar3 = plVar5[3];
    *(long *)(param_1 + 0x18) = lVar3 + param_2 * iVar1;
    if (*(long **)(param_1 + 0x10) != plVar5) {
      *(long **)(param_1 + 0x10) = plVar5;
      *(long *)(param_1 + 0x20) = lVar3;
      *(long *)(param_1 + 0x28) = lVar3 + iVar1 * iVar2;
      return;
    }
  }
  else {
    param_2 = param_2 * iVar1;
    lVar3 = *(long *)(param_1 + 0x18);
    plVar5 = *(long **)(param_1 + 0x10);
    if (param_2 < 1) {
      uVar6 = *(ulong *)(param_1 + 0x20);
      uVar4 = lVar3 + param_2;
      if (uVar4 < uVar6) {
        do {
          plVar5 = (long *)*plVar5;
          param_2 = param_2 + ((int)lVar3 - (int)uVar6);
          uVar6 = plVar5[3];
          lVar3 = uVar6 + (long)(iVar1 * *(int *)((long)plVar5 + 0x14));
          uVar4 = lVar3 + param_2;
        } while (uVar4 < uVar6);
        *(long **)(param_1 + 0x10) = plVar5;
        *(ulong *)(param_1 + 0x20) = uVar6;
        *(long *)(param_1 + 0x28) = lVar3;
      }
      *(ulong *)(param_1 + 0x18) = uVar4;
      return;
    }
    uVar6 = *(ulong *)(param_1 + 0x28);
    uVar4 = lVar3 + param_2;
    if (uVar6 <= uVar4) {
      do {
        plVar5 = (long *)plVar5[1];
        param_2 = param_2 - ((int)uVar6 - (int)lVar3);
        lVar3 = plVar5[3];
        uVar4 = lVar3 + param_2;
        uVar6 = lVar3 + iVar1 * *(int *)((long)plVar5 + 0x14);
      } while (uVar6 <= uVar4);
      *(long **)(param_1 + 0x10) = plVar5;
      *(long *)(param_1 + 0x20) = lVar3;
      *(ulong *)(param_1 + 0x28) = uVar6;
    }
    *(ulong *)(param_1 + 0x18) = uVar4;
  }
  return;
}


==================================================================

### FUNC 00295cac (332 bytes) name=cvCvtSeqToArray

void * cvCvtSeqToArray(long param_1,void *param_2,ulong param_3)

{
  int iVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  void *__dest;
  undefined8 local_40;
  undefined8 local_38;
  long local_30;
  void *local_28;
  long local_18;
  
  if ((param_2 == (void *)0x0) || (param_1 == 0)) {
    local_40 = 0;
    local_38 = 0;
    cv::String::allocate((String *)&local_40,0);
    cv::error(-0x1b,(String *)&local_40,"void* cvCvtSeqToArray(const CvSeq*, void*, CvSlice)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x226);
    cv::String::deallocate((String *)&local_40);
    iVar1 = *(int *)(param_1 + 0x2c);
    iVar3 = cvSliceLength(param_3,param_1);
    iVar3 = iVar1 * iVar3;
  }
  else {
    iVar1 = *(int *)(param_1 + 0x2c);
    iVar3 = cvSliceLength(param_3,param_1);
    iVar3 = iVar1 * iVar3;
  }
  if (iVar3 != 0) {
    cvStartReadSeq(param_1,&local_40,0);
    cvSetSeqReaderPos(&local_40,param_3 & 0xffffffff,0);
    __dest = param_2;
    do {
      lVar2 = local_30;
      iVar4 = (int)local_18 - (int)local_28;
      if (iVar3 < iVar4) {
        iVar4 = iVar3;
      }
      iVar3 = iVar3 - iVar4;
      memcpy(__dest,local_28,(long)iVar4);
      local_30 = *(long *)(lVar2 + 8);
      local_28 = *(void **)(local_30 + 0x18);
      local_18 = (long)local_28 + (long)(iVar1 * *(int *)(local_30 + 0x14));
      __dest = (void *)((long)__dest + (long)iVar4);
    } while (0 < iVar3);
    return param_2;
  }
  return (void *)0x0;
}


==================================================================

### FUNC 00295e0c (1124 bytes) name=cvSeqPush

void * cvSeqPush(long param_1,void *param_2)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  long *plVar8;
  char *pcVar9;
  int iVar10;
  long *plVar11;
  int iVar12;
  void *__dest;
  long lVar13;
  int iVar14;
  long lVar15;
  int iVar16;
  long lVar17;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"schar* cvSeqPush(CvSeq*, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x471);
    cv::String::deallocate((String *)&local_10);
  }
  __dest = *(void **)(param_1 + 0x38);
  iVar1 = *(int *)(param_1 + 0x2c);
  if (__dest < *(void **)(param_1 + 0x30)) goto LAB_00295e4c;
  plVar8 = *(long **)(param_1 + 0x50);
  if (plVar8 == (long *)0x0) {
    iVar10 = *(int *)(param_1 + 0x40);
    lVar15 = *(long *)(param_1 + 0x48);
    if (iVar10 * 4 <= *(int *)(param_1 + 0x28)) {
      cvSetSeqBlockSize(param_1,iVar10 << 1);
    }
    if (lVar15 == 0) {
      local_10 = lVar15;
      local_8 = lVar15;
      pcVar9 = (char *)cv::String::allocate((String *)&local_10,0x25);
      cVar7 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
      uVar6 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
      uVar5 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
      uVar4 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
      uVar3 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
      *(undefined4 *)(pcVar9 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
      pcVar9[0x24] = cVar7;
      *(undefined8 *)pcVar9 = uVar3;
      *(undefined8 *)(pcVar9 + 8) = uVar4;
      *(undefined8 *)(pcVar9 + 0x10) = uVar5;
      *(undefined8 *)(pcVar9 + 0x18) = uVar6;
      cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
      cv::String::deallocate((String *)&local_10);
    }
    iVar14 = *(int *)(lVar15 + 0x20);
    lVar13 = *(long *)(lVar15 + 0x10);
    iVar2 = *(int *)(lVar15 + 0x24);
    if (((ulong)((lVar13 + ((long)iVar14 - (long)iVar2)) - *(long *)(param_1 + 0x30)) < 8) &&
       (*(int *)(param_1 + 0x2c) <= iVar2)) {
      iVar16 = 0;
      if (iVar1 != 0) {
        iVar16 = iVar2 / iVar1;
      }
      __dest = *(void **)(param_1 + 0x38);
      if (iVar10 < iVar16) {
        iVar16 = iVar10;
      }
      lVar17 = *(long *)(param_1 + 0x30) + (long)(iVar16 * iVar1);
      *(long *)(param_1 + 0x30) = lVar17;
      *(uint *)(lVar15 + 0x24) = ((int)lVar13 + iVar14) - (int)lVar17 & 0xfffffff8;
      goto LAB_00295e4c;
    }
    iVar16 = iVar10 * iVar1 + 0x20;
    if (iVar2 < iVar16) {
      iVar12 = 1;
      if (5 < iVar10) {
        iVar12 = iVar10 / 3;
      }
      if (iVar2 < iVar1 * iVar12 + 0x28) {
        if ((lVar13 == 0) || (plVar8 = *(long **)(lVar13 + 8), plVar8 == (long *)0x0)) {
          lVar13 = *(long *)(lVar15 + 0x18);
          if (lVar13 == 0) {
            plVar8 = (long *)cv::cvAlloc((long)iVar14);
          }
          else {
            cvSaveMemStoragePos(lVar13,auStack_20);
            if ((*(long *)(lVar13 + 0x10) == 0) ||
               (plVar11 = *(long **)(*(long *)(lVar13 + 0x10) + 8), plVar11 == (long *)0x0)) {
              lVar17 = *(long *)(lVar13 + 0x18);
              if (lVar17 == 0) {
                plVar8 = (long *)cv::cvAlloc((long)*(int *)(lVar13 + 0x20));
              }
              else {
                cvSaveMemStoragePos(lVar17,&local_10);
                FUN_00293a80(lVar17);
                plVar8 = *(long **)(lVar17 + 0x10);
                cvRestoreMemStoragePos(lVar17,&local_10);
                plVar11 = *(long **)(lVar17 + 0x10);
                if (plVar8 == plVar11) {
                  *(undefined8 *)(lVar17 + 8) = 0;
                  *(undefined8 *)(lVar17 + 0x10) = 0;
                  *(undefined4 *)(lVar17 + 0x24) = 0;
                }
                else {
                  plVar11[1] = plVar8[1];
                  if ((undefined8 *)plVar8[1] != (undefined8 *)0x0) {
                    *(undefined8 *)plVar8[1] = plVar11;
                  }
                }
              }
              plVar11 = *(long **)(lVar13 + 0x10);
              *plVar8 = (long)plVar11;
              plVar8[1] = 0;
              if (plVar11 == (long *)0x0) {
                *(long **)(lVar13 + 8) = plVar8;
                *(long **)(lVar13 + 0x10) = plVar8;
              }
              else {
                plVar11[1] = (long)plVar8;
                plVar8 = plVar11;
              }
              plVar11 = (long *)plVar8[1];
              if ((long *)plVar8[1] != (long *)0x0) goto LAB_002960d4;
            }
            else {
LAB_002960d4:
              plVar8 = plVar11;
              *(long **)(lVar13 + 0x10) = plVar8;
            }
            *(int *)(lVar13 + 0x24) = *(int *)(lVar13 + 0x20) + -0x10;
            cvRestoreMemStoragePos(lVar13,auStack_20);
            plVar11 = *(long **)(lVar13 + 0x10);
            if (plVar11 == plVar8) {
              *(undefined8 *)(lVar13 + 8) = 0;
              *(undefined8 *)(lVar13 + 0x10) = 0;
              *(undefined4 *)(lVar13 + 0x24) = 0;
            }
            else {
              plVar11[1] = plVar8[1];
              if ((long *)plVar8[1] != (long *)0x0) {
                *(long *)plVar8[1] = (long)plVar11;
              }
            }
          }
          lVar13 = *(long *)(lVar15 + 0x10);
          *plVar8 = lVar13;
          plVar8[1] = 0;
          if (lVar13 != 0) {
            *(long **)(lVar13 + 8) = plVar8;
            iVar14 = *(int *)(lVar15 + 0x20);
            goto LAB_0029609c;
          }
          *(long **)(lVar15 + 8) = plVar8;
          *(long **)(lVar15 + 0x10) = plVar8;
          iVar14 = *(int *)(lVar15 + 0x20);
        }
        else {
LAB_0029609c:
          *(long **)(lVar15 + 0x10) = plVar8;
        }
        *(int *)(lVar15 + 0x24) = iVar14 + -0x10;
      }
      else {
        iVar10 = *(int *)(param_1 + 0x2c);
        iVar14 = 0;
        if (iVar10 != 0) {
          iVar14 = (iVar2 + -0x20) / iVar10;
        }
        iVar16 = iVar10 * iVar14 + 0x20;
      }
    }
    plVar8 = (long *)cvMemStorageAlloc(lVar15,(long)iVar16);
    *(int *)((long)plVar8 + 0x14) = iVar16 + -0x20;
    plVar8[3] = (long)plVar8 + 0x27U & 0xfffffffffffffff8;
    plVar8[1] = 0;
    *plVar8 = 0;
  }
  else {
    *(long *)(param_1 + 0x50) = plVar8[1];
  }
  plVar11 = *(long **)(param_1 + 0x58);
  if (plVar11 == (long *)0x0) {
    __dest = (void *)plVar8[3];
    iVar10 = 0;
    *(long **)(param_1 + 0x58) = plVar8;
    iVar2 = *(int *)((long)plVar8 + 0x14);
    plVar8[1] = (long)plVar8;
    *plVar8 = (long)plVar8;
    *(void **)(param_1 + 0x38) = __dest;
    *(long *)(param_1 + 0x30) = (long)__dest + (long)iVar2;
  }
  else {
    lVar15 = *plVar11;
    iVar10 = 0;
    *plVar8 = lVar15;
    plVar8[1] = (long)plVar11;
    *plVar11 = (long)plVar8;
    __dest = (void *)plVar8[3];
    plVar11 = (long *)*plVar8;
    iVar2 = *(int *)((long)plVar8 + 0x14);
    *(long **)(lVar15 + 8) = plVar8;
    *(void **)(param_1 + 0x38) = __dest;
    *(long *)(param_1 + 0x30) = (long)__dest + (long)iVar2;
    if (plVar8 != plVar11) {
      iVar10 = (int)plVar11[2] + *(int *)((long)plVar11 + 0x14);
    }
  }
  *(int *)(plVar8 + 2) = iVar10;
  *(undefined4 *)((long)plVar8 + 0x14) = 0;
LAB_00295e4c:
  if (param_2 != (void *)0x0) {
    __dest = memcpy(__dest,param_2,(long)iVar1);
  }
  iVar10 = *(int *)(param_1 + 0x28);
  *(int *)(**(long **)(param_1 + 0x58) + 0x14) = *(int *)(**(long **)(param_1 + 0x58) + 0x14) + 1;
  *(int *)(param_1 + 0x28) = iVar10 + 1;
  *(long *)(param_1 + 0x38) = (long)__dest + (long)iVar1;
  return __dest;
}


==================================================================

### FUNC 00296298 (412 bytes) name=cvSeqPop

void cvSeqPop(long param_1,void *param_2)

{
  int iVar1;
  long *plVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  void *__src;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSeqPop(CvSeq*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x490);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(int *)(param_1 + 0x28) < 1) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"void cvSeqPop(CvSeq*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x492);
    cv::String::deallocate((String *)&local_10);
  }
  __src = (void *)(*(long *)(param_1 + 0x38) - (long)*(int *)(param_1 + 0x2c));
  *(void **)(param_1 + 0x38) = __src;
  if (param_2 != (void *)0x0) {
    memcpy(param_2,__src,(long)*(int *)(param_1 + 0x2c));
  }
  plVar3 = *(long **)(param_1 + 0x58);
  *(void **)(param_1 + 0x38) = __src;
  plVar2 = (long *)*plVar3;
  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + -1;
  iVar1 = *(int *)((long)plVar2 + 0x14) + -1;
  *(int *)((long)plVar2 + 0x14) = iVar1;
  if (iVar1 != 0) {
    return;
  }
  if (plVar3 == plVar2) {
    lVar4 = *(long *)(param_1 + 0x30);
    iVar1 = ((int)lVar4 - (int)plVar2[3]) + *(int *)(plVar2 + 2) * *(int *)(param_1 + 0x2c);
    *(int *)((long)plVar2 + 0x14) = iVar1;
    plVar2[3] = lVar4 - iVar1;
    *(undefined8 *)(param_1 + 0x58) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined8 *)(param_1 + 0x38) = 0;
    *(undefined4 *)(param_1 + 0x28) = 0;
  }
  else {
    lVar5 = *plVar2;
    *(int *)((long)plVar2 + 0x14) = (int)*(undefined8 *)(param_1 + 0x30) - (int)__src;
    uVar6 = plVar2[1];
    lVar4 = *(long *)(lVar5 + 0x18) + (long)(*(int *)(lVar5 + 0x14) * *(int *)(param_1 + 0x2c));
    *(long *)(param_1 + 0x38) = lVar4;
    *(long *)(param_1 + 0x30) = lVar4;
    *(undefined8 *)(lVar5 + 8) = uVar6;
    *(long *)plVar2[1] = lVar5;
  }
  plVar2[1] = *(undefined8 *)(param_1 + 0x50);
  *(long **)(param_1 + 0x50) = plVar2;
  return;
}


==================================================================

### FUNC 0029645c (1084 bytes) name=cvSeqPushFront

void * cvSeqPushFront(long param_1,void *param_2)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  long lVar7;
  char *pcVar8;
  long *plVar9;
  void *__dest;
  long *plVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  long *plVar14;
  int iVar15;
  long lVar16;
  long lVar17;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"schar* cvSeqPushFront(CvSeq*, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x4ad);
    cv::String::deallocate((String *)&local_10);
  }
  plVar14 = *(long **)(param_1 + 0x58);
  iVar1 = *(int *)(param_1 + 0x2c);
  if ((plVar14 != (long *)0x0) && ((int)plVar14[2] != 0)) {
    lVar7 = plVar14[3];
    goto LAB_002964a4;
  }
  plVar10 = *(long **)(param_1 + 0x50);
  if (plVar10 == (long *)0x0) {
    iVar15 = *(int *)(param_1 + 0x40);
    lVar7 = *(long *)(param_1 + 0x48);
    if (iVar15 * 4 <= *(int *)(param_1 + 0x28)) {
      cvSetSeqBlockSize(param_1,iVar15 << 1);
    }
    if (lVar7 == 0) {
      local_10 = lVar7;
      local_8 = lVar7;
      pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x25);
      cVar6 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
      uVar5 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
      uVar4 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
      uVar3 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
      uVar2 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
      *(undefined4 *)(pcVar8 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
      pcVar8[0x24] = cVar6;
      *(undefined8 *)pcVar8 = uVar2;
      *(undefined8 *)(pcVar8 + 8) = uVar3;
      *(undefined8 *)(pcVar8 + 0x10) = uVar4;
      *(undefined8 *)(pcVar8 + 0x18) = uVar5;
      cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
      cv::String::deallocate((String *)&local_10);
    }
    iVar12 = *(int *)(lVar7 + 0x24);
    iVar13 = iVar1 * iVar15 + 0x20;
    if (iVar12 < iVar13) {
      iVar11 = 1;
      if (5 < iVar15) {
        iVar11 = iVar15 / 3;
      }
      if (iVar12 < iVar1 * iVar11 + 0x28) {
        if ((*(long *)(lVar7 + 0x10) == 0) ||
           (plVar14 = *(long **)(*(long *)(lVar7 + 0x10) + 8), plVar14 == (long *)0x0)) {
          lVar16 = *(long *)(lVar7 + 0x18);
          if (lVar16 == 0) {
            plVar14 = (long *)cv::cvAlloc((long)*(int *)(lVar7 + 0x20));
          }
          else {
            cvSaveMemStoragePos(lVar16,auStack_20);
            if ((*(long *)(lVar16 + 0x10) == 0) ||
               (plVar14 = *(long **)(*(long *)(lVar16 + 0x10) + 8), plVar14 == (long *)0x0)) {
              lVar17 = *(long *)(lVar16 + 0x18);
              if (lVar17 == 0) {
                plVar14 = (long *)cv::cvAlloc((long)*(int *)(lVar16 + 0x20));
              }
              else {
                cvSaveMemStoragePos(lVar17,&local_10);
                FUN_00293a80(lVar17);
                plVar14 = *(long **)(lVar17 + 0x10);
                cvRestoreMemStoragePos(lVar17,&local_10);
                plVar10 = *(long **)(lVar17 + 0x10);
                if (plVar14 == plVar10) {
                  *(undefined8 *)(lVar17 + 8) = 0;
                  *(undefined8 *)(lVar17 + 0x10) = 0;
                  *(undefined4 *)(lVar17 + 0x24) = 0;
                }
                else {
                  plVar10[1] = plVar14[1];
                  if ((undefined8 *)plVar14[1] != (undefined8 *)0x0) {
                    *(undefined8 *)plVar14[1] = plVar10;
                  }
                }
              }
              lVar17 = *(long *)(lVar16 + 0x10);
              *plVar14 = lVar17;
              plVar14[1] = 0;
              if (lVar17 != 0) {
                *(long **)(lVar17 + 8) = plVar14;
                goto LAB_00296708;
              }
              *(long **)(lVar16 + 8) = plVar14;
              *(long **)(lVar16 + 0x10) = plVar14;
            }
            else {
LAB_00296708:
              *(long **)(lVar16 + 0x10) = plVar14;
            }
            *(int *)(lVar16 + 0x24) = *(int *)(lVar16 + 0x20) + -0x10;
            cvRestoreMemStoragePos(lVar16,auStack_20);
            plVar10 = *(long **)(lVar16 + 0x10);
            if (plVar10 == plVar14) {
              *(undefined8 *)(lVar16 + 8) = 0;
              *(undefined8 *)(lVar16 + 0x10) = 0;
              *(undefined4 *)(lVar16 + 0x24) = 0;
            }
            else {
              plVar10[1] = plVar14[1];
              if ((long *)plVar14[1] != (long *)0x0) {
                *(long *)plVar14[1] = (long)plVar10;
              }
            }
          }
          lVar16 = *(long *)(lVar7 + 0x10);
          *plVar14 = lVar16;
          plVar14[1] = 0;
          if (lVar16 != 0) {
            *(long **)(lVar16 + 8) = plVar14;
            goto LAB_002966cc;
          }
          *(long **)(lVar7 + 8) = plVar14;
          *(long **)(lVar7 + 0x10) = plVar14;
        }
        else {
LAB_002966cc:
          *(long **)(lVar7 + 0x10) = plVar14;
        }
        *(int *)(lVar7 + 0x24) = *(int *)(lVar7 + 0x20) + -0x10;
      }
      else {
        iVar15 = *(int *)(param_1 + 0x2c);
        iVar13 = 0;
        if (iVar15 != 0) {
          iVar13 = (iVar12 + -0x20) / iVar15;
        }
        iVar13 = iVar15 * iVar13 + 0x20;
      }
    }
    plVar10 = (long *)cvMemStorageAlloc(lVar7,(long)iVar13);
    plVar14 = *(long **)(param_1 + 0x58);
    iVar15 = *(int *)(param_1 + 0x2c);
    plVar10[3] = (long)plVar10 + 0x27U & 0xfffffffffffffff8;
    *(int *)((long)plVar10 + 0x14) = iVar13 + -0x20;
    plVar10[1] = 0;
    *plVar10 = 0;
  }
  else {
    *(long *)(param_1 + 0x50) = plVar10[1];
    iVar15 = iVar1;
  }
  if (plVar14 == (long *)0x0) {
    iVar13 = *(int *)((long)plVar10 + 0x14);
    *(long **)(param_1 + 0x58) = plVar10;
    lVar7 = plVar10[3] + (long)iVar13;
    iVar12 = 0;
    if (iVar15 != 0) {
      iVar12 = iVar13 / iVar15;
    }
    plVar10[1] = (long)plVar10;
    *plVar10 = (long)plVar10;
    plVar10[3] = lVar7;
    plVar14 = plVar10;
LAB_00296654:
    *(long *)(param_1 + 0x38) = lVar7;
    *(long *)(param_1 + 0x30) = lVar7;
    lVar7 = plVar14[3];
  }
  else {
    lVar7 = *plVar14;
    *plVar10 = lVar7;
    plVar10[1] = (long)plVar14;
    *plVar14 = (long)plVar10;
    iVar13 = *(int *)((long)plVar10 + 0x14);
    plVar9 = (long *)*plVar10;
    *(long **)(lVar7 + 8) = plVar10;
    lVar7 = plVar10[3] + (long)iVar13;
    plVar10[3] = lVar7;
    iVar12 = 0;
    if (iVar15 != 0) {
      iVar12 = iVar13 / iVar15;
    }
    if (plVar10 == plVar9) goto LAB_00296654;
    *(long **)(param_1 + 0x58) = plVar10;
    plVar14 = plVar10;
  }
  *(undefined4 *)(plVar10 + 2) = 0;
  iVar15 = 0;
  while( true ) {
    *(int *)(plVar10 + 2) = iVar12 + iVar15;
    plVar10 = (long *)plVar10[1];
    if (plVar10 == plVar14) break;
    iVar15 = (int)plVar10[2];
  }
  *(undefined4 *)((long)plVar14 + 0x14) = 0;
LAB_002964a4:
  __dest = (void *)(lVar7 - iVar1);
  plVar14[3] = (long)__dest;
  if (param_2 != (void *)0x0) {
    __dest = memcpy(__dest,param_2,(long)iVar1);
  }
  iVar1 = *(int *)(param_1 + 0x28);
  *(int *)((long)plVar14 + 0x14) = *(int *)((long)plVar14 + 0x14) + 1;
  *(int *)(plVar14 + 2) = (int)plVar14[2] + -1;
  *(int *)(param_1 + 0x28) = iVar1 + 1;
  return __dest;
}


==================================================================

### FUNC 002968c0 (476 bytes) name=cvSeqPopFront

void cvSeqPopFront(long param_1,void *param_2)

{
  int iVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  long *plVar5;
  long lVar6;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSeqPopFront(CvSeq*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x4ce);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(int *)(param_1 + 0x28) < 1) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"void cvSeqPopFront(CvSeq*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x4d0);
    cv::String::deallocate((String *)&local_10);
  }
  iVar1 = *(int *)(param_1 + 0x2c);
  lVar6 = *(long *)(param_1 + 0x58);
  if (param_2 != (void *)0x0) {
    memcpy(param_2,*(void **)(lVar6 + 0x18),(long)iVar1);
  }
  iVar2 = *(int *)(param_1 + 0x28);
  *(long *)(lVar6 + 0x18) = *(long *)(lVar6 + 0x18) + (long)iVar1;
  *(int *)(lVar6 + 0x10) = *(int *)(lVar6 + 0x10) + 1;
  iVar1 = *(int *)(lVar6 + 0x14) + -1;
  *(int *)(param_1 + 0x28) = iVar2 + -1;
  *(int *)(lVar6 + 0x14) = iVar1;
  if (iVar1 != 0) {
    return;
  }
  plVar3 = *(long **)(param_1 + 0x58);
  if (plVar3 == (long *)*plVar3) {
    lVar6 = *(long *)(param_1 + 0x30);
    iVar1 = ((int)lVar6 - (int)plVar3[3]) + (int)plVar3[2] * *(int *)(param_1 + 0x2c);
    *(int *)((long)plVar3 + 0x14) = iVar1;
    plVar3[3] = lVar6 - iVar1;
    *(undefined8 *)(param_1 + 0x58) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined8 *)(param_1 + 0x38) = 0;
    *(undefined4 *)(param_1 + 0x28) = 0;
  }
  else {
    iVar1 = (int)plVar3[2];
    iVar2 = iVar1 * *(int *)(param_1 + 0x2c);
    *(int *)((long)plVar3 + 0x14) = iVar2;
    plVar3[3] = plVar3[3] - (long)iVar2;
    plVar5 = plVar3;
    iVar2 = iVar1;
    while( true ) {
      *(int *)(plVar5 + 2) = iVar2 - iVar1;
      plVar5 = (long *)plVar5[1];
      if (plVar3 == plVar5) break;
      iVar2 = (int)plVar5[2];
    }
    lVar6 = *plVar5;
    lVar4 = plVar5[1];
    *(long *)(param_1 + 0x58) = lVar4;
    *(long *)(lVar6 + 8) = lVar4;
    *(long *)plVar5[1] = lVar6;
    plVar3 = plVar5;
  }
  plVar3[1] = *(long *)(param_1 + 0x50);
  *(long **)(param_1 + 0x50) = plVar3;
  return;
}


==================================================================

### FUNC 00296ac4 (1700 bytes) name=cvSeqInsert

void * cvSeqInsert(long param_1,int param_2,void *param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char cVar9;
  long lVar10;
  void *pvVar11;
  ulong uVar12;
  long lVar13;
  char *pcVar14;
  int iVar15;
  long *plVar16;
  int iVar17;
  long *plVar18;
  int iVar19;
  long lVar20;
  long *plVar21;
  size_t sVar22;
  int iVar23;
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"schar* cvSeqInsert(CvSeq*, int, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x4eb);
    cv::String::deallocate((String *)&local_10);
  }
  uVar3 = *(uint *)(param_1 + 0x28);
  uVar1 = uVar3;
  if (-1 < param_2) {
    uVar1 = 0;
  }
  uVar2 = uVar3;
  if ((int)(uVar1 + param_2) <= (int)uVar3) {
    uVar2 = 0;
  }
  uVar2 = (uVar1 + param_2) - uVar2;
  if (uVar3 < uVar2) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xd3,(String *)&local_10,"schar* cvSeqInsert(CvSeq*, int, const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x4f2);
    cv::String::deallocate((String *)&local_10);
  }
  if (uVar2 == uVar3) {
    pvVar11 = (void *)cvSeqPush(param_1,param_3);
    return pvVar11;
  }
  if (uVar2 == 0) {
    pvVar11 = (void *)cvSeqPushFront(param_1,param_3);
    return pvVar11;
  }
  iVar4 = *(int *)(param_1 + 0x2c);
  if ((int)uVar3 >> 1 <= (int)uVar2) {
    sVar22 = (size_t)iVar4;
    uVar12 = *(long *)(param_1 + 0x38) + sVar22;
    if (*(ulong *)(param_1 + 0x30) < uVar12) {
      FUN_00294674(param_1);
      uVar12 = *(long *)(param_1 + 0x38) + sVar22;
    }
    plVar18 = (long *)**(undefined8 **)(param_1 + 0x58);
    iVar23 = *(int *)(*(undefined8 **)(param_1 + 0x58) + 2);
    iVar17 = (int)plVar18[2];
    pvVar11 = (void *)plVar18[3];
    *(int *)((long)plVar18 + 0x14) = *(int *)((long)plVar18 + 0x14) + 1;
    iVar15 = (int)uVar12 - (int)pvVar11;
    iVar19 = iVar17 - iVar23;
    while ((int)uVar2 < iVar19) {
      plVar21 = (long *)*plVar18;
      memmove((void *)((long)pvVar11 + sVar22),pvVar11,(long)(iVar15 - iVar4));
      iVar15 = iVar4 * *(int *)((long)plVar21 + 0x14);
      memcpy((void *)plVar18[3],(void *)(plVar21[3] + ((long)iVar15 - sVar22)),sVar22);
      iVar17 = *(int *)(plVar21 + 2);
      pvVar11 = (void *)plVar21[3];
      plVar18 = plVar21;
      iVar19 = iVar17 - iVar23;
    }
    iVar23 = ((uVar2 - iVar17) + iVar23) * iVar4;
    lVar10 = (long)iVar23;
    memmove((void *)((long)pvVar11 + lVar10 + sVar22),(void *)((long)pvVar11 + lVar10),
            (long)((iVar15 - iVar23) - iVar4));
    pvVar11 = (void *)(plVar18[3] + lVar10);
    if (param_3 != (void *)0x0) {
      pvVar11 = memcpy(pvVar11,param_3,sVar22);
    }
    *(ulong *)(param_1 + 0x38) = uVar12;
    goto LAB_00296c0c;
  }
  plVar18 = *(long **)(param_1 + 0x58);
  iVar23 = (int)plVar18[2];
  if (iVar23 == 0) {
    plVar21 = *(long **)(param_1 + 0x50);
    if (plVar21 == (long *)0x0) {
      iVar23 = *(int *)(param_1 + 0x40);
      lVar10 = *(long *)(param_1 + 0x48);
      if (iVar23 * 4 <= *(int *)(param_1 + 0x28)) {
        cvSetSeqBlockSize(param_1,iVar23 << 1);
      }
      if (lVar10 == 0) {
        local_10 = lVar10;
        local_8 = lVar10;
        pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x25);
        cVar9 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
        uVar8 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
        uVar7 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
        uVar6 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
        uVar5 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
        *(undefined4 *)(pcVar14 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
        pcVar14[0x24] = cVar9;
        *(undefined8 *)pcVar14 = uVar5;
        *(undefined8 *)(pcVar14 + 8) = uVar6;
        *(undefined8 *)(pcVar14 + 0x10) = uVar7;
        *(undefined8 *)(pcVar14 + 0x18) = uVar8;
        cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
        cv::String::deallocate((String *)&local_10);
      }
      iVar15 = *(int *)(lVar10 + 0x24);
      iVar17 = iVar4 * iVar23 + 0x20;
      if (iVar15 < iVar17) {
        iVar19 = 1;
        if (5 < iVar23) {
          iVar19 = iVar23 / 3;
        }
        if (iVar15 < iVar4 * iVar19 + 0x28) {
          if ((*(long *)(lVar10 + 0x10) == 0) ||
             (lVar13 = *(long *)(*(long *)(lVar10 + 0x10) + 8), lVar13 == 0)) {
            lVar13 = *(long *)(lVar10 + 0x18);
            if (lVar13 == 0) {
              plVar18 = (long *)cv::cvAlloc((long)*(int *)(lVar10 + 0x20));
            }
            else {
              cvSaveMemStoragePos(lVar13,auStack_20);
              if ((*(long *)(lVar13 + 0x10) == 0) ||
                 (plVar21 = *(long **)(*(long *)(lVar13 + 0x10) + 8), plVar21 == (long *)0x0)) {
                lVar20 = *(long *)(lVar13 + 0x18);
                if (lVar20 == 0) {
                  plVar18 = (long *)cv::cvAlloc((long)*(int *)(lVar13 + 0x20));
                }
                else {
                  cvSaveMemStoragePos(lVar20,&local_10);
                  FUN_00293a80(lVar20);
                  plVar18 = *(long **)(lVar20 + 0x10);
                  cvRestoreMemStoragePos(lVar20,&local_10);
                  plVar21 = *(long **)(lVar20 + 0x10);
                  if (plVar18 == plVar21) {
                    *(undefined8 *)(lVar20 + 8) = 0;
                    *(undefined8 *)(lVar20 + 0x10) = 0;
                    *(undefined4 *)(lVar20 + 0x24) = 0;
                  }
                  else {
                    plVar21[1] = plVar18[1];
                    if ((undefined8 *)plVar18[1] != (undefined8 *)0x0) {
                      *(undefined8 *)plVar18[1] = plVar21;
                    }
                  }
                }
                plVar21 = *(long **)(lVar13 + 0x10);
                *plVar18 = (long)plVar21;
                plVar18[1] = 0;
                if (plVar21 == (long *)0x0) {
                  *(long **)(lVar13 + 8) = plVar18;
                  *(long **)(lVar13 + 0x10) = plVar18;
                }
                else {
                  plVar21[1] = (long)plVar18;
                  plVar18 = plVar21;
                }
                plVar21 = (long *)plVar18[1];
                if (plVar21 != (long *)0x0) goto LAB_00296fc0;
              }
              else {
LAB_00296fc0:
                *(long **)(lVar13 + 0x10) = plVar21;
                plVar18 = plVar21;
              }
              *(int *)(lVar13 + 0x24) = *(int *)(lVar13 + 0x20) + -0x10;
              cvRestoreMemStoragePos(lVar13,auStack_20);
              plVar21 = *(long **)(lVar13 + 0x10);
              if (plVar18 == plVar21) {
                *(undefined8 *)(lVar13 + 8) = 0;
                *(undefined8 *)(lVar13 + 0x10) = 0;
                *(undefined4 *)(lVar13 + 0x24) = 0;
              }
              else {
                plVar21[1] = plVar18[1];
                if ((long *)plVar18[1] != (long *)0x0) {
                  *(long *)plVar18[1] = (long)plVar21;
                }
              }
            }
            plVar21 = *(long **)(lVar10 + 0x10);
            *plVar18 = (long)plVar21;
            plVar18[1] = 0;
            if (plVar21 == (long *)0x0) {
              *(long **)(lVar10 + 8) = plVar18;
              *(long **)(lVar10 + 0x10) = plVar18;
            }
            else {
              plVar21[1] = (long)plVar18;
              plVar18 = plVar21;
            }
            lVar13 = plVar18[1];
            if (lVar13 != 0) goto LAB_00296f80;
          }
          else {
LAB_00296f80:
            *(long *)(lVar10 + 0x10) = lVar13;
          }
          *(int *)(lVar10 + 0x24) = *(int *)(lVar10 + 0x20) + -0x10;
        }
        else {
          iVar23 = *(int *)(param_1 + 0x2c);
          iVar17 = 0;
          if (iVar23 != 0) {
            iVar17 = (iVar15 + -0x20) / iVar23;
          }
          iVar17 = iVar23 * iVar17 + 0x20;
        }
      }
      plVar21 = (long *)cvMemStorageAlloc(lVar10,(long)iVar17);
      plVar18 = *(long **)(param_1 + 0x58);
      uVar12 = (long)plVar21 + 0x27U & 0xfffffffffffffff8;
      *(int *)((long)plVar21 + 0x14) = iVar17 + -0x20;
      plVar21[3] = uVar12;
      plVar21[1] = 0;
      *plVar21 = 0;
      if (plVar18 != (long *)0x0) {
        iVar23 = *(int *)(param_1 + 0x2c);
        goto LAB_00296dac;
      }
      iVar23 = *(int *)(param_1 + 0x2c);
      iVar17 = *(int *)((long)plVar21 + 0x14);
      lVar10 = uVar12 + (long)iVar17;
      *(long **)(param_1 + 0x58) = plVar21;
      plVar21[1] = (long)plVar21;
      iVar15 = 0;
      if (iVar23 != 0) {
        iVar15 = iVar17 / iVar23;
      }
      *plVar21 = (long)plVar21;
      plVar21[3] = lVar10;
      plVar18 = plVar21;
LAB_00296f5c:
      *(long *)(param_1 + 0x38) = lVar10;
      *(long *)(param_1 + 0x30) = lVar10;
      lVar10 = plVar18[3];
    }
    else {
      *(long *)(param_1 + 0x50) = plVar21[1];
      iVar23 = iVar4;
LAB_00296dac:
      lVar10 = *plVar18;
      *plVar21 = lVar10;
      plVar21[1] = (long)plVar18;
      *plVar18 = (long)plVar21;
      iVar17 = *(int *)((long)plVar21 + 0x14);
      plVar16 = (long *)*plVar21;
      *(long **)(lVar10 + 8) = plVar21;
      lVar10 = plVar21[3] + (long)iVar17;
      plVar21[3] = lVar10;
      iVar15 = 0;
      if (iVar23 != 0) {
        iVar15 = iVar17 / iVar23;
      }
      if (plVar21 == plVar16) goto LAB_00296f5c;
      *(long **)(param_1 + 0x58) = plVar21;
      plVar18 = plVar21;
    }
    *(undefined4 *)(plVar21 + 2) = 0;
    iVar23 = 0;
    while( true ) {
      *(int *)(plVar21 + 2) = iVar15 + iVar23;
      plVar21 = (long *)plVar21[1];
      if (plVar21 == plVar18) break;
      iVar23 = (int)plVar21[2];
    }
    *(undefined4 *)((long)plVar18 + 0x14) = 0;
    iVar15 = 0;
    iVar23 = (int)plVar18[2];
    iVar17 = 1;
  }
  else {
    iVar15 = *(int *)((long)plVar18 + 0x14);
    lVar10 = plVar18[3];
    iVar17 = iVar15 + 1;
  }
  sVar22 = (size_t)iVar4;
  iVar19 = iVar23 + -1;
  pvVar11 = (void *)(lVar10 - sVar22);
  *(int *)((long)plVar18 + 0x14) = iVar17;
  *(int *)(plVar18 + 2) = iVar19;
  plVar18[3] = (long)pvVar11;
  while (iVar15 < (int)uVar2) {
    plVar21 = (long *)plVar18[1];
    memmove(pvVar11,(void *)((long)pvVar11 + sVar22),(long)(iVar4 * iVar17 - iVar4));
    memcpy((void *)(plVar18[3] + ((long)(iVar4 * iVar17) - sVar22)),(void *)plVar21[3],sVar22);
    iVar19 = (int)plVar21[2];
    iVar17 = *(int *)((long)plVar21 + 0x14);
    pvVar11 = (void *)plVar21[3];
    plVar18 = plVar21;
    iVar15 = (iVar19 - iVar23) + iVar17;
  }
  iVar23 = ((uVar2 - iVar19) + iVar23) * iVar4;
  memmove(pvVar11,(void *)((long)pvVar11 + sVar22),(long)(iVar23 - iVar4));
  pvVar11 = (void *)(plVar18[3] + ((long)iVar23 - sVar22));
  if (param_3 != (void *)0x0) {
    pvVar11 = memcpy(pvVar11,param_3,sVar22);
  }
LAB_00296c0c:
  *(uint *)(param_1 + 0x28) = uVar3 + 1;
  return pvVar11;
}


==================================================================

### FUNC 002971a4 (1024 bytes) name=cvSeqRemove

void cvSeqRemove(long param_1,int param_2)

{
  bool bVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  undefined4 uVar9;
  char cVar10;
  void *pvVar11;
  char *pcVar12;
  long *plVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  void *__src;
  long *plVar17;
  long *plVar18;
  int iVar19;
  size_t sVar20;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvSeqRemove(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x561);
    cv::String::deallocate((String *)&local_10);
  }
  uVar4 = *(uint *)(param_1 + 0x28);
  uVar2 = uVar4;
  if (-1 < param_2) {
    uVar2 = 0;
  }
  uVar3 = uVar4;
  if ((int)(uVar2 + param_2) < (int)uVar4) {
    uVar3 = 0;
  }
  uVar3 = (uVar2 + param_2) - uVar3;
  if (uVar4 <= uVar3) {
    local_10 = 0;
    local_8 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0xd);
    cVar10 = s_Invalid_index_004643d0[0xc];
    uVar9 = s_Invalid_index_004643d0._8_4_;
    *(undefined8 *)pcVar12 = s_Invalid_index_004643d0._0_8_;
    *(undefined4 *)(pcVar12 + 8) = uVar9;
    pcVar12[0xc] = cVar10;
    cv::error(-0xd3,(String *)&local_10,"void cvSeqRemove(CvSeq*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x569);
    cv::String::deallocate((String *)&local_10);
  }
  uVar2 = uVar4 - 1;
  if (uVar2 == uVar3) {
    cvSeqPop(param_1,0);
  }
  else {
    if (uVar3 == 0) {
      cvSeqPopFront(param_1,0);
      return;
    }
    plVar13 = *(long **)(param_1 + 0x58);
    iVar5 = *(int *)(param_1 + 0x2c);
    iVar7 = (int)plVar13[2];
    iVar6 = *(int *)((long)plVar13 + 0x14);
    plVar17 = plVar13;
    iVar8 = iVar7;
    iVar19 = iVar6;
    while (iVar19 <= (int)uVar3) {
      plVar17 = (long *)plVar17[1];
      iVar8 = (int)plVar17[2];
      iVar6 = *(int *)((long)plVar17 + 0x14);
      iVar19 = (iVar8 - iVar7) + iVar6;
    }
    bVar1 = (int)uVar3 < (int)uVar4 >> 1;
    __src = (void *)plVar17[3];
    iVar19 = ((uVar3 - iVar8) + iVar7) * iVar5;
    pvVar11 = (void *)((long)__src + (long)iVar19);
    if (bVar1) {
      sVar20 = (size_t)iVar5;
      iVar19 = ((int)pvVar11 + iVar5) - (int)__src;
      plVar18 = plVar17;
      if (plVar13 != plVar17) {
        do {
          plVar17 = (long *)*plVar18;
          memmove((void *)((long)__src + sVar20),__src,(long)(iVar19 - iVar5));
          iVar19 = iVar5 * *(int *)((long)plVar17 + 0x14);
          memcpy((void *)plVar18[3],(void *)(plVar17[3] + ((long)iVar19 - sVar20)),sVar20);
          __src = (void *)plVar17[3];
          plVar18 = plVar17;
        } while (*(long **)(param_1 + 0x58) != plVar17);
      }
      memmove((void *)((long)__src + sVar20),__src,(long)(iVar19 - iVar5));
      plVar17[3] = plVar17[3] + sVar20;
      *(int *)(plVar17 + 2) = (int)plVar17[2] + 1;
      iVar19 = *(int *)((long)plVar17 + 0x14) + -1;
      *(uint *)(param_1 + 0x28) = uVar2;
      *(int *)((long)plVar17 + 0x14) = iVar19;
    }
    else {
      sVar20 = (size_t)iVar5;
      iVar19 = iVar5 * iVar6 - iVar19;
      if (plVar17 != (long *)*plVar13) {
        do {
          plVar17 = (long *)plVar17[1];
          pvVar11 = memmove(pvVar11,(void *)((long)pvVar11 + sVar20),(long)(iVar19 - iVar5));
          memcpy((void *)((long)pvVar11 + ((long)iVar19 - sVar20)),(void *)plVar17[3],sVar20);
          pvVar11 = (void *)plVar17[3];
          iVar19 = iVar5 * *(int *)((long)plVar17 + 0x14);
        } while ((long *)**(undefined8 **)(param_1 + 0x58) != plVar17);
      }
      memmove(pvVar11,(void *)((long)pvVar11 + sVar20),(long)(iVar19 - iVar5));
      iVar19 = *(int *)((long)plVar17 + 0x14);
      *(uint *)(param_1 + 0x28) = uVar2;
      *(size_t *)(param_1 + 0x38) = *(long *)(param_1 + 0x38) - sVar20;
      iVar19 = iVar19 + -1;
      *(int *)((long)plVar17 + 0x14) = iVar19;
    }
    if (iVar19 == 0) {
      plVar13 = *(long **)(param_1 + 0x58);
      plVar17 = (long *)*plVar13;
      if (plVar13 == plVar17) {
        lVar15 = *(long *)(param_1 + 0x30);
        iVar19 = ((int)lVar15 - (int)plVar17[3]) + *(int *)(plVar17 + 2) * *(int *)(param_1 + 0x2c);
        *(int *)((long)plVar17 + 0x14) = iVar19;
        plVar17[3] = lVar15 - iVar19;
        *(undefined8 *)(param_1 + 0x58) = 0;
        *(undefined8 *)(param_1 + 0x30) = 0;
        *(undefined8 *)(param_1 + 0x38) = 0;
        *(undefined4 *)(param_1 + 0x28) = 0;
      }
      else {
        if (bVar1) {
          iVar19 = (int)plVar13[2];
          iVar5 = iVar19 * *(int *)(param_1 + 0x2c);
          *(int *)((long)plVar13 + 0x14) = iVar5;
          plVar13[3] = plVar13[3] - (long)iVar5;
          plVar17 = plVar13;
          iVar5 = iVar19;
          while( true ) {
            *(int *)(plVar17 + 2) = iVar5 - iVar19;
            plVar17 = (long *)plVar17[1];
            if (plVar13 == plVar17) break;
            iVar5 = (int)plVar17[2];
          }
          lVar16 = plVar17[1];
          lVar14 = *plVar17;
          *(long *)(param_1 + 0x58) = lVar16;
        }
        else {
          lVar14 = *plVar17;
          *(int *)((long)plVar17 + 0x14) =
               (int)*(undefined8 *)(param_1 + 0x30) - (int)*(undefined8 *)(param_1 + 0x38);
          lVar16 = plVar17[1];
          lVar15 = *(long *)(lVar14 + 0x18) +
                   (long)(*(int *)(lVar14 + 0x14) * *(int *)(param_1 + 0x2c));
          *(long *)(param_1 + 0x38) = lVar15;
          *(long *)(param_1 + 0x30) = lVar15;
        }
        *(long *)(lVar14 + 8) = lVar16;
        *(long *)plVar17[1] = lVar14;
      }
      plVar17[1] = *(long *)(param_1 + 0x50);
      *(long **)(param_1 + 0x50) = plVar17;
      return;
    }
  }
  return;
}


==================================================================

### FUNC 002975cc (3336 bytes) name=cvSeqPushMulti

void cvSeqPushMulti(long param_1,void *param_2,int param_3,int param_4)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  undefined2 uVar7;
  void *pvVar8;
  long *plVar9;
  char *pcVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  long *plVar14;
  int iVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  int iVar20;
  long *plVar21;
  long lVar22;
  int iVar23;
  long lVar24;
  size_t __n;
  void *__src;
  undefined1 auStack_40 [16];
  undefined1 auStack_30 [16];
  undefined1 auStack_20 [16];
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar6 = s_NULL_sequence_pointer_004643e0[0x14];
    uVar3 = s_NULL_sequence_pointer_004643e0._8_8_;
    uVar2 = s_NULL_sequence_pointer_004643e0._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_NULL_sequence_pointer_004643e0._16_4_;
    pcVar10[0x14] = cVar6;
    *(undefined8 *)pcVar10 = uVar2;
    *(undefined8 *)(pcVar10 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_10,"void cvSeqPushMulti(CvSeq*, const void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x5b2);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 < 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x26);
    uVar7 = s_number_of_removed_elements_is_ne_004643f8._36_2_;
    uVar5 = s_number_of_removed_elements_is_ne_004643f8._24_8_;
    uVar4 = s_number_of_removed_elements_is_ne_004643f8._16_8_;
    uVar3 = s_number_of_removed_elements_is_ne_004643f8._8_8_;
    uVar2 = s_number_of_removed_elements_is_ne_004643f8._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s_number_of_removed_elements_is_ne_004643f8._32_4_;
    *(undefined2 *)(pcVar10 + 0x24) = uVar7;
    *(undefined8 *)pcVar10 = uVar2;
    *(undefined8 *)(pcVar10 + 8) = uVar3;
    *(undefined8 *)(pcVar10 + 0x10) = uVar4;
    *(undefined8 *)(pcVar10 + 0x18) = uVar5;
    cv::error(-0xc9,(String *)&local_10,"void cvSeqPushMulti(CvSeq*, const void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x5b4);
    cv::String::deallocate((String *)&local_10);
  }
  iVar1 = *(int *)(param_1 + 0x2c);
  if (param_4 == 0) {
    if (0 < param_3) {
      lVar19 = *(long *)(param_1 + 0x30);
      lVar24 = (long)iVar1;
LAB_00297644:
      pvVar8 = *(void **)(param_1 + 0x38);
      lVar17 = 0;
      if (lVar24 != 0) {
        lVar17 = (lVar19 - (long)pvVar8) / lVar24;
      }
      if (param_3 < (int)lVar17) goto LAB_002976d8;
LAB_00297658:
      iVar13 = (int)lVar17;
      if (0 < iVar13) {
        param_3 = param_3 - iVar13;
        __src = param_2;
        goto LAB_002976dc;
      }
      plVar9 = *(long **)(param_1 + 0x50);
      if (plVar9 == (long *)0x0) goto LAB_00297738;
LAB_00297668:
      *(long *)(param_1 + 0x50) = plVar9[1];
      plVar14 = *(long **)(param_1 + 0x58);
      if (plVar14 == (long *)0x0) goto LAB_00297a68;
LAB_00297678:
      lVar19 = *plVar14;
      iVar13 = 0;
      *plVar9 = lVar19;
      plVar9[1] = (long)plVar14;
      *plVar14 = (long)plVar9;
      lVar17 = plVar9[3];
      plVar14 = (long *)*plVar9;
      iVar20 = *(int *)((long)plVar9 + 0x14);
      *(long **)(lVar19 + 8) = plVar9;
      lVar19 = lVar17 + iVar20;
      *(long *)(param_1 + 0x38) = lVar17;
      *(long *)(param_1 + 0x30) = lVar19;
      if (plVar9 != plVar14) {
        iVar13 = (int)plVar14[2] + *(int *)((long)plVar14 + 0x14);
      }
      do {
        *(int *)(plVar9 + 2) = iVar13;
        *(undefined4 *)((long)plVar9 + 0x14) = 0;
        pvVar8 = *(void **)(param_1 + 0x38);
        lVar17 = 0;
        if (lVar24 != 0) {
          lVar17 = (lVar19 - (long)pvVar8) / lVar24;
        }
        if ((int)lVar17 <= param_3) goto LAB_00297658;
LAB_002976d8:
        __src = param_2;
        iVar13 = param_3;
        param_3 = 0;
LAB_002976dc:
        iVar20 = *(int *)(param_1 + 0x28);
        *(int *)(**(long **)(param_1 + 0x58) + 0x14) =
             *(int *)(**(long **)(param_1 + 0x58) + 0x14) + iVar13;
        *(int *)(param_1 + 0x28) = iVar20 + iVar13;
        __n = (size_t)(iVar13 * iVar1);
        param_2 = __src;
        if (__src != (void *)0x0) {
          param_2 = (void *)((long)__src + __n);
          memcpy(pvVar8,__src,__n);
          pvVar8 = *(void **)(param_1 + 0x38);
        }
        *(size_t *)(param_1 + 0x38) = (long)pvVar8 + __n;
        if (param_3 < 1) {
          return;
        }
        plVar9 = *(long **)(param_1 + 0x50);
        if (plVar9 != (long *)0x0) goto LAB_00297668;
LAB_00297738:
        iVar13 = *(int *)(param_1 + 0x40);
        iVar20 = *(int *)(param_1 + 0x2c);
        lVar17 = *(long *)(param_1 + 0x48);
        if (iVar13 * 4 <= *(int *)(param_1 + 0x28)) {
          cvSetSeqBlockSize(param_1,iVar13 << 1);
        }
        if (lVar17 == 0) {
          local_10 = lVar17;
          local_8 = lVar17;
          pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x25);
          cVar6 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
          uVar5 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
          uVar4 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
          uVar3 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
          uVar2 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
          *(undefined4 *)(pcVar10 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
          pcVar10[0x24] = cVar6;
          *(undefined8 *)pcVar10 = uVar2;
          *(undefined8 *)(pcVar10 + 8) = uVar3;
          *(undefined8 *)(pcVar10 + 0x10) = uVar4;
          *(undefined8 *)(pcVar10 + 0x18) = uVar5;
          cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
          cv::String::deallocate((String *)&local_10);
        }
        iVar15 = *(int *)(lVar17 + 0x20);
        lVar18 = *(long *)(lVar17 + 0x10);
        iVar23 = *(int *)(lVar17 + 0x24);
        if (((ulong)((lVar18 + ((long)iVar15 - (long)iVar23)) - *(long *)(param_1 + 0x30)) < 8) &&
           (*(int *)(param_1 + 0x2c) <= iVar23)) {
          iVar11 = 0;
          if (iVar20 != 0) {
            iVar11 = iVar23 / iVar20;
          }
          if (iVar13 < iVar11) {
            iVar11 = iVar13;
          }
          lVar19 = *(long *)(param_1 + 0x30) + (long)(iVar11 * iVar20);
          *(long *)(param_1 + 0x30) = lVar19;
          *(uint *)(lVar17 + 0x24) = ((int)lVar18 + iVar15) - (int)lVar19 & 0xfffffff8;
          goto LAB_00297644;
        }
        iVar11 = iVar20 * iVar13 + 0x20;
        if (iVar23 < iVar11) {
          iVar12 = 1;
          if (5 < iVar13) {
            iVar12 = iVar13 / 3;
          }
          if (iVar23 < iVar20 * iVar12 + 0x28) {
            if ((lVar18 == 0) || (plVar9 = *(long **)(lVar18 + 8), plVar9 == (long *)0x0)) {
              lVar19 = *(long *)(lVar17 + 0x18);
              if (lVar19 == 0) {
                plVar9 = (long *)cv::cvAlloc((long)iVar15);
              }
              else {
                cvSaveMemStoragePos(lVar19,auStack_40);
                if ((*(long *)(lVar19 + 0x10) == 0) ||
                   (plVar9 = *(long **)(*(long *)(lVar19 + 0x10) + 8), plVar9 == (long *)0x0)) {
                  lVar18 = *(long *)(lVar19 + 0x18);
                  if (lVar18 == 0) {
                    plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar19 + 0x20));
                  }
                  else {
                    cvSaveMemStoragePos(lVar18,auStack_30);
                    if ((*(long *)(lVar18 + 0x10) == 0) ||
                       (plVar9 = *(long **)(*(long *)(lVar18 + 0x10) + 8), plVar9 == (long *)0x0)) {
                      lVar22 = *(long *)(lVar18 + 0x18);
                      if (lVar22 == 0) {
                        plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar18 + 0x20));
                      }
                      else {
                        cvSaveMemStoragePos(lVar22,auStack_20);
                        if ((*(long *)(lVar22 + 0x10) == 0) ||
                           (plVar9 = *(long **)(*(long *)(lVar22 + 0x10) + 8), plVar9 == (long *)0x0
                           )) {
                          lVar16 = *(long *)(lVar22 + 0x18);
                          if (lVar16 == 0) {
                            plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar22 + 0x20));
                          }
                          else {
                            cvSaveMemStoragePos(lVar16,&local_10);
                            FUN_00293a80(lVar16);
                            plVar9 = *(long **)(lVar16 + 0x10);
                            cvRestoreMemStoragePos(lVar16,&local_10);
                            plVar14 = *(long **)(lVar16 + 0x10);
                            if (plVar9 == plVar14) {
                              *(undefined8 *)(lVar16 + 8) = 0;
                              *(undefined8 *)(lVar16 + 0x10) = 0;
                              *(undefined4 *)(lVar16 + 0x24) = 0;
                            }
                            else {
                              plVar14[1] = plVar9[1];
                              if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                                *(undefined8 *)plVar9[1] = plVar14;
                              }
                            }
                          }
                          lVar16 = *(long *)(lVar22 + 0x10);
                          *plVar9 = lVar16;
                          plVar9[1] = 0;
                          if (lVar16 != 0) {
                            *(long **)(lVar16 + 8) = plVar9;
                            goto LAB_00297f7c;
                          }
                          *(long **)(lVar22 + 8) = plVar9;
                          *(long **)(lVar22 + 0x10) = plVar9;
                        }
                        else {
LAB_00297f7c:
                          *(long **)(lVar22 + 0x10) = plVar9;
                        }
                        *(int *)(lVar22 + 0x24) = *(int *)(lVar22 + 0x20) + -0x10;
                        cvRestoreMemStoragePos(lVar22,auStack_20);
                        plVar14 = *(long **)(lVar22 + 0x10);
                        if (plVar14 == plVar9) {
                          *(undefined8 *)(lVar22 + 8) = 0;
                          *(undefined8 *)(lVar22 + 0x10) = 0;
                          *(undefined4 *)(lVar22 + 0x24) = 0;
                        }
                        else {
                          plVar14[1] = plVar9[1];
                          if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                            *(undefined8 *)plVar9[1] = plVar14;
                          }
                        }
                      }
                      lVar22 = *(long *)(lVar18 + 0x10);
                      *plVar9 = lVar22;
                      plVar9[1] = 0;
                      if (lVar22 != 0) {
                        *(long **)(lVar22 + 8) = plVar9;
                        goto LAB_00297ed4;
                      }
                      *(long **)(lVar18 + 8) = plVar9;
                      *(long **)(lVar18 + 0x10) = plVar9;
                    }
                    else {
LAB_00297ed4:
                      *(long **)(lVar18 + 0x10) = plVar9;
                    }
                    *(int *)(lVar18 + 0x24) = *(int *)(lVar18 + 0x20) + -0x10;
                    cvRestoreMemStoragePos(lVar18,auStack_30);
                    plVar14 = *(long **)(lVar18 + 0x10);
                    if (plVar14 == plVar9) {
                      *(undefined8 *)(lVar18 + 8) = 0;
                      *(undefined8 *)(lVar18 + 0x10) = 0;
                      *(undefined4 *)(lVar18 + 0x24) = 0;
                    }
                    else {
                      plVar14[1] = plVar9[1];
                      if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                        *(undefined8 *)plVar9[1] = plVar14;
                      }
                    }
                  }
                  lVar18 = *(long *)(lVar19 + 0x10);
                  *plVar9 = lVar18;
                  plVar9[1] = 0;
                  if (lVar18 != 0) {
                    *(long **)(lVar18 + 8) = plVar9;
                    goto LAB_00297c7c;
                  }
                  *(long **)(lVar19 + 8) = plVar9;
                  *(long **)(lVar19 + 0x10) = plVar9;
                }
                else {
LAB_00297c7c:
                  *(long **)(lVar19 + 0x10) = plVar9;
                }
                *(int *)(lVar19 + 0x24) = *(int *)(lVar19 + 0x20) + -0x10;
                cvRestoreMemStoragePos(lVar19,auStack_40);
                plVar14 = *(long **)(lVar19 + 0x10);
                if (plVar14 == plVar9) {
                  *(undefined8 *)(lVar19 + 8) = 0;
                  *(undefined8 *)(lVar19 + 0x10) = 0;
                  *(undefined4 *)(lVar19 + 0x24) = 0;
                }
                else {
                  plVar14[1] = plVar9[1];
                  if ((long *)plVar9[1] != (long *)0x0) {
                    *(long *)plVar9[1] = (long)plVar14;
                  }
                }
              }
              lVar19 = *(long *)(lVar17 + 0x10);
              *plVar9 = lVar19;
              plVar9[1] = 0;
              if (lVar19 != 0) {
                *(long **)(lVar19 + 8) = plVar9;
                iVar15 = *(int *)(lVar17 + 0x20);
                goto LAB_00297c40;
              }
              *(long **)(lVar17 + 8) = plVar9;
              *(long **)(lVar17 + 0x10) = plVar9;
              iVar15 = *(int *)(lVar17 + 0x20);
            }
            else {
LAB_00297c40:
              *(long **)(lVar17 + 0x10) = plVar9;
            }
            *(int *)(lVar17 + 0x24) = iVar15 + -0x10;
          }
          else {
            iVar13 = *(int *)(param_1 + 0x2c);
            iVar20 = 0;
            if (iVar13 != 0) {
              iVar20 = (iVar23 + -0x20) / iVar13;
            }
            iVar11 = iVar13 * iVar20 + 0x20;
          }
        }
        plVar9 = (long *)cvMemStorageAlloc(lVar17,(long)iVar11);
        plVar9[3] = (long)plVar9 + 0x27U & 0xfffffffffffffff8;
        plVar14 = *(long **)(param_1 + 0x58);
        plVar9[1] = 0;
        *(int *)((long)plVar9 + 0x14) = iVar11 + -0x20;
        *plVar9 = 0;
        if (plVar14 != (long *)0x0) goto LAB_00297678;
LAB_00297a68:
        lVar17 = plVar9[3];
        iVar13 = 0;
        iVar20 = *(int *)((long)plVar9 + 0x14);
        *(long **)(param_1 + 0x58) = plVar9;
        plVar9[1] = (long)plVar9;
        lVar19 = lVar17 + iVar20;
        *plVar9 = (long)plVar9;
        *(long *)(param_1 + 0x38) = lVar17;
        *(long *)(param_1 + 0x30) = lVar19;
      } while( true );
    }
  }
  else {
    plVar9 = *(long **)(param_1 + 0x58);
    while (0 < param_3) {
      if ((plVar9 == (long *)0x0) || (iVar13 = (int)plVar9[2], iVar13 == 0)) {
        plVar14 = *(long **)(param_1 + 0x50);
        if (plVar14 == (long *)0x0) {
          iVar13 = *(int *)(param_1 + 0x40);
          iVar20 = *(int *)(param_1 + 0x2c);
          lVar19 = *(long *)(param_1 + 0x48);
          if (iVar13 * 4 <= *(int *)(param_1 + 0x28)) {
            cvSetSeqBlockSize(param_1,iVar13 << 1);
          }
          if (lVar19 == 0) {
            local_10 = lVar19;
            local_8 = lVar19;
            pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x25);
            cVar6 = s_The_sequence_has_NULL_storage_po_00464338[0x24];
            uVar5 = s_The_sequence_has_NULL_storage_po_00464338._24_8_;
            uVar4 = s_The_sequence_has_NULL_storage_po_00464338._16_8_;
            uVar3 = s_The_sequence_has_NULL_storage_po_00464338._8_8_;
            uVar2 = s_The_sequence_has_NULL_storage_po_00464338._0_8_;
            *(undefined4 *)(pcVar10 + 0x20) = s_The_sequence_has_NULL_storage_po_00464338._32_4_;
            pcVar10[0x24] = cVar6;
            *(undefined8 *)pcVar10 = uVar2;
            *(undefined8 *)(pcVar10 + 8) = uVar3;
            *(undefined8 *)(pcVar10 + 0x10) = uVar4;
            *(undefined8 *)(pcVar10 + 0x18) = uVar5;
            cv::error(-0x1b,(String *)&local_10,"void icvGrowSeq(CvSeq*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x289);
            cv::String::deallocate((String *)&local_10);
          }
          iVar15 = *(int *)(lVar19 + 0x24);
          iVar23 = iVar20 * iVar13 + 0x20;
          if (iVar15 < iVar23) {
            iVar11 = 1;
            if (5 < iVar13) {
              iVar11 = iVar13 / 3;
            }
            if (iVar15 < iVar20 * iVar11 + 0x28) {
              if ((*(long *)(lVar19 + 0x10) == 0) ||
                 (plVar9 = *(long **)(*(long *)(lVar19 + 0x10) + 8), plVar9 == (long *)0x0)) {
                lVar24 = *(long *)(lVar19 + 0x18);
                if (lVar24 == 0) {
                  plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar19 + 0x20));
                }
                else {
                  cvSaveMemStoragePos(lVar24,auStack_40);
                  if ((*(long *)(lVar24 + 0x10) == 0) ||
                     (plVar9 = *(long **)(*(long *)(lVar24 + 0x10) + 8), plVar9 == (long *)0x0)) {
                    lVar17 = *(long *)(lVar24 + 0x18);
                    if (lVar17 == 0) {
                      plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar24 + 0x20));
                    }
                    else {
                      cvSaveMemStoragePos(lVar17,auStack_30);
                      if ((*(long *)(lVar17 + 0x10) == 0) ||
                         (plVar9 = *(long **)(*(long *)(lVar17 + 0x10) + 8), plVar9 == (long *)0x0))
                      {
                        lVar18 = *(long *)(lVar17 + 0x18);
                        if (lVar18 == 0) {
                          plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar17 + 0x20));
                        }
                        else {
                          cvSaveMemStoragePos(lVar18,auStack_20);
                          if ((*(long *)(lVar18 + 0x10) == 0) ||
                             (plVar9 = *(long **)(*(long *)(lVar18 + 0x10) + 8),
                             plVar9 == (long *)0x0)) {
                            lVar22 = *(long *)(lVar18 + 0x18);
                            if (lVar22 == 0) {
                              plVar9 = (long *)cv::cvAlloc((long)*(int *)(lVar18 + 0x20));
                            }
                            else {
                              cvSaveMemStoragePos(lVar22,&local_10);
                              FUN_00293a80(lVar22);
                              plVar9 = *(long **)(lVar22 + 0x10);
                              cvRestoreMemStoragePos(lVar22,&local_10);
                              plVar14 = *(long **)(lVar22 + 0x10);
                              if (plVar9 == plVar14) {
                                *(undefined8 *)(lVar22 + 8) = 0;
                                *(undefined8 *)(lVar22 + 0x10) = 0;
                                *(undefined4 *)(lVar22 + 0x24) = 0;
                              }
                              else {
                                plVar14[1] = plVar9[1];
                                if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                                  *(undefined8 *)plVar9[1] = plVar14;
                                }
                              }
                            }
                            lVar22 = *(long *)(lVar18 + 0x10);
                            *plVar9 = lVar22;
                            plVar9[1] = 0;
                            if (lVar22 != 0) {
                              *(long **)(lVar22 + 8) = plVar9;
                              goto LAB_00298198;
                            }
                            *(long **)(lVar18 + 8) = plVar9;
                            *(long **)(lVar18 + 0x10) = plVar9;
                          }
                          else {
LAB_00298198:
                            *(long **)(lVar18 + 0x10) = plVar9;
                          }
                          *(int *)(lVar18 + 0x24) = *(int *)(lVar18 + 0x20) + -0x10;
                          cvRestoreMemStoragePos(lVar18,auStack_20);
                          plVar14 = *(long **)(lVar18 + 0x10);
                          if (plVar14 == plVar9) {
                            *(undefined8 *)(lVar18 + 8) = 0;
                            *(undefined8 *)(lVar18 + 0x10) = 0;
                            *(undefined4 *)(lVar18 + 0x24) = 0;
                          }
                          else {
                            plVar14[1] = plVar9[1];
                            if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                              *(undefined8 *)plVar9[1] = plVar14;
                            }
                          }
                        }
                        lVar18 = *(long *)(lVar17 + 0x10);
                        *plVar9 = lVar18;
                        plVar9[1] = 0;
                        if (lVar18 != 0) {
                          *(long **)(lVar18 + 8) = plVar9;
                          goto LAB_00297dd8;
                        }
                        *(long **)(lVar17 + 8) = plVar9;
                        *(long **)(lVar17 + 0x10) = plVar9;
                      }
                      else {
LAB_00297dd8:
                        *(long **)(lVar17 + 0x10) = plVar9;
                      }
                      *(int *)(lVar17 + 0x24) = *(int *)(lVar17 + 0x20) + -0x10;
                      cvRestoreMemStoragePos(lVar17,auStack_30);
                      plVar14 = *(long **)(lVar17 + 0x10);
                      if (plVar14 == plVar9) {
                        *(undefined8 *)(lVar17 + 8) = 0;
                        *(undefined8 *)(lVar17 + 0x10) = 0;
                        *(undefined4 *)(lVar17 + 0x24) = 0;
                      }
                      else {
                        plVar14[1] = plVar9[1];
                        if ((undefined8 *)plVar9[1] != (undefined8 *)0x0) {
                          *(undefined8 *)plVar9[1] = plVar14;
                        }
                      }
                    }
                    lVar17 = *(long *)(lVar24 + 0x10);
                    *plVar9 = lVar17;
                    plVar9[1] = 0;
                    if (lVar17 != 0) {
                      *(long **)(lVar17 + 8) = plVar9;
                      goto LAB_00297bd8;
                    }
                    *(long **)(lVar24 + 8) = plVar9;
                    *(long **)(lVar24 + 0x10) = plVar9;
                  }
                  else {
LAB_00297bd8:
                    *(long **)(lVar24 + 0x10) = plVar9;
                  }
                  *(int *)(lVar24 + 0x24) = *(int *)(lVar24 + 0x20) + -0x10;
                  cvRestoreMemStoragePos(lVar24,auStack_40);
                  plVar14 = *(long **)(lVar24 + 0x10);
                  if (plVar14 == plVar9) {
                    *(undefined8 *)(lVar24 + 8) = 0;
                    *(undefined8 *)(lVar24 + 0x10) = 0;
                    *(undefined4 *)(lVar24 + 0x24) = 0;
                  }
                  else {
                    plVar14[1] = plVar9[1];
                    if ((long *)plVar9[1] != (long *)0x0) {
                      *(long *)plVar9[1] = (long)plVar14;
                    }
                  }
                }
                lVar24 = *(long *)(lVar19 + 0x10);
                *plVar9 = lVar24;
                plVar9[1] = 0;
                if (lVar24 != 0) {
                  *(long **)(lVar24 + 8) = plVar9;
                  goto LAB_00297b98;
                }
                *(long **)(lVar19 + 8) = plVar9;
                *(long **)(lVar19 + 0x10) = plVar9;
              }
              else {
LAB_00297b98:
                *(long **)(lVar19 + 0x10) = plVar9;
              }
              *(int *)(lVar19 + 0x24) = *(int *)(lVar19 + 0x20) + -0x10;
            }
            else {
              iVar13 = *(int *)(param_1 + 0x2c);
              iVar20 = 0;
              if (iVar13 != 0) {
                iVar20 = (iVar15 + -0x20) / iVar13;
              }
              iVar23 = iVar13 * iVar20 + 0x20;
            }
          }
          plVar14 = (long *)cvMemStorageAlloc(lVar19,(long)iVar23);
          *(int *)((long)plVar14 + 0x14) = iVar23 + -0x20;
          plVar14[3] = (long)plVar14 + 0x27U & 0xfffffffffffffff8;
          plVar14[1] = 0;
          *plVar14 = 0;
        }
        else {
          *(long *)(param_1 + 0x50) = plVar14[1];
        }
        plVar9 = *(long **)(param_1 + 0x58);
        if (plVar9 == (long *)0x0) {
          iVar13 = *(int *)((long)plVar14 + 0x14);
          lVar19 = plVar14[3] + (long)iVar13;
          *(long **)(param_1 + 0x58) = plVar14;
          iVar20 = 0;
          if (*(int *)(param_1 + 0x2c) != 0) {
            iVar20 = iVar13 / *(int *)(param_1 + 0x2c);
          }
          plVar14[1] = (long)plVar14;
          *plVar14 = (long)plVar14;
          plVar14[3] = lVar19;
          plVar9 = plVar14;
LAB_0029792c:
          *(long *)(param_1 + 0x38) = lVar19;
          *(long *)(param_1 + 0x30) = lVar19;
          lVar19 = plVar9[3];
        }
        else {
          lVar19 = *plVar9;
          *plVar14 = lVar19;
          plVar14[1] = (long)plVar9;
          *plVar9 = (long)plVar14;
          iVar13 = *(int *)((long)plVar14 + 0x14);
          plVar21 = (long *)*plVar14;
          iVar23 = *(int *)(param_1 + 0x2c);
          *(long **)(lVar19 + 8) = plVar14;
          lVar19 = plVar14[3] + (long)iVar13;
          plVar14[3] = lVar19;
          iVar20 = 0;
          if (iVar23 != 0) {
            iVar20 = iVar13 / iVar23;
          }
          if (plVar14 == plVar21) goto LAB_0029792c;
          *(long **)(param_1 + 0x58) = plVar14;
          plVar9 = plVar14;
        }
        *(undefined4 *)(plVar14 + 2) = 0;
        iVar13 = 0;
        while( true ) {
          *(int *)(plVar14 + 2) = iVar20 + iVar13;
          plVar14 = (long *)plVar14[1];
          if (plVar14 == plVar9) break;
          iVar13 = (int)plVar14[2];
        }
        *(undefined4 *)((long)plVar9 + 0x14) = 0;
        iVar20 = 0;
        iVar13 = (int)plVar9[2];
      }
      else {
        iVar20 = *(int *)((long)plVar9 + 0x14);
        lVar19 = plVar9[3];
      }
      iVar15 = *(int *)(param_1 + 0x28);
      iVar23 = iVar13;
      if (param_3 < iVar13) {
        iVar23 = param_3;
      }
      *(int *)(plVar9 + 2) = iVar13 - iVar23;
      *(int *)((long)plVar9 + 0x14) = iVar23 + iVar20;
      param_3 = param_3 - iVar23;
      *(int *)(param_1 + 0x28) = iVar15 + iVar23;
      pvVar8 = (void *)(lVar19 - iVar1 * iVar23);
      plVar9[3] = (long)pvVar8;
      if (param_2 != (void *)0x0) {
        memcpy(pvVar8,(void *)((long)param_2 + (long)(param_3 * iVar1)),(long)(iVar1 * iVar23));
      }
    }
  }
  return;
}


==================================================================

### FUNC 00298324 (892 bytes) name=cvSeqPopMulti

void cvSeqPopMulti(long param_1,void *param_2,int param_3,int param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  int iVar10;
  long lVar11;
  char *pcVar12;
  long lVar13;
  long *plVar14;
  long *plVar15;
  long lVar16;
  long *plVar17;
  size_t sVar18;
  void *pvVar19;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar6 = s_NULL_sequence_pointer_004643e0[0x14];
    uVar5 = s_NULL_sequence_pointer_004643e0._8_8_;
    uVar4 = s_NULL_sequence_pointer_004643e0._0_8_;
    *(undefined4 *)(pcVar12 + 0x10) = s_NULL_sequence_pointer_004643e0._16_4_;
    pcVar12[0x14] = cVar6;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    cv::error(-0x1b,(String *)&local_10,"void cvSeqPopMulti(CvSeq*, void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x5f7);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 < 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x26);
    uVar9 = s_number_of_removed_elements_is_ne_004643f8._36_2_;
    uVar8 = s_number_of_removed_elements_is_ne_004643f8._24_8_;
    uVar7 = s_number_of_removed_elements_is_ne_004643f8._16_8_;
    uVar5 = s_number_of_removed_elements_is_ne_004643f8._8_8_;
    uVar4 = s_number_of_removed_elements_is_ne_004643f8._0_8_;
    *(undefined4 *)(pcVar12 + 0x20) = s_number_of_removed_elements_is_ne_004643f8._32_4_;
    *(undefined2 *)(pcVar12 + 0x24) = uVar9;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    cv::error(-0xc9,(String *)&local_10,"void cvSeqPopMulti(CvSeq*, void*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x5f9);
    cv::String::deallocate((String *)&local_10);
  }
  iVar1 = *(int *)(param_1 + 0x28);
  if (iVar1 < param_3) {
    param_3 = iVar1;
  }
  if (param_4 == 0) {
    if (param_2 != (void *)0x0) {
      param_2 = (void *)((long)param_2 + (long)(param_3 * *(int *)(param_1 + 0x2c)));
    }
    if (0 < param_3) {
      while( true ) {
        plVar15 = *(long **)(param_1 + 0x58);
        iVar2 = *(int *)(param_1 + 0x2c);
        lVar11 = *(long *)(param_1 + 0x38);
        plVar14 = (long *)*plVar15;
        iVar10 = *(int *)((long)plVar14 + 0x14);
        iVar3 = param_3;
        if (iVar10 < param_3) {
          iVar3 = iVar10;
        }
        iVar10 = iVar10 - iVar3;
        *(int *)((long)plVar14 + 0x14) = iVar10;
        param_3 = param_3 - iVar3;
        *(int *)(param_1 + 0x28) = iVar1 - iVar3;
        sVar18 = (size_t)(iVar3 * iVar2);
        lVar13 = -sVar18;
        pvVar19 = (void *)(lVar11 + lVar13);
        *(void **)(param_1 + 0x38) = pvVar19;
        if (param_2 != (void *)0x0) {
          param_2 = (void *)((long)param_2 + lVar13);
          memcpy(param_2,pvVar19,sVar18);
          plVar15 = *(long **)(param_1 + 0x58);
          plVar14 = (long *)*plVar15;
          iVar10 = *(int *)((long)plVar14 + 0x14);
        }
        if (iVar10 == 0) {
          if (plVar15 == plVar14) {
            lVar11 = *(long *)(param_1 + 0x30);
            iVar1 = ((int)lVar11 - (int)plVar14[3]) + (int)plVar14[2] * *(int *)(param_1 + 0x2c);
            *(int *)((long)plVar14 + 0x14) = iVar1;
            plVar14[3] = lVar11 - iVar1;
            *(undefined8 *)(param_1 + 0x58) = 0;
            *(undefined8 *)(param_1 + 0x30) = 0;
                    /* try { // try from 00298694 to 00398733 has its CatchHandler @ 00298640 */
            *(undefined8 *)(param_1 + 0x38) = 0;
            *(undefined4 *)(param_1 + 0x28) = 0;
          }
          else {
            lVar13 = *plVar14;
            *(int *)((long)plVar14 + 0x14) =
                 (int)*(undefined8 *)(param_1 + 0x30) - (int)*(undefined8 *)(param_1 + 0x38);
            lVar16 = plVar14[1];
            lVar11 = *(long *)(lVar13 + 0x18) +
                     (long)(*(int *)(lVar13 + 0x14) * *(int *)(param_1 + 0x2c));
            *(long *)(param_1 + 0x38) = lVar11;
            *(long *)(param_1 + 0x30) = lVar11;
            *(long *)(lVar13 + 8) = lVar16;
            *(long *)plVar14[1] = lVar13;
          }
          plVar14[1] = *(long *)(param_1 + 0x50);
          *(long **)(param_1 + 0x50) = plVar14;
        }
        if (param_3 < 1) break;
        iVar1 = *(int *)(param_1 + 0x28);
      }
    }
  }
  else if (0 < param_3) {
    while( true ) {
      plVar15 = *(long **)(param_1 + 0x58);
      iVar2 = *(int *)(param_1 + 0x2c);
      iVar10 = *(int *)((long)plVar15 + 0x14);
      lVar11 = plVar15[2];
      iVar3 = param_3;
      if (iVar10 < param_3) {
        iVar3 = iVar10;
      }
      iVar10 = iVar10 - iVar3;
      *(int *)((long)plVar15 + 0x14) = iVar10;
      *(int *)(param_1 + 0x28) = iVar1 - iVar3;
      param_3 = param_3 - iVar3;
      *(int *)(plVar15 + 2) = (int)lVar11 + iVar3;
      sVar18 = (size_t)(iVar3 * iVar2);
      pvVar19 = param_2;
      if (param_2 != (void *)0x0) {
        pvVar19 = (void *)((long)param_2 + sVar18);
        memcpy(param_2,(void *)plVar15[3],sVar18);
        plVar15 = *(long **)(param_1 + 0x58);
        iVar10 = *(int *)((long)plVar15 + 0x14);
      }
      lVar11 = plVar15[3] + sVar18;
      plVar15[3] = lVar11;
      if (iVar10 == 0) {
        plVar14 = (long *)*plVar15;
        if (plVar14 == plVar15) {
          lVar13 = *(long *)(param_1 + 0x30);
                    /* catch() { ... } // from try @ 00298694 with catch @ 00298640
                       catch() { ... } // from try @ 00298784 with catch @ 00298640
                       catch() { ... } // from try @ 00299ba0 with catch @ 00298640
                       catch() { ... } // from try @ 00299db8 with catch @ 00298640
                       catch() { ... } // from try @ 00299ddc with catch @ 00298640
                       catch() { ... } // from try @ 0029a08c with catch @ 00298640
                       catch() { ... } // from try @ 0029a0b8 with catch @ 00298640
                       catch() { ... } // from try @ 0029a0cc with catch @ 00298640
                       catch() { ... } // from try @ 0029a160 with catch @ 00298640 */
          iVar1 = ((int)lVar13 - (int)lVar11) + (int)plVar15[2] * *(int *)(param_1 + 0x2c);
          *(int *)((long)plVar15 + 0x14) = iVar1;
          plVar15[3] = lVar13 - iVar1;
          *(undefined8 *)(param_1 + 0x58) = 0;
          *(undefined8 *)(param_1 + 0x30) = 0;
          *(undefined8 *)(param_1 + 0x38) = 0;
          *(undefined4 *)(param_1 + 0x28) = 0;
        }
        else {
          iVar1 = (int)plVar15[2];
          iVar3 = iVar1 * *(int *)(param_1 + 0x2c);
          *(int *)((long)plVar15 + 0x14) = iVar3;
          plVar15[3] = lVar11 - iVar3;
          plVar17 = plVar15;
          iVar3 = iVar1;
          while( true ) {
            *(int *)(plVar17 + 2) = iVar3 - iVar1;
            plVar17 = (long *)plVar17[1];
            if (plVar17 == plVar15) break;
            iVar3 = (int)plVar17[2];
          }
          lVar11 = plVar15[1];
          *(long *)(param_1 + 0x58) = lVar11;
          plVar14[1] = lVar11;
          *(long **)plVar15[1] = plVar14;
        }
        plVar15[1] = *(long *)(param_1 + 0x50);
        *(long **)(param_1 + 0x50) = plVar15;
      }
      if (param_3 < 1) break;
      iVar1 = *(int *)(param_1 + 0x28);
      param_2 = pvVar19;
    }
  }
  return;
}


==================================================================

### FUNC 002986c8 (124 bytes) name=cvClearSeq

void cvClearSeq(long param_1)

{
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvClearSeq(CvSeq*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x63b);
    cv::String::deallocate((String *)&local_10);
  }
  cvSeqPopMulti(param_1,0,*(undefined4 *)(param_1 + 0x28),0);
  return;
}


==================================================================

### FUNC 00298758 (848 bytes) name=cvSeqSlice

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long cvSeqSlice(uint *param_1,undefined8 param_2,long param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  uint uVar8;
  uint uVar9;
  char *pcVar10;
  long lVar11;
  long *plVar12;
  undefined8 *puVar13;
  ulong uVar14;
  long *plVar15;
  long lVar16;
  long *plVar17;
  uint uVar18;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  long local_18;
  
  uVar1 = (uint)param_2;
                    /* try { // try from 0029877c to 0039877f has its CatchHandler @ 0029a150 */
                    /* try { // try from 00298784 to 003987bf has its CatchHandler @ 00298640 */
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42990000)) {
    local_40 = 0;
    local_38 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_40,0x17);
    cVar7 = s_Invalid_sequence_header_00464420[0x16];
    uVar6 = s_Invalid_sequence_header_00464420._20_2_;
    uVar5 = s_Invalid_sequence_header_00464420._8_8_;
    uVar4 = s_Invalid_sequence_header_00464420._0_8_;
                    /* try { // try from 002987c4 to 003987e7 has its CatchHandler @ 0029a094 */
    *(undefined4 *)(pcVar10 + 0x10) = s_Invalid_sequence_header_00464420._16_4_;
    *(undefined2 *)(pcVar10 + 0x14) = uVar6;
    pcVar10[0x16] = cVar7;
    *(undefined8 *)pcVar10 = uVar4;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    cv::error(-5,(String *)&local_40,"CvSeq* cvSeqSlice(const CvSeq*, CvSlice, CvMemStorage*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x649);
    cv::String::deallocate((String *)&local_40);
  }
  if ((param_3 == 0) && (param_3 = *(long *)(param_1 + 0x12), param_3 == 0)) {
    local_40 = param_3;
    local_38 = param_3;
    pcVar10 = (char *)cv::String::allocate((String *)&local_40,0x14);
    uVar5 = s_NULL_storage_pointer_0043dfe8._8_8_;
    uVar4 = s_NULL_storage_pointer_0043dfe8._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_NULL_storage_pointer_0043dfe8._16_4_;
    *(undefined8 *)pcVar10 = uVar4;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    cv::error(-0x1b,(String *)&local_40,
              "CvSeq* cvSeqSlice(const CvSeq*, CvSlice, CvMemStorage*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x64f);
    cv::String::deallocate((String *)&local_40);
  }
  uVar2 = param_1[0xb];
  uVar8 = cvSliceLength(param_2,param_1);
  if ((int)uVar1 < 0) {
    uVar9 = param_1[10];
    uVar18 = uVar9 + uVar1;
  }
  else {
    uVar9 = param_1[10];
    uVar18 = uVar1 - uVar9;
    if ((int)uVar1 < (int)uVar9) {
      uVar18 = uVar1;
    }
  }
  if (uVar8 <= uVar9) {
    if (uVar18 < uVar9) goto LAB_00298844;
    if (uVar8 == 0) {
      lVar11 = cvCreateSeq(*param_1,(long)(int)param_1[1],(long)(int)uVar2,param_3);
                    /* try { // try from 00298a9c to 00398a9f has its CatchHandler @ 0029a0d8 */
      return lVar11;
    }
  }
  local_40 = 0;
  local_38 = 0;
  puVar13 = (undefined8 *)cv::String::allocate((String *)&local_40,0x12);
  uVar5 = DAT_00464440;
  uVar4 = DAT_00464438;
  *(undefined2 *)(puVar13 + 2) = _LAB_00464448;
  *puVar13 = uVar4;
  puVar13[1] = uVar5;
  cv::error(-0xd3,(String *)&local_40,"CvSeq* cvSeqSlice(const CvSeq*, CvSlice, CvMemStorage*, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x65a);
  cv::String::deallocate((String *)&local_40);
LAB_00298844:
  lVar16 = (long)(int)uVar2;
                    /* try { // try from 00298854 to 00398857 has its CatchHandler @ 0029a174 */
  lVar11 = cvCreateSeq(*param_1,(long)(int)param_1[1],lVar16,param_3);
  if (0 < (int)uVar8) {
    cvStartReadSeq(param_1,&local_40,0);
    cvSetSeqReaderPos(&local_40,uVar18,0);
    uVar14 = 0;
    if (lVar16 != 0) {
      uVar14 = (local_18 - local_28) / lVar16;
    }
    if (param_4 == 0) {
      plVar17 = (long *)0x0;
      plVar15 = (long *)0x0;
      do {
                    /* try { // try from 00298910 to 003989e7 has its CatchHandler @ 0029a164 */
        uVar1 = (uint)uVar14;
        if ((int)uVar8 < (int)(uint)uVar14) {
          uVar1 = uVar8;
        }
        plVar12 = (long *)cvMemStorageAlloc(param_3,0x20);
        if (plVar17 == (long *)0x0) {
          plVar12[1] = (long)plVar12;
          *plVar12 = (long)plVar12;
          *(long **)(lVar11 + 0x58) = plVar12;
          *(undefined4 *)(plVar12 + 2) = 0;
          plVar17 = plVar12;
        }
        else {
          *plVar12 = (long)plVar15;
          plVar12[1] = (long)plVar17;
          *plVar17 = (long)plVar12;
                    /* try { // try from 002988b8 to 003988bb has its CatchHandler @ 0029a16c */
          plVar15[1] = (long)plVar12;
          *(int *)(plVar12 + 2) = (int)plVar15[2] + *(int *)((long)plVar15 + 0x14);
        }
        plVar12[3] = local_28;
        uVar8 = uVar8 - uVar1;
        iVar3 = *(int *)(lVar11 + 0x28);
        *(uint *)((long)plVar12 + 0x14) = uVar1;
        *(uint *)(lVar11 + 0x28) = iVar3 + uVar1;
        local_30 = *(long *)(local_30 + 8);
        local_28 = *(long *)(local_30 + 0x18);
        uVar14 = (ulong)*(uint *)(local_30 + 0x14);
        plVar15 = plVar12;
      } while (0 < (int)uVar8);
    }
    else {
      do {
        uVar1 = (uint)uVar14;
        if ((int)uVar8 < (int)(uint)uVar14) {
          uVar1 = uVar8;
        }
        uVar8 = uVar8 - uVar1;
        cvSeqPushMulti(lVar11,local_28,uVar1,0);
        local_30 = *(long *)(local_30 + 8);
        local_28 = *(long *)(local_30 + 0x18);
        uVar14 = (ulong)*(uint *)(local_30 + 0x14);
      } while (0 < (int)uVar8);
    }
  }
  return lVar11;
}


==================================================================

### FUNC 00298ae4 (956 bytes) name=cvSeqRemoveSlice

void cvSeqRemoveSlice(uint *param_1,undefined8 param_2)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  char *pcVar11;
  size_t sVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  long lVar16;
  undefined1 auStack_80 [24];
  void *local_68;
  void *local_60;
  void *local_58;
  undefined8 local_40;
  undefined8 local_38;
  void *local_28;
  void *local_20;
  void *local_18;
  
  uVar15 = (uint)param_2;
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42990000)) {
    local_40 = 0;
    local_38 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_40,0x17);
    cVar7 = s_Invalid_sequence_header_00464420[0x16];
    uVar6 = s_Invalid_sequence_header_00464420._20_2_;
    uVar5 = s_Invalid_sequence_header_00464420._8_8_;
    uVar4 = s_Invalid_sequence_header_00464420._0_8_;
    *(undefined4 *)(pcVar11 + 0x10) = s_Invalid_sequence_header_00464420._16_4_;
    *(undefined2 *)(pcVar11 + 0x14) = uVar6;
    pcVar11[0x16] = cVar7;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    cv::error(-5,(String *)&local_40,"void cvSeqRemoveSlice(CvSeq*, CvSlice)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x692);
    cv::String::deallocate((String *)&local_40);
  }
  iVar10 = cvSliceLength(param_2,param_1);
  uVar2 = param_1[10];
  if ((int)uVar15 < 0) {
    uVar13 = uVar2 + uVar15;
  }
  else {
    uVar13 = uVar15 - uVar2;
    if ((int)uVar15 < (int)uVar2) {
      uVar13 = uVar15;
    }
  }
  if (uVar2 <= uVar13) {
    local_40 = 0;
    local_38 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_40,0x21);
    uVar9 = s_start_slice_index_is_out_of_rang_00464450._24_8_;
    uVar8 = s_start_slice_index_is_out_of_rang_00464450._16_8_;
    uVar5 = s_start_slice_index_is_out_of_rang_00464450._8_8_;
    uVar4 = s_start_slice_index_is_out_of_rang_00464450._0_8_;
    pcVar11[0x20] = s_start_slice_index_is_out_of_rang_00464450[0x20];
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    *(undefined8 *)(pcVar11 + 0x10) = uVar8;
    *(undefined8 *)(pcVar11 + 0x18) = uVar9;
    cv::error(-0xd3,(String *)&local_40,"void cvSeqRemoveSlice(CvSeq*, CvSlice)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x69d);
    cv::String::deallocate((String *)&local_40);
  }
  iVar1 = iVar10 + uVar13;
  if ((int)uVar2 <= iVar1) {
    cvSeqPopMulti(param_1,0,uVar2 - uVar13,0);
    cvSeqPopMulti(param_1,0,iVar1 - uVar2,1);
    return;
  }
  uVar15 = param_1[0xb];
  cvStartReadSeq(param_1,auStack_80,0);
  cvStartReadSeq(param_1,&local_40,0);
  if ((int)(uVar2 - iVar1) < (int)uVar13) {
    uVar2 = param_1[10];
    sVar12 = (size_t)(int)uVar15;
    cvSetSeqReaderPos(auStack_80,uVar13,0);
    iVar3 = uVar2 - iVar1;
    iVar14 = 0;
    cvSetSeqReaderPos(&local_40,iVar1);
    if (0 < iVar3) {
      do {
        while( true ) {
          memcpy(local_68,local_28,sVar12);
          local_68 = (void *)((long)local_68 + sVar12);
          if (local_68 < local_58) break;
          cvChangeSeqBlock(auStack_80,1);
          local_28 = (void *)((long)local_28 + sVar12);
          if (local_28 < local_18) goto LAB_00298d90;
LAB_00298de8:
          iVar14 = iVar14 + 1;
          cvChangeSeqBlock(&local_40,1);
          if (iVar14 == iVar3) goto LAB_00298e00;
        }
        local_28 = (void *)((long)local_28 + sVar12);
        if (local_18 <= local_28) goto LAB_00298de8;
LAB_00298d90:
        iVar14 = iVar14 + 1;
      } while (iVar14 != iVar3);
    }
LAB_00298e00:
    cvSeqPopMulti(param_1,0,iVar10,0);
    return;
  }
  cvSetSeqReaderPos(auStack_80,iVar1,0);
  cvSetSeqReaderPos(&local_40,uVar13,0);
  if (0 < (int)uVar13) {
    sVar12 = (size_t)(int)uVar15;
    uVar15 = 0;
    lVar16 = -sVar12;
    do {
      while (local_68 = (void *)((long)local_68 + lVar16), local_68 < local_60) {
        cvChangeSeqBlock(auStack_80,0xffffffff);
        local_28 = (void *)((long)local_28 + lVar16);
        if (local_20 <= local_28) goto LAB_00298c4c;
LAB_00298ca0:
        uVar15 = uVar15 + 1;
        cvChangeSeqBlock(&local_40,0xffffffff);
        memcpy(local_68,local_28,sVar12);
        if (uVar15 == uVar13) goto LAB_00298cc8;
      }
      local_28 = (void *)((long)local_28 + lVar16);
      if (local_28 < local_20) goto LAB_00298ca0;
LAB_00298c4c:
      uVar15 = uVar15 + 1;
      memcpy(local_68,local_28,sVar12);
    } while (uVar15 != uVar13);
  }
LAB_00298cc8:
  cvSeqPopMulti(param_1,0,iVar10,1);
  return;
}


==================================================================

### FUNC 00298ec8 (1540 bytes) name=cvSeqInsertSlice

void cvSeqInsertSlice(uint *param_1,int param_2,uint *param_3)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  undefined4 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  uint uVar12;
  char *pcVar13;
  ulong uVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  long lVar18;
  size_t sVar19;
  undefined1 auStack_100 [32];
  undefined1 auStack_e0 [24];
  void *local_c8;
  void *local_c0;
  void *local_b8;
  undefined8 local_a0;
  undefined8 local_98;
  void *local_88;
  void *local_80;
  void *local_78;
  undefined8 local_60;
  undefined8 local_58;
  
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff0000) != 0x42990000)) {
    local_60 = 0;
    local_58 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_60,0x23);
    cVar7 = s_Invalid_destination_sequence_hea_00464478[0x22];
    uVar6 = s_Invalid_destination_sequence_hea_00464478._24_8_;
    uVar5 = s_Invalid_destination_sequence_hea_00464478._16_8_;
    uVar4 = s_Invalid_destination_sequence_hea_00464478._8_8_;
    uVar3 = s_Invalid_destination_sequence_hea_00464478._0_8_;
    *(undefined2 *)(pcVar13 + 0x20) = s_Invalid_destination_sequence_hea_00464478._32_2_;
    pcVar13[0x22] = cVar7;
    *(undefined8 *)pcVar13 = uVar3;
    *(undefined8 *)(pcVar13 + 8) = uVar4;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    cv::error(-5,(String *)&local_60,"void cvSeqInsertSlice(CvSeq*, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x6dc);
    cv::String::deallocate((String *)&local_60);
  }
  if (param_3 == (uint *)0x0) {
LAB_00298f98:
    local_60 = 0;
    local_58 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_60,0x23);
    cVar7 = s_Source_is_not_a_sequence_nor_mat_004644a0[0x22];
    uVar6 = s_Source_is_not_a_sequence_nor_mat_004644a0._24_8_;
    uVar5 = s_Source_is_not_a_sequence_nor_mat_004644a0._16_8_;
    uVar4 = s_Source_is_not_a_sequence_nor_mat_004644a0._8_8_;
    uVar3 = s_Source_is_not_a_sequence_nor_mat_004644a0._0_8_;
    *(undefined2 *)(pcVar13 + 0x20) = s_Source_is_not_a_sequence_nor_mat_004644a0._32_2_;
    pcVar13[0x22] = cVar7;
    *(undefined8 *)pcVar13 = uVar3;
    *(undefined8 *)(pcVar13 + 8) = uVar4;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    cv::error(-5,(String *)&local_60,"void cvSeqInsertSlice(CvSeq*, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x6e2);
    cv::String::deallocate((String *)&local_60);
    uVar12 = *param_3;
  }
  else {
    uVar12 = *param_3;
    if ((uVar12 & 0xffff0000) == 0x42990000) goto LAB_002990d8;
    if (((((uVar12 & 0xffff0000) != 0x42420000) || ((int)param_3[9] < 1)) || ((int)param_3[8] < 1))
       || (*(long *)(param_3 + 6) == 0)) goto LAB_00298f98;
  }
  uVar14 = (ulong)uVar12;
  if ((uVar12 >> 0xe & 1) == 0) {
LAB_00299024:
    local_60 = 0;
    local_58 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_60,0x2c);
    uVar8 = s_The_source_array_must_be_1d_coni_004644c8._40_4_;
    uVar6 = s_The_source_array_must_be_1d_coni_004644c8._24_8_;
    uVar5 = s_The_source_array_must_be_1d_coni_004644c8._16_8_;
    uVar4 = s_The_source_array_must_be_1d_coni_004644c8._8_8_;
    uVar3 = s_The_source_array_must_be_1d_coni_004644c8._0_8_;
    *(undefined8 *)(pcVar13 + 0x20) = s_The_source_array_must_be_1d_coni_004644c8._32_8_;
    *(undefined4 *)(pcVar13 + 0x28) = uVar8;
    *(undefined8 *)pcVar13 = uVar3;
    *(undefined8 *)(pcVar13 + 8) = uVar4;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    cv::error(-5,(String *)&local_60,"void cvSeqInsertSlice(CvSeq*, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x6e5);
    cv::String::deallocate((String *)&local_60);
    uVar14 = (ulong)*param_3;
    uVar15 = param_3[9];
    uVar12 = param_3[8];
  }
  else {
    uVar12 = param_3[8];
    uVar15 = param_3[9];
    if ((uVar12 != 1) && (uVar15 != 1)) goto LAB_00299024;
  }
  param_3 = (uint *)cvMakeSeqHeaderForArray
                              (0,0x60,((uint)(uVar14 >> 3) & 0x1ff) + 1 <<
                                      (ulong)((uint)(0xfa50L >> (((uint)uVar14 & 7) << 1)) & 3),
                               *(undefined8 *)(param_3 + 6),uVar15 + uVar12 + -1,(String *)&local_60
                               ,auStack_100);
LAB_002990d8:
  if (param_1[0xb] != param_3[0xb]) {
    local_a0 = 0;
    local_98 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_a0,0x3c);
    uVar11 = s_Source_and_destination_sequence_e_004644f8._48_8_;
    uVar10 = s_Source_and_destination_sequence_e_004644f8._40_8_;
    uVar9 = s_Source_and_destination_sequence_e_004644f8._32_8_;
    uVar6 = s_Source_and_destination_sequence_e_004644f8._24_8_;
    uVar5 = s_Source_and_destination_sequence_e_004644f8._16_8_;
    uVar4 = s_Source_and_destination_sequence_e_004644f8._8_8_;
    uVar3 = s_Source_and_destination_sequence_e_004644f8._0_8_;
    *(undefined4 *)(pcVar13 + 0x38) = s_Source_and_destination_sequence_e_004644f8._56_4_;
    *(undefined8 *)(pcVar13 + 0x30) = uVar11;
    *(undefined8 *)pcVar13 = uVar3;
    *(undefined8 *)(pcVar13 + 8) = uVar4;
    *(undefined8 *)(pcVar13 + 0x10) = uVar5;
    *(undefined8 *)(pcVar13 + 0x18) = uVar6;
    *(undefined8 *)(pcVar13 + 0x20) = uVar9;
    *(undefined8 *)(pcVar13 + 0x28) = uVar10;
    cv::error(-0xd1,(String *)&local_a0,"void cvSeqInsertSlice(CvSeq*, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x6ef);
    cv::String::deallocate((String *)&local_a0);
  }
  uVar12 = param_3[10];
  if (uVar12 == 0) {
    return;
  }
  uVar16 = param_1[10];
  uVar15 = uVar16;
  if (-1 < param_2) {
    uVar15 = 0;
  }
  uVar1 = uVar16;
  if ((int)(uVar15 + param_2) <= (int)uVar16) {
    uVar1 = 0;
  }
  uVar1 = (uVar15 + param_2) - uVar1;
  if (uVar16 < uVar1) {
    local_a0 = 0;
    local_98 = 0;
    cv::String::allocate((String *)&local_a0,0);
    cv::error(-0xd3,(String *)&local_a0,"void cvSeqInsertSlice(CvSeq*, int, const CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x6fb);
    cv::String::deallocate((String *)&local_a0);
    uVar15 = param_1[0xb];
  }
  else {
    uVar15 = param_1[0xb];
  }
  if ((int)uVar1 < (int)uVar16 >> 1) {
    uVar16 = 0;
    cvSeqPushMulti(param_1,0,uVar12,1);
    sVar19 = (size_t)(int)uVar15;
    cvStartReadSeq(param_1,auStack_e0,0);
    cvStartReadSeq(param_1,(String *)&local_a0,0);
    cvSetSeqReaderPos((String *)&local_a0,uVar12,0);
    if (0 < (int)uVar1) {
      do {
        memcpy(local_c8,local_88,sVar19);
        local_c8 = (void *)((long)local_c8 + sVar19);
        if (local_c8 < local_b8) {
          local_88 = (void *)((long)local_88 + sVar19);
          if (local_78 <= local_88) goto LAB_00299448;
        }
        else {
          cvChangeSeqBlock(auStack_e0,1);
          local_88 = (void *)((long)local_88 + sVar19);
          if (local_78 <= local_88) {
LAB_00299448:
            cvChangeSeqBlock((String *)&local_a0,1);
          }
        }
        uVar16 = uVar16 + 1;
      } while (uVar16 != uVar1);
    }
  }
  else {
    iVar2 = uVar16 - uVar1;
    cvSeqPushMulti(param_1,0,uVar12,0);
    cvStartReadSeq(param_1,auStack_e0,0);
    cvStartReadSeq(param_1,(String *)&local_a0,0);
    cvSetSeqReaderPos((String *)&local_a0,uVar16,0);
    cvSetSeqReaderPos(auStack_e0,param_1[10],0);
    if (0 < iVar2) {
      sVar19 = (size_t)(int)uVar15;
      iVar17 = 0;
      lVar18 = -sVar19;
      do {
        while (local_c8 = (void *)((long)local_c8 + lVar18), local_c8 < local_c0) {
          cvChangeSeqBlock(auStack_e0,0xffffffff);
          local_88 = (void *)((long)local_88 + lVar18);
          if (local_80 <= local_88) goto LAB_00299224;
LAB_00299278:
          iVar17 = iVar17 + 1;
          cvChangeSeqBlock((String *)&local_a0,0xffffffff);
          memcpy(local_c8,local_88,sVar19);
          if (iVar17 == iVar2) goto LAB_002992a0;
        }
        local_88 = (void *)((long)local_88 + lVar18);
        if (local_88 < local_80) goto LAB_00299278;
LAB_00299224:
        iVar17 = iVar17 + 1;
        memcpy(local_c8,local_88,sVar19);
      } while (iVar17 != iVar2);
    }
  }
LAB_002992a0:
  uVar16 = 0;
  sVar19 = (size_t)(int)uVar15;
  cvStartReadSeq(param_3,(String *)&local_a0);
  cvSetSeqReaderPos(auStack_e0,uVar1,0);
  if (0 < (int)uVar12) {
    do {
      while( true ) {
        memcpy(local_c8,local_88,sVar19);
        local_c8 = (void *)((long)local_c8 + sVar19);
        if (local_c8 < local_b8) break;
        cvChangeSeqBlock(auStack_e0,1);
        local_88 = (void *)((long)local_88 + sVar19);
        if (local_88 < local_78) goto LAB_002992ec;
LAB_00299344:
        uVar16 = uVar16 + 1;
        cvChangeSeqBlock((String *)&local_a0,1);
        if (uVar16 == uVar12) {
          return;
        }
      }
      local_88 = (void *)((long)local_88 + sVar19);
      if (local_78 <= local_88) goto LAB_00299344;
LAB_002992ec:
      uVar16 = uVar16 + 1;
    } while (uVar16 != uVar12);
  }
  return;
}


==================================================================

### FUNC 00299530 (4900 bytes) name=cvSeqSort

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvSeqSort(uint *param_1,code *param_2,undefined8 param_3)

{
  uint uVar1;
  undefined1 uVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  ulong uVar6;
  ulong uVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  char *pcVar14;
  long lVar15;
  ulong uVar16;
  undefined8 *puVar17;
  long lVar18;
  ulong uVar19;
  long lVar20;
  int iVar21;
  uint uVar22;
  ulong local_eb8;
  ulong local_eb0;
  undefined8 local_e00;
  undefined8 uStack_df8;
  code *local_df0;
  ulong uStack_de8;
  ulong local_de0;
  ulong uStack_dd8;
  undefined8 local_dd0;
  undefined8 uStack_dc8;
  undefined8 local_dc0;
  undefined8 uStack_db8;
  code *local_db0;
  ulong uStack_da8;
  ulong local_da0;
  ulong uStack_d98;
  undefined8 local_d90;
  undefined8 uStack_d88;
  undefined8 local_d80;
  undefined8 uStack_d78;
  code *local_d70;
  ulong uStack_d68;
  ulong local_d60;
  ulong uStack_d58;
  undefined8 local_d50;
  undefined8 uStack_d48;
  undefined8 local_d40;
  undefined8 uStack_d38;
  code *local_d30;
  ulong uStack_d28;
  ulong local_d20;
  ulong uStack_d18;
  undefined8 local_d10;
  undefined8 uStack_d08;
  undefined8 local_d00;
  undefined8 uStack_cf8;
  code *local_cf0;
  ulong local_ce8;
  ulong local_ce0;
  ulong local_cd8;
  undefined8 local_cd0;
  undefined8 uStack_cc8;
  undefined8 local_cc0;
  undefined8 uStack_cb8;
  code *local_cb0;
  ulong local_ca8;
  ulong local_ca0;
  ulong uStack_c98;
  undefined8 local_c90;
  undefined8 uStack_c88;
  undefined8 local_c80;
  undefined8 uStack_c78;
  code *local_c70;
  ulong local_c68;
  ulong local_c60;
  ulong local_c58;
  undefined8 local_c50;
  undefined8 uStack_c48;
  undefined8 local_c40;
  undefined8 uStack_c38;
  code *local_c30;
  ulong local_c28;
  ulong local_c20;
  ulong local_c18;
  undefined8 local_c10;
  undefined8 uStack_c08;
  code *local_c00;
  ulong local_bf8 [3];
  code *local_be0;
  ulong local_bd8 [379];
  
  if (param_1 == (uint *)0x0) {
    iVar8 = -0x1b;
  }
  else {
    if ((*param_1 & 0xffff0000) == 0x42990000) goto LAB_002995ec;
    iVar8 = -5;
  }
  local_c00 = (code *)0x0;
  local_bf8[0] = 0;
  pcVar14 = (char *)cv::String::allocate((String *)&local_c00,0x12);
  uVar5 = s_Bad_input_sequence_00464538._8_8_;
  uVar4 = s_Bad_input_sequence_00464538._0_8_;
  *(undefined2 *)(pcVar14 + 0x10) = s_Bad_input_sequence_00464538._16_2_;
  *(undefined8 *)pcVar14 = uVar4;
  *(undefined8 *)(pcVar14 + 8) = uVar5;
  cv::error(iVar8,(String *)&local_c00,"void cvSeqSort(CvSeq*, CvCmpFunc, void*)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x77d);
  cv::String::deallocate((String *)&local_c00);
LAB_002995ec:
  if (param_2 == (code *)0x0) {
    local_c00 = param_2;
    local_bf8[0] = (ulong)param_2;
    puVar17 = (undefined8 *)cv::String::allocate((String *)&local_c00,0x15);
    uVar2 = LAB_00464564;
    uVar5 = _LAB_00464558;
    uVar4 = _DAT_00464550;
    *(undefined4 *)(puVar17 + 2) = _LAB_00464560;
    *(undefined1 *)((long)puVar17 + 0x14) = uVar2;
    *puVar17 = uVar4;
    puVar17[1] = uVar5;
    cv::error(-0x1b,(String *)&local_c00,"void cvSeqSort(CvSeq*, CvCmpFunc, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x780);
    cv::String::deallocate((String *)&local_c00);
  }
  if ((int)param_1[10] < 2) {
    return;
  }
  uVar1 = param_1[0xb];
  lVar18 = (long)(int)uVar1;
  lVar20 = -lVar18;
  cvStartReadSeq(param_1,&local_e00,0);
  uStack_da8 = uStack_de8 + lVar20;
  local_db0 = local_df0;
  local_c00 = local_df0;
  local_bf8[0] = uStack_de8;
  local_bf8[1] = local_de0;
  local_bf8[2] = uStack_dd8;
  local_dc0 = local_e00;
  uStack_db8 = uStack_df8;
  local_da0 = local_de0;
  uStack_d98 = uStack_dd8;
  local_d90 = local_dd0;
  uStack_d88 = uStack_dc8;
  if (uStack_da8 < local_de0) {
    cvChangeSeqBlock(&local_dc0,0xffffffff);
  }
  uVar19 = 0;
  local_be0 = local_db0;
  local_bd8[0] = uStack_da8;
  local_bd8[1] = local_da0;
  local_bd8[2] = uStack_d98;
LAB_00299740:
  uVar22 = (int)uVar19 - 1;
  if (local_df0 == local_db0) goto LAB_00299f48;
LAB_002997c0:
  iVar8 = cvGetSeqReaderPos(&local_dc0);
  iVar9 = cvGetSeqReaderPos(&local_e00);
  iVar8 = (iVar8 - iVar9) * uVar1;
  do {
    uVar19 = uStack_de8;
    if ((int)(uVar1 + iVar8) <= (int)(uVar1 * 7)) {
LAB_0029a1d4:
      local_c70 = local_df0;
                    /* catch() { ... } // from try @ 00299dcc with catch @ 0029a1e0
                       catch() { ... } // from try @ 00299e9c with catch @ 0029a1e0
                       catch() { ... } // from try @ 0029a18c with catch @ 0029a1e0 */
      local_c60 = local_de0;
      local_c58 = uStack_dd8;
      local_c68 = uStack_de8 + lVar18;
      local_c40 = local_e00;
      uStack_c38 = uStack_df8;
      local_c30 = local_df0;
      local_c28 = uStack_de8;
      local_c20 = local_de0;
      local_c18 = uStack_dd8;
                    /* catch() { ... } // from try @ 0029a250 with catch @ 0029a210
                       catch() { ... } // from try @ 0029a42c with catch @ 0029a210
                       catch() { ... } // from try @ 0029a510 with catch @ 0029a210 */
      local_c10 = local_dd0;
      uStack_c08 = uStack_dc8;
      local_c80 = local_e00;
      uStack_c78 = uStack_df8;
      local_c50 = local_dd0;
      uStack_c48 = uStack_dc8;
      if (uStack_dd8 <= uStack_de8 + lVar18) {
        cvChangeSeqBlock(&local_c80,1);
      }
      uStack_da8 = uStack_da8 + lVar18;
      if (uStack_d98 <= uStack_da8) {
        cvChangeSeqBlock(&local_dc0,1);
      }
      break;
    }
    iVar9 = 0;
    if (uVar1 != 0) {
      iVar9 = (int)(uVar1 + iVar8) / (int)uVar1;
    }
    local_d80 = local_e00;
    uStack_d78 = uStack_df8;
    local_d70 = local_df0;
    uStack_d68 = uStack_de8;
    local_d60 = local_de0;
    uStack_d58 = uStack_dd8;
    local_d50 = local_dd0;
    uStack_d48 = uStack_dc8;
    local_c80 = local_e00;
    uStack_c78 = uStack_df8;
    local_c70 = local_df0;
    local_c68 = uStack_de8;
    local_c60 = local_de0;
    local_c58 = uStack_dd8;
    local_c50 = local_dd0;
    uStack_c48 = uStack_dc8;
    local_cc0 = local_dc0;
    uStack_cb8 = uStack_db8;
    local_cb0 = local_db0;
    local_ca8 = uStack_da8;
    local_ca0 = local_da0;
    uStack_c98 = uStack_d98;
    local_c90 = local_d90;
    uStack_c88 = uStack_d88;
    local_d40 = local_dc0;
    uStack_d38 = uStack_db8;
    local_d30 = local_db0;
    uStack_d28 = uStack_da8;
    local_d20 = local_da0;
    uStack_d18 = uStack_d98;
    local_d10 = local_d90;
    uStack_d08 = uStack_d88;
    if (iVar9 < 0x29) {
      local_eb8 = uStack_de8;
      cvSetSeqReaderPos(&local_c80,iVar9 / 2,1);
      uVar16 = local_c68;
      cvSetSeqReaderPos(&local_c80,(iVar9 + -1) - iVar9 / 2,1);
      local_eb0 = local_c68;
      iVar8 = (*param_2)(uVar19,uVar16,param_3);
      if (iVar8 < 0) goto LAB_0029a3b4;
LAB_002999f8:
      iVar8 = (*param_2)(uVar16,local_eb0,param_3);
      if ((iVar8 < 1) &&
         (iVar8 = (*param_2)(local_eb8,local_eb0,param_3), uVar16 = local_eb8, -1 < iVar8)) {
        uVar16 = local_eb0;
      }
    }
    else {
      iVar21 = iVar9 >> 3;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar16 = local_c68;
      local_eb8 = local_c68;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar6 = local_c68;
      iVar8 = (*param_2)(uVar19,uVar16,param_3);
      if (iVar8 < 0) {
        iVar8 = (*param_2)(uVar16,uVar6,param_3);
        if ((-1 < iVar8) &&
           (iVar8 = (*param_2)(uVar19,uVar6,param_3), local_eb8 = uVar6, -1 < iVar8)) {
          local_eb8 = uVar19;
        }
      }
      else {
        iVar8 = (*param_2)(uVar16,uVar6,param_3);
        if ((iVar8 < 1) &&
           (iVar8 = (*param_2)(uVar19,uVar6,param_3), local_eb8 = uVar19, -1 < iVar8)) {
          local_eb8 = uVar6;
        }
      }
      cvSetSeqReaderPos(&local_c80,iVar21 * -3 + (iVar9 >> 1),1);
      uVar19 = local_c68;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar16 = local_c68;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar6 = local_c68;
      iVar8 = (*param_2)(uVar19,uVar16,param_3);
      if (iVar8 < 0) {
        iVar8 = (*param_2)(uVar16,uVar6,param_3);
        if ((-1 < iVar8) && (iVar8 = (*param_2)(uVar19,uVar6,param_3), uVar16 = uVar6, -1 < iVar8))
        {
          uVar16 = uVar19;
        }
      }
      else {
        iVar8 = (*param_2)(uVar16,uVar6,param_3);
        if ((iVar8 < 1) && (iVar8 = (*param_2)(uVar19,uVar6,param_3), uVar16 = uVar19, -1 < iVar8))
        {
          uVar16 = uVar6;
        }
      }
      cvSetSeqReaderPos(&local_c80,(iVar21 * -3 + iVar9 + -1) - iVar9 / 2,1);
      uVar19 = local_c68;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar6 = local_c68;
      local_eb0 = local_c68;
      cvSetSeqReaderPos(&local_c80,iVar21,1);
      uVar7 = local_c68;
      iVar8 = (*param_2)(uVar19,uVar6,param_3);
      if (iVar8 < 0) {
        iVar8 = (*param_2)(uVar6,uVar7,param_3);
        if ((-1 < iVar8) &&
           (iVar8 = (*param_2)(uVar19,uVar7,param_3), local_eb0 = uVar7, -1 < iVar8)) {
          local_eb0 = uVar19;
        }
      }
      else {
        iVar8 = (*param_2)(uVar6,uVar7,param_3);
        if ((iVar8 < 1) &&
           (iVar8 = (*param_2)(uVar19,uVar7,param_3), local_eb0 = uVar19, -1 < iVar8)) {
          local_eb0 = uVar7;
        }
      }
      iVar8 = (*param_2)(local_eb8,uVar16,param_3);
      if (-1 < iVar8) goto LAB_002999f8;
LAB_0029a3b4:
                    /* try { // try from 0029a3b8 to 0039a3bb has its CatchHandler @ 0029a4ec */
      iVar8 = (*param_2)(uVar16,local_eb0,param_3);
      if ((-1 < iVar8) &&
         (iVar8 = (*param_2)(local_eb8,local_eb0,param_3), uVar16 = local_eb0, -1 < iVar8)) {
        uVar16 = local_eb8;
      }
    }
    local_df0 = local_d70;
    local_e00 = local_d80;
    uStack_df8 = uStack_d78;
                    /* try { // try from 00299a34 to 00399a37 has its CatchHandler @ 0029a16c */
    local_de0 = local_d60;
    uStack_dd8 = uStack_d58;
    local_dd0 = local_d50;
    uStack_dc8 = uStack_d48;
    uVar19 = uVar16;
    if ((uStack_d68 != uVar16) && (uVar19 = uStack_d68, 0 < (int)uVar1)) {
      lVar15 = 0;
      do {
        uVar2 = *(undefined1 *)(uVar16 + lVar15);
        *(undefined1 *)(uVar16 + lVar15) = *(undefined1 *)(uStack_d68 + lVar15);
        *(undefined1 *)(uStack_d68 + lVar15) = uVar2;
        lVar15 = lVar15 + 1;
      } while ((int)lVar15 < (int)uVar1);
    }
    uStack_de8 = uVar19 + lVar18;
    if (uStack_d58 <= uStack_de8) {
      cvChangeSeqBlock(&local_e00,1);
    }
    bVar3 = false;
                    /* try { // try from 00299aa8 to 00399aab has its CatchHandler @ 0029a174 */
    local_d00 = local_e00;
    uStack_cf8 = uStack_df8;
    local_cf0 = local_df0;
    local_ce8 = uStack_de8;
    local_ce0 = local_de0;
    local_cd8 = uStack_dd8;
    local_cd0 = local_dd0;
    uStack_cc8 = uStack_dc8;
LAB_00299abc:
    while (uVar16 = uStack_de8, uStack_da8 != uStack_de8) {
      iVar8 = (*param_2)(uStack_de8,uVar19,param_3);
      uVar16 = uStack_da8;
      if (0 < iVar8) break;
      if (iVar8 == 0) {
        uVar16 = uStack_de8;
        if ((local_ce8 != uStack_de8) && (uVar16 = local_ce8, 0 < (int)uVar1)) {
          lVar15 = 0;
          do {
            uVar2 = *(undefined1 *)(local_ce8 + lVar15);
            *(undefined1 *)(local_ce8 + lVar15) = *(undefined1 *)(uStack_de8 + lVar15);
            *(undefined1 *)(uStack_de8 + lVar15) = uVar2;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)uVar1);
        }
                    /* try { // try from 0029a07c to 0039a07f has its CatchHandler @ 0029a094 */
        local_ce8 = uVar16 + lVar18;
                    /* try { // try from 0029a08c to 0039a08f has its CatchHandler @ 00298640 */
        bVar3 = true;
        if (local_cd8 <= local_ce8) {
          cvChangeSeqBlock(&local_d00);
          bVar3 = true;
        }
      }
                    /* catch() { ... } // from try @ 002987c4 with catch @ 0029a094
                       catch() { ... } // from try @ 00299b2c with catch @ 0029a094
                       catch() { ... } // from try @ 00299de8 with catch @ 0029a094
                       catch() { ... } // from try @ 0029a07c with catch @ 0029a094 */
      uStack_de8 = uStack_de8 + lVar18;
      if (uStack_dd8 <= uStack_de8) {
                    /* try { // try from 0029a0b8 to 0039a0bb has its CatchHandler @ 00298640 */
        cvChangeSeqBlock(&local_e00,1);
                    /* catch() { ... } // from try @ 00299db0 with catch @ 0029a0bc */
      }
    }
    if (uStack_de8 != uVar16) {
      while( true ) {
        iVar8 = (*param_2)(uVar16,uVar19,param_3);
        if (iVar8 < 0) break;
        if (iVar8 == 0) {
          uVar16 = uStack_da8;
          if ((local_ca8 != uStack_da8) && (uVar16 = local_ca8, 0 < (int)uVar1)) {
            lVar15 = 0;
            do {
              uVar2 = *(undefined1 *)(local_ca8 + lVar15);
              *(undefined1 *)(local_ca8 + lVar15) = *(undefined1 *)(uStack_da8 + lVar15);
              *(undefined1 *)(uStack_da8 + lVar15) = uVar2;
              lVar15 = lVar15 + 1;
            } while ((int)lVar15 < (int)uVar1);
          }
          local_ca8 = uVar16 + lVar20;
          bVar3 = true;
          if (local_ca8 < local_ca0) {
            cvChangeSeqBlock(&local_cc0,0xffffffff);
            bVar3 = true;
          }
        }
        uStack_da8 = uStack_da8 + lVar20;
        if (uStack_da8 < local_da0) {
          cvChangeSeqBlock(&local_dc0,0xffffffff);
        }
        uVar16 = uStack_da8;
        if (uStack_de8 == uStack_da8) goto LAB_00299b94;
      }
      uVar16 = uStack_da8;
      if (uStack_de8 != uStack_da8) {
        if (0 < (int)uVar1) {
          lVar15 = 0;
          do {
            uVar2 = *(undefined1 *)(uStack_de8 + lVar15);
            *(undefined1 *)(uStack_de8 + lVar15) = *(undefined1 *)(uStack_da8 + lVar15);
            *(undefined1 *)(uStack_da8 + lVar15) = uVar2;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)uVar1);
        }
        uStack_de8 = uStack_de8 + lVar18;
        if (uStack_dd8 <= uStack_de8) {
          cvChangeSeqBlock(&local_e00,1);
        }
        uVar6 = uStack_da8;
        uVar16 = uStack_de8;
        uStack_da8 = uStack_da8 + lVar20;
        if (uStack_da8 < local_da0) {
                    /* try { // try from 0029a0cc to 0039a0cf has its CatchHandler @ 00298640 */
                    /* catch() { ... } // from try @ 00298a9c with catch @ 0029a0d8 */
          cvChangeSeqBlock(&local_dc0,0xffffffff);
        }
        if (uVar6 != uVar16) {
          bVar3 = true;
          goto LAB_00299abc;
        }
        goto LAB_00299bcc;
      }
    }
LAB_00299b94:
    iVar8 = (*param_2)(uVar16,uVar19,param_3);
                    /* try { // try from 00299ba0 to 00399d6f has its CatchHandler @ 00298640 */
    if (iVar8 != 0) {
      if (iVar8 < 1) {
        uStack_de8 = uStack_de8 + lVar18;
        if (uStack_de8 < uStack_dd8) goto LAB_00299bc4;
        goto LAB_0029a57c;
      }
      uStack_da8 = uStack_da8 + lVar20;
      if (uStack_da8 < local_da0) {
        cvChangeSeqBlock(&local_dc0,0xffffffff);
      }
      goto LAB_00299bc4;
    }
                    /* catch() { ... } // from try @ 0029a26c with catch @ 0029a4ec
                       catch() { ... } // from try @ 0029a3b8 with catch @ 0029a4ec
                       catch() { ... } // from try @ 0029a458 with catch @ 0029a4ec */
    if ((local_ce8 != uStack_de8) && (0 < (int)uVar1)) {
      lVar15 = 0;
      do {
                    /* catch() { ... } // from try @ 0029a2f8 with catch @ 0029a514 */
        uVar2 = *(undefined1 *)(local_ce8 + lVar15);
        *(undefined1 *)(local_ce8 + lVar15) = *(undefined1 *)(uStack_de8 + lVar15);
        *(undefined1 *)(uStack_de8 + lVar15) = uVar2;
        lVar15 = lVar15 + 1;
      } while ((int)lVar15 < (int)uVar1);
    }
                    /* catch() { ... } // from try @ 0029a29c with catch @ 0029a544
                       catch() { ... } // from try @ 0029a300 with catch @ 0029a544 */
    local_ce8 = local_ce8 + lVar18;
    if (local_cd8 <= local_ce8) {
      cvChangeSeqBlock(&local_d00,1);
    }
    uStack_de8 = uStack_de8 + lVar18;
    if (uStack_dd8 <= uStack_de8) {
      bVar3 = true;
LAB_0029a57c:
      cvChangeSeqBlock(&local_e00,1);
LAB_00299bc4:
      if (bVar3) goto LAB_00299bcc;
                    /* catch() { ... } // from try @ 002988b8 with catch @ 0029a16c
                       catch() { ... } // from try @ 00299a34 with catch @ 0029a16c
                       catch() { ... } // from try @ 00299e00 with catch @ 0029a16c */
                    /* catch() { ... } // from try @ 00298854 with catch @ 0029a174
                       catch() { ... } // from try @ 00299aa8 with catch @ 0029a174
                       catch() { ... } // from try @ 00299df4 with catch @ 0029a174 */
      local_e00 = local_d80;
      uStack_df8 = uStack_d78;
      local_df0 = local_d70;
      uStack_de8 = uStack_d68;
                    /* try { // try from 0029a18c to 0039a1df has its CatchHandler @ 0029a1e0 */
      local_de0 = local_d60;
      uStack_dd8 = uStack_d58;
      local_da0 = local_d20;
      uStack_d98 = uStack_d18;
      local_dd0 = local_d50;
      uStack_dc8 = uStack_d48;
      local_dc0 = local_d40;
      uStack_db8 = uStack_d38;
      local_db0 = local_d30;
      uStack_da8 = uStack_d28;
      local_d90 = local_d10;
      uStack_d88 = uStack_d08;
      goto LAB_0029a1d4;
    }
LAB_00299bcc:
    uVar10 = cvGetSeqReaderPos(&local_e00);
    if (uVar10 == 0) {
      uVar10 = param_1[10];
    }
    iVar8 = cvGetSeqReaderPos(&local_d80);
    uVar11 = cvGetSeqReaderPos(&local_d00);
    if (uVar11 == 0) {
      uVar11 = param_1[10];
    }
    iVar21 = uVar10 - uVar11;
    iVar9 = uVar11 - iVar8;
    if (iVar21 < (int)(uVar11 - iVar8)) {
      iVar9 = iVar21;
    }
    if (0 < iVar9) {
      iVar8 = 0;
      local_c40 = local_e00;
      uStack_c38 = uStack_df8;
      local_c30 = local_df0;
      local_c28 = uStack_de8;
      local_c20 = local_de0;
      local_c18 = uStack_dd8;
      local_c80 = local_d80;
      uStack_c78 = uStack_d78;
      local_c70 = local_d70;
      local_c68 = uStack_d68;
      local_c60 = local_d60;
      local_c58 = uStack_d58;
      local_c50 = local_d50;
      uStack_c48 = uStack_d48;
      local_c10 = local_dd0;
      uStack_c08 = uStack_dc8;
      cvSetSeqReaderPos(&local_c40,-iVar9,1);
      do {
        lVar15 = 0;
        if (0 < (int)uVar1) {
          do {
            uVar2 = *(undefined1 *)(local_c68 + lVar15);
            *(undefined1 *)(local_c68 + lVar15) = *(undefined1 *)(local_c28 + lVar15);
            *(undefined1 *)(local_c28 + lVar15) = uVar2;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)uVar1);
        }
        local_c68 = local_c68 + lVar18;
        if (local_c58 <= local_c68) {
                    /* try { // try from 0029a160 to 0039a163 has its CatchHandler @ 00298640 */
          cvChangeSeqBlock(&local_c80,1);
                    /* catch() { ... } // from try @ 00298910 with catch @ 0029a164 */
        }
        local_c28 = local_c28 + lVar18;
        if (local_c18 <= local_c28) {
          cvChangeSeqBlock(&local_c40,1);
                    /* catch() { ... } // from try @ 0029877c with catch @ 0029a150 */
        }
        iVar8 = iVar8 + 1;
      } while (iVar8 != iVar9);
    }
    iVar9 = cvGetSeqReaderPos(&local_dc0);
    iVar12 = cvGetSeqReaderPos(&local_d40);
    iVar13 = cvGetSeqReaderPos(&local_cc0);
    iVar9 = iVar13 - iVar9;
    iVar8 = iVar9;
    if (iVar12 - iVar13 < iVar9) {
      iVar8 = iVar12 - iVar13;
    }
    if (0 < iVar8) {
      iVar12 = 0;
      local_c80 = local_e00;
      uStack_c78 = uStack_df8;
      local_c40 = local_d40;
      uStack_c38 = uStack_d38;
      local_c30 = local_d30;
      local_c28 = uStack_d28;
                    /* try { // try from 00299db0 to 00399db3 has its CatchHandler @ 0029a0bc */
                    /* try { // try from 00299db8 to 00399dbb has its CatchHandler @ 00298640 */
      local_c20 = local_d20;
      local_c18 = uStack_d18;
      local_c70 = local_df0;
      local_c68 = uStack_de8;
                    /* try { // try from 00299dcc to 00399dcf has its CatchHandler @ 0029a1e0 */
      local_c60 = local_de0;
      local_c58 = uStack_dd8;
      local_c50 = local_dd0;
      uStack_c48 = uStack_dc8;
      local_c10 = local_d10;
      uStack_c08 = uStack_d08;
      cvSetSeqReaderPos(&local_c40,1 - iVar8);
                    /* try { // try from 00299ddc to 00399ddf has its CatchHandler @ 00298640 */
      do {
        lVar15 = 0;
                    /* try { // try from 00299de8 to 00399deb has its CatchHandler @ 0029a094 */
        if (0 < (int)uVar1) {
          do {
                    /* try { // try from 00299df4 to 00399df7 has its CatchHandler @ 0029a174 */
            uVar2 = *(undefined1 *)(local_c68 + lVar15);
            *(undefined1 *)(local_c68 + lVar15) = *(undefined1 *)(local_c28 + lVar15);
                    /* try { // try from 00299e00 to 00399e03 has its CatchHandler @ 0029a16c */
            *(undefined1 *)(local_c28 + lVar15) = uVar2;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)uVar1);
        }
        local_c68 = local_c68 + lVar18;
        if (local_c58 <= local_c68) {
          cvChangeSeqBlock(&local_c80,1);
        }
        local_c28 = local_c28 + lVar18;
        if (local_c18 <= local_c28) {
          cvChangeSeqBlock(&local_c40,1);
        }
        iVar12 = iVar12 + 1;
      } while (iVar12 != iVar8);
    }
    puVar17 = &local_e00;
    if (iVar21 < 2) {
      if (1 < iVar9) {
        iVar9 = 1 - iVar9;
        local_df0 = local_d30;
        uStack_de8 = uStack_d28;
        local_e00 = local_d40;
        uStack_df8 = uStack_d38;
        local_de0 = local_d20;
        uStack_dd8 = uStack_d18;
        local_dd0 = local_d10;
        uStack_dc8 = uStack_d08;
        goto LAB_00299f14;
      }
      goto LAB_0029a308;
    }
    if (iVar9 < 2) {
      iVar9 = iVar21 + -1;
      puVar17 = &local_dc0;
      local_df0 = local_d70;
      uStack_de8 = uStack_d68;
      local_e00 = local_d80;
      uStack_df8 = uStack_d78;
      local_de0 = local_d60;
      uStack_dd8 = uStack_d58;
      local_dd0 = local_d50;
      uStack_dc8 = uStack_d48;
    }
    else if (iVar9 < iVar21) {
      uVar22 = uVar22 + 1;
      uVar19 = -(ulong)(uVar22 >> 0x1f) & 0xffffffc000000000 | (ulong)uVar22 << 6;
                    /* try { // try from 00299e9c to 00399e9f has its CatchHandler @ 0029a1e0 */
      *(ulong *)((long)local_bf8 + uVar19) = uStack_d68;
      *(code **)((long)&local_c00 + uVar19) = local_d70;
      *(ulong *)((long)local_bf8 + uVar19 + 0x10) = uStack_d58;
      *(ulong *)((long)local_bf8 + uVar19 + 8) = local_d60;
      cvSetSeqReaderPos(&local_d80,iVar21 + -1,1);
      iVar9 = 1 - iVar9;
      *(code **)((long)local_bf8 + uVar19 + 0x18) = local_d70;
      *(ulong *)((long)local_bf8 + uVar19 + 0x20) = uStack_d68;
      *(ulong *)((long)local_bf8 + uVar19 + 0x28) = local_d60;
      *(ulong *)((long)local_bf8 + uVar19 + 0x30) = uStack_d58;
      local_df0 = local_d30;
      uStack_de8 = uStack_d28;
      local_e00 = local_d40;
      uStack_df8 = uStack_d38;
      local_de0 = local_d20;
      uStack_dd8 = uStack_d18;
      local_dd0 = local_d10;
      uStack_dc8 = uStack_d08;
    }
    else {
      uVar22 = uVar22 + 1;
      uVar19 = -(ulong)(uVar22 >> 0x1f) & 0xffffffc000000000 | (ulong)uVar22 << 6;
                    /* try { // try from 0029a42c to 0039a44f has its CatchHandler @ 0029a210 */
      *(ulong *)((long)local_bf8 + uVar19 + 0x20) = uStack_d28;
      *(code **)((long)local_bf8 + uVar19 + 0x18) = local_d30;
      *(ulong *)((long)local_bf8 + uVar19 + 0x30) = uStack_d18;
      *(ulong *)((long)local_bf8 + uVar19 + 0x28) = local_d20;
      cvSetSeqReaderPos(&local_d40,1 - iVar9,1);
                    /* try { // try from 0029a458 to 0039a45b has its CatchHandler @ 0029a4ec */
      *(code **)((long)&local_c00 + uVar19) = local_d30;
      *(ulong *)((long)local_bf8 + uVar19) = uStack_d28;
      *(ulong *)((long)local_bf8 + uVar19 + 8) = local_d20;
      *(ulong *)((long)local_bf8 + uVar19 + 0x10) = uStack_d18;
      iVar9 = iVar21 + -1;
      puVar17 = &local_dc0;
      local_df0 = local_d70;
      uStack_de8 = uStack_d68;
      local_e00 = local_d80;
      uStack_df8 = uStack_d78;
      local_de0 = local_d60;
      uStack_dd8 = uStack_d58;
      local_dd0 = local_d50;
      uStack_dc8 = uStack_d48;
    }
LAB_00299f14:
    local_dc0 = local_e00;
    uStack_db8 = uStack_df8;
    local_db0 = local_df0;
    uStack_da8 = uStack_de8;
    local_da0 = local_de0;
    uStack_d98 = uStack_dd8;
    local_d90 = local_dd0;
    uStack_d88 = uStack_dc8;
    cvSetSeqReaderPos(puVar17,iVar9,1);
    if (local_df0 != local_db0) goto LAB_002997c0;
LAB_00299f48:
    iVar8 = (int)uStack_da8 - (int)uStack_de8;
  } while( true );
LAB_0029a23c:
  if (local_c68 != uStack_da8) {
    do {
                    /* try { // try from 0029a250 to 0039a253 has its CatchHandler @ 0029a210 */
      local_c28 = local_c68;
      if (local_c30 != local_c70) {
        local_c30 = local_c70;
        local_c20 = local_c60;
                    /* try { // try from 0029a26c to 0039a26f has its CatchHandler @ 0029a4ec */
        local_c18 = local_c58;
      }
      uVar19 = local_c68;
      if (uStack_de8 != local_c68) {
        do {
          local_c28 = uVar19 + lVar20;
          if (local_c28 < local_c20) {
            cvChangeSeqBlock(&local_c40,0xffffffff);
          }
          iVar8 = (*param_2)(local_c28,uVar19,param_3);
                    /* try { // try from 0029a29c to 0039a29f has its CatchHandler @ 0029a544 */
          if (iVar8 < 1) break;
          lVar15 = 0;
          if (0 < (int)uVar1) {
            do {
              uVar2 = *(undefined1 *)(local_c28 + lVar15);
              *(undefined1 *)(local_c28 + lVar15) = *(undefined1 *)(uVar19 + lVar15);
              *(undefined1 *)(uVar19 + lVar15) = uVar2;
              lVar15 = lVar15 + 1;
            } while ((int)lVar15 < (int)uVar1);
          }
          uVar19 = local_c28;
        } while (uStack_de8 != local_c28);
      }
      local_c68 = local_c68 + lVar18;
                    /* try { // try from 0029a2f8 to 0039a2fb has its CatchHandler @ 0029a514 */
      if (local_c58 <= local_c68) goto LAB_0029a770;
                    /* try { // try from 0029a300 to 0039a347 has its CatchHandler @ 0029a544 */
      if (local_c68 == uStack_da8) break;
    } while( true );
  }
  goto LAB_0029a308;
LAB_0029a770:
  cvChangeSeqBlock(&local_c80,1);
  goto LAB_0029a23c;
LAB_0029a308:
  uVar19 = (ulong)uVar22;
  if (uVar22 == 0xffffffff) {
    return;
  }
  uVar16 = -(ulong)(uVar22 >> 0x1f) & 0xffffffc000000000 | uVar19 << 6;
  local_df0 = *(code **)((long)&local_c00 + uVar16);
  local_de0 = *(ulong *)((long)local_bf8 + uVar16 + 8);
  uStack_de8 = *(ulong *)((long)local_bf8 + uVar16);
  uStack_dd8 = *(ulong *)((long)local_bf8 + uVar16 + 0x10);
  local_db0 = *(code **)((long)local_bf8 + uVar16 + 0x18);
  uStack_da8 = *(ulong *)((long)local_bf8 + uVar16 + 0x20);
  local_da0 = *(ulong *)((long)local_bf8 + uVar16 + 0x28);
  uStack_d98 = *(ulong *)((long)local_bf8 + uVar16 + 0x30);
  goto LAB_00299740;
}


==================================================================

### FUNC 0029a87c (1116 bytes) name=cvSeqSearch

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

code * cvSeqSearch(uint *param_1,code *param_2,code *param_3,int param_4,uint *param_5,
                  undefined8 param_6)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined1 uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  char *pcVar8;
  code *pcVar9;
  undefined8 *puVar10;
  code *pcVar11;
  uint uVar12;
  uint uVar13;
  code *local_40;
  code *local_38;
  code *local_28;
  code *local_18;
  
  if (param_5 != (uint *)0x0) {
    *param_5 = 0xffffffff;
  }
  if (param_1 == (uint *)0x0) {
    iVar6 = -0x1b;
LAB_0029a8d4:
    local_40 = (code *)0x0;
    local_38 = (code *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_40,0x12);
    uVar3 = s_Bad_input_sequence_00464538._8_8_;
    uVar2 = s_Bad_input_sequence_00464538._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_Bad_input_sequence_00464538._16_2_;
    *(undefined8 *)pcVar8 = uVar2;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(iVar6,(String *)&local_40,
              "schar* cvSeqSearch(CvSeq*, const void*, CvCmpFunc, int, int*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x892);
    cv::String::deallocate((String *)&local_40);
  }
  else if ((*param_1 & 0xffff0000) != 0x42990000) {
    iVar6 = -5;
    goto LAB_0029a8d4;
  }
  if (param_2 == (code *)0x0) {
    local_40 = param_2;
    local_38 = param_2;
    pcVar8 = (char *)cv::String::allocate((String *)&local_40,0x14);
    uVar3 = s_Null_element_pointer_00464568._8_8_;
    uVar2 = s_Null_element_pointer_00464568._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_Null_element_pointer_00464568._16_4_;
    *(undefined8 *)pcVar8 = uVar2;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_40,
              "schar* cvSeqSearch(CvSeq*, const void*, CvCmpFunc, int, int*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x895);
    cv::String::deallocate((String *)&local_40);
  }
  uVar12 = param_1[10];
  uVar1 = param_1[0xb];
  if (uVar12 == 0) {
    return (code *)0x0;
  }
  if (param_4 == 0) {
    cvStartReadSeq(param_1,&local_40,0);
    uVar13 = 0;
    if (param_3 == (code *)0x0) {
      if ((uVar1 & 3) == 0) {
        uVar7 = 0;
        if (0 < (int)uVar12) {
          do {
            uVar13 = uVar7;
            if ((int)uVar1 < 1) {
              uVar7 = 0;
LAB_0029ac74:
              if (uVar7 == uVar1) goto LAB_0029aad4;
            }
            else if (*(int *)local_28 == *(int *)param_2) {
              uVar7 = 0;
              do {
                uVar7 = uVar7 + 4;
                if ((int)uVar1 <= (int)uVar7) break;
              } while (*(int *)(local_28 + (int)uVar7) == *(int *)(param_2 + (int)uVar7));
              goto LAB_0029ac74;
            }
            local_28 = local_28 + (int)uVar1;
            if (local_18 <= local_28) {
              cvChangeSeqBlock(&local_40,1);
            }
            uVar7 = uVar13 + 1;
          } while (uVar13 + 1 != uVar12);
          local_28 = (code *)0x0;
          uVar13 = uVar12;
          goto LAB_0029a9a8;
        }
      }
      else {
        uVar7 = 0;
        if (0 < (int)uVar12) {
          do {
            uVar13 = uVar7;
            if ((0 < (int)uVar1) && (*local_28 == *param_2)) {
              uVar7 = 0;
              pcVar11 = local_28;
              pcVar9 = param_2;
              do {
                pcVar9 = pcVar9 + 1;
                pcVar11 = pcVar11 + 1;
                uVar7 = uVar7 + 1;
                if (uVar7 == uVar1) goto LAB_0029aad4;
              } while (*pcVar11 == *pcVar9);
            }
            local_28 = local_28 + (int)uVar1;
            if (local_18 <= local_28) {
              cvChangeSeqBlock(&local_40,1);
            }
            uVar7 = uVar13 + 1;
          } while (uVar13 + 1 != uVar12);
          local_28 = (code *)0x0;
          uVar13 = uVar12;
          goto LAB_0029a9a8;
        }
      }
    }
    else if (0 < (int)uVar12) {
      do {
        iVar6 = (*param_3)(param_2,local_28,param_6);
        if (iVar6 == 0) goto LAB_0029aad4;
        local_28 = local_28 + (int)uVar1;
        if (local_18 <= local_28) {
          cvChangeSeqBlock(&local_40,1);
        }
        uVar13 = uVar13 + 1;
      } while (uVar13 != uVar12);
      goto LAB_0029a9a4;
    }
    local_28 = (code *)0x0;
  }
  else {
    if (param_3 == (code *)0x0) {
      local_40 = param_3;
      local_38 = param_3;
      puVar10 = (undefined8 *)cv::String::allocate((String *)&local_40,0x15);
      uVar4 = LAB_00464564;
      uVar3 = _LAB_00464558;
      uVar2 = _DAT_00464550;
      *(undefined4 *)(puVar10 + 2) = _LAB_00464560;
      *(undefined1 *)((long)puVar10 + 0x14) = uVar4;
      *puVar10 = uVar2;
      puVar10[1] = uVar3;
      cv::error(-0x1b,(String *)&local_40,
                "schar* cvSeqSearch(CvSeq*, const void*, CvCmpFunc, int, int*, void*)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x8cf);
      cv::String::deallocate((String *)&local_40);
    }
    if (0 < (int)uVar12) {
      iVar6 = 0;
      do {
        while( true ) {
          uVar1 = (int)(iVar6 + uVar12) >> 1;
          pcVar9 = (code *)cvGetSeqElem(param_1,uVar1);
          iVar5 = (*param_3)(param_2,pcVar9,param_6);
          if (iVar5 == 0) {
            if (param_5 == (uint *)0x0) {
              return pcVar9;
            }
            *param_5 = uVar1;
            return pcVar9;
          }
          if (-1 < iVar5) break;
          uVar12 = uVar1;
          if ((int)uVar1 <= iVar6) goto LAB_0029a9a4;
        }
        iVar6 = uVar1 + 1;
      } while (iVar6 < (int)uVar12);
    }
LAB_0029a9a4:
    local_28 = (code *)0x0;
    uVar13 = uVar12;
  }
LAB_0029a9a8:
  if (param_5 == (uint *)0x0) {
    return local_28;
  }
  *param_5 = uVar13;
  return local_28;
LAB_0029aad4:
  if ((int)uVar12 <= (int)uVar13) {
    local_28 = (code *)0x0;
  }
  goto LAB_0029a9a8;
}


==================================================================

### FUNC 0029ad14 (260 bytes) name=cvSeqInvert

void cvSeqInvert(long param_1)

{
  int iVar1;
  int iVar2;
  undefined1 uVar3;
  long lVar4;
  int iVar5;
  undefined1 auStack_80 [24];
  ulong local_68;
  ulong local_58;
  undefined1 auStack_40 [24];
  ulong local_28;
  ulong local_20;
  
  cvStartReadSeq(param_1,auStack_80,0);
  cvStartReadSeq(param_1,auStack_40,1);
  iVar2 = *(int *)(param_1 + 0x2c);
  iVar1 = *(int *)(param_1 + 0x28) >> 1;
  if (0 < iVar1) {
    iVar5 = 0;
    do {
      lVar4 = 0;
      if (0 < iVar2) {
        do {
          uVar3 = *(undefined1 *)(local_68 + lVar4);
          *(undefined1 *)(local_68 + lVar4) = *(undefined1 *)(local_28 + lVar4);
          *(undefined1 *)(local_28 + lVar4) = uVar3;
          lVar4 = lVar4 + 1;
        } while ((int)lVar4 < iVar2);
      }
      local_68 = local_68 + (long)iVar2;
      if (local_58 <= local_68) {
        cvChangeSeqBlock(auStack_80,1);
      }
      local_28 = local_28 - (long)iVar2;
      if (local_28 < local_20) {
        cvChangeSeqBlock(auStack_40,0xffffffff);
      }
      iVar5 = iVar5 + 1;
    } while (iVar5 != iVar1);
  }
  return;
}


==================================================================

### FUNC 0029ae18 (1460 bytes) name=cvSeqPartition

uint cvSeqPartition(uint *param_1,undefined8 *param_2,undefined8 *param_3,code *param_4,
                   undefined8 param_5)

{
  ulong *puVar1;
  ulong *puVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  uint uVar6;
  ulong *puVar7;
  ulong *puVar8;
  ulong *puVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  uint *local_98;
  undefined8 local_90;
  uint *local_88;
  undefined1 auStack_80 [24];
  ulong *local_68;
  ulong *local_58;
  undefined8 *local_40;
  undefined8 *local_38;
  ulong *local_28;
  ulong *local_18;
  
  local_b8 = 0;
  if (param_3 == (undefined8 *)0x0) {
    local_40 = param_3;
    local_38 = param_3;
    cv::String::allocate((String *)&local_40,0);
    cv::error(-0x1b,(String *)&local_40,
              "int cvSeqPartition(const CvSeq*, CvMemStorage*, CvSeq**, CvCmpFunc, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x923);
    cv::String::deallocate((String *)&local_40);
  }
  if ((param_1 == (uint *)0x0) || (param_4 == (code *)0x0)) {
    local_40 = (undefined8 *)0x0;
    local_38 = (undefined8 *)0x0;
    cv::String::allocate((String *)&local_40,0);
    cv::error(-0x1b,(String *)&local_40,
              "int cvSeqPartition(const CvSeq*, CvMemStorage*, CvSeq**, CvCmpFunc, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x926);
    cv::String::deallocate((String *)&local_40);
    if (param_2 == (undefined8 *)0x0) goto LAB_0029b250;
LAB_0029ae6c:
    if (param_1 != (uint *)0x0) goto LAB_0029ae70;
  }
  else {
    if (param_2 != (undefined8 *)0x0) goto LAB_0029ae6c;
LAB_0029b250:
    param_2 = *(undefined8 **)(param_1 + 0x12);
    if (param_2 == (undefined8 *)0x0) {
      local_40 = param_2;
      local_38 = param_2;
                    /* try { // try from 0029b264 to 0039b267 has its CatchHandler @ 0029b8ec */
                    /* try { // try from 0029b26c to 0039b7c7 has its CatchHandler @ 0029b170 */
      cv::String::allocate((String *)&local_40,0);
      cv::error(-0x1b,(String *)&local_40,
                "int cvSeqPartition(const CvSeq*, CvMemStorage*, CvSeq**, CvCmpFunc, void*)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x92c);
      cv::String::deallocate((String *)&local_40);
    }
LAB_0029ae70:
    if ((*param_1 & 0xffff0000) == 0x42980000) {
      iVar12 = 0;
      local_b8 = cvCreateChildMemStorage(param_2);
      lVar4 = cvCreateSeq(0,0x60,0x18,local_b8);
      cvStartReadSeq(param_1,auStack_80,0);
      local_b0 = 0;
      uStack_a8 = 0;
      local_a0 = 0;
      local_98 = (uint *)0x0;
      local_90 = 0;
      local_88 = (uint *)0x0;
      cvStartAppendToSeq(lVar4,&local_b0);
      if (0 < (int)param_1[10]) {
        do {
          puVar1 = local_68;
          if ((int)*local_68 < 0) {
            puVar1 = (ulong *)0x0;
          }
          if (local_88 <= local_98) {
            cvCreateSeqBlock(&local_b0);
          }
          local_98[0] = 0;
          local_98[1] = 0;
          *(ulong **)(local_98 + 2) = puVar1;
          local_98[4] = 0;
          local_68 = (ulong *)((long)local_68 + (long)(int)param_1[0xb]);
          local_98 = local_98 + 6;
          if (local_58 <= local_68) {
            cvChangeSeqBlock(auStack_80,1);
          }
          iVar12 = iVar12 + 1;
        } while (iVar12 < (int)param_1[10]);
      }
      goto LAB_0029af74;
    }
  }
  iVar12 = 0;
  local_b8 = cvCreateChildMemStorage(param_2);
  lVar4 = cvCreateSeq(0,0x60,0x18,local_b8);
  cvStartReadSeq(param_1,auStack_80,0);
  local_b0 = 0;
  uStack_a8 = 0;
  local_a0 = 0;
  local_98 = (uint *)0x0;
  local_90 = 0;
  local_88 = (uint *)0x0;
  cvStartAppendToSeq(lVar4,&local_b0);
  if (0 < (int)param_1[10]) {
    do {
      while( true ) {
        puVar1 = local_68;
        if (local_88 <= local_98) {
          cvCreateSeqBlock(&local_b0);
        }
        local_98[0] = 0;
        local_98[1] = 0;
        *(ulong **)(local_98 + 2) = puVar1;
        local_98[4] = 0;
        local_68 = (ulong *)((long)local_68 + (long)(int)param_1[0xb]);
        local_98 = local_98 + 6;
        if (local_58 <= local_68) break;
                    /* catch() { ... } // from try @ 0029af64 with catch @ 0029af28
                       catch() { ... } // from try @ 0029af8c with catch @ 0029af28
                       catch() { ... } // from try @ 0029b048 with catch @ 0029af28
                       catch() { ... } // from try @ 0029b060 with catch @ 0029af28
                       catch() { ... } // from try @ 0029b074 with catch @ 0029af28 */
        iVar12 = iVar12 + 1;
        if ((int)param_1[10] <= iVar12) goto LAB_0029af74;
      }
      iVar12 = iVar12 + 1;
                    /* try { // try from 0029af64 to 0039af67 has its CatchHandler @ 0029af28 */
      cvChangeSeqBlock(auStack_80,1);
    } while (iVar12 < (int)param_1[10]);
  }
LAB_0029af74:
  iVar12 = 0;
  cvEndWriteSeq(&local_b0);
                    /* try { // try from 0029af84 to 0039af87 has its CatchHandler @ 0029b064 */
                    /* try { // try from 0029af8c to 0039b023 has its CatchHandler @ 0029af28 */
  cvStartReadSeq(lVar4,auStack_80,0);
  cvStartReadSeq(lVar4,(String *)&local_40,0);
  iVar3 = *(int *)(lVar4 + 0x28);
  if (0 < iVar3) {
    do {
      puVar1 = local_28;
      local_28 = (ulong *)((long)local_28 + (long)*(int *)(lVar4 + 0x2c));
      if (local_18 <= local_28) {
        cvChangeSeqBlock((String *)&local_40,1);
        iVar3 = *(int *)(lVar4 + 0x28);
      }
      puVar7 = puVar1;
      if (puVar1[1] != 0) {
        do {
          puVar9 = puVar7;
          puVar7 = (ulong *)*puVar9;
        } while ((ulong *)*puVar9 != (ulong *)0x0);
        if (0 < iVar3) {
          iVar11 = 0;
          do {
            puVar7 = local_68;
            if (((local_68[1] != 0) && (puVar1 != local_68)) &&
               (iVar3 = (*param_4)(puVar1[1],local_68[1],param_5), puVar2 = puVar7, iVar3 != 0)) {
              do {
                puVar8 = puVar2;
                puVar2 = (ulong *)*puVar8;
              } while ((ulong *)*puVar8 != (ulong *)0x0);
              if (puVar9 != puVar8) {
                iVar3 = (int)puVar8[2];
                if (iVar3 < (int)puVar9[2]) {
                    /* try { // try from 0029b040 to 0039b043 has its CatchHandler @ 0029b050 */
                  *puVar8 = (ulong)puVar9;
                  puVar8 = puVar9;
                }
                else {
                  *puVar9 = (ulong)puVar8;
                  if ((int)puVar9[2] == iVar3) {
                    iVar3 = iVar3 + 1;
                  }
                    /* try { // try from 0029b1c4 to 0039b247 has its CatchHandler @ 0029b170 */
                  *(int *)(puVar8 + 2) = iVar3;
                }
                puVar9 = (ulong *)*puVar7;
                    /* try { // try from 0029b048 to 0039b04b has its CatchHandler @ 0029af28 */
                while (puVar2 = puVar9, puVar2 != (ulong *)0x0) {
                  *puVar7 = (ulong)puVar8;
                    /* catch() { ... } // from try @ 0029b040 with catch @ 0029b050 */
                  puVar7 = puVar2;
                  puVar9 = (ulong *)*puVar2;
                }
                puVar9 = (ulong *)*puVar1;
                puVar7 = puVar1;
                    /* try { // try from 0029b060 to 0039b063 has its CatchHandler @ 0029af28 */
                    /* catch() { ... } // from try @ 0029af84 with catch @ 0029b064 */
                while (puVar2 = puVar9, puVar9 = puVar8, puVar2 != (ulong *)0x0) {
                  *puVar7 = (ulong)puVar8;
                  puVar7 = puVar2;
                    /* try { // try from 0029b074 to 0039b077 has its CatchHandler @ 0029af28 */
                  puVar9 = (ulong *)*puVar2;
                }
              }
            }
            local_68 = local_68 + 3;
            if (local_58 <= local_68) {
              cvChangeSeqBlock(auStack_80,1);
            }
            iVar3 = *(int *)(lVar4 + 0x28);
            iVar11 = iVar11 + 1;
          } while (iVar11 < iVar3);
        }
      }
      iVar12 = iVar12 + 1;
    } while (iVar12 < iVar3);
  }
  uVar10 = 0;
  iVar12 = 0;
  uVar5 = cvCreateSeq(0,0x60,4,param_2);
  cvStartAppendToSeq(uVar5,&local_b0);
  if (0 < *(int *)(lVar4 + 0x28)) {
    do {
      puVar1 = local_68;
      if (local_68[1] == 0) {
        uVar6 = 0xffffffff;
      }
      else {
        do {
          puVar7 = puVar1;
          puVar1 = (ulong *)*puVar7;
        } while ((ulong *)*puVar7 != (ulong *)0x0);
        uVar6 = (uint)puVar7[2];
                    /* try { // try from 0029b10c to 0039b12f has its CatchHandler @ 0029b078 */
        if (-1 < (int)uVar6) {
          uVar6 = ~uVar10;
          uVar10 = uVar10 + 1;
          *(uint *)(puVar7 + 2) = uVar6;
        }
        uVar6 = ~uVar6;
      }
      local_68 = local_68 + 3;
      if (local_58 <= local_68) {
        cvChangeSeqBlock(auStack_80,1);
      }
      if (local_88 <= local_98) {
        cvCreateSeqBlock(&local_b0);
      }
      *local_98 = uVar6;
      iVar12 = iVar12 + 1;
                    /* try { // try from 0029b14c to 0039b14f has its CatchHandler @ 0029b15c */
                    /* try { // try from 0029b154 to 0039b157 has its CatchHandler @ 0029b078 */
      local_98 = local_98 + 1;
                    /* catch() { ... } // from try @ 0029b14c with catch @ 0029b15c */
    } while (iVar12 < *(int *)(lVar4 + 0x28));
  }
  cvEndWriteSeq(&local_b0);
                    /* try { // try from 0029b16c to 0039b16f has its CatchHandler @ 0029b078 */
                    /* catch() { ... } // from try @ 0029b1c4 with catch @ 0029b170
                       catch() { ... } // from try @ 0029b26c with catch @ 0029b170
                       catch() { ... } // from try @ 0029b7fc with catch @ 0029b170
                       catch() { ... } // from try @ 0029b85c with catch @ 0029b170
                       catch() { ... } // from try @ 0029b8d0 with catch @ 0029b170
                       catch() { ... } // from try @ 0029b8e8 with catch @ 0029b170
                       catch() { ... } // from try @ 0029b8fc with catch @ 0029b170
                       catch() { ... } // from try @ 0029b910 with catch @ 0029b170
                       catch() { ... } // from try @ 0029b924 with catch @ 0029b170 */
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = uVar5;
  }
  cvReleaseMemStorage(&local_b8);
  return uVar10;
}


==================================================================

### FUNC 0029b408 (240 bytes) name=cvCreateSet

void cvCreateSet(undefined4 param_1,int param_2,uint param_3,long param_4)

{
  long lVar1;
  long local_10;
  long local_8;
  
  if (param_4 == 0) {
    local_10 = param_4;
    local_8 = param_4;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"CvSet* cvCreateSet(int, int, int, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x9b2);
    cv::String::deallocate((String *)&local_10);
  }
  if (((param_2 < 0x70) || ((int)param_3 < 0x10)) || ((param_3 & 7) != 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"CvSet* cvCreateSet(int, int, int, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x9b6);
    cv::String::deallocate((String *)&local_10);
  }
  lVar1 = cvCreateSeq(param_1,(long)param_2,(long)(int)param_3,param_4);
  *(undefined2 *)(lVar1 + 2) = 0x4298;
  return;
}


==================================================================

### FUNC 0029b520 (340 bytes) name=cvSetAdd

uint cvSetAdd(long param_1,void *param_2,undefined8 *param_3)

{
  uint *puVar1;
  uint uVar2;
  int iVar3;
  uint *puVar4;
  uint *puVar5;
  long lVar6;
  uint *__dest;
  long lVar7;
  uint *puVar8;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvSetAdd(CvSet*, CvSetElem*, CvSetElem**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x9c7);
    cv::String::deallocate((String *)&local_10);
  }
  __dest = *(uint **)(param_1 + 0x60);
  if (__dest == (uint *)0x0) {
    iVar3 = *(int *)(param_1 + 0x2c);
    uVar2 = *(uint *)(param_1 + 0x28);
    FUN_00294674(param_1);
    __dest = *(uint **)(param_1 + 0x38);
    lVar7 = (long)iVar3;
    puVar8 = *(uint **)(param_1 + 0x30);
    *(uint **)(param_1 + 0x60) = __dest;
    puVar1 = __dest;
    puVar4 = __dest;
    while (puVar5 = (uint *)((long)puVar4 + lVar7), puVar5 <= puVar8) {
      *(uint **)(puVar1 + 2) = puVar5;
      *puVar1 = uVar2 | 0x80000000;
      uVar2 = uVar2 + 1;
      puVar1 = (uint *)((long)puVar1 + lVar7);
      puVar4 = puVar5;
    }
    iVar3 = *(int *)(param_1 + 0x28);
    lVar6 = **(long **)(param_1 + 0x58);
    *(undefined8 *)((long)puVar4 + (8 - lVar7)) = 0;
    *(uint *)(lVar6 + 0x14) = *(int *)(lVar6 + 0x14) + (uVar2 - iVar3);
    *(uint *)(param_1 + 0x28) = uVar2;
    *(uint **)(param_1 + 0x38) = puVar8;
  }
  uVar2 = *__dest;
  *(undefined8 *)(param_1 + 0x60) = *(undefined8 *)(__dest + 2);
  if (param_2 != (void *)0x0) {
    __dest = memcpy(__dest,param_2,(long)*(int *)(param_1 + 0x2c));
  }
  iVar3 = *(int *)(param_1 + 0x68);
  *__dest = uVar2 & 0x3ffffff;
  *(int *)(param_1 + 0x68) = iVar3 + 1;
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = __dest;
  }
  return uVar2 & 0x3ffffff;
}


==================================================================

### FUNC 0029b688 (156 bytes) name=cvSetRemove

void cvSetRemove(long param_1)

{
  uint *puVar1;
  undefined8 uVar2;
  long local_10;
  long local_8;
  
  puVar1 = (uint *)cvGetSeqElem();
  if ((puVar1 == (uint *)0x0) || ((int)*puVar1 < 0)) {
    if (param_1 == 0) {
      local_10 = param_1;
      local_8 = param_1;
      cv::String::allocate((String *)&local_10,0);
      cv::error(-0x1b,(String *)&local_10,"void cvSetRemove(CvSet*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0x9f6);
      cv::String::deallocate((String *)&local_10);
    }
  }
  else {
    uVar2 = *(undefined8 *)(param_1 + 0x60);
    *puVar1 = *puVar1 & 0x3ffffff | 0x80000000;
    *(undefined8 *)(puVar1 + 2) = uVar2;
    *(uint **)(param_1 + 0x60) = puVar1;
    *(int *)(param_1 + 0x68) = *(int *)(param_1 + 0x68) + -1;
  }
  return;
}


==================================================================

### FUNC 0029b738 (36 bytes) name=cvClearSet

void cvClearSet(long param_1)

{
  cvClearSeq();
  *(undefined8 *)(param_1 + 0x60) = 0;
  *(undefined4 *)(param_1 + 0x68) = 0;
  return;
}


==================================================================

### FUNC 0029b75c (216 bytes) name=cvCreateGraph

long cvCreateGraph(undefined4 param_1,int param_2,int param_3,int param_4,undefined8 param_5)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_4 < 0x28 || param_3 < 0x10) || (param_2 < 0x78)) {
                    /* try { // try from 0029b7f4 to 0039b7f7 has its CatchHandler @ 0029b900 */
                    /* try { // try from 0029b7fc to 0039b837 has its CatchHandler @ 0029b170 */
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xc9,(String *)&local_10,"CvGraph* cvCreateGraph(int, int, int, int, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa15);
    cv::String::deallocate((String *)&local_10);
  }
  lVar1 = cvCreateSet(param_1,param_2,param_3,param_5);
  uVar2 = cvCreateSet(0,0x70,param_4,param_5);
  *(undefined8 *)(lVar1 + 0x70) = uVar2;
  return lVar1;
}


==================================================================

### FUNC 0029b848 (148 bytes) name=cvClearGraph

void cvClearGraph(long param_1)

{
  long local_10;
  long local_8;
  
                    /* try { // try from 0029b854 to 0039b857 has its CatchHandler @ 0029b914 */
  if (param_1 != 0) {
                    /* try { // try from 0029b85c to 0039b8ab has its CatchHandler @ 0029b170 */
    cvClearSet(*(undefined8 *)(param_1 + 0x70));
    cvClearSet(param_1);
    return;
  }
  local_10 = param_1;
  local_8 = param_1;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0x1b,(String *)&local_10,"void cvClearGraph(CvGraph*)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa28);
  cv::String::deallocate((String *)&local_10);
  cvClearSet(uRam0000000000000070);
                    /* try { // try from 0029b8c8 to 0039b8cb has its CatchHandler @ 0029b8d8 */
  cvClearSet(0);
                    /* try { // try from 0029b8d0 to 0039b8d3 has its CatchHandler @ 0029b170 */
                    /* catch() { ... } // from try @ 0029b8c8 with catch @ 0029b8d8 */
  return;
}


==================================================================

### FUNC 0029b8f0 (244 bytes) name=cvGraphAddVtx

uint cvGraphAddVtx(uint *param_1,long param_2,undefined8 *param_3)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  uint *local_10;
  uint *local_8;
  
                    /* try { // try from 0029b8fc to 0039b8ff has its CatchHandler @ 0029b170 */
                    /* catch() { ... } // from try @ 0029b7f4 with catch @ 0029b900 */
  if (param_1 == (uint *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
                    /* try { // try from 0029b988 to 0039b98b has its CatchHandler @ 0029b928 */
    cv::String::allocate((String *)&local_10,0);
                    /* try { // try from 0029b9a8 to 0039b9ab has its CatchHandler @ 0029b9b8 */
    cv::error(-0x1b,(String *)&local_10,
              "int cvGraphAddVtx(CvGraph*, const CvGraphVtx*, CvGraphVtx**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa37);
                    /* try { // try from 0029b9b0 to 0039b9b3 has its CatchHandler @ 0029b928 */
    cv::String::deallocate((String *)&local_10);
                    /* catch() { ... } // from try @ 0029b9a8 with catch @ 0029b9b8 */
    local_10 = puRam0000000000000060;
    if (puRam0000000000000060 == (uint *)0x0) goto LAB_0029b9c4;
LAB_0029b91c:
    uVar3 = *local_10;
                    /* try { // try from 0029b924 to 0039b927 has its CatchHandler @ 0029b170 */
    uVar1 = param_1[0x1a];
                    /* catch() { ... } // from try @ 0029b988 with catch @ 0029b928
                       catch() { ... } // from try @ 0029b9b0 with catch @ 0029b928
                       catch() { ... } // from try @ 0029b9c8 with catch @ 0029b928 */
    *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_10 + 2);
    *local_10 = uVar3 & 0x3ffffff;
    param_1[0x1a] = uVar1 + 1;
  }
  else {
                    /* try { // try from 0029b910 to 0039b913 has its CatchHandler @ 0029b170 */
    local_10 = *(uint **)(param_1 + 0x18);
                    /* catch() { ... } // from try @ 0029b854 with catch @ 0029b914 */
    if (local_10 != (uint *)0x0) goto LAB_0029b91c;
LAB_0029b9c4:
                    /* try { // try from 0029b9c8 to 0039b9cb has its CatchHandler @ 0029b928 */
                    /* catch() { ... } // from try @ 0029ba08 with catch @ 0029b9cc
                       catch() { ... } // from try @ 0029cd1c with catch @ 0029b9cc
                       catch() { ... } // from try @ 0029cd34 with catch @ 0029b9cc */
    cvSetAdd(param_1,local_10,&local_10);
    if (local_10 == (uint *)0x0) {
      uVar3 = 0xffffffff;
      goto LAB_0029b95c;
    }
  }
  puVar2 = local_10;
  if (param_2 != 0) {
    memcpy(local_10 + 4,(void *)(param_2 + 0x10),(long)(int)param_1[0xb] - 0x10);
  }
  uVar3 = *puVar2;
  puVar2[2] = 0;
  puVar2[3] = 0;
  local_10 = puVar2;
LAB_0029b95c:
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = local_10;
  }
  return uVar3;
}


==================================================================

### FUNC 0029b9f8 (276 bytes) name=cvFindGraphEdgeByPtr

long cvFindGraphEdgeByPtr(uint *param_1,uint *param_2,uint *param_3)

{
  long lVar1;
  uint *puVar2;
  uint *puVar3;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 0029ba08 to 0039ccf7 has its CatchHandler @ 0029b9cc */
  if ((param_2 == (uint *)0x0 || param_3 == (uint *)0x0) || (param_1 == (uint *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "CvGraphEdge* cvFindGraphEdgeByPtr(const CvGraph*, const CvGraphVtx*, const CvGraphVtx*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa8c);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 == param_3) {
    lVar1 = 0;
  }
  else {
    puVar3 = param_2;
    if (((*param_1 >> 0xe & 1) == 0) && ((*param_3 & 0x3ffffff) < (*param_2 & 0x3ffffff))) {
      puVar3 = param_3;
      param_3 = param_2;
    }
    lVar1 = *(long *)(puVar3 + 2);
    if (lVar1 != 0) {
      puVar2 = *(uint **)(lVar1 + 0x20);
      while ((param_3 != puVar2 &&
             (lVar1 = *(long *)(lVar1 + (long)(int)(uint)(puVar2 == puVar3) * 8 + 8), lVar1 != 0)))
      {
        puVar2 = *(uint **)(lVar1 + 0x20);
      }
    }
  }
  return lVar1;
}


==================================================================

### FUNC 0029bb20 (292 bytes) name=cvFindGraphEdge

void cvFindGraphEdge(long param_1,undefined4 param_2,undefined4 param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  int *piVar4;
  int *piVar5;
  char *pcVar6;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar3 = s_graph_pointer_is_NULL_00464580[0x14];
    uVar2 = s_graph_pointer_is_NULL_00464580._8_8_;
    uVar1 = s_graph_pointer_is_NULL_00464580._0_8_;
    *(undefined4 *)(pcVar6 + 0x10) = s_graph_pointer_is_NULL_00464580._16_4_;
    pcVar6[0x14] = cVar3;
    *(undefined8 *)pcVar6 = uVar1;
    *(undefined8 *)(pcVar6 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,"CvGraphEdge* cvFindGraphEdge(const CvGraph*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xaad);
    cv::String::deallocate((String *)&local_10);
    piVar4 = (int *)cvGetSeqElem(0,param_2);
  }
  else {
    piVar4 = (int *)cvGetSeqElem(param_1,param_2);
  }
  if (piVar4 == (int *)0x0) {
    piVar5 = (int *)cvGetSeqElem(param_1,param_3);
  }
  else {
    if (*piVar4 < 0) {
      piVar4 = (int *)0x0;
    }
    piVar5 = (int *)cvGetSeqElem(param_1,param_3);
  }
  if (piVar5 != (int *)0x0) {
    if (*piVar5 < 0) {
      piVar5 = (int *)0x0;
    }
    cvFindGraphEdgeByPtr(param_1,piVar4,piVar5);
    return;
  }
  cvFindGraphEdgeByPtr(param_1,piVar4,0);
  return;
}


==================================================================

### FUNC 0029bc58 (636 bytes) name=cvGraphAddEdgeByPtr

undefined8
cvGraphAddEdgeByPtr(uint *param_1,uint *param_2,uint *param_3,long param_4,undefined8 *param_5)

{
  uint uVar1;
  uint *puVar2;
  undefined8 uVar3;
  char cVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  uint *puVar7;
  undefined8 uVar8;
  long lVar9;
  char *pcVar10;
  int iVar11;
  uint *local_10;
  uint *local_8;
  
  if (param_1 == (uint *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar4 = s_graph_pointer_is_NULL_00464580[0x14];
    uVar3 = s_graph_pointer_is_NULL_00464580._8_8_;
    uVar8 = s_graph_pointer_is_NULL_00464580._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_graph_pointer_is_NULL_00464580._16_4_;
    pcVar10[0x14] = cVar4;
    *(undefined8 *)pcVar10 = uVar8;
    *(undefined8 *)(pcVar10 + 8) = uVar3;
    cv::error(-0x1b,(String *)&local_10,
              "int cvGraphAddEdgeByPtr(CvGraph*, CvGraphVtx*, CvGraphVtx*, const CvGraphEdge*, CvGraphEdge**)"
              ,"/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xac5);
    cv::String::deallocate((String *)&local_10);
  }
  if (((*param_1 >> 0xe & 1) == 0) && ((*param_3 & 0x3ffffff) < (*param_2 & 0x3ffffff))) {
    local_10 = (uint *)cvFindGraphEdgeByPtr(param_1,param_3,param_2);
    puVar2 = param_2;
    param_2 = param_3;
  }
  else {
    local_10 = (uint *)cvFindGraphEdgeByPtr(param_1,param_2,param_3);
    puVar2 = param_3;
  }
  if (local_10 == (uint *)0x0) {
    if (param_2 == puVar2) {
      iVar11 = -5;
      if (param_2 == (uint *)0x0) {
        iVar11 = -0x1b;
      }
      local_8 = local_10;
      pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x29);
      cVar4 = s_vertex_pointers_coinside__or_set_00464598[0x28];
      uVar6 = s_vertex_pointers_coinside__or_set_00464598._24_8_;
      uVar5 = s_vertex_pointers_coinside__or_set_00464598._16_8_;
      uVar3 = s_vertex_pointers_coinside__or_set_00464598._8_8_;
      uVar8 = s_vertex_pointers_coinside__or_set_00464598._0_8_;
      *(undefined8 *)(pcVar10 + 0x20) = s_vertex_pointers_coinside__or_set_00464598._32_8_;
      pcVar10[0x28] = cVar4;
      *(undefined8 *)pcVar10 = uVar8;
      *(undefined8 *)(pcVar10 + 8) = uVar3;
      *(undefined8 *)(pcVar10 + 0x10) = uVar5;
      *(undefined8 *)(pcVar10 + 0x18) = uVar6;
      cv::error(iVar11,(String *)&local_10,
                "int cvGraphAddEdgeByPtr(CvGraph*, CvGraphVtx*, CvGraphVtx*, const CvGraphEdge*, CvGraphEdge**)"
                ,"/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xad9);
      cv::String::deallocate((String *)&local_10);
    }
    lVar9 = *(long *)(param_1 + 0x1c);
    local_10 = *(uint **)(lVar9 + 0x60);
    if (local_10 == (uint *)0x0) {
      cvSetAdd(lVar9,0,&local_10);
      lVar9 = *(long *)(param_1 + 0x1c);
    }
    else {
      uVar1 = *local_10;
      iVar11 = *(int *)(lVar9 + 0x68);
      *(undefined8 *)(lVar9 + 0x60) = *(undefined8 *)(local_10 + 2);
      *local_10 = uVar1 & 0x3ffffff;
      *(int *)(lVar9 + 0x68) = iVar11 + 1;
    }
    puVar7 = local_10;
    uVar8 = *(undefined8 *)(param_2 + 2);
    *(undefined8 *)(local_10 + 4) = *(undefined8 *)(puVar2 + 2);
    *(undefined8 *)(local_10 + 2) = uVar8;
    *(uint **)(local_10 + 6) = param_2;
    *(uint **)(local_10 + 8) = puVar2;
    iVar11 = *(int *)(lVar9 + 0x2c);
    *(uint **)(puVar2 + 2) = local_10;
    *(uint **)(param_2 + 2) = local_10;
    iVar11 = iVar11 + -0x28;
    if (param_4 == 0) {
      if (0 < iVar11) {
        memset(local_10 + 10,0,(long)iVar11);
      }
      puVar7[1] = 0x3f800000;
    }
    else {
      if (0 < iVar11) {
        memcpy(local_10 + 10,(void *)(param_4 + 0x28),(long)iVar11);
      }
      puVar7[1] = *(uint *)(param_4 + 4);
    }
    if (param_5 != (undefined8 *)0x0) {
      *param_5 = puVar7;
      return 1;
    }
    uVar8 = 1;
  }
  else {
    if (param_5 != (undefined8 *)0x0) {
      *param_5 = local_10;
    }
    uVar8 = 0;
  }
  return uVar8;
}


==================================================================

### FUNC 0029befc (252 bytes) name=cvGraphAddEdge

void cvGraphAddEdge(long param_1,undefined4 param_2,undefined4 param_3,undefined8 param_4,
                   undefined8 param_5)

{
  int *piVar1;
  int *piVar2;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "int cvGraphAddEdge(CvGraph*, int, int, const CvGraphEdge*, CvGraphEdge**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb08);
    cv::String::deallocate((String *)&local_10);
    piVar1 = (int *)cvGetSeqElem(0,param_2);
  }
  else {
    piVar1 = (int *)cvGetSeqElem(param_1,param_2);
  }
  if (piVar1 == (int *)0x0) {
    piVar2 = (int *)cvGetSeqElem(param_1,param_3);
  }
  else {
    if (*piVar1 < 0) {
      piVar1 = (int *)0x0;
    }
    piVar2 = (int *)cvGetSeqElem(param_1,param_3);
  }
  if ((piVar2 != (int *)0x0) && (*piVar2 < 0)) {
    piVar2 = (int *)0x0;
  }
  cvGraphAddEdgeByPtr(param_1,piVar1,piVar2,param_4,param_5);
  return;
}


==================================================================

### FUNC 0029c00c (508 bytes) name=cvGraphRemoveEdgeByPtr

void cvGraphRemoveEdgeByPtr(uint *param_1,uint *param_2,uint *param_3)

{
  long lVar1;
  code *pcVar2;
  uint *puVar3;
  uint *puVar4;
  uint uVar5;
  uint uVar6;
  undefined8 uVar7;
  long lVar8;
  uint *puVar9;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_2 == (uint *)0x0 || param_3 == (uint *)0x0) || (param_1 == (uint *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "void cvGraphRemoveEdgeByPtr(CvGraph*, CvGraphVtx*, CvGraphVtx*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb19);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 != param_3) {
    puVar9 = param_3;
    if (((*param_1 >> 0xe & 1) == 0) && ((*param_3 & 0x3ffffff) < (*param_2 & 0x3ffffff))) {
      puVar9 = param_2;
      param_2 = param_3;
    }
    lVar8 = *(long *)(param_2 + 2);
    if (lVar8 != 0) {
      uVar5 = (uint)(*(uint **)(lVar8 + 0x20) == param_2);
      if (puVar9 == *(uint **)(lVar8 + 0x20)) {
        *(undefined8 *)(param_2 + 2) = *(undefined8 *)(lVar8 + (long)(int)uVar5 * 8 + 8);
      }
      else {
        do {
          lVar1 = lVar8 + (long)(int)uVar5 * 8;
          lVar8 = *(long *)(lVar1 + 8);
          if (lVar8 == 0) {
            return;
          }
          uVar5 = (uint)(*(uint **)(lVar8 + 0x20) == param_2);
        } while (puVar9 != *(uint **)(lVar8 + 0x20));
        *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(lVar8 + (long)(int)uVar5 * 8 + 8);
      }
      puVar3 = *(uint **)(puVar9 + 2);
      if (puVar3 != (uint *)0x0) {
        uVar5 = (uint)(*(uint **)(puVar3 + 8) == puVar9);
        if (*(uint **)(puVar3 + 6) == param_2) {
          *(undefined8 *)(puVar9 + 2) =
               *(undefined8 *)(puVar3 + (long)(int)(uint)(*(uint **)(puVar3 + 8) == puVar9) * 2 + 2)
          ;
        }
        else {
          do {
            uVar6 = uVar5;
            puVar4 = puVar3;
            puVar3 = *(uint **)(puVar4 + (long)(int)uVar6 * 2 + 2);
            if (puVar3 == (uint *)0x0) {
                    /* WARNING: Does not return */
              pcVar2 = (code *)SoftwareBreakpoint(1000,0x29c118);
              (*pcVar2)();
            }
            uVar5 = (uint)(*(uint **)(puVar3 + 8) == puVar9);
          } while (*(uint **)(puVar3 + 6) != param_2);
          *(undefined8 *)(puVar4 + (long)(int)uVar6 * 2 + 2) =
               *(undefined8 *)(puVar3 + (long)(int)(uint)(*(uint **)(puVar3 + 8) == puVar9) * 2 + 2)
          ;
        }
        lVar8 = *(long *)(param_1 + 0x1c);
        uVar7 = *(undefined8 *)(lVar8 + 0x60);
        *puVar3 = *puVar3 & 0x3ffffff | 0x80000000;
        *(undefined8 *)(puVar3 + 2) = uVar7;
        *(uint **)(lVar8 + 0x60) = puVar3;
        *(int *)(lVar8 + 0x68) = *(int *)(lVar8 + 0x68) + -1;
        return;
      }
                    /* WARNING: Does not return */
      pcVar2 = (code *)SoftwareBreakpoint(1000,0x29c208);
      (*pcVar2)();
    }
  }
  return;
}


==================================================================

### FUNC 0029c21c (344 bytes) name=cvGraphRemoveVtxByPtr

int cvGraphRemoveVtxByPtr(long param_1,uint *param_2)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  char *pcVar8;
  int iVar9;
  long lVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == (uint *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvGraphRemoveVtxByPtr(CvGraph*, CvGraphVtx*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa50);
    cv::String::deallocate((String *)&local_10);
    uVar1 = *param_2;
  }
  else {
    uVar1 = *param_2;
  }
  if ((int)uVar1 < 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x27);
    cVar7 = s_The_vertex_does_not_belong_to_th_004645c8[0x26];
    uVar6 = s_The_vertex_does_not_belong_to_th_004645c8._36_2_;
    uVar5 = s_The_vertex_does_not_belong_to_th_004645c8._24_8_;
    uVar4 = s_The_vertex_does_not_belong_to_th_004645c8._16_8_;
    uVar3 = s_The_vertex_does_not_belong_to_th_004645c8._8_8_;
    uVar2 = s_The_vertex_does_not_belong_to_th_004645c8._0_8_;
    *(undefined4 *)(pcVar8 + 0x20) = s_The_vertex_does_not_belong_to_th_004645c8._32_4_;
    *(undefined2 *)(pcVar8 + 0x24) = uVar6;
    pcVar8[0x26] = cVar7;
    *(undefined8 *)pcVar8 = uVar2;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    *(undefined8 *)(pcVar8 + 0x10) = uVar4;
    *(undefined8 *)(pcVar8 + 0x18) = uVar5;
    cv::error(-5,(String *)&local_10,"int cvGraphRemoveVtxByPtr(CvGraph*, CvGraphVtx*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa53);
    cv::String::deallocate((String *)&local_10);
  }
  lVar10 = *(long *)(param_2 + 2);
  iVar9 = *(int *)(*(long *)(param_1 + 0x70) + 0x68);
  if (lVar10 == 0) {
    iVar9 = 0;
  }
  else {
    do {
      cvGraphRemoveEdgeByPtr(param_1,*(undefined8 *)(lVar10 + 0x18),*(undefined8 *)(lVar10 + 0x20));
      lVar10 = *(long *)(param_2 + 2);
    } while (lVar10 != 0);
    iVar9 = iVar9 - *(int *)(*(long *)(param_1 + 0x70) + 0x68);
  }
  *(undefined8 *)(param_2 + 2) = *(undefined8 *)(param_1 + 0x60);
  *param_2 = *param_2 & 0x3ffffff | 0x80000000;
  *(uint **)(param_1 + 0x60) = param_2;
  *(int *)(param_1 + 0x68) = *(int *)(param_1 + 0x68) + -1;
  return iVar9;
}


==================================================================

### FUNC 0029c39c (360 bytes) name=cvGraphRemoveVtx

int cvGraphRemoveVtx(long param_1,undefined4 param_2)

{
  undefined8 uVar1;
  undefined2 uVar2;
  char cVar3;
  code *pcVar4;
  int iVar5;
  uint *puVar6;
  char *pcVar7;
  uint uVar8;
  long lVar9;
  undefined8 uVar10;
  int iVar11;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvGraphRemoveVtx(CvGraph*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa6c);
    cv::String::deallocate((String *)&local_10);
  }
  puVar6 = (uint *)cvGetSeqElem(param_1,param_2);
  if ((puVar6 != (uint *)0x0) && (uVar8 = *puVar6, -1 < (int)uVar8)) {
    lVar9 = *(long *)(puVar6 + 2);
    iVar5 = *(int *)(*(long *)(param_1 + 0x70) + 0x68);
    iVar11 = iVar5 + 1;
    if (lVar9 != 0) {
      do {
        iVar11 = iVar11 + 1;
        cvGraphRemoveEdgeByPtr(param_1,*(undefined8 *)(lVar9 + 0x18),*(undefined8 *)(lVar9 + 0x20));
        lVar9 = *(long *)(puVar6 + 2);
      } while (lVar9 != 0);
      uVar8 = *puVar6;
      iVar5 = *(int *)(*(long *)(param_1 + 0x70) + 0x68);
    }
    uVar10 = *(undefined8 *)(param_1 + 0x60);
    *puVar6 = uVar8 & 0x3ffffff | 0x80000000;
    *(undefined8 *)(puVar6 + 2) = uVar10;
    *(uint **)(param_1 + 0x60) = puVar6;
    *(int *)(param_1 + 0x68) = *(int *)(param_1 + 0x68) + -1;
    return iVar11 - iVar5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x17);
  cVar3 = s_The_vertex_is_not_found_004645f0[0x16];
  uVar2 = s_The_vertex_is_not_found_004645f0._20_2_;
  uVar1 = s_The_vertex_is_not_found_004645f0._8_8_;
  uVar10 = s_The_vertex_is_not_found_004645f0._0_8_;
  *(undefined4 *)(pcVar7 + 0x10) = s_The_vertex_is_not_found_004645f0._16_4_;
  *(undefined2 *)(pcVar7 + 0x14) = uVar2;
  pcVar7[0x16] = cVar3;
  *(undefined8 *)pcVar7 = uVar10;
  *(undefined8 *)(pcVar7 + 8) = uVar1;
  cv::error(-5,(String *)&local_10,"int cvGraphRemoveVtx(CvGraph*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xa70);
  cv::String::deallocate((String *)&local_10);
                    /* WARNING: Does not return */
  pcVar4 = (code *)SoftwareBreakpoint(1000,0x29c4c0);
  (*pcVar4)();
}


==================================================================

### FUNC 0029c52c (256 bytes) name=cvGraphRemoveEdge

void cvGraphRemoveEdge(long param_1,undefined4 param_2,undefined4 param_3)

{
  int *piVar1;
  int *piVar2;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvGraphRemoveEdge(CvGraph*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb54);
    cv::String::deallocate((String *)&local_10);
    piVar1 = (int *)cvGetSeqElem(0,param_2);
  }
  else {
    piVar1 = (int *)cvGetSeqElem(param_1,param_2);
  }
  if (piVar1 == (int *)0x0) {
    piVar2 = (int *)cvGetSeqElem(param_1,param_3);
  }
  else {
    if (*piVar1 < 0) {
      piVar1 = (int *)0x0;
    }
    piVar2 = (int *)cvGetSeqElem(param_1,param_3);
  }
  if (piVar2 != (int *)0x0) {
    if (*piVar2 < 0) {
      piVar2 = (int *)0x0;
    }
    cvGraphRemoveEdgeByPtr(param_1,piVar1,piVar2);
    return;
  }
  cvGraphRemoveEdgeByPtr(param_1,piVar1,0);
  return;
}


==================================================================

### FUNC 0029c640 (156 bytes) name=cvGraphVtxDegreeByPtr

int cvGraphVtxDegreeByPtr(long param_1,long param_2)

{
  int iVar1;
  long lVar2;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "int cvGraphVtxDegreeByPtr(const CvGraph*, const CvGraphVtx*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb65);
    cv::String::deallocate((String *)&local_10);
  }
  lVar2 = *(long *)(param_2 + 8);
  if (lVar2 == 0) {
    iVar1 = 0;
  }
  else {
    iVar1 = 0;
    do {
      iVar1 = iVar1 + 1;
      lVar2 = *(long *)(lVar2 + (ulong)(*(long *)(lVar2 + 0x20) == param_2) * 8 + 8);
    } while (lVar2 != 0);
  }
  return iVar1;
}


==================================================================

### FUNC 0029c6f0 (260 bytes) name=cvGraphVtxDegree

int cvGraphVtxDegree(long param_1,undefined4 param_2)

{
  code *pcVar1;
  int iVar2;
  int *piVar3;
  long lVar4;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"int cvGraphVtxDegree(const CvGraph*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb7a);
    cv::String::deallocate((String *)&local_10);
  }
  piVar3 = (int *)cvGetSeqElem(param_1,param_2);
  if ((piVar3 != (int *)0x0) && (-1 < *piVar3)) {
    lVar4 = *(long *)(piVar3 + 2);
    if (lVar4 == 0) {
      iVar2 = 0;
    }
    else {
      iVar2 = 0;
      do {
        iVar2 = iVar2 + 1;
        lVar4 = *(long *)(lVar4 + (ulong)(piVar3 == *(int **)(lVar4 + 0x20)) * 8 + 8);
      } while (lVar4 != 0);
    }
    return iVar2;
  }
  local_10 = 0;
  local_8 = 0;
  cv::String::allocate((String *)&local_10,0);
  cv::error(-0xcc,(String *)&local_10,"int cvGraphVtxDegree(const CvGraph*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb7e);
  cv::String::deallocate((String *)&local_10);
                    /* WARNING: Does not return */
  pcVar1 = (code *)SoftwareBreakpoint(1000,0x29c7a8);
  (*pcVar1)();
}


==================================================================

### FUNC 0029c81c (692 bytes) name=cvCreateGraphScanner

long * cvCreateGraphScanner(long param_1,long param_2,undefined4 param_3)

{
  uint *puVar1;
  int iVar2;
  int iVar3;
  undefined8 uVar4;
  char cVar5;
  long *plVar6;
  undefined8 uVar7;
  char *pcVar8;
  long lVar9;
  int iVar10;
  long local_40;
  long local_38;
  uint *local_28;
  uint *local_18;
  
  if (param_1 == 0) {
    local_40 = param_1;
    local_38 = param_1;
    pcVar8 = (char *)cv::String::allocate((String *)&local_40,0x12);
    uVar4 = s_Null_graph_pointer_00464608._8_8_;
    uVar7 = s_Null_graph_pointer_00464608._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_Null_graph_pointer_00464608._16_2_;
    *(undefined8 *)pcVar8 = uVar7;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    cv::error(-0x1b,(String *)&local_40,
              "CvGraphScanner* cvCreateGraphScanner(CvGraph*, CvGraphVtx*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xbe6);
    cv::String::deallocate((String *)&local_40);
  }
  lVar9 = *(long *)(param_1 + 0x48);
  if (lVar9 == 0) {
    local_40 = lVar9;
    local_38 = lVar9;
    pcVar8 = (char *)cv::String::allocate((String *)&local_40,0x13);
    cVar5 = s_graph_>storage____0_00464620[0x12];
    uVar4 = s_graph_>storage____0_00464620._8_8_;
    uVar7 = s_graph_>storage____0_00464620._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_graph_>storage____0_00464620._16_2_;
    pcVar8[0x12] = cVar5;
    *(undefined8 *)pcVar8 = uVar7;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    cv::error(-0xd7,(String *)&local_40,
              "CvGraphScanner* cvCreateGraphScanner(CvGraph*, CvGraphVtx*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xbe8);
    cv::String::deallocate((String *)&local_40);
  }
  plVar6 = (long *)cv::cvAlloc(0x30);
  *plVar6 = 0;
  plVar6[1] = 0;
  plVar6[2] = 0;
  plVar6[3] = 0;
  plVar6[4] = 0;
  plVar6[5] = 0;
  plVar6[3] = param_1;
  *(undefined4 *)((long)plVar6 + 0x2c) = param_3;
  *plVar6 = param_2;
  if (param_2 == 0) {
    uVar7 = *(undefined8 *)(param_1 + 0x48);
    *(undefined4 *)(plVar6 + 5) = 0;
    uVar7 = cvCreateChildMemStorage(uVar7);
    lVar9 = cvCreateSeq(0,0x70,0x10,uVar7);
    plVar6[4] = lVar9;
  }
  else {
    uVar7 = *(undefined8 *)(param_1 + 0x48);
    *(undefined4 *)(plVar6 + 5) = 0xffffffff;
    uVar7 = cvCreateChildMemStorage(uVar7);
    lVar9 = cvCreateSeq(0,0x70,0x10,uVar7);
    plVar6[4] = lVar9;
  }
  iVar2 = *(int *)(param_1 + 0x28);
  iVar3 = *(int *)(param_1 + 0x2c);
  iVar10 = 0;
  cvStartReadSeq(param_1,(String *)&local_40);
  if (0 < iVar2) {
    do {
      while( true ) {
        puVar1 = (uint *)((long)local_28 + (long)iVar3);
        *local_28 = *local_28 & 0x9fffffff;
        local_28 = puVar1;
        if (puVar1 < local_18) break;
        iVar10 = iVar10 + 1;
        cvChangeSeqBlock((String *)&local_40,1);
        if (iVar10 == iVar2) goto LAB_0029c910;
      }
      iVar10 = iVar10 + 1;
    } while (iVar10 != iVar2);
  }
LAB_0029c910:
  lVar9 = *(long *)(param_1 + 0x70);
  if (lVar9 == 0) {
    local_40 = lVar9;
    local_38 = lVar9;
    cv::String::allocate((String *)&local_40,0);
    cv::error(-0x1b,(String *)&local_40,"void icvSeqElemsClearFlags(CvSeq*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xb99);
    cv::String::deallocate((String *)&local_40);
  }
  iVar2 = *(int *)(lVar9 + 0x28);
  iVar3 = *(int *)(lVar9 + 0x2c);
  iVar10 = 0;
  cvStartReadSeq(lVar9,(String *)&local_40);
  if (0 < iVar2) {
    do {
      while( true ) {
        puVar1 = (uint *)((long)local_28 + (long)iVar3);
        *local_28 = *local_28 & 0xbfffffff;
        local_28 = puVar1;
        if (puVar1 < local_18) break;
        iVar10 = iVar10 + 1;
        cvChangeSeqBlock((String *)&local_40,1);
        if (iVar10 == iVar2) {
          return plVar6;
        }
      }
      iVar10 = iVar10 + 1;
    } while (iVar10 != iVar2);
  }
  return plVar6;
}


==================================================================

### FUNC 0029cb0c (176 bytes) name=cvReleaseGraphScanner

void cvReleaseGraphScanner(long *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  void *pvVar5;
  char *pcVar6;
  long *local_10;
  long *local_8;
  
  if (param_1 == (long *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x24);
    uVar4 = s_Null_double_pointer_to_graph_sca_00464638._24_8_;
    uVar3 = s_Null_double_pointer_to_graph_sca_00464638._16_8_;
    uVar2 = s_Null_double_pointer_to_graph_sca_00464638._8_8_;
    uVar1 = s_Null_double_pointer_to_graph_sca_00464638._0_8_;
    *(undefined4 *)(pcVar6 + 0x20) = s_Null_double_pointer_to_graph_sca_00464638._32_4_;
    *(undefined8 *)pcVar6 = uVar1;
    *(undefined8 *)(pcVar6 + 8) = uVar2;
    *(undefined8 *)(pcVar6 + 0x10) = uVar3;
    *(undefined8 *)(pcVar6 + 0x18) = uVar4;
    cv::error(-0x1b,(String *)&local_10,"void cvReleaseGraphScanner(CvGraphScanner**)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xc08);
    cv::String::deallocate((String *)&local_10);
  }
  pvVar5 = (void *)*param_1;
  if (pvVar5 != (void *)0x0) {
    if (*(long *)((long)pvVar5 + 0x20) != 0) {
      cvReleaseMemStorage(*(long *)((long)pvVar5 + 0x20) + 0x48);
      pvVar5 = (void *)*param_1;
    }
    cv::cvFree_(pvVar5);
    *param_1 = 0;
  }
  return;
}


==================================================================

### FUNC 0029cbd0 (960 bytes) name=cvNextGraphItem

/* WARNING: Type propagation algorithm not settling */

uint cvNextGraphItem(ulong *param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char *pcVar7;
  uint uVar8;
  uint *puVar9;
  ulong uVar10;
  uint uVar11;
  uint *puVar12;
  uint *puVar13;
  uint *local_50;
  uint *local_48;
  ulong local_40;
  ulong local_38;
  uint *local_28;
  uint *local_18;
  
  if ((param_1 == (ulong *)0x0) || (param_1[4] == 0)) {
    local_40 = 0;
    local_38 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_40,0x12);
    uVar6 = s_Null_graph_scanner_00464660._8_8_;
    uVar5 = s_Null_graph_scanner_00464660._0_8_;
    *(undefined2 *)(pcVar7 + 0x10) = s_Null_graph_scanner_00464660._16_2_;
    *(undefined8 *)pcVar7 = uVar5;
    *(undefined8 *)(pcVar7 + 8) = uVar6;
    cv::error(-0x1b,(String *)&local_40,"int cvNextGraphItem(CvGraphScanner*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xc1d);
    cv::String::deallocate((String *)&local_40);
  }
  puVar12 = (uint *)param_1[1];
  puVar9 = (uint *)param_1[2];
  puVar13 = (uint *)*param_1;
LAB_0029cc20:
  do {
    if ((puVar12 != (uint *)0x0) && (uVar11 = *puVar12, (uVar11 >> 0x1e & 1) == 0)) {
      *param_1 = (ulong)puVar12;
      uVar1 = *(uint *)((long)param_1 + 0x2c);
      *puVar12 = uVar11 | 0x40000000;
      puVar9 = *(uint **)(puVar12 + 2);
      puVar13 = puVar12;
      if ((uVar1 & 1) != 0) {
        param_1[2] = (ulong)puVar9;
        param_1[1] = 0;
        return 1;
      }
    }
joined_r0x0029cc48:
    while (puVar9 != (uint *)0x0) {
      uVar11 = *puVar9;
      puVar12 = *(uint **)(puVar9 + ((ulong)(*(uint **)(puVar9 + 6) == puVar13) + 2) * 2 + 2);
      if ((uVar11 >> 0x1e & 1) == 0) {
        if ((*(uint **)(puVar9 + 6) != puVar12) || ((*(uint *)param_1[3] >> 0xe & 1) == 0)) {
          uVar1 = *puVar12;
          *puVar9 = uVar11 | 0x40000000;
          if ((uVar1 >> 0x1e & 1) != 0) {
            uVar2 = *(uint *)((long)param_1 + 0x2c);
            if ((uVar2 & 0x1c) != 0) {
              uVar8 = 4;
              if (((uVar1 >> 0x1d & 1) == 0) && (uVar8 = 8, (uVar11 & 0x10000000) == 0)) {
                uVar8 = 0x10;
              }
              *puVar9 = uVar11 & 0xefffffff | 0x40000000;
              if ((uVar8 & uVar2) != 0) {
                *param_1 = (ulong)puVar13;
                param_1[1] = (ulong)puVar12;
                param_1[2] = (ulong)puVar9;
                return uVar8;
              }
            }
            goto LAB_0029cca0;
          }
          uVar10 = param_1[4];
          *puVar13 = *puVar13 | 0x20000000;
          local_50 = puVar13;
          local_48 = puVar9;
          cvSeqPush(uVar10,&local_50);
          if ((*(uint *)((long)param_1 + 0x2c) >> 1 & 1) != 0) {
            *param_1 = (ulong)puVar13;
            param_1[1] = (ulong)puVar12;
            param_1[2] = (ulong)puVar9;
            return 2;
          }
          goto LAB_0029cc20;
        }
        if ((*puVar12 & 0x60000000) != 0x60000000) goto LAB_0029cca0;
        *puVar9 = uVar11 | 0x10000000;
                    /* try { // try from 0029cd14 to 0039cd17 has its CatchHandler @ 0029cd24 */
        puVar9 = *(uint **)(puVar9 + (ulong)(*(uint **)(puVar9 + 8) == puVar13) * 2 + 2);
      }
      else {
LAB_0029cca0:
        puVar9 = *(uint **)(puVar9 + (ulong)(*(uint **)(puVar9 + 8) == puVar13) * 2 + 2);
      }
    }
                    /* try { // try from 0029cd1c to 0039cd1f has its CatchHandler @ 0029b9cc */
                    /* catch() { ... } // from try @ 0029cd14 with catch @ 0029cd24 */
    if (*(int *)(param_1[4] + 0x28) != 0) {
      cvSeqPop(param_1[4],&local_50);
      uVar11 = *(uint *)((long)param_1 + 0x2c);
                    /* catch() { ... } // from try @ 0029ce24 with catch @ 0029ce58 */
      *local_50 = *local_50 & 0xdfffffff;
      puVar9 = local_48;
      puVar13 = local_50;
      if ((uVar11 >> 6 & 1) != 0) {
                    /* try { // try from 0029ce68 to 0039ce6b has its CatchHandler @ 0029cd38 */
        puVar9 = *(uint **)(local_48 + 6);
                    /* catch() { ... } // from try @ 0029cef4 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029cf50 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029d570 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029d7b8 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029d9d4 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029da20 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029da44 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029db28 with catch @ 0029ce6c
                       catch() { ... } // from try @ 0029dbdc with catch @ 0029ce6c */
        param_1[2] = (ulong)local_48;
        *param_1 = (ulong)local_50;
        param_1[1] = *(ulong *)(local_48 + ((ulong)(puVar9 == local_50) + 2) * 2 + 2);
        return 0x40;
      }
      goto joined_r0x0029cc48;
    }
                    /* try { // try from 0029cef4 to 0039cef7 has its CatchHandler @ 0029ce6c */
    if ((-1 < (int)param_1[5]) ||
       (*(undefined4 *)(param_1 + 5) = 0, puVar12 = puVar13, puVar13 == (uint *)0x0)) {
      uVar10 = param_1[3];
                    /* try { // try from 0029cd34 to 0039cd37 has its CatchHandler @ 0029b9cc */
      if (uVar10 == 0) {
        local_40 = uVar10;
        local_38 = uVar10;
                    /* try { // try from 0029cf48 to 0039cf4b has its CatchHandler @ 0029db18 */
        cv::String::allocate((String *)&local_40,0);
                    /* try { // try from 0029cf50 to 0039cf53 has its CatchHandler @ 0029ce6c */
        cv::error(-0x1b,(String *)&local_40,"schar* icvSeqFindNextElem(CvSeq*, int, int, int, int*)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",2999);
        cv::String::deallocate((String *)&local_40);
      }
                    /* catch() { ... } // from try @ 0029cd78 with catch @ 0029cd38
                       catch() { ... } // from try @ 0029ce2c with catch @ 0029cd38
                       catch() { ... } // from try @ 0029ce68 with catch @ 0029cd38 */
      uVar1 = *(uint *)(uVar10 + 0x28);
      iVar3 = *(int *)(uVar10 + 0x2c);
      uVar11 = (uint)param_1[5];
      if (uVar1 == 0) {
                    /* try { // try from 0029ce24 to 0039ce27 has its CatchHandler @ 0029ce58 */
                    /* try { // try from 0029ce2c to 0039ce4f has its CatchHandler @ 0029cd38 */
        return 0xffffffff;
      }
      if (uVar1 <= uVar11) {
        iVar4 = 0;
        if (uVar1 != 0) {
          iVar4 = (int)uVar11 / (int)uVar1;
        }
        iVar4 = uVar11 - iVar4 * uVar1;
        uVar11 = 0;
        if (iVar4 < 0) {
          uVar11 = uVar1;
        }
        uVar11 = iVar4 + uVar11;
      }
      cvStartReadSeq(uVar10,(String *)&local_40,0);
      if (uVar11 != 0) {
        cvSetSeqReaderPos((String *)&local_40,uVar11,0);
      }
                    /* try { // try from 0029cd78 to 0039ce07 has its CatchHandler @ 0029cd38 */
      if ((int)uVar1 < 1) {
        return 0xffffffff;
      }
      uVar11 = 0;
      if ((*local_28 & 0xc0000000) != 0) {
        uVar11 = 0;
        do {
          local_28 = (uint *)((long)local_28 + (long)iVar3);
          if (local_18 <= local_28) {
            cvChangeSeqBlock((String *)&local_40,1);
          }
          uVar11 = uVar11 + 1;
          if (uVar11 == uVar1) {
            return 0xffffffff;
          }
        } while ((*local_28 & 0xc0000000) != 0);
      }
      *(uint *)(param_1 + 5) = uVar11;
      puVar12 = local_28;
    }
    if ((*(uint *)((long)param_1 + 0x2c) >> 5 & 1) != 0) {
      param_1[1] = (ulong)puVar12;
                    /* try { // try from 0029cf7c to 0039cf7f has its CatchHandler @ 0029dab4 */
      param_1[2] = 0;
      *param_1 = 0;
      return 0x20;
    }
    puVar9 = (uint *)0x0;
    puVar13 = puVar12;
  } while( true );
}


==================================================================

### FUNC 0029cfb8 (980 bytes) name=cvCloneGraph

long cvCloneGraph(uint *param_1,long param_2)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  int *piVar7;
  int iVar8;
  char *pcVar9;
  void *pvVar10;
  void *pvVar11;
  long lVar12;
  long lVar13;
  int iVar14;
  int iVar15;
  int *local_48;
  long local_40;
  long local_38;
  int *local_28;
  int *local_18;
  
                    /* try { // try from 0029cfc0 to 0039cfc3 has its CatchHandler @ 0029daa0 */
                    /* try { // try from 0029cfc8 to 0039cfcb has its CatchHandler @ 0029da9c */
                    /* try { // try from 0029cfd0 to 0039cfd3 has its CatchHandler @ 0029da98 */
                    /* try { // try from 0029cfe0 to 0039cfe3 has its CatchHandler @ 0029da84 */
  if ((param_1 == (uint *)0x0) || ((*param_1 & 0xffff3000) != 0x42981000)) {
                    /* try { // try from 0029d008 to 0039d01b has its CatchHandler @ 0029db94 */
    local_40 = 0;
    local_38 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_40,0x15);
    cVar6 = s_Invalid_graph_pointer_00464678[0x14];
    uVar5 = s_Invalid_graph_pointer_00464678._8_8_;
    uVar4 = s_Invalid_graph_pointer_00464678._0_8_;
                    /* try { // try from 0029d04c to 0039d077 has its CatchHandler @ 0029db84 */
    *(undefined4 *)(pcVar9 + 0x10) = s_Invalid_graph_pointer_00464678._16_4_;
    pcVar9[0x14] = cVar6;
    *(undefined8 *)pcVar9 = uVar4;
    *(undefined8 *)(pcVar9 + 8) = uVar5;
    cv::error(-5,(String *)&local_40,"CvGraph* cvCloneGraph(const CvGraph*, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xcb9);
    cv::String::deallocate((String *)&local_40);
  }
  if ((param_2 == 0) && (param_2 = *(long *)(param_1 + 0x12), param_2 == 0)) {
    local_40 = param_2;
    local_38 = param_2;
    pcVar9 = (char *)cv::String::allocate((String *)&local_40,0x14);
    uVar5 = s_NULL_storage_pointer_0043dfe8._8_8_;
    uVar4 = s_NULL_storage_pointer_0043dfe8._0_8_;
    *(undefined4 *)(pcVar9 + 0x10) = s_NULL_storage_pointer_0043dfe8._16_4_;
    *(undefined8 *)pcVar9 = uVar4;
    *(undefined8 *)(pcVar9 + 8) = uVar5;
    cv::error(-0x1b,(String *)&local_40,"CvGraph* cvCloneGraph(const CvGraph*, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xcbf);
    cv::String::deallocate((String *)&local_40);
  }
  uVar2 = param_1[0xb];
  iVar8 = *(int *)(*(long *)(param_1 + 0x1c) + 0x2c);
  pvVar10 = (void *)cv::cvAlloc((long)(int)param_1[10] << 2);
  pvVar11 = (void *)cv::cvAlloc((long)(int)param_1[10] << 3);
                    /* try { // try from 0029d0b0 to 0039d0b3 has its CatchHandler @ 0029db48 */
                    /* try { // try from 0029d0b8 to 0039d52b has its CatchHandler @ 0029db84 */
  lVar12 = cvCreateGraph(*param_1,param_1[1],uVar2,iVar8,param_2);
  memcpy((void *)(lVar12 + 0x3840),param_1 + 0xe10,(long)(int)param_1[1] - 0x78);
  cvStartReadSeq(param_1,(String *)&local_40,0);
  if (0 < (int)param_1[10]) {
    iVar15 = 0;
    iVar14 = 0;
    do {
      while( true ) {
        piVar7 = local_28;
        if (-1 < *local_28) {
          local_48 = (int *)0x0;
          cvGraphAddVtx(lVar12,local_28,&local_48);
          lVar13 = (long)iVar15;
          iVar3 = *piVar7;
          *local_48 = iVar3;
          *(int *)((long)pvVar10 + lVar13 * 4) = iVar3;
          *piVar7 = iVar15;
          iVar15 = iVar15 + 1;
          *(int **)((long)pvVar11 + lVar13 * 8) = local_48;
        }
        local_28 = (int *)((long)local_28 + (long)(int)uVar2);
        if (local_28 < local_18) break;
        iVar14 = iVar14 + 1;
        cvChangeSeqBlock((String *)&local_40,1);
        if ((int)param_1[10] <= iVar14) goto LAB_0029d190;
      }
      iVar14 = iVar14 + 1;
    } while (iVar14 < (int)param_1[10]);
  }
LAB_0029d190:
  iVar15 = 0;
  cvStartReadSeq(*(undefined8 *)(param_1 + 0x1c),(String *)&local_40);
  if (0 < *(int *)(*(long *)(param_1 + 0x1c) + 0x28)) {
    do {
      while( true ) {
        piVar7 = local_28;
        if (-1 < *local_28) {
          local_48 = (int *)0x0;
          cvGraphAddEdgeByPtr(lVar12,*(undefined8 *)
                                      ((long)pvVar11 + (long)**(int **)(local_28 + 6) * 8),
                              *(undefined8 *)((long)pvVar11 + (long)**(int **)(local_28 + 8) * 8),
                              local_28,&local_48);
          *local_48 = *piVar7;
        }
        local_28 = (int *)((long)local_28 + (long)iVar8);
        if (local_28 < local_18) break;
        iVar15 = iVar15 + 1;
        cvChangeSeqBlock((String *)&local_40,1);
        if (*(int *)(*(long *)(param_1 + 0x1c) + 0x28) <= iVar15) goto LAB_0029d254;
      }
      iVar15 = iVar15 + 1;
    } while (iVar15 < *(int *)(*(long *)(param_1 + 0x1c) + 0x28));
  }
LAB_0029d254:
  cvStartReadSeq(param_1,(String *)&local_40,0);
  lVar13 = *(long *)(param_1 + 0x1c);
  if (0 < *(int *)(lVar13 + 0x28)) {
    iVar8 = 0;
    iVar15 = 0;
    do {
      while( true ) {
        if (-1 < *local_28) {
          lVar1 = (long)iVar8;
          iVar8 = iVar8 + 1;
          *local_28 = *(int *)((long)pvVar10 + lVar1 * 4);
        }
        local_28 = (int *)((long)local_28 + (long)(int)uVar2);
        if (local_28 < local_18) break;
        iVar15 = iVar15 + 1;
        cvChangeSeqBlock((String *)&local_40,1);
        lVar13 = *(long *)(param_1 + 0x1c);
        if (*(int *)(lVar13 + 0x28) <= iVar15) goto LAB_0029d2e4;
      }
      iVar15 = iVar15 + 1;
    } while (iVar15 < *(int *)(lVar13 + 0x28));
  }
LAB_0029d2e4:
  cv::cvFree_(pvVar10);
  cv::cvFree_(pvVar11);
  iVar8 = cvGetErrStatus();
  if (iVar8 < 0) {
    lVar12 = 0;
  }
  return lVar12;
}


==================================================================

### FUNC 0029d3b4 (156 bytes) name=cvInsertNodeIntoTree

void cvInsertNodeIntoTree(long param_1,long param_2,long param_3)

{
  long lVar1;
  long lVar2;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == 0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvInsertNodeIntoTree(void*, void*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd3b);
    cv::String::deallocate((String *)&local_10);
  }
  lVar2 = *(long *)(param_2 + 0x20);
  lVar1 = param_2;
  if (param_2 == param_3) {
    lVar1 = 0;
  }
  *(long *)(param_1 + 0x10) = lVar2;
  *(long *)(param_1 + 0x18) = lVar1;
  if (lVar2 != 0) {
    *(long *)(lVar2 + 8) = param_1;
  }
  *(long *)(param_2 + 0x20) = param_1;
  return;
}


==================================================================

### FUNC 0029d464 (308 bytes) name=cvRemoveNodeFromTree

void cvRemoveNodeFromTree(long param_1,long param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  long lVar6;
  char *pcVar7;
  long local_10;
  long local_8;
  
  if (param_1 == 0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,"void cvRemoveNodeFromTree(void*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd50);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_1 == param_2) {
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x1f);
    cVar5 = s_frame_node_could_not_be_deleted_00464690[0x1e];
    uVar4 = s_frame_node_could_not_be_deleted_00464690._28_2_;
    uVar3 = s_frame_node_could_not_be_deleted_00464690._24_4_;
    uVar2 = s_frame_node_could_not_be_deleted_00464690._8_8_;
    uVar1 = s_frame_node_could_not_be_deleted_00464690._0_8_;
                    /* try { // try from 0029d54c to 0039d567 has its CatchHandler @ 0029db98 */
    *(undefined8 *)(pcVar7 + 0x10) = s_frame_node_could_not_be_deleted_00464690._16_8_;
    *(undefined4 *)(pcVar7 + 0x18) = uVar3;
    *(undefined2 *)(pcVar7 + 0x1c) = uVar4;
                    /* try { // try from 0029d570 to 0039d573 has its CatchHandler @ 0029ce6c */
    pcVar7[0x1e] = cVar5;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    cv::error(-5,(String *)&local_10,"void cvRemoveNodeFromTree(void*, void*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd53);
    cv::String::deallocate((String *)&local_10);
  }
  lVar6 = *(long *)(param_1 + 0x10);
  if (lVar6 != 0) {
    *(undefined8 *)(lVar6 + 8) = *(undefined8 *)(param_1 + 8);
  }
  if (*(long *)(param_1 + 8) == 0) {
    if (*(long *)(param_1 + 0x18) == 0) {
      if (param_2 == 0) {
        return;
      }
      *(long *)(param_2 + 0x20) = lVar6;
    }
    else {
      *(long *)(*(long *)(param_1 + 0x18) + 0x20) = lVar6;
    }
    return;
  }
  *(long *)(*(long *)(param_1 + 8) + 0x10) = lVar6;
  return;
}


==================================================================

### FUNC 0029d5c0 (236 bytes) name=cvInitTreeNodeIterator

void cvInitTreeNodeIterator(long *param_1,long param_2,int param_3)

{
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == (long *)0x0) || (param_2 == 0)) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0x1b,(String *)&local_10,
              "void cvInitTreeNodeIterator(CvTreeNodeIterator*, const void*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd6e);
                    /* try { // try from 0029d640 to 0039d71f has its CatchHandler @ 0029db84 */
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 < 0) {
    local_10 = 0;
    local_8 = 0;
    cv::String::allocate((String *)&local_10,0);
    cv::error(-0xd3,(String *)&local_10,
              "void cvInitTreeNodeIterator(CvTreeNodeIterator*, const void*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd71);
    cv::String::deallocate((String *)&local_10);
    *param_1 = param_2;
    *(undefined4 *)(param_1 + 1) = 0;
    *(int *)((long)param_1 + 0xc) = param_3;
    return;
  }
  *param_1 = param_2;
  *(undefined4 *)(param_1 + 1) = 0;
  *(int *)((long)param_1 + 0xc) = param_3;
  return;
}


==================================================================

### FUNC 0029d6d4 (288 bytes) name=cvNextTreeNode

void cvNextTreeNode(long *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  long lVar4;
  char *pcVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  long *local_10;
  long *local_8;
  
  if (param_1 == (long *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x15);
    cVar3 = s_NULL_iterator_pointer_004618c0[0x14];
    uVar2 = s_NULL_iterator_pointer_004618c0._8_8_;
    uVar1 = s_NULL_iterator_pointer_004618c0._0_8_;
                    /* try { // try from 0029d7b8 to 0039d7bb has its CatchHandler @ 0029ce6c */
                    /* try { // try from 0029d7c4 to 0039d99f has its CatchHandler @ 0029db84 */
    *(undefined4 *)(pcVar5 + 0x10) = s_NULL_iterator_pointer_004618c0._16_4_;
    pcVar5[0x14] = cVar3;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,"void* cvNextTreeNode(CvTreeNodeIterator*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd81);
    cv::String::deallocate((String *)&local_10);
  }
  lVar4 = *param_1;
  iVar6 = (int)param_1[1];
  if (lVar4 == 0) {
    *(int *)(param_1 + 1) = iVar6;
    *param_1 = 0;
    return;
  }
  lVar8 = *(long *)(lVar4 + 0x20);
  if ((lVar8 == 0) || (iVar7 = iVar6 + 1, *(int *)((long)param_1 + 0xc) <= iVar6 + 1)) {
    while (lVar8 = *(long *)(lVar4 + 0x10), lVar8 == 0) {
      iVar6 = iVar6 + -1;
      lVar4 = *(long *)(lVar4 + 0x18);
      if (iVar6 < 0) {
        *param_1 = 0;
        *(int *)(param_1 + 1) = iVar6;
        return;
      }
    }
    iVar7 = iVar6;
    if (*(int *)((long)param_1 + 0xc) == 0) {
      lVar8 = 0;
    }
  }
  *param_1 = lVar8;
  *(int *)(param_1 + 1) = iVar7;
  return;
}


==================================================================

### FUNC 0029d808 (236 bytes) name=cvTreeToNodeSeq

undefined8 cvTreeToNodeSeq(long param_1,int param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char *pcVar3;
  long local_18;
  long local_10;
  long local_8;
  
  if (param_3 == 0) {
    local_10 = param_3;
    local_8 = param_3;
    pcVar3 = (char *)cv::String::allocate((String *)&local_10,0x14);
    uVar1 = s_NULL_storage_pointer_0043dfe8._8_8_;
    uVar2 = s_NULL_storage_pointer_0043dfe8._0_8_;
    *(undefined4 *)(pcVar3 + 0x10) = s_NULL_storage_pointer_0043dfe8._16_4_;
    *(undefined8 *)pcVar3 = uVar2;
    *(undefined8 *)(pcVar3 + 8) = uVar1;
    cv::error(-0x1b,(String *)&local_10,"CvSeq* cvTreeToNodeSeq(const void*, int, CvMemStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xd0d);
    cv::String::deallocate((String *)&local_10);
  }
  uVar2 = cvCreateSeq(0,(long)param_2,8,param_3);
  if (param_1 != 0) {
    cvInitTreeNodeIterator(&local_10,param_1,0x7fffffff);
    while( true ) {
      local_18 = cvNextTreeNode(&local_10);
      if (local_18 == 0) break;
      cvSeqPush(uVar2,&local_18);
    }
  }
  return uVar2;
}


==================================================================

### FUNC 0029d908 (248 bytes) name=cvPrevTreeNode

void cvPrevTreeNode(long *param_1)

{
  int iVar1;
  long lVar2;
  long lVar3;
  long *local_10;
  long *local_8;
  
  if (param_1 == (long *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    cv::String::allocate((String *)&local_10,0);
                    /* try { // try from 0029d9d4 to 0039d9d7 has its CatchHandler @ 0029ce6c */
    cv::error(-0x1b,(String *)&local_10,"void* cvPrevTreeNode(CvTreeNodeIterator*)",
              "/builds/master_pack-android/opencv/modules/core/src/datastructs.cpp",0xdaa);
    cv::String::deallocate((String *)&local_10);
  }
  lVar2 = *param_1;
  iVar1 = (int)param_1[1];
  if (lVar2 == 0) {
    *(int *)(param_1 + 1) = iVar1;
    *param_1 = 0;
    return;
  }
  lVar3 = *(long *)(lVar2 + 8);
  if (lVar3 == 0) {
    lVar3 = *(long *)(lVar2 + 0x18);
    *(int *)(param_1 + 1) = iVar1 + -1;
    lVar2 = 0;
    if (-1 < iVar1 + -1) {
      lVar2 = lVar3;
    }
    *param_1 = lVar2;
    return;
  }
  lVar2 = *(long *)(lVar3 + 0x20);
  while ((lVar2 != 0 && (iVar1 < *(int *)((long)param_1 + 0xc)))) {
    iVar1 = iVar1 + 1;
    do {
      lVar3 = lVar2;
      lVar2 = *(long *)(lVar3 + 0x10);
    } while (*(long *)(lVar3 + 0x10) != 0);
    lVar2 = *(long *)(lVar3 + 0x20);
  }
  *param_1 = lVar3;
  *(int *)(param_1 + 1) = iVar1;
  return;
}


==================================================================

### FUNC 0029da14 (4 bytes) name=seqPush

/* cv::seqPush(CvSeq*, void const*) */

void cv::seqPush(CvSeq *param_1,void *param_2)

{
  (*(code *)PTR_cvSeqPush_00501770)();
  return;
}


==================================================================

### FUNC 0029da18 (4 bytes) name=seqPushFront

/* cv::seqPushFront(CvSeq*, void const*) */

void cv::seqPushFront(CvSeq *param_1,void *param_2)

{
  (*(code *)PTR_cvSeqPushFront_00500128)();
  return;
                    /* try { // try from 0029da18 to 0039da1b has its CatchHandler @ 0029da34 */
}


==================================================================

### FUNC 0029da1c (4 bytes) name=seqPop

/* cv::seqPop(CvSeq*, void*) */

void cv::seqPop(CvSeq *param_1,void *param_2)

{
  (*(code *)PTR_cvSeqPop_004ff918)();
  return;
}


==================================================================

### FUNC 0029da20 (4 bytes) name=seqPopFront

/* cv::seqPopFront(CvSeq*, void*) */

void cv::seqPopFront(CvSeq *param_1,void *param_2)

{
  (*(code *)PTR_cvSeqPopFront_004ffa90)();
  return;
                    /* try { // try from 0029da20 to 0039da23 has its CatchHandler @ 0029ce6c */
}


==================================================================

### FUNC 0029da24 (4 bytes) name=seqRemove

/* cv::seqRemove(CvSeq*, int) */

void cv::seqRemove(CvSeq *param_1,int param_2)

{
  (*(code *)PTR_cvSeqRemove_00501660)(param_1,param_2);
  return;
}


==================================================================

### FUNC 0029da28 (4 bytes) name=clearSeq

/* cv::clearSeq(CvSeq*) */

void cv::clearSeq(CvSeq *param_1)

{
  (*(code *)PTR_cvClearSeq_00500f20)();
  return;
}


==================================================================

### FUNC 0029da2c (4 bytes) name=getSeqElem

/* cv::getSeqElem(CvSeq const*, int) */

void cv::getSeqElem(CvSeq *param_1,int param_2)

{
  (*(code *)PTR_cvGetSeqElem_004ff630)(param_1,param_2);
  return;
                    /* try { // try from 0029da2c to 0039da2f has its CatchHandler @ 0029da48 */
}


==================================================================

### FUNC 0029da30 (4 bytes) name=seqRemoveSlice

/* cv::seqRemoveSlice(CvSeq*, CvSlice) */

void cv::seqRemoveSlice(void)

{
  (*(code *)PTR_cvSeqRemoveSlice_00501250)();
  return;
}


==================================================================

### FUNC 0029da34 (4 bytes) name=seqInsertSlice

/* cv::seqInsertSlice(CvSeq*, int, void const*) */

void cv::seqInsertSlice(CvSeq *param_1,int param_2,void *param_3)

{
  (*(code *)PTR_cvSeqInsertSlice_005002a0)(param_1,param_2);
  return;
                    /* catch() { ... } // from try @ 0029da18 with catch @ 0029da34 */
}


==================================================================

### FUNC 0029da38 (2140 bytes) name=FUN_0029da38

void FUN_0029da38(uint param_1,int param_2,uint *param_3,double *param_4,int param_5,double *param_6
                 ,int param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  int *piVar8;
  ulong uVar9;
  int iVar10;
  double *pdVar11;
  uint uVar12;
  int iVar13;
  ulong uVar14;
  int *piVar15;
  int *piVar16;
  uint *puVar17;
  double *pdVar18;
  ulong uVar19;
  ulong uVar20;
  long lVar21;
  double *pdVar22;
  uint uVar23;
  ulong uVar24;
  double dVar25;
  double dVar26;
  undefined8 uVar27;
  double dVar28;
  double dVar29;
  int iVar30;
  double dVar31;
  int local_110 [34];
  int local_88 [34];
  
                    /* try { // try from 0029da44 to 0039da47 has its CatchHandler @ 0029ce6c */
  lVar21 = (long)(int)param_1;
                    /* catch() { ... } // from try @ 0029da2c with catch @ 0029da48 */
  uVar23 = *param_3;
  uVar24 = (ulong)uVar23;
  if ((int)param_1 < 6) {
    *(int *)param_4 = 0;
    *(uint *)((long)param_4 + (long)(int)param_1 * 4 + -4) = param_1 - 1;
                    /* catch() { ... } // from try @ 0029cfe0 with catch @ 0029da84 */
    if (param_1 != 4) {
      if (1 < (int)(param_1 - 1)) {
        uVar4 = param_1 - 2;
                    /* catch() { ... } // from try @ 0029cfd0 with catch @ 0029da98 */
                    /* catch() { ... } // from try @ 0029cfc8 with catch @ 0029da9c */
        uVar23 = (uint)((ulong)((long)param_4 + 4) >> 2) & 1;
                    /* catch() { ... } // from try @ 0029cfc0 with catch @ 0029daa0 */
        if (uVar4 < uVar23) {
          uVar23 = uVar4;
        }
        if (uVar4 < 0xb) {
          uVar23 = uVar4;
        }
        if (uVar23 == 0) {
          iVar10 = 1;
        }
        else {
                    /* catch() { ... } // from try @ 0029cf7c with catch @ 0029dab4 */
          *(int *)((long)param_4 + 4) = 1;
          if (uVar23 == 1) {
            iVar10 = 2;
          }
          else {
            *(int *)(param_4 + 1) = 2;
                    /* try { // try from 0029dacc to 0039dacf has its CatchHandler @ 0029db44 */
            if (uVar23 == 3) {
              *(int *)((long)param_4 + 0xc) = 3;
              iVar10 = 4;
            }
            else {
              iVar10 = 3;
            }
          }
          if (uVar23 == uVar4) goto LAB_0029db4c;
        }
        iVar30 = ((uVar4 - uVar23) - 2 >> 1) + 1;
        iVar13 = iVar30 * 2;
        if (param_1 - uVar23 != 3) {
                    /* try { // try from 0029db08 to 0039db0b has its CatchHandler @ 0029db30 */
                    /* try { // try from 0029db10 to 0039db13 has its CatchHandler @ 0029db2c */
                    /* catch() { ... } // from try @ 0029cf48 with catch @ 0029db18 */
          piVar8 = (int *)((long)param_4 + ((ulong)uVar23 + 1) * 4);
                    /* try { // try from 0029db28 to 0039db2b has its CatchHandler @ 0029ce6c */
          *(ulong *)piVar8 = CONCAT44(iVar10 + 1,iVar10);
                    /* catch() { ... } // from try @ 0029db10 with catch @ 0029db2c */
                    /* catch() { ... } // from try @ 0029db08 with catch @ 0029db30 */
          if (iVar30 != 1) {
            *(ulong *)(piVar8 + 2) = CONCAT44(iVar10 + 3,iVar10 + 2);
          }
          iVar10 = iVar10 + iVar13;
                    /* catch() { ... } // from try @ 0029dacc with catch @ 0029db44 */
          if (iVar13 == uVar4 - uVar23) goto LAB_0029db4c;
        }
                    /* catch() { ... } // from try @ 0029d0b0 with catch @ 0029db48 */
        *(int *)((long)param_4 + (long)iVar10 * 4) = iVar10;
      }
LAB_0029db4c:
      if (param_1 != 5) {
        return;
      }
      if (param_5 != 0x10) {
        *(int *)param_6 = 0x3f800000;
        *(int *)((long)param_6 + 4) = 0;
        return;
      }
      *param_6 = 1.0;
      param_6[1] = 0.0;
      return;
    }
    uVar19 = 2;
    *(int *)((long)param_4 + 4) = 2;
    *(int *)(param_4 + 1) = 1;
    uVar23 = 0;
  }
  else {
    local_88[param_2] = 1;
    local_110[param_2] = 0;
                    /* catch() { ... } // from try @ 0029d008 with catch @ 0029db94 */
                    /* catch() { ... } // from try @ 0029d04c with catch @ 0029db84
                       catch() { ... } // from try @ 0029d0b8 with catch @ 0029db84
                       catch() { ... } // from try @ 0029d640 with catch @ 0029db84
                       catch() { ... } // from try @ 0029d7c4 with catch @ 0029db84
                       catch() { ... } // from try @ 0029dbc4 with catch @ 0029db84 */
    if (0 < param_2) {
                    /* catch() { ... } // from try @ 0029d54c with catch @ 0029db98 */
                    /* try { // try from 0029dba8 to 0039dbaf has its CatchHandler @ 0029dbd0 */
      uVar19 = (ulong)(param_2 - 1);
                    /* try { // try from 0029dbc4 to 0039dbc7 has its CatchHandler @ 0029db84 */
      memset(local_110,0,(uVar19 + 1) * 4);
                    /* catch() { ... } // from try @ 0029dba8 with catch @ 0029dbd0 */
                    /* try { // try from 0029dbdc to 0039dbdf has its CatchHandler @ 0029ce6c */
                    /* catch() { ... } // from try @ 0029dc28 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029dca0 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e0c8 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e11c with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e234 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e444 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e4a4 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e5e8 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e668 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e6d0 with catch @ 0029dbe0
                       catch() { ... } // from try @ 0029e6e4 with catch @ 0029dbe0 */
      iVar10 = local_88[param_2];
      puVar17 = param_3 + (long)param_2 + -1;
      do {
        iVar10 = iVar10 * *puVar17;
        local_88[(int)uVar19] = iVar10;
        uVar4 = (int)uVar19 - 1;
        uVar19 = (ulong)uVar4;
        puVar17 = puVar17 + -1;
      } while (uVar4 != 0xffffffff);
    }
    pdVar11 = param_4;
    if (param_7 == 0) {
      if ((uVar23 & 1) != 0) goto LAB_0029dc1c;
LAB_0029ddc4:
      uVar19 = (ulong)(uVar23 & 1);
      iVar10 = (int)(uVar23 * local_88[1]) >> 1;
      if (uVar23 < 2) {
LAB_0029dee8:
        *(int *)pdVar11 = 0;
        *(int *)((long)pdVar11 + 4) = iVar10;
      }
      else {
        do {
          uVar4 = (int)uVar19 + 1;
          uVar19 = (ulong)uVar4;
        } while ((uint)(1 << (ulong)(uVar4 & 0x1f)) < uVar23);
        if ((int)uVar23 < 3) goto LAB_0029dee8;
        iVar30 = (int)(uVar23 * local_88[1]) >> 2;
        if ((int)uVar23 < 0x101) {
          if (uVar23 != 3) {
            iVar13 = 0;
            pdVar18 = pdVar11;
            do {
              iVar6 = iVar13 >> 2;
              iVar13 = iVar13 + 4;
              iVar6 = ((int)(uint)(byte)(&DAT_00465550)[iVar6] >> (10 - uVar4 & 0x1f)) * local_88[1]
              ;
                    /* try { // try from 0029de3c to 0039de3f has its CatchHandler @ 0029e6f4 */
              *(int *)pdVar18 = iVar6;
                    /* try { // try from 0029de44 to 0039def7 has its CatchHandler @ 0029e714 */
              *(int *)((long)pdVar18 + 4) = iVar6 + iVar10;
              *(int *)(pdVar18 + 1) = iVar6 + iVar30;
              *(int *)((long)pdVar18 + 0xc) = iVar30 + iVar6 + iVar10;
              pdVar18 = pdVar18 + 2;
            } while (iVar13 < (int)(uVar23 - 3));
          }
        }
        else {
          uVar14 = 0;
          pdVar18 = pdVar11;
          do {
            uVar20 = uVar14 >> 2;
            iVar13 = (int)uVar14;
            uVar9 = uVar14 >> 10;
            uVar5 = uVar14 >> 0x12;
            uVar1 = iVar13 + 4;
            uVar14 = (ulong)uVar1;
                    /* try { // try from 0029e22c to 0039e22f has its CatchHandler @ 0029e6d4 */
                    /* try { // try from 0029e234 to 0039e237 has its CatchHandler @ 0029dbe0 */
            iVar13 = ((uint)(byte)(&DAT_00465550)[iVar13 >> 0x1a] +
                      (uint)(byte)(&DAT_00465550)[uVar20 & 0xff] * 0x1000000 +
                      (uint)(byte)(&DAT_00465550)[uVar9 & 0xff] * 0x10000 +
                      (uint)(byte)(&DAT_00465550)[uVar5 & 0xff] * 0x100 >>
                     (ulong)(0x22 - uVar4 & 0x1f)) * local_88[1];
            *(int *)pdVar18 = iVar13;
            *(int *)((long)pdVar18 + 4) = iVar13 + iVar10;
                    /* try { // try from 0029e25c to 0039e437 has its CatchHandler @ 0029e714 */
            *(int *)(pdVar18 + 1) = iVar13 + iVar30;
            *(int *)((long)pdVar18 + 0xc) = iVar30 + iVar13 + iVar10;
            pdVar18 = pdVar18 + 2;
          } while ((int)uVar1 < (int)uVar23);
        }
      }
      local_110[1] = local_110[1] + 1;
      if ((1 < param_2) && ((int)uVar23 < (int)param_1)) {
                    /* try { // try from 0029df14 to 0039df17 has its CatchHandler @ 0029e66c */
        uVar14 = uVar24 << 2;
        uVar4 = -((uint)((ulong)pdVar11 >> 2) & 3) & 3;
        uVar1 = uVar23;
        if (uVar4 < uVar23) {
          uVar1 = uVar4;
        }
        uVar20 = (ulong)uVar1;
                    /* try { // try from 0029df40 to 0039df43 has its CatchHandler @ 0029e704 */
                    /* try { // try from 0029df48 to 0039df67 has its CatchHandler @ 0029e66c */
        uVar4 = ((uVar23 - uVar1) - 4 >> 2) + 1;
        iVar30 = uVar4 * 4;
        iVar10 = local_88[2];
        pdVar18 = pdVar11;
LAB_0029df8c:
        pdVar18 = (double *)
                  ((long)pdVar18 + (-(ulong)(uVar23 >> 0x1f) & 0xfffffffc00000000 | uVar14));
        iVar13 = (int)uVar24;
        if (0 < (int)uVar23) {
          if (((0x10 - (long)pdVar11) + (long)pdVar18 < 1 || pdVar11 + 2 <= pdVar18) && (9 < uVar23)
             ) {
            uVar24 = uVar20;
            if ((uVar1 != 0) && (*(int *)pdVar18 = *(int *)pdVar11 + iVar10, uVar1 != 1)) {
                    /* try { // try from 0029dfd8 to 0039e027 has its CatchHandler @ 0029e714 */
              *(int *)((long)pdVar18 + 4) = *(int *)((long)pdVar11 + 4) + iVar10;
              if (uVar1 == 3) {
                *(int *)(pdVar18 + 1) = *(int *)(pdVar11 + 1) + iVar10;
                uVar24 = 3;
              }
              else {
                uVar24 = 2;
              }
            }
            if (2 < (uVar23 - 1) - uVar1) {
              uVar12 = 0;
              piVar8 = (int *)((long)pdVar18 + uVar20 * 4);
              piVar16 = (int *)((long)pdVar11 + uVar20 * 4);
              do {
                uVar27 = *(undefined8 *)piVar16;
                uVar12 = uVar12 + 1;
                *(ulong *)(piVar8 + 2) =
                     CONCAT44(iVar10 + (int)((ulong)*(undefined8 *)(piVar16 + 2) >> 0x20),
                              iVar10 + (int)*(undefined8 *)(piVar16 + 2));
                *(ulong *)piVar8 =
                     CONCAT44(iVar10 + (int)((ulong)uVar27 >> 0x20),iVar10 + (int)uVar27);
                piVar8 = piVar8 + 4;
                piVar16 = piVar16 + 4;
              } while (uVar12 < uVar4);
              uVar24 = (ulong)(uint)((int)uVar24 + iVar30);
              if (iVar30 == uVar23 - uVar1) goto LAB_0029e09c;
            }
            uVar9 = -(uVar24 >> 0x1f) & 0xfffffffc00000000 | uVar24 << 2;
            iVar6 = (int)uVar24;
            *(int *)((long)pdVar11 + (long)(iVar13 + iVar6) * 4) =
                 *(int *)((long)pdVar11 + uVar9) + iVar10;
            if (iVar6 + 1 < (int)uVar23) {
              *(int *)((long)pdVar11 + (long)(iVar13 + iVar6 + 1) * 4) =
                   *(int *)((long)pdVar11 + uVar9 + 4) + iVar10;
              if (iVar6 + 2 < (int)uVar23) {
                *(int *)((long)pdVar11 + (long)(iVar13 + iVar6 + 2) * 4) =
                     *(int *)((long)pdVar11 + uVar9 + 8) + iVar10;
              }
            }
          }
          else {
            lVar7 = 0;
            do {
                    /* try { // try from 0029e11c to 0039e1ff has its CatchHandler @ 0029dbe0 */
              *(int *)((long)pdVar18 + lVar7 * 4) = *(int *)((long)pdVar11 + lVar7 * 4) + iVar10;
              lVar7 = lVar7 + 1;
            } while ((int)lVar7 < (int)uVar23);
          }
        }
LAB_0029e09c:
        uVar24 = (ulong)(iVar13 + uVar23);
        if ((int)(iVar13 + uVar23) < (int)param_1) {
          iVar10 = iVar10 + local_88[2];
          local_110[1] = local_110[1] + 1;
          if ((int)param_3[1] <= local_110[1]) {
                    /* try { // try from 0029e0c8 to 0039e0cb has its CatchHandler @ 0029dbe0 */
            piVar8 = local_110 + 2;
            puVar17 = param_3 + 2;
            piVar16 = local_88 + 3;
            iVar13 = local_88[1];
            iVar6 = local_88[2];
            do {
              iVar2 = *piVar8;
              uVar12 = *puVar17;
              iVar3 = *piVar16;
              piVar8[-1] = 0;
              *piVar8 = iVar2 + 1;
              iVar10 = iVar10 + (iVar3 - iVar13);
                    /* try { // try from 0029e100 to 0039e113 has its CatchHandler @ 0029e714 */
              piVar8 = piVar8 + 1;
              puVar17 = puVar17 + 1;
              piVar16 = piVar16 + 1;
              iVar13 = iVar6;
              iVar6 = iVar3;
            } while ((int)uVar12 <= iVar2 + 1);
          }
          goto LAB_0029df8c;
        }
      }
    }
    else {
      if (uVar23 != param_3[(long)param_2 + -1]) {
        pdVar11 = param_6;
      }
      if ((uVar23 & 1) == 0) goto LAB_0029ddc4;
LAB_0029dc1c:
      iVar10 = 0;
                    /* try { // try from 0029dc28 to 0039dc6b has its CatchHandler @ 0029dbe0 */
      *(int *)pdVar11 = 0;
      pdVar18 = pdVar11;
      while (pdVar18 != (double *)((long)pdVar11 + (ulong)(param_1 - 1) * 4)) {
        iVar10 = iVar10 + local_88[1];
        local_110[0] = local_110[0] + 1;
        if ((int)*param_3 <= local_110[0]) {
          piVar16 = local_88 + 2;
          iVar30 = local_88[0];
          iVar13 = local_88[1];
          piVar8 = local_110;
          puVar17 = param_3;
          do {
            puVar17 = puVar17 + 1;
            piVar15 = piVar8 + 1;
            iVar6 = *piVar15;
            uVar23 = *puVar17;
            iVar2 = *piVar16;
            *piVar8 = 0;
            *piVar15 = iVar6 + 1;
            iVar10 = iVar10 + (iVar2 - iVar30);
                    /* try { // try from 0029dc98 to 0039dc9b has its CatchHandler @ 0029e6c0 */
            piVar16 = piVar16 + 1;
            iVar30 = iVar13;
            iVar13 = iVar2;
            piVar8 = piVar15;
          } while ((int)uVar23 <= iVar6 + 1);
        }
                    /* try { // try from 0029dca0 to 0039dcd7 has its CatchHandler @ 0029dbe0 */
        pdVar18 = (double *)((long)pdVar18 + 4);
        *(int *)pdVar18 = iVar10;
      }
      uVar19 = 0;
    }
    if (pdVar11 != param_4) {
      uVar23 = param_1 & 1;
      *(int *)param_4 = 0;
      piVar8 = (int *)((long)pdVar11 + (long)(int)uVar23 * 4);
      do {
        iVar13 = *piVar8;
        iVar10 = uVar23 + 1;
                    /* try { // try from 0029dcdc to 0039dcef has its CatchHandler @ 0029e644 */
        iVar30 = piVar8[1];
        piVar8 = piVar8 + 2;
        *(uint *)((long)param_4 + (long)iVar13 * 4) = uVar23;
        uVar23 = uVar23 + 2;
        *(int *)((long)param_4 + (long)iVar30 * 4) = iVar10;
      } while ((int)uVar23 < (int)param_1);
    }
    uVar23 = param_1 & 1;
    if ((param_1 - 1 & param_1) != 0) {
      dVar25 = sin(DAT_0029e298 / (double)(int)param_1);
      dVar28 = 1.0 - dVar25 * dVar25;
      dVar26 = SQRT(dVar28);
      if (NAN(dVar26)) {
        dVar26 = sqrt(dVar28);
      }
      goto LAB_0029dd20;
    }
  }
  uVar24 = -(uVar19 >> 0x1f) & 0xfffffff000000000 | uVar19 << 4;
  dVar26 = *(double *)((long)&DAT_00465650 + uVar24);
  dVar25 = -*(double *)((long)&DAT_00465658 + uVar24);
LAB_0029dd20:
  uVar4 = (int)(param_1 + 1) / 2;
  if (param_5 == 0x10) {
    *param_6 = 1.0;
    param_6[1] = 0.0;
    if (uVar23 == 0) {
      uVar24 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar4 << 4;
      *(undefined8 *)((long)param_6 + uVar24) = 0xbff0000000000000;
      *(undefined8 *)((long)param_6 + uVar24 + 8) = 0;
    }
    if (1 < (int)uVar4) {
      pdVar18 = param_6 + lVar21 * 2;
      dVar28 = dVar25;
      dVar29 = dVar26;
      pdVar11 = param_6;
      do {
        pdVar11[2] = dVar29;
        pdVar22 = pdVar18 + -2;
        pdVar11[3] = dVar28;
        dVar31 = dVar28 * dVar25;
        *pdVar22 = dVar29;
        pdVar18[-1] = -dVar28;
        dVar28 = dVar26 * dVar28 + dVar29 * dVar25;
        dVar29 = dVar26 * dVar29 - dVar31;
        pdVar18 = pdVar22;
        pdVar11 = pdVar11 + 2;
      } while (pdVar22 != param_6 + (lVar21 - (ulong)(uVar4 - 2)) * 2 + -2);
    }
  }
  else {
    *(int *)param_6 = 0x3f800000;
    *(int *)((long)param_6 + 4) = 0;
    if (uVar23 == 0) {
      uVar24 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
      *(undefined4 *)((long)param_6 + uVar24) = 0xbf800000;
      *(undefined4 *)((long)param_6 + uVar24 + 4) = 0;
    }
    if (1 < (int)uVar4) {
      pdVar18 = param_6 + lVar21;
      dVar28 = dVar25;
      dVar29 = dVar26;
      pdVar11 = param_6;
                    /* try { // try from 0029dd6c to 0039ddeb has its CatchHandler @ 0029e714 */
      do {
        pdVar22 = pdVar18 + -1;
        dVar31 = dVar28 * dVar25;
        *(float *)(pdVar11 + 1) = (float)dVar29;
        *(float *)((long)pdVar11 + 0xc) = (float)dVar28;
        *(float *)pdVar22 = (float)dVar29;
        *(float *)((long)pdVar18 + -4) = -(float)dVar28;
        dVar28 = dVar26 * dVar28 + dVar29 * dVar25;
        dVar29 = dVar26 * dVar29 - dVar31;
        pdVar18 = pdVar22;
        pdVar11 = pdVar11 + 1;
      } while (pdVar22 != param_6 + (lVar21 - (ulong)(uVar4 - 2)) + -1);
    }
  }
  return;
}


==================================================================

### FUNC 0029e2a0 (4224 bytes) name=FUN_0029e2a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0029e2a0(double param_1,float *param_2,float *param_3,uint param_4,int param_5,
                 uint *param_6,uint *param_7,float *param_8,uint param_9,long param_10,uint param_11
                 )

{
  float *pfVar1;
  float *pfVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  undefined1 uVar10;
  float *pfVar11;
  float *pfVar12;
  uint *puVar13;
  float *pfVar14;
  undefined8 *puVar15;
  float *pfVar16;
  float *pfVar17;
  float *pfVar18;
  uint uVar19;
  int iVar20;
  float *pfVar21;
  float *pfVar22;
  ulong uVar23;
  float *pfVar24;
  float *pfVar25;
  float *pfVar26;
  float *pfVar27;
  uint uVar28;
  int iVar29;
  float *pfVar30;
  uint uVar31;
  long lVar32;
  long lVar33;
  ulong uVar34;
  float *pfVar35;
  float *pfVar36;
  uint uVar37;
  uint uVar38;
  ulong uVar39;
  long lVar40;
  int iVar41;
  ulong uVar42;
  int iVar43;
  float fVar44;
  float fVar45;
  float fVar46;
  float fVar47;
  float fVar48;
  float fVar49;
  float fVar50;
  float fVar51;
  float fVar52;
  float fVar53;
  float fVar54;
  float fVar55;
  float fVar56;
  float fVar57;
  float fVar58;
  float fVar59;
  float fVar60;
  float fVar61;
  float fVar62;
  float fVar63;
  float fVar64;
  float fVar65;
  float fVar66;
  float fVar67;
  float fVar68;
  float fVar69;
  long lVar70;
  undefined8 local_10;
  undefined8 local_8;
  
  fVar54 = (float)param_1;
  uVar4 = param_11 & 1;
  uVar39 = (ulong)param_9;
  if (param_9 == param_4) {
    uVar42 = 1;
  }
  else if (param_9 == param_4 * 2) {
    uVar42 = 2;
  }
  else {
    uVar28 = 0;
    if (param_4 != 0) {
      uVar28 = (int)param_9 / (int)param_4;
    }
    uVar42 = (ulong)uVar28;
  }
  uVar28 = (uint)uVar42;
  if (param_3 == param_2) {
    if ((param_11 >> 8 & 1) == 0) {
      uVar19 = *param_6;
      if (uVar19 != param_6[(long)param_5 + -1]) {
        local_10 = 0;
        local_8 = 0;
        puVar15 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1b);
        uVar10 = DAT_00465aaa;
        uVar9 = DAT_00465aa8;
        uVar8 = _LAB_00465a98;
        uVar7 = DAT_00465a90;
        puVar15[2] = DAT_00465aa0;
        *(undefined2 *)(puVar15 + 3) = uVar9;
        *(undefined1 *)((long)puVar15 + 0x1a) = uVar10;
        *puVar15 = uVar7;
        puVar15[1] = uVar8;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::DFT(const cv::Complex<_Tp>*, cv::Complex<_Tp>*, int, int, const int*, const int*, const cv::Complex<_Tp>*, int, const void*, cv::Complex<_Tp>*, int, double) [with T = float]"
                  ,"/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0x266);
        cv::String::deallocate((String *)&local_10);
        uVar19 = *param_6;
      }
      if (param_5 == 1) {
        if (((param_4 & 3) == 0) && (iVar41 = (int)param_4 / 2, 0 < iVar41)) {
          pfVar18 = param_3 + (long)iVar41 * 2 + 2;
          iVar29 = 0;
          pfVar11 = param_3;
          do {
            uVar38 = *param_7;
            fVar44 = pfVar11[2];
            uVar42 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar38 << 3;
            fVar45 = pfVar11[3];
            *(undefined8 *)(pfVar11 + 2) =
                 *(undefined8 *)((long)param_3 + uVar42 + (long)iVar41 * 8);
            *(float *)((long)param_3 + uVar42 + (long)iVar41 * 8) = fVar44;
                    /* try { // try from 0029f238 to 0039f273 has its CatchHandler @ 0029f7b4 */
            *(float *)((long)param_3 + uVar42 + (long)iVar41 * 8 + 4) = fVar45;
            if (iVar29 < (int)uVar38) {
              fVar44 = *pfVar11;
              fVar45 = pfVar11[1];
              *(undefined8 *)pfVar11 = *(undefined8 *)((long)param_3 + uVar42);
              lVar40 = uVar42 + 8;
              *(float *)((long)param_3 + uVar42) = fVar44;
              *(float *)((long)param_3 + uVar42 + 4) = fVar45;
              fVar44 = *pfVar18;
              fVar45 = pfVar18[1];
              *(undefined8 *)pfVar18 = *(undefined8 *)((long)param_3 + lVar40 + (long)iVar41 * 8);
              *(float *)((long)param_3 + lVar40 + (long)iVar41 * 8) = fVar44;
              *(float *)((long)param_3 + lVar40 + (long)iVar41 * 8 + 4) = fVar45;
            }
            iVar29 = iVar29 + 2;
            param_7 = (uint *)((long)param_7 +
                              (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                              (ulong)(uVar28 << 1) << 2));
            pfVar11 = pfVar11 + 4;
            pfVar18 = pfVar18 + 4;
          } while (iVar29 < iVar41);
        }
      }
      else if (0 < (int)param_4) {
        uVar28 = 0;
        pfVar18 = param_3;
        do {
          uVar38 = *param_7;
          if ((int)uVar28 < (int)uVar38) {
            uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar38 << 3;
            fVar44 = *pfVar18;
            fVar45 = pfVar18[1];
                    /* try { // try from 0029f1c4 to 0039f1c7 has its CatchHandler @ 0029f7bc */
            *(undefined8 *)pfVar18 = *(undefined8 *)((long)param_3 + uVar23);
            *(float *)((long)param_3 + uVar23) = fVar44;
            *(float *)((long)param_3 + uVar23 + 4) = fVar45;
          }
          uVar28 = uVar28 + 1;
          param_7 = (uint *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2))
          ;
          pfVar18 = pfVar18 + 2;
        } while (uVar28 != param_4);
      }
    }
    else {
      uVar19 = *param_6;
    }
    if (uVar4 != 0) {
      if ((int)param_4 < 2) {
        iVar41 = 0;
      }
      else {
        uVar28 = param_4 - 2 >> 1;
        pfVar18 = param_3 + 1;
        do {
          pfVar11 = pfVar18 + 4;
          pfVar18[2] = -pfVar18[2];
          *pfVar18 = -*pfVar18;
          pfVar18 = pfVar11;
        } while (pfVar11 != param_3 + (ulong)uVar28 * 4 + 5);
        iVar41 = (uVar28 + 1) * 2;
      }
      if (iVar41 < (int)param_4) {
        param_3[(long)(int)param_4 * 2 + -1] = -param_3[(long)(int)param_4 * 2 + -1];
      }
    }
  }
  else {
    if (uVar4 == 0) {
      if ((int)param_4 < 2) {
        iVar41 = 0;
                    /* try { // try from 0029f2ac to 0039f2af has its CatchHandler @ 0029f7b4 */
      }
      else {
        uVar19 = param_4 - 2 >> 1;
        pfVar18 = param_3 + 2;
        do {
          uVar38 = *param_7;
          iVar41 = *(int *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2));
          param_7 = (uint *)((long)param_7 +
                            (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                            (ulong)(uVar28 << 1) << 2));
          *(undefined8 *)(pfVar18 + -2) = *(undefined8 *)(param_2 + (long)(int)uVar38 * 2);
          pfVar11 = pfVar18 + 4;
          *(undefined8 *)pfVar18 = *(undefined8 *)(param_2 + (long)iVar41 * 2);
          pfVar18 = pfVar11;
        } while (pfVar11 != param_3 + (ulong)uVar19 * 4 + 6);
        iVar41 = (uVar19 + 1) * 2;
      }
      if (iVar41 < (int)param_4) {
        *(undefined8 *)(param_3 + (long)(int)param_4 * 2 + -2) =
             *(undefined8 *)(param_2 + (long)(int)param_4 * 2 + -2);
        uVar19 = *param_6;
        goto LAB_0029e3ac;
      }
    }
    else {
      if ((int)param_4 < 2) {
        uVar42 = 0;
      }
      else {
        uVar19 = param_4 - 2 >> 1;
        pfVar18 = param_3 + 1;
        do {
          uVar5 = *param_7;
          pfVar11 = pfVar18 + 4;
          uVar38 = *(uint *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2))
          ;
          param_7 = (uint *)((long)param_7 +
                            (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                            (ulong)(uVar28 << 1) << 2));
          uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar38 << 3;
          fVar44 = param_2[(long)(int)uVar5 * 2 + 1];
          pfVar18[-1] = param_2[(long)(int)uVar5 * 2];
          *pfVar18 = -fVar44;
          fVar44 = *(float *)((long)param_2 + uVar23 + 4);
          pfVar18[1] = *(float *)((long)param_2 + uVar23);
          pfVar18[2] = -fVar44;
          pfVar18 = pfVar11;
        } while (pfVar11 != param_3 + (ulong)uVar19 * 4 + 5);
        uVar42 = (ulong)((uVar19 + 1) * 2);
      }
      if ((int)uVar42 < (int)param_4) {
        uVar42 = -(uVar42 >> 0x1f) & 0xfffffff800000000 | uVar42 << 3;
        fVar44 = param_2[(long)(int)param_4 * 2 + -1];
        uVar19 = *param_6;
        *(float *)((long)param_3 + uVar42) = param_2[(long)(int)param_4 * 2 + -2];
        *(float *)((long)param_3 + uVar42 + 4) = -fVar44;
        goto LAB_0029e3ac;
      }
    }
    uVar19 = *param_6;
  }
LAB_0029e3ac:
  if ((uVar19 & 1) == 0) {
    if (3 < (int)uVar19) {
      cv::checkHardwareSupport(4);
      uVar19 = *param_6;
    }
    uVar28 = uVar19 & 1;
    uVar23 = 1;
    uVar38 = 4;
    if (3 < (int)uVar19) {
      do {
        iVar29 = (int)uVar39;
        iVar41 = iVar29 + 3;
        if (-1 < iVar29) {
          iVar41 = iVar29;
        }
        uVar5 = iVar41 >> 2;
        uVar39 = (ulong)uVar5;
        if (0 < (int)param_4) {
          uVar37 = (uint)uVar23;
          lVar40 = uVar23 * 8;
          uVar42 = -(ulong)(uVar37 >> 0x1e) & 0xfffffff800000000 | (ulong)(uVar37 << 1) << 3;
          pfVar18 = param_3 + 1;
          iVar41 = 0;
          pfVar11 = param_3;
          do {
                    /* try { // try from 0029e444 to 0039e447 has its CatchHandler @ 0029dbe0 */
            pfVar12 = (float *)((long)pfVar11 + uVar42);
                    /* try { // try from 0029e450 to 0039e453 has its CatchHandler @ 0029e714 */
            fVar53 = *(float *)((long)pfVar18 + lVar40 + uVar42);
            fVar60 = *(float *)((long)pfVar11 + uVar42) + pfVar12[uVar23 * 2];
            fVar56 = *pfVar11 + pfVar11[uVar23 * 2];
            fVar57 = *(float *)((long)pfVar18 + uVar42) + fVar53;
            fVar55 = *pfVar18 + pfVar18[uVar23 * 2];
            fVar45 = *pfVar11 - pfVar11[uVar23 * 2];
            fVar53 = *(float *)((long)pfVar18 + uVar42) - fVar53;
            fVar47 = pfVar12[uVar23 * 2] - *(float *)((long)pfVar11 + uVar42);
            fVar44 = *pfVar18 - pfVar18[uVar23 * 2];
            *pfVar11 = fVar60 + fVar56;
                    /* try { // try from 0029e4a4 to 0039e4a7 has its CatchHandler @ 0029dbe0 */
            *pfVar18 = fVar57 + fVar55;
            *(float *)((long)pfVar11 + uVar42) = fVar56 - fVar60;
            *(float *)((long)pfVar18 + uVar42) = fVar55 - fVar57;
            pfVar11[uVar23 * 2] = fVar53 + fVar45;
            pfVar18[uVar23 * 2] = fVar47 + fVar44;
            pfVar12[uVar23 * 2] = fVar45 - fVar53;
            *(float *)((long)pfVar18 + lVar40 + uVar42) = fVar44 - fVar47;
            if (1 < uVar37) {
              uVar31 = 1;
              pfVar35 = pfVar12;
              pfVar36 = (float *)(uVar42 + lVar40 + (long)pfVar11);
              pfVar17 = pfVar12 + uVar23 * -2;
              pfVar25 = param_8;
              pfVar26 = param_8;
              pfVar30 = param_8;
              do {
                pfVar30 = (float *)((long)pfVar30 +
                                   (-(ulong)(uVar5 * 3 >> 0x1f) & 0xfffffff800000000 |
                                   (ulong)(uVar5 * 3) << 3));
                pfVar26 = (float *)((long)pfVar26 +
                                   (-(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar39 << 3));
                pfVar25 = (float *)((long)pfVar25 +
                                   (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                                   (ulong)(uVar5 * 2) << 3));
                pfVar16 = pfVar17 + 2;
                pfVar14 = pfVar35 + 2;
                pfVar24 = pfVar36 + 2;
                pfVar21 = pfVar11 + 2;
                uVar31 = uVar31 + 1;
                    /* try { // try from 0029e514 to 0039e527 has its CatchHandler @ 0029e644 */
                fVar55 = *pfVar16 * *pfVar25 - pfVar17[3] * pfVar25[1];
                fVar47 = pfVar35[3] * *pfVar26 + pfVar26[1] * *pfVar14;
                fVar53 = *pfVar25 * pfVar17[3] + pfVar25[1] * *pfVar16;
                fVar56 = *pfVar14 * *pfVar26 - pfVar26[1] * pfVar35[3];
                fVar45 = pfVar36[3] * *pfVar30 + pfVar30[1] * *pfVar24;
                fVar44 = *pfVar24 * *pfVar30 - pfVar30[1] * pfVar36[3];
                fVar60 = fVar55 + *pfVar21;
                fVar57 = fVar53 + pfVar11[3];
                fVar58 = fVar47 + fVar45;
                fVar61 = fVar56 + fVar44;
                fVar47 = fVar47 - fVar45;
                fVar44 = fVar44 - fVar56;
                fVar55 = *pfVar21 - fVar55;
                fVar53 = pfVar11[3] - fVar53;
                *pfVar21 = fVar61 + fVar60;
                pfVar11[3] = fVar58 + fVar57;
                *pfVar14 = fVar60 - fVar61;
                pfVar35[3] = fVar57 - fVar58;
                *pfVar16 = fVar47 + fVar55;
                pfVar17[3] = fVar44 + fVar53;
                *pfVar24 = fVar55 - fVar47;
                pfVar36[3] = fVar53 - fVar44;
                pfVar11 = pfVar21;
                pfVar35 = pfVar14;
                pfVar36 = pfVar24;
                pfVar17 = pfVar16;
              } while (uVar31 != uVar37);
            }
            iVar41 = iVar41 + uVar38;
            pfVar11 = (float *)((long)pfVar12 + uVar42);
                    /* try { // try from 0029e5e8 to 0039e5eb has its CatchHandler @ 0029dbe0 */
            pfVar18 = (float *)((long)pfVar18 + uVar42 * 2);
          } while (iVar41 < (int)param_4);
        }
        uVar23 = (ulong)uVar38;
        uVar38 = uVar38 * 4;
                    /* try { // try from 0029e600 to 0039e603 has its CatchHandler @ 0029e714 */
      } while ((int)uVar38 <= (int)uVar19);
    }
    uVar38 = (uint)uVar23;
    while (uVar42 = uVar23, (int)uVar38 < (int)uVar19) {
                    /* try { // try from 0029e62c to 0039e63f has its CatchHandler @ 0029e644 */
      uVar37 = (uint)uVar42;
      uVar38 = uVar37 * 2;
      uVar23 = (ulong)uVar38;
      uVar5 = (int)uVar39 / 2;
      uVar39 = (ulong)uVar5;
      if (0 < (int)param_4) {
        uVar42 = -(uVar42 >> 0x1f) & 0xfffffff800000000 | uVar42 << 3;
                    /* catch() { ... } // from try @ 0029dcdc with catch @ 0029e644
                       catch() { ... } // from try @ 0029e514 with catch @ 0029e644
                       catch() { ... } // from try @ 0029e62c with catch @ 0029e644
                       catch() { ... } // from try @ 0029e6ec with catch @ 0029e644
                       catch() { ... } // from try @ 0029e720 with catch @ 0029e644 */
        uVar34 = -(ulong)((uVar37 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 | uVar23 << 3;
        pfVar11 = (float *)((long)param_3 + uVar42);
        pfVar18 = param_3 + 3;
        iVar41 = 0;
        do {
          fVar45 = pfVar18[-3];
                    /* try { // try from 0029e668 to 0039e66b has its CatchHandler @ 0029dbe0 */
          fVar53 = *pfVar11;
                    /* catch() { ... } // from try @ 0029df14 with catch @ 0029e66c
                       catch() { ... } // from try @ 0029df48 with catch @ 0029e66c */
          fVar44 = pfVar18[-2];
          fVar47 = pfVar11[1];
          pfVar18[-3] = fVar45 + fVar53;
          pfVar18[-2] = fVar44 + fVar47;
          *pfVar11 = fVar45 - fVar53;
          pfVar11[1] = fVar44 - fVar47;
          if (1 < (int)uVar37) {
            pfVar12 = pfVar18;
            pfVar25 = param_8;
            do {
              pfVar25 = (float *)((long)pfVar25 +
                                 (-(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar39 << 3));
              fVar44 = *(float *)((long)pfVar12 + (uVar42 - 4));
                    /* catch() { ... } // from try @ 0029dc98 with catch @ 0029e6c0 */
              fVar53 = pfVar12[-1];
              fVar47 = fVar44 * *pfVar25 - *(float *)((long)pfVar12 + uVar42) * pfVar25[1];
              fVar44 = fVar44 * pfVar25[1] + *(float *)((long)pfVar12 + uVar42) * *pfVar25;
                    /* try { // try from 0029e6d0 to 0039e6d3 has its CatchHandler @ 0029dbe0 */
              fVar45 = *pfVar12;
                    /* catch() { ... } // from try @ 0029e22c with catch @ 0029e6d4 */
                    /* try { // try from 0029e6e4 to 0039e6e7 has its CatchHandler @ 0029dbe0 */
              pfVar12[-1] = fVar47 + fVar53;
              *pfVar12 = fVar44 + fVar45;
                    /* try { // try from 0029e6ec to 0039e6ef has its CatchHandler @ 0029e644 */
              *(float *)((long)pfVar12 + (uVar42 - 4)) = fVar53 - fVar47;
              *(float *)((long)pfVar12 + uVar42) = fVar45 - fVar44;
                    /* catch() { ... } // from try @ 0029de3c with catch @ 0029e6f4 */
              pfVar12 = pfVar12 + 2;
            } while (pfVar12 != pfVar18 + (ulong)(uVar37 - 2) * 2 + 2);
          }
          iVar41 = iVar41 + uVar38;
                    /* catch() { ... } // from try @ 0029df40 with catch @ 0029e704 */
          pfVar11 = (float *)((long)pfVar11 + uVar34);
          pfVar18 = (float *)((long)pfVar18 + uVar34);
        } while (iVar41 < (int)param_4);
      }
    }
  }
  else {
    uVar28 = 1;
    uVar42 = 1;
  }
  fVar60 = DAT_0029f350;
  fVar57 = DAT_0029f34c;
  fVar56 = DAT_0029f348;
  fVar55 = DAT_0029f344;
  fVar53 = DAT_0029f340;
  fVar47 = DAT_0029f33c;
  fVar45 = DAT_0029f338;
  fVar44 = DAT_0029f334;
  uVar28 = uVar28 ^ 1;
  if ((int)uVar28 < param_5) {
    puVar13 = param_6 + (int)uVar28;
    pfVar18 = (float *)(param_10 + 4);
                    /* catch() { ... } // from try @ 0029e7e8 with catch @ 0029e790
                       catch() { ... } // from try @ 0029e834 with catch @ 0029e790
                       catch() { ... } // from try @ 0029eb6c with catch @ 0029e790
                       catch() { ... } // from try @ 0029ebd0 with catch @ 0029e790
                       catch() { ... } // from try @ 0029ed60 with catch @ 0029e790
                       catch() { ... } // from try @ 0029ed78 with catch @ 0029e790
                       catch() { ... } // from try @ 0029edc8 with catch @ 0029e790 */
    do {
      uVar19 = *puVar13;
      uVar37 = (uint)uVar42;
      uVar38 = uVar19 * uVar37;
      uVar5 = 0;
      if (uVar19 != 0) {
        uVar5 = (int)uVar39 / (int)uVar19;
      }
      if (uVar19 == 3) {
        if (0 < (int)param_4) {
          uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar38 << 3;
          uVar42 = -(uVar42 >> 0x1f) & 0xfffffff800000000 | uVar42 << 3;
          pfVar11 = param_3 + 1;
          iVar41 = 0;
          uVar39 = -(ulong)((uVar37 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                   (ulong)(uVar37 << 1) << 3;
                    /* try { // try from 0029eb6c to 0039eb6f has its CatchHandler @ 0029e790 */
          pfVar12 = param_3;
          do {
            fVar48 = *(float *)((long)pfVar12 + uVar42) + *(float *)((long)pfVar12 + uVar39);
            fVar62 = *(float *)((long)pfVar11 + uVar42) + *(float *)((long)pfVar11 + uVar39);
            fVar59 = *pfVar11;
            fVar46 = *pfVar12 - fVar48 * 0.5;
            fVar51 = fVar59 - fVar62 * 0.5;
            fVar61 = *(float *)((long)pfVar11 + uVar42) - *(float *)((long)pfVar11 + uVar39);
            fVar58 = *(float *)((long)pfVar12 + uVar39) - *(float *)((long)pfVar12 + uVar42);
            *pfVar12 = fVar48 + *pfVar12;
            *pfVar11 = fVar62 + fVar59;
                    /* try { // try from 0029ebc4 to 0039ebc7 has its CatchHandler @ 0029edcc */
            *(float *)((long)pfVar12 + uVar42) = fVar46 + fVar44 * fVar61;
            *(float *)((long)pfVar11 + uVar42) = fVar51 + fVar44 * fVar58;
            *(float *)((long)pfVar12 + uVar39) = fVar46 - fVar44 * fVar61;
                    /* try { // try from 0029ebd0 to 0039ebd3 has its CatchHandler @ 0029e790 */
            *(float *)((long)pfVar11 + uVar39) = fVar51 - fVar44 * fVar58;
            if (1 < (int)uVar37) {
              pfVar25 = pfVar11 + 1;
                    /* try { // try from 0029ebdc to 0039ed4f has its CatchHandler @ 0029edfc */
              pfVar30 = pfVar11 + 2;
              pfVar35 = param_8;
              pfVar36 = param_8;
              do {
                pfVar36 = (float *)((long)pfVar36 +
                                   (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                                   (ulong)(uVar5 << 1) << 3));
                pfVar35 = (float *)((long)pfVar35 +
                                   (-(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3
                                   ));
                fVar61 = *(float *)((long)pfVar25 + uVar42) * *pfVar35 -
                         *(float *)((long)pfVar30 + uVar42) * pfVar35[1];
                fVar58 = *(float *)((long)pfVar25 + uVar39) * *pfVar36 -
                         *(float *)((long)pfVar30 + uVar39) * pfVar36[1];
                fVar59 = *pfVar35 * *(float *)((long)pfVar30 + uVar42) +
                         pfVar35[1] * *(float *)((long)pfVar25 + uVar42);
                fVar62 = *pfVar36 * *(float *)((long)pfVar30 + uVar39) +
                         pfVar36[1] * *(float *)((long)pfVar25 + uVar39);
                fVar46 = *pfVar30;
                fVar51 = fVar61 + fVar58;
                fVar58 = fVar58 - fVar61;
                fVar61 = fVar59 + fVar62;
                fVar59 = fVar59 - fVar62;
                fVar48 = *pfVar25 - fVar51 * 0.5;
                fVar62 = fVar46 - fVar61 * 0.5;
                *pfVar25 = fVar51 + *pfVar25;
                *pfVar30 = fVar61 + fVar46;
                *(float *)((long)pfVar25 + uVar42) = fVar48 + fVar44 * fVar59;
                *(float *)((long)pfVar30 + uVar42) = fVar62 + fVar44 * fVar58;
                *(float *)((long)pfVar25 + uVar39) = fVar48 - fVar44 * fVar59;
                pfVar25 = pfVar25 + 2;
                *(float *)((long)pfVar30 + uVar39) = fVar62 - fVar44 * fVar58;
                pfVar30 = pfVar30 + 2;
              } while (pfVar12 + (ulong)(uVar37 - 2) * 2 + 5 != pfVar30);
            }
            pfVar12 = (float *)((long)pfVar12 + uVar23);
            pfVar11 = (float *)((long)pfVar11 + uVar23);
            iVar41 = iVar41 + uVar38;
          } while (iVar41 < (int)param_4);
        }
      }
      else if (uVar19 == 5) {
        if (0 < (int)param_4) {
          lVar40 = (long)(int)(uVar37 << 1);
          uVar39 = -(uVar42 >> 0x1f) & 0xfffffff800000000 | uVar42 << 3;
          lVar70 = lVar40 * 8;
          iVar41 = 0;
          pfVar11 = param_3;
          do {
                    /* try { // try from 0029ed60 to 0039ed63 has its CatchHandler @ 0029e790 */
            if (0 < (int)uVar37) {
                    /* catch() { ... } // from try @ 0029e82c with catch @ 0029ed68 */
                    /* try { // try from 0029ed78 to 0039ed7b has its CatchHandler @ 0029e790 */
                    /* catch() { ... } // from try @ 0029e928 with catch @ 0029ed7c */
              pfVar36 = pfVar11 + 1;
              pfVar17 = pfVar11;
              pfVar12 = param_8;
              pfVar30 = param_8;
              pfVar35 = param_8;
              pfVar25 = param_8;
              do {
                pfVar26 = pfVar25 + 1;
                pfVar16 = pfVar12 + 1;
                pfVar14 = pfVar30 + 1;
                pfVar24 = pfVar35 + 1;
                fVar59 = *(float *)((long)pfVar36 + uVar39 + lVar70);
                fVar52 = *pfVar12;
                pfVar12 = pfVar12 + (long)(int)(uVar5 << 2) * 2;
                fVar48 = *pfVar25;
                pfVar25 = pfVar25 + (long)(int)uVar5 * 2;
                fVar61 = *pfVar30;
                pfVar30 = pfVar30 + (long)(int)(uVar5 * 3) * 2;
                fVar62 = *pfVar35;
                    /* try { // try from 0029edc8 to 0039edcb has its CatchHandler @ 0029e790 */
                pfVar35 = pfVar35 + (long)(int)(uVar5 * 2) * 2;
                    /* catch() { ... } // from try @ 0029e8ec with catch @ 0029edcc
                       catch() { ... } // from try @ 0029e930 with catch @ 0029edcc
                       catch() { ... } // from try @ 0029ea80 with catch @ 0029edcc
                       catch() { ... } // from try @ 0029ebc4 with catch @ 0029edcc */
                    /* catch() { ... } // from try @ 0029ea0c with catch @ 0029edd4 */
                fVar58 = *(float *)((long)pfVar17 + uVar39 + lVar70);
                    /* catch() { ... } // from try @ 0029e8a0 with catch @ 0029edfc
                       catch() { ... } // from try @ 0029eaf8 with catch @ 0029edfc
                       catch() { ... } // from try @ 0029ebdc with catch @ 0029edfc */
                fVar67 = *(float *)((long)pfVar17 + uVar39) * fVar48 -
                         *(float *)((long)pfVar36 + uVar39) * *pfVar26;
                fVar64 = pfVar17[lVar40 * 4] * fVar52 - pfVar36[lVar40 * 4] * *pfVar16;
                fVar46 = fVar58 * fVar61 - fVar59 * *pfVar14;
                fVar51 = pfVar17[lVar40 * 2] * fVar62 - pfVar36[lVar40 * 2] * *pfVar24;
                fVar49 = fVar48 * *(float *)((long)pfVar36 + uVar39) +
                         *pfVar26 * *(float *)((long)pfVar17 + uVar39);
                    /* catch() { ... } // from try @ 0029eea4 with catch @ 0029ee10
                       catch() { ... } // from try @ 0029eef0 with catch @ 0029ee10
                       catch() { ... } // from try @ 0029f3c0 with catch @ 0029ee10
                       catch() { ... } // from try @ 0029f530 with catch @ 0029ee10
                       catch() { ... } // from try @ 0029f700 with catch @ 0029ee10
                       catch() { ... } // from try @ 0029f76c with catch @ 0029ee10
                       catch() { ... } // from try @ 0029f788 with catch @ 0029ee10 */
                fVar61 = fVar61 * fVar59 + *pfVar14 * fVar58;
                fVar48 = fVar52 * pfVar36[lVar40 * 4] + *pfVar16 * pfVar17[lVar40 * 4];
                fVar58 = fVar62 * pfVar36[lVar40 * 2] + *pfVar24 * pfVar17[lVar40 * 2];
                fVar50 = *pfVar36;
                fVar52 = fVar46 + fVar51;
                fVar63 = fVar67 + fVar64;
                fVar62 = fVar49 + fVar48;
                fVar59 = fVar61 + fVar58;
                fVar49 = fVar49 - fVar48;
                fVar66 = fVar63 + fVar52;
                fVar61 = fVar61 - fVar58;
                fVar69 = fVar62 + fVar59;
                fVar46 = fVar46 - fVar51;
                fVar51 = *pfVar17 - fVar66 * 0.25;
                fVar67 = fVar67 - fVar64;
                fVar48 = fVar50 - fVar69 * 0.25;
                fVar64 = fVar49 + fVar61;
                fVar63 = fVar63 - fVar52;
                fVar52 = fVar67 + fVar46;
                fVar62 = fVar62 - fVar59;
                fVar58 = fVar64 * fVar47 - fVar61 * fVar56;
                fVar68 = fVar51 + fVar60 * fVar63;
                fVar65 = fVar48 + fVar60 * fVar62;
                fVar61 = fVar52 * fVar55 - fVar46 * fVar57;
                fVar51 = fVar51 - fVar60 * fVar63;
                fVar46 = fVar49 * fVar45 + fVar47 * fVar64;
                fVar48 = fVar48 - fVar60 * fVar62;
                fVar59 = fVar67 * fVar53 + fVar55 * fVar52;
                    /* try { // try from 0029eea4 to 0039eea7 has its CatchHandler @ 0029ee10 */
                *pfVar17 = *pfVar17 + fVar66;
                *pfVar36 = fVar50 + fVar69;
                *(float *)((long)pfVar17 + uVar39) = fVar58 + fVar68;
                *(float *)((long)pfVar36 + uVar39) = fVar61 + fVar65;
                pfVar17[lVar40 * 4] = fVar68 - fVar58;
                pfVar36[lVar40 * 4] = fVar65 - fVar61;
                pfVar17[lVar40 * 2] = fVar46 + fVar51;
                pfVar36[lVar40 * 2] = fVar59 + fVar48;
                pfVar26 = pfVar36 + 2;
                *(float *)((long)pfVar17 + uVar39 + lVar70) = fVar51 - fVar46;
                    /* try { // try from 0029eee8 to 0039eeeb has its CatchHandler @ 0029f778 */
                *(float *)((long)pfVar36 + uVar39 + lVar70) = fVar48 - fVar59;
                pfVar36 = pfVar26;
                pfVar17 = pfVar17 + 2;
                    /* try { // try from 0029eef0 to 0039ef57 has its CatchHandler @ 0029ee10 */
              } while (pfVar11 + (ulong)(uVar37 - 1) * 2 + 3 != pfVar26);
            }
            iVar41 = iVar41 + uVar38;
            pfVar11 = pfVar11 + (long)(int)uVar38 * 2;
          } while (iVar41 < (int)param_4);
        }
      }
      else {
        iVar41 = (int)(uVar19 - 1) / 2;
        uVar31 = 0;
        if (uVar19 != 0) {
          uVar31 = (int)param_9 / (int)uVar19;
        }
        pfVar11 = (float *)(param_10 + (long)iVar41 * 8);
        if (0 < (int)param_4) {
                    /* try { // try from 0029e7e8 to 0039e7eb has its CatchHandler @ 0029e790 */
          lVar40 = (long)(int)uVar37;
          uVar39 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar38 << 3;
          uVar42 = -(ulong)(-uVar37 >> 0x1f) & 0xfffffff800000000 | (ulong)-uVar37 << 3;
                    /* try { // try from 0029e82c to 0039e82f has its CatchHandler @ 0029ed68 */
          pfVar12 = (float *)(param_10 + (ulong)(iVar41 - 1) * 8 + 0xc);
                    /* try { // try from 0029e834 to 0039e89b has its CatchHandler @ 0029e790 */
          lVar70 = NEON_shl((long)(int)(uVar5 * uVar19) + (long)(int)-uVar5,3);
          iVar29 = 0;
          pfVar25 = param_3;
          do {
            if (0 < (int)uVar37) {
              lVar33 = 0;
              lVar32 = 0;
              uVar19 = 0;
              pfVar35 = pfVar25 + lVar40 * 2;
              pfVar36 = (float *)((long)pfVar25 + uVar39 + lVar40 * -8);
              pfVar30 = pfVar25;
              pfVar17 = param_8;
              do {
                fVar59 = *pfVar30;
                fVar62 = pfVar30[1];
                fVar58 = fVar59;
                fVar61 = fVar62;
                if (uVar19 == 0) {
                  if (0 < iVar41) {
                    pfVar26 = pfVar35;
                    pfVar16 = pfVar36;
                    pfVar14 = pfVar18;
                    pfVar24 = pfVar11 + 1;
                    do {
                      fVar46 = *pfVar26;
                      fVar50 = *pfVar16;
                      fVar48 = pfVar26[1];
                      pfVar26 = pfVar26 + lVar40 * 2;
                      fVar49 = pfVar16[1];
                      pfVar16 = (float *)((long)pfVar16 + uVar42);
                      fVar52 = fVar46 + fVar50;
                      fVar51 = fVar48 + fVar49;
                      pfVar14[-1] = fVar52;
                      pfVar21 = pfVar14 + 2;
                      *pfVar14 = fVar48 - fVar49;
                      pfVar24[-1] = fVar46 - fVar50;
                      *pfVar24 = fVar51;
                      fVar58 = fVar58 + fVar52;
                      fVar61 = fVar61 + fVar51;
                      pfVar14 = pfVar21;
                      pfVar24 = pfVar24 + 2;
                    } while (pfVar12 != pfVar21);
                    goto LAB_0029e930;
                  }
                }
                else if (0 < iVar41) {
                    /* try { // try from 0029e8a0 to 0039e8bf has its CatchHandler @ 0029edfc */
                  pfVar14 = pfVar35;
                  pfVar16 = pfVar36;
                  pfVar26 = pfVar17;
                  pfVar21 = pfVar18;
                  pfVar27 = pfVar11 + 1;
                  pfVar24 = param_8;
                  do {
                    pfVar24 = (float *)((long)pfVar24 + lVar32);
                    pfVar22 = pfVar14 + 1;
                    pfVar1 = pfVar16 + 1;
                    pfVar2 = pfVar26 + 1;
                    fVar52 = *pfVar26;
                    pfVar26 = (float *)((long)pfVar26 + lVar33);
                    fVar51 = *pfVar16;
                    pfVar16 = (float *)((long)pfVar16 + uVar42);
                    fVar48 = *pfVar14;
                    /* try { // try from 0029e8ec to 0039e8ef has its CatchHandler @ 0029edcc */
                    pfVar14 = pfVar14 + lVar40 * 2;
                    fVar49 = fVar48 * *pfVar24 - *pfVar22 * pfVar24[1];
                    fVar50 = fVar51 * fVar52 - *pfVar1 * *pfVar2;
                    fVar46 = *pfVar24 * *pfVar22 + pfVar24[1] * fVar48;
                    fVar48 = fVar52 * *pfVar1 + *pfVar2 * fVar51;
                    fVar52 = fVar49 + fVar50;
                    fVar51 = fVar46 + fVar48;
                    pfVar21[-1] = fVar52;
                    fVar58 = fVar58 + fVar52;
                    pfVar22 = pfVar21 + 2;
                    *pfVar21 = fVar46 - fVar48;
                    pfVar27[-1] = fVar49 - fVar50;
                    *pfVar27 = fVar51;
                    /* try { // try from 0029e928 to 0039e92b has its CatchHandler @ 0029ed7c */
                    fVar61 = fVar61 + fVar51;
                    pfVar21 = pfVar22;
                    pfVar27 = pfVar27 + 2;
                  } while (pfVar22 != pfVar12);
LAB_0029e930:
                  iVar43 = 1;
                  *pfVar30 = fVar58;
                  pfVar30[1] = fVar61;
                  pfVar26 = pfVar35;
                  pfVar16 = pfVar36;
                  uVar3 = uVar31;
                  do {
                    iVar20 = 0;
                    pfVar14 = pfVar11;
                    pfVar24 = pfVar18;
                    fVar58 = fVar62;
                    fVar61 = fVar59;
                    fVar48 = fVar62;
                    fVar51 = fVar59;
                    uVar6 = uVar3;
                    do {
                    /* try { // try from 0029e930 to 0039e933 has its CatchHandler @ 0029edcc */
                      uVar23 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
                      iVar20 = iVar20 + 1;
                      fVar52 = *(float *)((long)param_8 + uVar23 + 4);
                      uVar6 = (uVar3 + uVar6) -
                              (-(uint)((int)param_9 <= (int)(uVar3 + uVar6)) & param_9);
                      fVar49 = fVar52 * *pfVar24;
                      fVar52 = fVar52 * *pfVar14;
                      fVar46 = *(float *)((long)param_8 + uVar23);
                      fVar61 = fVar61 + fVar49 + pfVar24[-1] * fVar46;
                      fVar51 = fVar51 + (fVar46 * pfVar24[-1] - fVar49);
                      fVar58 = fVar58 + (fVar46 * pfVar14[1] - fVar52);
                      fVar48 = fVar48 + fVar52 + pfVar14[1] * fVar46;
                      pfVar14 = pfVar14 + 2;
                      pfVar24 = pfVar24 + 2;
                    } while (iVar20 < iVar41);
                    iVar43 = iVar43 + 1;
                    uVar3 = uVar3 + uVar31;
                    *pfVar26 = fVar51;
                    pfVar26[1] = fVar48;
                    pfVar26 = pfVar26 + lVar40 * 2;
                    *pfVar16 = fVar61;
                    pfVar16[1] = fVar58;
                    pfVar16 = (float *)((long)pfVar16 + uVar42);
                  } while (iVar43 <= iVar41);
                }
                uVar19 = uVar19 + 1;
                pfVar30 = pfVar30 + 2;
                pfVar35 = pfVar35 + 2;
                pfVar36 = pfVar36 + 2;
                    /* try { // try from 0029ea0c to 0039ea0f has its CatchHandler @ 0029edd4 */
                pfVar17 = (float *)((long)pfVar17 + lVar70);
                lVar33 = lVar33 + (long)(int)-uVar5 * 8;
                lVar32 = lVar32 + (long)(int)uVar5 * 8;
              } while (uVar19 != uVar37);
            }
            pfVar25 = (float *)((long)pfVar25 + uVar39);
            iVar29 = iVar29 + uVar38;
          } while (iVar29 < (int)param_4);
        }
      }
      uVar39 = (ulong)uVar5;
      puVar13 = puVar13 + 1;
      uVar42 = (ulong)uVar38;
    } while (puVar13 != param_6 + (long)(int)uVar28 + 1 + (ulong)((param_5 + -1) - uVar28));
  }
                    /* try { // try from 0029ea80 to 0039ea83 has its CatchHandler @ 0029edcc */
  if (fVar54 == 1.0) {
    if (uVar4 != 0) {
      if ((int)param_4 < 2) {
        iVar41 = 0;
      }
      else {
        uVar4 = param_4 - 2 >> 1;
        pfVar18 = param_3 + 1;
        do {
          pfVar11 = pfVar18 + 4;
          pfVar18[2] = -pfVar18[2];
          *pfVar18 = -*pfVar18;
          pfVar18 = pfVar11;
        } while (pfVar11 != param_3 + (ulong)uVar4 * 4 + 5);
                    /* try { // try from 0029ef5c to 0039ef7b has its CatchHandler @ 0029f770 */
        iVar41 = (uVar4 + 1) * 2;
      }
      if (iVar41 < (int)param_4) {
        param_3[(long)(int)param_4 * 2 + -1] = -param_3[(long)(int)param_4 * 2 + -1];
      }
    }
  }
  else {
    fVar44 = fVar54;
    if (uVar4 != 0) {
      fVar44 = -fVar54;
    }
    if (0 < (int)param_4) {
      uVar4 = (param_4 - 4 >> 2) + 1;
      uVar28 = uVar4 * 4;
      uVar39 = (ulong)uVar28;
      if (param_4 - 1 < 3) {
        uVar39 = 0;
      }
      else {
        uVar19 = 0;
        pfVar18 = param_3;
        do {
          fVar45 = *pfVar18;
          fVar56 = pfVar18[1];
          fVar47 = pfVar18[2];
          fVar57 = pfVar18[3];
          fVar53 = pfVar18[4];
          fVar60 = pfVar18[5];
          fVar55 = pfVar18[6];
          fVar58 = pfVar18[7];
          uVar19 = uVar19 + 1;
                    /* try { // try from 0029eaf8 to 0039eafb has its CatchHandler @ 0029edfc */
          *pfVar18 = fVar54 * fVar45;
          pfVar18[1] = fVar44 * fVar56;
          pfVar18[2] = fVar54 * (float)(CONCAT17((char)((uint)fVar47 >> 0x18),
                                                 CONCAT16((char)((uint)fVar47 >> 0x10),
                                                          CONCAT15((char)((uint)fVar47 >> 8),
                                                                   CONCAT14(SUB41(fVar47,0),fVar45))
                                                         )) >> 0x20);
          pfVar18[3] = fVar44 * (float)(CONCAT17((char)((uint)fVar57 >> 0x18),
                                                 CONCAT16((char)((uint)fVar57 >> 0x10),
                                                          CONCAT15((char)((uint)fVar57 >> 8),
                                                                   CONCAT14(SUB41(fVar57,0),fVar56))
                                                         )) >> 0x20);
          pfVar18[4] = fVar54 * fVar53;
          pfVar18[5] = fVar44 * fVar60;
          pfVar18[6] = fVar54 * (float)(CONCAT17((char)((uint)fVar55 >> 0x18),
                                                 CONCAT16((char)((uint)fVar55 >> 0x10),
                                                          CONCAT15((char)((uint)fVar55 >> 8),
                                                                   CONCAT14(SUB41(fVar55,0),fVar53))
                                                         )) >> 0x20);
          pfVar18[7] = fVar44 * (float)(CONCAT17((char)((uint)fVar58 >> 0x18),
                                                 CONCAT16((char)((uint)fVar58 >> 0x10),
                                                          CONCAT15((char)((uint)fVar58 >> 8),
                                                                   CONCAT14(SUB41(fVar58,0),fVar60))
                                                         )) >> 0x20);
          pfVar18 = pfVar18 + 8;
        } while (uVar19 < uVar4);
        if (param_4 == uVar28) {
          return;
        }
      }
      uVar42 = -(uVar39 >> 0x1f) & 0xfffffff800000000 | uVar39 << 3;
      *(float *)((long)param_3 + uVar42) = *(float *)((long)param_3 + uVar42) * fVar54;
      *(float *)((long)param_3 + uVar42 + 4) = fVar44 * *(float *)((long)param_3 + uVar42 + 4);
      if ((int)uVar39 + 1 < (int)param_4) {
        *(float *)((long)param_3 + uVar42 + 8) = *(float *)((long)param_3 + uVar42 + 8) * fVar54;
        *(float *)((long)param_3 + uVar42 + 0xc) = fVar44 * *(float *)((long)param_3 + uVar42 + 0xc)
        ;
        if ((int)uVar39 + 2 < (int)param_4) {
          *(float *)((long)param_3 + uVar42 + 0x10) =
               *(float *)((long)param_3 + uVar42 + 0x10) * fVar54;
          *(float *)((long)param_3 + uVar42 + 0x14) =
               fVar44 * *(float *)((long)param_3 + uVar42 + 0x14);
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0029f354 (20 bytes) name=FUN_0029f354

void FUN_0029f354(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
  FUN_0029e2a0();
  return;
}


==================================================================

### FUNC 0029f368 (1752 bytes) name=FUN_0029f368

void FUN_0029f368(double param_1,float *param_2,float *param_3,uint param_4,undefined8 param_5,
                 int *param_6,int *param_7,long param_8,undefined8 param_9,undefined8 param_10,
                 uint param_11)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  long lVar5;
  uint *puVar6;
  float *pfVar7;
  long lVar8;
  float *pfVar9;
  ulong uVar10;
  int iVar11;
  uint uVar12;
  float *pfVar13;
  int *piVar14;
  int iVar15;
  uint *puVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float local_60;
  undefined1 uStack_5c;
  undefined1 uStack_5b;
  undefined1 uStack_5a;
  undefined1 uStack_59;
  float fStack_58;
  undefined1 uStack_54;
  undefined1 uStack_53;
  undefined1 uStack_52;
  undefined1 uStack_51;
  float local_50;
  undefined1 uStack_4c;
  undefined1 uStack_4b;
  undefined1 uStack_4a;
  undefined1 uStack_49;
  float fStack_48;
  undefined1 uStack_44;
  undefined1 uStack_43;
  undefined1 uStack_42;
  undefined1 uStack_41;
  float local_40;
  undefined1 uStack_3c;
  undefined1 uStack_3b;
  undefined1 uStack_3a;
  undefined1 uStack_39;
  float fStack_38;
  undefined1 uStack_34;
  undefined1 uStack_33;
  undefined1 uStack_32;
  undefined1 uStack_31;
  
  fVar26 = (float)param_1;
  if ((param_11 >> 9 & 1) == 0) {
    fVar17 = *param_2;
    fVar25 = 0.0;
  }
  else {
    fVar17 = *param_2;
    fVar25 = param_2[1];
    param_2 = param_2 + 1;
    *param_2 = fVar17;
  }
  if (param_4 == 1) {
    *param_3 = fVar26 * fVar17;
    goto LAB_0029f678;
  }
  if (param_4 == 2) {
    fVar18 = param_2[1];
    param_3[1] = fVar26 * (fVar17 - fVar18);
    *param_3 = fVar26 * (fVar18 + fVar17);
    goto LAB_0029f678;
  }
  uVar1 = (int)(param_4 + 1) >> 1;
                    /* try { // try from 0029f3c0 to 0039f3c3 has its CatchHandler @ 0029ee10 */
  if ((param_4 & 1) != 0) {
    *param_3 = fVar17;
    param_3[1] = 0.0;
    if (1 < (int)uVar1) {
      puVar6 = (uint *)(param_7 + (int)param_4);
      puVar16 = (uint *)(param_7 + ((long)(int)param_4 - (ulong)(uVar1 - 2)) + -1);
      pfVar9 = param_2 + 1;
      do {
        param_7 = param_7 + 1;
        iVar15 = *param_7;
        fVar18 = pfVar9[1];
        puVar6 = puVar6 + -1;
                    /* try { // try from 0029f700 to 0039f703 has its CatchHandler @ 0029ee10 */
        fVar17 = *pfVar9;
                    /* try { // try from 0029f710 to 0039f713 has its CatchHandler @ 0029f770 */
        uVar4 = -(ulong)(*puVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)*puVar6 << 3;
                    /* catch() { ... } // from try @ 0029f510 with catch @ 0029f718 */
        param_3[(long)iVar15 * 2] = fVar17;
        param_3[(long)iVar15 * 2 + 1] = -fVar18;
        *(float *)((long)param_3 + uVar4) = fVar17;
        *(float *)((long)param_3 + uVar4 + 4) = fVar18;
        pfVar9 = pfVar9 + 2;
      } while (puVar6 != puVar16);
    }
    FUN_0029e2a0(0x3ff0000000000000,param_3,param_3,(ulong)param_4,param_5,param_6);
    *param_3 = *param_3 * fVar26;
    if (1 < (int)param_4) {
                    /* try { // try from 0029f76c to 0039f76f has its CatchHandler @ 0029ee10 */
                    /* catch() { ... } // from try @ 0029ef5c with catch @ 0029f770
                       catch() { ... } // from try @ 0029f34c with catch @ 0029f770
                       catch() { ... } // from try @ 0029f53c with catch @ 0029f770
                       catch() { ... } // from try @ 0029f710 with catch @ 0029f770 */
      pfVar9 = param_3 + 2;
      uVar3 = param_4 - 2 >> 1;
                    /* catch() { ... } // from try @ 0029eee8 with catch @ 0029f778 */
      uVar1 = uVar3 + 1;
                    /* try { // try from 0029f788 to 0039f78b has its CatchHandler @ 0029ee10 */
      pfVar7 = param_3 + 1;
                    /* catch() { ... } // from try @ 0029f2a4 with catch @ 0029f78c */
                    /* catch() { ... } // from try @ 0029f458 with catch @ 0029f79c */
                    /* catch() { ... } // from try @ 0029f40c with catch @ 0029f7ac
                       catch() { ... } // from try @ 0029f460 with catch @ 0029f7ac
                       catch() { ... } // from try @ 0029f7e0 with catch @ 0029f7ac */
                    /* catch() { ... } // from try @ 0029f238 with catch @ 0029f7b4
                       catch() { ... } // from try @ 0029f2ac with catch @ 0029f7b4
                       catch() { ... } // from try @ 0029f4bc with catch @ 0029f7b4
                       catch() { ... } // from try @ 0029f518 with catch @ 0029f7b4 */
      if ((pfVar9 < param_3 + (ulong)uVar1 * 2 + 1 && pfVar7 < param_3 + (ulong)uVar1 * 4 + 2) ||
         (uVar1 < 5)) {
        do {
          pfVar13 = pfVar9 + 4;
          fVar17 = *pfVar9;
          pfVar7[1] = fVar26 * pfVar9[2];
          *pfVar7 = fVar26 * fVar17;
          pfVar7 = pfVar7 + 2;
          pfVar9 = pfVar13;
        } while (pfVar13 != param_3 + (ulong)uVar3 * 4 + 6);
      }
      else {
                    /* catch() { ... } // from try @ 0029f1c4 with catch @ 0029f7bc */
        uVar3 = (uVar3 - 4 >> 2) + 1;
        if (param_4 - 2 < 8) {
          uVar4 = 1;
        }
        else {
          uVar12 = 0;
          do {
            fVar17 = *pfVar9;
            fVar22 = pfVar9[2];
            fVar18 = pfVar9[4];
            fVar21 = pfVar9[6];
            fVar24 = pfVar9[8];
            fVar23 = pfVar9[10];
            fVar19 = pfVar9[0xc];
            fVar20 = pfVar9[0xe];
            pfVar9 = pfVar9 + 0x10;
                    /* try { // try from 0029f7e0 to 0039f7e3 has its CatchHandler @ 0029f7ac */
            uVar12 = uVar12 + 1;
            _local_40 = CONCAT17((char)((uint)fVar18 >> 0x18),
                                 CONCAT16((char)((uint)fVar18 >> 0x10),
                                          CONCAT15((char)((uint)fVar18 >> 8),
                                                   CONCAT14(SUB41(fVar18,0),fVar17))));
            _fStack_38 = CONCAT17((char)((uint)fVar19 >> 0x18),
                                  CONCAT16((char)((uint)fVar19 >> 0x10),
                                           CONCAT15((char)((uint)fVar19 >> 8),
                                                    CONCAT14(SUB41(fVar19,0),fVar24))));
                    /* catch() { ... } // from try @ 0029fa34 with catch @ 0029f800
                       catch() { ... } // from try @ 0029fa94 with catch @ 0029f800 */
            *pfVar7 = fVar26 * fVar17;
            pfVar7[1] = fVar26 * fVar22;
            pfVar7[2] = fVar26 * (float)((ulong)_local_40 >> 0x20);
            pfVar7[3] = fVar26 * (float)(CONCAT17((char)((uint)fVar21 >> 0x18),
                                                  CONCAT16((char)((uint)fVar21 >> 0x10),
                                                           CONCAT15((char)((uint)fVar21 >> 8),
                                                                    CONCAT14(SUB41(fVar21,0),fVar22)
                                                                   ))) >> 0x20);
            pfVar7[4] = fVar26 * fVar24;
            pfVar7[5] = fVar26 * fVar23;
            pfVar7[6] = fVar26 * (float)((ulong)_fStack_38 >> 0x20);
            pfVar7[7] = fVar26 * (float)(CONCAT17((char)((uint)fVar20 >> 0x18),
                                                  CONCAT16((char)((uint)fVar20 >> 0x10),
                                                           CONCAT15((char)((uint)fVar20 >> 8),
                                                                    CONCAT14(SUB41(fVar20,0),fVar23)
                                                                   ))) >> 0x20);
            pfVar7 = pfVar7 + 8;
          } while (uVar12 < uVar3);
          uVar4 = (ulong)(uVar3 * 8 + 1);
          if (uVar3 * 4 == uVar1) goto LAB_0029f678;
        }
        uVar3 = (uint)uVar4;
        uVar10 = -(uVar4 >> 0x1f) & 0xfffffffc00000000 | uVar4 << 2;
        uVar4 = -(ulong)((uVar3 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                (ulong)(uVar3 << 1) << 2;
        uVar1 = uVar3 + 2;
        fVar17 = *(float *)((long)param_3 + uVar4 + 8);
        *(float *)((long)param_3 + uVar10) = fVar26 * *(float *)((long)param_3 + uVar4);
        *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
        if ((int)uVar1 < (int)param_4) {
          uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
          fVar17 = *(float *)((long)param_3 + uVar4 + 0x18);
          uVar1 = uVar3 + 4;
          *(float *)((long)param_3 + uVar10) = fVar26 * *(float *)((long)param_3 + uVar4 + 0x10);
          *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
          if ((int)uVar1 < (int)param_4) {
            uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            fVar17 = *(float *)((long)param_3 + uVar4 + 0x28);
            uVar1 = uVar3 + 6;
            *(float *)((long)param_3 + uVar10) = fVar26 * *(float *)((long)param_3 + uVar4 + 0x20);
            *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
            if ((int)uVar1 < (int)param_4) {
              uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
              fVar17 = *(float *)((long)param_3 + uVar4 + 0x38);
              uVar1 = uVar3 + 8;
                    /* try { // try from 0029f8d8 to 0039f94f has its CatchHandler @ 0029fa98 */
              *(float *)((long)param_3 + uVar10) = fVar26 * *(float *)((long)param_3 + uVar4 + 0x30)
              ;
              *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
              if ((int)uVar1 < (int)param_4) {
                uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
                fVar17 = *(float *)((long)param_3 + uVar4 + 0x48);
                uVar1 = uVar3 + 10;
                *(float *)((long)param_3 + uVar10) =
                     fVar26 * *(float *)((long)param_3 + uVar4 + 0x40);
                *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
                if ((int)uVar1 < (int)param_4) {
                  uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
                  fVar17 = *(float *)((long)param_3 + uVar4 + 0x58);
                  uVar3 = uVar3 + 0xc;
                  *(float *)((long)param_3 + uVar10) =
                       fVar26 * *(float *)((long)param_3 + uVar4 + 0x50);
                  *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
                  if ((int)uVar3 < (int)param_4) {
                    uVar10 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
                    fVar17 = *(float *)((long)param_3 + uVar4 + 0x68);
                    *(float *)((long)param_3 + uVar10) =
                         fVar26 * *(float *)((long)param_3 + uVar4 + 0x60);
                    *(float *)((long)param_3 + uVar10 + 4) = fVar26 * fVar17;
                  }
                }
              }
            }
          }
        }
      }
    }
    goto LAB_0029f678;
  }
  uVar4 = -(ulong)(param_4 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_4 << 2;
  lVar8 = (long)param_2 + uVar4;
  pfVar9 = (float *)(param_8 + 8);
  fVar18 = *(float *)(lVar8 + -4);
  fVar24 = param_2[1];
  *param_3 = fVar18 + fVar17;
  param_3[1] = fVar18 - fVar17;
  if ((int)uVar1 < 3) {
    iVar15 = 2;
  }
  else {
    pfVar7 = param_2 + 2;
    pfVar13 = param_3 + 2;
    lVar5 = (long)param_3 + uVar4;
    iVar15 = 2;
    do {
      while( true ) {
        iVar11 = iVar15 >> 1;
        fVar17 = fVar24 - *(float *)(lVar8 + -0xc);
        fVar22 = *pfVar7 + *(float *)(lVar8 + -8);
                    /* try { // try from 0029f458 to 0039f45b has its CatchHandler @ 0029f79c */
                    /* try { // try from 0029f460 to 0039f493 has its CatchHandler @ 0029f7ac */
        fVar18 = *pfVar7 - *(float *)(lVar8 + -8);
        fVar19 = *(float *)(lVar8 + -0xc) + fVar24;
        fVar23 = fVar22 * *pfVar9 - fVar17 * pfVar9[1];
        fVar22 = fVar22 * pfVar9[1] + *pfVar9 * fVar17;
        fVar24 = pfVar7[1];
        fVar17 = fVar19 - fVar23;
        fVar21 = -fVar18 - fVar22;
        fVar19 = fVar19 + fVar23;
        fVar18 = fVar18 - fVar22;
        if (param_2 == param_3) break;
        iVar2 = param_7[iVar11];
        iVar15 = iVar15 + 2;
        iVar11 = param_7[(int)(uVar1 - iVar11)];
        pfVar9 = pfVar9 + 2;
        param_3[iVar2] = fVar17;
                    /* try { // try from 0029f4bc to 0039f4bf has its CatchHandler @ 0029f7b4 */
        param_3[(long)iVar2 + 1] = fVar21;
        lVar8 = lVar8 + -8;
        param_3[iVar11] = fVar19;
        pfVar7 = pfVar7 + 2;
        param_3[(long)iVar11 + 1] = fVar18;
        pfVar13 = pfVar13 + 2;
        lVar5 = lVar5 + -8;
        if ((int)uVar1 <= iVar15) goto LAB_0029f4dc;
      }
                    /* try { // try from 0029f40c to 0039f40f has its CatchHandler @ 0029f7ac */
      iVar15 = iVar15 + 2;
      pfVar9 = pfVar9 + 2;
      *pfVar13 = fVar17;
      pfVar13[1] = fVar21;
      lVar8 = lVar8 + -8;
      *(float *)(lVar5 + -8) = fVar19;
      pfVar7 = pfVar7 + 2;
      *(float *)(lVar5 + -4) = fVar18;
      pfVar13 = pfVar13 + 2;
      lVar5 = lVar5 + -8;
    } while (iVar15 < (int)uVar1);
LAB_0029f4dc:
    iVar15 = (uVar1 - 3 & 0xfffffffe) + 4;
  }
  iVar11 = (int)param_5;
  if ((int)uVar1 < iVar15) {
    iVar15 = *param_6;
    *param_6 = iVar15 >> 1;
    uVar3 = (uint)(iVar15 >> 1 == 1);
    iVar11 = iVar11 - uVar3;
    if (uVar3 == 0) goto LAB_0029f52c;
    lVar8 = 4;
LAB_0029f530:
                    /* try { // try from 0029f530 to 0039f533 has its CatchHandler @ 0029ee10 */
    piVar14 = (int *)((long)param_6 + lVar8);
                    /* try { // try from 0029f53c to 0039f53f has its CatchHandler @ 0029f770 */
  }
  else {
    uVar4 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    fVar17 = *(float *)((long)param_2 + uVar4) + *(float *)((long)param_2 + uVar4);
    if (param_2 == param_3) {
      iVar15 = *param_6;
      *(float *)((long)param_3 + uVar4) = fVar24 + fVar24;
                    /* try { // try from 0029f510 to 0039f513 has its CatchHandler @ 0029f718 */
      *(float *)((long)param_3 + uVar4 + 4) = fVar17;
                    /* try { // try from 0029f518 to 0039f527 has its CatchHandler @ 0029f7b4 */
      *param_6 = iVar15 >> 1;
      uVar3 = (uint)(iVar15 >> 1 == 1);
      iVar11 = iVar11 - uVar3;
      if (uVar3 == 0) {
LAB_0029f52c:
        lVar8 = 0;
        goto LAB_0029f530;
      }
      piVar14 = param_6 + 1;
                    /* try { // try from 0029fa34 to 0039fa5f has its CatchHandler @ 0029f800 */
    }
    else {
      iVar15 = *param_6;
                    /* try { // try from 0029f9c0 to 0039f9c3 has its CatchHandler @ 0029fa70 */
      lVar8 = (long)(*(int *)((long)param_7 + uVar4) << 1);
      param_3[lVar8] = fVar24 + fVar24;
      param_3[lVar8 + 1] = fVar17;
      uVar3 = (uint)(iVar15 >> 1 == 1);
      iVar11 = iVar11 - uVar3;
      *param_6 = iVar15 >> 1;
      if (uVar3 == 0) goto LAB_0029f52c;
      piVar14 = param_6 + 1;
    }
  }
  FUN_0029e2a0(0x3ff0000000000000,param_3,param_3,(ulong)uVar1,iVar11,piVar14);
  *param_6 = *param_6 << 1;
  if (0 < (int)param_4) {
    uVar3 = param_4 - 1 >> 1;
    uVar1 = (uVar3 - 3 >> 2) + 1;
    fVar17 = -fVar26;
    if (param_4 - 1 < 6) {
      uVar4 = 0;
    }
    else {
      uVar12 = 0;
      pfVar9 = param_3;
      do {
        fVar18 = pfVar9[2];
        fVar19 = pfVar9[3];
        fVar24 = pfVar9[6];
        fVar22 = pfVar9[7];
        uVar12 = uVar12 + 1;
        _local_60 = CONCAT17((char)((uint)fVar18 >> 0x18),
                             CONCAT16((char)((uint)fVar18 >> 0x10),
                                      CONCAT15((char)((uint)fVar18 >> 8),
                                               CONCAT14(SUB41(fVar18,0),*pfVar9))));
        _fStack_58 = CONCAT17((char)((uint)fVar24 >> 0x18),
                              CONCAT16((char)((uint)fVar24 >> 0x10),
                                       CONCAT15((char)((uint)fVar24 >> 8),
                                                CONCAT14(SUB41(fVar24,0),pfVar9[4]))));
        _local_50 = CONCAT17((char)((uint)fVar19 >> 0x18),
                             CONCAT16((char)((uint)fVar19 >> 0x10),
                                      CONCAT15((char)((uint)fVar19 >> 8),
                                               CONCAT14(SUB41(fVar19,0),pfVar9[1]))));
        _fStack_48 = CONCAT17((char)((uint)fVar22 >> 0x18),
                              CONCAT16((char)((uint)fVar22 >> 0x10),
                                       CONCAT15((char)((uint)fVar22 >> 8),
                                                CONCAT14(SUB41(fVar22,0),pfVar9[5]))));
        *pfVar9 = fVar26 * *pfVar9;
        pfVar9[1] = fVar17 * pfVar9[1];
        pfVar9[2] = fVar26 * (float)((ulong)_local_60 >> 0x20);
        pfVar9[3] = fVar17 * (float)((ulong)_local_50 >> 0x20);
        pfVar9[4] = fVar26 * pfVar9[4];
        pfVar9[5] = fVar17 * pfVar9[5];
        pfVar9[6] = fVar26 * (float)((ulong)_fStack_58 >> 0x20);
        pfVar9[7] = fVar17 * (float)((ulong)_fStack_48 >> 0x20);
        pfVar9 = pfVar9 + 8;
      } while (uVar12 < uVar1);
      uVar4 = (ulong)(uVar1 * 8);
      if (uVar1 * 4 == uVar3 + 1) goto LAB_0029f678;
    }
    uVar10 = -(uVar4 >> 0x1f) & 0xfffffffc00000000 | uVar4 << 2;
    uVar1 = (int)uVar4 + 2;
    *(float *)((long)param_3 + uVar10) = *(float *)((long)param_3 + uVar10) * fVar26;
    *(float *)((long)param_3 + uVar10 + 4) = fVar17 * *(float *)((long)param_3 + uVar10 + 4);
    if ((int)uVar1 < (int)param_4) {
      uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
      uVar1 = (int)uVar4 + 4;
      *(float *)((long)param_3 + uVar10) = *(float *)((long)param_3 + uVar10) * fVar26;
      *(float *)((long)param_3 + uVar10 + 4) = fVar17 * *(float *)((long)param_3 + uVar10 + 4);
      if ((int)uVar1 < (int)param_4) {
        uVar4 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
        *(float *)((long)param_3 + uVar4) = *(float *)((long)param_3 + uVar4) * fVar26;
        *(float *)((long)param_3 + uVar4 + 4) = fVar17 * *(float *)((long)param_3 + uVar4 + 4);
      }
    }
  }
LAB_0029f678:
  if ((param_11 >> 9 & 1) != 0) {
    *param_2 = fVar25;
  }
  return;
}


==================================================================

### FUNC 0029fa40 (20 bytes) name=FUN_0029fa40

void FUN_0029fa40(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
  FUN_0029f368();
  return;
}


==================================================================

### FUNC 0029fa54 (500 bytes) name=FUN_0029fa54

void FUN_0029fa54(float *param_1,int param_2,float *param_3,long param_4,float *param_5,int param_6,
                 ulong param_7,undefined4 param_8,undefined8 param_9,undefined8 param_10,
                 undefined8 param_11,float *param_12,undefined8 param_13,undefined8 param_14)

{
  long lVar1;
  float *pfVar2;
  int iVar3;
  long lVar4;
  undefined4 *puVar5;
  float *pfVar6;
  uint uVar7;
  ulong uVar8;
  int iVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  ulong uVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  
  iVar9 = (int)param_7;
  uVar13 = (ulong)(long)param_2 >> 2;
                    /* try { // try from 0029fa68 to 0039fa6b has its CatchHandler @ 0029fa70 */
                    /* catch() { ... } // from try @ 0029f9c0 with catch @ 0029fa70
                       catch() { ... } // from try @ 0029fa68 with catch @ 0029fa70 */
  iVar3 = iVar9 >> 1;
  if (iVar9 == 1) {
    *param_5 = *param_1;
    return;
  }
  uVar8 = -((ulong)(long)param_2 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar13 & 0xffffffff) << 2;
                    /* try { // try from 0029fa94 to 0039fa97 has its CatchHandler @ 0029f800 */
                    /* catch() { ... } // from try @ 0029f8d8 with catch @ 0029fa98 */
  *param_3 = (*param_1 + *param_1) * *param_12 * DAT_0029fc48;
  if (iVar3 < 2) {
    uVar13 = -(param_7 >> 0x1f & 1) & 0xfffffffc00000000 | (param_7 & 0xffffffff) << 2;
    *(float *)((long)param_3 + (uVar13 - 4)) =
         (*(float *)((long)param_1 + uVar8) + *(float *)((long)param_1 + uVar8)) * param_12[2];
    FUN_0029f368(0x3ff0000000000000,param_3,param_4,param_7 & 0xffffffff,param_8,param_9,param_10,
                 param_11,param_7 & 0xffffffff,param_14,0);
    if (iVar3 < 1) {
      return;
    }
  }
  else {
                    /* catch() { ... } // from try @ 0029fb24 with catch @ 0029fad0
                       catch() { ... } // from try @ 0029fdd0 with catch @ 0029fad0
                       catch() { ... } // from try @ 0029fe28 with catch @ 0029fad0
                       catch() { ... } // from try @ 0029fe80 with catch @ 0029fad0 */
    pfVar11 = param_1 + (iVar9 + -1) * (int)uVar13;
    pfVar6 = param_3 + 1;
    pfVar10 = param_12 + 2;
    pfVar12 = (float *)((long)param_1 + uVar8);
    do {
      fVar15 = *pfVar10;
      pfVar2 = pfVar10 + 2;
      fVar16 = *pfVar11;
      fVar17 = *pfVar12;
      pfVar11 = (float *)((long)pfVar11 - uVar8);
      pfVar12 = (float *)((long)pfVar12 + uVar8);
      fVar14 = pfVar10[1];
      *pfVar6 = fVar15 * fVar17 - fVar14 * fVar16;
      pfVar6[1] = -(fVar14 * fVar17) - fVar15 * fVar16;
      pfVar6 = pfVar6 + 2;
      pfVar10 = pfVar2;
    } while (pfVar2 != param_12 + ((ulong)(iVar3 - 2) + 2) * 2);
    lVar4 = (ulong)(iVar3 - 2) + 1;
                    /* try { // try from 0029fb24 to 0039fb7b has its CatchHandler @ 0029fad0 */
    uVar13 = -(param_7 >> 0x1f & 1) & 0xfffffffc00000000 | (param_7 & 0xffffffff) << 2;
    fVar14 = *(float *)((long)((long)param_1 + uVar8) + uVar8 * lVar4);
    *(float *)((long)param_3 + (uVar13 - 4)) = (fVar14 + fVar14) * (param_12 + 2)[lVar4 * 2];
    FUN_0029f368(0x3ff0000000000000,param_3,param_4,param_7 & 0xffffffff,param_8,param_9,param_10,
                 param_11,param_7 & 0xffffffff,param_14,0);
  }
  puVar5 = (undefined4 *)(param_4 + uVar13);
  uVar13 = (ulong)(long)param_6 >> 2;
  lVar4 = 0;
  uVar7 = (uint)uVar13;
  do {
    lVar1 = lVar4 * 4;
    lVar4 = lVar4 + 1;
    *param_5 = *(float *)(param_4 + lVar1);
    puVar5 = puVar5 + -1;
    *(undefined4 *)
     ((long)param_5 +
     (-((ulong)(long)param_6 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar13 & 0xffffffff) << 2)) =
         *puVar5;
    param_5 = (float *)((long)param_5 +
                       (-(ulong)((uVar7 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                       (ulong)(uVar7 << 1) << 2));
  } while ((int)lVar4 < iVar3);
  return;
}


==================================================================

### FUNC 0029fc4c (800 bytes) name=FUN_0029fc4c

void FUN_0029fc4c(double param_1,float *param_2,long param_3,uint param_4,undefined8 param_5,
                 int *param_6,long param_7,float *param_8,undefined4 param_9,undefined8 param_10,
                 uint param_11)

{
  int *piVar1;
  uint uVar2;
  float *pfVar3;
  long lVar4;
  int iVar5;
  float *pfVar6;
  uint uVar7;
  float *pfVar8;
  int *piVar9;
  int iVar10;
  ulong uVar11;
  float *pfVar12;
  long lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  
                    /* try { // try from 0029fc58 to 0039fceb has its CatchHandler @ 0029fe3c */
  fVar23 = (float)param_1;
  uVar11 = (ulong)(param_11 >> 9) & 1;
  iVar10 = (int)uVar11;
  lVar13 = uVar11 * 4;
  pfVar12 = (float *)(param_3 + lVar13);
  if (param_4 == 1) {
    *(float *)(param_3 + lVar13) = fVar23 * *param_2;
  }
  else {
    if (param_4 == 2) {
      fVar14 = fVar23 * (*param_2 + param_2[1]);
      pfVar12[1] = fVar23 * (*param_2 - param_2[1]);
      *(float *)(param_3 + lVar13) = fVar14;
      if (iVar10 == 0) {
        return;
      }
      pfVar12[-1] = fVar14;
      *(undefined4 *)(param_3 + lVar13) = 0;
      goto LAB_0029fee0;
    }
    if ((param_4 & 1) != 0) {
      fVar14 = *param_2;
      pfVar12 = pfVar12 + -uVar11;
      pfVar12[1] = 0.0;
      *pfVar12 = fVar23 * fVar14;
      if (1 < (int)param_4) {
        piVar9 = (int *)(param_7 + 4);
        pfVar6 = pfVar12 + 2;
        do {
          piVar1 = piVar9 + 1;
          pfVar3 = pfVar6 + 4;
          iVar5 = *piVar9;
          piVar9 = piVar9 + 2;
          fVar17 = param_2[*piVar1];
          fVar14 = param_2[iVar5];
          pfVar6[1] = 0.0;
          pfVar6[3] = 0.0;
          pfVar6[2] = fVar23 * fVar17;
          *pfVar6 = fVar23 * fVar14;
          pfVar6 = pfVar3;
        } while (pfVar3 != pfVar12 + (ulong)(param_4 - 2 >> 1) * 4 + 6);
      }
      FUN_0029e2a0(0x3ff0000000000000,pfVar12,pfVar12,param_4,param_5,param_6,param_7,param_8,
                   param_9,param_10,0x100);
                    /* try { // try from 0029fd5c to 0039fd5f has its CatchHandler @ 0029fe84 */
      if (iVar10 != 0) {
        return;
      }
      pfVar12[1] = *pfVar12;
      return;
    }
    iVar5 = *param_6;
    uVar2 = (int)param_4 >> 1;
    *param_6 = iVar5 >> 1;
    uVar7 = (uint)(iVar5 >> 1 == 1);
    fVar14 = fVar23 * 0.5;
    lVar4 = 4;
    if (uVar7 == 0) {
      lVar4 = 0;
    }
                    /* try { // try from 0029fdd0 to 0039fdd3 has its CatchHandler @ 0029fad0 */
    FUN_0029e2a0(0x3ff0000000000000,param_2,pfVar12,(ulong)uVar2,(int)param_5 - uVar7,
                 (long)param_6 + lVar4);
    fVar15 = pfVar12[1];
    fVar17 = *(float *)(param_3 + lVar13);
    lVar4 = (long)(int)param_4;
    *param_6 = *param_6 << 1;
    uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    fVar16 = fVar23 * (fVar17 - fVar15);
    *(float *)(param_3 + lVar13) = fVar23 * (fVar17 + fVar15);
    pfVar12[1] = fVar16;
                    /* try { // try from 0029fe1c to 0039fe1f has its CatchHandler @ 0029fe3c */
    fVar15 = *(float *)((long)pfVar12 + uVar11);
    fVar17 = pfVar12[lVar4 + -1];
    pfVar12[lVar4 + -1] = fVar16;
                    /* try { // try from 0029fe28 to 0039fe2b has its CatchHandler @ 0029fad0 */
    if ((int)uVar2 < 3) {
      iVar5 = 2;
    }
    else {
      pfVar6 = pfVar12 + lVar4;
                    /* try { // try from 0029fe34 to 0039fe37 has its CatchHandler @ 0029fe84 */
      uVar7 = uVar2 - 3 >> 1;
      pfVar3 = pfVar12;
                    /* catch() { ... } // from try @ 0029fc58 with catch @ 0029fe3c
                       catch() { ... } // from try @ 0029fe1c with catch @ 0029fe3c */
      do {
        pfVar8 = pfVar3 + 2;
        fVar21 = param_8[2];
        fVar20 = fVar14 * (pfVar6[-2] - *pfVar8);
        fVar19 = fVar14 * (pfVar3[3] + fVar17);
        fVar18 = pfVar6[-2] + *pfVar8;
        fVar16 = pfVar3[3] - fVar17;
                    /* try { // try from 0029fe80 to 0039fe83 has its CatchHandler @ 0029fad0 */
        fVar17 = pfVar6[-3];
                    /* catch() { ... } // from try @ 0029fd5c with catch @ 0029fe84
                       catch() { ... } // from try @ 0029fe34 with catch @ 0029fe84 */
        fVar22 = fVar19 * fVar21 - fVar20 * param_8[3];
        fVar19 = fVar20 * fVar21 + param_8[3] * fVar19;
                    /* catch() { ... } // from try @ 0029fed8 with catch @ 0029fe8c
                       catch() { ... } // from try @ 002a0180 with catch @ 0029fe8c
                       catch() { ... } // from try @ 002a01dc with catch @ 0029fe8c
                       catch() { ... } // from try @ 002a0234 with catch @ 0029fe8c */
        pfVar3[1] = fVar22 + fVar18 * fVar14;
        pfVar6[-3] = fVar14 * fVar18 - fVar22;
        *pfVar8 = fVar19 + fVar16 * fVar14;
        pfVar6 = pfVar6 + -2;
        *pfVar6 = fVar19 - fVar16 * fVar14;
        pfVar3 = pfVar8;
        param_8 = param_8 + 2;
      } while (pfVar6 != pfVar12 + lVar4 + (ulong)uVar7 * -2 + -2);
      iVar5 = (uVar7 + 2) * 2;
    }
    if (iVar5 <= (int)uVar2) {
      *(float *)((long)pfVar12 + (uVar11 - 4)) = fVar23 * fVar15;
      *(float *)((long)pfVar12 + uVar11) = -(fVar17 * fVar23);
    }
  }
  if (iVar10 != 0) {
    pfVar12[-1] = *(float *)(param_3 + lVar13);
                    /* try { // try from 0029fed8 to 0039ff33 has its CatchHandler @ 0029fe8c */
    *(undefined4 *)(param_3 + lVar13) = 0;
    if (1 < (int)param_4) {
LAB_0029fee0:
      pfVar12[(int)param_4] = 0.0;
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0029ff6c (20 bytes) name=FUN_0029ff6c

void FUN_0029ff6c(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
  FUN_0029fc4c();
  return;
}


==================================================================

### FUNC 0029ff80 (488 bytes) name=FUN_0029ff80

void FUN_0029ff80(float *param_1,int param_2,long param_3,float *param_4,float *param_5,int param_6,
                 int param_7,undefined4 param_8,undefined8 param_9,undefined8 param_10,
                 undefined8 param_11,float *param_12,undefined8 param_13,undefined8 param_14)

{
  undefined4 *puVar1;
  float *pfVar2;
  int iVar3;
  float *pfVar4;
  uint uVar5;
  ulong uVar6;
  float *pfVar7;
  float *pfVar8;
  long lVar9;
  float *pfVar10;
  undefined4 *puVar11;
  float *pfVar12;
  int iVar13;
  ulong uVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  
  iVar3 = param_7 >> 1;
  uVar14 = (ulong)(long)param_6 >> 2;
  if (param_7 != 1) {
    iVar13 = (int)uVar14;
    if (iVar3 < 1) {
      FUN_0029fc4c(0x3ff0000000000000,param_3,param_4,param_7,param_8,param_9,param_10,param_11,
                   param_7,param_14,0);
      pfVar8 = param_5 + iVar13;
      pfVar7 = param_12 + 2;
      *param_5 = *param_4 * *param_12 * DAT_002a0168;
    }
    else {
      lVar9 = 0;
      uVar6 = (ulong)(long)param_2 >> 2;
      puVar11 = (undefined4 *)(param_3 + (long)param_7 * 4);
      uVar5 = (uint)uVar6;
      do {
        *(float *)(param_3 + lVar9 * 4) = *param_1;
        lVar9 = lVar9 + 1;
        puVar1 = (undefined4 *)
                 ((long)param_1 +
                 (-((ulong)(long)param_2 >> 0x21 & 1) & 0xfffffffc00000000 |
                 (uVar6 & 0xffffffff) << 2));
        param_1 = (float *)((long)param_1 +
                           (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                           (ulong)(uVar5 << 1) << 2));
        puVar11 = puVar11 + -1;
        *puVar11 = *puVar1;
      } while ((int)lVar9 < iVar3);
                    /* try { // try from 002a0008 to 003a009b has its CatchHandler @ 002a01f0 */
      FUN_0029fc4c(0x3ff0000000000000,param_3,param_4,param_7,param_8,param_9,param_10,param_11,
                   param_7,param_14,0);
      uVar14 = -((ulong)(long)param_6 >> 0x21 & 1) & 0xfffffffc00000000 | (uVar14 & 0xffffffff) << 2
      ;
      pfVar8 = (float *)((long)param_5 + uVar14);
      pfVar7 = param_12 + 2;
      *param_5 = *param_4 * *param_12 * DAT_002a0168;
      if (1 < iVar3) {
        param_5 = param_5 + (param_7 + -1) * iVar13;
        pfVar4 = pfVar7;
        pfVar10 = param_4 + 1;
        pfVar12 = pfVar8;
        do {
          fVar15 = pfVar4[1];
          pfVar2 = pfVar4 + 2;
          fVar17 = pfVar10[1];
          fVar16 = *pfVar4;
          fVar18 = *pfVar10;
          *pfVar12 = fVar16 * fVar18 - fVar15 * fVar17;
          pfVar12 = (float *)((long)pfVar12 + uVar14);
          *param_5 = -(fVar15 * fVar18) - fVar16 * fVar17;
          param_5 = (float *)((long)param_5 - uVar14);
          pfVar4 = pfVar2;
          pfVar10 = pfVar10 + 2;
        } while (pfVar2 != param_12 + ((ulong)(iVar3 - 2) + 2) * 2);
        lVar9 = (ulong)(iVar3 - 2) + 1;
        pfVar8 = (float *)((long)pfVar8 + lVar9 * uVar14);
        pfVar7 = pfVar7 + lVar9 * 2;
      }
    }
    *pfVar8 = param_4[(long)param_7 + -1] * *pfVar7;
    return;
  }
  *param_5 = *param_1;
                    /* try { // try from 002a010c to 003a010f has its CatchHandler @ 002a0238 */
  return;
}


==================================================================

### FUNC 002a0170 (4164 bytes) name=FUN_002a0170

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002a0170(double param_1,double *param_2,double *param_3,uint param_4,int param_5,
                 uint *param_6,uint *param_7,double *param_8,uint param_9,long param_10,
                 uint param_11)

{
  double *pdVar1;
  double *pdVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  undefined1 uVar10;
  double *pdVar11;
  double *pdVar12;
  uint *puVar13;
  double *pdVar14;
  undefined8 *puVar15;
  double *pdVar16;
  double *pdVar17;
  double *pdVar18;
  uint uVar19;
  int iVar20;
  double *pdVar21;
  double *pdVar22;
  ulong uVar23;
  double *pdVar24;
  double *pdVar25;
  double *pdVar26;
  double *pdVar27;
  uint uVar28;
  int iVar29;
  double *pdVar30;
  uint uVar31;
  long lVar32;
  long lVar33;
  ulong uVar34;
  double *pdVar35;
  double *pdVar36;
  uint uVar37;
  uint uVar38;
  ulong uVar39;
  long lVar40;
  int iVar41;
  ulong uVar42;
  int iVar43;
  double dVar44;
  double dVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  double dVar49;
  double dVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  double dVar55;
  double dVar56;
  double dVar57;
  double dVar58;
  double dVar59;
  double dVar60;
  double dVar61;
  double dVar62;
  double dVar63;
  double dVar64;
  double dVar65;
  double dVar66;
  double dVar67;
  long lVar68;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 002a0180 to 003a0183 has its CatchHandler @ 0029fe8c */
  uVar4 = param_11 & 1;
  uVar39 = (ulong)param_9;
  if (param_9 == param_4) {
    uVar42 = 1;
  }
  else {
                    /* try { // try from 002a01d0 to 003a01d3 has its CatchHandler @ 002a01f0 */
    if (param_9 == param_4 * 2) {
                    /* try { // try from 002a0fe0 to 003a0fe3 has its CatchHandler @ 002a1020 */
      uVar42 = 2;
    }
    else {
      uVar28 = 0;
      if (param_4 != 0) {
        uVar28 = (int)param_9 / (int)param_4;
      }
      uVar42 = (ulong)uVar28;
    }
  }
                    /* try { // try from 002a01dc to 003a01df has its CatchHandler @ 0029fe8c */
  uVar28 = (uint)uVar42;
  if (param_3 == param_2) {
    if ((param_11 >> 8 & 1) == 0) {
                    /* try { // try from 002a0ff0 to 003a0ff3 has its CatchHandler @ 002a106c */
      uVar19 = *param_6;
                    /* catch() { ... } // from try @ 002a0ec8 with catch @ 002a0ff8
                       catch() { ... } // from try @ 002a0fb0 with catch @ 002a0ff8 */
      if (uVar19 != param_6[(long)param_5 + -1]) {
        local_10 = 0;
        local_8 = 0;
        puVar15 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1b);
        uVar10 = DAT_00465aaa;
        uVar9 = DAT_00465aa8;
        uVar8 = _LAB_00465a98;
        uVar7 = DAT_00465a90;
                    /* try { // try from 002a101c to 003a101f has its CatchHandler @ 002a0240 */
                    /* catch() { ... } // from try @ 002a03ec with catch @ 002a1020
                       catch() { ... } // from try @ 002a0fe0 with catch @ 002a1020 */
        puVar15[2] = DAT_00465aa0;
        *(undefined2 *)(puVar15 + 3) = uVar9;
        *(undefined1 *)((long)puVar15 + 0x1a) = uVar10;
        *puVar15 = uVar7;
        puVar15[1] = uVar8;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::DFT(const cv::Complex<_Tp>*, cv::Complex<_Tp>*, int, int, const int*, const int*, const cv::Complex<_Tp>*, int, const void*, cv::Complex<_Tp>*, int, double) [with T = double]"
                  ,"/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0x266);
                    /* try { // try from 002a1068 to 003a106b has its CatchHandler @ 002a0240 */
                    /* catch() { ... } // from try @ 002a04ec with catch @ 002a106c
                       catch() { ... } // from try @ 002a0ff0 with catch @ 002a106c */
        cv::String::deallocate((String *)&local_10);
        uVar19 = *param_6;
      }
      if (param_5 == 1) {
                    /* catch() { ... } // from try @ 002a0514 with catch @ 002a10e4
                       catch() { ... } // from try @ 002a0a3c with catch @ 002a10e4
                       catch() { ... } // from try @ 002a0f64 with catch @ 002a10e4
                       catch() { ... } // from try @ 002a0fd0 with catch @ 002a10e4 */
        if (((param_4 & 3) == 0) && (iVar41 = (int)param_4 / 2, 0 < iVar41)) {
          pdVar16 = param_3 + 2;
          pdVar11 = param_3 + (long)iVar41 * 2 + 2;
          iVar29 = 0;
          do {
            uVar38 = *param_7;
            dVar47 = *pdVar16;
                    /* catch() { ... } // from try @ 002a0568 with catch @ 002a1108
                       catch() { ... } // from try @ 002a09c0 with catch @ 002a1108
                       catch() { ... } // from try @ 002a0f58 with catch @ 002a1108 */
            uVar42 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar38 << 4;
            pdVar12 = (double *)((long)param_3 + uVar42 + (long)iVar41 * 0x10);
            dVar45 = pdVar16[1];
            dVar44 = pdVar12[1];
            *pdVar16 = *pdVar12;
            pdVar16[1] = dVar44;
            *(double *)((long)param_3 + uVar42 + (long)iVar41 * 0x10) = dVar47;
            pdVar12[1] = dVar45;
            if (iVar29 < (int)uVar38) {
              pdVar12 = (double *)((long)param_3 + uVar42);
                    /* catch() { ... } // from try @ 002a06cc with catch @ 002a1130
                       catch() { ... } // from try @ 002a094c with catch @ 002a1130
                       catch() { ... } // from try @ 002a0f4c with catch @ 002a1130 */
              dVar47 = pdVar16[-2];
              pdVar25 = (double *)((long)param_3 + uVar42 + 0x10 + (long)iVar41 * 0x10);
              dVar45 = pdVar16[-1];
              dVar44 = pdVar12[1];
              pdVar16[-2] = *pdVar12;
              pdVar16[-1] = dVar44;
              *(double *)((long)param_3 + uVar42) = dVar47;
              pdVar12[1] = dVar45;
              dVar47 = *pdVar11;
                    /* catch() { ... } // from try @ 002a0748 with catch @ 002a1154
                       catch() { ... } // from try @ 002a08bc with catch @ 002a1154
                       catch() { ... } // from try @ 002a0c5c with catch @ 002a1154 */
              dVar45 = pdVar11[1];
              dVar44 = pdVar25[1];
              *pdVar11 = *pdVar25;
              pdVar11[1] = dVar44;
              *(double *)((long)param_3 + uVar42 + 0x10 + (long)iVar41 * 0x10) = dVar47;
              pdVar25[1] = dVar45;
            }
            iVar29 = iVar29 + 2;
            param_7 = (uint *)((long)param_7 +
                              (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                              (ulong)(uVar28 << 1) << 2));
            pdVar16 = pdVar16 + 4;
                    /* catch() { ... } // from try @ 002a0804 with catch @ 002a1178 */
            pdVar11 = pdVar11 + 4;
          } while (iVar29 < iVar41);
        }
      }
      else if (0 < (int)param_4) {
        uVar28 = 0;
        pdVar16 = param_3;
        do {
          uVar38 = *param_7;
          if ((int)uVar28 < (int)uVar38) {
            uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar38 << 4;
            pdVar11 = (double *)((long)param_3 + uVar23);
            dVar47 = *pdVar16;
                    /* catch() { ... } // from try @ 002a04f4 with catch @ 002a10a8
                       catch() { ... } // from try @ 002a0ab0 with catch @ 002a10a8
                       catch() { ... } // from try @ 002a0f70 with catch @ 002a10a8
                       catch() { ... } // from try @ 002a0fc0 with catch @ 002a10a8 */
            dVar45 = pdVar16[1];
            dVar44 = pdVar11[1];
            *pdVar16 = *pdVar11;
            pdVar16[1] = dVar44;
            *(double *)((long)param_3 + uVar23) = dVar47;
            pdVar11[1] = dVar45;
          }
          uVar28 = uVar28 + 1;
          param_7 = (uint *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2))
          ;
          pdVar16 = pdVar16 + 2;
        } while (uVar28 != param_4);
      }
    }
    else {
      uVar19 = *param_6;
    }
                    /* try { // try from 002a0f64 to 003a0f67 has its CatchHandler @ 002a10e4 */
    if (uVar4 != 0) {
                    /* try { // try from 002a0f70 to 003a0f73 has its CatchHandler @ 002a10a8 */
      if ((int)param_4 < 2) {
        iVar41 = 0;
      }
      else {
                    /* try { // try from 002a0f7c to 003a0f7f has its CatchHandler @ 002a11a0 */
        uVar28 = param_4 - 2 >> 1;
        pdVar16 = param_3 + 1;
        do {
          pdVar11 = pdVar16 + 4;
          pdVar16[2] = -pdVar16[2];
          *pdVar16 = -*pdVar16;
          pdVar16 = pdVar11;
                    /* try { // try from 002a0fb0 to 003a0fb3 has its CatchHandler @ 002a0ff8 */
        } while (pdVar11 != param_3 + (ulong)uVar28 * 4 + 5);
        iVar41 = (uVar28 + 1) * 2;
      }
                    /* try { // try from 002a0fc0 to 003a0fc3 has its CatchHandler @ 002a10a8 */
      if (iVar41 < (int)param_4) {
                    /* try { // try from 002a0fd0 to 003a0fd3 has its CatchHandler @ 002a10e4 */
        param_3[(long)(int)param_4 * 2 + -1] = -param_3[(long)(int)param_4 * 2 + -1];
      }
    }
  }
  else {
                    /* try { // try from 002a01e8 to 003a01eb has its CatchHandler @ 002a0238 */
    if (uVar4 == 0) {
      if ((int)param_4 < 2) {
        iVar41 = 0;
      }
      else {
        uVar19 = param_4 - 2 >> 1;
                    /* try { // try from 002a0ef4 to 003a0ef7 has its CatchHandler @ 002a0240 */
        pdVar16 = param_3 + 2;
        do {
          uVar38 = *param_7;
          iVar41 = *(int *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2));
          param_7 = (uint *)((long)param_7 +
                            (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                            (ulong)(uVar28 << 1) << 2));
          dVar44 = (param_2 + (long)(int)uVar38 * 2)[1];
          pdVar16[-2] = param_2[(long)(int)uVar38 * 2];
          pdVar16[-1] = dVar44;
          dVar44 = (param_2 + (long)iVar41 * 2)[1];
          pdVar11 = pdVar16 + 4;
          *pdVar16 = param_2[(long)iVar41 * 2];
          pdVar16[1] = dVar44;
          pdVar16 = pdVar11;
        } while (pdVar11 != param_3 + (ulong)uVar19 * 4 + 6);
        iVar41 = (uVar19 + 1) * 2;
      }
      if (iVar41 < (int)param_4) {
                    /* try { // try from 002a0f4c to 003a0f4f has its CatchHandler @ 002a1130 */
        uVar19 = *param_6;
        dVar44 = (param_2 + (long)(int)param_4 * 2 + -2)[1];
        param_3[(long)(int)param_4 * 2 + -2] = param_2[(long)(int)param_4 * 2 + -2];
        (param_3 + (long)(int)param_4 * 2 + -2)[1] = dVar44;
                    /* try { // try from 002a0f58 to 003a0f5b has its CatchHandler @ 002a1108 */
        goto LAB_002a0280;
      }
    }
    else {
                    /* catch() { ... } // from try @ 002a0008 with catch @ 002a01f0
                       catch() { ... } // from try @ 002a01d0 with catch @ 002a01f0 */
      if ((int)param_4 < 2) {
        uVar42 = 0;
      }
      else {
        uVar19 = param_4 - 2 >> 1;
        pdVar16 = param_3 + 1;
        do {
          uVar5 = *param_7;
          pdVar11 = pdVar16 + 4;
          uVar38 = *(uint *)((long)param_7 + (-(uVar42 >> 0x1f) & 0xfffffffc00000000 | uVar42 << 2))
          ;
          param_7 = (uint *)((long)param_7 +
                            (-(ulong)((uVar28 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                            (ulong)(uVar28 << 1) << 2));
                    /* try { // try from 002a0234 to 003a0237 has its CatchHandler @ 0029fe8c */
                    /* catch() { ... } // from try @ 002a010c with catch @ 002a0238
                       catch() { ... } // from try @ 002a01e8 with catch @ 002a0238 */
          uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar38 << 4;
                    /* catch() { ... } // from try @ 002a0290 with catch @ 002a0240
                       catch() { ... } // from try @ 002a0bb4 with catch @ 002a0240
                       catch() { ... } // from try @ 002a0ef4 with catch @ 002a0240
                       catch() { ... } // from try @ 002a101c with catch @ 002a0240
                       catch() { ... } // from try @ 002a1068 with catch @ 002a0240 */
          dVar44 = param_2[(long)(int)uVar5 * 2 + 1];
          pdVar16[-1] = param_2[(long)(int)uVar5 * 2];
          *pdVar16 = -dVar44;
          dVar44 = *(double *)((long)param_2 + uVar23 + 8);
          pdVar16[1] = *(double *)((long)param_2 + uVar23);
          pdVar16[2] = -dVar44;
          pdVar16 = pdVar11;
        } while (pdVar11 != param_3 + (ulong)uVar19 * 4 + 5);
        uVar42 = (ulong)((uVar19 + 1) * 2);
      }
      if ((int)uVar42 < (int)param_4) {
        uVar42 = -(uVar42 >> 0x1f) & 0xfffffff000000000 | uVar42 << 4;
        dVar44 = param_2[(long)(int)param_4 * 2 + -1];
        uVar19 = *param_6;
        *(double *)((long)param_3 + uVar42) = param_2[(long)(int)param_4 * 2 + -2];
        *(double *)((long)param_3 + uVar42 + 8) = -dVar44;
        goto LAB_002a0280;
      }
    }
    uVar19 = *param_6;
  }
LAB_002a0280:
  if ((uVar19 & 1) == 0) {
                    /* try { // try from 002a0290 to 003a02ef has its CatchHandler @ 002a0240 */
    if (3 < (int)uVar19) {
      cv::checkHardwareSupport(4);
      uVar19 = *param_6;
    }
    uVar28 = uVar19 & 1;
    uVar23 = 1;
    uVar38 = 4;
    if (3 < (int)uVar19) {
      do {
        iVar29 = (int)uVar39;
        iVar41 = iVar29 + 3;
        if (-1 < iVar29) {
          iVar41 = iVar29;
        }
        uVar5 = iVar41 >> 2;
        uVar39 = (ulong)uVar5;
        if (0 < (int)param_4) {
          uVar37 = (uint)uVar23;
          lVar40 = uVar23 * 0x10;
          uVar42 = -(ulong)(uVar37 >> 0x1e) & 0xfffffff000000000 | (ulong)(uVar37 << 1) << 4;
          pdVar16 = param_3 + 1;
          iVar41 = 0;
          pdVar11 = param_3;
          do {
            pdVar12 = (double *)((long)pdVar11 + uVar42);
            dVar53 = *(double *)((long)pdVar16 + lVar40 + uVar42);
            dVar60 = *(double *)((long)pdVar11 + uVar42) + pdVar12[uVar23 * 2];
            dVar56 = *pdVar11 + pdVar11[uVar23 * 2];
            dVar57 = *(double *)((long)pdVar16 + uVar42) + dVar53;
            dVar55 = *pdVar16 + pdVar16[uVar23 * 2];
            dVar45 = *pdVar11 - pdVar11[uVar23 * 2];
            dVar53 = *(double *)((long)pdVar16 + uVar42) - dVar53;
            dVar47 = pdVar12[uVar23 * 2] - *(double *)((long)pdVar11 + uVar42);
            dVar44 = *pdVar16 - pdVar16[uVar23 * 2];
            *pdVar11 = dVar60 + dVar56;
            *pdVar16 = dVar57 + dVar55;
            *(double *)((long)pdVar11 + uVar42) = dVar56 - dVar60;
            *(double *)((long)pdVar16 + uVar42) = dVar55 - dVar57;
            pdVar11[uVar23 * 2] = dVar53 + dVar45;
            pdVar16[uVar23 * 2] = dVar47 + dVar44;
            pdVar12[uVar23 * 2] = dVar45 - dVar53;
            *(double *)((long)pdVar16 + lVar40 + uVar42) = dVar44 - dVar47;
            if (1 < uVar37) {
              uVar31 = 1;
              pdVar35 = pdVar12;
              pdVar36 = (double *)(uVar42 + lVar40 + (long)pdVar11);
              pdVar18 = pdVar12 + uVar23 * -2;
              pdVar25 = param_8;
              pdVar26 = param_8;
              pdVar30 = param_8;
              do {
                pdVar30 = (double *)
                          ((long)pdVar30 +
                          (-(ulong)(uVar5 * 3 >> 0x1f) & 0xfffffff000000000 |
                          (ulong)(uVar5 * 3) << 4));
                pdVar26 = (double *)
                          ((long)pdVar26 +
                          (-(ulong)(uVar5 >> 0x1f) & 0xfffffff000000000 | uVar39 << 4));
                pdVar25 = (double *)
                          ((long)pdVar25 +
                          (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffff000000000 |
                          (ulong)(uVar5 * 2) << 4));
                pdVar17 = pdVar18 + 2;
                pdVar14 = pdVar35 + 2;
                pdVar24 = pdVar36 + 2;
                pdVar21 = pdVar11 + 2;
                uVar31 = uVar31 + 1;
                    /* try { // try from 002a03ec to 003a0473 has its CatchHandler @ 002a1020 */
                dVar55 = *pdVar17 * *pdVar25 - pdVar18[3] * pdVar25[1];
                dVar47 = pdVar35[3] * *pdVar26 + pdVar26[1] * *pdVar14;
                dVar53 = *pdVar25 * pdVar18[3] + pdVar25[1] * *pdVar17;
                dVar56 = *pdVar14 * *pdVar26 - pdVar26[1] * pdVar35[3];
                dVar45 = pdVar36[3] * *pdVar30 + pdVar30[1] * *pdVar24;
                dVar44 = *pdVar24 * *pdVar30 - pdVar30[1] * pdVar36[3];
                dVar60 = dVar55 + *pdVar21;
                dVar57 = dVar53 + pdVar11[3];
                dVar58 = dVar47 + dVar45;
                dVar61 = dVar56 + dVar44;
                dVar47 = dVar47 - dVar45;
                dVar44 = dVar44 - dVar56;
                dVar55 = *pdVar21 - dVar55;
                dVar53 = pdVar11[3] - dVar53;
                *pdVar21 = dVar61 + dVar60;
                pdVar11[3] = dVar58 + dVar57;
                *pdVar14 = dVar60 - dVar61;
                pdVar35[3] = dVar57 - dVar58;
                *pdVar17 = dVar47 + dVar55;
                pdVar18[3] = dVar44 + dVar53;
                *pdVar24 = dVar55 - dVar47;
                pdVar36[3] = dVar53 - dVar44;
                pdVar11 = pdVar21;
                pdVar35 = pdVar14;
                pdVar36 = pdVar24;
                pdVar18 = pdVar17;
              } while (uVar31 != uVar37);
            }
            iVar41 = iVar41 + uVar38;
            pdVar11 = (double *)((long)pdVar12 + uVar42);
            pdVar16 = (double *)((long)pdVar16 + uVar42 * 2);
          } while (iVar41 < (int)param_4);
        }
        uVar23 = (ulong)uVar38;
        uVar38 = uVar38 * 4;
      } while ((int)uVar38 <= (int)uVar19);
    }
    uVar38 = (uint)uVar23;
                    /* try { // try from 002a04ec to 003a04ef has its CatchHandler @ 002a106c */
                    /* try { // try from 002a04f4 to 003a050f has its CatchHandler @ 002a10a8 */
    while (uVar42 = uVar23, (int)uVar38 < (int)uVar19) {
      uVar37 = (uint)uVar42;
      uVar38 = uVar37 * 2;
      uVar23 = (ulong)uVar38;
      uVar5 = (int)uVar39 / 2;
      uVar39 = (ulong)uVar5;
      if (0 < (int)param_4) {
        uVar42 = -(uVar42 >> 0x1f) & 0xfffffff000000000 | uVar42 << 4;
                    /* try { // try from 002a0514 to 003a052f has its CatchHandler @ 002a10e4 */
        uVar34 = -(ulong)((uVar37 & 0x7fffffff) >> 0x1e) & 0xfffffff000000000 | uVar23 << 4;
        pdVar11 = (double *)((long)param_3 + uVar42);
        pdVar16 = param_3 + 3;
        iVar41 = 0;
        do {
          dVar45 = pdVar16[-3];
          dVar53 = *pdVar11;
          dVar44 = pdVar16[-2];
          dVar47 = pdVar11[1];
          pdVar16[-3] = dVar45 + dVar53;
          pdVar16[-2] = dVar44 + dVar47;
          *pdVar11 = dVar45 - dVar53;
          pdVar11[1] = dVar44 - dVar47;
                    /* try { // try from 002a0568 to 003a066b has its CatchHandler @ 002a1108 */
          if (1 < (int)uVar37) {
            pdVar12 = pdVar16;
            pdVar25 = param_8;
            do {
              pdVar25 = (double *)
                        ((long)pdVar25 +
                        (-(ulong)(uVar5 >> 0x1f) & 0xfffffff000000000 | uVar39 << 4));
              dVar44 = *(double *)((long)pdVar12 + (uVar42 - 8));
              dVar53 = pdVar12[-1];
              dVar47 = dVar44 * *pdVar25 - *(double *)((long)pdVar12 + uVar42) * pdVar25[1];
              dVar44 = dVar44 * pdVar25[1] + *(double *)((long)pdVar12 + uVar42) * *pdVar25;
              dVar45 = *pdVar12;
              pdVar12[-1] = dVar47 + dVar53;
              *pdVar12 = dVar44 + dVar45;
              *(double *)((long)pdVar12 + (uVar42 - 8)) = dVar53 - dVar47;
              *(double *)((long)pdVar12 + uVar42) = dVar45 - dVar44;
              pdVar12 = pdVar12 + 2;
            } while (pdVar12 != pdVar16 + (ulong)(uVar37 - 2) * 2 + 2);
          }
          iVar41 = iVar41 + uVar38;
          pdVar11 = (double *)((long)pdVar11 + uVar34);
          pdVar16 = (double *)((long)pdVar16 + uVar34);
        } while (iVar41 < (int)param_4);
      }
    }
  }
  else {
    uVar28 = 1;
    uVar42 = 1;
  }
  dVar60 = DAT_002a1200;
  dVar57 = DAT_002a11f8;
  dVar56 = DAT_002a11f0;
  dVar55 = DAT_002a11e8;
  dVar53 = _LAB_002a11e0;
  dVar47 = DAT_002a11d8;
  dVar45 = DAT_002a11d0;
  dVar44 = DAT_002a11c8;
  uVar28 = uVar28 ^ 1;
  if ((int)uVar28 < param_5) {
    puVar13 = param_6 + (int)uVar28;
    pdVar16 = (double *)(param_10 + 8);
    do {
      uVar19 = *puVar13;
      uVar37 = (uint)uVar42;
      uVar38 = uVar19 * uVar37;
      uVar5 = 0;
      if (uVar19 != 0) {
        uVar5 = (int)uVar39 / (int)uVar19;
      }
      if (uVar19 == 3) {
        if (0 < (int)param_4) {
          uVar23 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar38 << 4;
          uVar42 = -(uVar42 >> 0x1f) & 0xfffffff000000000 | uVar42 << 4;
          pdVar11 = param_3 + 1;
          iVar41 = 0;
          uVar39 = -(ulong)((uVar37 & 0x7fffffff) >> 0x1e) & 0xfffffff000000000 |
                   (ulong)(uVar37 << 1) << 4;
                    /* try { // try from 002a0a3c to 003a0a3f has its CatchHandler @ 002a10e4 */
          pdVar12 = param_3;
          do {
            dVar48 = *(double *)((long)pdVar12 + uVar42) + *(double *)((long)pdVar12 + uVar39);
            dVar62 = *(double *)((long)pdVar11 + uVar42) + *(double *)((long)pdVar11 + uVar39);
            dVar59 = *pdVar11;
            dVar46 = *pdVar12 - dVar48 * 0.5;
            dVar51 = dVar59 - dVar62 * 0.5;
            dVar61 = *(double *)((long)pdVar11 + uVar42) - *(double *)((long)pdVar11 + uVar39);
            dVar58 = *(double *)((long)pdVar12 + uVar39) - *(double *)((long)pdVar12 + uVar42);
            *pdVar12 = dVar48 + *pdVar12;
            *pdVar11 = dVar62 + dVar59;
            *(double *)((long)pdVar12 + uVar42) = dVar46 + dVar44 * dVar61;
            *(double *)((long)pdVar11 + uVar42) = dVar51 + dVar44 * dVar58;
            *(double *)((long)pdVar12 + uVar39) = dVar46 - dVar44 * dVar61;
            *(double *)((long)pdVar11 + uVar39) = dVar51 - dVar44 * dVar58;
            if (1 < (int)uVar37) {
              pdVar25 = pdVar11 + 1;
              pdVar30 = pdVar11 + 2;
                    /* try { // try from 002a0ab0 to 003a0ab3 has its CatchHandler @ 002a10a8 */
              pdVar35 = param_8;
              pdVar36 = param_8;
              do {
                pdVar36 = (double *)
                          ((long)pdVar36 +
                          (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffff000000000 |
                          (ulong)(uVar5 << 1) << 4));
                pdVar35 = (double *)
                          ((long)pdVar35 +
                          (-(ulong)(uVar5 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar5 << 4));
                dVar61 = *(double *)((long)pdVar25 + uVar42) * *pdVar35 -
                         *(double *)((long)pdVar30 + uVar42) * pdVar35[1];
                dVar58 = *(double *)((long)pdVar25 + uVar39) * *pdVar36 -
                         *(double *)((long)pdVar30 + uVar39) * pdVar36[1];
                dVar59 = *pdVar35 * *(double *)((long)pdVar30 + uVar42) +
                         pdVar35[1] * *(double *)((long)pdVar25 + uVar42);
                dVar62 = *pdVar36 * *(double *)((long)pdVar30 + uVar39) +
                         pdVar36[1] * *(double *)((long)pdVar25 + uVar39);
                dVar46 = *pdVar30;
                dVar51 = dVar61 + dVar58;
                dVar58 = dVar58 - dVar61;
                dVar61 = dVar59 + dVar62;
                dVar59 = dVar59 - dVar62;
                dVar48 = *pdVar25 - dVar51 * 0.5;
                dVar62 = dVar46 - dVar61 * 0.5;
                *pdVar25 = dVar51 + *pdVar25;
                *pdVar30 = dVar61 + dVar46;
                *(double *)((long)pdVar25 + uVar42) = dVar48 + dVar44 * dVar59;
                *(double *)((long)pdVar30 + uVar42) = dVar62 + dVar44 * dVar58;
                *(double *)((long)pdVar25 + uVar39) = dVar48 - dVar44 * dVar59;
                pdVar25 = pdVar25 + 2;
                *(double *)((long)pdVar30 + uVar39) = dVar62 - dVar44 * dVar58;
                pdVar30 = pdVar30 + 2;
              } while (pdVar12 + (ulong)(uVar37 - 2) * 2 + 5 != pdVar30);
            }
            pdVar12 = (double *)((long)pdVar12 + uVar23);
            pdVar11 = (double *)((long)pdVar11 + uVar23);
            iVar41 = iVar41 + uVar38;
          } while (iVar41 < (int)param_4);
        }
      }
      else if (uVar19 == 5) {
        if (0 < (int)param_4) {
          lVar40 = (long)(int)(uVar37 << 1);
          uVar39 = -(uVar42 >> 0x1f) & 0xfffffff000000000 | uVar42 << 4;
          lVar68 = lVar40 * 0x10;
          iVar41 = 0;
          pdVar11 = param_3;
          do {
            if (0 < (int)uVar37) {
              pdVar36 = pdVar11 + 1;
              pdVar18 = pdVar11;
              pdVar25 = param_8;
              pdVar30 = param_8;
              pdVar35 = param_8;
              pdVar12 = param_8;
              do {
                pdVar26 = pdVar12 + 1;
                    /* try { // try from 002a0c5c to 003a0c5f has its CatchHandler @ 002a1154 */
                pdVar17 = pdVar25 + 1;
                pdVar14 = pdVar30 + 1;
                pdVar24 = pdVar35 + 1;
                dVar62 = *(double *)((long)pdVar36 + uVar39 + lVar68);
                dVar46 = *pdVar12;
                pdVar12 = pdVar12 + (long)(int)uVar5 * 2;
                dVar48 = *pdVar25;
                pdVar25 = pdVar25 + (long)(int)(uVar5 << 2) * 2;
                dVar52 = *pdVar30;
                pdVar30 = pdVar30 + (long)(int)(uVar5 * 3) * 2;
                dVar51 = *pdVar35;
                pdVar35 = pdVar35 + (long)(int)(uVar5 * 2) * 2;
                dVar58 = *(double *)((long)pdVar18 + uVar39 + lVar68);
                dVar64 = *(double *)((long)pdVar18 + uVar39) * dVar46 -
                         *(double *)((long)pdVar36 + uVar39) * *pdVar26;
                dVar50 = pdVar18[lVar40 * 4] * dVar48 - pdVar36[lVar40 * 4] * *pdVar17;
                dVar59 = dVar58 * dVar52 - dVar62 * *pdVar14;
                dVar61 = pdVar18[lVar40 * 2] * dVar51 - pdVar36[lVar40 * 2] * *pdVar24;
                dVar51 = dVar51 * pdVar36[lVar40 * 2] + *pdVar24 * pdVar18[lVar40 * 2];
                dVar63 = dVar46 * *(double *)((long)pdVar36 + uVar39) +
                         *pdVar26 * *(double *)((long)pdVar18 + uVar39);
                dVar48 = dVar48 * pdVar36[lVar40 * 4] + *pdVar17 * pdVar18[lVar40 * 4];
                dVar58 = dVar52 * dVar62 + *pdVar14 * dVar58;
                dVar54 = *pdVar36;
                dVar49 = dVar64 + dVar50;
                dVar52 = dVar59 + dVar61;
                dVar46 = dVar63 + dVar48;
                dVar62 = dVar58 + dVar51;
                dVar63 = dVar63 - dVar48;
                dVar66 = dVar49 + dVar52;
                dVar58 = dVar58 - dVar51;
                dVar67 = dVar46 + dVar62;
                dVar64 = dVar64 - dVar50;
                dVar50 = *pdVar18 - dVar66 * 0.25;
                dVar59 = dVar59 - dVar61;
                dVar51 = dVar54 - dVar67 * 0.25;
                dVar48 = dVar63 + dVar58;
                dVar49 = dVar49 - dVar52;
                dVar46 = dVar46 - dVar62;
                dVar61 = dVar64 + dVar59;
                dVar65 = dVar48 * dVar47 - dVar58 * dVar56;
                dVar62 = dVar50 + dVar60 * dVar49;
                dVar52 = dVar61 * dVar55 - dVar59 * dVar57;
                dVar59 = dVar51 + dVar60 * dVar46;
                dVar58 = dVar63 * dVar45 + dVar47 * dVar48;
                dVar50 = dVar50 - dVar60 * dVar49;
                dVar51 = dVar51 - dVar60 * dVar46;
                dVar61 = dVar64 * dVar53 + dVar55 * dVar61;
                *pdVar18 = *pdVar18 + dVar66;
                *pdVar36 = dVar54 + dVar67;
                *(double *)((long)pdVar18 + uVar39) = dVar65 + dVar62;
                *(double *)((long)pdVar36 + uVar39) = dVar52 + dVar59;
                pdVar18[lVar40 * 4] = dVar62 - dVar65;
                pdVar36[lVar40 * 4] = dVar59 - dVar52;
                pdVar18[lVar40 * 2] = dVar58 + dVar50;
                pdVar36[lVar40 * 2] = dVar61 + dVar51;
                pdVar26 = pdVar36 + 2;
                *(double *)((long)pdVar18 + uVar39 + lVar68) = dVar50 - dVar58;
                *(double *)((long)pdVar36 + uVar39 + lVar68) = dVar51 - dVar61;
                pdVar36 = pdVar26;
                pdVar18 = pdVar18 + 2;
              } while (pdVar11 + (ulong)(uVar37 - 1) * 2 + 3 != pdVar26);
            }
            iVar41 = iVar41 + uVar38;
            pdVar11 = pdVar11 + (long)(int)uVar38 * 2;
          } while (iVar41 < (int)param_4);
        }
      }
      else {
        iVar41 = (int)(uVar19 - 1) / 2;
        uVar31 = 0;
        if (uVar19 != 0) {
          uVar31 = (int)param_9 / (int)uVar19;
        }
        pdVar11 = (double *)(param_10 + (long)iVar41 * 0x10);
        if (0 < (int)param_4) {
          lVar40 = (long)(int)uVar37;
          iVar29 = 0;
                    /* try { // try from 002a06cc to 003a06cf has its CatchHandler @ 002a1130 */
          uVar39 = -(ulong)(uVar38 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar38 << 4;
          uVar42 = -(ulong)(-uVar37 >> 0x1f) & 0xfffffff000000000 | (ulong)-uVar37 << 4;
          pdVar12 = (double *)(param_10 + (ulong)(iVar41 - 1) * 0x10 + 0x18);
          lVar68 = NEON_shl((long)(int)(uVar5 * uVar19) + (long)(int)-uVar5,4);
          pdVar25 = param_3;
          do {
            if (0 < (int)uVar37) {
              lVar33 = 0;
              lVar32 = 0;
              uVar19 = 0;
                    /* try { // try from 002a0748 to 003a07bf has its CatchHandler @ 002a1154 */
              pdVar35 = pdVar25 + lVar40 * 2;
              pdVar36 = (double *)((long)pdVar25 + uVar39 + lVar40 * -0x10);
              pdVar30 = pdVar25;
              pdVar18 = param_8;
              do {
                dVar59 = *pdVar30;
                dVar62 = pdVar30[1];
                dVar58 = dVar62;
                dVar61 = dVar59;
                if (uVar19 == 0) {
                    /* try { // try from 002a0b84 to 003a0b87 has its CatchHandler @ 002a11a0 */
                  if (0 < iVar41) {
                    pdVar26 = pdVar35;
                    pdVar17 = pdVar36;
                    pdVar14 = pdVar16;
                    pdVar24 = pdVar11 + 1;
                    do {
                      dVar46 = *pdVar26;
                      dVar50 = *pdVar17;
                      dVar48 = pdVar26[1];
                      pdVar26 = pdVar26 + lVar40 * 2;
                      dVar49 = pdVar17[1];
                    /* try { // try from 002a0bb4 to 003a0c13 has its CatchHandler @ 002a0240 */
                      pdVar17 = (double *)((long)pdVar17 + uVar42);
                      dVar52 = dVar46 + dVar50;
                      dVar51 = dVar48 + dVar49;
                      pdVar14[-1] = dVar52;
                      pdVar21 = pdVar14 + 2;
                      *pdVar14 = dVar48 - dVar49;
                      pdVar24[-1] = dVar46 - dVar50;
                      *pdVar24 = dVar51;
                      dVar61 = dVar61 + dVar52;
                      dVar58 = dVar58 + dVar51;
                      pdVar14 = pdVar21;
                      pdVar24 = pdVar24 + 2;
                    } while (pdVar12 != pdVar21);
                    goto LAB_002a0804;
                  }
                }
                else if (0 < iVar41) {
                  pdVar14 = pdVar35;
                  pdVar17 = pdVar36;
                  pdVar26 = pdVar18;
                  pdVar21 = pdVar16;
                  pdVar27 = pdVar11 + 1;
                  pdVar24 = param_8;
                  do {
                    pdVar24 = (double *)((long)pdVar24 + lVar32);
                    pdVar22 = pdVar14 + 1;
                    pdVar1 = pdVar17 + 1;
                    pdVar2 = pdVar26 + 1;
                    dVar52 = *pdVar26;
                    pdVar26 = (double *)((long)pdVar26 + lVar33);
                    dVar51 = *pdVar17;
                    pdVar17 = (double *)((long)pdVar17 + uVar42);
                    dVar48 = *pdVar14;
                    pdVar14 = pdVar14 + lVar40 * 2;
                    dVar49 = dVar48 * *pdVar24 - *pdVar22 * pdVar24[1];
                    dVar50 = dVar51 * dVar52 - *pdVar1 * *pdVar2;
                    dVar46 = *pdVar24 * *pdVar22 + pdVar24[1] * dVar48;
                    dVar48 = dVar52 * *pdVar1 + *pdVar2 * dVar51;
                    dVar52 = dVar49 + dVar50;
                    dVar51 = dVar46 + dVar48;
                    pdVar21[-1] = dVar52;
                    dVar61 = dVar61 + dVar52;
                    pdVar22 = pdVar21 + 2;
                    *pdVar21 = dVar46 - dVar48;
                    pdVar27[-1] = dVar49 - dVar50;
                    *pdVar27 = dVar51;
                    dVar58 = dVar58 + dVar51;
                    pdVar21 = pdVar22;
                    pdVar27 = pdVar27 + 2;
                  } while (pdVar22 != pdVar12);
LAB_002a0804:
                  iVar43 = 1;
                  *pdVar30 = dVar61;
                  pdVar30[1] = dVar58;
                  pdVar26 = pdVar35;
                  pdVar17 = pdVar36;
                  uVar3 = uVar31;
                  do {
                    iVar20 = 0;
                    pdVar14 = pdVar11;
                    pdVar24 = pdVar16;
                    dVar58 = dVar62;
                    dVar61 = dVar59;
                    dVar48 = dVar62;
                    dVar51 = dVar59;
                    uVar6 = uVar3;
                    do {
                    /* try { // try from 002a0804 to 003a084b has its CatchHandler @ 002a1178 */
                      uVar23 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar6 << 4;
                      iVar20 = iVar20 + 1;
                      dVar52 = *(double *)((long)param_8 + uVar23 + 8);
                      uVar6 = (uVar3 + uVar6) -
                              (-(uint)((int)param_9 <= (int)(uVar3 + uVar6)) & param_9);
                      dVar49 = dVar52 * *pdVar24;
                      dVar52 = dVar52 * *pdVar14;
                      dVar46 = *(double *)((long)param_8 + uVar23);
                      dVar61 = dVar61 + dVar49 + pdVar24[-1] * dVar46;
                      dVar51 = dVar51 + (dVar46 * pdVar24[-1] - dVar49);
                      dVar58 = dVar58 + (dVar46 * pdVar14[1] - dVar52);
                      dVar48 = dVar48 + dVar52 + pdVar14[1] * dVar46;
                      pdVar14 = pdVar14 + 2;
                      pdVar24 = pdVar24 + 2;
                    } while (iVar20 < iVar41);
                    iVar43 = iVar43 + 1;
                    uVar3 = uVar3 + uVar31;
                    *pdVar26 = dVar51;
                    pdVar26[1] = dVar48;
                    pdVar26 = pdVar26 + lVar40 * 2;
                    /* try { // try from 002a08bc to 003a08bf has its CatchHandler @ 002a1154 */
                    *pdVar17 = dVar61;
                    pdVar17[1] = dVar58;
                    pdVar17 = (double *)((long)pdVar17 + uVar42);
                  } while (iVar43 <= iVar41);
                }
                uVar19 = uVar19 + 1;
                pdVar30 = pdVar30 + 2;
                pdVar35 = pdVar35 + 2;
                pdVar36 = pdVar36 + 2;
                pdVar18 = (double *)((long)pdVar18 + lVar68);
                lVar33 = lVar33 + (long)(int)-uVar5 * 0x10;
                lVar32 = lVar32 + (long)(int)uVar5 * 0x10;
              } while (uVar19 != uVar37);
            }
            pdVar25 = (double *)((long)pdVar25 + uVar39);
            iVar29 = iVar29 + uVar38;
          } while (iVar29 < (int)param_4);
        }
      }
      uVar39 = (ulong)uVar5;
      puVar13 = puVar13 + 1;
      uVar42 = (ulong)uVar38;
    } while (puVar13 != param_6 + (long)(int)uVar28 + 1 + (ulong)((param_5 + -1) - uVar28));
  }
                    /* try { // try from 002a094c to 003a094f has its CatchHandler @ 002a1130 */
  if (param_1 == 1.0) {
    if (uVar4 != 0) {
      if ((int)param_4 < 2) {
        iVar41 = 0;
                    /* try { // try from 002a0ec8 to 003a0ecb has its CatchHandler @ 002a0ff8 */
      }
      else {
        uVar4 = param_4 - 2 >> 1;
        pdVar16 = param_3 + 1;
        do {
          pdVar11 = pdVar16 + 4;
          pdVar16[2] = -pdVar16[2];
          *pdVar16 = -*pdVar16;
          pdVar16 = pdVar11;
        } while (pdVar11 != param_3 + (ulong)uVar4 * 4 + 5);
        iVar41 = (uVar4 + 1) * 2;
      }
      if (iVar41 < (int)param_4) {
        param_3[(long)(int)param_4 * 2 + -1] = -param_3[(long)(int)param_4 * 2 + -1];
      }
    }
  }
  else {
    dVar44 = param_1;
    if (uVar4 != 0) {
      dVar44 = -param_1;
    }
    if (0 < (int)param_4) {
      uVar4 = (param_4 - 2 >> 1) + 1;
      uVar28 = uVar4 * 2;
      uVar39 = (ulong)uVar28;
      if (param_4 == 1) {
                    /* catch() { ... } // from try @ 002a0b84 with catch @ 002a11a0
                       catch() { ... } // from try @ 002a0f7c with catch @ 002a11a0 */
        uVar39 = 0;
      }
      else {
        uVar19 = 0;
        pdVar16 = param_3;
        do {
          uVar19 = uVar19 + 1;
                    /* try { // try from 002a09c0 to 003a09c3 has its CatchHandler @ 002a1108 */
          *pdVar16 = param_1 * *pdVar16;
          pdVar16[1] = dVar44 * pdVar16[1];
          pdVar16[2] = param_1 * pdVar16[2];
          pdVar16[3] = dVar44 * pdVar16[3];
          pdVar16 = pdVar16 + 4;
        } while (uVar19 < uVar4);
        if (param_4 == uVar28) {
          return;
        }
      }
      uVar39 = -(uVar39 >> 0x1f) & 0xfffffff000000000 | uVar39 << 4;
      *(double *)((long)param_3 + uVar39) = *(double *)((long)param_3 + uVar39) * param_1;
      *(double *)((long)param_3 + uVar39 + 8) = dVar44 * *(double *)((long)param_3 + uVar39 + 8);
    }
  }
  return;
}


==================================================================

### FUNC 002a1208 (20 bytes) name=FUN_002a1208

void FUN_002a1208(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
  FUN_002a0170();
  return;
}


==================================================================

### FUNC 002a121c (1500 bytes) name=FUN_002a121c

void FUN_002a121c(double param_1,double *param_2,double *param_3,uint param_4,undefined8 param_5,
                 int *param_6,int *param_7,long param_8,undefined8 param_9,undefined8 param_10,
                 uint param_11)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  ulong uVar5;
  long lVar6;
  uint *puVar7;
  double *pdVar8;
  long lVar9;
  double *pdVar10;
  uint uVar11;
  int iVar12;
  double *pdVar13;
  int *piVar14;
  ulong uVar15;
  int iVar16;
  uint *puVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  
                    /* try { // try from 002a1228 to 003a122b has its CatchHandler @ 002a11e0 */
                    /* try { // try from 002a1244 to 003a1247 has its CatchHandler @ 002a152c */
  if ((param_11 >> 9 & 1) == 0) {
    dVar18 = *param_2;
    dVar25 = 0.0;
  }
  else {
    dVar18 = *param_2;
    dVar25 = param_2[1];
    param_2 = param_2 + 1;
    *param_2 = dVar18;
  }
  if (param_4 == 1) {
    *param_3 = param_1 * dVar18;
    goto LAB_002a14d8;
  }
  if (param_4 == 2) {
    dVar19 = param_2[1];
                    /* try { // try from 002a1754 to 003a179b has its CatchHandler @ 002a1534 */
    param_3[1] = param_1 * (dVar18 - dVar19);
    *param_3 = param_1 * (dVar19 + dVar18);
    goto LAB_002a14d8;
  }
  iVar1 = (int)(param_4 + 1) >> 1;
  if ((param_4 & 1) != 0) {
    *param_3 = dVar18;
                    /* try { // try from 002a1520 to 003a1523 has its CatchHandler @ 002a11e0 */
                    /* catch() { ... } // from try @ 002a1284 with catch @ 002a1524
                       catch() { ... } // from try @ 002a12e0 with catch @ 002a1524
                       catch() { ... } // from try @ 002a14cc with catch @ 002a1524 */
    param_3[1] = 0.0;
                    /* catch() { ... } // from try @ 002a1244 with catch @ 002a152c
                       catch() { ... } // from try @ 002a13bc with catch @ 002a152c
                       catch() { ... } // from try @ 002a1488 with catch @ 002a152c */
    if (1 < iVar1) {
                    /* catch() { ... } // from try @ 002a1568 with catch @ 002a1534
                       catch() { ... } // from try @ 002a1754 with catch @ 002a1534
                       catch() { ... } // from try @ 002a17fc with catch @ 002a1534 */
      puVar7 = (uint *)(param_7 + (int)param_4);
      puVar17 = (uint *)(param_7 + ((long)(int)param_4 - (ulong)(iVar1 - 2)) + -1);
      pdVar10 = param_2 + 1;
      do {
        param_7 = param_7 + 1;
        iVar1 = *param_7;
        dVar19 = pdVar10[1];
        puVar7 = puVar7 + -1;
        dVar18 = *pdVar10;
                    /* try { // try from 002a1568 to 003a156b has its CatchHandler @ 002a1534 */
        uVar5 = -(ulong)(*puVar7 >> 0x1f) & 0xfffffff000000000 | (ulong)*puVar7 << 4;
        param_3[(long)iVar1 * 2] = dVar18;
        param_3[(long)iVar1 * 2 + 1] = -dVar19;
                    /* try { // try from 002a1584 to 003a1587 has its CatchHandler @ 002a1808 */
        *(double *)((long)param_3 + uVar5) = dVar18;
        *(double *)((long)param_3 + uVar5 + 8) = dVar19;
        pdVar10 = pdVar10 + 2;
      } while (puVar7 != puVar17);
    }
    FUN_002a0170(0x3ff0000000000000,param_3,param_3,(ulong)param_4,param_5,param_6);
                    /* try { // try from 002a15c4 to 003a15c7 has its CatchHandler @ 002a1800 */
    *param_3 = *param_3 * param_1;
    if (1 < (int)param_4) {
      uVar4 = param_4 - 2 >> 1;
      uVar3 = uVar4 + 1;
      pdVar10 = param_3 + 2;
      pdVar8 = param_3 + 1;
                    /* try { // try from 002a1618 to 003a161b has its CatchHandler @ 002a17ac */
      if ((pdVar10 < param_3 + (ulong)uVar3 * 2 + 1 && pdVar8 < param_3 + (ulong)uVar3 * 4 + 2) ||
         (uVar3 < 6)) {
        do {
          dVar18 = pdVar10[2];
          pdVar13 = pdVar10 + 4;
          *pdVar8 = param_1 * *pdVar10;
          pdVar8[1] = param_1 * dVar18;
          pdVar8 = pdVar8 + 2;
          pdVar10 = pdVar13;
        } while (pdVar13 != param_3 + (ulong)uVar4 * 4 + 6);
      }
      else {
                    /* try { // try from 002a1620 to 003a166f has its CatchHandler @ 002a1800 */
        uVar4 = (uVar4 - 2 >> 1) + 1;
        if (param_4 - 2 < 4) {
          uVar5 = 1;
                    /* catch() { ... } // from try @ 002a1618 with catch @ 002a17ac */
        }
        else {
          uVar11 = 0;
          do {
            dVar18 = *pdVar10;
            dVar24 = pdVar10[2];
            dVar19 = pdVar10[4];
            dVar20 = pdVar10[6];
            pdVar10 = pdVar10 + 8;
            uVar11 = uVar11 + 1;
            *pdVar8 = param_1 * dVar18;
            pdVar8[1] = param_1 * dVar24;
            pdVar8[2] = param_1 * dVar19;
            pdVar8[3] = param_1 * dVar20;
            pdVar8 = pdVar8 + 4;
          } while (uVar11 < uVar4);
          uVar5 = (ulong)(uVar4 * 4 + 1);
          if (uVar4 * 2 == uVar3) goto LAB_002a14d8;
        }
        uVar4 = (uint)uVar5;
        uVar15 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
        uVar5 = -(ulong)((uVar4 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                (ulong)(uVar4 << 1) << 3;
        uVar3 = uVar4 + 2;
        dVar18 = *(double *)((long)param_3 + uVar5 + 0x10);
        *(double *)((long)param_3 + uVar15) = param_1 * *(double *)((long)param_3 + uVar5);
        *(double *)((long)param_3 + uVar15 + 8) = param_1 * dVar18;
        if ((int)uVar3 < (int)param_4) {
          uVar15 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
          dVar18 = *(double *)((long)param_3 + uVar5 + 0x30);
                    /* try { // try from 002a16e0 to 003a16e3 has its CatchHandler @ 002a1808 */
          uVar4 = uVar4 + 4;
          *(double *)((long)param_3 + uVar15) = param_1 * *(double *)((long)param_3 + uVar5 + 0x20);
          *(double *)((long)param_3 + uVar15 + 8) = param_1 * dVar18;
          if ((int)uVar4 < (int)param_4) {
            uVar15 = -(ulong)(uVar4 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar4 << 3;
            dVar18 = *(double *)((long)param_3 + uVar5 + 0x50);
            *(double *)((long)param_3 + uVar15) =
                 param_1 * *(double *)((long)param_3 + uVar5 + 0x40);
            *(double *)((long)param_3 + uVar15 + 8) = param_1 * dVar18;
          }
        }
      }
    }
    goto LAB_002a14d8;
  }
  uVar5 = -(ulong)(param_4 >> 0x1f) & 0xfffffff800000000 | (ulong)param_4 << 3;
  lVar9 = (long)param_2 + uVar5;
                    /* try { // try from 002a1284 to 003a1287 has its CatchHandler @ 002a1524 */
  pdVar10 = (double *)(param_8 + 0x10);
  dVar19 = *(double *)(lVar9 + -8);
  dVar24 = param_2[1];
  *param_3 = dVar19 + dVar18;
  param_3[1] = dVar19 - dVar18;
  if (iVar1 < 3) {
    iVar16 = 2;
  }
  else {
    pdVar8 = param_2 + 2;
    pdVar13 = param_3 + 2;
    lVar6 = (long)param_3 + uVar5;
    iVar16 = 2;
    do {
      while( true ) {
        iVar12 = iVar16 >> 1;
        dVar18 = dVar24 - *(double *)(lVar9 + -0x18);
        dVar22 = *pdVar8 + *(double *)(lVar9 + -0x10);
        dVar19 = *pdVar8 - *(double *)(lVar9 + -0x10);
        dVar20 = *(double *)(lVar9 + -0x18) + dVar24;
        dVar23 = dVar22 * *pdVar10 - dVar18 * pdVar10[1];
        dVar22 = dVar22 * pdVar10[1] + *pdVar10 * dVar18;
        dVar24 = pdVar8[1];
        dVar18 = dVar20 - dVar23;
        dVar21 = -dVar19 - dVar22;
        dVar20 = dVar20 + dVar23;
        dVar19 = dVar19 - dVar22;
        if (param_2 == param_3) break;
        iVar2 = param_7[iVar12];
        iVar16 = iVar16 + 2;
        iVar12 = param_7[iVar1 - iVar12];
        pdVar10 = pdVar10 + 2;
        param_3[iVar2] = dVar18;
        param_3[(long)iVar2 + 1] = dVar21;
        lVar9 = lVar9 + -0x10;
        param_3[iVar12] = dVar20;
        pdVar8 = pdVar8 + 2;
        param_3[(long)iVar12 + 1] = dVar19;
        pdVar13 = pdVar13 + 2;
        lVar6 = lVar6 + -0x10;
        if (iVar1 <= iVar16) goto LAB_002a1390;
      }
      iVar16 = iVar16 + 2;
      pdVar10 = pdVar10 + 2;
      *pdVar13 = dVar18;
      pdVar13[1] = dVar21;
      lVar9 = lVar9 + -0x10;
                    /* try { // try from 002a12d8 to 003a12db has its CatchHandler @ 002a14d4 */
      *(double *)(lVar6 + -0x10) = dVar20;
      pdVar8 = pdVar8 + 2;
                    /* try { // try from 002a12e0 to 003a133b has its CatchHandler @ 002a1524 */
      *(double *)(lVar6 + -8) = dVar19;
      pdVar13 = pdVar13 + 2;
      lVar6 = lVar6 + -0x10;
    } while (iVar16 < iVar1);
LAB_002a1390:
    iVar16 = (iVar1 - 3U & 0xfffffffe) + 4;
  }
  iVar12 = (int)param_5;
  if (iVar1 < iVar16) {
    iVar16 = *param_6;
    *param_6 = iVar16 >> 1;
    uVar3 = (uint)(iVar16 >> 1 == 1);
    iVar12 = iVar12 - uVar3;
    if (uVar3 == 0) goto LAB_002a13e4;
    lVar9 = 4;
LAB_002a13e8:
    piVar14 = (int *)((long)param_6 + lVar9);
  }
  else {
    dVar18 = param_2[iVar1] + param_2[iVar1];
    if (param_2 == param_3) {
                    /* try { // try from 002a13bc to 003a13bf has its CatchHandler @ 002a152c */
      iVar16 = *param_6;
      param_3[iVar1] = dVar24 + dVar24;
      param_3[(long)iVar1 + 1] = dVar18;
      *param_6 = iVar16 >> 1;
      uVar3 = (uint)(iVar16 >> 1 == 1);
      iVar12 = iVar12 - uVar3;
      if (uVar3 == 0) {
LAB_002a13e4:
        lVar9 = 0;
        goto LAB_002a13e8;
      }
      piVar14 = param_6 + 1;
    }
    else {
      iVar2 = param_7[iVar1];
      iVar16 = *param_6;
      param_3[iVar2 << 1] = dVar24 + dVar24;
      param_3[(long)(iVar2 << 1) + 1] = dVar18;
      uVar3 = (uint)(iVar16 >> 1 == 1);
      iVar12 = iVar12 - uVar3;
      *param_6 = iVar16 >> 1;
      if (uVar3 == 0) goto LAB_002a13e4;
      piVar14 = param_6 + 1;
                    /* try { // try from 002a17a4 to 003a17a7 has its CatchHandler @ 002a1808 */
    }
  }
  FUN_002a0170(0x3ff0000000000000,param_3,param_3,iVar1,iVar12,piVar14);
  *param_6 = *param_6 << 1;
  if (0 < (int)param_4) {
                    /* try { // try from 002a1430 to 003a147f has its CatchHandler @ 002a11e0 */
    uVar4 = param_4 - 1 >> 1;
    uVar3 = (uVar4 - 1 >> 1) + 1;
    dVar18 = -param_1;
    if (param_4 - 1 < 2) {
      uVar5 = 0;
    }
    else {
      uVar11 = 0;
      pdVar10 = param_3;
      do {
        uVar11 = uVar11 + 1;
                    /* try { // try from 002a1488 to 003a148b has its CatchHandler @ 002a152c */
        *pdVar10 = param_1 * *pdVar10;
        pdVar10[1] = dVar18 * pdVar10[1];
        pdVar10[2] = param_1 * pdVar10[2];
        pdVar10[3] = dVar18 * pdVar10[3];
        pdVar10 = pdVar10 + 4;
      } while (uVar11 < uVar3);
      uVar5 = (ulong)(uVar3 * 4);
      if (uVar3 * 2 == uVar4 + 1) goto LAB_002a14d8;
    }
    uVar5 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
                    /* try { // try from 002a14cc to 003a14cf has its CatchHandler @ 002a1524 */
    *(double *)((long)param_3 + uVar5) = *(double *)((long)param_3 + uVar5) * param_1;
                    /* catch() { ... } // from try @ 002a12d8 with catch @ 002a14d4 */
    *(double *)((long)param_3 + uVar5 + 8) = dVar18 * *(double *)((long)param_3 + uVar5 + 8);
  }
LAB_002a14d8:
  if ((param_11 >> 9 & 1) != 0) {
    *param_2 = dVar25;
  }
  return;
}


==================================================================

### FUNC 002a17f8 (20 bytes) name=FUN_002a17f8

void FUN_002a17f8(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
                    /* try { // try from 002a17fc to 003a17ff has its CatchHandler @ 002a1534 */
                    /* catch() { ... } // from try @ 002a15c4 with catch @ 002a1800
                       catch() { ... } // from try @ 002a1620 with catch @ 002a1800 */
                    /* catch() { ... } // from try @ 002a1584 with catch @ 002a1808
                       catch() { ... } // from try @ 002a16e0 with catch @ 002a1808
                       catch() { ... } // from try @ 002a17a4 with catch @ 002a1808 */
  FUN_002a121c();
  return;
}


==================================================================

### FUNC 002a1810 (500 bytes) name=FUN_002a1810

void FUN_002a1810(double *param_1,int param_2,double *param_3,long param_4,double *param_5,
                 int param_6,ulong param_7,undefined4 param_8,undefined8 param_9,undefined8 param_10
                 ,undefined8 param_11,double *param_12,undefined8 param_13,undefined8 param_14)

{
  long lVar1;
  double *pdVar2;
  int iVar3;
  long lVar4;
  undefined8 *puVar5;
  double *pdVar6;
  uint uVar7;
  ulong uVar8;
  int iVar9;
  double *pdVar10;
  double *pdVar11;
  double *pdVar12;
  ulong uVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  
  iVar9 = (int)param_7;
  uVar13 = (ulong)(long)param_2 >> 3;
  iVar3 = iVar9 >> 1;
  if (iVar9 == 1) {
    *param_5 = *param_1;
    return;
  }
  uVar8 = -((ulong)(long)param_2 >> 0x22 & 1) & 0xfffffff800000000 | (uVar13 & 0xffffffff) << 3;
  *param_3 = (*param_1 + *param_1) * *param_12 * DAT_002a1a08;
  if (iVar3 < 2) {
    uVar13 = -(param_7 >> 0x1f & 1) & 0xfffffff800000000 | (param_7 & 0xffffffff) << 3;
    *(double *)((long)param_3 + (uVar13 - 8)) =
         (*(double *)((long)param_1 + uVar8) + *(double *)((long)param_1 + uVar8)) * param_12[2];
    FUN_002a121c(0x3ff0000000000000,param_3,param_4,param_7 & 0xffffffff,param_8,param_9,param_10,
                 param_11,param_7 & 0xffffffff,param_14,0);
    if (iVar3 < 1) {
      return;
    }
  }
  else {
    pdVar11 = param_1 + (iVar9 + -1) * (int)uVar13;
    pdVar6 = param_3 + 1;
    pdVar10 = param_12 + 2;
    pdVar12 = (double *)((long)param_1 + uVar8);
    do {
      dVar15 = *pdVar10;
      pdVar2 = pdVar10 + 2;
      dVar16 = *pdVar11;
      dVar17 = *pdVar12;
      pdVar11 = (double *)((long)pdVar11 - uVar8);
      pdVar12 = (double *)((long)pdVar12 + uVar8);
      dVar14 = pdVar10[1];
      *pdVar6 = dVar15 * dVar17 - dVar14 * dVar16;
      pdVar6[1] = -(dVar14 * dVar17) - dVar15 * dVar16;
      pdVar6 = pdVar6 + 2;
      pdVar10 = pdVar2;
    } while (pdVar2 != param_12 + ((ulong)(iVar3 - 2) + 2) * 2);
    lVar4 = (ulong)(iVar3 - 2) + 1;
    uVar13 = -(param_7 >> 0x1f & 1) & 0xfffffff800000000 | (param_7 & 0xffffffff) << 3;
    dVar14 = *(double *)((long)((long)param_1 + uVar8) + uVar8 * lVar4);
    *(double *)((long)param_3 + (uVar13 - 8)) = (dVar14 + dVar14) * (param_12 + 2)[lVar4 * 2];
    FUN_002a121c(0x3ff0000000000000,param_3,param_4,param_7 & 0xffffffff,param_8,param_9,param_10,
                 param_11,param_7 & 0xffffffff,param_14,0);
  }
  puVar5 = (undefined8 *)(param_4 + uVar13);
  uVar13 = (ulong)(long)param_6 >> 3;
  lVar4 = 0;
  uVar7 = (uint)uVar13;
  do {
    lVar1 = lVar4 * 8;
    lVar4 = lVar4 + 1;
    *param_5 = *(double *)(param_4 + lVar1);
    puVar5 = puVar5 + -1;
    *(undefined8 *)
     ((long)param_5 +
     (-((ulong)(long)param_6 >> 0x22 & 1) & 0xfffffff800000000 | (uVar13 & 0xffffffff) << 3)) =
         *puVar5;
    param_5 = (double *)
              ((long)param_5 +
              (-(ulong)((uVar7 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
              (ulong)(uVar7 << 1) << 3));
  } while ((int)lVar4 < iVar3);
  return;
}


==================================================================

### FUNC 002a1a10 (804 bytes) name=FUN_002a1a10

void FUN_002a1a10(double param_1,double *param_2,long param_3,uint param_4,undefined8 param_5,
                 int *param_6,long param_7,double *param_8,undefined4 param_9,undefined8 param_10,
                 uint param_11)

{
  int *piVar1;
  uint uVar2;
  double *pdVar3;
  long lVar4;
  int iVar5;
  double *pdVar6;
  uint uVar7;
  double *pdVar8;
  int *piVar9;
  int iVar10;
  ulong uVar11;
  double *pdVar12;
  long lVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  
  uVar11 = (ulong)(param_11 >> 9) & 1;
  iVar10 = (int)uVar11;
  lVar13 = uVar11 * 8;
  pdVar12 = (double *)(param_3 + lVar13);
  if (param_4 == 1) {
    *(double *)(param_3 + lVar13) = *param_2 * param_1;
  }
  else {
    if (param_4 == 2) {
      dVar14 = param_1 * (*param_2 + param_2[1]);
      pdVar12[1] = param_1 * (*param_2 - param_2[1]);
      *(double *)(param_3 + lVar13) = dVar14;
      if (iVar10 == 0) {
        return;
      }
      pdVar12[-1] = dVar14;
      *(undefined8 *)(param_3 + lVar13) = 0;
      goto LAB_002a1ca8;
    }
    if ((param_4 & 1) != 0) {
      dVar14 = *param_2;
      pdVar12 = pdVar12 + -uVar11;
      pdVar12[1] = 0.0;
      *pdVar12 = param_1 * dVar14;
      if (1 < (int)param_4) {
        piVar9 = (int *)(param_7 + 4);
        pdVar6 = pdVar12 + 2;
        do {
          piVar1 = piVar9 + 1;
          pdVar3 = pdVar6 + 4;
          iVar5 = *piVar9;
          piVar9 = piVar9 + 2;
          dVar17 = param_2[*piVar1];
          dVar14 = param_2[iVar5];
          pdVar6[1] = 0.0;
          pdVar6[3] = 0.0;
          pdVar6[2] = param_1 * dVar17;
          *pdVar6 = param_1 * dVar14;
          pdVar6 = pdVar3;
        } while (pdVar3 != pdVar12 + (ulong)(param_4 - 2 >> 1) * 4 + 6);
      }
      FUN_002a0170(0x3ff0000000000000,pdVar12,pdVar12,param_4,param_5,param_6,param_7,param_8,
                   param_9,param_10,0x100);
      if (iVar10 != 0) {
        return;
      }
      pdVar12[1] = *pdVar12;
      return;
    }
    iVar5 = *param_6;
    uVar2 = (int)param_4 >> 1;
    *param_6 = iVar5 >> 1;
    uVar7 = (uint)(iVar5 >> 1 == 1);
    dVar14 = param_1 * 0.5;
    lVar4 = 4;
    if (uVar7 == 0) {
      lVar4 = 0;
    }
    FUN_002a0170(0x3ff0000000000000,param_2,pdVar12,(ulong)uVar2,(int)param_5 - uVar7,
                 (long)param_6 + lVar4);
    dVar15 = pdVar12[1];
    dVar17 = *(double *)(param_3 + lVar13);
    lVar4 = (long)(int)param_4;
    *param_6 = *param_6 << 1;
    uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
    dVar16 = param_1 * (dVar17 - dVar15);
    *(double *)(param_3 + lVar13) = param_1 * (dVar17 + dVar15);
    pdVar12[1] = dVar16;
    dVar15 = *(double *)((long)pdVar12 + uVar11);
    dVar17 = pdVar12[lVar4 + -1];
    pdVar12[lVar4 + -1] = dVar16;
    if ((int)uVar2 < 3) {
      iVar5 = 2;
    }
    else {
      pdVar6 = pdVar12 + lVar4;
      uVar7 = uVar2 - 3 >> 1;
      pdVar3 = pdVar12;
      do {
        pdVar8 = pdVar3 + 2;
        dVar21 = param_8[2];
        dVar20 = dVar14 * (pdVar6[-2] - *pdVar8);
        dVar19 = dVar14 * (pdVar3[3] + dVar17);
        dVar18 = pdVar6[-2] + *pdVar8;
        dVar16 = pdVar3[3] - dVar17;
        dVar17 = pdVar6[-3];
        dVar22 = dVar19 * dVar21 - dVar20 * param_8[3];
        dVar19 = dVar20 * dVar21 + param_8[3] * dVar19;
        pdVar3[1] = dVar22 + dVar18 * dVar14;
        pdVar6[-3] = dVar14 * dVar18 - dVar22;
        *pdVar8 = dVar19 + dVar16 * dVar14;
        pdVar6 = pdVar6 + -2;
        *pdVar6 = dVar19 - dVar16 * dVar14;
        pdVar3 = pdVar8;
        param_8 = param_8 + 2;
      } while (pdVar6 != pdVar12 + lVar4 + (ulong)uVar7 * -2 + -2);
      iVar5 = (uVar7 + 2) * 2;
    }
    if (iVar5 <= (int)uVar2) {
      *(double *)((long)pdVar12 + (uVar11 - 8)) = param_1 * dVar15;
      *(double *)((long)pdVar12 + uVar11) = -(dVar17 * param_1);
    }
  }
  if (iVar10 != 0) {
    pdVar12[-1] = *(double *)(param_3 + lVar13);
    *(undefined8 *)(param_3 + lVar13) = 0;
    if (1 < (int)param_4) {
LAB_002a1ca8:
      pdVar12[(int)param_4] = 0.0;
      return;
    }
  }
  return;
}


==================================================================

### FUNC 002a1d34 (20 bytes) name=FUN_002a1d34

void FUN_002a1d34(void)

{
  undefined8 uStack0000000000000000;
  undefined8 in_stack_00000008;
  
  uStack0000000000000000 = in_stack_00000008;
  FUN_002a1a10();
  return;
}


==================================================================

### FUNC 002a1d48 (488 bytes) name=FUN_002a1d48

void FUN_002a1d48(double *param_1,int param_2,long param_3,double *param_4,double *param_5,
                 int param_6,int param_7,undefined4 param_8,undefined8 param_9,undefined8 param_10,
                 undefined8 param_11,double *param_12,undefined8 param_13,undefined8 param_14)

{
  undefined8 *puVar1;
  double *pdVar2;
  int iVar3;
  double *pdVar4;
  uint uVar5;
  ulong uVar6;
  double *pdVar7;
  double *pdVar8;
  long lVar9;
  double *pdVar10;
  undefined8 *puVar11;
  double *pdVar12;
  int iVar13;
  ulong uVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  
  iVar3 = param_7 >> 1;
  uVar14 = (ulong)(long)param_6 >> 3;
  if (param_7 != 1) {
    iVar13 = (int)uVar14;
    if (iVar3 < 1) {
      FUN_002a1a10(0x3ff0000000000000,param_3,param_4,param_7,param_8,param_9,param_10,param_11,
                   param_7,param_14,0);
      pdVar8 = param_5 + iVar13;
      pdVar7 = param_12 + 2;
      *param_5 = *param_4 * *param_12 * DAT_002a1f30;
    }
    else {
      lVar9 = 0;
      uVar6 = (ulong)(long)param_2 >> 3;
      puVar11 = (undefined8 *)(param_3 + (long)param_7 * 8);
      uVar5 = (uint)uVar6;
      do {
        *(double *)(param_3 + lVar9 * 8) = *param_1;
        lVar9 = lVar9 + 1;
        puVar1 = (undefined8 *)
                 ((long)param_1 +
                 (-((ulong)(long)param_2 >> 0x22 & 1) & 0xfffffff800000000 |
                 (uVar6 & 0xffffffff) << 3));
        param_1 = (double *)
                  ((long)param_1 +
                  (-(ulong)((uVar5 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                  (ulong)(uVar5 << 1) << 3));
        puVar11 = puVar11 + -1;
        *puVar11 = *puVar1;
      } while ((int)lVar9 < iVar3);
      FUN_002a1a10(0x3ff0000000000000,param_3,param_4,param_7,param_8,param_9,param_10,param_11,
                   param_7,param_14,0);
      uVar14 = -((ulong)(long)param_6 >> 0x22 & 1) & 0xfffffff800000000 | (uVar14 & 0xffffffff) << 3
      ;
      pdVar8 = (double *)((long)param_5 + uVar14);
      pdVar7 = param_12 + 2;
      *param_5 = *param_4 * *param_12 * DAT_002a1f30;
      if (1 < iVar3) {
        param_5 = param_5 + (param_7 + -1) * iVar13;
        pdVar4 = pdVar7;
        pdVar10 = param_4 + 1;
        pdVar12 = pdVar8;
        do {
          dVar15 = pdVar4[1];
          pdVar2 = pdVar4 + 2;
          dVar17 = pdVar10[1];
          dVar16 = *pdVar4;
          dVar18 = *pdVar10;
          *pdVar12 = dVar16 * dVar18 - dVar15 * dVar17;
          pdVar12 = (double *)((long)pdVar12 + uVar14);
          *param_5 = -(dVar15 * dVar18) - dVar16 * dVar17;
          param_5 = (double *)((long)param_5 - uVar14);
          pdVar4 = pdVar2;
          pdVar10 = pdVar10 + 2;
        } while (pdVar2 != param_12 + ((ulong)(iVar3 - 2) + 2) * 2);
        lVar9 = (ulong)(iVar3 - 2) + 1;
        pdVar8 = (double *)((long)pdVar8 + lVar9 * uVar14);
        pdVar7 = pdVar7 + lVar9 * 2;
      }
    }
    *pdVar8 = param_4[(long)param_7 + -1] * *pdVar7;
    return;
  }
  *param_5 = *param_1;
  return;
}


==================================================================

### FUNC 002a1f40 (11456 bytes) name=dft

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int) */

void cv::dft(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4)

{
  long lVar1;
  int *piVar2;
  undefined1 *puVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  char cVar11;
  bool bVar12;
  int iVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  ulong *puVar23;
  bool bVar24;
  int iVar25;
  uint uVar26;
  int iVar27;
  undefined8 *puVar28;
  void *__dest;
  ulong uVar29;
  ulong uVar30;
  undefined8 *puVar31;
  undefined8 *puVar32;
  long lVar33;
  undefined1 (*pauVar34) [16];
  undefined4 *puVar35;
  uint *puVar36;
  uint *puVar37;
  undefined4 *puVar38;
  uint uVar39;
  uint uVar40;
  Mat *pMVar41;
  undefined4 *puVar42;
  undefined8 *puVar43;
  undefined8 *puVar44;
  uint *puVar45;
  ulong uVar46;
  int iVar47;
  uint uVar48;
  size_t __n;
  int iVar49;
  undefined1 (*pauVar50) [16];
  size_t __n_00;
  uint uVar51;
  long lVar52;
  ulong uVar53;
  long lVar54;
  undefined1 (*pauVar55) [16];
  undefined1 (*pauVar56) [16];
  uint uVar57;
  undefined8 *puVar58;
  uint uVar59;
  uint uVar60;
  undefined8 *puVar61;
  undefined8 *__src;
  uint uVar62;
  code *pcVar63;
  undefined8 uVar64;
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  undefined1 auVar67 [16];
  undefined1 auVar68 [16];
  undefined1 auVar69 [16];
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  double dVar72;
  ulong uVar73;
  undefined1 *puVar74;
  undefined8 *puVar75;
  undefined8 *local_690;
  ulong local_688;
  long local_678;
  uint local_648;
  uint local_644;
  uint local_620;
  Mat *local_610;
  int local_608;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  uint local_5c0;
  int iStack_5bc;
  undefined4 uStack_5b8;
  uint uStack_5b4;
  undefined8 *local_5b0;
  undefined8 local_5a8;
  undefined8 local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  long local_588;
  undefined4 *local_580;
  ulong *local_578;
  ulong local_570 [2];
  undefined8 local_560;
  undefined8 uStack_558;
  undefined8 *local_550;
  undefined8 uStack_548;
  undefined8 local_540;
  undefined8 uStack_538;
  undefined8 local_530;
  long lStack_528;
  uint *local_520;
  ulong *local_518;
  ulong local_510;
  ulong uStack_508;
  uint local_500;
  int local_4fc;
  uint local_4f8;
  uint local_4f4;
  undefined8 *local_4f0;
  undefined8 uStack_4e8;
  undefined8 local_4e0;
  undefined8 uStack_4d8;
  undefined8 local_4d0;
  long lStack_4c8;
  uint *local_4c0;
  ulong *local_4b8;
  ulong local_4b0;
  undefined8 local_4a8;
  uint local_4a0 [34];
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  local_418 = auStack_408;
  local_410 = 0x408;
  iVar25 = _InputArray::kind(param_1);
  if (iVar25 == 0x10000) {
    pMVar41 = *(Mat **)(param_1 + 8);
    local_580 = &uStack_5b8;
    local_578 = local_570;
    local_5c0 = *(uint *)pMVar41;
    iStack_5bc = *(int *)(pMVar41 + 4);
    uStack_5b8 = *(undefined4 *)(pMVar41 + 8);
    uStack_5b4 = *(uint *)(pMVar41 + 0xc);
    local_5b0 = *(undefined8 **)(pMVar41 + 0x10);
    local_5a8 = *(undefined8 *)(pMVar41 + 0x18);
    local_5a0 = *(undefined8 *)(pMVar41 + 0x20);
    local_598 = *(undefined8 *)(pMVar41 + 0x28);
    local_590 = *(undefined8 *)(pMVar41 + 0x30);
    local_588 = *(long *)(pMVar41 + 0x38);
    local_570[1] = 0;
    local_570[0] = 0;
    if (local_588 != 0) {
      piVar2 = (int *)(local_588 + 0x14);
      do {
        cVar11 = '\x01';
        bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar24) {
          *piVar2 = *piVar2 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (2 < *(int *)(pMVar41 + 4)) {
      iStack_5bc = 0;
      Mat::copySize((Mat *)&local_5c0,pMVar41);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_610 = (Mat *)&local_5c0;
  local_518 = &local_510;
  local_520 = (uint *)&uStack_558;
  local_560 = CONCAT44(iStack_5bc,local_5c0);
  auVar70._8_4_ = uStack_5b8;
  auVar70._0_8_ = local_560;
  auVar70._12_4_ = uStack_5b4;
  uStack_508 = 0;
  local_510 = 0;
  local_550 = local_5b0;
  uStack_548 = local_5a8;
  local_540 = local_5a0;
  uStack_538 = local_598;
  uStack_558 = auVar70._8_8_;
  local_530 = local_590;
  lStack_528 = local_588;
  if (local_588 != 0) {
    piVar2 = (int *)(local_588 + 0x14);
    do {
      cVar11 = '\x01';
      bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar24) {
        *piVar2 = *piVar2 + 1;
        cVar11 = ExclusiveMonitorsStatus();
      }
    } while (cVar11 != '\0');
  }
  if (iStack_5bc < 3) {
    local_510 = *local_578;
    uStack_508 = local_578[1];
  }
  else {
    local_560 = (ulong)local_5c0;
    Mat::copySize((Mat *)&local_560,local_610);
  }
  uVar51 = param_3 & 1;
  local_620 = 1;
  uVar39 = (uint)local_560 >> 3 & 0x1ff;
  if (uVar39 != 0) {
    local_620 = (uint)((param_3 & 0x21U) == 0x21);
  }
  uVar4 = (uint)local_560 & 7;
  uVar57 = (uint)local_560 & 0xfff;
  uVar62 = (uint)(0x88442211L >> (uVar4 << 2)) & 0xf;
  uVar8 = uVar62 * 2;
  if (1 < ((uint)local_560 & 0xff7) - 5) {
    local_5e0 = 0;
    local_5d8 = 0;
    puVar28 = (undefined8 *)String::allocate((String *)&local_5e0,0x4c);
    uVar6 = DAT_00465b38;
    uVar22 = _DAT_00465b28;
    uVar21 = _DAT_00465b20;
    uVar20 = DAT_00465b18;
    uVar19 = DAT_00465b10;
    uVar18 = DAT_00465b08;
    uVar17 = DAT_00465b00;
    uVar16 = DAT_00465af8;
    uVar64 = DAT_00465af0;
    puVar28[8] = DAT_00465b30;
    *(undefined4 *)(puVar28 + 9) = uVar6;
    *puVar28 = uVar64;
    puVar28[1] = uVar16;
    puVar28[2] = uVar17;
    puVar28[3] = uVar18;
    puVar28[4] = uVar19;
    puVar28[5] = uVar20;
    puVar28[6] = uVar21;
    puVar28[7] = uVar22;
    error(-0xd7,(String *)&local_5e0,"void cv::dft(cv::InputArray, cv::OutputArray, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0x9ca);
    String::deallocate((String *)&local_5e0);
    uVar39 = (uint)local_560 >> 3 & 0x1ff;
  }
  if (uVar51 == 0) {
    if ((uVar39 == 0) && (((uint)param_3 >> 4 & 1) != 0)) {
      uVar57 = uVar4 + 8;
    }
  }
  else if ((uVar39 == 1) && (((uint)param_3 >> 5 & 1) != 0)) {
    uVar57 = uVar4;
  }
  local_4a0[1] = *local_520;
  local_4a0[0] = local_520[1];
  _OutputArray::create(param_2,local_4a0,uVar57,0xffffffff,0,0);
  iVar25 = _InputArray::kind((_InputArray *)param_2);
  if (iVar25 == 0x10000) {
    pMVar41 = *(Mat **)(param_2 + 8);
    lStack_4c8 = *(long *)(pMVar41 + 0x38);
    local_500 = *(uint *)pMVar41;
    local_4fc = *(int *)(pMVar41 + 4);
    local_4f8 = *(uint *)(pMVar41 + 8);
    local_4f4 = *(uint *)(pMVar41 + 0xc);
    local_4f0 = *(undefined8 **)(pMVar41 + 0x10);
    uStack_4e8 = *(undefined8 *)(pMVar41 + 0x18);
    local_4e0 = *(undefined8 *)(pMVar41 + 0x20);
    uStack_4d8 = *(undefined8 *)(pMVar41 + 0x28);
    local_4d0 = *(undefined8 *)(pMVar41 + 0x30);
    local_4c0 = &local_4f8;
    local_4b8 = &local_4b0;
    local_4a8 = 0;
    local_4b0 = 0;
    if (lStack_4c8 != 0) {
      piVar2 = (int *)(lStack_4c8 + 0x14);
      do {
        cVar11 = '\x01';
        bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar24) {
          *piVar2 = *piVar2 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (*(int *)(pMVar41 + 4) < 3) {
      local_4b0 = **(ulong **)(pMVar41 + 0x48);
      local_4a8 = (*(ulong **)(pMVar41 + 0x48))[1];
    }
    else {
      local_4fc = 0;
      Mat::copySize((Mat *)&local_500,pMVar41);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar39 = uVar62;
  if (local_620 == 0) {
    uVar39 = uVar8;
  }
  if ((0 < param_4) && (uStack_558._4_4_ == 1)) {
    local_5d0 = 0;
    local_5c8 = 0;
    __dest = (void *)String::allocate((String *)&local_5d0,0xbe);
    memcpy(__dest,&DAT_00465b40,0xbe);
    error(-0xd5,(String *)&local_5d0,"void cv::dft(cv::InputArray, cv::OutputArray, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xa10);
    String::deallocate((String *)&local_5d0);
  }
  uVar57 = param_3 & 4;
  if (((uint)param_3 >> 2 & 1) == 0) {
    local_644 = uVar57;
    if (1 < (int)(uint)uStack_558) {
      if (uStack_558._4_4_ == 1) {
        if (((uint)local_560 >> 0xe & 1) == 0) {
          local_644 = uStack_558._4_4_;
        }
        else {
          local_644 = (uint)((local_500 & 0x4000) == 0);
        }
      }
      else if (1 < (int)uStack_558._4_4_) {
        local_644 = local_620 & uVar51;
      }
    }
  }
  else {
    local_644 = 0;
  }
  uVar46 = (ulong)(int)uVar8;
  __n = (size_t)(int)uVar39;
  uVar29 = uVar46 & 0x1c;
  bVar24 = uVar57 == 0;
  local_608 = uVar8 + 4;
  iVar25 = 0;
  local_648 = param_4;
  if (local_644 != 0) goto LAB_002a2934;
  if (uVar51 != 0) goto LAB_002a3190;
LAB_002a24c4:
  local_688 = uStack_558 & 0xffffffff;
  uVar57 = uStack_558._4_4_;
  if (uStack_558._4_4_ == 1) goto LAB_002a31a4;
LAB_002a24d8:
  if (local_620 == 0) {
    local_678 = (long)(int)uVar57;
    uVar60 = local_620;
  }
  else {
    local_678 = (long)(int)uVar57;
    uVar60 = uVar57 & 1;
  }
  do {
    iVar27 = 0;
    if (uVar57 != 0) goto LAB_002a2964;
LAB_002a24f4:
    iVar49 = iVar25 + -1;
    uVar40 = local_4a0[0] & 1;
    uVar26 = local_4a0[0];
LAB_002a2508:
    iVar27 = iVar27 + uVar57 * local_608;
    uVar59 = (uint)(local_4a0[iVar49] == uVar26);
    if (1 < iVar25) {
      if (uVar40 == 0) {
        uVar40 = local_4a0[1] & 1;
        uVar26 = local_4a0[1];
      }
      else {
        uVar40 = 1;
      }
    }
LAB_002a253c:
    if ((uVar40 != 0) && (5 < (int)uVar26)) {
      iVar27 = iVar27 + uVar8 + uVar26 * uVar8;
    }
    if (local_644 == 0) {
      if (((uVar59 == 0) && (local_550 == local_4f0)) || (uVar60 != 0)) goto LAB_002a256c;
LAB_002a2a4c:
      bVar12 = false;
    }
    else {
      if (uVar59 != 0) goto LAB_002a2a4c;
LAB_002a256c:
      iVar27 = iVar27 + uVar57 * uVar8;
      bVar12 = true;
    }
    uVar53 = (ulong)(iVar27 + 0x20);
    puVar74 = local_418;
    if (local_410 < uVar53) {
      if (local_418 != auStack_408) {
        if (local_418 != (undefined1 *)0x0) {
          operator_delete__(local_418);
        }
        local_410 = 0x408;
        local_418 = auStack_408;
      }
      puVar74 = auStack_408;
      if (0x408 < uVar53) {
        local_418 = operator_new__(uVar53);
        puVar74 = local_418;
        local_410 = uVar53;
      }
    }
    lVar52 = local_678 * 4;
    __n_00 = (size_t)(int)(uVar57 * uVar8);
    puVar3 = puVar74 + __n_00;
    puVar28 = (undefined8 *)((ulong)(puVar3 + lVar52 + 0xf) & 0xfffffffffffffff0);
    if ((uVar57 != 0) || ((uVar59 < uVar51 && (local_620 != 0)))) {
      FUN_0029da38(uVar57,iVar25,local_4a0,puVar3,uVar8,puVar74,(local_644 ^ 1) & local_620 & uVar51
                  );
    }
    puVar58 = local_4f0;
    puVar75 = local_550;
    if (local_644 == 0) {
      iVar27 = 0x200;
      if (((uint)local_560 >> 3 & 0x1ff) + 1 == (local_500 >> 3 & 0x1ff) + 1) {
        iVar27 = 0;
      }
      iVar49 = uVar57 * uVar39;
      uVar40 = iVar27 + uVar51;
      if (bVar12) {
        puVar75 = (undefined8 *)((long)puVar28 + __n_00);
        puVar58 = puVar28;
        if ((uVar60 <= uVar51) || ((int)uVar57 < 2)) goto LAB_002a29fc;
        uVar60 = uVar39;
        if (uVar40 >> 9 != 0) {
          if (uVar51 != 0) {
            uVar60 = 0;
            goto LAB_002a26b4;
          }
          goto LAB_002a2a10;
        }
LAB_002a26b4:
        puVar58 = puVar28;
        if (local_620 != 0) goto LAB_002a26bc;
LAB_002a2a38:
        uVar26 = 3;
        uVar59 = local_620;
      }
      else {
        puVar58 = (undefined8 *)0x0;
        puVar75 = puVar28;
LAB_002a29fc:
        puVar28 = puVar58;
        uVar60 = 0;
        if ((uVar51 != 0) || (uVar60 = 0, uVar40 >> 9 == 0)) goto LAB_002a26b4;
LAB_002a2a10:
        uVar60 = 0;
        uVar26 = uVar39;
        if ((uVar57 & 1) == 0) {
          uVar26 = uVar8;
        }
        iVar49 = iVar49 + uVar26;
        if (local_620 == 0) goto LAB_002a2a38;
LAB_002a26bc:
        uVar26 = 5;
        if (uVar51 == 0) {
          uVar26 = 4;
        }
        uVar59 = 2;
        if (uVar51 == 0) {
          uVar59 = 1;
        }
      }
      if (uVar4 == 6) {
        uVar59 = uVar26;
      }
      pcVar63 = (code *)(&PTR_FUN_004f6080)[(int)uVar59];
      if ((((int)(uint)local_688 < 2) || (!bVar24)) || ((local_620 ^ 1) < uVar51)) {
        if ((param_3 & 2U) == 0) goto LAB_002a2724;
        uVar26 = (uint)local_688;
        if (!bVar24) {
          uVar26 = 1;
        }
        dVar72 = 1.0 / (double)(int)(uVar26 * uVar57);
        if ((int)local_648 <= (int)(uint)local_688) goto LAB_002a2734;
LAB_002a3204:
        local_648 = (uint)local_688;
        if (0 < (int)(uint)local_688) goto LAB_002a273c;
        iVar27 = 0;
      }
      else {
        local_644 = 1;
LAB_002a2724:
        dVar72 = 1.0;
        if ((int)(uint)local_688 < (int)local_648) goto LAB_002a3204;
LAB_002a2734:
        if ((int)local_648 < 1) goto LAB_002a3204;
LAB_002a273c:
        lVar52 = 0;
        lVar54 = 0;
        if (puVar58 == (undefined8 *)0x0) {
          do {
            auVar71._8_8_ = 0;
            auVar71._0_8_ = dVar72;
            (*pcVar63)(auVar71,(undefined8 *)((long)local_550 + lVar54 * *local_518),
                       (undefined8 *)((long)local_4f0 + lVar54 * *local_4b8),uVar57,iVar25,local_4a0
                       ,puVar3,puVar74,uVar57,0,puVar75,uVar40);
            iVar27 = (int)lVar54 + 1;
            lVar54 = lVar54 + 1;
          } while ((int)lVar54 < (int)local_648);
        }
        else {
          do {
            auVar65._8_8_ = 0;
            auVar65._0_8_ = dVar72;
            puVar28 = (undefined8 *)((long)local_4f0 + lVar52 * *local_4b8);
            (*pcVar63)(auVar65,(undefined8 *)((long)local_550 + lVar52 * *local_518),puVar58,uVar57,
                       iVar25,local_4a0,puVar3,puVar74,uVar57,0,puVar75,uVar40);
            if (puVar28 != puVar58) {
              memcpy(puVar28,(void *)((long)puVar58 + (long)(int)uVar60),(long)iVar49);
            }
            iVar27 = (int)lVar52 + 1;
            lVar52 = lVar52 + 1;
          } while ((int)lVar52 < (int)local_648);
        }
      }
      if (iVar27 < (int)(uint)local_688) {
        lVar52 = (long)iVar27 + 1;
        lVar54 = (long)iVar27;
        for (lVar33 = lVar52;
            memset((undefined8 *)((long)local_4f0 + lVar54 * *local_4b8),0,(long)iVar49),
            lVar33 != lVar52 + (ulong)(((uint)local_688 - 1) - iVar27); lVar33 = lVar33 + 1) {
          lVar54 = lVar33;
        }
      }
      if (local_644 != 1) {
        if ((uVar51 < local_620) && ((local_500 >> 3 & 0x1ff) == 1)) {
          if ((0x88442211UL >> ((local_500 & 7) << 2) & 0xf) == 4) {
            if (0 < (int)local_648) {
              uVar29 = -(ulong)((local_4f4 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                       (ulong)((local_4f4 - 1) * 2) << 2;
              iVar25 = (int)(local_4f4 + 1) / 2;
              puVar28 = local_4f0 + 1;
              uVar51 = 0;
              do {
                if (1 < iVar25) {
                  puVar35 = (undefined4 *)((uVar29 - 8) + (long)puVar28);
                  puVar75 = puVar28;
                  do {
                    puVar38 = puVar35 + -2;
                    *puVar35 = *(undefined4 *)puVar75;
                    puVar35[1] = -*(float *)((long)puVar75 + 4);
                    puVar35 = puVar38;
                    puVar75 = puVar75 + 1;
                  } while ((undefined4 *)(uVar29 + (ulong)(iVar25 - 2) * -8 + -0x10 + (long)puVar28)
                           != puVar38);
                }
                uVar51 = uVar51 + 1;
                puVar28 = (undefined8 *)((long)puVar28 + (local_4b0 & 0xfffffffffffffffc));
              } while (uVar51 != local_648);
            }
          }
          else if (0 < (int)local_648) {
            uVar29 = -(ulong)((local_4f4 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                     (ulong)((local_4f4 - 1) * 2) << 3;
            iVar25 = (int)(local_4f4 + 1) / 2;
            puVar28 = local_4f0 + 2;
            uVar51 = 0;
            do {
              if (1 < iVar25) {
                puVar75 = (undefined8 *)((uVar29 - 0x10) + (long)puVar28);
                puVar58 = puVar28;
                do {
                  puVar43 = puVar75 + -2;
                  *puVar75 = *puVar58;
                  puVar75[1] = -(double)puVar58[1];
                  puVar75 = puVar43;
                  puVar58 = puVar58 + 2;
                } while ((undefined8 *)
                         (uVar29 + (ulong)(iVar25 - 2) * -0x10 + -0x20 + (long)puVar28) != puVar43);
              }
              uVar51 = uVar51 + 1;
              puVar28 = (undefined8 *)((long)puVar28 + (local_4b0 & 0xfffffffffffffff8));
            } while (uVar51 != local_648);
          }
        }
        goto LAB_002a3eb4;
      }
      if (lStack_4c8 != 0) {
        piVar2 = (int *)(lStack_4c8 + 0x14);
        do {
          cVar11 = '\x01';
          bVar12 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar12) {
            *piVar2 = *piVar2 + 1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
      }
      if (lStack_528 == 0) {
LAB_002a2880:
        if (0 < local_560._4_4_) goto LAB_002a28a0;
LAB_002a35fc:
        local_560 = CONCAT44(local_560._4_4_,local_500);
LAB_002a28cc:
        puVar23 = local_4b8;
        if (2 < local_4fc) goto LAB_002a3274;
        uStack_558 = CONCAT44(local_4f4,local_4f8);
        local_560 = CONCAT44(local_4fc,(uint)local_560);
        *local_518 = *local_4b8;
        local_518[1] = puVar23[1];
      }
      else {
        piVar2 = (int *)(lStack_528 + 0x14);
        do {
          iVar27 = *piVar2;
          cVar11 = '\x01';
          bVar12 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar12) {
            *piVar2 = iVar27 + -1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
        if (iVar27 != 1) goto LAB_002a2880;
        Mat::deallocate((Mat *)&local_560);
        if (local_560._4_4_ < 1) goto LAB_002a35fc;
LAB_002a28a0:
        iVar27 = 0;
        puVar36 = local_520;
        do {
          *puVar36 = 0;
          iVar27 = iVar27 + 1;
          puVar36 = puVar36 + 1;
        } while (iVar27 < local_560._4_4_);
        local_560 = CONCAT44(local_560._4_4_,local_500);
        if (local_560._4_4_ < 3) goto LAB_002a28cc;
LAB_002a3274:
        lStack_528 = 0;
        uStack_538 = 0;
        local_540 = 0;
        uStack_548 = 0;
        local_550 = (undefined8 *)0x0;
        Mat::copySize((Mat *)&local_560,(Mat *)&local_500);
      }
      uStack_538 = uStack_4d8;
      local_540 = local_4e0;
      lStack_528 = lStack_4c8;
      local_530 = local_4d0;
      uStack_548 = uStack_4e8;
      local_550 = local_4f0;
LAB_002a2934:
      uVar57 = local_4f4;
      if (uVar51 == 0) {
        uVar57 = uStack_5b4;
      }
      local_688 = (ulong)uVar57;
      local_678 = (long)(int)local_4f8;
      uVar60 = 0;
      iVar27 = local_4f8 * 2 * uVar8;
      uVar57 = local_4f8;
      if (local_4f8 == 0) goto LAB_002a24f4;
LAB_002a2964:
      if (5 < (int)uVar57) break;
      uVar59 = 1;
      iVar25 = 1;
      uVar40 = uVar57 & 1;
      local_4a0[0] = uVar57;
      iVar27 = iVar27 + uVar57 * local_608;
      uVar26 = uVar57;
      goto LAB_002a253c;
    }
    puVar43 = (undefined8 *)((long)puVar28 + __n_00);
    local_690 = (undefined8 *)((long)puVar43 + __n_00);
    puVar61 = puVar28;
    __src = puVar43;
    if (bVar12) {
      puVar61 = puVar43;
      __src = local_690;
      local_690 = (undefined8 *)((long)local_690 + __n_00);
    }
    dVar72 = 1.0;
    iVar27 = 3;
    if (uVar4 != 6) {
      iVar27 = 0;
    }
    pcVar63 = (code *)(&PTR_FUN_004f6080)[iVar27];
    if (((local_620 & uVar51) == 0) || ((int)uStack_558._4_4_ < 2)) {
      if ((param_3 & 2U) != 0) {
        dVar72 = 1.0 / (double)(int)(uVar57 * (uint)local_688);
      }
      if (local_620 == 0) {
        if ((int)(uint)local_688 < 1) goto LAB_002a3eb4;
        local_644 = 1;
        iVar27 = 0;
        goto LAB_002a2d2c;
      }
      local_644 = 1;
    }
    else {
      local_644 = 0;
    }
    uVar40 = (uint)local_688 & 1 ^ 1;
    uVar60 = (int)((uint)local_688 + 1) / 2;
    if (uVar51 == 0) {
                    /* try { // try from 002a3730 to 003a3743 has its CatchHandler @ 002a36f0 */
      memset(puVar28,0,__n_00);
      uVar53 = local_510 >> 2;
      if (uVar39 == 4) {
        if (0 < (int)uVar57) {
          uVar26 = 0;
          puVar32 = puVar75;
          puVar44 = puVar28;
          do {
            uVar26 = uVar26 + 1;
            *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
            puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
            puVar44 = (undefined8 *)((long)puVar44 + uVar29);
          } while (uVar26 != uVar57);
        }
      }
      else if (uVar39 == 8) {
        if (0 < (int)uVar57) {
          uVar26 = 0;
          puVar32 = puVar75;
          puVar44 = puVar28;
          do {
            uVar64 = *puVar32;
            uVar26 = uVar26 + 1;
            puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
            *puVar44 = uVar64;
            puVar44 = (undefined8 *)((long)puVar44 + uVar29);
          } while (uVar26 != uVar57);
        }
      }
      else if ((__n == 0x10) && (0 < (int)uVar57)) {
        uVar26 = 0;
        puVar32 = puVar75;
        puVar44 = puVar28;
        do {
          uVar26 = uVar26 + 1;
          uVar6 = *(undefined4 *)((long)puVar32 + 4);
          *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
          *(undefined4 *)((long)puVar44 + 4) = uVar6;
          puVar35 = (undefined4 *)((long)puVar32 + 0xc);
          uVar6 = *(undefined4 *)(puVar32 + 1);
          puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
          *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
          *(undefined4 *)(puVar44 + 1) = uVar6;
          puVar44 = (undefined8 *)((long)puVar44 + uVar29);
        } while (uVar26 != uVar57);
      }
      puVar75 = (undefined8 *)
                ((long)puVar75 + (long)(int)(uVar39 + (local_500 >> 3 & 0x1ff) * uVar39));
      if (uVar40 != 0) {
        memset(puVar43,0,__n_00);
                    /* try { // try from 002a37a4 to 003a3867 has its CatchHandler @ 002a3964 */
        uVar53 = local_510 >> 2;
        puVar32 = (undefined8 *)((long)puVar75 + (long)(int)(((uint)local_688 - 2) * uVar39));
        if (uVar39 == 4) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar43;
            do {
              uVar26 = uVar26 + 1;
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              puVar44 = (undefined8 *)((long)puVar44 + uVar29);
            } while (uVar26 != uVar57);
          }
        }
        else if (uVar39 == 8) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar43;
            do {
              uVar64 = *puVar32;
              uVar26 = uVar26 + 1;
              puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              *puVar44 = uVar64;
              puVar44 = (undefined8 *)((long)puVar44 + uVar29);
            } while (uVar26 != uVar57);
          }
        }
        else if ((__n == 0x10) && (0 < (int)uVar57)) {
          uVar26 = 0;
          puVar44 = puVar43;
          do {
            uVar26 = uVar26 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 4);
            *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
            *(undefined4 *)((long)puVar44 + 4) = uVar6;
            puVar35 = (undefined4 *)((long)puVar32 + 0xc);
            uVar6 = *(undefined4 *)(puVar32 + 1);
            puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
            *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
            *(undefined4 *)(puVar44 + 1) = uVar6;
            puVar44 = (undefined8 *)((long)puVar44 + uVar29);
          } while (uVar26 != uVar57);
        }
        goto LAB_002a2c34;
      }
    }
    else {
      if (((uint)local_560 >> 3 & 0x1ff) == 0) {
        uVar73 = local_510 >> 2;
        uVar53 = __n;
        if (uVar39 == 4) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar32 = local_550;
            puVar44 = puVar28;
            do {
              uVar26 = uVar26 + 1;
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              puVar44 = (undefined8 *)((long)puVar44 + 4);
            } while (uVar26 != uVar57);
          }
          iVar27 = (int)(uVar57 + 1) / 2;
          if (1 < iVar27) {
            uVar30 = -(ulong)((uVar57 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                     (ulong)((uVar57 - 1) * 2) << 2;
            puVar35 = (undefined4 *)((long)puVar28 + uVar30);
            puVar38 = (undefined4 *)((long)puVar28 + 4);
            do {
              puVar42 = puVar35 + -2;
              *puVar35 = *puVar38;
              puVar35[1] = -(float)puVar38[1];
              puVar35 = puVar42;
              puVar38 = puVar38 + 2;
            } while (puVar42 !=
                     (undefined4 *)((uVar30 - 8) + (ulong)(iVar27 - 2) * -8 + (long)puVar28));
          }
                    /* catch() { ... } // from try @ 002a37a4 with catch @ 002a3964 */
          uVar26 = uVar57;
          if ((uVar57 & 1) == 0) {
            uVar26 = uVar57 - 1;
            *(undefined4 *)((long)puVar28 + lVar52) = *(undefined4 *)((long)puVar28 + lVar52 + -4);
            *(undefined4 *)((long)puVar28 + (local_678 + 1) * 4) = 0;
          }
                    /* try { // try from 002a3988 to 003a398b has its CatchHandler @ 002a36f0 */
          if (1 < (int)uVar26) {
            uVar30 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar26 << 2;
            lVar54 = (ulong)(uVar26 - 2) + 1;
            memmove((void *)((long)puVar28 + uVar30 + 4 + lVar54 * -4),
                    (void *)((long)puVar28 + uVar30 + lVar54 * -4),lVar54 * 4);
          }
          *(undefined4 *)((long)puVar28 + 4) = 0;
          if (uVar40 != 0) {
            puVar35 = (undefined4 *)((long)puVar75 + (long)(int)(((uint)local_688 - 1) * 4));
            if (0 < (int)uVar57) {
              uVar26 = 0;
              puVar32 = puVar43;
              do {
                uVar26 = uVar26 + 1;
                *(undefined4 *)puVar32 = *puVar35;
                puVar35 = puVar35 + uVar73;
                puVar32 = (undefined8 *)((long)puVar32 + 4);
              } while (uVar26 != uVar57);
            }
            if (1 < iVar27) {
              lVar54 = (long)(int)((uVar57 - 1) * 2);
              puVar35 = (undefined4 *)((long)puVar43 + lVar54 * 4);
              puVar38 = (undefined4 *)((long)puVar43 + 4);
              do {
                puVar42 = puVar35 + -2;
                *puVar35 = *puVar38;
                puVar35[1] = -(float)puVar38[1];
                puVar35 = puVar42;
                puVar38 = puVar38 + 2;
              } while (puVar42 !=
                       (undefined4 *)((long)puVar43 + (lVar54 + (ulong)(iVar27 - 2) * -2) * 4 + -8))
              ;
            }
            uVar26 = uVar57;
            if ((uVar57 & 1) == 0) {
              uVar26 = uVar57 - 1;
              *(undefined4 *)((long)puVar43 + lVar52) = *(undefined4 *)((long)puVar43 + lVar52 + -4)
              ;
              *(undefined4 *)((long)puVar43 + (local_678 + 1) * 4) = 0;
            }
            if (1 < (int)uVar26) {
              uVar73 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar26 << 2;
              lVar52 = (ulong)(uVar26 - 2) + 1;
              memmove((void *)((long)puVar28 + __n_00 + 4 + uVar73 + lVar52 * -4),
                      (void *)((long)puVar28 + __n_00 + uVar73 + lVar52 * -4),lVar52 * 4);
            }
            *(undefined4 *)((long)puVar43 + 4) = 0;
          }
        }
        else {
          if (uVar39 == 8) {
            if (0 < (int)uVar57) {
              uVar26 = 0;
              puVar32 = local_550;
              puVar44 = puVar28;
              do {
                uVar64 = *puVar32;
                uVar26 = uVar26 + 1;
                puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
                *puVar44 = uVar64;
                puVar44 = puVar44 + 1;
              } while (uVar26 != uVar57);
            }
          }
          else if ((__n == 0x10) && (0 < (int)uVar57)) {
            uVar26 = 0;
            puVar32 = local_550;
            puVar44 = puVar28;
            do {
              uVar26 = uVar26 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              *(undefined4 *)((long)puVar44 + 4) = uVar6;
              puVar35 = (undefined4 *)((long)puVar32 + 0xc);
              uVar6 = *(undefined4 *)(puVar32 + 1);
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
              *(undefined4 *)(puVar44 + 1) = uVar6;
              puVar44 = puVar44 + 2;
            } while (uVar26 != uVar57);
          }
          iVar27 = (int)(uVar57 + 1) / 2;
          if (1 < iVar27) {
            uVar30 = -(ulong)((uVar57 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                     (ulong)((uVar57 - 1) * 2) << 3;
            puVar32 = (undefined8 *)((long)puVar28 + uVar30);
            puVar44 = puVar28 + 1;
            do {
              puVar31 = puVar32 + -2;
              *puVar32 = *puVar44;
              puVar32[1] = -(double)puVar44[1];
              puVar32 = puVar31;
              puVar44 = puVar44 + 2;
            } while (puVar31 !=
                     (undefined8 *)((uVar30 - 0x10) + (ulong)(iVar27 - 2) * -0x10 + (long)puVar28));
          }
          uVar26 = uVar57;
          if ((uVar57 & 1) == 0) {
            uVar26 = uVar57 - 1;
            puVar28[local_678] = puVar28[local_678 + -1];
            puVar28[local_678 + 1] = 0;
          }
          if (1 < (int)uVar26) {
            uVar30 = -(ulong)(uVar26 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar26 << 3;
            lVar52 = (ulong)(uVar26 - 2) + 1;
            memmove((void *)((long)puVar28 + uVar30 + 8 + lVar52 * -8),
                    (void *)((long)puVar28 + uVar30 + lVar52 * -8),lVar52 * 8);
          }
          puVar28[1] = 0;
          if (uVar40 != 0) {
            puVar32 = (undefined8 *)((long)puVar75 + (long)(int)(((uint)local_688 - 1) * uVar39));
            if (uVar39 == 8) {
              if (0 < (int)uVar57) {
                uVar26 = 0;
                puVar44 = puVar43;
                do {
                  uVar64 = *puVar32;
                  uVar26 = uVar26 + 1;
                  puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
                  *puVar44 = uVar64;
                  puVar44 = puVar44 + 1;
                } while (uVar26 != uVar57);
              }
            }
            else if ((__n == 0x10) && (0 < (int)uVar57)) {
              uVar26 = 0;
              puVar44 = puVar43;
              do {
                uVar26 = uVar26 + 1;
                uVar6 = *(undefined4 *)((long)puVar32 + 4);
                *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
                *(undefined4 *)((long)puVar44 + 4) = uVar6;
                puVar35 = (undefined4 *)((long)puVar32 + 0xc);
                uVar6 = *(undefined4 *)(puVar32 + 1);
                puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
                *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
                *(undefined4 *)(puVar44 + 1) = uVar6;
                puVar44 = puVar44 + 2;
              } while (uVar26 != uVar57);
            }
            if (1 < iVar27) {
              lVar52 = (long)(int)((uVar57 - 1) * 2);
              puVar32 = puVar43 + lVar52;
              puVar44 = puVar43 + 1;
              do {
                puVar31 = puVar32 + -2;
                *puVar32 = *puVar44;
                puVar32[1] = -(double)puVar44[1];
                puVar32 = puVar31;
                puVar44 = puVar44 + 2;
              } while (puVar31 != puVar43 + lVar52 + (ulong)(iVar27 - 2) * -2 + -2);
            }
            uVar26 = uVar57;
            if ((uVar57 & 1) == 0) {
              uVar26 = uVar57 - 1;
              puVar43[local_678] = puVar43[local_678 + -1];
              puVar43[local_678 + 1] = 0;
            }
            if (1 < (int)uVar26) {
              uVar73 = -(ulong)(uVar26 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar26 << 3;
              lVar52 = (ulong)(uVar26 - 2) + 1;
              memmove((void *)((long)puVar28 + __n_00 + 8 + uVar73 + lVar52 * -8),
                      (void *)((long)puVar28 + __n_00 + uVar73 + lVar52 * -8),lVar52 * 8);
            }
            puVar43[1] = 0;
          }
        }
      }
      else {
        uVar73 = local_510 >> 2;
        uVar53 = uVar46;
        if (uVar62 == 2) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar32 = local_550;
            puVar44 = puVar28;
            do {
              uVar26 = uVar26 + 1;
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              puVar44 = (undefined8 *)((long)puVar44 + 4);
            } while (uVar26 != uVar57);
            if (uVar40 != 0) {
              uVar26 = 0;
              puVar35 = (undefined4 *)((long)local_550 + (long)(int)(uVar60 << 2));
              puVar32 = puVar43;
              do {
                uVar26 = uVar26 + 1;
                *(undefined4 *)puVar32 = *puVar35;
                puVar35 = puVar35 + uVar73;
                puVar32 = (undefined8 *)((long)puVar32 + 4);
              } while (uVar26 != uVar57);
            }
          }
        }
        else if (uVar62 == 4) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar32 = local_550;
            puVar44 = puVar28;
            do {
              uVar64 = *puVar32;
              uVar26 = uVar26 + 1;
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              *puVar44 = uVar64;
              puVar44 = puVar44 + 1;
            } while (uVar26 != uVar57);
            if (uVar40 != 0) {
              uVar26 = 0;
              puVar32 = (undefined8 *)((long)local_550 + (long)(int)(uVar60 << 3));
              puVar44 = puVar43;
              do {
                uVar64 = *puVar32;
                uVar26 = uVar26 + 1;
                puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
                *puVar44 = uVar64;
                puVar44 = puVar44 + 1;
              } while (uVar26 != uVar57);
            }
          }
        }
        else if ((uVar46 == 0x10) && (0 < (int)uVar57)) {
          uVar26 = 0;
          puVar32 = local_550;
          puVar44 = puVar28;
          do {
            uVar26 = uVar26 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 4);
            *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
            *(undefined4 *)((long)puVar44 + 4) = uVar6;
            puVar35 = (undefined4 *)((long)puVar32 + 0xc);
            uVar6 = *(undefined4 *)(puVar32 + 1);
            puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
            *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
            *(undefined4 *)(puVar44 + 1) = uVar6;
            puVar44 = puVar44 + 2;
          } while (uVar26 != uVar57);
          if (uVar40 != 0) {
            uVar26 = 0;
            puVar35 = (undefined4 *)((long)local_550 + (long)(int)(uVar60 << 4));
            puVar32 = puVar43;
            do {
              uVar26 = uVar26 + 1;
              uVar6 = puVar35[1];
              *(undefined4 *)puVar32 = *puVar35;
              *(undefined4 *)((long)puVar32 + 4) = uVar6;
              puVar38 = puVar35 + 3;
              uVar6 = puVar35[2];
              puVar35 = puVar35 + uVar73;
              *(undefined4 *)((long)puVar32 + 0xc) = *puVar38;
              *(undefined4 *)(puVar32 + 1) = uVar6;
              puVar32 = puVar32 + 2;
            } while (uVar26 != uVar57);
          }
        }
      }
      puVar75 = (undefined8 *)((long)puVar75 + uVar53);
      if (uVar40 != 0) {
LAB_002a2c34:
        auVar66._8_8_ = 0;
        auVar66._0_8_ = dVar72;
        (*pcVar63)(auVar66,puVar43,__src,uVar57,iVar25,local_4a0,puVar3,puVar74,uVar57,0,local_690,
                   uVar51);
      }
    }
    auVar67._8_8_ = 0;
    auVar67._0_8_ = dVar72;
    (*pcVar63)(auVar67,puVar28,puVar61,uVar57,iVar25,local_4a0,puVar3,puVar74,uVar57,0,local_690,
               uVar51);
    if ((local_500 >> 3 & 0x1ff) == 0) {
      uVar53 = __n;
      if (uVar51 == 0) {
        puVar32 = memcpy((void *)((long)puVar61 + __n),puVar61,__n);
        uVar73 = local_4b0 >> 2;
        if (uVar39 == 4) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar58;
            do {
              uVar26 = uVar26 + 1;
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
              puVar32 = (undefined8 *)((long)puVar32 + 4);
            } while (uVar26 != uVar57);
          }
          if (uVar40 != 0) {
            puVar38 = memcpy((void *)((long)__src + 4),__src,4);
            uVar40 = 0;
            puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 4));
            if (0 < (int)uVar57) {
              do {
                uVar40 = uVar40 + 1;
                *puVar35 = *puVar38;
                puVar35 = (undefined4 *)((long)puVar35 + (local_4b0 & 0xfffffffffffffffc));
                puVar38 = puVar38 + 1;
              } while (uVar40 != uVar57);
            }
          }
        }
        else if (uVar39 == 8) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar58;
            do {
              uVar64 = *puVar32;
              uVar26 = uVar26 + 1;
              puVar32 = puVar32 + 1;
              *puVar44 = uVar64;
              puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
            } while (uVar26 != uVar57);
          }
          if (uVar40 != 0) {
            uVar40 = 0;
            puVar44 = __src + 1;
            *puVar44 = *__src;
            puVar32 = (undefined8 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 8));
            if (0 < (int)uVar57) {
              do {
                uVar64 = *puVar44;
                uVar40 = uVar40 + 1;
                puVar44 = puVar44 + 1;
                *puVar32 = uVar64;
                puVar32 = (undefined8 *)((long)puVar32 + (local_4b0 & 0xfffffffffffffffc));
              } while (uVar40 != uVar57);
            }
          }
        }
        else if (__n == 0x10) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar58;
            do {
              uVar26 = uVar26 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              *(undefined4 *)((long)puVar44 + 4) = uVar6;
              puVar31 = puVar32 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
              puVar32 = puVar32 + 2;
              *(undefined4 *)(puVar44 + 1) = *(undefined4 *)puVar31;
              *(undefined4 *)((long)puVar44 + 0xc) = uVar6;
              puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
            } while (uVar26 != uVar57);
          }
          if (uVar40 != 0) {
            puVar32 = __src + 2;
            *puVar32 = *__src;
            __src[3] = __src[1];
            uVar40 = 0;
            puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 0x10));
            if (0 < (int)uVar57) {
              do {
                uVar40 = uVar40 + 1;
                uVar6 = *(undefined4 *)((long)puVar32 + 4);
                *puVar35 = *(undefined4 *)puVar32;
                puVar35[1] = uVar6;
                puVar44 = puVar32 + 1;
                uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
                puVar32 = puVar32 + 2;
                puVar35[2] = *(undefined4 *)puVar44;
                puVar35[3] = uVar6;
                puVar35 = (undefined4 *)((long)puVar35 + (local_4b0 & 0xfffffffffffffffc));
              } while (uVar40 != uVar57);
            }
          }
        }
        else if (uVar40 != 0) {
          memcpy((void *)((long)__src + __n),__src,__n);
        }
      }
      else {
        uVar73 = local_4b0 >> 2;
        if (uVar39 == 4) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar44 = puVar61;
            puVar32 = puVar58;
            do {
              uVar26 = uVar26 + 1;
              *(undefined4 *)puVar32 = *(undefined4 *)puVar44;
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              puVar44 = (undefined8 *)((long)puVar44 + uVar29);
            } while (uVar26 != uVar57);
            if (uVar40 != 0) {
              uVar40 = 0;
              puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 4));
              puVar32 = __src;
              do {
                uVar40 = uVar40 + 1;
                *puVar35 = *(undefined4 *)puVar32;
                puVar35 = puVar35 + uVar73;
                puVar32 = (undefined8 *)((long)puVar32 + uVar29);
              } while (uVar40 != uVar57);
            }
          }
        }
        else if (uVar39 == 8) {
          if (0 < (int)uVar57) {
            uVar26 = 0;
            puVar32 = puVar61;
            puVar44 = puVar58;
            do {
              uVar64 = *puVar32;
              uVar26 = uVar26 + 1;
              puVar32 = (undefined8 *)((long)puVar32 + uVar29);
              *puVar44 = uVar64;
              puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
            } while (uVar26 != uVar57);
            if (uVar40 != 0) {
              uVar40 = 0;
              puVar32 = (undefined8 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 8));
              puVar44 = __src;
              do {
                uVar64 = *puVar44;
                uVar40 = uVar40 + 1;
                puVar44 = (undefined8 *)((long)puVar44 + uVar29);
                *puVar32 = uVar64;
                puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
              } while (uVar40 != uVar57);
            }
          }
        }
        else if ((__n == 0x10) && (0 < (int)uVar57)) {
          uVar26 = 0;
          puVar32 = puVar61;
          puVar44 = puVar58;
          do {
            uVar26 = uVar26 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 4);
            *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
            *(undefined4 *)((long)puVar44 + 4) = uVar6;
            puVar31 = puVar32 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
            puVar32 = (undefined8 *)((long)puVar32 + uVar29);
            *(undefined4 *)(puVar44 + 1) = *(undefined4 *)puVar31;
            *(undefined4 *)((long)puVar44 + 0xc) = uVar6;
            puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
          } while (uVar26 != uVar57);
          if (uVar40 != 0) {
            uVar40 = 0;
            puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(((uint)local_688 - 1) * 0x10));
            puVar32 = __src;
            do {
              uVar40 = uVar40 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              *puVar35 = *(undefined4 *)puVar32;
                    /* catch() { ... } // from try @ 002a3730 with catch @ 002a36f0
                       catch() { ... } // from try @ 002a3890 with catch @ 002a36f0
                       catch() { ... } // from try @ 002a3988 with catch @ 002a36f0 */
              puVar35[1] = uVar6;
              puVar44 = puVar32 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
              puVar32 = (undefined8 *)((long)puVar32 + uVar29);
              puVar35[2] = *(undefined4 *)puVar44;
              puVar35[3] = uVar6;
              puVar35 = puVar35 + uVar73;
            } while (uVar40 != uVar57);
          }
        }
      }
    }
    else {
      uVar73 = local_4b0 >> 2;
      uVar53 = uVar46;
      if (uVar62 == 2) {
        if (0 < (int)uVar57) {
          uVar26 = 0;
          puVar44 = puVar61;
          puVar32 = puVar58;
          do {
            uVar26 = uVar26 + 1;
            *(undefined4 *)puVar32 = *(undefined4 *)puVar44;
            puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
            puVar44 = (undefined8 *)((long)puVar44 + 4);
          } while (uVar26 != uVar57);
          if (uVar40 != 0) {
            uVar40 = 0;
            puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(uVar60 << 2));
            puVar32 = __src;
            do {
              uVar40 = uVar40 + 1;
              *puVar35 = *(undefined4 *)puVar32;
              puVar35 = puVar35 + uVar73;
              puVar32 = (undefined8 *)((long)puVar32 + 4);
            } while (uVar40 != uVar57);
          }
        }
      }
      else if (uVar62 == 4) {
        if (0 < (int)uVar57) {
          uVar26 = 0;
          puVar32 = puVar61;
          puVar44 = puVar58;
          do {
            uVar64 = *puVar32;
            uVar26 = uVar26 + 1;
            puVar32 = puVar32 + 1;
            *puVar44 = uVar64;
            puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
          } while (uVar26 != uVar57);
          if (uVar40 != 0) {
            uVar40 = 0;
            puVar32 = (undefined8 *)((long)puVar58 + (long)(int)(uVar60 << 3));
            puVar44 = __src;
            do {
              uVar64 = *puVar44;
              uVar40 = uVar40 + 1;
              puVar44 = puVar44 + 1;
              *puVar32 = uVar64;
              puVar32 = (undefined8 *)((long)puVar32 + uVar73 * 4);
            } while (uVar40 != uVar57);
          }
        }
      }
      else if ((uVar46 == 0x10) && (0 < (int)uVar57)) {
        uVar26 = 0;
        puVar32 = puVar61;
        puVar44 = puVar58;
        do {
          uVar26 = uVar26 + 1;
          uVar6 = *(undefined4 *)((long)puVar32 + 4);
          *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
          *(undefined4 *)((long)puVar44 + 4) = uVar6;
          puVar31 = puVar32 + 1;
          uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
          puVar32 = puVar32 + 2;
          *(undefined4 *)(puVar44 + 1) = *(undefined4 *)puVar31;
          *(undefined4 *)((long)puVar44 + 0xc) = uVar6;
          puVar44 = (undefined8 *)((long)puVar44 + uVar73 * 4);
        } while (uVar26 != uVar57);
        if (uVar40 != 0) {
          uVar40 = 0;
          puVar35 = (undefined4 *)((long)puVar58 + (long)(int)(uVar60 << 4));
          puVar32 = __src;
          do {
            uVar40 = uVar40 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 4);
            *puVar35 = *(undefined4 *)puVar32;
            puVar35[1] = uVar6;
            puVar44 = puVar32 + 1;
            uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
            puVar32 = puVar32 + 2;
            puVar35[2] = *(undefined4 *)puVar44;
            puVar35[3] = uVar6;
            puVar35 = puVar35 + uVar73;
          } while (uVar40 != uVar57);
        }
      }
    }
    if (1 < (int)uVar60) {
      iVar27 = 1;
      puVar58 = (undefined8 *)((long)puVar58 + uVar53);
      local_688._0_4_ = uVar60;
LAB_002a2d2c:
      iVar49 = uVar57 * 4;
      iVar5 = uVar57 * 2;
      lVar52 = (ulong)(iVar5 - 1U >> 1) * 8 + 0xc;
      iVar27 = iVar27 + 1;
      lVar54 = (ulong)(iVar49 - 1U >> 2) * 0x10 + 0x14;
      do {
        if (iVar27 < (int)(uint)local_688) {
          uVar53 = local_510 >> 2;
          if (uVar62 == 2) {
            if (0 < (int)uVar57) {
              lVar33 = 0;
              puVar32 = puVar75;
              do {
                uVar6 = *(undefined4 *)puVar32;
                uVar7 = *(undefined4 *)((long)puVar32 + 4);
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                *(undefined4 *)((long)puVar28 + lVar33 * 4) = uVar6;
                *(undefined4 *)((long)puVar43 + lVar33 * 4) = uVar7;
                lVar33 = lVar33 + 1;
              } while ((int)lVar33 < (int)uVar57);
            }
          }
          else if (uVar62 == 4) {
            if (0 < iVar5) {
              puVar32 = puVar75;
              puVar35 = (undefined4 *)((long)puVar28 + 4);
              puVar38 = (undefined4 *)((long)puVar43 + 4);
              do {
                uVar6 = *(undefined4 *)((long)puVar32 + 4);
                puVar35[-1] = *(undefined4 *)puVar32;
                puVar42 = puVar35 + 2;
                *puVar35 = uVar6;
                uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
                puVar38[-1] = *(undefined4 *)(puVar32 + 1);
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                *puVar38 = uVar6;
                puVar35 = puVar42;
                puVar38 = puVar38 + 2;
              } while (puVar42 != (undefined4 *)(lVar52 + (long)puVar28));
            }
          }
          else if ((uVar46 == 0x10) && (0 < iVar49)) {
            puVar32 = puVar75;
            puVar35 = (undefined4 *)((long)puVar28 + 4);
            puVar44 = puVar43;
            do {
              puVar38 = puVar35 + 4;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              puVar35[-1] = *(undefined4 *)puVar32;
              *puVar35 = uVar6;
              uVar6 = *(undefined4 *)(puVar32 + 1);
              puVar35[2] = *(undefined4 *)((long)puVar32 + 0xc);
              puVar35[1] = uVar6;
              uVar6 = *(undefined4 *)((long)puVar32 + 0x14);
              *(undefined4 *)puVar44 = *(undefined4 *)(puVar32 + 2);
              *(undefined4 *)((long)puVar44 + 4) = uVar6;
              puVar31 = puVar32 + 3;
              uVar6 = *(undefined4 *)((long)puVar32 + 0x1c);
              puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              *(undefined4 *)(puVar44 + 1) = *(undefined4 *)puVar31;
              *(undefined4 *)((long)puVar44 + 0xc) = uVar6;
              puVar35 = puVar38;
              puVar44 = puVar44 + 2;
            } while (puVar38 != (undefined4 *)(lVar54 + (long)puVar28));
          }
          auVar68._8_8_ = 0;
          auVar68._0_8_ = dVar72;
          (*pcVar63)(auVar68,puVar43,__src,uVar57,iVar25,local_4a0,puVar3,puVar74,uVar57,0,local_690
                     ,uVar51);
        }
        else {
          uVar53 = local_510 >> 2;
          if (uVar62 == 2) {
            if (0 < (int)uVar57) {
              uVar60 = 0;
              puVar32 = puVar75;
              puVar44 = puVar28;
              do {
                uVar60 = uVar60 + 1;
                *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                    /* catch() { ... } // from try @ 002a4c0c with catch @ 002a4b90
                       catch() { ... } // from try @ 002a4e38 with catch @ 002a4b90
                       catch() { ... } // from try @ 002a4e88 with catch @ 002a4b90 */
                puVar44 = (undefined8 *)((long)puVar44 + 4);
              } while (uVar60 != uVar57);
            }
          }
          else if (uVar62 == 4) {
            if (0 < (int)uVar57) {
              uVar60 = 0;
              puVar32 = puVar75;
              puVar44 = puVar28;
              do {
                uVar64 = *puVar32;
                uVar60 = uVar60 + 1;
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                *puVar44 = uVar64;
                puVar44 = puVar44 + 1;
              } while (uVar60 != uVar57);
            }
          }
          else if ((uVar46 == 0x10) && (0 < (int)uVar57)) {
            uVar60 = 0;
            puVar32 = puVar75;
            puVar44 = puVar28;
            do {
              uVar60 = uVar60 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              *(undefined4 *)((long)puVar44 + 4) = uVar6;
              puVar35 = (undefined4 *)((long)puVar32 + 0xc);
              uVar6 = *(undefined4 *)(puVar32 + 1);
              puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              *(undefined4 *)((long)puVar44 + 0xc) = *puVar35;
              *(undefined4 *)(puVar44 + 1) = uVar6;
              puVar44 = puVar44 + 2;
            } while (uVar60 != uVar57);
          }
        }
        auVar69._8_8_ = 0;
        auVar69._0_8_ = dVar72;
        (*pcVar63)(auVar69,puVar28,puVar61,uVar57,iVar25,local_4a0,puVar3,puVar74,uVar57,0,local_690
                   ,uVar51);
        if (iVar27 < (int)(uint)local_688) {
          uVar53 = local_4b0 >> 2;
          if (uVar62 == 2) {
            if (0 < (int)uVar57) {
              lVar33 = 0;
              puVar32 = puVar58;
              do {
                lVar1 = lVar33 * 4;
                uVar6 = *(undefined4 *)((long)__src + lVar33 * 4);
                lVar33 = lVar33 + 1;
                *(undefined4 *)puVar32 = *(undefined4 *)((long)puVar61 + lVar1);
                *(undefined4 *)((long)puVar32 + 4) = uVar6;
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              } while ((int)lVar33 < (int)uVar57);
            }
          }
          else if (uVar62 == 4) {
            if (0 < iVar5) {
              puVar32 = puVar58;
              puVar35 = (undefined4 *)((long)puVar61 + 4);
              puVar38 = (undefined4 *)((long)__src + 4);
              do {
                uVar6 = puVar35[-1];
                puVar42 = puVar35 + 2;
                *(undefined4 *)((long)puVar32 + 4) = *puVar35;
                *(undefined4 *)puVar32 = uVar6;
                uVar6 = puVar38[-1];
                *(undefined4 *)((long)puVar32 + 0xc) = *puVar38;
                *(undefined4 *)(puVar32 + 1) = uVar6;
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                puVar35 = puVar42;
                puVar38 = puVar38 + 2;
              } while (puVar42 != (undefined4 *)((long)puVar61 + lVar52));
            }
          }
          else if ((uVar46 == 0x10) && (0 < iVar49)) {
            puVar32 = puVar58;
            puVar35 = (undefined4 *)((long)__src + 4);
            puVar44 = puVar61;
            do {
              uVar6 = *(undefined4 *)((long)puVar44 + 4);
              puVar38 = puVar35 + 4;
              *(undefined4 *)puVar32 = *(undefined4 *)puVar44;
              *(undefined4 *)((long)puVar32 + 4) = uVar6;
              uVar6 = *(undefined4 *)(puVar44 + 1);
              *(undefined4 *)((long)puVar32 + 0xc) = *(undefined4 *)((long)puVar44 + 0xc);
              *(undefined4 *)(puVar32 + 1) = uVar6;
              uVar6 = puVar35[-1];
              *(undefined4 *)((long)puVar32 + 0x14) = *puVar35;
              *(undefined4 *)(puVar32 + 2) = uVar6;
              uVar6 = puVar35[1];
              *(undefined4 *)((long)puVar32 + 0x1c) = puVar35[2];
              *(undefined4 *)(puVar32 + 3) = uVar6;
              puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
              puVar35 = puVar38;
              puVar44 = puVar44 + 2;
            } while (puVar38 != (undefined4 *)((long)__src + lVar54));
          }
        }
        else {
          uVar53 = local_4b0 >> 2;
          if (uVar62 == 2) {
            if (0 < (int)uVar57) {
              uVar60 = 0;
              puVar44 = puVar61;
              puVar32 = puVar58;
              do {
                uVar60 = uVar60 + 1;
                *(undefined4 *)puVar32 = *(undefined4 *)puVar44;
                puVar32 = (undefined8 *)((long)puVar32 + uVar53 * 4);
                puVar44 = (undefined8 *)((long)puVar44 + 4);
              } while (uVar60 != uVar57);
            }
          }
          else if (uVar62 == 4) {
            if (0 < (int)uVar57) {
              uVar60 = 0;
              puVar32 = puVar61;
              puVar44 = puVar58;
              do {
                uVar64 = *puVar32;
                uVar60 = uVar60 + 1;
                puVar32 = puVar32 + 1;
                *puVar44 = uVar64;
                puVar44 = (undefined8 *)((long)puVar44 + uVar53 * 4);
              } while (uVar60 != uVar57);
            }
          }
          else if ((uVar46 == 0x10) && (0 < (int)uVar57)) {
            uVar60 = 0;
            puVar32 = puVar61;
            puVar44 = puVar58;
            do {
              uVar60 = uVar60 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 4);
              *(undefined4 *)puVar44 = *(undefined4 *)puVar32;
              *(undefined4 *)((long)puVar44 + 4) = uVar6;
              puVar31 = puVar32 + 1;
              uVar6 = *(undefined4 *)((long)puVar32 + 0xc);
              puVar32 = puVar32 + 2;
              *(undefined4 *)(puVar44 + 1) = *(undefined4 *)puVar31;
              *(undefined4 *)((long)puVar44 + 0xc) = uVar6;
              puVar44 = (undefined8 *)((long)puVar44 + uVar53 * 4);
            } while (uVar60 != uVar57);
          }
        }
        iVar13 = iVar27 + 1;
        iVar27 = iVar27 + 2;
        puVar75 = (undefined8 *)((long)puVar75 + (ulong)(uVar62 << 2));
        puVar58 = (undefined8 *)((long)puVar58 + (ulong)(uVar62 << 2));
      } while (iVar13 < (int)(uint)local_688);
    }
    if (local_644 != 0) {
      if (((uVar51 < local_620) && (1 < (int)uVar57)) && ((local_500 >> 3 & 0x1ff) == 1)) {
        if ((0x88442211UL >> ((local_500 & 7) << 2) & 0xf) == 4) {
          iVar25 = (int)(local_4f4 + 1) / 2;
          uVar46 = local_4b0 & 0xfffffffffffffffc;
          uVar29 = -(ulong)((local_4f4 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                   (ulong)((local_4f4 - 1) * 2) << 2;
          uVar51 = 0;
          puVar58 = (undefined8 *)((long)local_4f0 + ((long)(int)uVar57 + -1) * uVar46);
          puVar75 = local_4f0;
          puVar28 = local_4f0;
          while( true ) {
            if (1 < iVar25) {
              puVar35 = (undefined4 *)((long)puVar28 + uVar29);
              do {
                puVar38 = puVar35 + -2;
                *puVar35 = *(undefined4 *)(puVar75 + 1);
                puVar35[1] = -*(float *)((long)puVar75 + 0xc);
                puVar35 = puVar38;
                puVar75 = puVar75 + 1;
              } while ((undefined4 *)((long)puVar28 + (ulong)(iVar25 - 2) * -8 + -8 + uVar29) !=
                       puVar38);
            }
            uVar51 = uVar51 + 1;
            if (uVar51 == uVar57) break;
            puVar28 = (undefined8 *)((long)puVar28 + uVar46);
            puVar75 = puVar28;
            if ((uVar51 != 0) && (uVar57 != uVar51 * 2)) {
              puVar75 = puVar58;
            }
            puVar58 = (undefined8 *)((long)puVar58 - uVar46);
          }
        }
        else {
          iVar25 = (int)(local_4f4 + 1) / 2;
          uVar46 = local_4b0 & 0xfffffffffffffff8;
          uVar29 = -(ulong)((local_4f4 - 1 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                   (ulong)((local_4f4 - 1) * 2) << 3;
          uVar51 = 0;
          puVar58 = (undefined8 *)((long)local_4f0 + ((long)(int)uVar57 + -1) * uVar46);
          puVar75 = local_4f0;
          puVar28 = local_4f0;
          while( true ) {
            if (1 < iVar25) {
              puVar43 = (undefined8 *)((long)puVar28 + uVar29);
              do {
                puVar61 = puVar43 + -2;
                *puVar43 = puVar75[2];
                puVar43[1] = -(double)puVar75[3];
                puVar43 = puVar61;
                puVar75 = puVar75 + 2;
              } while (puVar61 !=
                       (undefined8 *)((long)puVar28 + (ulong)(iVar25 - 2) * -0x10 + -0x10 + uVar29))
              ;
            }
            uVar51 = uVar51 + 1;
            if (uVar51 == uVar57) break;
            puVar28 = (undefined8 *)((long)puVar28 + uVar46);
            puVar75 = puVar28;
            if ((uVar51 != 0) && (uVar57 != uVar51 * 2)) {
              puVar75 = puVar58;
            }
            puVar58 = (undefined8 *)((long)puVar58 - uVar46);
          }
        }
      }
LAB_002a3eb4:
      if (lStack_4c8 != 0) {
        piVar2 = (int *)(lStack_4c8 + 0x14);
        do {
          iVar25 = *piVar2;
          cVar11 = '\x01';
          bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar24) {
            *piVar2 = iVar25 + -1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
        if (iVar25 == 1) {
          Mat::deallocate((Mat *)&local_500);
        }
      }
      lStack_4c8 = 0;
      local_4f0 = (undefined8 *)0x0;
      uStack_4d8 = 0;
      local_4e0 = 0;
      uStack_4e8 = 0;
      if (0 < local_4fc) {
        iVar25 = 0;
        puVar36 = local_4c0;
        do {
          *puVar36 = 0;
          iVar25 = iVar25 + 1;
          puVar36 = puVar36 + 1;
        } while (iVar25 < local_4fc);
      }
      if (local_4b8 != &local_4b0) {
        fastFree(local_4b8);
      }
      if (lStack_528 != 0) {
        piVar2 = (int *)(lStack_528 + 0x14);
        do {
          iVar25 = *piVar2;
          cVar11 = '\x01';
          bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar24) {
            *piVar2 = iVar25 + -1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
        if (iVar25 == 1) {
          Mat::deallocate((Mat *)&local_560);
        }
      }
      lStack_528 = 0;
      local_550 = (undefined8 *)0x0;
      uStack_538 = 0;
      local_540 = 0;
      uStack_548 = 0;
      if (0 < local_560._4_4_) {
        iVar25 = 0;
        puVar36 = local_520;
        do {
          *puVar36 = 0;
          iVar25 = iVar25 + 1;
          puVar36 = puVar36 + 1;
        } while (iVar25 < local_560._4_4_);
      }
      if (local_518 != &local_510) {
        fastFree(local_518);
      }
      if (local_588 != 0) {
        piVar2 = (int *)(local_588 + 0x14);
        do {
          iVar25 = *piVar2;
          cVar11 = '\x01';
          bVar24 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar24) {
            *piVar2 = iVar25 + -1;
            cVar11 = ExclusiveMonitorsStatus();
          }
        } while (cVar11 != '\0');
        if (iVar25 == 1) {
          Mat::deallocate(local_610);
        }
      }
      local_588 = 0;
      local_5b0 = (undefined8 *)0x0;
      local_598 = 0;
      local_5a0 = 0;
      local_5a8 = 0;
      if (0 < iStack_5bc) {
        iVar25 = 0;
        puVar35 = local_580;
        do {
          iVar25 = iVar25 + 1;
          *puVar35 = 0;
          puVar35 = puVar35 + 1;
        } while (iVar25 < iStack_5bc);
      }
      if (local_578 != local_570) {
        fastFree(local_578);
      }
      if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
        operator_delete__(local_418);
      }
      return;
    }
    if (lStack_4c8 != 0) {
      piVar2 = (int *)(lStack_4c8 + 0x14);
      do {
        cVar11 = '\x01';
        bVar12 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar12) {
          *piVar2 = *piVar2 + 1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
    }
    if (lStack_528 == 0) {
LAB_002a30d4:
      if (0 < local_560._4_4_) goto LAB_002a30f4;
LAB_002a35c8:
      local_560 = CONCAT44(local_560._4_4_,local_500);
LAB_002a3120:
      puVar23 = local_4b8;
      if (2 < local_4fc) goto LAB_002a3224;
      uStack_558 = CONCAT44(local_4f4,local_4f8);
      local_560 = CONCAT44(local_4fc,(uint)local_560);
      *local_518 = *local_4b8;
      local_518[1] = puVar23[1];
    }
    else {
      piVar2 = (int *)(lStack_528 + 0x14);
      do {
        iVar27 = *piVar2;
        cVar11 = '\x01';
        bVar12 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar12) {
          *piVar2 = iVar27 + -1;
          cVar11 = ExclusiveMonitorsStatus();
        }
      } while (cVar11 != '\0');
      if (iVar27 != 1) goto LAB_002a30d4;
      Mat::deallocate((Mat *)&local_560);
      if (local_560._4_4_ < 1) goto LAB_002a35c8;
LAB_002a30f4:
      iVar27 = 0;
      puVar36 = local_520;
      do {
        *puVar36 = 0;
        iVar27 = iVar27 + 1;
        puVar36 = puVar36 + 1;
      } while (iVar27 < local_560._4_4_);
      local_560 = CONCAT44(local_560._4_4_,local_500);
      if (local_560._4_4_ < 3) goto LAB_002a3120;
LAB_002a3224:
      lStack_528 = 0;
      uStack_538 = 0;
      local_540 = 0;
      uStack_548 = 0;
      local_550 = (undefined8 *)0x0;
      Mat::copySize((Mat *)&local_560,(Mat *)&local_500);
    }
    uStack_538 = uStack_4d8;
    local_540 = local_4e0;
    lStack_528 = lStack_4c8;
    local_530 = local_4d0;
    uStack_548 = uStack_4e8;
    local_550 = local_4f0;
    if (uVar51 == 0) goto LAB_002a24c4;
LAB_002a3190:
    local_688 = uStack_558 & 0xffffffff;
    uVar57 = local_4f4;
    if (local_4f4 != 1) goto LAB_002a24d8;
LAB_002a31a4:
    if (bVar24) goto LAB_002a3828;
    local_678 = 1;
    uVar60 = local_620;
  } while( true );
  uVar26 = (int)((uVar57 - 1 ^ uVar57) + 1) >> 1;
  if ((int)uVar26 < 2) {
                    /* try { // try from 002a3890 to 003a38df has its CatchHandler @ 002a36f0 */
    iVar25 = 0;
    uVar40 = uVar57;
  }
  else {
    local_4a0[0] = uVar26;
    if (uVar57 == uVar26) {
      iVar49 = 0;
      iVar25 = 1;
      uVar26 = uVar57;
      goto LAB_002a3340;
    }
    uVar40 = 0;
    if (uVar26 != 0) {
      uVar40 = (int)uVar57 / (int)uVar26;
    }
    iVar25 = 1;
    if ((int)uVar40 < 2) {
      iVar49 = 0;
      iVar25 = 1;
      goto LAB_002a3340;
    }
  }
  uVar59 = 3;
  do {
    while( true ) {
      iVar49 = iVar25;
      uVar10 = 0;
      if (uVar59 != 0) {
        uVar10 = (int)uVar40 / (int)uVar59;
      }
      if (uVar40 != uVar59 * uVar10) break;
      local_4a0[iVar49] = uVar59;
      iVar25 = iVar49 + 1;
      uVar26 = local_4a0[0];
      uVar40 = uVar10;
      if ((int)uVar10 < 2) goto LAB_002a3340;
    }
    uVar59 = uVar59 + 2;
    iVar25 = iVar49;
  } while ((int)(uVar59 * uVar59) <= (int)uVar40);
  local_4a0[iVar49] = uVar40;
  iVar25 = iVar49 + 1;
  uVar26 = local_4a0[0];
LAB_002a3340:
  uVar40 = uVar26 & 1;
  uVar59 = uVar40 ^ 1;
  iVar5 = (int)(uVar59 + iVar25) >> 1;
  if ((int)uVar59 < iVar5) {
    uVar40 = iVar5 - uVar59;
    uVar53 = (ulong)uVar40;
    lVar52 = (long)(int)uVar59;
    iVar13 = iVar25 - uVar59;
    lVar54 = (lVar52 + iVar13) * 4;
    if (((long)(lVar54 + uVar53 * -4) < (long)((uVar53 + lVar52) * 4) && lVar52 * 4 < lVar54) ||
       (uVar40 < 9)) {
      lVar54 = lVar52 + (iVar13 + -1);
      puVar36 = local_4a0 + lVar54;
      puVar45 = local_4a0 + lVar52;
      do {
        uVar40 = *puVar45;
        *puVar45 = *puVar36;
        puVar37 = puVar36 + -1;
        *puVar36 = uVar40;
        puVar36 = puVar37;
        puVar45 = puVar45 + 1;
      } while (puVar37 != (uint *)((long)&local_4a8 + (lVar54 - (ulong)(iVar5 + ~uVar59)) * 4 + 4));
    }
    else {
      puVar36 = local_4a0 + lVar52;
      uVar26 = -((uint)((ulong)puVar36 >> 2) & 3) & 3;
      uVar73 = (ulong)uVar26;
      if (uVar40 < uVar26) {
        uVar73 = uVar53;
      }
      iVar47 = (int)uVar73;
      uVar26 = uVar59;
      if (iVar47 != 0) {
        uVar26 = *puVar36;
        puVar45 = local_4a0 + (int)(uVar59 + iVar13 + -1);
        *puVar36 = *puVar45;
        *puVar45 = uVar26;
        uVar26 = uVar59 + 1;
        if (iVar47 != 1) {
          puVar45 = local_4a0 + lVar52 + 1;
          puVar36 = local_4a0 + (int)(uVar59 + (iVar25 - (uVar59 + 1)) + -1);
          uVar26 = *puVar45;
          *puVar45 = *puVar36;
          *puVar36 = uVar26;
          uVar26 = uVar59 + 2;
          if (iVar47 == 3) {
            puVar45 = local_4a0 + lVar52 + 2;
            puVar36 = local_4a0 + (int)(uVar59 + (iVar25 - (uVar59 + 2)) + -1);
            uVar26 = *puVar45;
            *puVar45 = *puVar36;
            *puVar36 = uVar26;
            uVar26 = uVar59 + 3;
          }
        }
      }
      uVar10 = ((uVar40 - iVar47) - 4 >> 2) + 1;
      iVar9 = uVar10 * 4;
      pauVar50 = (undefined1 (*) [16])(local_4a0 + ~uVar73 + lVar52 + iVar13 + -3);
      pauVar34 = (undefined1 (*) [16])(local_4a0 + lVar52 + uVar73);
      uVar48 = 0;
      pauVar55 = pauVar50;
      pauVar56 = pauVar34;
      do {
        auVar70 = *pauVar50;
        uVar48 = uVar48 + 1;
        pauVar50 = pauVar50 + -1;
        auVar14._8_8_ = _UNK_002a4cc8;
        auVar14._0_8_ = _DAT_002a4cc0;
        auVar71 = a64_TBL(ZEXT816(0),auVar70,auVar14);
        auVar15._8_8_ = _UNK_002a4cc8;
        auVar15._0_8_ = _DAT_002a4cc0;
        auVar70 = a64_TBL(ZEXT816(0),*pauVar56,auVar15);
        *(long *)(*pauVar34 + 8) = auVar71._8_8_;
        *(long *)*pauVar34 = auVar71._0_8_;
        *(long *)(*pauVar55 + 8) = auVar70._8_8_;
        *(long *)*pauVar55 = auVar70._0_8_;
        pauVar55 = pauVar55 + -1;
        pauVar34 = pauVar34 + 1;
        pauVar56 = pauVar56 + 1;
      } while (uVar48 < uVar10);
      uVar26 = uVar26 + iVar9;
      if (uVar40 - iVar47 != iVar9) {
        uVar53 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar26 << 2;
        puVar45 = (uint *)((long)local_4a0 + uVar53);
        puVar36 = local_4a0 + (int)(uVar59 + (iVar25 - uVar26) + -1);
        uVar40 = *puVar45;
        *puVar45 = *puVar36;
        *puVar36 = uVar40;
        if ((int)(uVar26 + 1) < iVar5) {
          puVar45 = (uint *)((long)local_4a0 + uVar53 + 4);
          puVar36 = local_4a0 + (int)(uVar59 + (iVar25 - (uVar26 + 1)) + -1);
          uVar40 = *puVar45;
          *puVar45 = *puVar36;
          *puVar36 = uVar40;
          if ((int)(uVar26 + 2) < iVar5) {
            puVar45 = (uint *)((long)local_4a0 + uVar53 + 8);
            puVar36 = local_4a0 + (int)(uVar59 + (iVar25 - (uVar26 + 2)) + -1);
            uVar40 = *puVar45;
            *puVar45 = *puVar36;
            *puVar36 = uVar40;
          }
        }
      }
    }
    uVar40 = local_4a0[0] & 1;
    uVar26 = local_4a0[0];
  }
  goto LAB_002a2508;
LAB_002a3828:
  if (uVar51 == 0) {
    uVar57 = (uint)local_688;
    local_688 = 1;
  }
  else {
    local_688 = (ulong)uVar57;
    uVar57 = local_4f8;
  }
  goto LAB_002a24d8;
}


==================================================================

### FUNC 002a4cd0 (8 bytes) name=idft

/* cv::idft(cv::_InputArray const&, cv::_OutputArray const&, int, int) */

void cv::idft(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4)

{
  dft(param_1,param_2,param_3 | 1,param_4);
  return;
}


==================================================================

### FUNC 002a4cd8 (5240 bytes) name=mulSpectrums

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::mulSpectrums(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int,
   bool) */

void cv::mulSpectrums(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                     bool param_5)

{
  uint uVar1;
  int *piVar2;
  uint uVar3;
  uint uVar4;
  char cVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  double dVar9;
  float fVar10;
  double dVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined4 uVar20;
  bool bVar21;
  double *pdVar22;
  double *pdVar23;
  float *pfVar24;
  float *pfVar25;
  int iVar26;
  int iVar27;
  undefined8 *puVar28;
  ulong uVar29;
  double *pdVar30;
  double *pdVar31;
  float *pfVar32;
  long lVar33;
  undefined4 *puVar34;
  uint *puVar35;
  Mat *pMVar36;
  double *pdVar37;
  double *pdVar38;
  double *pdVar39;
  uint uVar40;
  uint uVar41;
  double *pdVar42;
  double *pdVar43;
  double *pdVar44;
  float *pfVar45;
  float *pfVar46;
  long lVar47;
  float *pfVar48;
  long lVar49;
  float *pfVar50;
  double *pdVar51;
  double *pdVar52;
  ulong uVar53;
  ulong uVar54;
  uint uVar55;
  float *pfVar56;
  uint uVar57;
  float *pfVar58;
  uint uVar59;
  int iVar60;
  long lVar61;
  ulong uVar62;
  long lVar63;
  long lVar64;
  float fVar65;
  float fVar66;
  float fVar67;
  float fVar68;
  double dVar69;
  double dVar70;
  float fVar71;
  float fVar72;
  float fVar73;
  float fVar74;
  double dVar75;
  double dVar76;
  double dVar77;
  double dVar78;
  float fVar79;
  float fVar80;
  float fVar81;
  double dVar82;
  double dVar83;
  ulong uVar84;
  ulong uVar85;
  float fVar86;
  ulong uVar87;
  uint uVar88;
  float local_1e0;
  undefined1 uStack_1dc;
  undefined1 uStack_1db;
  undefined1 uStack_1da;
  undefined1 uStack_1d9;
  float fStack_1d8;
  undefined1 uStack_1d4;
  undefined1 uStack_1d3;
  undefined1 uStack_1d2;
  undefined1 uStack_1d1;
  float local_1d0;
  undefined1 uStack_1cc;
  undefined1 uStack_1cb;
  undefined1 uStack_1ca;
  undefined1 uStack_1c9;
  float fStack_1c8;
  undefined1 uStack_1c4;
  undefined1 uStack_1c3;
  undefined1 uStack_1c2;
  undefined1 uStack_1c1;
  float local_1a0;
  undefined1 uStack_19c;
  undefined1 uStack_19b;
  undefined1 uStack_19a;
  undefined1 uStack_199;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 local_128;
  uint local_120;
  int local_11c;
  uint local_118;
  uint local_114;
  double *local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  uint *local_e0;
  ulong *local_d8;
  ulong local_d0;
  ulong local_c8;
  uint local_c0;
  int local_bc;
  uint local_b8;
  undefined4 local_b4;
  double *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  uint *local_80;
  ulong *local_78;
  ulong local_70;
  ulong local_68;
  uint local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  double *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  ulong *local_18;
  ulong local_10;
  ulong local_8;
  
  iVar26 = _InputArray::kind(param_1);
  if (iVar26 == 0x10000) {
    pMVar36 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar36;
    local_11c = *(int *)(pMVar36 + 4);
    local_118 = *(uint *)(pMVar36 + 8);
    local_114 = *(uint *)(pMVar36 + 0xc);
    local_110 = *(double **)(pMVar36 + 0x10);
    local_108 = *(undefined8 *)(pMVar36 + 0x18);
    local_100 = *(undefined8 *)(pMVar36 + 0x20);
    local_f8 = *(undefined8 *)(pMVar36 + 0x28);
    local_f0 = *(undefined8 *)(pMVar36 + 0x30);
    local_e8 = *(long *)(pMVar36 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar2 = (int *)(local_e8 + 0x14);
      do {
        cVar5 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar21) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar36 + 4) < 3) {
      local_d0 = **(ulong **)(pMVar36 + 0x48);
      local_c8 = (*(ulong **)(pMVar36 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar26 = _InputArray::kind(param_2);
  if (iVar26 == 0x10000) {
    pMVar36 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar36;
    local_bc = *(int *)(pMVar36 + 4);
    local_b8 = *(uint *)(pMVar36 + 8);
    local_b4 = *(undefined4 *)(pMVar36 + 0xc);
    local_b0 = *(double **)(pMVar36 + 0x10);
    local_a8 = *(undefined8 *)(pMVar36 + 0x18);
    local_a0 = *(undefined8 *)(pMVar36 + 0x20);
    local_98 = *(undefined8 *)(pMVar36 + 0x28);
    local_90 = *(undefined8 *)(pMVar36 + 0x30);
    local_88 = *(long *)(pMVar36 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar2 = (int *)(local_88 + 0x14);
      do {
        cVar5 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar21) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar36 + 4) < 3) {
      local_70 = **(ulong **)(pMVar36 + 0x48);
      local_68 = (*(ulong **)(pMVar36 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar57 = local_114;
  uVar59 = local_118;
  uVar3 = local_120;
  uVar88 = local_120 & 0xfff;
  uVar41 = local_120 & 7;
  iVar26 = (local_120 >> 3 & 0x1ff) + 1;
  if (((uVar88 != (local_c0 & 0xfff)) || (local_e0[1] != local_80[1])) || (*local_e0 != *local_80))
  {
    local_140 = 0;
    local_138 = 0;
    puVar28 = (undefined8 *)String::allocate((String *)&local_140,0x31);
    uVar17 = DAT_00465c28;
    uVar16 = _LAB_00465c20;
    uVar15 = _DAT_00465c18;
    uVar14 = DAT_00465c10;
    uVar13 = DAT_00465c08;
    uVar12 = DAT_00465c00;
    *(undefined1 *)(puVar28 + 6) = LAB_00465c30;
    *puVar28 = uVar12;
    puVar28[1] = uVar13;
    puVar28[2] = uVar14;
    puVar28[3] = uVar15;
    puVar28[4] = uVar16;
    puVar28[5] = uVar17;
    error(-0xd7,(String *)&local_140,
          "void cv::mulSpectrums(cv::InputArray, cv::InputArray, cv::OutputArray, int, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xb8e);
    String::deallocate((String *)&local_140);
  }
  if (1 < (uVar3 & 0xff7) - 5) {
    local_130 = 0;
    local_128 = 0;
    puVar28 = (undefined8 *)String::allocate((String *)&local_130,0x4c);
    uVar20 = DAT_00465b38;
    uVar19 = _DAT_00465b28;
    uVar18 = _DAT_00465b20;
    uVar17 = DAT_00465b18;
    uVar16 = DAT_00465b10;
    uVar15 = DAT_00465b08;
    uVar14 = DAT_00465b00;
    uVar13 = DAT_00465af8;
    uVar12 = DAT_00465af0;
                    /* try { // try from 002a4e30 to 003a4e33 has its CatchHandler @ 002a4e78 */
                    /* try { // try from 002a4e38 to 003a4e3b has its CatchHandler @ 002a4b90 */
    puVar28[8] = DAT_00465b30;
    *(undefined4 *)(puVar28 + 9) = uVar20;
    *puVar28 = uVar12;
    puVar28[1] = uVar13;
    puVar28[2] = uVar14;
    puVar28[3] = uVar15;
    puVar28[4] = uVar16;
    puVar28[5] = uVar17;
                    /* catch() { ... } // from try @ 002a4e30 with catch @ 002a4e78 */
    puVar28[6] = uVar18;
    puVar28[7] = uVar19;
    error(-0xd7,(String *)&local_130,
          "void cv::mulSpectrums(cv::InputArray, cv::InputArray, cv::OutputArray, int, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xb8f);
    String::deallocate((String *)&local_130);
  }
                    /* try { // try from 002a4e88 to 003a4e8b has its CatchHandler @ 002a4b90 */
  _OutputArray::create(param_3,local_118,local_114,uVar88,-1,false,0);
  iVar27 = _InputArray::kind((_InputArray *)param_3);
  if (iVar27 == 0x10000) {
    pMVar36 = *(Mat **)(param_3 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar36;
    local_5c = *(int *)(pMVar36 + 4);
    local_58 = *(undefined4 *)(pMVar36 + 8);
    local_54 = *(undefined4 *)(pMVar36 + 0xc);
    local_50 = *(double **)(pMVar36 + 0x10);
    local_48 = *(undefined8 *)(pMVar36 + 0x18);
    local_40 = *(undefined8 *)(pMVar36 + 0x20);
    local_38 = *(undefined8 *)(pMVar36 + 0x28);
    local_30 = *(undefined8 *)(pMVar36 + 0x30);
    local_28 = *(long *)(pMVar36 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar5 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar21) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (*(int *)(pMVar36 + 4) < 3) {
      local_10 = **(ulong **)(pMVar36 + 0x48);
      local_8 = (*(ulong **)(pMVar36 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  if ((((uint)param_4 >> 2 & 1) == 0) && (uVar59 != 1)) {
    uVar88 = 0;
    if (((uVar57 != 1) || (uVar88 = local_120 & 0x4000, (local_120 >> 0xe & 1) == 0)) ||
       ((uVar88 = local_c0 & 0x4000, (local_c0 >> 0xe & 1) == 0 ||
        (uVar88 = local_60 & 0x4000, (local_60 >> 0xe & 1) == 0)))) {
      iVar27 = uVar59 - 1;
      goto LAB_002a4f04;
    }
  }
  else if ((param_4 & 4U) != 0) {
    iVar27 = uVar59 - 1;
    uVar88 = 1;
    goto LAB_002a4f04;
  }
  iVar27 = uVar57 + uVar59;
  uVar59 = 1;
  uVar57 = iVar27 - 1;
  iVar27 = 0;
  uVar88 = 1;
LAB_002a4f04:
  uVar3 = uVar57 & 1;
  bVar21 = iVar26 == 1;
  uVar4 = uVar3 ^ 1;
  uVar6 = uVar57 * iVar26 - (uVar4 & bVar21);
  if (uVar41 == 5) {
    uVar41 = (uint)bVar21;
    uVar87 = local_d0 >> 2;
    uVar85 = local_70 >> 2;
    uVar84 = local_10 >> 2;
    pdVar39 = local_110;
    pdVar43 = local_50;
    pdVar44 = local_b0;
    if (uVar88 <= bVar21 && uVar41 != uVar88) {
      lVar61 = (long)(int)uVar57 * 4 + -4;
      lVar63 = (long)iVar27;
      lVar49 = uVar84 * 4;
      lVar64 = (long)(int)uVar57 * -4 + 4;
      iVar26 = 0;
      lVar47 = uVar87 * 4;
      lVar33 = uVar85 * 4;
      while( true ) {
        iVar60 = 2;
        if (uVar3 != 0) {
          iVar60 = 1;
        }
        if (iVar60 <= iVar26) break;
        if (iVar26 == 1) {
          pdVar39 = (double *)((long)pdVar39 + lVar61);
          pdVar44 = (double *)((long)pdVar44 + lVar61);
          pdVar43 = (double *)((long)pdVar43 + lVar61);
        }
        *(float *)pdVar43 = *(float *)pdVar39 * *(float *)pdVar44;
        if ((uVar59 & 1) == 0) {
          *(float *)((long)pdVar43 + lVar49 * lVar63) =
               *(float *)((long)pdVar39 + lVar47 * lVar63) *
               *(float *)((long)pdVar44 + lVar33 * lVar63);
        }
        if (param_5) {
          if (1 < iVar27) {
            pfVar48 = (float *)((long)pdVar39 + lVar47);
            pfVar50 = (float *)((long)pdVar44 + lVar33);
            pfVar46 = (float *)((long)pdVar43 + lVar49);
            iVar60 = 1;
            do {
              fVar71 = pfVar48[uVar87];
              iVar60 = iVar60 + 2;
              fVar86 = pfVar50[uVar85];
              fVar81 = *pfVar48;
              pfVar48 = pfVar48 + uVar87 * 2;
              fVar68 = *pfVar50;
              pfVar50 = pfVar50 + uVar85 * 2;
              *pfVar46 = fVar71 * fVar86 + fVar68 * fVar81;
              pfVar46[uVar84] = fVar68 * fVar71 - fVar81 * fVar86;
              pfVar46 = pfVar46 + uVar84 * 2;
            } while (iVar60 < iVar27);
          }
LAB_002a606c:
          if (iVar26 == 1) goto LAB_002a607c;
LAB_002a6074:
          iVar26 = iVar26 + 1;
        }
        else {
          if (iVar27 < 2) goto LAB_002a606c;
          pfVar48 = (float *)((long)pdVar39 + lVar47);
          pfVar50 = (float *)((long)pdVar44 + lVar33);
          pfVar46 = (float *)((long)pdVar43 + lVar49);
          iVar60 = 1;
          do {
            fVar71 = pfVar50[uVar85];
            iVar60 = iVar60 + 2;
            fVar86 = pfVar48[uVar87];
            fVar81 = *pfVar50;
            pfVar50 = pfVar50 + uVar85 * 2;
            fVar68 = *pfVar48;
            pfVar48 = pfVar48 + uVar87 * 2;
            *pfVar46 = fVar68 * fVar81 - fVar86 * fVar71;
            pfVar46[uVar84] = fVar81 * fVar86 + fVar71 * fVar68;
            pfVar46 = pfVar46 + uVar84 * 2;
          } while (iVar60 < iVar27);
          if (iVar26 != 1) goto LAB_002a6074;
LAB_002a607c:
          pdVar39 = (double *)((long)pdVar39 + lVar64);
          pdVar44 = (double *)((long)pdVar44 + lVar64);
          pdVar43 = (double *)((long)pdVar43 + lVar64);
          iVar26 = iVar26 + 1;
        }
      }
    }
    if (uVar59 != 0) {
      uVar29 = (ulong)bVar21;
      uVar40 = ~uVar41 + uVar6;
      lVar61 = uVar29 * 4;
      pfVar48 = (float *)((long)pdVar39 + lVar61);
      pfVar50 = (float *)((long)pdVar43 + (uVar29 + 8) * 4);
      uVar3 = uVar40 >> 1;
      uVar57 = (uVar3 - 3 >> 2) + 1;
      pfVar46 = (float *)((long)pdVar44 + lVar61);
      pfVar32 = (float *)((long)pdVar43 + lVar61);
      lVar61 = NEON_shl(uVar29 + 2 + (ulong)uVar3 * 2,2);
      uVar29 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar6 << 2;
      uVar3 = uVar3 + 1;
      uVar59 = uVar41;
      if (5 < uVar40) {
        uVar59 = uVar41 + uVar57 * 8;
      }
      uVar1 = uVar59 + 2;
      uVar62 = -(ulong)(uVar59 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar59 << 2;
      lVar64 = uVar62 + 4;
      uVar59 = uVar59 + 4;
      uVar54 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
      lVar33 = uVar54 + 4;
      uVar53 = -(ulong)(uVar59 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar59 << 2;
      lVar47 = uVar53 + 4;
      do {
        if (((uVar88 & uVar41) != 0) &&
           (*(float *)pdVar43 = *(float *)pdVar39 * *(float *)pdVar44, uVar4 != 0)) {
          *(float *)((long)pdVar43 + uVar29) =
               *(float *)((long)pdVar39 + uVar29) * *(float *)((long)pdVar44 + uVar29);
        }
        if (param_5) {
          if ((int)uVar41 < (int)uVar6) {
            if ((pfVar32 < pfVar48 + 8 && pfVar48 < pfVar50 ||
                 pfVar32 < pfVar46 + 8 && pfVar46 < pfVar50) || (uVar3 < 4)) {
              pfVar45 = pfVar32;
              pfVar56 = pfVar48;
              pfVar58 = pfVar46;
              do {
                fVar81 = *pfVar56;
                pfVar24 = pfVar56 + 2;
                fVar86 = pfVar58[1];
                fVar68 = pfVar56[1];
                fVar71 = *pfVar58;
                *pfVar45 = fVar68 * fVar86 + fVar71 * fVar81;
                pfVar45[1] = fVar71 * fVar68 - fVar81 * fVar86;
                pfVar45 = pfVar45 + 2;
                pfVar56 = pfVar24;
                pfVar58 = pfVar58 + 2;
              } while (pfVar24 != (float *)((long)pdVar39 + lVar61));
            }
            else {
              if (5 < uVar40) {
                uVar55 = 0;
                pfVar45 = pfVar46;
                pfVar56 = pfVar32;
                pfVar58 = pfVar48;
                do {
                  uVar55 = uVar55 + 1;
                  fVar66 = *pfVar58;
                  pfVar24 = pfVar58 + 1;
                  fVar71 = pfVar58[2];
                  fVar68 = pfVar58[3];
                  fVar73 = pfVar58[4];
                  fVar81 = pfVar58[5];
                  fVar79 = pfVar58[6];
                  fVar10 = pfVar58[7];
                  pfVar58 = pfVar58 + 8;
                  _local_1a0 = CONCAT14(SUB41(fVar71,0),fVar66);
                  _local_1a0 = CONCAT15((char)((uint)fVar71 >> 8),_local_1a0);
                  _local_1a0 = CONCAT16((char)((uint)fVar71 >> 0x10),_local_1a0);
                  _local_1a0 = CONCAT17((char)((uint)fVar71 >> 0x18),_local_1a0);
                  fVar67 = *pfVar45;
                  pfVar25 = pfVar45 + 1;
                  fVar72 = pfVar45[2];
                  fVar71 = pfVar45[3];
                  fVar74 = pfVar45[4];
                  fVar86 = pfVar45[5];
                  fVar80 = pfVar45[6];
                  fVar65 = pfVar45[7];
                  pfVar45 = pfVar45 + 8;
                  _local_1e0 = CONCAT14(SUB41(fVar72,0),fVar67);
                  _local_1e0 = CONCAT15((char)((uint)fVar72 >> 8),_local_1e0);
                  _local_1e0 = CONCAT16((char)((uint)fVar72 >> 0x10),_local_1e0);
                  _local_1e0 = CONCAT17((char)((uint)fVar72 >> 0x18),_local_1e0);
                  _fStack_1d8 = CONCAT14(SUB41(fVar80,0),fVar74);
                  _fStack_1d8 = CONCAT15((char)((uint)fVar80 >> 8),_fStack_1d8);
                  _fStack_1d8 = CONCAT16((char)((uint)fVar80 >> 0x10),_fStack_1d8);
                  _fStack_1d8 = CONCAT17((char)((uint)fVar80 >> 0x18),_fStack_1d8);
                  _local_1d0 = CONCAT14(SUB41(fVar71,0),*pfVar25);
                  _local_1d0 = CONCAT15((char)((uint)fVar71 >> 8),_local_1d0);
                  _local_1d0 = CONCAT16((char)((uint)fVar71 >> 0x10),_local_1d0);
                  _local_1d0 = CONCAT17((char)((uint)fVar71 >> 0x18),_local_1d0);
                  _fStack_1c8 = CONCAT14(SUB41(fVar65,0),fVar86);
                  _fStack_1c8 = CONCAT15((char)((uint)fVar65 >> 8),_fStack_1c8);
                  _fStack_1c8 = CONCAT16((char)((uint)fVar65 >> 0x10),_fStack_1c8);
                  _fStack_1c8 = CONCAT17((char)((uint)fVar65 >> 0x18),_fStack_1c8);
                  dVar76 = (double)*pfVar24;
                  dVar82 = (double)(float)(CONCAT17((char)((uint)fVar68 >> 0x18),
                                                    CONCAT16((char)((uint)fVar68 >> 0x10),
                                                             CONCAT15((char)((uint)fVar68 >> 8),
                                                                      CONCAT14(SUB41(fVar68,0),
                                                                               *pfVar24)))) >> 0x20)
                  ;
                  fVar65 = (float)(CONCAT17((char)((uint)fVar10 >> 0x18),
                                            CONCAT16((char)((uint)fVar10 >> 0x10),
                                                     CONCAT15((char)((uint)fVar10 >> 8),
                                                              CONCAT14(SUB41(fVar10,0),fVar81)))) >>
                                  0x20);
                  dVar70 = (double)fVar66;
                  dVar75 = (double)(float)((ulong)_local_1a0 >> 0x20);
                  fVar66 = (float)(CONCAT17((char)((uint)fVar79 >> 0x18),
                                            CONCAT16((char)((uint)fVar79 >> 0x10),
                                                     CONCAT15((char)((uint)fVar79 >> 8),
                                                              CONCAT14(SUB41(fVar79,0),fVar73)))) >>
                                  0x20);
                  dVar9 = (double)fVar67;
                  dVar69 = (double)(float)((ulong)_local_1e0 >> 0x20);
                  fVar67 = (float)((ulong)_fStack_1d8 >> 0x20);
                  fVar10 = fVar67 * fVar65;
                  dVar11 = dVar9 * dVar76;
                  dVar83 = dVar69 * dVar82;
                  dVar11 = dVar11 - dVar70 * dVar11;
                  dVar83 = dVar83 - dVar75 * dVar83;
                  auVar8[8] = SUB81(dVar83,0);
                  auVar8._0_8_ = dVar11;
                  auVar8[9] = (char)((ulong)dVar83 >> 8);
                  auVar8[10] = (char)((ulong)dVar83 >> 0x10);
                  auVar8[0xb] = (char)((ulong)dVar83 >> 0x18);
                  auVar8[0xc] = (char)((ulong)dVar83 >> 0x20);
                  auVar8[0xd] = (char)((ulong)dVar83 >> 0x28);
                  auVar8[0xe] = (char)((ulong)dVar83 >> 0x30);
                  auVar8[0xf] = (char)((ulong)dVar83 >> 0x38);
                  fVar68 = (float)dVar11;
                  fVar71 = (float)auVar8._8_8_;
                  *pfVar56 = (float)(dVar76 * (double)*pfVar25 + dVar70 * dVar9);
                  pfVar56[1] = fVar68;
                  pfVar56[2] = (float)(dVar82 * (double)(float)((ulong)_local_1d0 >> 0x20) +
                                      dVar75 * dVar69);
                  pfVar56[3] = (float)(CONCAT17((char)((uint)fVar71 >> 0x18),
                                                CONCAT16((char)((uint)fVar71 >> 0x10),
                                                         CONCAT15((char)((uint)fVar71 >> 8),
                                                                  CONCAT14(SUB41(fVar71,0),fVar68)))
                                               ) >> 0x20);
                  pfVar56[4] = fVar81 * fVar86 + fVar73 * fVar74;
                  pfVar56[5] = fVar74 * fVar81 - fVar73 * fVar74 * fVar81;
                  pfVar56[6] = fVar65 * (float)((ulong)_fStack_1c8 >> 0x20) + fVar66 * fVar67;
                  pfVar56[7] = fVar10 - fVar66 * fVar10;
                  pfVar56 = pfVar56 + 8;
                } while (uVar55 < uVar57);
                if (uVar57 * 4 == uVar3) goto LAB_002a5bf0;
              }
              fVar81 = *(float *)((long)pdVar39 + lVar64);
              fVar68 = *(float *)((long)pdVar44 + lVar64);
              fVar71 = *(float *)((long)pdVar39 + uVar62);
              fVar86 = *(float *)((long)pdVar44 + uVar62);
              *(float *)((long)pdVar43 + uVar62) = fVar81 * fVar68 + fVar86 * fVar71;
              *(float *)((long)pdVar43 + lVar64) = fVar86 * fVar81 - fVar71 * fVar68;
              if ((int)uVar1 < (int)uVar6) {
                fVar81 = *(float *)((long)pdVar39 + lVar33);
                fVar68 = *(float *)((long)pdVar44 + lVar33);
                fVar71 = *(float *)((long)pdVar39 + uVar54);
                fVar86 = *(float *)((long)pdVar44 + uVar54);
                *(float *)((long)pdVar43 + uVar54) = fVar81 * fVar68 + fVar86 * fVar71;
                *(float *)((long)pdVar43 + lVar33) = fVar86 * fVar81 - fVar71 * fVar68;
                if ((int)uVar59 < (int)uVar6) {
                  fVar81 = *(float *)((long)pdVar39 + lVar47);
                  fVar68 = *(float *)((long)pdVar44 + lVar47);
                  fVar71 = *(float *)((long)pdVar39 + uVar53);
                  fVar86 = *(float *)((long)pdVar44 + uVar53);
                  *(float *)((long)pdVar43 + uVar53) = fVar81 * fVar68 + fVar86 * fVar71;
                  *(float *)((long)pdVar43 + lVar47) = fVar86 * fVar81 - fVar71 * fVar68;
                }
              }
            }
          }
        }
        else if ((int)uVar41 < (int)uVar6) {
          if ((pfVar32 < pfVar48 + 8 && pfVar48 < pfVar50 ||
               pfVar32 < pfVar46 + 8 && pfVar46 < pfVar50) || (uVar3 < 4)) {
            pfVar45 = pfVar32;
            pfVar56 = pfVar48;
            pfVar58 = pfVar46;
            do {
              fVar81 = *pfVar56;
              pfVar24 = pfVar56 + 2;
              fVar86 = pfVar58[1];
              fVar68 = pfVar56[1];
              fVar71 = *pfVar58;
              *pfVar45 = fVar81 * fVar71 - fVar68 * fVar86;
              pfVar45[1] = fVar81 * fVar86 + fVar68 * fVar71;
              pfVar45 = pfVar45 + 2;
              pfVar56 = pfVar24;
              pfVar58 = pfVar58 + 2;
            } while (pfVar24 != (float *)((long)pdVar39 + lVar61));
          }
          else {
            if (5 < uVar40) {
              uVar55 = 0;
              pfVar45 = pfVar46;
              pfVar56 = pfVar32;
              pfVar58 = pfVar48;
              do {
                uVar55 = uVar55 + 1;
                fVar66 = *pfVar58;
                pfVar24 = pfVar58 + 1;
                fVar71 = pfVar58[2];
                fVar68 = pfVar58[3];
                fVar73 = pfVar58[4];
                fVar81 = pfVar58[5];
                fVar79 = pfVar58[6];
                fVar10 = pfVar58[7];
                pfVar58 = pfVar58 + 8;
                _local_1a0 = CONCAT14(SUB41(fVar71,0),fVar66);
                _local_1a0 = CONCAT15((char)((uint)fVar71 >> 8),_local_1a0);
                _local_1a0 = CONCAT16((char)((uint)fVar71 >> 0x10),_local_1a0);
                _local_1a0 = CONCAT17((char)((uint)fVar71 >> 0x18),_local_1a0);
                fVar67 = *pfVar45;
                pfVar25 = pfVar45 + 1;
                fVar72 = pfVar45[2];
                fVar71 = pfVar45[3];
                fVar74 = pfVar45[4];
                fVar86 = pfVar45[5];
                fVar80 = pfVar45[6];
                fVar65 = pfVar45[7];
                pfVar45 = pfVar45 + 8;
                _local_1e0 = CONCAT14(SUB41(fVar72,0),fVar67);
                _local_1e0 = CONCAT15((char)((uint)fVar72 >> 8),_local_1e0);
                _local_1e0 = CONCAT16((char)((uint)fVar72 >> 0x10),_local_1e0);
                _local_1e0 = CONCAT17((char)((uint)fVar72 >> 0x18),_local_1e0);
                _fStack_1d8 = CONCAT14(SUB41(fVar80,0),fVar74);
                _fStack_1d8 = CONCAT15((char)((uint)fVar80 >> 8),_fStack_1d8);
                _fStack_1d8 = CONCAT16((char)((uint)fVar80 >> 0x10),_fStack_1d8);
                _fStack_1d8 = CONCAT17((char)((uint)fVar80 >> 0x18),_fStack_1d8);
                _local_1d0 = CONCAT14(SUB41(fVar71,0),*pfVar25);
                _local_1d0 = CONCAT15((char)((uint)fVar71 >> 8),_local_1d0);
                _local_1d0 = CONCAT16((char)((uint)fVar71 >> 0x10),_local_1d0);
                _local_1d0 = CONCAT17((char)((uint)fVar71 >> 0x18),_local_1d0);
                _fStack_1c8 = CONCAT14(SUB41(fVar65,0),fVar86);
                _fStack_1c8 = CONCAT15((char)((uint)fVar65 >> 8),_fStack_1c8);
                _fStack_1c8 = CONCAT16((char)((uint)fVar65 >> 0x10),_fStack_1c8);
                _fStack_1c8 = CONCAT17((char)((uint)fVar65 >> 0x18),_fStack_1c8);
                dVar9 = (double)fVar66;
                dVar11 = (double)(float)((ulong)_local_1a0 >> 0x20);
                fVar65 = (float)(CONCAT17((char)((uint)fVar79 >> 0x18),
                                          CONCAT16((char)((uint)fVar79 >> 0x10),
                                                   CONCAT15((char)((uint)fVar79 >> 8),
                                                            CONCAT14(SUB41(fVar79,0),fVar73)))) >>
                                0x20);
                dVar70 = (double)*pfVar24;
                dVar75 = (double)(float)(CONCAT17((char)((uint)fVar68 >> 0x18),
                                                  CONCAT16((char)((uint)fVar68 >> 0x10),
                                                           CONCAT15((char)((uint)fVar68 >> 8),
                                                                    CONCAT14(SUB41(fVar68,0),
                                                                             *pfVar24)))) >> 0x20);
                fVar66 = (float)(CONCAT17((char)((uint)fVar10 >> 0x18),
                                          CONCAT16((char)((uint)fVar10 >> 0x10),
                                                   CONCAT15((char)((uint)fVar10 >> 8),
                                                            CONCAT14(SUB41(fVar10,0),fVar81)))) >>
                                0x20);
                dVar76 = (double)fVar67;
                dVar82 = (double)(float)((ulong)_local_1e0 >> 0x20);
                fVar67 = (float)((ulong)_fStack_1d8 >> 0x20);
                dVar69 = dVar9 * dVar76;
                dVar83 = dVar11 * dVar82;
                fVar10 = fVar65 * fVar67;
                dVar9 = dVar9 * (double)*pfVar25 + dVar76 * dVar70;
                dVar11 = dVar11 * (double)(float)((ulong)_local_1d0 >> 0x20) + dVar82 * dVar75;
                auVar7[8] = SUB81(dVar11,0);
                auVar7._0_8_ = dVar9;
                auVar7[9] = (char)((ulong)dVar11 >> 8);
                auVar7[10] = (char)((ulong)dVar11 >> 0x10);
                auVar7[0xb] = (char)((ulong)dVar11 >> 0x18);
                auVar7[0xc] = (char)((ulong)dVar11 >> 0x20);
                auVar7[0xd] = (char)((ulong)dVar11 >> 0x28);
                auVar7[0xe] = (char)((ulong)dVar11 >> 0x30);
                auVar7[0xf] = (char)((ulong)dVar11 >> 0x38);
                fVar68 = (float)dVar9;
                fVar71 = (float)auVar7._8_8_;
                *pfVar56 = (float)(dVar69 - dVar70 * dVar69);
                pfVar56[1] = fVar68;
                pfVar56[2] = (float)(dVar83 - dVar75 * dVar83);
                pfVar56[3] = (float)(CONCAT17((char)((uint)fVar71 >> 0x18),
                                              CONCAT16((char)((uint)fVar71 >> 0x10),
                                                       CONCAT15((char)((uint)fVar71 >> 8),
                                                                CONCAT14(SUB41(fVar71,0),fVar68))))
                                    >> 0x20);
                pfVar56[4] = fVar73 * fVar74 - fVar81 * fVar73 * fVar74;
                pfVar56[5] = fVar73 * fVar86 + fVar74 * fVar81;
                pfVar56[6] = fVar10 - fVar66 * fVar10;
                pfVar56[7] = fVar65 * (float)((ulong)_fStack_1c8 >> 0x20) + fVar67 * fVar66;
                pfVar56 = pfVar56 + 8;
              } while (uVar55 < uVar57);
              if (uVar3 == uVar57 * 4) goto LAB_002a5bf0;
            }
            fVar81 = *(float *)((long)pdVar39 + lVar64);
            fVar68 = *(float *)((long)pdVar44 + lVar64);
            fVar71 = *(float *)((long)pdVar39 + uVar62);
            fVar86 = *(float *)((long)pdVar44 + uVar62);
            *(float *)((long)pdVar43 + uVar62) = fVar71 * fVar86 - fVar81 * fVar68;
            *(float *)((long)pdVar43 + lVar64) = fVar71 * fVar68 + fVar81 * fVar86;
            if ((int)uVar1 < (int)uVar6) {
              fVar81 = *(float *)((long)pdVar39 + lVar33);
              fVar68 = *(float *)((long)pdVar44 + lVar33);
              fVar71 = *(float *)((long)pdVar39 + uVar54);
              fVar86 = *(float *)((long)pdVar44 + uVar54);
              *(float *)((long)pdVar43 + uVar54) = fVar71 * fVar86 - fVar81 * fVar68;
              *(float *)((long)pdVar43 + lVar33) = fVar71 * fVar68 + fVar81 * fVar86;
              if ((int)uVar59 < (int)uVar6) {
                fVar81 = *(float *)((long)pdVar39 + lVar47);
                fVar68 = *(float *)((long)pdVar44 + lVar47);
                fVar71 = *(float *)((long)pdVar39 + uVar53);
                fVar86 = *(float *)((long)pdVar44 + uVar53);
                *(float *)((long)pdVar43 + uVar53) = fVar71 * fVar86 - fVar81 * fVar68;
                *(float *)((long)pdVar43 + lVar47) = fVar71 * fVar68 + fVar81 * fVar86;
              }
            }
          }
        }
LAB_002a5bf0:
        iVar27 = iVar27 + -1;
        pdVar39 = (double *)((long)pdVar39 + uVar87 * 4);
        pdVar44 = (double *)((long)pdVar44 + uVar85 * 4);
        pdVar43 = (double *)((long)pdVar43 + uVar84 * 4);
        pfVar48 = pfVar48 + uVar87;
        pfVar46 = pfVar46 + uVar85;
        pfVar32 = pfVar32 + uVar84;
        pfVar50 = pfVar50 + uVar84;
      } while (iVar27 != -1);
    }
  }
  else {
    uVar87 = local_d0 >> 3;
    uVar85 = local_70 >> 3;
    uVar84 = local_10 >> 3;
    pdVar39 = local_110;
    pdVar43 = local_50;
    pdVar44 = local_b0;
    if (uVar88 < bVar21) {
      lVar64 = (long)iVar27;
      lVar61 = (long)(int)uVar57;
      iVar60 = 0;
      iVar26 = 2;
      if (uVar3 != 0) {
        iVar26 = 1;
      }
      if (iVar26 != 0) {
        do {
          if (iVar60 == 1) {
            pdVar39 = pdVar39 + (long)(int)uVar57 + -1;
            pdVar44 = pdVar44 + (long)(int)uVar57 + -1;
            pdVar43 = pdVar43 + (long)(int)uVar57 + -1;
          }
          *pdVar43 = *pdVar39 * *pdVar44;
          if ((uVar59 & 1) == 0) {
            *(double *)((long)pdVar43 + uVar84 * 8 * lVar64) =
                 *(double *)((long)pdVar39 + uVar87 * 8 * lVar64) *
                 *(double *)((long)pdVar44 + uVar85 * 8 * lVar64);
          }
          if (param_5) {
            if (1 < iVar27) {
              pdVar42 = pdVar39 + uVar87;
              pdVar38 = pdVar44 + uVar85;
              pdVar30 = pdVar43 + uVar84;
              iVar26 = 1;
              do {
                dVar83 = pdVar42[uVar87];
                iVar26 = iVar26 + 2;
                dVar11 = pdVar38[uVar85];
                dVar9 = *pdVar42;
                pdVar42 = pdVar42 + uVar87 * 2;
                dVar69 = *pdVar38;
                pdVar38 = pdVar38 + uVar85 * 2;
                *pdVar30 = dVar83 * dVar11 + dVar69 * dVar9;
                pdVar30[uVar84] = dVar69 * dVar83 - dVar9 * dVar11;
                pdVar30 = pdVar30 + uVar84 * 2;
              } while (iVar26 < iVar27);
            }
          }
          else if (1 < iVar27) {
            pdVar42 = pdVar39 + uVar87;
            pdVar38 = pdVar44 + uVar85;
            pdVar30 = pdVar43 + uVar84;
            iVar26 = 1;
            do {
              dVar11 = pdVar42[uVar87];
              iVar26 = iVar26 + 2;
              dVar83 = pdVar38[uVar85];
              dVar9 = *pdVar38;
              pdVar38 = pdVar38 + uVar85 * 2;
              dVar69 = *pdVar42;
              pdVar42 = pdVar42 + uVar87 * 2;
              *pdVar30 = dVar69 * dVar9 - dVar11 * dVar83;
              pdVar30[uVar84] = dVar9 * dVar11 + dVar83 * dVar69;
              pdVar30 = pdVar30 + uVar84 * 2;
            } while (iVar26 < iVar27);
          }
          if (iVar60 == 1) {
            pdVar39 = pdVar39 + (1 - lVar61);
            pdVar44 = pdVar44 + (1 - lVar61);
            pdVar43 = pdVar43 + (1 - lVar61);
          }
          iVar60 = iVar60 + 1;
          iVar26 = 2;
          if (uVar3 != 0) {
            iVar26 = 1;
          }
        } while (iVar60 < iVar26);
      }
    }
    if (uVar59 != 0) {
      uVar3 = ~(uint)bVar21 + uVar6;
      uVar29 = (ulong)bVar21;
      uVar57 = uVar3 >> 1;
      uVar40 = (uint)bVar21;
      uVar41 = (uVar57 - 1 >> 1) + 1;
      pdVar42 = pdVar39 + uVar29;
      uVar62 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
      pdVar38 = pdVar43 + uVar29 + 4;
      lVar61 = NEON_shl(uVar29 + 2 + (ulong)uVar57 * 2,3);
      uVar57 = uVar57 + 1;
      uVar59 = uVar40;
      if (1 < uVar3) {
        uVar59 = uVar40 + uVar41 * 4;
      }
      uVar53 = -(ulong)(uVar59 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar59 << 3;
      lVar64 = uVar53 + 8;
      pdVar30 = pdVar44 + uVar29;
      pdVar37 = pdVar43 + uVar29;
      do {
        if (((uVar88 & uVar40) != 0) && (*pdVar43 = *pdVar39 * *pdVar44, uVar4 != 0)) {
          *(double *)((long)pdVar43 + uVar62) =
               *(double *)((long)pdVar39 + uVar62) * *(double *)((long)pdVar44 + uVar62);
        }
        if (param_5) {
          if ((int)uVar40 < (int)uVar6) {
            if ((pdVar37 < pdVar42 + 4 && pdVar42 < pdVar38 ||
                 pdVar37 < pdVar30 + 4 && pdVar30 < pdVar38) || (uVar57 < 4)) {
              pdVar31 = pdVar42;
              pdVar51 = pdVar30;
              pdVar52 = pdVar37;
              do {
                dVar9 = *pdVar31;
                pdVar22 = pdVar31 + 2;
                dVar11 = pdVar51[1];
                dVar69 = *pdVar51;
                pdVar51 = pdVar51 + 2;
                dVar83 = pdVar31[1];
                *pdVar52 = dVar83 * dVar11 + dVar69 * dVar9;
                pdVar52[1] = dVar69 * dVar83 - dVar9 * dVar11;
                pdVar31 = pdVar22;
                pdVar52 = pdVar52 + 2;
              } while (pdVar22 != (double *)((long)pdVar39 + lVar61));
            }
            else {
              if (1 < uVar3) {
                uVar59 = 0;
                pdVar51 = pdVar42;
                pdVar31 = pdVar30;
                pdVar52 = pdVar37;
                do {
                  dVar83 = *pdVar51;
                  pdVar22 = pdVar51 + 1;
                  dVar75 = pdVar51[2];
                  dVar9 = pdVar51[3];
                  pdVar51 = pdVar51 + 4;
                  uVar59 = uVar59 + 1;
                  dVar70 = *pdVar31;
                  pdVar23 = pdVar31 + 1;
                  dVar76 = pdVar31[2];
                  dVar11 = pdVar31[3];
                  pdVar31 = pdVar31 + 4;
                  dVar69 = dVar70 * *pdVar22;
                  dVar82 = dVar76 * dVar9;
                  *pdVar52 = *pdVar22 * *pdVar23 + dVar83 * dVar70;
                  pdVar52[1] = dVar69 - dVar83 * dVar69;
                  pdVar52[2] = dVar9 * dVar11 + dVar75 * dVar76;
                  pdVar52[3] = dVar82 - dVar75 * dVar82;
                  pdVar52 = pdVar52 + 4;
                } while (uVar59 < uVar41);
                if (uVar41 * 2 == uVar57) goto LAB_002a5258;
              }
              dVar69 = *(double *)((long)pdVar44 + lVar64);
              dVar11 = *(double *)((long)pdVar39 + lVar64);
              dVar9 = *(double *)((long)pdVar39 + uVar53);
              dVar83 = *(double *)((long)pdVar44 + uVar53);
              *(double *)((long)pdVar43 + uVar53) = dVar11 * dVar69 + dVar83 * dVar9;
              *(double *)((long)pdVar43 + lVar64) = dVar83 * dVar11 - dVar9 * dVar69;
            }
          }
        }
        else if ((int)uVar40 < (int)uVar6) {
          if ((pdVar37 < pdVar42 + 4 && pdVar42 < pdVar38 ||
               pdVar37 < pdVar30 + 4 && pdVar30 < pdVar38) || (uVar57 < 4)) {
            pdVar31 = pdVar42;
            pdVar51 = pdVar30;
            pdVar52 = pdVar37;
            do {
              dVar9 = *pdVar31;
              pdVar22 = pdVar31 + 2;
              dVar11 = pdVar51[1];
              dVar69 = *pdVar51;
              pdVar51 = pdVar51 + 2;
              dVar83 = pdVar31[1];
              *pdVar52 = dVar9 * dVar69 - dVar83 * dVar11;
              pdVar52[1] = dVar9 * dVar11 + dVar83 * dVar69;
              pdVar31 = pdVar22;
              pdVar52 = pdVar52 + 2;
            } while (pdVar22 != (double *)((long)pdVar39 + lVar61));
          }
          else {
            if (1 < uVar3) {
              uVar59 = 0;
              pdVar51 = pdVar37;
              pdVar31 = pdVar30;
              pdVar52 = pdVar42;
              do {
                dVar76 = *pdVar52;
                dVar9 = pdVar52[1];
                dVar77 = pdVar52[2];
                dVar83 = pdVar52[3];
                pdVar52 = pdVar52 + 4;
                uVar59 = uVar59 + 1;
                dVar82 = *pdVar31;
                dVar11 = pdVar31[1];
                dVar78 = pdVar31[2];
                dVar70 = pdVar31[3];
                pdVar31 = pdVar31 + 4;
                dVar69 = dVar76 * dVar82;
                dVar75 = dVar77 * dVar78;
                *pdVar51 = dVar69 - dVar9 * dVar69;
                pdVar51[1] = dVar76 * dVar11 + dVar82 * dVar9;
                pdVar51[2] = dVar75 - dVar83 * dVar75;
                pdVar51[3] = dVar77 * dVar70 + dVar78 * dVar83;
                pdVar51 = pdVar51 + 4;
              } while (uVar59 < uVar41);
              if (uVar41 * 2 == uVar57) goto LAB_002a5258;
            }
            dVar69 = *(double *)((long)pdVar44 + lVar64);
            dVar11 = *(double *)((long)pdVar39 + lVar64);
            dVar9 = *(double *)((long)pdVar39 + uVar53);
            dVar83 = *(double *)((long)pdVar44 + uVar53);
            *(double *)((long)pdVar43 + uVar53) = dVar9 * dVar83 - dVar11 * dVar69;
            *(double *)((long)pdVar43 + lVar64) = dVar9 * dVar69 + dVar11 * dVar83;
          }
        }
LAB_002a5258:
        iVar27 = iVar27 + -1;
        pdVar39 = pdVar39 + uVar87;
        pdVar44 = pdVar44 + uVar85;
        pdVar43 = pdVar43 + uVar84;
        pdVar42 = pdVar42 + uVar87;
        pdVar30 = pdVar30 + uVar85;
        pdVar37 = pdVar37 + uVar84;
        pdVar38 = pdVar38 + uVar84;
      } while (iVar27 != -1);
    }
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar26 = *piVar2;
      cVar5 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar21) {
        *piVar2 = iVar26 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (double *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar26 = 0;
    puVar34 = local_20;
    do {
      *puVar34 = 0;
      iVar26 = iVar26 + 1;
      puVar34 = puVar34 + 1;
    } while (iVar26 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar2 = (int *)(local_88 + 0x14);
    do {
      iVar26 = *piVar2;
      cVar5 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar21) {
        *piVar2 = iVar26 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (double *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar26 = 0;
    puVar35 = local_80;
    do {
      *puVar35 = 0;
      iVar26 = iVar26 + 1;
      puVar35 = puVar35 + 1;
    } while (iVar26 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar2 = (int *)(local_e8 + 0x14);
    do {
      iVar26 = *piVar2;
      cVar5 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar21) {
        *piVar2 = iVar26 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = (double *)0x0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar26 = 0;
    puVar35 = local_e0;
    do {
      *puVar35 = 0;
      iVar26 = iVar26 + 1;
      puVar35 = puVar35 + 1;
    } while (iVar26 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002a61c0 (4024 bytes) name=dct

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::dct(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::dct(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  uint uVar1;
  int *piVar2;
  double *pdVar3;
  long lVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  char cVar9;
  int iVar10;
  undefined1 auVar11 [16];
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  ulong *puVar16;
  bool bVar17;
  int iVar18;
  uint uVar19;
  char *pcVar20;
  double *pdVar21;
  undefined8 *puVar22;
  uint *puVar23;
  uint *puVar24;
  uint uVar25;
  int iVar26;
  code *pcVar27;
  undefined1 (*pauVar28) [16];
  uint *puVar29;
  undefined4 *puVar30;
  Mat *pMVar31;
  int iVar32;
  int iVar33;
  ulong uVar34;
  undefined1 (*pauVar35) [16];
  uint uVar36;
  ulong uVar37;
  undefined1 (*pauVar38) [16];
  undefined1 (*pauVar39) [16];
  long lVar40;
  long lVar41;
  uint uVar42;
  long lVar43;
  int iVar44;
  undefined1 *puVar45;
  ulong uVar46;
  undefined1 *puVar47;
  double dVar48;
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  uint uVar55;
  long lVar56;
  long lVar57;
  ulong uVar58;
  ulong uVar59;
  double *pdVar60;
  Mat *local_648;
  int local_638;
  uint local_634;
  ulong local_630;
  ulong local_628;
  uint local_618;
  uint local_608;
  int local_604;
  int local_600;
  Mat *local_5f8;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  uint local_5c0;
  int iStack_5bc;
  undefined4 uStack_5b8;
  undefined4 uStack_5b4;
  long local_5b0;
  undefined8 local_5a8;
  undefined8 local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  long local_588;
  undefined4 *local_580;
  ulong *local_578;
  ulong local_570;
  undefined8 local_568;
  undefined8 local_560;
  undefined8 uStack_558;
  long local_550;
  undefined8 uStack_548;
  undefined8 local_540;
  undefined8 uStack_538;
  undefined8 local_530;
  long lStack_528;
  undefined8 *local_520;
  ulong *local_518;
  ulong local_510;
  ulong uStack_508;
  uint local_500;
  int local_4fc;
  uint local_4f8;
  uint local_4f4;
  long local_4f0;
  undefined8 uStack_4e8;
  undefined8 local_4e0;
  undefined8 uStack_4d8;
  undefined8 local_4d0;
  long lStack_4c8;
  uint *local_4c0;
  ulong *local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  uint local_4a0 [34];
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  iVar18 = _InputArray::kind(param_1);
  uVar5 = param_3 & 1;
  if (iVar18 == 0x10000) {
    pMVar31 = *(Mat **)(param_1 + 8);
    local_580 = &uStack_5b8;
    local_578 = &local_570;
    local_5c0 = *(uint *)pMVar31;
    iStack_5bc = *(int *)(pMVar31 + 4);
    uStack_5b8 = *(undefined4 *)(pMVar31 + 8);
    uStack_5b4 = *(undefined4 *)(pMVar31 + 0xc);
    local_5b0 = *(long *)(pMVar31 + 0x10);
    local_5a8 = *(undefined8 *)(pMVar31 + 0x18);
    local_5a0 = *(undefined8 *)(pMVar31 + 0x20);
    local_598 = *(undefined8 *)(pMVar31 + 0x28);
    local_590 = *(undefined8 *)(pMVar31 + 0x30);
    local_588 = *(long *)(pMVar31 + 0x38);
    local_568 = 0;
    local_570 = 0;
    if (local_588 != 0) {
      piVar2 = (int *)(local_588 + 0x14);
      do {
        cVar9 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar17) {
          *piVar2 = *piVar2 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar31 + 4)) {
      iStack_5bc = 0;
      Mat::copySize((Mat *)&local_5c0,pMVar31);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_5f8 = (Mat *)&local_5c0;
  local_518 = &local_510;
  local_520 = &uStack_558;
  local_560 = CONCAT44(iStack_5bc,local_5c0);
  uStack_558 = CONCAT44(uStack_5b4,uStack_5b8);
  uStack_508 = 0;
  local_510 = 0;
  local_550 = local_5b0;
  uStack_548 = local_5a8;
  local_540 = local_5a0;
  uStack_538 = local_598;
  local_530 = local_590;
  lStack_528 = local_588;
  if (local_588 != 0) {
    piVar2 = (int *)(local_588 + 0x14);
    do {
      cVar9 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar17) {
        *piVar2 = *piVar2 + 1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
  }
  if (iStack_5bc < 3) {
    local_510 = *local_578;
    uStack_508 = local_578[1];
    uVar19 = local_5c0;
    iVar18 = iStack_5bc;
  }
  else {
    local_560 = (ulong)local_5c0;
    Mat::copySize((Mat *)&local_560,local_5f8);
    uVar19 = (uint)local_560;
    iVar18 = local_560._4_4_;
  }
  if (iVar18 < 1) {
    local_638 = 0;
    local_604 = 0;
  }
  else {
    local_604 = (int)local_518[(long)iVar18 + -1];
    local_638 = local_604 << 1;
  }
  local_418 = auStack_408;
  local_410 = 0x408;
  if (1 < (uVar19 & 0xfff) - 5) {
    local_5e0 = 0;
    local_5d8 = 0;
    pcVar20 = (char *)String::allocate((String *)&local_5e0,0x24);
    uVar15 = s_type____CV_32FC1____type____CV_6_00465c38._24_8_;
    uVar14 = s_type____CV_32FC1____type____CV_6_00465c38._16_8_;
    uVar13 = s_type____CV_32FC1____type____CV_6_00465c38._8_8_;
    uVar12 = s_type____CV_32FC1____type____CV_6_00465c38._0_8_;
    *(undefined4 *)(pcVar20 + 0x20) = s_type____CV_32FC1____type____CV_6_00465c38._32_4_;
    *(undefined8 *)pcVar20 = uVar12;
    *(undefined8 *)(pcVar20 + 8) = uVar13;
    *(undefined8 *)(pcVar20 + 0x10) = uVar14;
    *(undefined8 *)(pcVar20 + 0x18) = uVar15;
    error(-0xd7,(String *)&local_5e0,"void cv::dct(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xd92);
    String::deallocate((String *)&local_5e0);
  }
  _OutputArray::create(param_2,(uint)uStack_558,uStack_558._4_4_,uVar19 & 0xfff,-1,false,0);
  iVar18 = _InputArray::kind((_InputArray *)param_2);
  if (iVar18 == 0x10000) {
    pMVar31 = *(Mat **)(param_2 + 8);
    lStack_4c8 = *(long *)(pMVar31 + 0x38);
    local_500 = *(uint *)pMVar31;
    local_4fc = *(int *)(pMVar31 + 4);
    local_4f8 = *(uint *)(pMVar31 + 8);
    local_4f4 = *(uint *)(pMVar31 + 0xc);
    local_4f0 = *(long *)(pMVar31 + 0x10);
    uStack_4e8 = *(undefined8 *)(pMVar31 + 0x18);
    local_4e0 = *(undefined8 *)(pMVar31 + 0x20);
    uStack_4d8 = *(undefined8 *)(pMVar31 + 0x28);
    local_4d0 = *(undefined8 *)(pMVar31 + 0x30);
    local_4c0 = &local_4f8;
    local_4b8 = &local_4b0;
    local_4a8 = 0;
    local_4b0 = 0;
    if (lStack_4c8 != 0) {
      piVar2 = (int *)(lStack_4c8 + 0x14);
      do {
        cVar9 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar17) {
          *piVar2 = *piVar2 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar31 + 4)) {
      local_4fc = 0;
      Mat::copySize((Mat *)&local_500,pMVar31);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_648 = (Mat *)&local_500;
  iVar18 = 2;
  if ((uVar19 & 7) != 6) {
    iVar18 = 0;
  }
  uVar19 = param_3 & 4;
  pcVar27 = (code *)(&PTR_FUN_004f6060)[(int)(iVar18 + uVar5)];
  if (((uint)param_3 >> 2 & 1) == 0) {
    local_634 = uVar19;
    local_608 = uVar19;
    if (((uint)uStack_558 != 1) &&
       (((uStack_558._4_4_ != 1 || (((uint)local_560 >> 0xe & 1) == 0)) ||
        ((local_500 >> 0xe & 1) == 0)))) {
      local_608 = 1;
      local_634 = (uint)(uStack_558._4_4_ == 1);
    }
  }
  else {
    local_608 = 0;
    local_634 = 0;
  }
  uVar34 = (ulong)local_604;
  puVar45 = (undefined1 *)0x0;
  local_600 = local_638 + 4;
  puVar47 = (undefined1 *)0x0;
  lVar43 = 0;
  iVar18 = 0;
  local_618 = 0;
  lVar56 = 0;
  pdVar60 = (double *)0x0;
  lVar57 = 0;
  if (local_634 == 0) {
    uVar58 = local_510;
    uVar59 = local_4b0;
    uVar42 = uStack_558._4_4_;
    uVar55 = (uint)uStack_558;
    local_630 = uVar34;
    local_628 = uVar34;
    if (uStack_558._4_4_ != 1) goto LAB_002a64cc;
    if (uVar19 != 0) goto LAB_002a64cc;
    uVar55 = 1;
    uVar42 = (uint)uStack_558;
    goto LAB_002a64cc;
  }
  do {
    local_630 = local_510;
    uVar58 = uVar34;
    uVar59 = uVar34;
    uVar42 = local_4f8;
    uVar55 = local_4f4;
    local_628 = local_4b0;
LAB_002a64cc:
    lVar40 = local_4f0;
    lVar41 = local_550;
    if (uVar42 != local_618) {
      if ((1 < (int)uVar42) && ((uVar42 & 1) != 0)) {
        local_5d0 = 0;
        local_5c8 = 0;
        puVar22 = (undefined8 *)String::allocate((String *)&local_5d0,0x22);
        uVar15 = _LAB_00465c78;
        uVar14 = DAT_00465c70;
        uVar13 = _LAB_00465c68;
        uVar12 = _LAB_00465c60;
        *(undefined2 *)(puVar22 + 4) = DAT_00465c80;
        *puVar22 = uVar12;
        puVar22[1] = uVar13;
        puVar22[2] = uVar14;
        puVar22[3] = uVar15;
        error(-0xd5,(String *)&local_5d0,"void cv::dct(cv::InputArray, cv::OutputArray, int)",
              "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xdd4);
        String::deallocate((String *)&local_5d0);
      }
      iVar7 = uVar42 * local_604;
      iVar26 = local_638 + ((int)uVar42 / 2) * local_638;
      iVar44 = local_638 + uVar42 * local_600 + iVar26 + iVar7;
      if ((int)uVar42 < 6) {
        bVar17 = true;
        iVar18 = 1;
        uVar25 = uVar42 & 1;
        uVar19 = uVar42;
        local_4a0[0] = uVar42;
      }
      else {
        uVar19 = (int)((uVar42 - 1 ^ uVar42) + 1) >> 1;
        if ((int)uVar19 < 2) {
          iVar18 = 0;
          uVar25 = uVar42;
LAB_002a69bc:
          uVar19 = 3;
          do {
            while( true ) {
              iVar32 = iVar18;
              uVar8 = 0;
              if (uVar19 != 0) {
                uVar8 = (int)uVar25 / (int)uVar19;
              }
              if (uVar25 != uVar19 * uVar8) break;
              local_4a0[iVar32] = uVar19;
              uVar25 = uVar8;
              iVar18 = iVar32 + 1;
              if ((int)uVar8 < 2) goto LAB_002a69e8;
            }
            uVar19 = uVar19 + 2;
            iVar18 = iVar32;
          } while ((int)(uVar19 * uVar19) <= (int)uVar25);
          local_4a0[iVar32] = uVar25;
LAB_002a69e8:
          iVar18 = iVar32 + 1;
          uVar19 = local_4a0[0];
        }
        else {
          local_4a0[0] = uVar19;
          if (uVar42 == uVar19) {
            iVar32 = 0;
            iVar18 = 1;
            uVar19 = uVar42;
          }
          else {
            uVar25 = 0;
            if (uVar19 != 0) {
              uVar25 = (int)uVar42 / (int)uVar19;
            }
            iVar18 = 1;
            if (1 < (int)uVar25) goto LAB_002a69bc;
            iVar32 = 0;
            iVar18 = 1;
          }
        }
        uVar25 = uVar19 & 1;
        uVar8 = uVar25 ^ 1;
        iVar6 = (int)(uVar8 + iVar18) >> 1;
        if ((int)uVar8 < iVar6) {
          lVar56 = (long)(int)uVar8;
          uVar19 = iVar6 - uVar8;
          uVar37 = (ulong)uVar19;
          iVar10 = iVar18 - uVar8;
          lVar43 = (lVar56 + iVar10) * 4;
          if (((long)(lVar43 + uVar37 * -4) < (long)((uVar37 + lVar56) * 4) && lVar56 * 4 < lVar43)
             || (uVar19 < 9)) {
            lVar43 = lVar56 + (iVar10 + -1);
            puVar23 = local_4a0 + lVar43;
            puVar29 = local_4a0 + lVar56;
            do {
              uVar19 = *puVar29;
              *puVar29 = *puVar23;
              puVar24 = puVar23 + -1;
              *puVar23 = uVar19;
              puVar23 = puVar24;
              puVar29 = puVar29 + 1;
            } while (puVar24 !=
                     (uint *)((long)&local_4a8 + (lVar43 - (ulong)(~uVar8 + iVar6)) * 4 + 4));
          }
          else {
            puVar23 = local_4a0 + lVar56;
            uVar25 = -((uint)((ulong)puVar23 >> 2) & 3) & 3;
            if (uVar25 < uVar19) {
              uVar37 = (ulong)uVar25;
            }
            iVar33 = (int)uVar37;
            uVar25 = uVar8;
            if (iVar33 != 0) {
              uVar25 = *puVar23;
              *puVar23 = local_4a0[(int)(uVar8 + iVar10 + -1)];
              local_4a0[(int)(uVar8 + iVar10 + -1)] = uVar25;
              uVar25 = uVar8 + 1;
              if (iVar33 != 1) {
                uVar25 = local_4a0[lVar56 + 1];
                local_4a0[lVar56 + 1] = local_4a0[(int)(uVar8 + (iVar18 - (uVar8 + 1)) + -1)];
                local_4a0[(int)(uVar8 + (iVar18 - (uVar8 + 1)) + -1)] = uVar25;
                uVar25 = uVar8 + 2;
                if (iVar33 == 3) {
                  uVar25 = local_4a0[lVar56 + 2];
                  local_4a0[lVar56 + 2] = local_4a0[(int)(uVar8 + (iVar18 - (uVar8 + 2)) + -1)];
                  local_4a0[(int)(uVar8 + (iVar18 - (uVar8 + 2)) + -1)] = uVar25;
                  uVar25 = uVar8 + 3;
                }
              }
            }
            pauVar35 = (undefined1 (*) [16])((long)&local_4b0 + lVar43 + ~uVar37 * 4 + 4);
            uVar1 = ((uVar19 - iVar33) - 4 >> 2) + 1;
            uVar36 = 0;
            iVar10 = uVar1 * 4;
            pauVar28 = (undefined1 (*) [16])(local_4a0 + uVar37 + lVar56);
            pauVar38 = pauVar35;
            pauVar39 = (undefined1 (*) [16])(local_4a0 + uVar37 + lVar56);
            do {
              auVar11 = *pauVar35;
              uVar36 = uVar36 + 1;
              pauVar35 = pauVar35 + -1;
              auVar49._8_8_ = _UNK_002a7238;
              auVar49._0_8_ = _DAT_002a7230;
              auVar50 = a64_TBL(ZEXT816(0),auVar11,auVar49);
              auVar11._8_8_ = _UNK_002a7238;
              auVar11._0_8_ = _DAT_002a7230;
              auVar49 = a64_TBL(ZEXT816(0),*pauVar28,auVar11);
              *(long *)(*pauVar39 + 8) = auVar50._8_8_;
              *(long *)*pauVar39 = auVar50._0_8_;
              *(long *)(*pauVar38 + 8) = auVar49._8_8_;
              *(long *)*pauVar38 = auVar49._0_8_;
              pauVar38 = pauVar38 + -1;
              pauVar28 = pauVar28 + 1;
              pauVar39 = pauVar39 + 1;
            } while (uVar36 < uVar1);
            uVar25 = iVar10 + uVar25;
            if (iVar10 != uVar19 - iVar33) {
              uVar37 = -(ulong)(uVar25 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar25 << 2;
              uVar19 = *(uint *)((long)local_4a0 + uVar37);
              *(uint *)((long)local_4a0 + uVar37) = local_4a0[(int)(uVar8 + (iVar18 - uVar25) + -1)]
              ;
              local_4a0[(int)(uVar8 + (iVar18 - uVar25) + -1)] = uVar19;
              if ((int)(uVar25 + 1) < iVar6) {
                puVar23 = (uint *)((long)local_4a0 + uVar37 + 4);
                uVar19 = *puVar23;
                *puVar23 = local_4a0[(int)(uVar8 + (iVar18 - (uVar25 + 1)) + -1)];
                local_4a0[(int)(uVar8 + (iVar18 - (uVar25 + 1)) + -1)] = uVar19;
                if ((int)(uVar25 + 2) < iVar6) {
                  puVar23 = (uint *)((long)local_4a0 + uVar37 + 8);
                  uVar19 = *puVar23;
                  *puVar23 = local_4a0[(int)(uVar8 + (iVar18 - (uVar25 + 2)) + -1)];
                  local_4a0[(int)(uVar8 + (iVar18 - (uVar25 + 2)) + -1)] = uVar19;
                }
              }
            }
          }
          uVar25 = local_4a0[0] & 1;
          uVar19 = local_4a0[0];
        }
        bVar17 = local_4a0[iVar32] == uVar19;
        if (1 < iVar18) {
          if (uVar25 == 0) {
            uVar25 = local_4a0[1] & 1;
            uVar19 = local_4a0[1];
          }
          else {
            uVar25 = 1;
          }
        }
      }
      if ((uVar25 != 0) && (5 < (int)uVar19)) {
        iVar44 = iVar44 + local_638 + uVar19 * local_638;
      }
      iVar32 = iVar44 + iVar7;
      if (bVar17) {
        iVar32 = iVar44;
      }
      uVar46 = (ulong)(iVar32 + 0x20);
      puVar47 = local_418;
      uVar37 = uVar46;
      if (local_410 < uVar46) {
        if (local_418 != auStack_408) {
          if (local_418 != (undefined1 *)0x0) {
            operator_delete__(local_418);
          }
          local_418 = auStack_408;
          local_410 = 0x408;
        }
        puVar47 = auStack_408;
        uVar37 = local_410;
        if (0x408 < uVar46) {
          local_418 = operator_new__(uVar46);
          puVar47 = local_418;
          uVar37 = uVar46;
        }
      }
      local_410 = uVar37;
      puVar45 = puVar47 + (int)(uVar42 * local_638);
      FUN_0029da38(uVar42,iVar18,local_4a0,puVar45,local_638,puVar47,uVar5);
      pdVar60 = (double *)((ulong)(puVar45 + (long)(int)uVar42 * 4 + 0xf) & 0xfffffffffffffff0);
      lVar43 = (long)pdVar60 + (long)iVar26;
      lVar4 = lVar43 + iVar7;
      lVar56 = lVar4;
      lVar57 = lVar43;
      if (!bVar17) {
        lVar56 = lVar4 + iVar7;
        lVar57 = lVar4;
      }
      local_618 = uVar42;
      if (uVar42 != 1) {
        iVar44 = (int)uVar42 >> 1;
        if ((uVar42 - 1 & uVar42) == 0) {
          if (uVar42 < 2) {
            iVar26 = 2;
            uVar19 = 0;
          }
          else {
            uVar19 = 0;
            do {
              uVar25 = uVar19;
              uVar19 = uVar25 + 1;
            } while ((uint)(1 << (ulong)(uVar19 & 0x1f)) < uVar42);
            iVar26 = uVar25 + 3;
          }
          dVar53 = 2.0;
          if (uVar5 != 0) {
            dVar53 = 1.0;
          }
          dVar52 = (double)(&DAT_00465650)[(long)iVar26 * 2];
          dVar53 = dVar53 * *(double *)(&DAT_00467700 + (long)(int)uVar19 * 8);
          dVar54 = -(double)(&DAT_00465658)[(long)iVar26 * 2];
        }
        else {
          dVar54 = 2.0;
          dVar52 = 1.0 / (double)(int)(uVar42 << 1);
          if (uVar5 != 0) {
            dVar54 = 1.0;
          }
          dVar53 = SQRT(dVar52);
          if (NAN(dVar53)) {
            dVar53 = ::sqrt(dVar52);
          }
          dVar53 = dVar53 * dVar54;
          dVar54 = sin(dVar52 * DAT_002a7240);
          dVar51 = 1.0 - dVar54 * dVar54;
          dVar52 = SQRT(dVar51);
          if (NAN(dVar52)) {
            dVar52 = ::sqrt(dVar51);
          }
        }
        if (local_638 == 0x10) {
          if (-1 < iVar44) {
            dVar51 = 0.0;
            pdVar21 = pdVar60;
            do {
              dVar48 = dVar51 * dVar54;
              pdVar3 = pdVar21 + 2;
              *pdVar21 = dVar53;
              pdVar21[1] = dVar51;
              dVar51 = dVar51 * dVar52 + dVar54 * dVar53;
              dVar53 = dVar53 * dVar52 - dVar48;
              pdVar21 = pdVar3;
            } while (pdVar3 != pdVar60 + (long)iVar44 * 2 + 2);
          }
        }
        else {
          dVar53 = (double)(float)dVar53;
          if (-1 < iVar44) {
            dVar51 = 0.0;
            pdVar21 = pdVar60;
            do {
              pdVar3 = pdVar21 + 1;
              dVar48 = dVar54 * dVar51;
              *(float *)pdVar21 = (float)dVar53;
              *(float *)((long)pdVar21 + 4) = (float)dVar51;
              dVar51 = dVar52 * dVar51 + dVar53 * dVar54;
              dVar53 = dVar52 * dVar53 - dVar48;
              pdVar21 = pdVar3;
            } while (pdVar3 != pdVar60 + (long)iVar44 + 1);
          }
        }
      }
    }
    if (0 < (int)uVar55) {
      uVar19 = 0;
      do {
        (*pcVar27)(lVar41,local_630 & 0xffffffff,lVar43,lVar57,lVar40,local_628 & 0xffffffff,uVar42,
                   iVar18,local_4a0,puVar45,puVar47,pdVar60,0,lVar56);
        uVar19 = uVar19 + 1;
        lVar41 = lVar41 + uVar58;
        lVar40 = lVar40 + uVar59;
      } while (uVar19 != uVar55);
    }
    if (lStack_4c8 != 0) {
      piVar2 = (int *)(lStack_4c8 + 0x14);
      do {
        cVar9 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar17) {
          *piVar2 = *piVar2 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (lStack_528 == 0) {
LAB_002a6794:
      if (0 < local_560._4_4_) goto LAB_002a67b4;
LAB_002a68b8:
      local_560 = CONCAT44(local_560._4_4_,local_500);
LAB_002a67e4:
      puVar16 = local_4b8;
      if (2 < local_4fc) goto LAB_002a6880;
      uStack_558 = CONCAT44(local_4f4,local_4f8);
      local_560 = CONCAT44(local_4fc,(uint)local_560);
      *local_518 = *local_4b8;
      local_518[1] = puVar16[1];
    }
    else {
      piVar2 = (int *)(lStack_528 + 0x14);
      do {
        iVar44 = *piVar2;
        cVar9 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar17) {
          *piVar2 = iVar44 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if (iVar44 != 1) goto LAB_002a6794;
      Mat::deallocate((Mat *)&local_560);
      if (local_560._4_4_ < 1) goto LAB_002a68b8;
LAB_002a67b4:
      iVar44 = 0;
      puVar22 = local_520;
      do {
        *(undefined4 *)puVar22 = 0;
        iVar44 = iVar44 + 1;
        puVar22 = (undefined8 *)((long)puVar22 + 4);
      } while (iVar44 < local_560._4_4_);
      local_560 = CONCAT44(local_560._4_4_,local_500);
      if (local_560._4_4_ < 3) goto LAB_002a67e4;
LAB_002a6880:
      lStack_528 = 0;
      uStack_538 = 0;
      local_540 = 0;
      uStack_548 = 0;
      local_550 = 0;
      Mat::copySize((Mat *)&local_560,local_648);
    }
    uStack_538 = uStack_4d8;
    local_540 = local_4e0;
    lStack_528 = lStack_4c8;
    local_530 = local_4d0;
    uStack_548 = uStack_4e8;
    local_550 = local_4f0;
    if (local_608 <= local_634) {
      if (lStack_4c8 != 0) {
        piVar2 = (int *)(lStack_4c8 + 0x14);
        do {
          iVar18 = *piVar2;
          cVar9 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar17) {
            *piVar2 = iVar18 + -1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate(local_648);
        }
      }
      lStack_4c8 = 0;
      local_4f0 = 0;
      uStack_4d8 = 0;
      local_4e0 = 0;
      uStack_4e8 = 0;
      if (0 < local_4fc) {
        iVar18 = 0;
        puVar23 = local_4c0;
        do {
          iVar18 = iVar18 + 1;
          *puVar23 = 0;
          puVar23 = puVar23 + 1;
        } while (iVar18 < local_4fc);
      }
      if (local_4b8 != &local_4b0) {
        fastFree(local_4b8);
      }
      if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
        operator_delete__(local_418);
      }
      if (lStack_528 != 0) {
        piVar2 = (int *)(lStack_528 + 0x14);
        do {
          iVar18 = *piVar2;
          cVar9 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar17) {
            *piVar2 = iVar18 + -1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_560);
        }
      }
      lStack_528 = 0;
      local_550 = 0;
      uStack_538 = 0;
      local_540 = 0;
      uStack_548 = 0;
      if (0 < local_560._4_4_) {
        iVar18 = 0;
        puVar22 = local_520;
        do {
          *(undefined4 *)puVar22 = 0;
          iVar18 = iVar18 + 1;
          puVar22 = (undefined8 *)((long)puVar22 + 4);
        } while (iVar18 < local_560._4_4_);
      }
      if (local_518 != &local_510) {
        fastFree(local_518);
      }
      if (local_588 != 0) {
        piVar2 = (int *)(local_588 + 0x14);
        do {
          iVar18 = *piVar2;
          cVar9 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar17) {
            *piVar2 = iVar18 + -1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate(local_5f8);
        }
      }
      local_588 = 0;
      local_5b0 = 0;
      local_598 = 0;
      local_5a0 = 0;
      local_5a8 = 0;
      if (0 < iStack_5bc) {
        iVar18 = 0;
        puVar30 = local_580;
        do {
          iVar18 = iVar18 + 1;
          *puVar30 = 0;
          puVar30 = puVar30 + 1;
        } while (iVar18 < iStack_5bc);
      }
      if (local_578 != &local_570) {
        fastFree(local_578);
      }
      return;
    }
    local_634 = 1;
  } while( true );
}


==================================================================

### FUNC 002a7250 (8 bytes) name=idct

/* cv::idct(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::idct(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  dct(param_1,param_2,param_3 | 1);
  return;
}


==================================================================

### FUNC 002a7258 (124 bytes) name=getOptimalDFTSize

/* cv::getOptimalDFTSize(int) */

int cv::getOptimalDFTSize(int param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  if (0x7eb4959f < (uint)param_1) {
    return -1;
  }
  iVar5 = 0x672;
  iVar4 = 0;
  do {
    iVar1 = iVar4 + iVar5 >> 1;
    iVar2 = *(int *)(&DAT_00465cf0 + (long)iVar1 * 4);
    while (iVar3 = iVar1, param_1 <= iVar2) {
      iVar1 = iVar4 + iVar3 >> 1;
      if (iVar3 <= iVar4) {
        return iVar2;
      }
      iVar2 = *(int *)(&DAT_00465cf0 + (long)iVar1 * 4);
      iVar5 = iVar3;
    }
    iVar4 = iVar3 + 1;
  } while (iVar4 < iVar5);
  return *(int *)(&DAT_00465cf0 + (long)iVar5 * 4);
}


==================================================================

### FUNC 002a72d4 (1160 bytes) name=cvDFT

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void cvDFT(cv *param_1,cv *param_2,uint param_3,int param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char *pcVar5;
  int *piVar6;
  int *piVar7;
  int iVar8;
  uint uVar9;
  undefined8 local_150;
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = (int *)&uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  uStack_b8 = uStack_118;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar6 = (int *)(local_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = *piVar6 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_68 = local_d8[1];
    iVar8 = local_20[-1];
    if (iVar8 == iStack_11c) {
LAB_002a76dc:
      if (iVar8 == 2) {
        if ((*local_20 == *local_80) && (local_20[1] == local_80[1])) goto LAB_002a743c;
      }
      else {
        if (iVar8 < 1) goto LAB_002a743c;
        if (*local_20 == *local_80) {
          piVar6 = local_20;
          piVar7 = local_80;
          do {
            piVar7 = piVar7 + 1;
            if (piVar6 == local_20 + (iVar8 - 1)) goto LAB_002a743c;
            piVar6 = piVar6 + 1;
          } while (*piVar6 == *piVar7);
        }
      }
    }
  }
  else {
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    iVar8 = local_20[-1];
    if (iVar8 == local_80[-1]) goto LAB_002a76dc;
  }
  local_150 = 0;
  local_148 = (Mat *)0x0;
  pcVar5 = (char *)cv::String::allocate((String *)&local_150,0x14);
  uVar4 = s_src_size____dst_size_00465c88._8_8_;
  uVar3 = s_src_size____dst_size_00465c88._0_8_;
  *(undefined4 *)(pcVar5 + 0x10) = s_src_size____dst_size_00465c88._16_4_;
  *(undefined8 *)pcVar5 = uVar3;
  *(undefined8 *)(pcVar5 + 8) = uVar4;
  cv::error(-0xd7,(String *)&local_150,"void cvDFT(const CvArr*, CvArr*, int, int)",
            "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xee8);
  cv::String::deallocate((String *)&local_150);
LAB_002a743c:
  param_3 = param_3 & 7;
  uVar9 = param_3;
  if ((local_60 & 0xfff) != ((uint)local_c0 & 0xfff)) {
    uVar9 = param_3 | 0x20;
    if (((uint)local_c0 >> 3 & 0x1ff) == 1) {
      uVar9 = param_3 | 0x10;
    }
  }
  local_150 = CONCAT44(local_150._4_4_,0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_148 = (Mat *)&local_60;
  local_130 = (Mat *)&local_c0;
  cv::dft((_InputArray *)&local_150,(_OutputArray *)&local_138,uVar9,param_4);
  if (local_b0 != local_110) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_138,0x15);
    cVar1 = s_dst_data____dst0_data_00465ca0[0x14];
    uVar4 = s_dst_data____dst0_data_00465ca0._8_8_;
    uVar3 = s_dst_data____dst0_data_00465ca0._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_dst_data____dst0_data_00465ca0._16_4_;
    pcVar5[0x14] = cVar1;
    *(undefined8 *)pcVar5 = uVar3;
    *(undefined8 *)(pcVar5 + 8) = uVar4;
    cv::error(-0xd7,(String *)&local_138,"void cvDFT(const CvArr*, CvArr*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xef3);
    cv::String::deallocate((String *)&local_138);
  }
  if (local_88 != 0) {
    piVar6 = (int *)(local_88 + 0x14);
    do {
      iVar8 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar8 = 0;
    piVar6 = local_80;
    do {
      *piVar6 = 0;
      iVar8 = iVar8 + 1;
      piVar6 = piVar6 + 1;
    } while (iVar8 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar6 = (int *)(local_e8 + 0x14);
    do {
      iVar8 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar8 = 0;
    do {
      *local_e0 = 0;
      iVar8 = iVar8 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar8 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar6 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar8 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002a77f0 (884 bytes) name=cvMulSpectrums

void cvMulSpectrums(cv *param_1,cv *param_2,cv *param_3,uint param_4,undefined8 param_5,
                   AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char *pcVar9;
  int *piVar10;
  int iVar11;
  int *piVar12;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  iVar11 = local_e0[-1];
  if (iVar11 == local_20[-1]) {
    if (iVar11 == 2) {
                    /* try { // try from 002a7b4c to 003a7b4f has its CatchHandler @ 002a7e60 */
                    /* try { // try from 002a7b54 to 003a7d9b has its CatchHandler @ 002a7ac0 */
      if ((*local_e0 == *local_20) && (local_e0[1] == local_20[1])) goto LAB_002a7b20;
    }
    else if (iVar11 < 1) {
LAB_002a7b20:
      if ((local_120 & 0xfff) == (local_60 & 0xfff)) goto LAB_002a78ec;
    }
    else if (*local_e0 == *local_20) {
      piVar10 = local_e0;
      piVar12 = local_20;
      do {
        piVar12 = piVar12 + 1;
        if (piVar10 == local_e0 + (iVar11 - 1)) goto LAB_002a7b20;
        piVar10 = piVar10 + 1;
                    /* try { // try from 002a7b10 to 003a7b13 has its CatchHandler @ 002a7ac0 */
      } while (*piVar10 == *piVar12);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  pcVar9 = (char *)cv::String::allocate((String *)&local_138,0x32);
  uVar8 = s_srcA_size____dst_size____srcA_ty_00465cb8._40_8_;
  uVar7 = s_srcA_size____dst_size____srcA_ty_00465cb8._32_8_;
  uVar6 = s_srcA_size____dst_size____srcA_ty_00465cb8._24_8_;
  uVar5 = s_srcA_size____dst_size____srcA_ty_00465cb8._16_8_;
  uVar4 = s_srcA_size____dst_size____srcA_ty_00465cb8._8_8_;
  uVar3 = s_srcA_size____dst_size____srcA_ty_00465cb8._0_8_;
  *(undefined2 *)(pcVar9 + 0x30) = s_srcA_size____dst_size____srcA_ty_00465cb8._48_2_;
  *(undefined8 *)pcVar9 = uVar3;
  *(undefined8 *)(pcVar9 + 8) = uVar4;
  *(undefined8 *)(pcVar9 + 0x10) = uVar5;
  *(undefined8 *)(pcVar9 + 0x18) = uVar6;
  *(undefined8 *)(pcVar9 + 0x20) = uVar7;
  *(undefined8 *)(pcVar9 + 0x28) = uVar8;
  cv::error(-0xd7,(String *)&local_138,
            "void cvMulSpectrums(const CvArr*, const CvArr*, CvArr*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xefe);
  cv::String::deallocate((String *)&local_138);
LAB_002a78ec:
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  local_148 = aMStack_c0;
  local_130 = (Mat *)&local_60;
  cv::mulSpectrums((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138,
                   param_4 & 4,(bool)((byte)(param_4 >> 3) & 1));
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
                    /* catch() { ... } // from try @ 002a79dc with catch @ 002a7980
                       catch() { ... } // from try @ 002a7a38 with catch @ 002a7980
                       catch() { ... } // from try @ 002a7abc with catch @ 002a7980 */
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
                    /* catch() { ... } // from try @ 002a7b10 with catch @ 002a7ac0
                       catch() { ... } // from try @ 002a7b54 with catch @ 002a7ac0
                       catch() { ... } // from try @ 002a7e70 with catch @ 002a7ac0 */
      cv::Mat::deallocate(aMStack_c0);
    }
  }
                    /* try { // try from 002a79dc to 003a79df has its CatchHandler @ 002a7980 */
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
                    /* try { // try from 002a7a30 to 003a7a33 has its CatchHandler @ 002a7aac */
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
                    /* try { // try from 002a7a38 to 003a7a6f has its CatchHandler @ 002a7980 */
      iVar11 = *piVar10;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar2) {
        *piVar10 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
                    /* try { // try from 002a7abc to 003a7abf has its CatchHandler @ 002a7980 */
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar11 = 0;
    do {
      *local_e0 = 0;
      iVar11 = iVar11 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar11 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
                    /* catch() { ... } // from try @ 002a7a30 with catch @ 002a7aac */
  return;
}


==================================================================

### FUNC 002a7bec (684 bytes) name=cvDCT

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvDCT(cv *param_1,cv *param_2,uint param_3,undefined8 param_4,undefined8 param_5,
          AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *puVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  iVar10 = local_80[-1];
  if (iVar10 == local_20[-1]) {
    if (iVar10 == 2) {
                    /* catch() { ... } // from try @ 002a7e9c with catch @ 002a7e74
                       catch() { ... } // from try @ 002a8014 with catch @ 002a7e74
                       catch() { ... } // from try @ 002a822c with catch @ 002a7e74
                       catch() { ... } // from try @ 002a8284 with catch @ 002a7e74 */
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002a7e54;
    }
    else if (iVar10 < 1) {
LAB_002a7e54:
                    /* catch() { ... } // from try @ 002a7b4c with catch @ 002a7e60 */
      if ((local_c0 & 0xfff) == (local_60 & 0xfff)) goto LAB_002a7cbc;
    }
    else if (*local_80 == *local_20) {
      piVar9 = local_80;
      piVar11 = local_20;
      do {
        piVar11 = piVar11 + 1;
        if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002a7e54;
        piVar9 = piVar9 + 1;
      } while (*piVar9 == *piVar11);
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  puVar8 = (undefined8 *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_t_type___0045fdf8._0_8_;
  uVar6 = _LAB_0045fdf0;
  uVar5 = _LAB_0045fde8;
  uVar4 = DAT_0045fde0;
  uVar3 = DAT_0045fdd8;
  *puVar8 = DAT_0045fdd0;
  puVar8[1] = uVar3;
  puVar8[2] = uVar4;
  puVar8[3] = uVar5;
  puVar8[4] = uVar6;
  puVar8[5] = uVar7;
  cv::error(-0xd7,(String *)&local_d8,"void cvDCT(const CvArr*, CvArr*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/dxt.cpp",0xf0a);
  cv::String::deallocate((String *)&local_d8);
LAB_002a7cbc:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::dct((_InputArray *)local_f0,(_OutputArray *)&local_d8,param_3 & 5);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002a7ef8 (4 bytes) name=cvGetOptimalDFTSize

void cv::cvGetOptimalDFTSize(int param_1)

{
  (*(code *)PTR_getOptimalDFTSize_00501280)(param_1);
  return;
}


==================================================================

### FUNC 002a7f00 (2544 bytes) name=FUN_002a7f00

void FUN_002a7f00(uint param_1,uint param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,char param_7,long param_8,uint param_9,double *param_10,uint param_11
                 ,uint param_12,double *param_13,uint param_14,double *param_15)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  double *pdVar18;
  ulong uVar19;
  double *pdVar20;
  ulong uVar21;
  double *pdVar22;
  double *pdVar23;
  uint uVar24;
  double *pdVar25;
  long lVar26;
  double *pdVar27;
  long lVar28;
  double *pdVar29;
  uint uVar30;
  ulong uVar31;
  ulong uVar32;
  long lVar33;
  uint uVar34;
  int iVar35;
  ulong uVar36;
  ulong uVar37;
  long lVar38;
  uint uVar39;
  int iVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  double dVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  double *local_e8;
  uint local_d4;
  
  uVar36 = param_6 & 0xffffffff;
  uVar37 = 1;
  if (param_7 == '\0') {
    uVar37 = param_6 & 0xffffffff;
    uVar36 = 1;
  }
  uVar6 = param_1;
  if ((int)param_2 < (int)param_1) {
    uVar6 = param_2;
  }
  if (param_10 == (double *)0x0) {
    param_12 = param_1;
  }
  if (0 < (int)param_2) {
                    /* try { // try from 002a7fa0 to 003a7fa3 has its CatchHandler @ 002a8288 */
    uVar39 = 0;
    pdVar25 = param_13;
    if ((int)param_12 < 1) {
      do {
        uVar39 = uVar39 + 1;
      } while (uVar39 != param_2);
    }
    else {
      do {
        uVar39 = uVar39 + 1;
        memset(pdVar25,0,((ulong)(param_12 - 1) + 1) * 8);
        pdVar25 = pdVar25 + (int)param_14;
      } while (uVar39 != param_2);
    }
  }
  if (0 < (int)uVar6) {
    dVar41 = 0.0;
    uVar19 = -((param_4 & 0xffffffff) >> 0x1f) & 0xfffffff800000000 | (param_4 & 0xffffffff) << 3;
    uVar39 = 0;
    pdVar25 = param_3;
    do {
      uVar39 = uVar39 + 1;
      dVar43 = *pdVar25;
      pdVar25 = (double *)((long)pdVar25 + uVar19);
      dVar41 = dVar41 + dVar43;
                    /* try { // try from 002a8014 to 003a8037 has its CatchHandler @ 002a7e74 */
    } while (uVar39 != uVar6);
    uVar13 = param_12 - 4 >> 2;
    uVar39 = uVar13 + 1;
                    /* try { // try from 002a8040 to 003a8043 has its CatchHandler @ 002a8288 */
    uVar31 = -(ulong)(param_11 >> 0x1f) & 0xfffffff800000000 | (ulong)param_11 << 3;
    iVar14 = param_12 - 3;
    uVar32 = -(ulong)(param_14 >> 0x1f) & 0xfffffff800000000 | (ulong)param_14 << 3;
    uVar11 = uVar39 * 4;
    uVar15 = param_12 - 1;
    if (iVar14 < 1) {
      uVar11 = 0;
    }
    uVar37 = -(uVar37 >> 0x1f) & 0xfffffff800000000 | uVar37 << 3;
    lVar26 = (long)(int)uVar11;
    lVar4 = lVar26 + 2;
    uVar16 = param_12 - uVar11;
    pdVar25 = param_15 + lVar26;
    uVar10 = (uint)((ulong)pdVar25 >> 3) & 1;
    uVar8 = (uint)((ulong)param_15 >> 3) & 1;
    uVar7 = uVar16;
    if (uVar10 < uVar16) {
      uVar7 = uVar10;
    }
    uVar10 = param_12;
    if ((int)param_12 < 1) {
      uVar10 = 1;
    }
    iVar17 = uVar16 - uVar7;
    uVar1 = uVar10;
    if (uVar8 < uVar10) {
      uVar1 = uVar8;
    }
    uVar8 = uVar10;
    if (3 < uVar10) {
      uVar8 = uVar1;
    }
    uVar1 = ((uVar10 - uVar8) - 2 >> 1) + 1;
    dVar41 = dVar41 * DAT_002a88f0;
    uVar2 = (iVar17 - 2U >> 1) + 1;
    iVar12 = uVar2 * 2;
    uVar9 = uVar15;
    if ((int)param_12 < 1) {
      uVar9 = 0;
    }
    iVar40 = uVar1 * 2;
    local_d4 = 0;
    lVar38 = ((ulong)(uVar15 - uVar11) + 1) * 8;
    pdVar5 = param_15 + lVar26;
                    /* try { // try from 002a81bc to 003a81bf has its CatchHandler @ 002a8290 */
    local_e8 = param_5;
    do {
      if (dVar41 < ABS(*param_3)) {
        dVar43 = 1.0 / *param_3;
        if (param_12 == 1) {
          if (param_10 == (double *)0x0) {
            dVar48 = *local_e8;
          }
          else {
                    /* try { // try from 002a8804 to 003a8807 has its CatchHandler @ 002a889c */
            dVar48 = 0.0;
            if (0 < (int)param_1) {
              uVar34 = 0;
              pdVar23 = param_10;
              pdVar27 = local_e8;
              do {
                uVar34 = uVar34 + 1;
                dVar44 = *pdVar27;
                dVar42 = *pdVar23;
                pdVar27 = (double *)((long)pdVar27 + uVar37);
                pdVar23 = (double *)((long)pdVar23 + uVar31);
                dVar48 = dVar48 + dVar42 * dVar44;
              } while (uVar34 != param_1);
            }
          }
          if (0 < (int)param_2) {
            lVar33 = 0;
            pdVar27 = param_13;
            do {
              lVar28 = lVar33 * 8;
              lVar33 = lVar33 + 1;
              *pdVar27 = *pdVar27 + *(double *)(param_8 + lVar28) * dVar43 * dVar48;
                    /* try { // try from 002a8878 to 003a8897 has its CatchHandler @ 002a877c */
              pdVar27 = (double *)((long)pdVar27 + uVar32);
            } while ((int)lVar33 < (int)param_2);
          }
        }
        else {
          if (param_10 == (double *)0x0) {
            if (0 < (int)param_12) {
              lVar33 = 0;
                    /* catch() { ... } // from try @ 002a8804 with catch @ 002a889c */
              pdVar27 = local_e8;
              do {
                dVar48 = *pdVar27;
                pdVar27 = (double *)((long)pdVar27 + uVar37);
                param_15[lVar33] = dVar43 * dVar48;
                lVar33 = lVar33 + 1;
              } while ((int)lVar33 < (int)param_12);
            }
          }
          else if ((int)param_12 < 1) {
                    /* try { // try from 002a88c0 to 003a88c3 has its CatchHandler @ 002a877c */
                    /* catch() { ... } // from try @ 002a8940 with catch @ 002a88c4
                       catch() { ... } // from try @ 002a8984 with catch @ 002a88c4
                       catch() { ... } // from try @ 002a8a50 with catch @ 002a88c4
                       catch() { ... } // from try @ 002a8b2c with catch @ 002a88c4
                       catch() { ... } // from try @ 002a8b40 with catch @ 002a88c4 */
            if (0 < (int)param_1) goto LAB_002a8268;
          }
          else {
                    /* try { // try from 002a8200 to 003a8203 has its CatchHandler @ 002a8234 */
                    /* try { // try from 002a8208 to 003a820b has its CatchHandler @ 002a8290 */
                    /* try { // try from 002a8218 to 003a821b has its CatchHandler @ 002a8288 */
                    /* try { // try from 002a822c to 003a822f has its CatchHandler @ 002a7e74 */
            memset(param_15,0,((ulong)uVar15 + 1) * 8);
                    /* catch() { ... } // from try @ 002a8200 with catch @ 002a8234 */
            if (0 < (int)param_1) {
LAB_002a8268:
                    /* try { // try from 002a8284 to 003a8287 has its CatchHandler @ 002a7e74 */
                    /* catch() { ... } // from try @ 002a7ec0 with catch @ 002a8288
                       catch() { ... } // from try @ 002a7fa0 with catch @ 002a8288
                       catch() { ... } // from try @ 002a8040 with catch @ 002a8288
                       catch() { ... } // from try @ 002a8218 with catch @ 002a8288 */
                    /* catch() { ... } // from try @ 002a7ef0 with catch @ 002a8290
                       catch() { ... } // from try @ 002a81bc with catch @ 002a8290
                       catch() { ... } // from try @ 002a8208 with catch @ 002a8290 */
                    /* catch() { ... } // from try @ 002a82d4 with catch @ 002a8298
                       catch() { ... } // from try @ 002a8340 with catch @ 002a8298
                       catch() { ... } // from try @ 002a8358 with catch @ 002a8298 */
              iVar35 = 0;
              pdVar23 = local_e8;
              pdVar27 = param_10;
              do {
                dVar48 = *pdVar23;
                if (0 < iVar14) {
                    /* try { // try from 002a82d4 to 003a82ff has its CatchHandler @ 002a8298 */
                  if ((param_15 < pdVar27 + 8 && pdVar27 < param_15 + 8) || (uVar39 < 3)) {
                    /* try { // try from 002a8778 to 003a877b has its CatchHandler @ 002a8588 */
                    /* catch() { ... } // from try @ 002a87c8 with catch @ 002a877c
                       catch() { ... } // from try @ 002a8878 with catch @ 002a877c
                       catch() { ... } // from try @ 002a88c0 with catch @ 002a877c */
                    pdVar22 = param_15;
                    pdVar29 = pdVar27 + 1;
                    do {
                      pdVar20 = pdVar29 + 4;
                      dVar42 = pdVar29[-1];
                      pdVar22[1] = pdVar22[1] + *pdVar29 * dVar48;
                      *pdVar22 = *pdVar22 + dVar42 * dVar48;
                      dVar42 = pdVar29[1];
                    /* try { // try from 002a87c8 to 003a87cb has its CatchHandler @ 002a877c */
                      pdVar22[3] = pdVar22[3] + pdVar29[2] * dVar48;
                      pdVar22[2] = pdVar22[2] + dVar42 * dVar48;
                      pdVar22 = pdVar22 + 4;
                      pdVar29 = pdVar20;
                    } while (pdVar20 != pdVar27 + (ulong)uVar13 * 4 + 5);
                  }
                  else {
                    pdVar22 = param_15 + 2;
                    uVar34 = 0;
                    pdVar20 = param_15;
                    pdVar29 = pdVar27;
                    do {
                      pdVar18 = pdVar29 + 1;
                      dVar47 = *pdVar29;
                      uVar34 = uVar34 + 1;
                      dVar44 = pdVar22[1];
                      dVar42 = *pdVar22;
                      dVar46 = pdVar29[3];
                      dVar45 = pdVar29[2];
                      pdVar29 = pdVar29 + 4;
                      pdVar20[1] = pdVar20[1] + dVar48 * *pdVar18;
                      *pdVar20 = *pdVar20 + dVar48 * dVar47;
                      pdVar20 = pdVar20 + 4;
                      pdVar22[1] = dVar44 + dVar48 * dVar46;
                      *pdVar22 = dVar42 + dVar48 * dVar45;
                      pdVar22 = pdVar22 + 4;
                    } while (uVar34 < uVar39);
                  }
                }
                    /* try { // try from 002a8338 to 003a833b has its CatchHandler @ 002a8348 */
                if ((int)uVar11 < (int)param_12) {
                    /* try { // try from 002a8340 to 003a8343 has its CatchHandler @ 002a8298 */
                    /* catch() { ... } // from try @ 002a8338 with catch @ 002a8348 */
                    /* try { // try from 002a8358 to 003a835b has its CatchHandler @ 002a8298 */
                    /* catch() { ... } // from try @ 002a83fc with catch @ 002a835c */
                  if ((pdVar27 + lVar26 < param_15 + lVar4 && pdVar25 < pdVar27 + lVar4) ||
                     (uVar16 < 7)) {
                    lVar33 = 0;
                    do {
                      *(double *)((long)pdVar25 + lVar33) =
                           *(double *)((long)pdVar25 + lVar33) +
                           *(double *)((long)(pdVar27 + lVar26) + lVar33) * dVar48;
                      lVar33 = lVar33 + 8;
                    } while (lVar33 != lVar38);
                  }
                  else {
                    uVar34 = uVar11;
                    if (uVar7 != 0) {
                      *pdVar5 = *pdVar5 + pdVar27[lVar26] * dVar48;
                      uVar34 = uVar11 + 1;
                    }
                    if (iVar17 != 1) {
                      uVar24 = 0;
                      pdVar22 = param_15 + lVar26 + (ulong)uVar7;
                      pdVar29 = param_15 + (ulong)uVar7 + lVar26;
                      pdVar20 = pdVar27 + (ulong)uVar7 + lVar26;
                      do {
                        dVar44 = *pdVar20;
                        uVar24 = uVar24 + 1;
                    /* try { // try from 002a83a8 to 003a83ab has its CatchHandler @ 002a83e4 */
                        dVar42 = *pdVar22;
                        pdVar29[1] = pdVar22[1] + dVar48 * pdVar20[1];
                        *pdVar29 = dVar42 + dVar48 * dVar44;
                        pdVar22 = pdVar22 + 2;
                        pdVar29 = pdVar29 + 2;
                        pdVar20 = pdVar20 + 2;
                      } while (uVar24 < uVar2);
                      uVar34 = uVar34 + iVar12;
                      if (iVar17 == iVar12) goto LAB_002a83e0;
                    }
                    uVar21 = -(ulong)(uVar34 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar34 << 3;
                    *(double *)((long)param_15 + uVar21) =
                         *(double *)((long)param_15 + uVar21) +
                         *(double *)((long)pdVar27 + uVar21) * dVar48;
                  }
                }
LAB_002a83e0:
                iVar35 = iVar35 + 1;
                    /* catch() { ... } // from try @ 002a83a8 with catch @ 002a83e4 */
                pdVar27 = (double *)((long)pdVar27 + uVar31);
                pdVar23 = (double *)((long)pdVar23 + uVar37);
              } while (iVar35 < (int)param_1);
                    /* try { // try from 002a83fc to 003a83ff has its CatchHandler @ 002a835c */
              if ((int)param_12 < 1) goto LAB_002a84dc;
            }
            if (uVar8 == 0) {
              uVar21 = 0;
            }
            else {
              *param_15 = *param_15 * dVar43;
              if ((uVar8 == 1) || (param_15[1] = param_15[1] * dVar43, uVar8 == 2)) {
                uVar21 = (ulong)uVar8;
              }
              else {
                uVar21 = 3;
                param_15[2] = param_15[2] * dVar43;
              }
              if (uVar8 == uVar10) goto LAB_002a84dc;
            }
            if (uVar9 != uVar8) {
              uVar34 = 0;
              pdVar27 = param_15 + uVar8;
              pdVar23 = param_15 + uVar8;
              do {
                dVar48 = *pdVar27;
                uVar34 = uVar34 + 1;
                pdVar23[1] = dVar43 * pdVar27[1];
                *pdVar23 = dVar43 * dVar48;
                pdVar27 = pdVar27 + 2;
                pdVar23 = pdVar23 + 2;
              } while (uVar34 < uVar1);
              uVar21 = (ulong)(uint)((int)uVar21 + iVar40);
              if (iVar40 == uVar10 - uVar8) goto LAB_002a84dc;
            }
            uVar21 = -(uVar21 >> 0x1f) & 0xfffffff800000000 | uVar21 << 3;
            *(double *)((long)param_15 + uVar21) = *(double *)((long)param_15 + uVar21) * dVar43;
          }
LAB_002a84dc:
          if (0 < (int)param_2) {
            lVar33 = 0;
            pdVar27 = param_13;
            do {
              dVar43 = *(double *)(param_8 + lVar33 * 8);
              if (0 < iVar14) {
                if ((param_15 < pdVar27 + 8 && pdVar27 < param_15 + 8) || (uVar39 < 3)) {
                  pdVar23 = pdVar27;
                  pdVar22 = param_15 + 1;
                  do {
                    pdVar29 = pdVar22 + 4;
                    /* try { // try from 002a8730 to 003a8733 has its CatchHandler @ 002a8740 */
                    /* try { // try from 002a8738 to 003a873b has its CatchHandler @ 002a8588 */
                    dVar48 = pdVar22[-1];
                    /* catch() { ... } // from try @ 002a8730 with catch @ 002a8740 */
                    pdVar23[1] = pdVar23[1] + *pdVar22 * dVar43;
                    /* try { // try from 002a8750 to 003a8753 has its CatchHandler @ 002a8588 */
                    *pdVar23 = *pdVar23 + dVar48 * dVar43;
                    /* catch() { ... } // from try @ 002a860c with catch @ 002a8754 */
                    dVar48 = pdVar22[1];
                    pdVar23[3] = pdVar23[3] + pdVar22[2] * dVar43;
                    pdVar23[2] = pdVar23[2] + dVar48 * dVar43;
                    pdVar23 = pdVar23 + 4;
                    pdVar22 = pdVar29;
                  } while (pdVar29 != param_15 + (ulong)uVar13 * 4 + 5);
                }
                else {
                  pdVar23 = pdVar27 + 2;
                  uVar34 = 0;
                  pdVar22 = param_15;
                  pdVar29 = pdVar27;
                  do {
                    pdVar20 = pdVar22 + 1;
                    dVar46 = *pdVar22;
                    uVar34 = uVar34 + 1;
                    dVar42 = pdVar23[1];
                    dVar48 = *pdVar23;
                    dVar45 = pdVar22[3];
                    dVar44 = pdVar22[2];
                    pdVar22 = pdVar22 + 4;
                    pdVar29[1] = pdVar29[1] + dVar43 * *pdVar20;
                    *pdVar29 = *pdVar29 + dVar43 * dVar46;
                    pdVar29 = pdVar29 + 4;
                    pdVar23[1] = dVar42 + dVar43 * dVar45;
                    *pdVar23 = dVar48 + dVar43 * dVar44;
                    pdVar23 = pdVar23 + 4;
                  } while (uVar34 < uVar39);
                }
              }
                    /* catch() { ... } // from try @ 002a85d4 with catch @ 002a8588
                       catch() { ... } // from try @ 002a8680 with catch @ 002a8588
                       catch() { ... } // from try @ 002a8738 with catch @ 002a8588
                       catch() { ... } // from try @ 002a8750 with catch @ 002a8588
                       catch() { ... } // from try @ 002a8778 with catch @ 002a8588 */
              if ((int)uVar11 < (int)param_12) {
                pdVar23 = pdVar27 + lVar26;
                if ((uVar16 < 7) || (pdVar25 < pdVar27 + lVar4 && pdVar23 < param_15 + lVar4)) {
                  lVar28 = 0;
                  do {
                    *(double *)((long)pdVar23 + lVar28) =
                         *(double *)((long)pdVar23 + lVar28) +
                         *(double *)((long)pdVar25 + lVar28) * dVar43;
                    lVar28 = lVar28 + 8;
                  } while (lVar28 != lVar38);
                }
                else {
                  uVar34 = (uint)((ulong)pdVar23 >> 3) & 1;
                  if (uVar16 < uVar34) {
                    uVar34 = uVar16;
                  }
                  uVar24 = uVar11;
                  if (uVar34 != 0) {
                    pdVar27[lVar26] = pdVar27[lVar26] + *pdVar5 * dVar43;
                    uVar24 = uVar11 + 1;
                  }
                    /* try { // try from 002a85d4 to 003a85d7 has its CatchHandler @ 002a8588 */
                  uVar3 = ((uVar16 - uVar34) - 2 >> 1) + 1;
                  uVar30 = 0;
                  iVar35 = uVar3 * 2;
                  pdVar23 = param_15 + (ulong)uVar34 + lVar26;
                  pdVar22 = pdVar27 + (ulong)uVar34 + lVar26;
                  pdVar29 = pdVar27 + (ulong)uVar34 + lVar26;
                  do {
                    /* try { // try from 002a860c to 003a860f has its CatchHandler @ 002a8754 */
                    dVar42 = *pdVar23;
                    uVar30 = uVar30 + 1;
                    dVar48 = *pdVar22;
                    pdVar29[1] = pdVar22[1] + dVar43 * pdVar23[1];
                    *pdVar29 = dVar48 + dVar43 * dVar42;
                    pdVar23 = pdVar23 + 2;
                    pdVar22 = pdVar22 + 2;
                    pdVar29 = pdVar29 + 2;
                  } while (uVar30 < uVar3);
                  uVar24 = iVar35 + uVar24;
                  if (iVar35 != uVar16 - uVar34) {
                    uVar21 = -(ulong)(uVar24 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar24 << 3;
                    *(double *)((long)pdVar27 + uVar21) =
                         *(double *)((long)pdVar27 + uVar21) +
                         *(double *)((long)param_15 + uVar21) * dVar43;
                  }
                }
              }
              lVar33 = lVar33 + 1;
              pdVar27 = (double *)((long)pdVar27 + uVar32);
            } while ((int)lVar33 < (int)param_2);
          }
        }
      }
                    /* try { // try from 002a8680 to 003a86ef has its CatchHandler @ 002a8588 */
      local_e8 = (double *)((long)local_e8 + (-(uVar36 >> 0x1f) & 0xfffffff800000000 | uVar36 << 3))
      ;
      local_d4 = local_d4 + 1;
      param_8 = param_8 + (-(ulong)(param_9 >> 0x1f) & 0xfffffff800000000 | (ulong)param_9 << 3);
      param_3 = (double *)((long)param_3 + uVar19);
    } while (local_d4 != uVar6);
  }
  return;
}


==================================================================

### FUNC 002a88f8 (3220 bytes) name=FUN_002a88f8

void FUN_002a88f8(uint param_1,uint param_2,float *param_3,ulong param_4,float *param_5,uint param_6
                 ,char param_7,long param_8,uint param_9,float *param_10,uint param_11,uint param_12
                 ,float *param_13,uint param_14,double *param_15)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  double *pdVar8;
  double *pdVar9;
  double *pdVar10;
  double *pdVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  float fVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  uint uVar20;
  uint uVar21;
  uint uVar22;
  long lVar23;
  double *pdVar24;
  undefined1 auVar25 [16];
  long lVar26;
  long lVar27;
  undefined8 uVar28;
  undefined8 uVar29;
  undefined1 auVar30 [16];
  uint uVar31;
  uint uVar32;
  ulong uVar33;
  double *pdVar34;
  float *pfVar35;
  double *pdVar36;
  float *pfVar37;
  int iVar38;
  int iVar39;
  long lVar40;
  float *pfVar41;
  ulong uVar42;
  ulong uVar43;
  ulong uVar44;
  long lVar45;
  ulong uVar46;
  long lVar47;
  uint uVar48;
  uint uVar49;
  float fVar50;
  int iVar51;
  int iVar52;
  float fVar53;
  double dVar54;
  double dVar55;
  double dVar56;
  double dVar57;
  double dVar58;
  float *local_118;
  uint local_110;
  uint local_88;
  
                    /* try { // try from 002a8940 to 003a8943 has its CatchHandler @ 002a88c4 */
  local_88 = 1;
  uVar31 = param_6;
  if (param_7 == '\0') {
    uVar31 = 1;
    local_88 = param_6;
  }
  uVar12 = param_1;
  if ((int)param_2 < (int)param_1) {
    uVar12 = param_2;
  }
                    /* try { // try from 002a897c to 003a897f has its CatchHandler @ 002a8b30 */
  if (param_10 == (float *)0x0) {
    param_12 = param_1;
  }
                    /* try { // try from 002a8984 to 003a89ef has its CatchHandler @ 002a88c4 */
  if (0 < (int)param_2) {
    uVar49 = 0;
    pfVar37 = param_13;
    if ((int)param_12 < 1) {
      do {
        if (uVar49 + 1 == param_2) break;
        uVar49 = uVar49 + 2;
      } while (uVar49 != param_2);
    }
    else {
      do {
        uVar49 = uVar49 + 1;
        memset(pfVar37,0,((ulong)(param_12 - 1) + 1) * 4);
        pfVar37 = pfVar37 + (int)param_14;
      } while (uVar49 != param_2);
    }
  }
  if (0 < (int)uVar12) {
    dVar57 = 0.0;
    uVar33 = -((param_4 & 0xffffffff) >> 0x1f) & 0xfffffffc00000000 | (param_4 & 0xffffffff) << 2;
    uVar49 = 0;
    pfVar37 = param_3;
    do {
      fVar50 = *pfVar37;
      uVar49 = uVar49 + 1;
      pfVar37 = (float *)((long)pfVar37 + uVar33);
      dVar57 = dVar57 + (double)fVar50;
    } while (uVar49 != uVar12);
    uVar6 = (uint)((ulong)param_15 >> 3) & 1;
    iVar19 = param_12 - 3;
    lVar40 = (long)(int)local_88;
    uVar49 = uVar6;
    if (param_12 < uVar6) {
      uVar49 = param_12;
    }
    uVar1 = (param_12 - 4 >> 2) + 1;
    iVar17 = uVar1 * 4;
    if (param_12 < 7) {
      uVar49 = param_12;
    }
                    /* try { // try from 002a8a48 to 003a8a4b has its CatchHandler @ 002a8b1c */
                    /* try { // try from 002a8a50 to 003a8a53 has its CatchHandler @ 002a88c4 */
    if (iVar19 < 1) {
      iVar17 = 0;
    }
    lVar26 = NEON_shl(lVar40,2);
    uVar21 = param_12 - iVar17;
    iVar2 = iVar17 + 1;
    lVar27 = NEON_shl(lVar40,3);
    uVar3 = ((param_12 - uVar49) - 4 >> 2) + 1;
    uVar20 = param_12 - 1;
    uVar46 = (ulong)uVar20;
    lVar45 = (long)iVar17;
    iVar4 = iVar17 + 2;
    pdVar8 = param_15 + lVar45;
    iVar5 = iVar17 + 3;
    uVar13 = (uint)((ulong)pdVar8 >> 3) & 1;
    if (uVar21 < uVar13) {
      uVar13 = uVar21;
    }
    uVar15 = param_12;
    if ((int)param_12 < 1) {
      uVar15 = 1;
    }
    if (uVar15 < uVar6) {
      uVar6 = uVar15;
    }
    uVar14 = uVar15;
    if (3 < uVar15) {
      uVar14 = uVar6;
    }
                    /* catch() { ... } // from try @ 002a8a48 with catch @ 002a8b1c */
                    /* try { // try from 002a8b2c to 003a8b2f has its CatchHandler @ 002a88c4 */
                    /* catch() { ... } // from try @ 002a897c with catch @ 002a8b30 */
    dVar57 = dVar57 * DAT_002a9590;
                    /* try { // try from 002a8b40 to 003a8b43 has its CatchHandler @ 002a88c4 */
                    /* catch() { ... } // from try @ 002a8b90 with catch @ 002a8b44
                       catch() { ... } // from try @ 002a8bd8 with catch @ 002a8b44
                       catch() { ... } // from try @ 002a8c64 with catch @ 002a8b44
                       catch() { ... } // from try @ 002a8c88 with catch @ 002a8b44
                       catch() { ... } // from try @ 002a8c9c with catch @ 002a8b44 */
    uVar42 = -(ulong)(param_11 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_11 << 2;
    uVar43 = -(ulong)(param_14 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_14 << 2;
                    /* try { // try from 002a8b90 to 003a8b93 has its CatchHandler @ 002a8b44 */
    iVar51 = uVar3 * 4;
    uVar22 = uVar20 - uVar49;
    uVar6 = ((uVar15 - uVar14) - 2 >> 1) + 1;
    if ((int)param_12 < 1) {
      uVar20 = 0;
    }
                    /* try { // try from 002a8bd0 to 003a8bd3 has its CatchHandler @ 002a8c8c */
                    /* try { // try from 002a8bd8 to 003a8c13 has its CatchHandler @ 002a8b44 */
    iVar52 = uVar6 * 2;
    pdVar9 = param_15 + iVar2;
    pdVar10 = param_15 + iVar4;
    pdVar11 = param_15 + iVar5;
    local_110 = 0;
    local_118 = param_5;
    do {
      if (dVar57 < ABS((double)*param_3)) {
                    /* try { // try from 002a8c5c to 003a8c5f has its CatchHandler @ 002a8c78 */
        dVar58 = 1.0 / (double)*param_3;
                    /* try { // try from 002a8c64 to 003a8c67 has its CatchHandler @ 002a8b44 */
        if (param_12 == 1) {
          if (param_10 == (float *)0x0) {
            dVar54 = (double)*local_118;
          }
          else {
            dVar54 = 0.0;
            if (0 < (int)param_1) {
              uVar32 = 0;
              pfVar41 = param_10;
              pfVar37 = local_118;
              do {
                fVar50 = *pfVar37;
                uVar32 = uVar32 + 1;
                fVar53 = *pfVar41;
                pfVar37 = (float *)((long)pfVar37 + lVar26);
                pfVar41 = (float *)((long)pfVar41 + uVar42);
                dVar54 = dVar54 + (double)(fVar50 * fVar53);
              } while (uVar32 != param_1);
            }
          }
          if (0 < (int)param_2) {
            lVar47 = 0;
            pfVar37 = param_13;
            do {
              lVar23 = lVar47 * 4;
              lVar47 = lVar47 + 1;
              *pfVar37 = (float)((double)*pfVar37 +
                                (double)*(float *)(param_8 + lVar23) * dVar58 * dVar54);
              pfVar37 = (float *)((long)pfVar37 + uVar43);
            } while ((int)lVar47 < (int)param_2);
          }
        }
        else {
          if (param_10 == (float *)0x0) {
            if (0 < (int)param_12) {
              if (uVar49 == 0) {
                uVar44 = 0;
              }
              else {
                *param_15 = dVar58 * (double)*local_118;
                if ((((uVar49 == 1) ||
                     (param_15[1] = dVar58 * (double)local_118[lVar40], uVar49 == 2)) ||
                    (param_15[2] = dVar58 * (double)local_118[(int)(local_88 * 2)], uVar49 == 3)) ||
                   (param_15[3] = dVar58 * (double)local_118[(int)(local_88 * 3)], uVar49 == 4)) {
                  uVar44 = (ulong)uVar49;
                }
                else {
                  param_15[4] = dVar58 * (double)local_118[(int)(local_88 * 4)];
                  if (uVar49 == 5) {
                    uVar44 = 5;
                  }
                  else {
                    uVar44 = 6;
                    param_15[5] = dVar58 * (double)local_118[(int)(local_88 * 5)];
                  }
                }
                if (uVar49 == param_12) goto LAB_002a8fd8;
              }
              if (2 < uVar22) {
                pfVar37 = (float *)((long)local_118 + lVar26 * (ulong)uVar49);
                uVar32 = 0;
                pdVar36 = param_15 + uVar49;
                do {
                  fVar50 = *pfVar37;
                  uVar32 = uVar32 + 1;
                  pfVar41 = (float *)((long)pfVar37 + lVar26);
                  fVar53 = *(float *)((long)pfVar37 + lVar27);
                  fVar16 = *(float *)((long)pfVar37 + lVar27 + lVar26);
                  pfVar37 = pfVar37 + (long)(int)local_88 * 4;
                  pdVar36[1] = dVar58 * (double)*pfVar41;
                  *pdVar36 = dVar58 * (double)fVar50;
                  pdVar36[3] = dVar58 * (double)fVar16;
                  pdVar36[2] = dVar58 * (double)fVar53;
                  pdVar36 = pdVar36 + 4;
                } while (uVar32 < uVar3);
                uVar44 = (ulong)(uint)((int)uVar44 + iVar51);
                if (iVar51 == param_12 - uVar49) goto LAB_002a8fd8;
              }
              iVar39 = (int)uVar44;
              uVar44 = -(uVar44 >> 0x1f) & 0xfffffff800000000 | uVar44 << 3;
              *(double *)((long)param_15 + uVar44) =
                   dVar58 * (double)local_118[(int)(local_88 * iVar39)];
              if (iVar39 + 1 < (int)param_12) {
                iVar38 = local_88 * iVar39 + local_88;
                *(double *)((long)param_15 + uVar44 + 8) = dVar58 * (double)local_118[iVar38];
                if (iVar39 + 2 < (int)param_12) {
                  *(double *)((long)param_15 + uVar44 + 0x10) =
                       dVar58 * (double)local_118[(int)(local_88 + iVar38)];
                }
              }
            }
          }
          else {
            if ((int)param_12 < 1) {
              if ((int)param_1 < 1) goto LAB_002a8fd8;
LAB_002a8cc8:
              iVar39 = 0;
              pfVar41 = local_118;
              pfVar37 = param_10;
              do {
                fVar50 = *pfVar41;
                if (0 < iVar19) {
                  pdVar36 = param_15 + 2;
                  uVar32 = 0;
                  pdVar34 = param_15;
                  pfVar35 = pfVar37;
                  do {
                    uVar29 = *(undefined8 *)(pfVar35 + 2);
                    uVar28 = *(undefined8 *)pfVar35;
                    uVar32 = uVar32 + 1;
                    dVar55 = pdVar36[1];
                    dVar54 = *pdVar36;
                    pdVar34[1] = pdVar34[1] + (double)(fVar50 * (float)((ulong)uVar28 >> 0x20));
                    *pdVar34 = *pdVar34 + (double)(fVar50 * (float)uVar28);
                    pdVar34 = pdVar34 + 4;
                    pdVar36[1] = dVar55 + (double)(fVar50 * (float)((ulong)uVar29 >> 0x20));
                    *pdVar36 = dVar54 + (double)(fVar50 * (float)uVar29);
                    pdVar36 = pdVar36 + 4;
                    pfVar35 = pfVar35 + 4;
                  } while (uVar32 < uVar1);
                }
                if (iVar17 < (int)param_12) {
                  uVar32 = uVar13;
                  if (uVar21 < 5) {
                    uVar32 = uVar21;
                  }
                  iVar38 = iVar17;
                  if (uVar32 != 0) {
                    *pdVar8 = *pdVar8 + (double)(fVar50 * pfVar37[lVar45]);
                    iVar38 = iVar2;
                    if (((uVar32 != 1) &&
                        (*pdVar9 = *pdVar9 + (double)(fVar50 * pfVar37[iVar2]), iVar38 = iVar4,
                        uVar32 != 2)) &&
                       (*pdVar10 = *pdVar10 + (double)(fVar50 * pfVar37[iVar4]), iVar38 = iVar5,
                       uVar32 == 4)) {
                      *pdVar11 = *pdVar11 + (double)(fVar50 * pfVar37[iVar5]);
                      iVar38 = iVar17 + 4;
                    }
                    if (uVar32 == uVar21) goto LAB_002a8ef8;
                  }
                  uVar7 = ((uVar21 - uVar32) - 4 >> 2) + 1;
                  iVar18 = uVar7 * 4;
                  if (2 < (uVar21 - 1) - uVar32) {
                    uVar48 = 0;
                    pdVar36 = param_15 + (ulong)uVar32 + lVar45;
                    pfVar35 = pfVar37 + (ulong)uVar32 + lVar45;
                    pdVar34 = pdVar36;
                    do {
                      uVar29 = *(undefined8 *)(pfVar35 + 2);
                      uVar28 = *(undefined8 *)pfVar35;
                      pdVar24 = pdVar36 + 1;
                      dVar54 = *pdVar36;
                      dVar56 = pdVar36[3];
                      dVar55 = pdVar36[2];
                      uVar48 = uVar48 + 1;
                      pdVar36 = pdVar36 + 4;
                      pdVar34[1] = *pdVar24 + (double)(fVar50 * (float)((ulong)uVar28 >> 0x20));
                      *pdVar34 = dVar54 + (double)(fVar50 * (float)uVar28);
                      pdVar34[3] = (double)(fVar50 * (float)((ulong)uVar29 >> 0x20)) + dVar56;
                      pdVar34[2] = (double)(fVar50 * (float)uVar29) + dVar55;
                      pfVar35 = pfVar35 + 4;
                      pdVar34 = pdVar34 + 4;
                    } while (uVar48 < uVar7);
                    iVar38 = iVar38 + iVar18;
                    if (iVar18 == uVar21 - uVar32) goto LAB_002a8ef8;
                  }
                  iVar18 = iVar38 + 1;
                  param_15[iVar38] = param_15[iVar38] + (double)(fVar50 * pfVar37[iVar38]);
                  if (iVar18 < (int)param_12) {
                    iVar38 = iVar38 + 2;
                    param_15[iVar18] = param_15[iVar18] + (double)(fVar50 * pfVar37[iVar18]);
                    if (iVar38 < (int)param_12) {
                      param_15[iVar38] = param_15[iVar38] + (double)(fVar50 * pfVar37[iVar38]);
                    }
                  }
                }
LAB_002a8ef8:
                iVar39 = iVar39 + 1;
                pfVar37 = (float *)((long)pfVar37 + uVar42);
                pfVar41 = (float *)((long)pfVar41 + lVar26);
              } while (iVar39 < (int)param_1);
              if ((int)param_12 < 1) goto LAB_002a8fd8;
            }
            else {
                    /* catch() { ... } // from try @ 002a8c5c with catch @ 002a8c78 */
                    /* try { // try from 002a8c88 to 003a8c8b has its CatchHandler @ 002a8b44 */
                    /* catch() { ... } // from try @ 002a8bd0 with catch @ 002a8c8c */
                    /* try { // try from 002a8c9c to 003a8c9f has its CatchHandler @ 002a8b44 */
              memset(param_15,0,(uVar46 + 1) * 8);
              if (0 < (int)param_1) goto LAB_002a8cc8;
            }
            if (uVar14 == 0) {
              uVar44 = 0;
            }
            else {
              *param_15 = *param_15 * dVar58;
              if ((uVar14 == 1) || (param_15[1] = param_15[1] * dVar58, uVar14 == 2)) {
                uVar44 = (ulong)uVar14;
              }
              else {
                uVar44 = 3;
                param_15[2] = param_15[2] * dVar58;
              }
              if (uVar15 == uVar14) goto LAB_002a8fd8;
            }
            if (uVar20 != uVar14) {
              uVar32 = 0;
              pdVar36 = param_15 + uVar14;
              pdVar34 = param_15 + uVar14;
              do {
                dVar54 = *pdVar36;
                uVar32 = uVar32 + 1;
                pdVar34[1] = dVar58 * pdVar36[1];
                *pdVar34 = dVar58 * dVar54;
                pdVar36 = pdVar36 + 2;
                pdVar34 = pdVar34 + 2;
              } while (uVar32 < uVar6);
              uVar44 = (ulong)(uint)((int)uVar44 + iVar52);
              if (iVar52 == uVar15 - uVar14) goto LAB_002a8fd8;
            }
            uVar44 = -(uVar44 >> 0x1f) & 0xfffffff800000000 | uVar44 << 3;
            *(double *)((long)param_15 + uVar44) = *(double *)((long)param_15 + uVar44) * dVar58;
          }
LAB_002a8fd8:
          lVar47 = 0;
          pfVar37 = param_13;
          if (0 < (int)param_2) {
            do {
              fVar50 = *(float *)(param_8 + lVar47 * 4);
              if (0 < iVar19) {
                dVar58 = (double)fVar50;
                uVar32 = 0;
                pdVar36 = param_15;
                pfVar41 = pfVar37;
                do {
                  uVar32 = uVar32 + 1;
                  dVar54 = (double)(float)*(undefined8 *)pfVar41 + *pdVar36 * dVar58;
                  dVar55 = (double)(float)((ulong)*(undefined8 *)pfVar41 >> 0x20) +
                           pdVar36[1] * dVar58;
                  auVar25._8_4_ = SUB84(dVar55,0);
                  auVar25._0_8_ = dVar54;
                  auVar25._12_4_ = (int)((ulong)dVar55 >> 0x20);
                  *(ulong *)(pfVar41 + 2) =
                       CONCAT44((float)((double)(float)((ulong)*(undefined8 *)(pfVar41 + 2) >> 0x20)
                                       + pdVar36[3] * dVar58),
                                (float)((double)(float)*(undefined8 *)(pfVar41 + 2) +
                                       pdVar36[2] * dVar58));
                  *(ulong *)pfVar41 = CONCAT44((float)auVar25._8_8_,(float)dVar54);
                  pdVar36 = pdVar36 + 4;
                  pfVar41 = pfVar41 + 4;
                } while (uVar32 < uVar1);
              }
              if (iVar17 < (int)param_12) {
                uVar32 = -((uint)((ulong)pfVar37 >> 2) & 3) & 3;
                uVar44 = (ulong)uVar21;
                if (uVar32 < uVar21) {
                  uVar44 = (ulong)uVar32;
                }
                if (uVar21 < 5) {
                  uVar44 = (ulong)uVar21;
                }
                dVar58 = (double)fVar50;
                uVar32 = (uint)uVar44;
                iVar39 = iVar17;
                if (uVar32 != 0) {
                  pfVar37[lVar45] = (float)((double)pfVar37[lVar45] + dVar58 * *pdVar8);
                  iVar39 = iVar2;
                  if (((uVar32 != 1) &&
                      (pfVar37[iVar2] = (float)((double)pfVar37[iVar2] + dVar58 * *pdVar9),
                      iVar39 = iVar4, uVar32 != 2)) &&
                     (pfVar37[iVar4] = (float)((double)pfVar37[iVar4] + dVar58 * *pdVar10),
                     iVar39 = iVar5, uVar32 == 4)) {
                    pfVar37[iVar5] = (float)((double)pfVar37[iVar5] + dVar58 * *pdVar11);
                    iVar39 = iVar17 + 4;
                  }
                  if (uVar21 == uVar32) goto LAB_002a91f8;
                }
                uVar7 = ((uVar21 - uVar32) - 4 >> 2) + 1;
                iVar38 = uVar7 * 4;
                if (2 < (uVar21 - 1) - uVar32) {
                  uVar48 = 0;
                  pdVar36 = param_15 + lVar45 + uVar44;
                  pfVar41 = pfVar37 + lVar45 + uVar44;
                  pfVar35 = pfVar37 + lVar45 + uVar44;
                  do {
                    uVar48 = uVar48 + 1;
                    dVar54 = (double)(float)*(undefined8 *)pfVar41 + *pdVar36 * dVar58;
                    dVar55 = (double)(float)((ulong)*(undefined8 *)pfVar41 >> 0x20) +
                             pdVar36[1] * dVar58;
                    auVar30._8_4_ = SUB84(dVar55,0);
                    auVar30._0_8_ = dVar54;
                    auVar30._12_4_ = (int)((ulong)dVar55 >> 0x20);
                    *(ulong *)(pfVar35 + 2) =
                         CONCAT44((float)((double)(float)((ulong)*(undefined8 *)(pfVar41 + 2) >>
                                                         0x20) + pdVar36[3] * dVar58),
                                  (float)((double)(float)*(undefined8 *)(pfVar41 + 2) +
                                         pdVar36[2] * dVar58));
                    *(ulong *)pfVar35 = CONCAT44((float)auVar30._8_8_,(float)dVar54);
                    pdVar36 = pdVar36 + 4;
                    pfVar41 = pfVar41 + 4;
                    pfVar35 = pfVar35 + 4;
                  } while (uVar48 < uVar7);
                  iVar39 = iVar39 + iVar38;
                  if (iVar38 == uVar21 - uVar32) goto LAB_002a91f8;
                }
                iVar38 = iVar39 + 1;
                pfVar37[iVar39] = (float)((double)pfVar37[iVar39] + dVar58 * param_15[iVar39]);
                if (iVar38 < (int)param_12) {
                  iVar39 = iVar39 + 2;
                  pfVar37[iVar38] = (float)((double)pfVar37[iVar38] + dVar58 * param_15[iVar38]);
                  if (iVar39 < (int)param_12) {
                    pfVar37[iVar39] = (float)((double)pfVar37[iVar39] + dVar58 * param_15[iVar39]);
                  }
                }
              }
LAB_002a91f8:
              lVar47 = lVar47 + 1;
              pfVar37 = (float *)((long)pfVar37 + uVar43);
            } while ((int)lVar47 < (int)param_2);
          }
        }
      }
      local_118 = (float *)((long)local_118 +
                           (-(ulong)(uVar31 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar31 << 2));
      local_110 = local_110 + 1;
      param_8 = param_8 + (-(ulong)(param_9 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_9 << 2);
      param_3 = (float *)((long)param_3 + uVar33);
    } while (local_110 != uVar12);
  }
  return;
}


==================================================================

### FUNC 002a9598 (436 bytes) name=~SVD

/* cv::SVD::~SVD() */

void __thiscall cv::SVD::~SVD(SVD *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined4 *puVar4;
  int iVar5;
  
  if (*(long *)(this + 0xf8) != 0) {
    piVar1 = (int *)(*(long *)(this + 0xf8) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)(this + 0xc0));
    }
  }
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  if (0 < *(int *)(this + 0xc4)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0x100);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 0xc4));
  }
  if (*(SVD **)(this + 0x108) != this + 0x110) {
    fastFree(*(SVD **)(this + 0x108));
  }
  if (*(long *)(this + 0x98) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x98) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)(this + 0x60));
    }
  }
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  if (0 < *(int *)(this + 100)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0xa0);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 100));
  }
  if (*(SVD **)(this + 0xa8) != this + 0xb0) {
    fastFree(*(SVD **)(this + 0xa8));
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (0 < *(int *)(this + 4)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0x40);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 4));
  }
  if (*(SVD **)(this + 0x48) != this + 0x50) {
    fastFree(*(SVD **)(this + 0x48));
    return;
  }
  return;
}


==================================================================

### FUNC 002a979c (4 bytes) name=LU

/* cv::LU(float*, unsigned long, int, float*, unsigned long, int) */

int cv::LU(float *param_1,ulong param_2,int param_3,float *param_4,ulong param_5,int param_6)

{
  long lVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong uVar5;
  float fVar6;
  ulong uVar7;
  float *pfVar8;
  ulong uVar9;
  float *pfVar10;
  long lVar11;
  float *pfVar12;
  float *pfVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  long lVar17;
  float *pfVar18;
  long lVar19;
  int iVar20;
  long lVar21;
  long lVar22;
  uint uVar23;
  long lVar24;
  ulong uVar25;
  uint uVar26;
  float *pfVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  uint uVar31;
  int iVar32;
  uint uVar33;
  long lVar34;
  long lVar35;
  float *pfVar36;
  uint uVar37;
  float fVar38;
  float fVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  float fVar42;
  undefined8 uVar43;
  int iVar44;
  float fVar45;
  int iVar46;
  int iVar47;
  float fVar48;
  float *pfVar49;
  long lVar50;
  long lVar51;
  float *pfVar52;
  long lVar53;
  uint uVar54;
  long lStack_30;
  long lStack_28;
  int iStack_14;
  
  fVar39 = DAT_003cc7fc;
  uVar9 = param_5 >> 2;
  uVar7 = param_2 >> 2;
  if (param_3 < 1) {
    iStack_14 = 1;
    if (param_4 != (float *)0x0) {
LAB_003cc5f4:
      uVar54 = param_3 - 1;
      if (-1 < (int)uVar54) {
        lVar29 = (long)(int)uVar54;
        lVar30 = uVar7 + 1;
        lVar50 = lVar29 * lVar30 + 1;
        pfVar8 = (float *)((long)param_4 + lVar29 * uVar9 * 4);
        pfVar49 = (float *)((long)param_1 + lVar30 * 4 * lVar29);
        pfVar52 = param_1 + lVar50;
        uVar25 = 0xffffffff;
        do {
          if (0 < param_6) {
            pfVar13 = pfVar8;
            do {
              fVar39 = *pfVar13;
              pfVar12 = pfVar52;
              pfVar27 = pfVar13;
              if ((int)(uVar54 - (int)uVar25) < param_3) {
                do {
                  pfVar10 = pfVar12 + 1;
                  fVar39 = fVar39 - pfVar27[uVar9] * *pfVar12;
                  pfVar12 = pfVar10;
                  pfVar27 = pfVar27 + uVar9;
                } while (pfVar10 != param_1 + lVar50 + 1 + uVar25);
              }
              pfVar27 = pfVar13 + 1;
              *pfVar13 = fVar39 * *pfVar49;
              pfVar13 = pfVar27;
            } while (pfVar27 != pfVar8 + (ulong)(param_6 - 1) + 1);
          }
          uVar23 = (int)uVar25 + 1;
          uVar25 = (ulong)uVar23;
          pfVar49 = pfVar49 + -lVar30;
          pfVar8 = pfVar8 + -uVar9;
          pfVar52 = pfVar52 + ~uVar7;
          lVar50 = lVar50 + ~uVar7;
        } while (uVar23 != uVar54);
      }
    }
  }
  else {
    uVar54 = param_3 - 2;
    lVar50 = 0;
    uVar23 = param_3 - 1;
    lVar51 = NEON_shl(uVar7 + 1,2);
    iVar20 = 0;
    lStack_28 = 0;
    lStack_30 = 0;
    lVar29 = 0;
    lVar30 = 0;
    lVar34 = 0;
    lVar24 = lVar51 + -4;
    pfVar52 = (float *)((long)param_1 + lVar51);
    iStack_14 = 1;
    iVar46 = 1;
    pfVar8 = param_4;
    pfVar49 = param_1;
    lVar53 = lVar24;
    if (param_3 < 2) goto LAB_003cc5bc;
LAB_003cbd00:
    fVar45 = *(float *)((long)param_1 + lStack_28);
    lVar1 = lVar34 + 1;
    lVar15 = lVar29 + uVar7;
    lVar14 = lVar1;
    fVar48 = fVar45;
    iVar32 = iVar46;
    iVar47 = iVar20;
    do {
      lVar21 = lVar34 + lVar15;
      fVar38 = ABS(fVar48);
      fVar42 = ABS(param_1[lVar21]);
      lVar35 = lVar15;
      lVar16 = lVar14;
      iVar44 = iVar32;
      if (fVar42 <= fVar38) {
        lVar35 = (long)iVar47 * uVar7;
        lVar16 = (long)iVar47;
        iVar44 = iVar47;
      }
      iVar47 = iVar44;
      iVar32 = iVar32 + 1;
      lVar14 = lVar14 + 1;
      lVar15 = lVar15 + uVar7;
      fVar6 = param_1[lVar21];
      if (fVar42 <= fVar38) {
        fVar42 = fVar38;
        fVar6 = fVar48;
      }
      fVar48 = fVar6;
    } while (iVar32 != param_3);
    if (fVar39 <= fVar42) {
      if (iVar20 != iVar47) {
        iVar32 = (int)lVar34;
        if (iVar32 < param_3) {
          lVar15 = lVar35 + lVar34;
          uVar26 = param_3 - iVar32;
          if ((lStack_28 < (lVar34 + 4 + lVar35) * 4 && lVar15 * 4 < lStack_28 + 0x10) ||
             (uVar26 < 9)) {
            pfVar13 = (float *)((long)param_1 + lStack_28);
            do {
              fVar48 = *pfVar13;
              *pfVar13 = pfVar13[lVar35 - lVar29];
              pfVar13[lVar35 - lVar29] = fVar48;
              pfVar13 = pfVar13 + 1;
            } while (pfVar13 != param_1 + lVar50 + 1 + (ulong)uVar23);
          }
          else {
            uVar25 = (long)param_1 + lStack_28;
            uVar33 = -((uint)(uVar25 >> 2) & 3) & 3;
            if (uVar26 < uVar33) {
              uVar33 = uVar26;
            }
            uVar5 = (ulong)uVar33;
            if (uVar33 != 0) {
              *(float *)((long)param_1 + lStack_28) = param_1[lVar15];
              param_1[lVar15] = fVar45;
              iVar20 = iVar46;
              if (uVar33 != 1) {
                fVar48 = *(float *)(uVar25 + 4);
                *(float *)(uVar25 + 4) = param_1[lVar35 + lVar1];
                param_1[lVar35 + lVar1] = fVar48;
                iVar20 = iVar32 + 2;
                if (uVar33 == 3) {
                  lVar14 = lVar35 + lVar34 + 2;
                  fVar48 = *(float *)(uVar25 + 8);
                  *(float *)(uVar25 + 8) = param_1[lVar14];
                  param_1[lVar14] = fVar48;
                  iVar20 = iVar32 + 3;
                }
              }
            }
            lVar14 = 0;
            uVar37 = ((uVar26 - uVar33) - 4 >> 2) + 1;
            uVar31 = 0;
            iVar32 = uVar37 * 4;
            do {
              puVar2 = (undefined8 *)((long)param_1 + lVar14 + (lVar34 + uVar5 + lVar35) * 4);
              puVar3 = (undefined8 *)((long)param_1 + lVar14 + (uVar5 + lVar50) * 4);
              uVar31 = uVar31 + 1;
              uVar43 = *puVar2;
              puVar4 = (undefined8 *)((long)param_1 + lVar14 + (lVar15 + uVar5) * 4);
              uVar41 = puVar3[1];
              uVar40 = *puVar3;
              lVar14 = lVar14 + 0x10;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar43;
              puVar4[1] = uVar41;
              *puVar4 = uVar40;
            } while (uVar31 < uVar37);
            iVar20 = iVar20 + iVar32;
            if (uVar26 - uVar33 != iVar32) {
              iVar32 = iVar20 + 1;
              lVar15 = iVar20 + lVar35;
              lVar14 = lVar29 + iVar20;
              fVar48 = param_1[lVar14];
              param_1[lVar14] = param_1[lVar15];
              param_1[lVar15] = fVar48;
              if (iVar32 < param_3) {
                iVar20 = iVar20 + 2;
                lVar15 = iVar32 + lVar35;
                lVar14 = lVar29 + iVar32;
                fVar48 = param_1[lVar14];
                param_1[lVar14] = param_1[lVar15];
                param_1[lVar15] = fVar48;
                if (iVar20 < param_3) {
                  lVar35 = iVar20 + lVar35;
                  lVar15 = lVar29 + iVar20;
                  fVar48 = param_1[lVar15];
                  param_1[lVar15] = param_1[lVar35];
                  param_1[lVar35] = fVar48;
                }
              }
            }
          }
        }
        if ((param_4 != (float *)0x0) && (0 < param_6)) {
          lVar16 = lVar16 * uVar9;
          lVar15 = lVar16 + 4;
          lVar14 = lVar15 * 4;
          if (((lVar14 - lStack_30 == 0 || lVar14 < lStack_30) || lStack_30 + 0x10 <= lVar14 + -0x10
              ) && (8 < (uint)param_6)) {
            uVar26 = -((uint)((ulong)pfVar8 >> 2) & 3) & 3;
            uVar33 = param_6;
            if (uVar26 < (uint)param_6) {
              uVar33 = uVar26;
            }
            uVar26 = uVar33;
            if (uVar33 != 0) {
              fVar48 = *pfVar8;
              *pfVar8 = param_4[lVar16];
              param_4[lVar16] = fVar48;
              if (uVar33 != 1) {
                fVar48 = pfVar8[1];
                pfVar8[1] = param_4[lVar16 + 1];
                param_4[lVar16 + 1] = fVar48;
                if (uVar33 == 3) {
                  fVar48 = pfVar8[2];
                  pfVar8[2] = param_4[lVar16 + 2];
                  param_4[lVar16 + 2] = fVar48;
                }
                else {
                  uVar26 = 2;
                }
              }
            }
            lVar15 = 0;
            uVar37 = ((param_6 - uVar33) - 4 >> 2) + 1;
            uVar31 = 0;
            iVar20 = uVar37 * 4;
            do {
              puVar2 = (undefined8 *)((long)param_4 + lVar15 + (lVar16 + (ulong)uVar33) * 4);
              puVar3 = (undefined8 *)((long)param_4 + lVar15 + (lVar30 + (ulong)uVar33) * 4);
              uVar31 = uVar31 + 1;
              lVar15 = lVar15 + 0x10;
              uVar43 = *puVar2;
              uVar41 = puVar3[1];
              uVar40 = *puVar3;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar43;
              puVar2[1] = uVar41;
              *puVar2 = uVar40;
            } while (uVar31 < uVar37);
            iVar32 = uVar26 + iVar20;
            if (param_6 - uVar33 != iVar20) {
              iVar20 = iVar32 + 1;
              lVar15 = iVar32 + lVar16;
              lVar14 = lVar30 + iVar32;
              fVar48 = param_4[lVar14];
              param_4[lVar14] = param_4[lVar15];
              param_4[lVar15] = fVar48;
              if (iVar20 < param_6) {
                iVar32 = iVar32 + 2;
                lVar15 = iVar20 + lVar16;
                lVar14 = lVar30 + iVar20;
                fVar48 = param_4[lVar14];
                param_4[lVar14] = param_4[lVar15];
                param_4[lVar15] = fVar48;
                if (iVar32 < param_6) {
                  lVar16 = iVar32 + lVar16;
                  lVar15 = lVar30 + iVar32;
                  fVar48 = param_4[lVar15];
                  param_4[lVar15] = param_4[lVar16];
                  param_4[lVar16] = fVar48;
                }
              }
            }
          }
          else {
            lVar14 = 0;
            do {
              fVar48 = pfVar8[lVar14];
              pfVar8[lVar14] = param_4[lVar15 + lVar14 + -4];
              param_4[lVar15 + lVar14 + -4] = fVar48;
              lVar14 = lVar14 + 1;
            } while ((int)lVar14 < param_6);
          }
        }
        iStack_14 = -iStack_14;
      }
      fVar48 = -1.0 / *pfVar49;
      lVar15 = lVar29;
      lVar14 = lVar30;
      lVar35 = lVar34;
      lVar29 = lVar29 + uVar7;
      lVar34 = lVar1;
      pfVar13 = pfVar49;
      iVar20 = iVar46;
      do {
        lVar1 = lStack_30 + uVar9 * 4;
        lVar30 = lVar14 + uVar9;
        iVar32 = (int)lVar35;
        lVar16 = 0;
        pfVar49 = (float *)((long)param_4 + lVar1);
        pfVar12 = pfVar52;
        lVar17 = -uVar7;
        lVar19 = lVar30;
        lVar21 = lVar1;
        lVar22 = lVar29;
        pfVar27 = pfVar52;
        iVar46 = iVar20;
        lVar28 = lVar50;
        do {
          lVar28 = lVar28 + uVar7;
          fVar45 = fVar48 * *(float *)((long)param_1 + lVar16 + lStack_28 + lVar24);
          if ((lVar53 + 4 + lVar16 < lStack_28 + 0x14 && lStack_28 + 4 < lVar53 + 0x14 + lVar16) ||
             (uVar23 < 8)) {
            pfVar10 = pfVar27;
            do {
              pfVar18 = pfVar10 + 1;
              *pfVar10 = *pfVar10 + pfVar10[lVar17] * fVar45;
              pfVar10 = pfVar18;
            } while (pfVar18 !=
                     (float *)((long)param_1 + (lVar29 + (ulong)uVar54 + lVar35) * 4 + 8 + lVar16));
          }
          else {
            uVar26 = -((uint)((ulong)pfVar27 >> 2) & 3) & 3;
            if (uVar23 < uVar26) {
              uVar26 = uVar23;
            }
            iVar47 = iVar20;
            if (uVar26 != 0) {
              *pfVar12 = *pfVar12 + *(float *)((long)param_1 + lStack_28 + 4) * fVar45;
              iVar47 = iVar32 + 2;
              if (uVar26 != 1) {
                pfVar12[1] = pfVar12[1] + *(float *)((long)param_1 + lStack_28 + 8) * fVar45;
                iVar47 = iVar32 + 3;
                if (uVar26 == 3) {
                  pfVar12[2] = pfVar12[2] + *(float *)((long)param_1 + lStack_28 + 0xc) * fVar45;
                  iVar47 = iVar32 + 4;
                }
              }
            }
            uVar33 = ((uVar23 - uVar26) - 4 >> 2) + 1;
            iVar44 = uVar33 * 4;
            if (2 < ((param_3 - iVar32) + -2) - uVar26) {
              uVar37 = 0;
              pfVar10 = param_1 + lVar28 + 1 + (ulong)uVar26;
              pfVar18 = param_1 + lVar28 + 1 + (ulong)uVar26;
              pfVar36 = param_1 + lVar50 + 1 + (ulong)uVar26;
              do {
                uVar41 = *(undefined8 *)pfVar36;
                uVar37 = uVar37 + 1;
                uVar40 = *(undefined8 *)pfVar18;
                *(ulong *)(pfVar10 + 2) =
                     CONCAT44((float)((ulong)*(undefined8 *)(pfVar18 + 2) >> 0x20) +
                              fVar45 * (float)((ulong)*(undefined8 *)(pfVar36 + 2) >> 0x20),
                              (float)*(undefined8 *)(pfVar18 + 2) +
                              fVar45 * (float)*(undefined8 *)(pfVar36 + 2));
                *(ulong *)pfVar10 =
                     CONCAT44((float)((ulong)uVar40 >> 0x20) +
                              fVar45 * (float)((ulong)uVar41 >> 0x20),
                              (float)uVar40 + fVar45 * (float)uVar41);
                pfVar10 = pfVar10 + 4;
                pfVar18 = pfVar18 + 4;
                pfVar36 = pfVar36 + 4;
              } while (uVar37 < uVar33);
              iVar47 = iVar47 + iVar44;
              if (iVar44 == uVar23 - uVar26) goto LAB_003cc388;
            }
            iVar44 = iVar47 + 1;
            lVar11 = iVar47 + lVar22;
            param_1[lVar11] = param_1[lVar11] + param_1[iVar47 + lVar15] * fVar45;
            if (iVar44 < param_3) {
              iVar47 = iVar47 + 2;
              lVar11 = iVar44 + lVar22;
              param_1[lVar11] = param_1[lVar11] + param_1[lVar15 + iVar44] * fVar45;
              if (iVar47 < param_3) {
                lVar11 = iVar47 + lVar22;
                param_1[lVar11] = param_1[lVar11] + param_1[iVar47 + lVar15] * fVar45;
              }
            }
          }
LAB_003cc388:
          if ((param_4 != (float *)0x0) && (0 < param_6)) {
            if ((lStack_30 < lVar21 + 0x10 && lVar21 < lStack_30 + 0x10) || ((uint)param_6 < 8)) {
              lVar11 = 0;
              do {
                pfVar49[lVar11] = pfVar49[lVar11] + pfVar8[lVar11] * fVar45;
                lVar11 = lVar11 + 1;
              } while ((int)lVar11 < param_6);
            }
            else {
              uVar26 = -((uint)((ulong)pfVar49 >> 2) & 3) & 3;
              if ((uint)param_6 < uVar26) {
                uVar26 = param_6;
              }
              uVar33 = uVar26;
              if ((uVar26 != 0) && (*pfVar49 = *pfVar49 + *pfVar8 * fVar45, uVar26 != 1)) {
                pfVar49[1] = pfVar49[1] + pfVar8[1] * fVar45;
                if (uVar26 == 3) {
                  pfVar49[2] = pfVar49[2] + pfVar8[2] * fVar45;
                }
                else {
                  uVar33 = 2;
                }
              }
              uVar37 = ((param_6 - uVar26) - 4 >> 2) + 1;
              uVar31 = 0;
              iVar47 = uVar37 * 4;
              pfVar10 = param_4 + lVar14 + (ulong)uVar26;
              pfVar18 = param_4 + (ulong)uVar26 + lVar19;
              pfVar36 = param_4 + (ulong)uVar26 + lVar19;
              do {
                uVar41 = *(undefined8 *)pfVar10;
                uVar31 = uVar31 + 1;
                uVar40 = *(undefined8 *)pfVar36;
                *(ulong *)(pfVar18 + 2) =
                     CONCAT44((float)((ulong)*(undefined8 *)(pfVar36 + 2) >> 0x20) +
                              fVar45 * (float)((ulong)*(undefined8 *)(pfVar10 + 2) >> 0x20),
                              (float)*(undefined8 *)(pfVar36 + 2) +
                              fVar45 * (float)*(undefined8 *)(pfVar10 + 2));
                *(ulong *)pfVar18 =
                     CONCAT44((float)((ulong)uVar40 >> 0x20) +
                              fVar45 * (float)((ulong)uVar41 >> 0x20),
                              (float)uVar40 + fVar45 * (float)uVar41);
                pfVar10 = pfVar10 + 4;
                pfVar18 = pfVar18 + 4;
                pfVar36 = pfVar36 + 4;
              } while (uVar31 < uVar37);
              iVar44 = iVar47 + uVar33;
              if (iVar47 != param_6 - uVar26) {
                iVar47 = iVar44 + 1;
                lVar11 = iVar44 + lVar19;
                param_4[lVar11] = param_4[lVar11] + param_4[lVar14 + iVar44] * fVar45;
                if (iVar47 < param_6) {
                  iVar44 = iVar44 + 2;
                  lVar11 = iVar47 + lVar19;
                  param_4[lVar11] = param_4[lVar11] + param_4[lVar14 + iVar47] * fVar45;
                  if (iVar44 < param_6) {
                    lVar11 = iVar44 + lVar19;
                    param_4[lVar11] = param_4[lVar11] + param_4[lVar14 + iVar44] * fVar45;
                  }
                }
              }
            }
          }
          iVar46 = iVar46 + 1;
          lVar16 = lVar16 + lVar24;
          pfVar49 = pfVar49 + uVar9;
          lVar21 = lVar21 + uVar9 * 4;
          lVar19 = lVar19 + uVar9;
          pfVar27 = (float *)((long)pfVar27 + lVar24);
          lVar17 = lVar17 - uVar7;
          pfVar12 = (float *)((long)pfVar12 + lVar24);
          lVar22 = lVar22 + uVar7;
        } while (iVar46 != param_3);
        pfVar8 = pfVar8 + uVar9;
        pfVar52 = (float *)((long)pfVar52 + lVar51);
        uVar23 = uVar23 - 1;
        uVar54 = uVar54 - 1;
        lVar53 = lVar53 + lVar51;
        lStack_28 = lStack_28 + lVar51;
        lVar50 = lVar50 + uVar7 + 1;
        pfVar49 = (float *)((long)pfVar13 + lVar51);
        *pfVar13 = -fVar48;
        iVar46 = iVar20 + 1;
        lStack_30 = lVar1;
        if (iVar46 < param_3) goto LAB_003cbd00;
LAB_003cc5bc:
        if (ABS(*(float *)((long)param_1 + lStack_28)) < fVar39) break;
        fVar48 = -1.0 / *pfVar49;
        if (iVar46 == param_3) {
          *pfVar49 = -fVar48;
          if (param_4 == (float *)0x0) {
            return iStack_14;
          }
          goto LAB_003cc5f4;
        }
        lVar15 = lVar29;
        lVar14 = lVar30;
        lVar35 = lVar34;
        lVar29 = lVar29 + uVar7;
        lVar34 = lVar34 + 1;
        pfVar13 = pfVar49;
        iVar20 = iVar46;
      } while( true );
    }
    iStack_14 = 0;
  }
  return iStack_14;
}


==================================================================

### FUNC 002a97a0 (4 bytes) name=LU

/* cv::LU(double*, unsigned long, int, double*, unsigned long, int) */

int cv::LU(double *param_1,ulong param_2,int param_3,double *param_4,ulong param_5,int param_6)

{
  uint uVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  uint uVar5;
  int iVar6;
  ulong uVar7;
  ulong uVar8;
  long lVar9;
  double *pdVar10;
  int iVar11;
  ulong uVar12;
  long lVar13;
  long lVar14;
  double *pdVar15;
  long lVar16;
  long lVar17;
  double dVar18;
  int iVar19;
  long lVar20;
  double *pdVar21;
  long lVar22;
  long lVar23;
  double *pdVar24;
  uint uVar25;
  double *pdVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  long lVar31;
  long lVar32;
  double *pdVar33;
  uint uVar34;
  double dVar35;
  undefined8 uVar36;
  double dVar37;
  undefined8 uVar38;
  double dVar39;
  undefined8 uVar40;
  double dVar41;
  long lVar42;
  double dVar43;
  int iVar44;
  int iVar45;
  long lVar46;
  double *pdVar47;
  long lVar48;
  uint uVar49;
  long lVar50;
  int iVar51;
  long lStack_20;
  uint uStack_14;
  
  dVar37 = DAT_003cd0e0;
  uVar8 = param_5 >> 3;
  uVar7 = param_2 >> 3;
  if (param_3 < 1) {
    iVar51 = 1;
    if (param_4 != (double *)0x0) {
LAB_003ccef8:
      uVar49 = param_3 - 1;
      if (-1 < (int)uVar49) {
        lVar30 = (long)(int)uVar49;
        lVar29 = uVar7 + 1;
        lVar9 = lVar29 * lVar30 + 1;
        uVar12 = 0xffffffff;
        pdVar47 = (double *)((long)param_4 + lVar30 * uVar8 * 8);
        pdVar24 = (double *)((long)param_1 + lVar29 * 8 * lVar30);
        pdVar26 = param_1 + lVar9;
        do {
          if (0 < param_6) {
            pdVar21 = pdVar47;
            do {
              dVar37 = *pdVar21;
              pdVar10 = pdVar26;
              pdVar15 = pdVar21;
              if ((int)(uVar49 - (int)uVar12) < param_3) {
                do {
                  pdVar33 = pdVar10 + 1;
                  dVar37 = dVar37 - pdVar15[uVar8] * *pdVar10;
                  pdVar10 = pdVar33;
                  pdVar15 = pdVar15 + uVar8;
                } while (pdVar33 != param_1 + lVar9 + 1 + uVar12);
              }
              pdVar15 = pdVar21 + 1;
              *pdVar21 = dVar37 * *pdVar24;
              pdVar21 = pdVar15;
            } while (pdVar47 + (ulong)(param_6 - 1) + 1 != pdVar15);
          }
          uVar25 = (int)uVar12 + 1;
          uVar12 = (ulong)uVar25;
          pdVar24 = pdVar24 + -lVar29;
          pdVar47 = pdVar47 + -uVar8;
          pdVar26 = pdVar26 + ~uVar7;
          lVar9 = lVar9 + ~uVar7;
        } while (uVar25 != uVar49);
      }
    }
  }
  else {
    uVar49 = param_3 - 2;
    lVar32 = 0;
    iVar45 = 0;
    lVar50 = NEON_shl(uVar7 + 1,3);
    lStack_20 = 0;
    uVar25 = param_3 - 1;
    lVar30 = 0;
    lVar28 = 0;
    lVar48 = 0;
    lVar46 = 0;
    lVar29 = (long)param_1 + lVar50 + uVar7 * -8;
    lVar9 = 0;
    iVar51 = 1;
    iVar44 = 1;
    pdVar26 = param_4;
    pdVar47 = param_1;
    uStack_14 = param_3;
    if (param_3 < 2) goto LAB_003ccec0;
LAB_003cc8e8:
    dVar43 = *(double *)((long)param_1 + lVar30);
    lVar14 = lVar32 + uVar7;
    lVar13 = lVar28 + 1;
    dVar18 = dVar43;
    iVar11 = iVar44;
    iVar19 = iVar45;
    do {
      dVar41 = *(double *)((long)param_1 + (lVar14 * 8 - lVar48));
      dVar35 = ABS(dVar18);
      dVar39 = ABS(dVar41);
      lVar31 = lVar14;
      lVar22 = lVar13;
      iVar6 = iVar11;
      if (dVar39 <= dVar35) {
        lVar31 = (long)iVar19 * uVar7;
        lVar22 = (long)iVar19;
        iVar6 = iVar19;
      }
      iVar19 = iVar6;
      iVar11 = iVar11 + 1;
      lVar13 = lVar13 + 1;
      lVar14 = lVar14 + uVar7;
      if (dVar39 <= dVar35) {
        dVar39 = dVar35;
        dVar41 = dVar18;
      }
      dVar18 = dVar41;
    } while (iVar11 != param_3);
    if (dVar37 <= dVar39) {
      if (iVar45 != iVar19) {
        if ((int)lVar28 < param_3) {
          lVar14 = lVar31 + lVar28;
          if ((lVar30 < (lVar28 + 2 + lVar31) * 8 && lVar14 * 8 < lVar30 + 0x10) || (uStack_14 < 9))
          {
            pdVar24 = (double *)((long)param_1 + lVar30);
            do {
              dVar18 = *pdVar24;
              *pdVar24 = pdVar24[lVar31 - lVar32];
              pdVar24[lVar31 - lVar32] = dVar18;
              pdVar24 = pdVar24 + 1;
            } while (pdVar24 != param_1 + lVar46 + 1 + (ulong)uVar25);
          }
          else {
            uVar5 = (uint)((ulong)((long)param_1 + lVar30) >> 3) & 1;
            if (uStack_14 < uVar5) {
              uVar5 = uStack_14;
            }
            if (uVar5 != 0) {
              *(double *)((long)param_1 + lVar30) = param_1[lVar14];
              param_1[lVar14] = dVar43;
              iVar45 = iVar44;
            }
            uVar12 = (ulong)uVar5;
            lVar13 = 0;
            uVar1 = ((uStack_14 - uVar5) - 2 >> 1) + 1;
            uVar34 = 0;
            iVar11 = uVar1 * 2;
            lVar42 = NEON_shl(uVar12 + lVar46,3);
            do {
              puVar2 = (undefined8 *)((long)param_1 + lVar13 + (lVar28 + uVar12 + lVar31) * 8);
              puVar3 = (undefined8 *)((long)param_1 + lVar13 + lVar42);
              uVar34 = uVar34 + 1;
              uVar40 = *puVar2;
              puVar4 = (undefined8 *)((long)param_1 + lVar13 + (lVar14 + uVar12) * 8);
              uVar38 = puVar3[1];
              uVar36 = *puVar3;
              lVar13 = lVar13 + 0x10;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar40;
              puVar4[1] = uVar38;
              *puVar4 = uVar36;
            } while (uVar34 < uVar1);
            if (uStack_14 - uVar5 != iVar11) {
              lVar14 = (long)(iVar45 + iVar11);
              lVar31 = lVar14 + lVar31;
              lVar14 = lVar14 + lVar32;
              dVar18 = param_1[lVar14];
              param_1[lVar14] = param_1[lVar31];
              param_1[lVar31] = dVar18;
            }
          }
        }
        if ((param_4 != (double *)0x0) && (0 < param_6)) {
          lVar22 = lVar22 * uVar8;
          lVar14 = lVar22 + 2;
          lVar13 = lVar14 * 8;
          if (((lVar13 - lStack_20 == 0 || lVar13 < lStack_20) || lStack_20 + 0x10 <= lVar13 + -0x10
              ) && (8 < (uint)param_6)) {
            uVar1 = (uint)((ulong)pdVar26 >> 3) & 1;
            uVar5 = param_6;
            if (uVar1 < (uint)param_6) {
              uVar5 = uVar1;
            }
            if (uVar5 != 0) {
              dVar18 = *pdVar26;
              *pdVar26 = param_4[lVar22];
              param_4[lVar22] = dVar18;
            }
            lVar14 = 0;
            uVar1 = ((param_6 - uVar5) - 2 >> 1) + 1;
            uVar34 = 0;
            iVar45 = uVar1 * 2;
            do {
              puVar2 = (undefined8 *)((long)param_4 + lVar14 + (lVar22 + (ulong)uVar5) * 8);
              puVar3 = (undefined8 *)((long)param_4 + lVar14 + (lVar9 + (ulong)uVar5) * 8);
              uVar34 = uVar34 + 1;
              lVar14 = lVar14 + 0x10;
              uVar40 = *puVar2;
              uVar38 = puVar3[1];
              uVar36 = *puVar3;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar40;
              puVar2[1] = uVar38;
              *puVar2 = uVar36;
            } while (uVar34 < uVar1);
            if (param_6 - uVar5 != iVar45) {
              lVar14 = (long)(int)((uint)(uVar5 != 0) + iVar45);
              lVar22 = lVar14 + lVar22;
              lVar14 = lVar9 + lVar14;
              dVar18 = param_4[lVar14];
              param_4[lVar14] = param_4[lVar22];
              param_4[lVar22] = dVar18;
            }
          }
          else {
            lVar13 = 0;
            do {
              dVar18 = pdVar26[lVar13];
              pdVar26[lVar13] = param_4[lVar14 + lVar13 + -2];
              param_4[lVar14 + lVar13 + -2] = dVar18;
              lVar13 = lVar13 + 1;
            } while ((int)lVar13 < param_6);
          }
        }
        iVar51 = -iVar51;
      }
      dVar18 = -1.0 / *pdVar47;
      lVar14 = lVar9;
      lVar13 = lVar28;
      lVar31 = lVar30;
      lVar22 = lVar32;
      iVar45 = iVar44;
      lVar28 = lVar28 + 1;
      lVar32 = lVar32 + uVar7;
      pdVar24 = pdVar47;
      do {
        lVar42 = lStack_20 + uVar8 * 8;
        lVar9 = lVar14 + uVar8;
        lVar30 = lVar50 + lVar31;
        pdVar47 = (double *)((long)param_4 + lVar42);
        pdVar21 = (double *)((long)param_1 + lVar30);
        lVar23 = -uVar7;
        lVar27 = lVar9;
        iVar44 = iVar45;
        lVar20 = lVar46;
        do {
          lVar20 = lVar20 + uVar7;
          dVar43 = dVar18 * *(double *)((long)param_1 + lVar20 * 8 + lVar48 + lVar13 * 8);
          if ((lVar31 + 8 < (0x10 - (long)param_1) + (long)pdVar21 &&
               (long)pdVar21 - (long)param_1 < lVar31 + 0x18) || (uVar25 < 7)) {
            pdVar15 = pdVar21;
            do {
              pdVar10 = pdVar15 + 1;
              *pdVar15 = *pdVar15 + pdVar15[lVar23] * dVar43;
              pdVar15 = pdVar10;
            } while (pdVar10 != pdVar21 + (ulong)uVar49 + 1);
          }
          else {
            uVar5 = (uint)((ulong)pdVar21 >> 3) & 1;
            if (uVar25 < uVar5) {
              uVar5 = uVar25;
            }
            iVar11 = iVar45;
            if (uVar5 != 0) {
              *(double *)(lVar29 + lVar20 * 8) =
                   *(double *)(lVar29 + lVar20 * 8) +
                   *(double *)((long)param_1 + lVar31 + 8) * dVar43;
              iVar11 = (int)lVar13 + 2;
            }
            uVar1 = ((uVar25 - uVar5) - 2 >> 1) + 1;
            iVar19 = uVar1 * 2;
            if (uStack_14 - uVar5 != 2) {
              uVar34 = 0;
              pdVar15 = param_1 + lVar20 + 1 + (ulong)uVar5;
              pdVar10 = param_1 + lVar20 + 1 + (ulong)uVar5;
              pdVar33 = param_1 + lVar46 + 1 + (ulong)uVar5;
              do {
                dVar41 = *pdVar33;
                uVar34 = uVar34 + 1;
                dVar39 = *pdVar15;
                pdVar10[1] = pdVar15[1] + dVar43 * pdVar33[1];
                *pdVar10 = dVar39 + dVar43 * dVar41;
                pdVar15 = pdVar15 + 2;
                pdVar10 = pdVar10 + 2;
                pdVar33 = pdVar33 + 2;
              } while (uVar34 < uVar1);
              iVar11 = iVar11 + iVar19;
              if (iVar19 == uVar25 - uVar5) goto LAB_003ccd48;
            }
            lVar17 = (long)iVar11 + (lVar20 - lVar13);
            param_1[lVar17] = param_1[lVar17] + param_1[iVar11 + lVar22] * dVar43;
          }
LAB_003ccd48:
          if ((param_4 != (double *)0x0) && (0 < param_6)) {
            if ((lStack_20 < (0x10 - (long)param_4) + (long)pdVar47 &&
                 (long)pdVar47 - (long)param_4 < lStack_20 + 0x10) || ((uint)param_6 < 7)) {
              lVar17 = 0;
              do {
                pdVar47[lVar17] = pdVar47[lVar17] + pdVar26[lVar17] * dVar43;
                lVar17 = lVar17 + 1;
              } while ((int)lVar17 < param_6);
            }
            else {
              uVar5 = (uint)((ulong)pdVar47 >> 3) & 1;
              if ((uint)param_6 < uVar5) {
                uVar5 = param_6;
              }
              if (uVar5 != 0) {
                *pdVar47 = *pdVar47 + *pdVar26 * dVar43;
              }
              uVar1 = ((param_6 - uVar5) - 2 >> 1) + 1;
              uVar34 = 0;
              iVar11 = uVar1 * 2;
              pdVar15 = param_4 + lVar14 + (ulong)uVar5;
              pdVar10 = param_4 + lVar27 + (ulong)uVar5;
              pdVar33 = param_4 + lVar27 + (ulong)uVar5;
              do {
                dVar41 = *pdVar15;
                uVar34 = uVar34 + 1;
                dVar39 = *pdVar33;
                pdVar10[1] = pdVar33[1] + dVar43 * pdVar15[1];
                *pdVar10 = dVar39 + dVar43 * dVar41;
                pdVar15 = pdVar15 + 2;
                pdVar10 = pdVar10 + 2;
                pdVar33 = pdVar33 + 2;
              } while (uVar34 < uVar1);
              if (iVar11 != param_6 - uVar5) {
                lVar16 = (long)(int)(iVar11 + (uint)(uVar5 != 0));
                lVar17 = lVar27 + lVar16;
                param_4[lVar17] = param_4[lVar17] + param_4[lVar14 + lVar16] * dVar43;
              }
            }
          }
          iVar44 = iVar44 + 1;
          pdVar47 = pdVar47 + uVar8;
          lVar23 = lVar23 - uVar7;
          lVar27 = lVar27 + uVar8;
          pdVar21 = (double *)((long)pdVar21 + lVar50 + -8);
        } while (iVar44 != param_3);
        pdVar26 = pdVar26 + uVar8;
        lVar46 = lVar46 + uVar7 + 1;
        uVar25 = uVar25 - 1;
        uVar49 = uVar49 - 1;
        iVar44 = iVar45 + 1;
        uStack_14 = uStack_14 - 1;
        lVar48 = lVar48 + -8;
        pdVar47 = (double *)((long)pdVar24 + lVar50);
        *pdVar24 = -dVar18;
        lVar29 = lVar29 + lVar50 + uVar7 * -8 + -8;
        lStack_20 = lVar42;
        if (iVar44 < param_3) goto LAB_003cc8e8;
LAB_003ccec0:
        if (ABS(*(double *)((long)param_1 + lVar30)) < dVar37) break;
        dVar18 = -1.0 / *pdVar47;
        if (iVar44 == param_3) {
          *pdVar47 = -dVar18;
          if (param_4 == (double *)0x0) {
            return iVar51;
          }
          goto LAB_003ccef8;
        }
        lVar14 = lVar9;
        lVar13 = lVar28;
        lVar31 = lVar30;
        lVar22 = lVar32;
        iVar45 = iVar44;
        lVar28 = lVar28 + 1;
        lVar32 = lVar32 + uVar7;
        pdVar24 = pdVar47;
      } while( true );
    }
    iVar51 = 0;
  }
  return iVar51;
}


==================================================================

### FUNC 002a97a4 (4 bytes) name=Cholesky

/* cv::Cholesky(float*, unsigned long, int, float*, unsigned long, int) */

undefined8
cv::Cholesky(float *param_1,ulong param_2,int param_3,float *param_4,ulong param_5,int param_6)

{
  float *pfVar1;
  float *pfVar2;
  double dVar3;
  float *pfVar4;
  int iVar5;
  float *pfVar6;
  long lVar7;
  long lVar8;
  float *pfVar9;
  int iVar10;
  float *pfVar11;
  float *pfVar12;
  long lVar13;
  float *pfVar14;
  int iVar15;
  ulong uVar16;
  ulong uVar17;
  double __x;
  float fVar18;
  double dVar19;
  float fVar20;
  float fVar21;
  
  dVar3 = DAT_003cd448;
  uVar16 = param_2 >> 2;
  uVar17 = param_5 >> 2;
  if (param_3 < 1) {
    if (param_4 == (float *)0x0) {
      return 1;
    }
  }
  else {
    lVar13 = uVar16 + 1;
    iVar15 = 0;
    pfVar4 = param_1;
    pfVar14 = param_1;
    pfVar6 = param_1;
    do {
      if (iVar15 < 1) {
        __x = (double)*pfVar14;
      }
      else {
        iVar10 = 1;
        *pfVar6 = *pfVar6 * *param_1;
        pfVar11 = param_1;
        pfVar12 = param_1;
        pfVar9 = pfVar4;
        if (iVar15 != 1) {
          do {
            pfVar9 = pfVar9 + 1;
            pfVar12 = pfVar12 + uVar16;
            fVar18 = *pfVar9;
            if (0 < iVar10) {
              lVar7 = 0;
              do {
                pfVar1 = pfVar4 + lVar7;
                pfVar2 = pfVar12 + lVar7;
                lVar7 = lVar7 + 1;
                fVar18 = fVar18 - *pfVar1 * *pfVar2;
              } while ((int)lVar7 < iVar10);
            }
            pfVar11 = pfVar11 + lVar13;
            iVar10 = iVar10 + 1;
            *pfVar9 = fVar18 * *pfVar11;
          } while (iVar10 != iVar15);
        }
        lVar7 = 0;
        __x = (double)*pfVar14;
        do {
          pfVar11 = pfVar4 + lVar7;
          lVar7 = lVar7 + 1;
          __x = __x - (double)*pfVar11 * (double)*pfVar11;
        } while ((int)lVar7 < iVar15);
      }
      if (__x < dVar3) {
        return 0;
      }
      dVar19 = SQRT(__x);
      if (NAN(dVar19)) {
        dVar19 = ::sqrt(__x);
      }
      iVar15 = iVar15 + 1;
      pfVar6 = pfVar6 + uVar16;
      pfVar4 = pfVar4 + uVar16;
      *pfVar14 = (float)(1.0 / dVar19);
      pfVar14 = pfVar14 + lVar13;
    } while (iVar15 != param_3);
    if (param_4 == (float *)0x0) {
      return 1;
    }
    lVar7 = 0;
    iVar15 = 0;
    pfVar6 = param_1;
    pfVar4 = param_1;
    do {
      pfVar14 = param_4;
      if (0 < param_6) {
        do {
          fVar18 = pfVar14[lVar7];
          if (0 < iVar15) {
            lVar8 = 0;
            pfVar11 = pfVar14;
            do {
              pfVar12 = pfVar4 + lVar8;
              lVar8 = lVar8 + 1;
              fVar20 = *pfVar11;
              pfVar11 = pfVar11 + uVar17;
              fVar18 = fVar18 - *pfVar12 * fVar20;
            } while ((int)lVar8 < iVar15);
          }
          pfVar14[lVar7] = fVar18 * *pfVar6;
          pfVar14 = pfVar14 + 1;
        } while (pfVar14 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar15 = iVar15 + 1;
      pfVar6 = pfVar6 + lVar13;
      lVar7 = lVar7 + uVar17;
      pfVar4 = pfVar4 + uVar16;
    } while (iVar15 != param_3);
  }
  iVar15 = param_3 + -1;
  if (-1 < iVar15) {
    lVar13 = (long)iVar15;
    lVar7 = lVar13 * uVar17 * 4;
    pfVar14 = (float *)((long)param_1 + (uVar16 + 1) * 4 * lVar13);
    pfVar6 = (float *)((long)param_4 + lVar7);
    pfVar4 = param_1 + lVar13 + ((long)param_3 + -1) * uVar16;
    lVar7 = ((long)param_3 * 4 + -4) * uVar17 - lVar7;
    iVar10 = iVar15;
    do {
      if (0 < param_6) {
        pfVar11 = pfVar6;
        do {
          fVar18 = *pfVar11;
          if (iVar10 < iVar15) {
            pfVar12 = (float *)((long)pfVar11 + lVar7);
            pfVar9 = pfVar4;
            iVar5 = iVar15;
            do {
              fVar20 = *pfVar9;
              iVar5 = iVar5 + -1;
              fVar21 = *pfVar12;
              pfVar9 = pfVar9 + -uVar16;
              pfVar12 = pfVar12 + -uVar17;
              fVar18 = fVar18 - fVar20 * fVar21;
            } while (iVar5 != iVar10);
          }
          pfVar12 = pfVar11 + 1;
          *pfVar11 = fVar18 * *pfVar14;
          pfVar11 = pfVar12;
        } while (pfVar12 != pfVar6 + (ulong)(param_6 - 1) + 1);
      }
      iVar10 = iVar10 + -1;
      pfVar14 = pfVar14 + -(uVar16 + 1);
      pfVar6 = pfVar6 + -uVar17;
      pfVar4 = pfVar4 + -1;
      lVar7 = lVar7 + uVar17 * 4;
    } while (iVar10 != -1);
  }
  return 1;
}


==================================================================

### FUNC 002a97a8 (4 bytes) name=Cholesky

/* cv::Cholesky(double*, unsigned long, int, double*, unsigned long, int) */

undefined8
cv::Cholesky(double *param_1,ulong param_2,int param_3,double *param_4,ulong param_5,int param_6)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  int iVar4;
  double *pdVar5;
  long lVar6;
  long lVar7;
  double *pdVar8;
  int iVar9;
  double *pdVar10;
  double *pdVar11;
  long lVar12;
  double *pdVar13;
  int iVar14;
  ulong uVar15;
  ulong uVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  dVar18 = DAT_003cd758;
  uVar15 = param_2 >> 3;
  uVar16 = param_5 >> 3;
  if (param_3 < 1) {
    if (param_4 == (double *)0x0) {
      return 1;
    }
  }
  else {
    lVar12 = uVar15 + 1;
    iVar14 = 0;
    pdVar3 = param_1;
    pdVar13 = param_1;
    pdVar5 = param_1;
    do {
      if (iVar14 < 1) {
        dVar17 = *pdVar13;
      }
      else {
        iVar9 = 1;
        *pdVar5 = *pdVar5 * *param_1;
        pdVar10 = param_1;
        pdVar11 = param_1;
        pdVar8 = pdVar3;
        if (iVar14 != 1) {
          do {
            pdVar8 = pdVar8 + 1;
            pdVar11 = pdVar11 + uVar15;
            dVar17 = *pdVar8;
            if (0 < iVar9) {
              lVar6 = 0;
              do {
                pdVar1 = pdVar3 + lVar6;
                pdVar2 = pdVar11 + lVar6;
                lVar6 = lVar6 + 1;
                dVar17 = dVar17 - *pdVar2 * *pdVar1;
              } while ((int)lVar6 < iVar9);
            }
            pdVar10 = pdVar10 + lVar12;
            iVar9 = iVar9 + 1;
            *pdVar8 = dVar17 * *pdVar10;
          } while (iVar9 != iVar14);
        }
        dVar17 = *pdVar13;
        lVar6 = 0;
        do {
          pdVar10 = pdVar3 + lVar6;
          lVar6 = lVar6 + 1;
          dVar17 = dVar17 - *pdVar10 * *pdVar10;
        } while ((int)lVar6 < iVar14);
      }
      if (dVar17 < dVar18) {
        return 0;
      }
      dVar19 = SQRT(dVar17);
      if (NAN(dVar19)) {
        dVar19 = ::sqrt(dVar17);
      }
      iVar14 = iVar14 + 1;
      pdVar5 = pdVar5 + uVar15;
      pdVar3 = pdVar3 + uVar15;
      *pdVar13 = 1.0 / dVar19;
      pdVar13 = pdVar13 + lVar12;
    } while (iVar14 != param_3);
    if (param_4 == (double *)0x0) {
      return 1;
    }
    lVar6 = 0;
    iVar14 = 0;
    pdVar5 = param_1;
    pdVar3 = param_1;
    do {
      pdVar13 = param_4;
      if (0 < param_6) {
        do {
          dVar18 = pdVar13[lVar6];
          if (0 < iVar14) {
            lVar7 = 0;
            pdVar10 = pdVar13;
            do {
              pdVar11 = pdVar3 + lVar7;
              lVar7 = lVar7 + 1;
              dVar17 = *pdVar10;
              pdVar10 = pdVar10 + uVar16;
              dVar18 = dVar18 - dVar17 * *pdVar11;
            } while ((int)lVar7 < iVar14);
          }
          pdVar13[lVar6] = dVar18 * *pdVar5;
          pdVar13 = pdVar13 + 1;
        } while (pdVar13 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar14 = iVar14 + 1;
      pdVar5 = pdVar5 + lVar12;
      lVar6 = lVar6 + uVar16;
      pdVar3 = pdVar3 + uVar15;
    } while (iVar14 != param_3);
  }
  iVar14 = param_3 + -1;
  if (-1 < iVar14) {
    lVar12 = (long)iVar14;
    lVar6 = lVar12 * uVar16 * 8;
    pdVar13 = (double *)((long)param_1 + (uVar15 + 1) * 8 * lVar12);
    pdVar5 = (double *)((long)param_4 + lVar6);
    pdVar3 = param_1 + lVar12 + ((long)param_3 + -1) * uVar15;
    lVar6 = ((long)param_3 * 8 + -8) * uVar16 - lVar6;
    iVar9 = iVar14;
    do {
      if (0 < param_6) {
        pdVar10 = pdVar5;
        do {
          dVar18 = *pdVar10;
          if (iVar9 < iVar14) {
            pdVar11 = (double *)((long)pdVar10 + lVar6);
            pdVar8 = pdVar3;
            iVar4 = iVar14;
            do {
              iVar4 = iVar4 + -1;
              dVar19 = *pdVar8;
              dVar17 = *pdVar11;
              pdVar8 = pdVar8 + -uVar15;
              pdVar11 = pdVar11 + -uVar16;
              dVar18 = dVar18 - dVar17 * dVar19;
            } while (iVar4 != iVar9);
          }
          pdVar11 = pdVar10 + 1;
          *pdVar10 = dVar18 * *pdVar13;
          pdVar10 = pdVar11;
        } while (pdVar11 != pdVar5 + (ulong)(param_6 - 1) + 1);
      }
      iVar9 = iVar9 + -1;
      pdVar13 = pdVar13 + -(uVar15 + 1);
      pdVar5 = pdVar5 + -uVar16;
      pdVar3 = pdVar3 + -1;
      lVar6 = lVar6 + uVar16 * 8;
    } while (iVar9 != -1);
  }
  return 1;
}


==================================================================

### FUNC 002a97ac (1996 bytes) name=determinant

/* cv::determinant(cv::_InputArray const&) */

undefined1  [16] cv::determinant(_InputArray *param_1)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined2 uVar11;
  long lVar12;
  int iVar13;
  int iVar14;
  long lVar15;
  char *pcVar16;
  double *pdVar17;
  long lVar18;
  Mat *pMVar19;
  undefined8 *puVar20;
  int *piVar21;
  ulong uVar22;
  float fVar23;
  double dVar24;
  undefined1 auVar25 [16];
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  undefined4 local_4f0 [2];
  Mat *local_4e8;
  undefined4 local_4e0;
  undefined4 local_4dc;
  uint local_4d8;
  int local_4d4;
  int local_4d0;
  int local_4cc;
  double *local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  long *local_490;
  long local_488;
  long local_480;
  undefined8 local_478;
  undefined8 local_470;
  double *local_468;
  double *local_460;
  double *local_458;
  double *local_450;
  undefined8 local_448;
  long local_440;
  undefined8 *local_438;
  long *local_430;
  long local_428 [2];
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar19 = *(Mat **)(param_1 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(uint *)pMVar19;
    local_4d4 = *(int *)(pMVar19 + 4);
    local_4d0 = *(int *)(pMVar19 + 8);
    local_4cc = *(int *)(pMVar19 + 0xc);
    local_4c8 = *(double **)(pMVar19 + 0x10);
    local_4c0 = *(undefined8 *)(pMVar19 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar19 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar19 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar19 + 0x30);
    local_4a0 = *(long *)(pMVar19 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar21 = (int *)(local_4a0 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = *piVar21 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar19 + 4) < 3) {
      local_488 = **(long **)(pMVar19 + 0x48);
      local_480 = (*(long **)(pMVar19 + 0x48))[1];
    }
    else {
      local_4d4 = 0;
      Mat::copySize((Mat *)&local_4d8,pMVar19);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  lVar12 = local_488;
  pdVar17 = local_4c8;
  iVar13 = local_4d0;
  uVar1 = local_4d8 & 0xfff;
  if (local_4c8 == (double *)0x0) {
LAB_002a9a9c:
    local_478 = 0;
    local_470 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_478,0xc);
    uVar4 = s__mat_empty___00467b00._8_4_;
    *(undefined8 *)pcVar16 = s__mat_empty___00467b00._0_8_;
    *(undefined4 *)(pcVar16 + 8) = uVar4;
    error(-0xd7,(String *)&local_478,"double cv::determinant(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x2d2);
    String::deallocate((String *)&local_478);
  }
  else {
    if (local_4d4 < 3) {
      lVar18 = (long)local_4cc * (long)local_4d0;
    }
    else {
      lVar15 = 0;
      lVar18 = 1;
      do {
        piVar21 = local_498 + lVar15;
        lVar15 = lVar15 + 1;
        lVar18 = lVar18 * *piVar21;
      } while ((int)lVar15 < local_4d4);
    }
    if (lVar18 == 0) goto LAB_002a9a9c;
  }
  if ((local_4cc != local_4d0) || (1 < uVar1 - 5)) {
    local_418 = (double *)0x0;
    local_410 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_418,0x3a);
    uVar11 = s_mat_rows____mat_cols_____type____00467b50._56_2_;
    uVar10 = s_mat_rows____mat_cols_____type____00467b50._40_8_;
    uVar9 = s_mat_rows____mat_cols_____type____00467b50._32_8_;
    uVar8 = s_mat_rows____mat_cols_____type____00467b50._24_8_;
    uVar7 = s_mat_rows____mat_cols_____type____00467b50._16_8_;
    uVar6 = s_mat_rows____mat_cols_____type____00467b50._8_8_;
    uVar5 = s_mat_rows____mat_cols_____type____00467b50._0_8_;
    *(undefined8 *)(pcVar16 + 0x30) = s_mat_rows____mat_cols_____type____00467b50._48_8_;
    *(undefined2 *)(pcVar16 + 0x38) = uVar11;
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
    *(undefined8 *)(pcVar16 + 0x10) = uVar7;
    *(undefined8 *)(pcVar16 + 0x18) = uVar8;
    *(undefined8 *)(pcVar16 + 0x20) = uVar9;
    *(undefined8 *)(pcVar16 + 0x28) = uVar10;
    error(-0xd7,(String *)&local_418,"double cv::determinant(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x2d3);
    String::deallocate((String *)&local_418);
  }
  if (uVar1 == 5) {
    if (iVar13 == 2) {
      dVar28 = (double)*(float *)pdVar17 * (double)*(float *)((long)pdVar17 + lVar12 + 4) -
               (double)*(float *)((long)pdVar17 + 4) * (double)*(float *)((long)pdVar17 + lVar12);
      goto LAB_002a9bf0;
    }
    if (iVar13 == 3) {
      lVar18 = (lVar12 + 4) * 2;
      dVar29 = (double)*(float *)((long)pdVar17 + lVar12 * 2);
      dVar27 = (double)*(float *)((long)pdVar17 + lVar12 + 8);
      dVar28 = (double)*(float *)((long)pdVar17 + lVar18 + -4);
      dVar24 = (double)*(float *)((long)pdVar17 + lVar18);
      dVar26 = (double)*(float *)((long)pdVar17 + lVar12 + 4);
      dVar28 = ((double)*(float *)pdVar17 * (dVar26 * dVar24 - dVar27 * dVar28) -
               (double)*(float *)((long)pdVar17 + 4) *
               (dVar24 * (double)*(float *)((long)pdVar17 + lVar12) - dVar27 * dVar29)) +
               (dVar28 * (double)*(float *)((long)pdVar17 + lVar12) - dVar26 * dVar29) *
               (double)*(float *)(pdVar17 + 1);
      goto LAB_002a9bf0;
    }
    if (iVar13 == 1) {
      dVar28 = (double)*(float *)pdVar17;
      goto LAB_002a9bf0;
    }
    local_418 = adStack_408;
    uVar22 = -(ulong)((uint)(iVar13 * iVar13) >> 0x1f) & 0xfffffffc00000000 |
             (ulong)(uint)(iVar13 * iVar13) << 2;
    local_410 = 0x408;
    if (0x408 < uVar22) {
      local_418 = operator_new__(uVar22);
    }
    local_428[0] = (long)iVar13 * 4;
    local_438 = &local_470;
    local_458 = (double *)((long)local_418 + local_428[0] * iVar13);
    local_430 = local_428;
    local_428[1] = 4;
    local_4e0 = 0;
    local_4dc = 0;
    local_4f0[0] = 0x2010000;
    local_470 = CONCAT44(iVar13,iVar13);
    local_448 = 0;
    local_440 = 0;
    local_478 = 0x242ff4005;
    local_4e8 = (Mat *)&local_478;
    local_468 = local_418;
    local_460 = local_418;
    local_450 = local_458;
    local_410 = uVar22;
    Mat::copyTo((Mat *)&local_4d8,(_OutputArray *)local_4f0);
    iVar14 = FUN_003cbc40(local_468,local_428[0],iVar13,0,0,0);
    dVar28 = (double)iVar14;
    if (dVar28 != 0.0) {
      if (0 < iVar13) {
        iVar14 = 0;
        pdVar17 = local_468;
        do {
          fVar23 = *(float *)pdVar17;
          iVar14 = iVar14 + 1;
          pdVar17 = (double *)((long)pdVar17 + *local_430 + 4);
          dVar28 = dVar28 * (double)fVar23;
        } while (iVar14 != iVar13);
      }
      dVar28 = 1.0 / dVar28;
    }
    if (local_440 != 0) {
      piVar21 = (int *)(local_440 + 0x14);
      do {
        iVar13 = *piVar21;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar13 == 1) {
        Mat::deallocate((Mat *)&local_478);
      }
    }
    local_440 = 0;
    local_468 = (double *)0x0;
    local_450 = (double *)0x0;
    local_458 = (double *)0x0;
    local_460 = (double *)0x0;
    if (0 < local_478._4_4_) {
      iVar13 = 0;
      puVar20 = local_438;
      do {
        *(undefined4 *)puVar20 = 0;
        iVar13 = iVar13 + 1;
        puVar20 = (undefined8 *)((long)puVar20 + 4);
      } while (iVar13 < local_478._4_4_);
    }
                    /* catch() { ... } // from try @ 002aaac0 with catch @ 002a9f40 */
    if (local_430 != local_428) {
      fastFree(local_430);
    }
  }
  else {
    if (iVar13 == 2) {
      dVar28 = *pdVar17 * *(double *)((long)pdVar17 + lVar12 + 8) -
               pdVar17[1] * *(double *)((long)pdVar17 + lVar12);
      goto LAB_002a9bf0;
    }
    if (iVar13 == 3) {
      lVar18 = (lVar12 + 8) * 2;
      dVar27 = *(double *)((long)pdVar17 + lVar12 + 0x10);
      dVar26 = *(double *)((long)pdVar17 + lVar12 * 2);
      dVar24 = *(double *)((long)pdVar17 + lVar12 + 8);
      dVar29 = *(double *)((long)pdVar17 + lVar18);
      dVar28 = *(double *)((long)pdVar17 + lVar18 + -8);
      dVar28 = (*pdVar17 * (dVar24 * dVar29 - dVar27 * dVar28) -
               (dVar29 * *(double *)((long)pdVar17 + lVar12) - dVar27 * dVar26) * pdVar17[1]) +
               (dVar28 * *(double *)((long)pdVar17 + lVar12) - dVar24 * dVar26) * pdVar17[2];
      goto LAB_002a9bf0;
    }
    if (iVar13 == 1) {
      dVar28 = *pdVar17;
      goto LAB_002a9bf0;
    }
    local_418 = adStack_408;
    uVar22 = -(ulong)((uint)(iVar13 * iVar13) >> 0x1f) & 0xfffffff800000000 |
             (ulong)(uint)(iVar13 * iVar13) << 3;
    local_410 = 0x408;
    if (0x408 < uVar22) {
      local_418 = operator_new__(uVar22);
    }
    local_428[0] = (long)iVar13 * 8;
    local_438 = &local_470;
    local_458 = (double *)((long)local_418 + local_428[0] * iVar13);
    local_430 = local_428;
    local_428[1] = 8;
    local_4e0 = 0;
    local_4dc = 0;
    local_4f0[0] = 0x2010000;
    local_470 = CONCAT44(iVar13,iVar13);
    local_448 = 0;
    local_440 = 0;
    local_478 = 0x242ff4006;
    local_4e8 = (Mat *)&local_478;
    local_468 = local_418;
    local_460 = local_418;
    local_450 = local_458;
    local_410 = uVar22;
    Mat::copyTo((Mat *)&local_4d8,(_OutputArray *)local_4f0);
    iVar14 = FUN_003cc800(local_468,local_428[0],iVar13,0,0,0);
    dVar28 = (double)iVar14;
    if (dVar28 != 0.0) {
      if (0 < iVar13) {
        iVar14 = 0;
        pdVar17 = local_468;
        do {
          iVar14 = iVar14 + 1;
          dVar24 = *pdVar17;
          pdVar17 = (double *)((long)pdVar17 + *local_430 + 8);
          dVar28 = dVar28 * dVar24;
        } while (iVar14 != iVar13);
      }
      dVar28 = 1.0 / dVar28;
    }
    if (local_440 != 0) {
      piVar21 = (int *)(local_440 + 0x14);
      do {
        iVar13 = *piVar21;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = iVar13 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar13 == 1) {
        Mat::deallocate((Mat *)&local_478);
      }
    }
    local_440 = 0;
    local_468 = (double *)0x0;
    local_450 = (double *)0x0;
    local_458 = (double *)0x0;
    local_460 = (double *)0x0;
    if (0 < local_478._4_4_) {
      iVar13 = 0;
      puVar20 = local_438;
      do {
        *(undefined4 *)puVar20 = 0;
        iVar13 = iVar13 + 1;
        puVar20 = (undefined8 *)((long)puVar20 + 4);
      } while (iVar13 < local_478._4_4_);
    }
    if (local_430 != local_428) {
      fastFree(local_430);
    }
  }
  if ((local_418 != adStack_408) && (local_418 != (double *)0x0)) {
    operator_delete__(local_418);
  }
LAB_002a9bf0:
  if (local_4a0 != 0) {
    piVar21 = (int *)(local_4a0 + 0x14);
    do {
      iVar13 = *piVar21;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar3) {
        *piVar21 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = (double *)0x0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar13 = 0;
    piVar21 = local_498;
    do {
      *piVar21 = 0;
      iVar13 = iVar13 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar13 < local_4d4);
  }
  if (local_490 != &local_488) {
    fastFree(local_490);
  }
  auVar25._8_8_ = 0;
  auVar25._0_8_ = dVar28;
  return auVar25;
}


==================================================================

### FUNC 002aa030 (3088 bytes) name=backSubst

/* cv::SVD::backSubst(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_OutputArray const&) */

void cv::SVD::backSubst(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                       _InputArray *param_4,_OutputArray *param_5)

{
  int iVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  undefined2 uVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  char *pcVar18;
  void *__dest;
  uint uVar19;
  undefined4 *puVar20;
  int *piVar21;
  Mat *pMVar22;
  ulong uVar23;
  uint uVar24;
  int iVar25;
  ulong uVar26;
  undefined8 local_638;
  undefined8 local_630;
  undefined8 local_628;
  undefined8 local_620;
  undefined8 local_618;
  undefined8 local_610;
  undefined8 local_608;
  undefined8 local_600;
  uint local_5f8;
  int local_5f4;
  int local_5f0;
  int local_5ec;
  long local_5e8;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  long local_5c0;
  int *local_5b8;
  ulong *local_5b0;
  ulong local_5a8;
  ulong local_5a0;
  uint local_598;
  int local_594;
  int local_590;
  int local_58c;
  long local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  int *local_558;
  ulong *local_550;
  ulong local_548;
  ulong local_540;
  uint local_538;
  int local_534;
  int local_530;
  int local_52c;
  long local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  int *local_4f8;
  ulong *local_4f0;
  ulong local_4e8;
  ulong local_4e0;
  uint local_4d8;
  int local_4d4;
  int local_4d0;
  int local_4cc;
  long local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  ulong *local_490;
  ulong local_488;
  ulong local_480;
  undefined4 local_478;
  int local_474;
  undefined4 local_470;
  undefined4 local_46c;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  undefined4 *local_438;
  ulong *local_430;
  ulong local_428;
  ulong local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  iVar16 = _InputArray::kind(param_1);
  if (iVar16 == 0x10000) {
    pMVar22 = *(Mat **)(param_1 + 8);
    local_5b8 = &local_5f0;
    local_5b0 = &local_5a8;
    local_5f8 = *(uint *)pMVar22;
    local_5f4 = *(int *)(pMVar22 + 4);
                    /* try { // try from 002aaac0 to 003aaac3 has its CatchHandler @ 002a9f40 */
    local_5f0 = *(int *)(pMVar22 + 8);
                    /* catch() { ... } // from try @ 002aa010 with catch @ 002aaac4
                       catch() { ... } // from try @ 002aa898 with catch @ 002aaac4 */
    local_5ec = *(int *)(pMVar22 + 0xc);
    local_5e8 = *(long *)(pMVar22 + 0x10);
    local_5e0 = *(undefined8 *)(pMVar22 + 0x18);
    local_5d8 = *(undefined8 *)(pMVar22 + 0x20);
    local_5d0 = *(undefined8 *)(pMVar22 + 0x28);
    local_5c8 = *(undefined8 *)(pMVar22 + 0x30);
    local_5c0 = *(long *)(pMVar22 + 0x38);
    local_5a0 = 0;
    local_5a8 = 0;
    if (local_5c0 != 0) {
      piVar21 = (int *)(local_5c0 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar4) {
          *piVar21 = *piVar21 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar22 + 4) < 3) {
      local_5a8 = **(ulong **)(pMVar22 + 0x48);
      local_5a0 = (*(ulong **)(pMVar22 + 0x48))[1];
    }
    else {
      local_5f4 = 0;
      Mat::copySize((Mat *)&local_5f8,pMVar22);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar16 = _InputArray::kind(param_2);
  if (iVar16 == 0x10000) {
    pMVar22 = *(Mat **)(param_2 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(uint *)pMVar22;
    local_594 = *(int *)(pMVar22 + 4);
    local_590 = *(int *)(pMVar22 + 8);
    local_58c = *(int *)(pMVar22 + 0xc);
    local_588 = *(long *)(pMVar22 + 0x10);
    local_580 = *(undefined8 *)(pMVar22 + 0x18);
    local_578 = *(undefined8 *)(pMVar22 + 0x20);
    local_570 = *(undefined8 *)(pMVar22 + 0x28);
    local_568 = *(undefined8 *)(pMVar22 + 0x30);
    local_560 = *(long *)(pMVar22 + 0x38);
    local_540 = 0;
    local_548 = 0;
    if (local_560 != 0) {
      piVar21 = (int *)(local_560 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar4) {
          *piVar21 = *piVar21 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar22 + 4) < 3) {
      local_548 = **(ulong **)(pMVar22 + 0x48);
                    /* catch() { ... } // from try @ 002aa79c with catch @ 002aaa9c */
      local_540 = (*(ulong **)(pMVar22 + 0x48))[1];
    }
    else {
      local_594 = 0;
      Mat::copySize((Mat *)&local_598,pMVar22);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar16 = _InputArray::kind(param_3);
  if (iVar16 == 0x10000) {
    pMVar22 = *(Mat **)(param_3 + 8);
    local_4f8 = &local_530;
    local_4f0 = &local_4e8;
    local_538 = *(uint *)pMVar22;
    local_534 = *(int *)(pMVar22 + 4);
    local_530 = *(int *)(pMVar22 + 8);
    local_52c = *(int *)(pMVar22 + 0xc);
    local_528 = *(long *)(pMVar22 + 0x10);
    local_520 = *(undefined8 *)(pMVar22 + 0x18);
    local_518 = *(undefined8 *)(pMVar22 + 0x20);
    local_510 = *(undefined8 *)(pMVar22 + 0x28);
    local_508 = *(undefined8 *)(pMVar22 + 0x30);
    local_500 = *(long *)(pMVar22 + 0x38);
    local_4e0 = 0;
    local_4e8 = 0;
    if (local_500 != 0) {
      piVar21 = (int *)(local_500 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar4) {
          *piVar21 = *piVar21 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar22 + 4) < 3) {
      local_4e8 = **(ulong **)(pMVar22 + 0x48);
      local_4e0 = (*(ulong **)(pMVar22 + 0x48))[1];
    }
    else {
      local_534 = 0;
      Mat::copySize((Mat *)&local_538,pMVar22);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  iVar16 = _InputArray::kind(param_4);
  if (iVar16 == 0x10000) {
    pMVar22 = *(Mat **)(param_4 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(uint *)pMVar22;
    local_4d4 = *(int *)(pMVar22 + 4);
    local_4d0 = *(int *)(pMVar22 + 8);
    local_4cc = *(int *)(pMVar22 + 0xc);
    local_4c8 = *(long *)(pMVar22 + 0x10);
    local_4c0 = *(undefined8 *)(pMVar22 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar22 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar22 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar22 + 0x30);
    local_4a0 = *(long *)(pMVar22 + 0x38);
                    /* try { // try from 002aa898 to 003aa9c7 has its CatchHandler @ 002aaac4 */
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar21 = (int *)(local_4a0 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar4) {
          *piVar21 = *piVar21 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (2 < *(int *)(pMVar22 + 4)) {
      local_4d4 = 0;
      Mat::copySize((Mat *)&local_4d8,pMVar22);
      goto LAB_002aa0fc;
    }
    local_488 = **(ulong **)(pMVar22 + 0x48);
    uVar24 = local_5f8 & 0xfff;
    local_480 = (*(ulong **)(pMVar22 + 0x48))[1];
    if (local_5f4 < 1) goto LAB_002aa90c;
LAB_002aa110:
    iVar16 = (int)local_5b0[(long)local_5f4 + -1];
    if (local_4c8 != 0) goto LAB_002aa130;
LAB_002aa920:
    iVar17 = local_52c;
    if (local_590 < local_52c) {
      iVar17 = local_590;
    }
    iVar25 = local_590;
    if (local_5f0 == 1) goto LAB_002aa93c;
LAB_002aa150:
    uVar26 = local_5a8;
    if (local_5ec != 1) {
      uVar26 = local_5a8 + (long)iVar16;
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
LAB_002aa0fc:
    uVar24 = local_5f8 & 0xfff;
    if (0 < local_5f4) goto LAB_002aa110;
LAB_002aa90c:
    iVar16 = 0;
    if (local_4c8 == 0) goto LAB_002aa920;
LAB_002aa130:
    iVar17 = local_52c;
    if (local_590 < local_52c) {
      iVar17 = local_590;
    }
    iVar25 = local_4cc;
    if (local_5f0 != 1) goto LAB_002aa150;
LAB_002aa93c:
    uVar26 = (long)iVar16;
  }
  iVar15 = local_52c;
  iVar16 = local_590;
  local_418 = auStack_408;
  uVar23 = (long)iVar25 * 8 + 0x10;
  local_410 = 0x408;
  if (uVar23 < 0x409) {
    uVar19 = uVar24;
    if ((local_598 & 0xfff) == uVar24) goto LAB_002aa820;
LAB_002aa1b8:
    local_638 = 0;
    local_630 = 0;
    local_410 = uVar23;
    pcVar18 = (char *)String::allocate((String *)&local_638,0x4c);
    uVar13 = s_w_type______u_type______u_type___00467b90._72_4_;
    uVar12 = s_w_type______u_type______u_type___00467b90._56_8_;
    uVar11 = s_w_type______u_type______u_type___00467b90._48_8_;
    uVar10 = s_w_type______u_type______u_type___00467b90._40_8_;
    uVar9 = s_w_type______u_type______u_type___00467b90._32_8_;
    uVar8 = s_w_type______u_type______u_type___00467b90._24_8_;
    uVar7 = s_w_type______u_type______u_type___00467b90._16_8_;
    uVar6 = s_w_type______u_type______u_type___00467b90._8_8_;
    uVar5 = s_w_type______u_type______u_type___00467b90._0_8_;
    *(undefined8 *)(pcVar18 + 0x40) = s_w_type______u_type______u_type___00467b90._64_8_;
    *(undefined4 *)(pcVar18 + 0x48) = uVar13;
    *(undefined8 *)pcVar18 = uVar5;
    *(undefined8 *)(pcVar18 + 8) = uVar6;
    *(undefined8 *)(pcVar18 + 0x10) = uVar7;
    *(undefined8 *)(pcVar18 + 0x18) = uVar8;
    *(undefined8 *)(pcVar18 + 0x20) = uVar9;
    *(undefined8 *)(pcVar18 + 0x28) = uVar10;
    *(undefined8 *)(pcVar18 + 0x30) = uVar11;
    *(undefined8 *)(pcVar18 + 0x38) = uVar12;
    error(-0xd7,(String *)&local_638,
          "static void cv::SVD::backSubst(cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x5ac);
    String::deallocate((String *)&local_638);
  }
  else {
    local_418 = operator_new__(uVar23);
    uVar19 = local_5f8 & 0xfff;
    if ((local_598 & 0xfff) != (local_5f8 & 0xfff)) goto LAB_002aa1b8;
LAB_002aa820:
    if ((((uVar19 != (local_538 & 0xfff)) || (local_588 == 0)) || (local_528 == 0)) ||
       (local_410 = uVar23, local_5e8 == 0)) goto LAB_002aa1b8;
  }
  if ((iVar17 <= local_58c) && (iVar17 <= local_530)) {
    iVar1 = local_5b8[1];
    iVar2 = *local_5b8;
    if ((((iVar1 == iVar17) && (iVar2 == 1)) || ((iVar1 == 1 && (iVar2 == iVar17)))) ||
       ((iVar1 == local_530 && (local_58c == iVar2)))) goto LAB_002aa294;
  }
  local_628 = 0;
  local_620 = 0;
  __dest = (void *)String::allocate((String *)&local_628,0x7a);
  memcpy(__dest,&DAT_00467be0,0x7a);
  error(-0xd7,(String *)&local_628,
        "static void cv::SVD::backSubst(cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)"
        ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x5ae);
  String::deallocate((String *)&local_628);
LAB_002aa294:
  if ((local_4c8 != 0) && (((local_4d8 & 0xfff) != uVar24 || (iVar16 != local_4d0)))) {
    local_618 = 0;
    local_610 = 0;
    pcVar18 = (char *)String::allocate((String *)&local_618,0x36);
    uVar14 = s_rhs_data____0_____rhs_type______t_00467c60._52_2_;
    uVar10 = s_rhs_data____0_____rhs_type______t_00467c60._40_8_;
    uVar9 = s_rhs_data____0_____rhs_type______t_00467c60._32_8_;
    uVar8 = s_rhs_data____0_____rhs_type______t_00467c60._24_8_;
    uVar7 = s_rhs_data____0_____rhs_type______t_00467c60._16_8_;
    uVar6 = s_rhs_data____0_____rhs_type______t_00467c60._8_8_;
    uVar5 = s_rhs_data____0_____rhs_type______t_00467c60._0_8_;
    *(undefined4 *)(pcVar18 + 0x30) = s_rhs_data____0_____rhs_type______t_00467c60._48_4_;
    *(undefined2 *)(pcVar18 + 0x34) = uVar14;
    *(undefined8 *)pcVar18 = uVar5;
    *(undefined8 *)(pcVar18 + 8) = uVar6;
    *(undefined8 *)(pcVar18 + 0x10) = uVar7;
    *(undefined8 *)(pcVar18 + 0x18) = uVar8;
    *(undefined8 *)(pcVar18 + 0x20) = uVar9;
    *(undefined8 *)(pcVar18 + 0x28) = uVar10;
    error(-0xd7,(String *)&local_618,
          "static void cv::SVD::backSubst(cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x5af);
    String::deallocate((String *)&local_618);
  }
  _OutputArray::create(param_5,iVar15,iVar25,uVar24,-1,false,0);
  iVar17 = _InputArray::kind((_InputArray *)param_5);
  if (iVar17 == 0x10000) {
    pMVar22 = *(Mat **)(param_5 + 8);
    local_438 = &local_470;
    local_430 = &local_428;
    local_478 = *(undefined4 *)pMVar22;
    local_474 = *(int *)(pMVar22 + 4);
    local_470 = *(undefined4 *)(pMVar22 + 8);
    local_46c = *(undefined4 *)(pMVar22 + 0xc);
    local_468 = *(undefined8 *)(pMVar22 + 0x10);
    local_460 = *(undefined8 *)(pMVar22 + 0x18);
    local_458 = *(undefined8 *)(pMVar22 + 0x20);
    local_450 = *(undefined8 *)(pMVar22 + 0x28);
    local_448 = *(undefined8 *)(pMVar22 + 0x30);
    local_440 = *(long *)(pMVar22 + 0x38);
    local_420 = 0;
    local_428 = 0;
    if (local_440 != 0) {
      piVar21 = (int *)(local_440 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar4) {
          *piVar21 = *piVar21 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar22 + 4) < 3) {
      local_428 = **(ulong **)(pMVar22 + 0x48);
      local_420 = (*(ulong **)(pMVar22 + 0x48))[1];
    }
    else {
      local_474 = 0;
      Mat::copySize((Mat *)&local_478,pMVar22);
    }
  }
  else {
    _InputArray::getMat_((int)param_5);
  }
  if (uVar24 == 5) {
                    /* try { // try from 002aa79c to 003aa7af has its CatchHandler @ 002aaa9c */
    uVar23 = uVar26 >> 2;
    if (uVar26 == 0) {
      uVar23 = 1;
    }
    FUN_002a88f8(iVar16,iVar15,local_5e8,uVar23,local_588,local_548 >> 2,0,local_528,
                 (int)(local_4e8 >> 2),local_4c8,(int)(local_488 >> 2),iVar25,local_468,
                 (int)(local_428 >> 2),(ulong)(local_418 + 7) & 0xfffffffffffffff8);
  }
  else if (uVar24 == 6) {
    uVar23 = uVar26 >> 3;
    if (uVar26 == 0) {
      uVar23 = 1;
    }
    FUN_002a7f00(iVar16,iVar15,local_5e8,uVar23,local_588,local_548 >> 3,0,local_528,
                 (int)(local_4e8 >> 3),local_4c8,(int)(local_488 >> 3),iVar25,local_468,
                 (int)(local_428 >> 3),(ulong)(local_418 + 7) & 0xfffffffffffffff8);
  }
  else {
    local_608 = 0;
    local_600 = 0;
    String::allocate((String *)&local_608,0);
    error(-0xd2,(String *)&local_608,
          "static void cv::SVD::backSubst(cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x5bc);
    String::deallocate((String *)&local_608);
  }
  if (local_440 != 0) {
    piVar21 = (int *)(local_440 + 0x14);
    do {
      iVar16 = *piVar21;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar4) {
        *piVar21 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_478);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar16 = 0;
    puVar20 = local_438;
    do {
      *puVar20 = 0;
      iVar16 = iVar16 + 1;
      puVar20 = puVar20 + 1;
    } while (iVar16 < local_474);
  }
  if (local_430 != &local_428) {
    fastFree(local_430);
  }
  if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_4a0 != 0) {
    piVar21 = (int *)(local_4a0 + 0x14);
    do {
      iVar16 = *piVar21;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar4) {
        *piVar21 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar16 = 0;
    piVar21 = local_498;
    do {
      *piVar21 = 0;
      iVar16 = iVar16 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar16 < local_4d4);
  }
  if (local_490 != &local_488) {
    fastFree(local_490);
  }
  if (local_500 != 0) {
    piVar21 = (int *)(local_500 + 0x14);
    do {
      iVar16 = *piVar21;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar4) {
        *piVar21 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_538);
    }
  }
  local_500 = 0;
  local_528 = 0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_534) {
    iVar16 = 0;
    piVar21 = local_4f8;
    do {
      *piVar21 = 0;
      iVar16 = iVar16 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar16 < local_534);
  }
  if (local_4f0 != &local_4e8) {
    fastFree(local_4f0);
  }
  if (local_560 != 0) {
    piVar21 = (int *)(local_560 + 0x14);
    do {
      iVar16 = *piVar21;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar4) {
        *piVar21 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_598);
    }
  }
  local_560 = 0;
  local_588 = 0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar16 = 0;
    piVar21 = local_558;
    do {
      *piVar21 = 0;
      iVar16 = iVar16 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar16 < local_594);
  }
  if (local_550 != &local_548) {
    fastFree(local_550);
  }
  if (local_5c0 != 0) {
    piVar21 = (int *)(local_5c0 + 0x14);
    do {
      iVar16 = *piVar21;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar4) {
        *piVar21 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_5f8);
    }
  }
  local_5c0 = 0;
  local_5e8 = 0;
  local_5d0 = 0;
  local_5d8 = 0;
  local_5e0 = 0;
  if (0 < local_5f4) {
    iVar16 = 0;
    piVar21 = local_5b8;
    do {
      *piVar21 = 0;
      iVar16 = iVar16 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar16 < local_5f4);
  }
  if (local_5b0 != &local_5a8) {
    fastFree(local_5b0);
  }
  return;
}


==================================================================

### FUNC 002aad5c (108 bytes) name=backSubst

/* cv::SVD::backSubst(cv::_InputArray const&, cv::_OutputArray const&) const */

void __thiscall cv::SVD::backSubst(SVD *this,_InputArray *param_1,_OutputArray *param_2)

{
  undefined4 local_48 [2];
  SVD *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  SVD *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  SVD *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_40 = this + 0x60;
  local_10 = this + 0xc0;
  local_48[0] = 0x1010000;
  local_30[0] = 0x1010000;
  local_18[0] = 0x1010000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_28 = this;
  backSubst((_InputArray *)local_48,(_InputArray *)local_30,(_InputArray *)local_18,param_1,param_2)
  ;
  return;
}


==================================================================

### FUNC 002aadc8 (4 bytes) name=SVBackSubst

/* cv::SVBackSubst(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_OutputArray const&) */

void cv::SVBackSubst(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                    _InputArray *param_4,_OutputArray *param_5)

{
  (*(code *)PTR_backSubst_005016d8)();
  return;
}


==================================================================

### FUNC 002aadcc (780 bytes) name=cvDet

undefined1  [16] cvDet(cv *param_1)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  undefined8 uVar9;
  undefined8 uVar10;
  long lVar11;
  int iVar12;
  AutoBuffer *in_x5;
  double *pdVar13;
  double dVar14;
  undefined1 auVar15 [16];
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((((param_1 != (cv *)0x0) && ((*(uint *)param_1 & 0xffff0000) == 0x42420000)) &&
      (0 < *(int *)(param_1 + 0x24))) &&
     (((iVar12 = *(int *)(param_1 + 0x20), 0 < iVar12 &&
       (pdVar13 = *(double **)(param_1 + 0x18), pdVar13 != (double *)0x0)) && (iVar12 < 4)))) {
    uVar2 = *(uint *)param_1 & 0xfff;
    iVar3 = *(int *)(param_1 + 4);
    if (*(int *)(param_1 + 0x24) != iVar12) {
      local_60 = 0;
      local_58 = 0;
      in_x5 = (AutoBuffer *)cv::String::allocate((String *)&local_60,0x11);
      uVar10 = s_rows____mat_>cols_00467c98._8_8_;
      uVar9 = s_rows____mat_>cols_00467c98._0_8_;
      in_x5[0x10] = (AutoBuffer)s_rows____mat_>cols_00467c98[0x10];
      *(undefined8 *)in_x5 = uVar9;
      *(undefined8 *)(in_x5 + 8) = uVar10;
      cv::error(-0xd7,(String *)&local_60,"double cvDet(const CvArr*)",
                "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x5e4);
      cv::String::deallocate((String *)&local_60);
    }
    if (uVar2 == 5) {
      if (iVar12 == 2) {
        auVar15._8_8_ = 0;
        auVar15._0_8_ =
             (double)*(float *)pdVar13 * (double)*(float *)((long)pdVar13 + (long)iVar3 + 4) -
             (double)*(float *)((long)pdVar13 + 4) * (double)*(float *)((long)pdVar13 + (long)iVar3)
        ;
        return auVar15;
      }
      if (iVar12 == 3) {
        lVar11 = (long)iVar3;
        dVar19 = (double)*(float *)((long)pdVar13 + lVar11 * 2);
        dVar17 = (double)*(float *)((long)pdVar13 + lVar11 + 8);
        dVar16 = (double)*(float *)((long)pdVar13 + (long)(iVar3 << 1) + 4);
        dVar14 = (double)*(float *)((long)pdVar13 + (long)(iVar3 << 1) + 8);
        dVar18 = (double)*(float *)((long)pdVar13 + lVar11 + 4);
        auVar8._8_8_ = 0;
        auVar8._0_8_ = ((double)*(float *)pdVar13 * (dVar18 * dVar14 - dVar17 * dVar16) -
                       (double)*(float *)((long)pdVar13 + 4) *
                       (dVar14 * (double)*(float *)((long)pdVar13 + lVar11) - dVar17 * dVar19)) +
                       (dVar16 * (double)*(float *)((long)pdVar13 + lVar11) - dVar18 * dVar19) *
                       (double)*(float *)(pdVar13 + 1);
        return auVar8;
      }
    }
    else if (uVar2 == 6) {
      if (iVar12 == 2) {
        auVar7._8_8_ = 0;
        auVar7._0_8_ = *pdVar13 * *(double *)((long)pdVar13 + (long)iVar3 + 8) -
                       pdVar13[1] * *(double *)((long)pdVar13 + (long)iVar3);
        return auVar7;
      }
      if (iVar12 == 3) {
        lVar11 = (long)iVar3;
        dVar17 = *(double *)((long)pdVar13 + lVar11 + 0x10);
        dVar19 = *(double *)((long)pdVar13 + lVar11 * 2);
        dVar14 = *(double *)((long)pdVar13 + (long)(iVar3 << 1) + 0x10);
        dVar18 = *(double *)((long)pdVar13 + (long)(iVar3 << 1) + 8);
        dVar16 = *(double *)((long)pdVar13 + lVar11 + 8);
        auVar6._8_8_ = 0;
        auVar6._0_8_ = (*pdVar13 * (dVar16 * dVar14 - dVar17 * dVar18) -
                       (dVar14 * *(double *)((long)pdVar13 + lVar11) - dVar17 * dVar19) * pdVar13[1]
                       ) + (dVar18 * *(double *)((long)pdVar13 + lVar11) - dVar16 * dVar19) *
                           pdVar13[2];
        return auVar6;
      }
    }
  }
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x1010000;
  local_70 = (Mat *)&local_60;
  auVar15 = cv::determinant((_InputArray *)local_78);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar12 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return auVar15;
}


==================================================================

### FUNC 002ab120 (2988 bytes) name=cvSVBkSb

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvSVBkSb(cv *param_1,cv *param_2,cv *param_3,cv *param_4,cv *param_5,AutoBuffer *param_6)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  undefined4 *puVar10;
  int iVar11;
  undefined8 *puVar12;
  AutoBuffer *pAVar13;
  AutoBuffer *pAVar14;
  undefined4 local_300 [2];
  Mat *local_2f8;
  undefined4 local_2f0;
  undefined4 local_2ec;
  undefined4 local_2e8 [2];
  Mat *local_2e0;
  undefined4 local_2d8;
  undefined4 local_2d4;
  undefined4 local_2d0 [2];
  Mat *local_2c8;
  uint local_2c0;
  uint local_2bc;
  undefined8 local_2b8;
  Mat *local_2b0;
  uint local_2a8;
  uint local_2a4;
  undefined4 local_2a0;
  int local_29c;
  undefined4 local_298;
  undefined4 local_294;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined4 *local_260;
  undefined8 *local_258;
  undefined8 auStack_250 [2];
  undefined4 local_240;
  int local_23c;
  undefined4 local_238;
  undefined4 local_234;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined4 *local_200;
  undefined8 *local_1f8;
  undefined8 auStack_1f0 [2];
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  AutoBuffer *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  uint local_180;
  int iStack_17c;
  undefined8 uStack_178;
  long local_170;
  undefined8 local_168;
  AutoBuffer *local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined8 local_120;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  AutoBuffer *local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  AutoBuffer *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  uVar5 = (uint)param_6;
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = (AutoBuffer *)&local_190;
  local_1a0 = &uStack_1d8;
  uStack_1d8 = _UNK_002abe38;
  local_1e0 = _DAT_002abe30;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,local_198);
  local_120 = CONCAT44(iStack_17c,local_180);
  local_d8 = &local_d0;
  local_e0 = &uStack_118;
  uStack_c8 = 0;
  local_d0 = 0;
  uStack_118 = uStack_178;
  local_110 = local_170;
  local_108 = local_168;
  local_100 = local_160;
  local_f8 = local_158;
  local_f0 = local_150;
  local_e8 = local_148;
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iStack_17c < 3) {
    local_d0 = *local_138;
    uStack_c8 = local_138[1];
    pAVar14 = local_160;
  }
  else {
    local_120 = (ulong)local_180;
    cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_180);
    pAVar14 = local_160;
  }
  if ((uVar5 >> 1 & 1) != 0) {
    local_78 = &local_70;
    pAVar14 = (AutoBuffer *)&uStack_b8;
    local_2a8 = 0;
    local_2a4 = 0;
    local_2b8._4_4_ = (undefined4)((ulong)local_2b8 >> 0x20);
    local_2b8 = CONCAT44(local_2b8._4_4_,0x2010000);
    local_b0 = 0;
    uStack_a8 = 0;
    local_a0 = 0;
    uStack_98 = 0;
    local_90 = 0;
    lStack_88 = 0;
    uStack_68 = 0;
    local_70 = 0;
    local_2c0 = 0;
    local_2bc = 0;
    local_2d0[0] = 0x1010000;
    local_2c8 = (Mat *)&local_2a0;
    local_2b0 = (Mat *)&local_c0;
    local_c0 = _DAT_002abe30;
    uStack_b8 = (Mat *)_UNK_002abe38;
    local_80 = pAVar14;
    cv::transpose((_InputArray *)local_2d0,(_OutputArray *)&local_2b8);
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_268 != 0) {
      piVar1 = (int *)(lStack_268 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_2a0);
      }
    }
    lStack_268 = 0;
    local_290 = 0;
    uStack_278 = 0;
    local_280 = 0;
    uStack_288 = 0;
    if (local_29c < 1) {
LAB_002abb50:
      local_2a0 = (undefined4)local_c0;
      if (2 < local_c0._4_4_) goto LAB_002abb5c;
      local_298 = (undefined4)uStack_b8;
      local_294 = uStack_b8._4_4_;
      *local_258 = *local_78;
      local_258[1] = local_78[1];
      local_29c = local_c0._4_4_;
    }
    else {
      iVar11 = 0;
      puVar10 = local_260;
      do {
        *puVar10 = 0;
        iVar11 = iVar11 + 1;
        puVar10 = puVar10 + 1;
      } while (iVar11 < local_29c);
      if (local_29c < 3) goto LAB_002abb50;
LAB_002abb5c:
      local_2a0 = (undefined4)local_c0;
                    /* catch() { ... } // from try @ 002abbb0 with catch @ 002abb60
                       catch() { ... } // from try @ 002abc90 with catch @ 002abb60
                       catch() { ... } // from try @ 002abcd8 with catch @ 002abb60 */
      cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_c0);
    }
    uStack_278 = uStack_98;
    local_280 = local_a0;
    lStack_268 = lStack_88;
    local_270 = local_90;
    uStack_288 = uStack_a8;
    local_290 = local_b0;
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 002abbb0 to 003abbb3 has its CatchHandler @ 002abb60 */
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar11 = 0;
      pAVar13 = local_80;
      do {
        *(undefined4 *)pAVar13 = 0;
        iVar11 = iVar11 + 1;
        pAVar13 = pAVar13 + 4;
      } while (iVar11 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      cv::fastFree(local_78);
    }
  }
  uVar2 = uVar5 & 4;
  if ((uVar5 >> 2 & 1) == 0) {
    local_78 = &local_70;
    local_80 = (AutoBuffer *)&uStack_b8;
    uStack_b8 = (Mat *)_UNK_002abe38;
    local_c0 = _DAT_002abe30;
    local_2b8 = CONCAT44(local_2b8._4_4_,0x2010000);
    local_b0 = 0;
    uStack_a8 = 0;
    local_a0 = 0;
    uStack_98 = 0;
    local_90 = 0;
    lStack_88 = 0;
    uStack_68 = 0;
    local_70 = 0;
    pAVar14 = (AutoBuffer *)0x1010000;
    local_2d0[0] = 0x1010000;
    local_2c8 = (Mat *)&local_240;
    local_2c0 = uVar2;
    local_2bc = uVar2;
    local_2b0 = (Mat *)&local_c0;
    local_2a8 = uVar2;
    local_2a4 = uVar2;
    cv::transpose((_InputArray *)local_2d0,(_OutputArray *)&local_2b8);
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
                    /* try { // try from 002ab898 to 003ab89b has its CatchHandler @ 002ab948 */
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_208 != 0) {
      piVar1 = (int *)(lStack_208 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_240);
      }
    }
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
                    /* try { // try from 002ab8e4 to 003ab8e7 has its CatchHandler @ 002ab938 */
    uStack_228 = 0;
    if (local_23c < 1) {
LAB_002ab918:
      local_240 = (undefined4)local_c0;
      if (2 < local_c0._4_4_) goto LAB_002ab924;
                    /* try { // try from 002abc1c to 003abc1f has its CatchHandler @ 002abcb4 */
      local_238 = (undefined4)uStack_b8;
      local_234 = uStack_b8._4_4_;
      *local_1f8 = *local_78;
      local_1f8[1] = local_78[1];
      local_23c = local_c0._4_4_;
    }
    else {
                    /* try { // try from 002ab8ec to 003ab8ef has its CatchHandler @ 002ab948 */
      iVar11 = 0;
      puVar10 = local_200;
      do {
        *puVar10 = 0;
        iVar11 = iVar11 + 1;
                    /* try { // try from 002ab900 to 003ab903 has its CatchHandler @ 002ab5d8 */
        puVar10 = puVar10 + 1;
      } while (iVar11 < local_23c);
                    /* catch() { ... } // from try @ 002ab6b0 with catch @ 002ab908 */
      if (local_23c < 3) goto LAB_002ab918;
LAB_002ab924:
      local_240 = (undefined4)local_c0;
      cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_c0);
    }
                    /* try { // try from 002ab934 to 003ab937 has its CatchHandler @ 002ab5d8 */
                    /* catch() { ... } // from try @ 002ab8e4 with catch @ 002ab938 */
                    /* catch() { ... } // from try @ 002ab65c with catch @ 002ab948
                       catch() { ... } // from try @ 002ab6b8 with catch @ 002ab948
                       catch() { ... } // from try @ 002ab898 with catch @ 002ab948
                       catch() { ... } // from try @ 002ab8ec with catch @ 002ab948 */
    uStack_218 = uStack_98;
    local_220 = local_a0;
    lStack_208 = lStack_88;
    local_210 = local_90;
    uStack_228 = uStack_a8;
    local_230 = local_b0;
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
        iVar11 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar11 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar11 == 1) {
                    /* try { // try from 002abc90 to 003abcaf has its CatchHandler @ 002abb60 */
        cv::Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar11 = 0;
      pAVar13 = local_80;
      do {
        *(undefined4 *)pAVar13 = 0;
        iVar11 = iVar11 + 1;
        pAVar13 = pAVar13 + 4;
      } while (iVar11 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      cv::fastFree(local_78);
    }
  }
  if (param_4 == (cv *)0x0) goto LAB_002ab41c;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar14);
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar9 = local_78;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_002ab360:
    if (2 < local_c0._4_4_) goto LAB_002ab36c;
    uStack_1d8 = uStack_b8;
    local_1e0 = local_c0;
    *(undefined8 *)local_198 = *local_78;
    *(undefined8 *)(local_198 + 8) = puVar9[1];
  }
  else {
    iVar11 = 0;
    puVar12 = local_1a0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar11 = iVar11 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar11 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_002ab360;
LAB_002ab36c:
    local_1e0 = CONCAT44(local_1e0._4_4_,(undefined4)local_c0);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_c0);
  }
  uStack_1b8 = uStack_98;
  local_1c0 = local_a0;
  lStack_1a8 = lStack_88;
  local_1b0 = local_90;
  uStack_1c8 = uStack_a8;
  local_1d0 = local_b0;
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar11 = 0;
    pAVar14 = local_80;
    do {
      *(undefined4 *)pAVar14 = 0;
      iVar11 = iVar11 + 1;
      pAVar14 = pAVar14 + 4;
    } while (iVar11 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
LAB_002ab41c:
  local_2a8 = 0;
  local_2a4 = 0;
  local_2b8 = CONCAT44(local_2b8._4_4_,0x1010000);
  local_2f0 = 0;
  local_2ec = 0;
  local_300[0] = 0x1010000;
  local_2d8 = 0;
  local_2d4 = 0;
  local_2e8[0] = 0x1010000;
  local_2c0 = 0;
  local_2bc = 0;
  local_2d0[0] = 0x1010000;
  local_b0 = 0;
  local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
  local_2f8 = aMStack_60;
  local_2e0 = (Mat *)&local_2a0;
  local_2c8 = (Mat *)&local_240;
  local_2b0 = (Mat *)&local_1e0;
  uStack_b8 = (Mat *)&local_180;
  cv::SVD::backSubst((_InputArray *)local_300,(_InputArray *)local_2e8,(_InputArray *)local_2d0,
                     (_InputArray *)&local_2b8,(_OutputArray *)&local_c0);
  if (local_170 != local_110) {
    local_2b8 = 0;
    local_2b0 = (Mat *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_2b8,0x15);
    cVar3 = s_dst_data____dst0_data_00465ca0[0x14];
    uVar7 = s_dst_data____dst0_data_00465ca0._8_8_;
    uVar6 = s_dst_data____dst0_data_00465ca0._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_dst_data____dst0_data_00465ca0._16_4_;
    pcVar8[0x14] = cVar3;
    *(undefined8 *)pcVar8 = uVar6;
    *(undefined8 *)(pcVar8 + 8) = uVar7;
    cv::error(-0xd7,(String *)&local_2b8,
              "void cvSVBkSb(const CvArr*, const CvArr*, const CvArr*, const CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x697);
    cv::String::deallocate((String *)&local_2b8);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = (AutoBuffer *)0x0;
  local_108 = 0;
  if (0 < local_120._4_4_) {
    iVar11 = 0;
    puVar9 = local_e0;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar11 = iVar11 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar11 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = (AutoBuffer *)0x0;
  local_168 = 0;
  if (0 < iStack_17c) {
    iVar11 = 0;
    do {
      *local_140 = 0;
      iVar11 = iVar11 + 1;
                    /* catch() { ... } // from try @ 002ab60c with catch @ 002ab5d8
                       catch() { ... } // from try @ 002ab784 with catch @ 002ab5d8
                       catch() { ... } // from try @ 002ab900 with catch @ 002ab5d8
                       catch() { ... } // from try @ 002ab934 with catch @ 002ab5d8 */
      local_140 = local_140 + 1;
    } while (iVar11 < iStack_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002ab60c to 003ab62b has its CatchHandler @ 002ab5d8 */
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar11 = 0;
    puVar9 = local_1a0;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar11 = iVar11 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar11 < local_1e0._4_4_);
  }
                    /* try { // try from 002ab65c to 003ab65f has its CatchHandler @ 002ab948 */
  if (local_198 != (AutoBuffer *)&local_190) {
    cv::fastFree(local_198);
  }
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_23c) {
                    /* try { // try from 002ab6b0 to 003ab6b3 has its CatchHandler @ 002ab908 */
    iVar11 = 0;
    do {
      *local_200 = 0;
                    /* try { // try from 002ab6b8 to 003ab713 has its CatchHandler @ 002ab948 */
      iVar11 = iVar11 + 1;
      local_200 = local_200 + 1;
    } while (iVar11 < local_23c);
  }
  if (local_1f8 != auStack_1f0) {
    cv::fastFree(local_1f8);
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_29c) {
    iVar11 = 0;
    do {
      *local_260 = 0;
      iVar11 = iVar11 + 1;
      local_260 = local_260 + 1;
    } while (iVar11 < local_29c);
  }
  if (local_258 != auStack_250) {
    cv::fastFree(local_258);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
                    /* try { // try from 002ab784 to 003ab7ab has its CatchHandler @ 002ab5d8 */
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002abe40 (4032 bytes) name=FUN_002abe40

undefined8
FUN_002abe40(float *param_1,ulong param_2,float *param_3,undefined4 *param_4,ulong param_5,
            uint param_6,long param_7)

{
  bool bVar1;
  long lVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong uVar5;
  undefined4 uVar6;
  int iVar7;
  int iVar8;
  int *piVar9;
  float *pfVar10;
  ulong uVar11;
  long lVar12;
  float *pfVar13;
  float *pfVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  long lVar18;
  int iVar19;
  uint uVar20;
  undefined4 *puVar21;
  int *piVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  float *pfVar26;
  uint uVar27;
  uint uVar28;
  ulong uVar29;
  uint uVar30;
  long lVar31;
  uint uVar32;
  long lVar33;
  uint uVar34;
  ulong uVar35;
  undefined4 *puVar36;
  int *piVar37;
  float fVar38;
  float fVar39;
  undefined8 uVar40;
  undefined8 uVar41;
  float fVar42;
  float fVar43;
  float fVar44;
  undefined8 uVar45;
  int iVar46;
  int iVar47;
  long lVar48;
  long lVar49;
  size_t __n;
  float fVar50;
  float fVar51;
  float fVar52;
  float fVar53;
  float fVar54;
  float fVar55;
  
  param_2 = param_2 >> 2;
  if (param_4 == (undefined4 *)0x0) {
    piVar9 = (int *)(param_7 + 3U & 0xfffffffffffffffc);
                    /* try { // try from 002acc48 to 003acc4b has its CatchHandler @ 002acd50 */
    piVar37 = piVar9 + (int)param_6;
                    /* try { // try from 002acc50 to 003acc8f has its CatchHandler @ 002acd48 */
    if ((int)param_6 < 1) goto LAB_002ac7bc;
  }
  else {
    param_5 = param_5 >> 2;
    if ((int)param_6 < 1) goto LAB_002ac7bc;
    uVar34 = 0;
    lVar49 = NEON_shl(param_5 + 1,2);
    __n = NEON_shl((ulong)(param_6 - 1) + 1,2);
    puVar36 = param_4;
    puVar21 = param_4;
    do {
      uVar34 = uVar34 + 1;
      memset(puVar36,0,__n);
      *puVar21 = 0x3f800000;
      puVar21 = (undefined4 *)((long)puVar21 + lVar49);
      puVar36 = (undefined4 *)((long)puVar36 + lVar49 + -4);
    } while (uVar34 != param_6);
    piVar9 = (int *)(param_7 + 3U & 0xfffffffffffffffc);
    piVar37 = piVar9 + (int)param_6;
  }
  uVar30 = param_6 - 1;
  iVar8 = param_6 * param_6 * 0x1e;
  pfVar13 = param_1 + 2;
  uVar34 = 2;
  lVar49 = 0;
  pfVar10 = param_1 + param_2;
  pfVar26 = param_1;
  uVar20 = 1;
  do {
    iVar19 = (int)lVar49;
    param_3[lVar49] = *pfVar26;
    if (iVar19 < (int)uVar30) {
      fVar42 = ABS(pfVar13[-1]);
      pfVar14 = pfVar13;
      uVar16 = uVar20;
      uVar15 = uVar20;
      uVar27 = uVar34;
      if ((int)uVar34 < (int)param_6) {
        do {
          fVar43 = ABS(*pfVar14);
          uVar16 = uVar27;
          if (ABS(*pfVar14) <= fVar42) {
            fVar43 = fVar42;
            uVar16 = uVar15;
          }
          fVar42 = fVar43;
          uVar27 = uVar27 + 1;
          pfVar14 = pfVar14 + 1;
          uVar15 = uVar16;
                    /* try { // try from 002abfa8 to 003abfab has its CatchHandler @ 002ac008 */
        } while (uVar27 != param_6);
      }
      piVar9[lVar49] = uVar16;
    }
                    /* try { // try from 002abfb0 to 003abfb3 has its CatchHandler @ 002abcdc */
    if (iVar19 != 0) {
      fVar42 = ABS(param_1[lVar49]);
      if (iVar19 == 1) {
                    /* try { // try from 002acc04 to 003acc07 has its CatchHandler @ 002acd48 */
        iVar47 = 0;
      }
      else {
        iVar47 = 0;
        iVar46 = 1;
        pfVar14 = pfVar10;
        do {
          fVar38 = *pfVar14;
          pfVar14 = pfVar14 + param_2;
          fVar43 = ABS(fVar38);
          iVar17 = iVar46;
          if (ABS(fVar38) <= fVar42) {
                    /* catch() { ... } // from try @ 002abd8c with catch @ 002abff4 */
            fVar43 = fVar42;
            iVar17 = iVar47;
          }
          iVar47 = iVar17;
          fVar42 = fVar43;
          iVar46 = iVar46 + 1;
        } while (iVar46 != iVar19);
      }
                    /* try { // try from 002ac004 to 003ac007 has its CatchHandler @ 002abcdc */
      piVar37[lVar49] = iVar47;
    }
                    /* catch() { ... } // from try @ 002abfa8 with catch @ 002ac008 */
    fVar42 = DAT_002ace00;
    lVar49 = lVar49 + 1;
    pfVar26 = pfVar26 + param_2 + 1;
                    /* try { // try from 002ac018 to 003ac01b has its CatchHandler @ 002abcdc */
    pfVar10 = pfVar10 + 1;
                    /* catch() { ... } // from try @ 002ac070 with catch @ 002ac01c
                       catch() { ... } // from try @ 002ac254 with catch @ 002ac01c
                       catch() { ... } // from try @ 002ac5dc with catch @ 002ac01c
                       catch() { ... } // from try @ 002ac690 with catch @ 002ac01c */
    uVar34 = uVar34 + 1;
    pfVar13 = pfVar13 + param_2 + 1;
    bVar1 = (int)uVar20 < (int)param_6;
    uVar20 = uVar20 + 1;
  } while (bVar1);
  if ((1 < (int)param_6) && (iVar8 != 0)) {
    iVar19 = 0;
LAB_002ac050:
    fVar43 = ABS(param_1[*piVar9]);
    if ((int)uVar30 < 2) {
      uVar11 = 0;
      uVar35 = 0;
    }
    else {
      uVar35 = 0;
                    /* try { // try from 002ac070 to 003ac08f has its CatchHandler @ 002ac01c */
      uVar34 = 1;
      uVar11 = param_2;
      piVar22 = piVar9;
      do {
        piVar22 = piVar22 + 1;
        lVar49 = (long)*piVar22 + uVar11;
        uVar11 = uVar11 + param_2;
        fVar38 = ABS(param_1[lVar49]);
        uVar20 = uVar34;
        if (fVar38 <= fVar43) {
          uVar20 = (uint)uVar35;
        }
        uVar35 = (ulong)uVar20;
                    /* try { // try from 002ac094 to 003ac0a7 has its CatchHandler @ 002ac740 */
        uVar34 = uVar34 + 1;
        if (fVar38 <= fVar43) {
          fVar38 = fVar43;
        }
        fVar43 = fVar38;
      } while (uVar34 != uVar30);
      uVar11 = -(ulong)(uVar20 >> 0x1f) & 0xfffffffc00000000 | uVar35 << 2;
    }
    uVar11 = (ulong)*(uint *)((long)piVar9 + uVar11);
    lVar49 = 1;
    do {
      uVar34 = piVar37[lVar49];
      uVar20 = (uint)lVar49;
      lVar12 = lVar49 + (long)(int)uVar34 * param_2;
      lVar49 = lVar49 + 1;
      fVar38 = ABS(param_1[lVar12]);
      if (fVar38 <= fVar43) {
        uVar34 = (uint)uVar35;
      }
      uVar35 = (ulong)uVar34;
      if (fVar38 <= fVar43) {
        uVar20 = (uint)uVar11;
        fVar38 = fVar43;
      }
      fVar43 = fVar38;
      uVar11 = (ulong)uVar20;
    } while ((int)lVar49 < (int)param_6);
    lVar12 = (long)(int)uVar34;
    lVar24 = (long)(int)uVar20;
    lVar49 = lVar12 * param_2;
    fVar43 = param_1[lVar49 + lVar24];
    fVar38 = ABS(fVar43);
    if (fVar42 < fVar38) {
      lVar23 = lVar12 * 4;
      lVar25 = lVar24 * 4;
                    /* try { // try from 002ac134 to 003ac21b has its CatchHandler @ 002ac694 */
      fVar55 = (param_3[lVar24] - param_3[lVar12]) * 0.5;
      fVar50 = ABS(fVar55);
      if (fVar50 < fVar38) {
        fVar44 = (fVar50 / fVar38) * (fVar50 / fVar38) + 1.0;
        fVar39 = SQRT(fVar44);
        if (NAN(fVar39)) {
                    /* catch() { ... } // from try @ 002ac9b0 with catch @ 002acd34 */
                    /* catch() { ... } // from try @ 002ac95c with catch @ 002acd48
                       catch() { ... } // from try @ 002ac9b8 with catch @ 002acd48
                       catch() { ... } // from try @ 002acc04 with catch @ 002acd48
                       catch() { ... } // from try @ 002acc50 with catch @ 002acd48
                       catch() { ... } // from try @ 002acce0 with catch @ 002acd48 */
                    /* catch() { ... } // from try @ 002acc48 with catch @ 002acd50 */
                    /* catch() { ... } // from try @ 002ace0c with catch @ 002acd64
                       catch() { ... } // from try @ 002ace98 with catch @ 002acd64
                       catch() { ... } // from try @ 002aceb0 with catch @ 002acd64 */
          fVar39 = sqrtf(fVar44);
          fVar39 = fVar38 * fVar39;
        }
        else {
          fVar39 = fVar38 * fVar39;
        }
LAB_002ac174:
        fVar50 = fVar50 + fVar39;
        fVar39 = ABS(fVar50);
        if (fVar38 <= fVar39) goto LAB_002ac184;
LAB_002acb10:
        fVar44 = (fVar39 / fVar38) * (fVar39 / fVar38) + 1.0;
        fVar39 = SQRT(fVar44);
        if (NAN(fVar39)) {
                    /* try { // try from 002accd8 to 003accdb has its CatchHandler @ 002acd04 */
                    /* try { // try from 002acce0 to 003acce3 has its CatchHandler @ 002acd48 */
                    /* try { // try from 002accfc to 003accff has its CatchHandler @ 002ac8d0 */
          fVar39 = sqrtf(fVar44);
                    /* catch() { ... } // from try @ 002accd8 with catch @ 002acd04 */
          fVar39 = fVar38 * fVar39;
                    /* try { // try from 002acd30 to 003acd33 has its CatchHandler @ 002ac8d0 */
        }
        else {
          fVar39 = fVar38 * fVar39;
        }
      }
      else {
        if (0.0 < fVar50) {
          fVar44 = (fVar38 / fVar50) * (fVar38 / fVar50) + 1.0;
          fVar39 = SQRT(fVar44);
          if (NAN(fVar39)) {
            fVar39 = sqrtf(fVar44);
          }
          fVar39 = fVar50 * fVar39;
          goto LAB_002ac174;
        }
        fVar50 = fVar50 + 0.0;
        fVar39 = ABS(fVar50);
        if (fVar39 < fVar38) goto LAB_002acb10;
LAB_002ac184:
        if (fVar39 <= 0.0) {
          fVar38 = fVar50 / 0.0;
          fVar39 = fVar43 / 0.0;
          goto joined_r0x002ac1bc;
        }
        fVar44 = (fVar38 / fVar39) * (fVar38 / fVar39) + 1.0;
        fVar38 = SQRT(fVar44);
        if (NAN(fVar38)) {
          fVar38 = sqrtf(fVar44);
        }
        fVar39 = fVar39 * fVar38;
      }
      fVar38 = fVar50 / fVar39;
      fVar39 = fVar43 / fVar39;
joined_r0x002ac1bc:
      fVar43 = (fVar43 / fVar50) * fVar43;
      if (fVar55 < 0.0) {
        fVar39 = -fVar39;
        fVar43 = -fVar43;
      }
      param_1[lVar49 + lVar24] = 0.0;
      param_3[lVar12] = param_3[lVar12] - fVar43;
      param_3[lVar24] = param_3[lVar24] + fVar43;
      if (0 < (int)uVar34) {
        lVar18 = 0;
        uVar27 = 0;
        do {
          fVar50 = *(float *)((long)param_1 + lVar18 + lVar25);
          uVar27 = uVar27 + 1;
          fVar43 = *(float *)((long)param_1 + lVar18 + lVar23);
          *(float *)((long)param_1 + lVar18 + lVar23) = fVar43 * fVar38 - fVar50 * fVar39;
          *(float *)((long)param_1 + lVar18 + lVar25) = fVar50 * fVar38 + fVar39 * fVar43;
          lVar18 = lVar18 + param_2 * 4;
        } while (uVar27 != uVar34);
      }
      uVar27 = uVar34 + 1;
      if ((int)uVar27 < (int)uVar20) {
                    /* try { // try from 002ac254 to 003ac267 has its CatchHandler @ 002ac01c */
        pfVar13 = param_1 + lVar24 + lVar49 + param_2;
        pfVar10 = param_1 + lVar49 + (int)uVar27;
        do {
          fVar50 = *pfVar13;
          fVar43 = *pfVar10;
          pfVar26 = pfVar10 + 1;
          *pfVar10 = fVar43 * fVar38 - fVar50 * fVar39;
          *pfVar13 = fVar50 * fVar38 + fVar39 * fVar43;
          pfVar13 = pfVar13 + param_2;
          pfVar10 = pfVar26;
        } while (pfVar26 != param_1 + lVar49 + (int)uVar27 + 1 + (ulong)((uVar20 - 2) - uVar34));
      }
      uVar34 = uVar20 + 1;
      if ((int)uVar34 < (int)param_6) {
        lVar31 = lVar24 * param_2;
        lVar18 = lVar49 + lVar24 + 1;
                    /* try { // try from 002ac2a8 to 003ac2ab has its CatchHandler @ 002ac740 */
        lVar48 = lVar24 + 1 + lVar31;
        lVar33 = (lVar24 + 5 + lVar49) * 4;
        uVar16 = (param_6 - uVar20) - 1;
        if ((lVar18 * 4 < (lVar24 + 5 + lVar31) * 4 &&
             (lVar33 + lVar48 * -4 != 0 && lVar48 * 4 <= lVar33)) || (uVar16 < 7)) {
          pfVar13 = param_1 + lVar49 + (int)uVar34;
          do {
            fVar50 = pfVar13[lVar31 - lVar49];
            fVar43 = *pfVar13;
            *pfVar13 = fVar43 * fVar38 - fVar50 * fVar39;
            pfVar13[lVar31 - lVar49] = fVar50 * fVar38 + fVar39 * fVar43;
            pfVar13 = pfVar13 + 1;
          } while (pfVar13 != param_1 + lVar49 + (int)uVar34 + 1 + (ulong)((param_6 - 2) - uVar20));
        }
        else {
          uVar15 = -((uint)((ulong)(param_1 + lVar18) >> 2) & 3) & 3;
          if (uVar16 < uVar15) {
            uVar15 = uVar16;
          }
          uVar32 = uVar34;
          if (uVar15 != 0) {
            lVar33 = (int)uVar34 + lVar31;
            lVar2 = (int)uVar34 + lVar49;
            uVar32 = uVar20 + 2;
            fVar43 = param_1[lVar2];
            fVar50 = param_1[lVar33];
                    /* try { // try from 002ac338 to 003ac33b has its CatchHandler @ 002ac69c */
            param_1[lVar2] = fVar43 * fVar38 - fVar50 * fVar39;
            param_1[lVar33] = fVar50 * fVar38 + fVar39 * fVar43;
            if (uVar15 != 1) {
              lVar33 = (int)uVar32 + lVar31;
              lVar2 = (int)uVar32 + lVar49;
              uVar32 = uVar20 + 3;
              fVar50 = param_1[lVar33];
              fVar43 = param_1[lVar2];
              param_1[lVar2] = fVar43 * fVar38 - fVar50 * fVar39;
              param_1[lVar33] = fVar50 * fVar38 + fVar39 * fVar43;
              if (uVar15 == 3) {
                lVar33 = (int)uVar32 + lVar31;
                lVar2 = (int)uVar32 + lVar49;
                fVar50 = param_1[lVar33];
                fVar43 = param_1[lVar2];
                param_1[lVar2] = fVar43 * fVar38 - fVar50 * fVar39;
                param_1[lVar33] = fVar50 * fVar38 + fVar39 * fVar43;
                uVar32 = uVar20 + 4;
              }
            }
          }
          uVar20 = ((uVar16 - uVar15) - 4 >> 2) + 1;
          lVar33 = 0;
          uVar28 = 0;
          lVar48 = NEON_shl((ulong)uVar15 + lVar48,2);
          lVar18 = NEON_shl((ulong)uVar15 + lVar18,2);
          iVar47 = uVar20 * 4;
          do {
            uVar28 = uVar28 + 1;
            puVar3 = (undefined8 *)((long)param_1 + lVar33 + lVar18);
            lVar2 = lVar33 + lVar48;
            lVar33 = lVar33 + 0x10;
            puVar4 = (undefined8 *)((long)param_1 + lVar2);
            fVar43 = (float)*puVar3;
            fVar50 = (float)((ulong)*puVar3 >> 0x20);
            fVar55 = (float)puVar3[1];
            fVar44 = (float)((ulong)puVar3[1] >> 0x20);
            fVar51 = (float)*puVar4;
            fVar52 = (float)((ulong)*puVar4 >> 0x20);
            fVar53 = (float)puVar4[1];
            fVar54 = (float)((ulong)puVar4[1] >> 0x20);
            puVar3[1] = CONCAT44(fVar44 * fVar38 - fVar54 * fVar39,fVar55 * fVar38 - fVar53 * fVar39
                                );
            *puVar3 = CONCAT44(fVar50 * fVar38 - fVar52 * fVar39,fVar43 * fVar38 - fVar51 * fVar39);
            puVar4[1] = CONCAT44(fVar54 * fVar38 + fVar44 * fVar39,fVar53 * fVar38 + fVar55 * fVar39
                                );
            *puVar4 = CONCAT44(fVar52 * fVar38 + fVar50 * fVar39,fVar51 * fVar38 + fVar43 * fVar39);
          } while (uVar28 < uVar20);
          iVar46 = iVar47 + uVar32;
          if (iVar47 != uVar16 - uVar15) {
            iVar47 = iVar46 + 1;
            lVar18 = iVar46 + lVar31;
            lVar48 = iVar46 + lVar49;
            fVar50 = param_1[lVar18];
            fVar43 = param_1[lVar48];
            param_1[lVar48] = fVar43 * fVar38 - fVar50 * fVar39;
            param_1[lVar18] = fVar50 * fVar38 + fVar39 * fVar43;
            if (iVar47 < (int)param_6) {
              iVar46 = iVar46 + 2;
              lVar18 = iVar47 + lVar31;
              lVar48 = iVar47 + lVar49;
                    /* try { // try from 002ac4a4 to 003ac4bf has its CatchHandler @ 002ac694 */
              fVar50 = param_1[lVar18];
              fVar43 = param_1[lVar48];
              param_1[lVar48] = fVar43 * fVar38 - fVar50 * fVar39;
              param_1[lVar18] = fVar50 * fVar38 + fVar39 * fVar43;
              if (iVar46 < (int)param_6) {
                    /* try { // try from 002ac4d8 to 003ac4db has its CatchHandler @ 002ac69c */
                lVar31 = iVar46 + lVar31;
                lVar49 = iVar46 + lVar49;
                fVar50 = param_1[lVar31];
                fVar43 = param_1[lVar49];
                param_1[lVar49] = fVar43 * fVar38 - fVar50 * fVar39;
                param_1[lVar31] = fVar50 * fVar38 + fVar39 * fVar43;
              }
            }
          }
        }
      }
      if (param_4 != (undefined4 *)0x0) {
        lVar18 = lVar12 * param_5;
        lVar49 = lVar24 * param_5;
                    /* try { // try from 002ac518 to 003ac51b has its CatchHandler @ 002ac614 */
        lVar48 = (lVar18 + 4) * 4;
                    /* try { // try from 002ac520 to 003ac523 has its CatchHandler @ 002ac69c */
        puVar21 = param_4 + lVar18;
        if ((lVar48 + -0x10 < lVar49 * 4 + 0x10 && lVar49 * 4 < lVar48) || (param_6 < 7)) {
          lVar18 = 0;
          do {
            fVar50 = (float)param_4[lVar49 + lVar18];
            fVar43 = (float)puVar21[lVar18];
            puVar21[lVar18] = fVar43 * fVar38 - fVar50 * fVar39;
            param_4[lVar49 + lVar18] = fVar50 * fVar38 + fVar39 * fVar43;
            lVar18 = lVar18 + 1;
          } while ((int)lVar18 < (int)param_6);
        }
        else {
          uVar20 = -((uint)((ulong)puVar21 >> 2) & 3) & 3;
          uVar5 = (ulong)uVar20;
          if (param_6 < uVar20) {
            uVar5 = (ulong)param_6;
          }
          iVar47 = (int)uVar5;
          uVar29 = uVar5;
          if (iVar47 != 0) {
            fVar43 = (float)param_4[lVar49];
            fVar50 = (float)param_4[lVar18];
            param_4[lVar18] = fVar50 * fVar38 - fVar43 * fVar39;
            param_4[lVar49] = fVar43 * fVar38 + fVar39 * fVar50;
            if (iVar47 != 1) {
              fVar50 = (float)param_4[lVar49 + 1];
              fVar43 = (float)param_4[lVar18 + 1];
              param_4[lVar18 + 1] = fVar43 * fVar38 - fVar50 * fVar39;
              param_4[lVar49 + 1] = fVar50 * fVar38 + fVar39 * fVar43;
              if (iVar47 == 3) {
                fVar50 = (float)param_4[lVar49 + 2];
                fVar43 = (float)param_4[lVar18 + 2];
                    /* try { // try from 002ac5dc to 003ac60f has its CatchHandler @ 002ac01c */
                param_4[lVar18 + 2] = fVar43 * fVar38 - fVar50 * fVar39;
                param_4[lVar49 + 2] = fVar50 * fVar38 + fVar39 * fVar43;
              }
              else {
                uVar29 = 2;
              }
            }
          }
          uVar20 = ((param_6 - iVar47) - 4 >> 2) + 1;
          lVar48 = 0;
                    /* catch() { ... } // from try @ 002ac518 with catch @ 002ac614 */
          uVar16 = 0;
          lVar33 = NEON_shl(uVar5 + lVar18,2);
          lVar31 = NEON_shl(uVar5 + lVar49,2);
          iVar46 = uVar20 * 4;
          do {
            uVar16 = uVar16 + 1;
            puVar3 = (undefined8 *)((long)param_4 + lVar48 + lVar33);
            puVar4 = (undefined8 *)((long)param_4 + lVar48 + lVar31);
            lVar48 = lVar48 + 0x10;
            fVar43 = (float)*puVar3;
            fVar50 = (float)((ulong)*puVar3 >> 0x20);
            fVar55 = (float)puVar3[1];
            fVar44 = (float)((ulong)puVar3[1] >> 0x20);
            fVar51 = (float)*puVar4;
            fVar52 = (float)((ulong)*puVar4 >> 0x20);
            fVar53 = (float)puVar4[1];
            fVar54 = (float)((ulong)puVar4[1] >> 0x20);
            puVar3[1] = CONCAT44(fVar44 * fVar38 - fVar54 * fVar39,fVar55 * fVar38 - fVar53 * fVar39
                                );
            *puVar3 = CONCAT44(fVar50 * fVar38 - fVar52 * fVar39,fVar43 * fVar38 - fVar51 * fVar39);
            puVar4[1] = CONCAT44(fVar54 * fVar38 + fVar44 * fVar39,fVar53 * fVar38 + fVar55 * fVar39
                                );
            *puVar4 = CONCAT44(fVar52 * fVar38 + fVar50 * fVar39,fVar51 * fVar38 + fVar43 * fVar39);
          } while (uVar16 < uVar20);
          iVar17 = iVar46 + (int)uVar29;
          if (iVar46 != param_6 - iVar47) {
            iVar47 = iVar17 + 1;
            lVar48 = iVar17 + lVar49;
                    /* try { // try from 002ac690 to 003ac693 has its CatchHandler @ 002ac01c */
            lVar31 = iVar17 + lVar18;
                    /* catch() { ... } // from try @ 002ac134 with catch @ 002ac694
                       catch() { ... } // from try @ 002ac4a4 with catch @ 002ac694 */
                    /* catch() { ... } // from try @ 002ac338 with catch @ 002ac69c
                       catch() { ... } // from try @ 002ac4d8 with catch @ 002ac69c
                       catch() { ... } // from try @ 002ac520 with catch @ 002ac69c */
            fVar50 = (float)param_4[lVar48];
            fVar43 = (float)param_4[lVar31];
            param_4[lVar31] = fVar43 * fVar38 - fVar50 * fVar39;
            param_4[lVar48] = fVar50 * fVar38 + fVar39 * fVar43;
            if (iVar47 < (int)param_6) {
              iVar17 = iVar17 + 2;
              lVar48 = iVar47 + lVar49;
              lVar31 = iVar47 + lVar18;
                    /* try { // try from 002ac6d8 to 003ac6db has its CatchHandler @ 002ac740 */
              fVar50 = (float)param_4[lVar48];
              fVar43 = (float)param_4[lVar31];
              param_4[lVar31] = fVar43 * fVar38 - fVar50 * fVar39;
              param_4[lVar48] = fVar50 * fVar38 + fVar39 * fVar43;
              if (iVar17 < (int)param_6) {
                lVar49 = iVar17 + lVar49;
                lVar18 = iVar17 + lVar18;
                fVar50 = (float)param_4[lVar49];
                    /* try { // try from 002ac71c to 003ac71f has its CatchHandler @ 002ac748 */
                fVar43 = (float)param_4[lVar18];
                param_4[lVar18] = fVar43 * fVar38 - fVar50 * fVar39;
                param_4[lVar49] = fVar50 * fVar38 + fVar39 * fVar43;
              }
            }
          }
        }
      }
      bVar1 = false;
      do {
                    /* catch() { ... } // from try @ 002ac094 with catch @ 002ac740
                       catch() { ... } // from try @ 002ac2a8 with catch @ 002ac740
                       catch() { ... } // from try @ 002ac6d8 with catch @ 002ac740 */
        iVar47 = (int)uVar35;
        if (iVar47 < (int)uVar30) {
                    /* catch() { ... } // from try @ 002ac71c with catch @ 002ac748 */
          uVar20 = iVar47 + 2;
          fVar43 = ABS(param_1[lVar12 * param_2 + (long)(int)uVar27]);
          if ((int)uVar20 < (int)param_6) {
                    /* catch() { ... } // from try @ 002ac7bc with catch @ 002ac764
                       catch() { ... } // from try @ 002ac880 with catch @ 002ac764
                       catch() { ... } // from try @ 002ac8cc with catch @ 002ac764 */
            pfVar13 = param_1 + lVar12 * param_2 + (long)(int)uVar20;
            do {
              fVar50 = *pfVar13;
              pfVar13 = pfVar13 + 1;
              fVar38 = ABS(fVar50);
              uVar16 = uVar20;
              if (ABS(fVar50) <= fVar43) {
                fVar38 = fVar43;
                uVar16 = uVar27;
              }
              uVar27 = uVar16;
              fVar43 = fVar38;
              uVar20 = uVar20 + 1;
            } while (uVar20 != param_6);
          }
          *(uint *)((long)piVar9 + lVar23) = uVar27;
          if (0 < iVar47) goto LAB_002aca50;
        }
        else {
LAB_002aca50:
          iVar46 = 0;
          fVar43 = ABS(*(float *)((long)param_1 + lVar23));
          if (1 < iVar47) {
            iVar46 = 0;
            iVar17 = 1;
            pfVar13 = param_1 + lVar12 + param_2;
            do {
              fVar50 = *pfVar13;
              pfVar13 = pfVar13 + param_2;
              fVar38 = ABS(fVar50);
              iVar7 = iVar17;
              if (ABS(fVar50) <= fVar43) {
                fVar38 = fVar43;
                iVar7 = iVar46;
              }
              iVar46 = iVar7;
              fVar43 = fVar38;
              iVar17 = iVar17 + 1;
            } while (iVar17 != iVar47);
          }
                    /* try { // try from 002acaa4 to 003acaf7 has its CatchHandler @ 002ac8d0 */
          *(int *)((long)piVar37 + lVar23) = iVar46;
        }
        if (bVar1) goto LAB_002ac7ac;
        bVar1 = true;
        lVar12 = lVar24;
        lVar23 = lVar25;
        uVar35 = uVar11;
        uVar27 = uVar34;
      } while( true );
    }
  }
LAB_002ac7bc:
                    /* try { // try from 002ac7bc to 003ac7bf has its CatchHandler @ 002ac764 */
  lVar12 = 0;
  lVar49 = 1;
  puVar21 = param_4;
  uVar34 = 0;
  pfVar13 = param_3;
  if (0 < (int)(param_6 - 1)) {
    do {
      uVar20 = uVar34 + 1;
      if ((int)uVar20 < (int)param_6) {
        pfVar10 = pfVar13 + 1;
        lVar24 = lVar49;
        fVar42 = *pfVar13;
        uVar27 = uVar20;
        uVar30 = uVar34;
        do {
          fVar43 = *pfVar10;
                    /* try { // try from 002ac80c to 003ac80f has its CatchHandler @ 002ac8a8 */
          pfVar26 = pfVar10;
          lVar23 = lVar24;
          uVar16 = uVar27;
          if (fVar43 <= fVar42) {
            pfVar26 = param_3 + (int)uVar30;
            lVar23 = (long)(int)uVar30;
            uVar16 = uVar30;
          }
          uVar30 = uVar16;
          uVar27 = uVar27 + 1;
          lVar24 = lVar24 + 1;
          pfVar10 = pfVar10 + 1;
          if (fVar43 <= fVar42) {
            fVar43 = fVar42;
          }
          fVar42 = fVar43;
        } while (uVar27 != param_6);
        if (uVar34 != uVar30) {
          *pfVar26 = *pfVar13;
          *pfVar13 = fVar42;
          if ((param_4 != (undefined4 *)0x0) && (0 < (int)param_6)) {
            lVar23 = lVar23 * param_5;
                    /* try { // try from 002ac880 to 003ac8a3 has its CatchHandler @ 002ac764 */
            lVar24 = (lVar23 + 4) * 4;
            puVar36 = param_4 + lVar23;
                    /* catch() { ... } // from try @ 002ac80c with catch @ 002ac8a8 */
            if (((lVar24 - ((long)puVar21 - (long)param_4) == 0 ||
                 lVar24 < (long)puVar21 - (long)param_4) ||
                 (0x10 - (long)param_4) + (long)puVar21 <= lVar24 + -0x10) && (8 < param_6)) {
              uVar34 = -((uint)((ulong)puVar36 >> 2) & 3) & 3;
              uVar35 = (ulong)param_6;
              if (uVar34 < param_6) {
                uVar35 = (ulong)uVar34;
              }
              iVar8 = (int)uVar35;
              uVar11 = uVar35;
              if (iVar8 != 0) {
                    /* try { // try from 002ac8cc to 003ac8cf has its CatchHandler @ 002ac764 */
                    /* catch() { ... } // from try @ 002ac90c with catch @ 002ac8d0
                       catch() { ... } // from try @ 002acaa4 with catch @ 002ac8d0
                       catch() { ... } // from try @ 002accfc with catch @ 002ac8d0
                       catch() { ... } // from try @ 002acd30 with catch @ 002ac8d0 */
                uVar6 = param_4[lVar23];
                param_4[lVar23] = *puVar21;
                *puVar21 = uVar6;
                if (iVar8 != 1) {
                  uVar6 = param_4[lVar23 + 1];
                  param_4[lVar23 + 1] = puVar21[1];
                  puVar21[1] = uVar6;
                  if (iVar8 == 3) {
                    uVar6 = param_4[lVar23 + 2];
                    /* try { // try from 002ac90c to 003ac92b has its CatchHandler @ 002ac8d0 */
                    param_4[lVar23 + 2] = puVar21[2];
                    puVar21[2] = uVar6;
                  }
                  else {
                    uVar11 = 2;
                  }
                }
              }
              lVar24 = 0;
              uVar34 = ((param_6 - iVar8) - 4 >> 2) + 1;
              uVar30 = 0;
              iVar19 = uVar34 * 4;
              do {
                puVar3 = (undefined8 *)((long)param_4 + lVar24 + (uVar35 + lVar12) * 4);
                puVar4 = (undefined8 *)((long)param_4 + lVar24 + (uVar35 + lVar23) * 4);
                uVar30 = uVar30 + 1;
                lVar24 = lVar24 + 0x10;
                uVar45 = *puVar3;
                    /* try { // try from 002ac95c to 003ac95f has its CatchHandler @ 002acd48 */
                uVar41 = puVar4[1];
                uVar40 = *puVar4;
                puVar4[1] = puVar3[1];
                *puVar4 = uVar45;
                puVar3[1] = uVar41;
                *puVar3 = uVar40;
              } while (uVar30 < uVar34);
              iVar47 = iVar19 + (int)uVar11;
              if (iVar19 != param_6 - iVar8) {
                iVar8 = iVar47 + 1;
                lVar24 = iVar47 + lVar12;
                lVar25 = iVar47 + lVar23;
                uVar6 = param_4[lVar25];
                param_4[lVar25] = param_4[lVar24];
                param_4[lVar24] = uVar6;
                if (iVar8 < (int)param_6) {
                    /* try { // try from 002ac9b0 to 003ac9b3 has its CatchHandler @ 002acd34 */
                  iVar47 = iVar47 + 2;
                  lVar24 = iVar8 + lVar12;
                    /* try { // try from 002ac9b8 to 003aca63 has its CatchHandler @ 002acd48 */
                  lVar25 = iVar8 + lVar23;
                  uVar6 = param_4[lVar25];
                  param_4[lVar25] = param_4[lVar24];
                  param_4[lVar24] = uVar6;
                  if (iVar47 < (int)param_6) {
                    lVar24 = iVar47 + lVar12;
                    lVar23 = iVar47 + lVar23;
                    uVar6 = param_4[lVar23];
                    param_4[lVar23] = param_4[lVar24];
                    param_4[lVar24] = uVar6;
                  }
                }
              }
            }
            else {
              lVar24 = 0;
              do {
                uVar6 = puVar36[lVar24];
                puVar36[lVar24] = puVar21[lVar24];
                puVar21[lVar24] = uVar6;
                lVar24 = lVar24 + 1;
              } while ((int)lVar24 < (int)param_6);
            }
          }
        }
      }
      puVar21 = puVar21 + param_5;
      lVar12 = lVar12 + param_5;
      lVar49 = lVar49 + 1;
      uVar34 = uVar20;
      pfVar13 = pfVar13 + 1;
    } while ((int)uVar20 < (int)(param_6 - 1));
  }
  return 1;
LAB_002ac7ac:
  iVar19 = iVar19 + 1;
  if (iVar19 == iVar8) goto LAB_002ac7bc;
  goto LAB_002ac050;
}


==================================================================

### FUNC 002ace08 (3384 bytes) name=FUN_002ace08

undefined8
FUN_002ace08(double *param_1,ulong param_2,double *param_3,undefined8 *param_4,ulong param_5,
            uint param_6,long param_7)

{
  bool bVar1;
  long lVar2;
  undefined8 *puVar3;
  int iVar4;
  int *piVar5;
  uint uVar6;
  int iVar7;
  ulong uVar8;
  long lVar9;
  double *pdVar10;
  double *pdVar11;
  undefined8 uVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  double *pdVar16;
  undefined8 *puVar17;
  int iVar18;
  uint uVar19;
  int *piVar20;
  long lVar21;
  int iVar22;
  long lVar23;
  double *pdVar24;
  long lVar25;
  uint uVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  uint uVar30;
  ulong uVar31;
  undefined8 *puVar32;
  uint uVar33;
  int *piVar34;
  double dVar35;
  double dVar36;
  undefined8 uVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  undefined8 uVar41;
  int iVar42;
  uint uVar43;
  long lVar44;
  size_t __n;
  double dVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  int iVar49;
  
                    /* try { // try from 002ace0c to 003ace3f has its CatchHandler @ 002acd64 */
  param_2 = param_2 >> 3;
  if (param_4 == (undefined8 *)0x0) {
    piVar5 = (int *)(param_7 + 3U & 0xfffffffffffffffc);
    piVar34 = piVar5 + (int)param_6;
    if ((int)param_6 < 1) goto LAB_002ad5a0;
  }
  else {
    param_5 = param_5 >> 3;
    if ((int)param_6 < 1) goto LAB_002ad5a0;
    uVar30 = 0;
    lVar44 = NEON_shl(param_5 + 1,3);
                    /* try { // try from 002ace90 to 003ace93 has its CatchHandler @ 002acea0 */
    __n = NEON_shl((ulong)(param_6 - 1) + 1,3);
                    /* try { // try from 002ace98 to 003ace9b has its CatchHandler @ 002acd64 */
    puVar32 = param_4;
    puVar17 = param_4;
    do {
                    /* catch() { ... } // from try @ 002ace90 with catch @ 002acea0 */
      uVar30 = uVar30 + 1;
                    /* try { // try from 002aceb0 to 003aceb3 has its CatchHandler @ 002acd64 */
                    /* catch() { ... } // from try @ 002acf00 with catch @ 002aceb4
                       catch() { ... } // from try @ 002acfc8 with catch @ 002aceb4
                       catch() { ... } // from try @ 002ad010 with catch @ 002aceb4 */
      memset(puVar32,0,__n);
      *puVar17 = 0x3ff0000000000000;
      puVar17 = (undefined8 *)((long)puVar17 + lVar44);
      puVar32 = (undefined8 *)((long)puVar32 + lVar44 + -8);
    } while (uVar30 != param_6);
    piVar5 = (int *)(param_7 + 3U & 0xfffffffffffffffc);
    piVar34 = piVar5 + (int)param_6;
  }
  uVar33 = param_6 - 1;
  iVar49 = param_6 * param_6 * 0x1e;
                    /* try { // try from 002acf00 to 003acf03 has its CatchHandler @ 002aceb4 */
  pdVar16 = param_1 + 2;
  uVar30 = 2;
  lVar44 = 0;
  pdVar10 = param_1 + param_2;
  pdVar24 = param_1;
  uVar19 = 1;
  do {
    iVar18 = (int)lVar44;
    param_3[lVar44] = *pdVar24;
    if (iVar18 < (int)uVar33) {
      dVar38 = ABS(pdVar16[-1]);
      pdVar11 = pdVar16;
      uVar14 = uVar19;
      uVar13 = uVar19;
      uVar26 = uVar30;
      if ((int)uVar30 < (int)param_6) {
        do {
                    /* try { // try from 002acf54 to 003acf57 has its CatchHandler @ 002acfec */
          dVar39 = ABS(*pdVar11);
          uVar14 = uVar26;
          if (ABS(*pdVar11) <= dVar38) {
            dVar39 = dVar38;
            uVar14 = uVar13;
          }
          uVar26 = uVar26 + 1;
          pdVar11 = pdVar11 + 1;
          dVar38 = dVar39;
          uVar13 = uVar14;
        } while (uVar26 != param_6);
      }
      piVar5[lVar44] = uVar14;
    }
    if (iVar18 != 0) {
      if (iVar18 == 1) {
        iVar42 = 0;
      }
      else {
        iVar42 = 0;
        iVar7 = 1;
        pdVar11 = pdVar10;
        dVar38 = ABS(param_1[lVar44]);
        do {
          dVar35 = *pdVar11;
          pdVar11 = pdVar11 + param_2;
          dVar39 = ABS(dVar35);
          iVar22 = iVar7;
          if (ABS(dVar35) <= dVar38) {
            dVar39 = dVar38;
            iVar22 = iVar42;
          }
          iVar42 = iVar22;
          iVar7 = iVar7 + 1;
          dVar38 = dVar39;
                    /* try { // try from 002acfc8 to 003acfe7 has its CatchHandler @ 002aceb4 */
        } while (iVar7 != iVar18);
      }
      piVar34[lVar44] = iVar42;
    }
    dVar38 = DAT_002adb40;
    lVar44 = lVar44 + 1;
    pdVar24 = pdVar24 + param_2 + 1;
    pdVar10 = pdVar10 + 1;
    uVar30 = uVar30 + 1;
    pdVar16 = pdVar16 + param_2 + 1;
                    /* catch() { ... } // from try @ 002acf54 with catch @ 002acfec */
    bVar1 = (int)uVar19 < (int)param_6;
    uVar19 = uVar19 + 1;
  } while (bVar1);
  if ((1 < (int)param_6) && (iVar49 != 0)) {
    iVar18 = 0;
                    /* try { // try from 002ad010 to 003ad013 has its CatchHandler @ 002aceb4 */
                    /* catch() { ... } // from try @ 002ad064 with catch @ 002ad014
                       catch() { ... } // from try @ 002ad144 with catch @ 002ad014
                       catch() { ... } // from try @ 002ad18c with catch @ 002ad014 */
LAB_002ad018:
    dVar39 = ABS(param_1[*piVar5]);
    if ((int)uVar33 < 2) {
      uVar8 = 0;
      uVar31 = 0;
    }
    else {
      uVar31 = 0;
      uVar30 = 1;
      uVar8 = param_2;
      dVar35 = dVar39;
      piVar20 = piVar5;
      do {
        piVar20 = piVar20 + 1;
        lVar44 = (long)*piVar20 + uVar8;
        uVar8 = uVar8 + param_2;
        dVar39 = ABS(param_1[lVar44]);
        uVar19 = uVar30;
        if (dVar39 <= dVar35) {
          uVar19 = (uint)uVar31;
        }
        uVar31 = (ulong)uVar19;
        uVar30 = uVar30 + 1;
                    /* try { // try from 002ad064 to 003ad067 has its CatchHandler @ 002ad014 */
        if (dVar39 <= dVar35) {
          dVar39 = dVar35;
        }
        dVar35 = dVar39;
      } while (uVar30 != uVar33);
      uVar8 = -(ulong)(uVar19 >> 0x1f) & 0xfffffffc00000000 | uVar31 << 2;
    }
    uVar8 = (ulong)*(uint *)((long)piVar5 + uVar8);
    lVar44 = 1;
    do {
      uVar30 = piVar34[lVar44];
      uVar19 = (uint)lVar44;
      lVar9 = lVar44 + (long)(int)uVar30 * param_2;
      lVar44 = lVar44 + 1;
      dVar35 = ABS(param_1[lVar9]);
      if (dVar35 <= dVar39) {
        uVar30 = (uint)uVar31;
      }
      uVar31 = (ulong)uVar30;
      if (dVar35 <= dVar39) {
        uVar19 = (uint)uVar8;
        dVar35 = dVar39;
      }
      dVar39 = dVar35;
      uVar8 = (ulong)uVar19;
    } while ((int)lVar44 < (int)param_6);
    lVar44 = (long)(int)uVar30;
                    /* try { // try from 002ad0d0 to 003ad0d3 has its CatchHandler @ 002ad168 */
    lVar9 = (long)(int)uVar19;
    lVar25 = lVar44 * param_2;
    dVar39 = param_1[lVar25 + lVar9];
    dVar35 = ABS(dVar39);
    if (dVar38 < dVar35) {
      lVar23 = lVar44 * 8;
      lVar21 = lVar9 * 8;
      dVar48 = (param_3[lVar9] - param_3[lVar44]) * 0.5;
      dVar45 = ABS(dVar48);
      if (dVar45 < dVar35) {
        dVar40 = (dVar45 / dVar35) * (dVar45 / dVar35) + 1.0;
                    /* catch() { ... } // from try @ 002ad518 with catch @ 002ad87c */
        dVar36 = SQRT(dVar40);
        if (NAN(dVar36)) {
                    /* try { // try from 002ada74 to 003ada77 has its CatchHandler @ 002adc90 */
          dVar36 = sqrt(dVar40);
          dVar36 = dVar35 * dVar36;
        }
        else {
          dVar36 = dVar35 * dVar36;
        }
LAB_002ad13c:
        dVar45 = dVar45 + dVar36;
        dVar36 = ABS(dVar45);
                    /* try { // try from 002ad144 to 003ad163 has its CatchHandler @ 002ad014 */
        if (dVar35 <= dVar36) goto LAB_002ad14c;
LAB_002ad840:
        dVar40 = (dVar36 / dVar35) * (dVar36 / dVar35) + 1.0;
        dVar36 = SQRT(dVar40);
        if (NAN(dVar36)) {
                    /* try { // try from 002ada34 to 003ada37 has its CatchHandler @ 002ad9e8 */
          dVar36 = sqrt(dVar40);
          dVar36 = dVar35 * dVar36;
        }
        else {
          dVar36 = dVar35 * dVar36;
        }
      }
      else {
        if (0.0 < dVar45) {
          dVar40 = (dVar35 / dVar45) * (dVar35 / dVar45) + 1.0;
          dVar36 = SQRT(dVar40);
          if (NAN(dVar36)) {
            dVar36 = sqrt(dVar40);
                    /* catch() { ... } // from try @ 002ada34 with catch @ 002ad9e8
                       catch() { ... } // from try @ 002adb74 with catch @ 002ad9e8
                       catch() { ... } // from try @ 002adc7c with catch @ 002ad9e8 */
          }
          dVar36 = dVar45 * dVar36;
          goto LAB_002ad13c;
        }
        dVar45 = dVar45 + 0.0;
        dVar36 = ABS(dVar45);
        if (dVar36 < dVar35) goto LAB_002ad840;
LAB_002ad14c:
        if (dVar36 <= 0.0) {
          dVar35 = dVar45 / 0.0;
          dVar36 = dVar39 / 0.0;
          goto joined_r0x002ad184;
        }
        dVar40 = (dVar35 / dVar36) * (dVar35 / dVar36) + 1.0;
        dVar35 = SQRT(dVar40);
        if (NAN(dVar35)) {
                    /* try { // try from 002adaf8 to 003adafb has its CatchHandler @ 002adc80 */
                    /* try { // try from 002adb00 to 003adb03 has its CatchHandler @ 002adc90 */
          dVar35 = sqrt(dVar40);
        }
        dVar36 = dVar36 * dVar35;
      }
      dVar35 = dVar45 / dVar36;
      dVar36 = dVar39 / dVar36;
joined_r0x002ad184:
      dVar39 = (dVar39 / dVar45) * dVar39;
      if (dVar48 < 0.0) {
        dVar36 = -dVar36;
        dVar39 = -dVar39;
      }
                    /* try { // try from 002ad18c to 003ad18f has its CatchHandler @ 002ad014 */
                    /* catch() { ... } // from try @ 002ad1e0 with catch @ 002ad190
                       catch() { ... } // from try @ 002ad5f4 with catch @ 002ad190
                       catch() { ... } // from try @ 002ad8b8 with catch @ 002ad190
                       catch() { ... } // from try @ 002ad908 with catch @ 002ad190 */
      param_1[lVar25 + lVar9] = 0.0;
      param_3[lVar44] = param_3[lVar44] - dVar39;
      param_3[lVar9] = param_3[lVar9] + dVar39;
      if (0 < (int)uVar30) {
        lVar15 = 0;
        uVar26 = 0;
        do {
          dVar45 = *(double *)((long)param_1 + lVar15 + lVar21);
          uVar26 = uVar26 + 1;
          dVar39 = *(double *)((long)param_1 + lVar15 + lVar23);
                    /* try { // try from 002ad1e0 to 003ad203 has its CatchHandler @ 002ad190 */
          *(double *)((long)param_1 + lVar15 + lVar23) = dVar39 * dVar35 - dVar45 * dVar36;
          *(double *)((long)param_1 + lVar15 + lVar21) = dVar45 * dVar35 + dVar36 * dVar39;
          lVar15 = lVar15 + param_2 * 8;
        } while (uVar26 != uVar30);
      }
      uVar26 = uVar30 + 1;
      if ((int)uVar26 < (int)uVar19) {
        pdVar16 = param_1 + lVar9 + lVar25 + param_2;
        pdVar10 = param_1 + lVar25 + (int)uVar26;
        do {
          dVar45 = *pdVar16;
          dVar39 = *pdVar10;
                    /* try { // try from 002ad22c to 003ad22f has its CatchHandler @ 002ad8fc */
          pdVar24 = pdVar10 + 1;
          *pdVar10 = dVar39 * dVar35 - dVar45 * dVar36;
          *pdVar16 = dVar45 * dVar35 + dVar36 * dVar39;
          pdVar16 = pdVar16 + param_2;
          pdVar10 = pdVar24;
        } while (pdVar24 != param_1 + lVar25 + (int)uVar26 + 1 + (ulong)((uVar19 - 2) - uVar30));
      }
      uVar30 = uVar19 + 1;
      if ((int)uVar30 < (int)param_6) {
        lVar27 = lVar9 * param_2;
                    /* try { // try from 002ad268 to 003ad26b has its CatchHandler @ 002ad8ec */
        lVar15 = lVar25 + lVar9 + 1;
                    /* try { // try from 002ad270 to 003ad2b3 has its CatchHandler @ 002ad8fc */
        lVar28 = lVar9 + 1 + lVar27;
        lVar29 = (lVar9 + 3 + lVar25) * 8;
        uVar14 = (param_6 - uVar19) - 1;
        if ((lVar15 * 8 < (lVar9 + 3 + lVar27) * 8 &&
             (lVar29 + lVar28 * -8 != 0 && lVar28 * 8 <= lVar29)) || (uVar14 < 6)) {
          pdVar16 = param_1 + lVar25 + (int)uVar30;
          do {
                    /* try { // try from 002ad8b8 to 003ad8bb has its CatchHandler @ 002ad190 */
            dVar45 = pdVar16[lVar27 - lVar25];
                    /* catch() { ... } // from try @ 002ad43c with catch @ 002ad8bc
                       catch() { ... } // from try @ 002ad520 with catch @ 002ad8bc */
            dVar39 = *pdVar16;
                    /* catch() { ... } // from try @ 002ad2f4 with catch @ 002ad8c4 */
            *pdVar16 = dVar39 * dVar35 - dVar45 * dVar36;
            pdVar16[lVar27 - lVar25] = dVar45 * dVar35 + dVar36 * dVar39;
            pdVar16 = pdVar16 + 1;
          } while (pdVar16 != param_1 + lVar25 + (int)uVar30 + 1 + (ulong)((param_6 - 2) - uVar19));
        }
        else {
          uVar13 = (uint)((ulong)(param_1 + lVar15) >> 3) & 1;
          if (uVar14 < uVar13) {
            uVar13 = uVar14;
          }
          uVar43 = uVar30;
          if (uVar13 != 0) {
            lVar29 = (int)uVar30 + lVar27;
            lVar2 = (int)uVar30 + lVar25;
            dVar45 = param_1[lVar29];
            dVar39 = param_1[lVar2];
                    /* try { // try from 002ad2f4 to 003ad2f7 has its CatchHandler @ 002ad8c4 */
            param_1[lVar2] = dVar39 * dVar35 - dVar45 * dVar36;
            param_1[lVar29] = dVar45 * dVar35 + dVar36 * dVar39;
            uVar43 = uVar19 + 2;
          }
          uVar19 = ((uVar14 - uVar13) - 2 >> 1) + 1;
          lVar29 = 0;
          uVar6 = 0;
          iVar42 = uVar19 * 2;
          do {
            pdVar16 = (double *)((long)param_1 + lVar29 + ((ulong)uVar13 + lVar15) * 8);
            pdVar10 = (double *)((long)param_1 + lVar29 + ((ulong)uVar13 + lVar28) * 8);
            uVar6 = uVar6 + 1;
            lVar29 = lVar29 + 0x10;
            dVar40 = pdVar16[1];
            dVar48 = *pdVar16;
            dVar47 = pdVar10[1];
            dVar46 = *pdVar10;
            dVar39 = dVar48 * dVar35;
            dVar45 = dVar40 * dVar35;
            pdVar16[1] = dVar45 - dVar47 * dVar45;
            *pdVar16 = dVar39 - dVar46 * dVar39;
            pdVar10[1] = dVar47 * dVar35 + dVar40 * dVar36;
            *pdVar10 = dVar46 * dVar35 + dVar48 * dVar36;
          } while (uVar6 < uVar19);
          if (iVar42 != uVar14 - uVar13) {
            lVar15 = (long)(int)(iVar42 + uVar43);
            lVar27 = lVar15 + lVar27;
            lVar15 = lVar15 + lVar25;
            dVar45 = param_1[lVar27];
            dVar39 = param_1[lVar15];
            param_1[lVar15] = dVar39 * dVar35 - dVar45 * dVar36;
            param_1[lVar27] = dVar45 * dVar35 + dVar36 * dVar39;
          }
        }
      }
      if (param_4 != (undefined8 *)0x0) {
        lVar28 = lVar44 * param_5;
        lVar25 = lVar9 * param_5;
        lVar15 = (lVar28 + 2) * 8;
        puVar17 = param_4 + lVar28;
        if ((lVar15 + -0x10 < lVar25 * 8 + 0x10 && lVar25 * 8 < lVar15) || (param_6 < 6)) {
                    /* catch() { ... } // from try @ 002ad268 with catch @ 002ad8ec */
          lVar15 = 0;
          do {
            dVar45 = (double)param_4[lVar25 + lVar15];
            dVar39 = (double)puVar17[lVar15];
                    /* catch() { ... } // from try @ 002ad22c with catch @ 002ad8fc
                       catch() { ... } // from try @ 002ad270 with catch @ 002ad8fc */
                    /* try { // try from 002ad908 to 003ad90b has its CatchHandler @ 002ad190 */
            puVar17[lVar15] = dVar39 * dVar35 - dVar45 * dVar36;
            param_4[lVar25 + lVar15] = dVar45 * dVar35 + dVar36 * dVar39;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)param_6);
        }
        else {
          uVar19 = (uint)((ulong)puVar17 >> 3) & 1;
          if (param_6 < uVar19) {
            uVar19 = param_6;
          }
          if (uVar19 != 0) {
            dVar39 = (double)param_4[lVar25];
            dVar45 = (double)param_4[lVar28];
                    /* try { // try from 002ad43c to 003ad4db has its CatchHandler @ 002ad8bc */
            param_4[lVar28] = dVar45 * dVar35 - dVar39 * dVar36;
            param_4[lVar25] = dVar39 * dVar35 + dVar36 * dVar45;
          }
          uVar14 = ((param_6 - uVar19) - 2 >> 1) + 1;
          lVar15 = 0;
          uVar13 = 0;
          iVar42 = uVar14 * 2;
          do {
            pdVar16 = (double *)((long)param_4 + lVar15 + ((ulong)uVar19 + lVar28) * 8);
            pdVar10 = (double *)((long)param_4 + lVar15 + ((ulong)uVar19 + lVar25) * 8);
            uVar13 = uVar13 + 1;
            lVar15 = lVar15 + 0x10;
            dVar47 = pdVar16[1];
            dVar46 = *pdVar16;
            dVar40 = pdVar10[1];
            dVar48 = *pdVar10;
            dVar39 = dVar46 * dVar35;
            dVar45 = dVar47 * dVar35;
            pdVar16[1] = dVar45 - dVar40 * dVar45;
            *pdVar16 = dVar39 - dVar48 * dVar39;
            pdVar10[1] = dVar40 * dVar35 + dVar47 * dVar36;
            *pdVar10 = dVar48 * dVar35 + dVar46 * dVar36;
          } while (uVar13 < uVar14);
          if (iVar42 != param_6 - uVar19) {
            lVar15 = (long)(int)(iVar42 + (uint)(uVar19 != 0));
            lVar25 = lVar15 + lVar25;
            lVar15 = lVar15 + lVar28;
            dVar45 = (double)param_4[lVar25];
            dVar39 = (double)param_4[lVar15];
            param_4[lVar15] = dVar39 * dVar35 - dVar45 * dVar36;
            param_4[lVar25] = dVar45 * dVar35 + dVar36 * dVar39;
          }
        }
      }
                    /* try { // try from 002ad518 to 003ad51b has its CatchHandler @ 002ad87c */
      bVar1 = false;
      do {
        iVar42 = (int)uVar31;
                    /* try { // try from 002ad520 to 003ad543 has its CatchHandler @ 002ad8bc */
        if (iVar42 < (int)uVar33) {
          uVar19 = iVar42 + 2;
          if ((int)uVar19 < (int)param_6) {
            pdVar16 = param_1 + lVar44 * param_2 + (long)(int)uVar19;
            dVar39 = ABS(param_1[lVar44 * param_2 + (long)(int)uVar26]);
            do {
              dVar45 = *pdVar16;
              pdVar16 = pdVar16 + 1;
              dVar35 = ABS(dVar45);
              uVar14 = uVar19;
              if (ABS(dVar45) <= dVar39) {
                dVar35 = dVar39;
                uVar14 = uVar26;
              }
              uVar26 = uVar14;
              uVar19 = uVar19 + 1;
              dVar39 = dVar35;
            } while (uVar19 != param_6);
          }
          piVar5[lVar44] = uVar26;
          if (0 < iVar42) goto LAB_002ad794;
        }
        else {
LAB_002ad794:
          if (iVar42 < 2) {
            piVar34[lVar44] = 0;
          }
          else {
            iVar22 = 0;
            iVar7 = 1;
            pdVar16 = param_1 + lVar44 + param_2;
            dVar39 = ABS(*(double *)((long)param_1 + lVar23));
            do {
              dVar45 = *pdVar16;
              pdVar16 = pdVar16 + param_2;
              dVar35 = ABS(dVar45);
              iVar4 = iVar7;
              if (ABS(dVar45) <= dVar39) {
                dVar35 = dVar39;
                iVar4 = iVar22;
              }
              iVar22 = iVar4;
              iVar7 = iVar7 + 1;
              dVar39 = dVar35;
            } while (iVar7 != iVar42);
            piVar34[lVar44] = iVar22;
          }
        }
        if (bVar1) goto LAB_002ad590;
        bVar1 = true;
        lVar44 = lVar9;
        lVar23 = lVar21;
        uVar31 = uVar8;
        uVar26 = uVar30;
      } while( true );
    }
  }
LAB_002ad5a0:
  lVar9 = 0;
  lVar44 = 1;
  puVar17 = param_4;
  uVar30 = 0;
  pdVar16 = param_3;
  if (0 < (int)(param_6 - 1)) {
    do {
      uVar19 = uVar30 + 1;
      if ((int)uVar19 < (int)param_6) {
        pdVar10 = pdVar16 + 1;
        lVar25 = lVar44;
        dVar38 = *pdVar16;
        uVar26 = uVar19;
        uVar33 = uVar30;
        do {
          dVar39 = *pdVar10;
                    /* try { // try from 002ad5f4 to 003ad60b has its CatchHandler @ 002ad190 */
          pdVar24 = pdVar10;
          lVar23 = lVar25;
          uVar14 = uVar26;
          if (dVar39 <= dVar38) {
            pdVar24 = param_3 + (int)uVar33;
            lVar23 = (long)(int)uVar33;
            uVar14 = uVar33;
          }
          uVar33 = uVar14;
          uVar26 = uVar26 + 1;
          lVar25 = lVar25 + 1;
          pdVar10 = pdVar10 + 1;
          if (dVar39 <= dVar38) {
            dVar39 = dVar38;
          }
          dVar38 = dVar39;
        } while (uVar26 != param_6);
        if (uVar30 != uVar33) {
          *pdVar24 = *pdVar16;
          *pdVar16 = dVar38;
          if ((param_4 != (undefined8 *)0x0) && (0 < (int)param_6)) {
            lVar23 = lVar23 * param_5;
            lVar25 = lVar23 + 2;
            lVar21 = lVar25 * 8;
            if (((lVar21 + lVar9 * -8 == 0 || lVar21 < lVar9 * 8) ||
                 (0x10 - (long)param_4) + (long)puVar17 <= lVar21 + -0x10) && (8 < param_6)) {
              uVar33 = (uint)((ulong)(param_4 + lVar23) >> 3) & 1;
              uVar30 = param_6;
              if (uVar33 < param_6) {
                uVar30 = uVar33;
              }
              if (uVar30 != 0) {
                uVar12 = param_4[lVar23];
                param_4[lVar23] = *puVar17;
                *puVar17 = uVar12;
              }
              lVar25 = 0;
              uVar33 = ((param_6 - uVar30) - 2 >> 1) + 1;
              uVar26 = 0;
              iVar49 = uVar33 * 2;
              do {
                puVar32 = (undefined8 *)((long)param_4 + lVar25 + (lVar9 + (ulong)uVar30) * 8);
                puVar3 = (undefined8 *)((long)param_4 + lVar25 + ((ulong)uVar30 + lVar23) * 8);
                uVar26 = uVar26 + 1;
                lVar25 = lVar25 + 0x10;
                uVar41 = *puVar32;
                uVar37 = puVar3[1];
                uVar12 = *puVar3;
                puVar3[1] = puVar32[1];
                *puVar3 = uVar41;
                puVar32[1] = uVar37;
                *puVar32 = uVar12;
              } while (uVar26 < uVar33);
              if (iVar49 != param_6 - uVar30) {
                lVar21 = (long)(int)(iVar49 + (uint)(uVar30 != 0));
                lVar25 = lVar9 + lVar21;
                lVar21 = lVar21 + lVar23;
                uVar12 = param_4[lVar21];
                param_4[lVar21] = param_4[lVar25];
                param_4[lVar25] = uVar12;
              }
            }
            else {
              lVar23 = 0;
              do {
                uVar12 = param_4[lVar25 + lVar23 + -2];
                param_4[lVar25 + lVar23 + -2] = puVar17[lVar23];
                puVar17[lVar23] = uVar12;
                lVar23 = lVar23 + 1;
              } while ((int)lVar23 < (int)param_6);
            }
          }
        }
      }
      puVar17 = puVar17 + param_5;
      lVar9 = lVar9 + param_5;
      lVar44 = lVar44 + 1;
      uVar30 = uVar19;
      pdVar16 = pdVar16 + 1;
    } while ((int)uVar19 < (int)(param_6 - 1));
  }
  return 1;
LAB_002ad590:
  iVar18 = iVar18 + 1;
  if (iVar18 == iVar49) goto LAB_002ad5a0;
  goto LAB_002ad018;
}


==================================================================

### FUNC 002adb50 (2724 bytes) name=eigen

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::eigen(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&) */

undefined1 cv::eigen(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  bool bVar4;
  ulong uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined2 uVar10;
  undefined8 *puVar11;
  char cVar12;
  undefined1 uVar13;
  int iVar14;
  int iVar15;
  char *pcVar16;
  long lVar17;
  long lVar18;
  ulong uVar19;
  ulong uVar20;
  Mat **ppMVar21;
  long lVar22;
  Mat *pMVar23;
  uint uVar24;
  int *piVar25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  ulong uVar29;
  long lVar30;
  undefined8 local_630;
  undefined8 local_628;
  undefined8 local_620;
  undefined8 local_618;
  undefined8 local_610;
  undefined8 local_608;
  undefined8 local_600;
  Mat *pMStack_5f8;
  undefined8 local_5f0;
  undefined8 uStack_5e8;
  undefined8 local_5e0;
  undefined8 uStack_5d8;
  undefined8 local_5d0;
  long lStack_5c8;
  Mat **local_5c0;
  undefined8 *local_5b8;
  undefined8 local_5b0;
  undefined8 uStack_5a8;
  undefined4 local_5a0;
  int local_59c;
  Mat *local_598;
  undefined8 local_590;
  undefined8 uStack_588;
  undefined8 local_580;
  undefined8 uStack_578;
  undefined8 local_570;
  long lStack_568;
  Mat **local_560;
  undefined8 *local_558;
  undefined8 local_550;
  undefined8 local_548;
  uint local_538;
  int local_534;
  int local_530;
  int local_52c;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  int *local_4f8;
  undefined8 *local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  uint local_4d8;
  int local_4d4;
  int local_4d0;
  int local_4cc;
  ulong local_4c8;
  ulong local_4c0;
  long local_4b8;
  long local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  ulong *local_490;
  ulong local_488 [2];
  uint local_478;
  int local_474;
  int local_470 [2];
  long local_468;
  long local_460;
  long local_458;
  long local_450;
  undefined8 local_448;
  long local_440;
  int *local_438;
  ulong *local_430;
  ulong local_428;
  ulong local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
                    /* try { // try from 002adb74 to 003adb97 has its CatchHandler @ 002ad9e8 */
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x10000) {
    pMVar23 = *(Mat **)(param_1 + 8);
    local_4f8 = &local_530;
    local_4f0 = &local_4e8;
    local_538 = *(uint *)pMVar23;
    local_534 = *(int *)(pMVar23 + 4);
    local_530 = *(int *)(pMVar23 + 8);
    local_52c = *(int *)(pMVar23 + 0xc);
    local_528 = *(undefined8 *)(pMVar23 + 0x10);
    local_520 = *(undefined8 *)(pMVar23 + 0x18);
    local_518 = *(undefined8 *)(pMVar23 + 0x20);
    local_510 = *(undefined8 *)(pMVar23 + 0x28);
    local_508 = *(undefined8 *)(pMVar23 + 0x30);
    local_500 = *(long *)(pMVar23 + 0x38);
    local_4e0 = 0;
    local_4e8 = 0;
    if (local_500 != 0) {
      piVar25 = (int *)(local_500 + 0x14);
      do {
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_4e8 = **(undefined8 **)(pMVar23 + 0x48);
      local_4e0 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_534 = 0;
      Mat::copySize((Mat *)&local_538,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar14 = local_530;
  uVar24 = local_538;
                    /* try { // try from 002adbb0 to 003adbb3 has its CatchHandler @ 002adc90 */
  uVar2 = local_538 & 0xfff;
  if (local_530 != local_52c) {
    local_630 = 0;
    local_628 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_630,0x14);
    uVar7 = s_src_rows____src_cols_00467cb0._8_8_;
    uVar6 = s_src_rows____src_cols_00467cb0._0_8_;
                    /* try { // try from 002adbfc to 003adbff has its CatchHandler @ 002adc50 */
                    /* try { // try from 002adc04 to 003adc07 has its CatchHandler @ 002adc90 */
    *(undefined4 *)(pcVar16 + 0x10) = s_src_rows____src_cols_00467cb0._16_4_;
    *(undefined8 *)pcVar16 = uVar6;
    *(undefined8 *)(pcVar16 + 8) = uVar7;
    error(-0xd7,(String *)&local_630,
          "bool cv::eigen(cv::InputArray, cv::OutputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x534);
    String::deallocate((String *)&local_630);
  }
  if (1 < uVar2 - 5) {
    local_620 = 0;
    local_618 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_620,0x20);
    uVar8 = s_type____CV_32F____type____CV_64F_00467cc8._24_8_;
    uVar7 = s_type____CV_32F____type____CV_64F_00467cc8._16_8_;
    uVar6 = s_type____CV_32F____type____CV_64F_00467cc8._8_8_;
                    /* catch() { ... } // from try @ 002adbfc with catch @ 002adc50 */
                    /* try { // try from 002adc7c to 003adc7f has its CatchHandler @ 002ad9e8 */
    *(undefined8 *)pcVar16 = s_type____CV_32F____type____CV_64F_00467cc8._0_8_;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
                    /* catch() { ... } // from try @ 002adaf8 with catch @ 002adc80 */
    *(undefined8 *)(pcVar16 + 0x10) = uVar7;
    *(undefined8 *)(pcVar16 + 0x18) = uVar8;
    error(-0xd7,(String *)&local_620,
          "bool cv::eigen(cv::InputArray, cv::OutputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x535);
    String::deallocate((String *)&local_620);
  }
                    /* catch() { ... } // from try @ 002ada74 with catch @ 002adc90
                       catch() { ... } // from try @ 002adb00 with catch @ 002adc90
                       catch() { ... } // from try @ 002adbb0 with catch @ 002adc90
                       catch() { ... } // from try @ 002adc04 with catch @ 002adc90 */
                    /* catch() { ... } // from try @ 002adce8 with catch @ 002adc98
                       catch() { ... } // from try @ 002addf4 with catch @ 002adc98
                       catch() { ... } // from try @ 002af7a0 with catch @ 002adc98
                       catch() { ... } // from try @ 002afcb0 with catch @ 002adc98 */
  local_5b8 = &local_5b0;
  local_5c0 = &pMStack_5f8;
  uStack_5a8 = 0;
  local_5b0 = 0;
  local_5f0 = 0;
  uStack_5e8 = 0;
  local_5e0 = 0;
  pMStack_5f8 = _UNK_002ae718;
  local_600 = _DAT_002ae710;
  uStack_5d8 = 0;
  local_5d0 = 0;
  lStack_5c8 = 0;
  cVar12 = _OutputArray::needed(param_3);
  if (cVar12 != '\0') {
    _OutputArray::create(param_3,iVar14,iVar14,uVar2,-1,false,0);
    iVar15 = _InputArray::kind((_InputArray *)param_3);
    if (iVar15 == 0x10000) {
      pMVar23 = *(Mat **)(param_3 + 8);
      local_560 = &local_598;
      local_558 = &local_550;
      local_5a0 = *(undefined4 *)pMVar23;
      local_590 = *(undefined8 *)(pMVar23 + 0x10);
      local_59c = *(int *)(pMVar23 + 4);
      local_598 = *(Mat **)(pMVar23 + 8);
      uStack_588 = *(undefined8 *)(pMVar23 + 0x18);
      local_580 = *(undefined8 *)(pMVar23 + 0x20);
      uStack_578 = *(undefined8 *)(pMVar23 + 0x28);
      local_570 = *(undefined8 *)(pMVar23 + 0x30);
      lStack_568 = *(long *)(pMVar23 + 0x38);
      local_548 = 0;
      local_550 = 0;
      if (lStack_568 != 0) {
        piVar25 = (int *)(lStack_568 + 0x14);
        do {
          cVar12 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = *piVar25 + 1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
      }
      if (*(int *)(pMVar23 + 4) < 3) {
        local_550 = **(undefined8 **)(pMVar23 + 0x48);
        local_548 = (*(undefined8 **)(pMVar23 + 0x48))[1];
      }
      else {
        local_59c = 0;
        Mat::copySize((Mat *)&local_5a0,pMVar23);
      }
    }
    else {
      _InputArray::getMat_((int)param_3);
    }
    if (lStack_568 != 0) {
      piVar25 = (int *)(lStack_568 + 0x14);
      do {
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (lStack_5c8 != 0) {
      piVar25 = (int *)(lStack_5c8 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    puVar11 = local_558;
    lStack_5c8 = 0;
    local_5f0 = 0;
    uStack_5d8 = 0;
    local_5e0 = 0;
    uStack_5e8 = 0;
    if (local_600._4_4_ < 1) {
LAB_002ae348:
      if (2 < local_59c) goto LAB_002ae354;
      pMStack_5f8 = local_598;
      local_600 = CONCAT44(local_59c,local_5a0);
      *local_5b8 = *local_558;
      local_5b8[1] = puVar11[1];
    }
    else {
      iVar15 = 0;
      ppMVar21 = local_5c0;
      do {
        *(undefined4 *)ppMVar21 = 0;
        iVar15 = iVar15 + 1;
        ppMVar21 = (Mat **)((long)ppMVar21 + 4);
      } while (iVar15 < local_600._4_4_);
      if (local_600._4_4_ < 3) goto LAB_002ae348;
LAB_002ae354:
      local_600 = CONCAT44(local_600._4_4_,local_5a0);
      Mat::copySize((Mat *)&local_600,(Mat *)&local_5a0);
    }
    uStack_5d8 = uStack_578;
    local_5e0 = local_580;
    lStack_5c8 = lStack_568;
    local_5d0 = local_570;
    uStack_5e8 = uStack_588;
    local_5f0 = local_590;
    if (lStack_568 != 0) {
      piVar25 = (int *)(lStack_568 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_5a0);
      }
    }
    lStack_568 = 0;
    local_590 = 0;
    uStack_578 = 0;
    local_580 = 0;
    uStack_588 = 0;
    if (0 < local_59c) {
      iVar15 = 0;
      ppMVar21 = local_560;
      do {
        *(undefined4 *)ppMVar21 = 0;
        iVar15 = iVar15 + 1;
        ppMVar21 = (Mat **)((long)ppMVar21 + 4);
      } while (iVar15 < local_59c);
    }
    if (local_558 != &local_550) {
      fastFree(local_558);
    }
  }
                    /* try { // try from 002adce8 to 003add0b has its CatchHandler @ 002adc98 */
  if (local_534 < 1) {
    uVar27 = 0;
    lVar17 = 0;
    uVar26 = 0x20;
    lVar18 = 0;
LAB_002ae248:
    local_418 = auStack_408;
    local_410 = uVar26;
  }
  else {
    lVar17 = local_4f0[(long)local_534 + -1];
    local_418 = auStack_408;
    local_410 = 0x408;
    uVar27 = lVar17 * iVar14 + 0xfU & 0xfffffffffffffff0;
    lVar18 = uVar27 * (long)iVar14;
    uVar26 = lVar18 + lVar17 * (iVar14 * 5) + 0x20;
    if (uVar26 < 0x409) goto LAB_002ae248;
                    /* try { // try from 002add50 to 003addcb has its CatchHandler @ 002afcb4 */
    local_418 = operator_new__(uVar26);
    local_410 = uVar26;
  }
  lVar30 = (long)iVar14;
  uVar3 = uVar24 & 7;
  uVar1 = uVar2 + 0x42ff0000;
  uVar29 = (ulong)(local_418 + 0xf) & 0xfffffffffffffff0;
  local_498 = &local_4d0;
  local_490 = local_488;
  uVar28 = (ulong)(int)((uVar24 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> (uVar3 << 1)) & 3));
  local_4d4 = 2;
  local_4d0 = iVar14;
  uVar19 = lVar30 * uVar28;
  local_4cc = iVar14;
  local_4b8 = 0;
  local_4b0 = 0;
  local_4a8 = 0;
  local_4a0 = 0;
  local_488[1] = 0;
  local_488[0] = 0;
  lVar22 = lVar30;
  uVar26 = uVar19;
  local_4c8 = uVar29;
  local_4c0 = uVar29;
  if (uVar27 == 0) {
    local_4d8 = uVar1 | 0x4000;
    local_4b8 = 0;
    goto LAB_002ade50;
  }
                    /* try { // try from 002addf4 to 003ade4f has its CatchHandler @ 002adc98 */
  uVar20 = 0x88442211UL >> (uVar3 << 2) & 0xf;
  local_4d8 = uVar1;
  if (iVar14 == 1) {
    uVar5 = 0;
    if (uVar20 != 0) {
      uVar5 = uVar19 / uVar20;
    }
    if (uVar19 - uVar5 * uVar20 != 0) goto LAB_002ae414;
LAB_002ae4c0:
    local_4b8 = 0;
    uVar24 = 0x4000;
    uVar26 = uVar19;
  }
  else {
    uVar5 = 0;
    if (uVar20 != 0) {
      uVar5 = uVar27 / uVar20;
    }
    uVar26 = uVar27;
    if (uVar27 != uVar5 * uVar20) {
LAB_002ae414:
      local_610 = 0;
      local_608 = 0;
      pcVar16 = (char *)String::allocate((String *)&local_610,0x1f);
      cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
      uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
      uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
      uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
      uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
      *(undefined8 *)(pcVar16 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
      *(undefined4 *)(pcVar16 + 0x18) = uVar9;
      *(undefined2 *)(pcVar16 + 0x1c) = uVar10;
      pcVar16[0x1e] = cVar12;
      *(undefined8 *)pcVar16 = uVar6;
      *(undefined8 *)(pcVar16 + 8) = uVar7;
      error(-0xd,(String *)&local_610,"cv::Mat::Mat(int, int, int, void*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",0x19d
           );
      String::deallocate((String *)&local_610);
      lVar22 = (long)local_4d0;
    }
    if (uVar19 - uVar26 == 0) goto LAB_002ae4c0;
    local_4b8 = uVar19 - uVar26;
    uVar24 = 0;
  }
  local_4d8 = local_4d8 | uVar24;
LAB_002ade50:
  *local_490 = uVar26;
  local_490[1] = uVar28;
  local_438 = local_470;
  local_430 = &local_428;
  local_4b0 = local_4c0 + lVar22 * uVar26;
  local_4b8 = local_4b0 + local_4b8;
  local_474 = 2;
  local_468 = uVar29 + lVar18;
  local_470[1] = 1;
                    /* try { // try from 002ade9c to 003ade9f has its CatchHandler @ 002afcb4 */
  local_458 = local_468 + uVar19;
  local_590 = 0;
  local_5a0 = 0x2010000;
  local_470[0] = iVar14;
  local_448 = 0;
  local_440 = 0;
  local_598 = (Mat *)&local_4d8;
  local_478 = uVar1 | 0x4000;
  local_460 = local_468;
  local_450 = local_458;
  local_428 = uVar28;
  local_420 = uVar28;
                    /* try { // try from 002adef8 to 003adefb has its CatchHandler @ 002afc80 */
  Mat::copyTo((Mat *)&local_538,(_OutputArray *)&local_5a0);
                    /* try { // try from 002adf00 to 003adf03 has its CatchHandler @ 002afcb4 */
  if (uVar2 == 5) {
    uVar13 = FUN_002abe40(local_4c8,local_488[0],local_468,local_5f0,local_5b0,iVar14,
                          uVar29 + (uVar27 + lVar17) * lVar30);
  }
  else {
    uVar13 = FUN_002ace08();
  }
  Mat::copyTo((Mat *)&local_478,param_2);
  if (local_440 != 0) {
    piVar25 = (int *)(local_440 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_478);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar14 = 0;
    piVar25 = local_438;
    do {
      *piVar25 = 0;
      iVar14 = iVar14 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar14 < local_474);
  }
  if (local_430 != &local_428) {
    fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar25 = (int *)(local_4a0 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar14 = 0;
    piVar25 = local_498;
    do {
      *piVar25 = 0;
      iVar14 = iVar14 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar14 < local_4d4);
  }
  if (local_490 != local_488) {
    fastFree(local_490);
  }
  if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
    operator_delete__(local_418);
  }
  if (lStack_5c8 != 0) {
    piVar25 = (int *)(lStack_5c8 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_600);
    }
  }
  lStack_5c8 = 0;
  local_5f0 = 0;
  uStack_5d8 = 0;
  local_5e0 = 0;
  uStack_5e8 = 0;
  if (0 < local_600._4_4_) {
    iVar14 = 0;
    ppMVar21 = local_5c0;
    do {
      *(undefined4 *)ppMVar21 = 0;
      iVar14 = iVar14 + 1;
      ppMVar21 = (Mat **)((long)ppMVar21 + 4);
    } while (iVar14 < local_600._4_4_);
  }
  if (local_5b8 != &local_5b0) {
    fastFree(local_5b8);
  }
  if (local_500 != 0) {
    piVar25 = (int *)(local_500 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar14 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate((Mat *)&local_538);
    }
  }
  local_500 = 0;
  local_528 = 0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_534) {
    iVar14 = 0;
    piVar25 = local_4f8;
    do {
      *piVar25 = 0;
      iVar14 = iVar14 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar14 < local_534);
  }
  if (local_4f0 != &local_4e8) {
    fastFree(local_4f0);
  }
  return uVar13;
}


==================================================================

### FUNC 002ae720 (2436 bytes) name=cvEigenVV

void cvEigenVV(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
              AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  long lVar5;
  char *pcVar6;
  Mat **ppMVar7;
  int *piVar8;
  _OutputArray *p_Var9;
  int iVar10;
  undefined4 *puVar11;
  undefined4 local_328 [2];
  Mat *local_320;
  undefined4 local_318;
  undefined4 local_314;
  undefined8 local_310;
  Mat *local_308;
  undefined4 local_300;
  undefined4 local_2fc;
  undefined8 local_2f8;
  Mat *local_2f0;
  undefined4 local_2e8;
  undefined4 local_2e4;
  uint local_2e0;
  int iStack_2dc;
  undefined8 uStack_2d8;
  long local_2d0;
  undefined8 local_2c8;
  AutoBuffer *local_2c0;
  undefined8 local_2b8;
  undefined8 local_2b0;
  long local_2a8;
  int *local_2a0;
  undefined8 *local_298;
  undefined8 auStack_290 [2];
  undefined8 local_280;
  undefined8 uStack_278;
  long local_270;
  undefined8 local_268;
  AutoBuffer *local_260;
  undefined8 local_258;
  undefined8 local_250;
  long local_248;
  int *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  Mat aMStack_220 [4];
  int local_21c;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  long local_1e8;
  undefined4 *local_1e0;
  undefined1 *local_1d8;
  undefined1 auStack_1d0 [16];
  undefined8 local_1c0;
  Mat *pMStack_1b8;
  long local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  long local_188;
  Mat **local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  Mat *pMStack_158;
  undefined8 local_150;
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  long local_128;
  Mat **local_120;
  undefined4 **local_118;
  undefined4 *local_110;
  undefined1 *puStack_108;
  undefined1 auStack_100 [16];
  Mat aMStack_f0 [4];
  int local_ec;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  long local_b8;
  undefined4 *local_b0;
  undefined1 *local_a8;
  undefined1 auStack_a0 [16];
  Mat aMStack_90 [4];
  int local_8c;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  long local_58;
  undefined4 *local_50;
  undefined1 *local_48;
  undefined1 auStack_40 [64];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_280 = CONCAT44(iStack_2dc,local_2e0);
  local_238 = &local_230;
  local_240 = (int *)&uStack_278;
  uStack_228 = 0;
  local_230 = 0;
  uStack_278 = uStack_2d8;
  local_270 = local_2d0;
  local_268 = local_2c8;
  local_260 = local_2c0;
  local_258 = local_2b8;
  local_250 = local_2b0;
  local_248 = local_2a8;
  if (local_2a8 != 0) {
    piVar8 = (int *)(local_2a8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = *piVar8 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iStack_2dc < 3) {
    local_230 = *local_298;
    uStack_228 = local_298[1];
  }
  else {
    local_280 = (ulong)local_2e0;
    cv::Mat::copySize((Mat *)&local_280,(Mat *)&local_2e0);
  }
  if (param_2 == (cv *)0x0) {
    local_1c0._4_4_ = (int)((ulong)local_1c0 >> 0x20);
    local_1c0 = (long *)CONCAT44(local_1c0._4_4_,0x1010000);
    local_1b0 = 0;
    local_150 = 0;
    local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
    pMStack_1b8 = aMStack_220;
    pMStack_158 = (Mat *)&local_280;
    p_Var9 = (_OutputArray *)cv::noArray();
    cv::eigen((_InputArray *)&local_1c0,(_OutputArray *)&local_160,p_Var9);
  }
  else {
    local_310._4_4_ = (undefined4)((ulong)local_310 >> 0x20);
    local_2f8._4_4_ = (undefined4)((ulong)local_2f8 >> 0x20);
    cv::cvarrToMat(param_2,(void *)0x0,true,false,0,local_2c0);
    local_118 = &local_110;
    local_120 = &pMStack_158;
    pMStack_158 = pMStack_1b8;
    local_160 = local_1c0;
    local_150 = local_1b0;
    local_148 = local_1a8;
    local_140 = local_1a0;
    local_138 = local_198;
    local_130 = local_190;
    local_128 = local_188;
    puStack_108 = (undefined1 *)0x0;
    local_110 = (undefined4 *)0x0;
    if (local_188 != 0) {
      piVar8 = (int *)(local_188 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (local_1c0._4_4_ < 3) {
      local_110 = (undefined4 *)*local_178;
      puStack_108 = (undefined1 *)local_178[1];
    }
    else {
      local_160 = (long *)((ulong)local_1c0 & 0xffffffff);
      cv::Mat::copySize((Mat *)&local_160,(Mat *)&local_1c0);
    }
    local_2e8 = 0;
    local_2e4 = 0;
    local_2f8 = CONCAT44(local_2f8._4_4_,0x2010000);
    local_318 = 0;
    local_314 = 0;
    local_328[0] = 0x1010000;
    local_300 = 0;
    local_2fc = 0;
    local_310 = CONCAT44(local_310._4_4_,0x2010000);
    local_320 = aMStack_220;
    local_308 = (Mat *)&local_280;
    local_2f0 = (Mat *)&local_160;
    cv::eigen((_InputArray *)local_328,(_OutputArray *)&local_310,(_OutputArray *)&local_2f8);
    lVar5 = local_1b0;
    if (local_1b0 != local_150) {
      local_2e8 = 0;
      local_2e4 = 0;
      local_2f8 = CONCAT44(local_2f8._4_4_,0x2010000);
      local_2f0 = (Mat *)&local_1c0;
      cv::Mat::convertTo((Mat *)&local_160,(_OutputArray *)&local_2f8,(uint)local_1c0 & 0xfff,1.0,
                         0.0);
      if (lVar5 != local_1b0) {
        local_310 = 0;
        local_308 = (Mat *)0x0;
        pcVar6 = (char *)cv::String::allocate((String *)&local_310,0x12);
        uVar4 = s_p____evects0_ptr___00467d68._8_8_;
        uVar3 = s_p____evects0_ptr___00467d68._0_8_;
        *(undefined2 *)(pcVar6 + 0x10) = s_p____evects0_ptr___00467d68._16_2_;
        *(undefined8 *)pcVar6 = uVar3;
        *(undefined8 *)(pcVar6 + 8) = uVar4;
        cv::error(-0xd7,(String *)&local_310,
                  "void cvEigenVV(CvArr*, CvArr*, CvArr*, double, int, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x624);
        cv::String::deallocate((String *)&local_310);
      }
    }
    if (local_128 != 0) {
      piVar8 = (int *)(local_128 + 0x14);
      do {
        iVar10 = *piVar8;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = iVar10 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar10 == 1) {
        cv::Mat::deallocate((Mat *)&local_160);
      }
    }
    local_128 = 0;
    local_150 = 0;
    local_138 = 0;
    local_140 = 0;
    local_148 = 0;
    if (0 < local_160._4_4_) {
      iVar10 = 0;
      ppMVar7 = local_120;
      do {
        *(undefined4 *)ppMVar7 = 0;
        iVar10 = iVar10 + 1;
        ppMVar7 = (Mat **)((long)ppMVar7 + 4);
      } while (iVar10 < local_160._4_4_);
    }
    if (local_118 != &local_110) {
      cv::fastFree(local_118);
    }
    if (local_188 != 0) {
      piVar8 = (int *)(local_188 + 0x14);
      do {
        iVar10 = *piVar8;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = iVar10 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar10 == 1) {
        cv::Mat::deallocate((Mat *)&local_1c0);
      }
    }
    local_188 = 0;
    local_1b0 = 0;
    local_198 = 0;
    local_1a0 = 0;
    local_1a8 = 0;
    if (0 < local_1c0._4_4_) {
      iVar10 = 0;
      ppMVar7 = local_180;
      do {
        *(undefined4 *)ppMVar7 = 0;
        iVar10 = iVar10 + 1;
        ppMVar7 = (Mat **)((long)ppMVar7 + 4);
      } while (iVar10 < local_1c0._4_4_);
    }
    if (local_178 != &local_170) {
      cv::fastFree(local_178);
    }
  }
  lVar5 = local_2d0;
  if (local_2d0 != local_270) {
    if ((local_2a0[1] == local_240[1]) && (*local_2a0 == *local_240)) {
      local_150 = 0;
      local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
      pMStack_158 = (Mat *)&local_2e0;
      cv::Mat::convertTo((Mat *)&local_280,(_OutputArray *)&local_160,local_2e0 & 0xfff,1.0,0.0);
    }
    else if ((local_2e0 & 0xfff) == ((uint)local_280 & 0xfff)) {
      local_1c0 = (long *)CONCAT44(local_1c0._4_4_,0x1010000);
      local_1b0 = 0;
      local_150 = 0;
      local_160 = (long *)CONCAT44(local_160._4_4_,0x2010000);
      pMStack_1b8 = (Mat *)&local_280;
      pMStack_158 = (Mat *)&local_2e0;
      cv::transpose((_InputArray *)&local_1c0,(_OutputArray *)&local_160);
    }
    else {
      cv::Mat::t();
      local_178 = &local_170;
      local_180 = &pMStack_1b8;
      local_1c0 = DAT_002af230;
      pMStack_1b8 = (Mat *)0x0;
      local_1b0 = 0;
      local_1a8 = 0;
      local_1a0 = 0;
      local_198 = 0;
      local_190 = 0;
      local_188 = 0;
      local_168 = 0;
      local_170 = 0;
      (**(code **)(*local_160 + 0x18))
                (local_160,(_OutputArray *)&local_160,(Mat *)&local_1c0,0xffffffff);
      local_2e8 = 0;
      local_2e4 = 0;
      local_2f8 = CONCAT44(local_2f8._4_4_,0x2010000);
      local_2f0 = (Mat *)&local_2e0;
      cv::Mat::convertTo((Mat *)&local_1c0,(_OutputArray *)&local_2f8,local_2e0 & 0xfff,1.0,0.0);
      if (local_188 != 0) {
        piVar8 = (int *)(local_188 + 0x14);
        do {
          iVar10 = *piVar8;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
          if (bVar2) {
            *piVar8 = iVar10 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate((Mat *)&local_1c0);
        }
      }
      local_188 = 0;
      local_1b0 = 0;
      local_198 = 0;
      local_1a0 = 0;
      local_1a8 = 0;
      if (0 < local_1c0._4_4_) {
        iVar10 = 0;
        ppMVar7 = local_180;
        do {
          *(undefined4 *)ppMVar7 = 0;
          iVar10 = iVar10 + 1;
          ppMVar7 = (Mat **)((long)ppMVar7 + 4);
        } while (iVar10 < local_1c0._4_4_);
      }
      if (local_178 != &local_170) {
        cv::fastFree(local_178);
      }
      if (local_58 != 0) {
        piVar8 = (int *)(local_58 + 0x14);
        do {
          iVar10 = *piVar8;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
          if (bVar2) {
            *piVar8 = iVar10 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate(aMStack_90);
        }
      }
      local_58 = 0;
      local_80 = 0;
      local_68 = 0;
      local_70 = 0;
      local_78 = 0;
      if (0 < local_8c) {
        iVar10 = 0;
        do {
          *local_50 = 0;
          iVar10 = iVar10 + 1;
          local_50 = local_50 + 1;
        } while (iVar10 < local_8c);
      }
      if (local_48 != auStack_40) {
        cv::fastFree(local_48);
      }
      if (local_b8 != 0) {
        piVar8 = (int *)(local_b8 + 0x14);
        do {
          iVar10 = *piVar8;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
          if (bVar2) {
            *piVar8 = iVar10 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate(aMStack_f0);
        }
      }
      local_b8 = 0;
      local_e0 = 0;
      local_c8 = 0;
      local_d0 = 0;
      local_d8 = 0;
      if (0 < local_ec) {
        iVar10 = 0;
        do {
          *local_b0 = 0;
          iVar10 = iVar10 + 1;
          local_b0 = local_b0 + 1;
        } while (iVar10 < local_ec);
      }
      if (local_a8 != auStack_a0) {
        cv::fastFree(local_a8);
      }
      if (local_118 != (undefined4 **)0x0) {
        piVar8 = (int *)((long)local_118 + 0x14);
        do {
          iVar10 = *piVar8;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
          if (bVar2) {
            *piVar8 = iVar10 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate((Mat *)&local_150);
        }
      }
      local_118 = (undefined4 **)0x0;
      local_140 = 0;
      local_128 = 0;
      local_130 = 0;
      local_138 = 0;
      if (0 < local_150._4_4_) {
        iVar10 = 0;
        puVar11 = local_110;
        do {
          *puVar11 = 0;
          iVar10 = iVar10 + 1;
          puVar11 = puVar11 + 1;
        } while (iVar10 < local_150._4_4_);
      }
      if (puStack_108 != auStack_100) {
        cv::fastFree(puStack_108);
      }
    }
    if (lVar5 != local_2d0) {
      local_2f8 = 0;
      local_2f0 = (Mat *)0x0;
      pcVar6 = (char *)cv::String::allocate((String *)&local_2f8,0x11);
      uVar4 = s_p____evals0_ptr___00467d80._8_8_;
      uVar3 = s_p____evals0_ptr___00467d80._0_8_;
      pcVar6[0x10] = s_p____evals0_ptr___00467d80[0x10];
      *(undefined8 *)pcVar6 = uVar3;
      *(undefined8 *)(pcVar6 + 8) = uVar4;
      cv::error(-0xd7,(String *)&local_2f8,
                "void cvEigenVV(CvArr*, CvArr*, CvArr*, double, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x632);
      cv::String::deallocate((String *)&local_2f8);
    }
  }
  if (local_248 != 0) {
    piVar8 = (int *)(local_248 + 0x14);
    do {
      iVar10 = *piVar8;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_280);
    }
  }
  local_248 = 0;
  local_270 = 0;
  local_258 = 0;
  local_260 = (AutoBuffer *)0x0;
  local_268 = 0;
  if (0 < local_280._4_4_) {
    iVar10 = 0;
    piVar8 = local_240;
    do {
      *piVar8 = 0;
      iVar10 = iVar10 + 1;
      piVar8 = piVar8 + 1;
    } while (iVar10 < local_280._4_4_);
  }
  if (local_238 != &local_230) {
    cv::fastFree(local_238);
  }
  if (local_2a8 != 0) {
    piVar8 = (int *)(local_2a8 + 0x14);
    do {
      iVar10 = *piVar8;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_2e0);
    }
  }
  local_2a8 = 0;
  local_2d0 = 0;
  local_2b8 = 0;
  local_2c0 = (AutoBuffer *)0x0;
  local_2c8 = 0;
  if (0 < iStack_2dc) {
    iVar10 = 0;
    do {
      *local_2a0 = 0;
      iVar10 = iVar10 + 1;
      local_2a0 = local_2a0 + 1;
    } while (iVar10 < iStack_2dc);
  }
  if (local_298 != auStack_290) {
    cv::fastFree(local_298);
  }
  if (local_1e8 != 0) {
    piVar8 = (int *)(local_1e8 + 0x14);
    do {
      iVar10 = *piVar8;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_220);
    }
  }
  local_1e8 = 0;
  local_210 = 0;
  local_1f8 = 0;
  local_200 = 0;
  local_208 = 0;
  if (0 < local_21c) {
    iVar10 = 0;
    do {
      *local_1e0 = 0;
      iVar10 = iVar10 + 1;
      local_1e0 = local_1e0 + 1;
    } while (iVar10 < local_21c);
  }
  if (local_1d8 != auStack_1d0) {
    cv::fastFree(local_1d8);
  }
  return;
}


==================================================================

### FUNC 002af238 (5196 bytes) name=FUN_002af238

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_002af238(double param_1,float param_2,float *param_3,ulong param_4,float *param_5,
                 float *param_6,ulong param_7,uint param_8,uint param_9,int param_10)

{
  double *pdVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  long lVar4;
  int iVar5;
  double *pdVar6;
  int iVar7;
  float *pfVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [12];
  bool bVar11;
  int iVar12;
  uint uVar13;
  ulong uVar14;
  double *pdVar15;
  undefined1 (*pauVar16) [12];
  float *pfVar17;
  float *pfVar18;
  ulong uVar19;
  long lVar20;
  double *pdVar21;
  float *pfVar22;
  float *pfVar23;
  uint uVar24;
  double *pdVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  uint uVar29;
  long lVar30;
  long lVar31;
  float *pfVar32;
  ulong uVar33;
  ulong uVar34;
  ulong uVar35;
  long lVar36;
  long lVar37;
  uint uVar38;
  long lVar39;
  uint uVar40;
  uint uVar41;
  undefined4 uVar42;
  undefined4 uVar43;
  float fVar44;
  float fVar45;
  float fVar46;
  float fVar47;
  double dVar48;
  undefined8 uVar49;
  undefined8 uVar50;
  double dVar51;
  undefined8 uVar52;
  float fVar53;
  float fVar54;
  float fVar55;
  float fVar56;
  float fVar57;
  float fVar58;
  float fVar59;
  double dVar60;
  double dVar61;
  double dVar62;
  uint local_4c4;
  double adStack_440 [136];
  
  pdVar15 = adStack_440;
  uVar35 = (ulong)(int)param_9;
  uVar34 = (ulong)param_8;
  if (0x88 < uVar35) {
    uVar14 = uVar35 << 3;
    if (0xfe0000000000000 < uVar35) {
      uVar14 = 0xffffffffffffffff;
    }
    pdVar15 = operator_new__(uVar14);
  }
  uVar38 = param_8;
  if ((int)param_8 < 0x1e) {
    uVar38 = 0x1e;
  }
  param_4 = param_4 >> 2;
  param_7 = param_7 >> 2;
  if ((int)param_9 < 1) {
    uVar35 = (ulong)(param_9 - 1);
  }
  else {
    uVar35 = (ulong)(param_9 - 1);
    lVar39 = 0;
    pfVar22 = param_3;
    pfVar18 = param_6;
    pfVar23 = param_6;
    do {
      lVar20 = 0;
      dVar48 = 0.0;
      if (0 < (int)param_8) {
        do {
          pfVar17 = pfVar22 + lVar20;
          lVar20 = lVar20 + 1;
          dVar48 = dVar48 + (double)*pfVar17 * (double)*pfVar17;
        } while ((int)lVar20 < (int)param_8);
      }
      pdVar15[lVar39] = dVar48;
      if (param_6 != (float *)0x0) {
        memset(pfVar23,0,(uVar35 + 1) * 4);
        *pfVar18 = 1.0;
      }
      lVar39 = lVar39 + 1;
      pfVar23 = pfVar23 + param_7;
      pfVar18 = pfVar18 + param_7 + 1;
      pfVar22 = pfVar22 + param_4;
    } while (lVar39 != uVar35 + 1);
  }
  local_4c4 = 0;
  pdVar1 = pdVar15 + 1;
  do {
    lVar39 = 1;
    lVar20 = 0;
    iVar12 = 1;
    iVar27 = (int)uVar35;
    bVar11 = false;
    pdVar25 = pdVar1;
    pfVar23 = param_3;
    pfVar18 = param_6;
    if (0 < iVar27) {
      do {
        if ((int)lVar39 < (int)param_9) {
          uVar13 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
          uVar41 = param_9;
          if (uVar13 < param_9) {
            uVar41 = uVar13;
          }
          uVar14 = (ulong)uVar41;
          uVar13 = ((param_9 - uVar41) - 4 >> 2) + 1;
          iVar28 = uVar13 * 4;
          pfVar22 = (float *)((long)param_6 + lVar20 + param_7 * 4);
          pdVar21 = pdVar25;
          pfVar17 = pfVar23;
          do {
            pfVar17 = pfVar17 + param_4;
            dVar48 = pdVar25[-1];
            dVar61 = *pdVar21;
            if ((int)param_8 < 1) {
              dVar60 = 0.0;
              dVar51 = 0.0;
            }
            else {
              dVar51 = 0.0;
              lVar30 = 0;
              do {
                pfVar32 = pfVar23 + lVar30;
                pfVar8 = pfVar17 + lVar30;
                lVar30 = lVar30 + 1;
                dVar51 = dVar51 + (double)*pfVar8 * (double)*pfVar32;
              } while ((int)lVar30 < (int)param_8);
              dVar60 = ABS(dVar51);
            }
            dVar62 = SQRT(dVar48 * dVar61);
            if (NAN(dVar62)) {
                    /* try { // try from 002b0238 to 003b023b has its CatchHandler @ 002b02d0 */
              dVar62 = sqrt(dVar48 * dVar61);
            }
            if (dVar62 * (double)param_2 < dVar60) {
              dVar51 = dVar51 + dVar51;
              dVar48 = dVar48 - dVar61;
              dVar60 = ABS(dVar51);
              dVar61 = ABS(dVar48);
              if (dVar61 < dVar60) {
                    /* try { // try from 002b02f4 to 003b02f7 has its CatchHandler @ 002b0164 */
                dVar62 = (dVar61 / dVar60) * (dVar61 / dVar60) + 1.0;
                    /* catch() { ... } // from try @ 002b0328 with catch @ 002b02f8
                       catch() { ... } // from try @ 002b0488 with catch @ 002b02f8
                       catch() { ... } // from try @ 002b0530 with catch @ 002b02f8
                       catch() { ... } // from try @ 002b0638 with catch @ 002b02f8 */
                dVar61 = SQRT(dVar62);
                if (NAN(dVar61)) {
                    /* try { // try from 002b038c to 003b0417 has its CatchHandler @ 002b0614 */
                  dVar61 = sqrt(dVar62);
                  dVar61 = dVar60 * dVar61;
                }
                else {
                  dVar61 = dVar60 * dVar61;
                }
LAB_002affa0:
                dVar60 = dVar61;
                if (0.0 <= dVar48) goto LAB_002affa8;
LAB_002b02a4:
                    /* try { // try from 002b02ac to 003b02cb has its CatchHandler @ 002b0164 */
                dVar60 = ((dVar61 - dVar48) * 0.5) / dVar61;
                dVar48 = SQRT(dVar60);
                if (NAN(dVar48)) {
                    /* try { // try from 002b0638 to 003b063b has its CatchHandler @ 002b02f8 */
                    /* catch() { ... } // from try @ 002b051c with catch @ 002b063c */
                  dVar48 = sqrt(dVar60);
                }
                fVar46 = (float)dVar48;
                    /* catch() { ... } // from try @ 002b0238 with catch @ 002b02d0 */
                fVar55 = (float)(dVar51 / ((double)fVar46 * dVar61 + (double)fVar46 * dVar61));
                if ((int)param_8 < 1) goto LAB_002b02e4;
LAB_002affe4:
                dVar61 = 0.0;
                lVar30 = 0;
                dVar48 = dVar61;
                do {
                  fVar53 = pfVar17[lVar30] * fVar46 + fVar55 * pfVar23[lVar30];
                  fVar54 = fVar55 * pfVar17[lVar30] + -fVar46 * pfVar23[lVar30];
                  pfVar23[lVar30] = fVar53;
                  dVar51 = (double)fVar54;
                  dVar60 = (double)fVar53;
                  pfVar17[lVar30] = fVar54;
                    /* try { // try from 002b0018 to 003b0127 has its CatchHandler @ 002afe2c */
                  lVar30 = lVar30 + 1;
                  dVar61 = dVar61 + dVar51 * dVar51;
                  dVar48 = dVar48 + dVar60 * dVar60;
                } while ((int)lVar30 < (int)param_8);
              }
              else {
                if (0.0 < dVar61) {
                  dVar62 = (dVar60 / dVar61) * (dVar60 / dVar61) + 1.0;
                  dVar60 = SQRT(dVar62);
                  if (NAN(dVar60)) {
                    dVar60 = sqrt(dVar62);
                  }
                  dVar61 = dVar61 * dVar60;
                  goto LAB_002affa0;
                }
                dVar60 = 0.0;
                dVar61 = 0.0;
                if (dVar48 < 0.0) goto LAB_002b02a4;
LAB_002affa8:
                dVar61 = (dVar48 + dVar60) / (dVar60 + dVar60);
                dVar48 = SQRT(dVar61);
                if (NAN(dVar48)) {
                  dVar48 = sqrt(dVar61);
                    /* catch() { ... } // from try @ 002b038c with catch @ 002b0614
                       catch() { ... } // from try @ 002b04c0 with catch @ 002b0614
                       catch() { ... } // from try @ 002b0524 with catch @ 002b0614 */
                }
                fVar55 = (float)dVar48;
                fVar46 = (float)(dVar51 / ((double)fVar55 * dVar60 + (double)fVar55 * dVar60));
                if (0 < (int)param_8) goto LAB_002affe4;
LAB_002b02e4:
                dVar61 = 0.0;
                dVar48 = dVar61;
              }
              pdVar25[-1] = dVar48;
              *pdVar21 = dVar61;
              if (param_6 != (float *)0x0) {
                lVar30 = (long)pfVar22 - (long)param_6;
                fVar53 = -fVar46;
                if ((lVar20 < (0x10 - (long)param_6) + (long)pfVar22 && lVar30 < lVar20 + 0x10) ||
                   (param_9 < 7)) {
                  lVar30 = 0;
                  do {
                    fVar47 = pfVar22[lVar30];
                    fVar54 = pfVar18[lVar30];
                    /* try { // try from 002b0328 to 003b0347 has its CatchHandler @ 002b02f8 */
                    pfVar18[lVar30] = fVar47 * fVar46 + fVar55 * fVar54;
                    pfVar22[lVar30] = fVar55 * fVar47 + fVar53 * fVar54;
                    lVar30 = lVar30 + 1;
                  } while ((int)lVar30 < (int)param_9);
                  bVar11 = true;
                  goto LAB_002af4f4;
                }
                uVar19 = uVar14;
                if (uVar41 != 0) {
                  fVar47 = *pfVar22;
                  fVar54 = *pfVar18;
                  *pfVar18 = fVar47 * fVar46 + fVar55 * fVar54;
                  *pfVar22 = fVar55 * fVar47 + fVar53 * fVar54;
                  if (uVar41 != 1) {
                    fVar47 = pfVar22[1];
                    fVar54 = pfVar18[1];
                    pfVar18[1] = fVar47 * fVar46 + fVar55 * fVar54;
                    pfVar22[1] = fVar55 * fVar47 + fVar53 * fVar54;
                    if (uVar41 == 3) {
                      fVar47 = pfVar22[2];
                      fVar54 = pfVar18[2];
                      pfVar18[2] = fVar47 * fVar46 + fVar55 * fVar54;
                      pfVar22[2] = fVar55 * fVar47 + fVar53 * fVar54;
                    }
                    else {
                      uVar19 = 2;
                    }
                  }
                }
                if (2 < iVar27 - uVar41) {
                  lVar37 = 0;
                  uVar24 = 0;
                  do {
                    uVar24 = uVar24 + 1;
                    puVar2 = (undefined8 *)((long)param_6 + lVar37 + uVar14 * 4 + lVar30);
                    fVar44 = (float)puVar2[1];
                    fVar45 = (float)((ulong)puVar2[1] >> 0x20);
                    fVar54 = (float)*puVar2;
                    fVar47 = (float)((ulong)*puVar2 >> 0x20);
                    lVar31 = lVar37 + uVar14 * 4 + lVar20;
                    lVar37 = lVar37 + 0x10;
                    puVar3 = (undefined8 *)((long)param_6 + lVar31);
                    /* catch() { ... } // from try @ 002afed4 with catch @ 002b012c
                       catch() { ... } // from try @ 002aff0c with catch @ 002b012c */
                    fVar56 = (float)*puVar3;
                    fVar57 = (float)((ulong)*puVar3 >> 0x20);
                    fVar58 = (float)puVar3[1];
                    fVar59 = (float)((ulong)puVar3[1] >> 0x20);
                    puVar3[1] = CONCAT44(fVar45 * fVar46 + fVar59 * fVar55,
                                         fVar44 * fVar46 + fVar58 * fVar55);
                    *puVar3 = CONCAT44(fVar47 * fVar46 + fVar57 * fVar55,
                                       fVar54 * fVar46 + fVar56 * fVar55);
                    puVar2[1] = CONCAT44(fVar55 * fVar45 + fVar59 * fVar53,
                                         fVar55 * fVar44 + fVar58 * fVar53);
                    *puVar2 = CONCAT44(fVar55 * fVar47 + fVar57 * fVar53,
                                       fVar55 * fVar54 + fVar56 * fVar53);
                  } while (uVar24 < uVar13);
                    /* try { // try from 002b0150 to 003b0153 has its CatchHandler @ 002afe2c */
                    /* catch() { ... } // from try @ 002aff04 with catch @ 002b0154 */
                  uVar19 = (ulong)(uint)((int)uVar19 + iVar28);
                  if (param_9 - uVar41 == iVar28) goto LAB_002b01fc;
                }
                uVar33 = -(uVar19 >> 0x1f) & 0xfffffffc00000000 | uVar19 << 2;
                    /* catch() { ... } // from try @ 002b01c0 with catch @ 002b0164
                       catch() { ... } // from try @ 002b02ac with catch @ 002b0164
                       catch() { ... } // from try @ 002b02f4 with catch @ 002b0164 */
                fVar47 = *(float *)((long)param_6 + lVar30 + uVar33);
                fVar54 = *(float *)((long)param_6 + uVar33 + lVar20);
                *(float *)((long)param_6 + uVar33 + lVar20) = fVar47 * fVar46 + fVar55 * fVar54;
                *(float *)((long)param_6 + lVar30 + uVar33) = fVar55 * fVar47 + fVar53 * fVar54;
                if ((int)uVar19 + 1 < (int)param_9) {
                  lVar37 = uVar33 + 4 + lVar30;
                  lVar31 = lVar20 + uVar33 + 4;
                  fVar47 = *(float *)((long)param_6 + lVar37);
                  fVar54 = *(float *)((long)param_6 + lVar31);
                    /* try { // try from 002b01c0 to 003b01c3 has its CatchHandler @ 002b0164 */
                  *(float *)((long)param_6 + lVar31) = fVar47 * fVar46 + fVar55 * fVar54;
                  *(float *)((long)param_6 + lVar37) = fVar55 * fVar47 + fVar53 * fVar54;
                  if ((int)uVar19 + 2 < (int)param_9) {
                    lVar30 = uVar33 + 8 + lVar30;
                    lVar37 = lVar20 + uVar33 + 8;
                    fVar47 = *(float *)((long)param_6 + lVar30);
                    fVar54 = *(float *)((long)param_6 + lVar37);
                    *(float *)((long)param_6 + lVar37) = fVar47 * fVar46 + fVar55 * fVar54;
                    *(float *)((long)param_6 + lVar30) = fVar55 * fVar47 + fVar53 * fVar54;
                  }
                }
              }
LAB_002b01fc:
              bVar11 = true;
            }
LAB_002af4f4:
            pdVar21 = pdVar21 + 1;
            pfVar22 = pfVar22 + param_7;
          } while (pdVar21 != pdVar15 + lVar39 + 1 + (ulong)(uint)(iVar27 - iVar12));
        }
        lVar20 = lVar20 + param_7 * 4;
        pfVar23 = pfVar23 + param_4;
        lVar39 = lVar39 + 1;
        pfVar18 = pfVar18 + param_7;
        pdVar25 = pdVar25 + 1;
        iVar12 = (int)lVar39;
      } while (iVar12 + -1 < iVar27);
    }
  } while ((bVar11) && (local_4c4 = local_4c4 + 1, local_4c4 != uVar38));
  if (0 < (int)param_9) {
    lVar39 = 0;
    pfVar23 = param_3;
    do {
      lVar20 = 0;
      dVar48 = 0.0;
      dVar61 = 0.0;
      if (0 < (int)param_8) {
        do {
          pfVar18 = pfVar23 + lVar20;
          lVar20 = lVar20 + 1;
          dVar48 = dVar61 + (double)*pfVar18 * (double)*pfVar18;
          dVar61 = dVar48;
        } while ((int)lVar20 < (int)param_8);
      }
      dVar61 = SQRT(dVar48);
      if (NAN(dVar61)) {
        dVar61 = sqrt(dVar48);
      }
      pdVar15[lVar39] = dVar61;
      lVar39 = lVar39 + 1;
      pfVar23 = pfVar23 + param_4;
    } while (lVar39 != uVar35 + 1);
  }
  lVar30 = 0;
  lVar39 = 1;
  lVar20 = 0;
  pfVar23 = param_6;
  pfVar18 = param_3;
  pdVar25 = pdVar1;
  uVar38 = 0;
  if (0 < iVar27) {
    do {
      uVar13 = uVar38 + 1;
      if ((int)uVar13 < (int)param_9) {
        dVar48 = pdVar25[-1];
        uVar42 = SUB84(dVar48,0);
        uVar43 = (undefined4)((ulong)dVar48 >> 0x20);
        pdVar21 = pdVar25;
        lVar37 = lVar39;
        uVar41 = uVar13;
        uVar24 = uVar38;
        do {
          dVar61 = *pdVar21;
          uVar40 = uVar41;
          if (dVar61 == (double)CONCAT44(uVar43,uVar42) || dVar61 < (double)CONCAT44(uVar43,uVar42))
          {
            uVar40 = uVar24;
          }
          uVar41 = uVar41 + 1;
          lVar31 = lVar37;
          if (dVar61 == (double)CONCAT44(uVar43,uVar42) || dVar61 < (double)CONCAT44(uVar43,uVar42))
          {
            lVar31 = (long)(int)uVar24;
          }
          lVar37 = lVar37 + 1;
          pdVar6 = pdVar21;
          if (dVar61 == (double)CONCAT44(uVar43,uVar42) || dVar61 < (double)CONCAT44(uVar43,uVar42))
          {
            pdVar6 = pdVar15 + (int)uVar24;
          }
          pdVar21 = pdVar21 + 1;
          if (dVar61 == (double)CONCAT44(uVar43,uVar42) || dVar61 < (double)CONCAT44(uVar43,uVar42))
          {
            dVar61 = (double)CONCAT44(uVar43,uVar42);
          }
          uVar42 = SUB84(dVar61,0);
          uVar43 = (undefined4)((ulong)dVar61 >> 0x20);
          uVar24 = uVar40;
        } while (uVar41 != param_9);
        if (uVar38 != uVar40) {
          pdVar25[-1] = dVar61;
          *pdVar6 = dVar48;
          if (param_6 != (float *)0x0) {
            if (0 < (int)param_8) {
              lVar37 = lVar31 * param_4;
              if (((long)pfVar18 - (long)param_3 < lVar37 * 4 + 0x10 &&
                   lVar37 * 4 < (0x10 - (long)param_3) + (long)pfVar18) || (param_8 < 9)) {
                lVar36 = 0;
                do {
                  fVar55 = pfVar18[lVar36];
                  pfVar18[lVar36] = param_3[lVar37 + lVar36];
                  param_3[lVar37 + lVar36] = fVar55;
                  lVar36 = lVar36 + 1;
                } while ((int)lVar36 < (int)param_8);
              }
              else {
                uVar38 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
                uVar35 = (ulong)uVar38;
                if (param_8 < uVar38) {
                  uVar35 = uVar34;
                }
                iVar12 = (int)uVar35;
                uVar14 = uVar35;
                if (iVar12 != 0) {
                  fVar55 = *pfVar18;
                  *pfVar18 = param_3[lVar37];
                  param_3[lVar37] = fVar55;
                  if (iVar12 != 1) {
                    fVar55 = pfVar18[1];
                    pfVar18[1] = param_3[lVar37 + 1];
                    param_3[lVar37 + 1] = fVar55;
                    if (iVar12 == 3) {
                      fVar55 = pfVar18[2];
                      pfVar18[2] = param_3[lVar37 + 2];
                      param_3[lVar37 + 2] = fVar55;
                    }
                    else {
                      uVar14 = 2;
                    }
                  }
                }
                lVar36 = 0;
                uVar38 = ((param_8 - iVar12) - 4 >> 2) + 1;
                uVar41 = 0;
                iVar28 = uVar38 * 4;
                do {
                  puVar2 = (undefined8 *)((long)param_3 + lVar36 + (lVar37 + uVar35) * 4);
                  puVar3 = (undefined8 *)((long)param_3 + lVar36 + (uVar35 + lVar30) * 4);
                  uVar41 = uVar41 + 1;
                  lVar36 = lVar36 + 0x10;
                  uVar52 = *puVar2;
                  uVar50 = puVar3[1];
                  uVar49 = *puVar3;
                  puVar3[1] = puVar2[1];
                  *puVar3 = uVar52;
                  puVar2[1] = uVar50;
                  *puVar2 = uVar49;
                } while (uVar41 < uVar38);
                iVar26 = iVar28 + (int)uVar14;
                if (iVar28 != param_8 - iVar12) {
                  iVar12 = iVar26 + 1;
                  lVar36 = iVar26 + lVar37;
                  lVar4 = lVar30 + iVar26;
                  fVar55 = param_3[lVar4];
                  param_3[lVar4] = param_3[lVar36];
                  param_3[lVar36] = fVar55;
                  if (iVar12 < (int)param_8) {
                    iVar26 = iVar26 + 2;
                    lVar36 = iVar12 + lVar37;
                    /* try { // try from 002af7a0 to 003af7a3 has its CatchHandler @ 002adc98 */
                    lVar4 = lVar30 + iVar12;
                    fVar55 = param_3[lVar4];
                    param_3[lVar4] = param_3[lVar36];
                    param_3[lVar36] = fVar55;
                    if (iVar26 < (int)param_8) {
                      lVar37 = iVar26 + lVar37;
                      lVar36 = iVar26 + lVar30;
                      fVar55 = param_3[lVar36];
                      param_3[lVar36] = param_3[lVar37];
                      param_3[lVar37] = fVar55;
                    }
                  }
                }
              }
            }
            lVar31 = lVar31 * param_7;
            if (((long)pfVar23 - (long)param_6 < lVar31 * 4 + 0x10 &&
                 lVar31 * 4 < (0x10 - (long)param_6) + (long)pfVar23) || (param_9 < 9)) {
              lVar37 = 0;
              do {
                fVar55 = pfVar23[lVar37];
                pfVar23[lVar37] = param_6[lVar31 + lVar37];
                param_6[lVar31 + lVar37] = fVar55;
                lVar37 = lVar37 + 1;
              } while ((int)lVar37 < (int)param_9);
            }
            else {
              uVar38 = -((uint)((ulong)pfVar23 >> 2) & 3) & 3;
              if (param_9 < uVar38) {
                uVar38 = param_9;
              }
              uVar41 = uVar38;
              if (uVar38 != 0) {
                fVar55 = *pfVar23;
                *pfVar23 = param_6[lVar31];
                param_6[lVar31] = fVar55;
                if (uVar38 != 1) {
                  fVar55 = pfVar23[1];
                  pfVar23[1] = param_6[lVar31 + 1];
                  param_6[lVar31 + 1] = fVar55;
                  if (uVar38 == 3) {
                    fVar55 = pfVar23[2];
                    pfVar23[2] = param_6[lVar31 + 2];
                    param_6[lVar31 + 2] = fVar55;
                  }
                  else {
                    uVar41 = 2;
                  }
                }
              }
              lVar37 = 0;
              uVar24 = ((param_9 - uVar38) - 4 >> 2) + 1;
              uVar40 = 0;
              iVar12 = uVar24 * 4;
              do {
                puVar2 = (undefined8 *)((long)param_6 + lVar37 + (lVar31 + (ulong)uVar38) * 4);
                puVar3 = (undefined8 *)((long)param_6 + lVar37 + (lVar20 + (ulong)uVar38) * 4);
                uVar40 = uVar40 + 1;
                lVar37 = lVar37 + 0x10;
                uVar52 = *puVar2;
                uVar50 = puVar3[1];
                uVar49 = *puVar3;
                puVar3[1] = puVar2[1];
                *puVar3 = uVar52;
                puVar2[1] = uVar50;
                *puVar2 = uVar49;
              } while (uVar40 < uVar24);
              iVar28 = iVar12 + uVar41;
              if (iVar12 != param_9 - uVar38) {
                iVar12 = iVar28 + 1;
                lVar37 = iVar28 + lVar31;
                lVar36 = lVar20 + iVar28;
                fVar55 = param_6[lVar36];
                param_6[lVar36] = param_6[lVar37];
                param_6[lVar37] = fVar55;
                if (iVar12 < (int)param_9) {
                  iVar28 = iVar28 + 2;
                  lVar37 = iVar12 + lVar31;
                  lVar36 = lVar20 + iVar12;
                  fVar55 = param_6[lVar36];
                  param_6[lVar36] = param_6[lVar37];
                  param_6[lVar37] = fVar55;
                  if (iVar28 < (int)param_9) {
                    lVar31 = iVar28 + lVar31;
                    lVar37 = lVar20 + iVar28;
                    fVar55 = param_6[lVar37];
                    param_6[lVar37] = param_6[lVar31];
                    param_6[lVar31] = fVar55;
                  }
                }
              }
            }
          }
        }
      }
      pfVar23 = pfVar23 + param_7;
      lVar20 = lVar20 + param_7;
      pfVar18 = pfVar18 + param_4;
      pdVar25 = pdVar25 + 1;
      lVar30 = lVar30 + param_4;
      lVar39 = lVar39 + 1;
      uVar38 = uVar13;
    } while ((int)uVar13 < iVar27);
  }
  if (0 < (int)param_9) {
    uVar38 = -((uint)((ulong)param_5 >> 2) & 3) & 3;
    uVar13 = param_9;
    if (uVar38 < param_9) {
      uVar13 = uVar38;
    }
    uVar38 = param_9;
    if (((int)param_9 < 5) || (uVar38 = uVar13, uVar13 != 0)) {
      uVar13 = uVar38;
      *param_5 = (float)*pdVar15;
      uVar38 = uVar13;
      if ((uVar13 != 1) && (param_5[1] = (float)*pdVar1, uVar13 != 2)) {
        param_5[2] = (float)pdVar15[2];
        if (uVar13 == 4) {
          param_5[3] = (float)pdVar15[3];
        }
        else {
                    /* try { // try from 002b0524 to 003b0527 has its CatchHandler @ 002b0614 */
          uVar38 = 3;
        }
      }
      if (uVar13 == param_9) goto LAB_002afae4;
    }
    uVar41 = ((param_9 - uVar13) - 4 >> 2) + 1;
    iVar12 = uVar41 * 4;
    if (2 < iVar27 - uVar13) {
      uVar24 = 0;
      pauVar16 = (undefined1 (*) [12])(pdVar15 + uVar13);
      pfVar23 = param_5 + uVar13;
      do {
        uVar24 = uVar24 + 1;
        auVar10 = *pauVar16;
        auVar9._12_4_ = (int)((ulong)*(double *)((long)*pauVar16 + 8) >> 0x20);
        auVar9._0_12_ = auVar10;
        *(ulong *)(pfVar23 + 2) =
             CONCAT44((float)*(double *)pauVar16[2],(float)*(double *)(pauVar16[1] + 4));
        *(ulong *)pfVar23 = CONCAT44((float)auVar9._8_8_,(float)auVar10._0_8_);
        pauVar16 = (undefined1 (*) [12])((long)pauVar16[2] + 8);
        pfVar23 = pfVar23 + 4;
      } while (uVar24 < uVar41);
      uVar38 = uVar38 + iVar12;
      if (iVar12 == param_9 - uVar13) goto LAB_002afae4;
    }
    iVar12 = uVar38 + 1;
    param_5[(int)uVar38] = (float)pdVar15[(int)uVar38];
    if (iVar12 < (int)param_9) {
      iVar27 = uVar38 + 2;
      param_5[iVar12] = (float)pdVar15[iVar12];
      if (iVar27 < (int)param_9) {
        param_5[iVar27] = (float)pdVar15[iVar27];
      }
    }
  }
LAB_002afae4:
  fVar55 = DAT_002b0684;
  if ((param_6 != (float *)0x0) && (0 < param_10)) {
    lVar39 = 0;
    uVar38 = param_8;
    if ((int)param_8 < 1) {
      uVar38 = 1;
    }
    lVar20 = 0;
    uVar35 = 0x12345678;
    pfVar23 = param_3;
    do {
      iVar12 = (int)lVar20;
      dVar48 = 0.0;
      if (iVar12 < (int)param_9) {
        dVar48 = pdVar15[lVar20];
      }
      if (dVar48 <= param_1) {
        pfVar18 = param_3 + lVar39;
        iVar27 = 100;
        uVar13 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
LAB_002afb6c:
        if (0 < (int)param_8) {
          lVar30 = 0;
          do {
            uVar35 = (uVar35 >> 0x20) + (uVar35 & 0xffffffff) * 0xf83f630a;
            fVar46 = 1.0 / (float)(int)param_8;
            if (((uint)uVar35 >> 8 & 1) == 0) {
              fVar46 = -(1.0 / (float)(int)param_8);
            }
            pfVar23[lVar30] = fVar46;
            lVar30 = lVar30 + 1;
          } while ((int)lVar30 < (int)param_8);
        }
        iVar28 = 2;
        do {
          if (0 < iVar12) {
            iVar26 = 0;
            pfVar22 = param_3;
            do {
              lVar30 = 0;
              fVar46 = 0.0;
              if (0 < (int)param_8) {
                do {
                  pfVar17 = pfVar23 + lVar30;
                  pfVar32 = pfVar22 + lVar30;
                  lVar30 = lVar30 + 1;
                  fVar46 = fVar46 + *pfVar17 * *pfVar32;
                } while ((int)lVar30 < (int)param_8);
                fVar53 = 0.0;
                lVar30 = 0;
                do {
                  fVar54 = pfVar23[lVar30] - fVar46 * pfVar22[lVar30];
                  pfVar23[lVar30] = fVar54;
                  lVar30 = lVar30 + 1;
                  fVar53 = fVar53 + ABS(fVar54);
                } while ((int)lVar30 < (int)param_8);
                uVar41 = uVar13;
                if (fVar53 <= param_2 * fVar55) {
                  if (uVar38 < uVar13) {
                    uVar41 = uVar38;
                  }
                    /* try { // try from 002b0488 to 003b048b has its CatchHandler @ 002b02f8 */
                  fVar53 = 0.0;
                  fVar46 = 0.0;
                  if (4 < (int)uVar38) goto LAB_002b0494;
LAB_002afc58:
                  *pfVar18 = *pfVar18 * fVar53;
                  uVar41 = uVar38;
                  fVar46 = fVar53;
joined_r0x002afc6c:
                  uVar24 = uVar41;
                    /* catch() { ... } // from try @ 002adef8 with catch @ 002afc80 */
                  if ((uVar41 != 1) &&
                     (param_3[lVar39 + 1] = param_3[lVar39 + 1] * fVar46, uVar41 != 2)) {
                    param_3[lVar39 + 2] = param_3[lVar39 + 2] * fVar46;
                    if (uVar41 == 4) {
                      param_3[lVar39 + 3] = param_3[lVar39 + 3] * fVar46;
                    }
                    else {
                      uVar24 = 3;
                    }
                  }
                  if (uVar41 == uVar38) goto LAB_002afd68;
                }
                else {
                  if (uVar38 < uVar13) {
                    uVar41 = uVar38;
                  }
                  fVar53 = 1.0 / fVar53;
                  fVar46 = fVar53;
                  if ((int)uVar38 < 5) goto LAB_002afc58;
LAB_002b0494:
                  uVar24 = 0;
                  if (uVar41 != 0) {
                    *pfVar18 = *pfVar18 * fVar46;
                    goto joined_r0x002afc6c;
                  }
                }
                    /* try { // try from 002afcb0 to 003afcb3 has its CatchHandler @ 002adc98 */
                    /* catch() { ... } // from try @ 002add50 with catch @ 002afcb4
                       catch() { ... } // from try @ 002ade9c with catch @ 002afcb4
                       catch() { ... } // from try @ 002adf00 with catch @ 002afcb4 */
                iVar5 = param_8 - 1;
                if ((int)param_8 < 1) {
                  iVar5 = 0;
                }
                    /* catch() { ... } // from try @ 002afd0c with catch @ 002afcbc
                       catch() { ... } // from try @ 002afde0 with catch @ 002afcbc
                       catch() { ... } // from try @ 002afe28 with catch @ 002afcbc */
                uVar40 = ((uVar38 - uVar41) - 4 >> 2) + 1;
                iVar7 = uVar40 * 4;
                if (2 < iVar5 - uVar41) {
                  uVar29 = 0;
                  pfVar17 = param_3 + lVar39 + (ulong)uVar41;
                  pfVar32 = param_3 + lVar39 + (ulong)uVar41;
                  do {
                    uVar49 = *(undefined8 *)pfVar32;
                    uVar29 = uVar29 + 1;
                    *(ulong *)(pfVar17 + 2) =
                         CONCAT44(fVar46 * (float)((ulong)*(undefined8 *)(pfVar32 + 2) >> 0x20),
                                  fVar46 * (float)*(undefined8 *)(pfVar32 + 2));
                    *(ulong *)pfVar17 =
                         CONCAT44(fVar46 * (float)((ulong)uVar49 >> 0x20),fVar46 * (float)uVar49);
                    pfVar17 = pfVar17 + 4;
                    pfVar32 = pfVar32 + 4;
                  } while (uVar29 < uVar40);
                    /* try { // try from 002afd0c to 003afd0f has its CatchHandler @ 002afcbc */
                  uVar24 = uVar24 + iVar7;
                  if (iVar7 == uVar38 - uVar41) goto LAB_002afd68;
                }
                param_3[lVar39 + (int)uVar24] = param_3[lVar39 + (int)uVar24] * fVar46;
                if ((int)(uVar24 + 1) < (int)param_8) {
                  lVar30 = lVar39 + (int)(uVar24 + 1);
                  param_3[lVar30] = param_3[lVar30] * fVar46;
                  if ((int)(uVar24 + 2) < (int)param_8) {
                    lVar30 = lVar39 + (int)(uVar24 + 2);
                    param_3[lVar30] = param_3[lVar30] * fVar46;
                  }
                }
              }
LAB_002afd68:
              iVar26 = iVar26 + 1;
                    /* try { // try from 002afd6c to 003afd6f has its CatchHandler @ 002afe04 */
              pfVar22 = pfVar22 + param_4;
            } while (iVar26 != iVar12);
          }
          if (iVar28 == 1) goto code_r0x002afd80;
                    /* try { // try from 002b04c0 to 003b04c3 has its CatchHandler @ 002b0614 */
          iVar28 = 1;
        } while( true );
      }
LAB_002afdc4:
      if (dVar48 <= param_1) {
        fVar46 = 0.0;
      }
      else {
        fVar46 = (float)(1.0 / dVar48);
      }
      if (0 < (int)param_8) {
                    /* try { // try from 002afde0 to 003afdff has its CatchHandler @ 002afcbc */
        uVar13 = -((uint)((ulong)pfVar23 >> 2) & 3) & 3;
        uVar14 = (ulong)uVar13;
        if (param_8 < uVar13) {
          uVar14 = uVar34;
        }
        if (param_8 < 5) {
          uVar14 = uVar34;
        }
        uVar13 = (uint)uVar14;
        uVar19 = uVar14;
        if (uVar13 != 0) {
                    /* catch() { ... } // from try @ 002afd6c with catch @ 002afe04 */
          *pfVar23 = *pfVar23 * fVar46;
          if ((uVar13 != 1) && (pfVar23[1] = pfVar23[1] * fVar46, uVar13 != 2)) {
                    /* try { // try from 002afe28 to 003afe2b has its CatchHandler @ 002afcbc */
                    /* catch() { ... } // from try @ 002afe74 with catch @ 002afe2c
                       catch() { ... } // from try @ 002b0018 with catch @ 002afe2c
                       catch() { ... } // from try @ 002b0150 with catch @ 002afe2c */
            pfVar23[2] = pfVar23[2] * fVar46;
            if (uVar13 == 4) {
              pfVar23[3] = pfVar23[3] * fVar46;
            }
            else {
              uVar19 = 3;
            }
          }
          if (param_8 == uVar13) goto LAB_002afefc;
        }
        iVar12 = (int)uVar19;
        uVar41 = ((param_8 - uVar13) - 4 >> 2) + 1;
        iVar27 = uVar41 * 4;
        if (2 < (param_8 - 1) - uVar13) {
                    /* try { // try from 002afe74 to 003afe93 has its CatchHandler @ 002afe2c */
          uVar24 = 0;
          pfVar18 = param_3 + lVar39 + uVar14;
          pfVar22 = param_3 + lVar39 + uVar14;
          do {
            uVar49 = *(undefined8 *)pfVar22;
            uVar24 = uVar24 + 1;
            *(ulong *)(pfVar18 + 2) =
                 CONCAT44(fVar46 * (float)((ulong)*(undefined8 *)(pfVar22 + 2) >> 0x20),
                          fVar46 * (float)*(undefined8 *)(pfVar22 + 2));
            *(ulong *)pfVar18 =
                 CONCAT44(fVar46 * (float)((ulong)uVar49 >> 0x20),fVar46 * (float)uVar49);
            pfVar18 = pfVar18 + 4;
            pfVar22 = pfVar22 + 4;
          } while (uVar24 < uVar41);
          iVar12 = iVar12 + iVar27;
          if (param_8 - uVar13 == iVar27) goto LAB_002afefc;
        }
        param_3[lVar39 + iVar12] = param_3[lVar39 + iVar12] * fVar46;
        if (iVar12 + 1 < (int)param_8) {
          lVar30 = lVar39 + (iVar12 + 1);
                    /* try { // try from 002afed4 to 003afed7 has its CatchHandler @ 002b012c */
          param_3[lVar30] = param_3[lVar30] * fVar46;
          if (iVar12 + 2 < (int)param_8) {
            lVar30 = lVar39 + (iVar12 + 2);
            param_3[lVar30] = param_3[lVar30] * fVar46;
          }
        }
      }
LAB_002afefc:
      lVar20 = lVar20 + 1;
                    /* try { // try from 002aff04 to 003aff07 has its CatchHandler @ 002b0154 */
      pfVar23 = pfVar23 + param_4;
                    /* try { // try from 002aff0c to 003affa7 has its CatchHandler @ 002b012c */
      lVar39 = lVar39 + param_4;
    } while (lVar20 != (ulong)(param_10 - 1) + 1);
  }
  if ((pdVar15 != adStack_440) && (pdVar15 != (double *)0x0)) {
    operator_delete__(pdVar15);
  }
  return;
code_r0x002afd80:
  lVar30 = 0;
  dVar61 = 0.0;
  dVar48 = 0.0;
  if (0 < (int)param_8) {
    do {
      pfVar22 = pfVar23 + lVar30;
      lVar30 = lVar30 + 1;
      dVar61 = dVar48 + (double)*pfVar22 * (double)*pfVar22;
      dVar48 = dVar61;
    } while ((int)lVar30 < (int)param_8);
  }
  dVar48 = SQRT(dVar61);
  if (NAN(dVar48)) {
    dVar48 = sqrt(dVar61);
                    /* try { // try from 002b051c to 003b051f has its CatchHandler @ 002b063c */
  }
  iVar27 = iVar27 + -1;
  if ((iVar27 == 0) || (param_1 < dVar48)) goto LAB_002afdc4;
  goto LAB_002afb6c;
}


==================================================================

### FUNC 002b0688 (4308 bytes) name=FUN_002b0688

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_002b0688(double param_1,double param_2,double *param_3,ulong param_4,undefined8 *param_5,
                 double *param_6,ulong param_7,uint param_8,uint param_9,int param_10)

{
  uint uVar1;
  double *pdVar2;
  double *pdVar3;
  int iVar4;
  bool bVar5;
  uint uVar6;
  uint uVar7;
  ulong uVar8;
  undefined8 *puVar9;
  double *pdVar10;
  undefined8 *puVar11;
  double *pdVar12;
  double *pdVar13;
  long lVar14;
  double *pdVar15;
  long lVar16;
  uint uVar17;
  int iVar18;
  double *pdVar19;
  int iVar20;
  long lVar21;
  undefined8 *puVar22;
  int iVar23;
  long lVar24;
  uint uVar25;
  double *pdVar26;
  int iVar27;
  int iVar28;
  ulong uVar29;
  double *pdVar30;
  long lVar31;
  long lVar32;
  uint uVar33;
  long lVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  double dVar37;
  undefined8 uVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  uint local_4dc;
  undefined8 auStack_440 [136];
  
  puVar9 = auStack_440;
  uVar29 = (ulong)(int)param_9;
  if (0x88 < uVar29) {
    uVar8 = uVar29 << 3;
    if (0xfe0000000000000 < uVar29) {
      uVar8 = 0xffffffffffffffff;
    }
    puVar9 = operator_new__(uVar8);
  }
  uVar7 = param_8;
  if ((int)param_8 < 0x1e) {
    uVar7 = 0x1e;
  }
  param_4 = param_4 >> 3;
  param_7 = param_7 >> 3;
  if ((int)param_9 < 1) {
    lVar31 = param_4 << 3;
  }
  else {
    lVar32 = (ulong)(param_9 - 1) + 1;
    lVar31 = param_4 * 8;
    lVar34 = 0;
    pdVar19 = param_6;
    pdVar15 = param_3;
    pdVar13 = param_6;
    do {
      lVar14 = 0;
      dVar37 = 0.0;
      if (0 < (int)param_8) {
        do {
          pdVar12 = pdVar15 + lVar14;
          lVar14 = lVar14 + 1;
          dVar37 = dVar37 + *pdVar12 * *pdVar12;
        } while ((int)lVar14 < (int)param_8);
      }
      puVar9[lVar34] = dVar37;
      if (param_6 != (double *)0x0) {
        memset(pdVar19,0,lVar32 * 8);
        *pdVar13 = 1.0;
      }
      lVar34 = lVar34 + 1;
      pdVar19 = pdVar19 + param_7;
      pdVar13 = pdVar13 + param_7 + 1;
      pdVar15 = pdVar15 + param_4;
    } while (lVar34 != lVar32);
  }
  uVar1 = param_9 - 1;
  local_4dc = 0;
  lVar32 = param_7 * 8;
  pdVar19 = (double *)(puVar9 + 1);
  do {
    lVar34 = 1;
    iVar20 = 1;
    lVar14 = 0;
    bVar5 = false;
    pdVar13 = pdVar19;
    pdVar15 = param_3;
    pdVar12 = param_6;
    if (0 < (int)uVar1) {
      do {
        if ((int)lVar34 < (int)param_9) {
          uVar25 = (uint)((ulong)pdVar12 >> 3) & 1;
          uVar17 = param_9;
          if (uVar25 < param_9) {
            uVar17 = uVar25;
          }
          iVar28 = param_9 - uVar17;
          uVar25 = (iVar28 - 2U >> 1) + 1;
          lVar21 = lVar14 + lVar32;
          iVar18 = uVar25 * 2;
          pdVar10 = (double *)((long)param_6 + lVar21);
          pdVar26 = pdVar13;
          pdVar30 = pdVar15;
          do {
            pdVar30 = (double *)((long)pdVar30 + lVar31);
            dVar37 = pdVar13[-1];
            dVar42 = *pdVar26;
            if ((int)param_8 < 1) {
              dVar43 = 0.0;
              dVar40 = 0.0;
            }
            else {
              dVar40 = 0.0;
              lVar16 = 0;
              do {
                pdVar2 = pdVar15 + lVar16;
                pdVar3 = pdVar30 + lVar16;
                lVar16 = lVar16 + 1;
                dVar40 = dVar40 + *pdVar3 * *pdVar2;
              } while ((int)lVar16 < (int)param_8);
              dVar43 = ABS(dVar40);
            }
            dVar44 = SQRT(dVar37 * dVar42);
            if (NAN(dVar44)) {
              dVar44 = sqrt(dVar37 * dVar42);
            }
            if (dVar44 * param_2 < dVar43) {
              dVar40 = dVar40 + dVar40;
              dVar37 = dVar37 - dVar42;
              dVar43 = ABS(dVar40);
              dVar42 = ABS(dVar37);
              if (dVar42 < dVar43) {
                dVar44 = (dVar42 / dVar43) * (dVar42 / dVar43) + 1.0;
                dVar42 = SQRT(dVar44);
                if (NAN(dVar42)) {
                    /* catch() { ... } // from try @ 002b119c with catch @ 002b142c */
                    /* try { // try from 002b143c to 003b145b has its CatchHandler @ 002b10d8 */
                    /* catch() { ... } // from try @ 002b134c with catch @ 002b1440 */
                  dVar42 = sqrt(dVar44);
                    /* catch() { ... } // from try @ 002b14a4 with catch @ 002b145c
                       catch() { ... } // from try @ 002b16e8 with catch @ 002b145c
                       catch() { ... } // from try @ 002b1910 with catch @ 002b145c
                       catch() { ... } // from try @ 002b1954 with catch @ 002b145c */
                  dVar42 = dVar43 * dVar42;
                }
                else {
                  dVar42 = dVar43 * dVar42;
                }
LAB_002b1130:
                dVar43 = dVar42;
                if (0.0 <= dVar37) goto LAB_002b1138;
LAB_002b1350:
                dVar43 = ((dVar42 - dVar37) * 0.5) / dVar42;
                dVar37 = SQRT(dVar43);
                if (NAN(dVar37)) {
                  dVar37 = sqrt(dVar43);
                    /* try { // try from 002b16e8 to 003b16ff has its CatchHandler @ 002b145c */
                }
                dVar42 = dVar40 / (dVar37 * dVar42 + dVar37 * dVar42);
                if ((int)param_8 < 1) goto LAB_002b1384;
LAB_002b1168:
                dVar40 = 0.0;
                lVar16 = 0;
                dVar43 = dVar40;
                do {
                  dVar39 = pdVar30[lVar16] * dVar37 + dVar42 * pdVar15[lVar16];
                  dVar44 = dVar42 * pdVar30[lVar16] + -dVar37 * pdVar15[lVar16];
                  pdVar15[lVar16] = dVar39;
                  pdVar30[lVar16] = dVar44;
                  lVar16 = lVar16 + 1;
                    /* try { // try from 002b119c to 003b119f has its CatchHandler @ 002b142c */
                  dVar43 = dVar43 + dVar39 * dVar39;
                  dVar40 = dVar40 + dVar44 * dVar44;
                    /* try { // try from 002b11a4 to 003b11bf has its CatchHandler @ 002b10d8 */
                } while ((int)lVar16 < (int)param_8);
              }
              else {
                if (0.0 < dVar42) {
                  dVar44 = (dVar43 / dVar42) * (dVar43 / dVar42) + 1.0;
                  dVar43 = SQRT(dVar44);
                  if (NAN(dVar43)) {
                    /* try { // try from 002b15a8 to 003b15bf has its CatchHandler @ 002b1988 */
                    dVar43 = sqrt(dVar44);
                    /* try { // try from 002b15d0 to 003b15d3 has its CatchHandler @ 002b19a8 */
                  }
                  dVar42 = dVar42 * dVar43;
                  goto LAB_002b1130;
                }
                dVar43 = 0.0;
                dVar42 = 0.0;
                    /* try { // try from 002b134c to 003b142b has its CatchHandler @ 002b1440 */
                if (dVar37 < 0.0) goto LAB_002b1350;
LAB_002b1138:
                dVar37 = (dVar37 + dVar43) / (dVar43 + dVar43);
                dVar42 = SQRT(dVar37);
                if (NAN(dVar42)) {
                  dVar42 = sqrt(dVar37);
                    /* try { // try from 002b1670 to 003b16af has its CatchHandler @ 002b1988 */
                }
                    /* try { // try from 002b1150 to 003b1153 has its CatchHandler @ 002b10d8 */
                dVar37 = dVar40 / (dVar42 * dVar43 + dVar42 * dVar43);
                if (0 < (int)param_8) goto LAB_002b1168;
LAB_002b1384:
                dVar40 = 0.0;
                dVar43 = dVar40;
              }
              pdVar13[-1] = dVar43;
              *pdVar26 = dVar40;
              if (param_6 != (double *)0x0) {
                dVar43 = -dVar37;
                if ((lVar14 < lVar21 + 0x10 && lVar21 < lVar14 + 0x10) || (param_9 < 6)) {
                  lVar16 = 0;
                  do {
                    dVar44 = pdVar10[lVar16];
                    dVar40 = pdVar12[lVar16];
                    pdVar12[lVar16] = dVar44 * dVar37 + dVar42 * dVar40;
                    pdVar10[lVar16] = dVar42 * dVar44 + dVar43 * dVar40;
                    lVar16 = lVar16 + 1;
                  } while ((int)lVar16 < (int)param_9);
                  bVar5 = true;
                  goto LAB_002b0940;
                }
                if (uVar17 != 0) {
                  dVar44 = *pdVar10;
                  dVar40 = *pdVar12;
                  *pdVar12 = dVar44 * dVar37 + dVar42 * dVar40;
                  *pdVar10 = dVar42 * dVar44 + dVar43 * dVar40;
                }
                uVar33 = (uint)(uVar17 != 0);
                if (iVar28 != 1) {
                  lVar16 = 0;
                  uVar33 = 0;
                  do {
                    pdVar2 = (double *)((long)param_6 + lVar16 + lVar21 + (ulong)uVar17 * 8);
                    pdVar3 = (double *)((long)param_6 + lVar16 + (ulong)uVar17 * 8 + lVar14);
                    uVar33 = uVar33 + 1;
                    lVar16 = lVar16 + 0x10;
                    dVar44 = pdVar2[1];
                    dVar40 = *pdVar2;
                    dVar41 = pdVar3[1];
                    dVar39 = *pdVar3;
                    pdVar3[1] = dVar44 * dVar37 + dVar41 * dVar42;
                    *pdVar3 = dVar40 * dVar37 + dVar39 * dVar42;
                    pdVar2[1] = dVar42 * dVar44 + dVar41 * dVar43;
                    *pdVar2 = dVar42 * dVar40 + dVar39 * dVar43;
                  } while (uVar33 < uVar25);
                  uVar33 = iVar18 + (uint)(uVar17 != 0);
                  if (iVar28 == iVar18) goto LAB_002b12a0;
                }
                uVar29 = -(ulong)(uVar33 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar33 << 3;
                lVar16 = uVar29 + lVar21;
                lVar24 = uVar29 + lVar14;
                dVar44 = *(double *)((long)param_6 + lVar16);
                dVar40 = *(double *)((long)param_6 + lVar24);
                *(double *)((long)param_6 + lVar24) = dVar44 * dVar37 + dVar42 * dVar40;
                *(double *)((long)param_6 + lVar16) = dVar42 * dVar44 + dVar43 * dVar40;
              }
LAB_002b12a0:
              bVar5 = true;
            }
LAB_002b0940:
            pdVar26 = pdVar26 + 1;
            pdVar10 = pdVar10 + param_7;
            lVar21 = lVar21 + lVar32;
          } while (pdVar26 != (double *)(puVar9 + lVar34 + 1 + (ulong)(uVar1 - iVar20)));
        }
        lVar14 = lVar14 + lVar32;
        pdVar15 = (double *)((long)pdVar15 + lVar31);
        lVar34 = lVar34 + 1;
        pdVar12 = pdVar12 + param_7;
        pdVar13 = pdVar13 + 1;
        iVar20 = (int)lVar34;
      } while (iVar20 + -1 < (int)uVar1);
    }
  } while ((bVar5) && (local_4dc = local_4dc + 1, local_4dc != uVar7));
  if (0 < (int)param_9) {
    lVar32 = 0;
    pdVar13 = param_3;
    do {
      lVar34 = 0;
      dVar37 = 0.0;
      if (0 < (int)param_8) {
        do {
          pdVar15 = pdVar13 + lVar34;
          lVar34 = lVar34 + 1;
          dVar37 = dVar37 + *pdVar15 * *pdVar15;
        } while ((int)lVar34 < (int)param_8);
      }
      dVar42 = SQRT(dVar37);
      if (NAN(dVar42)) {
        dVar42 = sqrt(dVar37);
      }
      puVar9[lVar32] = dVar42;
      lVar32 = lVar32 + 1;
      pdVar13 = (double *)((long)pdVar13 + lVar31);
    } while (lVar32 != (ulong)uVar1 + 1);
  }
  lVar14 = 0;
  lVar32 = 1;
  lVar34 = 0;
  pdVar15 = param_3;
  pdVar13 = param_6;
  uVar7 = 0;
  if (0 < (int)uVar1) {
    do {
      uVar17 = uVar7 + 1;
      if ((int)uVar17 < (int)param_9) {
        dVar42 = pdVar19[-1];
        pdVar12 = pdVar19;
        lVar21 = lVar32;
        dVar37 = dVar42;
        uVar33 = uVar17;
        uVar25 = uVar7;
        do {
          dVar43 = *pdVar12;
          pdVar26 = pdVar12;
          lVar16 = lVar21;
          uVar6 = uVar33;
          if (dVar43 <= dVar37) {
            pdVar26 = (double *)(puVar9 + (int)uVar25);
            lVar16 = (long)(int)uVar25;
            uVar6 = uVar25;
          }
          uVar25 = uVar6;
          uVar33 = uVar33 + 1;
          lVar21 = lVar21 + 1;
          pdVar12 = pdVar12 + 1;
          if (dVar43 <= dVar37) {
            dVar43 = dVar37;
          }
          dVar37 = dVar43;
        } while (uVar33 != param_9);
        if (uVar7 != uVar25) {
          pdVar19[-1] = dVar37;
          *pdVar26 = dVar42;
          if (param_6 != (double *)0x0) {
            if (0 < (int)param_8) {
              lVar21 = lVar16 * param_4;
              if (((long)pdVar15 - (long)param_3 < lVar21 * 8 + 0x10 &&
                   lVar21 * 8 < (0x10 - (long)param_3) + (long)pdVar15) || (param_8 < 9)) {
                lVar24 = 0;
                do {
                  dVar37 = pdVar15[lVar24];
                  pdVar15[lVar24] = param_3[lVar21 + lVar24];
                  param_3[lVar21 + lVar24] = dVar37;
                  lVar24 = lVar24 + 1;
                } while ((int)lVar24 < (int)param_8);
              }
              else {
                uVar7 = (uint)((ulong)pdVar15 >> 3) & 1;
                if (param_8 < uVar7) {
                  uVar7 = param_8;
                }
                if (uVar7 != 0) {
                  dVar37 = *pdVar15;
                  *pdVar15 = param_3[lVar21];
                  param_3[lVar21] = dVar37;
                }
                lVar24 = 0;
                uVar25 = ((param_8 - uVar7) - 2 >> 1) + 1;
                uVar33 = 0;
                iVar20 = uVar25 * 2;
                do {
                  puVar11 = (undefined8 *)((long)param_3 + lVar24 + (lVar21 + (ulong)uVar7) * 8);
                  puVar22 = (undefined8 *)((long)param_3 + lVar24 + (lVar14 + (ulong)uVar7) * 8);
                  uVar33 = uVar33 + 1;
                  lVar24 = lVar24 + 0x10;
                  uVar38 = *puVar11;
                  uVar36 = puVar22[1];
                  uVar35 = *puVar22;
                  puVar22[1] = puVar11[1];
                  *puVar22 = uVar38;
                  puVar11[1] = uVar36;
                  *puVar11 = uVar35;
                } while (uVar33 < uVar25);
                if (iVar20 != param_8 - uVar7) {
                  lVar24 = (long)(int)(iVar20 + (uint)(uVar7 != 0));
                  lVar21 = lVar24 + lVar21;
                  lVar24 = lVar14 + lVar24;
                  dVar37 = param_3[lVar24];
                  param_3[lVar24] = param_3[lVar21];
                  param_3[lVar21] = dVar37;
                }
              }
            }
            lVar16 = lVar16 * param_7;
            if ((lVar34 * 8 < lVar16 * 8 + 0x10 &&
                 lVar16 * 8 < (0x10 - (long)param_6) + (long)pdVar13) || (param_9 < 9)) {
                    /* try { // try from 002b14d0 to 003b151b has its CatchHandler @ 002b192c */
              lVar21 = 0;
              do {
                dVar37 = pdVar13[lVar21];
                pdVar13[lVar21] = param_6[lVar16 + lVar21];
                param_6[lVar16 + lVar21] = dVar37;
                lVar21 = lVar21 + 1;
              } while ((int)lVar21 < (int)param_9);
            }
            else {
              uVar7 = (uint)((ulong)pdVar13 >> 3) & 1;
              if (param_9 < uVar7) {
                uVar7 = param_9;
              }
              if (uVar7 != 0) {
                dVar37 = *pdVar13;
                *pdVar13 = param_6[lVar16];
                param_6[lVar16] = dVar37;
              }
              lVar21 = 0;
              uVar25 = ((param_9 - uVar7) - 2 >> 1) + 1;
              uVar33 = 0;
              iVar20 = uVar25 * 2;
              do {
                puVar11 = (undefined8 *)((long)param_6 + lVar21 + (lVar16 + (ulong)uVar7) * 8);
                puVar22 = (undefined8 *)((long)param_6 + lVar21 + ((ulong)uVar7 + lVar34) * 8);
                uVar33 = uVar33 + 1;
                lVar21 = lVar21 + 0x10;
                uVar38 = *puVar11;
                uVar36 = puVar22[1];
                uVar35 = *puVar22;
                puVar22[1] = puVar11[1];
                *puVar22 = uVar38;
                puVar11[1] = uVar36;
                *puVar11 = uVar35;
              } while (uVar33 < uVar25);
              if (iVar20 != param_9 - uVar7) {
                lVar21 = (long)(int)(iVar20 + (uint)(uVar7 != 0));
                lVar16 = lVar21 + lVar16;
                lVar21 = lVar21 + lVar34;
                dVar37 = param_6[lVar21];
                param_6[lVar21] = param_6[lVar16];
                param_6[lVar16] = dVar37;
              }
            }
          }
        }
      }
      pdVar13 = pdVar13 + param_7;
      pdVar15 = (double *)((long)pdVar15 + lVar31);
      lVar34 = lVar34 + param_7;
      pdVar19 = pdVar19 + 1;
      lVar32 = lVar32 + 1;
      lVar14 = lVar14 + param_4;
      uVar7 = uVar17;
    } while ((int)uVar17 < (int)uVar1);
  }
  if (0 < (int)param_9) {
    if ((param_5 < puVar9 + 2 && puVar9 < param_5 + 2) || (param_9 < 0xe)) {
      lVar32 = 0;
      do {
        param_5[lVar32] = puVar9[lVar32];
        lVar32 = lVar32 + 1;
      } while ((int)lVar32 < (int)param_9);
    }
    else {
      uVar7 = (uint)((ulong)param_5 >> 3) & 1;
      if (param_9 < uVar7) {
        uVar7 = param_9;
      }
      if (uVar7 != 0) {
        *param_5 = *puVar9;
      }
      uVar1 = ((param_9 - uVar7) - 2 >> 1) + 1;
      uVar17 = 0;
      iVar20 = uVar1 * 2;
      puVar11 = puVar9 + uVar7;
      puVar22 = param_5 + uVar7;
      do {
        uVar35 = *puVar11;
        uVar17 = uVar17 + 1;
        puVar22[1] = puVar11[1];
        *puVar22 = uVar35;
        puVar11 = puVar11 + 2;
        puVar22 = puVar22 + 2;
      } while (uVar17 < uVar1);
      uVar1 = iVar20 + (uint)(uVar7 != 0);
      if (iVar20 != param_9 - uVar7) {
        uVar29 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
        *(undefined8 *)((long)param_5 + uVar29) = *(undefined8 *)((long)puVar9 + uVar29);
      }
    }
  }
  dVar37 = DAT_002b1760;
  if ((param_6 != (double *)0x0) && (0 < param_10)) {
    lVar32 = 0;
    uVar7 = param_8;
    if ((int)param_8 < 1) {
      uVar7 = 1;
    }
    lVar34 = 0;
    uVar29 = 0x12345678;
    pdVar19 = param_3;
    do {
      iVar20 = (int)lVar34;
      dVar42 = 0.0;
      if (iVar20 < (int)param_9) {
        dVar42 = (double)puVar9[lVar34];
      }
      if (dVar42 <= param_1) {
        pdVar13 = param_3 + lVar32;
        iVar18 = 100;
        uVar1 = (uint)((ulong)pdVar13 >> 3) & 1;
LAB_002b0ddc:
        if (0 < (int)param_8) {
          lVar14 = 0;
          do {
            uVar29 = (uVar29 >> 0x20) + (uVar29 & 0xffffffff) * 0xf83f630a;
            dVar42 = 1.0 / (double)(int)param_8;
            if (((uint)uVar29 >> 8 & 1) == 0) {
              dVar42 = -(1.0 / (double)(int)param_8);
            }
            pdVar19[lVar14] = dVar42;
            lVar14 = lVar14 + 1;
          } while ((int)lVar14 < (int)param_8);
        }
        iVar28 = 2;
        do {
          if (0 < iVar20) {
            iVar27 = 0;
            pdVar15 = param_3;
            do {
              lVar14 = 0;
              dVar42 = 0.0;
              if (0 < (int)param_8) {
                do {
                  pdVar12 = pdVar19 + lVar14;
                  pdVar26 = pdVar15 + lVar14;
                  lVar14 = lVar14 + 1;
                  dVar42 = dVar42 + *pdVar26 * *pdVar12;
                } while ((int)lVar14 < (int)param_8);
                dVar43 = 0.0;
                lVar14 = 0;
                do {
                  dVar40 = pdVar19[lVar14] - dVar42 * pdVar15[lVar14];
                  pdVar19[lVar14] = dVar40;
                  lVar14 = lVar14 + 1;
                  dVar43 = dVar43 + ABS(dVar40);
                } while ((int)lVar14 < (int)param_8);
                uVar17 = uVar1;
                if (dVar43 <= param_2 * dVar37) {
                  if (uVar7 < uVar1) {
                    uVar17 = uVar7;
                  }
                  dVar42 = 0.0;
                  dVar43 = 0.0;
                  if (3 < (int)uVar7) goto LAB_002b1528;
LAB_002b0eac:
                  *pdVar13 = *pdVar13 * dVar42;
                  dVar43 = dVar42;
                  uVar17 = uVar7;
joined_r0x002b1540:
                  iVar23 = 1;
                  if (uVar17 != 1) {
                    param_3[lVar32 + 1] = param_3[lVar32 + 1] * dVar43;
                    if (uVar17 == 3) {
                      param_3[lVar32 + 2] = param_3[lVar32 + 2] * dVar43;
                      iVar23 = 3;
                    }
                    else {
                      iVar23 = 2;
                    }
                  }
                  if (uVar17 == uVar7) goto LAB_002b0f64;
                }
                else {
                  if (uVar7 < uVar1) {
                    uVar17 = uVar7;
                  }
                  dVar43 = 1.0 / dVar43;
                  dVar42 = dVar43;
                  if ((int)uVar7 < 4) goto LAB_002b0eac;
LAB_002b1528:
                  iVar23 = 0;
                  if (uVar17 != 0) {
                    *pdVar13 = *pdVar13 * dVar43;
                    goto joined_r0x002b1540;
                  }
                }
                uVar25 = param_8 - 1;
                if ((int)param_8 < 1) {
                  uVar25 = 0;
                }
                uVar33 = ((uVar7 - uVar17) - 2 >> 1) + 1;
                iVar4 = uVar33 * 2;
                if (uVar25 != uVar17) {
                  uVar25 = 0;
                  pdVar12 = param_3 + lVar32 + (ulong)uVar17;
                  pdVar26 = param_3 + lVar32 + (ulong)uVar17;
                  do {
                    dVar42 = *pdVar26;
                    uVar25 = uVar25 + 1;
                    pdVar12[1] = dVar43 * pdVar26[1];
                    *pdVar12 = dVar43 * dVar42;
                    pdVar12 = pdVar12 + 2;
                    pdVar26 = pdVar26 + 2;
                  } while (uVar25 < uVar33);
                  iVar23 = iVar23 + iVar4;
                  if (iVar4 == uVar7 - uVar17) goto LAB_002b0f64;
                }
                param_3[lVar32 + iVar23] = param_3[lVar32 + iVar23] * dVar43;
              }
LAB_002b0f64:
              iVar27 = iVar27 + 1;
              pdVar15 = (double *)((long)pdVar15 + lVar31);
            } while (iVar27 != iVar20);
          }
          if (iVar28 == 1) goto code_r0x002b0f7c;
          iVar28 = 1;
        } while( true );
      }
LAB_002b0fbc:
      if (dVar42 <= param_1) {
                    /* try { // try from 002b155c to 003b155f has its CatchHandler @ 002b1960 */
        dVar42 = 0.0;
      }
      else {
        dVar42 = 1.0 / dVar42;
      }
      if (0 < (int)param_8) {
        uVar1 = (uint)((ulong)pdVar19 >> 3) & 1;
        if (param_8 < uVar1) {
          uVar1 = param_8;
        }
        if (param_8 < 4) {
          uVar1 = param_8;
        }
        uVar17 = uVar1;
        if (uVar1 != 0) {
          *pdVar19 = *pdVar19 * dVar42;
          if (uVar1 != 1) {
            pdVar19[1] = pdVar19[1] * dVar42;
            if (uVar1 == 3) {
              pdVar19[2] = pdVar19[2] * dVar42;
            }
            else {
              uVar17 = 2;
            }
          }
          if (param_8 == uVar1) goto LAB_002b1094;
        }
        iVar18 = param_8 - uVar1;
        uVar25 = (iVar18 - 2U >> 1) + 1;
        iVar20 = uVar25 * 2;
        if (iVar18 != 1) {
          uVar33 = 0;
          pdVar13 = param_3 + (ulong)uVar1 + lVar32;
          pdVar15 = param_3 + (ulong)uVar1 + lVar32;
          do {
            dVar43 = *pdVar15;
            uVar33 = uVar33 + 1;
            pdVar13[1] = dVar42 * pdVar15[1];
            *pdVar13 = dVar42 * dVar43;
            pdVar13 = pdVar13 + 2;
            pdVar15 = pdVar15 + 2;
          } while (uVar33 < uVar25);
          uVar17 = uVar17 + iVar20;
          if (iVar20 == iVar18) goto LAB_002b1094;
        }
        param_3[lVar32 + (int)uVar17] = param_3[lVar32 + (int)uVar17] * dVar42;
      }
LAB_002b1094:
      lVar34 = lVar34 + 1;
      pdVar19 = (double *)((long)pdVar19 + lVar31);
      lVar32 = lVar32 + param_4;
    } while (lVar34 != (ulong)(param_10 - 1) + 1);
  }
  if ((puVar9 != auStack_440) && (puVar9 != (undefined8 *)0x0)) {
    operator_delete__(puVar9);
  }
                    /* catch() { ... } // from try @ 002b1150 with catch @ 002b10d8
                       catch() { ... } // from try @ 002b11a4 with catch @ 002b10d8
                       catch() { ... } // from try @ 002b143c with catch @ 002b10d8 */
  return;
code_r0x002b0f7c:
  lVar14 = 0;
  dVar43 = 0.0;
  if (0 < (int)param_8) {
    do {
      pdVar15 = pdVar19 + lVar14;
      lVar14 = lVar14 + 1;
      dVar43 = dVar43 + *pdVar15 * *pdVar15;
    } while ((int)lVar14 < (int)param_8);
  }
  dVar42 = SQRT(dVar43);
  if (NAN(dVar42)) {
    dVar42 = sqrt(dVar43);
  }
  iVar18 = iVar18 + -1;
  if ((iVar18 == 0) || (param_1 < dVar42)) goto LAB_002b0fbc;
  goto LAB_002b0ddc;
}


==================================================================

### FUNC 002b1770 (9004 bytes) name=solve

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::solve(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int) */

char cv::solve(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4)

{
  char cVar1;
  ulong uVar2;
  float fVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  bool bVar13;
  char cVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  char *pcVar19;
  void *__dest;
  long lVar20;
  ulong uVar21;
  ulong uVar22;
  double **ppdVar23;
  ulong uVar24;
  _InputArray *p_Var25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  Mat *pMVar29;
  undefined8 *puVar30;
  ulong *puVar31;
  long lVar32;
  undefined4 *puVar33;
  int *piVar34;
  uint uVar35;
  double *pdVar36;
  uint uVar37;
  uint uVar38;
  ulong uVar39;
  float fVar40;
  float fVar41;
  double dVar42;
  float fVar43;
  double dVar44;
  float fVar45;
  float fVar46;
  float fVar47;
  double dVar48;
  double dVar49;
  double dVar50;
  float fVar51;
  float fVar52;
  double dVar53;
  float fVar54;
  double dVar55;
  double dVar56;
  float fVar57;
  double dVar58;
  int iVar59;
  uint uVar60;
  float fVar61;
  double dVar62;
  float fVar63;
  float fVar64;
  double dVar65;
  double dVar66;
  double dVar67;
  double dVar68;
  double dVar69;
  float fVar70;
  long local_7b0;
  undefined8 local_788;
  undefined8 local_780;
  undefined8 local_778;
  undefined8 local_770;
  undefined8 local_768;
  Mat *local_760;
  uint local_758;
  uint local_754;
  undefined8 local_750;
  Mat *local_748;
  uint local_740;
  uint local_73c;
  undefined8 local_738;
  Mat *local_730;
  uint local_728;
  uint local_724;
  uint local_720;
  int local_71c;
  undefined4 local_718;
  int local_714;
  double *local_710;
  double *pdStack_708;
  double *local_700;
  double *pdStack_6f8;
  undefined8 local_6f0;
  long lStack_6e8;
  undefined4 *local_6e0;
  ulong *local_6d8;
  ulong local_6d0;
  ulong local_6c8;
  uint local_6c0;
  int local_6bc;
  int local_6b8;
  int local_6b4;
  ulong local_6b0;
  ulong uStack_6a8;
  long local_6a0;
  long lStack_698;
  undefined8 local_690;
  long lStack_688;
  int *local_680;
  ulong *local_678;
  ulong local_670;
  undefined8 local_668;
  uint local_660;
  int local_65c;
  undefined8 local_658;
  ulong local_650;
  ulong uStack_648;
  long local_640;
  long lStack_638;
  undefined8 local_630;
  long lStack_628;
  undefined8 *local_620;
  ulong *local_618;
  ulong local_610;
  ulong local_608;
  undefined8 local_600;
  undefined8 uStack_5f8;
  double *local_5f0;
  double *pdStack_5e8;
  double *local_5e0;
  double *pdStack_5d8;
  undefined8 local_5d0;
  long lStack_5c8;
  undefined8 *local_5c0;
  ulong *local_5b8;
  ulong local_5b0;
  ulong uStack_5a8;
  uint local_5a0;
  int local_59c;
  int local_598;
  int local_594;
  double *local_590;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  long local_568;
  int *local_560;
  long *local_558;
  long local_550;
  long local_548;
  uint local_540;
  int local_53c;
  undefined4 local_538;
  int local_534;
  double *local_530;
  double *local_528;
  double *local_520;
  double *local_518;
  undefined8 local_510;
  long local_508;
  undefined4 *local_500;
  ulong *local_4f8;
  ulong local_4f0;
  ulong local_4e8;
  undefined4 local_4e0;
  int local_4dc;
  undefined4 local_4d8;
  undefined4 local_4d4;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  long local_4a8;
  undefined4 *local_4a0;
  ulong *local_498;
  ulong local_490;
  ulong local_488;
  undefined8 local_480;
  undefined8 uStack_478;
  long local_470;
  long lStack_468;
  long local_460;
  long local_458;
  undefined8 local_450;
  long local_448;
  undefined8 *local_440;
  ulong *local_438;
  ulong local_430;
  ulong uStack_428;
  undefined8 local_418;
  ulong local_410;
  double *local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  long local_3e0;
  ulong *local_3d8;
  long *local_3d0;
  long local_3c8;
  long local_3c0;
  
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar29 = *(Mat **)(param_1 + 8);
    local_560 = &local_598;
    local_558 = &local_550;
    local_5a0 = *(uint *)pMVar29;
    local_59c = *(int *)(pMVar29 + 4);
    local_598 = *(int *)(pMVar29 + 8);
    local_594 = *(int *)(pMVar29 + 0xc);
    local_590 = *(double **)(pMVar29 + 0x10);
    local_588 = *(undefined8 *)(pMVar29 + 0x18);
    local_580 = *(undefined8 *)(pMVar29 + 0x20);
    local_578 = *(undefined8 *)(pMVar29 + 0x28);
    local_570 = *(undefined8 *)(pMVar29 + 0x30);
    local_568 = *(long *)(pMVar29 + 0x38);
    local_548 = 0;
    local_550 = 0;
    if (local_568 != 0) {
      piVar34 = (int *)(local_568 + 0x14);
      do {
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = *piVar34 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (*(int *)(pMVar29 + 4) < 3) {
      local_550 = **(long **)(pMVar29 + 0x48);
      local_548 = (*(long **)(pMVar29 + 0x48))[1];
    }
    else {
      local_59c = 0;
      Mat::copySize((Mat *)&local_5a0,pMVar29);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar15 = _InputArray::kind(param_2);
  if (iVar15 == 0x10000) {
    pMVar29 = *(Mat **)(param_2 + 8);
    local_500 = &local_538;
    local_4f8 = &local_4f0;
    local_540 = *(uint *)pMVar29;
    local_53c = *(int *)(pMVar29 + 4);
    local_538 = *(undefined4 *)(pMVar29 + 8);
    local_534 = *(int *)(pMVar29 + 0xc);
    local_530 = *(double **)(pMVar29 + 0x10);
    local_528 = *(double **)(pMVar29 + 0x18);
    local_520 = *(double **)(pMVar29 + 0x20);
    local_518 = *(double **)(pMVar29 + 0x28);
    local_510 = *(undefined8 *)(pMVar29 + 0x30);
    local_508 = *(long *)(pMVar29 + 0x38);
    local_4e8 = 0;
    local_4f0 = 0;
    if (local_508 != 0) {
      piVar34 = (int *)(local_508 + 0x14);
      do {
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = *piVar34 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (2 < *(int *)(pMVar29 + 4)) {
      local_53c = 0;
      Mat::copySize((Mat *)&local_540,pMVar29);
      goto LAB_002b17f8;
    }
    uVar37 = (uint)param_4 >> 4 & 1;
    uVar39 = (ulong)local_5a0;
    local_4f0 = **(ulong **)(pMVar29 + 0x48);
    local_4e8 = (*(ulong **)(pMVar29 + 0x48))[1];
    uVar60 = local_5a0 & 0xfff;
    if (uVar60 == (local_540 & 0xfff)) goto LAB_002b20d4;
LAB_002b1818:
    local_788 = 0;
    local_780 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_788,0x3a);
    uVar7 = s_type_____src2_type_______type____00467d98._56_2_;
    uVar11 = s_type_____src2_type_______type____00467d98._40_8_;
    uVar10 = s_type_____src2_type_______type____00467d98._32_8_;
    uVar9 = s_type_____src2_type_______type____00467d98._24_8_;
    uVar8 = s_type_____src2_type_______type____00467d98._16_8_;
    uVar5 = s_type_____src2_type_______type____00467d98._8_8_;
    uVar4 = s_type_____src2_type_______type____00467d98._0_8_;
                    /* try { // try from 002b1840 to 003b1843 has its CatchHandler @ 002b19d0 */
                    /* try { // try from 002b1848 to 003b184b has its CatchHandler @ 002b19a8 */
    *(undefined8 *)(pcVar19 + 0x30) = s_type_____src2_type_______type____00467d98._48_8_;
    *(undefined2 *)(pcVar19 + 0x38) = uVar7;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    *(undefined8 *)(pcVar19 + 0x10) = uVar8;
    *(undefined8 *)(pcVar19 + 0x18) = uVar9;
    *(undefined8 *)(pcVar19 + 0x20) = uVar10;
    *(undefined8 *)(pcVar19 + 0x28) = uVar11;
    error(-0xd7,(String *)&local_788,
          "bool cv::solve(cv::InputArray, cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x421);
    String::deallocate((String *)&local_788);
  }
  else {
                    /* try { // try from 002b17e4 to 003b17e7 has its CatchHandler @ 002b1988 */
    _InputArray::getMat_((int)param_2);
LAB_002b17f8:
    uVar39 = (ulong)local_5a0;
    uVar37 = (uint)param_4 >> 4 & 1;
                    /* try { // try from 002b1800 to 003b1803 has its CatchHandler @ 002b19a8 */
    uVar60 = local_5a0 & 0xfff;
    if (uVar60 != (local_540 & 0xfff)) goto LAB_002b1818;
LAB_002b20d4:
    if (1 < uVar60 - 5) goto LAB_002b1818;
  }
  uVar38 = param_4 & 0xffffffef;
  iVar15 = local_594;
  if (((uVar38 == 3 || uVar38 == 0) && (uVar37 == 0)) &&
     (iVar15 = local_598, local_598 != local_594)) {
    local_418 = (double **)0x0;
    local_410 = 0;
    __dest = (void *)String::allocate((String *)&local_418,0x57);
    memcpy(__dest,
           "(method != DECOMP_LU && method != DECOMP_CHOLESKY) || is_normal || src.rows == src.cols"
           ,0x57);
    error(-0xd7,(String *)&local_418,
          "bool cv::solve(cv::InputArray, cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x425);
    String::deallocate((String *)&local_418);
    iVar15 = local_594;
  }
  iVar12 = local_534;
  iVar59 = local_598;
                    /* catch() { ... } // from try @ 002b14d0 with catch @ 002b192c */
  if (((uVar37 < (uVar38 == 3 || uVar38 == 0)) && (local_598 < 4)) &&
     ((local_598 == iVar15 && (local_534 == 1)))) {
                    /* try { // try from 002b2cfc to 003b2d13 has its CatchHandler @ 002b2f40 */
    _OutputArray::create(param_3,local_598,1,local_5a0 & 0xfff,-1,false,0);
    iVar15 = _InputArray::kind((_InputArray *)param_3);
    if (iVar15 == 0x10000) {
      pMVar29 = *(Mat **)(param_3 + 8);
      local_3d8 = &local_410;
      local_3d0 = &local_3c8;
      uVar37 = *(uint *)pMVar29;
      local_408 = *(double **)(pMVar29 + 0x10);
      local_418 = *(double ***)pMVar29;
      local_410 = *(ulong *)(pMVar29 + 8);
                    /* try { // try from 002b36b4 to 003b36d7 has its CatchHandler @ 002b3664 */
      local_400 = *(undefined8 *)(pMVar29 + 0x18);
      local_3f8 = *(undefined8 *)(pMVar29 + 0x20);
      local_3f0 = *(undefined8 *)(pMVar29 + 0x28);
      local_3e8 = *(undefined8 *)(pMVar29 + 0x30);
                    /* try { // try from 002b36dc to 003b36ff has its CatchHandler @ 002b4234 */
      local_3e0 = *(long *)(pMVar29 + 0x38);
      local_3c0 = 0;
      local_3c8 = 0;
      if (local_3e0 != 0) {
        piVar34 = (int *)(local_3e0 + 0x14);
        do {
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = *piVar34 + 1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
      }
      if (*(int *)(pMVar29 + 4) < 3) {
        local_3c8 = **(long **)(pMVar29 + 0x48);
        local_3c0 = (*(long **)(pMVar29 + 0x48))[1];
      }
      else {
        local_418 = (double **)(ulong)uVar37;
        Mat::copySize((Mat *)&local_418,pMVar29);
      }
    }
    else {
      _InputArray::getMat_((int)param_3);
    }
    if (local_598 == 2) {
      if (uVar60 == 5) {
        fVar45 = *(float *)((long)local_590 + 4);
        cVar14 = '\0';
        fVar40 = *(float *)((long)local_590 + local_550 + 4);
                    /* try { // try from 002b3918 to 003b394f has its CatchHandler @ 002b426c */
        fVar3 = *(float *)local_590 * fVar40 - fVar45 * *(float *)((long)local_590 + local_550);
        if (fVar3 != 0.0) {
          cVar14 = '\x01';
          fVar51 = *(float *)local_530;
          fVar3 = 1.0 / fVar3;
          fVar41 = *(float *)((long)local_530 + local_4f0);
          *(float *)((long)local_408 + local_3c8) =
               (*(float *)local_590 * fVar41 - *(float *)((long)local_590 + local_550) * fVar51) *
               fVar3;
          *(float *)local_408 = (fVar40 * fVar51 - fVar45 * fVar41) * fVar3;
        }
      }
      else {
        dVar48 = local_590[1];
        cVar14 = '\0';
        dVar42 = *(double *)((long)local_590 + local_550 + 8);
        dVar44 = *local_590 * dVar42 - dVar48 * *(double *)((long)local_590 + local_550);
        if (dVar44 != 0.0) {
                    /* try { // try from 002b376c to 003b376f has its CatchHandler @ 002b422c */
          cVar14 = '\x01';
          dVar50 = *local_530;
          dVar44 = 1.0 / dVar44;
          dVar49 = *(double *)((long)local_530 + local_4f0);
          *(double *)((long)local_408 + local_3c8) =
               (*local_590 * dVar49 - *(double *)((long)local_590 + local_550) * dVar50) * dVar44;
          *local_408 = (dVar42 * dVar50 - dVar48 * dVar49) * dVar44;
        }
      }
    }
    else if (local_598 == 3) {
                    /* try { // try from 002b37e4 to 003b38e3 has its CatchHandler @ 002b4224 */
      if (uVar60 == 5) {
        lVar20 = (local_550 + 4) * 2;
        cVar14 = '\0';
        fVar64 = *(float *)((long)local_590 + local_550 * 2);
        fVar54 = *(float *)((long)local_590 + local_550 + 8);
        fVar46 = *(float *)((long)local_590 + local_550);
        fVar52 = *(float *)((long)local_590 + lVar20);
        fVar41 = *(float *)((long)local_590 + lVar20 + -4);
        fVar57 = *(float *)((long)local_590 + local_550 + 4);
        fVar63 = *(float *)((long)local_590 + 4);
        fVar51 = fVar52 * fVar46 - fVar54 * fVar64;
        fVar61 = *(float *)local_590;
        fVar45 = fVar57 * fVar52 - fVar54 * fVar41;
        fVar47 = *(float *)(local_590 + 1);
        fVar40 = fVar41 * fVar46 - fVar57 * fVar64;
                    /* try { // try from 002b3b28 to 003b3b3f has its CatchHandler @ 002b4234 */
        fVar3 = (fVar61 * fVar45 - fVar63 * fVar51) + fVar40 * fVar47;
        if (fVar3 != 0.0) {
          fVar43 = *(float *)((long)local_530 + local_4f0);
          cVar14 = '\x01';
          fVar70 = *(float *)((long)local_530 + local_4f0 * 2);
                    /* try { // try from 002b3b48 to 003b3b5f has its CatchHandler @ 002b3664 */
          fVar3 = 1.0 / fVar3;
          fVar46 = fVar46 * fVar70 - fVar64 * fVar43;
          fVar64 = *(float *)local_530;
                    /* try { // try from 002b3ba8 to 003b3bab has its CatchHandler @ 002b4224 */
          *(float *)local_408 =
               ((fVar45 * fVar64 - fVar63 * (fVar52 * fVar43 - fVar54 * fVar70)) +
               (fVar41 * fVar43 - fVar57 * fVar70) * fVar47) * fVar3;
          *(float *)((long)local_408 + local_3c8) =
               ((fVar61 * (fVar52 * fVar43 - fVar54 * fVar70) - fVar51 * fVar64) + fVar46 * fVar47)
               * fVar3;
          *(float *)((long)local_408 + local_3c8 * 2) =
               ((fVar61 * (fVar57 * fVar70 - fVar43 * fVar41) - fVar63 * fVar46) + fVar64 * fVar40)
               * fVar3;
        }
      }
      else {
        lVar20 = (local_550 + 8) * 2;
        cVar14 = '\0';
        dVar42 = *(double *)((long)local_590 + local_550);
        dVar66 = *(double *)((long)local_590 + local_550 * 2);
        dVar44 = *(double *)((long)local_590 + local_550 + 0x10);
        dVar49 = *(double *)((long)local_590 + lVar20);
        dVar50 = *(double *)((long)local_590 + lVar20 + -8);
        dVar69 = *(double *)((long)local_590 + local_550 + 8);
        dVar48 = local_590[1];
        dVar65 = dVar69 * dVar49 - dVar44 * dVar50;
        dVar58 = *local_590;
        dVar68 = local_590[2];
        dVar62 = dVar50 * dVar42 - dVar69 * dVar66;
        dVar53 = (dVar58 * dVar65 - dVar48 * (dVar49 * dVar42 - dVar44 * dVar66)) + dVar62 * dVar68;
        if (dVar53 != 0.0) {
          cVar14 = '\x01';
          dVar53 = 1.0 / dVar53;
          dVar67 = *(double *)((long)local_530 + local_4f0);
          dVar55 = *local_530;
          dVar56 = *(double *)((long)local_530 + local_4f0 * 2);
          *local_408 = ((dVar50 * dVar68 - dVar49 * dVar48) * dVar67 + dVar55 * dVar65 +
                       dVar56 * (dVar44 * dVar48 - dVar69 * dVar68)) * dVar53;
          *(double *)((long)local_408 + local_3c8) =
               (dVar67 * (dVar58 * dVar49 - dVar66 * dVar68) +
                (dVar44 * dVar66 - dVar49 * dVar42) * dVar55 +
               (dVar42 * dVar68 - dVar58 * dVar44) * dVar56) * dVar53;
          *(double *)((long)local_408 + local_3c8 * 2) =
               (dVar67 * (dVar48 * dVar66 - dVar58 * dVar50) + dVar55 * dVar62 +
               (dVar58 * dVar69 - dVar48 * dVar42) * dVar56) * dVar53;
        }
      }
    }
    else if (uVar60 == 5) {
      cVar14 = '\0';
      if (*(float *)local_590 != 0.0) {
        cVar14 = '\x01';
        *(float *)local_408 = *(float *)local_530 / *(float *)local_590;
      }
    }
    else {
      cVar14 = '\0';
      if (*local_590 != 0.0) {
        cVar14 = '\x01';
        *local_408 = *local_530 / *local_590;
      }
    }
    if (local_3e0 != 0) {
      piVar34 = (int *)(local_3e0 + 0x14);
      do {
        iVar15 = *piVar34;
        cVar1 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = iVar15 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_418);
      }
    }
    local_3e0 = 0;
    local_408 = (double *)0x0;
    local_3f0 = 0;
    local_3f8 = 0;
    local_400 = 0;
    if (0 < local_418._4_4_) {
      iVar15 = 0;
      puVar31 = local_3d8;
      do {
        *(undefined4 *)puVar31 = 0;
        iVar15 = iVar15 + 1;
        puVar31 = (ulong *)((long)puVar31 + 4);
      } while (iVar15 < local_418._4_4_);
    }
    if (local_3d0 != &local_3c8) {
      fastFree(local_3d0);
    }
    goto LAB_002b1ec8;
  }
  if (uVar38 == 4) {
    uVar38 = 1;
    uVar16 = 1;
  }
  else {
                    /* try { // try from 002b1954 to 003b1957 has its CatchHandler @ 002b145c */
    uVar16 = (uint)(uVar38 == 1);
  }
  uVar35 = (uint)uVar39 & 7;
                    /* catch() { ... } // from try @ 002b155c with catch @ 002b1960 */
  lVar20 = (long)iVar15;
                    /* catch() { ... } // from try @ 002b15a8 with catch @ 002b1988
                       catch() { ... } // from try @ 002b1670 with catch @ 002b1988
                       catch() { ... } // from try @ 002b17e4 with catch @ 002b1988 */
  iVar18 = ((uint)(uVar39 >> 3) & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> (uVar35 << 1)) & 3);
  uVar27 = (long)iVar15 * (long)iVar18;
  uVar21 = (ulong)iVar18;
  uVar22 = uVar27 + 0xf & 0xfffffffffffffff0;
  uVar39 = uVar22;
                    /* catch() { ... } // from try @ 002b15d0 with catch @ 002b19a8
                       catch() { ... } // from try @ 002b1800 with catch @ 002b19a8
                       catch() { ... } // from try @ 002b1848 with catch @ 002b19a8 */
  if (uVar37 < uVar16) {
    uVar39 = (long)local_598 * (long)iVar18 + 0xfU & 0xfffffffffffffff0;
  }
  local_418 = &local_408;
  local_6e0 = &local_718;
                    /* catch() { ... } // from try @ 002b1840 with catch @ 002b19d0 */
  local_6d8 = &local_6d0;
                    /* catch() { ... } // from try @ 002b1a30 with catch @ 002b19e0
                       catch() { ... } // from try @ 002b1af0 with catch @ 002b19e0
                       catch() { ... } // from try @ 002b1b38 with catch @ 002b19e0 */
  local_720 = local_540;
  local_410 = 0x408;
  local_71c = local_53c;
  local_718 = local_538;
  local_714 = local_534;
  local_710 = local_530;
  pdStack_708 = local_528;
  local_700 = local_520;
  pdStack_6f8 = local_518;
  local_6f0 = local_510;
  lStack_6e8 = local_508;
  local_6c8 = 0;
                    /* try { // try from 002b1a30 to 003b1a33 has its CatchHandler @ 002b19e0 */
  local_6d0 = 0;
  if (local_508 != 0) {
    piVar34 = (int *)(local_508 + 0x14);
    do {
      cVar14 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = *piVar34 + 1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
  }
  if (local_53c < 3) {
    local_6d0 = *local_4f8;
    local_6c8 = local_4f8[1];
  }
  else {
    local_71c = 0;
    Mat::copySize((Mat *)&local_720,(Mat *)&local_540);
  }
                    /* try { // try from 002b1a7c to 003b1a7f has its CatchHandler @ 002b1b14 */
  _OutputArray::create(param_3,local_594,local_714,local_5a0 & 0xfff,-1,false,0);
  iVar17 = _InputArray::kind((_InputArray *)param_3);
  if (iVar17 == 0x10000) {
    pMVar29 = *(Mat **)(param_3 + 8);
    local_4a0 = &local_4d8;
    local_498 = &local_490;
    local_4e0 = *(undefined4 *)pMVar29;
    local_4dc = *(int *)(pMVar29 + 4);
    local_4d8 = *(undefined4 *)(pMVar29 + 8);
    local_4d4 = *(undefined4 *)(pMVar29 + 0xc);
    local_4d0 = *(undefined8 *)(pMVar29 + 0x10);
    local_4c8 = *(undefined8 *)(pMVar29 + 0x18);
    local_4c0 = *(undefined8 *)(pMVar29 + 0x20);
    local_4b8 = *(undefined8 *)(pMVar29 + 0x28);
    local_4b0 = *(undefined8 *)(pMVar29 + 0x30);
    local_4a8 = *(long *)(pMVar29 + 0x38);
    local_488 = 0;
    local_490 = 0;
    if (local_4a8 != 0) {
      piVar34 = (int *)(local_4a8 + 0x14);
      do {
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = *piVar34 + 1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
    }
    if (2 < *(int *)(pMVar29 + 4)) {
      local_4dc = 0;
      Mat::copySize((Mat *)&local_4e0,pMVar29);
      goto LAB_002b1abc;
    }
    local_490 = **(ulong **)(pMVar29 + 0x48);
    local_488 = (*(ulong **)(pMVar29 + 0x48))[1];
    if (iVar15 <= iVar59) goto LAB_002b1ac8;
LAB_002b2260:
    local_778 = 0;
    local_770 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_778,0x3a);
    uVar7 = s_The_function_can_not_solve_under_00467e30._56_2_;
    uVar11 = s_The_function_can_not_solve_under_00467e30._40_8_;
    uVar10 = s_The_function_can_not_solve_under_00467e30._32_8_;
    uVar9 = s_The_function_can_not_solve_under_00467e30._24_8_;
    uVar8 = s_The_function_can_not_solve_under_00467e30._16_8_;
    uVar5 = s_The_function_can_not_solve_under_00467e30._8_8_;
    uVar4 = s_The_function_can_not_solve_under_00467e30._0_8_;
    *(undefined8 *)(pcVar19 + 0x30) = s_The_function_can_not_solve_under_00467e30._48_8_;
    *(undefined2 *)(pcVar19 + 0x38) = uVar7;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    *(undefined8 *)(pcVar19 + 0x10) = uVar8;
    *(undefined8 *)(pcVar19 + 0x18) = uVar9;
    *(undefined8 *)(pcVar19 + 0x20) = uVar10;
    *(undefined8 *)(pcVar19 + 0x28) = uVar11;
    error(-5,(String *)&local_778,
          "bool cv::solve(cv::InputArray, cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x4ba);
    String::deallocate((String *)&local_778);
    if (uVar37 != 0) goto LAB_002b1ad0;
LAB_002b1b50:
    local_7b0 = lVar20;
    if (uVar16 == 0) {
      local_7b0 = (long)iVar59;
    }
    uVar37 = 0;
    local_7b0 = uVar39 * local_7b0;
    uVar26 = local_7b0 + 0x20;
    if (uVar38 - 1 < 2) goto LAB_002b1b0c;
LAB_002b1b7c:
    ppdVar23 = local_418;
    uVar24 = uVar26;
    if (local_410 < uVar26) {
LAB_002b1b88:
      if (local_418 != &local_408) {
        if (local_418 != (double **)0x0) {
          operator_delete__(local_418);
        }
        local_418 = &local_408;
        local_410 = 0x408;
      }
      ppdVar23 = &local_408;
      uVar24 = local_410;
      if (0x408 < uVar26) {
        local_418 = operator_new__(uVar26);
        ppdVar23 = local_418;
        uVar24 = uVar26;
      }
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
LAB_002b1abc:
    if (iVar59 < iVar15) goto LAB_002b2260;
LAB_002b1ac8:
    if ((iVar59 == iVar15) || (uVar37 == 0)) goto LAB_002b1b50;
LAB_002b1ad0:
    if (uVar16 == 0) {
      uVar16 = uVar38 - 1;
    }
    else {
      uVar16 = 1;
      uVar38 = 2;
    }
                    /* try { // try from 002b1af0 to 003b1b0f has its CatchHandler @ 002b19e0 */
    local_7b0 = uVar39 * lVar20;
    uVar26 = local_7b0 + (long)(iVar15 * iVar12) * (long)iVar18 + 0x20;
    iVar59 = iVar15;
    if (1 < uVar16) goto LAB_002b1b7c;
LAB_002b1b0c:
                    /* catch() { ... } // from try @ 002b1a7c with catch @ 002b1b14 */
    uVar26 = uVar26 + (long)(iVar15 * 5) * (long)iVar18 + 0x20 + uVar22 * lVar20 + (long)iVar12 * 8;
                    /* try { // try from 002b1b38 to 003b1b3b has its CatchHandler @ 002b19e0 */
                    /* catch() { ... } // from try @ 002b2f68 with catch @ 002b1b40 */
    ppdVar23 = local_418;
    uVar24 = uVar26;
    if (local_410 < uVar26) goto LAB_002b1b88;
  }
  local_410 = uVar24;
  uVar24 = (long)ppdVar23 + 0xfU & 0xfffffffffffffff0;
  uVar16 = uVar60 + 0x42ff0000;
  local_678 = &local_670;
  local_680 = &local_6b8;
  uVar28 = 0x88442211UL >> (uVar35 << 2) & 0xf;
  local_6bc = 2;
  local_6a0 = 0;
  lStack_698 = 0;
  local_690 = 0;
                    /* try { // try from 002b1c30 to 003b1c33 has its CatchHandler @ 002b2f40 */
  lStack_688 = 0;
  local_668 = 0;
  local_670 = 0;
  uVar26 = uVar27;
  local_6b8 = iVar59;
  local_6b4 = iVar15;
  local_6b0 = uVar24;
  uStack_6a8 = uVar24;
  if (uVar39 == 0) {
    local_6c0 = uVar16 | 0x4000;
    local_6a0 = 0;
  }
  else {
    local_6c0 = uVar16;
    if (iVar59 == 1) {
      uVar2 = 0;
      if (uVar28 != 0) {
        uVar2 = uVar27 / uVar28;
      }
      if (uVar27 - uVar2 * uVar28 != 0) goto LAB_002b30f8;
      local_6a0 = 0;
      uVar35 = 0x4000;
    }
    else {
      uVar2 = 0;
      if (uVar28 != 0) {
        uVar2 = uVar39 / uVar28;
      }
      uVar26 = uVar39;
      if (uVar39 != uVar2 * uVar28) {
LAB_002b30f8:
        local_768 = 0;
        local_760 = (Mat *)0x0;
        pcVar19 = (char *)String::allocate((String *)&local_768,0x1f);
        cVar14 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar5 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar19 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar19 + 0x18) = uVar6;
        *(undefined2 *)(pcVar19 + 0x1c) = uVar7;
        pcVar19[0x1e] = cVar14;
        *(undefined8 *)pcVar19 = uVar4;
        *(undefined8 *)(pcVar19 + 8) = uVar5;
        error(-0xd,(String *)&local_768,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)&local_768);
      }
      if (uVar27 - uVar26 == 0) {
        local_6a0 = 0;
        uVar35 = 0x4000;
        uVar26 = uVar27;
      }
      else {
        local_6a0 = uVar27 - uVar26;
        uVar35 = 0;
      }
    }
    local_6c0 = local_6c0 | uVar35;
                    /* try { // try from 002b1c90 to 003b1c93 has its CatchHandler @ 002b2f6c */
  }
  *local_678 = uVar26;
  lStack_698 = uStack_6a8 + (long)local_6b8 * uVar26;
  local_678[1] = uVar21;
  local_6a0 = lStack_698 + local_6a0;
  uStack_478 = (Mat *)&local_6c0;
  if (uVar37 == 0) {
    if (uVar38 == 1) {
                    /* try { // try from 002b2e84 to 003b2f3b has its CatchHandler @ 002b2f6c */
      local_620 = &local_658;
      local_618 = &local_610;
      local_65c = 2;
      local_658 = (Mat *)CONCAT44(iVar59,iVar15);
      local_640 = 0;
      lStack_638 = 0;
      local_630 = 0;
      lStack_628 = 0;
      local_608 = 0;
      local_610 = 0;
      uVar26 = (long)iVar59 * (long)iVar18;
      local_650 = uVar24;
      uStack_648 = uVar24;
      if (uVar39 == 0) {
        local_640 = uVar24 + lVar20 * uVar26;
        local_660 = uVar16 | 0x4000;
        lStack_638 = local_640;
        local_610 = uVar26;
        local_608 = uVar21;
      }
      else {
        lVar32 = lVar20;
        if (iVar15 == 1) {
          uVar2 = 0;
          if (uVar28 != 0) {
            uVar2 = uVar26 / uVar28;
          }
          uVar39 = uVar26;
          local_660 = uVar16;
          if (uVar26 - uVar2 * uVar28 != 0) goto LAB_002b3588;
LAB_002b3634:
          local_640 = 0;
          uVar37 = 0x4000;
        }
        else {
          uVar2 = 0;
          if (uVar28 != 0) {
            uVar2 = uVar39 / uVar28;
          }
          local_660 = uVar16;
          if (uVar39 != uVar2 * uVar28) {
LAB_002b3588:
            local_750 = 0;
            local_748 = (Mat *)0x0;
            local_660 = uVar16;
            pcVar19 = (char *)String::allocate((String *)&local_750,0x1f);
            cVar14 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
            uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
            uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
            uVar5 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
            uVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
            *(undefined8 *)(pcVar19 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
            *(undefined4 *)(pcVar19 + 0x18) = uVar6;
            *(undefined2 *)(pcVar19 + 0x1c) = uVar7;
            pcVar19[0x1e] = cVar14;
            *(undefined8 *)pcVar19 = uVar4;
            *(undefined8 *)(pcVar19 + 8) = uVar5;
            error(-0xd,(String *)&local_750,"cv::Mat::Mat(int, int, int, void*, size_t)",
                  "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp"
                  ,0x19d);
            String::deallocate((String *)&local_750);
            lVar32 = (long)(int)local_658;
          }
          if (uVar26 - uVar39 == 0) goto LAB_002b3634;
          local_640 = uVar26 - uVar39;
          uVar37 = 0;
          uVar26 = uVar39;
        }
        local_660 = local_660 | uVar37;
        lStack_638 = uStack_648 + uVar26 * lVar32;
        *local_618 = uVar26;
        local_618[1] = uVar21;
        local_640 = lStack_638 + local_640;
                    /* catch() { ... } // from try @ 002b1c30 with catch @ 002b2f40
                       catch() { ... } // from try @ 002b2cfc with catch @ 002b2f40 */
        if (lStack_628 != 0) {
          piVar34 = (int *)(lStack_628 + 0x14);
          do {
            cVar14 = '\x01';
            bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
            if (bVar13) {
              *piVar34 = *piVar34 + 1;
              cVar14 = ExclusiveMonitorsStatus();
            }
          } while (cVar14 != '\0');
        }
      }
      if (lStack_688 != 0) {
        piVar34 = (int *)(lStack_688 + 0x14);
        do {
          iVar18 = *piVar34;
                    /* try { // try from 002b2f68 to 003b2f6b has its CatchHandler @ 002b1b40 */
                    /* catch() { ... } // from try @ 002b1c90 with catch @ 002b2f6c
                       catch() { ... } // from try @ 002b1cdc with catch @ 002b2f6c
                       catch() { ... } // from try @ 002b1e88 with catch @ 002b2f6c
                       catch() { ... } // from try @ 002b2e84 with catch @ 002b2f6c */
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_6c0);
        }
      }
      puVar31 = local_618;
      lStack_688 = 0;
      local_6b0 = 0;
      lStack_698 = 0;
      local_6a0 = 0;
                    /* catch() { ... } // from try @ 002b1cd4 with catch @ 002b2f94 */
      uStack_6a8 = 0;
      if (local_6bc < 1) {
LAB_002b2fc8:
        local_6c0 = local_660;
        if (2 < local_65c) goto LAB_002b3230;
        local_6b4 = local_658._4_4_;
        local_6b8 = (int)local_658;
        local_6bc = local_65c;
        *local_678 = *local_618;
        local_678[1] = puVar31[1];
      }
      else {
        iVar18 = 0;
        piVar34 = local_680;
        do {
                    /* catch() { ... } // from try @ 002b1e80 with catch @ 002b2fa4 */
          *piVar34 = 0;
          iVar18 = iVar18 + 1;
          piVar34 = piVar34 + 1;
        } while (iVar18 < local_6bc);
        if (local_6bc < 3) goto LAB_002b2fc8;
LAB_002b3230:
        local_6c0 = local_660;
        Mat::copySize((Mat *)&local_6c0,(Mat *)&local_660);
      }
      lStack_698 = lStack_638;
      local_6a0 = local_640;
      lStack_688 = lStack_628;
      local_690 = local_630;
      uStack_6a8 = uStack_648;
      local_6b0 = local_650;
      if (lStack_628 != 0) {
        piVar34 = (int *)(lStack_628 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_660);
        }
      }
      lStack_628 = 0;
      local_650 = 0;
      lStack_638 = 0;
      local_640 = 0;
      uStack_648 = 0;
      if (0 < local_65c) {
        iVar18 = 0;
        puVar30 = local_620;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_65c);
      }
      if (local_618 != &local_610) {
        fastFree(local_618);
      }
      local_470 = 0;
      local_480 = CONCAT44(local_480._4_4_,0x2010000);
      local_5f0 = (double *)0x0;
      local_600 = CONCAT44(local_600._4_4_,0x1010000);
      uStack_5f8 = (Mat *)&local_5a0;
      transpose((_InputArray *)&local_600,(_OutputArray *)&local_480);
      pdVar36 = (double *)(uVar24 + local_7b0);
    }
    else {
                    /* try { // try from 002b1cd4 to 003b1cd7 has its CatchHandler @ 002b2f94 */
      local_470 = 0;
                    /* try { // try from 002b1cdc to 003b1e43 has its CatchHandler @ 002b2f6c */
      local_480 = CONCAT44(local_480._4_4_,0x2010000);
      Mat::copyTo((Mat *)&local_5a0,(_OutputArray *)&local_480);
      pdVar36 = (double *)(uVar24 + local_7b0);
      if ((uVar38 == 3) || (uVar38 == 0)) {
        local_470 = 0;
        local_480 = CONCAT44(local_480._4_4_,0x2010000);
        uStack_478 = (Mat *)&local_4e0;
        Mat::copyTo((Mat *)&local_720,(_OutputArray *)&local_480);
        goto LAB_002b2c5c;
      }
LAB_002b1d04:
      if (uVar38 == 3) goto LAB_002b1d10;
    }
LAB_002b2688:
    local_620 = &local_658;
    local_65c = 2;
    uVar26 = (long)pdVar36 + 0xfU & 0xfffffffffffffff0;
    local_658 = (Mat *)CONCAT44(iVar15,iVar15);
    local_618 = &local_610;
    local_640 = 0;
    lStack_638 = 0;
    local_630 = 0;
    lStack_628 = 0;
    local_608 = 0;
    local_610 = 0;
    lVar32 = lVar20;
    uVar39 = uVar27;
    local_650 = uVar26;
    uStack_648 = uVar26;
    if (uVar22 == 0) {
      local_660 = uVar16 | 0x4000;
      local_640 = 0;
    }
    else {
      if (iVar15 == 1) {
        uVar24 = 0;
        if (uVar28 != 0) {
          uVar24 = uVar27 / uVar28;
        }
        local_660 = uVar16;
        if (uVar27 - uVar24 * uVar28 != 0) goto LAB_002b34c4;
LAB_002b3574:
        local_640 = 0;
        uVar37 = 0x4000;
        uVar39 = uVar27;
      }
      else {
        uVar24 = 0;
        if (uVar28 != 0) {
          uVar24 = uVar22 / uVar28;
        }
        uVar39 = uVar22;
        local_660 = uVar16;
        if (uVar22 != uVar24 * uVar28) {
LAB_002b34c4:
          local_738 = 0;
          local_730 = (Mat *)0x0;
          local_660 = uVar16;
          pcVar19 = (char *)String::allocate((String *)&local_738,0x1f);
          cVar14 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
          uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
          uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
          uVar5 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
          uVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
          *(undefined8 *)(pcVar19 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
          *(undefined4 *)(pcVar19 + 0x18) = uVar6;
          *(undefined2 *)(pcVar19 + 0x1c) = uVar7;
          pcVar19[0x1e] = cVar14;
          *(undefined8 *)pcVar19 = uVar4;
          *(undefined8 *)(pcVar19 + 8) = uVar5;
          error(-0xd,(String *)&local_738,"cv::Mat::Mat(int, int, int, void*, size_t)",
                "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
                0x19d);
          String::deallocate((String *)&local_738);
          lVar32 = (long)(int)local_658;
        }
        if (uVar27 - uVar39 == 0) goto LAB_002b3574;
        local_640 = uVar27 - uVar39;
        uVar37 = 0;
      }
      local_660 = uVar37 | local_660;
    }
    *local_618 = uVar39;
    local_618[1] = uVar21;
    local_440 = &uStack_478;
    lStack_638 = uStack_648 + lVar32 * uVar39;
    local_470 = uVar26 + uVar22 * lVar20;
    local_438 = &local_430;
    local_5c0 = &uStack_5f8;
    local_460 = local_470 + uVar27;
    local_640 = lStack_638 + local_640;
    local_5b8 = &local_5b0;
    uStack_478 = (Mat *)CONCAT44(1,iVar15);
    local_450 = 0;
    local_448 = 0;
    local_480 = CONCAT44(2,uVar16) | 0x4000;
    local_600 = 0x42ff0000;
    uStack_5f8 = (Mat *)0x0;
    local_5f0 = (double *)0x0;
    pdStack_5e8 = (double *)0x0;
    local_5e0 = (double *)0x0;
    pdStack_5d8 = (double *)0x0;
    local_5d0 = 0;
    lStack_5c8 = 0;
    uStack_5a8 = 0;
    local_5b0 = 0;
    lVar20 = uVar26 + (uVar22 + uVar21) * lVar20;
    lStack_468 = local_470;
    local_458 = local_460;
    local_430 = uVar21;
    uStack_428 = uVar21;
    if (uVar38 == 2) {
      if (uVar60 == 5) {
        FUN_002abe40(local_6b0,local_670,local_470,local_650,local_610,iVar15,lVar20);
      }
      else {
        FUN_002ace08();
      }
      if (lStack_628 != 0) {
        piVar34 = (int *)(lStack_628 + 0x14);
        do {
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = *piVar34 + 1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
      }
      if (lStack_5c8 != 0) {
        piVar34 = (int *)(lStack_5c8 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_600);
        }
      }
      lStack_5c8 = 0;
      local_5f0 = (double *)0x0;
      pdStack_5d8 = (double *)0x0;
      local_5e0 = (double *)0x0;
      pdStack_5e8 = (double *)0x0;
      if (local_600._4_4_ < 1) {
LAB_002b33bc:
        if (2 < local_65c) goto LAB_002b33c8;
        local_600 = CONCAT44(local_65c,local_660);
        uStack_5f8 = local_658;
        *local_5b8 = *local_618;
        local_5b8[1] = local_618[1];
      }
      else {
        iVar18 = 0;
        puVar30 = local_5c0;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_600._4_4_);
        if (local_600._4_4_ < 3) goto LAB_002b33bc;
LAB_002b33c8:
        local_600 = CONCAT44(local_600._4_4_,local_660);
        Mat::copySize((Mat *)&local_600,(Mat *)&local_660);
      }
      pdStack_5d8 = (double *)lStack_638;
      local_5e0 = (double *)local_640;
      lStack_5c8 = lStack_628;
      local_5d0 = local_630;
      pdStack_5e8 = (double *)uStack_648;
      local_5f0 = (double *)local_650;
    }
    else {
      if (uVar60 == 5) {
        iVar18 = iVar15;
        if (local_650 == 0) {
          iVar18 = 0;
        }
        FUN_002af238(DAT_002b3d00,DAT_002b3d08,local_6b0,local_670,local_470,local_650,local_610,
                     iVar59,iVar15,iVar18);
      }
      else {
        iVar18 = iVar15;
        if (local_650 == 0) {
          iVar18 = 0;
        }
        FUN_002b0688(DAT_002b3d10,DAT_002b3d18,local_6b0,local_670,local_470,local_650,local_610,
                     iVar59,iVar15,iVar18);
      }
      if (lStack_688 != 0) {
        piVar34 = (int *)(lStack_688 + 0x14);
        do {
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = *piVar34 + 1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
      }
      if (lStack_5c8 != 0) {
        piVar34 = (int *)(lStack_5c8 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_600);
        }
      }
      lStack_5c8 = 0;
      local_5f0 = (double *)0x0;
      pdStack_5d8 = (double *)0x0;
      local_5e0 = (double *)0x0;
      pdStack_5e8 = (double *)0x0;
      if (local_600._4_4_ < 1) {
LAB_002b28e8:
        if (2 < local_6bc) goto LAB_002b3240;
        local_600 = CONCAT44(local_6bc,local_6c0);
        uStack_5f8 = (Mat *)CONCAT44(local_6b4,local_6b8);
        *local_5b8 = *local_678;
        local_5b8[1] = local_678[1];
      }
      else {
        iVar18 = 0;
        puVar30 = local_5c0;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_600._4_4_);
        if (local_600._4_4_ < 3) goto LAB_002b28e8;
LAB_002b3240:
        local_600 = CONCAT44(local_600._4_4_,local_6c0);
        Mat::copySize((Mat *)&local_600,(Mat *)&local_6c0);
      }
      pdStack_5e8 = (double *)uStack_6a8;
      pdStack_5d8 = (double *)lStack_698;
      local_5e0 = (double *)local_6a0;
      lStack_5c8 = lStack_688;
      local_5d0 = local_690;
      local_5f0 = (double *)local_6b0;
    }
    uVar39 = lVar20 + 7U & 0xfffffffffffffff8;
    if (uVar60 == 5) {
      FUN_002a88f8(iVar59,iVar15,local_470,1,local_5f0,local_5b0 >> 2,1,local_650,
                   (int)(local_610 >> 2),local_710,(int)(local_6d0 >> 2),iVar12,local_4d0,
                   (int)(local_490 >> 2),uVar39);
    }
    else {
      FUN_002a7f00(iVar59,iVar15,local_470,1,local_5f0,local_5b0 >> 3,1,local_650,
                   (int)(local_610 >> 3),local_710,(int)(local_6d0 >> 3),iVar12,local_4d0,
                   (int)(local_490 >> 3),uVar39);
    }
    if (lStack_5c8 != 0) {
      piVar34 = (int *)(lStack_5c8 + 0x14);
      do {
        iVar15 = *piVar34;
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = iVar15 + -1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    lStack_5c8 = 0;
    local_5f0 = (double *)0x0;
    pdStack_5d8 = (double *)0x0;
    local_5e0 = (double *)0x0;
    pdStack_5e8 = (double *)0x0;
    if (0 < local_600._4_4_) {
      iVar15 = 0;
      puVar30 = local_5c0;
      do {
        *(undefined4 *)puVar30 = 0;
        iVar15 = iVar15 + 1;
        puVar30 = (undefined8 *)((long)puVar30 + 4);
      } while (iVar15 < local_600._4_4_);
    }
    if (local_5b8 != &local_5b0) {
      fastFree(local_5b8);
    }
    if (local_448 != 0) {
      piVar34 = (int *)(local_448 + 0x14);
      do {
        iVar15 = *piVar34;
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = iVar15 + -1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_480);
      }
    }
    local_448 = 0;
    local_470 = 0;
    local_458 = 0;
    local_460 = 0;
    lStack_468 = 0;
    if (0 < local_480._4_4_) {
      iVar15 = 0;
      puVar30 = local_440;
      do {
        *(undefined4 *)puVar30 = 0;
        iVar15 = iVar15 + 1;
        puVar30 = (undefined8 *)((long)puVar30 + 4);
      } while (iVar15 < local_480._4_4_);
    }
    if (local_438 != &local_430) {
      fastFree(local_438);
    }
    if (lStack_628 != 0) {
      piVar34 = (int *)(lStack_628 + 0x14);
      do {
        iVar15 = *piVar34;
        cVar14 = '\x01';
        bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
        if (bVar13) {
          *piVar34 = iVar15 + -1;
          cVar14 = ExclusiveMonitorsStatus();
        }
      } while (cVar14 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_660);
      }
    }
    lStack_628 = 0;
    local_650 = 0;
    lStack_638 = 0;
    local_640 = 0;
    uStack_648 = 0;
    if (0 < local_65c) {
      iVar15 = 0;
      puVar30 = local_620;
      do {
        *(undefined4 *)puVar30 = 0;
        iVar15 = iVar15 + 1;
        puVar30 = (undefined8 *)((long)puVar30 + 4);
      } while (iVar15 < local_65c);
    }
    if (local_618 != &local_610) {
      fastFree(local_618);
    }
    cVar14 = '\x01';
  }
  else {
    local_5f0 = (double *)0x0;
    local_600 = CONCAT44(local_600._4_4_,0x1010000);
    local_470 = 0;
    local_480._0_4_ = 0x2010000;
    uStack_5f8 = (Mat *)&local_5a0;
    p_Var25 = (_InputArray *)noArray();
    mulTransposed((_InputArray *)&local_600,(_OutputArray *)&local_480,true,p_Var25,1.0,-1);
    local_5f0 = (double *)(uVar24 + local_7b0);
    local_658 = (Mat *)&local_600;
    if (uVar38 == 3) {
LAB_002b2b38:
      local_5b8 = &local_5b0;
      local_5c0 = &uStack_5f8;
      local_5f0 = (double *)0x0;
      pdStack_5e8 = (double *)0x0;
      local_5e0 = (double *)0x0;
      pdStack_5d8 = (double *)0x0;
      uStack_5f8 = _UNK_002b3cf8;
      local_600 = _DAT_002b3cf0;
      local_5d0 = 0;
      lStack_5c8 = 0;
      uStack_5a8 = 0;
      local_5b0 = 0;
      local_740 = 0;
      local_73c = 0;
      local_750 = CONCAT44(local_750._4_4_,0x1010000);
      local_650 = 0;
      local_660 = 0x1010000;
      local_470 = 0;
      local_480 = CONCAT44(local_480._4_4_,0x2010000);
      local_728 = 0;
      local_724 = 0;
      local_738 = CONCAT44(local_738._4_4_,0x1010000);
      local_748 = (Mat *)&local_5a0;
      local_730 = (Mat *)&local_720;
      uStack_478 = (Mat *)&local_4e0;
      gemm((_InputArray *)&local_750,(_InputArray *)&local_738,1.0,(_InputArray *)&local_660,0.0,
           (_OutputArray *)&local_480,1);
      if (lStack_5c8 != 0) {
        piVar34 = (int *)(lStack_5c8 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_600);
        }
      }
      lStack_5c8 = 0;
      local_5f0 = (double *)0x0;
      pdStack_5d8 = (double *)0x0;
      local_5e0 = (double *)0x0;
      pdStack_5e8 = (double *)0x0;
      if (0 < local_600._4_4_) {
        iVar18 = 0;
        puVar30 = local_5c0;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_600._4_4_);
      }
      if (local_5b8 != &local_5b0) {
        fastFree(local_5b8);
      }
LAB_002b2c5c:
      pdVar36 = (double *)(uVar24 + local_7b0);
      if (uVar38 != 0) goto LAB_002b1d04;
      if (uVar60 == 5) {
        iVar15 = FUN_003cbc40(local_6b0,local_670,iVar15,local_4d0,local_490,iVar12);
      }
      else {
        iVar15 = FUN_003cc800();
      }
      cVar14 = iVar15 != 0;
    }
    else {
      bVar13 = uVar38 == 0;
      if (bVar13 != 0) goto LAB_002b2b38;
      local_5b0 = (long)iVar12 * (long)iVar18;
      uStack_478 = _UNK_002b3cf8;
      local_480 = _DAT_002b3cf0;
      pdVar36 = (double *)((long)local_5f0 + (long)(iVar15 * iVar12) * (long)iVar18);
      local_438 = &local_430;
      local_470 = 0;
      local_440 = &uStack_478;
      lStack_468 = 0;
      local_5c0 = &uStack_5f8;
      local_460 = 0;
      local_5b8 = &local_5b0;
      local_458 = 0;
      local_450 = 0;
      local_448 = 0;
      uStack_428 = 0;
      local_430 = 0;
      local_5e0 = (double *)((long)local_5f0 + local_5b0 * lVar20);
      local_754 = (uint)bVar13;
      uStack_5f8 = (Mat *)CONCAT44(iVar12,iVar15);
      local_5d0 = 0;
      lStack_5c8 = 0;
      local_600 = CONCAT44(2,uVar16) | 0x4000;
      local_768 = CONCAT44(local_768._4_4_,0x1010000);
      local_724 = (uint)bVar13;
      local_650 = (ulong)CONCAT14(bVar13,local_724);
      local_738 = CONCAT44(local_738._4_4_,0x1010000);
      local_660 = 0x2010000;
      local_750 = CONCAT44(local_750._4_4_,0x1010000);
      local_760 = (Mat *)&local_5a0;
      local_758 = (uint)bVar13;
      local_748 = (Mat *)&local_720;
      local_740 = local_754;
      local_73c = local_754;
      local_730 = (Mat *)&local_480;
      local_728 = local_754;
      pdStack_5e8 = local_5f0;
      pdStack_5d8 = local_5e0;
      uStack_5a8 = uVar21;
      gemm((_InputArray *)&local_768,(_InputArray *)&local_750,1.0,(_InputArray *)&local_738,0.0,
           (_OutputArray *)&local_660,1);
      if (local_448 != 0) {
        piVar34 = (int *)(local_448 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_480);
        }
      }
      local_448 = 0;
      local_470 = 0;
      local_458 = 0;
      local_460 = 0;
      lStack_468 = 0;
      if (0 < local_480._4_4_) {
        iVar18 = 0;
        puVar30 = local_440;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_480._4_4_);
      }
      if (local_438 != &local_430) {
        fastFree(local_438);
      }
      if (lStack_5c8 != 0) {
        piVar34 = (int *)(lStack_5c8 + 0x14);
        do {
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = *piVar34 + 1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
      }
      if (lStack_6e8 != 0) {
        piVar34 = (int *)(lStack_6e8 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_720);
        }
      }
      puVar31 = local_5b8;
      lStack_6e8 = 0;
      local_710 = (double *)0x0;
      pdStack_6f8 = (double *)0x0;
      local_700 = (double *)0x0;
      pdStack_708 = (double *)0x0;
      if (local_71c < 1) {
LAB_002b25a0:
        local_720 = (uint)local_600;
        if (2 < local_600._4_4_) goto LAB_002b2e44;
        local_714 = uStack_5f8._4_4_;
        local_718 = (undefined4)uStack_5f8;
        local_71c = local_600._4_4_;
        *local_6d8 = *local_5b8;
        local_6d8[1] = puVar31[1];
      }
      else {
        iVar18 = 0;
        puVar33 = local_6e0;
        do {
          *puVar33 = 0;
          iVar18 = iVar18 + 1;
          puVar33 = puVar33 + 1;
        } while (iVar18 < local_71c);
        if (local_71c < 3) goto LAB_002b25a0;
LAB_002b2e44:
        local_720 = (uint)local_600;
        Mat::copySize((Mat *)&local_720,(Mat *)&local_600);
      }
      pdStack_6f8 = pdStack_5d8;
      local_700 = local_5e0;
      lStack_6e8 = lStack_5c8;
      local_6f0 = local_5d0;
      pdStack_708 = pdStack_5e8;
      local_710 = local_5f0;
      if (lStack_5c8 != 0) {
        piVar34 = (int *)(lStack_5c8 + 0x14);
        do {
          iVar18 = *piVar34;
          cVar14 = '\x01';
          bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
          if (bVar13) {
            *piVar34 = iVar18 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
        if (iVar18 == 1) {
          Mat::deallocate((Mat *)&local_600);
        }
      }
      lStack_5c8 = 0;
      local_5f0 = (double *)0x0;
      pdStack_5d8 = (double *)0x0;
      local_5e0 = (double *)0x0;
      pdStack_5e8 = (double *)0x0;
      if (0 < local_600._4_4_) {
        iVar18 = 0;
        puVar30 = local_5c0;
        do {
          *(undefined4 *)puVar30 = 0;
          iVar18 = iVar18 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + 4);
        } while (iVar18 < local_600._4_4_);
      }
      if (local_5b8 == &local_5b0) goto LAB_002b1d04;
      fastFree(local_5b8);
      if (uVar38 != 3) goto LAB_002b2688;
LAB_002b1d10:
      if (uVar60 == 5) {
        cVar14 = FUN_003cd0e8(local_6b0,local_670,iVar15,local_4d0,local_490,iVar12);
      }
      else {
        cVar14 = FUN_003cd450();
      }
    }
    if (cVar14 == '\0') {
      uStack_478 = (Mat *)0x0;
      local_480 = 0;
      lStack_468 = 0;
      local_470 = 0;
      Mat::operator=((Mat *)&local_4e0,(Scalar_ *)&local_480);
    }
  }
  if (lStack_688 != 0) {
    piVar34 = (int *)(lStack_688 + 0x14);
    do {
      iVar15 = *piVar34;
      cVar1 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = iVar15 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_6c0);
    }
  }
  lStack_688 = 0;
  local_6b0 = 0;
  lStack_698 = 0;
  local_6a0 = 0;
  uStack_6a8 = 0;
  if (0 < local_6bc) {
    iVar15 = 0;
    piVar34 = local_680;
    do {
      *piVar34 = 0;
      iVar15 = iVar15 + 1;
      piVar34 = piVar34 + 1;
    } while (iVar15 < local_6bc);
  }
  if (local_678 != &local_670) {
    fastFree(local_678);
  }
  if (local_4a8 != 0) {
    piVar34 = (int *)(local_4a8 + 0x14);
    do {
      iVar15 = *piVar34;
      cVar1 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = iVar15 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_4e0);
    }
  }
  local_4a8 = 0;
  local_4d0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  local_4c8 = 0;
  if (0 < local_4dc) {
    iVar15 = 0;
    puVar33 = local_4a0;
    do {
      *puVar33 = 0;
      iVar15 = iVar15 + 1;
      puVar33 = puVar33 + 1;
    } while (iVar15 < local_4dc);
  }
  if (local_498 != &local_490) {
    fastFree(local_498);
  }
  if (lStack_6e8 != 0) {
    piVar34 = (int *)(lStack_6e8 + 0x14);
    do {
      iVar15 = *piVar34;
      cVar1 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = iVar15 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_720);
    }
  }
  lStack_6e8 = 0;
  local_710 = (double *)0x0;
  pdStack_6f8 = (double *)0x0;
  local_700 = (double *)0x0;
  pdStack_708 = (double *)0x0;
                    /* try { // try from 002b1e80 to 003b1e83 has its CatchHandler @ 002b2fa4 */
  if (0 < local_71c) {
                    /* try { // try from 002b1e88 to 003b2cbf has its CatchHandler @ 002b2f6c */
    iVar15 = 0;
    puVar33 = local_6e0;
    do {
      *puVar33 = 0;
      iVar15 = iVar15 + 1;
      puVar33 = puVar33 + 1;
    } while (iVar15 < local_71c);
  }
  if (local_6d8 != &local_6d0) {
    fastFree(local_6d8);
  }
  if ((local_418 != &local_408) && (local_418 != (double **)0x0)) {
    operator_delete__(local_418);
  }
LAB_002b1ec8:
  if (local_508 != 0) {
    piVar34 = (int *)(local_508 + 0x14);
    do {
      iVar15 = *piVar34;
      cVar1 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = iVar15 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_540);
    }
  }
  local_508 = 0;
  local_530 = (double *)0x0;
  local_518 = (double *)0x0;
  local_520 = (double *)0x0;
  local_528 = (double *)0x0;
  if (0 < local_53c) {
    iVar15 = 0;
    puVar33 = local_500;
    do {
      *puVar33 = 0;
      iVar15 = iVar15 + 1;
      puVar33 = puVar33 + 1;
    } while (iVar15 < local_53c);
  }
  if (local_4f8 != &local_4f0) {
    fastFree(local_4f8);
  }
  if (local_568 != 0) {
    piVar34 = (int *)(local_568 + 0x14);
    do {
      iVar15 = *piVar34;
      cVar1 = '\x01';
      bVar13 = (bool)ExclusiveMonitorPass(piVar34,0x10);
      if (bVar13) {
        *piVar34 = iVar15 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_5a0);
    }
  }
  local_568 = 0;
  local_590 = (double *)0x0;
  local_578 = 0;
  local_580 = 0;
  local_588 = 0;
  if (0 < local_59c) {
    iVar15 = 0;
    piVar34 = local_560;
    do {
      *piVar34 = 0;
      iVar15 = iVar15 + 1;
      piVar34 = piVar34 + 1;
    } while (iVar15 < local_59c);
  }
  if (local_558 != &local_550) {
    fastFree(local_558);
  }
  return cVar14;
}


==================================================================

### FUNC 002b3d20 (892 bytes) name=cvSolve

undefined1
cvSolve(cv *param_1,cv *param_2,cv *param_3,uint param_4,undefined8 param_5,AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  undefined1 uVar11;
  char *pcVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  if ((((local_120 & 0xfff) != (local_60 & 0xfff)) || (local_114 != local_58)) ||
     (local_54 != local_b4)) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_138,0x3c);
    uVar10 = s_A_type______x_type______A_cols___00467e70._56_4_;
    uVar9 = s_A_type______x_type______A_cols___00467e70._40_8_;
    uVar8 = s_A_type______x_type______A_cols___00467e70._32_8_;
    uVar7 = s_A_type______x_type______A_cols___00467e70._24_8_;
    uVar6 = s_A_type______x_type______A_cols___00467e70._16_8_;
    uVar5 = s_A_type______x_type______A_cols___00467e70._8_8_;
    uVar4 = s_A_type______x_type______A_cols___00467e70._0_8_;
    *(undefined8 *)(pcVar12 + 0x30) = s_A_type______x_type______A_cols___00467e70._48_8_;
    *(undefined4 *)(pcVar12 + 0x38) = uVar10;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    *(undefined8 *)(pcVar12 + 0x20) = uVar8;
    *(undefined8 *)(pcVar12 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_138,"int cvSolve(const CvArr*, const CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x60d);
    cv::String::deallocate((String *)&local_138);
  }
  uVar15 = param_4 & 0xffffffef;
  local_128 = 0;
  local_168[0] = 0x1010000;
  local_150[0] = 0x1010000;
  local_158 = 0;
  local_154 = 0;
  local_140 = 0;
  local_13c = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  if (uVar15 == 3) {
    uVar14 = 0x13;
  }
  else if (uVar15 == 1) {
    uVar14 = 0x11;
  }
  else if (uVar15 == 2) {
    uVar14 = 0x12;
  }
  else {
                    /* try { // try from 002b3e98 to 003b3e9b has its CatchHandler @ 002b426c */
    uVar14 = 0x14;
    if (local_118 <= local_114) {
      uVar14 = 0x10;
    }
    uVar15 = 4;
    if (local_118 <= local_114) {
      uVar15 = 0;
    }
  }
  if ((param_4 & 0x10) == 0) {
    uVar14 = uVar15;
  }
  local_160 = (Mat *)&local_120;
  local_148 = aMStack_c0;
  local_130 = (Mat *)&local_60;
  uVar11 = cv::solve((_InputArray *)local_168,(_InputArray *)local_150,(_OutputArray *)&local_138,
                     uVar14);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 002b3ed8 to 003b3edb has its CatchHandler @ 002b423c */
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
                    /* try { // try from 002b3ee0 to 003b3ee3 has its CatchHandler @ 002b426c */
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return uVar11;
}


==================================================================

### FUNC 002b4128 (3996 bytes) name=FUN_002b4128

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_002b4128(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                 _OutputArray *param_4,uint param_5)

{
  bool bVar1;
  uint uVar2;
  uint uVar3;
  bool bVar4;
  ulong uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined2 uVar10;
  ulong *puVar11;
  char cVar12;
  int iVar13;
  uint uVar14;
  int iVar15;
  uint uVar16;
  char *pcVar17;
  undefined4 *puVar18;
  int *piVar19;
  Mat *pMVar20;
  undefined8 *puVar21;
  ulong uVar22;
  long lVar23;
  ulong uVar24;
  uint uVar25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  ulong uVar29;
  int iVar30;
  int iVar31;
  uint uVar32;
  long lVar33;
  ulong local_710;
  uint local_6f4;
  long local_6e8;
  ulong local_6e0;
  long local_6d0;
  long local_6c8;
  ulong local_6c0;
  ulong local_6b8;
  undefined8 local_6a8;
  undefined8 local_6a0;
  undefined8 local_698;
  undefined8 local_690;
  undefined8 local_688;
  undefined8 local_680;
  undefined8 local_678;
  Mat *local_670;
  uint local_668;
  uint local_664;
  undefined4 local_660;
  int local_65c;
  undefined4 local_658;
  undefined4 local_654;
  ulong local_650;
  ulong uStack_648;
  long local_640;
  long lStack_638;
  undefined8 local_630;
  long lStack_628;
  undefined4 *local_620;
  ulong *local_618;
  ulong local_610 [2];
  undefined8 local_600;
  undefined8 local_5f8;
  ulong local_5f0;
  ulong uStack_5e8;
  long local_5e0;
  long lStack_5d8;
  undefined8 local_5d0;
  long lStack_5c8;
  undefined8 *local_5c0;
  ulong *local_5b8;
  ulong local_5b0;
  ulong local_5a8;
  uint local_598;
  int local_594;
  int local_590;
  int local_58c;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  int *local_558;
  undefined8 *local_550;
  undefined8 local_548;
  undefined8 local_540;
  uint local_538;
  int local_534;
  int local_530;
  int local_52c;
  ulong local_528;
  ulong local_520;
  long local_518;
  long local_510;
  undefined8 local_508;
  long local_500;
  int *local_4f8;
  ulong *local_4f0;
  ulong local_4e8;
  undefined8 local_4e0;
  uint local_4d8;
  int local_4d4;
  int local_4d0;
  undefined4 local_4cc;
  long local_4c8;
  long local_4c0;
  long local_4b8;
  long local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  int *local_498;
  ulong *local_490;
  ulong local_488;
  ulong local_480;
  uint local_478;
  int local_474;
  int local_470;
  int local_46c;
  ulong local_468;
  ulong local_460;
  long local_458;
  long local_450;
  undefined8 local_448;
  long local_440;
  int *local_438;
  ulong *local_430;
  ulong local_428;
  undefined8 local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  iVar13 = cv::_InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar20 = *(Mat **)(param_1 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(uint *)pMVar20;
    local_594 = *(int *)(pMVar20 + 4);
    local_590 = *(int *)(pMVar20 + 8);
    local_58c = *(int *)(pMVar20 + 0xc);
    local_588 = *(undefined8 *)(pMVar20 + 0x10);
    local_580 = *(undefined8 *)(pMVar20 + 0x18);
    local_578 = *(undefined8 *)(pMVar20 + 0x20);
    local_570 = *(undefined8 *)(pMVar20 + 0x28);
    local_568 = *(undefined8 *)(pMVar20 + 0x30);
    local_560 = *(long *)(pMVar20 + 0x38);
    local_540 = 0;
    local_548 = 0;
    if (local_560 != 0) {
      piVar19 = (int *)(local_560 + 0x14);
      do {
        cVar12 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar1) {
          *piVar19 = *piVar19 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      local_548 = **(undefined8 **)(pMVar20 + 0x48);
      local_540 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    }
    else {
      local_594 = 0;
      cv::Mat::copySize((Mat *)&local_598,pMVar20);
    }
  }
  else {
    cv::_InputArray::getMat_((int)param_1);
  }
  iVar30 = local_58c;
  iVar13 = local_590;
  uVar14 = local_598;
  uVar2 = local_598 & 0xfff;
  cVar12 = cv::_OutputArray::needed(param_3);
  uVar16 = 1;
  if (cVar12 == '\0') {
    uVar16 = cv::_OutputArray::needed(param_4);
    uVar16 = uVar16 & 0xff;
  }
                    /* catch() { ... } // from try @ 002b3cb0 with catch @ 002b41b8 */
  if (1 < uVar2 - 5) {
    local_6a8 = 0;
    local_6a0 = 0;
    pcVar17 = (char *)cv::String::allocate((String *)&local_6a8,0x20);
    uVar8 = s_type____CV_32F____type____CV_64F_00467cc8._24_8_;
    uVar7 = s_type____CV_32F____type____CV_64F_00467cc8._16_8_;
    uVar6 = s_type____CV_32F____type____CV_64F_00467cc8._8_8_;
    *(undefined8 *)pcVar17 = s_type____CV_32F____type____CV_64F_00467cc8._0_8_;
    *(undefined8 *)(pcVar17 + 8) = uVar6;
    *(undefined8 *)(pcVar17 + 0x10) = uVar7;
    *(undefined8 *)(pcVar17 + 0x18) = uVar8;
    cv::error(-0xd7,(String *)&local_6a8,
              "void cv::_SVDcompute(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::OutputArray, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x558);
                    /* try { // try from 002b4220 to 003b4223 has its CatchHandler @ 002b3664 */
    cv::String::deallocate((String *)&local_6a8);
  }
                    /* catch() { ... } // from try @ 002b37e4 with catch @ 002b4224
                       catch() { ... } // from try @ 002b39c0 with catch @ 002b4224
                       catch() { ... } // from try @ 002b3ba8 with catch @ 002b4224
                       catch() { ... } // from try @ 002b3bfc with catch @ 002b4224
                       catch() { ... } // from try @ 002b3cb8 with catch @ 002b4224
                       catch() { ... } // from try @ 002b409c with catch @ 002b4224 */
  if ((param_5 >> 1 & 1) == 0) {
    uVar25 = param_5 >> 2 & 1;
  }
  else {
    cv::_OutputArray::release(param_3);
    cv::_OutputArray::release(param_4);
    uVar16 = 0;
    uVar25 = uVar16;
  }
                    /* catch() { ... } // from try @ 002b376c with catch @ 002b422c */
                    /* catch() { ... } // from try @ 002b36dc with catch @ 002b4234
                       catch() { ... } // from try @ 002b3b28 with catch @ 002b4234
                       catch() { ... } // from try @ 002b40c4 with catch @ 002b4234 */
  bVar1 = iVar13 < iVar30;
  iVar31 = iVar13;
  if (bVar1) {
                    /* catch() { ... } // from try @ 002b3ed8 with catch @ 002b423c */
    iVar31 = iVar30;
    iVar30 = iVar13;
  }
  uVar32 = (uint)bVar1;
  iVar13 = iVar31;
  if (uVar25 == 0) {
    iVar13 = iVar30;
  }
  if (local_594 < 1) {
    local_6e0 = 0;
    uVar26 = 0;
    uVar27 = 0x20;
    local_6c0 = 0;
    local_6e8 = 0;
    local_6c8 = 0;
LAB_002b49d0:
    local_418 = auStack_408;
    local_6b8 = local_6e0;
    local_410 = uVar27;
  }
  else {
                    /* catch() { ... } // from try @ 002b3918 with catch @ 002b426c
                       catch() { ... } // from try @ 002b3e98 with catch @ 002b426c
                       catch() { ... } // from try @ 002b3ee0 with catch @ 002b426c */
                    /* catch() { ... } // from try @ 002b3bf4 with catch @ 002b4274 */
    local_6c8 = (long)iVar30 * local_550[(long)local_594 + -1];
    local_6e0 = local_6c8 + 0xfU & 0xfffffffffffffff0;
    local_418 = auStack_408;
    uVar26 = (long)iVar31 * local_550[(long)local_594 + -1] + 0xfU & 0xfffffffffffffff0;
    local_6c0 = local_6e0 * (long)iVar30;
    local_6e8 = (long)iVar13 * uVar26;
    uVar27 = local_6c8 + 0x20 + local_6c0 + local_6e8;
    local_410 = 0x408;
    if (uVar27 < 0x409) goto LAB_002b49d0;
    local_418 = operator_new__(uVar27);
    local_6b8 = local_6e0;
    local_410 = uVar27;
  }
  local_6d0 = (long)iVar13;
  lVar33 = (long)iVar30;
  uVar3 = uVar14 & 7;
  uVar25 = uVar2 + 0x42ff0000;
  uVar29 = (ulong)(local_418 + 0xf) & 0xfffffffffffffff0;
  local_4f8 = &local_530;
  local_4f0 = &local_4e8;
  uVar22 = 0x88442211UL >> (uVar3 << 2) & 0xf;
  uVar28 = (ulong)(int)((uVar14 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> (uVar3 << 1)) & 3));
  local_534 = 2;
  local_518 = 0;
  local_510 = 0;
  local_508 = 0;
  local_500 = 0;
  local_4e0 = 0;
  local_4e8 = 0;
  uVar27 = (long)iVar31 * uVar28;
  lVar23 = lVar33;
  local_710 = uVar27;
  local_530 = iVar30;
  local_52c = iVar31;
  local_528 = uVar29;
  local_520 = uVar29;
  if (uVar26 == 0) {
    local_538 = uVar25 | 0x4000;
    local_518 = 0;
  }
  else {
    local_538 = uVar25;
    if (iVar30 == 1) {
      uVar24 = 0;
      if (uVar22 != 0) {
        uVar24 = uVar27 / uVar22;
      }
      if (uVar27 - uVar24 * uVar22 != 0) goto LAB_002b4dc4;
LAB_002b4e6c:
      local_518 = 0;
      uVar14 = 0x4000;
      local_710 = uVar27;
    }
    else {
      uVar24 = 0;
      if (uVar22 != 0) {
        uVar24 = uVar26 / uVar22;
      }
      local_710 = uVar26;
      if (uVar26 != uVar24 * uVar22) {
LAB_002b4dc4:
        local_698 = 0;
        local_690 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_698,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        cv::error(-0xd,(String *)&local_698,"cv::Mat::Mat(int, int, int, void*, size_t)",
                  "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp"
                  ,0x19d);
        cv::String::deallocate((String *)&local_698);
        lVar23 = (long)local_530;
      }
      if (uVar27 - local_710 == 0) goto LAB_002b4e6c;
      local_518 = uVar27 - local_710;
      uVar14 = 0;
    }
    local_538 = local_538 | uVar14;
  }
  local_6f4 = uVar25 | 0x4000;
  local_510 = local_520 + lVar23 * local_710;
  *local_4f0 = local_710;
  local_4f0[1] = uVar28;
  local_518 = local_510 + local_518;
  local_498 = &local_4d0;
  uVar24 = lVar33 * uVar28;
  local_4c8 = uVar29 + local_6e8;
  local_4cc = 1;
  local_4b8 = local_4c8 + uVar24;
  local_490 = &local_488;
  local_438 = &local_470;
  local_430 = &local_428;
  local_4d4 = 2;
  local_4a8 = 0;
  local_4a0 = 0;
  local_4d8 = local_6f4;
  local_474 = 2;
  local_458 = 0;
  local_450 = 0;
  local_448 = 0;
  local_440 = 0;
  local_420 = 0;
  local_428 = 0;
  local_4d0 = iVar30;
  local_4c0 = local_4c8;
  local_4b0 = local_4b8;
  local_488 = uVar28;
  local_480 = uVar28;
  local_470 = iVar13;
  local_46c = iVar31;
  local_468 = uVar29;
  local_460 = uVar29;
  if (uVar26 == 0) {
    local_478 = local_6f4;
    local_450 = uVar29 + uVar27 * local_6d0;
    local_458 = 0;
  }
  else {
    local_478 = uVar25;
    if (iVar13 == 1) {
      uVar5 = 0;
      if (uVar22 != 0) {
        uVar5 = uVar27 / uVar22;
      }
      uVar26 = uVar27;
      if (uVar27 - uVar5 * uVar22 != 0) goto LAB_002b4ebc;
      local_450 = uVar29 + uVar27;
      local_478 = local_6f4;
    }
    else {
      uVar5 = 0;
      if (uVar22 != 0) {
        uVar5 = uVar26 / uVar22;
      }
      lVar23 = local_4c8;
      if (uVar26 != uVar5 * uVar22) {
LAB_002b4ebc:
        local_688 = 0;
        local_680 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_688,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        cv::error(-0xd,(String *)&local_688,"cv::Mat::Mat(int, int, int, void*, size_t)",
                  "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp"
                  ,0x19d);
        cv::String::deallocate((String *)&local_688);
        lVar23 = local_460 + uVar26 * (long)local_470;
      }
      local_450 = lVar23;
      if (uVar27 - uVar26 != 0) {
        local_458 = uVar27 - uVar26;
        uVar27 = uVar26;
        goto LAB_002b4528;
      }
      local_478 = local_478 | 0x4000;
    }
    local_458 = 0;
  }
LAB_002b4528:
  *local_430 = uVar27;
  local_430[1] = uVar28;
  local_458 = local_450 + local_458;
  local_660 = 0x42ff0000;
  local_620 = &local_658;
  local_618 = local_610;
  local_65c = 0;
  local_658 = 0;
  local_654 = 0;
  local_650 = 0;
  uStack_648 = 0;
  local_640 = 0;
  lStack_638 = 0;
  local_630 = 0;
  lStack_628 = 0;
  local_610[1] = 0;
  local_610[0] = 0;
  if (uVar16 == 0) goto LAB_002b4590;
  local_5b8 = &local_5b0;
  local_5c0 = &local_5f8;
  local_5f0 = uVar29 + local_6e8 + local_6c8 + 0xf & 0xfffffffffffffff0;
  local_600._4_4_ = 2;
  local_5f8 = (Mat *)CONCAT44(iVar30,iVar30);
  local_5e0 = 0;
  lStack_5d8 = 0;
  local_5d0 = 0;
  lStack_5c8 = 0;
  local_5a8 = 0;
  local_5b0 = 0;
  uStack_5e8 = local_5f0;
  if (local_6b8 == 0) {
    local_5e0 = local_5f0 + uVar24 * lVar33;
    local_600 = CONCAT44(2,local_6f4);
    lStack_5d8 = local_5e0;
    local_5b0 = uVar24;
    local_5a8 = uVar28;
  }
  else {
    if (iVar30 == 1) {
      uVar27 = 0;
      if (uVar22 != 0) {
        uVar27 = uVar24 / uVar22;
      }
      local_600._0_4_ = local_6f4;
      local_6c0 = uVar24;
      local_6b8 = uVar24;
      if (uVar24 - uVar27 * uVar22 != 0) goto LAB_002b4fe0;
LAB_002b5090:
      local_5e0 = 0;
      local_6b8 = uVar24;
    }
    else {
      uVar27 = 0;
      if (uVar22 != 0) {
        uVar27 = local_6b8 / uVar22;
      }
      local_600._0_4_ = uVar25;
      if (local_6b8 != uVar27 * uVar22) {
LAB_002b4fe0:
        local_678 = 0;
        local_670 = (Mat *)0x0;
        local_600._0_4_ = uVar25;
        pcVar17 = (char *)cv::String::allocate((String *)&local_678,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        cv::error(-0xd,(String *)&local_678,"cv::Mat::Mat(int, int, int, void*, size_t)",
                  "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp"
                  ,0x19d);
        cv::String::deallocate((String *)&local_678);
        local_6c0 = local_6b8 * (long)(int)local_5f8;
      }
      if (uVar24 == local_6b8) {
        local_600._0_4_ = (uint)local_600 | 0x4000;
        goto LAB_002b5090;
      }
      local_5e0 = uVar24 - local_6b8;
    }
    lStack_5d8 = uStack_5e8 + local_6c0;
    *local_5b8 = local_6b8;
    local_5e0 = lStack_5d8 + local_5e0;
    local_5b8[1] = uVar28;
    piVar19 = (int *)(lStack_5c8 + 0x14);
    if (lStack_5c8 != 0) {
      do {
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar4) {
          *piVar19 = *piVar19 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
  }
  if (lStack_628 != 0) {
    piVar19 = (int *)(lStack_628 + 0x14);
    do {
      iVar15 = *piVar19;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar4) {
        *piVar19 = iVar15 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_660);
    }
  }
  puVar11 = local_5b8;
  lStack_628 = 0;
  local_650 = 0;
  lStack_638 = 0;
  local_640 = 0;
  uStack_648 = 0;
  if (local_65c < 1) {
LAB_002b4c24:
    local_660 = (uint)local_600;
    if (2 < local_600._4_4_) goto LAB_002b4ea8;
    local_654 = local_5f8._4_4_;
    local_658 = (int)local_5f8;
    local_65c = local_600._4_4_;
    *local_618 = *local_5b8;
    local_618[1] = puVar11[1];
  }
  else {
    iVar15 = 0;
    puVar18 = local_620;
    do {
      *puVar18 = 0;
      iVar15 = iVar15 + 1;
      puVar18 = puVar18 + 1;
    } while (iVar15 < local_65c);
    if (local_65c < 3) goto LAB_002b4c24;
LAB_002b4ea8:
    local_660 = (uint)local_600;
    cv::Mat::copySize((Mat *)&local_660,(Mat *)&local_600);
  }
  lStack_638 = lStack_5d8;
  local_640 = local_5e0;
  lStack_628 = lStack_5c8;
  local_630 = local_5d0;
  uStack_648 = uStack_5e8;
  local_650 = local_5f0;
  if (lStack_5c8 != 0) {
    piVar19 = (int *)(lStack_5c8 + 0x14);
    do {
      iVar15 = *piVar19;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar4) {
        *piVar19 = iVar15 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar15 == 1) {
      cv::Mat::deallocate((Mat *)&local_600);
    }
  }
  lStack_5c8 = 0;
  local_5f0 = 0;
  lStack_5d8 = 0;
  local_5e0 = 0;
  uStack_5e8 = 0;
  if (0 < local_600._4_4_) {
    iVar15 = 0;
    puVar21 = local_5c0;
    do {
      *(undefined4 *)puVar21 = 0;
      iVar15 = iVar15 + 1;
      puVar21 = (undefined8 *)((long)puVar21 + 4);
    } while (iVar15 < local_600._4_4_);
  }
  if (local_5b8 != &local_5b0) {
    cv::fastFree(local_5b8);
  }
LAB_002b4590:
  if (iVar30 < iVar13) {
    local_5f8 = (Mat *)0x0;
    local_600 = 0;
    uStack_5e8 = 0;
    local_5f0 = 0;
    cv::Mat::operator=((Mat *)&local_478,(Scalar_ *)&local_600);
  }
  local_5f8 = (Mat *)&local_538;
  if (uVar32 == 0) {
    local_5f0 = (ulong)bVar1 << 0x20;
    local_600 = CONCAT44(local_600._4_4_,0x2010000);
    local_678 = CONCAT44(local_678._4_4_,0x1010000);
    local_670 = (Mat *)&local_598;
    local_668 = uVar32;
    local_664 = uVar32;
    cv::transpose((_InputArray *)&local_678,(_OutputArray *)&local_600);
  }
  else {
    local_5f0 = 0;
    local_600 = CONCAT44(local_600._4_4_,0x2010000);
    cv::Mat::copyTo((Mat *)&local_598,(_OutputArray *)&local_600);
  }
  if (uVar2 == 5) {
    iVar15 = 0;
    if (((uVar16 != 0) && (local_650 != 0)) && (iVar15 = iVar30, -1 < iVar13)) {
      iVar15 = iVar13;
    }
    FUN_002af238(DAT_002b5210,DAT_002b5218,local_528,local_428,local_4c8,local_650,local_610[0],
                 iVar31,iVar30,iVar15);
  }
  else {
    FUN_002b0688(DAT_002b5220,DAT_002b5228);
  }
  cv::Mat::copyTo((Mat *)&local_4d8,param_2);
  if (uVar16 != 0) {
    if (uVar32 == 0) {
      cVar12 = cv::_OutputArray::needed(param_3);
      if (cVar12 != '\0') {
        local_5f0 = 0;
        local_600 = CONCAT44(local_600._4_4_,0x1010000);
        local_5f8 = (Mat *)&local_478;
        cv::transpose((_InputArray *)&local_600,param_3);
      }
      cVar12 = cv::_OutputArray::needed(param_4);
      if (cVar12 != '\0') {
        cv::Mat::copyTo((Mat *)&local_660,param_4);
      }
    }
    else {
      cVar12 = cv::_OutputArray::needed(param_3);
      if (cVar12 != '\0') {
        local_5f0 = 0;
        local_600 = CONCAT44(local_600._4_4_,0x1010000);
        local_5f8 = (Mat *)&local_660;
        cv::transpose((_InputArray *)&local_600,param_3);
      }
      cVar12 = cv::_OutputArray::needed(param_4);
      if (cVar12 != '\0') {
        cv::Mat::copyTo((Mat *)&local_478,param_4);
      }
    }
  }
  if (lStack_628 != 0) {
    piVar19 = (int *)(lStack_628 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_660);
    }
  }
  lStack_628 = 0;
  local_650 = 0;
  lStack_638 = 0;
  local_640 = 0;
  uStack_648 = 0;
  if (0 < local_65c) {
    iVar13 = 0;
    puVar18 = local_620;
    do {
      *puVar18 = 0;
      iVar13 = iVar13 + 1;
      puVar18 = puVar18 + 1;
    } while (iVar13 < local_65c);
  }
  if (local_618 != local_610) {
    cv::fastFree(local_618);
  }
  if (local_440 != 0) {
    piVar19 = (int *)(local_440 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_478);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar13 = 0;
    piVar19 = local_438;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < local_474);
  }
  if (local_430 != &local_428) {
    cv::fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar19 = (int *)(local_4a0 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_4d8);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar13 = 0;
    piVar19 = local_498;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < local_4d4);
  }
  if (local_490 != &local_488) {
    cv::fastFree(local_490);
  }
  if (local_500 != 0) {
    piVar19 = (int *)(local_500 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_538);
    }
  }
  local_500 = 0;
  local_528 = 0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_534) {
    iVar13 = 0;
    piVar19 = local_4f8;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < local_534);
  }
  if (local_4f0 != &local_4e8) {
    cv::fastFree(local_4f0);
  }
  if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_560 != 0) {
    piVar19 = (int *)(local_560 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_598);
    }
  }
  local_560 = 0;
  local_588 = 0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar13 = 0;
    piVar19 = local_558;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < local_594);
  }
  if (local_550 != &local_548) {
    cv::fastFree(local_550);
  }
  return;
}


==================================================================

### FUNC 002b5230 (4 bytes) name=compute

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::SVD::compute(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&,
   cv::_OutputArray const&, int) */

void cv::SVD::compute(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                     _OutputArray *param_4,int param_5)

{
  bool bVar1;
  uint uVar2;
  uint uVar3;
  bool bVar4;
  ulong uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined2 uVar10;
  ulong *puVar11;
  char cVar12;
  int iVar13;
  uint uVar14;
  int iVar15;
  uint uVar16;
  char *pcVar17;
  undefined4 *puVar18;
  int *piVar19;
  Mat *pMVar20;
  undefined8 *puVar21;
  ulong uVar22;
  long lVar23;
  ulong uVar24;
  uint uVar25;
  ulong uVar26;
  ulong uVar27;
  ulong uVar28;
  ulong uVar29;
  int iVar30;
  int iVar31;
  uint uVar32;
  long lVar33;
  ulong uStack_710;
  uint uStack_6f4;
  long lStack_6e8;
  ulong uStack_6e0;
  long lStack_6d0;
  long lStack_6c8;
  ulong uStack_6c0;
  ulong uStack_6b8;
  undefined8 uStack_6a8;
  undefined8 uStack_6a0;
  undefined8 uStack_698;
  undefined8 uStack_690;
  undefined8 uStack_688;
  undefined8 uStack_680;
  undefined8 uStack_678;
  Mat *pMStack_670;
  uint uStack_668;
  uint uStack_664;
  undefined4 uStack_660;
  int iStack_65c;
  undefined4 uStack_658;
  undefined4 uStack_654;
  ulong uStack_650;
  ulong uStack_648;
  long lStack_640;
  long lStack_638;
  undefined8 uStack_630;
  long lStack_628;
  undefined4 *puStack_620;
  ulong *puStack_618;
  ulong auStack_610 [2];
  undefined8 uStack_600;
  undefined8 uStack_5f8;
  ulong uStack_5f0;
  ulong uStack_5e8;
  long lStack_5e0;
  long lStack_5d8;
  undefined8 uStack_5d0;
  long lStack_5c8;
  undefined8 *puStack_5c0;
  ulong *puStack_5b8;
  ulong uStack_5b0;
  ulong uStack_5a8;
  uint uStack_598;
  int iStack_594;
  int iStack_590;
  int iStack_58c;
  undefined8 uStack_588;
  undefined8 uStack_580;
  undefined8 uStack_578;
  undefined8 uStack_570;
  undefined8 uStack_568;
  long lStack_560;
  int *piStack_558;
  undefined8 *puStack_550;
  undefined8 uStack_548;
  undefined8 uStack_540;
  uint uStack_538;
  int iStack_534;
  int iStack_530;
  int iStack_52c;
  ulong uStack_528;
  ulong uStack_520;
  long lStack_518;
  long lStack_510;
  undefined8 uStack_508;
  long lStack_500;
  int *piStack_4f8;
  ulong *puStack_4f0;
  ulong uStack_4e8;
  undefined8 uStack_4e0;
  uint uStack_4d8;
  int iStack_4d4;
  int iStack_4d0;
  undefined4 uStack_4cc;
  long lStack_4c8;
  long lStack_4c0;
  long lStack_4b8;
  long lStack_4b0;
  undefined8 uStack_4a8;
  long lStack_4a0;
  int *piStack_498;
  ulong *puStack_490;
  ulong uStack_488;
  ulong uStack_480;
  uint uStack_478;
  int iStack_474;
  int iStack_470;
  int iStack_46c;
  ulong uStack_468;
  ulong uStack_460;
  long lStack_458;
  long lStack_450;
  undefined8 uStack_448;
  long lStack_440;
  int *piStack_438;
  ulong *puStack_430;
  ulong uStack_428;
  undefined8 uStack_420;
  undefined1 *puStack_418;
  ulong uStack_410;
  undefined1 auStack_408 [1032];
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar20 = *(Mat **)(param_1 + 8);
    piStack_558 = &iStack_590;
    puStack_550 = &uStack_548;
    uStack_598 = *(uint *)pMVar20;
    iStack_594 = *(int *)(pMVar20 + 4);
    iStack_590 = *(int *)(pMVar20 + 8);
    iStack_58c = *(int *)(pMVar20 + 0xc);
    uStack_588 = *(undefined8 *)(pMVar20 + 0x10);
    uStack_580 = *(undefined8 *)(pMVar20 + 0x18);
    uStack_578 = *(undefined8 *)(pMVar20 + 0x20);
    uStack_570 = *(undefined8 *)(pMVar20 + 0x28);
    uStack_568 = *(undefined8 *)(pMVar20 + 0x30);
    lStack_560 = *(long *)(pMVar20 + 0x38);
    uStack_540 = 0;
    uStack_548 = 0;
    if (lStack_560 != 0) {
      piVar19 = (int *)(lStack_560 + 0x14);
      do {
        cVar12 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar1) {
          *piVar19 = *piVar19 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      uStack_548 = **(undefined8 **)(pMVar20 + 0x48);
      uStack_540 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    }
    else {
      iStack_594 = 0;
      Mat::copySize((Mat *)&uStack_598,pMVar20);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar30 = iStack_58c;
  iVar13 = iStack_590;
  uVar14 = uStack_598;
  uVar2 = uStack_598 & 0xfff;
  cVar12 = _OutputArray::needed(param_3);
  uVar16 = 1;
  if (cVar12 == '\0') {
    uVar16 = _OutputArray::needed(param_4);
    uVar16 = uVar16 & 0xff;
  }
  if (1 < uVar2 - 5) {
    uStack_6a8 = 0;
    uStack_6a0 = 0;
    pcVar17 = (char *)String::allocate((String *)&uStack_6a8,0x20);
    uVar8 = s_type____CV_32F____type____CV_64F_00467cc8._24_8_;
    uVar7 = s_type____CV_32F____type____CV_64F_00467cc8._16_8_;
    uVar6 = s_type____CV_32F____type____CV_64F_00467cc8._8_8_;
    *(undefined8 *)pcVar17 = s_type____CV_32F____type____CV_64F_00467cc8._0_8_;
    *(undefined8 *)(pcVar17 + 8) = uVar6;
    *(undefined8 *)(pcVar17 + 0x10) = uVar7;
    *(undefined8 *)(pcVar17 + 0x18) = uVar8;
    error(-0xd7,(String *)&uStack_6a8,
          "void cv::_SVDcompute(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::OutputArray, int)"
          ,"/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x558);
    String::deallocate((String *)&uStack_6a8);
  }
  if (((uint)param_5 >> 1 & 1) == 0) {
    uVar25 = (uint)param_5 >> 2 & 1;
  }
  else {
    _OutputArray::release(param_3);
    _OutputArray::release(param_4);
    uVar16 = 0;
    uVar25 = uVar16;
  }
  bVar1 = iVar13 < iVar30;
  iVar31 = iVar13;
  if (bVar1) {
    iVar31 = iVar30;
    iVar30 = iVar13;
  }
  uVar32 = (uint)bVar1;
  iVar13 = iVar31;
  if (uVar25 == 0) {
    iVar13 = iVar30;
  }
  if (iStack_594 < 1) {
    uStack_6e0 = 0;
    uVar26 = 0;
    uVar27 = 0x20;
    uStack_6c0 = 0;
    lStack_6e8 = 0;
    lStack_6c8 = 0;
LAB_002b49d0:
    puStack_418 = auStack_408;
    uStack_6b8 = uStack_6e0;
    uStack_410 = uVar27;
  }
  else {
    lStack_6c8 = (long)iVar30 * puStack_550[(long)iStack_594 + -1];
    uStack_6e0 = lStack_6c8 + 0xfU & 0xfffffffffffffff0;
    puStack_418 = auStack_408;
    uVar26 = (long)iVar31 * puStack_550[(long)iStack_594 + -1] + 0xfU & 0xfffffffffffffff0;
    uStack_6c0 = uStack_6e0 * (long)iVar30;
    lStack_6e8 = (long)iVar13 * uVar26;
    uVar27 = lStack_6c8 + 0x20 + uStack_6c0 + lStack_6e8;
    uStack_410 = 0x408;
    if (uVar27 < 0x409) goto LAB_002b49d0;
    puStack_418 = operator_new__(uVar27);
    uStack_6b8 = uStack_6e0;
    uStack_410 = uVar27;
  }
  lStack_6d0 = (long)iVar13;
  lVar33 = (long)iVar30;
  uVar3 = uVar14 & 7;
  uVar25 = uVar2 + 0x42ff0000;
  uVar29 = (ulong)(puStack_418 + 0xf) & 0xfffffffffffffff0;
  piStack_4f8 = &iStack_530;
  puStack_4f0 = &uStack_4e8;
  uVar22 = 0x88442211UL >> (uVar3 << 2) & 0xf;
  uVar28 = (ulong)(int)((uVar14 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> (uVar3 << 1)) & 3));
  iStack_534 = 2;
  lStack_518 = 0;
  lStack_510 = 0;
  uStack_508 = 0;
  lStack_500 = 0;
  uStack_4e0 = 0;
  uStack_4e8 = 0;
  uVar27 = (long)iVar31 * uVar28;
  lVar23 = lVar33;
  uStack_710 = uVar27;
  iStack_530 = iVar30;
  iStack_52c = iVar31;
  uStack_528 = uVar29;
  uStack_520 = uVar29;
  if (uVar26 == 0) {
    uStack_538 = uVar25 | 0x4000;
    lStack_518 = 0;
  }
  else {
    uStack_538 = uVar25;
    if (iVar30 == 1) {
      uVar24 = 0;
      if (uVar22 != 0) {
        uVar24 = uVar27 / uVar22;
      }
      if (uVar27 - uVar24 * uVar22 != 0) goto LAB_002b4dc4;
LAB_002b4e6c:
      lStack_518 = 0;
      uVar14 = 0x4000;
      uStack_710 = uVar27;
    }
    else {
      uVar24 = 0;
      if (uVar22 != 0) {
        uVar24 = uVar26 / uVar22;
      }
      uStack_710 = uVar26;
      if (uVar26 != uVar24 * uVar22) {
LAB_002b4dc4:
        uStack_698 = 0;
        uStack_690 = 0;
        pcVar17 = (char *)String::allocate((String *)&uStack_698,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        error(-0xd,(String *)&uStack_698,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)&uStack_698);
        lVar23 = (long)iStack_530;
      }
      if (uVar27 - uStack_710 == 0) goto LAB_002b4e6c;
      lStack_518 = uVar27 - uStack_710;
      uVar14 = 0;
    }
    uStack_538 = uStack_538 | uVar14;
  }
  uStack_6f4 = uVar25 | 0x4000;
  lStack_510 = uStack_520 + lVar23 * uStack_710;
  *puStack_4f0 = uStack_710;
  puStack_4f0[1] = uVar28;
  lStack_518 = lStack_510 + lStack_518;
  piStack_498 = &iStack_4d0;
  uVar24 = lVar33 * uVar28;
  lStack_4c8 = uVar29 + lStack_6e8;
  uStack_4cc = 1;
  lStack_4b8 = lStack_4c8 + uVar24;
  puStack_490 = &uStack_488;
  piStack_438 = &iStack_470;
  puStack_430 = &uStack_428;
  iStack_4d4 = 2;
  uStack_4a8 = 0;
  lStack_4a0 = 0;
  uStack_4d8 = uStack_6f4;
  iStack_474 = 2;
  lStack_458 = 0;
  lStack_450 = 0;
  uStack_448 = 0;
  lStack_440 = 0;
  uStack_420 = 0;
  uStack_428 = 0;
  iStack_4d0 = iVar30;
  lStack_4c0 = lStack_4c8;
  lStack_4b0 = lStack_4b8;
  uStack_488 = uVar28;
  uStack_480 = uVar28;
  iStack_470 = iVar13;
  iStack_46c = iVar31;
  uStack_468 = uVar29;
  uStack_460 = uVar29;
  if (uVar26 == 0) {
    uStack_478 = uStack_6f4;
    lStack_450 = uVar29 + uVar27 * lStack_6d0;
    lStack_458 = 0;
  }
  else {
    uStack_478 = uVar25;
    if (iVar13 == 1) {
      uVar5 = 0;
      if (uVar22 != 0) {
        uVar5 = uVar27 / uVar22;
      }
      uVar26 = uVar27;
      if (uVar27 - uVar5 * uVar22 != 0) goto LAB_002b4ebc;
      lStack_450 = uVar29 + uVar27;
      uStack_478 = uStack_6f4;
    }
    else {
      uVar5 = 0;
      if (uVar22 != 0) {
        uVar5 = uVar26 / uVar22;
      }
      lVar23 = lStack_4c8;
      if (uVar26 != uVar5 * uVar22) {
LAB_002b4ebc:
        uStack_688 = 0;
        uStack_680 = 0;
        pcVar17 = (char *)String::allocate((String *)&uStack_688,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        error(-0xd,(String *)&uStack_688,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)&uStack_688);
        lVar23 = uStack_460 + uVar26 * (long)iStack_470;
      }
      lStack_450 = lVar23;
      if (uVar27 - uVar26 != 0) {
        lStack_458 = uVar27 - uVar26;
        uVar27 = uVar26;
        goto LAB_002b4528;
      }
      uStack_478 = uStack_478 | 0x4000;
    }
    lStack_458 = 0;
  }
LAB_002b4528:
  *puStack_430 = uVar27;
  puStack_430[1] = uVar28;
  lStack_458 = lStack_450 + lStack_458;
  uStack_660 = 0x42ff0000;
  puStack_620 = &uStack_658;
  puStack_618 = auStack_610;
  iStack_65c = 0;
  uStack_658 = 0;
  uStack_654 = 0;
  uStack_650 = 0;
  uStack_648 = 0;
  lStack_640 = 0;
  lStack_638 = 0;
  uStack_630 = 0;
  lStack_628 = 0;
  auStack_610[1] = 0;
  auStack_610[0] = 0;
  if (uVar16 == 0) goto LAB_002b4590;
  puStack_5b8 = &uStack_5b0;
  puStack_5c0 = &uStack_5f8;
  uStack_5f0 = uVar29 + lStack_6e8 + lStack_6c8 + 0xf & 0xfffffffffffffff0;
  uStack_600._4_4_ = 2;
  uStack_5f8 = (Mat *)CONCAT44(iVar30,iVar30);
  lStack_5e0 = 0;
  lStack_5d8 = 0;
  uStack_5d0 = 0;
  lStack_5c8 = 0;
  uStack_5a8 = 0;
  uStack_5b0 = 0;
  uStack_5e8 = uStack_5f0;
  if (uStack_6b8 == 0) {
    lStack_5e0 = uStack_5f0 + uVar24 * lVar33;
    uStack_600 = CONCAT44(2,uStack_6f4);
    lStack_5d8 = lStack_5e0;
    uStack_5b0 = uVar24;
    uStack_5a8 = uVar28;
  }
  else {
    if (iVar30 == 1) {
      uVar27 = 0;
      if (uVar22 != 0) {
        uVar27 = uVar24 / uVar22;
      }
      uStack_600._0_4_ = uStack_6f4;
      uStack_6c0 = uVar24;
      uStack_6b8 = uVar24;
      if (uVar24 - uVar27 * uVar22 != 0) goto LAB_002b4fe0;
LAB_002b5090:
      lStack_5e0 = 0;
      uStack_6b8 = uVar24;
    }
    else {
      uVar27 = 0;
      if (uVar22 != 0) {
        uVar27 = uStack_6b8 / uVar22;
      }
      uStack_600._0_4_ = uVar25;
      if (uStack_6b8 != uVar27 * uVar22) {
LAB_002b4fe0:
        uStack_678 = 0;
        pMStack_670 = (Mat *)0x0;
        uStack_600._0_4_ = uVar25;
        pcVar17 = (char *)String::allocate((String *)&uStack_678,0x1f);
        cVar12 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar17 + 0x18) = uVar9;
        *(undefined2 *)(pcVar17 + 0x1c) = uVar10;
        pcVar17[0x1e] = cVar12;
        *(undefined8 *)pcVar17 = uVar6;
        *(undefined8 *)(pcVar17 + 8) = uVar7;
        error(-0xd,(String *)&uStack_678,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)&uStack_678);
        uStack_6c0 = uStack_6b8 * (long)(int)uStack_5f8;
      }
      if (uVar24 == uStack_6b8) {
        uStack_600._0_4_ = (uint)uStack_600 | 0x4000;
        goto LAB_002b5090;
      }
      lStack_5e0 = uVar24 - uStack_6b8;
    }
    lStack_5d8 = uStack_5e8 + uStack_6c0;
    *puStack_5b8 = uStack_6b8;
    lStack_5e0 = lStack_5d8 + lStack_5e0;
    puStack_5b8[1] = uVar28;
    piVar19 = (int *)(lStack_5c8 + 0x14);
    if (lStack_5c8 != 0) {
      do {
        cVar12 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
        if (bVar4) {
          *piVar19 = *piVar19 + 1;
          cVar12 = ExclusiveMonitorsStatus();
        }
      } while (cVar12 != '\0');
    }
  }
  if (lStack_628 != 0) {
    piVar19 = (int *)(lStack_628 + 0x14);
    do {
      iVar15 = *piVar19;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar4) {
        *piVar19 = iVar15 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&uStack_660);
    }
  }
  puVar11 = puStack_5b8;
  lStack_628 = 0;
  uStack_650 = 0;
  lStack_638 = 0;
  lStack_640 = 0;
  uStack_648 = 0;
  if (iStack_65c < 1) {
LAB_002b4c24:
    uStack_660 = (uint)uStack_600;
    if (2 < uStack_600._4_4_) goto LAB_002b4ea8;
    uStack_654 = uStack_5f8._4_4_;
    uStack_658 = (int)uStack_5f8;
    iStack_65c = uStack_600._4_4_;
    *puStack_618 = *puStack_5b8;
    puStack_618[1] = puVar11[1];
  }
  else {
    iVar15 = 0;
    puVar18 = puStack_620;
    do {
      *puVar18 = 0;
      iVar15 = iVar15 + 1;
      puVar18 = puVar18 + 1;
    } while (iVar15 < iStack_65c);
    if (iStack_65c < 3) goto LAB_002b4c24;
LAB_002b4ea8:
    uStack_660 = (uint)uStack_600;
    Mat::copySize((Mat *)&uStack_660,(Mat *)&uStack_600);
  }
  lStack_638 = lStack_5d8;
  lStack_640 = lStack_5e0;
  lStack_628 = lStack_5c8;
  uStack_630 = uStack_5d0;
  uStack_648 = uStack_5e8;
  uStack_650 = uStack_5f0;
  if (lStack_5c8 != 0) {
    piVar19 = (int *)(lStack_5c8 + 0x14);
    do {
      iVar15 = *piVar19;
      cVar12 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar4) {
        *piVar19 = iVar15 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&uStack_600);
    }
  }
  lStack_5c8 = 0;
  uStack_5f0 = 0;
  lStack_5d8 = 0;
  lStack_5e0 = 0;
  uStack_5e8 = 0;
  if (0 < uStack_600._4_4_) {
    iVar15 = 0;
    puVar21 = puStack_5c0;
    do {
      *(undefined4 *)puVar21 = 0;
      iVar15 = iVar15 + 1;
      puVar21 = (undefined8 *)((long)puVar21 + 4);
    } while (iVar15 < uStack_600._4_4_);
  }
  if (puStack_5b8 != &uStack_5b0) {
    fastFree(puStack_5b8);
  }
LAB_002b4590:
  if (iVar30 < iVar13) {
    uStack_5f8 = (Mat *)0x0;
    uStack_600 = 0;
    uStack_5e8 = 0;
    uStack_5f0 = 0;
    Mat::operator=((Mat *)&uStack_478,(Scalar_ *)&uStack_600);
  }
  uStack_5f8 = (Mat *)&uStack_538;
  if (uVar32 == 0) {
    uStack_5f0 = (ulong)bVar1 << 0x20;
    uStack_600 = CONCAT44(uStack_600._4_4_,0x2010000);
    uStack_678 = CONCAT44(uStack_678._4_4_,0x1010000);
    pMStack_670 = (Mat *)&uStack_598;
    uStack_668 = uVar32;
    uStack_664 = uVar32;
    transpose((_InputArray *)&uStack_678,(_OutputArray *)&uStack_600);
  }
  else {
    uStack_5f0 = 0;
    uStack_600 = CONCAT44(uStack_600._4_4_,0x2010000);
    Mat::copyTo((Mat *)&uStack_598,(_OutputArray *)&uStack_600);
  }
  if (uVar2 == 5) {
    iVar15 = 0;
    if (((uVar16 != 0) && (uStack_650 != 0)) && (iVar15 = iVar30, -1 < iVar13)) {
      iVar15 = iVar13;
    }
    FUN_002af238(DAT_002b5210,DAT_002b5218,uStack_528,uStack_428,lStack_4c8,uStack_650,
                 auStack_610[0],iVar31,iVar30,iVar15);
  }
  else {
    FUN_002b0688(DAT_002b5220,DAT_002b5228);
  }
  Mat::copyTo((Mat *)&uStack_4d8,param_2);
  if (uVar16 != 0) {
    if (uVar32 == 0) {
      cVar12 = _OutputArray::needed(param_3);
      if (cVar12 != '\0') {
        uStack_5f0 = 0;
        uStack_600 = CONCAT44(uStack_600._4_4_,0x1010000);
        uStack_5f8 = (Mat *)&uStack_478;
        transpose((_InputArray *)&uStack_600,param_3);
      }
      cVar12 = _OutputArray::needed(param_4);
      if (cVar12 != '\0') {
        Mat::copyTo((Mat *)&uStack_660,param_4);
      }
    }
    else {
      cVar12 = _OutputArray::needed(param_3);
      if (cVar12 != '\0') {
        uStack_5f0 = 0;
        uStack_600 = CONCAT44(uStack_600._4_4_,0x1010000);
        uStack_5f8 = (Mat *)&uStack_660;
        transpose((_InputArray *)&uStack_600,param_3);
      }
      cVar12 = _OutputArray::needed(param_4);
      if (cVar12 != '\0') {
        Mat::copyTo((Mat *)&uStack_478,param_4);
      }
    }
  }
  if (lStack_628 != 0) {
    piVar19 = (int *)(lStack_628 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&uStack_660);
    }
  }
  lStack_628 = 0;
  uStack_650 = 0;
  lStack_638 = 0;
  lStack_640 = 0;
  uStack_648 = 0;
  if (0 < iStack_65c) {
    iVar13 = 0;
    puVar18 = puStack_620;
    do {
      *puVar18 = 0;
      iVar13 = iVar13 + 1;
      puVar18 = puVar18 + 1;
    } while (iVar13 < iStack_65c);
  }
  if (puStack_618 != auStack_610) {
    fastFree(puStack_618);
  }
  if (lStack_440 != 0) {
    piVar19 = (int *)(lStack_440 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&uStack_478);
    }
  }
  lStack_440 = 0;
  uStack_468 = 0;
  lStack_450 = 0;
  lStack_458 = 0;
  uStack_460 = 0;
  if (0 < iStack_474) {
    iVar13 = 0;
    piVar19 = piStack_438;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < iStack_474);
  }
  if (puStack_430 != &uStack_428) {
    fastFree(puStack_430);
  }
  if (lStack_4a0 != 0) {
    piVar19 = (int *)(lStack_4a0 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&uStack_4d8);
    }
  }
  lStack_4a0 = 0;
  lStack_4c8 = 0;
  lStack_4b0 = 0;
  lStack_4b8 = 0;
  lStack_4c0 = 0;
  if (0 < iStack_4d4) {
    iVar13 = 0;
    piVar19 = piStack_498;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < iStack_4d4);
  }
  if (puStack_490 != &uStack_488) {
    fastFree(puStack_490);
  }
  if (lStack_500 != 0) {
    piVar19 = (int *)(lStack_500 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&uStack_538);
    }
  }
  lStack_500 = 0;
  uStack_528 = 0;
  lStack_510 = 0;
  lStack_518 = 0;
  uStack_520 = 0;
  if (0 < iStack_534) {
    iVar13 = 0;
    piVar19 = piStack_4f8;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < iStack_534);
  }
  if (puStack_4f0 != &uStack_4e8) {
    fastFree(puStack_4f0);
  }
  if ((puStack_418 != auStack_408) && (puStack_418 != (undefined1 *)0x0)) {
    operator_delete__(puStack_418);
  }
  if (lStack_560 != 0) {
    piVar19 = (int *)(lStack_560 + 0x14);
    do {
      iVar13 = *piVar19;
      cVar12 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar19,0x10);
      if (bVar1) {
        *piVar19 = iVar13 + -1;
        cVar12 = ExclusiveMonitorsStatus();
      }
    } while (cVar12 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&uStack_598);
    }
  }
  lStack_560 = 0;
  uStack_588 = 0;
  uStack_570 = 0;
  uStack_578 = 0;
  uStack_580 = 0;
  if (0 < iStack_594) {
    iVar13 = 0;
    piVar19 = piStack_558;
    do {
      *piVar19 = 0;
      iVar13 = iVar13 + 1;
      piVar19 = piVar19 + 1;
    } while (iVar13 < iStack_594);
  }
  if (puStack_550 != &uStack_548) {
    fastFree(puStack_550);
  }
  return;
}


==================================================================

### FUNC 002b5240 (5404 bytes) name=invert

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::invert(cv::_InputArray const&, cv::_OutputArray const&, int) */

undefined1  [16] cv::invert(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  float fVar5;
  float fVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  uint uVar13;
  int iVar14;
  byte bVar15;
  int iVar16;
  int iVar17;
  char *pcVar18;
  long lVar19;
  undefined4 *puVar20;
  undefined8 *puVar21;
  Mat *pMVar22;
  Mat **ppMVar23;
  int *piVar24;
  ulong uVar25;
  float fVar26;
  float fVar27;
  undefined1 auVar28 [16];
  float fVar29;
  float fVar30;
  float fVar31;
  double dVar32;
  float fVar33;
  double dVar34;
  float fVar35;
  double dVar36;
  float fVar37;
  double dVar38;
  double dVar39;
  float fVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  double dVar45;
  float fVar46;
  double dVar47;
  double dVar48;
  undefined4 local_6a8 [2];
  Mat *local_6a0;
  undefined4 local_698;
  undefined4 local_694;
  undefined8 local_690;
  Mat *local_688;
  undefined4 local_680;
  undefined4 local_67c;
  undefined8 local_678;
  Mat *local_670;
  undefined4 local_668;
  undefined4 local_664;
  undefined8 local_660;
  Mat *pMStack_658;
  undefined8 local_650;
  undefined8 local_648;
  undefined8 local_640;
  undefined8 local_638;
  undefined8 local_630;
  long local_628;
  Mat **local_620;
  undefined8 *local_618;
  undefined8 local_610;
  undefined8 uStack_608;
  undefined8 local_600;
  Mat *pMStack_5f8;
  undefined8 local_5f0;
  undefined8 local_5e8;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  long local_5c8;
  Mat **local_5c0;
  undefined8 *local_5b8;
  undefined8 local_5b0;
  undefined8 uStack_5a8;
  uint local_5a0;
  int local_59c;
  int local_598;
  int local_594;
  double *local_590;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  long local_568;
  int *local_560;
  long *local_558;
  long local_550;
  long local_548;
  undefined8 local_540;
  undefined8 local_538;
  ulong local_530;
  ulong uStack_528;
  long local_520;
  long local_518;
  undefined8 local_510;
  long local_508;
  undefined8 *local_500;
  long *local_4f8;
  long local_4f0;
  long local_4e8;
  uint local_4e0;
  int local_4dc;
  int local_4d8;
  undefined4 local_4d4;
  double *local_4d0;
  double *local_4c8;
  double *local_4c0;
  double *local_4b8;
  undefined8 local_4b0;
  long local_4a8;
  int *local_4a0;
  long *local_498;
  long local_490;
  long local_488;
  uint local_480;
  int local_47c;
  int local_478;
  int local_474;
  double *local_470;
  double *local_468;
  double *local_460;
  double *local_458;
  undefined8 local_450;
  long local_448;
  int *local_440;
  long *local_438;
  long local_430;
  long local_428;
  undefined8 *local_420;
  ulong local_418;
  undefined8 local_410;
  undefined8 uStack_408;
  
  iVar16 = _InputArray::kind(param_1);
  if (iVar16 == 0x10000) {
    pMVar22 = *(Mat **)(param_1 + 8);
    local_560 = &local_598;
    local_558 = &local_550;
    local_5a0 = *(uint *)pMVar22;
    local_59c = *(int *)(pMVar22 + 4);
    local_598 = *(int *)(pMVar22 + 8);
    local_594 = *(int *)(pMVar22 + 0xc);
    local_590 = *(double **)(pMVar22 + 0x10);
    local_588 = *(undefined8 *)(pMVar22 + 0x18);
    local_580 = *(undefined8 *)(pMVar22 + 0x20);
    local_578 = *(undefined8 *)(pMVar22 + 0x28);
    local_570 = *(undefined8 *)(pMVar22 + 0x30);
    local_568 = *(long *)(pMVar22 + 0x38);
    local_548 = 0;
    local_550 = 0;
    if (local_568 != 0) {
      piVar24 = (int *)(local_568 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = *piVar24 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar22 + 4) < 3) {
      local_550 = **(long **)(pMVar22 + 0x48);
      local_548 = (*(long **)(pMVar22 + 0x48))[1];
    }
    else {
      local_59c = 0;
      Mat::copySize((Mat *)&local_5a0,pMVar22);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar13 = local_5a0;
  uVar1 = local_5a0 & 0xfff;
  if (1 < uVar1 - 5) {
    local_690 = 0;
    local_688 = (Mat *)0x0;
    pcVar18 = (char *)String::allocate((String *)&local_690,0x20);
    uVar9 = s_type____CV_32F____type____CV_64F_00467cc8._24_8_;
    uVar8 = s_type____CV_32F____type____CV_64F_00467cc8._16_8_;
    uVar7 = s_type____CV_32F____type____CV_64F_00467cc8._8_8_;
    *(undefined8 *)pcVar18 = s_type____CV_32F____type____CV_64F_00467cc8._0_8_;
    *(undefined8 *)(pcVar18 + 8) = uVar7;
    *(undefined8 *)(pcVar18 + 0x10) = uVar8;
    *(undefined8 *)(pcVar18 + 0x18) = uVar9;
    error(-0xd7,(String *)&local_690,"double cv::invert(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x31e);
    String::deallocate((String *)&local_690);
  }
  iVar14 = local_594;
  iVar17 = local_598;
  iVar16 = (uVar13 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3);
  lVar19 = (long)iVar16;
  if (param_3 == 1) {
    iVar2 = local_594;
    if (local_598 < local_594) {
      iVar2 = local_598;
    }
    local_418 = 0x408;
    local_420 = &local_410;
    uVar25 = (long)iVar16 * (long)(iVar2 + (local_598 + local_594) * iVar2) + 8;
    if (0x408 < uVar25) {
      local_420 = operator_new__(uVar25);
    }
    local_530 = (long)local_420 + lVar19 + -1 & (long)-iVar16;
    local_4f0 = (long)iVar16 * (long)iVar2;
    local_4d0 = (double *)(local_530 + (long)iVar16 * (long)(iVar17 * iVar2));
    local_430 = (long)iVar16 * (long)iVar14;
    local_4c0 = (double *)((long)local_4d0 + local_4f0);
    local_4f8 = &local_4f0;
    local_520 = local_530 + local_4f0 * iVar17;
    local_4e0 = uVar1 + 0x42ff0000 | 0x4000;
    local_460 = (double *)((long)local_4c0 + local_430 * iVar2);
    local_500 = &local_538;
    local_538 = (Mat *)CONCAT44(iVar2,iVar17);
    local_4a0 = &local_4d8;
    local_498 = &local_490;
    local_440 = &local_478;
    local_438 = &local_430;
    local_540 = CONCAT44(2,local_4e0);
    local_510 = 0;
    local_508 = 0;
    local_4dc = 2;
    local_4d4 = 1;
    local_4b0 = 0;
    local_4a8 = 0;
    local_47c = 2;
    local_474 = iVar14;
    local_680 = 0;
    local_67c = 0;
    local_690._0_4_ = 0x1010000;
    local_650 = 0;
    local_660 = CONCAT44(local_660._4_4_,0x2010000);
    local_5f0 = 0;
    local_600._0_4_ = 0x2010000;
    local_450 = 0;
    local_448 = 0;
    local_668 = 0;
    local_664 = 0;
    local_678._0_4_ = 0x2010000;
    local_688 = (Mat *)&local_5a0;
    local_670 = (Mat *)&local_4e0;
    pMStack_658 = (Mat *)&local_540;
    pMStack_5f8 = (Mat *)&local_480;
    uStack_528 = local_530;
    local_518 = local_520;
    local_4e8 = lVar19;
    local_4d8 = iVar2;
    local_4c8 = local_4d0;
    local_4b8 = local_4c0;
    local_490 = lVar19;
    local_488 = lVar19;
    local_480 = local_4e0;
    local_478 = iVar2;
    local_470 = local_4c0;
    local_468 = local_4c0;
    local_458 = local_460;
    local_428 = lVar19;
    local_418 = uVar25;
    SVD::compute((_InputArray *)&local_690,(_OutputArray *)&local_678,(_OutputArray *)&local_660,
                 (_OutputArray *)&local_600,0);
    local_618 = &local_610;
    local_650 = 0;
    local_620 = &pMStack_658;
    local_648 = 0;
    local_640 = 0;
    local_638 = 0;
    local_630 = 0;
    pMStack_658 = _UNK_002b6988;
    local_660 = _DAT_002b6980;
    local_628 = 0;
    local_698 = 0;
    local_694 = 0;
    uStack_608 = 0;
    local_610 = 0;
    local_6a8[0] = 0x1010000;
    local_680 = 0;
    local_67c = 0;
    local_690 = CONCAT44(local_690._4_4_,0x1010000);
    local_5f0 = 0;
    local_600 = CONCAT44(local_600._4_4_,0x1010000);
    local_668 = 0;
    local_664 = 0;
    local_678 = CONCAT44(local_678._4_4_,0x1010000);
    local_6a0 = (Mat *)&local_4e0;
    local_688 = (Mat *)&local_540;
    local_670 = (Mat *)&local_480;
    pMStack_5f8 = (Mat *)&local_660;
    SVD::backSubst((_InputArray *)local_6a8,(_InputArray *)&local_690,(_InputArray *)&local_678,
                   (_InputArray *)&local_600,param_2);
    if (local_628 != 0) {
      piVar24 = (int *)(local_628 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_660);
      }
    }
    local_628 = 0;
    local_650 = 0;
    local_638 = 0;
    local_640 = 0;
    local_648 = 0;
    if (0 < local_660._4_4_) {
      iVar16 = 0;
      ppMVar23 = local_620;
      do {
        *(undefined4 *)ppMVar23 = 0;
        iVar16 = iVar16 + 1;
        ppMVar23 = (Mat **)((long)ppMVar23 + 4);
      } while (iVar16 < local_660._4_4_);
    }
    if (local_618 != &local_610) {
      fastFree(local_618);
    }
    if (uVar1 == 5) {
      if (*(float *)local_4d0 < DAT_002b6990) goto LAB_002b5e5c;
      dVar43 = (double)(*(float *)((long)local_4d0 + (long)iVar14 * 4 + -4) / *(float *)local_4d0);
    }
    else if (*local_4d0 < DAT_002b6998) {
LAB_002b5e5c:
      dVar43 = 0.0;
    }
    else {
      dVar43 = local_4d0[(long)iVar14 + -1] / *local_4d0;
    }
    if (local_448 != 0) {
      piVar24 = (int *)(local_448 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_480);
      }
    }
    local_448 = 0;
    local_470 = (double *)0x0;
    local_458 = (double *)0x0;
    local_460 = (double *)0x0;
    local_468 = (double *)0x0;
    if (0 < local_47c) {
      iVar16 = 0;
      piVar24 = local_440;
      do {
        *piVar24 = 0;
        iVar16 = iVar16 + 1;
        piVar24 = piVar24 + 1;
      } while (iVar16 < local_47c);
    }
    if (local_438 != &local_430) {
      fastFree(local_438);
    }
    if (local_4a8 != 0) {
      piVar24 = (int *)(local_4a8 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_4e0);
      }
    }
    local_4a8 = 0;
    local_4d0 = (double *)0x0;
    local_4b8 = (double *)0x0;
    local_4c0 = (double *)0x0;
    local_4c8 = (double *)0x0;
    if (0 < local_4dc) {
      iVar16 = 0;
      piVar24 = local_4a0;
      do {
        *piVar24 = 0;
        iVar16 = iVar16 + 1;
        piVar24 = piVar24 + 1;
      } while (iVar16 < local_4dc);
    }
    if (local_498 != &local_490) {
      fastFree(local_498);
    }
    if (local_508 != 0) {
      piVar24 = (int *)(local_508 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_540);
      }
    }
    local_508 = 0;
    local_530 = 0;
    local_518 = 0;
    local_520 = 0;
    uStack_528 = 0;
    if (0 < local_540._4_4_) {
      iVar16 = 0;
      puVar21 = local_500;
      do {
        *(undefined4 *)puVar21 = 0;
        iVar16 = iVar16 + 1;
        puVar21 = (undefined8 *)((long)puVar21 + 4);
      } while (iVar16 < local_540._4_4_);
    }
    if (local_4f8 != &local_4f0) {
      fastFree(local_4f8);
    }
  }
  else {
    if (local_598 != local_594) {
      local_678 = 0;
      local_670 = (Mat *)0x0;
      puVar20 = (undefined4 *)String::allocate((String *)&local_678,6);
      uVar10 = DAT_00467eb4;
      *puVar20 = DAT_00467eb0;
      *(undefined2 *)(puVar20 + 1) = uVar10;
      error(-0xd7,(String *)&local_678,"double cv::invert(cv::InputArray, cv::OutputArray, int)",
            "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x336);
      String::deallocate((String *)&local_678);
    }
    if (param_3 != 2) {
      if ((param_3 != 3) && (param_3 != 0)) {
        local_540 = 0;
        local_538 = (Mat *)0x0;
        puVar21 = (undefined8 *)String::allocate((String *)&local_540,0x30);
        uVar12 = s_CHOLESKY_00467ee0._0_8_;
        uVar11 = DAT_00467ed8;
        uVar9 = _DAT_00467ed0;
        uVar8 = DAT_00467ec8;
        uVar7 = DAT_00467ec0;
        *puVar21 = DAT_00467eb8;
        puVar21[1] = uVar7;
        puVar21[2] = uVar8;
        puVar21[3] = uVar9;
        puVar21[4] = uVar11;
        puVar21[5] = uVar12;
        error(-0xd7,(String *)&local_540,"double cv::invert(cv::InputArray, cv::OutputArray, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x34a);
        String::deallocate((String *)&local_540);
      }
      _OutputArray::create(param_2,iVar14,iVar14,uVar1,-1,false,0);
      iVar17 = _InputArray::kind((_InputArray *)param_2);
      if (iVar17 == 0x10000) {
        local_4a0 = &local_4d8;
        local_498 = &local_490;
        pMVar22 = *(Mat **)(param_2 + 8);
        local_4e0 = *(uint *)pMVar22;
        local_4d0 = *(double **)(pMVar22 + 0x10);
        local_4dc = *(int *)(pMVar22 + 4);
        local_4d8 = *(int *)(pMVar22 + 8);
        local_4d4 = *(undefined4 *)(pMVar22 + 0xc);
        local_4c8 = *(double **)(pMVar22 + 0x18);
        local_4c0 = *(double **)(pMVar22 + 0x20);
        local_4b8 = *(double **)(pMVar22 + 0x28);
        local_4b0 = *(undefined8 *)(pMVar22 + 0x30);
        local_4a8 = *(long *)(pMVar22 + 0x38);
        local_488 = 0;
        local_490 = 0;
        if (local_4a8 != 0) {
          piVar24 = (int *)(local_4a8 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
            if (bVar4) {
              *piVar24 = *piVar24 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (2 < *(int *)(pMVar22 + 4)) {
          local_4dc = 0;
          Mat::copySize((Mat *)&local_4e0,pMVar22);
          goto LAB_002b5468;
        }
        local_490 = **(long **)(pMVar22 + 0x48);
        local_488 = (*(long **)(pMVar22 + 0x48))[1];
        if (3 < iVar14) goto LAB_002b55e4;
LAB_002b5470:
        if (iVar14 == 2) {
          if (uVar1 == 5) {
            fVar29 = *(float *)((long)local_590 + local_550 + 4);
            fVar5 = *(float *)local_590 * fVar29 -
                    *(float *)((long)local_590 + 4) * *(float *)((long)local_590 + local_550);
            if (fVar5 == 0.0) goto LAB_002b5e08;
            fVar5 = 1.0 / fVar5;
            *(float *)((long)local_4d0 + local_490 + 4) = *(float *)local_590 * fVar5;
            *(float *)local_4d0 = fVar29 * fVar5;
            fVar29 = *(float *)((long)local_590 + local_550);
            *(float *)((long)local_4d0 + 4) = -*(float *)((long)local_590 + 4) * fVar5;
            *(float *)((long)local_4d0 + local_490) = -fVar29 * fVar5;
          }
          else {
            dVar32 = *(double *)((long)local_590 + local_550 + 8);
            dVar43 = *local_590 * dVar32 - local_590[1] * *(double *)((long)local_590 + local_550);
            if (dVar43 == 0.0) {
LAB_002b5e08:
              local_418 = 0;
              local_420 = (undefined8 *)0x0;
              uStack_408 = 0;
              local_410 = 0;
              Mat::operator=((Mat *)&local_4e0,(Scalar_ *)&local_420);
              dVar43 = 0.0;
              goto LAB_002b54b4;
            }
            dVar43 = 1.0 / dVar43;
            *(double *)((long)local_4d0 + local_490 + 8) = *local_590 * dVar43;
            *local_4d0 = dVar32 * dVar43;
            dVar32 = *(double *)((long)local_590 + local_550);
            local_4d0[1] = -(local_590[1] * dVar43);
            *(double *)((long)local_4d0 + local_490) = -(dVar32 * dVar43);
          }
        }
        else if (iVar14 == 3) {
          if (uVar1 == 5) {
            lVar19 = (local_550 + 4) * 2;
            fVar30 = *(float *)((long)local_590 + local_550 * 2);
            fVar33 = *(float *)((long)local_590 + local_550);
            fVar37 = *(float *)((long)local_590 + local_550 + 8);
            fVar35 = *(float *)((long)local_590 + lVar19);
            fVar40 = *(float *)((long)local_590 + lVar19 + -4);
            fVar26 = *(float *)((long)local_590 + local_550 + 4);
            fVar31 = *(float *)((long)local_590 + 4);
            fVar27 = *(float *)local_590;
            fVar29 = fVar26 * fVar35 - fVar37 * fVar40;
            fVar46 = *(float *)(local_590 + 1);
            fVar6 = fVar40 * fVar33 - fVar26 * fVar30;
            fVar5 = (fVar27 * fVar29 - fVar31 * (fVar35 * fVar33 - fVar37 * fVar30)) +
                    fVar6 * fVar46;
            if (fVar5 == 0.0) goto LAB_002b5e08;
            fVar5 = 1.0 / fVar5;
            *(float *)local_4d0 = fVar29 * fVar5;
            *(float *)((long)local_4d0 + 4) = (fVar40 * fVar46 - fVar35 * fVar31) * fVar5;
            *(float *)(local_4d0 + 1) = (fVar37 * fVar31 - fVar26 * fVar46) * fVar5;
            *(float *)((long)local_4d0 + local_490) = (fVar37 * fVar30 - fVar35 * fVar33) * fVar5;
            *(float *)((long)local_4d0 + local_490 + 4) =
                 (fVar27 * fVar35 - fVar30 * fVar46) * fVar5;
            *(float *)((long)local_4d0 + local_490 + 8) =
                 (fVar33 * fVar46 - fVar27 * fVar37) * fVar5;
            *(float *)((long)local_4d0 + local_490 * 2) = fVar6 * fVar5;
            *(float *)((long)local_4d0 + local_490 * 2 + 4) =
                 (fVar31 * fVar30 - fVar27 * fVar40) * fVar5;
            *(float *)((long)local_4d0 + local_490 * 2 + 8) =
                 (fVar27 * fVar26 - fVar31 * fVar33) * fVar5;
          }
          else {
            lVar19 = (local_550 + 8) * 2;
            dVar32 = *(double *)((long)local_590 + local_550);
            dVar47 = *(double *)((long)local_590 + local_550 * 2);
            dVar36 = *(double *)((long)local_590 + local_550 + 0x10);
            dVar34 = *(double *)((long)local_590 + lVar19);
            dVar44 = *(double *)((long)local_590 + lVar19 + -8);
            dVar45 = *(double *)((long)local_590 + local_550 + 8);
            dVar39 = local_590[1];
            dVar42 = dVar45 * dVar34 - dVar36 * dVar44;
            dVar38 = *local_590;
            dVar48 = local_590[2];
            dVar41 = dVar44 * dVar32 - dVar45 * dVar47;
            dVar43 = (dVar38 * dVar42 - dVar39 * (dVar34 * dVar32 - dVar36 * dVar47)) +
                     dVar41 * dVar48;
            if (dVar43 == 0.0) goto LAB_002b5e08;
            dVar43 = 1.0 / dVar43;
            local_4d0[1] = (dVar44 * dVar48 - dVar34 * dVar39) * dVar43;
            *local_4d0 = dVar42 * dVar43;
            local_4d0[2] = (dVar36 * dVar39 - dVar45 * dVar48) * dVar43;
            *(double *)((long)local_4d0 + local_490) = (dVar36 * dVar47 - dVar34 * dVar32) * dVar43;
            *(double *)((long)local_4d0 + local_490 + 8) =
                 (dVar38 * dVar34 - dVar47 * dVar48) * dVar43;
            *(double *)((long)local_4d0 + local_490 + 0x10) =
                 (dVar32 * dVar48 - dVar38 * dVar36) * dVar43;
            *(double *)((long)local_4d0 + local_490 * 2) = dVar41 * dVar43;
            *(double *)((long)local_4d0 + local_490 * 2 + 8) =
                 (dVar39 * dVar47 - dVar38 * dVar44) * dVar43;
            *(double *)((long)local_4d0 + local_490 * 2 + 0x10) =
                 (dVar38 * dVar45 - dVar39 * dVar32) * dVar43;
          }
        }
        else if (uVar1 == 5) {
          if (*(float *)local_590 == 0.0) goto LAB_002b5e08;
          *(float *)local_4d0 = 1.0 / *(float *)local_590;
        }
        else {
          if (*local_590 == 0.0) goto LAB_002b5e08;
          *local_4d0 = 1.0 / *local_590;
        }
        dVar43 = 1.0;
      }
      else {
        _InputArray::getMat_((int)param_2);
LAB_002b5468:
        if (iVar14 < 4) goto LAB_002b5470;
LAB_002b55e4:
        local_420 = &local_410;
        iVar17 = iVar16 * iVar14 * iVar14;
        local_418 = 0x408;
        if (0x408 < iVar17) {
          local_420 = operator_new__((long)iVar17);
        }
        local_430 = (long)iVar16 * (long)iVar14;
        local_440 = &local_478;
        local_460 = (double *)((long)local_420 + local_430 * iVar14);
        local_438 = &local_430;
        local_480 = uVar1 + 0x42ff0000 | 0x4000;
        local_530 = 0;
        local_540 = CONCAT44(local_540._4_4_,0x2010000);
        local_47c = 2;
        local_478 = iVar14;
        local_474 = iVar14;
        local_450 = 0;
        local_448 = 0;
        local_538 = (Mat *)&local_480;
        local_470 = (double *)local_420;
        local_468 = (double *)local_420;
        local_458 = local_460;
        local_428 = lVar19;
        local_418 = (long)iVar17;
        Mat::copyTo((Mat *)&local_5a0,(_OutputArray *)&local_540);
        local_600 = CONCAT44(local_600._4_4_,0x3010000);
        local_5f0 = 0;
        local_538 = (Mat *)_UNK_002b69a8;
        local_540 = _DAT_002b69a0;
        uStack_528 = 0;
        local_530 = 0;
        pMStack_5f8 = (Mat *)&local_4e0;
        setIdentity((_InputOutputArray *)&local_600,(Scalar_ *)&local_540);
        if (param_3 != 0) {
LAB_002b5704:
          if ((param_3 != 3) || (uVar1 != 5)) {
            bVar15 = FUN_003cd450(local_470,local_430,iVar14,local_4d0,local_490,iVar14);
          }
          else {
            bVar15 = FUN_003cd0e8(local_470,local_430,iVar14,local_4d0,local_490,iVar14);
          }
        }
        else {
          if (uVar1 == 5) {
            iVar16 = FUN_003cbc40(local_470,local_430,iVar14,local_4d0,local_490,iVar14);
          }
          else {
            if (uVar1 != 6) goto LAB_002b5704;
            iVar16 = FUN_003cc800(local_470,local_430,iVar14,local_4d0,local_490,iVar14);
          }
          bVar15 = iVar16 != 0;
        }
        if (bVar15 == 0) {
          local_538 = (Mat *)0x0;
          local_540 = 0;
          uStack_528 = 0;
          local_530 = 0;
          Mat::operator=((Mat *)&local_4e0,(Scalar_ *)&local_540);
        }
        dVar43 = (double)bVar15;
        if (local_448 != 0) {
          piVar24 = (int *)(local_448 + 0x14);
          do {
            iVar16 = *piVar24;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
            if (bVar4) {
              *piVar24 = iVar16 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar16 == 1) {
            Mat::deallocate((Mat *)&local_480);
          }
        }
        local_448 = 0;
        local_470 = (double *)0x0;
        local_458 = (double *)0x0;
        local_460 = (double *)0x0;
        local_468 = (double *)0x0;
        if (0 < local_47c) {
          iVar16 = 0;
          piVar24 = local_440;
          do {
            *piVar24 = 0;
            iVar16 = iVar16 + 1;
            piVar24 = piVar24 + 1;
          } while (iVar16 < local_47c);
        }
        if (local_438 != &local_430) {
          fastFree(local_438);
        }
        if ((local_420 != &local_410) && (local_420 != (undefined8 *)0x0)) {
          operator_delete__(local_420);
        }
      }
LAB_002b54b4:
      if (local_4a8 != 0) {
        piVar24 = (int *)(local_4a8 + 0x14);
        do {
          iVar16 = *piVar24;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
          if (bVar4) {
            *piVar24 = iVar16 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar16 == 1) {
          Mat::deallocate((Mat *)&local_4e0);
        }
      }
      local_4a8 = 0;
      local_4d0 = (double *)0x0;
      local_4b8 = (double *)0x0;
      local_4c0 = (double *)0x0;
      local_4c8 = (double *)0x0;
      if (0 < local_4dc) {
        iVar16 = 0;
        piVar24 = local_4a0;
        do {
          *piVar24 = 0;
          iVar16 = iVar16 + 1;
          piVar24 = piVar24 + 1;
        } while (iVar16 < local_4dc);
      }
      if (local_498 != &local_490) {
        fastFree(local_498);
      }
      goto LAB_002b5d30;
    }
    local_420 = &local_410;
    uVar25 = (long)iVar16 * (long)(iVar14 + iVar14 * iVar14 * 2) + 8;
    local_418 = 0x408;
    if (0x408 < uVar25) {
      local_420 = operator_new__(uVar25);
    }
    local_4f0 = (long)iVar16 * (long)iVar14;
    local_530 = (long)local_420 + lVar19 + -1 & (long)-iVar16;
    local_520 = local_530 + local_4f0 * iVar14;
    local_4d0 = (double *)(local_530 + (long)iVar16 * (long)(iVar14 * iVar14));
    local_4e0 = uVar1 + 0x42ff0000 | 0x4000;
    local_500 = &local_538;
    local_4c0 = (double *)((long)local_4d0 + local_4f0);
    local_4f8 = &local_4f0;
    local_460 = (double *)((long)local_4c0 + local_4f0 * iVar14);
    local_4a0 = &local_4d8;
    local_498 = &local_490;
    local_440 = &local_478;
    local_438 = &local_430;
    local_538 = (Mat *)CONCAT44(iVar14,iVar14);
    local_510 = 0;
    local_508 = 0;
    local_540 = CONCAT44(2,uVar1 + 0x42ff0000) | 0x4000;
    local_4dc = 2;
    local_4d8 = iVar14;
    local_4d4 = 1;
    local_4b0 = 0;
    local_4a8 = 0;
    local_47c = 2;
    local_478 = iVar14;
    local_474 = iVar14;
    local_450 = 0;
    local_650 = 0;
    local_660._0_4_ = 0x2010000;
    local_5f0 = 0;
    local_600._0_4_ = 0x2010000;
    local_448 = 0;
    local_668 = 0;
    local_664 = 0;
    local_678._0_4_ = 0x1010000;
    local_670 = (Mat *)&local_5a0;
    pMStack_658 = (Mat *)&local_4e0;
    pMStack_5f8 = (Mat *)&local_480;
    uStack_528 = local_530;
    local_518 = local_520;
    local_4e8 = lVar19;
    local_4c8 = local_4d0;
    local_4b8 = local_4c0;
    local_490 = lVar19;
    local_488 = lVar19;
    local_480 = local_4e0;
    local_470 = local_4c0;
    local_468 = local_4c0;
    local_458 = local_460;
    local_430 = local_4f0;
    local_428 = lVar19;
    local_418 = uVar25;
    eigen((_InputArray *)&local_678,(_OutputArray *)&local_660,(_OutputArray *)&local_600);
    local_660._0_4_ = 0x1010000;
    local_650 = 0;
    local_5f0 = 0;
    local_600 = CONCAT44(local_600._4_4_,0x2010000);
    pMStack_658 = (Mat *)&local_480;
    pMStack_5f8 = (Mat *)&local_540;
    transpose((_InputArray *)&local_660,(_OutputArray *)&local_600);
    local_5b8 = &local_5b0;
    local_5f0 = 0;
    local_5c0 = &pMStack_5f8;
    local_5e8 = 0;
    local_5e0 = 0;
    local_5d8 = 0;
    local_5d0 = 0;
    pMStack_5f8 = _UNK_002b6988;
    local_600 = _DAT_002b6980;
    local_5c8 = 0;
    local_680 = 0;
    uStack_5a8 = 0;
    local_5b0 = 0;
    local_67c = 0;
    local_690 = CONCAT44(local_690._4_4_,0x1010000);
    local_650 = 0;
    local_660 = CONCAT44(local_660._4_4_,0x1010000);
    local_698 = 0;
    local_694 = 0;
    local_6a8[0] = 0x1010000;
    local_668 = 0;
    local_664 = 0;
    local_678 = CONCAT44(local_678._4_4_,0x1010000);
    local_6a0 = (Mat *)&local_4e0;
    local_688 = (Mat *)&local_540;
    local_670 = (Mat *)&local_480;
    pMStack_658 = (Mat *)&local_600;
    SVD::backSubst((_InputArray *)local_6a8,(_InputArray *)&local_690,(_InputArray *)&local_678,
                   (_InputArray *)&local_660,param_2);
    if (local_5c8 != 0) {
      piVar24 = (int *)(local_5c8 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_600);
      }
    }
    local_5c8 = 0;
    local_5f0 = 0;
    local_5d8 = 0;
    local_5e0 = 0;
    local_5e8 = 0;
    if (0 < local_600._4_4_) {
      iVar16 = 0;
      ppMVar23 = local_5c0;
      do {
        *(undefined4 *)ppMVar23 = 0;
        iVar16 = iVar16 + 1;
        ppMVar23 = (Mat **)((long)ppMVar23 + 4);
      } while (iVar16 < local_600._4_4_);
    }
    if (local_5b8 != &local_5b0) {
      fastFree(local_5b8);
    }
    if (uVar1 == 5) {
      if (*(float *)local_4d0 < DAT_002b6990) goto LAB_002b61ec;
      dVar43 = (double)(*(float *)((long)local_4d0 + (long)iVar14 * 4 + -4) / *(float *)local_4d0);
    }
    else if (DAT_002b6998 <= *local_4d0) {
      dVar43 = local_4d0[(long)iVar14 + -1] / *local_4d0;
    }
    else {
LAB_002b61ec:
      dVar43 = 0.0;
    }
    if (local_448 != 0) {
      piVar24 = (int *)(local_448 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_480);
      }
    }
    local_448 = 0;
    local_470 = (double *)0x0;
    local_458 = (double *)0x0;
    local_460 = (double *)0x0;
    local_468 = (double *)0x0;
    if (0 < local_47c) {
      iVar16 = 0;
      piVar24 = local_440;
      do {
        *piVar24 = 0;
        iVar16 = iVar16 + 1;
        piVar24 = piVar24 + 1;
      } while (iVar16 < local_47c);
    }
    if (local_438 != &local_430) {
      fastFree(local_438);
    }
    if (local_4a8 != 0) {
      piVar24 = (int *)(local_4a8 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_4e0);
      }
    }
    local_4a8 = 0;
    local_4d0 = (double *)0x0;
    local_4b8 = (double *)0x0;
    local_4c0 = (double *)0x0;
    local_4c8 = (double *)0x0;
    if (0 < local_4dc) {
      iVar16 = 0;
      piVar24 = local_4a0;
      do {
        *piVar24 = 0;
        iVar16 = iVar16 + 1;
        piVar24 = piVar24 + 1;
      } while (iVar16 < local_4dc);
    }
    if (local_498 != &local_490) {
      fastFree(local_498);
    }
    if (local_508 != 0) {
      piVar24 = (int *)(local_508 + 0x14);
      do {
        iVar16 = *piVar24;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar4) {
          *piVar24 = iVar16 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_540);
      }
    }
    local_508 = 0;
    local_530 = 0;
    local_518 = 0;
    local_520 = 0;
    uStack_528 = 0;
    if (0 < local_540._4_4_) {
      iVar16 = 0;
      puVar21 = local_500;
      do {
        *(undefined4 *)puVar21 = 0;
        iVar16 = iVar16 + 1;
        puVar21 = (undefined8 *)((long)puVar21 + 4);
      } while (iVar16 < local_540._4_4_);
    }
    if (local_4f8 != &local_4f0) {
      fastFree(local_4f8);
    }
  }
  if ((local_420 != &local_410) && (local_420 != (undefined8 *)0x0)) {
    operator_delete__(local_420);
  }
LAB_002b5d30:
  if (local_568 != 0) {
    piVar24 = (int *)(local_568 + 0x14);
    do {
      iVar16 = *piVar24;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar4) {
        *piVar24 = iVar16 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_5a0);
    }
  }
  local_568 = 0;
  local_590 = (double *)0x0;
  local_578 = 0;
  local_580 = 0;
  local_588 = 0;
  if (0 < local_59c) {
    iVar16 = 0;
    piVar24 = local_560;
    do {
      *piVar24 = 0;
      iVar16 = iVar16 + 1;
      piVar24 = piVar24 + 1;
    } while (iVar16 < local_59c);
  }
  if (local_558 != &local_550) {
    fastFree(local_558);
  }
  auVar28._8_8_ = 0;
  auVar28._0_8_ = dVar43;
  return auVar28;
}


==================================================================

### FUNC 002b69b0 (644 bytes) name=cvInvert

undefined1  [16]
cvInvert(cv *param_1,cv *param_2,int param_3,undefined8 param_4,undefined8 param_5,
        AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  bool bVar11;
  char *pcVar12;
  int iVar13;
  undefined1 auVar14 [16];
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if ((((local_c0 & 0xfff) != (local_60 & 0xfff)) || (local_b8 != local_54)) ||
     (local_b4 != local_58)) {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_d8,0x48);
    uVar8 = s_src_type______dst_type______src__00467ef0._40_8_;
    uVar7 = s_src_type______dst_type______src__00467ef0._32_8_;
    uVar6 = s_src_type______dst_type______src__00467ef0._24_8_;
    uVar5 = s_src_type______dst_type______src__00467ef0._16_8_;
    uVar4 = s_src_type______dst_type______src__00467ef0._8_8_;
    uVar3 = s_src_type______dst_type______src__00467ef0._0_8_;
    *(undefined8 *)(pcVar12 + 0x40) = s_src_type______dst_type______src__00467ef0._64_8_;
    uVar10 = s_src_type______dst_type______src__00467ef0._56_8_;
    uVar9 = s_src_type______dst_type______src__00467ef0._48_8_;
    *(undefined8 *)pcVar12 = uVar3;
    *(undefined8 *)(pcVar12 + 8) = uVar4;
    *(undefined8 *)(pcVar12 + 0x10) = uVar5;
    *(undefined8 *)(pcVar12 + 0x18) = uVar6;
    *(undefined8 *)(pcVar12 + 0x20) = uVar7;
    *(undefined8 *)(pcVar12 + 0x28) = uVar8;
    *(undefined8 *)(pcVar12 + 0x30) = uVar9;
    *(undefined8 *)(pcVar12 + 0x38) = uVar10;
    cv::error(-0xd7,(String *)&local_d8,"double cvInvert(const CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x601);
    cv::String::deallocate((String *)&local_d8);
  }
  local_e0 = 0;
  local_f0[0] = 0x1010000;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  if (((param_3 != 3) && (param_3 != 1)) && (bVar11 = param_3 != 2, param_3 = 2, bVar11)) {
    param_3 = 0;
  }
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  auVar14._0_8_ = cv::invert((_InputArray *)local_f0,(_OutputArray *)&local_d8,param_3);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar11 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar11) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  auVar14._8_8_ = 0;
  return auVar14;
}


==================================================================

### FUNC 002b6c94 (4 bytes) name=SVDecomp

/* cv::SVDecomp(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&,
   cv::_OutputArray const&, int) */

void cv::SVDecomp(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                 _OutputArray *param_4,int param_5)

{
  (*(code *)PTR_compute_00500978)();
  return;
}


==================================================================

### FUNC 002b6c98 (68 bytes) name=compute

/* cv::SVD::compute(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::SVD::compute(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  
  uVar1 = noArray();
  uVar2 = noArray();
  FUN_002b4128(param_1,param_2,uVar1,uVar2,param_3);
  return;
}


==================================================================

### FUNC 002b6cdc (112 bytes) name=operator()

/* cv::SVD::TEMPNAMEPLACEHOLDERVALUE(cv::_InputArray const&, int) */

SVD * __thiscall cv::SVD::operator()(SVD *this,_InputArray *param_1,int param_2)

{
  undefined4 local_48 [2];
  SVD *local_40;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30 [2];
  SVD *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [2];
  SVD *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_40 = this + 0x60;
  local_10 = this + 0xc0;
  local_48[0] = 0x2010000;
  local_30[0] = 0x2010000;
  local_18[0] = 0x2010000;
  local_38 = 0;
  local_34 = 0;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_28 = this;
  FUN_002b4128(param_1,local_48,local_30,local_18,param_2);
  return this;
}


==================================================================

### FUNC 002b6d50 (4972 bytes) name=cvSVD

/* WARNING: Removing unreachable block (ram,0x002b7ec4) */
/* WARNING: Removing unreachable block (ram,0x002b7ec8) */
/* WARNING: Removing unreachable block (ram,0x002b7ed0) */
/* WARNING: Removing unreachable block (ram,0x002b7ed8) */
/* WARNING: Removing unreachable block (ram,0x002b7fd4) */
/* WARNING: Removing unreachable block (ram,0x002b7f00) */
/* WARNING: Removing unreachable block (ram,0x002b7f08) */
/* WARNING: Removing unreachable block (ram,0x002b7f1c) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvSVD(cv *param_1,cv *param_2,cv *param_3,cv *param_4,uint param_5,AutoBuffer *param_6)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 *puVar6;
  void *__dest;
  char *pcVar7;
  long lVar8;
  SVD **ppSVar9;
  int *piVar10;
  undefined4 *puVar11;
  long lVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  AutoBuffer *pAVar16;
  int iVar17;
  int iVar18;
  undefined8 local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  undefined8 local_3e0;
  undefined8 local_3d8;
  undefined8 local_3d0;
  undefined8 local_3c8;
  uint local_3c0;
  int local_3bc;
  int local_3b8;
  undefined4 local_3b4;
  long local_3b0;
  long lStack_3a8;
  long local_3a0;
  long lStack_398;
  undefined8 local_390;
  long lStack_388;
  int *local_380;
  long *local_378;
  long alStack_370 [2];
  undefined8 local_360;
  undefined8 uStack_358;
  ulong local_350;
  undefined8 uStack_348;
  undefined8 local_340;
  undefined8 uStack_338;
  undefined8 local_330;
  long lStack_328;
  int *local_320;
  undefined8 *local_318;
  undefined8 local_310;
  undefined8 uStack_308;
  undefined8 local_300;
  undefined8 uStack_2f8;
  long local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  long lStack_2c8;
  int *local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  uint local_2a0;
  undefined4 local_29c;
  undefined4 local_298 [2];
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 uStack_268;
  undefined4 *local_260;
  long *local_258;
  long local_250;
  long local_248;
  undefined4 local_240;
  int local_23c;
  SVD *local_238;
  ulong local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined4 *local_200;
  undefined8 *local_1f8;
  undefined8 auStack_1f0 [2];
  uint local_1e0;
  int local_1dc;
  int local_1d8;
  int local_1d4;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  long local_1a8;
  undefined4 *local_1a0;
  undefined1 *local_198;
  undefined1 auStack_190 [16];
  undefined8 local_180;
  Mat *local_178;
  ulong local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined8 local_120;
  SVD *local_118;
  ulong local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  SVD **local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  long local_b0;
  long lStack_a8;
  long local_a0;
  long lStack_98;
  undefined8 local_90;
  long lStack_88;
  int *local_80;
  AutoBuffer *local_78;
  long local_70;
  long local_68;
  undefined4 local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  long local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_318 = &local_310;
  local_2b8 = &local_2b0;
  uStack_308 = 0;
  local_310 = 0;
  uStack_2a8 = 0;
  local_2b0 = 0;
  local_320 = (int *)&uStack_358;
  local_2c0 = (int *)&uStack_2f8;
  uStack_358 = _UNK_002b8278;
  local_360 = _DAT_002b8270;
  local_350 = 0;
  uStack_2f8 = _UNK_002b8278;
  local_300 = _DAT_002b8270;
  uStack_348 = 0;
  local_340 = 0;
  uStack_338 = 0;
  uVar13 = local_1e0 & 0xfff;
  local_330 = 0;
  lStack_328 = 0;
  local_2f0 = 0;
  uStack_2e8 = 0;
  local_2e0 = 0;
  uStack_2d8 = 0;
  local_2d0 = 0;
  lStack_2c8 = 0;
  iVar18 = local_1d4;
  if ((local_1d8 < local_1d4) || (iVar18 = local_1d8, local_1d8 <= local_1d4)) {
    iVar17 = local_1d8;
    if (uVar13 == (local_3c0 & 0xfff)) goto LAB_002b7c48;
LAB_002b6e6c:
    local_410 = 0;
    local_408 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_410,0x8d);
    memcpy(__dest,
           "w.type() == type && (w.size() == cv::Size(nm,1) || w.size() == cv::Size(1, nm) || w.size() == cv::Size(nm, nm) || w.size() == cv::Size(n, m))"
           ,0x8d);
    cv::error(-0xd7,(String *)&local_410,"void cvSVD(CvArr*, CvArr*, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x63f);
    cv::String::deallocate((String *)&local_410);
  }
  else {
    iVar17 = local_1d4;
    if (uVar13 != (local_3c0 & 0xfff)) goto LAB_002b6e6c;
LAB_002b7c48:
    iVar15 = local_380[1];
    iVar1 = *local_380;
    if ((((iVar17 != iVar15) || (iVar1 != 1)) &&
        ((iVar17 != iVar1 || ((iVar15 != 1 && (iVar17 != iVar15)))))) &&
       ((local_1d4 != iVar15 || (local_1d8 != iVar1)))) goto LAB_002b6e6c;
  }
  local_80 = &local_b8;
  local_110 = 0;
  local_d8 = &local_d0;
  uStack_108 = 0;
  pAVar16 = (AutoBuffer *)&local_70;
  local_e0 = &local_118;
  local_120 = DAT_002b8280;
  local_100 = 0;
  uStack_f8 = 0;
  local_f0 = 0;
  local_20 = &local_58;
  lStack_e8 = 0;
  local_18 = &local_10;
  local_118 = (SVD *)0x0;
  local_c8 = 0;
  local_d0 = 0;
  local_c0 = 0x42ff0000;
  local_bc = 0;
  local_b8 = 0;
  local_b4 = 0;
  local_b0 = 0;
  lStack_a8 = 0;
  local_a0 = 0;
  lStack_98 = 0;
  local_90 = 0;
  lStack_88 = 0;
  local_68 = 0;
  local_70 = 0;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  uStack_48 = 0;
  local_40 = 0;
  uStack_38 = 0;
  local_30 = 0;
  lStack_28 = 0;
  local_8 = 0;
  local_10 = 0;
  local_78 = pAVar16;
  if ((iVar17 == local_380[1]) && (*local_380 == 1)) {
    iVar15 = (local_1e0 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((local_1e0 & 7) << 1)) & 3);
    local_a0 = local_3b0 + (long)iVar17 * (long)iVar15;
    local_270 = 0;
    local_250 = (long)iVar15;
    local_2a0 = uVar13 + 0x42ff0000 | 0x4000;
    local_260 = local_298;
    lStack_a8 = local_3b0;
    local_b0 = local_3b0;
    local_298[1] = 1;
    lStack_88 = 0;
    local_90 = 0;
    local_258 = &local_250;
    local_29c = 2;
    iVar15 = 0;
    local_bc = 2;
    local_b4 = 1;
    uStack_268 = 0;
    local_290 = 0;
    uStack_278 = 0;
    local_280 = 0;
    uStack_288 = 0;
    puVar11 = local_260;
    local_248 = local_250;
    local_c0 = local_2a0;
    local_b8 = iVar17;
    lStack_98 = local_a0;
    local_70 = local_250;
    local_68 = local_250;
    do {
      *puVar11 = 0;
      iVar15 = iVar15 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar15 < 2);
    if (local_258 != &local_250) {
      cv::fastFree(local_258);
    }
  }
  else if ((local_3c0 >> 0xe & 1) != 0) {
    if (lStack_388 != 0) {
      piVar10 = (int *)(lStack_388 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = *piVar10 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    lStack_88 = 0;
    local_b0 = 0;
    lStack_98 = 0;
    local_a0 = 0;
    lStack_a8 = 0;
    local_c0 = local_3c0;
    if (local_3bc < 3) {
      local_bc = local_3bc;
      local_b8 = local_3b8;
      local_70 = *local_378;
      local_b4 = local_3b4;
      local_68 = local_378[1];
    }
    else {
      cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_3c0);
    }
    lStack_98 = lStack_398;
    local_a0 = local_3a0;
    lStack_88 = lStack_388;
    local_90 = local_390;
    lStack_a8 = lStack_3a8;
    local_b0 = local_3b0;
  }
  if (param_3 != (cv *)0x0) {
    cv::cvarrToMat(param_3,(void *)0x0,true,false,0,pAVar16);
    if (lStack_208 != 0) {
      piVar10 = (int *)(lStack_208 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = *piVar10 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_328 != 0) {
      piVar10 = (int *)(lStack_328 + 0x14);
      do {
        iVar17 = *piVar10;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate((Mat *)&local_360);
      }
    }
    puVar6 = local_1f8;
    lStack_328 = 0;
    local_350 = 0;
    uStack_338 = 0;
    local_340 = 0;
    uStack_348 = 0;
    if (local_360._4_4_ < 1) {
LAB_002b7060:
      if (2 < local_23c) goto LAB_002b7dec;
      uStack_358 = local_238;
      local_360 = CONCAT44(local_23c,local_240);
      *local_318 = *local_1f8;
      local_318[1] = puVar6[1];
    }
    else {
      iVar17 = 0;
      piVar10 = local_320;
      do {
        *piVar10 = 0;
        iVar17 = iVar17 + 1;
        piVar10 = piVar10 + 1;
      } while (iVar17 < local_360._4_4_);
      if (local_360._4_4_ < 3) goto LAB_002b7060;
LAB_002b7dec:
      local_360 = CONCAT44(local_360._4_4_,local_240);
      cv::Mat::copySize((Mat *)&local_360,(Mat *)&local_240);
    }
    uStack_338 = uStack_218;
    local_340 = local_220;
    lStack_328 = lStack_208;
    local_330 = local_210;
    uStack_348 = uStack_228;
    local_350 = local_230;
    if (lStack_208 != 0) {
      piVar10 = (int *)(lStack_208 + 0x14);
      do {
        iVar17 = *piVar10;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate((Mat *)&local_240);
      }
    }
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (0 < local_23c) {
      iVar17 = 0;
      do {
        *local_200 = 0;
        iVar17 = iVar17 + 1;
        local_200 = local_200 + 1;
      } while (iVar17 < local_23c);
    }
    if (local_1f8 != auStack_1f0) {
      cv::fastFree(local_1f8);
    }
    if (uVar13 != ((uint)local_360 & 0xfff)) {
      local_400 = 0;
      local_3f8 = 0;
      pcVar7 = (char *)cv::String::allocate((String *)&local_400,0x10);
      uVar4 = s_u_type______type_00467fd0._8_8_;
      *(undefined8 *)pcVar7 = s_u_type______type_00467fd0._0_8_;
      *(undefined8 *)(pcVar7 + 8) = uVar4;
      cv::error(-0xd7,(String *)&local_400,"void cvSVD(CvArr*, CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x64b);
      cv::String::deallocate((String *)&local_400);
    }
    if (lStack_328 != 0) {
      piVar10 = (int *)(lStack_328 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = *piVar10 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_e8 != 0) {
      piVar10 = (int *)(lStack_e8 + 0x14);
      do {
        iVar17 = *piVar10;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (local_120._4_4_ < 1) {
LAB_002b7228:
      if (2 < local_360._4_4_) goto LAB_002b7e80;
      local_118 = uStack_358;
      local_120 = local_360;
      *local_d8 = *local_318;
      local_d8[1] = local_318[1];
    }
    else {
      iVar17 = 0;
      ppSVar9 = local_e0;
      do {
        *(int *)ppSVar9 = 0;
        iVar17 = iVar17 + 1;
        ppSVar9 = (SVD **)((long)ppSVar9 + 4);
      } while (iVar17 < local_120._4_4_);
      if (local_120._4_4_ < 3) goto LAB_002b7228;
LAB_002b7e80:
      local_120 = CONCAT44(local_120._4_4_,(uint)local_360);
      cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_360);
    }
    uStack_f8 = uStack_338;
    local_100 = local_340;
    lStack_e8 = lStack_328;
    local_f0 = local_330;
    uStack_108 = uStack_348;
    local_110 = local_350;
  }
  if (param_4 == (cv *)0x0) goto LAB_002b7574;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar16);
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = *piVar10 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_2c8 != 0) {
    piVar10 = (int *)(lStack_2c8 + 0x14);
    do {
      iVar17 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate((Mat *)&local_300);
    }
  }
  puVar6 = local_138;
  lStack_2c8 = 0;
  local_2f0 = 0;
  uStack_2d8 = 0;
  local_2e0 = 0;
  uStack_2e8 = 0;
  if (local_300._4_4_ < 1) {
LAB_002b7344:
    if (2 < local_180._4_4_) goto LAB_002b7dfc;
    uStack_2f8 = (SVD *)local_178;
    local_300 = local_180;
    *local_2b8 = *local_138;
    local_2b8[1] = puVar6[1];
  }
  else {
    iVar17 = 0;
    piVar10 = local_2c0;
    do {
      *piVar10 = 0;
      iVar17 = iVar17 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar17 < local_300._4_4_);
    if (local_300._4_4_ < 3) goto LAB_002b7344;
LAB_002b7dfc:
    local_300 = CONCAT44(local_300._4_4_,(undefined4)local_180);
    cv::Mat::copySize((Mat *)&local_300,(Mat *)&local_180);
  }
  uStack_2d8 = uStack_158;
  local_2e0 = local_160;
  lStack_2c8 = lStack_148;
  local_2d0 = local_150;
  uStack_2e8 = uStack_168;
  local_2f0 = local_170;
  if (lStack_148 != 0) {
    piVar10 = (int *)(lStack_148 + 0x14);
    do {
      iVar17 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar17 = 0;
    puVar11 = local_140;
    do {
      *puVar11 = 0;
      iVar17 = iVar17 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar17 < local_180._4_4_);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  if (uVar13 != ((uint)local_300 & 0xfff)) {
    local_3f0 = 0;
    local_3e8 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_3f0,0x10);
    uVar4 = s_v_type______type_00467fe8._8_8_;
    *(undefined8 *)pcVar7 = s_v_type______type_00467fe8._0_8_;
    *(undefined8 *)(pcVar7 + 8) = uVar4;
    cv::error(-0xd7,(String *)&local_3f0,"void cvSVD(CvArr*, CvArr*, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x652);
    cv::String::deallocate((String *)&local_3f0);
  }
  if (lStack_2c8 != 0) {
    piVar10 = (int *)(lStack_2c8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = *piVar10 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar10 = (int *)(lStack_28 + 0x14);
    do {
      iVar17 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar17 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar17 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_002b750c:
    local_60 = (uint)local_300;
    if (2 < local_300._4_4_) goto LAB_002b7e90;
    local_5c = local_300._4_4_;
    local_58 = (int)uStack_2f8;
    local_54 = uStack_2f8._4_4_;
    *local_18 = *local_2b8;
    local_18[1] = local_2b8[1];
  }
  else {
    iVar17 = 0;
    piVar10 = local_20;
    do {
      *piVar10 = 0;
      iVar17 = iVar17 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar17 < local_5c);
    if (local_5c < 3) goto LAB_002b750c;
LAB_002b7e90:
    local_60 = (uint)local_300;
    cv::Mat::copySize((Mat *)&local_60,(Mat *)&local_300);
  }
  uStack_38 = uStack_2d8;
  local_40 = local_2e0;
  lStack_28 = lStack_2c8;
  local_30 = local_2d0;
  uStack_48 = uStack_2e8;
  local_50 = local_2f0;
LAB_002b7574:
  local_170 = 0;
  uVar13 = 0;
  local_180._0_4_ = 0x1010000;
  if ((local_110 == 0) && (uVar13 = 0, local_50 == 0)) {
    uVar13 = 2;
  }
  if ((local_1d8 == local_1d4) ||
     (((*(int *)((long)local_e0 + 4) != iVar18 || (*(int *)local_e0 != iVar18)) &&
      ((local_20[1] != iVar18 || (*local_20 != iVar18)))))) {
    uVar14 = 0;
  }
  else {
    uVar14 = 4;
  }
  local_178 = (Mat *)&local_1e0;
  cv::SVD::operator()((SVD *)&local_120,(_InputArray *)&local_180,uVar13 | param_5 & 1 | uVar14);
  if (local_350 != 0) {
    if (local_360._4_4_ < 3) {
      lVar12 = (long)uStack_358._4_4_ * (long)(int)uStack_358;
    }
    else {
      lVar8 = 0;
      lVar12 = 1;
      do {
        piVar10 = local_320 + lVar8;
        lVar8 = lVar8 + 1;
        lVar12 = lVar12 * *piVar10;
      } while ((int)lVar8 < local_360._4_4_);
    }
    if (lVar12 != 0) {
      if ((param_5 >> 1 & 1) == 0) {
        if (local_110 != local_350) {
          if ((*(int *)((long)local_e0 + 4) != local_320[1]) || (*(int *)local_e0 != *local_320)) {
            local_3e0 = 0;
            local_3d8 = 0;
            pcVar7 = (char *)cv::String::allocate((String *)&local_3e0,0x18);
            uVar5 = s_u_size______svd_u_size___00468000._8_8_;
            uVar4 = s_u_size______svd_u_size___00468000._0_8_;
            *(undefined8 *)(pcVar7 + 0x10) = s_u_size______svd_u_size___00468000._16_8_;
            *(undefined8 *)pcVar7 = uVar4;
            *(undefined8 *)(pcVar7 + 8) = uVar5;
            cv::error(-0xd7,(String *)&local_3e0,"void cvSVD(CvArr*, CvArr*, CvArr*, CvArr*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x661);
            cv::String::deallocate((String *)&local_3e0);
          }
          local_170 = 0;
          local_180._0_4_ = 0x2010000;
          local_178 = (Mat *)&local_360;
          cv::Mat::copyTo((Mat *)&local_120,(_OutputArray *)&local_180);
        }
      }
      else {
        local_170 = 0;
        local_180._0_4_ = 0x2010000;
        local_230 = 0;
        local_240 = 0x1010000;
        local_238 = (SVD *)&local_120;
        local_178 = (Mat *)&local_360;
        cv::transpose((_InputArray *)&local_240,(_OutputArray *)&local_180);
      }
    }
  }
  if (local_2f0 != 0) {
    if (local_300._4_4_ < 3) {
      lVar12 = (long)uStack_2f8._4_4_ * (long)(int)uStack_2f8;
    }
    else {
      lVar8 = 0;
      lVar12 = 1;
      do {
        piVar10 = local_2c0 + lVar8;
        lVar8 = lVar8 + 1;
        lVar12 = lVar12 * *piVar10;
      } while ((int)lVar8 < local_300._4_4_);
    }
    if (lVar12 != 0) {
      if ((param_5 >> 2 & 1) == 0) {
        local_238 = (SVD *)&local_60;
        local_230 = CONCAT44(param_5,param_5) & 0x400000004;
        local_170 = CONCAT44(param_5,param_5) & 0x400000004;
        local_240 = 0x1010000;
        local_180._0_4_ = 0x2010000;
        local_178 = (Mat *)&local_300;
        cv::transpose((_InputArray *)&local_240,(_OutputArray *)&local_180);
      }
      else if (local_50 != local_2f0) {
        if ((local_20[1] != local_2c0[1]) || (*local_20 != *local_2c0)) {
          local_3d0 = 0;
          local_3c8 = 0;
          pcVar7 = (char *)cv::String::allocate((String *)&local_3d0,0x19);
          cVar2 = s_v_size______svd_vt_size___00468020[0x18];
          uVar5 = s_v_size______svd_vt_size___00468020._8_8_;
          uVar4 = s_v_size______svd_vt_size___00468020._0_8_;
          *(undefined8 *)(pcVar7 + 0x10) = s_v_size______svd_vt_size___00468020._16_8_;
          pcVar7[0x18] = cVar2;
          *(undefined8 *)pcVar7 = uVar4;
          *(undefined8 *)(pcVar7 + 8) = uVar5;
          cv::error(-0xd7,(String *)&local_3d0,"void cvSVD(CvArr*, CvArr*, CvArr*, CvArr*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/lapack.cpp",0x66c);
          cv::String::deallocate((String *)&local_3d0);
        }
        local_170 = 0;
        local_180._0_4_ = 0x2010000;
        local_178 = (Mat *)&local_300;
        cv::Mat::copyTo((Mat *)&local_60,(_OutputArray *)&local_180);
      }
    }
  }
  if (local_3b0 != local_b0) {
    if ((local_80[1] == local_380[1]) && (*local_380 == *local_80)) {
      local_170 = 0;
      local_180._0_4_ = 0x2010000;
      local_178 = (Mat *)&local_3c0;
      cv::Mat::copyTo((Mat *)&local_c0,(_OutputArray *)&local_180);
    }
    else {
      local_178 = (Mat *)0x0;
      local_180._0_4_ = 0;
      local_180._4_4_ = 0;
      uStack_168 = 0;
      local_170 = 0;
      cv::Mat::operator=((Mat *)&local_3c0,(Scalar_ *)&local_180);
      cv::Mat::diag((int)(Mat *)&local_3c0);
      local_230 = 0;
      local_240 = 0x2010000;
      local_238 = (SVD *)&local_180;
      cv::Mat::copyTo((Mat *)&local_c0,(_OutputArray *)&local_240);
      if (lStack_148 != 0) {
        piVar10 = (int *)(lStack_148 + 0x14);
        do {
          iVar18 = *piVar10;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
          if (bVar3) {
            *piVar10 = iVar18 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar18 == 1) {
          cv::Mat::deallocate((Mat *)&local_180);
        }
      }
      lStack_148 = 0;
      local_170 = 0;
      uStack_158 = 0;
      local_160 = 0;
      uStack_168 = 0;
      if (0 < local_180._4_4_) {
        iVar18 = 0;
        do {
          *local_140 = 0;
          iVar18 = iVar18 + 1;
          local_140 = local_140 + 1;
        } while (iVar18 < local_180._4_4_);
      }
      if (local_138 != auStack_130) {
        cv::fastFree(local_138);
      }
    }
  }
  if (lStack_28 != 0) {
    piVar10 = (int *)(lStack_28 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar18 = 0;
    piVar10 = local_20;
    do {
      *piVar10 = 0;
      iVar18 = iVar18 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar18 < local_5c);
  }
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  if (lStack_88 != 0) {
    piVar10 = (int *)(lStack_88 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  lStack_98 = 0;
  local_a0 = 0;
  lStack_a8 = 0;
  if (0 < local_bc) {
    iVar18 = 0;
    piVar10 = local_80;
    do {
      *piVar10 = 0;
      iVar18 = iVar18 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar18 < local_bc);
  }
  if (local_78 != (AutoBuffer *)&local_70) {
    cv::fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar10 = (int *)(lStack_e8 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar18 = 0;
    ppSVar9 = local_e0;
    do {
      *(int *)ppSVar9 = 0;
      iVar18 = iVar18 + 1;
      ppSVar9 = (SVD **)((long)ppSVar9 + 4);
    } while (iVar18 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  if (lStack_2c8 != 0) {
    piVar10 = (int *)(lStack_2c8 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_300);
    }
  }
  lStack_2c8 = 0;
  local_2f0 = 0;
  uStack_2d8 = 0;
  local_2e0 = 0;
  uStack_2e8 = 0;
  if (0 < local_300._4_4_) {
    iVar18 = 0;
    piVar10 = local_2c0;
    do {
      *piVar10 = 0;
      iVar18 = iVar18 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar18 < local_300._4_4_);
  }
  if (local_2b8 != &local_2b0) {
    cv::fastFree(local_2b8);
  }
  if (lStack_328 != 0) {
    piVar10 = (int *)(lStack_328 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_360);
    }
  }
  lStack_328 = 0;
  local_350 = 0;
  uStack_338 = 0;
  local_340 = 0;
  uStack_348 = 0;
  if (0 < local_360._4_4_) {
    iVar18 = 0;
    piVar10 = local_320;
    do {
      *piVar10 = 0;
      iVar18 = iVar18 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar18 < local_360._4_4_);
  }
  if (local_318 != &local_310) {
    cv::fastFree(local_318);
  }
  if (lStack_388 != 0) {
    piVar10 = (int *)(lStack_388 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_3c0);
    }
  }
  lStack_388 = 0;
  local_3b0 = 0;
  lStack_398 = 0;
  local_3a0 = 0;
  lStack_3a8 = 0;
  if (0 < local_3bc) {
    iVar18 = 0;
    do {
      *local_380 = 0;
      iVar18 = iVar18 + 1;
      local_380 = local_380 + 1;
    } while (iVar18 < local_3bc);
  }
  if (local_378 != alStack_370) {
    cv::fastFree(local_378);
  }
  if (local_1a8 != 0) {
    piVar10 = (int *)(local_1a8 + 0x14);
    do {
      iVar18 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar18 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar18 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1dc) {
    iVar18 = 0;
    do {
      *local_1a0 = 0;
      iVar18 = iVar18 + 1;
      local_1a0 = local_1a0 + 1;
    } while (iVar18 < local_1dc);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
  return;
}


==================================================================

### FUNC 002b8290 (276 bytes) name=FUN_002b8290

void FUN_002b8290(long param_1,long param_2,int param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  byte bVar4;
  uint uVar5;
  undefined1 uVar6;
  int iVar7;
  long lVar8;
  undefined4 local_8;
  bool local_4;
  
  if ((int)param_4 < 0) {
    local_4 = (bool)((byte)param_4 & 1);
    if ((param_4 & 1) == 0) {
      local_8 = 0x1ff0100;
    }
    else {
      local_4 = param_4 == 0xffffffff;
      local_8 = 0x1ffff00;
    }
    lVar8 = 0;
    if (0 < param_3) {
      do {
        uVar6 = 0;
        if (*(byte *)(param_1 + lVar8) < 3) {
          uVar6 = *(undefined1 *)((long)&local_8 + (long)(int)(*(byte *)(param_1 + lVar8) + 2));
        }
        *(undefined1 *)(param_2 + lVar8) = uVar6;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < param_3);
      return;
    }
  }
  else {
    lVar8 = 0;
    if (0 < param_3) {
      do {
        while( true ) {
          bVar4 = *(byte *)(param_1 + lVar8);
          uVar5 = (uint)bVar4;
          if ((int)param_4 < 2) break;
          iVar7 = 1;
          uVar2 = param_4;
          do {
            uVar1 = uVar2 & 1;
            uVar2 = (int)uVar2 >> 1;
            iVar3 = uVar5 * iVar7;
            if (uVar1 == 0) {
              iVar3 = iVar7;
            }
            uVar5 = uVar5 * uVar5;
            iVar7 = iVar3;
          } while (uVar2 != 1);
          uVar5 = uVar5 * iVar3;
          if (0xff < uVar5) {
            uVar5 = 0xff;
          }
          *(char *)(param_2 + lVar8) = (char)uVar5;
          lVar8 = lVar8 + 1;
          if (param_3 <= (int)lVar8) {
            return;
          }
        }
        if (0xff < uVar5) {
          bVar4 = 0xff;
        }
        *(byte *)(param_2 + lVar8) = bVar4;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002b83a4 (272 bytes) name=FUN_002b83a4

void FUN_002b83a4(long param_1,long param_2,int param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  ushort uVar4;
  uint uVar5;
  undefined2 uVar6;
  int iVar7;
  long lVar8;
  undefined8 local_10;
  ushort local_8;
  
  if ((int)param_4 < 0) {
    local_8 = (ushort)param_4 & 1;
    if ((param_4 & 1) == 0) {
      local_10 = 0x1ffff00010000;
    }
    else {
      local_8 = (ushort)(param_4 == 0xffffffff);
      local_10 = 0x1ffffffff0000;
    }
    lVar8 = 0;
    if (0 < param_3) {
      do {
        uVar4 = *(ushort *)(param_1 + lVar8 * 2);
        uVar6 = 0;
        if (uVar4 < 3) {
          uVar6 = *(undefined2 *)((long)&local_10 + (long)(int)(uVar4 + 2) * 2);
        }
        *(undefined2 *)(param_2 + lVar8 * 2) = uVar6;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < param_3);
      return;
    }
  }
  else {
    lVar8 = 0;
    if (0 < param_3) {
      do {
        while( true ) {
          uVar4 = *(ushort *)(param_1 + lVar8 * 2);
          uVar5 = (uint)uVar4;
          if ((int)param_4 < 2) break;
          iVar7 = 1;
          uVar2 = param_4;
          do {
            uVar1 = uVar2 & 1;
            uVar2 = (int)uVar2 >> 1;
            iVar3 = uVar5 * iVar7;
            if (uVar1 == 0) {
              iVar3 = iVar7;
            }
            uVar5 = uVar5 * uVar5;
            iVar7 = iVar3;
          } while (uVar2 != 1);
          uVar5 = uVar5 * iVar3;
          if (0xffff < uVar5) {
            uVar5 = 0xffff;
          }
          *(short *)(param_2 + lVar8 * 2) = (short)uVar5;
          lVar8 = lVar8 + 1;
          if (param_3 <= (int)lVar8) {
            return;
          }
        }
        if (0xffff < uVar5) {
          uVar4 = 0xffff;
        }
        *(ushort *)(param_2 + lVar8 * 2) = uVar4;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002b84b4 (140 bytes) name=FUN_002b84b4

void FUN_002b84b4(long param_1,long param_2,int param_3,int param_4)

{
  uint uVar1;
  ulong uVar2;
  long lVar3;
  int iVar4;
  ulong uVar5;
  double dVar6;
  double dVar7;
  
  lVar3 = 0;
  uVar5 = (long)param_4 >> 0x3f;
  uVar5 = ((long)param_4 ^ uVar5) - uVar5;
  if (0 < param_3) {
    do {
      while( true ) {
        dVar6 = *(double *)(param_1 + lVar3 * 8);
        iVar4 = (int)uVar5;
        if (-1 < param_4) break;
        dVar6 = 1.0 / dVar6;
        if (iVar4 < 2) goto LAB_002b8524;
LAB_002b84e0:
        uVar2 = uVar5 & 0xffffffff;
        dVar7 = 1.0;
        do {
          if ((uVar2 & 1) != 0) {
            dVar7 = dVar7 * dVar6;
          }
          uVar1 = (int)uVar2 >> 1;
          uVar2 = (ulong)uVar1;
          dVar6 = dVar6 * dVar6;
        } while (uVar1 != 1);
        *(double *)(param_2 + lVar3 * 8) = dVar7 * dVar6;
        lVar3 = lVar3 + 1;
        if (param_3 <= (int)lVar3) {
          return;
        }
      }
      if (1 < iVar4) goto LAB_002b84e0;
LAB_002b8524:
      *(double *)(param_2 + lVar3 * 8) = dVar6 * 1.0;
      lVar3 = lVar3 + 1;
    } while ((int)lVar3 < param_3);
  }
  return;
}


==================================================================

### FUNC 002b8540 (4 bytes) name=thunk_FUN_003caaf0

void thunk_FUN_003caaf0(long param_1,long param_2,int param_3)

{
  long lVar1;
  double dVar2;
  double __x;
  
  if (0 < param_3) {
    lVar1 = 0;
    do {
      __x = *(double *)(param_1 + lVar1 * 8);
      dVar2 = SQRT(__x);
      if (NAN(dVar2)) {
        dVar2 = sqrt(__x);
      }
      *(double *)(param_2 + lVar1 * 8) = dVar2;
      lVar1 = lVar1 + 1;
    } while (lVar1 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 002b8544 (4 bytes) name=thunk_FUN_003ca9b0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void thunk_FUN_003ca9b0(long param_1,long param_2,int param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined1 (*pauVar5) [12];
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 (*pauVar8) [12];
  ulong uVar9;
  float *pfVar10;
  long lVar11;
  ulong uVar12;
  float fVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  float fVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  
  uVar7 = _UNK_003caae8;
  uVar6 = _DAT_003caae0;
  if (param_3 < 8) {
    uVar12 = 0;
  }
  else {
    uVar1 = param_3 - 8U >> 3;
    pfVar10 = (float *)(param_2 + 0x10);
    pauVar8 = (undefined1 (*) [12])(param_1 + 0x10);
    do {
      uVar3 = *(undefined8 *)(*pauVar8 + 8);
      fVar13 = (float)((ulong)uVar3 >> 0x20);
      uVar2 = *(undefined8 *)*pauVar8;
      pauVar5 = pauVar8 + 2;
      fVar17 = (float)((ulong)*(undefined8 *)(pauVar8[-1] + 4) >> 0x20);
      uVar4 = *(undefined8 *)*(undefined1 (*) [12])(pauVar8[-2] + 8);
      auVar15._12_4_ = fVar13;
      auVar15._0_12_ = *pauVar8;
      auVar18._8_8_ = uVar7;
      auVar18._0_8_ = uVar6;
      auVar23 = NEON_fmax(auVar15,auVar18,4);
      auVar18 = NEON_frsqrte(auVar23,4);
      auVar20._12_4_ = fVar17;
      auVar20._0_12_ = *(undefined1 (*) [12])(pauVar8[-2] + 8);
      auVar22._8_8_ = uVar7;
      auVar22._0_8_ = uVar6;
      auVar24 = NEON_fmax(auVar20,auVar22,4);
      auVar22 = NEON_frsqrte(auVar24,4);
      auVar14._0_4_ = auVar23._0_4_ * auVar18._0_4_;
      auVar14._4_4_ = auVar23._4_4_ * auVar18._4_4_;
      auVar14._8_4_ = auVar23._8_4_ * auVar18._8_4_;
      auVar14._12_4_ = auVar23._12_4_ * auVar18._12_4_;
      auVar15 = NEON_frsqrts(auVar14,auVar18,4);
      auVar19._0_4_ = auVar24._0_4_ * auVar22._0_4_;
      auVar19._4_4_ = auVar24._4_4_ * auVar22._4_4_;
      auVar19._8_4_ = auVar24._8_4_ * auVar22._8_4_;
      auVar19._12_4_ = auVar24._12_4_ * auVar22._12_4_;
      auVar20 = NEON_frsqrts(auVar19,auVar22,4);
      auVar21._0_4_ = auVar22._0_4_ * auVar20._0_4_;
      auVar21._4_4_ = auVar22._4_4_ * auVar20._4_4_;
      auVar21._8_4_ = auVar22._8_4_ * auVar20._8_4_;
      auVar21._12_4_ = auVar22._12_4_ * auVar20._12_4_;
      auVar16._0_4_ = auVar18._0_4_ * auVar15._0_4_;
      auVar16._4_4_ = auVar18._4_4_ * auVar15._4_4_;
      auVar16._8_4_ = auVar18._8_4_ * auVar15._8_4_;
      auVar16._12_4_ = auVar18._12_4_ * auVar15._12_4_;
      auVar25._0_4_ = auVar24._0_4_ * auVar21._0_4_;
      auVar25._4_4_ = auVar24._4_4_ * auVar21._4_4_;
      auVar25._8_4_ = auVar24._8_4_ * auVar21._8_4_;
      auVar25._12_4_ = auVar24._12_4_ * auVar21._12_4_;
      auVar20 = NEON_frsqrts(auVar25,auVar21,4);
      auVar24._0_4_ = auVar23._0_4_ * auVar16._0_4_;
      auVar24._4_4_ = auVar23._4_4_ * auVar16._4_4_;
      auVar24._8_4_ = auVar23._8_4_ * auVar16._8_4_;
      auVar24._12_4_ = auVar23._12_4_ * auVar16._12_4_;
      auVar15 = NEON_frsqrts(auVar24,auVar16,4);
      pfVar10[-2] = (float)*(undefined8 *)(pauVar8[-1] + 4) * auVar21._8_4_ * auVar20._8_4_;
      pfVar10[-1] = fVar17 * auVar21._12_4_ * auVar20._12_4_;
      pfVar10[-4] = (float)uVar4 * auVar21._0_4_ * auVar20._0_4_;
      pfVar10[-3] = (float)((ulong)uVar4 >> 0x20) * auVar21._4_4_ * auVar20._4_4_;
      pfVar10[2] = (float)uVar3 * auVar16._8_4_ * auVar15._8_4_;
      pfVar10[3] = fVar13 * auVar16._12_4_ * auVar15._12_4_;
      *pfVar10 = (float)uVar2 * auVar16._0_4_ * auVar15._0_4_;
      pfVar10[1] = (float)((ulong)uVar2 >> 0x20) * auVar16._4_4_ * auVar15._4_4_;
      pfVar10 = pfVar10 + 8;
      pauVar8 = (undefined1 (*) [12])(*pauVar5 + 8);
    } while ((undefined1 (*) [12])(*pauVar5 + 8) !=
             (undefined1 (*) [12])(param_1 + (ulong)uVar1 * 0x20 + 0x30));
    uVar12 = (ulong)((uVar1 + 1) * 8);
  }
  if ((int)uVar12 < param_3) {
    uVar9 = -(uVar12 >> 0x1f) & 0xfffffffc00000000 | uVar12 << 2;
    lVar11 = 0;
    do {
      fVar17 = *(float *)(param_1 + uVar9 + lVar11);
      fVar13 = SQRT(fVar17);
      if (NAN(fVar13)) {
        fVar13 = sqrtf(fVar17);
      }
      *(float *)(param_2 + uVar9 + lVar11) = fVar13;
      lVar11 = lVar11 + 4;
    } while (lVar11 != ((ulong)(uint)((param_3 + -1) - (int)uVar12) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 002b8548 (4 bytes) name=thunk_FUN_003ca92c

void thunk_FUN_003ca92c(long param_1,long param_2,int param_3)

{
  long lVar1;
  double dVar2;
  double __x;
  
  if (0 < param_3) {
    lVar1 = 0;
    do {
      __x = *(double *)(param_1 + lVar1 * 8);
      dVar2 = SQRT(__x);
      if (NAN(dVar2)) {
        dVar2 = sqrt(__x);
      }
      *(double *)(param_2 + lVar1 * 8) = 1.0 / dVar2;
      lVar1 = lVar1 + 1;
    } while (lVar1 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 002b854c (4 bytes) name=thunk_FUN_003ca80c

void thunk_FUN_003ca80c(long param_1,long param_2,int param_3)

{
  uint uVar1;
  undefined1 (*pauVar2) [16];
  ulong uVar3;
  float *pfVar4;
  long lVar5;
  ulong uVar6;
  float fVar7;
  undefined1 auVar8 [16];
  float __x;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  
  if (param_3 < 8) {
    uVar6 = 0;
  }
  else {
    uVar1 = param_3 - 8U >> 3;
    pauVar2 = (undefined1 (*) [16])(param_1 + 0x10);
    pfVar4 = (float *)(param_2 + 0x10);
    do {
      auVar15 = *pauVar2;
      auVar9 = NEON_frsqrte(auVar15,4);
      auVar14 = pauVar2[-1];
      auVar13 = NEON_frsqrte(auVar14,4);
      pauVar2 = pauVar2 + 2;
      auVar8._0_4_ = auVar15._0_4_ * auVar9._0_4_;
      auVar8._4_4_ = auVar15._4_4_ * auVar9._4_4_;
      auVar8._8_4_ = auVar15._8_4_ * auVar9._8_4_;
      auVar8._12_4_ = auVar15._12_4_ * auVar9._12_4_;
      auVar8 = NEON_frsqrts(auVar8,auVar9,4);
      auVar10._0_4_ = auVar14._0_4_ * auVar13._0_4_;
      auVar10._4_4_ = auVar14._4_4_ * auVar13._4_4_;
      auVar10._8_4_ = auVar14._8_4_ * auVar13._8_4_;
      auVar10._12_4_ = auVar14._12_4_ * auVar13._12_4_;
      auVar11 = NEON_frsqrts(auVar10,auVar13,4);
      auVar12._0_4_ = auVar13._0_4_ * auVar11._0_4_;
      auVar12._4_4_ = auVar13._4_4_ * auVar11._4_4_;
      auVar12._8_4_ = auVar13._8_4_ * auVar11._8_4_;
      auVar12._12_4_ = auVar13._12_4_ * auVar11._12_4_;
      auVar11._0_4_ = auVar9._0_4_ * auVar8._0_4_;
      auVar11._4_4_ = auVar9._4_4_ * auVar8._4_4_;
      auVar11._8_4_ = auVar9._8_4_ * auVar8._8_4_;
      auVar11._12_4_ = auVar9._12_4_ * auVar8._12_4_;
      auVar9._0_4_ = auVar14._0_4_ * auVar12._0_4_;
      auVar9._4_4_ = auVar14._4_4_ * auVar12._4_4_;
      auVar9._8_4_ = auVar14._8_4_ * auVar12._8_4_;
      auVar9._12_4_ = auVar14._12_4_ * auVar12._12_4_;
      auVar8 = NEON_frsqrts(auVar9,auVar12,4);
      auVar14._0_4_ = auVar15._0_4_ * auVar11._0_4_;
      auVar14._4_4_ = auVar15._4_4_ * auVar11._4_4_;
      auVar14._8_4_ = auVar15._8_4_ * auVar11._8_4_;
      auVar14._12_4_ = auVar15._12_4_ * auVar11._12_4_;
      auVar15 = NEON_frsqrts(auVar14,auVar11,4);
      pfVar4[-2] = auVar12._8_4_ * auVar8._8_4_;
      pfVar4[-1] = auVar12._12_4_ * auVar8._12_4_;
      pfVar4[-4] = auVar12._0_4_ * auVar8._0_4_;
      pfVar4[-3] = auVar12._4_4_ * auVar8._4_4_;
      pfVar4[2] = auVar11._8_4_ * auVar15._8_4_;
      pfVar4[3] = auVar11._12_4_ * auVar15._12_4_;
      *pfVar4 = auVar11._0_4_ * auVar15._0_4_;
      pfVar4[1] = auVar11._4_4_ * auVar15._4_4_;
      pfVar4 = pfVar4 + 8;
    } while (pauVar2 != (undefined1 (*) [16])(param_1 + (ulong)uVar1 * 0x20 + 0x30));
    uVar6 = (ulong)((uVar1 + 1) * 8);
  }
  if ((int)uVar6 < param_3) {
    uVar3 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
    lVar5 = 0;
    do {
      __x = *(float *)(param_1 + uVar3 + lVar5);
      fVar7 = SQRT(__x);
      if (NAN(fVar7)) {
        fVar7 = sqrtf(__x);
      }
      *(float *)(param_2 + uVar3 + lVar5) = 1.0 / fVar7;
      lVar5 = lVar5 + 4;
    } while (lVar5 != ((ulong)(uint)((param_3 + -1) - (int)uVar6) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 002b8550 (496 bytes) name=FUN_002b8550

void FUN_002b8550(long param_1,long param_2,int param_3,uint param_4)

{
  undefined8 *puVar1;
  uint uVar2;
  uint uVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined8 uVar6;
  undefined1 auVar7 [16];
  undefined8 uVar8;
  int iVar9;
  undefined1 uVar10;
  char cVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  short sVar25;
  short sVar26;
  short sVar27;
  short sVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  char local_8 [4];
  bool local_4;
  
  if ((int)param_4 < 0) {
    local_4 = param_4 == 0xffffffff;
    local_8[3] = 1;
    local_8[0] = -local_4;
    if ((param_4 & 1) == 0) {
      local_8[1] = 1;
      local_8[2] = 0x7f;
      local_4 = (bool)((byte)param_4 & 1);
    }
    else {
      local_8[1] = 0xff;
      local_8[2] = 0x7f;
    }
    lVar16 = 0;
    if (0 < param_3) {
      do {
        cVar11 = '\0';
        if ((int)ABS((double)(int)*(char *)(param_1 + lVar16)) < 3) {
          cVar11 = local_8[*(char *)(param_1 + lVar16) + 2];
        }
        *(char *)(param_2 + lVar16) = cVar11;
        lVar16 = lVar16 + 1;
      } while ((int)lVar16 < param_3);
      return;
    }
  }
  else {
    uVar15 = 0;
    if (0 < param_3 + -7) {
      do {
        iVar17 = 1;
        iVar18 = 1;
        iVar19 = 1;
        iVar20 = 1;
        uVar8 = *(undefined8 *)(param_1 + uVar15);
        sVar25 = (short)(char)((ulong)uVar8 >> 0x20);
        sVar26 = (short)(char)((ulong)uVar8 >> 0x28);
        sVar27 = (short)(char)((ulong)uVar8 >> 0x30);
        sVar28 = (short)(char)((ulong)uVar8 >> 0x38);
        iVar29 = (int)(short)(char)uVar8;
        iVar30 = (int)(short)(char)((ulong)uVar8 >> 8);
        iVar31 = (int)(short)(char)((ulong)uVar8 >> 0x10);
        iVar32 = (int)(short)(char)((ulong)uVar8 >> 0x18);
        iVar14 = (int)sVar25;
        iVar9 = (int)sVar26;
        iVar13 = (int)sVar27;
        iVar12 = (int)sVar28;
        if ((int)param_4 < 2) {
          iVar23 = 1;
          iVar24 = 1;
          iVar21 = 1;
          iVar22 = 1;
        }
        else {
          iVar23 = 1;
          iVar24 = 1;
          iVar21 = 1;
          iVar22 = 1;
          uVar3 = param_4;
          iVar14 = (int)sVar25;
          iVar9 = (int)sVar26;
          iVar13 = (int)sVar27;
          iVar12 = (int)sVar28;
          do {
            uVar2 = uVar3 & 1;
            if ((uVar3 & 1) != 0) {
              iVar21 = iVar29 * iVar21;
              iVar22 = iVar30 * iVar22;
              iVar23 = iVar31 * iVar23;
              iVar24 = iVar32 * iVar24;
            }
            uVar3 = (int)uVar3 >> 1;
            iVar29 = iVar29 * iVar29;
            iVar30 = iVar30 * iVar30;
            iVar31 = iVar31 * iVar31;
            iVar32 = iVar32 * iVar32;
            if (uVar2 != 0) {
              iVar17 = iVar14 * iVar17;
              iVar18 = iVar9 * iVar18;
              iVar19 = iVar13 * iVar19;
              iVar20 = iVar12 * iVar20;
            }
            iVar14 = iVar14 * iVar14;
            iVar9 = iVar9 * iVar9;
            iVar13 = iVar13 * iVar13;
            iVar12 = iVar12 * iVar12;
          } while (uVar3 != 1);
        }
        puVar1 = (undefined8 *)(param_2 + uVar15);
        uVar15 = uVar15 + 8;
        auVar5._4_4_ = iVar30 * iVar22;
        auVar5._0_4_ = iVar29 * iVar21;
        auVar5._8_4_ = iVar31 * iVar23;
        auVar5._12_4_ = iVar32 * iVar24;
        uVar6 = NEON_sqxtn(CONCAT44(iVar30 * iVar22,iVar29 * iVar21),auVar5,4);
        auVar4._4_4_ = iVar9 * iVar18;
        auVar4._0_4_ = iVar14 * iVar17;
        auVar4._8_4_ = iVar13 * iVar19;
        auVar4._12_4_ = iVar12 * iVar20;
        uVar8 = NEON_sqxtn(CONCAT44(iVar9 * iVar18,iVar14 * iVar17),auVar4,4);
        auVar7._8_2_ = (short)uVar8;
        auVar7._0_8_ = uVar6;
        auVar7._10_2_ = (short)((ulong)uVar8 >> 0x10);
        auVar7._12_2_ = (short)((ulong)uVar8 >> 0x20);
        auVar7._14_2_ = (short)((ulong)uVar8 >> 0x30);
        uVar8 = NEON_sqxtn(uVar8,auVar7,2);
        *puVar1 = uVar8;
      } while ((int)uVar15 < param_3 + -7);
      uVar15 = (ulong)((param_3 - 8U & 0xfffffff8) + 8);
    }
    iVar14 = (int)uVar15;
    if (iVar14 < param_3) {
      lVar16 = 0;
      do {
        iVar9 = (int)*(char *)(param_1 + iVar14 + lVar16);
        if ((int)param_4 < 2) {
          iVar13 = 1;
        }
        else {
          iVar12 = 1;
          uVar3 = param_4;
          do {
            uVar2 = uVar3 & 1;
            uVar3 = (int)uVar3 >> 1;
            iVar13 = iVar12 * iVar9;
            if (uVar2 == 0) {
              iVar13 = iVar12;
            }
            iVar9 = iVar9 * iVar9;
            iVar12 = iVar13;
          } while (uVar3 != 1);
        }
        iVar13 = iVar13 * iVar9;
        uVar10 = (undefined1)iVar13;
        if ((0xff < iVar13 + 0x80U) && (uVar10 = 0x7f, iVar13 < 1)) {
          uVar10 = 0x80;
        }
        *(undefined1 *)(param_2 + iVar14 + lVar16) = uVar10;
        lVar16 = lVar16 + 1;
      } while (lVar16 != (ulong)(uint)((param_3 + -1) - iVar14) + 1);
    }
  }
  return;
}


==================================================================

### FUNC 002b8740 (500 bytes) name=FUN_002b8740

void FUN_002b8740(undefined8 *param_1,undefined8 *param_2,int param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined2 uVar6;
  ulong uVar7;
  short sVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  long lVar11;
  ulong uVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  undefined8 uVar22;
  int iVar23;
  int iVar24;
  undefined8 uVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  short local_10 [8];
  
  if ((int)param_4 < 0) {
    local_10[3] = 1;
    local_10[0] = -(ushort)(param_4 == 0xffffffff);
    local_10[4] = (ushort)param_4 & 1;
    if ((param_4 & 1) == 0) {
      local_10[1] = 1;
      local_10[2] = 0x7fff;
    }
    else {
      local_10[1] = 0xffff;
      local_10[4] = (short)(param_4 == 0xffffffff);
      local_10[2] = 0x7fff;
    }
    lVar11 = 0;
    if (0 < param_3) {
      do {
        sVar8 = 0;
        iVar13 = (int)*(short *)((long)param_1 + lVar11 * 2);
        if ((int)ABS((double)iVar13) < 3) {
          sVar8 = local_10[iVar13 + 2];
        }
        *(short *)((long)param_2 + lVar11 * 2) = sVar8;
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < param_3);
      return;
    }
  }
  else {
    uVar12 = 0;
    if (7 < param_3) {
      uVar3 = param_3 - 8U >> 3;
      puVar9 = param_1;
      puVar10 = param_2;
      do {
        uVar25 = puVar9[1];
        uVar22 = *puVar9;
        iVar13 = 1;
        iVar14 = 1;
        iVar15 = 1;
        iVar16 = 1;
        iVar21 = (int)(short)uVar22;
        iVar23 = (int)(short)((ulong)uVar22 >> 0x10);
        iVar24 = (int)(short)((ulong)uVar22 >> 0x20);
        iVar26 = (int)(short)((ulong)uVar22 >> 0x30);
        iVar27 = (int)(short)uVar25;
        iVar28 = (int)(short)((ulong)uVar25 >> 0x10);
        iVar29 = (int)(short)((ulong)uVar25 >> 0x20);
        iVar30 = (int)(short)((ulong)uVar25 >> 0x30);
        if ((int)param_4 < 2) {
          iVar19 = 1;
          iVar20 = 1;
          iVar17 = 1;
          iVar18 = 1;
        }
        else {
          iVar19 = 1;
          iVar20 = 1;
          iVar17 = 1;
          iVar18 = 1;
          uVar2 = param_4;
          do {
            uVar1 = uVar2 & 1;
            if ((uVar2 & 1) != 0) {
              iVar17 = iVar21 * iVar17;
              iVar18 = iVar23 * iVar18;
              iVar19 = iVar24 * iVar19;
              iVar20 = iVar26 * iVar20;
            }
            uVar2 = (int)uVar2 >> 1;
            iVar21 = iVar21 * iVar21;
            iVar23 = iVar23 * iVar23;
            iVar24 = iVar24 * iVar24;
            iVar26 = iVar26 * iVar26;
            if (uVar1 != 0) {
              iVar13 = iVar27 * iVar13;
              iVar14 = iVar28 * iVar14;
              iVar15 = iVar29 * iVar15;
              iVar16 = iVar30 * iVar16;
            }
            iVar27 = iVar27 * iVar27;
            iVar28 = iVar28 * iVar28;
            iVar29 = iVar29 * iVar29;
            iVar30 = iVar30 * iVar30;
          } while (uVar2 != 1);
        }
        puVar9 = puVar9 + 2;
        auVar5._4_4_ = iVar23 * iVar18;
        auVar5._0_4_ = iVar21 * iVar17;
        auVar5._8_4_ = iVar24 * iVar19;
        auVar5._12_4_ = iVar26 * iVar20;
        uVar25 = NEON_sqxtn(CONCAT44(iVar23 * iVar18,iVar21 * iVar17),auVar5,4);
        auVar4._4_4_ = iVar28 * iVar14;
        auVar4._0_4_ = iVar27 * iVar13;
        auVar4._8_4_ = iVar29 * iVar15;
        auVar4._12_4_ = iVar30 * iVar16;
        uVar22 = NEON_sqxtn(CONCAT44(iVar28 * iVar14,iVar27 * iVar13),auVar4,4);
        puVar10[1] = uVar22;
        *puVar10 = uVar25;
        puVar10 = puVar10 + 2;
      } while (puVar9 != param_1 + ((ulong)uVar3 + 1) * 2);
      uVar12 = (ulong)((uVar3 + 1) * 8);
    }
    if ((int)uVar12 < param_3) {
      uVar7 = -(uVar12 >> 0x1f) & 0xfffffffe00000000 | uVar12 << 1;
      lVar11 = 0;
      do {
        iVar13 = (int)*(short *)((long)param_1 + lVar11 + uVar7);
        if ((int)param_4 < 2) {
          iVar14 = 1;
        }
        else {
          iVar15 = 1;
          uVar3 = param_4;
          do {
            uVar2 = uVar3 & 1;
            uVar3 = (int)uVar3 >> 1;
            iVar14 = iVar15 * iVar13;
            if (uVar2 == 0) {
              iVar14 = iVar15;
            }
            iVar13 = iVar13 * iVar13;
            iVar15 = iVar14;
          } while (uVar3 != 1);
        }
        iVar14 = iVar14 * iVar13;
        uVar6 = (undefined2)iVar14;
        if ((0xffff < iVar14 + 0x8000U) && (uVar6 = 0x7fff, iVar14 < 1)) {
          uVar6 = 0x8000;
        }
        *(undefined2 *)((long)param_2 + lVar11 + uVar7) = uVar6;
        lVar11 = lVar11 + 2;
      } while (lVar11 != ((ulong)(uint)((param_3 + -1) - (int)uVar12) + 1) * 2);
    }
  }
  return;
}


==================================================================

### FUNC 002b8934 (480 bytes) name=FUN_002b8934

void FUN_002b8934(long param_1,long param_2,int param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  ulong uVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  long lVar7;
  ulong uVar8;
  long lVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  undefined8 uVar20;
  int iVar21;
  undefined8 uVar22;
  int iVar23;
  int iVar24;
  undefined8 uVar25;
  int iVar26;
  int iVar27;
  undefined8 uVar28;
  int iVar29;
  int local_18 [6];
  
  if ((int)param_4 < 0) {
    local_18[3] = 1;
    local_18[4] = (int)(param_4 == 0xffffffff);
    local_18[0] = -local_18[4];
    if ((param_4 & 1) == 0) {
      local_18[1] = 1;
      local_18[2] = 0x7fffffff;
      local_18[4] = param_4 & 1;
    }
    else {
      local_18[1] = 0xffffffff;
      local_18[2] = 0x7fffffff;
    }
    lVar7 = 0;
    if (0 < param_3) {
      do {
        uVar3 = *(uint *)(param_1 + lVar7 * 4);
        iVar11 = 0;
        if ((int)((uVar3 ^ (int)uVar3 >> 0x1f) - ((int)uVar3 >> 0x1f)) < 3) {
          iVar11 = local_18[(int)(uVar3 + 2)];
        }
        *(int *)(param_2 + lVar7 * 4) = iVar11;
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < param_3);
      return;
    }
  }
  else {
    uVar8 = 0;
    if (7 < param_3) {
      uVar3 = param_3 - 8U >> 3;
      puVar5 = (undefined8 *)(param_1 + 0x10);
      puVar6 = (undefined8 *)(param_2 + 0x10);
      do {
        iVar10 = 1;
        iVar11 = 1;
        iVar12 = 1;
        iVar13 = 1;
        iVar14 = 1;
        iVar15 = 1;
        uVar28 = puVar5[1];
        uVar25 = *puVar5;
        uVar22 = puVar5[-1];
        uVar20 = puVar5[-2];
        iVar16 = iVar11;
        iVar17 = iVar12;
        iVar18 = iVar14;
        iVar19 = iVar15;
        uVar1 = param_4;
        if (1 < (int)param_4) {
          do {
            iVar10 = (int)uVar20;
            iVar13 = (int)((ulong)uVar20 >> 0x20);
            iVar21 = (int)uVar22;
            iVar23 = (int)((ulong)uVar22 >> 0x20);
            iVar24 = (int)uVar25;
            iVar26 = (int)((ulong)uVar25 >> 0x20);
            iVar27 = (int)uVar28;
            iVar29 = (int)((ulong)uVar28 >> 0x20);
            if ((uVar1 & 1) != 0) {
              iVar16 = iVar10 * iVar16;
              iVar17 = iVar13 * iVar17;
              iVar18 = iVar21 * iVar18;
              iVar19 = iVar23 * iVar19;
            }
            uVar2 = (int)uVar1 >> 1;
            uVar20 = CONCAT44(iVar13 * iVar13,iVar10 * iVar10);
            uVar22 = CONCAT44(iVar23 * iVar23,iVar21 * iVar21);
            if ((uVar1 & 1) != 0) {
              iVar11 = iVar11 * iVar24;
              iVar12 = iVar12 * iVar26;
              iVar14 = iVar14 * iVar27;
              iVar15 = iVar15 * iVar29;
            }
            uVar25 = CONCAT44(iVar26 * iVar26,iVar24 * iVar24);
            uVar28 = CONCAT44(iVar29 * iVar29,iVar27 * iVar27);
            iVar10 = iVar11;
            iVar13 = iVar14;
            uVar1 = uVar2;
          } while (uVar2 != 1);
        }
        puVar5 = puVar5 + 4;
        puVar6[-1] = CONCAT44((int)((ulong)uVar22 >> 0x20) * iVar19,(int)uVar22 * iVar18);
        puVar6[-2] = CONCAT44((int)((ulong)uVar20 >> 0x20) * iVar17,(int)uVar20 * iVar16);
        puVar6[1] = CONCAT44(iVar15 * (int)((ulong)uVar28 >> 0x20),iVar13 * (int)uVar28);
        *puVar6 = CONCAT44(iVar12 * (int)((ulong)uVar25 >> 0x20),iVar10 * (int)uVar25);
        puVar6 = puVar6 + 4;
      } while (puVar5 != (undefined8 *)(param_1 + (ulong)uVar3 * 0x20 + 0x30));
      uVar8 = (ulong)((uVar3 + 1) * 8);
    }
    if ((int)uVar8 < param_3) {
      uVar4 = -(uVar8 >> 0x1f) & 0xfffffffc00000000 | uVar8 << 2;
      param_2 = param_2 + uVar4;
      lVar7 = 0;
      lVar9 = ((ulong)(uint)((param_3 + -1) - (int)uVar8) + 1) * 4;
      do {
        while (iVar11 = *(int *)(param_1 + uVar4 + lVar7), (int)param_4 < 2) {
          *(int *)(param_2 + lVar7) = iVar11;
          lVar7 = lVar7 + 4;
          if (lVar7 == lVar9) {
            return;
          }
        }
        iVar12 = 1;
        uVar3 = param_4;
        do {
          uVar1 = uVar3 & 1;
          uVar3 = (int)uVar3 >> 1;
          iVar10 = iVar12 * iVar11;
          if (uVar1 == 0) {
            iVar10 = iVar12;
          }
          iVar11 = iVar11 * iVar11;
          iVar12 = iVar10;
        } while (uVar3 != 1);
        *(int *)(param_2 + lVar7) = iVar10 * iVar11;
        lVar7 = lVar7 + 4;
      } while (lVar7 != lVar9);
    }
  }
  return;
}


==================================================================

### FUNC 002b8b14 (408 bytes) name=FUN_002b8b14

void FUN_002b8b14(long param_1,long param_2,int param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  uint uVar5;
  undefined1 (*pauVar6) [16];
  float *pfVar7;
  long lVar8;
  ulong uVar9;
  float fVar10;
  float fVar12;
  float fVar13;
  undefined1 auVar11 [16];
  float fVar14;
  float fVar15;
  float fVar17;
  float fVar18;
  float fVar19;
  undefined1 auVar16 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  
  if (param_3 < 8) {
    uVar9 = 0;
    uVar5 = (param_4 ^ (int)param_4 >> 0x1f) - ((int)param_4 >> 0x1f);
  }
  else {
    uVar2 = param_3 - 8U >> 3;
    uVar9 = (long)(int)param_4 >> 0x3f;
    pfVar7 = (float *)(param_2 + 0x10);
    uVar9 = ((long)(int)param_4 ^ uVar9) - uVar9;
    pauVar6 = (undefined1 (*) [16])(param_1 + 0x10);
    do {
      auVar11 = *pauVar6;
      auVar16 = pauVar6[-1];
      uVar5 = (uint)uVar9;
      if ((int)param_4 < 0) {
        auVar21 = NEON_frecpe(auVar16,4);
        auVar20 = NEON_frecpe(auVar11,4);
        auVar24 = NEON_frecps(auVar16,auVar21,4);
        auVar23 = NEON_frecps(auVar11,auVar20,4);
        auVar22._0_4_ = auVar21._0_4_ * auVar24._0_4_;
        auVar22._4_4_ = auVar21._4_4_ * auVar24._4_4_;
        auVar22._8_4_ = auVar21._8_4_ * auVar24._8_4_;
        auVar22._12_4_ = auVar21._12_4_ * auVar24._12_4_;
        auVar24._0_4_ = auVar20._0_4_ * auVar23._0_4_;
        auVar24._4_4_ = auVar20._4_4_ * auVar23._4_4_;
        auVar24._8_4_ = auVar20._8_4_ * auVar23._8_4_;
        auVar24._12_4_ = auVar20._12_4_ * auVar23._12_4_;
        auVar21 = NEON_frecps(auVar16,auVar22,4);
        auVar20 = NEON_frecps(auVar11,auVar24,4);
        auVar16._0_4_ = auVar22._0_4_ * auVar21._0_4_;
        auVar16._4_4_ = auVar22._4_4_ * auVar21._4_4_;
        auVar16._8_4_ = auVar22._8_4_ * auVar21._8_4_;
        auVar16._12_4_ = auVar22._12_4_ * auVar21._12_4_;
        auVar11._0_4_ = auVar24._0_4_ * auVar20._0_4_;
        auVar11._4_4_ = auVar24._4_4_ * auVar20._4_4_;
        auVar11._8_4_ = auVar24._8_4_ * auVar20._8_4_;
        auVar11._12_4_ = auVar24._12_4_ * auVar20._12_4_;
        auVar20 = NEON_fmov(0x3f800000,4);
      }
      else {
        auVar20 = NEON_fmov(0x3f800000,4);
      }
      uVar3 = uVar9 & 0xffffffff;
      auVar21 = auVar20;
      auVar23 = auVar20;
      auVar24 = auVar20;
      if (1 < (int)uVar5) {
        do {
          fVar14 = auVar16._0_4_;
          fVar10 = auVar11._0_4_;
          fVar17 = auVar16._4_4_;
          fVar15 = auVar11._4_4_;
          fVar19 = auVar16._12_4_;
          fVar13 = auVar11._12_4_;
          fVar18 = auVar16._8_4_;
          fVar12 = auVar11._8_4_;
          auVar20 = auVar21;
          auVar23 = auVar24;
          if ((uVar3 & 1) != 0) {
            auVar23._0_4_ = auVar24._0_4_ * fVar14;
            auVar23._4_4_ = auVar24._4_4_ * fVar17;
            auVar23._8_4_ = auVar24._8_4_ * fVar18;
            auVar23._12_4_ = auVar24._12_4_ * fVar19;
            auVar20._0_4_ = auVar21._0_4_ * fVar10;
            auVar20._4_4_ = auVar21._4_4_ * fVar15;
            auVar20._8_4_ = auVar21._8_4_ * fVar12;
            auVar20._12_4_ = auVar21._12_4_ * fVar13;
          }
          uVar1 = (int)uVar3 >> 1;
          auVar16._0_4_ = fVar14 * fVar14;
          auVar16._4_4_ = fVar17 * fVar17;
          auVar16._8_4_ = fVar18 * fVar18;
          auVar16._12_4_ = fVar19 * fVar19;
          auVar11._0_4_ = fVar10 * fVar10;
          auVar11._4_4_ = fVar15 * fVar15;
          auVar11._8_4_ = fVar12 * fVar12;
          auVar11._12_4_ = fVar13 * fVar13;
          uVar3 = (ulong)uVar1;
          auVar21 = auVar20;
          auVar24 = auVar23;
        } while (uVar1 != 1);
      }
      pauVar6 = pauVar6 + 2;
      pfVar7[-2] = auVar23._8_4_ * auVar16._8_4_;
      pfVar7[-1] = auVar23._12_4_ * auVar16._12_4_;
      pfVar7[-4] = auVar23._0_4_ * auVar16._0_4_;
      pfVar7[-3] = auVar23._4_4_ * auVar16._4_4_;
      pfVar7[2] = auVar20._8_4_ * auVar11._8_4_;
      pfVar7[3] = auVar20._12_4_ * auVar11._12_4_;
      *pfVar7 = auVar20._0_4_ * auVar11._0_4_;
      pfVar7[1] = auVar20._4_4_ * auVar11._4_4_;
      pfVar7 = pfVar7 + 8;
    } while (pauVar6 != (undefined1 (*) [16])(param_1 + (ulong)uVar2 * 0x20 + 0x30));
    uVar9 = (ulong)((uVar2 + 1) * 8);
  }
  if ((int)uVar9 < param_3) {
    uVar3 = -(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar9 << 2;
    param_2 = param_2 + uVar3;
    lVar8 = ((ulong)(uint)((param_3 + -1) - (int)uVar9) + 1) * 4;
    lVar4 = 0;
    do {
      while (fVar10 = *(float *)(param_1 + uVar3 + lVar4), -1 < (int)param_4) {
        if ((int)uVar5 < 2) goto LAB_002b8c40;
LAB_002b8bfc:
        fVar15 = 1.0;
        uVar2 = uVar5;
        do {
          if ((uVar2 & 1) != 0) {
            fVar15 = fVar15 * fVar10;
          }
          uVar2 = (int)uVar2 >> 1;
          fVar10 = fVar10 * fVar10;
        } while (uVar2 != 1);
        *(float *)(param_2 + lVar4) = fVar15 * fVar10;
        lVar4 = lVar4 + 4;
        if (lVar4 == lVar8) {
          return;
        }
      }
      fVar10 = 1.0 / fVar10;
      if (1 < (int)uVar5) goto LAB_002b8bfc;
LAB_002b8c40:
      *(float *)(param_2 + lVar4) = fVar10 * 1.0;
      lVar4 = lVar4 + 4;
    } while (lVar4 != lVar8);
  }
  return;
}


==================================================================

### FUNC 002b8cac (464 bytes) name=FUN_002b8cac

undefined8 FUN_002b8cac(uint *param_1,int *param_2,int param_3,int param_4,double *param_5)

{
  int iVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  int *piVar5;
  long lVar6;
  int *piVar7;
  int iVar8;
  long lVar9;
  undefined8 uVar10;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  long *local_18;
  long alStack_10 [2];
  
  if (param_4 < param_3) {
    uVar10 = 0;
    *param_2 = 0;
    param_2[1] = 0;
  }
  else {
    cv::Mat::reshape((int)param_1,1);
    if (0 < local_58) {
      lVar6 = 0;
      do {
        if (0 < local_54) {
          lVar9 = lVar6 * *local_18;
          piVar7 = (int *)(local_50 + lVar9);
          if ((*(int *)(local_50 + lVar9) < param_3) || (param_4 < *(int *)(local_50 + lVar9))) {
            iVar8 = 0;
LAB_002b8db4:
            param_2[1] = (int)lVar6;
            uVar10 = 0;
            iVar1 = (*param_1 >> 3 & 0x1ff) + 1;
            iVar2 = 0;
            if (iVar1 != 0) {
              iVar2 = iVar8 / iVar1;
            }
            *param_2 = iVar8 - iVar2 * iVar1;
            *param_5 = (double)*piVar7;
            goto LAB_002b8de0;
          }
          iVar8 = 0;
          piVar5 = (int *)(local_50 + lVar9 + 4);
          while (piVar7 = piVar5, iVar8 = iVar8 + 1, iVar8 != local_54) {
            if ((*piVar7 < param_3) || (piVar5 = piVar7 + 1, param_4 < *piVar7)) goto LAB_002b8db4;
          }
        }
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < local_58);
    }
    uVar10 = 1;
    *param_5 = 0.0;
LAB_002b8de0:
    if (local_28 != 0) {
      piVar7 = (int *)(local_28 + 0x14);
      do {
        iVar8 = *piVar7;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar4) {
          *piVar7 = iVar8 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar8 == 1) {
        cv::Mat::deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar8 = 0;
      do {
        *local_20 = 0;
        iVar8 = iVar8 + 1;
        local_20 = local_20 + 1;
      } while (iVar8 < local_5c);
    }
    if (local_18 != alStack_10) {
      cv::fastFree(local_18);
      return uVar10;
    }
  }
  return uVar10;
}


==================================================================

### FUNC 002b8e7c (508 bytes) name=FUN_002b8e7c

bool FUN_002b8e7c(uint *param_1,int *param_2,int param_3,int param_4,double *param_5)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  char *pcVar6;
  long lVar7;
  char *pcVar8;
  int iVar9;
  long lVar10;
  bool bVar11;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  long *local_18;
  long alStack_10 [2];
  
  if (param_3 >= -0x80 || 0x7f >= param_4) {
    bVar11 = param_4 < -0x80 || (0x7f < param_3 || param_4 < param_3);
    if (param_4 >= -0x80 && (0x7f >= param_3 && param_4 >= param_3)) {
      cv::Mat::reshape((int)param_1,1);
      if (0 < local_58) {
        lVar7 = 0;
        do {
          if (0 < local_54) {
            lVar10 = lVar7 * *local_18;
            pcVar8 = (char *)(local_50 + lVar10);
            if ((*(char *)(local_50 + lVar10) < param_3) || (param_4 < *(char *)(local_50 + lVar10))
               ) {
              iVar9 = 0;
LAB_002b8fb4:
              param_2[1] = (int)lVar7;
              iVar1 = (*param_1 >> 3 & 0x1ff) + 1;
              iVar3 = 0;
              if (iVar1 != 0) {
                iVar3 = iVar9 / iVar1;
              }
              *param_2 = iVar9 - iVar3 * iVar1;
              *param_5 = (double)(int)*pcVar8;
              goto LAB_002b8fdc;
            }
            iVar9 = 0;
            pcVar6 = (char *)(local_50 + lVar10 + 1);
            while (pcVar8 = pcVar6, iVar9 = iVar9 + 1, iVar9 != local_54) {
              if ((*pcVar8 < param_3) || (pcVar6 = pcVar8 + 1, param_4 < *pcVar8))
              goto LAB_002b8fb4;
            }
          }
          lVar7 = lVar7 + 1;
        } while ((int)lVar7 < local_58);
      }
      bVar11 = true;
      *param_5 = 0.0;
LAB_002b8fdc:
      if (local_28 != 0) {
        piVar2 = (int *)(local_28 + 0x14);
        do {
          iVar9 = *piVar2;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar5) {
            *piVar2 = iVar9 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar9 == 1) {
          cv::Mat::deallocate(aMStack_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar9 = 0;
        do {
          *local_20 = 0;
          iVar9 = iVar9 + 1;
          local_20 = local_20 + 1;
        } while (iVar9 < local_5c);
      }
      if (local_18 != alStack_10) {
        cv::fastFree(local_18);
      }
      return bVar11;
    }
    *param_2 = 0;
    param_2[1] = 0;
  }
  return param_3 < -0x80 && 0x7f < param_4;
}


==================================================================

### FUNC 002b9078 (492 bytes) name=FUN_002b9078

uint FUN_002b9078(uint *param_1,int *param_2,uint param_3,int param_4,double *param_5)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  byte *pbVar6;
  long lVar7;
  byte *pbVar8;
  int iVar9;
  long lVar10;
  uint uVar11;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  long *local_18;
  long alStack_10 [2];
  
  uVar11 = (uint)(0xff < param_4) & param_3 >> 0x1f;
  if (uVar11 == 0) {
    if (((int)param_3 < 0x100 && (int)param_3 <= param_4) && -1 < param_4) {
      cv::Mat::reshape((int)param_1,1);
      if (0 < local_58) {
        lVar7 = 0;
        do {
          if (0 < local_54) {
            lVar10 = lVar7 * *local_18;
            pbVar8 = (byte *)(local_50 + lVar10);
            if (((int)(uint)*(byte *)(local_50 + lVar10) < (int)param_3) ||
               (param_4 < (int)(uint)*(byte *)(local_50 + lVar10))) {
              iVar9 = 0;
LAB_002b91a0:
              param_2[1] = (int)lVar7;
              iVar1 = (*param_1 >> 3 & 0x1ff) + 1;
              iVar3 = 0;
              if (iVar1 != 0) {
                iVar3 = iVar9 / iVar1;
              }
              *param_2 = iVar9 - iVar3 * iVar1;
              *param_5 = (double)*pbVar8;
              uVar11 = 0;
              goto LAB_002b91c8;
            }
            iVar9 = 0;
            pbVar6 = (byte *)(local_50 + lVar10 + 1);
            while (pbVar8 = pbVar6, iVar9 = iVar9 + 1, iVar9 != local_54) {
              if (((int)(uint)*pbVar8 < (int)param_3) ||
                 (pbVar6 = pbVar8 + 1, param_4 < (int)(uint)*pbVar8)) goto LAB_002b91a0;
            }
          }
          lVar7 = lVar7 + 1;
        } while ((int)lVar7 < local_58);
      }
      uVar11 = 1;
      *param_5 = 0.0;
LAB_002b91c8:
      if (local_28 != 0) {
        piVar2 = (int *)(local_28 + 0x14);
        do {
          iVar9 = *piVar2;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar5) {
            *piVar2 = iVar9 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar9 == 1) {
          cv::Mat::deallocate(aMStack_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar9 = 0;
        do {
          *local_20 = 0;
          iVar9 = iVar9 + 1;
          local_20 = local_20 + 1;
        } while (iVar9 < local_5c);
      }
      if (local_18 != alStack_10) {
        cv::fastFree(local_18);
      }
      return uVar11;
    }
    *param_2 = 0;
    param_2[1] = 0;
  }
  return uVar11;
}


==================================================================

### FUNC 002b9264 (496 bytes) name=FUN_002b9264

bool FUN_002b9264(uint *param_1,int *param_2,int param_3,int param_4,double *param_5)

{
  int iVar1;
  int *piVar2;
  short sVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  long lVar7;
  short *psVar8;
  int iVar9;
  int iVar10;
  bool bVar11;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  long *local_18;
  long alStack_10 [2];
  
  if (param_3 >= -0x8000 || 0x7fff >= param_4) {
    bVar11 = param_4 < -0x8000 || (0x7fff < param_3 || param_4 < param_3);
    if (param_4 >= -0x8000 && (0x7fff >= param_3 && param_4 >= param_3)) {
      cv::Mat::reshape((int)param_1,1);
      if (0 < local_58) {
        lVar7 = 0;
        do {
          if (0 < local_54) {
            psVar8 = (short *)(local_50 + lVar7 * *local_18);
            sVar3 = *(short *)(local_50 + lVar7 * *local_18);
            iVar10 = (int)sVar3;
            if ((sVar3 < param_3) || (iVar9 = 0, param_4 < sVar3)) {
              iVar9 = 0;
LAB_002b9394:
              param_2[1] = (int)lVar7;
              iVar1 = (*param_1 >> 3 & 0x1ff) + 1;
              iVar4 = 0;
              if (iVar1 != 0) {
                iVar4 = iVar9 / iVar1;
              }
              *param_2 = iVar9 - iVar4 * iVar1;
              *param_5 = (double)iVar10;
              goto LAB_002b93b8;
            }
            while (iVar9 = iVar9 + 1, iVar9 != local_54) {
              psVar8 = psVar8 + 1;
              sVar3 = *psVar8;
              iVar10 = (int)sVar3;
              if ((sVar3 < param_3) || (param_4 < sVar3)) goto LAB_002b9394;
            }
          }
          lVar7 = lVar7 + 1;
        } while ((int)lVar7 < local_58);
      }
      bVar11 = true;
      *param_5 = 0.0;
LAB_002b93b8:
      if (local_28 != 0) {
        piVar2 = (int *)(local_28 + 0x14);
        do {
          iVar10 = *piVar2;
          cVar5 = '\x01';
          bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar6) {
            *piVar2 = iVar10 + -1;
            cVar5 = ExclusiveMonitorsStatus();
          }
        } while (cVar5 != '\0');
        if (iVar10 == 1) {
          cv::Mat::deallocate(aMStack_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar10 = 0;
        do {
          *local_20 = 0;
          iVar10 = iVar10 + 1;
          local_20 = local_20 + 1;
        } while (iVar10 < local_5c);
      }
      if (local_18 != alStack_10) {
        cv::fastFree(local_18);
      }
      return bVar11;
    }
    *param_2 = 0;
    param_2[1] = 0;
  }
  return param_3 < -0x8000 && 0x7fff < param_4;
}


==================================================================

### FUNC 002b9454 (480 bytes) name=FUN_002b9454

uint FUN_002b9454(uint *param_1,int *param_2,uint param_3,int param_4,double *param_5)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  long lVar6;
  ushort *puVar7;
  int iVar8;
  ushort uVar9;
  uint uVar10;
  Mat aMStack_60 [4];
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  long *local_18;
  long alStack_10 [2];
  
  uVar10 = (uint)(0xffff < param_4) & param_3 >> 0x1f;
  if (uVar10 == 0) {
    if (((int)param_3 < 0x10000 && (int)param_3 <= param_4) && -1 < param_4) {
      cv::Mat::reshape((int)param_1,1);
      if (0 < local_58) {
        lVar6 = 0;
        do {
          if (0 < local_54) {
            puVar7 = (ushort *)(local_50 + lVar6 * *local_18);
            uVar9 = *(ushort *)(local_50 + lVar6 * *local_18);
            if (((int)(uint)uVar9 < (int)param_3) || (iVar8 = 0, param_4 < (int)(uint)uVar9)) {
              iVar8 = 0;
LAB_002b9574:
              param_2[1] = (int)lVar6;
              iVar1 = (*param_1 >> 3 & 0x1ff) + 1;
              iVar3 = 0;
              if (iVar1 != 0) {
                iVar3 = iVar8 / iVar1;
              }
              *param_2 = iVar8 - iVar3 * iVar1;
              *param_5 = (double)uVar9;
              uVar10 = 0;
              goto LAB_002b9598;
            }
            while (iVar8 = iVar8 + 1, iVar8 != local_54) {
              puVar7 = puVar7 + 1;
              uVar9 = *puVar7;
              if (((int)(uint)uVar9 < (int)param_3) || (param_4 < (int)(uint)uVar9))
              goto LAB_002b9574;
            }
          }
          lVar6 = lVar6 + 1;
        } while ((int)lVar6 < local_58);
      }
      uVar10 = 1;
      *param_5 = 0.0;
LAB_002b9598:
      if (local_28 != 0) {
        piVar2 = (int *)(local_28 + 0x14);
        do {
          iVar8 = *piVar2;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar5) {
            *piVar2 = iVar8 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar8 == 1) {
          cv::Mat::deallocate(aMStack_60);
        }
      }
      local_28 = 0;
      local_50 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      if (0 < local_5c) {
        iVar8 = 0;
        do {
          *local_20 = 0;
          iVar8 = iVar8 + 1;
          local_20 = local_20 + 1;
        } while (iVar8 < local_5c);
      }
      if (local_18 != alStack_10) {
        cv::fastFree(local_18);
      }
      return uVar10;
    }
    *param_2 = 0;
    param_2[1] = 0;
  }
  return uVar10;
}


==================================================================

### FUNC 002b9634 (176 bytes) name=fastAtan2

/* cv::fastAtan2(float, float) */

float cv::fastAtan2(float param_1,float param_2)

{
  float fVar1;
  float fVar2;
  
  fVar2 = ABS(param_1);
  fVar1 = ABS(param_2);
  if (fVar1 < fVar2) {
    fVar1 = fVar1 / (fVar2 + DAT_002b96e4);
    fVar2 = fVar1 * fVar1;
    fVar2 = DAT_002b96f8 -
            fVar1 * (DAT_002b96f4 +
                    fVar2 * (DAT_002b96f0 + fVar2 * (DAT_002b96ec + DAT_002b96e8 * fVar2)));
  }
  else {
    fVar2 = fVar2 / (fVar1 + DAT_002b96e4);
    fVar1 = fVar2 * fVar2;
    fVar2 = (DAT_002b96f4 + fVar1 * (DAT_002b96f0 + fVar1 * (DAT_002b96ec + DAT_002b96e8 * fVar1)))
            * fVar2;
  }
  if (param_2 < 0.0) {
    fVar2 = DAT_002b96fc - fVar2;
  }
  if (param_1 < 0.0) {
    return DAT_002b9700 - fVar2;
  }
  return fVar2;
}


==================================================================

### FUNC 002b9708 (192 bytes) name=cubeRoot

/* cv::cubeRoot(float) */

int cv::cubeRoot(float param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  double dVar4;
  
  iVar1 = ((uint)param_1 >> 0x17 & 0xff) - 0x7f;
  iVar2 = iVar1 % 3;
  iVar3 = 3;
  if (iVar2 < 0) {
    iVar3 = 0;
  }
  iVar2 = iVar2 - iVar3;
  dVar4 = (double)(float)((uint)param_1 & 0x7fffff | (iVar2 + 0x7f) * 0x800000);
  iVar3 = (int)(float)((DAT_002b97e8 +
                       (DAT_002b97e0 +
                       (DAT_002b97d8 + (DAT_002b97d0 + DAT_002b97c8 * dVar4) * dVar4) * dVar4) *
                       dVar4) / ((DAT_002b9808 +
                                 (DAT_002b9800 + (DAT_002b97f8 + DAT_002b97f0 * dVar4) * dVar4) *
                                 dVar4) * dVar4 + 1.0)) + ((iVar1 - iVar2) / 3) * 0x800000 +
          ((uint)param_1 & 0x80000000);
  if (param_1 == 0.0) {
    iVar3 = 0;
  }
  return iVar3;
}


==================================================================

### FUNC 002b9810 (1544 bytes) name=magnitude

/* cv::magnitude(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::magnitude(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  void *__dest;
  int *piVar8;
  Mat *pMVar9;
  undefined4 *puVar10;
  undefined8 *puVar11;
  ulong uVar12;
  uchar *local_198;
  undefined8 local_190;
  undefined8 local_188;
  Mat *local_180;
  Mat *local_178;
  String *local_170;
  undefined8 uStack_168;
  NAryMatIterator aNStack_160 [32];
  ulong local_140;
  int local_138;
  uint local_120;
  int local_11c;
  int local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  int local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::type(param_1,-1);
  iVar5 = _InputArray::depth(param_1,-1);
  iVar6 = _InputArray::channels(param_1,-1);
  _InputArray::size((int)param_1);
  _InputArray::size((int)param_2);
  if ((((local_c0 != (int)local_60) || (local_bc != local_60._4_4_)) ||
      (iVar7 = _InputArray::type(param_2,-1), iVar4 != iVar7)) || (1 < iVar5 - 5U)) {
    local_60 = 0;
    local_58 = 0;
    __dest = (void *)String::allocate((String *)&local_60,0x59);
    memcpy(__dest,&DAT_00468440,0x59);
    error(-0xd7,(String *)&local_60,
          "void cv::magnitude(cv::InputArray, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0xad);
    String::deallocate((String *)&local_60);
  }
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar9 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar9;
    local_11c = *(int *)(pMVar9 + 4);
    local_118 = *(int *)(pMVar9 + 8);
    local_114 = *(undefined4 *)(pMVar9 + 0xc);
    local_110 = *(undefined8 *)(pMVar9 + 0x10);
    local_108 = *(undefined8 *)(pMVar9 + 0x18);
    local_100 = *(undefined8 *)(pMVar9 + 0x20);
    local_f8 = *(undefined8 *)(pMVar9 + 0x28);
    local_f0 = *(undefined8 *)(pMVar9 + 0x30);
    local_e8 = *(long *)(pMVar9 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar8 = (int *)(local_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar3) {
          *piVar8 = *piVar8 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar9 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar9 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(int *)pMVar9;
    local_b0 = *(undefined8 *)(pMVar9 + 0x10);
    local_bc = *(int *)(pMVar9 + 4);
    local_b8 = *(undefined4 *)(pMVar9 + 8);
    local_b4 = *(undefined4 *)(pMVar9 + 0xc);
    local_a8 = *(undefined8 *)(pMVar9 + 0x18);
    local_a0 = *(undefined8 *)(pMVar9 + 0x20);
    local_98 = *(undefined8 *)(pMVar9 + 0x28);
    local_90 = *(undefined8 *)(pMVar9 + 0x30);
    local_88 = *(long *)(pMVar9 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar8 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar3) {
          *piVar8 = *piVar8 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar9 + 0x48);
      local_68 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  _OutputArray::create(param_3,local_11c,local_e0,local_120 & 0xfff,-1,false,0);
  iVar4 = _InputArray::kind((_InputArray *)param_3);
  if (iVar4 == 0x10000) {
    pMVar9 = *(Mat **)(param_3 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar1 = *(uint *)pMVar9;
    local_50 = *(undefined8 *)(pMVar9 + 0x10);
    local_60 = *(ulong *)pMVar9;
    local_58 = *(undefined8 *)(pMVar9 + 8);
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar8 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar3) {
          *piVar8 = *piVar8 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar1;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  uStack_168 = 0;
  local_180 = (Mat *)&local_120;
  local_178 = (Mat *)&local_c0;
  local_170 = (String *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_160,&local_180,&local_198,-1);
  uVar12 = 0;
  if (iVar5 == 5) {
    for (; uVar12 < local_140; uVar12 = uVar12 + 1) {
      FUN_003ca620(local_198,local_190,local_188,iVar6 * local_138);
      NAryMatIterator::operator++(aNStack_160);
    }
  }
  else {
    for (; uVar12 < local_140; uVar12 = uVar12 + 1) {
      FUN_003ca790(local_198,local_190,local_188,iVar6 * local_138);
      NAryMatIterator::operator++(aNStack_160);
    }
  }
  if (local_28 != 0) {
    piVar8 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar3) {
        *piVar8 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar4 = 0;
    puVar11 = local_20;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar4 = iVar4 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar4 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar8 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar3) {
        *piVar8 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    puVar10 = local_80;
    do {
      *puVar10 = 0;
      iVar4 = iVar4 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar8 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar3) {
        *piVar8 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    piVar8 = local_e0;
    do {
      *piVar8 = 0;
      iVar4 = iVar4 + 1;
      piVar8 = piVar8 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002b9ea8 (4860 bytes) name=polarToCart

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::polarToCart(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_OutputArray const&, bool) */

void cv::polarToCart(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _OutputArray *param_4,bool param_5)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  ulong uVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  uint uVar7;
  uint uVar8;
  bool bVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [12];
  double dVar12;
  double dVar13;
  double dVar14;
  double *pdVar15;
  double *pdVar16;
  char cVar17;
  uint uVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  ulong uVar23;
  void *__dest;
  long lVar24;
  char *pcVar25;
  undefined1 (*pauVar26) [12];
  float *pfVar27;
  ulong uVar28;
  uint uVar29;
  double *pdVar30;
  ulong uVar31;
  undefined4 *puVar32;
  int *piVar33;
  Mat *pMVar34;
  double *pdVar35;
  double *pdVar36;
  uint uVar37;
  double *pdVar38;
  int *piVar39;
  long lVar40;
  uint uVar41;
  float *pfVar42;
  long lVar43;
  float *__src;
  float *__src_00;
  undefined8 uVar44;
  undefined8 uVar45;
  double dVar46;
  double dVar47;
  float fVar49;
  undefined8 uVar48;
  float fVar50;
  float fVar52;
  undefined8 uVar51;
  double dVar53;
  double dVar54;
  double dVar55;
  float fVar56;
  double dVar57;
  double dVar58;
  uint local_69c;
  uint local_698;
  Mat *local_678;
  Mat *local_670;
  Mat *local_668;
  Mat *local_660;
  ulong local_650;
  double *local_638;
  double *local_630;
  double *local_628;
  double *local_620;
  Mat *local_618;
  Mat *local_610;
  Mat *local_608;
  Mat *local_600;
  undefined8 local_5f8;
  NAryMatIterator aNStack_5f0 [32];
  ulong local_5d0;
  int local_5c8;
  undefined4 local_5b0;
  int local_5ac;
  int local_5a8;
  int local_5a4;
  long local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  undefined8 local_588;
  undefined8 local_580;
  long local_578;
  int *local_570;
  undefined8 *local_568;
  undefined8 local_560;
  undefined8 local_558;
  uint local_550;
  int local_54c;
  int local_548;
  undefined4 local_544;
  undefined8 local_540;
  undefined8 local_538;
  undefined8 local_530;
  undefined8 local_528;
  undefined8 local_520;
  long local_518;
  int *local_510;
  undefined8 *local_508;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined4 local_4f0;
  int local_4ec;
  undefined4 local_4e8;
  undefined4 local_4e4;
  undefined8 local_4e0;
  undefined8 local_4d8;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  long local_4b8;
  undefined4 *local_4b0;
  undefined8 *local_4a8;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined4 local_490;
  int local_48c;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  undefined4 *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  float *local_430;
  ulong local_428;
  float afStack_420 [264];
  
  uVar23 = _InputArray::type(param_2,-1);
  uVar18 = (uint)uVar23;
  uVar7 = uVar18 & 7;
  uVar8 = (uint)((uVar23 & 0xffffffff) >> 3) & 0x1ff;
  uVar1 = uVar8 + 1;
  if ((1 < uVar7 - 5) ||
     ((cVar17 = _InputArray::empty(param_1), cVar17 == '\0' &&
      (uVar22 = _InputArray::type(param_1,-1), uVar18 != uVar22)))) {
    local_430 = (float *)0x0;
    local_428 = 0;
    __dest = (void *)String::allocate((String *)&local_430,0x4d);
    memcpy(__dest,&DAT_00468510,0x4d);
    error(-0xd7,(String *)&local_430,
          "void cv::polarToCart(cv::InputArray, cv::InputArray, cv::OutputArray, cv::OutputArray, bool)"
          ,"/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x271);
    String::deallocate((String *)&local_430);
  }
  iVar19 = _InputArray::kind(param_1);
  if (iVar19 == 0x10000) {
    pMVar34 = *(Mat **)(param_1 + 8);
    local_570 = &local_5a8;
    local_568 = &local_560;
    local_5b0 = *(undefined4 *)pMVar34;
    local_5ac = *(int *)(pMVar34 + 4);
    local_5a8 = *(int *)(pMVar34 + 8);
    local_5a4 = *(int *)(pMVar34 + 0xc);
    local_5a0 = *(long *)(pMVar34 + 0x10);
    local_598 = *(undefined8 *)(pMVar34 + 0x18);
    local_590 = *(undefined8 *)(pMVar34 + 0x20);
    local_588 = *(undefined8 *)(pMVar34 + 0x28);
    local_580 = *(undefined8 *)(pMVar34 + 0x30);
    local_578 = *(long *)(pMVar34 + 0x38);
    local_558 = 0;
    local_560 = 0;
    if (local_578 != 0) {
      piVar33 = (int *)(local_578 + 0x14);
      do {
        cVar17 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar9) {
          *piVar33 = *piVar33 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (2 < *(int *)(pMVar34 + 4)) {
      local_5ac = 0;
      Mat::copySize((Mat *)&local_5b0,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_678 = (Mat *)&local_5b0;
  iVar19 = _InputArray::kind(param_2);
  if (iVar19 == 0x10000) {
    pMVar34 = *(Mat **)(param_2 + 8);
    local_510 = &local_548;
    local_508 = &local_500;
    local_550 = *(uint *)pMVar34;
    local_54c = *(int *)(pMVar34 + 4);
    local_548 = *(int *)(pMVar34 + 8);
    local_544 = *(undefined4 *)(pMVar34 + 0xc);
    local_540 = *(undefined8 *)(pMVar34 + 0x10);
    local_538 = *(undefined8 *)(pMVar34 + 0x18);
    local_530 = *(undefined8 *)(pMVar34 + 0x20);
    local_528 = *(undefined8 *)(pMVar34 + 0x28);
    local_520 = *(undefined8 *)(pMVar34 + 0x30);
    local_518 = *(long *)(pMVar34 + 0x38);
    local_4f8 = 0;
    local_500 = 0;
    if (local_518 != 0) {
      piVar33 = (int *)(local_518 + 0x14);
      do {
        cVar17 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar9) {
          *piVar33 = *piVar33 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (2 < *(int *)(pMVar34 + 4)) {
      local_54c = 0;
      Mat::copySize((Mat *)&local_550,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_670 = (Mat *)&local_550;
  if (local_5a0 != 0) {
    if (local_5ac < 3) {
      lVar24 = (long)local_5a4 * (long)local_5a8;
    }
    else {
      lVar43 = 0;
      lVar24 = 1;
      do {
        piVar33 = local_570 + lVar43;
        lVar43 = lVar43 + 1;
        lVar24 = lVar24 * *piVar33;
      } while ((int)lVar43 < local_5ac);
    }
    if (lVar24 != 0) {
      iVar19 = local_510[-1];
      if (iVar19 == local_570[-1]) {
        if (iVar19 == 2) {
          if ((*local_510 == *local_570) && (local_510[1] == local_570[1])) goto LAB_002ba090;
        }
        else {
          if (iVar19 < 1) goto LAB_002ba090;
          if (*local_510 == *local_570) {
            piVar39 = local_570;
            piVar33 = local_510;
            do {
              piVar33 = piVar33 + 1;
              if (piVar39 == local_570 + (iVar19 - 1)) goto LAB_002ba090;
              piVar39 = piVar39 + 1;
            } while (*piVar33 == *piVar39);
          }
        }
      }
      local_430 = (float *)0x0;
      local_428 = 0;
      pcVar25 = (char *)String::allocate((String *)&local_430,0x25);
      cVar17 = s_Mag_empty______Angle_size____Mag_004684e8[0x24];
      uVar45 = s_Mag_empty______Angle_size____Mag_004684e8._24_8_;
      uVar44 = s_Mag_empty______Angle_size____Mag_004684e8._16_8_;
      uVar51 = s_Mag_empty______Angle_size____Mag_004684e8._8_8_;
      uVar48 = s_Mag_empty______Angle_size____Mag_004684e8._0_8_;
      *(undefined4 *)(pcVar25 + 0x20) = s_Mag_empty______Angle_size____Mag_004684e8._32_4_;
      pcVar25[0x24] = cVar17;
      *(undefined8 *)pcVar25 = uVar48;
      *(undefined8 *)(pcVar25 + 8) = uVar51;
      *(undefined8 *)(pcVar25 + 0x10) = uVar44;
      *(undefined8 *)(pcVar25 + 0x18) = uVar45;
      error(-0xd7,(String *)&local_430,
            "void cv::polarToCart(cv::InputArray, cv::InputArray, cv::OutputArray, cv::OutputArray, bool)"
            ,"/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x277);
      String::deallocate((String *)&local_430);
    }
  }
LAB_002ba090:
  _OutputArray::create(param_3,local_54c,local_510,uVar18,-1,false,0);
  _OutputArray::create(param_4,local_54c,local_510,uVar18,-1,false,0);
  iVar19 = _InputArray::kind((_InputArray *)param_3);
  if (iVar19 == 0x10000) {
    pMVar34 = *(Mat **)(param_3 + 8);
    local_4b0 = &local_4e8;
    local_4a8 = &local_4a0;
    local_4f0 = *(undefined4 *)pMVar34;
    local_4ec = *(int *)(pMVar34 + 4);
    local_4e8 = *(undefined4 *)(pMVar34 + 8);
    local_4e4 = *(undefined4 *)(pMVar34 + 0xc);
    local_4e0 = *(undefined8 *)(pMVar34 + 0x10);
    local_4d8 = *(undefined8 *)(pMVar34 + 0x18);
    local_4d0 = *(undefined8 *)(pMVar34 + 0x20);
    local_4c8 = *(undefined8 *)(pMVar34 + 0x28);
    local_4c0 = *(undefined8 *)(pMVar34 + 0x30);
    local_4b8 = *(long *)(pMVar34 + 0x38);
    local_498 = 0;
    local_4a0 = 0;
    if (local_4b8 != 0) {
      piVar33 = (int *)(local_4b8 + 0x14);
      do {
        cVar17 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar9) {
          *piVar33 = *piVar33 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (2 < *(int *)(pMVar34 + 4)) {
      local_4ec = 0;
      Mat::copySize((Mat *)&local_4f0,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_668 = (Mat *)&local_4f0;
  iVar19 = _InputArray::kind((_InputArray *)param_4);
  if (iVar19 == 0x10000) {
    pMVar34 = *(Mat **)(param_4 + 8);
    local_450 = &local_488;
    local_448 = &local_440;
    local_490 = *(undefined4 *)pMVar34;
    local_48c = *(int *)(pMVar34 + 4);
    local_488 = *(undefined4 *)(pMVar34 + 8);
    local_484 = *(undefined4 *)(pMVar34 + 0xc);
    local_480 = *(undefined8 *)(pMVar34 + 0x10);
    local_478 = *(undefined8 *)(pMVar34 + 0x18);
    local_470 = *(undefined8 *)(pMVar34 + 0x20);
    local_468 = *(undefined8 *)(pMVar34 + 0x28);
    local_460 = *(undefined8 *)(pMVar34 + 0x30);
    local_458 = *(long *)(pMVar34 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar33 = (int *)(local_458 + 0x14);
      do {
        cVar17 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
        if (bVar9) {
          *piVar33 = *piVar33 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (2 < *(int *)(pMVar34 + 4)) {
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  local_660 = (Mat *)&local_490;
  local_618 = local_678;
  local_608 = local_668;
  local_5f8 = 0;
  local_610 = local_670;
  local_600 = local_660;
  NAryMatIterator::NAryMatIterator(aNStack_5f0,&local_618,(uchar **)&local_638,-1);
  uVar18 = 0;
  if (uVar1 != 0) {
    uVar18 = (uVar8 + 0x400) / uVar1;
  }
  __src = afStack_420;
  uVar23 = 0x88442211UL >> ((local_550 & 7) << 2) & 0xf;
  uVar22 = uVar1 * local_5c8;
  local_430 = __src;
  local_428 = 0x108;
  uVar8 = uVar22;
  if ((int)(uVar18 * uVar1) < (int)uVar22) {
    uVar8 = uVar18 * uVar1;
  }
  if (uVar7 == 6) {
    uVar31 = (ulong)(int)(uVar8 << 1);
    if (uVar31 < 0x109) {
      local_428 = uVar31;
    }
    else {
      uVar28 = uVar31 << 2;
      if (0x1fc0000000000000 < uVar31) {
        uVar28 = 0xffffffffffffffff;
      }
      __src = operator_new__(uVar28);
    }
    __src_00 = __src + (int)uVar8;
    local_430 = __src;
    local_428 = uVar31;
  }
  else {
    __src_00 = (float *)0x0;
    __src = (float *)0x0;
  }
  dVar14 = DAT_002bb460;
  dVar13 = DAT_002bb458;
  dVar12 = DAT_002bb450;
  local_650 = 0;
  uVar1 = -((uint)((ulong)__src >> 2) & 3) & 3;
  if (local_5d0 != 0) {
    do {
      if (0 < (int)uVar22) {
        uVar18 = uVar22;
        if ((int)uVar8 < (int)uVar22) {
          uVar18 = uVar8;
        }
        local_69c = uVar22;
        local_698 = uVar8;
        if (uVar7 == 5) goto LAB_002ba698;
        do {
          pdVar16 = local_620;
          pdVar30 = local_628;
          pdVar15 = local_638;
          if ((int)uVar18 < 1) {
            if (local_638 != (double *)0x0) {
              lVar43 = (long)(int)uVar18;
              goto LAB_002ba628;
            }
            goto LAB_002baa10;
          }
          uVar20 = uVar18;
          if (uVar1 < uVar18) {
            uVar20 = uVar1;
          }
          uVar2 = uVar18;
          if (((int)uVar18 < 5) || (uVar29 = 0, uVar2 = uVar20, uVar20 != 0)) {
            uVar20 = uVar2;
            *__src = (float)*local_630;
            uVar29 = uVar20;
            if ((uVar20 != 1) && (__src[1] = (float)local_630[1], uVar20 != 2)) {
              __src[2] = (float)local_630[2];
              if (uVar20 == 4) {
                __src[3] = (float)local_630[3];
              }
              else {
                uVar29 = 3;
              }
            }
            if (uVar20 != uVar18) goto LAB_002ba2c4;
          }
          else {
LAB_002ba2c4:
            uVar2 = ((uVar18 - uVar20) - 4 >> 2) + 1;
            iVar19 = uVar2 * 4;
            if (2 < (uVar18 - 1) - uVar20) {
              uVar37 = 0;
              pauVar26 = (undefined1 (*) [12])(local_630 + uVar20);
              pfVar27 = __src + uVar20;
              do {
                uVar37 = uVar37 + 1;
                auVar11 = *pauVar26;
                auVar10._12_4_ = (int)((ulong)*(double *)((long)*pauVar26 + 8) >> 0x20);
                auVar10._0_12_ = auVar11;
                *(ulong *)(pfVar27 + 2) =
                     CONCAT44((float)*(double *)pauVar26[2],(float)*(double *)(pauVar26[1] + 4));
                *(ulong *)pfVar27 = CONCAT44((float)auVar10._8_8_,(float)auVar11._0_8_);
                pauVar26 = (undefined1 (*) [12])((long)pauVar26[2] + 8);
                pfVar27 = pfVar27 + 4;
              } while (uVar37 < uVar2);
              uVar29 = uVar29 + iVar19;
              if (iVar19 == uVar18 - uVar20) goto LAB_002ba374;
            }
            iVar19 = uVar29 + 1;
            __src[(int)uVar29] = (float)local_630[(int)uVar29];
            if (iVar19 < (int)uVar18) {
              iVar21 = uVar29 + 2;
              __src[iVar19] = (float)local_630[iVar19];
              if (iVar21 < (int)uVar18) {
                __src[iVar21] = (float)local_630[iVar21];
              }
            }
          }
LAB_002ba374:
          dVar47 = DAT_002bb448;
          if (!param_5) {
            dVar47 = DAT_002bb440;
          }
          lVar43 = 0;
          do {
            fVar56 = __src[lVar43];
            lVar24 = lrint((double)fVar56 * dVar47);
            uVar20 = (uint)lVar24 & 0x3f;
            dVar46 = *(double *)(&DAT_004688e0 + (long)(int)uVar20 * 8);
            dVar57 = (double)fVar56 * dVar47 - (double)(int)(uint)lVar24;
            dVar53 = *(double *)(&DAT_004688e0 + (long)(int)(0x10 - uVar20 & 0x3f) * 8);
            dVar55 = dVar57 * dVar14 * dVar57 + 1.0;
            dVar57 = dVar57 * (dVar13 + dVar57 * dVar12 * dVar57);
            __src_00[lVar43] = (float)(dVar57 * dVar53 + dVar46 * dVar55);
            __src[lVar43] = (float)(dVar55 * dVar53 - dVar57 * dVar46);
            lVar43 = lVar43 + 1;
          } while ((int)lVar43 < (int)uVar18);
          if (pdVar15 == (double *)0x0) {
LAB_002baa10:
            lVar43 = (long)(int)uVar18;
            memcpy(pdVar30,__src,lVar43 << 2);
            memcpy(pdVar16,__src_00,lVar43 << 2);
            goto LAB_002ba624;
          }
          uVar20 = uVar18;
          if ((int)uVar18 < 1) {
            uVar20 = 1;
          }
          if (((pdVar30 < pdVar15 + 4 && pdVar15 < pdVar30 + 4 ||
               pdVar30 < pdVar16 + 4 && pdVar16 < pdVar30 + 4) ||
               pdVar16 < pdVar15 + 4 && pdVar15 < pdVar16 + 4) || (uVar20 < 7)) {
            lVar43 = 0;
            do {
              fVar56 = __src_00[lVar43];
              dVar47 = pdVar15[lVar43];
              pdVar30[lVar43] = (double)__src[lVar43] * dVar47;
              pdVar16[lVar43] = (double)fVar56 * dVar47;
              lVar43 = lVar43 + 1;
            } while ((int)lVar43 < (int)uVar18);
          }
          else {
            uVar2 = (uint)((ulong)pdVar30 >> 3) & 1;
            if (uVar20 < uVar2) {
              uVar2 = uVar20;
            }
            if (uVar2 != 0) {
              fVar56 = *__src_00;
              dVar47 = *pdVar15;
              *pdVar30 = (double)*__src * dVar47;
              *pdVar16 = (double)fVar56 * dVar47;
            }
            uVar29 = (uint)(uVar2 != 0);
            iVar19 = uVar18 - 1;
            if ((int)uVar18 < 1) {
              iVar19 = 0;
            }
            uVar37 = ((uVar20 - uVar2) - 4 >> 2) + 1;
            iVar21 = uVar37 * 4;
            if (2 < iVar19 - uVar2) {
              uVar41 = 0;
              pfVar27 = __src + uVar2;
              pdVar38 = pdVar15 + uVar2;
              pdVar35 = pdVar30 + uVar2;
              pdVar36 = pdVar16 + uVar2;
              pfVar42 = __src_00 + uVar2;
              do {
                uVar45 = *(undefined8 *)(pfVar27 + 2);
                uVar44 = *(undefined8 *)pfVar27;
                uVar51 = *(undefined8 *)(pfVar42 + 2);
                uVar48 = *(undefined8 *)pfVar42;
                dVar53 = pdVar38[1];
                dVar46 = *pdVar38;
                uVar41 = uVar41 + 1;
                dVar55 = pdVar38[3];
                dVar47 = pdVar38[2];
                pdVar35[1] = (double)(float)((ulong)uVar44 >> 0x20) * dVar53;
                *pdVar35 = (double)(float)uVar44 * dVar46;
                pdVar35[3] = (double)(float)((ulong)uVar45 >> 0x20) * dVar55;
                pdVar35[2] = (double)(float)uVar45 * dVar47;
                pdVar36[1] = (double)(float)((ulong)uVar48 >> 0x20) * dVar53;
                *pdVar36 = (double)(float)uVar48 * dVar46;
                pdVar36[3] = (double)(float)((ulong)uVar51 >> 0x20) * dVar55;
                pdVar36[2] = (double)(float)uVar51 * dVar47;
                pfVar27 = pfVar27 + 4;
                pdVar38 = pdVar38 + 4;
                pdVar35 = pdVar35 + 4;
                pdVar36 = pdVar36 + 4;
                pfVar42 = pfVar42 + 4;
              } while (uVar41 < uVar37);
              uVar29 = uVar29 + iVar21;
              if (iVar21 == uVar20 - uVar2) goto LAB_002ba610;
            }
            iVar19 = uVar29 + 1;
            fVar56 = __src_00[(int)uVar29];
            dVar47 = pdVar15[(int)uVar29];
            pdVar30[(int)uVar29] = (double)__src[(int)uVar29] * dVar47;
            pdVar16[(int)uVar29] = (double)fVar56 * dVar47;
            if (iVar19 < (int)uVar18) {
              iVar21 = uVar29 + 2;
              fVar56 = __src_00[iVar19];
              dVar47 = pdVar15[iVar19];
              pdVar30[iVar19] = (double)__src[iVar19] * dVar47;
              pdVar16[iVar19] = (double)fVar56 * dVar47;
              if (iVar21 < (int)uVar18) {
                fVar56 = __src_00[iVar21];
                dVar47 = pdVar15[iVar21];
                pdVar30[iVar21] = (double)__src[iVar21] * dVar47;
                pdVar16[iVar21] = (double)fVar56 * dVar47;
              }
            }
          }
LAB_002ba610:
          while( true ) {
            lVar43 = (long)(int)uVar18;
LAB_002ba624:
            if (local_638 == (double *)0x0) {
              lVar43 = lVar43 * uVar23;
            }
            else {
LAB_002ba628:
              lVar43 = lVar43 * uVar23;
              local_638 = (double *)((long)local_638 + lVar43);
            }
            local_630 = (double *)((long)local_630 + lVar43);
            local_628 = (double *)((long)local_628 + lVar43);
            local_620 = (double *)((long)local_620 + lVar43);
            uVar20 = local_698 + uVar8;
            local_69c = local_69c - uVar8;
            if ((int)uVar22 <= (int)local_698) goto LAB_002baa8c;
            uVar18 = local_69c;
            if ((int)uVar8 < (int)local_69c) {
              uVar18 = uVar8;
            }
            local_698 = uVar20;
            if (uVar7 != 5) break;
LAB_002ba698:
            pdVar38 = local_620;
            pdVar16 = local_628;
            pdVar30 = local_630;
            pdVar15 = local_638;
            dVar55 = DAT_002bb460;
            dVar47 = DAT_002bb458;
            dVar46 = DAT_002bb440;
            if (param_5) {
              dVar46 = DAT_002bb448;
            }
            lVar43 = 0;
            if (0 < (int)uVar18) {
              do {
                dVar58 = (double)*(float *)((long)pdVar30 + lVar43 * 4) * dVar46;
                lVar24 = lrint(dVar58);
                uVar20 = (uint)lVar24 & 0x3f;
                dVar58 = dVar58 - (double)(int)(uint)lVar24;
                dVar54 = *(double *)(&DAT_004688e0 + (long)(int)(0x10 - uVar20 & 0x3f) * 8);
                dVar57 = *(double *)(&DAT_004688e0 + (long)(int)uVar20 * 8);
                dVar53 = dVar58 * dVar55 * dVar58 + 1.0;
                dVar58 = dVar58 * (dVar47 + dVar58 * DAT_002bb450 * dVar58);
                *(float *)((long)pdVar38 + lVar43 * 4) = (float)(dVar58 * dVar54 + dVar57 * dVar53);
                *(float *)((long)pdVar16 + lVar43 * 4) = (float)(dVar53 * dVar54 - dVar58 * dVar57);
                lVar43 = lVar43 + 1;
              } while ((int)lVar43 < (int)uVar18);
            }
            if (pdVar15 != (double *)0x0) {
              if ((int)(uVar18 - 3) < 1) {
                iVar19 = 0;
              }
              else {
                iVar19 = 0;
                pdVar30 = pdVar16;
                pdVar35 = pdVar38;
                pdVar36 = pdVar15;
                do {
                  iVar19 = iVar19 + 4;
                  fVar56 = SUB84(*pdVar36,0);
                  fVar49 = (float)((ulong)*pdVar36 >> 0x20);
                  fVar50 = SUB84(pdVar36[1],0);
                  fVar52 = (float)((ulong)pdVar36[1] >> 0x20);
                  pdVar30[1] = (double)CONCAT44((float)((ulong)pdVar30[1] >> 0x20) * fVar52,
                                                SUB84(pdVar30[1],0) * fVar50);
                  *pdVar30 = (double)CONCAT44((float)((ulong)*pdVar30 >> 0x20) * fVar49,
                                              SUB84(*pdVar30,0) * fVar56);
                  pdVar35[1] = (double)CONCAT44((float)((ulong)pdVar35[1] >> 0x20) * fVar52,
                                                SUB84(pdVar35[1],0) * fVar50);
                  *pdVar35 = (double)CONCAT44((float)((ulong)*pdVar35 >> 0x20) * fVar49,
                                              SUB84(*pdVar35,0) * fVar56);
                  pdVar30 = pdVar30 + 2;
                  pdVar35 = pdVar35 + 2;
                  pdVar36 = pdVar36 + 2;
                } while (iVar19 < (int)(uVar18 - 3));
              }
              if (iVar19 < (int)uVar18) {
                lVar24 = (long)iVar19;
                uVar20 = uVar18 - iVar19;
                lVar43 = (lVar24 + 4) * 4;
                lVar40 = lVar43 + -0x10;
                uVar31 = (long)pdVar38 + lVar40;
                uVar28 = (long)pdVar16 + lVar40;
                uVar4 = (long)pdVar15 + lVar40;
                if ((uVar20 < 7 ||
                     (uVar31 < (ulong)((long)pdVar16 + lVar43) &&
                      uVar28 < (ulong)((long)pdVar38 + lVar43) ||
                     uVar4 < (ulong)((long)pdVar16 + lVar43) &&
                     uVar28 < (ulong)((long)pdVar15 + lVar43))) ||
                   (uVar31 < (ulong)((long)pdVar15 + lVar43) &&
                    uVar4 < (ulong)((long)pdVar38 + lVar43))) {
                  lVar43 = 0;
                  do {
                    fVar56 = *(float *)(uVar4 + lVar43);
                    *(float *)(uVar28 + lVar43) = *(float *)(uVar28 + lVar43) * fVar56;
                    *(float *)(uVar31 + lVar43) = *(float *)(uVar31 + lVar43) * fVar56;
                    lVar43 = lVar43 + 4;
                  } while (lVar43 != ((ulong)((uVar18 - 1) - iVar19) + 1) * 4);
                }
                else {
                  uVar2 = -((uint)(uVar28 >> 2) & 3) & 3;
                  uVar29 = uVar20;
                  if (uVar2 < uVar20) {
                    uVar29 = uVar2;
                  }
                  iVar21 = iVar19;
                  if (uVar29 != 0) {
                    lVar43 = lVar24 * 4;
                    iVar21 = iVar19 + 1;
                    fVar56 = *(float *)((long)pdVar15 + lVar43);
                    *(float *)((long)pdVar16 + lVar43) = *(float *)((long)pdVar16 + lVar43) * fVar56
                    ;
                    *(float *)((long)pdVar38 + lVar43) = *(float *)((long)pdVar38 + lVar43) * fVar56
                    ;
                    if (uVar29 != 1) {
                      lVar3 = lVar43 + 4;
                      iVar21 = iVar19 + 2;
                      fVar56 = *(float *)((long)pdVar15 + lVar3);
                      *(float *)((long)pdVar16 + lVar3) = *(float *)((long)pdVar16 + lVar3) * fVar56
                      ;
                      *(float *)((long)pdVar38 + lVar3) = *(float *)((long)pdVar38 + lVar3) * fVar56
                      ;
                      if (uVar29 == 3) {
                        lVar43 = lVar43 + 8;
                        iVar21 = iVar19 + 3;
                        fVar56 = *(float *)((long)pdVar15 + lVar43);
                        *(float *)((long)pdVar16 + lVar43) =
                             *(float *)((long)pdVar16 + lVar43) * fVar56;
                        *(float *)((long)pdVar38 + lVar43) =
                             *(float *)((long)pdVar38 + lVar43) * fVar56;
                      }
                    }
                  }
                  lVar43 = 0;
                  uVar2 = ((uVar20 - uVar29) - 4 >> 2) + 1;
                  uVar37 = 0;
                  iVar19 = uVar2 * 4;
                  do {
                    lVar3 = lVar43 + lVar40 + (ulong)uVar29 * 4;
                    puVar5 = (undefined8 *)((long)pdVar16 + lVar3);
                    puVar6 = (undefined8 *)((long)pdVar38 + lVar43 + (lVar24 + (ulong)uVar29) * 4);
                    uVar51 = ((undefined8 *)((long)pdVar15 + lVar3))[1];
                    uVar48 = *(undefined8 *)((long)pdVar15 + lVar3);
                    uVar37 = uVar37 + 1;
                    lVar43 = lVar43 + 0x10;
                    fVar56 = (float)uVar48;
                    fVar49 = (float)((ulong)uVar48 >> 0x20);
                    fVar50 = (float)uVar51;
                    fVar52 = (float)((ulong)uVar51 >> 0x20);
                    puVar5[1] = CONCAT44((float)((ulong)puVar5[1] >> 0x20) * fVar52,
                                         (float)puVar5[1] * fVar50);
                    *puVar5 = CONCAT44((float)((ulong)*puVar5 >> 0x20) * fVar49,
                                       (float)*puVar5 * fVar56);
                    uVar51 = puVar6[1];
                    uVar48 = *puVar6;
                    ((undefined8 *)((long)pdVar38 + lVar3))[1] =
                         CONCAT44((float)((ulong)uVar51 >> 0x20) * fVar52,(float)uVar51 * fVar50);
                    *(undefined8 *)((long)pdVar38 + lVar3) =
                         CONCAT44((float)((ulong)uVar48 >> 0x20) * fVar49,(float)uVar48 * fVar56);
                  } while (uVar37 < uVar2);
                  uVar2 = iVar19 + iVar21;
                  if (iVar19 != uVar20 - uVar29) {
                    uVar31 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
                    fVar56 = *(float *)((long)pdVar15 + uVar31);
                    *(float *)((long)pdVar16 + uVar31) = *(float *)((long)pdVar16 + uVar31) * fVar56
                    ;
                    *(float *)((long)pdVar38 + uVar31) = *(float *)((long)pdVar38 + uVar31) * fVar56
                    ;
                    if ((int)(uVar2 + 1) < (int)uVar18) {
                      lVar43 = uVar31 + 4;
                      fVar56 = *(float *)((long)pdVar15 + lVar43);
                      *(float *)((long)pdVar16 + lVar43) =
                           *(float *)((long)pdVar16 + lVar43) * fVar56;
                      *(float *)((long)pdVar38 + lVar43) =
                           *(float *)((long)pdVar38 + lVar43) * fVar56;
                      if ((int)(uVar2 + 2) < (int)uVar18) {
                        lVar43 = uVar31 + 8;
                        fVar56 = *(float *)((long)pdVar15 + lVar43);
                        *(float *)((long)pdVar16 + lVar43) =
                             *(float *)((long)pdVar16 + lVar43) * fVar56;
                        *(float *)((long)pdVar38 + lVar43) =
                             *(float *)((long)pdVar38 + lVar43) * fVar56;
                      }
                    }
                  }
                }
              }
            }
          }
        } while( true );
      }
LAB_002baa8c:
      local_650 = local_650 + 1;
      NAryMatIterator::operator++(aNStack_5f0);
    } while (local_650 < local_5d0);
  }
  if ((local_430 != afStack_420) && (local_430 != (float *)0x0)) {
    operator_delete__(local_430);
  }
  if (local_458 != 0) {
    piVar33 = (int *)(local_458 + 0x14);
    do {
      iVar19 = *piVar33;
      cVar17 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar9) {
        *piVar33 = iVar19 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar19 == 1) {
      Mat::deallocate(local_660);
    }
  }
  local_458 = 0;
  local_480 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  if (0 < local_48c) {
    iVar19 = 0;
    puVar32 = local_450;
    do {
      iVar19 = iVar19 + 1;
      *puVar32 = 0;
      puVar32 = puVar32 + 1;
    } while (iVar19 < local_48c);
  }
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  if (local_4b8 != 0) {
    piVar33 = (int *)(local_4b8 + 0x14);
    do {
      iVar19 = *piVar33;
      cVar17 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar9) {
        *piVar33 = iVar19 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar19 == 1) {
      Mat::deallocate(local_668);
    }
  }
  local_4b8 = 0;
  local_4e0 = 0;
  local_4c8 = 0;
  local_4d0 = 0;
  local_4d8 = 0;
  if (0 < local_4ec) {
    iVar19 = 0;
    puVar32 = local_4b0;
    do {
      iVar19 = iVar19 + 1;
      *puVar32 = 0;
      puVar32 = puVar32 + 1;
    } while (iVar19 < local_4ec);
  }
  if (local_4a8 != &local_4a0) {
    fastFree(local_4a8);
  }
  if (local_518 != 0) {
    piVar33 = (int *)(local_518 + 0x14);
    do {
      iVar19 = *piVar33;
      cVar17 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar9) {
        *piVar33 = iVar19 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar19 == 1) {
      Mat::deallocate(local_670);
    }
  }
  local_518 = 0;
  local_540 = 0;
  local_528 = 0;
  local_530 = 0;
  local_538 = 0;
  if (0 < local_54c) {
    iVar19 = 0;
    piVar33 = local_510;
    do {
      iVar19 = iVar19 + 1;
      *piVar33 = 0;
      piVar33 = piVar33 + 1;
    } while (iVar19 < local_54c);
  }
  if (local_508 != &local_500) {
    fastFree(local_508);
  }
  if (local_578 != 0) {
    piVar33 = (int *)(local_578 + 0x14);
    do {
      iVar19 = *piVar33;
      cVar17 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar33,0x10);
      if (bVar9) {
        *piVar33 = iVar19 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar19 == 1) {
      Mat::deallocate(local_678);
    }
  }
  local_578 = 0;
  local_5a0 = 0;
  local_588 = 0;
  local_590 = 0;
  local_598 = 0;
  if (0 < local_5ac) {
    iVar19 = 0;
    piVar33 = local_570;
    do {
      iVar19 = iVar19 + 1;
      *piVar33 = 0;
      piVar33 = piVar33 + 1;
    } while (iVar19 < local_5ac);
  }
  if (local_568 != &local_560) {
    fastFree(local_568);
  }
  return;
}


==================================================================

### FUNC 002bb468 (1104 bytes) name=exp

/* cv::exp(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::exp(_InputArray *param_1,_OutputArray *param_2)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  char *pcVar12;
  Mat *pMVar13;
  int *piVar14;
  undefined8 *puVar15;
  ulong uVar16;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  NAryMatIterator aNStack_100 [32];
  ulong local_e0;
  int local_d8;
  undefined4 local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar8 = _InputArray::type(param_1,-1);
  iVar9 = _InputArray::depth(param_1,-1);
  iVar10 = _InputArray::channels(param_1,-1);
  if (1 < iVar9 - 5U) {
    local_60 = 0;
    local_58 = 0;
    pcVar12 = (char *)String::allocate((String *)&local_60,0x22);
    uVar7 = s_depth____CV_8S____depth____CV_16_0046f988._80_8_;
    uVar6 = s_depth____CV_8S____depth____CV_16_0046f988._72_8_;
    uVar5 = s_depth____CV_8S____depth____CV_16_0046f988._64_8_;
    uVar4 = s_depth____CV_8S____depth____CV_16_0046f988._56_8_;
    *(undefined2 *)(pcVar12 + 0x20) = s_depth____CV_8S____depth____CV_16_0046f988._88_2_;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_60,"void cv::exp(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x316);
    String::deallocate((String *)&local_60);
  }
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar13;
    local_bc = *(int *)(pMVar13 + 4);
    local_b8 = *(int *)(pMVar13 + 8);
    local_b4 = *(undefined4 *)(pMVar13 + 0xc);
    local_b0 = *(undefined8 *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar13 + 0x48);
      local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  _OutputArray::create(param_2,local_bc,local_80,iVar8,-1,false,0);
  iVar8 = _InputArray::kind((_InputArray *)param_2);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar1 = *(uint *)pMVar13;
    local_50 = *(undefined8 *)(pMVar13 + 0x10);
    local_60 = *(ulong *)pMVar13;
    local_58 = *(undefined8 *)(pMVar13 + 8);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar13 + 0x48);
      local_8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar1;
      Mat::copySize((Mat *)&local_60,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_108 = 0;
  local_118 = (Mat *)&local_c0;
  local_110 = (Mat *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_100,&local_118,&local_128,-1);
  uVar16 = 0;
  if (iVar9 == 5) {
    for (; uVar16 < local_e0; uVar16 = uVar16 + 1) {
      FUN_003cab60(local_128,local_120,iVar10 * local_d8);
      NAryMatIterator::operator++(aNStack_100);
    }
  }
  else {
    for (; uVar16 < local_e0; uVar16 = uVar16 + 1) {
      FUN_003cb060(local_128,local_120,iVar10 * local_d8);
      NAryMatIterator::operator++(aNStack_100);
    }
  }
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar8 = 0;
    puVar15 = local_20;
    do {
      *(undefined4 *)puVar15 = 0;
      iVar8 = iVar8 + 1;
      puVar15 = (undefined8 *)((long)puVar15 + 4);
    } while (iVar8 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar8 = 0;
    piVar14 = local_80;
    do {
      *piVar14 = 0;
      iVar8 = iVar8 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar8 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002bb918 (1104 bytes) name=log

/* cv::log(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::log(_InputArray *param_1,_OutputArray *param_2)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  char *pcVar12;
  Mat *pMVar13;
  int *piVar14;
  undefined8 *puVar15;
  ulong uVar16;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  NAryMatIterator aNStack_100 [32];
  ulong local_e0;
  int local_d8;
  undefined4 local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar8 = _InputArray::type(param_1,-1);
  iVar9 = _InputArray::depth(param_1,-1);
  iVar10 = _InputArray::channels(param_1,-1);
  if (1 < iVar9 - 5U) {
    local_60 = 0;
    local_58 = 0;
    pcVar12 = (char *)String::allocate((String *)&local_60,0x22);
    uVar7 = s_depth____CV_8S____depth____CV_16_0046f988._80_8_;
    uVar6 = s_depth____CV_8S____depth____CV_16_0046f988._72_8_;
    uVar5 = s_depth____CV_8S____depth____CV_16_0046f988._64_8_;
    uVar4 = s_depth____CV_8S____depth____CV_16_0046f988._56_8_;
    *(undefined2 *)(pcVar12 + 0x20) = s_depth____CV_8S____depth____CV_16_0046f988._88_2_;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_60,"void cv::log(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x359);
    String::deallocate((String *)&local_60);
  }
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar13;
    local_bc = *(int *)(pMVar13 + 4);
    local_b8 = *(int *)(pMVar13 + 8);
    local_b4 = *(undefined4 *)(pMVar13 + 0xc);
    local_b0 = *(undefined8 *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar13 + 0x48);
      local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  _OutputArray::create(param_2,local_bc,local_80,iVar8,-1,false,0);
  iVar8 = _InputArray::kind((_InputArray *)param_2);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar1 = *(uint *)pMVar13;
    local_50 = *(undefined8 *)(pMVar13 + 0x10);
    local_60 = *(ulong *)pMVar13;
    local_58 = *(undefined8 *)(pMVar13 + 8);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar13 + 0x48);
      local_8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar1;
      Mat::copySize((Mat *)&local_60,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_108 = 0;
  local_118 = (Mat *)&local_c0;
  local_110 = (Mat *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_100,&local_118,&local_128,-1);
  uVar16 = 0;
  if (iVar9 == 5) {
    for (; uVar16 < local_e0; uVar16 = uVar16 + 1) {
      FUN_003cb580(local_128,local_120,iVar10 * local_d8);
      NAryMatIterator::operator++(aNStack_100);
    }
  }
  else {
    for (; uVar16 < local_e0; uVar16 = uVar16 + 1) {
      FUN_003cb880(local_128,local_120,iVar10 * local_d8);
      NAryMatIterator::operator++(aNStack_100);
    }
  }
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar8 = 0;
    puVar15 = local_20;
    do {
      *(undefined4 *)puVar15 = 0;
      iVar8 = iVar8 + 1;
      puVar15 = (undefined8 *)((long)puVar15 + 4);
    } while (iVar8 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar8 = 0;
    piVar14 = local_80;
    do {
      *piVar14 = 0;
      iVar8 = iVar8 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar8 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002bbdc8 (3204 bytes) name=pow

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::pow(cv::_InputArray const&, double, cv::_OutputArray const&) */

void cv::pow(_InputArray *param_1,double param_2,_OutputArray *param_3)

{
  uint uVar1;
  int *piVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  char cVar8;
  double dVar9;
  double dVar10;
  undefined4 uVar11;
  undefined4 uVar12;
  undefined4 uVar13;
  double dVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  double *pdVar18;
  bool bVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  ulong uVar23;
  ulong uVar24;
  char *pcVar25;
  double *pdVar26;
  long lVar27;
  code *pcVar28;
  undefined8 *puVar29;
  ulong uVar30;
  Device *this;
  uint uVar31;
  code ***pppcVar32;
  Mat *pMVar33;
  double *pdVar34;
  undefined8 *puVar35;
  code *pcVar36;
  code *pcVar37;
  int iVar38;
  bool bVar39;
  undefined8 uVar40;
  Mat *local_568;
  Mat *local_560;
  ulong local_548;
  code *local_540;
  double *local_538;
  Mat *local_530;
  Mat *local_528;
  undefined8 local_520;
  NAryMatIterator aNStack_518 [32];
  ulong local_4f8;
  int local_4f0;
  uint local_4d8;
  int local_4d4;
  code **local_4d0;
  long local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  long local_4a0;
  code ***local_498;
  undefined8 *local_490;
  undefined8 local_488;
  undefined8 local_480;
  int local_478;
  int local_474;
  undefined8 local_470;
  long local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  undefined8 local_448;
  long local_440;
  undefined8 *local_438;
  undefined8 *local_430;
  undefined8 local_428;
  undefined8 local_420;
  code *local_418;
  code *local_410;
  undefined8 local_408;
  undefined8 local_400;
  
  uVar23 = _InputArray::type(param_1,-1);
  uVar20 = (uint)uVar23;
  uVar3 = uVar20 & 7;
  bVar39 = false;
  uVar24 = lrint(param_2);
  dVar10 = DAT_002bcae8;
  iVar38 = (int)uVar24;
  bVar19 = ABS((double)iVar38 - param_2) < DAT_002bcae8;
  iVar21 = _InputArray::kind((_InputArray *)param_3);
  if (iVar21 == 0xa0000) {
    iVar21 = _InputArray::dims(param_1,-1);
    bVar39 = iVar21 < 3;
  }
  if (bVar19) {
    this = (Device *)ocl::Device::getDefault();
    iVar21 = ocl::Device::vendorID(this);
    if ((iVar21 != 2) || (bVar39 <= (uVar3 == 6))) {
      if (iVar38 == 1) {
        _InputArray::copyTo(param_1,param_3);
        return;
      }
      if (iVar38 == 2) {
        multiply(param_1,param_1,param_3,1.0,-1);
        return;
      }
      if (iVar38 == 0) {
        _OutputArray::createSameSize(param_3,param_1,uVar20);
        local_4d0 = &local_418;
        local_4d8 = 0xc1020006;
        local_418 = (code *)0x3ff0000000000000;
        local_4c8 = 0x400000001;
        local_410 = (code *)0x3ff0000000000000;
        local_468 = 0;
        local_408 = 0x3ff0000000000000;
        local_400 = 0x3ff0000000000000;
        local_470 = 0;
        local_478 = iVar38;
        _OutputArray::setTo(param_3,(_InputArray *)&local_4d8,(_InputArray *)&local_478);
        return;
      }
      goto LAB_002bbed0;
    }
  }
  if (1 < uVar3 - 5) {
    local_418 = (code *)0x0;
    local_410 = (code *)0x0;
    pcVar25 = (char *)String::allocate((String *)&local_418,0x22);
    uVar17 = s_depth____CV_8S____depth____CV_16_0046f988._80_8_;
    uVar16 = s_depth____CV_8S____depth____CV_16_0046f988._72_8_;
    uVar15 = s_depth____CV_8S____depth____CV_16_0046f988._64_8_;
    uVar40 = s_depth____CV_8S____depth____CV_16_0046f988._56_8_;
    *(undefined2 *)(pcVar25 + 0x20) = s_depth____CV_8S____depth____CV_16_0046f988._88_2_;
    *(undefined8 *)pcVar25 = uVar40;
    *(undefined8 *)(pcVar25 + 8) = uVar15;
    *(undefined8 *)(pcVar25 + 0x10) = uVar16;
    *(undefined8 *)(pcVar25 + 0x18) = uVar17;
    error(-0xd7,(String *)&local_418,"void cv::pow(cv::InputArray, double, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x56b);
    String::deallocate((String *)&local_418);
  }
LAB_002bbed0:
  iVar21 = _InputArray::kind(param_1);
  if (iVar21 == 0x10000) {
    pMVar33 = *(Mat **)(param_1 + 8);
    local_498 = &local_4d0;
    local_490 = &local_488;
    local_4d8 = *(uint *)pMVar33;
    local_4c8 = *(long *)(pMVar33 + 0x10);
    local_4d4 = *(int *)(pMVar33 + 4);
    local_4d0 = *(code ***)(pMVar33 + 8);
    local_4c0 = *(undefined8 *)(pMVar33 + 0x18);
    local_4b8 = *(undefined8 *)(pMVar33 + 0x20);
    local_4b0 = *(undefined8 *)(pMVar33 + 0x28);
    local_4a8 = *(undefined8 *)(pMVar33 + 0x30);
    local_4a0 = *(long *)(pMVar33 + 0x38);
    local_480 = 0;
    local_488 = 0;
    if (local_4a0 != 0) {
      piVar2 = (int *)(local_4a0 + 0x14);
      do {
        cVar8 = '\x01';
        bVar39 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar39) {
          *piVar2 = *piVar2 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (2 < *(int *)(pMVar33 + 4)) {
      local_4d4 = 0;
      Mat::copySize((Mat *)&local_4d8,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_568 = (Mat *)&local_4d8;
  _OutputArray::create(param_3,local_4d4,(int *)local_498,uVar20,-1,false,0);
  iVar21 = _InputArray::kind((_InputArray *)param_3);
  if (iVar21 == 0x10000) {
    pMVar33 = *(Mat **)(param_3 + 8);
    local_438 = &local_470;
    local_430 = &local_428;
    local_478 = *(int *)pMVar33;
    local_468 = *(long *)(pMVar33 + 0x10);
    local_474 = *(int *)(pMVar33 + 4);
    local_470 = *(undefined8 *)(pMVar33 + 8);
    local_460 = *(undefined8 *)(pMVar33 + 0x18);
    local_458 = *(undefined8 *)(pMVar33 + 0x20);
    local_450 = *(undefined8 *)(pMVar33 + 0x28);
    local_448 = *(undefined8 *)(pMVar33 + 0x30);
    local_440 = *(long *)(pMVar33 + 0x38);
    local_420 = 0;
    local_428 = 0;
    if (local_440 != 0) {
      piVar2 = (int *)(local_440 + 0x14);
      do {
        cVar8 = '\x01';
        bVar39 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar39) {
          *piVar2 = *piVar2 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (2 < *(int *)(pMVar33 + 4)) {
      local_474 = 0;
      Mat::copySize((Mat *)&local_478,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_560 = (Mat *)&local_478;
  local_530 = local_568;
  local_520 = 0;
  local_528 = local_560;
  NAryMatIterator::NAryMatIterator(aNStack_518,&local_530,(uchar **)&local_540,-1);
  uVar4 = (uint)((uVar23 & 0xffffffff) >> 3) & 0x1ff;
  uVar20 = uVar4 + 1;
  uVar6 = uVar20 * local_4f0;
  if (bVar19) {
    pcVar37 = (code *)(&PTR_FUN_004f60b0)[(int)uVar3];
    if (pcVar37 == (code *)0x0) {
      local_418 = pcVar37;
      local_410 = pcVar37;
      pcVar25 = (char *)String::allocate((String *)&local_418,9);
      cVar8 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar25 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar25[8] = cVar8;
      error(-0xd7,(String *)&local_418,"void cv::pow(cv::InputArray, double, cv::OutputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x57b);
      String::deallocate((String *)&local_418);
    }
    for (uVar23 = 0; uVar23 < local_4f8; uVar23 = uVar23 + 1) {
      (*pcVar37)(local_540,local_538,uVar6,uVar24 & 0xffffffff);
      NAryMatIterator::operator++(aNStack_518);
    }
  }
  else if (dVar10 <= ABS(ABS(param_2) - 0.5)) {
    uVar7 = 0;
    if (uVar20 != 0) {
      uVar7 = (uVar4 + 0x400) / uVar20;
    }
    local_418 = (code *)&local_408;
    uVar23 = 0x88442211UL >> ((local_4d8 & 7) << 2) & 0xf;
    local_410 = (code *)0x408;
    uVar4 = uVar6;
    if ((int)(uVar7 * uVar20) < (int)uVar6) {
      uVar4 = uVar7 * uVar20;
    }
    pcVar37 = (code *)0x0;
    pcVar36 = local_410;
    if ((local_4c8 == local_468) &&
       (pcVar36 = (code *)((long)(int)uVar4 * uVar23), pcVar37 = local_418, (code *)0x408 < pcVar36)
       ) {
      local_418 = operator_new__((ulong)pcVar36);
      pcVar37 = local_418;
    }
    local_410 = pcVar36;
    dVar14 = DAT_002bcb00;
    dVar10 = DAT_002bcaf8;
    uVar13 = DAT_002bcaf4;
    uVar11 = DAT_002bcaf0;
    local_548 = 0;
    if (local_4f8 != 0) {
      do {
        if (0 < (int)uVar6) {
          uVar7 = uVar4;
          uVar20 = uVar6;
          do {
            pdVar18 = local_538;
            pcVar36 = local_540;
            uVar5 = uVar20;
            if ((int)uVar4 < (int)uVar20) {
              uVar5 = uVar4;
            }
            if (uVar3 == 5) {
              pcVar28 = local_540;
              if ((pcVar37 != (code *)0x0) && (pcVar28 = pcVar37, pcVar37 != local_540)) {
                memcpy(pcVar37,local_540,(long)(int)uVar5 * uVar23);
              }
              FUN_003cb580(pcVar28,pdVar18,uVar5);
              if (0 < (int)uVar5) {
                uVar22 = -((uint)((ulong)pdVar18 >> 2) & 3) & 3;
                if (uVar5 < uVar22) {
                  uVar22 = uVar5;
                }
                uVar1 = uVar5;
                if (((int)uVar5 < 5) || (uVar24 = 0, uVar1 = uVar22, uVar22 != 0)) {
                  uVar22 = uVar1;
                  *(float *)pdVar18 = (float)((double)*(float *)pdVar18 * param_2);
                  if ((uVar22 == 1) ||
                     (*(float *)((long)pdVar18 + 4) =
                           (float)((double)*(float *)((long)pdVar18 + 4) * param_2), uVar22 == 2)) {
                    uVar24 = (ulong)uVar22;
                  }
                  else {
                    *(float *)(pdVar18 + 1) = (float)((double)*(float *)(pdVar18 + 1) * param_2);
                    if (uVar22 == 4) {
                      uVar24 = 4;
                      *(float *)((long)pdVar18 + 0xc) =
                           (float)((double)*(float *)((long)pdVar18 + 0xc) * param_2);
                    }
                    else {
                      uVar24 = 3;
                    }
                  }
                  if (uVar22 == uVar5) goto LAB_002bc6a8;
                }
                uVar1 = ((uVar5 - uVar22) - 4 >> 2) + 1;
                iVar21 = uVar1 * 4;
                if (2 < (uVar5 - 1) - uVar22) {
                  puVar29 = (undefined8 *)((long)pdVar18 + (ulong)uVar22 * 4);
                  uVar31 = 0;
                  puVar35 = puVar29;
                  do {
                    uVar40 = *puVar29;
                    uVar31 = uVar31 + 1;
                    puVar35[1] = CONCAT44((float)((double)(float)((ulong)puVar29[1] >> 0x20) *
                                                 param_2),
                                          (float)((double)(float)puVar29[1] * param_2));
                    *puVar35 = CONCAT44((float)((double)(float)((ulong)uVar40 >> 0x20) * param_2),
                                        (float)((double)(float)uVar40 * param_2));
                    puVar29 = puVar29 + 2;
                    puVar35 = puVar35 + 2;
                  } while (uVar31 < uVar1);
                  uVar24 = (ulong)(uint)((int)uVar24 + iVar21);
                  if (iVar21 == uVar5 - uVar22) goto LAB_002bc6a8;
                }
                uVar30 = -(uVar24 >> 0x1f) & 0xfffffffc00000000 | uVar24 << 2;
                *(float *)((long)pdVar18 + uVar30) =
                     (float)((double)*(float *)((long)pdVar18 + uVar30) * param_2);
                if (((int)uVar24 + 1 < (int)uVar5) &&
                   (*(float *)((long)pdVar18 + uVar30 + 4) =
                         (float)((double)*(float *)((long)pdVar18 + uVar30 + 4) * param_2),
                   (int)uVar24 + 2 < (int)uVar5)) {
                  *(float *)((long)pdVar18 + uVar30 + 8) =
                       (float)((double)*(float *)((long)pdVar18 + uVar30 + 8) * param_2);
                }
              }
LAB_002bc6a8:
              FUN_003cab60(pdVar18,pdVar18,uVar5);
              uVar12 = DAT_002bcaf0;
              if (0 < (int)uVar5) {
                if (param_2 < 0.0) {
                  lVar27 = 0;
                  do {
                    if (*(float *)(pcVar36 + lVar27 * 4) <= 0.0) {
                      if (*(float *)(pcVar36 + lVar27 * 4) == 0.0) {
                        *(undefined4 *)((long)pdVar18 + lVar27 * 4) = uVar13;
                      }
                      else {
                        *(undefined4 *)((long)pdVar18 + lVar27 * 4) = uVar11;
                      }
                    }
                    lVar27 = lVar27 + 1;
                  } while ((int)lVar27 < (int)uVar5);
                }
                else {
                  lVar27 = 0;
                  do {
                    if ((*(float *)(pcVar36 + lVar27 * 4) <= 0.0) &&
                       (*(float *)(pcVar36 + lVar27 * 4) != 0.0)) {
                      *(undefined4 *)((long)pdVar18 + lVar27 * 4) = uVar12;
                    }
                    lVar27 = lVar27 + 1;
                  } while ((int)lVar27 < (int)uVar5);
                }
              }
            }
            else {
              pcVar28 = local_540;
              if ((pcVar37 != (code *)0x0) && (pcVar28 = pcVar37, pcVar37 != local_540)) {
                memcpy(pcVar37,local_540,(long)(int)uVar5 * uVar23);
              }
              FUN_003cb880(pcVar28,pdVar18,uVar5);
              if (0 < (int)uVar5) {
                uVar22 = (uint)((ulong)pdVar18 >> 3) & 1;
                if (uVar5 < uVar22) {
                  uVar22 = uVar5;
                }
                if ((int)uVar5 < 4) {
                  *pdVar18 = *pdVar18 * param_2;
                  uVar22 = uVar5;
joined_r0x002bc71c:
                  if (uVar22 == 1) {
                    uVar24 = 1;
                  }
                  else {
                    pdVar18[1] = pdVar18[1] * param_2;
                    if (uVar22 == 3) {
                      uVar24 = 3;
                      pdVar18[2] = pdVar18[2] * param_2;
                    }
                    else {
                      uVar24 = 2;
                    }
                  }
                  if (uVar5 == uVar22) goto LAB_002bc414;
                }
                else {
                  uVar24 = 0;
                  if (uVar22 != 0) {
                    *pdVar18 = *pdVar18 * param_2;
                    goto joined_r0x002bc71c;
                  }
                }
                iVar38 = uVar5 - uVar22;
                uVar1 = (iVar38 - 2U >> 1) + 1;
                iVar21 = uVar1 * 2;
                if (iVar38 != 1) {
                  uVar31 = 0;
                  pdVar26 = pdVar18 + uVar22;
                  pdVar34 = pdVar18 + uVar22;
                  do {
                    dVar9 = *pdVar26;
                    uVar31 = uVar31 + 1;
                    pdVar34[1] = pdVar26[1] * param_2;
                    *pdVar34 = dVar9 * param_2;
                    pdVar26 = pdVar26 + 2;
                    pdVar34 = pdVar34 + 2;
                  } while (uVar31 < uVar1);
                  uVar24 = (ulong)(uint)((int)uVar24 + iVar21);
                  if (iVar38 == iVar21) goto LAB_002bc414;
                }
                uVar24 = -(uVar24 >> 0x1f) & 0xfffffff800000000 | uVar24 << 3;
                *(double *)((long)pdVar18 + uVar24) = *(double *)((long)pdVar18 + uVar24) * param_2;
              }
LAB_002bc414:
              FUN_003cb060(pdVar18,pdVar18,uVar5);
              if (0 < (int)uVar5) {
                lVar27 = 0;
                if (0.0 <= param_2) {
                  do {
                    while ((*(double *)(pcVar36 + lVar27 * 8) <= 0.0 &&
                           (*(double *)(pcVar36 + lVar27 * 8) != 0.0))) {
                      pdVar18[lVar27] = dVar10;
                      lVar27 = lVar27 + 1;
                      if ((int)uVar5 <= (int)lVar27) goto LAB_002bc46c;
                    }
                    lVar27 = lVar27 + 1;
                  } while ((int)lVar27 < (int)uVar5);
                }
                else {
                  do {
                    if (*(double *)(pcVar36 + lVar27 * 8) <= 0.0) {
                      if (*(double *)(pcVar36 + lVar27 * 8) == 0.0) {
                        pdVar18[lVar27] = dVar14;
                      }
                      else {
                        pdVar18[lVar27] = dVar10;
                      }
                    }
                    lVar27 = lVar27 + 1;
                  } while ((int)lVar27 < (int)uVar5);
                }
              }
            }
LAB_002bc46c:
            local_540 = local_540 + (long)(int)uVar5 * uVar23;
            local_538 = (double *)((long)local_538 + (long)(int)uVar5 * uVar23);
            uVar20 = uVar20 - uVar4;
            bVar39 = (int)uVar7 < (int)uVar6;
            uVar7 = uVar7 + uVar4;
          } while (bVar39);
        }
        local_548 = local_548 + 1;
        NAryMatIterator::operator++(aNStack_518);
      } while (local_548 < local_4f8);
    }
    if ((local_418 != (code *)&local_408) && (local_418 != (code *)0x0)) {
      operator_delete__(local_418);
    }
  }
  else {
    if (param_2 < 0.0) {
      if (uVar3 == 5) {
        pcVar37 = thunk_FUN_003ca80c;
      }
      else {
        pcVar37 = thunk_FUN_003ca92c;
      }
    }
    else if (uVar3 == 5) {
      pcVar37 = thunk_FUN_003ca9b0;
    }
    else {
      pcVar37 = thunk_FUN_003caaf0;
    }
    for (uVar23 = 0; uVar23 < local_4f8; uVar23 = uVar23 + 1) {
      (*pcVar37)(local_540,local_538,uVar6);
      NAryMatIterator::operator++(aNStack_518);
    }
  }
  if (local_440 != 0) {
    piVar2 = (int *)(local_440 + 0x14);
    do {
      iVar21 = *piVar2;
      cVar8 = '\x01';
      bVar39 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar39) {
        *piVar2 = iVar21 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate(local_560);
    }
  }
  local_440 = 0;
  local_468 = 0;
  local_450 = 0;
  local_458 = 0;
  local_460 = 0;
  if (0 < local_474) {
    iVar21 = 0;
    puVar29 = local_438;
    do {
      iVar21 = iVar21 + 1;
      *(undefined4 *)puVar29 = 0;
      puVar29 = (undefined8 *)((long)puVar29 + 4);
    } while (iVar21 < local_474);
  }
  if (local_430 != &local_428) {
    fastFree(local_430);
  }
  if (local_4a0 != 0) {
    piVar2 = (int *)(local_4a0 + 0x14);
    do {
      iVar21 = *piVar2;
      cVar8 = '\x01';
      bVar39 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar39) {
        *piVar2 = iVar21 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate(local_568);
    }
  }
  local_4a0 = 0;
  local_4c8 = 0;
  local_4b0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  if (0 < local_4d4) {
    iVar21 = 0;
    pppcVar32 = local_498;
    do {
      iVar21 = iVar21 + 1;
      *(undefined4 *)pppcVar32 = 0;
      pppcVar32 = (code ***)((long)pppcVar32 + 4);
    } while (iVar21 < local_4d4);
  }
  if (local_490 != &local_488) {
    fastFree(local_490);
  }
  return;
}


==================================================================

### FUNC 002bcb08 (8 bytes) name=sqrt

/* cv::sqrt(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::sqrt(_InputArray *param_1,_OutputArray *param_2)

{
  pow(param_1,0.5,param_2);
  return;
}


==================================================================

### FUNC 002bcb10 (1968 bytes) name=checkRange

/* cv::checkRange(cv::_InputArray const&, bool, cv::Point_<int>*, double, double) */

uint cv::checkRange(_InputArray *param_1,bool param_2,Point_ *param_3,double param_4,double param_5)

{
  ulong uVar1;
  ulong uVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  float fVar6;
  int iVar7;
  uint uVar8;
  int *piVar9;
  Mat *pMVar10;
  double *pdVar11;
  ulong uVar12;
  int iVar13;
  double *pdVar14;
  int iVar15;
  int iVar16;
  ulong uVar17;
  uint uVar18;
  code *pcVar19;
  float fVar20;
  float fVar21;
  undefined8 local_128;
  undefined8 uStack_120;
  double local_118;
  undefined8 local_110;
  undefined4 local_108;
  undefined4 local_104;
  NAryMatIterator aNStack_100 [8];
  undefined8 local_f8;
  ulong local_e0;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  double *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  ulong *local_78;
  ulong local_70;
  ulong local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  double *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  ulong *local_18;
  ulong local_10;
  ulong local_8;
  
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar10 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar10;
    local_bc = *(int *)(pMVar10 + 4);
    local_b8 = *(int *)(pMVar10 + 8);
    local_b4 = *(int *)(pMVar10 + 0xc);
    local_b0 = *(double **)(pMVar10 + 0x10);
    local_a8 = *(undefined8 *)(pMVar10 + 0x18);
    local_a0 = *(undefined8 *)(pMVar10 + 0x20);
    local_98 = *(undefined8 *)(pMVar10 + 0x28);
    local_90 = *(undefined8 *)(pMVar10 + 0x30);
    local_88 = *(long *)(pMVar10 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar9 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = *piVar9 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar10 + 4) < 3) {
      local_70 = **(ulong **)(pMVar10 + 0x48);
      local_68 = (*(ulong **)(pMVar10 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar10);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (2 < local_bc) {
    local_20 = &local_58;
    local_18 = &local_10;
    uStack_120 = 0;
    local_60 = 0x42ff0000;
    local_5c = 0;
    local_58 = 0;
    local_54 = 0;
    local_50 = (double *)0x0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    local_8 = 0;
    local_10 = 0;
    local_128 = (Mat *)&local_c0;
    NAryMatIterator::NAryMatIterator(aNStack_100,(Mat **)&local_128,(Mat *)&local_60,-1);
    for (uVar17 = 0; uVar17 < local_e0; uVar17 = uVar17 + 1) {
      local_108 = 0;
      local_104 = 0;
      local_118 = (double)CONCAT44(local_118._4_4_,0x1010000);
      local_110 = local_f8;
      uVar8 = checkRange((_InputArray *)&local_118,param_2,param_3,param_4,param_5);
      uVar18 = uVar8 & 0xff;
      if ((uVar8 & 0xff) == 0) goto LAB_002bcc38;
      NAryMatIterator::operator++(aNStack_100);
    }
    uVar18 = 1;
LAB_002bcc38:
    if (local_28 != 0) {
      piVar9 = (int *)(local_28 + 0x14);
      do {
        iVar7 = *piVar9;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = iVar7 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_5c) {
      iVar7 = 0;
      piVar9 = local_20;
      do {
        *piVar9 = 0;
        iVar7 = iVar7 + 1;
        piVar9 = piVar9 + 1;
      } while (iVar7 < local_5c);
    }
    local_28 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    local_50 = (double *)0x0;
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    goto LAB_002bccac;
  }
  uVar18 = local_c0 & 7;
  local_128 = (Mat *)0xffffffffffffffff;
  local_118 = 0.0;
  if (uVar18 < 5) {
    iVar7 = -0x80000000;
    if (DAT_002bd340 <= param_4) {
      iVar7 = (int)param_4 - (uint)(param_4 < (double)(int)param_4);
    }
    iVar15 = 0x7fffffff;
    if (param_5 <= DAT_002bd348) {
      iVar15 = (int)param_5 - (uint)(param_5 <= (double)(int)param_5);
    }
    local_5c = local_bc;
    local_20 = &local_58;
    local_58 = local_b8;
    local_18 = &local_10;
    local_54 = local_b4;
    local_50 = local_b0;
    local_48 = local_a8;
    local_40 = local_a0;
    local_38 = local_98;
    local_30 = local_90;
    local_60 = local_c0;
    local_28 = local_88;
    local_8 = 0;
    local_10 = 0;
    pcVar19 = (code *)(&PTR_FUN_00509390)[(int)uVar18];
    if (local_88 == 0) {
LAB_002bd0e4:
      local_10 = *local_78;
      local_8 = local_78[1];
    }
    else {
      piVar9 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = *piVar9 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (local_bc < 3) goto LAB_002bd0e4;
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,(Mat *)&local_c0);
    }
    (*pcVar19)((Mat *)&local_60,&local_128,iVar7,iVar15,&local_118);
    if (local_28 != 0) {
      piVar9 = (int *)(local_28 + 0x14);
      do {
        iVar7 = *piVar9;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar5) {
          *piVar9 = iVar7 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = (double *)0x0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar7 = 0;
      piVar9 = local_20;
      do {
        *piVar9 = 0;
        iVar7 = iVar7 + 1;
        piVar9 = piVar9 + 1;
      } while (iVar7 < local_5c);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    uVar17 = (ulong)local_128 & 0xffffffff;
    if (-1 < (int)(uint)local_128) {
LAB_002bced0:
      if (param_3 != (Point_ *)0x0) {
        *(int *)param_3 = (int)uVar17;
        *(uint *)(param_3 + 4) = local_128._4_4_;
      }
      if (!param_2) {
        format("the value at (%d, %d)=%g is out of range",(String *)aNStack_100,local_118,uVar17,
               (ulong)local_128._4_4_);
        error(-0xd3,(String *)aNStack_100,
              "bool cv::checkRange(cv::InputArray, bool, cv::Point*, double, double)",
              "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x6b3);
        String::deallocate((String *)aNStack_100);
      }
      uVar18 = (uint)local_128 >> 0x1f;
      goto LAB_002bccac;
    }
  }
  else {
    iVar7 = (local_c0 >> 3 & 0x1ff) + 1;
    if (((local_c0 >> 0xe & 1) == 0) ||
       (uVar17 = (long)local_b4 * (long)local_b8 * (long)iVar7, uVar17 - (long)(int)uVar17 != 0)) {
      uVar17 = (ulong)(uint)(local_b4 * iVar7);
      iVar7 = local_b8;
    }
    else {
      iVar7 = 1;
    }
    iVar15 = (int)uVar17;
    if (uVar18 == 5) {
      if (DAT_002bd350 <= param_4) {
        fVar20 = (float)param_4;
        if (param_5 <= DAT_002bd358) {
          fVar21 = (float)param_5;
          if ((int)fVar20 < 0) goto LAB_002bd2a8;
          goto LAB_002bd1c8;
        }
        if ((int)fVar20 < 0) {
          fVar20 = (float)((uint)fVar20 ^ 0x7fffffff);
          fVar6 = 3.4028235e+38;
        }
        else {
          fVar6 = 3.4028235e+38;
        }
      }
      else {
        if (DAT_002bd358 < param_5) {
          fVar21 = 3.4028235e+38;
          fVar20 = -3.4028235e+38;
LAB_002bd2a8:
          fVar20 = (float)((uint)fVar20 ^ 0x7fffffff);
        }
        else {
          fVar21 = (float)param_5;
          fVar20 = -1.1754944e-38;
        }
LAB_002bd1c8:
        fVar6 = (float)((uint)fVar21 ^ 0x7fffffff);
        if (-1 < (int)fVar21) {
          fVar6 = fVar21;
        }
      }
      if (iVar7 != 0) {
        local_118 = 0.0;
        iVar16 = 0;
        pdVar14 = local_b0;
        do {
          iVar13 = 0;
          pdVar11 = pdVar14;
          if (0 < iVar15) {
            do {
              uVar18 = 0;
              if ((int)*(float *)pdVar11 < 0) {
                uVar18 = 0x7fffffff;
              }
              uVar18 = uVar18 ^ (uint)*(float *)pdVar11;
              if (((int)fVar6 <= (int)uVar18) || ((int)uVar18 < (int)fVar20)) {
                iVar3 = 0;
                if (local_b4 != 0) {
                  iVar3 = (iVar16 + iVar13) / local_b4;
                }
                local_118 = (double)*(float *)pdVar11;
                uVar18 = (iVar16 + iVar13) - iVar3 * local_b4;
                uVar17 = (ulong)uVar18;
                local_128 = (Mat *)CONCAT44(iVar3,uVar18);
                if (-1 < (int)uVar18) goto LAB_002bced0;
                break;
              }
              iVar13 = iVar13 + 1;
              pdVar11 = (double *)((long)pdVar11 + 4);
            } while (iVar13 != iVar15);
          }
          pdVar14 = (double *)((long)pdVar14 + (local_70 & 0xfffffffffffffffc));
          iVar16 = iVar16 + iVar15;
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
        uVar18 = 1;
        goto LAB_002bccac;
      }
    }
    else {
      uVar1 = 0;
      if ((long)param_4 < 0) {
        uVar1 = 0x7fffffffffffffff;
      }
      uVar2 = 0;
      if ((long)param_5 < 0) {
        uVar2 = 0x7fffffffffffffff;
      }
      if (iVar7 != 0) {
        uVar17 = 0xffffffff;
        local_128._4_4_ = -1;
        iVar16 = 0;
        pdVar14 = local_b0;
        do {
          iVar13 = 0;
          pdVar11 = pdVar14;
          if (0 < iVar15) {
            do {
              uVar12 = 0;
              if ((long)*pdVar11 < 0) {
                uVar12 = 0x7fffffffffffffff;
              }
              uVar12 = uVar12 ^ (ulong)*pdVar11;
              if (((long)(uVar2 ^ (ulong)param_5) <= (long)uVar12) ||
                 ((long)uVar12 < (long)(uVar1 ^ (ulong)param_4))) {
                local_118 = *pdVar11;
                local_128._4_4_ = 0;
                if (local_b4 != 0) {
                  local_128._4_4_ = (iVar16 + iVar13) / local_b4;
                }
                uVar18 = (iVar16 + iVar13) - local_128._4_4_ * local_b4;
                uVar17 = (ulong)uVar18;
                if (-1 < (int)uVar18) {
                  local_128 = (Mat *)CONCAT44(local_128._4_4_,uVar18);
                  goto LAB_002bced0;
                }
                break;
              }
              iVar13 = iVar13 + 1;
              pdVar11 = pdVar11 + 1;
            } while (iVar13 != iVar15);
          }
          pdVar14 = (double *)((long)pdVar14 + (local_70 & 0xfffffffffffffff8));
          iVar16 = iVar16 + iVar15;
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
        local_128._0_4_ = (uint)uVar17;
      }
    }
  }
  uVar18 = 1;
LAB_002bccac:
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar9;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar5) {
        *piVar9 = iVar7 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (double *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    piVar9 = local_80;
    do {
      *piVar9 = 0;
      iVar7 = iVar7 + 1;
      piVar9 = piVar9 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return uVar18;
}


==================================================================

### FUNC 002bd360 (756 bytes) name=patchNaNs

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::patchNaNs(cv::_InputOutputArray const&, double) */

void cv::patchNaNs(_InputOutputArray *param_1,double param_2)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  char *pcVar10;
  undefined8 *puVar11;
  Mat *pMVar12;
  ulong uVar13;
  float *pfVar14;
  uchar *puVar15;
  ulong uVar16;
  ulong uVar17;
  float fVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 uVar21;
  undefined1 uVar22;
  undefined1 uVar23;
  undefined1 uVar24;
  undefined1 uVar25;
  undefined1 uVar26;
  undefined1 uVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  undefined1 uVar30;
  undefined1 uVar31;
  uchar *local_b8;
  String *local_b0;
  undefined8 uStack_a8;
  NAryMatIterator aNStack_a0 [32];
  ulong local_80;
  long local_78;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar9 = _InputArray::depth((_InputArray *)param_1,-1);
  if (iVar9 != 5) {
    local_60 = 0;
    local_58 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_60,0x14);
    uVar8 = s__a_depth______CV_32F_00468590._8_8_;
    uVar7 = s__a_depth______CV_32F_00468590._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s__a_depth______CV_32F_00468590._16_4_;
    *(undefined8 *)pcVar10 = uVar7;
    *(undefined8 *)(pcVar10 + 8) = uVar8;
    error(-0xd7,(String *)&local_60,"void cv::patchNaNs(cv::InputOutputArray, double)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x6d1);
    String::deallocate((String *)&local_60);
  }
  iVar9 = _InputArray::kind((_InputArray *)param_1);
  if (iVar9 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar2 = *(uint *)pMVar12;
    local_50 = *(undefined8 *)(pMVar12 + 0x10);
    local_60 = *(ulong *)pMVar12;
    local_58 = *(undefined8 *)(pMVar12 + 8);
    local_48 = *(undefined8 *)(pMVar12 + 0x18);
    local_40 = *(undefined8 *)(pMVar12 + 0x20);
    local_38 = *(undefined8 *)(pMVar12 + 0x28);
    local_30 = *(undefined8 *)(pMVar12 + 0x30);
    local_28 = *(long *)(pMVar12 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar12 + 0x48);
      local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar2;
      Mat::copySize((Mat *)&local_60,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uStack_a8 = 0;
  local_b0 = (String *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_a0,(Mat **)&local_b0,&local_b8,-1);
  fVar18 = (float)param_2;
  uVar17 = 0;
  uVar16 = local_78 + (local_60 >> 3 & 0x1ff) * local_78;
  if (local_80 != 0) {
    do {
      uVar13 = 0;
      puVar15 = local_b8;
      while (uVar13 + 4 <= uVar16) {
        uVar7 = *(undefined8 *)(puVar15 + 8);
        uVar25 = (undefined1)((ulong)uVar7 >> 8);
        uVar26 = (undefined1)((ulong)uVar7 >> 0x10);
        uVar27 = (undefined1)((ulong)uVar7 >> 0x18);
        uVar28 = (undefined1)((ulong)uVar7 >> 0x20);
        uVar29 = (undefined1)((ulong)uVar7 >> 0x28);
        uVar30 = (undefined1)((ulong)uVar7 >> 0x30);
        uVar31 = (undefined1)((ulong)uVar7 >> 0x38);
        auVar19._0_4_ =
             -(uint)((int)_DAT_002bd690 < (int)((uint)*(undefined8 *)puVar15 & 0x7fffffff));
        auVar19._4_4_ =
             -(uint)((int)((ulong)_DAT_002bd690 >> 0x20) <
                    (int)((uint)((ulong)*(undefined8 *)puVar15 >> 0x20) & 0x7fffffff));
        auVar19._8_4_ = -(uint)((int)_UNK_002bd698 < (int)((uint)uVar7 & 0x7fffffff));
        auVar19._12_4_ =
             -(uint)((int)((ulong)_UNK_002bd698 >> 0x20) <
                    (int)((uint)((ulong)uVar7 >> 0x20) & 0x7fffffff));
        uVar21 = (undefined1)((uint)fVar18 >> 0x18);
        uVar22 = SUB41(fVar18,0);
        uVar23 = (undefined1)((uint)fVar18 >> 8);
        uVar24 = (undefined1)((uint)fVar18 >> 0x10);
        auVar5[4] = uVar22;
        auVar5._0_4_ = fVar18;
        auVar5[5] = uVar23;
        auVar5[6] = uVar24;
        auVar5[7] = uVar21;
        auVar5[8] = uVar22;
        auVar5[9] = uVar23;
        auVar5[10] = uVar24;
        auVar5[0xb] = uVar21;
        auVar5[0xc] = uVar22;
        auVar5[0xd] = uVar23;
        auVar5[0xe] = uVar24;
        auVar5[0xf] = uVar21;
        auVar6[9] = uVar25;
        auVar6._0_9_ = *(unkbyte9 *)puVar15;
        auVar6[10] = uVar26;
        auVar6[0xb] = uVar27;
        auVar6[0xc] = uVar28;
        auVar6[0xd] = uVar29;
        auVar6[0xe] = uVar30;
        auVar6[0xf] = uVar31;
        auVar20[9] = uVar25;
        auVar20._0_9_ = *(unkbyte9 *)puVar15;
        auVar20[10] = uVar26;
        auVar20[0xb] = uVar27;
        auVar20[0xc] = uVar28;
        auVar20[0xd] = uVar29;
        auVar20[0xe] = uVar30;
        auVar20[0xf] = uVar31;
        auVar20 = auVar20 ^ (auVar6 ^ auVar5) & auVar19;
        *(long *)(puVar15 + 8) = auVar20._8_8_;
        *(long *)puVar15 = auVar20._0_8_;
        uVar13 = uVar13 + 4;
        puVar15 = puVar15 + 0x10;
      }
      pfVar14 = (float *)(local_b8 + uVar13 * 4);
      if (uVar13 < uVar16) {
        do {
          if (0x7f800000 < (uint)ABS(*pfVar14)) {
            *pfVar14 = fVar18;
          }
          pfVar14 = pfVar14 + 1;
        } while (pfVar14 != (float *)(local_b8 + uVar16 * 4));
      }
      uVar17 = uVar17 + 1;
      NAryMatIterator::operator++(aNStack_a0);
    } while (uVar17 < local_80);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar9 = 0;
    puVar11 = local_20;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar9 = iVar9 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar9 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002bd6a0 (4 bytes) name=cvCbrt

void cv::cvCbrt(float param_1)

{
  (*(code *)PTR_cubeRoot_00500d90)();
  return;
}


==================================================================

### FUNC 002bd6a4 (4 bytes) name=cvFastArctan

void cv::cvFastArctan(float param_1,float param_2)

{
  (*(code *)PTR_fastAtan2_00500ff8)();
  return;
}


==================================================================

### FUNC 002bd6b0 (2776 bytes) name=cvPolarToCart

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvPolarToCart(cv *param_1,cv *param_2,cv *param_3,cv *param_4,int param_5)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  AutoBuffer *pAVar9;
  undefined8 *puVar10;
  int iVar11;
  int *piVar12;
  undefined8 local_2d8;
  undefined8 local_2d0;
  undefined8 local_2c8;
  undefined8 local_2c0;
  undefined8 local_2b8;
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined8 local_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  int *local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  int *local_200;
  AutoBuffer *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  int *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_258 = &local_250;
  pAVar9 = (AutoBuffer *)&local_1f0;
  uStack_298 = _UNK_002be2c8;
  local_2a0 = _DAT_002be2c0;
  uStack_248 = 0;
  local_250 = 0;
  uStack_238 = _UNK_002be2c8;
  local_240 = _DAT_002be2c0;
  uStack_1e8 = 0;
  local_1f0 = 0;
  local_260 = (int *)&uStack_298;
  local_200 = (int *)&uStack_238;
  local_290 = 0;
  uStack_288 = 0;
  local_280 = 0;
  uStack_278 = 0;
  local_270 = 0;
  lStack_268 = 0;
  local_230 = 0;
  uStack_228 = 0;
  local_220 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  local_1f8 = pAVar9;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,pAVar9);
  local_198 = &local_190;
  local_1a0 = (int *)&uStack_1d8;
  uStack_188 = 0;
  local_190 = 0;
  uStack_1d8 = _UNK_002be2c8;
  local_1e0 = _DAT_002be2c0;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  if (param_1 != (cv *)0x0) {
    cv::cvarrToMat(param_1,(void *)0x0,true,false,0,pAVar9);
    if (lStack_148 != 0) {
      piVar12 = (int *)(lStack_148 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar12 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar11 = *piVar12;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = iVar11 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar10 = local_138;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1e0._4_4_ < 1) {
LAB_002bd85c:
      if (2 < local_17c) goto LAB_002be0b0;
      uStack_1d8 = local_178;
      local_1e0 = CONCAT44(local_17c,local_180);
      *local_198 = *local_138;
      local_198[1] = puVar10[1];
    }
    else {
      iVar11 = 0;
      piVar12 = local_1a0;
      do {
        *piVar12 = 0;
        iVar11 = iVar11 + 1;
        piVar12 = piVar12 + 1;
      } while (iVar11 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_002bd85c;
LAB_002be0b0:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
      cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
    }
    uStack_1b8 = uStack_158;
    local_1c0 = local_160;
    lStack_1a8 = lStack_148;
    local_1b0 = local_150;
    uStack_1c8 = uStack_168;
    local_1d0 = local_170;
    if (lStack_148 != 0) {
      piVar12 = (int *)(lStack_148 + 0x14);
      do {
        iVar11 = *piVar12;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = iVar11 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (0 < local_17c) {
      iVar11 = 0;
      do {
        *local_140 = 0;
        iVar11 = iVar11 + 1;
        local_140 = local_140 + 1;
      } while (iVar11 < local_17c);
    }
    if (local_138 != auStack_130) {
      cv::fastFree(local_138);
    }
    if (((*local_1a0 != *local_20) || (local_1a0[1] != local_20[1])) ||
       (((uint)local_1e0 & 0xfff) != (local_60 & 0xfff))) {
      local_2d8 = 0;
      local_2d0 = 0;
      pAVar9 = (AutoBuffer *)cv::String::allocate((String *)&local_2d8,0x38);
      uVar8 = s_Mag_size______Angle_size______Ma_004685a8._40_8_;
      uVar7 = s_Mag_size______Angle_size______Ma_004685a8._32_8_;
      uVar6 = s_Mag_size______Angle_size______Ma_004685a8._24_8_;
      uVar5 = s_Mag_size______Angle_size______Ma_004685a8._16_8_;
      uVar4 = s_Mag_size______Angle_size______Ma_004685a8._8_8_;
      uVar3 = s_Mag_size______Angle_size______Ma_004685a8._0_8_;
      *(undefined8 *)(pAVar9 + 0x30) = s_Mag_size______Angle_size______Ma_004685a8._48_8_;
      *(undefined8 *)pAVar9 = uVar3;
      *(undefined8 *)(pAVar9 + 8) = uVar4;
      *(undefined8 *)(pAVar9 + 0x10) = uVar5;
      *(undefined8 *)(pAVar9 + 0x18) = uVar6;
      *(undefined8 *)(pAVar9 + 0x20) = uVar7;
      *(undefined8 *)(pAVar9 + 0x28) = uVar8;
      cv::error(-0xd7,(String *)&local_2d8,
                "void cvPolarToCart(const CvArr*, const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x72e);
      cv::String::deallocate((String *)&local_2d8);
    }
  }
  if (param_3 != (cv *)0x0) {
    cv::cvarrToMat(param_3,(void *)0x0,true,false,0,pAVar9);
    if (lStack_e8 != 0) {
      piVar12 = (int *)(lStack_e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (lStack_268 != 0) {
      piVar12 = (int *)(lStack_268 + 0x14);
      do {
        iVar11 = *piVar12;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = iVar11 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_2a0);
      }
    }
    puVar10 = local_d8;
    lStack_268 = 0;
    local_290 = 0;
    uStack_278 = 0;
    local_280 = 0;
    uStack_288 = 0;
    if (local_2a0._4_4_ < 1) {
LAB_002bda7c:
      if (2 < local_11c) goto LAB_002be0a0;
      uStack_298 = local_118;
      local_2a0 = CONCAT44(local_11c,local_120);
      *local_258 = *local_d8;
      local_258[1] = puVar10[1];
    }
    else {
      iVar11 = 0;
      piVar12 = local_260;
      do {
        *piVar12 = 0;
        iVar11 = iVar11 + 1;
        piVar12 = piVar12 + 1;
      } while (iVar11 < local_2a0._4_4_);
      if (local_2a0._4_4_ < 3) goto LAB_002bda7c;
LAB_002be0a0:
      local_2a0 = CONCAT44(local_2a0._4_4_,local_120);
      cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_120);
    }
    uStack_278 = uStack_f8;
    local_280 = local_100;
    lStack_268 = lStack_e8;
    local_270 = local_f0;
    uStack_288 = uStack_108;
    local_290 = local_110;
    if (lStack_e8 != 0) {
      piVar12 = (int *)(lStack_e8 + 0x14);
      do {
        iVar11 = *piVar12;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = iVar11 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar11 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar11 = 0;
      do {
        *local_e0 = 0;
        iVar11 = iVar11 + 1;
        local_e0 = local_e0 + 1;
      } while (iVar11 < local_11c);
    }
    if (local_d8 != auStack_d0) {
      cv::fastFree(local_d8);
    }
    if (((*local_260 != *local_20) || (local_260[1] != local_20[1])) ||
       (((uint)local_2a0 & 0xfff) != (local_60 & 0xfff))) {
      local_2c8 = 0;
      local_2c0 = 0;
      pAVar9 = (AutoBuffer *)cv::String::allocate((String *)&local_2c8,0x34);
      uVar8 = s_X_size______Angle_size______X_ty_004685e8._40_8_;
      uVar7 = s_X_size______Angle_size______X_ty_004685e8._32_8_;
      uVar6 = s_X_size______Angle_size______X_ty_004685e8._24_8_;
      uVar5 = s_X_size______Angle_size______X_ty_004685e8._16_8_;
      uVar4 = s_X_size______Angle_size______X_ty_004685e8._8_8_;
      uVar3 = s_X_size______Angle_size______X_ty_004685e8._0_8_;
      *(undefined4 *)(pAVar9 + 0x30) = s_X_size______Angle_size______X_ty_004685e8._48_4_;
      *(undefined8 *)pAVar9 = uVar3;
      *(undefined8 *)(pAVar9 + 8) = uVar4;
      *(undefined8 *)(pAVar9 + 0x10) = uVar5;
      *(undefined8 *)(pAVar9 + 0x18) = uVar6;
      *(undefined8 *)(pAVar9 + 0x20) = uVar7;
      *(undefined8 *)(pAVar9 + 0x28) = uVar8;
      cv::error(-0xd7,(String *)&local_2c8,
                "void cvPolarToCart(const CvArr*, const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x733);
      cv::String::deallocate((String *)&local_2c8);
    }
  }
  if (param_4 == (cv *)0x0) goto LAB_002bddec;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar9);
  if (lStack_88 != 0) {
    piVar12 = (int *)(lStack_88 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = *piVar12 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_208 != 0) {
    piVar12 = (int *)(lStack_208 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  puVar10 = local_78;
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (local_240._4_4_ < 1) {
LAB_002bdc9c:
    if (2 < local_bc) goto LAB_002bdca8;
    uStack_238 = local_b8;
    local_240 = CONCAT44(local_bc,local_c0);
    *(undefined8 *)local_1f8 = *local_78;
    *(undefined8 *)(local_1f8 + 8) = puVar10[1];
  }
  else {
    iVar11 = 0;
    piVar12 = local_200;
    do {
      *piVar12 = 0;
      iVar11 = iVar11 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar11 < local_240._4_4_);
    if (local_240._4_4_ < 3) goto LAB_002bdc9c;
LAB_002bdca8:
    local_240 = CONCAT44(local_240._4_4_,local_c0);
    cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_c0);
  }
  uStack_218 = uStack_98;
  local_220 = local_a0;
  lStack_208 = lStack_88;
  local_210 = local_90;
  uStack_228 = uStack_a8;
  local_230 = local_b0;
  if (lStack_88 != 0) {
    piVar12 = (int *)(lStack_88 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (((*local_200 != *local_20) || (local_200[1] != local_20[1])) ||
     (((uint)local_240 & 0xfff) != (local_60 & 0xfff))) {
    local_2b8 = 0;
    local_2b0 = (Mat *)0x0;
    puVar10 = (undefined8 *)cv::String::allocate((String *)&local_2b8,0x34);
    uVar8 = DAT_00468648;
    uVar7 = DAT_00468640;
    uVar6 = DAT_00468638;
    uVar5 = _LAB_00468630;
    uVar4 = DAT_00468628;
    uVar3 = DAT_00468620;
    *(undefined4 *)(puVar10 + 6) = DAT_00468650;
    *puVar10 = uVar3;
    puVar10[1] = uVar4;
    puVar10[2] = uVar5;
    puVar10[3] = uVar6;
    puVar10[4] = uVar7;
    puVar10[5] = uVar8;
    cv::error(-0xd7,(String *)&local_2b8,
              "void cvPolarToCart(const CvArr*, const CvArr*, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x738);
    cv::String::deallocate((String *)&local_2b8);
  }
LAB_002bddec:
  local_2a8 = 0;
  local_2a4 = 0;
  local_2b8 = CONCAT44(local_2b8._4_4_,0x1010000);
  local_110 = 0;
  local_120 = 0x2010000;
  local_170 = 0;
  local_180 = 0x1010000;
  local_b0 = 0;
  local_c0 = 0x2010000;
  local_2b0 = (Mat *)&local_1e0;
  local_178 = (Mat *)&local_60;
  local_118 = (Mat *)&local_2a0;
  local_b8 = (Mat *)&local_240;
  cv::polarToCart((_InputArray *)&local_2b8,(_InputArray *)&local_180,(_OutputArray *)&local_120,
                  (_OutputArray *)&local_c0,param_5 != 0);
  if (lStack_1a8 != 0) {
    piVar12 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar11 = 0;
    piVar12 = local_1a0;
    do {
      *piVar12 = 0;
      iVar11 = iVar11 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar11 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar12 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (lStack_208 != 0) {
    piVar12 = (int *)(lStack_208 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar11 = 0;
    piVar12 = local_200;
    do {
      *piVar12 = 0;
      iVar11 = iVar11 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar11 < local_240._4_4_);
  }
  if (local_1f8 != (AutoBuffer *)&local_1f0) {
    cv::fastFree(local_1f8);
  }
  if (lStack_268 != 0) {
    piVar12 = (int *)(lStack_268 + 0x14);
    do {
      iVar11 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar11 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_2a0._4_4_) {
    iVar11 = 0;
    piVar12 = local_260;
    do {
      *piVar12 = 0;
      iVar11 = iVar11 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar11 < local_2a0._4_4_);
  }
  if (local_258 != &local_250) {
    cv::fastFree(local_258);
  }
  return;
}


==================================================================

### FUNC 002be2d0 (668 bytes) name=cvExp

void cvExp(cv *param_1,cv *param_2)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  if (((local_c0 & 0xfff) == (local_60 & 0xfff)) && (iVar10 = local_80[-1], iVar10 == local_20[-1]))
  {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002be398;
    }
    else {
      if (iVar10 < 1) goto LAB_002be398;
      if (*local_80 == *local_20) {
        piVar9 = local_80;
        piVar11 = local_20;
        do {
          piVar11 = piVar11 + 1;
          if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002be398;
          piVar9 = piVar9 + 1;
        } while (*piVar9 == *piVar11);
      }
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_src_type______dst_type______src__00468658._40_8_;
  uVar6 = s_src_type______dst_type______src__00468658._32_8_;
  uVar5 = s_src_type______dst_type______src__00468658._24_8_;
  uVar4 = s_src_type______dst_type______src__00468658._16_8_;
  uVar3 = s_src_type______dst_type______src__00468658._8_8_;
  *(undefined8 *)pcVar8 = s_src_type______dst_type______src__00468658._0_8_;
  *(undefined8 *)(pcVar8 + 8) = uVar3;
  *(undefined8 *)(pcVar8 + 0x10) = uVar4;
  *(undefined8 *)(pcVar8 + 0x18) = uVar5;
  *(undefined8 *)(pcVar8 + 0x20) = uVar6;
  *(undefined8 *)(pcVar8 + 0x28) = uVar7;
  cv::error(-0xd7,(String *)&local_d8,"void cvExp(const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x741);
  cv::String::deallocate((String *)&local_d8);
LAB_002be398:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::exp((_InputArray *)local_f0,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002be5d0 (668 bytes) name=cvLog

void cvLog(cv *param_1,cv *param_2)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  if (((local_c0 & 0xfff) == (local_60 & 0xfff)) && (iVar10 = local_80[-1], iVar10 == local_20[-1]))
  {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002be698;
    }
    else {
      if (iVar10 < 1) goto LAB_002be698;
      if (*local_80 == *local_20) {
        piVar9 = local_80;
        piVar11 = local_20;
        do {
          piVar11 = piVar11 + 1;
          if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002be698;
          piVar9 = piVar9 + 1;
        } while (*piVar9 == *piVar11);
      }
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_src_type______dst_type______src__00468658._40_8_;
  uVar6 = s_src_type______dst_type______src__00468658._32_8_;
  uVar5 = s_src_type______dst_type______src__00468658._24_8_;
  uVar4 = s_src_type______dst_type______src__00468658._16_8_;
  uVar3 = s_src_type______dst_type______src__00468658._8_8_;
  *(undefined8 *)pcVar8 = s_src_type______dst_type______src__00468658._0_8_;
  *(undefined8 *)(pcVar8 + 8) = uVar3;
  *(undefined8 *)(pcVar8 + 0x10) = uVar4;
  *(undefined8 *)(pcVar8 + 0x18) = uVar5;
  *(undefined8 *)(pcVar8 + 0x20) = uVar6;
  *(undefined8 *)(pcVar8 + 0x28) = uVar7;
  cv::error(-0xd7,(String *)&local_d8,"void cvLog(const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x748);
  cv::String::deallocate((String *)&local_d8);
LAB_002be698:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::log((_InputArray *)local_f0,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002be8d0 (684 bytes) name=cvPow

void cvPow(double param_1,cv *param_2,cv *param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int *piVar11;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  if (((local_c0 & 0xfff) == (local_60 & 0xfff)) && (iVar10 = local_80[-1], iVar10 == local_20[-1]))
  {
    if (iVar10 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_002be9a0;
    }
    else {
      if (iVar10 < 1) goto LAB_002be9a0;
      if (*local_80 == *local_20) {
        piVar9 = local_80;
        piVar11 = local_20;
        do {
          piVar11 = piVar11 + 1;
          if (piVar9 == local_80 + (iVar10 - 1)) goto LAB_002be9a0;
          piVar9 = piVar9 + 1;
        } while (*piVar9 == *piVar11);
      }
    }
  }
  local_d8 = 0;
  local_d0 = (Mat *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_d8,0x30);
  uVar7 = s_src_type______dst_type______src__00468658._40_8_;
  uVar6 = s_src_type______dst_type______src__00468658._32_8_;
  uVar5 = s_src_type______dst_type______src__00468658._24_8_;
  uVar4 = s_src_type______dst_type______src__00468658._16_8_;
  uVar3 = s_src_type______dst_type______src__00468658._8_8_;
  *(undefined8 *)pcVar8 = s_src_type______dst_type______src__00468658._0_8_;
  *(undefined8 *)(pcVar8 + 8) = uVar3;
  *(undefined8 *)(pcVar8 + 0x10) = uVar4;
  *(undefined8 *)(pcVar8 + 0x18) = uVar5;
  *(undefined8 *)(pcVar8 + 0x20) = uVar6;
  *(undefined8 *)(pcVar8 + 0x28) = uVar7;
  cv::error(-0xd7,(String *)&local_d8,"void cvPow(const CvArr*, CvArr*, double)",
            "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x74f);
  cv::String::deallocate((String *)&local_d8);
LAB_002be9a0:
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::pow((_InputArray *)local_f0,param_1,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002bebe0 (260 bytes) name=cvCheckArr

undefined1 cvCheckArr(double param_1,double param_2,cv *param_3,uint param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined1 uVar4;
  int iVar5;
  AutoBuffer *in_x5;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((param_4 & 1) == 0) {
    param_1 = DAT_002bed18;
    param_2 = DAT_002bed10;
  }
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,in_x5);
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x1010000;
  local_70 = aMStack_60;
  uVar4 = cv::checkRange((_InputArray *)local_78,(bool)((byte)(param_4 >> 1) & 1),(Point_ *)0x0,
                         param_1,param_2);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar5 = 0;
    do {
      *local_20 = 0;
      iVar5 = iVar5 + 1;
      local_20 = local_20 + 1;
    } while (iVar5 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return uVar4;
}


==================================================================

### FUNC 002bed20 (2892 bytes) name=solveCubic

/* cv::solveCubic(cv::_InputArray const&, cv::_OutputArray const&) */

int cv::solveCubic(_InputArray *param_1,_OutputArray *param_2)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  int iVar8;
  char *pcVar9;
  void *__dest;
  double *pdVar10;
  long lVar11;
  Mat *pMVar12;
  long lVar13;
  int *piVar14;
  long lVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  long lVar19;
  long lVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  double *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  long *local_78;
  long local_70;
  long local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  double *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  iVar8 = _InputArray::kind(param_1);
  if (iVar8 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar12;
                    /* try { // try from 002bf3a0 to 003bf3a3 has its CatchHandler @ 002bf5a8 */
    local_bc = *(int *)(pMVar12 + 4);
    local_b8 = *(int *)(pMVar12 + 8);
                    /* try { // try from 002bf3a8 to 003bf427 has its CatchHandler @ 002bf2f4 */
    local_b4 = *(int *)(pMVar12 + 0xc);
    local_b0 = *(double **)(pMVar12 + 0x10);
    local_a8 = *(undefined8 *)(pMVar12 + 0x18);
    local_a0 = *(undefined8 *)(pMVar12 + 0x20);
    local_98 = *(undefined8 *)(pMVar12 + 0x28);
    local_90 = *(undefined8 *)(pMVar12 + 0x30);
    local_88 = *(long *)(pMVar12 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_70 = **(long **)(pMVar12 + 0x48);
      local_68 = (*(long **)(pMVar12 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar1 = local_c0 & 0xfff;
  if (1 < uVar1 - 5) {
    local_e0 = 0;
    local_d8 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_e0,0x22);
    uVar7 = s_ctype____CV_32F____ctype____CV_6_00468690._24_8_;
    uVar6 = s_ctype____CV_32F____ctype____CV_6_00468690._16_8_;
    uVar5 = s_ctype____CV_32F____ctype____CV_6_00468690._8_8_;
    uVar4 = s_ctype____CV_32F____ctype____CV_6_00468690._0_8_;
    *(undefined2 *)(pcVar9 + 0x20) = s_ctype____CV_32F____ctype____CV_6_00468690._32_2_;
    *(undefined8 *)pcVar9 = uVar4;
    *(undefined8 *)(pcVar9 + 8) = uVar5;
    *(undefined8 *)(pcVar9 + 0x10) = uVar6;
    *(undefined8 *)(pcVar9 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_e0,"int cv::solveCubic(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x77a);
    String::deallocate((String *)&local_e0);
  }
  iVar8 = *local_80;
  iVar16 = local_80[1];
  if (((((iVar16 != 3) || (iVar8 != 1)) && ((iVar16 != 4 || (iVar8 != 1)))) &&
      ((iVar16 != 1 || (iVar8 != 3)))) && ((iVar8 != 4 || (iVar16 != 1)))) {
    local_d0 = 0;
    local_c8 = 0;
    __dest = (void *)String::allocate((String *)&local_d0,0x82);
    memcpy(__dest,&DAT_004686b8,0x82);
    error(-0xd7,(String *)&local_d0,"int cv::solveCubic(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x77e);
    String::deallocate((String *)&local_d0);
  }
  _OutputArray::create(param_2,3,1,uVar1,-1,true,0x60);
  iVar8 = _InputArray::kind((_InputArray *)param_2);
  if (iVar8 == 0x10000) {
    pMVar12 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar12;
    local_5c = *(int *)(pMVar12 + 4);
                    /* try { // try from 002bf454 to 003bf457 has its CatchHandler @ 002bf594 */
    local_58 = *(int *)(pMVar12 + 8);
    local_54 = *(int *)(pMVar12 + 0xc);
                    /* try { // try from 002bf45c to 003bf517 has its CatchHandler @ 002bf2f4 */
    local_50 = *(double **)(pMVar12 + 0x10);
    local_48 = *(undefined8 *)(pMVar12 + 0x18);
    local_40 = *(undefined8 *)(pMVar12 + 0x20);
    local_38 = *(undefined8 *)(pMVar12 + 0x28);
    local_30 = *(undefined8 *)(pMVar12 + 0x30);
    local_28 = *(long *)(pMVar12 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar3) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (2 < *(int *)(pMVar12 + 4)) {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar12);
      goto LAB_002beebc;
    }
    local_10 = **(long **)(pMVar12 + 0x48);
    local_8 = (*(long **)(pMVar12 + 0x48))[1];
    iVar8 = local_b4 + local_b8 + -1;
    if (uVar1 == 5) goto LAB_002bf500;
LAB_002beed4:
    if (iVar8 == 4) {
      lVar11 = 2;
      lVar13 = 1;
      lVar19 = 0x10;
      lVar15 = 8;
      iVar16 = 3;
      dVar21 = *local_b0;
      iVar17 = 2;
      iVar18 = 1;
      iVar8 = 3;
      if ((local_c0 & 0x4000) == 0) goto LAB_002bef0c;
LAB_002bf078:
      dVar25 = *(double *)((long)local_b0 + lVar15);
      dVar26 = *(double *)((long)local_b0 + lVar19);
      pdVar10 = local_b0 + iVar16;
    }
    else {
      lVar15 = 0;
      lVar11 = 1;
      lVar19 = 8;
      lVar13 = 0;
      iVar16 = 2;
      iVar17 = 1;
      iVar18 = 0;
      dVar21 = 1.0;
      iVar8 = 2;
      if ((local_c0 & 0x4000) != 0) goto LAB_002bf078;
LAB_002bef0c:
      iVar16 = iVar8;
      if (*local_80 == 1) goto LAB_002bf078;
      if (local_80[1] == 1) {
        lVar13 = lVar13 * *local_78;
      }
      else {
        iVar8 = 0;
        if (local_b4 != 0) {
          iVar8 = iVar18 / local_b4;
        }
        lVar13 = (long)iVar8 * *local_78 + (long)(iVar18 - local_b4 * iVar8) * 8;
      }
      dVar25 = *(double *)((long)local_b0 + lVar13);
      if (local_80[1] == 1) {
        lVar11 = lVar11 * *local_78;
      }
      else {
        iVar8 = 0;
        if (local_b4 != 0) {
          iVar8 = iVar17 / local_b4;
        }
        lVar11 = (long)iVar8 * *local_78 + (long)(iVar17 - local_b4 * iVar8) * 8;
      }
      dVar26 = *(double *)((long)local_b0 + lVar11);
      if (local_80[1] == 1) {
        pdVar10 = (double *)((long)local_b0 + (long)iVar16 * *local_78);
      }
      else {
        iVar8 = 0;
        if (local_b4 != 0) {
          iVar8 = iVar16 / local_b4;
        }
        pdVar10 = (double *)
                  ((long)local_b0 + (long)iVar8 * *local_78 + (long)(iVar16 - local_b4 * iVar8) * 8)
        ;
      }
    }
    dVar23 = *pdVar10;
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_002beebc:
    iVar8 = local_b4 + local_b8 + -1;
    if (uVar1 != 5) goto LAB_002beed4;
LAB_002bf500:
    if (iVar8 == 4) {
      lVar11 = 2;
      lVar13 = 1;
      lVar20 = 8;
      lVar19 = 4;
      lVar15 = 3;
      iVar8 = 2;
      dVar21 = (double)*(float *)local_b0;
      iVar16 = 1;
      if ((local_c0 & 0x4000) == 0) goto LAB_002bf538;
LAB_002bf5e8:
      pdVar10 = (double *)((long)local_b0 + (long)(int)lVar15 * 4);
      dVar25 = (double)*(float *)((long)local_b0 + lVar19);
      dVar26 = (double)*(float *)((long)local_b0 + lVar20);
    }
    else {
      lVar19 = 0;
      lVar11 = 1;
      lVar20 = 4;
      lVar13 = 0;
      lVar15 = 2;
      iVar8 = 1;
      iVar16 = 0;
      dVar21 = 1.0;
      if ((local_c0 & 0x4000) != 0) goto LAB_002bf5e8;
LAB_002bf538:
      if (*local_80 == 1) goto LAB_002bf5e8;
      if (local_80[1] == 1) {
        lVar13 = lVar13 * *local_78;
      }
      else {
        iVar17 = 0;
        if (local_b4 != 0) {
          iVar17 = iVar16 / local_b4;
        }
        lVar13 = (long)iVar17 * *local_78 + (long)(iVar16 - local_b4 * iVar17) * 4;
      }
      dVar25 = (double)*(float *)((long)local_b0 + lVar13);
      if (local_80[1] == 1) {
        lVar11 = lVar11 * *local_78;
      }
      else {
        iVar16 = 0;
        if (local_b4 != 0) {
          iVar16 = iVar8 / local_b4;
        }
                    /* catch() { ... } // from try @ 002bf454 with catch @ 002bf594 */
        lVar11 = (long)iVar16 * *local_78 + (long)(iVar8 - local_b4 * iVar16) * 4;
                    /* try { // try from 002bf5a4 to 003bf5a7 has its CatchHandler @ 002bf2f4 */
      }
                    /* catch() { ... } // from try @ 002bf3a0 with catch @ 002bf5a8 */
      dVar26 = (double)*(float *)((long)local_b0 + lVar11);
                    /* try { // try from 002bf5b8 to 003bf5bb has its CatchHandler @ 002bf2f4 */
      if (local_80[1] == 1) {
        pdVar10 = (double *)((long)local_b0 + lVar15 * *local_78);
      }
      else {
                    /* catch() { ... } // from try @ 002bf950 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfbc0 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfcf8 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfd7c with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfde0 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfdf8 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfe0c with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfe20 with catch @ 002bf5bc
                       catch() { ... } // from try @ 002bfe34 with catch @ 002bf5bc */
        iVar8 = 0;
        if (local_b4 != 0) {
          iVar8 = (int)lVar15 / local_b4;
        }
        pdVar10 = (double *)
                  ((long)local_b0 +
                  (long)iVar8 * *local_78 + (long)((int)lVar15 - local_b4 * iVar8) * 4);
      }
    }
    dVar23 = (double)*(float *)pdVar10;
  }
  if (dVar21 == 0.0) {
    if (dVar25 == 0.0) {
      if (dVar26 == 0.0) {
        dVar26 = 0.0;
        dVar24 = 0.0;
        iVar8 = -(uint)(dVar23 == 0.0);
        dVar23 = 0.0;
      }
      else {
        iVar8 = 1;
        dVar24 = 0.0;
        dVar26 = -dVar23 / dVar26;
        dVar23 = 0.0;
      }
    }
    else {
      dVar21 = dVar26 * dVar26 - dVar25 * 4.0 * dVar23;
      if (dVar21 < 0.0) {
        dVar26 = 0.0;
        iVar8 = 0;
        dVar24 = 0.0;
        dVar23 = dVar26;
      }
      else {
        dVar22 = SQRT(dVar21);
        if (NAN(dVar22)) {
          dVar22 = ::sqrt(dVar21);
        }
        dVar21 = (dVar22 - dVar26) * 0.5;
        dVar24 = (dVar26 + dVar22) * -0.5;
                    /* try { // try from 002bf34c to 003bf34f has its CatchHandler @ 002bf2f4 */
        if (ABS(dVar24) < ABS(dVar21)) {
          dVar24 = dVar21;
        }
        dVar26 = dVar24 / dVar25;
        dVar24 = dVar23 / dVar24;
        iVar8 = 1;
        dVar23 = 0.0;
        if (0.0 < dVar22) {
          iVar8 = 2;
        }
      }
    }
  }
  else {
    dVar21 = 1.0 / dVar21;
    dVar25 = dVar25 * dVar21;
    dVar22 = (dVar25 * dVar25 - dVar26 * dVar21 * 3.0) * DAT_002bf8c0;
    dVar24 = dVar22 * dVar22 * dVar22;
    dVar26 = (((dVar25 + dVar25) * dVar25 * dVar25 - dVar25 * 9.0 * dVar26 * dVar21) +
             dVar23 * dVar21 * 27.0) * DAT_002bf8c8;
    dVar21 = dVar24 - dVar26 * dVar26;
    if (dVar21 < 0.0) {
      dVar21 = -dVar21;
      dVar23 = SQRT(dVar21);
      if (NAN(dVar23)) {
        dVar23 = ::sqrt(dVar21);
      }
      dVar21 = ::pow(ABS(dVar26) + dVar23,DAT_002bf8e8);
      if (0.0 < dVar26) {
        dVar21 = -dVar21;
      }
      iVar8 = 1;
      dVar23 = 0.0;
      dVar24 = 0.0;
      dVar26 = (dVar22 / dVar21 + dVar21) - DAT_002bf8d0 * dVar25;
    }
    else {
      dVar21 = SQRT(dVar24);
      if (NAN(dVar21)) {
        dVar21 = ::sqrt(dVar24);
      }
      dVar21 = acos(dVar26 / dVar21);
      dVar23 = SQRT(dVar22);
      if (NAN(dVar23)) {
        dVar23 = ::sqrt(dVar22);
      }
      dVar22 = DAT_002bf8d0;
      iVar8 = 3;
      dVar21 = dVar21 * DAT_002bf8d0;
      dVar23 = dVar23 * -2.0;
      dVar26 = cos(dVar21);
      dVar26 = dVar26 * dVar23 - dVar22 * dVar25;
      dVar24 = cos(dVar21 + DAT_002bf8d8);
      dVar24 = dVar24 * dVar23 - dVar22 * dVar25;
      dVar21 = cos(dVar21 + DAT_002bf8e0);
      dVar23 = dVar21 * dVar23 - dVar22 * dVar25;
    }
  }
  if ((local_60 & 0xfff) != 5) {
    if ((local_60 >> 0xe & 1) == 0) {
      if (*local_20 == 1) {
        iVar16 = *local_20;
        *local_50 = dVar26;
        if (iVar16 != 1) goto LAB_002bf18c;
        local_50[1] = dVar24;
        if (*local_20 == 1) goto LAB_002bf384;
      }
      else {
        *local_50 = dVar26;
LAB_002bf18c:
        if (local_20[1] == 1) {
          lVar13 = *local_18;
        }
        else {
          iVar16 = 0;
          if (local_54 != 0) {
            iVar16 = 1 / local_54;
          }
          lVar13 = (long)iVar16 * *local_18 + (long)(1 - local_54 * iVar16) * 8;
        }
        *(double *)((long)local_50 + lVar13) = dVar24;
      }
      if (local_20[1] == 1) {
        pdVar10 = (double *)((long)local_50 + *local_18 * 2);
      }
      else {
        iVar16 = 0;
        if (local_54 != 0) {
          iVar16 = 2 / local_54;
        }
        pdVar10 = (double *)
                  ((long)local_50 + (long)iVar16 * *local_18 + (long)(2 - local_54 * iVar16) * 8);
      }
    }
    else {
      *local_50 = dVar26;
      local_50[1] = dVar24;
LAB_002bf384:
      pdVar10 = local_50 + 2;
    }
    *pdVar10 = dVar23;
    goto LAB_002bf1f8;
  }
  if ((local_60 >> 0xe & 1) == 0) {
    if (*local_20 == 1) {
      iVar16 = *local_20;
      *(float *)local_50 = (float)dVar26;
      if (iVar16 != 1) goto LAB_002bf008;
      iVar16 = *local_20;
      *(float *)((long)local_50 + 4) = (float)dVar24;
      if (iVar16 == 1) goto LAB_002bf650;
    }
    else {
      *(float *)local_50 = (float)dVar26;
LAB_002bf008:
      if (local_20[1] == 1) {
        lVar13 = *local_18;
      }
      else {
        iVar16 = 0;
        if (local_54 != 0) {
          iVar16 = 1 / local_54;
        }
        lVar13 = (long)iVar16 * *local_18 + (long)(1 - local_54 * iVar16) * 4;
      }
      *(float *)((long)local_50 + lVar13) = (float)dVar24;
    }
    if (local_20[1] == 1) {
      pdVar10 = (double *)((long)local_50 + *local_18 * 2);
    }
    else {
      iVar16 = 0;
      if (local_54 != 0) {
        iVar16 = 2 / local_54;
      }
      pdVar10 = (double *)
                ((long)local_50 + (long)iVar16 * *local_18 + (long)(2 - local_54 * iVar16) * 4);
    }
  }
  else {
    *(float *)local_50 = (float)dVar26;
    *(float *)((long)local_50 + 4) = (float)dVar24;
LAB_002bf650:
    pdVar10 = local_50 + 1;
  }
  *(float *)pdVar10 = (float)dVar23;
LAB_002bf1f8:
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (double *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar16 = 0;
    piVar14 = local_20;
    do {
      *piVar14 = 0;
      iVar16 = iVar16 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar16 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar3) {
        *piVar14 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (double *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar16 = 0;
    piVar14 = local_80;
    do {
      *piVar14 = 0;
      iVar16 = iVar16 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar16 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
                    /* catch() { ... } // from try @ 002bf34c with catch @ 002bf2f4
                       catch() { ... } // from try @ 002bf3a8 with catch @ 002bf2f4
                       catch() { ... } // from try @ 002bf45c with catch @ 002bf2f4
                       catch() { ... } // from try @ 002bf5a4 with catch @ 002bf2f4
                       catch() { ... } // from try @ 002bf5b8 with catch @ 002bf2f4 */
  return iVar8;
}


==================================================================

### FUNC 002bf8f0 (2832 bytes) name=solvePoly

/* cv::solvePoly(cv::_InputArray const&, cv::_OutputArray const&, int) */

undefined1  [16] cv::solvePoly(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  ulong uVar16;
  char *pcVar17;
  ulong uVar18;
  double *pdVar19;
  long lVar20;
  double *pdVar21;
  uint uVar22;
  double *pdVar23;
  Mat **ppMVar24;
  int *piVar25;
  Mat *pMVar26;
  double *pdVar27;
  double *pdVar28;
  uint uVar29;
  uint uVar30;
  double dVar31;
  double dVar32;
  undefined1 auVar33 [16];
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  long lVar40;
  double dVar41;
  undefined8 local_638;
  undefined8 local_630;
  undefined8 local_628;
  Mat *local_620;
  undefined4 local_618;
  undefined4 local_614;
  uint local_610;
  int local_60c;
  int local_608;
  int local_604;
  undefined8 local_600;
  undefined8 local_5f8;
  undefined8 local_5f0;
  undefined8 local_5e8;
  undefined8 local_5e0;
  long local_5d8;
  int *local_5d0;
  undefined8 *local_5c8;
  undefined8 local_5c0;
  undefined8 local_5b8;
  uint local_5b0;
  int local_5ac;
  int local_5a8;
  undefined4 local_5a4;
  undefined8 local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  undefined8 local_588;
  undefined8 local_580;
  long local_578;
  int *local_570;
  undefined8 *local_568;
  undefined8 local_560;
  undefined8 local_558;
  uint local_550;
  int local_54c;
  int local_548;
  int local_544;
  double *local_540;
  double *local_538;
  double *local_530;
  double *local_528;
  undefined8 local_520;
  long local_518;
  int *local_510;
  long *local_508;
  long local_500;
  long local_4f8;
  undefined4 local_4f0;
  int local_4ec;
  Mat *local_4e8;
  double *local_4e0;
  double *local_4d8;
  double *local_4d0;
  double *local_4c8;
  undefined8 local_4c0;
  long local_4b8;
  Mat **local_4b0;
  ulong *local_4a8;
  ulong local_4a0 [2];
  double *local_490;
  ulong local_488;
  double adStack_480 [144];
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar26 = *(Mat **)(param_1 + 8);
    local_5d0 = &local_608;
    local_5c8 = &local_5c0;
    local_610 = *(uint *)pMVar26;
    local_60c = *(int *)(pMVar26 + 4);
    local_608 = *(int *)(pMVar26 + 8);
    local_604 = *(int *)(pMVar26 + 0xc);
    local_600 = *(undefined8 *)(pMVar26 + 0x10);
    local_5f8 = *(undefined8 *)(pMVar26 + 0x18);
    local_5f0 = *(undefined8 *)(pMVar26 + 0x20);
    local_5e8 = *(undefined8 *)(pMVar26 + 0x28);
    local_5e0 = *(undefined8 *)(pMVar26 + 0x30);
    local_5d8 = *(long *)(pMVar26 + 0x38);
    local_5b8 = 0;
    local_5c0 = 0;
    if (local_5d8 != 0) {
      piVar25 = (int *)(local_5d8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar26 + 4) < 3) {
      local_5c0 = **(undefined8 **)(pMVar26 + 0x48);
      local_5b8 = (*(undefined8 **)(pMVar26 + 0x48))[1];
    }
    else {
      local_60c = 0;
      Mat::copySize((Mat *)&local_610,pMVar26);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar16 = _InputArray::type(param_1,-1);
  uVar30 = (uint)uVar16 & 7;
                    /* try { // try from 002bf950 to 003bfb87 has its CatchHandler @ 002bf5bc */
  if ((uVar30 < 5) || (1 < ((uint)(uVar16 >> 3) & 0x1ff))) {
    local_638 = 0;
    local_630 = 0;
    pcVar17 = (char *)String::allocate((String *)&local_638,0x36);
    uVar12 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._52_2_;
    uVar11 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._40_8_;
    uVar10 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._32_8_;
    uVar9 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._24_8_;
    uVar8 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._16_8_;
    uVar7 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._8_8_;
    uVar6 = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._0_8_;
    *(undefined4 *)(pcVar17 + 0x30) = s_CV_MAT_DEPTH_ctype__>__CV_32F____00468740._48_4_;
    *(undefined2 *)(pcVar17 + 0x34) = uVar12;
    *(undefined8 *)pcVar17 = uVar6;
    *(undefined8 *)(pcVar17 + 8) = uVar7;
    *(undefined8 *)(pcVar17 + 0x10) = uVar8;
    *(undefined8 *)(pcVar17 + 0x18) = uVar9;
    *(undefined8 *)(pcVar17 + 0x20) = uVar10;
    *(undefined8 *)(pcVar17 + 0x28) = uVar11;
    error(-0xd7,(String *)&local_638,"double cv::solvePoly(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x7ff);
    String::deallocate((String *)&local_638);
  }
  if ((local_608 != 1) && (local_604 != 1)) {
    local_628 = 0;
    local_620 = (Mat *)0x0;
    pcVar17 = (char *)String::allocate((String *)&local_628,0x26);
    uVar12 = s_coeffs0_rows____1____coeffs0_col_00468778._36_2_;
    uVar9 = s_coeffs0_rows____1____coeffs0_col_00468778._24_8_;
    uVar8 = s_coeffs0_rows____1____coeffs0_col_00468778._16_8_;
    uVar7 = s_coeffs0_rows____1____coeffs0_col_00468778._8_8_;
    uVar6 = s_coeffs0_rows____1____coeffs0_col_00468778._0_8_;
    *(undefined4 *)(pcVar17 + 0x20) = s_coeffs0_rows____1____coeffs0_col_00468778._32_4_;
    *(undefined2 *)(pcVar17 + 0x24) = uVar12;
    *(undefined8 *)pcVar17 = uVar6;
    *(undefined8 *)(pcVar17 + 8) = uVar7;
    *(undefined8 *)(pcVar17 + 0x10) = uVar8;
    *(undefined8 *)(pcVar17 + 0x18) = uVar9;
    error(-0xd7,(String *)&local_628,"double cv::solvePoly(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x800);
    String::deallocate((String *)&local_628);
  }
  iVar13 = local_604 + local_608;
  uVar5 = iVar13 - 2;
  _OutputArray::create(param_2,uVar5,1,uVar30 + 8,-1,true,0x60);
  iVar14 = _InputArray::kind((_InputArray *)param_2);
  if (iVar14 == 0x10000) {
    pMVar26 = *(Mat **)(param_2 + 8);
    local_570 = &local_5a8;
    local_568 = &local_560;
    local_5b0 = *(uint *)pMVar26;
    local_5ac = *(int *)(pMVar26 + 4);
    local_5a8 = *(int *)(pMVar26 + 8);
    local_5a4 = *(undefined4 *)(pMVar26 + 0xc);
    local_5a0 = *(undefined8 *)(pMVar26 + 0x10);
    local_598 = *(undefined8 *)(pMVar26 + 0x18);
    local_590 = *(undefined8 *)(pMVar26 + 0x20);
    local_588 = *(undefined8 *)(pMVar26 + 0x28);
    local_580 = *(undefined8 *)(pMVar26 + 0x30);
    local_578 = *(long *)(pMVar26 + 0x38);
    local_558 = 0;
    local_560 = 0;
    if (local_578 != 0) {
      piVar25 = (int *)(local_578 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar26 + 4) < 3) {
      local_560 = **(undefined8 **)(pMVar26 + 0x48);
      local_558 = (*(undefined8 **)(pMVar26 + 0x48))[1];
    }
    else {
      local_5ac = 0;
      Mat::copySize((Mat *)&local_5b0,pMVar26);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar30 = iVar13 - 1;
  uVar16 = (ulong)(int)(uVar30 * 2);
  pdVar19 = adStack_480;
  do {
    pdVar27 = pdVar19 + 2;
    pdVar19[1] = 0.0;
    *pdVar19 = 0.0;
    pdVar19 = pdVar27;
  } while (pdVar27 != (double *)&stack0x00000000);
  pdVar19 = adStack_480;
  local_488 = 0x48;
  if (0x48 < uVar16) {
    uVar18 = uVar16 << 4;
    if (0x7f0000000000000 < uVar16) {
      uVar18 = 0xffffffffffffffff;
    }
    local_490 = pdVar19;
    pdVar19 = operator_new__(uVar18);
    uVar18 = 0;
    pdVar27 = pdVar19;
    do {
      pdVar27[1] = 0.0;
      *pdVar27 = 0.0;
      uVar18 = uVar18 + 1;
      pdVar27 = pdVar27 + 2;
    } while (uVar16 != uVar18);
  }
  uVar15 = local_610 >> 3 & 0x1ff;
  iVar1 = uVar15 * 8;
  local_544 = local_5d0[1];
  local_548 = *local_5d0;
  iVar14 = (iVar1 + 6U & 0xff8) + 8;
  lVar40 = NEON_shl((long)(int)uVar5 + 1,4);
  local_500 = (long)iVar14 * (long)local_544;
  uVar29 = iVar1 + 0x42ff0006;
  local_4f8 = (long)iVar14;
  local_510 = &local_548;
  local_508 = &local_500;
  local_550 = uVar29 | 0x4000;
  pdVar27 = (double *)((long)pdVar19 + lVar40);
  local_540 = pdVar19;
  if (uVar15 != 1) {
    local_540 = pdVar27;
  }
                    /* try { // try from 002bfbb8 to 003bfbbb has its CatchHandler @ 002bfdfc */
                    /* try { // try from 002bfbc0 to 003bfca7 has its CatchHandler @ 002bf5bc */
  local_530 = (double *)((long)local_540 + local_500 * local_548);
  local_4e0 = (double *)0x0;
  local_4f0 = 0x2010000;
  local_54c = 2;
  local_520 = 0;
  local_518 = 0;
  local_538 = local_540;
  local_528 = local_530;
  local_4e8 = (Mat *)&local_550;
  local_490 = pdVar19;
  local_488 = uVar16;
  Mat::convertTo((Mat *)&local_610,(_OutputArray *)&local_4f0,uVar29 & 0xffe,1.0,0.0);
  uVar29 = uVar5;
  if ((local_610 >> 3 & 0x1ff) == 0) {
    if ((int)uVar5 < 0) goto LAB_002c03a4;
    if (((long)(((ulong)uVar30 + (long)iVar13 * 2) * 8 + -0x10) < 1 ||
         (long)((ulong)uVar30 * 0x10) <= (long)iVar13 * 0x10 + -0x10) && (9 < uVar30)) {
      uVar15 = (iVar13 - 3U >> 1) + 1;
      uVar2 = uVar15 * 2;
      uVar22 = 0;
      pdVar21 = pdVar19 + (long)iVar13 * 2 + -2;
      pdVar28 = pdVar19;
      do {
        dVar31 = pdVar21[1];
        uVar22 = uVar22 + 1;
        *pdVar28 = *pdVar21;
        pdVar28[1] = 0.0;
        pdVar28[2] = dVar31;
        pdVar28[3] = 0.0;
        pdVar28 = pdVar28 + 4;
        pdVar21 = pdVar21 + 2;
      } while (uVar22 < uVar15);
      if (uVar30 != uVar2) {
        lVar20 = (long)(int)uVar2;
        pdVar19[lVar20 * 2] = pdVar27[lVar20];
        pdVar19[lVar20 * 2 + 1] = 0.0;
      }
      goto LAB_002bfccc;
    }
    pdVar21 = pdVar19;
    pdVar28 = pdVar27;
    do {
      dVar31 = *pdVar28;
      pdVar23 = pdVar21 + 2;
      pdVar21[1] = 0.0;
      *pdVar21 = dVar31;
      pdVar21 = pdVar23;
      pdVar28 = pdVar28 + 1;
    } while (pdVar23 != pdVar19 + ((ulong)uVar5 + 1) * 2);
    if ((int)uVar5 < 2) goto LAB_002c03a4;
LAB_002bfcd4:
    pdVar21 = (double *)((long)pdVar19 + lVar40 + -0x10);
                    /* try { // try from 002bfcf0 to 003bfcf3 has its CatchHandler @ 002bfe10 */
                    /* try { // try from 002bfcf8 to 003bfd23 has its CatchHandler @ 002bf5bc */
    dVar31 = ABS(*(double *)((long)pdVar19 + lVar40 + -0x10)) + ABS(pdVar21[1]);
    while ((dVar31 <= DAT_002c04d0 && (uVar29 = uVar29 - 1, uVar29 != 1))) {
      dVar31 = ABS(pdVar21[-2]) + ABS(pdVar21[-1]);
      pdVar21 = pdVar21 + -2;
    }
  }
  else {
LAB_002bfccc:
    if (1 < (int)uVar5) goto LAB_002bfcd4;
LAB_002c03a4:
    if ((int)uVar5 < 1) goto LAB_002bfd70;
  }
  dVar34 = 0.0;
  pdVar21 = pdVar27;
  dVar31 = 1.0;
  do {
    dVar35 = dVar31 - dVar34;
    pdVar28 = pdVar21 + 2;
    *pdVar21 = dVar31;
    pdVar21[1] = dVar34;
    dVar34 = dVar34 + dVar31;
    pdVar21 = pdVar28;
    dVar31 = dVar35;
  } while (pdVar28 != pdVar27 + ((ulong)(uVar29 - 1) + 1) * 2);
LAB_002bfd70:
  lVar40 = (long)(int)uVar29;
                    /* try { // try from 002bfd74 to 003bfd77 has its CatchHandler @ 002bfde8 */
                    /* try { // try from 002bfd7c to 003bfd9f has its CatchHandler @ 002bf5bc */
  iVar14 = 0;
  if (param_3 < 1) {
    param_3 = 1000;
  }
  pdVar19 = pdVar19 + lVar40 * 2;
  do {
    dVar31 = 0.0;
    if ((int)uVar29 < 1) goto LAB_002bfee4;
    uVar30 = 0;
    pdVar21 = pdVar27;
    do {
      dVar37 = *pdVar19;
      dVar32 = pdVar19[1];
      dVar39 = *pdVar21;
      uVar15 = 0;
      dVar38 = pdVar21[1];
      pdVar23 = pdVar19;
      pdVar28 = pdVar27;
      dVar34 = dVar32;
      dVar35 = dVar37;
      do {
                    /* try { // try from 002bfdd8 to 003bfddb has its CatchHandler @ 002bfe24 */
                    /* try { // try from 002bfde0 to 003bfde3 has its CatchHandler @ 002bf5bc */
        dVar41 = dVar38 * dVar35;
        dVar35 = (dVar35 * dVar39 - dVar32 * dVar38) + pdVar23[-2];
                    /* catch() { ... } // from try @ 002bfd74 with catch @ 002bfde8 */
        dVar32 = dVar32 * dVar39 + dVar41 + pdVar23[-1];
        if (uVar15 != uVar30) {
                    /* try { // try from 002bfdf8 to 003bfdfb has its CatchHandler @ 002bf5bc */
                    /* catch() { ... } // from try @ 002bfbb8 with catch @ 002bfdfc */
          dVar41 = (dVar38 - pdVar28[1]) * dVar34;
          dVar34 = (dVar39 - *pdVar28) * dVar34 + dVar37 * (dVar38 - pdVar28[1]);
                    /* try { // try from 002bfe0c to 003bfe0f has its CatchHandler @ 002bf5bc */
          dVar37 = (dVar39 - *pdVar28) * dVar37 - dVar41;
        }
                    /* catch() { ... } // from try @ 002bfcf0 with catch @ 002bfe10 */
        uVar15 = uVar15 + 1;
        pdVar23 = pdVar23 + -2;
        pdVar28 = pdVar28 + 2;
                    /* try { // try from 002bfe20 to 003bfe23 has its CatchHandler @ 002bf5bc */
      } while (uVar15 != uVar29);
                    /* catch() { ... } // from try @ 002bfdd8 with catch @ 002bfe24 */
                    /* try { // try from 002bfe34 to 003bfe37 has its CatchHandler @ 002bf5bc */
                    /* catch() { ... } // from try @ 002bfecc with catch @ 002bfe38
                       catch() { ... } // from try @ 002bff04 with catch @ 002bfe38
                       catch() { ... } // from try @ 002c000c with catch @ 002bfe38 */
      dVar41 = 1.0 / (dVar34 * dVar34 + dVar37 * dVar37);
      dVar36 = dVar41 * (dVar37 * dVar32 - dVar34 * dVar35);
      dVar41 = dVar41 * (dVar34 * dVar32 + dVar35 * dVar37);
      dVar34 = dVar36 * dVar36 + dVar41 * dVar41;
      *pdVar21 = dVar39 - dVar41;
      pdVar21[1] = dVar38 - dVar36;
      dVar35 = SQRT(dVar34);
      if (NAN(dVar35)) {
        dVar35 = ::sqrt(dVar34);
      }
      if (dVar31 < dVar35) {
        dVar31 = dVar35;
      }
      uVar30 = uVar30 + 1;
      pdVar21 = pdVar21 + 2;
    } while (uVar30 != uVar29);
  } while ((0.0 < dVar31) && (iVar14 = iVar14 + 1, iVar14 != param_3));
  if ((local_610 >> 3 & 0x1ff) == 0) {
    pdVar19 = pdVar27 + 1;
    do {
                    /* try { // try from 002bfecc to 003bfecf has its CatchHandler @ 002bfe38 */
      if (ABS(*pdVar19) < DAT_002c04d8) {
        *pdVar19 = 0.0;
      }
      pdVar19 = pdVar19 + 2;
    } while (pdVar19 != pdVar27 + (ulong)(uVar29 - 1) * 2 + 3);
  }
LAB_002bfee4:
  if ((int)uVar29 < (int)uVar5) {
                    /* try { // try from 002bfefc to 003bfeff has its CatchHandler @ 002bfffc */
                    /* try { // try from 002bff04 to 003bffe7 has its CatchHandler @ 002bfe38 */
    pdVar19 = pdVar27 + lVar40 * 2 + 2;
    do {
      pdVar21 = pdVar19 + 2;
      *pdVar19 = pdVar19[-2];
      pdVar19[1] = pdVar19[-1];
      pdVar19 = pdVar21;
    } while (pdVar21 != pdVar27 + (lVar40 + 2 + (ulong)((iVar13 + -3) - uVar29)) * 2);
  }
  local_4b0 = &local_4e8;
  local_4a8 = local_4a0;
  local_4e8 = *(Mat **)local_570;
  local_4a0[0] = -(ulong)((uint)local_570[1] >> 0x1f) & 0xfffffff000000000 |
                 (ulong)(uint)local_570[1] << 4;
  local_4d0 = (double *)((long)pdVar27 + local_4a0[0] * (long)*local_570);
  local_4a0[1] = 0x10;
  local_618 = 0;
  local_614 = 0;
  local_628 = CONCAT44(local_628._4_4_,0x2010000);
  local_4ec = 2;
  local_4c0 = 0;
  local_4b8 = 0;
  local_4f0 = 0x42ff400e;
  local_620 = (Mat *)&local_5b0;
  local_4e0 = pdVar27;
  local_4d8 = pdVar27;
  local_4c8 = local_4d0;
  Mat::convertTo((Mat *)&local_4f0,(_OutputArray *)&local_628,local_5b0 & 0xfff,1.0,0.0);
  if (local_4b8 != 0) {
    piVar25 = (int *)(local_4b8 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_4f0);
    }
  }
  local_4b8 = 0;
  local_4e0 = (double *)0x0;
  local_4c8 = (double *)0x0;
  local_4d0 = (double *)0x0;
  local_4d8 = (double *)0x0;
  if (0 < local_4ec) {
                    /* catch() { ... } // from try @ 002bfefc with catch @ 002bfffc */
    iVar13 = 0;
    ppMVar24 = local_4b0;
    do {
      *(undefined4 *)ppMVar24 = 0;
      iVar13 = iVar13 + 1;
                    /* try { // try from 002c000c to 003c000f has its CatchHandler @ 002bfe38 */
      ppMVar24 = (Mat **)((long)ppMVar24 + 4);
    } while (iVar13 < local_4ec);
  }
  if (local_4a8 != local_4a0) {
    fastFree(local_4a8);
  }
  if (local_518 != 0) {
    piVar25 = (int *)(local_518 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_550);
    }
  }
  local_518 = 0;
  local_540 = (double *)0x0;
  local_528 = (double *)0x0;
  local_530 = (double *)0x0;
  local_538 = (double *)0x0;
  if (0 < local_54c) {
    iVar13 = 0;
    piVar25 = local_510;
    do {
      *piVar25 = 0;
      iVar13 = iVar13 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar13 < local_54c);
  }
  if (local_508 != &local_500) {
    fastFree(local_508);
  }
  if ((local_490 != adStack_480) && (local_490 != (double *)0x0)) {
    operator_delete__(local_490);
  }
  if (local_578 != 0) {
    piVar25 = (int *)(local_578 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_5b0);
    }
  }
  local_578 = 0;
  local_5a0 = 0;
  local_588 = 0;
  local_590 = 0;
  local_598 = 0;
  if (0 < local_5ac) {
    iVar13 = 0;
    piVar25 = local_570;
    do {
      *piVar25 = 0;
      iVar13 = iVar13 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar13 < local_5ac);
  }
  if (local_568 != &local_560) {
    fastFree(local_568);
  }
  if (local_5d8 != 0) {
    piVar25 = (int *)(local_5d8 + 0x14);
    do {
      iVar13 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_610);
    }
  }
  local_5d8 = 0;
  local_600 = 0;
  local_5e8 = 0;
  local_5f0 = 0;
  local_5f8 = 0;
  if (0 < local_60c) {
    iVar13 = 0;
    piVar25 = local_5d0;
    do {
      *piVar25 = 0;
      iVar13 = iVar13 + 1;
      piVar25 = piVar25 + 1;
    } while (iVar13 < local_60c);
  }
  if (local_5c8 != &local_5c0) {
    fastFree(local_5c8);
  }
  auVar33._8_8_ = 0;
  auVar33._0_8_ = dVar31;
  return auVar33;
}


==================================================================

### FUNC 002c04e0 (848 bytes) name=cvSolveCubic

undefined4 cvSolveCubic(cv *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  undefined4 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  AutoBuffer *in_x5;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  uStack_b8 = uStack_118;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_68 = local_d8[1];
  }
  else {
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
  }
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_60;
  local_130 = (Mat *)&local_120;
  uVar7 = cv::solveCubic((_InputArray *)local_150,(_OutputArray *)&local_138);
  if (local_110 != local_b0) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_138,0x1b);
    cVar2 = s__roots_data_____roots0_data_004687a0[0x1a];
    uVar6 = s__roots_data_____roots0_data_004687a0._24_2_;
    uVar5 = s__roots_data_____roots0_data_004687a0._8_8_;
    uVar4 = s__roots_data_____roots0_data_004687a0._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s__roots_data_____roots0_data_004687a0._16_8_;
    *(undefined2 *)(pcVar8 + 0x18) = uVar6;
    pcVar8[0x1a] = cVar2;
    *(undefined8 *)pcVar8 = uVar4;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_138,"int cvSolveCubic(const CvMat*, CvMat*)",
              "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x84a);
    cv::String::deallocate((String *)&local_138);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar10 = 0;
    puVar9 = local_80;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar10 = iVar10 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar10 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return uVar7;
}


==================================================================

### FUNC 002c08bc (840 bytes) name=cvSolvePoly

void cvSolvePoly(cv *param_1,cv *param_2,int param_3,undefined8 param_4,undefined8 param_5,
                AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char *pcVar6;
  undefined8 *puVar7;
  int iVar8;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  uStack_b8 = uStack_118;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_68 = local_d8[1];
  }
  else {
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
  }
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_60;
  local_130 = (Mat *)&local_120;
  cv::solvePoly((_InputArray *)local_150,(_OutputArray *)&local_138,param_3);
  if (local_110 != local_b0) {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    pcVar6 = (char *)cv::String::allocate((String *)&local_138,0x13);
    cVar2 = s__r_data_____r0_data_004687c0[0x12];
    uVar5 = s__r_data_____r0_data_004687c0._8_8_;
    uVar4 = s__r_data_____r0_data_004687c0._0_8_;
    *(undefined2 *)(pcVar6 + 0x10) = s__r_data_____r0_data_004687c0._16_2_;
    pcVar6[0x12] = cVar2;
    *(undefined8 *)pcVar6 = uVar4;
    *(undefined8 *)(pcVar6 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_138,"void cvSolvePoly(const CvMat*, CvMat*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x855);
    cv::String::deallocate((String *)&local_138);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar8 = 0;
    puVar7 = local_80;
    do {
      *(undefined4 *)puVar7 = 0;
      iVar8 = iVar8 + 1;
      puVar7 = (undefined8 *)((long)puVar7 + 4);
    } while (iVar8 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar8 = 0;
    do {
      *local_e0 = 0;
      iVar8 = iVar8 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar8 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002c0c90 (140 bytes) name=FUN_002c0c90

void FUN_002c0c90(undefined8 *param_1,ulong param_2)

{
  undefined8 *puVar1;
  ulong uVar2;
  void *pvVar3;
  
  if ((ulong)param_1[1] < param_2) {
    puVar1 = (undefined8 *)*param_1;
    if (puVar1 != param_1 + 2) {
      if (puVar1 != (void *)0x0) {
        operator_delete__(puVar1);
      }
      *param_1 = param_1 + 2;
      param_1[1] = 0x108;
    }
    if (0x108 < param_2) {
      uVar2 = param_2 << 2;
      if (0x1fc0000000000000 < param_2) {
        uVar2 = 0xffffffffffffffff;
      }
      pvVar3 = operator_new__(uVar2);
      param_1[1] = param_2;
      *param_1 = pvVar3;
    }
    return;
  }
  param_1[1] = param_2;
  return;
}


==================================================================

### FUNC 002c0d1c (2860 bytes) name=phase

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::phase(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, bool) */

void cv::phase(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,bool param_4)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  uint uVar5;
  char cVar6;
  bool bVar7;
  undefined8 uVar8;
  double dVar9;
  double dVar10;
  uint uVar11;
  double *pdVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  void *__dest;
  ulong uVar18;
  float *pfVar19;
  uint uVar20;
  undefined4 *puVar21;
  int *piVar22;
  Mat *pMVar23;
  double *pdVar24;
  uint uVar25;
  double *pdVar26;
  float *pfVar27;
  ulong uVar28;
  uint uVar29;
  long lVar30;
  float *pfVar31;
  float *pfVar32;
  ulong uVar33;
  ulong uVar34;
  ulong uVar35;
  ulong uVar36;
  undefined8 uVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  Mat *local_5f0;
  ulong local_5e8;
  double *local_5c8;
  double *local_5c0;
  double *local_5b8;
  Mat *local_5b0;
  Mat *local_5a8;
  Mat *local_5a0;
  undefined8 uStack_598;
  NAryMatIterator aNStack_590 [32];
  ulong local_570;
  int local_568;
  uint local_550;
  int local_54c;
  int local_548;
  undefined4 local_544;
  undefined8 local_540;
  undefined8 local_538;
  undefined8 local_530;
  undefined8 local_528;
  undefined8 local_520;
  long local_518;
  int *local_510;
  undefined8 *local_508;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined4 local_4f0;
  int local_4ec;
  undefined4 local_4e8;
  undefined4 local_4e4;
  undefined8 local_4e0;
  undefined8 local_4d8;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  long local_4b8;
  undefined4 *local_4b0;
  undefined8 *local_4a8;
  undefined8 local_4a0;
  undefined8 local_498;
  int local_490;
  int local_48c;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  undefined4 *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  undefined8 local_430;
  undefined8 local_428;
  float afStack_420 [264];
  
  iVar13 = _InputArray::type(param_1,-1);
  iVar14 = _InputArray::depth(param_1,-1);
  iVar15 = _InputArray::channels(param_1,-1);
  _InputArray::size((int)param_1);
  _InputArray::size((int)param_2);
  if ((((local_490 != (int)local_430) || (local_48c != local_430._4_4_)) ||
      (iVar16 = _InputArray::type(param_2,-1), iVar13 != iVar16)) || (1 < iVar14 - 5U)) {
    local_430 = (float *)0x0;
    local_428 = 0;
    __dest = (void *)String::allocate((String *)&local_430,0x59);
    memcpy(__dest,&DAT_00468440,0x59);
    error(-0xd7,(String *)&local_430,
          "void cv::phase(cv::InputArray, cv::InputArray, cv::OutputArray, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0xd0);
    String::deallocate((String *)&local_430);
  }
  iVar16 = _InputArray::kind(param_1);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_1 + 8);
    local_510 = &local_548;
    local_508 = &local_500;
    local_550 = *(uint *)pMVar23;
    local_54c = *(int *)(pMVar23 + 4);
    local_548 = *(int *)(pMVar23 + 8);
    local_544 = *(undefined4 *)(pMVar23 + 0xc);
    local_540 = *(undefined8 *)(pMVar23 + 0x10);
    local_538 = *(undefined8 *)(pMVar23 + 0x18);
    local_530 = *(undefined8 *)(pMVar23 + 0x20);
    local_528 = *(undefined8 *)(pMVar23 + 0x28);
    local_520 = *(undefined8 *)(pMVar23 + 0x30);
    local_518 = *(long *)(pMVar23 + 0x38);
    local_4f8 = 0;
    local_500 = 0;
    if (local_518 != 0) {
      piVar22 = (int *)(local_518 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar7) {
          *piVar22 = *piVar22 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_500 = **(undefined8 **)(pMVar23 + 0x48);
      local_4f8 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_54c = 0;
      Mat::copySize((Mat *)&local_550,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar16 = _InputArray::kind(param_2);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_2 + 8);
    local_4b0 = &local_4e8;
    local_4a8 = &local_4a0;
    local_4f0 = *(undefined4 *)pMVar23;
    local_4ec = *(int *)(pMVar23 + 4);
    local_4e8 = *(undefined4 *)(pMVar23 + 8);
    local_4e4 = *(undefined4 *)(pMVar23 + 0xc);
    local_4e0 = *(undefined8 *)(pMVar23 + 0x10);
    local_4d8 = *(undefined8 *)(pMVar23 + 0x18);
    local_4d0 = *(undefined8 *)(pMVar23 + 0x20);
    local_4c8 = *(undefined8 *)(pMVar23 + 0x28);
    local_4c0 = *(undefined8 *)(pMVar23 + 0x30);
    local_4b8 = *(long *)(pMVar23 + 0x38);
    local_498 = 0;
    local_4a0 = 0;
    if (local_4b8 != 0) {
      piVar22 = (int *)(local_4b8 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar7) {
          *piVar22 = *piVar22 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (2 < *(int *)(pMVar23 + 4)) {
      local_4ec = 0;
      Mat::copySize((Mat *)&local_4f0,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_5f0 = (Mat *)&local_4f0;
  _OutputArray::create(param_3,local_54c,local_510,iVar13,-1,false,0);
  iVar13 = _InputArray::kind((_InputArray *)param_3);
  if (iVar13 == 0x10000) {
    pMVar23 = *(Mat **)(param_3 + 8);
    local_490 = *(int *)pMVar23;
    local_450 = &local_488;
    local_480 = *(undefined8 *)(pMVar23 + 0x10);
    local_448 = &local_440;
    local_48c = *(int *)(pMVar23 + 4);
    local_488 = *(undefined4 *)(pMVar23 + 8);
    local_484 = *(undefined4 *)(pMVar23 + 0xc);
    local_478 = *(undefined8 *)(pMVar23 + 0x18);
    local_470 = *(undefined8 *)(pMVar23 + 0x20);
    local_468 = *(undefined8 *)(pMVar23 + 0x28);
    local_460 = *(undefined8 *)(pMVar23 + 0x30);
    local_458 = *(long *)(pMVar23 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar22 = (int *)(local_458 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar7) {
          *piVar22 = *piVar22 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_440 = **(undefined8 **)(pMVar23 + 0x48);
      local_438 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  uStack_598 = 0;
  local_5a8 = local_5f0;
  local_5b0 = (Mat *)&local_550;
  local_5a0 = (Mat *)&local_490;
  NAryMatIterator::NAryMatIterator(aNStack_590,&local_5b0,(uchar **)&local_5c8,-1);
  uVar11 = local_550 & 7;
  local_428 = 0x108;
  local_430 = afStack_420;
  uVar5 = iVar15 * local_568;
  uVar36 = (ulong)uVar5;
  uVar35 = uVar36;
  if (iVar14 == 6) {
    iVar13 = 0;
    if (iVar15 != 0) {
      iVar13 = (iVar15 + 0x3ff) / iVar15;
    }
    if (iVar15 * iVar13 < (int)uVar5) {
      uVar35 = (ulong)(uint)(iVar15 * iVar13);
    }
    FUN_002c0c90((String *)&local_430,(long)((int)uVar35 << 1));
    pfVar32 = local_430 + (int)uVar35;
    pfVar31 = local_430;
  }
  else {
    pfVar32 = (float *)0x0;
    pfVar31 = (float *)0x0;
  }
  local_5e8 = 0;
  iVar13 = (int)uVar35;
  uVar3 = -((uint)((ulong)pfVar31 >> 2) & 3) & 3;
  if (local_570 != 0) {
    do {
      uVar33 = uVar35;
      uVar34 = uVar36;
      if (0 < (int)uVar5) {
        do {
          pdVar12 = local_5b8;
          uVar18 = uVar34;
          if (iVar13 < (int)uVar34) {
            uVar18 = uVar35;
          }
          uVar29 = (uint)uVar18;
          if (iVar14 == 5) {
            FUN_003ca370(local_5c0,local_5c8,local_5b8,uVar18,param_4);
          }
          else {
            if (0 < (int)uVar29) {
              if ((uVar29 < 7) || (pfVar31 < pfVar32 + 4 && pfVar32 < pfVar31 + 4)) {
                lVar30 = 0;
                do {
                  dVar9 = local_5c0[lVar30];
                  pfVar31[lVar30] = (float)local_5c8[lVar30];
                  pfVar32[lVar30] = (float)dVar9;
                  lVar30 = lVar30 + 1;
                } while ((int)lVar30 < (int)uVar29);
              }
              else {
                uVar4 = uVar18;
                if (uVar3 < uVar29) {
                  uVar4 = (ulong)uVar3;
                }
                iVar15 = (int)uVar4;
                uVar28 = uVar4;
                if (iVar15 != 0) {
                  dVar9 = *local_5c0;
                  *pfVar31 = (float)*local_5c8;
                  *pfVar32 = (float)dVar9;
                  if (iVar15 != 1) {
                    dVar9 = local_5c0[1];
                    pfVar31[1] = (float)local_5c8[1];
                    pfVar32[1] = (float)dVar9;
                    if (iVar15 == 3) {
                      dVar9 = local_5c0[2];
                      pfVar31[2] = (float)local_5c8[2];
                      pfVar32[2] = (float)dVar9;
                    }
                    else {
                      uVar28 = 2;
                    }
                  }
                }
                uVar1 = ((uVar29 - iVar15) - 4 >> 2) + 1;
                uVar20 = 0;
                iVar16 = uVar1 * 4;
                pfVar19 = pfVar32 + uVar4;
                pdVar24 = local_5c0 + uVar4;
                pdVar26 = local_5c8 + uVar4;
                pfVar27 = pfVar31 + uVar4;
                do {
                  uVar20 = uVar20 + 1;
                  dVar39 = pdVar26[1];
                  dVar10 = *pdVar26;
                  dVar38 = pdVar24[1];
                  dVar9 = *pdVar24;
                  dVar41 = pdVar24[3];
                  dVar40 = pdVar24[2];
                  *(ulong *)(pfVar27 + 2) = CONCAT44((float)pdVar26[3],(float)pdVar26[2]);
                  *(ulong *)pfVar27 = CONCAT44((float)dVar39,(float)dVar10);
                  *(ulong *)(pfVar19 + 2) = CONCAT44((float)dVar41,(float)dVar40);
                  *(ulong *)pfVar19 = CONCAT44((float)dVar38,(float)dVar9);
                  pfVar19 = pfVar19 + 4;
                  pdVar24 = pdVar24 + 4;
                  pdVar26 = pdVar26 + 4;
                  pfVar27 = pfVar27 + 4;
                } while (uVar20 < uVar1);
                iVar2 = (int)uVar28 + iVar16;
                if (uVar29 - iVar15 != iVar16) {
                  iVar15 = iVar2 + 1;
                  dVar9 = local_5c0[iVar2];
                  pfVar31[iVar2] = (float)local_5c8[iVar2];
                  pfVar32[iVar2] = (float)dVar9;
                  if (iVar15 < (int)uVar29) {
                    iVar2 = iVar2 + 2;
                    dVar9 = local_5c0[iVar15];
                    pfVar31[iVar15] = (float)local_5c8[iVar15];
                    pfVar32[iVar15] = (float)dVar9;
                    if (iVar2 < (int)uVar29) {
                      dVar9 = local_5c0[iVar2];
                      pfVar31[iVar2] = (float)local_5c8[iVar2];
                      pfVar32[iVar2] = (float)dVar9;
                    }
                  }
                }
              }
            }
            FUN_003ca370(pfVar32,pfVar31,pfVar31,uVar18,param_4);
            if (0 < (int)uVar29) {
              uVar1 = (uint)((ulong)pdVar12 >> 3) & 1;
              if (uVar29 < uVar1) {
                uVar1 = uVar29;
              }
              if ((int)uVar29 < 5) {
                *pdVar12 = (double)*pfVar31;
                if (uVar29 == 1) {
LAB_002c12ec:
                  uVar17 = (uint)uVar18;
                  uVar20 = uVar17;
                }
                else {
LAB_002c0fb8:
                  uVar17 = (uint)uVar18;
                  pdVar12[1] = (double)pfVar31[1];
                  if (uVar17 == 2) goto LAB_002c12ec;
                  pdVar12[2] = (double)pfVar31[2];
                  if (uVar17 == 4) {
                    pdVar12[3] = (double)pfVar31[3];
                    uVar20 = 4;
                  }
                  else {
                    uVar20 = 3;
                  }
                }
                if (uVar29 == uVar17) goto LAB_002c10a8;
              }
              else {
                uVar20 = 0;
                uVar17 = 0;
                if (uVar1 != 0) {
                  *pdVar12 = (double)*pfVar31;
                  uVar18 = (ulong)uVar1;
                  if (uVar1 != 1) goto LAB_002c0fb8;
                  goto LAB_002c12ec;
                }
              }
              uVar1 = ((uVar29 - uVar17) - 4 >> 2) + 1;
              iVar15 = uVar1 * 4;
              if (2 < (uVar29 - 1) - uVar17) {
                uVar25 = 0;
                pfVar19 = pfVar31 + uVar17;
                pdVar24 = pdVar12 + uVar17;
                do {
                  uVar37 = *(undefined8 *)(pfVar19 + 2);
                  uVar8 = *(undefined8 *)pfVar19;
                  uVar25 = uVar25 + 1;
                  pdVar24[1] = (double)(float)((ulong)uVar8 >> 0x20);
                  *pdVar24 = (double)(float)uVar8;
                  pdVar24[3] = (double)(float)((ulong)uVar37 >> 0x20);
                  pdVar24[2] = (double)(float)uVar37;
                  pfVar19 = pfVar19 + 4;
                  pdVar24 = pdVar24 + 4;
                } while (uVar25 < uVar1);
                uVar20 = uVar20 + iVar15;
                if (iVar15 == uVar29 - uVar17) goto LAB_002c10a8;
              }
              iVar15 = uVar20 + 1;
              pdVar12[(int)uVar20] = (double)pfVar31[(int)uVar20];
              if (iVar15 < (int)uVar29) {
                iVar16 = uVar20 + 2;
                pdVar12[iVar15] = (double)pfVar31[iVar15];
                if (iVar16 < (int)uVar29) {
                  pdVar12[iVar16] = (double)pfVar31[iVar16];
                }
              }
            }
          }
LAB_002c10a8:
          iVar15 = (int)uVar33;
          lVar30 = (long)(int)uVar29 * (0x88442211UL >> (uVar11 << 2) & 0xf);
          local_5c8 = (double *)((long)local_5c8 + lVar30);
          local_5c0 = (double *)((long)local_5c0 + lVar30);
          local_5b8 = (double *)((long)local_5b8 + lVar30);
          uVar33 = (ulong)(uint)(iVar15 + iVar13);
          uVar34 = (ulong)(uint)((int)uVar34 - iVar13);
        } while (iVar15 < (int)uVar5);
      }
      local_5e8 = local_5e8 + 1;
      NAryMatIterator::operator++(aNStack_590);
    } while (local_5e8 < local_570);
  }
  if ((local_430 != afStack_420) && (local_430 != (float *)0x0)) {
    operator_delete__(local_430);
  }
  if (local_458 != 0) {
    piVar22 = (int *)(local_458 + 0x14);
    do {
      iVar13 = *piVar22;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar7) {
        *piVar22 = iVar13 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_490);
    }
  }
  local_458 = 0;
  local_480 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  if (0 < local_48c) {
    iVar13 = 0;
    puVar21 = local_450;
    do {
      *puVar21 = 0;
      iVar13 = iVar13 + 1;
      puVar21 = puVar21 + 1;
    } while (iVar13 < local_48c);
  }
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  if (local_4b8 != 0) {
    piVar22 = (int *)(local_4b8 + 0x14);
    do {
      iVar13 = *piVar22;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar7) {
        *piVar22 = iVar13 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate(local_5f0);
    }
  }
  local_4b8 = 0;
  local_4e0 = 0;
  local_4c8 = 0;
  local_4d0 = 0;
  local_4d8 = 0;
  if (0 < local_4ec) {
    iVar13 = 0;
    puVar21 = local_4b0;
    do {
      iVar13 = iVar13 + 1;
      *puVar21 = 0;
      puVar21 = puVar21 + 1;
    } while (iVar13 < local_4ec);
  }
  if (local_4a8 != &local_4a0) {
    fastFree(local_4a8);
  }
  if (local_518 != 0) {
    piVar22 = (int *)(local_518 + 0x14);
    do {
      iVar13 = *piVar22;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar7) {
        *piVar22 = iVar13 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_550);
    }
  }
  local_518 = 0;
  local_540 = 0;
  local_528 = 0;
  local_530 = 0;
  local_538 = 0;
  if (0 < local_54c) {
    iVar13 = 0;
    piVar22 = local_510;
    do {
      *piVar22 = 0;
      iVar13 = iVar13 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar13 < local_54c);
  }
  if (local_508 != &local_500) {
    fastFree(local_508);
  }
  return;
}


==================================================================

### FUNC 002c1900 (3448 bytes) name=cartToPolar

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::cartToPolar(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&,
   cv::_OutputArray const&, bool) */

void cv::cartToPolar(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,
                    _OutputArray *param_4,bool param_5)

{
  bool bVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  char cVar9;
  double dVar10;
  undefined8 uVar11;
  double dVar12;
  uint uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined4 uVar20;
  double *pdVar21;
  double *pdVar22;
  int iVar23;
  uint uVar24;
  undefined8 *puVar25;
  float *pfVar26;
  int *piVar27;
  uint uVar28;
  uint uVar29;
  undefined4 *puVar30;
  int *piVar31;
  Mat *pMVar32;
  double *pdVar33;
  double *pdVar34;
  double *pdVar35;
  uint uVar36;
  float *pfVar37;
  long lVar38;
  float *pfVar39;
  float *pfVar40;
  uint uVar41;
  double dVar42;
  undefined8 uVar43;
  double dVar44;
  double dVar45;
  double dVar46;
  Mat *local_678;
  Mat *local_670;
  Mat *local_668;
  Mat *local_660;
  ulong local_658;
  double *local_638;
  double *local_630;
  long local_628;
  double *local_620;
  Mat *local_618;
  Mat *local_610;
  Mat *local_608;
  Mat *local_600;
  undefined8 local_5f8;
  NAryMatIterator aNStack_5f0 [32];
  ulong local_5d0;
  int local_5c8;
  uint local_5b0;
  int local_5ac;
  int local_5a8;
  undefined4 local_5a4;
  undefined8 local_5a0;
  undefined8 local_598;
  undefined8 local_590;
  undefined8 local_588;
  undefined8 local_580;
  long local_578;
  int *local_570;
  undefined8 *local_568;
  undefined8 local_560;
  undefined8 local_558;
  uint local_550;
  int local_54c;
  int local_548;
  undefined4 local_544;
  undefined8 local_540;
  undefined8 local_538;
  undefined8 local_530;
  undefined8 local_528;
  undefined8 local_520;
  long local_518;
  int *local_510;
  undefined8 *local_508;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined4 local_4f0;
  int local_4ec;
  undefined4 local_4e8;
  undefined4 local_4e4;
  undefined8 local_4e0;
  undefined8 local_4d8;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  long local_4b8;
  undefined4 *local_4b0;
  undefined8 *local_4a8;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined4 local_490;
  int local_48c;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  undefined4 *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  float *local_430;
  undefined8 local_428;
  float afStack_420 [264];
  
  iVar23 = _InputArray::kind(param_1);
  if (iVar23 == 0x10000) {
    pMVar32 = *(Mat **)(param_1 + 8);
    local_570 = &local_5a8;
    local_568 = &local_560;
    local_5b0 = *(uint *)pMVar32;
    local_5ac = *(int *)(pMVar32 + 4);
    local_5a8 = *(int *)(pMVar32 + 8);
    local_5a4 = *(undefined4 *)(pMVar32 + 0xc);
    local_5a0 = *(undefined8 *)(pMVar32 + 0x10);
    local_598 = *(undefined8 *)(pMVar32 + 0x18);
    local_590 = *(undefined8 *)(pMVar32 + 0x20);
    local_588 = *(undefined8 *)(pMVar32 + 0x28);
    local_580 = *(undefined8 *)(pMVar32 + 0x30);
    local_578 = *(long *)(pMVar32 + 0x38);
    local_558 = 0;
    local_560 = 0;
    if (local_578 != 0) {
      piVar31 = (int *)(local_578 + 0x14);
      do {
        cVar9 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
        if (bVar1) {
          *piVar31 = *piVar31 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_5ac = 0;
      Mat::copySize((Mat *)&local_5b0,pMVar32);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_678 = (Mat *)&local_5b0;
  iVar23 = _InputArray::kind(param_2);
  if (iVar23 == 0x10000) {
    pMVar32 = *(Mat **)(param_2 + 8);
    local_510 = &local_548;
    local_508 = &local_500;
    local_550 = *(uint *)pMVar32;
    local_54c = *(int *)(pMVar32 + 4);
    local_548 = *(int *)(pMVar32 + 8);
    local_544 = *(undefined4 *)(pMVar32 + 0xc);
    local_540 = *(undefined8 *)(pMVar32 + 0x10);
    local_538 = *(undefined8 *)(pMVar32 + 0x18);
    local_530 = *(undefined8 *)(pMVar32 + 0x20);
    local_528 = *(undefined8 *)(pMVar32 + 0x28);
    local_520 = *(undefined8 *)(pMVar32 + 0x30);
    local_518 = *(long *)(pMVar32 + 0x38);
    local_4f8 = 0;
    local_500 = 0;
    if (local_518 != 0) {
      piVar31 = (int *)(local_518 + 0x14);
      do {
        cVar9 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
        if (bVar1) {
          *piVar31 = *piVar31 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_54c = 0;
      Mat::copySize((Mat *)&local_550,pMVar32);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_670 = (Mat *)&local_550;
  iVar23 = local_570[-1];
  uVar6 = local_5b0 >> 3 & 0x1ff;
  uVar4 = local_5b0 & 0xfff;
  uVar5 = local_5b0 & 7;
  uVar2 = uVar6 + 1;
  if (iVar23 == local_510[-1]) {
    if (iVar23 == 2) {
      if ((*local_570 == *local_510) && (local_570[1] == local_510[1])) goto LAB_002c2610;
    }
    else if (iVar23 < 1) {
LAB_002c2610:
      if ((uVar4 == (local_550 & 0xfff)) && (uVar5 - 5 < 2)) goto LAB_002c1a58;
    }
    else if (*local_570 == *local_510) {
      piVar31 = local_570;
      piVar27 = local_510;
      do {
        piVar27 = piVar27 + 1;
        if (piVar31 == local_570 + (iVar23 - 1)) goto LAB_002c2610;
        piVar31 = piVar31 + 1;
      } while (*piVar31 == *piVar27);
    }
  }
  local_430 = (float *)0x0;
  local_428 = 0;
  puVar25 = (undefined8 *)String::allocate((String *)&local_430,0x4c);
  uVar20 = DAT_00468820;
  uVar19 = DAT_00468810;
  uVar18 = DAT_00468808;
  uVar17 = DAT_00468800;
  uVar16 = DAT_004687f8;
  uVar15 = DAT_004687f0;
  uVar14 = DAT_004687e8;
  uVar43 = DAT_004687e0;
  uVar11 = _DAT_004687d8;
  puVar25[8] = DAT_00468818;
  *(undefined4 *)(puVar25 + 9) = uVar20;
  *puVar25 = uVar11;
  puVar25[1] = uVar43;
  puVar25[2] = uVar14;
  puVar25[3] = uVar15;
  puVar25[4] = uVar16;
  puVar25[5] = uVar17;
  puVar25[6] = uVar18;
  puVar25[7] = uVar19;
  error(-0xd7,(String *)&local_430,
        "void cv::cartToPolar(cv::InputArray, cv::InputArray, cv::OutputArray, cv::OutputArray, bool)"
        ,"/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x15b);
  String::deallocate((String *)&local_430);
LAB_002c1a58:
  _OutputArray::create(param_3,local_5ac,local_570,uVar4,-1,false,0);
  _OutputArray::create(param_4,local_5ac,local_570,uVar4,-1,false,0);
  iVar23 = _InputArray::kind((_InputArray *)param_3);
  if (iVar23 == 0x10000) {
    pMVar32 = *(Mat **)(param_3 + 8);
    local_4b0 = &local_4e8;
    local_4a8 = &local_4a0;
    local_4f0 = *(undefined4 *)pMVar32;
    local_4ec = *(int *)(pMVar32 + 4);
    local_4e8 = *(undefined4 *)(pMVar32 + 8);
    local_4e4 = *(undefined4 *)(pMVar32 + 0xc);
    local_4e0 = *(undefined8 *)(pMVar32 + 0x10);
    local_4d8 = *(undefined8 *)(pMVar32 + 0x18);
    local_4d0 = *(undefined8 *)(pMVar32 + 0x20);
    local_4c8 = *(undefined8 *)(pMVar32 + 0x28);
    local_4c0 = *(undefined8 *)(pMVar32 + 0x30);
    local_4b8 = *(long *)(pMVar32 + 0x38);
    local_498 = 0;
    local_4a0 = 0;
    if (local_4b8 != 0) {
      piVar31 = (int *)(local_4b8 + 0x14);
      do {
        cVar9 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
        if (bVar1) {
          *piVar31 = *piVar31 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_4ec = 0;
      Mat::copySize((Mat *)&local_4f0,pMVar32);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_660 = (Mat *)&local_4f0;
  iVar23 = _InputArray::kind((_InputArray *)param_4);
  if (iVar23 == 0x10000) {
    pMVar32 = *(Mat **)(param_4 + 8);
    local_450 = &local_488;
    local_448 = &local_440;
    local_490 = *(undefined4 *)pMVar32;
    local_48c = *(int *)(pMVar32 + 4);
    local_488 = *(undefined4 *)(pMVar32 + 8);
    local_484 = *(undefined4 *)(pMVar32 + 0xc);
    local_480 = *(undefined8 *)(pMVar32 + 0x10);
    local_478 = *(undefined8 *)(pMVar32 + 0x18);
    local_470 = *(undefined8 *)(pMVar32 + 0x20);
    local_468 = *(undefined8 *)(pMVar32 + 0x28);
    local_460 = *(undefined8 *)(pMVar32 + 0x30);
    local_458 = *(long *)(pMVar32 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar31 = (int *)(local_458 + 0x14);
      do {
        cVar9 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
        if (bVar1) {
          *piVar31 = *piVar31 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar32);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  local_668 = (Mat *)&local_490;
  local_610 = local_670;
  local_608 = local_660;
  local_5f8 = 0;
  local_618 = local_678;
  local_600 = local_668;
  NAryMatIterator::NAryMatIterator(aNStack_5f0,&local_618,(uchar **)&local_638,-1);
  uVar4 = 0;
  if (uVar2 != 0) {
    uVar4 = (uVar6 + 0x400) / uVar2;
  }
  uVar13 = local_5b0 & 7;
  local_430 = afStack_420;
  uVar8 = uVar2 * local_5c8;
  local_428 = 0x108;
  uVar6 = uVar8;
  if ((int)(uVar4 * uVar2) < (int)uVar8) {
    uVar6 = uVar4 * uVar2;
  }
  if (uVar5 == 6) {
    FUN_002c0c90(&local_430,(long)(int)(uVar6 << 1));
    pfVar40 = local_430 + (int)uVar6;
    pfVar39 = local_430;
  }
  else {
    pfVar40 = (float *)0x0;
    pfVar39 = (float *)0x0;
  }
  local_658 = 0;
  uVar2 = -((uint)((ulong)pfVar39 >> 2) & 3) & 3;
  if (local_5d0 != 0) {
    do {
      uVar41 = uVar8;
      uVar4 = uVar6;
      if (0 < (int)uVar8) {
        do {
          pdVar22 = local_620;
          pdVar21 = local_630;
          pdVar34 = local_638;
          uVar7 = uVar41;
          if ((int)uVar6 < (int)uVar41) {
            uVar7 = uVar6;
          }
          if (uVar5 == 5) {
            FUN_003ca620();
            FUN_003ca370(pdVar21,pdVar34,pdVar22,uVar7,param_5);
          }
          else {
            FUN_003ca790(local_638,local_630,local_628,uVar7);
            if (0 < (int)uVar7) {
              if ((uVar7 < 7) || (pfVar39 < pfVar40 + 4 && pfVar40 < pfVar39 + 4)) {
                lVar38 = 0;
                do {
                  dVar10 = pdVar21[lVar38];
                  pfVar39[lVar38] = (float)pdVar34[lVar38];
                  pfVar40[lVar38] = (float)dVar10;
                  lVar38 = lVar38 + 1;
                } while ((int)lVar38 < (int)uVar7);
              }
              else {
                uVar24 = uVar2;
                if (uVar7 < uVar2) {
                  uVar24 = uVar7;
                }
                uVar28 = uVar24;
                if (uVar24 != 0) {
                  dVar10 = *pdVar21;
                  *pfVar39 = (float)*pdVar34;
                  *pfVar40 = (float)dVar10;
                  if (uVar24 != 1) {
                    dVar10 = pdVar21[1];
                    pfVar39[1] = (float)pdVar34[1];
                    pfVar40[1] = (float)dVar10;
                    if (uVar24 == 3) {
                      dVar10 = pdVar21[2];
                      pfVar39[2] = (float)pdVar34[2];
                      pfVar40[2] = (float)dVar10;
                    }
                    else {
                      uVar28 = 2;
                    }
                  }
                }
                uVar29 = ((uVar7 - uVar24) - 4 >> 2) + 1;
                uVar36 = 0;
                iVar23 = uVar29 * 4;
                pfVar26 = pfVar39 + uVar24;
                pdVar33 = pdVar34 + uVar24;
                pdVar35 = pdVar21 + uVar24;
                pfVar37 = pfVar40 + uVar24;
                do {
                  uVar36 = uVar36 + 1;
                  dVar44 = pdVar33[1];
                  dVar12 = *pdVar33;
                  dVar42 = pdVar35[1];
                  dVar10 = *pdVar35;
                  dVar46 = pdVar35[3];
                  dVar45 = pdVar35[2];
                  *(ulong *)(pfVar26 + 2) = CONCAT44((float)pdVar33[3],(float)pdVar33[2]);
                  *(ulong *)pfVar26 = CONCAT44((float)dVar44,(float)dVar12);
                  *(ulong *)(pfVar37 + 2) = CONCAT44((float)dVar46,(float)dVar45);
                  *(ulong *)pfVar37 = CONCAT44((float)dVar42,(float)dVar10);
                  pfVar26 = pfVar26 + 4;
                  pdVar33 = pdVar33 + 4;
                  pdVar35 = pdVar35 + 4;
                  pfVar37 = pfVar37 + 4;
                } while (uVar36 < uVar29);
                iVar3 = iVar23 + uVar28;
                if (iVar23 != uVar7 - uVar24) {
                  iVar23 = iVar3 + 1;
                  dVar10 = pdVar21[iVar3];
                  pfVar39[iVar3] = (float)pdVar34[iVar3];
                  pfVar40[iVar3] = (float)dVar10;
                  if (iVar23 < (int)uVar7) {
                    iVar3 = iVar3 + 2;
                    dVar10 = pdVar21[iVar23];
                    pfVar39[iVar23] = (float)pdVar34[iVar23];
                    pfVar40[iVar23] = (float)dVar10;
                    if (iVar3 < (int)uVar7) {
                      dVar10 = pdVar21[iVar3];
                      pfVar39[iVar3] = (float)pdVar34[iVar3];
                      pfVar40[iVar3] = (float)dVar10;
                    }
                  }
                }
              }
            }
            FUN_003ca370(pfVar40,pfVar39,pfVar39,uVar7,param_5);
            if (0 < (int)uVar7) {
              uVar24 = (uint)((ulong)pdVar22 >> 3) & 1;
              if (uVar7 < uVar24) {
                uVar24 = uVar7;
              }
              uVar28 = uVar7;
              if (((int)uVar7 < 5) || (uVar29 = 0, uVar28 = uVar24, uVar24 != 0)) {
                uVar24 = uVar28;
                *pdVar22 = (double)*pfVar39;
                uVar29 = uVar24;
                if ((uVar24 != 1) && (pdVar22[1] = (double)pfVar39[1], uVar24 != 2)) {
                  pdVar22[2] = (double)pfVar39[2];
                  if (uVar24 == 4) {
                    pdVar22[3] = (double)pfVar39[3];
                  }
                  else {
                    uVar29 = 3;
                  }
                }
                if (uVar24 == uVar7) goto LAB_002c1ee4;
              }
              uVar28 = ((uVar7 - uVar24) - 4 >> 2) + 1;
              iVar23 = uVar28 * 4;
              if (2 < (uVar7 - 1) - uVar24) {
                uVar36 = 0;
                pfVar26 = pfVar39 + uVar24;
                pdVar34 = pdVar22 + uVar24;
                do {
                  uVar43 = *(undefined8 *)(pfVar26 + 2);
                  uVar11 = *(undefined8 *)pfVar26;
                  uVar36 = uVar36 + 1;
                  pdVar34[1] = (double)(float)((ulong)uVar11 >> 0x20);
                  *pdVar34 = (double)(float)uVar11;
                  pdVar34[3] = (double)(float)((ulong)uVar43 >> 0x20);
                  pdVar34[2] = (double)(float)uVar43;
                  pfVar26 = pfVar26 + 4;
                  pdVar34 = pdVar34 + 4;
                } while (uVar36 < uVar28);
                uVar29 = uVar29 + iVar23;
                if (iVar23 == uVar7 - uVar24) goto LAB_002c1ee4;
              }
              iVar23 = uVar29 + 1;
              pdVar22[(int)uVar29] = (double)pfVar39[(int)uVar29];
              if (iVar23 < (int)uVar7) {
                iVar3 = uVar29 + 2;
                pdVar22[iVar23] = (double)pfVar39[iVar23];
                if (iVar3 < (int)uVar7) {
                  pdVar22[iVar3] = (double)pfVar39[iVar3];
                }
              }
            }
          }
LAB_002c1ee4:
          lVar38 = (long)(int)uVar7 * (0x88442211UL >> (uVar13 << 2) & 0xf);
          local_638 = (double *)((long)local_638 + lVar38);
          local_630 = (double *)((long)local_630 + lVar38);
          local_628 = local_628 + lVar38;
          local_620 = (double *)((long)local_620 + lVar38);
          bVar1 = (int)uVar4 < (int)uVar8;
          uVar41 = uVar41 - uVar6;
          uVar4 = uVar4 + uVar6;
        } while (bVar1);
      }
      local_658 = local_658 + 1;
      NAryMatIterator::operator++(aNStack_5f0);
    } while (local_658 < local_5d0);
  }
  if ((local_430 != afStack_420) && (local_430 != (float *)0x0)) {
    operator_delete__(local_430);
  }
  if (local_458 != 0) {
    piVar31 = (int *)(local_458 + 0x14);
    do {
      iVar23 = *piVar31;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
      if (bVar1) {
        *piVar31 = iVar23 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_668);
    }
  }
  local_458 = 0;
  local_480 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  if (0 < local_48c) {
    iVar23 = 0;
    puVar30 = local_450;
    do {
      iVar23 = iVar23 + 1;
      *puVar30 = 0;
      puVar30 = puVar30 + 1;
    } while (iVar23 < local_48c);
  }
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  if (local_4b8 != 0) {
    piVar31 = (int *)(local_4b8 + 0x14);
    do {
      iVar23 = *piVar31;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
      if (bVar1) {
        *piVar31 = iVar23 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_660);
    }
  }
  local_4b8 = 0;
  local_4e0 = 0;
  local_4c8 = 0;
  local_4d0 = 0;
  local_4d8 = 0;
  if (0 < local_4ec) {
    iVar23 = 0;
    puVar30 = local_4b0;
    do {
      iVar23 = iVar23 + 1;
      *puVar30 = 0;
      puVar30 = puVar30 + 1;
    } while (iVar23 < local_4ec);
  }
  if (local_4a8 != &local_4a0) {
    fastFree(local_4a8);
  }
  if (local_518 != 0) {
    piVar31 = (int *)(local_518 + 0x14);
    do {
      iVar23 = *piVar31;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
      if (bVar1) {
        *piVar31 = iVar23 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_670);
    }
  }
  local_518 = 0;
  local_540 = 0;
  local_528 = 0;
  local_530 = 0;
  local_538 = 0;
  if (0 < local_54c) {
    iVar23 = 0;
    piVar31 = local_510;
    do {
      iVar23 = iVar23 + 1;
      *piVar31 = 0;
      piVar31 = piVar31 + 1;
    } while (iVar23 < local_54c);
  }
  if (local_508 != &local_500) {
    fastFree(local_508);
  }
  if (local_578 != 0) {
    piVar31 = (int *)(local_578 + 0x14);
    do {
      iVar23 = *piVar31;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar31,0x10);
      if (bVar1) {
        *piVar31 = iVar23 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_678);
    }
  }
  local_578 = 0;
  local_5a0 = 0;
  local_588 = 0;
  local_590 = 0;
  local_598 = 0;
  if (0 < local_5ac) {
    iVar23 = 0;
    piVar31 = local_570;
    do {
      iVar23 = iVar23 + 1;
      *piVar31 = 0;
      piVar31 = piVar31 + 1;
    } while (iVar23 < local_5ac);
  }
  if (local_568 != &local_560) {
    fastFree(local_568);
  }
  return;
}


==================================================================

### FUNC 002c2750 (2304 bytes) name=cvCartToPolar

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvCartToPolar(cv *param_1,cv *param_2,cv *param_3,cv *param_4,int param_5,AutoBuffer *param_6)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  char *pcVar10;
  int *piVar11;
  int iVar12;
  undefined8 local_270;
  Mat *local_268;
  undefined4 local_260;
  undefined4 local_25c;
  undefined8 local_258;
  Mat *local_250;
  undefined4 local_248;
  undefined4 local_244;
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  int *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  int *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  local_1f8 = &local_1f0;
  local_198 = &local_190;
  local_200 = (int *)&uStack_238;
  uStack_1e8 = 0;
  local_1f0 = 0;
  local_1a0 = (int *)&uStack_1d8;
  uStack_188 = 0;
  local_190 = 0;
  local_230 = 0;
  uStack_228 = 0;
  uStack_238 = _UNK_002c3158;
  local_240 = _DAT_002c3150;
  local_220 = 0;
  uStack_1d8 = _UNK_002c3158;
  local_1e0 = _DAT_002c3150;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  if (param_3 == (cv *)0x0) {
    if (param_4 != (cv *)0x0) goto LAB_002c2aa0;
  }
  else {
    cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
    if (lStack_148 != 0) {
      piVar11 = (int *)(lStack_148 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = *piVar11 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (lStack_208 != 0) {
      piVar11 = (int *)(lStack_208 + 0x14);
      do {
        iVar12 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar12 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar12 == 1) {
        cv::Mat::deallocate((Mat *)&local_240);
      }
    }
    puVar9 = local_138;
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (local_240._4_4_ < 1) {
LAB_002c28dc:
      if (2 < local_17c) goto LAB_002c2f24;
      uStack_238 = local_178;
      local_240 = CONCAT44(local_17c,local_180);
      *local_1f8 = *local_138;
      local_1f8[1] = puVar9[1];
    }
    else {
      iVar12 = 0;
      piVar11 = local_200;
      do {
        *piVar11 = 0;
        iVar12 = iVar12 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar12 < local_240._4_4_);
      if (local_240._4_4_ < 3) goto LAB_002c28dc;
LAB_002c2f24:
      local_240 = CONCAT44(local_240._4_4_,local_180);
      cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_180);
    }
    uStack_218 = uStack_158;
    local_220 = local_160;
    lStack_208 = lStack_148;
    local_210 = local_150;
    uStack_228 = uStack_168;
    local_230 = local_170;
    if (lStack_148 != 0) {
      piVar11 = (int *)(lStack_148 + 0x14);
      do {
        iVar12 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar12 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar12 == 1) {
        cv::Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (0 < local_17c) {
      iVar12 = 0;
      do {
        *local_140 = 0;
        iVar12 = iVar12 + 1;
        local_140 = local_140 + 1;
      } while (iVar12 < local_17c);
    }
    if (local_138 != auStack_130) {
      cv::fastFree(local_138);
    }
    if (((local_200[1] != local_80[1]) || (*local_200 != *local_80)) ||
       (((uint)local_240 & 0xfff) != (local_c0 & 0xfff))) {
      local_270 = 0;
      local_268 = (Mat *)0x0;
      puVar9 = (undefined8 *)cv::String::allocate((String *)&local_270,0x30);
      uVar7 = s_X_type___00468850._0_8_;
      uVar6 = _LAB_00468848;
      uVar5 = DAT_00468840;
      uVar4 = DAT_00468838;
      uVar3 = DAT_00468830;
      param_6 = (AutoBuffer *)&DAT_00468828;
      *puVar9 = DAT_00468828;
      puVar9[1] = uVar3;
      puVar9[2] = uVar4;
      puVar9[3] = uVar5;
      puVar9[4] = uVar6;
      puVar9[5] = uVar7;
      cv::error(-0xd7,(String *)&local_270,
                "void cvCartToPolar(const CvArr*, const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x714);
      cv::String::deallocate((String *)&local_270);
    }
    if (param_4 == (cv *)0x0) {
      local_248 = 0;
      local_170 = 0;
      local_180 = 0x1010000;
      local_258 = CONCAT44(local_258._4_4_,0x1010000);
      local_110 = 0;
      local_120 = 0x2010000;
      local_250 = (Mat *)&local_c0;
      local_244 = local_248;
      local_178 = aMStack_60;
      local_118 = (Mat *)&local_240;
      cv::magnitude((_InputArray *)&local_258,(_InputArray *)&local_180,(_OutputArray *)&local_120);
      goto LAB_002c2d2c;
    }
LAB_002c2aa0:
    cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
    if (lStack_e8 != 0) {
      piVar11 = (int *)(lStack_e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = *piVar11 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar11 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar12 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar12 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar12 == 1) {
        cv::Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar9 = local_d8;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1e0._4_4_ < 1) {
LAB_002c2b4c:
      if (2 < local_11c) goto LAB_002c2f34;
      uStack_1d8 = local_118;
      local_1e0 = CONCAT44(local_11c,local_120);
      *local_198 = *local_d8;
      local_198[1] = puVar9[1];
    }
    else {
      iVar12 = 0;
      piVar11 = local_1a0;
      do {
        *piVar11 = 0;
        iVar12 = iVar12 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar12 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_002c2b4c;
LAB_002c2f34:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
      cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
    }
    uStack_1b8 = uStack_f8;
    local_1c0 = local_100;
    lStack_1a8 = lStack_e8;
    local_1b0 = local_f0;
    uStack_1c8 = uStack_108;
    local_1d0 = local_110;
    if (lStack_e8 != 0) {
      piVar11 = (int *)(lStack_e8 + 0x14);
      do {
        iVar12 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar12 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar12 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar12 = 0;
      do {
        *local_e0 = 0;
        iVar12 = iVar12 + 1;
        local_e0 = local_e0 + 1;
      } while (iVar12 < local_11c);
    }
    if (local_d8 != auStack_d0) {
      cv::fastFree(local_d8);
    }
    if (((*local_1a0 != *local_80) || (local_1a0[1] != local_80[1])) ||
       (((uint)local_1e0 & 0xfff) != (local_c0 & 0xfff))) {
      local_258 = 0;
      local_250 = (Mat *)0x0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_258,0x34);
      uVar8 = s_Angle_size______X_size______Angl_00468860._40_8_;
      uVar7 = s_Angle_size______X_size______Angl_00468860._32_8_;
      uVar6 = s_Angle_size______X_size______Angl_00468860._24_8_;
      uVar5 = s_Angle_size______X_size______Angl_00468860._16_8_;
      uVar4 = s_Angle_size______X_size______Angl_00468860._8_8_;
      uVar3 = s_Angle_size______X_size______Angl_00468860._0_8_;
      *(undefined4 *)(pcVar10 + 0x30) = s_Angle_size______X_size______Angl_00468860._48_4_;
      *(undefined8 *)pcVar10 = uVar3;
      *(undefined8 *)(pcVar10 + 8) = uVar4;
      *(undefined8 *)(pcVar10 + 0x10) = uVar5;
      *(undefined8 *)(pcVar10 + 0x18) = uVar6;
      *(undefined8 *)(pcVar10 + 0x20) = uVar7;
      *(undefined8 *)(pcVar10 + 0x28) = uVar8;
      cv::error(-0xd7,(String *)&local_258,
                "void cvCartToPolar(const CvArr*, const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/mathfuncs.cpp",0x719);
      cv::String::deallocate((String *)&local_258);
    }
    if (param_3 != (cv *)0x0) {
      local_248 = 0;
      local_244 = 0;
      local_258 = CONCAT44(local_258._4_4_,0x1010000);
      local_110 = 0;
      local_120 = 0x2010000;
      local_260 = 0;
      local_25c = 0;
      local_270 = CONCAT44(local_270._4_4_,0x1010000);
      local_170 = 0;
      local_180 = 0x2010000;
      local_268 = (Mat *)&local_c0;
      local_250 = aMStack_60;
      local_178 = (Mat *)&local_240;
      local_118 = (Mat *)&local_1e0;
      cv::cartToPolar((_InputArray *)&local_270,(_InputArray *)&local_258,(_OutputArray *)&local_180
                      ,(_OutputArray *)&local_120,param_5 != 0);
      goto LAB_002c2d2c;
    }
  }
  local_248 = 0;
  local_244 = 0;
  local_258 = CONCAT44(local_258._4_4_,0x1010000);
  local_110 = 0;
  local_120 = 0x2010000;
  local_170 = 0;
  local_180 = 0x1010000;
  local_250 = (Mat *)&local_c0;
  local_178 = aMStack_60;
  local_118 = (Mat *)&local_1e0;
  cv::phase((_InputArray *)&local_258,(_InputArray *)&local_180,(_OutputArray *)&local_120,
            param_5 != 0);
LAB_002c2d2c:
  if (lStack_1a8 != 0) {
    piVar11 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar12 = 0;
    piVar11 = local_1a0;
    do {
      *piVar11 = 0;
      iVar12 = iVar12 + 1;
      piVar11 = piVar11 + 1;
    } while (iVar12 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (lStack_208 != 0) {
    piVar11 = (int *)(lStack_208 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar12 = 0;
    piVar11 = local_200;
    do {
      *piVar11 = 0;
      iVar12 = iVar12 + 1;
      piVar11 = piVar11 + 1;
    } while (iVar12 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    cv::fastFree(local_1f8);
  }
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar12 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 002c3160 (616 bytes) name=FUN_002c3160

void FUN_002c3160(double *param_1,double *param_2,double *param_3,int param_4,double *param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  double *pdVar4;
  double *pdVar5;
  long lVar6;
  double *pdVar7;
  double *pdVar8;
  uint uVar9;
  long lVar10;
  double *pdVar11;
  uint uVar12;
  int iVar13;
  ulong uVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  
  dVar21 = *param_5;
  if (param_4 < 4) {
    iVar13 = 0;
  }
  else {
    uVar12 = param_4 - 4U >> 2;
    uVar1 = uVar12 + 1;
    if ((param_3 < param_1 + 8 && param_1 < param_3 + 8 ||
         param_3 < param_2 + 8 && param_2 < param_3 + 8) || (uVar1 < 5)) {
      pdVar7 = param_3 + 1;
      pdVar8 = param_2;
      pdVar11 = param_1;
      do {
        pdVar4 = pdVar7 + 4;
        dVar15 = *pdVar11;
        dVar17 = *pdVar8;
        *pdVar7 = pdVar8[1] + dVar21 * pdVar11[1];
        pdVar7[-1] = dVar17 + dVar21 * dVar15;
        dVar15 = pdVar11[2];
        dVar17 = pdVar8[2];
        pdVar7[2] = pdVar8[3] + dVar21 * pdVar11[3];
        pdVar7[1] = dVar17 + dVar21 * dVar15;
        pdVar7 = pdVar4;
        pdVar8 = pdVar8 + 4;
        pdVar11 = pdVar11 + 4;
      } while (pdVar4 != param_3 + (ulong)uVar12 * 4 + 5);
    }
    else {
      uVar12 = 0;
      pdVar8 = param_2;
      pdVar7 = param_1;
      pdVar11 = param_3;
      do {
        pdVar5 = pdVar7 + 1;
        dVar20 = *pdVar7;
        pdVar4 = pdVar8 + 1;
        dVar16 = *pdVar8;
        dVar19 = pdVar7[3];
        dVar18 = pdVar7[2];
        dVar17 = pdVar8[3];
        dVar15 = pdVar8[2];
        uVar12 = uVar12 + 1;
        pdVar7 = pdVar7 + 4;
        pdVar8 = pdVar8 + 4;
        pdVar11[1] = *pdVar4 + *pdVar5 * dVar21;
        *pdVar11 = dVar16 + dVar20 * dVar21;
        pdVar11[3] = dVar17 + dVar19 * dVar21;
        pdVar11[2] = dVar15 + dVar18 * dVar21;
        pdVar11 = pdVar11 + 4;
      } while (uVar12 < uVar1);
    }
    iVar13 = uVar1 * 4;
  }
  if (iVar13 < param_4) {
    lVar10 = (long)iVar13;
    uVar1 = param_4 - iVar13;
    lVar6 = lVar10 + 2;
    pdVar7 = param_3 + lVar10;
    pdVar8 = param_1 + lVar10;
    if ((pdVar7 < param_1 + lVar6 && pdVar8 < param_3 + lVar6 ||
         param_2 + lVar10 < param_3 + lVar6 && pdVar7 < param_2 + lVar6) || (uVar1 < 8)) {
      lVar6 = 0;
      do {
        *(double *)((long)pdVar7 + lVar6) =
             *(double *)((long)(param_2 + lVar10) + lVar6) +
             dVar21 * *(double *)((long)pdVar8 + lVar6);
        lVar6 = lVar6 + 8;
      } while (lVar6 != ((ulong)(uint)((param_4 + -1) - iVar13) + 1) * 8);
      return;
    }
    uVar2 = (uint)((ulong)pdVar8 >> 3) & 1;
    uVar12 = uVar1;
    if (uVar2 < uVar1) {
      uVar12 = uVar2;
    }
    if (uVar12 != 0) {
      iVar13 = iVar13 + 1;
      param_3[lVar10] = param_2[lVar10] + dVar21 * param_1[lVar10];
    }
    uVar2 = ((uVar1 - uVar12) - 2 >> 1) + 1;
    uVar9 = 0;
    iVar3 = uVar2 * 2;
    pdVar7 = param_3 + (ulong)uVar12 + lVar10;
    pdVar8 = param_2 + (ulong)uVar12 + lVar10;
    pdVar11 = param_1 + (ulong)uVar12 + lVar10;
    do {
      dVar15 = *pdVar8;
      uVar9 = uVar9 + 1;
      dVar17 = *pdVar11;
      pdVar7[1] = pdVar8[1] + pdVar11[1] * dVar21;
      *pdVar7 = dVar15 + dVar17 * dVar21;
      pdVar7 = pdVar7 + 2;
      pdVar8 = pdVar8 + 2;
      pdVar11 = pdVar11 + 2;
    } while (uVar9 < uVar2);
    uVar2 = iVar13 + iVar3;
    if (uVar1 - uVar12 != iVar3) {
      uVar14 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
      *(double *)((long)param_3 + uVar14) =
           *(double *)((long)param_2 + uVar14) + dVar21 * *(double *)((long)param_1 + uVar14);
    }
  }
  return;
}


==================================================================

### FUNC 002c33c8 (1084 bytes) name=FUN_002c33c8

void FUN_002c33c8(double param_1,double param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,undefined8 *param_7,ulong param_8,int *param_9,uint param_10)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  float *pfVar12;
  double dVar13;
  ulong uVar14;
  float *pfVar15;
  long lVar16;
  double *pdVar17;
  uint uVar18;
  float *pfVar19;
  int iVar20;
  ulong uVar21;
  int iVar22;
  undefined8 *puVar23;
  uint uVar24;
  float fVar25;
  double dVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  long lVar31;
  double dVar32;
  long lVar33;
  int iVar34;
  long lVar35;
  long lVar36;
  
  iVar7 = *param_9;
  if (param_3 == (float *)0x0) {
    uVar14 = 0;
    uVar21 = 0;
  }
  else {
    uVar14 = param_4 >> 2;
    uVar21 = 1;
    if ((param_10 >> 2 & 1) != 0) {
      uVar14 = 1;
      uVar21 = param_4 >> 2;
    }
  }
  iVar22 = param_9[1] + -1;
  if (param_9[1] != 0) {
    iVar10 = iVar7 + -3;
    uVar9 = iVar7 - 4U >> 2;
    iVar8 = (uVar9 + 1) * 4;
    iVar6 = iVar8;
    if (iVar10 < 1) {
      iVar6 = 0;
    }
    iVar1 = iVar6 + 1;
    uVar11 = iVar7 - iVar6;
    iVar2 = iVar6 + 2;
    iVar3 = iVar6 + 3;
    lVar31 = NEON_shl((long)iVar6,3);
    lVar30 = NEON_shl((long)iVar6,2);
    lVar29 = NEON_shl((long)iVar1,2);
    lVar36 = NEON_shl((long)iVar1,3);
    lVar28 = NEON_shl((long)iVar2,2);
    lVar35 = NEON_shl((long)iVar2,3);
    lVar27 = NEON_shl((long)iVar3,2);
    lVar33 = NEON_shl((long)iVar3,3);
    do {
      while (param_3 == (float *)0x0) {
        if (0 < iVar10) {
          uVar18 = 0;
          pdVar17 = param_5;
          puVar23 = param_7;
          do {
            uVar18 = uVar18 + 1;
            dVar26 = pdVar17[1];
            dVar13 = *pdVar17;
            puVar23[1] = CONCAT44((float)(param_1 * pdVar17[3]),(float)(param_1 * pdVar17[2]));
            *puVar23 = CONCAT44((float)(param_1 * dVar26),(float)(param_1 * dVar13));
            pdVar17 = pdVar17 + 4;
            puVar23 = puVar23 + 2;
          } while (uVar18 < uVar9 + 1);
        }
        if (iVar7 <= iVar6) goto LAB_002c35b0;
        uVar18 = (uint)((ulong)param_5 >> 3) & 1;
        if (uVar11 < uVar18) {
          uVar18 = uVar11;
        }
        if (uVar11 < 5) {
          uVar18 = uVar11;
        }
        iVar20 = iVar6;
        if (uVar18 != 0) {
          *(float *)((long)param_7 + lVar30) =
               (float)(param_1 * *(double *)((long)param_5 + lVar31));
          iVar20 = iVar1;
          if (((uVar18 != 1) &&
              (*(float *)((long)param_7 + lVar29) =
                    (float)(param_1 * *(double *)((long)param_5 + lVar36)), iVar20 = iVar2,
              uVar18 != 2)) &&
             (*(float *)((long)param_7 + lVar28) =
                   (float)(param_1 * *(double *)((long)param_5 + lVar35)), iVar20 = iVar3,
             uVar18 == 4)) {
            *(float *)((long)param_7 + lVar27) =
                 (float)(param_1 * *(double *)((long)param_5 + lVar33));
            iVar20 = iVar6 + 4;
          }
          if (uVar18 == uVar11) goto LAB_002c35b0;
        }
        uVar4 = ((uVar11 - uVar18) - 4 >> 2) + 1;
        iVar34 = uVar4 * 4;
        if (2 < (uVar11 - 1) - uVar18) {
          uVar24 = 0;
          pdVar17 = param_5 + (ulong)uVar18 + (long)iVar6;
          puVar23 = (undefined8 *)((long)param_7 + ((ulong)uVar18 + (long)iVar6) * 4);
          do {
            uVar24 = uVar24 + 1;
            dVar26 = pdVar17[1];
            dVar13 = *pdVar17;
            puVar23[1] = CONCAT44((float)(param_1 * pdVar17[3]),(float)(param_1 * pdVar17[2]));
            *puVar23 = CONCAT44((float)(param_1 * dVar26),(float)(param_1 * dVar13));
            pdVar17 = pdVar17 + 4;
            puVar23 = puVar23 + 2;
          } while (uVar24 < uVar4);
          iVar20 = iVar20 + iVar34;
          if (iVar34 == uVar11 - uVar18) goto LAB_002c35b0;
        }
        iVar34 = iVar20 + 1;
        *(float *)((long)param_7 + (long)iVar20 * 4) = (float)(param_1 * param_5[iVar20]);
        if (iVar7 <= iVar34) goto LAB_002c35b0;
        iVar20 = iVar20 + 2;
        *(float *)((long)param_7 + (long)iVar34 * 4) = (float)(param_1 * param_5[iVar34]);
        if (iVar7 <= iVar20) goto LAB_002c35b0;
        iVar22 = iVar22 + -1;
        pdVar17 = param_5 + iVar20;
        param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
        *(float *)((long)param_7 + (long)iVar20 * 4) = (float)(param_1 * *pdVar17);
        param_7 = (undefined8 *)((long)param_7 + (param_8 & 0xfffffffffffffffc));
        param_3 = (float *)(uVar14 * 4);
        if (iVar22 == -1) {
          return;
        }
      }
      if (iVar10 < 1) {
        iVar20 = 0;
        pfVar19 = param_3;
      }
      else {
        pfVar15 = (float *)((long)param_7 + 4);
        pfVar19 = param_3;
        pdVar17 = param_5;
        do {
          fVar25 = *pfVar19;
          pfVar5 = pfVar15 + 4;
          dVar13 = *pdVar17;
          dVar26 = pdVar17[2];
          dVar32 = pdVar17[3];
          *pfVar15 = (float)(param_2 * (double)pfVar19[uVar21] + pdVar17[1] * param_1);
          pfVar15[-1] = (float)(param_2 * (double)fVar25 + dVar13 * param_1);
          pfVar12 = pfVar19 + uVar21 * 3;
          fVar25 = pfVar19[uVar21 * 2];
          pfVar19 = pfVar19 + uVar21 * 4;
          pfVar15[2] = (float)(param_2 * (double)*pfVar12 + dVar32 * param_1);
          pfVar15[1] = (float)(param_2 * (double)fVar25 + dVar26 * param_1);
          pfVar15 = pfVar5;
          pdVar17 = pdVar17 + 4;
        } while (pfVar5 != (float *)((long)param_7 + (ulong)uVar9 * 0x10 + 0x14));
        pfVar19 = (float *)((long)param_3 + uVar21 * 0x10 + (ulong)uVar9 * uVar21 * 0x10);
        iVar20 = iVar8;
      }
      if (iVar20 < iVar7) {
        lVar16 = 0;
        do {
          fVar25 = *pfVar19;
          pfVar19 = pfVar19 + uVar21;
          *(float *)((long)param_7 + lVar16 * 4 + (long)iVar20 * 4) =
               (float)(param_2 * (double)fVar25 + param_5[iVar20 + lVar16] * param_1);
          lVar16 = lVar16 + 1;
        } while (lVar16 != (ulong)(uint)((iVar7 + -1) - iVar20) + 1);
      }
LAB_002c35b0:
      iVar22 = iVar22 + -1;
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
      param_7 = (undefined8 *)((long)param_7 + (param_8 & 0xfffffffffffffffc));
      param_3 = param_3 + uVar14;
    } while (iVar22 != -1);
  }
  return;
}


==================================================================

### FUNC 002c3804 (1016 bytes) name=FUN_002c3804

void FUN_002c3804(double param_1,double param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,double *param_7,ulong param_8,int *param_9,uint param_10)

{
  uint uVar1;
  uint uVar2;
  double *pdVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  double *pdVar9;
  ulong uVar10;
  double *pdVar11;
  long lVar12;
  double *pdVar13;
  uint uVar14;
  uint uVar15;
  double *pdVar16;
  ulong uVar17;
  ulong uVar18;
  ulong uVar19;
  int iVar20;
  double *pdVar21;
  long lVar22;
  double dVar23;
  double dVar24;
  int iVar25;
  double dVar26;
  uint uVar27;
  long lVar28;
  
  iVar5 = *param_9;
  if (param_3 == (double *)0x0) {
    uVar10 = 0;
    uVar19 = 0;
  }
  else {
    uVar10 = param_4 >> 3;
    uVar19 = 1;
    if ((param_10 >> 2 & 1) != 0) {
      uVar10 = 1;
      uVar19 = param_4 >> 3;
    }
  }
  iVar20 = param_9[1] + -1;
  if (param_9[1] != 0) {
    iVar7 = iVar5 + -3;
    uVar6 = iVar5 - 4U >> 2;
    uVar1 = uVar6 + 1;
    uVar4 = uVar1 * 4;
    if (iVar7 < 1) {
      uVar4 = 0;
    }
    uVar8 = iVar5 - uVar4;
    lVar22 = (long)(int)uVar4;
    lVar28 = NEON_shl((ulong)((iVar5 + -1) - uVar4) + 1,3);
    pdVar21 = param_7 + 1;
    param_8 = param_8 & 0xfffffffffffffff8;
    do {
      while (param_3 == (double *)0x0) {
        if (0 < iVar7) {
          if ((param_5 < param_7 + 8 && param_7 < param_5 + 8) || (uVar1 < 5)) {
            pdVar13 = pdVar21;
            pdVar11 = param_5;
            do {
              pdVar16 = pdVar13 + 4;
              dVar23 = *pdVar11;
              *pdVar13 = param_1 * pdVar11[1];
              pdVar13[-1] = param_1 * dVar23;
              dVar23 = pdVar11[2];
              pdVar13[2] = param_1 * pdVar11[3];
              pdVar13[1] = param_1 * dVar23;
              pdVar13 = pdVar16;
              pdVar11 = pdVar11 + 4;
            } while (pdVar16 != param_7 + (ulong)uVar6 * 4 + 5);
          }
          else {
            uVar15 = 0;
            pdVar13 = param_5;
            pdVar11 = param_7;
            do {
              pdVar16 = pdVar13 + 1;
              dVar26 = *pdVar13;
              uVar15 = uVar15 + 1;
              dVar24 = pdVar13[3];
              dVar23 = pdVar13[2];
              pdVar13 = pdVar13 + 4;
              pdVar11[1] = param_1 * *pdVar16;
              *pdVar11 = param_1 * dVar26;
              pdVar11[3] = param_1 * dVar24;
              pdVar11[2] = param_1 * dVar23;
              pdVar11 = pdVar11 + 4;
            } while (uVar15 < uVar1);
          }
        }
        if (iVar5 <= (int)uVar4) goto LAB_002c39b4;
        pdVar13 = param_5 + lVar22;
        if ((pdVar13 < param_7 + lVar22 + 2 && param_7 + lVar22 < param_5 + lVar22 + 2) ||
           (uVar8 < 0xb)) {
          lVar12 = 0;
          do {
            *(double *)((long)(param_7 + lVar22) + lVar12) =
                 param_1 * *(double *)((long)pdVar13 + lVar12);
            lVar12 = lVar12 + 8;
          } while (lVar12 != lVar28);
        }
        else {
          uVar15 = (uint)((ulong)pdVar13 >> 3) & 1;
          if (uVar8 < uVar15) {
            uVar15 = uVar8;
          }
          uVar27 = uVar4;
          if (uVar15 != 0) {
            param_7[lVar22] = param_1 * param_5[lVar22];
            uVar27 = uVar4 + 1;
          }
          uVar2 = ((uVar8 - uVar15) - 2 >> 1) + 1;
          uVar14 = 0;
          iVar25 = uVar2 * 2;
          pdVar13 = param_7 + (ulong)uVar15 + lVar22;
          pdVar11 = param_5 + (ulong)uVar15 + lVar22;
          do {
            dVar23 = *pdVar11;
            uVar14 = uVar14 + 1;
            pdVar13[1] = param_1 * pdVar11[1];
            *pdVar13 = param_1 * dVar23;
            pdVar13 = pdVar13 + 2;
            pdVar11 = pdVar11 + 2;
          } while (uVar14 < uVar2);
          uVar27 = uVar27 + iVar25;
          if (iVar25 == uVar8 - uVar15) goto LAB_002c39b4;
          uVar17 = -(ulong)(uVar27 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar27 << 3;
          *(double *)((long)param_7 + uVar17) = param_1 * *(double *)((long)param_5 + uVar17);
        }
        param_7 = (double *)((long)param_7 + param_8);
        param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
        pdVar21 = (double *)((long)pdVar21 + param_8);
        iVar20 = iVar20 + -1;
        param_3 = (double *)(uVar10 * 8);
        if (iVar20 == -1) {
          return;
        }
      }
      if (iVar7 < 1) {
        uVar17 = 0;
        pdVar13 = param_3;
      }
      else {
        pdVar11 = pdVar21;
        pdVar13 = param_3;
        pdVar16 = param_5;
        do {
          dVar23 = *pdVar13;
          pdVar3 = pdVar11 + 4;
          dVar24 = *pdVar16;
          *pdVar11 = param_2 * pdVar13[uVar19] + pdVar16[1] * param_1;
          pdVar11[-1] = param_2 * dVar23 + dVar24 * param_1;
          pdVar9 = pdVar13 + uVar19 * 3;
          dVar23 = pdVar13[uVar19 * 2];
          pdVar13 = pdVar13 + uVar19 * 4;
          dVar24 = pdVar16[2];
          pdVar11[2] = param_2 * *pdVar9 + pdVar16[3] * param_1;
          pdVar11[1] = param_2 * dVar23 + dVar24 * param_1;
          pdVar11 = pdVar3;
          pdVar16 = pdVar16 + 4;
        } while (pdVar3 != param_7 + (ulong)uVar6 * 4 + 5);
        uVar17 = (ulong)(uVar1 * 4);
        pdVar13 = (double *)((long)param_3 + uVar19 * 0x20 + (ulong)uVar6 * uVar19 * 0x20);
      }
      if ((int)uVar17 < iVar5) {
        uVar18 = -(uVar17 >> 0x1f) & 0xfffffff800000000 | uVar17 << 3;
        lVar12 = 0;
        do {
          dVar23 = *pdVar13;
          pdVar13 = pdVar13 + uVar19;
          *(double *)((long)param_7 + lVar12 + uVar18) =
               param_2 * dVar23 + *(double *)((long)param_5 + lVar12 + uVar18) * param_1;
          lVar12 = lVar12 + 8;
        } while (lVar12 != ((ulong)(uint)((iVar5 + -1) - (int)uVar17) + 1) * 8);
      }
LAB_002c39b4:
      iVar20 = iVar20 + -1;
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff8));
      param_7 = (double *)((long)param_7 + param_8);
      pdVar21 = (double *)((long)pdVar21 + param_8);
      param_3 = param_3 + uVar10;
    } while (iVar20 != -1);
  }
  return;
}


==================================================================

### FUNC 002c3bfc (968 bytes) name=FUN_002c3bfc

void FUN_002c3bfc(double param_1,double param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,float *param_7,ulong param_8,int *param_9,uint param_10)

{
  float *pfVar1;
  uint uVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  double dVar11;
  ulong uVar12;
  uint uVar13;
  float *pfVar14;
  float *pfVar15;
  double *pdVar16;
  double *pdVar17;
  undefined8 *puVar18;
  ulong uVar19;
  int iVar20;
  int iVar21;
  long lVar22;
  float fVar23;
  double dVar24;
  double dVar25;
  float fVar26;
  float fVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  long lVar32;
  
  iVar5 = *param_9;
  if (param_3 == (float *)0x0) {
    uVar12 = 0;
    uVar19 = 0;
  }
  else {
    uVar12 = param_4 >> 3;
    uVar19 = 1;
    if ((param_10 >> 2 & 1) != 0) {
      uVar12 = 1;
      uVar19 = param_4 >> 3;
    }
  }
  iVar20 = param_9[1] + -1;
  if (param_9[1] != 0) {
    iVar9 = iVar5 + -3;
    uVar8 = iVar5 - 4U >> 2;
    uVar2 = uVar8 + 1;
    iVar6 = uVar2 * 4;
    lVar3 = (ulong)uVar8 + 1;
    iVar4 = iVar6;
    if (iVar9 < 1) {
      iVar4 = 0;
    }
    iVar10 = iVar5 - iVar4;
    uVar8 = (iVar10 - 2U >> 1) + 1;
    iVar7 = uVar8 * 2;
    lVar32 = NEON_shl((long)iVar4,3);
    do {
      while (param_3 == (float *)0x0) {
        if (0 < iVar9) {
          uVar13 = 0;
          pdVar16 = param_5;
          pfVar14 = param_7;
          do {
            dVar28 = pdVar16[1];
            dVar25 = *pdVar16;
            uVar13 = uVar13 + 1;
            dVar24 = pdVar16[5];
            dVar11 = pdVar16[4];
            dVar30 = pdVar16[7];
            dVar29 = pdVar16[6];
            *(ulong *)(pfVar14 + 2) =
                 CONCAT44((float)(param_1 * pdVar16[3]),(float)(param_1 * pdVar16[2]));
            *(ulong *)pfVar14 = CONCAT44((float)(param_1 * dVar28),(float)(param_1 * dVar25));
            *(ulong *)(pfVar14 + 6) = CONCAT44((float)(param_1 * dVar30),(float)(param_1 * dVar29));
            *(ulong *)(pfVar14 + 4) = CONCAT44((float)(param_1 * dVar24),(float)(param_1 * dVar11));
            pdVar16 = pdVar16 + 8;
            pfVar14 = pfVar14 + 8;
          } while (uVar13 < uVar2);
        }
        if (iVar5 <= iVar4) goto LAB_002c3e4c;
        iVar21 = iVar4;
        if (iVar10 != 1) {
          uVar13 = 0;
          pdVar16 = param_5 + (long)iVar4 * 2;
          puVar18 = (undefined8 *)((long)param_7 + lVar32);
          do {
            uVar13 = uVar13 + 1;
            dVar25 = pdVar16[1];
            dVar11 = *pdVar16;
            puVar18[1] = CONCAT44((float)(param_1 * pdVar16[3]),(float)(param_1 * pdVar16[2]));
            *puVar18 = CONCAT44((float)(param_1 * dVar25),(float)(param_1 * dVar11));
            pdVar16 = pdVar16 + 4;
            puVar18 = puVar18 + 2;
          } while (uVar13 < uVar8);
          iVar21 = iVar7 + iVar4;
          if (iVar7 == iVar10) goto LAB_002c3e4c;
        }
        lVar22 = (long)iVar21;
        iVar20 = iVar20 + -1;
        pdVar16 = param_5 + lVar22 * 2;
        dVar11 = param_5[lVar22 * 2 + 1];
        param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff0));
        param_7[lVar22 * 2] = (float)(param_1 * *pdVar16);
        param_7[lVar22 * 2 + 1] = (float)(param_1 * dVar11);
        param_3 = (float *)(uVar12 * 8);
        param_7 = (float *)((long)param_7 + (param_8 & 0xfffffffffffffff8));
        if (iVar20 == -1) {
          return;
        }
      }
      if (iVar9 < 1) {
        iVar21 = 0;
        pfVar14 = param_3;
      }
      else {
        lVar22 = 0;
        pfVar14 = param_7;
        pdVar16 = param_5;
        pfVar15 = param_3;
        do {
          fVar26 = pfVar15[1];
          fVar23 = *pfVar15;
          fVar27 = pfVar15[uVar19 * 2 + 1];
          lVar22 = lVar22 + 0x20;
          dVar25 = pdVar16[1];
          dVar28 = pdVar16[3];
          dVar11 = *pdVar16;
          dVar29 = pdVar16[5];
          dVar30 = pdVar16[7];
          dVar24 = pdVar16[4];
          dVar31 = pdVar16[6];
          pfVar14[2] = (float)(param_2 * (double)pfVar15[uVar19 * 2] + pdVar16[2] * param_1);
          pfVar14[3] = (float)(param_2 * (double)fVar27 + dVar28 * param_1);
          pfVar14[1] = (float)(param_2 * (double)fVar26 + dVar25 * param_1);
          *pfVar14 = (float)(param_2 * (double)fVar23 + dVar11 * param_1);
          fVar23 = pfVar15[uVar19 * 4];
          fVar27 = pfVar15[uVar19 * 6 + 1];
          fVar26 = pfVar15[uVar19 * 4 + 1];
          pfVar14[6] = (float)(param_2 * (double)pfVar15[uVar19 * 6] + dVar31 * param_1);
          pfVar14[7] = (float)(param_2 * (double)fVar27 + dVar30 * param_1);
          pfVar14[5] = (float)(param_2 * (double)fVar26 + dVar29 * param_1);
          pfVar14[4] = (float)(param_2 * (double)fVar23 + dVar24 * param_1);
          pfVar14 = pfVar14 + 8;
          pdVar16 = pdVar16 + 8;
          pfVar15 = pfVar15 + uVar19 * 8;
        } while (lVar22 != lVar3 * 0x20);
        pfVar14 = (float *)((long)param_3 + lVar3 * uVar19 * 0x20);
        iVar21 = iVar6;
      }
      if (iVar21 < iVar5) {
        lVar22 = (long)iVar21;
        pfVar15 = param_7 + lVar22 * 2;
        pdVar16 = param_5 + lVar22 * 2;
        do {
          pfVar1 = pfVar14 + 1;
          fVar23 = *pfVar14;
          pfVar14 = pfVar14 + uVar19 * 2;
          pdVar17 = pdVar16 + 2;
          dVar11 = *pdVar16;
          pfVar15[1] = (float)(param_2 * (double)*pfVar1 + pdVar16[1] * param_1);
          *pfVar15 = (float)(param_2 * (double)fVar23 + dVar11 * param_1);
          pfVar15 = pfVar15 + 2;
          pdVar16 = pdVar17;
        } while (pdVar17 != param_5 + (lVar22 + 1 + (ulong)(uint)((iVar5 + -1) - iVar21)) * 2);
      }
LAB_002c3e4c:
      iVar20 = iVar20 + -1;
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff0));
      param_3 = param_3 + uVar12 * 2;
      param_7 = (float *)((long)param_7 + (param_8 & 0xfffffffffffffff8));
    } while (iVar20 != -1);
  }
  return;
}


==================================================================

### FUNC 002c3fc4 (1072 bytes) name=FUN_002c3fc4

void FUN_002c3fc4(double param_1,double param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,double *param_7,ulong param_8,int *param_9,uint param_10)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  double *pdVar8;
  ulong uVar9;
  double *pdVar10;
  uint uVar11;
  double *pdVar12;
  double *pdVar13;
  double *pdVar14;
  ulong uVar15;
  int iVar16;
  int iVar17;
  long lVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  long lVar26;
  
  iVar5 = *param_9;
  if (param_3 == (double *)0x0) {
    uVar9 = 0;
    uVar15 = 0;
  }
  else {
    uVar9 = param_4 >> 4;
    uVar15 = 1;
    if ((param_10 >> 2 & 1) != 0) {
      uVar9 = 1;
      uVar15 = param_4 >> 4;
    }
  }
  iVar16 = param_9[1] + -1;
  if (param_9[1] != 0) {
    uVar6 = iVar5 - 4U >> 2;
    uVar1 = uVar6 + 1;
    iVar7 = iVar5 + -3;
    iVar4 = uVar1 * 4;
    if (iVar7 < 1) {
      iVar4 = 0;
    }
    lVar2 = (long)iVar4 + 2;
    lVar3 = (ulong)uVar6 + 1;
    lVar26 = NEON_shl((long)iVar4 + 1 + (ulong)(uint)((iVar5 + -1) - iVar4),4);
    do {
      while (param_3 == (double *)0x0) {
        if (0 < iVar7) {
          if ((param_5 < param_7 + 0x10 && param_7 < param_5 + 0x10) || (uVar1 < 7)) {
            pdVar10 = param_7 + 1;
            pdVar13 = param_5;
            do {
              dVar21 = pdVar13[2];
              pdVar14 = pdVar10 + 8;
              dVar20 = pdVar13[3];
              dVar19 = *pdVar13;
              *pdVar10 = param_1 * pdVar13[1];
              pdVar10[1] = param_1 * dVar21;
              pdVar10[2] = param_1 * dVar20;
              pdVar10[-1] = param_1 * dVar19;
              dVar21 = pdVar13[6];
              dVar20 = pdVar13[7];
              dVar19 = pdVar13[4];
              pdVar10[4] = param_1 * pdVar13[5];
              pdVar10[5] = param_1 * dVar21;
              pdVar10[6] = param_1 * dVar20;
              pdVar10[3] = param_1 * dVar19;
              pdVar10 = pdVar14;
              pdVar13 = pdVar13 + 8;
            } while (pdVar14 != param_7 + (ulong)uVar6 * 8 + 9);
          }
          else {
            uVar11 = 0;
            pdVar10 = param_5;
            pdVar13 = param_7;
            do {
              pdVar14 = pdVar10 + 1;
              dVar21 = *pdVar10;
              dVar25 = pdVar10[3];
              dVar24 = pdVar10[2];
              dVar23 = pdVar10[5];
              dVar22 = pdVar10[4];
              dVar20 = pdVar10[7];
              dVar19 = pdVar10[6];
              uVar11 = uVar11 + 1;
              pdVar10 = pdVar10 + 8;
              pdVar13[1] = param_1 * *pdVar14;
              *pdVar13 = param_1 * dVar21;
              pdVar13[3] = param_1 * dVar25;
              pdVar13[2] = param_1 * dVar24;
              pdVar13[5] = param_1 * dVar23;
              pdVar13[4] = param_1 * dVar22;
              pdVar13[7] = param_1 * dVar20;
              pdVar13[6] = param_1 * dVar19;
              pdVar13 = pdVar13 + 8;
            } while (uVar11 < uVar1);
          }
        }
        if (iVar5 <= iVar4) goto LAB_002c41d8;
        pdVar10 = param_5 + lVar2 * 2 + -4;
        pdVar13 = param_7 + lVar2 * 2 + -4;
        if ((pdVar10 < param_7 + lVar2 * 2 && pdVar13 < param_5 + lVar2 * 2) ||
           ((uint)(iVar5 - iVar4) < 5)) {
          do {
            pdVar14 = pdVar10 + 2;
            dVar19 = *pdVar10;
            pdVar13[1] = param_1 * pdVar10[1];
            *pdVar13 = param_1 * dVar19;
            pdVar10 = pdVar14;
            pdVar13 = pdVar13 + 2;
          } while (pdVar14 != (double *)((long)param_5 + lVar26));
        }
        else {
          uVar11 = 0;
          do {
            dVar19 = *pdVar10;
            uVar11 = uVar11 + 1;
            pdVar13[1] = param_1 * pdVar10[1];
            *pdVar13 = param_1 * dVar19;
            pdVar10 = pdVar10 + 2;
            pdVar13 = pdVar13 + 2;
          } while (uVar11 < (uint)(iVar5 - iVar4));
        }
        param_7 = (double *)((long)param_7 + (param_8 & 0xfffffffffffffff0));
        param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff0));
        iVar16 = iVar16 + -1;
        param_3 = (double *)(uVar9 * 0x10);
        if (iVar16 == -1) {
          return;
        }
      }
      if (iVar7 < 1) {
        iVar17 = 0;
        pdVar10 = param_3;
      }
      else {
        lVar18 = 0;
        pdVar10 = param_7;
        pdVar13 = param_5;
        pdVar14 = param_3;
        do {
          dVar23 = pdVar14[uVar15 * 2];
          dVar19 = *pdVar14;
          dVar21 = pdVar14[uVar15 * 2 + 1];
          lVar18 = lVar18 + 0x40;
          dVar24 = pdVar13[2];
          dVar22 = pdVar13[3];
          dVar20 = *pdVar13;
          pdVar10[1] = param_2 * pdVar14[1] + pdVar13[1] * param_1;
          pdVar10[2] = param_2 * dVar23 + dVar24 * param_1;
          pdVar10[3] = param_2 * dVar21 + dVar22 * param_1;
          *pdVar10 = param_2 * dVar19 + dVar20 * param_1;
          dVar23 = pdVar14[uVar15 * 6];
          dVar19 = pdVar14[uVar15 * 4];
          dVar21 = pdVar14[uVar15 * 6 + 1];
          dVar24 = pdVar13[6];
          dVar22 = pdVar13[7];
          dVar20 = pdVar13[4];
          pdVar10[5] = param_2 * pdVar14[uVar15 * 4 + 1] + pdVar13[5] * param_1;
          pdVar10[6] = param_2 * dVar23 + dVar24 * param_1;
          pdVar10[7] = param_2 * dVar21 + dVar22 * param_1;
          pdVar10[4] = param_2 * dVar19 + dVar20 * param_1;
          pdVar10 = pdVar10 + 8;
          pdVar13 = pdVar13 + 8;
          pdVar14 = pdVar14 + uVar15 * 8;
        } while (lVar18 != lVar3 * 0x40);
        pdVar10 = (double *)((long)param_3 + uVar15 * 0x40 * lVar3);
        iVar17 = uVar1 * 4;
      }
      if (iVar17 < iVar5) {
        lVar18 = (long)iVar17;
        pdVar13 = param_5 + lVar18 * 2;
        pdVar14 = param_7 + lVar18 * 2;
        do {
          pdVar8 = pdVar10 + 1;
          dVar19 = *pdVar10;
          pdVar10 = pdVar10 + uVar15 * 2;
          pdVar12 = pdVar13 + 2;
          dVar20 = *pdVar13;
          pdVar14[1] = param_2 * *pdVar8 + param_1 * pdVar13[1];
          *pdVar14 = param_2 * dVar19 + param_1 * dVar20;
          pdVar13 = pdVar12;
          pdVar14 = pdVar14 + 2;
        } while (pdVar12 != param_5 + (lVar18 + 1 + (ulong)(uint)((iVar5 + -1) - iVar17)) * 2);
      }
LAB_002c41d8:
      iVar16 = iVar16 + -1;
      param_5 = (double *)((long)param_5 + (param_6 & 0xfffffffffffffff0));
      param_7 = (double *)((long)param_7 + (param_8 & 0xfffffffffffffff0));
      param_3 = param_3 + uVar9 * 2;
    } while (iVar16 != -1);
  }
  return;
}


==================================================================

### FUNC 002c43f4 (3852 bytes) name=FUN_002c43f4

void FUN_002c43f4(float *param_1,float *param_2,float *param_3,uint param_4,ulong param_5,
                 ulong param_6)

{
  float *pfVar1;
  float *pfVar4;
  float *pfVar5;
  int iVar6;
  ulong uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  ulong uVar11;
  long lVar12;
  long lVar13;
  uint uVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float fVar42;
  float fVar43;
  float fVar44;
  float fVar45;
  float fVar46;
  float fVar47;
  float fVar48;
  float fVar49;
  float fVar50;
  float fVar51;
  float fVar52;
  float fVar53;
  float fVar54;
  float local_b0;
  undefined1 uStack_ac;
  undefined1 uStack_ab;
  undefined1 uStack_aa;
  undefined1 uStack_a9;
  float fStack_a8;
  undefined1 uStack_a4;
  undefined1 uStack_a3;
  undefined1 uStack_a2;
  undefined1 uStack_a1;
  float local_a0;
  undefined1 uStack_9c;
  undefined1 uStack_9b;
  undefined1 uStack_9a;
  undefined1 uStack_99;
  float fStack_98;
  undefined1 uStack_94;
  undefined1 uStack_93;
  undefined1 uStack_92;
  undefined1 uStack_91;
  float local_70;
  undefined1 uStack_6c;
  undefined1 uStack_6b;
  undefined1 uStack_6a;
  undefined1 uStack_69;
  float fStack_68;
  undefined1 uStack_64;
  undefined1 uStack_63;
  undefined1 uStack_62;
  undefined1 uStack_61;
  float local_60;
  undefined1 uStack_5c;
  undefined1 uStack_5b;
  undefined1 uStack_5a;
  undefined1 uStack_59;
  float fStack_58;
  undefined1 uStack_54;
  undefined1 uStack_53;
  undefined1 uStack_52;
  undefined1 uStack_51;
  float *pfVar2;
  float *pfVar3;
  
  iVar6 = (int)param_5;
  iVar8 = (int)param_6;
  if ((iVar6 == 2) && (iVar8 == 2)) {
    iVar6 = param_4 * 2;
    if (iVar6 < 1) {
      return;
    }
    uVar10 = iVar6 - 1U >> 1;
    uVar14 = uVar10 + 1;
    if (((uVar14 < 4 || param_2 < param_1 + 8 && param_1 < param_2 + 8) ||
         param_3 < param_2 + (ulong)uVar14 * 2 && param_2 < param_3 + 2) ||
       (param_3 + 4 < param_2 + (ulong)uVar14 * 2 && param_2 < param_3 + 3)) {
      pfVar4 = param_2 + 1;
      pfVar5 = param_1 + 1;
      do {
        fVar47 = pfVar5[-1];
        pfVar1 = pfVar5 + 2;
        fVar17 = *pfVar5;
        fVar48 = param_3[4];
        fVar51 = param_3[3];
        fVar42 = param_3[5];
        pfVar4[-1] = fVar17 * param_3[1] + *param_3 * fVar47 + param_3[2];
        *pfVar4 = fVar17 * fVar48 + fVar51 * fVar47 + fVar42;
        pfVar4 = pfVar4 + 2;
        pfVar5 = pfVar1;
      } while (pfVar1 != param_1 + (ulong)uVar10 * 2 + 3);
      return;
    }
    uVar10 = (uVar10 - 3 >> 2) + 1;
    if (iVar6 - 1U < 6) {
      uVar7 = 0;
    }
    else {
      fVar54 = param_3[1];
      fVar17 = *param_3;
      fVar51 = param_3[2];
      fVar48 = param_3[3];
      fVar47 = param_3[4];
      uVar9 = 0;
      fVar42 = param_3[5];
      pfVar4 = param_1;
      pfVar5 = param_2;
      do {
        fVar15 = *pfVar4;
        fVar26 = pfVar4[1];
        fVar18 = pfVar4[2];
        fVar29 = pfVar4[3];
        fVar20 = pfVar4[4];
        fVar32 = pfVar4[5];
        fVar23 = pfVar4[6];
        fVar35 = pfVar4[7];
        pfVar4 = pfVar4 + 8;
        uVar9 = uVar9 + 1;
        _local_70 = CONCAT17((char)((uint)fVar18 >> 0x18),
                             CONCAT16((char)((uint)fVar18 >> 0x10),
                                      CONCAT15((char)((uint)fVar18 >> 8),
                                               CONCAT14(SUB41(fVar18,0),fVar15))));
        _fStack_68 = CONCAT17((char)((uint)fVar23 >> 0x18),
                              CONCAT16((char)((uint)fVar23 >> 0x10),
                                       CONCAT15((char)((uint)fVar23 >> 8),
                                                CONCAT14(SUB41(fVar23,0),fVar20))));
        _local_60 = CONCAT17((char)((uint)fVar29 >> 0x18),
                             CONCAT16((char)((uint)fVar29 >> 0x10),
                                      CONCAT15((char)((uint)fVar29 >> 8),
                                               CONCAT14(SUB41(fVar29,0),fVar26))));
        _fStack_58 = CONCAT17((char)((uint)fVar35 >> 0x18),
                              CONCAT16((char)((uint)fVar35 >> 0x10),
                                       CONCAT15((char)((uint)fVar35 >> 8),
                                                CONCAT14(SUB41(fVar35,0),fVar32))));
        fVar18 = (float)((ulong)_local_60 >> 0x20);
        fVar23 = (float)((ulong)_fStack_58 >> 0x20);
        fVar29 = (float)((ulong)_local_70 >> 0x20);
        fVar35 = (float)((ulong)_fStack_68 >> 0x20);
        *pfVar5 = fVar26 * fVar54 + fVar15 * fVar17 + fVar51;
        pfVar5[1] = fVar26 * fVar47 + fVar15 * fVar48 + fVar42;
        pfVar5[2] = fVar18 * fVar54 + fVar29 * fVar17 + fVar51;
        pfVar5[3] = fVar18 * fVar47 + fVar29 * fVar48 + fVar42;
        pfVar5[4] = fVar32 * fVar54 + fVar20 * fVar17 + fVar51;
        pfVar5[5] = fVar32 * fVar47 + fVar20 * fVar48 + fVar42;
        pfVar5[6] = fVar23 * fVar54 + fVar35 * fVar17 + fVar51;
        pfVar5[7] = fVar23 * fVar47 + fVar35 * fVar48 + fVar42;
        pfVar5 = pfVar5 + 8;
      } while (uVar9 < uVar10);
      uVar7 = (ulong)(uVar10 * 8);
      if (uVar14 == uVar10 * 4) {
        return;
      }
    }
    uVar11 = -(uVar7 >> 0x1f) & 0xfffffffc00000000 | uVar7 << 2;
    uVar14 = (int)uVar7 + 2;
    fVar47 = *(float *)((long)param_1 + uVar11 + 4);
    fVar17 = param_3[4];
    fVar48 = *(float *)((long)param_1 + uVar11);
    fVar51 = param_3[3];
    fVar42 = param_3[5];
    *(float *)((long)param_2 + uVar11) = fVar47 * param_3[1] + *param_3 * fVar48 + param_3[2];
    *(float *)((long)param_2 + uVar11 + 4) = fVar47 * fVar17 + fVar51 * fVar48 + fVar42;
    if (iVar6 <= (int)uVar14) {
      return;
    }
    uVar11 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
    uVar14 = (int)uVar7 + 4;
    fVar47 = *(float *)((long)param_1 + uVar11 + 4);
    fVar17 = param_3[4];
    fVar48 = *(float *)((long)param_1 + uVar11);
    fVar51 = param_3[3];
    fVar42 = param_3[5];
    *(float *)((long)param_2 + uVar11) = fVar47 * param_3[1] + *param_3 * fVar48 + param_3[2];
    *(float *)((long)param_2 + uVar11 + 4) = fVar47 * fVar17 + fVar51 * fVar48 + fVar42;
    if (iVar6 <= (int)uVar14) {
      return;
    }
    uVar7 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
    fVar47 = *(float *)((long)param_1 + uVar7 + 4);
    fVar17 = param_3[4];
    fVar48 = *(float *)((long)param_1 + uVar7);
    fVar51 = param_3[3];
    fVar42 = param_3[5];
    *(float *)((long)param_2 + uVar7) = fVar47 * param_3[1] + *param_3 * fVar48 + param_3[2];
    *(float *)((long)param_2 + uVar7 + 4) = fVar47 * fVar17 + fVar51 * fVar48 + fVar42;
    return;
  }
  if (iVar6 == 3) {
    if (iVar8 == 3) {
      iVar6 = param_4 * 3;
      if (iVar6 < 1) {
        return;
      }
      uVar10 = (iVar6 - 1U) / 3;
      uVar14 = uVar10 + 1;
      pfVar4 = param_2 + (ulong)uVar14 * 3;
      if ((((uVar14 < 4 || param_2 < param_1 + 0xc && param_1 < param_2 + 0xc) ||
           param_3 < pfVar4 && param_2 < param_3 + 2) ||
           param_3 + 7 < pfVar4 && param_2 < param_3 + 8) ||
         (param_3 + 0xb < pfVar4 && param_2 < param_3 + 3)) {
        iVar8 = 0;
        do {
          fVar48 = param_1[1];
          fVar17 = param_3[5];
          iVar8 = iVar8 + 3;
          fVar54 = param_3[1];
          fVar42 = param_3[4];
          fVar15 = *param_1;
          fVar20 = *param_3;
          fVar47 = param_3[6];
          fVar51 = param_1[2];
          fVar26 = param_3[2];
          fVar23 = param_3[7];
          fVar18 = param_3[3];
          param_2[2] = fVar48 * param_3[9] + param_3[8] * fVar15 + param_3[10] * fVar51 +
                       param_3[0xb];
          param_2[1] = fVar48 * fVar17 + fVar42 * fVar15 + fVar47 * fVar51 + fVar23;
          *param_2 = fVar48 * fVar54 + fVar20 * fVar15 + fVar26 * fVar51 + fVar18;
          param_1 = param_1 + 3;
          param_2 = param_2 + 3;
        } while (iVar8 < iVar6);
        return;
      }
      uVar10 = (uVar10 - 3 >> 2) + 1;
      if (iVar6 - 1U < 9) {
        uVar7 = 0;
      }
      else {
        fVar29 = param_3[1];
        fVar17 = *param_3;
        fVar26 = param_3[2];
        fVar23 = param_3[3];
        fVar20 = param_3[4];
        uVar9 = 0;
        fVar18 = param_3[5];
        fVar15 = param_3[6];
        fVar54 = param_3[7];
        fVar51 = param_3[8];
        fVar48 = param_3[9];
        fVar47 = param_3[10];
        fVar42 = param_3[0xb];
        pfVar4 = param_2;
        pfVar5 = param_1;
        do {
          fVar16 = *pfVar5;
          fVar27 = pfVar5[1];
          fVar32 = pfVar5[2];
          fVar19 = pfVar5[3];
          fVar30 = pfVar5[4];
          fVar35 = pfVar5[5];
          fVar21 = pfVar5[6];
          fVar33 = pfVar5[7];
          fVar38 = pfVar5[8];
          fVar24 = pfVar5[9];
          fVar36 = pfVar5[10];
          fVar40 = pfVar5[0xb];
          pfVar5 = pfVar5 + 0xc;
          uVar9 = uVar9 + 1;
          _local_b0 = CONCAT14(SUB41(fVar19,0),fVar16);
          _local_b0 = CONCAT15((char)((uint)fVar19 >> 8),_local_b0);
          _local_b0 = CONCAT16((char)((uint)fVar19 >> 0x10),_local_b0);
          _local_b0 = CONCAT17((char)((uint)fVar19 >> 0x18),_local_b0);
          _fStack_a8 = CONCAT14(SUB41(fVar24,0),fVar21);
          _fStack_a8 = CONCAT15((char)((uint)fVar24 >> 8),_fStack_a8);
          _fStack_a8 = CONCAT16((char)((uint)fVar24 >> 0x10),_fStack_a8);
          _fStack_a8 = CONCAT17((char)((uint)fVar24 >> 0x18),_fStack_a8);
          _local_a0 = CONCAT14(SUB41(fVar30,0),fVar27);
          _local_a0 = CONCAT15((char)((uint)fVar30 >> 8),_local_a0);
          _local_a0 = CONCAT16((char)((uint)fVar30 >> 0x10),_local_a0);
          _local_a0 = CONCAT17((char)((uint)fVar30 >> 0x18),_local_a0);
          _fStack_98 = CONCAT14(SUB41(fVar36,0),fVar33);
          _fStack_98 = CONCAT15((char)((uint)fVar36 >> 8),_fStack_98);
          _fStack_98 = CONCAT16((char)((uint)fVar36 >> 0x10),_fStack_98);
          _fStack_98 = CONCAT17((char)((uint)fVar36 >> 0x18),_fStack_98);
          fVar24 = (float)((ulong)_local_a0 >> 0x20);
          fVar30 = (float)((ulong)_fStack_98 >> 0x20);
          fVar25 = (float)((ulong)_local_b0 >> 0x20);
          fVar22 = (float)((ulong)_fStack_a8 >> 0x20);
          fVar36 = (float)(CONCAT17((char)((uint)fVar35 >> 0x18),
                                    CONCAT16((char)((uint)fVar35 >> 0x10),
                                             CONCAT15((char)((uint)fVar35 >> 8),
                                                      CONCAT14(SUB41(fVar35,0),fVar32)))) >> 0x20);
          fVar40 = (float)(CONCAT17((char)((uint)fVar40 >> 0x18),
                                    CONCAT16((char)((uint)fVar40 >> 0x10),
                                             CONCAT15((char)((uint)fVar40 >> 8),
                                                      CONCAT14(SUB41(fVar40,0),fVar38)))) >> 0x20);
          fVar35 = fVar27 * fVar29 + fVar16 * fVar17 + fVar32 * fVar26 + fVar23;
          fVar19 = fVar24 * fVar29 + fVar25 * fVar17 + fVar36 * fVar26 + fVar23;
          *pfVar4 = fVar35;
          pfVar4[1] = fVar27 * fVar18 + fVar16 * fVar20 + fVar32 * fVar15 + fVar54;
          pfVar4[2] = fVar27 * fVar48 + fVar16 * fVar51 + fVar32 * fVar47 + fVar42;
          pfVar4[3] = (float)(CONCAT17((char)((uint)fVar19 >> 0x18),
                                       CONCAT16((char)((uint)fVar19 >> 0x10),
                                                CONCAT15((char)((uint)fVar19 >> 8),
                                                         CONCAT14(SUB41(fVar19,0),fVar35)))) >> 0x20
                             );
          pfVar4[4] = fVar24 * fVar18 + fVar25 * fVar20 + fVar36 * fVar15 + fVar54;
          pfVar4[5] = fVar24 * fVar48 + fVar25 * fVar51 + fVar36 * fVar47 + fVar42;
          pfVar4[6] = fVar33 * fVar29 + fVar21 * fVar17 + fVar38 * fVar26 + fVar23;
          pfVar4[7] = fVar33 * fVar18 + fVar21 * fVar20 + fVar38 * fVar15 + fVar54;
          pfVar4[8] = fVar33 * fVar48 + fVar21 * fVar51 + fVar38 * fVar47 + fVar42;
          pfVar4[9] = fVar30 * fVar29 + fVar22 * fVar17 + fVar40 * fVar26 + fVar23;
          pfVar4[10] = fVar30 * fVar18 + fVar22 * fVar20 + fVar40 * fVar15 + fVar54;
          pfVar4[0xb] = fVar30 * fVar48 + fVar22 * fVar51 + fVar40 * fVar47 + fVar42;
          pfVar4 = pfVar4 + 0xc;
        } while (uVar9 < uVar10);
        uVar7 = (ulong)(uVar10 * 0xc);
        if (uVar14 == uVar10 * 4) {
          return;
        }
      }
      uVar11 = -(uVar7 >> 0x1f) & 0xfffffffc00000000 | uVar7 << 2;
      uVar14 = (int)uVar7 + 3;
      fVar17 = *(float *)((long)param_1 + uVar11 + 4);
      fVar47 = param_3[5];
      fVar20 = param_3[9];
      fVar54 = *(float *)((long)param_1 + uVar11);
      fVar48 = param_3[4];
      fVar23 = param_3[8];
      fVar42 = *(float *)((long)param_1 + uVar11 + 8);
      fVar51 = param_3[6];
      fVar26 = param_3[10];
      fVar18 = param_3[7];
      fVar15 = param_3[0xb];
      *(float *)((long)param_2 + uVar11) =
           fVar17 * param_3[1] + *param_3 * fVar54 + param_3[2] * fVar42 + param_3[3];
      *(float *)((long)param_2 + uVar11 + 4) =
           fVar17 * fVar47 + fVar48 * fVar54 + fVar51 * fVar42 + fVar18;
      *(float *)((long)param_2 + uVar11 + 8) =
           fVar17 * fVar20 + fVar23 * fVar54 + fVar26 * fVar42 + fVar15;
      if (iVar6 <= (int)uVar14) {
        return;
      }
      uVar11 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
      uVar14 = (int)uVar7 + 6;
      fVar17 = *(float *)((long)param_1 + uVar11 + 4);
      fVar47 = param_3[5];
      fVar20 = param_3[9];
      fVar54 = *(float *)((long)param_1 + uVar11);
      fVar48 = param_3[4];
      fVar23 = param_3[8];
      fVar42 = *(float *)((long)param_1 + uVar11 + 8);
      fVar51 = param_3[6];
      fVar26 = param_3[10];
      fVar18 = param_3[7];
      fVar15 = param_3[0xb];
      *(float *)((long)param_2 + uVar11) =
           fVar17 * param_3[1] + *param_3 * fVar54 + param_3[2] * fVar42 + param_3[3];
      *(float *)((long)param_2 + uVar11 + 4) =
           fVar17 * fVar47 + fVar48 * fVar54 + fVar51 * fVar42 + fVar18;
      *(float *)((long)param_2 + uVar11 + 8) =
           fVar17 * fVar20 + fVar23 * fVar54 + fVar26 * fVar42 + fVar15;
      if (iVar6 <= (int)uVar14) {
        return;
      }
      uVar7 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
      fVar17 = *(float *)((long)param_1 + uVar7 + 4);
      fVar47 = param_3[5];
      fVar20 = param_3[9];
      fVar54 = *(float *)((long)param_1 + uVar7);
      fVar48 = param_3[4];
      fVar23 = param_3[8];
      fVar42 = *(float *)((long)param_1 + uVar7 + 8);
      fVar51 = param_3[6];
      fVar26 = param_3[10];
      fVar18 = param_3[7];
      fVar15 = param_3[0xb];
      *(float *)((long)param_2 + uVar7) =
           fVar17 * param_3[1] + *param_3 * fVar54 + param_3[2] * fVar42 + param_3[3];
      *(float *)((long)param_2 + uVar7 + 4) =
           fVar17 * fVar47 + fVar48 * fVar54 + fVar51 * fVar42 + fVar18;
      *(float *)((long)param_2 + uVar7 + 8) =
           fVar17 * fVar20 + fVar23 * fVar54 + fVar26 * fVar42 + fVar15;
      return;
    }
    if (iVar8 == 1) {
      if ((int)param_4 < 1) {
        return;
      }
      pfVar4 = param_2 + (int)param_4;
      if ((param_4 < 4 ||
           (param_1 < pfVar4 && param_2 < param_1 + (long)(int)param_4 * 3 ||
           param_3 < pfVar4 && param_2 < param_3 + 2)) ||
         (param_3 + 3 < pfVar4 && param_2 < param_3 + 3)) {
        pfVar4 = param_1;
        do {
          pfVar5 = pfVar4 + 3;
          *param_2 = param_3[1] * pfVar4[1] + *pfVar4 * *param_3 + pfVar4[2] * param_3[2] +
                     param_3[3];
          pfVar4 = pfVar5;
          param_2 = param_2 + 1;
        } while (pfVar5 != param_1 + ((ulong)(param_4 - 1) + 1) * 3);
        return;
      }
      fVar42 = param_3[1];
      fVar48 = param_3[2];
      fVar47 = param_3[3];
      fVar17 = *param_3;
      uVar14 = (param_4 - 4 >> 2) + 1;
      uVar9 = uVar14 * 4;
      uVar7 = (ulong)uVar9;
      uVar10 = 0;
      pfVar4 = param_2;
      pfVar5 = param_1;
      do {
        fVar51 = *pfVar5;
        fVar18 = pfVar5[1];
        fVar26 = pfVar5[2];
        fVar54 = pfVar5[3];
        fVar20 = pfVar5[4];
        fVar29 = pfVar5[5];
        pfVar1 = pfVar5 + 6;
        pfVar2 = pfVar5 + 7;
        pfVar3 = pfVar5 + 8;
        fVar15 = pfVar5[9];
        fVar23 = pfVar5[10];
        fVar32 = pfVar5[0xb];
        pfVar5 = pfVar5 + 0xc;
        uVar10 = uVar10 + 1;
        _local_b0 = CONCAT14(SUB41(fVar54,0),fVar51);
        _local_b0 = CONCAT15((char)((uint)fVar54 >> 8),_local_b0);
        _local_b0 = CONCAT16((char)((uint)fVar54 >> 0x10),_local_b0);
        _local_b0 = CONCAT17((char)((uint)fVar54 >> 0x18),_local_b0);
        _fStack_a8 = CONCAT14(SUB41(fVar15,0),*pfVar1);
        _fStack_a8 = CONCAT15((char)((uint)fVar15 >> 8),_fStack_a8);
        _fStack_a8 = CONCAT16((char)((uint)fVar15 >> 0x10),_fStack_a8);
        _fStack_a8 = CONCAT17((char)((uint)fVar15 >> 0x18),_fStack_a8);
        _local_a0 = CONCAT14(SUB41(fVar20,0),fVar18);
        _local_a0 = CONCAT15((char)((uint)fVar20 >> 8),_local_a0);
        _local_a0 = CONCAT16((char)((uint)fVar20 >> 0x10),_local_a0);
        _local_a0 = CONCAT17((char)((uint)fVar20 >> 0x18),_local_a0);
        _fStack_98 = CONCAT14(SUB41(fVar23,0),*pfVar2);
        _fStack_98 = CONCAT15((char)((uint)fVar23 >> 8),_fStack_98);
        _fStack_98 = CONCAT16((char)((uint)fVar23 >> 0x10),_fStack_98);
        _fStack_98 = CONCAT17((char)((uint)fVar23 >> 0x18),_fStack_98);
        *(ulong *)(pfVar4 + 2) =
             CONCAT44(fVar42 * (float)((ulong)_fStack_98 >> 0x20) +
                      fVar17 * (float)((ulong)_fStack_a8 >> 0x20) +
                      fVar48 * (float)(CONCAT17((char)((uint)fVar32 >> 0x18),
                                                CONCAT16((char)((uint)fVar32 >> 0x10),
                                                         CONCAT15((char)((uint)fVar32 >> 8),
                                                                  CONCAT14(SUB41(fVar32,0),*pfVar3))
                                                        )) >> 0x20) + fVar47,
                      fVar42 * *pfVar2 + fVar17 * *pfVar1 + fVar48 * *pfVar3 + fVar47);
        *(ulong *)pfVar4 =
             CONCAT44(fVar42 * (float)((ulong)_local_a0 >> 0x20) +
                      fVar17 * (float)((ulong)_local_b0 >> 0x20) +
                      fVar48 * (float)(CONCAT17((char)((uint)fVar29 >> 0x18),
                                                CONCAT16((char)((uint)fVar29 >> 0x10),
                                                         CONCAT15((char)((uint)fVar29 >> 8),
                                                                  CONCAT14(SUB41(fVar29,0),fVar26)))
                                               ) >> 0x20) + fVar47,
                      fVar42 * fVar18 + fVar17 * fVar51 + fVar48 * fVar26 + fVar47);
        pfVar4 = pfVar4 + 4;
      } while (uVar10 < uVar14);
      if (param_4 == uVar9) {
        return;
      }
      uVar11 = -(ulong)((uVar14 & 0x3fffffff) >> 0x1d) & 0xfffffffc00000000 | uVar7 << 2;
      *(float *)((long)param_2 + uVar11) =
           param_3[1] * param_1[uVar7 * 3 + 1] + param_1[uVar7 * 3] * *param_3 +
           param_1[uVar7 * 3 + 2] * param_3[2] + param_3[3];
      if ((int)param_4 <= (int)(uVar9 + 1)) {
        return;
      }
      *(float *)((long)param_2 + uVar11 + 4) =
           param_3[1] * param_1[uVar7 * 3 + 4] + param_1[uVar7 * 3 + 3] * *param_3 +
           param_1[uVar7 * 3 + 5] * param_3[2] + param_3[3];
      if ((int)param_4 <= (int)(uVar9 + 2)) {
        return;
      }
      *(float *)((long)param_2 + uVar11 + 8) =
           param_3[1] * param_1[uVar7 * 3 + 7] + param_1[uVar7 * 3 + 6] * *param_3 +
           param_1[uVar7 * 3 + 8] * param_3[2] + param_3[3];
      return;
    }
  }
  if ((iVar6 == 4) && (iVar8 == 4)) {
    iVar6 = param_4 * 4;
    if (0 < iVar6) {
      uVar10 = iVar6 - 1U >> 2;
      uVar14 = uVar10 + 1;
      if (((uVar14 < 5 || param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) ||
           param_3 < param_2 + (ulong)uVar14 * 4 && param_2 < param_3 + 1) ||
         (param_3 + 0x12 < param_2 + (ulong)uVar14 * 4 && param_2 < param_3 + 0xf)) {
        pfVar4 = param_2 + 1;
        do {
          fVar54 = param_1[1];
          pfVar5 = pfVar4 + 4;
          fVar42 = param_3[1];
          fVar17 = *param_1;
          fVar47 = *param_3;
          fVar51 = param_1[2];
          fVar18 = param_3[2];
          fVar48 = param_1[3];
          fVar15 = param_3[3];
          fVar20 = param_3[4];
          *pfVar4 = fVar54 * param_3[6] + param_3[5] * fVar17 + param_3[7] * fVar51 +
                    param_3[8] * fVar48 + param_3[9];
          pfVar4[-1] = fVar54 * fVar42 + fVar47 * fVar17 + fVar18 * fVar51 + fVar15 * fVar48 +
                       fVar20;
          fVar42 = param_3[0xb];
          fVar47 = param_3[10];
          fVar20 = param_3[0xc];
          fVar18 = param_3[0xd];
          fVar15 = param_3[0xe];
          pfVar4[2] = fVar54 * param_3[0x10] + param_3[0xf] * fVar17 + param_3[0x11] * fVar51 +
                      param_3[0x12] * fVar48 + param_3[0x13];
          pfVar4[1] = fVar54 * fVar42 + fVar47 * fVar17 + fVar20 * fVar51 + fVar18 * fVar48 + fVar15
          ;
          param_1 = param_1 + 4;
          pfVar4 = pfVar5;
        } while (pfVar5 != param_2 + (ulong)uVar10 * 4 + 5);
      }
      else {
        uVar10 = (uVar10 - 3 >> 2) + 1;
        if (iVar6 - 1U < 0xc) {
          uVar7 = 0;
        }
        else {
          fVar15 = param_3[8];
          fVar17 = *param_3;
          fVar48 = param_3[9];
          fVar29 = param_3[10];
          fVar23 = param_3[0xb];
          uVar9 = 0;
          fVar42 = param_3[0xc];
          fVar18 = param_3[0xd];
          fVar51 = param_3[0xe];
          fVar35 = param_3[1];
          fVar27 = param_3[2];
          fVar30 = param_3[3];
          fVar21 = param_3[4];
          fVar24 = param_3[5];
          fVar16 = param_3[6];
          fVar19 = param_3[7];
          fVar32 = param_3[0xf];
          fVar26 = param_3[0x10];
          fVar47 = param_3[0x11];
          fVar20 = param_3[0x12];
          fVar54 = param_3[0x13];
          pfVar4 = param_2;
          pfVar5 = param_1;
          do {
            fVar40 = *pfVar5;
            fVar28 = pfVar5[1];
            fVar33 = pfVar5[2];
            fVar43 = pfVar5[3];
            fVar38 = pfVar5[4];
            fVar31 = pfVar5[5];
            fVar36 = pfVar5[6];
            fVar44 = pfVar5[7];
            fVar22 = pfVar5[8];
            fVar34 = pfVar5[9];
            fVar39 = pfVar5[10];
            fVar45 = pfVar5[0xb];
            fVar25 = pfVar5[0xc];
            fVar37 = pfVar5[0xd];
            fVar41 = pfVar5[0xe];
            fVar46 = pfVar5[0xf];
            pfVar5 = pfVar5 + 0x10;
            uVar9 = uVar9 + 1;
            _local_b0 = CONCAT14(SUB41(fVar38,0),fVar40);
            _local_b0 = CONCAT15((char)((uint)fVar38 >> 8),_local_b0);
            _local_b0 = CONCAT16((char)((uint)fVar38 >> 0x10),_local_b0);
            _local_b0 = CONCAT17((char)((uint)fVar38 >> 0x18),_local_b0);
            _fStack_a8 = CONCAT14(SUB41(fVar25,0),fVar22);
            _fStack_a8 = CONCAT15((char)((uint)fVar25 >> 8),_fStack_a8);
            _fStack_a8 = CONCAT16((char)((uint)fVar25 >> 0x10),_fStack_a8);
            _fStack_a8 = CONCAT17((char)((uint)fVar25 >> 0x18),_fStack_a8);
            _local_a0 = CONCAT14(SUB41(fVar31,0),fVar28);
            _local_a0 = CONCAT15((char)((uint)fVar31 >> 8),_local_a0);
            _local_a0 = CONCAT16((char)((uint)fVar31 >> 0x10),_local_a0);
            _local_a0 = CONCAT17((char)((uint)fVar31 >> 0x18),_local_a0);
            _fStack_98 = CONCAT14(SUB41(fVar37,0),fVar34);
            _fStack_98 = CONCAT15((char)((uint)fVar37 >> 8),_fStack_98);
            _fStack_98 = CONCAT16((char)((uint)fVar37 >> 0x10),_fStack_98);
            _fStack_98 = CONCAT17((char)((uint)fVar37 >> 0x18),_fStack_98);
            fVar25 = (float)((ulong)_local_a0 >> 0x20);
            fVar31 = (float)((ulong)_fStack_98 >> 0x20);
            fVar52 = (float)((ulong)_local_b0 >> 0x20);
            fVar53 = (float)((ulong)_fStack_a8 >> 0x20);
            fVar49 = (float)(CONCAT17((char)((uint)fVar36 >> 0x18),
                                      CONCAT16((char)((uint)fVar36 >> 0x10),
                                               CONCAT15((char)((uint)fVar36 >> 8),
                                                        CONCAT14(SUB41(fVar36,0),fVar33)))) >> 0x20)
            ;
            fVar50 = (float)(CONCAT17((char)((uint)fVar41 >> 0x18),
                                      CONCAT16((char)((uint)fVar41 >> 0x10),
                                               CONCAT15((char)((uint)fVar41 >> 8),
                                                        CONCAT14(SUB41(fVar41,0),fVar39)))) >> 0x20)
            ;
            fVar37 = (float)(CONCAT17((char)((uint)fVar44 >> 0x18),
                                      CONCAT16((char)((uint)fVar44 >> 0x10),
                                               CONCAT15((char)((uint)fVar44 >> 8),
                                                        CONCAT14(SUB41(fVar44,0),fVar43)))) >> 0x20)
            ;
            fVar41 = (float)(CONCAT17((char)((uint)fVar46 >> 0x18),
                                      CONCAT16((char)((uint)fVar46 >> 0x10),
                                               CONCAT15((char)((uint)fVar46 >> 8),
                                                        CONCAT14(SUB41(fVar46,0),fVar45)))) >> 0x20)
            ;
            fVar36 = fVar28 * fVar16 + fVar40 * fVar24 + fVar33 * fVar19 + fVar43 * fVar15 + fVar48;
            fVar38 = fVar25 * fVar16 + fVar52 * fVar24 + fVar49 * fVar19 + fVar37 * fVar15 + fVar48;
            *pfVar4 = fVar28 * fVar35 + fVar40 * fVar17 + fVar33 * fVar27 + fVar43 * fVar30 + fVar21
            ;
            pfVar4[1] = fVar36;
            pfVar4[2] = fVar28 * fVar23 + fVar40 * fVar29 + fVar33 * fVar42 + fVar43 * fVar18 +
                        fVar51;
            pfVar4[3] = fVar28 * fVar26 + fVar40 * fVar32 + fVar33 * fVar47 + fVar43 * fVar20 +
                        fVar54;
            pfVar4[4] = fVar25 * fVar35 + fVar52 * fVar17 + fVar49 * fVar27 + fVar37 * fVar30 +
                        fVar21;
            pfVar4[5] = (float)(CONCAT17((char)((uint)fVar38 >> 0x18),
                                         CONCAT16((char)((uint)fVar38 >> 0x10),
                                                  CONCAT15((char)((uint)fVar38 >> 8),
                                                           CONCAT14(SUB41(fVar38,0),fVar36)))) >>
                               0x20);
            pfVar4[6] = fVar25 * fVar23 + fVar52 * fVar29 + fVar49 * fVar42 + fVar37 * fVar18 +
                        fVar51;
            pfVar4[7] = fVar25 * fVar26 + fVar52 * fVar32 + fVar49 * fVar47 + fVar37 * fVar20 +
                        fVar54;
            pfVar4[8] = fVar34 * fVar35 + fVar22 * fVar17 + fVar39 * fVar27 + fVar45 * fVar30 +
                        fVar21;
            pfVar4[9] = fVar34 * fVar16 + fVar22 * fVar24 + fVar39 * fVar19 + fVar45 * fVar15 +
                        fVar48;
            pfVar4[10] = fVar34 * fVar23 + fVar22 * fVar29 + fVar39 * fVar42 + fVar45 * fVar18 +
                         fVar51;
            pfVar4[0xb] = fVar34 * fVar26 + fVar22 * fVar32 + fVar39 * fVar47 + fVar45 * fVar20 +
                          fVar54;
            pfVar4[0xc] = fVar31 * fVar35 + fVar53 * fVar17 + fVar50 * fVar27 + fVar41 * fVar30 +
                          fVar21;
            pfVar4[0xd] = fVar31 * fVar16 + fVar53 * fVar24 + fVar50 * fVar19 + fVar41 * fVar15 +
                          fVar48;
            pfVar4[0xe] = fVar31 * fVar23 + fVar53 * fVar29 + fVar50 * fVar42 + fVar41 * fVar18 +
                          fVar51;
            pfVar4[0xf] = fVar31 * fVar26 + fVar53 * fVar32 + fVar50 * fVar47 + fVar41 * fVar20 +
                          fVar54;
            pfVar4 = pfVar4 + 0x10;
          } while (uVar9 < uVar10);
          uVar7 = (ulong)(uVar10 * 0x10);
          if (uVar14 == uVar10 * 4) {
            return;
          }
        }
        uVar11 = -(uVar7 >> 0x1f) & 0xfffffffc00000000 | uVar7 << 2;
        uVar14 = (int)uVar7 + 4;
        fVar54 = *(float *)((long)param_1 + uVar11 + 4);
        fVar42 = param_3[6];
        fVar17 = *(float *)((long)param_1 + uVar11);
        fVar47 = param_3[5];
        fVar51 = *(float *)((long)param_1 + uVar11 + 8);
        fVar18 = param_3[7];
        fVar48 = *(float *)((long)param_1 + uVar11 + 0xc);
        fVar15 = param_3[8];
        fVar20 = param_3[9];
        *(float *)((long)param_2 + uVar11) =
             fVar54 * param_3[1] + *param_3 * fVar17 + param_3[2] * fVar51 + param_3[3] * fVar48 +
             param_3[4];
        *(float *)((long)param_2 + uVar11 + 4) =
             fVar54 * fVar42 + fVar47 * fVar17 + fVar18 * fVar51 + fVar15 * fVar48 + fVar20;
        fVar42 = param_3[0x10];
        fVar47 = param_3[0xf];
        fVar20 = param_3[0x11];
        fVar18 = param_3[0x12];
        fVar15 = param_3[0x13];
        *(float *)((long)param_2 + uVar11 + 8) =
             fVar54 * param_3[0xb] + param_3[10] * fVar17 + param_3[0xc] * fVar51 +
             param_3[0xd] * fVar48 + param_3[0xe];
        *(float *)((long)param_2 + uVar11 + 0xc) =
             fVar54 * fVar42 + fVar47 * fVar17 + fVar20 * fVar51 + fVar18 * fVar48 + fVar15;
        if ((int)uVar14 < iVar6) {
          uVar11 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
          uVar14 = (int)uVar7 + 8;
          fVar54 = *(float *)((long)param_1 + uVar11 + 4);
          fVar42 = param_3[6];
          fVar17 = *(float *)((long)param_1 + uVar11);
          fVar47 = param_3[5];
          fVar51 = *(float *)((long)param_1 + uVar11 + 8);
          fVar18 = param_3[7];
          fVar48 = *(float *)((long)param_1 + uVar11 + 0xc);
          fVar15 = param_3[8];
          fVar20 = param_3[9];
          *(float *)((long)param_2 + uVar11) =
               fVar54 * param_3[1] + *param_3 * fVar17 + param_3[2] * fVar51 + param_3[3] * fVar48 +
               param_3[4];
          *(float *)((long)param_2 + uVar11 + 4) =
               fVar54 * fVar42 + fVar47 * fVar17 + fVar18 * fVar51 + fVar15 * fVar48 + fVar20;
          fVar42 = param_3[0x10];
          fVar47 = param_3[0xf];
          fVar20 = param_3[0x11];
          fVar18 = param_3[0x12];
          fVar15 = param_3[0x13];
          *(float *)((long)param_2 + uVar11 + 8) =
               fVar54 * param_3[0xb] + param_3[10] * fVar17 + param_3[0xc] * fVar51 +
               param_3[0xd] * fVar48 + param_3[0xe];
          *(float *)((long)param_2 + uVar11 + 0xc) =
               fVar54 * fVar42 + fVar47 * fVar17 + fVar20 * fVar51 + fVar18 * fVar48 + fVar15;
          if ((int)uVar14 < iVar6) {
            uVar7 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
            fVar54 = *(float *)((long)param_1 + uVar7 + 4);
            fVar42 = param_3[6];
            fVar17 = *(float *)((long)param_1 + uVar7);
            fVar47 = param_3[5];
            fVar51 = *(float *)((long)param_1 + uVar7 + 8);
            fVar18 = param_3[7];
            fVar48 = *(float *)((long)param_1 + uVar7 + 0xc);
            fVar15 = param_3[8];
            fVar20 = param_3[9];
            *(float *)((long)param_2 + uVar7) =
                 fVar54 * param_3[1] + *param_3 * fVar17 + param_3[2] * fVar51 + param_3[3] * fVar48
                 + param_3[4];
            *(float *)((long)param_2 + uVar7 + 4) =
                 fVar54 * fVar42 + fVar47 * fVar17 + fVar18 * fVar51 + fVar15 * fVar48 + fVar20;
            fVar42 = param_3[0x10];
            fVar47 = param_3[0xf];
            fVar20 = param_3[0x11];
            fVar18 = param_3[0x12];
            fVar15 = param_3[0x13];
            *(float *)((long)param_2 + uVar7 + 8) =
                 fVar54 * param_3[0xb] + param_3[10] * fVar17 + param_3[0xc] * fVar51 +
                 param_3[0xd] * fVar48 + param_3[0xe];
            *(float *)((long)param_2 + uVar7 + 0xc) =
                 fVar54 * fVar42 + fVar47 * fVar17 + fVar20 * fVar51 + fVar18 * fVar48 + fVar15;
          }
        }
      }
    }
  }
  else if (0 < (int)param_4) {
    uVar7 = -(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2;
    uVar14 = 0;
    do {
      lVar13 = 0;
      pfVar4 = param_3;
      if (0 < iVar8) {
        do {
          fVar17 = *(float *)((long)pfVar4 + uVar7);
          if (0 < iVar6) {
            lVar12 = 0;
            do {
              pfVar5 = pfVar4 + lVar12;
              pfVar1 = param_1 + lVar12;
              lVar12 = lVar12 + 1;
              fVar17 = fVar17 + *pfVar1 * *pfVar5;
            } while ((int)lVar12 < iVar6);
          }
          param_2[lVar13] = fVar17;
          lVar13 = lVar13 + 1;
          pfVar4 = (float *)((long)pfVar4 + uVar7 + 4);
        } while ((int)lVar13 < iVar8);
      }
      uVar14 = uVar14 + 1;
      param_1 = (float *)((long)param_1 + uVar7);
      param_2 = (float *)((long)param_2 +
                         (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2)
                         );
    } while (uVar14 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c5300 (2948 bytes) name=FUN_002c5300

void FUN_002c5300(double *param_1,double *param_2,double *param_3,uint param_4,ulong param_5,
                 ulong param_6)

{
  double *pdVar1;
  double *pdVar4;
  ulong uVar5;
  double *pdVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  long lVar11;
  long lVar12;
  uint uVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double *pdVar2;
  double *pdVar3;
  
  iVar7 = (int)param_5;
  iVar10 = (int)param_6;
  if ((iVar7 == 2) && (iVar10 == 2)) {
    if ((int)(param_4 * 2) < 1) {
      return;
    }
    uVar8 = param_4 * 2 - 1;
    uVar9 = uVar8 >> 1;
    uVar13 = uVar9 + 1;
    if (((3 < uVar13 && (param_1 + 4 <= param_2 || param_2 + 4 <= param_1)) &&
         (param_2 + (ulong)uVar13 * 2 <= param_3 || param_3 + 1 <= param_2)) &&
       (param_2 + (ulong)uVar13 * 2 <= param_3 + 5 || param_3 + 2 <= param_2)) {
      uVar9 = (uVar9 - 1 >> 1) + 1;
      if (uVar8 < 2) {
        uVar5 = 0;
      }
      else {
        dVar37 = param_3[1];
        dVar15 = *param_3;
        dVar36 = param_3[2];
        dVar35 = param_3[3];
        dVar34 = param_3[4];
        uVar8 = 0;
        dVar31 = param_3[5];
        pdVar4 = param_1;
        pdVar6 = param_2;
        do {
          dVar14 = *pdVar4;
          dVar21 = pdVar4[1];
          dVar18 = pdVar4[2];
          dVar24 = pdVar4[3];
          pdVar4 = pdVar4 + 4;
          uVar8 = uVar8 + 1;
          *pdVar6 = dVar21 * dVar37 + dVar14 * dVar15 + dVar36;
          pdVar6[1] = dVar21 * dVar34 + dVar14 * dVar35 + dVar31;
          pdVar6[2] = dVar24 * dVar37 + dVar18 * dVar15 + dVar36;
          pdVar6[3] = dVar24 * dVar34 + dVar18 * dVar35 + dVar31;
          pdVar6 = pdVar6 + 4;
        } while (uVar8 < uVar9);
        uVar5 = (ulong)(uVar9 * 4);
        if (uVar13 == uVar9 * 2) {
          return;
        }
      }
      uVar5 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      dVar15 = *(double *)((long)param_1 + uVar5 + 8);
      dVar34 = param_3[4];
      dVar31 = *(double *)((long)param_1 + uVar5);
      dVar36 = param_3[3];
      dVar35 = param_3[5];
      *(double *)((long)param_2 + uVar5) = dVar15 * param_3[1] + *param_3 * dVar31 + param_3[2];
      *(double *)((long)param_2 + uVar5 + 8) = dVar15 * dVar34 + dVar36 * dVar31 + dVar35;
      return;
    }
    pdVar4 = param_2 + 1;
    pdVar6 = param_1 + 1;
    do {
      dVar15 = pdVar6[-1];
      pdVar1 = pdVar6 + 2;
      dVar31 = *pdVar6;
      dVar35 = param_3[4];
      dVar36 = param_3[3];
      dVar34 = param_3[5];
      pdVar4[-1] = dVar31 * param_3[1] + *param_3 * dVar15 + param_3[2];
      *pdVar4 = dVar31 * dVar35 + dVar36 * dVar15 + dVar34;
      pdVar4 = pdVar4 + 2;
      pdVar6 = pdVar1;
    } while (pdVar1 != param_1 + (ulong)uVar9 * 2 + 3);
    return;
  }
  if (iVar7 == 3) {
    if (iVar10 == 3) {
      iVar7 = param_4 * 3;
      if (iVar7 < 1) {
        return;
      }
      uVar9 = (iVar7 - 1U) / 3;
      uVar13 = uVar9 + 1;
      pdVar4 = param_2 + (ulong)uVar13 * 3;
      if (((((3 < uVar13 && (param_1 + 6 <= param_2 || param_2 + 6 <= param_1)) &&
            (pdVar4 <= param_3 || param_3 + 1 <= param_2)) &&
           (pdVar4 <= param_3 + 9 || param_3 + 5 <= param_2)) &&
           (pdVar4 <= param_3 + 10 || param_3 + 4 <= param_2)) &&
         (pdVar4 <= param_3 + 0xb || param_3 + 8 <= param_2)) {
        uVar9 = (uVar9 - 1 >> 1) + 1;
        if (iVar7 - 1U < 3) {
          uVar5 = 0;
        }
        else {
          dVar39 = param_3[1];
          dVar15 = *param_3;
          dVar38 = param_3[2];
          dVar24 = param_3[3];
          dVar21 = param_3[4];
          uVar8 = 0;
          dVar18 = param_3[5];
          dVar14 = param_3[6];
          dVar37 = param_3[7];
          dVar36 = param_3[8];
          dVar35 = param_3[9];
          dVar34 = param_3[10];
          dVar31 = param_3[0xb];
          pdVar4 = param_2;
          pdVar6 = param_1;
          do {
            dVar16 = *pdVar6;
            dVar22 = pdVar6[1];
            dVar27 = pdVar6[2];
            dVar19 = pdVar6[3];
            dVar25 = pdVar6[4];
            dVar29 = pdVar6[5];
            pdVar6 = pdVar6 + 6;
            uVar8 = uVar8 + 1;
            *pdVar4 = dVar22 * dVar39 + dVar16 * dVar15 + dVar27 * dVar38 + dVar24;
            pdVar4[1] = dVar22 * dVar18 + dVar16 * dVar21 + dVar27 * dVar14 + dVar37;
            pdVar4[2] = dVar22 * dVar35 + dVar16 * dVar36 + dVar27 * dVar34 + dVar31;
            pdVar4[3] = dVar25 * dVar39 + dVar19 * dVar15 + dVar29 * dVar38 + dVar24;
            pdVar4[4] = dVar25 * dVar18 + dVar19 * dVar21 + dVar29 * dVar14 + dVar37;
            pdVar4[5] = dVar25 * dVar35 + dVar19 * dVar36 + dVar29 * dVar34 + dVar31;
            pdVar4 = pdVar4 + 6;
          } while (uVar8 < uVar9);
          uVar5 = (ulong)(uVar9 * 6);
          if (uVar13 == uVar9 * 2) {
            return;
          }
        }
        uVar5 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
        dVar15 = *(double *)((long)param_1 + uVar5 + 8);
        dVar34 = param_3[5];
        dVar21 = param_3[9];
        dVar37 = *(double *)((long)param_1 + uVar5);
        dVar35 = param_3[4];
        dVar24 = param_3[8];
        dVar31 = *(double *)((long)param_1 + uVar5 + 0x10);
        dVar36 = param_3[6];
        dVar38 = param_3[10];
        dVar18 = param_3[7];
        dVar14 = param_3[0xb];
        *(double *)((long)param_2 + uVar5) =
             dVar15 * param_3[1] + *param_3 * dVar37 + param_3[2] * dVar31 + param_3[3];
        *(double *)((long)param_2 + uVar5 + 8) =
             dVar15 * dVar34 + dVar35 * dVar37 + dVar36 * dVar31 + dVar18;
        *(double *)((long)param_2 + uVar5 + 0x10) =
             dVar15 * dVar21 + dVar24 * dVar37 + dVar38 * dVar31 + dVar14;
        return;
      }
      iVar10 = 0;
      do {
        dVar15 = param_1[1];
        dVar34 = param_3[5];
        iVar10 = iVar10 + 3;
        dVar37 = param_3[1];
        dVar35 = param_3[4];
        dVar14 = *param_1;
        dVar21 = *param_3;
        dVar36 = param_3[6];
        dVar31 = param_1[2];
        dVar38 = param_3[2];
        dVar24 = param_3[7];
        dVar18 = param_3[3];
        param_2[2] = dVar15 * param_3[9] + param_3[8] * dVar14 + param_3[10] * dVar31 + param_3[0xb]
        ;
        param_2[1] = dVar15 * dVar34 + dVar35 * dVar14 + dVar36 * dVar31 + dVar24;
        *param_2 = dVar15 * dVar37 + dVar21 * dVar14 + dVar38 * dVar31 + dVar18;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar10 < iVar7);
      return;
    }
    if (iVar10 == 1) {
      if ((int)param_4 < 1) {
        return;
      }
      pdVar4 = param_2 + (int)param_4;
      if ((3 < param_4 &&
           ((pdVar4 <= param_1 || param_1 + (long)(int)param_4 * 3 <= param_2) &&
           (pdVar4 <= param_3 || param_3 + 1 <= param_2))) &&
         (pdVar4 <= param_3 + 2 || param_3 + 2 <= param_2)) {
        dVar35 = param_3[1];
        dVar34 = param_3[2];
        dVar31 = param_3[3];
        dVar15 = *param_3;
        uVar13 = (param_4 - 2 >> 1) + 1;
        uVar8 = uVar13 * 2;
        uVar9 = 0;
        pdVar4 = param_2;
        pdVar6 = param_1;
        do {
          dVar36 = *pdVar6;
          dVar37 = pdVar6[1];
          dVar14 = pdVar6[2];
          pdVar1 = pdVar6 + 3;
          pdVar2 = pdVar6 + 4;
          pdVar3 = pdVar6 + 5;
          pdVar6 = pdVar6 + 6;
          uVar9 = uVar9 + 1;
          pdVar4[1] = dVar35 * *pdVar2 + dVar15 * *pdVar1 + dVar34 * *pdVar3 + dVar31;
          *pdVar4 = dVar35 * dVar37 + dVar15 * dVar36 + dVar34 * dVar14 + dVar31;
          pdVar4 = pdVar4 + 2;
        } while (uVar9 < uVar13);
        uVar5 = (ulong)uVar8;
        if (param_4 == uVar8) {
          return;
        }
        param_2[(int)uVar8] =
             param_3[1] * param_1[uVar5 * 3 + 1] + param_1[uVar5 * 3] * *param_3 +
             param_1[uVar5 * 3 + 2] * param_3[2] + param_3[3];
        return;
      }
      pdVar4 = param_1;
      do {
        pdVar6 = pdVar4 + 3;
        *param_2 = param_3[1] * pdVar4[1] + *pdVar4 * *param_3 + pdVar4[2] * param_3[2] + param_3[3]
        ;
        pdVar4 = pdVar6;
        param_2 = param_2 + 1;
      } while (pdVar6 != param_1 + ((ulong)(param_4 - 1) + 1) * 3);
      return;
    }
  }
  if ((iVar7 == 4) && (iVar10 == 4)) {
    if (0 < (int)(param_4 * 4)) {
      uVar8 = param_4 * 4 - 1;
      uVar9 = uVar8 >> 2;
      uVar13 = uVar9 + 1;
      pdVar4 = param_2 + (ulong)uVar13 * 4;
      if (((((uVar13 < 5 || param_2 < param_1 + 8 && param_1 < param_2 + 8) ||
            param_3 < pdVar4 && param_2 < param_3 + 1) ||
           param_3 + 0x11 < pdVar4 && param_2 < param_3 + 5) ||
           param_3 + 0x12 < pdVar4 && param_2 < param_3 + 8) ||
         (param_3 + 0x13 < pdVar4 && param_2 < param_3 + 0x14)) {
        pdVar4 = param_2 + 1;
        do {
          dVar37 = param_1[1];
          pdVar6 = pdVar4 + 4;
          dVar15 = param_3[1];
          dVar36 = *param_1;
          dVar31 = *param_3;
          dVar35 = param_1[2];
          dVar18 = param_3[2];
          dVar34 = param_1[3];
          dVar14 = param_3[3];
          dVar21 = param_3[4];
          *pdVar4 = dVar37 * param_3[6] + param_3[5] * dVar36 + param_3[7] * dVar35 +
                    param_3[8] * dVar34 + param_3[9];
          pdVar4[-1] = dVar37 * dVar15 + dVar31 * dVar36 + dVar18 * dVar35 + dVar14 * dVar34 +
                       dVar21;
          dVar15 = param_3[0xb];
          dVar31 = param_3[10];
          dVar21 = param_3[0xc];
          dVar18 = param_3[0xd];
          dVar14 = param_3[0xe];
          pdVar4[2] = dVar37 * param_3[0x10] + param_3[0xf] * dVar36 + param_3[0x11] * dVar35 +
                      param_3[0x12] * dVar34 + param_3[0x13];
          pdVar4[1] = dVar37 * dVar15 + dVar31 * dVar36 + dVar21 * dVar35 + dVar18 * dVar34 + dVar14
          ;
          param_1 = param_1 + 4;
          pdVar4 = pdVar6;
        } while (pdVar6 != param_2 + (ulong)uVar9 * 4 + 5);
      }
      else {
        uVar9 = (uVar9 - 1 >> 1) + 1;
        if (uVar8 < 4) {
          uVar5 = 0;
        }
        else {
          dVar35 = param_3[1];
          dVar15 = *param_3;
          dVar34 = param_3[2];
          dVar41 = param_3[3];
          dVar40 = param_3[4];
          uVar8 = 0;
          dVar29 = param_3[5];
          dVar27 = param_3[6];
          dVar25 = param_3[7];
          dVar22 = param_3[8];
          dVar19 = param_3[9];
          dVar16 = param_3[10];
          dVar39 = param_3[0xb];
          dVar38 = param_3[0xc];
          dVar24 = param_3[0xd];
          dVar21 = param_3[0xe];
          dVar18 = param_3[0xf];
          dVar14 = param_3[0x10];
          dVar37 = param_3[0x11];
          dVar36 = param_3[0x12];
          dVar31 = param_3[0x13];
          pdVar4 = param_2;
          pdVar6 = param_1;
          do {
            dVar17 = *pdVar6;
            dVar23 = pdVar6[1];
            dVar28 = pdVar6[2];
            dVar32 = pdVar6[3];
            dVar20 = pdVar6[4];
            dVar26 = pdVar6[5];
            dVar30 = pdVar6[6];
            dVar33 = pdVar6[7];
            pdVar6 = pdVar6 + 8;
            uVar8 = uVar8 + 1;
            *pdVar4 = dVar23 * dVar35 + dVar17 * dVar15 + dVar28 * dVar34 + dVar32 * dVar41 + dVar40
            ;
            pdVar4[1] = dVar23 * dVar27 + dVar17 * dVar29 + dVar28 * dVar25 + dVar32 * dVar22 +
                        dVar19;
            pdVar4[2] = dVar23 * dVar39 + dVar17 * dVar16 + dVar28 * dVar38 + dVar32 * dVar24 +
                        dVar21;
            pdVar4[3] = dVar23 * dVar14 + dVar17 * dVar18 + dVar28 * dVar37 + dVar32 * dVar36 +
                        dVar31;
            pdVar4[4] = dVar26 * dVar35 + dVar20 * dVar15 + dVar30 * dVar34 + dVar33 * dVar41 +
                        dVar40;
            pdVar4[5] = dVar26 * dVar27 + dVar20 * dVar29 + dVar30 * dVar25 + dVar33 * dVar22 +
                        dVar19;
            pdVar4[6] = dVar26 * dVar39 + dVar20 * dVar16 + dVar30 * dVar38 + dVar33 * dVar24 +
                        dVar21;
            pdVar4[7] = dVar26 * dVar14 + dVar20 * dVar18 + dVar30 * dVar37 + dVar33 * dVar36 +
                        dVar31;
            pdVar4 = pdVar4 + 8;
          } while (uVar8 < uVar9);
          uVar5 = (ulong)(uVar9 * 8);
          if (uVar13 == uVar9 * 2) {
            return;
          }
        }
        uVar5 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
        dVar37 = *(double *)((long)param_1 + uVar5 + 8);
        dVar15 = param_3[6];
        dVar36 = *(double *)((long)param_1 + uVar5);
        dVar31 = param_3[5];
        dVar35 = *(double *)((long)param_1 + uVar5 + 0x10);
        dVar18 = param_3[7];
        dVar34 = *(double *)((long)param_1 + uVar5 + 0x18);
        dVar14 = param_3[8];
        dVar21 = param_3[9];
        *(double *)((long)param_2 + uVar5) =
             dVar37 * param_3[1] + *param_3 * dVar36 + param_3[2] * dVar35 + param_3[3] * dVar34 +
             param_3[4];
        *(double *)((long)param_2 + uVar5 + 8) =
             dVar37 * dVar15 + dVar31 * dVar36 + dVar18 * dVar35 + dVar14 * dVar34 + dVar21;
        dVar15 = param_3[0x10];
        dVar31 = param_3[0xf];
        dVar21 = param_3[0x11];
        dVar18 = param_3[0x12];
        dVar14 = param_3[0x13];
        *(double *)((long)param_2 + uVar5 + 0x10) =
             dVar37 * param_3[0xb] + param_3[10] * dVar36 + param_3[0xc] * dVar35 +
             param_3[0xd] * dVar34 + param_3[0xe];
        *(double *)((long)param_2 + uVar5 + 0x18) =
             dVar37 * dVar15 + dVar31 * dVar36 + dVar21 * dVar35 + dVar18 * dVar34 + dVar14;
      }
    }
  }
  else if (0 < (int)param_4) {
    uVar5 = -(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3;
    uVar13 = 0;
    do {
      lVar12 = 0;
      pdVar4 = param_3;
      if (0 < iVar10) {
        do {
          dVar15 = *(double *)((long)pdVar4 + uVar5);
          if (0 < iVar7) {
            lVar11 = 0;
            do {
              pdVar6 = pdVar4 + lVar11;
              pdVar1 = param_1 + lVar11;
              lVar11 = lVar11 + 1;
              dVar15 = dVar15 + *pdVar1 * *pdVar6;
            } while ((int)lVar11 < iVar7);
          }
          param_2[lVar12] = dVar15;
          lVar12 = lVar12 + 1;
          pdVar4 = (double *)((long)pdVar4 + uVar5 + 8);
        } while ((int)lVar12 < iVar10);
      }
      uVar13 = uVar13 + 1;
      param_1 = (double *)((long)param_1 + uVar5);
      param_2 = (double *)
                ((long)param_2 +
                (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
    } while (uVar13 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c5e88 (1116 bytes) name=FUN_002c5e88

void FUN_002c5e88(float *param_1,float *param_2,double *param_3,int param_4,int param_5,
                 ulong param_6)

{
  int iVar1;
  double *pdVar2;
  double dVar3;
  float *pfVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  double *pdVar8;
  int iVar9;
  double dVar10;
  double dVar11;
  float fVar12;
  double dVar13;
  double dVar14;
  float fVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  
  dVar3 = DAT_002c62e8;
  iVar5 = (int)param_6;
  if ((param_5 == 2) && (iVar5 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    dVar21 = param_3[6];
    pfVar4 = param_1 + 1;
    dVar17 = param_3[7];
    dVar16 = param_3[8];
    do {
      while( true ) {
        dVar14 = (double)*pfVar4;
        dVar11 = (double)pfVar4[-1];
        dVar10 = dVar14 * dVar17 + dVar21 * dVar11 + dVar16;
        if (ABS(dVar10) <= dVar3) break;
        dVar10 = 1.0 / dVar10;
        pfVar4 = pfVar4 + 2;
        dVar23 = param_3[4];
        dVar24 = param_3[3];
        dVar13 = param_3[5];
        *param_2 = (float)(dVar10 * (dVar14 * param_3[1] + *param_3 * dVar11 + param_3[2]));
        param_2[1] = (float)(dVar10 * (dVar14 * dVar23 + dVar24 * dVar11 + dVar13));
        param_2 = param_2 + 2;
        if (pfVar4 == param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3) {
          return;
        }
      }
      pfVar4 = pfVar4 + 2;
      param_2[1] = 0.0;
      *param_2 = 0.0;
      param_2 = param_2 + 2;
    } while (pfVar4 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (param_5 == 3) {
    if (iVar5 == 3) {
      if (param_4 * 3 < 1) {
        return;
      }
      dVar10 = param_3[0xc];
      dVar21 = param_3[0xd];
      iVar5 = 0;
      dVar17 = param_3[0xe];
      dVar16 = param_3[0xf];
      do {
        dVar23 = (double)param_1[1];
        dVar13 = (double)*param_1;
        dVar14 = (double)param_1[2];
        dVar11 = dVar23 * dVar21 + dVar10 * dVar13 + dVar17 * dVar14 + dVar16;
        if (dVar3 < ABS(dVar11)) {
          dVar11 = 1.0 / dVar11;
          dVar18 = param_3[5];
          dVar25 = param_3[9];
          dVar26 = param_3[8];
          dVar19 = param_3[4];
          dVar24 = param_3[6];
          dVar27 = param_3[10];
          dVar22 = param_3[7];
          dVar20 = param_3[0xb];
          *param_2 = (float)(dVar11 * (dVar23 * param_3[1] + *param_3 * dVar13 + param_3[2] * dVar14
                                      + param_3[3]));
          param_2[1] = (float)(dVar11 * (dVar23 * dVar18 + dVar19 * dVar13 + dVar24 * dVar14 +
                                        dVar22));
          param_2[2] = (float)(dVar11 * (dVar23 * dVar25 + dVar26 * dVar13 + dVar27 * dVar14 +
                                        dVar20));
        }
        else {
          param_2[2] = 0.0;
          param_2[1] = 0.0;
          *param_2 = 0.0;
        }
        iVar5 = iVar5 + 3;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar5 < param_4 * 3);
      return;
    }
    if (iVar5 == 2) {
      if (param_4 < 1) {
        return;
      }
      dVar10 = param_3[8];
      dVar21 = param_3[9];
      dVar17 = param_3[10];
      dVar16 = param_3[0xb];
      pfVar4 = param_1 + ((ulong)(param_4 - 1) + 1) * 3;
      do {
        dVar23 = (double)param_1[1];
        dVar13 = (double)*param_1;
        fVar15 = 0.0;
        dVar14 = (double)param_1[2];
        dVar11 = dVar23 * dVar21 + dVar10 * dVar13 + dVar17 * dVar14 + dVar16;
        fVar12 = fVar15;
        if (dVar3 < ABS(dVar11)) {
          dVar11 = 1.0 / dVar11;
          fVar12 = (float)(dVar11 * (dVar23 * param_3[1] + *param_3 * dVar13 + param_3[2] * dVar14 +
                                    param_3[3]));
          fVar15 = (float)(dVar11 * (dVar23 * param_3[5] + param_3[4] * dVar13 + param_3[6] * dVar14
                                    + param_3[7]));
        }
        param_1 = param_1 + 3;
        param_2[1] = fVar15;
        *param_2 = fVar12;
        param_2 = param_2 + 2;
      } while (param_1 != pfVar4);
      return;
    }
  }
  if (0 < param_4) {
    iVar1 = iVar5 + param_5 * iVar5;
    dVar16 = param_3[(long)iVar1 + (long)param_5];
    iVar9 = 0;
    do {
      dVar17 = dVar16;
      if (0 < param_5) {
        lVar6 = 0;
        do {
          pfVar4 = param_1 + lVar6;
          lVar7 = iVar1 + lVar6;
          lVar6 = lVar6 + 1;
          dVar17 = dVar17 + (double)*pfVar4 * param_3[lVar7];
        } while ((int)lVar6 < param_5);
      }
      if (dVar3 < ABS(dVar17)) {
        if (0 < iVar5) {
          lVar6 = 0;
          pdVar8 = param_3;
          do {
            dVar21 = pdVar8[param_5];
            if (0 < param_5) {
              lVar7 = 0;
              do {
                pfVar4 = param_1 + lVar7;
                pdVar2 = pdVar8 + lVar7;
                lVar7 = lVar7 + 1;
                dVar21 = dVar21 + (double)*pfVar4 * *pdVar2;
              } while ((int)lVar7 < param_5);
            }
            pdVar8 = pdVar8 + (long)param_5 + 1;
            param_2[lVar6] = (float)(dVar17 * dVar21);
            lVar6 = lVar6 + 1;
          } while ((int)lVar6 < iVar5);
        }
      }
      else if (0 < iVar5) {
        memset(param_2,0,((ulong)(iVar5 - 1) + 1) * 4);
      }
      iVar9 = iVar9 + 1;
      param_1 = param_1 + param_5;
      param_2 = (float *)((long)param_2 +
                         (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2)
                         );
    } while (iVar9 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c62f0 (1048 bytes) name=FUN_002c62f0

void FUN_002c62f0(double *param_1,double *param_2,double *param_3,int param_4,ulong param_5,
                 ulong param_6)

{
  int iVar1;
  double *pdVar2;
  double *pdVar3;
  double dVar4;
  double *pdVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  long lVar9;
  ulong uVar10;
  int iVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  
  dVar4 = DAT_002c6708;
  iVar7 = (int)param_6;
  iVar6 = (int)param_5;
  if ((iVar6 == 2) && (iVar7 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    pdVar5 = param_1 + 1;
    do {
      while( true ) {
        dVar14 = *pdVar5;
        dVar13 = pdVar5[-1];
        dVar12 = dVar14 * param_3[7] + param_3[6] * dVar13 + param_3[8];
        if (ABS(dVar12) <= dVar4) break;
        dVar12 = 1.0 / dVar12;
        pdVar5 = pdVar5 + 2;
        *param_2 = dVar12 * (dVar14 * param_3[1] + *param_3 * dVar13 + param_3[2]);
        param_2[1] = dVar12 * (dVar14 * param_3[4] + param_3[3] * dVar13 + param_3[5]);
        param_2 = param_2 + 2;
        if (pdVar5 == param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3) {
          return;
        }
      }
      pdVar5 = pdVar5 + 2;
      param_2[1] = 0.0;
      *param_2 = 0.0;
      param_2 = param_2 + 2;
    } while (pdVar5 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (iVar6 == 3) {
    if (iVar7 == 3) {
      if (param_4 * 3 < 1) {
        return;
      }
      iVar6 = 0;
      do {
        dVar15 = param_1[1];
        dVar14 = *param_1;
        dVar13 = param_1[2];
        dVar12 = dVar15 * param_3[0xd] + param_3[0xc] * dVar14 + param_3[0xe] * dVar13 +
                 param_3[0xf];
        if (dVar4 < ABS(dVar12)) {
          dVar12 = 1.0 / dVar12;
          *param_2 = dVar12 * (dVar15 * param_3[1] + *param_3 * dVar14 + param_3[2] * dVar13 +
                              param_3[3]);
          param_2[1] = dVar12 * (dVar15 * param_3[5] + param_3[4] * dVar14 + param_3[6] * dVar13 +
                                param_3[7]);
          param_2[2] = dVar12 * (dVar15 * param_3[9] + param_3[8] * dVar14 + param_3[10] * dVar13 +
                                param_3[0xb]);
        }
        else {
          param_2[2] = 0.0;
          param_2[1] = 0.0;
          *param_2 = 0.0;
        }
        iVar6 = iVar6 + 3;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar6 < param_4 * 3);
      return;
    }
    if (iVar7 == 2) {
      if (param_4 < 1) {
        return;
      }
      pdVar5 = param_1 + ((ulong)(param_4 - 1) + 1) * 3;
      do {
        dVar15 = param_1[1];
        dVar14 = *param_1;
        dVar13 = param_1[2];
        dVar12 = dVar15 * param_3[9] + param_3[8] * dVar14 + param_3[10] * dVar13 + param_3[0xb];
        if (dVar4 < ABS(dVar12)) {
          dVar12 = 1.0 / dVar12;
          *param_2 = dVar12 * (dVar15 * param_3[1] + *param_3 * dVar14 + param_3[2] * dVar13 +
                              param_3[3]);
          param_2[1] = dVar12 * (dVar15 * param_3[5] + param_3[4] * dVar14 + param_3[6] * dVar13 +
                                param_3[7]);
        }
        else {
          param_2[1] = 0.0;
          *param_2 = 0.0;
        }
        param_1 = param_1 + 3;
        param_2 = param_2 + 2;
      } while (param_1 != pdVar5);
      return;
    }
  }
  if (0 < param_4) {
    uVar10 = -(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3;
    iVar1 = iVar7 + iVar6 * iVar7;
    iVar11 = 0;
    do {
      dVar12 = *(double *)((long)param_3 + uVar10 + (long)iVar1 * 8);
      if (0 < iVar6) {
        lVar8 = 0;
        do {
          lVar9 = iVar1 + lVar8;
          pdVar5 = param_1 + lVar8;
          lVar8 = lVar8 + 1;
          dVar12 = dVar12 + *pdVar5 * param_3[lVar9];
        } while ((int)lVar8 < iVar6);
      }
      if (dVar4 < ABS(dVar12)) {
        if (0 < iVar7) {
          lVar8 = 0;
          pdVar5 = param_3;
          do {
            dVar13 = *(double *)((long)pdVar5 + uVar10);
            if (0 < iVar6) {
              lVar9 = 0;
              do {
                pdVar2 = pdVar5 + lVar9;
                pdVar3 = param_1 + lVar9;
                lVar9 = lVar9 + 1;
                dVar13 = dVar13 + *pdVar3 * *pdVar2;
              } while ((int)lVar9 < iVar6);
            }
            pdVar5 = (double *)((long)pdVar5 + uVar10 + 8);
            param_2[lVar8] = dVar12 * dVar13;
            lVar8 = lVar8 + 1;
          } while ((int)lVar8 < iVar7);
        }
      }
      else if (0 < iVar7) {
        memset(param_2,0,((ulong)(iVar7 - 1) + 1) * 8);
      }
      iVar11 = iVar11 + 1;
      param_1 = (double *)((long)param_1 + uVar10);
      param_2 = (double *)
                ((long)param_2 +
                (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
    } while (iVar11 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c6710 (236 bytes) name=FUN_002c6710

undefined1  [16] FUN_002c6710(ushort *param_1,long param_2,int param_3)

{
  ushort *puVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  ushort *puVar5;
  ulong uVar6;
  ushort *puVar7;
  ulong uVar8;
  double dVar9;
  undefined1 auVar10 [16];
  
  if (param_3 < 4) {
    dVar9 = 0.0;
    uVar8 = 0;
  }
  else {
    dVar9 = 0.0;
    uVar2 = param_3 - 4U >> 2;
    puVar5 = (ushort *)(param_2 + 2);
    puVar7 = param_1;
    do {
      puVar1 = puVar5 + 4;
      dVar9 = dVar9 + (double)puVar7[1] * (double)*puVar5 + (double)puVar5[-1] * (double)*puVar7 +
                      (double)puVar5[1] * (double)puVar7[2] + (double)puVar5[2] * (double)puVar7[3];
      puVar5 = puVar1;
      puVar7 = puVar7 + 4;
    } while (puVar1 != (ushort *)(param_2 + (ulong)uVar2 * 8 + 10));
    uVar8 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar8 < param_3) {
    uVar6 = -(uVar8 >> 0x1f) & 0xfffffffe00000000 | uVar8 << 1;
    lVar4 = 0;
    do {
      lVar3 = lVar4 + uVar6;
      puVar5 = (ushort *)(param_2 + uVar6 + lVar4);
      lVar4 = lVar4 + 2;
      dVar9 = dVar9 + (double)*puVar5 * (double)*(ushort *)((long)param_1 + lVar3);
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar8) + 1) * 2);
  }
  auVar10._8_8_ = 0;
  auVar10._0_8_ = dVar9;
  return auVar10;
}


==================================================================

### FUNC 002c67fc (236 bytes) name=FUN_002c67fc

undefined1  [16] FUN_002c67fc(short *param_1,long param_2,int param_3)

{
  short *psVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  short *psVar5;
  ulong uVar6;
  short *psVar7;
  ulong uVar8;
  double dVar9;
  undefined1 auVar10 [16];
  
  if (param_3 < 4) {
    dVar9 = 0.0;
    uVar8 = 0;
  }
  else {
    dVar9 = 0.0;
    uVar2 = param_3 - 4U >> 2;
    psVar5 = (short *)(param_2 + 2);
    psVar7 = param_1;
    do {
      psVar1 = psVar5 + 4;
                    /* catch() { ... } // from try @ 002c69a4 with catch @ 002c6838 */
      dVar9 = dVar9 + (double)(int)psVar7[1] * (double)(int)*psVar5 +
                      (double)(int)psVar5[-1] * (double)(int)*psVar7 +
                      (double)(int)psVar5[1] * (double)(int)psVar7[2] +
                      (double)(int)psVar5[2] * (double)(int)psVar7[3];
      psVar5 = psVar1;
      psVar7 = psVar7 + 4;
    } while (psVar1 != (short *)(param_2 + (ulong)uVar2 * 8 + 10));
    uVar8 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar8 < param_3) {
    uVar6 = -(uVar8 >> 0x1f) & 0xfffffffe00000000 | uVar8 << 1;
    lVar4 = 0;
    do {
      lVar3 = lVar4 + uVar6;
      psVar5 = (short *)(param_2 + uVar6 + lVar4);
      lVar4 = lVar4 + 2;
      dVar9 = dVar9 + (double)(int)*psVar5 * (double)(int)*(short *)((long)param_1 + lVar3);
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar8) + 1) * 2);
  }
  auVar10._8_8_ = 0;
  auVar10._0_8_ = dVar9;
  return auVar10;
}


==================================================================

### FUNC 002c68e8 (236 bytes) name=FUN_002c68e8

undefined1  [16] FUN_002c68e8(int *param_1,long param_2,int param_3)

{
  int *piVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  int *piVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  double dVar9;
  undefined1 auVar10 [16];
  
  if (param_3 < 4) {
    dVar9 = 0.0;
    uVar8 = 0;
  }
  else {
    dVar9 = 0.0;
    uVar2 = param_3 - 4U >> 2;
    piVar5 = (int *)(param_2 + 4);
    piVar7 = param_1;
    do {
      piVar1 = piVar5 + 4;
                    /* try { // try from 002c692c to 003c692f has its CatchHandler @ 002c6954 */
                    /* try { // try from 002c693c to 003c693f has its CatchHandler @ 002c69d8 */
                    /* try { // try from 002c694c to 003c694f has its CatchHandler @ 002c69a8 */
                    /* catch() { ... } // from try @ 002c692c with catch @ 002c6954 */
      dVar9 = dVar9 + (double)piVar7[1] * (double)*piVar5 + (double)piVar5[-1] * (double)*piVar7 +
                      (double)piVar5[1] * (double)piVar7[2] + (double)piVar5[2] * (double)piVar7[3];
      piVar5 = piVar1;
      piVar7 = piVar7 + 4;
    } while (piVar1 != (int *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar8 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar8 < param_3) {
    uVar6 = -(uVar8 >> 0x1f) & 0xfffffffc00000000 | uVar8 << 2;
    lVar4 = 0;
    do {
      lVar3 = lVar4 + uVar6;
                    /* try { // try from 002c69a4 to 003c69a7 has its CatchHandler @ 002c6838 */
                    /* catch() { ... } // from try @ 002c694c with catch @ 002c69a8 */
      piVar5 = (int *)(param_2 + uVar6 + lVar4);
      lVar4 = lVar4 + 4;
      dVar9 = dVar9 + (double)*piVar5 * (double)*(int *)((long)param_1 + lVar3);
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar8) + 1) * 4);
  }
  auVar10._8_8_ = 0;
  auVar10._0_8_ = dVar9;
  return auVar10;
}


==================================================================

### FUNC 002c69d4 (200 bytes) name=FUN_002c69d4

undefined1  [16] FUN_002c69d4(double *param_1,long param_2,int param_3)

{
  double *pdVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  double *pdVar5;
  ulong uVar6;
  double *pdVar7;
  ulong uVar8;
  double dVar9;
  undefined1 auVar10 [16];
  
                    /* catch() { ... } // from try @ 002c693c with catch @ 002c69d8 */
  if (param_3 < 4) {
    dVar9 = 0.0;
    uVar6 = 0;
  }
  else {
    uVar2 = param_3 - 4U >> 2;
    dVar9 = 0.0;
    pdVar5 = (double *)(param_2 + 8);
    pdVar7 = param_1;
    do {
      pdVar1 = pdVar5 + 4;
      dVar9 = dVar9 + pdVar7[1] * *pdVar5 + pdVar5[-1] * *pdVar7 + pdVar5[1] * pdVar7[2] +
                      pdVar5[2] * pdVar7[3];
      pdVar5 = pdVar1;
      pdVar7 = pdVar7 + 4;
    } while (pdVar1 != (double *)(param_2 + (ulong)uVar2 * 0x20 + 0x28));
    uVar6 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar6 < param_3) {
    uVar8 = -(uVar6 >> 0x1f) & 0xfffffff800000000 | uVar6 << 3;
    lVar4 = 0;
    do {
      lVar3 = lVar4 + uVar8;
      pdVar5 = (double *)(param_2 + uVar8 + lVar4);
      lVar4 = lVar4 + 8;
      dVar9 = dVar9 + *pdVar5 * *(double *)((long)param_1 + lVar3);
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar6) + 1) * 8);
  }
  auVar10._8_8_ = 0;
  auVar10._0_8_ = dVar9;
  return auVar10;
}


==================================================================

### FUNC 002c6a9c (1084 bytes) name=FUN_002c6a9c

void FUN_002c6a9c(int *param_1,undefined4 *param_2,double *param_3,int param_4,int param_5,
                 uint param_6)

{
  int iVar1;
  double *pdVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  undefined4 *puVar8;
  double *pdVar9;
  undefined4 *puVar10;
  int iVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  
  if ((param_5 == 2) && (param_6 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    piVar6 = param_1 + 1;
    puVar8 = param_2 + 1;
    do {
      iVar11 = piVar6[-1];
      piVar7 = piVar6 + 2;
      iVar1 = *piVar6;
      lVar3 = lrint((double)iVar1 * param_3[1] + *param_3 * (double)iVar11 + param_3[2]);
      lVar4 = lrint((double)iVar1 * param_3[4] + param_3[3] * (double)iVar11 + param_3[5]);
      puVar8[-1] = (int)lVar3;
      *puVar8 = (int)lVar4;
      piVar6 = piVar7;
      puVar8 = puVar8 + 2;
    } while (piVar7 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (param_5 == 3) {
    if (param_6 == 3) {
      if (param_4 * 3 < 1) {
        return;
      }
      iVar11 = 0;
      do {
        iVar1 = *param_1;
        iVar11 = iVar11 + 3;
        piVar6 = param_1 + 2;
        dVar14 = (double)param_1[1];
        param_1 = param_1 + 3;
        dVar13 = (double)iVar1;
        dVar12 = (double)*piVar6;
        lVar3 = lrint(dVar14 * param_3[1] + *param_3 * dVar13 + param_3[2] * dVar12 + param_3[3]);
        lVar4 = lrint(dVar14 * param_3[5] + param_3[4] * dVar13 + param_3[6] * dVar12 + param_3[7]);
        lVar5 = lrint(dVar14 * param_3[9] + param_3[8] * dVar13 + param_3[10] * dVar12 +
                      param_3[0xb]);
        *param_2 = (int)lVar3;
        param_2[1] = (int)lVar4;
        param_2[2] = (int)lVar5;
        param_2 = param_2 + 3;
      } while (iVar11 < param_4 * 3);
      return;
    }
    if (param_6 == 1) {
      if (param_4 < 1) {
        return;
      }
      piVar6 = param_1;
      do {
        piVar7 = piVar6 + 3;
        lVar3 = lrint((double)piVar6[1] * param_3[1] + (double)*piVar6 * *param_3 +
                      (double)piVar6[2] * param_3[2] + param_3[3]);
        *param_2 = (int)lVar3;
        piVar6 = piVar7;
        param_2 = param_2 + 1;
      } while (piVar7 != param_1 + ((ulong)(param_4 - 1) + 1) * 3);
      return;
    }
  }
  if ((param_5 == 4) && (param_6 == 4)) {
    if (0 < param_4 * 4) {
      puVar8 = param_2 + 1;
      do {
        puVar10 = puVar8 + 4;
        dVar16 = (double)param_1[1];
        dVar15 = (double)*param_1;
        dVar14 = (double)param_1[2];
        dVar13 = (double)param_1[3];
        lVar3 = lrint(dVar16 * param_3[1] + *param_3 * dVar15 + param_3[2] * dVar14 +
                      param_3[3] * dVar13 + param_3[4]);
        lVar4 = lrint(dVar16 * param_3[6] + param_3[5] * dVar15 + param_3[7] * dVar14 +
                      param_3[8] * dVar13 + param_3[9]);
        puVar8[-1] = (int)lVar3;
        dVar12 = param_3[0xb];
        *puVar8 = (int)lVar4;
        lVar3 = lrint(dVar16 * dVar12 + param_3[10] * dVar15 + param_3[0xc] * dVar14 +
                      param_3[0xd] * dVar13 + param_3[0xe]);
        lVar4 = lrint(dVar16 * param_3[0x10] + param_3[0xf] * dVar15 + param_3[0x11] * dVar14 +
                      param_3[0x12] * dVar13 + param_3[0x13]);
        puVar8[1] = (int)lVar3;
        puVar8[2] = (int)lVar4;
        param_1 = param_1 + 4;
        puVar8 = puVar10;
      } while (puVar10 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 5);
    }
  }
  else if (0 < param_4) {
    iVar11 = 0;
    do {
      if (0 < (int)param_6) {
        pdVar9 = param_3;
        puVar8 = param_2;
        do {
          dVar12 = pdVar9[param_5];
          if (0 < param_5) {
            lVar3 = 0;
            do {
              piVar6 = param_1 + lVar3;
              pdVar2 = pdVar9 + lVar3;
              lVar3 = lVar3 + 1;
              dVar12 = dVar12 + (double)*piVar6 * *pdVar2;
            } while ((int)lVar3 < param_5);
          }
          lVar3 = lrint(dVar12);
          puVar10 = puVar8 + 1;
          *puVar8 = (int)lVar3;
          pdVar9 = pdVar9 + (long)param_5 + 1;
          puVar8 = puVar10;
        } while (param_2 + (ulong)(param_6 - 1) + 1 != puVar10);
      }
      iVar11 = iVar11 + 1;
      param_1 = param_1 + param_5;
      param_2 = (undefined4 *)
                ((long)param_2 +
                (-(ulong)(param_6 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_6 << 2));
    } while (iVar11 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c6ed8 (1444 bytes) name=FUN_002c6ed8

void FUN_002c6ed8(short *param_1,undefined2 *param_2,float *param_3,int param_4,int param_5,
                 uint param_6)

{
  short *psVar1;
  short sVar2;
  short sVar3;
  float *pfVar4;
  long lVar5;
  undefined2 uVar6;
  undefined2 uVar7;
  undefined2 *puVar8;
  short *psVar9;
  undefined2 uVar10;
  undefined2 uVar11;
  float *pfVar12;
  undefined2 *puVar13;
  undefined2 uVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  int iVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  
  if ((param_5 == 2) && (param_6 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    puVar8 = param_2 + 1;
    psVar9 = param_1 + 1;
    do {
      sVar2 = *psVar9;
      psVar1 = psVar9 + 2;
      sVar3 = psVar9[-1];
      lVar5 = lrintf((float)(int)sVar2 * param_3[1] + *param_3 * (float)(int)sVar3 + param_3[2]);
      uVar10 = (short)lVar5;
      if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = 0x7fff, (int)lVar5 < 1)) {
        uVar10 = 0x8000;
      }
      lVar5 = lrintf((float)(int)sVar2 * param_3[4] + param_3[3] * (float)(int)sVar3 + param_3[5]);
      uVar6 = (short)lVar5;
      if ((0xffff < (int)lVar5 + 0x8000U) && (uVar6 = 0x7fff, (int)lVar5 < 1)) {
        uVar6 = 0x8000;
      }
      puVar8[-1] = uVar10;
      *puVar8 = uVar6;
      puVar8 = puVar8 + 2;
      psVar9 = psVar1;
    } while (psVar1 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (param_5 == 3) {
    if (param_6 == 3) {
      if (param_4 * 3 < 1) {
        return;
      }
      iVar18 = 0;
      do {
        iVar18 = iVar18 + 3;
        fVar20 = (float)(int)param_1[1];
        fVar19 = (float)(int)*param_1;
        fVar17 = (float)(int)param_1[2];
        lVar5 = lrintf(fVar20 * param_3[1] + *param_3 * fVar19 + param_3[2] * fVar17 + param_3[3]);
        uVar6 = 0x8000;
        uVar11 = 0x7fff;
        uVar10 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = uVar11, (int)lVar5 < 1)) {
          uVar10 = uVar6;
        }
        lVar5 = lrintf(fVar20 * param_3[5] + param_3[4] * fVar19 + param_3[6] * fVar17 + param_3[7])
        ;
        uVar14 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar14 = uVar11, (int)lVar5 < 1)) {
          uVar14 = uVar6;
        }
        lVar5 = lrintf(fVar20 * param_3[9] + param_3[8] * fVar19 + param_3[10] * fVar17 +
                       param_3[0xb]);
        uVar7 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar7 = uVar11, (int)lVar5 < 1)) {
          uVar7 = uVar6;
        }
        *param_2 = uVar10;
        param_2[1] = uVar14;
        param_2[2] = uVar7;
        param_2 = param_2 + 3;
        param_1 = param_1 + 3;
      } while (iVar18 < param_4 * 3);
      return;
    }
    if (param_6 == 1) {
      if (param_4 < 1) {
        return;
      }
      psVar9 = param_1;
      do {
        psVar1 = psVar9 + 3;
        lVar5 = lrintf((float)(int)psVar9[1] * param_3[1] + (float)(int)*psVar9 * *param_3 +
                       (float)(int)psVar9[2] * param_3[2] + param_3[3]);
        uVar10 = (undefined2)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = 0x7fff, (int)lVar5 < 1)) {
          uVar10 = 0x8000;
        }
        *param_2 = uVar10;
        param_2 = param_2 + 1;
        psVar9 = psVar1;
      } while (psVar1 != param_1 + ((ulong)(param_4 - 1) + 1) * 3);
      return;
    }
  }
  if ((param_5 == 4) && (param_6 == 4)) {
    if (0 < param_4 * 4) {
      puVar8 = param_2 + 2;
      do {
        fVar21 = (float)(int)param_1[1];
        fVar20 = (float)(int)*param_1;
        fVar19 = (float)(int)param_1[2];
        fVar17 = (float)(int)param_1[3];
        lVar5 = lrintf(fVar21 * param_3[1] + *param_3 * fVar20 + param_3[2] * fVar19 +
                       param_3[3] * fVar17 + param_3[4]);
        uVar6 = 0x8000;
        uVar11 = 0x7fff;
        uVar10 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = uVar11, (int)lVar5 < 1)) {
          uVar10 = uVar6;
        }
        lVar5 = lrintf(fVar21 * param_3[6] + param_3[5] * fVar20 + param_3[7] * fVar19 +
                       param_3[8] * fVar17 + param_3[9]);
        uVar14 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar14 = uVar11, (int)lVar5 < 1)) {
          uVar14 = uVar6;
        }
        fVar15 = param_3[0xb];
        puVar8[-2] = uVar10;
        fVar16 = param_3[10];
        puVar8[-1] = uVar14;
        lVar5 = lrintf(fVar21 * fVar15 + fVar16 * fVar20 + param_3[0xc] * fVar19 +
                       param_3[0xd] * fVar17 + param_3[0xe]);
        uVar10 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = uVar11, (int)lVar5 < 1)) {
          uVar10 = uVar6;
        }
        lVar5 = lrintf(fVar21 * param_3[0x10] + param_3[0xf] * fVar20 + param_3[0x11] * fVar19 +
                       param_3[0x12] * fVar17 + param_3[0x13]);
        uVar14 = (short)lVar5;
        if ((0xffff < (int)lVar5 + 0x8000U) && (uVar14 = uVar11, (int)lVar5 < 1)) {
          uVar14 = uVar6;
        }
        *puVar8 = uVar10;
        puVar13 = puVar8 + 4;
        puVar8[1] = uVar14;
        puVar8 = puVar13;
        param_1 = param_1 + 4;
      } while (puVar13 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    iVar18 = 0;
    do {
      if (0 < (int)param_6) {
        pfVar12 = param_3;
        puVar8 = param_2;
        do {
          fVar17 = pfVar12[param_5];
          if (0 < param_5) {
            lVar5 = 0;
            do {
              psVar9 = param_1 + lVar5;
              pfVar4 = pfVar12 + lVar5;
              lVar5 = lVar5 + 1;
              fVar17 = fVar17 + (float)(int)*psVar9 * *pfVar4;
            } while ((int)lVar5 < param_5);
          }
          lVar5 = lrintf(fVar17);
          uVar10 = (undefined2)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar10 = 0x7fff, (int)lVar5 < 1)) {
            uVar10 = 0x8000;
          }
          puVar13 = puVar8 + 1;
          *puVar8 = uVar10;
          pfVar12 = pfVar12 + (long)param_5 + 1;
          puVar8 = puVar13;
        } while (param_2 + (ulong)(param_6 - 1) + 1 != puVar13);
      }
      iVar18 = iVar18 + 1;
      param_1 = param_1 + param_5;
      param_2 = (undefined2 *)
                ((long)param_2 +
                (-(ulong)(param_6 >> 0x1f) & 0xfffffffe00000000 | (ulong)param_6 << 1));
    } while (iVar18 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c747c (1360 bytes) name=FUN_002c747c

void FUN_002c747c(ushort *param_1,short *param_2,float *param_3,int param_4,int param_5,uint param_6
                 )

{
  ushort uVar1;
  ushort uVar2;
  short sVar3;
  short sVar4;
  short sVar5;
  float *pfVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  ushort *puVar10;
  short *psVar11;
  float *pfVar12;
  short *psVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  int iVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  
  if ((param_5 == 2) && (param_6 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    puVar10 = param_1 + 1;
    psVar11 = param_2 + 1;
    do {
      uVar1 = *puVar10;
      uVar2 = puVar10[-1];
      lVar9 = lrintf((float)uVar1 * param_3[1] + *param_3 * (float)uVar2 + param_3[2]);
      sVar3 = (short)lVar9;
      if (0xffff < (uint)lVar9) {
        sVar3 = -(ushort)(0 < (int)(uint)lVar9);
      }
      lVar9 = lrintf((float)uVar1 * param_3[4] + param_3[3] * (float)uVar2 + param_3[5]);
      sVar4 = (short)lVar9;
      if (0xffff < (uint)lVar9) {
        sVar4 = -(ushort)(0 < (int)(uint)lVar9);
      }
      psVar11[-1] = sVar3;
      puVar10 = puVar10 + 2;
      *psVar11 = sVar4;
      psVar11 = psVar11 + 2;
    } while (puVar10 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (param_5 == 3) {
    if (param_6 == 3) {
      if (param_4 * 3 < 1) {
        return;
      }
      iVar17 = 0;
      do {
        fVar19 = (float)param_1[1];
        fVar18 = (float)*param_1;
        fVar16 = (float)param_1[2];
        lVar9 = lrintf(fVar19 * param_3[1] + *param_3 * fVar18 + param_3[2] * fVar16 + param_3[3]);
        sVar3 = (short)lVar9;
        if (0xffff < (uint)lVar9) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar9);
        }
        lVar9 = lrintf(fVar19 * param_3[5] + param_3[4] * fVar18 + param_3[6] * fVar16 + param_3[7])
        ;
        sVar4 = (short)lVar9;
        if (0xffff < (uint)lVar9) {
          sVar4 = -(ushort)(0 < (int)(uint)lVar9);
        }
        lVar9 = lrintf(fVar19 * param_3[9] + param_3[8] * fVar18 + param_3[10] * fVar16 +
                       param_3[0xb]);
        sVar5 = (short)lVar9;
        if (0xffff < (uint)lVar9) {
          sVar5 = -(ushort)(0 < (int)(uint)lVar9);
        }
        iVar17 = iVar17 + 3;
        *param_2 = sVar3;
        param_2[1] = sVar4;
        param_2[2] = sVar5;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar17 < param_4 * 3);
      return;
    }
    if (param_6 == 1) {
      if (param_4 < 1) {
        return;
      }
      puVar10 = param_1 + ((ulong)(param_4 - 1) + 1) * 3;
      do {
        lVar9 = lrintf((float)param_1[1] * param_3[1] + (float)*param_1 * *param_3 +
                       (float)param_1[2] * param_3[2] + param_3[3]);
        sVar3 = (short)lVar9;
        if (0xffff < (uint)lVar9) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar9);
        }
        param_1 = param_1 + 3;
        *param_2 = sVar3;
        param_2 = param_2 + 1;
      } while (param_1 != puVar10);
      return;
    }
  }
  if ((param_5 == 4) && (param_6 == 4)) {
    if (0 < param_4 * 4) {
      psVar11 = param_2 + 2;
      do {
        fVar20 = (float)param_1[1];
        fVar19 = (float)*param_1;
        fVar18 = (float)param_1[2];
        fVar16 = (float)param_1[3];
        lVar9 = lrintf(fVar20 * param_3[1] + *param_3 * fVar19 + param_3[2] * fVar18 +
                       param_3[3] * fVar16 + param_3[4]);
        uVar7 = (uint)lVar9;
        if (0xffff < uVar7) {
          uVar7 = -(uint)(0 < (int)uVar7);
        }
        lVar9 = lrintf(fVar20 * param_3[6] + param_3[5] * fVar19 + param_3[7] * fVar18 +
                       param_3[8] * fVar16 + param_3[9]);
        uVar8 = (uint)lVar9;
        if (0xffff < uVar8) {
          uVar8 = -(uint)(0 < (int)uVar8);
        }
        fVar14 = param_3[0xb];
        fVar15 = param_3[10];
        psVar11[-2] = (short)uVar7;
        psVar11[-1] = (short)uVar8;
        lVar9 = lrintf(fVar20 * fVar14 + fVar15 * fVar19 + param_3[0xc] * fVar18 +
                       param_3[0xd] * fVar16 + param_3[0xe]);
        uVar7 = (uint)lVar9;
        if (0xffff < uVar7) {
          uVar7 = -(uint)(0 < (int)uVar7);
        }
        lVar9 = lrintf(fVar20 * param_3[0x10] + param_3[0xf] * fVar19 + param_3[0x11] * fVar18 +
                       param_3[0x12] * fVar16 + param_3[0x13]);
        uVar8 = (uint)lVar9;
        if (0xffff < uVar8) {
          uVar8 = -(uint)(0 < (int)uVar8);
        }
        *psVar11 = (short)uVar7;
        psVar13 = psVar11 + 4;
        param_1 = param_1 + 4;
        psVar11[1] = (short)uVar8;
        psVar11 = psVar13;
      } while (psVar13 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    iVar17 = 0;
    do {
      if (0 < (int)param_6) {
        pfVar12 = param_3;
        psVar11 = param_2;
        do {
          fVar16 = pfVar12[param_5];
          if (0 < param_5) {
            lVar9 = 0;
            do {
              puVar10 = param_1 + lVar9;
              pfVar6 = pfVar12 + lVar9;
              lVar9 = lVar9 + 1;
              fVar16 = fVar16 + (float)*puVar10 * *pfVar6;
            } while ((int)lVar9 < param_5);
          }
          lVar9 = lrintf(fVar16);
          uVar7 = (uint)lVar9;
          if (0xffff < uVar7) {
            uVar7 = -(uint)(0 < (int)uVar7);
          }
          psVar13 = psVar11 + 1;
          *psVar11 = (short)uVar7;
          pfVar12 = pfVar12 + (long)param_5 + 1;
          psVar11 = psVar13;
        } while (param_2 + (ulong)(param_6 - 1) + 1 != psVar13);
      }
      iVar17 = iVar17 + 1;
      param_1 = param_1 + param_5;
      param_2 = (short *)((long)param_2 +
                         (-(ulong)(param_6 >> 0x1f) & 0xfffffffe00000000 | (ulong)param_6 << 1));
    } while (iVar17 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c79cc (1416 bytes) name=FUN_002c79cc

void FUN_002c79cc(byte *param_1,undefined1 *param_2,float *param_3,int param_4,int param_5,
                 int param_6)

{
  byte *pbVar1;
  byte bVar2;
  byte bVar3;
  float *pfVar4;
  long lVar5;
  undefined1 uVar6;
  undefined1 uVar7;
  byte *pbVar8;
  undefined1 *puVar9;
  float *pfVar10;
  undefined1 uVar11;
  undefined1 uVar12;
  undefined1 uVar13;
  undefined1 *puVar14;
  float fVar15;
  int iVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  
  if ((param_5 == 2) && (param_6 == 2)) {
    if (param_4 * 2 < 1) {
      return;
    }
    pbVar8 = param_1 + 1;
    puVar9 = param_2 + 1;
    do {
      bVar2 = *pbVar8;
      pbVar1 = pbVar8 + 2;
      bVar3 = pbVar8[-1];
      lVar5 = lrintf((float)(int)(char)bVar2 * param_3[1] + *param_3 * (float)bVar3 + param_3[2]);
      uVar12 = (char)lVar5;
      if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = 0x7f, (int)lVar5 < 1)) {
        uVar12 = 0x80;
      }
      lVar5 = lrintf((float)(int)(char)bVar2 * param_3[4] + param_3[3] * (float)bVar3 + param_3[5]);
      uVar6 = (char)lVar5;
      if ((0xff < (int)lVar5 + 0x80U) && (uVar6 = 0x7f, (int)lVar5 < 1)) {
        uVar6 = 0x80;
      }
      puVar9[-1] = uVar12;
      *puVar9 = uVar6;
      pbVar8 = pbVar1;
      puVar9 = puVar9 + 2;
    } while (pbVar1 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
  if (param_5 == 3) {
    if (param_6 == 3) {
      pbVar8 = param_1;
      if (param_4 * 3 < 1) {
        return;
      }
      do {
        pbVar1 = pbVar8 + 3;
        fVar18 = (float)(int)(char)pbVar8[1];
        fVar17 = (float)*pbVar8;
        fVar15 = (float)pbVar8[2];
        lVar5 = lrintf(fVar18 * param_3[1] + *param_3 * fVar17 + param_3[2] * fVar15 + param_3[3]);
        uVar6 = 0x80;
        uVar11 = 0x7f;
        uVar12 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = uVar11, (int)lVar5 < 1)) {
          uVar12 = uVar6;
        }
        lVar5 = lrintf(fVar18 * param_3[5] + param_3[4] * fVar17 + param_3[6] * fVar15 + param_3[7])
        ;
        uVar13 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar13 = uVar11, (int)lVar5 < 1)) {
          uVar13 = uVar6;
        }
        lVar5 = lrintf(fVar18 * param_3[9] + param_3[8] * fVar17 + param_3[10] * fVar15 +
                       param_3[0xb]);
        uVar7 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar7 = uVar11, (int)lVar5 < 1)) {
          uVar7 = uVar6;
        }
        *param_2 = uVar12;
        param_2[1] = uVar13;
        param_2[2] = uVar7;
        pbVar8 = pbVar1;
        param_2 = param_2 + 3;
      } while ((int)pbVar1 - (int)param_1 < param_4 * 3);
      return;
    }
    if (param_6 == 1) {
      if (param_4 < 1) {
        return;
      }
      pbVar8 = param_1;
      do {
        pbVar1 = pbVar8 + 3;
        lVar5 = lrintf((float)(int)(char)pbVar8[1] * param_3[1] + (float)*pbVar8 * *param_3 +
                       (float)pbVar8[2] * param_3[2] + param_3[3]);
        uVar12 = (undefined1)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = 0x7f, (int)lVar5 < 1)) {
          uVar12 = 0x80;
        }
        *param_2 = uVar12;
        param_2 = param_2 + 1;
        pbVar8 = pbVar1;
      } while (pbVar1 != param_1 + ((ulong)(param_4 - 1) + 1) * 3);
      return;
    }
  }
  if ((param_5 == 4) && (param_6 == 4)) {
    if (0 < param_4 * 4) {
      puVar9 = param_2 + 2;
      do {
        fVar19 = (float)(int)(char)param_1[1];
        fVar18 = (float)*param_1;
        fVar17 = (float)param_1[2];
        fVar15 = (float)param_1[3];
        lVar5 = lrintf(fVar19 * param_3[1] + *param_3 * fVar18 + param_3[2] * fVar17 +
                       param_3[3] * fVar15 + param_3[4]);
        uVar6 = 0x80;
        uVar11 = 0x7f;
        uVar12 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = uVar11, (int)lVar5 < 1)) {
          uVar12 = uVar6;
        }
        lVar5 = lrintf(fVar19 * param_3[6] + param_3[5] * fVar18 + param_3[7] * fVar17 +
                       param_3[8] * fVar15 + param_3[9]);
        uVar13 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar13 = uVar11, (int)lVar5 < 1)) {
          uVar13 = uVar6;
        }
        puVar9[-2] = uVar12;
        puVar9[-1] = uVar13;
        lVar5 = lrintf(fVar19 * param_3[0xb] + param_3[10] * fVar18 + param_3[0xc] * fVar17 +
                       param_3[0xd] * fVar15 + param_3[0xe]);
        uVar12 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = uVar11, (int)lVar5 < 1)) {
          uVar12 = uVar6;
        }
        lVar5 = lrintf(fVar19 * param_3[0x10] + param_3[0xf] * fVar18 + param_3[0x11] * fVar17 +
                       param_3[0x12] * fVar15 + param_3[0x13]);
        uVar13 = (char)lVar5;
        if ((0xff < (int)lVar5 + 0x80U) && (uVar13 = uVar11, (int)lVar5 < 1)) {
          uVar13 = uVar6;
        }
        *puVar9 = uVar12;
        puVar14 = puVar9 + 4;
        puVar9[1] = uVar13;
        puVar9 = puVar14;
        param_1 = param_1 + 4;
      } while (puVar14 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
                    /* catch() { ... } // from try @ 002c7ebc with catch @ 002c7e74
                       catch() { ... } // from try @ 002c7f08 with catch @ 002c7e74 */
    iVar16 = 0;
                    /* try { // try from 002c7e98 to 003c7eaf has its CatchHandler @ 002c7ee0 */
    do {
      if (0 < param_6) {
                    /* try { // try from 002c7ebc to 003c7ecf has its CatchHandler @ 002c7e74 */
        pfVar10 = param_3;
        puVar9 = param_2;
        do {
          fVar15 = pfVar10[param_5];
          if (0 < param_5) {
            lVar5 = 0;
            do {
              pbVar8 = param_1 + lVar5;
              pfVar4 = pfVar10 + lVar5;
                    /* catch() { ... } // from try @ 002c7e98 with catch @ 002c7ee0 */
              lVar5 = lVar5 + 1;
              fVar15 = fVar15 + (float)(int)(char)*pbVar8 * *pfVar4;
            } while ((int)lVar5 < param_5);
          }
          lVar5 = lrintf(fVar15);
          uVar12 = (undefined1)lVar5;
                    /* try { // try from 002c7f08 to 003c7f0b has its CatchHandler @ 002c7e74 */
                    /* catch() { ... } // from try @ 002c7f54 with catch @ 002c7f0c
                       catch() { ... } // from try @ 002c7fa0 with catch @ 002c7f0c */
          if ((0xff < (int)lVar5 + 0x80U) && (uVar12 = 0x7f, (int)lVar5 < 1)) {
            uVar12 = 0x80;
          }
          puVar14 = puVar9 + 1;
          *puVar9 = uVar12;
          pfVar10 = pfVar10 + (long)param_5 + 1;
          puVar9 = puVar14;
        } while (param_2 + (ulong)(param_6 - 1) + 1 != puVar14);
      }
      iVar16 = iVar16 + 1;
                    /* try { // try from 002c7f30 to 003c7f47 has its CatchHandler @ 002c7f78 */
      param_1 = param_1 + param_5;
      param_2 = param_2 + param_6;
    } while (iVar16 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c7f54 (1308 bytes) name=FUN_002c7f54

void FUN_002c7f54(byte *param_1,char *param_2,float *param_3,int param_4,int param_5,int param_6)

{
  byte bVar1;
  byte bVar2;
  char cVar3;
  char cVar4;
  char cVar5;
  float *pfVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  byte *pbVar10;
  char *pcVar11;
  float *pfVar12;
  char *pcVar13;
  float fVar14;
  int iVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  
                    /* try { // try from 002c7f54 to 003c7f67 has its CatchHandler @ 002c7f0c */
                    /* catch() { ... } // from try @ 002c7f30 with catch @ 002c7f78 */
                    /* try { // try from 002c7fa0 to 003c7fa3 has its CatchHandler @ 002c7f0c */
  if ((param_5 == 2) && (param_6 == 2)) {
                    /* catch() { ... } // from try @ 002c7fec with catch @ 002c7fa4
                       catch() { ... } // from try @ 002c8038 with catch @ 002c7fa4 */
    if (param_4 * 2 < 1) {
      return;
    }
    pbVar10 = param_1 + 1;
                    /* try { // try from 002c7fc8 to 003c7fdf has its CatchHandler @ 002c8010 */
    pcVar11 = param_2 + 1;
    do {
      bVar1 = *pbVar10;
      bVar2 = pbVar10[-1];
                    /* try { // try from 002c7fec to 003c7fff has its CatchHandler @ 002c7fa4 */
      lVar9 = lrintf((float)bVar1 * param_3[1] + *param_3 * (float)bVar2 + param_3[2]);
      cVar3 = (char)lVar9;
      if (0xff < (uint)lVar9) {
        cVar3 = -(0 < (int)(uint)lVar9);
      }
                    /* catch() { ... } // from try @ 002c7fc8 with catch @ 002c8010 */
      lVar9 = lrintf((float)bVar1 * param_3[4] + param_3[3] * (float)bVar2 + param_3[5]);
      cVar4 = (char)lVar9;
      if (0xff < (uint)lVar9) {
                    /* try { // try from 002c8038 to 003c803b has its CatchHandler @ 002c7fa4 */
                    /* catch() { ... } // from try @ 002c8084 with catch @ 002c803c
                       catch() { ... } // from try @ 002c80d0 with catch @ 002c803c */
        cVar4 = -(0 < (int)(uint)lVar9);
      }
      pcVar11[-1] = cVar3;
      pbVar10 = pbVar10 + 2;
      *pcVar11 = cVar4;
      pcVar11 = pcVar11 + 2;
    } while (pbVar10 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    return;
  }
                    /* try { // try from 002c8084 to 003c8097 has its CatchHandler @ 002c803c */
  if (param_5 == 3) {
    if (param_6 == 3) {
      pbVar10 = param_1;
      if (param_4 * 3 < 1) {
        return;
      }
      do {
                    /* catch() { ... } // from try @ 002c8060 with catch @ 002c80a8 */
        fVar17 = (float)pbVar10[1];
        fVar16 = (float)*pbVar10;
        fVar14 = (float)pbVar10[2];
                    /* try { // try from 002c80d0 to 003c80d3 has its CatchHandler @ 002c803c */
                    /* catch() { ... } // from try @ 002c811c with catch @ 002c80d4
                       catch() { ... } // from try @ 002c8168 with catch @ 002c80d4 */
        lVar9 = lrintf(fVar17 * param_3[1] + *param_3 * fVar16 + param_3[2] * fVar14 + param_3[3]);
        cVar3 = (char)lVar9;
        if (0xff < (uint)lVar9) {
          cVar3 = -(0 < (int)(uint)lVar9);
                    /* try { // try from 002c80f8 to 003c810f has its CatchHandler @ 002c8140 */
        }
                    /* try { // try from 002c811c to 003c812f has its CatchHandler @ 002c80d4 */
        lVar9 = lrintf(fVar17 * param_3[5] + param_3[4] * fVar16 + param_3[6] * fVar14 + param_3[7])
        ;
        cVar4 = (char)lVar9;
        if (0xff < (uint)lVar9) {
          cVar4 = -(0 < (int)(uint)lVar9);
        }
                    /* catch() { ... } // from try @ 002c80f8 with catch @ 002c8140 */
        lVar9 = lrintf(fVar17 * param_3[9] + param_3[8] * fVar16 + param_3[10] * fVar14 +
                       param_3[0xb]);
        cVar5 = (char)lVar9;
        if (0xff < (uint)lVar9) {
                    /* try { // try from 002c8168 to 003c816b has its CatchHandler @ 002c80d4 */
                    /* catch() { ... } // from try @ 002c81b4 with catch @ 002c816c
                       catch() { ... } // from try @ 002c8200 with catch @ 002c816c */
          cVar5 = -(0 < (int)(uint)lVar9);
        }
        pbVar10 = pbVar10 + 3;
        *param_2 = cVar3;
        param_2[1] = cVar4;
        param_2[2] = cVar5;
        param_2 = param_2 + 3;
                    /* try { // try from 002c8190 to 003c81a7 has its CatchHandler @ 002c81d8 */
      } while ((int)pbVar10 - (int)param_1 < param_4 * 3);
      return;
    }
    if (param_6 == 1) {
      if (param_4 < 1) {
        return;
      }
                    /* try { // try from 002c8330 to 003c8333 has its CatchHandler @ 002c829c */
                    /* catch() { ... } // from try @ 002c8378 with catch @ 002c8334
                       catch() { ... } // from try @ 002c83cc with catch @ 002c8334 */
      pbVar10 = param_1 + ((ulong)(param_4 - 1) + 1) * 3;
      do {
                    /* try { // try from 002c8358 to 003c836f has its CatchHandler @ 002c83a4 */
        lVar9 = lrintf((float)param_1[1] * param_3[1] + (float)*param_1 * *param_3 +
                       (float)param_1[2] * param_3[2] + param_3[3]);
                    /* try { // try from 002c8378 to 003c838f has its CatchHandler @ 002c8334 */
        cVar3 = (char)lVar9;
        if (0xff < (uint)lVar9) {
          cVar3 = -(0 < (int)(uint)lVar9);
        }
        param_1 = param_1 + 3;
        *param_2 = cVar3;
        param_2 = param_2 + 1;
      } while (param_1 != pbVar10);
      return;
    }
  }
  if ((param_5 == 4) && (param_6 == 4)) {
                    /* try { // try from 002c81b4 to 003c81c7 has its CatchHandler @ 002c816c */
    if (0 < param_4 * 4) {
      pcVar11 = param_2 + 2;
      do {
                    /* catch() { ... } // from try @ 002c8190 with catch @ 002c81d8 */
        fVar18 = (float)param_1[1];
        fVar17 = (float)*param_1;
        fVar16 = (float)param_1[2];
        fVar14 = (float)param_1[3];
                    /* try { // try from 002c8200 to 003c8203 has its CatchHandler @ 002c816c */
                    /* catch() { ... } // from try @ 002c824c with catch @ 002c8204
                       catch() { ... } // from try @ 002c8298 with catch @ 002c8204 */
        lVar9 = lrintf(fVar18 * param_3[1] + *param_3 * fVar17 + param_3[2] * fVar16 +
                       param_3[3] * fVar14 + param_3[4]);
        uVar7 = (uint)lVar9;
        if (0xff < uVar7) {
                    /* try { // try from 002c8228 to 003c823f has its CatchHandler @ 002c8270 */
          uVar7 = -(uint)(0 < (int)uVar7);
        }
                    /* try { // try from 002c824c to 003c825f has its CatchHandler @ 002c8204 */
        lVar9 = lrintf(fVar18 * param_3[6] + param_3[5] * fVar17 + param_3[7] * fVar16 +
                       param_3[8] * fVar14 + param_3[9]);
        uVar8 = (uint)lVar9;
        if (0xff < uVar8) {
          uVar8 = -(uint)(0 < (int)uVar8);
        }
        pcVar11[-2] = (char)uVar7;
                    /* catch() { ... } // from try @ 002c8228 with catch @ 002c8270 */
        pcVar11[-1] = (char)uVar8;
                    /* try { // try from 002c8298 to 003c829b has its CatchHandler @ 002c8204 */
                    /* catch() { ... } // from try @ 002c82e4 with catch @ 002c829c
                       catch() { ... } // from try @ 002c8330 with catch @ 002c829c */
        lVar9 = lrintf(fVar18 * param_3[0xb] + param_3[10] * fVar17 + param_3[0xc] * fVar16 +
                       param_3[0xd] * fVar14 + param_3[0xe]);
        uVar7 = (uint)lVar9;
        if (0xff < uVar7) {
          uVar7 = -(uint)(0 < (int)uVar7);
        }
                    /* try { // try from 002c82c0 to 003c82d7 has its CatchHandler @ 002c8308 */
        lVar9 = lrintf(fVar18 * param_3[0x10] + param_3[0xf] * fVar17 + param_3[0x11] * fVar16 +
                       param_3[0x12] * fVar14 + param_3[0x13]);
                    /* try { // try from 002c82e4 to 003c82f7 has its CatchHandler @ 002c829c */
        uVar8 = (uint)lVar9;
        if (0xff < uVar8) {
          uVar8 = -(uint)(0 < (int)uVar8);
        }
        *pcVar11 = (char)uVar7;
        pcVar13 = pcVar11 + 4;
        param_1 = param_1 + 4;
                    /* catch() { ... } // from try @ 002c82c0 with catch @ 002c8308 */
        pcVar11[1] = (char)uVar8;
        pcVar11 = pcVar13;
      } while (pcVar13 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else {
                    /* catch() { ... } // from try @ 002c8358 with catch @ 002c83a4 */
    if (0 < param_4) {
                    /* try { // try from 002c83cc to 003c83cf has its CatchHandler @ 002c8334 */
      iVar15 = 0;
                    /* catch() { ... } // from try @ 002c8414 with catch @ 002c83d0
                       catch() { ... } // from try @ 002c8468 with catch @ 002c83d0 */
      do {
        if (0 < param_6) {
          pfVar12 = param_3;
          pcVar11 = param_2;
          do {
            fVar14 = pfVar12[param_5];
                    /* try { // try from 002c83f4 to 003c840b has its CatchHandler @ 002c8440 */
            if (0 < param_5) {
              lVar9 = 0;
              do {
                pbVar10 = param_1 + lVar9;
                pfVar6 = pfVar12 + lVar9;
                lVar9 = lVar9 + 1;
                fVar14 = fVar14 + (float)*pbVar10 * *pfVar6;
                    /* try { // try from 002c8414 to 003c842b has its CatchHandler @ 002c83d0 */
              } while ((int)lVar9 < param_5);
            }
            lVar9 = lrintf(fVar14);
            uVar7 = (uint)lVar9;
            if (0xff < uVar7) {
              uVar7 = -(uint)(0 < (int)uVar7);
            }
            pcVar13 = pcVar11 + 1;
            *pcVar11 = (char)uVar7;
            pfVar12 = pfVar12 + (long)param_5 + 1;
            pcVar11 = pcVar13;
          } while (param_2 + (ulong)(param_6 - 1) + 1 != pcVar13);
        }
                    /* catch() { ... } // from try @ 002c83f4 with catch @ 002c8440 */
        iVar15 = iVar15 + 1;
        param_1 = param_1 + param_5;
        param_2 = param_2 + param_6;
                    /* try { // try from 002c8468 to 003c846b has its CatchHandler @ 002c83d0 */
      } while (iVar15 != param_4);
    }
  }
                    /* try { // try from 002c8060 to 003c8077 has its CatchHandler @ 002c80a8 */
  return;
}


==================================================================

### FUNC 002c8470 (548 bytes) name=FUN_002c8470

void FUN_002c8470(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,int param_4,
                 float *param_5)

{
  long lVar1;
  ulong uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  ulong uVar8;
  undefined8 *puVar9;
  long lVar10;
  int iVar11;
  int iVar12;
  undefined8 *puVar13;
  uint uVar14;
  long lVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  float fVar18;
  
  fVar18 = *param_5;
  if (param_4 < 4) {
    iVar11 = 0;
  }
  else {
    uVar5 = param_4 - 4U >> 2;
                    /* try { // try from 002c8490 to 003c84a7 has its CatchHandler @ 002c84dc */
    puVar7 = param_1;
    puVar9 = param_3;
    puVar13 = param_2;
    do {
      uVar17 = *puVar13;
      puVar6 = puVar7 + 2;
      uVar16 = *puVar7;
                    /* try { // try from 002c84b0 to 003c84c7 has its CatchHandler @ 002c846c */
      puVar9[1] = CONCAT44((float)((ulong)puVar13[1] >> 0x20) +
                           (float)((ulong)puVar7[1] >> 0x20) * fVar18,
                           (float)puVar13[1] + (float)puVar7[1] * fVar18);
      *puVar9 = CONCAT44((float)((ulong)uVar17 >> 0x20) + (float)((ulong)uVar16 >> 0x20) * fVar18,
                         (float)uVar17 + (float)uVar16 * fVar18);
      puVar7 = puVar6;
      puVar9 = puVar9 + 2;
      puVar13 = puVar13 + 2;
    } while (puVar6 != param_1 + ((ulong)uVar5 + 1) * 2);
    iVar11 = (uVar5 + 1) * 4;
  }
  if (iVar11 < param_4) {
    uVar5 = param_4 - iVar11;
    lVar10 = ((long)iVar11 + 4) * 4;
    lVar15 = lVar10 + -0x10;
                    /* catch() { ... } // from try @ 002c8490 with catch @ 002c84dc */
    uVar8 = (long)param_3 + lVar15;
    uVar2 = (long)param_1 + lVar15;
                    /* try { // try from 002c8504 to 003c8507 has its CatchHandler @ 002c846c */
                    /* catch() { ... } // from try @ 002c854c with catch @ 002c8508
                       catch() { ... } // from try @ 002c85a0 with catch @ 002c8508 */
    if ((uVar8 < (ulong)((long)param_1 + lVar10) && uVar2 < (ulong)((long)param_3 + lVar10) ||
         (ulong)((long)param_2 + lVar15) < (ulong)((long)param_3 + lVar10) &&
         uVar8 < (ulong)((long)param_2 + lVar10)) || (uVar5 < 8)) {
      lVar10 = 0;
      do {
                    /* try { // try from 002c8664 to 003c867b has its CatchHandler @ 002c86b0 */
        *(float *)(uVar8 + lVar10) =
             *(float *)((long)param_2 + lVar15 + lVar10) + fVar18 * *(float *)(uVar2 + lVar10);
        lVar10 = lVar10 + 4;
      } while (lVar10 != ((ulong)(uint)((param_4 + -1) - iVar11) + 1) * 4);
      return;
    }
                    /* try { // try from 002c852c to 003c8543 has its CatchHandler @ 002c8578 */
    uVar3 = -((uint)(uVar2 >> 2) & 3) & 3;
    uVar4 = uVar5;
    if (uVar3 < uVar5) {
      uVar4 = uVar3;
    }
    iVar12 = iVar11;
    if (uVar4 != 0) {
      lVar10 = (long)iVar11 * 4;
                    /* try { // try from 002c854c to 003c8563 has its CatchHandler @ 002c8508 */
      iVar12 = iVar11 + 1;
      *(float *)((long)param_3 + lVar10) =
           *(float *)((long)param_2 + lVar10) + fVar18 * *(float *)((long)param_1 + lVar10);
      if (uVar4 != 1) {
        lVar1 = lVar10 + 4;
        iVar12 = iVar11 + 2;
                    /* catch() { ... } // from try @ 002c852c with catch @ 002c8578 */
        *(float *)((long)param_3 + lVar1) =
             *(float *)((long)param_2 + lVar1) + fVar18 * *(float *)((long)param_1 + lVar1);
        if (uVar4 == 3) {
          lVar10 = lVar10 + 8;
          iVar12 = iVar11 + 3;
          *(float *)((long)param_3 + lVar10) =
               *(float *)((long)param_2 + lVar10) + fVar18 * *(float *)((long)param_1 + lVar10);
        }
      }
    }
                    /* try { // try from 002c85a0 to 003c85a3 has its CatchHandler @ 002c8508 */
                    /* catch() { ... } // from try @ 002c85e8 with catch @ 002c85a4
                       catch() { ... } // from try @ 002c863c with catch @ 002c85a4 */
    lVar15 = lVar15 + (ulong)uVar4 * 4;
    uVar3 = ((uVar5 - uVar4) - 4 >> 2) + 1;
    uVar14 = 0;
    iVar11 = uVar3 * 4;
    puVar7 = (undefined8 *)((long)param_3 + lVar15);
    puVar9 = (undefined8 *)((long)param_2 + lVar15);
    puVar13 = (undefined8 *)((long)param_1 + lVar15);
    do {
                    /* try { // try from 002c85c8 to 003c85df has its CatchHandler @ 002c8614 */
      uVar16 = *puVar9;
      uVar14 = uVar14 + 1;
      uVar17 = *puVar13;
      puVar7[1] = CONCAT44((float)((ulong)puVar9[1] >> 0x20) +
                           (float)((ulong)puVar13[1] >> 0x20) * fVar18,
                           (float)puVar9[1] + (float)puVar13[1] * fVar18);
      *puVar7 = CONCAT44((float)((ulong)uVar16 >> 0x20) + (float)((ulong)uVar17 >> 0x20) * fVar18,
                         (float)uVar16 + (float)uVar17 * fVar18);
      puVar7 = puVar7 + 2;
      puVar9 = puVar9 + 2;
      puVar13 = puVar13 + 2;
    } while (uVar14 < uVar3);
                    /* try { // try from 002c85e8 to 003c85ff has its CatchHandler @ 002c85a4 */
    uVar3 = iVar12 + iVar11;
    if (uVar5 - uVar4 != iVar11) {
      uVar8 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
      *(float *)((long)param_3 + uVar8) =
           *(float *)((long)param_2 + uVar8) + fVar18 * *(float *)((long)param_1 + uVar8);
      if ((int)(uVar3 + 1) < param_4) {
        lVar15 = uVar8 + 4;
                    /* catch() { ... } // from try @ 002c85c8 with catch @ 002c8614 */
        *(float *)((long)param_3 + lVar15) =
             *(float *)((long)param_2 + lVar15) + fVar18 * *(float *)((long)param_1 + lVar15);
        if ((int)(uVar3 + 2) < param_4) {
          lVar15 = uVar8 + 8;
                    /* try { // try from 002c863c to 003c863f has its CatchHandler @ 002c85a4 */
                    /* catch() { ... } // from try @ 002c8684 with catch @ 002c8640
                       catch() { ... } // from try @ 002c86d8 with catch @ 002c8640 */
          *(float *)((long)param_3 + lVar15) =
               *(float *)((long)param_2 + lVar15) + fVar18 * *(float *)((long)param_1 + lVar15);
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 002c8694 (420 bytes) name=FUN_002c8694

undefined1  [16] FUN_002c8694(float *param_1,undefined8 *param_2,uint param_3)

{
  float *pfVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  float *pfVar8;
  undefined8 *puVar9;
  float *pfVar10;
  ulong uVar11;
  int iVar12;
  double dVar13;
  undefined1 auVar14 [16];
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  double dVar19;
  
  uVar2 = param_3 & 0xfffffffc;
  iVar12 = 0;
  dVar13 = 0.0;
  if (0 < (int)uVar2) {
    do {
      uVar3 = uVar2 - iVar12;
      if (0x2000 < (int)uVar3) {
        uVar3 = 0x2000;
      }
      if ((int)uVar3 < 4) {
        fVar15 = 0.0;
        fVar16 = 0.0;
        fVar17 = 0.0;
        fVar18 = 0.0;
      }
      else {
        fVar15 = 0.0;
        fVar16 = 0.0;
        fVar17 = 0.0;
        fVar18 = 0.0;
                    /* try { // try from 002c86d8 to 003c86db has its CatchHandler @ 002c8640 */
                    /* catch() { ... } // from try @ 002c8724 with catch @ 002c86dc
                       catch() { ... } // from try @ 002c8770 with catch @ 002c86dc */
        pfVar8 = param_1;
        puVar9 = param_2;
        do {
          pfVar10 = pfVar8 + 4;
          fVar15 = fVar15 + (float)*puVar9 * (float)*(undefined8 *)pfVar8;
          fVar16 = fVar16 + (float)((ulong)*puVar9 >> 0x20) *
                            (float)((ulong)*(undefined8 *)pfVar8 >> 0x20);
          fVar17 = fVar17 + (float)puVar9[1] * (float)*(undefined8 *)(pfVar8 + 2);
          fVar18 = fVar18 + (float)((ulong)puVar9[1] >> 0x20) *
                            (float)((ulong)*(undefined8 *)(pfVar8 + 2) >> 0x20);
          pfVar8 = pfVar10;
          puVar9 = puVar9 + 2;
        } while (pfVar10 != param_1 + ((ulong)(uVar3 - 4 >> 2) + 1) * 4);
      }
      iVar12 = iVar12 + uVar3;
                    /* try { // try from 002c8700 to 003c8717 has its CatchHandler @ 002c8748 */
      uVar11 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
      param_1 = (float *)((long)param_1 + uVar11);
      param_2 = (undefined8 *)((long)param_2 + uVar11);
                    /* try { // try from 002c8724 to 003c8737 has its CatchHandler @ 002c86dc */
      dVar13 = dVar13 + (double)(fVar15 + fVar16 + fVar17 + fVar18);
    } while (iVar12 < (int)uVar2);
  }
  iVar12 = param_3 - iVar12;
  if (iVar12 < 4) {
    dVar19 = 0.0;
                    /* try { // try from 002c8830 to 003c8847 has its CatchHandler @ 002c8878 */
    uVar11 = 0;
  }
  else {
    dVar19 = 0.0;
                    /* catch() { ... } // from try @ 002c8700 with catch @ 002c8748 */
    uVar2 = iVar12 - 4U >> 2;
    pfVar8 = (float *)((long)param_2 + 4);
    pfVar10 = param_1;
    do {
                    /* try { // try from 002c8770 to 003c8773 has its CatchHandler @ 002c86dc */
      pfVar1 = pfVar8 + 4;
                    /* catch() { ... } // from try @ 002c87bc with catch @ 002c8774
                       catch() { ... } // from try @ 002c8808 with catch @ 002c8774 */
                    /* try { // try from 002c8798 to 003c87af has its CatchHandler @ 002c87e0 */
                    /* try { // try from 002c87bc to 003c87cf has its CatchHandler @ 002c8774 */
      dVar19 = dVar19 + (double)pfVar10[1] * (double)*pfVar8 + (double)pfVar8[-1] * (double)*pfVar10
                        + (double)pfVar8[1] * (double)pfVar10[2] +
                        (double)pfVar8[2] * (double)pfVar10[3];
      pfVar8 = pfVar1;
      pfVar10 = pfVar10 + 4;
    } while (pfVar1 != (float *)((long)param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar11 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar11 < iVar12) {
    uVar6 = -(uVar11 >> 0x1f) & 0xfffffffc00000000 | uVar11 << 2;
                    /* catch() { ... } // from try @ 002c8798 with catch @ 002c87e0 */
    lVar7 = 0;
    do {
      lVar4 = lVar7 + uVar6;
      lVar5 = lVar7 + uVar6;
      lVar7 = lVar7 + 4;
                    /* try { // try from 002c8808 to 003c880b has its CatchHandler @ 002c8774 */
                    /* catch() { ... } // from try @ 002c8854 with catch @ 002c880c
                       catch() { ... } // from try @ 002c88a0 with catch @ 002c880c */
      dVar19 = dVar19 + (double)*(float *)((long)param_2 + lVar5) *
                        (double)*(float *)((long)param_1 + lVar4);
    } while (lVar7 != ((ulong)(uint)((iVar12 + -1) - (int)uVar11) + 1) * 4);
  }
  auVar14._0_8_ = dVar13 + dVar19;
  auVar14._8_8_ = 0;
  return auVar14;
}


==================================================================

### FUNC 002c8838 (588 bytes) name=FUN_002c8838

undefined1  [16] FUN_002c8838(byte *param_1,long param_2,uint param_3)

{
  byte *pbVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  undefined8 *puVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  byte bVar11;
  byte bVar12;
  byte bVar13;
  byte bVar14;
  byte bVar15;
  byte bVar16;
  byte bVar17;
  byte bVar18;
  double dVar19;
  undefined1 auVar20 [16];
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  double dVar29;
  byte *pbVar6;
  
  uVar2 = param_3 & 0xfffffff8;
  iVar10 = 0;
  dVar19 = 0.0;
  if (0 < (int)uVar2) {
    do {
      iVar9 = uVar2 - iVar10;
      iVar21 = 0;
      iVar22 = 0;
      iVar23 = 0;
      iVar24 = 0;
      if (0x8000 < iVar9) {
        iVar9 = 0x8000;
      }
      if (iVar9 + -0xf < 1) {
                    /* try { // try from 002c8a70 to 003c8a73 has its CatchHandler @ 002c89d8 */
        iVar8 = 0;
                    /* catch() { ... } // from try @ 002c8ab8 with catch @ 002c8a74
                       catch() { ... } // from try @ 002c8b0c with catch @ 002c8a74 */
      }
      else {
        lVar4 = 0;
        do {
                    /* catch() { ... } // from try @ 002c8830 with catch @ 002c8878 */
          pbVar6 = param_1 + lVar4;
          puVar7 = (undefined8 *)(param_2 + lVar4);
          lVar4 = lVar4 + 0x10;
          uVar27 = *(undefined8 *)(pbVar6 + 8);
          uVar25 = *(undefined8 *)pbVar6;
          bVar11 = (byte)((ulong)uVar25 >> 8);
          bVar15 = (byte)((ulong)uVar25 >> 0x28);
          uVar28 = puVar7[1];
          uVar26 = *puVar7;
          bVar12 = (byte)((ulong)uVar27 >> 8);
          bVar16 = (byte)((ulong)uVar27 >> 0x28);
                    /* try { // try from 002c88a0 to 003c88a3 has its CatchHandler @ 002c880c */
                    /* catch() { ... } // from try @ 002c88ec with catch @ 002c88a4
                       catch() { ... } // from try @ 002c8938 with catch @ 002c88a4 */
          bVar13 = (byte)((ulong)uVar28 >> 8);
          bVar17 = (byte)((ulong)uVar28 >> 0x28);
          bVar14 = (byte)((ulong)uVar26 >> 8);
          bVar18 = (byte)((ulong)uVar26 >> 0x28);
                    /* try { // try from 002c88c8 to 003c88df has its CatchHandler @ 002c8910 */
          iVar21 = iVar21 + ((CONCAT12(bVar11,(short)uVar25) & 0xff00ff) & 0xffff) *
                            ((CONCAT12(bVar14,(short)uVar26) & 0xff00ff) & 0xffff) +
                   (CONCAT12(bVar15,(ushort)(byte)((ulong)uVar25 >> 0x20)) & 0xffff) *
                   (CONCAT12(bVar18,(ushort)(byte)((ulong)uVar26 >> 0x20)) & 0xffff) +
                   ((CONCAT12(bVar12,(short)uVar27) & 0xff00ff) & 0xffff) *
                   ((CONCAT12(bVar13,(short)uVar28) & 0xff00ff) & 0xffff) +
                   (CONCAT12(bVar16,(ushort)(byte)((ulong)uVar27 >> 0x20)) & 0xffff) *
                   (CONCAT12(bVar17,(ushort)(byte)((ulong)uVar28 >> 0x20)) & 0xffff);
          iVar22 = iVar22 + (uint)bVar11 * (uint)bVar14 + (uint)bVar15 * (uint)bVar18 +
                   (uint)bVar12 * (uint)bVar13 + (uint)bVar16 * (uint)bVar17;
          iVar23 = iVar23 + (uint)(byte)((ulong)uVar25 >> 0x10) *
                            (uint)(byte)((ulong)uVar26 >> 0x10) +
                   (uint)(byte)((ulong)uVar25 >> 0x30) * (uint)(byte)((ulong)uVar26 >> 0x30) +
                   (uint)(byte)((ulong)uVar27 >> 0x10) * (uint)(byte)((ulong)uVar28 >> 0x10) +
                   (uint)(byte)((ulong)uVar27 >> 0x30) * (uint)(byte)((ulong)uVar28 >> 0x30);
          iVar24 = iVar24 + (uint)(byte)((ulong)uVar25 >> 0x18) *
                            (uint)(byte)((ulong)uVar26 >> 0x18) +
                   (uint)(byte)((ulong)uVar25 >> 0x38) * (uint)(byte)((ulong)uVar26 >> 0x38) +
                   (uint)(byte)((ulong)uVar27 >> 0x18) * (uint)(byte)((ulong)uVar28 >> 0x18) +
                   (uint)(byte)((ulong)uVar27 >> 0x38) * (uint)(byte)((ulong)uVar28 >> 0x38);
        } while ((int)lVar4 < iVar9 + -0xf);
        iVar8 = (iVar9 - 0x10U & 0xfffffff0) + 0x10;
      }
                    /* try { // try from 002c88ec to 003c88ff has its CatchHandler @ 002c88a4 */
      if (iVar8 < iVar9 + -7) {
        lVar4 = (long)iVar8;
                    /* catch() { ... } // from try @ 002c88c8 with catch @ 002c8910 */
        pbVar6 = param_1 + lVar4;
        puVar7 = (undefined8 *)(param_2 + lVar4);
        do {
          pbVar5 = pbVar6 + 8;
          uVar25 = *(undefined8 *)pbVar6;
          uVar27 = *puVar7;
          bVar11 = (byte)((ulong)uVar25 >> 8);
          bVar13 = (byte)((ulong)uVar25 >> 0x28);
          bVar12 = (byte)((ulong)uVar27 >> 8);
          bVar14 = (byte)((ulong)uVar27 >> 0x28);
                    /* try { // try from 002c8938 to 003c893b has its CatchHandler @ 002c88a4 */
                    /* catch() { ... } // from try @ 002c8980 with catch @ 002c893c
                       catch() { ... } // from try @ 002c89d4 with catch @ 002c893c */
          iVar21 = iVar21 + ((CONCAT12(bVar11,(short)uVar25) & 0xff00ff) & 0xffff) *
                            ((CONCAT12(bVar12,(short)uVar27) & 0xff00ff) & 0xffff) +
                   (CONCAT12(bVar13,(ushort)(byte)((ulong)uVar25 >> 0x20)) & 0xffff) *
                   (CONCAT12(bVar14,(ushort)(byte)((ulong)uVar27 >> 0x20)) & 0xffff);
          iVar22 = iVar22 + (uint)bVar11 * (uint)bVar12 + (uint)bVar13 * (uint)bVar14;
          iVar23 = iVar23 + (uint)(byte)((ulong)uVar25 >> 0x10) *
                            (uint)(byte)((ulong)uVar27 >> 0x10) +
                   (uint)(byte)((ulong)uVar25 >> 0x30) * (uint)(byte)((ulong)uVar27 >> 0x30);
          iVar24 = iVar24 + (uint)(byte)((ulong)uVar25 >> 0x18) *
                            (uint)(byte)((ulong)uVar27 >> 0x18) +
                   (uint)(byte)((ulong)uVar25 >> 0x38) * (uint)(byte)((ulong)uVar27 >> 0x38);
          pbVar6 = pbVar5;
          puVar7 = puVar7 + 1;
        } while (pbVar5 != param_1 + lVar4 + 8 + (ulong)((uint)((iVar9 + -8) - iVar8) >> 3) * 8);
      }
      iVar10 = iVar10 + iVar9;
      param_1 = param_1 + iVar9;
      param_2 = param_2 + iVar9;
                    /* try { // try from 002c8960 to 003c8977 has its CatchHandler @ 002c89ac */
                    /* try { // try from 002c8980 to 003c8997 has its CatchHandler @ 002c893c */
      dVar19 = dVar19 + (double)(uint)(iVar22 + iVar21 + iVar23 + iVar24);
    } while (iVar10 < (int)uVar2);
  }
  iVar10 = param_3 - iVar10;
  if (iVar10 < 4) {
    dVar29 = 0.0;
    iVar9 = 0;
  }
  else {
    dVar29 = 0.0;
    uVar2 = iVar10 - 4U >> 2;
                    /* catch() { ... } // from try @ 002c8960 with catch @ 002c89ac */
    pbVar6 = (byte *)(param_2 + 1);
    pbVar5 = param_1;
    do {
      pbVar1 = pbVar6 + 4;
                    /* try { // try from 002c89d4 to 003c89d7 has its CatchHandler @ 002c893c */
                    /* catch() { ... } // from try @ 002c8a1c with catch @ 002c89d8
                       catch() { ... } // from try @ 002c8a70 with catch @ 002c89d8 */
                    /* try { // try from 002c89fc to 003c8a13 has its CatchHandler @ 002c8a48 */
      dVar29 = dVar29 + (double)pbVar5[1] * (double)*pbVar6 + (double)pbVar6[-1] * (double)*pbVar5 +
                        (double)pbVar6[1] * (double)pbVar5[2] +
                        (double)pbVar6[2] * (double)pbVar5[3];
      pbVar6 = pbVar1;
      pbVar5 = pbVar5 + 4;
    } while (pbVar1 != (byte *)(param_2 + (ulong)uVar2 * 4 + 5));
                    /* try { // try from 002c8a1c to 003c8a33 has its CatchHandler @ 002c89d8 */
    iVar9 = (uVar2 + 1) * 4;
  }
  if (iVar9 < iVar10) {
    lVar4 = 0;
    do {
      lVar3 = lVar4 + iVar9;
                    /* catch() { ... } // from try @ 002c89fc with catch @ 002c8a48 */
      pbVar6 = (byte *)(param_2 + iVar9 + lVar4);
      lVar4 = lVar4 + 1;
      dVar29 = dVar29 + (double)*pbVar6 * (double)param_1[lVar3];
    } while (lVar4 != (ulong)(uint)((iVar10 + -1) - iVar9) + 1);
  }
  auVar20._0_8_ = dVar19 + dVar29;
  auVar20._8_8_ = 0;
  return auVar20;
}


==================================================================

### FUNC 002c8a84 (588 bytes) name=FUN_002c8a84

undefined1  [16] FUN_002c8a84(byte *param_1,long param_2,uint param_3)

{
  char *pcVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  char *pcVar7;
  undefined8 *puVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  double dVar12;
  undefined1 auVar13 [16];
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  double dVar22;
  byte *pbVar6;
  
  uVar2 = param_3 & 0xfffffff8;
  iVar11 = 0;
  dVar12 = 0.0;
                    /* try { // try from 002c8a98 to 003c8aaf has its CatchHandler @ 002c8ae4 */
  if (0 < (int)uVar2) {
    do {
      iVar10 = uVar2 - iVar11;
      iVar14 = 0;
      iVar15 = 0;
      iVar16 = 0;
      iVar17 = 0;
      if (0x4000 < iVar10) {
        iVar10 = 0x4000;
      }
                    /* try { // try from 002c8ab8 to 003c8acf has its CatchHandler @ 002c8a74 */
      if (iVar10 + -0xf < 1) {
        iVar9 = 0;
      }
      else {
        lVar4 = 0;
        do {
          pbVar6 = param_1 + lVar4;
          puVar8 = (undefined8 *)(param_2 + lVar4);
          lVar4 = lVar4 + 0x10;
          uVar20 = *(undefined8 *)(pbVar6 + 8);
          uVar18 = *(undefined8 *)pbVar6;
                    /* catch() { ... } // from try @ 002c8a98 with catch @ 002c8ae4 */
          uVar21 = puVar8[1];
          uVar19 = *puVar8;
                    /* try { // try from 002c8b0c to 003c8b0f has its CatchHandler @ 002c8a74 */
                    /* catch() { ... } // from try @ 002c8b54 with catch @ 002c8b10
                       catch() { ... } // from try @ 002c8ba8 with catch @ 002c8b10 */
          iVar14 = iVar14 + (int)(short)(char)uVar18 * (int)(short)(char)uVar19 +
                   (int)(short)(char)((ulong)uVar18 >> 0x20) *
                   (int)(short)(char)((ulong)uVar19 >> 0x20) +
                   (int)(short)(char)uVar20 * (int)(short)(char)uVar21 +
                   (int)(short)(char)((ulong)uVar20 >> 0x20) *
                   (int)(short)(char)((ulong)uVar21 >> 0x20);
          iVar15 = iVar15 + (int)(short)(char)((ulong)uVar18 >> 8) *
                            (int)(short)(char)((ulong)uVar19 >> 8) +
                   (int)(short)(char)((ulong)uVar18 >> 0x28) *
                   (int)(short)(char)((ulong)uVar19 >> 0x28) +
                   (int)(short)(char)((ulong)uVar20 >> 8) * (int)(short)(char)((ulong)uVar21 >> 8) +
                   (int)(short)(char)((ulong)uVar20 >> 0x28) *
                   (int)(short)(char)((ulong)uVar21 >> 0x28);
          iVar16 = iVar16 + (int)(short)(char)((ulong)uVar18 >> 0x10) *
                            (int)(short)(char)((ulong)uVar19 >> 0x10) +
                   (int)(short)(char)((ulong)uVar18 >> 0x30) *
                   (int)(short)(char)((ulong)uVar19 >> 0x30) +
                   (int)(short)(char)((ulong)uVar20 >> 0x10) *
                   (int)(short)(char)((ulong)uVar21 >> 0x10) +
                   (int)(short)(char)((ulong)uVar20 >> 0x30) *
                   (int)(short)(char)((ulong)uVar21 >> 0x30);
          iVar17 = iVar17 + (int)(short)(char)((ulong)uVar18 >> 0x18) *
                            (int)(short)(char)((ulong)uVar19 >> 0x18) +
                   (int)(short)(char)((ulong)uVar18 >> 0x38) *
                   (int)(short)(char)((ulong)uVar19 >> 0x38) +
                   (int)(short)(char)((ulong)uVar20 >> 0x18) *
                   (int)(short)(char)((ulong)uVar21 >> 0x18) +
                   (int)(short)(char)((ulong)uVar20 >> 0x38) *
                   (int)(short)(char)((ulong)uVar21 >> 0x38);
        } while ((int)lVar4 < iVar10 + -0xf);
        iVar9 = (iVar10 - 0x10U & 0xfffffff0) + 0x10;
      }
                    /* try { // try from 002c8b34 to 003c8b4b has its CatchHandler @ 002c8b80 */
      if (iVar9 < iVar10 + -7) {
        lVar4 = (long)iVar9;
                    /* try { // try from 002c8b54 to 003c8b6b has its CatchHandler @ 002c8b10 */
        pbVar6 = param_1 + lVar4;
        puVar8 = (undefined8 *)(param_2 + lVar4);
        do {
          pbVar5 = pbVar6 + 8;
          uVar18 = *(undefined8 *)pbVar6;
          uVar20 = *puVar8;
                    /* catch() { ... } // from try @ 002c8b34 with catch @ 002c8b80 */
          iVar14 = iVar14 + (int)(short)(char)uVar18 * (int)(short)(char)uVar20 +
                   (int)(short)(char)((ulong)uVar18 >> 0x20) *
                   (int)(short)(char)((ulong)uVar20 >> 0x20);
          iVar15 = iVar15 + (int)(short)(char)((ulong)uVar18 >> 8) *
                            (int)(short)(char)((ulong)uVar20 >> 8) +
                   (int)(short)(char)((ulong)uVar18 >> 0x28) *
                   (int)(short)(char)((ulong)uVar20 >> 0x28);
          iVar16 = iVar16 + (int)(short)(char)((ulong)uVar18 >> 0x10) *
                            (int)(short)(char)((ulong)uVar20 >> 0x10) +
                   (int)(short)(char)((ulong)uVar18 >> 0x30) *
                   (int)(short)(char)((ulong)uVar20 >> 0x30);
          iVar17 = iVar17 + (int)(short)(char)((ulong)uVar18 >> 0x18) *
                            (int)(short)(char)((ulong)uVar20 >> 0x18) +
                   (int)(short)(char)((ulong)uVar18 >> 0x38) *
                   (int)(short)(char)((ulong)uVar20 >> 0x38);
          pbVar6 = pbVar5;
          puVar8 = puVar8 + 1;
        } while (pbVar5 != param_1 + lVar4 + 8 + (ulong)((uint)((iVar10 + -8) - iVar9) >> 3) * 8);
      }
      iVar11 = iVar11 + iVar10;
      param_1 = param_1 + iVar10;
                    /* try { // try from 002c8ba8 to 003c8bab has its CatchHandler @ 002c8b10 */
      param_2 = param_2 + iVar10;
                    /* catch() { ... } // from try @ 002c8bf0 with catch @ 002c8bac
                       catch() { ... } // from try @ 002c8c44 with catch @ 002c8bac */
      dVar12 = dVar12 + (double)(iVar14 + iVar15 + iVar16 + iVar17);
                    /* try { // try from 002c8bd0 to 003c8be7 has its CatchHandler @ 002c8c1c */
    } while (iVar11 < (int)uVar2);
  }
  iVar11 = param_3 - iVar11;
  if (iVar11 < 4) {
    dVar22 = 0.0;
    iVar10 = 0;
  }
  else {
    dVar22 = 0.0;
    uVar2 = iVar11 - 4U >> 2;
                    /* try { // try from 002c8bf0 to 003c8c07 has its CatchHandler @ 002c8bac */
    pcVar7 = (char *)(param_2 + 1);
    pbVar6 = param_1;
    do {
      pcVar1 = pcVar7 + 4;
                    /* catch() { ... } // from try @ 002c8bd0 with catch @ 002c8c1c */
                    /* try { // try from 002c8c44 to 003c8c47 has its CatchHandler @ 002c8bac */
                    /* catch() { ... } // from try @ 002c8c8c with catch @ 002c8c48
                       catch() { ... } // from try @ 002c8ce0 with catch @ 002c8c48 */
      dVar22 = dVar22 + (double)pbVar6[1] * (double)(int)*pcVar7 +
                        (double)(byte)pcVar7[-1] * (double)*pbVar6 +
                        (double)(byte)pcVar7[1] * (double)pbVar6[2] +
                        (double)(byte)pcVar7[2] * (double)pbVar6[3];
      pcVar7 = pcVar1;
      pbVar6 = pbVar6 + 4;
    } while (pcVar1 != (char *)(param_2 + (ulong)uVar2 * 4 + 5));
    iVar10 = (uVar2 + 1) * 4;
  }
                    /* try { // try from 002c8c6c to 003c8c83 has its CatchHandler @ 002c8cb8 */
  if (iVar10 < iVar11) {
    lVar4 = 0;
    do {
                    /* try { // try from 002c8c8c to 003c8ca3 has its CatchHandler @ 002c8c48 */
      lVar3 = lVar4 + iVar10;
      pcVar7 = (char *)(param_2 + iVar10 + lVar4);
      lVar4 = lVar4 + 1;
      dVar22 = dVar22 + (double)(int)*pcVar7 * (double)(int)(char)param_1[lVar3];
    } while (lVar4 != (ulong)(uint)((iVar11 + -1) - iVar10) + 1);
  }
  auVar13._0_8_ = dVar12 + dVar22;
  auVar13._8_8_ = 0;
                    /* catch() { ... } // from try @ 002c8c6c with catch @ 002c8cb8 */
  return auVar13;
}


==================================================================

### FUNC 002c8cd0 (2208 bytes) name=FUN_002c8cd0

void FUN_002c8cd0(float *param_1,float *param_2,float *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  float *pfVar2;
  uint uVar3;
  float *pfVar4;
  float *pfVar5;
  int iVar6;
  long lVar7;
  uint uVar8;
  ulong uVar9;
  ulong uVar10;
  int iVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  float fVar35;
  float local_b0;
  undefined1 uStack_ac;
  undefined1 uStack_ab;
  undefined1 uStack_aa;
  undefined1 uStack_a9;
  float fStack_a8;
  undefined1 uStack_a4;
  undefined1 uStack_a3;
  undefined1 uStack_a2;
  undefined1 uStack_a1;
  float local_a0;
  undefined1 uStack_9c;
  undefined1 uStack_9b;
  undefined1 uStack_9a;
  undefined1 uStack_99;
  float fStack_98;
  undefined1 uStack_94;
  undefined1 uStack_93;
  undefined1 uStack_92;
  undefined1 uStack_91;
  float local_70;
  undefined1 uStack_6c;
  undefined1 uStack_6b;
  undefined1 uStack_6a;
  undefined1 uStack_69;
  float fStack_68;
  undefined1 uStack_64;
  undefined1 uStack_63;
  undefined1 uStack_62;
  undefined1 uStack_61;
  float local_60;
  undefined1 uStack_5c;
  undefined1 uStack_5b;
  undefined1 uStack_5a;
  undefined1 uStack_59;
  float fStack_58;
  undefined1 uStack_54;
  undefined1 uStack_53;
  undefined1 uStack_52;
  undefined1 uStack_51;
  
  iVar6 = (int)param_5;
  if (iVar6 == 2) {
    param_4 = param_4 * 2;
    if (0 < param_4) {
      uVar3 = param_4 - 1U >> 1;
      uVar1 = uVar3 + 1;
      if (((uVar1 < 5 || param_2 < param_1 + 8 && param_1 < param_2 + 8) ||
           param_3 < param_2 + (ulong)uVar1 * 2 && param_2 < param_3 + 1) ||
         (param_3 + 4 < param_2 + (ulong)uVar1 * 2 && param_2 < param_3 + 3)) {
        pfVar4 = param_2 + 1;
        pfVar5 = param_1 + 1;
        do {
          pfVar2 = pfVar5 + 2;
          fVar12 = param_3[4];
          fVar13 = *pfVar5;
          fVar14 = param_3[5];
          pfVar4[-1] = param_3[2] + pfVar5[-1] * *param_3;
          *pfVar4 = fVar14 + fVar13 * fVar12;
          pfVar4 = pfVar4 + 2;
          pfVar5 = pfVar2;
        } while (pfVar2 != param_1 + (ulong)uVar3 * 2 + 3);
      }
      else {
        uVar3 = (uVar3 - 3 >> 2) + 1;
        if (param_4 - 1U < 6) {
          uVar10 = 0;
        }
        else {
          fVar15 = param_3[2];
          fVar12 = *param_3;
          fVar13 = param_3[4];
          fVar14 = param_3[5];
          uVar8 = 0;
          pfVar4 = param_2;
          pfVar5 = param_1;
          do {
            fVar16 = *pfVar5;
            fVar20 = pfVar5[1];
            fVar17 = pfVar5[2];
            fVar21 = pfVar5[3];
            fVar18 = pfVar5[4];
            fVar22 = pfVar5[5];
            fVar19 = pfVar5[6];
            fVar23 = pfVar5[7];
            pfVar5 = pfVar5 + 8;
            uVar8 = uVar8 + 1;
            _local_70 = CONCAT17((char)((uint)fVar17 >> 0x18),
                                 CONCAT16((char)((uint)fVar17 >> 0x10),
                                          CONCAT15((char)((uint)fVar17 >> 8),
                                                   CONCAT14(SUB41(fVar17,0),fVar16))));
            _fStack_68 = CONCAT17((char)((uint)fVar19 >> 0x18),
                                  CONCAT16((char)((uint)fVar19 >> 0x10),
                                           CONCAT15((char)((uint)fVar19 >> 8),
                                                    CONCAT14(SUB41(fVar19,0),fVar18))));
            _local_60 = CONCAT17((char)((uint)fVar21 >> 0x18),
                                 CONCAT16((char)((uint)fVar21 >> 0x10),
                                          CONCAT15((char)((uint)fVar21 >> 8),
                                                   CONCAT14(SUB41(fVar21,0),fVar20))));
            _fStack_58 = CONCAT17((char)((uint)fVar23 >> 0x18),
                                  CONCAT16((char)((uint)fVar23 >> 0x10),
                                           CONCAT15((char)((uint)fVar23 >> 8),
                                                    CONCAT14(SUB41(fVar23,0),fVar22))));
                    /* catch() { ... } // from try @ 002c8e70 with catch @ 002c8e50
                       catch() { ... } // from try @ 002c905c with catch @ 002c8e50
                       catch() { ... } // from try @ 002c91e0 with catch @ 002c8e50 */
            *pfVar4 = fVar15 + fVar12 * fVar16;
            pfVar4[1] = fVar14 + fVar13 * fVar20;
            pfVar4[2] = fVar15 + fVar12 * (float)((ulong)_local_70 >> 0x20);
            pfVar4[3] = fVar14 + fVar13 * (float)((ulong)_local_60 >> 0x20);
            pfVar4[4] = fVar15 + fVar12 * fVar18;
            pfVar4[5] = fVar14 + fVar13 * fVar22;
            pfVar4[6] = fVar15 + fVar12 * (float)((ulong)_fStack_68 >> 0x20);
            pfVar4[7] = fVar14 + fVar13 * (float)((ulong)_fStack_58 >> 0x20);
            pfVar4 = pfVar4 + 8;
          } while (uVar8 < uVar3);
          uVar10 = (ulong)(uVar3 * 8);
                    /* try { // try from 002c8e70 to 003c8e8f has its CatchHandler @ 002c8e50 */
          if (uVar1 == uVar3 * 4) {
            return;
          }
        }
        uVar9 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
        uVar1 = (int)uVar10 + 2;
        fVar12 = param_3[4];
        fVar13 = *(float *)((long)param_1 + uVar9 + 4);
        fVar14 = param_3[5];
        *(float *)((long)param_2 + uVar9) =
             param_3[2] + *(float *)((long)param_1 + uVar9) * *param_3;
        *(float *)((long)param_2 + uVar9 + 4) = fVar14 + fVar13 * fVar12;
        if ((int)uVar1 < param_4) {
                    /* try { // try from 002c8eb0 to 003c8eb3 has its CatchHandler @ 002c91f8 */
          uVar9 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
          uVar1 = (int)uVar10 + 4;
          fVar12 = param_3[4];
          fVar13 = *(float *)((long)param_1 + uVar9 + 4);
          fVar14 = param_3[5];
          *(float *)((long)param_2 + uVar9) =
               param_3[2] + *(float *)((long)param_1 + uVar9) * *param_3;
          *(float *)((long)param_2 + uVar9 + 4) = fVar14 + fVar13 * fVar12;
          if ((int)uVar1 < param_4) {
            uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
                    /* try { // try from 002c8efc to 003c8eff has its CatchHandler @ 002c91e4 */
                    /* try { // try from 002c8f04 to 003c8f07 has its CatchHandler @ 002c91f8 */
            fVar14 = param_3[4];
            fVar13 = *(float *)((long)param_1 + uVar10 + 4);
            fVar12 = param_3[5];
            *(float *)((long)param_2 + uVar10) =
                 param_3[2] + *(float *)((long)param_1 + uVar10) * *param_3;
            *(float *)((long)param_2 + uVar10 + 4) = fVar12 + fVar13 * fVar14;
            return;
          }
        }
      }
    }
  }
  else {
                    /* try { // try from 002c8ce0 to 003c8ce3 has its CatchHandler @ 002c8c48 */
    if (iVar6 == 3) {
      param_4 = param_4 * 3;
      if (0 < param_4) {
        uVar3 = (param_4 - 1U) / 3;
        uVar1 = uVar3 + 1;
                    /* try { // try from 002c8f7c to 003c8fef has its CatchHandler @ 002c91a0 */
        pfVar4 = param_2 + (ulong)uVar1 * 3;
        if ((((uVar1 < 5 || param_2 < param_1 + 0xc && param_1 < param_2 + 0xc) ||
             param_3 < pfVar4 && param_2 < param_3 + 1) ||
             param_3 + 7 < pfVar4 && param_2 < param_3 + 8) ||
           (param_3 + 0xb < pfVar4 && param_2 < param_3 + 6)) {
          iVar6 = 0;
          do {
            fVar17 = param_1[2];
            iVar6 = iVar6 + 3;
            fVar14 = param_3[10];
            fVar16 = param_3[0xb];
            fVar12 = *param_3;
            fVar15 = *param_1;
            fVar13 = param_3[3];
            param_2[1] = param_3[7] + param_1[1] * param_3[5];
            param_2[2] = fVar16 + fVar17 * fVar14;
            *param_2 = fVar13 + fVar15 * fVar12;
            param_1 = param_1 + 3;
            param_2 = param_2 + 3;
          } while (iVar6 < param_4);
        }
        else {
          uVar3 = (uVar3 - 3 >> 2) + 1;
          if (param_4 - 1U < 9) {
            uVar10 = 0;
          }
          else {
            fVar17 = param_3[3];
            fVar12 = *param_3;
            fVar16 = param_3[5];
            fVar15 = param_3[7];
            fVar13 = param_3[10];
            uVar8 = 0;
            fVar14 = param_3[0xb];
            pfVar4 = param_2;
            pfVar5 = param_1;
            do {
              fVar18 = *pfVar5;
              fVar22 = pfVar5[1];
              fVar26 = pfVar5[2];
              fVar19 = pfVar5[3];
              fVar23 = pfVar5[4];
              fVar27 = pfVar5[5];
              fVar20 = pfVar5[6];
              fVar24 = pfVar5[7];
              fVar28 = pfVar5[8];
              fVar21 = pfVar5[9];
              fVar25 = pfVar5[10];
              fVar29 = pfVar5[0xb];
              pfVar5 = pfVar5 + 0xc;
                    /* try { // try from 002c903c to 003c9053 has its CatchHandler @ 002c91f8 */
              uVar8 = uVar8 + 1;
              _local_b0 = CONCAT14(SUB41(fVar19,0),fVar18);
              _local_b0 = CONCAT15((char)((uint)fVar19 >> 8),_local_b0);
              _local_b0 = CONCAT16((char)((uint)fVar19 >> 0x10),_local_b0);
              _local_b0 = CONCAT17((char)((uint)fVar19 >> 0x18),_local_b0);
              _fStack_a8 = CONCAT14(SUB41(fVar21,0),fVar20);
              _fStack_a8 = CONCAT15((char)((uint)fVar21 >> 8),_fStack_a8);
              _fStack_a8 = CONCAT16((char)((uint)fVar21 >> 0x10),_fStack_a8);
              _fStack_a8 = CONCAT17((char)((uint)fVar21 >> 0x18),_fStack_a8);
              _local_a0 = CONCAT14(SUB41(fVar23,0),fVar22);
              _local_a0 = CONCAT15((char)((uint)fVar23 >> 8),_local_a0);
              _local_a0 = CONCAT16((char)((uint)fVar23 >> 0x10),_local_a0);
              _local_a0 = CONCAT17((char)((uint)fVar23 >> 0x18),_local_a0);
              _fStack_98 = CONCAT14(SUB41(fVar25,0),fVar24);
              _fStack_98 = CONCAT15((char)((uint)fVar25 >> 8),_fStack_98);
              _fStack_98 = CONCAT16((char)((uint)fVar25 >> 0x10),_fStack_98);
              _fStack_98 = CONCAT17((char)((uint)fVar25 >> 0x18),_fStack_98);
                    /* try { // try from 002c905c to 003c9193 has its CatchHandler @ 002c8e50 */
              *pfVar4 = fVar17 + fVar12 * fVar18;
              pfVar4[1] = fVar15 + fVar16 * fVar22;
              pfVar4[2] = fVar14 + fVar13 * fVar26;
              pfVar4[3] = fVar17 + fVar12 * (float)((ulong)_local_b0 >> 0x20);
              pfVar4[4] = fVar15 + fVar16 * (float)((ulong)_local_a0 >> 0x20);
              pfVar4[5] = fVar14 + fVar13 * (float)(CONCAT17((char)((uint)fVar27 >> 0x18),
                                                             CONCAT16((char)((uint)fVar27 >> 0x10),
                                                                      CONCAT15((char)((uint)fVar27
                                                                                     >> 8),
                                                                               CONCAT14(SUB41(fVar27
                                                  ,0),fVar26)))) >> 0x20);
              pfVar4[6] = fVar17 + fVar12 * fVar20;
              pfVar4[7] = fVar15 + fVar16 * fVar24;
              pfVar4[8] = fVar14 + fVar13 * fVar28;
              pfVar4[9] = fVar17 + fVar12 * (float)((ulong)_fStack_a8 >> 0x20);
              pfVar4[10] = fVar15 + fVar16 * (float)((ulong)_fStack_98 >> 0x20);
              pfVar4[0xb] = fVar14 + fVar13 * (float)(CONCAT17((char)((uint)fVar29 >> 0x18),
                                                               CONCAT16((char)((uint)fVar29 >> 0x10)
                                                                        ,CONCAT15((char)((uint)
                                                  fVar29 >> 8),CONCAT14(SUB41(fVar29,0),fVar28))))
                                                  >> 0x20);
              pfVar4 = pfVar4 + 0xc;
            } while (uVar8 < uVar3);
            uVar10 = (ulong)(uVar3 * 0xc);
            if (uVar1 == uVar3 * 4) {
              return;
            }
          }
          uVar9 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
          uVar1 = (int)uVar10 + 3;
          fVar14 = param_3[5];
          fVar17 = *(float *)((long)param_1 + uVar9 + 4);
          fVar16 = param_3[7];
          fVar12 = param_3[10];
          fVar15 = *(float *)((long)param_1 + uVar9 + 8);
          fVar13 = param_3[0xb];
          *(float *)((long)param_2 + uVar9) =
               param_3[3] + *(float *)((long)param_1 + uVar9) * *param_3;
          *(float *)((long)param_2 + uVar9 + 4) = fVar16 + fVar17 * fVar14;
          *(float *)((long)param_2 + uVar9 + 8) = fVar13 + fVar15 * fVar12;
          if ((int)uVar1 < param_4) {
            uVar9 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            uVar1 = (int)uVar10 + 6;
            fVar14 = param_3[5];
            fVar17 = *(float *)((long)param_1 + uVar9 + 4);
            fVar16 = param_3[7];
            fVar12 = param_3[10];
            fVar15 = *(float *)((long)param_1 + uVar9 + 8);
            fVar13 = param_3[0xb];
            *(float *)((long)param_2 + uVar9) =
                 param_3[3] + *(float *)((long)param_1 + uVar9) * *param_3;
            *(float *)((long)param_2 + uVar9 + 4) = fVar16 + fVar17 * fVar14;
            *(float *)((long)param_2 + uVar9 + 8) = fVar13 + fVar15 * fVar12;
            if ((int)uVar1 < param_4) {
              uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
              fVar15 = param_3[5];
              fVar17 = *(float *)((long)param_1 + uVar10 + 4);
              fVar13 = param_3[7];
              fVar14 = param_3[10];
              fVar16 = *(float *)((long)param_1 + uVar10 + 8);
              fVar12 = param_3[0xb];
              *(float *)((long)param_2 + uVar10) =
                   param_3[3] + *(float *)((long)param_1 + uVar10) * *param_3;
              *(float *)((long)param_2 + uVar10 + 4) = fVar13 + fVar17 * fVar15;
              *(float *)((long)param_2 + uVar10 + 8) = fVar12 + fVar16 * fVar14;
              return;
            }
          }
        }
      }
    }
    else if (iVar6 == 4) {
      param_4 = param_4 * 4;
                    /* catch() { ... } // from try @ 002c8f7c with catch @ 002c91a0 */
      if (0 < param_4) {
        uVar3 = param_4 - 1U >> 2;
        uVar1 = uVar3 + 1;
                    /* try { // try from 002c91e0 to 003c91e3 has its CatchHandler @ 002c8e50 */
                    /* catch() { ... } // from try @ 002c8efc with catch @ 002c91e4 */
                    /* catch() { ... } // from try @ 002c8eb0 with catch @ 002c91f8
                       catch() { ... } // from try @ 002c8f04 with catch @ 002c91f8
                       catch() { ... } // from try @ 002c903c with catch @ 002c91f8 */
        if (((uVar1 < 6 || param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) ||
             param_3 < param_2 + (ulong)uVar1 * 4 && param_2 < param_3 + 1) ||
           (param_3 + 0x12 < param_2 + (ulong)uVar1 * 4 && param_2 < param_3 + 0xf)) {
          pfVar4 = param_2 + 1;
          do {
            pfVar5 = pfVar4 + 4;
            fVar13 = *param_1;
            fVar14 = param_3[4];
            fVar12 = *param_3;
            *pfVar4 = param_3[9] + param_1[1] * param_3[6];
            pfVar4[-1] = fVar14 + fVar13 * fVar12;
            fVar13 = param_1[2];
            fVar12 = param_3[0xc];
            fVar14 = param_3[0xe];
            pfVar4[2] = param_3[0x13] + param_1[3] * param_3[0x12];
            pfVar4[1] = fVar14 + fVar13 * fVar12;
            param_1 = param_1 + 4;
            pfVar4 = pfVar5;
          } while (pfVar5 != param_2 + (ulong)uVar3 * 4 + 5);
        }
        else {
          uVar3 = (uVar3 - 3 >> 2) + 1;
          if (param_4 - 1U < 0xc) {
            uVar10 = 0;
          }
          else {
            fVar19 = param_3[4];
            fVar12 = *param_3;
            fVar18 = param_3[6];
            fVar17 = param_3[9];
            fVar16 = param_3[0xc];
            uVar8 = 0;
            fVar15 = param_3[0xe];
            fVar13 = param_3[0x12];
            fVar14 = param_3[0x13];
            pfVar4 = param_2;
            pfVar5 = param_1;
            do {
              fVar20 = *pfVar5;
              fVar24 = pfVar5[1];
              fVar28 = pfVar5[2];
              fVar32 = pfVar5[3];
              fVar21 = pfVar5[4];
              fVar25 = pfVar5[5];
              fVar29 = pfVar5[6];
              fVar33 = pfVar5[7];
              fVar22 = pfVar5[8];
              fVar26 = pfVar5[9];
              fVar30 = pfVar5[10];
              fVar34 = pfVar5[0xb];
              fVar23 = pfVar5[0xc];
              fVar27 = pfVar5[0xd];
              fVar31 = pfVar5[0xe];
              fVar35 = pfVar5[0xf];
              pfVar5 = pfVar5 + 0x10;
              uVar8 = uVar8 + 1;
              _local_b0 = CONCAT14(SUB41(fVar21,0),fVar20);
              _local_b0 = CONCAT15((char)((uint)fVar21 >> 8),_local_b0);
              _local_b0 = CONCAT16((char)((uint)fVar21 >> 0x10),_local_b0);
              _local_b0 = CONCAT17((char)((uint)fVar21 >> 0x18),_local_b0);
              _fStack_a8 = CONCAT14(SUB41(fVar23,0),fVar22);
              _fStack_a8 = CONCAT15((char)((uint)fVar23 >> 8),_fStack_a8);
              _fStack_a8 = CONCAT16((char)((uint)fVar23 >> 0x10),_fStack_a8);
              _fStack_a8 = CONCAT17((char)((uint)fVar23 >> 0x18),_fStack_a8);
              _local_a0 = CONCAT14(SUB41(fVar25,0),fVar24);
              _local_a0 = CONCAT15((char)((uint)fVar25 >> 8),_local_a0);
              _local_a0 = CONCAT16((char)((uint)fVar25 >> 0x10),_local_a0);
              _local_a0 = CONCAT17((char)((uint)fVar25 >> 0x18),_local_a0);
              _fStack_98 = CONCAT14(SUB41(fVar27,0),fVar26);
              _fStack_98 = CONCAT15((char)((uint)fVar27 >> 8),_fStack_98);
              _fStack_98 = CONCAT16((char)((uint)fVar27 >> 0x10),_fStack_98);
              _fStack_98 = CONCAT17((char)((uint)fVar27 >> 0x18),_fStack_98);
              *pfVar4 = fVar19 + fVar12 * fVar20;
              pfVar4[1] = fVar17 + fVar18 * fVar24;
              pfVar4[2] = fVar15 + fVar16 * fVar28;
              pfVar4[3] = fVar14 + fVar13 * fVar32;
              pfVar4[4] = fVar19 + fVar12 * (float)((ulong)_local_b0 >> 0x20);
              pfVar4[5] = fVar17 + fVar18 * (float)((ulong)_local_a0 >> 0x20);
              pfVar4[6] = fVar15 + fVar16 * (float)(CONCAT17((char)((uint)fVar29 >> 0x18),
                                                             CONCAT16((char)((uint)fVar29 >> 0x10),
                                                                      CONCAT15((char)((uint)fVar29
                                                                                     >> 8),
                                                                               CONCAT14(SUB41(fVar29
                                                  ,0),fVar28)))) >> 0x20);
              pfVar4[7] = fVar14 + fVar13 * (float)(CONCAT17((char)((uint)fVar33 >> 0x18),
                                                             CONCAT16((char)((uint)fVar33 >> 0x10),
                                                                      CONCAT15((char)((uint)fVar33
                                                                                     >> 8),
                                                                               CONCAT14(SUB41(fVar33
                                                  ,0),fVar32)))) >> 0x20);
              pfVar4[8] = fVar19 + fVar12 * fVar22;
              pfVar4[9] = fVar17 + fVar18 * fVar26;
              pfVar4[10] = fVar15 + fVar16 * fVar30;
              pfVar4[0xb] = fVar14 + fVar13 * fVar34;
              pfVar4[0xc] = fVar19 + fVar12 * (float)((ulong)_fStack_a8 >> 0x20);
              pfVar4[0xd] = fVar17 + fVar18 * (float)((ulong)_fStack_98 >> 0x20);
              pfVar4[0xe] = fVar15 + fVar16 * (float)(CONCAT17((char)((uint)fVar31 >> 0x18),
                                                               CONCAT16((char)((uint)fVar31 >> 0x10)
                                                                        ,CONCAT15((char)((uint)
                                                  fVar31 >> 8),CONCAT14(SUB41(fVar31,0),fVar30))))
                                                  >> 0x20);
              pfVar4[0xf] = fVar14 + fVar13 * (float)(CONCAT17((char)((uint)fVar35 >> 0x18),
                                                               CONCAT16((char)((uint)fVar35 >> 0x10)
                                                                        ,CONCAT15((char)((uint)
                                                  fVar35 >> 8),CONCAT14(SUB41(fVar35,0),fVar34))))
                                                  >> 0x20);
              pfVar4 = pfVar4 + 0x10;
            } while (uVar8 < uVar3);
            uVar10 = (ulong)(uVar3 * 0x10);
            if (uVar1 == uVar3 * 4) {
              return;
            }
          }
          uVar9 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
          uVar1 = (int)uVar10 + 4;
          fVar13 = *(float *)((long)param_1 + uVar9 + 4);
          fVar14 = param_3[9];
          fVar12 = param_3[6];
          *(float *)((long)param_2 + uVar9) =
               param_3[4] + *(float *)((long)param_1 + uVar9) * *param_3;
          *(float *)((long)param_2 + uVar9 + 4) = fVar14 + fVar13 * fVar12;
          fVar12 = param_3[0x12];
          fVar13 = *(float *)((long)param_1 + uVar9 + 0xc);
          fVar14 = param_3[0x13];
          *(float *)((long)param_2 + uVar9 + 8) =
               param_3[0xe] + *(float *)((long)param_1 + uVar9 + 8) * param_3[0xc];
          *(float *)((long)param_2 + uVar9 + 0xc) = fVar14 + fVar13 * fVar12;
          if ((int)uVar1 < param_4) {
            uVar9 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            uVar1 = (int)uVar10 + 8;
            fVar13 = *(float *)((long)param_1 + uVar9 + 4);
            fVar14 = param_3[9];
            fVar12 = param_3[6];
            *(float *)((long)param_2 + uVar9) =
                 param_3[4] + *(float *)((long)param_1 + uVar9) * *param_3;
            *(float *)((long)param_2 + uVar9 + 4) = fVar14 + fVar13 * fVar12;
            fVar12 = param_3[0x12];
            fVar13 = *(float *)((long)param_1 + uVar9 + 0xc);
            fVar14 = param_3[0x13];
            *(float *)((long)param_2 + uVar9 + 8) =
                 param_3[0xe] + *(float *)((long)param_1 + uVar9 + 8) * param_3[0xc];
            *(float *)((long)param_2 + uVar9 + 0xc) = fVar14 + fVar13 * fVar12;
            if ((int)uVar1 < param_4) {
              uVar10 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
              fVar13 = *(float *)((long)param_1 + uVar10 + 4);
              fVar14 = param_3[9];
              fVar12 = param_3[6];
              *(float *)((long)param_2 + uVar10) =
                   param_3[4] + *(float *)((long)param_1 + uVar10) * *param_3;
              *(float *)((long)param_2 + uVar10 + 4) = fVar14 + fVar13 * fVar12;
              fVar14 = param_3[0x12];
              fVar13 = *(float *)((long)param_1 + uVar10 + 0xc);
              fVar12 = param_3[0x13];
              *(float *)((long)param_2 + uVar10 + 8) =
                   param_3[0xe] + *(float *)((long)param_1 + uVar10 + 8) * param_3[0xc];
              *(float *)((long)param_2 + uVar10 + 0xc) = fVar12 + fVar13 * fVar14;
            }
          }
        }
      }
    }
    else if (0 < param_4) {
      uVar10 = -(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2;
      iVar11 = 0;
      do {
        if (0 < iVar6) {
          pfVar4 = (float *)((long)param_3 + uVar10);
          lVar7 = 0;
          pfVar5 = param_3;
          do {
            fVar14 = *pfVar5;
            pfVar5 = (float *)((long)pfVar5 + uVar10 + 8);
            fVar12 = *pfVar4;
            pfVar4 = (float *)((long)pfVar4 + uVar10 + 4);
            param_2[lVar7] = fVar12 + fVar14 * param_1[lVar7];
            lVar7 = lVar7 + 1;
          } while ((int)lVar7 < iVar6);
        }
        iVar11 = iVar11 + 1;
        param_1 = (float *)((long)param_1 + uVar10);
        param_2 = (float *)((long)param_2 + uVar10);
      } while (iVar11 != param_4);
    }
  }
  return;
}


==================================================================

### FUNC 002c9570 (1844 bytes) name=FUN_002c9570

void FUN_002c9570(double *param_1,double *param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  double *pdVar2;
  uint uVar3;
  double *pdVar4;
  double *pdVar5;
  int iVar6;
  uint uVar7;
  long lVar8;
  ulong uVar9;
  int iVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  
  iVar6 = (int)param_5;
  if (iVar6 == 2) {
    if (0 < param_4 * 2) {
      uVar7 = param_4 * 2 - 1;
      uVar3 = uVar7 >> 1;
      uVar1 = uVar3 + 1;
      if (((4 < uVar1 && (param_1 + 4 <= param_2 || param_2 + 4 <= param_1)) &&
           (param_2 + (ulong)uVar1 * 2 <= param_3 || param_3 + 1 <= param_2)) &&
         (param_2 + (ulong)uVar1 * 2 <= param_3 + 5 || param_3 + 3 <= param_2)) {
        uVar3 = (uVar3 - 1 >> 1) + 1;
        if (uVar7 < 2) {
          uVar9 = 0;
        }
        else {
          dVar14 = param_3[2];
          dVar11 = *param_3;
          dVar12 = param_3[4];
          dVar13 = param_3[5];
          uVar7 = 0;
          pdVar4 = param_2;
          pdVar5 = param_1;
          do {
            dVar15 = *pdVar5;
            dVar17 = pdVar5[1];
            dVar16 = pdVar5[2];
            dVar18 = pdVar5[3];
            pdVar5 = pdVar5 + 4;
            uVar7 = uVar7 + 1;
            *pdVar4 = dVar14 + dVar11 * dVar15;
            pdVar4[1] = dVar13 + dVar12 * dVar17;
            pdVar4[2] = dVar14 + dVar11 * dVar16;
            pdVar4[3] = dVar13 + dVar12 * dVar18;
            pdVar4 = pdVar4 + 4;
          } while (uVar7 < uVar3);
          uVar9 = (ulong)(uVar3 * 4);
          if (uVar1 == uVar3 * 2) {
            return;
          }
        }
        uVar9 = -(uVar9 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
        dVar13 = param_3[4];
        dVar12 = *(double *)((long)param_1 + uVar9 + 8);
        dVar11 = param_3[5];
        *(double *)((long)param_2 + uVar9) =
             param_3[2] + *(double *)((long)param_1 + uVar9) * *param_3;
        *(double *)((long)param_2 + uVar9 + 8) = dVar11 + dVar12 * dVar13;
        return;
      }
      pdVar4 = param_2 + 1;
      pdVar5 = param_1 + 1;
      do {
        pdVar2 = pdVar5 + 2;
        dVar11 = param_3[4];
        dVar13 = param_3[5];
        dVar12 = *pdVar5;
        pdVar4[-1] = param_3[2] + pdVar5[-1] * *param_3;
        *pdVar4 = dVar13 + dVar12 * dVar11;
        pdVar4 = pdVar4 + 2;
        pdVar5 = pdVar2;
      } while (pdVar2 != param_1 + (ulong)uVar3 * 2 + 3);
    }
  }
  else if (iVar6 == 3) {
    param_4 = param_4 * 3;
    if (0 < param_4) {
      uVar3 = (param_4 - 1U) / 3;
      uVar1 = uVar3 + 1;
      pdVar4 = param_2 + (ulong)uVar1 * 3;
      if (((((4 < uVar1 && (param_1 + 6 <= param_2 || param_2 + 6 <= param_1)) &&
            (pdVar4 <= param_3 || param_3 + 1 <= param_2)) &&
           (pdVar4 <= param_3 + 5 || param_3 + 6 <= param_2)) &&
           (pdVar4 <= param_3 + 10 || param_3 + 4 <= param_2)) &&
         (pdVar4 <= param_3 + 0xb || param_3 + 8 <= param_2)) {
        uVar3 = (uVar3 - 1 >> 1) + 1;
        if (param_4 - 1U < 3) {
          uVar9 = 0;
        }
        else {
          dVar16 = param_3[3];
          dVar11 = *param_3;
          dVar15 = param_3[5];
          dVar14 = param_3[7];
          dVar12 = param_3[10];
          uVar7 = 0;
          dVar13 = param_3[0xb];
          pdVar4 = param_2;
          pdVar5 = param_1;
          do {
            dVar17 = *pdVar5;
            dVar19 = pdVar5[1];
            dVar21 = pdVar5[2];
            dVar18 = pdVar5[3];
            dVar20 = pdVar5[4];
            dVar22 = pdVar5[5];
            pdVar5 = pdVar5 + 6;
            uVar7 = uVar7 + 1;
            *pdVar4 = dVar16 + dVar11 * dVar17;
            pdVar4[1] = dVar14 + dVar15 * dVar19;
            pdVar4[2] = dVar13 + dVar12 * dVar21;
            pdVar4[3] = dVar16 + dVar11 * dVar18;
            pdVar4[4] = dVar14 + dVar15 * dVar20;
            pdVar4[5] = dVar13 + dVar12 * dVar22;
            pdVar4 = pdVar4 + 6;
          } while (uVar7 < uVar3);
          uVar9 = (ulong)(uVar3 * 6);
          if (uVar1 == uVar3 * 2) {
            return;
          }
        }
        uVar9 = -(uVar9 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
        dVar14 = param_3[5];
        dVar16 = *(double *)((long)param_1 + uVar9 + 8);
        dVar12 = param_3[7];
        dVar13 = param_3[10];
        dVar15 = *(double *)((long)param_1 + uVar9 + 0x10);
        dVar11 = param_3[0xb];
        *(double *)((long)param_2 + uVar9) =
             param_3[3] + *(double *)((long)param_1 + uVar9) * *param_3;
        *(double *)((long)param_2 + uVar9 + 8) = dVar12 + dVar16 * dVar14;
        *(double *)((long)param_2 + uVar9 + 0x10) = dVar11 + dVar15 * dVar13;
        return;
      }
      iVar6 = 0;
      do {
        dVar16 = param_1[2];
        iVar6 = iVar6 + 3;
        dVar13 = param_3[10];
        dVar15 = param_3[0xb];
        dVar11 = *param_3;
        dVar14 = *param_1;
        dVar12 = param_3[3];
        param_2[1] = param_3[7] + param_1[1] * param_3[5];
        param_2[2] = dVar15 + dVar16 * dVar13;
        *param_2 = dVar12 + dVar14 * dVar11;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar6 < param_4);
    }
  }
  else if (iVar6 == 4) {
    if (0 < param_4 * 4) {
      uVar7 = param_4 * 4 - 1;
      uVar3 = uVar7 >> 2;
      uVar1 = uVar3 + 1;
      pdVar4 = param_2 + (ulong)uVar1 * 4;
      if ((((((5 < uVar1 && (param_1 + 8 <= param_2 || param_2 + 8 <= param_1)) &&
             (pdVar4 <= param_3 || param_3 + 1 <= param_2)) &&
            (pdVar4 <= param_3 + 9 || param_3 + 7 <= param_2)) &&
           (pdVar4 <= param_3 + 0xe || param_3 + 5 <= param_2)) &&
           (pdVar4 <= param_3 + 0x12 || param_3 + 0xd <= param_2)) &&
         (pdVar4 <= param_3 + 0x13 || param_3 + 0x14 <= param_2)) {
        uVar3 = (uVar3 - 1 >> 1) + 1;
        if (uVar7 < 4) {
          uVar9 = 0;
        }
        else {
          dVar18 = param_3[4];
          dVar11 = *param_3;
          dVar17 = param_3[6];
          dVar16 = param_3[9];
          dVar15 = param_3[0xc];
          uVar7 = 0;
          dVar14 = param_3[0xe];
          dVar12 = param_3[0x12];
          dVar13 = param_3[0x13];
          pdVar4 = param_2;
          pdVar5 = param_1;
          do {
            dVar19 = *pdVar5;
            dVar21 = pdVar5[1];
            dVar23 = pdVar5[2];
            dVar25 = pdVar5[3];
            dVar20 = pdVar5[4];
            dVar22 = pdVar5[5];
            dVar24 = pdVar5[6];
            dVar26 = pdVar5[7];
            pdVar5 = pdVar5 + 8;
            uVar7 = uVar7 + 1;
            *pdVar4 = dVar18 + dVar11 * dVar19;
            pdVar4[1] = dVar16 + dVar17 * dVar21;
            pdVar4[2] = dVar14 + dVar15 * dVar23;
            pdVar4[3] = dVar13 + dVar12 * dVar25;
            pdVar4[4] = dVar18 + dVar11 * dVar20;
            pdVar4[5] = dVar16 + dVar17 * dVar22;
            pdVar4[6] = dVar14 + dVar15 * dVar24;
            pdVar4[7] = dVar13 + dVar12 * dVar26;
            pdVar4 = pdVar4 + 8;
          } while (uVar7 < uVar3);
          uVar9 = (ulong)(uVar3 * 8);
          if (uVar1 == uVar3 * 2) {
            return;
          }
        }
        uVar9 = -(uVar9 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
        dVar12 = *(double *)((long)param_1 + uVar9 + 8);
        dVar13 = param_3[9];
        dVar11 = param_3[6];
        *(double *)((long)param_2 + uVar9) =
             param_3[4] + *(double *)((long)param_1 + uVar9) * *param_3;
        *(double *)((long)param_2 + uVar9 + 8) = dVar13 + dVar12 * dVar11;
        dVar13 = param_3[0x12];
        dVar12 = *(double *)((long)param_1 + uVar9 + 0x18);
        dVar11 = param_3[0x13];
        *(double *)((long)param_2 + uVar9 + 0x10) =
             param_3[0xe] + *(double *)((long)param_1 + uVar9 + 0x10) * param_3[0xc];
        *(double *)((long)param_2 + uVar9 + 0x18) = dVar11 + dVar12 * dVar13;
        return;
      }
      pdVar4 = param_2 + 1;
      do {
        pdVar5 = pdVar4 + 4;
        dVar12 = *param_1;
        dVar13 = param_3[4];
        dVar11 = *param_3;
        *pdVar4 = param_3[9] + param_1[1] * param_3[6];
        pdVar4[-1] = dVar13 + dVar12 * dVar11;
        dVar12 = param_1[2];
        dVar11 = param_3[0xc];
        dVar13 = param_3[0xe];
        pdVar4[2] = param_3[0x13] + param_1[3] * param_3[0x12];
        pdVar4[1] = dVar13 + dVar12 * dVar11;
        param_1 = param_1 + 4;
        pdVar4 = pdVar5;
      } while (pdVar5 != param_2 + (ulong)uVar3 * 4 + 5);
    }
  }
  else if (0 < param_4) {
    uVar9 = -(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3;
    iVar10 = 0;
    do {
      if (0 < iVar6) {
        pdVar4 = (double *)((long)param_3 + uVar9);
        lVar8 = 0;
        pdVar5 = param_3;
        do {
          dVar13 = *pdVar5;
          pdVar5 = (double *)((long)pdVar5 + uVar9 + 0x10);
          dVar11 = *pdVar4;
          pdVar4 = (double *)((long)pdVar4 + uVar9 + 8);
          param_2[lVar8] = dVar11 + dVar13 * param_1[lVar8];
          lVar8 = lVar8 + 1;
        } while ((int)lVar8 < iVar6);
      }
      iVar10 = iVar10 + 1;
      param_1 = (double *)((long)param_1 + uVar9);
      param_2 = (double *)((long)param_2 + uVar9);
    } while (iVar10 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c9ca4 (692 bytes) name=FUN_002c9ca4

void FUN_002c9ca4(int *param_1,undefined4 *param_2,double *param_3,int param_4,int param_5)

{
  undefined4 *puVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  int *piVar5;
  int *piVar6;
  undefined4 *puVar7;
  double *pdVar8;
  double *pdVar9;
  int iVar10;
  double dVar11;
  double dVar12;
  
  if (param_5 == 2) {
    if (0 < param_4 * 2) {
      piVar5 = param_1 + 1;
      puVar7 = param_2 + 1;
      do {
        lVar4 = lrint(param_3[2] + (double)piVar5[-1] * *param_3);
        piVar6 = piVar5 + 2;
        lVar2 = lrint(param_3[5] + (double)*piVar5 * param_3[4]);
        puVar7[-1] = (int)lVar4;
        *puVar7 = (int)lVar2;
        piVar5 = piVar6;
        puVar7 = puVar7 + 2;
      } while (piVar6 != param_1 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    }
  }
  else if (param_5 == 3) {
    if (0 < param_4 * 3) {
      iVar10 = 0;
      do {
        iVar10 = iVar10 + 3;
        lVar4 = lrint(param_3[3] + (double)*param_1 * *param_3);
        lVar2 = lrint(param_3[7] + (double)param_1[1] * param_3[5]);
        lVar3 = lrint(param_3[0xb] + (double)param_1[2] * param_3[10]);
        *param_2 = (int)lVar4;
        param_2[1] = (int)lVar2;
        param_2[2] = (int)lVar3;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar10 < param_4 * 3);
    }
  }
  else if (param_5 == 4) {
    if (0 < param_4 * 4) {
      puVar7 = param_2 + 1;
      do {
        puVar1 = puVar7 + 4;
        lVar4 = lrint(param_3[4] + (double)*param_1 * *param_3);
        lVar2 = lrint(param_3[9] + (double)param_1[1] * param_3[6]);
        puVar7[-1] = (int)lVar4;
        *puVar7 = (int)lVar2;
        lVar4 = lrint(param_3[0xe] + (double)param_1[2] * param_3[0xc]);
        lVar2 = lrint(param_3[0x13] + (double)param_1[3] * param_3[0x12]);
        puVar7[1] = (int)lVar4;
        puVar7[2] = (int)lVar2;
        puVar7 = puVar1;
        param_1 = param_1 + 4;
      } while (puVar1 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 5);
    }
  }
  else if (0 < param_4) {
    iVar10 = 0;
    do {
      if (0 < param_5) {
        lVar4 = 0;
        pdVar8 = param_3 + param_5;
        pdVar9 = param_3;
        do {
          dVar12 = *pdVar9;
          pdVar9 = pdVar9 + (long)param_5 + 2;
          dVar11 = *pdVar8;
          pdVar8 = pdVar8 + (long)param_5 + 1;
          lVar2 = lrint(dVar11 + dVar12 * (double)param_1[lVar4]);
          param_2[lVar4] = (int)lVar2;
          lVar4 = lVar4 + 1;
        } while (lVar4 != (ulong)(param_5 - 1) + 1);
      }
      iVar10 = iVar10 + 1;
      param_1 = param_1 + param_5;
      param_2 = param_2 + param_5;
    } while (iVar10 != param_4);
  }
  return;
}


==================================================================

### FUNC 002c9f58 (980 bytes) name=FUN_002c9f58

void FUN_002c9f58(short *param_1,undefined2 *param_2,float *param_3,int param_4,int param_5)

{
  short *psVar1;
  short sVar2;
  long lVar3;
  undefined2 uVar4;
  undefined2 uVar5;
  long lVar6;
  undefined2 *puVar7;
  undefined2 *puVar8;
  undefined2 uVar9;
  undefined2 uVar10;
  undefined2 uVar11;
  float *pfVar12;
  float *pfVar13;
  float fVar14;
  float fVar15;
  int iVar16;
  
  if (param_5 == 2) {
    if (0 < param_4 * 2) {
      param_1 = param_1 + 1;
      puVar8 = param_2 + 1;
      do {
        lVar6 = lrintf(param_3[2] + (float)(int)param_1[-1] * *param_3);
        uVar9 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar9 = 0x7fff, (int)lVar6 < 1)) {
          uVar9 = 0x8000;
        }
        sVar2 = *param_1;
        param_1 = param_1 + 2;
        lVar6 = lrintf(param_3[5] + (float)(int)sVar2 * param_3[4]);
        uVar4 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar4 = 0x7fff, (int)lVar6 < 1)) {
          uVar4 = 0x8000;
        }
        puVar8[-1] = uVar9;
        puVar7 = puVar8 + 2;
        *puVar8 = uVar4;
        puVar8 = puVar7;
      } while (puVar7 != param_2 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    }
  }
  else if (param_5 == 3) {
    if (0 < param_4 * 3) {
      iVar16 = 0;
      do {
        iVar16 = iVar16 + 3;
        lVar6 = lrintf(param_3[3] + (float)(int)*param_1 * *param_3);
        uVar4 = 0x8000;
        uVar10 = 0x7fff;
        uVar9 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar9 = uVar10, (int)lVar6 < 1)) {
          uVar9 = uVar4;
        }
        lVar6 = lrintf(param_3[7] + (float)(int)param_1[1] * param_3[5]);
        uVar11 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar11 = uVar10, (int)lVar6 < 1)) {
          uVar11 = uVar4;
        }
        psVar1 = param_1 + 2;
        param_1 = param_1 + 3;
        lVar6 = lrintf(param_3[0xb] + (float)(int)*psVar1 * param_3[10]);
        uVar5 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar5 = uVar10, (int)lVar6 < 1)) {
          uVar5 = uVar4;
        }
        *param_2 = uVar9;
        param_2[1] = uVar11;
        param_2[2] = uVar5;
        param_2 = param_2 + 3;
      } while (iVar16 < param_4 * 3);
    }
  }
  else if (param_5 == 4) {
    if (0 < param_4 * 4) {
      puVar8 = param_2 + 2;
      do {
        lVar6 = lrintf(param_3[4] + (float)(int)*param_1 * *param_3);
        uVar4 = 0x8000;
        uVar10 = 0x7fff;
        uVar9 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar9 = uVar10, (int)lVar6 < 1)) {
          uVar9 = uVar4;
        }
        lVar6 = lrintf(param_3[9] + (float)(int)param_1[1] * param_3[6]);
        uVar11 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar11 = uVar10, (int)lVar6 < 1)) {
          uVar11 = uVar4;
        }
        puVar8[-2] = uVar9;
        puVar8[-1] = uVar11;
        lVar6 = lrintf(param_3[0xe] + (float)(int)param_1[2] * param_3[0xc]);
        uVar9 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar9 = uVar10, (int)lVar6 < 1)) {
          uVar9 = uVar4;
        }
        psVar1 = param_1 + 3;
        param_1 = param_1 + 4;
        lVar6 = lrintf(param_3[0x13] + (float)(int)*psVar1 * param_3[0x12]);
        uVar11 = (short)lVar6;
        if ((0xffff < (int)lVar6 + 0x8000U) && (uVar11 = uVar10, (int)lVar6 < 1)) {
          uVar11 = uVar4;
        }
        *puVar8 = uVar9;
        puVar7 = puVar8 + 4;
        puVar8[1] = uVar11;
        puVar8 = puVar7;
      } while (puVar7 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    iVar16 = 0;
    do {
      if (0 < param_5) {
        lVar6 = 0;
        pfVar12 = param_3 + param_5;
        pfVar13 = param_3;
        do {
          fVar15 = *pfVar13;
          pfVar13 = pfVar13 + (long)param_5 + 2;
          fVar14 = *pfVar12;
          pfVar12 = pfVar12 + (long)param_5 + 1;
          lVar3 = lrintf(fVar14 + fVar15 * (float)(int)param_1[lVar6]);
          uVar9 = (undefined2)lVar3;
          if ((0xffff < (int)lVar3 + 0x8000U) && (uVar9 = 0x7fff, (int)lVar3 < 1)) {
            uVar9 = 0x8000;
          }
          param_2[lVar6] = uVar9;
          lVar6 = lVar6 + 1;
        } while (lVar6 != (ulong)(param_5 - 1) + 1);
      }
      iVar16 = iVar16 + 1;
      param_1 = param_1 + param_5;
      param_2 = param_2 + param_5;
    } while (iVar16 != param_4);
  }
  return;
}


==================================================================

### FUNC 002ca32c (932 bytes) name=FUN_002ca32c

void FUN_002ca32c(ushort *param_1,short *param_2,float *param_3,int param_4,int param_5)

{
  short sVar1;
  short sVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  short sVar6;
  long lVar7;
  short *psVar8;
  short *psVar9;
  float *pfVar10;
  float *pfVar11;
  int iVar12;
  
  if (param_5 == 2) {
    if (0 < param_4 * 2) {
      param_1 = param_1 + 1;
      psVar9 = param_2 + 1;
      do {
        lVar7 = lrintf(param_3[2] + (float)param_1[-1] * *param_3);
        sVar6 = (short)lVar7;
        if (0xffff < (uint)lVar7) {
          sVar6 = -(ushort)(0 < (int)(uint)lVar7);
        }
        lVar7 = lrintf(param_3[5] + (float)*param_1 * param_3[4]);
        sVar1 = (short)lVar7;
        if (0xffff < (uint)lVar7) {
          sVar1 = -(ushort)(0 < (int)(uint)lVar7);
        }
        psVar9[-1] = sVar6;
        param_1 = param_1 + 2;
        psVar8 = psVar9 + 2;
        *psVar9 = sVar1;
        psVar9 = psVar8;
      } while (psVar8 != param_2 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    }
  }
  else if (param_5 == 3) {
    if (0 < param_4 * 3) {
      iVar12 = 0;
      do {
        lVar7 = lrintf(param_3[3] + (float)*param_1 * *param_3);
        sVar6 = (short)lVar7;
        if (0xffff < (uint)lVar7) {
          sVar6 = -(ushort)(0 < (int)(uint)lVar7);
        }
        lVar7 = lrintf(param_3[7] + (float)param_1[1] * param_3[5]);
        sVar1 = (short)lVar7;
        if (0xffff < (uint)lVar7) {
          sVar1 = -(ushort)(0 < (int)(uint)lVar7);
        }
        lVar7 = lrintf(param_3[0xb] + (float)param_1[2] * param_3[10]);
        sVar2 = (short)lVar7;
        if (0xffff < (uint)lVar7) {
          sVar2 = -(ushort)(0 < (int)(uint)lVar7);
        }
        iVar12 = iVar12 + 3;
        *param_2 = sVar6;
        param_2[1] = sVar1;
        param_2[2] = sVar2;
        param_1 = param_1 + 3;
        param_2 = param_2 + 3;
      } while (iVar12 < param_4 * 3);
    }
  }
  else if (param_5 == 4) {
    if (0 < param_4 * 4) {
      psVar9 = param_2 + 2;
      do {
        lVar7 = lrintf(param_3[4] + (float)*param_1 * *param_3);
        uVar3 = (uint)lVar7;
        if (0xffff < uVar3) {
          uVar3 = -(uint)(0 < (int)uVar3);
        }
        lVar7 = lrintf(param_3[9] + (float)param_1[1] * param_3[6]);
        uVar4 = (uint)lVar7;
        if (0xffff < uVar4) {
          uVar4 = -(uint)(0 < (int)uVar4);
        }
        psVar9[-2] = (short)uVar3;
        psVar9[-1] = (short)uVar4;
        lVar7 = lrintf(param_3[0xe] + (float)param_1[2] * param_3[0xc]);
        uVar3 = (uint)lVar7;
        if (0xffff < uVar3) {
          uVar3 = -(uint)(0 < (int)uVar3);
        }
        lVar7 = lrintf(param_3[0x13] + (float)param_1[3] * param_3[0x12]);
        uVar4 = (uint)lVar7;
        if (0xffff < uVar4) {
          uVar4 = -(uint)(0 < (int)uVar4);
        }
        *psVar9 = (short)uVar3;
        psVar8 = psVar9 + 4;
        param_1 = param_1 + 4;
        psVar9[1] = (short)uVar4;
        psVar9 = psVar8;
      } while (psVar8 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    iVar12 = 0;
    do {
      if (0 < param_5) {
        lVar7 = 0;
        pfVar10 = param_3 + param_5;
        pfVar11 = param_3;
        do {
          lVar5 = lrintf(*pfVar10 + *pfVar11 * (float)param_1[lVar7]);
          sVar6 = (short)lVar5;
          if (0xffff < (uint)lVar5) {
            sVar6 = -(ushort)(0 < (int)(uint)lVar5);
          }
          param_2[lVar7] = sVar6;
          lVar7 = lVar7 + 1;
          pfVar11 = pfVar11 + (long)param_5 + 2;
          pfVar10 = pfVar10 + (long)param_5 + 1;
        } while (lVar7 != (ulong)(param_5 - 1) + 1);
      }
      iVar12 = iVar12 + 1;
      param_1 = param_1 + param_5;
      param_2 = param_2 + param_5;
    } while (iVar12 != param_4);
  }
  return;
}


==================================================================

### FUNC 002ca6d0 (964 bytes) name=FUN_002ca6d0

void FUN_002ca6d0(char *param_1,undefined1 *param_2,float *param_3,int param_4,int param_5)

{
  char *pcVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  undefined1 uVar5;
  undefined1 uVar6;
  long lVar7;
  undefined1 *puVar8;
  char *pcVar9;
  undefined1 *puVar10;
  undefined1 uVar11;
  undefined1 uVar12;
  float *pfVar13;
  undefined1 uVar14;
  float *pfVar15;
  float fVar16;
  long lVar17;
  float fVar18;
  int iVar19;
  
  if (param_5 == 2) {
    if (0 < param_4 * 2) {
      param_1 = param_1 + 1;
      puVar10 = param_2 + 1;
      do {
        lVar3 = lrintf(param_3[2] + (float)(byte)param_1[-1] * *param_3);
        uVar11 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar11 = 0x7f, (int)lVar3 < 1)) {
          uVar11 = 0x80;
        }
        cVar2 = *param_1;
        param_1 = param_1 + 2;
        lVar3 = lrintf(param_3[5] + (float)(int)cVar2 * param_3[4]);
        uVar5 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar5 = 0x7f, (int)lVar3 < 1)) {
          uVar5 = 0x80;
        }
        puVar10[-1] = uVar11;
        puVar8 = puVar10 + 2;
        *puVar10 = uVar5;
        puVar10 = puVar8;
      } while (puVar8 != param_2 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    }
  }
  else if (param_5 == 3) {
    pcVar9 = param_1;
    if (0 < param_4 * 3) {
      do {
        lVar3 = lrintf(param_3[3] + (float)(int)*pcVar9 * *param_3);
        uVar5 = 0x80;
        uVar14 = 0x7f;
        uVar11 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar11 = uVar14, (int)lVar3 < 1)) {
          uVar11 = uVar5;
        }
        lVar3 = lrintf(param_3[7] + (float)(int)pcVar9[1] * param_3[5]);
        uVar12 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar12 = uVar14, (int)lVar3 < 1)) {
          uVar12 = uVar5;
        }
        pcVar1 = pcVar9 + 3;
        lVar3 = lrintf(param_3[0xb] + (float)(int)pcVar9[2] * param_3[10]);
        uVar6 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar6 = uVar14, (int)lVar3 < 1)) {
          uVar6 = uVar5;
        }
        *param_2 = uVar11;
        param_2[1] = uVar12;
        param_2[2] = uVar6;
        pcVar9 = pcVar1;
        param_2 = param_2 + 3;
      } while ((int)pcVar1 - (int)param_1 < param_4 * 3);
    }
  }
  else if (param_5 == 4) {
    if (0 < param_4 * 4) {
      puVar10 = param_2 + 2;
      do {
        lVar3 = lrintf(param_3[4] + (float)(int)*param_1 * *param_3);
        uVar5 = 0x80;
        uVar14 = 0x7f;
        uVar11 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar11 = uVar14, (int)lVar3 < 1)) {
          uVar11 = uVar5;
        }
        lVar3 = lrintf(param_3[9] + (float)(int)param_1[1] * param_3[6]);
        uVar12 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar12 = uVar14, (int)lVar3 < 1)) {
          uVar12 = uVar5;
        }
        puVar10[-2] = uVar11;
        puVar10[-1] = uVar12;
        lVar3 = lrintf(param_3[0xe] + (float)(int)param_1[2] * param_3[0xc]);
        uVar11 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar11 = uVar14, (int)lVar3 < 1)) {
          uVar11 = uVar5;
        }
        pcVar9 = param_1 + 3;
        param_1 = param_1 + 4;
        lVar3 = lrintf(param_3[0x13] + (float)(int)*pcVar9 * param_3[0x12]);
        uVar12 = (char)lVar3;
        if ((0xff < (int)lVar3 + 0x80U) && (uVar12 = uVar14, (int)lVar3 < 1)) {
          uVar12 = uVar5;
        }
        *puVar10 = uVar11;
        puVar8 = puVar10 + 4;
        puVar10[1] = uVar12;
        puVar10 = puVar8;
      } while (puVar8 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    lVar3 = (long)param_5;
    iVar19 = 0;
    lVar17 = NEON_shl(lVar3,2);
    do {
      if (0 < param_5) {
        lVar7 = 0;
        pfVar13 = (float *)((long)param_3 + lVar17);
        pfVar15 = param_3;
        do {
          fVar18 = *pfVar15;
          pfVar15 = (float *)((long)pfVar15 + lVar17 + 8);
          fVar16 = *pfVar13;
          pfVar13 = (float *)((long)pfVar13 + lVar17 + 4);
          lVar4 = lrintf(fVar16 + fVar18 * (float)(int)param_1[lVar7]);
          uVar11 = (undefined1)lVar4;
          if ((0xff < (int)lVar4 + 0x80U) && (uVar11 = 0x7f, (int)lVar4 < 1)) {
            uVar11 = 0x80;
          }
          param_2[lVar7] = uVar11;
          lVar7 = lVar7 + 1;
        } while (lVar7 != (ulong)(param_5 - 1) + 1);
      }
      iVar19 = iVar19 + 1;
      param_1 = param_1 + lVar3;
      param_2 = param_2 + lVar3;
    } while (iVar19 != param_4);
  }
  return;
}


==================================================================

### FUNC 002caa94 (900 bytes) name=FUN_002caa94

void FUN_002caa94(byte *param_1,char *param_2,float *param_3,int param_4,int param_5)

{
  char cVar1;
  char cVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  char cVar7;
  long lVar8;
  char *pcVar9;
  byte *pbVar10;
  char *pcVar11;
  float *pfVar12;
  float *pfVar13;
  int iVar14;
  long lVar15;
  
  if (param_5 == 2) {
    if (0 < param_4 * 2) {
      param_1 = param_1 + 1;
      pcVar11 = param_2 + 1;
      do {
        lVar5 = lrintf(param_3[2] + (float)param_1[-1] * *param_3);
        cVar7 = (char)lVar5;
        if (0xff < (uint)lVar5) {
          cVar7 = -(0 < (int)(uint)lVar5);
        }
        lVar5 = lrintf(param_3[5] + (float)*param_1 * param_3[4]);
        cVar1 = (char)lVar5;
        if (0xff < (uint)lVar5) {
          cVar1 = -(0 < (int)(uint)lVar5);
        }
        pcVar11[-1] = cVar7;
        param_1 = param_1 + 2;
        pcVar9 = pcVar11 + 2;
        *pcVar11 = cVar1;
        pcVar11 = pcVar9;
      } while (pcVar9 != param_2 + (ulong)(param_4 * 2 - 1U >> 1) * 2 + 3);
    }
  }
  else if (param_5 == 3) {
    pbVar10 = param_1;
    if (0 < param_4 * 3) {
      do {
        lVar5 = lrintf(param_3[3] + (float)*pbVar10 * *param_3);
        cVar7 = (char)lVar5;
        if (0xff < (uint)lVar5) {
          cVar7 = -(0 < (int)(uint)lVar5);
        }
        lVar5 = lrintf(param_3[7] + (float)pbVar10[1] * param_3[5]);
        cVar1 = (char)lVar5;
        if (0xff < (uint)lVar5) {
          cVar1 = -(0 < (int)(uint)lVar5);
        }
        lVar5 = lrintf(param_3[0xb] + (float)pbVar10[2] * param_3[10]);
        cVar2 = (char)lVar5;
        if (0xff < (uint)lVar5) {
          cVar2 = -(0 < (int)(uint)lVar5);
        }
        pbVar10 = pbVar10 + 3;
        *param_2 = cVar7;
        param_2[1] = cVar1;
        param_2[2] = cVar2;
        param_2 = param_2 + 3;
      } while ((int)pbVar10 - (int)param_1 < param_4 * 3);
    }
  }
  else if (param_5 == 4) {
    if (0 < param_4 * 4) {
      pcVar11 = param_2 + 2;
      do {
        lVar5 = lrintf(param_3[4] + (float)*param_1 * *param_3);
        uVar3 = (uint)lVar5;
        if (0xff < uVar3) {
          uVar3 = -(uint)(0 < (int)uVar3);
        }
        lVar5 = lrintf(param_3[9] + (float)param_1[1] * param_3[6]);
        uVar4 = (uint)lVar5;
        if (0xff < uVar4) {
          uVar4 = -(uint)(0 < (int)uVar4);
        }
        pcVar11[-2] = (char)uVar3;
        pcVar11[-1] = (char)uVar4;
        lVar5 = lrintf(param_3[0xe] + (float)param_1[2] * param_3[0xc]);
        uVar3 = (uint)lVar5;
        if (0xff < uVar3) {
          uVar3 = -(uint)(0 < (int)uVar3);
        }
        lVar5 = lrintf(param_3[0x13] + (float)param_1[3] * param_3[0x12]);
        uVar4 = (uint)lVar5;
        if (0xff < uVar4) {
          uVar4 = -(uint)(0 < (int)uVar4);
        }
        *pcVar11 = (char)uVar3;
        pcVar9 = pcVar11 + 4;
        param_1 = param_1 + 4;
        pcVar11[1] = (char)uVar4;
        pcVar11 = pcVar9;
      } while (pcVar9 != param_2 + (ulong)(param_4 * 4 - 1U >> 2) * 4 + 6);
    }
  }
  else if (0 < param_4) {
    lVar5 = (long)param_5;
    iVar14 = 0;
    lVar15 = NEON_shl(lVar5,2);
    do {
      if (0 < param_5) {
        lVar8 = 0;
        pfVar12 = (float *)((long)param_3 + lVar15);
        pfVar13 = param_3;
        do {
          lVar6 = lrintf(*pfVar12 + *pfVar13 * (float)param_1[lVar8]);
          cVar7 = (char)lVar6;
          if (0xff < (uint)lVar6) {
            cVar7 = -(0 < (int)(uint)lVar6);
          }
          param_2[lVar8] = cVar7;
          lVar8 = lVar8 + 1;
          pfVar13 = (float *)((long)pfVar13 + lVar15 + 8);
          pfVar12 = (float *)((long)pfVar12 + lVar15 + 4);
        } while (lVar8 != (ulong)(param_5 - 1) + 1);
      }
      iVar14 = iVar14 + 1;
      param_1 = param_1 + lVar5;
      param_2 = param_2 + lVar5;
    } while (iVar14 != param_4);
  }
  return;
}


==================================================================

### FUNC 002cae18 (1224 bytes) name=FUN_002cae18

void FUN_002cae18(undefined4 *param_1,ulong param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,int *param_8,uint param_9)

{
  float *pfVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  undefined4 uVar5;
  int iVar6;
  uint uVar7;
  float *pfVar8;
  undefined4 *puVar9;
  long lVar10;
  float *pfVar11;
  float *pfVar12;
  long lVar13;
  undefined4 *puVar14;
  double *pdVar15;
  float *pfVar16;
  ulong uVar17;
  ulong uVar18;
  undefined4 *puVar19;
  undefined4 *puVar20;
  double *pdVar21;
  float *pfVar22;
  double *pdVar23;
  double *pdVar24;
  ulong uVar25;
  int iVar26;
  uint uVar27;
  int iVar28;
  double dVar29;
  float fVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  uint uVar35;
  long lVar36;
  long lVar37;
  undefined4 auStack_420 [264];
  
  param_4 = param_4 >> 2;
  puVar9 = auStack_420;
  uVar2 = param_9 & 0x10;
  iVar28 = *param_7;
  param_2 = param_2 >> 2;
  iVar3 = *param_8;
  uVar35 = param_9 & 1;
  if ((param_9 & 1) == 0) {
    puVar20 = (undefined4 *)0x0;
    uVar25 = 1;
  }
  else {
    iVar28 = param_7[1];
    uVar17 = (ulong)iVar28;
    uVar25 = param_2;
    if (uVar17 < 0x109) {
      param_2 = 1;
      uVar35 = 0;
      puVar20 = puVar9;
    }
    else {
      uVar18 = uVar17 << 2;
      if (0x1fc0000000000000 < uVar17) {
        uVar18 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar18);
      param_2 = 1;
      uVar35 = (uint)(puVar9 != auStack_420);
      puVar20 = puVar9;
    }
  }
  uVar27 = param_9 & 2;
  if ((param_9 >> 1 & 1) == 0) {
    uVar4 = param_8[1];
    if (0 < (int)uVar4) {
      uVar7 = iVar3 - 4U >> 2;
      iVar26 = (uVar7 + 1) * 4;
      if (iVar3 + -3 < 1) {
        iVar26 = 0;
      }
      lVar37 = NEON_shl(param_2,2);
      lVar13 = (long)iVar26;
      lVar36 = NEON_shl(lVar13,3);
      do {
        puVar19 = param_1;
        if ((puVar20 != (undefined4 *)0x0) && (puVar19 = puVar20, 0 < iVar28)) {
          lVar10 = 0;
          puVar14 = param_1;
          do {
            uVar5 = *puVar14;
            puVar14 = puVar14 + uVar25;
            puVar20[lVar10] = uVar5;
            lVar10 = lVar10 + 1;
          } while ((int)lVar10 < iVar28);
        }
        if (0 < iVar3 + -3) {
          pdVar15 = param_5 + 2;
          pdVar24 = param_5 + 1;
          pdVar23 = param_5 + 3;
          pdVar21 = param_5;
          pfVar22 = param_3;
          do {
            if (uVar2 == 0) {
              dVar31 = 0.0;
              dVar32 = 0.0;
              dVar33 = dVar32;
              dVar34 = dVar32;
            }
            else {
              dVar32 = *pdVar15;
              dVar31 = *pdVar23;
              dVar33 = *pdVar24;
              dVar34 = *pdVar21;
            }
            if (0 < iVar28) {
              lVar10 = 0;
              pfVar11 = pfVar22;
              do {
                pfVar8 = (float *)(puVar19 + lVar10);
                lVar10 = lVar10 + 1;
                fVar30 = *pfVar11;
                pfVar16 = pfVar11 + 1;
                pfVar12 = pfVar11 + 2;
                pfVar1 = pfVar11 + 3;
                pfVar11 = pfVar11 + param_4;
                dVar29 = (double)*pfVar8;
                dVar34 = dVar34 + dVar29 * (double)fVar30;
                dVar33 = dVar33 + dVar29 * (double)*pfVar16;
                dVar32 = dVar32 + dVar29 * (double)*pfVar12;
                dVar31 = dVar31 + dVar29 * (double)*pfVar1;
              } while ((int)lVar10 < iVar28);
            }
            pdVar24 = pdVar24 + 4;
            pdVar23 = pdVar23 + 4;
            pfVar22 = pfVar22 + 4;
            pdVar21[1] = dVar33;
            *pdVar21 = dVar34;
            pdVar21 = pdVar21 + 4;
            pdVar15[1] = dVar31;
            *pdVar15 = dVar32;
            pdVar15 = pdVar15 + 4;
          } while (pdVar15 != param_5 + (ulong)uVar7 * 4 + 6);
        }
        if (iVar26 < iVar3) {
          pdVar15 = (double *)((long)param_5 + lVar36);
          pfVar22 = param_3 + lVar13;
          do {
            dVar31 = 0.0;
            if (uVar2 != 0) {
              dVar31 = *pdVar15;
            }
            if (0 < iVar28) {
              lVar10 = 0;
              pfVar11 = pfVar22;
              do {
                pfVar16 = (float *)(puVar19 + lVar10);
                lVar10 = lVar10 + 1;
                fVar30 = *pfVar11;
                pfVar11 = pfVar11 + param_4;
                dVar31 = dVar31 + (double)fVar30 * (double)*pfVar16;
              } while ((int)lVar10 < iVar28);
            }
            pdVar24 = pdVar15 + 1;
            *pdVar15 = dVar31;
            pfVar22 = pfVar22 + 1;
            pdVar15 = pdVar24;
          } while (pdVar24 != param_5 + lVar13 + 1 + (ulong)(uint)((iVar3 + -1) - iVar26));
        }
        uVar27 = uVar27 + 1;
        param_5 = param_5 + (param_6 >> 3);
        param_1 = (undefined4 *)((long)param_1 + lVar37);
      } while (uVar27 != uVar4);
    }
  }
  else {
    iVar3 = param_8[1];
    if (0 < iVar3) {
      iVar6 = *param_8;
      uVar27 = iVar28 - 2U >> 1;
      iVar26 = 0;
      do {
        puVar19 = param_1;
        if ((puVar20 != (undefined4 *)0x0) && (puVar19 = puVar20, 0 < iVar28)) {
          lVar13 = 0;
          puVar14 = param_1;
          do {
            uVar5 = *puVar14;
            puVar14 = puVar14 + uVar25;
            puVar20[lVar13] = uVar5;
            lVar13 = lVar13 + 1;
          } while ((int)lVar13 < iVar28);
        }
        if (0 < iVar6) {
          pfVar22 = param_3;
          pdVar15 = param_5;
          do {
            dVar31 = 0.0;
            if (uVar2 != 0) {
              dVar31 = *pdVar15;
            }
            dVar33 = 0.0;
            if (iVar28 + -1 < 1) {
              uVar17 = 0;
            }
            else {
              pfVar11 = (float *)(puVar19 + 1);
              pfVar16 = pfVar22 + 1;
              do {
                pfVar12 = pfVar11 + 2;
                dVar31 = dVar31 + (double)pfVar16[-1] * (double)pfVar11[-1];
                dVar33 = dVar33 + (double)*pfVar16 * (double)*pfVar11;
                pfVar11 = pfVar12;
                pfVar16 = pfVar16 + 2;
              } while (pfVar12 != (float *)(puVar19 + (ulong)uVar27 * 2 + 3));
              uVar17 = (ulong)((uVar27 + 1) * 2);
            }
            if ((int)uVar17 < iVar28) {
              uVar18 = -(uVar17 >> 0x1f) & 0xfffffffc00000000 | uVar17 << 2;
              lVar13 = 0;
              do {
                lVar36 = lVar13 + uVar18;
                lVar37 = lVar13 + uVar18;
                lVar13 = lVar13 + 4;
                dVar31 = dVar31 + (double)*(float *)((long)pfVar22 + lVar37) *
                                  (double)*(float *)((long)puVar19 + lVar36);
              } while (lVar13 != ((ulong)(uint)((iVar28 + -1) - (int)uVar17) + 1) * 4);
            }
            pfVar22 = pfVar22 + param_4;
            pdVar24 = pdVar15 + 1;
            *pdVar15 = dVar31 + dVar33;
            pdVar15 = pdVar24;
          } while (param_5 + (ulong)(iVar6 - 1) + 1 != pdVar24);
        }
        iVar26 = iVar26 + 1;
        param_1 = param_1 + param_2;
        param_5 = param_5 + (param_6 >> 3);
      } while (iVar26 != iVar3);
    }
  }
  if (uVar35 != 0) {
    operator_delete__(puVar9);
  }
  return;
}


==================================================================

### FUNC 002cb304 (64 bytes) name=FUN_002cb304

void FUN_002cb304(void)

{
  FUN_002cae18();
  return;
}


==================================================================

### FUNC 002cb344 (1556 bytes) name=FUN_002cb344

void FUN_002cb344(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  float *pfVar2;
  float *pfVar3;
  float *pfVar4;
  float *pfVar5;
  float *pfVar6;
  float *pfVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  long lVar11;
  bool bVar12;
  undefined1 *puVar13;
  long lVar14;
  float *pfVar15;
  long lVar16;
  float *pfVar17;
  float *pfVar18;
  float *pfVar19;
  float *pfVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  float *pfVar23;
  uint uVar24;
  long lVar25;
  uint uVar26;
  float *pfVar27;
  long lVar28;
  float *pfVar29;
  float *pfVar30;
  undefined8 *puVar31;
  undefined8 *puVar32;
  ulong uVar33;
  int iVar34;
  ulong uVar35;
  ulong uVar36;
  float fVar37;
  double dVar38;
  float fVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  undefined1 auStack_408 [1032];
  
  pfVar29 = *(float **)(param_2 + 0x10);
  uVar33 = *(ulong *)(param_2 + 0x50) >> 2;
  puVar31 = *(undefined8 **)(param_3 + 0x10);
  uVar36 = *(ulong *)(param_3 + 0x50) >> 2;
  pfVar30 = *(float **)(param_4 + 0x10);
  if (*(int *)(param_4 + 8) < 2) {
    uVar35 = 0;
  }
  else {
    uVar35 = *(ulong *)(param_4 + 0x50) >> 2;
  }
  uVar9 = (*(int **)(param_2 + 0x40))[1];
  iVar10 = **(int **)(param_2 + 0x40);
  bVar1 = (int)uVar9 <= *(int *)(param_4 + 0xc);
  iVar34 = iVar10 * 4;
  if ((pfVar30 != (float *)0x0) && (iVar34 = iVar10 * 0x14, bVar1)) {
    iVar34 = iVar10 * 4;
  }
  if ((ulong)(long)iVar34 < 0x409) {
    puVar13 = auStack_408;
    bVar12 = false;
  }
  else {
    puVar13 = operator_new__((long)iVar34);
    bVar12 = puVar13 != auStack_408;
  }
  if (pfVar30 == (float *)0x0) {
LAB_002cb48c:
    if (0 < (int)uVar9) {
      lVar28 = uVar36 * 4;
      lVar25 = 0;
      uVar26 = uVar9 - 4;
      uVar24 = 0;
      pfVar30 = pfVar29;
      puVar32 = puVar31;
      do {
        lVar14 = 0;
        pfVar23 = pfVar30;
        if (0 < iVar10) {
          do {
            fVar39 = *pfVar23;
            pfVar23 = pfVar23 + uVar33;
            *(float *)(puVar13 + lVar14 * 4) = fVar39;
            lVar14 = lVar14 + 1;
          } while ((int)lVar14 < iVar10);
        }
        uVar8 = uVar24;
        if ((int)uVar24 < (int)(uVar9 - 3)) {
          puVar21 = puVar31;
          pfVar23 = pfVar30;
          do {
            dVar40 = 0.0;
            dVar41 = dVar40;
            dVar42 = dVar40;
            dVar43 = dVar40;
            if (0 < iVar10) {
              dVar41 = 0.0;
              lVar14 = 0;
              dVar42 = 0.0;
              dVar43 = 0.0;
              pfVar15 = pfVar23;
              do {
                lVar16 = lVar14 * 4;
                lVar14 = lVar14 + 1;
                fVar39 = *pfVar15;
                pfVar27 = pfVar15 + 1;
                pfVar18 = pfVar15 + 2;
                pfVar20 = pfVar15 + 3;
                pfVar15 = pfVar15 + uVar33;
                dVar38 = (double)*(float *)(puVar13 + lVar16);
                dVar43 = dVar43 + dVar38 * (double)fVar39;
                dVar42 = dVar42 + dVar38 * (double)*pfVar27;
                dVar41 = dVar41 + dVar38 * (double)*pfVar18;
                dVar40 = dVar40 + dVar38 * (double)*pfVar20;
              } while ((int)lVar14 < iVar10);
            }
            pfVar23 = pfVar23 + 4;
            puVar22 = puVar21 + 2;
            puVar21[1] = CONCAT44((float)(dVar40 * param_1),(float)(dVar41 * param_1));
            *puVar21 = CONCAT44((float)(dVar42 * param_1),(float)(dVar43 * param_1));
            puVar21 = puVar22;
          } while (puVar22 !=
                   (undefined8 *)((long)puVar32 + (lVar25 + 4 + (ulong)(uVar26 >> 2) * 4) * 4));
          uVar8 = (int)lVar25 + 4 + (uVar26 >> 2) * 4;
        }
        if ((int)uVar8 < (int)uVar9) {
          uVar36 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
          lVar14 = 0;
          do {
            dVar41 = 0.0;
            pfVar23 = (float *)((long)pfVar29 + lVar14 + uVar36);
            if (0 < iVar10) {
              lVar16 = 0;
              do {
                lVar11 = lVar16 * 4;
                lVar16 = lVar16 + 1;
                fVar39 = *pfVar23;
                pfVar23 = pfVar23 + uVar33;
                dVar41 = dVar41 + (double)fVar39 * (double)*(float *)(puVar13 + lVar11);
              } while ((int)lVar16 < iVar10);
            }
            *(float *)((long)puVar32 + lVar14 + uVar36) = (float)(dVar41 * param_1);
            lVar14 = lVar14 + 4;
          } while (lVar14 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 4);
        }
        uVar24 = uVar24 + 1;
        puVar32 = (undefined8 *)((long)puVar32 + lVar28);
        lVar25 = lVar25 + 1;
        uVar26 = uVar26 - 1;
        pfVar30 = pfVar30 + 1;
        puVar31 = (undefined8 *)((long)puVar31 + lVar28 + 4);
      } while (uVar24 != uVar9);
    }
  }
  else {
    if (bVar1) {
      pfVar23 = (float *)0x0;
    }
    else {
      pfVar23 = (float *)(puVar13 + (long)iVar10 * 4);
      if (0 < iVar10) {
        pfVar15 = pfVar23 + 3;
        do {
          fVar39 = *pfVar30;
          pfVar27 = pfVar15 + 4;
          pfVar30 = pfVar30 + uVar35;
          *pfVar15 = fVar39;
          pfVar15[-1] = fVar39;
          pfVar15[-2] = fVar39;
          pfVar15[-3] = fVar39;
          pfVar15 = pfVar27;
        } while (pfVar27 != pfVar23 + (ulong)(iVar10 - 1) * 4 + 7);
      }
      if (uVar35 != 0) {
        uVar35 = 4;
      }
      pfVar30 = pfVar23;
      if (pfVar23 == (float *)0x0) goto LAB_002cb48c;
    }
    if (0 < (int)uVar9) {
      lVar28 = uVar36 * 4;
      lVar25 = 0;
      uVar26 = uVar9 - 4;
      uVar24 = 0;
      pfVar15 = pfVar29;
      pfVar27 = pfVar30;
      puVar32 = puVar31;
      if (pfVar23 == (float *)0x0) goto LAB_002cb8e0;
      do {
        if (0 < iVar10) {
          lVar14 = 0;
          pfVar18 = pfVar15;
          pfVar20 = pfVar23;
          do {
            fVar39 = *pfVar18;
            pfVar18 = pfVar18 + uVar33;
            fVar37 = *pfVar20;
            pfVar20 = pfVar20 + uVar35;
            *(float *)(puVar13 + lVar14 * 4) = fVar39 - fVar37;
            lVar14 = lVar14 + 1;
          } while ((int)lVar14 < iVar10);
        }
        while( true ) {
          uVar8 = uVar24;
          if ((int)uVar24 < (int)(uVar9 - 3)) {
            pfVar20 = pfVar15;
            puVar21 = puVar31;
            pfVar18 = pfVar27;
            do {
              pfVar19 = pfVar23;
              if (pfVar23 == (float *)0x0) {
                pfVar19 = pfVar18;
              }
              dVar40 = 0.0;
              dVar41 = dVar40;
              dVar42 = dVar40;
              dVar43 = dVar40;
              if (0 < iVar10) {
                dVar41 = 0.0;
                lVar14 = 0;
                dVar42 = 0.0;
                dVar43 = 0.0;
                pfVar17 = pfVar20;
                do {
                  pfVar2 = pfVar17 + 2;
                  pfVar3 = pfVar17 + 3;
                  fVar39 = *pfVar17;
                  fVar37 = *pfVar19;
                  pfVar4 = pfVar17 + 1;
                  pfVar17 = pfVar17 + uVar33;
                  pfVar5 = pfVar19 + 1;
                  pfVar6 = pfVar19 + 2;
                  pfVar7 = pfVar19 + 3;
                  pfVar19 = pfVar19 + uVar35;
                  lVar16 = lVar14 * 4;
                  lVar14 = lVar14 + 1;
                  dVar38 = (double)*(float *)(puVar13 + lVar16);
                  dVar41 = dVar41 + dVar38 * (double)(*pfVar2 - *pfVar6);
                  dVar43 = dVar43 + dVar38 * (double)(fVar39 - fVar37);
                  dVar42 = dVar42 + dVar38 * (double)(*pfVar4 - *pfVar5);
                  dVar40 = dVar40 + dVar38 * (double)(*pfVar3 - *pfVar7);
                } while ((int)lVar14 < iVar10);
              }
              pfVar18 = pfVar18 + 4;
              pfVar20 = pfVar20 + 4;
              puVar22 = puVar21 + 2;
              puVar21[1] = CONCAT44((float)(dVar40 * param_1),(float)(dVar41 * param_1));
              *puVar21 = CONCAT44((float)(dVar42 * param_1),(float)(dVar43 * param_1));
              puVar21 = puVar22;
            } while (puVar22 !=
                     (undefined8 *)((long)puVar32 + (lVar25 + 4 + (ulong)(uVar26 >> 2) * 4) * 4));
            uVar8 = (int)lVar25 + 4 + (uVar26 >> 2) * 4;
          }
          if ((int)uVar8 < (int)uVar9) {
            lVar14 = 0;
            uVar36 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
            do {
              lVar16 = lVar14 + uVar36;
              pfVar18 = (float *)((long)pfVar29 + lVar16);
              pfVar20 = pfVar23;
              if (pfVar23 == (float *)0x0) {
                pfVar20 = (float *)((long)pfVar30 + lVar16);
              }
              dVar41 = 0.0;
              if (0 < iVar10) {
                lVar16 = 0;
                do {
                  fVar39 = *pfVar18;
                  pfVar18 = pfVar18 + uVar33;
                  fVar37 = *pfVar20;
                  pfVar20 = pfVar20 + uVar35;
                  lVar11 = lVar16 * 4;
                  lVar16 = lVar16 + 1;
                  dVar41 = dVar41 + (double)(fVar39 - fVar37) * (double)*(float *)(puVar13 + lVar11)
                  ;
                } while ((int)lVar16 < iVar10);
              }
              *(float *)((long)puVar32 + lVar14 + uVar36) = (float)(dVar41 * param_1);
              lVar14 = lVar14 + 4;
            } while (lVar14 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 4);
          }
          uVar24 = uVar24 + 1;
          puVar32 = (undefined8 *)((long)puVar32 + lVar28);
          lVar25 = lVar25 + 1;
          uVar26 = uVar26 - 1;
          pfVar15 = pfVar15 + 1;
          pfVar27 = pfVar27 + 1;
          puVar31 = (undefined8 *)((long)puVar31 + lVar28 + 4);
          if (uVar24 == uVar9) goto LAB_002cb654;
          if (pfVar23 != (float *)0x0) break;
LAB_002cb8e0:
          pfVar18 = pfVar23;
          pfVar20 = pfVar15;
          pfVar19 = pfVar27;
          if (0 < iVar10) {
            do {
              *(float *)(puVar13 + (long)pfVar18 * 4) = *pfVar20 - *pfVar19;
              pfVar18 = (float *)((long)pfVar18 + 1);
              pfVar20 = pfVar20 + uVar33;
              pfVar19 = pfVar19 + uVar35;
            } while ((int)pfVar18 < iVar10);
          }
        }
      } while( true );
    }
  }
LAB_002cb654:
  if (bVar12) {
    operator_delete__(puVar13);
  }
  return;
}


==================================================================

### FUNC 002cb978 (1504 bytes) name=FUN_002cb978

void FUN_002cb978(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  double *pdVar2;
  double *pdVar3;
  double *pdVar4;
  double *pdVar5;
  double *pdVar6;
  double *pdVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  long lVar11;
  bool bVar12;
  undefined1 *puVar13;
  double *pdVar14;
  long lVar15;
  double *pdVar16;
  long lVar17;
  double *pdVar18;
  double *pdVar19;
  double dVar20;
  double *pdVar21;
  double *pdVar22;
  double *pdVar23;
  double *pdVar24;
  double *pdVar25;
  uint uVar26;
  long lVar27;
  uint uVar28;
  double *pdVar29;
  double *pdVar30;
  double *pdVar31;
  ulong uVar32;
  ulong uVar33;
  int iVar34;
  ulong uVar35;
  ulong uVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  undefined1 auStack_408 [1032];
  
  pdVar29 = *(double **)(param_2 + 0x10);
  uVar33 = *(ulong *)(param_2 + 0x50) >> 3;
  pdVar31 = *(double **)(param_3 + 0x10);
  uVar32 = *(ulong *)(param_3 + 0x50) >> 3;
  pdVar30 = *(double **)(param_4 + 0x10);
  if (*(int *)(param_4 + 8) < 2) {
    uVar35 = 0;
  }
  else {
    uVar35 = *(ulong *)(param_4 + 0x50) >> 3;
  }
  uVar9 = (*(int **)(param_2 + 0x40))[1];
  iVar10 = **(int **)(param_2 + 0x40);
  bVar1 = (int)uVar9 <= *(int *)(param_4 + 0xc);
  iVar34 = iVar10 * 8;
  if ((pdVar30 != (double *)0x0) && (iVar34 = iVar10 * 0x28, bVar1)) {
    iVar34 = iVar10 * 8;
  }
  if ((ulong)(long)iVar34 < 0x409) {
    puVar13 = auStack_408;
    bVar12 = false;
  }
  else {
    puVar13 = operator_new__((long)iVar34);
    bVar12 = puVar13 != auStack_408;
  }
  if (pdVar30 == (double *)0x0) {
LAB_002cbac4:
    if (0 < (int)uVar9) {
      lVar27 = 0;
      uVar28 = uVar9 - 4;
      uVar26 = 0;
      pdVar30 = pdVar29;
      pdVar25 = pdVar31;
      do {
        lVar15 = 0;
        pdVar14 = pdVar30;
        if (0 < iVar10) {
          do {
            dVar20 = *pdVar14;
            pdVar14 = pdVar14 + uVar33;
            *(double *)(puVar13 + lVar15 * 8) = dVar20;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < iVar10);
        }
        uVar8 = uVar26;
        if ((int)uVar26 < (int)(uVar9 - 3)) {
          pdVar23 = pdVar31;
          pdVar14 = pdVar30;
          do {
            dVar38 = 0.0;
            dVar20 = dVar38;
            dVar39 = dVar38;
            dVar40 = dVar38;
            if (0 < iVar10) {
              dVar20 = 0.0;
              lVar15 = 0;
              dVar39 = 0.0;
              dVar40 = 0.0;
              pdVar16 = pdVar14;
              do {
                dVar37 = *(double *)(puVar13 + lVar15 * 8);
                lVar15 = lVar15 + 1;
                dVar41 = *pdVar16;
                pdVar19 = pdVar16 + 1;
                pdVar22 = pdVar16 + 2;
                pdVar24 = pdVar16 + 3;
                pdVar16 = pdVar16 + uVar33;
                dVar40 = dVar40 + dVar37 * dVar41;
                dVar39 = dVar39 + dVar37 * *pdVar19;
                dVar20 = dVar20 + dVar37 * *pdVar22;
                dVar38 = dVar38 + dVar37 * *pdVar24;
              } while ((int)lVar15 < iVar10);
            }
            pdVar16 = pdVar23 + 4;
            pdVar14 = pdVar14 + 4;
            pdVar23[1] = dVar39 * param_1;
            *pdVar23 = dVar40 * param_1;
            pdVar23[3] = dVar38 * param_1;
            pdVar23[2] = dVar20 * param_1;
            pdVar23 = pdVar16;
          } while (pdVar16 != pdVar25 + lVar27 + 4 + (ulong)(uVar28 >> 2) * 4);
          uVar8 = (int)lVar27 + 4 + (uVar28 >> 2) * 4;
        }
        if ((int)uVar8 < (int)uVar9) {
          uVar35 = -(ulong)(uVar8 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar8 << 3;
          lVar15 = 0;
          do {
            dVar20 = 0.0;
            pdVar14 = (double *)((long)pdVar29 + lVar15 + uVar35);
            if (0 < iVar10) {
              lVar17 = 0;
              do {
                lVar11 = lVar17 * 8;
                lVar17 = lVar17 + 1;
                dVar39 = *pdVar14;
                pdVar14 = pdVar14 + uVar33;
                dVar20 = dVar20 + dVar39 * *(double *)(puVar13 + lVar11);
              } while ((int)lVar17 < iVar10);
            }
            *(double *)((long)pdVar25 + lVar15 + uVar35) = dVar20 * param_1;
            lVar15 = lVar15 + 8;
          } while (lVar15 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 8);
        }
        uVar26 = uVar26 + 1;
        pdVar25 = pdVar25 + uVar32;
        lVar27 = lVar27 + 1;
        uVar28 = uVar28 - 1;
        pdVar30 = pdVar30 + 1;
        pdVar31 = pdVar31 + uVar32 + 1;
      } while (uVar26 != uVar9);
    }
  }
  else {
    if (bVar1) {
      pdVar25 = (double *)0x0;
    }
    else {
      pdVar25 = (double *)(puVar13 + (long)iVar10 * 8);
      if (0 < iVar10) {
        pdVar14 = pdVar25 + 3;
        do {
          dVar20 = *pdVar30;
          pdVar23 = pdVar14 + 4;
          pdVar30 = pdVar30 + uVar35;
          *pdVar14 = dVar20;
          pdVar14[-1] = dVar20;
          pdVar14[-2] = dVar20;
          pdVar14[-3] = dVar20;
          pdVar14 = pdVar23;
        } while (pdVar23 != pdVar25 + (ulong)(iVar10 - 1) * 4 + 7);
      }
      if (uVar35 != 0) {
        uVar35 = 4;
      }
      pdVar30 = pdVar25;
      if (pdVar25 == (double *)0x0) goto LAB_002cbac4;
    }
    if (0 < (int)uVar9) {
      lVar27 = 0;
      uVar28 = uVar9 - 4;
      uVar26 = 0;
      pdVar14 = pdVar29;
      pdVar23 = pdVar30;
      pdVar16 = pdVar31;
      if (pdVar25 == (double *)0x0) goto LAB_002cbee0;
      do {
        if (0 < iVar10) {
          lVar15 = 0;
          pdVar19 = pdVar14;
          pdVar22 = pdVar25;
          do {
            dVar20 = *pdVar19;
            pdVar19 = pdVar19 + uVar33;
            dVar39 = *pdVar22;
            pdVar22 = pdVar22 + uVar35;
            *(double *)(puVar13 + lVar15 * 8) = dVar20 - dVar39;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < iVar10);
        }
        while( true ) {
          uVar8 = uVar26;
          if ((int)uVar26 < (int)(uVar9 - 3)) {
            pdVar24 = pdVar31;
            pdVar22 = pdVar14;
            pdVar19 = pdVar23;
            do {
              pdVar21 = pdVar25;
              if (pdVar25 == (double *)0x0) {
                pdVar21 = pdVar19;
              }
              dVar38 = 0.0;
              dVar20 = dVar38;
              dVar39 = dVar38;
              dVar40 = dVar38;
              if (0 < iVar10) {
                dVar20 = 0.0;
                lVar15 = 0;
                dVar39 = 0.0;
                dVar40 = 0.0;
                pdVar18 = pdVar22;
                do {
                  pdVar2 = pdVar18 + 3;
                  dVar41 = *pdVar18;
                  dVar42 = *pdVar21;
                  pdVar3 = pdVar18 + 1;
                  pdVar4 = pdVar21 + 1;
                  pdVar5 = pdVar18 + 2;
                  pdVar18 = pdVar18 + uVar33;
                  pdVar6 = pdVar21 + 2;
                  pdVar7 = pdVar21 + 3;
                  pdVar21 = pdVar21 + uVar35;
                  dVar37 = *(double *)(puVar13 + lVar15 * 8);
                  lVar15 = lVar15 + 1;
                  dVar40 = dVar40 + dVar37 * (dVar41 - dVar42);
                  dVar39 = dVar39 + dVar37 * (*pdVar3 - *pdVar4);
                  dVar20 = dVar20 + dVar37 * (*pdVar5 - *pdVar6);
                  dVar38 = dVar38 + dVar37 * (*pdVar2 - *pdVar7);
                } while ((int)lVar15 < iVar10);
              }
              pdVar21 = pdVar24 + 4;
              pdVar19 = pdVar19 + 4;
              pdVar22 = pdVar22 + 4;
              pdVar24[1] = dVar39 * param_1;
              *pdVar24 = dVar40 * param_1;
              pdVar24[3] = dVar38 * param_1;
              pdVar24[2] = dVar20 * param_1;
              pdVar24 = pdVar21;
            } while (pdVar21 != pdVar16 + lVar27 + 4 + (ulong)(uVar28 >> 2) * 4);
            uVar8 = (int)lVar27 + 4 + (uVar28 >> 2) * 4;
          }
          if ((int)uVar8 < (int)uVar9) {
            lVar15 = 0;
            uVar36 = -(ulong)(uVar8 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar8 << 3;
            do {
              lVar17 = lVar15 + uVar36;
              pdVar19 = (double *)((long)pdVar29 + lVar17);
              pdVar22 = pdVar25;
              if (pdVar25 == (double *)0x0) {
                pdVar22 = (double *)((long)pdVar30 + lVar17);
              }
              dVar20 = 0.0;
              if (0 < iVar10) {
                lVar17 = 0;
                do {
                  dVar39 = *pdVar19;
                  pdVar19 = pdVar19 + uVar33;
                  dVar40 = *pdVar22;
                  pdVar22 = pdVar22 + uVar35;
                  lVar11 = lVar17 * 8;
                  lVar17 = lVar17 + 1;
                  dVar20 = dVar20 + (dVar39 - dVar40) * *(double *)(puVar13 + lVar11);
                } while ((int)lVar17 < iVar10);
              }
              *(double *)((long)pdVar16 + lVar15 + uVar36) = dVar20 * param_1;
              lVar15 = lVar15 + 8;
            } while (lVar15 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 8);
          }
          uVar26 = uVar26 + 1;
          pdVar16 = pdVar16 + uVar32;
          lVar27 = lVar27 + 1;
          uVar28 = uVar28 - 1;
          pdVar14 = pdVar14 + 1;
          pdVar23 = pdVar23 + 1;
          pdVar31 = pdVar31 + uVar32 + 1;
          if (uVar26 == uVar9) goto LAB_002cbc70;
          if (pdVar25 != (double *)0x0) break;
LAB_002cbee0:
          pdVar19 = pdVar25;
          pdVar22 = pdVar14;
          pdVar24 = pdVar23;
          if (0 < iVar10) {
            do {
              *(double *)(puVar13 + (long)pdVar19 * 8) = *pdVar22 - *pdVar24;
              pdVar19 = (double *)((long)pdVar19 + 1);
              pdVar22 = pdVar22 + uVar33;
              pdVar24 = pdVar24 + uVar35;
            } while ((int)pdVar19 < iVar10);
          }
        }
      } while( true );
    }
  }
LAB_002cbc70:
  if (bVar12) {
    operator_delete__(puVar13);
  }
  return;
}


==================================================================

### FUNC 002cbf78 (2128 bytes) name=FUN_002cbf78

void FUN_002cbf78(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  float *pfVar2;
  float *pfVar3;
  float *pfVar4;
  double *pdVar5;
  double *pdVar6;
  double *pdVar7;
  uint uVar8;
  uint uVar9;
  bool bVar10;
  double *pdVar11;
  uint uVar12;
  double *pdVar13;
  float *pfVar14;
  long lVar15;
  double *pdVar16;
  long lVar17;
  double *pdVar18;
  double dVar19;
  float *pfVar20;
  float *pfVar21;
  double *pdVar22;
  long lVar23;
  float *pfVar24;
  long lVar25;
  uint uVar26;
  uint uVar27;
  uint uVar28;
  double *pdVar29;
  double *pdVar30;
  double *pdVar31;
  float *pfVar32;
  ulong uVar33;
  int iVar34;
  uint uVar35;
  uint uVar36;
  ulong uVar37;
  ulong uVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  double dVar45;
  double dVar46;
  double adStack_408 [129];
  
  pfVar32 = *(float **)(param_2 + 0x10);
  uVar33 = *(ulong *)(param_2 + 0x50) >> 2;
  pdVar30 = *(double **)(param_3 + 0x10);
  uVar38 = *(ulong *)(param_3 + 0x50) >> 3;
  pdVar29 = *(double **)(param_4 + 0x10);
  if (*(int *)(param_4 + 8) < 2) {
    uVar37 = 0;
  }
  else {
    uVar37 = *(ulong *)(param_4 + 0x50) >> 3;
  }
  uVar8 = (*(uint **)(param_2 + 0x40))[1];
  uVar9 = **(uint **)(param_2 + 0x40);
  bVar1 = (int)uVar8 <= *(int *)(param_4 + 0xc);
  iVar34 = uVar9 * 8;
  if ((pdVar29 != (double *)0x0) && (iVar34 = uVar9 * 0x28, bVar1)) {
    iVar34 = uVar9 * 8;
  }
  if ((ulong)(long)iVar34 < 0x409) {
    pdVar11 = adStack_408;
    bVar10 = false;
  }
  else {
    pdVar11 = operator_new__((long)iVar34);
    bVar10 = pdVar11 != adStack_408;
  }
  if (pdVar29 == (double *)0x0) {
LAB_002cc0c4:
    if (0 < (int)uVar8) {
      uVar26 = (uint)((ulong)pdVar11 >> 3) & 1;
      if (uVar9 < uVar26) {
        uVar26 = uVar9;
      }
      uVar28 = uVar9;
      if (8 < uVar9) {
        uVar28 = uVar26;
      }
      lVar23 = 0;
      uVar26 = ((uVar9 - uVar28) - 4 >> 2) + 1;
      uVar36 = uVar8 - 4;
      pfVar21 = pfVar32 + uVar33;
      uVar27 = 0;
      iVar34 = uVar26 * 4;
      pfVar24 = pfVar32;
      pdVar29 = pdVar30;
      do {
        if (0 < (int)uVar9) {
          uVar12 = uVar28;
          if (uVar28 != 0) {
            *pdVar11 = (double)*pfVar24;
            if ((((uVar28 != 1) && (pdVar11[1] = (double)*pfVar21, uVar28 != 2)) &&
                (pdVar11[2] = (double)pfVar24[uVar33 * 2], uVar28 != 3)) &&
               (((pdVar11[3] = (double)pfVar21[uVar33 * 2], uVar28 != 4 &&
                 (pdVar11[4] = (double)pfVar24[uVar33 * 4], uVar28 != 5)) &&
                ((pdVar11[5] = (double)pfVar21[uVar33 * 4], uVar28 != 6 &&
                 (pdVar11[6] = (double)pfVar24[uVar33 * 6], uVar28 != 7)))))) {
              pdVar11[7] = (double)pfVar21[uVar33 * 6];
              uVar12 = 8;
            }
            if (uVar9 == uVar28) goto LAB_002cc33c;
          }
          if (2 < (uVar9 - 1) - uVar28) {
            uVar35 = 0;
            pfVar20 = pfVar32 + lVar23 + uVar28 * uVar33;
            pdVar22 = pdVar11 + uVar28;
            do {
              fVar39 = *pfVar20;
              uVar35 = uVar35 + 1;
              pfVar14 = pfVar20 + uVar33;
              fVar40 = pfVar20[uVar33 * 2];
              fVar41 = pfVar20[uVar33 * 3];
              pfVar20 = pfVar20 + uVar33 * 4;
              pdVar22[1] = (double)*pfVar14;
              *pdVar22 = (double)fVar39;
              pdVar22[3] = (double)fVar41;
              pdVar22[2] = (double)fVar40;
              pdVar22 = pdVar22 + 4;
            } while (uVar35 < uVar26);
            uVar12 = uVar12 + iVar34;
            if (iVar34 == uVar9 - uVar28) goto LAB_002cc33c;
          }
          lVar25 = (long)(int)uVar12 * uVar33;
          pdVar11[(int)uVar12] = (double)pfVar32[lVar25 + lVar23];
          if ((int)(uVar12 + 1) < (int)uVar9) {
            lVar25 = lVar25 + uVar33;
            pdVar11[(int)(uVar12 + 1)] = (double)pfVar32[lVar23 + lVar25];
            if ((int)(uVar12 + 2) < (int)uVar9) {
              pdVar11[(int)(uVar12 + 2)] = (double)pfVar32[uVar33 + lVar25 + lVar23];
            }
          }
        }
LAB_002cc33c:
        uVar12 = uVar27;
        if ((int)uVar27 < (int)(uVar8 - 3)) {
          pfVar20 = pfVar24;
          pdVar22 = pdVar29;
          do {
            dVar43 = 0.0;
            dVar19 = dVar43;
            dVar45 = dVar43;
            dVar46 = dVar43;
            if (0 < (int)uVar9) {
              dVar19 = 0.0;
              lVar25 = 0;
              dVar45 = 0.0;
              dVar46 = 0.0;
              pfVar14 = pfVar20;
              do {
                fVar39 = *pfVar14;
                pfVar2 = pfVar14 + 1;
                pfVar3 = pfVar14 + 2;
                pfVar4 = pfVar14 + 3;
                pfVar14 = pfVar14 + uVar33;
                dVar42 = pdVar11[lVar25];
                lVar25 = lVar25 + 1;
                dVar46 = dVar46 + dVar42 * (double)fVar39;
                dVar45 = dVar45 + dVar42 * (double)*pfVar2;
                dVar19 = dVar19 + dVar42 * (double)*pfVar3;
                dVar43 = dVar43 + dVar42 * (double)*pfVar4;
              } while ((int)lVar25 < (int)uVar9);
            }
            pdVar13 = pdVar22 + 4;
            pfVar20 = pfVar20 + 4;
            pdVar22[1] = dVar45 * param_1;
            *pdVar22 = dVar46 * param_1;
            pdVar22[3] = dVar43 * param_1;
            pdVar22[2] = dVar19 * param_1;
            pdVar22 = pdVar13;
          } while (pdVar13 != pdVar30 + lVar23 + 4 + (ulong)(uVar36 >> 2) * 4);
          uVar12 = (int)lVar23 + 4 + (uVar36 >> 2) * 4;
        }
        if ((int)uVar12 < (int)uVar8) {
          lVar25 = (long)(int)uVar12;
          pfVar20 = pfVar32 + lVar25;
          pdVar22 = pdVar30 + lVar25;
          do {
            dVar19 = 0.0;
            if (0 < (int)uVar9) {
              lVar15 = 0;
              pfVar14 = pfVar20;
              do {
                fVar39 = *pfVar14;
                pfVar14 = pfVar14 + uVar33;
                pdVar13 = pdVar11 + lVar15;
                lVar15 = lVar15 + 1;
                dVar19 = dVar19 + (double)fVar39 * *pdVar13;
              } while ((int)lVar15 < (int)uVar9);
            }
            pfVar20 = pfVar20 + 1;
            *pdVar22 = dVar19 * param_1;
            pdVar22 = pdVar22 + 1;
          } while (pfVar20 != pfVar32 + lVar25 + 1 + (ulong)((uVar8 - 1) - uVar12));
        }
        uVar27 = uVar27 + 1;
        pdVar30 = pdVar30 + uVar38;
        lVar23 = lVar23 + 1;
        uVar36 = uVar36 - 1;
        pfVar24 = pfVar24 + 1;
        pfVar21 = pfVar21 + 1;
        pdVar29 = pdVar29 + uVar38 + 1;
      } while (uVar27 != uVar8);
    }
  }
  else {
    if (bVar1) {
      pdVar22 = (double *)0x0;
    }
    else {
      pdVar22 = pdVar11 + (int)uVar9;
      if (0 < (int)uVar9) {
        pdVar13 = pdVar22 + 3;
        do {
          dVar19 = *pdVar29;
          pdVar31 = pdVar13 + 4;
          pdVar29 = pdVar29 + uVar37;
          *pdVar13 = dVar19;
          pdVar13[-1] = dVar19;
          pdVar13[-2] = dVar19;
          pdVar13[-3] = dVar19;
          pdVar13 = pdVar31;
        } while (pdVar31 != pdVar22 + (ulong)(uVar9 - 1) * 4 + 7);
      }
      if (uVar37 != 0) {
        uVar37 = 4;
      }
      pdVar29 = pdVar22;
      if (pdVar22 == (double *)0x0) goto LAB_002cc0c4;
    }
    if (0 < (int)uVar8) {
      lVar23 = 0;
      uVar28 = uVar8 - 4;
      uVar26 = 0;
      pfVar24 = pfVar32;
      pdVar13 = pdVar29;
      pdVar31 = pdVar30;
      if (pdVar22 == (double *)0x0) goto LAB_002cc73c;
      do {
        if (0 < (int)uVar9) {
          lVar25 = 0;
          pfVar21 = pfVar24;
          pdVar18 = pdVar22;
          do {
            fVar39 = *pfVar21;
            pfVar21 = pfVar21 + uVar33;
            dVar19 = *pdVar18;
            pdVar18 = pdVar18 + uVar37;
            pdVar11[lVar25] = (double)fVar39 - dVar19;
            lVar25 = lVar25 + 1;
          } while ((int)lVar25 < (int)uVar9);
        }
        while( true ) {
          uVar27 = uVar26;
          if ((int)uVar26 < (int)(uVar8 - 3)) {
            lVar25 = lVar23 << 3;
            pfVar21 = pfVar24;
            pdVar18 = pdVar30;
            do {
              pdVar16 = pdVar22;
              if (pdVar22 == (double *)0x0) {
                pdVar16 = (double *)((long)pdVar29 + lVar25);
              }
              dVar43 = 0.0;
              dVar19 = dVar43;
              dVar45 = dVar43;
              dVar46 = dVar43;
              if (0 < (int)uVar9) {
                dVar19 = 0.0;
                lVar15 = 0;
                dVar45 = 0.0;
                dVar46 = 0.0;
                pfVar20 = pfVar21;
                do {
                  fVar39 = *pfVar20;
                  pfVar14 = pfVar20 + 1;
                  pfVar2 = pfVar20 + 2;
                  pfVar3 = pfVar20 + 3;
                  pfVar20 = pfVar20 + uVar33;
                  pdVar5 = pdVar16 + 3;
                  dVar44 = *pdVar16;
                  pdVar6 = pdVar16 + 1;
                  pdVar7 = pdVar16 + 2;
                  pdVar16 = pdVar16 + uVar37;
                  dVar42 = pdVar11[lVar15];
                  lVar15 = lVar15 + 1;
                  dVar46 = dVar46 + dVar42 * ((double)fVar39 - dVar44);
                  dVar45 = dVar45 + dVar42 * ((double)*pfVar14 - *pdVar6);
                  dVar19 = dVar19 + dVar42 * ((double)*pfVar2 - *pdVar7);
                  dVar43 = dVar43 + dVar42 * ((double)*pfVar3 - *pdVar5);
                } while ((int)lVar15 < (int)uVar9);
              }
              lVar25 = lVar25 + 0x20;
              pfVar21 = pfVar21 + 4;
              pdVar18[1] = dVar45 * param_1;
              *pdVar18 = dVar46 * param_1;
              pdVar18[3] = dVar43 * param_1;
              pdVar18[2] = dVar19 * param_1;
              pdVar18 = pdVar18 + 4;
            } while (lVar25 != (lVar23 + 4 + (ulong)(uVar28 >> 2) * 4) * 8);
            uVar27 = (int)lVar23 + 4 + (uVar28 >> 2) * 4;
          }
          if ((int)uVar27 < (int)uVar8) {
            lVar15 = (long)(int)uVar27;
            lVar25 = lVar15 << 3;
            pfVar21 = pfVar32 + lVar15;
            do {
              pdVar18 = pdVar22;
              if (pdVar22 == (double *)0x0) {
                pdVar18 = (double *)((long)pdVar29 + lVar25);
              }
              dVar19 = 0.0;
              if (0 < (int)uVar9) {
                lVar17 = 0;
                pfVar20 = pfVar21;
                do {
                  fVar39 = *pfVar20;
                  pfVar20 = pfVar20 + uVar33;
                  dVar45 = *pdVar18;
                  pdVar18 = pdVar18 + uVar37;
                  pdVar16 = pdVar11 + lVar17;
                  lVar17 = lVar17 + 1;
                  dVar19 = dVar19 + ((double)fVar39 - dVar45) * *pdVar16;
                } while ((int)lVar17 < (int)uVar9);
              }
              pfVar21 = pfVar21 + 1;
              *(double *)((long)pdVar31 + lVar25) = dVar19 * param_1;
              lVar25 = lVar25 + 8;
            } while (lVar25 != (lVar15 + 1 + (ulong)((uVar8 - 1) - uVar27)) * 8);
          }
          uVar26 = uVar26 + 1;
          pdVar31 = pdVar31 + uVar38;
          lVar23 = lVar23 + 1;
          uVar28 = uVar28 - 1;
          pfVar24 = pfVar24 + 1;
          pdVar13 = pdVar13 + 1;
          pdVar30 = pdVar30 + uVar38 + 1;
          if (uVar26 == uVar8) goto LAB_002cc4ac;
          if (pdVar22 != (double *)0x0) break;
LAB_002cc73c:
          pdVar18 = pdVar22;
          pfVar21 = pfVar24;
          pdVar16 = pdVar13;
          if (0 < (int)uVar9) {
            do {
              pdVar11[(long)pdVar18] = (double)*pfVar21 - *pdVar16;
              pdVar18 = (double *)((long)pdVar18 + 1);
              pfVar21 = pfVar21 + uVar33;
              pdVar16 = pdVar16 + uVar37;
            } while ((int)pdVar18 < (int)uVar9);
          }
        }
      } while( true );
    }
  }
LAB_002cc4ac:
  if (bVar10) {
    operator_delete__(pdVar11);
  }
  return;
}


==================================================================

### FUNC 002cc7e8 (1976 bytes) name=FUN_002cc7e8

void FUN_002cc7e8(double param_1,long param_2,long param_3,long param_4)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  bool bVar15;
  float *pfVar16;
  float *pfVar17;
  long lVar18;
  float *pfVar19;
  ulong uVar20;
  ulong uVar21;
  float *pfVar22;
  long lVar23;
  float *pfVar24;
  float *pfVar25;
  float *pfVar26;
  float *pfVar27;
  ulong uVar28;
  float *pfVar29;
  uint uVar30;
  float *pfVar31;
  float *pfVar32;
  int iVar33;
  int iVar34;
  float *pfVar35;
  float *pfVar36;
  ulong uVar37;
  ulong uVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  ulong uVar41;
  double dVar42;
  float fVar43;
  int iVar44;
  float local_428;
  float local_424;
  float local_420;
  float local_41c;
  float *local_418;
  ulong local_410;
  float afStack_408 [258];
  
  pfVar36 = *(float **)(param_3 + 0x10);
  pfVar19 = *(float **)(param_4 + 0x10);
  pfVar35 = *(float **)(param_2 + 0x10);
  uVar37 = *(ulong *)(param_3 + 0x50) >> 2;
  uVar41 = *(ulong *)(param_2 + 0x50) >> 2;
  if (*(int *)(param_4 + 8) < 2) {
    uVar38 = 0;
    uVar7 = *(uint *)(param_4 + 0xc);
    uVar8 = (*(int **)(param_2 + 0x40))[1];
    iVar9 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar7 = *(uint *)(param_4 + 0xc);
    uVar8 = (*(int **)(param_2 + 0x40))[1];
    uVar38 = *(ulong *)(param_4 + 0x50) >> 2;
    iVar9 = **(int **)(param_2 + 0x40);
  }
  if (pfVar19 == (float *)0x0) {
    if (0 < iVar9) {
      uVar6 = uVar8 - 4 >> 2;
      uVar7 = (uVar6 + 1) * 4;
      if ((int)(uVar8 - 3) < 1) {
        uVar7 = 0;
      }
      iVar34 = 0;
      uVar38 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar7 << 2;
      do {
        pfVar19 = pfVar35 + 1;
        pfVar16 = pfVar36;
        iVar11 = iVar34;
        do {
          dVar42 = 0.0;
          if (0 < (int)(uVar8 - 3)) {
            pfVar17 = pfVar19;
            pfVar25 = pfVar35;
            do {
              pfVar24 = pfVar17 + 4;
              dVar42 = dVar42 + (double)pfVar25[1] * (double)*pfVar17 +
                                (double)pfVar17[-1] * (double)*pfVar25 +
                                (double)pfVar17[1] * (double)pfVar25[2] +
                                (double)pfVar17[2] * (double)pfVar25[3];
              pfVar17 = pfVar24;
              pfVar25 = pfVar25 + 4;
            } while (pfVar24 != pfVar19 + (ulong)uVar6 * 4 + 4);
          }
          if ((int)uVar7 < (int)uVar8) {
            lVar18 = 0;
            do {
              lVar23 = lVar18 + uVar38;
              lVar13 = lVar18 + (uVar38 - 4);
              lVar18 = lVar18 + 4;
              dVar42 = dVar42 + (double)*(float *)((long)pfVar19 + lVar13) *
                                (double)*(float *)((long)pfVar35 + lVar23);
            } while (lVar18 != ((ulong)((uVar8 - 1) - uVar7) + 1) * 4);
          }
          iVar11 = iVar11 + 1;
          pfVar19 = pfVar19 + uVar41;
          *pfVar16 = (float)(dVar42 * param_1);
          pfVar16 = pfVar16 + 1;
        } while (iVar11 < iVar9);
        iVar34 = iVar34 + 1;
        pfVar36 = pfVar36 + uVar37 + 1;
        pfVar35 = pfVar35 + uVar41;
      } while (iVar34 != iVar9);
    }
  }
  else {
    uVar20 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
    pfVar16 = afStack_408;
    lVar18 = 0x10;
    if (uVar7 != uVar8) {
      lVar18 = 0;
    }
    local_418 = pfVar16;
    local_410 = 0x408;
    if (uVar20 < 0x409) {
      local_410 = uVar20;
      bVar15 = false;
    }
    else {
      local_418 = operator_new__(uVar20);
      bVar15 = local_418 != pfVar16;
      local_410 = uVar20;
      pfVar16 = local_418;
    }
    if (0 < iVar9) {
      uVar6 = -((uint)((ulong)pfVar16 >> 2) & 3) & 3;
      if (uVar8 < uVar6) {
        uVar6 = uVar8;
      }
      uVar10 = uVar8 - 4 >> 2;
      iVar11 = uVar8 - uVar6;
      uVar12 = (uVar8 - 1) - uVar6;
      uVar4 = (iVar11 - 4U >> 2) + 1;
      pfVar17 = pfVar35 + 4;
      pfVar25 = pfVar16 + 4;
      iVar34 = 0;
      iVar44 = uVar4 * 4;
      do {
        if ((int)uVar7 < (int)uVar8) {
          if (0 < (int)uVar8) {
            if ((uVar8 < 9 || pfVar35 < pfVar25 && pfVar16 < pfVar17) ||
               (pfVar16 < pfVar19 + 1 && pfVar19 < pfVar16 + uVar8)) {
              lVar23 = 0;
              do {
                pfVar16[lVar23] = pfVar35[lVar23] - *pfVar19;
                lVar23 = lVar23 + 1;
              } while ((int)lVar23 < (int)uVar8);
            }
            else {
              if ((uVar6 == 0) || (*pfVar16 = *pfVar35 - *pfVar19, uVar6 == 1)) {
                uVar28 = (ulong)uVar6;
              }
              else {
                pfVar16[1] = pfVar35[1] - *pfVar19;
                if (uVar6 == 3) {
                  uVar28 = 3;
                  pfVar16[2] = pfVar35[2] - *pfVar19;
                }
                else {
                  uVar28 = 2;
                }
              }
              if (2 < uVar12) {
                fVar43 = *pfVar19;
                uVar30 = 0;
                pfVar24 = pfVar35 + uVar6;
                pfVar26 = pfVar16 + uVar6;
                do {
                  uVar39 = *(undefined8 *)pfVar24;
                  uVar30 = uVar30 + 1;
                  *(ulong *)(pfVar26 + 2) =
                       CONCAT44((float)((ulong)*(undefined8 *)(pfVar24 + 2) >> 0x20) - fVar43,
                                (float)*(undefined8 *)(pfVar24 + 2) - fVar43);
                  *(ulong *)pfVar26 =
                       CONCAT44((float)((ulong)uVar39 >> 0x20) - fVar43,(float)uVar39 - fVar43);
                  pfVar24 = pfVar24 + 4;
                  pfVar26 = pfVar26 + 4;
                } while (uVar30 < uVar4);
                uVar28 = (ulong)(uint)((int)uVar28 + iVar44);
                if (iVar44 == iVar11) goto LAB_002ccad0;
              }
              uVar21 = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
              *(float *)((long)pfVar16 + uVar21) = *(float *)((long)pfVar35 + uVar21) - *pfVar19;
              if (((int)uVar28 + 1 < (int)uVar8) &&
                 (*(float *)((long)pfVar16 + uVar21 + 4) =
                       *(float *)((long)pfVar35 + uVar21 + 4) - *pfVar19,
                 (int)uVar28 + 2 < (int)uVar8)) {
                *(float *)((long)pfVar16 + uVar21 + 8) =
                     *(float *)((long)pfVar35 + uVar21 + 8) - *pfVar19;
              }
            }
          }
        }
        else if (0 < (int)uVar8) {
          if ((uVar8 < 9 || pfVar35 < pfVar25 && pfVar16 < pfVar17) ||
             (pfVar16 < pfVar19 + 4 && pfVar19 < pfVar25)) {
            lVar23 = 0;
            do {
              pfVar16[lVar23] = pfVar35[lVar23] - pfVar19[lVar23];
              lVar23 = lVar23 + 1;
            } while ((int)lVar23 < (int)uVar8);
          }
          else {
            if ((uVar6 == 0) || (*pfVar16 = *pfVar35 - *pfVar19, uVar6 == 1)) {
              uVar28 = (ulong)uVar6;
            }
            else {
              pfVar16[1] = pfVar35[1] - pfVar19[1];
              if (uVar6 == 3) {
                uVar28 = 3;
                pfVar16[2] = pfVar35[2] - pfVar19[2];
              }
              else {
                uVar28 = 2;
              }
            }
            if (2 < uVar12) {
              uVar30 = 0;
              pfVar24 = pfVar35 + uVar6;
              pfVar26 = pfVar19 + uVar6;
              pfVar32 = pfVar16 + uVar6;
              do {
                uVar39 = *(undefined8 *)pfVar24;
                uVar30 = uVar30 + 1;
                uVar40 = *(undefined8 *)pfVar26;
                *(ulong *)(pfVar32 + 2) =
                     CONCAT44((float)((ulong)*(undefined8 *)(pfVar24 + 2) >> 0x20) -
                              (float)((ulong)*(undefined8 *)(pfVar26 + 2) >> 0x20),
                              (float)*(undefined8 *)(pfVar24 + 2) -
                              (float)*(undefined8 *)(pfVar26 + 2));
                *(ulong *)pfVar32 =
                     CONCAT44((float)((ulong)uVar39 >> 0x20) - (float)((ulong)uVar40 >> 0x20),
                              (float)uVar39 - (float)uVar40);
                pfVar24 = pfVar24 + 4;
                pfVar26 = pfVar26 + 4;
                pfVar32 = pfVar32 + 4;
              } while (uVar30 < uVar4);
              uVar28 = (ulong)(uint)((int)uVar28 + iVar44);
              if (iVar44 == iVar11) goto LAB_002ccad0;
            }
            uVar21 = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
            *(float *)((long)pfVar16 + uVar21) =
                 *(float *)((long)pfVar35 + uVar21) - *(float *)((long)pfVar19 + uVar21);
            if ((int)uVar28 + 1 < (int)uVar8) {
              lVar23 = uVar21 + 4;
              *(float *)((long)pfVar16 + lVar23) =
                   *(float *)((long)pfVar35 + lVar23) - *(float *)((long)pfVar19 + lVar23);
              if ((int)uVar28 + 2 < (int)uVar8) {
                lVar23 = uVar21 + 8;
                *(float *)((long)pfVar16 + lVar23) =
                     *(float *)((long)pfVar35 + lVar23) - *(float *)((long)pfVar19 + lVar23);
              }
            }
          }
        }
LAB_002ccad0:
        pfVar24 = pfVar35 + 1;
        pfVar26 = pfVar19;
        pfVar32 = pfVar36;
        iVar33 = iVar34;
        do {
          pfVar31 = pfVar26;
          if ((int)uVar7 < (int)uVar8) {
            local_41c = *pfVar26;
            local_420 = local_41c;
            local_424 = local_41c;
            local_428 = local_41c;
            pfVar31 = &local_428;
          }
          dVar42 = 0.0;
          if ((int)uVar8 < 4) {
            uVar28 = 0;
          }
          else {
            pfVar22 = pfVar24;
            pfVar27 = pfVar31;
            pfVar29 = pfVar16;
            do {
              pfVar1 = pfVar27 + 1;
              pfVar5 = pfVar22 + 4;
              fVar43 = *pfVar27;
              pfVar2 = pfVar27 + 2;
              pfVar3 = pfVar27 + 3;
              pfVar27 = (float *)((long)pfVar27 + lVar18);
              dVar42 = dVar42 + (double)pfVar29[1] * (double)(*pfVar22 - *pfVar1) +
                                (double)(pfVar22[-1] - fVar43) * (double)*pfVar29 +
                                (double)(pfVar22[1] - *pfVar2) * (double)pfVar29[2] +
                                (double)(pfVar22[2] - *pfVar3) * (double)pfVar29[3];
              pfVar22 = pfVar5;
              pfVar29 = pfVar29 + 4;
            } while (pfVar5 != pfVar24 + (ulong)uVar10 * 4 + 4);
            pfVar31 = (float *)((long)pfVar31 + lVar18 + (ulong)uVar10 * lVar18);
            uVar28 = (ulong)((uVar10 + 1) * 4);
          }
          if ((int)uVar28 < (int)uVar8) {
            uVar21 = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
            lVar23 = 0;
            do {
              lVar14 = lVar23 + (uVar21 - 4);
              pfVar27 = (float *)((long)pfVar31 + lVar23);
              lVar13 = lVar23 + uVar21;
              lVar23 = lVar23 + 4;
              dVar42 = dVar42 + (double)(*(float *)((long)pfVar24 + lVar14) - *pfVar27) *
                                (double)*(float *)((long)pfVar16 + lVar13);
            } while (lVar23 != ((ulong)((uVar8 - 1) - (int)uVar28) + 1) * 4);
          }
          iVar33 = iVar33 + 1;
          pfVar26 = pfVar26 + uVar38;
          pfVar24 = pfVar24 + uVar41;
          *pfVar32 = (float)(dVar42 * param_1);
          pfVar32 = pfVar32 + 1;
        } while (iVar33 < iVar9);
        iVar34 = iVar34 + 1;
        pfVar19 = pfVar19 + uVar38;
        pfVar35 = pfVar35 + uVar41;
        pfVar17 = pfVar17 + uVar41;
        pfVar36 = pfVar36 + uVar37 + 1;
      } while (iVar34 != iVar9);
    }
    if (bVar15) {
      local_418 = pfVar16;
      local_410 = uVar20;
      operator_delete__(pfVar16);
    }
  }
  return;
}


==================================================================

### FUNC 002ccfa0 (1668 bytes) name=FUN_002ccfa0

void FUN_002ccfa0(double param_1,long param_2,long param_3,long param_4)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  long lVar12;
  long lVar13;
  bool bVar14;
  double *pdVar15;
  double *pdVar16;
  long lVar17;
  double *pdVar18;
  ulong uVar19;
  ulong uVar20;
  double *pdVar21;
  long lVar22;
  double *pdVar23;
  double *pdVar24;
  uint uVar25;
  double *pdVar26;
  double *pdVar27;
  ulong uVar28;
  uint uVar29;
  double *pdVar30;
  double *pdVar31;
  int iVar32;
  int iVar33;
  double *pdVar34;
  double *pdVar35;
  double *pdVar36;
  ulong uVar37;
  ulong uVar38;
  double dVar39;
  double dVar40;
  ulong uVar41;
  int iVar42;
  double local_438;
  double local_430;
  double local_428;
  double local_420;
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
  pdVar36 = *(double **)(param_3 + 0x10);
  pdVar18 = *(double **)(param_4 + 0x10);
  pdVar34 = *(double **)(param_2 + 0x10);
  uVar38 = *(ulong *)(param_3 + 0x50) >> 3;
  uVar41 = *(ulong *)(param_2 + 0x50) >> 3;
  if (*(int *)(param_4 + 8) < 2) {
    uVar37 = 0;
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    iVar8 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    uVar37 = *(ulong *)(param_4 + 0x50) >> 3;
    iVar8 = **(int **)(param_2 + 0x40);
  }
  if (pdVar18 == (double *)0x0) {
    if (0 < iVar8) {
      uVar10 = uVar7 - 4 >> 2;
      uVar6 = (uVar10 + 1) * 4;
      if ((int)(uVar7 - 3) < 1) {
        uVar6 = 0;
      }
      iVar33 = 0;
      uVar37 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
      do {
        pdVar18 = pdVar34 + 1;
        pdVar15 = pdVar36;
        iVar11 = iVar33;
        do {
          dVar39 = 0.0;
          if (0 < (int)(uVar7 - 3)) {
            pdVar16 = pdVar18;
            pdVar24 = pdVar34;
            do {
              pdVar23 = pdVar16 + 4;
              dVar39 = dVar39 + pdVar24[1] * *pdVar16 + pdVar16[-1] * *pdVar24 +
                                pdVar16[1] * pdVar24[2] + pdVar16[2] * pdVar24[3];
              pdVar16 = pdVar23;
              pdVar24 = pdVar24 + 4;
            } while (pdVar23 != pdVar18 + (ulong)uVar10 * 4 + 4);
          }
          if ((int)uVar6 < (int)uVar7) {
            lVar17 = 0;
            do {
              lVar22 = lVar17 + uVar37;
              lVar12 = lVar17 + (uVar37 - 8);
              lVar17 = lVar17 + 8;
              dVar39 = dVar39 + *(double *)((long)pdVar18 + lVar12) *
                                *(double *)((long)pdVar34 + lVar22);
            } while (lVar17 != ((ulong)((uVar7 - 1) - uVar6) + 1) * 8);
          }
          iVar11 = iVar11 + 1;
          pdVar18 = pdVar18 + uVar41;
          *pdVar15 = dVar39 * param_1;
          pdVar15 = pdVar15 + 1;
        } while (iVar11 < iVar8);
        iVar33 = iVar33 + 1;
        pdVar36 = pdVar36 + uVar38 + 1;
        pdVar34 = pdVar34 + uVar41;
      } while (iVar33 != iVar8);
    }
  }
  else {
    uVar19 = -(ulong)(uVar7 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar7 << 3;
    pdVar15 = adStack_408;
    lVar17 = 0x20;
    if (uVar6 != uVar7) {
      lVar17 = 0;
    }
    local_418 = pdVar15;
    local_410 = 0x408;
    if (uVar19 < 0x409) {
      local_410 = uVar19;
      bVar14 = false;
    }
    else {
      local_418 = operator_new__(uVar19);
      bVar14 = local_418 != pdVar15;
      local_410 = uVar19;
      pdVar15 = local_418;
    }
    if (0 < iVar8) {
      uVar10 = (uint)((ulong)pdVar15 >> 3) & 1;
      if (uVar7 < uVar10) {
        uVar10 = uVar7;
      }
      iVar11 = uVar7 - uVar10;
      uVar9 = uVar7 - 4 >> 2;
      uVar4 = (iVar11 - 2U >> 1) + 1;
      pdVar16 = pdVar34 + 2;
      uVar25 = (uint)(uVar10 != 0);
      iVar42 = uVar4 * 2;
      iVar33 = 0;
      pdVar24 = pdVar15 + 2;
      do {
        if ((int)uVar6 < (int)uVar7) {
          if (0 < (int)uVar7) {
            if ((uVar7 < 9 || pdVar34 < pdVar24 && pdVar15 < pdVar16) ||
               (pdVar15 < pdVar18 + 1 && pdVar18 < pdVar15 + uVar7)) {
              lVar22 = 0;
              do {
                pdVar15[lVar22] = pdVar34[lVar22] - *pdVar18;
                lVar22 = lVar22 + 1;
              } while ((int)lVar22 < (int)uVar7);
            }
            else {
              if (uVar10 != 0) {
                *pdVar15 = *pdVar34 - *pdVar18;
              }
              uVar29 = uVar25;
              if (iVar11 != 1) {
                dVar39 = *pdVar18;
                uVar29 = 0;
                pdVar23 = pdVar34 + uVar10;
                pdVar26 = pdVar15 + uVar10;
                do {
                  dVar40 = *pdVar23;
                  uVar29 = uVar29 + 1;
                  pdVar26[1] = pdVar23[1] - dVar39;
                  *pdVar26 = dVar40 - dVar39;
                  pdVar23 = pdVar23 + 2;
                  pdVar26 = pdVar26 + 2;
                } while (uVar29 < uVar4);
                uVar29 = iVar42 + uVar25;
                if (iVar42 == iVar11) goto LAB_002cd22c;
              }
              uVar20 = -(ulong)(uVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar29 << 3;
              *(double *)((long)pdVar15 + uVar20) = *(double *)((long)pdVar34 + uVar20) - *pdVar18;
            }
          }
        }
        else if (0 < (int)uVar7) {
          if ((uVar7 < 9 || pdVar34 < pdVar24 && pdVar15 < pdVar16) ||
             (pdVar15 < pdVar18 + 2 && pdVar18 < pdVar24)) {
            lVar22 = 0;
            do {
              pdVar15[lVar22] = pdVar34[lVar22] - pdVar18[lVar22];
              lVar22 = lVar22 + 1;
            } while ((int)lVar22 < (int)uVar7);
          }
          else {
            if (uVar10 != 0) {
              *pdVar15 = *pdVar34 - *pdVar18;
            }
            uVar29 = uVar25;
            if (iVar11 != 1) {
              uVar29 = 0;
              pdVar23 = pdVar34 + uVar10;
              pdVar26 = pdVar18 + uVar10;
              pdVar31 = pdVar15 + uVar10;
              do {
                dVar39 = *pdVar23;
                uVar29 = uVar29 + 1;
                dVar40 = *pdVar26;
                pdVar31[1] = pdVar23[1] - pdVar26[1];
                *pdVar31 = dVar39 - dVar40;
                pdVar23 = pdVar23 + 2;
                pdVar26 = pdVar26 + 2;
                pdVar31 = pdVar31 + 2;
              } while (uVar29 < uVar4);
              uVar29 = iVar42 + uVar25;
              if (iVar42 == iVar11) goto LAB_002cd22c;
            }
            uVar20 = -(ulong)(uVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar29 << 3;
            *(double *)((long)pdVar15 + uVar20) =
                 *(double *)((long)pdVar34 + uVar20) - *(double *)((long)pdVar18 + uVar20);
          }
        }
LAB_002cd22c:
        pdVar23 = pdVar34 + 1;
        pdVar26 = pdVar18;
        pdVar31 = pdVar36;
        iVar32 = iVar33;
        do {
          pdVar35 = pdVar26;
          if ((int)uVar6 < (int)uVar7) {
            local_420 = *pdVar26;
            local_428 = local_420;
            local_430 = local_420;
            local_438 = local_420;
            pdVar35 = &local_438;
          }
          dVar39 = 0.0;
          if ((int)uVar7 < 4) {
            uVar20 = 0;
          }
          else {
            pdVar21 = pdVar23;
            pdVar27 = pdVar35;
            pdVar30 = pdVar15;
            do {
              pdVar1 = pdVar27 + 1;
              pdVar5 = pdVar21 + 4;
              dVar40 = *pdVar27;
              pdVar2 = pdVar27 + 2;
              pdVar3 = pdVar27 + 3;
              pdVar27 = (double *)((long)pdVar27 + lVar17);
              dVar39 = dVar39 + (*pdVar21 - *pdVar1) * pdVar30[1] +
                                (pdVar21[-1] - dVar40) * *pdVar30 +
                                (pdVar21[1] - *pdVar2) * pdVar30[2] +
                                (pdVar21[2] - *pdVar3) * pdVar30[3];
              pdVar21 = pdVar5;
              pdVar30 = pdVar30 + 4;
            } while (pdVar5 != pdVar23 + (ulong)uVar9 * 4 + 4);
            pdVar35 = (double *)((long)pdVar35 + lVar17 + (ulong)uVar9 * lVar17);
            uVar20 = (ulong)((uVar9 + 1) * 4);
          }
          if ((int)uVar20 < (int)uVar7) {
            uVar28 = -(uVar20 >> 0x1f) & 0xfffffff800000000 | uVar20 << 3;
            lVar22 = 0;
            do {
              lVar13 = lVar22 + (uVar28 - 8);
              pdVar27 = (double *)((long)pdVar35 + lVar22);
              lVar12 = lVar22 + uVar28;
              lVar22 = lVar22 + 8;
              dVar39 = dVar39 + (*(double *)((long)pdVar23 + lVar13) - *pdVar27) *
                                *(double *)((long)pdVar15 + lVar12);
            } while (lVar22 != ((ulong)((uVar7 - 1) - (int)uVar20) + 1) * 8);
          }
          iVar32 = iVar32 + 1;
          pdVar26 = pdVar26 + uVar37;
          pdVar23 = pdVar23 + uVar41;
          *pdVar31 = dVar39 * param_1;
          pdVar31 = pdVar31 + 1;
        } while (iVar32 < iVar8);
        iVar33 = iVar33 + 1;
        pdVar18 = pdVar18 + uVar37;
        pdVar34 = pdVar34 + uVar41;
        pdVar16 = pdVar16 + uVar41;
        pdVar36 = pdVar36 + uVar38 + 1;
      } while (iVar33 != iVar8);
    }
    if (bVar14) {
      local_418 = pdVar15;
      local_410 = uVar19;
      operator_delete__(pdVar15);
    }
  }
  return;
}


==================================================================

### FUNC 002cd624 (1560 bytes) name=FUN_002cd624

void FUN_002cd624(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  float *pfVar5;
  float *pfVar6;
  int iVar7;
  int iVar8;
  byte bVar9;
  long lVar10;
  bool bVar11;
  undefined1 *puVar12;
  int iVar13;
  float *pfVar14;
  long lVar15;
  byte *pbVar16;
  long lVar17;
  long lVar18;
  float *pfVar19;
  byte *pbVar20;
  float *pfVar21;
  float *pfVar22;
  undefined8 *puVar23;
  byte *pbVar24;
  long lVar25;
  long lVar26;
  uint uVar27;
  long lVar28;
  undefined8 *puVar29;
  undefined8 *puVar30;
  float *pfVar31;
  byte *pbVar32;
  int iVar33;
  ulong uVar34;
  ulong uVar35;
  float fVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  undefined1 auStack_408 [1032];
  
  pbVar32 = *(byte **)(param_2 + 0x10);
  puVar29 = *(undefined8 **)(param_3 + 0x10);
  uVar35 = *(ulong *)(param_3 + 0x50) >> 2;
  pfVar31 = *(float **)(param_4 + 0x10);
  lVar28 = *(long *)(param_2 + 0x50);
  if (*(int *)(param_4 + 8) < 2) {
    uVar34 = 0;
  }
  else {
    uVar34 = *(ulong *)(param_4 + 0x50) >> 2;
  }
  iVar7 = (*(int **)(param_2 + 0x40))[1];
  iVar8 = **(int **)(param_2 + 0x40);
  bVar1 = iVar7 <= *(int *)(param_4 + 0xc);
  iVar33 = iVar8 * 4;
  if ((pfVar31 != (float *)0x0) && (iVar33 = iVar8 * 0x14, bVar1)) {
    iVar33 = iVar8 * 4;
  }
  if ((ulong)(long)iVar33 < 0x409) {
    puVar12 = auStack_408;
    bVar11 = false;
  }
  else {
    puVar12 = operator_new__((long)iVar33);
    bVar11 = puVar12 != auStack_408;
  }
  if (pfVar31 == (float *)0x0) {
LAB_002cd768:
    if (0 < iVar7) {
      lVar26 = uVar35 * 4;
      uVar27 = iVar7 - 4;
      lVar25 = 0;
      pbVar24 = pbVar32;
      puVar30 = puVar29;
      do {
        iVar33 = (int)lVar25;
        lVar15 = 0;
        pbVar20 = pbVar24;
        if (0 < iVar8) {
          do {
            bVar9 = *pbVar20;
            pbVar20 = pbVar20 + lVar28;
            *(float *)(puVar12 + lVar15 * 4) = (float)bVar9;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < iVar8);
        }
        if (iVar33 < iVar7 + -3) {
          pbVar20 = pbVar24;
          puVar23 = puVar29;
          do {
            dVar38 = 0.0;
            dVar39 = dVar38;
            dVar40 = dVar38;
            dVar41 = dVar38;
            if (0 < iVar8) {
              dVar39 = 0.0;
              lVar15 = 0;
              dVar40 = 0.0;
              dVar41 = 0.0;
              pbVar16 = pbVar20;
              do {
                bVar9 = *pbVar16;
                pbVar2 = pbVar16 + 1;
                pbVar3 = pbVar16 + 2;
                pbVar4 = pbVar16 + 3;
                pbVar16 = pbVar16 + lVar28;
                lVar17 = lVar15 * 4;
                lVar15 = lVar15 + 1;
                dVar37 = (double)*(float *)(puVar12 + lVar17);
                dVar41 = dVar41 + dVar37 * (double)bVar9;
                dVar40 = dVar40 + dVar37 * (double)*pbVar2;
                dVar39 = dVar39 + dVar37 * (double)*pbVar3;
                dVar38 = dVar38 + dVar37 * (double)*pbVar4;
              } while ((int)lVar15 < iVar8);
            }
            pbVar20 = pbVar20 + 4;
            puVar23[1] = CONCAT44((float)(dVar38 * param_1),(float)(dVar39 * param_1));
            *puVar23 = CONCAT44((float)(dVar40 * param_1),(float)(dVar41 * param_1));
            puVar23 = puVar23 + 2;
          } while (pbVar20 != pbVar32 + lVar25 + 4 + (ulong)(uVar27 >> 2) * 4);
          iVar33 = iVar33 + 4 + (uVar27 >> 2) * 4;
        }
        if (iVar33 < iVar7) {
          lVar15 = (long)iVar33;
          pbVar20 = pbVar32 + lVar15;
          pfVar31 = (float *)((long)puVar30 + lVar15 * 4);
          do {
            dVar39 = 0.0;
            if (0 < iVar8) {
              lVar17 = 0;
              pbVar16 = pbVar20;
              do {
                bVar9 = *pbVar16;
                pbVar16 = pbVar16 + lVar28;
                lVar18 = lVar17 * 4;
                lVar17 = lVar17 + 1;
                dVar39 = dVar39 + (double)bVar9 * (double)*(float *)(puVar12 + lVar18);
              } while ((int)lVar17 < iVar8);
            }
            pbVar20 = pbVar20 + 1;
            *pfVar31 = (float)(dVar39 * param_1);
            pfVar31 = pfVar31 + 1;
          } while (pbVar20 != pbVar32 + lVar15 + 1 + (ulong)(uint)((iVar7 + -1) - iVar33));
        }
        lVar25 = lVar25 + 1;
        puVar30 = (undefined8 *)((long)puVar30 + lVar26);
        uVar27 = uVar27 - 1;
        pbVar24 = pbVar24 + 1;
        puVar29 = (undefined8 *)((long)puVar29 + lVar26 + 4);
      } while ((int)lVar25 < iVar7);
    }
  }
  else {
    if (bVar1) {
      pfVar22 = (float *)0x0;
    }
    else {
      pfVar22 = (float *)(puVar12 + (long)iVar8 * 4);
      if (0 < iVar8) {
        pfVar14 = pfVar22 + 3;
        do {
          fVar36 = *pfVar31;
          pfVar19 = pfVar14 + 4;
          pfVar31 = pfVar31 + uVar34;
          *pfVar14 = fVar36;
          pfVar14[-1] = fVar36;
          pfVar14[-2] = fVar36;
          pfVar14[-3] = fVar36;
          pfVar14 = pfVar19;
        } while (pfVar19 != pfVar22 + (ulong)(iVar8 - 1) * 4 + 7);
      }
      if (uVar34 != 0) {
        uVar34 = 4;
      }
      pfVar31 = pfVar22;
      if (pfVar22 == (float *)0x0) goto LAB_002cd768;
    }
    if (0 < iVar7) {
      lVar26 = uVar35 * 4;
      lVar25 = 0;
      uVar27 = iVar7 - 4;
      iVar33 = 0;
      pbVar24 = pbVar32;
      pfVar14 = pfVar31;
      puVar30 = puVar29;
      if (pfVar22 == (float *)0x0) goto LAB_002cdbc8;
      do {
        if (0 < iVar8) {
          lVar15 = 0;
          pbVar20 = pbVar24;
          pfVar19 = pfVar22;
          do {
            bVar9 = *pbVar20;
            pbVar20 = pbVar20 + lVar28;
            fVar36 = *pfVar19;
            pfVar19 = pfVar19 + uVar34;
            *(float *)(puVar12 + lVar15 * 4) = (float)bVar9 - fVar36;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < iVar8);
        }
        while( true ) {
          iVar13 = iVar33;
          if (iVar33 < iVar7 + -3) {
            lVar15 = lVar25 << 2;
            pbVar20 = pbVar24;
            puVar23 = puVar29;
            do {
              pfVar19 = pfVar22;
              if (pfVar22 == (float *)0x0) {
                pfVar19 = (float *)((long)pfVar31 + lVar15);
              }
              dVar38 = 0.0;
              dVar39 = dVar38;
              dVar40 = dVar38;
              dVar41 = dVar38;
              if (0 < iVar8) {
                dVar39 = 0.0;
                lVar17 = 0;
                dVar40 = 0.0;
                dVar41 = 0.0;
                pbVar16 = pbVar20;
                do {
                  bVar9 = *pbVar16;
                  pbVar2 = pbVar16 + 1;
                  pbVar3 = pbVar16 + 2;
                  pbVar4 = pbVar16 + 3;
                  pbVar16 = pbVar16 + lVar28;
                  pfVar21 = pfVar19 + 3;
                  fVar36 = *pfVar19;
                  pfVar5 = pfVar19 + 1;
                  pfVar6 = pfVar19 + 2;
                  pfVar19 = pfVar19 + uVar34;
                  lVar18 = lVar17 * 4;
                  lVar17 = lVar17 + 1;
                  dVar37 = (double)*(float *)(puVar12 + lVar18);
                  dVar41 = dVar41 + dVar37 * (double)((float)bVar9 - fVar36);
                  dVar40 = dVar40 + dVar37 * (double)((float)*pbVar2 - *pfVar5);
                  dVar39 = dVar39 + dVar37 * (double)((float)*pbVar3 - *pfVar6);
                  dVar38 = dVar38 + dVar37 * (double)((float)*pbVar4 - *pfVar21);
                } while ((int)lVar17 < iVar8);
              }
              pbVar20 = pbVar20 + 4;
              *(float *)((long)puVar30 + lVar15) = (float)(dVar41 * param_1);
              lVar15 = lVar15 + 0x10;
              *(float *)((long)puVar23 + 4) = (float)(dVar40 * param_1);
              *(float *)(puVar23 + 1) = (float)(dVar39 * param_1);
              *(float *)((long)puVar23 + 0xc) = (float)(dVar38 * param_1);
              puVar23 = puVar23 + 2;
            } while (lVar15 != (lVar25 + 4 + (ulong)(uVar27 >> 2) * 4) * 4);
            iVar13 = (int)lVar25 + 4 + (uVar27 >> 2) * 4;
          }
          if (iVar13 < iVar7) {
            lVar17 = (long)iVar13;
            pbVar20 = pbVar32 + lVar17;
            lVar15 = lVar17 << 2;
            do {
              pfVar19 = pfVar22;
              if (pfVar22 == (float *)0x0) {
                pfVar19 = (float *)((long)pfVar31 + lVar15);
              }
              dVar39 = 0.0;
              if (0 < iVar8) {
                lVar18 = 0;
                pbVar16 = pbVar20;
                do {
                  bVar9 = *pbVar16;
                  pbVar16 = pbVar16 + lVar28;
                  fVar36 = *pfVar19;
                  pfVar19 = pfVar19 + uVar34;
                  lVar10 = lVar18 * 4;
                  lVar18 = lVar18 + 1;
                  dVar39 = dVar39 + (double)((float)bVar9 - fVar36) *
                                    (double)*(float *)(puVar12 + lVar10);
                } while ((int)lVar18 < iVar8);
              }
              pbVar20 = pbVar20 + 1;
              *(float *)((long)puVar30 + lVar15) = (float)(dVar39 * param_1);
              lVar15 = lVar15 + 4;
            } while (lVar15 != (lVar17 + 1 + (ulong)(uint)((iVar7 + -1) - iVar13)) * 4);
          }
          iVar33 = iVar33 + 1;
          puVar30 = (undefined8 *)((long)puVar30 + lVar26);
          lVar25 = lVar25 + 1;
          uVar27 = uVar27 - 1;
          pbVar24 = pbVar24 + 1;
          pfVar14 = pfVar14 + 1;
          puVar29 = (undefined8 *)((long)puVar29 + lVar26 + 4);
          if (iVar33 == iVar7) goto LAB_002cd92c;
          if (pfVar22 != (float *)0x0) break;
LAB_002cdbc8:
          pfVar19 = pfVar22;
          pbVar20 = pbVar24;
          pfVar21 = pfVar14;
          if (0 < iVar8) {
            do {
              *(float *)(puVar12 + (long)pfVar19 * 4) = (float)*pbVar20 - *pfVar21;
              pfVar19 = (float *)((long)pfVar19 + 1);
              pbVar20 = pbVar20 + lVar28;
              pfVar21 = pfVar21 + uVar34;
            } while ((int)pfVar19 < iVar8);
          }
        }
      } while( true );
    }
  }
LAB_002cd92c:
  if (bVar11) {
    operator_delete__(puVar12);
  }
  return;
}


==================================================================

### FUNC 002cdc5c (1696 bytes) name=FUN_002cdc5c

void FUN_002cdc5c(float *param_1,ulong param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,int *param_8,float param_9)

{
  float *pfVar1;
  double *pdVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  float fVar9;
  float *pfVar10;
  ulong uVar11;
  float *pfVar12;
  long lVar13;
  float *pfVar14;
  long lVar15;
  float *pfVar16;
  float *pfVar17;
  ulong uVar18;
  undefined8 uVar19;
  float *pfVar20;
  double *pdVar21;
  uint uVar22;
  double *pdVar23;
  long lVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  ulong uVar28;
  double *pdVar29;
  double *pdVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  uint uVar41;
  long lVar42;
  float afStack_440 [2];
  undefined8 auStack_438 [135];
  
  fVar9 = param_9;
  iVar26 = *param_7;
  iVar4 = *param_8;
  pfVar12 = afStack_440;
  do {
    pfVar16 = pfVar12 + 4;
    pfVar12[2] = 0.0;
    pfVar12[3] = 0.0;
    pfVar12[0] = 0.0;
    pfVar12[1] = 0.0;
    pfVar12 = pfVar16;
  } while (pfVar16 != &param_9);
  pfVar12 = afStack_440;
  uVar3 = (uint)param_9 & 0x10;
  param_4 = param_4 >> 3;
  uVar41 = (uint)param_9 & 1;
  if (((uint)param_9 & 1) == 0) {
    pfVar16 = (float *)0x0;
    uVar28 = 1;
    uVar11 = param_2 >> 3;
    goto LAB_002cdd08;
  }
  iVar26 = param_7[1];
  uVar28 = (ulong)iVar26;
  if (uVar28 < 0x89) {
    uVar41 = 0;
  }
  else {
    uVar11 = uVar28 << 3;
    if (0xfe0000000000000 < uVar28) {
      uVar11 = 0xffffffffffffffff;
    }
    pfVar12 = operator_new__(uVar11);
    uVar11 = (uVar28 - 2 >> 1) + 1;
    pfVar16 = pfVar12;
    if (iVar26 == 1) {
LAB_002ce2b4:
      *pfVar16 = 0.0;
      pfVar16[1] = 0.0;
    }
    else {
      uVar18 = 0;
      do {
        pfVar16[2] = 0.0;
        pfVar16[3] = 0.0;
        pfVar16[0] = 0.0;
        pfVar16[1] = 0.0;
        uVar18 = uVar18 + 1;
        pfVar16 = pfVar16 + 4;
      } while (uVar18 < uVar11);
      pfVar16 = pfVar12 + uVar11 * 4;
      if (uVar28 != uVar11 * 2) goto LAB_002ce2b4;
    }
    uVar41 = (uint)(pfVar12 != afStack_440);
  }
  uVar11 = 1;
  pfVar16 = pfVar12;
  uVar28 = param_2 >> 3;
LAB_002cdd08:
  uVar22 = (uint)fVar9 & 2;
  if (((uint)fVar9 >> 1 & 1) == 0) {
    uVar5 = param_8[1];
    if (0 < (int)uVar5) {
      uVar7 = iVar4 - 4U >> 2;
      iVar25 = (uVar7 + 1) * 4;
      if (iVar4 + -3 < 1) {
        iVar25 = 0;
      }
      lVar24 = (long)iVar25;
      lVar15 = (ulong)(iVar26 - 1) + 1;
      lVar42 = NEON_shl(lVar24 + 1 + (ulong)(uint)((iVar4 + -1) - iVar25),4);
      do {
        pfVar20 = param_1;
        if ((pfVar16 != (float *)0x0) && (pfVar20 = pfVar16, 0 < iVar26)) {
          lVar13 = 0;
          pfVar10 = param_1;
          do {
            uVar19 = *(undefined8 *)pfVar10;
            pfVar10 = pfVar10 + uVar28 * 2;
            *(undefined8 *)(pfVar16 + lVar13 * 2) = uVar19;
            lVar13 = lVar13 + 1;
          } while ((int)lVar13 < iVar26);
        }
        if (0 < iVar4 + -3) {
          pfVar10 = param_3;
          pdVar23 = param_5 + 4;
          pdVar21 = param_5;
          pdVar29 = param_5 + 2;
          pdVar30 = param_5 + 6;
          do {
            if (uVar3 == 0) {
              dVar33 = 0.0;
              dVar34 = 0.0;
              dVar35 = 0.0;
              dVar36 = 0.0;
              dVar37 = 0.0;
              dVar38 = 0.0;
              dVar39 = 0.0;
              dVar40 = 0.0;
            }
            else {
              dVar40 = *pdVar21;
              dVar39 = pdVar21[1];
              dVar38 = *pdVar29;
              dVar37 = pdVar21[3];
              dVar36 = *pdVar23;
              dVar35 = pdVar21[5];
              dVar34 = *pdVar30;
              dVar33 = pdVar21[7];
            }
            pfVar14 = pfVar10;
            pfVar17 = pfVar20;
            if (0 < iVar26) {
              do {
                pfVar1 = pfVar17 + 2;
                dVar32 = (double)pfVar17[1];
                dVar31 = (double)*pfVar17;
                dVar40 = dVar40 + ((double)*pfVar14 * dVar31 - dVar32 * (double)pfVar14[1]);
                dVar39 = dVar39 + (double)*pfVar14 * dVar32 + (double)pfVar14[1] * dVar31;
                dVar38 = dVar38 + (dVar31 * (double)pfVar14[2] - dVar32 * (double)pfVar14[3]);
                dVar37 = dVar37 + dVar32 * (double)pfVar14[2] + (double)pfVar14[3] * dVar31;
                dVar36 = dVar36 + (dVar31 * (double)pfVar14[4] - dVar32 * (double)pfVar14[5]);
                dVar35 = dVar35 + dVar32 * (double)pfVar14[4] + (double)pfVar14[5] * dVar31;
                dVar34 = dVar34 + (dVar31 * (double)pfVar14[6] - dVar32 * (double)pfVar14[7]);
                dVar33 = dVar33 + dVar32 * (double)pfVar14[6] + (double)pfVar14[7] * dVar31;
                pfVar14 = pfVar14 + param_4 * 2;
                pfVar17 = pfVar1;
              } while (pfVar1 != pfVar20 + lVar15 * 2);
            }
            pdVar2 = pdVar29 + 8;
            *pdVar21 = dVar40;
            pdVar21[1] = dVar39;
            *pdVar29 = dVar38;
            pdVar21 = pdVar21 + 8;
            pdVar29[1] = dVar37;
            pfVar10 = pfVar10 + 8;
            *pdVar23 = dVar36;
            pdVar23[1] = dVar35;
            *pdVar30 = dVar34;
            pdVar30[1] = dVar33;
            pdVar23 = pdVar23 + 8;
            pdVar29 = pdVar2;
            pdVar30 = pdVar30 + 8;
          } while (pdVar2 != param_5 + (ulong)uVar7 * 8 + 10);
        }
        if (iVar25 < iVar4) {
          pdVar21 = param_5 + lVar24 * 2;
          pfVar10 = param_3 + lVar24 * 2;
          do {
            if (uVar3 == 0) {
              dVar33 = 0.0;
              dVar34 = 0.0;
            }
            else {
              dVar34 = *pdVar21;
              dVar33 = pdVar21[1];
            }
            pfVar14 = pfVar20;
            pfVar17 = pfVar10;
            if (0 < iVar26) {
              do {
                pfVar1 = pfVar14 + 2;
                dVar34 = dVar34 + ((double)*pfVar14 * (double)*pfVar17 -
                                  (double)pfVar14[1] * (double)pfVar17[1]);
                dVar33 = dVar33 + (double)pfVar14[1] * (double)*pfVar17 +
                                  (double)pfVar17[1] * (double)*pfVar14;
                pfVar14 = pfVar1;
                pfVar17 = pfVar17 + param_4 * 2;
              } while (pfVar1 != pfVar20 + lVar15 * 2);
            }
            *pdVar21 = dVar34;
            pdVar23 = pdVar21 + 2;
            pfVar10 = pfVar10 + 2;
            pdVar21[1] = dVar33;
            pdVar21 = pdVar23;
          } while (pdVar23 != (double *)((long)param_5 + lVar42));
        }
        uVar22 = uVar22 + 1;
        param_1 = param_1 + uVar11 * 2;
        param_5 = param_5 + (param_6 >> 4) * 2;
      } while (uVar22 != uVar5);
    }
  }
  else {
    iVar4 = param_8[1];
    if (0 < iVar4) {
      iVar6 = *param_8;
      uVar22 = iVar26 - 2U >> 1;
      iVar8 = iVar26 + -1;
      iVar25 = 0;
      do {
        pfVar20 = param_1;
        if ((pfVar16 != (float *)0x0) && (pfVar20 = pfVar16, 0 < iVar26)) {
          lVar15 = 0;
          pfVar10 = param_1;
          do {
            uVar19 = *(undefined8 *)pfVar10;
            pfVar10 = pfVar10 + uVar28 * 2;
            *(undefined8 *)(pfVar16 + lVar15 * 2) = uVar19;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < iVar26);
        }
        if (0 < iVar6) {
          pdVar21 = param_5;
          pfVar10 = param_3;
          do {
            if (uVar3 == 0) {
              dVar33 = 0.0;
              dVar34 = 0.0;
              if (iVar8 < 1) goto LAB_002ce234;
LAB_002ce0ac:
              dVar36 = 0.0;
              pfVar14 = pfVar10 + 1;
              pfVar17 = pfVar20;
              dVar35 = dVar36;
              do {
                pfVar1 = pfVar14 + 4;
                dVar34 = dVar34 + ((double)*pfVar17 * (double)pfVar14[-1] -
                                  (double)pfVar17[1] * (double)*pfVar14);
                dVar36 = dVar36 + ((double)pfVar17[2] * (double)pfVar14[1] -
                                  (double)pfVar17[3] * (double)pfVar14[2]);
                dVar33 = dVar33 + (double)pfVar17[1] * (double)pfVar14[-1] +
                                  (double)*pfVar14 * (double)*pfVar17;
                dVar35 = dVar35 + (double)pfVar17[3] * (double)pfVar14[1] +
                                  (double)pfVar14[2] * (double)pfVar17[2];
                pfVar14 = pfVar1;
                pfVar17 = pfVar17 + 4;
                iVar27 = (uVar22 + 1) * 2;
              } while (pfVar1 != pfVar10 + (ulong)uVar22 * 4 + 5);
            }
            else {
              dVar34 = *pdVar21;
              dVar33 = pdVar21[1];
              if (0 < iVar8) goto LAB_002ce0ac;
LAB_002ce234:
              dVar36 = 0.0;
              dVar35 = dVar36;
              iVar27 = 0;
            }
            if (iVar27 < iVar26) {
              lVar15 = (long)iVar27;
              pfVar14 = pfVar20 + lVar15 * 2;
              pfVar17 = pfVar10 + lVar15 * 2;
              do {
                pfVar1 = pfVar14 + 2;
                dVar34 = dVar34 + ((double)*pfVar14 * (double)*pfVar17 -
                                  (double)pfVar14[1] * (double)pfVar17[1]);
                dVar33 = dVar33 + (double)pfVar14[1] * (double)*pfVar17 +
                                  (double)pfVar17[1] * (double)*pfVar14;
                pfVar14 = pfVar1;
                pfVar17 = pfVar17 + 2;
              } while (pfVar1 != pfVar20 + (lVar15 + 1 + (ulong)(uint)(iVar8 - iVar27)) * 2);
            }
            pdVar23 = pdVar21 + 2;
            pfVar10 = pfVar10 + param_4 * 2;
            *pdVar21 = dVar34 + dVar36;
            pdVar21[1] = dVar35 + dVar33;
            pdVar21 = pdVar23;
          } while (param_5 + ((ulong)(iVar6 - 1) + 1) * 2 != pdVar23);
        }
        iVar25 = iVar25 + 1;
        param_1 = param_1 + uVar11 * 2;
        param_5 = param_5 + (param_6 >> 4) * 2;
      } while (iVar25 != iVar4);
    }
  }
  if (uVar41 != 0) {
    operator_delete__(pfVar12);
  }
  return;
}


==================================================================

### FUNC 002ce320 (64 bytes) name=FUN_002ce320

void FUN_002ce320(void)

{
  FUN_002cdc5c();
  return;
}


==================================================================

### FUNC 002ce360 (1508 bytes) name=FUN_002ce360

void FUN_002ce360(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  double *pdVar5;
  double *pdVar6;
  double *pdVar7;
  int iVar8;
  int iVar9;
  byte bVar10;
  long lVar11;
  bool bVar12;
  undefined1 *puVar13;
  int iVar14;
  double *pdVar15;
  long lVar16;
  byte *pbVar17;
  long lVar18;
  double *pdVar19;
  double dVar20;
  long lVar21;
  double *pdVar22;
  byte *pbVar23;
  double *pdVar24;
  byte *pbVar25;
  long lVar26;
  long lVar27;
  double *pdVar28;
  double *pdVar29;
  uint uVar30;
  double *pdVar31;
  byte *pbVar32;
  int iVar33;
  ulong uVar34;
  ulong uVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  undefined1 auStack_408 [1032];
  
  pbVar32 = *(byte **)(param_2 + 0x10);
  pdVar28 = *(double **)(param_3 + 0x10);
  uVar35 = *(ulong *)(param_3 + 0x50) >> 3;
  pdVar31 = *(double **)(param_4 + 0x10);
  lVar27 = *(long *)(param_2 + 0x50);
  if (*(int *)(param_4 + 8) < 2) {
    uVar34 = 0;
  }
  else {
    uVar34 = *(ulong *)(param_4 + 0x50) >> 3;
  }
  iVar8 = (*(int **)(param_2 + 0x40))[1];
  iVar9 = **(int **)(param_2 + 0x40);
  bVar1 = iVar8 <= *(int *)(param_4 + 0xc);
  iVar33 = iVar9 * 8;
  if ((pdVar31 != (double *)0x0) && (iVar33 = iVar9 * 0x28, bVar1)) {
    iVar33 = iVar9 * 8;
  }
  if ((ulong)(long)iVar33 < 0x409) {
    puVar13 = auStack_408;
    bVar12 = false;
  }
  else {
    puVar13 = operator_new__((long)iVar33);
    bVar12 = puVar13 != auStack_408;
  }
  if (pdVar31 == (double *)0x0) {
LAB_002ce4a8:
    if (0 < iVar8) {
      uVar30 = iVar8 - 4;
      lVar26 = 0;
      pbVar25 = pbVar32;
      pdVar31 = pdVar28;
      do {
        iVar33 = (int)lVar26;
        lVar16 = 0;
        pbVar23 = pbVar25;
        if (0 < iVar9) {
          do {
            bVar10 = *pbVar23;
            pbVar23 = pbVar23 + lVar27;
            *(double *)(puVar13 + lVar16 * 8) = (double)bVar10;
            lVar16 = lVar16 + 1;
          } while ((int)lVar16 < iVar9);
        }
        if (iVar33 < iVar8 + -3) {
          pbVar23 = pbVar25;
          pdVar24 = pdVar28;
          do {
            dVar37 = 0.0;
            dVar20 = dVar37;
            dVar38 = dVar37;
            dVar39 = dVar37;
            if (0 < iVar9) {
              dVar20 = 0.0;
              lVar16 = 0;
              dVar38 = 0.0;
              dVar39 = 0.0;
              pbVar17 = pbVar23;
              do {
                bVar10 = *pbVar17;
                pbVar2 = pbVar17 + 1;
                pbVar3 = pbVar17 + 2;
                pbVar4 = pbVar17 + 3;
                pbVar17 = pbVar17 + lVar27;
                dVar36 = *(double *)(puVar13 + lVar16 * 8);
                lVar16 = lVar16 + 1;
                dVar39 = dVar39 + dVar36 * (double)bVar10;
                dVar38 = dVar38 + dVar36 * (double)*pbVar2;
                dVar20 = dVar20 + dVar36 * (double)*pbVar3;
                dVar37 = dVar37 + dVar36 * (double)*pbVar4;
              } while ((int)lVar16 < iVar9);
            }
            pbVar23 = pbVar23 + 4;
            pdVar24[1] = dVar38 * param_1;
            *pdVar24 = dVar39 * param_1;
            pdVar24[3] = dVar37 * param_1;
            pdVar24[2] = dVar20 * param_1;
            pdVar24 = pdVar24 + 4;
          } while (pbVar23 != pbVar32 + lVar26 + 4 + (ulong)(uVar30 >> 2) * 4);
          iVar33 = iVar33 + 4 + (uVar30 >> 2) * 4;
        }
        if (iVar33 < iVar8) {
          lVar16 = (long)iVar33;
          pbVar23 = pbVar32 + lVar16;
          pdVar24 = pdVar31 + lVar16;
          do {
            dVar20 = 0.0;
            if (0 < iVar9) {
              lVar18 = 0;
              pbVar17 = pbVar23;
              do {
                bVar10 = *pbVar17;
                pbVar17 = pbVar17 + lVar27;
                lVar21 = lVar18 * 8;
                lVar18 = lVar18 + 1;
                dVar20 = dVar20 + (double)bVar10 * *(double *)(puVar13 + lVar21);
              } while ((int)lVar18 < iVar9);
            }
            pbVar23 = pbVar23 + 1;
            *pdVar24 = dVar20 * param_1;
            pdVar24 = pdVar24 + 1;
          } while (pbVar23 != pbVar32 + lVar16 + 1 + (ulong)(uint)((iVar8 + -1) - iVar33));
        }
        lVar26 = lVar26 + 1;
        pdVar31 = pdVar31 + uVar35;
        uVar30 = uVar30 - 1;
        pbVar25 = pbVar25 + 1;
        pdVar28 = pdVar28 + uVar35 + 1;
      } while ((int)lVar26 < iVar8);
    }
  }
  else {
    if (bVar1) {
      pdVar24 = (double *)0x0;
    }
    else {
      pdVar24 = (double *)(puVar13 + (long)iVar9 * 8);
      if (0 < iVar9) {
        pdVar15 = pdVar24 + 3;
        do {
          dVar20 = *pdVar31;
          pdVar29 = pdVar15 + 4;
          pdVar31 = pdVar31 + uVar34;
          *pdVar15 = dVar20;
          pdVar15[-1] = dVar20;
          pdVar15[-2] = dVar20;
          pdVar15[-3] = dVar20;
          pdVar15 = pdVar29;
        } while (pdVar29 != pdVar24 + (ulong)(iVar9 - 1) * 4 + 7);
      }
      if (uVar34 != 0) {
        uVar34 = 4;
      }
      pdVar31 = pdVar24;
      if (pdVar24 == (double *)0x0) goto LAB_002ce4a8;
    }
    if (0 < iVar8) {
      lVar26 = 0;
      uVar30 = iVar8 - 4;
      iVar33 = 0;
      pbVar25 = pbVar32;
      pdVar15 = pdVar31;
      pdVar29 = pdVar28;
      if (pdVar24 == (double *)0x0) goto LAB_002ce8d0;
      do {
        if (0 < iVar9) {
          lVar16 = 0;
          pbVar23 = pbVar25;
          pdVar22 = pdVar24;
          do {
            bVar10 = *pbVar23;
            pbVar23 = pbVar23 + lVar27;
            dVar20 = *pdVar22;
            pdVar22 = pdVar22 + uVar34;
            *(double *)(puVar13 + lVar16 * 8) = (double)bVar10 - dVar20;
            lVar16 = lVar16 + 1;
          } while ((int)lVar16 < iVar9);
        }
        while( true ) {
          iVar14 = iVar33;
          if (iVar33 < iVar8 + -3) {
            lVar16 = lVar26 << 3;
            pbVar23 = pbVar25;
            pdVar22 = pdVar28;
            do {
              pdVar19 = pdVar24;
              if (pdVar24 == (double *)0x0) {
                pdVar19 = (double *)((long)pdVar31 + lVar16);
              }
              dVar37 = 0.0;
              dVar20 = dVar37;
              dVar38 = dVar37;
              dVar39 = dVar37;
              if (0 < iVar9) {
                dVar20 = 0.0;
                lVar18 = 0;
                dVar38 = 0.0;
                dVar39 = 0.0;
                pbVar17 = pbVar23;
                do {
                  bVar10 = *pbVar17;
                  pbVar2 = pbVar17 + 1;
                  pbVar3 = pbVar17 + 2;
                  pbVar4 = pbVar17 + 3;
                  pbVar17 = pbVar17 + lVar27;
                  pdVar5 = pdVar19 + 3;
                  dVar40 = *pdVar19;
                  pdVar6 = pdVar19 + 1;
                  pdVar7 = pdVar19 + 2;
                  pdVar19 = pdVar19 + uVar34;
                  dVar36 = *(double *)(puVar13 + lVar18 * 8);
                  lVar18 = lVar18 + 1;
                  dVar39 = dVar39 + dVar36 * ((double)bVar10 - dVar40);
                  dVar38 = dVar38 + dVar36 * ((double)*pbVar2 - *pdVar6);
                  dVar20 = dVar20 + dVar36 * ((double)*pbVar3 - *pdVar7);
                  dVar37 = dVar37 + dVar36 * ((double)*pbVar4 - *pdVar5);
                } while ((int)lVar18 < iVar9);
              }
              pbVar23 = pbVar23 + 4;
              *(double *)((long)pdVar29 + lVar16) = dVar39 * param_1;
              lVar16 = lVar16 + 0x20;
              pdVar22[1] = dVar38 * param_1;
              pdVar22[2] = dVar20 * param_1;
                    /* catch() { ... } // from try @ 002ce838 with catch @ 002ce804
                       catch() { ... } // from try @ 002cea3c with catch @ 002ce804
                       catch() { ... } // from try @ 002ceb08 with catch @ 002ce804 */
              pdVar22[3] = dVar37 * param_1;
              pdVar22 = pdVar22 + 4;
            } while (lVar16 != (lVar26 + 4 + (ulong)(uVar30 >> 2) * 4) * 8);
            iVar14 = (int)lVar26 + 4 + (uVar30 >> 2) * 4;
          }
          if (iVar14 < iVar8) {
            lVar18 = (long)iVar14;
            pbVar23 = pbVar32 + lVar18;
            lVar16 = lVar18 << 3;
                    /* try { // try from 002ce838 to 003ce83b has its CatchHandler @ 002ce804 */
            do {
              pdVar22 = pdVar24;
              if (pdVar24 == (double *)0x0) {
                pdVar22 = (double *)((long)pdVar31 + lVar16);
              }
              dVar20 = 0.0;
              if (0 < iVar9) {
                lVar21 = 0;
                pbVar17 = pbVar23;
                do {
                  bVar10 = *pbVar17;
                  pbVar17 = pbVar17 + lVar27;
                  dVar38 = *pdVar22;
                  pdVar22 = pdVar22 + uVar34;
                  lVar11 = lVar21 * 8;
                  lVar21 = lVar21 + 1;
                  dVar20 = dVar20 + ((double)bVar10 - dVar38) * *(double *)(puVar13 + lVar11);
                } while ((int)lVar21 < iVar9);
              }
              pbVar23 = pbVar23 + 1;
              *(double *)((long)pdVar29 + lVar16) = dVar20 * param_1;
              lVar16 = lVar16 + 8;
            } while (lVar16 != (lVar18 + 1 + (ulong)(uint)((iVar8 + -1) - iVar14)) * 8);
          }
          iVar33 = iVar33 + 1;
          pdVar29 = pdVar29 + uVar35;
          lVar26 = lVar26 + 1;
          uVar30 = uVar30 - 1;
          pbVar25 = pbVar25 + 1;
          pdVar15 = pdVar15 + 1;
          pdVar28 = pdVar28 + uVar35 + 1;
          if (iVar33 == iVar8) goto LAB_002ce664;
          if (pdVar24 != (double *)0x0) break;
LAB_002ce8d0:
          pdVar22 = pdVar24;
          pbVar23 = pbVar25;
          pdVar19 = pdVar15;
          if (0 < iVar9) {
            do {
              *(double *)(puVar13 + (long)pdVar22 * 8) = (double)*pbVar23 - *pdVar19;
              pdVar22 = (double *)((long)pdVar22 + 1);
              pbVar23 = pbVar23 + lVar27;
              pdVar19 = pdVar19 + uVar34;
            } while ((int)pdVar22 < iVar9);
          }
        }
      } while( true );
    }
  }
LAB_002ce664:
  if (bVar12) {
    operator_delete__(puVar13);
  }
  return;
}


==================================================================

### FUNC 002ce964 (2564 bytes) name=FUN_002ce964

void FUN_002ce964(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  double *pdVar2;
  double *pdVar3;
  double *pdVar4;
  short *psVar5;
  short *psVar6;
  short *psVar7;
  short *psVar8;
  short *psVar9;
  short *psVar10;
  uint uVar11;
  uint uVar12;
  short sVar13;
  bool bVar14;
  double *pdVar15;
  double *pdVar16;
  double *pdVar17;
  double dVar18;
  short *psVar19;
  double *pdVar20;
  short *psVar21;
  short *psVar22;
  long lVar23;
  short *psVar24;
  long lVar25;
  uint uVar26;
  long lVar27;
  double *pdVar28;
  short *psVar29;
  undefined1 (*pauVar30) [16];
  uint uVar31;
  uint uVar32;
  uint uVar33;
  ulong uVar34;
  double *pdVar35;
  double *pdVar36;
  double *pdVar37;
  uint uVar38;
  uint uVar39;
  ulong uVar40;
  ulong uVar41;
  int iVar42;
  double dVar43;
  undefined1 auVar44 [16];
  double dVar45;
  long lVar46;
  double dVar47;
  double dVar48;
  double dVar49;
  long lVar50;
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  double adStack_408 [129];
  
                    /* try { // try from 002ce978 to 003ce97b has its CatchHandler @ 002ceabc */
                    /* try { // try from 002ce980 to 003ce98f has its CatchHandler @ 002ceb0c */
  psVar21 = *(short **)(param_2 + 0x10);
  uVar34 = *(ulong *)(param_2 + 0x50) >> 1;
  pdVar35 = *(double **)(param_3 + 0x10);
  pdVar37 = *(double **)(param_4 + 0x10);
  uVar41 = *(ulong *)(param_3 + 0x50) >> 3;
  if (*(int *)(param_4 + 8) < 2) {
    uVar40 = 0;
  }
  else {
    uVar40 = *(ulong *)(param_4 + 0x50) >> 3;
  }
                    /* try { // try from 002ce9d0 to 003ce9d3 has its CatchHandler @ 002ceb30 */
  uVar11 = (*(uint **)(param_2 + 0x40))[1];
  uVar12 = **(uint **)(param_2 + 0x40);
  bVar1 = (int)uVar11 <= *(int *)(param_4 + 0xc);
  iVar42 = uVar12 * 8;
  if ((pdVar37 != (double *)0x0) && (iVar42 = uVar12 * 0x28, bVar1)) {
    iVar42 = uVar12 * 8;
  }
  if ((ulong)(long)iVar42 < 0x409) {
    pdVar15 = adStack_408;
    bVar14 = false;
  }
  else {
                    /* try { // try from 002cea2c to 003cea2f has its CatchHandler @ 002ceb14 */
    pdVar15 = operator_new__((long)iVar42);
                    /* try { // try from 002cea34 to 003cea37 has its CatchHandler @ 002ceb30 */
                    /* try { // try from 002cea3c to 003cea3f has its CatchHandler @ 002ce804 */
    bVar14 = pdVar15 != adStack_408;
  }
  if (pdVar37 == (double *)0x0) {
LAB_002ceabc:
                    /* catch() { ... } // from try @ 002ce978 with catch @ 002ceabc */
    if (0 < (int)uVar11) {
      uVar33 = (uint)((ulong)pdVar15 >> 3) & 1;
      if (uVar12 < uVar33) {
        uVar33 = uVar12;
      }
      uVar39 = uVar12;
      if (9 < uVar12) {
        uVar39 = uVar33;
      }
      lVar46 = NEON_shl(uVar34,2);
                    /* try { // try from 002ceb08 to 003ceb0b has its CatchHandler @ 002ce804 */
                    /* catch() { ... } // from try @ 002ce908 with catch @ 002ceb0c
                       catch() { ... } // from try @ 002ce980 with catch @ 002ceb0c
                       catch() { ... } // from try @ 002ceaa0 with catch @ 002ceb0c */
      uVar33 = ((uVar12 - uVar39) - 8 >> 3) + 1;
                    /* catch() { ... } // from try @ 002cea2c with catch @ 002ceb14 */
      lVar50 = NEON_shl(uVar34 * 3,1);
                    /* catch() { ... } // from try @ 002ce9d0 with catch @ 002ceb30
                       catch() { ... } // from try @ 002cea34 with catch @ 002ceb30 */
                    /* catch() { ... } // from try @ 002ceb5c with catch @ 002ceb38
                       catch() { ... } // from try @ 002cec60 with catch @ 002ceb38
                       catch() { ... } // from try @ 002ced08 with catch @ 002ceb38 */
      iVar42 = uVar33 * 8;
                    /* try { // try from 002ceb5c to 003ceb5f has its CatchHandler @ 002ceb38 */
      lVar27 = 0;
      psVar22 = psVar21 + uVar34;
      uVar38 = uVar11 - 4;
      uVar31 = 0;
      psVar29 = psVar21;
      pdVar37 = pdVar35;
      do {
                    /* try { // try from 002cebe0 to 003cec23 has its CatchHandler @ 002ced0c */
        if (0 < (int)uVar12) {
          uVar32 = uVar39;
          if (uVar39 != 0) {
            *pdVar15 = (double)(int)*psVar29;
                    /* try { // try from 002cec50 to 003cec53 has its CatchHandler @ 002cecd8 */
                    /* try { // try from 002cec58 to 003cec5b has its CatchHandler @ 002ced0c */
                    /* try { // try from 002cec60 to 003cec63 has its CatchHandler @ 002ceb38 */
            if ((((uVar39 != 1) && (pdVar15[1] = (double)(int)*psVar22, uVar39 != 2)) &&
                (pdVar15[2] = (double)(int)*(short *)((long)psVar29 + lVar46), uVar39 != 3)) &&
               (((pdVar15[3] = (double)(int)*(short *)((long)psVar22 + lVar46), uVar39 != 4 &&
                 (pdVar15[4] = (double)(int)psVar29[uVar34 * 4], uVar39 != 5)) &&
                ((pdVar15[5] = (double)(int)psVar22[uVar34 * 4], uVar39 != 6 &&
                 (pdVar15[6] = (double)(int)psVar29[uVar34 * 6], uVar39 != 7)))))) {
              pdVar15[7] = (double)(int)psVar22[uVar34 * 6];
              if (uVar39 == 8) {
                uVar32 = 8;
              }
              else {
                pdVar15[8] = (double)(int)psVar29[uVar34 * 8];
                uVar32 = 9;
              }
            }
            if (uVar12 == uVar39) goto LAB_002cee98;
          }
          if (6 < (uVar12 - 1) - uVar39) {
                    /* try { // try from 002cecbc to 003cecbf has its CatchHandler @ 002ced0c */
            uVar26 = 0;
            psVar19 = psVar21 + lVar27 + uVar39 * uVar34 + uVar34;
            pauVar30 = (undefined1 (*) [16])(pdVar15 + uVar39);
            do {
                    /* catch() { ... } // from try @ 002cec50 with catch @ 002cecd8 */
              uVar26 = uVar26 + 1;
              psVar24 = psVar19 + -uVar34;
              sVar13 = *psVar19;
              psVar5 = psVar19 + uVar34;
                    /* try { // try from 002ced08 to 003ced0b has its CatchHandler @ 002ceb38 */
                    /* catch() { ... } // from try @ 002cebe0 with catch @ 002ced0c
                       catch() { ... } // from try @ 002cec58 with catch @ 002ced0c
                       catch() { ... } // from try @ 002cecbc with catch @ 002ced0c */
              psVar6 = psVar19 + uVar34 * 2;
                    /* catch() { ... } // from try @ 002ced38 with catch @ 002ced14
                       catch() { ... } // from try @ 002cee3c with catch @ 002ced14
                       catch() { ... } // from try @ 002ceee4 with catch @ 002ced14 */
              psVar7 = (short *)((long)psVar19 + lVar50);
              psVar8 = psVar19 + uVar34 * 4;
                    /* try { // try from 002ced38 to 003ced3b has its CatchHandler @ 002ced14 */
              psVar9 = psVar19 + uVar34 * 5;
              psVar10 = psVar19 + uVar34 * 6;
              psVar19 = psVar19 + uVar34 * 8;
              auVar53._0_8_ = (long)(int)*psVar24;
              auVar53._8_8_ = (long)(int)sVar13;
              auVar51._0_8_ = (long)(int)*psVar5;
              auVar51._8_8_ = (long)(int)*psVar6;
              auVar52._0_8_ = (long)(int)*psVar7;
              auVar52._8_8_ = (long)(int)*psVar8;
              auVar44._0_8_ = (long)(int)*psVar9;
              auVar44._8_8_ = (long)(int)*psVar10;
              auVar53 = NEON_scvtf(auVar53,8);
              *pauVar30 = auVar53;
              auVar51 = NEON_scvtf(auVar51,8);
              auVar52 = NEON_scvtf(auVar52,8);
              auVar44 = NEON_scvtf(auVar44,8);
              *(double *)((long)pauVar30[1] + 8) = auVar51._8_8_;
              *(double *)pauVar30[1] = auVar51._0_8_;
              *(double *)((long)pauVar30[2] + 8) = auVar52._8_8_;
              *(double *)pauVar30[2] = auVar52._0_8_;
              *(double *)((long)pauVar30[3] + 8) = auVar44._8_8_;
              *(double *)pauVar30[3] = auVar44._0_8_;
              pauVar30 = pauVar30 + 4;
            } while (uVar26 < uVar33);
            uVar32 = uVar32 + iVar42;
            if (iVar42 == uVar12 - uVar39) goto LAB_002cee98;
          }
                    /* try { // try from 002cedbc to 003cedff has its CatchHandler @ 002ceee8 */
          lVar23 = (long)(int)uVar32 * uVar34;
          pdVar15[(int)uVar32] = (double)(int)psVar21[lVar23 + lVar27];
          if ((int)(uVar32 + 1) < (int)uVar12) {
            lVar23 = lVar23 + uVar34;
            pdVar15[(int)(uVar32 + 1)] = (double)(int)psVar21[lVar27 + lVar23];
            if ((int)(uVar32 + 2) < (int)uVar12) {
              lVar23 = uVar34 + lVar23;
              pdVar15[(int)(uVar32 + 2)] = (double)(int)psVar21[lVar23 + lVar27];
              if ((int)(uVar32 + 3) < (int)uVar12) {
                lVar23 = uVar34 + lVar23;
                    /* try { // try from 002cee2c to 003cee2f has its CatchHandler @ 002ceeb4 */
                    /* try { // try from 002cee34 to 003cee37 has its CatchHandler @ 002ceee8 */
                pdVar15[(int)(uVar32 + 3)] = (double)(int)psVar21[lVar23 + lVar27];
                    /* try { // try from 002cee3c to 003cee3f has its CatchHandler @ 002ced14 */
                if ((int)(uVar32 + 4) < (int)uVar12) {
                  lVar23 = uVar34 + lVar23;
                  pdVar15[(int)(uVar32 + 4)] = (double)(int)psVar21[lVar23 + lVar27];
                  if ((int)(uVar32 + 5) < (int)uVar12) {
                    lVar23 = uVar34 + lVar23;
                    pdVar15[(int)(uVar32 + 5)] = (double)(int)psVar21[lVar23 + lVar27];
                    if ((int)(uVar32 + 6) < (int)uVar12) {
                      pdVar15[(int)(uVar32 + 6)] = (double)(int)psVar21[uVar34 + lVar23 + lVar27];
                    }
                  }
                }
              }
            }
          }
        }
LAB_002cee98:
                    /* try { // try from 002cee98 to 003cee9b has its CatchHandler @ 002ceee8 */
        uVar32 = uVar31;
        if ((int)uVar31 < (int)(uVar11 - 3)) {
                    /* catch() { ... } // from try @ 002cee2c with catch @ 002ceeb4 */
          pdVar28 = pdVar37;
          psVar19 = psVar29;
          do {
            dVar45 = 0.0;
            dVar18 = dVar45;
            dVar47 = dVar45;
            dVar48 = dVar45;
            if (0 < (int)uVar12) {
              dVar18 = 0.0;
              lVar23 = 0;
              dVar47 = 0.0;
              dVar48 = 0.0;
              psVar24 = psVar19;
              do {
                    /* try { // try from 002ceee4 to 003ceee7 has its CatchHandler @ 002ced14 */
                sVar13 = *psVar24;
                psVar5 = psVar24 + 1;
                    /* catch() { ... } // from try @ 002cedbc with catch @ 002ceee8
                       catch() { ... } // from try @ 002cee34 with catch @ 002ceee8
                       catch() { ... } // from try @ 002cee98 with catch @ 002ceee8 */
                psVar6 = psVar24 + 2;
                psVar7 = psVar24 + 3;
                    /* catch() { ... } // from try @ 002cef14 with catch @ 002ceef0
                       catch() { ... } // from try @ 002cf018 with catch @ 002ceef0
                       catch() { ... } // from try @ 002cf0c0 with catch @ 002ceef0 */
                psVar24 = psVar24 + uVar34;
                dVar43 = pdVar15[lVar23];
                lVar23 = lVar23 + 1;
                    /* try { // try from 002cef14 to 003cef17 has its CatchHandler @ 002ceef0 */
                dVar48 = dVar48 + dVar43 * (double)(int)sVar13;
                dVar47 = dVar47 + dVar43 * (double)(int)*psVar5;
                dVar18 = dVar18 + dVar43 * (double)(int)*psVar6;
                dVar45 = dVar45 + dVar43 * (double)(int)*psVar7;
              } while ((int)lVar23 < (int)uVar12);
            }
            pdVar16 = pdVar28 + 4;
            psVar19 = psVar19 + 4;
            pdVar28[1] = dVar47 * param_1;
            *pdVar28 = dVar48 * param_1;
            pdVar28[3] = dVar45 * param_1;
            pdVar28[2] = dVar18 * param_1;
            pdVar28 = pdVar16;
          } while (pdVar16 != pdVar35 + lVar27 + 4 + (ulong)(uVar38 >> 2) * 4);
          uVar32 = (int)lVar27 + 4 + (uVar38 >> 2) * 4;
        }
        if ((int)uVar32 < (int)uVar11) {
          lVar23 = (long)(int)uVar32;
          psVar19 = psVar21 + lVar23;
                    /* try { // try from 002cef98 to 003cefdb has its CatchHandler @ 002cf0c4 */
          pdVar28 = pdVar35 + lVar23;
          do {
            dVar18 = 0.0;
            if (0 < (int)uVar12) {
              lVar25 = 0;
              psVar24 = psVar19;
              do {
                sVar13 = *psVar24;
                psVar24 = psVar24 + uVar34;
                pdVar16 = pdVar15 + lVar25;
                lVar25 = lVar25 + 1;
                dVar18 = dVar18 + (double)(int)sVar13 * *pdVar16;
              } while ((int)lVar25 < (int)uVar12);
            }
            psVar19 = psVar19 + 1;
            *pdVar28 = dVar18 * param_1;
            pdVar28 = pdVar28 + 1;
          } while (psVar19 != psVar21 + lVar23 + 1 + (ulong)((uVar11 - 1) - uVar32));
        }
        uVar31 = uVar31 + 1;
        lVar27 = lVar27 + 1;
        pdVar35 = pdVar35 + uVar41;
        uVar38 = uVar38 - 1;
        psVar29 = psVar29 + 1;
        psVar22 = psVar22 + 1;
                    /* try { // try from 002cf008 to 003cf00b has its CatchHandler @ 002cf090 */
        pdVar37 = pdVar37 + uVar41 + 1;
      } while (uVar31 != uVar11);
    }
  }
  else {
    if (bVar1) {
      pdVar28 = (double *)0x0;
    }
    else {
      pdVar28 = pdVar15 + (int)uVar12;
      if (0 < (int)uVar12) {
        pdVar16 = pdVar28 + 3;
        do {
          dVar18 = *pdVar37;
          pdVar36 = pdVar16 + 4;
          pdVar37 = pdVar37 + uVar40;
          *pdVar16 = dVar18;
          pdVar16[-1] = dVar18;
          pdVar16[-2] = dVar18;
                    /* try { // try from 002ceaa0 to 003ceaa3 has its CatchHandler @ 002ceb0c */
          pdVar16[-3] = dVar18;
          pdVar16 = pdVar36;
        } while (pdVar36 != pdVar28 + (ulong)(uVar12 - 1) * 4 + 7);
      }
      if (uVar40 != 0) {
        uVar40 = 4;
      }
      pdVar37 = pdVar28;
      if (pdVar28 == (double *)0x0) goto LAB_002ceabc;
    }
    if (0 < (int)uVar11) {
      lVar27 = 0;
                    /* try { // try from 002cf074 to 003cf077 has its CatchHandler @ 002cf0c4 */
      uVar39 = uVar11 - 4;
      lVar46 = NEON_shl(uVar41,3);
      uVar33 = 0;
                    /* catch() { ... } // from try @ 002cf008 with catch @ 002cf090 */
      psVar29 = psVar21;
      pdVar36 = pdVar35;
      pdVar16 = pdVar37;
      if (pdVar28 == (double *)0x0) goto LAB_002cf2c4;
      do {
        if (0 < (int)uVar12) {
                    /* try { // try from 002cf0c0 to 003cf0c3 has its CatchHandler @ 002ceef0 */
                    /* catch() { ... } // from try @ 002cef98 with catch @ 002cf0c4
                       catch() { ... } // from try @ 002cf010 with catch @ 002cf0c4
                       catch() { ... } // from try @ 002cf074 with catch @ 002cf0c4 */
          lVar50 = 0;
          psVar22 = psVar29;
          pdVar20 = pdVar28;
          do {
                    /* catch() { ... } // from try @ 002cf0f0 with catch @ 002cf0cc
                       catch() { ... } // from try @ 002cf1f4 with catch @ 002cf0cc
                       catch() { ... } // from try @ 002cf29c with catch @ 002cf0cc */
            sVar13 = *psVar22;
            psVar22 = psVar22 + uVar34;
            dVar18 = *pdVar20;
            pdVar20 = pdVar20 + uVar40;
            pdVar15[lVar50] = (double)(int)sVar13 - dVar18;
            lVar50 = lVar50 + 1;
                    /* try { // try from 002cf0f0 to 003cf0f3 has its CatchHandler @ 002cf0cc */
          } while ((int)lVar50 < (int)uVar12);
        }
        while( true ) {
          uVar31 = uVar33;
          if ((int)uVar33 < (int)(uVar11 - 3)) {
            lVar50 = lVar27 << 3;
            pdVar20 = pdVar35;
            psVar22 = psVar29;
            do {
              pdVar17 = pdVar28;
              if (pdVar28 == (double *)0x0) {
                pdVar17 = (double *)((long)pdVar37 + lVar50);
              }
              dVar45 = 0.0;
              dVar18 = dVar45;
              dVar47 = dVar45;
              dVar48 = dVar45;
              if (0 < (int)uVar12) {
                dVar18 = 0.0;
                lVar23 = 0;
                dVar47 = 0.0;
                dVar48 = 0.0;
                psVar19 = psVar22;
                do {
                  sVar13 = *psVar19;
                  psVar24 = psVar19 + 1;
                  psVar5 = psVar19 + 2;
                  psVar6 = psVar19 + 3;
                  psVar19 = psVar19 + uVar34;
                  pdVar2 = pdVar17 + 3;
                  dVar49 = *pdVar17;
                  pdVar3 = pdVar17 + 1;
                    /* try { // try from 002cf174 to 003cf1b7 has its CatchHandler @ 002cf2a0 */
                  pdVar4 = pdVar17 + 2;
                  pdVar17 = pdVar17 + uVar40;
                  dVar43 = pdVar15[lVar23];
                  lVar23 = lVar23 + 1;
                  dVar48 = dVar48 + dVar43 * ((double)(int)sVar13 - dVar49);
                  dVar47 = dVar47 + dVar43 * ((double)(int)*psVar24 - *pdVar3);
                  dVar18 = dVar18 + dVar43 * ((double)(int)*psVar5 - *pdVar4);
                  dVar45 = dVar45 + dVar43 * ((double)(int)*psVar6 - *pdVar2);
                } while ((int)lVar23 < (int)uVar12);
              }
              lVar50 = lVar50 + 0x20;
              psVar22 = psVar22 + 4;
              pdVar20[1] = dVar47 * param_1;
              *pdVar20 = dVar48 * param_1;
                    /* try { // try from 002cf1e4 to 003cf1e7 has its CatchHandler @ 002cf26c */
              pdVar20[3] = dVar45 * param_1;
              pdVar20[2] = dVar18 * param_1;
              pdVar20 = pdVar20 + 4;
                    /* try { // try from 002cf1ec to 003cf1ef has its CatchHandler @ 002cf2a0 */
            } while (lVar50 != (lVar27 + 4 + (ulong)(uVar39 >> 2) * 4) * 8);
                    /* try { // try from 002cf1f4 to 003cf1f7 has its CatchHandler @ 002cf0cc */
            uVar31 = (int)lVar27 + 4 + (uVar39 >> 2) * 4;
          }
          if ((int)uVar31 < (int)uVar11) {
            lVar23 = (long)(int)uVar31;
            lVar50 = lVar23 << 3;
            psVar22 = psVar21 + lVar23;
            do {
              pdVar20 = pdVar28;
              if (pdVar28 == (double *)0x0) {
                pdVar20 = (double *)((long)pdVar37 + lVar50);
              }
              dVar18 = 0.0;
              if (0 < (int)uVar12) {
                lVar25 = 0;
                psVar19 = psVar22;
                do {
                  sVar13 = *psVar19;
                  psVar19 = psVar19 + uVar34;
                  dVar47 = *pdVar20;
                    /* try { // try from 002cf250 to 003cf253 has its CatchHandler @ 002cf2a0 */
                  pdVar20 = pdVar20 + uVar40;
                  pdVar17 = pdVar15 + lVar25;
                  lVar25 = lVar25 + 1;
                  dVar18 = dVar18 + ((double)(int)sVar13 - dVar47) * *pdVar17;
                    /* catch() { ... } // from try @ 002cf1e4 with catch @ 002cf26c */
                } while ((int)lVar25 < (int)uVar12);
              }
              psVar22 = psVar22 + 1;
              *(double *)((long)pdVar36 + lVar50) = dVar18 * param_1;
              lVar50 = lVar50 + 8;
            } while (lVar50 != (lVar23 + 1 + (ulong)((uVar11 - 1) - uVar31)) * 8);
          }
          uVar33 = uVar33 + 1;
          lVar27 = lVar27 + 1;
          uVar39 = uVar39 - 1;
                    /* try { // try from 002cf29c to 003cf29f has its CatchHandler @ 002cf0cc */
          psVar29 = psVar29 + 1;
                    /* catch() { ... } // from try @ 002cf174 with catch @ 002cf2a0
                       catch() { ... } // from try @ 002cf1ec with catch @ 002cf2a0
                       catch() { ... } // from try @ 002cf250 with catch @ 002cf2a0 */
          pdVar36 = (double *)((long)pdVar36 + lVar46);
          pdVar16 = pdVar16 + 1;
                    /* catch() { ... } // from try @ 002cf2f8 with catch @ 002cf2b0
                       catch() { ... } // from try @ 002cf594 with catch @ 002cf2b0
                       catch() { ... } // from try @ 002cfcf4 with catch @ 002cf2b0
                       catch() { ... } // from try @ 002d065c with catch @ 002cf2b0 */
          pdVar35 = (double *)((long)pdVar35 + lVar46 + 8);
          if (uVar33 == uVar11) goto LAB_002cf010;
          if (pdVar28 != (double *)0x0) break;
LAB_002cf2c4:
          pdVar20 = pdVar28;
          psVar22 = psVar29;
          pdVar17 = pdVar16;
          if (0 < (int)uVar12) {
            do {
              pdVar15[(long)pdVar20] = (double)(int)*psVar22 - *pdVar17;
              pdVar20 = (double *)((long)pdVar20 + 1);
                    /* try { // try from 002cf2f8 to 003cf317 has its CatchHandler @ 002cf2b0 */
              psVar22 = psVar22 + uVar34;
              pdVar17 = pdVar17 + uVar40;
            } while ((int)pdVar20 < (int)uVar12);
          }
        }
      } while( true );
    }
  }
LAB_002cf010:
                    /* try { // try from 002cf010 to 003cf013 has its CatchHandler @ 002cf0c4 */
  if (bVar14) {
                    /* try { // try from 002cf018 to 003cf01b has its CatchHandler @ 002ceef0 */
    operator_delete__(pdVar15);
  }
  return;
}


==================================================================

### FUNC 002cf388 (2516 bytes) name=FUN_002cf388

void FUN_002cf388(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  float *pfVar2;
  float *pfVar3;
  ushort *puVar4;
  ushort *puVar5;
  ushort *puVar6;
  ushort *puVar7;
  ushort *puVar8;
  ushort *puVar9;
  uint uVar10;
  uint uVar11;
  ushort uVar12;
  float *pfVar13;
  bool bVar14;
  float *pfVar15;
  float *pfVar16;
  float *pfVar17;
  long lVar18;
  ushort *puVar19;
  ushort *puVar20;
  float *pfVar21;
  long lVar22;
  ushort *puVar23;
  long lVar24;
  long lVar25;
  float *pfVar26;
  ushort *puVar27;
  uint uVar28;
  uint uVar29;
  uint uVar30;
  uint uVar31;
  ulong uVar32;
  undefined8 *puVar33;
  ushort *puVar34;
  float *pfVar35;
  undefined8 *puVar36;
  uint uVar37;
  uint uVar38;
  undefined8 *puVar39;
  ulong uVar40;
  ulong uVar41;
  int iVar42;
  double dVar43;
  undefined1 auVar44 [16];
  float fVar45;
  double dVar46;
  long lVar47;
  long lVar48;
  double dVar49;
  double dVar50;
  double dVar51;
  long lVar52;
  undefined1 auVar53 [16];
  float afStack_408 [258];
  
  puVar34 = *(ushort **)(param_2 + 0x10);
  uVar32 = *(ulong *)(param_2 + 0x50) >> 1;
  puVar33 = *(undefined8 **)(param_3 + 0x10);
  uVar40 = *(ulong *)(param_3 + 0x50) >> 2;
  pfVar35 = *(float **)(param_4 + 0x10);
  if (*(int *)(param_4 + 8) < 2) {
    uVar41 = 0;
  }
  else {
    uVar41 = *(ulong *)(param_4 + 0x50) >> 2;
  }
  uVar10 = (*(uint **)(param_2 + 0x40))[1];
  uVar11 = **(uint **)(param_2 + 0x40);
  bVar1 = (int)uVar10 <= *(int *)(param_4 + 0xc);
  iVar42 = uVar11 * 4;
                    /* try { // try from 002cf41c to 003cf41f has its CatchHandler @ 002d0688 */
  if ((pfVar35 != (float *)0x0) && (iVar42 = uVar11 * 0x14, bVar1)) {
    iVar42 = uVar11 * 4;
  }
  if ((ulong)(long)iVar42 < 0x409) {
    pfVar15 = afStack_408;
    bVar14 = false;
  }
  else {
    pfVar15 = operator_new__((long)iVar42);
    bVar14 = pfVar15 != afStack_408;
  }
  if (pfVar35 == (float *)0x0) {
LAB_002cf4d8:
    if (0 < (int)uVar10) {
      lVar18 = uVar40 * 4;
      uVar30 = -((uint)((ulong)pfVar15 >> 2) & 3) & 3;
      lVar48 = NEON_shl(uVar32,2);
                    /* try { // try from 002cf508 to 003cf55b has its CatchHandler @ 002d07d8 */
      if (uVar11 < uVar30) {
        uVar30 = uVar11;
      }
      uVar31 = uVar11;
      if (9 < uVar11) {
        uVar31 = uVar30;
      }
      lVar52 = NEON_shl(uVar32 * 3,1);
      uVar30 = ((uVar11 - uVar31) - 8 >> 3) + 1;
      lVar47 = NEON_shl(uVar32,4);
                    /* try { // try from 002cf578 to 003cf57b has its CatchHandler @ 002d0700 */
                    /* try { // try from 002cf580 to 003cf583 has its CatchHandler @ 002d07d8 */
      iVar42 = uVar30 * 8;
                    /* try { // try from 002cf594 to 003cf5a7 has its CatchHandler @ 002cf2b0 */
      lVar25 = 0;
      uVar37 = uVar10 - 4;
      puVar19 = puVar34 + uVar32;
      uVar29 = 0;
                    /* try { // try from 002cf600 to 003cf603 has its CatchHandler @ 002d07d8 */
      puVar27 = puVar34;
      puVar36 = puVar33;
      do {
        if (0 < (int)uVar11) {
          uVar28 = uVar31;
          if (uVar31 != 0) {
            *pfVar15 = (float)*puVar27;
                    /* try { // try from 002cf680 to 003cf6c3 has its CatchHandler @ 002d07e0 */
            if ((((uVar31 != 1) && (pfVar15[1] = (float)*puVar19, uVar31 != 2)) &&
                (pfVar15[2] = (float)*(ushort *)((long)puVar27 + lVar48), uVar31 != 3)) &&
               (((pfVar15[3] = (float)*(ushort *)((long)puVar19 + lVar48), uVar31 != 4 &&
                 (pfVar15[4] = (float)puVar27[uVar32 * 4], uVar31 != 5)) &&
                ((pfVar15[5] = (float)puVar19[uVar32 * 4], uVar31 != 6 &&
                 (pfVar15[6] = (float)puVar27[uVar32 * 6], uVar31 != 7)))))) {
              pfVar15[7] = (float)puVar19[uVar32 * 6];
              if (uVar31 == 8) {
                uVar28 = 8;
              }
              else {
                pfVar15[8] = (float)*(ushort *)((long)puVar27 + lVar47);
                uVar28 = 9;
              }
            }
            if (uVar11 == uVar31) goto LAB_002cf890;
          }
          if (6 < (uVar11 - 1) - uVar31) {
            uVar38 = 0;
                    /* try { // try from 002cf6f0 to 003cf6f3 has its CatchHandler @ 002d06b0 */
                    /* try { // try from 002cf6f8 to 003cf6fb has its CatchHandler @ 002d07e0 */
            puVar20 = puVar34 + lVar25 + uVar31 * uVar32 + uVar32;
            pfVar35 = pfVar15 + uVar31;
            do {
                    /* try { // try from 002cf700 to 003cf8e7 has its CatchHandler @ 002d07d8 */
              uVar38 = uVar38 + 1;
              puVar23 = puVar20 + -uVar32;
              uVar12 = *puVar20;
              puVar4 = puVar20 + uVar32;
              puVar5 = puVar20 + uVar32 * 2;
              puVar6 = (ushort *)((long)puVar20 + lVar52);
              puVar7 = puVar20 + uVar32 * 4;
              puVar8 = puVar20 + uVar32 * 5;
              puVar9 = puVar20 + uVar32 * 6;
              puVar20 = (ushort *)((long)puVar20 + lVar47);
              auVar53._2_2_ = 0;
              auVar53._0_2_ = *puVar23;
              auVar53._4_2_ = uVar12;
              auVar53._6_2_ = 0;
              auVar53._8_2_ = *puVar4;
              auVar53._10_2_ = 0;
              auVar53._12_2_ = *puVar5;
              auVar53._14_2_ = 0;
              auVar44._2_2_ = 0;
              auVar44._0_2_ = *puVar6;
              auVar44._4_2_ = *puVar7;
              auVar44._6_2_ = 0;
              auVar44._8_2_ = *puVar8;
              auVar44._10_2_ = 0;
              auVar44._12_2_ = *puVar9;
              auVar44._14_2_ = 0;
              auVar53 = NEON_scvtf(auVar53,4);
              auVar44 = NEON_scvtf(auVar44,4);
              *(long *)(pfVar35 + 2) = auVar53._8_8_;
              *(long *)pfVar35 = auVar53._0_8_;
              *(long *)(pfVar35 + 6) = auVar44._8_8_;
              *(long *)(pfVar35 + 4) = auVar44._0_8_;
              pfVar35 = pfVar35 + 8;
            } while (uVar38 < uVar30);
            uVar28 = uVar28 + iVar42;
            if (iVar42 == uVar11 - uVar31) goto LAB_002cf890;
          }
          lVar22 = (long)(int)uVar28 * uVar32;
          pfVar15[(int)uVar28] = (float)puVar34[lVar22 + lVar25];
          if ((int)(uVar28 + 1) < (int)uVar11) {
            lVar22 = lVar22 + uVar32;
            pfVar15[(int)(uVar28 + 1)] = (float)puVar34[lVar25 + lVar22];
            if ((int)(uVar28 + 2) < (int)uVar11) {
              lVar22 = uVar32 + lVar22;
              pfVar15[(int)(uVar28 + 2)] = (float)puVar34[lVar22 + lVar25];
              if ((int)(uVar28 + 3) < (int)uVar11) {
                lVar22 = uVar32 + lVar22;
                pfVar15[(int)(uVar28 + 3)] = (float)puVar34[lVar22 + lVar25];
                if ((int)(uVar28 + 4) < (int)uVar11) {
                  lVar22 = uVar32 + lVar22;
                  pfVar15[(int)(uVar28 + 4)] = (float)puVar34[lVar22 + lVar25];
                  if ((int)(uVar28 + 5) < (int)uVar11) {
                    lVar22 = uVar32 + lVar22;
                    pfVar15[(int)(uVar28 + 5)] = (float)puVar34[lVar22 + lVar25];
                    if ((int)(uVar28 + 6) < (int)uVar11) {
                      pfVar15[(int)(uVar28 + 6)] = (float)puVar34[uVar32 + lVar22 + lVar25];
                    }
                  }
                }
              }
            }
          }
        }
LAB_002cf890:
        uVar28 = uVar29;
        if ((int)uVar29 < (int)(uVar10 - 3)) {
          puVar20 = puVar27;
          puVar39 = puVar36;
          do {
            dVar46 = 0.0;
            dVar49 = dVar46;
            dVar50 = dVar46;
            dVar51 = dVar46;
            if (0 < (int)uVar11) {
              dVar49 = 0.0;
              lVar22 = 0;
              dVar50 = 0.0;
              dVar51 = 0.0;
              puVar23 = puVar20;
              do {
                uVar12 = *puVar23;
                puVar4 = puVar23 + 1;
                puVar5 = puVar23 + 2;
                puVar6 = puVar23 + 3;
                puVar23 = puVar23 + uVar32;
                pfVar35 = pfVar15 + lVar22;
                lVar22 = lVar22 + 1;
                dVar43 = (double)*pfVar35;
                dVar51 = dVar51 + dVar43 * (double)uVar12;
                dVar50 = dVar50 + dVar43 * (double)*puVar4;
                dVar49 = dVar49 + dVar43 * (double)*puVar5;
                dVar46 = dVar46 + dVar43 * (double)*puVar6;
              } while ((int)lVar22 < (int)uVar11);
            }
            puVar20 = puVar20 + 4;
            puVar39[1] = CONCAT44((float)(dVar46 * param_1),(float)(dVar49 * param_1));
            *puVar39 = CONCAT44((float)(dVar50 * param_1),(float)(dVar51 * param_1));
            puVar39 = puVar39 + 2;
          } while (puVar20 != puVar34 + lVar25 + 4 + (ulong)(uVar37 >> 2) * 4);
          uVar28 = (int)lVar25 + 4 + (uVar37 >> 2) * 4;
        }
        if ((int)uVar28 < (int)uVar10) {
          lVar22 = (long)(int)uVar28;
          puVar20 = puVar34 + lVar22;
          pfVar35 = (float *)((long)puVar33 + lVar22 * 4);
          do {
                    /* try { // try from 002cf994 to 003cf997 has its CatchHandler @ 002d0794 */
            dVar49 = 0.0;
            if (0 < (int)uVar11) {
              lVar24 = 0;
              puVar23 = puVar20;
              do {
                uVar12 = *puVar23;
                puVar23 = puVar23 + uVar32;
                pfVar26 = pfVar15 + lVar24;
                lVar24 = lVar24 + 1;
                dVar49 = dVar49 + (double)uVar12 * (double)*pfVar26;
              } while ((int)lVar24 < (int)uVar11);
            }
            puVar20 = puVar20 + 1;
            *pfVar35 = (float)(dVar49 * param_1);
            pfVar35 = pfVar35 + 1;
          } while (puVar20 != puVar34 + lVar22 + 1 + (ulong)((uVar10 - 1) - uVar28));
        }
        uVar29 = uVar29 + 1;
        lVar25 = lVar25 + 1;
        uVar37 = uVar37 - 1;
        puVar27 = puVar27 + 1;
        puVar19 = puVar19 + 1;
        puVar33 = (undefined8 *)((long)puVar33 + lVar18);
        puVar36 = (undefined8 *)((long)puVar36 + lVar18 + 4);
      } while (uVar29 != uVar10);
    }
  }
  else {
    if (bVar1) {
      pfVar26 = (float *)0x0;
    }
    else {
      pfVar26 = pfVar15 + (int)uVar11;
      if (0 < (int)uVar11) {
        pfVar16 = pfVar26 + 3;
        do {
          fVar45 = *pfVar35;
          pfVar17 = pfVar16 + 4;
          pfVar35 = pfVar35 + uVar41;
          *pfVar16 = fVar45;
          pfVar16[-1] = fVar45;
                    /* try { // try from 002cf4b8 to 003cf4bb has its CatchHandler @ 002d0808 */
          pfVar16[-2] = fVar45;
          pfVar16[-3] = fVar45;
          pfVar16 = pfVar17;
        } while (pfVar17 != pfVar26 + (ulong)(uVar11 - 1) * 4 + 7);
      }
      if (uVar41 != 0) {
        uVar41 = 4;
      }
      pfVar35 = pfVar26;
      if (pfVar26 == (float *)0x0) goto LAB_002cf4d8;
    }
    if (0 < (int)uVar10) {
      lVar18 = 0;
                    /* try { // try from 002cfa6c to 003cfa6f has its CatchHandler @ 002d0784 */
      uVar31 = uVar10 - 4;
      lVar48 = NEON_shl(uVar40,2);
      uVar30 = 0;
      puVar27 = puVar34;
      pfVar16 = pfVar35;
      if (pfVar26 == (float *)0x0) goto LAB_002cfcb8;
      do {
        if (0 < (int)uVar11) {
          lVar25 = 0;
          puVar19 = puVar27;
          pfVar17 = pfVar26;
          do {
            uVar12 = *puVar19;
            puVar19 = puVar19 + uVar32;
            fVar45 = *pfVar17;
            pfVar17 = pfVar17 + uVar41;
            pfVar15[lVar25] = (float)uVar12 - fVar45;
            lVar25 = lVar25 + 1;
          } while ((int)lVar25 < (int)uVar11);
        }
        while( true ) {
          uVar29 = uVar30;
          if ((int)uVar30 < (int)(uVar10 - 3)) {
            lVar25 = lVar18 << 2;
            puVar19 = puVar27;
            do {
              pfVar17 = pfVar26;
              if (pfVar26 == (float *)0x0) {
                pfVar17 = (float *)((long)pfVar35 + lVar25);
              }
              dVar46 = 0.0;
              dVar49 = dVar46;
              dVar50 = dVar46;
              dVar51 = dVar46;
              if (0 < (int)uVar11) {
                dVar49 = 0.0;
                lVar47 = 0;
                dVar50 = 0.0;
                dVar51 = 0.0;
                puVar20 = puVar19;
                do {
                  uVar12 = *puVar20;
                  puVar23 = puVar20 + 1;
                  puVar4 = puVar20 + 2;
                  puVar5 = puVar20 + 3;
                    /* try { // try from 002cfb3c to 003cfb7f has its CatchHandler @ 002d0724 */
                  puVar20 = puVar20 + uVar32;
                  pfVar21 = pfVar17 + 3;
                  fVar45 = *pfVar17;
                  pfVar2 = pfVar17 + 1;
                  pfVar3 = pfVar17 + 2;
                  pfVar17 = pfVar17 + uVar41;
                  pfVar13 = pfVar15 + lVar47;
                  lVar47 = lVar47 + 1;
                  dVar43 = (double)*pfVar13;
                  dVar51 = dVar51 + dVar43 * (double)((float)uVar12 - fVar45);
                  dVar50 = dVar50 + dVar43 * (double)((float)*puVar23 - *pfVar2);
                  dVar49 = dVar49 + dVar43 * (double)((float)*puVar4 - *pfVar3);
                  dVar46 = dVar46 + dVar43 * (double)((float)*puVar5 - *pfVar21);
                } while ((int)lVar47 < (int)uVar11);
              }
                    /* try { // try from 002cfbac to 003cfbaf has its CatchHandler @ 002d07f8 */
              puVar36 = (undefined8 *)((long)puVar33 + lVar25);
                    /* try { // try from 002cfbb4 to 003cfbc3 has its CatchHandler @ 002d0724 */
              lVar25 = lVar25 + 0x10;
              puVar19 = puVar19 + 4;
              puVar36[1] = CONCAT44((float)(dVar46 * param_1),(float)(dVar49 * param_1));
              *puVar36 = CONCAT44((float)(dVar50 * param_1),(float)(dVar51 * param_1));
            } while (lVar25 != (lVar18 + 4 + (ulong)(uVar31 >> 2) * 4) * 4);
            uVar29 = (int)lVar18 + 4 + (uVar31 >> 2) * 4;
          }
          if ((int)uVar29 < (int)uVar10) {
            lVar47 = (long)(int)uVar29;
            lVar25 = lVar47 << 2;
                    /* try { // try from 002cfc0c to 003cfc0f has its CatchHandler @ 002d07d0 */
            puVar19 = puVar34 + lVar47;
            do {
              pfVar17 = pfVar26;
              if (pfVar26 == (float *)0x0) {
                pfVar17 = (float *)((long)pfVar35 + lVar25);
              }
              dVar49 = 0.0;
              if (0 < (int)uVar11) {
                lVar52 = 0;
                puVar20 = puVar19;
                do {
                  uVar12 = *puVar20;
                  puVar20 = puVar20 + uVar32;
                  fVar45 = *pfVar17;
                  pfVar17 = pfVar17 + uVar41;
                  pfVar21 = pfVar15 + lVar52;
                  lVar52 = lVar52 + 1;
                    /* try { // try from 002cfc68 to 003cfc6b has its CatchHandler @ 002d07b8 */
                  dVar49 = dVar49 + (double)((float)uVar12 - fVar45) * (double)*pfVar21;
                } while ((int)lVar52 < (int)uVar11);
              }
                    /* try { // try from 002cfc70 to 003cfc73 has its CatchHandler @ 002d07d0 */
              puVar19 = puVar19 + 1;
                    /* try { // try from 002cfc78 to 003cfc7b has its CatchHandler @ 002d0784 */
              *(float *)((long)puVar33 + lVar25) = (float)(dVar49 * param_1);
              lVar25 = lVar25 + 4;
            } while (lVar25 != (lVar47 + 1 + (ulong)((uVar10 - 1) - uVar29)) * 4);
          }
          uVar30 = uVar30 + 1;
          lVar18 = lVar18 + 1;
          uVar31 = uVar31 - 1;
          puVar27 = puVar27 + 1;
          pfVar16 = pfVar16 + 1;
          puVar33 = (undefined8 *)((long)puVar33 + lVar48);
          if (uVar30 == uVar10) goto LAB_002cfa0c;
          if (pfVar26 != (float *)0x0) break;
LAB_002cfcb8:
          pfVar17 = pfVar26;
          puVar19 = puVar27;
          pfVar21 = pfVar16;
          if (0 < (int)uVar11) {
            do {
                    /* try { // try from 002cfccc to 003cfce3 has its CatchHandler @ 002d07d8 */
              pfVar15[(long)pfVar17] = (float)*puVar19 - *pfVar21;
              pfVar17 = (float *)((long)pfVar17 + 1);
              puVar19 = puVar19 + uVar32;
              pfVar21 = pfVar21 + uVar41;
            } while ((int)pfVar17 < (int)uVar11);
          }
        }
      } while( true );
    }
  }
LAB_002cfa0c:
  if (bVar14) {
    operator_delete__(pfVar15);
  }
  return;
}


==================================================================

### FUNC 002cfd7c (1852 bytes) name=FUN_002cfd7c

void FUN_002cfd7c(double param_1,long param_2,long param_3,long param_4)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  long lVar12;
  long lVar13;
  bool bVar14;
  double *pdVar15;
  float *pfVar16;
  long lVar17;
  ulong uVar18;
  long lVar19;
  undefined8 *puVar20;
  float *pfVar21;
  int iVar22;
  double *pdVar23;
  double *pdVar24;
  uint uVar25;
  double *pdVar26;
  double *pdVar27;
  uint uVar28;
  float *pfVar29;
  double *pdVar30;
  int iVar31;
  int iVar32;
  int iVar33;
  float *pfVar34;
  double *pdVar35;
  ulong uVar36;
  ulong uVar37;
  double *pdVar38;
  undefined8 uVar39;
  undefined8 uVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  ulong uVar44;
  long lVar45;
  int iVar46;
  long lVar47;
  double local_438;
  double local_430;
  double local_428;
  double local_420;
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
                    /* try { // try from 002cfd94 to 003cfdd7 has its CatchHandler @ 002d087c */
  pfVar34 = *(float **)(param_2 + 0x10);
  uVar36 = *(ulong *)(param_3 + 0x50) >> 3;
  pdVar38 = *(double **)(param_3 + 0x10);
  pdVar35 = *(double **)(param_4 + 0x10);
  uVar44 = *(ulong *)(param_2 + 0x50) >> 2;
  if (*(int *)(param_4 + 8) < 2) {
    uVar37 = 0;
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    iVar8 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar37 = *(ulong *)(param_4 + 0x50) >> 3;
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    iVar8 = **(int **)(param_2 + 0x40);
  }
  if (pdVar35 == (double *)0x0) {
    if (0 < iVar8) {
      uVar10 = uVar7 - 4 >> 2;
      uVar6 = (uVar10 + 1) * 4;
                    /* try { // try from 002d038c to 003d038f has its CatchHandler @ 002d0660 */
      if ((int)(uVar7 - 3) < 1) {
        uVar6 = 0;
      }
                    /* try { // try from 002d0394 to 003d0397 has its CatchHandler @ 002d07f0 */
                    /* try { // try from 002d039c to 003d039f has its CatchHandler @ 002d07d8 */
      uVar37 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar6 << 2;
      iVar33 = 0;
      do {
        pfVar29 = pfVar34 + 1;
        pdVar35 = pdVar38;
        iVar32 = iVar33;
        do {
          dVar42 = 0.0;
          if (0 < (int)(uVar7 - 3)) {
            pfVar16 = pfVar29;
            pfVar21 = pfVar34;
            do {
                    /* try { // try from 002d03f0 to 003d03f3 has its CatchHandler @ 002d078c */
              pfVar5 = pfVar16 + 4;
                    /* try { // try from 002d040c to 003d046b has its CatchHandler @ 002d07d8 */
              dVar42 = dVar42 + (double)pfVar21[1] * (double)*pfVar16 +
                                (double)pfVar16[-1] * (double)*pfVar21 +
                                (double)pfVar16[1] * (double)pfVar21[2] +
                                (double)pfVar16[2] * (double)pfVar21[3];
              pfVar16 = pfVar5;
              pfVar21 = pfVar21 + 4;
            } while (pfVar5 != pfVar29 + (ulong)uVar10 * 4 + 4);
          }
          if ((int)uVar6 < (int)uVar7) {
            lVar17 = 0;
            do {
              lVar45 = lVar17 + uVar37;
              lVar47 = lVar17 + (uVar37 - 4);
              lVar17 = lVar17 + 4;
              dVar42 = dVar42 + (double)*(float *)((long)pfVar29 + lVar47) *
                                (double)*(float *)((long)pfVar34 + lVar45);
            } while (lVar17 != ((ulong)((uVar7 - 1) - uVar6) + 1) * 4);
          }
          iVar32 = iVar32 + 1;
          pfVar29 = pfVar29 + uVar44;
          *pdVar35 = dVar42 * param_1;
          pdVar35 = pdVar35 + 1;
        } while (iVar32 < iVar8);
        iVar33 = iVar33 + 1;
        pdVar38 = pdVar38 + uVar36 + 1;
        pfVar34 = pfVar34 + uVar44;
      } while (iVar33 != iVar8);
    }
  }
  else {
    uVar18 = -(ulong)(uVar7 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar7 << 3;
    pdVar15 = adStack_408;
    lVar17 = 0x20;
    if (uVar6 != uVar7) {
      lVar17 = 0;
    }
                    /* try { // try from 002cfe04 to 003cfe07 has its CatchHandler @ 002d082c */
    local_418 = pdVar15;
    local_410 = 0x408;
                    /* try { // try from 002cfe0c to 003cfe0f has its CatchHandler @ 002d087c */
                    /* try { // try from 002cfe14 to 003cfe67 has its CatchHandler @ 002d07d8 */
    if (uVar18 < 0x409) {
      local_410 = uVar18;
      bVar14 = false;
    }
    else {
      local_418 = operator_new__(uVar18);
      bVar14 = local_418 != pdVar15;
      local_410 = uVar18;
      pdVar15 = local_418;
    }
    if (0 < iVar8) {
      uVar10 = (uint)((ulong)pdVar15 >> 3) & 1;
      if (uVar7 < uVar10) {
        uVar10 = uVar7;
      }
      iVar32 = uVar7 - uVar10;
      uVar9 = uVar7 - 4 >> 2;
      uVar4 = (iVar32 - 4U >> 2) + 1;
      lVar47 = NEON_shl((ulong)uVar10,3);
      uVar11 = (uVar7 - 1) - uVar10;
      lVar45 = NEON_shl((ulong)uVar10,2);
      iVar46 = uVar4 * 4;
      iVar33 = 0;
      do {
                    /* try { // try from 002cfef8 to 003cff3b has its CatchHandler @ 002d0884 */
        if ((int)uVar6 < (int)uVar7) {
          if (0 < (int)uVar7) {
            if ((pdVar15 < pdVar35 + 1 && pdVar35 < pdVar15 + uVar7) || (uVar7 < 9)) {
              lVar19 = 0;
              do {
                pdVar15[lVar19] = (double)pfVar34[lVar19] - *pdVar35;
                lVar19 = lVar19 + 1;
                    /* try { // try from 002d031c to 003d035f has its CatchHandler @ 002d07f0 */
              } while ((int)lVar19 < (int)uVar7);
            }
            else {
              if (uVar10 != 0) {
                *pdVar15 = (double)*pfVar34 - *pdVar35;
              }
              uVar25 = (uint)(uVar10 != 0);
              if (2 < uVar11) {
                dVar42 = *pdVar35;
                uVar28 = 0;
                    /* try { // try from 002d023c to 003d023f has its CatchHandler @ 002d06d8 */
                puVar20 = (undefined8 *)((long)pfVar34 + lVar45);
                pdVar23 = (double *)((long)pdVar15 + lVar47);
                do {
                  uVar40 = puVar20[1];
                  uVar39 = *puVar20;
                    /* try { // try from 002d0244 to 003d0247 has its CatchHandler @ 002d07e8 */
                    /* try { // try from 002d024c to 003d029f has its CatchHandler @ 002d07d8 */
                  uVar28 = uVar28 + 1;
                  pdVar23[1] = (double)(float)((ulong)uVar39 >> 0x20) - dVar42;
                  *pdVar23 = (double)(float)uVar39 - dVar42;
                  pdVar23[3] = (double)(float)((ulong)uVar40 >> 0x20) - dVar42;
                  pdVar23[2] = (double)(float)uVar40 - dVar42;
                  puVar20 = puVar20 + 2;
                  pdVar23 = pdVar23 + 4;
                } while (uVar28 < uVar4);
                uVar25 = uVar25 + iVar46;
                if (iVar46 == iVar32) goto LAB_002d0044;
              }
              iVar31 = uVar25 + 1;
              pdVar15[(int)uVar25] = (double)pfVar34[(int)uVar25] - *pdVar35;
              if (iVar31 < (int)uVar7) {
                iVar22 = uVar25 + 2;
                pdVar15[iVar31] = (double)pfVar34[iVar31] - *pdVar35;
                if (iVar22 < (int)uVar7) {
                  pdVar15[iVar22] = (double)pfVar34[iVar22] - *pdVar35;
                }
              }
            }
          }
        }
        else if (0 < (int)uVar7) {
          if ((pdVar15 < pdVar35 + 4 && pdVar35 < pdVar15 + 4) || (uVar7 < 9)) {
            lVar19 = 0;
            do {
              pdVar15[lVar19] = (double)pfVar34[lVar19] - pdVar35[lVar19];
              lVar19 = lVar19 + 1;
            } while ((int)lVar19 < (int)uVar7);
          }
          else {
            if (uVar10 != 0) {
              *pdVar15 = (double)*pfVar34 - *pdVar35;
            }
            uVar25 = (uint)(uVar10 != 0);
            if (2 < uVar11) {
              uVar28 = 0;
                    /* try { // try from 002cff68 to 003cff6b has its CatchHandler @ 002d0854 */
              pdVar23 = (double *)((long)pdVar35 + lVar47);
                    /* try { // try from 002cff70 to 003cff73 has its CatchHandler @ 002d0884 */
                    /* try { // try from 002cff78 to 003cffcb has its CatchHandler @ 002d07d8 */
              puVar20 = (undefined8 *)((long)pfVar34 + lVar45);
              pdVar30 = (double *)((long)pdVar15 + lVar47);
              do {
                uVar40 = puVar20[1];
                uVar39 = *puVar20;
                pdVar27 = pdVar23 + 1;
                dVar41 = *pdVar23;
                dVar43 = pdVar23[3];
                dVar42 = pdVar23[2];
                uVar28 = uVar28 + 1;
                pdVar23 = pdVar23 + 4;
                pdVar30[1] = (double)(float)((ulong)uVar39 >> 0x20) - *pdVar27;
                *pdVar30 = (double)(float)uVar39 - dVar41;
                pdVar30[3] = (double)(float)((ulong)uVar40 >> 0x20) - dVar43;
                pdVar30[2] = (double)(float)uVar40 - dVar42;
                puVar20 = puVar20 + 2;
                pdVar30 = pdVar30 + 4;
              } while (uVar28 < uVar4);
              uVar25 = uVar25 + iVar46;
              if (iVar46 == iVar32) goto LAB_002d0044;
            }
            iVar31 = uVar25 + 1;
            pdVar15[(int)uVar25] = (double)pfVar34[(int)uVar25] - pdVar35[(int)uVar25];
            if (iVar31 < (int)uVar7) {
              iVar22 = uVar25 + 2;
              pdVar15[iVar31] = (double)pfVar34[iVar31] - pdVar35[iVar31];
              if (iVar22 < (int)uVar7) {
                pdVar15[iVar22] = (double)pfVar34[iVar22] - pdVar35[iVar22];
              }
            }
          }
        }
LAB_002d0044:
        pfVar29 = pfVar34 + 1;
        pdVar23 = pdVar35;
        pdVar30 = pdVar38;
        iVar31 = iVar33;
        do {
                    /* try { // try from 002d005c to 003d009f has its CatchHandler @ 002d078c */
          pdVar27 = pdVar23;
          if ((int)uVar6 < (int)uVar7) {
            local_420 = *pdVar23;
            local_428 = local_420;
            local_430 = local_420;
            local_438 = local_420;
            pdVar27 = &local_438;
          }
          dVar42 = 0.0;
          if ((int)uVar7 < 4) {
            iVar22 = 0;
                    /* try { // try from 002d01cc to 003d020f has its CatchHandler @ 002d07e8 */
          }
          else {
            pfVar16 = pfVar29;
            pdVar24 = pdVar27;
            pdVar26 = pdVar15;
            do {
              pfVar21 = pfVar16 + 4;
              pdVar1 = pdVar24 + 1;
              dVar43 = *pdVar24;
                    /* try { // try from 002d00cc to 003d00cf has its CatchHandler @ 002d060c */
                    /* try { // try from 002d00d4 to 003d00d7 has its CatchHandler @ 002d078c */
              pdVar2 = pdVar24 + 2;
                    /* try { // try from 002d00dc to 003d00df has its CatchHandler @ 002d07d8 */
              pdVar3 = pdVar24 + 3;
              pdVar24 = (double *)((long)pdVar24 + lVar17);
              dVar42 = dVar42 + ((double)*pfVar16 - *pdVar1) * pdVar26[1] +
                                ((double)pfVar16[-1] - dVar43) * *pdVar26 +
                                ((double)pfVar16[1] - *pdVar2) * pdVar26[2] +
                                ((double)pfVar16[2] - *pdVar3) * pdVar26[3];
              pfVar16 = pfVar21;
              pdVar26 = pdVar26 + 4;
            } while (pfVar21 != pfVar29 + (ulong)uVar9 * 4 + 4);
            pdVar27 = (double *)((long)pdVar27 + lVar17 + (ulong)uVar9 * lVar17);
            iVar22 = (uVar9 + 1) * 4;
          }
          if (iVar22 < (int)uVar7) {
            lVar19 = 0;
                    /* try { // try from 002d0130 to 003d0133 has its CatchHandler @ 002d087c */
            do {
              lVar12 = lVar19 + -1;
              pdVar24 = pdVar27 + lVar19;
                    /* try { // try from 002d0140 to 003d0143 has its CatchHandler @ 002d0884 */
              lVar13 = iVar22 + lVar19;
              lVar19 = lVar19 + 1;
                    /* try { // try from 002d014c to 003d014f has its CatchHandler @ 002d07d8 */
              dVar42 = dVar42 + ((double)pfVar29[iVar22 + lVar12] - *pdVar24) * pdVar15[lVar13];
            } while (lVar19 != (ulong)((uVar7 - 1) - iVar22) + 1);
          }
          iVar31 = iVar31 + 1;
          pdVar23 = pdVar23 + uVar37;
          pfVar29 = pfVar29 + uVar44;
          *pdVar30 = dVar42 * param_1;
          pdVar30 = pdVar30 + 1;
        } while (iVar31 < iVar8);
        iVar33 = iVar33 + 1;
        pdVar35 = pdVar35 + uVar37;
        pfVar34 = pfVar34 + uVar44;
        pdVar38 = pdVar38 + uVar36 + 1;
      } while (iVar33 != iVar8);
    }
    if (bVar14) {
      local_418 = pdVar15;
      local_410 = uVar18;
      operator_delete__(pdVar15);
    }
  }
  return;
}


==================================================================

### FUNC 002d04b8 (2564 bytes) name=FUN_002d04b8

void FUN_002d04b8(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  double *pdVar2;
  double *pdVar3;
  double *pdVar4;
  ushort *puVar5;
  ushort *puVar6;
  ushort *puVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  uint uVar11;
  uint uVar12;
  ushort uVar13;
  undefined1 auVar14 [14];
  undefined1 auVar15 [14];
  bool bVar16;
  double *pdVar17;
  double *pdVar18;
  double *pdVar19;
  double dVar20;
  ushort *puVar21;
  double *pdVar22;
  ushort *puVar23;
  ushort *puVar24;
  long lVar25;
  ushort *puVar26;
  long lVar27;
  uint uVar28;
  long lVar29;
  double *pdVar30;
  ushort *puVar31;
  undefined1 (*pauVar32) [16];
  uint uVar33;
  uint uVar34;
  uint uVar35;
  ulong uVar36;
  double *pdVar37;
  double *pdVar38;
  double *pdVar39;
  uint uVar40;
  uint uVar41;
  ulong uVar42;
  ulong uVar43;
  int iVar44;
  double dVar45;
  undefined1 auVar46 [16];
  double dVar47;
  long lVar48;
  double dVar49;
  double dVar50;
  double dVar51;
  long lVar52;
  ulong uVar53;
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  double adStack_408 [129];
  
                    /* try { // try from 002d04cc to 003d04cf has its CatchHandler @ 002d07e0 */
                    /* try { // try from 002d04f0 to 003d04f3 has its CatchHandler @ 002d07e8 */
  puVar23 = *(ushort **)(param_2 + 0x10);
  uVar36 = *(ulong *)(param_2 + 0x50) >> 1;
  pdVar37 = *(double **)(param_3 + 0x10);
  pdVar39 = *(double **)(param_4 + 0x10);
  uVar43 = *(ulong *)(param_3 + 0x50) >> 3;
                    /* try { // try from 002d0514 to 003d0517 has its CatchHandler @ 002d07f0 */
  if (*(int *)(param_4 + 8) < 2) {
                    /* try { // try from 002d0e84 to 003d0e87 has its CatchHandler @ 002d1060 */
    uVar42 = 0;
  }
  else {
    uVar42 = *(ulong *)(param_4 + 0x50) >> 3;
  }
  uVar11 = (*(uint **)(param_2 + 0x40))[1];
  uVar12 = **(uint **)(param_2 + 0x40);
  bVar1 = (int)uVar11 <= *(int *)(param_4 + 0xc);
  iVar44 = uVar12 * 8;
                    /* try { // try from 002d0560 to 003d0563 has its CatchHandler @ 002d0794 */
  if ((pdVar39 != (double *)0x0) && (iVar44 = uVar12 * 0x28, bVar1)) {
    iVar44 = uVar12 * 8;
  }
  if ((ulong)(long)iVar44 < 0x409) {
    pdVar17 = adStack_408;
    bVar16 = false;
  }
  else {
    pdVar17 = operator_new__((long)iVar44);
                    /* try { // try from 002d058c to 003d058f has its CatchHandler @ 002d0724 */
    bVar16 = pdVar17 != adStack_408;
  }
  if (pdVar39 == (double *)0x0) {
LAB_002d0610:
    if (0 < (int)uVar11) {
      uVar35 = (uint)((ulong)pdVar17 >> 3) & 1;
      if (uVar12 < uVar35) {
        uVar35 = uVar12;
      }
      uVar41 = uVar12;
      if (9 < uVar12) {
        uVar41 = uVar35;
      }
      lVar48 = NEON_shl(uVar36,2);
                    /* try { // try from 002d065c to 003d065f has its CatchHandler @ 002cf2b0 */
                    /* catch() { ... } // from try @ 002d038c with catch @ 002d0660 */
      uVar35 = ((uVar12 - uVar41) - 8 >> 3) + 1;
      lVar52 = NEON_shl(uVar36 * 3,1);
                    /* catch() { ... } // from try @ 002cf41c with catch @ 002d0688
                       catch() { ... } // from try @ 002d05e0 with catch @ 002d0688 */
      iVar44 = uVar35 * 8;
                    /* catch() { ... } // from try @ 002cf6f0 with catch @ 002d06b0 */
      lVar29 = 0;
      puVar24 = puVar23 + uVar36;
                    /* catch() { ... } // from try @ 002d023c with catch @ 002d06d8 */
      uVar40 = uVar11 - 4;
                    /* catch() { ... } // from try @ 002cf578 with catch @ 002d0700 */
                    /* catch() { ... } // from try @ 002cf37c with catch @ 002d0714 */
      uVar33 = 0;
                    /* catch() { ... } // from try @ 002cfb3c with catch @ 002d0724
                       catch() { ... } // from try @ 002cfbb4 with catch @ 002d0724
                       catch() { ... } // from try @ 002d058c with catch @ 002d0724 */
      puVar31 = puVar23;
      pdVar39 = pdVar37;
      do {
        if (0 < (int)uVar12) {
          uVar34 = uVar41;
          if (uVar41 != 0) {
            *pdVar17 = (double)*puVar31;
                    /* catch() { ... } // from try @ 002cfa6c with catch @ 002d0784
                       catch() { ... } // from try @ 002cfc78 with catch @ 002d0784
                       catch() { ... } // from try @ 002d05fc with catch @ 002d0784 */
                    /* catch() { ... } // from try @ 002d005c with catch @ 002d078c
                       catch() { ... } // from try @ 002d00d4 with catch @ 002d078c
                       catch() { ... } // from try @ 002d03f0 with catch @ 002d078c */
                    /* catch() { ... } // from try @ 002cf994 with catch @ 002d0794
                       catch() { ... } // from try @ 002d0560 with catch @ 002d0794 */
                    /* catch() { ... } // from try @ 002cfc68 with catch @ 002d07b8 */
                    /* catch() { ... } // from try @ 002cfc0c with catch @ 002d07d0
                       catch() { ... } // from try @ 002cfc70 with catch @ 002d07d0 */
            if ((((uVar41 != 1) && (pdVar17[1] = (double)*puVar24, uVar41 != 2)) &&
                (pdVar17[2] = (double)*(ushort *)((long)puVar31 + lVar48), uVar41 != 3)) &&
               (((pdVar17[3] = (double)*(ushort *)((long)puVar24 + lVar48), uVar41 != 4 &&
                 (pdVar17[4] = (double)puVar31[uVar36 * 4], uVar41 != 5)) &&
                ((pdVar17[5] = (double)puVar24[uVar36 * 4], uVar41 != 6 &&
                 (pdVar17[6] = (double)puVar31[uVar36 * 6], uVar41 != 7)))))) {
                    /* catch() { ... } // from try @ 002cf34c with catch @ 002d07d8
                       catch() { ... } // from try @ 002cf384 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cf508 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cf580 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cf600 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cf700 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cfccc with catch @ 002d07d8
                       catch() { ... } // from try @ 002cfd00 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cfe14 with catch @ 002d07d8
                       catch() { ... } // from try @ 002cff78 with catch @ 002d07d8
                       catch() { ... } // from try @ 002d00dc with catch @ 002d07d8
                       catch() { ... } // from try @ 002d014c with catch @ 002d07d8
                       catch() { ... } // from try @ 002d024c with catch @ 002d07d8
                       catch() { ... } // from try @ 002d039c with catch @ 002d07d8
                       catch() { ... } // from try @ 002d040c with catch @ 002d07d8 */
                    /* catch() { ... } // from try @ 002cf680 with catch @ 002d07e0
                       catch() { ... } // from try @ 002cf6f8 with catch @ 002d07e0
                       catch() { ... } // from try @ 002d04cc with catch @ 002d07e0 */
              pdVar17[7] = (double)puVar24[uVar36 * 6];
              if (uVar41 == 8) {
                uVar34 = 8;
              }
              else {
                    /* catch() { ... } // from try @ 002d01cc with catch @ 002d07e8
                       catch() { ... } // from try @ 002d0244 with catch @ 002d07e8
                       catch() { ... } // from try @ 002d04f0 with catch @ 002d07e8 */
                    /* catch() { ... } // from try @ 002d031c with catch @ 002d07f0
                       catch() { ... } // from try @ 002d0394 with catch @ 002d07f0
                       catch() { ... } // from try @ 002d0514 with catch @ 002d07f0 */
                    /* catch() { ... } // from try @ 002cfbac with catch @ 002d07f8 */
                pdVar17[8] = (double)puVar31[uVar36 * 8];
                uVar34 = 9;
              }
            }
            if (uVar12 == uVar41) goto LAB_002d09ec;
          }
                    /* catch() { ... } // from try @ 002cf4b8 with catch @ 002d0808
                       catch() { ... } // from try @ 002d0604 with catch @ 002d0808 */
          if (6 < (uVar12 - 1) - uVar41) {
            uVar28 = 0;
            puVar21 = puVar23 + lVar29 + uVar41 * uVar36 + uVar36;
            pauVar32 = (undefined1 (*) [16])(pdVar17 + uVar41);
            do {
                    /* catch() { ... } // from try @ 002cfe04 with catch @ 002d082c */
              uVar28 = uVar28 + 1;
              puVar26 = puVar21 + -uVar36;
              uVar13 = *puVar21;
                    /* catch() { ... } // from try @ 002cff68 with catch @ 002d0854 */
              puVar5 = puVar21 + uVar36;
              puVar6 = puVar21 + uVar36 * 2;
                    /* catch() { ... } // from try @ 002cfd94 with catch @ 002d087c
                       catch() { ... } // from try @ 002cfe0c with catch @ 002d087c
                       catch() { ... } // from try @ 002d0130 with catch @ 002d087c */
              puVar7 = (ushort *)((long)puVar21 + lVar52);
              puVar8 = puVar21 + uVar36 * 4;
                    /* catch() { ... } // from try @ 002cfef8 with catch @ 002d0884
                       catch() { ... } // from try @ 002cff70 with catch @ 002d0884
                       catch() { ... } // from try @ 002d0140 with catch @ 002d0884 */
              puVar9 = puVar21 + uVar36 * 5;
              puVar10 = puVar21 + uVar36 * 6;
                    /* catch() { ... } // from try @ 002d08c8 with catch @ 002d08a0
                       catch() { ... } // from try @ 002d09d8 with catch @ 002d08a0
                       catch() { ... } // from try @ 002d0a80 with catch @ 002d08a0 */
              puVar21 = puVar21 + uVar36 * 8;
              uVar53 = CONCAT26(0,CONCAT24(uVar13,(uint)*puVar26));
              auVar14._8_2_ = *puVar5;
              auVar14._0_8_ = uVar53;
              auVar14._10_2_ = 0;
              auVar14._12_2_ = *puVar6;
              uVar42 = CONCAT26(0,CONCAT24(*puVar8,(uint)*puVar7));
              auVar15._8_2_ = *puVar9;
              auVar15._0_8_ = uVar42;
              auVar15._10_2_ = 0;
              auVar15._12_2_ = *puVar10;
              auVar56._0_8_ = uVar53 & 0xffffffff;
              auVar56._8_2_ = uVar13;
              auVar56._10_6_ = 0;
                    /* try { // try from 002d08c8 to 003d08cb has its CatchHandler @ 002d08a0 */
              auVar54._0_8_ = (ulong)auVar14._8_6_ & 0xffffffff;
              auVar54._8_6_ = auVar14._8_6_ >> 0x20;
              auVar54._14_2_ = 0;
              auVar55._0_8_ = uVar42 & 0xffffffff;
              auVar55._8_2_ = *puVar8;
              auVar55._10_6_ = 0;
              auVar46._0_8_ = (ulong)auVar15._8_6_ & 0xffffffff;
              auVar46._8_6_ = auVar15._8_6_ >> 0x20;
              auVar46._14_2_ = 0;
              auVar56 = NEON_scvtf(auVar56,8);
              *pauVar32 = auVar56;
              auVar54 = NEON_scvtf(auVar54,8);
              auVar55 = NEON_scvtf(auVar55,8);
              auVar46 = NEON_scvtf(auVar46,8);
              *(double *)((long)pauVar32[1] + 8) = auVar54._8_8_;
              *(double *)pauVar32[1] = auVar54._0_8_;
              *(double *)((long)pauVar32[2] + 8) = auVar55._8_8_;
              *(double *)pauVar32[2] = auVar55._0_8_;
              *(double *)((long)pauVar32[3] + 8) = auVar46._8_8_;
              *(double *)pauVar32[3] = auVar46._0_8_;
              pauVar32 = pauVar32 + 4;
            } while (uVar28 < uVar35);
            uVar34 = uVar34 + iVar44;
            if (iVar44 == uVar12 - uVar41) goto LAB_002d09ec;
          }
          lVar25 = (long)(int)uVar34 * uVar36;
          pdVar17[(int)uVar34] = (double)puVar23[lVar25 + lVar29];
          if ((int)(uVar34 + 1) < (int)uVar12) {
            lVar25 = lVar25 + uVar36;
            pdVar17[(int)(uVar34 + 1)] = (double)puVar23[lVar29 + lVar25];
            if ((int)(uVar34 + 2) < (int)uVar12) {
                    /* try { // try from 002d0954 to 003d099b has its CatchHandler @ 002d0a84 */
              lVar25 = uVar36 + lVar25;
              pdVar17[(int)(uVar34 + 2)] = (double)puVar23[lVar25 + lVar29];
              if ((int)(uVar34 + 3) < (int)uVar12) {
                lVar25 = uVar36 + lVar25;
                pdVar17[(int)(uVar34 + 3)] = (double)puVar23[lVar25 + lVar29];
                if ((int)(uVar34 + 4) < (int)uVar12) {
                  lVar25 = uVar36 + lVar25;
                  pdVar17[(int)(uVar34 + 4)] = (double)puVar23[lVar25 + lVar29];
                  if ((int)(uVar34 + 5) < (int)uVar12) {
                    lVar25 = uVar36 + lVar25;
                    /* try { // try from 002d09c8 to 003d09cb has its CatchHandler @ 002d0a50 */
                    pdVar17[(int)(uVar34 + 5)] = (double)puVar23[lVar25 + lVar29];
                    /* try { // try from 002d09d0 to 003d09d3 has its CatchHandler @ 002d0a84 */
                    if ((int)(uVar34 + 6) < (int)uVar12) {
                    /* try { // try from 002d09d8 to 003d09db has its CatchHandler @ 002d08a0 */
                      pdVar17[(int)(uVar34 + 6)] = (double)puVar23[uVar36 + lVar25 + lVar29];
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d09ec:
        uVar34 = uVar33;
        if ((int)uVar33 < (int)(uVar11 - 3)) {
          pdVar30 = pdVar39;
          puVar21 = puVar31;
          do {
            dVar47 = 0.0;
            dVar20 = dVar47;
            dVar49 = dVar47;
            dVar50 = dVar47;
            if (0 < (int)uVar12) {
              dVar20 = 0.0;
              lVar25 = 0;
              dVar49 = 0.0;
                    /* try { // try from 002d0a34 to 003d0a37 has its CatchHandler @ 002d0a84 */
              dVar50 = 0.0;
              puVar26 = puVar21;
              do {
                uVar13 = *puVar26;
                puVar5 = puVar26 + 1;
                puVar6 = puVar26 + 2;
                puVar7 = puVar26 + 3;
                puVar26 = puVar26 + uVar36;
                    /* catch() { ... } // from try @ 002d09c8 with catch @ 002d0a50 */
                dVar45 = pdVar17[lVar25];
                lVar25 = lVar25 + 1;
                dVar50 = dVar50 + dVar45 * (double)uVar13;
                dVar49 = dVar49 + dVar45 * (double)*puVar5;
                dVar20 = dVar20 + dVar45 * (double)*puVar6;
                dVar47 = dVar47 + dVar45 * (double)*puVar7;
              } while ((int)lVar25 < (int)uVar12);
            }
                    /* try { // try from 002d0a80 to 003d0a83 has its CatchHandler @ 002d08a0 */
                    /* catch() { ... } // from try @ 002d0954 with catch @ 002d0a84
                       catch() { ... } // from try @ 002d09d0 with catch @ 002d0a84
                       catch() { ... } // from try @ 002d0a34 with catch @ 002d0a84 */
                    /* catch() { ... } // from try @ 002d0ab8 with catch @ 002d0a8c
                       catch() { ... } // from try @ 002d0bcc with catch @ 002d0a8c
                       catch() { ... } // from try @ 002d0c78 with catch @ 002d0a8c */
            pdVar18 = pdVar30 + 4;
            puVar21 = puVar21 + 4;
            pdVar30[1] = dVar49 * param_1;
            *pdVar30 = dVar50 * param_1;
            pdVar30[3] = dVar47 * param_1;
            pdVar30[2] = dVar20 * param_1;
            pdVar30 = pdVar18;
          } while (pdVar18 != pdVar37 + lVar29 + 4 + (ulong)(uVar40 >> 2) * 4);
                    /* try { // try from 002d0ab8 to 003d0abb has its CatchHandler @ 002d0a8c */
          uVar34 = (int)lVar29 + 4 + (uVar40 >> 2) * 4;
        }
        if ((int)uVar34 < (int)uVar11) {
          lVar25 = (long)(int)uVar34;
          puVar21 = puVar23 + lVar25;
          pdVar30 = pdVar37 + lVar25;
          do {
            dVar20 = 0.0;
            if (0 < (int)uVar12) {
              lVar27 = 0;
              puVar26 = puVar21;
              do {
                uVar13 = *puVar26;
                puVar26 = puVar26 + uVar36;
                pdVar18 = pdVar17 + lVar27;
                lVar27 = lVar27 + 1;
                dVar20 = dVar20 + (double)uVar13 * *pdVar18;
              } while ((int)lVar27 < (int)uVar12);
            }
            puVar21 = puVar21 + 1;
            *pdVar30 = dVar20 * param_1;
            pdVar30 = pdVar30 + 1;
          } while (puVar21 != puVar23 + lVar25 + 1 + (ulong)((uVar11 - 1) - uVar34));
        }
        uVar33 = uVar33 + 1;
                    /* try { // try from 002d0b44 to 003d0b8f has its CatchHandler @ 002d0c7c */
        lVar29 = lVar29 + 1;
        pdVar37 = pdVar37 + uVar43;
        uVar40 = uVar40 - 1;
        puVar31 = puVar31 + 1;
        puVar24 = puVar24 + 1;
        pdVar39 = pdVar39 + uVar43 + 1;
      } while (uVar33 != uVar11);
    }
  }
  else {
    if (bVar1) {
      pdVar30 = (double *)0x0;
    }
    else {
      pdVar30 = pdVar17 + (int)uVar12;
      if (0 < (int)uVar12) {
        pdVar18 = pdVar30 + 3;
        do {
          dVar20 = *pdVar39;
          pdVar38 = pdVar18 + 4;
                    /* try { // try from 002d05e0 to 003d05e3 has its CatchHandler @ 002d0688 */
          pdVar39 = pdVar39 + uVar42;
          *pdVar18 = dVar20;
          pdVar18[-1] = dVar20;
          pdVar18[-2] = dVar20;
          pdVar18[-3] = dVar20;
          pdVar18 = pdVar38;
        } while (pdVar38 != pdVar30 + (ulong)(uVar12 - 1) * 4 + 7);
      }
                    /* try { // try from 002d05fc to 003d05ff has its CatchHandler @ 002d0784 */
                    /* try { // try from 002d0604 to 003d0607 has its CatchHandler @ 002d0808 */
      if (uVar42 != 0) {
        uVar42 = 4;
      }
                    /* catch() { ... } // from try @ 002d00cc with catch @ 002d060c */
      pdVar39 = pdVar30;
      if (pdVar30 == (double *)0x0) goto LAB_002d0610;
    }
    if (0 < (int)uVar11) {
      lVar29 = 0;
                    /* try { // try from 002d0bbc to 003d0bbf has its CatchHandler @ 002d0c48 */
                    /* try { // try from 002d0bc4 to 003d0bc7 has its CatchHandler @ 002d0c7c */
      uVar41 = uVar11 - 4;
                    /* try { // try from 002d0bcc to 003d0bcf has its CatchHandler @ 002d0a8c */
      lVar48 = NEON_shl(uVar43,3);
      uVar35 = 0;
      puVar31 = puVar23;
      pdVar38 = pdVar37;
      pdVar18 = pdVar39;
      if (pdVar30 == (double *)0x0) goto LAB_002d0e18;
      do {
        if (0 < (int)uVar12) {
          lVar52 = 0;
          puVar24 = puVar31;
          pdVar22 = pdVar30;
          do {
            uVar13 = *puVar24;
            puVar24 = puVar24 + uVar36;
            dVar20 = *pdVar22;
                    /* try { // try from 002d0c2c to 003d0c2f has its CatchHandler @ 002d0c7c */
            pdVar22 = pdVar22 + uVar42;
            pdVar17[lVar52] = (double)uVar13 - dVar20;
            lVar52 = lVar52 + 1;
          } while ((int)lVar52 < (int)uVar12);
        }
        while( true ) {
          uVar33 = uVar35;
          if ((int)uVar35 < (int)(uVar11 - 3)) {
            lVar52 = lVar29 << 3;
            pdVar22 = pdVar37;
            puVar24 = puVar31;
            do {
              pdVar19 = pdVar30;
                    /* try { // try from 002d0c78 to 003d0c7b has its CatchHandler @ 002d0a8c */
              if (pdVar30 == (double *)0x0) {
                pdVar19 = (double *)((long)pdVar39 + lVar52);
              }
                    /* catch() { ... } // from try @ 002d0b44 with catch @ 002d0c7c
                       catch() { ... } // from try @ 002d0bc4 with catch @ 002d0c7c
                       catch() { ... } // from try @ 002d0c2c with catch @ 002d0c7c */
              dVar47 = 0.0;
                    /* catch() { ... } // from try @ 002d0cc0 with catch @ 002d0c84
                       catch() { ... } // from try @ 002d0ec4 with catch @ 002d0c84
                       catch() { ... } // from try @ 002d0fd8 with catch @ 002d0c84 */
              dVar20 = dVar47;
              dVar49 = dVar47;
              dVar50 = dVar47;
              if (0 < (int)uVar12) {
                dVar20 = 0.0;
                lVar25 = 0;
                dVar49 = 0.0;
                dVar50 = 0.0;
                puVar21 = puVar24;
                do {
                  uVar13 = *puVar21;
                  puVar26 = puVar21 + 1;
                  puVar5 = puVar21 + 2;
                  puVar6 = puVar21 + 3;
                  puVar21 = puVar21 + uVar36;
                  pdVar2 = pdVar19 + 3;
                    /* try { // try from 002d0cc0 to 003d0cc3 has its CatchHandler @ 002d0c84 */
                  dVar51 = *pdVar19;
                  pdVar3 = pdVar19 + 1;
                  pdVar4 = pdVar19 + 2;
                  pdVar19 = pdVar19 + uVar42;
                  dVar45 = pdVar17[lVar25];
                  lVar25 = lVar25 + 1;
                  dVar50 = dVar50 + dVar45 * ((double)uVar13 - dVar51);
                  dVar49 = dVar49 + dVar45 * ((double)*puVar26 - *pdVar3);
                  dVar20 = dVar20 + dVar45 * ((double)*puVar5 - *pdVar4);
                  dVar47 = dVar47 + dVar45 * ((double)*puVar6 - *pdVar2);
                } while ((int)lVar25 < (int)uVar12);
              }
              lVar52 = lVar52 + 0x20;
              puVar24 = puVar24 + 4;
              pdVar22[1] = dVar49 * param_1;
              *pdVar22 = dVar50 * param_1;
              pdVar22[3] = dVar47 * param_1;
              pdVar22[2] = dVar20 * param_1;
              pdVar22 = pdVar22 + 4;
            } while (lVar52 != (lVar29 + 4 + (ulong)(uVar41 >> 2) * 4) * 8);
            uVar33 = (int)lVar29 + 4 + (uVar41 >> 2) * 4;
          }
          if ((int)uVar33 < (int)uVar11) {
            lVar25 = (long)(int)uVar33;
            lVar52 = lVar25 << 3;
            puVar24 = puVar23 + lVar25;
            do {
              pdVar22 = pdVar30;
              if (pdVar30 == (double *)0x0) {
                pdVar22 = (double *)((long)pdVar39 + lVar52);
              }
              dVar20 = 0.0;
              if (0 < (int)uVar12) {
                lVar27 = 0;
                puVar21 = puVar24;
                do {
                  uVar13 = *puVar21;
                    /* try { // try from 002d0d9c to 003d0e07 has its CatchHandler @ 002d1034 */
                  puVar21 = puVar21 + uVar36;
                  dVar49 = *pdVar22;
                  pdVar22 = pdVar22 + uVar42;
                  pdVar19 = pdVar17 + lVar27;
                  lVar27 = lVar27 + 1;
                  dVar20 = dVar20 + ((double)uVar13 - dVar49) * *pdVar19;
                } while ((int)lVar27 < (int)uVar12);
              }
              puVar24 = puVar24 + 1;
              *(double *)((long)pdVar38 + lVar52) = dVar20 * param_1;
              lVar52 = lVar52 + 8;
            } while (lVar52 != (lVar25 + 1 + (ulong)((uVar11 - 1) - uVar33)) * 8);
          }
          uVar35 = uVar35 + 1;
          lVar29 = lVar29 + 1;
          uVar41 = uVar41 - 1;
          puVar31 = puVar31 + 1;
          pdVar38 = (double *)((long)pdVar38 + lVar48);
          pdVar18 = pdVar18 + 1;
          pdVar37 = (double *)((long)pdVar37 + lVar48 + 8);
          if (uVar35 == uVar11) goto LAB_002d0b64;
          if (pdVar30 != (double *)0x0) break;
LAB_002d0e18:
          pdVar22 = pdVar30;
          puVar24 = puVar31;
          pdVar19 = pdVar18;
          if (0 < (int)uVar12) {
            do {
                    /* try { // try from 002d0e34 to 003d0e37 has its CatchHandler @ 002d0ff0 */
                    /* try { // try from 002d0e3c to 003d0e3f has its CatchHandler @ 002d1034 */
              pdVar17[(long)pdVar22] = (double)*puVar24 - *pdVar19;
              pdVar22 = (double *)((long)pdVar22 + 1);
              puVar24 = puVar24 + uVar36;
              pdVar19 = pdVar19 + uVar42;
            } while ((int)pdVar22 < (int)uVar12);
          }
        }
      } while( true );
    }
  }
LAB_002d0b64:
  if (bVar16) {
    operator_delete__(pdVar17);
  }
  return;
}


==================================================================

### FUNC 002d0edc (2516 bytes) name=FUN_002d0edc

void FUN_002d0edc(double param_1,long param_2,long param_3,long param_4)

{
  bool bVar1;
  float *pfVar2;
  float *pfVar3;
  short *psVar4;
  short *psVar5;
  short *psVar6;
  short *psVar7;
  short *psVar8;
  short *psVar9;
  uint uVar10;
  uint uVar11;
  short sVar12;
  float *pfVar13;
  bool bVar14;
  float *pfVar15;
  float *pfVar16;
  float *pfVar17;
  long lVar18;
  short *psVar19;
  short *psVar20;
  float *pfVar21;
  long lVar22;
  short *psVar23;
  long lVar24;
  long lVar25;
  float *pfVar26;
  short *psVar27;
  uint uVar28;
  uint uVar29;
  uint uVar30;
  uint uVar31;
  ulong uVar32;
  undefined8 *puVar33;
  short *psVar34;
  float *pfVar35;
  undefined8 *puVar36;
  uint uVar37;
  uint uVar38;
  undefined8 *puVar39;
  ulong uVar40;
  ulong uVar41;
  int iVar42;
  double dVar43;
  undefined1 auVar44 [16];
  float fVar45;
  double dVar46;
  long lVar47;
  long lVar48;
  double dVar49;
  double dVar50;
  double dVar51;
  long lVar52;
  undefined1 auVar53 [16];
  float afStack_408 [258];
  
  psVar34 = *(short **)(param_2 + 0x10);
  uVar32 = *(ulong *)(param_2 + 0x50) >> 1;
  puVar33 = *(undefined8 **)(param_3 + 0x10);
                    /* try { // try from 002d0f2c to 003d0f2f has its CatchHandler @ 002d1034 */
  uVar40 = *(ulong *)(param_3 + 0x50) >> 2;
  pfVar35 = *(float **)(param_4 + 0x10);
  if (*(int *)(param_4 + 8) < 2) {
    uVar41 = 0;
  }
  else {
    uVar41 = *(ulong *)(param_4 + 0x50) >> 2;
  }
                    /* try { // try from 002d0f48 to 003d0f4b has its CatchHandler @ 002d0fc0 */
  uVar10 = (*(uint **)(param_2 + 0x40))[1];
  uVar11 = **(uint **)(param_2 + 0x40);
  bVar1 = (int)uVar10 <= *(int *)(param_4 + 0xc);
  iVar42 = uVar11 * 4;
  if ((pfVar35 != (float *)0x0) && (iVar42 = uVar11 * 0x14, bVar1)) {
    iVar42 = uVar11 * 4;
  }
                    /* try { // try from 002d0f94 to 003d0f97 has its CatchHandler @ 002d0fdc */
                    /* try { // try from 002d0f9c to 003d0f9f has its CatchHandler @ 002d0fc0 */
  if ((ulong)(long)iVar42 < 0x409) {
    pfVar15 = afStack_408;
    bVar14 = false;
  }
  else {
    pfVar15 = operator_new__((long)iVar42);
    bVar14 = pfVar15 != afStack_408;
  }
                    /* catch() { ... } // from try @ 002d0f48 with catch @ 002d0fc0
                       catch() { ... } // from try @ 002d0f9c with catch @ 002d0fc0 */
  if (pfVar35 == (float *)0x0) {
LAB_002d102c:
    if (0 < (int)uVar10) {
                    /* catch() { ... } // from try @ 002d0d9c with catch @ 002d1034
                       catch() { ... } // from try @ 002d0e3c with catch @ 002d1034
                       catch() { ... } // from try @ 002d0f2c with catch @ 002d1034 */
                    /* catch() { ... } // from try @ 002d0eb4 with catch @ 002d103c */
      lVar18 = uVar40 * 4;
      uVar30 = -((uint)((ulong)pfVar15 >> 2) & 3) & 3;
      lVar48 = NEON_shl(uVar32,2);
                    /* catch() { ... } // from try @ 002d0e84 with catch @ 002d1060
                       catch() { ... } // from try @ 002d0ebc with catch @ 002d1060 */
      if (uVar11 < uVar30) {
        uVar30 = uVar11;
      }
                    /* catch() { ... } // from try @ 002d10a0 with catch @ 002d1068
                       catch() { ... } // from try @ 002d1238 with catch @ 002d1068
                       catch() { ... } // from try @ 002d1364 with catch @ 002d1068 */
      uVar31 = uVar11;
      if (9 < uVar11) {
        uVar31 = uVar30;
      }
      lVar52 = NEON_shl(uVar32 * 3,1);
                    /* try { // try from 002d10a0 to 003d10a3 has its CatchHandler @ 002d1068 */
      uVar30 = ((uVar11 - uVar31) - 8 >> 3) + 1;
      lVar47 = NEON_shl(uVar32,4);
      iVar42 = uVar30 * 8;
      lVar25 = 0;
      uVar37 = uVar10 - 4;
      psVar19 = psVar34 + uVar32;
                    /* try { // try from 002d1130 to 003d117b has its CatchHandler @ 002d1390 */
      uVar29 = 0;
      psVar27 = psVar34;
      puVar36 = puVar33;
      do {
        if (0 < (int)uVar11) {
          uVar28 = uVar31;
          if (uVar31 != 0) {
            *pfVar15 = (float)(int)*psVar27;
                    /* try { // try from 002d11a8 to 003d11ab has its CatchHandler @ 002d1368 */
                    /* try { // try from 002d11b0 to 003d11b3 has its CatchHandler @ 002d1390 */
                    /* try { // try from 002d11f8 to 003d11fb has its CatchHandler @ 002d13cc */
            if ((((uVar31 != 1) && (pfVar15[1] = (float)(int)*psVar19, uVar31 != 2)) &&
                (pfVar15[2] = (float)(int)*(short *)((long)psVar27 + lVar48), uVar31 != 3)) &&
               (((pfVar15[3] = (float)(int)*(short *)((long)psVar19 + lVar48), uVar31 != 4 &&
                 (pfVar15[4] = (float)(int)psVar27[uVar32 * 4], uVar31 != 5)) &&
                ((pfVar15[5] = (float)(int)psVar19[uVar32 * 4], uVar31 != 6 &&
                 (pfVar15[6] = (float)(int)psVar27[uVar32 * 6], uVar31 != 7)))))) {
              pfVar15[7] = (float)(int)psVar19[uVar32 * 6];
              if (uVar31 == 8) {
                uVar28 = 8;
              }
              else {
                pfVar15[8] = (float)(int)*(short *)((long)psVar27 + lVar47);
                uVar28 = 9;
              }
            }
                    /* try { // try from 002d1228 to 003d122b has its CatchHandler @ 002d1398 */
            if (uVar11 == uVar31) goto LAB_002d13e4;
          }
                    /* try { // try from 002d1230 to 003d1233 has its CatchHandler @ 002d13cc */
          if (6 < (uVar11 - 1) - uVar31) {
                    /* try { // try from 002d1238 to 003d123b has its CatchHandler @ 002d1068 */
            uVar38 = 0;
            psVar20 = psVar34 + lVar25 + uVar31 * uVar32 + uVar32;
            pfVar35 = pfVar15 + uVar31;
            do {
              uVar38 = uVar38 + 1;
              psVar23 = psVar20 + -uVar32;
              sVar12 = *psVar20;
              psVar4 = psVar20 + uVar32;
              psVar5 = psVar20 + uVar32 * 2;
                    /* try { // try from 002d129c to 003d129f has its CatchHandler @ 002d1390 */
              psVar6 = (short *)((long)psVar20 + lVar52);
              psVar7 = psVar20 + uVar32 * 4;
              psVar8 = psVar20 + uVar32 * 5;
                    /* try { // try from 002d12b8 to 003d12bb has its CatchHandler @ 002d13d4 */
              psVar9 = psVar20 + uVar32 * 6;
              psVar20 = (short *)((long)psVar20 + lVar47);
              auVar53._0_4_ = (int)*psVar23;
              auVar53._4_4_ = (int)sVar12;
              auVar53._8_4_ = (int)*psVar4;
              auVar53._12_4_ = (int)*psVar5;
              auVar44._0_4_ = (int)*psVar6;
              auVar44._4_4_ = (int)*psVar7;
              auVar44._8_4_ = (int)*psVar8;
              auVar44._12_4_ = (int)*psVar9;
              auVar53 = NEON_scvtf(auVar53,4);
              auVar44 = NEON_scvtf(auVar44,4);
              *(long *)(pfVar35 + 2) = auVar53._8_8_;
              *(long *)pfVar35 = auVar53._0_8_;
              *(long *)(pfVar35 + 6) = auVar44._8_8_;
              *(long *)(pfVar35 + 4) = auVar44._0_8_;
              pfVar35 = pfVar35 + 8;
            } while (uVar38 < uVar30);
            uVar28 = uVar28 + iVar42;
                    /* try { // try from 002d1304 to 003d1307 has its CatchHandler @ 002d1328 */
            if (iVar42 == uVar11 - uVar31) goto LAB_002d13e4;
          }
                    /* try { // try from 002d130c to 003d130f has its CatchHandler @ 002d13d4 */
          lVar22 = (long)(int)uVar28 * uVar32;
                    /* catch() { ... } // from try @ 002d1304 with catch @ 002d1328 */
          pfVar15[(int)uVar28] = (float)(int)psVar34[lVar22 + lVar25];
          if ((int)(uVar28 + 1) < (int)uVar11) {
            lVar22 = lVar22 + uVar32;
            pfVar15[(int)(uVar28 + 1)] = (float)(int)psVar34[lVar25 + lVar22];
            if ((int)(uVar28 + 2) < (int)uVar11) {
              lVar22 = uVar32 + lVar22;
                    /* try { // try from 002d1364 to 003d1367 has its CatchHandler @ 002d1068 */
                    /* catch() { ... } // from try @ 002d11a8 with catch @ 002d1368 */
              pfVar15[(int)(uVar28 + 2)] = (float)(int)psVar34[lVar22 + lVar25];
              if ((int)(uVar28 + 3) < (int)uVar11) {
                lVar22 = uVar32 + lVar22;
                pfVar15[(int)(uVar28 + 3)] = (float)(int)psVar34[lVar22 + lVar25];
                if ((int)(uVar28 + 4) < (int)uVar11) {
                    /* catch() { ... } // from try @ 002d1130 with catch @ 002d1390
                       catch() { ... } // from try @ 002d11b0 with catch @ 002d1390
                       catch() { ... } // from try @ 002d129c with catch @ 002d1390 */
                  lVar22 = uVar32 + lVar22;
                    /* catch() { ... } // from try @ 002d1228 with catch @ 002d1398 */
                  pfVar15[(int)(uVar28 + 4)] = (float)(int)psVar34[lVar22 + lVar25];
                  if ((int)(uVar28 + 5) < (int)uVar11) {
                    lVar22 = uVar32 + lVar22;
                    pfVar15[(int)(uVar28 + 5)] = (float)(int)psVar34[lVar22 + lVar25];
                    /* catch() { ... } // from try @ 002d11f8 with catch @ 002d13cc
                       catch() { ... } // from try @ 002d1230 with catch @ 002d13cc */
                    if ((int)(uVar28 + 6) < (int)uVar11) {
                    /* catch() { ... } // from try @ 002d12b8 with catch @ 002d13d4
                       catch() { ... } // from try @ 002d130c with catch @ 002d13d4 */
                    /* catch() { ... } // from try @ 002d1414 with catch @ 002d13dc
                       catch() { ... } // from try @ 002d1544 with catch @ 002d13dc
                       catch() { ... } // from try @ 002d1664 with catch @ 002d13dc */
                      pfVar15[(int)(uVar28 + 6)] = (float)(int)psVar34[uVar32 + lVar22 + lVar25];
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d13e4:
        uVar28 = uVar29;
        if ((int)uVar29 < (int)(uVar10 - 3)) {
          psVar20 = psVar27;
          puVar39 = puVar36;
          do {
                    /* try { // try from 002d1414 to 003d1417 has its CatchHandler @ 002d13dc */
            dVar46 = 0.0;
            dVar49 = dVar46;
            dVar50 = dVar46;
            dVar51 = dVar46;
            if (0 < (int)uVar11) {
              dVar49 = 0.0;
              lVar22 = 0;
              dVar50 = 0.0;
              dVar51 = 0.0;
              psVar23 = psVar20;
              do {
                sVar12 = *psVar23;
                psVar4 = psVar23 + 1;
                psVar5 = psVar23 + 2;
                psVar6 = psVar23 + 3;
                psVar23 = psVar23 + uVar32;
                pfVar35 = pfVar15 + lVar22;
                lVar22 = lVar22 + 1;
                dVar43 = (double)*pfVar35;
                dVar51 = dVar51 + dVar43 * (double)(int)sVar12;
                dVar50 = dVar50 + dVar43 * (double)(int)*psVar4;
                dVar49 = dVar49 + dVar43 * (double)(int)*psVar5;
                dVar46 = dVar46 + dVar43 * (double)(int)*psVar6;
              } while ((int)lVar22 < (int)uVar11);
            }
            psVar20 = psVar20 + 4;
                    /* try { // try from 002d14a4 to 003d14ef has its CatchHandler @ 002d1668 */
            puVar39[1] = CONCAT44((float)(dVar46 * param_1),(float)(dVar49 * param_1));
            *puVar39 = CONCAT44((float)(dVar50 * param_1),(float)(dVar51 * param_1));
            puVar39 = puVar39 + 2;
          } while (psVar20 != psVar34 + lVar25 + 4 + (ulong)(uVar37 >> 2) * 4);
          uVar28 = (int)lVar25 + 4 + (uVar37 >> 2) * 4;
        }
        if ((int)uVar28 < (int)uVar10) {
          lVar22 = (long)(int)uVar28;
          psVar20 = psVar34 + lVar22;
          pfVar35 = (float *)((long)puVar33 + lVar22 * 4);
          do {
            dVar49 = 0.0;
            if (0 < (int)uVar11) {
              lVar24 = 0;
              psVar23 = psVar20;
              do {
                sVar12 = *psVar23;
                psVar23 = psVar23 + uVar32;
                pfVar26 = pfVar15 + lVar24;
                lVar24 = lVar24 + 1;
                dVar49 = dVar49 + (double)(int)sVar12 * (double)*pfVar26;
              } while ((int)lVar24 < (int)uVar11);
            }
                    /* try { // try from 002d151c to 003d151f has its CatchHandler @ 002d1634 */
            psVar20 = psVar20 + 1;
                    /* try { // try from 002d1524 to 003d1527 has its CatchHandler @ 002d1668 */
            *pfVar35 = (float)(dVar49 * param_1);
            pfVar35 = pfVar35 + 1;
          } while (psVar20 != psVar34 + lVar22 + 1 + (ulong)((uVar10 - 1) - uVar28));
        }
        uVar29 = uVar29 + 1;
        lVar25 = lVar25 + 1;
                    /* try { // try from 002d1544 to 003d1547 has its CatchHandler @ 002d13dc */
        uVar37 = uVar37 - 1;
        psVar27 = psVar27 + 1;
        psVar19 = psVar19 + 1;
        puVar33 = (undefined8 *)((long)puVar33 + lVar18);
        puVar36 = (undefined8 *)((long)puVar36 + lVar18 + 4);
      } while (uVar29 != uVar10);
    }
  }
  else {
    if (bVar1) {
                    /* try { // try from 002d15a0 to 003d15a3 has its CatchHandler @ 002d16a4 */
      pfVar26 = (float *)0x0;
    }
    else {
      pfVar26 = pfVar15 + (int)uVar11;
                    /* try { // try from 002d0fd8 to 003d0fdb has its CatchHandler @ 002d0c84 */
      if (0 < (int)uVar11) {
                    /* catch() { ... } // from try @ 002d0f94 with catch @ 002d0fdc */
                    /* catch() { ... } // from try @ 002d0e34 with catch @ 002d0ff0 */
        pfVar16 = pfVar26 + 3;
        do {
          fVar45 = *pfVar35;
          pfVar17 = pfVar16 + 4;
          pfVar35 = pfVar35 + uVar41;
          *pfVar16 = fVar45;
          pfVar16[-1] = fVar45;
          pfVar16[-2] = fVar45;
          pfVar16[-3] = fVar45;
          pfVar16 = pfVar17;
        } while (pfVar17 != pfVar26 + (ulong)(uVar11 - 1) * 4 + 7);
      }
      if (uVar41 != 0) {
        uVar41 = 4;
      }
      pfVar35 = pfVar26;
      if (pfVar26 == (float *)0x0) goto LAB_002d102c;
    }
    if (0 < (int)uVar10) {
      lVar18 = 0;
      uVar31 = uVar10 - 4;
      lVar48 = NEON_shl(uVar40,2);
      uVar30 = 0;
                    /* try { // try from 002d15ec to 003d15ef has its CatchHandler @ 002d1670 */
                    /* try { // try from 002d15f4 to 003d15f7 has its CatchHandler @ 002d16a4 */
      psVar27 = psVar34;
      pfVar16 = pfVar35;
      if (pfVar26 == (float *)0x0) goto LAB_002d180c;
      do {
        if (0 < (int)uVar11) {
          lVar25 = 0;
          psVar19 = psVar27;
          pfVar17 = pfVar26;
          do {
            sVar12 = *psVar19;
            psVar19 = psVar19 + uVar32;
            fVar45 = *pfVar17;
                    /* try { // try from 002d1618 to 003d161b has its CatchHandler @ 002d1668 */
            pfVar17 = pfVar17 + uVar41;
            pfVar15[lVar25] = (float)(int)sVar12 - fVar45;
            lVar25 = lVar25 + 1;
          } while ((int)lVar25 < (int)uVar11);
        }
        while( true ) {
          uVar29 = uVar30;
          if ((int)uVar30 < (int)(uVar10 - 3)) {
            lVar25 = lVar18 << 2;
            psVar19 = psVar27;
            do {
              pfVar17 = pfVar26;
              if (pfVar26 == (float *)0x0) {
                pfVar17 = (float *)((long)pfVar35 + lVar25);
              }
                    /* try { // try from 002d1664 to 003d1667 has its CatchHandler @ 002d13dc */
                    /* catch() { ... } // from try @ 002d14a4 with catch @ 002d1668
                       catch() { ... } // from try @ 002d1524 with catch @ 002d1668
                       catch() { ... } // from try @ 002d1618 with catch @ 002d1668 */
              dVar46 = 0.0;
                    /* catch() { ... } // from try @ 002d15ec with catch @ 002d1670 */
              dVar49 = dVar46;
              dVar50 = dVar46;
              dVar51 = dVar46;
              if (0 < (int)uVar11) {
                dVar49 = 0.0;
                lVar47 = 0;
                dVar50 = 0.0;
                dVar51 = 0.0;
                psVar20 = psVar19;
                do {
                  sVar12 = *psVar20;
                  psVar23 = psVar20 + 1;
                  psVar4 = psVar20 + 2;
                  psVar5 = psVar20 + 3;
                  psVar20 = psVar20 + uVar32;
                    /* catch() { ... } // from try @ 002d15a0 with catch @ 002d16a4
                       catch() { ... } // from try @ 002d15f4 with catch @ 002d16a4 */
                  pfVar21 = pfVar17 + 3;
                    /* catch() { ... } // from try @ 002d16e0 with catch @ 002d16ac
                       catch() { ... } // from try @ 002d180c with catch @ 002d16ac
                       catch() { ... } // from try @ 002d1928 with catch @ 002d16ac */
                  fVar45 = *pfVar17;
                  pfVar2 = pfVar17 + 1;
                  pfVar3 = pfVar17 + 2;
                  pfVar17 = pfVar17 + uVar41;
                  pfVar13 = pfVar15 + lVar47;
                  lVar47 = lVar47 + 1;
                  dVar43 = (double)*pfVar13;
                    /* try { // try from 002d16e0 to 003d16e3 has its CatchHandler @ 002d16ac */
                  dVar51 = dVar51 + dVar43 * (double)((float)(int)sVar12 - fVar45);
                  dVar50 = dVar50 + dVar43 * (double)((float)(int)*psVar23 - *pfVar2);
                  dVar49 = dVar49 + dVar43 * (double)((float)(int)*psVar4 - *pfVar3);
                  dVar46 = dVar46 + dVar43 * (double)((float)(int)*psVar5 - *pfVar21);
                } while ((int)lVar47 < (int)uVar11);
              }
              puVar36 = (undefined8 *)((long)puVar33 + lVar25);
              lVar25 = lVar25 + 0x10;
              psVar19 = psVar19 + 4;
              puVar36[1] = CONCAT44((float)(dVar46 * param_1),(float)(dVar49 * param_1));
              *puVar36 = CONCAT44((float)(dVar50 * param_1),(float)(dVar51 * param_1));
            } while (lVar25 != (lVar18 + 4 + (ulong)(uVar31 >> 2) * 4) * 4);
            uVar29 = (int)lVar18 + 4 + (uVar31 >> 2) * 4;
          }
          if ((int)uVar29 < (int)uVar10) {
            lVar47 = (long)(int)uVar29;
            lVar25 = lVar47 << 2;
            psVar19 = psVar34 + lVar47;
            do {
                    /* try { // try from 002d1770 to 003d17b7 has its CatchHandler @ 002d192c */
              pfVar17 = pfVar26;
              if (pfVar26 == (float *)0x0) {
                pfVar17 = (float *)((long)pfVar35 + lVar25);
              }
              dVar49 = 0.0;
              if (0 < (int)uVar11) {
                lVar52 = 0;
                psVar20 = psVar19;
                do {
                  sVar12 = *psVar20;
                  psVar20 = psVar20 + uVar32;
                  fVar45 = *pfVar17;
                  pfVar17 = pfVar17 + uVar41;
                  pfVar21 = pfVar15 + lVar52;
                  lVar52 = lVar52 + 1;
                  dVar49 = dVar49 + (double)((float)(int)sVar12 - fVar45) * (double)*pfVar21;
                } while ((int)lVar52 < (int)uVar11);
              }
              psVar19 = psVar19 + 1;
              *(float *)((long)puVar33 + lVar25) = (float)(dVar49 * param_1);
              lVar25 = lVar25 + 4;
            } while (lVar25 != (lVar47 + 1 + (ulong)((uVar10 - 1) - uVar29)) * 4);
          }
                    /* try { // try from 002d17e4 to 003d17e7 has its CatchHandler @ 002d18f8 */
          uVar30 = uVar30 + 1;
                    /* try { // try from 002d17ec to 003d17ef has its CatchHandler @ 002d192c */
          lVar18 = lVar18 + 1;
          uVar31 = uVar31 - 1;
          psVar27 = psVar27 + 1;
          pfVar16 = pfVar16 + 1;
          puVar33 = (undefined8 *)((long)puVar33 + lVar48);
          if (uVar30 == uVar10) goto LAB_002d1560;
          if (pfVar26 != (float *)0x0) break;
LAB_002d180c:
                    /* try { // try from 002d180c to 003d180f has its CatchHandler @ 002d16ac */
          pfVar17 = pfVar26;
          psVar19 = psVar27;
          pfVar21 = pfVar16;
          if (0 < (int)uVar11) {
            do {
              pfVar15[(long)pfVar17] = (float)(int)*psVar19 - *pfVar21;
              pfVar17 = (float *)((long)pfVar17 + 1);
              psVar19 = psVar19 + uVar32;
              pfVar21 = pfVar21 + uVar41;
            } while ((int)pfVar17 < (int)uVar11);
          }
        }
      } while( true );
    }
  }
LAB_002d1560:
  if (bVar14) {
    operator_delete__(pfVar15);
  }
  return;
}


==================================================================

### FUNC 002d18d0 (3352 bytes) name=FUN_002d18d0

void FUN_002d18d0(double param_1,long param_2,long param_3,long param_4)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  byte *pbVar5;
  double *pdVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  byte bVar14;
  byte bVar15;
  byte bVar16;
  byte bVar17;
  double dVar18;
  long lVar19;
  long lVar20;
  bool bVar21;
  double *pdVar22;
  byte *pbVar23;
  long lVar24;
  double *pdVar25;
  long lVar26;
  byte *pbVar27;
  double *pdVar28;
  double *pdVar29;
  double *pdVar30;
  double *pdVar31;
  int iVar32;
  long lVar33;
  int iVar34;
  uint uVar35;
  int iVar36;
  double *pdVar37;
  ulong uVar38;
  long lVar39;
  ulong uVar40;
  double *pdVar41;
  ulong uVar42;
  double *pdVar43;
  double *pdVar44;
  double dVar45;
  undefined1 auVar46 [16];
  double dVar47;
  undefined1 auVar48 [16];
  ulong uVar49;
  double dVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  double dVar55;
  double dVar56;
  double dVar57;
  double dVar58;
  double dVar59;
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  int iVar64;
  long lVar65;
  undefined1 auVar66 [16];
  double dVar67;
  double dVar68;
  undefined1 auVar69 [16];
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  undefined1 auVar72 [16];
  undefined1 auVar73 [16];
  undefined1 auVar74 [16];
  undefined1 auVar75 [16];
  uint uVar76;
  undefined1 auVar77 [16];
  undefined1 auVar78 [16];
  double *local_470;
  double *local_468;
  long local_460;
  int local_448;
  double local_438;
  double local_430;
  double local_428;
  double local_420;
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
                    /* try { // try from 002d18dc to 003d18df has its CatchHandler @ 002d192c */
                    /* catch() { ... } // from try @ 002d17e4 with catch @ 002d18f8 */
  local_470 = *(double **)(param_3 + 0x10);
  pdVar29 = *(double **)(param_2 + 0x10);
  uVar42 = *(ulong *)(param_3 + 0x50) >> 3;
  pdVar25 = *(double **)(param_4 + 0x10);
  lVar39 = *(long *)(param_2 + 0x50);
                    /* try { // try from 002d1928 to 003d192b has its CatchHandler @ 002d16ac */
  if (*(int *)(param_4 + 8) < 2) {
    uVar49 = 0;
    uVar8 = *(uint *)(param_4 + 0xc);
                    /* try { // try from 002d2488 to 003d248b has its CatchHandler @ 002d251c */
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
  }
  else {
                    /* catch() { ... } // from try @ 002d1770 with catch @ 002d192c
                       catch() { ... } // from try @ 002d17ec with catch @ 002d192c
                       catch() { ... } // from try @ 002d18dc with catch @ 002d192c */
                    /* catch() { ... } // from try @ 002d18b0 with catch @ 002d1934 */
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
    uVar49 = *(ulong *)(param_4 + 0x50) >> 3;
  }
  if (pdVar25 == (double *)0x0) {
    if (0 < iVar10) {
      uVar8 = uVar9 - 4 >> 2;
      iVar32 = (uVar8 + 1) * 4;
      if ((int)(uVar9 - 3) < 1) {
        iVar32 = 0;
      }
      local_448 = 0;
                    /* try { // try from 002d24d4 to 003d24d7 has its CatchHandler @ 002d2530 */
                    /* try { // try from 002d24dc to 003d24df has its CatchHandler @ 002d251c */
      do {
        pbVar27 = (byte *)((long)pdVar29 + 1);
        pdVar25 = local_470;
        iVar12 = local_448;
        do {
          dVar45 = 0.0;
          if (0 < (int)(uVar9 - 3)) {
            pbVar23 = pbVar27;
            pdVar22 = pdVar29;
            do {
                    /* catch() { ... } // from try @ 002d2488 with catch @ 002d251c
                       catch() { ... } // from try @ 002d24dc with catch @ 002d251c */
              pbVar5 = pbVar23 + 4;
                    /* try { // try from 002d252c to 003d252f has its CatchHandler @ 002d21c8 */
                    /* catch() { ... } // from try @ 002d24d4 with catch @ 002d2530 */
                    /* catch() { ... } // from try @ 002d22c0 with catch @ 002d2540
                       catch() { ... } // from try @ 002d23e8 with catch @ 002d2540 */
              dVar45 = dVar45 + (double)*(byte *)((long)pdVar22 + 1) * (double)*pbVar23 +
                                (double)pbVar23[-1] * (double)*(byte *)pdVar22 +
                                (double)pbVar23[1] * (double)*(byte *)((long)pdVar22 + 2) +
                                (double)pbVar23[2] * (double)*(byte *)((long)pdVar22 + 3);
              pbVar23 = pbVar5;
              pdVar22 = (double *)((long)pdVar22 + 4);
            } while (pbVar5 != pbVar27 + (ulong)uVar8 * 4 + 4);
          }
                    /* try { // try from 002d2578 to 003d257b has its CatchHandler @ 002d21c8 */
          if (iVar32 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d23e0 with catch @ 002d257c */
            lVar24 = 0;
            do {
              lVar33 = lVar24 + iVar32;
              lVar65 = lVar24 + (long)iVar32 + -1;
                    /* catch() { ... } // from try @ 002d25e0 with catch @ 002d258c
                       catch() { ... } // from try @ 002d26f0 with catch @ 002d258c
                       catch() { ... } // from try @ 002d354c with catch @ 002d258c
                       catch() { ... } // from try @ 002d4858 with catch @ 002d258c */
              lVar24 = lVar24 + 1;
              dVar45 = dVar45 + (double)pbVar27[lVar65] * (double)*(byte *)((long)pdVar29 + lVar33);
            } while (lVar24 != (ulong)((uVar9 - 1) - iVar32) + 1);
          }
          iVar12 = iVar12 + 1;
          pbVar27 = pbVar27 + lVar39;
          *pdVar25 = dVar45 * param_1;
          pdVar25 = pdVar25 + 1;
        } while (iVar12 < iVar10);
        local_448 = local_448 + 1;
        local_470 = local_470 + uVar42 + 1;
        pdVar29 = (double *)((long)pdVar29 + lVar39);
      } while (local_448 != iVar10);
    }
  }
  else {
    uVar38 = (ulong)uVar9;
    uVar40 = -(ulong)(uVar9 >> 0x1f) & 0xfffffff800000000 | uVar38 << 3;
    pdVar22 = adStack_408;
                    /* catch() { ... } // from try @ 002d1864 with catch @ 002d1968
                       catch() { ... } // from try @ 002d18b8 with catch @ 002d1968 */
    lVar24 = 0x20;
    if (uVar8 != uVar9) {
      lVar24 = 0;
    }
    local_418 = pdVar22;
                    /* catch() { ... } // from try @ 002d19a4 with catch @ 002d1970
                       catch() { ... } // from try @ 002d1ad0 with catch @ 002d1970
                       catch() { ... } // from try @ 002d1bec with catch @ 002d1970 */
    local_410 = 0x408;
    if (uVar40 < 0x409) {
      local_410 = uVar40;
                    /* try { // try from 002d25e0 to 003d2603 has its CatchHandler @ 002d258c */
      bVar21 = false;
    }
    else {
      local_418 = operator_new__(uVar40);
      local_410 = uVar40;
      bVar21 = local_418 != pdVar22;
      pdVar22 = local_418;
    }
                    /* try { // try from 002d19a4 to 003d19a7 has its CatchHandler @ 002d1970 */
    if (0 < iVar10) {
      uVar4 = (uint)((ulong)pdVar22 >> 3) & 1;
      uVar7 = uVar9;
      if (uVar4 < uVar9) {
        uVar7 = uVar4;
      }
      iVar12 = uVar9 - uVar7;
      uVar11 = uVar9 - 4 >> 2;
      lVar33 = 0;
      local_468 = (double *)((long)pdVar29 + uVar38);
      pdVar6 = pdVar22 + uVar38;
      uVar38 = (ulong)uVar7;
      uVar13 = (uVar9 - 1) - uVar7;
      uVar4 = (iVar12 - 0x10U >> 4) + 1;
      local_460 = 0;
                    /* try { // try from 002d1a34 to 003d1a7b has its CatchHandler @ 002d1bf0 */
      iVar32 = 0;
      lVar65 = NEON_shl(uVar38,3);
      iVar64 = uVar4 * 0x10;
      pdVar30 = pdVar25;
      pdVar31 = pdVar29;
      do {
        if ((int)uVar8 < (int)uVar9) {
          if (0 < (int)uVar9) {
                    /* try { // try from 002d20bc to 003d20bf has its CatchHandler @ 002d21c0 */
            if ((uVar9 < 0x14 || pdVar31 < pdVar6 && pdVar22 < local_468) ||
               (pdVar22 < pdVar30 + 1 && pdVar30 < pdVar6)) {
              lVar26 = 0;
              do {
                pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - *pdVar30;
                lVar26 = lVar26 + 1;
              } while ((int)lVar26 < (int)uVar9);
            }
            else {
              if (uVar7 != 0) {
                *pdVar22 = (double)*(byte *)pdVar31 - *pdVar30;
              }
              uVar35 = (uint)(uVar7 != 0);
              if (0xe < uVar13) {
                dVar45 = *pdVar30;
                uVar76 = 0;
                    /* try { // try from 002d2108 to 003d210b has its CatchHandler @ 002d218c */
                    /* try { // try from 002d2110 to 003d2113 has its CatchHandler @ 002d21c0 */
                pdVar28 = (double *)((long)pdVar22 + lVar65);
                pbVar27 = (byte *)((long)pdVar29 + lVar33 + uVar38);
                do {
                    /* try { // try from 002d2134 to 003d2137 has its CatchHandler @ 002d2184 */
                  bVar14 = pbVar27[0xc];
                  bVar15 = pbVar27[0xd];
                  bVar16 = pbVar27[0xe];
                  bVar17 = pbVar27[0xf];
                  uVar76 = uVar76 + 1;
                    /* catch() { ... } // from try @ 002d203c with catch @ 002d2150 */
                  auVar72._0_8_ = (long)(int)(CONCAT12(pbVar27[1],(ushort)*pbVar27) & 0xffff);
                  auVar72._8_8_ = (long)(int)(uint)pbVar27[1];
                  auVar70._0_8_ = (long)(int)(uint)pbVar27[2];
                  auVar70._8_8_ = (long)(int)(uint)pbVar27[3];
                  auVar78._0_8_ = (long)(int)(uint)pbVar27[4];
                  auVar78._8_8_ = (long)(int)(uint)pbVar27[5];
                  auVar63._0_8_ = (long)(int)(uint)pbVar27[6];
                  auVar63._8_8_ = (long)(int)(uint)pbVar27[7];
                    /* try { // try from 002d2180 to 003d2183 has its CatchHandler @ 002d1f04 */
                  auVar61 = NEON_scvtf(auVar72,8);
                    /* catch() { ... } // from try @ 002d1fc8 with catch @ 002d2184
                       catch() { ... } // from try @ 002d2044 with catch @ 002d2184
                       catch() { ... } // from try @ 002d2134 with catch @ 002d2184 */
                  auVar77._0_8_ = (long)(int)(CONCAT12(pbVar27[9],(ushort)pbVar27[8]) & 0xffff);
                  auVar77._8_8_ = (long)(int)(uint)pbVar27[9];
                    /* catch() { ... } // from try @ 002d2108 with catch @ 002d218c */
                  auVar70 = NEON_scvtf(auVar70,8);
                  auVar74._0_8_ = (long)(int)(uint)pbVar27[10];
                  auVar74._8_8_ = (long)(int)(uint)pbVar27[0xb];
                  auVar78 = NEON_scvtf(auVar78,8);
                  auVar63 = NEON_scvtf(auVar63,8);
                  pdVar28[1] = auVar61._8_8_ - dVar45;
                  *pdVar28 = auVar61._0_8_ - dVar45;
                  auVar72 = NEON_scvtf(auVar77,8);
                  auVar75._0_8_ = (long)(int)(uint)bVar14;
                  auVar75._8_8_ = (long)(int)(uint)bVar15;
                  auVar74 = NEON_scvtf(auVar74,8);
                  auVar61._0_8_ = (long)(int)(uint)bVar16;
                  auVar61._8_8_ = (long)(int)(uint)bVar17;
                    /* catch() { ... } // from try @ 002d20bc with catch @ 002d21c0
                       catch() { ... } // from try @ 002d2110 with catch @ 002d21c0 */
                  pdVar28[3] = auVar70._8_8_ - dVar45;
                  pdVar28[2] = auVar70._0_8_ - dVar45;
                  auVar70 = NEON_scvtf(auVar75,8);
                    /* catch() { ... } // from try @ 002d252c with catch @ 002d21c8
                       catch() { ... } // from try @ 002d2578 with catch @ 002d21c8 */
                  pdVar28[4] = auVar78._0_8_ - dVar45;
                  pdVar28[5] = auVar78._8_8_ - dVar45;
                  auVar61 = NEON_scvtf(auVar61,8);
                  pdVar28[7] = auVar63._8_8_ - dVar45;
                  pdVar28[6] = auVar63._0_8_ - dVar45;
                  pdVar28[9] = auVar72._8_8_ - dVar45;
                  pdVar28[8] = auVar72._0_8_ - dVar45;
                  pdVar28[0xb] = auVar74._8_8_ - dVar45;
                  pdVar28[10] = auVar74._0_8_ - dVar45;
                  pdVar28[0xd] = auVar70._8_8_ - dVar45;
                  pdVar28[0xc] = auVar70._0_8_ - dVar45;
                  pdVar28[0xf] = auVar61._8_8_ - dVar45;
                  pdVar28[0xe] = auVar61._0_8_ - dVar45;
                  pdVar28 = pdVar28 + 0x10;
                  pbVar27 = pbVar27 + 0x10;
                } while (uVar76 < uVar4);
                uVar35 = uVar35 + iVar64;
                if (iVar64 == iVar12) goto LAB_002d1eb4;
              }
              iVar34 = uVar35 + 1;
              pdVar22[(int)uVar35] = (double)*(byte *)((long)pdVar31 + (long)(int)uVar35) - *pdVar30
              ;
              if (iVar34 < (int)uVar9) {
                iVar36 = uVar35 + 2;
                pdVar22[iVar34] = (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30;
                if (iVar36 < (int)uVar9) {
                  iVar34 = uVar35 + 3;
                  pdVar22[iVar36] = (double)*(byte *)((long)pdVar31 + (long)iVar36) - *pdVar30;
                  if (iVar34 < (int)uVar9) {
                    iVar36 = uVar35 + 4;
                    pdVar22[iVar34] = (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30;
                    if (iVar36 < (int)uVar9) {
                      iVar34 = uVar35 + 5;
                      pdVar22[iVar36] = (double)*(byte *)((long)pdVar31 + (long)iVar36) - *pdVar30;
                      if (iVar34 < (int)uVar9) {
                    /* try { // try from 002d22c0 to 003d23b3 has its CatchHandler @ 002d2540 */
                        iVar36 = uVar35 + 6;
                        pdVar22[iVar34] = (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30
                        ;
                        if (iVar36 < (int)uVar9) {
                          iVar34 = uVar35 + 7;
                          pdVar22[iVar36] =
                               (double)*(byte *)((long)pdVar31 + (long)iVar36) - *pdVar30;
                          if (iVar34 < (int)uVar9) {
                            iVar36 = uVar35 + 8;
                            pdVar22[iVar34] =
                                 (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30;
                            if (iVar36 < (int)uVar9) {
                              iVar34 = uVar35 + 9;
                              pdVar22[iVar36] =
                                   (double)*(byte *)((long)pdVar31 + (long)iVar36) - *pdVar30;
                              if (iVar34 < (int)uVar9) {
                                iVar36 = uVar35 + 10;
                                pdVar22[iVar34] =
                                     (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30;
                                if (iVar36 < (int)uVar9) {
                                  iVar34 = uVar35 + 0xb;
                                  pdVar22[iVar36] =
                                       (double)*(byte *)((long)pdVar31 + (long)iVar36) - *pdVar30;
                                  if (iVar34 < (int)uVar9) {
                                    iVar36 = uVar35 + 0xc;
                                    pdVar22[iVar34] =
                                         (double)*(byte *)((long)pdVar31 + (long)iVar34) - *pdVar30;
                                    if (iVar36 < (int)uVar9) {
                                      iVar34 = uVar35 + 0xd;
                                      pdVar22[iVar36] =
                                           (double)*(byte *)((long)pdVar31 + (long)iVar36) -
                                           *pdVar30;
                                      if (iVar34 < (int)uVar9) {
                    /* try { // try from 002d23e0 to 003d23e3 has its CatchHandler @ 002d257c */
                                        iVar36 = uVar35 + 0xe;
                    /* try { // try from 002d23e8 to 003d243f has its CatchHandler @ 002d2540 */
                                        pdVar22[iVar34] =
                                             (double)*(byte *)((long)pdVar31 + (long)iVar34) -
                                             *pdVar30;
                                        if (iVar36 < (int)uVar9) {
                                          pdVar22[iVar36] =
                                               (double)*(byte *)((long)pdVar31 + (long)iVar36) -
                                               *pdVar30;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar9) {
                    /* try { // try from 002d1aa8 to 003d1aab has its CatchHandler @ 002d1bbc */
                    /* try { // try from 002d1ab0 to 003d1ab3 has its CatchHandler @ 002d1bf0 */
                    /* try { // try from 002d1ad0 to 003d1ad3 has its CatchHandler @ 002d1970 */
          if ((uVar9 < 0x14 || pdVar31 < pdVar6 && pdVar22 < local_468) ||
             (pdVar22 < pdVar30 + 0x10 && pdVar30 < pdVar22 + 0x10)) {
            lVar26 = 0;
            do {
              pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
              lVar26 = lVar26 + 1;
            } while ((int)lVar26 < (int)uVar9);
          }
          else {
            if (uVar7 != 0) {
              *pdVar22 = (double)*(byte *)pdVar31 - *pdVar30;
            }
            uVar35 = (uint)(uVar7 != 0);
            if (0xe < uVar13) {
              uVar76 = 0;
              pdVar28 = (double *)((long)pdVar25 + local_460 + lVar65);
                    /* try { // try from 002d1b28 to 003d1b2b has its CatchHandler @ 002d1c2c */
              pdVar41 = (double *)((long)pdVar22 + lVar65);
              pbVar27 = (byte *)((long)pdVar29 + lVar33 + uVar38);
              do {
                dVar45 = *pdVar28;
                pdVar44 = pdVar28 + 1;
                dVar59 = pdVar28[3];
                dVar58 = pdVar28[2];
                bVar14 = pbVar27[0xc];
                bVar15 = pbVar27[0xd];
                bVar16 = pbVar27[0xe];
                bVar17 = pbVar27[0xf];
                dVar57 = pdVar28[7];
                dVar56 = pdVar28[6];
                dVar55 = pdVar28[0xb];
                dVar54 = pdVar28[10];
                dVar53 = pdVar28[0xd];
                dVar52 = pdVar28[0xc];
                    /* try { // try from 002d1b74 to 003d1b77 has its CatchHandler @ 002d1bf8 */
                    /* try { // try from 002d1b7c to 003d1b7f has its CatchHandler @ 002d1c2c */
                uVar76 = uVar76 + 1;
                dVar47 = pdVar28[4];
                dVar18 = pdVar28[5];
                    /* try { // try from 002d1ba0 to 003d1ba3 has its CatchHandler @ 002d1bf0 */
                dVar68 = pdVar28[9];
                dVar67 = pdVar28[8];
                auVar62._0_8_ = (long)(int)(CONCAT12(pbVar27[1],(ushort)*pbVar27) & 0xffff);
                auVar62._8_8_ = (long)(int)(uint)pbVar27[1];
                    /* catch() { ... } // from try @ 002d1aa8 with catch @ 002d1bbc */
                dVar51 = pdVar28[0xf];
                dVar50 = pdVar28[0xe];
                auVar73._0_8_ = (long)(int)(uint)pbVar27[2];
                auVar73._8_8_ = (long)(int)(uint)pbVar27[3];
                auVar60._0_8_ = (long)(int)(uint)pbVar27[4];
                auVar60._8_8_ = (long)(int)(uint)pbVar27[5];
                auVar69._0_8_ = (long)(int)(uint)pbVar27[6];
                auVar69._8_8_ = (long)(int)(uint)pbVar27[7];
                pdVar28 = pdVar28 + 0x10;
                auVar63 = NEON_scvtf(auVar62,8);
                auVar46._0_8_ = (long)(int)(CONCAT12(pbVar27[9],(ushort)pbVar27[8]) & 0xffff);
                auVar46._8_8_ = (long)(int)(uint)pbVar27[9];
                auVar74 = NEON_scvtf(auVar73,8);
                auVar71._0_8_ = (long)(int)(uint)pbVar27[10];
                auVar71._8_8_ = (long)(int)(uint)pbVar27[0xb];
                    /* try { // try from 002d1bec to 003d1bef has its CatchHandler @ 002d1970 */
                auVar61 = NEON_scvtf(auVar60,8);
                    /* catch() { ... } // from try @ 002d1a34 with catch @ 002d1bf0
                       catch() { ... } // from try @ 002d1ab0 with catch @ 002d1bf0
                       catch() { ... } // from try @ 002d1ba0 with catch @ 002d1bf0 */
                auVar70 = NEON_scvtf(auVar69,8);
                    /* catch() { ... } // from try @ 002d1b74 with catch @ 002d1bf8 */
                pdVar41[1] = auVar63._8_8_ - *pdVar44;
                *pdVar41 = auVar63._0_8_ - dVar45;
                auVar63 = NEON_scvtf(auVar46,8);
                auVar66._0_8_ = (long)(int)(uint)bVar14;
                auVar66._8_8_ = (long)(int)(uint)bVar15;
                auVar72 = NEON_scvtf(auVar71,8);
                auVar48._0_8_ = (long)(int)(uint)bVar16;
                auVar48._8_8_ = (long)(int)(uint)bVar17;
                pdVar41[3] = auVar74._8_8_ - dVar59;
                pdVar41[2] = auVar74._0_8_ - dVar58;
                auVar74 = NEON_scvtf(auVar66,8);
                    /* catch() { ... } // from try @ 002d1b28 with catch @ 002d1c2c
                       catch() { ... } // from try @ 002d1b7c with catch @ 002d1c2c */
                pdVar41[5] = auVar61._8_8_ - dVar18;
                pdVar41[4] = auVar61._0_8_ - dVar47;
                auVar61 = NEON_scvtf(auVar48,8);
                    /* catch() { ... } // from try @ 002d1c6c with catch @ 002d1c34
                       catch() { ... } // from try @ 002d1d9c with catch @ 002d1c34
                       catch() { ... } // from try @ 002d1ebc with catch @ 002d1c34 */
                pdVar41[7] = auVar70._8_8_ - dVar57;
                pdVar41[6] = auVar70._0_8_ - dVar56;
                pdVar41[9] = auVar63._8_8_ - dVar68;
                pdVar41[8] = auVar63._0_8_ - dVar67;
                pdVar41[0xb] = auVar72._8_8_ - dVar55;
                pdVar41[10] = auVar72._0_8_ - dVar54;
                pdVar41[0xd] = auVar74._8_8_ - dVar53;
                pdVar41[0xc] = auVar74._0_8_ - dVar52;
                pdVar41[0xf] = auVar61._8_8_ - dVar51;
                pdVar41[0xe] = auVar61._0_8_ - dVar50;
                pdVar41 = pdVar41 + 0x10;
                pbVar27 = pbVar27 + 0x10;
              } while (uVar76 < uVar4);
              uVar35 = uVar35 + iVar64;
              if (iVar64 == iVar12) goto LAB_002d1eb4;
            }
            lVar26 = (long)(int)uVar35;
                    /* try { // try from 002d1c6c to 003d1c6f has its CatchHandler @ 002d1c34 */
            pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
            if ((int)(uVar35 + 1) < (int)uVar9) {
              lVar26 = (long)(int)(uVar35 + 1);
              pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
              if ((int)(uVar35 + 2) < (int)uVar9) {
                lVar26 = (long)(int)(uVar35 + 2);
                pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                if ((int)(uVar35 + 3) < (int)uVar9) {
                  lVar26 = (long)(int)(uVar35 + 3);
                    /* try { // try from 002d1cfc to 003d1d47 has its CatchHandler @ 002d1ec0 */
                  pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                  if ((int)(uVar35 + 4) < (int)uVar9) {
                    lVar26 = (long)(int)(uVar35 + 4);
                    pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                    if ((int)(uVar35 + 5) < (int)uVar9) {
                      lVar26 = (long)(int)(uVar35 + 5);
                      pdVar22[lVar26] = (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                      if ((int)(uVar35 + 6) < (int)uVar9) {
                        lVar26 = (long)(int)(uVar35 + 6);
                    /* try { // try from 002d1d74 to 003d1d77 has its CatchHandler @ 002d1e8c */
                        pdVar22[lVar26] =
                             (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                    /* try { // try from 002d1d7c to 003d1d7f has its CatchHandler @ 002d1ec0 */
                        if ((int)(uVar35 + 7) < (int)uVar9) {
                          lVar26 = (long)(int)(uVar35 + 7);
                    /* try { // try from 002d1d9c to 003d1d9f has its CatchHandler @ 002d1c34 */
                          pdVar22[lVar26] =
                               (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                          if ((int)(uVar35 + 8) < (int)uVar9) {
                            lVar26 = (long)(int)(uVar35 + 8);
                            pdVar22[lVar26] =
                                 (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                            if ((int)(uVar35 + 9) < (int)uVar9) {
                              lVar26 = (long)(int)(uVar35 + 9);
                              pdVar22[lVar26] =
                                   (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                              if ((int)(uVar35 + 10) < (int)uVar9) {
                    /* try { // try from 002d1df8 to 003d1dfb has its CatchHandler @ 002d1efc */
                                lVar26 = (long)(int)(uVar35 + 10);
                                pdVar22[lVar26] =
                                     (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                                if ((int)(uVar35 + 0xb) < (int)uVar9) {
                                  lVar26 = (long)(int)(uVar35 + 0xb);
                                  pdVar22[lVar26] =
                                       (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26];
                    /* try { // try from 002d1e44 to 003d1e47 has its CatchHandler @ 002d1ec8 */
                                  if ((int)(uVar35 + 0xc) < (int)uVar9) {
                                    lVar26 = (long)(int)(uVar35 + 0xc);
                    /* try { // try from 002d1e4c to 003d1e4f has its CatchHandler @ 002d1efc */
                                    pdVar22[lVar26] =
                                         (double)*(byte *)((long)pdVar31 + lVar26) - pdVar30[lVar26]
                                    ;
                                    if ((int)(uVar35 + 0xd) < (int)uVar9) {
                    /* try { // try from 002d1e70 to 003d1e73 has its CatchHandler @ 002d1ec0 */
                                      lVar26 = (long)(int)(uVar35 + 0xd);
                    /* catch() { ... } // from try @ 002d1d74 with catch @ 002d1e8c */
                                      pdVar22[lVar26] =
                                           (double)*(byte *)((long)pdVar31 + lVar26) -
                                           pdVar30[lVar26];
                                      if ((int)(uVar35 + 0xe) < (int)uVar9) {
                                        lVar26 = (long)(int)(uVar35 + 0xe);
                                        pdVar22[lVar26] =
                                             (double)*(byte *)((long)pdVar31 + lVar26) -
                                             pdVar30[lVar26];
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d1eb4:
                    /* try { // try from 002d1ebc to 003d1ebf has its CatchHandler @ 002d1c34 */
                    /* catch() { ... } // from try @ 002d1cfc with catch @ 002d1ec0
                       catch() { ... } // from try @ 002d1d7c with catch @ 002d1ec0
                       catch() { ... } // from try @ 002d1e70 with catch @ 002d1ec0 */
        pbVar27 = (byte *)((long)pdVar29 + lVar33 + 1);
                    /* catch() { ... } // from try @ 002d1e44 with catch @ 002d1ec8 */
        pdVar41 = local_470;
        pdVar28 = pdVar30;
        iVar34 = iVar32;
        do {
          pdVar44 = pdVar28;
          if ((int)uVar8 < (int)uVar9) {
            local_420 = *pdVar28;
            local_428 = local_420;
            local_430 = local_420;
            local_438 = local_420;
            pdVar44 = &local_438;
          }
          dVar45 = 0.0;
                    /* catch() { ... } // from try @ 002d1df8 with catch @ 002d1efc
                       catch() { ... } // from try @ 002d1e4c with catch @ 002d1efc */
          if ((int)uVar9 < 4) {
            iVar36 = 0;
          }
          else {
                    /* catch() { ... } // from try @ 002d1f38 with catch @ 002d1f04
                       catch() { ... } // from try @ 002d2064 with catch @ 002d1f04
                       catch() { ... } // from try @ 002d2180 with catch @ 002d1f04 */
            pbVar23 = pbVar27;
            pdVar37 = pdVar44;
            pdVar43 = pdVar22;
            do {
              pbVar5 = pbVar23 + 4;
              pdVar1 = pdVar37 + 1;
              dVar47 = *pdVar37;
              pdVar2 = pdVar37 + 2;
                    /* try { // try from 002d1f38 to 003d1f3b has its CatchHandler @ 002d1f04 */
              pdVar3 = pdVar37 + 3;
              pdVar37 = (double *)((long)pdVar37 + lVar24);
              dVar45 = dVar45 + ((double)*pbVar23 - *pdVar1) * pdVar43[1] +
                                ((double)pbVar23[-1] - dVar47) * *pdVar43 +
                                ((double)pbVar23[1] - *pdVar2) * pdVar43[2] +
                                ((double)pbVar23[2] - *pdVar3) * pdVar43[3];
              pbVar23 = pbVar5;
              pdVar43 = pdVar43 + 4;
            } while (pbVar5 != pbVar27 + (ulong)uVar11 * 4 + 4);
            pdVar44 = (double *)((long)pdVar44 + lVar24 + (ulong)uVar11 * lVar24);
            iVar36 = (uVar11 + 1) * 4;
          }
          if (iVar36 < (int)uVar9) {
            lVar26 = 0;
            do {
              lVar19 = lVar26 + (long)iVar36 + -1;
              pdVar37 = pdVar44 + lVar26;
              lVar20 = iVar36 + lVar26;
              lVar26 = lVar26 + 1;
                    /* try { // try from 002d1fc8 to 003d200f has its CatchHandler @ 002d2184 */
              dVar45 = dVar45 + ((double)pbVar27[lVar19] - *pdVar37) * pdVar22[lVar20];
            } while (lVar26 != (ulong)((uVar9 - 1) - iVar36) + 1);
          }
          iVar34 = iVar34 + 1;
          pdVar28 = pdVar28 + uVar49;
          pbVar27 = pbVar27 + lVar39;
          *pdVar41 = dVar45 * param_1;
          pdVar41 = pdVar41 + 1;
        } while (iVar34 < iVar10);
        iVar32 = iVar32 + 1;
        pdVar30 = pdVar30 + uVar49;
        lVar33 = lVar33 + lVar39;
        pdVar31 = (double *)((long)pdVar31 + lVar39);
        local_470 = local_470 + uVar42 + 1;
        local_460 = local_460 + uVar49 * 8;
        local_468 = (double *)((long)local_468 + lVar39);
      } while (iVar32 != iVar10);
    }
    if (bVar21) {
      local_418 = pdVar22;
      local_410 = uVar40;
      operator_delete__(pdVar22);
    }
  }
                    /* try { // try from 002d203c to 003d203f has its CatchHandler @ 002d2150 */
                    /* try { // try from 002d2044 to 003d2047 has its CatchHandler @ 002d2184 */
                    /* try { // try from 002d2064 to 003d2067 has its CatchHandler @ 002d1f04 */
  return;
}


==================================================================

### FUNC 002d25e8 (3276 bytes) name=FUN_002d25e8

void FUN_002d25e8(double param_1,long param_2,long param_3,long param_4)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  uint uVar4;
  byte *pbVar5;
  float *pfVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  bool bVar15;
  float *pfVar16;
  byte *pbVar17;
  long lVar18;
  int iVar19;
  float *pfVar20;
  ulong uVar21;
  long lVar22;
  float *pfVar23;
  ulong uVar24;
  float *pfVar25;
  float *pfVar26;
  byte *pbVar27;
  int iVar28;
  uint uVar29;
  long lVar30;
  float *pfVar31;
  float *pfVar32;
  uint uVar33;
  int iVar34;
  ulong uVar35;
  float *pfVar36;
  long lVar37;
  int iVar38;
  float *pfVar39;
  float *pfVar40;
  ulong uVar41;
  float *pfVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  double dVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  float fVar50;
  ulong uVar51;
  float *pfVar52;
  long lVar53;
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  int iVar62;
  undefined8 uVar63;
  undefined8 uVar64;
  long lVar65;
  float local_428;
  float local_424;
  float local_420;
  float local_41c;
  float *local_418;
  ulong local_410;
  float afStack_408 [258];
  
  pfVar42 = *(float **)(param_3 + 0x10);
  pfVar23 = *(float **)(param_2 + 0x10);
  uVar41 = *(ulong *)(param_3 + 0x50) >> 2;
  pfVar20 = *(float **)(param_4 + 0x10);
  lVar37 = *(long *)(param_2 + 0x50);
                    /* try { // try from 002d2638 to 003d263b has its CatchHandler @ 002d4928 */
  if (*(int *)(param_4 + 8) < 2) {
    uVar51 = 0;
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
    uVar51 = *(ulong *)(param_4 + 0x50) >> 2;
  }
  if (pfVar20 == (float *)0x0) {
    if (0 < iVar10) {
      uVar8 = uVar9 - 4 >> 2;
      iVar28 = (uVar8 + 1) * 4;
      if ((int)(uVar9 - 3) < 1) {
        iVar28 = 0;
      }
      iVar38 = 0;
      do {
        pbVar27 = (byte *)((long)pfVar23 + 1);
        pfVar20 = pfVar42;
        iVar62 = iVar38;
        do {
          dVar46 = 0.0;
          if (0 < (int)(uVar9 - 3)) {
            pbVar17 = pbVar27;
            pfVar16 = pfVar23;
            do {
              pbVar5 = pbVar17 + 4;
                    /* try { // try from 002d320c to 003d3263 has its CatchHandler @ 002d4960 */
              dVar46 = dVar46 + (double)*(byte *)((long)pfVar16 + 1) * (double)*pbVar17 +
                                (double)pbVar17[-1] * (double)*(byte *)pfVar16 +
                                (double)pbVar17[1] * (double)*(byte *)((long)pfVar16 + 2) +
                                (double)pbVar17[2] * (double)*(byte *)((long)pfVar16 + 3);
              pbVar17 = pbVar5;
              pfVar16 = pfVar16 + 1;
            } while (pbVar5 != pbVar27 + (ulong)uVar8 * 4 + 4);
          }
          if (iVar28 < (int)uVar9) {
            lVar18 = 0;
            do {
              lVar30 = lVar18 + iVar28;
              lVar65 = lVar18 + (long)iVar28 + -1;
              lVar18 = lVar18 + 1;
              dVar46 = dVar46 + (double)pbVar27[lVar65] * (double)*(byte *)((long)pfVar23 + lVar30);
            } while (lVar18 != (ulong)((uVar9 - 1) - iVar28) + 1);
          }
          iVar62 = iVar62 + 1;
          pbVar27 = pbVar27 + lVar37;
          *pfVar20 = (float)(dVar46 * param_1);
          pfVar20 = pfVar20 + 1;
        } while (iVar62 < iVar10);
        iVar38 = iVar38 + 1;
                    /* try { // try from 002d3290 to 003d3293 has its CatchHandler @ 002d4c80 */
        pfVar42 = pfVar42 + uVar41 + 1;
                    /* try { // try from 002d3298 to 003d329b has its CatchHandler @ 002d4960 */
        pfVar23 = (float *)((long)pfVar23 + lVar37);
      } while (iVar38 != iVar10);
    }
  }
  else {
    uVar35 = (ulong)uVar9;
                    /* try { // try from 002d2668 to 003d266b has its CatchHandler @ 002d4918 */
                    /* try { // try from 002d2670 to 003d26b7 has its CatchHandler @ 002d4928 */
    uVar21 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | uVar35 << 2;
    pfVar16 = afStack_408;
    lVar18 = 0x10;
    if (uVar8 != uVar9) {
      lVar18 = 0;
    }
    local_418 = pfVar16;
    local_410 = 0x408;
    if (uVar21 < 0x409) {
      local_410 = uVar21;
      bVar15 = false;
    }
    else {
      local_418 = operator_new__(uVar21);
      bVar15 = local_418 != pfVar16;
      local_410 = uVar21;
      pfVar16 = local_418;
    }
    if (0 < iVar10) {
                    /* try { // try from 002d26d4 to 003d26d7 has its CatchHandler @ 002d4bbc */
      uVar7 = -((uint)((ulong)pfVar16 >> 2) & 3) & 3;
                    /* try { // try from 002d26dc to 003d26df has its CatchHandler @ 002d4928 */
      uVar11 = uVar9 - 4 >> 2;
      if (uVar9 < uVar7) {
        uVar7 = uVar9;
      }
                    /* try { // try from 002d26f0 to 003d2703 has its CatchHandler @ 002d258c */
      iVar38 = uVar9 - uVar7;
      lVar30 = 0;
      uVar24 = (ulong)uVar7;
      uVar12 = (uVar9 - 1) - uVar7;
      uVar4 = (iVar38 - 0x10U >> 4) + 1;
      lVar53 = NEON_shl(uVar24,2);
      iVar62 = uVar4 * 0x10;
      pfVar52 = (float *)((long)pfVar23 + uVar35);
      iVar28 = 0;
      lVar65 = 0;
                    /* try { // try from 002d2764 to 003d2767 has its CatchHandler @ 002d4928 */
      pfVar6 = pfVar16 + uVar35;
      pfVar25 = pfVar20;
      pfVar26 = pfVar23;
      do {
        if ((int)uVar8 < (int)uVar9) {
          if (0 < (int)uVar9) {
                    /* try { // try from 002d2d74 to 003d2d77 has its CatchHandler @ 002d4b98 */
                    /* try { // try from 002d2d94 to 003d2d97 has its CatchHandler @ 002d4a58 */
            if ((uVar9 < 0x13 || pfVar26 < pfVar6 && pfVar16 < pfVar52) ||
               (pfVar16 < pfVar25 + 1 && pfVar25 < pfVar6)) {
              lVar22 = 0;
              do {
                pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - *pfVar25;
                lVar22 = lVar22 + 1;
                    /* try { // try from 002d3104 to 003d3107 has its CatchHandler @ 002d48f0 */
              } while ((int)lVar22 < (int)uVar9);
            }
            else {
                    /* try { // try from 002d2db4 to 003d2db7 has its CatchHandler @ 002d4c20 */
              uVar33 = uVar7;
              if ((uVar7 != 0) && (*pfVar16 = (float)*(byte *)pfVar26 - *pfVar25, uVar7 != 1)) {
                    /* try { // try from 002d2de4 to 003d2de7 has its CatchHandler @ 002d4bf8 */
                pfVar16[1] = (float)*(byte *)((long)pfVar26 + 1) - *pfVar25;
                if (uVar7 == 3) {
                  pfVar16[2] = (float)*(byte *)((long)pfVar26 + 2) - *pfVar25;
                }
                else {
                  uVar33 = 2;
                }
              }
                    /* try { // try from 002d2e14 to 003d2e17 has its CatchHandler @ 002d4bcc */
              if (0xe < uVar12) {
                    /* try { // try from 002d2e1c to 003d2e1f has its CatchHandler @ 002d4bf8 */
                fVar50 = *pfVar25;
                    /* try { // try from 002d2e24 to 003d2e27 has its CatchHandler @ 002d4a58 */
                uVar29 = 0;
                pfVar39 = (float *)((long)pfVar16 + lVar53);
                pbVar27 = (byte *)((long)pfVar23 + lVar30 + uVar24);
                do {
                  uVar29 = uVar29 + 1;
                  auVar54._6_2_ = 0;
                  auVar54._0_6_ =
                       (uint6)CONCAT14(pbVar27[1],(uint)CONCAT12(pbVar27[1],(ushort)*pbVar27)) &
                       0xffff0000ffff;
                  auVar54[8] = pbVar27[2];
                  auVar54._9_3_ = 0;
                  auVar54[0xc] = pbVar27[3];
                  auVar54._13_3_ = 0;
                  auVar58._1_3_ = 0;
                  auVar58[0] = pbVar27[4];
                  auVar58[4] = pbVar27[5];
                  auVar58._5_3_ = 0;
                  auVar58[8] = pbVar27[6];
                  auVar58._9_3_ = 0;
                  auVar58[0xc] = pbVar27[7];
                  auVar58._13_3_ = 0;
                  auVar61._6_2_ = 0;
                  auVar61._0_6_ =
                       (uint6)CONCAT14(pbVar27[9],(uint)CONCAT12(pbVar27[9],(ushort)pbVar27[8])) &
                       0xffff0000ffff;
                  auVar61[8] = pbVar27[10];
                  auVar61._9_3_ = 0;
                  auVar61[0xc] = pbVar27[0xb];
                  auVar61._13_3_ = 0;
                  auVar44._1_3_ = 0;
                  auVar44[0] = pbVar27[0xc];
                  auVar44[4] = pbVar27[0xd];
                  auVar44._5_3_ = 0;
                  auVar44[8] = pbVar27[0xe];
                  auVar44._9_3_ = 0;
                  auVar44[0xc] = pbVar27[0xf];
                  auVar44._13_3_ = 0;
                    /* try { // try from 002d2e78 to 003d2eab has its CatchHandler @ 002d4928 */
                  auVar55 = NEON_scvtf(auVar54,4);
                  auVar58 = NEON_scvtf(auVar58,4);
                  auVar48 = NEON_scvtf(auVar61,4);
                  auVar44 = NEON_scvtf(auVar44,4);
                  auVar56._0_8_ = CONCAT44(auVar55._4_4_ - fVar50,auVar55._0_4_ - fVar50);
                  auVar56._8_4_ = auVar55._8_4_ - fVar50;
                  auVar56._12_4_ = auVar55._12_4_ - fVar50;
                  auVar55._0_8_ = CONCAT44(auVar48._4_4_ - fVar50,auVar48._0_4_ - fVar50);
                  auVar55._8_4_ = auVar48._8_4_ - fVar50;
                  auVar55._12_4_ = auVar48._12_4_ - fVar50;
                  auVar48._0_8_ = CONCAT44(auVar44._4_4_ - fVar50,auVar44._0_4_ - fVar50);
                  auVar48._8_4_ = auVar44._8_4_ - fVar50;
                  auVar48._12_4_ = auVar44._12_4_ - fVar50;
                  *(long *)(pfVar39 + 2) = auVar56._8_8_;
                  *(undefined8 *)pfVar39 = auVar56._0_8_;
                  pfVar39[6] = auVar58._8_4_ - fVar50;
                  pfVar39[7] = auVar58._12_4_ - fVar50;
                  pfVar39[4] = auVar58._0_4_ - fVar50;
                  pfVar39[5] = auVar58._4_4_ - fVar50;
                  *(long *)(pfVar39 + 10) = auVar55._8_8_;
                  *(undefined8 *)(pfVar39 + 8) = auVar55._0_8_;
                  *(long *)(pfVar39 + 0xe) = auVar48._8_8_;
                  *(undefined8 *)(pfVar39 + 0xc) = auVar48._0_8_;
                  pfVar39 = pfVar39 + 0x10;
                  pbVar27 = pbVar27 + 0x10;
                } while (uVar29 < uVar4);
                uVar33 = uVar33 + iVar62;
                if (iVar62 == iVar38) goto LAB_002d2b74;
              }
              iVar34 = uVar33 + 1;
              pfVar16[(int)uVar33] = (float)*(byte *)((long)pfVar26 + (long)(int)uVar33) - *pfVar25;
              if (iVar34 < (int)uVar9) {
                iVar19 = uVar33 + 2;
                pfVar16[iVar34] = (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                if (iVar19 < (int)uVar9) {
                  iVar34 = uVar33 + 3;
                  pfVar16[iVar19] = (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25;
                  if (iVar34 < (int)uVar9) {
                    /* try { // try from 002d2f2c to 003d2f73 has its CatchHandler @ 002d4cc8 */
                    iVar19 = uVar33 + 4;
                    pfVar16[iVar34] = (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                    if (iVar19 < (int)uVar9) {
                      iVar34 = uVar33 + 5;
                      pfVar16[iVar19] = (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25;
                      if (iVar34 < (int)uVar9) {
                        iVar19 = uVar33 + 6;
                        pfVar16[iVar34] = (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                        if (iVar19 < (int)uVar9) {
                          iVar34 = uVar33 + 7;
                    /* try { // try from 002d2fa0 to 003d2fa3 has its CatchHandler @ 002d48c0 */
                    /* try { // try from 002d2fa8 to 003d2fab has its CatchHandler @ 002d4cc8 */
                    /* try { // try from 002d2fb0 to 003d300b has its CatchHandler @ 002d4928 */
                          pfVar16[iVar19] =
                               (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25;
                          if (iVar34 < (int)uVar9) {
                            iVar19 = uVar33 + 8;
                            pfVar16[iVar34] =
                                 (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                            if (iVar19 < (int)uVar9) {
                              iVar34 = uVar33 + 9;
                              pfVar16[iVar19] =
                                   (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25;
                              if (iVar34 < (int)uVar9) {
                                iVar19 = uVar33 + 10;
                                pfVar16[iVar34] =
                                     (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                                if (iVar19 < (int)uVar9) {
                                  iVar34 = uVar33 + 0xb;
                                  pfVar16[iVar19] =
                                       (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25;
                                  if (iVar34 < (int)uVar9) {
                                    iVar19 = uVar33 + 0xc;
                                    pfVar16[iVar34] =
                                         (float)*(byte *)((long)pfVar26 + (long)iVar34) - *pfVar25;
                                    if (iVar19 < (int)uVar9) {
                                      iVar34 = uVar33 + 0xd;
                    /* try { // try from 002d308c to 003d30d7 has its CatchHandler @ 002d4930 */
                                      pfVar16[iVar19] =
                                           (float)*(byte *)((long)pfVar26 + (long)iVar19) - *pfVar25
                                      ;
                                      if (iVar34 < (int)uVar9) {
                                        iVar19 = uVar33 + 0xe;
                                        pfVar16[iVar34] =
                                             (float)*(byte *)((long)pfVar26 + (long)iVar34) -
                                             *pfVar25;
                                        if (iVar19 < (int)uVar9) {
                                          pfVar16[iVar19] =
                                               (float)*(byte *)((long)pfVar26 + (long)iVar19) -
                                               *pfVar25;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar9) {
          if ((uVar9 < 0x13 || pfVar26 < pfVar6 && pfVar16 < pfVar52) ||
             (pfVar16 < pfVar25 + 0x10 && pfVar25 < pfVar16 + 0x10)) {
                    /* try { // try from 002d310c to 003d310f has its CatchHandler @ 002d4930 */
            lVar22 = 0;
            do {
                    /* try { // try from 002d3114 to 003d316f has its CatchHandler @ 002d4928 */
              pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
              lVar22 = lVar22 + 1;
            } while ((int)lVar22 < (int)uVar9);
          }
          else {
                    /* try { // try from 002d27ec to 003d2833 has its CatchHandler @ 002d4c28 */
            uVar33 = uVar7;
            if ((uVar7 != 0) && (*pfVar16 = (float)*(byte *)pfVar26 - *pfVar25, uVar7 != 1)) {
              pfVar16[1] = (float)*(byte *)((long)pfVar26 + 1) - pfVar25[1];
              if (uVar7 == 3) {
                pfVar16[2] = (float)*(byte *)((long)pfVar26 + 2) - pfVar25[2];
              }
              else {
                uVar33 = 2;
              }
            }
            if (0xe < uVar12) {
              uVar29 = 0;
                    /* try { // try from 002d2860 to 003d2863 has its CatchHandler @ 002d4b4c */
                    /* try { // try from 002d2868 to 003d286b has its CatchHandler @ 002d4c28 */
              pfVar39 = (float *)((long)pfVar16 + lVar53);
              pbVar17 = (byte *)((long)pfVar20 + lVar65 + lVar53);
              pbVar27 = (byte *)((long)pfVar23 + lVar30 + uVar24);
              do {
                uVar64 = *(undefined8 *)(pbVar17 + 8);
                uVar63 = *(undefined8 *)pbVar17;
                    /* try { // try from 002d2888 to 003d28f3 has its CatchHandler @ 002d4928 */
                uVar29 = uVar29 + 1;
                auVar60._6_2_ = 0;
                auVar60._0_6_ =
                     (uint6)CONCAT14(pbVar27[1],(uint)CONCAT12(pbVar27[1],(ushort)*pbVar27)) &
                     0xffff0000ffff;
                auVar60[8] = pbVar27[2];
                auVar60._9_3_ = 0;
                auVar60[0xc] = pbVar27[3];
                auVar60._13_3_ = 0;
                auVar47._1_3_ = 0;
                auVar47[0] = pbVar27[4];
                auVar47[4] = pbVar27[5];
                auVar47._5_3_ = 0;
                auVar47[8] = pbVar27[6];
                auVar47._9_3_ = 0;
                auVar47[0xc] = pbVar27[7];
                auVar47._13_3_ = 0;
                auVar57._6_2_ = 0;
                auVar57._0_6_ =
                     (uint6)CONCAT14(pbVar27[9],(uint)CONCAT12(pbVar27[9],(ushort)pbVar27[8])) &
                     0xffff0000ffff;
                auVar57[8] = pbVar27[10];
                auVar57._9_3_ = 0;
                auVar57[0xc] = pbVar27[0xb];
                auVar57._13_3_ = 0;
                auVar43._1_3_ = 0;
                auVar43[0] = pbVar27[0xc];
                auVar43[4] = pbVar27[0xd];
                auVar43._5_3_ = 0;
                auVar43[8] = pbVar27[0xe];
                auVar43._9_3_ = 0;
                auVar43[0xc] = pbVar27[0xf];
                auVar43._13_3_ = 0;
                auVar61 = NEON_scvtf(auVar60,4);
                auVar48 = NEON_scvtf(auVar47,4);
                auVar58 = NEON_scvtf(auVar57,4);
                auVar44 = NEON_scvtf(auVar43,4);
                auVar49._0_8_ =
                     CONCAT44(auVar48._4_4_ -
                              (float)((ulong)*(undefined8 *)(pbVar17 + 0x10) >> 0x20),
                              auVar48._0_4_ - (float)*(undefined8 *)(pbVar17 + 0x10));
                auVar49._8_4_ = auVar48._8_4_ - (float)*(undefined8 *)(pbVar17 + 0x18);
                auVar49._12_4_ =
                     auVar48._12_4_ - (float)((ulong)*(undefined8 *)(pbVar17 + 0x18) >> 0x20);
                auVar59._0_8_ =
                     CONCAT44(auVar58._4_4_ -
                              (float)((ulong)*(undefined8 *)(pbVar17 + 0x20) >> 0x20),
                              auVar58._0_4_ - (float)*(undefined8 *)(pbVar17 + 0x20));
                auVar59._8_4_ = auVar58._8_4_ - (float)*(undefined8 *)(pbVar17 + 0x28);
                auVar59._12_4_ =
                     auVar58._12_4_ - (float)((ulong)*(undefined8 *)(pbVar17 + 0x28) >> 0x20);
                auVar45._0_8_ =
                     CONCAT44(auVar44._4_4_ -
                              (float)((ulong)*(undefined8 *)(pbVar17 + 0x30) >> 0x20),
                              auVar44._0_4_ - (float)*(undefined8 *)(pbVar17 + 0x30));
                auVar45._8_4_ = auVar44._8_4_ - (float)*(undefined8 *)(pbVar17 + 0x38);
                auVar45._12_4_ =
                     auVar44._12_4_ - (float)((ulong)*(undefined8 *)(pbVar17 + 0x38) >> 0x20);
                pfVar39[2] = auVar61._8_4_ - (float)uVar64;
                pfVar39[3] = auVar61._12_4_ - (float)((ulong)uVar64 >> 0x20);
                *pfVar39 = auVar61._0_4_ - (float)uVar63;
                pfVar39[1] = auVar61._4_4_ - (float)((ulong)uVar63 >> 0x20);
                *(long *)(pfVar39 + 6) = auVar49._8_8_;
                *(undefined8 *)(pfVar39 + 4) = auVar49._0_8_;
                *(long *)(pfVar39 + 10) = auVar59._8_8_;
                *(undefined8 *)(pfVar39 + 8) = auVar59._0_8_;
                *(long *)(pfVar39 + 0xe) = auVar45._8_8_;
                *(undefined8 *)(pfVar39 + 0xc) = auVar45._0_8_;
                pfVar39 = pfVar39 + 0x10;
                pbVar17 = pbVar17 + 0x40;
                pbVar27 = pbVar27 + 0x10;
              } while (uVar29 < uVar4);
              uVar33 = uVar33 + iVar62;
              if (iVar62 == iVar38) goto LAB_002d2b74;
            }
            lVar22 = (long)(int)uVar33;
            pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
            if ((int)(uVar33 + 1) < (int)uVar9) {
              lVar22 = (long)(int)(uVar33 + 1);
              pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                    /* try { // try from 002d2974 to 003d29bb has its CatchHandler @ 002d4b44 */
              if ((int)(uVar33 + 2) < (int)uVar9) {
                lVar22 = (long)(int)(uVar33 + 2);
                pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                if ((int)(uVar33 + 3) < (int)uVar9) {
                  lVar22 = (long)(int)(uVar33 + 3);
                  pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                  if ((int)(uVar33 + 4) < (int)uVar9) {
                    lVar22 = (long)(int)(uVar33 + 4);
                    /* try { // try from 002d29e8 to 003d29eb has its CatchHandler @ 002d4988 */
                    pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                    if ((int)(uVar33 + 5) < (int)uVar9) {
                    /* try { // try from 002d29f0 to 003d29f3 has its CatchHandler @ 002d4b44 */
                      lVar22 = (long)(int)(uVar33 + 5);
                    /* try { // try from 002d29f8 to 003d2a6b has its CatchHandler @ 002d4928 */
                      pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                      if ((int)(uVar33 + 6) < (int)uVar9) {
                        lVar22 = (long)(int)(uVar33 + 6);
                        pfVar16[lVar22] = (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22]
                        ;
                        if ((int)(uVar33 + 7) < (int)uVar9) {
                          lVar22 = (long)(int)(uVar33 + 7);
                          pfVar16[lVar22] =
                               (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                          if ((int)(uVar33 + 8) < (int)uVar9) {
                            lVar22 = (long)(int)(uVar33 + 8);
                            pfVar16[lVar22] =
                                 (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                            if ((int)(uVar33 + 9) < (int)uVar9) {
                              lVar22 = (long)(int)(uVar33 + 9);
                              pfVar16[lVar22] =
                                   (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                              if ((int)(uVar33 + 10) < (int)uVar9) {
                                lVar22 = (long)(int)(uVar33 + 10);
                                pfVar16[lVar22] =
                                     (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                                if ((int)(uVar33 + 0xb) < (int)uVar9) {
                                  lVar22 = (long)(int)(uVar33 + 0xb);
                    /* try { // try from 002d2aec to 003d2b33 has its CatchHandler @ 002d4ad4 */
                                  pfVar16[lVar22] =
                                       (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                                  if ((int)(uVar33 + 0xc) < (int)uVar9) {
                                    lVar22 = (long)(int)(uVar33 + 0xc);
                                    pfVar16[lVar22] =
                                         (float)*(byte *)((long)pfVar26 + lVar22) - pfVar25[lVar22];
                                    if ((int)(uVar33 + 0xd) < (int)uVar9) {
                                      lVar22 = (long)(int)(uVar33 + 0xd);
                                      pfVar16[lVar22] =
                                           (float)*(byte *)((long)pfVar26 + lVar22) -
                                           pfVar25[lVar22];
                                      if ((int)(uVar33 + 0xe) < (int)uVar9) {
                                        lVar22 = (long)(int)(uVar33 + 0xe);
                    /* try { // try from 002d2b60 to 003d2b63 has its CatchHandler @ 002d4b34 */
                    /* try { // try from 002d2b68 to 003d2b6b has its CatchHandler @ 002d4ad4 */
                    /* try { // try from 002d2b70 to 003d2bc3 has its CatchHandler @ 002d4928 */
                                        pfVar16[lVar22] =
                                             (float)*(byte *)((long)pfVar26 + lVar22) -
                                             pfVar25[lVar22];
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d2b74:
        pbVar27 = (byte *)((long)pfVar23 + lVar30 + 1);
        pfVar40 = pfVar42;
        pfVar39 = pfVar25;
        iVar34 = iVar28;
        do {
          pfVar31 = pfVar39;
          if ((int)uVar8 < (int)uVar9) {
            local_41c = *pfVar39;
            local_420 = local_41c;
            local_424 = local_41c;
            local_428 = local_41c;
            pfVar31 = &local_428;
          }
          dVar46 = 0.0;
          if ((int)uVar9 < 4) {
            iVar19 = 0;
          }
          else {
            pbVar17 = pbVar27;
            pfVar32 = pfVar31;
            pfVar36 = pfVar16;
            do {
              pbVar5 = pbVar17 + 4;
              pfVar1 = pfVar32 + 1;
              fVar50 = *pfVar32;
              pfVar2 = pfVar32 + 2;
              pfVar3 = pfVar32 + 3;
              pfVar32 = (float *)((long)pfVar32 + lVar18);
              dVar46 = dVar46 + (double)pfVar36[1] * (double)((float)*pbVar17 - *pfVar1) +
                                (double)((float)pbVar17[-1] - fVar50) * (double)*pfVar36 +
                                (double)((float)pbVar17[1] - *pfVar2) * (double)pfVar36[2] +
                                (double)((float)pbVar17[2] - *pfVar3) * (double)pfVar36[3];
              pbVar17 = pbVar5;
              pfVar36 = pfVar36 + 4;
            } while (pbVar5 != pbVar27 + (ulong)uVar11 * 4 + 4);
            pfVar31 = (float *)((long)pfVar31 + lVar18 + (ulong)uVar11 * lVar18);
            iVar19 = (uVar11 + 1) * 4;
          }
          if (iVar19 < (int)uVar9) {
            lVar22 = 0;
            do {
              lVar13 = lVar22 + (long)iVar19 + -1;
              pfVar32 = pfVar31 + lVar22;
              lVar14 = iVar19 + lVar22;
              lVar22 = lVar22 + 1;
              dVar46 = dVar46 + (double)((float)pbVar27[lVar13] - *pfVar32) *
                                (double)pfVar16[lVar14];
            } while (lVar22 != (ulong)((uVar9 - 1) - iVar19) + 1);
          }
          iVar34 = iVar34 + 1;
          pfVar39 = pfVar39 + uVar51;
          pbVar27 = pbVar27 + lVar37;
          *pfVar40 = (float)(dVar46 * param_1);
          pfVar40 = pfVar40 + 1;
        } while (iVar34 < iVar10);
        iVar28 = iVar28 + 1;
        pfVar25 = pfVar25 + uVar51;
        lVar30 = lVar30 + lVar37;
        pfVar26 = (float *)((long)pfVar26 + lVar37);
        pfVar42 = pfVar42 + uVar41 + 1;
        lVar65 = lVar65 + uVar51 * 4;
        pfVar52 = (float *)((long)pfVar52 + lVar37);
      } while (iVar28 != iVar10);
    }
    if (bVar15) {
      local_418 = pfVar16;
      local_410 = uVar21;
      operator_delete__(pfVar16);
    }
  }
  return;
}


==================================================================

### FUNC 002d32b4 (2356 bytes) name=FUN_002d32b4

void FUN_002d32b4(double param_1,long param_2,long param_3,long param_4)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  ushort *puVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  bool bVar15;
  double *pdVar16;
  ushort *puVar17;
  long lVar18;
  double *pdVar19;
  ulong uVar20;
  long lVar21;
  ushort *puVar22;
  uint uVar23;
  int iVar24;
  ushort *puVar25;
  double *pdVar26;
  uint uVar27;
  double *pdVar28;
  ushort *puVar29;
  double *pdVar30;
  int iVar31;
  double *pdVar32;
  ulong uVar33;
  int iVar34;
  double *pdVar35;
  double *pdVar36;
  ulong uVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  double dVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  double dVar47;
  ulong uVar48;
  long lVar49;
  long lVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  double dVar55;
  int iVar56;
  double local_438;
  double local_430;
  double local_428;
  double local_420;
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
  pdVar35 = *(double **)(param_3 + 0x10);
  uVar33 = *(ulong *)(param_3 + 0x50) >> 3;
  puVar25 = *(ushort **)(param_2 + 0x10);
  pdVar19 = *(double **)(param_4 + 0x10);
  uVar48 = *(ulong *)(param_2 + 0x50) >> 1;
  if (*(int *)(param_4 + 8) < 2) {
                    /* try { // try from 002d3a74 to 003d3a77 has its CatchHandler @ 002d4928 */
    uVar37 = 0;
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    iVar8 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    uVar37 = *(ulong *)(param_4 + 0x50) >> 3;
    iVar8 = **(int **)(param_2 + 0x40);
  }
  if (pdVar19 == (double *)0x0) {
    if (0 < iVar8) {
      uVar10 = uVar7 - 4 >> 2;
      uVar6 = (uVar10 + 1) * 4;
      if ((int)(uVar7 - 3) < 1) {
        uVar6 = 0;
      }
      iVar31 = 0;
      uVar37 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
      do {
        puVar29 = puVar25 + 1;
                    /* try { // try from 002d3af4 to 003d3af7 has its CatchHandler @ 002d4980 */
        pdVar19 = pdVar35;
        iVar11 = iVar31;
        do {
                    /* try { // try from 002d3b00 to 003d3b03 has its CatchHandler @ 002d4928 */
          dVar47 = 0.0;
          if (0 < (int)(uVar7 - 3)) {
            puVar17 = puVar29;
            puVar22 = puVar25;
            do {
              puVar5 = puVar17 + 4;
              dVar47 = dVar47 + (double)puVar22[1] * (double)*puVar17 +
                                (double)puVar17[-1] * (double)*puVar22 +
                                (double)puVar17[1] * (double)puVar22[2] +
                                (double)puVar17[2] * (double)puVar22[3];
              puVar17 = puVar5;
              puVar22 = puVar22 + 4;
            } while (puVar5 != puVar29 + (ulong)uVar10 * 4 + 4);
          }
          if ((int)uVar6 < (int)uVar7) {
                    /* try { // try from 002d3b84 to 003d3bcf has its CatchHandler @ 002d4c60 */
            lVar18 = 0;
            do {
              lVar49 = lVar18 + uVar37;
              lVar50 = lVar18 + (uVar37 - 2);
              lVar18 = lVar18 + 2;
              dVar47 = dVar47 + (double)*(ushort *)((long)puVar29 + lVar50) *
                                (double)*(ushort *)((long)puVar25 + lVar49);
            } while (lVar18 != ((ulong)((uVar7 - 1) - uVar6) + 1) * 2);
          }
          iVar11 = iVar11 + 1;
          puVar29 = puVar29 + uVar48;
          *pdVar19 = dVar47 * param_1;
          pdVar19 = pdVar19 + 1;
        } while (iVar11 < iVar8);
        iVar31 = iVar31 + 1;
        pdVar35 = pdVar35 + uVar33 + 1;
        puVar25 = puVar25 + uVar48;
      } while (iVar31 != iVar8);
    }
  }
  else {
    uVar20 = -(ulong)(uVar7 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar7 << 3;
    pdVar16 = adStack_408;
    lVar18 = 0x20;
    if (uVar6 != uVar7) {
      lVar18 = 0;
    }
    local_418 = pdVar16;
    local_410 = 0x408;
    if (uVar20 < 0x409) {
      local_410 = uVar20;
      bVar15 = false;
    }
    else {
      local_418 = operator_new__(uVar20);
      bVar15 = local_418 != pdVar16;
      local_410 = uVar20;
      pdVar16 = local_418;
    }
                    /* try { // try from 002d3390 to 003d3393 has its CatchHandler @ 002d4acc */
    if (0 < iVar8) {
      uVar10 = (uint)((ulong)pdVar16 >> 3) & 1;
      if (uVar7 < uVar10) {
        uVar10 = uVar7;
      }
                    /* try { // try from 002d33b0 to 003d33b3 has its CatchHandler @ 002d4a24 */
      uVar9 = uVar7 - 4 >> 2;
      iVar11 = uVar7 - uVar10;
                    /* try { // try from 002d33d0 to 003d33d3 has its CatchHandler @ 002d49f8 */
                    /* try { // try from 002d33d8 to 003d33db has its CatchHandler @ 002d4a24 */
      iVar31 = 0;
      uVar4 = (iVar11 - 8U >> 3) + 1;
      lVar50 = NEON_shl((ulong)uVar10,3);
      lVar49 = NEON_shl((ulong)uVar10,1);
      iVar56 = uVar4 * 8;
      uVar12 = (uVar7 - 1) - uVar10;
                    /* try { // try from 002d342c to 003d34fb has its CatchHandler @ 002d4928 */
      do {
        if ((int)uVar6 < (int)uVar7) {
          if (0 < (int)uVar7) {
                    /* try { // try from 002d3844 to 003d388f has its CatchHandler @ 002d4980 */
            if ((pdVar16 < pdVar19 + 1 && pdVar19 < pdVar16 + uVar7) || (uVar7 < 0xb)) {
              lVar21 = 0;
              do {
                    /* try { // try from 002d3a34 to 003d3a37 has its CatchHandler @ 002d4aa0 */
                pdVar16[lVar21] = (double)puVar25[lVar21] - *pdVar19;
                lVar21 = lVar21 + 1;
                    /* try { // try from 002d3a3c to 003d3a3f has its CatchHandler @ 002d4acc */
              } while ((int)lVar21 < (int)uVar7);
            }
            else {
              if (uVar10 != 0) {
                *pdVar16 = (double)*puVar25 - *pdVar19;
              }
              uVar23 = (uint)(uVar10 != 0);
              if (6 < uVar12) {
                dVar47 = *pdVar19;
                uVar27 = 0;
                puVar29 = (ushort *)((long)puVar25 + lVar49);
                pdVar30 = (double *)((long)pdVar16 + lVar50);
                do {
                  uVar27 = uVar27 + 1;
                    /* try { // try from 002d38bc to 003d38bf has its CatchHandler @ 002d4938 */
                    /* try { // try from 002d38c4 to 003d38c7 has its CatchHandler @ 002d4980 */
                  auVar46._0_8_ = (long)(int)(uint)*puVar29;
                  auVar46._8_8_ = (long)(int)(uint)puVar29[1];
                  auVar41._0_8_ = (long)(int)(uint)puVar29[2];
                  auVar41._8_8_ = (long)(int)(uint)puVar29[3];
                    /* try { // try from 002d38cc to 003d398f has its CatchHandler @ 002d4928 */
                  auVar44._0_8_ = (long)(int)(uint)puVar29[4];
                  auVar44._8_8_ = (long)(int)(uint)puVar29[5];
                  auVar39._0_8_ = (long)(int)(uint)puVar29[6];
                  auVar39._8_8_ = (long)(int)(uint)puVar29[7];
                  auVar46 = NEON_scvtf(auVar46,8);
                  auVar41 = NEON_scvtf(auVar41,8);
                  auVar44 = NEON_scvtf(auVar44,8);
                  auVar39 = NEON_scvtf(auVar39,8);
                  pdVar30[1] = auVar46._8_8_ - dVar47;
                  *pdVar30 = auVar46._0_8_ - dVar47;
                  pdVar30[3] = auVar41._8_8_ - dVar47;
                  pdVar30[2] = auVar41._0_8_ - dVar47;
                  pdVar30[5] = auVar44._8_8_ - dVar47;
                  pdVar30[4] = auVar44._0_8_ - dVar47;
                  pdVar30[7] = auVar39._8_8_ - dVar47;
                  pdVar30[6] = auVar39._0_8_ - dVar47;
                  puVar29 = puVar29 + 8;
                  pdVar30 = pdVar30 + 8;
                } while (uVar27 < uVar4);
                uVar23 = uVar23 + iVar56;
                if (iVar56 == iVar11) goto LAB_002d3694;
              }
              iVar34 = uVar23 + 1;
              pdVar16[(int)uVar23] = (double)puVar25[(int)uVar23] - *pdVar19;
              if (iVar34 < (int)uVar7) {
                iVar24 = uVar23 + 2;
                pdVar16[iVar34] = (double)puVar25[iVar34] - *pdVar19;
                if (iVar24 < (int)uVar7) {
                  iVar34 = uVar23 + 3;
                  pdVar16[iVar24] = (double)puVar25[iVar24] - *pdVar19;
                  if (iVar34 < (int)uVar7) {
                    iVar24 = uVar23 + 4;
                    pdVar16[iVar34] = (double)puVar25[iVar34] - *pdVar19;
                    if (iVar24 < (int)uVar7) {
                      iVar34 = uVar23 + 5;
                      pdVar16[iVar24] = (double)puVar25[iVar24] - *pdVar19;
                      if (iVar34 < (int)uVar7) {
                        iVar24 = uVar23 + 6;
                    /* try { // try from 002d39e8 to 003d39eb has its CatchHandler @ 002d4acc */
                        pdVar16[iVar34] = (double)puVar25[iVar34] - *pdVar19;
                        if (iVar24 < (int)uVar7) {
                          pdVar16[iVar24] = (double)puVar25[iVar24] - *pdVar19;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar7) {
          if ((pdVar16 < pdVar19 + 8 && pdVar19 < pdVar16 + 8) || (uVar7 < 0xb)) {
            lVar21 = 0;
            do {
              pdVar16[lVar21] = (double)puVar25[lVar21] - pdVar19[lVar21];
              lVar21 = lVar21 + 1;
            } while ((int)lVar21 < (int)uVar7);
          }
          else {
            if (uVar10 != 0) {
              *pdVar16 = (double)*puVar25 - *pdVar19;
            }
            uVar23 = (uint)(uVar10 != 0);
            if (6 < uVar12) {
              uVar27 = 0;
              pdVar30 = (double *)((long)pdVar19 + lVar50);
              puVar29 = (ushort *)((long)puVar25 + lVar49);
              pdVar36 = (double *)((long)pdVar16 + lVar50);
              do {
                pdVar32 = pdVar30 + 1;
                dVar55 = *pdVar30;
                dVar54 = pdVar30[3];
                dVar53 = pdVar30[2];
                dVar52 = pdVar30[5];
                dVar51 = pdVar30[4];
                dVar42 = pdVar30[7];
                dVar47 = pdVar30[6];
                uVar27 = uVar27 + 1;
                pdVar30 = pdVar30 + 8;
                auVar45._0_8_ = (long)(int)(uint)*puVar29;
                auVar45._8_8_ = (long)(int)(uint)puVar29[1];
                auVar40._0_8_ = (long)(int)(uint)puVar29[2];
                auVar40._8_8_ = (long)(int)(uint)puVar29[3];
                auVar43._0_8_ = (long)(int)(uint)puVar29[4];
                auVar43._8_8_ = (long)(int)(uint)puVar29[5];
                auVar38._0_8_ = (long)(int)(uint)puVar29[6];
                auVar38._8_8_ = (long)(int)(uint)puVar29[7];
                auVar46 = NEON_scvtf(auVar45,8);
                auVar41 = NEON_scvtf(auVar40,8);
                    /* try { // try from 002d354c to 003d354f has its CatchHandler @ 002d258c */
                auVar44 = NEON_scvtf(auVar43,8);
                auVar39 = NEON_scvtf(auVar38,8);
                pdVar36[1] = auVar46._8_8_ - *pdVar32;
                *pdVar36 = auVar46._0_8_ - dVar55;
                pdVar36[3] = auVar41._8_8_ - dVar54;
                pdVar36[2] = auVar41._0_8_ - dVar53;
                pdVar36[5] = auVar44._8_8_ - dVar52;
                pdVar36[4] = auVar44._0_8_ - dVar51;
                pdVar36[7] = auVar39._8_8_ - dVar42;
                pdVar36[6] = auVar39._0_8_ - dVar47;
                puVar29 = puVar29 + 8;
                pdVar36 = pdVar36 + 8;
              } while (uVar27 < uVar4);
              uVar23 = uVar23 + iVar56;
                    /* try { // try from 002d3584 to 003d35f7 has its CatchHandler @ 002d4928 */
              if (iVar56 == iVar11) goto LAB_002d3694;
            }
            iVar34 = uVar23 + 1;
            pdVar16[(int)uVar23] = (double)puVar25[(int)uVar23] - pdVar19[(int)uVar23];
            if (iVar34 < (int)uVar7) {
              iVar24 = uVar23 + 2;
              pdVar16[iVar34] = (double)puVar25[iVar34] - pdVar19[iVar34];
              if (iVar24 < (int)uVar7) {
                iVar34 = uVar23 + 3;
                pdVar16[iVar24] = (double)puVar25[iVar24] - pdVar19[iVar24];
                if (iVar34 < (int)uVar7) {
                  iVar24 = uVar23 + 4;
                  pdVar16[iVar34] = (double)puVar25[iVar34] - pdVar19[iVar34];
                  if (iVar24 < (int)uVar7) {
                    iVar34 = uVar23 + 5;
                    pdVar16[iVar24] = (double)puVar25[iVar24] - pdVar19[iVar24];
                    if (iVar34 < (int)uVar7) {
                      iVar24 = uVar23 + 6;
                    /* try { // try from 002d3670 to 003d3673 has its CatchHandler @ 002d4960 */
                      pdVar16[iVar34] = (double)puVar25[iVar34] - pdVar19[iVar34];
                      if (iVar24 < (int)uVar7) {
                        pdVar16[iVar24] = (double)puVar25[iVar24] - pdVar19[iVar24];
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d3694:
        puVar29 = puVar25 + 1;
        pdVar36 = pdVar35;
        pdVar30 = pdVar19;
        iVar34 = iVar31;
        do {
          pdVar32 = pdVar30;
          if ((int)uVar6 < (int)uVar7) {
            local_420 = *pdVar30;
            local_428 = local_420;
            local_430 = local_420;
            local_438 = local_420;
            pdVar32 = &local_438;
          }
          dVar47 = 0.0;
          if ((int)uVar7 < 4) {
            iVar24 = 0;
          }
          else {
            puVar17 = puVar29;
            pdVar26 = pdVar32;
            pdVar28 = pdVar16;
            do {
              puVar22 = puVar17 + 4;
              pdVar1 = pdVar26 + 1;
              dVar42 = *pdVar26;
                    /* try { // try from 002d3708 to 003d370b has its CatchHandler @ 002d4a7c */
              pdVar2 = pdVar26 + 2;
              pdVar3 = pdVar26 + 3;
              pdVar26 = (double *)((long)pdVar26 + lVar18);
                    /* try { // try from 002d3740 to 003d3743 has its CatchHandler @ 002d4b74 */
              dVar47 = dVar47 + ((double)*puVar17 - *pdVar1) * pdVar28[1] +
                                ((double)puVar17[-1] - dVar42) * *pdVar28 +
                                ((double)puVar17[1] - *pdVar2) * pdVar28[2] +
                                ((double)puVar17[2] - *pdVar3) * pdVar28[3];
              puVar17 = puVar22;
              pdVar28 = pdVar28 + 4;
            } while (puVar22 != puVar29 + (ulong)uVar9 * 4 + 4);
            pdVar32 = (double *)((long)pdVar32 + lVar18 + (ulong)uVar9 * lVar18);
            iVar24 = (uVar9 + 1) * 4;
          }
          if (iVar24 < (int)uVar7) {
            lVar21 = 0;
            do {
              lVar13 = lVar21 + -1;
              pdVar26 = pdVar32 + lVar21;
              lVar14 = iVar24 + lVar21;
                    /* try { // try from 002d3790 to 003d37c3 has its CatchHandler @ 002d4928 */
              lVar21 = lVar21 + 1;
              dVar47 = dVar47 + ((double)puVar29[iVar24 + lVar13] - *pdVar26) * pdVar16[lVar14];
            } while (lVar21 != (ulong)((uVar7 - 1) - iVar24) + 1);
          }
          iVar34 = iVar34 + 1;
          pdVar30 = pdVar30 + uVar37;
          puVar29 = puVar29 + uVar48;
          *pdVar36 = dVar47 * param_1;
          pdVar36 = pdVar36 + 1;
        } while (iVar34 < iVar8);
        iVar31 = iVar31 + 1;
        pdVar19 = pdVar19 + uVar37;
        puVar25 = puVar25 + uVar48;
        pdVar35 = pdVar35 + uVar33 + 1;
      } while (iVar31 != iVar8);
    }
    if (bVar15) {
      local_418 = pdVar16;
      local_410 = uVar20;
      operator_delete__(pdVar16);
    }
  }
  return;
}


==================================================================

### FUNC 002d3be8 (2356 bytes) name=FUN_002d3be8

void FUN_002d3be8(double param_1,long param_2,long param_3,long param_4)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  short *psVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  bool bVar15;
  double *pdVar16;
  short *psVar17;
  long lVar18;
  double *pdVar19;
  ulong uVar20;
  long lVar21;
  short *psVar22;
  uint uVar23;
  int iVar24;
  short *psVar25;
  double *pdVar26;
  uint uVar27;
  double *pdVar28;
  short *psVar29;
  double *pdVar30;
  int iVar31;
  double *pdVar32;
  ulong uVar33;
  int iVar34;
  double *pdVar35;
  double *pdVar36;
  ulong uVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  double dVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  double dVar47;
  ulong uVar48;
  long lVar49;
  long lVar50;
  double dVar51;
  double dVar52;
  double dVar53;
  double dVar54;
  double dVar55;
  int iVar56;
  double local_438;
  double local_430;
  double local_428;
  double local_420;
  double *local_418;
  ulong local_410;
  double adStack_408 [129];
  
                    /* try { // try from 002d3bfc to 003d3bff has its CatchHandler @ 002d4c38 */
                    /* try { // try from 002d3c04 to 003d3c07 has its CatchHandler @ 002d4c60 */
                    /* try { // try from 002d3c0c to 003d3c0f has its CatchHandler @ 002d4928 */
  pdVar35 = *(double **)(param_3 + 0x10);
  uVar33 = *(ulong *)(param_3 + 0x50) >> 3;
  psVar25 = *(short **)(param_2 + 0x10);
  pdVar19 = *(double **)(param_4 + 0x10);
  uVar48 = *(ulong *)(param_2 + 0x50) >> 1;
  if (*(int *)(param_4 + 8) < 2) {
                    /* try { // try from 002d43a8 to 003d43bf has its CatchHandler @ 002d4928 */
    uVar37 = 0;
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    iVar8 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar6 = *(uint *)(param_4 + 0xc);
    uVar7 = (*(int **)(param_2 + 0x40))[1];
    uVar37 = *(ulong *)(param_4 + 0x50) >> 3;
    iVar8 = **(int **)(param_2 + 0x40);
  }
  if (pdVar19 == (double *)0x0) {
    if (0 < iVar8) {
      uVar10 = uVar7 - 4 >> 2;
                    /* try { // try from 002d43d8 to 003d43db has its CatchHandler @ 002d4b98 */
      uVar6 = (uVar10 + 1) * 4;
      if ((int)(uVar7 - 3) < 1) {
        uVar6 = 0;
      }
      iVar31 = 0;
      uVar37 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
      do {
        psVar29 = psVar25 + 1;
                    /* try { // try from 002d4424 to 003d4427 has its CatchHandler @ 002d4c68 */
        pdVar19 = pdVar35;
        iVar11 = iVar31;
        do {
                    /* try { // try from 002d442c to 003d442f has its CatchHandler @ 002d4b98 */
          dVar47 = 0.0;
          if (0 < (int)(uVar7 - 3)) {
            psVar17 = psVar29;
            psVar22 = psVar25;
            do {
                    /* try { // try from 002d4450 to 003d4453 has its CatchHandler @ 002d4c60 */
              psVar5 = psVar17 + 4;
                    /* try { // try from 002d446c to 003d446f has its CatchHandler @ 002d4b2c */
              dVar47 = dVar47 + (double)(int)psVar22[1] * (double)(int)*psVar17 +
                                (double)(int)psVar17[-1] * (double)(int)*psVar22 +
                                (double)(int)psVar17[1] * (double)(int)psVar22[2] +
                                (double)(int)psVar17[2] * (double)(int)psVar22[3];
              psVar17 = psVar5;
              psVar22 = psVar22 + 4;
            } while (psVar5 != psVar29 + (ulong)uVar10 * 4 + 4);
          }
          if ((int)uVar6 < (int)uVar7) {
                    /* try { // try from 002d44b8 to 003d44bb has its CatchHandler @ 002d4afc */
            lVar18 = 0;
            do {
              lVar49 = lVar18 + uVar37;
              lVar50 = lVar18 + (uVar37 - 2);
                    /* try { // try from 002d44c0 to 003d44c3 has its CatchHandler @ 002d4b2c */
              lVar18 = lVar18 + 2;
              dVar47 = dVar47 + (double)(int)*(short *)((long)psVar29 + lVar50) *
                                (double)(int)*(short *)((long)psVar25 + lVar49);
            } while (lVar18 != ((ulong)((uVar7 - 1) - uVar6) + 1) * 2);
          }
          iVar11 = iVar11 + 1;
                    /* try { // try from 002d44e4 to 003d44e7 has its CatchHandler @ 002d4b44 */
          psVar29 = psVar29 + uVar48;
          *pdVar19 = dVar47 * param_1;
          pdVar19 = pdVar19 + 1;
        } while (iVar11 < iVar8);
                    /* try { // try from 002d44f4 to 003d44f7 has its CatchHandler @ 002d4c78 */
        iVar31 = iVar31 + 1;
        pdVar35 = pdVar35 + uVar33 + 1;
        psVar25 = psVar25 + uVar48;
      } while (iVar31 != iVar8);
    }
  }
  else {
                    /* try { // try from 002d3c6c to 003d3c6f has its CatchHandler @ 002d4cc0 */
    uVar20 = -(ulong)(uVar7 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar7 << 3;
    pdVar16 = adStack_408;
    lVar18 = 0x20;
    if (uVar6 != uVar7) {
      lVar18 = 0;
    }
    local_418 = pdVar16;
    local_410 = 0x408;
    if (uVar20 < 0x409) {
      local_410 = uVar20;
                    /* try { // try from 002d4510 to 003d4513 has its CatchHandler @ 002d49f0 */
      bVar15 = false;
    }
    else {
      local_418 = operator_new__(uVar20);
      bVar15 = local_418 != pdVar16;
      local_410 = uVar20;
                    /* try { // try from 002d3cb8 to 003d3cbb has its CatchHandler @ 002d4c90 */
      pdVar16 = local_418;
    }
                    /* try { // try from 002d3cc0 to 003d3cc3 has its CatchHandler @ 002d4cc0 */
    if (0 < iVar8) {
                    /* try { // try from 002d3ccc to 003d3ccf has its CatchHandler @ 002d4928 */
      uVar10 = (uint)((ulong)pdVar16 >> 3) & 1;
      if (uVar7 < uVar10) {
        uVar10 = uVar7;
      }
      uVar9 = uVar7 - 4 >> 2;
      iVar11 = uVar7 - uVar10;
      iVar31 = 0;
      uVar4 = (iVar11 - 8U >> 3) + 1;
      lVar50 = NEON_shl((ulong)uVar10,3);
                    /* try { // try from 002d3d54 to 003d3d9f has its CatchHandler @ 002d4814 */
      lVar49 = NEON_shl((ulong)uVar10,1);
      iVar56 = uVar4 * 8;
      uVar12 = (uVar7 - 1) - uVar10;
      do {
        if ((int)uVar6 < (int)uVar7) {
          if (0 < (int)uVar7) {
            if ((pdVar16 < pdVar19 + 1 && pdVar19 < pdVar16 + uVar7) || (uVar7 < 0xc)) {
                    /* try { // try from 002d4354 to 003d4357 has its CatchHandler @ 002d4af4 */
              lVar21 = 0;
              do {
                pdVar16[lVar21] = (double)(int)psVar25[lVar21] - *pdVar19;
                lVar21 = lVar21 + 1;
              } while ((int)lVar21 < (int)uVar7);
            }
            else {
              if (uVar10 != 0) {
                    /* try { // try from 002d41a0 to 003d41a3 has its CatchHandler @ 002d4a2c */
                *pdVar16 = (double)(int)*psVar25 - *pdVar19;
              }
                    /* try { // try from 002d41a8 to 003d41b3 has its CatchHandler @ 002d4c78 */
              uVar23 = (uint)(uVar10 != 0);
              if (6 < uVar12) {
                dVar47 = *pdVar19;
                    /* try { // try from 002d41bc to 003d41bf has its CatchHandler @ 002d4af4 */
                uVar27 = 0;
                psVar29 = (short *)((long)psVar25 + lVar49);
                pdVar30 = (double *)((long)pdVar16 + lVar50);
                do {
                  uVar27 = uVar27 + 1;
                  auVar46._0_8_ = (long)(int)*psVar29;
                  auVar46._8_8_ = (long)(int)psVar29[1];
                  auVar41._0_8_ = (long)(int)psVar29[2];
                  auVar41._8_8_ = (long)(int)psVar29[3];
                  auVar44._0_8_ = (long)(int)psVar29[4];
                  auVar44._8_8_ = (long)(int)psVar29[5];
                  auVar39._0_8_ = (long)(int)psVar29[6];
                  auVar39._8_8_ = (long)(int)psVar29[7];
                  auVar46 = NEON_scvtf(auVar46,8);
                  auVar41 = NEON_scvtf(auVar41,8);
                  auVar44 = NEON_scvtf(auVar44,8);
                  auVar39 = NEON_scvtf(auVar39,8);
                  pdVar30[1] = auVar46._8_8_ - dVar47;
                  *pdVar30 = auVar46._0_8_ - dVar47;
                  pdVar30[3] = auVar41._8_8_ - dVar47;
                  pdVar30[2] = auVar41._0_8_ - dVar47;
                  pdVar30[5] = auVar44._8_8_ - dVar47;
                  pdVar30[4] = auVar44._0_8_ - dVar47;
                  pdVar30[7] = auVar39._8_8_ - dVar47;
                  pdVar30[6] = auVar39._0_8_ - dVar47;
                  psVar29 = psVar29 + 8;
                  pdVar30 = pdVar30 + 8;
                } while (uVar27 < uVar4);
                uVar23 = uVar23 + iVar56;
                if (iVar56 == iVar11) goto LAB_002d3fc8;
              }
              iVar34 = uVar23 + 1;
              pdVar16[(int)uVar23] = (double)(int)psVar25[(int)uVar23] - *pdVar19;
              if (iVar34 < (int)uVar7) {
                iVar24 = uVar23 + 2;
                    /* try { // try from 002d428c to 003d42ff has its CatchHandler @ 002d4c30 */
                pdVar16[iVar34] = (double)(int)psVar25[iVar34] - *pdVar19;
                if (iVar24 < (int)uVar7) {
                  iVar34 = uVar23 + 3;
                  pdVar16[iVar24] = (double)(int)psVar25[iVar24] - *pdVar19;
                  if (iVar34 < (int)uVar7) {
                    iVar24 = uVar23 + 4;
                    pdVar16[iVar34] = (double)(int)psVar25[iVar34] - *pdVar19;
                    if (iVar24 < (int)uVar7) {
                      iVar34 = uVar23 + 5;
                      pdVar16[iVar24] = (double)(int)psVar25[iVar24] - *pdVar19;
                      if (iVar34 < (int)uVar7) {
                        iVar24 = uVar23 + 6;
                        pdVar16[iVar34] = (double)(int)psVar25[iVar34] - *pdVar19;
                        if (iVar24 < (int)uVar7) {
                    /* try { // try from 002d432c to 003d432f has its CatchHandler @ 002d485c */
                    /* try { // try from 002d4334 to 003d4337 has its CatchHandler @ 002d4c30 */
                          pdVar16[iVar24] = (double)(int)psVar25[iVar24] - *pdVar19;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar7) {
          if ((pdVar16 < pdVar19 + 8 && pdVar19 < pdVar16 + 8) || (uVar7 < 0xc)) {
            lVar21 = 0;
            do {
              pdVar16[lVar21] = (double)(int)psVar25[lVar21] - pdVar19[lVar21];
              lVar21 = lVar21 + 1;
            } while ((int)lVar21 < (int)uVar7);
          }
          else {
                    /* try { // try from 002d3dcc to 003d3dcf has its CatchHandler @ 002d49b0 */
            if (uVar10 != 0) {
                    /* try { // try from 002d3dd4 to 003d3dd7 has its CatchHandler @ 002d4814 */
              *pdVar16 = (double)(int)*psVar25 - *pdVar19;
            }
            uVar23 = (uint)(uVar10 != 0);
            if (6 < uVar12) {
                    /* try { // try from 002d3df4 to 003d3e57 has its CatchHandler @ 002d4928 */
              uVar27 = 0;
              pdVar30 = (double *)((long)pdVar19 + lVar50);
              psVar29 = (short *)((long)psVar25 + lVar49);
              pdVar36 = (double *)((long)pdVar16 + lVar50);
              do {
                pdVar32 = pdVar30 + 1;
                dVar55 = *pdVar30;
                dVar54 = pdVar30[3];
                dVar53 = pdVar30[2];
                dVar52 = pdVar30[5];
                dVar51 = pdVar30[4];
                dVar42 = pdVar30[7];
                dVar47 = pdVar30[6];
                uVar27 = uVar27 + 1;
                pdVar30 = pdVar30 + 8;
                auVar45._0_8_ = (long)(int)*psVar29;
                auVar45._8_8_ = (long)(int)psVar29[1];
                auVar40._0_8_ = (long)(int)psVar29[2];
                auVar40._8_8_ = (long)(int)psVar29[3];
                auVar43._0_8_ = (long)(int)psVar29[4];
                auVar43._8_8_ = (long)(int)psVar29[5];
                auVar38._0_8_ = (long)(int)psVar29[6];
                auVar38._8_8_ = (long)(int)psVar29[7];
                auVar46 = NEON_scvtf(auVar45,8);
                auVar41 = NEON_scvtf(auVar40,8);
                auVar44 = NEON_scvtf(auVar43,8);
                auVar39 = NEON_scvtf(auVar38,8);
                pdVar36[1] = auVar46._8_8_ - *pdVar32;
                *pdVar36 = auVar46._0_8_ - dVar55;
                pdVar36[3] = auVar41._8_8_ - dVar54;
                pdVar36[2] = auVar41._0_8_ - dVar53;
                pdVar36[5] = auVar44._8_8_ - dVar52;
                pdVar36[4] = auVar44._0_8_ - dVar51;
                pdVar36[7] = auVar39._8_8_ - dVar42;
                pdVar36[6] = auVar39._0_8_ - dVar47;
                psVar29 = psVar29 + 8;
                pdVar36 = pdVar36 + 8;
              } while (uVar27 < uVar4);
              uVar23 = uVar23 + iVar56;
                    /* try { // try from 002d3eb8 to 003d3ebb has its CatchHandler @ 002d4c28 */
              if (iVar56 == iVar11) goto LAB_002d3fc8;
            }
            iVar34 = uVar23 + 1;
                    /* try { // try from 002d3ec4 to 003d3ec7 has its CatchHandler @ 002d4928 */
            pdVar16[(int)uVar23] = (double)(int)psVar25[(int)uVar23] - pdVar19[(int)uVar23];
            if (iVar34 < (int)uVar7) {
              iVar24 = uVar23 + 2;
              pdVar16[iVar34] = (double)(int)psVar25[iVar34] - pdVar19[iVar34];
              if (iVar24 < (int)uVar7) {
                iVar34 = uVar23 + 3;
                pdVar16[iVar24] = (double)(int)psVar25[iVar24] - pdVar19[iVar24];
                if (iVar34 < (int)uVar7) {
                  iVar24 = uVar23 + 4;
                    /* try { // try from 002d3f4c to 003d3f9b has its CatchHandler @ 002d4cd0 */
                  pdVar16[iVar34] = (double)(int)psVar25[iVar34] - pdVar19[iVar34];
                  if (iVar24 < (int)uVar7) {
                    iVar34 = uVar23 + 5;
                    pdVar16[iVar24] = (double)(int)psVar25[iVar24] - pdVar19[iVar24];
                    if (iVar34 < (int)uVar7) {
                      iVar24 = uVar23 + 6;
                      pdVar16[iVar34] = (double)(int)psVar25[iVar34] - pdVar19[iVar34];
                      if (iVar24 < (int)uVar7) {
                        pdVar16[iVar24] = (double)(int)psVar25[iVar24] - pdVar19[iVar24];
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d3fc8:
                    /* try { // try from 002d3fc8 to 003d3fcb has its CatchHandler @ 002d4cf0 */
        psVar29 = psVar25 + 1;
                    /* try { // try from 002d3fd0 to 003d3fd3 has its CatchHandler @ 002d4cd0 */
        pdVar36 = pdVar35;
        pdVar30 = pdVar19;
        iVar34 = iVar31;
        do {
          pdVar32 = pdVar30;
          if ((int)uVar6 < (int)uVar7) {
            local_420 = *pdVar30;
                    /* try { // try from 002d3ff0 to 003d3ff3 has its CatchHandler @ 002d4928 */
            local_428 = local_420;
            local_430 = local_420;
            local_438 = local_420;
            pdVar32 = &local_438;
          }
          dVar47 = 0.0;
          if ((int)uVar7 < 4) {
            iVar24 = 0;
          }
          else {
            psVar17 = psVar29;
            pdVar26 = pdVar32;
            pdVar28 = pdVar16;
            do {
              psVar22 = psVar17 + 4;
              pdVar1 = pdVar26 + 1;
              dVar42 = *pdVar26;
              pdVar2 = pdVar26 + 2;
              pdVar3 = pdVar26 + 3;
              pdVar26 = (double *)((long)pdVar26 + lVar18);
              dVar47 = dVar47 + ((double)(int)*psVar17 - *pdVar1) * pdVar28[1] +
                                ((double)(int)psVar17[-1] - dVar42) * *pdVar28 +
                                ((double)(int)psVar17[1] - *pdVar2) * pdVar28[2] +
                                ((double)(int)psVar17[2] - *pdVar3) * pdVar28[3];
              psVar17 = psVar22;
              pdVar28 = pdVar28 + 4;
            } while (psVar22 != psVar29 + (ulong)uVar9 * 4 + 4);
            pdVar32 = (double *)((long)pdVar32 + lVar18 + (ulong)uVar9 * lVar18);
            iVar24 = (uVar9 + 1) * 4;
          }
          if (iVar24 < (int)uVar7) {
                    /* try { // try from 002d40ac to 003d4157 has its CatchHandler @ 002d4c78 */
            lVar21 = 0;
            do {
              lVar13 = lVar21 + -1;
              pdVar26 = pdVar32 + lVar21;
              lVar14 = iVar24 + lVar21;
              lVar21 = lVar21 + 1;
              dVar47 = dVar47 + ((double)(int)psVar29[iVar24 + lVar13] - *pdVar26) * pdVar16[lVar14]
              ;
            } while (lVar21 != (ulong)((uVar7 - 1) - iVar24) + 1);
          }
          iVar34 = iVar34 + 1;
          pdVar30 = pdVar30 + uVar37;
          psVar29 = psVar29 + uVar48;
          *pdVar36 = dVar47 * param_1;
          pdVar36 = pdVar36 + 1;
        } while (iVar34 < iVar8);
        iVar31 = iVar31 + 1;
        pdVar19 = pdVar19 + uVar37;
        psVar25 = psVar25 + uVar48;
        pdVar35 = pdVar35 + uVar33 + 1;
      } while (iVar31 != iVar8);
    }
    if (bVar15) {
      local_418 = pdVar16;
      local_410 = uVar20;
      operator_delete__(pdVar16);
    }
  }
  return;
}


==================================================================

### FUNC 002d451c (2432 bytes) name=FUN_002d451c

void FUN_002d451c(double param_1,long param_2,long param_3,long param_4)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  uint uVar4;
  undefined8 *puVar5;
  short *psVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  long lVar16;
  long lVar17;
  bool bVar18;
  float *pfVar19;
  short *psVar20;
  long lVar21;
  float *pfVar22;
  ulong uVar23;
  undefined8 *puVar24;
  short *psVar25;
  uint uVar26;
  long lVar27;
  int iVar28;
  short *psVar29;
  short *psVar30;
  uint uVar31;
  float *pfVar32;
  undefined8 *puVar33;
  float *pfVar34;
  int iVar35;
  float *pfVar36;
  float *pfVar37;
  int iVar38;
  float *pfVar39;
  ulong uVar40;
  ulong uVar41;
  float *pfVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  float fVar51;
  undefined8 uVar52;
  double dVar53;
  ulong uVar54;
  long lVar55;
  int iVar56;
  long lVar57;
  float local_428;
  float local_424;
  float local_420;
  float local_41c;
  float *local_418;
  ulong local_410;
  float afStack_408 [258];
  
  pfVar39 = *(float **)(param_3 + 0x10);
                    /* try { // try from 002d455c to 003d455f has its CatchHandler @ 002d49c0 */
  uVar40 = *(ulong *)(param_3 + 0x50) >> 2;
  psVar29 = *(short **)(param_2 + 0x10);
                    /* try { // try from 002d4564 to 003d4567 has its CatchHandler @ 002d49f0 */
  pfVar22 = *(float **)(param_4 + 0x10);
  uVar54 = *(ulong *)(param_2 + 0x50) >> 1;
  if (*(int *)(param_4 + 8) < 2) {
    uVar41 = 0;
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
                    /* try { // try from 002d4588 to 003d458b has its CatchHandler @ 002d4814 */
    uVar41 = *(ulong *)(param_4 + 0x50) >> 2;
    iVar10 = **(int **)(param_2 + 0x40);
  }
  if (pfVar22 == (float *)0x0) {
    if (0 < iVar10) {
      uVar7 = uVar9 - 4 >> 2;
      uVar8 = (uVar7 + 1) * 4;
      if ((int)(uVar9 - 3) < 1) {
        uVar8 = 0;
      }
      iVar38 = 0;
      uVar41 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
      do {
        psVar30 = psVar29 + 1;
        pfVar22 = pfVar39;
        iVar12 = iVar38;
        do {
          dVar53 = 0.0;
          if (0 < (int)(uVar9 - 3)) {
            psVar20 = psVar30;
            psVar25 = psVar29;
            do {
              psVar6 = psVar20 + 4;
              dVar53 = dVar53 + (double)(int)psVar25[1] * (double)(int)*psVar20 +
                                (double)(int)psVar20[-1] * (double)(int)*psVar25 +
                                (double)(int)psVar20[1] * (double)(int)psVar25[2] +
                                (double)(int)psVar20[2] * (double)(int)psVar25[3];
              psVar20 = psVar6;
              psVar25 = psVar25 + 4;
            } while (psVar6 != psVar30 + (ulong)uVar7 * 4 + 4);
          }
          if ((int)uVar8 < (int)uVar9) {
            lVar21 = 0;
            do {
              lVar55 = lVar21 + uVar41;
              lVar57 = lVar21 + (uVar41 - 2);
              lVar21 = lVar21 + 2;
              dVar53 = dVar53 + (double)(int)*(short *)((long)psVar30 + lVar57) *
                                (double)(int)*(short *)((long)psVar29 + lVar55);
            } while (lVar21 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 2);
          }
          iVar12 = iVar12 + 1;
          psVar30 = psVar30 + uVar54;
          *pfVar22 = (float)(dVar53 * param_1);
          pfVar22 = pfVar22 + 1;
        } while (iVar12 < iVar10);
        iVar38 = iVar38 + 1;
        pfVar39 = pfVar39 + uVar40 + 1;
        psVar29 = psVar29 + uVar54;
      } while (iVar38 != iVar10);
    }
  }
  else {
                    /* try { // try from 002d45a4 to 003d45a7 has its CatchHandler @ 002d4c18 */
    uVar23 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2;
    pfVar19 = afStack_408;
    lVar21 = 0x10;
    if (uVar8 != uVar9) {
      lVar21 = 0;
    }
    local_418 = pfVar19;
    local_410 = 0x408;
    if (uVar23 < 0x409) {
      local_410 = uVar23;
      bVar18 = false;
    }
    else {
      local_418 = operator_new__(uVar23);
      bVar18 = local_418 != pfVar19;
      local_410 = uVar23;
                    /* try { // try from 002d45f0 to 003d45f3 has its CatchHandler @ 002d4c00 */
      pfVar19 = local_418;
    }
                    /* try { // try from 002d45f8 to 003d45fb has its CatchHandler @ 002d4c18 */
    if (0 < iVar10) {
      uVar7 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
                    /* try { // try from 002d461c to 003d461f has its CatchHandler @ 002d4cc8 */
      if (uVar9 < uVar7) {
        uVar7 = uVar9;
      }
      uVar11 = uVar9 - 4 >> 2;
      iVar38 = 0;
                    /* try { // try from 002d4640 to 003d4643 has its CatchHandler @ 002d4cd0 */
                    /* try { // try from 002d4664 to 003d4667 has its CatchHandler @ 002d4930 */
      iVar12 = uVar9 - uVar7;
      lVar57 = NEON_shl((ulong)uVar7,2);
      uVar13 = (uVar9 - 1) - uVar7;
      lVar55 = NEON_shl((ulong)uVar7,1);
      uVar4 = (iVar12 - 8U >> 3) + 1;
                    /* try { // try from 002d469c to 003d469f has its CatchHandler @ 002d4ad4 */
      iVar56 = uVar4 * 8;
      do {
                    /* try { // try from 002d46c0 to 003d46c3 has its CatchHandler @ 002d4c30 */
        if ((int)uVar8 < (int)uVar9) {
          if (0 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d3390 with catch @ 002d4acc
                       catch() { ... } // from try @ 002d39e8 with catch @ 002d4acc
                       catch() { ... } // from try @ 002d3a3c with catch @ 002d4acc */
                    /* catch() { ... } // from try @ 002d2aec with catch @ 002d4ad4
                       catch() { ... } // from try @ 002d2b68 with catch @ 002d4ad4
                       catch() { ... } // from try @ 002d469c with catch @ 002d4ad4 */
            if ((pfVar19 < pfVar22 + 1 && pfVar22 < pfVar19 + uVar9) || (uVar9 < 0xb)) {
              lVar27 = 0;
              do {
                    /* catch() { ... } // from try @ 002d2f2c with catch @ 002d4cc8
                       catch() { ... } // from try @ 002d2fa8 with catch @ 002d4cc8
                       catch() { ... } // from try @ 002d461c with catch @ 002d4cc8 */
                    /* catch() { ... } // from try @ 002d3f4c with catch @ 002d4cd0
                       catch() { ... } // from try @ 002d3fd0 with catch @ 002d4cd0
                       catch() { ... } // from try @ 002d4640 with catch @ 002d4cd0 */
                pfVar19[lVar27] = (float)(int)psVar29[lVar27] - *pfVar22;
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < (int)uVar9);
            }
            else {
              uVar26 = uVar7;
                    /* catch() { ... } // from try @ 002d41bc with catch @ 002d4af4
                       catch() { ... } // from try @ 002d4354 with catch @ 002d4af4
                       catch() { ... } // from try @ 002d4804 with catch @ 002d4af4 */
                    /* catch() { ... } // from try @ 002d44b8 with catch @ 002d4afc */
              if ((uVar7 != 0) && (*pfVar19 = (float)(int)*psVar29 - *pfVar22, uVar7 != 1)) {
                pfVar19[1] = (float)(int)psVar29[1] - *pfVar22;
                    /* catch() { ... } // from try @ 002d446c with catch @ 002d4b2c
                       catch() { ... } // from try @ 002d44c0 with catch @ 002d4b2c */
                if (uVar7 == 3) {
                    /* catch() { ... } // from try @ 002d2b60 with catch @ 002d4b34 */
                    /* catch() { ... } // from try @ 002d2974 with catch @ 002d4b44
                       catch() { ... } // from try @ 002d29f0 with catch @ 002d4b44
                       catch() { ... } // from try @ 002d44e4 with catch @ 002d4b44 */
                  pfVar19[2] = (float)(int)psVar29[2] - *pfVar22;
                }
                else {
                  uVar26 = 2;
                }
              }
                    /* catch() { ... } // from try @ 002d2860 with catch @ 002d4b4c */
              if (6 < uVar13) {
                fVar51 = *pfVar22;
                uVar31 = 0;
                psVar30 = (short *)((long)psVar29 + lVar55);
                puVar24 = (undefined8 *)((long)pfVar19 + lVar57);
                do {
                    /* catch() { ... } // from try @ 002d3740 with catch @ 002d4b74
                       catch() { ... } // from try @ 002d480c with catch @ 002d4b74 */
                  uVar31 = uVar31 + 1;
                  auVar49._0_4_ = (int)*psVar30;
                  auVar49._4_4_ = (int)psVar30[1];
                  auVar49._8_4_ = (int)psVar30[2];
                  auVar49._12_4_ = (int)psVar30[3];
                  auVar44._0_4_ = (int)psVar30[4];
                  auVar44._4_4_ = (int)psVar30[5];
                  auVar44._8_4_ = (int)psVar30[6];
                  auVar44._12_4_ = (int)psVar30[7];
                  auVar47 = NEON_scvtf(auVar49,4);
                  auVar44 = NEON_scvtf(auVar44,4);
                    /* catch() { ... } // from try @ 002d2d74 with catch @ 002d4b98
                       catch() { ... } // from try @ 002d43d8 with catch @ 002d4b98
                       catch() { ... } // from try @ 002d442c with catch @ 002d4b98 */
                  auVar50._0_8_ = CONCAT44(auVar47._4_4_ - fVar51,auVar47._0_4_ - fVar51);
                  auVar50._8_4_ = auVar47._8_4_ - fVar51;
                  auVar50._12_4_ = auVar47._12_4_ - fVar51;
                  auVar47._0_8_ = CONCAT44(auVar44._4_4_ - fVar51,auVar44._0_4_ - fVar51);
                  auVar47._8_4_ = auVar44._8_4_ - fVar51;
                  auVar47._12_4_ = auVar44._12_4_ - fVar51;
                  puVar24[1] = auVar50._8_8_;
                  *puVar24 = auVar50._0_8_;
                  puVar24[3] = auVar47._8_8_;
                  puVar24[2] = auVar47._0_8_;
                  psVar30 = psVar30 + 8;
                  puVar24 = puVar24 + 4;
                } while (uVar31 < uVar4);
                uVar26 = uVar26 + iVar56;
                    /* catch() { ... } // from try @ 002d26d4 with catch @ 002d4bbc */
                if (iVar56 == iVar12) goto LAB_002d4900;
              }
              iVar35 = uVar26 + 1;
                    /* catch() { ... } // from try @ 002d2e14 with catch @ 002d4bcc */
              pfVar19[(int)uVar26] = (float)(int)psVar29[(int)uVar26] - *pfVar22;
              if (iVar35 < (int)uVar9) {
                iVar28 = uVar26 + 2;
                    /* catch() { ... } // from try @ 002d2de4 with catch @ 002d4bf8
                       catch() { ... } // from try @ 002d2e1c with catch @ 002d4bf8 */
                    /* catch() { ... } // from try @ 002d45f0 with catch @ 002d4c00 */
                pfVar19[iVar35] = (float)(int)psVar29[iVar35] - *pfVar22;
                if (iVar28 < (int)uVar9) {
                  iVar35 = uVar26 + 3;
                    /* catch() { ... } // from try @ 002d45a4 with catch @ 002d4c18
                       catch() { ... } // from try @ 002d45f8 with catch @ 002d4c18 */
                    /* catch() { ... } // from try @ 002d2db4 with catch @ 002d4c20 */
                  pfVar19[iVar28] = (float)(int)psVar29[iVar28] - *pfVar22;
                    /* catch() { ... } // from try @ 002d27ec with catch @ 002d4c28
                       catch() { ... } // from try @ 002d2868 with catch @ 002d4c28
                       catch() { ... } // from try @ 002d3eb8 with catch @ 002d4c28 */
                  if (iVar35 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d428c with catch @ 002d4c30
                       catch() { ... } // from try @ 002d4334 with catch @ 002d4c30
                       catch() { ... } // from try @ 002d46c0 with catch @ 002d4c30 */
                    iVar28 = uVar26 + 4;
                    /* catch() { ... } // from try @ 002d3bfc with catch @ 002d4c38 */
                    pfVar19[iVar35] = (float)(int)psVar29[iVar35] - *pfVar22;
                    if (iVar28 < (int)uVar9) {
                      iVar35 = uVar26 + 5;
                    /* catch() { ... } // from try @ 002d3b84 with catch @ 002d4c60
                       catch() { ... } // from try @ 002d3c04 with catch @ 002d4c60
                       catch() { ... } // from try @ 002d4450 with catch @ 002d4c60 */
                    /* catch() { ... } // from try @ 002d4424 with catch @ 002d4c68 */
                      pfVar19[iVar28] = (float)(int)psVar29[iVar28] - *pfVar22;
                      if (iVar35 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d40ac with catch @ 002d4c78
                       catch() { ... } // from try @ 002d41a8 with catch @ 002d4c78
                       catch() { ... } // from try @ 002d44f4 with catch @ 002d4c78 */
                        iVar28 = uVar26 + 6;
                    /* catch() { ... } // from try @ 002d3290 with catch @ 002d4c80 */
                    /* catch() { ... } // from try @ 002d3cb8 with catch @ 002d4c90 */
                        pfVar19[iVar35] = (float)(int)psVar29[iVar35] - *pfVar22;
                        if (iVar28 < (int)uVar9) {
                          pfVar19[iVar28] = (float)(int)psVar29[iVar28] - *pfVar22;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar9) {
                    /* try { // try from 002d46f0 to 003d46f3 has its CatchHandler @ 002d4a7c */
          if ((pfVar19 < pfVar22 + 8 && pfVar22 < pfVar19 + 8) || (uVar9 < 0xb)) {
            lVar27 = 0;
            do {
                    /* catch() { ... } // from try @ 002d3fc8 with catch @ 002d4cf0 */
                    /* catch() { ... } // from try @ 002d473c with catch @ 002d4d00 */
              pfVar19[lVar27] = (float)(int)psVar29[lVar27] - pfVar22[lVar27];
              lVar27 = lVar27 + 1;
            } while ((int)lVar27 < (int)uVar9);
          }
          else {
            uVar26 = uVar7;
            if ((uVar7 != 0) && (*pfVar19 = (float)(int)*psVar29 - *pfVar22, uVar7 != 1)) {
                    /* try { // try from 002d473c to 003d473f has its CatchHandler @ 002d4d00 */
              pfVar19[1] = (float)(int)psVar29[1] - pfVar22[1];
                    /* try { // try from 002d4744 to 003d4747 has its CatchHandler @ 002d4a7c */
              if (uVar7 == 3) {
                pfVar19[2] = (float)(int)psVar29[2] - pfVar22[2];
              }
              else {
                uVar26 = 2;
              }
            }
            if (6 < uVar13) {
              uVar31 = 0;
              puVar24 = (undefined8 *)((long)pfVar22 + lVar57);
              psVar30 = (short *)((long)psVar29 + lVar55);
              puVar33 = (undefined8 *)((long)pfVar19 + lVar57);
              do {
                puVar5 = puVar24 + 2;
                puVar15 = puVar24 + 1;
                uVar52 = *puVar24;
                puVar14 = puVar24 + 3;
                uVar31 = uVar31 + 1;
                puVar24 = puVar24 + 4;
                auVar46._0_4_ = (int)*psVar30;
                auVar46._4_4_ = (int)psVar30[1];
                auVar46._8_4_ = (int)psVar30[2];
                auVar46._12_4_ = (int)psVar30[3];
                auVar43._0_4_ = (int)psVar30[4];
                auVar43._4_4_ = (int)psVar30[5];
                auVar43._8_4_ = (int)psVar30[6];
                auVar43._12_4_ = (int)psVar30[7];
                auVar47 = NEON_scvtf(auVar46,4);
                auVar44 = NEON_scvtf(auVar43,4);
                auVar48._0_8_ =
                     CONCAT44(auVar47._4_4_ - (float)((ulong)uVar52 >> 0x20),
                              auVar47._0_4_ - (float)uVar52);
                auVar48._8_4_ = auVar47._8_4_ - (float)*puVar15;
                auVar48._12_4_ = auVar47._12_4_ - (float)((ulong)*puVar15 >> 0x20);
                auVar45._0_8_ =
                     CONCAT44(auVar44._4_4_ - (float)((ulong)*puVar5 >> 0x20),
                              auVar44._0_4_ - (float)*puVar5);
                auVar45._8_4_ = auVar44._8_4_ - (float)*puVar14;
                auVar45._12_4_ = auVar44._12_4_ - (float)((ulong)*puVar14 >> 0x20);
                puVar33[1] = auVar48._8_8_;
                *puVar33 = auVar48._0_8_;
                puVar33[3] = auVar45._8_8_;
                puVar33[2] = auVar45._0_8_;
                psVar30 = psVar30 + 8;
                puVar33 = puVar33 + 4;
              } while (uVar31 < uVar4);
              uVar26 = uVar26 + iVar56;
              if (iVar56 == iVar12) goto LAB_002d4900;
            }
            iVar35 = uVar26 + 1;
                    /* try { // try from 002d47fc to 003d47ff has its CatchHandler @ 002d4a58 */
                    /* try { // try from 002d4804 to 003d4807 has its CatchHandler @ 002d4af4 */
                    /* try { // try from 002d480c to 003d480f has its CatchHandler @ 002d4b74 */
                    /* catch() { ... } // from try @ 002d3d54 with catch @ 002d4814
                       catch() { ... } // from try @ 002d3dd4 with catch @ 002d4814
                       catch() { ... } // from try @ 002d4588 with catch @ 002d4814 */
            pfVar19[(int)uVar26] = (float)(int)psVar29[(int)uVar26] - pfVar22[(int)uVar26];
            if (iVar35 < (int)uVar9) {
              iVar28 = uVar26 + 2;
              pfVar19[iVar35] = (float)(int)psVar29[iVar35] - pfVar22[iVar35];
              if (iVar28 < (int)uVar9) {
                iVar35 = uVar26 + 3;
                    /* try { // try from 002d4858 to 003d485b has its CatchHandler @ 002d258c */
                    /* catch() { ... } // from try @ 002d432c with catch @ 002d485c */
                pfVar19[iVar28] = (float)(int)psVar29[iVar28] - pfVar22[iVar28];
                if (iVar35 < (int)uVar9) {
                  iVar28 = uVar26 + 4;
                  pfVar19[iVar35] = (float)(int)psVar29[iVar35] - pfVar22[iVar35];
                  if (iVar28 < (int)uVar9) {
                    iVar35 = uVar26 + 5;
                    pfVar19[iVar28] = (float)(int)psVar29[iVar28] - pfVar22[iVar28];
                    if (iVar35 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d2fa0 with catch @ 002d48c0 */
                      iVar28 = uVar26 + 6;
                      pfVar19[iVar35] = (float)(int)psVar29[iVar35] - pfVar22[iVar35];
                      if (iVar28 < (int)uVar9) {
                    /* catch() { ... } // from try @ 002d3104 with catch @ 002d48f0 */
                        pfVar19[iVar28] = (float)(int)psVar29[iVar28] - pfVar22[iVar28];
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d4900:
        psVar30 = psVar29 + 1;
        pfVar34 = pfVar22;
        pfVar42 = pfVar39;
        iVar35 = iVar38;
        do {
                    /* catch() { ... } // from try @ 002d2668 with catch @ 002d4918 */
          pfVar32 = pfVar34;
          if ((int)uVar8 < (int)uVar9) {
            local_41c = *pfVar34;
                    /* catch() { ... } // from try @ 002d2638 with catch @ 002d4928
                       catch() { ... } // from try @ 002d2670 with catch @ 002d4928
                       catch() { ... } // from try @ 002d26dc with catch @ 002d4928
                       catch() { ... } // from try @ 002d2764 with catch @ 002d4928
                       catch() { ... } // from try @ 002d2888 with catch @ 002d4928
                       catch() { ... } // from try @ 002d29f8 with catch @ 002d4928
                       catch() { ... } // from try @ 002d2b70 with catch @ 002d4928
                       catch() { ... } // from try @ 002d2e78 with catch @ 002d4928
                       catch() { ... } // from try @ 002d2fb0 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3114 with catch @ 002d4928
                       catch() { ... } // from try @ 002d32a0 with catch @ 002d4928
                       catch() { ... } // from try @ 002d342c with catch @ 002d4928
                       catch() { ... } // from try @ 002d3584 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3790 with catch @ 002d4928
                       catch() { ... } // from try @ 002d38cc with catch @ 002d4928
                       catch() { ... } // from try @ 002d3a74 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3b00 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3c0c with catch @ 002d4928
                       catch() { ... } // from try @ 002d3ccc with catch @ 002d4928
                       catch() { ... } // from try @ 002d3df4 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3ec4 with catch @ 002d4928
                       catch() { ... } // from try @ 002d3ff0 with catch @ 002d4928
                       catch() { ... } // from try @ 002d43a8 with catch @ 002d4928 */
            local_420 = local_41c;
                    /* catch() { ... } // from try @ 002d308c with catch @ 002d4930
                       catch() { ... } // from try @ 002d310c with catch @ 002d4930
                       catch() { ... } // from try @ 002d4664 with catch @ 002d4930 */
            local_424 = local_41c;
            local_428 = local_41c;
            pfVar32 = &local_428;
          }
                    /* catch() { ... } // from try @ 002d38bc with catch @ 002d4938 */
          dVar53 = 0.0;
          if ((int)uVar9 < 4) {
            iVar28 = 0;
          }
          else {
            psVar20 = psVar30;
            pfVar36 = pfVar32;
            pfVar37 = pfVar19;
            do {
              psVar25 = psVar20 + 4;
              pfVar1 = pfVar36 + 1;
                    /* catch() { ... } // from try @ 002d320c with catch @ 002d4960
                       catch() { ... } // from try @ 002d3298 with catch @ 002d4960
                       catch() { ... } // from try @ 002d3670 with catch @ 002d4960 */
              fVar51 = *pfVar36;
                    /* catch() { ... } // from try @ 002d3844 with catch @ 002d4980
                       catch() { ... } // from try @ 002d38c4 with catch @ 002d4980
                       catch() { ... } // from try @ 002d3af4 with catch @ 002d4980 */
                    /* catch() { ... } // from try @ 002d29e8 with catch @ 002d4988 */
              pfVar2 = pfVar36 + 2;
                    /* catch() { ... } // from try @ 002d3dcc with catch @ 002d49b0 */
                    /* catch() { ... } // from try @ 002d455c with catch @ 002d49c0 */
              pfVar3 = pfVar36 + 3;
              pfVar36 = (float *)((long)pfVar36 + lVar21);
              dVar53 = dVar53 + (double)pfVar37[1] * (double)((float)(int)*psVar20 - *pfVar1) +
                                (double)((float)(int)psVar20[-1] - fVar51) * (double)*pfVar37 +
                                (double)((float)(int)psVar20[1] - *pfVar2) * (double)pfVar37[2] +
                                (double)((float)(int)psVar20[2] - *pfVar3) * (double)pfVar37[3];
              psVar20 = psVar25;
              pfVar37 = pfVar37 + 4;
            } while (psVar25 != psVar30 + (ulong)uVar11 * 4 + 4);
            pfVar32 = (float *)((long)pfVar32 + lVar21 + (ulong)uVar11 * lVar21);
                    /* catch() { ... } // from try @ 002d4510 with catch @ 002d49f0
                       catch() { ... } // from try @ 002d4564 with catch @ 002d49f0 */
            iVar28 = (uVar11 + 1) * 4;
          }
                    /* catch() { ... } // from try @ 002d33d0 with catch @ 002d49f8 */
          if (iVar28 < (int)uVar9) {
            lVar27 = 0;
            do {
              lVar16 = lVar27 + -1;
              pfVar36 = pfVar32 + lVar27;
              lVar17 = iVar28 + lVar27;
              lVar27 = lVar27 + 1;
                    /* catch() { ... } // from try @ 002d33b0 with catch @ 002d4a24
                       catch() { ... } // from try @ 002d33d8 with catch @ 002d4a24
                       catch() { ... } // from try @ 002d3a44 with catch @ 002d4a24 */
                    /* catch() { ... } // from try @ 002d41a0 with catch @ 002d4a2c */
              dVar53 = dVar53 + (double)((float)(int)psVar30[iVar28 + lVar16] - *pfVar36) *
                                (double)pfVar19[lVar17];
            } while (lVar27 != (ulong)((uVar9 - 1) - iVar28) + 1);
          }
          iVar35 = iVar35 + 1;
          pfVar34 = pfVar34 + uVar41;
          psVar30 = psVar30 + uVar54;
                    /* catch() { ... } // from try @ 002d2d94 with catch @ 002d4a58
                       catch() { ... } // from try @ 002d2e24 with catch @ 002d4a58
                       catch() { ... } // from try @ 002d47fc with catch @ 002d4a58 */
          *pfVar42 = (float)(dVar53 * param_1);
          pfVar42 = pfVar42 + 1;
        } while (iVar35 < iVar10);
        iVar38 = iVar38 + 1;
        pfVar22 = pfVar22 + uVar41;
        psVar29 = psVar29 + uVar54;
        pfVar39 = pfVar39 + uVar40 + 1;
      } while (iVar38 != iVar10);
    }
                    /* catch() { ... } // from try @ 002d3708 with catch @ 002d4a7c
                       catch() { ... } // from try @ 002d46f0 with catch @ 002d4a7c
                       catch() { ... } // from try @ 002d4744 with catch @ 002d4a7c */
    if (bVar18) {
      local_418 = pfVar19;
      local_410 = uVar23;
      operator_delete__(pfVar19);
    }
  }
                    /* catch() { ... } // from try @ 002d3a34 with catch @ 002d4aa0 */
  return;
}


==================================================================

### FUNC 002d4e9c (2432 bytes) name=FUN_002d4e9c

void FUN_002d4e9c(double param_1,long param_2,long param_3,long param_4)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  uint uVar4;
  undefined8 *puVar5;
  ushort *puVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  long lVar16;
  long lVar17;
  bool bVar18;
  float *pfVar19;
  ushort *puVar20;
  long lVar21;
  float *pfVar22;
  ulong uVar23;
  undefined8 *puVar24;
  ushort *puVar25;
  uint uVar26;
  long lVar27;
  int iVar28;
  ushort *puVar29;
  ushort *puVar30;
  uint uVar31;
  float *pfVar32;
  undefined8 *puVar33;
  float *pfVar34;
  int iVar35;
  float *pfVar36;
  float *pfVar37;
  int iVar38;
  float *pfVar39;
  ulong uVar40;
  ulong uVar41;
  float *pfVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  float fVar51;
  undefined8 uVar52;
  double dVar53;
  ulong uVar54;
  long lVar55;
  int iVar56;
  long lVar57;
  float local_428;
  float local_424;
  float local_420;
  float local_41c;
  float *local_418;
  ulong local_410;
  float afStack_408 [258];
  
  pfVar39 = *(float **)(param_3 + 0x10);
  uVar40 = *(ulong *)(param_3 + 0x50) >> 2;
  puVar29 = *(ushort **)(param_2 + 0x10);
  pfVar22 = *(float **)(param_4 + 0x10);
  uVar54 = *(ulong *)(param_2 + 0x50) >> 1;
  if (*(int *)(param_4 + 8) < 2) {
    uVar41 = 0;
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    iVar10 = **(int **)(param_2 + 0x40);
  }
  else {
    uVar8 = *(uint *)(param_4 + 0xc);
    uVar9 = (*(int **)(param_2 + 0x40))[1];
    uVar41 = *(ulong *)(param_4 + 0x50) >> 2;
    iVar10 = **(int **)(param_2 + 0x40);
  }
  if (pfVar22 == (float *)0x0) {
                    /* try { // try from 002d56c4 to 003d56c7 has its CatchHandler @ 002d554c */
    if (0 < iVar10) {
      uVar7 = uVar9 - 4 >> 2;
      uVar8 = (uVar7 + 1) * 4;
      if ((int)(uVar9 - 3) < 1) {
        uVar8 = 0;
      }
                    /* try { // try from 002d5700 to 003d5703 has its CatchHandler @ 002d5a7c */
      iVar38 = 0;
                    /* try { // try from 002d5708 to 003d5753 has its CatchHandler @ 002d554c */
      uVar41 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar8 << 1;
      do {
        puVar30 = puVar29 + 1;
        pfVar22 = pfVar39;
        iVar12 = iVar38;
        do {
          dVar53 = 0.0;
          if (0 < (int)(uVar9 - 3)) {
            puVar20 = puVar30;
            puVar25 = puVar29;
            do {
              puVar6 = puVar20 + 4;
                    /* try { // try from 002d5780 to 003d5783 has its CatchHandler @ 002d5a54 */
                    /* try { // try from 002d5788 to 003d5923 has its CatchHandler @ 002d554c */
              dVar53 = dVar53 + (double)puVar25[1] * (double)*puVar20 +
                                (double)puVar20[-1] * (double)*puVar25 +
                                (double)puVar20[1] * (double)puVar25[2] +
                                (double)puVar20[2] * (double)puVar25[3];
              puVar20 = puVar6;
              puVar25 = puVar25 + 4;
            } while (puVar6 != puVar30 + (ulong)uVar7 * 4 + 4);
          }
          if ((int)uVar8 < (int)uVar9) {
            lVar21 = 0;
            do {
              lVar55 = lVar21 + uVar41;
              lVar57 = lVar21 + (uVar41 - 2);
              lVar21 = lVar21 + 2;
              dVar53 = dVar53 + (double)*(ushort *)((long)puVar30 + lVar57) *
                                (double)*(ushort *)((long)puVar29 + lVar55);
            } while (lVar21 != ((ulong)((uVar9 - 1) - uVar8) + 1) * 2);
          }
          iVar12 = iVar12 + 1;
          puVar30 = puVar30 + uVar54;
          *pfVar22 = (float)(dVar53 * param_1);
          pfVar22 = pfVar22 + 1;
        } while (iVar12 < iVar10);
        iVar38 = iVar38 + 1;
        pfVar39 = pfVar39 + uVar40 + 1;
        puVar29 = puVar29 + uVar54;
      } while (iVar38 != iVar10);
    }
  }
  else {
    uVar23 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2;
    pfVar19 = afStack_408;
    lVar21 = 0x10;
    if (uVar8 != uVar9) {
      lVar21 = 0;
    }
    local_418 = pfVar19;
    local_410 = 0x408;
    if (uVar23 < 0x409) {
      local_410 = uVar23;
      bVar18 = false;
    }
    else {
      local_418 = operator_new__(uVar23);
      bVar18 = local_418 != pfVar19;
      local_410 = uVar23;
      pfVar19 = local_418;
    }
    if (0 < iVar10) {
      uVar7 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
      if (uVar9 < uVar7) {
        uVar7 = uVar9;
      }
      uVar11 = uVar9 - 4 >> 2;
      iVar38 = 0;
      iVar12 = uVar9 - uVar7;
      lVar57 = NEON_shl((ulong)uVar7,2);
      uVar13 = (uVar9 - 1) - uVar7;
      lVar55 = NEON_shl((ulong)uVar7,1);
      uVar4 = (iVar12 - 8U >> 3) + 1;
      iVar56 = uVar4 * 8;
      do {
        if ((int)uVar8 < (int)uVar9) {
          if (0 < (int)uVar9) {
            if ((pfVar19 < pfVar22 + 1 && pfVar22 < pfVar19 + uVar9) || (uVar9 < 0xb)) {
              lVar27 = 0;
              do {
                pfVar19[lVar27] = (float)puVar29[lVar27] - *pfVar22;
                lVar27 = lVar27 + 1;
              } while ((int)lVar27 < (int)uVar9);
            }
            else {
              uVar26 = uVar7;
              if ((uVar7 != 0) && (*pfVar19 = (float)*puVar29 - *pfVar22, uVar7 != 1)) {
                pfVar19[1] = (float)puVar29[1] - *pfVar22;
                if (uVar7 == 3) {
                  pfVar19[2] = (float)puVar29[2] - *pfVar22;
                }
                else {
                  uVar26 = 2;
                }
              }
              if (6 < uVar13) {
                fVar51 = *pfVar22;
                uVar31 = 0;
                puVar30 = (ushort *)((long)puVar29 + lVar55);
                puVar24 = (undefined8 *)((long)pfVar19 + lVar57);
                do {
                  uVar31 = uVar31 + 1;
                  auVar49._2_2_ = 0;
                  auVar49._0_2_ = *puVar30;
                  auVar49._4_2_ = puVar30[1];
                  auVar49._6_2_ = 0;
                  auVar49._8_2_ = puVar30[2];
                  auVar49._10_2_ = 0;
                  auVar49._12_2_ = puVar30[3];
                  auVar49._14_2_ = 0;
                  auVar44._2_2_ = 0;
                  auVar44._0_2_ = puVar30[4];
                  auVar44._4_2_ = puVar30[5];
                  auVar44._6_2_ = 0;
                  auVar44._8_2_ = puVar30[6];
                  auVar44._10_2_ = 0;
                  auVar44._12_2_ = puVar30[7];
                  auVar44._14_2_ = 0;
                  auVar47 = NEON_scvtf(auVar49,4);
                  auVar44 = NEON_scvtf(auVar44,4);
                  auVar50._0_8_ = CONCAT44(auVar47._4_4_ - fVar51,auVar47._0_4_ - fVar51);
                  auVar50._8_4_ = auVar47._8_4_ - fVar51;
                  auVar50._12_4_ = auVar47._12_4_ - fVar51;
                  auVar47._0_8_ = CONCAT44(auVar44._4_4_ - fVar51,auVar44._0_4_ - fVar51);
                  auVar47._8_4_ = auVar44._8_4_ - fVar51;
                  auVar47._12_4_ = auVar44._12_4_ - fVar51;
                  puVar24[1] = auVar50._8_8_;
                  *puVar24 = auVar50._0_8_;
                  puVar24[3] = auVar47._8_8_;
                  puVar24[2] = auVar47._0_8_;
                  puVar30 = puVar30 + 8;
                  puVar24 = puVar24 + 4;
                } while (uVar31 < uVar4);
                uVar26 = uVar26 + iVar56;
                if (iVar56 == iVar12) goto LAB_002d5280;
              }
              iVar35 = uVar26 + 1;
                    /* catch() { ... } // from try @ 002d56c4 with catch @ 002d554c
                       catch() { ... } // from try @ 002d5708 with catch @ 002d554c
                       catch() { ... } // from try @ 002d5788 with catch @ 002d554c
                       catch() { ... } // from try @ 002d597c with catch @ 002d554c
                       catch() { ... } // from try @ 002d5a44 with catch @ 002d554c
                       catch() { ... } // from try @ 002d5a64 with catch @ 002d554c
                       catch() { ... } // from try @ 002d5a78 with catch @ 002d554c
                       catch() { ... } // from try @ 002d5a8c with catch @ 002d554c
                       catch() { ... } // from try @ 002d5aa0 with catch @ 002d554c */
              pfVar19[(int)uVar26] = (float)puVar29[(int)uVar26] - *pfVar22;
              if (iVar35 < (int)uVar9) {
                iVar28 = uVar26 + 2;
                pfVar19[iVar35] = (float)puVar29[iVar35] - *pfVar22;
                if (iVar28 < (int)uVar9) {
                  iVar35 = uVar26 + 3;
                  pfVar19[iVar28] = (float)puVar29[iVar28] - *pfVar22;
                  if (iVar35 < (int)uVar9) {
                    iVar28 = uVar26 + 4;
                    pfVar19[iVar35] = (float)puVar29[iVar35] - *pfVar22;
                    if (iVar28 < (int)uVar9) {
                      iVar35 = uVar26 + 5;
                      pfVar19[iVar28] = (float)puVar29[iVar28] - *pfVar22;
                      if (iVar35 < (int)uVar9) {
                        iVar28 = uVar26 + 6;
                        pfVar19[iVar35] = (float)puVar29[iVar35] - *pfVar22;
                        if (iVar28 < (int)uVar9) {
                          pfVar19[iVar28] = (float)puVar29[iVar28] - *pfVar22;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else if (0 < (int)uVar9) {
          if ((pfVar19 < pfVar22 + 8 && pfVar22 < pfVar19 + 8) || (uVar9 < 0xb)) {
            lVar27 = 0;
            do {
              pfVar19[lVar27] = (float)puVar29[lVar27] - pfVar22[lVar27];
              lVar27 = lVar27 + 1;
            } while ((int)lVar27 < (int)uVar9);
          }
          else {
            uVar26 = uVar7;
            if ((uVar7 != 0) && (*pfVar19 = (float)*puVar29 - *pfVar22, uVar7 != 1)) {
              pfVar19[1] = (float)puVar29[1] - pfVar22[1];
              if (uVar7 == 3) {
                pfVar19[2] = (float)puVar29[2] - pfVar22[2];
              }
              else {
                uVar26 = 2;
              }
            }
            if (6 < uVar13) {
              uVar31 = 0;
              puVar24 = (undefined8 *)((long)pfVar22 + lVar57);
              puVar30 = (ushort *)((long)puVar29 + lVar55);
              puVar33 = (undefined8 *)((long)pfVar19 + lVar57);
              do {
                puVar5 = puVar24 + 2;
                puVar15 = puVar24 + 1;
                uVar52 = *puVar24;
                puVar14 = puVar24 + 3;
                uVar31 = uVar31 + 1;
                puVar24 = puVar24 + 4;
                auVar46._2_2_ = 0;
                auVar46._0_2_ = *puVar30;
                auVar46._4_2_ = puVar30[1];
                auVar46._6_2_ = 0;
                auVar46._8_2_ = puVar30[2];
                auVar46._10_2_ = 0;
                auVar46._12_2_ = puVar30[3];
                auVar46._14_2_ = 0;
                auVar43._2_2_ = 0;
                auVar43._0_2_ = puVar30[4];
                auVar43._4_2_ = puVar30[5];
                auVar43._6_2_ = 0;
                auVar43._8_2_ = puVar30[6];
                auVar43._10_2_ = 0;
                auVar43._12_2_ = puVar30[7];
                auVar43._14_2_ = 0;
                auVar47 = NEON_scvtf(auVar46,4);
                auVar44 = NEON_scvtf(auVar43,4);
                auVar48._0_8_ =
                     CONCAT44(auVar47._4_4_ - (float)((ulong)uVar52 >> 0x20),
                              auVar47._0_4_ - (float)uVar52);
                auVar48._8_4_ = auVar47._8_4_ - (float)*puVar15;
                auVar48._12_4_ = auVar47._12_4_ - (float)((ulong)*puVar15 >> 0x20);
                auVar45._0_8_ =
                     CONCAT44(auVar44._4_4_ - (float)((ulong)*puVar5 >> 0x20),
                              auVar44._0_4_ - (float)*puVar5);
                auVar45._8_4_ = auVar44._8_4_ - (float)*puVar14;
                auVar45._12_4_ = auVar44._12_4_ - (float)((ulong)*puVar14 >> 0x20);
                puVar33[1] = auVar48._8_8_;
                *puVar33 = auVar48._0_8_;
                puVar33[3] = auVar45._8_8_;
                puVar33[2] = auVar45._0_8_;
                puVar30 = puVar30 + 8;
                puVar33 = puVar33 + 4;
              } while (uVar31 < uVar4);
              uVar26 = uVar26 + iVar56;
              if (iVar56 == iVar12) goto LAB_002d5280;
            }
            iVar35 = uVar26 + 1;
            pfVar19[(int)uVar26] = (float)puVar29[(int)uVar26] - pfVar22[(int)uVar26];
            if (iVar35 < (int)uVar9) {
              iVar28 = uVar26 + 2;
              pfVar19[iVar35] = (float)puVar29[iVar35] - pfVar22[iVar35];
              if (iVar28 < (int)uVar9) {
                iVar35 = uVar26 + 3;
                pfVar19[iVar28] = (float)puVar29[iVar28] - pfVar22[iVar28];
                if (iVar35 < (int)uVar9) {
                  iVar28 = uVar26 + 4;
                  pfVar19[iVar35] = (float)puVar29[iVar35] - pfVar22[iVar35];
                  if (iVar28 < (int)uVar9) {
                    iVar35 = uVar26 + 5;
                    pfVar19[iVar28] = (float)puVar29[iVar28] - pfVar22[iVar28];
                    if (iVar35 < (int)uVar9) {
                      iVar28 = uVar26 + 6;
                      pfVar19[iVar35] = (float)puVar29[iVar35] - pfVar22[iVar35];
                      if (iVar28 < (int)uVar9) {
                        pfVar19[iVar28] = (float)puVar29[iVar28] - pfVar22[iVar28];
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_002d5280:
        puVar30 = puVar29 + 1;
        pfVar34 = pfVar22;
        pfVar42 = pfVar39;
        iVar35 = iVar38;
        do {
          pfVar32 = pfVar34;
          if ((int)uVar8 < (int)uVar9) {
            local_41c = *pfVar34;
            local_420 = local_41c;
            local_424 = local_41c;
            local_428 = local_41c;
            pfVar32 = &local_428;
          }
          dVar53 = 0.0;
          if ((int)uVar9 < 4) {
            iVar28 = 0;
          }
          else {
            puVar20 = puVar30;
            pfVar36 = pfVar32;
            pfVar37 = pfVar19;
            do {
              puVar25 = puVar20 + 4;
              pfVar1 = pfVar36 + 1;
              fVar51 = *pfVar36;
              pfVar2 = pfVar36 + 2;
              pfVar3 = pfVar36 + 3;
              pfVar36 = (float *)((long)pfVar36 + lVar21);
              dVar53 = dVar53 + (double)pfVar37[1] * (double)((float)*puVar20 - *pfVar1) +
                                (double)((float)puVar20[-1] - fVar51) * (double)*pfVar37 +
                                (double)((float)puVar20[1] - *pfVar2) * (double)pfVar37[2] +
                                (double)((float)puVar20[2] - *pfVar3) * (double)pfVar37[3];
              puVar20 = puVar25;
              pfVar37 = pfVar37 + 4;
            } while (puVar25 != puVar30 + (ulong)uVar11 * 4 + 4);
            pfVar32 = (float *)((long)pfVar32 + lVar21 + (ulong)uVar11 * lVar21);
            iVar28 = (uVar11 + 1) * 4;
          }
          if (iVar28 < (int)uVar9) {
            lVar27 = 0;
            do {
              lVar16 = lVar27 + -1;
              pfVar36 = pfVar32 + lVar27;
              lVar17 = iVar28 + lVar27;
              lVar27 = lVar27 + 1;
              dVar53 = dVar53 + (double)((float)puVar30[iVar28 + lVar16] - *pfVar36) *
                                (double)pfVar19[lVar17];
            } while (lVar27 != (ulong)((uVar9 - 1) - iVar28) + 1);
          }
          iVar35 = iVar35 + 1;
          pfVar34 = pfVar34 + uVar41;
          puVar30 = puVar30 + uVar54;
          *pfVar42 = (float)(dVar53 * param_1);
          pfVar42 = pfVar42 + 1;
        } while (iVar35 < iVar10);
        iVar38 = iVar38 + 1;
        pfVar22 = pfVar22 + uVar41;
        puVar29 = puVar29 + uVar54;
        pfVar39 = pfVar39 + uVar40 + 1;
      } while (iVar38 != iVar10);
    }
    if (bVar18) {
      local_418 = pfVar19;
      local_410 = uVar23;
      operator_delete__(pfVar19);
    }
  }
  return;
}


==================================================================

### FUNC 002d581c (1160 bytes) name=FUN_002d581c

void FUN_002d581c(undefined8 *param_1,ulong param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,int *param_8,uint param_9)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  undefined8 *puVar9;
  long lVar10;
  double *pdVar11;
  double *pdVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  ulong uVar15;
  ulong uVar16;
  undefined8 uVar17;
  double *pdVar18;
  double *pdVar19;
  double *pdVar20;
  double *pdVar21;
  undefined8 *puVar22;
  ulong uVar23;
  int iVar24;
  uint uVar25;
  int iVar26;
  long lVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  uint uVar34;
  long lVar35;
  long lVar36;
  undefined8 auStack_440 [136];
  
  param_4 = param_4 >> 3;
  puVar9 = auStack_440;
  iVar26 = *param_7;
  iVar5 = *param_8;
  uVar4 = param_9 & 0x10;
  param_2 = param_2 >> 3;
  uVar34 = param_9 & 1;
  if ((param_9 & 1) == 0) {
    puVar22 = (undefined8 *)0x0;
    uVar23 = 1;
  }
  else {
    iVar26 = param_7[1];
    uVar15 = (ulong)iVar26;
                    /* try { // try from 002d5c44 to 003d5c47 has its CatchHandler @ 002d5aa4 */
    uVar23 = param_2;
    if (uVar15 < 0x89) {
      uVar34 = 0;
      param_2 = 1;
      puVar22 = puVar9;
    }
    else {
                    /* catch() { ... } // from try @ 002d5cb0 with catch @ 002d5c50
                       catch() { ... } // from try @ 002d61b4 with catch @ 002d5c50
                       catch() { ... } // from try @ 002d63e4 with catch @ 002d5c50
                       catch() { ... } // from try @ 002d6520 with catch @ 002d5c50 */
      uVar16 = uVar15 << 3;
      if (0xfe0000000000000 < uVar15) {
        uVar16 = 0xffffffffffffffff;
      }
      puVar9 = operator_new__(uVar16);
      param_2 = 1;
      uVar34 = (uint)(puVar9 != auStack_440);
      puVar22 = puVar9;
    }
  }
  uVar25 = param_9 & 2;
  if ((param_9 >> 1 & 1) == 0) {
    uVar6 = param_8[1];
    if (0 < (int)uVar6) {
      uVar8 = iVar5 - 4U >> 2;
      iVar24 = (uVar8 + 1) * 4;
      if (iVar5 + -3 < 1) {
        iVar24 = 0;
      }
      lVar27 = (long)iVar24;
      lVar35 = NEON_shl(param_2,3);
      lVar36 = NEON_shl(param_6 >> 3,3);
      do {
        puVar14 = param_1;
        if ((puVar22 != (undefined8 *)0x0) && (puVar14 = puVar22, 0 < iVar26)) {
          lVar10 = 0;
          puVar13 = param_1;
          do {
            uVar17 = *puVar13;
            puVar13 = puVar13 + uVar23;
            puVar22[lVar10] = uVar17;
            lVar10 = lVar10 + 1;
          } while ((int)lVar10 < iVar26);
        }
        if (0 < iVar5 + -3) {
          pdVar19 = param_5 + 2;
                    /* try { // try from 002d5974 to 003d5977 has its CatchHandler @ 002d5a90 */
          pdVar20 = param_5 + 1;
          pdVar12 = param_5 + 3;
                    /* try { // try from 002d597c to 003d59fb has its CatchHandler @ 002d554c */
          pdVar21 = param_5;
          pdVar18 = param_3;
          do {
            if (uVar4 == 0) {
              dVar29 = 0.0;
              dVar30 = 0.0;
              dVar31 = dVar30;
              dVar32 = dVar30;
            }
            else {
              dVar30 = *pdVar19;
              dVar29 = *pdVar12;
              dVar31 = *pdVar20;
              dVar32 = *pdVar21;
            }
            if (0 < iVar26) {
              lVar10 = 0;
              pdVar11 = pdVar18;
              do {
                dVar28 = (double)puVar14[lVar10];
                lVar10 = lVar10 + 1;
                dVar33 = *pdVar11;
                pdVar1 = pdVar11 + 1;
                pdVar2 = pdVar11 + 2;
                pdVar3 = pdVar11 + 3;
                pdVar11 = pdVar11 + param_4;
                dVar32 = dVar32 + dVar28 * dVar33;
                dVar31 = dVar31 + dVar28 * *pdVar1;
                dVar30 = dVar30 + dVar28 * *pdVar2;
                dVar29 = dVar29 + dVar28 * *pdVar3;
              } while ((int)lVar10 < iVar26);
            }
            pdVar20 = pdVar20 + 4;
            pdVar12 = pdVar12 + 4;
            pdVar18 = pdVar18 + 4;
            pdVar21[1] = dVar31;
            *pdVar21 = dVar32;
            pdVar21 = pdVar21 + 4;
            pdVar19[1] = dVar29;
            *pdVar19 = dVar30;
            pdVar19 = pdVar19 + 4;
          } while (pdVar19 != param_5 + (ulong)uVar8 * 4 + 6);
        }
        if (iVar24 < iVar5) {
          pdVar20 = param_5 + lVar27;
          pdVar19 = param_3 + lVar27;
          do {
            dVar29 = 0.0;
            if (uVar4 != 0) {
              dVar29 = *pdVar20;
            }
                    /* try { // try from 002d5a3c to 003d5a3f has its CatchHandler @ 002d5a68 */
            if (0 < iVar26) {
                    /* try { // try from 002d5a44 to 003d5a47 has its CatchHandler @ 002d554c */
              lVar10 = 0;
              pdVar12 = pdVar19;
              do {
                pdVar18 = (double *)(puVar14 + lVar10);
                lVar10 = lVar10 + 1;
                dVar31 = *pdVar12;
                    /* catch() { ... } // from try @ 002d5780 with catch @ 002d5a54 */
                pdVar12 = pdVar12 + param_4;
                dVar29 = dVar29 + dVar31 * *pdVar18;
              } while ((int)lVar10 < iVar26);
            }
            pdVar12 = pdVar20 + 1;
                    /* try { // try from 002d5a64 to 003d5a67 has its CatchHandler @ 002d554c */
            *pdVar20 = dVar29;
                    /* catch() { ... } // from try @ 002d5a3c with catch @ 002d5a68 */
            pdVar19 = pdVar19 + 1;
            pdVar20 = pdVar12;
          } while (pdVar12 != param_5 + lVar27 + 1 + (ulong)(uint)((iVar5 + -1) - iVar24));
        }
                    /* try { // try from 002d5a78 to 003d5a7b has its CatchHandler @ 002d554c */
        uVar25 = uVar25 + 1;
                    /* catch() { ... } // from try @ 002d5700 with catch @ 002d5a7c */
        param_1 = (undefined8 *)((long)param_1 + lVar35);
        param_5 = (double *)((long)param_5 + lVar36);
                    /* try { // try from 002d5a8c to 003d5a8f has its CatchHandler @ 002d554c */
      } while (uVar25 != uVar6);
    }
  }
  else {
    iVar5 = param_8[1];
    if (0 < iVar5) {
      iVar7 = *param_8;
      uVar25 = iVar26 - 2U >> 1;
      iVar24 = 0;
      do {
        puVar14 = param_1;
        if ((puVar22 != (undefined8 *)0x0) && (puVar14 = puVar22, 0 < iVar26)) {
          lVar27 = 0;
          puVar13 = param_1;
          do {
            uVar17 = *puVar13;
            puVar13 = puVar13 + uVar23;
            puVar22[lVar27] = uVar17;
            lVar27 = lVar27 + 1;
          } while ((int)lVar27 < iVar26);
        }
        if (0 < iVar7) {
                    /* try { // try from 002d5b5c to 003d5b5f has its CatchHandler @ 002d5b70 */
          pdVar19 = param_3;
          pdVar20 = param_5;
          do {
            dVar29 = 0.0;
            if (uVar4 != 0) {
              dVar29 = *pdVar20;
            }
                    /* catch() { ... } // from try @ 002d5b5c with catch @ 002d5b70 */
            dVar31 = 0.0;
            if (iVar26 + -1 < 1) {
              uVar15 = 0;
            }
            else {
              pdVar12 = (double *)(puVar14 + 1);
              pdVar18 = pdVar19 + 1;
              do {
                pdVar21 = pdVar12 + 2;
                dVar29 = dVar29 + pdVar18[-1] * pdVar12[-1];
                dVar31 = dVar31 + *pdVar18 * *pdVar12;
                pdVar12 = pdVar21;
                pdVar18 = pdVar18 + 2;
              } while (pdVar21 != (double *)(puVar14 + (ulong)uVar25 * 2 + 3));
              uVar15 = (ulong)((uVar25 + 1) * 2);
            }
            if ((int)uVar15 < iVar26) {
              uVar16 = -(uVar15 >> 0x1f) & 0xfffffff800000000 | uVar15 << 3;
              lVar27 = 0;
              do {
                lVar35 = lVar27 + uVar16;
                lVar36 = lVar27 + uVar16;
                lVar27 = lVar27 + 8;
                dVar29 = dVar29 + *(double *)((long)pdVar19 + lVar36) *
                                  *(double *)((long)puVar14 + lVar35);
              } while (lVar27 != ((ulong)(uint)((iVar26 + -1) - (int)uVar15) + 1) * 8);
            }
            pdVar19 = pdVar19 + param_4;
            pdVar12 = pdVar20 + 1;
            *pdVar20 = dVar29 + dVar31;
            pdVar20 = pdVar12;
          } while (param_5 + (ulong)(iVar7 - 1) + 1 != pdVar12);
        }
        iVar24 = iVar24 + 1;
        param_1 = param_1 + param_2;
        param_5 = param_5 + (param_6 >> 3);
      } while (iVar24 != iVar5);
    }
  }
                    /* catch() { ... } // from try @ 002d5974 with catch @ 002d5a90 */
  if (uVar34 != 0) {
    operator_delete__(puVar9);
  }
                    /* try { // try from 002d5aa0 to 003d5aa3 has its CatchHandler @ 002d554c */
                    /* catch() { ... } // from try @ 002d5c44 with catch @ 002d5aa4 */
  return;
}


==================================================================

### FUNC 002d5cc8 (64 bytes) name=FUN_002d5cc8

void FUN_002d5cc8(void)

{
                    /* try { // try from 002d5cd8 to 003d5cf7 has its CatchHandler @ 002d6558 */
  FUN_002d581c();
  return;
}


==================================================================

### FUNC 002d5d08 (1556 bytes) name=FUN_002d5d08

void FUN_002d5d08(double *param_1,ulong param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,int *param_7,int *param_8,uint param_9)

{
  double *pdVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  double *pdVar7;
  ulong uVar8;
  double *pdVar9;
  double *pdVar10;
  double *pdVar11;
  double *pdVar12;
  double *pdVar13;
  long lVar14;
  double *pdVar15;
  double *pdVar16;
  int iVar17;
  uint uVar18;
  double *pdVar19;
  long lVar20;
  int iVar21;
  int iVar22;
  ulong uVar23;
  double *pdVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  uint uVar35;
  long lVar36;
  long lVar37;
  double adStack_480 [144];
  
  uVar4 = param_9;
                    /* try { // try from 002d5d3c to 003d5d3f has its CatchHandler @ 002d6534 */
  iVar21 = *param_7;
  iVar3 = *param_8;
  pdVar9 = adStack_480;
  do {
    pdVar15 = pdVar9 + 2;
    pdVar9[1] = 0.0;
    *pdVar9 = 0.0;
    pdVar9 = pdVar15;
  } while (pdVar15 != (double *)&param_9);
  pdVar9 = adStack_480;
                    /* try { // try from 002d5d80 to 003d5d83 has its CatchHandler @ 002d6560 */
                    /* try { // try from 002d5d88 to 003d5e27 has its CatchHandler @ 002d6534 */
  param_4 = param_4 >> 4;
  uVar2 = param_9 & 0x10;
  uVar35 = param_9 & 1;
  if ((param_9 & 1) == 0) {
    pdVar15 = (double *)0x0;
    uVar23 = 1;
    uVar8 = param_2 >> 4;
  }
  else {
    iVar21 = param_7[1];
    uVar23 = (ulong)iVar21;
    if (uVar23 < 0x49) {
      uVar35 = 0;
    }
    else {
      uVar8 = uVar23 << 4;
      if (0x7f0000000000000 < uVar23) {
        uVar8 = 0xffffffffffffffff;
      }
      pdVar9 = operator_new__(uVar8);
      uVar8 = 0;
      pdVar15 = pdVar9;
      do {
        pdVar15[1] = 0.0;
        *pdVar15 = 0.0;
        uVar8 = uVar8 + 1;
        pdVar15 = pdVar15 + 2;
      } while (uVar23 != uVar8);
      uVar35 = (uint)(pdVar9 != adStack_480);
    }
    uVar8 = 1;
    pdVar15 = pdVar9;
    uVar23 = param_2 >> 4;
  }
  uVar18 = uVar4 & 2;
  if ((uVar4 >> 1 & 1) == 0) {
    uVar4 = param_8[1];
    if (0 < (int)uVar4) {
      uVar6 = iVar3 - 4U >> 2;
      iVar22 = (uVar6 + 1) * 4;
      if (iVar3 + -3 < 1) {
        iVar22 = 0;
      }
      lVar14 = (ulong)(iVar21 - 1) + 1;
      lVar20 = (long)iVar22;
      lVar37 = NEON_shl(uVar8,4);
      lVar36 = NEON_shl(param_6 >> 4,4);
      do {
        pdVar19 = param_1;
        if ((pdVar15 != (double *)0x0) &&
           (pdVar10 = pdVar15, pdVar7 = param_1, pdVar19 = pdVar15, 0 < iVar21)) {
          do {
            dVar27 = pdVar7[1];
            pdVar12 = pdVar10 + 2;
            *pdVar10 = *pdVar7;
            pdVar10[1] = dVar27;
            pdVar10 = pdVar12;
            pdVar7 = pdVar7 + uVar23 * 2;
          } while (pdVar12 != pdVar15 + lVar14 * 2);
        }
        if (0 < iVar3 + -3) {
          pdVar7 = param_3;
          pdVar12 = param_5 + 6;
          pdVar13 = param_5 + 4;
          pdVar10 = param_5;
          pdVar24 = param_5 + 2;
          do {
            if (uVar2 == 0) {
              dVar27 = 0.0;
              dVar28 = 0.0;
              dVar29 = 0.0;
              dVar30 = 0.0;
              dVar31 = 0.0;
              dVar32 = 0.0;
              dVar33 = 0.0;
              dVar34 = 0.0;
            }
            else {
              dVar34 = *pdVar10;
              dVar33 = pdVar10[1];
              dVar32 = *pdVar24;
              dVar31 = pdVar10[3];
              dVar30 = *pdVar13;
              dVar29 = pdVar10[5];
              dVar28 = *pdVar12;
              dVar27 = pdVar10[7];
            }
            pdVar11 = pdVar7;
            pdVar16 = pdVar19;
            if (0 < iVar21) {
              do {
                dVar26 = pdVar16[1];
                pdVar1 = pdVar16 + 2;
                    /* try { // try from 002d5f14 to 003d6043 has its CatchHandler @ 002d6524 */
                dVar25 = *pdVar16;
                dVar34 = dVar34 + (*pdVar11 * dVar25 - dVar26 * pdVar11[1]);
                dVar33 = dVar33 + *pdVar11 * dVar26 + pdVar11[1] * dVar25;
                dVar32 = dVar32 + (dVar25 * pdVar11[2] - dVar26 * pdVar11[3]);
                dVar31 = dVar31 + dVar26 * pdVar11[2] + pdVar11[3] * dVar25;
                dVar30 = dVar30 + (dVar25 * pdVar11[4] - dVar26 * pdVar11[5]);
                dVar29 = dVar29 + dVar26 * pdVar11[4] + pdVar11[5] * dVar25;
                dVar28 = dVar28 + (dVar25 * pdVar11[6] - dVar26 * pdVar11[7]);
                dVar27 = dVar27 + dVar26 * pdVar11[6] + pdVar11[7] * dVar25;
                pdVar11 = pdVar11 + param_4 * 2;
                pdVar16 = pdVar1;
              } while (pdVar1 != pdVar19 + lVar14 * 2);
            }
            pdVar11 = pdVar24 + 8;
            *pdVar10 = dVar34;
            pdVar10[1] = dVar33;
            *pdVar24 = dVar32;
            pdVar10 = pdVar10 + 8;
            pdVar24[1] = dVar31;
            pdVar7 = pdVar7 + 8;
            *pdVar13 = dVar30;
            pdVar13[1] = dVar29;
            *pdVar12 = dVar28;
            pdVar12[1] = dVar27;
            pdVar12 = pdVar12 + 8;
            pdVar13 = pdVar13 + 8;
            pdVar24 = pdVar11;
          } while (pdVar11 != param_5 + (ulong)uVar6 * 8 + 10);
        }
        if (iVar22 < iVar3) {
          pdVar7 = param_5 + lVar20 * 2;
          pdVar10 = param_3 + lVar20 * 2;
          do {
            if (uVar2 == 0) {
              dVar27 = 0.0;
              dVar28 = 0.0;
            }
            else {
              dVar28 = *pdVar7;
              dVar27 = pdVar7[1];
            }
            pdVar12 = pdVar19;
            pdVar13 = pdVar10;
            if (0 < iVar21) {
              do {
                pdVar24 = pdVar12 + 2;
                dVar27 = dVar27 + pdVar12[1] * *pdVar13 + pdVar13[1] * *pdVar12;
                dVar28 = dVar28 + (*pdVar12 * *pdVar13 - pdVar12[1] * pdVar13[1]);
                pdVar12 = pdVar24;
                pdVar13 = pdVar13 + param_4 * 2;
              } while (pdVar24 != pdVar19 + lVar14 * 2);
            }
            *pdVar7 = dVar28;
            pdVar12 = pdVar7 + 2;
            pdVar10 = pdVar10 + 2;
            pdVar7[1] = dVar27;
            pdVar7 = pdVar12;
          } while (pdVar12 != param_5 + (lVar20 + 1 + (ulong)(uint)((iVar3 + -1) - iVar22)) * 2);
        }
        uVar18 = uVar18 + 1;
        param_1 = (double *)((long)param_1 + lVar37);
        param_5 = (double *)((long)param_5 + lVar36);
      } while (uVar18 != uVar4);
    }
  }
  else {
    iVar3 = param_8[1];
                    /* try { // try from 002d607c to 003d607f has its CatchHandler @ 002d653c */
    if (0 < iVar3) {
      iVar5 = *param_8;
                    /* try { // try from 002d608c to 003d608f has its CatchHandler @ 002d6428 */
      uVar18 = iVar21 - 1;
      uVar4 = iVar21 - 2U >> 1;
                    /* try { // try from 002d60c0 to 003d60c3 has its CatchHandler @ 002d6544 */
      iVar22 = 0;
                    /* try { // try from 002d60c8 to 003d60cb has its CatchHandler @ 002d6428 */
      do {
        pdVar19 = param_1;
        if ((pdVar15 != (double *)0x0) &&
           (pdVar10 = pdVar15, pdVar7 = param_1, pdVar19 = pdVar15, 0 < iVar21)) {
          do {
            dVar27 = pdVar7[1];
            pdVar12 = pdVar10 + 2;
            *pdVar10 = *pdVar7;
            pdVar10[1] = dVar27;
            pdVar10 = pdVar12;
            pdVar7 = pdVar7 + uVar23 * 2;
          } while (pdVar12 != pdVar15 + ((ulong)uVar18 + 1) * 2);
        }
        if (0 < iVar5) {
          pdVar7 = param_5;
          pdVar10 = param_3;
          do {
            if (uVar2 == 0) {
              dVar28 = 0.0;
              dVar27 = 0.0;
              if ((int)uVar18 < 1) goto LAB_002d628c;
LAB_002d6134:
              dVar30 = 0.0;
              pdVar12 = pdVar10 + 1;
              pdVar13 = pdVar19;
              dVar29 = dVar30;
              do {
                pdVar24 = pdVar12 + 4;
                    /* try { // try from 002d615c to 003d6173 has its CatchHandler @ 002d652c */
                    /* try { // try from 002d6178 to 003d618f has its CatchHandler @ 002d6534 */
                dVar27 = dVar27 + (pdVar12[-1] * *pdVar13 - *pdVar12 * pdVar13[1]);
                    /* try { // try from 002d6194 to 003d61ab has its CatchHandler @ 002d6558 */
                dVar30 = dVar30 + (pdVar13[2] * pdVar12[1] - pdVar13[3] * pdVar12[2]);
                dVar28 = dVar28 + pdVar12[-1] * pdVar13[1] + *pdVar13 * *pdVar12;
                dVar29 = dVar29 + pdVar13[3] * pdVar12[1] + pdVar12[2] * pdVar13[2];
                pdVar12 = pdVar24;
                pdVar13 = pdVar13 + 4;
                iVar17 = (uVar4 + 1) * 2;
              } while (pdVar24 != pdVar10 + (ulong)uVar4 * 4 + 5);
            }
            else {
              dVar27 = *pdVar7;
              dVar28 = pdVar7[1];
              if (0 < (int)uVar18) goto LAB_002d6134;
LAB_002d628c:
              dVar30 = 0.0;
              dVar29 = dVar30;
              iVar17 = 0;
            }
            if (iVar17 < iVar21) {
              lVar14 = (long)iVar17;
                    /* try { // try from 002d61b4 to 003d61c7 has its CatchHandler @ 002d5c50 */
              pdVar12 = pdVar19 + lVar14 * 2;
              pdVar13 = pdVar10 + lVar14 * 2;
              do {
                pdVar24 = pdVar12 + 2;
                dVar28 = dVar28 + *pdVar13 * pdVar12[1] + pdVar13[1] * *pdVar12;
                dVar27 = dVar27 + (*pdVar12 * *pdVar13 - pdVar13[1] * pdVar12[1]);
                pdVar12 = pdVar24;
                pdVar13 = pdVar13 + 2;
              } while (pdVar24 != pdVar19 + (lVar14 + 1 + (ulong)(uVar18 - iVar17)) * 2);
            }
            pdVar12 = pdVar7 + 2;
            pdVar10 = pdVar10 + param_4 * 2;
            *pdVar7 = dVar27 + dVar30;
            pdVar7[1] = dVar29 + dVar28;
            pdVar7 = pdVar12;
          } while (param_5 + ((ulong)(iVar5 - 1) + 1) * 2 != pdVar12);
        }
        iVar22 = iVar22 + 1;
        param_1 = param_1 + uVar8 * 2;
        param_5 = param_5 + (param_6 >> 4) * 2;
      } while (iVar22 != iVar3);
    }
  }
  if (uVar35 != 0) {
    operator_delete__(pdVar9);
  }
  return;
}


==================================================================

### FUNC 002d6340 (64 bytes) name=FUN_002d6340

void FUN_002d6340(void)

{
  FUN_002d5d08();
  return;
}


==================================================================

### FUNC 002d6380 (4204 bytes) name=FUN_002d6380

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_002d6380(double param_1,double param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,float *param_7,ulong param_8,float *param_9,ulong param_10,
                 int *param_11,uint *param_12,uint param_13)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined4 uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  float *pfVar11;
  long lVar12;
  undefined8 uVar13;
  int iVar14;
  uint uVar15;
  ulong uVar16;
  double *pdVar17;
  ulong uVar18;
  double *pdVar19;
  long lVar20;
  double *pdVar21;
  undefined8 *puVar22;
  long lVar23;
  int iVar24;
  uint uVar25;
  long lVar26;
  float *pfVar27;
  float *pfVar28;
  float *pfVar29;
  size_t __n;
  float *pfVar30;
  double *pdVar31;
  float *pfVar32;
  long lVar33;
  float *pfVar34;
  double *pdVar35;
  long lVar36;
  uint uVar37;
  double *pdVar38;
  uint uVar39;
  int iVar40;
  ulong uVar41;
  uint uVar42;
  int iVar43;
  undefined8 uVar44;
  float fVar45;
  double dVar46;
  double dVar47;
  double dVar48;
  double dVar49;
  ulong uVar50;
  ulong uVar51;
  double dVar52;
  uint local_954;
  float *local_880;
  float local_870 [264];
  double *local_450;
  ulong local_448;
  double local_440 [136];
  
                    /* try { // try from 002d63b8 to 003d63d7 has its CatchHandler @ 002d6524 */
  local_880 = local_870;
  uVar6 = param_12[1];
  param_6 = param_6 >> 2;
                    /* try { // try from 002d63e4 to 003d63e7 has its CatchHandler @ 002d5c50 */
  param_4 = param_4 >> 2;
                    /* try { // try from 002d63f4 to 003d63f7 has its CatchHandler @ 002d6558 */
                    /* try { // try from 002d63fc to 003d63ff has its CatchHandler @ 002d6524 */
  param_10 = param_10 >> 2;
                    /* try { // try from 002d6404 to 003d6407 has its CatchHandler @ 002d653c */
  iVar40 = *param_11;
                    /* try { // try from 002d6410 to 003d6413 has its CatchHandler @ 002d6574 */
  uVar42 = *param_12;
  if (param_7 == (float *)0x0) {
    uVar41 = 0;
    uVar50 = 0;
  }
  else {
    uVar41 = param_8 >> 2;
    uVar50 = 1;
    if ((param_13 >> 2 & 1) == 0) {
      uVar41 = 1;
      uVar50 = param_8 >> 2;
    }
  }
                    /* catch() { ... } // from try @ 002d608c with catch @ 002d6428
                       catch() { ... } // from try @ 002d60c8 with catch @ 002d6428 */
  if ((param_13 & 1) == 0) {
    uVar51 = param_4;
    uVar16 = 1;
joined_r0x002d66d8:
    if (iVar40 == 1) {
      local_450 = local_440;
      local_448 = 0x108;
      if ((param_4 < 2) || (param_11[1] < 2)) {
        if (1 < param_6) {
          uVar51 = (ulong)(int)uVar42;
          if (0x108 < uVar51) {
LAB_002d6bd8:
            uVar16 = uVar51 << 2;
            if (0x1fc0000000000000 < uVar51) {
              uVar16 = 0xffffffffffffffff;
            }
            local_450 = operator_new__(uVar16);
            uVar42 = *param_12;
          }
LAB_002d6bf8:
          local_448 = uVar51;
          pdVar19 = local_450;
          goto LAB_002d6bfc;
        }
                    /* try { // try from 002d6cac to 003d6caf has its CatchHandler @ 002d6c20 */
        if ((int)uVar6 < 1) goto LAB_002d6680;
LAB_002d6500:
        lVar26 = 0;
                    /* try { // try from 002d6520 to 003d6523 has its CatchHandler @ 002d5c50 */
                    /* catch() { ... } // from try @ 002d5f14 with catch @ 002d6524
                       catch() { ... } // from try @ 002d63b8 with catch @ 002d6524
                       catch() { ... } // from try @ 002d63fc with catch @ 002d6524 */
        do {
                    /* catch() { ... } // from try @ 002d615c with catch @ 002d652c */
                    /* catch() { ... } // from try @ 002d5d3c with catch @ 002d6534
                       catch() { ... } // from try @ 002d5d88 with catch @ 002d6534
                       catch() { ... } // from try @ 002d6178 with catch @ 002d6534 */
          dVar48 = (double)param_3[lVar26] * param_1;
          pfVar27 = param_7;
          if ((int)uVar42 < 2) {
            uVar51 = 0;
          }
          else {
                    /* catch() { ... } // from try @ 002d607c with catch @ 002d653c
                       catch() { ... } // from try @ 002d6404 with catch @ 002d653c */
                    /* catch() { ... } // from try @ 002d60c0 with catch @ 002d6544 */
            uVar51 = 0;
            pdVar19 = param_5;
            pfVar32 = param_9;
            do {
              while( true ) {
                fVar45 = *(float *)pdVar19;
                    /* catch() { ... } // from try @ 002d65e0 with catch @ 002d65a0
                       catch() { ... } // from try @ 002d67fc with catch @ 002d65a0
                       catch() { ... } // from try @ 002d6bb0 with catch @ 002d65a0 */
                dVar47 = (double)*(float *)((long)pdVar19 + 4) * dVar48;
                if (pfVar27 != (float *)0x0) break;
                uVar37 = (int)uVar51 + 2;
                uVar51 = (ulong)uVar37;
                pdVar19 = pdVar19 + 1;
                *pfVar32 = (float)((double)fVar45 * dVar48);
                pfVar32[1] = (float)dVar47;
                pfVar27 = (float *)(uVar41 * 8);
                pfVar32 = pfVar32 + 2;
                if ((int)(uVar42 - 1) <= (int)uVar37) goto LAB_002d65d4;
              }
              uVar37 = (int)uVar51 + 2;
              uVar51 = (ulong)uVar37;
                    /* catch() { ... } // from try @ 002d5cd8 with catch @ 002d6558
                       catch() { ... } // from try @ 002d6194 with catch @ 002d6558
                       catch() { ... } // from try @ 002d63f4 with catch @ 002d6558 */
              pdVar19 = pdVar19 + 1;
                    /* catch() { ... } // from try @ 002d5d80 with catch @ 002d6560 */
              *pfVar32 = (float)((double)fVar45 * dVar48 + param_2 * (double)*pfVar27);
              pfVar30 = pfVar27 + uVar41;
                    /* catch() { ... } // from try @ 002d6410 with catch @ 002d6574 */
              pfVar27 = pfVar27 + uVar41 * 2;
              pfVar32[1] = (float)(dVar47 + param_2 * (double)*pfVar30);
              pfVar32 = pfVar32 + 2;
            } while ((int)uVar37 < (int)(uVar42 - 1));
          }
LAB_002d65d4:
          if ((int)uVar51 < (int)uVar42) {
                    /* try { // try from 002d65e0 to 003d65ff has its CatchHandler @ 002d65a0 */
            uVar16 = -(uVar51 >> 0x1f) & 0xfffffffc00000000 | uVar51 << 2;
            lVar33 = 0;
            lVar36 = ((ulong)((uVar42 - 1) - (int)uVar51) + 1) * 4;
            do {
                    /* try { // try from 002d6628 to 003d6647 has its CatchHandler @ 002d6c0c */
              while (dVar47 = (double)*(float *)((long)param_5 + lVar33 + uVar16) * dVar48,
                    pfVar27 == (float *)0x0) {
                *(float *)((long)param_9 + lVar33 + uVar16) = (float)dVar47;
                lVar33 = lVar33 + 4;
                pfVar27 = (float *)(uVar41 * 4);
                if (lVar33 == lVar36) goto LAB_002d664c;
              }
              fVar45 = *pfVar27;
                    /* try { // try from 002d6604 to 003d6623 has its CatchHandler @ 002d6c14 */
              pfVar27 = pfVar27 + uVar41;
              *(float *)((long)param_9 + lVar33 + uVar16) =
                   (float)(dVar47 + param_2 * (double)fVar45);
              lVar33 = lVar33 + 4;
            } while (lVar33 != lVar36);
          }
LAB_002d664c:
          lVar26 = lVar26 + 1;
          param_7 = param_7 + uVar50;
          param_9 = param_9 + param_10;
          pdVar19 = local_450;
        } while ((int)lVar26 < (int)uVar6);
      }
      else {
        uVar51 = (ulong)(int)uVar6;
        if (0x108 < uVar51) {
          uVar16 = uVar51 << 2;
          if (0x1fc0000000000000 < uVar51) {
            uVar16 = 0xffffffffffffffff;
          }
          local_880 = operator_new__(uVar16);
        }
        if ((int)uVar6 < 1) {
          pdVar19 = local_450;
          if (1 < param_6) goto LAB_002d7398;
        }
        else {
          lVar26 = 0;
          do {
            fVar45 = *param_3;
            param_3 = param_3 + param_4;
            local_880[lVar26] = fVar45;
            lVar26 = lVar26 + 1;
          } while ((int)lVar26 < (int)uVar6);
          if (param_6 < 2) {
            uVar42 = *param_12;
            param_3 = local_880;
            goto LAB_002d6500;
          }
LAB_002d7398:
          uVar42 = *param_12;
          uVar51 = (ulong)(int)uVar42;
          param_3 = local_880;
          if (uVar51 <= local_448) goto LAB_002d6bf8;
          if (local_450 != local_440) {
            if (local_450 != (double *)0x0) {
              operator_delete__(local_450);
            }
            local_450 = local_440;
            local_448 = 0x108;
          }
          if (0x108 < uVar51) goto LAB_002d6bd8;
          uVar42 = *param_12;
          pdVar19 = local_440;
LAB_002d6bfc:
          if (0 < (int)uVar42) {
                    /* catch() { ... } // from try @ 002d6734 with catch @ 002d6c04
                       catch() { ... } // from try @ 002d6b48 with catch @ 002d6c04 */
                    /* catch() { ... } // from try @ 002d6628 with catch @ 002d6c0c
                       catch() { ... } // from try @ 002d67c0 with catch @ 002d6c0c
                       catch() { ... } // from try @ 002d6b30 with catch @ 002d6c0c */
            lVar26 = 0;
            do {
              uVar7 = *(undefined4 *)param_5;
                    /* catch() { ... } // from try @ 002d6604 with catch @ 002d6c14
                       catch() { ... } // from try @ 002d67dc with catch @ 002d6c14
                       catch() { ... } // from try @ 002d6b1c with catch @ 002d6c14 */
              param_5 = (double *)((long)param_5 + param_6 * 4);
              *(undefined4 *)((long)pdVar19 + lVar26 * 4) = uVar7;
              lVar26 = lVar26 + 1;
                    /* catch() { ... } // from try @ 002d6cac with catch @ 002d6c20
                       catch() { ... } // from try @ 002d6ce4 with catch @ 002d6c20
                       catch() { ... } // from try @ 002d772c with catch @ 002d6c20 */
            } while ((int)lVar26 < (int)uVar42);
          }
          param_5 = pdVar19;
          if (0 < (int)uVar6) goto LAB_002d6500;
        }
      }
      if ((pdVar19 != local_440) && (pdVar19 != (double *)0x0)) {
        operator_delete__(pdVar19);
      }
      goto LAB_002d6680;
    }
    pfVar27 = (float *)0x0;
    param_4 = uVar16;
  }
  else {
    iVar40 = param_11[1];
    if ((param_4 < 2) || (iVar40 < 2)) {
      uVar51 = 1;
      uVar16 = param_4;
      goto joined_r0x002d66d8;
    }
    if (0x108 < iVar40) {
      local_880 = operator_new__((long)iVar40 << 2);
    }
    uVar51 = 1;
    pfVar27 = local_880;
  }
  uVar37 = param_13 & 2;
  if ((param_13 >> 1 & 1) == 0) {
    if ((ulong)((long)(int)*param_12 * 4) < 0x641) {
      if (0 < (int)uVar6) {
        uVar9 = uVar42 - 4 >> 2;
        lVar26 = (ulong)uVar9 + 1;
                    /* try { // try from 002d6734 to 003d6737 has its CatchHandler @ 002d6c04 */
                    /* try { // try from 002d6778 to 003d677b has its CatchHandler @ 002d6bb4 */
        if (pfVar27 == (float *)0x0) goto LAB_002d6978;
LAB_002d6794:
        if (0 < iVar40) {
          lVar33 = 0;
          pfVar32 = param_3;
          do {
                    /* try { // try from 002d67a4 to 003d67bb has its CatchHandler @ 002d6b50 */
            fVar45 = *pfVar32;
            pfVar32 = pfVar32 + param_4;
            pfVar27[lVar33] = fVar45;
            lVar33 = lVar33 + 1;
          } while ((int)lVar33 < iVar40);
        }
                    /* try { // try from 002d67c0 to 003d67d7 has its CatchHandler @ 002d6c0c */
        pfVar30 = pfVar27;
        pfVar32 = param_7;
        if ((int)uVar42 < 4) goto LAB_002d6984;
        do {
          pfVar29 = param_7;
          pdVar19 = param_5;
          pfVar32 = param_9;
          do {
                    /* try { // try from 002d67dc to 003d67f3 has its CatchHandler @ 002d6c14 */
            dVar49 = 0.0;
            dVar48 = dVar49;
            dVar47 = dVar49;
            dVar52 = dVar49;
            if (0 < iVar40) {
              dVar48 = 0.0;
              lVar33 = 0;
              dVar47 = 0.0;
              dVar52 = 0.0;
              pdVar17 = pdVar19;
              do {
                pfVar11 = pfVar30 + lVar33;
                    /* try { // try from 002d67fc to 003d6b0b has its CatchHandler @ 002d65a0 */
                lVar33 = lVar33 + 1;
                fVar45 = *(float *)pdVar17;
                pfVar34 = (float *)((long)pdVar17 + 4);
                pdVar35 = pdVar17 + 1;
                pfVar28 = (float *)((long)pdVar17 + 0xc);
                pdVar17 = (double *)((long)pdVar17 + param_6 * 4);
                dVar46 = (double)*pfVar11;
                dVar52 = dVar52 + dVar46 * (double)fVar45;
                dVar47 = dVar47 + dVar46 * (double)*pfVar34;
                dVar48 = dVar48 + dVar46 * (double)*(float *)pdVar35;
                dVar49 = dVar49 + dVar46 * (double)*pfVar28;
              } while ((int)lVar33 < iVar40);
            }
            if (pfVar29 == (float *)0x0) {
              *(ulong *)(pfVar32 + 2) =
                   CONCAT44((float)(dVar49 * param_1),(float)(dVar48 * param_1));
              *(ulong *)pfVar32 = CONCAT44((float)(dVar47 * param_1),(float)(dVar52 * param_1));
            }
            else {
              *pfVar32 = (float)((double)*pfVar29 * param_2 + param_1 * dVar52);
              pfVar32[1] = (float)((double)pfVar29[uVar41] * param_2 + param_1 * dVar47);
              pfVar32[2] = (float)((double)pfVar29[uVar41 * 2] * param_2 + param_1 * dVar48);
              pfVar32[3] = (float)((double)pfVar29[uVar41 * 3] * param_2 + param_1 * dVar49);
            }
            pfVar32 = pfVar32 + 4;
            pfVar29 = pfVar29 + uVar41 * 4;
            pdVar19 = pdVar19 + 2;
          } while (pfVar32 != param_9 + lVar26 * 4);
          pfVar32 = (float *)((long)param_7 + lVar26 * uVar41 * 0x10);
          iVar14 = (uVar9 + 1) * 4;
          while( true ) {
            if (iVar14 < (int)uVar42) {
              lVar33 = (long)iVar14;
              pfVar29 = (float *)((long)param_5 + lVar33 * 4);
              pfVar34 = param_9 + lVar33;
              do {
                dVar48 = 0.0;
                if (0 < iVar40) {
                  lVar36 = 0;
                  pfVar28 = pfVar29;
                  do {
                    pfVar11 = pfVar30 + lVar36;
                    lVar36 = lVar36 + 1;
                    fVar45 = *pfVar28;
                    pfVar28 = pfVar28 + param_6;
                    dVar48 = dVar48 + (double)fVar45 * (double)*pfVar11;
                  } while ((int)lVar36 < iVar40);
                }
                dVar48 = dVar48 * param_1;
                if (pfVar32 != (float *)0x0) {
                  dVar48 = dVar48 + param_2 * (double)*pfVar32;
                }
                pfVar29 = pfVar29 + 1;
                pfVar32 = pfVar32 + uVar41;
                *pfVar34 = (float)dVar48;
                pfVar34 = pfVar34 + 1;
              } while (pfVar29 !=
                       (float *)((long)param_5 + (lVar33 + 1 + (ulong)((uVar42 - 1) - iVar14)) * 4))
              ;
            }
            uVar37 = uVar37 + 1;
            param_3 = param_3 + uVar51;
            param_7 = param_7 + uVar50;
            param_9 = param_9 + param_10;
            if (uVar37 == uVar6) goto LAB_002d6680;
            if (pfVar27 != (float *)0x0) goto LAB_002d6794;
LAB_002d6978:
            pfVar30 = param_3;
            pfVar32 = param_7;
            if (3 < (int)uVar42) break;
LAB_002d6984:
            iVar14 = 0;
            param_7 = pfVar32;
          }
        } while( true );
      }
    }
    else {
      uVar16 = (ulong)(int)uVar42;
      pdVar19 = local_440;
      local_450 = pdVar19;
      local_448 = 0x88;
      if (uVar16 < 0x89) {
        local_448 = uVar16;
      }
      else {
        uVar18 = uVar16 << 3;
                    /* try { // try from 002d6cdc to 003d6cdf has its CatchHandler @ 002d771c */
        if (0xfe0000000000000 < uVar16) {
          uVar18 = 0xffffffffffffffff;
        }
                    /* try { // try from 002d6ce4 to 003d76fb has its CatchHandler @ 002d6c20 */
        pdVar19 = operator_new__(uVar18);
        local_450 = pdVar19;
        local_448 = uVar16;
      }
      local_450 = pdVar19;
      local_448 = uVar16;
      if (0 < (int)uVar6) {
        __n = ((ulong)(uVar42 - 1) + 1) * 8;
        uVar37 = (uVar42 - 4 >> 2) + 1;
        if ((int)uVar42 < 1) {
          __n = 8;
        }
        iVar14 = uVar37 * 4;
        lVar26 = NEON_shl(uVar51,2);
        if ((int)(uVar42 - 3) < 1) {
          iVar14 = 0;
        }
        lVar36 = (long)iVar14;
        iVar1 = iVar14 + 1;
        iVar2 = iVar14 + 2;
        pdVar17 = pdVar19 + lVar36;
        lVar33 = NEON_shl(uVar50,2);
        iVar3 = iVar14 + 3;
        uVar10 = uVar42 - iVar14;
        uVar9 = (uint)((ulong)pdVar17 >> 3) & 1;
        uVar5 = (uint)((ulong)pdVar19 >> 3) & 1;
        if (uVar10 < uVar9) {
          uVar9 = uVar10;
        }
        lVar12 = NEON_shl(param_10,2);
        if (uVar42 < uVar5) {
          uVar5 = uVar42;
        }
        if (uVar42 < 5) {
          uVar5 = uVar42;
        }
        uVar4 = ((uVar42 - uVar5) - 4 >> 2) + 1;
        iVar43 = uVar4 * 4;
        local_954 = 0;
        do {
          if (pfVar27 == (float *)0x0) {
            pfVar32 = param_3;
            if (0 < (int)uVar42) goto LAB_002d6ec4;
LAB_002d6f0c:
            if (0 < iVar40) {
LAB_002d6f14:
              lVar20 = 0;
              pdVar35 = param_5;
              do {
                dVar48 = (double)pfVar32[lVar20];
                if (0 < (int)(uVar42 - 3)) {
                  pdVar31 = pdVar19 + 2;
                  uVar15 = 0;
                  pdVar21 = pdVar19;
                  pdVar38 = pdVar35;
                  do {
                    dVar52 = pdVar38[1];
                    dVar47 = *pdVar38;
                    uVar15 = uVar15 + 1;
                    dVar46 = pdVar31[1];
                    dVar49 = *pdVar31;
                    pdVar21[1] = pdVar21[1] + (double)(float)((ulong)dVar47 >> 0x20) * dVar48;
                    *pdVar21 = *pdVar21 + (double)SUB84(dVar47,0) * dVar48;
                    pdVar21 = pdVar21 + 4;
                    pdVar31[1] = dVar46 + (double)(float)((ulong)dVar52 >> 0x20) * dVar48;
                    *pdVar31 = dVar49 + (double)SUB84(dVar52,0) * dVar48;
                    pdVar31 = pdVar31 + 4;
                    pdVar38 = pdVar38 + 2;
                  } while (uVar15 < uVar37);
                }
                if (iVar14 < (int)uVar42) {
                  uVar15 = uVar9;
                  if (uVar10 < 5) {
                    uVar15 = uVar10;
                  }
                  iVar24 = iVar14;
                  if (uVar15 != 0) {
                    *pdVar17 = *pdVar17 + dVar48 * (double)*(float *)((long)pdVar35 + lVar36 * 4);
                    iVar24 = iVar1;
                    if (((uVar15 != 1) &&
                        (pdVar19[iVar1] =
                              pdVar19[iVar1] +
                              dVar48 * (double)*(float *)((long)pdVar35 + (long)iVar1 * 4),
                        iVar24 = iVar2, uVar15 != 2)) &&
                       (pdVar19[iVar2] =
                             pdVar19[iVar2] +
                             dVar48 * (double)*(float *)((long)pdVar35 + (long)iVar2 * 4),
                       iVar24 = iVar3, uVar15 == 4)) {
                      pdVar19[iVar3] =
                           pdVar19[iVar3] +
                           dVar48 * (double)*(float *)((long)pdVar35 + (long)iVar3 * 4);
                      iVar24 = iVar14 + 4;
                    }
                    if (uVar15 == uVar10) goto LAB_002d7120;
                  }
                  uVar25 = ((uVar10 - uVar15) - 4 >> 2) + 1;
                  iVar8 = uVar25 * 4;
                  if (2 < (uVar10 - 1) - uVar15) {
                    uVar39 = 0;
                    pdVar31 = pdVar19 + (ulong)uVar15 + lVar36;
                    puVar22 = (undefined8 *)((long)pdVar35 + ((ulong)uVar15 + lVar36) * 4);
                    pdVar21 = pdVar31;
                    do {
                      uVar44 = puVar22[1];
                      uVar13 = *puVar22;
                      pdVar38 = pdVar31 + 1;
                      dVar49 = *pdVar31;
                      dVar52 = pdVar31[3];
                      dVar47 = pdVar31[2];
                      uVar39 = uVar39 + 1;
                      pdVar31 = pdVar31 + 4;
                      pdVar21[1] = *pdVar38 + (double)(float)((ulong)uVar13 >> 0x20) * dVar48;
                      *pdVar21 = dVar49 + (double)(float)uVar13 * dVar48;
                      pdVar21[3] = dVar52 + (double)(float)((ulong)uVar44 >> 0x20) * dVar48;
                      pdVar21[2] = dVar47 + (double)(float)uVar44 * dVar48;
                      puVar22 = puVar22 + 2;
                      pdVar21 = pdVar21 + 4;
                    } while (uVar39 < uVar25);
                    iVar24 = iVar24 + iVar8;
                    if (iVar8 == uVar10 - uVar15) goto LAB_002d7120;
                  }
                  lVar23 = (long)iVar24;
                  pdVar19[lVar23] =
                       pdVar19[lVar23] + dVar48 * (double)*(float *)((long)pdVar35 + lVar23 * 4);
                  if (iVar24 + 1 < (int)uVar42) {
                    lVar23 = (long)(iVar24 + 1);
                    pdVar19[lVar23] =
                         pdVar19[lVar23] + dVar48 * (double)*(float *)((long)pdVar35 + lVar23 * 4);
                    if (iVar24 + 2 < (int)uVar42) {
                      lVar23 = (long)(iVar24 + 2);
                      pdVar19[lVar23] =
                           pdVar19[lVar23] + dVar48 * (double)*(float *)((long)pdVar35 + lVar23 * 4)
                      ;
                    }
                  }
                }
LAB_002d7120:
                lVar20 = lVar20 + 1;
                pdVar35 = (double *)((long)pdVar35 + param_6 * 4);
              } while ((int)lVar20 < iVar40);
            }
            if (param_7 == (float *)0x0) {
              if (0 < (int)uVar42) {
                if (uVar5 == 0) {
                  uVar15 = 0;
                }
                else {
                  *param_9 = (float)(param_1 * *pdVar19);
                  uVar15 = uVar5;
                  if (((uVar5 != 1) && (param_9[1] = (float)(param_1 * pdVar19[1]), uVar5 != 2)) &&
                     (param_9[2] = (float)(param_1 * pdVar19[2]), uVar5 != 3)) {
                    param_9[3] = (float)(param_1 * pdVar19[3]);
                    uVar15 = 4;
                  }
                  if (uVar5 == uVar42) goto LAB_002d718c;
                }
                if (2 < (uVar42 - 1) - uVar5) {
                  uVar25 = 0;
                  pdVar35 = pdVar19 + uVar5;
                  pfVar32 = param_9 + uVar5;
                  do {
                    uVar25 = uVar25 + 1;
                    dVar47 = pdVar35[1];
                    dVar48 = *pdVar35;
                    *(ulong *)(pfVar32 + 2) =
                         CONCAT44((float)(param_1 * pdVar35[3]),(float)(param_1 * pdVar35[2]));
                    *(ulong *)pfVar32 =
                         CONCAT44((float)(param_1 * dVar47),(float)(param_1 * dVar48));
                    pdVar35 = pdVar35 + 4;
                    pfVar32 = pfVar32 + 4;
                  } while (uVar25 < uVar4);
                  uVar15 = uVar15 + iVar43;
                  if (iVar43 == uVar42 - uVar5) goto LAB_002d718c;
                }
                iVar24 = uVar15 + 1;
                param_9[(int)uVar15] = (float)(param_1 * pdVar19[(int)uVar15]);
                if (iVar24 < (int)uVar42) {
                  iVar8 = uVar15 + 2;
                  param_9[iVar24] = (float)(param_1 * pdVar19[iVar24]);
                  if (iVar8 < (int)uVar42) {
                    param_9[iVar8] = (float)(param_1 * pdVar19[iVar8]);
                  }
                }
              }
            }
            else {
              lVar20 = 0;
              pfVar32 = param_7;
              if (0 < (int)uVar42) {
                do {
                  param_9[lVar20] = (float)((double)*pfVar32 * param_2 + param_1 * pdVar19[lVar20]);
                  lVar20 = lVar20 + 1;
                  pfVar32 = pfVar32 + uVar41;
                } while ((int)lVar20 < (int)uVar42);
              }
            }
          }
          else {
            pfVar32 = pfVar27;
            if (0 < iVar40) {
              lVar20 = 0;
              pfVar30 = param_3;
              do {
                fVar45 = *pfVar30;
                pfVar30 = pfVar30 + param_4;
                pfVar27[lVar20] = fVar45;
                lVar20 = lVar20 + 1;
              } while ((int)lVar20 < iVar40);
              if (0 < (int)uVar42) goto LAB_002d6ec4;
              goto LAB_002d6f14;
            }
            if (0 < (int)uVar42) {
LAB_002d6ec4:
              memset(pdVar19,0,__n);
              goto LAB_002d6f0c;
            }
          }
LAB_002d718c:
          local_954 = local_954 + 1;
          param_3 = (float *)((long)param_3 + lVar26);
          param_7 = (float *)((long)param_7 + lVar33);
          param_9 = (float *)((long)param_9 + lVar12);
        } while (local_954 != uVar6);
      }
      if (pdVar19 != local_440) {
        operator_delete__(pdVar19);
      }
    }
  }
  else if (0 < (int)uVar6) {
    uVar9 = iVar40 - 4U >> 2;
    uVar37 = *param_12;
    uVar42 = 0;
    do {
      pfVar32 = param_3;
      if ((pfVar27 != (float *)0x0) && (pfVar32 = pfVar27, 0 < iVar40)) {
        lVar26 = 0;
        pfVar30 = param_3;
        do {
          fVar45 = *pfVar30;
          pfVar30 = pfVar30 + param_4;
          pfVar27[lVar26] = fVar45;
          lVar26 = lVar26 + 1;
        } while ((int)lVar26 < iVar40);
      }
      if (0 < (int)uVar37) {
        lVar26 = 0;
        pdVar19 = param_5;
        pfVar30 = param_7;
        do {
          dVar48 = 0.0;
          dVar47 = dVar48;
          if (iVar40 + -3 < 1) {
            uVar16 = 0;
            dVar52 = 0.0;
            dVar49 = dVar48;
          }
          else {
            dVar49 = 0.0;
            dVar48 = 0.0;
            dVar52 = 0.0;
            pfVar29 = (float *)((long)pdVar19 + 4);
            pfVar34 = pfVar32;
            do {
              pfVar28 = pfVar29 + 4;
              dVar52 = dVar52 + (double)pfVar29[-1] * (double)*pfVar34;
              dVar48 = dVar48 + (double)*pfVar29 * (double)pfVar34[1];
              dVar49 = dVar49 + (double)pfVar29[1] * (double)pfVar34[2];
              dVar47 = dVar47 + (double)pfVar29[2] * (double)pfVar34[3];
              pfVar29 = pfVar28;
              pfVar34 = pfVar34 + 4;
            } while (pfVar28 != (float *)((long)pdVar19 + (ulong)uVar9 * 0x10 + 0x14));
            uVar16 = (ulong)((uVar9 + 1) * 4);
          }
          if ((int)uVar16 < iVar40) {
            uVar18 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
            lVar33 = 0;
            do {
              lVar36 = lVar33 + uVar18;
              lVar12 = lVar33 + uVar18;
              lVar33 = lVar33 + 4;
              dVar52 = dVar52 + (double)*(float *)((long)pdVar19 + lVar12) *
                                (double)*(float *)((long)pfVar32 + lVar36);
            } while (lVar33 != ((ulong)(uint)((iVar40 + -1) - (int)uVar16) + 1) * 4);
          }
          dVar48 = (dVar52 + dVar48 + dVar49 + dVar47) * param_1;
                    /* try { // try from 002d6b1c to 003d6b1f has its CatchHandler @ 002d6c14 */
          if (pfVar30 != (float *)0x0) {
            dVar48 = dVar48 + param_2 * (double)*pfVar30;
          }
                    /* try { // try from 002d6b30 to 003d6b33 has its CatchHandler @ 002d6c0c */
          pdVar19 = (double *)((long)pdVar19 + param_6 * 4);
          pfVar30 = pfVar30 + uVar41;
          param_9[lVar26] = (float)dVar48;
          lVar26 = lVar26 + 1;
                    /* try { // try from 002d6b40 to 003d6b43 has its CatchHandler @ 002d6b50 */
        } while ((int)lVar26 < (int)uVar37);
      }
                    /* try { // try from 002d6b48 to 003d6b4b has its CatchHandler @ 002d6c04 */
      uVar42 = uVar42 + 1;
      param_3 = param_3 + uVar51;
                    /* catch() { ... } // from try @ 002d6688 with catch @ 002d6b50
                       catch() { ... } // from try @ 002d67a4 with catch @ 002d6b50
                       catch() { ... } // from try @ 002d6b40 with catch @ 002d6b50 */
      param_7 = param_7 + uVar50;
      param_9 = param_9 + param_10;
    } while (uVar42 != uVar6);
  }
LAB_002d6680:
                    /* try { // try from 002d6688 to 003d66ab has its CatchHandler @ 002d6b50 */
  if ((local_880 != local_870) && (local_880 != (float *)0x0)) {
    operator_delete__(local_880);
  }
  return;
}


==================================================================

### FUNC 002d742c (72 bytes) name=FUN_002d742c

void FUN_002d742c(void)

{
  FUN_002d6380();
  return;
}


==================================================================

### FUNC 002d7474 (4008 bytes) name=FUN_002d7474

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_002d7474(double param_1,double param_2,double *param_3,ulong param_4,double *param_5,
                 ulong param_6,double *param_7,ulong param_8,double *param_9,ulong param_10,
                 int *param_11,uint *param_12,uint param_13)

{
  double *pdVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  ulong uVar13;
  double *pdVar14;
  ulong uVar15;
  double *pdVar16;
  long lVar17;
  double *pdVar18;
  ulong uVar19;
  long lVar20;
  double *pdVar21;
  uint uVar22;
  long lVar23;
  double *pdVar24;
  double *pdVar25;
  double *pdVar26;
  long lVar27;
  double *pdVar28;
  long lVar29;
  double dVar30;
  size_t __n;
  uint uVar31;
  uint uVar32;
  int iVar33;
  ulong uVar34;
  uint uVar35;
  int iVar36;
  double dVar37;
  double dVar38;
  long lVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  ulong uVar43;
  double *local_9d0;
  uint local_994;
  double *local_8a0;
  double local_890 [136];
  double *local_450;
  ulong local_448;
  double local_440 [136];
  
  local_8a0 = local_890;
  uVar6 = param_12[1];
  param_4 = param_4 >> 3;
  param_6 = param_6 >> 3;
  param_10 = param_10 >> 3;
  iVar33 = *param_11;
  uVar35 = *param_12;
  if (param_7 == (double *)0x0) {
    uVar34 = 0;
    uVar19 = 0;
  }
  else {
    uVar34 = param_8 >> 3;
    uVar19 = 1;
    if ((param_13 >> 2 & 1) == 0) {
      uVar34 = 1;
      uVar19 = param_8 >> 3;
    }
  }
  local_9d0 = param_3;
  if ((param_13 & 1) == 0) {
    uVar43 = param_4;
    uVar13 = 1;
joined_r0x002d777c:
    if (iVar33 == 1) {
      local_450 = local_440;
      local_448 = 0x88;
      if ((param_4 < 2) || (param_11[1] < 2)) {
        if (1 < param_6) {
          uVar43 = (ulong)(int)uVar35;
          if (0x88 < uVar43) {
LAB_002d7c2c:
            uVar13 = uVar43 << 3;
            if (0xfe0000000000000 < uVar43) {
              uVar13 = 0xffffffffffffffff;
            }
            local_450 = operator_new__(uVar13);
            uVar35 = *param_12;
          }
LAB_002d7c48:
          local_448 = uVar43;
          pdVar14 = local_450;
          goto LAB_002d7c4c;
        }
                    /* catch() { ... } // from try @ 002d7d3c with catch @ 002d7cfc
                       catch() { ... } // from try @ 002d7db8 with catch @ 002d7cfc
                       catch() { ... } // from try @ 002d7fb0 with catch @ 002d7cfc */
        if ((int)uVar6 < 1) goto LAB_002d7724;
LAB_002d75f0:
        lVar23 = 0;
        do {
          dVar30 = param_1 * local_9d0[lVar23];
          pdVar14 = param_7;
          if ((int)uVar35 < 2) {
            uVar43 = 0;
          }
          else {
            uVar43 = 0;
            pdVar16 = param_5;
            pdVar28 = param_9;
            do {
              while( true ) {
                dVar40 = *pdVar16;
                dVar37 = pdVar16[1];
                if (pdVar14 != (double *)0x0) break;
                uVar32 = (int)uVar43 + 2;
                uVar43 = (ulong)uVar32;
                pdVar16 = pdVar16 + 2;
                *pdVar28 = dVar30 * dVar40;
                pdVar28[1] = dVar30 * dVar37;
                pdVar14 = (double *)(uVar34 * 0x10);
                pdVar28 = pdVar28 + 2;
                if ((int)(uVar35 - 1) <= (int)uVar32) goto LAB_002d76a0;
              }
              uVar32 = (int)uVar43 + 2;
              uVar43 = (ulong)uVar32;
              pdVar16 = pdVar16 + 2;
              *pdVar28 = dVar30 * dVar40 + param_2 * *pdVar14;
              pdVar26 = pdVar14 + uVar34;
              pdVar14 = pdVar14 + uVar34 * 2;
              pdVar28[1] = dVar30 * dVar37 + param_2 * *pdVar26;
              pdVar28 = pdVar28 + 2;
            } while ((int)uVar32 < (int)(uVar35 - 1));
          }
LAB_002d76a0:
          if ((int)uVar43 < (int)uVar35) {
            uVar13 = -(uVar43 >> 0x1f) & 0xfffffff800000000 | uVar43 << 3;
            lVar27 = 0;
            do {
              dVar37 = dVar30 * *(double *)((long)param_5 + lVar27 + uVar13);
              if (pdVar14 != (double *)0x0) {
                dVar37 = dVar37 + param_2 * *pdVar14;
              }
              *(double *)((long)param_9 + lVar27 + uVar13) = dVar37;
              lVar27 = lVar27 + 8;
              pdVar14 = pdVar14 + uVar34;
            } while (lVar27 != ((ulong)((uVar35 - 1) - (int)uVar43) + 1) * 8);
          }
          lVar23 = lVar23 + 1;
          param_7 = param_7 + uVar19;
          param_9 = param_9 + param_10;
          pdVar14 = local_450;
        } while ((int)lVar23 < (int)uVar6);
      }
      else {
        uVar43 = (ulong)(int)uVar6;
        if (0x88 < uVar43) {
          uVar13 = uVar43 << 3;
          if (0xfe0000000000000 < uVar43) {
            uVar13 = 0xffffffffffffffff;
          }
          local_8a0 = operator_new__(uVar13);
        }
        local_9d0 = local_8a0;
        if ((int)uVar6 < 1) {
          pdVar14 = local_450;
          if (1 < param_6) goto LAB_002d83b8;
        }
        else {
          lVar23 = 0;
          do {
            dVar30 = *param_3;
            param_3 = param_3 + param_4;
            local_8a0[lVar23] = dVar30;
            lVar23 = lVar23 + 1;
          } while ((int)lVar23 < (int)uVar6);
          if (param_6 < 2) {
            uVar35 = *param_12;
            goto LAB_002d75f0;
          }
LAB_002d83b8:
          uVar35 = *param_12;
          uVar43 = (ulong)(int)uVar35;
          if (uVar43 <= local_448) goto LAB_002d7c48;
                    /* try { // try from 002d83d4 to 003d83d7 has its CatchHandler @ 002d858c */
          if (local_450 != local_440) {
                    /* try { // try from 002d83dc to 003d83ef has its CatchHandler @ 002d85cc */
            if (local_450 != (double *)0x0) {
              operator_delete__(local_450);
            }
            local_450 = local_440;
            local_448 = 0x88;
          }
          if (0x88 < uVar43) goto LAB_002d7c2c;
          uVar35 = *param_12;
          pdVar14 = local_440;
LAB_002d7c4c:
          if (0 < (int)uVar35) {
            lVar23 = 0;
            do {
              dVar30 = *param_5;
              param_5 = param_5 + param_6;
              pdVar14[lVar23] = dVar30;
              lVar23 = lVar23 + 1;
            } while ((int)lVar23 < (int)uVar35);
          }
          param_5 = pdVar14;
          if (0 < (int)uVar6) goto LAB_002d75f0;
        }
      }
      if ((pdVar14 != local_440) && (pdVar14 != (double *)0x0)) {
        operator_delete__(pdVar14);
      }
      goto LAB_002d7724;
    }
    pdVar14 = (double *)0x0;
    param_4 = uVar13;
  }
  else {
    iVar33 = param_11[1];
    if ((param_4 < 2) || (iVar33 < 2)) {
      uVar43 = 1;
      uVar13 = param_4;
      goto joined_r0x002d777c;
    }
    if (0x88 < iVar33) {
      local_8a0 = operator_new__((long)iVar33 << 3);
    }
    uVar43 = 1;
    pdVar14 = local_8a0;
  }
  uVar32 = param_13 & 2;
  if ((param_13 >> 1 & 1) == 0) {
    if ((ulong)((long)(int)*param_12 * 8) < 0x641) {
      if (0 < (int)uVar6) {
        uVar8 = uVar35 - 4 >> 2;
        pdVar16 = param_3;
        if (pdVar14 == (double *)0x0) goto LAB_002d79fc;
LAB_002d785c:
        if (0 < iVar33) {
          lVar23 = 0;
          pdVar16 = param_3;
          do {
            dVar30 = *pdVar16;
            pdVar16 = pdVar16 + param_4;
            pdVar14[lVar23] = dVar30;
            lVar23 = lVar23 + 1;
          } while ((int)lVar23 < iVar33);
        }
        pdVar16 = pdVar14;
        pdVar28 = param_7;
        if ((int)uVar35 < 4) goto LAB_002d7a08;
        do {
          pdVar28 = param_9 + 2;
          pdVar26 = param_5;
          pdVar24 = param_7;
          do {
            dVar41 = 0.0;
            dVar30 = dVar41;
            dVar37 = dVar41;
            dVar40 = dVar41;
            if (0 < iVar33) {
              dVar30 = 0.0;
              lVar23 = 0;
              dVar37 = 0.0;
              dVar40 = 0.0;
              pdVar21 = pdVar26;
              do {
                dVar38 = pdVar16[lVar23];
                lVar23 = lVar23 + 1;
                dVar42 = *pdVar21;
                pdVar18 = pdVar21 + 1;
                pdVar25 = pdVar21 + 2;
                pdVar1 = pdVar21 + 3;
                pdVar21 = pdVar21 + param_6;
                dVar40 = dVar40 + dVar38 * dVar42;
                dVar37 = dVar37 + dVar38 * *pdVar18;
                dVar30 = dVar30 + dVar38 * *pdVar25;
                dVar41 = dVar41 + dVar38 * *pdVar1;
              } while ((int)lVar23 < iVar33);
            }
            if (pdVar24 == (double *)0x0) {
              pdVar28[-1] = dVar37 * param_1;
              pdVar28[-2] = dVar40 * param_1;
              pdVar28[1] = dVar41 * param_1;
              *pdVar28 = dVar30 * param_1;
            }
            else {
              pdVar28[-2] = param_2 * *pdVar24 + param_1 * dVar40;
              pdVar28[-1] = param_2 * pdVar24[uVar34] + param_1 * dVar37;
              *pdVar28 = param_2 * pdVar24[uVar34 * 2] + param_1 * dVar30;
              pdVar28[1] = param_2 * pdVar24[uVar34 * 3] + param_1 * dVar41;
            }
            pdVar28 = pdVar28 + 4;
            pdVar24 = pdVar24 + uVar34 * 4;
            pdVar26 = pdVar26 + 4;
          } while (pdVar28 != param_9 + (ulong)uVar8 * 4 + 6);
          pdVar28 = (double *)((long)param_7 + uVar34 * 0x20 + (ulong)uVar8 * uVar34 * 0x20);
          iVar12 = (uVar8 + 1) * 4;
          while( true ) {
            if (iVar12 < (int)uVar35) {
              lVar23 = (long)iVar12;
              pdVar26 = param_5 + lVar23;
              pdVar24 = param_9 + lVar23;
              do {
                dVar30 = 0.0;
                if (0 < iVar33) {
                  lVar27 = 0;
                  pdVar21 = pdVar26;
                  do {
                    pdVar18 = pdVar16 + lVar27;
                    lVar27 = lVar27 + 1;
                    dVar37 = *pdVar21;
                    pdVar21 = pdVar21 + param_6;
                    dVar30 = dVar30 + dVar37 * *pdVar18;
                  } while ((int)lVar27 < iVar33);
                }
                dVar30 = dVar30 * param_1;
                if (pdVar28 != (double *)0x0) {
                  dVar30 = dVar30 + param_2 * *pdVar28;
                }
                pdVar26 = pdVar26 + 1;
                pdVar28 = pdVar28 + uVar34;
                *pdVar24 = dVar30;
                pdVar24 = pdVar24 + 1;
              } while (pdVar26 != param_5 + lVar23 + 1 + (ulong)((uVar35 - 1) - iVar12));
            }
            uVar32 = uVar32 + 1;
            param_3 = param_3 + uVar43;
            param_7 = param_7 + uVar19;
            param_9 = param_9 + param_10;
            if (uVar32 == uVar6) goto LAB_002d7724;
            pdVar16 = param_3;
            if (pdVar14 != (double *)0x0) goto LAB_002d785c;
LAB_002d79fc:
            param_3 = pdVar16;
            pdVar28 = param_7;
            if (3 < (int)uVar35) break;
LAB_002d7a08:
            iVar12 = 0;
            param_7 = pdVar28;
          }
        } while( true );
      }
    }
    else {
      uVar13 = (ulong)(int)uVar35;
      pdVar16 = local_440;
      local_450 = pdVar16;
      local_448 = 0x88;
      if (uVar13 < 0x89) {
        local_448 = uVar13;
      }
      else {
        uVar15 = uVar13 << 3;
        if (0xfe0000000000000 < uVar13) {
          uVar15 = 0xffffffffffffffff;
        }
        pdVar16 = operator_new__(uVar15);
        local_450 = pdVar16;
                    /* try { // try from 002d7d3c to 003d7d83 has its CatchHandler @ 002d7cfc */
        local_448 = uVar13;
      }
      local_450 = pdVar16;
      local_448 = uVar13;
      if (0 < (int)uVar6) {
        lVar23 = NEON_shl(uVar43,3);
        uVar8 = uVar35 - 4 >> 2;
        uVar32 = uVar8 + 1;
        lVar27 = NEON_shl(uVar19,3);
        __n = ((ulong)(uVar35 - 1) + 1) * 8;
        if ((int)uVar35 < 1) {
          __n = 8;
        }
        lVar39 = NEON_shl(param_10,3);
        uVar7 = uVar32 * 4;
                    /* try { // try from 002d7db0 to 003d7db3 has its CatchHandler @ 002d7fa0 */
        if ((int)(uVar35 - 3) < 1) {
          uVar7 = 0;
        }
                    /* try { // try from 002d7db8 to 003d7f9b has its CatchHandler @ 002d7cfc */
        uVar9 = uVar35 - uVar7;
        lVar29 = (long)(int)uVar7;
        pdVar28 = pdVar16 + lVar29;
        uVar5 = (uint)((ulong)pdVar16 >> 3) & 1;
        uVar4 = (uint)((ulong)pdVar28 >> 3) & 1;
        if (uVar9 < uVar4) {
          uVar4 = uVar9;
        }
        if (uVar35 < uVar5) {
          uVar5 = uVar35;
        }
        iVar10 = uVar35 - uVar5;
        iVar11 = uVar9 - uVar4;
        uVar2 = (iVar10 - 2U >> 1) + 1;
        iVar36 = uVar2 * 2;
        uVar3 = (iVar11 - 2U >> 1) + 1;
        iVar12 = uVar3 * 2;
        local_994 = 0;
        do {
          if (pdVar14 == (double *)0x0) {
            pdVar26 = local_9d0;
            if (0 < (int)uVar35) goto LAB_002d7f50;
LAB_002d7fc0:
            if (0 < iVar33) {
LAB_002d7fc8:
                    /* try { // try from 002d7fe4 to 003d7fe7 has its CatchHandler @ 002d7fb4 */
              lVar17 = 0;
              pdVar24 = param_5;
              do {
                dVar30 = pdVar26[lVar17];
                if (0 < (int)(uVar35 - 3)) {
                  if ((pdVar16 < pdVar24 + 8 && pdVar24 < pdVar16 + 8) || (uVar32 < 3)) {
                    pdVar21 = pdVar16;
                    pdVar18 = pdVar24 + 1;
                    do {
                      pdVar25 = pdVar18 + 4;
                      dVar37 = pdVar18[-1];
                    /* catch() { ... } // from try @ 002d80c4 with catch @ 002d827c */
                      pdVar21[1] = pdVar21[1] + dVar30 * *pdVar18;
                      *pdVar21 = *pdVar21 + dVar30 * dVar37;
                      dVar37 = pdVar18[1];
                      pdVar21[3] = pdVar21[3] + dVar30 * pdVar18[2];
                      pdVar21[2] = pdVar21[2] + dVar30 * dVar37;
                      pdVar21 = pdVar21 + 4;
                      pdVar18 = pdVar25;
                    } while (pdVar25 != pdVar24 + (ulong)uVar8 * 4 + 5);
                  }
                  else {
                    uVar31 = 0;
                    pdVar18 = pdVar16;
                    pdVar25 = pdVar16 + 2;
                    pdVar21 = pdVar24;
                    do {
                      pdVar1 = pdVar21 + 1;
                      dVar42 = *pdVar21;
                      uVar31 = uVar31 + 1;
                      dVar40 = pdVar25[1];
                      dVar37 = *pdVar25;
                      dVar38 = pdVar21[3];
                      dVar41 = pdVar21[2];
                      pdVar21 = pdVar21 + 4;
                      pdVar18[1] = pdVar18[1] + *pdVar1 * dVar30;
                      *pdVar18 = *pdVar18 + dVar42 * dVar30;
                    /* try { // try from 002d8080 to 003d8083 has its CatchHandler @ 002d82bc */
                      pdVar18 = pdVar18 + 4;
                      pdVar25[1] = dVar40 + dVar38 * dVar30;
                      *pdVar25 = dVar37 + dVar41 * dVar30;
                      pdVar25 = pdVar25 + 4;
                    } while (uVar31 < uVar32);
                  }
                }
                if ((int)uVar7 < (int)uVar35) {
                  if ((pdVar28 < pdVar24 + lVar29 + 2 && pdVar24 + lVar29 < pdVar16 + lVar29 + 2) ||
                     (uVar9 < 7)) {
                    lVar20 = 0;
                    do {
                      *(double *)((long)pdVar28 + lVar20) =
                           *(double *)((long)pdVar28 + lVar20) +
                           dVar30 * *(double *)((long)(pdVar24 + lVar29) + lVar20);
                      lVar20 = lVar20 + 8;
                    /* try { // try from 002d8238 to 003d827b has its CatchHandler @ 002d82bc */
                    } while (lVar20 != ((ulong)((uVar35 - 1) - uVar7) + 1) * 8);
                  }
                  else {
                    uVar31 = uVar7;
                    if (uVar4 != 0) {
                    /* try { // try from 002d80c4 to 003d80c7 has its CatchHandler @ 002d827c */
                    /* try { // try from 002d80cc to 003d80df has its CatchHandler @ 002d82bc */
                      pdVar16[lVar29] = pdVar16[lVar29] + dVar30 * pdVar24[lVar29];
                      uVar31 = uVar7 + 1;
                    }
                    if (iVar11 != 1) {
                      uVar22 = 0;
                      pdVar21 = pdVar16 + (ulong)uVar4 + lVar29;
                      pdVar18 = pdVar16 + (ulong)uVar4 + lVar29;
                      pdVar25 = pdVar24 + (ulong)uVar4 + lVar29;
                      do {
                        dVar40 = *pdVar25;
                        uVar22 = uVar22 + 1;
                        dVar37 = *pdVar18;
                        pdVar21[1] = pdVar18[1] + pdVar25[1] * dVar30;
                        *pdVar21 = dVar37 + dVar40 * dVar30;
                        pdVar21 = pdVar21 + 2;
                        pdVar18 = pdVar18 + 2;
                        pdVar25 = pdVar25 + 2;
                      } while (uVar22 < uVar3);
                    /* try { // try from 002d8118 to 003d811b has its CatchHandler @ 002d7fb4 */
                      uVar31 = uVar31 + iVar12;
                      if (iVar12 == iVar11) goto LAB_002d8138;
                    }
                    uVar19 = -(ulong)(uVar31 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar31 << 3;
                    *(double *)((long)pdVar16 + uVar19) =
                         *(double *)((long)pdVar16 + uVar19) +
                         dVar30 * *(double *)((long)pdVar24 + uVar19);
                  }
                }
LAB_002d8138:
                lVar17 = lVar17 + 1;
                pdVar24 = pdVar24 + param_6;
              } while ((int)lVar17 < iVar33);
            }
            if (param_7 == (double *)0x0) {
                    /* try { // try from 002d82b8 to 003d82bb has its CatchHandler @ 002d7fb4 */
              if (0 < (int)uVar35) {
                    /* catch() { ... } // from try @ 002d8080 with catch @ 002d82bc
                       catch() { ... } // from try @ 002d80cc with catch @ 002d82bc
                       catch() { ... } // from try @ 002d8238 with catch @ 002d82bc */
                    /* catch() { ... } // from try @ 002d82f4 with catch @ 002d82c4
                       catch() { ... } // from try @ 002d8428 with catch @ 002d82c4
                       catch() { ... } // from try @ 002d85c8 with catch @ 002d82c4 */
                if ((pdVar16 < param_9 + 2 && param_9 < pdVar16 + 2) || (uVar35 < 0xb)) {
                  lVar17 = 0;
                  do {
                    param_9[lVar17] = pdVar16[lVar17] * param_1;
                    /* try { // try from 002d8390 to 003d8393 has its CatchHandler @ 002d85cc */
                    lVar17 = lVar17 + 1;
                  } while ((int)lVar17 < (int)uVar35);
                }
                else {
                  if (uVar5 != 0) {
                    /* try { // try from 002d82f4 to 003d82f7 has its CatchHandler @ 002d82c4 */
                    *param_9 = *pdVar16 * param_1;
                  }
                  uVar31 = (uint)(uVar5 != 0);
                  if (iVar10 != 1) {
                    uVar31 = 0;
                    pdVar26 = pdVar16 + uVar5;
                    pdVar24 = param_9 + uVar5;
                    do {
                      uVar31 = uVar31 + 1;
                      dVar30 = *pdVar26;
                      pdVar24[1] = param_1 * pdVar26[1];
                      *pdVar24 = param_1 * dVar30;
                      pdVar26 = pdVar26 + 2;
                      pdVar24 = pdVar24 + 2;
                    } while (uVar31 < uVar2);
                    uVar31 = iVar36 + (uint)(uVar5 != 0);
                    if (iVar36 == iVar10) goto LAB_002d81bc;
                  }
                  uVar19 = -(ulong)(uVar31 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar31 << 3;
                  *(double *)((long)param_9 + uVar19) =
                       *(double *)((long)pdVar16 + uVar19) * param_1;
                }
              }
            }
            else {
              lVar17 = 0;
              pdVar26 = param_7;
              if (0 < (int)uVar35) {
                do {
                  param_9[lVar17] = param_2 * *pdVar26 + param_1 * pdVar16[lVar17];
                  lVar17 = lVar17 + 1;
                  pdVar26 = pdVar26 + uVar34;
                } while ((int)lVar17 < (int)uVar35);
              }
            }
          }
          else {
            pdVar26 = pdVar14;
            if (0 < iVar33) {
              lVar17 = 0;
              pdVar24 = local_9d0;
              do {
                dVar30 = *pdVar24;
                pdVar24 = pdVar24 + param_4;
                pdVar14[lVar17] = dVar30;
                lVar17 = lVar17 + 1;
              } while ((int)lVar17 < iVar33);
              if (0 < (int)uVar35) goto LAB_002d7f50;
              goto LAB_002d7fc8;
            }
            if (0 < (int)uVar35) {
LAB_002d7f50:
              memset(pdVar16,0,__n);
                    /* catch() { ... } // from try @ 002d7db0 with catch @ 002d7fa0 */
                    /* try { // try from 002d7fb0 to 003d7fb3 has its CatchHandler @ 002d7cfc */
                    /* catch() { ... } // from try @ 002d7fe4 with catch @ 002d7fb4
                       catch() { ... } // from try @ 002d8118 with catch @ 002d7fb4
                       catch() { ... } // from try @ 002d82b8 with catch @ 002d7fb4 */
              goto LAB_002d7fc0;
            }
          }
LAB_002d81bc:
          local_9d0 = (double *)((long)local_9d0 + lVar23);
          local_994 = local_994 + 1;
          param_7 = (double *)((long)param_7 + lVar27);
          param_9 = (double *)((long)param_9 + lVar39);
        } while (local_994 != uVar6);
      }
      if (pdVar16 != local_440) {
        operator_delete__(pdVar16);
      }
    }
  }
  else if (0 < (int)uVar6) {
    uVar8 = iVar33 - 4U >> 2;
    uVar32 = *param_12;
    uVar35 = 0;
    do {
      pdVar16 = param_3;
      if ((pdVar14 != (double *)0x0) && (pdVar16 = pdVar14, 0 < iVar33)) {
        lVar23 = 0;
        pdVar28 = param_3;
        do {
          dVar30 = *pdVar28;
          pdVar28 = pdVar28 + param_4;
          pdVar14[lVar23] = dVar30;
          lVar23 = lVar23 + 1;
        } while ((int)lVar23 < iVar33);
      }
      if (0 < (int)uVar32) {
        lVar23 = 0;
        pdVar28 = param_5;
        pdVar26 = param_7;
        do {
          dVar30 = 0.0;
          dVar37 = dVar30;
          if (iVar33 + -3 < 1) {
            uVar13 = 0;
            dVar40 = dVar30;
            dVar41 = dVar30;
          }
          else {
            dVar41 = 0.0;
            dVar40 = 0.0;
            dVar30 = 0.0;
            pdVar24 = pdVar28 + 1;
            pdVar21 = pdVar16;
            do {
              pdVar18 = pdVar24 + 4;
              dVar30 = dVar30 + pdVar24[-1] * *pdVar21;
              dVar40 = dVar40 + *pdVar24 * pdVar21[1];
              dVar41 = dVar41 + pdVar24[1] * pdVar21[2];
              dVar37 = dVar37 + pdVar24[2] * pdVar21[3];
              pdVar24 = pdVar18;
              pdVar21 = pdVar21 + 4;
            } while (pdVar18 != pdVar28 + (ulong)uVar8 * 4 + 5);
            uVar13 = (ulong)((uVar8 + 1) * 4);
          }
          if ((int)uVar13 < iVar33) {
            uVar15 = -(uVar13 >> 0x1f) & 0xfffffff800000000 | uVar13 << 3;
            lVar27 = 0;
            do {
              lVar39 = lVar27 + uVar15;
              lVar29 = lVar27 + uVar15;
              lVar27 = lVar27 + 8;
              dVar30 = dVar30 + *(double *)((long)pdVar28 + lVar29) *
                                *(double *)((long)pdVar16 + lVar39);
            } while (lVar27 != ((ulong)(uint)((iVar33 + -1) - (int)uVar13) + 1) * 8);
          }
          dVar30 = (dVar30 + dVar40 + dVar41 + dVar37) * param_1;
          if (pdVar26 != (double *)0x0) {
            dVar30 = dVar30 + param_2 * *pdVar26;
          }
          param_9[lVar23] = dVar30;
          lVar23 = lVar23 + 1;
          pdVar28 = pdVar28 + param_6;
          pdVar26 = pdVar26 + uVar34;
        } while ((int)lVar23 < (int)uVar32);
      }
      uVar35 = uVar35 + 1;
      param_3 = param_3 + uVar43;
      param_7 = param_7 + uVar19;
      param_9 = param_9 + param_10;
    } while (uVar35 != uVar6);
  }
LAB_002d7724:
                    /* try { // try from 002d772c to 003d772f has its CatchHandler @ 002d6c20 */
  if ((local_8a0 != local_890) && (local_8a0 != (double *)0x0)) {
    operator_delete__(local_8a0);
  }
  return;
}


==================================================================

### FUNC 002d845c (72 bytes) name=FUN_002d845c

void FUN_002d845c(void)

{
  FUN_002d7474();
  return;
}


==================================================================

### FUNC 002d84a4 (4724 bytes) name=FUN_002d84a4

void FUN_002d84a4(double param_1,double param_2,double **param_3,ulong param_4,double *param_5,
                 ulong param_6,double *param_7,ulong param_8,double *param_9,ulong param_10,
                 int *param_11,uint *param_12,uint param_13)

{
  double *pdVar1;
  double *pdVar2;
  double *pdVar3;
  double *pdVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint *puVar8;
  double **ppdVar9;
  ulong uVar10;
  ulong uVar11;
  double **ppdVar12;
  double *pdVar13;
  uint uVar14;
  double **ppdVar15;
  double *pdVar16;
  double *pdVar17;
  ulong uVar18;
  double **ppdVar19;
  double *pdVar20;
  double **ppdVar21;
  long lVar22;
  uint uVar23;
  int iVar24;
  int iVar25;
  ulong uVar26;
  uint uVar27;
  int iVar28;
  uint uVar29;
  double *pdVar30;
  double *pdVar31;
  double *pdVar32;
  long lVar33;
  double *pdVar34;
  double dVar35;
  double *pdVar36;
  double *pdVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  double dVar43;
  double dVar44;
  double dVar45;
  double dVar46;
  long lVar47;
  long lVar48;
  ulong uVar49;
  long lVar50;
  uint uVar51;
  uint uVar52;
  double **local_920;
  double *apdStack_910 [145];
  ulong local_488;
  double adStack_480 [144];
  
  uVar5 = param_13;
  puVar8 = param_12;
  uVar6 = param_12[1];
  uVar27 = *param_12;
  iVar28 = *param_11;
  ppdVar9 = apdStack_910;
  do {
    ppdVar19 = ppdVar9 + 2;
    ppdVar9[1] = (double *)0x0;
    *ppdVar9 = (double *)0x0;
    ppdVar9 = ppdVar19;
  } while (ppdVar19 != apdStack_910 + 0x90);
  param_6 = param_6 >> 4;
  local_920 = apdStack_910;
  param_4 = param_4 >> 4;
                    /* try { // try from 002d8548 to 003d858b has its CatchHandler @ 002d85cc */
  param_10 = param_10 >> 4;
  if (param_7 == (double *)0x0) {
    uVar26 = 0;
    uVar18 = 0;
  }
  else {
    uVar26 = param_8 >> 4;
    uVar18 = 1;
    if ((param_13 >> 2 & 1) == 0) {
      uVar26 = 1;
      uVar18 = param_8 >> 4;
    }
  }
  if ((param_13 & 1) == 0) {
    uVar49 = param_4;
    uVar10 = 1;
joined_r0x002d8698:
    if (iVar28 == 1) {
      pdVar13 = adStack_480;
      do {
        pdVar16 = pdVar13 + 2;
        pdVar13[1] = 0.0;
        *pdVar13 = 0.0;
        pdVar13 = pdVar16;
      } while ((int **)pdVar16 != &param_11);
                    /* try { // try from 002d85c8 to 003d85cb has its CatchHandler @ 002d82c4 */
      apdStack_910[0x90] = adStack_480;
                    /* catch() { ... } // from try @ 002d8390 with catch @ 002d85cc
                       catch() { ... } // from try @ 002d83dc with catch @ 002d85cc
                       catch() { ... } // from try @ 002d8548 with catch @ 002d85cc */
                    /* catch() { ... } // from try @ 002d8604 with catch @ 002d85d4
                       catch() { ... } // from try @ 002d873c with catch @ 002d85d4
                       catch() { ... } // from try @ 002d88dc with catch @ 002d85d4 */
      local_488 = 0x48;
      if ((param_4 < 2) || (param_11[1] < 2)) {
        if (1 < param_6) {
          uVar49 = (ulong)(int)uVar27;
          if (uVar49 < 0x49) goto LAB_002d9334;
LAB_002d8e44:
          uVar10 = uVar49 << 4;
          if (0x7f0000000000000 < uVar49) {
            uVar10 = 0xffffffffffffffff;
          }
          apdStack_910[0x90] = operator_new__(uVar10);
          uVar10 = 0;
          pdVar13 = apdStack_910[0x90];
          do {
            pdVar13[1] = 0.0;
            *pdVar13 = 0.0;
            uVar10 = uVar10 + 1;
            pdVar13 = pdVar13 + 2;
          } while (uVar49 != uVar10);
          uVar27 = *puVar8;
                    /* try { // try from 002d8e80 to 003d8ec3 has its CatchHandler @ 002d8f04 */
          local_488 = uVar49;
          pdVar13 = apdStack_910[0x90];
          goto LAB_002d9340;
        }
                    /* try { // try from 002d9658 to 003d965b has its CatchHandler @ 002da530 */
        if ((int)uVar6 < 1) goto LAB_002d8b28;
LAB_002d9380:
        iVar28 = 0;
        do {
          dVar35 = param_1 * (double)*param_3;
          dVar38 = param_1 * (double)param_3[1];
          pdVar13 = param_7;
          if ((int)uVar27 < 2) {
            uVar49 = 0;
          }
          else {
            uVar49 = 0;
            pdVar16 = param_5;
            pdVar17 = param_9;
            do {
              while( true ) {
                dVar44 = *pdVar16 * dVar35 - pdVar16[1] * dVar38;
                dVar45 = *pdVar16 * dVar38 + dVar35 * pdVar16[1];
                dVar39 = dVar35 * pdVar16[2] - dVar38 * pdVar16[3];
                dVar40 = dVar38 * pdVar16[2] + pdVar16[3] * dVar35;
                if (pdVar13 != (double *)0x0) break;
                uVar5 = (int)uVar49 + 2;
                uVar49 = (ulong)uVar5;
                pdVar16 = pdVar16 + 4;
                pdVar17[1] = dVar45;
                *pdVar17 = dVar44;
                pdVar17[3] = dVar40;
                pdVar17[2] = dVar39;
                pdVar13 = (double *)(uVar26 * 0x20);
                pdVar17 = pdVar17 + 4;
                if ((int)(uVar27 - 1) <= (int)uVar5) goto LAB_002d94a8;
              }
              pdVar32 = pdVar13 + uVar26 * 2;
              dVar46 = *pdVar13;
              uVar5 = (int)uVar49 + 2;
              uVar49 = (ulong)uVar5;
                    /* try { // try from 002d9404 to 003d943b has its CatchHandler @ 002da530 */
              pdVar16 = pdVar16 + 4;
              pdVar17[1] = dVar45 + pdVar13[1] * param_2;
              *pdVar17 = dVar44 + dVar46 * param_2;
              pdVar36 = pdVar13 + uVar26 * 2;
              pdVar13 = pdVar13 + uVar26 * 4;
              dVar44 = pdVar32[1];
              pdVar17[2] = dVar39 + *pdVar36 * param_2;
              pdVar17[3] = dVar40 + dVar44 * param_2;
              pdVar17 = pdVar17 + 4;
            } while ((int)uVar5 < (int)(uVar27 - 1));
          }
LAB_002d94a8:
          if ((int)uVar49 < (int)uVar27) {
            uVar10 = -(uVar49 >> 0x1f) & 0xfffffff000000000 | uVar49 << 4;
            pdVar17 = (double *)((long)param_5 + uVar10);
            pdVar16 = (double *)((long)param_9 + uVar10);
            do {
              while( true ) {
                dVar39 = *pdVar17 * dVar38 + dVar35 * pdVar17[1];
                dVar40 = *pdVar17 * dVar35 - pdVar17[1] * dVar38;
                if (pdVar13 != (double *)0x0) break;
                uVar5 = (int)uVar49 + 1;
                uVar49 = (ulong)uVar5;
                pdVar17 = pdVar17 + 2;
                    /* try { // try from 002d951c to 003d951f has its CatchHandler @ 002da508 */
                *pdVar16 = dVar40;
                    /* try { // try from 002d9524 to 003d954f has its CatchHandler @ 002da54c */
                pdVar16[1] = dVar39;
                pdVar13 = (double *)(uVar26 * 0x10);
                pdVar16 = pdVar16 + 2;
                if ((int)uVar27 <= (int)uVar5) goto LAB_002d952c;
              }
              pdVar32 = pdVar13 + 1;
              dVar44 = *pdVar13;
              uVar5 = (int)uVar49 + 1;
              uVar49 = (ulong)uVar5;
                    /* try { // try from 002d94d8 to 003d94db has its CatchHandler @ 002da54c */
              pdVar13 = pdVar13 + uVar26 * 2;
              pdVar17 = pdVar17 + 2;
              pdVar16[1] = dVar39 + param_2 * *pdVar32;
              *pdVar16 = dVar40 + param_2 * dVar44;
              pdVar16 = pdVar16 + 2;
            } while ((int)uVar5 < (int)uVar27);
          }
LAB_002d952c:
          iVar28 = iVar28 + 1;
          param_7 = param_7 + uVar18 * 2;
          param_9 = param_9 + param_10 * 2;
          param_3 = param_3 + 2;
          pdVar13 = apdStack_910[0x90];
        } while (iVar28 < (int)uVar6);
      }
      else {
        uVar49 = (ulong)(int)uVar6;
        if (0x48 < uVar49) {
          uVar10 = uVar49 << 4;
                    /* try { // try from 002d8604 to 003d8607 has its CatchHandler @ 002d85d4 */
          if (0x7f0000000000000 < uVar49) {
            uVar10 = 0xffffffffffffffff;
          }
          local_920 = operator_new__(uVar10);
          uVar10 = 0;
          ppdVar9 = local_920;
          do {
            ppdVar9[1] = (double *)0x0;
            *ppdVar9 = (double *)0x0;
            uVar10 = uVar10 + 1;
            ppdVar9 = ppdVar9 + 2;
          } while (uVar49 != uVar10);
        }
        if ((int)uVar6 < 1) {
          pdVar13 = apdStack_910[0x90];
          if (1 < param_6) goto LAB_002d9670;
        }
        else {
          ppdVar9 = local_920;
          do {
            pdVar13 = param_3[1];
            ppdVar19 = ppdVar9 + 2;
            *ppdVar9 = *param_3;
            ppdVar9[1] = pdVar13;
            param_3 = param_3 + param_4 * 2;
            ppdVar9 = ppdVar19;
          } while (ppdVar19 != local_920 + ((ulong)(uVar6 - 1) + 1) * 2);
          if (param_6 < 2) {
            uVar27 = *puVar8;
            param_3 = local_920;
            goto LAB_002d9380;
          }
LAB_002d9670:
          uVar27 = *puVar8;
          uVar49 = (ulong)(int)uVar27;
          param_3 = local_920;
          if (local_488 < uVar49) {
            if (apdStack_910[0x90] != adStack_480) {
              if (apdStack_910[0x90] != (double *)0x0) {
                operator_delete__(apdStack_910[0x90]);
              }
              apdStack_910[0x90] = adStack_480;
                    /* try { // try from 002d96b4 to 003d96b7 has its CatchHandler @ 002da528 */
              local_488 = 0x48;
            }
            if (0x48 < uVar49) goto LAB_002d8e44;
            uVar27 = *puVar8;
            pdVar13 = adStack_480;
          }
          else {
LAB_002d9334:
            local_488 = uVar49;
            pdVar13 = apdStack_910[0x90];
          }
LAB_002d9340:
          if (0 < (int)uVar27) {
                    /* try { // try from 002d9358 to 003d935b has its CatchHandler @ 002da518 */
            pdVar16 = pdVar13;
            do {
                    /* try { // try from 002d9360 to 003d9363 has its CatchHandler @ 002da528 */
              dVar35 = param_5[1];
              pdVar17 = pdVar16 + 2;
              *pdVar16 = *param_5;
              pdVar16[1] = dVar35;
              param_5 = param_5 + param_6 * 2;
              pdVar16 = pdVar17;
            } while (pdVar17 != pdVar13 + ((ulong)(uVar27 - 1) + 1) * 2);
          }
          param_5 = pdVar13;
          if (0 < (int)uVar6) goto LAB_002d9380;
        }
      }
                    /* try { // try from 002d9554 to 003d95a7 has its CatchHandler @ 002da530 */
      if ((pdVar13 != adStack_480) && (pdVar13 != (double *)0x0)) {
        operator_delete__(pdVar13);
      }
      goto LAB_002d8b28;
    }
                    /* try { // try from 002d86a4 to 003d86a7 has its CatchHandler @ 002d88e0 */
    param_4 = uVar10;
    ppdVar9 = (double **)0x0;
  }
  else {
    iVar28 = param_11[1];
    if ((param_4 < 2) || (iVar28 < 2)) {
                    /* catch() { ... } // from try @ 002d83d4 with catch @ 002d858c */
      uVar49 = 1;
      uVar10 = param_4;
      goto joined_r0x002d8698;
    }
    if (0x48 < iVar28) {
      local_920 = operator_new__((long)iVar28 << 4);
      lVar50 = 0;
      ppdVar9 = local_920;
      do {
        ppdVar9[1] = (double *)0x0;
        *ppdVar9 = (double *)0x0;
        lVar50 = lVar50 + 1;
        ppdVar9 = ppdVar9 + 2;
                    /* try { // try from 002d930c to 003d930f has its CatchHandler @ 002da528 */
      } while (iVar28 != lVar50);
    }
    uVar49 = 1;
    ppdVar9 = local_920;
  }
  uVar23 = uVar5 & 2;
  if ((uVar5 >> 1 & 1) == 0) {
    if ((ulong)((long)(int)*puVar8 * 0x10) < 0x641) {
      if (0 < (int)uVar6) {
        uVar5 = uVar27 - 4 >> 2;
        lVar33 = NEON_shl(uVar49,4);
        lVar48 = NEON_shl(param_10,4);
        lVar50 = (ulong)(iVar28 - 1) + 1;
                    /* catch() { ... } // from try @ 002d8d0c with catch @ 002d8ec4 */
        lVar47 = NEON_shl(uVar18,4);
                    /* try { // try from 002d8f00 to 003d8f03 has its CatchHandler @ 002d8bfc */
                    /* catch() { ... } // from try @ 002d8cc8 with catch @ 002d8f04
                       catch() { ... } // from try @ 002d8d14 with catch @ 002d8f04
                       catch() { ... } // from try @ 002d8e80 with catch @ 002d8f04 */
                    /* catch() { ... } // from try @ 002d8f3c with catch @ 002d8f0c
                       catch() { ... } // from try @ 002d9074 with catch @ 002d8f0c
                       catch() { ... } // from try @ 002d9214 with catch @ 002d8f0c */
                    /* try { // try from 002d8f3c to 003d8f3f has its CatchHandler @ 002d8f0c */
        ppdVar19 = param_3;
        if (ppdVar9 == (double **)0x0) goto LAB_002d9214;
LAB_002d8f60:
        ppdVar19 = ppdVar9;
        ppdVar12 = param_3;
        if (0 < iVar28) {
          do {
            pdVar13 = ppdVar12[1];
            ppdVar21 = ppdVar19 + 2;
            *ppdVar19 = *ppdVar12;
            ppdVar19[1] = pdVar13;
            ppdVar19 = ppdVar21;
            ppdVar12 = ppdVar12 + param_4 * 2;
          } while (ppdVar21 != ppdVar9 + lVar50 * 2);
        }
        ppdVar19 = ppdVar9;
        pdVar13 = param_7;
        if ((int)uVar27 < 4) goto LAB_002d9224;
        do {
          pdVar13 = param_9 + 2;
          pdVar16 = param_7 + 1;
          pdVar32 = param_7;
          pdVar17 = param_5;
          do {
            dVar41 = 0.0;
            dVar35 = dVar41;
            dVar38 = dVar41;
            dVar39 = dVar41;
            dVar40 = dVar41;
            dVar44 = dVar41;
            dVar45 = dVar41;
            dVar46 = dVar41;
            if (0 < iVar28) {
              dVar46 = 0.0;
              dVar44 = 0.0;
              dVar45 = 0.0;
              dVar39 = 0.0;
              dVar40 = 0.0;
                    /* try { // try from 002d8fdc to 003d8fdf has its CatchHandler @ 002d9218 */
              dVar35 = 0.0;
              dVar38 = 0.0;
              pdVar36 = pdVar17;
              ppdVar12 = ppdVar19;
              do {
                pdVar34 = ppdVar12[1];
                ppdVar21 = ppdVar12 + 2;
                dVar42 = *pdVar36;
                pdVar20 = pdVar36 + 1;
                pdVar30 = pdVar36 + 2;
                pdVar31 = pdVar36 + 3;
                pdVar1 = pdVar36 + 4;
                pdVar2 = pdVar36 + 5;
                pdVar3 = pdVar36 + 6;
                pdVar4 = pdVar36 + 7;
                pdVar36 = pdVar36 + param_6 * 2;
                    /* try { // try from 002d9020 to 003d9023 has its CatchHandler @ 002d91d8 */
                    /* try { // try from 002d9028 to 003d903b has its CatchHandler @ 002d9218 */
                pdVar37 = *ppdVar12;
                dVar41 = dVar41 + (dVar42 * (double)pdVar37 - *pdVar20 * (double)pdVar34);
                dVar46 = dVar46 + dVar42 * (double)pdVar34 + (double)pdVar37 * *pdVar20;
                dVar44 = dVar44 + (*pdVar30 * (double)pdVar37 - *pdVar31 * (double)pdVar34);
                dVar45 = dVar45 + *pdVar30 * (double)pdVar34 + (double)pdVar37 * *pdVar31;
                dVar39 = dVar39 + (*pdVar1 * (double)pdVar37 - *pdVar2 * (double)pdVar34);
                dVar40 = dVar40 + *pdVar1 * (double)pdVar34 + (double)pdVar37 * *pdVar2;
                dVar35 = dVar35 + (*pdVar3 * (double)pdVar37 - *pdVar4 * (double)pdVar34);
                    /* try { // try from 002d9074 to 003d9077 has its CatchHandler @ 002d8f0c */
                dVar38 = dVar38 + *pdVar3 * (double)pdVar34 + (double)pdVar37 * *pdVar4;
                ppdVar12 = ppdVar21;
              } while (ppdVar21 != ppdVar19 + lVar50 * 2);
            }
            if (pdVar32 == (double *)0x0) {
              pdVar13[-1] = param_1 * dVar46;
              pdVar13[-2] = param_1 * dVar41;
                    /* try { // try from 002d9270 to 003d9293 has its CatchHandler @ 002d9220 */
              pdVar13[1] = param_1 * dVar45;
              *pdVar13 = param_1 * dVar44;
              pdVar13[3] = param_1 * dVar40;
              pdVar13[2] = param_1 * dVar39;
              pdVar13[5] = param_1 * dVar38;
              pdVar13[4] = param_1 * dVar35;
            }
            else {
              dVar42 = *pdVar32;
              pdVar13[-1] = param_2 * *pdVar16 + dVar46 * param_1;
              pdVar13[-2] = param_2 * dVar42 + dVar41 * param_1;
              dVar46 = pdVar32[uVar26 * 2];
              pdVar13[1] = param_2 * pdVar16[uVar26 * 2] + dVar45 * param_1;
              *pdVar13 = param_2 * dVar46 + dVar44 * param_1;
              dVar44 = pdVar32[uVar26 * 4];
              pdVar13[3] = param_2 * pdVar16[uVar26 * 4] + dVar40 * param_1;
              pdVar13[2] = param_2 * dVar44 + dVar39 * param_1;
              dVar39 = pdVar32[uVar26 * 6];
              pdVar13[5] = param_2 * pdVar16[uVar26 * 6] + dVar38 * param_1;
              pdVar13[4] = param_2 * dVar39 + dVar35 * param_1;
            }
            pdVar13 = pdVar13 + 8;
            pdVar32 = pdVar32 + uVar26 * 8;
            pdVar16 = pdVar16 + uVar26 * 8;
            pdVar17 = pdVar17 + 8;
          } while (pdVar13 != param_9 + (ulong)uVar5 * 8 + 10);
          pdVar13 = (double *)((long)param_7 + uVar26 * 0x40 + (ulong)uVar5 * uVar26 * 0x40);
          iVar25 = (uVar5 + 1) * 4;
          while( true ) {
            if (iVar25 < (int)uVar27) {
              lVar22 = (long)iVar25;
              pdVar16 = param_9 + lVar22 * 2;
              pdVar17 = param_5 + lVar22 * 2;
              do {
                dVar38 = 0.0;
                dVar35 = dVar38;
                if (0 < iVar28) {
                  dVar35 = 0.0;
                  ppdVar12 = ppdVar19;
                  pdVar32 = pdVar17;
                  do {
                    ppdVar21 = ppdVar12 + 2;
                    dVar39 = *pdVar32;
                    pdVar36 = pdVar32 + 1;
                    pdVar32 = pdVar32 + param_6 * 2;
                    /* try { // try from 002d9194 to 003d91d7 has its CatchHandler @ 002d9218 */
                    dVar35 = dVar35 + (double)ppdVar12[1] * dVar39 + (double)*ppdVar12 * *pdVar36;
                    dVar38 = dVar38 + ((double)*ppdVar12 * dVar39 - *pdVar36 * (double)ppdVar12[1]);
                    ppdVar12 = ppdVar21;
                  } while (ppdVar21 != ppdVar19 + lVar50 * 2);
                }
                if (pdVar13 == (double *)0x0) {
                  *pdVar16 = param_1 * dVar38;
                  pdVar16[1] = param_1 * dVar35;
                }
                else {
                  dVar39 = *pdVar13;
                  pdVar16[1] = param_1 * dVar35 + param_2 * pdVar13[1];
                  *pdVar16 = param_1 * dVar38 + param_2 * dVar39;
                }
                pdVar16 = pdVar16 + 2;
                    /* catch() { ... } // from try @ 002d9020 with catch @ 002d91d8 */
                pdVar13 = pdVar13 + uVar26 * 2;
                pdVar17 = pdVar17 + 2;
              } while (pdVar16 != param_9 + (lVar22 + 1 + (ulong)((uVar27 - 1) - iVar25)) * 2);
            }
            uVar23 = uVar23 + 1;
            param_3 = (double **)((long)param_3 + lVar33);
            param_7 = (double *)((long)param_7 + lVar47);
            param_9 = (double *)((long)param_9 + lVar48);
            if (uVar23 == uVar6) goto LAB_002d8b28;
            ppdVar19 = param_3;
            if (ppdVar9 != (double **)0x0) goto LAB_002d8f60;
LAB_002d9214:
                    /* try { // try from 002d9214 to 003d9217 has its CatchHandler @ 002d8f0c */
                    /* catch() { ... } // from try @ 002d8fdc with catch @ 002d9218
                       catch() { ... } // from try @ 002d9028 with catch @ 002d9218
                       catch() { ... } // from try @ 002d9194 with catch @ 002d9218 */
                    /* catch() { ... } // from try @ 002d9270 with catch @ 002d9220
                       catch() { ... } // from try @ 002d95cc with catch @ 002d9220
                       catch() { ... } // from try @ 002d9ce0 with catch @ 002d9220
                       catch() { ... } // from try @ 002da4d4 with catch @ 002d9220 */
            param_3 = ppdVar19;
            pdVar13 = param_7;
            if (3 < (int)uVar27) break;
LAB_002d9224:
            iVar25 = 0;
            param_7 = pdVar13;
          }
        } while( true );
      }
    }
    else {
      uVar10 = (ulong)(int)uVar27;
      pdVar13 = adStack_480;
      do {
        pdVar16 = pdVar13 + 2;
        pdVar13[1] = 0.0;
        *pdVar13 = 0.0;
        pdVar13 = pdVar16;
      } while ((int **)pdVar16 != &param_11);
                    /* try { // try from 002d86e8 to 003d86eb has its CatchHandler @ 002d88a0 */
                    /* try { // try from 002d86f0 to 003d8703 has its CatchHandler @ 002d88e0 */
      apdStack_910[0x90] = adStack_480;
      local_488 = 0x48;
      if (uVar10 < 0x49) {
        local_488 = uVar10;
      }
      else {
        uVar11 = uVar10 << 4;
        if (0x7f0000000000000 < uVar10) {
          uVar11 = 0xffffffffffffffff;
        }
        apdStack_910[0x90] = operator_new__(uVar11);
        local_488 = 0;
        pdVar13 = apdStack_910[0x90];
        do {
          pdVar13[1] = 0.0;
          *pdVar13 = 0.0;
          local_488 = local_488 + 1;
          pdVar13 = pdVar13 + 2;
        } while (local_488 != uVar10);
                    /* try { // try from 002d873c to 003d873f has its CatchHandler @ 002d85d4 */
      }
      if (0 < (int)uVar6) {
        uVar5 = uVar27 - 4 >> 2;
        iVar25 = (uVar5 + 1) * 4;
        lVar50 = NEON_shl(uVar49,4);
        if ((int)(uVar27 - 3) < 1) {
          iVar25 = 0;
        }
        uVar7 = uVar27 - iVar25;
        uVar23 = (uVar7 - 2 >> 1) + 1;
        lVar33 = (long)iVar25 + 2;
        uVar51 = 0;
        uVar52 = uVar23 * 2;
        lVar48 = NEON_shl(uVar18,4);
        lVar47 = NEON_shl(param_10,4);
        uVar29 = uVar52 + iVar25;
        pdVar13 = apdStack_910[0x90] + ((ulong)(uVar27 - 1) + 1) * 2;
        pdVar16 = apdStack_910[0x90] + lVar33 * 2 + -4;
        uVar18 = -(ulong)(uVar29 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar29 << 4;
        do {
          if (ppdVar9 == (double **)0x0) {
            ppdVar19 = param_3;
            if (0 < (int)uVar27) goto LAB_002d8870;
LAB_002d8890:
            if (0 < iVar28) {
LAB_002d8898:
              iVar24 = 0;
              pdVar17 = param_5;
              do {
                    /* catch() { ... } // from try @ 002d86e8 with catch @ 002d88a0 */
                pdVar32 = *ppdVar19;
                pdVar36 = ppdVar19[1];
                if (0 < (int)(uVar27 - 3)) {
                  pdVar20 = apdStack_910[0x90];
                  pdVar30 = pdVar17 + 1;
                  do {
                    dVar39 = *pdVar30;
                    pdVar31 = pdVar30 + 8;
                    dVar40 = pdVar30[-1];
                    dVar35 = pdVar30[2];
                    /* try { // try from 002d88dc to 003d88df has its CatchHandler @ 002d85d4 */
                    /* catch() { ... } // from try @ 002d86a4 with catch @ 002d88e0
                       catch() { ... } // from try @ 002d86f0 with catch @ 002d88e0
                       catch() { ... } // from try @ 002d885c with catch @ 002d88e0 */
                    /* catch() { ... } // from try @ 002d8918 with catch @ 002d88e8
                       catch() { ... } // from try @ 002d8a50 with catch @ 002d88e8
                       catch() { ... } // from try @ 002d8bf0 with catch @ 002d88e8 */
                    dVar38 = pdVar30[1];
                    /* try { // try from 002d8918 to 003d891b has its CatchHandler @ 002d88e8 */
                    pdVar20[1] = (double)pdVar32 * dVar39 + dVar40 * (double)pdVar36 + pdVar20[1];
                    *pdVar20 = *pdVar20 + ((double)pdVar32 * dVar40 - (double)pdVar36 * dVar39);
                    pdVar20[2] = ((double)pdVar32 * dVar38 - (double)pdVar36 * dVar35) + pdVar20[2];
                    pdVar20[3] = (double)pdVar32 * dVar35 + dVar38 * (double)pdVar36 + pdVar20[3];
                    dVar39 = pdVar30[4];
                    dVar35 = pdVar30[6];
                    dVar38 = pdVar30[5];
                    dVar40 = pdVar30[3];
                    pdVar20[6] = ((double)pdVar32 * dVar38 - (double)pdVar36 * dVar35) + pdVar20[6];
                    pdVar20[5] = (double)pdVar32 * dVar39 + dVar40 * (double)pdVar36 + pdVar20[5];
                    pdVar20[7] = (double)pdVar32 * dVar35 + dVar38 * (double)pdVar36 + pdVar20[7];
                    pdVar20[4] = pdVar20[4] + ((double)pdVar32 * dVar40 - (double)pdVar36 * dVar39);
                    pdVar20 = pdVar20 + 8;
                    pdVar30 = pdVar31;
                  } while (pdVar31 != pdVar17 + (ulong)uVar5 * 8 + 9);
                }
                if (iVar25 < (int)uVar27) {
                  pdVar20 = pdVar17 + lVar33 * 2 + -4;
                  pdVar30 = pdVar16;
                  if ((pdVar16 < pdVar17 + lVar33 * 2 && pdVar20 < apdStack_910[0x90] + lVar33 * 2)
                     || (uVar7 < 4)) {
                    do {
                      dVar35 = pdVar20[1];
                      pdVar31 = pdVar30 + 2;
                      dVar38 = *pdVar20;
                      pdVar20 = pdVar20 + 2;
                    /* try { // try from 002d95ac to 003d95c3 has its CatchHandler @ 002da528 */
                      *pdVar30 = *pdVar30 + ((double)pdVar32 * dVar38 - (double)pdVar36 * dVar35);
                      pdVar30[1] = pdVar30[1] + (double)pdVar32 * dVar35 + dVar38 * (double)pdVar36;
                      pdVar30 = pdVar31;
                    /* try { // try from 002d95cc to 003d95df has its CatchHandler @ 002d9220 */
                    } while (pdVar31 !=
                             apdStack_910[0x90] +
                             ((long)iVar25 + 1 + (ulong)((uVar27 - 1) - iVar25)) * 2);
                  }
                  else {
                    /* try { // try from 002d89b8 to 003d89bb has its CatchHandler @ 002d8bf4 */
                    uVar29 = 0;
                    pdVar31 = pdVar16;
                    do {
                      dVar35 = *pdVar20;
                      dVar44 = pdVar20[1];
                      dVar39 = pdVar20[2];
                      dVar41 = pdVar20[3];
                      pdVar20 = pdVar20 + 4;
                      uVar29 = uVar29 + 1;
                      dVar38 = *pdVar31;
                      dVar45 = pdVar31[1];
                      dVar40 = pdVar31[2];
                      dVar42 = pdVar31[3];
                      pdVar31 = pdVar31 + 4;
                    /* try { // try from 002d89fc to 003d89ff has its CatchHandler @ 002d8bb4 */
                    /* try { // try from 002d8a04 to 003d8a17 has its CatchHandler @ 002d8bf4 */
                      dVar46 = (double)pdVar32 * dVar35;
                      dVar43 = (double)pdVar32 * dVar39;
                      *pdVar30 = (dVar46 - (double)pdVar36 * dVar46) + dVar38;
                      pdVar30[1] = (double)pdVar32 * dVar44 + (double)pdVar36 * dVar35 + dVar45;
                      pdVar30[2] = (dVar43 - (double)pdVar36 * dVar43) + dVar40;
                      pdVar30[3] = (double)pdVar32 * dVar41 + (double)pdVar36 * dVar39 + dVar42;
                      pdVar30 = pdVar30 + 4;
                    } while (uVar29 < uVar23);
                    if (uVar52 != uVar7) {
                    /* try { // try from 002d8a50 to 003d8a53 has its CatchHandler @ 002d88e8 */
                      dVar35 = *(double *)((long)pdVar17 + uVar18);
                      dVar38 = *(double *)((long)pdVar17 + uVar18 + 8);
                      *(double *)((long)apdStack_910[0x90] + uVar18) =
                           *(double *)((long)apdStack_910[0x90] + uVar18) +
                           ((double)pdVar32 * dVar35 - (double)pdVar36 * dVar38);
                      *(double *)((long)apdStack_910[0x90] + uVar18 + 8) =
                           *(double *)((long)apdStack_910[0x90] + uVar18 + 8) +
                           (double)pdVar32 * dVar38 + dVar35 * (double)pdVar36;
                    }
                  }
                }
                iVar24 = iVar24 + 1;
                pdVar17 = pdVar17 + param_6 * 2;
                ppdVar19 = ppdVar19 + 2;
              } while (iVar24 < iVar28);
            }
            if (param_7 == (double *)0x0) {
              if (0 < (int)uVar27) {
                pdVar17 = apdStack_910[0x90];
                pdVar32 = param_9;
                if ((apdStack_910[0x90] < param_9 + 4 && param_9 < apdStack_910[0x90] + 4) ||
                   (uVar27 < 5)) {
                  do {
                    pdVar36 = pdVar17 + 2;
                    dVar35 = *pdVar17;
                    /* try { // try from 002d9700 to 003d9703 has its CatchHandler @ 002da53c */
                    pdVar32[1] = param_1 * pdVar17[1];
                    *pdVar32 = param_1 * dVar35;
                    pdVar17 = pdVar36;
                    pdVar32 = pdVar32 + 2;
                    /* try { // try from 002d9708 to 003d970b has its CatchHandler @ 002da528 */
                  } while (pdVar36 != pdVar13);
                }
                else {
                  do {
                    pdVar36 = pdVar17 + 2;
                    dVar35 = *pdVar17;
                    pdVar32[1] = param_1 * pdVar17[1];
                    *pdVar32 = param_1 * dVar35;
                    pdVar17 = pdVar36;
                    pdVar32 = pdVar32 + 2;
                  } while (pdVar36 != pdVar13);
                }
              }
            }
            else {
              pdVar17 = param_7;
              pdVar32 = apdStack_910[0x90];
              pdVar36 = param_9;
              if (0 < (int)uVar27) {
                do {
                  dVar35 = *pdVar17;
                  pdVar20 = pdVar32 + 2;
                  dVar38 = *pdVar32;
                  pdVar36[1] = param_2 * pdVar17[1] + param_1 * pdVar32[1];
                  *pdVar36 = param_2 * dVar35 + param_1 * dVar38;
                  pdVar17 = pdVar17 + uVar26 * 2;
                  pdVar32 = pdVar20;
                  pdVar36 = pdVar36 + 2;
                } while (pdVar20 != pdVar13);
              }
            }
          }
          else {
            ppdVar12 = ppdVar9;
            ppdVar21 = param_3;
            ppdVar19 = ppdVar9;
            if (0 < iVar28) {
              do {
                pdVar17 = ppdVar21[1];
                ppdVar15 = ppdVar12 + 2;
                *ppdVar12 = *ppdVar21;
                ppdVar12[1] = pdVar17;
                    /* try { // try from 002d885c to 003d889f has its CatchHandler @ 002d88e0 */
                ppdVar12 = ppdVar15;
                ppdVar21 = ppdVar21 + param_4 * 2;
              } while (ppdVar15 != ppdVar9 + ((ulong)(iVar28 - 1) + 1) * 2);
              if (0 < (int)uVar27) goto LAB_002d8870;
              goto LAB_002d8898;
            }
            if (0 < (int)uVar27) {
LAB_002d8870:
              uVar29 = uVar27;
              if ((int)uVar27 < 1) {
                uVar29 = 1;
              }
              uVar14 = 0;
              pdVar17 = apdStack_910[0x90];
              do {
                pdVar17[1] = 0.0;
                *pdVar17 = 0.0;
                uVar14 = uVar14 + 1;
                pdVar17 = pdVar17 + 2;
              } while (uVar14 < uVar29);
              goto LAB_002d8890;
            }
          }
          param_7 = (double *)((long)param_7 + lVar48);
          param_9 = (double *)((long)param_9 + lVar47);
          uVar51 = uVar51 + 1;
          param_3 = (double **)((long)param_3 + lVar50);
        } while (uVar51 != uVar6);
      }
      if (apdStack_910[0x90] != adStack_480) {
        operator_delete__(apdStack_910[0x90]);
      }
    }
  }
  else if (0 < (int)uVar6) {
    uVar23 = iVar28 - 4U >> 2;
    uVar5 = *puVar8;
                    /* catch() { ... } // from try @ 002d89fc with catch @ 002d8bb4 */
    uVar27 = 0;
                    /* try { // try from 002d8bf0 to 003d8bf3 has its CatchHandler @ 002d88e8 */
                    /* catch() { ... } // from try @ 002d89b8 with catch @ 002d8bf4
                       catch() { ... } // from try @ 002d8a04 with catch @ 002d8bf4
                       catch() { ... } // from try @ 002d8b70 with catch @ 002d8bf4 */
    do {
      ppdVar19 = param_3;
                    /* catch() { ... } // from try @ 002d8c2c with catch @ 002d8bfc
                       catch() { ... } // from try @ 002d8d60 with catch @ 002d8bfc
                       catch() { ... } // from try @ 002d8f00 with catch @ 002d8bfc */
      if ((ppdVar9 != (double **)0x0) &&
         (ppdVar12 = ppdVar9, ppdVar21 = param_3, ppdVar19 = ppdVar9, 0 < iVar28)) {
        do {
          pdVar13 = ppdVar21[1];
          ppdVar15 = ppdVar12 + 2;
          *ppdVar12 = *ppdVar21;
          ppdVar12[1] = pdVar13;
          ppdVar12 = ppdVar15;
          ppdVar21 = ppdVar21 + param_4 * 2;
        } while (ppdVar15 != ppdVar9 + ((ulong)(iVar28 - 1U) + 1) * 2);
      }
      if (0 < (int)uVar5) {
                    /* try { // try from 002d8c2c to 003d8c2f has its CatchHandler @ 002d8bfc */
        iVar25 = 0;
        pdVar16 = param_5;
        pdVar17 = param_7;
        pdVar13 = param_9;
        do {
          dVar35 = 0.0;
          if (iVar28 + -3 < 1) {
            dVar38 = dVar35;
            dVar39 = dVar35;
            dVar40 = dVar35;
            dVar44 = dVar35;
            dVar45 = dVar35;
            dVar46 = dVar35;
            dVar41 = dVar35;
            iVar24 = 0;
          }
          else {
            dVar41 = 0.0;
            dVar46 = 0.0;
            dVar45 = 0.0;
            dVar44 = 0.0;
            dVar40 = 0.0;
            dVar38 = 0.0;
            dVar39 = 0.0;
            pdVar32 = pdVar16 + 1;
            ppdVar12 = ppdVar19;
            do {
              pdVar36 = pdVar32 + 8;
                    /* try { // try from 002d8cc8 to 003d8ccb has its CatchHandler @ 002d8f04 */
              dVar38 = dVar38 + ((double)*ppdVar12 * pdVar32[-1] - *pdVar32 * (double)ppdVar12[1]);
              dVar39 = dVar39 + pdVar32[-1] * (double)ppdVar12[1] + *pdVar32 * (double)*ppdVar12;
              dVar35 = dVar35 + (pdVar32[1] * (double)ppdVar12[2] - pdVar32[2] * (double)ppdVar12[3]
                                );
              dVar41 = dVar41 + pdVar32[1] * (double)ppdVar12[3] + (double)ppdVar12[2] * pdVar32[2];
                    /* try { // try from 002d8d0c to 003d8d0f has its CatchHandler @ 002d8ec4 */
              dVar46 = dVar46 + (pdVar32[3] * (double)ppdVar12[4] - pdVar32[4] * (double)ppdVar12[5]
                                );
              dVar45 = dVar45 + pdVar32[3] * (double)ppdVar12[5] + (double)ppdVar12[4] * pdVar32[4];
                    /* try { // try from 002d8d14 to 003d8d27 has its CatchHandler @ 002d8f04 */
              dVar44 = dVar44 + (pdVar32[5] * (double)ppdVar12[6] - pdVar32[6] * (double)ppdVar12[7]
                                );
              dVar40 = dVar40 + pdVar32[5] * (double)ppdVar12[7] + (double)ppdVar12[6] * pdVar32[6];
              pdVar32 = pdVar36;
              ppdVar12 = ppdVar12 + 8;
              iVar24 = (uVar23 + 1) * 4;
            } while (pdVar36 != pdVar16 + (ulong)uVar23 * 8 + 9);
          }
          if (iVar24 < iVar28) {
            lVar50 = (long)iVar24;
            ppdVar12 = ppdVar19 + lVar50 * 2;
            pdVar32 = pdVar16 + lVar50 * 2;
            do {
              ppdVar21 = ppdVar12 + 2;
                    /* try { // try from 002d8d60 to 003d8d63 has its CatchHandler @ 002d8bfc */
              dVar39 = dVar39 + *pdVar32 * (double)ppdVar12[1] + (double)*ppdVar12 * pdVar32[1];
              dVar38 = dVar38 + (*pdVar32 * (double)*ppdVar12 - pdVar32[1] * (double)ppdVar12[1]);
              ppdVar12 = ppdVar21;
              pdVar32 = pdVar32 + 2;
            } while (ppdVar21 != ppdVar19 + (lVar50 + 1 + (ulong)((iVar28 - 1U) - iVar24)) * 2);
          }
          dVar38 = param_1 * (dVar38 + dVar35 + dVar46 + dVar44);
          dVar35 = param_1 * (dVar41 + dVar39 + dVar45 + dVar40);
          if (pdVar17 == (double *)0x0) {
            *pdVar13 = dVar38;
            pdVar13[1] = dVar35;
          }
          else {
            dVar39 = *pdVar17;
            pdVar13[1] = dVar35 + param_2 * pdVar17[1];
            *pdVar13 = dVar38 + param_2 * dVar39;
          }
          iVar25 = iVar25 + 1;
          pdVar16 = pdVar16 + param_6 * 2;
          pdVar17 = pdVar17 + uVar26 * 2;
          pdVar13 = pdVar13 + 2;
        } while (iVar25 < (int)uVar5);
      }
      uVar27 = uVar27 + 1;
      param_3 = param_3 + uVar49 * 2;
      param_7 = param_7 + uVar18 * 2;
      param_9 = param_9 + param_10 * 2;
    } while (uVar27 != uVar6);
  }
LAB_002d8b28:
  if ((local_920 != apdStack_910) && (local_920 != (double **)0x0)) {
    operator_delete__(local_920);
  }
                    /* try { // try from 002d8b70 to 003d8bb3 has its CatchHandler @ 002d8bf4 */
  return;
}


==================================================================

### FUNC 002d975c (72 bytes) name=FUN_002d975c

void FUN_002d975c(void)

{
  FUN_002d84a4();
  return;
}


==================================================================

### FUNC 002d97a4 (5400 bytes) name=FUN_002d97a4

void FUN_002d97a4(double param_1,double param_2,float *param_3,ulong param_4,double *param_5,
                 ulong param_6,float *param_7,ulong param_8,float *param_9,ulong param_10,
                 int *param_11,uint *param_12,uint param_13)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  float *pfVar4;
  uint uVar5;
  uint uVar6;
  float *pfVar7;
  uint uVar8;
  uint uVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  long lVar13;
  undefined1 auVar14 [16];
  undefined4 uVar15;
  undefined4 uVar16;
  double *pdVar17;
  float *pfVar18;
  ulong uVar19;
  long lVar20;
  double *pdVar21;
  float *pfVar22;
  double *pdVar23;
  float *pfVar24;
  float *pfVar25;
  float *pfVar26;
  undefined8 uVar27;
  ulong uVar28;
  float *pfVar29;
  uint uVar30;
  uint uVar31;
  long lVar32;
  uint uVar33;
  int iVar34;
  double *pdVar35;
  int iVar36;
  int iVar37;
  int iVar38;
  double *pdVar39;
  int iVar40;
  uint uVar41;
  ulong uVar42;
  float fVar43;
  double dVar44;
  double dVar45;
  float fVar46;
  float fVar47;
  double dVar48;
  undefined4 uVar49;
  undefined4 uVar51;
  double dVar50;
  float fVar52;
  float fVar53;
  float fVar54;
  float fVar55;
  double dVar56;
  double dVar57;
  double dVar58;
  double dVar59;
  double dVar60;
  double dVar61;
  uint uVar62;
  float fVar63;
  ulong uVar64;
  ulong uVar65;
  double dVar66;
  double dVar67;
  double dVar68;
  double dVar69;
  double dVar70;
  long lVar71;
  long lVar72;
  double dVar73;
  double dVar74;
  float local_9c0;
  undefined1 uStack_9bc;
  undefined1 uStack_9bb;
  undefined1 uStack_9ba;
  undefined1 uStack_9b9;
  float *local_980;
  uint local_950;
  undefined1 uStack_8e8;
  float *local_8e0;
  float local_8d0 [2];
  undefined8 auStack_8c8 [135];
  double *local_490;
  ulong local_488;
  double local_480 [144];
  
  uVar5 = param_13;
  iVar40 = *param_11;
  uVar41 = *param_12;
                    /* try { // try from 002d9808 to 003d980b has its CatchHandler @ 002da530 */
  uVar9 = param_12[1];
  pfVar18 = local_8d0;
  do {
    pfVar25 = pfVar18 + 4;
    pfVar18[2] = 0.0;
    pfVar18[3] = 0.0;
    pfVar18[0] = 0.0;
    pfVar18[1] = 0.0;
    pfVar18 = pfVar25;
  } while (pfVar25 != (float *)(auStack_8c8 + 0x87));
  param_6 = param_6 >> 3;
  local_8e0 = local_8d0;
  param_4 = param_4 >> 3;
  param_10 = param_10 >> 3;
  if (param_7 == (float *)0x0) {
    uVar42 = 0;
    uVar64 = 0;
  }
  else {
    uVar42 = param_8 >> 3;
    uVar64 = 1;
    if ((param_13 >> 2 & 1) == 0) {
      uVar42 = 1;
      uVar64 = param_8 >> 3;
    }
  }
  if ((param_13 & 1) == 0) {
    uVar65 = param_4;
    uVar19 = 1;
joined_r0x002d9bc4:
    if (iVar40 == 1) {
                    /* try { // try from 002d98a8 to 003d98ab has its CatchHandler @ 002da538 */
      pdVar23 = local_480;
      do {
        pdVar21 = pdVar23 + 2;
        pdVar23[1] = 0.0;
        *pdVar23 = 0.0;
        pdVar23 = pdVar21;
      } while (pdVar21 != local_480 + 0x88);
      local_490 = local_480;
      local_488 = 0x88;
      if ((param_4 < 2) || (param_11[1] < 2)) {
        if (1 < param_6) {
          uVar65 = (ulong)(int)uVar41;
          if (uVar65 < 0x89) goto LAB_002dab88;
LAB_002da5e8:
          uVar19 = uVar65 << 3;
          if (0xfe0000000000000 < uVar65) {
            uVar19 = 0xffffffffffffffff;
          }
          local_490 = operator_new__(uVar19);
                    /* try { // try from 002da5fc to 003da61f has its CatchHandler @ 002da5b0 */
          uVar19 = (uVar65 - 2 >> 1) + 1;
          pdVar23 = local_490;
          if (uVar41 == 1) {
LAB_002da63c:
            *(undefined4 *)pdVar23 = 0;
            *(undefined4 *)((long)pdVar23 + 4) = 0;
          }
          else {
            uVar28 = 0;
            do {
              pdVar23[1] = 0.0;
              *pdVar23 = 0.0;
              uVar28 = uVar28 + 1;
              pdVar23 = pdVar23 + 2;
            } while (uVar28 < uVar19);
            pdVar23 = local_490 + uVar19 * 2;
            if (uVar65 != uVar19 * 2) goto LAB_002da63c;
          }
                    /* try { // try from 002da654 to 003da657 has its CatchHandler @ 002daa54 */
          local_488 = uVar65;
          uVar41 = *param_12;
          pdVar23 = local_490;
          goto LAB_002dab90;
        }
        if ((int)uVar9 < 1) goto LAB_002da1d0;
LAB_002d99a0:
        iVar40 = 0;
        do {
          dVar56 = param_1 * (double)*param_3;
          dVar57 = param_1 * (double)param_3[1];
          pfVar18 = param_7;
          if ((int)uVar41 < 2) {
            uVar65 = 0;
          }
          else {
            uVar65 = 0;
            pdVar23 = param_5;
            pfVar25 = param_9;
            do {
              while( true ) {
                    /* try { // try from 002d9a94 to 003d9a97 has its CatchHandler @ 002da4d8 */
                    /* try { // try from 002d9a9c to 003d9aaf has its CatchHandler @ 002da4e8 */
                dVar48 = dVar57 * (double)*(float *)pdVar23 +
                         (double)*(float *)((long)pdVar23 + 4) * dVar56;
                dVar45 = dVar56 * (double)*(float *)pdVar23 -
                         dVar57 * (double)*(float *)((long)pdVar23 + 4);
                dVar44 = dVar57 * (double)*(float *)(pdVar23 + 1) +
                         (double)*(float *)((long)pdVar23 + 0xc) * dVar56;
                dVar70 = dVar56 * (double)*(float *)(pdVar23 + 1) -
                         dVar57 * (double)*(float *)((long)pdVar23 + 0xc);
                if (pfVar18 != (float *)0x0) break;
                uVar5 = (int)uVar65 + 2;
                uVar65 = (ulong)uVar5;
                uStack_8e8 = SUB81(dVar48,0);
                auVar14[8] = uStack_8e8;
                auVar14._0_8_ = dVar45;
                pdVar23 = pdVar23 + 2;
                auVar14[9] = (char)((ulong)dVar48 >> 8);
                auVar14[10] = (char)((ulong)dVar48 >> 0x10);
                auVar14[0xb] = (char)((ulong)dVar48 >> 0x18);
                auVar14[0xc] = (char)((ulong)dVar48 >> 0x20);
                auVar14[0xd] = (char)((ulong)dVar48 >> 0x28);
                auVar14[0xe] = (char)((ulong)dVar48 >> 0x30);
                auVar14[0xf] = (char)((ulong)dVar48 >> 0x38);
                fVar52 = (float)auVar14._8_8_;
                fVar43 = (float)dVar44;
                *(ulong *)(pfVar25 + 2) =
                     CONCAT17((char)((uint)fVar43 >> 0x18),
                              CONCAT16((char)((uint)fVar43 >> 0x10),
                                       CONCAT15((char)((uint)fVar43 >> 8),
                                                CONCAT14(SUB41(fVar43,0),(float)dVar70))));
                *(ulong *)pfVar25 =
                     CONCAT17((char)((uint)fVar52 >> 0x18),
                              CONCAT16((char)((uint)fVar52 >> 0x10),
                                       CONCAT15((char)((uint)fVar52 >> 8),
                                                CONCAT14(SUB41(fVar52,0),(float)dVar45))));
                pfVar18 = (float *)(uVar42 * 0x10);
                pfVar25 = pfVar25 + 4;
                if ((int)(uVar41 - 1) <= (int)uVar5) goto LAB_002d9af0;
              }
              pfVar24 = pfVar18 + uVar42 * 2;
              fVar52 = *pfVar18;
              uVar5 = (int)uVar65 + 2;
              uVar65 = (ulong)uVar5;
              pdVar23 = pdVar23 + 2;
              pfVar25[1] = (float)(dVar48 + (double)pfVar18[1] * param_2);
              *pfVar25 = (float)(dVar45 + (double)fVar52 * param_2);
              pfVar29 = pfVar18 + uVar42 * 2;
              pfVar18 = pfVar18 + uVar42 * 4;
              fVar52 = pfVar24[1];
                    /* try { // try from 002d9a50 to 003d9a53 has its CatchHandler @ 002da4e8 */
              pfVar25[2] = (float)(dVar70 + (double)*pfVar29 * param_2);
              pfVar25[3] = (float)(dVar44 + (double)fVar52 * param_2);
              pfVar25 = pfVar25 + 4;
            } while ((int)uVar5 < (int)(uVar41 - 1));
          }
LAB_002d9af0:
                    /* try { // try from 002d9af0 to 003d9b4b has its CatchHandler @ 002da530 */
          if ((int)uVar65 < (int)uVar41) {
            uVar19 = -(uVar65 >> 0x1f) & 0xfffffff800000000 | uVar65 << 3;
            pfVar25 = (float *)((long)param_5 + uVar19);
            pfVar24 = (float *)((long)param_9 + uVar19);
            do {
              while( true ) {
                dVar45 = dVar57 * (double)*pfVar25 + (double)pfVar25[1] * dVar56;
                dVar70 = dVar56 * (double)*pfVar25 - dVar57 * (double)pfVar25[1];
                if (pfVar18 != (float *)0x0) break;
                uVar5 = (int)uVar65 + 1;
                uVar65 = (ulong)uVar5;
                pfVar25 = pfVar25 + 2;
                *pfVar24 = (float)dVar70;
                pfVar24[1] = (float)dVar45;
                pfVar18 = (float *)(uVar42 * 8);
                pfVar24 = pfVar24 + 2;
                if ((int)uVar41 <= (int)uVar5) goto LAB_002d9b94;
              }
              pfVar29 = pfVar18 + 1;
              uVar5 = (int)uVar65 + 1;
              uVar65 = (ulong)uVar5;
              fVar52 = *pfVar18;
              pfVar18 = pfVar18 + uVar42 * 2;
              pfVar25 = pfVar25 + 2;
              pfVar24[1] = (float)(dVar45 + (double)*pfVar29 * param_2);
              *pfVar24 = (float)(dVar70 + (double)fVar52 * param_2);
              pfVar24 = pfVar24 + 2;
            } while ((int)uVar5 < (int)uVar41);
          }
LAB_002d9b94:
          iVar40 = iVar40 + 1;
          param_7 = param_7 + uVar64 * 2;
          param_9 = param_9 + param_10 * 2;
          param_3 = param_3 + 2;
          pdVar23 = local_490;
        } while (iVar40 < (int)uVar9);
      }
      else {
        uVar65 = (ulong)(int)uVar9;
        if (0x88 < uVar65) {
                    /* try { // try from 002d98ec to 003d98ef has its CatchHandler @ 002da550 */
          uVar19 = uVar65 << 3;
                    /* try { // try from 002d98f4 to 003d991f has its CatchHandler @ 002da538 */
          if (0xfe0000000000000 < uVar65) {
            uVar19 = 0xffffffffffffffff;
          }
          local_8e0 = operator_new__(uVar19);
          uVar19 = (uVar65 - 2 >> 1) + 1;
          pfVar18 = local_8e0;
          if (uVar9 != 1) {
            uVar28 = 0;
            do {
                    /* try { // try from 002d9924 to 003d99af has its CatchHandler @ 002da530 */
              pfVar18[2] = 0.0;
              pfVar18[3] = 0.0;
              pfVar18[0] = 0.0;
              pfVar18[1] = 0.0;
              uVar28 = uVar28 + 1;
              pfVar18 = pfVar18 + 4;
            } while (uVar28 < uVar19);
            pfVar18 = local_8e0 + uVar19 * 4;
            if (uVar65 == uVar19 * 2) goto LAB_002d995c;
          }
          *pfVar18 = 0.0;
          pfVar18[1] = 0.0;
        }
LAB_002d995c:
        if ((int)uVar9 < 1) {
          pdVar23 = local_490;
          if (1 < param_6) goto LAB_002dac34;
        }
        else {
          lVar20 = 0;
          do {
            uVar27 = *(undefined8 *)param_3;
            param_3 = param_3 + param_4 * 2;
            *(undefined8 *)(local_8e0 + lVar20 * 2) = uVar27;
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar9);
          if (param_6 < 2) {
            uVar41 = *param_12;
            param_3 = local_8e0;
            goto LAB_002d99a0;
          }
LAB_002dac34:
          uVar41 = *param_12;
          uVar65 = (ulong)(int)uVar41;
          param_3 = local_8e0;
          if (local_488 < uVar65) {
            if (local_490 != local_480) {
              if (local_490 != (double *)0x0) {
                operator_delete__(local_490);
              }
              local_490 = local_480;
              local_488 = 0x88;
            }
            if (0x88 < uVar65) goto LAB_002da5e8;
                    /* try { // try from 002dac84 to 003dac87 has its CatchHandler @ 002db3bc */
            uVar41 = *param_12;
            pdVar23 = local_480;
          }
          else {
LAB_002dab88:
            local_488 = uVar65;
            pdVar23 = local_490;
          }
LAB_002dab90:
          if (0 < (int)uVar41) {
            lVar20 = 0;
            do {
              dVar56 = *param_5;
                    /* try { // try from 002daba8 to 003dabcb has its CatchHandler @ 002db3b4 */
              param_5 = param_5 + param_6;
              pdVar23[lVar20] = dVar56;
              lVar20 = lVar20 + 1;
            } while ((int)lVar20 < (int)uVar41);
          }
          param_5 = pdVar23;
          if (0 < (int)uVar9) goto LAB_002d99a0;
        }
      }
      if ((pdVar23 != local_480) && (pdVar23 != (double *)0x0)) {
        operator_delete__(pdVar23);
      }
      goto LAB_002da1d0;
    }
    pfVar18 = (float *)0x0;
    param_4 = uVar19;
  }
  else {
    iVar40 = param_11[1];
    if ((param_4 < 2) || (iVar40 < 2)) {
      uVar65 = 1;
      uVar19 = param_4;
      goto joined_r0x002d9bc4;
    }
    lVar20 = (long)iVar40;
    if (0x88 < iVar40) {
                    /* try { // try from 002dab24 to 003dab43 has its CatchHandler @ 002daae0 */
      local_8e0 = operator_new__(lVar20 << 3);
      uVar65 = (lVar20 - 2U >> 1) + 1;
      uVar19 = 0;
      pfVar18 = local_8e0;
      do {
        pfVar18[2] = 0.0;
        pfVar18[3] = 0.0;
        pfVar18[0] = 0.0;
        pfVar18[1] = 0.0;
                    /* try { // try from 002dab48 to 003dab67 has its CatchHandler @ 002db340 */
        uVar19 = uVar19 + 1;
        pfVar18 = pfVar18 + 4;
      } while (uVar19 < uVar65);
      if (lVar20 != uVar65 * 2) {
        local_8e0[uVar65 * 4] = 0.0;
        local_8e0[uVar65 * 4 + 1] = 0.0;
      }
    }
    uVar65 = 1;
    pfVar18 = local_8e0;
  }
  uVar33 = uVar5 & 2;
  if ((uVar5 >> 1 & 1) == 0) {
                    /* try { // try from 002d9bec to 003d9bef has its CatchHandler @ 002da4ec */
    if ((ulong)((long)(int)*param_12 * 8) < 0x641) {
      if (0 < (int)uVar9) {
        uVar5 = uVar41 - 4 >> 2;
        lVar72 = NEON_shl(uVar65,3);
        lVar20 = (ulong)(iVar40 - 1) + 1;
                    /* try { // try from 002da698 to 003da69b has its CatchHandler @ 002daa44 */
                    /* try { // try from 002da6a0 to 003da6a3 has its CatchHandler @ 002daa54 */
        lVar13 = NEON_shl(uVar64,3);
        lVar71 = NEON_shl(param_10,3);
        pfVar25 = param_3;
        if (pfVar18 == (float *)0x0) goto LAB_002daa4c;
LAB_002da71c:
        if (0 < iVar40) {
          lVar32 = 0;
          pfVar25 = param_3;
          do {
            uVar27 = *(undefined8 *)pfVar25;
            pfVar25 = pfVar25 + param_4 * 2;
            *(undefined8 *)(pfVar18 + lVar32 * 2) = uVar27;
            lVar32 = lVar32 + 1;
          } while ((int)lVar32 < iVar40);
        }
        pfVar25 = pfVar18;
        pfVar24 = param_7;
        if ((int)uVar41 < 4) goto LAB_002daa58;
        do {
          pfVar24 = param_9 + 4;
          pfVar29 = param_7 + 1;
          pfVar22 = param_7;
          pdVar23 = param_5;
          do {
            dVar58 = 0.0;
            dVar56 = dVar58;
            dVar57 = dVar58;
            dVar70 = dVar58;
            dVar45 = dVar58;
            dVar44 = dVar58;
            dVar48 = dVar58;
            dVar50 = dVar58;
            if (0 < iVar40) {
              dVar50 = 0.0;
                    /* try { // try from 002da784 to 003da787 has its CatchHandler @ 002daab4 */
              dVar44 = 0.0;
              dVar48 = 0.0;
              dVar70 = 0.0;
              dVar45 = 0.0;
              dVar56 = 0.0;
              dVar57 = 0.0;
              pdVar21 = pdVar23;
              pfVar26 = pfVar25;
              do {
                    /* try { // try from 002da79c to 003da79f has its CatchHandler @ 002daa5c */
                pfVar7 = pfVar26 + 2;
                fVar52 = *(float *)pdVar21;
                pfVar1 = (float *)((long)pdVar21 + 4);
                pdVar35 = pdVar21 + 1;
                pfVar2 = (float *)((long)pdVar21 + 0xc);
                pdVar39 = pdVar21 + 2;
                pfVar3 = (float *)((long)pdVar21 + 0x14);
                pdVar17 = pdVar21 + 3;
                pfVar4 = (float *)((long)pdVar21 + 0x1c);
                    /* try { // try from 002da7c8 to 003da7cb has its CatchHandler @ 002daabc */
                pdVar21 = pdVar21 + param_6;
                dVar60 = (double)pfVar26[1];
                    /* try { // try from 002da7d0 to 003da7d3 has its CatchHandler @ 002daa5c */
                dVar59 = (double)*pfVar26;
                dVar58 = dVar58 + ((double)fVar52 * dVar59 - dVar60 * (double)*pfVar1);
                dVar50 = dVar50 + (double)fVar52 * dVar60 + (double)*pfVar1 * dVar59;
                dVar44 = dVar44 + (dVar59 * (double)*(float *)pdVar35 - dVar60 * (double)*pfVar2);
                dVar48 = dVar48 + dVar60 * (double)*(float *)pdVar35 + (double)*pfVar2 * dVar59;
                dVar70 = dVar70 + (dVar59 * (double)*(float *)pdVar39 - dVar60 * (double)*pfVar3);
                dVar45 = dVar45 + dVar60 * (double)*(float *)pdVar39 + (double)*pfVar3 * dVar59;
                dVar56 = dVar56 + (dVar59 * (double)*(float *)pdVar17 - dVar60 * (double)*pfVar4);
                dVar57 = dVar57 + dVar60 * (double)*(float *)pdVar17 + (double)*pfVar4 * dVar59;
                pfVar26 = pfVar7;
              } while (pfVar7 != pfVar25 + lVar20 * 2);
            }
            if (pfVar22 == (float *)0x0) {
              auVar11._8_4_ = SUB84(param_1 * dVar50,0);
              auVar11._0_8_ = param_1 * dVar58;
              auVar11._12_4_ = (int)((ulong)(param_1 * dVar50) >> 0x20);
              *(ulong *)(pfVar24 + -2) =
                   CONCAT44((float)(param_1 * dVar48),(float)(param_1 * dVar44));
              *(ulong *)(pfVar24 + -4) = CONCAT44((float)auVar11._8_8_,(float)(param_1 * dVar58));
                    /* catch() { ... } // from try @ 002da784 with catch @ 002daab4
                       catch() { ... } // from try @ 002da9a8 with catch @ 002daab4 */
                    /* catch() { ... } // from try @ 002da7c8 with catch @ 002daabc */
                    /* catch() { ... } // from try @ 002da9cc with catch @ 002daacc */
              auVar12._8_4_ = SUB84(param_1 * dVar45,0);
              auVar12._0_8_ = param_1 * dVar70;
              auVar12._12_4_ = (int)((ulong)(param_1 * dVar45) >> 0x20);
              *(ulong *)(pfVar24 + 2) =
                   CONCAT44((float)(param_1 * dVar57),(float)(param_1 * dVar56));
              *(ulong *)pfVar24 = CONCAT44((float)auVar12._8_8_,(float)(param_1 * dVar70));
            }
            else {
                    /* try { // try from 002da864 to 003da87b has its CatchHandler @ 002daa54 */
              fVar52 = *pfVar22;
                    /* try { // try from 002da884 to 003da897 has its CatchHandler @ 002da5b0 */
              pfVar24[-3] = (float)(param_2 * (double)*pfVar29 + dVar50 * param_1);
              pfVar24[-4] = (float)(param_2 * (double)fVar52 + dVar58 * param_1);
              fVar52 = pfVar22[uVar42 * 2];
              pfVar24[-1] = (float)(param_2 * (double)pfVar29[uVar42 * 2] + dVar48 * param_1);
              pfVar24[-2] = (float)(param_2 * (double)fVar52 + dVar44 * param_1);
              fVar52 = pfVar22[uVar42 * 4];
              pfVar24[1] = (float)(param_2 * (double)pfVar29[uVar42 * 4] + dVar45 * param_1);
              *pfVar24 = (float)(param_2 * (double)fVar52 + dVar70 * param_1);
              fVar52 = pfVar22[uVar42 * 6];
              pfVar24[3] = (float)(param_2 * (double)pfVar29[uVar42 * 6] + dVar57 * param_1);
              pfVar24[2] = (float)(param_2 * (double)fVar52 + dVar56 * param_1);
            }
            pfVar24 = pfVar24 + 8;
            pfVar22 = pfVar22 + uVar42 * 8;
            pfVar29 = pfVar29 + uVar42 * 8;
            pdVar23 = pdVar23 + 4;
          } while (pfVar24 != param_9 + (ulong)uVar5 * 8 + 0xc);
          pfVar24 = (float *)((long)param_7 + uVar42 * 0x20 + (ulong)uVar5 * uVar42 * 0x20);
          iVar34 = (uVar5 + 1) * 4;
          while( true ) {
            if (iVar34 < (int)uVar41) {
              lVar32 = (long)iVar34;
              pfVar29 = param_9 + lVar32 * 2;
              pdVar23 = param_5 + lVar32;
              do {
                    /* try { // try from 002da980 to 003da983 has its CatchHandler @ 002daa54 */
                dVar57 = 0.0;
                dVar56 = dVar57;
                if (0 < iVar40) {
                  dVar56 = 0.0;
                  pfVar22 = pfVar25;
                  pdVar21 = pdVar23;
                  do {
                    pfVar1 = pfVar22 + 2;
                    /* try { // try from 002da998 to 003da99b has its CatchHandler @ 002da5b0 */
                    pfVar26 = (float *)((long)pdVar21 + 4);
                    fVar52 = *(float *)pdVar21;
                    pdVar21 = pdVar21 + param_6;
                    /* try { // try from 002da9a8 to 003da9ab has its CatchHandler @ 002daab4 */
                    /* try { // try from 002da9b8 to 003da9bb has its CatchHandler @ 002da9d4 */
                    /* try { // try from 002da9cc to 003da9cf has its CatchHandler @ 002daacc */
                    dVar57 = dVar57 + ((double)*pfVar22 * (double)fVar52 -
                                      (double)pfVar22[1] * (double)*pfVar26);
                    dVar56 = dVar56 + (double)pfVar22[1] * (double)fVar52 +
                                      (double)*pfVar26 * (double)*pfVar22;
                    pfVar22 = pfVar1;
                    /* catch() { ... } // from try @ 002da9b8 with catch @ 002da9d4 */
                  } while (pfVar1 != pfVar25 + lVar20 * 2);
                }
                if (pfVar24 == (float *)0x0) {
                  *pfVar29 = (float)(param_1 * dVar57);
                  pfVar29[1] = (float)(param_1 * dVar56);
                }
                else {
                  fVar52 = *pfVar24;
                  pfVar29[1] = (float)(param_1 * dVar56 + (double)pfVar24[1] * param_2);
                  *pfVar29 = (float)(param_1 * dVar57 + (double)fVar52 * param_2);
                }
                pfVar29 = pfVar29 + 2;
                pfVar24 = pfVar24 + uVar42 * 2;
                pdVar23 = pdVar23 + 1;
              } while (pfVar29 != param_9 + (lVar32 + 1 + (ulong)((uVar41 - 1) - iVar34)) * 2);
            }
            uVar33 = uVar33 + 1;
            param_3 = (float *)((long)param_3 + lVar72);
            param_7 = (float *)((long)param_7 + lVar13);
                    /* try { // try from 002daa40 to 003daa43 has its CatchHandler @ 002da5b0 */
            param_9 = (float *)((long)param_9 + lVar71);
                    /* catch() { ... } // from try @ 002da698 with catch @ 002daa44 */
            if (uVar33 == uVar9) goto LAB_002da1d0;
            pfVar25 = param_3;
            if (pfVar18 != (float *)0x0) goto LAB_002da71c;
LAB_002daa4c:
                    /* catch() { ... } // from try @ 002da654 with catch @ 002daa54
                       catch() { ... } // from try @ 002da6a0 with catch @ 002daa54
                       catch() { ... } // from try @ 002da864 with catch @ 002daa54
                       catch() { ... } // from try @ 002da980 with catch @ 002daa54 */
            param_3 = pfVar25;
            pfVar24 = param_7;
            if (3 < (int)uVar41) break;
LAB_002daa58:
                    /* catch() { ... } // from try @ 002da79c with catch @ 002daa5c
                       catch() { ... } // from try @ 002da7d0 with catch @ 002daa5c */
            iVar34 = 0;
            param_7 = pfVar24;
          }
        } while( true );
      }
    }
    else {
      uVar19 = (ulong)(int)uVar41;
      pdVar23 = local_480;
      do {
        pdVar21 = pdVar23 + 2;
        pdVar23[1] = 0.0;
        *pdVar23 = 0.0;
        pdVar23 = pdVar21;
      } while ((int **)pdVar21 != &param_11);
      local_490 = local_480;
      local_488 = 0x48;
                    /* try { // try from 002d9c30 to 003d9c33 has its CatchHandler @ 002da560 */
      if (0x48 < uVar19) {
                    /* try { // try from 002d9c38 to 003d9c4b has its CatchHandler @ 002da4ec */
        uVar28 = uVar19 << 4;
        if (0x7f0000000000000 < uVar19) {
          uVar28 = 0xffffffffffffffff;
        }
        local_490 = operator_new__(uVar28);
        uVar28 = 0;
        pdVar23 = local_490;
        do {
          pdVar23[1] = 0.0;
          *pdVar23 = 0.0;
          uVar28 = uVar28 + 1;
          pdVar23 = pdVar23 + 2;
        } while (uVar19 != uVar28);
      }
      local_488 = uVar19;
      if (0 < (int)uVar9) {
                    /* try { // try from 002d9c8c to 003d9c8f has its CatchHandler @ 002da530 */
        uVar33 = uVar41 - 4 >> 2;
        uVar5 = (uVar41 - 2 >> 1) + 1;
        lVar72 = NEON_shl(param_10,3);
        lVar20 = NEON_shl(uVar65,3);
        uVar62 = uVar5 * 2;
        iVar34 = (uVar33 + 1) * 4;
        if ((int)(uVar41 - 3) < 1) {
          iVar34 = 0;
        }
        lVar13 = NEON_shl(uVar64,3);
                    /* try { // try from 002d9ce0 to 003d9ce3 has its CatchHandler @ 002d9220 */
                    /* try { // try from 002d9cf0 to 003d9d07 has its CatchHandler @ 002da530 */
        uVar8 = uVar62;
        if (uVar41 == 1) {
          uVar8 = 0;
        }
        local_950 = 0;
        uVar6 = ((uVar41 - iVar34) - 4 >> 2) + 1;
        iVar38 = uVar6 * 4;
        lVar71 = NEON_shl((long)(int)uVar8,3);
        local_980 = param_9;
        do {
          if (pfVar18 == (float *)0x0) {
                    /* catch() { ... } // from try @ 002d98a8 with catch @ 002da538
                       catch() { ... } // from try @ 002d98f4 with catch @ 002da538 */
                    /* catch() { ... } // from try @ 002d9700 with catch @ 002da53c */
            pfVar25 = param_3;
            if (0 < (int)uVar41) goto LAB_002d9da4;
LAB_002d9dc4:
            if (0 < iVar40) {
LAB_002d9dcc:
              iVar36 = 0;
              pdVar23 = param_5;
              do {
                dVar57 = (double)*pfVar25;
                    /* try { // try from 002d9de8 to 003d9deb has its CatchHandler @ 002da580 */
                dVar56 = (double)pfVar25[1];
                if (0 < (int)(uVar41 - 3)) {
                    /* try { // try from 002d9df0 to 003d9e03 has its CatchHandler @ 002da4f0 */
                  pdVar21 = local_490;
                  pfVar24 = (float *)((long)pdVar23 + 4);
                  do {
                    fVar63 = *pfVar24;
                    pfVar29 = pfVar24 + 8;
                    fVar53 = pfVar24[2];
                    fVar52 = pfVar24[4];
                    fVar46 = pfVar24[6];
                    fVar43 = pfVar24[5];
                    fVar55 = pfVar24[-1];
                    fVar47 = pfVar24[1];
                    fVar54 = pfVar24[3];
                    /* try { // try from 002d9e44 to 003d9f23 has its CatchHandler @ 002da530 */
                    *pdVar21 = *pdVar21 + (dVar57 * (double)fVar55 - dVar56 * (double)fVar63);
                    pdVar21[1] = dVar57 * (double)fVar63 + (double)fVar55 * dVar56 + pdVar21[1];
                    pdVar21[2] = (dVar57 * (double)fVar47 - dVar56 * (double)fVar53) + pdVar21[2];
                    pdVar21[3] = dVar57 * (double)fVar53 + (double)fVar47 * dVar56 + pdVar21[3];
                    pdVar21[4] = pdVar21[4] + (dVar57 * (double)fVar54 - dVar56 * (double)fVar52);
                    pdVar21[5] = dVar57 * (double)fVar52 + (double)fVar54 * dVar56 + pdVar21[5];
                    pdVar21[6] = (dVar57 * (double)fVar43 - dVar56 * (double)fVar46) + pdVar21[6];
                    pdVar21[7] = dVar57 * (double)fVar46 + (double)fVar43 * dVar56 + pdVar21[7];
                    pdVar21 = pdVar21 + 8;
                    pfVar24 = pfVar29;
                  } while (pfVar29 != (float *)((long)pdVar23 + (ulong)uVar33 * 0x20 + 0x24));
                }
                if (iVar34 < (int)uVar41) {
                  iVar37 = iVar34;
                  if (2 < (uVar41 - 1) - iVar34) {
                    pdVar21 = pdVar23 + iVar34;
                    uVar31 = 0;
                    pdVar35 = local_490 + (long)iVar34 * 2;
                    pdVar39 = local_490 + (long)iVar34 * 2;
                    do {
                      fVar52 = *(float *)pdVar21;
                      fVar43 = *(float *)((long)pdVar21 + 4);
                      uVar15 = *(undefined4 *)(pdVar21 + 1);
                      uVar49 = *(undefined4 *)((long)pdVar21 + 0xc);
                      pdVar17 = pdVar21 + 2;
                      fVar46 = *(float *)((long)pdVar21 + 0x14);
                      uVar16 = *(undefined4 *)(pdVar21 + 3);
                      uVar51 = *(undefined4 *)((long)pdVar21 + 0x1c);
                      pdVar21 = pdVar21 + 4;
                      uVar31 = uVar31 + 1;
                      _local_9c0 = CONCAT17((char)((uint)uVar15 >> 0x18),
                                            CONCAT16((char)((uint)uVar15 >> 0x10),
                                                     CONCAT15((char)((uint)uVar15 >> 8),
                                                              CONCAT14((char)uVar15,fVar52))));
                      dVar48 = pdVar39[1];
                      dVar45 = pdVar39[2];
                      dVar50 = pdVar39[3];
                      dVar58 = pdVar39[4];
                      dVar60 = pdVar39[5];
                      dVar59 = pdVar39[6];
                      dVar61 = pdVar39[7];
                      dVar73 = (double)fVar52;
                      dVar74 = (double)(float)((ulong)_local_9c0 >> 0x20);
                      dVar70 = (double)*(float *)pdVar17;
                      dVar44 = (double)(float)(CONCAT17((char)((uint)uVar16 >> 0x18),
                                                        CONCAT16((char)((uint)uVar16 >> 0x10),
                                                                 CONCAT15((char)((uint)uVar16 >> 8),
                                                                          CONCAT14((char)uVar16,
                                                                                   *(float *)pdVar17
                                                                                  )))) >> 0x20);
                      dVar68 = dVar57 * dVar73;
                      dVar69 = dVar57 * dVar74;
                      dVar66 = dVar57 * dVar70;
                      dVar67 = dVar57 * dVar44;
                    /* try { // try from 002d9fc4 to 003d9fc7 has its CatchHandler @ 002da464 */
                      *pdVar35 = *pdVar39 + (dVar68 - dVar56 * dVar68);
                      pdVar35[1] = dVar57 * (double)fVar43 + dVar56 * dVar73 + dVar48;
                      pdVar35[2] = dVar45 + (dVar69 - dVar56 * dVar69);
                      pdVar35[3] = dVar57 * (double)(float)(CONCAT17((char)((uint)uVar49 >> 0x18),
                                                                     CONCAT16((char)((uint)uVar49 >>
                                                                                    0x10),
                                                                              CONCAT15((char)((uint)
                                                  uVar49 >> 8),CONCAT14((char)uVar49,fVar43)))) >>
                                                  0x20) + dVar56 * dVar74 + dVar50;
                      pdVar35[4] = (dVar66 - dVar56 * dVar66) + dVar58;
                      pdVar35[5] = dVar57 * (double)fVar46 + dVar56 * dVar70 + dVar60;
                      pdVar35[6] = (dVar67 - dVar56 * dVar67) + dVar59;
                      pdVar35[7] = dVar57 * (double)(float)(CONCAT17((char)((uint)uVar51 >> 0x18),
                                                                     CONCAT16((char)((uint)uVar51 >>
                                                                                    0x10),
                                                                              CONCAT15((char)((uint)
                                                  uVar51 >> 8),CONCAT14((char)uVar51,fVar46)))) >>
                                                  0x20) + dVar56 * dVar44 + dVar61;
                      pdVar35 = pdVar35 + 8;
                      pdVar39 = pdVar39 + 8;
                    } while (uVar31 < uVar6);
                    iVar37 = iVar38 + iVar34;
                    if (iVar38 == uVar41 - iVar34) goto LAB_002da108;
                  }
                  lVar32 = (long)iVar37;
                    /* try { // try from 002da010 to 003da023 has its CatchHandler @ 002da464 */
                  fVar52 = *(float *)(pdVar23 + lVar32);
                  dVar45 = (double)*(float *)((long)pdVar23 + lVar32 * 8 + 4);
                  dVar70 = local_490[lVar32 * 2 + 1];
                  local_490[lVar32 * 2] =
                       local_490[lVar32 * 2] + (dVar57 * (double)fVar52 - dVar56 * dVar45);
                  local_490[lVar32 * 2 + 1] = dVar70 + dVar57 * dVar45 + (double)fVar52 * dVar56;
                  if (iVar37 + 1 < (int)uVar41) {
                    /* try { // try from 002da064 to 003da0c7 has its CatchHandler @ 002da530 */
                    lVar32 = (long)(iVar37 + 1);
                    fVar52 = *(float *)(pdVar23 + lVar32);
                    dVar45 = (double)*(float *)((long)pdVar23 + lVar32 * 8 + 4);
                    dVar70 = local_490[lVar32 * 2 + 1];
                    local_490[lVar32 * 2] =
                         local_490[lVar32 * 2] + (dVar57 * (double)fVar52 - dVar56 * dVar45);
                    local_490[lVar32 * 2 + 1] = dVar70 + dVar57 * dVar45 + (double)fVar52 * dVar56;
                    if (iVar37 + 2 < (int)uVar41) {
                      lVar32 = (long)(iVar37 + 2);
                      fVar52 = *(float *)(pdVar23 + lVar32);
                      dVar45 = (double)*(float *)((long)pdVar23 + lVar32 * 8 + 4);
                      dVar70 = local_490[lVar32 * 2 + 1];
                      local_490[lVar32 * 2] =
                           local_490[lVar32 * 2] + (dVar57 * (double)fVar52 - dVar56 * dVar45);
                      local_490[lVar32 * 2 + 1] = dVar70 + dVar57 * dVar45 + (double)fVar52 * dVar56
                      ;
                    }
                  }
                }
LAB_002da108:
                iVar36 = iVar36 + 1;
                pdVar23 = pdVar23 + param_6;
                    /* try { // try from 002da114 to 003da117 has its CatchHandler @ 002da464 */
                pfVar25 = pfVar25 + 2;
              } while (iVar36 < iVar40);
            }
            if (param_7 == (float *)0x0) {
              if (0 < (int)uVar41) {
                    /* catch() { ... } // from try @ 002d94d8 with catch @ 002da54c
                       catch() { ... } // from try @ 002d9524 with catch @ 002da54c */
                if (uVar41 != 1) {
                    /* catch() { ... } // from try @ 002d98ec with catch @ 002da550 */
                  uVar31 = 0;
                  pdVar23 = local_490;
                  pfVar25 = local_980;
                  do {
                    /* catch() { ... } // from try @ 002d9c30 with catch @ 002da560 */
                    uVar31 = uVar31 + 1;
                    dVar56 = *pdVar23;
                    /* catch() { ... } // from try @ 002da008 with catch @ 002da570 */
                    auVar10._8_4_ = SUB84(param_1 * pdVar23[1],0);
                    auVar10._0_8_ = param_1 * dVar56;
                    auVar10._12_4_ = (int)((ulong)(param_1 * pdVar23[1]) >> 0x20);
                    /* catch() { ... } // from try @ 002d9de8 with catch @ 002da580 */
                    *(ulong *)(pfVar25 + 2) =
                         CONCAT44((float)(param_1 * pdVar23[3]),(float)(param_1 * pdVar23[2]));
                    *(ulong *)pfVar25 = CONCAT44((float)auVar10._8_8_,(float)(param_1 * dVar56));
                    pdVar23 = pdVar23 + 4;
                    pfVar25 = pfVar25 + 4;
                  } while (uVar31 < uVar5);
                    /* catch() { ... } // from try @ 002da43c with catch @ 002da590 */
                  if (uVar62 == uVar41) goto LAB_002da17c;
                }
                dVar56 = (local_490 + (long)(int)uVar8 * 2)[1];
                    /* catch() { ... } // from try @ 002da5fc with catch @ 002da5b0
                       catch() { ... } // from try @ 002da884 with catch @ 002da5b0
                       catch() { ... } // from try @ 002da998 with catch @ 002da5b0
                       catch() { ... } // from try @ 002daa40 with catch @ 002da5b0 */
                *(float *)((long)local_980 + lVar71) =
                     (float)(param_1 * local_490[(long)(int)uVar8 * 2]);
                *(float *)((long)local_980 + lVar71 + 4) = (float)(param_1 * dVar56);
              }
            }
            else {
              pfVar25 = param_7;
              pfVar24 = local_980;
              pdVar23 = local_490;
              if (0 < (int)uVar41) {
                do {
                    /* try { // try from 002da138 to 003da13b has its CatchHandler @ 002da530 */
                  fVar52 = *pfVar25;
                  pdVar21 = pdVar23 + 2;
                  dVar56 = *pdVar23;
                  pfVar24[1] = (float)(param_2 * (double)pfVar25[1] + pdVar23[1] * param_1);
                  *pfVar24 = (float)(param_2 * (double)fVar52 + dVar56 * param_1);
                  pfVar25 = pfVar25 + uVar42 * 2;
                  pfVar24 = pfVar24 + 2;
                  pdVar23 = pdVar21;
                } while (pdVar21 != local_490 + ((ulong)(uVar41 - 1) + 1) * 2);
              }
            }
          }
          else {
            pfVar25 = pfVar18;
            if (0 < iVar40) {
              lVar32 = 0;
              pfVar24 = param_3;
              do {
                uVar27 = *(undefined8 *)pfVar24;
                pfVar24 = pfVar24 + param_4 * 2;
                *(undefined8 *)(pfVar18 + lVar32 * 2) = uVar27;
                lVar32 = lVar32 + 1;
              } while ((int)lVar32 < iVar40);
              if (0 < (int)uVar41) goto LAB_002d9da4;
              goto LAB_002d9dcc;
            }
            if (0 < (int)uVar41) {
LAB_002d9da4:
                    /* try { // try from 002d9da4 to 003d9da7 has its CatchHandler @ 002da4f0 */
              uVar31 = uVar41;
              if ((int)uVar41 < 1) {
                uVar31 = 1;
              }
              uVar30 = 0;
              pdVar23 = local_490;
              do {
                pdVar23[1] = 0.0;
                *pdVar23 = 0.0;
                uVar30 = uVar30 + 1;
                pdVar23 = pdVar23 + 2;
              } while (uVar30 < uVar31);
              goto LAB_002d9dc4;
            }
          }
LAB_002da17c:
          param_3 = (float *)((long)param_3 + lVar20);
                    /* try { // try from 002da188 to 003da18b has its CatchHandler @ 002da4e8 */
          local_950 = local_950 + 1;
                    /* try { // try from 002da198 to 003da19b has its CatchHandler @ 002da4ec */
          param_7 = (float *)((long)param_7 + lVar13);
          local_980 = (float *)((long)local_980 + lVar72);
        } while (local_950 != uVar9);
      }
      if (local_490 != local_480) {
        operator_delete__(local_490);
      }
    }
  }
  else if (0 < (int)uVar9) {
    uVar33 = iVar40 - 4U >> 2;
    uVar41 = 0;
    uVar5 = *param_12;
    do {
      pfVar25 = param_3;
      if ((pfVar18 != (float *)0x0) && (pfVar25 = pfVar18, 0 < iVar40)) {
        lVar20 = 0;
        pfVar24 = param_3;
        do {
          uVar27 = *(undefined8 *)pfVar24;
          pfVar24 = pfVar24 + param_4 * 2;
          *(undefined8 *)(pfVar18 + lVar20 * 2) = uVar27;
          lVar20 = lVar20 + 1;
        } while ((int)lVar20 < iVar40);
      }
                    /* try { // try from 002da2bc to 003da2bf has its CatchHandler @ 002da504 */
      if (0 < (int)uVar5) {
        iVar34 = 0;
        pdVar23 = param_5;
        pfVar29 = param_7;
        pfVar24 = param_9;
        do {
          dVar56 = 0.0;
          if (iVar40 + -3 < 1) {
            dVar57 = dVar56;
            dVar70 = dVar56;
            dVar45 = dVar56;
            dVar44 = dVar56;
            dVar48 = dVar56;
            dVar50 = dVar56;
            dVar58 = dVar56;
            iVar38 = 0;
                    /* catch() { ... } // from try @ 002d9358 with catch @ 002da518 */
                    /* catch() { ... } // from try @ 002d930c with catch @ 002da528
                       catch() { ... } // from try @ 002d9360 with catch @ 002da528
                       catch() { ... } // from try @ 002d95ac with catch @ 002da528
                       catch() { ... } // from try @ 002d96b4 with catch @ 002da528
                       catch() { ... } // from try @ 002d9708 with catch @ 002da528 */
                    /* catch() { ... } // from try @ 002d9404 with catch @ 002da530
                       catch() { ... } // from try @ 002d9554 with catch @ 002da530
                       catch() { ... } // from try @ 002d9658 with catch @ 002da530
                       catch() { ... } // from try @ 002d9808 with catch @ 002da530
                       catch() { ... } // from try @ 002d9924 with catch @ 002da530
                       catch() { ... } // from try @ 002d9af0 with catch @ 002da530
                       catch() { ... } // from try @ 002d9c8c with catch @ 002da530
                       catch() { ... } // from try @ 002d9cf0 with catch @ 002da530
                       catch() { ... } // from try @ 002d9e44 with catch @ 002da530
                       catch() { ... } // from try @ 002da064 with catch @ 002da530
                       catch() { ... } // from try @ 002da138 with catch @ 002da530
                       catch() { ... } // from try @ 002da1b4 with catch @ 002da530
                       catch() { ... } // from try @ 002da218 with catch @ 002da530
                       catch() { ... } // from try @ 002da35c with catch @ 002da530
                       catch() { ... } // from try @ 002da444 with catch @ 002da530 */
          }
          else {
            dVar58 = 0.0;
            dVar50 = 0.0;
            dVar48 = 0.0;
            dVar44 = 0.0;
            dVar45 = 0.0;
                    /* try { // try from 002da300 to 003da303 has its CatchHandler @ 002da4f4 */
            dVar57 = 0.0;
            dVar70 = 0.0;
            pfVar22 = (float *)((long)pdVar23 + 4);
            pfVar26 = pfVar25;
            do {
                    /* try { // try from 002da308 to 003da31b has its CatchHandler @ 002da504 */
              pfVar1 = pfVar22 + 8;
                    /* try { // try from 002da35c to 003da41f has its CatchHandler @ 002da530 */
              dVar57 = dVar57 + ((double)pfVar22[-1] * (double)*pfVar26 -
                                (double)pfVar26[1] * (double)*pfVar22);
              dVar70 = dVar70 + (double)pfVar22[-1] * (double)pfVar26[1] +
                                (double)*pfVar22 * (double)*pfVar26;
              dVar56 = dVar56 + ((double)pfVar26[2] * (double)pfVar22[1] -
                                (double)pfVar26[3] * (double)pfVar22[2]);
              dVar58 = dVar58 + (double)pfVar26[3] * (double)pfVar22[1] +
                                (double)pfVar22[2] * (double)pfVar26[2];
              dVar50 = dVar50 + ((double)pfVar26[4] * (double)pfVar22[3] -
                                (double)pfVar26[5] * (double)pfVar22[4]);
              dVar48 = dVar48 + (double)pfVar26[5] * (double)pfVar22[3] +
                                (double)pfVar22[4] * (double)pfVar26[4];
              dVar44 = dVar44 + ((double)pfVar26[6] * (double)pfVar22[5] -
                                (double)pfVar26[7] * (double)pfVar22[6]);
              dVar45 = dVar45 + (double)pfVar26[7] * (double)pfVar22[5] +
                                (double)pfVar22[6] * (double)pfVar26[6];
              pfVar22 = pfVar1;
              pfVar26 = pfVar26 + 8;
              iVar38 = (uVar33 + 1) * 4;
            } while (pfVar1 != (float *)((long)pdVar23 + (ulong)uVar33 * 0x20 + 0x24));
          }
          if (iVar38 < iVar40) {
            lVar20 = (long)iVar38;
            pfVar22 = pfVar25 + lVar20 * 2;
            pdVar21 = pdVar23 + lVar20;
            do {
              pfVar26 = pfVar22 + 2;
                    /* try { // try from 002da43c to 003da43f has its CatchHandler @ 002da590 */
                    /* try { // try from 002da444 to 003da447 has its CatchHandler @ 002da530 */
                    /* try { // try from 002da45c to 003da45f has its CatchHandler @ 002da504 */
              dVar57 = dVar57 + ((double)*pfVar22 * (double)*(float *)pdVar21 -
                                (double)pfVar22[1] * (double)*(float *)((long)pdVar21 + 4));
                    /* catch() { ... } // from try @ 002d9fc4 with catch @ 002da464
                       catch() { ... } // from try @ 002da010 with catch @ 002da464
                       catch() { ... } // from try @ 002da114 with catch @ 002da464 */
              dVar70 = dVar70 + (double)pfVar22[1] * (double)*(float *)pdVar21 +
                                (double)*(float *)((long)pdVar21 + 4) * (double)*pfVar22;
              pfVar22 = pfVar26;
              pdVar21 = pdVar21 + 1;
            } while (pfVar26 != pfVar25 + (lVar20 + 1 + (ulong)(uint)((iVar40 + -1) - iVar38)) * 2);
          }
          dVar57 = param_1 * (dVar57 + dVar56 + dVar50 + dVar44);
          dVar56 = param_1 * (dVar70 + dVar58 + dVar48 + dVar45);
          if (pfVar29 == (float *)0x0) {
                    /* catch() { ... } // from try @ 002da2bc with catch @ 002da504
                       catch() { ... } // from try @ 002da308 with catch @ 002da504
                       catch() { ... } // from try @ 002da45c with catch @ 002da504 */
            *pfVar24 = (float)dVar57;
                    /* catch() { ... } // from try @ 002d951c with catch @ 002da508 */
            pfVar24[1] = (float)dVar56;
          }
          else {
            fVar52 = *pfVar29;
            pfVar24[1] = (float)(dVar56 + (double)pfVar29[1] * param_2);
            *pfVar24 = (float)(dVar57 + (double)fVar52 * param_2);
          }
          iVar34 = iVar34 + 1;
          pdVar23 = pdVar23 + param_6;
          pfVar29 = pfVar29 + uVar42 * 2;
          pfVar24 = pfVar24 + 2;
        } while (iVar34 < (int)uVar5);
      }
      uVar41 = uVar41 + 1;
                    /* try { // try from 002da4d4 to 003da4d7 has its CatchHandler @ 002d9220 */
      param_3 = param_3 + uVar65 * 2;
                    /* catch() { ... } // from try @ 002d9a94 with catch @ 002da4d8 */
      param_7 = param_7 + uVar64 * 2;
      param_9 = param_9 + param_10 * 2;
    } while (uVar41 != uVar9);
  }
LAB_002da1d0:
  if ((local_8e0 != local_8d0) && (local_8e0 != (float *)0x0)) {
    operator_delete__(local_8e0);
  }
                    /* try { // try from 002da204 to 003da207 has its CatchHandler @ 002da4f0 */
                    /* try { // try from 002da218 to 003da21b has its CatchHandler @ 002da530 */
  return;
}


==================================================================

### FUNC 002dacfc (72 bytes) name=FUN_002dacfc

void FUN_002dacfc(void)

{
                    /* try { // try from 002dad10 to 003dad27 has its CatchHandler @ 002db340 */
                    /* try { // try from 002dad30 to 003dad43 has its CatchHandler @ 002daae0 */
  FUN_002d97a4();
  return;
}


==================================================================

### FUNC 002dad48 (3552 bytes) name=transform

/* cv::transform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) */

void cv::transform(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  long *plVar10;
  uint uVar11;
  bool bVar12;
  int iVar13;
  int iVar14;
  char *pcVar15;
  ulong uVar16;
  double *pdVar17;
  double *pdVar18;
  float *pfVar19;
  undefined8 *puVar20;
  int *piVar21;
  undefined4 *puVar22;
  Mat *pMVar23;
  double *pdVar24;
  int iVar25;
  uint uVar26;
  ulong uVar27;
  code *pcVar28;
  double dVar29;
  double dVar30;
  long lVar31;
  undefined4 uVar32;
  undefined4 local_668;
  int local_664;
  undefined4 local_660;
  undefined4 local_65c;
  code *local_658;
  code *local_650;
  undefined8 local_648;
  Mat *local_640;
  undefined4 local_638;
  undefined4 local_634;
  uint local_630;
  int local_62c;
  int local_628;
  int local_624;
  double *local_620;
  double *pdStack_618;
  double *local_610;
  double *pdStack_608;
  undefined8 local_600;
  long lStack_5f8;
  int *local_5f0;
  long *local_5e8;
  long local_5e0;
  long local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  double *local_5c0;
  double *pdStack_5b8;
  double *local_5b0;
  double *pdStack_5a8;
  undefined8 local_5a0;
  long lStack_598;
  undefined8 *local_590;
  long *local_588;
  long local_580;
  long local_578;
  uint local_570;
  int local_56c;
  undefined4 local_568;
  undefined4 local_564;
  undefined8 local_560;
  undefined8 local_558;
  undefined8 local_550;
  undefined8 local_548;
  undefined8 local_540;
  long local_538;
  undefined4 *local_530;
  undefined8 *local_528;
  undefined8 local_520;
  undefined8 local_518;
  uint local_510;
  int local_50c;
  undefined4 local_508;
  undefined4 local_504;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  long local_4d8;
  undefined4 *local_4d0;
  undefined8 *local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined4 local_4b0;
  int local_4ac;
  Mat *local_4a8;
  undefined8 local_4a0;
  undefined8 local_498;
  ulong local_490;
  ulong local_488;
  long local_478;
  undefined4 *local_470;
  undefined1 *local_468;
  undefined1 auStack_460 [16];
  undefined8 local_450;
  ulong local_448;
  double adStack_440 [136];
  
  iVar13 = _InputArray::kind(param_1);
                    /* try { // try from 002dad80 to 003dad83 has its CatchHandler @ 002db3bc */
  if (iVar13 == 0x10000) {
                    /* catch() { ... } // from try @ 002db468 with catch @ 002db430
                       catch() { ... } // from try @ 002db5f8 with catch @ 002db430
                       catch() { ... } // from try @ 002db66c with catch @ 002db430 */
    pMVar23 = *(Mat **)(param_1 + 8);
    local_530 = &local_568;
    local_528 = &local_520;
    local_570 = *(uint *)pMVar23;
    local_56c = *(int *)(pMVar23 + 4);
    local_568 = *(undefined4 *)(pMVar23 + 8);
    local_564 = *(undefined4 *)(pMVar23 + 0xc);
    local_560 = *(undefined8 *)(pMVar23 + 0x10);
    local_558 = *(undefined8 *)(pMVar23 + 0x18);
    local_550 = *(undefined8 *)(pMVar23 + 0x20);
    local_548 = *(undefined8 *)(pMVar23 + 0x28);
    local_540 = *(undefined8 *)(pMVar23 + 0x30);
    local_538 = *(long *)(pMVar23 + 0x38);
                    /* try { // try from 002db468 to 003db46b has its CatchHandler @ 002db430 */
                    /* try { // try from 002db484 to 003db487 has its CatchHandler @ 002db648 */
    local_518 = 0;
    local_520 = 0;
    if (local_538 != 0) {
                    /* try { // try from 002db4a4 to 003db4a7 has its CatchHandler @ 002db6c4 */
      piVar21 = (int *)(local_538 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = *piVar21 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_520 = **(undefined8 **)(pMVar23 + 0x48);
      local_518 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_56c = 0;
      Mat::copySize((Mat *)&local_570,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar13 = _InputArray::kind(param_3);
  if (iVar13 == 0x10000) {
    pMVar23 = *(Mat **)(param_3 + 8);
                    /* try { // try from 002db4e4 to 003db4e7 has its CatchHandler @ 002db6bc */
    local_5f0 = &local_628;
    local_5e8 = &local_5e0;
    local_630 = *(uint *)pMVar23;
    local_62c = *(int *)(pMVar23 + 4);
    local_628 = *(int *)(pMVar23 + 8);
    local_624 = *(int *)(pMVar23 + 0xc);
    local_620 = *(double **)(pMVar23 + 0x10);
    pdStack_618 = *(double **)(pMVar23 + 0x18);
    local_610 = *(double **)(pMVar23 + 0x20);
    pdStack_608 = *(double **)(pMVar23 + 0x28);
    local_600 = *(undefined8 *)(pMVar23 + 0x30);
    lStack_5f8 = *(long *)(pMVar23 + 0x38);
                    /* try { // try from 002db538 to 003db53b has its CatchHandler @ 002db670 */
                    /* try { // try from 002db540 to 003db5b7 has its CatchHandler @ 002db6bc */
    local_5d8 = 0;
    local_5e0 = 0;
    if (lStack_5f8 != 0) {
      piVar21 = (int *)(lStack_5f8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = *piVar21 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_5e0 = **(long **)(pMVar23 + 0x48);
      local_5d8 = (*(long **)(pMVar23 + 0x48))[1];
    }
    else {
      local_62c = 0;
      Mat::copySize((Mat *)&local_630,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  uVar11 = local_570;
  iVar9 = local_628;
  uVar4 = local_570 >> 3 & 0x1ff;
                    /* try { // try from 002dadcc to 003dadcf has its CatchHandler @ 002db368 */
  uVar1 = local_570 & 7;
  iVar13 = uVar4 + 1;
                    /* try { // try from 002dadd4 to 003dadd7 has its CatchHandler @ 002db3bc */
  if ((local_624 != iVar13) && (local_624 != uVar4 + 2)) {
    local_450 = (double *)0x0;
    local_448 = 0;
    pcVar15 = (char *)String::allocate((String *)&local_450,0x22);
    uVar8 = s_scn____m_cols____scn___1____m_co_00469070._24_8_;
    uVar7 = s_scn____m_cols____scn___1____m_co_00469070._16_8_;
    uVar6 = s_scn____m_cols____scn___1____m_co_00469070._8_8_;
    uVar5 = s_scn____m_cols____scn___1____m_co_00469070._0_8_;
    *(undefined2 *)(pcVar15 + 0x20) = s_scn____m_cols____scn___1____m_co_00469070._32_2_;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
                    /* try { // try from 002dae4c to 003daecf has its CatchHandler @ 002db3c4 */
    error(-0xd7,(String *)&local_450,
          "void cv::transform(cv::InputArray, cv::OutputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x79b);
    String::deallocate((String *)&local_450);
  }
  local_450 = (double *)CONCAT44(*local_530,local_530[1]);
  _OutputArray::create(param_2,&local_450,uVar1 + (iVar9 + -1) * 8,0xffffffff,0,0);
  iVar14 = _InputArray::kind((_InputArray *)param_2);
  if (iVar14 == 0x10000) {
    pMVar23 = *(Mat **)(param_2 + 8);
    local_4d0 = &local_508;
    local_4c8 = &local_4c0;
    local_510 = *(uint *)pMVar23;
    local_50c = *(int *)(pMVar23 + 4);
    local_508 = *(undefined4 *)(pMVar23 + 8);
    local_504 = *(undefined4 *)(pMVar23 + 0xc);
    local_500 = *(undefined8 *)(pMVar23 + 0x10);
    local_4f8 = *(undefined8 *)(pMVar23 + 0x18);
    local_4f0 = *(undefined8 *)(pMVar23 + 0x20);
                    /* try { // try from 002db5bc to 003db5d3 has its CatchHandler @ 002db6c4 */
    local_4e8 = *(undefined8 *)(pMVar23 + 0x28);
    local_4e0 = *(undefined8 *)(pMVar23 + 0x30);
    local_4d8 = *(long *)(pMVar23 + 0x38);
                    /* try { // try from 002db5d8 to 003db5ef has its CatchHandler @ 002db648 */
                    /* try { // try from 002db5f8 to 003db60b has its CatchHandler @ 002db430 */
    local_4b8 = 0;
    local_4c0 = 0;
    if (local_4d8 != 0) {
      piVar21 = (int *)(local_4d8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = *piVar21 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_4c0 = **(undefined8 **)(pMVar23 + 0x48);
      local_4b8 = (*(undefined8 **)(pMVar23 + 0x48))[1];
    }
    else {
      local_50c = 0;
      Mat::copySize((Mat *)&local_510,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  uVar26 = 5;
  if ((uVar11 & 5) == 4) {
    lVar31 = 8;
    uVar32 = 0x42ff4006;
    uVar26 = 6;
  }
  else {
                    /* try { // try from 002daed4 to 003daeeb has its CatchHandler @ 002db3bc */
    uVar32 = 0x42ff4005;
    lVar31 = 4;
  }
  local_450 = adStack_440;
  local_448 = 0x88;
                    /* catch() { ... } // from try @ 002db484 with catch @ 002db648
                       catch() { ... } // from try @ 002db5d8 with catch @ 002db648 */
  if ((((local_630 >> 0xe & 1) == 0) || (uVar26 != (local_630 & 0xfff))) || (local_624 != uVar4 + 2)
     ) {
    iVar14 = uVar4 + 2;
    uVar27 = (ulong)(iVar9 * iVar14);
    if (0x88 < uVar27) {
      uVar16 = uVar27 << 3;
      if (0xfe0000000000000 < uVar27) {
        uVar16 = 0xffffffffffffffff;
      }
      local_450 = operator_new__(uVar16);
    }
    pdVar18 = local_450;
    local_590 = &local_5c8;
                    /* try { // try from 002daf58 to 003db2bf has its CatchHandler @ 002db3c4 */
    local_580 = iVar14 * lVar31;
    local_5b0 = (double *)((long)local_450 + local_580 * iVar9);
    local_588 = &local_580;
    local_5c8 = (Mat *)CONCAT44(iVar14,iVar9);
    local_5a0 = 0;
    lStack_598 = 0;
    local_5d0 = (Mat *)CONCAT44(2,uVar32);
    local_5c0 = local_450;
    pdStack_5b8 = local_450;
    pdStack_5a8 = local_5b0;
    local_578 = lVar31;
    local_448 = uVar27;
    memset(local_450,0,lVar31 * iVar9 * (long)iVar14);
    if (local_624 == iVar14) {
      local_4a0 = 0;
      local_4b0 = 0x2010000;
      local_4a8 = (Mat *)&local_5d0;
      Mat::convertTo((Mat *)&local_630,(_OutputArray *)&local_4b0,uVar26,1.0,0.0);
    }
    else {
      local_660 = 0x80000000;
      local_65c = 0x7fffffff;
      local_668 = 0;
      local_664 = local_624;
      Mat::Mat((Mat *)&local_4b0,(Mat *)&local_5d0,(Range *)&local_660,(Range *)&local_668);
      local_638 = 0;
      local_634 = 0;
      local_648._0_4_ = 0x2010000;
      local_640 = (Mat *)&local_4b0;
      Mat::convertTo((Mat *)&local_630,(_OutputArray *)&local_648,uVar26,1.0,0.0);
      if (local_478 != 0) {
        piVar21 = (int *)(local_478 + 0x14);
        do {
          iVar14 = *piVar21;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
          if (bVar3) {
            *piVar21 = iVar14 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar14 == 1) {
          Mat::deallocate((Mat *)&local_4b0);
        }
      }
      local_478 = 0;
      local_4a0 = 0;
      local_488 = 0;
      local_490 = 0;
      local_498 = 0;
      if (0 < local_4ac) {
        iVar14 = 0;
        do {
          *local_470 = 0;
          iVar14 = iVar14 + 1;
          local_470 = local_470 + 1;
        } while (iVar14 < local_4ac);
      }
      if (local_468 != auStack_460) {
        fastFree(local_468);
      }
    }
    if (lStack_598 != 0) {
      piVar21 = (int *)(lStack_598 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = *piVar21 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_5f8 != 0) {
      piVar21 = (int *)(lStack_5f8 + 0x14);
      do {
        iVar14 = *piVar21;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = iVar14 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_630);
      }
    }
    plVar10 = local_588;
    lStack_5f8 = 0;
    local_620 = (double *)0x0;
    pdStack_608 = (double *)0x0;
    local_610 = (double *)0x0;
    pdStack_618 = (double *)0x0;
    if (local_62c < 1) {
LAB_002db128:
      local_630 = (uint)local_5d0;
      if (2 < local_5d0._4_4_) goto LAB_002db134;
      local_624 = local_5c8._4_4_;
      local_628 = (int)local_5c8;
      local_62c = local_5d0._4_4_;
      *local_5e8 = *local_588;
      local_5e8[1] = plVar10[1];
    }
    else {
      iVar14 = 0;
      piVar21 = local_5f0;
      do {
        *piVar21 = 0;
        iVar14 = iVar14 + 1;
        piVar21 = piVar21 + 1;
      } while (iVar14 < local_62c);
      if (local_62c < 3) goto LAB_002db128;
LAB_002db134:
      local_630 = (uint)local_5d0;
      Mat::copySize((Mat *)&local_630,(Mat *)&local_5d0);
    }
    pdStack_608 = pdStack_5a8;
    local_610 = local_5b0;
    lStack_5f8 = lStack_598;
    local_600 = local_5a0;
    pdStack_618 = pdStack_5b8;
    local_620 = local_5c0;
    if (lStack_598 != 0) {
      piVar21 = (int *)(lStack_598 + 0x14);
      do {
        iVar14 = *piVar21;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
        if (bVar3) {
          *piVar21 = iVar14 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_5d0);
      }
    }
    lStack_598 = 0;
    local_5c0 = (double *)0x0;
    pdStack_5a8 = (double *)0x0;
    local_5b0 = (double *)0x0;
    pdStack_5b8 = (double *)0x0;
    if (0 < local_5d0._4_4_) {
      iVar14 = 0;
      puVar20 = local_590;
      do {
        *(undefined4 *)puVar20 = 0;
        iVar14 = iVar14 + 1;
        puVar20 = (undefined8 *)((long)puVar20 + 4);
      } while (iVar14 < local_5d0._4_4_);
    }
    if (local_588 != &local_580) {
      fastFree(local_588);
    }
    if (iVar9 == iVar13) goto LAB_002db65c;
LAB_002db1ec:
    pcVar28 = (code *)(&PTR_FUN_004f6130)[(int)uVar1];
  }
  else {
    pdVar18 = local_620;
    if (iVar9 != iVar13) goto LAB_002db1ec;
LAB_002db65c:
    if (uVar26 == 5) {
      dVar29 = DAT_002dbc28;
      if (iVar9 == 1) {
        if (((local_630 >> 0xe & 1) == 0) && (*local_5f0 != 1)) {
          dVar29 = (double)*(float *)local_620;
          if (local_5f0[1] == 1) {
            pfVar19 = (float *)((long)local_620 + *local_5e8);
          }
          else {
            iVar13 = 0;
            if (local_624 != 0) {
              iVar13 = 1 / local_624;
            }
            pfVar19 = (float *)((long)local_620 +
                               (long)iVar13 * *local_5e8 + (long)(1 - local_624 * iVar13) * 4);
          }
        }
        else {
          pfVar19 = (float *)((long)local_620 + 4);
          dVar29 = (double)*(float *)local_620;
        }
        dVar30 = (double)*pfVar19;
        goto LAB_002db8c8;
      }
    }
    else {
      dVar29 = DAT_002dbc20;
      if (iVar9 == 1) {
        if (((local_630 >> 0xe & 1) == 0) && (*local_5f0 != 1)) {
          dVar29 = *local_620;
          if (local_5f0[1] == 1) {
            pdVar18 = (double *)((long)local_620 + *local_5e8);
          }
          else {
            iVar13 = 0;
            if (local_624 != 0) {
              iVar13 = 1 / local_624;
            }
            pdVar18 = (double *)
                      ((long)local_620 +
                      (long)iVar13 * *local_5e8 + (long)(1 - local_624 * iVar13) * 8);
          }
        }
        else {
          pdVar18 = local_620 + 1;
          dVar29 = *local_620;
        }
        dVar30 = *pdVar18;
LAB_002db8c8:
        local_4a0 = 0;
        local_4b0 = 0x2010000;
        local_4a8 = (Mat *)&local_510;
        Mat::convertTo((Mat *)&local_570,(_OutputArray *)&local_4b0,local_510 & 0xfff,dVar29,dVar30)
        ;
        if ((local_450 != adStack_440) && (local_450 != (double *)0x0)) {
          operator_delete__(local_450);
        }
        if (local_4d8 != 0) {
          piVar21 = (int *)(local_4d8 + 0x14);
          do {
            iVar13 = *piVar21;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
            if (bVar3) {
              *piVar21 = iVar13 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar13 == 1) {
            Mat::deallocate((Mat *)&local_510);
          }
        }
        local_4d8 = 0;
        local_500 = 0;
        local_4e8 = 0;
        local_4f0 = 0;
        local_4f8 = 0;
        if (0 < local_50c) {
          iVar13 = 0;
          puVar22 = local_4d0;
          do {
            *puVar22 = 0;
            iVar13 = iVar13 + 1;
            puVar22 = puVar22 + 1;
          } while (iVar13 < local_50c);
        }
        if (local_4c8 != &local_4c0) {
          fastFree(local_4c8);
        }
        if (lStack_5f8 != 0) {
          piVar21 = (int *)(lStack_5f8 + 0x14);
          do {
            iVar13 = *piVar21;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
            if (bVar3) {
              *piVar21 = iVar13 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar13 == 1) {
            Mat::deallocate((Mat *)&local_630);
          }
        }
        lStack_5f8 = 0;
        local_620 = (double *)0x0;
        pdStack_608 = (double *)0x0;
        local_610 = (double *)0x0;
        pdStack_618 = (double *)0x0;
        if (0 < local_62c) {
          iVar13 = 0;
          piVar21 = local_5f0;
          do {
            *piVar21 = 0;
            iVar13 = iVar13 + 1;
            piVar21 = piVar21 + 1;
          } while (iVar13 < local_62c);
        }
        if (local_5e8 != &local_5e0) {
          fastFree(local_5e8);
        }
        if (local_538 != 0) {
          piVar21 = (int *)(local_538 + 0x14);
          do {
            iVar13 = *piVar21;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
            if (bVar3) {
              *piVar21 = iVar13 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar13 == 1) {
            Mat::deallocate((Mat *)&local_570);
          }
        }
        if (0 < local_56c) {
          iVar13 = 0;
          puVar22 = local_530;
          do {
            *puVar22 = 0;
            iVar13 = iVar13 + 1;
            puVar22 = puVar22 + 1;
          } while (iVar13 < local_56c);
        }
        goto LAB_002db3d4;
      }
    }
                    /* catch() { ... } // from try @ 002db538 with catch @ 002db670 */
    iVar14 = 0;
    pdVar24 = local_620;
    do {
      if (uVar26 == 5) {
        iVar25 = 0;
        pdVar17 = pdVar24;
        do {
          bVar12 = iVar14 == iVar25;
          bVar3 = bVar12 || ABS((double)*(float *)pdVar17) <= dVar29;
          iVar25 = iVar25 + 1;
          if (!bVar12 && ABS((double)*(float *)pdVar17) > dVar29) break;
          pdVar17 = (double *)((long)pdVar17 + 4);
        } while (iVar25 < iVar9);
      }
      else {
        iVar25 = 0;
        pdVar17 = pdVar24;
        do {
          bVar12 = iVar14 == iVar25;
          bVar3 = bVar12 || ABS(*pdVar17) <= dVar29;
          iVar25 = iVar25 + 1;
          if (!bVar12 && ABS(*pdVar17) > dVar29) break;
          pdVar17 = pdVar17 + 1;
        } while (iVar25 < iVar9);
      }
                    /* catch() { ... } // from try @ 002db4e4 with catch @ 002db6bc
                       catch() { ... } // from try @ 002db540 with catch @ 002db6bc */
      iVar14 = iVar14 + 1;
      pdVar24 = (double *)((long)pdVar24 + *local_5e8);
                    /* catch() { ... } // from try @ 002db4a4 with catch @ 002db6c4
                       catch() { ... } // from try @ 002db5bc with catch @ 002db6c4 */
      if (!bVar3) goto LAB_002db1ec;
    } while (iVar14 < iVar9);
    pcVar28 = (code *)(&PTR_FUN_004f6170)[(int)uVar1];
  }
  if (pcVar28 == (code *)0x0) {
    local_658 = pcVar28;
    local_650 = pcVar28;
    pcVar15 = (char *)String::allocate((String *)&local_658,9);
    cVar2 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar15 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar15[8] = cVar2;
    error(-0xd7,(String *)&local_658,
          "void cv::transform(cv::InputArray, cv::OutputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x7d3);
    String::deallocate((String *)&local_658);
  }
  local_5c0 = (double *)0x0;
  local_5d0 = (Mat *)&local_570;
  local_5c8 = (Mat *)&local_510;
  NAryMatIterator::NAryMatIterator
            ((NAryMatIterator *)&local_4b0,(Mat **)&local_5d0,(uchar **)&local_648,-1);
  uVar16 = local_488;
  for (uVar27 = 0; uVar27 < local_490; uVar27 = uVar27 + 1) {
    (*pcVar28)(CONCAT44(local_648._4_4_,(undefined4)local_648),local_640,pdVar18,uVar16 & 0xffffffff
               ,iVar13,iVar9);
    NAryMatIterator::operator++((NAryMatIterator *)&local_4b0);
  }
  if ((local_450 != adStack_440) && (local_450 != (double *)0x0)) {
    operator_delete__(local_450);
  }
  if (local_4d8 != 0) {
    piVar21 = (int *)(local_4d8 + 0x14);
    do {
      iVar13 = *piVar21;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar3) {
        *piVar21 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_510);
    }
  }
  local_4d8 = 0;
  local_500 = 0;
  local_4e8 = 0;
  local_4f0 = 0;
  local_4f8 = 0;
  if (0 < local_50c) {
                    /* try { // try from 002db2cc to 003db2cf has its CatchHandler @ 002db3bc */
    iVar13 = 0;
    puVar22 = local_4d0;
    do {
      *puVar22 = 0;
      iVar13 = iVar13 + 1;
                    /* try { // try from 002db2dc to 003db2df has its CatchHandler @ 002db3b4 */
      puVar22 = puVar22 + 1;
    } while (iVar13 < local_50c);
  }
                    /* try { // try from 002db2f0 to 003db2f3 has its CatchHandler @ 002daae0 */
  if (local_4c8 != &local_4c0) {
    fastFree(local_4c8);
  }
  if (lStack_5f8 != 0) {
    piVar21 = (int *)(lStack_5f8 + 0x14);
    do {
                    /* try { // try from 002db304 to 003db307 has its CatchHandler @ 002db340 */
      iVar13 = *piVar21;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar3) {
        *piVar21 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_630);
    }
  }
  lStack_5f8 = 0;
  local_620 = (double *)0x0;
  pdStack_608 = (double *)0x0;
  local_610 = (double *)0x0;
  pdStack_618 = (double *)0x0;
                    /* try { // try from 002db338 to 003db33b has its CatchHandler @ 002db3c4 */
  if (0 < local_62c) {
                    /* catch() { ... } // from try @ 002dab48 with catch @ 002db340
                       catch() { ... } // from try @ 002dad10 with catch @ 002db340
                       catch() { ... } // from try @ 002db304 with catch @ 002db340 */
    iVar13 = 0;
    piVar21 = local_5f0;
    do {
      *piVar21 = 0;
      iVar13 = iVar13 + 1;
      piVar21 = piVar21 + 1;
    } while (iVar13 < local_62c);
  }
                    /* try { // try from 002db364 to 003db367 has its CatchHandler @ 002daae0 */
  if (local_5e8 != &local_5e0) {
                    /* catch() { ... } // from try @ 002dadcc with catch @ 002db368 */
    fastFree(local_5e8);
  }
  if (local_538 != 0) {
    piVar21 = (int *)(local_538 + 0x14);
    do {
      iVar13 = *piVar21;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar21,0x10);
      if (bVar3) {
        *piVar21 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_570);
    }
  }
                    /* catch() { ... } // from try @ 002daba8 with catch @ 002db3b4
                       catch() { ... } // from try @ 002dacf4 with catch @ 002db3b4
                       catch() { ... } // from try @ 002db2dc with catch @ 002db3b4 */
  if (0 < local_56c) {
                    /* catch() { ... } // from try @ 002dac84 with catch @ 002db3bc
                       catch() { ... } // from try @ 002dad80 with catch @ 002db3bc
                       catch() { ... } // from try @ 002dadd4 with catch @ 002db3bc
                       catch() { ... } // from try @ 002daed4 with catch @ 002db3bc
                       catch() { ... } // from try @ 002db2cc with catch @ 002db3bc */
    iVar13 = 0;
    puVar22 = local_530;
    do {
      *puVar22 = 0;
                    /* catch() { ... } // from try @ 002dae4c with catch @ 002db3c4
                       catch() { ... } // from try @ 002daf58 with catch @ 002db3c4
                       catch() { ... } // from try @ 002db338 with catch @ 002db3c4 */
      iVar13 = iVar13 + 1;
      puVar22 = puVar22 + 1;
    } while (iVar13 < local_56c);
  }
LAB_002db3d4:
  local_538 = 0;
  local_548 = 0;
  local_550 = 0;
  local_558 = 0;
  local_560 = 0;
  if (local_528 != &local_520) {
    fastFree(local_528);
  }
                    /* catch() { ... } // from try @ 002dacc8 with catch @ 002db3ec */
  return;
}


==================================================================

### FUNC 002dbc30 (2332 bytes) name=perspectiveTransform

/* cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&)
    */

void cv::perspectiveTransform(_InputArray *param_1,_OutputArray *param_2,_InputArray *param_3)

{
  uint uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined1 *puVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined1 *puVar11;
  long *plVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  char *pcVar16;
  ulong uVar17;
  int *piVar18;
  undefined4 *puVar19;
  Mat *pMVar20;
  ulong uVar21;
  code *pcVar22;
  undefined8 local_608;
  undefined8 local_600;
  uchar *local_5f8;
  undefined8 local_5f0;
  Mat *local_5e8;
  Mat *local_5e0;
  undefined8 local_5d8;
  uint local_5d0;
  int local_5cc;
  int local_5c8;
  uint local_5c4;
  undefined1 *local_5c0;
  undefined1 *puStack_5b8;
  undefined1 *local_5b0;
  undefined1 *puStack_5a8;
  undefined8 local_5a0;
  long lStack_598;
  int *local_590;
  long *local_588;
  long local_580;
  long local_578;
  uint local_570;
  int local_56c;
  int local_568;
  uint local_564;
  undefined1 *local_560;
  undefined1 *puStack_558;
  undefined1 *local_550;
  undefined1 *puStack_548;
  undefined8 local_540;
  long lStack_538;
  int *local_530;
  long *local_528;
  long local_520;
  undefined8 local_518;
  uint local_510;
  int local_50c;
  undefined4 local_508;
  undefined4 local_504;
  undefined8 local_500;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  long local_4d8;
  undefined4 *local_4d0;
  undefined8 *local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined4 local_4b0;
  int local_4ac;
  undefined4 local_4a8;
  undefined4 local_4a4;
  undefined8 local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  undefined8 local_480;
  long local_478;
  undefined4 *local_470;
  undefined8 *local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined8 local_450;
  ulong local_448;
  undefined1 auStack_440 [1088];
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar20 = *(Mat **)(param_1 + 8);
    local_4d0 = &local_508;
    local_4c8 = &local_4c0;
    local_510 = *(uint *)pMVar20;
    local_50c = *(int *)(pMVar20 + 4);
    local_508 = *(undefined4 *)(pMVar20 + 8);
    local_504 = *(undefined4 *)(pMVar20 + 0xc);
    local_500 = *(undefined8 *)(pMVar20 + 0x10);
    local_4f8 = *(undefined8 *)(pMVar20 + 0x18);
    local_4f0 = *(undefined8 *)(pMVar20 + 0x20);
    local_4e8 = *(undefined8 *)(pMVar20 + 0x28);
    local_4e0 = *(undefined8 *)(pMVar20 + 0x30);
    local_4d8 = *(long *)(pMVar20 + 0x38);
    local_4b8 = 0;
    local_4c0 = 0;
    if (local_4d8 != 0) {
      piVar18 = (int *)(local_4d8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar4) {
          *piVar18 = *piVar18 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      local_4c0 = **(undefined8 **)(pMVar20 + 0x48);
      local_4b8 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    }
    else {
      local_50c = 0;
      Mat::copySize((Mat *)&local_510,pMVar20);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar13 = _InputArray::kind(param_3);
  if (iVar13 == 0x10000) {
    pMVar20 = *(Mat **)(param_3 + 8);
    local_590 = &local_5c8;
    local_588 = &local_580;
    local_5d0 = *(uint *)pMVar20;
    local_5cc = *(int *)(pMVar20 + 4);
    local_5c8 = *(int *)(pMVar20 + 8);
    local_5c4 = *(uint *)(pMVar20 + 0xc);
    local_5c0 = *(undefined1 **)(pMVar20 + 0x10);
    puStack_5b8 = *(undefined1 **)(pMVar20 + 0x18);
    local_5b0 = *(undefined1 **)(pMVar20 + 0x20);
    puStack_5a8 = *(undefined1 **)(pMVar20 + 0x28);
    local_5a0 = *(undefined8 *)(pMVar20 + 0x30);
    lStack_598 = *(long *)(pMVar20 + 0x38);
    local_578 = 0;
    local_580 = 0;
    if (lStack_598 != 0) {
      piVar18 = (int *)(lStack_598 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar4) {
          *piVar18 = *piVar18 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      local_580 = **(long **)(pMVar20 + 0x48);
      local_578 = (*(long **)(pMVar20 + 0x48))[1];
    }
    else {
      local_5cc = 0;
      Mat::copySize((Mat *)&local_5d0,pMVar20);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  iVar15 = local_5c8;
  uVar5 = local_510 >> 3 & 0x1ff;
  uVar1 = uVar5 + 2;
  uVar2 = local_510 & 7;
  iVar13 = local_5c8 + -1;
  if (uVar1 != local_5c4) {
    local_608 = 0;
    local_600 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_608,0x11);
    uVar8 = s_scn___1____m_cols_004690d8._8_8_;
    uVar7 = s_scn___1____m_cols_004690d8._0_8_;
    pcVar16[0x10] = s_scn___1____m_cols_004690d8[0x10];
    *(undefined8 *)pcVar16 = uVar7;
    *(undefined8 *)(pcVar16 + 8) = uVar8;
    error(-0xd7,(String *)&local_608,
          "void cv::perspectiveTransform(cv::InputArray, cv::OutputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x84d);
    String::deallocate((String *)&local_608);
  }
  if (1 < uVar2 - 5) {
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_450,0x22);
    uVar10 = s_depth____CV_8S____depth____CV_16_0046f988._80_8_;
    uVar9 = s_depth____CV_8S____depth____CV_16_0046f988._72_8_;
    uVar8 = s_depth____CV_8S____depth____CV_16_0046f988._64_8_;
    uVar7 = s_depth____CV_8S____depth____CV_16_0046f988._56_8_;
    *(undefined2 *)(pcVar16 + 0x20) = s_depth____CV_8S____depth____CV_16_0046f988._88_2_;
    *(undefined8 *)pcVar16 = uVar7;
    *(undefined8 *)(pcVar16 + 8) = uVar8;
    *(undefined8 *)(pcVar16 + 0x10) = uVar9;
    *(undefined8 *)(pcVar16 + 0x18) = uVar10;
    error(-0xd7,(String *)&local_450,
          "void cv::perspectiveTransform(cv::InputArray, cv::OutputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x84e);
    String::deallocate((String *)&local_450);
  }
  local_450 = (undefined1 *)CONCAT44(*local_4d0,local_4d0[1]);
  _OutputArray::create(param_2,&local_450,uVar2 + (iVar15 + -2) * 8,0xffffffff,0,0);
  iVar14 = _InputArray::kind((_InputArray *)param_2);
  if (iVar14 == 0x10000) {
    pMVar20 = *(Mat **)(param_2 + 8);
    local_470 = &local_4a8;
    local_468 = &local_460;
    local_4b0 = *(undefined4 *)pMVar20;
    local_4ac = *(int *)(pMVar20 + 4);
    local_4a8 = *(undefined4 *)(pMVar20 + 8);
    local_4a4 = *(undefined4 *)(pMVar20 + 0xc);
    local_4a0 = *(undefined8 *)(pMVar20 + 0x10);
    local_498 = *(undefined8 *)(pMVar20 + 0x18);
    local_490 = *(undefined8 *)(pMVar20 + 0x20);
    local_488 = *(undefined8 *)(pMVar20 + 0x28);
    local_480 = *(undefined8 *)(pMVar20 + 0x30);
    local_478 = *(long *)(pMVar20 + 0x38);
    local_458 = 0;
    local_460 = 0;
    if (local_478 != 0) {
      piVar18 = (int *)(local_478 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar4) {
          *piVar18 = *piVar18 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar20 + 4) < 3) {
      local_460 = **(undefined8 **)(pMVar20 + 0x48);
      local_458 = (*(undefined8 **)(pMVar20 + 0x48))[1];
    }
    else {
      local_4ac = 0;
      Mat::copySize((Mat *)&local_4b0,pMVar20);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_450 = auStack_440;
  local_448 = 0x88;
  if (((local_5d0 >> 0xe & 1) != 0) && (puVar6 = local_5c0, (local_5d0 & 0xfff) == 6))
  goto joined_r0x002dc064;
  uVar21 = (ulong)(int)(iVar15 * uVar1);
  if (0x88 < uVar21) {
    uVar17 = uVar21 << 3;
    if (0xfe0000000000000 < uVar21) {
      uVar17 = 0xffffffffffffffff;
    }
    local_450 = operator_new__(uVar17);
  }
  local_520 = (ulong)uVar1 * 8;
  local_550 = local_450 + local_520 * iVar15;
  local_530 = &local_568;
  local_528 = &local_520;
  local_518 = 8;
  local_5d8 = 0;
  local_5e8 = (Mat *)CONCAT44(local_5e8._4_4_,0x2010000);
  local_56c = 2;
  local_568 = iVar15;
  local_540 = 0;
  lStack_538 = 0;
  local_570 = 0x42ff4006;
  local_5e0 = (Mat *)&local_570;
  local_564 = uVar1;
  local_560 = local_450;
  puStack_558 = local_450;
  puStack_548 = local_550;
  local_448 = uVar21;
  Mat::convertTo((Mat *)&local_5d0,(_OutputArray *)&local_5e8,6,1.0,0.0);
  if (lStack_538 != 0) {
    piVar18 = (int *)(lStack_538 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = *piVar18 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_598 != 0) {
    piVar18 = (int *)(lStack_598 + 0x14);
    do {
      iVar15 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_5d0);
    }
  }
  plVar12 = local_528;
  lStack_598 = 0;
  local_5c0 = (undefined1 *)0x0;
  puStack_5a8 = (undefined1 *)0x0;
  local_5b0 = (undefined1 *)0x0;
  puStack_5b8 = (undefined1 *)0x0;
  if (local_5cc < 1) {
LAB_002dbf74:
    local_5d0 = local_570;
    if (2 < local_56c) goto LAB_002dbf80;
    local_5c4 = local_564;
    local_5c8 = local_568;
    local_5cc = local_56c;
    *local_588 = *local_528;
    local_588[1] = plVar12[1];
  }
  else {
    iVar15 = 0;
    piVar18 = local_590;
    do {
      *piVar18 = 0;
      iVar15 = iVar15 + 1;
      piVar18 = piVar18 + 1;
    } while (iVar15 < local_5cc);
    if (local_5cc < 3) goto LAB_002dbf74;
LAB_002dbf80:
    local_5d0 = local_570;
    Mat::copySize((Mat *)&local_5d0,(Mat *)&local_570);
  }
  puStack_5a8 = puStack_548;
  local_5b0 = local_550;
  lStack_598 = lStack_538;
  local_5a0 = local_540;
  puStack_5b8 = puStack_558;
  local_5c0 = local_560;
  if (lStack_538 != 0) {
    piVar18 = (int *)(lStack_538 + 0x14);
    do {
      iVar15 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_570);
    }
  }
  lStack_538 = 0;
  local_560 = (undefined1 *)0x0;
  puStack_548 = (undefined1 *)0x0;
  local_550 = (undefined1 *)0x0;
  puStack_558 = (undefined1 *)0x0;
  if (0 < local_56c) {
    iVar15 = 0;
    piVar18 = local_530;
    do {
      *piVar18 = 0;
      iVar15 = iVar15 + 1;
      piVar18 = piVar18 + 1;
    } while (iVar15 < local_56c);
  }
  if (local_528 != &local_520) {
    fastFree(local_528);
  }
  puVar6 = auStack_440;
joined_r0x002dc064:
  if (uVar2 == 5) {
    pcVar22 = FUN_002c5e88;
  }
  else {
    pcVar22 = FUN_002c62f0;
  }
  local_5d8 = 0;
  local_5e8 = (Mat *)&local_510;
  local_5e0 = (Mat *)&local_4b0;
  NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_570,&local_5e8,&local_5f8,-1);
  puVar11 = puStack_548;
  for (uVar21 = 0; uVar21 < local_550; uVar21 = uVar21 + 1) {
    (*pcVar22)(local_5f8,local_5f0,puVar6,(ulong)puVar11 & 0xffffffff,uVar5 + 1,iVar13);
    NAryMatIterator::operator++((NAryMatIterator *)&local_570);
  }
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  if (local_478 != 0) {
    piVar18 = (int *)(local_478 + 0x14);
    do {
      iVar13 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_4b0);
    }
  }
  local_478 = 0;
  local_4a0 = 0;
  local_488 = 0;
  local_490 = 0;
  local_498 = 0;
  if (0 < local_4ac) {
    iVar13 = 0;
    puVar19 = local_470;
    do {
      *puVar19 = 0;
      iVar13 = iVar13 + 1;
      puVar19 = puVar19 + 1;
    } while (iVar13 < local_4ac);
  }
  if (local_468 != &local_460) {
    fastFree(local_468);
  }
  if (lStack_598 != 0) {
    piVar18 = (int *)(lStack_598 + 0x14);
    do {
      iVar13 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_5d0);
    }
  }
  lStack_598 = 0;
  local_5c0 = (undefined1 *)0x0;
  puStack_5a8 = (undefined1 *)0x0;
  local_5b0 = (undefined1 *)0x0;
  puStack_5b8 = (undefined1 *)0x0;
  if (0 < local_5cc) {
    iVar13 = 0;
    piVar18 = local_590;
    do {
      *piVar18 = 0;
      iVar13 = iVar13 + 1;
      piVar18 = piVar18 + 1;
    } while (iVar13 < local_5cc);
  }
  if (local_588 != &local_580) {
    fastFree(local_588);
  }
  if (local_4d8 != 0) {
    piVar18 = (int *)(local_4d8 + 0x14);
    do {
      iVar13 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar13 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_510);
    }
  }
  local_4d8 = 0;
  local_500 = 0;
  local_4e8 = 0;
  local_4f0 = 0;
  local_4f8 = 0;
  if (0 < local_50c) {
    iVar13 = 0;
    puVar19 = local_4d0;
    do {
      *puVar19 = 0;
      iVar13 = iVar13 + 1;
      puVar19 = puVar19 + 1;
    } while (iVar13 < local_50c);
  }
  if (local_4c8 != &local_4c0) {
    fastFree(local_4c8);
  }
  return;
}


==================================================================

### FUNC 002dc618 (2304 bytes) name=scaleAdd

/* WARNING: Heritage AFTER dead removal. Example location: s0xffffffffffffff44 : 0x002dce2c */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::scaleAdd(cv::_InputArray const&, double, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::scaleAdd(_InputArray *param_1,double param_2,_InputArray *param_3,_OutputArray *param_4)

{
  uint uVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  bool bVar6;
  uint uVar7;
  int iVar8;
  ulong uVar9;
  char *pcVar10;
  int *piVar11;
  undefined8 *puVar12;
  Mat *pMVar13;
  int *piVar14;
  long lVar15;
  int iVar16;
  uint uVar17;
  double *pdVar18;
  code *pcVar19;
  double local_1b8;
  float local_1ac;
  undefined8 local_1a8;
  undefined8 local_1a0;
  uchar *local_198;
  undefined8 local_190;
  undefined8 local_188;
  Mat *local_180;
  Mat *local_178;
  Mat *local_170;
  undefined8 uStack_168;
  NAryMatIterator aNStack_160 [32];
  ulong local_140;
  long local_138;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  pdVar18 = &local_1b8;
  local_1b8 = param_2;
  uVar9 = _InputArray::type(param_1,-1);
  uVar17 = (uint)uVar9;
  uVar1 = uVar17 & 7;
  uVar7 = _InputArray::type(param_3,-1);
  if (uVar17 != uVar7) {
    local_60 = 0;
    local_58 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_60,0x14);
    uVar4 = s_type_____src2_type___004690f0._8_8_;
    uVar3 = s_type_____src2_type___004690f0._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_type_____src2_type___004690f0._16_4_;
    *(undefined8 *)pcVar10 = uVar3;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    error(-0xd7,(String *)&local_60,
          "void cv::scaleAdd(cv::InputArray, double, cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x90e);
    String::deallocate((String *)&local_60);
  }
  if (uVar1 < 5) {
    addWeighted(param_1,local_1b8,param_3,1.0,0.0,param_4,uVar1);
    return;
  }
  iVar8 = _InputArray::kind(param_1);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar13;
    local_11c = *(int *)(pMVar13 + 4);
    local_118 = *(int *)(pMVar13 + 8);
    local_114 = *(int *)(pMVar13 + 0xc);
    local_110 = *(undefined8 *)(pMVar13 + 0x10);
    local_108 = *(undefined8 *)(pMVar13 + 0x18);
    local_100 = *(undefined8 *)(pMVar13 + 0x20);
    local_f8 = *(undefined8 *)(pMVar13 + 0x28);
    local_f0 = *(undefined8 *)(pMVar13 + 0x30);
    local_e8 = *(long *)(pMVar13 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar11 = (int *)(local_e8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = *piVar11 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar13 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar8 = _InputArray::kind(param_3);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_3 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar13;
    iVar8 = *(int *)(pMVar13 + 4);
    local_b8 = *(int *)(pMVar13 + 8);
    local_b4 = *(undefined4 *)(pMVar13 + 0xc);
    local_b0 = *(undefined8 *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar11 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = *piVar11 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (2 < *(int *)(pMVar13 + 4)) {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar13);
      goto LAB_002dc758;
    }
    local_70 = **(undefined8 **)(pMVar13 + 0x48);
    local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    iVar16 = local_e0[-1];
    bVar6 = iVar16 == local_bc;
    local_bc = iVar8;
    if (bVar6) goto LAB_002dce38;
  }
  else {
    _InputArray::getMat_((int)param_3);
LAB_002dc758:
    iVar16 = local_e0[-1];
    if (iVar16 == local_80[-1]) {
LAB_002dce38:
      if (iVar16 == 2) {
        if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_002dc7d8;
      }
      else {
        if (iVar16 < 1) goto LAB_002dc7d8;
        if (*local_e0 == *local_80) {
          piVar14 = local_80;
          piVar11 = local_e0;
          do {
            piVar11 = piVar11 + 1;
            if (piVar14 == local_80 + (iVar16 - 1)) goto LAB_002dc7d8;
            piVar14 = piVar14 + 1;
          } while (*piVar11 == *piVar14);
        }
      }
    }
  }
  local_1a8 = 0;
  local_1a0 = 0;
  pcVar10 = (char *)String::allocate((String *)&local_1a8,0x16);
  uVar5 = s_src1_size____src2_size_00469108._20_2_;
  uVar4 = s_src1_size____src2_size_00469108._8_8_;
  uVar3 = s_src1_size____src2_size_00469108._0_8_;
  *(undefined4 *)(pcVar10 + 0x10) = s_src1_size____src2_size_00469108._16_4_;
  *(undefined2 *)(pcVar10 + 0x14) = uVar5;
  *(undefined8 *)pcVar10 = uVar3;
  *(undefined8 *)(pcVar10 + 8) = uVar4;
  error(-0xd7,(String *)&local_1a8,
        "void cv::scaleAdd(cv::InputArray, double, cv::InputArray, cv::OutputArray)",
        "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x91a);
  String::deallocate((String *)&local_1a8);
LAB_002dc7d8:
  _OutputArray::create(param_4,local_11c,local_e0,uVar17,-1,false,0);
  iVar8 = _InputArray::kind((_InputArray *)param_4);
  if (iVar8 == 0x10000) {
    pMVar13 = *(Mat **)(param_4 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar7 = *(uint *)pMVar13;
    local_50 = *(undefined8 *)(pMVar13 + 0x10);
    local_60 = *(ulong *)pMVar13;
    local_58 = *(undefined8 *)(pMVar13 + 8);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar11 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = *piVar11 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar13 + 0x48);
      local_8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar7;
      Mat::copySize((Mat *)&local_60,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  local_1ac = (float)local_1b8;
  if (uVar1 == 5) {
    pdVar18 = (double *)&local_1ac;
    pcVar19 = FUN_002c8470;
  }
  else {
    pcVar19 = FUN_002c3160;
  }
  iVar8 = ((uint)((uVar9 & 0xffffffff) >> 3) & 0x1ff) + 1;
  if ((((local_120 >> 0xe & 1) == 0) || ((local_c0 >> 0xe & 1) == 0)) ||
     (((uint)local_60 >> 0xe & 1) == 0)) {
    uStack_168 = 0;
    local_180 = (Mat *)&local_120;
    local_178 = (Mat *)&local_c0;
    local_170 = (Mat *)&local_60;
    NAryMatIterator::NAryMatIterator(aNStack_160,&local_180,&local_198,-1);
    uVar9 = 0;
    if (local_140 != 0) {
      do {
        (*pcVar19)(local_198,local_190,local_188,iVar8 * local_138 & 0xffffffff,pdVar18);
        uVar9 = uVar9 + 1;
        NAryMatIterator::operator++(aNStack_160);
      } while (uVar9 < local_140);
    }
    if (local_28 != 0) {
      piVar11 = (int *)(local_28 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar8 = 0;
      puVar12 = local_20;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (local_88 != 0) {
      piVar11 = (int *)(local_88 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_bc) {
      iVar8 = 0;
      piVar11 = local_80;
      do {
        *piVar11 = 0;
        iVar8 = iVar8 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar8 < local_bc);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar11 = (int *)(local_e8 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    if (0 < local_11c) {
      iVar8 = 0;
      piVar11 = local_e0;
      do {
        *piVar11 = 0;
        iVar8 = iVar8 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar8 < local_11c);
    }
  }
  else {
    if (local_11c < 3) {
      iVar16 = local_114 * local_118;
    }
    else {
      lVar15 = 0;
      iVar16 = 1;
      do {
        piVar11 = local_e0 + lVar15;
        lVar15 = lVar15 + 1;
        iVar16 = iVar16 * *piVar11;
      } while ((int)lVar15 < local_11c);
    }
    (*pcVar19)(local_110,local_b0,local_50,iVar8 * iVar16,pdVar18);
    if (local_28 != 0) {
      piVar11 = (int *)(local_28 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar8 = 0;
      puVar12 = local_20;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar8 = iVar8 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar8 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (local_88 != 0) {
      piVar11 = (int *)(local_88 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_bc) {
      iVar8 = 0;
      piVar11 = local_80;
      do {
        *piVar11 = 0;
        iVar8 = iVar8 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar8 < local_bc);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar11 = (int *)(local_e8 + 0x14);
      do {
        iVar8 = *piVar11;
        cVar2 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar6) {
          *piVar11 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    if (0 < local_11c) {
      iVar8 = 0;
      piVar11 = local_e0;
      do {
        *piVar11 = 0;
        iVar8 = iVar8 + 1;
        piVar11 = piVar11 + 1;
      } while (iVar8 < local_11c);
    }
  }
  local_e8 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  local_110 = 0;
  if (local_d8 == &local_d0) {
    return;
  }
  fastFree(local_d8);
  return;
}


==================================================================

### FUNC 002dcfac (3028 bytes) name=Mahalanobis

/* cv::Mahalanobis(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&) */

undefined1  [16] cv::Mahalanobis(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3)

{
  int iVar1;
  float *pfVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  long lVar8;
  long lVar9;
  int iVar10;
  uint uVar11;
  ulong uVar12;
  void *__dest;
  int *piVar13;
  double *pdVar14;
  double *pdVar15;
  long lVar16;
  Mat *pMVar17;
  double *pdVar18;
  float *pfVar19;
  double *pdVar20;
  double *pdVar21;
  uint uVar22;
  long lVar23;
  uint uVar24;
  long lVar25;
  undefined8 *puVar26;
  double *pdVar27;
  uint uVar28;
  double *pdVar29;
  undefined8 *puVar30;
  ulong uVar31;
  undefined8 uVar32;
  undefined1 auVar33 [16];
  undefined8 uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  double dVar37;
  double dVar38;
  undefined8 local_590;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  uint local_570;
  int local_56c;
  int local_568;
  undefined4 local_564;
  double *local_560;
  undefined8 local_558;
  undefined8 local_550;
  undefined8 local_548;
  undefined8 local_540;
  long local_538;
  int *local_530;
  ulong *local_528;
  ulong local_520;
  ulong local_518;
  uint local_510;
  int local_50c;
  int local_508;
  undefined4 local_504;
  double *local_500;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  long local_4d8;
  int *local_4d0;
  ulong *local_4c8;
  ulong local_4c0;
  ulong local_4b8;
  uint local_4b0;
  int local_4ac;
  int local_4a8;
  int local_4a4;
  long local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  undefined8 local_480;
  long local_478;
  int *local_470;
  ulong *local_468;
  ulong local_460;
  ulong local_458;
  double *local_450;
  ulong local_448;
  double adStack_440 [136];
  
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_1 + 8);
    local_530 = &local_568;
    local_528 = &local_520;
    local_570 = *(uint *)pMVar17;
    local_56c = *(int *)(pMVar17 + 4);
    local_568 = *(int *)(pMVar17 + 8);
    local_564 = *(undefined4 *)(pMVar17 + 0xc);
    local_560 = *(double **)(pMVar17 + 0x10);
    local_558 = *(undefined8 *)(pMVar17 + 0x18);
    local_550 = *(undefined8 *)(pMVar17 + 0x20);
    local_548 = *(undefined8 *)(pMVar17 + 0x28);
    local_540 = *(undefined8 *)(pMVar17 + 0x30);
    local_538 = *(long *)(pMVar17 + 0x38);
    local_518 = 0;
    local_520 = 0;
    if (local_538 != 0) {
      piVar13 = (int *)(local_538 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar7) {
          *piVar13 = *piVar13 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_520 = **(ulong **)(pMVar17 + 0x48);
      local_518 = (*(ulong **)(pMVar17 + 0x48))[1];
    }
    else {
      local_56c = 0;
      Mat::copySize((Mat *)&local_570,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar10 = _InputArray::kind(param_2);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_2 + 8);
    local_4d0 = &local_508;
    local_4c8 = &local_4c0;
    local_510 = *(uint *)pMVar17;
    local_50c = *(int *)(pMVar17 + 4);
    local_508 = *(int *)(pMVar17 + 8);
    local_504 = *(undefined4 *)(pMVar17 + 0xc);
    local_500 = *(double **)(pMVar17 + 0x10);
    local_4f8 = *(undefined8 *)(pMVar17 + 0x18);
    local_4f0 = *(undefined8 *)(pMVar17 + 0x20);
    local_4e8 = *(undefined8 *)(pMVar17 + 0x28);
    local_4e0 = *(undefined8 *)(pMVar17 + 0x30);
    local_4d8 = *(long *)(pMVar17 + 0x38);
    local_4b8 = 0;
    local_4c0 = 0;
    if (local_4d8 != 0) {
      piVar13 = (int *)(local_4d8 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar7) {
          *piVar13 = *piVar13 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_4c0 = **(ulong **)(pMVar17 + 0x48);
      local_4b8 = (*(ulong **)(pMVar17 + 0x48))[1];
    }
    else {
      local_50c = 0;
      Mat::copySize((Mat *)&local_510,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar10 = _InputArray::kind(param_3);
  if (iVar10 == 0x10000) {
    pMVar17 = *(Mat **)(param_3 + 8);
    local_470 = &local_4a8;
    local_468 = &local_460;
    local_4b0 = *(uint *)pMVar17;
    local_4ac = *(int *)(pMVar17 + 4);
    local_4a8 = *(int *)(pMVar17 + 8);
    local_4a4 = *(int *)(pMVar17 + 0xc);
    local_4a0 = *(long *)(pMVar17 + 0x10);
    local_498 = *(undefined8 *)(pMVar17 + 0x18);
    local_490 = *(undefined8 *)(pMVar17 + 0x20);
    local_488 = *(undefined8 *)(pMVar17 + 0x28);
    local_480 = *(undefined8 *)(pMVar17 + 0x30);
    local_478 = *(long *)(pMVar17 + 0x38);
    local_458 = 0;
    local_460 = 0;
    if (local_478 != 0) {
      piVar13 = (int *)(local_478 + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar7) {
          *piVar13 = *piVar13 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_460 = **(ulong **)(pMVar17 + 0x48);
      local_458 = (*(ulong **)(pMVar17 + 0x48))[1];
    }
    else {
      local_4ac = 0;
      Mat::copySize((Mat *)&local_4b0,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_450 = adStack_440;
  iVar10 = local_530[1];
  iVar4 = *local_530;
  uVar11 = local_570 & 0xfff;
  local_448 = 0x88;
  uVar3 = local_570 & 7;
  iVar5 = iVar10 * iVar4 + (local_570 >> 3 & 0x1ff) * iVar10 * iVar4;
  uVar31 = (ulong)iVar5;
  if (0x88 < uVar31) {
    uVar12 = uVar31 << 3;
    if (0xfe0000000000000 < uVar31) {
      uVar12 = 0xffffffffffffffff;
    }
    local_450 = operator_new__(uVar12);
  }
  local_448 = uVar31;
  if (((((uVar11 != (local_510 & 0xfff)) || (uVar11 != (local_4b0 & 0xfff))) ||
       (iVar10 != local_4d0[1])) || ((iVar4 != *local_4d0 || (local_4a8 != iVar5)))) ||
     (iVar5 != local_4a4)) {
    local_590 = 0;
    local_588 = 0;
    __dest = (void *)String::allocate((String *)&local_590,0x69);
    memcpy(__dest,
           "type == v2.type() && type == icovar.type() && sz == v2.size() && len == icovar.rows && len == icovar.cols"
           ,0x69);
    error(-0xd7,(String *)&local_590,
          "double cv::Mahalanobis(cv::InputArray, cv::InputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x9c1);
    String::deallocate((String *)&local_590);
  }
  uVar11 = iVar10 + (local_570 >> 3 & 0x1ff) * iVar10;
  if (((local_570 >> 0xe & 1) == 0) || ((local_510 >> 0xe & 1) == 0)) {
    if (uVar3 == 5) {
      iVar10 = iVar4 + -1;
      if (iVar4 != 0) goto LAB_002dd800;
      goto LAB_002dd9bc;
    }
    if (uVar3 == 6) {
      iVar10 = iVar4 + -1;
      if (iVar4 != 0) goto LAB_002dd390;
      goto LAB_002dd488;
    }
  }
  else {
    uVar11 = uVar11 * iVar4;
    if (uVar3 == 5) {
      iVar10 = 0;
LAB_002dd800:
      pdVar21 = local_450;
      pdVar20 = local_500;
      pdVar15 = local_560;
      do {
        if (0 < (int)uVar11) {
          uVar3 = (uint)((ulong)pdVar21 >> 3) & 1;
          if (uVar11 < uVar3) {
            uVar3 = uVar11;
          }
          if (uVar11 < 5) {
            uVar3 = uVar11;
          }
          uVar22 = uVar3;
          if (uVar3 != 0) {
            *pdVar21 = (double)(*(float *)pdVar15 - *(float *)pdVar20);
            if ((uVar3 != 1) &&
               (pdVar21[1] = (double)(*(float *)((long)pdVar15 + 4) - *(float *)((long)pdVar20 + 4))
               , uVar3 != 2)) {
              pdVar21[2] = (double)(*(float *)(pdVar15 + 1) - *(float *)(pdVar20 + 1));
              if (uVar3 == 4) {
                pdVar21[3] = (double)(*(float *)((long)pdVar15 + 0xc) -
                                     *(float *)((long)pdVar20 + 0xc));
              }
              else {
                uVar22 = 3;
              }
            }
            if (uVar11 == uVar3) goto LAB_002dd96c;
          }
          uVar24 = ((uVar11 - uVar3) - 4 >> 2) + 1;
          iVar4 = uVar24 * 4;
          if (2 < (uVar11 - 1) - uVar3) {
            uVar28 = 0;
            lVar23 = (ulong)uVar3 * 4;
            pdVar18 = pdVar21 + uVar3;
            puVar26 = (undefined8 *)((long)pdVar15 + lVar23);
            puVar30 = (undefined8 *)((long)pdVar20 + lVar23);
            do {
              uVar36 = puVar30[1];
              uVar35 = *puVar30;
              uVar34 = puVar26[1];
              uVar32 = *puVar26;
              uVar28 = uVar28 + 1;
              pdVar18[1] = (double)((float)((ulong)uVar32 >> 0x20) - (float)((ulong)uVar35 >> 0x20))
              ;
              *pdVar18 = (double)((float)uVar32 - (float)uVar35);
              pdVar18[3] = (double)((float)((ulong)uVar34 >> 0x20) - (float)((ulong)uVar36 >> 0x20))
              ;
              pdVar18[2] = (double)((float)uVar34 - (float)uVar36);
              pdVar18 = pdVar18 + 4;
              puVar26 = puVar26 + 2;
              puVar30 = puVar30 + 2;
            } while (uVar28 < uVar24);
            uVar22 = uVar22 + iVar4;
            if (iVar4 == uVar11 - uVar3) goto LAB_002dd96c;
          }
          iVar4 = uVar22 + 1;
          lVar23 = (long)(int)uVar22 * 4;
          pdVar21[(int)uVar22] =
               (double)(*(float *)((long)pdVar15 + lVar23) - *(float *)((long)pdVar20 + lVar23));
          if (iVar4 < (int)uVar11) {
            iVar1 = uVar22 + 2;
            lVar23 = (long)iVar4 * 4;
            pdVar21[iVar4] =
                 (double)(*(float *)((long)pdVar15 + lVar23) - *(float *)((long)pdVar20 + lVar23));
            if (iVar1 < (int)uVar11) {
              lVar23 = (long)iVar1 * 4;
              pdVar21[iVar1] =
                   (double)(*(float *)((long)pdVar15 + lVar23) - *(float *)((long)pdVar20 + lVar23))
              ;
            }
          }
        }
LAB_002dd96c:
        iVar10 = iVar10 + -1;
        pdVar15 = (double *)((long)pdVar15 + (local_520 & 0xfffffffffffffffc));
        pdVar20 = (double *)((long)pdVar20 + (local_4c0 & 0xfffffffffffffffc));
        pdVar21 = (double *)
                  ((long)pdVar21 +
                  (-(ulong)(uVar11 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar11 << 3));
      } while (iVar10 != -1);
LAB_002dd9bc:
      if (0 < iVar5) {
        iVar1 = iVar5 + -3;
        uVar11 = iVar5 - 4U >> 2;
        iVar4 = (uVar11 + 1) * 4;
        lVar23 = 0;
        iVar10 = iVar4;
        if (iVar1 < 1) {
          iVar10 = 0;
        }
        dVar37 = 0.0;
        lVar25 = local_4a0;
        if (iVar1 < 1) goto LAB_002ddabc;
        do {
          dVar38 = 0.0;
          pfVar19 = (float *)(lVar25 + 4);
          pdVar15 = local_450;
          do {
            pfVar2 = pfVar19 + 4;
            dVar38 = dVar38 + (double)*pfVar19 * pdVar15[1] + (double)pfVar19[-1] * *pdVar15 +
                              (double)pfVar19[1] * pdVar15[2] + (double)pfVar19[2] * pdVar15[3];
            pfVar19 = pfVar2;
            pdVar15 = pdVar15 + 4;
          } while (pfVar2 != (float *)(lVar25 + (ulong)uVar11 * 0x10 + 0x14));
          if (iVar5 <= iVar4) goto LAB_002dda9c;
          while( true ) {
            lVar16 = 0;
            do {
              lVar8 = lVar16 * 4;
              lVar9 = iVar10 + lVar16;
              lVar16 = lVar16 + 1;
              dVar38 = dVar38 + (double)*(float *)(lVar25 + (long)iVar10 * 4 + lVar8) *
                                local_450[lVar9];
            } while (iVar10 + (int)lVar16 < iVar5);
LAB_002dda9c:
            pdVar15 = local_450 + lVar23;
            lVar23 = lVar23 + 1;
            lVar25 = lVar25 + (local_460 & 0xfffffffffffffffc);
            dVar37 = dVar37 + dVar38 * *pdVar15;
            if (iVar5 <= (int)lVar23) goto LAB_002dd170;
            if (0 < iVar1) break;
LAB_002ddabc:
            dVar38 = 0.0;
          }
        } while( true );
      }
      goto LAB_002dd16c;
    }
    if (uVar3 == 6) {
      iVar10 = 0;
LAB_002dd390:
      pdVar15 = local_450 + 2;
      pdVar20 = local_560;
      pdVar21 = local_500;
      do {
        pdVar18 = pdVar15 + -2;
        if (0 < (int)uVar11) {
          if ((pdVar18 < pdVar20 + 2 && pdVar20 < pdVar15 ||
               pdVar18 < pdVar21 + 2 && pdVar21 < pdVar15) || (uVar11 < 9)) {
            lVar23 = 0;
            do {
              pdVar18[lVar23] = pdVar20[lVar23] - pdVar21[lVar23];
              lVar23 = lVar23 + 1;
            } while ((int)lVar23 < (int)uVar11);
          }
          else {
            uVar3 = (uint)((ulong)pdVar20 >> 3) & 1;
            if (uVar11 < uVar3) {
              uVar3 = uVar11;
            }
            if (uVar3 != 0) {
              pdVar15[-2] = *pdVar20 - *pdVar21;
            }
            uVar22 = ((uVar11 - uVar3) - 2 >> 1) + 1;
            uVar24 = 0;
            iVar4 = uVar22 * 2;
            pdVar14 = pdVar20 + uVar3;
            pdVar27 = pdVar21 + uVar3;
            pdVar29 = pdVar18 + uVar3;
            do {
              dVar38 = *pdVar27;
              uVar24 = uVar24 + 1;
              dVar37 = *pdVar14;
              pdVar29[1] = pdVar14[1] - pdVar27[1];
              *pdVar29 = dVar37 - dVar38;
              pdVar14 = pdVar14 + 2;
              pdVar27 = pdVar27 + 2;
              pdVar29 = pdVar29 + 2;
            } while (uVar24 < uVar22);
            uVar22 = iVar4 + (uint)(uVar3 != 0);
            if (iVar4 != uVar11 - uVar3) {
              uVar31 = -(ulong)(uVar22 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar22 << 3;
              *(double *)((long)pdVar18 + uVar31) =
                   *(double *)((long)pdVar20 + uVar31) - *(double *)((long)pdVar21 + uVar31);
            }
          }
        }
        iVar10 = iVar10 + -1;
        pdVar20 = (double *)((long)pdVar20 + (local_520 & 0xfffffffffffffff8));
        pdVar21 = (double *)((long)pdVar21 + (local_4c0 & 0xfffffffffffffff8));
        pdVar15 = pdVar15 + (int)uVar11;
      } while (iVar10 != -1);
LAB_002dd488:
      if (0 < iVar5) {
        iVar10 = iVar5 + -3;
        uVar22 = iVar5 - 4U >> 2;
        uVar3 = (uVar22 + 1) * 4;
        uVar11 = uVar3;
        if (iVar10 < 1) {
          uVar11 = 0;
        }
        uVar31 = -(ulong)(uVar11 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar11 << 3;
        lVar23 = 0;
        dVar37 = 0.0;
        lVar25 = local_4a0;
        if (iVar10 < 1) goto LAB_002dd574;
        do {
          dVar38 = 0.0;
          pdVar15 = (double *)(lVar25 + 8);
          pdVar20 = local_450;
          do {
            pdVar21 = pdVar15 + 4;
            dVar38 = dVar38 + pdVar20[1] * *pdVar15 + pdVar15[-1] * *pdVar20 +
                              pdVar15[1] * pdVar20[2] + pdVar15[2] * pdVar20[3];
            pdVar15 = pdVar21;
            pdVar20 = pdVar20 + 4;
          } while (pdVar21 != (double *)(lVar25 + (ulong)uVar22 * 0x20 + 0x28));
          if (iVar5 <= (int)uVar3) goto LAB_002dd554;
          while( true ) {
            lVar16 = 0;
            do {
              lVar8 = lVar16 * 8;
              lVar9 = lVar16 * 8;
              lVar16 = lVar16 + 1;
              dVar38 = dVar38 + *(double *)(lVar25 + uVar31 + lVar9) *
                                *(double *)((long)local_450 + lVar8 + uVar31);
            } while ((int)(uVar11 + (int)lVar16) < iVar5);
LAB_002dd554:
            pdVar15 = local_450 + lVar23;
            lVar23 = lVar23 + 1;
            lVar25 = lVar25 + (local_460 & 0xfffffffffffffff8);
            dVar37 = dVar37 + dVar38 * *pdVar15;
            if (iVar5 <= (int)lVar23) goto LAB_002dd170;
            if (0 < iVar10) break;
LAB_002dd574:
            dVar38 = 0.0;
          }
        } while( true );
      }
      goto LAB_002dd16c;
    }
  }
  local_580 = 0;
  local_578 = 0;
  String::allocate((String *)&local_580,0);
  error(-0xd2,(String *)&local_580,
        "double cv::Mahalanobis(cv::InputArray, cv::InputArray, cv::InputArray)",
        "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xa09);
  String::deallocate((String *)&local_580);
LAB_002dd16c:
  dVar37 = 0.0;
LAB_002dd170:
  dVar38 = SQRT(dVar37);
  if (NAN(dVar38)) {
    dVar38 = ::sqrt(dVar37);
  }
  if ((local_450 != adStack_440) && (local_450 != (double *)0x0)) {
    operator_delete__(local_450);
  }
  if (local_478 != 0) {
    piVar13 = (int *)(local_478 + 0x14);
    do {
      iVar10 = *piVar13;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar7) {
        *piVar13 = iVar10 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_4b0);
    }
  }
  local_478 = 0;
  local_4a0 = 0;
  local_488 = 0;
  local_490 = 0;
  local_498 = 0;
  if (0 < local_4ac) {
    iVar10 = 0;
    piVar13 = local_470;
    do {
      *piVar13 = 0;
      iVar10 = iVar10 + 1;
      piVar13 = piVar13 + 1;
    } while (iVar10 < local_4ac);
  }
  if (local_468 != &local_460) {
    fastFree(local_468);
  }
  if (local_4d8 != 0) {
    piVar13 = (int *)(local_4d8 + 0x14);
    do {
      iVar10 = *piVar13;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar7) {
        *piVar13 = iVar10 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_510);
    }
  }
  local_4d8 = 0;
  local_500 = (double *)0x0;
  local_4e8 = 0;
  local_4f0 = 0;
  local_4f8 = 0;
  if (0 < local_50c) {
    iVar10 = 0;
    piVar13 = local_4d0;
    do {
      *piVar13 = 0;
      iVar10 = iVar10 + 1;
      piVar13 = piVar13 + 1;
    } while (iVar10 < local_50c);
  }
  if (local_4c8 != &local_4c0) {
    fastFree(local_4c8);
  }
  if (local_538 != 0) {
    piVar13 = (int *)(local_538 + 0x14);
    do {
      iVar10 = *piVar13;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar7) {
        *piVar13 = iVar10 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_570);
    }
  }
  local_538 = 0;
  local_560 = (double *)0x0;
  local_548 = 0;
  local_550 = 0;
  local_558 = 0;
  if (0 < local_56c) {
    iVar10 = 0;
    piVar13 = local_530;
    do {
      *piVar13 = 0;
      iVar10 = iVar10 + 1;
      piVar13 = piVar13 + 1;
    } while (iVar10 < local_56c);
  }
  if (local_528 != &local_520) {
    fastFree(local_528);
  }
  auVar33._8_8_ = 0;
  auVar33._0_8_ = dVar38;
  return auVar33;
}


==================================================================

### FUNC 002ddc30 (980 bytes) name=dot

/* cv::Mat::dot(cv::_InputArray const&) const */

undefined1  [16] __thiscall cv::Mat::dot(Mat *this,_InputArray *param_1)

{
  long lVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  int iVar11;
  uint uVar12;
  char *pcVar13;
  long lVar14;
  Mat *pMVar15;
  int *piVar16;
  long lVar17;
  int *piVar18;
  ulong uVar19;
  code *pcVar20;
  double dVar21;
  undefined1 auVar22 [16];
  double dVar23;
  undefined8 local_d8;
  undefined8 local_d0;
  uchar *local_c8;
  undefined8 local_c0;
  Mat *local_b8;
  Mat *local_b0;
  undefined8 local_a8;
  NAryMatIterator aNStack_a0 [32];
  ulong local_80;
  int local_78;
  uint local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar11 = _InputArray::kind(param_1);
  if (iVar11 == 0x10000) {
    pMVar15 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar15;
    local_5c = *(int *)(pMVar15 + 4);
    local_58 = *(int *)(pMVar15 + 8);
    local_54 = *(undefined4 *)(pMVar15 + 0xc);
    local_50 = *(undefined8 *)(pMVar15 + 0x10);
    local_48 = *(undefined8 *)(pMVar15 + 0x18);
    local_40 = *(undefined8 *)(pMVar15 + 0x20);
    local_38 = *(undefined8 *)(pMVar15 + 0x28);
    local_30 = *(undefined8 *)(pMVar15 + 0x30);
    local_28 = *(long *)(pMVar15 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar18 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar4) {
          *piVar18 = *piVar18 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar15 + 0x48);
      local_8 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_5c = 0;
      copySize((Mat *)&local_60,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar12 = *(uint *)this;
  iVar11 = (uVar12 >> 3 & 0x1ff) + 1;
  pcVar20 = (code *)(&PTR_FUN_004f60f0)[(int)(uVar12 & 7)];
  if ((local_60 & 0xfff) == (uVar12 & 0xfff)) {
    piVar18 = *(int **)(this + 0x40);
    iVar2 = local_20[-1];
    if (iVar2 != piVar18[-1]) goto LAB_002ddca8;
    if (iVar2 != 2) {
      if (iVar2 < 1) {
LAB_002ddfc4:
        if (pcVar20 != (code *)0x0) goto LAB_002ddd20;
      }
      else if (*local_20 == *piVar18) {
        piVar16 = local_20;
        do {
          piVar18 = piVar18 + 1;
          if (piVar16 == local_20 + (iVar2 - 1)) goto LAB_002ddfc4;
          piVar16 = piVar16 + 1;
        } while (*piVar16 == *piVar18);
      }
      goto LAB_002ddca8;
    }
    if (((*local_20 != *piVar18) || (local_20[1] != piVar18[1])) || (pcVar20 == (code *)0x0))
    goto LAB_002ddca8;
  }
  else {
LAB_002ddca8:
    local_d8 = 0;
    local_d0 = 0;
    pcVar13 = (char *)String::allocate((String *)&local_d8,0x35);
    cVar3 = s_mat_type______type______mat_size_00469190[0x34];
    uVar10 = s_mat_type______type______mat_size_00469190._40_8_;
    uVar9 = s_mat_type______type______mat_size_00469190._32_8_;
    uVar8 = s_mat_type______type______mat_size_00469190._24_8_;
    uVar7 = s_mat_type______type______mat_size_00469190._16_8_;
    uVar6 = s_mat_type______type______mat_size_00469190._8_8_;
    uVar5 = s_mat_type______type______mat_size_00469190._0_8_;
    *(undefined4 *)(pcVar13 + 0x30) = s_mat_type______type______mat_size_00469190._48_4_;
    pcVar13[0x34] = cVar3;
    *(undefined8 *)pcVar13 = uVar5;
    *(undefined8 *)(pcVar13 + 8) = uVar6;
    *(undefined8 *)(pcVar13 + 0x10) = uVar7;
    *(undefined8 *)(pcVar13 + 0x18) = uVar8;
    *(undefined8 *)(pcVar13 + 0x20) = uVar9;
    *(undefined8 *)(pcVar13 + 0x28) = uVar10;
    error(-0xd7,(String *)&local_d8,"double cv::Mat::dot(cv::InputArray) const",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xcac);
    String::deallocate((String *)&local_d8);
    uVar12 = *(uint *)this;
  }
LAB_002ddd20:
  if (((uVar12 >> 0xe & 1) != 0) && ((local_60 >> 0xe & 1) != 0)) {
    if (*(int *)(this + 4) < 3) {
      lVar14 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8) * (long)iVar11;
      if ((int)lVar14 == lVar14) goto LAB_002dde80;
    }
    else {
      lVar14 = 0;
      lVar17 = 1;
      do {
        lVar1 = lVar14 * 4;
        lVar14 = lVar14 + 1;
        lVar17 = lVar17 * *(int *)(*(long *)(this + 0x40) + lVar1);
      } while ((int)lVar14 < *(int *)(this + 4));
      if ((long)(int)(lVar17 * iVar11) == lVar17 * iVar11) {
LAB_002dde80:
        auVar22 = (*pcVar20)(*(undefined8 *)(this + 0x10),local_50);
        goto LAB_002ddd98;
      }
    }
  }
  local_a8 = 0;
  local_b8 = this;
  local_b0 = (Mat *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_a0,&local_b8,&local_c8,-1);
  dVar23 = 0.0;
  for (uVar19 = 0; uVar19 < local_80; uVar19 = uVar19 + 1) {
    dVar21 = (double)(*pcVar20)(local_c8,local_c0,iVar11 * local_78);
    dVar23 = dVar23 + dVar21;
    NAryMatIterator::operator++(aNStack_a0);
  }
  auVar22._8_8_ = 0;
  auVar22._0_8_ = dVar23;
LAB_002ddd98:
  if (local_28 != 0) {
    piVar18 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar18;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar4) {
        *piVar18 = iVar11 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar11 == 1) {
      deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    piVar18 = local_20;
    do {
      *piVar18 = 0;
      iVar11 = iVar11 + 1;
      piVar18 = piVar18 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return auVar22;
}


==================================================================

### FUNC 002de040 (2104 bytes) name=cvTransform

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvTransform(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,
                AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined4 *puVar11;
  char *pcVar12;
  int iVar13;
  undefined8 *puVar14;
  undefined4 local_2d8;
  int local_2d4;
  undefined4 local_2d0;
  undefined4 local_2cc;
  int local_2c8;
  int local_2c4;
  undefined4 local_2c0;
  undefined4 local_2bc;
  int local_2b8;
  int local_2b4;
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  uint local_2a0;
  int local_29c;
  int local_298;
  int local_294;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined4 *local_260;
  undefined8 *local_258;
  undefined8 auStack_250 [2];
  undefined8 local_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined8 *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  uint local_1e0;
  int local_1dc;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  long local_1a8;
  undefined4 *local_1a0;
  undefined1 *local_198;
  undefined1 auStack_190 [16];
  uint local_180;
  int local_17c;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  undefined4 *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0 [2];
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if (param_4 == (cv *)0x0) goto LAB_002de588;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  cv::Mat::reshape((int)(Mat *)&local_60,1);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    puVar11 = local_20;
    do {
      *puVar11 = 0;
      iVar13 = iVar13 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  local_1f8 = &local_1f0;
  local_200 = &uStack_238;
  local_2b4 = local_294 + 1;
  uStack_238 = _UNK_002de9e8;
  local_240 = _DAT_002de9e0;
  local_230 = 0;
  uStack_228 = 0;
  local_220 = 0;
  uStack_1e8 = 0;
  local_1f0 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  local_2b8 = local_298;
  cv::Mat::create((Mat *)&local_240,2,&local_2b8,local_2a0 & 0xfff);
  local_2d0 = 0x80000000;
  local_2cc = 0x7fffffff;
  local_2d8 = 0;
  local_2d4 = local_294;
  cv::Mat::Mat((Mat *)local_c0,(Mat *)&local_240,(Range *)&local_2d0,(Range *)&local_2d8);
  local_2c4 = local_294 + 1;
  local_2c0 = 0x80000000;
  local_2bc = 0x7fffffff;
  local_2c8 = local_294;
  cv::Mat::Mat((Mat *)&local_60,(Mat *)&local_240,(Range *)&local_2c0,(Range *)&local_2c8);
  local_2a8 = 0;
  local_2a4 = 0;
  local_2b8 = 0x2010000;
  local_2b0 = (Mat *)local_c0;
  cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_2b8,local_c0[0] & 0xfff,1.0,0.0);
  local_2a8 = 0;
  local_2a4 = 0;
  local_2b8 = 0x2010000;
  local_2b0 = (Mat *)&local_60;
  cv::Mat::convertTo((Mat *)&local_120,(_OutputArray *)&local_2b8,local_60 & 0xfff,1.0,0.0);
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (local_29c < 1) {
LAB_002de350:
    local_2a0 = (uint)local_240;
    if (2 < local_240._4_4_) goto LAB_002de7d8;
    local_294 = uStack_238._4_4_;
    local_298 = (int)uStack_238;
    local_29c = local_240._4_4_;
    *local_258 = *local_1f8;
    local_258[1] = local_1f8[1];
  }
  else {
    iVar13 = 0;
    puVar11 = local_260;
    do {
      *puVar11 = 0;
      iVar13 = iVar13 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar13 < local_29c);
    if (local_29c < 3) goto LAB_002de350;
LAB_002de7d8:
    local_2a0 = (uint)local_240;
    cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_240);
  }
  uStack_278 = uStack_218;
  local_280 = local_220;
  lStack_268 = lStack_208;
  local_270 = local_210;
  uStack_288 = uStack_228;
  local_290 = local_230;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < (int)local_c0[1]) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < (int)local_c0[1]);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar13 = 0;
    puVar14 = local_200;
    do {
      *(undefined4 *)puVar14 = 0;
      iVar13 = iVar13 + 1;
      puVar14 = (undefined8 *)((long)puVar14 + 4);
    } while (iVar13 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    cv::fastFree(local_1f8);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar13 = 0;
    do {
      *local_e0 = 0;
      iVar13 = iVar13 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar13 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_002de588:
  if (((local_180 & 7) != (local_1e0 & 7)) || (local_298 != (local_180 >> 3 & 0x1ff) + 1)) {
    local_c0[0] = 0;
    local_c0[1] = 0;
    local_b8 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)local_c0,0x36);
    uVar10 = s_dst_depth______src_depth______ds_004691c8._52_2_;
    uVar9 = s_dst_depth______src_depth______ds_004691c8._40_8_;
    uVar8 = s_dst_depth______src_depth______ds_004691c8._32_8_;
    uVar7 = s_dst_depth______src_depth______ds_004691c8._24_8_;
    uVar6 = s_dst_depth______src_depth______ds_004691c8._16_8_;
    uVar5 = s_dst_depth______src_depth______ds_004691c8._8_8_;
    uVar4 = s_dst_depth______src_depth______ds_004691c8._0_8_;
    *(undefined4 *)(pcVar12 + 0x30) = s_dst_depth______src_depth______ds_004691c8._48_4_;
    *(undefined2 *)(pcVar12 + 0x34) = uVar10;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    *(undefined8 *)(pcVar12 + 0x20) = uVar8;
    *(undefined8 *)(pcVar12 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)local_c0,
              "void cvTransform(const CvArr*, CvArr*, const CvMat*, const CvMat*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xce7);
    cv::String::deallocate((String *)local_c0);
  }
  local_110 = 0;
  local_120 = 0x1010000;
  local_b0 = 0;
  local_c0[0] = 0x2010000;
  local_50 = 0;
  local_60 = 0x1010000;
  local_118 = (Mat *)&local_1e0;
  local_b8 = (Mat *)&local_180;
  local_58 = (Mat *)&local_2a0;
  cv::transform((_InputArray *)&local_120,(_OutputArray *)local_c0,(_InputArray *)&local_60);
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar13 = 0;
    do {
      *local_140 = 0;
      iVar13 = iVar13 + 1;
      local_140 = local_140 + 1;
    } while (iVar13 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  if (local_1a8 != 0) {
    piVar1 = (int *)(local_1a8 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1dc) {
    iVar13 = 0;
    do {
      *local_1a0 = 0;
      iVar13 = iVar13 + 1;
      local_1a0 = local_1a0 + 1;
    } while (iVar13 < local_1dc);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_29c) {
    iVar13 = 0;
    do {
      *local_260 = 0;
      iVar13 = iVar13 + 1;
      local_260 = local_260 + 1;
    } while (iVar13 < local_29c);
  }
  if (local_258 != auStack_250) {
    cv::fastFree(local_258);
  }
  return;
}


==================================================================

### FUNC 002de9f0 (772 bytes) name=cvPerspectiveTransform

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvPerspectiveTransform
               (cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
               AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined8 *puVar11;
  int iVar12;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  Mat aMStack_120 [4];
  int local_11c;
  int local_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if (((local_60 & 0xfff) != (local_c0 & 0xfff)) || (local_118 + -1 != (local_60 >> 3 & 0x1ff) + 1))
  {
    local_138 = 0;
    local_130 = (Mat *)0x0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_138,0x36);
    uVar10 = DAT_00469234;
    uVar9 = _DAT_00469228;
    uVar8 = DAT_00469220;
    uVar7 = DAT_00469218;
    uVar6 = DAT_00469210;
    uVar5 = DAT_00469208;
    uVar4 = DAT_00469200;
    *(undefined4 *)(puVar11 + 6) = DAT_00469230;
    *(undefined2 *)((long)puVar11 + 0x34) = uVar10;
    *puVar11 = uVar4;
    puVar11[1] = uVar5;
    puVar11[2] = uVar6;
    puVar11[3] = uVar7;
    puVar11[4] = uVar8;
    puVar11[5] = uVar9;
    cv::error(-0xd7,(String *)&local_138,
              "void cvPerspectiveTransform(const CvArr*, CvArr*, const CvMat*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xcf1);
    cv::String::deallocate((String *)&local_138);
  }
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x1010000);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x2010000;
  local_160 = (Mat *)&local_c0;
  local_148 = (Mat *)&local_60;
  local_130 = aMStack_120;
  cv::perspectiveTransform
            ((_InputArray *)local_168,(_OutputArray *)local_150,(_InputArray *)&local_138);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate(aMStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002ded80 (920 bytes) name=cvScaleAdd

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvScaleAdd(double param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,
               undefined8 param_6,AutoBuffer *param_7)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int iVar10;
  int *piVar11;
  int *piVar12;
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_7);
  iVar10 = local_e0[-1];
  if (iVar10 == local_80[-1]) {
    if (iVar10 == 2) {
      if ((*local_e0 == *local_80) && (local_e0[1] == local_80[1])) goto LAB_002df0d8;
    }
    else if (iVar10 < 1) {
LAB_002df0d8:
      if ((local_120 & 0xfff) == (local_c0 & 0xfff)) goto LAB_002dee74;
    }
    else if (*local_e0 == *local_80) {
      piVar11 = local_e0;
      piVar12 = local_80;
      do {
        piVar12 = piVar12 + 1;
        if (piVar11 == local_e0 + (iVar10 - 1)) goto LAB_002df0d8;
        piVar11 = piVar11 + 1;
      } while (*piVar11 == *piVar12);
    }
  }
  local_138 = 0;
  local_130 = (Mat *)0x0;
  puVar9 = (undefined8 *)cv::String::allocate((String *)&local_138,0x32);
  uVar8 = _LAB_00460c18;
  uVar7 = DAT_00460c10;
  uVar6 = DAT_00460c08;
  uVar5 = DAT_00460c00;
  uVar4 = DAT_00460bf8;
  uVar3 = DAT_00460bf0;
  *(undefined2 *)(puVar9 + 6) = _LAB_00460c20;
  *puVar9 = uVar3;
  puVar9[1] = uVar4;
  puVar9[2] = uVar5;
  puVar9[3] = uVar6;
  puVar9[4] = uVar7;
  puVar9[5] = uVar8;
  cv::error(-0xd7,(String *)&local_138,
            "void cvScaleAdd(const CvArr*, CvScalar, const CvArr*, CvArr*)",
            "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xcfb);
  cv::String::deallocate((String *)&local_138);
LAB_002dee74:
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_160 = (Mat *)&local_120;
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_60;
  local_130 = (Mat *)&local_c0;
  cv::scaleAdd((_InputArray *)local_168,param_1,(_InputArray *)local_150,(_OutputArray *)&local_138)
  ;
  if (local_28 != 0) {
    piVar11 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar11 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar11 = (int *)(local_e8 + 0x14);
    do {
      iVar10 = *piVar11;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002df1a0 (632 bytes) name=cvMahalanobis

undefined1  [16]
cvMahalanobis(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
             AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined1 auVar5 [16];
  undefined4 local_168 [2];
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150 [2];
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined4 local_138 [2];
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  Mat aMStack_120 [4];
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  local_158 = 0;
  local_154 = 0;
  local_168[0] = 0x1010000;
  local_160 = aMStack_120;
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_140 = 0;
  local_13c = 0;
  local_150[0] = 0x1010000;
  local_148 = aMStack_c0;
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138[0] = 0x1010000;
  local_130 = aMStack_60;
  auVar5._0_8_ = cv::Mahalanobis((_InputArray *)local_168,(_InputArray *)local_150,
                                 (_InputArray *)local_138);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      *local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  auVar5._8_8_ = 0;
  return auVar5;
}


==================================================================

### FUNC 002df490 (396 bytes) name=cvDotProduct

undefined1  [16] cvDotProduct(cv *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined1 auVar5 [16];
  undefined4 local_d8 [2];
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x1010000;
  local_d0 = aMStack_60;
  auVar5._0_8_ = cv::Mat::dot(aMStack_c0,(_InputArray *)local_d8);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  auVar5._8_8_ = 0;
  return auVar5;
}


==================================================================

### FUNC 002df66c (436 bytes) name=~PCA

/* cv::PCA::~PCA() */

void __thiscall cv::PCA::~PCA(PCA *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined4 *puVar4;
  int iVar5;
  
  if (*(long *)(this + 0xf8) != 0) {
    piVar1 = (int *)(*(long *)(this + 0xf8) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)(this + 0xc0));
    }
  }
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  if (0 < *(int *)(this + 0xc4)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0x100);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 0xc4));
  }
  if (*(PCA **)(this + 0x108) != this + 0x110) {
    fastFree(*(PCA **)(this + 0x108));
  }
  if (*(long *)(this + 0x98) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x98) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)(this + 0x60));
    }
  }
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  if (0 < *(int *)(this + 100)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0xa0);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 100));
  }
  if (*(PCA **)(this + 0xa8) != this + 0xb0) {
    fastFree(*(PCA **)(this + 0xa8));
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (0 < *(int *)(this + 4)) {
    iVar5 = 0;
    puVar4 = *(undefined4 **)(this + 0x40);
    do {
      *puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = puVar4 + 1;
    } while (iVar5 < *(int *)(this + 4));
  }
  if (*(PCA **)(this + 0x48) != this + 0x50) {
    fastFree(*(PCA **)(this + 0x48));
    return;
  }
  return;
}


==================================================================

### FUNC 002df870 (5844 bytes) name=cvCalcPCA

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvCalcPCA(cv *param_1,cv *param_2,cv *param_3,cv *param_4,uint param_5)

{
  long lVar1;
  char cVar2;
  bool bVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  void *__dest;
  char *pcVar11;
  int *piVar12;
  Mat **ppMVar13;
  undefined4 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  Mat *pMVar18;
  undefined4 local_5f0;
  int local_5ec;
  undefined4 local_5e8;
  undefined4 local_5e4;
  undefined4 local_5e0;
  undefined4 local_5dc;
  undefined4 local_5d8;
  int local_5d4;
  undefined4 local_5d0;
  undefined4 local_5cc;
  undefined4 local_5c8;
  int local_5c4;
  undefined8 local_5c0;
  undefined8 local_5b8;
  undefined8 local_5b0;
  undefined8 local_5a8;
  uint local_5a0;
  int iStack_59c;
  Mat *pMStack_598;
  long local_590;
  undefined8 local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  long local_568;
  undefined4 *local_560;
  undefined8 *local_558;
  undefined8 auStack_550 [2];
  uint local_540;
  int iStack_53c;
  int iStack_538;
  int iStack_534;
  long local_530;
  undefined8 local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  long local_508;
  undefined4 *local_500;
  undefined8 *local_4f8;
  undefined8 auStack_4f0 [2];
  uint local_4e0;
  int iStack_4dc;
  int iStack_4d8;
  int iStack_4d4;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  long local_4a8;
  undefined4 *local_4a0;
  undefined8 *local_498;
  undefined8 auStack_490 [2];
  undefined8 local_480;
  undefined8 uStack_478;
  long local_470;
  undefined8 uStack_468;
  undefined8 local_460;
  undefined8 uStack_458;
  undefined8 local_450;
  long lStack_448;
  int *local_440;
  undefined8 *local_438;
  undefined8 local_430;
  undefined8 uStack_428;
  undefined8 local_420;
  undefined8 uStack_418;
  long local_410;
  undefined8 uStack_408;
  undefined8 local_400;
  undefined8 uStack_3f8;
  undefined8 local_3f0;
  long lStack_3e8;
  undefined8 *local_3e0;
  undefined8 *local_3d8;
  undefined8 local_3d0;
  undefined8 uStack_3c8;
  undefined8 local_3c0;
  undefined4 uStack_3b8;
  int iStack_3b4;
  undefined8 local_3b0;
  undefined8 uStack_3a8;
  undefined8 local_3a0;
  undefined8 uStack_398;
  undefined8 local_390;
  long lStack_388;
  undefined4 *local_380;
  undefined8 *local_378;
  undefined8 local_370;
  undefined8 uStack_368;
  undefined8 local_360;
  Mat *pMStack_358;
  long local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  Mat **local_320;
  undefined8 *local_318;
  undefined8 local_310;
  undefined8 uStack_308;
  Mat aMStack_300 [4];
  int local_2fc;
  undefined8 local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  long local_2c8;
  undefined4 *local_2c0;
  undefined1 *local_2b8;
  undefined1 auStack_2b0 [16];
  uint local_2a0;
  int local_29c;
  undefined4 local_298 [2];
  long local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  long local_268;
  undefined4 *local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined4 local_240;
  int local_23c;
  Mat *local_238;
  undefined8 local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  long local_208;
  undefined4 *local_200;
  undefined1 *local_1f8;
  undefined1 auStack_1f0 [16];
  undefined4 local_1e0;
  int local_1dc;
  Mat *local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  long local_1a8;
  undefined4 *local_1a0;
  undefined1 *local_198;
  undefined1 auStack_190 [16];
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  int local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  long local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  undefined4 local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  long local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  pMVar18 = aMStack_300;
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,(AutoBuffer *)aMStack_300);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)pMVar18);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)pMVar18);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,(AutoBuffer *)pMVar18);
  local_480 = CONCAT44(iStack_59c,local_5a0);
  local_438 = &local_430;
  local_440 = (int *)&uStack_478;
  uStack_428 = 0;
  local_430 = 0;
  uStack_478 = pMStack_598;
  local_470 = local_590;
  uStack_468 = local_588;
  local_460 = local_580;
  uStack_458 = local_578;
  local_450 = local_570;
  lStack_448 = local_568;
  if (local_568 != 0) {
    piVar12 = (int *)(local_568 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_59c < 3) {
    local_430 = *local_558;
    uStack_428 = local_558[1];
  }
  else {
    local_480 = (ulong)local_5a0;
    cv::Mat::copySize((Mat *)&local_480,(Mat *)&local_5a0);
  }
  uStack_418 = CONCAT44(iStack_534,iStack_538);
  local_420 = CONCAT44(iStack_53c,local_540);
  local_3d8 = &local_3d0;
  local_3e0 = &uStack_418;
  uStack_3c8 = 0;
  local_3d0 = 0;
  local_410 = local_530;
  uStack_408 = local_528;
  local_400 = local_520;
  uStack_3f8 = local_518;
  local_3f0 = local_510;
  lStack_3e8 = local_508;
  if (local_508 != 0) {
    piVar12 = (int *)(local_508 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_53c < 3) {
    local_3d0 = *local_4f8;
    uStack_3c8 = local_4f8[1];
  }
  else {
    local_420 = (ulong)local_540;
    cv::Mat::copySize((Mat *)&local_420,(Mat *)&local_540);
  }
  iStack_3b4 = iStack_4d4;
  local_3c0 = CONCAT44(iStack_4dc,local_4e0);
  local_378 = &local_370;
  local_380 = &uStack_3b8;
  uStack_368 = 0;
  local_370 = 0;
  local_3b0 = local_4d0;
  uStack_3a8 = local_4c8;
  local_3a0 = local_4c0;
  uStack_398 = local_4b8;
  local_390 = local_4b0;
  lStack_388 = local_4a8;
  if (local_4a8 != 0) {
    piVar12 = (int *)(local_4a8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_4dc < 3) {
    local_370 = *local_498;
    uStack_368 = local_498[1];
  }
  else {
    local_3c0 = (ulong)local_4e0;
    cv::Mat::copySize((Mat *)&local_3c0,(Mat *)&local_4e0);
  }
  cv::PCA::PCA((PCA *)&local_120);
  if (lStack_448 != 0) {
    piVar12 = (int *)(lStack_448 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar12 = (int *)(lStack_28 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_002dfb7c:
    local_60 = (uint)local_480;
    if (2 < local_480._4_4_) goto LAB_002dfb88;
    local_58 = (int)uStack_478;
    local_54 = uStack_478._4_4_;
    *local_18 = *local_438;
    local_18[1] = local_438[1];
    local_5c = local_480._4_4_;
  }
  else {
    iVar8 = 0;
    piVar12 = local_20;
    do {
      *piVar12 = 0;
      iVar8 = iVar8 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar8 < local_5c);
    if (local_5c < 3) goto LAB_002dfb7c;
LAB_002dfb88:
    local_60 = (uint)local_480;
    cv::Mat::copySize((Mat *)&local_60,(Mat *)&local_480);
  }
  uStack_38 = uStack_458;
  local_40 = local_460;
  lStack_28 = lStack_448;
  local_30 = local_450;
  uStack_48 = uStack_468;
  local_50 = local_470;
  if (lStack_3e8 != 0) {
    piVar12 = (int *)(lStack_3e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_88 != 0) {
    piVar12 = (int *)(lStack_88 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (local_bc < 1) {
LAB_002dfc50:
    local_c0 = (undefined4)local_420;
    if (2 < local_420._4_4_) goto LAB_002dfc5c;
    local_b8 = (int)uStack_418;
    local_b4 = uStack_418._4_4_;
    *local_78 = *local_3d8;
    local_78[1] = local_3d8[1];
    local_bc = local_420._4_4_;
  }
  else {
    iVar8 = 0;
    puVar14 = local_80;
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < local_bc);
    if (local_bc < 3) goto LAB_002dfc50;
LAB_002dfc5c:
    local_c0 = (undefined4)local_420;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_420);
  }
  uStack_98 = uStack_3f8;
  local_a0 = local_400;
  lStack_88 = lStack_3e8;
  local_90 = local_3f0;
  uStack_a8 = uStack_408;
  local_b0 = local_410;
  if (lStack_388 != 0) {
    piVar12 = (int *)(lStack_388 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar12 = (int *)(lStack_e8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_002dfd24:
    local_120 = (undefined4)local_3c0;
    if (2 < local_3c0._4_4_) goto LAB_002dfd30;
    local_114 = iStack_3b4;
    *local_d8 = *local_378;
    local_d8[1] = local_378[1];
    local_11c = local_3c0._4_4_;
  }
  else {
    iVar8 = 0;
    puVar14 = local_e0;
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < local_11c);
    if (local_11c < 3) goto LAB_002dfd24;
LAB_002dfd30:
    local_120 = (undefined4)local_3c0;
    cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_3c0);
  }
  local_1d0 = 0;
  uStack_f8 = uStack_398;
  local_100 = local_3a0;
  lStack_e8 = lStack_388;
  local_f0 = local_390;
  uStack_108 = uStack_3a8;
  local_110 = local_3b0;
  local_1e0 = 0x1010000;
  local_1d8 = aMStack_300;
  if ((param_5 >> 1 & 1) == 0) {
    local_318 = &local_310;
    local_320 = &pMStack_358;
    local_350 = 0;
    local_348 = 0;
    uStack_308 = 0;
    local_310 = 0;
    local_340 = 0;
    local_338 = 0;
    local_330 = 0;
    local_328 = 0;
    pMStack_358 = _UNK_002e11b8;
    local_360 = _DAT_002e11b0;
  }
  else {
    local_318 = &local_310;
    local_320 = &pMStack_358;
    uStack_308 = 0;
    local_310 = 0;
    pMStack_358 = uStack_478;
    local_360 = local_480;
    local_350 = local_470;
    local_348 = uStack_468;
    local_340 = local_460;
    local_338 = uStack_458;
    local_330 = local_450;
    local_328 = lStack_448;
    if (lStack_448 != 0) {
      piVar12 = (int *)(lStack_448 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar3) {
          *piVar12 = *piVar12 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (local_480._4_4_ < 3) {
      local_310 = *local_438;
      uStack_308 = local_438[1];
    }
    else {
      local_360 = local_480 & 0xffffffff;
      cv::Mat::copySize((Mat *)&local_360,(Mat *)&local_480);
    }
  }
  local_170 = 0;
  local_180 = CONCAT44(local_180._4_4_,0x1010000);
  iVar8 = 0;
  if (local_410 != 0) {
    if (local_420._4_4_ < 3) {
      lVar17 = (long)uStack_418._4_4_ * (long)(int)uStack_418;
    }
    else {
      lVar10 = 0;
      lVar17 = 1;
      do {
        lVar1 = lVar10 * 4;
        lVar10 = lVar10 + 1;
        lVar17 = lVar17 * *(int *)((long)local_3e0 + lVar1);
      } while ((int)lVar10 < local_420._4_4_);
    }
    iVar8 = 0;
    if (lVar17 != 0) {
      iVar8 = (int)uStack_418 + uStack_418._4_4_ + -1;
    }
  }
  pMStack_178 = (Mat *)&local_360;
  cv::PCA::operator()((PCA *)&local_120,(_InputArray *)&local_1e0,(_InputArray *)&local_180,param_5,
                      iVar8);
  if (local_328 != 0) {
    piVar12 = (int *)(local_328 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_360);
    }
  }
  local_328 = 0;
  local_350 = 0;
  local_338 = 0;
  local_340 = 0;
  local_348 = 0;
  if (0 < local_360._4_4_) {
    iVar8 = 0;
    ppMVar13 = local_320;
    do {
      *(undefined4 *)ppMVar13 = 0;
      iVar8 = iVar8 + 1;
      ppMVar13 = (Mat **)((long)ppMVar13 + 4);
    } while (iVar8 < local_360._4_4_);
  }
  if (local_318 != &local_310) {
    cv::fastFree(local_318);
  }
  if ((local_20[1] == local_440[1]) && (*local_20 == *local_440)) {
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x2010000);
    pMStack_178 = (Mat *)&local_480;
    cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_180,(uint)local_480 & 0xfff,1.0,0.0);
  }
  else {
    local_138 = &local_130;
    local_170 = 0;
    local_140 = &pMStack_178;
    uStack_128 = 0;
    local_130 = 0;
    pMStack_178 = _UNK_002e11b8;
    local_180 = _DAT_002e11b0;
    local_1d0 = 0;
    local_1e0 = 0x2010000;
    local_168 = 0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    local_1d8 = (Mat *)&local_180;
    cv::Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_1e0,(uint)local_480 & 0xfff,1.0,0.0);
    local_1d0 = 0;
    local_1e0 = 0x2010000;
    local_230 = 0;
    local_240 = 0x1010000;
    local_238 = (Mat *)&local_180;
    local_1d8 = (Mat *)&local_480;
    cv::transpose((_InputArray *)&local_240,(_OutputArray *)&local_1e0);
    if (local_148 == 0) {
LAB_002dffa4:
      uVar4 = local_180;
    }
    else {
      piVar12 = (int *)(local_148 + 0x14);
      do {
        iVar8 = *piVar12;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar3) {
          *piVar12 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 != 1) goto LAB_002dffa4;
      cv::Mat::deallocate((Mat *)&local_180);
      uVar4 = local_180;
    }
    if (0 < local_180._4_4_) {
      iVar8 = 0;
      ppMVar13 = local_140;
      do {
        *(undefined4 *)ppMVar13 = 0;
        iVar8 = iVar8 + 1;
        local_180._4_4_ = (int)(uVar4 >> 0x20);
        ppMVar13 = (Mat **)((long)ppMVar13 + 4);
      } while (iVar8 < local_180._4_4_);
    }
    local_148 = 0;
    local_158 = 0;
    local_160 = 0;
    local_168 = 0;
    local_170 = 0;
    local_180 = uVar4;
    if (local_138 != &local_130) {
      cv::fastFree(local_138);
    }
  }
  if (lStack_88 != 0) {
    piVar12 = (int *)(lStack_88 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_3e8 != 0) {
    piVar12 = (int *)(lStack_3e8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_420);
    }
  }
  puVar15 = local_78;
  lStack_3e8 = 0;
  local_410 = 0;
  uStack_3f8 = 0;
  local_400 = 0;
  uStack_408 = 0;
  if (local_420._4_4_ < 1) {
LAB_002e00b4:
    if (2 < local_bc) goto LAB_002e00c0;
    uStack_418 = CONCAT44(local_b4,local_b8);
    local_420 = CONCAT44(local_bc,local_c0);
    *local_3d8 = *local_78;
    local_3d8[1] = puVar15[1];
  }
  else {
    iVar8 = 0;
    puVar16 = local_3e0;
    do {
      *(undefined4 *)puVar16 = 0;
      iVar8 = iVar8 + 1;
      puVar16 = (undefined8 *)((long)puVar16 + 4);
    } while (iVar8 < local_420._4_4_);
    if (local_420._4_4_ < 3) goto LAB_002e00b4;
LAB_002e00c0:
    local_420 = CONCAT44(local_420._4_4_,local_c0);
    cv::Mat::copySize((Mat *)&local_420,(Mat *)&local_c0);
  }
  local_410 = local_b0;
  uStack_408 = uStack_a8;
  local_400 = local_a0;
  uStack_3f8 = uStack_98;
  local_3f0 = local_90;
  lStack_3e8 = lStack_88;
  if (lStack_e8 != 0) {
    piVar12 = (int *)(lStack_e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_388 != 0) {
    piVar12 = (int *)(lStack_388 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_3c0);
    }
  }
  puVar15 = local_d8;
  lStack_388 = 0;
  local_3b0 = 0;
  uStack_398 = 0;
  local_3a0 = 0;
  uStack_3a8 = 0;
  if (local_3c0._4_4_ < 1) {
LAB_002e0188:
    if (2 < local_11c) goto LAB_002e0194;
    iStack_3b4 = local_114;
    local_3c0 = CONCAT44(local_11c,local_120);
    *local_378 = *local_d8;
    local_378[1] = puVar15[1];
  }
  else {
    iVar8 = 0;
    puVar14 = local_380;
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < local_3c0._4_4_);
    if (local_3c0._4_4_ < 3) goto LAB_002e0188;
LAB_002e0194:
    local_3c0 = CONCAT44(local_3c0._4_4_,local_120);
    cv::Mat::copySize((Mat *)&local_3c0,(Mat *)&local_120);
  }
  uStack_398 = uStack_f8;
  local_3a0 = local_100;
  lStack_388 = lStack_e8;
  local_390 = local_f0;
  uStack_3a8 = uStack_108;
  local_3b0 = local_110;
  iVar8 = iStack_534 + iStack_538 + -1;
  if ((((iStack_534 != 1) && (iStack_538 != 1)) || (uStack_418._4_4_ + (int)uStack_418 <= iVar8)) ||
     ((iStack_4d4 != iStack_3b4 || (iStack_4d8 != iVar8)))) {
    local_5c0 = 0;
    local_5b8 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_5c0,0x75);
    memcpy(__dest,
           "(evals0.cols == 1 || evals0.rows == 1) && ecount0 <= ecount && evects0.cols == evects.cols && evects0.rows == ecount0"
           ,0x75);
    cv::error(-0xd7,(String *)&local_5c0,"void cvCalcPCA(const CvArr*, CvArr*, CvArr*, CvArr*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd58);
    cv::String::deallocate((String *)&local_5c0);
  }
  local_260 = local_298;
  local_258 = &local_250;
  local_2a0 = local_540;
  local_29c = iStack_53c;
  local_290 = local_530;
  local_288 = local_528;
  local_280 = local_520;
  local_278 = local_518;
  local_270 = local_510;
  local_268 = local_508;
  local_248 = 0;
  local_250 = 0;
  if (local_508 != 0) {
    piVar12 = (int *)(local_508 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = *piVar12 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_53c < 3) {
    local_250 = *local_4f8;
    local_248 = local_4f8[1];
    if ((int)uStack_418 != 1) goto LAB_002e0300;
LAB_002e0ce0:
    local_5e8 = 0x80000000;
    local_5e4 = 0x7fffffff;
    local_5f0 = 0;
    local_5ec = iVar8;
    cv::Mat::Mat((Mat *)&local_240,(Mat *)&local_420,(Range *)&local_5e8,(Range *)&local_5f0);
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x2010000);
    pMStack_178 = (Mat *)&local_2a0;
    cv::Mat::convertTo((Mat *)&local_240,(_OutputArray *)&local_180,local_540 & 0xfff,1.0,0.0);
    if (local_208 != 0) {
      piVar12 = (int *)(local_208 + 0x14);
      do {
        iVar9 = *piVar12;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar3) {
          *piVar12 = iVar9 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar9 == 1) {
        cv::Mat::deallocate((Mat *)&local_240);
      }
    }
    local_208 = 0;
    local_230 = 0;
    local_218 = 0;
    local_220 = 0;
    local_228 = 0;
    if (0 < local_23c) {
      iVar9 = 0;
      do {
        *local_200 = 0;
        iVar9 = iVar9 + 1;
        local_200 = local_200 + 1;
      } while (iVar9 < local_23c);
    }
    local_198 = local_1f8;
    if (local_1f8 == auStack_1f0) goto LAB_002e03d8;
  }
  else {
    local_29c = 0;
    cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_540);
    if ((int)uStack_418 == 1) goto LAB_002e0ce0;
LAB_002e0300:
    local_5e0 = 0x80000000;
    local_5dc = 0x7fffffff;
    local_5d8 = 0;
    local_5d4 = iVar8;
    cv::Mat::Mat((Mat *)&local_1e0,(Mat *)&local_420,(Range *)&local_5d8,(Range *)&local_5e0);
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x2010000);
    pMStack_178 = (Mat *)&local_2a0;
    cv::Mat::convertTo((Mat *)&local_1e0,(_OutputArray *)&local_180,local_540 & 0xfff,1.0,0.0);
    if (local_1a8 != 0) {
      piVar12 = (int *)(local_1a8 + 0x14);
      do {
        iVar9 = *piVar12;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar3) {
          *piVar12 = iVar9 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar9 == 1) {
        cv::Mat::deallocate((Mat *)&local_1e0);
      }
    }
    local_1a8 = 0;
    local_1d0 = 0;
    local_1b8 = 0;
    local_1c0 = 0;
    local_1c8 = 0;
    if (0 < local_1dc) {
      iVar9 = 0;
      do {
        *local_1a0 = 0;
        iVar9 = iVar9 + 1;
        local_1a0 = local_1a0 + 1;
      } while (iVar9 < local_1dc);
    }
    if (local_198 == auStack_190) goto LAB_002e03d8;
  }
  cv::fastFree(local_198);
LAB_002e03d8:
  if (local_290 != local_530) {
    local_1e0 = 0x1010000;
    local_1d0 = 0;
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x2010000);
    local_1d8 = (Mat *)&local_2a0;
    pMStack_178 = (Mat *)&local_540;
    cv::transpose((_InputArray *)&local_1e0,(_OutputArray *)&local_180);
  }
  local_5d0 = 0x80000000;
  local_5cc = 0x7fffffff;
  local_5c8 = 0;
  local_5c4 = iVar8;
  cv::Mat::Mat((Mat *)&local_180,(Mat *)&local_3c0,(Range *)&local_5c8,(Range *)&local_5d0);
  local_1d0 = 0;
  local_1e0 = 0x2010000;
  local_1d8 = (Mat *)&local_4e0;
  cv::Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_1e0,local_4e0 & 0xfff,1.0,0.0);
  if (local_148 != 0) {
    piVar12 = (int *)(local_148 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_180._4_4_) {
    iVar8 = 0;
    ppMVar13 = local_140;
    do {
      *(undefined4 *)ppMVar13 = 0;
      iVar8 = iVar8 + 1;
      ppMVar13 = (Mat **)((long)ppMVar13 + 4);
    } while (iVar8 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_590 != local_470) {
    local_5b0 = 0;
    local_5a8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_5b0,0x17);
    cVar2 = s_mean0_data____mean_data_004692b0[0x16];
    uVar7 = s_mean0_data____mean_data_004692b0._20_2_;
    uVar6 = s_mean0_data____mean_data_004692b0._8_8_;
    uVar5 = s_mean0_data____mean_data_004692b0._0_8_;
    *(undefined4 *)(pcVar11 + 0x10) = s_mean0_data____mean_data_004692b0._16_4_;
    *(undefined2 *)(pcVar11 + 0x14) = uVar7;
    pcVar11[0x16] = cVar2;
    *(undefined8 *)pcVar11 = uVar5;
    *(undefined8 *)(pcVar11 + 8) = uVar6;
    cv::error(-0xd7,(String *)&local_5b0,"void cvCalcPCA(const CvArr*, CvArr*, CvArr*, CvArr*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd64);
    cv::String::deallocate((String *)&local_5b0);
  }
  if (local_268 != 0) {
    piVar12 = (int *)(local_268 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  local_268 = 0;
  local_290 = 0;
  local_278 = 0;
  local_280 = 0;
  local_288 = 0;
  if (0 < local_29c) {
    iVar8 = 0;
    puVar14 = local_260;
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < local_29c);
  }
  if (local_258 != &local_250) {
    cv::fastFree(local_258);
  }
  if (lStack_28 != 0) {
    piVar12 = (int *)(lStack_28 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (lStack_88 != 0) {
    piVar12 = (int *)(lStack_88 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar8 = 0;
    do {
      *local_80 = 0;
      iVar8 = iVar8 + 1;
      local_80 = local_80 + 1;
    } while (iVar8 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar12 = (int *)(lStack_e8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar8 = 0;
    do {
      *local_e0 = 0;
      iVar8 = iVar8 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar8 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (lStack_388 != 0) {
    piVar12 = (int *)(lStack_388 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_3c0);
    }
  }
  lStack_388 = 0;
  local_3b0 = 0;
  uStack_398 = 0;
  local_3a0 = 0;
  uStack_3a8 = 0;
  if (0 < local_3c0._4_4_) {
    iVar8 = 0;
    puVar14 = local_380;
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < local_3c0._4_4_);
  }
  if (local_378 != &local_370) {
    cv::fastFree(local_378);
  }
  if (lStack_3e8 != 0) {
    piVar12 = (int *)(lStack_3e8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_420);
    }
  }
  lStack_3e8 = 0;
  local_410 = 0;
  uStack_3f8 = 0;
  local_400 = 0;
  uStack_408 = 0;
  if (0 < local_420._4_4_) {
    iVar8 = 0;
    puVar15 = local_3e0;
    do {
      *(undefined4 *)puVar15 = 0;
      iVar8 = iVar8 + 1;
      puVar15 = (undefined8 *)((long)puVar15 + 4);
    } while (iVar8 < local_420._4_4_);
  }
  if (local_3d8 != &local_3d0) {
    cv::fastFree(local_3d8);
  }
  if (lStack_448 != 0) {
    piVar12 = (int *)(lStack_448 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_480);
    }
  }
  lStack_448 = 0;
  local_470 = 0;
  uStack_458 = 0;
  local_460 = 0;
  uStack_468 = 0;
  if (0 < local_480._4_4_) {
    iVar8 = 0;
    piVar12 = local_440;
    do {
      *piVar12 = 0;
      iVar8 = iVar8 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar8 < local_480._4_4_);
  }
  if (local_438 != &local_430) {
    cv::fastFree(local_438);
  }
  if (local_4a8 != 0) {
    piVar12 = (int *)(local_4a8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_4e0);
    }
  }
  local_4a8 = 0;
  local_4d0 = 0;
  local_4b8 = 0;
  local_4c0 = 0;
  local_4c8 = 0;
  if (0 < iStack_4dc) {
    iVar8 = 0;
    do {
      *local_4a0 = 0;
      iVar8 = iVar8 + 1;
      local_4a0 = local_4a0 + 1;
    } while (iVar8 < iStack_4dc);
  }
  if (local_498 != auStack_490) {
    cv::fastFree(local_498);
  }
  if (local_508 != 0) {
    piVar12 = (int *)(local_508 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_540);
    }
  }
  local_508 = 0;
  local_530 = 0;
  local_518 = 0;
  local_520 = 0;
  local_528 = 0;
  if (0 < iStack_53c) {
    iVar8 = 0;
    do {
      *local_500 = 0;
      iVar8 = iVar8 + 1;
      local_500 = local_500 + 1;
    } while (iVar8 < iStack_53c);
  }
  if (local_4f8 != auStack_4f0) {
    cv::fastFree(local_4f8);
  }
  if (local_568 != 0) {
    piVar12 = (int *)(local_568 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_5a0);
    }
  }
  local_568 = 0;
  local_590 = 0;
  local_578 = 0;
  local_580 = 0;
  local_588 = 0;
  if (0 < iStack_59c) {
    iVar8 = 0;
    do {
      *local_560 = 0;
      iVar8 = iVar8 + 1;
      local_560 = local_560 + 1;
    } while (iVar8 < iStack_59c);
  }
  if (local_558 != auStack_550) {
    cv::fastFree(local_558);
  }
  if (local_2c8 != 0) {
    piVar12 = (int *)(local_2c8 + 0x14);
    do {
      iVar8 = *piVar12;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar3) {
        *piVar12 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate(aMStack_300);
    }
  }
  local_2c8 = 0;
  local_2f0 = 0;
  local_2d8 = 0;
  local_2e0 = 0;
  local_2e8 = 0;
  if (0 < local_2fc) {
    iVar8 = 0;
    do {
      *local_2c0 = 0;
      iVar8 = iVar8 + 1;
      local_2c0 = local_2c0 + 1;
    } while (iVar8 < local_2fc);
  }
  if (local_2b8 != auStack_2b0) {
    cv::fastFree(local_2b8);
  }
  return;
}


==================================================================

### FUNC 002e11c0 (3232 bytes) name=cvProjectPCA

void cvProjectPCA(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,
                 AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  char *pcVar10;
  undefined8 *puVar11;
  undefined4 *puVar12;
  undefined4 local_460;
  undefined4 local_45c;
  undefined4 local_458;
  int local_454;
  undefined8 local_450;
  undefined8 local_448;
  undefined8 local_440;
  undefined8 local_438;
  undefined8 local_430;
  undefined8 local_428;
  Mat local_420 [4];
  int local_41c;
  int local_418;
  undefined8 local_410;
  undefined8 uStack_408;
  undefined8 local_400;
  undefined8 uStack_3f8;
  undefined8 local_3f0;
  long lStack_3e8;
  undefined4 *local_3e0;
  undefined8 *local_3d8;
  undefined8 auStack_3d0 [2];
  uint local_3c0;
  int iStack_3bc;
  undefined8 uStack_3b8;
  long local_3b0;
  undefined8 local_3a8;
  undefined8 local_3a0;
  undefined8 local_398;
  undefined8 local_390;
  long local_388;
  undefined4 *local_380;
  undefined8 *local_378;
  undefined8 auStack_370 [2];
  undefined8 local_360;
  undefined8 uStack_358;
  long local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  undefined8 *local_320;
  undefined8 *local_318;
  undefined8 local_310;
  undefined8 uStack_308;
  Mat local_300 [4];
  int local_2fc;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  long lStack_2c8;
  undefined4 *local_2c0;
  undefined8 *local_2b8;
  undefined8 auStack_2b0 [2];
  undefined4 local_2a0;
  int local_29c;
  undefined4 local_298;
  int local_294;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined4 *local_260;
  undefined8 *local_258;
  undefined8 auStack_250 [2];
  undefined4 local_240;
  int local_23c;
  undefined8 local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined4 *local_200;
  undefined8 *local_1f8;
  undefined8 auStack_1f0 [2];
  Mat aMStack_1e0 [4];
  int local_1dc;
  int local_1d8;
  int local_1d4;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  long local_1a8;
  undefined4 *local_1a0;
  undefined1 *local_198;
  undefined1 auStack_190 [16];
  Mat aMStack_180 [4];
  int local_17c;
  int local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  undefined4 *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  PCA local_120 [4];
  int local_11c;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat local_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  local_360 = CONCAT44(iStack_3bc,local_3c0);
  local_318 = &local_310;
  local_320 = &uStack_358;
  uStack_308 = 0;
  local_310 = 0;
  uStack_358 = uStack_3b8;
  local_350 = local_3b0;
  local_348 = local_3a8;
  local_340 = local_3a0;
  local_338 = local_398;
  local_330 = local_390;
  local_328 = local_388;
  if (local_388 != 0) {
    piVar1 = (int *)(local_388 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_3bc < 3) {
    local_310 = *local_378;
    uStack_308 = local_378[1];
  }
  else {
    local_360 = (ulong)local_3c0;
    cv::Mat::copySize((Mat *)&local_360,(Mat *)&local_3c0);
  }
  cv::PCA::PCA(local_120);
  if (lStack_3e8 != 0) {
    piVar1 = (int *)(lStack_3e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_002e1390:
    if (2 < local_41c) goto LAB_002e139c;
    *local_18 = *local_3d8;
    local_18[1] = local_3d8[1];
    local_5c = local_41c;
  }
  else {
    iVar9 = 0;
    puVar12 = local_20;
    do {
      *puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = puVar12 + 1;
    } while (iVar9 < local_5c);
    if (local_5c < 3) goto LAB_002e1390;
LAB_002e139c:
    cv::Mat::copySize(local_60,local_420);
  }
  uStack_38 = uStack_3f8;
  local_40 = local_400;
  lStack_28 = lStack_3e8;
  local_30 = local_3f0;
  uStack_48 = uStack_408;
  local_50 = local_410;
  if (local_418 == 1) {
    if ((local_178 < uStack_358._4_4_) ||
       (local_454 = uStack_358._4_4_, (int)uStack_358 != local_1d8)) {
      local_450 = 0;
      local_448 = 0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_450,0x30);
      uVar8 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._40_8_;
      uVar7 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._32_8_;
      uVar6 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._24_8_;
      uVar5 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._16_8_;
      uVar4 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._8_8_;
      *(undefined8 *)pcVar10 = s_dst_cols_<__evects_rows_&&_dst_r_004692c8._0_8_;
      *(undefined8 *)(pcVar10 + 8) = uVar4;
      *(undefined8 *)(pcVar10 + 0x10) = uVar5;
      *(undefined8 *)(pcVar10 + 0x18) = uVar6;
      *(undefined8 *)(pcVar10 + 0x20) = uVar7;
      *(undefined8 *)(pcVar10 + 0x28) = uVar8;
      cv::error(-0xd7,(String *)&local_450,
                "void cvProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
                "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd74);
      cv::String::deallocate((String *)&local_450);
      local_454 = uStack_358._4_4_;
    }
  }
  else if ((local_178 < (int)uStack_358) ||
          (local_454 = (int)uStack_358, uStack_358._4_4_ != local_1d4)) {
    local_440 = 0;
    local_438 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_440,0x30);
    uVar8 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._40_8_;
    uVar7 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._32_8_;
    uVar6 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._24_8_;
    uVar5 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._16_8_;
    uVar4 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._8_8_;
    *(undefined8 *)pcVar10 = s_dst_rows_<__evects_rows_&&_dst_c_00469300._0_8_;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    *(undefined8 *)(pcVar10 + 0x10) = uVar5;
    *(undefined8 *)(pcVar10 + 0x18) = uVar6;
    *(undefined8 *)(pcVar10 + 0x20) = uVar7;
    *(undefined8 *)(pcVar10 + 0x28) = uVar8;
    cv::error(-0xd7,(String *)&local_440,
              "void cvProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd79);
    cv::String::deallocate((String *)&local_440);
    local_454 = (int)uStack_358;
  }
  local_460 = 0x80000000;
  local_458 = 0;
  local_45c = 0x7fffffff;
  cv::Mat::Mat(local_300,aMStack_180,(Range *)&local_458,(Range *)&local_460);
  if (lStack_2c8 != 0) {
    piVar1 = (int *)(lStack_2c8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_002e1530:
    if (2 < local_2fc) goto LAB_002e153c;
    *local_d8 = *local_2b8;
    local_d8[1] = local_2b8[1];
    local_11c = local_2fc;
  }
  else {
    iVar9 = 0;
    puVar12 = local_e0;
    do {
      *puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = puVar12 + 1;
    } while (iVar9 < local_11c);
    if (local_11c < 3) goto LAB_002e1530;
LAB_002e153c:
    cv::Mat::copySize((Mat *)local_120,local_300);
  }
  uStack_f8 = uStack_2d8;
  local_100 = local_2e0;
  lStack_e8 = lStack_2c8;
  local_f0 = local_2d0;
  uStack_108 = uStack_2e8;
  local_110 = local_2f0;
  if (lStack_2c8 != 0) {
    piVar1 = (int *)(lStack_2c8 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(local_300);
    }
  }
  lStack_2c8 = 0;
  local_2f0 = 0;
  uStack_2d8 = 0;
  local_2e0 = 0;
  uStack_2e8 = 0;
  if (0 < local_2fc) {
    iVar9 = 0;
    do {
      *local_2c0 = 0;
      iVar9 = iVar9 + 1;
      local_2c0 = local_2c0 + 1;
    } while (iVar9 < local_2fc);
  }
  if (local_2b8 != auStack_2b0) {
    cv::fastFree(local_2b8);
  }
  local_230 = 0;
  local_240 = 0x1010000;
  local_238 = aMStack_1e0;
  cv::PCA::project((_InputArray *)local_120);
  if (local_294 == uStack_358._4_4_) goto LAB_002e1784;
  cv::Mat::reshape((int)(Mat *)&local_2a0,1);
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (local_29c < 1) {
LAB_002e16c8:
    local_2a0 = local_240;
    if (2 < local_23c) goto LAB_002e16d4;
    local_294 = local_238._4_4_;
    local_298 = (undefined4)local_238;
    *local_258 = *local_1f8;
    local_258[1] = local_1f8[1];
    local_29c = local_23c;
  }
  else {
    iVar9 = 0;
    puVar12 = local_260;
    do {
      *puVar12 = 0;
      iVar9 = iVar9 + 1;
      puVar12 = puVar12 + 1;
    } while (iVar9 < local_29c);
    if (local_29c < 3) goto LAB_002e16c8;
LAB_002e16d4:
    local_2a0 = local_240;
    cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_240);
  }
  uStack_278 = uStack_218;
  local_280 = local_220;
  lStack_268 = lStack_208;
  local_270 = local_210;
  uStack_288 = uStack_228;
  local_290 = local_230;
  if (lStack_208 != 0) {
    piVar1 = (int *)(lStack_208 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_23c) {
    iVar9 = 0;
    do {
      *local_200 = 0;
      iVar9 = iVar9 + 1;
      local_200 = local_200 + 1;
    } while (iVar9 < local_23c);
  }
  if (local_1f8 != auStack_1f0) {
    cv::fastFree(local_1f8);
  }
LAB_002e1784:
  local_230 = 0;
  local_240 = 0x2010000;
  local_238 = (Mat *)&local_360;
  cv::Mat::convertTo((Mat *)&local_2a0,(_OutputArray *)&local_240,(uint)local_360 & 0xfff,1.0,0.0);
  if (local_3b0 != local_350) {
    local_430 = 0;
    local_428 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_430,0x15);
    cVar2 = s_dst0_data____dst_data_00469338[0x14];
    uVar5 = s_dst0_data____dst_data_00469338._8_8_;
    uVar4 = s_dst0_data____dst_data_00469338._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_dst0_data____dst_data_00469338._16_4_;
    pcVar10[0x14] = cVar2;
    *(undefined8 *)pcVar10 = uVar4;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_430,
              "void cvProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd83);
    cv::String::deallocate((String *)&local_430);
  }
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_29c) {
    iVar9 = 0;
    do {
      *local_260 = 0;
      iVar9 = iVar9 + 1;
      local_260 = local_260 + 1;
    } while (iVar9 < local_29c);
  }
  if (local_258 != auStack_250) {
    cv::fastFree(local_258);
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    do {
      *local_80 = 0;
      iVar9 = iVar9 + 1;
      local_80 = local_80 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_328 != 0) {
    piVar1 = (int *)(local_328 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_360);
    }
  }
  local_328 = 0;
  local_350 = 0;
  local_338 = 0;
  local_340 = 0;
  local_348 = 0;
  if (0 < local_360._4_4_) {
    iVar9 = 0;
    puVar11 = local_320;
    do {
      *(undefined4 *)puVar11 = 0;
      iVar9 = iVar9 + 1;
      puVar11 = (undefined8 *)((long)puVar11 + 4);
    } while (iVar9 < local_360._4_4_);
  }
  if (local_318 != &local_310) {
    cv::fastFree(local_318);
  }
  if (local_388 != 0) {
    piVar1 = (int *)(local_388 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_3c0);
    }
  }
  local_388 = 0;
  local_3b0 = 0;
  local_398 = 0;
  local_3a0 = 0;
  local_3a8 = 0;
  if (0 < iStack_3bc) {
    iVar9 = 0;
    do {
      *local_380 = 0;
      iVar9 = iVar9 + 1;
      local_380 = local_380 + 1;
    } while (iVar9 < iStack_3bc);
  }
  if (local_378 != auStack_370) {
    cv::fastFree(local_378);
  }
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar9 = 0;
    do {
      *local_140 = 0;
      iVar9 = iVar9 + 1;
      local_140 = local_140 + 1;
    } while (iVar9 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  if (lStack_3e8 != 0) {
    piVar1 = (int *)(lStack_3e8 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(local_420);
    }
  }
  lStack_3e8 = 0;
  local_410 = 0;
  uStack_3f8 = 0;
  local_400 = 0;
  uStack_408 = 0;
  if (0 < local_41c) {
    iVar9 = 0;
    do {
      *local_3e0 = 0;
      iVar9 = iVar9 + 1;
      local_3e0 = local_3e0 + 1;
    } while (iVar9 < local_41c);
  }
  if (local_3d8 != auStack_3d0) {
    cv::fastFree(local_3d8);
  }
  if (local_1a8 != 0) {
    piVar1 = (int *)(local_1a8 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate(aMStack_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1dc) {
    iVar9 = 0;
    do {
      *local_1a0 = 0;
      iVar9 = iVar9 + 1;
      local_1a0 = local_1a0 + 1;
    } while (iVar9 < local_1dc);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
  return;
}


==================================================================

### FUNC 002e2024 (2796 bytes) name=cvBackProjectPCA

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvBackProjectPCA(cv *param_1,cv *param_2,cv *param_3,cv *param_4,undefined8 param_5,
                     AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  char *pcVar11;
  undefined8 *puVar12;
  undefined4 *puVar13;
  undefined4 local_400;
  undefined4 local_3fc;
  undefined4 local_3f8 [2];
  undefined8 local_3f0;
  undefined8 local_3e8;
  undefined8 local_3e0;
  undefined8 local_3d8;
  undefined8 local_3d0;
  undefined8 local_3c8;
  Mat local_3c0 [4];
  int local_3bc;
  int local_3b8;
  undefined8 local_3b0;
  undefined8 uStack_3a8;
  undefined8 local_3a0;
  undefined8 uStack_398;
  undefined8 local_390;
  long lStack_388;
  undefined4 *local_380;
  undefined8 *local_378;
  undefined8 auStack_370 [2];
  uint local_360;
  int iStack_35c;
  undefined8 uStack_358;
  long local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  undefined4 *local_320;
  undefined8 *local_318;
  undefined8 auStack_310 [2];
  undefined8 local_300;
  undefined8 uStack_2f8;
  long local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  undefined8 local_2d0;
  long local_2c8;
  undefined8 *local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined4 local_2a0;
  int local_29c;
  undefined8 local_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined4 *local_260;
  undefined8 *local_258;
  undefined8 auStack_250 [2];
  Mat aMStack_240 [4];
  int local_23c;
  int local_238;
  int local_234;
  undefined8 local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  long local_208;
  undefined4 *local_200;
  undefined1 *local_1f8;
  undefined1 auStack_1f0 [16];
  Mat aMStack_1e0 [4];
  int local_1dc;
  int local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  long local_1a8;
  undefined4 *local_1a0;
  undefined1 *local_198;
  undefined1 auStack_190 [16];
  Mat aMStack_180 [4];
  int local_17c;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  undefined4 *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  PCA local_120 [4];
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat local_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_6);
  local_300 = CONCAT44(iStack_35c,local_360);
  local_2b8 = &local_2b0;
  local_2c0 = &uStack_2f8;
  uStack_2a8 = 0;
  local_2b0 = 0;
  uStack_2f8 = uStack_358;
  local_2f0 = local_350;
  local_2e8 = local_348;
  local_2e0 = local_340;
  local_2d8 = local_338;
  local_2d0 = local_330;
  local_2c8 = local_328;
  if (local_328 != 0) {
    piVar1 = (int *)(local_328 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_35c < 3) {
    local_2b0 = *local_318;
    uStack_2a8 = local_318[1];
  }
  else {
    local_300 = (ulong)local_360;
                    /* try { // try from 002e2a54 to 003e2a57 has its CatchHandler @ 002e2b24 */
    cv::Mat::copySize((Mat *)&local_300,(Mat *)&local_360);
  }
  cv::PCA::PCA(local_120);
  if (lStack_388 != 0) {
    piVar1 = (int *)(lStack_388 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_002e21f4:
    if (2 < local_3bc) goto LAB_002e2200;
    *local_18 = *local_378;
    local_18[1] = local_378[1];
    local_5c = local_3bc;
  }
  else {
    iVar10 = 0;
    puVar13 = local_20;
    do {
      *puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar10 < local_5c);
    if (local_5c < 3) goto LAB_002e21f4;
LAB_002e2200:
    cv::Mat::copySize(local_60,local_3c0);
  }
  uStack_38 = uStack_398;
  local_40 = local_3a0;
  lStack_28 = lStack_388;
  local_30 = local_390;
  uStack_48 = uStack_3a8;
  local_50 = local_3b0;
  if (local_3b8 == 1) {
    if ((local_1d8 < local_234) || ((int)uStack_2f8 != local_238)) {
      local_3f0 = 0;
      local_3e8 = 0;
      puVar12 = (undefined8 *)cv::String::allocate((String *)&local_3f0,0x31);
      uVar9 = DAT_00469378;
      uVar8 = DAT_00469370;
      uVar7 = DAT_00469368;
      uVar6 = _LAB_00469360;
      uVar5 = _LAB_00469358;
      uVar4 = DAT_00469350;
                    /* try { // try from 002e2acc to 003e2acf has its CatchHandler @ 002e2b10 */
      *(undefined1 *)(puVar12 + 6) = DAT_00469380;
                    /* try { // try from 002e2ad4 to 003e2ad7 has its CatchHandler @ 002e294c */
      *puVar12 = uVar4;
      puVar12[1] = uVar5;
      puVar12[2] = uVar6;
      puVar12[3] = uVar7;
      puVar12[4] = uVar8;
      puVar12[5] = uVar9;
      cv::error(-0xd7,(String *)&local_3f0,
                "void cvBackProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
                "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd93);
      cv::String::deallocate((String *)&local_3f0);
                    /* try { // try from 002e2af0 to 003e2af3 has its CatchHandler @ 002e2b10 */
    }
  }
  else if ((local_1d8 < local_238) || (uStack_2f8._4_4_ != local_234)) {
    local_3e0 = 0;
    local_3d8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_3e0,0x31);
    uVar9 = s_data_rows_<__evects_rows_&&_dst__00469388._40_8_;
    uVar8 = s_data_rows_<__evects_rows_&&_dst__00469388._32_8_;
    uVar7 = s_data_rows_<__evects_rows_&&_dst__00469388._24_8_;
    uVar6 = s_data_rows_<__evects_rows_&&_dst__00469388._16_8_;
    uVar5 = s_data_rows_<__evects_rows_&&_dst__00469388._8_8_;
    uVar4 = s_data_rows_<__evects_rows_&&_dst__00469388._0_8_;
    pcVar11[0x30] = s_data_rows_<__evects_rows_&&_dst__00469388[0x30];
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    *(undefined8 *)(pcVar11 + 0x10) = uVar6;
    *(undefined8 *)(pcVar11 + 0x18) = uVar7;
    *(undefined8 *)(pcVar11 + 0x20) = uVar8;
    *(undefined8 *)(pcVar11 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_3e0,
              "void cvBackProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd98);
    cv::String::deallocate((String *)&local_3e0);
  }
  local_400 = 0x80000000;
  local_3f8[0] = 0;
  local_3fc = 0x7fffffff;
  cv::Mat::Mat((Mat *)&local_2a0,aMStack_1e0,(Range *)local_3f8,(Range *)&local_400);
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_002e239c:
    if (local_29c < 3) {
      local_114 = local_298._4_4_;
      local_118 = (undefined4)local_298;
      *local_d8 = *local_258;
      local_d8[1] = local_258[1];
      local_11c = local_29c;
      goto LAB_002e23b4;
    }
  }
  else {
    iVar10 = 0;
    puVar13 = local_e0;
    do {
      *puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar10 < local_11c);
    if (local_11c < 3) goto LAB_002e239c;
  }
  cv::Mat::copySize((Mat *)local_120,(Mat *)&local_2a0);
LAB_002e23b4:
  uStack_f8 = uStack_278;
  local_100 = local_280;
  lStack_e8 = lStack_268;
  local_f0 = local_270;
  uStack_108 = uStack_288;
  local_110 = local_290;
  if (lStack_268 != 0) {
    piVar1 = (int *)(lStack_268 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_29c) {
    iVar10 = 0;
    do {
      *local_260 = 0;
      iVar10 = iVar10 + 1;
      local_260 = local_260 + 1;
    } while (iVar10 < local_29c);
  }
  if (local_258 != auStack_250) {
    cv::fastFree(local_258);
  }
  local_290 = 0;
  local_2a0 = 0x1010000;
  local_298 = aMStack_240;
  cv::PCA::backProject((_InputArray *)local_120);
  local_290 = 0;
  local_2a0 = 0x2010000;
  local_298 = (Mat *)&local_300;
  cv::Mat::convertTo(aMStack_180,(_OutputArray *)&local_2a0,(uint)local_300 & 0xfff,1.0,0.0);
  if (local_350 != local_2f0) {
    local_3d0 = 0;
    local_3c8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_3d0,0x15);
    cVar2 = s_dst0_data____dst_data_00469338[0x14];
    uVar5 = s_dst0_data____dst_data_00469338._8_8_;
    uVar4 = s_dst0_data____dst_data_00469338._0_8_;
    *(undefined4 *)(pcVar11 + 0x10) = s_dst0_data____dst_data_00469338._16_4_;
    pcVar11[0x14] = cVar2;
    *(undefined8 *)pcVar11 = uVar4;
    *(undefined8 *)(pcVar11 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_3d0,
              "void cvBackProjectPCA(const CvArr*, const CvArr*, const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xda0);
    cv::String::deallocate((String *)&local_3d0);
  }
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar10 = 0;
    do {
      *local_140 = 0;
      iVar10 = iVar10 + 1;
      local_140 = local_140 + 1;
    } while (iVar10 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    do {
      *local_20 = 0;
      iVar10 = iVar10 + 1;
      local_20 = local_20 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    do {
      *local_80 = 0;
      iVar10 = iVar10 + 1;
      local_80 = local_80 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_2c8 != 0) {
    piVar1 = (int *)(local_2c8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_300);
    }
  }
  local_2c8 = 0;
  local_2f0 = 0;
  local_2d8 = 0;
                    /* catch() { ... } // from try @ 002e28c0 with catch @ 002e272c
                       catch() { ... } // from try @ 002e28f8 with catch @ 002e272c */
  local_2e0 = 0;
  local_2e8 = 0;
  if (0 < local_300._4_4_) {
    iVar10 = 0;
    puVar12 = local_2c0;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar10 = iVar10 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar10 < local_300._4_4_);
  }
  if (local_2b8 != &local_2b0) {
    cv::fastFree(local_2b8);
  }
  if (local_328 != 0) {
    piVar1 = (int *)(local_328 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate((Mat *)&local_360);
    }
  }
  local_328 = 0;
  local_350 = 0;
  local_338 = 0;
  local_340 = 0;
  local_348 = 0;
  if (0 < iStack_35c) {
    iVar10 = 0;
    do {
      *local_320 = 0;
      iVar10 = iVar10 + 1;
                    /* try { // try from 002e27bc to 003e27bf has its CatchHandler @ 002e2924 */
      local_320 = local_320 + 1;
    } while (iVar10 < iStack_35c);
  }
  if (local_318 != auStack_310) {
    cv::fastFree(local_318);
  }
  if (local_1a8 != 0) {
    piVar1 = (int *)(local_1a8 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1dc) {
    iVar10 = 0;
    do {
      *local_1a0 = 0;
      iVar10 = iVar10 + 1;
                    /* try { // try from 002e2834 to 003e2837 has its CatchHandler @ 002e28fc */
      local_1a0 = local_1a0 + 1;
    } while (iVar10 < local_1dc);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
  if (lStack_388 != 0) {
    piVar1 = (int *)(lStack_388 + 0x14);
    do {
      iVar10 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar10 == 1) {
                    /* try { // try from 002e29dc to 003e29df has its CatchHandler @ 002e2b4c */
      cv::Mat::deallocate(local_3c0);
    }
  }
  lStack_388 = 0;
  local_3b0 = 0;
  uStack_398 = 0;
  local_3a0 = 0;
  uStack_3a8 = 0;
  if (0 < local_3bc) {
    iVar10 = 0;
    do {
      *local_380 = 0;
      iVar10 = iVar10 + 1;
                    /* try { // try from 002e28ac to 003e28af has its CatchHandler @ 002e28e8 */
      local_380 = local_380 + 1;
    } while (iVar10 < local_3bc);
  }
  if (local_378 != auStack_370) {
                    /* try { // try from 002e28c0 to 003e28c3 has its CatchHandler @ 002e272c */
    cv::fastFree(local_378);
  }
                    /* try { // try from 002e28c8 to 003e28cb has its CatchHandler @ 002e28e8 */
  if (local_208 != 0) {
    piVar1 = (int *)(local_208 + 0x14);
    do {
      iVar10 = *piVar1;
                    /* try { // try from 002e28d4 to 003e28d7 has its CatchHandler @ 002e28fc */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar10 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 002e28e0 to 003e28e3 has its CatchHandler @ 002e2924 */
    if (iVar10 == 1) {
      cv::Mat::deallocate(aMStack_240);
    }
  }
                    /* catch() { ... } // from try @ 002e28ac with catch @ 002e28e8
                       catch() { ... } // from try @ 002e28c8 with catch @ 002e28e8 */
  local_208 = 0;
  local_230 = 0;
                    /* try { // try from 002e28f8 to 003e28fb has its CatchHandler @ 002e272c */
  local_218 = 0;
                    /* catch() { ... } // from try @ 002e2834 with catch @ 002e28fc
                       catch() { ... } // from try @ 002e28d4 with catch @ 002e28fc */
  local_220 = 0;
  local_228 = 0;
  if (0 < local_23c) {
    iVar10 = 0;
    do {
      *local_200 = 0;
      iVar10 = iVar10 + 1;
      local_200 = local_200 + 1;
    } while (iVar10 < local_23c);
  }
                    /* catch() { ... } // from try @ 002e27bc with catch @ 002e2924
                       catch() { ... } // from try @ 002e28e0 with catch @ 002e2924 */
  if (local_1f8 != auStack_1f0) {
    cv::fastFree(local_1f8);
  }
                    /* catch() { ... } // from try @ 002e2ad4 with catch @ 002e294c
                       catch() { ... } // from try @ 002e2b20 with catch @ 002e294c */
  return;
}


==================================================================

### FUNC 002e2cac (144 bytes) name=FUN_002e2cac

void FUN_002e2cac(undefined8 *param_1,ulong param_2)

{
  undefined8 *puVar1;
  void *pvVar2;
  
  if (param_2 <= (ulong)param_1[1]) {
    param_1[1] = param_2;
    return;
  }
  puVar1 = (undefined8 *)*param_1;
                    /* try { // try from 002e2cd8 to 003e2cdb has its CatchHandler @ 002e31d4 */
  if (puVar1 != param_1 + 2) {
    if (puVar1 != (void *)0x0) {
      operator_delete__(puVar1);
    }
    *param_1 = param_1 + 2;
    param_1[1] = 0x408;
  }
                    /* try { // try from 002e2cf4 to 003e2d57 has its CatchHandler @ 002e2b74 */
  if (param_2 < 0x409) {
    return;
  }
  pvVar2 = operator_new__(param_2);
  param_1[1] = param_2;
  *param_1 = pvVar2;
  return;
}


==================================================================

### FUNC 002e2d40 (11040 bytes) name=gemm

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::gemm(cv::_InputArray const&, cv::_InputArray const&, double, cv::_InputArray const&, double,
   cv::_OutputArray const&, int) */

void cv::gemm(_InputArray *param_1,_InputArray *param_2,double param_3,_InputArray *param_4,
             double param_5,_OutputArray *param_6,int param_7)

{
  float *pfVar1;
  double *pdVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int *piVar6;
  undefined4 *puVar7;
  undefined8 *puVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  undefined4 uVar12;
  int iVar13;
  int iVar14;
  uint uVar15;
  char cVar16;
  bool bVar17;
  uint uVar18;
  uint uVar19;
  undefined8 uVar20;
  int iVar21;
  uint uVar22;
  void *pvVar23;
  char *pcVar24;
  long lVar25;
  long lVar26;
  undefined4 *puVar27;
  undefined8 *puVar28;
  undefined8 *puVar29;
  uint uVar30;
  undefined8 *puVar31;
  uint *puVar32;
  Mat *pMVar33;
  undefined8 *puVar34;
  double *pdVar35;
  undefined4 *puVar36;
  undefined8 *puVar37;
  double *pdVar38;
  uint uVar39;
  long lVar40;
  undefined8 *puVar41;
  undefined8 *puVar42;
  long lVar43;
  ulong uVar44;
  undefined8 *puVar45;
  int iVar46;
  ulong uVar47;
  uint uVar48;
  long lVar49;
  ulong uVar50;
  double *pdVar51;
  int iVar52;
  String *pSVar53;
  long lVar54;
  uint uVar55;
  ulong uVar56;
  float fVar57;
  undefined8 uVar58;
  double dVar59;
  float fVar60;
  float fVar61;
  double dVar62;
  float fVar63;
  float fVar64;
  float fVar65;
  double dVar66;
  double dVar67;
  double dVar68;
  float fVar69;
  double dVar70;
  double dVar71;
  double dVar72;
  float fVar73;
  double dVar74;
  double dVar75;
  float fVar76;
  double dVar77;
  uint uVar78;
  uint uVar79;
  uint uVar80;
  uint uVar81;
  uint uVar82;
  float fVar83;
  double dVar84;
  float fVar85;
  double dVar86;
  float fVar87;
  double dVar88;
  float fVar89;
  double dVar90;
  float fVar91;
  float fVar92;
  float fVar93;
  double dVar94;
  uint local_850;
  double *local_840;
  undefined4 *local_830;
  ulong local_820;
  double *local_818;
  long local_810;
  Mat *local_7e0;
  code *local_7c8;
  code *local_7c0;
  double *local_7b8;
  int local_7a0;
  uint local_784;
  Mat *local_778;
  uint local_770;
  int local_76c;
  code *local_768;
  double *local_760;
  double *local_758;
  ulong local_750;
  double *local_748;
  int local_740;
  undefined8 local_710;
  undefined8 local_708;
  undefined8 local_700;
  undefined8 local_6f8;
  undefined8 local_6f0;
  undefined8 local_6e8;
  undefined8 local_6e0;
  undefined8 local_6d8;
  undefined8 local_6d0;
  undefined8 local_6c8;
  undefined8 local_6c0;
  undefined8 uStack_6b8;
  double *local_6b0;
  undefined8 local_6a8;
  undefined8 local_6a0;
  undefined8 local_698;
  undefined8 local_690;
  long local_688;
  undefined8 *local_680;
  double **local_678;
  double *local_670;
  undefined8 uStack_668;
  undefined8 local_660;
  undefined8 uStack_658;
  undefined8 local_650;
  undefined8 local_648;
  undefined8 local_640;
  undefined8 local_638;
  undefined8 local_630;
  long local_628;
  undefined8 *local_620;
  undefined8 *local_618;
  undefined8 local_610;
  undefined8 uStack_608;
  uint local_5f8;
  int local_5f4;
  uint local_5f0;
  undefined4 local_5ec;
  double *local_5e8;
  undefined8 local_5e0;
  undefined8 local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  long local_5c0;
  uint *local_5b8;
  ulong *local_5b0;
  ulong local_5a8;
  ulong local_5a0;
  uint local_598;
  int local_594;
  uint local_590;
  uint local_58c;
  double *local_588;
  undefined8 local_580;
  undefined8 local_578;
  undefined8 local_570;
  undefined8 local_568;
  long local_560;
  uint *local_558;
  double **local_550;
  double *local_548;
  long local_540;
  undefined4 local_538;
  int local_534;
  undefined4 local_530;
  undefined4 local_52c;
  double *local_528;
  undefined8 local_520;
  undefined8 local_518;
  undefined8 local_510;
  undefined8 local_508;
  long local_500;
  undefined4 *local_4f8;
  ulong *local_4f0;
  ulong local_4e8 [2];
  uint local_4d8;
  uint local_4d4;
  uint local_4d0;
  uint local_4cc;
  undefined4 *local_4c8;
  undefined4 *local_4c0;
  undefined4 *local_4b8;
  undefined4 *local_4b0;
  undefined8 local_4a8;
  undefined8 local_4a0;
  uint *local_498;
  long *local_490;
  long local_488;
  long local_480;
  uint local_478;
  uint local_474;
  undefined8 local_470;
  long local_468;
  long local_460;
  long local_458;
  long local_450;
  undefined8 local_448;
  undefined8 local_440;
  undefined8 *local_438;
  long *local_430;
  long local_428;
  double *local_420;
  undefined4 *local_418;
  Mat *local_410;
  undefined4 local_408;
  undefined4 local_404;
  
                    /* try { // try from 002e2d5c to 003e2d5f has its CatchHandler @ 002e318c */
                    /* try { // try from 002e2d78 to 003e2de3 has its CatchHandler @ 002e2b74 */
  iVar21 = _InputArray::kind(param_1);
  if (iVar21 == 0x10000) {
    pMVar33 = *(Mat **)(param_1 + 8);
    local_5b8 = &local_5f0;
    local_5b0 = &local_5a8;
    local_5f8 = *(uint *)pMVar33;
    local_5f4 = *(int *)(pMVar33 + 4);
    local_5f0 = *(uint *)(pMVar33 + 8);
    local_5ec = *(undefined4 *)(pMVar33 + 0xc);
    local_5e8 = *(double **)(pMVar33 + 0x10);
    local_5e0 = *(undefined8 *)(pMVar33 + 0x18);
    local_5d8 = *(undefined8 *)(pMVar33 + 0x20);
    local_5d0 = *(undefined8 *)(pMVar33 + 0x28);
    local_5c8 = *(undefined8 *)(pMVar33 + 0x30);
    local_5c0 = *(long *)(pMVar33 + 0x38);
    local_5a0 = 0;
    local_5a8 = 0;
    if (local_5c0 != 0) {
      piVar6 = (int *)(local_5c0 + 0x14);
      do {
        cVar16 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar17) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (*(int *)(pMVar33 + 4) < 3) {
                    /* try { // try from 002e5774 to 003e5777 has its CatchHandler @ 002e630c */
      local_5a8 = **(ulong **)(pMVar33 + 0x48);
      local_5a0 = (*(ulong **)(pMVar33 + 0x48))[1];
    }
    else {
      local_5f4 = 0;
      Mat::copySize((Mat *)&local_5f8,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar21 = _InputArray::kind(param_2);
  if (iVar21 == 0x10000) {
    pMVar33 = *(Mat **)(param_2 + 8);
    local_558 = &local_590;
    local_550 = &local_548;
    local_598 = *(uint *)pMVar33;
    local_594 = *(int *)(pMVar33 + 4);
    local_590 = *(uint *)(pMVar33 + 8);
    local_58c = *(uint *)(pMVar33 + 0xc);
    local_588 = *(double **)(pMVar33 + 0x10);
    local_580 = *(undefined8 *)(pMVar33 + 0x18);
    local_578 = *(undefined8 *)(pMVar33 + 0x20);
    local_570 = *(undefined8 *)(pMVar33 + 0x28);
    local_568 = *(undefined8 *)(pMVar33 + 0x30);
    local_560 = *(long *)(pMVar33 + 0x38);
                    /* try { // try from 002e55ac to 003e55af has its CatchHandler @ 002e62bc */
    local_540 = 0;
    local_548 = (double *)0x0;
    if (local_560 != 0) {
      piVar6 = (int *)(local_560 + 0x14);
      do {
        cVar16 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar17) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (*(int *)(pMVar33 + 4) < 3) {
      local_548 = (double *)**(long **)(pMVar33 + 0x48);
      local_540 = (*(long **)(pMVar33 + 0x48))[1];
    }
    else {
      local_594 = 0;
                    /* try { // try from 002e56c0 to 003e5713 has its CatchHandler @ 002e5350 */
      Mat::copySize((Mat *)&local_598,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (param_5 == 0.0) {
    local_678 = &local_670;
                    /* try { // try from 002e2de8 to 003e2deb has its CatchHandler @ 002e31cc */
    local_680 = &uStack_6b8;
    local_6b0 = (double *)0x0;
    local_6a8 = 0;
    uStack_668 = 0;
    local_670 = (double *)0x0;
    local_6a0 = 0;
                    /* try { // try from 002e2e04 to 003e2e5b has its CatchHandler @ 002e2b74 */
    local_698 = 0;
    local_690 = 0;
    local_688 = 0;
    uStack_6b8 = _UNK_002e59f8;
    local_6c0 = _DAT_002e59f0;
  }
  else {
    iVar21 = _InputArray::kind(param_4);
                    /* try { // try from 002e5530 to 003e5533 has its CatchHandler @ 002e62cc */
    if (iVar21 == 0x10000) {
      pMVar33 = *(Mat **)(param_4 + 8);
      local_680 = &uStack_6b8;
      local_678 = &local_670;
      uVar81 = *(uint *)pMVar33;
      local_6c0 = *(ulong *)pMVar33;
                    /* try { // try from 002e5620 to 003e5623 has its CatchHandler @ 002e62e0 */
      uStack_6b8 = *(undefined8 *)(pMVar33 + 8);
      local_6b0 = *(double **)(pMVar33 + 0x10);
      local_6a8 = *(undefined8 *)(pMVar33 + 0x18);
      local_6a0 = *(undefined8 *)(pMVar33 + 0x20);
      local_698 = *(undefined8 *)(pMVar33 + 0x28);
      local_690 = *(undefined8 *)(pMVar33 + 0x30);
      local_688 = *(long *)(pMVar33 + 0x38);
      uStack_668 = 0;
      local_670 = (double *)0x0;
      if (local_688 != 0) {
        piVar6 = (int *)(local_688 + 0x14);
        do {
          cVar16 = '\x01';
          bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
          if (bVar17) {
            *piVar6 = *piVar6 + 1;
            cVar16 = ExclusiveMonitorsStatus();
          }
        } while (cVar16 != '\0');
      }
                    /* try { // try from 002e5694 to 003e5697 has its CatchHandler @ 002e630c */
      if (*(int *)(pMVar33 + 4) < 3) {
        local_670 = (double *)**(undefined8 **)(pMVar33 + 0x48);
        uStack_668 = (*(undefined8 **)(pMVar33 + 0x48))[1];
      }
      else {
        local_6c0 = (ulong)uVar81;
        Mat::copySize((Mat *)&local_6c0,pMVar33);
      }
    }
    else {
                    /* try { // try from 002e5538 to 003e553b has its CatchHandler @ 002e62c4 */
      _InputArray::getMat_((int)param_4);
    }
  }
  uVar22 = local_5f8;
  uVar81 = local_5f8 & 0xfff;
  uVar10 = local_5b8[1];
  uVar11 = *local_5b8;
  if ((uVar81 != (local_598 & 0xfff)) || (1 < (local_5f8 & 0xff7) - 5)) {
    local_710 = 0;
    local_708 = 0;
    pvVar23 = (void *)String::allocate((String *)&local_710,0x62);
                    /* try { // try from 002e2e60 to 003e2e63 has its CatchHandler @ 002e31d0 */
    memcpy(pvVar23,&DAT_004693c0,0x62);
                    /* try { // try from 002e2e7c to 003e2edb has its CatchHandler @ 002e2b74 */
    error(-0xd7,(String *)&local_710,
          "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
          ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x37d);
    String::deallocate((String *)&local_710);
  }
  uVar79 = local_58c;
  uVar18 = local_590;
  uVar55 = param_7 & 3;
  uVar80 = uVar18;
  uVar78 = uVar10;
  if (uVar55 == 2) {
    uVar82 = uVar11;
    if (local_58c != uVar10) {
      pSVar53 = (String *)&local_6e0;
      local_6e0 = 0;
      local_6d8 = 0;
      pcVar24 = (char *)String::allocate(pSVar53,0x13);
      cVar16 = s_a_size_width____len_00469428[0x12];
      uVar20 = s_a_size_width____len_00469428._8_8_;
      uVar58 = s_a_size_width____len_00469428._0_8_;
      *(undefined2 *)(pcVar24 + 0x10) = s_a_size_width____len_00469428._16_2_;
      pcVar24[0x12] = cVar16;
      *(undefined8 *)pcVar24 = uVar58;
      *(undefined8 *)(pcVar24 + 8) = uVar20;
      error(-0xd7,pSVar53,
            "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x38e);
LAB_002e2f2c:
      String::deallocate(pSVar53);
      uVar78 = uVar79;
      uVar82 = uVar11;
    }
  }
  else {
    uVar82 = uVar10;
    if (uVar55 == 3) {
      uVar78 = uVar11;
      if (local_58c != uVar11) {
        pSVar53 = (String *)&local_660;
        local_660 = 0;
        uStack_658 = 0;
        pcVar24 = (char *)String::allocate(pSVar53,0x14);
        uVar20 = s_a_size_height____len_00469440._8_8_;
        uVar58 = s_a_size_height____len_00469440._0_8_;
        *(undefined4 *)(pcVar24 + 0x10) = s_a_size_height____len_00469440._16_4_;
        *(undefined8 *)pcVar24 = uVar58;
        *(undefined8 *)(pcVar24 + 8) = uVar20;
        error(-0xd7,pSVar53,
              "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x393);
LAB_002e5890:
        String::deallocate(pSVar53);
        uVar78 = uVar79;
      }
    }
    else {
      uVar80 = local_58c;
      if (uVar55 == 1) {
        uVar78 = uVar11;
        if (local_590 != uVar11) {
          pSVar53 = (String *)&local_6f0;
                    /* try { // try from 002e58bc to 003e58bf has its CatchHandler @ 002e630c */
          local_6f0 = 0;
          local_6e8 = 0;
          pcVar24 = (char *)String::allocate(pSVar53,0x14);
          uVar20 = s_a_size_height____len_00469440._8_8_;
          uVar58 = s_a_size_height____len_00469440._0_8_;
          *(undefined4 *)(pcVar24 + 0x10) = s_a_size_height____len_00469440._16_4_;
          *(undefined8 *)pcVar24 = uVar58;
          *(undefined8 *)(pcVar24 + 8) = uVar20;
          error(-0xd7,pSVar53,
                "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x389);
          uVar79 = uVar18;
          goto LAB_002e5890;
        }
      }
      else {
        uVar82 = uVar11;
        if (local_590 != uVar10) {
          pSVar53 = (String *)&local_700;
          local_700 = 0;
                    /* try { // try from 002e2ee0 to 003e2ee3 has its CatchHandler @ 002e31d8 */
          local_6f8 = 0;
          pcVar24 = (char *)String::allocate(pSVar53,0x13);
          cVar16 = s_a_size_width____len_00469428[0x12];
          uVar20 = s_a_size_width____len_00469428._8_8_;
          uVar58 = s_a_size_width____len_00469428._0_8_;
                    /* try { // try from 002e2efc to 003e2f4f has its CatchHandler @ 002e2b74 */
          *(undefined2 *)(pcVar24 + 0x10) = s_a_size_width____len_00469428._16_2_;
          pcVar24[0x12] = cVar16;
          *(undefined8 *)pcVar24 = uVar58;
          *(undefined8 *)(pcVar24 + 8) = uVar20;
          error(-0xd7,pSVar53,
                "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",900);
          uVar79 = uVar18;
          goto LAB_002e2f2c;
        }
      }
    }
  }
  if (local_6b0 != (double *)0x0) {
    if (local_6c0._4_4_ < 3) {
                    /* try { // try from 002e2f54 to 003e2f57 has its CatchHandler @ 002e31dc */
      lVar25 = (long)(int)uStack_6b8._4_4_ * (long)(int)(uint)uStack_6b8;
    }
    else {
      lVar43 = 0;
      lVar25 = 1;
      do {
        lVar26 = lVar43 * 4;
        lVar43 = lVar43 + 1;
        lVar25 = lVar25 * *(int *)((long)local_680 + lVar26);
      } while ((int)lVar43 < local_6c0._4_4_);
    }
    if (lVar25 != 0) {
      if (uVar81 == ((uint)local_6c0 & 0xfff)) {
        uVar55 = uVar82;
        uVar18 = uVar80;
        if (((uint)param_7 >> 2 & 1) == 0) {
          uVar55 = uVar80;
          uVar18 = uVar82;
        }
        if (((uint)uStack_6b8 == uVar18) && (uStack_6b8._4_4_ == uVar55)) goto LAB_002e2fc8;
      }
                    /* try { // try from 002e2f70 to 003e2fc3 has its CatchHandler @ 002e2b74 */
      local_418 = (undefined4 *)0x0;
      local_410 = (Mat *)0x0;
      pvVar23 = (void *)String::allocate((String *)&local_418,0xb2);
      memcpy(pvVar23,
             "C.type() == type && (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height))"
             ,0xb2);
      error(-0xd7,(String *)&local_418,
            "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x39b);
      String::deallocate((String *)&local_418);
    }
  }
LAB_002e2fc8:
                    /* try { // try from 002e2fc8 to 003e2fcb has its CatchHandler @ 002e31e0 */
                    /* try { // try from 002e2fe4 to 003e3037 has its CatchHandler @ 002e2b74 */
  _OutputArray::create(param_6,uVar82,uVar80,uVar81,-1,false,0);
  iVar21 = _InputArray::kind((_InputArray *)param_6);
  if (iVar21 == 0x10000) {
    pMVar33 = *(Mat **)(param_6 + 8);
    local_4f8 = &local_530;
    local_4f0 = local_4e8;
    local_538 = *(undefined4 *)pMVar33;
    local_534 = *(int *)(pMVar33 + 4);
                    /* try { // try from 002e44a0 to 003e44a3 has its CatchHandler @ 002e4edc */
    local_530 = *(undefined4 *)(pMVar33 + 8);
    local_52c = *(undefined4 *)(pMVar33 + 0xc);
    local_528 = *(double **)(pMVar33 + 0x10);
    local_520 = *(undefined8 *)(pMVar33 + 0x18);
    local_518 = *(undefined8 *)(pMVar33 + 0x20);
    local_510 = *(undefined8 *)(pMVar33 + 0x28);
    local_508 = *(undefined8 *)(pMVar33 + 0x30);
    local_500 = *(long *)(pMVar33 + 0x38);
    local_4e8[1] = 0;
    local_4e8[0] = 0;
    if (local_500 != 0) {
      piVar6 = (int *)(local_500 + 0x14);
      do {
        cVar16 = '\x01';
        bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar17) {
          *piVar6 = *piVar6 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar33 + 4)) {
      local_534 = 0;
      Mat::copySize((Mat *)&local_538,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_6);
  }
  local_7e0 = (Mat *)&local_538;
  local_850 = param_7;
  if (((uint)param_7 >> 2 & 1) == 0) {
LAB_002e4434:
    if ((local_850 == 0) && (uVar78 - 2 < 3)) {
      if ((uVar78 == uVar80) || (uVar82 == uVar78)) {
        if (uVar81 == 5) {
                    /* try { // try from 002e46f8 to 003e46fb has its CatchHandler @ 002e4f88 */
          uVar50 = local_5a8 >> 2;
          uVar56 = local_4e8[0] >> 2;
          uVar47 = (ulong)local_548 >> 2;
          if (local_6b0 == (double *)0x0) {
                    /* try { // try from 002e4da0 to 003e4da3 has its CatchHandler @ 002e4f88 */
            pdVar38 = (double *)0x531f40;
            uVar44 = 0;
          }
          else {
            uVar44 = (ulong)local_670 >> 2;
            pdVar38 = local_6b0;
          }
          if (uVar78 == 3) {
            if ((uVar80 == 3) && (local_528 != local_588)) {
              if (0 < (int)uVar82) {
                lVar43 = uVar47 * 4;
                uVar81 = 0;
                pdVar51 = local_5e8;
                pdVar35 = local_528;
                do {
                  fVar63 = *(float *)((long)pdVar51 + 4);
                  uVar81 = uVar81 + 1;
                    /* try { // try from 002e4cdc to 003e4cdf has its CatchHandler @ 002e4f80 */
                  fVar61 = *(float *)pdVar51;
                  fVar57 = *(float *)(pdVar51 + 1);
                  pdVar51 = (double *)((long)pdVar51 + uVar50 * 4);
                  fVar64 = *(float *)((long)local_588 + lVar43 + 4);
                  fVar65 = *(float *)((long)local_588 + 4);
                  fVar69 = *(float *)((long)local_588 + uVar47 * 8 + 4);
                  fVar76 = *(float *)((long)local_588 + lVar43 + 8);
                  fVar73 = *(float *)(local_588 + 1);
                  fVar60 = *(float *)(local_588 + uVar47 + 1);
                  *(float *)pdVar35 =
                       (float)((double)*(float *)pdVar38 * param_5 +
                              param_3 * (double)(fVar63 * *(float *)((long)local_588 + lVar43) +
                                                 *(float *)local_588 * fVar61 +
                                                ((float *)((long)local_588 + lVar43))[uVar47] *
                                                fVar57));
                  *(float *)((long)pdVar35 + 4) =
                       (float)((double)*(float *)((long)pdVar38 + 4) * param_5 +
                              param_3 * (double)(fVar63 * fVar64 + fVar65 * fVar61 + fVar69 * fVar57
                                                ));
                  pdVar2 = pdVar38 + 1;
                  pdVar38 = (double *)((long)pdVar38 + uVar44 * 4);
                  *(float *)(pdVar35 + 1) =
                       (float)((double)*(float *)pdVar2 * param_5 +
                              param_3 * (double)(fVar63 * fVar76 + fVar73 * fVar61 + fVar60 * fVar57
                                                ));
                  pdVar35 = (double *)((long)pdVar35 + uVar56 * 4);
                } while (uVar81 != uVar82);
              }
            }
            else {
              if (local_528 == local_5e8) goto LAB_002e4a7c;
              lVar43 = 4;
              if (pdVar38 == (double *)0x531f40) {
                lVar43 = 0;
                uVar44 = 1;
              }
                    /* try { // try from 002e4dd4 to 003e4dd7 has its CatchHandler @ 002e4f78 */
              if (0 < (int)uVar80) {
                lVar26 = uVar50 * 4;
                    /* try { // try from 002e4de0 to 003e4de3 has its CatchHandler @ 002e4f90 */
                    /* try { // try from 002e4dec to 003e4def has its CatchHandler @ 002e4f88 */
                    /* try { // try from 002e4df8 to 003e4dfb has its CatchHandler @ 002e4f80 */
                lVar25 = 0;
                    /* try { // try from 002e4e04 to 003e4e07 has its CatchHandler @ 002e5024 */
                    /* try { // try from 002e4e10 to 003e4e13 has its CatchHandler @ 002e4fcc */
                    /* try { // try from 002e4e1c to 003e4e1f has its CatchHandler @ 002e501c */
                do {
                  fVar63 = *(float *)((long)local_588 + lVar25 * 4 + uVar47 * 4);
                    /* try { // try from 002e4e28 to 003e4e2b has its CatchHandler @ 002e4ff8 */
                    /* try { // try from 002e4e34 to 003e4e4f has its CatchHandler @ 002e5034 */
                  fVar61 = *(float *)((long)local_588 + lVar25 * 4);
                  fVar57 = *(float *)((long)local_588 + lVar25 * 4 + uVar47 * 8);
                  fVar64 = *(float *)((long)local_5e8 + lVar26 + 4);
                  fVar65 = *(float *)((long)local_5e8 + lVar26);
                    /* try { // try from 002e4e5c to 003e4e5f has its CatchHandler @ 002e501c */
                  fVar69 = *(float *)((long)local_5e8 + lVar26 + 8);
                    /* try { // try from 002e4e6c to 003e4e6f has its CatchHandler @ 002e4f78 */
                  fVar76 = *(float *)((long)local_5e8 + uVar50 * 8 + 4);
                  fVar73 = ((float *)((long)local_5e8 + lVar26))[uVar50];
                  fVar60 = *(float *)(local_5e8 + uVar50 + 1);
                    /* catch() { ... } // from try @ 002e4b28 with catch @ 002e4e98 */
                  *(float *)((long)local_528 + lVar25 * 4) =
                       (float)((double)*(float *)pdVar38 * param_5 +
                              param_3 * (double)(fVar63 * *(float *)((long)local_5e8 + 4) +
                                                 fVar61 * *(float *)local_5e8 +
                                                fVar57 * *(float *)(local_5e8 + 1)));
                  *(float *)((long)local_528 + lVar25 * 4 + uVar56 * 4) =
                       (float)((double)*(float *)((long)pdVar38 + uVar44 * 4) * param_5 +
                              param_3 * (double)(fVar63 * fVar64 + fVar65 * fVar61 + fVar69 * fVar57
                                                ));
                  pdVar51 = pdVar38 + uVar44;
                  pdVar38 = (double *)((long)pdVar38 + lVar43);
                  *(float *)((long)local_528 + lVar25 * 4 + uVar56 * 8) =
                       (float)((double)*(float *)pdVar51 * param_5 +
                              param_3 * (double)(fVar63 * fVar76 + fVar73 * fVar61 + fVar60 * fVar57
                                                ));
                    /* try { // try from 002e4ed8 to 003e4edb has its CatchHandler @ 002e3cb0 */
                  lVar25 = lVar25 + 1;
                    /* catch() { ... } // from try @ 002e44a0 with catch @ 002e4edc */
                } while ((int)lVar25 < (int)uVar80);
              }
            }
          }
          else if (uVar78 == 4) {
            if ((uVar80 == 4) && (local_528 != local_588)) {
              if (0 < (int)uVar82) {
                lVar25 = uVar47 * 4;
                lVar43 = uVar47 * 0xc;
                uVar81 = 0;
                    /* try { // try from 002e4958 to 003e495b has its CatchHandler @ 002e501c */
                pdVar51 = local_5e8;
                pdVar35 = local_528;
                do {
                  fVar83 = *(float *)((long)pdVar51 + 4);
                  uVar81 = uVar81 + 1;
                  fVar76 = *(float *)pdVar51;
                  fVar73 = *(float *)(pdVar51 + 1);
                  fVar57 = *(float *)((long)pdVar51 + 0xc);
                  pdVar51 = (double *)((long)pdVar51 + uVar50 * 4);
                  fVar64 = *(float *)((long)local_588 + lVar25 + 4);
                  fVar69 = *(float *)((long)local_588 + 4);
                    /* try { // try from 002e49a4 to 003e49a7 has its CatchHandler @ 002e4fbc */
                  fVar87 = *(float *)((long)local_588 + lVar25 + 8);
                    /* try { // try from 002e49ac to 003e49c7 has its CatchHandler @ 002e501c */
                  fVar89 = *(float *)((long)local_588 + uVar47 * 8 + 4);
                  fVar85 = *(float *)(local_588 + 1);
                  fVar93 = *(float *)((long)local_588 + lVar25 + 0xc);
                  fVar92 = *(float *)((long)local_588 + 0xc);
                  fVar65 = *(float *)((long)local_588 + lVar43 + 4);
                  fVar61 = *(float *)(local_588 + uVar47 + 1);
                  fVar63 = *(float *)((long)local_588 + lVar43 + 8);
                    /* try { // try from 002e49f0 to 003e49f3 has its CatchHandler @ 002e3cb0 */
                  fVar60 = *(float *)((long)local_588 + lVar43 + 0xc);
                  fVar91 = *(float *)((long)local_588 + uVar47 * 8 + 0xc);
                  *(float *)pdVar35 =
                       (float)((double)*(float *)pdVar38 * param_5 +
                              param_3 * (double)(fVar83 * *(float *)((long)local_588 + lVar25) +
                                                 *(float *)local_588 * fVar76 +
                                                 *(float *)(local_588 + uVar47) * fVar73 +
                                                *(float *)((long)local_588 + lVar43) * fVar57));
                  *(float *)((long)pdVar35 + 4) =
                       (float)((double)*(float *)((long)pdVar38 + 4) * param_5 +
                              param_3 * (double)(fVar83 * fVar64 + fVar69 * fVar76 + fVar89 * fVar73
                                                + fVar65 * fVar57));
                  *(float *)(pdVar35 + 1) =
                       (float)((double)*(float *)(pdVar38 + 1) * param_5 +
                              param_3 * (double)(fVar83 * fVar87 + fVar85 * fVar76 + fVar61 * fVar73
                                                + fVar63 * fVar57));
                  pfVar1 = (float *)((long)pdVar38 + 0xc);
                  pdVar38 = (double *)((long)pdVar38 + uVar44 * 4);
                  *(float *)((long)pdVar35 + 0xc) =
                       (float)((double)*pfVar1 * param_5 +
                              param_3 * (double)(fVar83 * fVar93 + fVar92 * fVar76 + fVar91 * fVar73
                                                + fVar60 * fVar57));
                  pdVar35 = (double *)((long)pdVar35 + uVar56 * 4);
                } while (uVar81 != uVar82);
              }
            }
            else {
              if (local_528 == local_5e8) goto LAB_002e4a7c;
              lVar43 = 4;
              if (pdVar38 == (double *)0x531f40) {
                lVar43 = 0;
                uVar44 = 1;
              }
              if (0 < (int)uVar80) {
                lVar26 = uVar50 * 4;
                lVar25 = uVar50 * 0xc;
                    /* try { // try from 002e4b1c to 003e4b1f has its CatchHandler @ 002e501c */
                    /* try { // try from 002e4b28 to 003e4b2b has its CatchHandler @ 002e4e98 */
                    /* try { // try from 002e4b30 to 003e4b47 has its CatchHandler @ 002e501c */
                pdVar51 = local_588;
                pdVar35 = local_528;
                do {
                  fVar93 = *(float *)((long)pdVar51 + uVar47 * 4);
                  fVar92 = *(float *)pdVar51;
                  fVar91 = *(float *)(pdVar51 + uVar47);
                  fVar57 = *(float *)((long)pdVar51 + uVar47 * 0xc);
                  pdVar51 = (double *)((long)pdVar51 + 4);
                  fVar69 = *(float *)((long)local_5e8 + lVar26 + 4);
                  fVar61 = *(float *)((long)local_5e8 + lVar26);
                  fVar76 = *(float *)((long)local_5e8 + uVar50 * 8 + 4);
                  fVar83 = *(float *)((long)local_5e8 + lVar26 + 8);
                  fVar73 = *(float *)(local_5e8 + uVar50);
                  fVar89 = *(float *)((long)local_5e8 + lVar25 + 4);
                  fVar87 = *(float *)((long)local_5e8 + lVar25);
                  fVar65 = *(float *)(local_5e8 + uVar50 + 1);
                  fVar63 = *(float *)((long)local_5e8 + lVar26 + 0xc);
                  fVar64 = *(float *)((long)local_5e8 + uVar50 * 8 + 0xc);
                  fVar60 = *(float *)((long)local_5e8 + lVar25 + 0xc);
                  fVar85 = *(float *)((long)local_5e8 + lVar25 + 8);
                  *(float *)pdVar35 =
                       (float)((double)*(float *)pdVar38 * param_5 +
                              param_3 * (double)(fVar93 * *(float *)((long)local_5e8 + 4) +
                                                 fVar92 * *(float *)local_5e8 +
                                                 fVar91 * *(float *)(local_5e8 + 1) +
                                                fVar57 * *(float *)((long)local_5e8 + 0xc)));
                    /* try { // try from 002e4c18 to 003e4c1b has its CatchHandler @ 002e4f90 */
                  *(float *)((long)pdVar35 + uVar56 * 4) =
                       (float)((double)*(float *)((long)pdVar38 + uVar44 * 4) * param_5 +
                              param_3 * (double)(fVar93 * fVar69 + fVar61 * fVar92 + fVar83 * fVar91
                                                + fVar63 * fVar57));
                  *(float *)(pdVar35 + uVar56) =
                       (float)((double)*(float *)(pdVar38 + uVar44) * param_5 +
                              param_3 * (double)(fVar93 * fVar76 + fVar73 * fVar92 + fVar65 * fVar91
                                                + fVar64 * fVar57));
                  pfVar1 = (float *)((long)pdVar38 + uVar44 * 0xc);
                  pdVar38 = (double *)((long)pdVar38 + lVar43);
                  *(float *)((long)pdVar35 + uVar56 * 0xc) =
                       (float)((double)*pfVar1 * param_5 +
                              param_3 * (double)(fVar93 * fVar89 + fVar87 * fVar92 + fVar85 * fVar91
                                                + fVar60 * fVar57));
                  pdVar35 = (double *)((long)pdVar35 + 4);
                } while (pdVar51 != (double *)((long)local_588 + ((ulong)(uVar80 - 1) + 1) * 4));
              }
            }
          }
          else if ((uVar80 == 2) && (local_528 != local_588)) {
            if (0 < (int)uVar82) {
              uVar81 = 0;
                    /* try { // try from 002e476c to 003e476f has its CatchHandler @ 002e4f90 */
              pdVar51 = local_5e8;
              pdVar35 = local_528;
              do {
                fVar60 = *(float *)((long)pdVar51 + 4);
                uVar81 = uVar81 + 1;
                fVar57 = *(float *)pdVar51;
                pdVar51 = (double *)((long)pdVar51 + uVar50 * 4);
                fVar69 = *(float *)((long)local_588 + uVar47 * 4 + 4);
                fVar64 = *(float *)((long)local_588 + 4);
                *(float *)pdVar35 =
                     (float)((double)*(float *)pdVar38 * param_5 +
                            param_3 * (double)(fVar60 * *(float *)((long)local_588 + uVar47 * 4) +
                                              *(float *)local_588 * fVar57));
                pfVar1 = (float *)((long)pdVar38 + 4);
                    /* try { // try from 002e47e0 to 003e47e3 has its CatchHandler @ 002e4f78 */
                pdVar38 = (double *)((long)pdVar38 + uVar44 * 4);
                *(float *)((long)pdVar35 + 4) =
                     (float)((double)*pfVar1 * param_5 +
                            param_3 * (double)(fVar60 * fVar69 + fVar64 * fVar57));
                pdVar35 = (double *)((long)pdVar35 + uVar56 * 4);
              } while (uVar81 != uVar82);
            }
          }
          else {
            if (local_528 == local_5e8) goto LAB_002e4a7c;
            lVar43 = 4;
            if (pdVar38 == (double *)0x531f40) {
              lVar43 = 0;
              uVar44 = 1;
            }
            if (0 < (int)uVar80) {
              lVar25 = 0;
              do {
                    /* try { // try from 002e4854 to 003e4857 has its CatchHandler @ 002e501c */
                fVar60 = *(float *)((long)local_588 + lVar25 * 4 + uVar47 * 4);
                fVar57 = *(float *)((long)local_588 + lVar25 * 4);
                fVar69 = *(float *)((long)local_5e8 + uVar50 * 4 + 4);
                fVar64 = *(float *)((long)local_5e8 + uVar50 * 4);
                    /* try { // try from 002e4880 to 003e48d3 has its CatchHandler @ 002e3cb0 */
                *(float *)((long)local_528 + lVar25 * 4) =
                     (float)((double)*(float *)pdVar38 * param_5 +
                            param_3 * (double)(fVar60 * *(float *)((long)local_5e8 + 4) +
                                              fVar57 * *(float *)local_5e8));
                pfVar1 = (float *)((long)pdVar38 + uVar44 * 4);
                pdVar38 = (double *)((long)pdVar38 + lVar43);
                *(float *)((long)local_528 + lVar25 * 4 + uVar56 * 4) =
                     (float)((double)*pfVar1 * param_5 +
                            param_3 * (double)(fVar60 * fVar69 + fVar64 * fVar57));
                lVar25 = lVar25 + 1;
              } while ((int)lVar25 < (int)uVar80);
            }
          }
        }
        else {
          if (uVar81 != 6) {
            local_850 = 0;
            goto LAB_002e3038;
          }
          uVar47 = local_5a8 >> 3;
          uVar56 = local_4e8[0] >> 3;
          uVar50 = (ulong)local_548 >> 3;
          if (local_6b0 == (double *)0x0) {
            pdVar38 = (double *)0x531f50;
            uVar44 = 0;
          }
          else {
            uVar44 = (ulong)local_670 >> 3;
            pdVar38 = local_6b0;
          }
          if (uVar78 == 3) {
            if ((uVar80 == 3) && (local_528 != local_588)) {
              if (0 < (int)uVar82) {
                uVar81 = 0;
                    /* try { // try from 002e51c4 to 003e51c7 has its CatchHandler @ 002e5324 */
                pdVar51 = local_5e8;
                pdVar35 = local_528;
                do {
                  dVar70 = pdVar51[1];
                  uVar81 = uVar81 + 1;
                  dVar66 = *pdVar51;
                  dVar59 = pdVar51[2];
                  pdVar51 = pdVar51 + uVar47;
                  dVar67 = local_588[uVar50 + 1];
                  dVar68 = local_588[1];
                  dVar62 = local_588[uVar50 * 2 + 1];
                  dVar74 = local_588[uVar50 + 2];
                  dVar72 = local_588[2];
                  dVar71 = local_588[uVar50 * 2 + 2];
                  *pdVar35 = param_5 * *pdVar38 +
                             param_3 * (dVar70 * local_588[uVar50] + *local_588 * dVar66 +
                                       (local_588 + uVar50)[uVar50] * dVar59);
                    /* try { // try from 002e523c to 003e523f has its CatchHandler @ 002e52f8 */
                  pdVar35[1] = param_5 * pdVar38[1] +
                               param_3 * (dVar70 * dVar67 + dVar68 * dVar66 + dVar62 * dVar59);
                  pdVar2 = pdVar38 + 2;
                  pdVar38 = pdVar38 + uVar44;
                  pdVar35[2] = param_5 * *pdVar2 +
                               param_3 * (dVar70 * dVar74 + dVar72 * dVar66 + dVar71 * dVar59);
                  pdVar35 = pdVar35 + uVar56;
                } while (uVar81 != uVar82);
              }
            }
            else {
              if (local_528 == local_5e8) goto LAB_002e4a7c;
                    /* try { // try from 002e53fc to 003e541b has its CatchHandler @ 002e630c */
              lVar43 = 8;
              if (pdVar38 == (double *)0x531f50) {
                lVar43 = 0;
                uVar44 = 1;
              }
              if (0 < (int)uVar80) {
                lVar25 = 0;
                do {
                  dVar70 = local_588[uVar50 + lVar25];
                  dVar66 = local_588[lVar25];
                  dVar59 = local_588[uVar50 * 2 + lVar25];
                    /* try { // try from 002e5498 to 003e54bf has its CatchHandler @ 002e62bc */
                  dVar67 = local_5e8[uVar47 + 1];
                  dVar68 = local_5e8[uVar47];
                  dVar62 = local_5e8[uVar47 + 2];
                  dVar74 = local_5e8[uVar47 * 2 + 1];
                  dVar72 = (local_5e8 + uVar47)[uVar47];
                  dVar71 = local_5e8[uVar47 * 2 + 2];
                  local_528[lVar25] =
                       param_5 * *pdVar38 +
                       param_3 * (dVar70 * local_5e8[1] + dVar66 * *local_5e8 +
                                 dVar59 * local_5e8[2]);
                    /* try { // try from 002e54dc to 003e54df has its CatchHandler @ 002e62c4 */
                  local_528[uVar56 + lVar25] =
                       param_5 * pdVar38[uVar44] +
                       param_3 * (dVar70 * dVar67 + dVar68 * dVar66 + dVar62 * dVar59);
                  pdVar51 = pdVar38 + uVar44 * 2;
                  pdVar38 = (double *)((long)pdVar38 + lVar43);
                  local_528[uVar56 * 2 + lVar25] =
                       param_5 * *pdVar51 +
                       param_3 * (dVar70 * dVar74 + dVar72 * dVar66 + dVar71 * dVar59);
                  lVar25 = lVar25 + 1;
                } while ((int)lVar25 < (int)uVar80);
              }
            }
          }
          else if (uVar78 == 4) {
            if (uVar80 == 4) {
              if (local_528 != local_588) {
                if (0 < (int)uVar82) {
                    /* try { // try from 002e52c0 to 003e52cb has its CatchHandler @ 002e5140 */
                  uVar81 = 0;
                    /* try { // try from 002e52d4 to 003e52d7 has its CatchHandler @ 002e52f8 */
                    /* try { // try from 002e52e0 to 003e52e3 has its CatchHandler @ 002e5324 */
                    /* catch() { ... } // from try @ 002e523c with catch @ 002e52f8
                       catch() { ... } // from try @ 002e52d4 with catch @ 002e52f8 */
                  pdVar51 = local_5e8;
                  pdVar35 = local_528;
                  do {
                    dVar70 = pdVar51[1];
                    uVar81 = uVar81 + 1;
                    dVar66 = *pdVar51;
                    dVar62 = pdVar51[2];
                    /* try { // try from 002e5320 to 003e5323 has its CatchHandler @ 002e5140 */
                    /* catch() { ... } // from try @ 002e51c4 with catch @ 002e5324
                       catch() { ... } // from try @ 002e52e0 with catch @ 002e5324 */
                    dVar86 = local_588[uVar50 + 1];
                    dVar68 = local_588[1];
                    dVar59 = pdVar51[3];
                    pdVar51 = pdVar51 + uVar47;
                    dVar84 = local_588[uVar50 * 2 + 1];
                    /* catch() { ... } // from try @ 002e539c with catch @ 002e5350
                       catch() { ... } // from try @ 002e56c0 with catch @ 002e5350
                       catch() { ... } // from try @ 002e61e4 with catch @ 002e5350
                       catch() { ... } // from try @ 002e62a8 with catch @ 002e5350 */
                    dVar75 = local_588[uVar50 + 2];
                    dVar72 = local_588[2];
                    dVar90 = local_588[uVar50 + 3];
                    dVar71 = local_588[uVar50 * 3 + 1];
                    dVar88 = local_588[3];
                    dVar74 = local_588[uVar50 * 2 + 2];
                    dVar67 = local_588[uVar50 * 3 + 2];
                    dVar94 = local_588[uVar50 * 2 + 3];
                    dVar77 = local_588[uVar50 * 3 + 3];
                    /* try { // try from 002e539c to 003e53bf has its CatchHandler @ 002e5350 */
                    *pdVar35 = param_5 * *pdVar38 +
                               param_3 * (dVar70 * local_588[uVar50] + *local_588 * dVar66 +
                                          local_588[uVar50 * 2] * dVar62 +
                                         local_588[uVar50 * 3] * dVar59);
                    pdVar35[1] = param_5 * pdVar38[1] +
                                 param_3 * (dVar70 * dVar86 + dVar68 * dVar66 + dVar84 * dVar62 +
                                           dVar71 * dVar59);
                    pdVar35[2] = param_5 * pdVar38[2] +
                                 param_3 * (dVar70 * dVar75 + dVar72 * dVar66 + dVar74 * dVar62 +
                                           dVar67 * dVar59);
                    pdVar2 = pdVar38 + 3;
                    pdVar38 = pdVar38 + uVar44;
                    pdVar35[3] = param_5 * *pdVar2 +
                                 param_3 * (dVar70 * dVar90 + dVar88 * dVar66 + dVar94 * dVar62 +
                                           dVar77 * dVar59);
                    pdVar35 = pdVar35 + uVar56;
                  } while (uVar81 != uVar82);
                }
                goto LAB_002e4690;
              }
            }
            else if (0x10 < (int)uVar80) goto LAB_002e4a7c;
            if (local_528 == local_5e8) {
LAB_002e4a7c:
              local_850 = 0;
              goto LAB_002e3038;
            }
                    /* catch() { ... } // from try @ 002e49a4 with catch @ 002e4fbc */
                    /* catch() { ... } // from try @ 002e4594 with catch @ 002e4fcc
                       catch() { ... } // from try @ 002e4e10 with catch @ 002e4fcc */
            lVar43 = 8;
            if (pdVar38 == (double *)0x531f50) {
              lVar43 = 0;
              uVar44 = 1;
            }
            if (0 < (int)uVar80) {
                    /* catch() { ... } // from try @ 002e4520 with catch @ 002e4ff8
                       catch() { ... } // from try @ 002e4e28 with catch @ 002e4ff8 */
                    /* catch() { ... } // from try @ 002e3df4 with catch @ 002e501c
                       catch() { ... } // from try @ 002e3e80 with catch @ 002e501c
                       catch() { ... } // from try @ 002e4854 with catch @ 002e501c
                       catch() { ... } // from try @ 002e4958 with catch @ 002e501c
                       catch() { ... } // from try @ 002e49ac with catch @ 002e501c
                       catch() { ... } // from try @ 002e4b1c with catch @ 002e501c
                       catch() { ... } // from try @ 002e4b30 with catch @ 002e501c
                       catch() { ... } // from try @ 002e4e1c with catch @ 002e501c
                       catch() { ... } // from try @ 002e4e5c with catch @ 002e501c */
                    /* catch() { ... } // from try @ 002e4608 with catch @ 002e5024
                       catch() { ... } // from try @ 002e4e04 with catch @ 002e5024 */
                    /* catch() { ... } // from try @ 002e4610 with catch @ 002e502c */
                    /* catch() { ... } // from try @ 002e4284 with catch @ 002e5034
                       catch() { ... } // from try @ 002e4e34 with catch @ 002e5034 */
              pdVar51 = local_588;
              pdVar35 = local_528;
              do {
                dVar70 = pdVar51[uVar50];
                dVar66 = *pdVar51;
                dVar62 = pdVar51[uVar50 * 2];
                dVar67 = local_5e8[uVar47 + 1];
                dVar71 = local_5e8[uVar47];
                dVar59 = pdVar51[uVar50 * 3];
                pdVar51 = pdVar51 + 1;
                dVar84 = local_5e8[uVar47 * 2 + 1];
                dVar77 = local_5e8[uVar47 + 2];
                dVar74 = local_5e8[uVar47 * 2];
                dVar88 = local_5e8[uVar47 * 3 + 1];
                dVar72 = local_5e8[uVar47 + 3];
                dVar75 = local_5e8[uVar47 * 2 + 2];
                dVar86 = local_5e8[uVar47 * 3];
                dVar68 = local_5e8[uVar47 * 2 + 3];
                dVar94 = local_5e8[uVar47 * 3 + 2];
                dVar90 = local_5e8[uVar47 * 3 + 3];
                *pdVar35 = param_5 * *pdVar38 +
                           param_3 * (dVar70 * local_5e8[1] + dVar66 * *local_5e8 +
                                      dVar62 * local_5e8[2] + dVar59 * local_5e8[3]);
                pdVar35[uVar56] =
                     param_5 * pdVar38[uVar44] +
                     param_3 * (dVar70 * dVar67 + dVar71 * dVar66 + dVar77 * dVar62 +
                               dVar72 * dVar59);
                    /* catch() { ... } // from try @ 002e52c0 with catch @ 002e5140
                       catch() { ... } // from try @ 002e5320 with catch @ 002e5140 */
                pdVar35[uVar56 * 2] =
                     param_5 * pdVar38[uVar44 * 2] +
                     param_3 * (dVar70 * dVar84 + dVar74 * dVar66 + dVar75 * dVar62 +
                               dVar68 * dVar59);
                pdVar2 = pdVar38 + uVar44 * 3;
                pdVar38 = (double *)((long)pdVar38 + lVar43);
                pdVar35[uVar56 * 3] =
                     param_5 * *pdVar2 +
                     param_3 * (dVar70 * dVar88 + dVar86 * dVar66 + dVar94 * dVar62 +
                               dVar90 * dVar59);
                pdVar35 = pdVar35 + 1;
              } while (pdVar35 != local_528 + (ulong)(uVar80 - 1) + 1);
            }
          }
          else if ((uVar80 == 2) && (local_528 != local_588)) {
                    /* try { // try from 002e4608 to 003e460b has its CatchHandler @ 002e5024 */
            if (0 < (int)uVar82) {
                    /* try { // try from 002e4610 to 003e4613 has its CatchHandler @ 002e502c */
              uVar81 = 0;
              pdVar51 = local_5e8;
              pdVar35 = local_528;
              do {
                dVar62 = pdVar51[1];
                uVar81 = uVar81 + 1;
                dVar59 = *pdVar51;
                pdVar51 = pdVar51 + uVar47;
                dVar70 = local_588[uVar50 + 1];
                dVar66 = local_588[1];
                *pdVar35 = param_5 * *pdVar38 +
                           param_3 * (dVar62 * local_588[uVar50] + *local_588 * dVar59);
                pdVar2 = pdVar38 + 1;
                pdVar38 = pdVar38 + uVar44;
                    /* try { // try from 002e4684 to 003e4687 has its CatchHandler @ 002e4f80 */
                pdVar35[1] = param_5 * *pdVar2 + param_3 * (dVar62 * dVar70 + dVar66 * dVar59);
                pdVar35 = pdVar35 + uVar56;
              } while (uVar81 != uVar82);
            }
          }
          else {
            if (local_528 == local_5e8) goto LAB_002e4a7c;
            lVar43 = 8;
            if (pdVar38 == (double *)0x531f50) {
              lVar43 = 0;
              uVar44 = 1;
            }
            if (0 < (int)uVar80) {
              lVar25 = 0;
              do {
                dVar62 = local_588[uVar50 + lVar25];
                dVar59 = local_588[lVar25];
                dVar70 = local_5e8[uVar47 + 1];
                dVar66 = local_5e8[uVar47];
                local_528[lVar25] =
                     param_5 * *pdVar38 + param_3 * (dVar62 * local_5e8[1] + dVar59 * *local_5e8);
                pdVar51 = pdVar38 + uVar44;
                    /* catch() { ... } // from try @ 002e3ef4 with catch @ 002e4f78
                       catch() { ... } // from try @ 002e47e0 with catch @ 002e4f78
                       catch() { ... } // from try @ 002e4dd4 with catch @ 002e4f78
                       catch() { ... } // from try @ 002e4e6c with catch @ 002e4f78 */
                pdVar38 = (double *)((long)pdVar38 + lVar43);
                    /* catch() { ... } // from try @ 002e4684 with catch @ 002e4f80
                       catch() { ... } // from try @ 002e4cdc with catch @ 002e4f80
                       catch() { ... } // from try @ 002e4df8 with catch @ 002e4f80 */
                    /* catch() { ... } // from try @ 002e46f8 with catch @ 002e4f88
                       catch() { ... } // from try @ 002e4da0 with catch @ 002e4f88
                       catch() { ... } // from try @ 002e4dec with catch @ 002e4f88 */
                local_528[uVar56 + lVar25] =
                     param_5 * *pdVar51 + param_3 * (dVar62 * dVar70 + dVar66 * dVar59);
                lVar25 = lVar25 + 1;
                    /* catch() { ... } // from try @ 002e476c with catch @ 002e4f90
                       catch() { ... } // from try @ 002e4c18 with catch @ 002e4f90
                       catch() { ... } // from try @ 002e4de0 with catch @ 002e4f90 */
              } while ((int)lVar25 < (int)uVar80);
            }
          }
        }
LAB_002e4690:
        Mat::release(local_7e0);
        if (local_4f0 != local_4e8) {
          fastFree(local_4f0);
        }
        Mat::release((Mat *)&local_6c0);
        if (local_678 != &local_670) {
          fastFree(local_678);
        }
        Mat::release((Mat *)&local_598);
        if (local_550 != &local_548) {
          fastFree(local_550);
        }
        Mat::release((Mat *)&local_5f8);
        goto LAB_002e35b0;
      }
      local_850 = 0;
    }
  }
  else if (local_6b0 == local_528) {
    local_478 = 0x1010000;
    local_468 = 0;
    local_408 = 0;
    local_404 = 0;
    local_418 = (undefined4 *)CONCAT44(local_418._4_4_,0x2010000);
    local_470 = (Mat *)&local_6c0;
    local_410 = (Mat *)&local_6c0;
    transpose((_InputArray *)&local_478,(_OutputArray *)&local_418);
    local_850 = param_7 & 0xfffffffb;
    goto LAB_002e4434;
  }
LAB_002e3038:
  pdVar51 = local_548;
  pdVar38 = local_6b0;
                    /* try { // try from 002e303c to 003e303f has its CatchHandler @ 002e31e4 */
  local_618 = &local_610;
  local_620 = &uStack_658;
                    /* try { // try from 002e3058 to 003e30ab has its CatchHandler @ 002e2b74 */
  local_650 = 0;
  local_648 = 0;
  uStack_658 = _UNK_002e59f8;
  local_660 = _DAT_002e59f0;
  local_640 = 0;
  local_638 = 0;
  local_630 = 0;
  local_628 = 0;
  uStack_608 = 0;
  local_610 = 0;
  local_7b8 = local_6b0;
  if (local_6b0 != (double *)0x0) {
    local_7b8 = local_670;
  }
  local_418 = &local_408;
                    /* try { // try from 002e30b0 to 003e30b3 has its CatchHandler @ 002e31e8 */
  local_410 = (Mat *)0x408;
  if (uVar81 == 5) {
    local_768 = FUN_002c33c8;
    local_7c0 = FUN_002cb304;
    local_7c8 = FUN_002d742c;
  }
  else if (uVar81 == 6) {
    local_768 = FUN_002c3804;
    local_7c0 = FUN_002d5cc8;
    local_7c8 = FUN_002d845c;
  }
  else if (uVar81 == 0xd) {
    local_768 = FUN_002c3bfc;
    local_7c0 = FUN_002ce320;
    local_7c8 = FUN_002dacfc;
  }
  else {
                    /* try { // try from 002e30cc to 003e311f has its CatchHandler @ 002e2b74 */
    if (uVar81 != 0xe) {
      local_6d0 = 0;
      local_6c8 = 0;
      pcVar24 = (char *)String::allocate((String *)&local_6d0,0x10);
      uVar58 = s_type____CV_64FC2_00469510._8_8_;
      *(undefined8 *)pcVar24 = s_type____CV_64FC2_00469510._0_8_;
      *(undefined8 *)(pcVar24 + 8) = uVar58;
      error(-0xd7,(String *)&local_6d0,
            "void cv::gemm(cv::InputArray, cv::InputArray, double, cv::InputArray, double, cv::OutputArray, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x4c7);
      String::deallocate((String *)&local_6d0);
    }
                    /* try { // try from 002e3124 to 003e3127 has its CatchHandler @ 002e31a0 */
    local_768 = FUN_002c3fc4;
    local_7c0 = FUN_002d6340;
                    /* try { // try from 002e3140 to 003e319f has its CatchHandler @ 002e2b74 */
    local_7c8 = FUN_002d975c;
  }
  if ((local_528 == local_5e8) || (local_528 == local_588)) {
                    /* try { // try from 002e373c to 003e378f has its CatchHandler @ 002e31ec */
    lVar43 = (long)(int)uVar80 * (long)(int)uVar82 *
             (long)(int)((uVar22 >> 3 & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3));
    local_778 = (Mat *)&local_660;
  }
  else {
    lVar43 = 0;
    local_778 = local_7e0;
  }
  if ((((uVar80 == 1) || (uVar78 == 1)) && ((local_850 >> 1 & 1) == 0)) &&
     ((local_598 >> 0xe & 1) != 0)) {
    pdVar51 = (double *)0x0;
    if (uVar80 != 1) {
      pdVar51 = (double *)
                (long)(int)((uVar22 >> 3 & 0x1ff) + 1 <<
                           (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3));
    }
    local_850 = local_850 | 2;
  }
                    /* catch() { ... } // from try @ 002e2d5c with catch @ 002e318c */
  if (((int)uVar82 < 0x41) || ((int)uVar80 < 0x41)) {
    if (10000 < (int)uVar78) goto LAB_002e31ac;
LAB_002e31d8:
                    /* catch() { ... } // from try @ 002e2ee0 with catch @ 002e31d8 */
                    /* catch() { ... } // from try @ 002e2f54 with catch @ 002e31dc */
    if (lVar43 != 0) {
                    /* catch() { ... } // from try @ 002e2fc8 with catch @ 002e31e0 */
                    /* catch() { ... } // from try @ 002e303c with catch @ 002e31e4 */
                    /* catch() { ... } // from try @ 002e30b0 with catch @ 002e31e8 */
                    /* catch() { ... } // from try @ 002e3234 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e3290 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e32f4 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e336c with catch @ 002e31ec
                       catch() { ... } // from try @ 002e33ec with catch @ 002e31ec
                       catch() { ... } // from try @ 002e346c with catch @ 002e31ec
                       catch() { ... } // from try @ 002e34e0 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e3554 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e35c8 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e3654 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e36c8 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e373c with catch @ 002e31ec
                       catch() { ... } // from try @ 002e37b0 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e3824 with catch @ 002e31ec
                       catch() { ... } // from try @ 002e3838 with catch @ 002e31ec */
      FUN_002e2cac(&local_418,lVar43);
      local_4c8 = local_418;
      local_4d4 = 2;
      iVar21 = (uVar22 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3);
                    /* try { // try from 002e3234 to 003e3237 has its CatchHandler @ 002e31ec */
      local_498 = &local_4d0;
      local_490 = &local_488;
      local_488 = (long)(int)uVar80 * (long)iVar21;
      local_4d8 = uVar81 + 0x42ff0000 | 0x4000;
      local_480 = (long)iVar21;
      local_4b8 = (undefined4 *)((long)local_418 + local_488 * (int)uVar82);
      local_4a8 = 0;
      local_4a0 = 0;
      local_4d0 = uVar82;
      local_4cc = uVar80;
      local_4c0 = local_4c8;
      local_4b0 = local_4b8;
                    /* try { // try from 002e3288 to 003e328b has its CatchHandler @ 002e3828 */
      Mat::operator=((Mat *)&local_660,(Mat *)&local_4d8);
                    /* try { // try from 002e3290 to 003e32cf has its CatchHandler @ 002e31ec */
      Mat::release((Mat *)&local_4d8);
      if (local_490 != &local_488) {
        fastFree(local_490);
      }
    }
    local_4d8 = uVar10;
    local_4d4 = uVar11;
    local_478 = uVar80;
    local_474 = uVar82;
                    /* try { // try from 002e32ec to 003e32ef has its CatchHandler @ 002e3814 */
                    /* try { // try from 002e32f4 to 003e334b has its CatchHandler @ 002e31ec */
    (*local_7c8)(param_3,param_5,local_5e8,local_5a8,local_588,pdVar51,pdVar38,local_7b8,
                 *(undefined8 *)(local_778 + 0x10),*(undefined8 *)(local_778 + 0x50),&local_4d8,
                 &local_478,local_850);
  }
  else {
                    /* catch() { ... } // from try @ 002e3124 with catch @ 002e31a0 */
                    /* catch() { ... } // from try @ 002e2c74 with catch @ 002e31a4 */
    if ((int)uVar78 < 0xb) goto LAB_002e31d8;
LAB_002e31ac:
                    /* try { // try from 002e31b4 to 003e31b7 has its CatchHandler @ 002e2b74 */
                    /* catch() { ... } // from try @ 002e2c10 with catch @ 002e31b8 */
                    /* try { // try from 002e31c8 to 003e31cb has its CatchHandler @ 002e2b74 */
                    /* catch() { ... } // from try @ 002e2de8 with catch @ 002e31cc */
                    /* catch() { ... } // from try @ 002e2e60 with catch @ 002e31d0 */
                    /* catch() { ... } // from try @ 002e2cd8 with catch @ 002e31d4 */
    if (((int)uVar80 < 0x81 && (int)uVar82 < 0x81) && ((int)uVar78 < 0x81)) goto LAB_002e31d8;
    uVar10 = local_850 & 2;
    uVar11 = local_850 & 1;
                    /* try { // try from 002e3794 to 003e3797 has its CatchHandler @ 002e3810 */
    iVar21 = (uVar22 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3);
    iVar13 = iVar21 << ((uVar22 & 7) == 5);
                    /* try { // try from 002e37b0 to 003e380f has its CatchHandler @ 002e31ec */
    if ((local_850 & 1) == 0) {
      local_820 = (ulong)iVar21;
      local_750 = local_5a8;
    }
    else {
      local_750 = (ulong)iVar21;
      local_820 = local_5a8;
    }
    local_840 = (double *)(long)iVar21;
    if (uVar10 == 0) {
      local_748 = local_840;
      local_818 = pdVar51;
    }
    else {
      local_818 = local_840;
      local_748 = pdVar51;
    }
    if (local_6b0 == (double *)0x0) {
LAB_002e42d8:
      local_758 = (double *)0x0;
      local_850 = local_850 & 0xfffffffb;
      local_760 = (double *)0x0;
    }
    else {
      if (local_6c0._4_4_ < 3) {
                    /* catch() { ... } // from try @ 002e33d0 with catch @ 002e37fc */
        lVar26 = (long)(int)uStack_6b8._4_4_ * (long)(int)(uint)uStack_6b8;
      }
      else {
        lVar25 = 0;
        lVar26 = 1;
        do {
          lVar54 = lVar25 * 4;
          lVar25 = lVar25 + 1;
          lVar26 = lVar26 * *(int *)((long)local_680 + lVar54);
        } while ((int)lVar25 < local_6c0._4_4_);
      }
      if (lVar26 == 0) goto LAB_002e42d8;
      if ((local_850 >> 2 & 1) == 0) {
                    /* catch() { ... } // from try @ 002e3794 with catch @ 002e3810 */
        local_760 = local_670;
                    /* catch() { ... } // from try @ 002e32ec with catch @ 002e3814 */
        local_758 = local_840;
      }
      else {
        local_758 = local_670;
        local_760 = local_840;
      }
    }
                    /* try { // try from 002e3824 to 003e3827 has its CatchHandler @ 002e31ec */
    if ((int)uVar82 < 0x80) {
                    /* catch() { ... } // from try @ 002e3288 with catch @ 002e3828 */
      uVar22 = 0;
      local_784 = uVar82;
      if (uVar82 != 0) {
        uVar22 = 0x4000 / (int)uVar82;
      }
    }
    else {
      uVar22 = 0x80;
      local_784 = 0x80;
    }
                    /* try { // try from 002e3838 to 003e383b has its CatchHandler @ 002e31ec */
                    /* catch() { ... } // from try @ 002e3450 with catch @ 002e383c */
                    /* catch() { ... } // from try @ 002e34c4 with catch @ 002e3840 */
    if ((int)uVar80 < 0x80) {
                    /* catch() { ... } // from try @ 002e3350 with catch @ 002e3844 */
                    /* catch() { ... } // from try @ 002e3538 with catch @ 002e3848 */
                    /* catch() { ... } // from try @ 002e35ac with catch @ 002e384c */
      uVar55 = 0;
      local_770 = uVar80;
      if (uVar80 != 0) {
        uVar55 = 0x4000 / (int)uVar80;
      }
    }
    else {
      uVar55 = 0x80;
      local_770 = 0x80;
    }
                    /* catch() { ... } // from try @ 002e3638 with catch @ 002e3850 */
                    /* catch() { ... } // from try @ 002e36ac with catch @ 002e3854 */
                    /* catch() { ... } // from try @ 002e3720 with catch @ 002e3858 */
    if ((int)uVar78 < (int)uVar22) {
      uVar22 = uVar78;
    }
                    /* catch() { ... } // from try @ 002e38b4 with catch @ 002e3860
                       catch() { ... } // from try @ 002e3918 with catch @ 002e3860
                       catch() { ... } // from try @ 002e3b3c with catch @ 002e3860
                       catch() { ... } // from try @ 002e3c54 with catch @ 002e3860
                       catch() { ... } // from try @ 002e3c88 with catch @ 002e3860
                       catch() { ... } // from try @ 002e3c9c with catch @ 002e3860 */
    if ((int)uVar55 < (int)uVar22) {
      uVar22 = uVar55;
    }
    if ((0x4000 < (int)(local_784 * uVar22)) && (local_784 = 0, uVar22 != 0)) {
      local_784 = 0x4000 / (int)uVar22;
    }
    if ((0x4000 < (int)(local_770 * uVar22)) && (local_770 = 0, uVar22 != 0)) {
      local_770 = 0x4000 / (int)uVar22;
    }
                    /* try { // try from 002e38b4 to 003e38b7 has its CatchHandler @ 002e3860 */
    lVar25 = 0;
    uVar55 = local_770 + 7;
    if (-1 < (int)local_770) {
      uVar55 = local_770;
    }
    uVar18 = uVar22 + 7;
    if (-1 < (int)uVar22) {
      uVar18 = uVar22;
    }
    iVar52 = uVar22 + ((int)uVar18 >> 3);
    lVar26 = (long)(int)(local_770 + ((int)uVar55 >> 3) + 2 & 0xfffffffe) * (long)(iVar52 + 1);
    lVar54 = lVar26 * (long)local_840;
    lVar26 = lVar26 * iVar13;
    if (uVar11 != 0) {
      uVar55 = local_784 + 7;
                    /* try { // try from 002e3910 to 003e3913 has its CatchHandler @ 002e3c8c */
                    /* try { // try from 002e3918 to 003e3aeb has its CatchHandler @ 002e3860 */
      if (-1 < (int)local_784) {
        uVar55 = local_784;
      }
      local_850 = local_850 & 0xfffffffe;
      lVar25 = (long)(int)(iVar52 + 2U & 0xfffffffe) * (long)local_840 *
               (long)(int)(local_784 + ((int)uVar55 >> 3) + 1);
    }
    FUN_002e2cac(&local_418,lVar54 + lVar26 + lVar43 + lVar25);
    puVar27 = local_418;
    puVar31 = (undefined8 *)((long)local_418 + lVar26);
    puVar8 = (undefined8 *)((long)puVar31 + lVar54);
    if (uVar11 == 0) {
      puVar8 = (undefined8 *)0x0;
    }
    if (lVar43 != 0) {
      local_468 = (long)puVar31 + lVar25 + lVar54;
      local_428 = (long)local_840 * (long)(int)uVar80;
      local_438 = &local_470;
      local_430 = &local_428;
      local_478 = uVar81 + 0x42ff0000 | 0x4000;
      local_458 = local_468 + local_428 * (int)uVar82;
      local_420 = local_840;
      local_474 = 2;
      local_470 = (Mat *)CONCAT44(uVar80,uVar82);
      local_448 = 0;
      local_440 = 0;
      local_460 = local_468;
      local_450 = local_458;
      Mat::operator=((Mat *)&local_660,(Mat *)&local_478);
      Mat::release((Mat *)&local_478);
      if (local_430 != &local_428) {
        fastFree(local_430);
      }
    }
    if (0 < (int)uVar82) {
      local_76c = 0;
      iVar52 = local_76c;
LAB_002e39e0:
      do {
        local_76c = iVar52;
        iVar52 = local_76c + local_784;
        if ((iVar52 < (int)uVar82) && ((int)(local_784 + iVar52 * 8) <= (int)(uVar82 << 3))) {
          uVar81 = local_784;
          if ((int)uVar80 < 1) goto LAB_002e39e0;
LAB_002e3a28:
          lVar43 = (long)local_76c;
          local_740 = 0;
          do {
            lVar25 = (long)pdVar38 + lVar43 * (long)local_760 + (long)local_740 * (long)local_758;
            lVar54 = *(long *)(local_778 + 0x10);
            lVar26 = *(long *)(local_778 + 0x50);
            if (((int)uVar80 <= (int)(local_740 + local_770)) ||
               (uVar55 = local_770,
               (int)(uVar80 << 3) < (int)(local_770 + (local_740 + local_770) * 8))) {
              uVar55 = uVar80 - local_740;
            }
            local_850 = local_850 & 0xf;
            if ((int)uVar22 < (int)uVar78) {
              local_810 = (long)(int)(uVar55 * iVar13);
              local_830 = puVar27;
              if (0 < (int)uVar78) {
LAB_002e3b0c:
                iVar52 = 0;
                do {
                    /* try { // try from 002e3b34 to 003e3b37 has its CatchHandler @ 002e3c44 */
                    /* try { // try from 002e3b3c to 003e3b3f has its CatchHandler @ 002e3860 */
                  puVar29 = (undefined8 *)
                            ((long)local_5e8 + lVar43 * local_750 + (long)iVar52 * local_820);
                  puVar34 = (undefined8 *)
                            ((long)local_588 +
                            (long)local_740 * (long)local_748 + (long)iVar52 * (long)local_818);
                  if (((int)uVar78 <= (int)(uVar22 + iVar52)) ||
                     (uVar18 = uVar22, (int)(uVar78 << 3) < (int)(uVar22 + (uVar22 + iVar52) * 8)))
                  {
                    uVar18 = uVar78 - iVar52;
                  }
                  puVar28 = puVar29;
                  uVar47 = local_5a8;
                  local_474 = uVar81;
                  local_478 = uVar18;
                    /* try { // try from 002e3ba0 to 003e3ba3 has its CatchHandler @ 002e3c64 */
                  if (((uVar11 != 0) &&
                      (local_474 = uVar18, local_478 = uVar81,
                      (puVar8 != (undefined8 *)0x0 & uVar11) != 0)) &&
                     (uVar47 = (ulong)(int)(uVar18 * iVar21), puVar28 = puVar8, local_474 = uVar81,
                     local_478 = uVar18, 0 < (int)uVar81)) {
                    if (iVar21 == 8) {
                      iVar46 = 0;
                      puVar45 = puVar8;
                      do {
                        while ((int)(uVar18 * 2) < 1) {
                          iVar46 = iVar46 + 1;
                          puVar45 = (undefined8 *)((long)puVar45 + uVar47);
                          puVar29 = puVar29 + 1;
                          if ((int)uVar81 <= iVar46) goto LAB_002e3bfc;
                        }
                        puVar37 = puVar29;
                        puVar41 = puVar45;
                        do {
                          uVar58 = *puVar37;
                          puVar37 = (undefined8 *)((long)puVar37 + local_5a8);
                          puVar42 = puVar41 + 1;
                          *puVar41 = uVar58;
                          puVar41 = puVar42;
                        } while (puVar42 != puVar45 + (ulong)(uVar18 * 2 - 1 >> 1) + 1);
                        iVar46 = iVar46 + 1;
                        puVar45 = (undefined8 *)((long)puVar45 + uVar47);
                        puVar29 = puVar29 + 1;
                      } while (iVar46 < (int)uVar81);
                    }
                    else if (iVar21 == 0x10) {
                      iVar46 = 0;
                      puVar45 = puVar8;
                      do {
                        if (0 < (int)(uVar18 * 4)) {
                          puVar36 = (undefined4 *)((long)puVar45 + 4);
                          puVar37 = puVar29;
                          do {
                            puVar7 = puVar36 + 4;
                            uVar12 = *(undefined4 *)puVar37;
                            *puVar36 = *(undefined4 *)((long)puVar37 + 4);
                            puVar36[-1] = uVar12;
                            puVar41 = puVar37 + 1;
                            uVar12 = *(undefined4 *)((long)puVar37 + 0xc);
                            puVar37 = (undefined8 *)((long)puVar37 + local_5a8);
                            puVar36[1] = *(undefined4 *)puVar41;
                            puVar36[2] = uVar12;
                            puVar36 = puVar7;
                          } while (puVar7 != (undefined4 *)
                                             ((long)puVar45 +
                                             (ulong)(uVar18 * 4 - 1 >> 2) * 0x10 + 0x14));
                        }
                        iVar46 = iVar46 + 1;
                        puVar45 = (undefined8 *)((long)puVar45 + uVar47);
                        puVar29 = puVar29 + 2;
                      } while (iVar46 < (int)uVar81);
                    }
                    else if (iVar21 == 4) {
                      iVar46 = 0;
                      puVar45 = puVar8;
                      do {
                        if (0 < (int)uVar18) {
                          lVar26 = 0;
                          puVar37 = puVar29;
                          do {
                            uVar12 = *(undefined4 *)puVar37;
                            puVar37 = (undefined8 *)((long)puVar37 + local_5a8);
                            *(undefined4 *)((long)puVar45 + lVar26 * 4) = uVar12;
                            lVar26 = lVar26 + 1;
                          } while ((int)lVar26 < (int)uVar18);
                        }
                        iVar46 = iVar46 + 1;
                        puVar45 = (undefined8 *)((long)puVar45 + uVar47);
                        puVar29 = (undefined8 *)((long)puVar29 + 4);
                      } while (iVar46 < (int)uVar81);
                    }
                  }
LAB_002e3bfc:
                  puVar29 = puVar34;
                  pdVar35 = pdVar51;
                  if ((int)uVar55 < (int)uVar80) {
                    uVar79 = uVar18;
                    uVar48 = uVar55;
                    if (uVar10 != 0) {
                      uVar79 = uVar55;
                      uVar48 = uVar18;
                    }
                    iVar46 = uVar79 - 1;
                    local_7a0 = (int)((ulong)local_840 >> 2);
                    local_7a0 = uVar48 * local_7a0;
                    pdVar35 = (double *)(long)(int)(iVar21 * uVar48);
                    puVar29 = puVar31;
                    if (uVar79 != 0) {
                    /* catch() { ... } // from try @ 002e3b34 with catch @ 002e3c44 */
                      uVar15 = local_7a0 - 4U >> 2;
                      uVar79 = uVar15 + 1;
                    /* try { // try from 002e3c54 to 003e3c57 has its CatchHandler @ 002e3860 */
                      uVar48 = uVar79 * 4;
                    /* catch() { ... } // from try @ 002e3ba0 with catch @ 002e3c64 */
                      if (local_7a0 + -3 < 1) {
                        uVar48 = 0;
                      }
                      uVar3 = uVar48 + 1;
                      uVar19 = local_7a0 - uVar48;
                    /* try { // try from 002e3c88 to 003e3c8b has its CatchHandler @ 002e3860 */
                      uVar4 = uVar48 + 2;
                    /* catch() { ... } // from try @ 002e3910 with catch @ 002e3c8c */
                    /* try { // try from 002e3c9c to 003e3c9f has its CatchHandler @ 002e3860 */
                      lVar54 = ((long)(int)uVar48 + 4) * 4;
                    /* catch() { ... } // from try @ 002e3cfc with catch @ 002e3cb0
                       catch() { ... } // from try @ 002e4880 with catch @ 002e3cb0
                       catch() { ... } // from try @ 002e49f0 with catch @ 002e3cb0
                       catch() { ... } // from try @ 002e4dc8 with catch @ 002e3cb0
                       catch() { ... } // from try @ 002e4ed8 with catch @ 002e3cb0 */
                      lVar49 = (long)(int)uVar48 * 4;
                      lVar26 = lVar54 + -0x10;
                      uVar56 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
                      uVar50 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar4 << 2;
                      puVar45 = puVar31;
                      do {
                        if (0 < local_7a0 + -3) {
                    /* try { // try from 002e3cfc to 003e3d1f has its CatchHandler @ 002e3cb0 */
                          if ((puVar45 < puVar34 + 8 && puVar34 < puVar45 + 8) || (uVar79 < 5)) {
                            puVar36 = (undefined4 *)((long)puVar45 + 4);
                            puVar37 = puVar34;
                            do {
                              puVar7 = puVar36 + 4;
                              uVar12 = *(undefined4 *)((long)puVar37 + 4);
                              puVar36[-1] = *(undefined4 *)puVar37;
                              *puVar36 = uVar12;
                              uVar12 = *(undefined4 *)(puVar37 + 1);
                              puVar36[2] = *(undefined4 *)((long)puVar37 + 0xc);
                              puVar36[1] = uVar12;
                              puVar36 = puVar7;
                              puVar37 = puVar37 + 2;
                            } while (puVar7 != (undefined4 *)
                                               ((long)puVar45 + (ulong)uVar15 * 0x10 + 0x14));
                          }
                          else {
                            uVar39 = 0;
                            puVar37 = puVar45;
                            puVar41 = puVar34;
                            do {
                              uVar58 = *puVar41;
                              uVar39 = uVar39 + 1;
                              puVar37[1] = puVar41[1];
                              *puVar37 = uVar58;
                              puVar37 = puVar37 + 2;
                              puVar41 = puVar41 + 2;
                            } while (uVar39 < uVar79);
                          }
                        }
                        if ((int)uVar48 < local_7a0) {
                          puVar36 = (undefined4 *)((long)puVar34 + lVar26);
                          if (((undefined4 *)((long)puVar45 + lVar26) <
                               (undefined4 *)((long)puVar34 + lVar54) &&
                               puVar36 < (undefined4 *)((long)puVar45 + lVar54)) || (uVar19 < 0xc))
                          {
                            lVar40 = 0;
                            do {
                              *(undefined4 *)((long)puVar45 + lVar26 + lVar40) =
                                   *(undefined4 *)((long)puVar36 + lVar40);
                              lVar40 = lVar40 + 4;
                            } while (lVar40 != ((ulong)((local_7a0 + -1) - uVar48) + 1) * 4);
                          }
                          else {
                            uVar39 = -((uint)((ulong)puVar36 >> 2) & 3) & 3;
                            uVar9 = uVar19;
                            if (uVar39 < uVar19) {
                              uVar9 = uVar39;
                            }
                            uVar39 = uVar48;
                            if (((uVar9 != 0) &&
                                (*(undefined4 *)((long)puVar45 + lVar49) =
                                      *(undefined4 *)((long)puVar34 + lVar49), uVar39 = uVar3,
                                uVar9 != 1)) &&
                               (*(undefined4 *)((long)puVar45 + uVar56) =
                                     *(undefined4 *)((long)puVar34 + uVar56), uVar39 = uVar4,
                               uVar9 == 3)) {
                              *(undefined4 *)((long)puVar45 + uVar50) =
                                   *(undefined4 *)((long)puVar34 + uVar50);
                              uVar39 = uVar48 + 3;
                            }
                            uVar30 = 0;
                            lVar40 = lVar26 + (ulong)uVar9 * 4;
                            uVar5 = ((uVar19 - uVar9) - 4 >> 2) + 1;
                            iVar14 = uVar5 * 4;
                            puVar37 = (undefined8 *)((long)puVar45 + lVar40);
                            puVar41 = (undefined8 *)((long)puVar34 + lVar40);
                            do {
                              uVar58 = *puVar41;
                              uVar30 = uVar30 + 1;
                              puVar37[1] = puVar41[1];
                              *puVar37 = uVar58;
                              puVar37 = puVar37 + 2;
                              puVar41 = puVar41 + 2;
                            } while (uVar30 < uVar5);
                            uVar39 = iVar14 + uVar39;
                            if (uVar19 - uVar9 != iVar14) {
                              uVar44 = -(ulong)(uVar39 >> 0x1f) & 0xfffffffc00000000 |
                                       (ulong)uVar39 << 2;
                    /* try { // try from 002e3df4 to 003e3e6f has its CatchHandler @ 002e501c */
                              *(undefined4 *)((long)puVar45 + uVar44) =
                                   *(undefined4 *)((long)puVar34 + uVar44);
                              if (((int)(uVar39 + 1) < local_7a0) &&
                                 (*(undefined4 *)((long)puVar45 + uVar44 + 4) =
                                       *(undefined4 *)((long)puVar34 + uVar44 + 4),
                                 (int)(uVar39 + 2) < local_7a0)) {
                                *(undefined4 *)((long)puVar45 + uVar44 + 8) =
                                     *(undefined4 *)((long)puVar34 + uVar44 + 8);
                              }
                            }
                          }
                        }
                        iVar46 = iVar46 + -1;
                        puVar34 = (undefined8 *)((long)puVar34 + (long)pdVar51);
                        puVar45 = (undefined8 *)((long)puVar45 + (long)pdVar35);
                      } while (iVar46 != -1);
                    }
                  }
                  local_4d8 = uVar55;
                  local_4d4 = uVar81;
                  if ((int)uVar22 < (int)uVar78) {
                    /* try { // try from 002e3e78 to 003e3e7b has its CatchHandler @ 002e4f98 */
                    /* try { // try from 002e3e80 to 003e3ebf has its CatchHandler @ 002e501c */
                    (*local_7c0)();
                  }
                  else {
                    (*local_7c8)(param_3,param_5,puVar28,uVar47,puVar29,pdVar35,lVar25,local_7b8,
                                 local_830,local_810,&local_478,&local_4d8,local_850);
                  }
                  iVar52 = iVar52 + uVar18;
                  local_850 = local_850 | 0x10;
                } while (iVar52 < (int)uVar78);
                if ((int)uVar78 <= (int)uVar22) goto LAB_002e3eb8;
                lVar54 = *(long *)(local_778 + 0x10);
                lVar26 = *(long *)(local_778 + 0x50);
              }
              local_478 = uVar55;
              local_474 = uVar81;
              (*local_768)(param_3,param_5,lVar25,local_7b8,local_830,local_810,
                           lVar54 + (long)(local_740 * iVar21) +
                                    lVar43 * **(long **)(local_778 + 0x48),lVar26,&local_478,
                           local_850);
            }
            else if (0 < (int)uVar78) {
              local_830 = (undefined4 *)(lVar54 + (long)(local_740 * iVar21) + lVar43 * lVar26);
              local_810 = lVar26;
              goto LAB_002e3b0c;
            }
LAB_002e3eb8:
            local_740 = local_740 + uVar55;
          } while (local_740 < (int)uVar80);
        }
        else {
          uVar81 = uVar82 - local_76c;
          if (0 < (int)uVar80) goto LAB_002e3a28;
        }
        iVar52 = local_76c + uVar81;
      } while ((int)(local_76c + uVar81) < (int)uVar82);
    }
  }
  if (local_778 != local_7e0) {
    local_468 = 0;
    local_478 = 0x2010000;
    local_470 = local_7e0;
    Mat::copyTo(local_778,(_OutputArray *)&local_478);
  }
                    /* try { // try from 002e3350 to 003e3353 has its CatchHandler @ 002e3844 */
  if ((local_418 != &local_408) && (local_418 != (undefined4 *)0x0)) {
    operator_delete__(local_418);
  }
  if (local_628 != 0) {
    piVar6 = (int *)(local_628 + 0x14);
    do {
      iVar21 = *piVar6;
                    /* try { // try from 002e336c to 003e33cb has its CatchHandler @ 002e31ec */
      cVar16 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar17) {
        *piVar6 = iVar21 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate((Mat *)&local_660);
    }
  }
  local_628 = 0;
  local_650 = 0;
  local_638 = 0;
  local_640 = 0;
  local_648 = 0;
  if (0 < local_660._4_4_) {
    iVar21 = 0;
    puVar31 = local_620;
    do {
      *(undefined4 *)puVar31 = 0;
      iVar21 = iVar21 + 1;
      puVar31 = (undefined8 *)((long)puVar31 + 4);
    } while (iVar21 < local_660._4_4_);
  }
                    /* try { // try from 002e33d0 to 003e33d3 has its CatchHandler @ 002e37fc */
  if (local_618 != &local_610) {
    fastFree(local_618);
  }
  if (local_500 != 0) {
    piVar6 = (int *)(local_500 + 0x14);
    do {
                    /* try { // try from 002e33ec to 003e344b has its CatchHandler @ 002e31ec */
      iVar21 = *piVar6;
      cVar16 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar17) {
        *piVar6 = iVar21 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate(local_7e0);
    }
  }
  local_500 = 0;
  local_528 = (double *)0x0;
  local_510 = 0;
  local_518 = 0;
  local_520 = 0;
  if (0 < local_534) {
    iVar21 = 0;
    puVar27 = local_4f8;
    do {
      *puVar27 = 0;
      iVar21 = iVar21 + 1;
      puVar27 = puVar27 + 1;
    } while (iVar21 < local_534);
  }
                    /* try { // try from 002e3450 to 003e3453 has its CatchHandler @ 002e383c */
  if (local_4f0 != local_4e8) {
    fastFree(local_4f0);
  }
  if (local_688 != 0) {
    piVar6 = (int *)(local_688 + 0x14);
    do {
                    /* try { // try from 002e346c to 003e34bf has its CatchHandler @ 002e31ec */
      iVar21 = *piVar6;
      cVar16 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar17) {
        *piVar6 = iVar21 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate((Mat *)&local_6c0);
    }
  }
  local_688 = 0;
  local_6b0 = (double *)0x0;
  local_698 = 0;
  local_6a0 = 0;
  local_6a8 = 0;
  if (0 < local_6c0._4_4_) {
    iVar21 = 0;
    puVar31 = local_680;
    do {
      *(undefined4 *)puVar31 = 0;
      iVar21 = iVar21 + 1;
      puVar31 = (undefined8 *)((long)puVar31 + 4);
    } while (iVar21 < local_6c0._4_4_);
  }
                    /* try { // try from 002e34c4 to 003e34c7 has its CatchHandler @ 002e3840 */
  if (local_678 != &local_670) {
    fastFree(local_678);
  }
  if (local_560 != 0) {
    piVar6 = (int *)(local_560 + 0x14);
    do {
                    /* try { // try from 002e34e0 to 003e3533 has its CatchHandler @ 002e31ec */
      iVar21 = *piVar6;
      cVar16 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar17) {
        *piVar6 = iVar21 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate((Mat *)&local_598);
    }
  }
  local_560 = 0;
  local_588 = (double *)0x0;
  local_570 = 0;
  local_578 = 0;
  local_580 = 0;
  if (0 < local_594) {
    iVar21 = 0;
    puVar32 = local_558;
    do {
      *puVar32 = 0;
      iVar21 = iVar21 + 1;
      puVar32 = puVar32 + 1;
    } while (iVar21 < local_594);
  }
                    /* try { // try from 002e3538 to 003e353b has its CatchHandler @ 002e3848 */
  if (local_550 != &local_548) {
    fastFree(local_550);
  }
  if (local_5c0 != 0) {
    piVar6 = (int *)(local_5c0 + 0x14);
    do {
                    /* try { // try from 002e3554 to 003e35a7 has its CatchHandler @ 002e31ec */
      iVar21 = *piVar6;
      cVar16 = '\x01';
      bVar17 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar17) {
        *piVar6 = iVar21 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (iVar21 == 1) {
      Mat::deallocate((Mat *)&local_5f8);
    }
  }
  local_5c0 = 0;
  local_5e8 = (double *)0x0;
  local_5d0 = 0;
  local_5d8 = 0;
  local_5e0 = 0;
  if (0 < local_5f4) {
    iVar21 = 0;
    puVar32 = local_5b8;
    do {
      *puVar32 = 0;
      iVar21 = iVar21 + 1;
                    /* try { // try from 002e35ac to 003e35af has its CatchHandler @ 002e384c */
      puVar32 = puVar32 + 1;
    } while (iVar21 < local_5f4);
  }
LAB_002e35b0:
  if (local_5b0 != &local_5a8) {
    fastFree(local_5b0);
  }
                    /* try { // try from 002e35c8 to 003e3633 has its CatchHandler @ 002e31ec */
  return;
}


==================================================================

### FUNC 002e5a00 (3088 bytes) name=mulTransposed

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::mulTransposed(cv::_InputArray const&, cv::_OutputArray const&, bool, cv::_InputArray const&,
   double, int) */

void cv::mulTransposed(_InputArray *param_1,_OutputArray *param_2,bool param_3,_InputArray *param_4,
                      double param_5,int param_6)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  char cVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  bool bVar7;
  bool bVar8;
  int iVar9;
  void *__dest;
  int *piVar10;
  _InputArray *p_Var11;
  char *pcVar12;
  Mat *pMVar13;
  Mat **ppMVar14;
  long lVar15;
  code *pcVar16;
  long lVar17;
  undefined8 *puVar18;
  undefined4 local_240 [2];
  Mat *local_238;
  undefined4 local_230;
  undefined4 local_22c;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined8 local_210;
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  Mat *pMStack_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  Mat **local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar9 = _InputArray::kind(param_1);
  if (iVar9 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar13;
    local_11c = *(int *)(pMVar13 + 4);
    local_118 = *(int *)(pMVar13 + 8);
    local_114 = *(int *)(pMVar13 + 0xc);
    local_110 = *(long *)(pMVar13 + 0x10);
    local_108 = *(undefined8 *)(pMVar13 + 0x18);
    local_100 = *(undefined8 *)(pMVar13 + 0x20);
    local_f8 = *(undefined8 *)(pMVar13 + 0x28);
    local_f0 = *(undefined8 *)(pMVar13 + 0x30);
    local_e8 = *(long *)(pMVar13 + 0x38);
                    /* try { // try from 002e62a8 to 003e62ab has its CatchHandler @ 002e5350 */
                    /* catch() { ... } // from try @ 002e5ca0 with catch @ 002e62ac */
                    /* catch() { ... } // from try @ 002e5498 with catch @ 002e62bc
                       catch() { ... } // from try @ 002e55ac with catch @ 002e62bc
                       catch() { ... } // from try @ 002e5b18 with catch @ 002e62bc
                       catch() { ... } // from try @ 002e6204 with catch @ 002e62bc */
                    /* catch() { ... } // from try @ 002e54dc with catch @ 002e62c4
                       catch() { ... } // from try @ 002e5538 with catch @ 002e62c4
                       catch() { ... } // from try @ 002e5b94 with catch @ 002e62c4
                       catch() { ... } // from try @ 002e5ca8 with catch @ 002e62c4
                       catch() { ... } // from try @ 002e61d4 with catch @ 002e62c4 */
    local_c8 = 0;
                    /* catch() { ... } // from try @ 002e5530 with catch @ 002e62cc */
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar10 = (int *)(local_e8 + 0x14);
      do {
                    /* catch() { ... } // from try @ 002e5620 with catch @ 002e62e0
                       catch() { ... } // from try @ 002e5b00 with catch @ 002e62e0 */
        cVar4 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar7) {
          *piVar10 = *piVar10 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
                    /* catch() { ... } // from try @ 002e5818 with catch @ 002e62e8
                       catch() { ... } // from try @ 002e5b54 with catch @ 002e62e8 */
    if (*(int *)(pMVar13 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar13 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
                    /* catch() { ... } // from try @ 002e53fc with catch @ 002e630c
                       catch() { ... } // from try @ 002e5694 with catch @ 002e630c
                       catch() { ... } // from try @ 002e5774 with catch @ 002e630c
                       catch() { ... } // from try @ 002e58bc with catch @ 002e630c
                       catch() { ... } // from try @ 002e5b0c with catch @ 002e630c
                       catch() { ... } // from try @ 002e61f4 with catch @ 002e630c
                       catch() { ... } // from try @ 002e6210 with catch @ 002e630c */
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar9 = _InputArray::kind(param_4);
  if (iVar9 == 0x10000) {
    pMVar13 = *(Mat **)(param_4 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar13;
    local_bc = *(int *)(pMVar13 + 4);
    local_b8 = *(int *)(pMVar13 + 8);
    local_b4 = *(int *)(pMVar13 + 0xc);
    local_b0 = *(long *)(pMVar13 + 0x10);
    local_a8 = *(undefined8 *)(pMVar13 + 0x18);
    local_a0 = *(undefined8 *)(pMVar13 + 0x20);
    local_98 = *(undefined8 *)(pMVar13 + 0x28);
    local_90 = *(undefined8 *)(pMVar13 + 0x30);
    local_88 = *(long *)(pMVar13 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar10 = (int *)(local_88 + 0x14);
      do {
        cVar4 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar7) {
          *piVar10 = *piVar10 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar13 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar13 + 0x48);
      local_68 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar13);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  uVar1 = local_120;
  if (-1 < param_6) {
    uVar1 = param_6;
  }
  uVar2 = uVar1 & 7;
  if ((uVar1 & 7) < (local_c0 & 7)) {
    uVar2 = local_c0 & 7;
  }
  uVar1 = local_120 & 0xfff;
  if (uVar2 < 5) {
    uVar2 = 5;
  }
  if ((local_120 >> 3 & 0x1ff) != 0) {
    local_210 = 0;
    local_208 = (Mat *)0x0;
    pcVar12 = (char *)String::allocate((String *)&local_210,0x13);
    cVar4 = s_src_channels______1_00469528[0x12];
    uVar6 = s_src_channels______1_00469528._8_8_;
    uVar5 = s_src_channels______1_00469528._0_8_;
    *(undefined2 *)(pcVar12 + 0x10) = s_src_channels______1_00469528._16_2_;
    pcVar12[0x12] = cVar4;
    *(undefined8 *)pcVar12 = uVar5;
    *(undefined8 *)(pcVar12 + 8) = uVar6;
    error(-0xd7,(String *)&local_210,
          "void cv::mulTransposed(cv::InputArray, cv::OutputArray, bool, cv::InputArray, double, int)"
          ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xadf);
    String::deallocate((String *)&local_210);
  }
  if (local_b0 != 0) {
    if (local_bc < 3) {
      lVar15 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar17 = 0;
      lVar15 = 1;
      do {
        piVar10 = local_80 + lVar17;
        lVar17 = lVar17 + 1;
        lVar15 = lVar15 * *piVar10;
      } while ((int)lVar17 < local_bc);
    }
    if (lVar15 != 0) {
                    /* try { // try from 002e5b00 to 003e5b03 has its CatchHandler @ 002e62e0 */
                    /* try { // try from 002e5b0c to 003e5b0f has its CatchHandler @ 002e630c */
      if ((((local_c0 >> 3 & 0x1ff) != 0) || ((local_b8 != local_118 && (local_b8 != 1)))) ||
         ((local_b4 != local_114 && (local_b4 != 1)))) {
                    /* try { // try from 002e5b18 to 003e5b1b has its CatchHandler @ 002e62bc */
        local_1f8 = 0;
        local_1f0 = (Mat *)0x0;
        __dest = (void *)String::allocate((String *)&local_1f8,0x73);
        memcpy(__dest,
               "delta.channels() == 1 && (delta.rows == src.rows || delta.rows == 1) && (delta.cols == src.cols || delta.cols == 1)"
               ,0x73);
                    /* try { // try from 002e5b54 to 003e5b57 has its CatchHandler @ 002e62e8 */
        error(-0xd7,(String *)&local_1f8,
              "void cv::mulTransposed(cv::InputArray, cv::OutputArray, bool, cv::InputArray, double, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xae5);
        String::deallocate((String *)&local_1f8);
      }
      if ((local_c0 & 0xfff) != uVar2) {
        local_50 = 0;
                    /* try { // try from 002e5b94 to 003e5c83 has its CatchHandler @ 002e62c4 */
        local_60 = 0x2010000;
        local_58 = (Mat *)&local_c0;
        Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_60,uVar2,1.0,0.0);
      }
    }
  }
  iVar9 = local_118;
  if (param_3) {
    iVar9 = local_114;
  }
  _OutputArray::create(param_2,iVar9,iVar9,uVar2,-1,false,0);
  iVar9 = _InputArray::kind((_InputArray *)param_2);
  if (iVar9 == 0x10000) {
    pMVar13 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar13;
    local_50 = *(long *)(pMVar13 + 0x10);
    local_5c = *(int *)(pMVar13 + 4);
    local_58 = *(Mat **)(pMVar13 + 8);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar10 = (int *)(local_28 + 0x14);
      do {
        cVar4 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar7) {
          *piVar10 = *piVar10 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (2 < *(int *)(pMVar13 + 4)) {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar13);
      goto LAB_002e5bf0;
    }
    local_10 = **(undefined8 **)(pMVar13 + 0x48);
    local_8 = (*(undefined8 **)(pMVar13 + 0x48))[1];
    if (local_110 != local_50) goto LAB_002e5c00;
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_002e5bf0:
    if (local_110 != local_50) {
LAB_002e5c00:
                    /* try { // try from 002e63a4 to 003e63a7 has its CatchHandler @ 002e6320 */
      if ((((uVar1 != uVar2) || (local_58._4_4_ < 100)) || ((int)local_58 < 100)) ||
         ((local_114 < 100 || (local_118 < 100)))) {
        bVar7 = uVar2 != 5;
        if ((bVar7) || (uVar1 != 0)) {
          bVar8 = uVar2 != 6;
          if ((bVar8) || (uVar1 != 0)) {
                    /* try { // try from 002e63d4 to 003e63d7 has its CatchHandler @ 002e68ec */
                    /* try { // try from 002e63dc to 003e685f has its CatchHandler @ 002e6320 */
            if ((bVar7) || (uVar1 != 2)) {
              if ((bVar8) || (uVar1 != 2)) {
                if ((bVar7) || (uVar1 != 3)) {
                  if ((bVar8) || (uVar1 != 3)) {
                    if ((bVar7) || (uVar1 != 5)) {
                      if (bVar8) {
LAB_002e658c:
                        local_1e0 = 0;
                        pMStack_1d8 = (Mat *)0x0;
                        String::allocate((String *)&local_1e0,0);
                        error(-0xd2,(String *)&local_1e0,
                              "void cv::mulTransposed(cv::InputArray, cv::OutputArray, bool, cv::InputArray, double, int)"
                              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",
                              0xb44);
                        String::deallocate((String *)&local_1e0);
                        pcVar16 = (code *)0x0;
                      }
                      else if (uVar1 != 5) {
                        if (uVar1 != 6) goto LAB_002e658c;
                        if (param_3) {
                          pcVar16 = FUN_002cb978;
                        }
                        else {
                          pcVar16 = FUN_002ccfa0;
                        }
                      }
                      else if (param_3) {
                        pcVar16 = FUN_002cbf78;
                      }
                      else {
                        pcVar16 = FUN_002cfd7c;
                      }
                    }
                    else if (param_3) {
                      pcVar16 = FUN_002cb344;
                    }
                    else {
                      pcVar16 = FUN_002cc7e8;
                    }
                  }
                  else if (param_3) {
                    pcVar16 = FUN_002ce964;
                  }
                  else {
                    pcVar16 = FUN_002d3be8;
                  }
                }
                else if (param_3) {
                  pcVar16 = FUN_002d0edc;
                }
                else {
                  pcVar16 = FUN_002d451c;
                }
              }
              else if (param_3) {
                pcVar16 = FUN_002d04b8;
              }
              else {
                pcVar16 = FUN_002d32b4;
              }
            }
            else if (param_3) {
              pcVar16 = FUN_002cf388;
            }
            else {
              pcVar16 = FUN_002d4e9c;
            }
          }
          else if (param_3) {
            pcVar16 = FUN_002ce360;
          }
          else {
            pcVar16 = FUN_002d18d0;
          }
        }
        else if (param_3) {
          pcVar16 = FUN_002cd624;
        }
        else {
          pcVar16 = FUN_002d25e8;
        }
        (*pcVar16)(param_5,(Mat *)&local_120,(Mat *)&local_60,(Mat *)&local_c0);
        local_170 = 0;
        local_180 = CONCAT44(local_180._4_4_,0x3010000);
        pMStack_178 = (Mat *)&local_60;
        completeSymm((_InputOutputArray *)&local_180,false);
        goto LAB_002e5c64;
      }
    }
  }
  local_198 = &local_190;
  local_1a0 = &pMStack_1d8;
  local_1d0 = 0;
  local_1c8 = 0;
  local_1c0 = 0;
  pMStack_1d8 = _UNK_002e6718;
  local_1e0 = _DAT_002e6710;
  local_1b8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_238 = (Mat *)&local_120;
  if (local_b0 != 0) {
    if (local_bc < 3) {
      lVar17 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar15 = 0;
      lVar17 = 1;
      do {
        piVar10 = local_80 + lVar15;
        lVar15 = lVar15 + 1;
        lVar17 = lVar17 * *piVar10;
      } while ((int)lVar15 < local_bc);
    }
    if (lVar17 != 0) {
      local_1f0 = (Mat *)&local_c0;
      if ((local_80[1] == local_e0[1]) && (*local_80 == *local_e0)) {
      }
      else {
        iVar9 = 0;
        if (local_b8 != 0) {
          iVar9 = local_118 / local_b8;
        }
        local_1f8._0_4_ = 0x1010000;
        local_180 = CONCAT44(local_180._4_4_,0x2010000);
        local_170 = 0;
        local_1e8 = 0;
        local_1e4 = 0;
        iVar3 = 0;
        if (local_b4 != 0) {
          iVar3 = local_114 / local_b4;
        }
        pMStack_178 = (Mat *)&local_1e0;
        repeat((_InputArray *)&local_1f8,iVar9,iVar3,(_OutputArray *)&local_180);
        local_1f0 = (Mat *)&local_1e0;
      }
      local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
      local_210 = CONCAT44(local_210._4_4_,0x1010000);
      local_1e4 = 0;
      local_1e8 = 0;
      local_1fc = 0;
      local_200 = 0;
      local_170 = 0;
      local_180 = CONCAT44(local_180._4_4_,0x2010000);
      local_208 = (Mat *)&local_120;
      pMStack_178 = (Mat *)&local_1e0;
      p_Var11 = (_InputArray *)noArray();
      subtract((_InputArray *)&local_210,(_InputArray *)&local_1f8,(_OutputArray *)&local_180,
               p_Var11,-1);
      local_238 = (Mat *)&local_1e0;
    }
  }
  local_138 = &local_130;
  local_170 = 0;
  local_168 = 0;
  local_140 = &pMStack_178;
  local_160 = 0;
  local_158 = 0;
  pMStack_178 = _UNK_002e6718;
  local_180 = _DAT_002e6710;
  local_150 = 0;
  local_148 = 0;
  uStack_128 = 0;
  local_130 = 0;
  iVar9 = 2;
  if (param_3) {
    iVar9 = 1;
  }
  local_230 = 0;
  local_22c = 0;
  local_240[0] = 0x1010000;
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210 = CONCAT44(local_210._4_4_,0x1010000);
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
  local_220 = local_238;
  local_208 = (Mat *)&local_180;
  local_1f0 = (Mat *)&local_60;
  gemm((_InputArray *)local_240,(_InputArray *)local_228,param_5,(_InputArray *)&local_210,0.0,
       (_OutputArray *)&local_1f8,iVar9);
  if (local_148 != 0) {
    piVar10 = (int *)(local_148 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar7) {
        *piVar10 = iVar9 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_180._4_4_) {
    iVar9 = 0;
    ppMVar14 = local_140;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
                    /* try { // try from 002e61cc to 003e61cf has its CatchHandler @ 002e6224 */
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_180._4_4_);
  }
                    /* try { // try from 002e61d4 to 003e61d7 has its CatchHandler @ 002e62c4 */
  if (local_138 != &local_130) {
                    /* try { // try from 002e61e4 to 003e61e7 has its CatchHandler @ 002e5350 */
    fastFree(local_138);
  }
  if (local_1a8 != 0) {
    piVar10 = (int *)(local_1a8 + 0x14);
    do {
                    /* try { // try from 002e61f4 to 003e61f7 has its CatchHandler @ 002e630c */
      iVar9 = *piVar10;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar7) {
        *piVar10 = iVar9 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
                    /* try { // try from 002e6204 to 003e6207 has its CatchHandler @ 002e62bc */
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
                    /* try { // try from 002e6210 to 003e6213 has its CatchHandler @ 002e630c */
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
                    /* catch() { ... } // from try @ 002e61cc with catch @ 002e6224 */
  local_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar9 = 0;
    ppMVar14 = local_1a0;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
LAB_002e5c64:
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar7) {
        *piVar10 = iVar9 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
                    /* try { // try from 002e5ca0 to 003e5ca3 has its CatchHandler @ 002e62ac */
  local_48 = 0;
  if (0 < local_5c) {
                    /* try { // try from 002e5ca8 to 003e61af has its CatchHandler @ 002e62c4 */
    iVar9 = 0;
    puVar18 = local_20;
    do {
      *(undefined4 *)puVar18 = 0;
      iVar9 = iVar9 + 1;
      puVar18 = (undefined8 *)((long)puVar18 + 4);
    } while (iVar9 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar10 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar7) {
        *piVar10 = iVar9 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar9 == 1) {
                    /* catch() { ... } // from try @ 002e63a4 with catch @ 002e6320
                       catch() { ... } // from try @ 002e63dc with catch @ 002e6320
                       catch() { ... } // from try @ 002e68fc with catch @ 002e6320 */
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    piVar10 = local_80;
    do {
      *piVar10 = 0;
      iVar9 = iVar9 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar10 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar10;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar7) {
        *piVar10 = iVar9 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    piVar10 = local_e0;
    do {
      *piVar10 = 0;
      iVar9 = iVar9 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002e6720 (1500 bytes) name=cvMulTransposed

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMulTransposed(double param_1,cv *param_2,cv *param_3,int param_4,cv *param_5,
                    undefined8 param_6,AutoBuffer *param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 *puVar4;
  int iVar5;
  undefined8 *puVar6;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined4 local_1f8 [2];
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  uint local_1e0;
  int iStack_1dc;
  undefined8 uStack_1d8;
  long local_1d0;
  undefined8 local_1c8;
  AutoBuffer *local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  undefined4 *local_1a0;
  undefined8 *local_198;
  undefined8 auStack_190 [2];
  undefined8 local_180;
  undefined8 uStack_178;
  long local_170;
  undefined8 local_168;
  AutoBuffer *local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_7);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_7);
  local_180 = CONCAT44(iStack_1dc,local_1e0);
  local_138 = &local_130;
  local_140 = &uStack_178;
  uStack_128 = 0;
  local_130 = 0;
  uStack_178 = uStack_1d8;
  local_170 = local_1d0;
  local_168 = local_1c8;
  local_160 = local_1c0;
  local_158 = local_1b8;
  local_150 = local_1b0;
  local_148 = local_1a8;
  if (local_1a8 != 0) {
    piVar1 = (int *)(local_1a8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iStack_1dc < 3) {
    local_130 = *local_198;
    uStack_128 = local_198[1];
  }
  else {
    local_180 = (ulong)local_1e0;
    cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_1e0);
  }
  local_d8 = &local_d0;
  local_e0 = &uStack_118;
  local_100 = 0;
  uStack_f8 = 0;
  uStack_c8 = 0;
  local_d0 = 0;
  local_110 = 0;
  uStack_108 = 0;
  local_f0 = 0;
  lStack_e8 = 0;
  uStack_118 = _LAB_002e6dc8;
  local_120 = _DAT_002e6dc0;
  if (param_5 == (cv *)0x0) goto LAB_002e69c8;
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,local_1c0);
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
                    /* try { // try from 002e6cbc to 003e6cbf has its CatchHandler @ 002e6e58 */
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  puVar4 = local_78;
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_120._4_4_ < 1) {
LAB_002e690c:
    if (2 < local_bc) goto LAB_002e6918;
    uStack_118 = local_b8;
    local_120 = CONCAT44(local_bc,local_c0);
    *local_d8 = *local_78;
    local_d8[1] = puVar4[1];
  }
  else {
    iVar5 = 0;
    puVar6 = local_e0;
    do {
      *(undefined4 *)puVar6 = 0;
                    /* catch() { ... } // from try @ 002e63d4 with catch @ 002e68ec */
      iVar5 = iVar5 + 1;
      puVar6 = (undefined8 *)((long)puVar6 + 4);
    } while (iVar5 < local_120._4_4_);
                    /* try { // try from 002e68fc to 003e68ff has its CatchHandler @ 002e6320 */
                    /* catch() { ... } // from try @ 002e6918 with catch @ 002e6900
                       catch() { ... } // from try @ 002e696c with catch @ 002e6900
                       catch() { ... } // from try @ 002e699c with catch @ 002e6900 */
    if (local_120._4_4_ < 3) goto LAB_002e690c;
LAB_002e6918:
                    /* try { // try from 002e6918 to 003e6947 has its CatchHandler @ 002e6900 */
    local_120 = CONCAT44(local_120._4_4_,local_c0);
    cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_c0);
  }
  uStack_f8 = uStack_98;
  local_100 = local_a0;
  lStack_e8 = lStack_88;
  local_f0 = local_90;
  uStack_108 = uStack_a8;
  local_110 = local_b0;
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      iVar5 = *piVar1;
                    /* try { // try from 002e6964 to 003e6967 has its CatchHandler @ 002e698c */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e696c to 003e6977 has its CatchHandler @ 002e6900 */
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
                    /* catch() { ... } // from try @ 002e6964 with catch @ 002e698c */
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
                    /* try { // try from 002e699c to 003e699f has its CatchHandler @ 002e6900 */
    iVar5 = 0;
    do {
                    /* catch() { ... } // from try @ 002e69e0 with catch @ 002e69a0
                       catch() { ... } // from try @ 002e6d30 with catch @ 002e69a0
                       catch() { ... } // from try @ 002e6dbc with catch @ 002e69a0
                       catch() { ... } // from try @ 002e6e44 with catch @ 002e69a0 */
      *local_80 = 0;
      iVar5 = iVar5 + 1;
      local_80 = local_80 + 1;
    } while (iVar5 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
LAB_002e69c8:
                    /* try { // try from 002e69e0 to 003e69e3 has its CatchHandler @ 002e69a0 */
  local_1e8 = 0;
                    /* try { // try from 002e69fc to 003e69ff has its CatchHandler @ 002e6e58 */
  local_1e4 = 0;
  local_1f8[0] = 0x2010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_b0 = 0;
  local_c0 = 0x1010000;
  local_208 = aMStack_60;
  local_1f0 = (Mat *)&local_180;
  local_b8 = (Mat *)&local_120;
  cv::mulTransposed((_InputArray *)local_210,(_OutputArray *)local_1f8,param_4 != 0,
                    (_InputArray *)&local_c0,param_1,(uint)local_180 & 0xfff);
  if (local_170 != local_1d0) {
    local_b0 = 0;
    local_c0 = 0x2010000;
    local_b8 = (Mat *)&local_1e0;
    cv::Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_c0,local_1e0 & 0xfff,1.0,0.0);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e6a84 to 003e6a87 has its CatchHandler @ 002e6e48 */
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar5 = 0;
    puVar4 = local_e0;
    do {
      *(undefined4 *)puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = (undefined8 *)((long)puVar4 + 4);
    } while (iVar5 < local_120._4_4_);
  }
                    /* try { // try from 002e6ad0 to 003e6ad3 has its CatchHandler @ 002e6ddc */
                    /* try { // try from 002e6ad8 to 003e6bd7 has its CatchHandler @ 002e6e48 */
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = (AutoBuffer *)0x0;
  local_168 = 0;
  if (0 < local_180._4_4_) {
    iVar5 = 0;
    puVar4 = local_140;
    do {
      *(undefined4 *)puVar4 = 0;
      iVar5 = iVar5 + 1;
      puVar4 = (undefined8 *)((long)puVar4 + 4);
    } while (iVar5 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (local_1a8 != 0) {
    piVar1 = (int *)(local_1a8 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = (AutoBuffer *)0x0;
  local_1c8 = 0;
  if (0 < iStack_1dc) {
    iVar5 = 0;
    do {
      *local_1a0 = 0;
      iVar5 = iVar5 + 1;
      local_1a0 = local_1a0 + 1;
    } while (iVar5 < iStack_1dc);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar5 = 0;
    do {
      *local_20 = 0;
      iVar5 = iVar5 + 1;
      local_20 = local_20 + 1;
    } while (iVar5 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
                    /* try { // try from 002e6c48 to 003e6c4b has its CatchHandler @ 002e6e50 */
  return;
}


==================================================================

### FUNC 002e6dd0 (1492 bytes) name=cvGEMM

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvGEMM(double param_1,double param_2,cv *param_3,cv *param_4,cv *param_5,cv *param_6,
           uint param_7,AutoBuffer *param_8)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  void *__dest;
  int iVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  AutoBuffer *pAVar7;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  AutoBuffer *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
                    /* try { // try from 002e6dd4 to 003e6dd7 has its CatchHandler @ 002e6e50 */
                    /* catch() { ... } // from try @ 002e6ad0 with catch @ 002e6ddc */
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_8);
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,param_8);
                    /* try { // try from 002e6e44 to 003e6e47 has its CatchHandler @ 002e69a0 */
                    /* catch() { ... } // from try @ 002e6a84 with catch @ 002e6e48
                       catch() { ... } // from try @ 002e6ad8 with catch @ 002e6e48
                       catch() { ... } // from try @ 002e6d70 with catch @ 002e6e48 */
  pAVar7 = (AutoBuffer *)&local_190;
                    /* catch() { ... } // from try @ 002e6c48 with catch @ 002e6e50
                       catch() { ... } // from try @ 002e6dd4 with catch @ 002e6e50 */
                    /* catch() { ... } // from try @ 002e69fc with catch @ 002e6e58
                       catch() { ... } // from try @ 002e6cbc with catch @ 002e6e58
                       catch() { ... } // from try @ 002e6dc8 with catch @ 002e6e58 */
  local_1a0 = &uStack_1d8;
  uStack_1d8 = _UNK_002e7488;
  local_1e0 = _DAT_002e7480;
                    /* catch() { ... } // from try @ 002e6ec0 with catch @ 002e6e80
                       catch() { ... } // from try @ 002e7210 with catch @ 002e6e80
                       catch() { ... } // from try @ 002e729c with catch @ 002e6e80
                       catch() { ... } // from try @ 002e7324 with catch @ 002e6e80 */
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_198 = pAVar7;
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,pAVar7);
  if (param_5 != (cv *)0x0) {
                    /* try { // try from 002e6ec0 to 003e6ec3 has its CatchHandler @ 002e6e80 */
    cv::cvarrToMat(param_5,(void *)0x0,true,false,0,pAVar7);
    if (lStack_148 != 0) {
      piVar1 = (int *)(lStack_148 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 002e6edc to 003e6edf has its CatchHandler @ 002e7338 */
      } while (cVar2 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar1 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar6 = local_138;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1e0._4_4_ < 1) {
LAB_002e6f50:
      if (2 < local_17c) goto LAB_002e7300;
                    /* try { // try from 002e6f64 to 003e6f67 has its CatchHandler @ 002e7328 */
      uStack_1d8 = local_178;
      local_1e0 = CONCAT44(local_17c,local_180);
      *(undefined8 *)local_198 = *local_138;
      *(undefined8 *)(local_198 + 8) = puVar6[1];
    }
    else {
      iVar4 = 0;
      puVar5 = local_1a0;
      do {
        *(undefined4 *)puVar5 = 0;
        iVar4 = iVar4 + 1;
        puVar5 = (undefined8 *)((long)puVar5 + 4);
      } while (iVar4 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_002e6f50;
LAB_002e7300:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
      cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
    }
                    /* try { // try from 002e6fb0 to 003e6fb3 has its CatchHandler @ 002e72bc */
    uStack_1b8 = uStack_158;
    local_1c0 = local_160;
    lStack_1a8 = lStack_148;
    local_1b0 = local_150;
                    /* try { // try from 002e6fb8 to 003e70b7 has its CatchHandler @ 002e7328 */
    uStack_1c8 = uStack_168;
    local_1d0 = local_170;
    if (lStack_148 != 0) {
      piVar1 = (int *)(lStack_148 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (0 < local_17c) {
      iVar4 = 0;
      do {
        *local_140 = 0;
        iVar4 = iVar4 + 1;
        local_140 = local_140 + 1;
      } while (iVar4 < local_17c);
    }
    if (local_138 != auStack_130) {
      cv::fastFree(local_138);
    }
  }
  if ((param_7 & 1) == 0) {
    local_114 = local_118;
  }
  if (local_58 == local_114) {
    if ((param_7 & 2) == 0) {
      local_b8 = local_b4;
    }
                    /* catch() { ... } // from try @ 002e73ac with catch @ 002e7360
                       catch() { ... } // from try @ 002e7718 with catch @ 002e7360
                       catch() { ... } // from try @ 002e7834 with catch @ 002e7360 */
    if ((local_54 == local_b8) && ((local_60 & 0xfff) == (local_120 & 0xfff))) goto LAB_002e709c;
  }
  local_1f8 = 0;
  local_1f0 = (Mat *)0x0;
  __dest = (void *)cv::String::allocate((String *)&local_1f8,0x90);
  memcpy(__dest,
         "(D.rows == ((flags & CV_GEMM_A_T) == 0 ? A.rows : A.cols)) && (D.cols == ((flags & CV_GEMM_B_T) == 0 ? B.cols : B.rows)) && D.type() == A.type()"
         ,0x90);
  cv::error(-0xd7,(String *)&local_1f8,
            "void cvGEMM(const CvArr*, const CvArr*, double, const CvArr*, double, CvArr*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xcd2);
  cv::String::deallocate((String *)&local_1f8);
LAB_002e709c:
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
  local_218 = 0;
  local_214 = 0;
  local_228[0] = 0x1010000;
  local_200 = 0;
  local_1fc = 0;
  local_210[0] = 0x1010000;
  local_170 = 0;
  local_180 = 0x2010000;
  local_220 = (Mat *)&local_120;
  local_208 = aMStack_c0;
  local_1f0 = (Mat *)&local_1e0;
  local_178 = (Mat *)&local_60;
  cv::gemm((_InputArray *)local_228,(_InputArray *)local_210,param_1,(_InputArray *)&local_1f8,
           param_2,(_OutputArray *)&local_180,param_7);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e7128 to 003e712b has its CatchHandler @ 002e7330 */
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
                    /* catch() { ... } // from try @ 002e6edc with catch @ 002e7338
                       catch() { ... } // from try @ 002e719c with catch @ 002e7338
                       catch() { ... } // from try @ 002e72a8 with catch @ 002e7338 */
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e719c to 003e719f has its CatchHandler @ 002e7338 */
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
                    /* catch() { ... } // from try @ 002e6f64 with catch @ 002e7328
                       catch() { ... } // from try @ 002e6fb8 with catch @ 002e7328
                       catch() { ... } // from try @ 002e7250 with catch @ 002e7328 */
      cv::Mat::deallocate((Mat *)&local_1e0);
                    /* catch() { ... } // from try @ 002e7128 with catch @ 002e7330
                       catch() { ... } // from try @ 002e72b4 with catch @ 002e7330 */
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar4 = 0;
    puVar6 = local_1a0;
    do {
      *(undefined4 *)puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = (undefined8 *)((long)puVar6 + 4);
    } while (iVar4 < local_1e0._4_4_);
  }
  if (local_198 != (AutoBuffer *)&local_190) {
    cv::fastFree(local_198);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e7210 to 003e7213 has its CatchHandler @ 002e6e80 */
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_c0);
                    /* try { // try from 002e7324 to 003e7327 has its CatchHandler @ 002e6e80 */
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
                    /* try { // try from 002e7250 to 003e7253 has its CatchHandler @ 002e7328 */
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
                    /* try { // try from 002e729c to 003e729f has its CatchHandler @ 002e6e80 */
  local_f8 = 0;
  local_100 = 0;
                    /* try { // try from 002e72a8 to 003e72ab has its CatchHandler @ 002e7338 */
  local_108 = 0;
  if (0 < local_11c) {
                    /* try { // try from 002e72b4 to 003e72b7 has its CatchHandler @ 002e7330 */
    iVar4 = 0;
    do {
      *local_e0 = 0;
                    /* catch() { ... } // from try @ 002e6fb0 with catch @ 002e72bc */
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 002e7490 (7620 bytes) name=calcCovarMatrix

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::calcCovarMatrix(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputOutputArray
   const&, int, int) */

void cv::calcCovarMatrix(_InputArray *param_1,_OutputArray *param_2,_InputOutputArray *param_3,
                        int param_4,int param_5)

{
  uint uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  Mat *pMVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  Mat *pMVar13;
  long *plVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  Mat **ppMVar20;
  char *pcVar21;
  undefined8 *puVar22;
  void *__dest;
  Mat *pMVar23;
  undefined4 *puVar24;
  int *piVar25;
  Mat *pMVar26;
  long lVar27;
  uint uVar28;
  int iVar29;
  long lVar30;
  double dVar31;
  int local_298;
  int local_294;
  int local_290;
  int local_28c;
  long local_288;
  long local_280;
  undefined8 local_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  Mat *local_258;
  Mat *local_250;
  undefined8 local_248;
  undefined8 local_240;
  Mat *pMStack_238;
  long local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  undefined8 local_210;
  long local_208;
  Mat **local_200;
  long *local_1f8;
  long local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  Mat *pMStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  Mat **local_1a0;
  long *local_198;
  long local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  Mat **local_140;
  long *local_138;
  long local_130;
  long lStack_128;
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  Mat **local_e0;
  long *local_d8;
  long local_d0;
  long local_c8;
  int local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  Mat **local_80;
  long *local_78;
  long local_70;
  long local_68;
  uint local_60;
  int local_5c;
  undefined8 local_58;
  long local_50;
  long lStack_48;
  long local_40;
  long lStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
                    /* try { // try from 002e749c to 003e749f has its CatchHandler @ 002e7840 */
                    /* try { // try from 002e74a4 to 003e75bf has its CatchHandler @ 002e7870 */
  iVar15 = _InputArray::kind(param_1);
  iVar17 = (int)param_3;
  if (iVar15 == 0x50000) {
    local_258 = (Mat *)0x0;
    local_250 = (Mat *)0x0;
    local_248 = 0;
    _InputArray::getMatVector(param_1,(vector *)&local_258);
    lVar27 = ((long)local_250 - (long)local_258 >> 5) * -0x5555555555555555;
    if (lVar27 == 0) {
      local_288 = lVar27;
      local_280 = lVar27;
      pcVar21 = (char *)String::allocate((String *)&local_288,0xe);
      uVar7 = s_src_size___>_0_00469650._12_2_;
      uVar6 = s_src_size___>_0_00469650._8_4_;
      *(undefined8 *)pcVar21 = s_src_size___>_0_00469650._0_8_;
      *(undefined4 *)(pcVar21 + 8) = uVar6;
                    /* try { // try from 002e8df8 to 003e8dfb has its CatchHandler @ 002e94c4 */
      *(undefined2 *)(pcVar21 + 0xc) = uVar7;
      error(-0xd7,(String *)&local_288,
            "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x967);
      String::deallocate((String *)&local_288);
    }
    uVar28 = *(uint *)local_258;
    piVar25 = *(int **)(local_258 + 0x40);
    uVar2 = uVar28;
    if (-1 < param_5) {
      uVar2 = param_5;
    }
    uVar2 = uVar2 & 7;
    uVar1 = uVar28 & 0xfff;
    iVar15 = piVar25[1];
    iVar16 = *piVar25;
    pMVar23 = *(Mat **)piVar25;
    local_60 = uVar2;
    uVar19 = _InputArray::depth((_InputArray *)param_3,-1);
                    /* try { // try from 002e7e28 to 003e7e63 has its CatchHandler @ 002e7e6c */
    if ((int)uVar2 < (int)uVar19) {
      uVar2 = uVar19;
    }
    local_1f8 = &local_1f0;
    pMStack_238 = _UNK_002e94d8;
    local_240 = _DAT_002e94d0;
                    /* catch() { ... } // from try @ 002e7cc0 with catch @ 002e7e6c
                       catch() { ... } // from try @ 002e7e28 with catch @ 002e7e6c */
    if ((int)uVar2 < 5) {
      uVar2 = 5;
    }
    local_290 = (int)((long)local_250 - (long)local_258 >> 5) * -0x55555555;
    local_230 = 0;
    local_200 = &pMStack_238;
    local_228 = 0;
    local_220 = 0;
    local_218 = 0;
    local_210 = 0;
    local_208 = 0;
                    /* try { // try from 002e7eac to 003e7eaf has its CatchHandler @ 002e7bb0 */
                    /* catch() { ... } // from try @ 002e7c9c with catch @ 002e7eb0 */
    uStack_1e8 = 0;
    local_1f0 = 0;
    local_28c = iVar15 * iVar16;
                    /* catch() { ... } // from try @ 002e7c50 with catch @ 002e7ec0
                       catch() { ... } // from try @ 002e7ca4 with catch @ 002e7ec0 */
    Mat::create((Mat *)&local_240,2,&local_290,uVar1);
                    /* catch() { ... } // from try @ 002e7be4 with catch @ 002e7ec8 */
                    /* catch() { ... } // from try @ 002e7f04 with catch @ 002e7ed0
                       catch() { ... } // from try @ 002e80ec with catch @ 002e7ed0
                       catch() { ... } // from try @ 002e8590 with catch @ 002e7ed0
                       catch() { ... } // from try @ 002e9260 with catch @ 002e7ed0 */
    if (local_258 != local_250) {
      iVar29 = (uVar28 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar28 & 7) << 1)) & 3);
      lVar30 = (long)iVar29 * (long)iVar15;
                    /* try { // try from 002e7f04 to 003e7f27 has its CatchHandler @ 002e7ed0 */
      lVar27 = 0;
      pMVar26 = local_258;
      do {
        if (((iVar15 != (*(int **)(pMVar26 + 0x40))[1]) || (iVar16 != **(int **)(pMVar26 + 0x40)))
           || (uVar1 != (*(uint *)pMVar26 & 0xfff))) {
          local_278 = 0;
          local_270 = 0;
          puVar22 = (undefined8 *)String::allocate((String *)&local_278,0x30);
          uVar12 = s____type_00469688._0_8_;
          uVar11 = _LAB_00469680;
          uVar10 = DAT_00469678;
          uVar9 = DAT_00469670;
          uVar8 = DAT_00469668;
                    /* try { // try from 002e7f7c to 003e7f7f has its CatchHandler @ 002e9510 */
          *puVar22 = DAT_00469660;
          puVar22[1] = uVar8;
          puVar22[2] = uVar9;
          puVar22[3] = uVar10;
          puVar22[4] = uVar11;
          puVar22[5] = uVar12;
          error(-0xd7,(String *)&local_278,
                "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x973);
          String::deallocate((String *)&local_278);
        }
        local_18 = &local_10;
        local_5c = 2;
                    /* try { // try from 002e7fc8 to 003e7fcb has its CatchHandler @ 002e9500 */
                    /* try { // try from 002e7fd0 to 003e7ffb has its CatchHandler @ 002e9510 */
        local_50 = local_230 + lVar27 * *local_1f8;
        local_30 = 0;
        local_40 = local_50 + lVar30 * iVar16;
        lStack_28 = 0;
        local_b0 = 0;
        local_c0 = 0x2010000;
        local_b8 = (Mat *)&local_60;
        local_60 = uVar1 + 0x42ff0000 | 0x4000;
        local_58 = pMVar23;
        lStack_48 = local_50;
        lStack_38 = local_40;
        local_20 = &local_58;
        local_10 = lVar30;
        local_8 = (long)iVar29;
        Mat::copyTo(pMVar26,(_OutputArray *)&local_c0);
        if (lStack_28 != 0) {
          piVar25 = (int *)(lStack_28 + 0x14);
          do {
            iVar18 = *piVar25;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = iVar18 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar18 == 1) {
            Mat::deallocate((Mat *)&local_60);
                    /* try { // try from 002e8aa4 to 003e8aa7 has its CatchHandler @ 002e94e4 */
          }
        }
                    /* try { // try from 002e804c to 003e804f has its CatchHandler @ 002e94ec */
        lStack_28 = 0;
        local_50 = 0;
                    /* try { // try from 002e8054 to 003e8093 has its CatchHandler @ 002e9510 */
        lStack_38 = 0;
        local_40 = 0;
        lStack_48 = 0;
        if (0 < local_5c) {
          iVar18 = 0;
          puVar22 = local_20;
          do {
            *(undefined4 *)puVar22 = 0;
            iVar18 = iVar18 + 1;
            puVar22 = (undefined8 *)((long)puVar22 + 4);
          } while (iVar18 < local_5c);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
        pMVar26 = pMVar26 + 0x60;
        lVar27 = lVar27 + 1;
      } while (local_250 != pMVar26);
    }
                    /* try { // try from 002e80b0 to 003e80b3 has its CatchHandler @ 002e9518 */
    local_1a0 = &pMStack_1d8;
                    /* try { // try from 002e80b8 to 003e80bb has its CatchHandler @ 002e9510 */
    local_1d0 = 0;
    uStack_1c8 = 0;
    local_1c0 = 0;
    local_198 = &local_190;
    uStack_1b8 = 0;
    local_1b0 = 0;
    lStack_1a8 = 0;
    pMStack_1d8 = _UNK_002e94d8;
    local_1e0 = _DAT_002e94d0;
                    /* try { // try from 002e80ec to 003e813f has its CatchHandler @ 002e7ed0 */
    uStack_188 = 0;
    local_190 = 0;
    if (((uint)param_4 >> 1 & 1) != 0) {
      _InputArray::size(iVar17);
      if ((local_298 != iVar15) || (iVar16 != local_294)) {
        local_268 = 0;
        local_260 = 0;
        pcVar21 = (char *)String::allocate((String *)&local_268,0x14);
        uVar9 = s__mean_size______size_00469698._8_8_;
        uVar8 = s__mean_size______size_00469698._0_8_;
        *(undefined4 *)(pcVar21 + 0x10) = s__mean_size______size_00469698._16_4_;
        *(undefined8 *)pcVar21 = uVar8;
        *(undefined8 *)(pcVar21 + 8) = uVar9;
        error(-0xd7,(String *)&local_268,
              "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x97b);
        String::deallocate((String *)&local_268);
      }
      if (((uint)local_1e0 & 0xfff) != uVar2) {
        iVar15 = _InputArray::kind((_InputArray *)param_3);
                    /* try { // try from 002e819c to 003e819f has its CatchHandler @ 002e9510 */
        if (iVar15 == 0x10000) {
          local_140 = &pMStack_178;
          local_138 = &local_130;
          pMVar23 = *(Mat **)(param_3 + 8);
          uVar28 = *(uint *)pMVar23;
          local_170 = *(undefined8 *)(pMVar23 + 0x10);
          local_180 = *(ulong *)pMVar23;
          pMStack_178 = *(Mat **)(pMVar23 + 8);
          uStack_168 = *(undefined8 *)(pMVar23 + 0x18);
          local_160 = *(undefined8 *)(pMVar23 + 0x20);
          uStack_158 = *(undefined8 *)(pMVar23 + 0x28);
          local_150 = *(undefined8 *)(pMVar23 + 0x30);
          lStack_148 = *(long *)(pMVar23 + 0x38);
          lStack_128 = 0;
          local_130 = 0;
          if (lStack_148 != 0) {
            piVar25 = (int *)(lStack_148 + 0x14);
            do {
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
              if (bVar4) {
                *piVar25 = *piVar25 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
          if (*(int *)(pMVar23 + 4) < 3) {
            local_130 = **(long **)(pMVar23 + 0x48);
            lStack_128 = (*(long **)(pMVar23 + 0x48))[1];
          }
          else {
                    /* try { // try from 002e9194 to 003e9203 has its CatchHandler @ 002e9320 */
            local_180 = (ulong)uVar28;
            Mat::copySize((Mat *)&local_180,pMVar23);
          }
        }
        else {
                    /* try { // try from 002e81a4 to 003e81a7 has its CatchHandler @ 002e940c */
          _InputArray::getMat_(iVar17);
        }
        if (lStack_148 != 0) {
          piVar25 = (int *)(lStack_148 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = *piVar25 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (lStack_1a8 != 0) {
          piVar25 = (int *)(lStack_1a8 + 0x14);
          do {
            iVar15 = *piVar25;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
                    /* catch() { ... } // from try @ 002e8b14 with catch @ 002e9204
                       catch() { ... } // from try @ 002e8ff0 with catch @ 002e9204 */
            Mat::deallocate((Mat *)&local_1e0);
          }
        }
        plVar14 = local_138;
        lStack_1a8 = 0;
        local_1d0 = 0;
        uStack_1b8 = 0;
        local_1c0 = 0;
                    /* try { // try from 002e8210 to 003e8213 has its CatchHandler @ 002e9444 */
        uStack_1c8 = 0;
        if (local_1e0._4_4_ < 1) {
LAB_002e8244:
          if (2 < local_180._4_4_) goto LAB_002e8e20;
                    /* try { // try from 002e825c to 003e825f has its CatchHandler @ 002e9414 */
          local_1e0 = local_180;
                    /* try { // try from 002e8264 to 003e8267 has its CatchHandler @ 002e9444 */
          pMStack_1d8 = pMStack_178;
          *local_198 = *local_138;
          local_198[1] = plVar14[1];
        }
        else {
          iVar15 = 0;
          ppMVar20 = local_1a0;
          do {
            *(undefined4 *)ppMVar20 = 0;
            iVar15 = iVar15 + 1;
            ppMVar20 = (Mat **)((long)ppMVar20 + 4);
          } while (iVar15 < local_1e0._4_4_);
          if (local_1e0._4_4_ < 3) goto LAB_002e8244;
LAB_002e8e20:
          local_1e0 = CONCAT44(local_1e0._4_4_,(uint)local_180);
          Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
        }
                    /* try { // try from 002e8280 to 003e8283 has its CatchHandler @ 002e944c */
        uStack_1c8 = uStack_168;
        local_1d0 = local_170;
        uStack_1b8 = uStack_158;
        local_1c0 = local_160;
        lStack_1a8 = lStack_148;
        local_1b0 = local_150;
        if (lStack_148 != 0) {
          piVar25 = (int *)(lStack_148 + 0x14);
          do {
            iVar15 = *piVar25;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
            Mat::deallocate((Mat *)&local_180);
          }
        }
                    /* try { // try from 002e82d0 to 003e8403 has its CatchHandler @ 002e9510 */
        lStack_148 = 0;
        local_170 = 0;
        uStack_158 = 0;
        local_160 = 0;
        uStack_168 = 0;
        if (0 < local_180._4_4_) {
          iVar15 = 0;
          ppMVar20 = local_140;
          do {
            *(undefined4 *)ppMVar20 = 0;
            iVar15 = iVar15 + 1;
            ppMVar20 = (Mat **)((long)ppMVar20 + 4);
          } while (iVar15 < local_180._4_4_);
        }
        if (local_138 != &local_130) {
          fastFree(local_138);
        }
        local_5c = *(int *)local_1a0;
        local_60 = *(uint *)((long)local_1a0 + 4);
        _OutputArray::create((_OutputArray *)param_3,(Mat *)&local_60,uVar2,0xffffffff,0,0);
        iVar15 = _InputArray::kind((_InputArray *)param_3);
        if (iVar15 == 0x10000) {
          local_20 = &local_58;
          local_18 = &local_10;
                    /* try { // try from 002e8ff0 to 003e8ff3 has its CatchHandler @ 002e9204 */
          pMVar23 = *(Mat **)(param_3 + 8);
          local_60 = *(uint *)pMVar23;
          local_50 = *(long *)(pMVar23 + 0x10);
                    /* try { // try from 002e9000 to 003e9003 has its CatchHandler @ 002e93bc */
          local_5c = *(int *)(pMVar23 + 4);
                    /* try { // try from 002e9010 to 003e9013 has its CatchHandler @ 002e9494 */
          local_58 = *(Mat **)(pMVar23 + 8);
          lStack_48 = *(long *)(pMVar23 + 0x18);
                    /* try { // try from 002e9020 to 003e9023 has its CatchHandler @ 002e94ac */
          local_40 = *(long *)(pMVar23 + 0x20);
          lStack_38 = *(long *)(pMVar23 + 0x28);
                    /* try { // try from 002e9030 to 003e9033 has its CatchHandler @ 002e944c */
          local_30 = *(undefined8 *)(pMVar23 + 0x30);
          lStack_28 = *(long *)(pMVar23 + 0x38);
                    /* try { // try from 002e9040 to 003e9043 has its CatchHandler @ 002e9464 */
          local_8 = 0;
          local_10 = 0;
          if (lStack_28 != 0) {
            piVar25 = (int *)(lStack_28 + 0x14);
            do {
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
              if (bVar4) {
                *piVar25 = *piVar25 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
          if (*(int *)(pMVar23 + 4) < 3) {
            local_10 = **(long **)(pMVar23 + 0x48);
            local_8 = (*(long **)(pMVar23 + 0x48))[1];
          }
          else {
            local_5c = 0;
            Mat::copySize((Mat *)&local_60,pMVar23);
          }
        }
        else {
          _InputArray::getMat_(iVar17);
        }
        local_b0 = 0;
        local_c0 = 0x2010000;
        local_b8 = (Mat *)&local_60;
        Mat::convertTo((Mat *)&local_1e0,(_OutputArray *)&local_c0,uVar2,1.0,0.0);
        if (lStack_28 != 0) {
          piVar25 = (int *)(lStack_28 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = *piVar25 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (lStack_1a8 != 0) {
          piVar25 = (int *)(lStack_1a8 + 0x14);
          do {
            iVar15 = *piVar25;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
            Mat::deallocate((Mat *)&local_1e0);
          }
        }
        plVar14 = local_18;
        lStack_1a8 = 0;
        local_1d0 = 0;
        uStack_1b8 = 0;
        local_1c0 = 0;
        uStack_1c8 = 0;
        if (local_1e0._4_4_ < 1) {
LAB_002e842c:
          if (2 < local_5c) goto LAB_002e8efc;
          local_1e0 = CONCAT44(local_5c,local_60);
          pMStack_1d8 = local_58;
          *local_198 = *local_18;
          local_198[1] = plVar14[1];
        }
        else {
          iVar15 = 0;
          ppMVar20 = local_1a0;
          do {
                    /* try { // try from 002e8408 to 003e840b has its CatchHandler @ 002e937c */
            *(undefined4 *)ppMVar20 = 0;
            iVar15 = iVar15 + 1;
            ppMVar20 = (Mat **)((long)ppMVar20 + 4);
          } while (iVar15 < local_1e0._4_4_);
          if (local_1e0._4_4_ < 3) goto LAB_002e842c;
LAB_002e8efc:
          local_1e0 = CONCAT44(local_1e0._4_4_,local_60);
          Mat::copySize((Mat *)&local_1e0,(Mat *)&local_60);
        }
                    /* try { // try from 002e8474 to 003e8477 has its CatchHandler @ 002e9374 */
        uStack_1c8 = lStack_48;
        local_1d0 = local_50;
        uStack_1b8 = lStack_38;
        local_1c0 = local_40;
        lStack_1a8 = lStack_28;
        local_1b0 = local_30;
        if (lStack_28 != 0) {
          piVar25 = (int *)(lStack_28 + 0x14);
          do {
            iVar15 = *piVar25;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = iVar15 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar15 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        lStack_28 = 0;
                    /* try { // try from 002e84c0 to 003e84c3 has its CatchHandler @ 002e9364 */
        local_50 = 0;
                    /* try { // try from 002e84c8 to 003e84cb has its CatchHandler @ 002e9374 */
        lStack_38 = 0;
        local_40 = 0;
        lStack_48 = 0;
        if (0 < local_5c) {
          iVar15 = 0;
          puVar22 = local_20;
          do {
            *(undefined4 *)puVar22 = 0;
                    /* try { // try from 002e84e4 to 003e84e7 has its CatchHandler @ 002e9320 */
            iVar15 = iVar15 + 1;
            puVar22 = (undefined8 *)((long)puVar22 + 4);
          } while (iVar15 < local_5c);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
      }
      iVar15 = _InputArray::kind((_InputArray *)param_3);
      if (iVar15 == 0x10000) {
        local_20 = &local_58;
        local_18 = &local_10;
        pMVar23 = *(Mat **)(param_3 + 8);
        local_60 = *(uint *)pMVar23;
                    /* try { // try from 002e8e64 to 003e8e67 has its CatchHandler @ 002e9294 */
        local_50 = *(long *)(pMVar23 + 0x10);
        local_5c = *(int *)(pMVar23 + 4);
        local_58 = *(Mat **)(pMVar23 + 8);
        lStack_48 = *(long *)(pMVar23 + 0x18);
        local_40 = *(long *)(pMVar23 + 0x20);
        lStack_38 = *(long *)(pMVar23 + 0x28);
        local_30 = *(undefined8 *)(pMVar23 + 0x30);
        lStack_28 = *(long *)(pMVar23 + 0x38);
                    /* try { // try from 002e8eb0 to 003e8eb3 has its CatchHandler @ 002e9264 */
        local_8 = 0;
                    /* try { // try from 002e8eb8 to 003e8ebb has its CatchHandler @ 002e9294 */
        local_10 = 0;
        if (lStack_28 != 0) {
          piVar25 = (int *)(lStack_28 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
            if (bVar4) {
              *piVar25 = *piVar25 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
                    /* try { // try from 002e8ed4 to 003e8ed7 has its CatchHandler @ 002e94ac */
        if (*(int *)(pMVar23 + 4) < 3) {
          local_10 = **(long **)(pMVar23 + 0x48);
          local_8 = (*(long **)(pMVar23 + 0x48))[1];
        }
        else {
          local_5c = 0;
          Mat::copySize((Mat *)&local_60,pMVar23);
                    /* try { // try from 002e9180 to 003e9183 has its CatchHandler @ 002e9384 */
        }
      }
      else {
        _InputArray::getMat_(iVar17);
      }
                    /* try { // try from 002e852c to 003e857f has its CatchHandler @ 002e9510 */
      Mat::reshape((int)(Mat *)&local_60,1);
      if (lStack_e8 != 0) {
        piVar25 = (int *)(lStack_e8 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = *piVar25 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (lStack_1a8 != 0) {
        piVar25 = (int *)(lStack_1a8 + 0x14);
        do {
          iVar15 = *piVar25;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = iVar15 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar15 == 1) {
          Mat::deallocate((Mat *)&local_1e0);
        }
      }
      plVar14 = local_d8;
      lStack_1a8 = 0;
      local_1d0 = 0;
                    /* try { // try from 002e8590 to 003e8593 has its CatchHandler @ 002e7ed0 */
      uStack_1b8 = 0;
      local_1c0 = 0;
                    /* try { // try from 002e859c to 003e859f has its CatchHandler @ 002e9510 */
      uStack_1c8 = 0;
      if (local_1e0._4_4_ < 1) {
LAB_002e85d0:
        if (2 < local_11c) goto LAB_002e8d84;
        local_1e0 = CONCAT44(local_11c,local_120);
        pMStack_1d8 = local_118;
        *local_198 = *local_d8;
        local_198[1] = plVar14[1];
      }
      else {
                    /* try { // try from 002e85a4 to 003e85a7 has its CatchHandler @ 002e9410 */
        iVar15 = 0;
        ppMVar20 = local_1a0;
        do {
          *(undefined4 *)ppMVar20 = 0;
          iVar15 = iVar15 + 1;
          ppMVar20 = (Mat **)((long)ppMVar20 + 4);
        } while (iVar15 < local_1e0._4_4_);
        if (local_1e0._4_4_ < 3) goto LAB_002e85d0;
LAB_002e8d84:
        local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
        Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
      }
                    /* try { // try from 002e8610 to 003e8613 has its CatchHandler @ 002e948c */
      uStack_1c8 = uStack_108;
      local_1d0 = local_110;
      uStack_1b8 = uStack_f8;
      local_1c0 = local_100;
      lStack_1a8 = lStack_e8;
      local_1b0 = local_f0;
      if (lStack_e8 != 0) {
        piVar25 = (int *)(lStack_e8 + 0x14);
        do {
          iVar15 = *piVar25;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = iVar15 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar15 == 1) {
                    /* try { // try from 002e8f24 to 003e8f27 has its CatchHandler @ 002e9510 */
          Mat::deallocate((Mat *)&local_120);
        }
      }
                    /* try { // try from 002e865c to 003e865f has its CatchHandler @ 002e947c */
      lStack_e8 = 0;
                    /* try { // try from 002e8664 to 003e8667 has its CatchHandler @ 002e948c */
      local_110 = 0;
      uStack_f8 = 0;
      local_100 = 0;
      uStack_108 = 0;
      if (0 < local_11c) {
                    /* try { // try from 002e8680 to 003e8683 has its CatchHandler @ 002e9384 */
        iVar15 = 0;
        do {
          *(undefined4 *)local_e0 = 0;
          iVar15 = iVar15 + 1;
          local_e0 = (Mat **)((long)local_e0 + 4);
        } while (iVar15 < local_11c);
      }
      if (local_d8 != &local_d0) {
        fastFree(local_d8);
      }
      if (lStack_28 != 0) {
        piVar25 = (int *)(lStack_28 + 0x14);
        do {
          iVar15 = *piVar25;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = iVar15 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
                    /* try { // try from 002e86c8 to 003e8723 has its CatchHandler @ 002e9510 */
        if (iVar15 == 1) {
          Mat::deallocate((Mat *)&local_60);
        }
      }
      lStack_28 = 0;
      local_50 = 0;
      lStack_38 = 0;
      local_40 = 0;
      lStack_48 = 0;
      if (0 < local_5c) {
        iVar15 = 0;
        puVar22 = local_20;
        do {
          *(undefined4 *)puVar22 = 0;
          iVar15 = iVar15 + 1;
          puVar22 = (undefined8 *)((long)puVar22 + 4);
        } while (iVar15 < local_5c);
      }
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
    }
                    /* try { // try from 002e8728 to 003e872b has its CatchHandler @ 002e92e0 */
    local_c0 = 0x1010000;
    local_b0 = 0;
    local_50 = 0;
    local_60 = 0x3010000;
    local_b8 = (Mat *)&local_240;
    local_58 = (Mat *)&local_1e0;
    calcCovarMatrix((_InputArray *)&local_c0,param_2,(_InputOutputArray *)&local_60,
                    param_4 & 0xffffffe7U | 8,uVar2);
    if ((param_4 & 2U) != 0) goto LAB_002e88f8;
    Mat::reshape((int)(Mat *)&local_1e0,1);
    if (lStack_88 != 0) {
      piVar25 = (int *)(lStack_88 + 0x14);
      do {
                    /* try { // try from 002e8794 to 003e8797 has its CatchHandler @ 002e9318 */
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar25 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    plVar14 = local_78;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
                    /* try { // try from 002e87e0 to 003e87e3 has its CatchHandler @ 002e92e8 */
    if (local_1e0._4_4_ < 1) {
LAB_002e8810:
      if (2 < local_bc) goto LAB_002e8d94;
      local_1e0 = CONCAT44(local_bc,local_c0);
      pMStack_1d8 = local_b8;
      *local_198 = *local_78;
      local_198[1] = plVar14[1];
    }
    else {
                    /* try { // try from 002e87e8 to 003e87eb has its CatchHandler @ 002e9318 */
      iVar15 = 0;
      ppMVar20 = local_1a0;
      do {
        *(undefined4 *)ppMVar20 = 0;
        iVar15 = iVar15 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar15 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_002e8810;
LAB_002e8d94:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_c0);
                    /* try { // try from 002e8d98 to 003e8df3 has its CatchHandler @ 002e9510 */
      Mat::copySize((Mat *)&local_1e0,(Mat *)&local_c0);
    }
                    /* try { // try from 002e8854 to 003e88af has its CatchHandler @ 002e9510 */
    uStack_1c8 = uStack_a8;
    local_1d0 = local_b0;
    uStack_1b8 = uStack_98;
    local_1c0 = local_a0;
    lStack_1a8 = lStack_88;
    local_1b0 = local_90;
    if (lStack_88 != 0) {
      piVar25 = (int *)(lStack_88 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
                    /* try { // try from 002e88b4 to 003e88b7 has its CatchHandler @ 002e94d0 */
    uStack_a8 = 0;
    if (0 < local_bc) {
      iVar15 = 0;
      do {
        *(undefined4 *)local_80 = 0;
        iVar15 = iVar15 + 1;
        local_80 = (Mat **)((long)local_80 + 4);
      } while (iVar15 < local_bc);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    Mat::copyTo((Mat *)&local_1e0,(_OutputArray *)param_3);
LAB_002e88f8:
    if (lStack_1a8 != 0) {
      piVar25 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
                    /* try { // try from 002e8920 to 003e8923 has its CatchHandler @ 002e9404 */
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (0 < local_1e0._4_4_) {
      iVar15 = 0;
      ppMVar20 = local_1a0;
      do {
        *(undefined4 *)ppMVar20 = 0;
        iVar15 = iVar15 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar15 < local_1e0._4_4_);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
                    /* try { // try from 002e896c to 003e896f has its CatchHandler @ 002e93f4 */
    if (local_208 != 0) {
                    /* try { // try from 002e8974 to 003e8977 has its CatchHandler @ 002e9404 */
      piVar25 = (int *)(local_208 + 0x14);
      do {
        iVar15 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar15 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar15 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
                    /* try { // try from 002e8990 to 003e8993 has its CatchHandler @ 002e93bc */
    local_208 = 0;
    local_230 = 0;
    local_218 = 0;
    local_220 = 0;
    local_228 = 0;
    if (0 < local_240._4_4_) {
      iVar15 = 0;
      ppMVar20 = local_200;
      do {
        *(undefined4 *)ppMVar20 = 0;
        iVar15 = iVar15 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar15 < local_240._4_4_);
    }
    pMVar23 = local_258;
    pMVar26 = local_250;
    pMVar5 = local_250;
    if (local_1f8 != &local_1f0) {
      fastFree(local_1f8);
      pMVar23 = local_258;
      pMVar26 = local_250;
      pMVar5 = local_250;
    }
    for (; pMVar13 = local_250, pMVar23 != local_250; pMVar23 = pMVar23 + 0x60) {
      local_250 = pMVar5;
      if (*(long *)(pMVar23 + 0x38) != 0) {
        piVar25 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
        do {
          iVar15 = *piVar25;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = iVar15 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar15 == 1) {
          Mat::deallocate(pMVar23);
        }
      }
      *(undefined8 *)(pMVar23 + 0x38) = 0;
      *(undefined8 *)(pMVar23 + 0x10) = 0;
      *(undefined8 *)(pMVar23 + 0x28) = 0;
      *(undefined8 *)(pMVar23 + 0x20) = 0;
      *(undefined8 *)(pMVar23 + 0x18) = 0;
      if (0 < *(int *)(pMVar23 + 4)) {
                    /* try { // try from 002e8a38 to 003e8a3b has its CatchHandler @ 002e94cc */
        iVar15 = 0;
        puVar24 = *(undefined4 **)(pMVar23 + 0x40);
        do {
          *puVar24 = 0;
          iVar15 = iVar15 + 1;
          puVar24 = puVar24 + 1;
        } while (iVar15 < *(int *)(pMVar23 + 4));
      }
      if (*(Mat **)(pMVar23 + 0x48) != pMVar23 + 0x50) {
        fastFree(*(Mat **)(pMVar23 + 0x48));
      }
      pMVar26 = local_258;
      pMVar5 = local_250;
      local_250 = pMVar13;
    }
    if (pMVar26 != (Mat *)0x0) {
      local_250 = pMVar5;
      operator_delete(pMVar26);
      return;
    }
    s_src_size___>_0_00469650[0] = (char)s_src_size___>_0_00469650._0_8_;
    s_src_size___>_0_00469650[1] = SUB81(s_src_size___>_0_00469650._0_8_,1);
    s_src_size___>_0_00469650[2] = SUB81(s_src_size___>_0_00469650._0_8_,2);
    s_src_size___>_0_00469650[3] = SUB81(s_src_size___>_0_00469650._0_8_,3);
    s_src_size___>_0_00469650[4] = SUB81(s_src_size___>_0_00469650._0_8_,4);
    s_src_size___>_0_00469650[5] = SUB81(s_src_size___>_0_00469650._0_8_,5);
    s_src_size___>_0_00469650[6] = SUB81(s_src_size___>_0_00469650._0_8_,6);
    s_src_size___>_0_00469650[7] = SUB81(s_src_size___>_0_00469650._0_8_,7);
    s_src_size___>_0_00469650[8] = (char)s_src_size___>_0_00469650._8_4_;
    s_src_size___>_0_00469650[9] = SUB41(s_src_size___>_0_00469650._8_4_,1);
    s_src_size___>_0_00469650[10] = SUB41(s_src_size___>_0_00469650._8_4_,2);
    s_src_size___>_0_00469650[0xb] = SUB41(s_src_size___>_0_00469650._8_4_,3);
    s_src_size___>_0_00469650[0xc] = (char)s_src_size___>_0_00469650._12_2_;
    s_src_size___>_0_00469650[0xd] = SUB21(s_src_size___>_0_00469650._12_2_,1);
    s____type_00469688[0] = (char)s____type_00469688._0_8_;
    s____type_00469688[1] = SUB81(s____type_00469688._0_8_,1);
    s____type_00469688[2] = SUB81(s____type_00469688._0_8_,2);
    s____type_00469688[3] = SUB81(s____type_00469688._0_8_,3);
    s____type_00469688[4] = SUB81(s____type_00469688._0_8_,4);
    s____type_00469688[5] = SUB81(s____type_00469688._0_8_,5);
    s____type_00469688[6] = SUB81(s____type_00469688._0_8_,6);
    s____type_00469688[7] = SUB81(s____type_00469688._0_8_,7);
    s__mean_size______size_00469698[0] = (char)s__mean_size______size_00469698._0_8_;
    s__mean_size______size_00469698[1] = SUB81(s__mean_size______size_00469698._0_8_,1);
    s__mean_size______size_00469698[2] = SUB81(s__mean_size______size_00469698._0_8_,2);
    s__mean_size______size_00469698[3] = SUB81(s__mean_size______size_00469698._0_8_,3);
    s__mean_size______size_00469698[4] = SUB81(s__mean_size______size_00469698._0_8_,4);
    s__mean_size______size_00469698[5] = SUB81(s__mean_size______size_00469698._0_8_,5);
    s__mean_size______size_00469698[6] = SUB81(s__mean_size______size_00469698._0_8_,6);
    s__mean_size______size_00469698[7] = SUB81(s__mean_size______size_00469698._0_8_,7);
    s__mean_size______size_00469698[8] = (char)s__mean_size______size_00469698._8_8_;
    s__mean_size______size_00469698[9] = SUB81(s__mean_size______size_00469698._8_8_,1);
    s__mean_size______size_00469698[10] = SUB81(s__mean_size______size_00469698._8_8_,2);
    s__mean_size______size_00469698[0xb] = SUB81(s__mean_size______size_00469698._8_8_,3);
    s__mean_size______size_00469698[0xc] = SUB81(s__mean_size______size_00469698._8_8_,4);
    s__mean_size______size_00469698[0xd] = SUB81(s__mean_size______size_00469698._8_8_,5);
    s__mean_size______size_00469698[0xe] = SUB81(s__mean_size______size_00469698._8_8_,6);
    s__mean_size______size_00469698[0xf] = SUB81(s__mean_size______size_00469698._8_8_,7);
    s__mean_size______size_00469698[0x10] = (char)s__mean_size______size_00469698._16_4_;
    s__mean_size______size_00469698[0x11] = SUB41(s__mean_size______size_00469698._16_4_,1);
    s__mean_size______size_00469698[0x12] = SUB41(s__mean_size______size_00469698._16_4_,2);
    s__mean_size______size_00469698[0x13] = SUB41(s__mean_size______size_00469698._16_4_,3);
    s_mean_size______size_004696f0[0] = (char)s_mean_size______size_004696f0._0_8_;
    s_mean_size______size_004696f0[1] = SUB81(s_mean_size______size_004696f0._0_8_,1);
    s_mean_size______size_004696f0[2] = SUB81(s_mean_size______size_004696f0._0_8_,2);
    s_mean_size______size_004696f0[3] = SUB81(s_mean_size______size_004696f0._0_8_,3);
    s_mean_size______size_004696f0[4] = SUB81(s_mean_size______size_004696f0._0_8_,4);
    s_mean_size______size_004696f0[5] = SUB81(s_mean_size______size_004696f0._0_8_,5);
    s_mean_size______size_004696f0[6] = SUB81(s_mean_size______size_004696f0._0_8_,6);
    s_mean_size______size_004696f0[7] = SUB81(s_mean_size______size_004696f0._0_8_,7);
    s_mean_size______size_004696f0[8] = (char)s_mean_size______size_004696f0._8_8_;
    s_mean_size______size_004696f0[9] = SUB81(s_mean_size______size_004696f0._8_8_,1);
    s_mean_size______size_004696f0[10] = SUB81(s_mean_size______size_004696f0._8_8_,2);
    s_mean_size______size_004696f0[0xb] = SUB81(s_mean_size______size_004696f0._8_8_,3);
    s_mean_size______size_004696f0[0xc] = SUB81(s_mean_size______size_004696f0._8_8_,4);
    s_mean_size______size_004696f0[0xd] = SUB81(s_mean_size______size_004696f0._8_8_,5);
    s_mean_size______size_004696f0[0xe] = SUB81(s_mean_size______size_004696f0._8_8_,6);
    s_mean_size______size_004696f0[0xf] = SUB81(s_mean_size______size_004696f0._8_8_,7);
    s_mean_size______size_004696f0[0x10] = (char)s_mean_size______size_004696f0._16_2_;
    s_mean_size______size_004696f0[0x11] = SUB21(s_mean_size______size_004696f0._16_2_,1);
    s_data____nsamples_>_0_00469708[8] = (char)s_data____nsamples_>_0_00469708._8_8_;
    s_data____nsamples_>_0_00469708[9] = SUB81(s_data____nsamples_>_0_00469708._8_8_,1);
    s_data____nsamples_>_0_00469708[10] = SUB81(s_data____nsamples_>_0_00469708._8_8_,2);
    s_data____nsamples_>_0_00469708[0xb] = SUB81(s_data____nsamples_>_0_00469708._8_8_,3);
    s_data____nsamples_>_0_00469708[0xc] = SUB81(s_data____nsamples_>_0_00469708._8_8_,4);
    s_data____nsamples_>_0_00469708[0xd] = SUB81(s_data____nsamples_>_0_00469708._8_8_,5);
    s_data____nsamples_>_0_00469708[0xe] = SUB81(s_data____nsamples_>_0_00469708._8_8_,6);
    s_data____nsamples_>_0_00469708[0xf] = SUB81(s_data____nsamples_>_0_00469708._8_8_,7);
    s_data____nsamples_>_0_00469708[0x10] = (char)s_data____nsamples_>_0_00469708._16_4_;
    s_data____nsamples_>_0_00469708[0x11] = SUB41(s_data____nsamples_>_0_00469708._16_4_,1);
    s_data____nsamples_>_0_00469708[0x12] = SUB41(s_data____nsamples_>_0_00469708._16_4_,2);
    s_data____nsamples_>_0_00469708[0x13] = SUB41(s_data____nsamples_>_0_00469708._16_4_,3);
    return;
  }
  iVar15 = _InputArray::kind(param_1);
  if (iVar15 == 0x10000) {
    pMVar23 = *(Mat **)(param_1 + 8);
                    /* try { // try from 002e7d08 to 003e7d0b has its CatchHandler @ 002e7bb0 */
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar23;
    local_50 = *(long *)(pMVar23 + 0x10);
    local_5c = *(int *)(pMVar23 + 4);
    local_58 = *(Mat **)(pMVar23 + 8);
    lStack_48 = *(long *)(pMVar23 + 0x18);
    local_40 = *(long *)(pMVar23 + 0x20);
    lStack_38 = *(long *)(pMVar23 + 0x28);
    local_30 = *(undefined8 *)(pMVar23 + 0x30);
    lStack_28 = *(long *)(pMVar23 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (lStack_28 != 0) {
      piVar25 = (int *)(lStack_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_10 = **(long **)(pMVar23 + 0x48);
      local_8 = (*(long **)(pMVar23 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar23);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_138 = &local_130;
  local_140 = &pMStack_178;
  uVar2 = (uint)param_4 >> 3 & 1;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  uStack_158 = 0;
  local_150 = 0;
  pMStack_178 = _UNK_002e94d8;
  local_180 = _DAT_002e94d0;
  lStack_148 = 0;
  lStack_128 = 0;
  local_130 = 0;
  if (uVar2 == ((uint)param_4 >> 4 & 1)) {
    local_258 = (Mat *)0x0;
    local_250 = (Mat *)0x0;
    __dest = (void *)String::allocate((String *)&local_258,0x3f);
                    /* try { // try from 002e8d48 to 003e8d4b has its CatchHandler @ 002e9494 */
    memcpy(__dest,"((flags & CV_COVAR_ROWS) != 0) ^ ((flags & CV_COVAR_COLS) != 0)",0x3f);
    error(-0xd7,(String *)&local_258,
          "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
          ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x994);
    String::deallocate((String *)&local_258);
  }
  uVar28 = local_60;
  if (uVar2 == 0) {
    iVar15 = local_58._4_4_;
    if (local_58._4_4_ < 1) {
LAB_002e8cb8:
      local_240 = 0;
      pMStack_238 = (Mat *)0x0;
      pcVar21 = (char *)String::allocate((String *)&local_240,0xc);
      uVar6 = s_data____nsamples_>_0_00469708._16_4_;
                    /* try { // try from 002e8cd8 to 003e8cdb has its CatchHandler @ 002e92cc */
      *(undefined8 *)pcVar21 = s_data____nsamples_>_0_00469708._8_8_;
      *(undefined4 *)(pcVar21 + 8) = uVar6;
      error(-0xd7,(String *)&local_240,
            "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x998);
      String::deallocate((String *)&local_240);
      if (uVar2 != 0) {
                    /* try { // try from 002e8d24 to 003e8d27 has its CatchHandler @ 002e929c */
        goto LAB_002e78b4;
      }
                    /* try { // try from 002e8d2c to 003e8d2f has its CatchHandler @ 002e92cc */
    }
    iVar29 = 1;
    iVar16 = (int)local_58;
  }
  else {
    iVar15 = (int)local_58;
    if ((int)local_58 < 1) goto LAB_002e8cb8;
LAB_002e78b4:
                    /* try { // try from 002e78bc to 003e78bf has its CatchHandler @ 002e7890 */
    iVar16 = 1;
    iVar29 = local_58._4_4_;
  }
  if (((uint)param_4 >> 1 & 1) != 0) {
                    /* try { // try from 002e78c4 to 003e78c7 has its CatchHandler @ 002e7ba8 */
    iVar18 = _InputArray::kind((_InputArray *)param_3);
    if (iVar18 == 0x10000) {
      local_e0 = &local_118;
      local_d8 = &local_d0;
      pMVar23 = *(Mat **)(param_3 + 8);
      local_120 = *(undefined4 *)pMVar23;
      local_110 = *(undefined8 *)(pMVar23 + 0x10);
      local_11c = *(int *)(pMVar23 + 4);
      local_118 = *(Mat **)(pMVar23 + 8);
      uStack_108 = *(undefined8 *)(pMVar23 + 0x18);
      local_100 = *(undefined8 *)(pMVar23 + 0x20);
      uStack_f8 = *(undefined8 *)(pMVar23 + 0x28);
      local_f0 = *(undefined8 *)(pMVar23 + 0x30);
      lStack_e8 = *(long *)(pMVar23 + 0x38);
      local_c8 = 0;
      local_d0 = 0;
      if (lStack_e8 != 0) {
        piVar25 = (int *)(lStack_e8 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = *piVar25 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
                    /* try { // try from 002e8c6c to 003e8c6f has its CatchHandler @ 002e94c8 */
      if (*(int *)(pMVar23 + 4) < 3) {
        local_d0 = **(long **)(pMVar23 + 0x48);
        local_c8 = (*(long **)(pMVar23 + 0x48))[1];
      }
      else {
        local_11c = 0;
        Mat::copySize((Mat *)&local_120,pMVar23);
      }
    }
    else {
      _InputArray::getMat_(iVar17);
    }
    if (lStack_e8 != 0) {
      piVar25 = (int *)(lStack_e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_148 != 0) {
      piVar25 = (int *)(lStack_148 + 0x14);
      do {
        iVar18 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar18 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    plVar14 = local_d8;
    lStack_148 = 0;
                    /* try { // try from 002e7930 to 003e7933 has its CatchHandler @ 002e7ba0 */
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (local_180._4_4_ < 1) {
LAB_002e7974:
                    /* try { // try from 002e797c to 003e797f has its CatchHandler @ 002e7b90 */
      if (2 < local_11c) goto LAB_002e8ca4;
                    /* try { // try from 002e7984 to 003e7987 has its CatchHandler @ 002e7ba0 */
      local_180 = CONCAT44(local_11c,local_120);
      pMStack_178 = local_118;
                    /* try { // try from 002e79a0 to 003e79a3 has its CatchHandler @ 002e7b4c */
      *local_138 = *local_d8;
      local_138[1] = plVar14[1];
    }
    else {
      iVar18 = 0;
      ppMVar20 = local_140;
      do {
        *(int *)ppMVar20 = 0;
        iVar18 = iVar18 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar18 < local_180._4_4_);
      if (local_180._4_4_ < 3) goto LAB_002e7974;
LAB_002e8ca4:
      local_180 = CONCAT44(local_180._4_4_,local_120);
      Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
    }
    uStack_168 = uStack_108;
    local_170 = local_110;
    uStack_158 = uStack_f8;
    local_160 = local_100;
    lStack_148 = lStack_e8;
    local_150 = local_f0;
    if (lStack_e8 != 0) {
      piVar25 = (int *)(lStack_e8 + 0x14);
      do {
                    /* try { // try from 002e79e8 to 003e79eb has its CatchHandler @ 002e7890 */
        iVar18 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar18 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar18 = 0;
      ppMVar20 = local_e0;
      do {
        *(undefined4 *)ppMVar20 = 0;
        iVar18 = iVar18 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar18 < local_11c);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
    if (param_5 < 0) {
      param_5 = uVar28;
    }
    uVar28 = param_5 & 7U;
    if ((param_5 & 7U) < ((uint)local_180 & 7)) {
      uVar28 = (uint)local_180 & 7;
    }
    if (uVar28 < 5) {
      uVar28 = 5;
    }
    if ((*(int *)((long)local_140 + 4) != iVar29) || (*(int *)local_140 != iVar16)) {
      local_1e0 = 0;
      pMStack_1d8 = (Mat *)0x0;
      pcVar21 = (char *)String::allocate((String *)&local_1e0,0x13);
      cVar3 = s_mean_size______size_004696f0[0x12];
      uVar9 = s_mean_size______size_004696f0._8_8_;
      uVar8 = s_mean_size______size_004696f0._0_8_;
      *(undefined2 *)(pcVar21 + 0x10) = s_mean_size______size_004696f0._16_2_;
      pcVar21[0x12] = cVar3;
      *(undefined8 *)pcVar21 = uVar8;
      *(undefined8 *)(pcVar21 + 8) = uVar9;
      error(-0xd7,(String *)&local_1e0,
            "void cv::calcCovarMatrix(cv::InputArray, cv::OutputArray, cv::InputOutputArray, int, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x99f);
      String::deallocate((String *)&local_1e0);
    }
                    /* try { // try from 002e7b08 to 003e7b43 has its CatchHandler @ 002e7b4c */
    if (((uint)local_180 & 0xfff) == uVar28) goto LAB_002e7728;
    local_bc = *(int *)local_140;
    local_c0 = *(int *)((long)local_140 + 4);
    _OutputArray::create((_OutputArray *)param_3,(Mat *)&local_c0,uVar28,0xffffffff,0,0);
                    /* catch() { ... } // from try @ 002e79a0 with catch @ 002e7b4c
                       catch() { ... } // from try @ 002e7b08 with catch @ 002e7b4c */
    iVar16 = _InputArray::kind((_InputArray *)param_3);
    if (iVar16 == 0x10000) {
      pMVar23 = *(Mat **)(param_3 + 8);
      local_80 = &local_b8;
      local_78 = &local_70;
      local_c0 = *(int *)pMVar23;
      local_b0 = *(undefined8 *)(pMVar23 + 0x10);
      local_bc = *(int *)(pMVar23 + 4);
      local_b8 = *(Mat **)(pMVar23 + 8);
      uStack_a8 = *(undefined8 *)(pMVar23 + 0x18);
      local_a0 = *(undefined8 *)(pMVar23 + 0x20);
      uStack_98 = *(undefined8 *)(pMVar23 + 0x28);
      local_90 = *(undefined8 *)(pMVar23 + 0x30);
      lStack_88 = *(long *)(pMVar23 + 0x38);
      local_68 = 0;
      local_70 = 0;
      if (lStack_88 != 0) {
        piVar25 = (int *)(lStack_88 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
          if (bVar4) {
            *piVar25 = *piVar25 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(int *)(pMVar23 + 4) < 3) {
        local_70 = **(long **)(pMVar23 + 0x48);
        local_68 = (*(long **)(pMVar23 + 0x48))[1];
      }
      else {
        local_bc = 0;
        Mat::copySize((Mat *)&local_c0,pMVar23);
      }
    }
    else {
      _InputArray::getMat_(iVar17);
    }
    local_110 = 0;
    local_120 = 0x2010000;
    local_118 = (Mat *)&local_c0;
                    /* try { // try from 002e7b8c to 003e7b8f has its CatchHandler @ 002e7890 */
                    /* catch() { ... } // from try @ 002e797c with catch @ 002e7b90 */
    Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_120,uVar28,1.0,0.0);
    if (lStack_88 != 0) {
      piVar25 = (int *)(lStack_88 + 0x14);
      do {
                    /* catch() { ... } // from try @ 002e7930 with catch @ 002e7ba0
                       catch() { ... } // from try @ 002e7984 with catch @ 002e7ba0 */
                    /* catch() { ... } // from try @ 002e78c4 with catch @ 002e7ba8 */
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
                    /* catch() { ... } // from try @ 002e7bdc with catch @ 002e7bb0
                       catch() { ... } // from try @ 002e7d08 with catch @ 002e7bb0
                       catch() { ... } // from try @ 002e7eac with catch @ 002e7bb0 */
    if (lStack_148 != 0) {
      piVar25 = (int *)(lStack_148 + 0x14);
      do {
        iVar17 = *piVar25;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar17 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar17 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    plVar14 = local_78;
    lStack_148 = 0;
                    /* try { // try from 002e7bdc to 003e7bdf has its CatchHandler @ 002e7bb0 */
    local_170 = 0;
                    /* try { // try from 002e7be4 to 003e7be7 has its CatchHandler @ 002e7ec8 */
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (local_180._4_4_ < 1) {
LAB_002e7c20:
      if (2 < local_bc) goto LAB_002e8e10;
      local_180 = CONCAT44(local_bc,local_c0);
      pMStack_178 = local_b8;
      *local_138 = *local_78;
                    /* try { // try from 002e7c50 to 003e7c53 has its CatchHandler @ 002e7ec0 */
      local_138[1] = plVar14[1];
    }
    else {
      iVar17 = 0;
      ppMVar20 = local_140;
      do {
        *(int *)ppMVar20 = 0;
        iVar17 = iVar17 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar17 < local_180._4_4_);
      if (local_180._4_4_ < 3) goto LAB_002e7c20;
LAB_002e8e10:
      local_180 = CONCAT44(local_180._4_4_,local_c0);
      Mat::copySize((Mat *)&local_180,(Mat *)&local_c0);
    }
    uStack_168 = uStack_a8;
    local_170 = local_b0;
    uStack_158 = uStack_98;
    local_160 = local_a0;
    lStack_148 = lStack_88;
    local_150 = local_90;
    if (lStack_88 != 0) {
      piVar25 = (int *)(lStack_88 + 0x14);
      do {
        iVar17 = *piVar25;
                    /* try { // try from 002e7c9c to 003e7c9f has its CatchHandler @ 002e7eb0 */
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = iVar17 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
                    /* try { // try from 002e7ca4 to 003e7ca7 has its CatchHandler @ 002e7ec0 */
      if (iVar17 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
                    /* try { // try from 002e7cc0 to 003e7cc3 has its CatchHandler @ 002e7e6c */
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_bc) {
      iVar17 = 0;
      ppMVar20 = local_80;
      do {
        *(undefined4 *)ppMVar20 = 0;
        iVar17 = iVar17 + 1;
        ppMVar20 = (Mat **)((long)ppMVar20 + 4);
      } while (iVar17 < local_bc);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    goto LAB_002e7728;
  }
  if (-1 < param_5) {
    uVar28 = param_5;
  }
  uVar28 = uVar28 & 7;
  if (uVar28 < 5) {
    uVar28 = 5;
  }
  reduce(param_1,(_OutputArray *)param_3,uVar2 ^ 1,1,uVar28);
  iVar16 = _InputArray::kind((_InputArray *)param_3);
  if (iVar16 == 0x10000) {
    pMVar23 = *(Mat **)(param_3 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(int *)pMVar23;
    local_b0 = *(undefined8 *)(pMVar23 + 0x10);
    local_bc = *(int *)(pMVar23 + 4);
    local_b8 = *(Mat **)(pMVar23 + 8);
                    /* try { // try from 002e8af0 to 003e8af3 has its CatchHandler @ 002e94d4 */
                    /* try { // try from 002e8af8 to 003e8afb has its CatchHandler @ 002e94e4 */
    uStack_a8 = *(undefined8 *)(pMVar23 + 0x18);
    local_a0 = *(undefined8 *)(pMVar23 + 0x20);
    uStack_98 = *(undefined8 *)(pMVar23 + 0x28);
    local_90 = *(undefined8 *)(pMVar23 + 0x30);
                    /* try { // try from 002e8b14 to 003e8b17 has its CatchHandler @ 002e9204 */
    lStack_88 = *(long *)(pMVar23 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (lStack_88 != 0) {
      piVar25 = (int *)(lStack_88 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar4) {
          *piVar25 = *piVar25 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar23 + 4) < 3) {
      local_70 = **(long **)(pMVar23 + 0x48);
                    /* try { // try from 002e8b64 to 003e8c67 has its CatchHandler @ 002e9510 */
      local_68 = (*(long **)(pMVar23 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar23);
    }
  }
  else {
    _InputArray::getMat_(iVar17);
  }
  if (lStack_88 != 0) {
    piVar25 = (int *)(lStack_88 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = *piVar25 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_148 != 0) {
    piVar25 = (int *)(lStack_148 + 0x14);
    do {
      iVar17 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar17 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  plVar14 = local_78;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
                    /* try { // try from 002e7630 to 003e7633 has its CatchHandler @ 002e77f4 */
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_002e7668:
    if (2 < local_bc) goto LAB_002e7674;
    local_180 = CONCAT44(local_bc,local_c0);
    pMStack_178 = local_b8;
    *local_138 = *local_78;
    local_138[1] = plVar14[1];
  }
  else {
    iVar17 = 0;
    ppMVar20 = local_140;
    do {
      *(int *)ppMVar20 = 0;
      iVar17 = iVar17 + 1;
      ppMVar20 = (Mat **)((long)ppMVar20 + 4);
    } while (iVar17 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_002e7668;
LAB_002e7674:
    local_180 = CONCAT44(local_180._4_4_,local_c0);
    Mat::copySize((Mat *)&local_180,(Mat *)&local_c0);
  }
                    /* try { // try from 002e76a4 to 003e76a7 has its CatchHandler @ 002e7838 */
  uStack_168 = uStack_a8;
  local_170 = local_b0;
  uStack_158 = uStack_98;
  local_160 = local_a0;
  lStack_148 = lStack_88;
  local_150 = local_90;
  if (lStack_88 != 0) {
    piVar25 = (int *)(lStack_88 + 0x14);
    do {
      iVar17 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar17 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar17 = 0;
    ppMVar20 = local_80;
    do {
      *(undefined4 *)ppMVar20 = 0;
      iVar17 = iVar17 + 1;
      ppMVar20 = (Mat **)((long)ppMVar20 + 4);
    } while (iVar17 < local_bc);
  }
                    /* try { // try from 002e7718 to 003e7793 has its CatchHandler @ 002e7360 */
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
LAB_002e7728:
  local_120 = 0x1010000;
  local_c0 = 0x1010000;
  local_110 = 0;
  local_b0 = 0;
  dVar31 = 1.0;
  if (((uint)param_4 >> 2 & 1) != 0) {
    dVar31 = 1.0 / (double)iVar15;
  }
  local_118 = (Mat *)&local_60;
  local_b8 = (Mat *)&local_180;
  mulTransposed((_InputArray *)&local_120,param_2,(bool)((byte)uVar2 ^ (byte)param_4 & 1 ^ 1),
                (_InputArray *)&local_c0,dVar31,uVar28);
  if (lStack_148 != 0) {
    piVar25 = (int *)(lStack_148 + 0x14);
    do {
      iVar15 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e779c to 003e779f has its CatchHandler @ 002e7838 */
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
                    /* try { // try from 002e77a8 to 003e77ab has its CatchHandler @ 002e77f4 */
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
                    /* try { // try from 002e77c8 to 003e77ef has its CatchHandler @ 002e7870 */
    iVar15 = 0;
    ppMVar20 = local_140;
    do {
      *(int *)ppMVar20 = 0;
      iVar15 = iVar15 + 1;
      ppMVar20 = (Mat **)((long)ppMVar20 + 4);
    } while (iVar15 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
                    /* catch() { ... } // from try @ 002e7630 with catch @ 002e77f4
                       catch() { ... } // from try @ 002e77a8 with catch @ 002e77f4 */
    fastFree(local_138);
  }
  if (lStack_28 != 0) {
    piVar25 = (int *)(lStack_28 + 0x14);
    do {
      iVar15 = *piVar25;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar4) {
        *piVar25 = iVar15 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar15 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
                    /* try { // try from 002e7834 to 003e7837 has its CatchHandler @ 002e7360 */
  lStack_38 = 0;
                    /* catch() { ... } // from try @ 002e73c8 with catch @ 002e7838
                       catch() { ... } // from try @ 002e76a4 with catch @ 002e7838
                       catch() { ... } // from try @ 002e779c with catch @ 002e7838 */
  local_40 = 0;
  lStack_48 = 0;
                    /* catch() { ... } // from try @ 002e749c with catch @ 002e7840 */
  if (0 < local_5c) {
    iVar15 = 0;
    puVar22 = local_20;
    do {
      *(undefined4 *)puVar22 = 0;
      iVar15 = iVar15 + 1;
      puVar22 = (undefined8 *)((long)puVar22 + 4);
    } while (iVar15 < local_5c);
  }
  if (local_18 != &local_10) {
                    /* catch() { ... } // from try @ 002e7450 with catch @ 002e7870
                       catch() { ... } // from try @ 002e74a4 with catch @ 002e7870
                       catch() { ... } // from try @ 002e77c8 with catch @ 002e7870 */
    fastFree(local_18);
  }
                    /* catch() { ... } // from try @ 002e78bc with catch @ 002e7890
                       catch() { ... } // from try @ 002e79e8 with catch @ 002e7890
                       catch() { ... } // from try @ 002e7b8c with catch @ 002e7890 */
  return;
}


==================================================================

### FUNC 002e94e0 (3052 bytes) name=calcCovarMatrix

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::calcCovarMatrix(cv::Mat const*, int, cv::Mat&, cv::Mat&, int, int) */

void cv::calcCovarMatrix(Mat *param_1,int param_2,Mat *param_3,Mat *param_4,int param_5,int param_6)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  char *pcVar15;
  long *plVar16;
  undefined8 *puVar17;
  uint uVar18;
  undefined4 *puVar19;
  Mat **ppMVar20;
  long lVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  long lVar25;
  int iVar26;
  int local_208;
  int local_204;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 local_1e0;
  Mat *pMStack_1d8;
  ulong local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  Mat **local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  ulong local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  ulong local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  Mat *pMStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  Mat **local_80;
  long *local_78;
  long local_70 [2];
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  long lStack_48;
  long local_40;
  long lStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
                    /* catch() { ... } // from try @ 002e8aa4 with catch @ 002e94e4
                       catch() { ... } // from try @ 002e8af8 with catch @ 002e94e4 */
                    /* catch() { ... } // from try @ 002e804c with catch @ 002e94ec */
                    /* catch() { ... } // from try @ 002e7fc8 with catch @ 002e9500 */
                    /* catch() { ... } // from try @ 002e7f7c with catch @ 002e9510
                       catch() { ... } // from try @ 002e7fd0 with catch @ 002e9510
                       catch() { ... } // from try @ 002e8054 with catch @ 002e9510
                       catch() { ... } // from try @ 002e80b8 with catch @ 002e9510
                       catch() { ... } // from try @ 002e819c with catch @ 002e9510
                       catch() { ... } // from try @ 002e82d0 with catch @ 002e9510
                       catch() { ... } // from try @ 002e852c with catch @ 002e9510
                       catch() { ... } // from try @ 002e859c with catch @ 002e9510
                       catch() { ... } // from try @ 002e86c8 with catch @ 002e9510
                       catch() { ... } // from try @ 002e8854 with catch @ 002e9510
                       catch() { ... } // from try @ 002e89e0 with catch @ 002e9510
                       catch() { ... } // from try @ 002e8b64 with catch @ 002e9510
                       catch() { ... } // from try @ 002e8d98 with catch @ 002e9510
                       catch() { ... } // from try @ 002e8f24 with catch @ 002e9510 */
                    /* catch() { ... } // from try @ 002e80b0 with catch @ 002e9518 */
                    /* catch() { ... } // from try @ 002e9574 with catch @ 002e9530
                       catch() { ... } // from try @ 002e989c with catch @ 002e9530
                       catch() { ... } // from try @ 002e99a4 with catch @ 002e9530
                       catch() { ... } // from try @ 002e9bf0 with catch @ 002e9530
                       catch() { ... } // from try @ 002e9d30 with catch @ 002e9530 */
  if ((param_1 == (Mat *)0x0) || (param_2 < 1)) {
    local_60 = 0;
    local_58 = (Mat *)0x0;
    pcVar15 = (char *)String::allocate((String *)&local_60,0x14);
    uVar7 = s_data____nsamples_>_0_00469708._8_8_;
    uVar6 = s_data____nsamples_>_0_00469708._0_8_;
                    /* try { // try from 002e9fa0 to 003e9ff7 has its CatchHandler @ 002ea180 */
    *(undefined4 *)(pcVar15 + 0x10) = s_data____nsamples_>_0_00469708._16_4_;
    *(undefined8 *)pcVar15 = uVar6;
    *(undefined8 *)(pcVar15 + 8) = uVar7;
    error(-0xd7,(String *)&local_60,
          "void cv::calcCovarMatrix(const cv::Mat*, int, cv::Mat&, cv::Mat&, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x93a);
    String::deallocate((String *)&local_60);
    iVar26 = *(int *)(param_1 + 4);
    iVar22 = (*(int **)(param_1 + 0x40))[1];
    iVar24 = **(int **)(param_1 + 0x40);
    iVar23 = iVar22 * iVar24;
    if (0 < iVar26) goto LAB_002e9554;
LAB_002e9ff4:
    iVar26 = 0;
  }
  else {
    iVar26 = *(int *)(param_1 + 4);
    iVar22 = (*(int **)(param_1 + 0x40))[1];
    iVar24 = **(int **)(param_1 + 0x40);
    iVar23 = iVar22 * iVar24;
    if (iVar26 < 1) goto LAB_002e9ff4;
LAB_002e9554:
    iVar26 = *(int *)(*(long *)(param_1 + 0x48) + (long)iVar26 * 8 + -8);
  }
  uVar13 = *(uint *)param_1;
  uVar2 = uVar13;
                    /* try { // try from 002e9574 to 003e9597 has its CatchHandler @ 002e9530 */
  if (-1 < param_6) {
    uVar2 = param_6;
  }
  uVar18 = *(uint *)param_4;
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_188 = 0;
  local_190 = 0;
  uVar3 = uVar2 & 7;
  if ((uVar2 & 7) < (uVar18 & 7)) {
    uVar3 = uVar18 & 7;
  }
  uVar2 = uVar13 & 0xfff;
  local_1a0 = &pMStack_1d8;
  pMStack_1d8 = _UNK_002ea1f8;
  local_1e0 = _DAT_002ea1f0;
  if (uVar3 < 5) {
    uVar3 = 5;
  }
  uStack_1c8 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
                    /* try { // try from 002e95e8 to 003e95eb has its CatchHandler @ 002e9d44 */
  local_1b0 = 0;
  lStack_1a8 = 0;
  iVar11 = (int)(Mat *)&local_1e0;
  if (((uint)param_5 >> 1 & 1) != 0) {
    if ((iVar22 != (*(int **)(param_4 + 0x40))[1]) || (iVar24 != **(int **)(param_4 + 0x40))) {
      local_200 = 0;
      local_1f8 = 0;
      pcVar15 = (char *)String::allocate((String *)&local_200,0x14);
      uVar7 = s__mean_size______size_00469698._8_8_;
      uVar6 = s__mean_size______size_00469698._0_8_;
                    /* try { // try from 002e9634 to 003e9637 has its CatchHandler @ 002e9d34 */
                    /* try { // try from 002e963c to 003e963f has its CatchHandler @ 002e9d44 */
      *(undefined4 *)(pcVar15 + 0x10) = s__mean_size______size_00469698._16_4_;
      *(undefined8 *)pcVar15 = uVar6;
      *(undefined8 *)(pcVar15 + 8) = uVar7;
      error(-0xd7,(String *)&local_200,
            "void cv::calcCovarMatrix(const cv::Mat*, int, cv::Mat&, cv::Mat&, int, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x943);
      String::deallocate((String *)&local_200);
                    /* try { // try from 002e967c to 003e976b has its CatchHandler @ 002e9c94 */
      uVar18 = *(uint *)param_4;
    }
    if (((uVar18 >> 0xe & 1) == 0) || ((uVar18 & 0xfff) != uVar3)) {
      local_50 = 0;
      local_60 = CONCAT44(local_60._4_4_,0x2010000);
      local_58 = (Mat *)&local_1e0;
      Mat::convertTo(param_4,(_OutputArray *)&local_60,uVar3,1.0,0.0);
      Mat::reshape(iVar11,1);
      if (lStack_e8 != 0) {
        piVar1 = (int *)(lStack_e8 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (lStack_1a8 != 0) {
        piVar1 = (int *)(lStack_1a8 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar12 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_1e0);
        }
      }
      puVar17 = local_d8;
      lStack_1a8 = 0;
      local_1d0 = 0;
      uStack_1b8 = 0;
      local_1c0 = 0;
      uStack_1c8 = 0;
      if (local_1e0._4_4_ < 1) {
LAB_002e9754:
        if (2 < local_11c) goto LAB_002e9760;
        pMStack_1d8 = local_118;
        local_1e0 = CONCAT44(local_11c,local_120);
        *local_198 = *local_d8;
        local_198[1] = puVar17[1];
      }
      else {
        iVar12 = 0;
        ppMVar20 = local_1a0;
        do {
          *(undefined4 *)ppMVar20 = 0;
          iVar12 = iVar12 + 1;
          ppMVar20 = (Mat **)((long)ppMVar20 + 4);
        } while (iVar12 < local_1e0._4_4_);
        if (local_1e0._4_4_ < 3) goto LAB_002e9754;
LAB_002e9760:
        local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
        Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
      }
                    /* try { // try from 002e9794 to 003e9797 has its CatchHandler @ 002e9da0 */
      uStack_1b8 = uStack_f8;
      local_1c0 = local_100;
      lStack_1a8 = lStack_e8;
      local_1b0 = local_f0;
                    /* try { // try from 002e979c to 003e979f has its CatchHandler @ 002e9c94 */
      uStack_1c8 = uStack_108;
      local_1d0 = local_110;
      if (lStack_e8 != 0) {
        piVar1 = (int *)(lStack_e8 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar12 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_120);
        }
      }
      lStack_e8 = 0;
      local_110 = 0;
      uStack_f8 = 0;
      local_100 = 0;
      uStack_108 = 0;
      if (0 < local_11c) {
        iVar12 = 0;
        do {
          *local_e0 = 0;
          iVar12 = iVar12 + 1;
          local_e0 = local_e0 + 1;
        } while (iVar12 < local_11c);
      }
      if (local_d8 != auStack_d0) {
        fastFree(local_d8);
      }
    }
    else {
      Mat::reshape((int)param_4,1);
      if (lStack_148 != 0) {
        piVar1 = (int *)(lStack_148 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (lStack_1a8 != 0) {
        piVar1 = (int *)(lStack_1a8 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar12 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_1e0);
        }
      }
      puVar17 = local_138;
      lStack_1a8 = 0;
      local_1d0 = 0;
                    /* catch() { ... } // from try @ 002e9ee8 with catch @ 002e9e60
                       catch() { ... } // from try @ 002ea110 with catch @ 002e9e60
                       catch() { ... } // from try @ 002ea17c with catch @ 002e9e60 */
      uStack_1b8 = 0;
      local_1c0 = 0;
      uStack_1c8 = 0;
      if (local_1e0._4_4_ < 1) {
LAB_002e9ea0:
        if (2 < local_17c) goto LAB_002e9eac;
        pMStack_1d8 = local_178;
        local_1e0 = CONCAT44(local_17c,local_180);
        *local_198 = *local_138;
        local_198[1] = puVar17[1];
      }
      else {
        iVar12 = 0;
        ppMVar20 = local_1a0;
        do {
          *(undefined4 *)ppMVar20 = 0;
          iVar12 = iVar12 + 1;
          ppMVar20 = (Mat **)((long)ppMVar20 + 4);
        } while (iVar12 < local_1e0._4_4_);
        if (local_1e0._4_4_ < 3) goto LAB_002e9ea0;
LAB_002e9eac:
        local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
        Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
      }
      uStack_1b8 = uStack_158;
      local_1c0 = local_160;
      lStack_1a8 = lStack_148;
      local_1b0 = local_150;
                    /* try { // try from 002e9ee8 to 003e9eeb has its CatchHandler @ 002e9e60 */
      uStack_1c8 = uStack_168;
      local_1d0 = local_170;
      if (lStack_148 != 0) {
        piVar1 = (int *)(lStack_148 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar12 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_180);
        }
      }
                    /* try { // try from 002e9f0c to 003e9f0f has its CatchHandler @ 002ea158 */
      lStack_148 = 0;
      local_170 = 0;
      uStack_158 = 0;
      local_160 = 0;
      uStack_168 = 0;
      if (0 < local_17c) {
        iVar12 = 0;
        do {
          *local_140 = 0;
          iVar12 = iVar12 + 1;
          local_140 = local_140 + 1;
        } while (iVar12 < local_17c);
      }
      if (local_138 != auStack_130) {
        fastFree(local_138);
                    /* try { // try from 002e9f5c to 003e9f5f has its CatchHandler @ 002ea1d0 */
      }
    }
  }
  local_78 = local_70;
  local_80 = &pMStack_b8;
  local_b0 = 0;
  pMStack_b8 = _UNK_002ea1f8;
  local_c0 = _DAT_002ea1f0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_70[1] = 0;
  local_70[0] = 0;
  local_208 = param_2;
  local_204 = iVar23;
  Mat::create((Mat *)&local_c0,2,&local_208,uVar2);
  if (0 < param_2) {
    iVar12 = (uVar13 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3);
                    /* try { // try from 002e989c to 003e989f has its CatchHandler @ 002e9530 */
    lVar25 = (long)iVar12 * (long)iVar22;
    lVar21 = 0;
    do {
      while( true ) {
        if (((iVar22 != (*(int **)(param_1 + 0x40))[1]) || (iVar24 != **(int **)(param_1 + 0x40)))
           || (uVar13 = *(uint *)param_1, uVar2 != (uVar13 & 0xfff))) {
          local_1f0 = 0;
                    /* try { // try from 002e9930 to 003e9933 has its CatchHandler @ 002e9c94 */
          local_1e8 = 0;
          pcVar15 = (char *)String::allocate((String *)&local_1f0,0x30);
          uVar10 = s_data_i__size______size____data_i_00469720._40_8_;
          uVar9 = s_data_i__size______size____data_i_00469720._32_8_;
          uVar8 = s_data_i__size______size____data_i_00469720._24_8_;
          uVar7 = s_data_i__size______size____data_i_00469720._16_8_;
          uVar6 = s_data_i__size______size____data_i_00469720._8_8_;
                    /* try { // try from 002e9960 to 003e9963 has its CatchHandler @ 002e9d90 */
                    /* try { // try from 002e9968 to 003e996b has its CatchHandler @ 002e9c94 */
          *(undefined8 *)pcVar15 = s_data_i__size______size____data_i_00469720._0_8_;
          *(undefined8 *)(pcVar15 + 8) = uVar6;
          *(undefined8 *)(pcVar15 + 0x10) = uVar7;
          *(undefined8 *)(pcVar15 + 0x18) = uVar8;
          *(undefined8 *)(pcVar15 + 0x20) = uVar9;
          *(undefined8 *)(pcVar15 + 0x28) = uVar10;
          error(-0xd7,(String *)&local_1f0,
                "void cv::calcCovarMatrix(const cv::Mat*, int, cv::Mat&, cv::Mat&, int, int)",
                "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0x951);
          String::deallocate((String *)&local_1f0);
          uVar13 = *(uint *)param_1;
        }
        if ((uVar13 >> 0xe & 1) == 0) break;
        memcpy((void *)(local_b0 + lVar21 * *local_78),*(void **)(param_1 + 0x10),
               (long)(iVar26 * iVar23));
LAB_002e98f8:
        lVar21 = lVar21 + 1;
        param_1 = param_1 + 0x60;
        if (param_2 <= (int)lVar21) goto LAB_002e9a94;
      }
      local_18 = &local_10;
                    /* try { // try from 002e99a4 to 003e99a7 has its CatchHandler @ 002e9530 */
      local_58 = (Mat *)CONCAT44(iVar22,iVar24);
      local_50 = local_b0 + lVar21 * *local_78;
      local_30 = 0;
      lStack_28 = 0;
      local_40 = local_50 + lVar25 * iVar24;
      local_60 = CONCAT44(2,uVar2 + 0x42ff0000) | 0x4000;
      local_110 = CONCAT44(uVar13,uVar13) & 0x400000004000;
      local_120 = 0x2010000;
      local_118 = (Mat *)&local_60;
      lStack_48 = local_50;
      lStack_38 = local_40;
      local_20 = &local_58;
      local_10 = lVar25;
      local_8 = (long)iVar12;
      Mat::copyTo(param_1,(_OutputArray *)&local_120);
      if (lStack_28 != 0) {
        piVar1 = (int *)(lStack_28 + 0x14);
        do {
          iVar14 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar14 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar14 == 1) {
          Mat::deallocate((Mat *)&local_60);
                    /* catch() { ... } // from try @ 002e9c64 with catch @ 002e9de8 */
        }
      }
      lStack_28 = 0;
      local_50 = 0;
      lStack_38 = 0;
      local_40 = 0;
      lStack_48 = 0;
      if (0 < local_60._4_4_) {
        iVar14 = 0;
        puVar17 = local_20;
        do {
          *(undefined4 *)puVar17 = 0;
          iVar14 = iVar14 + 1;
          puVar17 = (undefined8 *)((long)puVar17 + 4);
        } while (iVar14 < local_60._4_4_);
      }
      if (local_18 == &local_10) goto LAB_002e98f8;
      fastFree(local_18);
      lVar21 = lVar21 + 1;
      param_1 = param_1 + 0x60;
    } while ((int)lVar21 < param_2);
  }
LAB_002e9a94:
                    /* try { // try from 002e9aa0 to 003e9b2b has its CatchHandler @ 002e9c94 */
  local_120 = 0x2010000;
  local_170 = 0;
  local_180 = 0x1010000;
  local_110 = 0;
  local_50 = 0;
  local_60 = CONCAT44(local_60._4_4_,0x3010000);
  local_178 = (Mat *)&local_c0;
  local_118 = param_3;
  local_58 = (Mat *)&local_1e0;
  calcCovarMatrix((_InputArray *)&local_180,(_OutputArray *)&local_120,
                  (_InputOutputArray *)&local_60,param_5 & 0xffffffe7U | 8,uVar3);
  if ((param_5 & 2U) != 0) goto LAB_002e9c9c;
  Mat::reshape(iVar11,1);
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (*(long *)(param_4 + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(param_4 + 0x38) + 0x14);
    do {
      iVar26 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar26 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate(param_4);
    }
  }
  *(undefined8 *)(param_4 + 0x38) = 0;
  *(undefined8 *)(param_4 + 0x10) = 0;
  *(undefined8 *)(param_4 + 0x28) = 0;
  *(undefined8 *)(param_4 + 0x20) = 0;
  *(undefined8 *)(param_4 + 0x18) = 0;
  if (*(int *)(param_4 + 4) < 1) {
                    /* try { // try from 002ea09c to 003ea09f has its CatchHandler @ 002ea158 */
    *(undefined4 *)param_4 = (undefined4)local_60;
LAB_002e9bb8:
    if (2 < local_60._4_4_) goto LAB_002e9f60;
    *(int *)(param_4 + 4) = local_60._4_4_;
    plVar16 = *(long **)(param_4 + 0x48);
    *(undefined4 *)(param_4 + 8) = (undefined4)local_58;
    *(undefined4 *)(param_4 + 0xc) = local_58._4_4_;
    *plVar16 = *local_18;
                    /* try { // try from 002e9bf0 to 003e9bf3 has its CatchHandler @ 002e9530 */
    plVar16[1] = local_18[1];
  }
  else {
    iVar26 = 0;
    puVar19 = *(undefined4 **)(param_4 + 0x40);
    do {
      *puVar19 = 0;
      iVar26 = iVar26 + 1;
                    /* try { // try from 002e9ba0 to 003e9ba3 has its CatchHandler @ 002e9db4 */
      puVar19 = puVar19 + 1;
    } while (iVar26 < *(int *)(param_4 + 4));
    *(undefined4 *)param_4 = (undefined4)local_60;
    if (*(int *)(param_4 + 4) < 3) goto LAB_002e9bb8;
LAB_002e9f60:
    Mat::copySize(param_4,(Mat *)&local_60);
  }
                    /* try { // try from 002e9c00 to 003e9c03 has its CatchHandler @ 002e9d44 */
                    /* try { // try from 002e9c10 to 003e9c13 has its CatchHandler @ 002e9d88 */
                    /* try { // try from 002e9c20 to 003e9c23 has its CatchHandler @ 002e9c94 */
  *(long *)(param_4 + 0x18) = lStack_48;
  *(long *)(param_4 + 0x10) = local_50;
  *(long *)(param_4 + 0x28) = lStack_38;
  *(long *)(param_4 + 0x20) = local_40;
  *(long *)(param_4 + 0x38) = lStack_28;
  *(undefined8 *)(param_4 + 0x30) = local_30;
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
                    /* try { // try from 002e9c34 to 003e9c37 has its CatchHandler @ 002e9d80 */
      iVar26 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar26 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
                    /* try { // try from 002e9c54 to 003e9c57 has its CatchHandler @ 002e9d4c */
  local_50 = 0;
  lStack_38 = 0;
  local_40 = 0;
                    /* try { // try from 002e9c64 to 003e9c67 has its CatchHandler @ 002e9de8 */
  lStack_48 = 0;
  if (0 < local_60._4_4_) {
    iVar26 = 0;
    puVar17 = local_20;
    do {
      *(undefined4 *)puVar17 = 0;
      iVar26 = iVar26 + 1;
                    /* try { // try from 002e9c84 to 003e9c87 has its CatchHandler @ 002e9c94 */
      puVar17 = (undefined8 *)((long)puVar17 + 4);
    } while (iVar26 < local_60._4_4_);
  }
                    /* catch() { ... } // from try @ 002e967c with catch @ 002e9c94
                       catch() { ... } // from try @ 002e979c with catch @ 002e9c94
                       catch() { ... } // from try @ 002e9930 with catch @ 002e9c94
                       catch() { ... } // from try @ 002e9968 with catch @ 002e9c94
                       catch() { ... } // from try @ 002e9aa0 with catch @ 002e9c94
                       catch() { ... } // from try @ 002e9c20 with catch @ 002e9c94
                       catch() { ... } // from try @ 002e9c84 with catch @ 002e9c94 */
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
LAB_002e9c9c:
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar26 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar26 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar26 = 0;
    ppMVar20 = local_80;
    do {
      *(undefined4 *)ppMVar20 = 0;
      iVar26 = iVar26 + 1;
      ppMVar20 = (Mat **)((long)ppMVar20 + 4);
    } while (iVar26 < local_c0._4_4_);
  }
  if (local_78 != local_70) {
    fastFree(local_78);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar26 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar26 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 002e9d30 to 003e9d33 has its CatchHandler @ 002e9530 */
    } while (cVar4 != '\0');
                    /* catch() { ... } // from try @ 002e9634 with catch @ 002e9d34 */
    if (iVar26 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
                    /* catch() { ... } // from try @ 002e95e8 with catch @ 002e9d44
                       catch() { ... } // from try @ 002e963c with catch @ 002e9d44
                       catch() { ... } // from try @ 002e9c00 with catch @ 002e9d44 */
  lStack_1a8 = 0;
                    /* catch() { ... } // from try @ 002e9c54 with catch @ 002e9d4c */
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar26 = 0;
    ppMVar20 = local_1a0;
    do {
      *(undefined4 *)ppMVar20 = 0;
      iVar26 = iVar26 + 1;
      ppMVar20 = (Mat **)((long)ppMVar20 + 4);
    } while (iVar26 < local_1e0._4_4_);
  }
                    /* catch() { ... } // from try @ 002e9c34 with catch @ 002e9d80 */
                    /* catch() { ... } // from try @ 002e9c10 with catch @ 002e9d88 */
  if (local_198 != &local_190) {
                    /* catch() { ... } // from try @ 002e9960 with catch @ 002e9d90 */
    fastFree(local_198);
  }
                    /* catch() { ... } // from try @ 002e9794 with catch @ 002e9da0 */
                    /* catch() { ... } // from try @ 002e9ba0 with catch @ 002e9db4 */
  return;
}


==================================================================

### FUNC 002ea200 (3476 bytes) name=cvCalcCovarMatrix

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvCalcCovarMatrix(undefined8 *param_1,int param_2,cv *param_3,cv *param_4,uint param_5)

{
  uint uVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  Mat *pMVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  Mat *pMVar8;
  int iVar9;
  undefined4 *puVar10;
  undefined8 *puVar11;
  char *pcVar12;
  Mat *pMVar13;
  Mat **ppMVar14;
  AutoBuffer *pAVar15;
  ulong uVar16;
  long lVar17;
  long lVar18;
  undefined8 local_2b8;
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined8 local_2a0;
  Mat *pMStack_298;
  long local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  Mat **local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  undefined8 local_240;
  Mat *pMStack_238;
  long local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  Mat **local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  Mat *local_1d8;
  Mat *local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined4 *local_1a0;
  undefined8 *local_198;
  undefined8 auStack_190 [2];
  undefined8 local_180;
  undefined8 uStack_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  AutoBuffer *local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  AutoBuffer *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,(AutoBuffer *)&local_c0);
  local_68 = 0;
  local_80 = &local_b8;
  local_a8 = local_108;
  local_78 = &local_70;
  local_a0 = local_100;
  local_98 = local_f8;
  local_c0 = local_120;
  local_bc = local_11c;
  local_b8 = local_118;
  local_b4 = local_114;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  local_70 = 0;
  if (local_e8 != 0) {
    piVar2 = (int *)(local_e8 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  pAVar15 = local_110;
  if (local_11c < 3) {
    local_70 = *local_d8;
    local_68 = local_d8[1];
  }
  else {
    local_bc = 0;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
  }
  local_258 = &local_250;
  local_1f8 = &local_1f0;
  uStack_248 = 0;
  local_250 = 0;
  local_260 = &pMStack_298;
  uStack_1e8 = 0;
  local_1f0 = 0;
  local_200 = &pMStack_238;
  local_290 = 0;
  pMStack_298 = _UNK_002eb168;
  local_2a0 = _DAT_002eb160;
  uStack_288 = 0;
  pMStack_238 = _UNK_002eb168;
  local_240 = _DAT_002eb160;
  local_280 = 0;
  uStack_278 = 0;
  local_270 = 0;
  lStack_268 = 0;
  local_230 = 0;
  uStack_228 = 0;
  local_220 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  if ((param_1 == (undefined8 *)0x0) || (param_2 < 1)) {
    local_2b8 = 0;
    local_2b0 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_2b8,0x19);
    cVar3 = s_vecarr____0____count_>__1_00469758[0x18];
    uVar7 = s_vecarr____0____count_>__1_00469758._8_8_;
    uVar6 = s_vecarr____0____count_>__1_00469758._0_8_;
    pAVar15 = (AutoBuffer *)(ulong)(byte)s_vecarr____0____count_>__1_00469758[0x18];
    *(undefined8 *)(pcVar12 + 0x10) = s_vecarr____0____count_>__1_00469758._16_8_;
    pcVar12[0x18] = cVar3;
    *(undefined8 *)pcVar12 = uVar6;
    *(undefined8 *)(pcVar12 + 8) = uVar7;
    cv::error(-0xd7,(String *)&local_2b8,
              "void cvCalcCovarMatrix(const CvArr**, int, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matmul.cpp",0xd05);
    cv::String::deallocate((String *)&local_2b8);
  }
  if (param_4 == (cv *)0x0) goto LAB_002ea5f0;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar15);
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_268 != 0) {
    piVar2 = (int *)(lStack_268 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  puVar11 = local_198;
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (local_2a0._4_4_ < 1) {
LAB_002ea440:
    if (2 < local_1e0._4_4_) goto LAB_002ea44c;
    pMStack_298 = local_1d8;
    local_2a0 = local_1e0;
    *local_258 = *local_198;
    local_258[1] = puVar11[1];
  }
  else {
    iVar9 = 0;
    ppMVar14 = local_260;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_2a0._4_4_);
    if (local_2a0._4_4_ < 3) goto LAB_002ea440;
LAB_002ea44c:
    local_2a0 = CONCAT44(local_2a0._4_4_,(undefined4)local_1e0);
    cv::Mat::copySize((Mat *)&local_2a0,(Mat *)&local_1e0);
  }
  uStack_278 = uStack_1b8;
  local_280 = local_1c0;
  lStack_268 = lStack_1a8;
  local_270 = local_1b0;
  uStack_288 = uStack_1c8;
  local_290 = (long)local_1d0;
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_208 != 0) {
    piVar2 = (int *)(lStack_208 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (local_240._4_4_ < 1) {
LAB_002ea514:
    if (2 < local_2a0._4_4_) goto LAB_002eadb4;
    pMStack_238 = pMStack_298;
    local_240 = local_2a0;
    *local_1f8 = *local_258;
    local_1f8[1] = local_258[1];
  }
  else {
    iVar9 = 0;
    ppMVar14 = local_200;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_240._4_4_);
    if (local_240._4_4_ < 3) goto LAB_002ea514;
LAB_002eadb4:
    local_240 = CONCAT44(local_240._4_4_,(uint)local_2a0);
    cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_2a0);
  }
  uStack_218 = uStack_278;
  local_220 = local_280;
  lStack_208 = lStack_268;
  local_210 = local_270;
  uStack_228 = uStack_288;
  local_230 = local_290;
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = (Mat *)0x0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar9 = 0;
    do {
      *local_1a0 = 0;
      iVar9 = iVar9 + 1;
      local_1a0 = local_1a0 + 1;
    } while (iVar9 < local_1e0._4_4_);
  }
  if (local_198 != auStack_190) {
    cv::fastFree(local_198);
  }
LAB_002ea5f0:
  if ((param_5 & 0x18) == 0) {
    local_138 = &local_130;
    local_140 = &uStack_178;
    uVar16 = (ulong)param_2;
    local_1e0 = (Mat *)0x0;
    uStack_128 = 0;
    local_130 = 0;
    local_1d8 = (Mat *)0x0;
    uStack_178 = _UNK_002eb168;
    local_180 = _DAT_002eb160;
    local_1d0 = (Mat *)0x0;
    local_170 = 0;
    local_168 = 0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
                    /* try { // try from 002ea9d0 to 003ea9d3 has its CatchHandler @ 002eaac8 */
    if (uVar16 == 0) {
                    /* try { // try from 002ea9d8 to 003eaa4f has its CatchHandler @ 002ea1e0 */
      local_1d0 = (Mat *)0x0;
      local_1d8 = (Mat *)0x0;
    }
    else {
      if (0x2aaaaaaaaaaaaaa < uVar16) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f0e4();
      }
      pMVar13 = operator_new(uVar16 * 0x60);
      local_1d0 = pMVar13 + uVar16 * 0x60;
      local_1e0 = pMVar13;
      local_1d8 = pMVar13;
      do {
        if (pMVar13 != (Mat *)0x0) {
          *(undefined4 *)pMVar13 = (undefined4)local_180;
          *(int *)(pMVar13 + 4) = local_180._4_4_;
          *(undefined4 *)(pMVar13 + 8) = (undefined4)uStack_178;
          *(undefined8 *)(pMVar13 + 0x10) = local_170;
          *(undefined4 *)(pMVar13 + 0xc) = uStack_178._4_4_;
          *(undefined8 *)(pMVar13 + 0x18) = local_168;
          *(undefined8 *)(pMVar13 + 0x20) = local_160;
          *(undefined8 *)(pMVar13 + 0x28) = local_158;
          *(undefined8 *)(pMVar13 + 0x30) = local_150;
          *(long *)(pMVar13 + 0x38) = local_148;
          *(Mat **)(pMVar13 + 0x40) = pMVar13 + 8;
          *(Mat **)(pMVar13 + 0x48) = pMVar13 + 0x50;
          *(undefined8 *)(pMVar13 + 0x58) = 0;
          *(undefined8 *)(pMVar13 + 0x50) = 0;
          if (local_148 != 0) {
            piVar2 = (int *)(local_148 + 0x14);
            do {
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
              if (bVar4) {
                *piVar2 = *piVar2 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
          if (local_180._4_4_ < 3) {
            puVar11 = *(undefined8 **)(pMVar13 + 0x48);
            *puVar11 = *local_138;
            puVar11[1] = local_138[1];
          }
          else {
            *(undefined4 *)(pMVar13 + 4) = 0;
            cv::Mat::copySize(pMVar13,(Mat *)&local_180);
          }
        }
        uVar16 = uVar16 - 1;
        pMVar13 = pMVar13 + 0x60;
      } while (uVar16 != 0);
      local_1d8 = local_1d0;
      if (local_148 != 0) {
        piVar2 = (int *)(local_148 + 0x14);
        do {
          iVar9 = *piVar2;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = iVar9 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar9 == 1) {
          cv::Mat::deallocate((Mat *)&local_180);
        }
      }
    }
    local_148 = 0;
    local_170 = 0;
    local_158 = 0;
    local_160 = 0;
    local_168 = 0;
    if (0 < local_180._4_4_) {
      iVar9 = 0;
      puVar11 = local_140;
      do {
        *(undefined4 *)puVar11 = 0;
        iVar9 = iVar9 + 1;
        puVar11 = (undefined8 *)((long)puVar11 + 4);
      } while (iVar9 < local_180._4_4_);
    }
    if (local_138 != &local_130) {
      cv::fastFree(local_138);
    }
    if (0 < param_2) {
      lVar18 = 0;
      lVar17 = 0;
      do {
        pMVar13 = local_1e0 + lVar18;
        cv::cvarrToMat((cv *)param_1[lVar17],(void *)0x0,true,false,0,pAVar15);
        if (pMVar13 != (Mat *)&local_60) {
          if (lStack_28 != 0) {
            piVar2 = (int *)(lStack_28 + 0x14);
            do {
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
              if (bVar4) {
                *piVar2 = *piVar2 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
                    /* try { // try from 002eaa90 to 003eaa93 has its CatchHandler @ 002eaadc */
            } while (cVar3 != '\0');
          }
          if (*(long *)(pMVar13 + 0x38) == 0) {
LAB_002eaab8:
            *(undefined8 *)(pMVar13 + 0x38) = 0;
            *(undefined8 *)(pMVar13 + 0x10) = 0;
                    /* catch() { ... } // from try @ 002ea880 with catch @ 002eaac8
                       catch() { ... } // from try @ 002ea8f0 with catch @ 002eaac8
                       catch() { ... } // from try @ 002ea960 with catch @ 002eaac8
                       catch() { ... } // from try @ 002ea9d0 with catch @ 002eaac8 */
            *(undefined8 *)(pMVar13 + 0x28) = 0;
            *(undefined8 *)(pMVar13 + 0x20) = 0;
            *(undefined8 *)(pMVar13 + 0x18) = 0;
            if (0 < *(int *)(pMVar13 + 4)) goto LAB_002eaad8;
LAB_002ead9c:
            *(undefined4 *)pMVar13 = local_60;
LAB_002eab04:
            if (2 < local_5c) goto LAB_002ead58;
            *(int *)(pMVar13 + 4) = local_5c;
            *(undefined4 *)(pMVar13 + 8) = (undefined4)local_58;
            puVar11 = *(undefined8 **)(pMVar13 + 0x48);
            *(undefined4 *)(pMVar13 + 0xc) = local_58._4_4_;
            *puVar11 = *local_18;
            puVar11[1] = local_18[1];
          }
          else {
                    /* try { // try from 002eaa9c to 003eaa9f has its CatchHandler @ 002ea1e0 */
            piVar2 = (int *)(*(long *)(pMVar13 + 0x38) + 0x14);
            do {
              iVar9 = *piVar2;
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
              if (bVar4) {
                *piVar2 = iVar9 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            if (iVar9 != 1) goto LAB_002eaab8;
            cv::Mat::deallocate(pMVar13);
            *(undefined8 *)(pMVar13 + 0x38) = 0;
            *(undefined8 *)(pMVar13 + 0x10) = 0;
            *(undefined8 *)(pMVar13 + 0x28) = 0;
            *(undefined8 *)(pMVar13 + 0x20) = 0;
            *(undefined8 *)(pMVar13 + 0x18) = 0;
            if (*(int *)(pMVar13 + 4) < 1) goto LAB_002ead9c;
LAB_002eaad8:
                    /* try { // try from 002eaad8 to 003eaadb has its CatchHandler @ 002ea1e0 */
                    /* catch() { ... } // from try @ 002eaa90 with catch @ 002eaadc */
            pAVar15 = (AutoBuffer *)0x0;
            puVar10 = *(undefined4 **)(pMVar13 + 0x40);
            do {
              *puVar10 = 0;
              uVar1 = (int)pAVar15 + 1;
              pAVar15 = (AutoBuffer *)(ulong)uVar1;
                    /* try { // try from 002eaaec to 003eaaef has its CatchHandler @ 002ea1e0 */
              puVar10 = puVar10 + 1;
            } while ((int)uVar1 < *(int *)(pMVar13 + 4));
            *(undefined4 *)pMVar13 = local_60;
            if (*(int *)(pMVar13 + 4) < 3) goto LAB_002eab04;
LAB_002ead58:
            cv::Mat::copySize(pMVar13,(Mat *)&local_60);
          }
                    /* catch() { ... } // from try @ 002eab84 with catch @ 002eab50
                       catch() { ... } // from try @ 002eaf8c with catch @ 002eab50
                       catch() { ... } // from try @ 002eb34c with catch @ 002eab50 */
          *(undefined8 *)(pMVar13 + 0x18) = uStack_48;
          *(undefined8 *)(pMVar13 + 0x10) = local_50;
          *(undefined8 *)(pMVar13 + 0x28) = uStack_38;
          *(undefined8 *)(pMVar13 + 0x20) = local_40;
          *(long *)(pMVar13 + 0x38) = lStack_28;
          *(undefined8 *)(pMVar13 + 0x30) = local_30;
        }
        if (lStack_28 != 0) {
          piVar2 = (int *)(lStack_28 + 0x14);
          do {
            iVar9 = *piVar2;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = iVar9 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
                    /* try { // try from 002eab84 to 003eaba7 has its CatchHandler @ 002eab50 */
          } while (cVar3 != '\0');
          if (iVar9 == 1) {
            cv::Mat::deallocate((Mat *)&local_60);
          }
        }
        lStack_28 = 0;
        local_50 = 0;
        uStack_38 = 0;
        local_40 = 0;
        uStack_48 = 0;
        if (0 < local_5c) {
          pAVar15 = (AutoBuffer *)0x0;
          puVar10 = local_20;
          do {
                    /* try { // try from 002eabb8 to 003eabff has its CatchHandler @ 002eb350 */
            *puVar10 = 0;
            uVar1 = (int)pAVar15 + 1;
            pAVar15 = (AutoBuffer *)(ulong)uVar1;
            puVar10 = puVar10 + 1;
          } while ((int)uVar1 < local_5c);
        }
        if (local_18 != auStack_10) {
          cv::fastFree(local_18);
        }
        lVar17 = lVar17 + 1;
        lVar18 = lVar18 + 0x60;
      } while ((int)lVar17 < param_2);
    }
    cv::calcCovarMatrix(local_1e0,param_2,(Mat *)&local_c0,(Mat *)&local_240,param_5,
                        local_c0 & 0xfff);
    pMVar8 = local_1d8;
    pMVar5 = local_1d8;
    for (pMVar13 = local_1e0; pMVar13 != pMVar8; pMVar13 = pMVar13 + 0x60) {
      if (*(long *)(pMVar13 + 0x38) != 0) {
        piVar2 = (int *)(*(long *)(pMVar13 + 0x38) + 0x14);
        do {
          iVar9 = *piVar2;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = iVar9 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar9 == 1) {
          cv::Mat::deallocate(pMVar13);
        }
      }
                    /* try { // try from 002eac48 to 003eac4b has its CatchHandler @ 002eb318 */
      *(undefined8 *)(pMVar13 + 0x38) = 0;
      *(undefined8 *)(pMVar13 + 0x10) = 0;
                    /* try { // try from 002eac50 to 003eae8f has its CatchHandler @ 002eb350 */
      *(undefined8 *)(pMVar13 + 0x28) = 0;
      *(undefined8 *)(pMVar13 + 0x20) = 0;
      *(undefined8 *)(pMVar13 + 0x18) = 0;
      if (0 < *(int *)(pMVar13 + 4)) {
        iVar9 = 0;
        puVar10 = *(undefined4 **)(pMVar13 + 0x40);
        do {
          *puVar10 = 0;
          iVar9 = iVar9 + 1;
          puVar10 = puVar10 + 1;
        } while (iVar9 < *(int *)(pMVar13 + 4));
      }
      if (*(Mat **)(pMVar13 + 0x48) != pMVar13 + 0x50) {
        cv::fastFree(*(Mat **)(pMVar13 + 0x48));
      }
      pMVar5 = local_1e0;
    }
    if (pMVar5 != (Mat *)0x0) {
      operator_delete(pMVar5);
    }
  }
  else {
    cv::cvarrToMat((cv *)*param_1,(void *)0x0,true,false,0,pAVar15);
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x3010000);
    local_2a8 = 0;
    local_2a4 = 0;
    local_2b8 = CONCAT44(local_2b8._4_4_,0x1010000);
    local_1d0 = (Mat *)0x0;
    local_1e0 = (Mat *)CONCAT44(local_1e0._4_4_,0x2010000);
    local_2b0 = (Mat *)&local_60;
    local_1d8 = (Mat *)&local_c0;
    uStack_178 = (Mat *)&local_240;
    cv::calcCovarMatrix((_InputArray *)&local_2b8,(_OutputArray *)&local_1e0,
                        (_InputOutputArray *)&local_180,param_5,local_c0 & 0xfff);
    if (lStack_28 != 0) {
      piVar2 = (int *)(lStack_28 + 0x14);
      do {
        iVar9 = *piVar2;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = iVar9 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar9 == 1) {
        cv::Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_5c) {
      iVar9 = 0;
      do {
        *local_20 = 0;
        iVar9 = iVar9 + 1;
        local_20 = local_20 + 1;
      } while (iVar9 < local_5c);
    }
    lStack_28 = 0;
    uStack_38 = 0;
    local_40 = 0;
    uStack_48 = 0;
    local_50 = 0;
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  if ((local_230 != local_290) && (local_290 != 0)) {
    local_50 = 0;
    local_60 = 0x2010000;
    local_58 = (Mat *)&local_2a0;
    cv::Mat::convertTo((Mat *)&local_240,(_OutputArray *)&local_60,(uint)local_2a0 & 0xfff,1.0,0.0);
  }
  if (local_b0 != local_110) {
    local_50 = 0;
    local_60 = 0x2010000;
    local_58 = (Mat *)&local_120;
    cv::Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_60,local_120 & 0xfff,1.0,0.0);
  }
  if (lStack_208 != 0) {
    piVar2 = (int *)(lStack_208 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar9 = 0;
    ppMVar14 = local_200;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    cv::fastFree(local_1f8);
  }
  if (lStack_268 != 0) {
    piVar2 = (int *)(lStack_268 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_2a0._4_4_) {
                    /* try { // try from 002ea834 to 003ea837 has its CatchHandler @ 002ea1e0 */
    iVar9 = 0;
    ppMVar14 = local_260;
    do {
      *(undefined4 *)ppMVar14 = 0;
      iVar9 = iVar9 + 1;
      ppMVar14 = (Mat **)((long)ppMVar14 + 4);
    } while (iVar9 < local_2a0._4_4_);
  }
  if (local_258 != &local_250) {
    cv::fastFree(local_258);
  }
  if (local_88 != 0) {
    piVar2 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
                    /* try { // try from 002ea880 to 003ea883 has its CatchHandler @ 002eaac8 */
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
                    /* try { // try from 002ea888 to 003ea8a7 has its CatchHandler @ 002ea1e0 */
  local_88 = 0;
  local_b0 = (AutoBuffer *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    puVar10 = local_80;
    do {
      *puVar10 = 0;
      iVar9 = iVar9 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar2 = (int *)(local_e8 + 0x14);
    do {
      iVar9 = *piVar2;
                    /* try { // try from 002ea8f0 to 003ea8f3 has its CatchHandler @ 002eaac8 */
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
                    /* try { // try from 002ea8f8 to 003ea917 has its CatchHandler @ 002ea1e0 */
    if (iVar9 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = (AutoBuffer *)0x0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar9 = 0;
    do {
      *local_e0 = 0;
      iVar9 = iVar9 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar9 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
                    /* try { // try from 002ea960 to 003ea963 has its CatchHandler @ 002eaac8 */
                    /* try { // try from 002ea968 to 003ea987 has its CatchHandler @ 002ea1e0 */
  return;
}


==================================================================

### FUNC 002eb170 (8 bytes) name=FUN_002eb170

undefined8 FUN_002eb170(void)

{
  return 1;
}


==================================================================

### FUNC 002eb178 (8 bytes) name=FUN_002eb178

undefined8 FUN_002eb178(void)

{
  return 1;
}


==================================================================

### FUNC 002eb180 (8 bytes) name=FUN_002eb180

undefined8 FUN_002eb180(void)

{
  return 1;
}


==================================================================

### FUNC 002eb188 (8 bytes) name=FUN_002eb188

undefined8 FUN_002eb188(void)

{
  return 1;
}


==================================================================

### FUNC 002eb190 (8 bytes) name=FUN_002eb190

undefined8 FUN_002eb190(void)

{
  return 0;
}


==================================================================

### FUNC 002eb198 (8 bytes) name=FUN_002eb198

undefined8 FUN_002eb198(void)

{
  return 0;
}


==================================================================

### FUNC 002eb1a0 (8 bytes) name=FUN_002eb1a0

undefined8 FUN_002eb1a0(void)

{
  return 0;
}


==================================================================

### FUNC 002eb1a8 (8 bytes) name=FUN_002eb1a8

undefined8 FUN_002eb1a8(void)

{
  return 0;
}


==================================================================

### FUNC 002eb1b0 (8 bytes) name=FUN_002eb1b0

undefined8 FUN_002eb1b0(void)

{
  return 0;
}


==================================================================

### FUNC 002eb1b8 (108 bytes) name=FUN_002eb1b8

bool FUN_002eb1b8(undefined8 *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if ((((undefined8 *)*param_1 == &DAT_00531fa8) &&
      (((param_1[0x10] == 0 || ((double)param_1[0x27] == 0.0)) &&
       (bVar1 = false, (double)param_1[0x28] == 0.0)))) &&
     (((double)param_1[0x29] == 0.0 && ((double)param_1[0x2a] == 0.0)))) {
    bVar1 = (double)param_1[0x2b] == 0.0;
  }
  return bVar1;
}


==================================================================

### FUNC 002eb224 (8 bytes) name=elementWise

/* cv::MatOp::elementWise(cv::MatExpr const&) const */

undefined8 cv::MatOp::elementWise(MatExpr *param_1)

{
  return 0;
}


==================================================================

### FUNC 002eb22c (524 bytes) name=FUN_002eb22c

void FUN_002eb22c(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  int *piVar7;
  char *pcVar8;
  undefined4 local_38 [2];
  Mat *local_30;
  undefined4 local_28;
  undefined4 local_24;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (param_4 == 0xffffffff) {
    param_4 = *(uint *)(param_2 + 0x10) & 0xfff;
  }
  if (*(int *)(param_2 + 0x14) < 3) {
    piVar7 = *(int **)(param_2 + 0x50);
    local_20 = *(undefined8 *)piVar7;
                    /* try { // try from 002eb418 to 003eb43b has its CatchHandler @ 002eb3e4 */
    if ((((2 < *(int *)(param_3 + 4)) || (*piVar7 != *(int *)(param_3 + 8))) ||
        (piVar7[1] != *(int *)(param_3 + 0xc))) ||
       (((param_4 & 0xfff) != (*(uint *)param_3 & 0xfff) || (*(long *)(param_3 + 0x10) == 0)))) {
      cv::Mat::create(param_3,2,(int *)&local_20,param_4 & 0xfff);
      iVar1 = *(int *)(param_2 + 8);
      goto joined_r0x002eb348;
    }
  }
  else {
    cv::Mat::create(param_3,*(int *)(param_2 + 0x14),*(int **)(param_2 + 0x50),param_4);
  }
  iVar1 = *(int *)(param_2 + 8);
joined_r0x002eb348:
  if (iVar1 == 0x49) {
    if (*(int *)(param_2 + 0x14) < 3) {
      local_20 = *(undefined8 *)(param_2 + 0x130);
      local_38[0] = 0x3010000;
      local_28 = 0;
                    /* catch() { ... } // from try @ 002eb418 with catch @ 002eb3e4
                       catch() { ... } // from try @ 002eb87c with catch @ 002eb3e4
                       catch() { ... } // from try @ 002eb9e4 with catch @ 002eb3e4
                       catch() { ... } // from try @ 002eba1c with catch @ 002eb3e4 */
      local_18 = 0;
      local_24 = 0;
      local_10 = 0;
      uStack_8 = 0;
      local_30 = param_3;
      cv::setIdentity((_InputOutputArray *)local_38,(Scalar_ *)&local_20);
      return;
    }
  }
  else {
                    /* try { // try from 002eb34c to 003eb34f has its CatchHandler @ 002eab50 */
                    /* catch() { ... } // from try @ 002eabb8 with catch @ 002eb350
                       catch() { ... } // from try @ 002eac50 with catch @ 002eb350
                       catch() { ... } // from try @ 002eb310 with catch @ 002eb350
                       catch() { ... } // from try @ 002eb364 with catch @ 002eb350 */
    if (iVar1 == 0x30) {
      local_18 = 0;
      local_20 = 0;
      uStack_8 = 0;
      local_10 = 0;
      cv::Mat::operator=(param_3,(Scalar_ *)&local_20);
      return;
    }
    if (iVar1 == 0x31) {
      local_20 = *(undefined8 *)(param_2 + 0x130);
                    /* try { // try from 002eb364 to 003eb367 has its CatchHandler @ 002eb350 */
      local_18 = 0;
      local_10 = 0;
      uStack_8 = 0;
      cv::Mat::operator=(param_3,(Scalar_ *)&local_20);
      return;
    }
  }
  local_20 = 0;
  local_18 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_20,0x1f);
  cVar6 = s_Invalid_matrix_initializer_type_00469a30[0x1e];
  uVar5 = s_Invalid_matrix_initializer_type_00469a30._28_2_;
  uVar4 = s_Invalid_matrix_initializer_type_00469a30._24_4_;
  uVar3 = s_Invalid_matrix_initializer_type_00469a30._8_8_;
  uVar2 = s_Invalid_matrix_initializer_type_00469a30._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_matrix_initializer_type_00469a30._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar4;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar5;
  pcVar8[0x1e] = cVar6;
                    /* try { // try from 002eb310 to 003eb313 has its CatchHandler @ 002eb350 */
  *(undefined8 *)pcVar8 = uVar2;
  *(undefined8 *)(pcVar8 + 8) = uVar3;
  cv::error(-2,(String *)&local_20,
            "virtual void cv::MatOp_Initializer::assign(const cv::MatExpr&, cv::Mat&, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matop.cpp",0x628);
                    /* catch() { ... } // from try @ 002eac48 with catch @ 002eb318 */
  cv::String::deallocate((String *)&local_20);
  return;
}


==================================================================

### FUNC 002eb44c (224 bytes) name=size

/* cv::MatOp::size(cv::MatExpr const&) const */

void cv::MatOp::size(MatExpr *param_1)

{
  long lVar1;
  undefined4 uVar2;
  long in_x1;
  long lVar3;
  long lVar4;
  undefined4 *in_x8;
  
                    /* try { // try from 002eb44c to 003eb483 has its CatchHandler @ 002eb9f4 */
  if (*(long *)(in_x1 + 0x20) != 0) {
    if (*(int *)(in_x1 + 0x14) < 3) {
      lVar4 = (long)*(int *)(in_x1 + 0x1c) * (long)*(int *)(in_x1 + 0x18);
    }
    else {
      lVar3 = 0;
      lVar4 = 1;
      do {
        lVar1 = lVar3 * 4;
        lVar3 = lVar3 + 1;
        lVar4 = lVar4 * *(int *)(*(long *)(in_x1 + 0x50) + lVar1);
      } while ((int)lVar3 < *(int *)(in_x1 + 0x14));
    }
    if (lVar4 != 0) {
      uVar2 = (*(undefined4 **)(in_x1 + 0x50))[1];
      in_x8[1] = **(undefined4 **)(in_x1 + 0x50);
      *in_x8 = uVar2;
      return;
    }
  }
  if (*(long *)(in_x1 + 0x80) != 0) {
    if (*(int *)(in_x1 + 0x74) < 3) {
      lVar4 = (long)*(int *)(in_x1 + 0x7c) * (long)*(int *)(in_x1 + 0x78);
    }
    else {
      lVar3 = 0;
      lVar4 = 1;
      do {
        lVar1 = lVar3 * 4;
        lVar3 = lVar3 + 1;
                    /* try { // try from 002eb4cc to 003eb4cf has its CatchHandler @ 002eba20 */
        lVar4 = lVar4 * *(int *)(*(long *)(in_x1 + 0xb0) + lVar1);
                    /* try { // try from 002eb4d4 to 003eb4d7 has its CatchHandler @ 002eb9f4 */
      } while ((int)lVar3 < *(int *)(in_x1 + 0x74));
    }
    if (lVar4 != 0) {
      uVar2 = (*(undefined4 **)(in_x1 + 0x110))[1];
      in_x8[1] = **(undefined4 **)(in_x1 + 0x110);
      *in_x8 = uVar2;
      return;
    }
  }
  uVar2 = (*(undefined4 **)(in_x1 + 0xb0))[1];
  in_x8[1] = **(undefined4 **)(in_x1 + 0xb0);
  *in_x8 = uVar2;
  return;
}


==================================================================

### FUNC 002eb52c (184 bytes) name=type

/* cv::MatOp::type(cv::MatExpr const&) const */

uint __thiscall cv::MatOp::type(MatOp *this,MatExpr *param_1)

{
  long lVar1;
  long lVar2;
  long lVar3;
  
  if (*(long *)(param_1 + 0x20) != 0) {
    if (*(int *)(param_1 + 0x14) < 3) {
      lVar3 = (long)*(int *)(param_1 + 0x1c) * (long)*(int *)(param_1 + 0x18);
    }
    else {
      lVar2 = 0;
      lVar3 = 1;
      do {
        lVar1 = lVar2 * 4;
        lVar2 = lVar2 + 1;
        lVar3 = lVar3 * *(int *)(*(long *)(param_1 + 0x50) + lVar1);
      } while ((int)lVar2 < *(int *)(param_1 + 0x14));
    }
    if (lVar3 != 0) {
      return *(uint *)(param_1 + 0x10) & 0xfff;
    }
  }
  if (*(long *)(param_1 + 0x80) != 0) {
    if (*(int *)(param_1 + 0x74) < 3) {
      lVar3 = (long)*(int *)(param_1 + 0x7c) * (long)*(int *)(param_1 + 0x78);
    }
    else {
      lVar2 = 0;
      lVar3 = 1;
      do {
        lVar1 = lVar2 * 4;
        lVar2 = lVar2 + 1;
        lVar3 = lVar3 * *(int *)(*(long *)(param_1 + 0xb0) + lVar1);
      } while ((int)lVar2 < *(int *)(param_1 + 0x74));
    }
    if (lVar3 != 0) {
      return *(uint *)(param_1 + 0xd0) & 0xfff;
    }
  }
  return *(uint *)(param_1 + 0x70) & 0xfff;
}


==================================================================

### FUNC 002eb5e4 (272 bytes) name=FUN_002eb5e4

void FUN_002eb5e4(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char *pcVar5;
  undefined8 local_18;
  Mat *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  if ((param_4 != 0xffffffff) && (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff))) {
    if ((param_4 >> 3 & 0x1ff) + 1 != (*(uint *)(param_2 + 0x10) >> 3 & 0x1ff) + 1) {
      local_18 = 0;
      local_10 = (Mat *)0x0;
      pcVar5 = (char *)cv::String::allocate((String *)&local_18,0x22);
      uVar4 = s_CV_MAT_CN__type_____e_a_channels_00469a90._24_8_;
      uVar3 = s_CV_MAT_CN__type_____e_a_channels_00469a90._16_8_;
      uVar2 = s_CV_MAT_CN__type_____e_a_channels_00469a90._8_8_;
      uVar1 = s_CV_MAT_CN__type_____e_a_channels_00469a90._0_8_;
                    /* try { // try from 002eb654 to 003eb657 has its CatchHandler @ 002eba30 */
      *(undefined2 *)(pcVar5 + 0x20) = s_CV_MAT_CN__type_____e_a_channels_00469a90._32_2_;
      *(undefined8 *)pcVar5 = uVar1;
      *(undefined8 *)(pcVar5 + 8) = uVar2;
      *(undefined8 *)(pcVar5 + 0x10) = uVar3;
      *(undefined8 *)(pcVar5 + 0x18) = uVar4;
      cv::error(-0xd7,(String *)&local_18,
                "virtual void cv::MatOp_Identity::assign(const cv::MatExpr&, cv::Mat&, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matop.cpp",0x4af);
      cv::String::deallocate((String *)&local_18);
    }
    local_18 = CONCAT44(local_18._4_4_,0x2010000);
    local_8 = 0;
    local_4 = 0;
    local_10 = param_3;
    cv::Mat::convertTo((Mat *)(param_2 + 0x10),(_OutputArray *)&local_18,param_4,1.0,0.0);
    return;
  }
  cv::Mat::operator=(param_3,(Mat *)(param_2 + 0x10));
  return;
}


==================================================================

### FUNC 002eb708 (240 bytes) name=augAssignAdd

/* cv::MatOp::augAssignAdd(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignAdd(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  _InputArray *p_Var1;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002eb820;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
  p_Var1 = (_InputArray *)noArray();
  cv::add((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,p_Var1,-1);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002eb828 (240 bytes) name=augAssignSubtract

/* cv::MatOp::augAssignSubtract(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignSubtract(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  _InputArray *p_Var1;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 002eb840 to 003eb843 has its CatchHandler @ 002eb9f4 */
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002eb940;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
                    /* try { // try from 002eb87c to 003eb8d7 has its CatchHandler @ 002eb3e4 */
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
  p_Var1 = (_InputArray *)noArray();
  cv::subtract((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,p_Var1,-1);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002eb950 (360 bytes) name=augAssignMultiply

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::augAssignMultiply(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignMultiply(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  undefined4 local_120 [2];
  Mat *local_118;
  undefined4 local_110;
  undefined4 local_10c;
  undefined4 local_108 [2];
  Mat *local_100;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8 [2];
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002ebb08;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
                    /* try { // try from 002eb9e4 to 003eb9e7 has its CatchHandler @ 002eb3e4 */
  local_80 = &uStack_b8;
                    /* catch() { ... } // from try @ 002eb44c with catch @ 002eb9f4
                       catch() { ... } // from try @ 002eb4d4 with catch @ 002eb9f4
                       catch() { ... } // from try @ 002eb840 with catch @ 002eb9f4
                       catch() { ... } // from try @ 002eb918 with catch @ 002eb9f4 */
  uStack_b8 = _UNK_002ebb18;
  local_c0 = _DAT_002ebb10;
  local_c8 = 0;
  local_c4 = 0;
  local_d8[0] = 0x1010000;
  uStack_68 = 0;
  local_70 = 0;
                    /* try { // try from 002eba1c to 003eba1f has its CatchHandler @ 002eb3e4 */
  local_e0 = 0;
                    /* catch() { ... } // from try @ 002eb4cc with catch @ 002eba20 */
  local_dc = 0;
  local_f0[0] = 0x1010000;
  local_b0 = 0;
                    /* catch() { ... } // from try @ 002eb654 with catch @ 002eba30 */
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_f8 = 0;
  local_f4 = 0;
  local_108[0] = 0x1010000;
                    /* catch() { ... } // from try @ 002eba74 with catch @ 002eba58
                       catch() { ... } // from try @ 002ebc24 with catch @ 002eba58
                       catch() { ... } // from try @ 002ebdb0 with catch @ 002eba58 */
  local_110 = 0;
  local_10c = 0;
  local_120[0] = 0x2010000;
  local_118 = param_2;
  local_100 = (Mat *)&local_c0;
  local_e8 = (Mat *)&uStack_60;
  local_d0 = param_2;
  gemm((_InputArray *)local_d8,(_InputArray *)local_f0,1.0,(_InputArray *)local_108,0.0,
       (_OutputArray *)local_120,0);
                    /* try { // try from 002eba74 to 003eba93 has its CatchHandler @ 002eba58 */
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
                    /* try { // try from 002ebaa4 to 003ebadb has its CatchHandler @ 002ebd8c */
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ebb20 (236 bytes) name=augAssignDivide

/* cv::MatOp::augAssignDivide(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignDivide(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 002ebb24 to 003ebb27 has its CatchHandler @ 002ebdb4 */
                    /* try { // try from 002ebb2c to 003ebb2f has its CatchHandler @ 002ebd8c */
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002ebc38;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
  cv::divide((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,1.0,-1);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ebc40 (236 bytes) name=augAssignAnd

/* cv::MatOp::augAssignAnd(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignAnd(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  _InputArray *p_Var1;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002ebd58;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
  p_Var1 = (_InputArray *)noArray();
  bitwise_and((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,p_Var1);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ebd60 (236 bytes) name=augAssignOr

/* cv::MatOp::augAssignOr(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignOr(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  _InputArray *p_Var1;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
                    /* catch() { ... } // from try @ 002ebaa4 with catch @ 002ebd8c
                       catch() { ... } // from try @ 002ebb2c with catch @ 002ebd8c */
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002ebe78;
  local_38 = 0;
  local_30 = 0;
                    /* try { // try from 002ebdb0 to 003ebdb3 has its CatchHandler @ 002eba58 */
  local_28 = 0;
                    /* catch() { ... } // from try @ 002ebb24 with catch @ 002ebdb4 */
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
                    /* catch() { ... } // from try @ 002ebe08 with catch @ 002ebdd0
                       catch() { ... } // from try @ 002ed2c0 with catch @ 002ebdd0
                       catch() { ... } // from try @ 002ed99c with catch @ 002ebdd0
                       catch() { ... } // from try @ 002edba8 with catch @ 002ebdd0 */
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
                    /* try { // try from 002ebe08 to 003ebe27 has its CatchHandler @ 002ebdd0 */
  p_Var1 = (_InputArray *)noArray();
  bitwise_or((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,p_Var1);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
                    /* try { // try from 002ebe38 to 003ebe6f has its CatchHandler @ 002edd04 */
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ebe80 (236 bytes) name=augAssignXor

/* cv::MatOp::augAssignXor(cv::MatExpr const&, cv::Mat&) const */

void __thiscall cv::MatOp::augAssignXor(MatOp *this,MatExpr *param_1,Mat *param_2)

{
  _InputArray *p_Var1;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002ebf98;
                    /* try { // try from 002ebec0 to 003ebec3 has its CatchHandler @ 002edcd0 */
  local_38 = 0;
                    /* try { // try from 002ebec8 to 003ebf0b has its CatchHandler @ 002edd04 */
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78[0] = 0x1010000;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_80 = 0;
  local_7c = 0;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x2010000;
  local_a0 = param_2;
  local_88 = (Mat *)&uStack_60;
  local_70 = param_2;
  p_Var1 = (_InputArray *)noArray();
  bitwise_xor((_InputArray *)local_78,(_InputArray *)local_90,(_OutputArray *)local_a8,p_Var1);
  Mat::release((Mat *)&uStack_60);
                    /* try { // try from 002ebf54 to 003ebf57 has its CatchHandler @ 002edcbc */
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
                    /* try { // try from 002ebf5c to 003ebfb7 has its CatchHandler @ 002edd04 */
  return;
}


==================================================================

### FUNC 002ebfa0 (316 bytes) name=FUN_002ebfa0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ebfa0(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  Mat *this;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_18 = &local_10;
  local_50 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_48 = 0;
  local_20 = &uStack_58;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ec118;
  local_60 = _DAT_002ec110;
  local_28 = 0;
  this = param_3;
                    /* try { // try from 002ec008 to 003ec00b has its CatchHandler @ 002edcb4 */
  if ((param_4 != 0xffffffff) && (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff))) {
    this = (Mat *)&local_60;
  }
  local_88 = param_2 + 0x10;
  local_80 = 0;
  local_7c = 0;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x2010000;
  local_70 = this;
  cv::transpose((_InputArray *)local_90,(_OutputArray *)local_78);
  if ((*(long *)(this + 0x10) != *(long *)(param_3 + 0x10)) || (*(double *)(param_2 + 0x130) != 1.0)
     ) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = param_3;
    cv::Mat::convertTo(this,(_OutputArray *)local_78,param_4,*(double *)(param_2 + 0x130),0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ec120 (352 bytes) name=FUN_002ec120

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ec120(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  Mat *this;
  undefined4 local_c0 [2];
  long local_b8;
  undefined4 local_b0;
  undefined4 local_ac;
  undefined4 local_a8 [2];
  long local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_50 = 0;
  local_18 = &local_10;
  local_48 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_40 = 0;
  local_20 = &uStack_58;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ec2b8;
  local_60 = _DAT_002ec2b0;
  local_28 = 0;
  this = param_3;
  if ((param_4 != 0xffffffff) && (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff))) {
    this = (Mat *)&local_60;
  }
  local_b8 = param_2 + 0x10;
  local_a0 = param_2 + 0x70;
  local_88 = param_2 + 0xd0;
  local_b0 = 0;
  local_ac = 0;
  local_c0[0] = 0x1010000;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x1010000;
  local_80 = 0;
  local_7c = 0;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x2010000;
  local_70 = this;
  cv::gemm((_InputArray *)local_c0,(_InputArray *)local_a8,*(double *)(param_2 + 0x130),
           (_InputArray *)local_90,*(double *)(param_2 + 0x138),(_OutputArray *)local_78,
           *(int *)(param_2 + 8));
  if (*(long *)(this + 0x10) != *(long *)(param_3 + 0x10)) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = param_3;
    cv::Mat::convertTo(this,(_OutputArray *)local_78,param_4,1.0,0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
                    /* try { // try from 002ec26c to 003ed01b has its CatchHandler @ 002edce4 */
  return;
}


==================================================================

### FUNC 002ec2c0 (296 bytes) name=FUN_002ec2c0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ec2c0(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  Mat *this;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_50 = 0;
  local_18 = &local_10;
  local_48 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_40 = 0;
  local_20 = &uStack_58;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ec418;
  local_60 = _DAT_002ec410;
  local_28 = 0;
  this = param_3;
  if ((param_4 != 0xffffffff) && (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff))) {
    this = (Mat *)&local_60;
  }
  local_88 = param_2 + 0x10;
  local_90[0] = 0x1010000;
  local_80 = 0;
  local_7c = 0;
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x2010000;
  local_70 = this;
  cv::invert((_InputArray *)local_90,(_OutputArray *)local_78,*(int *)(param_2 + 8));
  if (*(long *)(this + 0x10) != *(long *)(param_3 + 0x10)) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = param_3;
    cv::Mat::convertTo(this,(_OutputArray *)local_78,param_4,1.0,0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ec420 (320 bytes) name=FUN_002ec420

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ec420(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  Mat *this;
  undefined4 local_a8 [2];
  long local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_50 = 0;
  local_18 = &local_10;
  local_48 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_40 = 0;
  local_20 = &uStack_58;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ec598;
  local_60 = _DAT_002ec590;
  local_28 = 0;
  this = param_3;
  if ((param_4 != 0xffffffff) && (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff))) {
    this = (Mat *)&local_60;
  }
  local_a0 = param_2 + 0x10;
  local_88 = param_2 + 0x70;
  local_98 = 0;
  local_94 = 0;
  local_a8[0] = 0x1010000;
  local_80 = 0;
  local_7c = 0;
  local_90[0] = 0x1010000;
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x2010000;
  local_70 = this;
  cv::solve((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,
            *(int *)(param_2 + 8));
  if (*(long *)(this + 0x10) != *(long *)(param_3 + 0x10)) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = param_3;
    cv::Mat::convertTo(this,(_OutputArray *)local_78,param_4,1.0,0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ec5a0 (392 bytes) name=FUN_002ec5a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ec5a0(undefined8 param_1,long param_2,Mat *param_3,int param_4)

{
  Mat *this;
  undefined4 local_a8 [2];
  long local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_18 = &local_10;
  uStack_8 = 0;
  local_10 = 0;
  local_20 = &uStack_58;
  local_50 = 0;
  uStack_58 = _UNK_002ec758;
  local_60 = _DAT_002ec750;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  this = (Mat *)&local_60;
  if (param_4 + 1U < 2) {
    this = param_3;
  }
  local_30 = 0;
  local_28 = 0;
  local_70 = this;
  if (*(long *)(param_2 + 0x80) == 0) {
    local_a0 = param_2 + 0x10;
    local_88 = param_2 + 0x130;
    local_98 = 0;
    local_94 = 0;
    local_a8[0] = 0x1010000;
    local_90[0] = 0xc1020006;
    local_80 = 1;
    local_7c = 1;
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    cv::compare((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,
                *(int *)(param_2 + 8));
  }
  else {
    local_a0 = param_2 + 0x10;
    local_88 = param_2 + 0x70;
    local_98 = 0;
    local_94 = 0;
    local_a8[0] = 0x1010000;
    local_80 = 0;
    local_7c = 0;
    local_90[0] = 0x1010000;
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    cv::compare((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,
                *(int *)(param_2 + 8));
  }
  if (*(long *)(this + 0x10) != *(long *)(param_3 + 0x10)) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = param_3;
    cv::Mat::convertTo(this,(_OutputArray *)local_78,param_4,1.0,0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ec760 (1732 bytes) name=FUN_002ec760

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ec760(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  int iVar1;
  Mat *pMVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char *pcVar5;
  _InputArray *p_Var6;
  undefined4 local_a8 [2];
  long local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  long local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined8 local_78;
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_50 = 0;
  local_18 = &local_10;
  local_48 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_40 = 0;
  local_20 = &uStack_58;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ece68;
  local_60 = _DAT_002ece60;
  local_28 = 0;
  pMVar2 = param_3;
  if (param_4 == 0xffffffff) {
    iVar1 = *(int *)(param_2 + 8);
  }
  else {
    iVar1 = *(int *)(param_2 + 8);
    if (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff)) {
      pMVar2 = (Mat *)&local_60;
    }
  }
  if (iVar1 == 0x2a) {
    local_a0 = param_2 + 0x10;
    local_88 = param_2 + 0x70;
    local_98 = 0;
    local_94 = 0;
    local_a8[0] = 0x1010000;
    local_80 = 0;
    local_7c = 0;
    local_90[0] = 0x1010000;
    local_68 = 0;
    local_64 = 0;
    local_78 = CONCAT44(local_78._4_4_,0x2010000);
    local_70 = pMVar2;
    cv::multiply((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78,
                 *(double *)(param_2 + 0x130),-1);
  }
  else if (iVar1 == 0x2f) {
    if (*(long *)(param_2 + 0x80) == 0) {
      local_88 = param_2 + 0x10;
      local_80 = 0;
      local_7c = 0;
      local_68 = 0;
      local_64 = 0;
      local_90[0] = 0x1010000;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      cv::divide(*(double *)(param_2 + 0x130),(_InputArray *)local_90,(_OutputArray *)&local_78,-1);
    }
    else {
      local_a0 = param_2 + 0x10;
      local_88 = param_2 + 0x70;
      local_98 = 0;
      local_94 = 0;
      local_a8[0] = 0x1010000;
      local_80 = 0;
      local_7c = 0;
      local_90[0] = 0x1010000;
      local_68 = 0;
      local_64 = 0;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      cv::divide((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78,
                 *(double *)(param_2 + 0x130),-1);
    }
  }
  else if (iVar1 == 0x26) {
    if (*(long *)(param_2 + 0x80) == 0) {
      local_a0 = param_2 + 0x10;
      local_90[0] = 0xc1020006;
      local_88 = param_2 + 0x140;
      local_98 = 0;
      local_94 = 0;
      local_80 = 1;
      local_68 = 0;
      local_64 = 0;
      local_a8[0] = 0x1010000;
      local_7c = 4;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    else {
      local_a0 = param_2 + 0x10;
      local_a8[0] = 0x1010000;
      local_88 = param_2 + 0x70;
      local_90[0] = 0x1010000;
      local_98 = 0;
      local_94 = 0;
      local_80 = 0;
      local_7c = 0;
      local_68 = 0;
      local_64 = 0;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    cv::bitwise_and((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78,p_Var6
                   );
  }
  else if (iVar1 == 0x7c) {
    if (*(long *)(param_2 + 0x80) == 0) {
      local_a0 = param_2 + 0x10;
      local_90[0] = 0xc1020006;
      local_88 = param_2 + 0x140;
      local_98 = 0;
      local_94 = 0;
      local_80 = 1;
      local_68 = 0;
      local_64 = 0;
      local_a8[0] = 0x1010000;
      local_7c = 4;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    else {
      local_a0 = param_2 + 0x10;
      local_a8[0] = 0x1010000;
      local_88 = param_2 + 0x70;
      local_90[0] = 0x1010000;
      local_98 = 0;
      local_94 = 0;
      local_80 = 0;
      local_7c = 0;
      local_68 = 0;
      local_64 = 0;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    cv::bitwise_or((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78,p_Var6)
    ;
  }
  else if (iVar1 == 0x5e) {
    if (*(long *)(param_2 + 0x80) == 0) {
      local_a0 = param_2 + 0x10;
      local_90[0] = 0xc1020006;
      local_88 = param_2 + 0x140;
      local_98 = 0;
      local_94 = 0;
      local_80 = 1;
      local_68 = 0;
      local_64 = 0;
      local_a8[0] = 0x1010000;
      local_7c = 4;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    else {
      local_a0 = param_2 + 0x10;
      local_a8[0] = 0x1010000;
      local_88 = param_2 + 0x70;
      local_90[0] = 0x1010000;
      local_98 = 0;
      local_94 = 0;
      local_80 = 0;
      local_7c = 0;
      local_68 = 0;
      local_64 = 0;
      local_78 = CONCAT44(local_78._4_4_,0x2010000);
      local_70 = pMVar2;
      p_Var6 = (_InputArray *)cv::noArray();
    }
    cv::bitwise_xor((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78,p_Var6
                   );
  }
  else {
    if (iVar1 == 0x7e) {
      if (*(long *)(param_2 + 0x80) == 0) {
        local_88 = param_2 + 0x10;
        local_80 = 0;
        local_7c = 0;
        local_68 = 0;
        local_64 = 0;
        local_90[0] = 0x1010000;
        local_78 = CONCAT44(local_78._4_4_,0x2010000);
        local_70 = pMVar2;
        p_Var6 = (_InputArray *)cv::noArray();
        cv::bitwise_not((_InputArray *)local_90,(_OutputArray *)&local_78,p_Var6);
        goto LAB_002ec9c0;
      }
    }
    else {
      if (iVar1 == 0x6d) {
        cv::min((Mat *)(param_2 + 0x10),(Mat *)(param_2 + 0x70),pMVar2);
        goto LAB_002ec9c0;
      }
      if (iVar1 == 0x6e) {
        local_a0 = param_2 + 0x10;
        local_88 = param_2 + 0x140;
        local_80 = 1;
        local_7c = 1;
        local_98 = 0;
        local_94 = 0;
        local_a8[0] = 0x1010000;
        local_90[0] = 0xc1020006;
        local_68 = 0;
        local_64 = 0;
        local_78 = CONCAT44(local_78._4_4_,0x2010000);
        local_70 = pMVar2;
        cv::min((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78);
        goto LAB_002ec9c0;
      }
      if (iVar1 == 0x4d) {
        cv::max((Mat *)(param_2 + 0x10),(Mat *)(param_2 + 0x70),pMVar2);
        goto LAB_002ec9c0;
      }
      if (iVar1 == 0x4e) {
        local_a0 = param_2 + 0x10;
        local_88 = param_2 + 0x140;
        local_80 = 1;
        local_7c = 1;
        local_98 = 0;
        local_94 = 0;
        local_a8[0] = 0x1010000;
        local_90[0] = 0xc1020006;
        local_68 = 0;
        local_64 = 0;
        local_78 = CONCAT44(local_78._4_4_,0x2010000);
        local_70 = pMVar2;
        cv::max((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78);
        goto LAB_002ec9c0;
      }
      if (iVar1 == 0x61) {
        if (*(long *)(param_2 + 0x80) == 0) {
          local_a0 = param_2 + 0x10;
          local_88 = param_2 + 0x140;
          local_98 = 0;
          local_94 = 0;
          local_80 = 1;
          local_68 = 0;
          local_64 = 0;
          local_a8[0] = 0x1010000;
          local_90[0] = 0xc1020006;
          local_7c = 4;
          local_78 = CONCAT44(local_78._4_4_,0x2010000);
          local_70 = pMVar2;
          cv::absdiff((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78);
        }
        else {
          local_a0 = param_2 + 0x10;
          local_a8[0] = 0x1010000;
          local_88 = param_2 + 0x70;
          local_90[0] = 0x1010000;
          local_98 = 0;
          local_94 = 0;
          local_80 = 0;
          local_7c = 0;
          local_68 = 0;
          local_64 = 0;
          local_78 = CONCAT44(local_78._4_4_,0x2010000);
          local_70 = pMVar2;
          cv::absdiff((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)&local_78);
        }
        goto LAB_002ec9c0;
      }
    }
    local_78 = 0;
    local_70 = (Mat *)0x0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_78,0x11);
    uVar4 = s_Unknown_operation_00469ab8._8_8_;
    uVar3 = s_Unknown_operation_00469ab8._0_8_;
    pcVar5[0x10] = s_Unknown_operation_00469ab8[0x10];
    *(undefined8 *)pcVar5 = uVar3;
    *(undefined8 *)(pcVar5 + 8) = uVar4;
    cv::error(-2,(String *)&local_78,
              "virtual void cv::MatOp_Bin::assign(const cv::MatExpr&, cv::Mat&, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matop.cpp",0x54d);
    cv::String::deallocate((String *)&local_78);
  }
LAB_002ec9c0:
  if (*(long *)(pMVar2 + 0x10) != *(long *)(param_3 + 0x10)) {
    local_68 = 0;
    local_64 = 0;
    local_78 = CONCAT44(local_78._4_4_,0x2010000);
    local_70 = param_3;
    cv::Mat::convertTo(pMVar2,(_OutputArray *)&local_78,param_4,1.0,0.0);
  }
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ece70 (1612 bytes) name=FUN_002ece70

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002ece70(undefined8 param_1,long param_2,Mat *param_3,uint param_4)

{
  Mat *pMVar1;
  Mat *pMVar2;
  _InputArray *p_Var3;
  double dVar4;
  double dVar5;
  undefined4 local_a8 [2];
  Mat *local_a0;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_50 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  uStack_58 = _UNK_002ed4f8;
  local_60 = _DAT_002ed4f0;
  local_28 = 0;
  local_20 = &uStack_58;
  local_18 = &local_10;
  pMVar2 = param_3;
  if (param_4 == 0xffffffff) {
    if (*(long *)(param_2 + 0x80) == 0) goto LAB_002ed15c;
LAB_002eceec:
    local_70 = pMVar2;
    if (*(double *)(param_2 + 0x140) == 0.0) {
      if (((*(double *)(param_2 + 0x148) == 0.0) && (*(double *)(param_2 + 0x150) == 0.0)) &&
         (*(double *)(param_2 + 0x158) != 0.0)) goto LAB_002ecf14;
    }
    else if ((*(double *)(param_2 + 0x148) == 0.0) && (*(double *)(param_2 + 0x150) == 0.0)) {
LAB_002ecf14:
      if (*(double *)(param_2 + 0x158) == 0.0) {
        local_a0 = (Mat *)(param_2 + 0x10);
        local_88 = (Mat *)(param_2 + 0x70);
        local_98 = 0;
        local_94 = 0;
        local_a8[0] = 0x1010000;
        local_80 = 0;
        local_7c = 0;
        local_90[0] = 0x1010000;
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        cv::addWeighted((_InputArray *)local_a8,*(double *)(param_2 + 0x130),(_InputArray *)local_90
                        ,*(double *)(param_2 + 0x138),*(double *)(param_2 + 0x140),
                        (_OutputArray *)local_78,-1);
        goto LAB_002ecfdc;
      }
    }
    dVar4 = *(double *)(param_2 + 0x130);
    if (dVar4 == 1.0) {
      dVar4 = *(double *)(param_2 + 0x138);
      if (dVar4 == 1.0) {
        local_a0 = (Mat *)(param_2 + 0x10);
        local_a8[0] = 0x1010000;
        local_88 = (Mat *)(param_2 + 0x70);
        local_90[0] = 0x1010000;
        local_98 = 0;
        local_94 = 0;
        local_80 = 0;
        local_7c = 0;
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        p_Var3 = (_InputArray *)cv::noArray();
        cv::add((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3,-1);
      }
      else {
        if (dVar4 == -1.0) {
          local_a0 = (Mat *)(param_2 + 0x10);
          local_88 = (Mat *)(param_2 + 0x70);
          goto LAB_002ed1b8;
        }
        local_a0 = (Mat *)(param_2 + 0x70);
        local_88 = (Mat *)(param_2 + 0x10);
LAB_002ed08c:
        local_a8[0] = 0x1010000;
        local_90[0] = 0x1010000;
        local_98 = 0;
        local_94 = 0;
        local_80 = 0;
        local_7c = 0;
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        cv::scaleAdd((_InputArray *)local_a8,dVar4,(_InputArray *)local_90,(_OutputArray *)local_78)
        ;
      }
    }
    else if (*(double *)(param_2 + 0x138) == 1.0) {
      if (dVar4 != -1.0) {
        local_a0 = (Mat *)(param_2 + 0x10);
        local_88 = (Mat *)(param_2 + 0x70);
        goto LAB_002ed08c;
      }
      local_a0 = (Mat *)(param_2 + 0x70);
      local_88 = (Mat *)(param_2 + 0x10);
LAB_002ed1b8:
      local_a8[0] = 0x1010000;
      local_90[0] = 0x1010000;
      local_98 = 0;
      local_94 = 0;
      local_80 = 0;
      local_7c = 0;
      local_68 = 0;
      local_64 = 0;
      local_78[0] = 0x2010000;
      p_Var3 = (_InputArray *)cv::noArray();
                    /* try { // try from 002ed1f0 to 003ed1f3 has its CatchHandler @ 002edbac */
      cv::subtract((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3,
                   -1);
    }
    else {
      local_a0 = (Mat *)(param_2 + 0x10);
      local_88 = (Mat *)(param_2 + 0x70);
      local_98 = 0;
      local_94 = 0;
      local_a8[0] = 0x1010000;
      local_80 = 0;
      local_7c = 0;
      local_90[0] = 0x1010000;
      local_68 = 0;
      local_64 = 0;
      local_78[0] = 0x2010000;
      cv::addWeighted((_InputArray *)local_a8,dVar4,(_InputArray *)local_90,
                      *(double *)(param_2 + 0x138),0.0,(_OutputArray *)local_78,-1);
    }
    if (((*(double *)(param_2 + 0x148) != 0.0) || (*(double *)(param_2 + 0x150) != 0.0)) ||
       (*(double *)(param_2 + 0x158) != 0.0)) {
      local_90[0] = 0xc1020006;
      local_80 = 1;
      local_7c = 4;
      local_98 = 0;
      local_94 = 0;
      local_a8[0] = 0x1010000;
      local_68 = 0;
      local_64 = 0;
      local_78[0] = 0x2010000;
      local_a0 = pMVar2;
      local_88 = (Mat *)(param_2 + 0x140);
      local_70 = pMVar2;
      p_Var3 = (_InputArray *)cv::noArray();
      cv::add((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3,-1);
    }
LAB_002ecfdc:
    if (*(long *)(pMVar2 + 0x10) == *(long *)(param_3 + 0x10)) goto LAB_002ed01c;
    dVar5 = 0.0;
    param_4 = *(uint *)param_3 & 0xfff;
    dVar4 = 1.0;
  }
  else {
    if (param_4 != (*(uint *)(param_2 + 0x10) & 0xfff)) {
      pMVar2 = (Mat *)&local_60;
    }
    if (*(long *)(param_2 + 0x80) != 0) goto LAB_002eceec;
LAB_002ed15c:
    pMVar1 = (Mat *)(param_2 + 0x140);
                    /* try { // try from 002ed17c to 003ed17f has its CatchHandler @ 002edb18 */
    if (((*(double *)(param_2 + 0x148) != 0.0) || (*(double *)(param_2 + 0x150) != 0.0)) ||
       (*(double *)(param_2 + 0x158) != 0.0)) {
      dVar4 = *(double *)(param_2 + 0x130);
LAB_002ed244:
      local_88 = pMVar1;
      local_70 = pMVar2;
      if (dVar4 == 1.0) {
                    /* try { // try from 002ed43c to 003ed43f has its CatchHandler @ 002edc44 */
        local_a0 = (Mat *)(param_2 + 0x10);
        local_90[0] = 0xc1020006;
                    /* try { // try from 002ed44c to 003ed44f has its CatchHandler @ 002edc6c */
        local_80 = 1;
        local_7c = 4;
                    /* try { // try from 002ed45c to 003ed45f has its CatchHandler @ 002edc90 */
        local_98 = 0;
        local_94 = 0;
        local_a8[0] = 0x1010000;
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        p_Var3 = (_InputArray *)cv::noArray();
        cv::add((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3,-1);
      }
      else if (dVar4 == -1.0) {
        local_88 = (Mat *)(param_2 + 0x10);
        local_a8[0] = 0xc1020006;
        local_98 = 1;
        local_94 = 4;
        local_90[0] = 0x1010000;
        local_80 = 0;
        local_7c = 0;
        local_68 = 0;
        local_64 = 0;
                    /* try { // try from 002ed40c to 003ed40f has its CatchHandler @ 002edbbc */
        local_78[0] = 0x2010000;
        local_a0 = pMVar1;
        p_Var3 = (_InputArray *)cv::noArray();
                    /* try { // try from 002ed41c to 003ed41f has its CatchHandler @ 002edbfc */
                    /* try { // try from 002ed42c to 003ed42f has its CatchHandler @ 002edc20 */
        cv::subtract((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3
                     ,-1);
      }
      else {
                    /* try { // try from 002ed264 to 003ed267 has its CatchHandler @ 002edbb4 */
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        cv::Mat::convertTo((Mat *)(param_2 + 0x10),(_OutputArray *)local_78,
                           *(uint *)(param_2 + 0x10) & 0xfff,dVar4,0.0);
        local_90[0] = 0xc1020006;
        local_80 = 1;
        local_7c = 4;
        local_98 = 0;
        local_94 = 0;
        local_a8[0] = 0x1010000;
                    /* try { // try from 002ed2c0 to 003ed313 has its CatchHandler @ 002ebdd0 */
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
        local_a0 = pMVar2;
        local_70 = pMVar2;
        p_Var3 = (_InputArray *)cv::noArray();
        cv::add((_InputArray *)local_a8,(_InputArray *)local_90,(_OutputArray *)local_78,p_Var3,-1);
      }
      goto LAB_002ecfdc;
    }
    dVar4 = *(double *)(param_2 + 0x130);
    if ((*(long *)(pMVar2 + 0x10) == *(long *)(param_3 + 0x10)) && (ABS(dVar4) == 1.0))
    goto LAB_002ed244;
    dVar5 = *(double *)(param_2 + 0x140);
    pMVar2 = (Mat *)(param_2 + 0x10);
  }
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x2010000;
  local_70 = param_3;
  cv::Mat::convertTo(pMVar2,(_OutputArray *)local_78,param_4,dVar4,dVar5);
LAB_002ed01c:
  cv::Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002ed500 (564 bytes) name=FUN_002ed500

void FUN_002ed500(undefined8 param_1,undefined8 *param_2,undefined8 *param_3)

{
  Mat *this;
  int *piVar1;
  Mat *this_00;
  int iVar2;
  uint uVar3;
  undefined4 uVar4;
  char cVar5;
  bool bVar6;
  uint uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  uint uVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  
  this = (Mat *)(param_3 + 2);
  uVar8 = *param_2;
  *(undefined4 *)(param_3 + 1) = *(undefined4 *)(param_2 + 1);
  *param_3 = uVar8;
  if (this != (Mat *)(param_2 + 2)) {
    if (param_2[9] != 0) {
      piVar1 = (int *)(param_2[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(this);
    *(undefined4 *)(param_3 + 2) = *(undefined4 *)(param_2 + 2);
    if ((*(int *)((long)param_3 + 0x14) < 3) && (iVar2 = *(int *)((long)param_2 + 0x14), iVar2 < 3))
    {
      puVar11 = (undefined8 *)param_2[0xb];
      puVar9 = (undefined8 *)param_3[0xb];
      uVar4 = *(undefined4 *)(param_2 + 3);
      *(undefined4 *)((long)param_3 + 0x1c) = *(undefined4 *)((long)param_2 + 0x1c);
      *(int *)((long)param_3 + 0x14) = iVar2;
      *(undefined4 *)(param_3 + 3) = uVar4;
      *puVar9 = *puVar11;
      puVar9[1] = puVar11[1];
    }
    else {
      cv::Mat::copySize(this,(Mat *)(param_2 + 2));
    }
    uVar15 = param_2[4];
    uVar14 = param_2[7];
    uVar12 = param_2[6];
    uVar13 = param_2[9];
    uVar8 = param_2[8];
    param_3[5] = param_2[5];
    param_3[4] = uVar15;
    param_3[7] = uVar14;
    param_3[6] = uVar12;
    param_3[9] = uVar13;
    param_3[8] = uVar8;
  }
  this_00 = (Mat *)(param_3 + 0xe);
  if (this_00 != (Mat *)(param_2 + 0xe)) {
    if (param_2[0x15] != 0) {
      piVar1 = (int *)(param_2[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(this_00);
    *(undefined4 *)(param_3 + 0xe) = *(undefined4 *)(param_2 + 0xe);
    if ((*(int *)((long)param_3 + 0x74) < 3) && (iVar2 = *(int *)((long)param_2 + 0x74), iVar2 < 3))
    {
      puVar11 = (undefined8 *)param_2[0x17];
      puVar9 = (undefined8 *)param_3[0x17];
      uVar4 = *(undefined4 *)(param_2 + 0xf);
      *(undefined4 *)((long)param_3 + 0x7c) = *(undefined4 *)((long)param_2 + 0x7c);
      *(int *)((long)param_3 + 0x74) = iVar2;
      *(undefined4 *)(param_3 + 0xf) = uVar4;
      *puVar9 = *puVar11;
      puVar9[1] = puVar11[1];
    }
    else {
      cv::Mat::copySize(this_00,(Mat *)(param_2 + 0xe));
    }
    uVar15 = param_2[0x10];
    uVar14 = param_2[0x13];
    uVar12 = param_2[0x12];
    uVar13 = param_2[0x15];
    uVar8 = param_2[0x14];
    param_3[0x11] = param_2[0x11];
    param_3[0x10] = uVar15;
    param_3[0x13] = uVar14;
    param_3[0x12] = uVar12;
    param_3[0x15] = uVar13;
    param_3[0x14] = uVar8;
  }
  cv::Mat::operator=((Mat *)(param_3 + 0x1a),(Mat *)(param_2 + 0x1a));
  uVar3 = *(uint *)(param_2 + 1);
  uVar12 = param_2[0x27];
  uVar8 = param_2[0x28];
  uVar13 = param_2[0x29];
  param_3[0x26] = param_2[0x26];
  param_3[0x27] = uVar12;
  uVar10 = 2;
  if ((uVar3 & 1) != 0) {
    uVar10 = 0;
  }
  param_3[0x28] = uVar8;
  param_3[0x29] = uVar13;
  uVar8 = param_2[0x2b];
  param_3[0x2a] = param_2[0x2a];
  param_3[0x2b] = uVar8;
  uVar7 = 4;
  if ((uVar3 & 4) != 0) {
    uVar7 = 0;
  }
  *(uint *)(param_3 + 1) = uVar10 | (uVar3 & 2) == 0 | uVar7;
  cv::swap(this,this_00);
  return;
}


==================================================================

### FUNC 002ed734 (692 bytes) name=FUN_002ed734

void FUN_002ed734(double param_1,undefined8 param_2,undefined8 *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  
  pMVar1 = (Mat *)(param_4 + 2);
  uVar3 = *(undefined4 *)(param_3 + 1);
  *param_4 = *param_3;
  *(undefined4 *)(param_4 + 1) = uVar3;
  if (pMVar1 != (Mat *)(param_3 + 2)) {
    if (param_3[9] != 0) {
      piVar2 = (int *)(param_3[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 2) = *(undefined4 *)(param_3 + 2);
    if ((*(int *)((long)param_4 + 0x14) < 3) && (iVar4 = *(int *)((long)param_3 + 0x14), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0xb];
      puVar7 = (undefined8 *)param_4[0xb];
      uVar3 = *(undefined4 *)(param_3 + 3);
      *(undefined4 *)((long)param_4 + 0x1c) = *(undefined4 *)((long)param_3 + 0x1c);
      *(int *)((long)param_4 + 0x14) = iVar4;
      *(undefined4 *)(param_4 + 3) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 2));
    }
    uVar14 = param_3[4];
    uVar13 = param_3[7];
    uVar12 = param_3[6];
    uVar11 = param_3[9];
    uVar9 = param_3[8];
    param_4[5] = param_3[5];
    param_4[4] = uVar14;
    param_4[7] = uVar13;
    param_4[6] = uVar12;
    param_4[9] = uVar11;
    param_4[8] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xe);
  if (pMVar1 != (Mat *)(param_3 + 0xe)) {
    if (param_3[0x15] != 0) {
      piVar2 = (int *)(param_3[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_3 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar4 = *(int *)((long)param_3 + 0x74), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x17];
                    /* try { // try from 002ed98c to 003ed98f has its CatchHandler @ 002edce4 */
      puVar7 = (undefined8 *)param_4[0x17];
      uVar3 = *(undefined4 *)(param_3 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_3 + 0x7c);
                    /* try { // try from 002ed99c to 003ed99f has its CatchHandler @ 002ebdd0 */
      *(int *)((long)param_4 + 0x74) = iVar4;
      *(undefined4 *)(param_4 + 0xf) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xe));
    }
    uVar14 = param_3[0x10];
    uVar13 = param_3[0x13];
    uVar12 = param_3[0x12];
    uVar11 = param_3[0x15];
    uVar9 = param_3[0x14];
    param_4[0x11] = param_3[0x11];
    param_4[0x10] = uVar14;
    param_4[0x13] = uVar13;
    param_4[0x12] = uVar12;
    param_4[0x15] = uVar11;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_3 + 0x1a)) {
    if (param_3[0x21] != 0) {
      piVar2 = (int *)(param_3[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_3 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar4 = *(int *)((long)param_3 + 0xd4), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x23];
                    /* try { // try from 002ed95c to 003ed95f has its CatchHandler @ 002edce4 */
      puVar7 = (undefined8 *)param_4[0x23];
      uVar3 = *(undefined4 *)(param_3 + 0x1b);
                    /* try { // try from 002ed968 to 003ed96b has its CatchHandler @ 002edbac */
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_3 + 0xdc);
      *(int *)((long)param_4 + 0xd4) = iVar4;
      *(undefined4 *)(param_4 + 0x1b) = uVar3;
                    /* try { // try from 002ed974 to 003ed977 has its CatchHandler @ 002edbb4 */
      *puVar7 = *puVar8;
                    /* try { // try from 002ed980 to 003ed983 has its CatchHandler @ 002edc90 */
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x1a));
    }
                    /* try { // try from 002ed8e4 to 003ed8e7 has its CatchHandler @ 002edb18 */
                    /* try { // try from 002ed8f0 to 003ed8f3 has its CatchHandler @ 002edce4 */
    uVar14 = param_3[0x1c];
                    /* try { // try from 002ed8fc to 003ed8ff has its CatchHandler @ 002edbbc */
    uVar13 = param_3[0x1f];
    uVar12 = param_3[0x1e];
    uVar11 = param_3[0x21];
    uVar9 = param_3[0x20];
                    /* try { // try from 002ed908 to 003ed90b has its CatchHandler @ 002edce4 */
    param_4[0x1d] = param_3[0x1d];
    param_4[0x1c] = uVar14;
    param_4[0x1f] = uVar13;
    param_4[0x1e] = uVar12;
    param_4[0x21] = uVar11;
    param_4[0x20] = uVar9;
  }
                    /* try { // try from 002ed914 to 003ed917 has its CatchHandler @ 002edc20 */
                    /* try { // try from 002ed920 to 003ed923 has its CatchHandler @ 002edc44 */
  dVar10 = (double)param_3[0x26];
  uVar9 = param_3[0x28];
  uVar11 = param_3[0x29];
                    /* try { // try from 002ed92c to 003ed93b has its CatchHandler @ 002edce4 */
  param_4[0x27] = param_3[0x27];
  param_4[0x28] = uVar9;
  param_4[0x29] = uVar11;
  uVar9 = param_3[0x2b];
  param_4[0x2a] = param_3[0x2a];
  param_4[0x2b] = uVar9;
  param_4[0x26] = param_1 * dVar10;
                    /* try { // try from 002ed944 to 003ed947 has its CatchHandler @ 002edc6c */
                    /* try { // try from 002ed950 to 003ed953 has its CatchHandler @ 002edbfc */
  return;
}


==================================================================

### FUNC 002ed9e8 (692 bytes) name=FUN_002ed9e8

void FUN_002ed9e8(double param_1,undefined8 param_2,undefined8 *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  
  pMVar1 = (Mat *)(param_4 + 2);
  uVar3 = *(undefined4 *)(param_3 + 1);
  *param_4 = *param_3;
  *(undefined4 *)(param_4 + 1) = uVar3;
  if (pMVar1 != (Mat *)(param_3 + 2)) {
    if (param_3[9] != 0) {
      piVar2 = (int *)(param_3[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 2) = *(undefined4 *)(param_3 + 2);
    if ((*(int *)((long)param_4 + 0x14) < 3) && (iVar4 = *(int *)((long)param_3 + 0x14), iVar4 < 3))
    {
                    /* catch() { ... } // from try @ 002ed44c with catch @ 002edc6c
                       catch() { ... } // from try @ 002ed944 with catch @ 002edc6c */
      puVar8 = (undefined8 *)param_3[0xb];
      puVar7 = (undefined8 *)param_4[0xb];
      uVar3 = *(undefined4 *)(param_3 + 3);
      *(undefined4 *)((long)param_4 + 0x1c) = *(undefined4 *)((long)param_3 + 0x1c);
      *(int *)((long)param_4 + 0x14) = iVar4;
      *(undefined4 *)(param_4 + 3) = uVar3;
      *puVar7 = *puVar8;
                    /* catch() { ... } // from try @ 002ed45c with catch @ 002edc90
                       catch() { ... } // from try @ 002ed980 with catch @ 002edc90 */
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 2));
    }
    uVar14 = param_3[4];
    uVar13 = param_3[7];
    uVar12 = param_3[6];
    uVar11 = param_3[9];
    uVar9 = param_3[8];
    param_4[5] = param_3[5];
    param_4[4] = uVar14;
    param_4[7] = uVar13;
    param_4[6] = uVar12;
    param_4[9] = uVar11;
    param_4[8] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xe);
  if (pMVar1 != (Mat *)(param_3 + 0xe)) {
    if (param_3[0x15] != 0) {
      piVar2 = (int *)(param_3[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_3 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar4 = *(int *)((long)param_3 + 0x74), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x17];
      puVar7 = (undefined8 *)param_4[0x17];
                    /* catch() { ... } // from try @ 002ed43c with catch @ 002edc44
                       catch() { ... } // from try @ 002ed920 with catch @ 002edc44 */
      uVar3 = *(undefined4 *)(param_3 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_3 + 0x7c);
      *(int *)((long)param_4 + 0x74) = iVar4;
      *(undefined4 *)(param_4 + 0xf) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xe));
    }
                    /* catch() { ... } // from try @ 002ed17c with catch @ 002edb18
                       catch() { ... } // from try @ 002ed8e4 with catch @ 002edb18 */
    uVar14 = param_3[0x10];
    uVar13 = param_3[0x13];
    uVar12 = param_3[0x12];
    uVar11 = param_3[0x15];
    uVar9 = param_3[0x14];
    param_4[0x11] = param_3[0x11];
    param_4[0x10] = uVar14;
    param_4[0x13] = uVar13;
    param_4[0x12] = uVar12;
    param_4[0x15] = uVar11;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_3 + 0x1a)) {
    if (param_3[0x21] != 0) {
      piVar2 = (int *)(param_3[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_3 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar4 = *(int *)((long)param_3 + 0xd4), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x23];
      puVar7 = (undefined8 *)param_4[0x23];
      uVar3 = *(undefined4 *)(param_3 + 0x1b);
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_3 + 0xdc);
                    /* catch() { ... } // from try @ 002ed42c with catch @ 002edc20
                       catch() { ... } // from try @ 002ed914 with catch @ 002edc20 */
      *(int *)((long)param_4 + 0xd4) = iVar4;
      *(undefined4 *)(param_4 + 0x1b) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x1a));
    }
                    /* try { // try from 002edba8 to 003edbab has its CatchHandler @ 002ebdd0 */
    uVar14 = param_3[0x1c];
                    /* catch() { ... } // from try @ 002ed1f0 with catch @ 002edbac
                       catch() { ... } // from try @ 002ed968 with catch @ 002edbac */
    uVar13 = param_3[0x1f];
    uVar12 = param_3[0x1e];
                    /* catch() { ... } // from try @ 002ed264 with catch @ 002edbb4
                       catch() { ... } // from try @ 002ed974 with catch @ 002edbb4 */
    uVar11 = param_3[0x21];
    uVar9 = param_3[0x20];
                    /* catch() { ... } // from try @ 002ed40c with catch @ 002edbbc
                       catch() { ... } // from try @ 002ed8fc with catch @ 002edbbc */
    param_4[0x1d] = param_3[0x1d];
    param_4[0x1c] = uVar14;
    param_4[0x1f] = uVar13;
    param_4[0x1e] = uVar12;
    param_4[0x21] = uVar11;
    param_4[0x20] = uVar9;
  }
  dVar10 = (double)param_3[0x26];
  uVar9 = param_3[0x28];
  uVar11 = param_3[0x29];
  param_4[0x27] = param_3[0x27];
  param_4[0x28] = uVar9;
  param_4[0x29] = uVar11;
  uVar9 = param_3[0x2b];
  param_4[0x2a] = param_3[0x2a];
  param_4[0x2b] = uVar9;
  param_4[0x26] = param_1 * dVar10;
                    /* catch() { ... } // from try @ 002ed41c with catch @ 002edbfc
                       catch() { ... } // from try @ 002ed950 with catch @ 002edbfc */
  return;
}


==================================================================

### FUNC 002edc9c (696 bytes) name=FUN_002edc9c

void FUN_002edc9c(double param_1,undefined8 param_2,undefined8 *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  double dVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  
                    /* catch() { ... } // from try @ 002ec008 with catch @ 002edcb4 */
  pMVar1 = (Mat *)(param_4 + 2);
                    /* catch() { ... } // from try @ 002ebf54 with catch @ 002edcbc */
  uVar3 = *(undefined4 *)(param_3 + 1);
  *param_4 = *param_3;
                    /* catch() { ... } // from try @ 002ebec0 with catch @ 002edcd0 */
  *(undefined4 *)(param_4 + 1) = uVar3;
  if (pMVar1 != (Mat *)(param_3 + 2)) {
    if (param_3[9] != 0) {
                    /* catch() { ... } // from try @ 002ec26c with catch @ 002edce4
                       catch() { ... } // from try @ 002ed8f0 with catch @ 002edce4
                       catch() { ... } // from try @ 002ed908 with catch @ 002edce4
                       catch() { ... } // from try @ 002ed92c with catch @ 002edce4
                       catch() { ... } // from try @ 002ed95c with catch @ 002edce4
                       catch() { ... } // from try @ 002ed98c with catch @ 002edce4 */
      piVar2 = (int *)(param_3[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
                    /* catch() { ... } // from try @ 002ebe38 with catch @ 002edd04
                       catch() { ... } // from try @ 002ebec8 with catch @ 002edd04
                       catch() { ... } // from try @ 002ebf5c with catch @ 002edd04 */
    *(undefined4 *)(param_4 + 2) = *(undefined4 *)(param_3 + 2);
    if ((*(int *)((long)param_4 + 0x14) < 3) && (iVar4 = *(int *)((long)param_3 + 0x14), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0xb];
      puVar7 = (undefined8 *)param_4[0xb];
      uVar3 = *(undefined4 *)(param_3 + 3);
      *(undefined4 *)((long)param_4 + 0x1c) = *(undefined4 *)((long)param_3 + 0x1c);
      *(int *)((long)param_4 + 0x14) = iVar4;
      *(undefined4 *)(param_4 + 3) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 2));
    }
    uVar15 = param_3[4];
    uVar14 = param_3[7];
    uVar12 = param_3[6];
    uVar11 = param_3[9];
    uVar9 = param_3[8];
    param_4[5] = param_3[5];
    param_4[4] = uVar15;
    param_4[7] = uVar14;
    param_4[6] = uVar12;
    param_4[9] = uVar11;
    param_4[8] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xe);
  if (pMVar1 != (Mat *)(param_3 + 0xe)) {
    if (param_3[0x15] != 0) {
      piVar2 = (int *)(param_3[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_3 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar4 = *(int *)((long)param_3 + 0x74), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x17];
      puVar7 = (undefined8 *)param_4[0x17];
      uVar3 = *(undefined4 *)(param_3 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_3 + 0x7c);
      *(int *)((long)param_4 + 0x74) = iVar4;
      *(undefined4 *)(param_4 + 0xf) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xe));
    }
                    /* catch() { ... } // from try @ 002eddd8 with catch @ 002eddc0
                       catch() { ... } // from try @ 002edf8c with catch @ 002eddc0
                       catch() { ... } // from try @ 002ee85c with catch @ 002eddc0 */
    uVar15 = param_3[0x10];
    uVar14 = param_3[0x13];
    uVar12 = param_3[0x12];
                    /* try { // try from 002eddd8 to 003eddf7 has its CatchHandler @ 002eddc0 */
    uVar11 = param_3[0x15];
    uVar9 = param_3[0x14];
    param_4[0x11] = param_3[0x11];
    param_4[0x10] = uVar15;
    param_4[0x13] = uVar14;
    param_4[0x12] = uVar12;
    param_4[0x15] = uVar11;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_3 + 0x1a)) {
    if (param_3[0x21] != 0) {
      piVar2 = (int *)(param_3[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 002ede14 to 003ede4b has its CatchHandler @ 002ee860 */
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_3 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar4 = *(int *)((long)param_3 + 0xd4), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x23];
      puVar7 = (undefined8 *)param_4[0x23];
      uVar3 = *(undefined4 *)(param_3 + 0x1b);
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_3 + 0xdc);
      *(int *)((long)param_4 + 0xd4) = iVar4;
      *(undefined4 *)(param_4 + 0x1b) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x1a));
    }
    uVar15 = param_3[0x1c];
    uVar14 = param_3[0x1f];
    uVar12 = param_3[0x1e];
    uVar11 = param_3[0x21];
    uVar9 = param_3[0x20];
    param_4[0x1d] = param_3[0x1d];
    param_4[0x1c] = uVar15;
    param_4[0x1f] = uVar14;
    param_4[0x1e] = uVar12;
    param_4[0x21] = uVar11;
    param_4[0x20] = uVar9;
  }
  dVar10 = (double)param_3[0x26];
  dVar13 = (double)param_3[0x27];
  uVar9 = param_3[0x29];
  param_4[0x28] = param_3[0x28];
  param_4[0x29] = uVar9;
                    /* try { // try from 002ede94 to 003ede97 has its CatchHandler @ 002ee868 */
                    /* try { // try from 002ede9c to 003ede9f has its CatchHandler @ 002ee860 */
  uVar9 = param_3[0x2b];
  param_4[0x2a] = param_3[0x2a];
  param_4[0x2b] = uVar9;
  param_4[0x26] = param_1 * dVar10;
  param_4[0x27] = param_1 * dVar13;
  return;
}


==================================================================

### FUNC 002edf54 (572 bytes) name=FUN_002edf54

void FUN_002edf54(undefined8 param_1,double *param_2,undefined8 *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  int iVar3;
  undefined4 uVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  double dVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  
  pMVar1 = (Mat *)(param_4 + 0xe);
  uVar9 = *param_3;
  *(undefined4 *)(param_4 + 1) = *(undefined4 *)(param_3 + 1);
                    /* try { // try from 002edf8c to 003ee413 has its CatchHandler @ 002eddc0 */
  *param_4 = uVar9;
  cv::Mat::operator=((Mat *)(param_4 + 2),(Mat *)(param_3 + 2));
  if (pMVar1 != (Mat *)(param_3 + 0xe)) {
    if (param_3[0x15] != 0) {
      piVar2 = (int *)(param_3[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_3 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar3 = *(int *)((long)param_3 + 0x74), iVar3 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x17];
      puVar7 = (undefined8 *)param_4[0x17];
      uVar4 = *(undefined4 *)(param_3 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_3 + 0x7c);
      *(int *)((long)param_4 + 0x74) = iVar3;
      *(undefined4 *)(param_4 + 0xf) = uVar4;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xe));
    }
    uVar15 = param_3[0x10];
    uVar14 = param_3[0x13];
    uVar12 = param_3[0x12];
    uVar11 = param_3[0x15];
    uVar9 = param_3[0x14];
    param_4[0x11] = param_3[0x11];
    param_4[0x10] = uVar15;
    param_4[0x13] = uVar14;
    param_4[0x12] = uVar12;
    param_4[0x15] = uVar11;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_3 + 0x1a)) {
    if (param_3[0x21] != 0) {
      piVar2 = (int *)(param_3[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_3 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar3 = *(int *)((long)param_3 + 0xd4), iVar3 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x23];
      puVar7 = (undefined8 *)param_4[0x23];
      uVar4 = *(undefined4 *)(param_3 + 0x1b);
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_3 + 0xdc);
      *(int *)((long)param_4 + 0xd4) = iVar3;
      *(undefined4 *)(param_4 + 0x1b) = uVar4;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x1a));
    }
    uVar15 = param_3[0x1c];
    uVar14 = param_3[0x1f];
    uVar12 = param_3[0x1e];
    uVar11 = param_3[0x21];
    uVar9 = param_3[0x20];
    param_4[0x1d] = param_3[0x1d];
    param_4[0x1c] = uVar15;
    param_4[0x1f] = uVar14;
    param_4[0x1e] = uVar12;
    param_4[0x21] = uVar11;
    param_4[0x20] = uVar9;
  }
  dVar19 = (double)param_3[0x26];
  dVar18 = (double)param_3[0x27];
  uVar9 = param_3[0x29];
  param_4[0x28] = param_3[0x28];
  param_4[0x29] = uVar9;
  uVar9 = param_3[0x2b];
  param_4[0x2a] = param_3[0x2a];
  param_4[0x2b] = uVar9;
  dVar17 = param_2[1];
  dVar13 = param_2[2];
  dVar10 = param_2[3];
  dVar16 = *param_2;
  param_4[0x26] = -dVar19;
  param_4[0x27] = -dVar18;
  param_4[0x29] = dVar17 - (double)param_4[0x29];
  param_4[0x28] = dVar16 - (double)param_4[0x28];
  param_4[0x2a] = dVar13 - (double)param_4[0x2a];
  param_4[0x2b] = dVar10 - (double)param_4[0x2b];
  return;
}


==================================================================

### FUNC 002ee190 (744 bytes) name=FUN_002ee190

void FUN_002ee190(undefined8 param_1,undefined8 *param_2,double *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  
  pMVar1 = (Mat *)(param_4 + 2);
  uVar3 = *(undefined4 *)(param_2 + 1);
  *param_4 = *param_2;
  *(undefined4 *)(param_4 + 1) = uVar3;
  if (pMVar1 != (Mat *)(param_2 + 2)) {
    if (param_2[9] != 0) {
      piVar2 = (int *)(param_2[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 2) = *(undefined4 *)(param_2 + 2);
    if ((*(int *)((long)param_4 + 0x14) < 3) && (iVar4 = *(int *)((long)param_2 + 0x14), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_2[0xb];
      puVar7 = (undefined8 *)param_4[0xb];
      uVar3 = *(undefined4 *)(param_2 + 3);
      *(undefined4 *)((long)param_4 + 0x1c) = *(undefined4 *)((long)param_2 + 0x1c);
      *(int *)((long)param_4 + 0x14) = iVar4;
      *(undefined4 *)(param_4 + 3) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_2 + 2));
    }
    uVar13 = param_2[4];
    uVar12 = param_2[7];
    uVar11 = param_2[6];
    uVar10 = param_2[9];
    uVar9 = param_2[8];
    param_4[5] = param_2[5];
    param_4[4] = uVar13;
    param_4[7] = uVar12;
    param_4[6] = uVar11;
    param_4[9] = uVar10;
    param_4[8] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xe);
  if (pMVar1 != (Mat *)(param_2 + 0xe)) {
    if (param_2[0x15] != 0) {
      piVar2 = (int *)(param_2[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_2 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar4 = *(int *)((long)param_2 + 0x74), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_2[0x17];
      puVar7 = (undefined8 *)param_4[0x17];
      uVar3 = *(undefined4 *)(param_2 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_2 + 0x7c);
      *(int *)((long)param_4 + 0x74) = iVar4;
      *(undefined4 *)(param_4 + 0xf) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_2 + 0xe));
    }
    uVar13 = param_2[0x10];
    uVar12 = param_2[0x13];
    uVar11 = param_2[0x12];
    uVar10 = param_2[0x15];
    uVar9 = param_2[0x14];
    param_4[0x11] = param_2[0x11];
    param_4[0x10] = uVar13;
    param_4[0x13] = uVar12;
    param_4[0x12] = uVar11;
    param_4[0x15] = uVar10;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_2 + 0x1a)) {
    if (param_2[0x21] != 0) {
      piVar2 = (int *)(param_2[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_2 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar4 = *(int *)((long)param_2 + 0xd4), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_2[0x23];
      puVar7 = (undefined8 *)param_4[0x23];
      uVar3 = *(undefined4 *)(param_2 + 0x1b);
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_2 + 0xdc);
      *(int *)((long)param_4 + 0xd4) = iVar4;
      *(undefined4 *)(param_4 + 0x1b) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_2 + 0x1a));
    }
    uVar13 = param_2[0x1c];
    uVar12 = param_2[0x1f];
    uVar11 = param_2[0x1e];
    uVar10 = param_2[0x21];
    uVar9 = param_2[0x20];
    param_4[0x1d] = param_2[0x1d];
    param_4[0x1c] = uVar13;
    param_4[0x1f] = uVar12;
    param_4[0x1e] = uVar11;
    param_4[0x21] = uVar10;
    param_4[0x20] = uVar9;
  }
  uVar9 = param_2[0x26];
  param_4[0x27] = param_2[0x27];
  param_4[0x26] = uVar9;
  uVar9 = param_2[0x29];
  param_4[0x28] = param_2[0x28];
  param_4[0x29] = uVar9;
  uVar9 = param_2[0x2b];
  param_4[0x2a] = param_2[0x2a];
  param_4[0x2b] = uVar9;
  param_4[0x28] = (double)param_4[0x28] + *param_3;
  param_4[0x29] = (double)param_4[0x29] + param_3[1];
  param_4[0x2a] = (double)param_4[0x2a] + param_3[2];
  param_4[0x2b] = (double)param_4[0x2b] + param_3[3];
  return;
}


==================================================================

### FUNC 002ee478 (744 bytes) name=FUN_002ee478

void FUN_002ee478(double param_1,undefined8 param_2,undefined8 *param_3,undefined8 *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  double dVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  double dVar15;
  
  pMVar1 = (Mat *)(param_4 + 2);
  uVar3 = *(undefined4 *)(param_3 + 1);
  *param_4 = *param_3;
  *(undefined4 *)(param_4 + 1) = uVar3;
  if (pMVar1 != (Mat *)(param_3 + 2)) {
    if (param_3[9] != 0) {
      piVar2 = (int *)(param_3[9] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 2) = *(undefined4 *)(param_3 + 2);
    if ((*(int *)((long)param_4 + 0x14) < 3) && (iVar4 = *(int *)((long)param_3 + 0x14), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0xb];
      puVar7 = (undefined8 *)param_4[0xb];
      uVar3 = *(undefined4 *)(param_3 + 3);
      *(undefined4 *)((long)param_4 + 0x1c) = *(undefined4 *)((long)param_3 + 0x1c);
      *(int *)((long)param_4 + 0x14) = iVar4;
      *(undefined4 *)(param_4 + 3) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 2));
    }
    uVar14 = param_3[4];
    uVar13 = param_3[7];
    uVar11 = param_3[6];
    uVar10 = param_3[9];
    uVar9 = param_3[8];
    param_4[5] = param_3[5];
    param_4[4] = uVar14;
    param_4[7] = uVar13;
    param_4[6] = uVar11;
    param_4[9] = uVar10;
    param_4[8] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xe);
  if (pMVar1 != (Mat *)(param_3 + 0xe)) {
    if (param_3[0x15] != 0) {
      piVar2 = (int *)(param_3[0x15] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xe) = *(undefined4 *)(param_3 + 0xe);
    if ((*(int *)((long)param_4 + 0x74) < 3) && (iVar4 = *(int *)((long)param_3 + 0x74), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x17];
                    /* try { // try from 002ee704 to 003ee707 has its CatchHandler @ 002ee860 */
      puVar7 = (undefined8 *)param_4[0x17];
      uVar3 = *(undefined4 *)(param_3 + 0xf);
      *(undefined4 *)((long)param_4 + 0x7c) = *(undefined4 *)((long)param_3 + 0x7c);
      *(int *)((long)param_4 + 0x74) = iVar4;
      *(undefined4 *)(param_4 + 0xf) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xe));
    }
    uVar14 = param_3[0x10];
    uVar13 = param_3[0x13];
    uVar11 = param_3[0x12];
    uVar10 = param_3[0x15];
    uVar9 = param_3[0x14];
    param_4[0x11] = param_3[0x11];
    param_4[0x10] = uVar14;
    param_4[0x13] = uVar13;
    param_4[0x12] = uVar11;
    param_4[0x15] = uVar10;
    param_4[0x14] = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0x1a);
  if (pMVar1 != (Mat *)(param_3 + 0x1a)) {
    if (param_3[0x21] != 0) {
      piVar2 = (int *)(param_3[0x21] + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x1a) = *(undefined4 *)(param_3 + 0x1a);
    if ((*(int *)((long)param_4 + 0xd4) < 3) && (iVar4 = *(int *)((long)param_3 + 0xd4), iVar4 < 3))
    {
      puVar8 = (undefined8 *)param_3[0x23];
      puVar7 = (undefined8 *)param_4[0x23];
      uVar3 = *(undefined4 *)(param_3 + 0x1b);
      *(undefined4 *)((long)param_4 + 0xdc) = *(undefined4 *)((long)param_3 + 0xdc);
      *(int *)((long)param_4 + 0xd4) = iVar4;
      *(undefined4 *)(param_4 + 0x1b) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
                    /* try { // try from 002ee6fc to 003ee6ff has its CatchHandler @ 002ee830 */
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x1a));
    }
    uVar14 = param_3[0x1c];
    uVar13 = param_3[0x1f];
    uVar11 = param_3[0x1e];
    uVar10 = param_3[0x21];
    uVar9 = param_3[0x20];
    param_4[0x1d] = param_3[0x1d];
    param_4[0x1c] = uVar14;
    param_4[0x1f] = uVar13;
    param_4[0x1e] = uVar11;
    param_4[0x21] = uVar10;
    param_4[0x20] = uVar9;
  }
  dVar15 = (double)param_3[0x26];
  dVar12 = (double)param_3[0x27];
  uVar9 = param_3[0x29];
  param_4[0x28] = param_3[0x28];
  param_4[0x29] = uVar9;
  uVar9 = param_3[0x2b];
  param_4[0x2a] = param_3[0x2a];
  param_4[0x2b] = uVar9;
  param_4[0x26] = param_1 * dVar15;
  param_4[0x27] = param_1 * dVar12;
  param_4[0x28] = param_1 * (double)param_4[0x28];
                    /* try { // try from 002ee6a8 to 003ee6ab has its CatchHandler @ 002ee860 */
  param_4[0x29] = param_1 * (double)param_4[0x29];
  param_4[0x2a] = param_1 * (double)param_4[0x2a];
  param_4[0x2b] = param_1 * (double)param_4[0x2b];
  return;
}


==================================================================

### FUNC 002ee760 (228 bytes) name=MatExpr

/* cv::MatExpr::MatExpr() */

void __thiscall cv::MatExpr::MatExpr(MatExpr *this)

{
  *(undefined8 *)this = 0;
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0x42ff0000;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined4 *)(this + 0x1c) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined8 *)(this + 0x48) = 0;
  *(MatExpr **)(this + 0x50) = this + 0x18;
  *(MatExpr **)(this + 0x58) = this + 0x60;
  *(undefined8 *)(this + 0x68) = 0;
  *(undefined8 *)(this + 0x60) = 0;
  *(undefined4 *)(this + 0x70) = 0x42ff0000;
  *(undefined4 *)(this + 0x74) = 0;
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined4 *)(this + 0x7c) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0xa0) = 0;
  *(undefined8 *)(this + 0xa8) = 0;
  *(MatExpr **)(this + 0xb0) = this + 0x78;
  *(MatExpr **)(this + 0xb8) = this + 0xc0;
  *(undefined8 *)(this + 200) = 0;
  *(undefined8 *)(this + 0xc0) = 0;
  *(undefined4 *)(this + 0xd0) = 0x42ff0000;
  *(undefined4 *)(this + 0xd4) = 0;
  *(undefined4 *)(this + 0xd8) = 0;
  *(undefined4 *)(this + 0xdc) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0x100) = 0;
  *(undefined8 *)(this + 0x108) = 0;
  *(MatExpr **)(this + 0x110) = this + 0xd8;
  *(MatExpr **)(this + 0x118) = this + 0x120;
                    /* catch() { ... } // from try @ 002ee6fc with catch @ 002ee830 */
  *(undefined8 *)(this + 0x128) = 0;
  *(undefined8 *)(this + 0x120) = 0;
  *(undefined8 *)(this + 0x138) = 0;
  *(undefined8 *)(this + 0x130) = 0;
  *(undefined8 *)(this + 0x148) = 0;
  *(undefined8 *)(this + 0x140) = 0;
  *(undefined8 *)(this + 0x158) = 0;
  *(undefined8 *)(this + 0x150) = 0;
  return;
}


==================================================================

### FUNC 002ee844 (664 bytes) name=MatExpr

/* cv::MatExpr::MatExpr(cv::MatOp const*, int, cv::Mat const&, cv::Mat const&, cv::Mat const&,
   double, double, cv::Scalar_<double> const&) */

void __thiscall
cv::MatExpr::MatExpr
          (MatExpr *this,MatOp *param_1,int param_2,Mat *param_3,Mat *param_4,Mat *param_5,
          double param_6,double param_7,Scalar_ *param_8)

{
  int *piVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  char cVar6;
  bool bVar7;
  long lVar8;
  undefined8 *puVar9;
  undefined8 uVar10;
  undefined8 *puVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  
                    /* try { // try from 002ee85c to 003ee85f has its CatchHandler @ 002eddc0 */
                    /* catch() { ... } // from try @ 002ede14 with catch @ 002ee860
                       catch() { ... } // from try @ 002ede9c with catch @ 002ee860
                       catch() { ... } // from try @ 002ee6a8 with catch @ 002ee860
                       catch() { ... } // from try @ 002ee704 with catch @ 002ee860 */
                    /* catch() { ... } // from try @ 002ede94 with catch @ 002ee868 */
  uVar2 = *(undefined4 *)param_3;
  uVar3 = *(undefined4 *)(param_3 + 4);
                    /* catch() { ... } // from try @ 002eea14 with catch @ 002ee878 */
  uVar4 = *(undefined4 *)(param_3 + 8);
  uVar5 = *(undefined4 *)(param_3 + 0xc);
  uVar15 = *(undefined8 *)(param_3 + 0x10);
  uVar14 = *(undefined8 *)(param_3 + 0x18);
  *(MatOp **)this = param_1;
  *(int *)(this + 8) = param_2;
  *(undefined4 *)(this + 0x10) = uVar2;
  uVar13 = *(undefined8 *)(param_3 + 0x20);
  uVar12 = *(undefined8 *)(param_3 + 0x28);
  uVar10 = *(undefined8 *)(param_3 + 0x30);
  lVar8 = *(long *)(param_3 + 0x38);
  *(long *)(this + 0x48) = lVar8;
  *(undefined4 *)(this + 0x14) = uVar3;
  *(undefined4 *)(this + 0x18) = uVar4;
  *(undefined4 *)(this + 0x1c) = uVar5;
  *(undefined8 *)(this + 0x20) = uVar15;
  *(undefined8 *)(this + 0x28) = uVar14;
                    /* try { // try from 002ee8c4 to 003ee8c7 has its CatchHandler @ 002eea18 */
  *(undefined8 *)(this + 0x30) = uVar13;
  *(undefined8 *)(this + 0x38) = uVar12;
  *(undefined8 *)(this + 0x40) = uVar10;
  *(MatExpr **)(this + 0x50) = this + 0x18;
  *(MatExpr **)(this + 0x58) = this + 0x60;
  *(undefined8 *)(this + 0x68) = 0;
  *(undefined8 *)(this + 0x60) = 0;
  if (lVar8 != 0) {
    piVar1 = (int *)(lVar8 + 0x14);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
                    /* try { // try from 002ee900 to 003ee903 has its CatchHandler @ 002ee9d4 */
  if (*(int *)(param_3 + 4) < 3) {
    puVar11 = *(undefined8 **)(param_3 + 0x48);
    puVar9 = *(undefined8 **)(this + 0x58);
    *puVar9 = *puVar11;
    puVar9[1] = puVar11[1];
  }
  else {
    *(undefined4 *)(this + 0x14) = 0;
    Mat::copySize((Mat *)(this + 0x10),param_3);
  }
  uVar15 = *(undefined8 *)(param_4 + 0x10);
  uVar14 = *(undefined8 *)(param_4 + 0x18);
  uVar13 = *(undefined8 *)(param_4 + 0x20);
  uVar12 = *(undefined8 *)(param_4 + 0x28);
  uVar10 = *(undefined8 *)(param_4 + 0x30);
  uVar16 = *(undefined8 *)(param_4 + 8);
  lVar8 = *(long *)(param_4 + 0x38);
  *(undefined8 *)(this + 0x70) = *(undefined8 *)param_4;
  *(undefined8 *)(this + 0x78) = uVar16;
  *(undefined8 *)(this + 0x80) = uVar15;
  *(undefined8 *)(this + 0x88) = uVar14;
  *(undefined8 *)(this + 0x90) = uVar13;
  *(undefined8 *)(this + 0x98) = uVar12;
  *(undefined8 *)(this + 0xa0) = uVar10;
  *(long *)(this + 0xa8) = lVar8;
  *(MatExpr **)(this + 0xb0) = this + 0x78;
  *(MatExpr **)(this + 0xb8) = this + 0xc0;
  *(undefined8 *)(this + 200) = 0;
  *(undefined8 *)(this + 0xc0) = 0;
  if (lVar8 != 0) {
    piVar1 = (int *)(lVar8 + 0x14);
    do {
                    /* try { // try from 002ee98c to 003ee9cf has its CatchHandler @ 002eea18 */
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  if (*(int *)(param_4 + 4) < 3) {
    puVar11 = *(undefined8 **)(param_4 + 0x48);
    puVar9 = *(undefined8 **)(this + 0xb8);
    *puVar9 = *puVar11;
    puVar9[1] = puVar11[1];
  }
  else {
    *(undefined4 *)(this + 0x74) = 0;
    Mat::copySize((Mat *)(this + 0x70),param_4);
  }
  uVar15 = *(undefined8 *)(param_5 + 0x10);
  uVar14 = *(undefined8 *)(param_5 + 0x18);
                    /* catch() { ... } // from try @ 002ee900 with catch @ 002ee9d4 */
  uVar13 = *(undefined8 *)(param_5 + 0x20);
  uVar12 = *(undefined8 *)(param_5 + 0x28);
  uVar10 = *(undefined8 *)(param_5 + 0x30);
  uVar16 = *(undefined8 *)(param_5 + 8);
  lVar8 = *(long *)(param_5 + 0x38);
  *(undefined8 *)(this + 0xd0) = *(undefined8 *)param_5;
  *(undefined8 *)(this + 0xd8) = uVar16;
  *(undefined8 *)(this + 0xe0) = uVar15;
  *(undefined8 *)(this + 0xe8) = uVar14;
  *(undefined8 *)(this + 0xf0) = uVar13;
  *(undefined8 *)(this + 0xf8) = uVar12;
  *(undefined8 *)(this + 0x100) = uVar10;
  *(long *)(this + 0x108) = lVar8;
  *(MatExpr **)(this + 0x110) = this + 0xd8;
  *(MatExpr **)(this + 0x118) = this + 0x120;
                    /* try { // try from 002eea14 to 003eea17 has its CatchHandler @ 002ee878 */
  *(undefined8 *)(this + 0x128) = 0;
                    /* catch() { ... } // from try @ 002ee8c4 with catch @ 002eea18
                       catch() { ... } // from try @ 002ee98c with catch @ 002eea18 */
  *(undefined8 *)(this + 0x120) = 0;
  if (lVar8 != 0) {
                    /* catch() { ... } // from try @ 002eea94 with catch @ 002eea20
                       catch() { ... } // from try @ 002eeb10 with catch @ 002eea20
                       catch() { ... } // from try @ 002eeb98 with catch @ 002eea20
                       catch() { ... } // from try @ 002eefbc with catch @ 002eea20
                       catch() { ... } // from try @ 002ef0ec with catch @ 002eea20
                       catch() { ... } // from try @ 002ef208 with catch @ 002eea20
                       catch() { ... } // from try @ 002ef26c with catch @ 002eea20
                       catch() { ... } // from try @ 002ef29c with catch @ 002eea20
                       catch() { ... } // from try @ 002ef324 with catch @ 002eea20
                       catch() { ... } // from try @ 002ef3bc with catch @ 002eea20
                       catch() { ... } // from try @ 002ef3d0 with catch @ 002eea20
                       catch() { ... } // from try @ 002ef3e4 with catch @ 002eea20
                       catch() { ... } // from try @ 002ef3f8 with catch @ 002eea20
                       catch() { ... } // from try @ 002ef40c with catch @ 002eea20
                       catch() { ... } // from try @ 002ef420 with catch @ 002eea20 */
    piVar1 = (int *)(lVar8 + 0x14);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  if (*(int *)(param_5 + 4) < 3) {
    puVar11 = *(undefined8 **)(param_5 + 0x48);
    puVar9 = *(undefined8 **)(this + 0x118);
    *puVar9 = *puVar11;
    puVar9[1] = puVar11[1];
  }
  else {
    *(undefined4 *)(this + 0xd4) = 0;
    Mat::copySize((Mat *)(this + 0xd0),param_5);
  }
  *(double *)(this + 0x130) = param_6;
  *(double *)(this + 0x138) = param_7;
  *(undefined8 *)(this + 0x140) = *(undefined8 *)param_8;
  *(undefined8 *)(this + 0x148) = *(undefined8 *)(param_8 + 8);
  *(undefined8 *)(this + 0x150) = *(undefined8 *)(param_8 + 0x10);
  *(undefined8 *)(this + 0x158) = *(undefined8 *)(param_8 + 0x18);
                    /* try { // try from 002eea94 to 003eeadb has its CatchHandler @ 002eea20 */
  return;
}


==================================================================

### FUNC 002eeb20 (20 bytes) name=MatOp

/* cv::MatOp::MatOp() */

void __thiscall cv::MatOp::MatOp(MatOp *this)

{
  *(undefined **)this = PTR_vtable_00501e88 + 0x10;
  return;
}


==================================================================

### FUNC 002eeb34 (136 bytes) name=FUN_002eeb34

undefined8 * FUN_002eeb34(void)

{
  int iVar1;
  
  if (((DAT_00531f78 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00531f78), iVar1 != 0)) {
    cv::MatOp::MatOp((MatOp *)&DAT_00531f98);
    DAT_00531f98 = &PTR_FUN_004fc530;
    __cxa_guard_release(&DAT_00531f78);
                    /* try { // try from 002eeb90 to 003eeb93 has its CatchHandler @ 002ef3ac */
                    /* try { // try from 002eeb98 to 003eef73 has its CatchHandler @ 002eea20 */
    __cxa_atexit(FUN_002eebd4,&DAT_00531f98,&DAT_00502000);
    return &DAT_00531f98;
  }
  return &DAT_00531f98;
}


==================================================================

### FUNC 002eebd0 (4 bytes) name=~MatOp

/* cv::MatOp::~MatOp() */

void __thiscall cv::MatOp::~MatOp(MatOp *this)

{
  return;
}


==================================================================

### FUNC 002eebd4 (16 bytes) name=FUN_002eebd4

void FUN_002eebd4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc530;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eebe4 (44 bytes) name=FUN_002eebe4

void FUN_002eebe4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc530;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eec10 (16 bytes) name=FUN_002eec10

void FUN_002eec10(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc440;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eec20 (44 bytes) name=FUN_002eec20

void FUN_002eec20(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc440;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eec4c (16 bytes) name=FUN_002eec4c

void FUN_002eec4c(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc350;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eec5c (44 bytes) name=FUN_002eec5c

void FUN_002eec5c(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc350;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eec88 (16 bytes) name=FUN_002eec88

void FUN_002eec88(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc260;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eec98 (44 bytes) name=FUN_002eec98

void FUN_002eec98(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc260;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eecc4 (16 bytes) name=FUN_002eecc4

void FUN_002eecc4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc170;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eecd4 (44 bytes) name=FUN_002eecd4

void FUN_002eecd4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc170;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eed00 (16 bytes) name=FUN_002eed00

void FUN_002eed00(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc080;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eed10 (44 bytes) name=FUN_002eed10

void FUN_002eed10(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fc080;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eed3c (16 bytes) name=FUN_002eed3c

void FUN_002eed3c(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbf90;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eed4c (44 bytes) name=FUN_002eed4c

void FUN_002eed4c(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbf90;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eed78 (16 bytes) name=FUN_002eed78

void FUN_002eed78(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbea0;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eed88 (44 bytes) name=FUN_002eed88

void FUN_002eed88(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbea0;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eedb4 (16 bytes) name=FUN_002eedb4

void FUN_002eedb4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbdb0;
  cv::MatOp::~MatOp(param_1);
  return;
}


==================================================================

### FUNC 002eedc4 (44 bytes) name=FUN_002eedc4

void FUN_002eedc4(MatOp *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004fbdb0;
  cv::MatOp::~MatOp(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 002eedf0 (32 bytes) name=~MatOp

/* cv::MatOp::~MatOp() */

void __thiscall cv::MatOp::~MatOp(MatOp *this)

{
  ~MatOp(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 002eee10 (908 bytes) name=matmul

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::matmul(cv::MatExpr const&, cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::matmul(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  long *plVar1;
  MatOp *pMVar2;
  int iVar3;
  int iVar4;
  double dVar5;
  undefined8 uStack_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar2 = *(MatOp **)param_2;
  if (pMVar2 == this) {
    local_238 = &local_230;
    local_1d8 = &local_1d0;
    plVar1 = *(long **)param_1;
    uStack_228 = 0;
    local_230 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    local_240 = &uStack_278;
    local_1e0 = &uStack_218;
    uStack_278 = _UNK_002ef238;
    local_280 = _DAT_002ef230;
    local_270 = 0;
    uStack_218 = _UNK_002ef238;
    local_220 = _DAT_002ef230;
    local_268 = 0;
    local_260 = 0;
    local_258 = 0;
    local_250 = 0;
    local_248 = 0;
    local_210 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    if (plVar1 == &DAT_00531fa0) {
      dVar5 = *(double *)(param_1 + 0x130);
      Mat::operator=((Mat *)&local_280,(Mat *)(param_1 + 0x10));
      iVar4 = 3;
      iVar3 = 1;
    }
    else {
                    /* try { // try from 002ef0a8 to 003ef0ab has its CatchHandler @ 002ef45c */
      if (((plVar1 == &DAT_00531fa8) &&
          (((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)) &&
           (*(double *)(param_1 + 0x140) == 0.0)))) &&
         (((*(double *)(param_1 + 0x148) == 0.0 && (*(double *)(param_1 + 0x150) == 0.0)) &&
          (*(double *)(param_1 + 0x158) == 0.0)))) {
                    /* try { // try from 002ef0ec to 003ef1b7 has its CatchHandler @ 002eea20 */
        dVar5 = *(double *)(param_1 + 0x130);
        Mat::operator=((Mat *)&local_280,(Mat *)(param_1 + 0x10));
        iVar4 = 2;
        iVar3 = 0;
      }
      else {
        (**(code **)(*plVar1 + 0x18))(plVar1,param_1,(Mat *)&local_280,0xffffffff);
        iVar4 = 2;
        iVar3 = 0;
        dVar5 = 1.0;
      }
    }
    plVar1 = *(long **)param_2;
    if (plVar1 == &DAT_00531fa0) {
      dVar5 = dVar5 * *(double *)(param_2 + 0x130);
      Mat::operator=((Mat *)&local_220,(Mat *)(param_2 + 0x10));
    }
    else {
      iVar4 = iVar3;
      if ((((plVar1 == &DAT_00531fa8) &&
           ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) &&
          (*(double *)(param_2 + 0x140) == 0.0)) &&
         (((*(double *)(param_2 + 0x148) == 0.0 && (*(double *)(param_2 + 0x150) == 0.0)) &&
          (*(double *)(param_2 + 0x158) == 0.0)))) {
        dVar5 = dVar5 * *(double *)(param_2 + 0x130);
        Mat::operator=((Mat *)&local_220,(Mat *)(param_2 + 0x10));
      }
      else {
        (**(code **)(*plVar1 + 0x18))(plVar1,param_2,(Mat *)&local_220,0xffffffff);
      }
    }
    local_178 = &local_170;
    uStack_298 = 0;
    uStack_2a0 = 0;
    uStack_1b8 = _UNK_002ef238;
    local_1c0 = _DAT_002ef230;
    local_180 = &uStack_1b8;
    uStack_288 = 0;
    local_290 = 0;
                    /* try { // try from 002eefb4 to 003eefb7 has its CatchHandler @ 002ef3e8 */
                    /* try { // try from 002eefbc to 003eefcb has its CatchHandler @ 002eea20 */
    uStack_168 = 0;
    local_170 = 0;
    local_1b0 = 0;
    local_1a8 = 0;
    local_1a0 = 0;
    local_198 = 0;
    local_190 = 0;
    local_188 = 0;
    MatExpr::MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531f88,iVar4,(Mat *)&local_280,
                     (Mat *)&local_220,(Mat *)&local_1c0,dVar5,1.0,(Scalar_ *)&uStack_2a0);
    *(undefined8 *)param_3 = local_160;
    *(undefined4 *)(param_3 + 8) = local_158;
    Mat::operator=((Mat *)(param_3 + 0x10),aMStack_150);
                    /* try { // try from 002ef008 to 003ef00b has its CatchHandler @ 002ef45c */
    Mat::operator=((Mat *)(param_3 + 0x70),aMStack_f0);
    Mat::operator=((Mat *)(param_3 + 0xd0),aMStack_90);
                    /* try { // try from 002ef030 to 003ef033 has its CatchHandler @ 002ef424 */
    *(undefined8 *)(param_3 + 0x138) = uStack_28;
    *(undefined8 *)(param_3 + 0x130) = local_30;
    *(undefined8 *)(param_3 + 0x140) = local_20;
    *(undefined8 *)(param_3 + 0x148) = uStack_18;
    *(undefined8 *)(param_3 + 0x150) = local_10;
    *(undefined8 *)(param_3 + 0x158) = uStack_8;
    MatExpr::~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
  }
  else {
    (**(code **)(*(long *)pMVar2 + 0xb8))(pMVar2);
  }
  return;
}


==================================================================

### FUNC 002ef240 (520 bytes) name=invert

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::invert(cv::MatExpr const&, int, cv::MatExpr&) const */

void __thiscall cv::MatOp::invert(MatOp *this,MatExpr *param_1,int param_2,MatExpr *param_3)

{
  undefined8 uStack_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 uStack_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
                    /* try { // try from 002ef264 to 003ef267 has its CatchHandler @ 002ef3fc */
                    /* try { // try from 002ef26c to 003ef26f has its CatchHandler @ 002eea20 */
  local_178 = &local_170;
                    /* try { // try from 002ef278 to 003ef27b has its CatchHandler @ 002ef45c */
  local_1a8 = 0;
  local_180 = &local_1b8;
  uStack_1c0 = DAT_002ef4d0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
                    /* try { // try from 002ef29c to 003ef2df has its CatchHandler @ 002eea20 */
  local_188 = 0;
  local_1b8 = 0;
  local_1b0 = 0;
  local_168 = 0;
  local_170 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_1c0,0xffffffff);
  uStack_298 = 0;
  uStack_2a0 = 0;
  local_1d8 = &local_1d0;
  local_238 = &local_230;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_218 = _UNK_002ef4e8;
  local_220 = _DAT_002ef4e0;
  uStack_278 = _UNK_002ef4e8;
  local_280 = _DAT_002ef4e0;
  local_1e0 = &uStack_218;
  uStack_228 = 0;
  local_230 = 0;
  local_240 = &uStack_278;
  uStack_288 = 0;
  local_290 = 0;
                    /* try { // try from 002ef31c to 003ef31f has its CatchHandler @ 002ef410 */
                    /* try { // try from 002ef324 to 003ef3a7 has its CatchHandler @ 002eea20 */
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_270 = 0;
  local_268 = 0;
  local_260 = 0;
  local_258 = 0;
  local_250 = 0;
  local_248 = 0;
  MatExpr::MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531fb0,param_2,(Mat *)&uStack_1c0,
                   (Mat *)&local_220,(Mat *)&local_280,1.0,0.0,(Scalar_ *)&uStack_2a0);
  *(undefined8 *)param_3 = local_160;
  *(undefined4 *)(param_3 + 8) = local_158;
  Mat::operator=((Mat *)(param_3 + 0x10),aMStack_150);
  Mat::operator=((Mat *)(param_3 + 0x70),aMStack_f0);
  Mat::operator=((Mat *)(param_3 + 0xd0),aMStack_90);
                    /* catch() { ... } // from try @ 002eeb90 with catch @ 002ef3ac */
                    /* try { // try from 002ef3bc to 003ef3bf has its CatchHandler @ 002eea20 */
                    /* catch() { ... } // from try @ 002ef200 with catch @ 002ef3c0 */
  *(undefined8 *)(param_3 + 0x138) = uStack_28;
  *(undefined8 *)(param_3 + 0x130) = local_30;
  *(undefined8 *)(param_3 + 0x140) = local_20;
  *(undefined8 *)(param_3 + 0x148) = uStack_18;
                    /* try { // try from 002ef3d0 to 003ef3d3 has its CatchHandler @ 002eea20 */
  *(undefined8 *)(param_3 + 0x150) = local_10;
  *(undefined8 *)(param_3 + 0x158) = uStack_8;
                    /* catch() { ... } // from try @ 002eeb08 with catch @ 002ef3d4 */
  MatExpr::~MatExpr((MatExpr *)&local_160);
  Mat::release((Mat *)&local_280);
                    /* try { // try from 002ef3e4 to 003ef3e7 has its CatchHandler @ 002eea20 */
                    /* catch() { ... } // from try @ 002eefb4 with catch @ 002ef3e8 */
  if (local_238 != &local_230) {
    fastFree(local_238);
  }
                    /* try { // try from 002ef3f8 to 003ef3fb has its CatchHandler @ 002eea20 */
  Mat::release((Mat *)&local_220);
                    /* catch() { ... } // from try @ 002ef264 with catch @ 002ef3fc */
  if (local_1d8 != &local_1d0) {
                    /* try { // try from 002ef40c to 003ef40f has its CatchHandler @ 002eea20 */
    fastFree(local_1d8);
  }
                    /* catch() { ... } // from try @ 002ef31c with catch @ 002ef410 */
  Mat::release((Mat *)&uStack_1c0);
                    /* try { // try from 002ef420 to 003ef423 has its CatchHandler @ 002eea20 */
                    /* catch() { ... } // from try @ 002ef030 with catch @ 002ef424 */
  if (local_178 != &local_170) {
    fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002ef4f0 (680 bytes) name=operator=

/* cv::MatExpr::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&) */

MatExpr * __thiscall cv::MatExpr::operator=(MatExpr *this,MatExpr *param_1)

{
  Mat *pMVar1;
  int *piVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  
  pMVar1 = (Mat *)(this + 0x10);
  uVar3 = *(undefined4 *)(param_1 + 8);
  *(undefined8 *)this = *(undefined8 *)param_1;
  *(undefined4 *)(this + 8) = uVar3;
  if (pMVar1 != (Mat *)(param_1 + 0x10)) {
    if (*(long *)(param_1 + 0x48) != 0) {
      piVar2 = (int *)(*(long *)(param_1 + 0x48) + 0x14);
      do {
                    /* try { // try from 002ef538 to 003ef75f has its CatchHandler @ 002ef480 */
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    Mat::release(pMVar1);
    *(undefined4 *)(this + 0x10) = *(undefined4 *)(param_1 + 0x10);
    if ((*(int *)(this + 0x14) < 3) && (iVar4 = *(int *)(param_1 + 0x14), iVar4 < 3)) {
      puVar8 = *(undefined8 **)(param_1 + 0x58);
      puVar7 = *(undefined8 **)(this + 0x58);
      uVar3 = *(undefined4 *)(param_1 + 0x18);
      *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);
      *(int *)(this + 0x14) = iVar4;
      *(undefined4 *)(this + 0x18) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      Mat::copySize(pMVar1,(Mat *)(param_1 + 0x10));
    }
    uVar13 = *(undefined8 *)(param_1 + 0x20);
    uVar12 = *(undefined8 *)(param_1 + 0x38);
    uVar11 = *(undefined8 *)(param_1 + 0x30);
    uVar10 = *(undefined8 *)(param_1 + 0x48);
    uVar9 = *(undefined8 *)(param_1 + 0x40);
    *(undefined8 *)(this + 0x28) = *(undefined8 *)(param_1 + 0x28);
    *(undefined8 *)(this + 0x20) = uVar13;
    *(undefined8 *)(this + 0x38) = uVar12;
    *(undefined8 *)(this + 0x30) = uVar11;
    *(undefined8 *)(this + 0x48) = uVar10;
    *(undefined8 *)(this + 0x40) = uVar9;
  }
  pMVar1 = (Mat *)(this + 0x70);
  if (pMVar1 != (Mat *)(param_1 + 0x70)) {
    if (*(long *)(param_1 + 0xa8) != 0) {
      piVar2 = (int *)(*(long *)(param_1 + 0xa8) + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    Mat::release(pMVar1);
    *(undefined4 *)(this + 0x70) = *(undefined4 *)(param_1 + 0x70);
    if ((*(int *)(this + 0x74) < 3) && (iVar4 = *(int *)(param_1 + 0x74), iVar4 < 3)) {
      puVar8 = *(undefined8 **)(param_1 + 0xb8);
      puVar7 = *(undefined8 **)(this + 0xb8);
      uVar3 = *(undefined4 *)(param_1 + 0x78);
      *(undefined4 *)(this + 0x7c) = *(undefined4 *)(param_1 + 0x7c);
      *(int *)(this + 0x74) = iVar4;
      *(undefined4 *)(this + 0x78) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      Mat::copySize(pMVar1,(Mat *)(param_1 + 0x70));
    }
    uVar13 = *(undefined8 *)(param_1 + 0x80);
    uVar12 = *(undefined8 *)(param_1 + 0x98);
    uVar11 = *(undefined8 *)(param_1 + 0x90);
    uVar10 = *(undefined8 *)(param_1 + 0xa8);
    uVar9 = *(undefined8 *)(param_1 + 0xa0);
    *(undefined8 *)(this + 0x88) = *(undefined8 *)(param_1 + 0x88);
    *(undefined8 *)(this + 0x80) = uVar13;
    *(undefined8 *)(this + 0x98) = uVar12;
    *(undefined8 *)(this + 0x90) = uVar11;
    *(undefined8 *)(this + 0xa8) = uVar10;
    *(undefined8 *)(this + 0xa0) = uVar9;
  }
  pMVar1 = (Mat *)(this + 0xd0);
  if (pMVar1 != (Mat *)(param_1 + 0xd0)) {
    if (*(long *)(param_1 + 0x108) != 0) {
      piVar2 = (int *)(*(long *)(param_1 + 0x108) + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    Mat::release(pMVar1);
    *(undefined4 *)(this + 0xd0) = *(undefined4 *)(param_1 + 0xd0);
    if ((*(int *)(this + 0xd4) < 3) && (iVar4 = *(int *)(param_1 + 0xd4), iVar4 < 3)) {
      puVar8 = *(undefined8 **)(param_1 + 0x118);
      puVar7 = *(undefined8 **)(this + 0x118);
      uVar3 = *(undefined4 *)(param_1 + 0xd8);
      *(undefined4 *)(this + 0xdc) = *(undefined4 *)(param_1 + 0xdc);
      *(int *)(this + 0xd4) = iVar4;
      *(undefined4 *)(this + 0xd8) = uVar3;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      Mat::copySize(pMVar1,(Mat *)(param_1 + 0xd0));
    }
    uVar13 = *(undefined8 *)(param_1 + 0xe0);
    uVar12 = *(undefined8 *)(param_1 + 0xf8);
    uVar11 = *(undefined8 *)(param_1 + 0xf0);
    uVar10 = *(undefined8 *)(param_1 + 0x108);
    uVar9 = *(undefined8 *)(param_1 + 0x100);
    *(undefined8 *)(this + 0xe8) = *(undefined8 *)(param_1 + 0xe8);
    *(undefined8 *)(this + 0xe0) = uVar13;
    *(undefined8 *)(this + 0xf8) = uVar12;
    *(undefined8 *)(this + 0xf0) = uVar11;
    *(undefined8 *)(this + 0x108) = uVar10;
    *(undefined8 *)(this + 0x100) = uVar9;
  }
  uVar9 = *(undefined8 *)(param_1 + 0x130);
  *(undefined8 *)(this + 0x138) = *(undefined8 *)(param_1 + 0x138);
  *(undefined8 *)(this + 0x130) = uVar9;
  uVar9 = *(undefined8 *)(param_1 + 0x148);
  *(undefined8 *)(this + 0x140) = *(undefined8 *)(param_1 + 0x140);
  *(undefined8 *)(this + 0x148) = uVar9;
  uVar9 = *(undefined8 *)(param_1 + 0x158);
  *(undefined8 *)(this + 0x150) = *(undefined8 *)(param_1 + 0x150);
  *(undefined8 *)(this + 0x158) = uVar9;
  return this;
}


==================================================================

### FUNC 002ef7a0 (1252 bytes) name=roi

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::roi(cv::MatExpr const&, cv::Range const&, cv::Range const&, cv::MatExpr&) const */

void __thiscall
cv::MatOp::roi(MatOp *this,MatExpr *param_1,Range *param_2,Range *param_3,MatExpr *param_4)

{
  char cVar1;
  undefined8 local_318;
  undefined8 local_310;
  undefined8 local_308;
  undefined8 local_300;
  undefined8 uStack_2f8;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  undefined8 local_2c8;
  undefined8 local_2c0;
  undefined8 local_2b8;
  undefined8 local_2b0;
  undefined8 local_2a8;
  undefined8 *local_2a0;
  undefined8 *local_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [56];
  undefined1 *local_118;
  undefined1 auStack_110 [32];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
                    /* try { // try from 002ef7a0 to 003ef7a3 has its CatchHandler @ 002ef7e4 */
                    /* try { // try from 002ef7a8 to 003ef7c7 has its CatchHandler @ 002ef480 */
  cVar1 = (**(code **)(*(long *)this + 0x10))();
                    /* catch() { ... } // from try @ 002ef7a0 with catch @ 002ef7e4 */
  if (cVar1 == '\0') {
    local_1d8 = &local_1d0;
    local_1e0 = &uStack_218;
                    /* try { // try from 002efad0 to 003efad3 has its CatchHandler @ 002f06b0 */
    local_220 = DAT_002efe40;
    uStack_218 = 0;
    local_210 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&local_220,0xffffffff)
    ;
                    /* try { // try from 002efb24 to 003efb27 has its CatchHandler @ 002f06d4 */
    local_310 = *(undefined8 *)param_2;
    local_308 = *(undefined8 *)param_3;
                    /* try { // try from 002efb2c to 003efb2f has its CatchHandler @ 002f06b0 */
    Mat::Mat((Mat *)&local_1c0,(Mat *)&local_220,(Range *)&local_310,(Range *)&local_308);
    uStack_2f8 = 0;
    local_300 = 0;
    local_298 = &local_290;
    local_238 = &local_230;
    local_270 = 0;
    local_268 = 0;
    uStack_278 = _UNK_002efe38;
    local_280 = _DAT_002efe30;
    local_240 = &uStack_278;
    local_260 = 0;
    uStack_2d8 = _UNK_002efe38;
    local_2e0 = _DAT_002efe30;
    local_258 = 0;
    uStack_288 = 0;
    local_290 = 0;
    local_250 = 0;
    uStack_2e8 = 0;
    local_2f0 = 0;
    local_248 = 0;
    local_2a0 = &uStack_2d8;
    uStack_228 = 0;
    local_230 = 0;
    local_2d0 = 0;
    local_2c8 = 0;
    local_2c0 = 0;
    local_2b8 = 0;
    local_2b0 = 0;
    local_2a8 = 0;
    MatExpr::MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531f80,0,(Mat *)&local_1c0,
                     (Mat *)&local_2e0,(Mat *)&local_280,1.0,1.0,(Scalar_ *)&local_300);
    MatExpr::operator=(param_4,(MatExpr *)&local_160);
    MatExpr::~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
    Mat::release((Mat *)&local_2e0);
    if (local_298 != &local_290) {
      fastFree(local_298);
    }
    Mat::release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
  }
  else {
                    /* try { // try from 002ef7f4 to 003ef807 has its CatchHandler @ 002ef480 */
    local_238 = &local_230;
    local_1d8 = &local_1d0;
    local_178 = &local_170;
                    /* catch() { ... } // from try @ 002ef998 with catch @ 002ef80c */
    local_240 = &uStack_278;
    local_1e0 = &uStack_218;
    uStack_278 = _UNK_002efe38;
    local_280 = _DAT_002efe30;
    local_270 = 0;
    uStack_218 = _UNK_002efe38;
    local_220 = _DAT_002efe30;
    local_268 = 0;
    uStack_1b8 = _UNK_002efe38;
    local_1c0 = _DAT_002efe30;
    local_260 = 0;
    local_180 = &uStack_1b8;
    local_258 = 0;
    local_250 = 0;
                    /* try { // try from 002ef850 to 003ef853 has its CatchHandler @ 002ef99c */
    local_248 = 0;
    local_210 = 0;
    uStack_228 = 0;
    local_230 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
                    /* try { // try from 002ef878 to 003ef87b has its CatchHandler @ 002ef958 */
    local_1f0 = 0;
    local_1e8 = 0;
    local_1b0 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    local_1a8 = 0;
    local_1a0 = 0;
    local_198 = 0;
    local_190 = 0;
    local_188 = 0;
    uStack_168 = 0;
    local_170 = 0;
    MatExpr::MatExpr((MatExpr *)&local_160,*(MatOp **)param_1,*(int *)(param_1 + 8),
                     (Mat *)&local_280,(Mat *)&local_220,(Mat *)&local_1c0,
                     *(double *)(param_1 + 0x130),*(double *)(param_1 + 0x138),
                     (Scalar_ *)(param_1 + 0x140));
    *(undefined8 *)param_4 = local_160;
    *(undefined4 *)(param_4 + 8) = local_158;
    Mat::operator=((Mat *)(param_4 + 0x10),aMStack_150);
    Mat::operator=((Mat *)(param_4 + 0x70),aMStack_f0);
    Mat::operator=((Mat *)(param_4 + 0xd0),aMStack_90);
                    /* try { // try from 002ef914 to 003ef953 has its CatchHandler @ 002ef99c */
    *(undefined8 *)(param_4 + 0x138) = uStack_28;
    *(undefined8 *)(param_4 + 0x130) = local_30;
    *(undefined8 *)(param_4 + 0x140) = local_20;
    *(undefined8 *)(param_4 + 0x148) = uStack_18;
    *(undefined8 *)(param_4 + 0x150) = local_10;
    *(undefined8 *)(param_4 + 0x158) = uStack_8;
    MatExpr::~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    Mat::release((Mat *)&local_220);
                    /* catch() { ... } // from try @ 002ef878 with catch @ 002ef958 */
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
    if (*(long *)(param_1 + 0x20) != 0) {
      local_318 = *(undefined8 *)param_2;
                    /* try { // try from 002ef998 to 003ef99b has its CatchHandler @ 002ef80c */
      local_300 = *(undefined8 *)param_3;
                    /* catch() { ... } // from try @ 002ef850 with catch @ 002ef99c
                       catch() { ... } // from try @ 002ef914 with catch @ 002ef99c */
                    /* catch() { ... } // from try @ 002efa00 with catch @ 002ef9a4
                       catch() { ... } // from try @ 002efa8c with catch @ 002ef9a4
                       catch() { ... } // from try @ 002efd70 with catch @ 002ef9a4
                       catch() { ... } // from try @ 002eff38 with catch @ 002ef9a4
                       catch() { ... } // from try @ 002f0674 with catch @ 002ef9a4
                       catch() { ... } // from try @ 002f06ac with catch @ 002ef9a4
                       catch() { ... } // from try @ 002f06f4 with catch @ 002ef9a4 */
      Mat::Mat((Mat *)&local_160,(Mat *)(param_1 + 0x10),(Range *)&local_318,(Range *)&local_300);
      Mat::operator=((Mat *)(param_4 + 0x10),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
        fastFree(local_118);
      }
    }
    if (*(long *)(param_1 + 0x80) != 0) {
      local_2e0 = *(undefined8 *)param_2;
      local_280 = *(undefined8 *)param_3;
                    /* try { // try from 002efa00 to 003efa3b has its CatchHandler @ 002ef9a4 */
      Mat::Mat((Mat *)&local_160,(Mat *)(param_1 + 0x70),(Range *)&local_2e0,(Range *)&local_280);
      Mat::operator=((Mat *)(param_4 + 0x70),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
        fastFree(local_118);
      }
    }
    if (*(long *)(param_1 + 0xe0) != 0) {
      local_220 = *(undefined8 *)param_2;
      local_1c0 = *(undefined8 *)param_3;
      Mat::Mat((Mat *)&local_160,(Mat *)(param_1 + 0xd0),(Range *)&local_220,(Range *)&local_1c0);
      Mat::operator=((Mat *)(param_4 + 0xd0),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
                    /* try { // try from 002efa84 to 003efa87 has its CatchHandler @ 002f06e4 */
        fastFree(local_118);
      }
    }
  }
                    /* try { // try from 002efa8c to 003efaab has its CatchHandler @ 002ef9a4 */
  return;
}


==================================================================

### FUNC 002efe50 (1112 bytes) name=diag

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::diag(cv::MatExpr const&, int, cv::MatExpr&) const */

void __thiscall cv::MatOp::diag(MatOp *this,MatExpr *param_1,int param_2,MatExpr *param_3)

{
  int iVar1;
  char cVar2;
  undefined8 uStack_300;
  undefined8 uStack_2f8;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  undefined8 local_2c8;
  undefined8 local_2c0;
  undefined8 local_2b8;
  undefined8 local_2b0;
  undefined8 local_2a8;
  undefined8 *local_2a0;
  undefined8 *local_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [56];
  undefined1 *local_118;
  undefined1 auStack_110 [32];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  cVar2 = (**(code **)(*(long *)this + 0x10))();
  if (cVar2 == '\0') {
                    /* try { // try from 002f00a0 to 003f00a3 has its CatchHandler @ 002f063c */
    local_1d8 = &local_1d0;
    local_1e0 = &uStack_218;
    local_220 = DAT_002f0460;
    uStack_218 = 0;
    local_210 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&local_220,0xffffffff)
    ;
    Mat::diag((int)(Mat *)&local_220);
    uStack_2f8 = 0;
    uStack_300 = 0;
    local_298 = &local_290;
    local_238 = &local_230;
    local_270 = 0;
    local_268 = 0;
    uStack_278 = _UNK_002f0458;
    local_280 = _DAT_002f0450;
    local_240 = &uStack_278;
    local_260 = 0;
    uStack_2d8 = _UNK_002f0458;
    local_2e0 = _DAT_002f0450;
    local_258 = 0;
    uStack_288 = 0;
    local_290 = 0;
    local_250 = 0;
    uStack_2e8 = 0;
    local_2f0 = 0;
    local_248 = 0;
    local_2a0 = &uStack_2d8;
    uStack_228 = 0;
    local_230 = 0;
    local_2d0 = 0;
    local_2c8 = 0;
    local_2c0 = 0;
    local_2b8 = 0;
    local_2b0 = 0;
    local_2a8 = 0;
    MatExpr::MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531f80,0,(Mat *)&local_1c0,
                     (Mat *)&local_2e0,(Mat *)&local_280,1.0,1.0,(Scalar_ *)&uStack_300);
    *(undefined8 *)param_3 = local_160;
    *(undefined4 *)(param_3 + 8) = local_158;
    Mat::operator=((Mat *)(param_3 + 0x10),aMStack_150);
    Mat::operator=((Mat *)(param_3 + 0x70),aMStack_f0);
    Mat::operator=((Mat *)(param_3 + 0xd0),aMStack_90);
    *(undefined8 *)(param_3 + 0x138) = uStack_28;
    *(undefined8 *)(param_3 + 0x130) = local_30;
    *(undefined8 *)(param_3 + 0x140) = local_20;
    *(undefined8 *)(param_3 + 0x148) = uStack_18;
    *(undefined8 *)(param_3 + 0x150) = local_10;
    *(undefined8 *)(param_3 + 0x158) = uStack_8;
    MatExpr::~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
    Mat::release((Mat *)&local_2e0);
    if (local_298 != &local_290) {
      fastFree(local_298);
    }
    Mat::release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
  }
  else {
    local_238 = &local_230;
    local_1d8 = &local_1d0;
    local_178 = &local_170;
    local_240 = &uStack_278;
    local_1e0 = &uStack_218;
    uStack_278 = _UNK_002f0458;
    local_280 = _DAT_002f0450;
    local_270 = 0;
    uStack_218 = _UNK_002f0458;
    local_220 = _DAT_002f0450;
    local_268 = 0;
    uStack_1b8 = _UNK_002f0458;
    local_1c0 = _DAT_002f0450;
    local_260 = 0;
    local_180 = &uStack_1b8;
    local_258 = 0;
    local_250 = 0;
    local_248 = 0;
    local_210 = 0;
    uStack_228 = 0;
    local_230 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    local_1b0 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    local_1a8 = 0;
                    /* try { // try from 002eff30 to 003eff33 has its CatchHandler @ 002f069c */
    local_1a0 = 0;
    local_198 = 0;
                    /* try { // try from 002eff38 to 003eff9f has its CatchHandler @ 002ef9a4 */
    local_190 = 0;
    local_188 = 0;
    uStack_168 = 0;
    local_170 = 0;
    MatExpr::MatExpr((MatExpr *)&local_160,*(MatOp **)param_1,*(int *)(param_1 + 8),
                     (Mat *)&local_280,(Mat *)&local_220,(Mat *)&local_1c0,
                     *(double *)(param_1 + 0x130),*(double *)(param_1 + 0x138),
                     (Scalar_ *)(param_1 + 0x140));
    MatExpr::operator=(param_3,(MatExpr *)&local_160);
    MatExpr::~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
    iVar1 = (int)param_1;
    if (*(long *)(param_1 + 0x20) != 0) {
      Mat::diag(iVar1 + 0x10);
      Mat::operator=((Mat *)(param_3 + 0x10),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
        fastFree(local_118);
      }
    }
                    /* try { // try from 002f0004 to 003f0007 has its CatchHandler @ 002f0678 */
    if (*(long *)(param_1 + 0x80) != 0) {
                    /* try { // try from 002f0018 to 003f004f has its CatchHandler @ 002f063c */
      Mat::diag(iVar1 + 0x70);
      Mat::operator=((Mat *)(param_3 + 0x70),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
        fastFree(local_118);
      }
    }
    if (*(long *)(param_1 + 0xe0) != 0) {
      Mat::diag(iVar1 + 0xd0);
      Mat::operator=((Mat *)(param_3 + 0xd0),(Mat *)&local_160);
      Mat::release((Mat *)&local_160);
      if (local_118 != auStack_110) {
        fastFree(local_118);
      }
    }
  }
                    /* try { // try from 002f0098 to 003f009b has its CatchHandler @ 002f068c */
  return;
}


==================================================================

### FUNC 002f0470 (384 bytes) name=MatExpr

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatExpr::MatExpr(cv::Mat const&) */

void __thiscall cv::MatExpr::MatExpr(MatExpr *this,Mat *param_1)

{
  int *piVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  char cVar6;
  bool bVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  
  uVar2 = *(undefined4 *)param_1;
  uVar3 = *(undefined4 *)(param_1 + 4);
  uVar4 = *(undefined4 *)(param_1 + 8);
  uVar5 = *(undefined4 *)(param_1 + 0xc);
  uVar15 = *(undefined8 *)(param_1 + 0x10);
  uVar14 = *(undefined8 *)(param_1 + 0x18);
  uVar13 = *(undefined8 *)(param_1 + 0x20);
  uVar12 = *(undefined8 *)(param_1 + 0x28);
  *(undefined8 **)this = &DAT_00531f80;
  *(undefined4 *)(this + 0x10) = uVar2;
  lVar10 = *(long *)(param_1 + 0x38);
  uVar11 = *(undefined8 *)(param_1 + 0x30);
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x14) = uVar3;
  *(undefined4 *)(this + 0x18) = uVar4;
  *(undefined4 *)(this + 0x1c) = uVar5;
  *(undefined8 *)(this + 0x20) = uVar15;
  *(undefined8 *)(this + 0x28) = uVar14;
  *(undefined8 *)(this + 0x30) = uVar13;
  *(undefined8 *)(this + 0x38) = uVar12;
  *(undefined8 *)(this + 0x40) = uVar11;
  *(long *)(this + 0x48) = lVar10;
  *(MatExpr **)(this + 0x50) = this + 0x18;
  *(MatExpr **)(this + 0x58) = this + 0x60;
  *(undefined8 *)(this + 0x68) = 0;
  *(undefined8 *)(this + 0x60) = 0;
  if (lVar10 != 0) {
    piVar1 = (int *)(lVar10 + 0x14);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  if (*(int *)(param_1 + 4) < 3) {
    puVar9 = *(undefined8 **)(param_1 + 0x48);
    puVar8 = *(undefined8 **)(this + 0x58);
    *puVar8 = *puVar9;
    puVar8[1] = puVar9[1];
  }
  else {
    *(undefined4 *)(this + 0x14) = 0;
    Mat::copySize((Mat *)(this + 0x10),param_1);
  }
  *(undefined4 *)(this + 0x74) = 0;
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined4 *)(this + 0x70) = 0x42ff0000;
  *(undefined4 *)(this + 0x7c) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0xa0) = 0;
  *(undefined8 *)(this + 0xa8) = 0;
  *(MatExpr **)(this + 0xb0) = this + 0x78;
  *(MatExpr **)(this + 0xb8) = this + 0xc0;
  *(undefined8 *)(this + 200) = 0;
  *(undefined8 *)(this + 0xc0) = 0;
  *(undefined4 *)(this + 0xd0) = 0x42ff0000;
  *(undefined4 *)(this + 0xd4) = 0;
  *(undefined4 *)(this + 0xd8) = 0;
  *(undefined4 *)(this + 0xdc) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(undefined8 *)(this + 0x100) = 0;
  *(undefined8 *)(this + 0x108) = 0;
  *(MatExpr **)(this + 0x110) = this + 0xd8;
  *(MatExpr **)(this + 0x118) = this + 0x120;
  *(undefined8 *)(this + 0x128) = 0;
  *(undefined8 *)(this + 0x120) = 0;
  uVar11 = _DAT_002f05f0;
  *(undefined8 *)(this + 0x138) = _UNK_002f05f8;
  *(undefined8 *)(this + 0x130) = uVar11;
  *(undefined8 *)(this + 0x148) = 0;
  *(undefined8 *)(this + 0x140) = 0;
  *(undefined8 *)(this + 0x158) = 0;
  *(undefined8 *)(this + 0x150) = 0;
  return;
}


==================================================================

### FUNC 002f0600 (116 bytes) name=row

/* cv::MatExpr::row(int) const */

void cv::MatExpr::row(int param_1)

{
  int in_w1;
  long *plVar1;
  MatExpr *in_x8;
  undefined1 local_10 [4];
  int local_c;
  undefined4 local_8;
  undefined4 local_4;
  
  MatExpr(in_x8);
  plVar1 = *(long **)(ulong)(uint)param_1;
  local_c = in_w1 + 1;
                    /* catch() { ... } // from try @ 002f0018 with catch @ 002f063c
                       catch() { ... } // from try @ 002f00a0 with catch @ 002f063c */
  local_8 = 0x80000000;
  local_4 = 0x7fffffff;
  (**(code **)(*plVar1 + 0x20))(plVar1,(undefined8 *)(ulong)(uint)param_1,local_10,&local_8);
  return;
}


==================================================================

### FUNC 002f0688 (116 bytes) name=col

/* cv::MatExpr::col(int) const */

void cv::MatExpr::col(int param_1)

{
  int in_w1;
  long *plVar1;
  MatExpr *in_x8;
  undefined4 local_10;
  undefined4 local_c;
  undefined1 local_8 [4];
  int local_4;
  
                    /* catch() { ... } // from try @ 002f0098 with catch @ 002f068c */
                    /* catch() { ... } // from try @ 002eff30 with catch @ 002f069c */
  MatExpr(in_x8);
  plVar1 = *(long **)(ulong)(uint)param_1;
                    /* try { // try from 002f06ac to 003f06af has its CatchHandler @ 002ef9a4 */
                    /* catch() { ... } // from try @ 002efad0 with catch @ 002f06b0
                       catch() { ... } // from try @ 002efb2c with catch @ 002f06b0 */
  local_4 = in_w1 + 1;
  local_10 = 0x80000000;
  local_c = 0x7fffffff;
                    /* catch() { ... } // from try @ 002efb24 with catch @ 002f06d4 */
                    /* catch() { ... } // from try @ 002efa84 with catch @ 002f06e4 */
  (**(code **)(*plVar1 + 0x20))(plVar1,(undefined8 *)(ulong)(uint)param_1,&local_10,local_8);
                    /* try { // try from 002f06f4 to 003f06f7 has its CatchHandler @ 002ef9a4 */
  return;
}


==================================================================

### FUNC 002f0710 (300 bytes) name=diag

/* cv::MatExpr::diag(int) const */

void cv::MatExpr::diag(int param_1)

{
  undefined4 in_w1;
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)(ulong)(uint)param_1;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x28);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,(undefined8 *)(ulong)(uint)param_1,in_w1);
  return;
}


==================================================================

### FUNC 002f0850 (308 bytes) name=operator()

/* cv::MatExpr::TEMPNAMEPLACEHOLDERVALUE(cv::Range const&, cv::Range const&) const */

void cv::MatExpr::operator()(Range *param_1,Range *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_1;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x20);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,param_1,param_2);
  return;
}


==================================================================

### FUNC 002f0998 (128 bytes) name=operator()

/* cv::MatExpr::TEMPNAMEPLACEHOLDERVALUE(cv::Rect_<int> const&) const */

void __thiscall cv::MatExpr::operator()(MatExpr *this,Rect_ *param_1)

{
  MatExpr *in_x8;
  int local_10;
  int local_c;
  int local_8;
  int local_4;
  
  MatExpr(in_x8);
  local_10 = *(int *)(param_1 + 4);
  local_8 = *(int *)param_1;
  local_c = local_10 + *(int *)(param_1 + 0xc);
  local_4 = local_8 + *(int *)(param_1 + 8);
  (**(code **)(**(long **)this + 0x20))(*(long **)this,this,&local_10,&local_8);
  return;
}


==================================================================

### FUNC 002f0a30 (212 bytes) name=cross

/* cv::MatExpr::cross(cv::Mat const&) const */

void __thiscall cv::MatExpr::cross(MatExpr *this,Mat *param_1)

{
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f0b50;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)this + 0x18))(*(long **)this,this,(_InputArray *)&uStack_60,0xffffffff);
  Mat::cross((_InputArray *)&uStack_60);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f0b58 (212 bytes) name=dot

/* cv::MatExpr::dot(cv::Mat const&) const */

undefined1  [16] __thiscall cv::MatExpr::dot(MatExpr *this,Mat *param_1)

{
  undefined1 auVar1 [16];
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f0c78;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)this + 0x18))(*(long **)this,this,(Mat *)&uStack_60,0xffffffff);
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x1010000;
  local_70 = param_1;
  auVar1 = Mat::dot((Mat *)&uStack_60,(_InputArray *)local_78);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return auVar1;
}


==================================================================

### FUNC 002f0c80 (296 bytes) name=t

/* cv::MatExpr::t() const */

void cv::MatExpr::t(void)

{
  undefined8 *in_x0;
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = (long *)*in_x0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0xb0);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3);
  return;
}


==================================================================

### FUNC 002f0dc0 (608 bytes) name=inv

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatExpr::inv(int) const */

void cv::MatExpr::inv(int param_1)

{
  undefined8 *puVar1;
  long *plVar2;
  int in_w1;
  code *pcVar3;
  MatExpr *in_x8;
  undefined8 uStack_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  undefined8 *local_240;
  undefined8 *local_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 uStack_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  puVar1 = (undefined8 *)(ulong)(uint)param_1;
  MatExpr(in_x8);
  plVar2 = (long *)*puVar1;
  pcVar3 = *(code **)(*plVar2 + 0xc0);
  if (pcVar3 == MatOp::invert) {
    local_178 = &local_170;
    local_1a8 = 0;
    local_1a0 = 0;
    local_198 = 0;
    local_190 = 0;
    local_180 = &local_1b8;
    uStack_1c0 = DAT_002f10c0;
    local_188 = 0;
    local_1b0 = 0;
    local_168 = 0;
    local_1b8 = 0;
    local_170 = 0;
    (**(code **)(*plVar2 + 0x18))(plVar2,puVar1,(Mat *)&uStack_1c0,0xffffffff);
    uStack_298 = 0;
    uStack_2a0 = 0;
    local_1d8 = &local_1d0;
    local_238 = &local_230;
    uStack_1c8 = 0;
    local_1d0 = 0;
    uStack_218 = _UNK_002f10d8;
    local_220 = _DAT_002f10d0;
    uStack_278 = _UNK_002f10d8;
    local_280 = _DAT_002f10d0;
    local_1e0 = &uStack_218;
    uStack_228 = 0;
    local_230 = 0;
    local_240 = &uStack_278;
    uStack_288 = 0;
    local_290 = 0;
    local_210 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    local_270 = 0;
    local_268 = 0;
    local_260 = 0;
    local_258 = 0;
    local_250 = 0;
    local_248 = 0;
    MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531fb0,in_w1,(Mat *)&uStack_1c0,(Mat *)&local_220,
            (Mat *)&local_280,1.0,0.0,(Scalar_ *)&uStack_2a0);
    *(undefined8 *)in_x8 = local_160;
    *(undefined4 *)(in_x8 + 8) = local_158;
    Mat::operator=((Mat *)(in_x8 + 0x10),aMStack_150);
    Mat::operator=((Mat *)(in_x8 + 0x70),aMStack_f0);
    Mat::operator=((Mat *)(in_x8 + 0xd0),aMStack_90);
    *(undefined8 *)(in_x8 + 0x138) = uStack_28;
    *(undefined8 *)(in_x8 + 0x130) = local_30;
    *(undefined8 *)(in_x8 + 0x140) = local_20;
    *(undefined8 *)(in_x8 + 0x148) = uStack_18;
    *(undefined8 *)(in_x8 + 0x150) = local_10;
    *(undefined8 *)(in_x8 + 0x158) = uStack_8;
    ~MatExpr((MatExpr *)&local_160);
    Mat::release((Mat *)&local_280);
    if (local_238 != &local_230) {
      fastFree(local_238);
    }
    Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      fastFree(local_1d8);
    }
    Mat::release((Mat *)&uStack_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    return;
  }
  (*pcVar3)(plVar2,puVar1,in_w1);
  return;
}


==================================================================

### FUNC 002f10e0 (300 bytes) name=mul

/* cv::MatExpr::mul(cv::MatExpr const&, double) const */

void __thiscall cv::MatExpr::mul(MatExpr *this,MatExpr *param_1,double param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x88);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f1220 (132 bytes) name=mul

/* cv::MatExpr::mul(cv::Mat const&, double) const */

void cv::MatExpr::mul(Mat *param_1,double param_2)

{
  Mat *in_x1;
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr(in_x8);
  plVar1 = *(long **)param_1;
  pcVar2 = *(code **)(*plVar1 + 0x88);
  MatExpr(aMStack_160,in_x1);
  (*pcVar2)(param_2,plVar1,param_1,aMStack_160);
  ~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f12cc (116 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Mat const&) */

void __thiscall cv::operator+(cv *this,MatExpr *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)this;
  pcVar2 = *(code **)(*plVar1 + 0x68);
  MatExpr::MatExpr(aMStack_160,(Mat *)param_1);
  (*pcVar2)(plVar1,this,aMStack_160);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f1368 (116 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::MatExpr const&) */

void __thiscall cv::operator+(cv *this,Mat *param_1,MatExpr *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)param_1;
  pcVar2 = *(code **)(*plVar1 + 0x68);
  MatExpr::MatExpr(aMStack_160,(Mat *)this);
  (*pcVar2)(plVar1,param_1,aMStack_160);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f1404 (300 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator+(cv *this,MatExpr *param_1,Scalar_ *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x70);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f1544 (296 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::MatExpr const&) */

void __thiscall cv::operator+(cv *this,Scalar_ *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_1;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x70);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,param_1,this);
  return;
}


==================================================================

### FUNC 002f1680 (300 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::MatExpr const&) */

void __thiscall cv::operator+(cv *this,MatExpr *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x68);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f17c0 (116 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Mat const&) */

void __thiscall cv::operator-(cv *this,MatExpr *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)this;
  pcVar2 = *(code **)(*plVar1 + 0x78);
  MatExpr::MatExpr(aMStack_160,(Mat *)param_1);
  (*pcVar2)(plVar1,this,aMStack_160);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f185c (116 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::MatExpr const&) */

void __thiscall cv::operator-(cv *this,Mat *param_1,MatExpr *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)param_1;
  pcVar2 = *(code **)(*plVar1 + 0x78);
  MatExpr::MatExpr(aMStack_160,(Mat *)this);
  (*pcVar2)(plVar1,aMStack_160,param_1);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f18f8 (132 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator-(cv *this,MatExpr *param_1,Scalar_ *param_2)

{
  MatExpr *in_x8;
  double local_20;
  double local_18;
  double local_10;
  double local_8;
  
  MatExpr::MatExpr(in_x8);
  local_18 = -*(double *)(param_1 + 8);
  local_10 = -*(double *)(param_1 + 0x10);
  local_8 = -*(double *)(param_1 + 0x18);
  local_20 = -*(double *)param_1;
  (**(code **)(**(long **)this + 0x70))(*(long **)this,this,&local_20);
  return;
}


==================================================================

### FUNC 002f1990 (304 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::MatExpr const&) */

void __thiscall cv::operator-(cv *this,Scalar_ *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_1;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x80);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f1ad4 (300 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::MatExpr const&) */

void __thiscall cv::operator-(cv *this,MatExpr *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x78);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f1c14 (100 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&) */

void __thiscall cv::operator-(cv *this,MatExpr *param_1)

{
  MatExpr *in_x8;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  (**(code **)(**(long **)this + 0x80))(*(long **)this,&local_20);
  return;
}


==================================================================

### FUNC 002f1c8c (332 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator*(cv *this,Mat *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  MatExpr::MatExpr(in_x8);
  local_180 = &local_1b8;
  local_178 = &local_170;
  local_168 = 0;
  local_170 = 0;
  local_1c0 = 0x42ff0000;
  local_1bc = 0;
  local_1b8 = 0;
  local_1b4 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  local_1e0 = 0;
  local_1d8 = 0;
  local_1d0 = 0;
  local_1c8 = 0;
  MatExpr::MatExpr((MatExpr *)&local_160,(MatOp *)&DAT_00531f88,0,(Mat *)this,param_1,
                   (Mat *)&local_1c0,1.0,1.0,(Scalar_ *)&local_1e0);
  *(undefined8 *)in_x8 = local_160;
  *(undefined4 *)(in_x8 + 8) = local_158;
  Mat::operator=((Mat *)(in_x8 + 0x10),aMStack_150);
  Mat::operator=((Mat *)(in_x8 + 0x70),aMStack_f0);
  Mat::operator=((Mat *)(in_x8 + 0xd0),aMStack_90);
  *(undefined8 *)(in_x8 + 0x138) = uStack_28;
  *(undefined8 *)(in_x8 + 0x130) = local_30;
  *(undefined8 *)(in_x8 + 0x140) = local_20;
  *(undefined8 *)(in_x8 + 0x148) = uStack_18;
  *(undefined8 *)(in_x8 + 0x150) = local_10;
  *(undefined8 *)(in_x8 + 0x158) = uStack_8;
  MatExpr::~MatExpr((MatExpr *)&local_160);
  Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002f1e24 (116 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Mat const&) */

void __thiscall cv::operator*(cv *this,MatExpr *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)this;
  pcVar2 = *(code **)(*plVar1 + 0xb8);
  MatExpr::MatExpr(aMStack_160,(Mat *)param_1);
  (*pcVar2)(plVar1,this,aMStack_160);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f1ec0 (116 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::MatExpr const&) */

void __thiscall cv::operator*(cv *this,Mat *param_1,MatExpr *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)param_1;
  pcVar2 = *(code **)(*plVar1 + 0xb8);
  MatExpr::MatExpr(aMStack_160,(Mat *)this);
  (*pcVar2)(plVar1,aMStack_160,param_1);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f1f5c (296 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, double) */

void cv::operator*(MatExpr *param_1,double param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_1;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x90);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,param_1);
  return;
}


==================================================================

### FUNC 002f2098 (296 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::MatExpr const&) */

void cv::operator*(double param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_2;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x90);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,param_2);
  return;
}


==================================================================

### FUNC 002f21d4 (300 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::MatExpr const&) */

void __thiscall cv::operator*(cv *this,MatExpr *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0xb8);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f2314 (120 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::Mat const&) */

void __thiscall cv::operator/(cv *this,MatExpr *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)this;
  pcVar2 = *(code **)(*plVar1 + 0x98);
  MatExpr::MatExpr(aMStack_160,(Mat *)param_1);
  (*pcVar2)(0x3ff0000000000000,plVar1,this,aMStack_160);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f23b4 (120 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::MatExpr const&) */

void __thiscall cv::operator/(cv *this,Mat *param_1,MatExpr *param_2)

{
  MatExpr *in_x8;
  long *plVar1;
  code *pcVar2;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  plVar1 = *(long **)param_1;
  pcVar2 = *(code **)(*plVar1 + 0x98);
  MatExpr::MatExpr(aMStack_160,(Mat *)this);
  (*pcVar2)(0x3ff0000000000000,plVar1,aMStack_160,param_1);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f2454 (92 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, double) */

void __thiscall cv::operator/(cv *this,MatExpr *param_1,double param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  (**(code **)(**(long **)this + 0x90))(1.0 / param_2,*(long **)this);
  return;
}


==================================================================

### FUNC 002f24c4 (296 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::MatExpr const&) */

void cv::operator/(double param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)param_2;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0xa0);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,param_2);
  return;
}


==================================================================

### FUNC 002f2600 (304 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::MatExpr const&, cv::MatExpr const&) */

void __thiscall cv::operator/(cv *this,MatExpr *param_1,MatExpr *param_2)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0x98);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(0x3ff0000000000000,plVar3,this,param_1);
  return;
}


==================================================================

### FUNC 002f2744 (296 bytes) name=abs

/* cv::abs(cv::MatExpr const&) */

void __thiscall cv::abs(cv *this,MatExpr *param_1)

{
  long lVar1;
  code *pcVar2;
  long *plVar3;
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  plVar3 = *(long **)this;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  lVar1 = *plVar3;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  pcVar2 = *(code **)(lVar1 + 0xa8);
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x26] = 0;
  in_x8[0x27] = 0;
  in_x8[0x28] = 0;
  in_x8[0x29] = 0;
  in_x8[0x2a] = 0;
  in_x8[0x2b] = 0;
  (*pcVar2)(plVar3,this);
  return;
}


==================================================================

### FUNC 002f2880 (608 bytes) name=size

/* cv::MatExpr::size() const */

void cv::MatExpr::size(void)

{
  long lVar1;
  undefined4 uVar2;
  int iVar3;
  long *in_x0;
  long lVar4;
  long lVar5;
  code *pcVar6;
  long *in_x8;
  undefined8 *puVar7;
  
  puVar7 = (undefined8 *)*in_x0;
  if ((puVar7 == &DAT_00531fa0) || (puVar7 == &DAT_00531fb0)) {
    *in_x8 = in_x0[3];
  }
  else if (puVar7 == &DAT_00531f88) {
    lVar4 = in_x0[3];
    *(undefined4 *)in_x8 = *(undefined4 *)((long)in_x0 + 0x7c);
    *(int *)((long)in_x8 + 4) = (int)lVar4;
  }
  else {
    if (puVar7 == &DAT_00531f70) {
      uVar2 = *(undefined4 *)((long)in_x0 + 0x1c);
      *(undefined4 *)in_x8 = *(undefined4 *)((long)in_x0 + 0x7c);
      *(undefined4 *)((long)in_x8 + 4) = uVar2;
      return;
    }
    if (((DAT_00531f78 & 1) == 0) && (iVar3 = __cxa_guard_acquire(&DAT_00531f78), iVar3 != 0)) {
      MatOp::MatOp((MatOp *)&DAT_00531f98);
      DAT_00531f98 = &PTR_FUN_004fc530;
      __cxa_guard_release(&DAT_00531f78);
      __cxa_atexit(FUN_002eebd4,&DAT_00531f98,&DAT_00502000);
    }
    if ((undefined ***)puVar7 == &DAT_00531f98) {
LAB_002f2940:
      uVar2 = ((undefined4 *)in_x0[10])[1];
      *(undefined4 *)((long)in_x8 + 4) = *(undefined4 *)in_x0[10];
      *(undefined4 *)in_x8 = uVar2;
      return;
    }
    if ((long *)*in_x0 == (long *)0x0) {
      *(undefined4 *)in_x8 = 0;
      *(undefined4 *)((long)in_x8 + 4) = 0;
      return;
    }
    pcVar6 = *(code **)(*(long *)*in_x0 + 200);
    if (pcVar6 == MatOp::size) {
      if (in_x0[4] != 0) {
        if (*(int *)((long)in_x0 + 0x14) < 3) {
          lVar5 = (long)*(int *)((long)in_x0 + 0x1c) * (long)(int)in_x0[3];
        }
        else {
          lVar4 = 0;
          lVar5 = 1;
          do {
            lVar1 = lVar4 * 4;
            lVar4 = lVar4 + 1;
            lVar5 = lVar5 * *(int *)(in_x0[10] + lVar1);
          } while ((int)lVar4 < *(int *)((long)in_x0 + 0x14));
        }
        if (lVar5 != 0) goto LAB_002f2940;
      }
      if (in_x0[0x10] != 0) {
        if (*(int *)((long)in_x0 + 0x74) < 3) {
          lVar5 = (long)*(int *)((long)in_x0 + 0x7c) * (long)(int)in_x0[0xf];
        }
        else {
          lVar4 = 0;
          lVar5 = 1;
          do {
            lVar1 = lVar4 * 4;
            lVar4 = lVar4 + 1;
            lVar5 = lVar5 * *(int *)(in_x0[0x16] + lVar1);
          } while ((int)lVar4 < *(int *)((long)in_x0 + 0x74));
        }
        if (lVar5 != 0) {
          uVar2 = ((undefined4 *)in_x0[0x22])[1];
          *(undefined4 *)((long)in_x8 + 4) = *(undefined4 *)in_x0[0x22];
          *(undefined4 *)in_x8 = uVar2;
          return;
        }
      }
      uVar2 = ((undefined4 *)in_x0[0x16])[1];
      *(undefined4 *)((long)in_x8 + 4) = *(undefined4 *)in_x0[0x16];
      *(undefined4 *)in_x8 = uVar2;
    }
    else {
      (*pcVar6)();
    }
  }
  return;
}


==================================================================

### FUNC 002f2af4 (464 bytes) name=type

/* cv::MatExpr::type() const */

ulong __thiscall cv::MatExpr::type(MatExpr *this)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  undefined8 *puVar7;
  
  puVar7 = *(undefined8 **)this;
                    /* try { // try from 002f2ba0 to 003f2ba3 has its CatchHandler @ 002f2acc */
  if (((DAT_00531f78 & 1) == 0) && (iVar2 = __cxa_guard_acquire(&DAT_00531f78), iVar2 != 0)) {
    MatOp::MatOp((MatOp *)&DAT_00531f98);
    DAT_00531f98 = &PTR_FUN_004fc530;
    __cxa_guard_release(&DAT_00531f78);
                    /* try { // try from 002f2bd4 to 003f2bd7 has its CatchHandler @ 002f2e38 */
    __cxa_atexit(FUN_002eebd4,&DAT_00531f98,&DAT_00502000);
                    /* try { // try from 002f2bdc to 003f2bdf has its CatchHandler @ 002f2acc */
  }
  if ((undefined ***)puVar7 == &DAT_00531f98) {
LAB_002f2b80:
    return (ulong)(*(uint *)(this + 0x10) & 0xfff);
  }
  plVar3 = *(long **)this;
  if (plVar3 == &DAT_00531f90) {
    return 0;
  }
  if (plVar3 == (long *)0x0) {
    return 0xffffffff;
  }
  if (*(code **)(*plVar3 + 0xd0) != MatOp::type) {
    uVar5 = (**(code **)(*plVar3 + 0xd0))(plVar3,this);
    return uVar5;
  }
  if (*(long *)(this + 0x20) != 0) {
    if (*(int *)(this + 0x14) < 3) {
      lVar6 = (long)*(int *)(this + 0x1c) * (long)*(int *)(this + 0x18);
    }
    else {
      lVar4 = 0;
      lVar6 = 1;
      do {
        lVar1 = lVar4 * 4;
        lVar4 = lVar4 + 1;
        lVar6 = lVar6 * *(int *)(*(long *)(this + 0x50) + lVar1);
      } while ((int)lVar4 < *(int *)(this + 0x14));
    }
    if (lVar6 != 0) goto LAB_002f2b80;
  }
  if (*(long *)(this + 0x80) != 0) {
    if (*(int *)(this + 0x74) < 3) {
      lVar4 = (long)*(int *)(this + 0x7c) * (long)*(int *)(this + 0x78);
    }
    else {
      lVar6 = 0;
      lVar4 = 1;
      do {
        lVar1 = lVar6 * 4;
        lVar6 = lVar6 + 1;
        lVar4 = lVar4 * *(int *)(*(long *)(this + 0xb0) + lVar1);
      } while ((int)lVar6 < *(int *)(this + 0x74));
    }
    if (lVar4 != 0) {
      return (ulong)(*(uint *)(this + 0xd0) & 0xfff);
    }
  }
  return (ulong)(*(uint *)(this + 0x70) & 0xfff);
}


==================================================================

### FUNC 002f2ce0 (444 bytes) name=FUN_002f2ce0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f2ce0(double param_1,double param_2,undefined8 *param_3,Mat *param_4,Mat *param_5,
                 Scalar_ *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 *puVar5;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  undefined4 local_f0;
  int local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  undefined8 uStack_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  long lStack_b8;
  undefined8 *local_a8;
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_178 = &local_170;
  uStack_1b8 = _UNK_002f2ee8;
  local_1c0 = _DAT_002f2ee0;
  local_180 = &uStack_1b8;
  uStack_168 = 0;
  local_170 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531fa8,0,param_4,param_5,(Mat *)&local_1c0,
             param_1,param_2,param_6);
  *param_3 = local_160;
  *(undefined4 *)(param_3 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_3 + 2),aMStack_150);
  if (lStack_b8 != 0) {
    piVar1 = (int *)(lStack_b8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  cv::Mat::release((Mat *)(param_3 + 0xe));
  *(undefined4 *)(param_3 + 0xe) = local_f0;
  if ((*(int *)((long)param_3 + 0x74) < 3) && (local_ec < 3)) {
    puVar5 = (undefined8 *)param_3[0x17];
    *(int *)((long)param_3 + 0x74) = local_ec;
    *(undefined4 *)(param_3 + 0xf) = local_e8;
    uVar4 = *local_a8;
    *(undefined4 *)((long)param_3 + 0x7c) = local_e4;
    *puVar5 = uVar4;
    puVar5[1] = local_a8[1];
  }
  else {
    cv::Mat::copySize((Mat *)(param_3 + 0xe),(Mat *)&local_f0);
  }
  param_3[0x11] = uStack_d8;
  param_3[0x10] = local_e0;
  param_3[0x13] = uStack_c8;
  param_3[0x12] = local_d0;
  param_3[0x15] = lStack_b8;
  param_3[0x14] = local_c0;
  cv::Mat::operator=((Mat *)(param_3 + 0x1a),aMStack_90);
  param_3[0x27] = uStack_28;
  param_3[0x26] = local_30;
  param_3[0x28] = local_20;
  param_3[0x29] = uStack_18;
  param_3[0x2a] = local_10;
  param_3[0x2b] = uStack_8;
                    /* catch() { ... } // from try @ 002f2bd4 with catch @ 002f2e38 */
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
                    /* try { // try from 002f2e48 to 003f2e4b has its CatchHandler @ 002f2acc */
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002f2ef0 (288 bytes) name=add

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::add(cv::MatExpr const&, cv::Scalar_<double> const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::add(MatOp *this,MatExpr *param_1,Scalar_ *param_2,MatExpr *param_3)

{
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_48 = 0;
  local_40 = 0;
  local_18 = &local_10;
  local_20 = &local_58;
  uStack_60 = DAT_002f3060;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  uStack_b8 = _UNK_002f3078;
  local_c0 = _DAT_002f3070;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  FUN_002f2ce0(0x3ff0000000000000,0,param_3,(Mat *)&uStack_60,(Mat *)&local_c0,param_2);
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3080 (292 bytes) name=subtract

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::subtract(cv::Scalar_<double> const&, cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::subtract(MatOp *this,Scalar_ *param_1,MatExpr *param_2,MatExpr *param_3)

{
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f31f8;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_2 + 0x18))(*(long **)param_2,param_2,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  uStack_b8 = _UNK_002f3208;
  local_c0 = _DAT_002f3200;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  FUN_002f2ce0(0xbff0000000000000,0,param_3,(Mat *)&uStack_60,(Mat *)&local_c0,param_1);
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3210 (596 bytes) name=add

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::add(cv::MatExpr const&, cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::add(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  long *plVar1;
  MatOp *pMVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  double local_e0;
  double local_d8;
  double local_d0;
  double dStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar2 = *(MatOp **)param_2;
  if (pMVar2 == this) {
    local_d8 = 0.0;
    local_e0 = 0.0;
    local_78 = &local_70;
    local_18 = &local_10;
    plVar1 = *(long **)param_1;
    uStack_68 = 0;
    local_70 = 0;
    uStack_8 = 0;
    local_10 = 0;
    dStack_c8 = 0.0;
    local_d0 = 0.0;
    local_20 = &uStack_58;
    uStack_b8 = _UNK_002f34b8;
    local_c0 = _DAT_002f34b0;
    local_80 = &uStack_b8;
    uStack_58 = _UNK_002f34b8;
    local_60 = _DAT_002f34b0;
    local_b0 = 0;
    local_a8 = 0;
    local_a0 = 0;
    local_98 = 0;
    local_90 = 0;
    local_88 = 0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    if ((plVar1 == &DAT_00531fa8) &&
       ((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)))) {
      Mat::operator=((Mat *)&local_c0,(Mat *)(param_1 + 0x10));
      uVar4 = *(undefined8 *)(param_1 + 0x130);
      local_e0 = *(double *)(param_1 + 0x140);
      local_d8 = *(double *)(param_1 + 0x148);
      local_d0 = *(double *)(param_1 + 0x150);
      dStack_c8 = *(double *)(param_1 + 0x158);
    }
    else {
      (**(code **)(*plVar1 + 0x18))(plVar1,param_1,(Mat *)&local_c0,0xffffffff);
      uVar4 = 0x3ff0000000000000;
    }
    plVar1 = *(long **)param_2;
    if ((plVar1 == &DAT_00531fa8) &&
       ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
      Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
      local_e0 = local_e0 + *(double *)(param_2 + 0x140);
      local_d8 = local_d8 + *(double *)(param_2 + 0x148);
      local_d0 = local_d0 + *(double *)(param_2 + 0x150);
      dStack_c8 = dStack_c8 + *(double *)(param_2 + 0x158);
      uVar3 = *(undefined8 *)(param_2 + 0x130);
    }
    else {
      (**(code **)(*plVar1 + 0x18))(plVar1,param_2,(Mat *)&local_60,0xffffffff);
      uVar3 = 0x3ff0000000000000;
    }
    FUN_002f2ce0(uVar4,uVar3,param_3,(Mat *)&local_c0,(Mat *)&local_60,&local_e0);
    Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    Mat::release((Mat *)&local_c0);
    if (local_78 != &local_70) {
      fastFree(local_78);
      return;
    }
  }
  else {
    (**(code **)(*(long *)pMVar2 + 0x68))(pMVar2);
  }
  return;
}


==================================================================

### FUNC 002f34c0 (596 bytes) name=subtract

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::subtract(cv::MatExpr const&, cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::subtract(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3)

{
  long *plVar1;
  MatOp *pMVar2;
  double dVar3;
  undefined8 uVar4;
  double local_e0;
  double local_d8;
  double local_d0;
  double dStack_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar2 = *(MatOp **)param_2;
  if (pMVar2 == this) {
    local_d8 = 0.0;
    local_e0 = 0.0;
    local_78 = &local_70;
    local_18 = &local_10;
    plVar1 = *(long **)param_1;
    uStack_68 = 0;
    local_70 = 0;
    uStack_8 = 0;
    local_10 = 0;
    dStack_c8 = 0.0;
    local_d0 = 0.0;
    local_80 = &uStack_b8;
    uStack_b8 = _UNK_002f3768;
    local_c0 = _DAT_002f3760;
    local_20 = &uStack_58;
    uStack_58 = _UNK_002f3768;
    local_60 = _DAT_002f3760;
    local_b0 = 0;
    local_a8 = 0;
    local_a0 = 0;
    local_98 = 0;
    local_90 = 0;
    local_88 = 0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    if ((plVar1 == &DAT_00531fa8) &&
       ((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)))) {
      Mat::operator=((Mat *)&local_c0,(Mat *)(param_1 + 0x10));
      uVar4 = *(undefined8 *)(param_1 + 0x130);
      local_e0 = *(double *)(param_1 + 0x140);
      local_d8 = *(double *)(param_1 + 0x148);
      local_d0 = *(double *)(param_1 + 0x150);
      dStack_c8 = *(double *)(param_1 + 0x158);
    }
    else {
      (**(code **)(*plVar1 + 0x18))(plVar1,param_1,(Mat *)&local_c0,0xffffffff);
      uVar4 = 0x3ff0000000000000;
    }
    plVar1 = *(long **)param_2;
    if ((plVar1 == &DAT_00531fa8) &&
       ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
      Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
      local_e0 = local_e0 - *(double *)(param_2 + 0x140);
      local_d8 = local_d8 - *(double *)(param_2 + 0x148);
      local_d0 = local_d0 - *(double *)(param_2 + 0x150);
      dStack_c8 = dStack_c8 - *(double *)(param_2 + 0x158);
      dVar3 = -*(double *)(param_2 + 0x130);
    }
    else {
      (**(code **)(*plVar1 + 0x18))(plVar1,param_2,(Mat *)&local_60,0xffffffff);
      dVar3 = -1.0;
    }
    FUN_002f2ce0(uVar4,dVar3,param_3,(Mat *)&local_c0,(Mat *)&local_60,&local_e0);
    Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    Mat::release((Mat *)&local_c0);
    if (local_78 != &local_70) {
      fastFree(local_78);
      return;
    }
  }
  else {
    (**(code **)(*(long *)pMVar2 + 0x78))(pMVar2);
  }
  return;
}


==================================================================

### FUNC 002f3770 (304 bytes) name=multiply

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::multiply(cv::MatExpr const&, double, cv::MatExpr&) const */

void __thiscall cv::MatOp::multiply(MatOp *this,MatExpr *param_1,double param_2,MatExpr *param_3)

{
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f38f0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_b8 = _UNK_002f3908;
  local_c0 = _DAT_002f3900;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  uStack_68 = 0;
  local_70 = 0;
  local_88 = 0;
  FUN_002f2ce0(param_2,0,param_3,(Mat *)&uStack_60,(Mat *)&local_c0);
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3910 (552 bytes) name=FUN_002f3910

void FUN_002f3910(double param_1,MatOp *param_2,MatExpr *param_3,MatExpr *param_4)

{
  Mat *pMVar1;
  int *piVar2;
  int iVar3;
  undefined4 uVar4;
  char cVar5;
  bool bVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  double dVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  
  iVar3 = *(int *)(param_3 + 8);
  if ((iVar3 != 0x2f) && (iVar3 != 0x2a)) {
    cv::MatOp::multiply(param_2,param_3,param_1,param_4);
    return;
  }
  pMVar1 = (Mat *)(param_4 + 0x10);
  *(undefined8 *)param_4 = *(undefined8 *)param_3;
  *(int *)(param_4 + 8) = iVar3;
  if (pMVar1 != (Mat *)(param_3 + 0x10)) {
    if (*(long *)(param_3 + 0x48) != 0) {
      piVar2 = (int *)(*(long *)(param_3 + 0x48) + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0x10) = *(undefined4 *)(param_3 + 0x10);
    if ((*(int *)(param_4 + 0x14) < 3) && (iVar3 = *(int *)(param_3 + 0x14), iVar3 < 3)) {
      puVar8 = *(undefined8 **)(param_3 + 0x58);
      puVar7 = *(undefined8 **)(param_4 + 0x58);
      uVar4 = *(undefined4 *)(param_3 + 0x18);
      *(undefined4 *)(param_4 + 0x1c) = *(undefined4 *)(param_3 + 0x1c);
      *(int *)(param_4 + 0x14) = iVar3;
      *(undefined4 *)(param_4 + 0x18) = uVar4;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0x10));
    }
    uVar14 = *(undefined8 *)(param_3 + 0x20);
    uVar13 = *(undefined8 *)(param_3 + 0x38);
    uVar12 = *(undefined8 *)(param_3 + 0x30);
    uVar11 = *(undefined8 *)(param_3 + 0x48);
    uVar9 = *(undefined8 *)(param_3 + 0x40);
    *(undefined8 *)(param_4 + 0x28) = *(undefined8 *)(param_3 + 0x28);
    *(undefined8 *)(param_4 + 0x20) = uVar14;
    *(undefined8 *)(param_4 + 0x38) = uVar13;
    *(undefined8 *)(param_4 + 0x30) = uVar12;
    *(undefined8 *)(param_4 + 0x48) = uVar11;
    *(undefined8 *)(param_4 + 0x40) = uVar9;
  }
  pMVar1 = (Mat *)(param_4 + 0xd0);
  cv::Mat::operator=((Mat *)(param_4 + 0x70),(Mat *)(param_3 + 0x70));
  if (pMVar1 != (Mat *)(param_3 + 0xd0)) {
    if (*(long *)(param_3 + 0x108) != 0) {
      piVar2 = (int *)(*(long *)(param_3 + 0x108) + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    cv::Mat::release(pMVar1);
    *(undefined4 *)(param_4 + 0xd0) = *(undefined4 *)(param_3 + 0xd0);
    if ((*(int *)(param_4 + 0xd4) < 3) && (iVar3 = *(int *)(param_3 + 0xd4), iVar3 < 3)) {
      puVar8 = *(undefined8 **)(param_3 + 0x118);
      puVar7 = *(undefined8 **)(param_4 + 0x118);
      uVar4 = *(undefined4 *)(param_3 + 0xd8);
      *(undefined4 *)(param_4 + 0xdc) = *(undefined4 *)(param_3 + 0xdc);
      *(int *)(param_4 + 0xd4) = iVar3;
      *(undefined4 *)(param_4 + 0xd8) = uVar4;
      *puVar7 = *puVar8;
      puVar7[1] = puVar8[1];
    }
    else {
      cv::Mat::copySize(pMVar1,(Mat *)(param_3 + 0xd0));
    }
    uVar14 = *(undefined8 *)(param_3 + 0xe0);
    uVar13 = *(undefined8 *)(param_3 + 0xf8);
    uVar12 = *(undefined8 *)(param_3 + 0xf0);
    uVar11 = *(undefined8 *)(param_3 + 0x108);
    uVar9 = *(undefined8 *)(param_3 + 0x100);
    *(undefined8 *)(param_4 + 0xe8) = *(undefined8 *)(param_3 + 0xe8);
    *(undefined8 *)(param_4 + 0xe0) = uVar14;
    *(undefined8 *)(param_4 + 0xf8) = uVar13;
    *(undefined8 *)(param_4 + 0xf0) = uVar12;
    *(undefined8 *)(param_4 + 0x108) = uVar11;
    *(undefined8 *)(param_4 + 0x100) = uVar9;
  }
  dVar10 = *(double *)(param_3 + 0x130);
  uVar9 = *(undefined8 *)(param_3 + 0x140);
  uVar11 = *(undefined8 *)(param_3 + 0x148);
  *(undefined8 *)(param_4 + 0x138) = *(undefined8 *)(param_3 + 0x138);
  *(undefined8 *)(param_4 + 0x140) = uVar9;
  *(undefined8 *)(param_4 + 0x148) = uVar11;
  uVar9 = *(undefined8 *)(param_3 + 0x158);
  *(undefined8 *)(param_4 + 0x150) = *(undefined8 *)(param_3 + 0x150);
  *(undefined8 *)(param_4 + 0x158) = uVar9;
  *(double *)(param_4 + 0x130) = param_1 * dVar10;
  return;
}


==================================================================

### FUNC 002f3b38 (180 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator+(cv *this,Mat *param_1,Scalar_ *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(0x3ff0000000000000,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3c28 (180 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::Mat const&) */

void __thiscall cv::operator+(cv *this,Scalar_ *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(0x3ff0000000000000,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3d18 (180 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::Mat const&) */

void __thiscall cv::operator-(cv *this,Scalar_ *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(0xbff0000000000000,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3e08 (100 bytes) name=operator+

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator+(cv *this,Mat *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f2ce0(0x3ff0000000000000,0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f3e80 (100 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator-(cv *this,Mat *param_1,Mat *param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f2ce0(0x3ff0000000000000,0xbff0000000000000);
  return;
}


==================================================================

### FUNC 002f3ef8 (196 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&) */

void __thiscall cv::operator-(cv *this,Mat *param_1)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(0xbff0000000000000,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f3ff8 (200 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void __thiscall cv::operator*(cv *this,Mat *param_1,double param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(param_2,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f40fc (200 bytes) name=operator*

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void __thiscall cv::operator*(cv *this,double param_1,Mat *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(param_1,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f4200 (208 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void __thiscall cv::operator/(cv *this,Mat *param_1,double param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(1.0 / param_2,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f4310 (532 bytes) name=FUN_002f4310

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f4310(undefined8 param_1,long param_2,undefined8 *param_3)

{
  undefined8 *puVar1;
  undefined8 uStack_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 uStack_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 *local_120;
  undefined8 *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (*(double *)(param_2 + 0x130) == 1.0) {
    uStack_238 = 0;
    uStack_240 = 0;
    local_178 = &local_170;
    local_1d8 = &local_1d0;
    local_1b0 = 0;
    uStack_1a8 = 0;
    uStack_1c8 = 0;
    local_1d0 = 0;
    uStack_1b8 = _UNK_002f45b8;
    local_1c0 = _DAT_002f45b0;
    uStack_168 = 0;
    local_170 = 0;
    uStack_218 = _UNK_002f45b8;
    local_220 = _DAT_002f45b0;
    uStack_228 = 0;
    local_230 = 0;
    local_180 = &uStack_1b8;
    local_1e0 = &uStack_218;
    local_1a0 = 0;
    local_198 = 0;
    local_190 = 0;
    local_188 = 0;
    local_210 = 0;
    local_208 = 0;
    local_200 = 0;
    local_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    cv::MatExpr::MatExpr
              ((MatExpr *)&local_160,(MatOp *)&DAT_00531f80,0,(Mat *)(param_2 + 0x10),
               (Mat *)&local_1c0,(Mat *)&local_220,1.0,0.0,(Scalar_ *)&uStack_240);
    *param_3 = local_160;
    *(undefined4 *)(param_3 + 1) = (undefined4)uStack_158;
    cv::Mat::operator=((Mat *)(param_3 + 2),(Mat *)&local_150);
    cv::Mat::operator=((Mat *)(param_3 + 0xe),aMStack_f0);
    cv::Mat::operator=((Mat *)(param_3 + 0x1a),aMStack_90);
    param_3[0x27] = uStack_28;
    param_3[0x26] = local_30;
    param_3[0x28] = local_20;
    param_3[0x29] = uStack_18;
    param_3[0x2a] = local_10;
    param_3[0x2b] = uStack_8;
    cv::MatExpr::~MatExpr((MatExpr *)&local_160);
    cv::Mat::release((Mat *)&local_220);
    if (local_1d8 != &local_1d0) {
      cv::fastFree(local_1d8);
    }
    cv::Mat::release((Mat *)&local_1c0);
    puVar1 = local_178;
    if (local_178 == &local_170) {
      return;
    }
  }
  else {
    local_118 = &local_110;
    uStack_1b8 = 0;
    local_1c0 = 0;
    local_150 = 0;
    local_120 = &uStack_158;
    local_148 = 0;
    local_140 = 0;
    local_138 = 0;
    uStack_1a8 = 0;
    local_1b0 = 0;
    local_130 = 0;
    local_128 = 0;
    uStack_158 = _UNK_002f45b8;
    local_160 = _DAT_002f45b0;
    uStack_108 = 0;
    local_110 = 0;
    FUN_002f2ce0(*(double *)(param_2 + 0x130),0,param_3,param_2 + 0x10,(Mat *)&local_160);
    cv::Mat::release((Mat *)&local_160);
    puVar1 = local_118;
    if (local_118 == &local_110) {
      return;
    }
  }
  cv::fastFree(puVar1);
  return;
}


==================================================================

### FUNC 002f45c0 (228 bytes) name=operator-

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator-(cv *this,Mat *param_1,Scalar_ *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f2ce0(0x3ff0000000000000,0);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f46e0 (312 bytes) name=FUN_002f46e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f46e0(double param_1,undefined8 *param_2,char param_3,Mat *param_4,Mat *param_5)

{
  double dVar1;
  undefined8 uStack_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_178 = &local_170;
  local_180 = &uStack_1b8;
  uStack_168 = 0;
  local_170 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  uStack_1b8 = _UNK_002f4858;
  local_1c0 = _DAT_002f4850;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  dVar1 = 1.0;
  if (*(long *)(param_5 + 0x10) == 0) {
    dVar1 = 0.0;
  }
  uStack_1d8 = 0;
  uStack_1e0 = 0;
  uStack_1c8 = 0;
  local_1d0 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531fb8,(int)param_3,param_4,param_5,
             (Mat *)&local_1c0,param_1,dVar1,(Scalar_ *)&uStack_1e0);
  *param_2 = local_160;
  *(undefined4 *)(param_2 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_2 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_2 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_2 + 0x1a),aMStack_90);
  param_2[0x27] = uStack_28;
  param_2[0x26] = local_30;
  param_2[0x28] = local_20;
  param_2[0x29] = uStack_18;
  param_2[0x2a] = local_10;
  param_2[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002f4860 (696 bytes) name=multiply

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::multiply(cv::MatExpr const&, cv::MatExpr const&, cv::MatExpr&, double) const */

void __thiscall
cv::MatOp::multiply(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3,double param_4)

{
  char cVar1;
  undefined8 uVar2;
  MatOp *pMVar3;
  long *plVar4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar3 = *(MatOp **)param_2;
  if (pMVar3 == this) {
    local_78 = &local_70;
    local_18 = &local_10;
    plVar4 = *(long **)param_1;
    uStack_68 = 0;
    local_70 = 0;
    uStack_8 = 0;
    local_10 = 0;
    local_80 = &uStack_b8;
    local_20 = &uStack_58;
    uStack_b8 = _UNK_002f4b78;
    local_c0 = _DAT_002f4b70;
    local_b0 = 0;
    uStack_58 = _UNK_002f4b78;
    local_60 = _DAT_002f4b70;
    local_a8 = 0;
    local_a0 = 0;
    local_98 = 0;
    local_90 = 0;
    local_88 = 0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    if (((plVar4 == &DAT_00531fb8) && (*(int *)(param_1 + 8) == 0x2f)) &&
       ((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)))) {
      cVar1 = FUN_002eb1b8(param_2);
      if (cVar1 == '\0') {
        (**(code **)(*(long *)pMVar3 + 0x18))(pMVar3,param_2,(Mat *)&local_60,0xffffffff);
      }
      else {
        param_4 = param_4 * *(double *)(param_2 + 0x130);
        Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
      }
      FUN_002f46e0(param_4 / *(double *)(param_1 + 0x130),param_3,0x2f,(Mat *)&local_60,
                   param_1 + 0x10);
    }
    else {
      cVar1 = FUN_002eb1b8(param_1);
      if (cVar1 == '\0') {
        (**(code **)(*plVar4 + 0x18))(plVar4,param_1,(Mat *)&local_c0,0xffffffff);
      }
      else {
        Mat::operator=((Mat *)&local_c0,(Mat *)(param_1 + 0x10));
        param_4 = param_4 * *(double *)(param_1 + 0x130);
      }
      cVar1 = FUN_002eb1b8(param_2);
      if (cVar1 == '\0') {
        plVar4 = *(long **)param_2;
        if (((plVar4 == &DAT_00531fb8) && (*(int *)(param_2 + 8) == 0x2f)) &&
           ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
          Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
          uVar2 = 0x2f;
          param_4 = param_4 / *(double *)(param_2 + 0x130);
        }
        else {
          (**(code **)(*plVar4 + 0x18))(plVar4,param_2,(Mat *)&local_60,0xffffffff);
          uVar2 = 0x2a;
        }
      }
      else {
        Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
        uVar2 = 0x2a;
        param_4 = param_4 * *(double *)(param_2 + 0x130);
      }
      FUN_002f46e0(param_4,param_3,uVar2,(Mat *)&local_c0,(Mat *)&local_60);
    }
    Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    Mat::release((Mat *)&local_c0);
    if (local_78 != &local_70) {
      fastFree(local_78);
      return;
    }
  }
  else {
    (**(code **)(*(long *)pMVar3 + 0x88))(pMVar3);
  }
  return;
}


==================================================================

### FUNC 002f4b80 (796 bytes) name=divide

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::divide(cv::MatExpr const&, cv::MatExpr const&, cv::MatExpr&, double) const */

void __thiscall
cv::MatOp::divide(MatOp *this,MatExpr *param_1,MatExpr *param_2,MatExpr *param_3,double param_4)

{
  long *plVar1;
  undefined8 uVar2;
  MatOp *pMVar3;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar3 = *(MatOp **)param_2;
  if (pMVar3 != this) {
    (**(code **)(*(long *)pMVar3 + 0x98))(pMVar3);
    return;
  }
  plVar1 = *(long **)param_1;
  if (((((plVar1 == &DAT_00531fb8) && (*(int *)(param_1 + 8) == 0x2f)) &&
       ((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)))) &&
      ((pMVar3 == (MatOp *)&DAT_00531fb8 && (*(int *)(param_2 + 8) == 0x2f)))) &&
     ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
    FUN_002f46e0(*(double *)(param_1 + 0x130) / *(double *)(param_2 + 0x130),param_3,0x2f,
                 param_2 + 0x10,param_1 + 0x10);
    return;
  }
  local_78 = &local_70;
  local_18 = &local_10;
  uStack_68 = 0;
  local_70 = 0;
  uStack_8 = 0;
  local_10 = 0;
  local_80 = &uStack_b8;
  local_20 = &uStack_58;
  local_b0 = 0;
  uStack_b8 = _UNK_002f4ef8;
  local_c0 = _DAT_002f4ef0;
  local_a8 = 0;
  uStack_58 = _UNK_002f4ef8;
  local_60 = _DAT_002f4ef0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  if (((plVar1 == &DAT_00531fa8) &&
      (((*(long *)(param_1 + 0x80) == 0 || (*(double *)(param_1 + 0x138) == 0.0)) &&
       (*(double *)(param_1 + 0x140) == 0.0)))) &&
     (((*(double *)(param_1 + 0x148) == 0.0 && (*(double *)(param_1 + 0x150) == 0.0)) &&
      (*(double *)(param_1 + 0x158) == 0.0)))) {
    Mat::operator=((Mat *)&local_c0,(Mat *)(param_1 + 0x10));
    param_4 = param_4 * *(double *)(param_1 + 0x130);
  }
  else {
    (**(code **)(*plVar1 + 0x18))(plVar1,param_1,(Mat *)&local_c0,0xffffffff);
  }
  plVar1 = *(long **)param_2;
  if (plVar1 == &DAT_00531fa8) {
    if (((*(long *)(param_2 + 0x80) == 0) || (*(double *)(param_2 + 0x138) == 0.0)) &&
       ((*(double *)(param_2 + 0x140) == 0.0 &&
        (((*(double *)(param_2 + 0x148) == 0.0 && (*(double *)(param_2 + 0x150) == 0.0)) &&
         (*(double *)(param_2 + 0x158) == 0.0)))))) {
      Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
      uVar2 = 0x2f;
      param_4 = param_4 / *(double *)(param_2 + 0x130);
      goto LAB_002f4ccc;
    }
  }
  else if (((plVar1 == &DAT_00531fb8) && (*(int *)(param_2 + 8) == 0x2f)) &&
          ((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
    Mat::operator=((Mat *)&local_60,(Mat *)(param_2 + 0x10));
    uVar2 = 0x2a;
    param_4 = param_4 / *(double *)(param_2 + 0x130);
    goto LAB_002f4ccc;
  }
  (**(code **)(*plVar1 + 0x18))(plVar1,param_2,(Mat *)&local_60,0xffffffff);
  uVar2 = 0x2f;
LAB_002f4ccc:
  FUN_002f46e0(param_4,param_3,uVar2,(Mat *)&local_c0,(Mat *)&local_60);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  Mat::release((Mat *)&local_c0);
  if (local_78 == &local_70) {
    return;
  }
  fastFree(local_78);
  return;
}


==================================================================

### FUNC 002f4f00 (284 bytes) name=divide

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::divide(double, cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::divide(MatOp *this,double param_1,MatExpr *param_2,MatExpr *param_3)

{
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f5070;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_2 + 0x18))(*(long **)param_2,param_2,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  uStack_b8 = _UNK_002f5088;
  local_c0 = _DAT_002f5080;
  local_98 = 0;
  local_90 = 0;
  local_88 = 0;
  FUN_002f46e0(param_1,param_3,0x2f,(Mat *)&uStack_60,(Mat *)&local_c0);
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f5090 (220 bytes) name=FUN_002f5090

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f5090(double param_1,MatOp *param_2,MatExpr *param_3,MatExpr *param_4)

{
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if ((*(int *)(param_3 + 8) == 0x2f) &&
     ((*(long *)(param_3 + 0x80) == 0 || (*(double *)(param_3 + 0x138) == 0.0)))) {
    local_18 = &local_10;
    local_20 = &uStack_58;
    uStack_58 = _UNK_002f51a8;
    local_60 = _DAT_002f51a0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    uStack_8 = 0;
    local_10 = 0;
    local_30 = 0;
    local_28 = 0;
    FUN_002f2ce0(param_1 / *(double *)(param_3 + 0x130),0,param_4,param_3 + 0x10,(Mat *)&local_60);
    cv::Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      cv::fastFree(local_18);
      return;
    }
  }
  else {
    cv::MatOp::divide(param_2,param_1,param_3,param_4);
  }
  return;
}


==================================================================

### FUNC 002f51b0 (272 bytes) name=abs

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::MatOp::abs(cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::abs(MatOp *this,MatExpr *param_1,MatExpr *param_2)

{
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f5310;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  local_78 = &local_70;
  local_80 = &uStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_b0 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  uStack_b8 = _UNK_002f5328;
  local_c0 = _DAT_002f5320;
  local_90 = 0;
  local_88 = 0;
  FUN_002f46e0(0x3ff0000000000000,param_2,0x61,(Mat *)&uStack_60,(Mat *)&local_c0);
  Mat::release((Mat *)&local_c0);
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f5330 (264 bytes) name=FUN_002f5330

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f5330(double param_1,MatOp *param_2,MatExpr *param_3,MatExpr *param_4)

{
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (((*(undefined8 **)param_3 == &DAT_00531fa8) &&
      (((*(long *)(param_3 + 0x80) == 0 || (*(double *)(param_3 + 0x138) == 0.0)) &&
       (*(double *)(param_3 + 0x140) == 0.0)))) &&
     (((*(double *)(param_3 + 0x148) == 0.0 && (*(double *)(param_3 + 0x150) == 0.0)) &&
      (*(double *)(param_3 + 0x158) == 0.0)))) {
    local_18 = &local_10;
    local_20 = &uStack_58;
    local_50 = 0;
    uStack_8 = 0;
    local_10 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    uStack_58 = _UNK_002f5468;
    local_60 = _DAT_002f5460;
    local_28 = 0;
    FUN_002f46e0(param_1 / *(double *)(param_3 + 0x130),param_4,0x2f,param_3 + 0x10,(Mat *)&local_60
                );
    cv::Mat::release((Mat *)&local_60);
    if (local_18 != &local_10) {
      cv::fastFree(local_18);
      return;
    }
  }
  else {
    cv::MatOp::divide(param_2,param_1,param_3,param_4);
  }
  return;
}


==================================================================

### FUNC 002f5470 (284 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator/(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f55a0 (176 bytes) name=operator/

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void __thiscall cv::operator/(cv *this,double param_1,Mat *param_2)

{
  MatExpr *in_x8;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  MatExpr::MatExpr(in_x8);
  local_20 = &local_58;
  local_18 = &local_10;
  local_60 = 0x42ff0000;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_8 = 0;
  local_10 = 0;
  FUN_002f46e0(param_1);
  Mat::release((Mat *)&local_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f568c (284 bytes) name=min

/* cv::min(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::min(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f57bc (284 bytes) name=max

/* cv::max(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::max(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f58ec (284 bytes) name=operator&

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator&(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f5a1c (284 bytes) name=operator|

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator|(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f5b4c (284 bytes) name=operator^

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator^(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f46e0(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f5c80 (376 bytes) name=FUN_002f5c80

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f5c80(undefined8 *param_1,char param_2,Mat *param_3,Scalar_ *param_4)

{
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_1d8 = &local_1d0;
  local_178 = &local_170;
  uStack_218 = _UNK_002f5e68;
  local_220 = _DAT_002f5e60;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_1b8 = _UNK_002f5e68;
  local_1c0 = _DAT_002f5e60;
  uStack_168 = 0;
  local_170 = 0;
  local_1e0 = &uStack_218;
  local_180 = &uStack_1b8;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531fb8,(int)param_2,param_3,(Mat *)&local_220,
             (Mat *)&local_1c0,1.0,0.0,param_4);
  *param_1 = local_160;
  *(undefined4 *)(param_1 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_1 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_1 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_1 + 0x1a),aMStack_90);
  param_1[0x27] = uStack_28;
  param_1[0x26] = local_30;
  param_1[0x28] = local_20;
  param_1[0x29] = uStack_18;
  param_1[0x2a] = local_10;
  param_1[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  return;
}


==================================================================

### FUNC 002f5e70 (280 bytes) name=operator&

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator&(cv *this,Mat *param_1,Scalar_ *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f5f9c (280 bytes) name=operator&

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::Mat const&) */

void __thiscall cv::operator&(cv *this,Scalar_ *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f60c8 (280 bytes) name=operator|

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator|(cv *this,Mat *param_1,Scalar_ *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f61f4 (280 bytes) name=operator|

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::Mat const&) */

void __thiscall cv::operator|(cv *this,Scalar_ *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6320 (280 bytes) name=operator^

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Scalar_<double> const&) */

void __thiscall cv::operator^(cv *this,Mat *param_1,Scalar_ *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f644c (280 bytes) name=operator^

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&, cv::Mat const&) */

void __thiscall cv::operator^(cv *this,Scalar_ *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6578 (88 bytes) name=operator~

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&) */

void __thiscall cv::operator~(cv *this,Mat *param_1)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f65e4 (88 bytes) name=abs

/* cv::abs(cv::Mat const&) */

void __thiscall cv::abs(cv *this,Mat *param_1)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6650 (236 bytes) name=FUN_002f6650

void FUN_002f6650(MatOp *param_1,MatExpr *param_2,MatExpr *param_3)

{
  double dVar1;
  double dStack_20;
  double dStack_18;
  double local_10;
  double dStack_8;
  
  if (*(long *)(param_2 + 0x80) == 0) {
    dStack_8 = *(double *)(param_2 + 0x130);
    if (ABS(dStack_8) == 1.0) {
LAB_002f66b8:
      dStack_20 = dStack_8 * -*(double *)(param_2 + 0x140);
      dStack_18 = dStack_8 * -*(double *)(param_2 + 0x148);
      local_10 = dStack_8 * -*(double *)(param_2 + 0x150);
      dStack_8 = dStack_8 * -*(double *)(param_2 + 0x158);
      FUN_002f5c80(param_3,0x61,param_2 + 0x10,&dStack_20);
      return;
    }
  }
  else {
    dVar1 = *(double *)(param_2 + 0x138);
    if (dVar1 == 0.0) {
      dStack_8 = *(double *)(param_2 + 0x130);
      if (ABS(dStack_8) == 1.0) goto LAB_002f66b8;
    }
    else {
      dStack_8 = *(double *)(param_2 + 0x130);
    }
    if ((dVar1 + dStack_8 == 0.0) && (dVar1 * dStack_8 == -1.0)) {
      FUN_002f46e0(0x3ff0000000000000,param_3,0x61,param_2 + 0x10,param_2 + 0x70);
      return;
    }
  }
  cv::MatOp::abs(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 002f673c (96 bytes) name=min

/* cv::min(cv::Mat const&, double) */

void __thiscall cv::min(cv *this,Mat *param_1,double param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f67b0 (96 bytes) name=min

/* cv::min(double, cv::Mat const&) */

void __thiscall cv::min(cv *this,double param_1,Mat *param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6824 (96 bytes) name=max

/* cv::max(cv::Mat const&, double) */

void __thiscall cv::max(cv *this,Mat *param_1,double param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6898 (96 bytes) name=max

/* cv::max(double, cv::Mat const&) */

void __thiscall cv::max(cv *this,double param_1,Mat *param_2)

{
  MatExpr *in_x8;
  
  MatExpr::MatExpr(in_x8);
  FUN_002f5c80();
  return;
}


==================================================================

### FUNC 002f6910 (304 bytes) name=FUN_002f6910

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f6910(undefined8 *param_1,int param_2,Mat *param_3,Mat *param_4)

{
  undefined8 uStack_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_1d8 = 0;
  uStack_1e0 = 0;
  local_178 = &local_170;
  uStack_1b8 = _UNK_002f6a88;
  local_1c0 = _DAT_002f6a80;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_168 = 0;
  local_170 = 0;
  local_180 = &uStack_1b8;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531f90,param_2,param_3,param_4,(Mat *)&local_1c0,
             1.0,1.0,(Scalar_ *)&uStack_1e0);
  *param_1 = local_160;
  *(undefined4 *)(param_1 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_1 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_1 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_1 + 0x1a),aMStack_90);
  param_1[0x27] = uStack_28;
  param_1[0x26] = local_30;
  param_1[0x28] = local_20;
  param_1[0x29] = uStack_18;
  param_1[0x2a] = local_10;
  param_1[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002f6a90 (280 bytes) name=operator<

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator<(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f6bbc (280 bytes) name=operator<=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator<=(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f6ce8 (280 bytes) name=operator==

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator==(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f6e14 (280 bytes) name=operator!=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator!=(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f6f40 (280 bytes) name=operator>=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator>=(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f706c (280 bytes) name=operator>

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, cv::Mat const&) */

void __thiscall cv::operator>(cv *this,Mat *param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f6910();
  return;
}


==================================================================

### FUNC 002f71a0 (384 bytes) name=FUN_002f71a0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f71a0(double param_1,undefined8 *param_2,int param_3,Mat *param_4)

{
  undefined8 uStack_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_238 = 0;
  uStack_240 = 0;
  local_1d8 = &local_1d0;
  local_178 = &local_170;
  uStack_218 = _UNK_002f7388;
  local_220 = _DAT_002f7380;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_1b8 = _UNK_002f7388;
  local_1c0 = _DAT_002f7380;
  uStack_168 = 0;
  local_170 = 0;
  uStack_228 = 0;
  local_230 = 0;
  local_1e0 = &uStack_218;
  local_180 = &uStack_1b8;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531f90,param_3,param_4,(Mat *)&local_220,
             (Mat *)&local_1c0,param_1,1.0,(Scalar_ *)&uStack_240);
  *param_2 = local_160;
  *(undefined4 *)(param_2 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_2 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_2 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_2 + 0x1a),aMStack_90);
  param_2[0x27] = uStack_28;
  param_2[0x26] = local_30;
  param_2[0x28] = local_20;
  param_2[0x29] = uStack_18;
  param_2[0x2a] = local_10;
  param_2[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  return;
}


==================================================================

### FUNC 002f7390 (276 bytes) name=operator<

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator<(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f74b8 (276 bytes) name=operator<

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator<(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f75e0 (276 bytes) name=operator<=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator<=(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7708 (276 bytes) name=operator<=

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator<=(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7830 (276 bytes) name=operator==

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator==(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7958 (276 bytes) name=operator==

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator==(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7a80 (276 bytes) name=operator!=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator!=(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7ba8 (276 bytes) name=operator!=

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator!=(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7cd0 (276 bytes) name=operator>=

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator>=(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7df8 (276 bytes) name=operator>=

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator>=(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f7f20 (276 bytes) name=operator>

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::Mat const&, double) */

void cv::operator>(Mat *param_1,double param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f8048 (276 bytes) name=operator>

/* cv::TEMPNAMEPLACEHOLDERVALUE(double, cv::Mat const&) */

void cv::operator>(double param_1,Mat *param_2)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f71a0();
  return;
}


==================================================================

### FUNC 002f8170 (380 bytes) name=FUN_002f8170

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f8170(double param_1,undefined8 *param_2,Mat *param_3)

{
  undefined8 uStack_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_238 = 0;
  uStack_240 = 0;
  local_1d8 = &local_1d0;
  local_178 = &local_170;
  uStack_218 = _UNK_002f8358;
  local_220 = _DAT_002f8350;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_1b8 = _UNK_002f8358;
  local_1c0 = _DAT_002f8350;
  uStack_168 = 0;
  local_170 = 0;
  uStack_228 = 0;
  local_230 = 0;
  local_1e0 = &uStack_218;
  local_180 = &uStack_1b8;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531fa0,0,param_3,(Mat *)&local_220,
             (Mat *)&local_1c0,param_1,0.0,(Scalar_ *)&uStack_240);
  *param_2 = local_160;
  *(undefined4 *)(param_2 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_2 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_2 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_2 + 0x1a),aMStack_90);
  param_2[0x27] = uStack_28;
  param_2[0x26] = local_30;
  param_2[0x28] = local_20;
  param_2[0x29] = uStack_18;
  param_2[0x2a] = local_10;
  param_2[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  return;
}


==================================================================

### FUNC 002f8360 (172 bytes) name=transpose

/* cv::MatOp::transpose(cv::MatExpr const&, cv::MatExpr&) const */

void __thiscall cv::MatOp::transpose(MatOp *this,MatExpr *param_1,MatExpr *param_2)

{
  undefined8 uStack_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_18 = &local_10;
  local_48 = 0;
  local_40 = 0;
  local_20 = &local_58;
  uStack_60 = DAT_002f8438;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_58 = 0;
  local_50 = 0;
  local_8 = 0;
  local_10 = 0;
  (**(code **)(**(long **)param_1 + 0x18))(*(long **)param_1,param_1,(Mat *)&uStack_60,0xffffffff);
  FUN_002f8170(0x3ff0000000000000,param_2,(Mat *)&uStack_60);
  Mat::release((Mat *)&uStack_60);
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 002f8440 (108 bytes) name=FUN_002f8440

void FUN_002f8440(MatOp *param_1,MatExpr *param_2,MatExpr *param_3)

{
  if (((*(undefined8 **)param_2 == &DAT_00531fa8) &&
      (((*(long *)(param_2 + 0x80) == 0 || (*(double *)(param_2 + 0x138) == 0.0)) &&
       (*(double *)(param_2 + 0x140) == 0.0)))) &&
     (((*(double *)(param_2 + 0x148) == 0.0 && (*(double *)(param_2 + 0x150) == 0.0)) &&
      (*(double *)(param_2 + 0x158) == 0.0)))) {
    FUN_002f8170(*(undefined8 *)(param_2 + 0x130),param_3,param_2 + 0x10);
    return;
  }
  cv::MatOp::transpose(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 002f84ac (536 bytes) name=FUN_002f84ac

void FUN_002f84ac(double param_1,double param_2,undefined8 *param_3,int param_4,Mat *param_5,
                 Mat *param_6,Mat *param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 *puVar5;
  undefined8 uStack_180;
  undefined8 uStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  undefined4 local_150;
  int local_14c;
  undefined4 local_148;
  undefined4 local_144;
  undefined8 local_140;
  undefined8 uStack_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined8 local_120;
  long lStack_118;
  undefined8 *local_108;
  undefined4 local_f0;
  int local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined8 local_e0;
  undefined8 uStack_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  long lStack_b8;
  undefined8 *local_a8;
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_178 = 0;
  uStack_180 = 0;
  uStack_168 = 0;
  local_170 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531f88,param_4,param_5,param_6,param_7,param_1,
             param_2,(Scalar_ *)&uStack_180);
  *param_3 = local_160;
  *(undefined4 *)(param_3 + 1) = local_158;
  if (lStack_118 != 0) {
    piVar1 = (int *)(lStack_118 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  cv::Mat::release((Mat *)(param_3 + 2));
  *(undefined4 *)(param_3 + 2) = local_150;
  if ((*(int *)((long)param_3 + 0x14) < 3) && (local_14c < 3)) {
    puVar5 = (undefined8 *)param_3[0xb];
    *(int *)((long)param_3 + 0x14) = local_14c;
    *(undefined4 *)(param_3 + 3) = local_148;
    uVar4 = *local_108;
    *(undefined4 *)((long)param_3 + 0x1c) = local_144;
    *puVar5 = uVar4;
    puVar5[1] = local_108[1];
  }
  else {
    cv::Mat::copySize((Mat *)(param_3 + 2),(Mat *)&local_150);
  }
  param_3[5] = uStack_138;
  param_3[4] = local_140;
  param_3[7] = uStack_128;
  param_3[6] = local_130;
  param_3[9] = lStack_118;
  param_3[8] = local_120;
  if (lStack_b8 != 0) {
    piVar1 = (int *)(lStack_b8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  cv::Mat::release((Mat *)(param_3 + 0xe));
  *(undefined4 *)(param_3 + 0xe) = local_f0;
  if ((*(int *)((long)param_3 + 0x74) < 3) && (local_ec < 3)) {
    puVar5 = (undefined8 *)param_3[0x17];
    *(int *)((long)param_3 + 0x74) = local_ec;
    *(undefined4 *)(param_3 + 0xf) = local_e8;
    uVar4 = *local_a8;
    *(undefined4 *)((long)param_3 + 0x7c) = local_e4;
    *puVar5 = uVar4;
    puVar5[1] = local_a8[1];
  }
  else {
    cv::Mat::copySize((Mat *)(param_3 + 0xe),(Mat *)&local_f0);
  }
  param_3[0x11] = uStack_d8;
  param_3[0x10] = local_e0;
  param_3[0x13] = uStack_c8;
  param_3[0x12] = local_d0;
  param_3[0x15] = lStack_b8;
  param_3[0x14] = local_c0;
  cv::Mat::operator=((Mat *)(param_3 + 0x1a),aMStack_90);
  param_3[0x27] = uStack_28;
  param_3[0x26] = local_30;
  param_3[0x28] = local_20;
  param_3[0x29] = uStack_18;
  param_3[0x2a] = local_10;
  param_3[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  return;
}


==================================================================

### FUNC 002f86d8 (592 bytes) name=FUN_002f86d8

void FUN_002f86d8(MatOp *param_1,MatExpr *param_2,MatExpr *param_3,MatExpr *param_4)

{
  char cVar1;
  uint uVar2;
  uint uVar3;
  MatOp *this;
  undefined8 *puVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  
  puVar4 = *(undefined8 **)param_2;
  this = *(MatOp **)param_3;
  uVar6 = 0x3ff0000000000000;
  if (puVar4 != &DAT_00531f80) {
    uVar6 = *(undefined8 *)(param_2 + 0x130);
  }
  uVar5 = 0x3ff0000000000000;
  if (this != (MatOp *)&DAT_00531f80) {
    uVar5 = *(undefined8 *)(param_3 + 0x130);
  }
  if ((puVar4 == &DAT_00531f88) &&
     ((*(long *)(param_2 + 0xe0) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
    if (this == (MatOp *)&DAT_00531f80) {
      uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
      uVar2 = 0;
LAB_002f8880:
      FUN_002f84ac(uVar6,param_4,uVar3 | uVar2,param_2 + 0x10,param_2 + 0x70,param_3 + 0x10);
      return;
    }
    if (this == (MatOp *)&DAT_00531fa8) {
      if (((((*(long *)(param_3 + 0x80) == 0) || (*(double *)(param_3 + 0x138) == 0.0)) &&
           (*(double *)(param_3 + 0x140) == 0.0)) &&
          ((*(double *)(param_3 + 0x148) == 0.0 && (*(double *)(param_3 + 0x150) == 0.0)))) &&
         (*(double *)(param_3 + 0x158) == 0.0)) {
        uVar2 = 0;
        uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
        goto LAB_002f8880;
      }
      goto LAB_002f874c;
    }
    if (this == (MatOp *)&DAT_00531fa0) {
      uVar2 = 4;
      uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
      goto LAB_002f8880;
    }
  }
  if (((this == (MatOp *)&DAT_00531f88) &&
      ((*(long *)(param_3 + 0xe0) == 0 || (*(double *)(param_3 + 0x138) == 0.0)))) &&
     ((puVar4 == &DAT_00531f80 ||
      ((cVar1 = FUN_002eb1b8(param_2), cVar1 != '\0' || (puVar4 == &DAT_00531fa0)))))) {
    uVar3 = 4;
    if (puVar4 != &DAT_00531fa0) {
      uVar3 = 0;
    }
    FUN_002f84ac(uVar5,uVar6,param_4,uVar3 | *(uint *)(param_3 + 8) & 0xfffffffb,param_3 + 0x10,
                 param_3 + 0x70,param_2 + 0x10);
    return;
  }
LAB_002f874c:
  if (this == param_1) {
    cv::MatOp::add(this,param_2,param_3,param_4);
    return;
  }
  (**(code **)(*(long *)this + 0x68))(this,param_2,param_3);
  return;
}


==================================================================

### FUNC 002f8928 (592 bytes) name=FUN_002f8928

void FUN_002f8928(MatOp *param_1,MatExpr *param_2,MatExpr *param_3,MatExpr *param_4)

{
  char cVar1;
  uint uVar2;
  uint uVar3;
  MatOp *this;
  undefined8 *puVar4;
  undefined8 uVar5;
  double dVar6;
  
  puVar4 = *(undefined8 **)param_2;
  this = *(MatOp **)param_3;
  uVar5 = 0x3ff0000000000000;
  if (puVar4 != &DAT_00531f80) {
    uVar5 = *(undefined8 *)(param_2 + 0x130);
  }
  dVar6 = 1.0;
  if (this != (MatOp *)&DAT_00531f80) {
    dVar6 = *(double *)(param_3 + 0x130);
  }
  if ((puVar4 == &DAT_00531f88) &&
     ((*(long *)(param_2 + 0xe0) == 0 || (*(double *)(param_2 + 0x138) == 0.0)))) {
    if (this == (MatOp *)&DAT_00531f80) {
      uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
      uVar2 = 0;
LAB_002f8acc:
      FUN_002f84ac(uVar5,-dVar6,param_4,uVar3 | uVar2,param_2 + 0x10,param_2 + 0x70,param_3 + 0x10);
      return;
    }
    if (this == (MatOp *)&DAT_00531fa8) {
      if (((((*(long *)(param_3 + 0x80) == 0) || (*(double *)(param_3 + 0x138) == 0.0)) &&
           (*(double *)(param_3 + 0x140) == 0.0)) &&
          ((*(double *)(param_3 + 0x148) == 0.0 && (*(double *)(param_3 + 0x150) == 0.0)))) &&
         (*(double *)(param_3 + 0x158) == 0.0)) {
        uVar2 = 0;
        uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
        goto LAB_002f8acc;
      }
      goto LAB_002f899c;
    }
    if (this == (MatOp *)&DAT_00531fa0) {
      uVar2 = 4;
      uVar3 = *(uint *)(param_2 + 8) & 0xfffffffb;
      goto LAB_002f8acc;
    }
  }
  if (((this == (MatOp *)&DAT_00531f88) &&
      ((*(long *)(param_3 + 0xe0) == 0 || (*(double *)(param_3 + 0x138) == 0.0)))) &&
     ((puVar4 == &DAT_00531f80 ||
      ((cVar1 = FUN_002eb1b8(param_2), cVar1 != '\0' || (puVar4 == &DAT_00531fa0)))))) {
    uVar3 = 4;
    if (puVar4 != &DAT_00531fa0) {
      uVar3 = 0;
    }
    FUN_002f84ac(-dVar6,uVar5,param_4,uVar3 | *(uint *)(param_3 + 8) & 0xfffffffb,param_3 + 0x10,
                 param_3 + 0x70,param_2 + 0x10);
    return;
  }
LAB_002f899c:
  if (this == param_1) {
    cv::MatOp::subtract(this,param_2,param_3,param_4);
    return;
  }
  (**(code **)(*(long *)this + 0x78))(this,param_2,param_3);
  return;
}


==================================================================

### FUNC 002f8b80 (388 bytes) name=FUN_002f8b80

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f8b80(undefined8 *param_1,int param_2,Mat *param_3)

{
  undefined8 uStack_240;
  undefined8 uStack_238;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_238 = 0;
  uStack_240 = 0;
  local_1d8 = &local_1d0;
  local_178 = &local_170;
  uStack_218 = _UNK_002f8d78;
  local_220 = _DAT_002f8d70;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_1b8 = _UNK_002f8d78;
  local_1c0 = _DAT_002f8d70;
  uStack_168 = 0;
  local_170 = 0;
  uStack_228 = 0;
  local_230 = 0;
  local_1e0 = &uStack_218;
  local_180 = &uStack_1b8;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531fb0,param_2,param_3,(Mat *)&local_220,
             (Mat *)&local_1c0,1.0,0.0,(Scalar_ *)&uStack_240);
  *param_1 = local_160;
  *(undefined4 *)(param_1 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_1 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_1 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_1 + 0x1a),aMStack_90);
  param_1[0x27] = uStack_28;
  param_1[0x26] = local_30;
  param_1[0x28] = local_20;
  param_1[0x29] = uStack_18;
  param_1[0x2a] = local_10;
  param_1[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  return;
}


==================================================================

### FUNC 002f8d80 (304 bytes) name=FUN_002f8d80

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_002f8d80(undefined8 *param_1,int param_2,Mat *param_3,Mat *param_4)

{
  undefined8 uStack_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_1d8 = 0;
  uStack_1e0 = 0;
  local_178 = &local_170;
  uStack_1b8 = _UNK_002f8ef8;
  local_1c0 = _DAT_002f8ef0;
  uStack_1c8 = 0;
  local_1d0 = 0;
  uStack_168 = 0;
  local_170 = 0;
  local_180 = &uStack_1b8;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,(MatOp *)&DAT_00531f70,param_2,param_3,param_4,(Mat *)&local_1c0,
             1.0,1.0,(Scalar_ *)&uStack_1e0);
  *param_1 = local_160;
  *(undefined4 *)(param_1 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_1 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_1 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_1 + 0x1a),aMStack_90);
  param_1[0x27] = uStack_28;
  param_1[0x26] = local_30;
  param_1[0x28] = local_20;
  param_1[0x29] = uStack_18;
  param_1[0x2a] = local_10;
  param_1[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  return;
}


==================================================================

### FUNC 002f8f00 (148 bytes) name=FUN_002f8f00

void FUN_002f8f00(MatOp *param_1,MatExpr *param_2,MatExpr *param_3,MatExpr *param_4)

{
  MatOp *pMVar1;
  
  pMVar1 = *(MatOp **)param_3;
  if ((*(undefined8 **)param_2 == &DAT_00531fb0) && (pMVar1 == (MatOp *)&DAT_00531f80)) {
    FUN_002f8d80(param_4,*(undefined4 *)(param_2 + 8),param_2 + 0x10,param_3 + 0x10);
    return;
  }
  if (param_1 != pMVar1) {
    (**(code **)(*(long *)pMVar1 + 0xb8))(pMVar1,param_2,param_3);
    return;
  }
  cv::MatOp::matmul(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 002f8f94 (604 bytes) name=FUN_002f8f94

void FUN_002f8f94(double param_1,undefined8 *param_2,int param_3,int *param_4,ulong param_5)

{
  int iVar1;
  MatOp *pMVar2;
  undefined8 local_2a0;
  undefined8 local_298;
  undefined8 local_290;
  undefined8 local_288;
  uint local_280 [3];
  int local_274;
  undefined8 local_270;
  undefined8 local_268;
  long local_260;
  long local_258;
  undefined8 local_250;
  undefined8 local_248;
  uint *local_240;
  long *local_238;
  long local_230;
  long local_228;
  undefined4 local_220;
  undefined4 local_21c;
  undefined4 local_218;
  undefined4 local_214;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined4 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar2 = (MatOp *)FUN_002eeb34();
  local_274 = *param_4;
  local_280[2] = param_4[1];
  iVar1 = ((uint)(param_5 >> 3) & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> (((uint)param_5 & 7) << 1)) & 3);
  local_230 = (long)iVar1 * (long)local_274;
  local_260 = local_230 * (int)local_280[2];
  local_280[1] = 2;
  local_240 = local_280 + 2;
  local_238 = &local_230;
  local_280[0] = ((uint)param_5 & 0xfff) + 0x42ff0000 | 0x4000;
  local_270 = 0;
  local_228 = (long)iVar1;
  local_268 = 0;
  local_1e0 = &local_218;
  local_250 = 0;
  local_1d8 = &local_1d0;
  local_248 = 0;
  local_180 = &local_1b8;
  local_178 = &local_170;
  local_220 = 0x42ff0000;
  local_21c = 0;
  local_218 = 0;
  local_214 = 0;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1c8 = 0;
  local_1d0 = 0;
  local_1c0 = 0x42ff0000;
  local_168 = 0;
  local_170 = 0;
  local_1bc = 0;
  local_1b8 = 0;
  local_1b4 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  local_2a0 = 0;
  local_298 = 0;
  local_290 = 0;
  local_288 = 0;
  local_258 = local_260;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,pMVar2,param_3,(Mat *)local_280,(Mat *)&local_220,
             (Mat *)&local_1c0,param_1,0.0,(Scalar_ *)&local_2a0);
  *param_2 = local_160;
  *(undefined4 *)(param_2 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_2 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_2 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_2 + 0x1a),aMStack_90);
  param_2[0x27] = uStack_28;
  param_2[0x26] = local_30;
  param_2[0x28] = local_20;
  param_2[0x29] = uStack_18;
  param_2[0x2a] = local_10;
  param_2[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  cv::Mat::release((Mat *)local_280);
  if (local_238 != &local_230) {
    cv::fastFree(local_238);
  }
  return;
}


==================================================================

### FUNC 002f9278 (516 bytes) name=FUN_002f9278

void FUN_002f9278(double param_1,undefined8 *param_2,int param_3,int param_4,int *param_5,
                 int param_6)

{
  MatOp *pMVar1;
  undefined8 local_2a0;
  undefined8 local_298;
  undefined8 local_290;
  undefined8 local_288;
  Mat aMStack_280 [72];
  undefined1 *local_238;
  undefined1 auStack_230 [16];
  undefined4 local_220;
  undefined4 local_21c;
  undefined4 local_218;
  undefined4 local_214;
  undefined8 local_210;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined4 *local_1e0;
  undefined8 *local_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined4 local_158;
  Mat aMStack_150 [96];
  Mat aMStack_f0 [96];
  Mat aMStack_90 [96];
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  pMVar1 = (MatOp *)FUN_002eeb34();
  cv::Mat::Mat(aMStack_280,param_4,param_5,param_6,(void *)0x0,(ulong *)0x0);
  local_1e0 = &local_218;
  local_1d8 = &local_1d0;
  local_180 = &local_1b8;
  local_178 = &local_170;
  local_1c8 = 0;
  local_1d0 = 0;
  local_168 = 0;
  local_170 = 0;
  local_220 = 0x42ff0000;
  local_21c = 0;
  local_218 = 0;
  local_214 = 0;
  local_210 = 0;
  local_208 = 0;
  local_200 = 0;
  local_1f8 = 0;
  local_1f0 = 0;
  local_1e8 = 0;
  local_1c0 = 0x42ff0000;
  local_1bc = 0;
  local_1b8 = 0;
  local_1b4 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_1a0 = 0;
  local_198 = 0;
  local_190 = 0;
  local_188 = 0;
  local_2a0 = 0;
  local_298 = 0;
  local_290 = 0;
  local_288 = 0;
  cv::MatExpr::MatExpr
            ((MatExpr *)&local_160,pMVar1,param_3,aMStack_280,(Mat *)&local_220,(Mat *)&local_1c0,
             param_1,0.0,(Scalar_ *)&local_2a0);
  *param_2 = local_160;
  *(undefined4 *)(param_2 + 1) = local_158;
  cv::Mat::operator=((Mat *)(param_2 + 2),aMStack_150);
  cv::Mat::operator=((Mat *)(param_2 + 0xe),aMStack_f0);
  cv::Mat::operator=((Mat *)(param_2 + 0x1a),aMStack_90);
  param_2[0x27] = uStack_28;
  param_2[0x26] = local_30;
  param_2[0x28] = local_20;
  param_2[0x29] = uStack_18;
  param_2[0x2a] = local_10;
  param_2[0x2b] = uStack_8;
  cv::MatExpr::~MatExpr((MatExpr *)&local_160);
  cv::Mat::release((Mat *)&local_1c0);
  if (local_178 != &local_170) {
    cv::fastFree(local_178);
  }
  cv::Mat::release((Mat *)&local_220);
  if (local_1d8 != &local_1d0) {
    cv::fastFree(local_1d8);
  }
  cv::Mat::release(aMStack_280);
  if (local_238 != auStack_230) {
    cv::fastFree(local_238);
  }
  return;
}


==================================================================

### FUNC 002f9504 (276 bytes) name=t

/* cv::Mat::t() const */

void cv::Mat::t(void)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f8170(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f962c (272 bytes) name=inv

/* cv::Mat::inv(int) const */

void cv::Mat::inv(int param_1)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f8b80();
  return;
}


==================================================================

### FUNC 002f9750 (476 bytes) name=mul

/* cv::Mat::mul(cv::_InputArray const&, double) const */

void cv::Mat::mul(_InputArray *param_1,double param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  _InputArray *in_x1;
  Mat *pMVar5;
  MatExpr *in_x8;
  undefined8 *puVar6;
  long *plVar7;
  code *pcVar8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 local_198;
  undefined8 local_190;
  long local_188;
  undefined4 *local_180;
  undefined8 *local_178;
  undefined8 local_170;
  undefined8 local_168;
  MatExpr aMStack_160 [352];
  
  MatExpr::MatExpr(in_x8);
  iVar4 = _InputArray::kind(in_x1);
  if (iVar4 != 0x60000) {
    iVar4 = _InputArray::kind(in_x1);
    if (iVar4 == 0x10000) {
      pMVar5 = *(Mat **)(in_x1 + 8);
      local_180 = &local_1b8;
      local_178 = &local_170;
      local_1c0 = *(undefined4 *)pMVar5;
      local_1bc = *(undefined4 *)(pMVar5 + 4);
      local_1b8 = *(undefined4 *)(pMVar5 + 8);
      local_1b4 = *(undefined4 *)(pMVar5 + 0xc);
      local_1b0 = *(undefined8 *)(pMVar5 + 0x10);
      local_1a8 = *(undefined8 *)(pMVar5 + 0x18);
      local_1a0 = *(undefined8 *)(pMVar5 + 0x20);
      local_198 = *(undefined8 *)(pMVar5 + 0x28);
      local_190 = *(undefined8 *)(pMVar5 + 0x30);
      local_188 = *(long *)(pMVar5 + 0x38);
      local_168 = 0;
      local_170 = 0;
      if (local_188 != 0) {
        piVar1 = (int *)(local_188 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar5 + 4) < 3) {
        local_170 = **(undefined8 **)(pMVar5 + 0x48);
        local_168 = (*(undefined8 **)(pMVar5 + 0x48))[1];
      }
      else {
        local_1bc = 0;
        copySize((Mat *)&local_1c0,pMVar5);
      }
    }
    else {
      _InputArray::getMat_((int)in_x1);
    }
    FUN_002f46e0(param_2);
    release((Mat *)&local_1c0);
    if (local_178 != &local_170) {
      fastFree(local_178);
    }
    return;
  }
  puVar6 = *(undefined8 **)(in_x1 + 8);
  plVar7 = (long *)*puVar6;
  pcVar8 = *(code **)(*plVar7 + 0x88);
  MatExpr::MatExpr(aMStack_160,(Mat *)param_1);
  (*pcVar8)(param_2,plVar7,aMStack_160,puVar6);
  MatExpr::~MatExpr(aMStack_160);
  return;
}


==================================================================

### FUNC 002f997c (292 bytes) name=zeros

/* cv::Mat::zeros(int, int, int) */

void __thiscall cv::Mat::zeros(Mat *this,int param_1,int param_2,int param_3)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f9ab4 (304 bytes) name=zeros

/* cv::Mat::zeros(cv::Size_<int>, int) */

undefined8 * __thiscall cv::Mat::zeros(undefined8 *param_1,Mat *this,undefined4 param_3)

{
  undefined4 local_8;
  undefined4 local_4;
  
  *param_1 = 0;
  *(undefined4 *)(param_1 + 1) = 0;
  *(undefined4 *)(param_1 + 2) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = param_1 + 3;
  param_1[0xb] = param_1 + 0xc;
  param_1[0xd] = 0;
  param_1[0xc] = 0;
  *(undefined4 *)(param_1 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x74) = 0;
  *(undefined4 *)(param_1 + 0xf) = 0;
  *(undefined4 *)((long)param_1 + 0x7c) = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = param_1 + 0xf;
  param_1[0x17] = param_1 + 0x18;
  param_1[0x19] = 0;
  param_1[0x18] = 0;
  *(undefined4 *)(param_1 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0xd4) = 0;
  *(undefined4 *)(param_1 + 0x1b) = 0;
  *(undefined4 *)((long)param_1 + 0xdc) = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = param_1 + 0x1b;
  param_1[0x23] = param_1 + 0x24;
  param_1[0x25] = 0;
  param_1[0x24] = 0;
  local_8 = *(undefined4 *)this;
  param_1[0x27] = 0;
  param_1[0x26] = 0;
  local_4 = *(undefined4 *)(this + 4);
  param_1[0x29] = 0;
  param_1[0x28] = 0;
  param_1[0x2b] = 0;
  param_1[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000,param_1,0x30,&local_8,param_3);
  return param_1;
}


==================================================================

### FUNC 002f9bf8 (292 bytes) name=zeros

/* cv::Mat::zeros(int, int const*, int) */

void __thiscall cv::Mat::zeros(Mat *this,int param_1,int *param_2,int param_3)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f9278(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f9d30 (292 bytes) name=ones

/* cv::Mat::ones(int, int, int) */

void __thiscall cv::Mat::ones(Mat *this,int param_1,int param_2,int param_3)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002f9e68 (304 bytes) name=ones

/* cv::Mat::ones(cv::Size_<int>, int) */

undefined8 * __thiscall cv::Mat::ones(undefined8 *param_1,Mat *this,undefined4 param_3)

{
  undefined4 local_8;
  undefined4 local_4;
  
  *param_1 = 0;
  *(undefined4 *)(param_1 + 1) = 0;
  *(undefined4 *)(param_1 + 2) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = param_1 + 3;
  param_1[0xb] = param_1 + 0xc;
  param_1[0xd] = 0;
  param_1[0xc] = 0;
  *(undefined4 *)(param_1 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x74) = 0;
  *(undefined4 *)(param_1 + 0xf) = 0;
  *(undefined4 *)((long)param_1 + 0x7c) = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = param_1 + 0xf;
  param_1[0x17] = param_1 + 0x18;
  param_1[0x19] = 0;
  param_1[0x18] = 0;
  *(undefined4 *)(param_1 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0xd4) = 0;
  *(undefined4 *)(param_1 + 0x1b) = 0;
  *(undefined4 *)((long)param_1 + 0xdc) = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = param_1 + 0x1b;
  param_1[0x23] = param_1 + 0x24;
  param_1[0x25] = 0;
  param_1[0x24] = 0;
  local_8 = *(undefined4 *)this;
  param_1[0x27] = 0;
  param_1[0x26] = 0;
  local_4 = *(undefined4 *)(this + 4);
  param_1[0x29] = 0;
  param_1[0x28] = 0;
  param_1[0x2b] = 0;
  param_1[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000,param_1,0x31,&local_8,param_3);
  return param_1;
}


==================================================================

### FUNC 002f9fac (292 bytes) name=ones

/* cv::Mat::ones(int, int const*, int) */

void __thiscall cv::Mat::ones(Mat *this,int param_1,int *param_2,int param_3)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f9278(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002fa0e4 (292 bytes) name=eye

/* cv::Mat::eye(int, int, int) */

void __thiscall cv::Mat::eye(Mat *this,int param_1,int param_2,int param_3)

{
  undefined8 *in_x8;
  
  *in_x8 = 0;
  *(undefined4 *)(in_x8 + 1) = 0;
  *(undefined4 *)(in_x8 + 2) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x14) = 0;
  *(undefined4 *)(in_x8 + 3) = 0;
  *(undefined4 *)((long)in_x8 + 0x1c) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[8] = 0;
  in_x8[9] = 0;
  in_x8[10] = in_x8 + 3;
  in_x8[0xb] = in_x8 + 0xc;
  in_x8[0xd] = 0;
  in_x8[0xc] = 0;
  *(undefined4 *)(in_x8 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0x74) = 0;
  *(undefined4 *)(in_x8 + 0xf) = 0;
  *(undefined4 *)((long)in_x8 + 0x7c) = 0;
  in_x8[0x10] = 0;
  in_x8[0x11] = 0;
  in_x8[0x12] = 0;
  in_x8[0x13] = 0;
  in_x8[0x14] = 0;
  in_x8[0x15] = 0;
  in_x8[0x16] = in_x8 + 0xf;
  in_x8[0x17] = in_x8 + 0x18;
  in_x8[0x19] = 0;
  in_x8[0x18] = 0;
  *(undefined4 *)(in_x8 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)in_x8 + 0xd4) = 0;
  *(undefined4 *)(in_x8 + 0x1b) = 0;
  *(undefined4 *)((long)in_x8 + 0xdc) = 0;
  in_x8[0x1c] = 0;
  in_x8[0x1d] = 0;
  in_x8[0x1e] = 0;
  in_x8[0x1f] = 0;
  in_x8[0x20] = 0;
  in_x8[0x21] = 0;
  in_x8[0x22] = in_x8 + 0x1b;
  in_x8[0x23] = in_x8 + 0x24;
  in_x8[0x25] = 0;
  in_x8[0x24] = 0;
  in_x8[0x27] = 0;
  in_x8[0x26] = 0;
  in_x8[0x29] = 0;
  in_x8[0x28] = 0;
  in_x8[0x2b] = 0;
  in_x8[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000);
  return;
}


==================================================================

### FUNC 002fa21c (304 bytes) name=eye

/* cv::Mat::eye(cv::Size_<int>, int) */

undefined8 * __thiscall cv::Mat::eye(undefined8 *param_1,Mat *this,undefined4 param_3)

{
  undefined4 local_8;
  undefined4 local_4;
  
  *param_1 = 0;
  *(undefined4 *)(param_1 + 1) = 0;
  *(undefined4 *)(param_1 + 2) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = param_1 + 3;
  param_1[0xb] = param_1 + 0xc;
  param_1[0xd] = 0;
  param_1[0xc] = 0;
  *(undefined4 *)(param_1 + 0xe) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0x74) = 0;
  *(undefined4 *)(param_1 + 0xf) = 0;
  *(undefined4 *)((long)param_1 + 0x7c) = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = param_1 + 0xf;
  param_1[0x17] = param_1 + 0x18;
  param_1[0x19] = 0;
  param_1[0x18] = 0;
  *(undefined4 *)(param_1 + 0x1a) = 0x42ff0000;
  *(undefined4 *)((long)param_1 + 0xd4) = 0;
  *(undefined4 *)(param_1 + 0x1b) = 0;
  *(undefined4 *)((long)param_1 + 0xdc) = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = param_1 + 0x1b;
  param_1[0x23] = param_1 + 0x24;
  param_1[0x25] = 0;
  param_1[0x24] = 0;
  local_8 = *(undefined4 *)this;
  param_1[0x27] = 0;
  param_1[0x26] = 0;
  local_4 = *(undefined4 *)(this + 4);
  param_1[0x29] = 0;
  param_1[0x28] = 0;
  param_1[0x2b] = 0;
  param_1[0x2a] = 0;
  FUN_002f8f94(0x3ff0000000000000,param_1,0x49,&local_8,param_3);
  return param_1;
}


==================================================================

### FUNC 002fa360 (4 bytes) name=FUN_002fa360

void FUN_002fa360(void)

{
  return;
}


==================================================================

### FUNC 002fa364 (8 bytes) name=FUN_002fa364

undefined8 FUN_002fa364(void)

{
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 002fa36c (8 bytes) name=FUN_002fa36c

undefined8 FUN_002fa36c(void)

{
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 002fa374 (4 bytes) name=FUN_002fa374

void FUN_002fa374(void)

{
  return;
}


==================================================================

### FUNC 002fa378 (4 bytes) name=FUN_002fa378

void FUN_002fa378(void)

{
  return;
}


==================================================================

### FUNC 002fa37c (4 bytes) name=map

/* cv::MatAllocator::map(cv::UMatData*, int) const */

void cv::MatAllocator::map(UMatData *param_1,int param_2)

{
  return;
}


==================================================================

### FUNC 002fa380 (12 bytes) name=FUN_002fa380

bool FUN_002fa380(undefined8 param_1,long param_2)

{
  return param_2 != 0;
}


==================================================================

### FUNC 002fa38c (4 bytes) name=~_InputOutputArray

/* cv::_InputOutputArray::~_InputOutputArray() */

void __thiscall cv::_InputOutputArray::~_InputOutputArray(_InputOutputArray *this)

{
  return;
}


==================================================================

### FUNC 002fa390 (744 bytes) name=FUN_002fa390

void FUN_002fa390(long param_1,long param_2,undefined1 *param_3,long param_4,int *param_5)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  undefined1 uVar4;
  uint uVar5;
  int iVar6;
  undefined1 *puVar7;
  long lVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  undefined1 *puVar15;
  undefined1 *puVar16;
  undefined1 *puVar17;
  undefined1 *puVar18;
  long lVar19;
  int iVar20;
  int iVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  undefined1 *puVar25;
  
  iVar2 = *param_5;
  iVar3 = param_5[1];
  if (iVar2 + -3 < 1) {
    iVar21 = 0;
  }
  else {
    iVar6 = iVar3 + -3;
    iVar21 = (iVar3 - 4U & 0xfffffffc) + 4;
    puVar10 = param_3 + param_4;
    if (iVar6 < 1) {
      iVar21 = 0;
    }
    puVar9 = puVar10 + param_4;
    lVar24 = (long)iVar21;
    lVar23 = param_4 * 4;
    lVar19 = param_2 * 4;
    puVar13 = puVar9 + param_4;
    lVar22 = 0;
    puVar25 = param_3;
    do {
      if (0 < iVar6) {
        puVar12 = (undefined1 *)(param_1 + lVar22);
        lVar8 = lVar22 + param_2 + param_2;
        puVar7 = (undefined1 *)(param_1 + lVar22 + param_2);
        puVar11 = (undefined1 *)(param_1 + lVar8);
        puVar14 = (undefined1 *)(param_1 + lVar8 + param_2);
        iVar20 = 0;
        puVar15 = puVar25;
        puVar16 = puVar10;
        puVar17 = puVar9;
        puVar18 = puVar13;
        do {
          *puVar15 = *puVar12;
          iVar20 = iVar20 + 4;
          puVar15[1] = *puVar7;
          puVar15[2] = *puVar11;
          puVar15[3] = *puVar14;
          *puVar16 = puVar12[1];
          puVar16[1] = puVar7[1];
          puVar16[2] = puVar11[1];
          puVar16[3] = puVar14[1];
          *puVar17 = puVar12[2];
          puVar17[1] = puVar7[2];
          puVar17[2] = puVar11[2];
          puVar17[3] = puVar14[2];
          puVar1 = puVar12 + 3;
          puVar12 = puVar12 + lVar19;
          *puVar18 = *puVar1;
          puVar1 = puVar7 + 3;
          puVar7 = puVar7 + lVar19;
          puVar18[1] = *puVar1;
          puVar1 = puVar11 + 3;
          puVar11 = puVar11 + lVar19;
          puVar18[2] = *puVar1;
          puVar1 = puVar14 + 3;
          puVar14 = puVar14 + lVar19;
          puVar18[3] = *puVar1;
          puVar15 = puVar15 + 4;
          puVar16 = puVar16 + 4;
          puVar17 = puVar17 + 4;
          puVar18 = puVar18 + 4;
        } while (iVar20 < iVar6);
      }
      if (iVar21 < iVar3) {
        lVar8 = 0;
        puVar12 = (undefined1 *)(param_1 + lVar22 + lVar24 * param_2);
        do {
          puVar25[lVar8 + lVar24] = *puVar12;
          puVar10[lVar8 + lVar24] = puVar12[1];
          puVar9[lVar8 + lVar24] = puVar12[2];
          puVar7 = puVar12 + 3;
          puVar12 = puVar12 + param_2;
          puVar13[lVar8 + lVar24] = *puVar7;
          lVar8 = lVar8 + 1;
        } while (lVar8 != (ulong)(uint)((iVar3 + -1) - iVar21) + 1);
      }
      lVar22 = lVar22 + 4;
      puVar25 = puVar25 + lVar23;
      puVar10 = puVar10 + lVar23;
      puVar9 = puVar9 + lVar23;
      puVar13 = puVar13 + lVar23;
    } while ((int)lVar22 < iVar2 + -3);
    iVar21 = (iVar2 - 4U & 0xfffffffc) + 4;
  }
  if (iVar21 < iVar2) {
    uVar5 = iVar3 - 4U >> 2;
    lVar22 = (long)iVar21;
    iVar6 = (uVar5 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar6 = 0;
    }
    lVar24 = (long)iVar6;
    param_3 = param_3 + param_4 * lVar22;
    lVar19 = lVar22;
    lVar23 = lVar22 + 1;
    while( true ) {
      if (0 < iVar3 + -3) {
        puVar10 = (undefined1 *)(param_1 + lVar19);
        puVar9 = param_3 + 1;
        do {
          puVar25 = puVar9 + 4;
          puVar9[-1] = *puVar10;
          *puVar9 = puVar10[param_2];
          puVar9[1] = puVar10[param_2 * 2];
          puVar13 = puVar10 + param_2 * 3;
          puVar10 = puVar10 + param_2 * 4;
          puVar9[2] = *puVar13;
          puVar9 = puVar25;
        } while (puVar25 != param_3 + (ulong)uVar5 * 4 + 5);
      }
      if (iVar6 < iVar3) {
        puVar10 = (undefined1 *)(param_1 + lVar19 + lVar24 * param_2);
        puVar9 = param_3 + lVar24;
        do {
          uVar4 = *puVar10;
          puVar10 = puVar10 + param_2;
          puVar13 = puVar9 + 1;
          *puVar9 = uVar4;
          puVar9 = puVar13;
        } while (puVar13 != param_3 + lVar24 + 1 + (ulong)(uint)((iVar3 + -1) - iVar6));
      }
      param_3 = param_3 + param_4;
      if (lVar23 == lVar22 + 1 + (ulong)(uint)((iVar2 + -1) - iVar21)) break;
      lVar19 = lVar23;
      lVar23 = lVar23 + 1;
    }
  }
  return;
}


==================================================================

### FUNC 002fa678 (104 bytes) name=FUN_002fa678

void FUN_002fa678(long param_1,long param_2,int param_3)

{
  undefined1 *puVar1;
  undefined1 uVar2;
  uint uVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  undefined1 *puVar6;
  
  if (0 < param_3) {
    puVar1 = (undefined1 *)(param_1 + 1);
    for (uVar3 = param_3 - 2; uVar3 != 0xffffffff; uVar3 = uVar3 - 1) {
      puVar6 = puVar1 + param_2 + -1;
      puVar4 = puVar1;
      do {
        uVar2 = *puVar4;
        puVar5 = puVar4 + 1;
        *puVar4 = *puVar6;
        *puVar6 = uVar2;
        puVar6 = puVar6 + param_2;
        puVar4 = puVar5;
      } while (puVar5 != puVar1 + (ulong)uVar3 + 1);
      puVar1 = puVar1 + param_2 + 1;
    }
  }
  return;
}


==================================================================

### FUNC 002fa6e0 (804 bytes) name=FUN_002fa6e0

void FUN_002fa6e0(long param_1,long param_2,undefined2 *param_3,long param_4,int *param_5)

{
  undefined2 *puVar1;
  int iVar2;
  int iVar3;
  undefined2 uVar4;
  int iVar5;
  uint uVar6;
  undefined2 *puVar7;
  undefined2 *puVar8;
  undefined2 *puVar9;
  undefined2 *puVar10;
  undefined2 *puVar11;
  int iVar12;
  undefined2 *puVar13;
  undefined2 *puVar14;
  undefined2 *puVar15;
  undefined2 *puVar16;
  undefined2 *puVar17;
  long lVar18;
  long lVar19;
  undefined2 *puVar20;
  undefined2 *puVar21;
  long lVar22;
  uint uVar23;
  
  iVar2 = *param_5;
  iVar3 = param_5[1];
  if (iVar2 < 4) {
    iVar12 = 0;
  }
  else {
    uVar6 = iVar3 - 4U >> 2;
    iVar12 = (uVar6 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar12 = 0;
    }
    uVar23 = iVar2 - 4U >> 2;
    lVar22 = (long)iVar12 * 2;
    puVar9 = (undefined2 *)((long)param_3 + param_4);
    puVar8 = (undefined2 *)((long)puVar9 + param_4);
    puVar20 = (undefined2 *)((long)puVar8 + param_4);
    lVar19 = 0;
    puVar21 = param_3;
    do {
      if (0 < iVar3 + -3) {
        puVar11 = (undefined2 *)(param_1 + lVar19);
        lVar18 = lVar19 + param_2 + param_2;
        puVar7 = (undefined2 *)(param_1 + lVar19 + param_2);
        puVar10 = (undefined2 *)(param_1 + lVar18);
        puVar13 = (undefined2 *)(param_1 + lVar18 + param_2);
        lVar18 = 0;
        puVar14 = puVar21;
        puVar15 = puVar9;
        puVar16 = puVar8;
        puVar17 = puVar20;
        do {
          *puVar14 = *puVar11;
          lVar18 = lVar18 + 8;
          puVar14[1] = *puVar7;
          puVar14[2] = *puVar10;
          puVar14[3] = *puVar13;
          *puVar15 = puVar11[1];
          puVar15[1] = puVar7[1];
          puVar15[2] = puVar10[1];
          puVar15[3] = puVar13[1];
          *puVar16 = puVar11[2];
          puVar16[1] = puVar7[2];
          puVar16[2] = puVar10[2];
          puVar16[3] = puVar13[2];
          puVar1 = puVar11 + 3;
          puVar11 = puVar11 + param_2 * 2;
          *puVar17 = *puVar1;
          puVar1 = puVar7 + 3;
          puVar7 = puVar7 + param_2 * 2;
          puVar17[1] = *puVar1;
          puVar1 = puVar10 + 3;
          puVar10 = puVar10 + param_2 * 2;
          puVar17[2] = *puVar1;
          puVar1 = puVar13 + 3;
          puVar13 = puVar13 + param_2 * 2;
          puVar17[3] = *puVar1;
          puVar14 = puVar14 + 4;
          puVar15 = puVar15 + 4;
          puVar16 = puVar16 + 4;
          puVar17 = puVar17 + 4;
        } while (lVar18 != ((ulong)uVar6 + 1) * 8);
      }
      if (iVar12 < iVar3) {
        puVar11 = (undefined2 *)(param_1 + lVar19 + iVar12 * param_2);
        lVar18 = 0;
        do {
          *(undefined2 *)((long)puVar21 + lVar18 + lVar22) = *puVar11;
          *(undefined2 *)((long)puVar9 + lVar18 + lVar22) = puVar11[1];
          *(undefined2 *)((long)puVar8 + lVar18 + lVar22) = puVar11[2];
          puVar7 = puVar11 + 3;
          puVar11 = (undefined2 *)((long)puVar11 + param_2);
          *(undefined2 *)((long)puVar20 + lVar18 + lVar22) = *puVar7;
          lVar18 = lVar18 + 2;
        } while (lVar18 != ((ulong)(uint)((iVar3 + -1) - iVar12) + 1) * 2);
      }
      lVar19 = lVar19 + 8;
      puVar21 = puVar21 + param_4 * 2;
      puVar9 = puVar9 + param_4 * 2;
      puVar8 = puVar8 + param_4 * 2;
      puVar20 = puVar20 + param_4 * 2;
    } while (lVar19 != ((ulong)uVar23 + 1) * 8);
    iVar12 = (uVar23 + 1) * 4;
  }
  if (iVar12 < iVar2) {
    uVar6 = iVar3 - 4U >> 2;
    iVar5 = (uVar6 + 1) * 4;
    lVar19 = (long)iVar12;
    if (iVar3 + -3 < 1) {
      iVar5 = 0;
    }
    lVar18 = (long)iVar5;
    lVar22 = lVar19 << 1;
    param_3 = (undefined2 *)((long)param_3 + param_4 * lVar19);
    do {
      if (0 < iVar3 + -3) {
        puVar9 = (undefined2 *)(param_1 + lVar22);
        puVar8 = param_3 + 1;
        do {
          puVar21 = puVar8 + 4;
          puVar8[-1] = *puVar9;
          *puVar8 = *(undefined2 *)((long)puVar9 + param_2);
          puVar8[1] = puVar9[param_2];
          puVar20 = (undefined2 *)((long)puVar9 + param_2 * 3);
          puVar9 = puVar9 + param_2 * 2;
          puVar8[2] = *puVar20;
          puVar8 = puVar21;
        } while (puVar21 != param_3 + (ulong)uVar6 * 4 + 5);
      }
      if (iVar5 < iVar3) {
        puVar9 = (undefined2 *)(param_1 + lVar22 + lVar18 * param_2);
        puVar8 = param_3 + lVar18;
        do {
          uVar4 = *puVar9;
          puVar9 = (undefined2 *)((long)puVar9 + param_2);
          puVar20 = puVar8 + 1;
          *puVar8 = uVar4;
          puVar8 = puVar20;
        } while (puVar20 != param_3 + lVar18 + 1 + (ulong)(uint)((iVar3 + -1) - iVar5));
      }
      lVar22 = lVar22 + 2;
      param_3 = (undefined2 *)((long)param_3 + param_4);
    } while (lVar22 != (lVar19 + 1 + (ulong)(uint)((iVar2 + -1) - iVar12)) * 2);
  }
  return;
}


==================================================================

### FUNC 002faa04 (120 bytes) name=FUN_002faa04

void FUN_002faa04(long param_1,long param_2,int param_3)

{
  undefined2 uVar1;
  undefined2 *puVar2;
  undefined2 *puVar3;
  undefined2 *puVar4;
  long lVar5;
  undefined2 *puVar6;
  long lVar7;
  uint uVar8;
  
  if (0 < param_3) {
    lVar5 = 1;
    puVar6 = (undefined2 *)(param_1 + 2);
    uVar8 = param_3 - 2;
    lVar7 = 0;
    if (1 < param_3) {
      do {
        puVar4 = (undefined2 *)(param_2 + -2 + (long)puVar6);
        puVar2 = puVar6;
        do {
          uVar1 = *puVar2;
          puVar3 = puVar2 + 1;
          *puVar2 = *puVar4;
          *puVar4 = uVar1;
          puVar4 = (undefined2 *)((long)puVar4 + param_2);
          puVar2 = puVar3;
        } while (puVar3 != (undefined2 *)(param_1 + lVar7 + 2 + (lVar5 + (ulong)uVar8) * 2));
        lVar5 = lVar5 + 1;
        puVar6 = (undefined2 *)((long)puVar6 + param_2 + 2);
        uVar8 = uVar8 - 1;
        lVar7 = lVar7 + param_2;
      } while ((int)lVar5 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002faa7c (988 bytes) name=FUN_002faa7c

void FUN_002faa7c(undefined2 *param_1,long param_2,long param_3,long param_4,int *param_5)

{
  undefined1 *puVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined2 *puVar13;
  long lVar14;
  long lVar15;
  undefined2 *puVar16;
  undefined2 *puVar17;
  undefined2 *puVar18;
  undefined2 *puVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  
  iVar8 = *param_5;
  iVar9 = param_5[1];
  if (iVar8 < 4) {
    iVar22 = 0;
  }
  else {
    uVar11 = iVar9 - 4U >> 2;
    uVar12 = iVar8 - 4U >> 2;
    iVar22 = (uVar11 + 1) * 4;
    if (iVar9 + -3 < 1) {
      iVar22 = 0;
    }
    lVar20 = (long)iVar22 * 3;
    lVar15 = param_3;
    puVar13 = param_1;
    do {
      lVar21 = lVar15 + param_4;
      lVar2 = lVar21 + param_4;
      lVar3 = lVar2 + param_4;
      if (0 < iVar9 + -3) {
        puVar16 = (undefined2 *)((long)puVar13 + param_2);
        puVar17 = (undefined2 *)((long)puVar16 + param_2);
        lVar14 = 0;
        puVar18 = (undefined2 *)((long)puVar17 + param_2);
        puVar19 = puVar13;
        do {
          lVar4 = lVar15 + lVar14;
          *(undefined2 *)(lVar15 + lVar14) = *puVar19;
          lVar5 = lVar21 + lVar14;
          lVar6 = lVar2 + lVar14;
          lVar7 = lVar3 + lVar14;
          *(undefined1 *)(lVar4 + 2) = *(undefined1 *)(puVar19 + 1);
          *(undefined2 *)(lVar4 + 3) = *puVar16;
          *(undefined1 *)(lVar4 + 5) = *(undefined1 *)(puVar16 + 1);
          *(undefined2 *)(lVar4 + 6) = *puVar17;
          *(undefined1 *)(lVar4 + 8) = *(undefined1 *)(puVar17 + 1);
          *(undefined2 *)(lVar4 + 9) = *puVar18;
          *(undefined1 *)(lVar4 + 0xb) = *(undefined1 *)(puVar18 + 1);
          *(undefined2 *)(lVar21 + lVar14) = *(undefined2 *)((long)puVar19 + 3);
          *(undefined1 *)(lVar5 + 2) = *(undefined1 *)((long)puVar19 + 5);
          *(undefined2 *)(lVar5 + 3) = *(undefined2 *)((long)puVar16 + 3);
          *(undefined1 *)(lVar5 + 5) = *(undefined1 *)((long)puVar16 + 5);
          *(undefined2 *)(lVar5 + 6) = *(undefined2 *)((long)puVar17 + 3);
          *(undefined1 *)(lVar5 + 8) = *(undefined1 *)((long)puVar17 + 5);
          *(undefined2 *)(lVar5 + 9) = *(undefined2 *)((long)puVar18 + 3);
          *(undefined1 *)(lVar5 + 0xb) = *(undefined1 *)((long)puVar18 + 5);
          *(undefined2 *)(lVar2 + lVar14) = puVar19[3];
          *(undefined1 *)(lVar6 + 2) = *(undefined1 *)(puVar19 + 4);
          *(undefined2 *)(lVar6 + 3) = puVar16[3];
          *(undefined1 *)(lVar6 + 5) = *(undefined1 *)(puVar16 + 4);
          *(undefined2 *)(lVar6 + 6) = puVar17[3];
          *(undefined1 *)(lVar6 + 8) = *(undefined1 *)(puVar17 + 4);
          *(undefined2 *)(lVar6 + 9) = puVar18[3];
          *(undefined1 *)(lVar6 + 0xb) = *(undefined1 *)(puVar18 + 4);
          *(undefined2 *)(lVar3 + lVar14) = *(undefined2 *)((long)puVar19 + 9);
          lVar14 = lVar14 + 0xc;
          puVar1 = (undefined1 *)((long)puVar19 + 0xb);
          puVar19 = puVar19 + param_2 * 2;
          *(undefined1 *)(lVar7 + 2) = *puVar1;
          *(undefined2 *)(lVar7 + 3) = *(undefined2 *)((long)puVar16 + 9);
          puVar1 = (undefined1 *)((long)puVar16 + 0xb);
          puVar16 = puVar16 + param_2 * 2;
          *(undefined1 *)(lVar7 + 5) = *puVar1;
          *(undefined2 *)(lVar7 + 6) = *(undefined2 *)((long)puVar17 + 9);
          puVar1 = (undefined1 *)((long)puVar17 + 0xb);
          puVar17 = puVar17 + param_2 * 2;
          *(undefined1 *)(lVar7 + 8) = *puVar1;
          *(undefined2 *)(lVar7 + 9) = *(undefined2 *)((long)puVar18 + 9);
          puVar1 = (undefined1 *)((long)puVar18 + 0xb);
          puVar18 = puVar18 + param_2 * 2;
          *(undefined1 *)(lVar7 + 0xb) = *puVar1;
        } while (lVar14 != ((ulong)uVar11 + 1) * 0xc);
      }
      if (iVar22 < iVar9) {
        puVar16 = (undefined2 *)((long)puVar13 + iVar22 * param_2);
        lVar14 = 0;
        do {
          *(undefined2 *)(lVar15 + lVar20 + lVar14) = *puVar16;
          lVar4 = lVar3 + lVar20 + lVar14;
          *(undefined1 *)(lVar15 + lVar20 + lVar14 + 2) = *(undefined1 *)(puVar16 + 1);
          *(undefined2 *)(lVar21 + lVar20 + lVar14) = *(undefined2 *)((long)puVar16 + 3);
          *(undefined1 *)(lVar21 + lVar20 + lVar14 + 2) = *(undefined1 *)((long)puVar16 + 5);
          *(undefined2 *)(lVar2 + lVar20 + lVar14) = puVar16[3];
          *(undefined1 *)(lVar2 + lVar20 + lVar14 + 2) = *(undefined1 *)(puVar16 + 4);
          *(undefined2 *)(lVar3 + lVar20 + lVar14) = *(undefined2 *)((long)puVar16 + 9);
          lVar14 = lVar14 + 3;
          puVar1 = (undefined1 *)((long)puVar16 + 0xb);
          puVar16 = (undefined2 *)((long)puVar16 + param_2);
          *(undefined1 *)(lVar4 + 2) = *puVar1;
        } while (lVar14 != ((ulong)(uint)((iVar9 + -1) - iVar22) + 1) * 3);
      }
      puVar13 = puVar13 + 6;
      lVar15 = lVar3 + param_4;
    } while (puVar13 != param_1 + ((ulong)uVar12 + 1) * 6);
    iVar22 = (uVar12 + 1) * 4;
  }
  if (iVar22 < iVar8) {
    uVar11 = iVar9 - 4U >> 2;
    lVar15 = (long)iVar22;
    iVar10 = (uVar11 + 1) * 4;
    if (iVar9 + -3 < 1) {
      iVar10 = 0;
    }
    lVar21 = (long)iVar10;
    lVar20 = lVar15 * 3;
    puVar13 = (undefined2 *)(param_3 + param_4 * lVar15);
    do {
      if (0 < iVar9 + -3) {
        puVar16 = puVar13;
        puVar17 = (undefined2 *)((long)param_1 + lVar20);
        do {
          puVar18 = puVar16 + 6;
          *puVar16 = *puVar17;
          *(undefined1 *)(puVar16 + 1) = *(undefined1 *)(puVar17 + 1);
          *(undefined2 *)((long)puVar16 + 3) = *(undefined2 *)((long)puVar17 + param_2);
          *(undefined1 *)((long)puVar16 + 5) = *(undefined1 *)((long)puVar17 + param_2 + 2);
          puVar16[3] = puVar17[param_2];
          *(undefined1 *)(puVar16 + 4) = *(undefined1 *)(puVar17 + param_2 + 1);
          *(undefined2 *)((long)puVar16 + 9) = *(undefined2 *)((long)puVar17 + param_2 * 3);
          *(undefined1 *)((long)puVar16 + 0xb) = *(undefined1 *)((long)puVar17 + param_2 * 3 + 2);
          puVar16 = puVar18;
          puVar17 = puVar17 + param_2 * 2;
        } while (puVar18 != puVar13 + ((ulong)uVar11 + 1) * 6);
      }
      if (iVar10 < iVar9) {
        puVar16 = (undefined2 *)((long)param_1 + lVar20 + lVar21 * param_2);
        puVar17 = (undefined2 *)((long)puVar13 + lVar21 * 3);
        do {
          puVar19 = (undefined2 *)((long)puVar17 + 3);
          *puVar17 = *puVar16;
          puVar18 = puVar16 + 1;
          puVar16 = (undefined2 *)((long)puVar16 + param_2);
          *(undefined1 *)(puVar17 + 1) = *(undefined1 *)puVar18;
          puVar17 = puVar19;
        } while (puVar19 !=
                 (undefined2 *)
                 ((long)puVar13 + (lVar21 + 1 + (ulong)(uint)((iVar9 + -1) - iVar10)) * 3));
      }
      lVar20 = lVar20 + 3;
      puVar13 = (undefined2 *)((long)puVar13 + param_4);
    } while (lVar20 != (lVar15 + 1 + (ulong)(uint)((iVar8 + -1) - iVar22)) * 3);
  }
  return;
}


==================================================================

### FUNC 002fae58 (152 bytes) name=FUN_002fae58

void FUN_002fae58(long param_1,long param_2,int param_3)

{
  undefined2 *puVar1;
  undefined1 uVar2;
  undefined1 uVar3;
  undefined1 uVar4;
  undefined2 *puVar5;
  undefined2 *puVar6;
  long lVar7;
  undefined2 *puVar8;
  long lVar9;
  uint uVar10;
  
  if (0 < param_3) {
    lVar7 = 1;
    puVar8 = (undefined2 *)(param_1 + 3);
    uVar10 = param_3 - 2;
    lVar9 = 0;
    if (1 < param_3) {
      do {
        puVar6 = (undefined2 *)(param_2 + -3 + (long)puVar8);
        puVar5 = puVar8;
        do {
          puVar1 = (undefined2 *)((long)puVar5 + 3);
          uVar2 = *(undefined1 *)puVar5;
          uVar3 = *(undefined1 *)((long)puVar5 + 1);
          *puVar5 = *puVar6;
          uVar4 = *(undefined1 *)(puVar5 + 1);
          *(undefined1 *)(puVar5 + 1) = *(undefined1 *)(puVar6 + 1);
          *(undefined1 *)puVar6 = uVar2;
          *(undefined1 *)((long)puVar6 + 1) = uVar3;
          *(undefined1 *)(puVar6 + 1) = uVar4;
          puVar6 = (undefined2 *)((long)puVar6 + param_2);
          puVar5 = puVar1;
        } while (puVar1 != (undefined2 *)(param_1 + lVar9 + 3 + (lVar7 + (ulong)uVar10) * 3));
        lVar7 = lVar7 + 1;
        puVar8 = (undefined2 *)((long)puVar8 + param_2 + 3);
        uVar10 = uVar10 - 1;
        lVar9 = lVar9 + param_2;
      } while ((int)lVar7 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002faef0 (808 bytes) name=FUN_002faef0

void FUN_002faef0(long param_1,long param_2,undefined4 *param_3,long param_4,int *param_5)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  int iVar5;
  uint uVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  int iVar12;
  undefined4 *puVar13;
  undefined4 *puVar14;
  undefined4 *puVar15;
  undefined4 *puVar16;
  undefined4 *puVar17;
  long lVar18;
  long lVar19;
  undefined4 *puVar20;
  undefined4 *puVar21;
  long lVar22;
  uint uVar23;
  
  iVar2 = *param_5;
  iVar3 = param_5[1];
  if (iVar2 < 4) {
    iVar12 = 0;
  }
  else {
    uVar6 = iVar3 - 4U >> 2;
    iVar12 = (uVar6 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar12 = 0;
    }
    uVar23 = iVar2 - 4U >> 2;
    lVar22 = (long)iVar12 * 4;
    puVar9 = (undefined4 *)((long)param_3 + param_4);
    puVar8 = (undefined4 *)((long)puVar9 + param_4);
    puVar20 = (undefined4 *)((long)puVar8 + param_4);
    lVar19 = 0;
    puVar21 = param_3;
    do {
      if (0 < iVar3 + -3) {
        puVar11 = (undefined4 *)(param_1 + lVar19);
        lVar18 = lVar19 + param_2 + param_2;
        puVar7 = (undefined4 *)(param_1 + lVar19 + param_2);
        puVar10 = (undefined4 *)(param_1 + lVar18);
        puVar13 = (undefined4 *)(param_1 + lVar18 + param_2);
        lVar18 = 0;
        puVar14 = puVar21;
        puVar15 = puVar9;
        puVar16 = puVar8;
        puVar17 = puVar20;
        do {
          *puVar14 = *puVar11;
          lVar18 = lVar18 + 0x10;
          puVar14[1] = *puVar7;
          puVar14[2] = *puVar10;
          puVar14[3] = *puVar13;
          *puVar15 = puVar11[1];
          puVar15[1] = puVar7[1];
          puVar15[2] = puVar10[1];
          puVar15[3] = puVar13[1];
          *puVar16 = puVar11[2];
          puVar16[1] = puVar7[2];
          puVar16[2] = puVar10[2];
          puVar16[3] = puVar13[2];
          puVar1 = puVar11 + 3;
          puVar11 = puVar11 + param_2;
          *puVar17 = *puVar1;
          puVar1 = puVar7 + 3;
          puVar7 = puVar7 + param_2;
          puVar17[1] = *puVar1;
          puVar1 = puVar10 + 3;
          puVar10 = puVar10 + param_2;
          puVar17[2] = *puVar1;
          puVar1 = puVar13 + 3;
          puVar13 = puVar13 + param_2;
          puVar17[3] = *puVar1;
          puVar14 = puVar14 + 4;
          puVar15 = puVar15 + 4;
          puVar16 = puVar16 + 4;
          puVar17 = puVar17 + 4;
        } while (lVar18 != ((ulong)uVar6 + 1) * 0x10);
      }
      if (iVar12 < iVar3) {
        puVar11 = (undefined4 *)(param_1 + lVar19 + iVar12 * param_2);
        lVar18 = 0;
        do {
          *(undefined4 *)((long)puVar21 + lVar18 + lVar22) = *puVar11;
          *(undefined4 *)((long)puVar9 + lVar18 + lVar22) = puVar11[1];
          *(undefined4 *)((long)puVar8 + lVar18 + lVar22) = puVar11[2];
          puVar7 = puVar11 + 3;
          puVar11 = (undefined4 *)((long)puVar11 + param_2);
          *(undefined4 *)((long)puVar20 + lVar18 + lVar22) = *puVar7;
          lVar18 = lVar18 + 4;
        } while (lVar18 != ((ulong)(uint)((iVar3 + -1) - iVar12) + 1) * 4);
      }
      lVar19 = lVar19 + 0x10;
      puVar21 = puVar21 + param_4;
      puVar9 = puVar9 + param_4;
      puVar8 = puVar8 + param_4;
      puVar20 = puVar20 + param_4;
    } while (lVar19 != ((ulong)uVar23 + 1) * 0x10);
    iVar12 = (uVar23 + 1) * 4;
  }
  if (iVar12 < iVar2) {
    uVar6 = iVar3 - 4U >> 2;
    lVar19 = (long)iVar12;
    iVar5 = (uVar6 + 1) * 4;
    if (iVar3 + -3 < 1) {
      iVar5 = 0;
    }
    lVar18 = (long)iVar5;
    lVar22 = lVar19 << 2;
    param_3 = (undefined4 *)((long)param_3 + param_4 * lVar19);
    do {
      if (0 < iVar3 + -3) {
        puVar9 = (undefined4 *)(param_1 + lVar22);
        puVar8 = param_3 + 1;
        do {
          puVar21 = puVar8 + 4;
          puVar8[-1] = *puVar9;
          *puVar8 = *(undefined4 *)((long)puVar9 + param_2);
          puVar8[1] = *(undefined4 *)((long)puVar9 + param_2 * 2);
          puVar20 = (undefined4 *)((long)puVar9 + param_2 * 3);
          puVar9 = puVar9 + param_2;
          puVar8[2] = *puVar20;
          puVar8 = puVar21;
        } while (puVar21 != param_3 + (ulong)uVar6 * 4 + 5);
      }
      if (iVar5 < iVar3) {
        puVar9 = (undefined4 *)(param_1 + lVar22 + lVar18 * param_2);
        puVar8 = param_3 + lVar18;
        do {
          uVar4 = *puVar9;
          puVar9 = (undefined4 *)((long)puVar9 + param_2);
          puVar20 = puVar8 + 1;
          *puVar8 = uVar4;
          puVar8 = puVar20;
        } while (puVar20 != param_3 + lVar18 + 1 + (ulong)(uint)((iVar3 + -1) - iVar5));
      }
      lVar22 = lVar22 + 4;
      param_3 = (undefined4 *)((long)param_3 + param_4);
    } while (lVar22 != (lVar19 + 1 + (ulong)(uint)((iVar2 + -1) - iVar12)) * 4);
  }
  return;
}


==================================================================

### FUNC 002fb218 (120 bytes) name=FUN_002fb218

void FUN_002fb218(long param_1,long param_2,int param_3)

{
  undefined4 uVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  long lVar5;
  undefined4 *puVar6;
  long lVar7;
  uint uVar8;
  
  if (0 < param_3) {
    lVar5 = 1;
    puVar6 = (undefined4 *)(param_1 + 4);
    uVar8 = param_3 - 2;
    lVar7 = 0;
    if (1 < param_3) {
      do {
        puVar4 = (undefined4 *)(param_2 + -4 + (long)puVar6);
        puVar2 = puVar6;
        do {
          uVar1 = *puVar2;
          puVar3 = puVar2 + 1;
          *puVar2 = *puVar4;
          *puVar4 = uVar1;
          puVar4 = (undefined4 *)((long)puVar4 + param_2);
          puVar2 = puVar3;
        } while (puVar3 != (undefined4 *)(param_1 + lVar7 + 4 + (lVar5 + (ulong)uVar8) * 4));
        lVar5 = lVar5 + 1;
        puVar6 = (undefined4 *)((long)puVar6 + param_2 + 4);
        uVar8 = uVar8 - 1;
        lVar7 = lVar7 + param_2;
      } while ((int)lVar5 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fb290 (1012 bytes) name=FUN_002fb290

void FUN_002fb290(undefined4 *param_1,long param_2,long param_3,long param_4,int *param_5)

{
  undefined2 *puVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  undefined4 *puVar13;
  long lVar14;
  long lVar15;
  undefined4 *puVar16;
  undefined4 *puVar17;
  undefined4 *puVar18;
  undefined4 *puVar19;
  long lVar20;
  long lVar21;
  int iVar22;
  
  iVar8 = *param_5;
  iVar9 = param_5[1];
  if (iVar8 < 4) {
    iVar22 = 0;
  }
  else {
    uVar11 = iVar9 - 4U >> 2;
    iVar22 = (uVar11 + 1) * 4;
    uVar12 = iVar8 - 4U >> 2;
    if (iVar9 + -3 < 1) {
      iVar22 = 0;
    }
    lVar21 = (long)iVar22 * 6;
    lVar15 = param_3;
    puVar13 = param_1;
    do {
      lVar20 = lVar15 + param_4;
      lVar2 = lVar20 + param_4;
      lVar3 = lVar2 + param_4;
      if (0 < iVar9 + -3) {
        puVar16 = (undefined4 *)((long)puVar13 + param_2);
        puVar17 = (undefined4 *)((long)puVar16 + param_2);
        lVar14 = 0;
        puVar18 = (undefined4 *)((long)puVar17 + param_2);
        puVar19 = puVar13;
        do {
          lVar4 = lVar15 + lVar14;
          *(undefined4 *)(lVar15 + lVar14) = *puVar19;
          lVar5 = lVar20 + lVar14;
          lVar6 = lVar2 + lVar14;
          lVar7 = lVar3 + lVar14;
          *(undefined2 *)(lVar4 + 4) = *(undefined2 *)(puVar19 + 1);
          *(undefined4 *)(lVar4 + 6) = *puVar16;
          *(undefined2 *)(lVar4 + 10) = *(undefined2 *)(puVar16 + 1);
          *(undefined4 *)(lVar4 + 0xc) = *puVar17;
          *(undefined2 *)(lVar4 + 0x10) = *(undefined2 *)(puVar17 + 1);
          *(undefined4 *)(lVar4 + 0x12) = *puVar18;
          *(undefined2 *)(lVar4 + 0x16) = *(undefined2 *)(puVar18 + 1);
          *(undefined4 *)(lVar20 + lVar14) = *(undefined4 *)((long)puVar19 + 6);
          *(undefined2 *)(lVar5 + 4) = *(undefined2 *)((long)puVar19 + 10);
          *(undefined4 *)(lVar5 + 6) = *(undefined4 *)((long)puVar16 + 6);
          *(undefined2 *)(lVar5 + 10) = *(undefined2 *)((long)puVar16 + 10);
          *(undefined4 *)(lVar5 + 0xc) = *(undefined4 *)((long)puVar17 + 6);
          *(undefined2 *)(lVar5 + 0x10) = *(undefined2 *)((long)puVar17 + 10);
          *(undefined4 *)(lVar5 + 0x12) = *(undefined4 *)((long)puVar18 + 6);
          *(undefined2 *)(lVar5 + 0x16) = *(undefined2 *)((long)puVar18 + 10);
          *(undefined4 *)(lVar2 + lVar14) = puVar19[3];
          *(undefined2 *)(lVar6 + 4) = *(undefined2 *)(puVar19 + 4);
          *(undefined4 *)(lVar6 + 6) = puVar16[3];
          *(undefined2 *)(lVar6 + 10) = *(undefined2 *)(puVar16 + 4);
          *(undefined4 *)(lVar6 + 0xc) = puVar17[3];
          *(undefined2 *)(lVar6 + 0x10) = *(undefined2 *)(puVar17 + 4);
          *(undefined4 *)(lVar6 + 0x12) = puVar18[3];
          *(undefined2 *)(lVar6 + 0x16) = *(undefined2 *)(puVar18 + 4);
          *(undefined4 *)(lVar3 + lVar14) = *(undefined4 *)((long)puVar19 + 0x12);
          lVar14 = lVar14 + 0x18;
          puVar1 = (undefined2 *)((long)puVar19 + 0x16);
          puVar19 = puVar19 + param_2;
          *(undefined2 *)(lVar7 + 4) = *puVar1;
          *(undefined4 *)(lVar7 + 6) = *(undefined4 *)((long)puVar16 + 0x12);
          puVar1 = (undefined2 *)((long)puVar16 + 0x16);
          puVar16 = puVar16 + param_2;
          *(undefined2 *)(lVar7 + 10) = *puVar1;
          *(undefined4 *)(lVar7 + 0xc) = *(undefined4 *)((long)puVar17 + 0x12);
          puVar1 = (undefined2 *)((long)puVar17 + 0x16);
          puVar17 = puVar17 + param_2;
          *(undefined2 *)(lVar7 + 0x10) = *puVar1;
          *(undefined4 *)(lVar7 + 0x12) = *(undefined4 *)((long)puVar18 + 0x12);
          puVar1 = (undefined2 *)((long)puVar18 + 0x16);
          puVar18 = puVar18 + param_2;
          *(undefined2 *)(lVar7 + 0x16) = *puVar1;
        } while (lVar14 != ((ulong)uVar11 + 1) * 0x18);
      }
      if (iVar22 < iVar9) {
        puVar16 = (undefined4 *)((long)puVar13 + iVar22 * param_2);
        lVar14 = 0;
        do {
          *(undefined4 *)(lVar15 + lVar21 + lVar14) = *puVar16;
          lVar4 = lVar3 + lVar21 + lVar14;
          *(undefined2 *)(lVar15 + lVar21 + lVar14 + 4) = *(undefined2 *)(puVar16 + 1);
          *(undefined4 *)(lVar20 + lVar21 + lVar14) = *(undefined4 *)((long)puVar16 + 6);
          *(undefined2 *)(lVar20 + lVar21 + lVar14 + 4) = *(undefined2 *)((long)puVar16 + 10);
          *(undefined4 *)(lVar2 + lVar21 + lVar14) = puVar16[3];
          *(undefined2 *)(lVar2 + lVar21 + lVar14 + 4) = *(undefined2 *)(puVar16 + 4);
          *(undefined4 *)(lVar3 + lVar21 + lVar14) = *(undefined4 *)((long)puVar16 + 0x12);
          lVar14 = lVar14 + 6;
          puVar1 = (undefined2 *)((long)puVar16 + 0x16);
          puVar16 = (undefined4 *)((long)puVar16 + param_2);
          *(undefined2 *)(lVar4 + 4) = *puVar1;
        } while (lVar14 != ((ulong)(uint)((iVar9 + -1) - iVar22) + 1) * 6);
      }
      puVar13 = puVar13 + 6;
      lVar15 = lVar3 + param_4;
    } while (puVar13 != param_1 + ((ulong)uVar12 + 1) * 6);
    iVar22 = (uVar12 + 1) * 4;
  }
  if (iVar22 < iVar8) {
    uVar11 = iVar9 - 4U >> 2;
    lVar15 = (long)iVar22;
    iVar10 = (uVar11 + 1) * 4;
    if (iVar9 + -3 < 1) {
      iVar10 = 0;
    }
    lVar20 = (long)iVar10;
    puVar13 = (undefined4 *)(param_3 + param_4 * lVar15);
    lVar21 = lVar15 * 6;
    do {
      if (0 < iVar9 + -3) {
        puVar16 = puVar13;
        puVar17 = (undefined4 *)((long)param_1 + lVar21);
        do {
          puVar18 = puVar16 + 6;
          *puVar16 = *puVar17;
          *(undefined2 *)(puVar16 + 1) = *(undefined2 *)(puVar17 + 1);
          *(undefined4 *)((long)puVar16 + 6) = *(undefined4 *)((long)puVar17 + param_2);
          *(undefined2 *)((long)puVar16 + 10) = *(undefined2 *)((long)puVar17 + param_2 + 4);
          puVar16[3] = *(undefined4 *)((long)puVar17 + param_2 * 2);
          *(undefined2 *)(puVar16 + 4) = *(undefined2 *)((long)puVar17 + param_2 * 2 + 4);
          *(undefined4 *)((long)puVar16 + 0x12) = *(undefined4 *)((long)puVar17 + param_2 * 3);
          *(undefined2 *)((long)puVar16 + 0x16) = *(undefined2 *)((long)puVar17 + param_2 * 3 + 4);
          puVar16 = puVar18;
          puVar17 = puVar17 + param_2;
        } while (puVar18 != puVar13 + ((ulong)uVar11 + 1) * 6);
      }
      if (iVar10 < iVar9) {
        puVar16 = (undefined4 *)((long)param_1 + lVar21 + lVar20 * param_2);
        puVar17 = (undefined4 *)((long)puVar13 + lVar20 * 6);
        do {
          puVar19 = (undefined4 *)((long)puVar17 + 6);
          *puVar17 = *puVar16;
          puVar18 = puVar16 + 1;
          puVar16 = (undefined4 *)((long)puVar16 + param_2);
          *(undefined2 *)(puVar17 + 1) = *(undefined2 *)puVar18;
          puVar17 = puVar19;
        } while (puVar19 !=
                 (undefined4 *)
                 ((long)puVar13 + (lVar20 + 1 + (ulong)(uint)((iVar9 + -1) - iVar10)) * 6));
      }
      lVar21 = lVar21 + 6;
      puVar13 = (undefined4 *)((long)puVar13 + param_4);
    } while (lVar21 != (lVar15 + 1 + (ulong)(uint)((iVar8 + -1) - iVar22)) * 6);
  }
  return;
}


==================================================================

### FUNC 002fb684 (152 bytes) name=FUN_002fb684

void FUN_002fb684(long param_1,long param_2,int param_3)

{
  undefined4 *puVar1;
  undefined2 uVar2;
  undefined2 uVar3;
  undefined2 uVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  long lVar7;
  undefined4 *puVar8;
  long lVar9;
  uint uVar10;
  
  if (0 < param_3) {
    lVar7 = 1;
    puVar8 = (undefined4 *)(param_1 + 6);
    uVar10 = param_3 - 2;
    lVar9 = 0;
    if (1 < param_3) {
      do {
        puVar6 = (undefined4 *)(param_2 + -6 + (long)puVar8);
        puVar5 = puVar8;
        do {
          puVar1 = (undefined4 *)((long)puVar5 + 6);
          uVar2 = *(undefined2 *)puVar5;
          uVar3 = *(undefined2 *)((long)puVar5 + 2);
          *puVar5 = *puVar6;
          uVar4 = *(undefined2 *)(puVar5 + 1);
          *(undefined2 *)(puVar5 + 1) = *(undefined2 *)(puVar6 + 1);
          *(undefined2 *)puVar6 = uVar2;
          *(undefined2 *)((long)puVar6 + 2) = uVar3;
          *(undefined2 *)(puVar6 + 1) = uVar4;
          puVar6 = (undefined4 *)((long)puVar6 + param_2);
          puVar5 = puVar1;
        } while (puVar1 != (undefined4 *)(param_1 + lVar9 + 6 + (lVar7 + (ulong)uVar10) * 6));
        lVar7 = lVar7 + 1;
        puVar8 = (undefined4 *)((long)puVar8 + param_2 + 6);
        uVar10 = uVar10 - 1;
        lVar9 = lVar9 + param_2;
      } while ((int)lVar7 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fb71c (764 bytes) name=FUN_002fb71c

void FUN_002fb71c(long param_1,long param_2,long param_3,long param_4,int *param_5)

{
  undefined8 *puVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  long lVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  undefined8 *puVar17;
  undefined8 uVar18;
  undefined8 *puVar19;
  long lVar20;
  long lVar21;
  long lVar22;
  long lVar23;
  int iVar24;
  
  iVar9 = *param_5;
  iVar10 = param_5[1];
  if (iVar9 < 4) {
    iVar24 = 0;
  }
  else {
    uVar12 = iVar10 - 4U >> 2;
    iVar24 = (uVar12 + 1) * 4;
    if (iVar10 + -3 < 1) {
      iVar24 = 0;
    }
    uVar13 = iVar9 - 4U >> 2;
    lVar20 = param_2 * 4;
    lVar22 = 0;
    lVar23 = (long)iVar24 * 8;
    lVar21 = param_3;
    do {
      lVar2 = lVar21 + param_4;
      lVar3 = lVar2 + param_4;
      lVar4 = lVar3 + param_4;
      if (0 < iVar10 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar22);
        lVar5 = lVar22 + param_2 + param_2;
        lVar14 = 0;
        puVar15 = (undefined8 *)(param_1 + lVar22 + param_2);
        puVar17 = (undefined8 *)(param_1 + lVar5);
        puVar19 = (undefined8 *)(param_1 + lVar5 + param_2);
        do {
          lVar5 = lVar21 + lVar14;
          *(undefined8 *)(lVar21 + lVar14) = *puVar16;
          lVar6 = lVar2 + lVar14;
          lVar7 = lVar3 + lVar14;
          lVar8 = lVar4 + lVar14;
          *(undefined8 *)(lVar5 + 8) = *puVar15;
          *(undefined8 *)(lVar5 + 0x10) = *puVar17;
          *(undefined8 *)(lVar5 + 0x18) = *puVar19;
          *(undefined8 *)(lVar2 + lVar14) = puVar16[1];
          *(undefined8 *)(lVar6 + 8) = puVar15[1];
          *(undefined8 *)(lVar6 + 0x10) = puVar17[1];
          *(undefined8 *)(lVar6 + 0x18) = puVar19[1];
          *(undefined8 *)(lVar3 + lVar14) = puVar16[2];
          *(undefined8 *)(lVar7 + 8) = puVar15[2];
          *(undefined8 *)(lVar7 + 0x10) = puVar17[2];
          *(undefined8 *)(lVar7 + 0x18) = puVar19[2];
          puVar1 = puVar16 + 3;
          puVar16 = (undefined8 *)((long)puVar16 + lVar20);
          *(undefined8 *)(lVar4 + lVar14) = *puVar1;
          lVar14 = lVar14 + 0x20;
          puVar1 = puVar15 + 3;
          puVar15 = (undefined8 *)((long)puVar15 + lVar20);
          *(undefined8 *)(lVar8 + 8) = *puVar1;
          puVar1 = puVar17 + 3;
          puVar17 = (undefined8 *)((long)puVar17 + lVar20);
          *(undefined8 *)(lVar8 + 0x10) = *puVar1;
          puVar1 = puVar19 + 3;
          puVar19 = (undefined8 *)((long)puVar19 + lVar20);
          *(undefined8 *)(lVar8 + 0x18) = *puVar1;
        } while (lVar14 != ((ulong)uVar12 + 1) * 0x20);
      }
      if (iVar24 < iVar10) {
        puVar16 = (undefined8 *)(param_1 + lVar22 + iVar24 * param_2);
        lVar14 = 0;
        do {
          *(undefined8 *)(lVar21 + lVar23 + lVar14) = *puVar16;
          *(undefined8 *)(lVar2 + lVar23 + lVar14) = puVar16[1];
          *(undefined8 *)(lVar3 + lVar23 + lVar14) = puVar16[2];
          puVar15 = puVar16 + 3;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
          *(undefined8 *)(lVar4 + lVar23 + lVar14) = *puVar15;
          lVar14 = lVar14 + 8;
        } while (lVar14 != ((ulong)(uint)((iVar10 + -1) - iVar24) + 1) * 8);
      }
      lVar22 = lVar22 + 0x20;
      lVar21 = lVar4 + param_4;
    } while (lVar22 != ((ulong)uVar13 + 1) * 0x20);
    iVar24 = (uVar13 + 1) * 4;
  }
  if (iVar24 < iVar9) {
    uVar12 = iVar10 - 4U >> 2;
    lVar22 = (long)iVar24;
    iVar11 = (uVar12 + 1) * 4;
    if (iVar10 + -3 < 1) {
      iVar11 = 0;
    }
    lVar20 = (long)iVar11;
    lVar21 = lVar22 << 3;
    param_3 = param_3 + param_4 * lVar22;
    do {
      if (0 < iVar10 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar21);
        puVar15 = (undefined8 *)(param_3 + 8);
        do {
          puVar19 = puVar15 + 4;
          puVar15[-1] = *puVar16;
          *puVar15 = *(undefined8 *)((long)puVar16 + param_2);
          puVar15[1] = *(undefined8 *)((long)puVar16 + param_2 * 2);
          puVar17 = (undefined8 *)((long)puVar16 + param_2 * 3);
          puVar16 = (undefined8 *)((long)puVar16 + param_2 * 4);
          puVar15[2] = *puVar17;
          puVar15 = puVar19;
        } while (puVar19 != (undefined8 *)(param_3 + (ulong)uVar12 * 0x20 + 0x28));
      }
      if (iVar11 < iVar10) {
        puVar16 = (undefined8 *)(param_1 + lVar21 + lVar20 * param_2);
        puVar15 = (undefined8 *)(param_3 + lVar20 * 8);
        do {
          uVar18 = *puVar16;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
          puVar17 = puVar15 + 1;
          *puVar15 = uVar18;
          puVar15 = puVar17;
        } while (puVar17 !=
                 (undefined8 *)(param_3 + (lVar20 + 1 + (ulong)(uint)((iVar10 + -1) - iVar11)) * 8))
        ;
      }
      lVar21 = lVar21 + 8;
      param_3 = param_3 + param_4;
    } while (lVar21 != (lVar22 + 1 + (ulong)(uint)((iVar9 + -1) - iVar24)) * 8);
  }
  return;
}


==================================================================

### FUNC 002fba18 (128 bytes) name=FUN_002fba18

void FUN_002fba18(long param_1,long param_2,int param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  long lVar6;
  undefined8 *puVar7;
  long lVar8;
  uint uVar9;
  
  if (0 < param_3) {
    lVar6 = 1;
    puVar7 = (undefined8 *)(param_1 + 8);
    uVar9 = param_3 - 2;
    lVar8 = 0;
    if (1 < param_3) {
      do {
        puVar5 = (undefined8 *)(param_2 + -8 + (long)puVar7);
        puVar3 = puVar7;
        do {
          uVar1 = *(undefined4 *)puVar3;
          uVar2 = *(undefined4 *)((long)puVar3 + 4);
          puVar4 = puVar3 + 1;
          *puVar3 = *puVar5;
          *(undefined4 *)puVar5 = uVar1;
          *(undefined4 *)((long)puVar5 + 4) = uVar2;
          puVar5 = (undefined8 *)((long)puVar5 + param_2);
          puVar3 = puVar4;
        } while (puVar4 != (undefined8 *)(param_1 + lVar8 + 8 + (lVar6 + (ulong)uVar9) * 8));
        lVar6 = lVar6 + 1;
        puVar7 = (undefined8 *)((long)puVar7 + param_2 + 8);
        uVar9 = uVar9 - 1;
        lVar8 = lVar8 + param_2;
      } while ((int)lVar6 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fba98 (1012 bytes) name=FUN_002fba98

void FUN_002fba98(undefined8 *param_1,long param_2,long param_3,long param_4,int *param_5)

{
  undefined4 *puVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  undefined8 *puVar14;
  long lVar15;
  long lVar16;
  undefined8 *puVar17;
  undefined8 *puVar18;
  undefined8 *puVar19;
  undefined8 *puVar20;
  long lVar21;
  long lVar22;
  int iVar23;
  
  iVar9 = *param_5;
  iVar10 = param_5[1];
  if (iVar9 < 4) {
    iVar23 = 0;
  }
  else {
    uVar12 = iVar10 - 4U >> 2;
    iVar23 = (uVar12 + 1) * 4;
    uVar13 = iVar9 - 4U >> 2;
    if (iVar10 + -3 < 1) {
      iVar23 = 0;
    }
    lVar21 = param_2 * 4;
    lVar22 = (long)iVar23 * 0xc;
    lVar16 = param_3;
    puVar14 = param_1;
    do {
      lVar2 = lVar16 + param_4;
      lVar3 = lVar2 + param_4;
      lVar4 = lVar3 + param_4;
      if (0 < iVar10 + -3) {
        puVar17 = (undefined8 *)((long)puVar14 + param_2);
        puVar18 = (undefined8 *)((long)puVar17 + param_2);
        lVar15 = 0;
        puVar19 = (undefined8 *)((long)puVar18 + param_2);
        puVar20 = puVar14;
        do {
          lVar5 = lVar16 + lVar15;
          *(undefined8 *)(lVar16 + lVar15) = *puVar20;
          lVar6 = lVar2 + lVar15;
          lVar7 = lVar3 + lVar15;
          lVar8 = lVar4 + lVar15;
          *(undefined4 *)(lVar5 + 8) = *(undefined4 *)(puVar20 + 1);
          *(undefined8 *)(lVar5 + 0xc) = *puVar17;
          *(undefined4 *)(lVar5 + 0x14) = *(undefined4 *)(puVar17 + 1);
          *(undefined8 *)(lVar5 + 0x18) = *puVar18;
          *(undefined4 *)(lVar5 + 0x20) = *(undefined4 *)(puVar18 + 1);
          *(undefined8 *)(lVar5 + 0x24) = *puVar19;
          *(undefined4 *)(lVar5 + 0x2c) = *(undefined4 *)(puVar19 + 1);
          *(undefined8 *)(lVar2 + lVar15) = *(undefined8 *)((long)puVar20 + 0xc);
          *(undefined4 *)(lVar6 + 8) = *(undefined4 *)((long)puVar20 + 0x14);
          *(undefined8 *)(lVar6 + 0xc) = *(undefined8 *)((long)puVar17 + 0xc);
          *(undefined4 *)(lVar6 + 0x14) = *(undefined4 *)((long)puVar17 + 0x14);
          *(undefined8 *)(lVar6 + 0x18) = *(undefined8 *)((long)puVar18 + 0xc);
          *(undefined4 *)(lVar6 + 0x20) = *(undefined4 *)((long)puVar18 + 0x14);
          *(undefined8 *)(lVar6 + 0x24) = *(undefined8 *)((long)puVar19 + 0xc);
          *(undefined4 *)(lVar6 + 0x2c) = *(undefined4 *)((long)puVar19 + 0x14);
          *(undefined8 *)(lVar3 + lVar15) = puVar20[3];
          *(undefined4 *)(lVar7 + 8) = *(undefined4 *)(puVar20 + 4);
          *(undefined8 *)(lVar7 + 0xc) = puVar17[3];
          *(undefined4 *)(lVar7 + 0x14) = *(undefined4 *)(puVar17 + 4);
          *(undefined8 *)(lVar7 + 0x18) = puVar18[3];
          *(undefined4 *)(lVar7 + 0x20) = *(undefined4 *)(puVar18 + 4);
          *(undefined8 *)(lVar7 + 0x24) = puVar19[3];
          *(undefined4 *)(lVar7 + 0x2c) = *(undefined4 *)(puVar19 + 4);
          *(undefined8 *)(lVar4 + lVar15) = *(undefined8 *)((long)puVar20 + 0x24);
          lVar15 = lVar15 + 0x30;
          puVar1 = (undefined4 *)((long)puVar20 + 0x2c);
          puVar20 = (undefined8 *)((long)puVar20 + lVar21);
          *(undefined4 *)(lVar8 + 8) = *puVar1;
          *(undefined8 *)(lVar8 + 0xc) = *(undefined8 *)((long)puVar17 + 0x24);
          puVar1 = (undefined4 *)((long)puVar17 + 0x2c);
          puVar17 = (undefined8 *)((long)puVar17 + lVar21);
          *(undefined4 *)(lVar8 + 0x14) = *puVar1;
          *(undefined8 *)(lVar8 + 0x18) = *(undefined8 *)((long)puVar18 + 0x24);
          puVar1 = (undefined4 *)((long)puVar18 + 0x2c);
          puVar18 = (undefined8 *)((long)puVar18 + lVar21);
          *(undefined4 *)(lVar8 + 0x20) = *puVar1;
          *(undefined8 *)(lVar8 + 0x24) = *(undefined8 *)((long)puVar19 + 0x24);
          puVar1 = (undefined4 *)((long)puVar19 + 0x2c);
          puVar19 = (undefined8 *)((long)puVar19 + lVar21);
          *(undefined4 *)(lVar8 + 0x2c) = *puVar1;
        } while (lVar15 != ((ulong)uVar12 + 1) * 0x30);
      }
      if (iVar23 < iVar10) {
        puVar17 = (undefined8 *)((long)puVar14 + iVar23 * param_2);
        lVar15 = 0;
        do {
          *(undefined8 *)(lVar16 + lVar22 + lVar15) = *puVar17;
          lVar5 = lVar4 + lVar22 + lVar15;
          *(undefined4 *)(lVar16 + lVar22 + lVar15 + 8) = *(undefined4 *)(puVar17 + 1);
          *(undefined8 *)(lVar2 + lVar22 + lVar15) = *(undefined8 *)((long)puVar17 + 0xc);
          *(undefined4 *)(lVar2 + lVar22 + lVar15 + 8) = *(undefined4 *)((long)puVar17 + 0x14);
          *(undefined8 *)(lVar3 + lVar22 + lVar15) = puVar17[3];
          *(undefined4 *)(lVar3 + lVar22 + lVar15 + 8) = *(undefined4 *)(puVar17 + 4);
          *(undefined8 *)(lVar4 + lVar22 + lVar15) = *(undefined8 *)((long)puVar17 + 0x24);
          lVar15 = lVar15 + 0xc;
          puVar1 = (undefined4 *)((long)puVar17 + 0x2c);
          puVar17 = (undefined8 *)((long)puVar17 + param_2);
          *(undefined4 *)(lVar5 + 8) = *puVar1;
        } while (lVar15 != ((ulong)(uint)((iVar10 + -1) - iVar23) + 1) * 0xc);
      }
      puVar14 = puVar14 + 6;
      lVar16 = lVar4 + param_4;
    } while (puVar14 != param_1 + ((ulong)uVar13 + 1) * 6);
    iVar23 = (uVar13 + 1) * 4;
  }
  if (iVar23 < iVar9) {
    uVar12 = iVar10 - 4U >> 2;
    lVar16 = (long)iVar23;
    iVar11 = (uVar12 + 1) * 4;
    if (iVar10 + -3 < 1) {
      iVar11 = 0;
    }
    lVar22 = (long)iVar11;
    puVar14 = (undefined8 *)(param_3 + param_4 * lVar16);
    lVar21 = lVar16 * 0xc;
    do {
      if (0 < iVar10 + -3) {
        puVar17 = puVar14;
        puVar18 = (undefined8 *)((long)param_1 + lVar21);
        do {
          puVar19 = puVar17 + 6;
          *puVar17 = *puVar18;
          *(undefined4 *)(puVar17 + 1) = *(undefined4 *)(puVar18 + 1);
          *(undefined8 *)((long)puVar17 + 0xc) = *(undefined8 *)((long)puVar18 + param_2);
          *(undefined4 *)((long)puVar17 + 0x14) = *(undefined4 *)((long)puVar18 + param_2 + 8);
          puVar17[3] = *(undefined8 *)((long)puVar18 + param_2 * 2);
          *(undefined4 *)(puVar17 + 4) = *(undefined4 *)((long)puVar18 + param_2 * 2 + 8);
          *(undefined8 *)((long)puVar17 + 0x24) = *(undefined8 *)((long)puVar18 + param_2 * 3);
          *(undefined4 *)((long)puVar17 + 0x2c) = *(undefined4 *)((long)puVar18 + param_2 * 3 + 8);
          puVar17 = puVar19;
          puVar18 = (undefined8 *)((long)puVar18 + param_2 * 4);
        } while (puVar19 != puVar14 + ((ulong)uVar12 + 1) * 6);
      }
      if (iVar11 < iVar10) {
        puVar17 = (undefined8 *)((long)param_1 + lVar21 + lVar22 * param_2);
        puVar18 = (undefined8 *)((long)puVar14 + lVar22 * 0xc);
        do {
          puVar20 = (undefined8 *)((long)puVar18 + 0xc);
          *puVar18 = *puVar17;
          puVar19 = puVar17 + 1;
          puVar17 = (undefined8 *)((long)puVar17 + param_2);
          *(undefined4 *)(puVar18 + 1) = *(undefined4 *)puVar19;
          puVar18 = puVar20;
        } while (puVar20 !=
                 (undefined8 *)
                 ((long)puVar14 + (lVar22 + 1 + (ulong)(uint)((iVar10 + -1) - iVar11)) * 0xc));
      }
      lVar21 = lVar21 + 0xc;
      puVar14 = (undefined8 *)((long)puVar14 + param_4);
    } while (lVar21 != (lVar16 + 1 + (ulong)(uint)((iVar9 + -1) - iVar23)) * 0xc);
  }
  return;
}


==================================================================

### FUNC 002fbe8c (152 bytes) name=FUN_002fbe8c

void FUN_002fbe8c(long param_1,long param_2,int param_3)

{
  undefined8 *puVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  long lVar7;
  undefined8 *puVar8;
  long lVar9;
  uint uVar10;
  
  if (0 < param_3) {
    lVar7 = 1;
    puVar8 = (undefined8 *)(param_1 + 0xc);
    uVar10 = param_3 - 2;
    lVar9 = 0;
    if (1 < param_3) {
      do {
        puVar6 = (undefined8 *)(param_2 + -0xc + (long)puVar8);
        puVar5 = puVar8;
        do {
          puVar1 = (undefined8 *)((long)puVar5 + 0xc);
          uVar2 = *(undefined4 *)puVar5;
          uVar3 = *(undefined4 *)((long)puVar5 + 4);
          *puVar5 = *puVar6;
          uVar4 = *(undefined4 *)(puVar5 + 1);
          *(undefined4 *)(puVar5 + 1) = *(undefined4 *)(puVar6 + 1);
          *(undefined4 *)puVar6 = uVar2;
          *(undefined4 *)((long)puVar6 + 4) = uVar3;
          *(undefined4 *)(puVar6 + 1) = uVar4;
          puVar6 = (undefined8 *)((long)puVar6 + param_2);
          puVar5 = puVar1;
        } while (puVar1 != (undefined8 *)(param_1 + lVar9 + 0xc + (lVar7 + (ulong)uVar10) * 0xc));
        lVar7 = lVar7 + 1;
        puVar8 = (undefined8 *)((long)puVar8 + param_2 + 0xc);
        uVar10 = uVar10 - 1;
        lVar9 = lVar9 + param_2;
      } while ((int)lVar7 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fbf24 (808 bytes) name=FUN_002fbf24

void FUN_002fbf24(long param_1,long param_2,long param_3,long param_4,int *param_5)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  int iVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  long lVar23;
  uint uVar24;
  
  iVar10 = *param_5;
  iVar11 = param_5[1];
  if (iVar10 < 4) {
    iVar20 = 0;
  }
  else {
    uVar13 = iVar11 - 4U >> 2;
    iVar20 = (uVar13 + 1) * 4;
    lVar18 = 0;
    uVar24 = iVar10 - 4U >> 2;
    lVar17 = param_2 * 4;
    if (iVar11 + -3 < 1) {
      iVar20 = 0;
    }
    lVar19 = (long)iVar20 * 0x10;
    lVar23 = param_3;
    do {
      lVar1 = lVar23 + param_4;
      lVar2 = lVar1 + param_4;
      lVar3 = lVar2 + param_4;
      if (0 < iVar11 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar18);
        lVar4 = lVar18 + param_2 + param_2;
        lVar14 = 0;
        puVar15 = (undefined8 *)(param_1 + lVar18 + param_2);
        puVar21 = (undefined8 *)(param_1 + lVar4);
        puVar22 = (undefined8 *)(param_1 + lVar4 + param_2);
        do {
          puVar5 = (undefined8 *)(lVar23 + lVar14);
          puVar6 = (undefined8 *)(lVar1 + lVar14);
          uVar9 = puVar16[1];
          puVar7 = (undefined8 *)(lVar2 + lVar14);
          puVar8 = (undefined8 *)(lVar3 + lVar14);
          *puVar5 = *puVar16;
          puVar5[1] = uVar9;
          lVar14 = lVar14 + 0x40;
          uVar9 = puVar15[1];
          puVar5[2] = *puVar15;
          puVar5[3] = uVar9;
          uVar9 = puVar21[1];
          puVar5[4] = *puVar21;
          puVar5[5] = uVar9;
          uVar9 = puVar22[1];
          puVar5[6] = *puVar22;
          puVar5[7] = uVar9;
          uVar9 = puVar16[3];
          *puVar6 = puVar16[2];
          puVar6[1] = uVar9;
          uVar9 = puVar15[3];
          puVar6[2] = puVar15[2];
          puVar6[3] = uVar9;
          uVar9 = puVar21[3];
          puVar6[4] = puVar21[2];
          puVar6[5] = uVar9;
          uVar9 = puVar22[3];
          puVar6[6] = puVar22[2];
          puVar6[7] = uVar9;
          uVar9 = puVar16[5];
          *puVar7 = puVar16[4];
          puVar7[1] = uVar9;
          uVar9 = puVar15[5];
          puVar7[2] = puVar15[4];
          puVar7[3] = uVar9;
          uVar9 = puVar21[5];
          puVar7[4] = puVar21[4];
          puVar7[5] = uVar9;
          uVar9 = puVar22[5];
          puVar7[6] = puVar22[4];
          puVar7[7] = uVar9;
          uVar9 = puVar16[7];
          *puVar8 = puVar16[6];
          puVar8[1] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + lVar17);
          uVar9 = puVar15[7];
          puVar8[2] = puVar15[6];
          puVar8[3] = uVar9;
          puVar15 = (undefined8 *)((long)puVar15 + lVar17);
          uVar9 = puVar21[7];
          puVar8[4] = puVar21[6];
          puVar8[5] = uVar9;
          puVar21 = (undefined8 *)((long)puVar21 + lVar17);
          uVar9 = puVar22[7];
          puVar8[6] = puVar22[6];
          puVar8[7] = uVar9;
          puVar22 = (undefined8 *)((long)puVar22 + lVar17);
        } while (lVar14 != ((ulong)uVar13 + 1) * 0x40);
      }
      if (iVar20 < iVar11) {
        puVar16 = (undefined8 *)(param_1 + lVar18 + iVar20 * param_2);
        lVar14 = 0;
        do {
          puVar15 = (undefined8 *)(lVar23 + lVar19 + lVar14);
          puVar21 = (undefined8 *)(lVar1 + lVar19 + lVar14);
          uVar9 = puVar16[1];
          puVar22 = (undefined8 *)(lVar2 + lVar19 + lVar14);
          puVar5 = (undefined8 *)(lVar3 + lVar19 + lVar14);
          *puVar15 = *puVar16;
          puVar15[1] = uVar9;
          lVar14 = lVar14 + 0x10;
          uVar9 = puVar16[3];
          *puVar21 = puVar16[2];
          puVar21[1] = uVar9;
          uVar9 = puVar16[5];
          *puVar22 = puVar16[4];
          puVar22[1] = uVar9;
          uVar9 = puVar16[7];
          *puVar5 = puVar16[6];
          puVar5[1] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
        } while (lVar14 != ((ulong)(uint)((iVar11 + -1) - iVar20) + 1) * 0x10);
      }
      lVar18 = lVar18 + 0x40;
      lVar23 = lVar3 + param_4;
    } while (lVar18 != ((ulong)uVar24 + 1) * 0x40);
    iVar20 = (uVar24 + 1) * 4;
  }
  if (iVar20 < iVar10) {
    uVar13 = iVar11 - 4U >> 2;
    lVar18 = (long)iVar20;
    iVar12 = (uVar13 + 1) * 4;
    if (iVar11 + -3 < 1) {
      iVar12 = 0;
    }
    lVar17 = lVar18 << 4;
    lVar23 = (long)iVar12;
    param_3 = param_3 + param_4 * lVar18;
    do {
      if (0 < iVar11 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar17);
        puVar15 = (undefined8 *)(param_3 + 0x10);
        do {
          puVar21 = puVar15 + 8;
          puVar22 = (undefined8 *)((long)puVar16 + param_2);
          uVar9 = puVar16[1];
          puVar5 = (undefined8 *)((long)puVar16 + param_2 * 2);
          puVar6 = (undefined8 *)((long)puVar16 + param_2 * 3);
          puVar15[-2] = *puVar16;
          puVar15[-1] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2 * 4);
          uVar9 = puVar22[1];
          *puVar15 = *puVar22;
          puVar15[1] = uVar9;
          uVar9 = puVar5[1];
          puVar15[2] = *puVar5;
          puVar15[3] = uVar9;
          uVar9 = puVar6[1];
          puVar15[4] = *puVar6;
          puVar15[5] = uVar9;
          puVar15 = puVar21;
        } while (puVar21 != (undefined8 *)(param_3 + (ulong)uVar13 * 0x40 + 0x50));
      }
      if (iVar12 < iVar11) {
        puVar16 = (undefined8 *)(param_1 + lVar17 + lVar23 * param_2);
        puVar15 = (undefined8 *)(param_3 + lVar23 * 0x10);
        do {
          uVar9 = puVar16[1];
          puVar21 = puVar15 + 2;
          *puVar15 = *puVar16;
          puVar15[1] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
          puVar15 = puVar21;
        } while (puVar21 !=
                 (undefined8 *)
                 (param_3 + (lVar23 + 1 + (ulong)(uint)((iVar11 + -1) - iVar12)) * 0x10));
      }
      lVar17 = lVar17 + 0x10;
      param_3 = param_3 + param_4;
    } while (lVar17 != (lVar18 + 1 + (ulong)(uint)((iVar10 + -1) - iVar20)) * 0x10);
  }
  return;
}


==================================================================

### FUNC 002fc24c (144 bytes) name=FUN_002fc24c

void FUN_002fc24c(long param_1,long param_2,int param_3)

{
  undefined8 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  uint uVar12;
  
  if (0 < param_3) {
    lVar9 = 1;
    puVar10 = (undefined8 *)(param_1 + 0x10);
    uVar12 = param_3 - 2;
    lVar11 = 0;
    if (1 < param_3) {
      do {
        puVar8 = (undefined8 *)(param_2 + -0x10 + (long)puVar10);
        puVar6 = puVar10;
        do {
          uVar1 = puVar8[1];
          uVar2 = *(undefined4 *)puVar6;
          uVar3 = *(undefined4 *)((long)puVar6 + 4);
          uVar4 = *(undefined4 *)(puVar6 + 1);
          uVar5 = *(undefined4 *)((long)puVar6 + 0xc);
          puVar7 = puVar6 + 2;
          *puVar6 = *puVar8;
          puVar6[1] = uVar1;
          *(undefined4 *)puVar8 = uVar2;
          *(undefined4 *)((long)puVar8 + 4) = uVar3;
          *(undefined4 *)(puVar8 + 1) = uVar4;
          *(undefined4 *)((long)puVar8 + 0xc) = uVar5;
          puVar8 = (undefined8 *)((long)puVar8 + param_2);
          puVar6 = puVar7;
        } while (puVar7 != (undefined8 *)(param_1 + lVar11 + 0x10 + (lVar9 + (ulong)uVar12) * 0x10))
        ;
        lVar9 = lVar9 + 1;
        puVar10 = (undefined8 *)((long)puVar10 + param_2 + 0x10);
        uVar12 = uVar12 - 1;
        lVar11 = lVar11 + param_2;
      } while ((int)lVar9 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fc2dc (1332 bytes) name=FUN_002fc2dc

void FUN_002fc2dc(undefined8 *param_1,long param_2,long param_3,long param_4,int *param_5)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 uVar7;
  int iVar8;
  uint uVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  int iVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  
  iVar19 = *param_5;
  iVar21 = param_5[1];
  if (iVar19 < 4) {
    iVar12 = 0;
  }
  else {
    lVar17 = param_2 * 4;
    uVar9 = iVar21 - 4U >> 2;
    iVar12 = (uVar9 + 1) * 4;
    uVar20 = iVar19 - 4U >> 2;
    lVar24 = NEON_shl(((ulong)uVar9 + 1) * 3,5);
    if (iVar21 + -3 < 1) {
      iVar12 = 0;
    }
    lVar23 = NEON_shl(((ulong)(uint)((iVar21 + -1) - iVar12) + 1) * 3,3);
    lVar22 = NEON_shl((long)iVar12 * 3,3);
    lVar18 = param_3;
    puVar11 = param_1;
    do {
      lVar1 = lVar18 + param_4;
      lVar25 = lVar1 + param_4;
      lVar2 = lVar25 + param_4;
      if (0 < iVar21 + -3) {
        lVar16 = 0;
        puVar13 = (undefined8 *)((long)puVar11 + param_2 + param_2);
        puVar10 = (undefined8 *)((long)puVar11 + param_2);
        puVar14 = (undefined8 *)((long)puVar13 + param_2);
        puVar15 = puVar11;
        do {
          puVar3 = (undefined8 *)(lVar18 + lVar16);
          uVar7 = puVar15[1];
          *puVar3 = *puVar15;
          puVar3[1] = uVar7;
          puVar3[2] = puVar15[2];
          uVar7 = puVar10[1];
          puVar3[3] = *puVar10;
          puVar3[4] = uVar7;
          puVar4 = (undefined8 *)(lVar25 + lVar16);
          puVar3[5] = puVar10[2];
          puVar5 = (undefined8 *)(lVar1 + lVar16);
          puVar6 = (undefined8 *)(lVar2 + lVar16);
          lVar16 = lVar16 + 0x60;
          uVar7 = puVar13[1];
          puVar3[6] = *puVar13;
          puVar3[7] = uVar7;
          puVar3[8] = puVar13[2];
          uVar7 = puVar14[1];
          puVar3[9] = *puVar14;
          puVar3[10] = uVar7;
          puVar3[0xb] = puVar14[2];
          uVar7 = puVar15[4];
          *puVar5 = puVar15[3];
          puVar5[1] = uVar7;
          puVar5[2] = puVar15[5];
          uVar7 = puVar10[4];
          puVar5[3] = puVar10[3];
          puVar5[4] = uVar7;
          puVar5[5] = puVar10[5];
          uVar7 = puVar13[4];
          puVar5[6] = puVar13[3];
          puVar5[7] = uVar7;
          puVar5[8] = puVar13[5];
          uVar7 = puVar14[4];
          puVar5[9] = puVar14[3];
          puVar5[10] = uVar7;
          puVar5[0xb] = puVar14[5];
          uVar7 = puVar15[7];
          *puVar4 = puVar15[6];
          puVar4[1] = uVar7;
          puVar4[2] = puVar15[8];
          uVar7 = puVar10[7];
          puVar4[3] = puVar10[6];
          puVar4[4] = uVar7;
          puVar4[5] = puVar10[8];
          uVar7 = puVar13[7];
          puVar4[6] = puVar13[6];
          puVar4[7] = uVar7;
          puVar4[8] = puVar13[8];
          uVar7 = puVar14[7];
          puVar4[9] = puVar14[6];
          puVar4[10] = uVar7;
          puVar4[0xb] = puVar14[8];
          uVar7 = puVar15[10];
          *puVar6 = puVar15[9];
          puVar6[1] = uVar7;
          puVar6[2] = puVar15[0xb];
          uVar7 = puVar10[10];
          puVar6[3] = puVar10[9];
          puVar6[4] = uVar7;
          puVar6[5] = puVar10[0xb];
          uVar7 = puVar13[10];
          puVar6[6] = puVar13[9];
          puVar6[7] = uVar7;
          puVar6[8] = puVar13[0xb];
          uVar7 = puVar14[10];
          puVar6[9] = puVar14[9];
          puVar6[10] = uVar7;
          puVar6[0xb] = puVar14[0xb];
          puVar13 = (undefined8 *)((long)puVar13 + lVar17);
          puVar10 = (undefined8 *)((long)puVar10 + lVar17);
          puVar14 = (undefined8 *)((long)puVar14 + lVar17);
          puVar15 = (undefined8 *)((long)puVar15 + lVar17);
        } while (lVar16 != lVar24);
      }
      if (iVar12 < iVar21) {
        lVar16 = 0;
        puVar13 = (undefined8 *)((long)puVar11 + iVar12 * param_2);
        do {
          puVar10 = (undefined8 *)(lVar18 + lVar22 + lVar16);
          uVar7 = puVar13[1];
          puVar14 = (undefined8 *)(lVar1 + lVar22 + lVar16);
          puVar15 = (undefined8 *)(lVar25 + lVar22 + lVar16);
          *puVar10 = *puVar13;
          puVar10[1] = uVar7;
          puVar3 = (undefined8 *)(lVar2 + lVar22 + lVar16);
          lVar16 = lVar16 + 0x18;
          puVar10[2] = puVar13[2];
          uVar7 = puVar13[4];
          *puVar14 = puVar13[3];
          puVar14[1] = uVar7;
          puVar14[2] = puVar13[5];
          uVar7 = puVar13[7];
          *puVar15 = puVar13[6];
          puVar15[1] = uVar7;
          puVar15[2] = puVar13[8];
          uVar7 = puVar13[10];
          *puVar3 = puVar13[9];
          puVar3[1] = uVar7;
          puVar3[2] = puVar13[0xb];
          puVar13 = (undefined8 *)((long)puVar13 + param_2);
        } while (lVar16 != lVar23);
      }
      puVar11 = puVar11 + 0xc;
      lVar18 = lVar2 + param_4;
    } while (puVar11 != param_1 + ((ulong)uVar20 + 1) * 0xc);
    iVar12 = (uVar20 + 1) * 4;
  }
  if (iVar12 < iVar19) {
    lVar24 = (long)iVar12;
    lVar17 = lVar24 * 0x18;
    uVar9 = iVar21 - 4U >> 2;
    iVar8 = (uVar9 + 1) * 4;
    if (iVar21 + -3 < 1) {
      iVar8 = 0;
    }
    lVar18 = (long)iVar8;
    puVar11 = (undefined8 *)(param_3 + param_4 * lVar24);
    do {
      if (0 < iVar21 + -3) {
        puVar13 = (undefined8 *)((long)param_1 + lVar17);
        puVar10 = puVar11;
        do {
          puVar15 = puVar10 + 0xc;
          puVar3 = (undefined8 *)((long)puVar13 + param_2);
          uVar7 = puVar13[1];
          puVar4 = (undefined8 *)((long)puVar13 + param_2 * 2);
          puVar5 = (undefined8 *)((long)puVar13 + param_2 * 3);
          *puVar10 = *puVar13;
          puVar10[1] = uVar7;
          puVar14 = puVar13 + 2;
          puVar13 = (undefined8 *)((long)puVar13 + param_2 * 4);
          puVar10[2] = *puVar14;
          uVar7 = puVar3[1];
          puVar10[3] = *puVar3;
          puVar10[4] = uVar7;
          puVar10[5] = puVar3[2];
          uVar7 = puVar4[1];
          puVar10[6] = *puVar4;
          puVar10[7] = uVar7;
          puVar10[8] = puVar4[2];
          uVar7 = puVar5[1];
          puVar10[9] = *puVar5;
          puVar10[10] = uVar7;
          puVar10[0xb] = puVar5[2];
          puVar10 = puVar15;
        } while (puVar15 != puVar11 + ((ulong)uVar9 + 1) * 0xc);
      }
      if (iVar8 < iVar21) {
        puVar13 = (undefined8 *)((long)param_1 + lVar17 + lVar18 * param_2);
        puVar10 = puVar11 + lVar18 * 3;
        do {
          uVar7 = puVar13[1];
          *puVar10 = *puVar13;
          puVar10[1] = uVar7;
          puVar15 = puVar10 + 3;
          puVar14 = puVar13 + 2;
          puVar13 = (undefined8 *)((long)puVar13 + param_2);
          puVar10[2] = *puVar14;
          puVar10 = puVar15;
        } while (puVar15 != puVar11 + (lVar18 + 1 + (ulong)(uint)((iVar21 + -1) - iVar8)) * 3);
      }
      lVar17 = lVar17 + 0x18;
      puVar11 = (undefined8 *)((long)puVar11 + param_4);
    } while (lVar17 != (lVar24 + 1 + (ulong)(uint)((iVar19 + -1) - iVar12)) * 0x18);
  }
  return;
}


==================================================================

### FUNC 002fc810 (192 bytes) name=FUN_002fc810

void FUN_002fc810(long param_1,long param_2,int param_3)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined8 *puVar12;
  long lVar13;
  uint uVar14;
  
  if (0 < param_3) {
    lVar11 = 1;
    puVar12 = (undefined8 *)(param_1 + 0x18);
    uVar14 = param_3 - 2;
    lVar13 = 0;
    if (1 < param_3) {
      do {
        puVar10 = (undefined8 *)(param_2 + -0x18 + (long)puVar12);
        puVar9 = puVar12;
        do {
          uVar2 = puVar10[1];
          uVar3 = *(undefined4 *)puVar9;
          uVar4 = *(undefined4 *)((long)puVar9 + 4);
          uVar5 = *(undefined4 *)(puVar9 + 1);
          uVar6 = *(undefined4 *)((long)puVar9 + 0xc);
          uVar7 = *(undefined4 *)(puVar9 + 2);
          *puVar9 = *puVar10;
          puVar9[1] = uVar2;
          uVar8 = *(undefined4 *)((long)puVar9 + 0x14);
          puVar1 = puVar9 + 3;
          puVar9[2] = puVar10[2];
          *(undefined4 *)puVar10 = uVar3;
          *(undefined4 *)((long)puVar10 + 4) = uVar4;
          *(undefined4 *)(puVar10 + 1) = uVar5;
          *(undefined4 *)((long)puVar10 + 0xc) = uVar6;
          *(undefined4 *)(puVar10 + 2) = uVar7;
          *(undefined4 *)((long)puVar10 + 0x14) = uVar8;
          puVar10 = (undefined8 *)((long)puVar10 + param_2);
          puVar9 = puVar1;
        } while (puVar1 != (undefined8 *)(param_1 + lVar13 + 0x18 + (lVar11 + (ulong)uVar14) * 0x18)
                );
        lVar11 = lVar11 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + param_2 + 0x18);
        uVar14 = uVar14 - 1;
        lVar13 = lVar13 + param_2;
      } while ((int)lVar11 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fc8d0 (1012 bytes) name=FUN_002fc8d0

void FUN_002fc8d0(long param_1,long param_2,long param_3,long param_4,int *param_5)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  undefined8 *puVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  long lVar21;
  long lVar22;
  int iVar23;
  uint uVar24;
  
  iVar10 = *param_5;
  iVar11 = param_5[1];
  if (iVar10 < 4) {
    iVar23 = 0;
  }
  else {
    uVar13 = iVar11 - 4U >> 2;
    iVar23 = (uVar13 + 1) * 4;
    lVar19 = param_2 * 4;
    lVar20 = 0;
    uVar24 = iVar10 - 4U >> 2;
    if (iVar11 + -3 < 1) {
      iVar23 = 0;
    }
    lVar22 = (long)iVar23 * 0x20;
    lVar21 = param_3;
    do {
      lVar1 = lVar21 + param_4;
      lVar2 = lVar1 + param_4;
      lVar3 = lVar2 + param_4;
      if (0 < iVar11 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar20);
        lVar4 = lVar20 + param_2 + param_2;
        lVar18 = 0;
        puVar14 = (undefined8 *)(param_1 + lVar20 + param_2);
        puVar15 = (undefined8 *)(param_1 + lVar4);
        puVar17 = (undefined8 *)(param_1 + lVar4 + param_2);
        do {
          puVar5 = (undefined8 *)(lVar21 + lVar18);
          puVar6 = (undefined8 *)(lVar1 + lVar18);
          uVar9 = puVar16[1];
          puVar7 = (undefined8 *)(lVar2 + lVar18);
          puVar8 = (undefined8 *)(lVar3 + lVar18);
          *puVar5 = *puVar16;
          puVar5[1] = uVar9;
          lVar18 = lVar18 + 0x80;
          uVar9 = puVar16[3];
          puVar5[2] = puVar16[2];
          puVar5[3] = uVar9;
          uVar9 = puVar14[1];
          puVar5[4] = *puVar14;
          puVar5[5] = uVar9;
          uVar9 = puVar14[3];
          puVar5[6] = puVar14[2];
          puVar5[7] = uVar9;
          uVar9 = puVar15[1];
          puVar5[8] = *puVar15;
          puVar5[9] = uVar9;
          uVar9 = puVar15[3];
          puVar5[10] = puVar15[2];
          puVar5[0xb] = uVar9;
          uVar9 = puVar17[1];
          puVar5[0xc] = *puVar17;
          puVar5[0xd] = uVar9;
          uVar9 = puVar17[3];
          puVar5[0xe] = puVar17[2];
          puVar5[0xf] = uVar9;
          uVar9 = puVar16[5];
          *puVar6 = puVar16[4];
          puVar6[1] = uVar9;
          uVar9 = puVar16[7];
          puVar6[2] = puVar16[6];
          puVar6[3] = uVar9;
          uVar9 = puVar14[5];
          puVar6[4] = puVar14[4];
          puVar6[5] = uVar9;
          uVar9 = puVar14[7];
          puVar6[6] = puVar14[6];
          puVar6[7] = uVar9;
          uVar9 = puVar15[5];
          puVar6[8] = puVar15[4];
          puVar6[9] = uVar9;
          uVar9 = puVar15[7];
          puVar6[10] = puVar15[6];
          puVar6[0xb] = uVar9;
          uVar9 = puVar17[5];
          puVar6[0xc] = puVar17[4];
          puVar6[0xd] = uVar9;
          uVar9 = puVar17[7];
          puVar6[0xe] = puVar17[6];
          puVar6[0xf] = uVar9;
          uVar9 = puVar16[9];
          *puVar7 = puVar16[8];
          puVar7[1] = uVar9;
          uVar9 = puVar16[0xb];
          puVar7[2] = puVar16[10];
          puVar7[3] = uVar9;
          uVar9 = puVar14[9];
          puVar7[4] = puVar14[8];
          puVar7[5] = uVar9;
          uVar9 = puVar14[0xb];
          puVar7[6] = puVar14[10];
          puVar7[7] = uVar9;
          uVar9 = puVar15[9];
          puVar7[8] = puVar15[8];
          puVar7[9] = uVar9;
          uVar9 = puVar15[0xb];
          puVar7[10] = puVar15[10];
          puVar7[0xb] = uVar9;
          uVar9 = puVar17[9];
          puVar7[0xc] = puVar17[8];
          puVar7[0xd] = uVar9;
          uVar9 = puVar17[0xb];
          puVar7[0xe] = puVar17[10];
          puVar7[0xf] = uVar9;
          uVar9 = puVar16[0xd];
          *puVar8 = puVar16[0xc];
          puVar8[1] = uVar9;
          uVar9 = puVar16[0xf];
          puVar8[2] = puVar16[0xe];
          puVar8[3] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + lVar19);
          uVar9 = puVar14[0xd];
          puVar8[4] = puVar14[0xc];
          puVar8[5] = uVar9;
          uVar9 = puVar14[0xf];
          puVar8[6] = puVar14[0xe];
          puVar8[7] = uVar9;
          puVar14 = (undefined8 *)((long)puVar14 + lVar19);
          uVar9 = puVar15[0xd];
          puVar8[8] = puVar15[0xc];
          puVar8[9] = uVar9;
          uVar9 = puVar15[0xf];
          puVar8[10] = puVar15[0xe];
          puVar8[0xb] = uVar9;
          puVar15 = (undefined8 *)((long)puVar15 + lVar19);
          uVar9 = puVar17[0xd];
          puVar8[0xc] = puVar17[0xc];
          puVar8[0xd] = uVar9;
          uVar9 = puVar17[0xf];
          puVar8[0xe] = puVar17[0xe];
          puVar8[0xf] = uVar9;
          puVar17 = (undefined8 *)((long)puVar17 + lVar19);
        } while (lVar18 != ((ulong)uVar13 + 1) * 0x80);
      }
      if (iVar23 < iVar11) {
        puVar16 = (undefined8 *)(param_1 + lVar20 + iVar23 * param_2);
        lVar18 = 0;
        do {
          puVar14 = (undefined8 *)(lVar21 + lVar22 + lVar18);
          puVar15 = (undefined8 *)(lVar1 + lVar22 + lVar18);
          uVar9 = puVar16[1];
          puVar17 = (undefined8 *)(lVar2 + lVar22 + lVar18);
          puVar5 = (undefined8 *)(lVar3 + lVar22 + lVar18);
          *puVar14 = *puVar16;
          puVar14[1] = uVar9;
          lVar18 = lVar18 + 0x20;
          uVar9 = puVar16[3];
          puVar14[2] = puVar16[2];
          puVar14[3] = uVar9;
          uVar9 = puVar16[5];
          *puVar15 = puVar16[4];
          puVar15[1] = uVar9;
          uVar9 = puVar16[7];
          puVar15[2] = puVar16[6];
          puVar15[3] = uVar9;
          uVar9 = puVar16[9];
          *puVar17 = puVar16[8];
          puVar17[1] = uVar9;
          uVar9 = puVar16[0xb];
          puVar17[2] = puVar16[10];
          puVar17[3] = uVar9;
          uVar9 = puVar16[0xd];
          *puVar5 = puVar16[0xc];
          puVar5[1] = uVar9;
          uVar9 = puVar16[0xf];
          puVar5[2] = puVar16[0xe];
          puVar5[3] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
        } while (lVar18 != ((ulong)(uint)((iVar11 + -1) - iVar23) + 1) * 0x20);
      }
      lVar20 = lVar20 + 0x80;
      lVar21 = lVar3 + param_4;
    } while (lVar20 != ((ulong)uVar24 + 1) * 0x80);
    iVar23 = (uVar24 + 1) * 4;
  }
  if (iVar23 < iVar10) {
    uVar13 = iVar11 - 4U >> 2;
    lVar20 = (long)iVar23;
    iVar12 = (uVar13 + 1) * 4;
    if (iVar11 + -3 < 1) {
      iVar12 = 0;
    }
    lVar19 = lVar20 << 5;
    lVar21 = (long)iVar12;
    param_3 = param_3 + param_4 * lVar20;
    do {
      if (0 < iVar11 + -3) {
        puVar16 = (undefined8 *)(param_1 + lVar19);
        puVar14 = (undefined8 *)(param_3 + 0x20);
        do {
          puVar15 = puVar14 + 0x10;
          puVar17 = (undefined8 *)((long)puVar16 + param_2);
          uVar9 = puVar16[1];
          puVar5 = (undefined8 *)((long)puVar16 + param_2 * 2);
          puVar6 = (undefined8 *)((long)puVar16 + param_2 * 3);
          puVar14[-4] = *puVar16;
          puVar14[-3] = uVar9;
          uVar9 = puVar16[3];
          puVar14[-2] = puVar16[2];
          puVar14[-1] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2 * 4);
          uVar9 = puVar17[1];
          *puVar14 = *puVar17;
          puVar14[1] = uVar9;
          uVar9 = puVar17[3];
          puVar14[2] = puVar17[2];
          puVar14[3] = uVar9;
          uVar9 = puVar5[1];
          puVar14[4] = *puVar5;
          puVar14[5] = uVar9;
          uVar9 = puVar5[3];
          puVar14[6] = puVar5[2];
          puVar14[7] = uVar9;
          uVar9 = puVar6[1];
          puVar14[8] = *puVar6;
          puVar14[9] = uVar9;
          uVar9 = puVar6[3];
          puVar14[10] = puVar6[2];
          puVar14[0xb] = uVar9;
          puVar14 = puVar15;
        } while (puVar15 != (undefined8 *)(param_3 + (ulong)uVar13 * 0x80 + 0xa0));
      }
      if (iVar12 < iVar11) {
        puVar16 = (undefined8 *)(param_1 + lVar19 + lVar21 * param_2);
        puVar14 = (undefined8 *)(param_3 + lVar21 * 0x20);
        do {
          puVar15 = puVar14 + 4;
          uVar9 = puVar16[1];
          *puVar14 = *puVar16;
          puVar14[1] = uVar9;
          uVar9 = puVar16[3];
          puVar14[2] = puVar16[2];
          puVar14[3] = uVar9;
          puVar16 = (undefined8 *)((long)puVar16 + param_2);
          puVar14 = puVar15;
        } while (puVar15 !=
                 (undefined8 *)
                 (param_3 + (lVar21 + 1 + (ulong)(uint)((iVar11 + -1) - iVar12)) * 0x20));
      }
      lVar19 = lVar19 + 0x20;
      param_3 = param_3 + param_4;
    } while (lVar19 != (lVar20 + 1 + (ulong)(uint)((iVar10 + -1) - iVar23)) * 0x20);
  }
  return;
}


==================================================================

### FUNC 002fccc4 (212 bytes) name=FUN_002fccc4

void FUN_002fccc4(long param_1,long param_2,int param_3)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  long lVar13;
  undefined8 *puVar14;
  long lVar15;
  uint uVar16;
  
  if (0 < param_3) {
    lVar13 = 1;
    puVar14 = (undefined8 *)(param_1 + 0x20);
    uVar16 = param_3 - 2;
    lVar15 = 0;
    if (1 < param_3) {
      do {
        puVar12 = (undefined8 *)(param_2 + -0x20 + (long)puVar14);
        puVar11 = puVar14;
        do {
          uVar3 = *(undefined4 *)puVar11;
          puVar1 = puVar11 + 4;
          uVar4 = *(undefined4 *)((long)puVar11 + 4);
          uVar2 = puVar12[1];
          uVar5 = *(undefined4 *)(puVar11 + 1);
          uVar6 = *(undefined4 *)((long)puVar11 + 0xc);
          *puVar11 = *puVar12;
          puVar11[1] = uVar2;
          uVar7 = *(undefined4 *)(puVar11 + 2);
          uVar2 = puVar12[3];
          uVar8 = *(undefined4 *)((long)puVar11 + 0x14);
          uVar9 = *(undefined4 *)(puVar11 + 3);
          uVar10 = *(undefined4 *)((long)puVar11 + 0x1c);
          puVar11[2] = puVar12[2];
          puVar11[3] = uVar2;
          *(undefined4 *)puVar12 = uVar3;
          *(undefined4 *)((long)puVar12 + 4) = uVar4;
          *(undefined4 *)(puVar12 + 1) = uVar5;
          *(undefined4 *)((long)puVar12 + 0xc) = uVar6;
          *(undefined4 *)(puVar12 + 2) = uVar7;
          *(undefined4 *)((long)puVar12 + 0x14) = uVar8;
          *(undefined4 *)(puVar12 + 3) = uVar9;
          *(undefined4 *)((long)puVar12 + 0x1c) = uVar10;
          puVar12 = (undefined8 *)((long)puVar12 + param_2);
          puVar11 = puVar1;
        } while (puVar1 != (undefined8 *)(param_1 + lVar15 + 0x20 + (lVar13 + (ulong)uVar16) * 0x20)
                );
        lVar13 = lVar13 + 1;
        puVar14 = (undefined8 *)((long)puVar14 + param_2 + 0x20);
        uVar16 = uVar16 - 1;
        lVar15 = lVar15 + param_2;
      } while ((int)lVar13 < param_3);
    }
  }
  return;
}


==================================================================

### FUNC 002fcd98 (1168 bytes) name=FUN_002fcd98

void FUN_002fcd98(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  byte bVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint3 uVar9;
  uint uVar10;
  uint uVar11;
  ulong *puVar12;
  uint uVar13;
  byte *pbVar14;
  uint uVar15;
  uint uVar16;
  long lVar17;
  ulong uVar18;
  byte *pbVar19;
  uint *puVar20;
  byte *pbVar21;
  long lVar22;
  int iVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  undefined1 uVar27;
  undefined1 uVar28;
  undefined1 uVar29;
  int iVar30;
  uint *puVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  
  iVar30 = **(int **)(param_1 + 0x10);
  uVar10 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar10 + 1;
  uVar7 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar30 < 1) {
    return;
  }
  pbVar21 = *(byte **)(param_1 + 4);
  uVar3 = uVar7;
  if ((int)uVar7 < 1) {
    uVar3 = 1;
  }
  puVar31 = *(uint **)(param_2 + 0x10);
  uVar5 = uVar1 * 2;
  uVar18 = (ulong)uVar5;
  lVar22 = 0;
  lVar26 = **(long **)(param_1 + 0x12);
  lVar25 = **(long **)(param_2 + 0x48);
  iVar8 = uVar7 + uVar1 * -4;
  lVar24 = 0;
  iVar23 = 0;
  pbVar19 = pbVar21;
  puVar20 = puVar31;
  do {
    while (uVar7 != uVar1) {
      lVar17 = 0;
      do {
        uVar13 = (uint)pbVar19[lVar17];
        uVar15 = (uint)pbVar21[lVar17 + (long)(int)uVar10 + 1 + lVar22];
        uVar11 = uVar5;
        if ((int)uVar5 <= iVar8) {
          pbVar14 = pbVar19 + lVar17 + (ulong)uVar5 * 2;
          do {
            uVar11 = uVar11 + uVar1 * 4;
            uVar13 = (uint)*pbVar14 + uVar13 + pbVar14[-uVar18];
            uVar15 = (uint)pbVar14[uVar1 * 3 - uVar18] + uVar15 + pbVar14[(long)(int)uVar1 - uVar18]
            ;
            pbVar14 = pbVar14 + uVar1 * 4;
          } while ((int)uVar11 <= iVar8);
        }
        if ((int)uVar11 < (int)uVar7) {
          pbVar14 = pbVar19 + lVar17 + (int)uVar11;
          do {
            uVar11 = uVar11 + uVar1;
            bVar4 = *pbVar14;
            pbVar14 = pbVar14 + (int)uVar1;
            uVar13 = uVar13 + bVar4;
          } while ((int)uVar11 < (int)uVar7);
        }
        puVar20[lVar17] = uVar13 + uVar15;
        lVar17 = lVar17 + 1;
      } while ((int)lVar17 < (int)uVar1);
joined_r0x002fd218:
      lVar22 = lVar22 + lVar26;
      pbVar19 = pbVar19 + lVar26;
      lVar24 = lVar24 + lVar25;
      puVar20 = (uint *)((long)puVar20 + lVar25);
      iVar23 = iVar23 + 1;
      if (iVar23 == iVar30) {
        return;
      }
    }
    if ((pbVar19 < (byte *)((long)puVar31 + lVar24 + (long)(int)uVar3 * 4) &&
         puVar20 < pbVar21 + lVar22 + (int)uVar3) || (uVar3 < 0x15)) {
      lVar17 = 0;
      do {
        puVar20[lVar17] = (uint)pbVar19[lVar17];
        lVar17 = lVar17 + 1;
      } while ((int)lVar17 < (int)uVar7);
      goto joined_r0x002fd218;
    }
    uVar13 = -((uint)((ulong)puVar20 >> 2) & 3) & 3;
    uVar15 = uVar3;
    if (uVar13 < uVar3) {
      uVar15 = uVar13;
    }
    uVar13 = uVar15;
    if ((uVar15 != 0) && (*puVar20 = (uint)*pbVar19, uVar15 != 1)) {
      puVar20[1] = (uint)pbVar19[1];
      if (uVar15 == 3) {
        puVar20[2] = (uint)pbVar19[2];
      }
      else {
        uVar13 = 2;
      }
    }
    iVar2 = uVar7 - 1;
    if ((int)uVar7 < 1) {
      iVar2 = 0;
    }
    uVar11 = ((uVar3 - uVar15) - 0x10 >> 4) + 1;
    iVar6 = uVar11 * 0x10;
    if (0xe < iVar2 - uVar15) {
      uVar16 = 0;
      puVar12 = (ulong *)((long)puVar31 + lVar24 + (ulong)uVar15 * 4);
      pbVar14 = pbVar21 + (ulong)uVar15 + lVar22;
      do {
        uVar33 = *(undefined8 *)(pbVar14 + 8);
        uVar32 = *(undefined8 *)pbVar14;
        uVar16 = uVar16 + 1;
        uVar27 = (undefined1)((ulong)uVar32 >> 8);
        uVar28 = (undefined1)((ulong)uVar32 >> 0x28);
        uVar9 = CONCAT12((char)((ulong)uVar33 >> 8),(short)uVar33) & 0xff00ff;
        uVar29 = (undefined1)((ulong)uVar33 >> 0x28);
        puVar12[1] = (ulong)CONCAT14((char)((ulong)uVar32 >> 0x18),
                                     (uint)(byte)((ulong)uVar32 >> 0x10));
        *puVar12 = (ulong)((uint6)CONCAT14(uVar27,(uint)CONCAT12(uVar27,(ushort)(byte)uVar32)) &
                          0xffff0000ffff);
        puVar12[3] = (ulong)CONCAT14((char)((ulong)uVar32 >> 0x38),
                                     (uint)(byte)((ulong)uVar32 >> 0x30));
        puVar12[2] = (ulong)((uint6)CONCAT14(uVar28,(uint)CONCAT12(uVar28,(ushort)(byte)((ulong)
                                                  uVar32 >> 0x20))) & 0xffff0000ffff);
        puVar12[5] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x18),
                                     (uint)(byte)((ulong)uVar33 >> 0x10));
        puVar12[4] = (ulong)((uint6)CONCAT14((char)(uVar9 >> 0x10),(uint)uVar9) & 0xffff0000ffff);
        puVar12[7] = (ulong)CONCAT14((char)((ulong)uVar33 >> 0x38),
                                     (uint)(byte)((ulong)uVar33 >> 0x30));
        puVar12[6] = (ulong)((uint6)CONCAT14(uVar29,(uint)CONCAT12(uVar29,(ushort)(byte)((ulong)
                                                  uVar33 >> 0x20))) & 0xffff0000ffff);
        puVar12 = puVar12 + 8;
        pbVar14 = pbVar14 + 0x10;
      } while (uVar16 < uVar11);
      uVar13 = uVar13 + iVar6;
      if (iVar6 == uVar3 - uVar15) goto joined_r0x002fd218;
    }
    iVar2 = uVar13 + 1;
    puVar20[(int)uVar13] = (uint)pbVar19[(int)uVar13];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 2;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 3;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 4;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 5;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 6;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 7;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 8;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 9;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 10;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 0xb;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 0xc;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar2 = uVar13 + 0xd;
    puVar20[iVar6] = (uint)pbVar19[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd218;
    iVar6 = uVar13 + 0xe;
    puVar20[iVar2] = (uint)pbVar19[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd218;
    iVar23 = iVar23 + 1;
    lVar24 = lVar24 + lVar25;
    lVar22 = lVar22 + lVar26;
    pbVar14 = pbVar19 + iVar6;
    pbVar19 = pbVar19 + lVar26;
    puVar20[iVar6] = (uint)*pbVar14;
    puVar20 = (uint *)((long)puVar20 + lVar25);
    if (iVar23 == iVar30) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 002fd228 (1264 bytes) name=FUN_002fd228

void FUN_002fd228(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  byte bVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  byte *pbVar11;
  uint uVar12;
  uint uVar13;
  byte *pbVar14;
  uint uVar15;
  long lVar16;
  ulong uVar17;
  byte *pbVar18;
  float *pfVar19;
  byte *pbVar20;
  long lVar21;
  int iVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  undefined1 auVar26 [16];
  int iVar27;
  float *pfVar28;
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  
  iVar27 = **(int **)(param_1 + 0x10);
  uVar9 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar9 + 1;
  uVar7 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar27 < 1) {
    return;
  }
  pbVar20 = *(byte **)(param_1 + 4);
  uVar3 = uVar7;
  if ((int)uVar7 < 1) {
    uVar3 = 1;
  }
  pfVar28 = *(float **)(param_2 + 0x10);
  uVar5 = uVar1 * 2;
  uVar17 = (ulong)uVar5;
  lVar21 = 0;
  lVar25 = **(long **)(param_1 + 0x12);
  lVar24 = **(long **)(param_2 + 0x48);
  iVar8 = uVar7 + uVar1 * -4;
  lVar23 = 0;
  iVar22 = 0;
  pbVar18 = pbVar20;
  pfVar19 = pfVar28;
  do {
    while (uVar7 != uVar1) {
      lVar16 = 0;
      do {
        uVar12 = (uint)pbVar18[lVar16];
        uVar13 = (uint)pbVar20[lVar16 + (long)(int)uVar9 + 1 + lVar21];
        uVar10 = uVar5;
        if ((int)uVar5 <= iVar8) {
          pbVar11 = pbVar18 + lVar16 + (ulong)uVar5 * 2;
          do {
            uVar10 = uVar10 + uVar1 * 4;
            uVar12 = (uint)*pbVar11 + uVar12 + pbVar11[-uVar17];
            uVar13 = (uint)pbVar11[uVar1 * 3 - uVar17] + uVar13 + pbVar11[(long)(int)uVar1 - uVar17]
            ;
            pbVar11 = pbVar11 + uVar1 * 4;
          } while ((int)uVar10 <= iVar8);
        }
        if ((int)uVar10 < (int)uVar7) {
          pbVar11 = pbVar18 + lVar16 + (int)uVar10;
          do {
            uVar10 = uVar10 + uVar1;
            bVar4 = *pbVar11;
            pbVar11 = pbVar11 + (int)uVar1;
            uVar12 = uVar12 + bVar4;
          } while ((int)uVar10 < (int)uVar7);
        }
        pfVar19[lVar16] = (float)(int)(uVar12 + uVar13);
        lVar16 = lVar16 + 1;
      } while ((int)lVar16 < (int)uVar1);
joined_r0x002fd708:
      lVar21 = lVar21 + lVar25;
      pbVar18 = pbVar18 + lVar25;
      lVar23 = lVar23 + lVar24;
      pfVar19 = (float *)((long)pfVar19 + lVar24);
      iVar22 = iVar22 + 1;
      if (iVar22 == iVar27) {
        return;
      }
    }
    if ((pbVar18 < (byte *)((long)pfVar28 + lVar23 + (long)(int)uVar3 * 4) &&
         pfVar19 < pbVar20 + lVar21 + (int)uVar3) || (uVar3 < 0x15)) {
      lVar16 = 0;
      do {
        pfVar19[lVar16] = (float)pbVar18[lVar16];
        lVar16 = lVar16 + 1;
      } while ((int)lVar16 < (int)uVar7);
      goto joined_r0x002fd708;
    }
    uVar12 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
    uVar13 = uVar3;
    if (uVar12 < uVar3) {
      uVar13 = uVar12;
    }
    uVar12 = uVar13;
    if ((uVar13 != 0) && (*pfVar19 = (float)*pbVar18, uVar13 != 1)) {
      pfVar19[1] = (float)pbVar18[1];
      if (uVar13 == 3) {
        pfVar19[2] = (float)pbVar18[2];
      }
      else {
        uVar12 = 2;
      }
    }
    iVar2 = uVar7 - 1;
    if ((int)uVar7 < 1) {
      iVar2 = 0;
    }
    uVar10 = ((uVar3 - uVar13) - 0x10 >> 4) + 1;
    iVar6 = uVar10 * 0x10;
    if (0xe < iVar2 - uVar13) {
      uVar15 = 0;
      pbVar11 = (byte *)((long)pfVar28 + lVar23 + (ulong)uVar13 * 4);
      pbVar14 = pbVar20 + (ulong)uVar13 + lVar21;
      do {
        uVar15 = uVar15 + 1;
        auVar31._6_2_ = 0;
        auVar31._0_6_ =
             (uint6)CONCAT14(pbVar14[1],(uint)CONCAT12(pbVar14[1],(ushort)*pbVar14)) &
             0xffff0000ffff;
        auVar31[8] = pbVar14[2];
        auVar31._9_3_ = 0;
        auVar31[0xc] = pbVar14[3];
        auVar31._13_3_ = 0;
        auVar29._1_3_ = 0;
        auVar29[0] = pbVar14[4];
        auVar29[4] = pbVar14[5];
        auVar29._5_3_ = 0;
        auVar29[8] = pbVar14[6];
        auVar29._9_3_ = 0;
        auVar29[0xc] = pbVar14[7];
        auVar29._13_3_ = 0;
        auVar30._6_2_ = 0;
        auVar30._0_6_ =
             (uint6)CONCAT14(pbVar14[9],(uint)CONCAT12(pbVar14[9],(ushort)pbVar14[8])) &
             0xffff0000ffff;
        auVar30[8] = pbVar14[10];
        auVar30._9_3_ = 0;
        auVar30[0xc] = pbVar14[0xb];
        auVar30._13_3_ = 0;
        auVar26._1_3_ = 0;
        auVar26[0] = pbVar14[0xc];
        auVar26[4] = pbVar14[0xd];
        auVar26._5_3_ = 0;
        auVar26[8] = pbVar14[0xe];
        auVar26._9_3_ = 0;
        auVar26[0xc] = pbVar14[0xf];
        auVar26._13_3_ = 0;
        auVar31 = NEON_scvtf(auVar31,4);
        auVar29 = NEON_scvtf(auVar29,4);
        auVar30 = NEON_scvtf(auVar30,4);
        auVar26 = NEON_scvtf(auVar26,4);
        *(long *)(pbVar11 + 8) = auVar31._8_8_;
        *(long *)pbVar11 = auVar31._0_8_;
        *(long *)(pbVar11 + 0x18) = auVar29._8_8_;
        *(long *)(pbVar11 + 0x10) = auVar29._0_8_;
        *(long *)(pbVar11 + 0x28) = auVar30._8_8_;
        *(long *)(pbVar11 + 0x20) = auVar30._0_8_;
        *(long *)(pbVar11 + 0x38) = auVar26._8_8_;
        *(long *)(pbVar11 + 0x30) = auVar26._0_8_;
        pbVar11 = pbVar11 + 0x40;
        pbVar14 = pbVar14 + 0x10;
      } while (uVar15 < uVar10);
      uVar12 = uVar12 + iVar6;
      if (iVar6 == uVar3 - uVar13) goto joined_r0x002fd708;
    }
    iVar2 = uVar12 + 1;
    pfVar19[(int)uVar12] = (float)pbVar18[(int)uVar12];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 2;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 3;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 4;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 5;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 6;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 7;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 8;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 9;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 10;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 0xb;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 0xc;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar2 = uVar12 + 0xd;
    pfVar19[iVar6] = (float)pbVar18[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fd708;
    iVar6 = uVar12 + 0xe;
    pfVar19[iVar2] = (float)pbVar18[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fd708;
    iVar22 = iVar22 + 1;
    lVar23 = lVar23 + lVar24;
    lVar21 = lVar21 + lVar25;
    pbVar11 = pbVar18 + iVar6;
    pbVar18 = pbVar18 + lVar25;
    pfVar19[iVar6] = (float)*pbVar11;
    pfVar19 = (float *)((long)pfVar19 + lVar24);
    if (iVar22 == iVar27) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 002fd718 (1312 bytes) name=FUN_002fd718

void FUN_002fd718(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  byte bVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  undefined1 auVar9 [13];
  undefined1 auVar10 [13];
  uint uVar11;
  undefined1 auVar12 [13];
  undefined1 auVar13 [13];
  byte bVar14;
  byte bVar15;
  uint uVar16;
  uint uVar17;
  byte *pbVar18;
  uint uVar19;
  uint uVar20;
  long lVar21;
  ulong uVar22;
  byte *pbVar23;
  double *pdVar24;
  byte *pbVar25;
  long lVar26;
  int iVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  ulong uVar31;
  int iVar32;
  double *pdVar33;
  ulong uVar34;
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  ulong uVar37;
  undefined1 auVar38 [16];
  ulong uVar39;
  byte *pbVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  
  iVar32 = **(int **)(param_1 + 0x10);
  uVar11 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar11 + 1;
  uVar7 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar32 < 1) {
    return;
  }
  pbVar25 = *(byte **)(param_1 + 4);
  uVar3 = uVar7;
  if ((int)uVar7 < 1) {
    uVar3 = 1;
  }
  pdVar33 = *(double **)(param_2 + 0x10);
  uVar5 = uVar1 * 2;
  uVar22 = (ulong)uVar5;
  lVar26 = 0;
  lVar30 = **(long **)(param_1 + 0x12);
  lVar29 = **(long **)(param_2 + 0x48);
  iVar8 = uVar7 + uVar1 * -4;
  lVar28 = 0;
  iVar27 = 0;
  pbVar23 = pbVar25;
  pdVar24 = pdVar33;
  do {
    while (uVar7 != uVar1) {
      lVar21 = 0;
      do {
        uVar17 = (uint)pbVar23[lVar21];
        uVar19 = (uint)pbVar25[lVar21 + (long)(int)uVar11 + 1 + lVar26];
        uVar16 = uVar5;
        if ((int)uVar5 <= iVar8) {
          pbVar18 = pbVar23 + lVar21 + (ulong)uVar5 * 2;
          do {
            uVar16 = uVar16 + uVar1 * 4;
            uVar17 = (uint)*pbVar18 + uVar17 + pbVar18[-uVar22];
            uVar19 = (uint)pbVar18[uVar1 * 3 - uVar22] + uVar19 + pbVar18[(long)(int)uVar1 - uVar22]
            ;
            pbVar18 = pbVar18 + uVar1 * 4;
          } while ((int)uVar16 <= iVar8);
        }
        if ((int)uVar16 < (int)uVar7) {
          pbVar18 = pbVar23 + lVar21 + (int)uVar16;
          do {
            uVar16 = uVar16 + uVar1;
            bVar4 = *pbVar18;
            pbVar18 = pbVar18 + (int)uVar1;
            uVar17 = uVar17 + bVar4;
          } while ((int)uVar16 < (int)uVar7);
        }
        pdVar24[lVar21] = (double)(int)(uVar17 + uVar19);
        lVar21 = lVar21 + 1;
      } while ((int)lVar21 < (int)uVar1);
joined_r0x002fdc30:
      lVar26 = lVar26 + lVar30;
      pbVar23 = pbVar23 + lVar30;
      lVar28 = lVar28 + lVar29;
      pdVar24 = (double *)((long)pdVar24 + lVar29);
      iVar27 = iVar27 + 1;
      if (iVar27 == iVar32) {
        return;
      }
    }
    if ((pbVar23 < (byte *)((long)pdVar33 + lVar28 + (long)(int)uVar3 * 8) &&
         pdVar24 < pbVar25 + lVar26 + (int)uVar3) || (uVar3 < 0x15)) {
      lVar21 = 0;
      do {
        pdVar24[lVar21] = (double)pbVar23[lVar21];
        lVar21 = lVar21 + 1;
      } while ((int)lVar21 < (int)uVar7);
      goto joined_r0x002fdc30;
    }
    uVar19 = (uint)((ulong)pdVar24 >> 3) & 1;
    uVar17 = uVar3;
    if (uVar19 < uVar3) {
      uVar17 = uVar19;
    }
    if (uVar17 != 0) {
      *pdVar24 = (double)*pbVar23;
    }
    uVar16 = (uint)(uVar17 != 0);
    uVar19 = ((uVar3 - uVar17) - 0x10 >> 4) + 1;
    iVar6 = uVar19 * 0x10;
    iVar2 = uVar7 - 1;
    if ((int)uVar7 < 1) {
      iVar2 = 0;
    }
    if (0xe < iVar2 - uVar17) {
      uVar20 = 0;
      pbVar18 = (byte *)((long)pdVar33 + lVar28 + (ulong)uVar17 * 8);
      pbVar40 = pbVar25 + (ulong)uVar17 + lVar26;
      do {
        uVar20 = uVar20 + 1;
        bVar4 = pbVar40[1];
        bVar14 = pbVar40[9];
        bVar15 = pbVar40[0xd];
        uVar39 = CONCAT26(0,(uint6)CONCAT14(bVar4,(uint)CONCAT12(bVar4,(ushort)*pbVar40)) &
                            0xffff0000ffff);
        auVar12[8] = pbVar40[2];
        auVar12._0_8_ = uVar39;
        auVar12._9_3_ = 0;
        auVar12[0xc] = pbVar40[3];
        uVar34 = CONCAT35(0,CONCAT14(pbVar40[5],(uint)pbVar40[4]));
        auVar9[8] = pbVar40[6];
        auVar9._0_8_ = uVar34;
        auVar9._9_3_ = 0;
        auVar9[0xc] = pbVar40[7];
        uVar37 = CONCAT26(0,(uint6)CONCAT14(bVar14,(uint)CONCAT12(bVar14,(ushort)pbVar40[8])) &
                            0xffff0000ffff);
        auVar13[8] = pbVar40[10];
        auVar13._0_8_ = uVar37;
        auVar13._9_3_ = 0;
        auVar13[0xc] = pbVar40[0xb];
        uVar31 = CONCAT35(0,CONCAT14(bVar15,(uint)pbVar40[0xc]));
        auVar10[8] = pbVar40[0xe];
        auVar10._0_8_ = uVar31;
        auVar10._9_3_ = 0;
        auVar10[0xc] = pbVar40[0xf];
        auVar41._0_8_ = uVar39 & 0xffffffff;
        auVar41[8] = bVar4;
        auVar41._9_7_ = 0;
        auVar45._0_8_ = (ulong)auVar12._8_5_ & 0xffffffff;
        auVar45._8_5_ = auVar12._8_5_ >> 0x20;
        auVar45._13_3_ = 0;
        auVar44._0_8_ = uVar34 & 0xffffffff;
        auVar44[8] = pbVar40[5];
        auVar44._9_7_ = 0;
        auVar35._0_8_ = (ulong)auVar9._8_5_ & 0xffffffff;
        auVar35._8_5_ = auVar9._8_5_ >> 0x20;
        auVar35._13_3_ = 0;
        auVar42 = NEON_scvtf(auVar41,8);
        *(long *)(pbVar18 + 8) = auVar42._8_8_;
        *(long *)pbVar18 = auVar42._0_8_;
        auVar42 = NEON_scvtf(auVar45,8);
        auVar38._0_8_ = (ulong)auVar13._8_5_ & 0xffffffff;
        auVar38._8_5_ = auVar13._8_5_ >> 0x20;
        auVar38._13_3_ = 0;
        auVar45 = NEON_scvtf(auVar44,8);
        auVar43._0_8_ = uVar31 & 0xffffffff;
        auVar43[8] = bVar15;
        auVar43._9_7_ = 0;
        auVar36 = NEON_scvtf(auVar35,8);
        *(long *)(pbVar18 + 0x18) = auVar42._8_8_;
        *(long *)(pbVar18 + 0x10) = auVar42._0_8_;
        *(long *)(pbVar18 + 0x28) = auVar45._8_8_;
        *(long *)(pbVar18 + 0x20) = auVar45._0_8_;
        auVar42[8] = bVar14;
        auVar42._0_8_ = uVar37 & 0xffffffff;
        auVar42._9_7_ = 0;
        auVar42 = NEON_scvtf(auVar42,8);
        *(long *)(pbVar18 + 0x38) = auVar36._8_8_;
        *(long *)(pbVar18 + 0x30) = auVar36._0_8_;
        auVar36 = NEON_scvtf(auVar38,8);
        *(long *)(pbVar18 + 0x48) = auVar42._8_8_;
        *(long *)(pbVar18 + 0x40) = auVar42._0_8_;
        auVar42 = NEON_scvtf(auVar43,8);
        *(long *)(pbVar18 + 0x58) = auVar36._8_8_;
        *(long *)(pbVar18 + 0x50) = auVar36._0_8_;
        *(long *)(pbVar18 + 0x68) = auVar42._8_8_;
        *(long *)(pbVar18 + 0x60) = auVar42._0_8_;
        auVar36._0_8_ = (ulong)auVar10._8_5_ & 0xffffffff;
        auVar36._8_5_ = auVar10._8_5_ >> 0x20;
        auVar36._13_3_ = 0;
        auVar42 = NEON_scvtf(auVar36,8);
        *(long *)(pbVar18 + 0x78) = auVar42._8_8_;
        *(long *)(pbVar18 + 0x70) = auVar42._0_8_;
        pbVar18 = pbVar18 + 0x80;
        pbVar40 = pbVar40 + 0x10;
      } while (uVar20 < uVar19);
      uVar16 = uVar16 + iVar6;
      if (iVar6 == uVar3 - uVar17) goto joined_r0x002fdc30;
    }
    iVar2 = uVar16 + 1;
    pdVar24[(int)uVar16] = (double)pbVar23[(int)uVar16];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 2;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 3;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 4;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 5;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 6;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 7;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 8;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 9;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 10;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 0xb;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 0xc;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar2 = uVar16 + 0xd;
    pdVar24[iVar6] = (double)pbVar23[iVar6];
    if ((int)uVar7 <= iVar2) goto joined_r0x002fdc30;
    iVar6 = uVar16 + 0xe;
    pdVar24[iVar2] = (double)pbVar23[iVar2];
    if ((int)uVar7 <= iVar6) goto joined_r0x002fdc30;
    iVar27 = iVar27 + 1;
    lVar28 = lVar28 + lVar29;
    lVar26 = lVar26 + lVar30;
    pbVar18 = pbVar23 + iVar6;
    pbVar23 = pbVar23 + lVar30;
    pdVar24[iVar6] = (double)*pbVar18;
    pdVar24 = (double *)((long)pdVar24 + lVar29);
    if (iVar27 == iVar32) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 002fdc38 (996 bytes) name=FUN_002fdc38

void FUN_002fdc38(uint *param_1,long param_2)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort *puVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  ushort uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  ushort *puVar16;
  uint uVar17;
  ushort *puVar18;
  float *pfVar19;
  uint uVar20;
  long lVar21;
  ulong uVar22;
  ulong uVar23;
  int iVar24;
  float *pfVar25;
  ushort *puVar26;
  long lVar27;
  float fVar28;
  undefined1 auVar29 [16];
  float fVar30;
  undefined1 auVar31 [16];
  long lVar32;
  
  iVar8 = **(int **)(param_1 + 0x10);
  uVar14 = *param_1 >> 3 & 0x1ff;
  uVar4 = uVar14 + 1;
  uVar12 = uVar4 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar8) {
    uVar10 = uVar4 * 2;
    uVar23 = (ulong)uVar10;
    puVar26 = *(ushort **)(param_1 + 4);
    pfVar25 = *(float **)(param_2 + 0x10);
    lVar32 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar13 = uVar12 + uVar4 * -4;
    uVar7 = uVar12;
    if ((int)uVar12 < 1) {
      uVar7 = 1;
    }
    iVar24 = 0;
    do {
      while (uVar12 == uVar4) {
        uVar15 = -((uint)((ulong)pfVar25 >> 2) & 3) & 3;
        if (uVar7 < uVar15) {
          uVar15 = uVar7;
        }
        uVar5 = uVar7;
        if (((int)uVar7 < 9) || (uVar17 = 0, uVar5 = uVar15, uVar15 != 0)) {
          uVar15 = uVar5;
          *pfVar25 = (float)*puVar26;
          uVar17 = uVar15;
          if (((uVar15 != 1) &&
              (((pfVar25[1] = (float)puVar26[1], uVar15 != 2 &&
                (pfVar25[2] = (float)puVar26[2], uVar15 != 3)) &&
               (pfVar25[3] = (float)puVar26[3], uVar15 != 4)))) &&
             ((pfVar25[4] = (float)puVar26[4], uVar15 != 5 &&
              (pfVar25[5] = (float)puVar26[5], uVar15 != 6)))) {
            pfVar25[6] = (float)puVar26[6];
            if (uVar15 == 8) {
              pfVar25[7] = (float)puVar26[7];
            }
            else {
              uVar17 = 7;
            }
          }
          if (uVar15 == uVar7) goto LAB_002fddb0;
        }
        iVar6 = uVar12 - 1;
        if ((int)uVar12 < 1) {
          iVar6 = 0;
        }
        uVar5 = ((uVar7 - uVar15) - 8 >> 3) + 1;
        iVar11 = uVar5 * 8;
        if (6 < iVar6 - uVar15) {
          uVar20 = 0;
          puVar16 = puVar26 + uVar15;
          pfVar19 = pfVar25 + uVar15;
          do {
            uVar20 = uVar20 + 1;
            auVar31._2_2_ = 0;
            auVar31._0_2_ = *puVar16;
            auVar31._4_2_ = puVar16[1];
            auVar31._6_2_ = 0;
            auVar31._8_2_ = puVar16[2];
            auVar31._10_2_ = 0;
            auVar31._12_2_ = puVar16[3];
            auVar31._14_2_ = 0;
            auVar29._2_2_ = 0;
            auVar29._0_2_ = puVar16[4];
            auVar29._4_2_ = puVar16[5];
            auVar29._6_2_ = 0;
            auVar29._8_2_ = puVar16[6];
            auVar29._10_2_ = 0;
            auVar29._12_2_ = puVar16[7];
            auVar29._14_2_ = 0;
            auVar31 = NEON_scvtf(auVar31,4);
            auVar29 = NEON_scvtf(auVar29,4);
            *(long *)(pfVar19 + 2) = auVar31._8_8_;
            *(long *)pfVar19 = auVar31._0_8_;
            *(long *)(pfVar19 + 6) = auVar29._8_8_;
            *(long *)(pfVar19 + 4) = auVar29._0_8_;
            puVar16 = puVar16 + 8;
            pfVar19 = pfVar19 + 8;
          } while (uVar20 < uVar5);
          uVar17 = uVar17 + iVar11;
          if (iVar11 == uVar7 - uVar15) goto LAB_002fddb0;
        }
        iVar6 = uVar17 + 1;
        pfVar25[(int)uVar17] = (float)puVar26[(int)uVar17];
        if ((int)uVar12 <= iVar6) goto LAB_002fddb0;
        iVar11 = uVar17 + 2;
        pfVar25[iVar6] = (float)puVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fddb0;
        iVar6 = uVar17 + 3;
        pfVar25[iVar11] = (float)puVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fddb0;
        iVar11 = uVar17 + 4;
        pfVar25[iVar6] = (float)puVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fddb0;
        iVar6 = uVar17 + 5;
        pfVar25[iVar11] = (float)puVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fddb0;
        iVar11 = uVar17 + 6;
        pfVar25[iVar6] = (float)puVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fddb0;
        iVar24 = iVar24 + 1;
        pfVar25[iVar11] = (float)puVar26[iVar11];
        pfVar25 = (float *)((long)pfVar25 + lVar27);
        puVar26 = (ushort *)((long)puVar26 + lVar32);
        if (iVar24 == iVar8) {
          return;
        }
      }
      lVar21 = 0;
      puVar16 = puVar26 + uVar23;
      uVar22 = uVar23;
      do {
        fVar28 = (float)puVar26[lVar21];
        fVar30 = (float)puVar26[(long)(int)uVar14 + lVar21 + 1];
        uVar15 = uVar10;
        if ((int)uVar10 <= iVar13) {
          puVar18 = puVar16;
          do {
            uVar9 = *puVar18;
            uVar15 = uVar15 + uVar4 * 4;
            puVar1 = puVar18 + ((((long)(int)uVar14 + 1 + uVar22) - lVar21) - uVar23);
            puVar2 = puVar18 + (uVar22 - lVar21);
            puVar3 = puVar18 + (((uVar22 + uVar4 * 3) - lVar21) - uVar23);
            puVar18 = puVar18 + uVar4 * 4;
            fVar28 = (float)*puVar2 + fVar28 + (float)uVar9;
            fVar30 = (float)*puVar3 + fVar30 + (float)*puVar1;
          } while ((int)uVar15 <= iVar13);
        }
        if ((int)uVar15 < (int)uVar12) {
          puVar18 = puVar26 + lVar21 + (int)uVar15;
          do {
            uVar9 = *puVar18;
            uVar15 = uVar15 + uVar4;
            puVar18 = puVar18 + (long)(int)uVar14 + 1;
            fVar28 = fVar28 + (float)uVar9;
          } while ((int)uVar15 < (int)uVar12);
        }
        puVar16 = puVar16 + 1;
        uVar22 = uVar22 + 1;
        pfVar25[lVar21] = fVar28 + fVar30;
        lVar21 = lVar21 + 1;
      } while ((int)lVar21 < (int)uVar4);
LAB_002fddb0:
      iVar24 = iVar24 + 1;
      pfVar25 = (float *)((long)pfVar25 + lVar27);
      puVar26 = (ushort *)((long)puVar26 + lVar32);
    } while (iVar24 != iVar8);
  }
  return;
}


==================================================================

### FUNC 002fe01c (1028 bytes) name=FUN_002fe01c

void FUN_002fe01c(uint *param_1,long param_2)

{
  ushort *puVar1;
  ushort *puVar2;
  ushort *puVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  ushort uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  undefined1 auVar14 [14];
  undefined1 auVar15 [14];
  uint uVar16;
  uint uVar17;
  ushort *puVar18;
  uint uVar19;
  ushort *puVar20;
  double *pdVar21;
  uint uVar22;
  long lVar23;
  ulong uVar24;
  ulong uVar25;
  int iVar26;
  double *pdVar27;
  ushort *puVar28;
  long lVar29;
  double dVar30;
  undefined1 auVar31 [16];
  double dVar32;
  ulong uVar33;
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  long lVar37;
  
  iVar8 = **(int **)(param_1 + 0x10);
  uVar16 = *param_1 >> 3 & 0x1ff;
  uVar4 = uVar16 + 1;
  uVar12 = uVar4 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar8) {
    uVar10 = uVar4 * 2;
    uVar25 = (ulong)uVar10;
    puVar28 = *(ushort **)(param_1 + 4);
    pdVar27 = *(double **)(param_2 + 0x10);
    lVar37 = **(long **)(param_1 + 0x12);
    lVar29 = **(long **)(param_2 + 0x48);
    iVar13 = uVar12 + uVar4 * -4;
    uVar7 = uVar12;
    if ((int)uVar12 < 1) {
      uVar7 = 1;
    }
    iVar26 = 0;
    do {
      while (uVar12 == uVar4) {
        uVar17 = (uint)((ulong)pdVar27 >> 3) & 1;
        if (uVar7 < uVar17) {
          uVar17 = uVar7;
        }
        uVar5 = uVar7;
        if (((int)uVar7 < 9) || (uVar19 = 0, uVar5 = uVar17, uVar17 != 0)) {
          uVar17 = uVar5;
          *pdVar27 = (double)*puVar28;
          uVar19 = uVar17;
          if (((uVar17 != 1) &&
              (((pdVar27[1] = (double)puVar28[1], uVar17 != 2 &&
                (pdVar27[2] = (double)puVar28[2], uVar17 != 3)) &&
               (pdVar27[3] = (double)puVar28[3], uVar17 != 4)))) &&
             ((pdVar27[4] = (double)puVar28[4], uVar17 != 5 &&
              (pdVar27[5] = (double)puVar28[5], uVar17 != 6)))) {
            pdVar27[6] = (double)puVar28[6];
            if (uVar17 == 8) {
              pdVar27[7] = (double)puVar28[7];
            }
            else {
              uVar19 = 7;
            }
          }
          if (uVar17 == uVar7) goto LAB_002fe194;
        }
        iVar6 = uVar12 - 1;
        if ((int)uVar12 < 1) {
          iVar6 = 0;
        }
        uVar5 = ((uVar7 - uVar17) - 8 >> 3) + 1;
        iVar11 = uVar5 * 8;
        if (6 < iVar6 - uVar17) {
          uVar22 = 0;
          puVar18 = puVar28 + uVar17;
          pdVar21 = pdVar27 + uVar17;
          do {
            uVar22 = uVar22 + 1;
            uVar33 = CONCAT26(0,CONCAT24(puVar18[1],(uint)*puVar18));
            auVar14._8_2_ = puVar18[2];
            auVar14._0_8_ = uVar33;
            auVar14._10_2_ = 0;
            auVar14._12_2_ = puVar18[3];
            uVar24 = CONCAT26(0,CONCAT24(puVar18[5],(uint)puVar18[4]));
            auVar15._8_2_ = puVar18[6];
            auVar15._0_8_ = uVar24;
            auVar15._10_2_ = 0;
            auVar15._12_2_ = puVar18[7];
            auVar36._0_8_ = uVar33 & 0xffffffff;
            auVar36._8_2_ = puVar18[1];
            auVar36._10_6_ = 0;
            auVar34._0_8_ = (ulong)auVar14._8_6_ & 0xffffffff;
            auVar34._8_6_ = auVar14._8_6_ >> 0x20;
            auVar34._14_2_ = 0;
            auVar35._0_8_ = uVar24 & 0xffffffff;
            auVar35._8_2_ = puVar18[5];
            auVar35._10_6_ = 0;
            auVar31._0_8_ = (ulong)auVar15._8_6_ & 0xffffffff;
            auVar31._8_6_ = auVar15._8_6_ >> 0x20;
            auVar31._14_2_ = 0;
            auVar36 = NEON_scvtf(auVar36,8);
            pdVar21[1] = auVar36._8_8_;
            *pdVar21 = auVar36._0_8_;
            auVar34 = NEON_scvtf(auVar34,8);
            auVar35 = NEON_scvtf(auVar35,8);
            auVar31 = NEON_scvtf(auVar31,8);
            pdVar21[3] = auVar34._8_8_;
            pdVar21[2] = auVar34._0_8_;
            pdVar21[5] = auVar35._8_8_;
            pdVar21[4] = auVar35._0_8_;
            pdVar21[7] = auVar31._8_8_;
            pdVar21[6] = auVar31._0_8_;
            puVar18 = puVar18 + 8;
            pdVar21 = pdVar21 + 8;
          } while (uVar22 < uVar5);
          uVar19 = uVar19 + iVar11;
          if (iVar11 == uVar7 - uVar17) goto LAB_002fe194;
        }
        iVar6 = uVar19 + 1;
        pdVar27[(int)uVar19] = (double)puVar28[(int)uVar19];
        if ((int)uVar12 <= iVar6) goto LAB_002fe194;
        iVar11 = uVar19 + 2;
        pdVar27[iVar6] = (double)puVar28[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe194;
        iVar6 = uVar19 + 3;
        pdVar27[iVar11] = (double)puVar28[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe194;
        iVar11 = uVar19 + 4;
        pdVar27[iVar6] = (double)puVar28[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe194;
        iVar6 = uVar19 + 5;
        pdVar27[iVar11] = (double)puVar28[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe194;
        iVar11 = uVar19 + 6;
        pdVar27[iVar6] = (double)puVar28[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe194;
        iVar26 = iVar26 + 1;
        pdVar27[iVar11] = (double)puVar28[iVar11];
        pdVar27 = (double *)((long)pdVar27 + lVar29);
        puVar28 = (ushort *)((long)puVar28 + lVar37);
        if (iVar26 == iVar8) {
          return;
        }
      }
      lVar23 = 0;
      puVar18 = puVar28 + uVar25;
      uVar24 = uVar25;
      do {
        dVar30 = (double)puVar28[lVar23];
        dVar32 = (double)puVar28[(long)(int)uVar16 + lVar23 + 1];
        uVar17 = uVar10;
        if ((int)uVar10 <= iVar13) {
          puVar20 = puVar18;
          do {
            uVar9 = *puVar20;
            uVar17 = uVar17 + uVar4 * 4;
            puVar1 = puVar20 + ((((long)(int)uVar16 + 1 + uVar24) - lVar23) - uVar25);
            puVar2 = puVar20 + (uVar24 - lVar23);
            puVar3 = puVar20 + (((uVar24 + uVar4 * 3) - lVar23) - uVar25);
            puVar20 = puVar20 + uVar4 * 4;
            dVar30 = (double)*puVar2 + dVar30 + (double)uVar9;
            dVar32 = (double)*puVar3 + dVar32 + (double)*puVar1;
          } while ((int)uVar17 <= iVar13);
        }
        if ((int)uVar17 < (int)uVar12) {
          puVar20 = puVar28 + lVar23 + (int)uVar17;
          do {
            uVar9 = *puVar20;
            uVar17 = uVar17 + uVar4;
            puVar20 = puVar20 + (long)(int)uVar16 + 1;
            dVar30 = dVar30 + (double)uVar9;
          } while ((int)uVar17 < (int)uVar12);
        }
        puVar18 = puVar18 + 1;
        uVar24 = uVar24 + 1;
        pdVar27[lVar23] = dVar30 + dVar32;
        lVar23 = lVar23 + 1;
      } while ((int)lVar23 < (int)uVar4);
LAB_002fe194:
      iVar26 = iVar26 + 1;
      pdVar27 = (double *)((long)pdVar27 + lVar29);
      puVar28 = (ushort *)((long)puVar28 + lVar37);
    } while (iVar26 != iVar8);
  }
  return;
}


==================================================================

### FUNC 002fe420 (996 bytes) name=FUN_002fe420

void FUN_002fe420(uint *param_1,long param_2)

{
  short *psVar1;
  short *psVar2;
  short *psVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  short sVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  short *psVar16;
  uint uVar17;
  short *psVar18;
  float *pfVar19;
  uint uVar20;
  long lVar21;
  ulong uVar22;
  ulong uVar23;
  int iVar24;
  float *pfVar25;
  short *psVar26;
  long lVar27;
  float fVar28;
  undefined1 auVar29 [16];
  float fVar30;
  undefined1 auVar31 [16];
  long lVar32;
  
  iVar8 = **(int **)(param_1 + 0x10);
  uVar14 = *param_1 >> 3 & 0x1ff;
  uVar4 = uVar14 + 1;
  uVar12 = uVar4 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar8) {
    uVar10 = uVar4 * 2;
    uVar23 = (ulong)uVar10;
    psVar26 = *(short **)(param_1 + 4);
    pfVar25 = *(float **)(param_2 + 0x10);
    lVar32 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar13 = uVar12 + uVar4 * -4;
    uVar7 = uVar12;
    if ((int)uVar12 < 1) {
      uVar7 = 1;
    }
    iVar24 = 0;
    do {
      while (uVar12 == uVar4) {
        uVar15 = -((uint)((ulong)pfVar25 >> 2) & 3) & 3;
        if (uVar7 < uVar15) {
          uVar15 = uVar7;
        }
        uVar5 = uVar7;
        if (((int)uVar7 < 9) || (uVar17 = 0, uVar5 = uVar15, uVar15 != 0)) {
          uVar15 = uVar5;
          *pfVar25 = (float)(int)*psVar26;
          uVar17 = uVar15;
          if (((uVar15 != 1) &&
              (((pfVar25[1] = (float)(int)psVar26[1], uVar15 != 2 &&
                (pfVar25[2] = (float)(int)psVar26[2], uVar15 != 3)) &&
               (pfVar25[3] = (float)(int)psVar26[3], uVar15 != 4)))) &&
             ((pfVar25[4] = (float)(int)psVar26[4], uVar15 != 5 &&
              (pfVar25[5] = (float)(int)psVar26[5], uVar15 != 6)))) {
            pfVar25[6] = (float)(int)psVar26[6];
            if (uVar15 == 8) {
              pfVar25[7] = (float)(int)psVar26[7];
            }
            else {
              uVar17 = 7;
            }
          }
          if (uVar15 == uVar7) goto LAB_002fe598;
        }
        iVar6 = uVar12 - 1;
        if ((int)uVar12 < 1) {
          iVar6 = 0;
        }
        uVar5 = ((uVar7 - uVar15) - 8 >> 3) + 1;
        iVar11 = uVar5 * 8;
        if (6 < iVar6 - uVar15) {
          uVar20 = 0;
          psVar16 = psVar26 + uVar15;
          pfVar19 = pfVar25 + uVar15;
          do {
            uVar20 = uVar20 + 1;
            auVar31._0_4_ = (int)*psVar16;
            auVar31._4_4_ = (int)psVar16[1];
            auVar31._8_4_ = (int)psVar16[2];
            auVar31._12_4_ = (int)psVar16[3];
            auVar29._0_4_ = (int)psVar16[4];
            auVar29._4_4_ = (int)psVar16[5];
            auVar29._8_4_ = (int)psVar16[6];
            auVar29._12_4_ = (int)psVar16[7];
            auVar31 = NEON_scvtf(auVar31,4);
            auVar29 = NEON_scvtf(auVar29,4);
            *(long *)(pfVar19 + 2) = auVar31._8_8_;
            *(long *)pfVar19 = auVar31._0_8_;
            *(long *)(pfVar19 + 6) = auVar29._8_8_;
            *(long *)(pfVar19 + 4) = auVar29._0_8_;
            psVar16 = psVar16 + 8;
            pfVar19 = pfVar19 + 8;
          } while (uVar20 < uVar5);
          uVar17 = uVar17 + iVar11;
          if (iVar11 == uVar7 - uVar15) goto LAB_002fe598;
        }
        iVar6 = uVar17 + 1;
        pfVar25[(int)uVar17] = (float)(int)psVar26[(int)uVar17];
        if ((int)uVar12 <= iVar6) goto LAB_002fe598;
        iVar11 = uVar17 + 2;
        pfVar25[iVar6] = (float)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe598;
        iVar6 = uVar17 + 3;
        pfVar25[iVar11] = (float)(int)psVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe598;
        iVar11 = uVar17 + 4;
        pfVar25[iVar6] = (float)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe598;
        iVar6 = uVar17 + 5;
        pfVar25[iVar11] = (float)(int)psVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe598;
        iVar11 = uVar17 + 6;
        pfVar25[iVar6] = (float)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe598;
        iVar24 = iVar24 + 1;
        pfVar25[iVar11] = (float)(int)psVar26[iVar11];
        pfVar25 = (float *)((long)pfVar25 + lVar27);
        psVar26 = (short *)((long)psVar26 + lVar32);
        if (iVar24 == iVar8) {
          return;
        }
      }
      lVar21 = 0;
      psVar16 = psVar26 + uVar23;
      uVar22 = uVar23;
      do {
        fVar28 = (float)(int)psVar26[lVar21];
        fVar30 = (float)(int)psVar26[(long)(int)uVar14 + lVar21 + 1];
        uVar15 = uVar10;
        if ((int)uVar10 <= iVar13) {
          psVar18 = psVar16;
          do {
            sVar9 = *psVar18;
            uVar15 = uVar15 + uVar4 * 4;
            psVar1 = psVar18 + ((((long)(int)uVar14 + 1 + uVar22) - lVar21) - uVar23);
            psVar2 = psVar18 + (uVar22 - lVar21);
            psVar3 = psVar18 + (((uVar22 + uVar4 * 3) - lVar21) - uVar23);
            psVar18 = psVar18 + uVar4 * 4;
            fVar28 = (float)(int)*psVar2 + fVar28 + (float)(int)sVar9;
            fVar30 = (float)(int)*psVar3 + fVar30 + (float)(int)*psVar1;
          } while ((int)uVar15 <= iVar13);
        }
        if ((int)uVar15 < (int)uVar12) {
          psVar18 = psVar26 + lVar21 + (int)uVar15;
          do {
            sVar9 = *psVar18;
            uVar15 = uVar15 + uVar4;
            psVar18 = psVar18 + (long)(int)uVar14 + 1;
            fVar28 = fVar28 + (float)(int)sVar9;
          } while ((int)uVar15 < (int)uVar12);
        }
        psVar16 = psVar16 + 1;
        uVar22 = uVar22 + 1;
        pfVar25[lVar21] = fVar28 + fVar30;
        lVar21 = lVar21 + 1;
      } while ((int)lVar21 < (int)uVar4);
LAB_002fe598:
      iVar24 = iVar24 + 1;
      pfVar25 = (float *)((long)pfVar25 + lVar27);
      psVar26 = (short *)((long)psVar26 + lVar32);
    } while (iVar24 != iVar8);
  }
  return;
}


==================================================================

### FUNC 002fe804 (1028 bytes) name=FUN_002fe804

void FUN_002fe804(uint *param_1,long param_2)

{
  short *psVar1;
  short *psVar2;
  short *psVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  short sVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  uint uVar15;
  short *psVar16;
  uint uVar17;
  short *psVar18;
  double *pdVar19;
  uint uVar20;
  long lVar21;
  ulong uVar22;
  ulong uVar23;
  int iVar24;
  double *pdVar25;
  short *psVar26;
  long lVar27;
  double dVar28;
  undefined1 auVar29 [16];
  double dVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  long lVar34;
  
  iVar8 = **(int **)(param_1 + 0x10);
  uVar14 = *param_1 >> 3 & 0x1ff;
  uVar4 = uVar14 + 1;
  uVar12 = uVar4 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar8) {
    uVar10 = uVar4 * 2;
    uVar23 = (ulong)uVar10;
    psVar26 = *(short **)(param_1 + 4);
    pdVar25 = *(double **)(param_2 + 0x10);
    lVar34 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar13 = uVar12 + uVar4 * -4;
    uVar7 = uVar12;
    if ((int)uVar12 < 1) {
      uVar7 = 1;
    }
    iVar24 = 0;
    do {
      while (uVar12 == uVar4) {
        uVar15 = (uint)((ulong)pdVar25 >> 3) & 1;
        if (uVar7 < uVar15) {
          uVar15 = uVar7;
        }
        uVar5 = uVar7;
        if (((int)uVar7 < 9) || (uVar17 = 0, uVar5 = uVar15, uVar15 != 0)) {
          uVar15 = uVar5;
          *pdVar25 = (double)(int)*psVar26;
          uVar17 = uVar15;
          if (((uVar15 != 1) &&
              (((pdVar25[1] = (double)(int)psVar26[1], uVar15 != 2 &&
                (pdVar25[2] = (double)(int)psVar26[2], uVar15 != 3)) &&
               (pdVar25[3] = (double)(int)psVar26[3], uVar15 != 4)))) &&
             ((pdVar25[4] = (double)(int)psVar26[4], uVar15 != 5 &&
              (pdVar25[5] = (double)(int)psVar26[5], uVar15 != 6)))) {
            pdVar25[6] = (double)(int)psVar26[6];
            if (uVar15 == 8) {
              pdVar25[7] = (double)(int)psVar26[7];
            }
            else {
              uVar17 = 7;
            }
          }
          if (uVar15 == uVar7) goto LAB_002fe97c;
        }
        iVar6 = uVar12 - 1;
        if ((int)uVar12 < 1) {
          iVar6 = 0;
        }
        uVar5 = ((uVar7 - uVar15) - 8 >> 3) + 1;
        iVar11 = uVar5 * 8;
        if (6 < iVar6 - uVar15) {
          uVar20 = 0;
          psVar16 = psVar26 + uVar15;
          pdVar19 = pdVar25 + uVar15;
          do {
            uVar20 = uVar20 + 1;
            auVar33._0_8_ = (long)(int)*psVar16;
            auVar33._8_8_ = (long)(int)psVar16[1];
            auVar31._0_8_ = (long)(int)psVar16[2];
            auVar31._8_8_ = (long)(int)psVar16[3];
            auVar32._0_8_ = (long)(int)psVar16[4];
            auVar32._8_8_ = (long)(int)psVar16[5];
            auVar29._0_8_ = (long)(int)psVar16[6];
            auVar29._8_8_ = (long)(int)psVar16[7];
            auVar33 = NEON_scvtf(auVar33,8);
            pdVar19[1] = auVar33._8_8_;
            *pdVar19 = auVar33._0_8_;
            auVar31 = NEON_scvtf(auVar31,8);
            auVar32 = NEON_scvtf(auVar32,8);
            auVar29 = NEON_scvtf(auVar29,8);
            pdVar19[3] = auVar31._8_8_;
            pdVar19[2] = auVar31._0_8_;
            pdVar19[5] = auVar32._8_8_;
            pdVar19[4] = auVar32._0_8_;
            pdVar19[7] = auVar29._8_8_;
            pdVar19[6] = auVar29._0_8_;
            psVar16 = psVar16 + 8;
            pdVar19 = pdVar19 + 8;
          } while (uVar20 < uVar5);
          uVar17 = uVar17 + iVar11;
          if (iVar11 == uVar7 - uVar15) goto LAB_002fe97c;
        }
        iVar6 = uVar17 + 1;
        pdVar25[(int)uVar17] = (double)(int)psVar26[(int)uVar17];
        if ((int)uVar12 <= iVar6) goto LAB_002fe97c;
        iVar11 = uVar17 + 2;
        pdVar25[iVar6] = (double)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe97c;
        iVar6 = uVar17 + 3;
        pdVar25[iVar11] = (double)(int)psVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe97c;
        iVar11 = uVar17 + 4;
        pdVar25[iVar6] = (double)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe97c;
        iVar6 = uVar17 + 5;
        pdVar25[iVar11] = (double)(int)psVar26[iVar11];
        if ((int)uVar12 <= iVar6) goto LAB_002fe97c;
        iVar11 = uVar17 + 6;
        pdVar25[iVar6] = (double)(int)psVar26[iVar6];
        if ((int)uVar12 <= iVar11) goto LAB_002fe97c;
        iVar24 = iVar24 + 1;
        pdVar25[iVar11] = (double)(int)psVar26[iVar11];
        pdVar25 = (double *)((long)pdVar25 + lVar27);
        psVar26 = (short *)((long)psVar26 + lVar34);
        if (iVar24 == iVar8) {
          return;
        }
      }
      lVar21 = 0;
      psVar16 = psVar26 + uVar23;
      uVar22 = uVar23;
      do {
        dVar28 = (double)(int)psVar26[lVar21];
        dVar30 = (double)(int)psVar26[(long)(int)uVar14 + lVar21 + 1];
        uVar15 = uVar10;
        if ((int)uVar10 <= iVar13) {
          psVar18 = psVar16;
          do {
            sVar9 = *psVar18;
            uVar15 = uVar15 + uVar4 * 4;
            psVar1 = psVar18 + ((((long)(int)uVar14 + 1 + uVar22) - lVar21) - uVar23);
            psVar2 = psVar18 + (uVar22 - lVar21);
            psVar3 = psVar18 + (((uVar22 + uVar4 * 3) - lVar21) - uVar23);
            psVar18 = psVar18 + uVar4 * 4;
            dVar28 = (double)(int)*psVar2 + dVar28 + (double)(int)sVar9;
            dVar30 = (double)(int)*psVar3 + dVar30 + (double)(int)*psVar1;
          } while ((int)uVar15 <= iVar13);
        }
        if ((int)uVar15 < (int)uVar12) {
          psVar18 = psVar26 + lVar21 + (int)uVar15;
          do {
            sVar9 = *psVar18;
            uVar15 = uVar15 + uVar4;
            psVar18 = psVar18 + (long)(int)uVar14 + 1;
            dVar28 = dVar28 + (double)(int)sVar9;
          } while ((int)uVar15 < (int)uVar12);
        }
        psVar16 = psVar16 + 1;
        uVar22 = uVar22 + 1;
        pdVar25[lVar21] = dVar28 + dVar30;
        lVar21 = lVar21 + 1;
      } while ((int)lVar21 < (int)uVar4);
LAB_002fe97c:
      iVar24 = iVar24 + 1;
      pdVar25 = (double *)((long)pdVar25 + lVar27);
      psVar26 = (short *)((long)psVar26 + lVar34);
    } while (iVar24 != iVar8);
  }
  return;
}


==================================================================

### FUNC 002fec08 (744 bytes) name=FUN_002fec08

void FUN_002fec08(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  uint uVar13;
  uint uVar14;
  ulong uVar15;
  float *pfVar16;
  undefined8 *puVar17;
  undefined8 *puVar18;
  long lVar19;
  ulong uVar20;
  uint uVar21;
  float *pfVar22;
  ulong uVar23;
  int iVar24;
  undefined4 *puVar25;
  undefined4 *puVar26;
  long lVar27;
  long lVar28;
  float fVar29;
  undefined8 uVar30;
  float fVar31;
  float fVar32;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar13 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar13 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar5) {
    uVar6 = uVar1 * 2;
    uVar23 = (ulong)uVar6;
    puVar26 = *(undefined4 **)(param_1 + 4);
    puVar25 = *(undefined4 **)(param_2 + 0x10);
    lVar28 = **(long **)(param_1 + 0x12);
    iVar9 = uVar8 + uVar1 * -4;
    lVar27 = **(long **)(param_2 + 0x48);
    iVar24 = 0;
    do {
      while (uVar8 == uVar1) {
        uVar14 = uVar8;
        if ((int)uVar8 < 1) {
          uVar14 = 1;
        }
        if ((puVar26 < puVar25 + 4 && puVar25 < puVar26 + 4) || (uVar14 < 0xc)) {
          lVar19 = 0;
          do {
            puVar25[lVar19] = puVar26[lVar19];
            lVar19 = lVar19 + 1;
          } while ((int)lVar19 < (int)uVar8);
        }
        else {
          uVar3 = -((uint)((ulong)puVar26 >> 2) & 3) & 3;
          if (uVar14 < uVar3) {
            uVar3 = uVar14;
          }
          if ((uVar3 == 0) || (*puVar25 = *puVar26, uVar3 == 1)) {
            uVar20 = (ulong)uVar3;
          }
          else {
            puVar25[1] = puVar26[1];
            if (uVar3 == 3) {
              uVar20 = 3;
              puVar25[2] = puVar26[2];
            }
            else {
              uVar20 = 2;
            }
          }
          iVar4 = uVar8 - 1;
          if ((int)uVar8 < 1) {
            iVar4 = 0;
          }
          uVar2 = ((uVar14 - uVar3) - 4 >> 2) + 1;
          iVar7 = uVar2 * 4;
          if (2 < iVar4 - uVar3) {
            uVar21 = 0;
            puVar17 = (undefined8 *)(puVar26 + uVar3);
            puVar18 = (undefined8 *)(puVar25 + uVar3);
            do {
              uVar30 = *puVar17;
              uVar21 = uVar21 + 1;
              puVar18[1] = puVar17[1];
              *puVar18 = uVar30;
              puVar17 = puVar17 + 2;
              puVar18 = puVar18 + 2;
            } while (uVar21 < uVar2);
            uVar20 = (ulong)(uint)((int)uVar20 + iVar7);
            if (iVar7 == uVar14 - uVar3) goto LAB_002fed54;
          }
          uVar15 = -(uVar20 >> 0x1f) & 0xfffffffc00000000 | uVar20 << 2;
          *(undefined4 *)((long)puVar25 + uVar15) = *(undefined4 *)((long)puVar26 + uVar15);
          if (((int)uVar8 <= (int)uVar20 + 1) ||
             (*(undefined4 *)((long)puVar25 + uVar15 + 4) =
                   *(undefined4 *)((long)puVar26 + uVar15 + 4), (int)uVar8 <= (int)uVar20 + 2))
          goto LAB_002fed54;
          *(undefined4 *)((long)puVar25 + uVar15 + 8) = *(undefined4 *)((long)puVar26 + uVar15 + 8);
        }
        puVar25 = (undefined4 *)((long)puVar25 + lVar27);
        puVar26 = (undefined4 *)((long)puVar26 + lVar28);
        iVar24 = iVar24 + 1;
        if (iVar24 == iVar5) {
          return;
        }
      }
      lVar19 = 0;
      pfVar22 = (float *)(puVar26 + uVar23);
      uVar20 = uVar23;
      do {
        fVar29 = (float)puVar26[lVar19];
        fVar31 = (float)puVar26[(long)(int)uVar13 + lVar19 + 1];
        uVar14 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pfVar16 = pfVar22;
          do {
            fVar32 = *pfVar16;
            uVar14 = uVar14 + uVar1 * 4;
            pfVar10 = pfVar16 + ((((long)(int)uVar13 + 1 + uVar20) - lVar19) - uVar23);
            pfVar11 = pfVar16 + (uVar20 - lVar19);
            pfVar12 = pfVar16 + (((uVar20 + uVar1 * 3) - lVar19) - uVar23);
            pfVar16 = pfVar16 + uVar1 * 4;
            fVar29 = fVar29 + fVar32 + *pfVar11;
            fVar31 = fVar31 + *pfVar10 + *pfVar12;
          } while ((int)uVar14 <= iVar9);
        }
        if ((int)uVar14 < (int)uVar8) {
          pfVar16 = (float *)(puVar26 + lVar19 + (int)uVar14);
          do {
            uVar14 = uVar14 + uVar1;
            fVar32 = *pfVar16;
            pfVar16 = pfVar16 + (long)(int)uVar13 + 1;
            fVar29 = fVar29 + fVar32;
          } while ((int)uVar14 < (int)uVar8);
        }
        pfVar22 = pfVar22 + 1;
        uVar20 = uVar20 + 1;
        puVar25[lVar19] = fVar29 + fVar31;
        lVar19 = lVar19 + 1;
      } while ((int)lVar19 < (int)uVar1);
LAB_002fed54:
      iVar24 = iVar24 + 1;
      puVar25 = (undefined4 *)((long)puVar25 + lVar27);
      puVar26 = (undefined4 *)((long)puVar26 + lVar28);
    } while (iVar24 != iVar5);
  }
  return;
}


==================================================================

### FUNC 002feef0 (772 bytes) name=FUN_002feef0

void FUN_002feef0(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  uint uVar13;
  uint uVar14;
  float *pfVar15;
  uint uVar16;
  float *pfVar17;
  double *pdVar18;
  uint uVar19;
  long lVar20;
  ulong uVar21;
  ulong uVar22;
  int iVar23;
  double *pdVar24;
  float *pfVar25;
  long lVar26;
  long lVar27;
  double dVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  double dVar31;
  float fVar32;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar13 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar13 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar5) {
    uVar6 = uVar1 * 2;
    uVar22 = (ulong)uVar6;
    pfVar25 = *(float **)(param_1 + 4);
    pdVar24 = *(double **)(param_2 + 0x10);
    lVar26 = **(long **)(param_2 + 0x48);
    lVar27 = **(long **)(param_1 + 0x12);
    iVar9 = uVar8 + uVar1 * -4;
    uVar4 = uVar8;
    if ((int)uVar8 < 1) {
      uVar4 = 1;
    }
    iVar23 = 0;
    do {
      while (uVar8 == uVar1) {
        uVar14 = (uint)((ulong)pdVar24 >> 3) & 1;
        if (uVar4 < uVar14) {
          uVar14 = uVar4;
        }
        uVar2 = uVar4;
        if (((int)uVar4 < 5) || (uVar16 = 0, uVar2 = uVar14, uVar14 != 0)) {
          uVar14 = uVar2;
          *pdVar24 = (double)*pfVar25;
          uVar16 = uVar14;
          if ((uVar14 != 1) && (pdVar24[1] = (double)pfVar25[1], uVar14 != 2)) {
            pdVar24[2] = (double)pfVar25[2];
            if (uVar14 == 4) {
              pdVar24[3] = (double)pfVar25[3];
            }
            else {
              uVar16 = 3;
            }
          }
          if (uVar14 == uVar4) goto LAB_002ff064;
        }
        iVar3 = uVar8 - 1;
        if ((int)uVar8 < 1) {
          iVar3 = 0;
        }
        uVar2 = ((uVar4 - uVar14) - 4 >> 2) + 1;
        iVar7 = uVar2 * 4;
        if (2 < iVar3 - uVar14) {
          uVar19 = 0;
          pfVar15 = pfVar25 + uVar14;
          pdVar18 = pdVar24 + uVar14;
          do {
            uVar30 = *(undefined8 *)(pfVar15 + 2);
            uVar29 = *(undefined8 *)pfVar15;
            uVar19 = uVar19 + 1;
            pdVar18[1] = (double)(float)((ulong)uVar29 >> 0x20);
            *pdVar18 = (double)(float)uVar29;
            pdVar18[3] = (double)(float)((ulong)uVar30 >> 0x20);
            pdVar18[2] = (double)(float)uVar30;
            pfVar15 = pfVar15 + 4;
            pdVar18 = pdVar18 + 4;
          } while (uVar19 < uVar2);
          uVar16 = uVar16 + iVar7;
          if (iVar7 == uVar4 - uVar14) goto LAB_002ff064;
        }
        iVar3 = uVar16 + 1;
        pdVar24[(int)uVar16] = (double)pfVar25[(int)uVar16];
        if ((int)uVar8 <= iVar3) goto LAB_002ff064;
        iVar7 = uVar16 + 2;
        pdVar24[iVar3] = (double)pfVar25[iVar3];
        if ((int)uVar8 <= iVar7) goto LAB_002ff064;
        iVar23 = iVar23 + 1;
        pfVar15 = pfVar25 + iVar7;
        pfVar25 = (float *)((long)pfVar25 + lVar27);
        pdVar24[iVar7] = (double)*pfVar15;
        pdVar24 = (double *)((long)pdVar24 + lVar26);
        if (iVar23 == iVar5) {
          return;
        }
      }
      lVar20 = 0;
      pfVar15 = pfVar25 + uVar22;
      uVar21 = uVar22;
      do {
        dVar28 = (double)pfVar25[lVar20];
        dVar31 = (double)pfVar25[(long)(int)uVar13 + lVar20 + 1];
        uVar14 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pfVar17 = pfVar15;
          do {
            fVar32 = *pfVar17;
            uVar14 = uVar14 + uVar1 * 4;
            pfVar10 = pfVar17 + ((((long)(int)uVar13 + 1 + uVar21) - lVar20) - uVar22);
            pfVar11 = pfVar17 + (uVar21 - lVar20);
            pfVar12 = pfVar17 + (((uVar21 + uVar1 * 3) - lVar20) - uVar22);
            pfVar17 = pfVar17 + uVar1 * 4;
            dVar28 = (double)*pfVar11 + dVar28 + (double)fVar32;
            dVar31 = (double)*pfVar12 + dVar31 + (double)*pfVar10;
          } while ((int)uVar14 <= iVar9);
        }
        if ((int)uVar14 < (int)uVar8) {
          pfVar17 = pfVar25 + lVar20 + (int)uVar14;
          do {
            fVar32 = *pfVar17;
            uVar14 = uVar14 + uVar1;
            pfVar17 = pfVar17 + (long)(int)uVar13 + 1;
            dVar28 = dVar28 + (double)fVar32;
          } while ((int)uVar14 < (int)uVar8);
        }
        pfVar15 = pfVar15 + 1;
        uVar21 = uVar21 + 1;
        pdVar24[lVar20] = dVar28 + dVar31;
        lVar20 = lVar20 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_002ff064:
      iVar23 = iVar23 + 1;
      pdVar24 = (double *)((long)pdVar24 + lVar26);
      pfVar25 = (float *)((long)pfVar25 + lVar27);
    } while (iVar23 != iVar5);
  }
  return;
}


==================================================================

### FUNC 002ff1f4 (644 bytes) name=FUN_002ff1f4

void FUN_002ff1f4(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  double *pdVar11;
  double *pdVar12;
  uint uVar13;
  uint uVar14;
  undefined8 *puVar15;
  double *pdVar16;
  undefined8 *puVar17;
  uint uVar18;
  ulong uVar19;
  long lVar20;
  double *pdVar21;
  ulong uVar22;
  int iVar23;
  undefined8 *puVar24;
  undefined8 *puVar25;
  long lVar26;
  long lVar27;
  double dVar28;
  undefined8 uVar29;
  double dVar30;
  double dVar31;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar13 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar13 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar5) {
    uVar6 = uVar1 * 2;
    uVar22 = (ulong)uVar6;
    puVar25 = *(undefined8 **)(param_1 + 4);
    puVar24 = *(undefined8 **)(param_2 + 0x10);
    lVar27 = **(long **)(param_1 + 0x12);
    iVar9 = uVar8 + uVar1 * -4;
    lVar26 = **(long **)(param_2 + 0x48);
    iVar23 = 0;
    do {
      while (uVar8 == uVar1) {
        uVar14 = uVar8;
        if ((int)uVar8 < 1) {
          uVar14 = 1;
        }
        if ((puVar25 < puVar24 + 2 && puVar24 < puVar25 + 2) || (uVar14 < 0xe)) {
          lVar20 = 0;
          do {
            puVar24[lVar20] = puVar25[lVar20];
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar8);
        }
        else {
          uVar4 = (uint)((ulong)puVar25 >> 3) & 1;
          if (uVar14 < uVar4) {
            uVar4 = uVar14;
          }
          bVar3 = uVar4 != 0;
          if (bVar3) {
            *puVar24 = *puVar25;
          }
          uVar19 = (ulong)bVar3;
          uVar18 = uVar8 - 1;
          if ((int)uVar8 < 1) {
            uVar18 = 0;
          }
          uVar2 = ((uVar14 - uVar4) - 2 >> 1) + 1;
          iVar7 = uVar2 * 2;
          if (uVar18 != uVar4) {
            uVar18 = 0;
            puVar15 = puVar25 + uVar4;
            puVar17 = puVar24 + uVar4;
            do {
              uVar29 = *puVar15;
              uVar18 = uVar18 + 1;
              puVar17[1] = puVar15[1];
              *puVar17 = uVar29;
              puVar15 = puVar15 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar18 < uVar2);
            uVar19 = (ulong)((uint)bVar3 + iVar7);
            if (iVar7 == uVar14 - uVar4) goto LAB_002ff340;
          }
          uVar19 = -(uVar19 >> 0x1f) & 0xfffffff800000000 | uVar19 << 3;
          *(undefined8 *)((long)puVar24 + uVar19) = *(undefined8 *)((long)puVar25 + uVar19);
        }
        puVar24 = (undefined8 *)((long)puVar24 + lVar26);
        puVar25 = (undefined8 *)((long)puVar25 + lVar27);
        iVar23 = iVar23 + 1;
        if (iVar23 == iVar5) {
          return;
        }
      }
      lVar20 = 0;
      pdVar21 = (double *)(puVar25 + uVar22);
      uVar19 = uVar22;
      do {
        dVar28 = (double)puVar25[lVar20];
        dVar30 = (double)puVar25[(long)(int)uVar13 + lVar20 + 1];
        uVar14 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pdVar16 = pdVar21;
          do {
            dVar31 = *pdVar16;
            uVar14 = uVar14 + uVar1 * 4;
            pdVar10 = pdVar16 + ((((long)(int)uVar13 + 1 + uVar19) - lVar20) - uVar22);
            pdVar11 = pdVar16 + (uVar19 - lVar20);
            pdVar12 = pdVar16 + (((uVar19 + uVar1 * 3) - lVar20) - uVar22);
            pdVar16 = pdVar16 + uVar1 * 4;
            dVar28 = dVar28 + dVar31 + *pdVar11;
            dVar30 = dVar30 + *pdVar10 + *pdVar12;
          } while ((int)uVar14 <= iVar9);
        }
        if ((int)uVar14 < (int)uVar8) {
          pdVar16 = (double *)(puVar25 + lVar20 + (int)uVar14);
          do {
            uVar14 = uVar14 + uVar1;
            dVar31 = *pdVar16;
            pdVar16 = pdVar16 + (long)(int)uVar13 + 1;
            dVar28 = dVar28 + dVar31;
          } while ((int)uVar14 < (int)uVar8);
        }
        pdVar21 = pdVar21 + 1;
        uVar19 = uVar19 + 1;
        puVar24[lVar20] = dVar28 + dVar30;
        lVar20 = lVar20 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_002ff340:
      iVar23 = iVar23 + 1;
      puVar24 = (undefined8 *)((long)puVar24 + lVar26);
      puVar25 = (undefined8 *)((long)puVar25 + lVar27);
    } while (iVar23 != iVar5);
  }
  return;
}


==================================================================

### FUNC 002ff478 (1216 bytes) name=FUN_002ff478

void FUN_002ff478(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  ulong uVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  byte bVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  byte bVar13;
  long lVar14;
  undefined8 *puVar15;
  uint uVar16;
  long lVar17;
  undefined8 *puVar18;
  uint uVar19;
  byte *pbVar20;
  uint uVar21;
  long lVar22;
  byte bVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  ulong uVar27;
  long lVar28;
  undefined8 uVar29;
  
  uVar1 = (*param_1 >> 3 & 0x1ff) + 1;
  iVar7 = **(int **)(param_1 + 0x10);
  uVar11 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar7) {
    uVar9 = uVar1 * 2;
    uVar27 = (ulong)uVar9;
    iVar12 = uVar11 + uVar1 * -4;
    lVar28 = 0;
    lVar25 = (long)(int)uVar1;
    do {
      while( true ) {
        lVar26 = 0;
        lVar22 = *(long *)(param_1 + 4);
        lVar24 = *(long *)(param_2 + 0x10);
        lVar14 = lVar28 * **(long **)(param_1 + 0x12);
        lVar17 = lVar28 * **(long **)(param_2 + 0x48);
        uVar3 = lVar22 + lVar14;
        uVar4 = lVar24 + lVar17;
        if (uVar11 == uVar1) break;
        do {
          bVar13 = *(byte *)(uVar3 + lVar26);
          bVar23 = *(byte *)(uVar3 + lVar25 + lVar26);
          uVar16 = uVar9;
          if ((int)uVar9 <= iVar12) {
            pbVar20 = (byte *)(uVar3 + lVar26 + (ulong)uVar9 * 2);
            do {
              uVar16 = uVar16 + uVar1 * 4;
              bVar8 = pbVar20[-uVar27];
              if (pbVar20[-uVar27] < *pbVar20) {
                bVar8 = *pbVar20;
              }
              if (bVar8 < bVar13) {
                bVar8 = bVar13;
              }
              bVar13 = bVar8;
              bVar8 = pbVar20[uVar1 * 3 - uVar27];
              if (pbVar20[uVar1 * 3 - uVar27] < pbVar20[lVar25 - uVar27]) {
                bVar8 = pbVar20[lVar25 - uVar27];
              }
              if (bVar8 < bVar23) {
                bVar8 = bVar23;
              }
              bVar23 = bVar8;
              pbVar20 = pbVar20 + uVar1 * 4;
            } while ((int)uVar16 <= iVar12);
          }
          if ((int)uVar16 < (int)uVar11) {
            pbVar20 = (byte *)(uVar3 + lVar26 + (int)uVar16);
            do {
              bVar8 = *pbVar20;
              uVar16 = uVar16 + uVar1;
              pbVar20 = pbVar20 + lVar25;
              if (bVar8 <= bVar13) {
                bVar8 = bVar13;
              }
              bVar13 = bVar8;
            } while ((int)uVar16 < (int)uVar11);
          }
          if (bVar23 <= bVar13) {
            bVar23 = bVar13;
          }
          *(byte *)(uVar4 + lVar26) = bVar23;
          lVar26 = lVar26 + 1;
        } while ((int)lVar26 < (int)uVar1);
joined_r0x002ff920:
        iVar6 = (int)lVar28;
        lVar28 = lVar28 + 1;
        if (iVar7 <= iVar6 + 1) {
          return;
        }
      }
      uVar16 = uVar11;
      if ((int)uVar11 < 1) {
        uVar16 = 1;
      }
      if ((uVar3 < (ulong)(lVar24 + lVar17 + 0x10) && uVar4 < (ulong)(lVar22 + lVar14 + 0x10)) ||
         (uVar16 < 0x16)) {
        lVar26 = 0;
        do {
          *(undefined1 *)(uVar4 + lVar26) = *(undefined1 *)(uVar3 + lVar26);
          lVar26 = lVar26 + 1;
        } while ((int)lVar26 < (int)uVar11);
        goto joined_r0x002ff920;
      }
      uVar21 = -(int)uVar3 & 0xf;
      uVar5 = uVar16;
      if (uVar21 < uVar16) {
        uVar5 = uVar21;
      }
      uVar21 = uVar5;
      if ((((uVar5 != 0) &&
           (*(undefined1 *)(lVar24 + lVar17) = *(undefined1 *)(lVar22 + lVar14), uVar5 != 1)) &&
          (*(undefined1 *)(uVar4 + 1) = *(undefined1 *)(uVar3 + 1), uVar5 != 2)) &&
         (((*(undefined1 *)(uVar4 + 2) = *(undefined1 *)(uVar3 + 2), uVar5 != 3 &&
           (*(undefined1 *)(uVar4 + 3) = *(undefined1 *)(uVar3 + 3), uVar5 != 4)) &&
          (*(undefined1 *)(uVar4 + 4) = *(undefined1 *)(uVar3 + 4), uVar5 != 5)))) {
        *(undefined1 *)(uVar4 + 5) = *(undefined1 *)(uVar3 + 5);
        if (uVar5 == 6) {
          uVar21 = 6;
        }
        else {
          *(undefined1 *)(uVar4 + 6) = *(undefined1 *)(uVar3 + 6);
          if (((uVar5 != 7) && (*(undefined1 *)(uVar4 + 7) = *(undefined1 *)(uVar3 + 7), uVar5 != 8)
              ) && (((*(undefined1 *)(uVar4 + 8) = *(undefined1 *)(uVar3 + 8), uVar5 != 9 &&
                     (((*(undefined1 *)(uVar4 + 9) = *(undefined1 *)(uVar3 + 9), uVar5 != 10 &&
                       (*(undefined1 *)(uVar4 + 10) = *(undefined1 *)(uVar3 + 10), uVar5 != 0xb)) &&
                      (*(undefined1 *)(uVar4 + 0xb) = *(undefined1 *)(uVar3 + 0xb), uVar5 != 0xc))))
                    && (*(undefined1 *)(uVar4 + 0xc) = *(undefined1 *)(uVar3 + 0xc), uVar5 != 0xd)))
             ) {
            *(undefined1 *)(uVar4 + 0xd) = *(undefined1 *)(uVar3 + 0xd);
            if (uVar5 == 0xf) {
              *(undefined1 *)(uVar4 + 0xe) = *(undefined1 *)(uVar3 + 0xe);
            }
            else {
              uVar21 = 0xe;
            }
          }
        }
      }
      iVar6 = uVar11 - 1;
      if ((int)uVar11 < 1) {
        iVar6 = 0;
      }
      uVar2 = ((uVar16 - uVar5) - 0x10 >> 4) + 1;
      iVar10 = uVar2 * 0x10;
      if (0xe < iVar6 - uVar5) {
        uVar19 = 0;
        puVar15 = (undefined8 *)(lVar22 + (ulong)uVar5 + lVar14);
        puVar18 = (undefined8 *)(lVar24 + (ulong)uVar5 + lVar17);
        do {
          uVar29 = *puVar15;
          uVar19 = uVar19 + 1;
          puVar18[1] = puVar15[1];
          *puVar18 = uVar29;
          puVar15 = puVar15 + 2;
          puVar18 = puVar18 + 2;
        } while (uVar19 < uVar2);
        uVar21 = uVar21 + iVar10;
        if (iVar10 == uVar16 - uVar5) goto joined_r0x002ff920;
      }
      iVar6 = uVar21 + 1;
      *(undefined1 *)(uVar4 + (long)(int)uVar21) = *(undefined1 *)(uVar3 + (long)(int)uVar21);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 2;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 3;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 4;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 5;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 6;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 7;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 8;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 9;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 10;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 0xb;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 0xc;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      iVar6 = uVar21 + 0xd;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x002ff920;
      iVar10 = uVar21 + 0xe;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x002ff920;
      lVar28 = lVar28 + 1;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
    } while ((int)lVar28 < iVar7);
  }
  return;
}


==================================================================

### FUNC 002ff938 (1000 bytes) name=FUN_002ff938

void FUN_002ff938(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  ushort uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  ushort uVar10;
  undefined8 *puVar11;
  ulong uVar12;
  uint uVar13;
  int iVar14;
  ulong uVar15;
  ushort *puVar16;
  undefined8 *puVar17;
  ushort uVar18;
  uint uVar19;
  long lVar20;
  ushort *puVar21;
  ulong uVar22;
  int iVar23;
  undefined2 *puVar24;
  undefined2 *puVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  undefined8 uVar29;
  
  iVar26 = **(int **)(param_1 + 0x10);
  uVar9 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar9 + 1;
  uVar7 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar26) {
    uVar5 = uVar1 * 2;
    uVar22 = (ulong)uVar5;
    puVar25 = *(undefined2 **)(param_1 + 4);
    puVar24 = *(undefined2 **)(param_2 + 0x10);
    lVar28 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar8 = uVar7 + uVar1 * -4;
    iVar23 = 0;
    do {
      while (uVar7 == uVar1) {
        uVar13 = uVar7;
        if ((int)uVar7 < 1) {
          uVar13 = 1;
        }
        if ((puVar25 < puVar24 + 8 && puVar24 < puVar25 + 8) || (uVar13 < 0xf)) {
          lVar20 = 0;
          do {
            puVar24[lVar20] = puVar25[lVar20];
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar7);
        }
        else {
          uVar3 = -((uint)((ulong)puVar25 >> 1) & 7) & 7;
          if (uVar13 < uVar3) {
            uVar3 = uVar13;
          }
          if ((((uVar3 == 0) || (*puVar24 = *puVar25, uVar3 == 1)) ||
              (puVar24[1] = puVar25[1], uVar3 == 2)) ||
             (((puVar24[2] = puVar25[2], uVar3 == 3 || (puVar24[3] = puVar25[3], uVar3 == 4)) ||
              (puVar24[4] = puVar25[4], uVar3 == 5)))) {
            uVar15 = (ulong)uVar3;
          }
          else {
            puVar24[5] = puVar25[5];
            if (uVar3 == 7) {
              uVar15 = 7;
              puVar24[6] = puVar25[6];
            }
            else {
              uVar15 = 6;
            }
          }
          iVar14 = uVar7 - 1;
          if ((int)uVar7 < 1) {
            iVar14 = 0;
          }
          uVar2 = ((uVar13 - uVar3) - 8 >> 3) + 1;
          iVar6 = uVar2 * 8;
          if (6 < iVar14 - uVar3) {
            uVar19 = 0;
            puVar11 = (undefined8 *)(puVar25 + uVar3);
            puVar17 = (undefined8 *)(puVar24 + uVar3);
            do {
              uVar29 = *puVar11;
              uVar19 = uVar19 + 1;
              puVar17[1] = puVar11[1];
              *puVar17 = uVar29;
              puVar11 = puVar11 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar19 < uVar2);
            uVar15 = (ulong)(uint)((int)uVar15 + iVar6);
            if (iVar6 == uVar13 - uVar3) goto LAB_002ffab4;
          }
          uVar12 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
          iVar14 = (int)uVar15;
          *(undefined2 *)((long)puVar24 + uVar12) = *(undefined2 *)((long)puVar25 + uVar12);
          if ((((int)uVar7 <= iVar14 + 1) ||
              (*(undefined2 *)((long)puVar24 + uVar12 + 2) =
                    *(undefined2 *)((long)puVar25 + uVar12 + 2), (int)uVar7 <= iVar14 + 2)) ||
             ((*(undefined2 *)((long)puVar24 + uVar12 + 4) =
                    *(undefined2 *)((long)puVar25 + uVar12 + 4), (int)uVar7 <= iVar14 + 3 ||
              (((*(undefined2 *)((long)puVar24 + uVar12 + 6) =
                      *(undefined2 *)((long)puVar25 + uVar12 + 6), (int)uVar7 <= iVar14 + 4 ||
                (*(undefined2 *)((long)puVar24 + uVar12 + 8) =
                      *(undefined2 *)((long)puVar25 + uVar12 + 8), (int)uVar7 <= iVar14 + 5)) ||
               (*(undefined2 *)((long)puVar24 + uVar12 + 10) =
                     *(undefined2 *)((long)puVar25 + uVar12 + 10), (int)uVar7 <= iVar14 + 6))))))
          goto LAB_002ffab4;
          *(undefined2 *)((long)puVar24 + uVar12 + 0xc) =
               *(undefined2 *)((long)puVar25 + uVar12 + 0xc);
        }
        puVar25 = (undefined2 *)((long)puVar25 + lVar28);
        puVar24 = (undefined2 *)((long)puVar24 + lVar27);
        iVar23 = iVar23 + 1;
        if (iVar23 == iVar26) {
          return;
        }
      }
      lVar20 = 0;
      puVar21 = puVar25 + uVar22;
      uVar15 = uVar22;
      do {
        uVar10 = puVar25[lVar20];
        uVar18 = puVar25[(long)(int)uVar9 + lVar20 + 1];
        uVar13 = uVar5;
        if ((int)uVar5 <= iVar8) {
          puVar16 = puVar21;
          do {
            uVar13 = uVar13 + uVar1 * 4;
            uVar4 = puVar16[uVar15 - lVar20];
            if (puVar16[uVar15 - lVar20] < *puVar16) {
              uVar4 = *puVar16;
            }
            if (uVar4 < uVar10) {
              uVar4 = uVar10;
            }
            uVar10 = uVar4;
            uVar4 = puVar16[((uVar15 + uVar1 * 3) - lVar20) - uVar22];
            if (puVar16[((uVar15 + uVar1 * 3) - lVar20) - uVar22] <
                puVar16[(((long)(int)uVar9 + 1 + uVar15) - lVar20) - uVar22]) {
              uVar4 = puVar16[(((long)(int)uVar9 + 1 + uVar15) - lVar20) - uVar22];
            }
            if (uVar4 < uVar18) {
              uVar4 = uVar18;
            }
            uVar18 = uVar4;
            puVar16 = puVar16 + uVar1 * 4;
          } while ((int)uVar13 <= iVar8);
        }
        if ((int)uVar13 < (int)uVar7) {
          puVar16 = puVar25 + lVar20 + (int)uVar13;
          do {
            uVar4 = *puVar16;
            uVar13 = uVar13 + uVar1;
            puVar16 = puVar16 + (long)(int)uVar9 + 1;
            if (uVar4 <= uVar10) {
              uVar4 = uVar10;
            }
            uVar10 = uVar4;
          } while ((int)uVar13 < (int)uVar7);
        }
        puVar21 = puVar21 + 1;
        if (uVar18 <= uVar10) {
          uVar18 = uVar10;
        }
        puVar24[lVar20] = uVar18;
        lVar20 = lVar20 + 1;
        uVar15 = uVar15 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_002ffab4:
      iVar23 = iVar23 + 1;
      puVar24 = (undefined2 *)((long)puVar24 + lVar27);
      puVar25 = (undefined2 *)((long)puVar25 + lVar28);
    } while (iVar23 != iVar26);
  }
  return;
}


==================================================================

### FUNC 002ffd20 (1008 bytes) name=FUN_002ffd20

void FUN_002ffd20(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  ushort uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined8 *puVar10;
  ulong uVar11;
  int iVar12;
  ushort *puVar13;
  ulong uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  uint uVar18;
  long lVar19;
  long lVar20;
  ushort *puVar21;
  ulong uVar22;
  int iVar23;
  undefined2 *puVar24;
  undefined2 *puVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  undefined8 uVar29;
  
  iVar26 = **(int **)(param_1 + 0x10);
  uVar8 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar8 + 1;
  uVar6 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar26) {
    uVar4 = uVar1 * 2;
    uVar22 = (ulong)uVar4;
    puVar25 = *(undefined2 **)(param_1 + 4);
    puVar24 = *(undefined2 **)(param_2 + 0x10);
    lVar28 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar7 = uVar6 + uVar1 * -4;
    iVar23 = 0;
    do {
      while (uVar6 == uVar1) {
        uVar15 = uVar6;
        if ((int)uVar6 < 1) {
          uVar15 = 1;
        }
        if ((puVar25 < puVar24 + 8 && puVar24 < puVar25 + 8) || (uVar15 < 0xf)) {
          lVar20 = 0;
          do {
            puVar24[lVar20] = puVar25[lVar20];
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar6);
        }
        else {
          uVar16 = -((uint)((ulong)puVar25 >> 1) & 7) & 7;
          if (uVar15 < uVar16) {
            uVar16 = uVar15;
          }
          if ((((uVar16 == 0) || (*puVar24 = *puVar25, uVar16 == 1)) ||
              (puVar24[1] = puVar25[1], uVar16 == 2)) ||
             (((puVar24[2] = puVar25[2], uVar16 == 3 || (puVar24[3] = puVar25[3], uVar16 == 4)) ||
              (puVar24[4] = puVar25[4], uVar16 == 5)))) {
            uVar14 = (ulong)uVar16;
          }
          else {
            puVar24[5] = puVar25[5];
            if (uVar16 == 7) {
              uVar14 = 7;
              puVar24[6] = puVar25[6];
            }
            else {
              uVar14 = 6;
            }
          }
          iVar12 = uVar6 - 1;
          if ((int)uVar6 < 1) {
            iVar12 = 0;
          }
          uVar9 = ((uVar15 - uVar16) - 8 >> 3) + 1;
          iVar5 = uVar9 * 8;
          if (6 < iVar12 - uVar16) {
            uVar18 = 0;
            puVar10 = (undefined8 *)(puVar25 + uVar16);
            puVar17 = (undefined8 *)(puVar24 + uVar16);
            do {
              uVar29 = *puVar10;
              uVar18 = uVar18 + 1;
              puVar17[1] = puVar10[1];
              *puVar17 = uVar29;
              puVar10 = puVar10 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar18 < uVar9);
            uVar14 = (ulong)(uint)((int)uVar14 + iVar5);
            if (iVar5 == uVar15 - uVar16) goto LAB_002ffea4;
          }
          uVar11 = -(uVar14 >> 0x1f) & 0xfffffffe00000000 | uVar14 << 1;
          iVar12 = (int)uVar14;
          *(undefined2 *)((long)puVar24 + uVar11) = *(undefined2 *)((long)puVar25 + uVar11);
          if ((((int)uVar6 <= iVar12 + 1) ||
              (*(undefined2 *)((long)puVar24 + uVar11 + 2) =
                    *(undefined2 *)((long)puVar25 + uVar11 + 2), (int)uVar6 <= iVar12 + 2)) ||
             ((*(undefined2 *)((long)puVar24 + uVar11 + 4) =
                    *(undefined2 *)((long)puVar25 + uVar11 + 4), (int)uVar6 <= iVar12 + 3 ||
              (((*(undefined2 *)((long)puVar24 + uVar11 + 6) =
                      *(undefined2 *)((long)puVar25 + uVar11 + 6), (int)uVar6 <= iVar12 + 4 ||
                (*(undefined2 *)((long)puVar24 + uVar11 + 8) =
                      *(undefined2 *)((long)puVar25 + uVar11 + 8), (int)uVar6 <= iVar12 + 5)) ||
               (*(undefined2 *)((long)puVar24 + uVar11 + 10) =
                     *(undefined2 *)((long)puVar25 + uVar11 + 10), (int)uVar6 <= iVar12 + 6))))))
          goto LAB_002ffea4;
          *(undefined2 *)((long)puVar24 + uVar11 + 0xc) =
               *(undefined2 *)((long)puVar25 + uVar11 + 0xc);
        }
        puVar25 = (undefined2 *)((long)puVar25 + lVar28);
        puVar24 = (undefined2 *)((long)puVar24 + lVar27);
        iVar23 = iVar23 + 1;
        if (iVar23 == iVar26) {
          return;
        }
      }
      lVar20 = 0;
      puVar21 = puVar25 + uVar22;
      uVar14 = uVar22;
      do {
        uVar9 = (uint)(short)puVar25[lVar20];
        uVar16 = (uint)(short)puVar25[(long)(int)uVar8 + lVar20 + 1];
        uVar15 = uVar4;
        if ((int)uVar4 <= iVar7) {
          lVar19 = ((uVar14 + uVar1 * 3) - lVar20) - uVar22;
          puVar13 = puVar21;
          do {
            uVar15 = uVar15 + uVar1 * 4;
            uVar3 = puVar13[uVar14 - lVar20];
            if ((short)puVar13[uVar14 - lVar20] < (short)*puVar13) {
              uVar3 = *puVar13;
            }
            uVar18 = (uint)uVar3;
            if ((int)(short)uVar3 < (int)uVar9) {
              uVar18 = uVar9;
            }
            uVar3 = puVar13[lVar19];
            if ((short)puVar13[lVar19] <
                (short)puVar13[(((long)(int)uVar8 + 1 + uVar14) - lVar20) - uVar22]) {
              uVar3 = puVar13[(((long)(int)uVar8 + 1 + uVar14) - lVar20) - uVar22];
            }
            uVar2 = (uint)uVar3;
            if ((int)(short)uVar3 < (int)uVar16) {
              uVar2 = uVar16;
            }
            uVar9 = (uint)(short)uVar18;
            uVar16 = (uint)(short)uVar2;
            puVar13 = puVar13 + uVar1 * 4;
          } while ((int)uVar15 <= iVar7);
        }
        if ((int)uVar15 < (int)uVar6) {
          puVar13 = puVar25 + lVar20 + (int)uVar15;
          do {
            uVar3 = *puVar13;
            uVar15 = uVar15 + uVar1;
            puVar13 = puVar13 + (long)(int)uVar8 + 1;
            uVar18 = (uint)uVar3;
            if ((int)(short)uVar3 <= (int)uVar9) {
              uVar18 = uVar9;
            }
            uVar9 = (uint)(short)uVar18;
          } while ((int)uVar15 < (int)uVar6);
        }
        puVar21 = puVar21 + 1;
        if ((int)uVar16 <= (int)uVar9) {
          uVar16 = uVar9;
        }
        puVar24[lVar20] = (short)uVar16;
        lVar20 = lVar20 + 1;
        uVar14 = uVar14 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_002ffea4:
      iVar23 = iVar23 + 1;
      puVar24 = (undefined2 *)((long)puVar24 + lVar27);
      puVar25 = (undefined2 *)((long)puVar25 + lVar28);
    } while (iVar23 != iVar26);
  }
  return;
}


==================================================================

### FUNC 00300110 (796 bytes) name=FUN_00300110

/* WARNING: Type propagation algorithm not settling */

void FUN_00300110(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  float *pfVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  ulong uVar18;
  uint uVar19;
  float *pfVar20;
  ulong uVar21;
  int iVar22;
  undefined4 *puVar23;
  undefined4 *puVar24;
  long lVar25;
  long lVar26;
  float fVar27;
  undefined8 uVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar11 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar11 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar5 < 1) {
    return;
  }
  uVar6 = uVar1 * 2;
  uVar21 = (ulong)uVar6;
  puVar24 = *(undefined4 **)(param_1 + 4);
  puVar23 = *(undefined4 **)(param_2 + 0x10);
  lVar26 = **(long **)(param_1 + 0x12);
  iVar9 = uVar8 + uVar1 * -4;
  lVar25 = **(long **)(param_2 + 0x48);
  iVar22 = 0;
  do {
    while (uVar8 != uVar1) {
      lVar17 = 0;
      pfVar20 = (float *)(puVar24 + uVar21);
      uVar18 = uVar21;
      do {
        fVar27 = (float)puVar24[lVar17];
        fVar29 = (float)puVar24[(long)(int)uVar11 + lVar17 + 1];
        uVar12 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pfVar14 = pfVar20;
          do {
            uVar12 = uVar12 + uVar1 * 4;
            fVar31 = *pfVar14;
            if (*pfVar14 <= fVar27) {
              fVar31 = fVar27;
            }
            fVar30 = pfVar14[(((long)(int)uVar11 + 1 + uVar18) - lVar17) - uVar21];
            if (pfVar14[(((long)(int)uVar11 + 1 + uVar18) - lVar17) - uVar21] <= fVar29) {
              fVar30 = fVar29;
            }
            fVar27 = pfVar14[uVar18 - lVar17];
            if (pfVar14[uVar18 - lVar17] <= fVar31) {
              fVar27 = fVar31;
            }
            pfVar10 = pfVar14 + (((uVar18 + uVar1 * 3) - lVar17) - uVar21);
            pfVar14 = pfVar14 + uVar1 * 4;
            fVar29 = *pfVar10;
            if (*pfVar10 <= fVar30) {
              fVar29 = fVar30;
            }
          } while ((int)uVar12 <= iVar9);
        }
        if ((int)uVar12 < (int)uVar8) {
          pfVar14 = (float *)(puVar24 + lVar17 + (int)uVar12);
          fVar31 = fVar27;
          do {
            fVar27 = *pfVar14;
            uVar12 = uVar12 + uVar1;
            pfVar14 = pfVar14 + (long)(int)uVar11 + 1;
            if (fVar27 <= fVar31) {
              fVar27 = fVar31;
            }
            fVar31 = fVar27;
          } while ((int)uVar12 < (int)uVar8);
        }
        if (fVar29 <= fVar27) {
          fVar29 = fVar27;
        }
        puVar23[lVar17] = fVar29;
        lVar17 = lVar17 + 1;
        pfVar20 = pfVar20 + 1;
        uVar18 = uVar18 + 1;
      } while ((int)lVar17 < (int)uVar1);
joined_r0x003003e4:
      puVar23 = (undefined4 *)((long)puVar23 + lVar25);
      puVar24 = (undefined4 *)((long)puVar24 + lVar26);
      iVar22 = iVar22 + 1;
      if (iVar22 == iVar5) {
        return;
      }
    }
    uVar12 = uVar8;
    if ((int)uVar8 < 1) {
      uVar12 = 1;
    }
    if ((puVar23 + 4 <= puVar24 || puVar24 + 4 <= puVar23) && (0xb < uVar12)) {
      uVar3 = -((uint)((ulong)puVar24 >> 2) & 3) & 3;
      if (uVar12 < uVar3) {
        uVar3 = uVar12;
      }
      if ((uVar3 == 0) || (*puVar23 = *puVar24, uVar3 == 1)) {
        uVar18 = (ulong)uVar3;
      }
      else {
        puVar23[1] = puVar24[1];
        if (uVar3 == 3) {
          uVar18 = 3;
          puVar23[2] = puVar24[2];
        }
        else {
          uVar18 = 2;
        }
      }
      iVar4 = uVar8 - 1;
      if ((int)uVar8 < 1) {
        iVar4 = 0;
      }
      uVar2 = ((uVar12 - uVar3) - 4 >> 2) + 1;
      iVar7 = uVar2 * 4;
      if (2 < iVar4 - uVar3) {
        uVar19 = 0;
        puVar15 = (undefined8 *)(puVar24 + uVar3);
        puVar16 = (undefined8 *)(puVar23 + uVar3);
        do {
          uVar28 = *puVar15;
          uVar19 = uVar19 + 1;
          puVar16[1] = puVar15[1];
          *puVar16 = uVar28;
          puVar15 = puVar15 + 2;
          puVar16 = puVar16 + 2;
        } while (uVar19 < uVar2);
        uVar18 = (ulong)(uint)((int)uVar18 + iVar7);
        if (iVar7 == uVar12 - uVar3) goto joined_r0x003003e4;
      }
      uVar13 = -(uVar18 >> 0x1f) & 0xfffffffc00000000 | uVar18 << 2;
      *(undefined4 *)((long)puVar23 + uVar13) = *(undefined4 *)((long)puVar24 + uVar13);
      if (((int)uVar18 + 1 < (int)uVar8) &&
         (*(undefined4 *)((long)puVar23 + uVar13 + 4) = *(undefined4 *)((long)puVar24 + uVar13 + 4),
         (int)uVar18 + 2 < (int)uVar8)) {
        *(undefined4 *)((long)puVar23 + uVar13 + 8) = *(undefined4 *)((long)puVar24 + uVar13 + 8);
      }
      goto joined_r0x003003e4;
    }
    lVar17 = 0;
    do {
      puVar23[lVar17] = puVar24[lVar17];
      lVar17 = lVar17 + 1;
    } while ((int)lVar17 < (int)uVar8);
    iVar22 = iVar22 + 1;
    puVar23 = (undefined4 *)((long)puVar23 + lVar25);
    puVar24 = (undefined4 *)((long)puVar24 + lVar26);
    if (iVar22 == iVar5) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 0030042c (696 bytes) name=FUN_0030042c

/* WARNING: Type propagation algorithm not settling */

void FUN_0030042c(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  double *pdVar14;
  undefined8 *puVar15;
  uint uVar16;
  ulong uVar17;
  long lVar18;
  double *pdVar19;
  ulong uVar20;
  int iVar21;
  undefined8 *puVar22;
  undefined8 *puVar23;
  long lVar24;
  long lVar25;
  double dVar26;
  undefined8 uVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar11 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar11 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar5 < 1) {
    return;
  }
  uVar6 = uVar1 * 2;
  uVar20 = (ulong)uVar6;
  puVar23 = *(undefined8 **)(param_1 + 4);
  puVar22 = *(undefined8 **)(param_2 + 0x10);
  lVar25 = **(long **)(param_1 + 0x12);
  iVar9 = uVar8 + uVar1 * -4;
  lVar24 = **(long **)(param_2 + 0x48);
  iVar21 = 0;
  do {
    while (uVar8 != uVar1) {
      lVar18 = 0;
      pdVar19 = (double *)(puVar23 + uVar20);
      uVar17 = uVar20;
      do {
        dVar26 = (double)puVar23[lVar18];
        dVar28 = (double)puVar23[(long)(int)uVar11 + lVar18 + 1];
        uVar12 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pdVar14 = pdVar19;
          do {
            uVar12 = uVar12 + uVar1 * 4;
            dVar30 = *pdVar14;
            if (*pdVar14 <= dVar26) {
              dVar30 = dVar26;
            }
            dVar29 = pdVar14[(((long)(int)uVar11 + 1 + uVar17) - lVar18) - uVar20];
            if (pdVar14[(((long)(int)uVar11 + 1 + uVar17) - lVar18) - uVar20] <= dVar28) {
              dVar29 = dVar28;
            }
            dVar26 = pdVar14[uVar17 - lVar18];
            if (pdVar14[uVar17 - lVar18] <= dVar30) {
              dVar26 = dVar30;
            }
            pdVar10 = pdVar14 + (((uVar17 + uVar1 * 3) - lVar18) - uVar20);
            pdVar14 = pdVar14 + uVar1 * 4;
            dVar28 = *pdVar10;
            if (*pdVar10 <= dVar29) {
              dVar28 = dVar29;
            }
          } while ((int)uVar12 <= iVar9);
        }
        if ((int)uVar12 < (int)uVar8) {
          pdVar14 = (double *)(puVar23 + lVar18 + (int)uVar12);
          do {
            dVar30 = *pdVar14;
            uVar12 = uVar12 + uVar1;
            pdVar14 = pdVar14 + (long)(int)uVar11 + 1;
            if (dVar30 <= dVar26) {
              dVar30 = dVar26;
            }
            dVar26 = dVar30;
          } while ((int)uVar12 < (int)uVar8);
        }
        if (dVar28 <= dVar26) {
          dVar28 = dVar26;
        }
        puVar22[lVar18] = dVar28;
        lVar18 = lVar18 + 1;
        pdVar19 = pdVar19 + 1;
        uVar17 = uVar17 + 1;
      } while ((int)lVar18 < (int)uVar1);
joined_r0x003006a4:
      puVar22 = (undefined8 *)((long)puVar22 + lVar24);
      puVar23 = (undefined8 *)((long)puVar23 + lVar25);
      iVar21 = iVar21 + 1;
      if (iVar21 == iVar5) {
        return;
      }
    }
    uVar12 = uVar8;
    if ((int)uVar8 < 1) {
      uVar12 = 1;
    }
    if ((puVar22 + 2 <= puVar23 || puVar23 + 2 <= puVar22) && (0xd < uVar12)) {
      uVar4 = (uint)((ulong)puVar23 >> 3) & 1;
      if (uVar12 < uVar4) {
        uVar4 = uVar12;
      }
      bVar3 = uVar4 != 0;
      if (bVar3) {
        *puVar22 = *puVar23;
      }
      uVar17 = (ulong)bVar3;
      uVar16 = uVar8 - 1;
      if ((int)uVar8 < 1) {
        uVar16 = 0;
      }
      uVar2 = ((uVar12 - uVar4) - 2 >> 1) + 1;
      iVar7 = uVar2 * 2;
      if (uVar16 != uVar4) {
        uVar16 = 0;
        puVar13 = puVar23 + uVar4;
        puVar15 = puVar22 + uVar4;
        do {
          uVar27 = *puVar13;
          uVar16 = uVar16 + 1;
          puVar15[1] = puVar13[1];
          *puVar15 = uVar27;
          puVar13 = puVar13 + 2;
          puVar15 = puVar15 + 2;
        } while (uVar16 < uVar2);
        uVar17 = (ulong)((uint)bVar3 + iVar7);
        if (iVar7 == uVar12 - uVar4) goto joined_r0x003006a4;
      }
      uVar17 = -(uVar17 >> 0x1f) & 0xfffffff800000000 | uVar17 << 3;
      *(undefined8 *)((long)puVar22 + uVar17) = *(undefined8 *)((long)puVar23 + uVar17);
      goto joined_r0x003006a4;
    }
    lVar18 = 0;
    do {
      puVar22[lVar18] = puVar23[lVar18];
      lVar18 = lVar18 + 1;
    } while ((int)lVar18 < (int)uVar8);
    iVar21 = iVar21 + 1;
    puVar22 = (undefined8 *)((long)puVar22 + lVar24);
    puVar23 = (undefined8 *)((long)puVar23 + lVar25);
    if (iVar21 == iVar5) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 003006e4 (1216 bytes) name=FUN_003006e4

void FUN_003006e4(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  ulong uVar3;
  ulong uVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  byte bVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  byte bVar13;
  long lVar14;
  undefined8 *puVar15;
  uint uVar16;
  long lVar17;
  undefined8 *puVar18;
  uint uVar19;
  byte *pbVar20;
  uint uVar21;
  long lVar22;
  byte bVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  ulong uVar27;
  long lVar28;
  undefined8 uVar29;
  
  uVar1 = (*param_1 >> 3 & 0x1ff) + 1;
  iVar7 = **(int **)(param_1 + 0x10);
  uVar11 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar7) {
    uVar9 = uVar1 * 2;
    uVar27 = (ulong)uVar9;
    iVar12 = uVar11 + uVar1 * -4;
    lVar28 = 0;
    lVar25 = (long)(int)uVar1;
    do {
      while( true ) {
        lVar26 = 0;
        lVar22 = *(long *)(param_1 + 4);
        lVar24 = *(long *)(param_2 + 0x10);
        lVar14 = lVar28 * **(long **)(param_1 + 0x12);
        lVar17 = lVar28 * **(long **)(param_2 + 0x48);
        uVar3 = lVar22 + lVar14;
        uVar4 = lVar24 + lVar17;
        if (uVar11 == uVar1) break;
        do {
          bVar13 = *(byte *)(uVar3 + lVar26);
          bVar23 = *(byte *)(uVar3 + lVar25 + lVar26);
          uVar16 = uVar9;
          if ((int)uVar9 <= iVar12) {
            pbVar20 = (byte *)(uVar3 + lVar26 + (ulong)uVar9 * 2);
            do {
              uVar16 = uVar16 + uVar1 * 4;
              bVar8 = pbVar20[-uVar27];
              if (*pbVar20 < pbVar20[-uVar27]) {
                bVar8 = *pbVar20;
              }
              if (bVar13 < bVar8) {
                bVar8 = bVar13;
              }
              bVar13 = bVar8;
              bVar8 = pbVar20[uVar1 * 3 - uVar27];
              if (pbVar20[lVar25 - uVar27] < pbVar20[uVar1 * 3 - uVar27]) {
                bVar8 = pbVar20[lVar25 - uVar27];
              }
              if (bVar23 < bVar8) {
                bVar8 = bVar23;
              }
              bVar23 = bVar8;
              pbVar20 = pbVar20 + uVar1 * 4;
            } while ((int)uVar16 <= iVar12);
          }
          if ((int)uVar16 < (int)uVar11) {
            pbVar20 = (byte *)(uVar3 + lVar26 + (int)uVar16);
            do {
              bVar8 = *pbVar20;
              uVar16 = uVar16 + uVar1;
              pbVar20 = pbVar20 + lVar25;
              if (bVar13 <= bVar8) {
                bVar8 = bVar13;
              }
              bVar13 = bVar8;
            } while ((int)uVar16 < (int)uVar11);
          }
          if (bVar13 <= bVar23) {
            bVar23 = bVar13;
          }
          *(byte *)(uVar4 + lVar26) = bVar23;
          lVar26 = lVar26 + 1;
        } while ((int)lVar26 < (int)uVar1);
joined_r0x00300b8c:
        iVar6 = (int)lVar28;
        lVar28 = lVar28 + 1;
        if (iVar7 <= iVar6 + 1) {
          return;
        }
      }
      uVar16 = uVar11;
      if ((int)uVar11 < 1) {
        uVar16 = 1;
      }
      if ((uVar3 < (ulong)(lVar24 + lVar17 + 0x10) && uVar4 < (ulong)(lVar22 + lVar14 + 0x10)) ||
         (uVar16 < 0x16)) {
        lVar26 = 0;
        do {
          *(undefined1 *)(uVar4 + lVar26) = *(undefined1 *)(uVar3 + lVar26);
          lVar26 = lVar26 + 1;
        } while ((int)lVar26 < (int)uVar11);
        goto joined_r0x00300b8c;
      }
      uVar21 = -(int)uVar3 & 0xf;
      uVar5 = uVar16;
      if (uVar21 < uVar16) {
        uVar5 = uVar21;
      }
      uVar21 = uVar5;
      if ((((uVar5 != 0) &&
           (*(undefined1 *)(lVar24 + lVar17) = *(undefined1 *)(lVar22 + lVar14), uVar5 != 1)) &&
          (*(undefined1 *)(uVar4 + 1) = *(undefined1 *)(uVar3 + 1), uVar5 != 2)) &&
         (((*(undefined1 *)(uVar4 + 2) = *(undefined1 *)(uVar3 + 2), uVar5 != 3 &&
           (*(undefined1 *)(uVar4 + 3) = *(undefined1 *)(uVar3 + 3), uVar5 != 4)) &&
          (*(undefined1 *)(uVar4 + 4) = *(undefined1 *)(uVar3 + 4), uVar5 != 5)))) {
        *(undefined1 *)(uVar4 + 5) = *(undefined1 *)(uVar3 + 5);
        if (uVar5 == 6) {
          uVar21 = 6;
        }
        else {
          *(undefined1 *)(uVar4 + 6) = *(undefined1 *)(uVar3 + 6);
          if (((uVar5 != 7) && (*(undefined1 *)(uVar4 + 7) = *(undefined1 *)(uVar3 + 7), uVar5 != 8)
              ) && (((*(undefined1 *)(uVar4 + 8) = *(undefined1 *)(uVar3 + 8), uVar5 != 9 &&
                     (((*(undefined1 *)(uVar4 + 9) = *(undefined1 *)(uVar3 + 9), uVar5 != 10 &&
                       (*(undefined1 *)(uVar4 + 10) = *(undefined1 *)(uVar3 + 10), uVar5 != 0xb)) &&
                      (*(undefined1 *)(uVar4 + 0xb) = *(undefined1 *)(uVar3 + 0xb), uVar5 != 0xc))))
                    && (*(undefined1 *)(uVar4 + 0xc) = *(undefined1 *)(uVar3 + 0xc), uVar5 != 0xd)))
             ) {
            *(undefined1 *)(uVar4 + 0xd) = *(undefined1 *)(uVar3 + 0xd);
            if (uVar5 == 0xf) {
              *(undefined1 *)(uVar4 + 0xe) = *(undefined1 *)(uVar3 + 0xe);
            }
            else {
              uVar21 = 0xe;
            }
          }
        }
      }
      iVar6 = uVar11 - 1;
      if ((int)uVar11 < 1) {
        iVar6 = 0;
      }
      uVar2 = ((uVar16 - uVar5) - 0x10 >> 4) + 1;
      iVar10 = uVar2 * 0x10;
      if (0xe < iVar6 - uVar5) {
        uVar19 = 0;
        puVar15 = (undefined8 *)(lVar22 + (ulong)uVar5 + lVar14);
        puVar18 = (undefined8 *)(lVar24 + (ulong)uVar5 + lVar17);
        do {
          uVar29 = *puVar15;
          uVar19 = uVar19 + 1;
          puVar18[1] = puVar15[1];
          *puVar18 = uVar29;
          puVar15 = puVar15 + 2;
          puVar18 = puVar18 + 2;
        } while (uVar19 < uVar2);
        uVar21 = uVar21 + iVar10;
        if (iVar10 == uVar16 - uVar5) goto joined_r0x00300b8c;
      }
      iVar6 = uVar21 + 1;
      *(undefined1 *)(uVar4 + (long)(int)uVar21) = *(undefined1 *)(uVar3 + (long)(int)uVar21);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 2;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 3;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 4;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 5;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 6;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 7;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 8;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 9;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 10;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 0xb;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 0xc;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      iVar6 = uVar21 + 0xd;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
      if ((int)uVar11 <= iVar6) goto joined_r0x00300b8c;
      iVar10 = uVar21 + 0xe;
      *(undefined1 *)(uVar4 + (long)iVar6) = *(undefined1 *)(uVar3 + (long)iVar6);
      if ((int)uVar11 <= iVar10) goto joined_r0x00300b8c;
      lVar28 = lVar28 + 1;
      *(undefined1 *)(uVar4 + (long)iVar10) = *(undefined1 *)(uVar3 + (long)iVar10);
    } while ((int)lVar28 < iVar7);
  }
  return;
}


==================================================================

### FUNC 00300ba4 (1000 bytes) name=FUN_00300ba4

void FUN_00300ba4(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  ushort uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  ushort uVar10;
  undefined8 *puVar11;
  ulong uVar12;
  uint uVar13;
  int iVar14;
  ulong uVar15;
  ushort *puVar16;
  undefined8 *puVar17;
  ushort uVar18;
  uint uVar19;
  long lVar20;
  ushort *puVar21;
  ulong uVar22;
  int iVar23;
  undefined2 *puVar24;
  undefined2 *puVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  undefined8 uVar29;
  
  iVar26 = **(int **)(param_1 + 0x10);
  uVar9 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar9 + 1;
  uVar7 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar26) {
    uVar5 = uVar1 * 2;
    uVar22 = (ulong)uVar5;
    puVar25 = *(undefined2 **)(param_1 + 4);
    puVar24 = *(undefined2 **)(param_2 + 0x10);
    lVar28 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar8 = uVar7 + uVar1 * -4;
    iVar23 = 0;
    do {
      while (uVar7 == uVar1) {
        uVar13 = uVar7;
        if ((int)uVar7 < 1) {
          uVar13 = 1;
        }
        if ((puVar25 < puVar24 + 8 && puVar24 < puVar25 + 8) || (uVar13 < 0xf)) {
          lVar20 = 0;
          do {
            puVar24[lVar20] = puVar25[lVar20];
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar7);
        }
        else {
          uVar3 = -((uint)((ulong)puVar25 >> 1) & 7) & 7;
          if (uVar13 < uVar3) {
            uVar3 = uVar13;
          }
          if ((((uVar3 == 0) || (*puVar24 = *puVar25, uVar3 == 1)) ||
              (puVar24[1] = puVar25[1], uVar3 == 2)) ||
             (((puVar24[2] = puVar25[2], uVar3 == 3 || (puVar24[3] = puVar25[3], uVar3 == 4)) ||
              (puVar24[4] = puVar25[4], uVar3 == 5)))) {
            uVar15 = (ulong)uVar3;
          }
          else {
            puVar24[5] = puVar25[5];
            if (uVar3 == 7) {
              uVar15 = 7;
              puVar24[6] = puVar25[6];
            }
            else {
              uVar15 = 6;
            }
          }
          iVar14 = uVar7 - 1;
          if ((int)uVar7 < 1) {
            iVar14 = 0;
          }
          uVar2 = ((uVar13 - uVar3) - 8 >> 3) + 1;
          iVar6 = uVar2 * 8;
          if (6 < iVar14 - uVar3) {
            uVar19 = 0;
            puVar11 = (undefined8 *)(puVar25 + uVar3);
            puVar17 = (undefined8 *)(puVar24 + uVar3);
            do {
              uVar29 = *puVar11;
              uVar19 = uVar19 + 1;
              puVar17[1] = puVar11[1];
              *puVar17 = uVar29;
              puVar11 = puVar11 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar19 < uVar2);
            uVar15 = (ulong)(uint)((int)uVar15 + iVar6);
            if (iVar6 == uVar13 - uVar3) goto LAB_00300d20;
          }
          uVar12 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
          iVar14 = (int)uVar15;
          *(undefined2 *)((long)puVar24 + uVar12) = *(undefined2 *)((long)puVar25 + uVar12);
          if ((((int)uVar7 <= iVar14 + 1) ||
              (*(undefined2 *)((long)puVar24 + uVar12 + 2) =
                    *(undefined2 *)((long)puVar25 + uVar12 + 2), (int)uVar7 <= iVar14 + 2)) ||
             ((*(undefined2 *)((long)puVar24 + uVar12 + 4) =
                    *(undefined2 *)((long)puVar25 + uVar12 + 4), (int)uVar7 <= iVar14 + 3 ||
              (((*(undefined2 *)((long)puVar24 + uVar12 + 6) =
                      *(undefined2 *)((long)puVar25 + uVar12 + 6), (int)uVar7 <= iVar14 + 4 ||
                (*(undefined2 *)((long)puVar24 + uVar12 + 8) =
                      *(undefined2 *)((long)puVar25 + uVar12 + 8), (int)uVar7 <= iVar14 + 5)) ||
               (*(undefined2 *)((long)puVar24 + uVar12 + 10) =
                     *(undefined2 *)((long)puVar25 + uVar12 + 10), (int)uVar7 <= iVar14 + 6))))))
          goto LAB_00300d20;
          *(undefined2 *)((long)puVar24 + uVar12 + 0xc) =
               *(undefined2 *)((long)puVar25 + uVar12 + 0xc);
        }
        puVar25 = (undefined2 *)((long)puVar25 + lVar28);
        puVar24 = (undefined2 *)((long)puVar24 + lVar27);
        iVar23 = iVar23 + 1;
        if (iVar23 == iVar26) {
          return;
        }
      }
      lVar20 = 0;
      puVar21 = puVar25 + uVar22;
      uVar15 = uVar22;
      do {
        uVar10 = puVar25[lVar20];
        uVar18 = puVar25[(long)(int)uVar9 + lVar20 + 1];
        uVar13 = uVar5;
        if ((int)uVar5 <= iVar8) {
          puVar16 = puVar21;
          do {
            uVar13 = uVar13 + uVar1 * 4;
            uVar4 = puVar16[uVar15 - lVar20];
            if (*puVar16 < puVar16[uVar15 - lVar20]) {
              uVar4 = *puVar16;
            }
            if (uVar10 < uVar4) {
              uVar4 = uVar10;
            }
            uVar10 = uVar4;
            uVar4 = puVar16[((uVar15 + uVar1 * 3) - lVar20) - uVar22];
            if (puVar16[(((long)(int)uVar9 + 1 + uVar15) - lVar20) - uVar22] <
                puVar16[((uVar15 + uVar1 * 3) - lVar20) - uVar22]) {
              uVar4 = puVar16[(((long)(int)uVar9 + 1 + uVar15) - lVar20) - uVar22];
            }
            if (uVar18 < uVar4) {
              uVar4 = uVar18;
            }
            uVar18 = uVar4;
            puVar16 = puVar16 + uVar1 * 4;
          } while ((int)uVar13 <= iVar8);
        }
        if ((int)uVar13 < (int)uVar7) {
          puVar16 = puVar25 + lVar20 + (int)uVar13;
          do {
            uVar4 = *puVar16;
            uVar13 = uVar13 + uVar1;
            puVar16 = puVar16 + (long)(int)uVar9 + 1;
            if (uVar10 <= uVar4) {
              uVar4 = uVar10;
            }
            uVar10 = uVar4;
          } while ((int)uVar13 < (int)uVar7);
        }
        puVar21 = puVar21 + 1;
        if (uVar10 <= uVar18) {
          uVar18 = uVar10;
        }
        puVar24[lVar20] = uVar18;
        lVar20 = lVar20 + 1;
        uVar15 = uVar15 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_00300d20:
      iVar23 = iVar23 + 1;
      puVar24 = (undefined2 *)((long)puVar24 + lVar27);
      puVar25 = (undefined2 *)((long)puVar25 + lVar28);
    } while (iVar23 != iVar26);
  }
  return;
}


==================================================================

### FUNC 00300f8c (1008 bytes) name=FUN_00300f8c

void FUN_00300f8c(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  ushort uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  undefined8 *puVar10;
  ulong uVar11;
  int iVar12;
  ushort *puVar13;
  ulong uVar14;
  uint uVar15;
  uint uVar16;
  undefined8 *puVar17;
  uint uVar18;
  long lVar19;
  long lVar20;
  ushort *puVar21;
  ulong uVar22;
  int iVar23;
  undefined2 *puVar24;
  undefined2 *puVar25;
  int iVar26;
  long lVar27;
  long lVar28;
  undefined8 uVar29;
  
  iVar26 = **(int **)(param_1 + 0x10);
  uVar8 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar8 + 1;
  uVar6 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (0 < iVar26) {
    uVar4 = uVar1 * 2;
    uVar22 = (ulong)uVar4;
    puVar25 = *(undefined2 **)(param_1 + 4);
    puVar24 = *(undefined2 **)(param_2 + 0x10);
    lVar28 = **(long **)(param_1 + 0x12);
    lVar27 = **(long **)(param_2 + 0x48);
    iVar7 = uVar6 + uVar1 * -4;
    iVar23 = 0;
    do {
      while (uVar6 == uVar1) {
        uVar15 = uVar6;
        if ((int)uVar6 < 1) {
          uVar15 = 1;
        }
        if ((puVar25 < puVar24 + 8 && puVar24 < puVar25 + 8) || (uVar15 < 0xf)) {
          lVar20 = 0;
          do {
            puVar24[lVar20] = puVar25[lVar20];
            lVar20 = lVar20 + 1;
          } while ((int)lVar20 < (int)uVar6);
        }
        else {
          uVar16 = -((uint)((ulong)puVar25 >> 1) & 7) & 7;
          if (uVar15 < uVar16) {
            uVar16 = uVar15;
          }
          if ((((uVar16 == 0) || (*puVar24 = *puVar25, uVar16 == 1)) ||
              (puVar24[1] = puVar25[1], uVar16 == 2)) ||
             (((puVar24[2] = puVar25[2], uVar16 == 3 || (puVar24[3] = puVar25[3], uVar16 == 4)) ||
              (puVar24[4] = puVar25[4], uVar16 == 5)))) {
            uVar14 = (ulong)uVar16;
          }
          else {
            puVar24[5] = puVar25[5];
            if (uVar16 == 7) {
              uVar14 = 7;
              puVar24[6] = puVar25[6];
            }
            else {
              uVar14 = 6;
            }
          }
          iVar12 = uVar6 - 1;
          if ((int)uVar6 < 1) {
            iVar12 = 0;
          }
          uVar9 = ((uVar15 - uVar16) - 8 >> 3) + 1;
          iVar5 = uVar9 * 8;
          if (6 < iVar12 - uVar16) {
            uVar18 = 0;
            puVar10 = (undefined8 *)(puVar25 + uVar16);
            puVar17 = (undefined8 *)(puVar24 + uVar16);
            do {
              uVar29 = *puVar10;
              uVar18 = uVar18 + 1;
              puVar17[1] = puVar10[1];
              *puVar17 = uVar29;
              puVar10 = puVar10 + 2;
              puVar17 = puVar17 + 2;
            } while (uVar18 < uVar9);
            uVar14 = (ulong)(uint)((int)uVar14 + iVar5);
            if (iVar5 == uVar15 - uVar16) goto LAB_00301110;
          }
          uVar11 = -(uVar14 >> 0x1f) & 0xfffffffe00000000 | uVar14 << 1;
          iVar12 = (int)uVar14;
          *(undefined2 *)((long)puVar24 + uVar11) = *(undefined2 *)((long)puVar25 + uVar11);
          if ((((int)uVar6 <= iVar12 + 1) ||
              (*(undefined2 *)((long)puVar24 + uVar11 + 2) =
                    *(undefined2 *)((long)puVar25 + uVar11 + 2), (int)uVar6 <= iVar12 + 2)) ||
             ((*(undefined2 *)((long)puVar24 + uVar11 + 4) =
                    *(undefined2 *)((long)puVar25 + uVar11 + 4), (int)uVar6 <= iVar12 + 3 ||
              (((*(undefined2 *)((long)puVar24 + uVar11 + 6) =
                      *(undefined2 *)((long)puVar25 + uVar11 + 6), (int)uVar6 <= iVar12 + 4 ||
                (*(undefined2 *)((long)puVar24 + uVar11 + 8) =
                      *(undefined2 *)((long)puVar25 + uVar11 + 8), (int)uVar6 <= iVar12 + 5)) ||
               (*(undefined2 *)((long)puVar24 + uVar11 + 10) =
                     *(undefined2 *)((long)puVar25 + uVar11 + 10), (int)uVar6 <= iVar12 + 6))))))
          goto LAB_00301110;
          *(undefined2 *)((long)puVar24 + uVar11 + 0xc) =
               *(undefined2 *)((long)puVar25 + uVar11 + 0xc);
        }
        puVar25 = (undefined2 *)((long)puVar25 + lVar28);
        puVar24 = (undefined2 *)((long)puVar24 + lVar27);
        iVar23 = iVar23 + 1;
        if (iVar23 == iVar26) {
          return;
        }
      }
      lVar20 = 0;
      puVar21 = puVar25 + uVar22;
      uVar14 = uVar22;
      do {
        uVar9 = (uint)(short)puVar25[lVar20];
        uVar16 = (uint)(short)puVar25[(long)(int)uVar8 + lVar20 + 1];
        uVar15 = uVar4;
        if ((int)uVar4 <= iVar7) {
          lVar19 = ((uVar14 + uVar1 * 3) - lVar20) - uVar22;
          puVar13 = puVar21;
          do {
            uVar15 = uVar15 + uVar1 * 4;
            uVar3 = puVar13[uVar14 - lVar20];
            if ((short)*puVar13 < (short)puVar13[uVar14 - lVar20]) {
              uVar3 = *puVar13;
            }
            uVar18 = (uint)uVar3;
            if ((int)uVar9 < (int)(short)uVar3) {
              uVar18 = uVar9;
            }
            uVar3 = puVar13[lVar19];
            if ((short)puVar13[(((long)(int)uVar8 + 1 + uVar14) - lVar20) - uVar22] <
                (short)puVar13[lVar19]) {
              uVar3 = puVar13[(((long)(int)uVar8 + 1 + uVar14) - lVar20) - uVar22];
            }
            uVar2 = (uint)uVar3;
            if ((int)uVar16 < (int)(short)uVar3) {
              uVar2 = uVar16;
            }
            uVar9 = (uint)(short)uVar18;
            uVar16 = (uint)(short)uVar2;
            puVar13 = puVar13 + uVar1 * 4;
          } while ((int)uVar15 <= iVar7);
        }
        if ((int)uVar15 < (int)uVar6) {
          puVar13 = puVar25 + lVar20 + (int)uVar15;
          do {
            uVar3 = *puVar13;
            uVar15 = uVar15 + uVar1;
            puVar13 = puVar13 + (long)(int)uVar8 + 1;
            uVar18 = (uint)uVar3;
            if ((int)uVar9 <= (int)(short)uVar3) {
              uVar18 = uVar9;
            }
            uVar9 = (uint)(short)uVar18;
          } while ((int)uVar15 < (int)uVar6);
        }
        puVar21 = puVar21 + 1;
        if ((int)uVar9 <= (int)uVar16) {
          uVar16 = uVar9;
        }
        puVar24[lVar20] = (short)uVar16;
        lVar20 = lVar20 + 1;
        uVar14 = uVar14 + 1;
      } while ((int)lVar20 < (int)uVar1);
LAB_00301110:
      iVar23 = iVar23 + 1;
      puVar24 = (undefined2 *)((long)puVar24 + lVar27);
      puVar25 = (undefined2 *)((long)puVar25 + lVar28);
    } while (iVar23 != iVar26);
  }
  return;
}


==================================================================

### FUNC 0030137c (796 bytes) name=FUN_0030137c

/* WARNING: Type propagation algorithm not settling */

void FUN_0030137c(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  float *pfVar10;
  uint uVar11;
  uint uVar12;
  ulong uVar13;
  float *pfVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  ulong uVar18;
  uint uVar19;
  float *pfVar20;
  ulong uVar21;
  int iVar22;
  undefined4 *puVar23;
  undefined4 *puVar24;
  long lVar25;
  long lVar26;
  float fVar27;
  undefined8 uVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar11 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar11 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar5 < 1) {
    return;
  }
  uVar6 = uVar1 * 2;
  uVar21 = (ulong)uVar6;
  puVar24 = *(undefined4 **)(param_1 + 4);
  puVar23 = *(undefined4 **)(param_2 + 0x10);
  lVar26 = **(long **)(param_1 + 0x12);
  iVar9 = uVar8 + uVar1 * -4;
  lVar25 = **(long **)(param_2 + 0x48);
  iVar22 = 0;
  do {
    while (uVar8 != uVar1) {
      lVar17 = 0;
      pfVar20 = (float *)(puVar24 + uVar21);
      uVar18 = uVar21;
      do {
        fVar27 = (float)puVar24[lVar17];
        fVar29 = (float)puVar24[(long)(int)uVar11 + lVar17 + 1];
        uVar12 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pfVar14 = pfVar20;
          do {
            uVar12 = uVar12 + uVar1 * 4;
            fVar31 = *pfVar14;
            if (fVar27 <= *pfVar14) {
              fVar31 = fVar27;
            }
            fVar30 = pfVar14[(((long)(int)uVar11 + 1 + uVar18) - lVar17) - uVar21];
            if (fVar29 <= pfVar14[(((long)(int)uVar11 + 1 + uVar18) - lVar17) - uVar21]) {
              fVar30 = fVar29;
            }
            fVar27 = pfVar14[uVar18 - lVar17];
            if (fVar31 <= pfVar14[uVar18 - lVar17]) {
              fVar27 = fVar31;
            }
            pfVar10 = pfVar14 + (((uVar18 + uVar1 * 3) - lVar17) - uVar21);
            pfVar14 = pfVar14 + uVar1 * 4;
            fVar29 = *pfVar10;
            if (fVar30 <= *pfVar10) {
              fVar29 = fVar30;
            }
          } while ((int)uVar12 <= iVar9);
        }
        if ((int)uVar12 < (int)uVar8) {
          pfVar14 = (float *)(puVar24 + lVar17 + (int)uVar12);
          fVar31 = fVar27;
          do {
            fVar27 = *pfVar14;
            uVar12 = uVar12 + uVar1;
            pfVar14 = pfVar14 + (long)(int)uVar11 + 1;
            if (fVar31 <= fVar27) {
              fVar27 = fVar31;
            }
            fVar31 = fVar27;
          } while ((int)uVar12 < (int)uVar8);
        }
        if (fVar27 <= fVar29) {
          fVar29 = fVar27;
        }
        puVar23[lVar17] = fVar29;
        lVar17 = lVar17 + 1;
        pfVar20 = pfVar20 + 1;
        uVar18 = uVar18 + 1;
      } while ((int)lVar17 < (int)uVar1);
joined_r0x00301650:
      puVar23 = (undefined4 *)((long)puVar23 + lVar25);
      puVar24 = (undefined4 *)((long)puVar24 + lVar26);
      iVar22 = iVar22 + 1;
      if (iVar22 == iVar5) {
        return;
      }
    }
    uVar12 = uVar8;
    if ((int)uVar8 < 1) {
      uVar12 = 1;
    }
    if ((puVar23 + 4 <= puVar24 || puVar24 + 4 <= puVar23) && (0xb < uVar12)) {
      uVar3 = -((uint)((ulong)puVar24 >> 2) & 3) & 3;
      if (uVar12 < uVar3) {
        uVar3 = uVar12;
      }
      if ((uVar3 == 0) || (*puVar23 = *puVar24, uVar3 == 1)) {
        uVar18 = (ulong)uVar3;
      }
      else {
        puVar23[1] = puVar24[1];
        if (uVar3 == 3) {
          uVar18 = 3;
          puVar23[2] = puVar24[2];
        }
        else {
          uVar18 = 2;
        }
      }
      iVar4 = uVar8 - 1;
      if ((int)uVar8 < 1) {
        iVar4 = 0;
      }
      uVar2 = ((uVar12 - uVar3) - 4 >> 2) + 1;
      iVar7 = uVar2 * 4;
      if (2 < iVar4 - uVar3) {
        uVar19 = 0;
        puVar15 = (undefined8 *)(puVar24 + uVar3);
        puVar16 = (undefined8 *)(puVar23 + uVar3);
        do {
          uVar28 = *puVar15;
          uVar19 = uVar19 + 1;
          puVar16[1] = puVar15[1];
          *puVar16 = uVar28;
          puVar15 = puVar15 + 2;
          puVar16 = puVar16 + 2;
        } while (uVar19 < uVar2);
        uVar18 = (ulong)(uint)((int)uVar18 + iVar7);
        if (iVar7 == uVar12 - uVar3) goto joined_r0x00301650;
      }
      uVar13 = -(uVar18 >> 0x1f) & 0xfffffffc00000000 | uVar18 << 2;
      *(undefined4 *)((long)puVar23 + uVar13) = *(undefined4 *)((long)puVar24 + uVar13);
      if (((int)uVar18 + 1 < (int)uVar8) &&
         (*(undefined4 *)((long)puVar23 + uVar13 + 4) = *(undefined4 *)((long)puVar24 + uVar13 + 4),
         (int)uVar18 + 2 < (int)uVar8)) {
        *(undefined4 *)((long)puVar23 + uVar13 + 8) = *(undefined4 *)((long)puVar24 + uVar13 + 8);
      }
      goto joined_r0x00301650;
    }
    lVar17 = 0;
    do {
      puVar23[lVar17] = puVar24[lVar17];
      lVar17 = lVar17 + 1;
    } while ((int)lVar17 < (int)uVar8);
    iVar22 = iVar22 + 1;
    puVar23 = (undefined4 *)((long)puVar23 + lVar25);
    puVar24 = (undefined4 *)((long)puVar24 + lVar26);
    if (iVar22 == iVar5) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00301698 (696 bytes) name=FUN_00301698

/* WARNING: Type propagation algorithm not settling */

void FUN_00301698(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  double *pdVar14;
  undefined8 *puVar15;
  uint uVar16;
  ulong uVar17;
  long lVar18;
  double *pdVar19;
  ulong uVar20;
  int iVar21;
  undefined8 *puVar22;
  undefined8 *puVar23;
  long lVar24;
  long lVar25;
  double dVar26;
  undefined8 uVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  iVar5 = **(int **)(param_1 + 0x10);
  uVar11 = *param_1 >> 3 & 0x1ff;
  uVar1 = uVar11 + 1;
  uVar8 = uVar1 * (*(int **)(param_1 + 0x10))[1];
  if (iVar5 < 1) {
    return;
  }
  uVar6 = uVar1 * 2;
  uVar20 = (ulong)uVar6;
  puVar23 = *(undefined8 **)(param_1 + 4);
  puVar22 = *(undefined8 **)(param_2 + 0x10);
  lVar25 = **(long **)(param_1 + 0x12);
  iVar9 = uVar8 + uVar1 * -4;
  lVar24 = **(long **)(param_2 + 0x48);
  iVar21 = 0;
  do {
    while (uVar8 != uVar1) {
      lVar18 = 0;
      pdVar19 = (double *)(puVar23 + uVar20);
      uVar17 = uVar20;
      do {
        dVar26 = (double)puVar23[lVar18];
        dVar28 = (double)puVar23[(long)(int)uVar11 + lVar18 + 1];
        uVar12 = uVar6;
        if ((int)uVar6 <= iVar9) {
          pdVar14 = pdVar19;
          do {
            uVar12 = uVar12 + uVar1 * 4;
            dVar30 = *pdVar14;
            if (dVar26 <= *pdVar14) {
              dVar30 = dVar26;
            }
            dVar29 = pdVar14[(((long)(int)uVar11 + 1 + uVar17) - lVar18) - uVar20];
            if (dVar28 <= pdVar14[(((long)(int)uVar11 + 1 + uVar17) - lVar18) - uVar20]) {
              dVar29 = dVar28;
            }
            dVar26 = pdVar14[uVar17 - lVar18];
            if (dVar30 <= pdVar14[uVar17 - lVar18]) {
              dVar26 = dVar30;
            }
            pdVar10 = pdVar14 + (((uVar17 + uVar1 * 3) - lVar18) - uVar20);
            pdVar14 = pdVar14 + uVar1 * 4;
            dVar28 = *pdVar10;
            if (dVar29 <= *pdVar10) {
              dVar28 = dVar29;
            }
          } while ((int)uVar12 <= iVar9);
        }
        if ((int)uVar12 < (int)uVar8) {
          pdVar14 = (double *)(puVar23 + lVar18 + (int)uVar12);
          do {
            dVar30 = *pdVar14;
            uVar12 = uVar12 + uVar1;
            pdVar14 = pdVar14 + (long)(int)uVar11 + 1;
            if (dVar26 <= dVar30) {
              dVar30 = dVar26;
            }
            dVar26 = dVar30;
          } while ((int)uVar12 < (int)uVar8);
        }
        if (dVar26 <= dVar28) {
          dVar28 = dVar26;
        }
        puVar22[lVar18] = dVar28;
        lVar18 = lVar18 + 1;
        pdVar19 = pdVar19 + 1;
        uVar17 = uVar17 + 1;
      } while ((int)lVar18 < (int)uVar1);
joined_r0x00301910:
      puVar22 = (undefined8 *)((long)puVar22 + lVar24);
      puVar23 = (undefined8 *)((long)puVar23 + lVar25);
      iVar21 = iVar21 + 1;
      if (iVar21 == iVar5) {
        return;
      }
    }
    uVar12 = uVar8;
    if ((int)uVar8 < 1) {
      uVar12 = 1;
    }
    if ((puVar22 + 2 <= puVar23 || puVar23 + 2 <= puVar22) && (0xd < uVar12)) {
      uVar4 = (uint)((ulong)puVar23 >> 3) & 1;
      if (uVar12 < uVar4) {
        uVar4 = uVar12;
      }
      bVar3 = uVar4 != 0;
      if (bVar3) {
        *puVar22 = *puVar23;
      }
      uVar17 = (ulong)bVar3;
      uVar16 = uVar8 - 1;
      if ((int)uVar8 < 1) {
        uVar16 = 0;
      }
      uVar2 = ((uVar12 - uVar4) - 2 >> 1) + 1;
      iVar7 = uVar2 * 2;
      if (uVar16 != uVar4) {
        uVar16 = 0;
        puVar13 = puVar23 + uVar4;
        puVar15 = puVar22 + uVar4;
        do {
          uVar27 = *puVar13;
          uVar16 = uVar16 + 1;
          puVar15[1] = puVar13[1];
          *puVar15 = uVar27;
          puVar13 = puVar13 + 2;
          puVar15 = puVar15 + 2;
        } while (uVar16 < uVar2);
        uVar17 = (ulong)((uint)bVar3 + iVar7);
        if (iVar7 == uVar12 - uVar4) goto joined_r0x00301910;
      }
      uVar17 = -(uVar17 >> 0x1f) & 0xfffffff800000000 | uVar17 << 3;
      *(undefined8 *)((long)puVar22 + uVar17) = *(undefined8 *)((long)puVar23 + uVar17);
      goto joined_r0x00301910;
    }
    lVar18 = 0;
    do {
      puVar22[lVar18] = puVar23[lVar18];
      lVar18 = lVar18 + 1;
    } while ((int)lVar18 < (int)uVar8);
    iVar21 = iVar21 + 1;
    puVar22 = (undefined8 *)((long)puVar22 + lVar24);
    puVar23 = (undefined8 *)((long)puVar23 + lVar25);
    if (iVar21 == iVar5) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00301950 (812 bytes) name=FUN_00301950

void FUN_00301950(undefined1 *param_1,undefined1 *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  undefined8 *puVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  undefined8 *puVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) || (param_3 < 0x16)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = param_1[lVar6];
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar7 = -(int)param_1 & 0xf;
    uVar3 = param_3;
    if (uVar7 < param_3) {
      uVar3 = uVar7;
    }
    uVar7 = uVar3;
    if ((((uVar3 != 0) && (*param_2 = *param_1, uVar3 != 1)) &&
        (param_2[1] = param_1[1], uVar3 != 2)) &&
       ((param_2[2] = param_1[2], uVar3 != 3 && (param_2[3] = param_1[3], uVar3 != 4)))) {
      param_2[4] = param_1[4];
      if (uVar3 == 5) {
        uVar7 = 5;
      }
      else {
        param_2[5] = param_1[5];
        if (((uVar3 != 6) && (param_2[6] = param_1[6], uVar3 != 7)) &&
           ((param_2[7] = param_1[7], uVar3 != 8 &&
            ((((param_2[8] = param_1[8], uVar3 != 9 && (param_2[9] = param_1[9], uVar3 != 10)) &&
              (param_2[10] = param_1[10], uVar3 != 0xb)) &&
             ((param_2[0xb] = param_1[0xb], uVar3 != 0xc &&
              (param_2[0xc] = param_1[0xc], uVar3 != 0xd)))))))) {
          param_2[0xd] = param_1[0xd];
          if (uVar3 == 0xf) {
            param_2[0xe] = param_1[0xe];
          }
          else {
            uVar7 = 0xe;
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar8 = 0;
      puVar5 = (undefined8 *)(param_2 + uVar3);
      puVar9 = (undefined8 *)(param_1 + uVar3);
      do {
        uVar10 = *puVar9;
        uVar8 = uVar8 + 1;
        puVar5[1] = puVar9[1];
        *puVar5 = uVar10;
        puVar5 = puVar5 + 2;
        puVar9 = puVar9 + 2;
      } while (uVar8 < uVar1);
      uVar7 = uVar7 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar7 + 1;
    param_2[(int)uVar7] = param_1[(int)uVar7];
    if (iVar4 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar4] = param_1[iVar4];
      if (iVar2 < (int)param_3) {
        iVar4 = uVar7 + 3;
        param_2[iVar2] = param_1[iVar2];
        if (iVar4 < (int)param_3) {
          iVar2 = uVar7 + 4;
          param_2[iVar4] = param_1[iVar4];
          if (iVar2 < (int)param_3) {
            iVar4 = uVar7 + 5;
            param_2[iVar2] = param_1[iVar2];
            if (iVar4 < (int)param_3) {
              iVar2 = uVar7 + 6;
              param_2[iVar4] = param_1[iVar4];
              if (iVar2 < (int)param_3) {
                iVar4 = uVar7 + 7;
                param_2[iVar2] = param_1[iVar2];
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar7 + 8;
                  param_2[iVar4] = param_1[iVar4];
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar7 + 9;
                    param_2[iVar2] = param_1[iVar2];
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar7 + 10;
                      param_2[iVar4] = param_1[iVar4];
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar7 + 0xb;
                        param_2[iVar2] = param_1[iVar2];
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar7 + 0xc;
                          param_2[iVar4] = param_1[iVar4];
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar7 + 0xd;
                            param_2[iVar2] = param_1[iVar2];
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar7 + 0xe;
                              param_2[iVar4] = param_1[iVar4];
                              if (iVar2 < (int)param_3) {
                                param_2[iVar2] = param_1[iVar2];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00301c7c (712 bytes) name=FUN_00301c7c

void FUN_00301c7c(ushort *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  ulong *puVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  byte *pbVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  
  if (param_3 == 1) {
    *param_2 = (ushort)(byte)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 &&
         param_2 < (ushort *)((long)param_1 + (long)(int)param_3)) || (param_3 < 0x15)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = (ushort)*(byte *)((long)param_1 + lVar6);
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar7 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
    uVar3 = param_3;
    if (uVar7 < param_3) {
      uVar3 = uVar7;
    }
    uVar7 = uVar3;
    if ((((uVar3 != 0) && (*param_2 = (ushort)(byte)*param_1, uVar3 != 1)) &&
        (param_2[1] = (ushort)*(byte *)((long)param_1 + 1), uVar3 != 2)) &&
       ((param_2[2] = (ushort)(byte)param_1[1], uVar3 != 3 &&
        (param_2[3] = (ushort)*(byte *)((long)param_1 + 3), uVar3 != 4)))) {
      param_2[4] = (ushort)(byte)param_1[2];
      if (uVar3 == 5) {
        uVar7 = 5;
      }
      else {
        param_2[5] = (ushort)*(byte *)((long)param_1 + 5);
        if (uVar3 == 7) {
          param_2[6] = (ushort)(byte)param_1[3];
        }
        else {
          uVar7 = 6;
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar8 = 0;
      puVar5 = (ulong *)(param_2 + uVar3);
      pbVar9 = (byte *)((long)param_1 + (ulong)uVar3);
      do {
        uVar11 = *(undefined8 *)(pbVar9 + 8);
        uVar10 = *(undefined8 *)pbVar9;
        uVar8 = uVar8 + 1;
        puVar5[1] = (ulong)CONCAT16((char)((ulong)uVar10 >> 0x38),
                                    (uint6)CONCAT14((char)((ulong)uVar10 >> 0x30),
                                                    (uint)CONCAT12((char)((ulong)uVar10 >> 0x28),
                                                                   (ushort)(byte)((ulong)uVar10 >>
                                                                                 0x20))));
        *puVar5 = (ulong)CONCAT16((char)((ulong)uVar10 >> 0x18),
                                  (uint6)CONCAT14((char)((ulong)uVar10 >> 0x10),
                                                  (uint)CONCAT12((char)((ulong)uVar10 >> 8),
                                                                 (ushort)(byte)uVar10)));
        puVar5[3] = (ulong)CONCAT16((char)((ulong)uVar11 >> 0x38),
                                    (uint6)CONCAT14((char)((ulong)uVar11 >> 0x30),
                                                    (uint)CONCAT12((char)((ulong)uVar11 >> 0x28),
                                                                   (ushort)(byte)((ulong)uVar11 >>
                                                                                 0x20))));
        puVar5[2] = (ulong)CONCAT16((char)((ulong)uVar11 >> 0x18),
                                    (uint6)CONCAT14((char)((ulong)uVar11 >> 0x10),
                                                    (uint)(CONCAT12((char)((ulong)uVar11 >> 8),
                                                                    (short)uVar11) & 0xff00ff)));
        puVar5 = puVar5 + 4;
        pbVar9 = pbVar9 + 0x10;
      } while (uVar8 < uVar1);
      uVar7 = uVar7 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar7 + 1;
    param_2[(int)uVar7] = (ushort)*(byte *)((long)param_1 + (long)(int)uVar7);
    if (iVar4 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
      if (iVar2 < (int)param_3) {
        iVar4 = uVar7 + 3;
        param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
        if (iVar4 < (int)param_3) {
          iVar2 = uVar7 + 4;
          param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
          if (iVar2 < (int)param_3) {
            iVar4 = uVar7 + 5;
            param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
            if (iVar4 < (int)param_3) {
              iVar2 = uVar7 + 6;
              param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
              if (iVar2 < (int)param_3) {
                iVar4 = uVar7 + 7;
                param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar7 + 8;
                  param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar7 + 9;
                    param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar7 + 10;
                      param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar7 + 0xb;
                        param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar7 + 0xc;
                          param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar7 + 0xd;
                            param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar7 + 0xe;
                              param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                              if (iVar2 < (int)param_3) {
                                param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00301f44 (712 bytes) name=FUN_00301f44

void FUN_00301f44(ushort *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  ulong *puVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  byte *pbVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  
  if (param_3 == 1) {
    *param_2 = (ushort)(byte)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 &&
         param_2 < (ushort *)((long)param_1 + (long)(int)param_3)) || (param_3 < 0x15)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = (ushort)*(byte *)((long)param_1 + lVar6);
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar7 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
    uVar3 = param_3;
    if (uVar7 < param_3) {
      uVar3 = uVar7;
    }
    uVar7 = uVar3;
    if ((((uVar3 != 0) && (*param_2 = (ushort)(byte)*param_1, uVar3 != 1)) &&
        (param_2[1] = (ushort)*(byte *)((long)param_1 + 1), uVar3 != 2)) &&
       ((param_2[2] = (ushort)(byte)param_1[1], uVar3 != 3 &&
        (param_2[3] = (ushort)*(byte *)((long)param_1 + 3), uVar3 != 4)))) {
      param_2[4] = (ushort)(byte)param_1[2];
      if (uVar3 == 5) {
        uVar7 = 5;
      }
      else {
        param_2[5] = (ushort)*(byte *)((long)param_1 + 5);
        if (uVar3 == 7) {
          param_2[6] = (ushort)(byte)param_1[3];
        }
        else {
          uVar7 = 6;
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar8 = 0;
      puVar5 = (ulong *)(param_2 + uVar3);
      pbVar9 = (byte *)((long)param_1 + (ulong)uVar3);
      do {
        uVar11 = *(undefined8 *)(pbVar9 + 8);
        uVar10 = *(undefined8 *)pbVar9;
        uVar8 = uVar8 + 1;
        puVar5[1] = (ulong)CONCAT16((char)((ulong)uVar10 >> 0x38),
                                    (uint6)CONCAT14((char)((ulong)uVar10 >> 0x30),
                                                    (uint)CONCAT12((char)((ulong)uVar10 >> 0x28),
                                                                   (ushort)(byte)((ulong)uVar10 >>
                                                                                 0x20))));
        *puVar5 = (ulong)CONCAT16((char)((ulong)uVar10 >> 0x18),
                                  (uint6)CONCAT14((char)((ulong)uVar10 >> 0x10),
                                                  (uint)CONCAT12((char)((ulong)uVar10 >> 8),
                                                                 (ushort)(byte)uVar10)));
        puVar5[3] = (ulong)CONCAT16((char)((ulong)uVar11 >> 0x38),
                                    (uint6)CONCAT14((char)((ulong)uVar11 >> 0x30),
                                                    (uint)CONCAT12((char)((ulong)uVar11 >> 0x28),
                                                                   (ushort)(byte)((ulong)uVar11 >>
                                                                                 0x20))));
        puVar5[2] = (ulong)CONCAT16((char)((ulong)uVar11 >> 0x18),
                                    (uint6)CONCAT14((char)((ulong)uVar11 >> 0x10),
                                                    (uint)(CONCAT12((char)((ulong)uVar11 >> 8),
                                                                    (short)uVar11) & 0xff00ff)));
        puVar5 = puVar5 + 4;
        pbVar9 = pbVar9 + 0x10;
      } while (uVar8 < uVar1);
      uVar7 = uVar7 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar7 + 1;
    param_2[(int)uVar7] = (ushort)*(byte *)((long)param_1 + (long)(int)uVar7);
    if (iVar4 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
      if (iVar2 < (int)param_3) {
        iVar4 = uVar7 + 3;
        param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
        if (iVar4 < (int)param_3) {
          iVar2 = uVar7 + 4;
          param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
          if (iVar2 < (int)param_3) {
            iVar4 = uVar7 + 5;
            param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
            if (iVar4 < (int)param_3) {
              iVar2 = uVar7 + 6;
              param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
              if (iVar2 < (int)param_3) {
                iVar4 = uVar7 + 7;
                param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar7 + 8;
                  param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar7 + 9;
                    param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar7 + 10;
                      param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar7 + 0xb;
                        param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar7 + 0xc;
                          param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar7 + 0xd;
                            param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar7 + 0xe;
                              param_2[iVar4] = (ushort)*(byte *)((long)param_1 + (long)iVar4);
                              if (iVar2 < (int)param_3) {
                                param_2[iVar2] = (ushort)*(byte *)((long)param_1 + (long)iVar2);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030220c (656 bytes) name=FUN_0030220c

void FUN_0030220c(uint *param_1,uint *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint3 uVar6;
  ulong *puVar7;
  long lVar8;
  uint uVar9;
  uint uVar10;
  byte *pbVar11;
  undefined1 uVar12;
  undefined1 uVar13;
  undefined1 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  
  if (param_3 == 1) {
    *param_2 = (uint)(byte)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (uint *)((long)param_1 + (long)(int)param_3))
       || (param_3 < 0x15)) {
      lVar8 = 0;
      do {
        param_2[lVar8] = (uint)*(byte *)((long)param_1 + lVar8);
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < (int)param_3);
      return;
    }
    uVar10 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    uVar4 = param_3;
    if (uVar10 < param_3) {
      uVar4 = uVar10;
    }
    uVar10 = uVar4;
    if ((uVar4 != 0) && (*param_2 = (uint)(byte)*param_1, uVar4 != 1)) {
      param_2[1] = (uint)*(byte *)((long)param_1 + 1);
      if (uVar4 == 3) {
        param_2[2] = (uint)*(byte *)((long)param_1 + 2);
      }
      else {
        uVar10 = 2;
      }
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar9 = 0;
    iVar5 = uVar1 * 0x10;
    puVar7 = (ulong *)(param_2 + uVar4);
    pbVar11 = (byte *)((long)param_1 + (ulong)uVar4);
    do {
      uVar16 = *(undefined8 *)(pbVar11 + 8);
      uVar15 = *(undefined8 *)pbVar11;
      uVar9 = uVar9 + 1;
      uVar12 = (undefined1)((ulong)uVar15 >> 8);
      uVar13 = (undefined1)((ulong)uVar15 >> 0x28);
      uVar6 = CONCAT12((char)((ulong)uVar16 >> 8),(short)uVar16) & 0xff00ff;
      uVar14 = (undefined1)((ulong)uVar16 >> 0x28);
      puVar7[1] = (ulong)CONCAT14((char)((ulong)uVar15 >> 0x18),(uint)(byte)((ulong)uVar15 >> 0x10))
      ;
      *puVar7 = (ulong)((uint6)CONCAT14(uVar12,(uint)CONCAT12(uVar12,(ushort)(byte)uVar15)) &
                       0xffff0000ffff);
      puVar7[3] = (ulong)CONCAT14((char)((ulong)uVar15 >> 0x38),(uint)(byte)((ulong)uVar15 >> 0x30))
      ;
      puVar7[2] = (ulong)((uint6)CONCAT14(uVar13,(uint)CONCAT12(uVar13,(ushort)(byte)((ulong)uVar15
                                                                                     >> 0x20))) &
                         0xffff0000ffff);
      puVar7[5] = (ulong)CONCAT14((char)((ulong)uVar16 >> 0x18),(uint)(byte)((ulong)uVar16 >> 0x10))
      ;
      puVar7[4] = (ulong)((uint6)CONCAT14((char)(uVar6 >> 0x10),(uint)uVar6) & 0xffff0000ffff);
      puVar7[7] = (ulong)CONCAT14((char)((ulong)uVar16 >> 0x38),(uint)(byte)((ulong)uVar16 >> 0x30))
      ;
      puVar7[6] = (ulong)((uint6)CONCAT14(uVar14,(uint)CONCAT12(uVar14,(ushort)(byte)((ulong)uVar16
                                                                                     >> 0x20))) &
                         0xffff0000ffff);
      puVar7 = puVar7 + 8;
      pbVar11 = pbVar11 + 0x10;
    } while (uVar9 < uVar1);
    iVar3 = uVar10 + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (uint)*(byte *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (uint)*(byte *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (uint)*(byte *)((long)param_1 + (long)iVar5);
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] = (uint)*(byte *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030249c (752 bytes) name=FUN_0030249c

void FUN_0030249c(float *param_1,float *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  float *pfVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  byte *pbVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_3 == 1) {
    *param_2 = (float)*(byte *)param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (float *)((long)param_1 + (long)(int)param_3)
        ) || (param_3 < 0x15)) {
      lVar7 = 0;
      do {
        param_2[lVar7] = (float)*(byte *)((long)param_1 + lVar7);
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    uVar4 = param_3;
    if (uVar9 < param_3) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if ((uVar4 != 0) && (*param_2 = (float)*(byte *)param_1, uVar4 != 1)) {
      param_2[1] = (float)*(byte *)((long)param_1 + 1);
      if (uVar4 == 3) {
        param_2[2] = (float)*(byte *)((long)param_1 + 2);
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar8 = 0;
    iVar5 = uVar1 * 0x10;
    pfVar6 = param_2 + uVar4;
    pbVar10 = (byte *)((long)param_1 + (ulong)uVar4);
    do {
      uVar8 = uVar8 + 1;
      auVar14._6_2_ = 0;
      auVar14._0_6_ =
           (uint6)CONCAT14(pbVar10[1],(uint)CONCAT12(pbVar10[1],(ushort)*pbVar10)) & 0xffff0000ffff;
      auVar14[8] = pbVar10[2];
      auVar14._9_3_ = 0;
      auVar14[0xc] = pbVar10[3];
      auVar14._13_3_ = 0;
      auVar12._1_3_ = 0;
      auVar12[0] = pbVar10[4];
      auVar12[4] = pbVar10[5];
      auVar12._5_3_ = 0;
      auVar12[8] = pbVar10[6];
      auVar12._9_3_ = 0;
      auVar12[0xc] = pbVar10[7];
      auVar12._13_3_ = 0;
      auVar13._6_2_ = 0;
      auVar13._0_6_ =
           (uint6)CONCAT14(pbVar10[9],(uint)CONCAT12(pbVar10[9],(ushort)pbVar10[8])) &
           0xffff0000ffff;
      auVar13[8] = pbVar10[10];
      auVar13._9_3_ = 0;
      auVar13[0xc] = pbVar10[0xb];
      auVar13._13_3_ = 0;
      auVar11._1_3_ = 0;
      auVar11[0] = pbVar10[0xc];
      auVar11[4] = pbVar10[0xd];
      auVar11._5_3_ = 0;
      auVar11[8] = pbVar10[0xe];
      auVar11._9_3_ = 0;
      auVar11[0xc] = pbVar10[0xf];
      auVar11._13_3_ = 0;
      auVar14 = NEON_scvtf(auVar14,4);
      auVar12 = NEON_scvtf(auVar12,4);
      auVar13 = NEON_scvtf(auVar13,4);
      auVar11 = NEON_scvtf(auVar11,4);
      *(long *)(pfVar6 + 2) = auVar14._8_8_;
      *(long *)pfVar6 = auVar14._0_8_;
      *(long *)(pfVar6 + 6) = auVar12._8_8_;
      *(long *)(pfVar6 + 4) = auVar12._0_8_;
      *(long *)(pfVar6 + 10) = auVar13._8_8_;
      *(long *)(pfVar6 + 8) = auVar13._0_8_;
      *(long *)(pfVar6 + 0xe) = auVar11._8_8_;
      *(long *)(pfVar6 + 0xc) = auVar11._0_8_;
      pfVar6 = pfVar6 + 0x10;
      pbVar10 = pbVar10 + 0x10;
    } while (uVar8 < uVar1);
    iVar3 = uVar9 + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (float)*(byte *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (float)*(byte *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (float)*(byte *)((long)param_1 + (long)iVar5);
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] = (float)*(byte *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030278c (776 bytes) name=FUN_0030278c

void FUN_0030278c(double *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  undefined1 auVar6 [13];
  undefined1 auVar7 [13];
  undefined1 auVar8 [13];
  undefined1 auVar9 [13];
  byte bVar10;
  byte bVar11;
  byte bVar12;
  long lVar13;
  double *pdVar14;
  uint uVar15;
  byte *pbVar16;
  ulong uVar17;
  ulong uVar18;
  undefined1 auVar19 [16];
  ulong uVar20;
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  ulong uVar23;
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  
  if (param_3 == 1) {
    *param_2 = (double)*(byte *)param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 &&
         param_2 < (double *)((long)param_1 + (long)(int)param_3)) || (param_3 < 0x15)) {
      lVar13 = 0;
      do {
        param_2[lVar13] = (double)*(byte *)((long)param_1 + lVar13);
        lVar13 = lVar13 + 1;
      } while ((int)lVar13 < (int)param_3);
      return;
    }
    uVar1 = (uint)((ulong)param_2 >> 3) & 1;
    uVar4 = param_3;
    if (uVar1 < param_3) {
      uVar4 = uVar1;
    }
    if (uVar4 != 0) {
      *param_2 = (double)*(byte *)param_1;
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar15 = 0;
    iVar5 = uVar1 * 0x10;
    pdVar14 = param_2 + uVar4;
    pbVar16 = (byte *)((long)param_1 + (ulong)uVar4);
    do {
      bVar10 = pbVar16[1];
      bVar11 = pbVar16[9];
      bVar12 = pbVar16[0xd];
      uVar15 = uVar15 + 1;
      uVar23 = CONCAT26(0,(uint6)CONCAT14(bVar10,(uint)CONCAT12(bVar10,(ushort)*pbVar16)) &
                          0xffff0000ffff);
      auVar8[8] = pbVar16[2];
      auVar8._0_8_ = uVar23;
      auVar8._9_3_ = 0;
      auVar8[0xc] = pbVar16[3];
      uVar18 = CONCAT35(0,CONCAT14(pbVar16[5],(uint)pbVar16[4]));
      auVar6[8] = pbVar16[6];
      auVar6._0_8_ = uVar18;
      auVar6._9_3_ = 0;
      auVar6[0xc] = pbVar16[7];
      uVar20 = CONCAT26(0,(uint6)CONCAT14(bVar11,(uint)CONCAT12(bVar11,(ushort)pbVar16[8])) &
                          0xffff0000ffff);
      auVar9[8] = pbVar16[10];
      auVar9._0_8_ = uVar20;
      auVar9._9_3_ = 0;
      auVar9[0xc] = pbVar16[0xb];
      uVar17 = CONCAT35(0,CONCAT14(bVar12,(uint)pbVar16[0xc]));
      auVar7[8] = pbVar16[0xe];
      auVar7._0_8_ = uVar17;
      auVar7._9_3_ = 0;
      auVar7[0xc] = pbVar16[0xf];
      auVar24._0_8_ = uVar23 & 0xffffffff;
      auVar24[8] = bVar10;
      auVar24._9_7_ = 0;
      auVar28._0_8_ = (ulong)auVar8._8_5_ & 0xffffffff;
      auVar28._8_5_ = auVar8._8_5_ >> 0x20;
      auVar28._13_3_ = 0;
      auVar27._0_8_ = uVar18 & 0xffffffff;
      auVar27[8] = pbVar16[5];
      auVar27._9_7_ = 0;
      auVar22._0_8_ = (ulong)auVar6._8_5_ & 0xffffffff;
      auVar22._8_5_ = auVar6._8_5_ >> 0x20;
      auVar22._13_3_ = 0;
      auVar25 = NEON_scvtf(auVar24,8);
      pdVar14[1] = auVar25._8_8_;
      *pdVar14 = auVar25._0_8_;
      auVar25 = NEON_scvtf(auVar28,8);
      auVar21._0_8_ = (ulong)auVar9._8_5_ & 0xffffffff;
      auVar21._8_5_ = auVar9._8_5_ >> 0x20;
      auVar21._13_3_ = 0;
      auVar28 = NEON_scvtf(auVar27,8);
      auVar26._0_8_ = uVar17 & 0xffffffff;
      auVar26[8] = bVar12;
      auVar26._9_7_ = 0;
      auVar19 = NEON_scvtf(auVar22,8);
      pdVar14[3] = auVar25._8_8_;
      pdVar14[2] = auVar25._0_8_;
      pdVar14[5] = auVar28._8_8_;
      pdVar14[4] = auVar28._0_8_;
      auVar25[8] = bVar11;
      auVar25._0_8_ = uVar20 & 0xffffffff;
      auVar25._9_7_ = 0;
      auVar28 = NEON_scvtf(auVar25,8);
      pdVar14[7] = auVar19._8_8_;
      pdVar14[6] = auVar19._0_8_;
      auVar22 = NEON_scvtf(auVar21,8);
      auVar19._0_8_ = (ulong)auVar7._8_5_ & 0xffffffff;
      auVar19._8_5_ = auVar7._8_5_ >> 0x20;
      auVar19._13_3_ = 0;
      auVar25 = NEON_scvtf(auVar26,8);
      pdVar14[9] = auVar28._8_8_;
      pdVar14[8] = auVar28._0_8_;
      pdVar14[0xb] = auVar22._8_8_;
      pdVar14[10] = auVar22._0_8_;
      pdVar14[0xd] = auVar25._8_8_;
      pdVar14[0xc] = auVar25._0_8_;
      auVar25 = NEON_scvtf(auVar19,8);
      pdVar14[0xf] = auVar25._8_8_;
      pdVar14[0xe] = auVar25._0_8_;
      pdVar14 = pdVar14 + 0x10;
      pbVar16 = pbVar16 + 0x10;
    } while (uVar15 < uVar1);
    iVar3 = (uint)(uVar4 != 0) + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (double)*(byte *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (double)*(byte *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (double)*(byte *)((long)param_1 + (long)iVar5);
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] = (double)*(byte *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00302a94 (812 bytes) name=FUN_00302a94

void FUN_00302a94(undefined1 *param_1,undefined1 *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  undefined8 *puVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  undefined8 *puVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) || (param_3 < 0x16)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = param_1[lVar6];
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar7 = -(int)param_1 & 0xf;
    uVar3 = param_3;
    if (uVar7 < param_3) {
      uVar3 = uVar7;
    }
    uVar7 = uVar3;
    if ((((uVar3 != 0) && (*param_2 = *param_1, uVar3 != 1)) &&
        (param_2[1] = param_1[1], uVar3 != 2)) &&
       ((param_2[2] = param_1[2], uVar3 != 3 && (param_2[3] = param_1[3], uVar3 != 4)))) {
      param_2[4] = param_1[4];
      if (uVar3 == 5) {
        uVar7 = 5;
      }
      else {
        param_2[5] = param_1[5];
        if (((uVar3 != 6) && (param_2[6] = param_1[6], uVar3 != 7)) &&
           ((param_2[7] = param_1[7], uVar3 != 8 &&
            ((((param_2[8] = param_1[8], uVar3 != 9 && (param_2[9] = param_1[9], uVar3 != 10)) &&
              (param_2[10] = param_1[10], uVar3 != 0xb)) &&
             ((param_2[0xb] = param_1[0xb], uVar3 != 0xc &&
              (param_2[0xc] = param_1[0xc], uVar3 != 0xd)))))))) {
          param_2[0xd] = param_1[0xd];
          if (uVar3 == 0xf) {
            param_2[0xe] = param_1[0xe];
          }
          else {
            uVar7 = 0xe;
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar8 = 0;
      puVar5 = (undefined8 *)(param_2 + uVar3);
      puVar9 = (undefined8 *)(param_1 + uVar3);
      do {
        uVar10 = *puVar9;
        uVar8 = uVar8 + 1;
        puVar5[1] = puVar9[1];
        *puVar5 = uVar10;
        puVar5 = puVar5 + 2;
        puVar9 = puVar9 + 2;
      } while (uVar8 < uVar1);
      uVar7 = uVar7 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar7 + 1;
    param_2[(int)uVar7] = param_1[(int)uVar7];
    if (iVar4 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar4] = param_1[iVar4];
      if (iVar2 < (int)param_3) {
        iVar4 = uVar7 + 3;
        param_2[iVar2] = param_1[iVar2];
        if (iVar4 < (int)param_3) {
          iVar2 = uVar7 + 4;
          param_2[iVar4] = param_1[iVar4];
          if (iVar2 < (int)param_3) {
            iVar4 = uVar7 + 5;
            param_2[iVar2] = param_1[iVar2];
            if (iVar4 < (int)param_3) {
              iVar2 = uVar7 + 6;
              param_2[iVar4] = param_1[iVar4];
              if (iVar2 < (int)param_3) {
                iVar4 = uVar7 + 7;
                param_2[iVar2] = param_1[iVar2];
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar7 + 8;
                  param_2[iVar4] = param_1[iVar4];
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar7 + 9;
                    param_2[iVar2] = param_1[iVar2];
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar7 + 10;
                      param_2[iVar4] = param_1[iVar4];
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar7 + 0xb;
                        param_2[iVar2] = param_1[iVar2];
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar7 + 0xc;
                          param_2[iVar4] = param_1[iVar4];
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar7 + 0xd;
                            param_2[iVar2] = param_1[iVar2];
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar7 + 0xe;
                              param_2[iVar4] = param_1[iVar4];
                              if (iVar2 < (int)param_3) {
                                param_2[iVar2] = param_1[iVar2];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00302dc0 (712 bytes) name=FUN_00302dc0

void FUN_00302dc0(short *param_1,short *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  short *psVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  char *pcVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  
  if (param_3 == 1) {
    *param_2 = (short)(char)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (short *)((long)param_1 + (long)(int)param_3)
        ) || (param_3 < 0x15)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = (short)*(char *)((long)param_1 + lVar6);
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar7 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
    uVar3 = param_3;
    if (uVar7 < param_3) {
      uVar3 = uVar7;
    }
    uVar7 = uVar3;
    if ((((uVar3 != 0) && (*param_2 = (short)(char)*param_1, uVar3 != 1)) &&
        (param_2[1] = (short)*(char *)((long)param_1 + 1), uVar3 != 2)) &&
       ((param_2[2] = (short)(char)param_1[1], uVar3 != 3 &&
        (param_2[3] = (short)*(char *)((long)param_1 + 3), uVar3 != 4)))) {
      param_2[4] = (short)(char)param_1[2];
      if (uVar3 == 5) {
        uVar7 = 5;
      }
      else {
        param_2[5] = (short)*(char *)((long)param_1 + 5);
        if (uVar3 == 7) {
          param_2[6] = (short)(char)param_1[3];
        }
        else {
          uVar7 = 6;
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar8 = 0;
      psVar5 = param_2 + uVar3;
      pcVar9 = (char *)((long)param_1 + (ulong)uVar3);
      do {
        uVar11 = *(undefined8 *)(pcVar9 + 8);
        uVar10 = *(undefined8 *)pcVar9;
        uVar8 = uVar8 + 1;
        *(ulong *)(psVar5 + 4) =
             CONCAT26((short)(char)((ulong)uVar10 >> 0x38),
                      CONCAT24((short)(char)((ulong)uVar10 >> 0x30),
                               CONCAT22((short)(char)((ulong)uVar10 >> 0x28),
                                        (short)(char)((ulong)uVar10 >> 0x20))));
        *(ulong *)psVar5 =
             CONCAT26((short)(char)((ulong)uVar10 >> 0x18),
                      CONCAT24((short)(char)((ulong)uVar10 >> 0x10),
                               CONCAT22((short)(char)((ulong)uVar10 >> 8),(short)(char)uVar10)));
        *(ulong *)(psVar5 + 0xc) =
             CONCAT26((short)(char)((ulong)uVar11 >> 0x38),
                      CONCAT24((short)(char)((ulong)uVar11 >> 0x30),
                               CONCAT22((short)(char)((ulong)uVar11 >> 0x28),
                                        (short)(char)((ulong)uVar11 >> 0x20))));
        *(ulong *)(psVar5 + 8) =
             CONCAT26((short)(char)((ulong)uVar11 >> 0x18),
                      CONCAT24((short)(char)((ulong)uVar11 >> 0x10),
                               CONCAT22((short)(char)((ulong)uVar11 >> 8),(short)(char)uVar11)));
        psVar5 = psVar5 + 0x10;
        pcVar9 = pcVar9 + 0x10;
      } while (uVar8 < uVar1);
      uVar7 = uVar7 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar7 + 1;
    param_2[(int)uVar7] = (short)*(char *)((long)param_1 + (long)(int)uVar7);
    if (iVar4 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
      if (iVar2 < (int)param_3) {
        iVar4 = uVar7 + 3;
        param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
        if (iVar4 < (int)param_3) {
          iVar2 = uVar7 + 4;
          param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
          if (iVar2 < (int)param_3) {
            iVar4 = uVar7 + 5;
            param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
            if (iVar4 < (int)param_3) {
              iVar2 = uVar7 + 6;
              param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
              if (iVar2 < (int)param_3) {
                iVar4 = uVar7 + 7;
                param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar7 + 8;
                  param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar7 + 9;
                    param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar7 + 10;
                      param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar7 + 0xb;
                        param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar7 + 0xc;
                          param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar7 + 0xd;
                            param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar7 + 0xe;
                              param_2[iVar4] = (short)*(char *)((long)param_1 + (long)iVar4);
                              if (iVar2 < (int)param_3) {
                                param_2[iVar2] = (short)*(char *)((long)param_1 + (long)iVar2);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303088 (656 bytes) name=FUN_00303088

void FUN_00303088(int *param_1,int *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int *piVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  char *pcVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  short sVar13;
  short sVar14;
  
  if (param_3 == 1) {
    *param_2 = (int)(char)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (int *)((long)param_1 + (long)(int)param_3))
       || (param_3 < 0x15)) {
      lVar7 = 0;
      do {
        param_2[lVar7] = (int)*(char *)((long)param_1 + lVar7);
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    uVar4 = param_3;
    if (uVar9 < param_3) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if ((uVar4 != 0) && (*param_2 = (int)(char)*param_1, uVar4 != 1)) {
      param_2[1] = (int)*(char *)((long)param_1 + 1);
      if (uVar4 == 3) {
        param_2[2] = (int)*(char *)((long)param_1 + 2);
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar8 = 0;
    iVar5 = uVar1 * 0x10;
    piVar6 = param_2 + uVar4;
    pcVar10 = (char *)((long)param_1 + (ulong)uVar4);
    do {
      uVar12 = *(undefined8 *)(pcVar10 + 8);
      uVar11 = *(undefined8 *)pcVar10;
      uVar8 = uVar8 + 1;
      sVar13 = (short)(char)((ulong)uVar11 >> 0x28);
      sVar14 = (short)(char)((ulong)uVar11 >> 0x38);
      *(ulong *)(piVar6 + 2) =
           CONCAT44((int)(short)(char)((ulong)uVar11 >> 0x18),
                    (int)(short)(char)((ulong)uVar11 >> 0x10));
      *(ulong *)piVar6 = CONCAT44((int)(short)(char)((ulong)uVar11 >> 8),(int)(short)(char)uVar11);
      *(ulong *)(piVar6 + 6) =
           CONCAT26(sVar14 >> 0xf,CONCAT24(sVar14,(int)(short)(char)((ulong)uVar11 >> 0x30)));
      *(ulong *)(piVar6 + 4) =
           CONCAT26(sVar13 >> 0xf,CONCAT24(sVar13,(int)(short)(char)((ulong)uVar11 >> 0x20)));
      *(ulong *)(piVar6 + 10) =
           CONCAT44((int)(short)(char)((ulong)uVar12 >> 0x18),
                    (int)(short)(char)((ulong)uVar12 >> 0x10));
      *(ulong *)(piVar6 + 8) =
           CONCAT44((int)(short)(char)((ulong)uVar12 >> 8),(int)(short)(char)uVar12);
      *(ulong *)(piVar6 + 0xe) =
           CONCAT44((int)(short)(char)((ulong)uVar12 >> 0x38),
                    (int)(short)(char)((ulong)uVar12 >> 0x30));
      *(ulong *)(piVar6 + 0xc) =
           CONCAT44((int)(short)(char)((ulong)uVar12 >> 0x28),
                    (int)(short)(char)((ulong)uVar12 >> 0x20));
      piVar6 = piVar6 + 0x10;
      pcVar10 = pcVar10 + 0x10;
    } while (uVar8 < uVar1);
    iVar3 = uVar9 + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (int)*(char *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (int)*(char *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (int)*(char *)((long)param_1 + (long)iVar5);
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] = (int)*(char *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303318 (752 bytes) name=FUN_00303318

void FUN_00303318(float *param_1,float *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  float *pfVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  char *pcVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_3 == 1) {
    *param_2 = (float)(int)*(char *)param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (float *)((long)param_1 + (long)(int)param_3)
        ) || (param_3 < 0x15)) {
      lVar7 = 0;
      do {
        param_2[lVar7] = (float)(int)*(char *)((long)param_1 + lVar7);
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    uVar4 = param_3;
    if (uVar9 < param_3) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if ((uVar4 != 0) && (*param_2 = (float)(int)*(char *)param_1, uVar4 != 1)) {
      param_2[1] = (float)(int)*(char *)((long)param_1 + 1);
      if (uVar4 == 3) {
        param_2[2] = (float)(int)*(char *)((long)param_1 + 2);
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar8 = 0;
    iVar5 = uVar1 * 0x10;
    pfVar6 = param_2 + uVar4;
    pcVar10 = (char *)((long)param_1 + (ulong)uVar4);
    do {
      uVar8 = uVar8 + 1;
      auVar14._0_4_ = (int)(short)*pcVar10;
      auVar14._4_4_ = (int)(short)pcVar10[1];
      auVar14._8_4_ = (int)(short)pcVar10[2];
      auVar14._12_4_ = (int)(short)pcVar10[3];
      auVar12._0_4_ = (int)(short)pcVar10[4];
      auVar12._4_4_ = (int)(short)pcVar10[5];
      auVar12._8_4_ = (int)(short)pcVar10[6];
      auVar12._12_4_ = (int)(short)pcVar10[7];
      auVar13._0_4_ = (int)(short)pcVar10[8];
      auVar13._4_4_ = (int)(short)pcVar10[9];
      auVar13._8_4_ = (int)(short)pcVar10[10];
      auVar13._12_4_ = (int)(short)pcVar10[0xb];
      auVar11._0_4_ = (int)(short)pcVar10[0xc];
      auVar11._4_4_ = (int)(short)pcVar10[0xd];
      auVar11._8_4_ = (int)(short)pcVar10[0xe];
      auVar11._12_4_ = (int)(short)pcVar10[0xf];
      auVar14 = NEON_scvtf(auVar14,4);
      auVar12 = NEON_scvtf(auVar12,4);
      auVar13 = NEON_scvtf(auVar13,4);
      auVar11 = NEON_scvtf(auVar11,4);
      *(long *)(pfVar6 + 2) = auVar14._8_8_;
      *(long *)pfVar6 = auVar14._0_8_;
      *(long *)(pfVar6 + 6) = auVar12._8_8_;
      *(long *)(pfVar6 + 4) = auVar12._0_8_;
      *(long *)(pfVar6 + 10) = auVar13._8_8_;
      *(long *)(pfVar6 + 8) = auVar13._0_8_;
      *(long *)(pfVar6 + 0xe) = auVar11._8_8_;
      *(long *)(pfVar6 + 0xc) = auVar11._0_8_;
      pfVar6 = pfVar6 + 0x10;
      pcVar10 = pcVar10 + 0x10;
    } while (uVar8 < uVar1);
    iVar3 = uVar9 + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (float)(int)*(char *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (float)(int)*(char *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (float)(int)*(char *)((long)param_1 + (long)iVar5);
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] =
                                       (float)(int)*(char *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303608 (776 bytes) name=FUN_00303608

void FUN_00303608(double *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  char cVar7;
  char cVar8;
  char cVar9;
  char cVar10;
  char cVar11;
  char cVar12;
  char cVar13;
  long lVar14;
  double *pdVar15;
  uint uVar16;
  char *pcVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  
  if (param_3 == 1) {
    *param_2 = (double)(int)*(char *)param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 &&
         param_2 < (double *)((long)param_1 + (long)(int)param_3)) || (param_3 < 0x15)) {
      lVar14 = 0;
      do {
        param_2[lVar14] = (double)(int)*(char *)((long)param_1 + lVar14);
        lVar14 = lVar14 + 1;
      } while ((int)lVar14 < (int)param_3);
      return;
    }
    uVar1 = (uint)((ulong)param_2 >> 3) & 1;
    uVar4 = param_3;
    if (uVar1 < param_3) {
      uVar4 = uVar1;
    }
    if (uVar4 != 0) {
      *param_2 = (double)(int)*(char *)param_1;
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    uVar16 = 0;
    iVar5 = uVar1 * 0x10;
    pdVar15 = param_2 + uVar4;
    pcVar17 = (char *)((long)param_1 + (ulong)uVar4);
    do {
      cVar6 = pcVar17[8];
      cVar7 = pcVar17[9];
      cVar8 = pcVar17[10];
      cVar9 = pcVar17[0xb];
      cVar10 = pcVar17[0xc];
      cVar11 = pcVar17[0xd];
      cVar12 = pcVar17[0xe];
      cVar13 = pcVar17[0xf];
      uVar16 = uVar16 + 1;
      auVar21._0_8_ = (long)(int)(short)*pcVar17;
      auVar21._8_8_ = (long)(int)(short)pcVar17[1];
      auVar25._0_8_ = (long)(int)(short)pcVar17[2];
      auVar25._8_8_ = (long)(int)(short)pcVar17[3];
      auVar24._0_8_ = (long)(int)(short)pcVar17[4];
      auVar24._8_8_ = (long)(int)(short)pcVar17[5];
      auVar20._0_8_ = (long)(int)(short)pcVar17[6];
      auVar20._8_8_ = (long)(int)(short)pcVar17[7];
      auVar22 = NEON_scvtf(auVar21,8);
      pdVar15[1] = auVar22._8_8_;
      *pdVar15 = auVar22._0_8_;
      auVar22 = NEON_scvtf(auVar25,8);
      auVar19._0_8_ = (long)(int)(short)cVar8;
      auVar19._8_8_ = (long)(int)(short)cVar9;
      auVar25 = NEON_scvtf(auVar24,8);
                    /* catch() { ... } // from try @ 00303ab8 with catch @ 003036f4
                       catch() { ... } // from try @ 00303e0c with catch @ 003036f4
                       catch() { ... } // from try @ 00303fe4 with catch @ 003036f4 */
      auVar23._0_8_ = (long)(int)(short)cVar10;
      auVar23._8_8_ = (long)(int)(short)cVar11;
      auVar18 = NEON_scvtf(auVar20,8);
      pdVar15[3] = auVar22._8_8_;
      pdVar15[2] = auVar22._0_8_;
      pdVar15[5] = auVar25._8_8_;
      pdVar15[4] = auVar25._0_8_;
      auVar22._8_8_ = (long)(int)(short)cVar7;
      auVar22._0_8_ = (long)(int)(short)cVar6;
      auVar25 = NEON_scvtf(auVar22,8);
      pdVar15[7] = auVar18._8_8_;
      pdVar15[6] = auVar18._0_8_;
      auVar20 = NEON_scvtf(auVar19,8);
      auVar18._0_8_ = (long)(int)(short)cVar12;
      auVar18._8_8_ = (long)(int)(short)cVar13;
      auVar22 = NEON_scvtf(auVar23,8);
      pdVar15[9] = auVar25._8_8_;
      pdVar15[8] = auVar25._0_8_;
      pdVar15[0xb] = auVar20._8_8_;
      pdVar15[10] = auVar20._0_8_;
      pdVar15[0xd] = auVar22._8_8_;
      pdVar15[0xc] = auVar22._0_8_;
      auVar22 = NEON_scvtf(auVar18,8);
      pdVar15[0xf] = auVar22._8_8_;
      pdVar15[0xe] = auVar22._0_8_;
      pdVar15 = pdVar15 + 0x10;
      pcVar17 = pcVar17 + 0x10;
    } while (uVar16 < uVar1);
    iVar3 = (uint)(uVar4 != 0) + iVar5;
    if (param_3 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_2[iVar3] = (double)(int)*(char *)((long)param_1 + (long)iVar3);
      if (iVar5 < (int)param_3) {
        iVar2 = iVar3 + 2;
        param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
        if (iVar2 < (int)param_3) {
          iVar5 = iVar3 + 3;
          param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
          if (iVar5 < (int)param_3) {
            iVar2 = iVar3 + 4;
            param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
            if (iVar2 < (int)param_3) {
              iVar5 = iVar3 + 5;
              param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
              if (iVar5 < (int)param_3) {
                iVar2 = iVar3 + 6;
                param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
                if (iVar2 < (int)param_3) {
                  iVar5 = iVar3 + 7;
                  param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
                  if (iVar5 < (int)param_3) {
                    iVar2 = iVar3 + 8;
                    param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
                    if (iVar2 < (int)param_3) {
                      iVar5 = iVar3 + 9;
                      param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
                      if (iVar5 < (int)param_3) {
                        iVar2 = iVar3 + 10;
                        param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
                        if (iVar2 < (int)param_3) {
                          iVar5 = iVar3 + 0xb;
                          param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
                          if (iVar5 < (int)param_3) {
                            iVar2 = iVar3 + 0xc;
                            param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5);
                            if (iVar2 < (int)param_3) {
                              iVar5 = iVar3 + 0xd;
                              param_2[iVar2] = (double)(int)*(char *)((long)param_1 + (long)iVar2);
                              if (iVar5 < (int)param_3) {
                                iVar3 = iVar3 + 0xe;
                                param_2[iVar5] = (double)(int)*(char *)((long)param_1 + (long)iVar5)
                                ;
                                if (iVar3 < (int)param_3) {
                                  param_2[iVar3] =
                                       (double)(int)*(char *)((long)param_1 + (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303910 (480 bytes) name=FUN_00303910

void FUN_00303910(undefined2 *param_1,undefined2 *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 *puVar4;
  long lVar5;
  ulong uVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
                    /* try { // try from 00303ab8 to 00403dc3 has its CatchHandler @ 003036f4 */
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 8 && param_1 < param_2 + 8) || (param_3 < 0xf)) {
      lVar5 = 0;
      do {
        param_2[lVar5] = param_1[lVar5];
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
    uVar2 = param_3;
    if (uVar9 < param_3) {
      uVar2 = uVar9;
    }
    uVar9 = uVar2;
    if ((((uVar2 != 0) && (*param_2 = *param_1, uVar2 != 1)) &&
        (param_2[1] = param_1[1], uVar2 != 2)) &&
       ((param_2[2] = param_1[2], uVar2 != 3 && (param_2[3] = param_1[3], uVar2 != 4)))) {
      param_2[4] = param_1[4];
      if (uVar2 == 5) {
        uVar9 = 5;
      }
      else {
        param_2[5] = param_1[5];
        if (uVar2 == 7) {
          param_2[6] = param_1[6];
        }
        else {
          uVar9 = 6;
        }
      }
    }
    uVar1 = ((param_3 - uVar2) - 8 >> 3) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 8;
    puVar4 = (undefined8 *)(param_2 + uVar2);
    puVar8 = (undefined8 *)(param_1 + uVar2);
    do {
      uVar10 = *puVar8;
      uVar7 = uVar7 + 1;
      puVar4[1] = puVar8[1];
      *puVar4 = uVar10;
      puVar4 = puVar4 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar7 < uVar1);
    uVar9 = uVar9 + iVar3;
    if (param_3 - uVar2 != iVar3) {
      uVar6 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar9 << 1;
      *(undefined2 *)((long)param_2 + uVar6) = *(undefined2 *)((long)param_1 + uVar6);
      if ((((int)(uVar9 + 1) < (int)param_3) &&
          (*(undefined2 *)((long)param_2 + uVar6 + 2) = *(undefined2 *)((long)param_1 + uVar6 + 2),
          (int)(uVar9 + 2) < (int)param_3)) &&
         ((*(undefined2 *)((long)param_2 + uVar6 + 4) = *(undefined2 *)((long)param_1 + uVar6 + 4),
          (int)(uVar9 + 3) < (int)param_3 &&
          (((*(undefined2 *)((long)param_2 + uVar6 + 6) = *(undefined2 *)((long)param_1 + uVar6 + 6)
            , (int)(uVar9 + 4) < (int)param_3 &&
            (*(undefined2 *)((long)param_2 + uVar6 + 8) = *(undefined2 *)((long)param_1 + uVar6 + 8)
            , (int)(uVar9 + 5) < (int)param_3)) &&
           (*(undefined2 *)((long)param_2 + uVar6 + 10) =
                 *(undefined2 *)((long)param_1 + uVar6 + 10), (int)(uVar9 + 6) < (int)param_3))))))
      {
        *(undefined2 *)((long)param_2 + uVar6 + 0xc) = *(undefined2 *)((long)param_1 + uVar6 + 0xc);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303af0 (492 bytes) name=FUN_00303af0

void FUN_00303af0(ushort *param_1,uint *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  ulong *puVar5;
  uint uVar6;
  uint uVar7;
  ushort *puVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = (uint)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (uint)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (uint)param_1[1];
      if (((uVar4 != 2) && (param_2[2] = (uint)param_1[2], uVar4 != 3)) &&
         ((param_2[3] = (uint)param_1[3], uVar4 != 4 &&
          ((param_2[4] = (uint)param_1[4], uVar4 != 5 && (param_2[5] = (uint)param_1[5], uVar4 != 6)
           ))))) {
        param_2[6] = (uint)param_1[6];
        if (uVar4 == 8) {
          param_2[7] = (uint)param_1[7];
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      puVar5 = (ulong *)(param_2 + uVar4);
      puVar8 = param_1 + uVar4;
      do {
        uVar10 = *(undefined8 *)(puVar8 + 4);
        uVar9 = *(undefined8 *)puVar8;
        uVar7 = uVar7 + 1;
        puVar5[1] = (ulong)CONCAT24((short)((ulong)uVar9 >> 0x30),
                                    (uint)(ushort)((ulong)uVar9 >> 0x20));
        *puVar5 = (ulong)CONCAT24((short)((ulong)uVar9 >> 0x10),(uint)(ushort)uVar9);
        puVar5[3] = (ulong)CONCAT24((short)((ulong)uVar10 >> 0x30),
                                    (uint)(ushort)((ulong)uVar10 >> 0x20));
        puVar5[2] = (ulong)(CONCAT24((short)((ulong)uVar10 >> 0x10),(int)uVar10) & 0xffff0000ffff);
        puVar5 = puVar5 + 4;
        puVar8 = puVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (uint)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (uint)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar6 + 3;
        param_2[iVar2] = (uint)param_1[iVar2];
        if (iVar3 < (int)param_3) {
          iVar2 = uVar6 + 4;
          param_2[iVar3] = (uint)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar6 + 5;
            param_2[iVar2] = (uint)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar6 + 6;
              param_2[iVar3] = (uint)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (uint)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303cdc (564 bytes) name=FUN_00303cdc

void FUN_00303cdc(ushort *param_1,float *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  ushort *puVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  if (param_3 == 1) {
    *param_2 = (float)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (float)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (float)param_1[1];
      if (((uVar4 != 2) && (param_2[2] = (float)param_1[2], uVar4 != 3)) &&
         ((param_2[3] = (float)param_1[3], uVar4 != 4 &&
          ((param_2[4] = (float)param_1[4], uVar4 != 5 &&
           (param_2[5] = (float)param_1[5], uVar4 != 6)))))) {
        param_2[6] = (float)param_1[6];
        if (uVar4 == 8) {
          param_2[7] = (float)param_1[7];
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      pfVar5 = param_2 + uVar4;
      puVar8 = param_1 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar10._2_2_ = 0;
        auVar10._0_2_ = *puVar8;
        auVar10._4_2_ = puVar8[1];
        auVar10._6_2_ = 0;
        auVar10._8_2_ = puVar8[2];
        auVar10._10_2_ = 0;
        auVar10._12_2_ = puVar8[3];
        auVar10._14_2_ = 0;
        auVar9._2_2_ = 0;
        auVar9._0_2_ = puVar8[4];
        auVar9._4_2_ = puVar8[5];
        auVar9._6_2_ = 0;
        auVar9._8_2_ = puVar8[6];
        auVar9._10_2_ = 0;
        auVar9._12_2_ = puVar8[7];
        auVar9._14_2_ = 0;
        auVar10 = NEON_scvtf(auVar10,4);
                    /* try { // try from 00303e04 to 00403e07 has its CatchHandler @ 00303fd4 */
        auVar9 = NEON_scvtf(auVar9,4);
        *(long *)(pfVar5 + 2) = auVar10._8_8_;
        *(long *)pfVar5 = auVar10._0_8_;
                    /* try { // try from 00303e0c to 00403fbf has its CatchHandler @ 003036f4 */
        *(long *)(pfVar5 + 6) = auVar9._8_8_;
        *(long *)(pfVar5 + 4) = auVar9._0_8_;
        pfVar5 = pfVar5 + 8;
        puVar8 = puVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (float)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (float)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar6 + 3;
        param_2[iVar2] = (float)param_1[iVar2];
        if (iVar3 < (int)param_3) {
          iVar2 = uVar6 + 4;
          param_2[iVar3] = (float)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar6 + 5;
            param_2[iVar2] = (float)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar6 + 6;
              param_2[iVar3] = (float)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (float)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00303f10 (596 bytes) name=FUN_00303f10

void FUN_00303f10(ushort *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined1 auVar4 [14];
  undefined1 auVar5 [14];
  uint uVar6;
  double *pdVar7;
  uint uVar8;
  uint uVar9;
  ushort *puVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  ulong uVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  
  if (param_3 == 1) {
    *param_2 = (double)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar6 = (uint)((ulong)param_2 >> 3) & 1;
    if (param_3 < uVar6) {
      uVar6 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar6, uVar8 = 0, uVar6 != 0)) &&
       (uVar6 = uVar1, *param_2 = (double)*param_1, uVar8 = uVar6, uVar6 != 1)) {
      param_2[1] = (double)param_1[1];
      if (((uVar6 != 2) && (param_2[2] = (double)param_1[2], uVar6 != 3)) &&
         ((param_2[3] = (double)param_1[3], uVar6 != 4 &&
          ((param_2[4] = (double)param_1[4], uVar6 != 5 &&
           (param_2[5] = (double)param_1[5], uVar6 != 6)))))) {
        param_2[6] = (double)param_1[6];
        if (uVar6 == 8) {
          param_2[7] = (double)param_1[7];
        }
        else {
          uVar8 = 7;
        }
      }
                    /* catch() { ... } // from try @ 00303e04 with catch @ 00303fd4 */
      if (param_3 == uVar6) {
        return;
      }
    }
                    /* try { // try from 00303fe4 to 00403fe7 has its CatchHandler @ 003036f4 */
                    /* catch() { ... } // from try @ 00305298 with catch @ 00303fe8
                       catch() { ... } // from try @ 00305fb8 with catch @ 00303fe8 */
    uVar1 = ((param_3 - uVar6) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar6) {
      uVar9 = 0;
      pdVar7 = param_2 + uVar6;
      puVar10 = param_1 + uVar6;
      do {
        uVar9 = uVar9 + 1;
        uVar13 = CONCAT26(0,CONCAT24(puVar10[1],(uint)*puVar10));
        auVar4._8_2_ = puVar10[2];
        auVar4._0_8_ = uVar13;
        auVar4._10_2_ = 0;
        auVar4._12_2_ = puVar10[3];
        uVar11 = CONCAT26(0,CONCAT24(puVar10[5],(uint)puVar10[4]));
        auVar5._8_2_ = puVar10[6];
        auVar5._0_8_ = uVar11;
        auVar5._10_2_ = 0;
        auVar5._12_2_ = puVar10[7];
        auVar16._0_8_ = uVar13 & 0xffffffff;
        auVar16._8_2_ = puVar10[1];
        auVar16._10_6_ = 0;
        auVar14._0_8_ = (ulong)auVar4._8_6_ & 0xffffffff;
        auVar14._8_6_ = auVar4._8_6_ >> 0x20;
        auVar14._14_2_ = 0;
        auVar15._0_8_ = uVar11 & 0xffffffff;
        auVar15._8_2_ = puVar10[5];
        auVar15._10_6_ = 0;
        auVar12._0_8_ = (ulong)auVar5._8_6_ & 0xffffffff;
        auVar12._8_6_ = auVar5._8_6_ >> 0x20;
        auVar12._14_2_ = 0;
        auVar16 = NEON_scvtf(auVar16,8);
        pdVar7[1] = auVar16._8_8_;
        *pdVar7 = auVar16._0_8_;
        auVar14 = NEON_scvtf(auVar14,8);
        auVar15 = NEON_scvtf(auVar15,8);
        auVar12 = NEON_scvtf(auVar12,8);
        pdVar7[3] = auVar14._8_8_;
        pdVar7[2] = auVar14._0_8_;
        pdVar7[5] = auVar15._8_8_;
        pdVar7[4] = auVar15._0_8_;
        pdVar7[7] = auVar12._8_8_;
        pdVar7[6] = auVar12._0_8_;
        pdVar7 = pdVar7 + 8;
        puVar10 = puVar10 + 8;
      } while (uVar9 < uVar1);
      uVar8 = uVar8 + iVar3;
      if (param_3 - uVar6 == iVar3) {
        return;
      }
    }
    iVar3 = uVar8 + 1;
    param_2[(int)uVar8] = (double)param_1[(int)uVar8];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar8 + 2;
      param_2[iVar3] = (double)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar8 + 3;
        param_2[iVar2] = (double)param_1[iVar2];
                    /* try { // try from 003040c4 to 004040c7 has its CatchHandler @ 00305fa4 */
        if (iVar3 < (int)param_3) {
          iVar2 = uVar8 + 4;
          param_2[iVar3] = (double)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar8 + 5;
                    /* try { // try from 003040f8 to 004040fb has its CatchHandler @ 00305fc0 */
            param_2[iVar2] = (double)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar8 + 6;
              param_2[iVar3] = (double)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (double)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304164 (480 bytes) name=FUN_00304164

void FUN_00304164(undefined2 *param_1,undefined2 *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 *puVar4;
  long lVar5;
  ulong uVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 8 && param_1 < param_2 + 8) || (param_3 < 0xf)) {
      lVar5 = 0;
      do {
        param_2[lVar5] = param_1[lVar5];
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
    uVar2 = param_3;
    if (uVar9 < param_3) {
      uVar2 = uVar9;
    }
    uVar9 = uVar2;
    if ((((uVar2 != 0) && (*param_2 = *param_1, uVar2 != 1)) &&
        (param_2[1] = param_1[1], uVar2 != 2)) &&
       ((param_2[2] = param_1[2], uVar2 != 3 && (param_2[3] = param_1[3], uVar2 != 4)))) {
      param_2[4] = param_1[4];
      if (uVar2 == 5) {
        uVar9 = 5;
      }
      else {
        param_2[5] = param_1[5];
        if (uVar2 == 7) {
          param_2[6] = param_1[6];
        }
        else {
          uVar9 = 6;
        }
      }
    }
    uVar1 = ((param_3 - uVar2) - 8 >> 3) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 8;
    puVar4 = (undefined8 *)(param_2 + uVar2);
    puVar8 = (undefined8 *)(param_1 + uVar2);
    do {
      uVar10 = *puVar8;
      uVar7 = uVar7 + 1;
      puVar4[1] = puVar8[1];
      *puVar4 = uVar10;
      puVar4 = puVar4 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar7 < uVar1);
    uVar9 = uVar9 + iVar3;
    if (param_3 - uVar2 != iVar3) {
      uVar6 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar9 << 1;
      *(undefined2 *)((long)param_2 + uVar6) = *(undefined2 *)((long)param_1 + uVar6);
      if ((((int)(uVar9 + 1) < (int)param_3) &&
          (*(undefined2 *)((long)param_2 + uVar6 + 2) = *(undefined2 *)((long)param_1 + uVar6 + 2),
          (int)(uVar9 + 2) < (int)param_3)) &&
         ((*(undefined2 *)((long)param_2 + uVar6 + 4) = *(undefined2 *)((long)param_1 + uVar6 + 4),
          (int)(uVar9 + 3) < (int)param_3 &&
          (((*(undefined2 *)((long)param_2 + uVar6 + 6) = *(undefined2 *)((long)param_1 + uVar6 + 6)
            , (int)(uVar9 + 4) < (int)param_3 &&
            (*(undefined2 *)((long)param_2 + uVar6 + 8) = *(undefined2 *)((long)param_1 + uVar6 + 8)
            , (int)(uVar9 + 5) < (int)param_3)) &&
           (*(undefined2 *)((long)param_2 + uVar6 + 10) =
                 *(undefined2 *)((long)param_1 + uVar6 + 10), (int)(uVar9 + 6) < (int)param_3))))))
      {
        *(undefined2 *)((long)param_2 + uVar6 + 0xc) = *(undefined2 *)((long)param_1 + uVar6 + 0xc);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304344 (492 bytes) name=FUN_00304344

void FUN_00304344(short *param_1,int *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int *piVar5;
  uint uVar6;
  uint uVar7;
  short *psVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = (int)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (int)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (int)param_1[1];
      if (((uVar4 != 2) && (param_2[2] = (int)param_1[2], uVar4 != 3)) &&
         ((param_2[3] = (int)param_1[3], uVar4 != 4 &&
          ((param_2[4] = (int)param_1[4], uVar4 != 5 && (param_2[5] = (int)param_1[5], uVar4 != 6)))
          ))) {
        param_2[6] = (int)param_1[6];
        if (uVar4 == 8) {
          param_2[7] = (int)param_1[7];
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      piVar5 = param_2 + uVar4;
      psVar8 = param_1 + uVar4;
      do {
        uVar10 = *(undefined8 *)(psVar8 + 4);
        uVar9 = *(undefined8 *)psVar8;
        uVar7 = uVar7 + 1;
        *(ulong *)(piVar5 + 2) =
             CONCAT44((int)(short)((ulong)uVar9 >> 0x30),(int)(short)((ulong)uVar9 >> 0x20));
        *(ulong *)piVar5 = CONCAT44((int)(short)((ulong)uVar9 >> 0x10),(int)(short)uVar9);
        *(ulong *)(piVar5 + 6) =
             CONCAT44((int)(short)((ulong)uVar10 >> 0x30),(int)(short)((ulong)uVar10 >> 0x20));
        *(ulong *)(piVar5 + 4) = CONCAT44((int)(short)((ulong)uVar10 >> 0x10),(int)(short)uVar10);
        piVar5 = piVar5 + 8;
        psVar8 = psVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (int)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (int)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar6 + 3;
        param_2[iVar2] = (int)param_1[iVar2];
        if (iVar3 < (int)param_3) {
          iVar2 = uVar6 + 4;
          param_2[iVar3] = (int)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar6 + 5;
            param_2[iVar2] = (int)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar6 + 6;
              param_2[iVar3] = (int)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (int)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304530 (564 bytes) name=FUN_00304530

void FUN_00304530(short *param_1,float *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  short *psVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  if (param_3 == 1) {
    *param_2 = (float)(int)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (float)(int)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (float)(int)param_1[1];
      if (((uVar4 != 2) && (param_2[2] = (float)(int)param_1[2], uVar4 != 3)) &&
         ((param_2[3] = (float)(int)param_1[3], uVar4 != 4 &&
          ((param_2[4] = (float)(int)param_1[4], uVar4 != 5 &&
           (param_2[5] = (float)(int)param_1[5], uVar4 != 6)))))) {
        param_2[6] = (float)(int)param_1[6];
        if (uVar4 == 8) {
          param_2[7] = (float)(int)param_1[7];
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      pfVar5 = param_2 + uVar4;
      psVar8 = param_1 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar10._0_4_ = (int)*psVar8;
        auVar10._4_4_ = (int)psVar8[1];
        auVar10._8_4_ = (int)psVar8[2];
        auVar10._12_4_ = (int)psVar8[3];
        auVar9._0_4_ = (int)psVar8[4];
        auVar9._4_4_ = (int)psVar8[5];
        auVar9._8_4_ = (int)psVar8[6];
        auVar9._12_4_ = (int)psVar8[7];
        auVar10 = NEON_scvtf(auVar10,4);
        auVar9 = NEON_scvtf(auVar9,4);
        *(long *)(pfVar5 + 2) = auVar10._8_8_;
        *(long *)pfVar5 = auVar10._0_8_;
        *(long *)(pfVar5 + 6) = auVar9._8_8_;
        *(long *)(pfVar5 + 4) = auVar9._0_8_;
        pfVar5 = pfVar5 + 8;
        psVar8 = psVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (float)(int)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (float)(int)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar6 + 3;
        param_2[iVar2] = (float)(int)param_1[iVar2];
        if (iVar3 < (int)param_3) {
          iVar2 = uVar6 + 4;
          param_2[iVar3] = (float)(int)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar6 + 5;
            param_2[iVar2] = (float)(int)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar6 + 6;
              param_2[iVar3] = (float)(int)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (float)(int)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304764 (596 bytes) name=FUN_00304764

void FUN_00304764(short *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  short *psVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  
  if (param_3 == 1) {
    *param_2 = (double)(int)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = (uint)((ulong)param_2 >> 3) & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (double)(int)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (double)(int)param_1[1];
      if (((uVar4 != 2) && (param_2[2] = (double)(int)param_1[2], uVar4 != 3)) &&
         ((param_2[3] = (double)(int)param_1[3], uVar4 != 4 &&
          ((param_2[4] = (double)(int)param_1[4], uVar4 != 5 &&
           (param_2[5] = (double)(int)param_1[5], uVar4 != 6)))))) {
        param_2[6] = (double)(int)param_1[6];
        if (uVar4 == 8) {
          param_2[7] = (double)(int)param_1[7];
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      pdVar5 = param_2 + uVar4;
      psVar8 = param_1 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar12._0_8_ = (long)(int)*psVar8;
        auVar12._8_8_ = (long)(int)psVar8[1];
        auVar10._0_8_ = (long)(int)psVar8[2];
        auVar10._8_8_ = (long)(int)psVar8[3];
        auVar11._0_8_ = (long)(int)psVar8[4];
        auVar11._8_8_ = (long)(int)psVar8[5];
        auVar9._0_8_ = (long)(int)psVar8[6];
        auVar9._8_8_ = (long)(int)psVar8[7];
        auVar12 = NEON_scvtf(auVar12,8);
        pdVar5[1] = auVar12._8_8_;
        *pdVar5 = auVar12._0_8_;
        auVar10 = NEON_scvtf(auVar10,8);
        auVar11 = NEON_scvtf(auVar11,8);
        auVar9 = NEON_scvtf(auVar9,8);
        pdVar5[3] = auVar10._8_8_;
        pdVar5[2] = auVar10._0_8_;
        pdVar5[5] = auVar11._8_8_;
        pdVar5[4] = auVar11._0_8_;
        pdVar5[7] = auVar9._8_8_;
        pdVar5[6] = auVar9._0_8_;
        pdVar5 = pdVar5 + 8;
        psVar8 = psVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (double)(int)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (double)(int)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        iVar3 = uVar6 + 3;
        param_2[iVar2] = (double)(int)param_1[iVar2];
        if (iVar3 < (int)param_3) {
          iVar2 = uVar6 + 4;
          param_2[iVar3] = (double)(int)param_1[iVar3];
          if (iVar2 < (int)param_3) {
            iVar3 = uVar6 + 5;
            param_2[iVar2] = (double)(int)param_1[iVar2];
            if (iVar3 < (int)param_3) {
              iVar2 = uVar6 + 6;
              param_2[iVar3] = (double)(int)param_1[iVar3];
              if (iVar2 < (int)param_3) {
                param_2[iVar2] = (double)(int)param_1[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 003049b8 (312 bytes) name=FUN_003049b8

void FUN_003049b8(undefined4 *param_1,undefined4 *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 *puVar4;
  long lVar5;
  ulong uVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 4 && param_1 < param_2 + 4) || (param_3 < 0xc)) {
      lVar5 = 0;
      do {
        param_2[lVar5] = param_1[lVar5];
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
    uVar2 = param_3;
    if (uVar9 < param_3) {
      uVar2 = uVar9;
    }
    uVar9 = uVar2;
    if ((uVar2 != 0) && (*param_2 = *param_1, uVar2 != 1)) {
      param_2[1] = param_1[1];
      if (uVar2 == 3) {
        param_2[2] = param_1[2];
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_3 - uVar2) - 4 >> 2) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 4;
    puVar4 = (undefined8 *)(param_2 + uVar2);
    puVar8 = (undefined8 *)(param_1 + uVar2);
    do {
      uVar10 = *puVar8;
      uVar7 = uVar7 + 1;
      puVar4[1] = puVar8[1];
      *puVar4 = uVar10;
      puVar4 = puVar4 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar7 < uVar1);
    uVar9 = uVar9 + iVar3;
    if (param_3 - uVar2 != iVar3) {
      uVar6 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2;
      *(undefined4 *)((long)param_2 + uVar6) = *(undefined4 *)((long)param_1 + uVar6);
      if (((int)(uVar9 + 1) < (int)param_3) &&
         (*(undefined4 *)((long)param_2 + uVar6 + 4) = *(undefined4 *)((long)param_1 + uVar6 + 4),
         (int)(uVar9 + 2) < (int)param_3)) {
        *(undefined4 *)((long)param_2 + uVar6 + 8) = *(undefined4 *)((long)param_1 + uVar6 + 8);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304af0 (348 bytes) name=FUN_00304af0

void FUN_00304af0(int *param_1,float *param_2,uint param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  float *pfVar5;
  ulong uVar6;
  uint uVar7;
  undefined1 (*pauVar8) [16];
  undefined1 auVar9 [16];
  
  if (param_3 == 1) {
    *param_2 = (float)*param_1;
    return;
  }
  if ((int)param_3 < 1) {
    return;
  }
  uVar3 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
  if (param_3 < uVar3) {
    uVar3 = param_3;
  }
  uVar4 = (ulong)uVar3;
  if ((int)param_3 < 5) {
    uVar4 = (ulong)param_3;
  }
  else {
    uVar6 = 0;
    if (uVar3 == 0) goto LAB_00304b74;
  }
  uVar3 = (uint)uVar4;
  *param_2 = (float)*param_1;
  uVar6 = uVar4;
  if (uVar3 != 1) {
    param_2[1] = (float)param_1[1];
    if (uVar3 != 2) {
      param_2[2] = (float)param_1[2];
      if (uVar3 == 4) {
        param_2[3] = (float)param_1[3];
      }
      else {
        uVar6 = 3;
      }
    }
    if (param_3 == uVar3) {
      return;
    }
  }
LAB_00304b74:
  iVar2 = param_3 - (int)uVar4;
  uVar3 = (iVar2 - 4U >> 2) + 1;
  iVar1 = uVar3 * 4;
  if (2 < (param_3 - 1) - (int)uVar4) {
    uVar7 = 0;
    pfVar5 = param_2 + uVar4;
    pauVar8 = (undefined1 (*) [16])(param_1 + uVar4);
    do {
      uVar7 = uVar7 + 1;
      auVar9 = NEON_scvtf(*pauVar8,4);
      *(long *)(pfVar5 + 2) = auVar9._8_8_;
      *(long *)pfVar5 = auVar9._0_8_;
      pfVar5 = pfVar5 + 4;
      pauVar8 = pauVar8 + 1;
    } while (uVar7 < uVar3);
    uVar6 = (ulong)(uint)((int)uVar6 + iVar1);
    if (iVar2 == iVar1) {
      return;
    }
  }
  uVar4 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
  *(float *)((long)param_2 + uVar4) = (float)*(int *)((long)param_1 + uVar4);
  if (((int)uVar6 + 1 < (int)param_3) &&
     (*(float *)((long)param_2 + uVar4 + 4) = (float)*(int *)((long)param_1 + uVar4 + 4),
     (int)uVar6 + 2 < (int)param_3)) {
    *(float *)((long)param_2 + uVar4 + 8) = (float)*(int *)((long)param_1 + uVar4 + 8);
  }
  return;
}


==================================================================

### FUNC 00304c4c (364 bytes) name=FUN_00304c4c

void FUN_00304c4c(int *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  int *piVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  if (param_3 == 1) {
    *param_2 = (double)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = (uint)((ulong)param_2 >> 3) & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 5) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (double)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (double)param_1[1];
      if (uVar4 != 2) {
        param_2[2] = (double)param_1[2];
        if (uVar4 == 4) {
          param_2[3] = (double)param_1[3];
        }
        else {
          uVar6 = 3;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      pdVar5 = param_2 + uVar4;
      piVar8 = param_1 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar10._0_8_ = (long)*piVar8;
        auVar10._8_8_ = (long)piVar8[1];
        auVar9._0_8_ = (long)piVar8[2];
        auVar9._8_8_ = (long)piVar8[3];
        auVar10 = NEON_scvtf(auVar10,8);
        pdVar5[1] = auVar10._8_8_;
        *pdVar5 = auVar10._0_8_;
        auVar9 = NEON_scvtf(auVar9,8);
        pdVar5[3] = auVar9._8_8_;
        pdVar5[2] = auVar9._0_8_;
        pdVar5 = pdVar5 + 4;
        piVar8 = piVar8 + 4;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (double)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (double)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        param_2[iVar2] = (double)param_1[iVar2];
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304db8 (312 bytes) name=FUN_00304db8

void FUN_00304db8(undefined4 *param_1,undefined4 *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 *puVar4;
  long lVar5;
  ulong uVar6;
  uint uVar7;
  undefined8 *puVar8;
  uint uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 4 && param_1 < param_2 + 4) || (param_3 < 0xc)) {
      lVar5 = 0;
      do {
        param_2[lVar5] = param_1[lVar5];
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
    uVar2 = param_3;
    if (uVar9 < param_3) {
      uVar2 = uVar9;
    }
    uVar9 = uVar2;
    if ((uVar2 != 0) && (*param_2 = *param_1, uVar2 != 1)) {
      param_2[1] = param_1[1];
      if (uVar2 == 3) {
        param_2[2] = param_1[2];
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_3 - uVar2) - 4 >> 2) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 4;
    puVar4 = (undefined8 *)(param_2 + uVar2);
    puVar8 = (undefined8 *)(param_1 + uVar2);
    do {
      uVar10 = *puVar8;
      uVar7 = uVar7 + 1;
      puVar4[1] = puVar8[1];
      *puVar4 = uVar10;
      puVar4 = puVar4 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar7 < uVar1);
    uVar9 = uVar9 + iVar3;
    if (param_3 - uVar2 != iVar3) {
      uVar6 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar9 << 2;
      *(undefined4 *)((long)param_2 + uVar6) = *(undefined4 *)((long)param_1 + uVar6);
      if (((int)(uVar9 + 1) < (int)param_3) &&
         (*(undefined4 *)((long)param_2 + uVar6 + 4) = *(undefined4 *)((long)param_1 + uVar6 + 4),
         (int)(uVar9 + 2) < (int)param_3)) {
        *(undefined4 *)((long)param_2 + uVar6 + 8) = *(undefined4 *)((long)param_1 + uVar6 + 8);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00304ef0 (356 bytes) name=FUN_00304ef0

void FUN_00304ef0(float *param_1,double *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  float *pfVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  
  if (param_3 == 1) {
    *param_2 = (double)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar4 = (uint)((ulong)param_2 >> 3) & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 5) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_2 = (double)*param_1, uVar6 = uVar4, uVar4 != 1)) {
      param_2[1] = (double)param_1[1];
      if (uVar4 != 2) {
        param_2[2] = (double)param_1[2];
        if (uVar4 == 4) {
          param_2[3] = (double)param_1[3];
        }
        else {
          uVar6 = 3;
        }
      }
      if (param_3 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar4) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_3 - 1) - uVar4) {
      uVar7 = 0;
      pdVar5 = param_2 + uVar4;
      pfVar8 = param_1 + uVar4;
      do {
        uVar10 = *(undefined8 *)(pfVar8 + 2);
        uVar9 = *(undefined8 *)pfVar8;
        uVar7 = uVar7 + 1;
        pdVar5[1] = (double)(float)((ulong)uVar9 >> 0x20);
        *pdVar5 = (double)(float)uVar9;
        pdVar5[3] = (double)(float)((ulong)uVar10 >> 0x20);
        pdVar5[2] = (double)(float)uVar10;
        pdVar5 = pdVar5 + 4;
        pfVar8 = pfVar8 + 4;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_3 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_2[(int)uVar6] = (double)param_1[(int)uVar6];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar6 + 2;
      param_2[iVar3] = (double)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        param_2[iVar2] = (double)param_1[iVar2];
      }
    }
  }
  return;
}


==================================================================

### FUNC 00305054 (356 bytes) name=FUN_00305054

void FUN_00305054(double *param_1,float *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  double dVar4;
  uint uVar5;
  float *pfVar6;
  uint uVar7;
  double *pdVar8;
  uint uVar9;
  double dVar10;
  
  if (param_3 == 1) {
    *param_2 = (float)*param_1;
    return;
  }
  if (0 < (int)param_3) {
    uVar5 = (uint)((ulong)param_1 >> 3) & 1;
    if (param_3 < uVar5) {
      uVar5 = param_3;
    }
    uVar1 = param_3;
    if ((((int)param_3 < 5) || (uVar1 = uVar5, uVar7 = 0, uVar5 != 0)) &&
       (uVar5 = uVar1, *param_2 = (float)*param_1, uVar7 = uVar5, uVar5 != 1)) {
      param_2[1] = (float)param_1[1];
      if (uVar5 != 2) {
        param_2[2] = (float)param_1[2];
        if (uVar5 == 4) {
          param_2[3] = (float)param_1[3];
        }
        else {
          uVar7 = 3;
        }
      }
      if (param_3 == uVar5) {
        return;
      }
    }
    uVar1 = ((param_3 - uVar5) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_3 - 1) - uVar5) {
      uVar9 = 0;
      pfVar6 = param_2 + uVar5;
      pdVar8 = param_1 + uVar5;
      do {
        dVar10 = pdVar8[1];
        dVar4 = *pdVar8;
        uVar9 = uVar9 + 1;
        *(ulong *)(pfVar6 + 2) = CONCAT44((float)pdVar8[3],(float)pdVar8[2]);
        *(ulong *)pfVar6 = CONCAT44((float)dVar10,(float)dVar4);
        pfVar6 = pfVar6 + 4;
        pdVar8 = pdVar8 + 4;
      } while (uVar9 < uVar1);
      uVar7 = uVar7 + iVar3;
      if (param_3 - uVar5 == iVar3) {
        return;
      }
    }
    iVar3 = uVar7 + 1;
    param_2[(int)uVar7] = (float)param_1[(int)uVar7];
    if (iVar3 < (int)param_3) {
      iVar2 = uVar7 + 2;
      param_2[iVar3] = (float)param_1[iVar3];
      if (iVar2 < (int)param_3) {
        param_2[iVar2] = (float)param_1[iVar2];
      }
    }
  }
  return;
}


==================================================================

### FUNC 003051b8 (216 bytes) name=FUN_003051b8

void FUN_003051b8(undefined8 *param_1,undefined8 *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  ulong uVar4;
  undefined8 *puVar5;
  long lVar6;
  uint uVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  
  if (param_3 == 1) {
    *param_2 = *param_1;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 2 && param_1 < param_2 + 2) || (param_3 < 0xe)) {
      lVar6 = 0;
      do {
        param_2[lVar6] = param_1[lVar6];
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_3);
      return;
    }
    uVar1 = (uint)((ulong)param_1 >> 3) & 1;
    uVar2 = param_3;
    if (uVar1 < param_3) {
      uVar2 = uVar1;
    }
    if (uVar2 != 0) {
      *param_2 = *param_1;
    }
    uVar1 = ((param_3 - uVar2) - 2 >> 1) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 2;
    puVar5 = param_2 + uVar2;
    puVar8 = param_1 + uVar2;
    do {
      uVar9 = *puVar8;
      uVar7 = uVar7 + 1;
      puVar5[1] = puVar8[1];
      *puVar5 = uVar9;
      puVar5 = puVar5 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar7 < uVar1);
    uVar1 = (uint)(uVar2 != 0) + iVar3;
    if (param_3 - uVar2 != iVar3) {
      uVar4 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      *(undefined8 *)((long)param_2 + uVar4) = *(undefined8 *)((long)param_1 + uVar4);
    }
  }
  return;
}


==================================================================

### FUNC 00305290 (1076 bytes) name=FUN_00305290

void FUN_00305290(double param_1,double param_2,float *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  float *pfVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  byte *pbVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)*(byte *)param_3);
    return;
  }
                    /* try { // try from 00305298 to 004052b3 has its CatchHandler @ 00303fe8 */
  if (0 < (int)param_5) {
    if ((param_3 < param_4 + (int)param_5 && param_4 < (float *)((long)param_3 + (long)(int)param_5)
        ) || (param_5 < 0x13)) {
      lVar7 = 0;
      do {
        param_4[lVar7] = (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + lVar7));
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_5);
      return;
    }
    uVar9 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
    uVar4 = param_5;
    if (uVar9 < param_5) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if ((uVar4 != 0) &&
       (*param_4 = (float)(param_2 + param_1 * (double)*(byte *)param_3), uVar4 != 1)) {
      param_4[1] = (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + 1));
      if (uVar4 == 3) {
        param_4[2] = (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + 2));
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_5 - uVar4) - 0x10 >> 4) + 1;
    uVar8 = 0;
    iVar5 = uVar1 * 0x10;
    pfVar6 = param_4 + uVar4;
    pbVar10 = (byte *)((long)param_3 + (ulong)uVar4);
    do {
      uVar8 = uVar8 + 1;
      auVar15._0_8_ = (long)(int)(CONCAT12(pbVar10[1],(ushort)*pbVar10) & 0xffff);
      auVar15._8_8_ = (long)(int)(uint)pbVar10[1];
      auVar14._0_8_ = (long)(int)(uint)pbVar10[2];
      auVar14._8_8_ = (long)(int)(uint)pbVar10[3];
      auVar18._0_8_ = (long)(int)(uint)pbVar10[4];
      auVar18._8_8_ = (long)(int)(uint)pbVar10[5];
      auVar19._0_8_ = (long)(int)(CONCAT12(pbVar10[9],(ushort)pbVar10[8]) & 0xffff);
      auVar19._8_8_ = (long)(int)(uint)pbVar10[9];
      auVar16 = NEON_scvtf(auVar15,8);
      auVar14 = NEON_scvtf(auVar14,8);
      auVar18 = NEON_scvtf(auVar18,8);
      auVar17._0_8_ = (long)(int)(uint)pbVar10[0xc];
      auVar17._8_8_ = (long)(int)(uint)pbVar10[0xd];
      auVar19 = NEON_scvtf(auVar19,8);
      auVar12._0_8_ = (long)(int)(uint)pbVar10[6];
      auVar12._8_8_ = (long)(int)(uint)pbVar10[7];
      auVar13._0_8_ = (long)(int)(uint)pbVar10[10];
      auVar13._8_8_ = (long)(int)(uint)pbVar10[0xb];
      auVar12 = NEON_scvtf(auVar12,8);
      auVar15 = NEON_scvtf(auVar17,8);
      auVar13 = NEON_scvtf(auVar13,8);
      auVar11._0_8_ = (long)(int)(uint)pbVar10[0xe];
      auVar11._8_8_ = (long)(int)(uint)pbVar10[0xf];
      auVar11 = NEON_scvtf(auVar11,8);
      *(ulong *)(pfVar6 + 2) =
           CONCAT44((float)(param_2 + auVar14._8_8_ * param_1),
                    (float)(param_2 + auVar14._0_8_ * param_1));
      *(ulong *)pfVar6 =
           CONCAT44((float)(param_2 + auVar16._8_8_ * param_1),
                    (float)(param_2 + auVar16._0_8_ * param_1));
      *(ulong *)(pfVar6 + 6) =
           CONCAT44((float)(param_2 + auVar12._8_8_ * param_1),
                    (float)(param_2 + auVar12._0_8_ * param_1));
      *(ulong *)(pfVar6 + 4) =
           CONCAT44((float)(param_2 + auVar18._8_8_ * param_1),
                    (float)(param_2 + auVar18._0_8_ * param_1));
      *(ulong *)(pfVar6 + 10) =
           CONCAT44((float)(param_2 + auVar13._8_8_ * param_1),
                    (float)(param_2 + auVar13._0_8_ * param_1));
      *(ulong *)(pfVar6 + 8) =
           CONCAT44((float)(param_2 + auVar19._8_8_ * param_1),
                    (float)(param_2 + auVar19._0_8_ * param_1));
      *(ulong *)(pfVar6 + 0xe) =
           CONCAT44((float)(param_2 + auVar11._8_8_ * param_1),
                    (float)(param_2 + auVar11._0_8_ * param_1));
      *(ulong *)(pfVar6 + 0xc) =
           CONCAT44((float)(param_2 + auVar15._8_8_ * param_1),
                    (float)(param_2 + auVar15._0_8_ * param_1));
      pfVar6 = pfVar6 + 0x10;
      pbVar10 = pbVar10 + 0x10;
    } while (uVar8 < uVar1);
    iVar3 = uVar9 + iVar5;
    if (param_5 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_4[iVar3] = (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar3));
      if (iVar5 < (int)param_5) {
        iVar2 = iVar3 + 2;
        param_4[iVar5] = (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5))
        ;
        if (iVar2 < (int)param_5) {
          iVar5 = iVar3 + 3;
          param_4[iVar2] =
               (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
          if (iVar5 < (int)param_5) {
            iVar2 = iVar3 + 4;
            param_4[iVar5] =
                 (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5));
            if (iVar2 < (int)param_5) {
              iVar5 = iVar3 + 5;
              param_4[iVar2] =
                   (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
              if (iVar5 < (int)param_5) {
                iVar2 = iVar3 + 6;
                param_4[iVar5] =
                     (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5));
                if (iVar2 < (int)param_5) {
                  iVar5 = iVar3 + 7;
                  param_4[iVar2] =
                       (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
                  if (iVar5 < (int)param_5) {
                    iVar2 = iVar3 + 8;
                    param_4[iVar5] =
                         (float)(param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5))
                    ;
                    if (iVar2 < (int)param_5) {
                      iVar5 = iVar3 + 9;
                      param_4[iVar2] =
                           (float)(param_2 +
                                  param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
                      if (iVar5 < (int)param_5) {
                        iVar2 = iVar3 + 10;
                        param_4[iVar5] =
                             (float)(param_2 +
                                    param_1 * (double)*(byte *)((long)param_3 + (long)iVar5));
                        if (iVar2 < (int)param_5) {
                          iVar5 = iVar3 + 0xb;
                          param_4[iVar2] =
                               (float)(param_2 +
                                      param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
                          if (iVar5 < (int)param_5) {
                            iVar2 = iVar3 + 0xc;
                            param_4[iVar5] =
                                 (float)(param_2 +
                                        param_1 * (double)*(byte *)((long)param_3 + (long)iVar5));
                            if (iVar2 < (int)param_5) {
                              iVar5 = iVar3 + 0xd;
                              param_4[iVar2] =
                                   (float)(param_2 +
                                          param_1 * (double)*(byte *)((long)param_3 + (long)iVar2));
                              if (iVar5 < (int)param_5) {
                                iVar3 = iVar3 + 0xe;
                                param_4[iVar5] =
                                     (float)(param_2 +
                                            param_1 * (double)*(byte *)((long)param_3 + (long)iVar5)
                                            );
                                if (iVar3 < (int)param_5) {
                                  param_4[iVar3] =
                                       (float)(param_2 +
                                              param_1 * (double)*(byte *)((long)param_3 +
                                                                         (long)iVar3));
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 003056c4 (932 bytes) name=FUN_003056c4

void FUN_003056c4(double param_1,double param_2,double *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  byte bVar6;
  byte bVar7;
  byte bVar8;
  byte bVar9;
  double *pdVar10;
  long lVar11;
  uint uVar12;
  byte *pbVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)*(byte *)param_3;
    return;
  }
  if (0 < (int)param_5) {
    if ((param_3 < param_4 + (int)param_5 &&
         param_4 < (double *)((long)param_3 + (long)(int)param_5)) || (param_5 < 0x14)) {
      lVar11 = 0;
      do {
        param_4[lVar11] = param_2 + param_1 * (double)*(byte *)((long)param_3 + lVar11);
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < (int)param_5);
      return;
    }
    uVar1 = (uint)((ulong)param_4 >> 3) & 1;
    uVar4 = param_5;
    if (uVar1 < param_5) {
      uVar4 = uVar1;
    }
    if (uVar4 != 0) {
      *param_4 = param_2 + param_1 * (double)*(byte *)param_3;
    }
    uVar1 = ((param_5 - uVar4) - 0x10 >> 4) + 1;
    uVar12 = 0;
    iVar5 = uVar1 * 0x10;
    pdVar10 = param_4 + uVar4;
    pbVar13 = (byte *)((long)param_3 + (ulong)uVar4);
    do {
      bVar6 = pbVar13[0xc];
      bVar7 = pbVar13[0xd];
      bVar8 = pbVar13[0xe];
      bVar9 = pbVar13[0xf];
      uVar12 = uVar12 + 1;
      auVar20._0_8_ = (long)(int)(CONCAT12(pbVar13[1],(ushort)*pbVar13) & 0xffff);
      auVar20._8_8_ = (long)(int)(uint)pbVar13[1];
      auVar21._0_8_ = (long)(int)(uint)pbVar13[4];
      auVar21._8_8_ = (long)(int)(uint)pbVar13[5];
      auVar14._0_8_ = (long)(int)(uint)pbVar13[6];
      auVar14._8_8_ = (long)(int)(uint)pbVar13[7];
      auVar16._0_8_ = (long)(int)(uint)pbVar13[2];
      auVar16._8_8_ = (long)(int)(uint)pbVar13[3];
      auVar18 = NEON_scvtf(auVar20,8);
      auVar21 = NEON_scvtf(auVar21,8);
      auVar19._0_8_ = (long)(int)(CONCAT12(pbVar13[9],(ushort)pbVar13[8]) & 0xffff);
      auVar19._8_8_ = (long)(int)(uint)pbVar13[9];
      auVar14 = NEON_scvtf(auVar14,8);
      auVar15._0_8_ = (long)(int)(uint)pbVar13[10];
      auVar15._8_8_ = (long)(int)(uint)pbVar13[0xb];
      auVar16 = NEON_scvtf(auVar16,8);
      pdVar10[1] = param_2 + auVar18._8_8_ * param_1;
      *pdVar10 = param_2 + auVar18._0_8_ * param_1;
      auVar20 = NEON_scvtf(auVar19,8);
      auVar17._0_8_ = (long)(int)(uint)bVar6;
      auVar17._8_8_ = (long)(int)(uint)bVar7;
      auVar15 = NEON_scvtf(auVar15,8);
      auVar18._0_8_ = (long)(int)(uint)bVar8;
      auVar18._8_8_ = (long)(int)(uint)bVar9;
      pdVar10[3] = param_2 + auVar16._8_8_ * param_1;
      pdVar10[2] = param_2 + auVar16._0_8_ * param_1;
      auVar18 = NEON_scvtf(auVar18,8);
      pdVar10[5] = param_2 + auVar21._8_8_ * param_1;
      pdVar10[4] = param_2 + auVar21._0_8_ * param_1;
      pdVar10[7] = param_2 + auVar14._8_8_ * param_1;
      pdVar10[6] = param_2 + auVar14._0_8_ * param_1;
      auVar14 = NEON_scvtf(auVar17,8);
      pdVar10[9] = param_2 + auVar20._8_8_ * param_1;
      pdVar10[8] = param_2 + auVar20._0_8_ * param_1;
      pdVar10[0xb] = param_2 + auVar15._8_8_ * param_1;
      pdVar10[10] = param_2 + auVar15._0_8_ * param_1;
      pdVar10[0xd] = param_2 + auVar14._8_8_ * param_1;
      pdVar10[0xc] = param_2 + auVar14._0_8_ * param_1;
      pdVar10[0xf] = param_2 + auVar18._8_8_ * param_1;
      pdVar10[0xe] = param_2 + auVar18._0_8_ * param_1;
      pdVar10 = pdVar10 + 0x10;
      pbVar13 = pbVar13 + 0x10;
    } while (uVar12 < uVar1);
    iVar3 = (uint)(uVar4 != 0) + iVar5;
    if (param_5 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_4[iVar3] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar3);
      if (iVar5 < (int)param_5) {
        iVar2 = iVar3 + 2;
        param_4[iVar5] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
        if (iVar2 < (int)param_5) {
          iVar5 = iVar3 + 3;
          param_4[iVar2] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2);
          if (iVar5 < (int)param_5) {
            iVar2 = iVar3 + 4;
            param_4[iVar5] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
            if (iVar2 < (int)param_5) {
              iVar5 = iVar3 + 5;
              param_4[iVar2] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2);
              if (iVar5 < (int)param_5) {
                iVar2 = iVar3 + 6;
                param_4[iVar5] = param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
                if (iVar2 < (int)param_5) {
                  iVar5 = iVar3 + 7;
                  param_4[iVar2] =
                       param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2);
                  if (iVar5 < (int)param_5) {
                    iVar2 = iVar3 + 8;
                    param_4[iVar5] =
                         param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
                    if (iVar2 < (int)param_5) {
                      iVar5 = iVar3 + 9;
                      param_4[iVar2] =
                           param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2);
                      if (iVar5 < (int)param_5) {
                        iVar2 = iVar3 + 10;
                        param_4[iVar5] =
                             param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
                        if (iVar2 < (int)param_5) {
                          iVar5 = iVar3 + 0xb;
                          param_4[iVar2] =
                               param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2);
                          if (iVar5 < (int)param_5) {
                            iVar2 = iVar3 + 0xc;
                            param_4[iVar5] =
                                 param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar5);
                            if (iVar2 < (int)param_5) {
                              iVar5 = iVar3 + 0xd;
                              param_4[iVar2] =
                                   param_2 + param_1 * (double)*(byte *)((long)param_3 + (long)iVar2
                                                                        );
                              if (iVar5 < (int)param_5) {
                                iVar3 = iVar3 + 0xe;
                                param_4[iVar5] =
                                     param_2 + param_1 * (double)*(byte *)((long)param_3 +
                                                                          (long)iVar5);
                                if (iVar3 < (int)param_5) {
                                  param_4[iVar3] =
                                       param_2 + param_1 * (double)*(byte *)((long)param_3 +
                                                                            (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00305a68 (1076 bytes) name=FUN_00305a68

void FUN_00305a68(double param_1,double param_2,float *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  float *pfVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  char *pcVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)(int)*(char *)param_3);
    return;
  }
  if (0 < (int)param_5) {
    if ((param_3 < param_4 + (int)param_5 && param_4 < (float *)((long)param_3 + (long)(int)param_5)
        ) || (param_5 < 0x13)) {
      lVar7 = 0;
      do {
        param_4[lVar7] = (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + lVar7));
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_5);
      return;
    }
    uVar9 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
    uVar4 = param_5;
    if (uVar9 < param_5) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if ((uVar4 != 0) &&
       (*param_4 = (float)(param_2 + param_1 * (double)(int)*(char *)param_3), uVar4 != 1)) {
      param_4[1] = (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + 1));
      if (uVar4 == 3) {
        param_4[2] = (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + 2));
      }
      else {
        uVar9 = 2;
      }
    }
    uVar1 = ((param_5 - uVar4) - 0x10 >> 4) + 1;
    uVar8 = 0;
    iVar5 = uVar1 * 0x10;
    pfVar6 = param_4 + uVar4;
    pcVar10 = (char *)((long)param_3 + (ulong)uVar4);
    do {
      uVar8 = uVar8 + 1;
      auVar15._0_8_ = (long)(int)(short)*pcVar10;
      auVar15._8_8_ = (long)(int)(short)pcVar10[1];
      auVar14._0_8_ = (long)(int)(short)pcVar10[2];
      auVar14._8_8_ = (long)(int)(short)pcVar10[3];
      auVar18._0_8_ = (long)(int)(short)pcVar10[4];
      auVar18._8_8_ = (long)(int)(short)pcVar10[5];
      auVar19._0_8_ = (long)(int)(short)pcVar10[8];
      auVar19._8_8_ = (long)(int)(short)pcVar10[9];
      auVar16 = NEON_scvtf(auVar15,8);
      auVar14 = NEON_scvtf(auVar14,8);
      auVar18 = NEON_scvtf(auVar18,8);
      auVar17._0_8_ = (long)(int)(short)pcVar10[0xc];
      auVar17._8_8_ = (long)(int)(short)pcVar10[0xd];
      auVar19 = NEON_scvtf(auVar19,8);
      auVar12._0_8_ = (long)(int)(short)pcVar10[6];
      auVar12._8_8_ = (long)(int)(short)pcVar10[7];
      auVar13._0_8_ = (long)(int)(short)pcVar10[10];
      auVar13._8_8_ = (long)(int)(short)pcVar10[0xb];
      auVar12 = NEON_scvtf(auVar12,8);
      auVar15 = NEON_scvtf(auVar17,8);
      auVar13 = NEON_scvtf(auVar13,8);
      auVar11._0_8_ = (long)(int)(short)pcVar10[0xe];
      auVar11._8_8_ = (long)(int)(short)pcVar10[0xf];
      auVar11 = NEON_scvtf(auVar11,8);
      *(ulong *)(pfVar6 + 2) =
           CONCAT44((float)(param_2 + auVar14._8_8_ * param_1),
                    (float)(param_2 + auVar14._0_8_ * param_1));
      *(ulong *)pfVar6 =
           CONCAT44((float)(param_2 + auVar16._8_8_ * param_1),
                    (float)(param_2 + auVar16._0_8_ * param_1));
      *(ulong *)(pfVar6 + 6) =
           CONCAT44((float)(param_2 + auVar12._8_8_ * param_1),
                    (float)(param_2 + auVar12._0_8_ * param_1));
      *(ulong *)(pfVar6 + 4) =
           CONCAT44((float)(param_2 + auVar18._8_8_ * param_1),
                    (float)(param_2 + auVar18._0_8_ * param_1));
      *(ulong *)(pfVar6 + 10) =
           CONCAT44((float)(param_2 + auVar13._8_8_ * param_1),
                    (float)(param_2 + auVar13._0_8_ * param_1));
      *(ulong *)(pfVar6 + 8) =
           CONCAT44((float)(param_2 + auVar19._8_8_ * param_1),
                    (float)(param_2 + auVar19._0_8_ * param_1));
      *(ulong *)(pfVar6 + 0xe) =
           CONCAT44((float)(param_2 + auVar11._8_8_ * param_1),
                    (float)(param_2 + auVar11._0_8_ * param_1));
      *(ulong *)(pfVar6 + 0xc) =
           CONCAT44((float)(param_2 + auVar15._8_8_ * param_1),
                    (float)(param_2 + auVar15._0_8_ * param_1));
      pfVar6 = pfVar6 + 0x10;
      pcVar10 = pcVar10 + 0x10;
    } while (uVar8 < uVar1);
    iVar3 = uVar9 + iVar5;
    if (param_5 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_4[iVar3] =
           (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar3));
      if (iVar5 < (int)param_5) {
        iVar2 = iVar3 + 2;
        param_4[iVar5] =
             (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5));
        if (iVar2 < (int)param_5) {
          iVar5 = iVar3 + 3;
          param_4[iVar2] =
               (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2));
          if (iVar5 < (int)param_5) {
            iVar2 = iVar3 + 4;
            param_4[iVar5] =
                 (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5));
            if (iVar2 < (int)param_5) {
              iVar5 = iVar3 + 5;
              param_4[iVar2] =
                   (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2));
              if (iVar5 < (int)param_5) {
                iVar2 = iVar3 + 6;
                param_4[iVar5] =
                     (float)(param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5)
                            );
                if (iVar2 < (int)param_5) {
                  iVar5 = iVar3 + 7;
                  param_4[iVar2] =
                       (float)(param_2 +
                              param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2));
                  if (iVar5 < (int)param_5) {
                    iVar2 = iVar3 + 8;
                    param_4[iVar5] =
                         (float)(param_2 +
                                param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5));
                    if (iVar2 < (int)param_5) {
                      iVar5 = iVar3 + 9;
                      param_4[iVar2] =
                           (float)(param_2 +
                                  param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2));
                      if (iVar5 < (int)param_5) {
                        iVar2 = iVar3 + 10;
                        param_4[iVar5] =
                             (float)(param_2 +
                                    param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5));
                        if (iVar2 < (int)param_5) {
                          iVar5 = iVar3 + 0xb;
                          param_4[iVar2] =
                               (float)(param_2 +
                                      param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2))
                          ;
                          if (iVar5 < (int)param_5) {
                            iVar2 = iVar3 + 0xc;
                            param_4[iVar5] =
                                 (float)(param_2 +
                                        param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5
                                                                        ));
                            if (iVar2 < (int)param_5) {
                              iVar5 = iVar3 + 0xd;
                              param_4[iVar2] =
                                   (float)(param_2 +
                                          param_1 * (double)(int)*(char *)((long)param_3 +
                                                                          (long)iVar2));
                              if (iVar5 < (int)param_5) {
                                iVar3 = iVar3 + 0xe;
                                param_4[iVar5] =
                                     (float)(param_2 +
                                            param_1 * (double)(int)*(char *)((long)param_3 +
                                                                            (long)iVar5));
                                if (iVar3 < (int)param_5) {
                                  param_4[iVar3] =
                                       (float)(param_2 +
                                              param_1 * (double)(int)*(char *)((long)param_3 +
                                                                              (long)iVar3));
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00305e9c (932 bytes) name=FUN_00305e9c

void FUN_00305e9c(double param_1,double param_2,double *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  char cVar6;
  char cVar7;
  char cVar8;
  char cVar9;
  double *pdVar10;
  long lVar11;
  uint uVar12;
  char *pcVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)(int)*(char *)param_3;
    return;
  }
  if (0 < (int)param_5) {
    if ((param_3 < param_4 + (int)param_5 &&
         param_4 < (double *)((long)param_3 + (long)(int)param_5)) || (param_5 < 0x14)) {
      lVar11 = 0;
      do {
        param_4[lVar11] = param_2 + param_1 * (double)(int)*(char *)((long)param_3 + lVar11);
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < (int)param_5);
      return;
    }
    uVar1 = (uint)((ulong)param_4 >> 3) & 1;
    uVar4 = param_5;
    if (uVar1 < param_5) {
      uVar4 = uVar1;
    }
    if (uVar4 != 0) {
      *param_4 = param_2 + param_1 * (double)(int)*(char *)param_3;
    }
    uVar1 = ((param_5 - uVar4) - 0x10 >> 4) + 1;
    uVar12 = 0;
    iVar5 = uVar1 * 0x10;
    pdVar10 = param_4 + uVar4;
    pcVar13 = (char *)((long)param_3 + (ulong)uVar4);
    do {
      cVar6 = pcVar13[0xc];
      cVar7 = pcVar13[0xd];
      cVar8 = pcVar13[0xe];
      cVar9 = pcVar13[0xf];
      uVar12 = uVar12 + 1;
      auVar20._0_8_ = (long)(int)(short)*pcVar13;
      auVar20._8_8_ = (long)(int)(short)pcVar13[1];
      auVar21._0_8_ = (long)(int)(short)pcVar13[4];
      auVar21._8_8_ = (long)(int)(short)pcVar13[5];
      auVar14._0_8_ = (long)(int)(short)pcVar13[6];
      auVar14._8_8_ = (long)(int)(short)pcVar13[7];
      auVar16._0_8_ = (long)(int)(short)pcVar13[2];
      auVar16._8_8_ = (long)(int)(short)pcVar13[3];
      auVar18 = NEON_scvtf(auVar20,8);
      auVar21 = NEON_scvtf(auVar21,8);
      auVar19._0_8_ = (long)(int)(short)pcVar13[8];
      auVar19._8_8_ = (long)(int)(short)pcVar13[9];
      auVar14 = NEON_scvtf(auVar14,8);
                    /* try { // try from 00305f98 to 00405f9b has its CatchHandler @ 00305fc0 */
      auVar15._0_8_ = (long)(int)(short)pcVar13[10];
      auVar15._8_8_ = (long)(int)(short)pcVar13[0xb];
      auVar16 = NEON_scvtf(auVar16,8);
                    /* catch() { ... } // from try @ 003040c4 with catch @ 00305fa4
                       catch() { ... } // from try @ 00305fbc with catch @ 00305fa4 */
      pdVar10[1] = param_2 + auVar18._8_8_ * param_1;
      *pdVar10 = param_2 + auVar18._0_8_ * param_1;
      auVar20 = NEON_scvtf(auVar19,8);
      auVar17._0_8_ = (long)(int)(short)cVar6;
      auVar17._8_8_ = (long)(int)(short)cVar7;
      auVar15 = NEON_scvtf(auVar15,8);
                    /* try { // try from 00305fb8 to 00405fbb has its CatchHandler @ 00303fe8 */
      auVar18._0_8_ = (long)(int)(short)cVar8;
      auVar18._8_8_ = (long)(int)(short)cVar9;
                    /* try { // try from 00305fbc to 00405fbf has its CatchHandler @ 00305fa4 */
      pdVar10[3] = param_2 + auVar16._8_8_ * param_1;
      pdVar10[2] = param_2 + auVar16._0_8_ * param_1;
                    /* catch() { ... } // from try @ 003040f8 with catch @ 00305fc0
                       catch() { ... } // from try @ 00305f98 with catch @ 00305fc0 */
      auVar18 = NEON_scvtf(auVar18,8);
      pdVar10[5] = param_2 + auVar21._8_8_ * param_1;
      pdVar10[4] = param_2 + auVar21._0_8_ * param_1;
                    /* catch() { ... } // from try @ 00306780 with catch @ 00305fd0
                       catch() { ... } // from try @ 003068a0 with catch @ 00305fd0
                       catch() { ... } // from try @ 00306a70 with catch @ 00305fd0 */
      pdVar10[7] = param_2 + auVar14._8_8_ * param_1;
      pdVar10[6] = param_2 + auVar14._0_8_ * param_1;
      auVar14 = NEON_scvtf(auVar17,8);
      pdVar10[9] = param_2 + auVar20._8_8_ * param_1;
      pdVar10[8] = param_2 + auVar20._0_8_ * param_1;
      pdVar10[0xb] = param_2 + auVar15._8_8_ * param_1;
      pdVar10[10] = param_2 + auVar15._0_8_ * param_1;
      pdVar10[0xd] = param_2 + auVar14._8_8_ * param_1;
      pdVar10[0xc] = param_2 + auVar14._0_8_ * param_1;
      pdVar10[0xf] = param_2 + auVar18._8_8_ * param_1;
      pdVar10[0xe] = param_2 + auVar18._0_8_ * param_1;
      pdVar10 = pdVar10 + 0x10;
      pcVar13 = pcVar13 + 0x10;
    } while (uVar12 < uVar1);
    iVar3 = (uint)(uVar4 != 0) + iVar5;
    if (param_5 - uVar4 != iVar5) {
      iVar5 = iVar3 + 1;
      param_4[iVar3] = param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar3);
      if (iVar5 < (int)param_5) {
        iVar2 = iVar3 + 2;
        param_4[iVar5] = param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5);
        if (iVar2 < (int)param_5) {
          iVar5 = iVar3 + 3;
          param_4[iVar2] = param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2);
          if (iVar5 < (int)param_5) {
            iVar2 = iVar3 + 4;
            param_4[iVar5] = param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5)
            ;
            if (iVar2 < (int)param_5) {
              iVar5 = iVar3 + 5;
              param_4[iVar2] =
                   param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2);
              if (iVar5 < (int)param_5) {
                iVar2 = iVar3 + 6;
                param_4[iVar5] =
                     param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5);
                if (iVar2 < (int)param_5) {
                  iVar5 = iVar3 + 7;
                  param_4[iVar2] =
                       param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2);
                  if (iVar5 < (int)param_5) {
                    iVar2 = iVar3 + 8;
                    param_4[iVar5] =
                         param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5);
                    if (iVar2 < (int)param_5) {
                      iVar5 = iVar3 + 9;
                      param_4[iVar2] =
                           param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar2);
                      if (iVar5 < (int)param_5) {
                        iVar2 = iVar3 + 10;
                        param_4[iVar5] =
                             param_2 + param_1 * (double)(int)*(char *)((long)param_3 + (long)iVar5)
                        ;
                        if (iVar2 < (int)param_5) {
                          iVar5 = iVar3 + 0xb;
                          param_4[iVar2] =
                               param_2 + param_1 * (double)(int)*(char *)((long)param_3 +
                                                                         (long)iVar2);
                          if (iVar5 < (int)param_5) {
                            iVar2 = iVar3 + 0xc;
                            param_4[iVar5] =
                                 param_2 + param_1 * (double)(int)*(char *)((long)param_3 +
                                                                           (long)iVar5);
                            if (iVar2 < (int)param_5) {
                              iVar5 = iVar3 + 0xd;
                              param_4[iVar2] =
                                   param_2 + param_1 * (double)(int)*(char *)((long)param_3 +
                                                                             (long)iVar2);
                              if (iVar5 < (int)param_5) {
                                iVar3 = iVar3 + 0xe;
                                param_4[iVar5] =
                                     param_2 + param_1 * (double)(int)*(char *)((long)param_3 +
                                                                               (long)iVar5);
                                if (iVar3 < (int)param_5) {
                                  param_4[iVar3] =
                                       param_2 + param_1 * (double)(int)*(char *)((long)param_3 +
                                                                                 (long)iVar3);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00306240 (784 bytes) name=FUN_00306240

void FUN_00306240(double param_1,double param_2,ushort *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  ushort *puVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)*param_3);
    return;
  }
  if (0 < (int)param_5) {
    uVar4 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
    if (param_5 < uVar4) {
      uVar4 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_4 = (float)(param_2 + param_1 * (double)*param_3), uVar6 = uVar4,
       uVar4 != 1)) {
      param_4[1] = (float)(param_2 + param_1 * (double)param_3[1]);
      if (((uVar4 != 2) &&
          (param_4[2] = (float)(param_2 + param_1 * (double)param_3[2]), uVar4 != 3)) &&
         ((param_4[3] = (float)(param_2 + param_1 * (double)param_3[3]), uVar4 != 4 &&
          ((param_4[4] = (float)(param_2 + param_1 * (double)param_3[4]), uVar4 != 5 &&
           (param_4[5] = (float)(param_2 + param_1 * (double)param_3[5]), uVar4 != 6)))))) {
        param_4[6] = (float)(param_2 + param_1 * (double)param_3[6]);
        if (uVar4 == 8) {
          param_4[7] = (float)(param_2 + param_1 * (double)param_3[7]);
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_5 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_5 - 1) - uVar4) {
      uVar7 = 0;
      pfVar5 = param_4 + uVar4;
      puVar8 = param_3 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar12._0_8_ = (long)(int)(uint)*puVar8;
        auVar12._8_8_ = (long)(int)(uint)puVar8[1];
        auVar10._0_8_ = (long)(int)(uint)puVar8[2];
        auVar10._8_8_ = (long)(int)(uint)puVar8[3];
        auVar9._0_8_ = (long)(int)(uint)puVar8[6];
        auVar9._8_8_ = (long)(int)(uint)puVar8[7];
        auVar12 = NEON_scvtf(auVar12,8);
        auVar10 = NEON_scvtf(auVar10,8);
        auVar9 = NEON_scvtf(auVar9,8);
        auVar11._8_8_ = (long)(int)(uint)puVar8[5];
        auVar11._0_8_ = (long)(int)(uint)puVar8[4];
        auVar11 = NEON_scvtf(auVar11,8);
        *(ulong *)(pfVar5 + 2) =
             CONCAT44((float)(param_2 + auVar10._8_8_ * param_1),
                      (float)(param_2 + auVar10._0_8_ * param_1));
        *(ulong *)pfVar5 =
             CONCAT44((float)(param_2 + auVar12._8_8_ * param_1),
                      (float)(param_2 + auVar12._0_8_ * param_1));
        *(ulong *)(pfVar5 + 6) =
             CONCAT44((float)(param_2 + auVar9._8_8_ * param_1),
                      (float)(param_2 + auVar9._0_8_ * param_1));
        *(ulong *)(pfVar5 + 4) =
             CONCAT44((float)(param_2 + auVar11._8_8_ * param_1),
                      (float)(param_2 + auVar11._0_8_ * param_1));
        pfVar5 = pfVar5 + 8;
        puVar8 = puVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_5 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_4[(int)uVar6] = (float)(param_2 + param_1 * (double)param_3[(int)uVar6]);
    if (iVar3 < (int)param_5) {
      iVar2 = uVar6 + 2;
      param_4[iVar3] = (float)(param_2 + param_1 * (double)param_3[iVar3]);
      if (iVar2 < (int)param_5) {
        iVar3 = uVar6 + 3;
        param_4[iVar2] = (float)(param_2 + param_1 * (double)param_3[iVar2]);
        if (iVar3 < (int)param_5) {
          iVar2 = uVar6 + 4;
          param_4[iVar3] = (float)(param_2 + param_1 * (double)param_3[iVar3]);
          if (iVar2 < (int)param_5) {
            iVar3 = uVar6 + 5;
            param_4[iVar2] = (float)(param_2 + param_1 * (double)param_3[iVar2]);
            if (iVar3 < (int)param_5) {
              iVar2 = uVar6 + 6;
              param_4[iVar3] = (float)(param_2 + param_1 * (double)param_3[iVar3]);
              if (iVar2 < (int)param_5) {
                param_4[iVar2] = (float)(param_2 + param_1 * (double)param_3[iVar2]);
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00306550 (704 bytes) name=FUN_00306550

void FUN_00306550(double param_1,double param_2,ushort *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  ushort uVar4;
  ushort uVar5;
  uint uVar6;
  double *pdVar7;
  uint uVar8;
  uint uVar9;
  ushort *puVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)*param_3;
    return;
  }
  if (0 < (int)param_5) {
    uVar6 = (uint)((ulong)param_4 >> 3) & 1;
    if (param_5 < uVar6) {
      uVar6 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 9) || (uVar1 = uVar6, uVar8 = 0, uVar6 != 0)) &&
       (uVar6 = uVar1, *param_4 = param_2 + param_1 * (double)*param_3, uVar8 = uVar6, uVar6 != 1))
    {
      param_4[1] = param_2 + param_1 * (double)param_3[1];
      if (((uVar6 != 2) && (param_4[2] = param_2 + param_1 * (double)param_3[2], uVar6 != 3)) &&
         ((param_4[3] = param_2 + param_1 * (double)param_3[3], uVar6 != 4 &&
          ((param_4[4] = param_2 + param_1 * (double)param_3[4], uVar6 != 5 &&
           (param_4[5] = param_2 + param_1 * (double)param_3[5], uVar6 != 6)))))) {
        param_4[6] = param_2 + param_1 * (double)param_3[6];
        if (uVar6 == 8) {
          param_4[7] = param_2 + param_1 * (double)param_3[7];
        }
        else {
          uVar8 = 7;
        }
      }
      if (param_5 == uVar6) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar6) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_5 - 1) - uVar6) {
      uVar9 = 0;
      pdVar7 = param_4 + uVar6;
      puVar10 = param_3 + uVar6;
      do {
        uVar4 = puVar10[4];
        uVar5 = puVar10[5];
        uVar9 = uVar9 + 1;
        auVar13._0_8_ = (long)(int)(uint)*puVar10;
        auVar13._8_8_ = (long)(int)(uint)puVar10[1];
        auVar12._0_8_ = (long)(int)(uint)puVar10[2];
        auVar12._8_8_ = (long)(int)(uint)puVar10[3];
        auVar11._0_8_ = (long)(int)(uint)puVar10[6];
        auVar11._8_8_ = (long)(int)(uint)puVar10[7];
        auVar14 = NEON_scvtf(auVar13,8);
        auVar12 = NEON_scvtf(auVar12,8);
        auVar11 = NEON_scvtf(auVar11,8);
        pdVar7[1] = param_2 + auVar14._8_8_ * param_1;
        *pdVar7 = param_2 + auVar14._0_8_ * param_1;
        auVar14._8_8_ = (long)(int)(uint)uVar5;
        auVar14._0_8_ = (long)(int)(uint)uVar4;
        auVar14 = NEON_scvtf(auVar14,8);
        pdVar7[3] = param_2 + auVar12._8_8_ * param_1;
        pdVar7[2] = param_2 + auVar12._0_8_ * param_1;
        pdVar7[5] = param_2 + auVar14._8_8_ * param_1;
        pdVar7[4] = param_2 + auVar14._0_8_ * param_1;
        pdVar7[7] = param_2 + auVar11._8_8_ * param_1;
        pdVar7[6] = param_2 + auVar11._0_8_ * param_1;
        pdVar7 = pdVar7 + 8;
        puVar10 = puVar10 + 8;
      } while (uVar9 < uVar1);
      uVar8 = uVar8 + iVar3;
      if (param_5 - uVar6 == iVar3) {
        return;
      }
    }
    iVar3 = uVar8 + 1;
    param_4[(int)uVar8] = param_2 + param_1 * (double)param_3[(int)uVar8];
    if (iVar3 < (int)param_5) {
      iVar2 = uVar8 + 2;
      param_4[iVar3] = param_2 + param_1 * (double)param_3[iVar3];
      if (iVar2 < (int)param_5) {
        iVar3 = uVar8 + 3;
        param_4[iVar2] = param_2 + param_1 * (double)param_3[iVar2];
        if (iVar3 < (int)param_5) {
          iVar2 = uVar8 + 4;
          param_4[iVar3] = param_2 + param_1 * (double)param_3[iVar3];
          if (iVar2 < (int)param_5) {
            iVar3 = uVar8 + 5;
                    /* try { // try from 00306780 to 00406857 has its CatchHandler @ 00305fd0 */
            param_4[iVar2] = param_2 + param_1 * (double)param_3[iVar2];
            if (iVar3 < (int)param_5) {
              iVar2 = uVar8 + 6;
              param_4[iVar3] = param_2 + param_1 * (double)param_3[iVar3];
              if (iVar2 < (int)param_5) {
                param_4[iVar2] = param_2 + param_1 * (double)param_3[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00306810 (784 bytes) name=FUN_00306810

void FUN_00306810(double param_1,double param_2,short *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  uint uVar7;
  short *psVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)(int)*param_3);
    return;
  }
  if (0 < (int)param_5) {
    uVar4 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
    if (param_5 < uVar4) {
      uVar4 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 9) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_4 = (float)(param_2 + param_1 * (double)(int)*param_3), uVar6 = uVar4,
       uVar4 != 1)) {
      param_4[1] = (float)(param_2 + param_1 * (double)(int)param_3[1]);
                    /* try { // try from 00306898 to 0040689b has its CatchHandler @ 00306a60 */
                    /* try { // try from 003068a0 to 00406a4f has its CatchHandler @ 00305fd0 */
      if (((uVar4 != 2) &&
          (param_4[2] = (float)(param_2 + param_1 * (double)(int)param_3[2]), uVar4 != 3)) &&
         ((param_4[3] = (float)(param_2 + param_1 * (double)(int)param_3[3]), uVar4 != 4 &&
          ((param_4[4] = (float)(param_2 + param_1 * (double)(int)param_3[4]), uVar4 != 5 &&
           (param_4[5] = (float)(param_2 + param_1 * (double)(int)param_3[5]), uVar4 != 6)))))) {
        param_4[6] = (float)(param_2 + param_1 * (double)(int)param_3[6]);
        if (uVar4 == 8) {
          param_4[7] = (float)(param_2 + param_1 * (double)(int)param_3[7]);
        }
        else {
          uVar6 = 7;
        }
      }
      if (param_5 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar4) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_5 - 1) - uVar4) {
      uVar7 = 0;
      pfVar5 = param_4 + uVar4;
      psVar8 = param_3 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar12._0_8_ = (long)(int)*psVar8;
        auVar12._8_8_ = (long)(int)psVar8[1];
        auVar10._0_8_ = (long)(int)psVar8[2];
        auVar10._8_8_ = (long)(int)psVar8[3];
        auVar9._0_8_ = (long)(int)psVar8[6];
        auVar9._8_8_ = (long)(int)psVar8[7];
        auVar12 = NEON_scvtf(auVar12,8);
        auVar10 = NEON_scvtf(auVar10,8);
        auVar9 = NEON_scvtf(auVar9,8);
        auVar11._8_8_ = (long)(int)psVar8[5];
        auVar11._0_8_ = (long)(int)psVar8[4];
        auVar11 = NEON_scvtf(auVar11,8);
        *(ulong *)(pfVar5 + 2) =
             CONCAT44((float)(param_2 + auVar10._8_8_ * param_1),
                      (float)(param_2 + auVar10._0_8_ * param_1));
        *(ulong *)pfVar5 =
             CONCAT44((float)(param_2 + auVar12._8_8_ * param_1),
                      (float)(param_2 + auVar12._0_8_ * param_1));
        *(ulong *)(pfVar5 + 6) =
             CONCAT44((float)(param_2 + auVar9._8_8_ * param_1),
                      (float)(param_2 + auVar9._0_8_ * param_1));
        *(ulong *)(pfVar5 + 4) =
             CONCAT44((float)(param_2 + auVar11._8_8_ * param_1),
                      (float)(param_2 + auVar11._0_8_ * param_1));
        pfVar5 = pfVar5 + 8;
        psVar8 = psVar8 + 8;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_5 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_4[(int)uVar6] = (float)(param_2 + param_1 * (double)(int)param_3[(int)uVar6]);
    if (iVar3 < (int)param_5) {
      iVar2 = uVar6 + 2;
      param_4[iVar3] = (float)(param_2 + param_1 * (double)(int)param_3[iVar3]);
      if (iVar2 < (int)param_5) {
        iVar3 = uVar6 + 3;
        param_4[iVar2] = (float)(param_2 + param_1 * (double)(int)param_3[iVar2]);
        if (iVar3 < (int)param_5) {
                    /* catch() { ... } // from try @ 00306898 with catch @ 00306a60 */
          iVar2 = uVar6 + 4;
                    /* try { // try from 00306a70 to 00406a73 has its CatchHandler @ 00305fd0 */
                    /* catch() { ... } // from try @ 003075bc with catch @ 00306a74
                       catch() { ... } // from try @ 00307608 with catch @ 00306a74
                       catch() { ... } // from try @ 003077d4 with catch @ 00306a74 */
          param_4[iVar3] = (float)(param_2 + param_1 * (double)(int)param_3[iVar3]);
          if (iVar2 < (int)param_5) {
            iVar3 = uVar6 + 5;
            param_4[iVar2] = (float)(param_2 + param_1 * (double)(int)param_3[iVar2]);
            if (iVar3 < (int)param_5) {
              iVar2 = uVar6 + 6;
              param_4[iVar3] = (float)(param_2 + param_1 * (double)(int)param_3[iVar3]);
              if (iVar2 < (int)param_5) {
                param_4[iVar2] = (float)(param_2 + param_1 * (double)(int)param_3[iVar2]);
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00306b20 (704 bytes) name=FUN_00306b20

void FUN_00306b20(double param_1,double param_2,short *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  short sVar4;
  short sVar5;
  uint uVar6;
  double *pdVar7;
  uint uVar8;
  uint uVar9;
  short *psVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)(int)*param_3;
    return;
  }
  if (0 < (int)param_5) {
    uVar6 = (uint)((ulong)param_4 >> 3) & 1;
    if (param_5 < uVar6) {
      uVar6 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 9) || (uVar1 = uVar6, uVar8 = 0, uVar6 != 0)) &&
       (uVar6 = uVar1, *param_4 = param_2 + param_1 * (double)(int)*param_3, uVar8 = uVar6,
       uVar6 != 1)) {
      param_4[1] = param_2 + param_1 * (double)(int)param_3[1];
      if (((uVar6 != 2) && (param_4[2] = param_2 + param_1 * (double)(int)param_3[2], uVar6 != 3))
         && ((param_4[3] = param_2 + param_1 * (double)(int)param_3[3], uVar6 != 4 &&
             ((param_4[4] = param_2 + param_1 * (double)(int)param_3[4], uVar6 != 5 &&
              (param_4[5] = param_2 + param_1 * (double)(int)param_3[5], uVar6 != 6)))))) {
        param_4[6] = param_2 + param_1 * (double)(int)param_3[6];
        if (uVar6 == 8) {
          param_4[7] = param_2 + param_1 * (double)(int)param_3[7];
        }
        else {
          uVar8 = 7;
        }
      }
      if (param_5 == uVar6) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar6) - 8 >> 3) + 1;
    iVar3 = uVar1 * 8;
    if (6 < (param_5 - 1) - uVar6) {
      uVar9 = 0;
      pdVar7 = param_4 + uVar6;
      psVar10 = param_3 + uVar6;
      do {
        sVar4 = psVar10[4];
        sVar5 = psVar10[5];
        uVar9 = uVar9 + 1;
        auVar13._0_8_ = (long)(int)*psVar10;
        auVar13._8_8_ = (long)(int)psVar10[1];
        auVar12._0_8_ = (long)(int)psVar10[2];
        auVar12._8_8_ = (long)(int)psVar10[3];
        auVar11._0_8_ = (long)(int)psVar10[6];
        auVar11._8_8_ = (long)(int)psVar10[7];
        auVar14 = NEON_scvtf(auVar13,8);
        auVar12 = NEON_scvtf(auVar12,8);
        auVar11 = NEON_scvtf(auVar11,8);
        pdVar7[1] = param_2 + auVar14._8_8_ * param_1;
        *pdVar7 = param_2 + auVar14._0_8_ * param_1;
        auVar14._8_8_ = (long)(int)sVar5;
        auVar14._0_8_ = (long)(int)sVar4;
        auVar14 = NEON_scvtf(auVar14,8);
        pdVar7[3] = param_2 + auVar12._8_8_ * param_1;
        pdVar7[2] = param_2 + auVar12._0_8_ * param_1;
        pdVar7[5] = param_2 + auVar14._8_8_ * param_1;
        pdVar7[4] = param_2 + auVar14._0_8_ * param_1;
        pdVar7[7] = param_2 + auVar11._8_8_ * param_1;
        pdVar7[6] = param_2 + auVar11._0_8_ * param_1;
        pdVar7 = pdVar7 + 8;
        psVar10 = psVar10 + 8;
      } while (uVar9 < uVar1);
      uVar8 = uVar8 + iVar3;
      if (param_5 - uVar6 == iVar3) {
        return;
      }
    }
    iVar3 = uVar8 + 1;
    param_4[(int)uVar8] = param_2 + param_1 * (double)(int)param_3[(int)uVar8];
    if (iVar3 < (int)param_5) {
      iVar2 = uVar8 + 2;
      param_4[iVar3] = param_2 + param_1 * (double)(int)param_3[iVar3];
      if (iVar2 < (int)param_5) {
        iVar3 = uVar8 + 3;
        param_4[iVar2] = param_2 + param_1 * (double)(int)param_3[iVar2];
        if (iVar3 < (int)param_5) {
          iVar2 = uVar8 + 4;
          param_4[iVar3] = param_2 + param_1 * (double)(int)param_3[iVar3];
          if (iVar2 < (int)param_5) {
            iVar3 = uVar8 + 5;
            param_4[iVar2] = param_2 + param_1 * (double)(int)param_3[iVar2];
            if (iVar3 < (int)param_5) {
              iVar2 = uVar8 + 6;
              param_4[iVar3] = param_2 + param_1 * (double)(int)param_3[iVar3];
              if (iVar2 < (int)param_5) {
                param_4[iVar2] = param_2 + param_1 * (double)(int)param_3[iVar2];
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 00306de0 (460 bytes) name=FUN_00306de0

void FUN_00306de0(double param_1,double param_2,int *param_3,float *param_4,uint param_5)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  float *pfVar5;
  ulong uVar6;
  uint uVar7;
  int *piVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)*param_3);
    return;
  }
  if ((int)param_5 < 1) {
    return;
  }
  uVar3 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
  if (param_5 < uVar3) {
    uVar3 = param_5;
  }
  uVar4 = (ulong)uVar3;
  if ((int)param_5 < 5) {
    uVar4 = (ulong)param_5;
  }
  else {
    uVar6 = 0;
    if (uVar3 == 0) goto LAB_00306e84;
  }
  uVar3 = (uint)uVar4;
  *param_4 = (float)(param_2 + param_1 * (double)*param_3);
  uVar6 = uVar4;
  if (uVar3 != 1) {
    param_4[1] = (float)(param_2 + param_1 * (double)param_3[1]);
    if (uVar3 != 2) {
      param_4[2] = (float)(param_2 + param_1 * (double)param_3[2]);
      if (uVar3 == 4) {
        param_4[3] = (float)(param_2 + param_1 * (double)param_3[3]);
      }
      else {
        uVar6 = 3;
      }
    }
    if (param_5 == uVar3) {
      return;
    }
  }
LAB_00306e84:
  iVar2 = param_5 - (int)uVar4;
  uVar3 = (iVar2 - 4U >> 2) + 1;
  iVar1 = uVar3 * 4;
  if (2 < (param_5 - 1) - (int)uVar4) {
    uVar7 = 0;
    pfVar5 = param_4 + uVar4;
    piVar8 = param_3 + uVar4;
    do {
      uVar7 = uVar7 + 1;
      auVar10._0_8_ = (long)*piVar8;
      auVar10._8_8_ = (long)piVar8[1];
      auVar9._0_8_ = (long)piVar8[2];
      auVar9._8_8_ = (long)piVar8[3];
      auVar10 = NEON_scvtf(auVar10,8);
      auVar9 = NEON_scvtf(auVar9,8);
      *(ulong *)(pfVar5 + 2) =
           CONCAT44((float)(param_2 + auVar9._8_8_ * param_1),
                    (float)(param_2 + auVar9._0_8_ * param_1));
      *(ulong *)pfVar5 =
           CONCAT44((float)(param_2 + auVar10._8_8_ * param_1),
                    (float)(param_2 + auVar10._0_8_ * param_1));
      pfVar5 = pfVar5 + 4;
      piVar8 = piVar8 + 4;
    } while (uVar7 < uVar3);
    uVar6 = (ulong)(uint)((int)uVar6 + iVar1);
    if (iVar2 == iVar1) {
      return;
    }
  }
  uVar4 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
  *(float *)((long)param_4 + uVar4) =
       (float)(param_2 + param_1 * (double)*(int *)((long)param_3 + uVar4));
  if (((int)uVar6 + 1 < (int)param_5) &&
     (*(float *)((long)param_4 + uVar4 + 4) =
           (float)(param_2 + param_1 * (double)*(int *)((long)param_3 + uVar4 + 4)),
     (int)uVar6 + 2 < (int)param_5)) {
    *(float *)((long)param_4 + uVar4 + 8) =
         (float)(param_2 + param_1 * (double)*(int *)((long)param_3 + uVar4 + 8));
  }
  return;
}


==================================================================

### FUNC 00306fac (448 bytes) name=FUN_00306fac

void FUN_00306fac(double param_1,double param_2,int *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  int *piVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)*param_3;
    return;
  }
  if (0 < (int)param_5) {
    uVar4 = (uint)((ulong)param_4 >> 3) & 1;
    if (param_5 < uVar4) {
      uVar4 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 6) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_4 = param_2 + param_1 * (double)*param_3, uVar6 = uVar4, uVar4 != 1))
    {
      param_4[1] = param_2 + param_1 * (double)param_3[1];
      if ((uVar4 != 2) && (param_4[2] = param_2 + param_1 * (double)param_3[2], uVar4 != 3)) {
        param_4[3] = param_2 + param_1 * (double)param_3[3];
        if (uVar4 == 5) {
          param_4[4] = param_2 + param_1 * (double)param_3[4];
        }
        else {
          uVar6 = 4;
        }
      }
      if (param_5 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar4) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_5 - 1) - uVar4) {
      uVar7 = 0;
      pdVar5 = param_4 + uVar4;
      piVar8 = param_3 + uVar4;
      do {
        uVar7 = uVar7 + 1;
        auVar10._0_8_ = (long)*piVar8;
        auVar10._8_8_ = (long)piVar8[1];
        auVar9._0_8_ = (long)piVar8[2];
        auVar9._8_8_ = (long)piVar8[3];
        auVar10 = NEON_scvtf(auVar10,8);
        auVar9 = NEON_scvtf(auVar9,8);
        pdVar5[1] = param_2 + auVar10._8_8_ * param_1;
        *pdVar5 = param_2 + auVar10._0_8_ * param_1;
        pdVar5[3] = param_2 + auVar9._8_8_ * param_1;
        pdVar5[2] = param_2 + auVar9._0_8_ * param_1;
        pdVar5 = pdVar5 + 4;
        piVar8 = piVar8 + 4;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_5 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_4[(int)uVar6] = param_2 + param_1 * (double)param_3[(int)uVar6];
    if (iVar3 < (int)param_5) {
      iVar2 = uVar6 + 2;
      param_4[iVar3] = param_2 + param_1 * (double)param_3[iVar3];
      if (iVar2 < (int)param_5) {
        param_4[iVar2] = param_2 + param_1 * (double)param_3[iVar2];
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030716c (448 bytes) name=FUN_0030716c

void FUN_0030716c(double param_1,double param_2,float *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  float *pfVar5;
  long lVar6;
  ulong uVar7;
  uint uVar8;
  float *pfVar9;
  uint uVar10;
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * (double)*param_3);
    return;
  }
  if (0 < (int)param_5) {
    if ((param_4 < param_3 + 4 && param_3 < param_4 + 4) || (param_5 < 8)) {
      lVar6 = 0;
      do {
        param_4[lVar6] = (float)(param_2 + param_1 * (double)param_3[lVar6]);
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_5);
      return;
    }
    uVar10 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    uVar2 = param_5;
    if (uVar10 < param_5) {
      uVar2 = uVar10;
    }
    uVar10 = uVar2;
    if ((uVar2 != 0) && (*param_4 = (float)(param_2 + param_1 * (double)*param_3), uVar2 != 1)) {
      param_4[1] = (float)(param_2 + param_1 * (double)param_3[1]);
      if (uVar2 == 3) {
        param_4[2] = (float)(param_2 + param_1 * (double)param_3[2]);
      }
      else {
        uVar10 = 2;
      }
    }
    uVar1 = ((param_5 - uVar2) - 4 >> 2) + 1;
    uVar8 = 0;
    iVar3 = uVar1 * 4;
    pfVar5 = param_4 + uVar2;
    pfVar9 = param_3 + uVar2;
    do {
      uVar4 = *(undefined8 *)pfVar9;
      uVar8 = uVar8 + 1;
      *(ulong *)(pfVar5 + 2) =
           CONCAT44((float)(param_2 +
                           (double)(float)((ulong)*(undefined8 *)(pfVar9 + 2) >> 0x20) * param_1),
                    (float)(param_2 + (double)(float)*(undefined8 *)(pfVar9 + 2) * param_1));
      *(ulong *)pfVar5 =
           CONCAT44((float)(param_2 + (double)(float)((ulong)uVar4 >> 0x20) * param_1),
                    (float)(param_2 + (double)(float)uVar4 * param_1));
      pfVar5 = pfVar5 + 4;
      pfVar9 = pfVar9 + 4;
    } while (uVar8 < uVar1);
    uVar10 = uVar10 + iVar3;
    if (param_5 - uVar2 != iVar3) {
      uVar7 = -(ulong)(uVar10 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar10 << 2;
      *(float *)((long)param_4 + uVar7) =
           (float)(param_2 + param_1 * (double)*(float *)((long)param_3 + uVar7));
      if (((int)(uVar10 + 1) < (int)param_5) &&
         (*(float *)((long)param_4 + uVar7 + 4) =
               (float)(param_2 + param_1 * (double)*(float *)((long)param_3 + uVar7 + 4)),
         (int)(uVar10 + 2) < (int)param_5)) {
        *(float *)((long)param_4 + uVar7 + 8) =
             (float)(param_2 + param_1 * (double)*(float *)((long)param_3 + uVar7 + 8));
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030732c (440 bytes) name=FUN_0030732c

void FUN_0030732c(double param_1,double param_2,float *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  double *pdVar5;
  uint uVar6;
  uint uVar7;
  float *pfVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * (double)*param_3;
    return;
  }
  if (0 < (int)param_5) {
    uVar4 = (uint)((ulong)param_4 >> 3) & 1;
    if (param_5 < uVar4) {
      uVar4 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 6) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_4 = param_2 + param_1 * (double)*param_3, uVar6 = uVar4, uVar4 != 1))
    {
      param_4[1] = param_2 + param_1 * (double)param_3[1];
      if ((uVar4 != 2) && (param_4[2] = param_2 + param_1 * (double)param_3[2], uVar4 != 3)) {
        param_4[3] = param_2 + param_1 * (double)param_3[3];
        if (uVar4 == 5) {
          param_4[4] = param_2 + param_1 * (double)param_3[4];
        }
        else {
          uVar6 = 4;
        }
      }
      if (param_5 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar4) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_5 - 1) - uVar4) {
      uVar7 = 0;
      pdVar5 = param_4 + uVar4;
      pfVar8 = param_3 + uVar4;
      do {
        uVar10 = *(undefined8 *)(pfVar8 + 2);
        uVar9 = *(undefined8 *)pfVar8;
        uVar7 = uVar7 + 1;
        pdVar5[1] = param_2 + (double)(float)((ulong)uVar9 >> 0x20) * param_1;
        *pdVar5 = param_2 + (double)(float)uVar9 * param_1;
        pdVar5[3] = param_2 + (double)(float)((ulong)uVar10 >> 0x20) * param_1;
        pdVar5[2] = param_2 + (double)(float)uVar10 * param_1;
        pdVar5 = pdVar5 + 4;
        pfVar8 = pfVar8 + 4;
      } while (uVar7 < uVar1);
      uVar6 = uVar6 + iVar3;
      if (param_5 - uVar4 == iVar3) {
        return;
      }
    }
    iVar3 = uVar6 + 1;
    param_4[(int)uVar6] = param_2 + param_1 * (double)param_3[(int)uVar6];
    if (iVar3 < (int)param_5) {
      iVar2 = uVar6 + 2;
      param_4[iVar3] = param_2 + param_1 * (double)param_3[iVar3];
      if (iVar2 < (int)param_5) {
        param_4[iVar2] = param_2 + param_1 * (double)param_3[iVar2];
      }
    }
  }
  return;
}


==================================================================

### FUNC 003074e4 (436 bytes) name=FUN_003074e4

void FUN_003074e4(double param_1,double param_2,double *param_3,float *param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  double *pdVar7;
  uint uVar8;
  double dVar9;
  double dVar10;
  
  if (param_5 == 1) {
    *param_4 = (float)(param_2 + param_1 * *param_3);
    return;
  }
  if (0 < (int)param_5) {
    uVar4 = (uint)((ulong)param_3 >> 3) & 1;
    if (param_5 < uVar4) {
      uVar4 = param_5;
    }
    uVar1 = param_5;
    if ((((int)param_5 < 6) || (uVar1 = uVar4, uVar6 = 0, uVar4 != 0)) &&
       (uVar4 = uVar1, *param_4 = (float)(param_2 + param_1 * *param_3), uVar6 = uVar4, uVar4 != 1))
    {
      param_4[1] = (float)(param_2 + param_1 * param_3[1]);
      if ((uVar4 != 2) && (param_4[2] = (float)(param_2 + param_1 * param_3[2]), uVar4 != 3)) {
        param_4[3] = (float)(param_2 + param_1 * param_3[3]);
        if (uVar4 == 5) {
          param_4[4] = (float)(param_2 + param_1 * param_3[4]);
        }
        else {
          uVar6 = 4;
        }
      }
      if (param_5 == uVar4) {
        return;
      }
    }
    uVar1 = ((param_5 - uVar4) - 4 >> 2) + 1;
    iVar3 = uVar1 * 4;
    if (2 < (param_5 - 1) - uVar4) {
      uVar8 = 0;
                    /* try { // try from 003075bc to 004075bf has its CatchHandler @ 00306a74 */
      pfVar5 = param_4 + uVar4;
      pdVar7 = param_3 + uVar4;
      do {
        uVar8 = uVar8 + 1;
        dVar10 = pdVar7[1];
        dVar9 = *pdVar7;
        *(ulong *)(pfVar5 + 2) =
             CONCAT44((float)(param_2 + pdVar7[3] * param_1),(float)(param_2 + pdVar7[2] * param_1))
        ;
        *(ulong *)pfVar5 =
             CONCAT44((float)(param_2 + dVar10 * param_1),(float)(param_2 + dVar9 * param_1));
        pfVar5 = pfVar5 + 4;
        pdVar7 = pdVar7 + 4;
      } while (uVar8 < uVar1);
                    /* try { // try from 00307600 to 00407603 has its CatchHandler @ 003077c4 */
      uVar6 = uVar6 + iVar3;
      if (param_5 - uVar4 == iVar3) {
        return;
      }
    }
                    /* try { // try from 00307608 to 004077b7 has its CatchHandler @ 00306a74 */
    iVar3 = uVar6 + 1;
    param_4[(int)uVar6] = (float)(param_2 + param_1 * param_3[(int)uVar6]);
    if (iVar3 < (int)param_5) {
      iVar2 = uVar6 + 2;
      param_4[iVar3] = (float)(param_2 + param_1 * param_3[iVar3]);
      if (iVar2 < (int)param_5) {
        param_4[iVar2] = (float)(param_2 + param_1 * param_3[iVar2]);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00307698 (248 bytes) name=FUN_00307698

void FUN_00307698(double param_1,double param_2,double *param_3,double *param_4,uint param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  ulong uVar4;
  double *pdVar5;
  long lVar6;
  uint uVar7;
  double *pdVar8;
  double dVar9;
  
  if (param_5 == 1) {
    *param_4 = param_2 + param_1 * *param_3;
    return;
  }
  if (0 < (int)param_5) {
    if ((param_4 < param_3 + 2 && param_3 < param_4 + 2) || (param_5 < 9)) {
      lVar6 = 0;
      do {
        param_4[lVar6] = param_2 + param_1 * param_3[lVar6];
        lVar6 = lVar6 + 1;
      } while ((int)lVar6 < (int)param_5);
      return;
    }
    uVar1 = (uint)((ulong)param_3 >> 3) & 1;
    uVar2 = param_5;
    if (uVar1 < param_5) {
      uVar2 = uVar1;
    }
    if (uVar2 != 0) {
      *param_4 = param_2 + param_1 * *param_3;
    }
    uVar1 = ((param_5 - uVar2) - 2 >> 1) + 1;
    uVar7 = 0;
    iVar3 = uVar1 * 2;
    pdVar5 = param_4 + uVar2;
    pdVar8 = param_3 + uVar2;
    do {
      dVar9 = *pdVar8;
      uVar7 = uVar7 + 1;
      pdVar5[1] = param_2 + pdVar8[1] * param_1;
      *pdVar5 = param_2 + dVar9 * param_1;
      pdVar5 = pdVar5 + 2;
      pdVar8 = pdVar8 + 2;
    } while (uVar7 < uVar1);
    uVar1 = (uint)(uVar2 != 0) + iVar3;
    if (param_5 - uVar2 != iVar3) {
      uVar4 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      *(double *)((long)param_4 + uVar4) = param_2 + param_1 * *(double *)((long)param_3 + uVar4);
    }
  }
  return;
}


==================================================================

### FUNC 00307790 (4 bytes) name=FUN_00307790

void FUN_00307790(void)

{
  return;
}


==================================================================

### FUNC 00307794 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 00307798 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 0030779c (464 bytes) name=FUN_0030779c

UMatData *
FUN_0030779c(MatAllocator *param_1,int param_2,long param_3,ulong param_4,long param_5,long param_6)

{
  int iVar1;
  uint uVar2;
  undefined8 uVar3;
  long lVar4;
  UMatData *this;
  char *pcVar5;
  long lVar6;
  int *piVar7;
  ulong uVar9;
  ulong uVar10;
  ulong *puVar11;
  ulong *puVar12;
  undefined8 local_10;
  undefined8 local_8;
  int *piVar8;
  
  uVar2 = param_2 - 1;
                    /* catch() { ... } // from try @ 00307600 with catch @ 003077c4 */
                    /* try { // try from 003077d4 to 004077d7 has its CatchHandler @ 00306a74 */
                    /* catch() { ... } // from try @ 00308554 with catch @ 003077d8
                       catch() { ... } // from try @ 003085a0 with catch @ 003077d8
                       catch() { ... } // from try @ 0030876c with catch @ 003077d8 */
  uVar10 = (ulong)(int)(((uint)(param_4 >> 3) & 0x1ff) + 1 <<
                       (ulong)((uint)(0xfa50L >> (((uint)param_4 & 7) << 1)) & 3));
  if ((int)uVar2 < 0) {
LAB_00307868:
    lVar4 = param_5;
    if (param_5 != 0) goto LAB_00307870;
  }
  else {
    lVar4 = (long)(int)uVar2;
    if (param_6 == 0) {
      piVar7 = (int *)(param_3 + lVar4 * 4);
      do {
        piVar8 = piVar7 + -1;
        uVar10 = uVar10 * (long)*piVar7;
        piVar7 = piVar8;
      } while (piVar8 != (int *)(param_3 + (lVar4 - (ulong)uVar2) * 4 + -4));
      goto LAB_00307868;
    }
    if (param_5 != 0) {
      puVar11 = (ulong *)(param_6 + lVar4 * 8);
      puVar12 = (ulong *)(param_6 + (lVar4 - (ulong)uVar2) * 8 + -8);
      piVar7 = (int *)(param_3 + lVar4 * 4);
      do {
        while (uVar9 = *puVar11, uVar9 != 0x7fffffff) {
          if (uVar9 < uVar10) {
            local_10 = 0;
            local_8 = 0;
            pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x10);
            uVar3 = s_total_<__step[i]_0046abe0._8_8_;
            *(undefined8 *)pcVar5 = s_total_<__step[i]_0046abe0._0_8_;
            *(undefined8 *)(pcVar5 + 8) = uVar3;
            cv::error(-0xd7,(String *)&local_10,
                      "virtual cv::UMatData* cv::StdMatAllocator::allocate(int, const int*, int, void*, size_t*, int, cv::UMatUsageFlags) const"
                      ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xb6);
            cv::String::deallocate((String *)&local_10);
            uVar9 = *puVar11;
          }
          puVar11 = puVar11 + -1;
          uVar10 = uVar9 * (long)*piVar7;
          piVar7 = piVar7 + -1;
          if (puVar11 == puVar12) goto LAB_00307868;
        }
        *puVar11 = uVar10;
        puVar11 = puVar11 + -1;
        uVar10 = uVar10 * (long)*piVar7;
        piVar7 = piVar7 + -1;
      } while (puVar11 != puVar12);
      goto LAB_00307868;
    }
    uVar9 = 0;
    do {
      lVar6 = uVar9 * 2;
      iVar1 = *(int *)(param_3 + lVar4 * 4 + uVar9);
      uVar9 = uVar9 - 4;
      *(ulong *)(param_6 + lVar4 * 8 + lVar6) = uVar10;
      uVar10 = uVar10 * (long)iVar1;
    } while (uVar9 != ((ulong)uVar2 << 2 ^ 0xfffffffffffffffc));
  }
  lVar4 = cv::fastMalloc(uVar10);
LAB_00307870:
  this = operator_new(0x50);
  cv::UMatData::UMatData(this,param_1);
  *(long *)(this + 0x20) = lVar4;
  *(long *)(this + 0x18) = lVar4;
  *(ulong *)(this + 0x28) = uVar10;
  if (param_5 != 0) {
    *(uint *)(this + 0x30) = *(uint *)(this + 0x30) | 0x20;
  }
  return this;
}


==================================================================

### FUNC 00307994 (104 bytes) name=FUN_00307994

void FUN_00307994(ushort *param_1,char *param_2,int param_3)

{
  uint uVar1;
  ushort uVar2;
  long lVar3;
  
  if (param_3 != 1) {
    lVar3 = 0;
    if (0 < param_3) {
      do {
        uVar2 = param_1[lVar3];
        uVar1 = (int)(short)uVar2;
        if (0xff < (uint)(int)(short)uVar2) {
          uVar1 = -(uint)(0 < (short)uVar2);
        }
        param_2[lVar3] = (char)uVar1;
        lVar3 = lVar3 + 1;
      } while ((int)lVar3 < param_3);
    }
    return;
  }
  uVar2 = *param_1;
  if (uVar2 < 0x100) {
    *param_2 = (char)uVar2;
  }
  else {
    *param_2 = -(0 < (short)uVar2);
  }
  return;
}


==================================================================

### FUNC 003079fc (120 bytes) name=FUN_003079fc

void FUN_003079fc(short *param_1,undefined1 *param_2,int param_3)

{
  short sVar1;
  long lVar2;
  undefined1 uVar3;
  
  if (param_3 == 1) {
    sVar1 = *param_1;
    uVar3 = (undefined1)sVar1;
    if ((0xff < (int)sVar1 + 0x80U) && (uVar3 = 0x7f, sVar1 < 1)) {
      uVar3 = 0x80;
    }
    *param_2 = uVar3;
    return;
  }
  lVar2 = 0;
  if (0 < param_3) {
    do {
      sVar1 = param_1[lVar2];
      uVar3 = (undefined1)sVar1;
      if ((0xff < (int)sVar1 + 0x80U) && (uVar3 = 0x7f, sVar1 < 1)) {
        uVar3 = 0x80;
      }
      param_2[lVar2] = uVar3;
      lVar2 = lVar2 + 1;
    } while ((int)lVar2 < param_3);
  }
  return;
}


==================================================================

### FUNC 00307a74 (104 bytes) name=FUN_00307a74

void FUN_00307a74(uint *param_1,char *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  
  if (param_3 != 1) {
    lVar2 = 0;
    if (0 < param_3) {
      do {
        uVar1 = param_1[lVar2];
        if (0xff < uVar1) {
          uVar1 = -(uint)(0 < (int)uVar1);
        }
        param_2[lVar2] = (char)uVar1;
        lVar2 = lVar2 + 1;
      } while ((int)lVar2 < param_3);
    }
    return;
  }
  uVar1 = *param_1;
  if (uVar1 < 0x100) {
    *param_2 = (char)uVar1;
  }
  else {
    *param_2 = -(0 < (int)uVar1);
  }
  return;
}


==================================================================

### FUNC 00307adc (120 bytes) name=FUN_00307adc

void FUN_00307adc(int *param_1,undefined1 *param_2,int param_3)

{
  int iVar1;
  long lVar2;
  undefined1 uVar3;
  
  if (param_3 == 1) {
    iVar1 = *param_1;
    uVar3 = (undefined1)iVar1;
    if ((0xff < iVar1 + 0x80U) && (uVar3 = 0x7f, iVar1 < 1)) {
      uVar3 = 0x80;
    }
    *param_2 = uVar3;
    return;
  }
  lVar2 = 0;
  if (0 < param_3) {
    do {
      iVar1 = param_1[lVar2];
      uVar3 = (undefined1)iVar1;
      if ((0xff < iVar1 + 0x80U) && (uVar3 = 0x7f, iVar1 < 1)) {
        uVar3 = 0x80;
      }
      param_2[lVar2] = uVar3;
      lVar2 = lVar2 + 1;
    } while ((int)lVar2 < param_3);
  }
  return;
}


==================================================================

### FUNC 00307b54 (112 bytes) name=FUN_00307b54

void FUN_00307b54(uint *param_1,short *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  
  if (param_3 != 1) {
    lVar2 = 0;
    if (0 < param_3) {
      do {
        uVar1 = param_1[lVar2];
        if (0xffff < uVar1) {
          uVar1 = -(uint)(0 < (int)uVar1);
        }
        param_2[lVar2] = (short)uVar1;
        lVar2 = lVar2 + 1;
      } while ((int)lVar2 < param_3);
    }
    return;
  }
  uVar1 = *param_1;
  if (uVar1 < 0x10000) {
    *param_2 = (short)uVar1;
  }
  else {
    *param_2 = -(ushort)(0 < (int)uVar1);
  }
  return;
}


==================================================================

### FUNC 00307bc4 (128 bytes) name=FUN_00307bc4

void FUN_00307bc4(int *param_1,undefined2 *param_2,int param_3)

{
  int iVar1;
  long lVar2;
  undefined2 uVar3;
  
  if (param_3 == 1) {
    iVar1 = *param_1;
    uVar3 = (undefined2)iVar1;
    if ((0xffff < iVar1 + 0x8000U) && (uVar3 = 0x7fff, iVar1 < 1)) {
      uVar3 = 0x8000;
    }
    *param_2 = uVar3;
    return;
  }
  lVar2 = 0;
  if (0 < param_3) {
    do {
      iVar1 = param_1[lVar2];
      uVar3 = (undefined2)iVar1;
      if ((0xffff < iVar1 + 0x8000U) && (uVar3 = 0x7fff, iVar1 < 1)) {
        uVar3 = 0x8000;
      }
      param_2[lVar2] = uVar3;
      lVar2 = lVar2 + 1;
    } while ((int)lVar2 < param_3);
  }
  return;
}


==================================================================

### FUNC 00307c44 (172 bytes) name=FUN_00307c44

void FUN_00307c44(double *param_1,undefined1 *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_3 != 1) {
    if (0 < param_3) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_1[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_2[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_3 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(*param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_2 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00307cf0 (200 bytes) name=FUN_00307cf0

void FUN_00307cf0(double param_1,double param_2,double *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + *param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00307db8 (208 bytes) name=FUN_00307db8

void FUN_00307db8(double param_1,double param_2,float *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00307e88 (208 bytes) name=FUN_00307e88

void FUN_00307e88(double param_1,double param_2,int *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00307f58 (208 bytes) name=FUN_00307f58

void FUN_00307f58(double param_1,double param_2,short *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)(int)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)(int)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00308028 (208 bytes) name=FUN_00308028

void FUN_00308028(double param_1,double param_2,ushort *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 003080f8 (208 bytes) name=FUN_003080f8

void FUN_003080f8(double param_1,double param_2,char *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)(int)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)(int)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 003081c8 (208 bytes) name=FUN_003081c8

void FUN_003081c8(double param_1,double param_2,byte *param_3,undefined1 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00308298 (204 bytes) name=FUN_00308298

void FUN_00308298(double *param_1,undefined1 *param_2,int param_3)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_3 == 1) {
    lVar3 = lrint(*param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_2 = uVar2;
    return;
  }
  if (0 < param_3) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_1[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_2[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00308364 (232 bytes) name=FUN_00308364

void FUN_00308364(double param_1,double param_2,double *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + *param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030844c (240 bytes) name=FUN_0030844c

void FUN_0030844c(double param_1,double param_2,float *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030853c (240 bytes) name=FUN_0030853c

void FUN_0030853c(double param_1,double param_2,int *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
                    /* try { // try from 00308554 to 00408557 has its CatchHandler @ 003077d8 */
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
                    /* try { // try from 00308598 to 0040859b has its CatchHandler @ 0030875c */
                    /* try { // try from 003085a0 to 0040874f has its CatchHandler @ 003077d8 */
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030862c (240 bytes) name=FUN_0030862c

void FUN_0030862c(double param_1,double param_2,short *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)(int)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030871c (240 bytes) name=FUN_0030871c

void FUN_0030871c(double param_1,double param_2,ushort *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
                    /* catch() { ... } // from try @ 00308598 with catch @ 0030875c */
    do {
                    /* try { // try from 0030876c to 0040876f has its CatchHandler @ 003077d8 */
                    /* catch() { ... } // from try @ 00309298 with catch @ 00308770
                       catch() { ... } // from try @ 003092e4 with catch @ 00308770
                       catch() { ... } // from try @ 003094c0 with catch @ 00308770 */
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030880c (240 bytes) name=FUN_0030880c

void FUN_0030880c(double param_1,double param_2,char *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)(int)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003088fc (240 bytes) name=FUN_003088fc

void FUN_003088fc(double param_1,double param_2,byte *param_3,undefined1 *param_4,int param_5)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003089ec (180 bytes) name=FUN_003089ec

void FUN_003089ec(double *param_1,undefined2 *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_3 != 1) {
    if (0 < param_3) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_1[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_2[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_3 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(*param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_2 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308aa0 (208 bytes) name=FUN_00308aa0

void FUN_00308aa0(double param_1,double param_2,double *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + *param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308b70 (216 bytes) name=FUN_00308b70

void FUN_00308b70(double param_1,double param_2,float *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308c48 (216 bytes) name=FUN_00308c48

void FUN_00308c48(double param_1,double param_2,int *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308d20 (216 bytes) name=FUN_00308d20

void FUN_00308d20(double param_1,double param_2,short *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)(int)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)(int)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308df8 (216 bytes) name=FUN_00308df8

void FUN_00308df8(double param_1,double param_2,ushort *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308ed0 (216 bytes) name=FUN_00308ed0

void FUN_00308ed0(double param_1,double param_2,char *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)(int)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)(int)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00308fa8 (216 bytes) name=FUN_00308fa8

void FUN_00308fa8(double param_1,double param_2,byte *param_3,undefined2 *param_4,int param_5)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_5 != 1) {
    if (0 < param_5) {
      lVar4 = 0;
      do {
        lVar2 = lrint(param_2 + param_1 * (double)param_3[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_4[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_5 - 1) + 1);
    }
    return;
  }
  lVar4 = lrint(param_2 + (double)*param_3 * param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_4 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00309080 (212 bytes) name=FUN_00309080

void FUN_00309080(double *param_1,undefined2 *param_2,int param_3)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_3 == 1) {
    lVar3 = lrint(*param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_2 = uVar2;
    return;
  }
  if (0 < param_3) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_1[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_2[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309154 (240 bytes) name=FUN_00309154

void FUN_00309154(double param_1,double param_2,double *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + *param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309244 (248 bytes) name=FUN_00309244

void FUN_00309244(double param_1,double param_2,float *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
                    /* try { // try from 00309298 to 0040929b has its CatchHandler @ 00308770 */
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
                    /* try { // try from 003092dc to 004092df has its CatchHandler @ 003094b0 */
                    /* try { // try from 003092e4 to 004094a3 has its CatchHandler @ 00308770 */
  return;
}


==================================================================

### FUNC 0030933c (248 bytes) name=FUN_0030933c

void FUN_0030933c(double param_1,double param_2,int *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309434 (248 bytes) name=FUN_00309434

void FUN_00309434(double param_1,double param_2,short *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)(int)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
                    /* catch() { ... } // from try @ 003092dc with catch @ 003094b0 */
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
                    /* try { // try from 003094c0 to 004094c3 has its CatchHandler @ 00308770 */
                    /* catch() { ... } // from try @ 00309dd8 with catch @ 003094c4
                       catch() { ... } // from try @ 00309f44 with catch @ 003094c4
                       catch() { ... } // from try @ 0030a10c with catch @ 003094c4 */
  return;
}


==================================================================

### FUNC 0030952c (248 bytes) name=FUN_0030952c

void FUN_0030952c(double param_1,double param_2,ushort *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309624 (248 bytes) name=FUN_00309624

void FUN_00309624(double param_1,double param_2,char *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)(int)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030971c (248 bytes) name=FUN_0030971c

void FUN_0030971c(double param_1,double param_2,byte *param_3,undefined2 *param_4,int param_5)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_5 == 1) {
    lVar3 = lrint(param_2 + (double)*param_3 * param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_4 = uVar2;
    return;
  }
  if (0 < param_5) {
    lVar3 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_4[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309814 (112 bytes) name=FUN_00309814

void FUN_00309814(double *param_1,undefined4 *param_2,int param_3)

{
  long lVar1;
  long lVar2;
  
  if (param_3 == 1) {
    lVar2 = lrint(*param_1);
    *param_2 = (int)lVar2;
  }
  else if (0 < param_3) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_1[lVar2]);
      param_2[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309884 (136 bytes) name=FUN_00309884

void FUN_00309884(double param_1,double param_2,double *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + *param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030990c (144 bytes) name=FUN_0030990c

void FUN_0030990c(double param_1,double param_2,float *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 0030999c (144 bytes) name=FUN_0030999c

void FUN_0030999c(double param_1,double param_2,int *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309a2c (144 bytes) name=FUN_00309a2c

void FUN_00309a2c(double param_1,double param_2,short *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)(int)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309abc (144 bytes) name=FUN_00309abc

void FUN_00309abc(double param_1,double param_2,ushort *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309b4c (144 bytes) name=FUN_00309b4c

void FUN_00309b4c(double param_1,double param_2,char *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)(int)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)(int)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309bdc (144 bytes) name=FUN_00309bdc

void FUN_00309bdc(double param_1,double param_2,byte *param_3,undefined4 *param_4,int param_5)

{
  long lVar1;
  long lVar2;
  
  if (param_5 == 1) {
    lVar2 = lrint(param_2 + (double)*param_3 * param_1);
    *param_4 = (int)lVar2;
  }
  else if (0 < param_5) {
    lVar2 = 0;
    do {
      lVar1 = lrint(param_2 + param_1 * (double)param_3[lVar2]);
      param_4[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_5 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309c6c (112 bytes) name=FUN_00309c6c

void FUN_00309c6c(float *param_1,undefined4 *param_2,int param_3)

{
  long lVar1;
  long lVar2;
  
  if (param_3 == 1) {
    lVar2 = lrintf(*param_1);
    *param_2 = (int)lVar2;
  }
  else if (0 < param_3) {
    lVar2 = 0;
    do {
      lVar1 = lrintf(param_1[lVar2]);
      param_2[lVar2] = (int)lVar1;
      lVar2 = lVar2 + 1;
    } while (lVar2 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309cdc (212 bytes) name=FUN_00309cdc

void FUN_00309cdc(float *param_1,undefined2 *param_2,int param_3)

{
  long lVar1;
  undefined2 uVar2;
  long lVar3;
  
  if (param_3 == 1) {
    lVar3 = lrintf(*param_1);
    uVar2 = (undefined2)lVar3;
    if ((0xffff < (int)lVar3 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar3 < 1)) {
      uVar2 = 0x8000;
    }
    *param_2 = uVar2;
    return;
  }
  if (0 < param_3) {
    lVar3 = 0;
    do {
      lVar1 = lrintf(param_1[lVar3]);
      uVar2 = (undefined2)lVar1;
      if ((0xffff < (int)lVar1 + 0x8000U) && (uVar2 = 0x7fff, (int)lVar1 < 1)) {
        uVar2 = 0x8000;
      }
      param_2[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309db0 (180 bytes) name=FUN_00309db0

void FUN_00309db0(float *param_1,undefined2 *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  short sVar3;
  long lVar4;
  
  if (param_3 != 1) {
    if (0 < param_3) {
                    /* try { // try from 00309dd8 to 00409efb has its CatchHandler @ 003094c4 */
      lVar4 = 0;
      do {
        lVar2 = lrintf(param_1[lVar4]);
        sVar3 = (short)lVar2;
        if (0xffff < (uint)lVar2) {
          sVar3 = -(ushort)(0 < (int)(uint)lVar2);
        }
        param_2[lVar4] = sVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_3 - 1) + 1);
    }
    return;
  }
  lVar4 = lrintf(*param_1);
  uVar1 = (uint)lVar4;
  if (0xffff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_2 = (short)uVar1;
  return;
}


==================================================================

### FUNC 00309e64 (204 bytes) name=FUN_00309e64

void FUN_00309e64(float *param_1,undefined1 *param_2,int param_3)

{
  long lVar1;
  undefined1 uVar2;
  long lVar3;
  
  if (param_3 == 1) {
    lVar3 = lrintf(*param_1);
    uVar2 = (undefined1)lVar3;
    if ((0xff < (int)lVar3 + 0x80U) && (uVar2 = 0x7f, (int)lVar3 < 1)) {
      uVar2 = 0x80;
    }
    *param_2 = uVar2;
    return;
  }
  if (0 < param_3) {
    lVar3 = 0;
    do {
      lVar1 = lrintf(param_1[lVar3]);
      uVar2 = (undefined1)lVar1;
      if ((0xff < (int)lVar1 + 0x80U) && (uVar2 = 0x7f, (int)lVar1 < 1)) {
        uVar2 = 0x80;
      }
      param_2[lVar3] = uVar2;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 00309f30 (172 bytes) name=FUN_00309f30

void FUN_00309f30(float *param_1,undefined1 *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  char cVar3;
  long lVar4;
  
                    /* try { // try from 00309f3c to 00409f3f has its CatchHandler @ 0030a0fc */
                    /* try { // try from 00309f44 to 0040a0eb has its CatchHandler @ 003094c4 */
  if (param_3 != 1) {
    if (0 < param_3) {
      lVar4 = 0;
      do {
        lVar2 = lrintf(param_1[lVar4]);
        cVar3 = (char)lVar2;
        if (0xff < (uint)lVar2) {
          cVar3 = -(0 < (int)(uint)lVar2);
        }
        param_2[lVar4] = cVar3;
        lVar4 = lVar4 + 1;
      } while (lVar4 != (ulong)(param_3 - 1) + 1);
    }
    return;
  }
  lVar4 = lrintf(*param_1);
  uVar1 = (uint)lVar4;
  if (0xff < uVar1) {
    uVar1 = -(uint)(0 < (int)uVar1);
  }
  *param_2 = (char)uVar1;
  return;
}


==================================================================

### FUNC 00309fdc (280 bytes) name=FUN_00309fdc

void FUN_00309fdc(undefined8 param_1,UMatData *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_2 != (UMatData *)0x0) {
    if (*(int *)(param_2 + 0x10) < 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar4 = (char *)cv::String::allocate((String *)&local_10,0x11);
      uVar2 = s_u_>urefcount_>__0_0046ac38._8_8_;
      uVar1 = s_u_>urefcount_>__0_0046ac38._0_8_;
      pcVar4[0x10] = s_u_>urefcount_>__0_0046ac38[0x10];
      *(undefined8 *)pcVar4 = uVar1;
      *(undefined8 *)(pcVar4 + 8) = uVar2;
      cv::error(-0xd7,(String *)&local_10,
                "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd3);
      cv::String::deallocate((String *)&local_10);
    }
    iVar3 = *(int *)(param_2 + 0x14);
    if (iVar3 < 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar4 = (char *)cv::String::allocate((String *)&local_10,0x10);
      uVar1 = s_u_>refcount_>__0_0046ac50._8_8_;
      *(undefined8 *)pcVar4 = s_u_>refcount_>__0_0046ac50._0_8_;
      *(undefined8 *)(pcVar4 + 8) = uVar1;
      cv::error(-0xd7,(String *)&local_10,
                "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd4);
      cv::String::deallocate((String *)&local_10);
      iVar3 = *(int *)(param_2 + 0x14);
    }
    if (iVar3 == 0) {
      if ((*(uint *)(param_2 + 0x30) >> 5 & 1) == 0) {
        cv::fastFree(*(void **)(param_2 + 0x20));
        *(undefined8 *)(param_2 + 0x20) = 0;
      }
      cv::UMatData::~UMatData(param_2);
      operator_delete(param_2);
    }
  }
  return;
}


==================================================================

### FUNC 0030a11c (136 bytes) name=getBufferPoolController

/* cv::MatAllocator::getBufferPoolController(char const*) const */

undefined8 * cv::MatAllocator::getBufferPoolController(char *param_1)

{
  int iVar1;
  
  if (((DAT_00531fe8 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00531fe8), iVar1 != 0)) {
    DAT_00531fe0 = &PTR_FUN_004f61c0;
    __cxa_guard_release(&DAT_00531fe8);
    __cxa_atexit(FUN_002fa360,&DAT_00531fe0,&DAT_00502000);
    return &DAT_00531fe0;
  }
  return &DAT_00531fe0;
}


==================================================================

### FUNC 0030a1a4 (652 bytes) name=FUN_0030a1a4

void FUN_0030a1a4(short *param_1,short *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  short sVar3;
  short *psVar4;
  ulong uVar5;
  long lVar6;
  int iVar7;
  ulong uVar8;
  uint uVar9;
  short *psVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  
  if (param_3 == 1) {
    sVar3 = *param_1;
    if (sVar3 < 0) {
      sVar3 = 0;
    }
    *param_2 = sVar3;
    return;
  }
  if ((int)param_3 < 1) {
    return;
  }
  if ((param_2 < param_1 + 8 && param_1 < param_2 + 8) || (param_3 < 0xb)) {
    lVar6 = 0;
    do {
      sVar3 = param_1[lVar6];
      if (sVar3 < 0) {
        sVar3 = 0;
      }
      param_2[lVar6] = sVar3;
      lVar6 = lVar6 + 1;
    } while ((int)lVar6 < (int)param_3);
    return;
  }
  uVar1 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  uVar2 = param_3;
  if (uVar1 < param_3) {
    uVar2 = uVar1;
  }
  if (uVar2 != 0) {
    sVar3 = *param_1;
    if (sVar3 < 0) {
      sVar3 = 0;
    }
    *param_2 = sVar3;
    if (uVar2 != 1) {
      sVar3 = param_1[1];
      if (sVar3 < 0) {
        sVar3 = 0;
      }
      param_2[1] = sVar3;
      if (uVar2 != 2) {
        sVar3 = param_1[2];
        if (sVar3 < 0) {
          sVar3 = 0;
        }
        param_2[2] = sVar3;
        if (uVar2 != 3) {
          sVar3 = param_1[3];
          if (sVar3 < 0) {
            sVar3 = 0;
          }
          param_2[3] = sVar3;
          if (uVar2 != 4) {
            sVar3 = param_1[4];
            if (sVar3 < 0) {
              sVar3 = 0;
            }
            param_2[4] = sVar3;
            if (uVar2 == 5) {
              uVar8 = 5;
            }
            else {
              sVar3 = param_1[5];
              if (sVar3 < 0) {
                sVar3 = 0;
              }
              param_2[5] = sVar3;
              if (uVar2 == 7) {
                sVar3 = param_1[6];
                uVar8 = 7;
                if (sVar3 < 0) {
                  sVar3 = 0;
                }
                param_2[6] = sVar3;
              }
              else {
                uVar8 = 6;
              }
            }
            goto LAB_0030a298;
          }
        }
      }
    }
  }
  uVar8 = (ulong)uVar2;
LAB_0030a298:
  uVar1 = ((param_3 - uVar2) - 8 >> 3) + 1;
  iVar7 = uVar1 * 8;
  if (6 < (param_3 - 1) - uVar2) {
    uVar9 = 0;
    psVar4 = param_2 + uVar2;
    psVar10 = param_1 + uVar2;
    do {
      uVar9 = uVar9 + 1;
      auVar12._0_4_ = (int)*psVar10;
      auVar12._4_4_ = (int)psVar10[1];
      auVar12._8_4_ = (int)psVar10[2];
      auVar12._12_4_ = (int)psVar10[3];
      auVar11._0_4_ = (int)psVar10[4];
      auVar11._4_4_ = (int)psVar10[5];
      auVar11._8_4_ = (int)psVar10[6];
      auVar11._12_4_ = (int)psVar10[7];
      auVar12 = NEON_smax(auVar12,ZEXT816(0),4);
      auVar11 = NEON_smax(auVar11,ZEXT816(0),4);
      *(ulong *)(psVar4 + 4) =
           CONCAT26(auVar11._12_2_,CONCAT24(auVar11._8_2_,CONCAT22(auVar11._4_2_,auVar11._0_2_)));
      *(ulong *)psVar4 =
           CONCAT26(auVar12._12_2_,CONCAT24(auVar12._8_2_,CONCAT22(auVar12._4_2_,auVar12._0_2_)));
      psVar4 = psVar4 + 8;
      psVar10 = psVar10 + 8;
    } while (uVar9 < uVar1);
    uVar8 = (ulong)(uint)((int)uVar8 + iVar7);
    if (param_3 - uVar2 == iVar7) {
      return;
    }
  }
  uVar5 = -(uVar8 >> 0x1f) & 0xfffffffe00000000 | uVar8 << 1;
  iVar7 = (int)uVar8;
  sVar3 = *(short *)((long)param_1 + uVar5);
  if (sVar3 < 0) {
    sVar3 = 0;
  }
  *(short *)((long)param_2 + uVar5) = sVar3;
  if (iVar7 + 1 < (int)param_3) {
    sVar3 = *(short *)((long)param_1 + uVar5 + 2);
    if (sVar3 < 0) {
      sVar3 = 0;
    }
    *(short *)((long)param_2 + uVar5 + 2) = sVar3;
    if (iVar7 + 2 < (int)param_3) {
      sVar3 = *(short *)((long)param_1 + uVar5 + 4);
      if (sVar3 < 0) {
        sVar3 = 0;
      }
      *(short *)((long)param_2 + uVar5 + 4) = sVar3;
      if (iVar7 + 3 < (int)param_3) {
        sVar3 = *(short *)((long)param_1 + uVar5 + 6);
        if (sVar3 < 0) {
          sVar3 = 0;
        }
        *(short *)((long)param_2 + uVar5 + 6) = sVar3;
        if (iVar7 + 4 < (int)param_3) {
          sVar3 = *(short *)((long)param_1 + uVar5 + 8);
          if (sVar3 < 0) {
            sVar3 = 0;
          }
          *(short *)((long)param_2 + uVar5 + 8) = sVar3;
          if (iVar7 + 5 < (int)param_3) {
            sVar3 = *(short *)((long)param_1 + uVar5 + 10);
            if (sVar3 < 0) {
              sVar3 = 0;
            }
            *(short *)((long)param_2 + uVar5 + 10) = sVar3;
            if (iVar7 + 6 < (int)param_3) {
              sVar3 = *(short *)((long)param_1 + uVar5 + 0xc);
              if (sVar3 < 0) {
                sVar3 = 0;
              }
              *(short *)((long)param_2 + uVar5 + 0xc) = sVar3;
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030a430 (956 bytes) name=FUN_0030a430

void FUN_0030a430(short *param_1,short *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  char cVar4;
  int iVar5;
  short *psVar6;
  long lVar7;
  short sVar8;
  uint uVar9;
  uint uVar10;
  char *pcVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  
  if (param_3 == 1) {
    sVar8 = (short)(char)*param_1;
    if ((char)*param_1 < '\0') {
      sVar8 = 0;
    }
    *param_2 = sVar8;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_1 < param_2 + (int)param_3 && param_2 < (short *)((long)param_1 + (long)(int)param_3)
        ) || (param_3 < 0x13)) {
      lVar7 = 0;
      do {
        sVar8 = (short)*(char *)((long)param_1 + lVar7);
        if (*(char *)((long)param_1 + lVar7) < '\0') {
          sVar8 = 0;
        }
        param_2[lVar7] = sVar8;
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
    uVar3 = param_3;
    if (uVar9 < param_3) {
      uVar3 = uVar9;
    }
    uVar9 = uVar3;
    if (uVar3 != 0) {
      sVar8 = (short)(char)*param_1;
      if ((char)*param_1 < '\0') {
        sVar8 = 0;
      }
      *param_2 = sVar8;
      if (uVar3 != 1) {
        sVar8 = (short)*(char *)((long)param_1 + 1);
        if (*(char *)((long)param_1 + 1) < '\0') {
          sVar8 = 0;
        }
        param_2[1] = sVar8;
        if (uVar3 != 2) {
          sVar8 = (short)(char)param_1[1];
          if ((char)param_1[1] < '\0') {
            sVar8 = 0;
          }
          param_2[2] = sVar8;
          if (uVar3 != 3) {
            sVar8 = (short)*(char *)((long)param_1 + 3);
            if (*(char *)((long)param_1 + 3) < '\0') {
              sVar8 = 0;
            }
            param_2[3] = sVar8;
            if (uVar3 != 4) {
              sVar8 = (short)(char)param_1[2];
              if ((char)param_1[2] < '\0') {
                sVar8 = 0;
              }
              param_2[4] = sVar8;
              if (uVar3 == 5) {
                uVar9 = 5;
              }
              else {
                sVar8 = (short)*(char *)((long)param_1 + 5);
                if (*(char *)((long)param_1 + 5) < '\0') {
                  sVar8 = 0;
                }
                param_2[5] = sVar8;
                if (uVar3 == 7) {
                  sVar8 = (short)(char)param_1[3];
                  if ((char)param_1[3] < '\0') {
                    sVar8 = 0;
                  }
                  param_2[6] = sVar8;
                }
                else {
                  uVar9 = 6;
                }
              }
            }
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar5 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar10 = 0;
      psVar6 = param_2 + uVar3;
      pcVar11 = (char *)((long)param_1 + (ulong)uVar3);
      do {
        uVar10 = uVar10 + 1;
        auVar15._0_4_ = (int)(short)*pcVar11;
        auVar15._4_4_ = (int)(short)pcVar11[1];
        auVar15._8_4_ = (int)(short)pcVar11[2];
        auVar15._12_4_ = (int)(short)pcVar11[3];
        auVar13._0_4_ = (int)(short)pcVar11[4];
        auVar13._4_4_ = (int)(short)pcVar11[5];
        auVar13._8_4_ = (int)(short)pcVar11[6];
        auVar13._12_4_ = (int)(short)pcVar11[7];
        auVar14._0_4_ = (int)(short)pcVar11[8];
        auVar14._4_4_ = (int)(short)pcVar11[9];
        auVar14._8_4_ = (int)(short)pcVar11[10];
        auVar14._12_4_ = (int)(short)pcVar11[0xb];
        auVar12._0_4_ = (int)(short)pcVar11[0xc];
        auVar12._4_4_ = (int)(short)pcVar11[0xd];
        auVar12._8_4_ = (int)(short)pcVar11[0xe];
        auVar12._12_4_ = (int)(short)pcVar11[0xf];
        auVar15 = NEON_smax(auVar15,ZEXT816(0),4);
        auVar13 = NEON_smax(auVar13,ZEXT816(0),4);
        auVar14 = NEON_smax(auVar14,ZEXT816(0),4);
        auVar12 = NEON_smax(auVar12,ZEXT816(0),4);
        *(ulong *)(psVar6 + 4) =
             CONCAT26(auVar13._12_2_,CONCAT24(auVar13._8_2_,CONCAT22(auVar13._4_2_,auVar13._0_2_)));
        *(ulong *)psVar6 =
             CONCAT26(auVar15._12_2_,CONCAT24(auVar15._8_2_,CONCAT22(auVar15._4_2_,auVar15._0_2_)));
        psVar6[0xc] = auVar12._0_2_;
        psVar6[0xd] = auVar12._4_2_;
        psVar6[0xe] = auVar12._8_2_;
        psVar6[0xf] = auVar12._12_2_;
        psVar6[8] = auVar14._0_2_;
        psVar6[9] = auVar14._4_2_;
        psVar6[10] = auVar14._8_2_;
        psVar6[0xb] = auVar14._12_2_;
        psVar6 = psVar6 + 0x10;
        pcVar11 = pcVar11 + 0x10;
      } while (uVar10 < uVar1);
      uVar9 = uVar9 + iVar5;
      if (param_3 - uVar3 == iVar5) {
        return;
      }
    }
    iVar5 = uVar9 + 1;
    cVar4 = *(char *)((long)param_1 + (long)(int)uVar9);
    sVar8 = (short)cVar4;
    if (cVar4 < '\0') {
      sVar8 = 0;
    }
    param_2[(int)uVar9] = sVar8;
    if (iVar5 < (int)param_3) {
      iVar2 = uVar9 + 2;
      cVar4 = *(char *)((long)param_1 + (long)iVar5);
      sVar8 = (short)cVar4;
      if (cVar4 < '\0') {
        sVar8 = 0;
      }
      param_2[iVar5] = sVar8;
      if (iVar2 < (int)param_3) {
        iVar5 = uVar9 + 3;
        cVar4 = *(char *)((long)param_1 + (long)iVar2);
        sVar8 = (short)cVar4;
        if (cVar4 < '\0') {
          sVar8 = 0;
        }
        param_2[iVar2] = sVar8;
        if (iVar5 < (int)param_3) {
          iVar2 = uVar9 + 4;
          cVar4 = *(char *)((long)param_1 + (long)iVar5);
          sVar8 = (short)cVar4;
          if (cVar4 < '\0') {
            sVar8 = 0;
          }
          param_2[iVar5] = sVar8;
          if (iVar2 < (int)param_3) {
            iVar5 = uVar9 + 5;
            cVar4 = *(char *)((long)param_1 + (long)iVar2);
            sVar8 = (short)cVar4;
            if (cVar4 < '\0') {
              sVar8 = 0;
            }
            param_2[iVar2] = sVar8;
            if (iVar5 < (int)param_3) {
              iVar2 = uVar9 + 6;
              cVar4 = *(char *)((long)param_1 + (long)iVar5);
              sVar8 = (short)cVar4;
              if (cVar4 < '\0') {
                sVar8 = 0;
              }
              param_2[iVar5] = sVar8;
              if (iVar2 < (int)param_3) {
                iVar5 = uVar9 + 7;
                cVar4 = *(char *)((long)param_1 + (long)iVar2);
                sVar8 = (short)cVar4;
                if (cVar4 < '\0') {
                  sVar8 = 0;
                }
                param_2[iVar2] = sVar8;
                if (iVar5 < (int)param_3) {
                  iVar2 = uVar9 + 8;
                  cVar4 = *(char *)((long)param_1 + (long)iVar5);
                  sVar8 = (short)cVar4;
                  if (cVar4 < '\0') {
                    sVar8 = 0;
                  }
                  param_2[iVar5] = sVar8;
                  if (iVar2 < (int)param_3) {
                    iVar5 = uVar9 + 9;
                    cVar4 = *(char *)((long)param_1 + (long)iVar2);
                    sVar8 = (short)cVar4;
                    if (cVar4 < '\0') {
                      sVar8 = 0;
                    }
                    param_2[iVar2] = sVar8;
                    if (iVar5 < (int)param_3) {
                      iVar2 = uVar9 + 10;
                      cVar4 = *(char *)((long)param_1 + (long)iVar5);
                      sVar8 = (short)cVar4;
                      if (cVar4 < '\0') {
                        sVar8 = 0;
                      }
                      param_2[iVar5] = sVar8;
                      if (iVar2 < (int)param_3) {
                        iVar5 = uVar9 + 0xb;
                        cVar4 = *(char *)((long)param_1 + (long)iVar2);
                        sVar8 = (short)cVar4;
                        if (cVar4 < '\0') {
                          sVar8 = 0;
                        }
                        param_2[iVar2] = sVar8;
                        if (iVar5 < (int)param_3) {
                          iVar2 = uVar9 + 0xc;
                          cVar4 = *(char *)((long)param_1 + (long)iVar5);
                          sVar8 = (short)cVar4;
                          if (cVar4 < '\0') {
                            sVar8 = 0;
                          }
                          param_2[iVar5] = sVar8;
                          if (iVar2 < (int)param_3) {
                            iVar5 = uVar9 + 0xd;
                            cVar4 = *(char *)((long)param_1 + (long)iVar2);
                            sVar8 = (short)cVar4;
                            if (cVar4 < '\0') {
                              sVar8 = 0;
                            }
                            param_2[iVar2] = sVar8;
                            if (iVar5 < (int)param_3) {
                              iVar2 = uVar9 + 0xe;
                              cVar4 = *(char *)((long)param_1 + (long)iVar5);
                              sVar8 = (short)cVar4;
                              if (cVar4 < '\0') {
                                sVar8 = 0;
                              }
                              param_2[iVar5] = sVar8;
                              if (iVar2 < (int)param_3) {
                                cVar4 = *(char *)((long)param_1 + (long)iVar2);
                                sVar8 = (short)cVar4;
                                if (cVar4 < '\0') {
                                  sVar8 = 0;
                                }
                                param_2[iVar2] = sVar8;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030a7ec (1136 bytes) name=FUN_0030a7ec

void FUN_0030a7ec(char *param_1,char *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  char cVar4;
  int iVar5;
  char *pcVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  char *pcVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_3 == 1) {
    cVar4 = *param_1;
    if (cVar4 < '\0') {
      cVar4 = '\0';
    }
    *param_2 = cVar4;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) || (param_3 < 0x13)) {
      lVar7 = 0;
      do {
        cVar4 = param_1[lVar7];
        if (cVar4 < '\0') {
          cVar4 = '\0';
        }
        param_2[lVar7] = cVar4;
        lVar7 = lVar7 + 1;
      } while ((int)lVar7 < (int)param_3);
      return;
    }
    uVar8 = -(int)param_1 & 0xf;
    uVar3 = param_3;
    if (uVar8 < param_3) {
      uVar3 = uVar8;
    }
    uVar8 = uVar3;
    if (uVar3 != 0) {
      cVar4 = *param_1;
      if (cVar4 < '\0') {
        cVar4 = '\0';
      }
      *param_2 = cVar4;
      if (uVar3 != 1) {
        cVar4 = param_1[1];
        if (cVar4 < '\0') {
          cVar4 = '\0';
        }
        param_2[1] = cVar4;
        if (uVar3 != 2) {
          cVar4 = param_1[2];
          if (cVar4 < '\0') {
            cVar4 = '\0';
          }
          param_2[2] = cVar4;
          if (uVar3 != 3) {
            cVar4 = param_1[3];
            if (cVar4 < '\0') {
              cVar4 = '\0';
            }
            param_2[3] = cVar4;
            if (uVar3 != 4) {
              cVar4 = param_1[4];
              if (cVar4 < '\0') {
                cVar4 = '\0';
              }
              param_2[4] = cVar4;
              if (uVar3 == 5) {
                uVar8 = 5;
              }
              else {
                cVar4 = param_1[5];
                if (cVar4 < '\0') {
                  cVar4 = '\0';
                }
                param_2[5] = cVar4;
                if (uVar3 != 6) {
                  cVar4 = param_1[6];
                  if (cVar4 < '\0') {
                    cVar4 = '\0';
                  }
                  param_2[6] = cVar4;
                  if (uVar3 != 7) {
                    cVar4 = param_1[7];
                    if (cVar4 < '\0') {
                      cVar4 = '\0';
                    }
                    param_2[7] = cVar4;
                    if (uVar3 != 8) {
                      cVar4 = param_1[8];
                      if (cVar4 < '\0') {
                        cVar4 = '\0';
                      }
                      param_2[8] = cVar4;
                      if (uVar3 != 9) {
                        cVar4 = param_1[9];
                        if (cVar4 < '\0') {
                          cVar4 = '\0';
                        }
                        param_2[9] = cVar4;
                        if (uVar3 != 10) {
                          cVar4 = param_1[10];
                          if (cVar4 < '\0') {
                            cVar4 = '\0';
                          }
                          param_2[10] = cVar4;
                          if (uVar3 != 0xb) {
                            cVar4 = param_1[0xb];
                            if (cVar4 < '\0') {
                              cVar4 = '\0';
                            }
                            param_2[0xb] = cVar4;
                            if (uVar3 != 0xc) {
                              cVar4 = param_1[0xc];
                              if (cVar4 < '\0') {
                                cVar4 = '\0';
                              }
                              param_2[0xc] = cVar4;
                              if (uVar3 != 0xd) {
                                cVar4 = param_1[0xd];
                                if (cVar4 < '\0') {
                                  cVar4 = '\0';
                                }
                                param_2[0xd] = cVar4;
                                if (uVar3 == 0xf) {
                                  cVar4 = param_1[0xe];
                                  if (cVar4 < '\0') {
                                    cVar4 = '\0';
                                  }
                                  param_2[0xe] = cVar4;
                                }
                                else {
                                  uVar8 = 0xe;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar5 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar9 = 0;
      pcVar6 = param_2 + uVar3;
      pcVar10 = param_1 + uVar3;
      do {
        uVar9 = uVar9 + 1;
        auVar14._0_4_ = (int)(short)*pcVar10;
        auVar14._4_4_ = (int)(short)pcVar10[1];
        auVar14._8_4_ = (int)(short)pcVar10[2];
        auVar14._12_4_ = (int)(short)pcVar10[3];
        auVar13._0_4_ = (int)(short)pcVar10[8];
        auVar13._4_4_ = (int)(short)pcVar10[9];
        auVar13._8_4_ = (int)(short)pcVar10[10];
        auVar13._12_4_ = (int)(short)pcVar10[0xb];
        auVar12._0_4_ = (int)(short)pcVar10[4];
        auVar12._4_4_ = (int)(short)pcVar10[5];
        auVar12._8_4_ = (int)(short)pcVar10[6];
        auVar12._12_4_ = (int)(short)pcVar10[7];
        auVar11._0_4_ = (int)(short)pcVar10[0xc];
        auVar11._4_4_ = (int)(short)pcVar10[0xd];
        auVar11._8_4_ = (int)(short)pcVar10[0xe];
        auVar11._12_4_ = (int)(short)pcVar10[0xf];
        auVar14 = NEON_smax(auVar14,ZEXT816(0),4);
        auVar13 = NEON_smax(auVar13,ZEXT816(0),4);
        auVar12 = NEON_smax(auVar12,ZEXT816(0),4);
        auVar11 = NEON_smax(auVar11,ZEXT816(0),4);
        pcVar6[8] = auVar13[0];
        pcVar6[9] = auVar13[4];
        pcVar6[10] = auVar13[8];
        pcVar6[0xb] = auVar13[0xc];
        pcVar6[0xc] = auVar11[0];
        pcVar6[0xd] = auVar11[4];
        pcVar6[0xe] = auVar11[8];
        pcVar6[0xf] = auVar11[0xc];
        *pcVar6 = auVar14[0];
        pcVar6[1] = auVar14[4];
        pcVar6[2] = auVar14[8];
        pcVar6[3] = auVar14[0xc];
        pcVar6[4] = auVar12[0];
        pcVar6[5] = auVar12[4];
        pcVar6[6] = auVar12[8];
        pcVar6[7] = auVar12[0xc];
        pcVar6 = pcVar6 + 0x10;
        pcVar10 = pcVar10 + 0x10;
      } while (uVar9 < uVar1);
      uVar8 = uVar8 + iVar5;
      if (param_3 - uVar3 == iVar5) {
        return;
      }
    }
    iVar5 = uVar8 + 1;
    cVar4 = param_1[(int)uVar8];
    if (cVar4 < '\0') {
      cVar4 = '\0';
    }
    param_2[(int)uVar8] = cVar4;
    if (iVar5 < (int)param_3) {
      iVar2 = uVar8 + 2;
      cVar4 = param_1[iVar5];
      if (cVar4 < '\0') {
        cVar4 = '\0';
      }
      param_2[iVar5] = cVar4;
      if (iVar2 < (int)param_3) {
        iVar5 = uVar8 + 3;
        cVar4 = param_1[iVar2];
        if (cVar4 < '\0') {
          cVar4 = '\0';
        }
        param_2[iVar2] = cVar4;
        if (iVar5 < (int)param_3) {
          iVar2 = uVar8 + 4;
          cVar4 = param_1[iVar5];
          if (cVar4 < '\0') {
            cVar4 = '\0';
          }
          param_2[iVar5] = cVar4;
          if (iVar2 < (int)param_3) {
            iVar5 = uVar8 + 5;
            cVar4 = param_1[iVar2];
            if (cVar4 < '\0') {
              cVar4 = '\0';
            }
            param_2[iVar2] = cVar4;
            if (iVar5 < (int)param_3) {
              iVar2 = uVar8 + 6;
              cVar4 = param_1[iVar5];
              if (cVar4 < '\0') {
                cVar4 = '\0';
              }
              param_2[iVar5] = cVar4;
              if (iVar2 < (int)param_3) {
                iVar5 = uVar8 + 7;
                cVar4 = param_1[iVar2];
                if (cVar4 < '\0') {
                  cVar4 = '\0';
                }
                param_2[iVar2] = cVar4;
                if (iVar5 < (int)param_3) {
                  iVar2 = uVar8 + 8;
                  cVar4 = param_1[iVar5];
                  if (cVar4 < '\0') {
                    cVar4 = '\0';
                  }
                  param_2[iVar5] = cVar4;
                  if (iVar2 < (int)param_3) {
                    iVar5 = uVar8 + 9;
                    cVar4 = param_1[iVar2];
                    if (cVar4 < '\0') {
                      cVar4 = '\0';
                    }
                    param_2[iVar2] = cVar4;
                    if (iVar5 < (int)param_3) {
                      iVar2 = uVar8 + 10;
                      cVar4 = param_1[iVar5];
                      if (cVar4 < '\0') {
                        cVar4 = '\0';
                      }
                      param_2[iVar5] = cVar4;
                      if (iVar2 < (int)param_3) {
                        iVar5 = uVar8 + 0xb;
                        cVar4 = param_1[iVar2];
                        if (cVar4 < '\0') {
                          cVar4 = '\0';
                        }
                        param_2[iVar2] = cVar4;
                        if (iVar5 < (int)param_3) {
                          iVar2 = uVar8 + 0xc;
                          cVar4 = param_1[iVar5];
                          if (cVar4 < '\0') {
                            cVar4 = '\0';
                          }
                          param_2[iVar5] = cVar4;
                          if (iVar2 < (int)param_3) {
                            iVar5 = uVar8 + 0xd;
                            cVar4 = param_1[iVar2];
                            if (cVar4 < '\0') {
                              cVar4 = '\0';
                            }
                            param_2[iVar2] = cVar4;
                            if (iVar5 < (int)param_3) {
                              iVar2 = uVar8 + 0xe;
                              cVar4 = param_1[iVar5];
                              if (cVar4 < '\0') {
                                cVar4 = '\0';
                              }
                              param_2[iVar5] = cVar4;
                              if (iVar2 < (int)param_3) {
                                cVar4 = param_1[iVar2];
                                if (cVar4 < '\0') {
                                  cVar4 = '\0';
                                }
                                param_2[iVar2] = cVar4;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030ac5c (980 bytes) name=FUN_0030ac5c

void FUN_0030ac5c(ushort *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  int iVar5;
  undefined1 auVar6 [16];
  undefined1 *puVar7;
  long lVar8;
  uint uVar9;
  undefined1 uVar10;
  uint uVar11;
  ushort *puVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  
  if (param_3 == 1) {
    uVar10 = (undefined1)*param_1;
    if (0x7f < *param_1) {
      uVar10 = 0x7f;
    }
    *(undefined1 *)param_2 = uVar10;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + (int)param_3 &&
         param_1 < (ushort *)((long)param_2 + (long)(int)param_3)) || (param_3 < 0x13)) {
      lVar8 = 0;
      do {
        uVar10 = (undefined1)param_1[lVar8];
        if (0x7f < param_1[lVar8]) {
          uVar10 = 0x7f;
        }
        *(undefined1 *)((long)param_2 + lVar8) = uVar10;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
    uVar4 = param_3;
    if (uVar9 < param_3) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if (uVar4 != 0) {
      uVar3 = *param_1;
      if (0x7f < *param_1) {
        uVar3 = 0x7f;
      }
      *(char *)param_2 = (char)uVar3;
      if (uVar4 != 1) {
        uVar10 = (undefined1)param_1[1];
        if (0x7f < param_1[1]) {
          uVar10 = 0x7f;
        }
        *(undefined1 *)((long)param_2 + 1) = uVar10;
        if (uVar4 != 2) {
          uVar10 = (undefined1)param_1[2];
          if (0x7f < param_1[2]) {
            uVar10 = 0x7f;
          }
          *(undefined1 *)(param_2 + 1) = uVar10;
          if (uVar4 != 3) {
            uVar10 = (undefined1)param_1[3];
            if (0x7f < param_1[3]) {
              uVar10 = 0x7f;
            }
            *(undefined1 *)((long)param_2 + 3) = uVar10;
            if (uVar4 != 4) {
              uVar10 = (undefined1)param_1[4];
              if (0x7f < param_1[4]) {
                uVar10 = 0x7f;
              }
              *(undefined1 *)(param_2 + 2) = uVar10;
              if (uVar4 == 5) {
                uVar9 = 5;
              }
              else {
                uVar3 = param_1[5];
                if (0x7f < param_1[5]) {
                  uVar3 = 0x7f;
                }
                *(char *)((long)param_2 + 5) = (char)uVar3;
                if (uVar4 == 7) {
                  uVar10 = (undefined1)param_1[6];
                  if (0x7f < param_1[6]) {
                    uVar10 = 0x7f;
                  }
                  *(undefined1 *)(param_2 + 3) = uVar10;
                }
                else {
                  uVar9 = 6;
                }
              }
            }
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    iVar5 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar4) {
      uVar11 = 0;
      puVar7 = (undefined1 *)((long)param_2 + (ulong)uVar4);
      puVar12 = param_1 + uVar4;
      do {
        uVar11 = uVar11 + 1;
        auVar19._2_2_ = 0;
        auVar19._0_2_ = *puVar12;
        auVar19._4_2_ = puVar12[1];
        auVar19._6_2_ = 0;
        auVar19._8_2_ = puVar12[2];
        auVar19._10_2_ = 0;
        auVar19._12_2_ = puVar12[3];
        auVar19._14_2_ = 0;
        auVar15._2_2_ = 0;
        auVar15._0_2_ = puVar12[4];
        auVar15._4_2_ = puVar12[5];
        auVar15._6_2_ = 0;
        auVar15._8_2_ = puVar12[6];
        auVar15._10_2_ = 0;
        auVar15._12_2_ = puVar12[7];
        auVar15._14_2_ = 0;
        auVar14._8_4_ = 0x7f;
        auVar14._0_8_ = 0x7f0000007f;
        auVar14._12_4_ = 0x7f;
        auVar19 = NEON_umin(auVar19,auVar14,4);
        auVar17._2_2_ = 0;
        auVar17._0_2_ = puVar12[8];
        auVar17._4_2_ = puVar12[9];
        auVar17._6_2_ = 0;
        auVar17._8_2_ = puVar12[10];
        auVar17._10_2_ = 0;
        auVar17._12_2_ = puVar12[0xb];
        auVar17._14_2_ = 0;
        auVar13._2_2_ = 0;
        auVar13._0_2_ = puVar12[0xc];
        auVar13._4_2_ = puVar12[0xd];
        auVar13._6_2_ = 0;
        auVar13._8_2_ = puVar12[0xe];
        auVar13._10_2_ = 0;
        auVar13._12_2_ = puVar12[0xf];
        auVar13._14_2_ = 0;
        auVar16._8_4_ = 0x7f;
        auVar16._0_8_ = 0x7f0000007f;
        auVar16._12_4_ = 0x7f;
        auVar16 = NEON_umin(auVar15,auVar16,4);
        auVar18._8_4_ = 0x7f;
        auVar18._0_8_ = 0x7f0000007f;
        auVar18._12_4_ = 0x7f;
        auVar18 = NEON_umin(auVar17,auVar18,4);
        auVar6._8_4_ = 0x7f;
        auVar6._0_8_ = 0x7f0000007f;
        auVar6._12_4_ = 0x7f;
        auVar14 = NEON_umin(auVar13,auVar6,4);
        puVar7[8] = auVar18[0];
        puVar7[9] = auVar18[4];
        puVar7[10] = auVar18[8];
        puVar7[0xb] = auVar18[0xc];
        puVar7[0xc] = auVar14[0];
        puVar7[0xd] = auVar14[4];
        puVar7[0xe] = auVar14[8];
        puVar7[0xf] = auVar14[0xc];
        *puVar7 = auVar19[0];
        puVar7[1] = auVar19[4];
        puVar7[2] = auVar19[8];
        puVar7[3] = auVar19[0xc];
        puVar7[4] = auVar16[0];
        puVar7[5] = auVar16[4];
        puVar7[6] = auVar16[8];
        puVar7[7] = auVar16[0xc];
        puVar7 = puVar7 + 0x10;
        puVar12 = puVar12 + 0x10;
      } while (uVar11 < uVar1);
      uVar9 = uVar9 + iVar5;
      if (param_3 - uVar4 == iVar5) {
        return;
      }
    }
    iVar5 = uVar9 + 1;
    uVar3 = param_1[(int)uVar9];
    if (0x7f < param_1[(int)uVar9]) {
      uVar3 = 0x7f;
    }
    *(char *)((long)param_2 + (long)(int)uVar9) = (char)uVar3;
    if (iVar5 < (int)param_3) {
      iVar2 = uVar9 + 2;
      uVar10 = (undefined1)param_1[iVar5];
      if (0x7f < param_1[iVar5]) {
        uVar10 = 0x7f;
      }
      *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
      if (iVar2 < (int)param_3) {
        iVar5 = uVar9 + 3;
        uVar10 = (undefined1)param_1[iVar2];
        if (0x7f < param_1[iVar2]) {
          uVar10 = 0x7f;
        }
        *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
        if (iVar5 < (int)param_3) {
          iVar2 = uVar9 + 4;
          uVar10 = (undefined1)param_1[iVar5];
          if (0x7f < param_1[iVar5]) {
            uVar10 = 0x7f;
          }
          *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
          if (iVar2 < (int)param_3) {
            iVar5 = uVar9 + 5;
            uVar3 = param_1[iVar2];
            if (0x7f < param_1[iVar2]) {
              uVar3 = 0x7f;
            }
            *(char *)((long)param_2 + (long)iVar2) = (char)uVar3;
            if (iVar5 < (int)param_3) {
              iVar2 = uVar9 + 6;
              uVar10 = (undefined1)param_1[iVar5];
              if (0x7f < param_1[iVar5]) {
                uVar10 = 0x7f;
              }
              *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
              if (iVar2 < (int)param_3) {
                iVar5 = uVar9 + 7;
                uVar10 = (undefined1)param_1[iVar2];
                if (0x7f < param_1[iVar2]) {
                  uVar10 = 0x7f;
                }
                *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                if (iVar5 < (int)param_3) {
                  iVar2 = uVar9 + 8;
                  uVar10 = (undefined1)param_1[iVar5];
                  if (0x7f < param_1[iVar5]) {
                    uVar10 = 0x7f;
                  }
                  *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                  if (iVar2 < (int)param_3) {
                    iVar5 = uVar9 + 9;
                    uVar10 = (undefined1)param_1[iVar2];
                    if (0x7f < param_1[iVar2]) {
                      uVar10 = 0x7f;
                    }
                    *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                    if (iVar5 < (int)param_3) {
                      iVar2 = uVar9 + 10;
                      uVar10 = (undefined1)param_1[iVar5];
                      if (0x7f < param_1[iVar5]) {
                        uVar10 = 0x7f;
                      }
                      *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                      if (iVar2 < (int)param_3) {
                        iVar5 = uVar9 + 0xb;
                        uVar3 = param_1[iVar2];
                        if (0x7f < param_1[iVar2]) {
                          uVar3 = 0x7f;
                        }
                        *(char *)((long)param_2 + (long)iVar2) = (char)uVar3;
                        if (iVar5 < (int)param_3) {
                          iVar2 = uVar9 + 0xc;
                          uVar10 = (undefined1)param_1[iVar5];
                          if (0x7f < param_1[iVar5]) {
                            uVar10 = 0x7f;
                          }
                          *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                          if (iVar2 < (int)param_3) {
                            iVar5 = uVar9 + 0xd;
                            uVar10 = (undefined1)param_1[iVar2];
                            if (0x7f < param_1[iVar2]) {
                              uVar10 = 0x7f;
                            }
                            *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                            if (iVar5 < (int)param_3) {
                              iVar2 = uVar9 + 0xe;
                              uVar10 = (undefined1)param_1[iVar5];
                              if (0x7f < param_1[iVar5]) {
                                uVar10 = 0x7f;
                              }
                              *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                              if (iVar2 < (int)param_3) {
                                uVar10 = (undefined1)param_1[iVar2];
                                if (0x7f < param_1[iVar2]) {
                                  uVar10 = 0x7f;
                                }
                                *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030b030 (980 bytes) name=FUN_0030b030

void FUN_0030b030(ushort *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  int iVar5;
  undefined1 auVar6 [16];
  undefined1 *puVar7;
  long lVar8;
  uint uVar9;
  undefined1 uVar10;
  uint uVar11;
  ushort *puVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  
  if (param_3 == 1) {
    uVar10 = (undefined1)*param_1;
    if (0xff < *param_1) {
      uVar10 = 0xff;
    }
    *(undefined1 *)param_2 = uVar10;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + (int)param_3 &&
         param_1 < (ushort *)((long)param_2 + (long)(int)param_3)) || (param_3 < 0x13)) {
      lVar8 = 0;
      do {
        uVar10 = (undefined1)param_1[lVar8];
        if (0xff < param_1[lVar8]) {
          uVar10 = 0xff;
        }
        *(undefined1 *)((long)param_2 + lVar8) = uVar10;
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < (int)param_3);
      return;
    }
    uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
    uVar4 = param_3;
    if (uVar9 < param_3) {
      uVar4 = uVar9;
    }
    uVar9 = uVar4;
    if (uVar4 != 0) {
      uVar3 = *param_1;
      if (0xff < *param_1) {
        uVar3 = 0xff;
      }
      *(char *)param_2 = (char)uVar3;
      if (uVar4 != 1) {
        uVar10 = (undefined1)param_1[1];
        if (0xff < param_1[1]) {
          uVar10 = 0xff;
        }
        *(undefined1 *)((long)param_2 + 1) = uVar10;
        if (uVar4 != 2) {
          uVar10 = (undefined1)param_1[2];
          if (0xff < param_1[2]) {
            uVar10 = 0xff;
          }
          *(undefined1 *)(param_2 + 1) = uVar10;
          if (uVar4 != 3) {
            uVar10 = (undefined1)param_1[3];
            if (0xff < param_1[3]) {
              uVar10 = 0xff;
            }
            *(undefined1 *)((long)param_2 + 3) = uVar10;
            if (uVar4 != 4) {
              uVar10 = (undefined1)param_1[4];
              if (0xff < param_1[4]) {
                uVar10 = 0xff;
              }
              *(undefined1 *)(param_2 + 2) = uVar10;
              if (uVar4 == 5) {
                uVar9 = 5;
              }
              else {
                uVar3 = param_1[5];
                if (0xff < param_1[5]) {
                  uVar3 = 0xff;
                }
                *(char *)((long)param_2 + 5) = (char)uVar3;
                if (uVar4 == 7) {
                  uVar10 = (undefined1)param_1[6];
                  if (0xff < param_1[6]) {
                    uVar10 = 0xff;
                  }
                  *(undefined1 *)(param_2 + 3) = uVar10;
                }
                else {
                  uVar9 = 6;
                }
              }
            }
          }
        }
      }
    }
                    /* try { // try from 0030b148 to 0040b14b has its CatchHandler @ 0030a110 */
    uVar1 = ((param_3 - uVar4) - 0x10 >> 4) + 1;
    iVar5 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar4) {
      uVar11 = 0;
      puVar7 = (undefined1 *)((long)param_2 + (ulong)uVar4);
      puVar12 = param_1 + uVar4;
      do {
        uVar11 = uVar11 + 1;
        auVar19._2_2_ = 0;
        auVar19._0_2_ = *puVar12;
        auVar19._4_2_ = puVar12[1];
        auVar19._6_2_ = 0;
        auVar19._8_2_ = puVar12[2];
        auVar19._10_2_ = 0;
        auVar19._12_2_ = puVar12[3];
        auVar19._14_2_ = 0;
        auVar15._2_2_ = 0;
        auVar15._0_2_ = puVar12[4];
        auVar15._4_2_ = puVar12[5];
        auVar15._6_2_ = 0;
        auVar15._8_2_ = puVar12[6];
        auVar15._10_2_ = 0;
        auVar15._12_2_ = puVar12[7];
        auVar15._14_2_ = 0;
        auVar14._8_4_ = 0xff;
        auVar14._0_8_ = 0xff000000ff;
        auVar14._12_4_ = 0xff;
        auVar19 = NEON_umin(auVar19,auVar14,4);
        auVar17._2_2_ = 0;
        auVar17._0_2_ = puVar12[8];
                    /* try { // try from 0030b18c to 0040b18f has its CatchHandler @ 0030b360 */
        auVar17._4_2_ = puVar12[9];
        auVar17._6_2_ = 0;
        auVar17._8_2_ = puVar12[10];
        auVar17._10_2_ = 0;
        auVar17._12_2_ = puVar12[0xb];
        auVar17._14_2_ = 0;
        auVar13._2_2_ = 0;
        auVar13._0_2_ = puVar12[0xc];
        auVar13._4_2_ = puVar12[0xd];
        auVar13._6_2_ = 0;
        auVar13._8_2_ = puVar12[0xe];
        auVar13._10_2_ = 0;
        auVar13._12_2_ = puVar12[0xf];
        auVar13._14_2_ = 0;
        auVar16._8_4_ = 0xff;
        auVar16._0_8_ = 0xff000000ff;
        auVar16._12_4_ = 0xff;
                    /* try { // try from 0030b194 to 0040b353 has its CatchHandler @ 0030a110 */
        auVar16 = NEON_umin(auVar15,auVar16,4);
        auVar18._8_4_ = 0xff;
        auVar18._0_8_ = 0xff000000ff;
        auVar18._12_4_ = 0xff;
        auVar18 = NEON_umin(auVar17,auVar18,4);
        auVar6._8_4_ = 0xff;
        auVar6._0_8_ = 0xff000000ff;
        auVar6._12_4_ = 0xff;
        auVar14 = NEON_umin(auVar13,auVar6,4);
        puVar7[8] = auVar18[0];
        puVar7[9] = auVar18[4];
        puVar7[10] = auVar18[8];
        puVar7[0xb] = auVar18[0xc];
        puVar7[0xc] = auVar14[0];
        puVar7[0xd] = auVar14[4];
        puVar7[0xe] = auVar14[8];
        puVar7[0xf] = auVar14[0xc];
        *puVar7 = auVar19[0];
        puVar7[1] = auVar19[4];
        puVar7[2] = auVar19[8];
        puVar7[3] = auVar19[0xc];
        puVar7[4] = auVar16[0];
        puVar7[5] = auVar16[4];
        puVar7[6] = auVar16[8];
        puVar7[7] = auVar16[0xc];
        puVar7 = puVar7 + 0x10;
        puVar12 = puVar12 + 0x10;
      } while (uVar11 < uVar1);
      uVar9 = uVar9 + iVar5;
      if (param_3 - uVar4 == iVar5) {
        return;
      }
    }
    iVar5 = uVar9 + 1;
    uVar3 = param_1[(int)uVar9];
    if (0xff < param_1[(int)uVar9]) {
      uVar3 = 0xff;
    }
    *(char *)((long)param_2 + (long)(int)uVar9) = (char)uVar3;
    if (iVar5 < (int)param_3) {
      iVar2 = uVar9 + 2;
      uVar10 = (undefined1)param_1[iVar5];
      if (0xff < param_1[iVar5]) {
        uVar10 = 0xff;
      }
      *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
      if (iVar2 < (int)param_3) {
        iVar5 = uVar9 + 3;
        uVar10 = (undefined1)param_1[iVar2];
        if (0xff < param_1[iVar2]) {
          uVar10 = 0xff;
        }
        *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
        if (iVar5 < (int)param_3) {
          iVar2 = uVar9 + 4;
          uVar10 = (undefined1)param_1[iVar5];
          if (0xff < param_1[iVar5]) {
            uVar10 = 0xff;
          }
          *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
          if (iVar2 < (int)param_3) {
            iVar5 = uVar9 + 5;
            uVar3 = param_1[iVar2];
            if (0xff < param_1[iVar2]) {
              uVar3 = 0xff;
            }
            *(char *)((long)param_2 + (long)iVar2) = (char)uVar3;
            if (iVar5 < (int)param_3) {
              iVar2 = uVar9 + 6;
              uVar10 = (undefined1)param_1[iVar5];
              if (0xff < param_1[iVar5]) {
                uVar10 = 0xff;
              }
              *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
              if (iVar2 < (int)param_3) {
                iVar5 = uVar9 + 7;
                uVar10 = (undefined1)param_1[iVar2];
                if (0xff < param_1[iVar2]) {
                  uVar10 = 0xff;
                }
                *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                if (iVar5 < (int)param_3) {
                  iVar2 = uVar9 + 8;
                  uVar10 = (undefined1)param_1[iVar5];
                  if (0xff < param_1[iVar5]) {
                    uVar10 = 0xff;
                  }
                  *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                  if (iVar2 < (int)param_3) {
                    iVar5 = uVar9 + 9;
                    uVar10 = (undefined1)param_1[iVar2];
                    if (0xff < param_1[iVar2]) {
                      uVar10 = 0xff;
                    }
                    *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                    if (iVar5 < (int)param_3) {
                      iVar2 = uVar9 + 10;
                      uVar10 = (undefined1)param_1[iVar5];
                      if (0xff < param_1[iVar5]) {
                        uVar10 = 0xff;
                      }
                      *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                      if (iVar2 < (int)param_3) {
                        iVar5 = uVar9 + 0xb;
                        uVar3 = param_1[iVar2];
                        if (0xff < param_1[iVar2]) {
                          uVar3 = 0xff;
                        }
                        *(char *)((long)param_2 + (long)iVar2) = (char)uVar3;
                        if (iVar5 < (int)param_3) {
                          iVar2 = uVar9 + 0xc;
                          uVar10 = (undefined1)param_1[iVar5];
                          if (0xff < param_1[iVar5]) {
                            uVar10 = 0xff;
                          }
                          *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                          if (iVar2 < (int)param_3) {
                            iVar5 = uVar9 + 0xd;
                    /* catch() { ... } // from try @ 0030b18c with catch @ 0030b360 */
                            uVar10 = (undefined1)param_1[iVar2];
                            if (0xff < param_1[iVar2]) {
                              uVar10 = 0xff;
                            }
                            *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                    /* try { // try from 0030b370 to 0040b373 has its CatchHandler @ 0030a110 */
                            if (iVar5 < (int)param_3) {
                    /* catch() { ... } // from try @ 0030b720 with catch @ 0030b374
                       catch() { ... } // from try @ 0030ba54 with catch @ 0030b374
                       catch() { ... } // from try @ 0030bc30 with catch @ 0030b374 */
                              iVar2 = uVar9 + 0xe;
                              uVar10 = (undefined1)param_1[iVar5];
                              if (0xff < param_1[iVar5]) {
                                uVar10 = 0xff;
                              }
                              *(undefined1 *)((long)param_2 + (long)iVar5) = uVar10;
                              if (iVar2 < (int)param_3) {
                                uVar10 = (undefined1)param_1[iVar2];
                                if (0xff < param_1[iVar2]) {
                                  uVar10 = 0xff;
                                }
                                *(undefined1 *)((long)param_2 + (long)iVar2) = uVar10;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030b404 (672 bytes) name=FUN_0030b404

void FUN_0030b404(ushort *param_1,ushort *param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  undefined1 auVar3 [16];
  ushort uVar4;
  ushort *puVar5;
  long lVar6;
  int iVar7;
  ulong uVar8;
  ulong uVar9;
  uint uVar10;
  ushort *puVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  
  if (param_3 == 1) {
    uVar4 = *param_1;
    if (0x7fff < uVar4) {
      uVar4 = 0x7fff;
    }
    *param_2 = uVar4;
    return;
  }
  if ((int)param_3 < 1) {
    return;
  }
  if ((param_2 < param_1 + 8 && param_1 < param_2 + 8) || (param_3 < 0xb)) {
    lVar6 = 0;
    do {
      uVar4 = param_1[lVar6];
      if (0x7fff < uVar4) {
        uVar4 = 0x7fff;
      }
      param_2[lVar6] = uVar4;
      lVar6 = lVar6 + 1;
    } while ((int)lVar6 < (int)param_3);
    return;
  }
  uVar1 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  uVar2 = param_3;
  if (uVar1 < param_3) {
    uVar2 = uVar1;
  }
  if (uVar2 != 0) {
    uVar4 = *param_1;
    if (0x7fff < *param_1) {
      uVar4 = 0x7fff;
    }
    *param_2 = uVar4;
    if (uVar2 != 1) {
      uVar4 = param_1[1];
      if (0x7fff < uVar4) {
        uVar4 = 0x7fff;
      }
      param_2[1] = uVar4;
      if (uVar2 != 2) {
        uVar4 = param_1[2];
        if (0x7fff < uVar4) {
          uVar4 = 0x7fff;
        }
        param_2[2] = uVar4;
        if (uVar2 != 3) {
          uVar4 = param_1[3];
          if (0x7fff < uVar4) {
            uVar4 = 0x7fff;
          }
          param_2[3] = uVar4;
          if (uVar2 != 4) {
            uVar4 = param_1[4];
            if (0x7fff < uVar4) {
              uVar4 = 0x7fff;
            }
            param_2[4] = uVar4;
            if (uVar2 == 5) {
              uVar8 = 5;
            }
            else {
              uVar4 = param_1[5];
              if (0x7fff < param_1[5]) {
                uVar4 = 0x7fff;
              }
              param_2[5] = uVar4;
              if (uVar2 == 7) {
                uVar4 = param_1[6];
                uVar8 = 7;
                if (0x7fff < uVar4) {
                  uVar4 = 0x7fff;
                }
                param_2[6] = uVar4;
              }
              else {
                uVar8 = 6;
              }
            }
            goto LAB_0030b500;
          }
        }
      }
    }
  }
  uVar8 = (ulong)uVar2;
LAB_0030b500:
  uVar1 = ((param_3 - uVar2) - 8 >> 3) + 1;
  iVar7 = uVar1 * 8;
  if (6 < (param_3 - 1) - uVar2) {
    uVar10 = 0;
    puVar5 = param_2 + uVar2;
    puVar11 = param_1 + uVar2;
    do {
      uVar10 = uVar10 + 1;
      auVar14._2_2_ = 0;
      auVar14._0_2_ = *puVar11;
      auVar14._4_2_ = puVar11[1];
      auVar14._6_2_ = 0;
      auVar14._8_2_ = puVar11[2];
      auVar14._10_2_ = 0;
      auVar14._12_2_ = puVar11[3];
      auVar14._14_2_ = 0;
      auVar12._2_2_ = 0;
      auVar12._0_2_ = puVar11[4];
      auVar12._4_2_ = puVar11[5];
      auVar12._6_2_ = 0;
      auVar12._8_2_ = puVar11[6];
      auVar12._10_2_ = 0;
      auVar12._12_2_ = puVar11[7];
      auVar12._14_2_ = 0;
      auVar13._8_4_ = 0x7fff;
      auVar13._0_8_ = 0x7fff00007fff;
      auVar13._12_4_ = 0x7fff;
      auVar14 = NEON_smin(auVar14,auVar13,4);
      auVar3._8_4_ = 0x7fff;
      auVar3._0_8_ = 0x7fff00007fff;
      auVar3._12_4_ = 0x7fff;
      auVar13 = NEON_smin(auVar12,auVar3,4);
      *(ulong *)(puVar5 + 4) =
           CONCAT26(auVar13._12_2_,CONCAT24(auVar13._8_2_,CONCAT22(auVar13._4_2_,auVar13._0_2_)));
      *(ulong *)puVar5 =
           CONCAT26(auVar14._12_2_,CONCAT24(auVar14._8_2_,CONCAT22(auVar14._4_2_,auVar14._0_2_)));
      puVar5 = puVar5 + 8;
      puVar11 = puVar11 + 8;
    } while (uVar10 < uVar1);
    uVar8 = (ulong)(uint)((int)uVar8 + iVar7);
    if (param_3 - uVar2 == iVar7) {
      return;
    }
  }
  uVar9 = -(uVar8 >> 0x1f) & 0xfffffffe00000000 | uVar8 << 1;
  iVar7 = (int)uVar8;
  uVar4 = *(ushort *)((long)param_1 + uVar9);
  if (0x7fff < *(ushort *)((long)param_1 + uVar9)) {
    uVar4 = 0x7fff;
  }
  *(ushort *)((long)param_2 + uVar9) = uVar4;
  if (iVar7 + 1 < (int)param_3) {
    uVar4 = *(ushort *)((long)param_1 + uVar9 + 2);
    if (0x7fff < uVar4) {
      uVar4 = 0x7fff;
    }
    *(ushort *)((long)param_2 + uVar9 + 2) = uVar4;
    if (iVar7 + 2 < (int)param_3) {
      uVar4 = *(ushort *)((long)param_1 + uVar9 + 4);
      if (0x7fff < uVar4) {
        uVar4 = 0x7fff;
      }
      *(ushort *)((long)param_2 + uVar9 + 4) = uVar4;
      if (iVar7 + 3 < (int)param_3) {
        uVar4 = *(ushort *)((long)param_1 + uVar9 + 6);
        if (0x7fff < uVar4) {
          uVar4 = 0x7fff;
        }
        *(ushort *)((long)param_2 + uVar9 + 6) = uVar4;
        if (iVar7 + 4 < (int)param_3) {
          uVar4 = *(ushort *)((long)param_1 + uVar9 + 8);
          if (0x7fff < uVar4) {
            uVar4 = 0x7fff;
          }
          *(ushort *)((long)param_2 + uVar9 + 8) = uVar4;
          if (iVar7 + 5 < (int)param_3) {
            uVar4 = *(ushort *)((long)param_1 + uVar9 + 10);
            if (0x7fff < uVar4) {
              uVar4 = 0x7fff;
            }
            *(ushort *)((long)param_2 + uVar9 + 10) = uVar4;
            if (iVar7 + 6 < (int)param_3) {
              uVar4 = *(ushort *)((long)param_1 + uVar9 + 0xc);
              if (0x7fff < uVar4) {
                uVar4 = 0x7fff;
              }
              *(ushort *)((long)param_2 + uVar9 + 0xc) = uVar4;
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030b6a4 (1160 bytes) name=FUN_0030b6a4

void FUN_0030b6a4(byte *param_1,byte *param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  byte bVar7;
  byte *pbVar8;
  long lVar9;
  uint uVar10;
  uint uVar11;
  byte *pbVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  
  if (param_3 == 1) {
    bVar7 = *param_1;
    if (0x7f < bVar7) {
      bVar7 = 0x7f;
    }
    *param_2 = bVar7;
    return;
  }
  if (0 < (int)param_3) {
    if ((param_2 < param_1 + 0x10 && param_1 < param_2 + 0x10) || (param_3 < 0x13)) {
      lVar9 = 0;
      do {
        bVar7 = param_1[lVar9];
        if (0x7f < bVar7) {
          bVar7 = 0x7f;
        }
        param_2[lVar9] = bVar7;
        lVar9 = lVar9 + 1;
      } while ((int)lVar9 < (int)param_3);
      return;
    }
    uVar10 = -(int)param_1 & 0xf;
    uVar3 = param_3;
    if (uVar10 < param_3) {
      uVar3 = uVar10;
    }
    uVar10 = uVar3;
    if (uVar3 != 0) {
      bVar7 = *param_1;
      if (0x7f < *param_1) {
        bVar7 = 0x7f;
      }
      *param_2 = bVar7;
      if (uVar3 != 1) {
        bVar7 = param_1[1];
        if (0x7f < bVar7) {
          bVar7 = 0x7f;
        }
        param_2[1] = bVar7;
                    /* try { // try from 0030b720 to 0040ba0b has its CatchHandler @ 0030b374 */
        if (uVar3 != 2) {
          bVar7 = param_1[2];
          if (0x7f < bVar7) {
            bVar7 = 0x7f;
          }
          param_2[2] = bVar7;
          if (uVar3 != 3) {
            bVar7 = param_1[3];
            if (0x7f < bVar7) {
              bVar7 = 0x7f;
            }
            param_2[3] = bVar7;
            if (uVar3 != 4) {
              bVar7 = param_1[4];
              if (0x7f < bVar7) {
                bVar7 = 0x7f;
              }
              param_2[4] = bVar7;
              if (uVar3 == 5) {
                uVar10 = 5;
              }
              else {
                bVar7 = param_1[5];
                if (0x7f < param_1[5]) {
                  bVar7 = 0x7f;
                }
                param_2[5] = bVar7;
                if (uVar3 != 6) {
                  bVar7 = param_1[6];
                  if (0x7f < bVar7) {
                    bVar7 = 0x7f;
                  }
                  param_2[6] = bVar7;
                  if (uVar3 != 7) {
                    bVar7 = param_1[7];
                    if (0x7f < bVar7) {
                      bVar7 = 0x7f;
                    }
                    param_2[7] = bVar7;
                    if (uVar3 != 8) {
                      bVar7 = param_1[8];
                      if (0x7f < bVar7) {
                        bVar7 = 0x7f;
                      }
                      param_2[8] = bVar7;
                      if (uVar3 != 9) {
                        bVar7 = param_1[9];
                        if (0x7f < param_1[9]) {
                          bVar7 = 0x7f;
                        }
                        param_2[9] = bVar7;
                        if (uVar3 != 10) {
                          bVar7 = param_1[10];
                          if (0x7f < bVar7) {
                            bVar7 = 0x7f;
                          }
                          param_2[10] = bVar7;
                          if (uVar3 != 0xb) {
                            bVar7 = param_1[0xb];
                            if (0x7f < bVar7) {
                              bVar7 = 0x7f;
                            }
                            param_2[0xb] = bVar7;
                            if (uVar3 != 0xc) {
                              bVar7 = param_1[0xc];
                              if (0x7f < bVar7) {
                                bVar7 = 0x7f;
                              }
                              param_2[0xc] = bVar7;
                              if (uVar3 != 0xd) {
                                bVar7 = param_1[0xd];
                                if (0x7f < bVar7) {
                                  bVar7 = 0x7f;
                                }
                                param_2[0xd] = bVar7;
                                if (uVar3 == 0xf) {
                                  bVar7 = param_1[0xe];
                                  if (0x7f < bVar7) {
                                    bVar7 = 0x7f;
                                  }
                                  param_2[0xe] = bVar7;
                                }
                                else {
                                  uVar10 = 0xe;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    uVar1 = ((param_3 - uVar3) - 0x10 >> 4) + 1;
    iVar4 = uVar1 * 0x10;
    if (0xe < (param_3 - 1) - uVar3) {
      uVar11 = 0;
      pbVar8 = param_2 + uVar3;
      pbVar12 = param_1 + uVar3;
      do {
        uVar11 = uVar11 + 1;
        auVar18._6_2_ = 0;
        auVar18._0_6_ =
             (uint6)CONCAT14(pbVar12[1],(uint)CONCAT12(pbVar12[1],(ushort)*pbVar12)) &
             0xffff0000ffff;
        auVar18[8] = pbVar12[2];
        auVar18._9_3_ = 0;
        auVar18[0xc] = pbVar12[3];
        auVar18._13_3_ = 0;
        auVar17._6_2_ = 0;
        auVar17._0_6_ =
             (uint6)CONCAT14(pbVar12[9],(uint)CONCAT12(pbVar12[9],(ushort)pbVar12[8])) &
             0xffff0000ffff;
        auVar17[8] = pbVar12[10];
        auVar17._9_3_ = 0;
        auVar17[0xc] = pbVar12[0xb];
        auVar17._13_3_ = 0;
        auVar15._1_3_ = 0;
        auVar15[0] = pbVar12[4];
        auVar15[4] = pbVar12[5];
        auVar15._5_3_ = 0;
        auVar15[8] = pbVar12[6];
        auVar15._9_3_ = 0;
        auVar15[0xc] = pbVar12[7];
        auVar15._13_3_ = 0;
        auVar13._1_3_ = 0;
        auVar13[0] = pbVar12[0xc];
        auVar13[4] = pbVar12[0xd];
        auVar13._5_3_ = 0;
        auVar13[8] = pbVar12[0xe];
        auVar13._9_3_ = 0;
        auVar13[0xc] = pbVar12[0xf];
        auVar13._13_3_ = 0;
        auVar14._8_4_ = 0x7f;
        auVar14._0_8_ = 0x7f0000007f;
        auVar14._12_4_ = 0x7f;
        auVar18 = NEON_smin(auVar18,auVar14,4);
        auVar16._8_4_ = 0x7f;
        auVar16._0_8_ = 0x7f0000007f;
        auVar16._12_4_ = 0x7f;
        auVar17 = NEON_smin(auVar17,auVar16,4);
        auVar5._8_4_ = 0x7f;
        auVar5._0_8_ = 0x7f0000007f;
        auVar5._12_4_ = 0x7f;
        auVar16 = NEON_smin(auVar15,auVar5,4);
        auVar6._8_4_ = 0x7f;
        auVar6._0_8_ = 0x7f0000007f;
        auVar6._12_4_ = 0x7f;
        auVar14 = NEON_smin(auVar13,auVar6,4);
        pbVar8[8] = auVar17[0];
        pbVar8[9] = auVar17[4];
        pbVar8[10] = auVar17[8];
        pbVar8[0xb] = auVar17[0xc];
        pbVar8[0xc] = auVar14[0];
        pbVar8[0xd] = auVar14[4];
        pbVar8[0xe] = auVar14[8];
        pbVar8[0xf] = auVar14[0xc];
        *pbVar8 = auVar18[0];
        pbVar8[1] = auVar18[4];
        pbVar8[2] = auVar18[8];
        pbVar8[3] = auVar18[0xc];
        pbVar8[4] = auVar16[0];
        pbVar8[5] = auVar16[4];
        pbVar8[6] = auVar16[8];
        pbVar8[7] = auVar16[0xc];
        pbVar8 = pbVar8 + 0x10;
        pbVar12 = pbVar12 + 0x10;
      } while (uVar11 < uVar1);
      uVar10 = uVar10 + iVar4;
      if (param_3 - uVar3 == iVar4) {
        return;
      }
    }
    iVar4 = uVar10 + 1;
    bVar7 = param_1[(int)uVar10];
    if (0x7f < param_1[(int)uVar10]) {
      bVar7 = 0x7f;
    }
    param_2[(int)uVar10] = bVar7;
    if (iVar4 < (int)param_3) {
      iVar2 = uVar10 + 2;
      bVar7 = param_1[iVar4];
      if (0x7f < bVar7) {
        bVar7 = 0x7f;
      }
      param_2[iVar4] = bVar7;
      if (iVar2 < (int)param_3) {
        iVar4 = uVar10 + 3;
        bVar7 = param_1[iVar2];
        if (0x7f < bVar7) {
          bVar7 = 0x7f;
        }
        param_2[iVar2] = bVar7;
        if (iVar4 < (int)param_3) {
          iVar2 = uVar10 + 4;
          bVar7 = param_1[iVar4];
          if (0x7f < bVar7) {
            bVar7 = 0x7f;
          }
          param_2[iVar4] = bVar7;
          if (iVar2 < (int)param_3) {
            iVar4 = uVar10 + 5;
            bVar7 = param_1[iVar2];
            if (0x7f < param_1[iVar2]) {
              bVar7 = 0x7f;
            }
            param_2[iVar2] = bVar7;
            if (iVar4 < (int)param_3) {
              iVar2 = uVar10 + 6;
              bVar7 = param_1[iVar4];
              if (0x7f < bVar7) {
                bVar7 = 0x7f;
              }
              param_2[iVar4] = bVar7;
              if (iVar2 < (int)param_3) {
                iVar4 = uVar10 + 7;
                bVar7 = param_1[iVar2];
                if (0x7f < bVar7) {
                  bVar7 = 0x7f;
                }
                param_2[iVar2] = bVar7;
                if (iVar4 < (int)param_3) {
                  iVar2 = uVar10 + 8;
                  bVar7 = param_1[iVar4];
                  if (0x7f < bVar7) {
                    bVar7 = 0x7f;
                  }
                  param_2[iVar4] = bVar7;
                  if (iVar2 < (int)param_3) {
                    iVar4 = uVar10 + 9;
                    bVar7 = param_1[iVar2];
                    if (0x7f < bVar7) {
                      bVar7 = 0x7f;
                    }
                    param_2[iVar2] = bVar7;
                    if (iVar4 < (int)param_3) {
                      iVar2 = uVar10 + 10;
                      bVar7 = param_1[iVar4];
                      if (0x7f < bVar7) {
                        bVar7 = 0x7f;
                      }
                      param_2[iVar4] = bVar7;
                      if (iVar2 < (int)param_3) {
                        iVar4 = uVar10 + 0xb;
                    /* try { // try from 0030ba4c to 0040ba4f has its CatchHandler @ 0030bc20 */
                    /* try { // try from 0030ba54 to 0040bc0f has its CatchHandler @ 0030b374 */
                        bVar7 = param_1[iVar2];
                        if (0x7f < param_1[iVar2]) {
                          bVar7 = 0x7f;
                        }
                        param_2[iVar2] = bVar7;
                        if (iVar4 < (int)param_3) {
                          iVar2 = uVar10 + 0xc;
                          bVar7 = param_1[iVar4];
                          if (0x7f < bVar7) {
                            bVar7 = 0x7f;
                          }
                          param_2[iVar4] = bVar7;
                          if (iVar2 < (int)param_3) {
                            iVar4 = uVar10 + 0xd;
                            bVar7 = param_1[iVar2];
                            if (0x7f < bVar7) {
                              bVar7 = 0x7f;
                            }
                            param_2[iVar2] = bVar7;
                            if (iVar4 < (int)param_3) {
                              iVar2 = uVar10 + 0xe;
                              bVar7 = param_1[iVar4];
                              if (0x7f < bVar7) {
                                bVar7 = 0x7f;
                              }
                              param_2[iVar4] = bVar7;
                              if (iVar2 < (int)param_3) {
                                bVar7 = param_1[iVar2];
                                if (0x7f < bVar7) {
                                  bVar7 = 0x7f;
                                }
                                param_2[iVar2] = bVar7;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 0030bb2c (336 bytes) name=unmap

/* cv::MatAllocator::unmap(cv::UMatData*) const */

void __thiscall cv::MatAllocator::unmap(MatAllocator *this,UMatData *param_1)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char *pcVar4;
  long lVar5;
  long local_10;
  long local_8;
  
  lVar5 = *(long *)(param_1 + 0x10);
  if (lVar5 == 0) {
    if (*(code **)(*(long *)this + 0x20) == FUN_00309fdc) {
      if (*(int *)(param_1 + 0x10) < 0) {
        local_10 = lVar5;
        local_8 = lVar5;
                    /* catch() { ... } // from try @ 0030ba4c with catch @ 0030bc20 */
                    /* try { // try from 0030bc30 to 0040bc33 has its CatchHandler @ 0030b374 */
        pcVar4 = (char *)String::allocate((String *)&local_10,0x11);
        uVar3 = s_u_>urefcount_>__0_0046ac38._8_8_;
        uVar2 = s_u_>urefcount_>__0_0046ac38._0_8_;
                    /* catch() { ... } // from try @ 0030bfe0 with catch @ 0030bc34
                       catch() { ... } // from try @ 0030c320 with catch @ 0030bc34
                       catch() { ... } // from try @ 0030c4ec with catch @ 0030bc34 */
        pcVar4[0x10] = s_u_>urefcount_>__0_0046ac38[0x10];
        *(undefined8 *)pcVar4 = uVar2;
        *(undefined8 *)(pcVar4 + 8) = uVar3;
        error(-0xd7,(String *)&local_10,
              "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd3);
        String::deallocate((String *)&local_10);
      }
      iVar1 = *(int *)(param_1 + 0x14);
      if (iVar1 < 0) {
        local_10 = 0;
        local_8 = 0;
        pcVar4 = (char *)String::allocate((String *)&local_10,0x10);
        uVar2 = s_u_>refcount_>__0_0046ac50._8_8_;
        *(undefined8 *)pcVar4 = s_u_>refcount_>__0_0046ac50._0_8_;
        *(undefined8 *)(pcVar4 + 8) = uVar2;
        error(-0xd7,(String *)&local_10,
              "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd4);
        String::deallocate((String *)&local_10);
        iVar1 = *(int *)(param_1 + 0x14);
      }
      if (iVar1 == 0) {
        if ((*(uint *)(param_1 + 0x30) >> 5 & 1) == 0) {
          fastFree(*(void **)(param_1 + 0x20));
          *(undefined8 *)(param_1 + 0x20) = 0;
        }
        UMatData::~UMatData(param_1);
        operator_delete(param_1);
        return;
      }
    }
    else {
      (**(code **)(*(long *)this + 0x20))();
    }
  }
  return;
}


==================================================================

### FUNC 0030bca4 (4872 bytes) name=FUN_0030bca4

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0030bca4(uint *param_1,long param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  byte *pbVar17;
  byte *pbVar18;
  uint uVar19;
  uint uVar20;
  byte bVar21;
  uint uVar22;
  ulong uVar23;
  byte bVar24;
  byte bVar25;
  int iVar26;
  uint uVar27;
  uint uVar28;
  uint uVar29;
  uint uVar30;
  undefined8 uVar31;
  int iVar32;
  int iVar33;
  undefined1 (*pauVar34) [16];
  undefined8 *puVar35;
  int iVar36;
  uint uVar37;
  long lVar39;
  int iVar40;
  undefined1 (*pauVar41) [16];
  undefined1 (*pauVar42) [16];
  long lVar43;
  long lVar44;
  undefined8 *puVar45;
  uint uVar46;
  long lVar47;
  undefined1 (*pauVar48) [16];
  undefined1 (*pauVar49) [16];
  undefined1 (*pauVar50) [16];
  byte *pbVar51;
  long lVar52;
  int iVar53;
  undefined1 auVar54 [16];
  long lVar55;
  int local_45c;
  undefined1 auStack_408 [1032];
  ulong uVar38;
  
  pauVar34 = (undefined1 (*) [16])auStack_408;
  iVar32 = (*(int **)(param_1 + 0x10))[1];
  iVar33 = **(int **)(param_1 + 0x10);
  uVar28 = iVar32 + (*param_1 >> 3 & 0x1ff) * iVar32;
  if ((ulong)(long)(int)uVar28 < 0x409) {
    pauVar49 = *(undefined1 (**) [16])(param_2 + 0x10);
    pauVar42 = *(undefined1 (**) [16])(param_1 + 4);
    lVar55 = *(long *)(param_1 + 0x14);
  }
  else {
    pauVar34 = operator_new__((long)(int)uVar28);
    pauVar42 = *(undefined1 (**) [16])(param_1 + 4);
    lVar55 = *(long *)(param_1 + 0x14);
    pauVar49 = *(undefined1 (**) [16])(param_2 + 0x10);
  }
  if (0 < (int)uVar28) {
    if ((pauVar42 < pauVar34 + 1 && pauVar34 < pauVar42 + 1) || (uVar28 < 0x16)) {
      lVar44 = 0;
      do {
        (*pauVar34)[lVar44] = (*pauVar42)[lVar44];
        lVar44 = lVar44 + 1;
      } while ((int)lVar44 < (int)uVar28);
    }
    else {
      uVar19 = -(int)pauVar42 & 0xf;
      uVar23 = (ulong)uVar28;
      if (uVar19 < uVar28) {
        uVar23 = (ulong)uVar19;
      }
      iVar32 = (int)uVar23;
      uVar38 = uVar23;
      if (((((iVar32 != 0) && ((*pauVar34)[0] = (*pauVar42)[0], iVar32 != 1)) &&
           ((*pauVar34)[1] = (*pauVar42)[1], iVar32 != 2)) &&
          (((*pauVar34)[2] = (*pauVar42)[2], iVar32 != 3 &&
           ((*pauVar34)[3] = (*pauVar42)[3], iVar32 != 4)))) &&
         ((*pauVar34)[4] = (*pauVar42)[4], iVar32 != 5)) {
        (*pauVar34)[5] = (*pauVar42)[5];
        if (iVar32 == 6) {
          uVar38 = 6;
        }
        else {
          (*pauVar34)[6] = (*pauVar42)[6];
          if ((((iVar32 != 7) && ((*pauVar34)[7] = (*pauVar42)[7], iVar32 != 8)) &&
              (((*pauVar34)[8] = (*pauVar42)[8], iVar32 != 9 &&
               ((((*pauVar34)[9] = (*pauVar42)[9], iVar32 != 10 &&
                 ((*pauVar34)[10] = (*pauVar42)[10], iVar32 != 0xb)) &&
                ((*pauVar34)[0xb] = (*pauVar42)[0xb], iVar32 != 0xc)))))) &&
             ((*pauVar34)[0xc] = (*pauVar42)[0xc], iVar32 != 0xd)) {
            (*pauVar34)[0xd] = (*pauVar42)[0xd];
            if (iVar32 == 0xf) {
              (*pauVar34)[0xe] = (*pauVar42)[0xe];
            }
            else {
              uVar38 = 0xe;
            }
          }
        }
      }
      iVar36 = (int)uVar38;
      uVar19 = ((uVar28 - iVar32) - 0x10 >> 4) + 1;
      iVar26 = uVar19 * 0x10;
      if (0xe < (uVar28 - 1) - iVar32) {
        uVar46 = 0;
        puVar35 = (undefined8 *)(*pauVar34 + uVar23);
        puVar45 = (undefined8 *)(*pauVar42 + uVar23);
        do {
          uVar31 = *puVar45;
          uVar46 = uVar46 + 1;
          puVar35[1] = puVar45[1];
          *puVar35 = uVar31;
          puVar35 = puVar35 + 2;
          puVar45 = puVar45 + 2;
        } while (uVar46 < uVar19);
        iVar36 = iVar36 + iVar26;
        if (uVar28 - iVar32 == iVar26) goto LAB_0030c034;
      }
      iVar32 = iVar36 + 1;
      (*pauVar34)[iVar36] = (*pauVar42)[iVar36];
      if (iVar32 < (int)uVar28) {
        iVar26 = iVar36 + 2;
        (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
        if (iVar26 < (int)uVar28) {
          iVar32 = iVar36 + 3;
          (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
          if (iVar32 < (int)uVar28) {
            iVar26 = iVar36 + 4;
            (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
            if (iVar26 < (int)uVar28) {
              iVar32 = iVar36 + 5;
              (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
              if (iVar32 < (int)uVar28) {
                iVar26 = iVar36 + 6;
                (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                if (iVar26 < (int)uVar28) {
                  iVar32 = iVar36 + 7;
                  (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                  if (iVar32 < (int)uVar28) {
                    iVar26 = iVar36 + 8;
                    (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                    if (iVar26 < (int)uVar28) {
                      iVar32 = iVar36 + 9;
                      (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                      if (iVar32 < (int)uVar28) {
                        iVar26 = iVar36 + 10;
                        (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                        if (iVar26 < (int)uVar28) {
                          iVar32 = iVar36 + 0xb;
                          (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                          if (iVar32 < (int)uVar28) {
                            iVar26 = iVar36 + 0xc;
                    /* try { // try from 0030bfe0 to 0040c2d7 has its CatchHandler @ 0030bc34 */
                            (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                            if (iVar26 < (int)uVar28) {
                              iVar32 = iVar36 + 0xd;
                              (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                              if (iVar32 < (int)uVar28) {
                                iVar36 = iVar36 + 0xe;
                                (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                                if (iVar36 < (int)uVar28) {
                                  (*pauVar34)[iVar36] = (*pauVar42)[iVar36];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0030c034:
  local_45c = uVar28 - 1;
  uVar29 = uVar28 - 4;
  iVar26 = uVar28 - 3;
  uVar27 = uVar29 >> 2;
  uVar19 = uVar27 + 1;
  uVar46 = (uVar27 - 3 >> 2) + 1;
  iVar36 = uVar19 * 4;
  iVar32 = uVar46 * 0x10;
  if (uVar29 < 0xc) {
    iVar32 = 0;
  }
  if (iVar26 < 1) {
    iVar36 = 0;
  }
  uVar30 = uVar28 - iVar36;
  lVar47 = (long)(iVar32 + 4);
  iVar1 = iVar36 + 1;
  lVar44 = (long)iVar36;
  iVar2 = iVar36 + 2;
  pbVar18 = *pauVar34 + lVar44;
  uVar20 = -(int)pbVar18 & 0xf;
  uVar22 = uVar30;
  if (uVar20 < uVar30) {
    uVar22 = uVar20;
  }
  iVar3 = iVar36 + 3;
  lVar52 = (long)(iVar32 + 8);
  iVar4 = iVar36 + 4;
  uVar20 = ((uVar30 - uVar22) - 0x10 >> 4) + 1;
  lVar39 = (long)iVar32;
  iVar5 = iVar36 + 5;
  iVar6 = iVar36 + 6;
  iVar7 = iVar36 + 7;
  iVar8 = iVar36 + 8;
  iVar9 = iVar36 + 9;
  iVar10 = iVar36 + 10;
  iVar11 = iVar36 + 0xb;
  iVar12 = iVar36 + 0xc;
  iVar13 = iVar36 + 0xd;
  iVar53 = uVar20 * 0x10;
  iVar14 = iVar36 + 0xe;
                    /* try { // try from 0030c318 to 0040c31b has its CatchHandler @ 0030c4dc */
                    /* try { // try from 0030c320 to 0040c4cb has its CatchHandler @ 0030bc34 */
joined_r0x0030c424:
  pauVar50 = pauVar42;
  iVar33 = iVar33 + -1;
  if (iVar33 != 0) {
    pauVar42 = (undefined1 (*) [16])(*pauVar50 + lVar55);
    if (0 < iVar26) {
      if ((pauVar34 < pauVar42 + 4 && pauVar42 < pauVar34 + 4) || (uVar19 < 4)) {
        pbVar51 = *pauVar42 + 1;
        pauVar41 = pauVar34;
        do {
          pbVar17 = pbVar51 + 4;
          bVar25 = (*pauVar41)[0];
          bVar24 = pbVar51[-1];
          bVar21 = *pbVar51;
          if ((byte)(*pauVar41)[1] < *pbVar51) {
            bVar21 = (*pauVar41)[1];
          }
          (*pauVar41)[1] = bVar21;
          if (bVar25 < bVar24) {
            bVar24 = bVar25;
          }
          (*pauVar41)[0] = bVar24;
          bVar24 = pbVar51[1];
          bVar21 = pbVar51[2];
          if ((byte)(*pauVar41)[3] < pbVar51[2]) {
            bVar21 = (*pauVar41)[3];
          }
          (*pauVar41)[3] = bVar21;
          if ((byte)(*pauVar41)[2] < bVar24) {
            bVar24 = (*pauVar41)[2];
          }
          (*pauVar41)[2] = bVar24;
          pbVar51 = pbVar17;
          pauVar41 = (undefined1 (*) [16])(*pauVar41 + 4);
        } while (pbVar17 != *pauVar42 + (ulong)uVar27 * 4 + 5);
      }
      else {
        if (0xb < uVar29) {
          uVar37 = 0;
          pauVar41 = pauVar34;
          pauVar48 = pauVar42;
          do {
            uVar37 = uVar37 + 1;
            auVar54 = NEON_umin(*pauVar48,*pauVar41,1);
            *(long *)(*pauVar41 + 8) = auVar54._8_8_;
            *(long *)*pauVar41 = auVar54._0_8_;
            pauVar41 = pauVar41 + 1;
            pauVar48 = pauVar48 + 1;
          } while (uVar37 < uVar46);
          if (uVar19 == uVar46 * 4) goto LAB_0030c5e4;
        }
        bVar24 = (*pauVar34)[lVar39 + 1];
        bVar25 = (*pauVar34)[lVar39];
        bVar21 = (*pauVar42)[lVar39 + 1];
        if (bVar24 < (byte)(*pauVar42)[lVar39 + 1]) {
          bVar21 = bVar24;
        }
        bVar24 = (*pauVar42)[lVar39];
        if (bVar25 < (byte)(*pauVar42)[lVar39]) {
          bVar24 = bVar25;
        }
        (*pauVar34)[lVar39] = bVar24;
                    /* catch() { ... } // from try @ 0030c318 with catch @ 0030c4dc */
        (*pauVar34)[lVar39 + 1] = bVar21;
        bVar24 = (*pauVar34)[lVar39 + 3];
                    /* try { // try from 0030c4ec to 0040c4ef has its CatchHandler @ 0030bc34 */
                    /* catch() { ... } // from try @ 0030cbd8 with catch @ 0030c4f0
                       catch() { ... } // from try @ 0030ccec with catch @ 0030c4f0
                       catch() { ... } // from try @ 0030ced8 with catch @ 0030c4f0 */
        bVar25 = (*pauVar34)[lVar39 + 2];
        bVar21 = (*pauVar42)[lVar39 + 3];
        if (bVar24 < (byte)(*pauVar42)[lVar39 + 3]) {
          bVar21 = bVar24;
        }
        bVar24 = (*pauVar42)[lVar39 + 2];
        if (bVar25 < (byte)(*pauVar42)[lVar39 + 2]) {
          bVar24 = bVar25;
        }
        (*pauVar34)[lVar39 + 2] = bVar24;
        (*pauVar34)[lVar39 + 3] = bVar21;
        if (iVar32 + 4 < iVar26) {
          bVar24 = (*pauVar34)[lVar47 + 1];
          bVar25 = (*pauVar34)[lVar47];
          bVar21 = (*pauVar42)[lVar47 + 1];
          if (bVar24 < (byte)(*pauVar42)[lVar47 + 1]) {
            bVar21 = bVar24;
          }
          bVar24 = (*pauVar42)[lVar47];
          if (bVar25 < (byte)(*pauVar42)[lVar47]) {
            bVar24 = bVar25;
          }
          (*pauVar34)[lVar47] = bVar24;
          (*pauVar34)[lVar47 + 1] = bVar21;
          bVar24 = (*pauVar34)[lVar47 + 3];
          bVar25 = (*pauVar34)[lVar47 + 2];
          bVar21 = (*pauVar42)[lVar47 + 3];
          if (bVar24 < (byte)(*pauVar42)[lVar47 + 3]) {
            bVar21 = bVar24;
          }
          bVar24 = (*pauVar42)[lVar47 + 2];
          if (bVar25 < (byte)(*pauVar42)[lVar47 + 2]) {
            bVar24 = bVar25;
          }
          (*pauVar34)[lVar47 + 2] = bVar24;
          (*pauVar34)[lVar47 + 3] = bVar21;
          if (iVar32 + 8 < iVar26) {
            bVar24 = (*pauVar34)[lVar52 + 1];
            bVar25 = (*pauVar34)[lVar52];
            bVar21 = (*pauVar42)[lVar52 + 1];
            if (bVar24 < (byte)(*pauVar42)[lVar52 + 1]) {
              bVar21 = bVar24;
            }
            bVar24 = (*pauVar42)[lVar52];
            if (bVar25 < (byte)(*pauVar42)[lVar52]) {
              bVar24 = bVar25;
            }
            (*pauVar34)[lVar52] = bVar24;
            (*pauVar34)[lVar52 + 1] = bVar21;
            bVar24 = (*pauVar34)[lVar52 + 3];
            bVar25 = (*pauVar34)[lVar52 + 2];
            bVar21 = (*pauVar42)[lVar52 + 3];
            if (bVar24 < (byte)(*pauVar42)[lVar52 + 3]) {
              bVar21 = bVar24;
            }
            bVar24 = (*pauVar42)[lVar52 + 2];
            if (bVar25 < (byte)(*pauVar42)[lVar52 + 2]) {
              bVar24 = bVar25;
            }
            (*pauVar34)[lVar52 + 2] = bVar24;
            (*pauVar34)[lVar52 + 3] = bVar21;
          }
        }
      }
    }
LAB_0030c5e4:
    if (iVar36 < (int)uVar28) {
      if ((pauVar34[1] + lVar44 <= *pauVar50 + lVar44 + lVar55 ||
           pauVar50[1] + lVar44 + lVar55 <= pbVar18) && (0x12 < uVar30)) {
        iVar40 = iVar36;
        if (uVar22 != 0) {
          bVar21 = (*pauVar42)[lVar44];
          if (*pbVar18 < (byte)(*pauVar42)[lVar44]) {
            bVar21 = *pbVar18;
          }
          *pbVar18 = bVar21;
          iVar40 = iVar1;
          if (uVar22 != 1) {
            bVar24 = (*pauVar34)[iVar1];
            bVar21 = (*pauVar42)[iVar1];
            if (bVar24 < (byte)(*pauVar42)[iVar1]) {
              bVar21 = bVar24;
            }
            (*pauVar34)[iVar1] = bVar21;
            iVar40 = iVar2;
            if (uVar22 != 2) {
              bVar24 = (*pauVar34)[iVar2];
              bVar21 = (*pauVar42)[iVar2];
              if (bVar24 < (byte)(*pauVar42)[iVar2]) {
                bVar21 = bVar24;
              }
              (*pauVar34)[iVar2] = bVar21;
              iVar40 = iVar3;
              if (uVar22 != 3) {
                bVar24 = (*pauVar34)[iVar3];
                bVar21 = (*pauVar42)[iVar3];
                if (bVar24 < (byte)(*pauVar42)[iVar3]) {
                  bVar21 = bVar24;
                }
                (*pauVar34)[iVar3] = bVar21;
                iVar40 = iVar4;
                if (uVar22 != 4) {
                  bVar24 = (*pauVar34)[iVar4];
                  bVar21 = (*pauVar42)[iVar4];
                  if (bVar24 < (byte)(*pauVar42)[iVar4]) {
                    bVar21 = bVar24;
                  }
                  (*pauVar34)[iVar4] = bVar21;
                  iVar40 = iVar5;
                  if (uVar22 != 5) {
                    bVar24 = (*pauVar34)[iVar5];
                    bVar21 = (*pauVar42)[iVar5];
                    if (bVar24 < (byte)(*pauVar42)[iVar5]) {
                      bVar21 = bVar24;
                    }
                    (*pauVar34)[iVar5] = bVar21;
                    iVar40 = iVar6;
                    if (uVar22 != 6) {
                      bVar24 = (*pauVar34)[iVar6];
                      bVar21 = (*pauVar42)[iVar6];
                      if (bVar24 < (byte)(*pauVar42)[iVar6]) {
                        bVar21 = bVar24;
                      }
                      (*pauVar34)[iVar6] = bVar21;
                      iVar40 = iVar7;
                      if (uVar22 != 7) {
                        bVar24 = (*pauVar34)[iVar7];
                        bVar21 = (*pauVar42)[iVar7];
                        if (bVar24 < (byte)(*pauVar42)[iVar7]) {
                          bVar21 = bVar24;
                        }
                        (*pauVar34)[iVar7] = bVar21;
                        iVar40 = iVar8;
                        if (uVar22 != 8) {
                          bVar24 = (*pauVar34)[iVar8];
                          bVar21 = (*pauVar42)[iVar8];
                          if (bVar24 < (byte)(*pauVar42)[iVar8]) {
                            bVar21 = bVar24;
                          }
                          (*pauVar34)[iVar8] = bVar21;
                          iVar40 = iVar9;
                          if (uVar22 != 9) {
                            bVar24 = (*pauVar34)[iVar9];
                            bVar21 = (*pauVar42)[iVar9];
                            if (bVar24 < (byte)(*pauVar42)[iVar9]) {
                              bVar21 = bVar24;
                            }
                            (*pauVar34)[iVar9] = bVar21;
                            iVar40 = iVar10;
                            if (uVar22 != 10) {
                              bVar24 = (*pauVar34)[iVar10];
                              bVar21 = (*pauVar42)[iVar10];
                              if (bVar24 < (byte)(*pauVar42)[iVar10]) {
                                bVar21 = bVar24;
                              }
                              (*pauVar34)[iVar10] = bVar21;
                              iVar40 = iVar11;
                              if (uVar22 != 0xb) {
                                bVar24 = (*pauVar34)[iVar11];
                                bVar21 = (*pauVar42)[iVar11];
                                if (bVar24 < (byte)(*pauVar42)[iVar11]) {
                                  bVar21 = bVar24;
                                }
                                (*pauVar34)[iVar11] = bVar21;
                                iVar40 = iVar12;
                                if (uVar22 != 0xc) {
                                  bVar24 = (*pauVar34)[iVar12];
                                  bVar21 = (*pauVar42)[iVar12];
                                  if (bVar24 < (byte)(*pauVar42)[iVar12]) {
                                    bVar21 = bVar24;
                                  }
                                  (*pauVar34)[iVar12] = bVar21;
                                  iVar40 = iVar13;
                                  if (uVar22 != 0xd) {
                                    bVar24 = (*pauVar34)[iVar13];
                                    bVar21 = (*pauVar42)[iVar13];
                                    if (bVar24 < (byte)(*pauVar42)[iVar13]) {
                                      bVar21 = bVar24;
                                    }
                                    (*pauVar34)[iVar13] = bVar21;
                                    iVar40 = iVar14;
                                    if (uVar22 == 0xf) {
                                      bVar24 = (*pauVar34)[iVar14];
                                      bVar21 = (*pauVar42)[iVar14];
                                      if (bVar24 < (byte)(*pauVar42)[iVar14]) {
                                        bVar21 = bVar24;
                                      }
                                      (*pauVar34)[iVar14] = bVar21;
                                      iVar40 = iVar36 + 0xf;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if (0xe < (uVar30 - 1) - uVar22) {
          uVar37 = 0;
          pauVar41 = (undefined1 (*) [16])(*pauVar34 + lVar44 + (ulong)uVar22);
          pauVar48 = (undefined1 (*) [16])(*pauVar34 + lVar44 + (ulong)uVar22);
          pauVar50 = (undefined1 (*) [16])(*pauVar50 + (ulong)uVar22 + lVar44 + lVar55);
          do {
            uVar37 = uVar37 + 1;
            auVar54 = NEON_umin(*pauVar50,*pauVar41,1);
            *(long *)(*pauVar48 + 8) = auVar54._8_8_;
            *(long *)*pauVar48 = auVar54._0_8_;
            pauVar41 = pauVar41 + 1;
            pauVar48 = pauVar48 + 1;
            pauVar50 = pauVar50 + 1;
          } while (uVar37 < uVar20);
          iVar40 = iVar40 + iVar53;
          if (uVar30 - uVar22 == iVar53) goto joined_r0x0030c424;
        }
        iVar15 = iVar40 + 1;
        bVar21 = (*pauVar42)[iVar40];
        if ((byte)(*pauVar34)[iVar40] < (byte)(*pauVar42)[iVar40]) {
          bVar21 = (*pauVar34)[iVar40];
        }
        (*pauVar34)[iVar40] = bVar21;
        if (iVar15 < (int)uVar28) {
          iVar16 = iVar40 + 2;
          bVar21 = (*pauVar42)[iVar15];
          if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
            bVar21 = (*pauVar34)[iVar15];
          }
          (*pauVar34)[iVar15] = bVar21;
          if (iVar16 < (int)uVar28) {
            iVar15 = iVar40 + 3;
            bVar21 = (*pauVar42)[iVar16];
            if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
              bVar21 = (*pauVar34)[iVar16];
            }
            (*pauVar34)[iVar16] = bVar21;
            if (iVar15 < (int)uVar28) {
              iVar16 = iVar40 + 4;
              bVar21 = (*pauVar42)[iVar15];
              if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                bVar21 = (*pauVar34)[iVar15];
              }
              (*pauVar34)[iVar15] = bVar21;
              if (iVar16 < (int)uVar28) {
                iVar15 = iVar40 + 5;
                bVar21 = (*pauVar42)[iVar16];
                if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
                  bVar21 = (*pauVar34)[iVar16];
                }
                (*pauVar34)[iVar16] = bVar21;
                if (iVar15 < (int)uVar28) {
                  iVar16 = iVar40 + 6;
                  bVar21 = (*pauVar42)[iVar15];
                  if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                    bVar21 = (*pauVar34)[iVar15];
                  }
                  (*pauVar34)[iVar15] = bVar21;
                  if (iVar16 < (int)uVar28) {
                    iVar15 = iVar40 + 7;
                    bVar21 = (*pauVar42)[iVar16];
                    if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
                      bVar21 = (*pauVar34)[iVar16];
                    }
                    (*pauVar34)[iVar16] = bVar21;
                    if (iVar15 < (int)uVar28) {
                      iVar16 = iVar40 + 8;
                      bVar21 = (*pauVar42)[iVar15];
                      if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                        bVar21 = (*pauVar34)[iVar15];
                      }
                      (*pauVar34)[iVar15] = bVar21;
                      if (iVar16 < (int)uVar28) {
                        iVar15 = iVar40 + 9;
                        bVar21 = (*pauVar42)[iVar16];
                        if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
                          bVar21 = (*pauVar34)[iVar16];
                        }
                        (*pauVar34)[iVar16] = bVar21;
                        if (iVar15 < (int)uVar28) {
                          iVar16 = iVar40 + 10;
                          bVar21 = (*pauVar42)[iVar15];
                          if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                            bVar21 = (*pauVar34)[iVar15];
                          }
                          (*pauVar34)[iVar15] = bVar21;
                          if (iVar16 < (int)uVar28) {
                            iVar15 = iVar40 + 0xb;
                            bVar21 = (*pauVar42)[iVar16];
                            if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
                              bVar21 = (*pauVar34)[iVar16];
                            }
                            (*pauVar34)[iVar16] = bVar21;
                            if (iVar15 < (int)uVar28) {
                              iVar16 = iVar40 + 0xc;
                              bVar21 = (*pauVar42)[iVar15];
                              if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                                bVar21 = (*pauVar34)[iVar15];
                              }
                              (*pauVar34)[iVar15] = bVar21;
                              if (iVar16 < (int)uVar28) {
                                iVar15 = iVar40 + 0xd;
                                bVar21 = (*pauVar42)[iVar16];
                                if ((byte)(*pauVar34)[iVar16] < (byte)(*pauVar42)[iVar16]) {
                                  bVar21 = (*pauVar34)[iVar16];
                                }
                                (*pauVar34)[iVar16] = bVar21;
                                if (iVar15 < (int)uVar28) {
                                  iVar40 = iVar40 + 0xe;
                                  bVar21 = (*pauVar42)[iVar15];
                                  if ((byte)(*pauVar34)[iVar15] < (byte)(*pauVar42)[iVar15]) {
                                    bVar21 = (*pauVar34)[iVar15];
                                  }
                                  (*pauVar34)[iVar15] = bVar21;
                                  if (iVar40 < (int)uVar28) {
                                    bVar21 = (*pauVar42)[iVar40];
                                    if ((byte)(*pauVar34)[iVar40] < (byte)(*pauVar42)[iVar40]) {
                                      bVar21 = (*pauVar34)[iVar40];
                                    }
                                    (*pauVar34)[iVar40] = bVar21;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        goto joined_r0x0030c424;
      }
      lVar43 = 0;
      do {
        bVar21 = (*pauVar42)[lVar43 + lVar44];
        if (pbVar18[lVar43] < (byte)(*pauVar42)[lVar43 + lVar44]) {
          bVar21 = pbVar18[lVar43];
        }
        pbVar18[lVar43] = bVar21;
        lVar43 = lVar43 + 1;
      } while (lVar43 != (ulong)(uint)(local_45c - iVar36) + 1);
    }
    goto joined_r0x0030c424;
  }
  if (0 < (int)uVar28) {
    if ((pauVar49 < pauVar34 + 1 && pauVar34 < pauVar49 + 1) || (uVar28 < 0x16)) {
      lVar55 = 0;
      do {
        (*pauVar49)[lVar55] = (*pauVar34)[lVar55];
        lVar55 = lVar55 + 1;
      } while ((int)lVar55 < (int)uVar28);
    }
    else {
      uVar19 = -(int)pauVar34 & 0xf;
      uVar23 = (ulong)uVar19;
      if (uVar28 < uVar19) {
        uVar23 = (ulong)uVar28;
      }
      iVar33 = (int)uVar23;
      iVar32 = 0;
      if (((iVar33 != 0) && ((*pauVar49)[0] = (*pauVar34)[0], iVar32 = iVar33, iVar33 != 1)) &&
         (((*pauVar49)[1] = (*pauVar34)[1], iVar33 != 2 &&
          (((*pauVar49)[2] = (*pauVar34)[2], iVar33 != 3 &&
           ((*pauVar49)[3] = (*pauVar34)[3], iVar33 != 4)))))) {
        (*pauVar49)[4] = (*pauVar34)[4];
        if (iVar33 == 5) {
          iVar32 = 5;
        }
        else {
          (*pauVar49)[5] = (*pauVar34)[5];
                    /* try { // try from 0030cbd8 to 0040cca3 has its CatchHandler @ 0030c4f0 */
          if (((((iVar33 != 6) && ((*pauVar49)[6] = (*pauVar34)[6], iVar33 != 7)) &&
               ((*pauVar49)[7] = (*pauVar34)[7], iVar33 != 8)) &&
              (((*pauVar49)[8] = (*pauVar34)[8], iVar33 != 9 &&
               ((*pauVar49)[9] = (*pauVar34)[9], iVar33 != 10)))) &&
             (((*pauVar49)[10] = (*pauVar34)[10], iVar33 != 0xb &&
              (((*pauVar49)[0xb] = (*pauVar34)[0xb], iVar33 != 0xc &&
               ((*pauVar49)[0xc] = (*pauVar34)[0xc], iVar33 != 0xd)))))) {
            (*pauVar49)[0xd] = (*pauVar34)[0xd];
            if (iVar33 == 0xf) {
              (*pauVar49)[0xe] = (*pauVar34)[0xe];
            }
            else {
              iVar32 = 0xe;
            }
          }
        }
      }
      uVar19 = ((uVar28 - iVar33) - 0x10 >> 4) + 1;
      iVar36 = uVar19 * 0x10;
      if (0xe < (uint)(local_45c - iVar33)) {
        uVar46 = 0;
        puVar35 = (undefined8 *)(*pauVar34 + uVar23);
        puVar45 = (undefined8 *)(*pauVar49 + uVar23);
        do {
          uVar31 = *puVar35;
          uVar46 = uVar46 + 1;
          puVar45[1] = puVar35[1];
          *puVar45 = uVar31;
          puVar35 = puVar35 + 2;
          puVar45 = puVar45 + 2;
        } while (uVar46 < uVar19);
        iVar32 = iVar32 + iVar36;
        if (iVar36 == uVar28 - iVar33) goto LAB_0030cdb4;
      }
      iVar33 = iVar32 + 1;
      (*pauVar49)[iVar32] = (*pauVar34)[iVar32];
      if (iVar33 < (int)uVar28) {
        iVar36 = iVar32 + 2;
        (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
        if (iVar36 < (int)uVar28) {
          iVar33 = iVar32 + 3;
          (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
          if (iVar33 < (int)uVar28) {
            iVar36 = iVar32 + 4;
            (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
            if (iVar36 < (int)uVar28) {
              iVar33 = iVar32 + 5;
              (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
              if (iVar33 < (int)uVar28) {
                iVar36 = iVar32 + 6;
                (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                    /* try { // try from 0030cce4 to 0040cce7 has its CatchHandler @ 0030cec8 */
                if (iVar36 < (int)uVar28) {
                    /* try { // try from 0030ccec to 0040ceb7 has its CatchHandler @ 0030c4f0 */
                  iVar33 = iVar32 + 7;
                  (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                  if (iVar33 < (int)uVar28) {
                    iVar36 = iVar32 + 8;
                    (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                    if (iVar36 < (int)uVar28) {
                      iVar33 = iVar32 + 9;
                      (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                      if (iVar33 < (int)uVar28) {
                        iVar36 = iVar32 + 10;
                        (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                        if (iVar36 < (int)uVar28) {
                          iVar33 = iVar32 + 0xb;
                          (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                          if (iVar33 < (int)uVar28) {
                            iVar36 = iVar32 + 0xc;
                            (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                            if (iVar36 < (int)uVar28) {
                              iVar33 = iVar32 + 0xd;
                              (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                              if (iVar33 < (int)uVar28) {
                                iVar32 = iVar32 + 0xe;
                                (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                                if (iVar32 < (int)uVar28) {
                                  (*pauVar49)[iVar32] = (*pauVar34)[iVar32];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0030cdb4:
  if ((pauVar34 != (undefined1 (*) [16])auStack_408) && (pauVar34 != (undefined1 (*) [16])0x0)) {
    operator_delete__(pauVar34);
  }
  return;
}


==================================================================

### FUNC 0030cfac (4872 bytes) name=FUN_0030cfac

/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0030cfac(uint *param_1,long param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  byte *pbVar17;
  byte *pbVar18;
  uint uVar19;
  uint uVar20;
  byte bVar21;
  uint uVar22;
  ulong uVar23;
  byte bVar24;
  byte bVar25;
  int iVar26;
  uint uVar27;
  uint uVar28;
  uint uVar29;
  uint uVar30;
  undefined8 uVar31;
  int iVar32;
  int iVar33;
  undefined1 (*pauVar34) [16];
  undefined8 *puVar35;
  int iVar36;
  uint uVar37;
  long lVar39;
  int iVar40;
  undefined1 (*pauVar41) [16];
  undefined1 (*pauVar42) [16];
  long lVar43;
  long lVar44;
  undefined8 *puVar45;
  uint uVar46;
  long lVar47;
  undefined1 (*pauVar48) [16];
  undefined1 (*pauVar49) [16];
  undefined1 (*pauVar50) [16];
  byte *pbVar51;
  long lVar52;
  int iVar53;
  undefined1 auVar54 [16];
  long lVar55;
  int local_45c;
  undefined1 auStack_408 [1032];
  ulong uVar38;
  
  pauVar34 = (undefined1 (*) [16])auStack_408;
  iVar32 = (*(int **)(param_1 + 0x10))[1];
  iVar33 = **(int **)(param_1 + 0x10);
  uVar28 = iVar32 + (*param_1 >> 3 & 0x1ff) * iVar32;
  if ((ulong)(long)(int)uVar28 < 0x409) {
    pauVar49 = *(undefined1 (**) [16])(param_2 + 0x10);
    pauVar42 = *(undefined1 (**) [16])(param_1 + 4);
    lVar55 = *(long *)(param_1 + 0x14);
  }
  else {
    pauVar34 = operator_new__((long)(int)uVar28);
    pauVar42 = *(undefined1 (**) [16])(param_1 + 4);
    lVar55 = *(long *)(param_1 + 0x14);
    pauVar49 = *(undefined1 (**) [16])(param_2 + 0x10);
  }
  if (0 < (int)uVar28) {
    if ((pauVar42 < pauVar34 + 1 && pauVar34 < pauVar42 + 1) || (uVar28 < 0x16)) {
      lVar44 = 0;
      do {
        (*pauVar34)[lVar44] = (*pauVar42)[lVar44];
        lVar44 = lVar44 + 1;
                    /* try { // try from 0030e284 to 0040e287 has its CatchHandler @ 0030e77c */
      } while ((int)lVar44 < (int)uVar28);
    }
    else {
      uVar19 = -(int)pauVar42 & 0xf;
      uVar23 = (ulong)uVar28;
      if (uVar19 < uVar28) {
        uVar23 = (ulong)uVar19;
      }
      iVar32 = (int)uVar23;
      uVar38 = uVar23;
      if (((((iVar32 != 0) && ((*pauVar34)[0] = (*pauVar42)[0], iVar32 != 1)) &&
           ((*pauVar34)[1] = (*pauVar42)[1], iVar32 != 2)) &&
          (((*pauVar34)[2] = (*pauVar42)[2], iVar32 != 3 &&
           ((*pauVar34)[3] = (*pauVar42)[3], iVar32 != 4)))) &&
         ((*pauVar34)[4] = (*pauVar42)[4], iVar32 != 5)) {
        (*pauVar34)[5] = (*pauVar42)[5];
        if (iVar32 == 6) {
          uVar38 = 6;
        }
        else {
          (*pauVar34)[6] = (*pauVar42)[6];
          if ((((iVar32 != 7) && ((*pauVar34)[7] = (*pauVar42)[7], iVar32 != 8)) &&
              (((*pauVar34)[8] = (*pauVar42)[8], iVar32 != 9 &&
               ((((*pauVar34)[9] = (*pauVar42)[9], iVar32 != 10 &&
                 ((*pauVar34)[10] = (*pauVar42)[10], iVar32 != 0xb)) &&
                ((*pauVar34)[0xb] = (*pauVar42)[0xb], iVar32 != 0xc)))))) &&
             ((*pauVar34)[0xc] = (*pauVar42)[0xc], iVar32 != 0xd)) {
            (*pauVar34)[0xd] = (*pauVar42)[0xd];
            if (iVar32 == 0xf) {
              (*pauVar34)[0xe] = (*pauVar42)[0xe];
            }
            else {
              uVar38 = 0xe;
            }
          }
        }
      }
      iVar36 = (int)uVar38;
      uVar19 = ((uVar28 - iVar32) - 0x10 >> 4) + 1;
      iVar26 = uVar19 * 0x10;
      if (0xe < (uVar28 - 1) - iVar32) {
        uVar46 = 0;
        puVar35 = (undefined8 *)(*pauVar34 + uVar23);
        puVar45 = (undefined8 *)(*pauVar42 + uVar23);
        do {
          uVar31 = *puVar45;
          uVar46 = uVar46 + 1;
          puVar35[1] = puVar45[1];
          *puVar35 = uVar31;
          puVar35 = puVar35 + 2;
          puVar45 = puVar45 + 2;
        } while (uVar46 < uVar19);
        iVar36 = iVar36 + iVar26;
        if (uVar28 - iVar32 == iVar26) goto LAB_0030d33c;
      }
      iVar32 = iVar36 + 1;
      (*pauVar34)[iVar36] = (*pauVar42)[iVar36];
      if (iVar32 < (int)uVar28) {
        iVar26 = iVar36 + 2;
        (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
        if (iVar26 < (int)uVar28) {
          iVar32 = iVar36 + 3;
          (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
          if (iVar32 < (int)uVar28) {
            iVar26 = iVar36 + 4;
            (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
            if (iVar26 < (int)uVar28) {
              iVar32 = iVar36 + 5;
              (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
              if (iVar32 < (int)uVar28) {
                iVar26 = iVar36 + 6;
                (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                if (iVar26 < (int)uVar28) {
                  iVar32 = iVar36 + 7;
                  (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                  if (iVar32 < (int)uVar28) {
                    iVar26 = iVar36 + 8;
                    (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                    if (iVar26 < (int)uVar28) {
                      iVar32 = iVar36 + 9;
                      (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                      if (iVar32 < (int)uVar28) {
                        iVar26 = iVar36 + 10;
                        (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                        if (iVar26 < (int)uVar28) {
                          iVar32 = iVar36 + 0xb;
                          (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                          if (iVar32 < (int)uVar28) {
                            iVar26 = iVar36 + 0xc;
                            (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                            if (iVar26 < (int)uVar28) {
                              iVar32 = iVar36 + 0xd;
                              (*pauVar34)[iVar26] = (*pauVar42)[iVar26];
                              if (iVar32 < (int)uVar28) {
                                iVar36 = iVar36 + 0xe;
                                (*pauVar34)[iVar32] = (*pauVar42)[iVar32];
                                if (iVar36 < (int)uVar28) {
                                  (*pauVar34)[iVar36] = (*pauVar42)[iVar36];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0030d33c:
  local_45c = uVar28 - 1;
  uVar29 = uVar28 - 4;
  iVar26 = uVar28 - 3;
  uVar27 = uVar29 >> 2;
  uVar19 = uVar27 + 1;
  uVar46 = (uVar27 - 3 >> 2) + 1;
  iVar36 = uVar19 * 4;
  iVar32 = uVar46 * 0x10;
  if (uVar29 < 0xc) {
    iVar32 = 0;
  }
  if (iVar26 < 1) {
    iVar36 = 0;
  }
  uVar30 = uVar28 - iVar36;
  lVar47 = (long)(iVar32 + 4);
  iVar1 = iVar36 + 1;
  lVar44 = (long)iVar36;
  iVar2 = iVar36 + 2;
  pbVar18 = *pauVar34 + lVar44;
  uVar20 = -(int)pbVar18 & 0xf;
  uVar22 = uVar30;
  if (uVar20 < uVar30) {
    uVar22 = uVar20;
  }
  iVar3 = iVar36 + 3;
  lVar52 = (long)(iVar32 + 8);
  iVar4 = iVar36 + 4;
  uVar20 = ((uVar30 - uVar22) - 0x10 >> 4) + 1;
  lVar39 = (long)iVar32;
  iVar5 = iVar36 + 5;
  iVar6 = iVar36 + 6;
  iVar7 = iVar36 + 7;
  iVar8 = iVar36 + 8;
  iVar9 = iVar36 + 9;
  iVar10 = iVar36 + 10;
  iVar11 = iVar36 + 0xb;
  iVar12 = iVar36 + 0xc;
  iVar13 = iVar36 + 0xd;
  iVar53 = uVar20 * 0x10;
  iVar14 = iVar36 + 0xe;
                    /* try { // try from 0030d5c0 to 0040d68b has its CatchHandler @ 0030cedc */
                    /* try { // try from 0030d6cc to 0040d6cf has its CatchHandler @ 0030d8b0 */
                    /* try { // try from 0030d6d4 to 0040d89f has its CatchHandler @ 0030cedc */
joined_r0x0030d72c:
  pauVar50 = pauVar42;
  iVar33 = iVar33 + -1;
  if (iVar33 != 0) {
    pauVar42 = (undefined1 (*) [16])(*pauVar50 + lVar55);
    if (0 < iVar26) {
      if ((pauVar34 < pauVar42 + 4 && pauVar42 < pauVar34 + 4) || (uVar19 < 4)) {
                    /* try { // try from 0030e144 to 0040e147 has its CatchHandler @ 0030e7a4 */
        pbVar51 = *pauVar42 + 1;
        pauVar41 = pauVar34;
        do {
          pbVar17 = pbVar51 + 4;
          bVar25 = (*pauVar41)[0];
          bVar24 = pbVar51[-1];
          bVar21 = *pbVar51;
          if (*pbVar51 < (byte)(*pauVar41)[1]) {
            bVar21 = (*pauVar41)[1];
          }
                    /* try { // try from 0030e178 to 0040e1cf has its CatchHandler @ 0030df30 */
          (*pauVar41)[1] = bVar21;
          if (bVar24 < bVar25) {
            bVar24 = bVar25;
          }
          (*pauVar41)[0] = bVar24;
          bVar24 = pbVar51[1];
          bVar21 = pbVar51[2];
          if (pbVar51[2] < (byte)(*pauVar41)[3]) {
            bVar21 = (*pauVar41)[3];
          }
          (*pauVar41)[3] = bVar21;
          if (bVar24 < (byte)(*pauVar41)[2]) {
            bVar24 = (*pauVar41)[2];
          }
          (*pauVar41)[2] = bVar24;
          pbVar51 = pbVar17;
          pauVar41 = (undefined1 (*) [16])(*pauVar41 + 4);
        } while (pbVar17 != *pauVar42 + (ulong)uVar27 * 4 + 5);
      }
      else {
        if (0xb < uVar29) {
          uVar37 = 0;
          pauVar41 = pauVar34;
          pauVar48 = pauVar42;
          do {
            uVar37 = uVar37 + 1;
            auVar54 = NEON_umax(*pauVar48,*pauVar41,1);
            *(long *)(*pauVar41 + 8) = auVar54._8_8_;
            *(long *)*pauVar41 = auVar54._0_8_;
            pauVar41 = pauVar41 + 1;
            pauVar48 = pauVar48 + 1;
          } while (uVar37 < uVar46);
          if (uVar19 == uVar46 * 4) goto LAB_0030d8ec;
        }
        bVar24 = (*pauVar34)[lVar39 + 1];
        bVar25 = (*pauVar34)[lVar39];
        bVar21 = (*pauVar42)[lVar39 + 1];
        if ((byte)(*pauVar42)[lVar39 + 1] < bVar24) {
          bVar21 = bVar24;
        }
        bVar24 = (*pauVar42)[lVar39];
        if ((byte)(*pauVar42)[lVar39] < bVar25) {
          bVar24 = bVar25;
        }
        (*pauVar34)[lVar39] = bVar24;
        (*pauVar34)[lVar39 + 1] = bVar21;
        bVar24 = (*pauVar34)[lVar39 + 3];
        bVar25 = (*pauVar34)[lVar39 + 2];
        bVar21 = (*pauVar42)[lVar39 + 3];
        if ((byte)(*pauVar42)[lVar39 + 3] < bVar24) {
          bVar21 = bVar24;
        }
        bVar24 = (*pauVar42)[lVar39 + 2];
        if ((byte)(*pauVar42)[lVar39 + 2] < bVar25) {
          bVar24 = bVar25;
        }
        (*pauVar34)[lVar39 + 2] = bVar24;
        (*pauVar34)[lVar39 + 3] = bVar21;
        if (iVar32 + 4 < iVar26) {
          bVar24 = (*pauVar34)[lVar47 + 1];
          bVar25 = (*pauVar34)[lVar47];
          bVar21 = (*pauVar42)[lVar47 + 1];
          if ((byte)(*pauVar42)[lVar47 + 1] < bVar24) {
            bVar21 = bVar24;
          }
          bVar24 = (*pauVar42)[lVar47];
          if ((byte)(*pauVar42)[lVar47] < bVar25) {
            bVar24 = bVar25;
          }
          (*pauVar34)[lVar47] = bVar24;
          (*pauVar34)[lVar47 + 1] = bVar21;
          bVar24 = (*pauVar34)[lVar47 + 3];
          bVar25 = (*pauVar34)[lVar47 + 2];
          bVar21 = (*pauVar42)[lVar47 + 3];
          if ((byte)(*pauVar42)[lVar47 + 3] < bVar24) {
            bVar21 = bVar24;
          }
          bVar24 = (*pauVar42)[lVar47 + 2];
          if ((byte)(*pauVar42)[lVar47 + 2] < bVar25) {
            bVar24 = bVar25;
          }
          (*pauVar34)[lVar47 + 2] = bVar24;
          (*pauVar34)[lVar47 + 3] = bVar21;
          if (iVar32 + 8 < iVar26) {
            bVar24 = (*pauVar34)[lVar52 + 1];
            bVar25 = (*pauVar34)[lVar52];
            bVar21 = (*pauVar42)[lVar52 + 1];
            if ((byte)(*pauVar42)[lVar52 + 1] < bVar24) {
              bVar21 = bVar24;
            }
            bVar24 = (*pauVar42)[lVar52];
                    /* catch() { ... } // from try @ 0030d6cc with catch @ 0030d8b0 */
            if ((byte)(*pauVar42)[lVar52] < bVar25) {
              bVar24 = bVar25;
            }
            (*pauVar34)[lVar52] = bVar24;
                    /* try { // try from 0030d8c0 to 0040d8c3 has its CatchHandler @ 0030cedc */
            (*pauVar34)[lVar52 + 1] = bVar21;
                    /* catch() { ... } // from try @ 0030d924 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030d970 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030d9c8 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030da74 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030db1c with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030dbd0 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030dc54 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030dccc with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030dd44 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030ddbc with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030de34 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030dec4 with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030defc with catch @ 0030d8c4
                       catch() { ... } // from try @ 0030df14 with catch @ 0030d8c4 */
            bVar24 = (*pauVar34)[lVar52 + 3];
            bVar25 = (*pauVar34)[lVar52 + 2];
            bVar21 = (*pauVar42)[lVar52 + 3];
            if ((byte)(*pauVar42)[lVar52 + 3] < bVar24) {
              bVar21 = bVar24;
            }
            bVar24 = (*pauVar42)[lVar52 + 2];
            if ((byte)(*pauVar42)[lVar52 + 2] < bVar25) {
              bVar24 = bVar25;
            }
            (*pauVar34)[lVar52 + 2] = bVar24;
            (*pauVar34)[lVar52 + 3] = bVar21;
          }
        }
      }
    }
LAB_0030d8ec:
    if (iVar36 < (int)uVar28) {
                    /* try { // try from 0030d924 to 0040d927 has its CatchHandler @ 0030d8c4 */
      if ((pauVar34[1] + lVar44 <= *pauVar50 + lVar44 + lVar55 ||
           pauVar50[1] + lVar44 + lVar55 <= pbVar18) && (0x12 < uVar30)) {
        iVar40 = iVar36;
        if (uVar22 != 0) {
          bVar21 = (*pauVar42)[lVar44];
          if ((byte)(*pauVar42)[lVar44] < *pbVar18) {
            bVar21 = *pbVar18;
          }
          *pbVar18 = bVar21;
          iVar40 = iVar1;
          if (uVar22 != 1) {
            bVar24 = (*pauVar34)[iVar1];
            bVar21 = (*pauVar42)[iVar1];
            if ((byte)(*pauVar42)[iVar1] < bVar24) {
              bVar21 = bVar24;
            }
                    /* try { // try from 0030d968 to 0040d96b has its CatchHandler @ 0030df04 */
            (*pauVar34)[iVar1] = bVar21;
            iVar40 = iVar2;
            if (uVar22 != 2) {
                    /* try { // try from 0030d970 to 0040d9a7 has its CatchHandler @ 0030d8c4 */
              bVar24 = (*pauVar34)[iVar2];
              bVar21 = (*pauVar42)[iVar2];
              if ((byte)(*pauVar42)[iVar2] < bVar24) {
                bVar21 = bVar24;
              }
              (*pauVar34)[iVar2] = bVar21;
              iVar40 = iVar3;
              if (uVar22 != 3) {
                bVar24 = (*pauVar34)[iVar3];
                bVar21 = (*pauVar42)[iVar3];
                    /* try { // try from 0030d9ac to 0040d9af has its CatchHandler @ 0030df00 */
                if ((byte)(*pauVar42)[iVar3] < bVar24) {
                  bVar21 = bVar24;
                }
                (*pauVar34)[iVar3] = bVar21;
                iVar40 = iVar4;
                if (uVar22 != 4) {
                    /* try { // try from 0030d9c8 to 0040da53 has its CatchHandler @ 0030d8c4 */
                  bVar24 = (*pauVar34)[iVar4];
                  bVar21 = (*pauVar42)[iVar4];
                  if ((byte)(*pauVar42)[iVar4] < bVar24) {
                    bVar21 = bVar24;
                  }
                  (*pauVar34)[iVar4] = bVar21;
                  iVar40 = iVar5;
                  if (uVar22 != 5) {
                    bVar24 = (*pauVar34)[iVar5];
                    bVar21 = (*pauVar42)[iVar5];
                    if ((byte)(*pauVar42)[iVar5] < bVar24) {
                      bVar21 = bVar24;
                    }
                    (*pauVar34)[iVar5] = bVar21;
                    iVar40 = iVar6;
                    if (uVar22 != 6) {
                      bVar24 = (*pauVar34)[iVar6];
                      bVar21 = (*pauVar42)[iVar6];
                      if ((byte)(*pauVar42)[iVar6] < bVar24) {
                        bVar21 = bVar24;
                      }
                      (*pauVar34)[iVar6] = bVar21;
                      iVar40 = iVar7;
                      if (uVar22 != 7) {
                        bVar24 = (*pauVar34)[iVar7];
                        bVar21 = (*pauVar42)[iVar7];
                        if ((byte)(*pauVar42)[iVar7] < bVar24) {
                          bVar21 = bVar24;
                        }
                        (*pauVar34)[iVar7] = bVar21;
                        iVar40 = iVar8;
                        if (uVar22 != 8) {
                    /* try { // try from 0030da58 to 0040da5b has its CatchHandler @ 0030df24 */
                          bVar24 = (*pauVar34)[iVar8];
                          bVar21 = (*pauVar42)[iVar8];
                          if ((byte)(*pauVar42)[iVar8] < bVar24) {
                            bVar21 = bVar24;
                          }
                          (*pauVar34)[iVar8] = bVar21;
                          iVar40 = iVar9;
                    /* try { // try from 0030da74 to 0040dafb has its CatchHandler @ 0030d8c4 */
                          if (uVar22 != 9) {
                            bVar24 = (*pauVar34)[iVar9];
                            bVar21 = (*pauVar42)[iVar9];
                            if ((byte)(*pauVar42)[iVar9] < bVar24) {
                              bVar21 = bVar24;
                            }
                            (*pauVar34)[iVar9] = bVar21;
                            iVar40 = iVar10;
                            if (uVar22 != 10) {
                              bVar24 = (*pauVar34)[iVar10];
                              bVar21 = (*pauVar42)[iVar10];
                              if ((byte)(*pauVar42)[iVar10] < bVar24) {
                                bVar21 = bVar24;
                              }
                              (*pauVar34)[iVar10] = bVar21;
                              iVar40 = iVar11;
                              if (uVar22 != 0xb) {
                                bVar24 = (*pauVar34)[iVar11];
                                bVar21 = (*pauVar42)[iVar11];
                                if ((byte)(*pauVar42)[iVar11] < bVar24) {
                                  bVar21 = bVar24;
                                }
                                (*pauVar34)[iVar11] = bVar21;
                                iVar40 = iVar12;
                                if (uVar22 != 0xc) {
                                  bVar24 = (*pauVar34)[iVar12];
                    /* try { // try from 0030db00 to 0040db03 has its CatchHandler @ 0030df18 */
                                  bVar21 = (*pauVar42)[iVar12];
                                  if ((byte)(*pauVar42)[iVar12] < bVar24) {
                                    bVar21 = bVar24;
                                  }
                                  (*pauVar34)[iVar12] = bVar21;
                                  iVar40 = iVar13;
                                  if (uVar22 != 0xd) {
                    /* try { // try from 0030db1c to 0040dbaf has its CatchHandler @ 0030d8c4 */
                                    bVar24 = (*pauVar34)[iVar13];
                                    bVar21 = (*pauVar42)[iVar13];
                                    if ((byte)(*pauVar42)[iVar13] < bVar24) {
                                      bVar21 = bVar24;
                                    }
                                    (*pauVar34)[iVar13] = bVar21;
                                    iVar40 = iVar14;
                                    if (uVar22 == 0xf) {
                                      bVar24 = (*pauVar34)[iVar14];
                                      bVar21 = (*pauVar42)[iVar14];
                                      if ((byte)(*pauVar42)[iVar14] < bVar24) {
                                        bVar21 = bVar24;
                                      }
                                      (*pauVar34)[iVar14] = bVar21;
                                      iVar40 = iVar36 + 0xf;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        if (0xe < (uVar30 - 1) - uVar22) {
          uVar37 = 0;
          pauVar41 = (undefined1 (*) [16])(*pauVar34 + lVar44 + (ulong)uVar22);
          pauVar48 = (undefined1 (*) [16])(*pauVar34 + lVar44 + (ulong)uVar22);
          pauVar50 = (undefined1 (*) [16])(*pauVar50 + (ulong)uVar22 + lVar44 + lVar55);
          do {
            uVar37 = uVar37 + 1;
            auVar54 = NEON_umax(*pauVar50,*pauVar41,1);
            *(long *)(*pauVar48 + 8) = auVar54._8_8_;
            *(long *)*pauVar48 = auVar54._0_8_;
            pauVar41 = pauVar41 + 1;
            pauVar48 = pauVar48 + 1;
            pauVar50 = pauVar50 + 1;
          } while (uVar37 < uVar20);
                    /* try { // try from 0030dbb4 to 0040dbb7 has its CatchHandler @ 0030df2c */
          iVar40 = iVar40 + iVar53;
          if (uVar30 - uVar22 == iVar53) goto joined_r0x0030d72c;
        }
        iVar15 = iVar40 + 1;
                    /* try { // try from 0030dbd0 to 0040dc33 has its CatchHandler @ 0030d8c4 */
        bVar21 = (*pauVar42)[iVar40];
        if ((byte)(*pauVar42)[iVar40] < (byte)(*pauVar34)[iVar40]) {
          bVar21 = (*pauVar34)[iVar40];
        }
        (*pauVar34)[iVar40] = bVar21;
        if (iVar15 < (int)uVar28) {
          iVar16 = iVar40 + 2;
          bVar21 = (*pauVar42)[iVar15];
          if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
            bVar21 = (*pauVar34)[iVar15];
          }
          (*pauVar34)[iVar15] = bVar21;
          if (iVar16 < (int)uVar28) {
            iVar15 = iVar40 + 3;
            bVar21 = (*pauVar42)[iVar16];
            if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
              bVar21 = (*pauVar34)[iVar16];
            }
            (*pauVar34)[iVar16] = bVar21;
            if (iVar15 < (int)uVar28) {
              iVar16 = iVar40 + 4;
                    /* try { // try from 0030dc38 to 0040dc3b has its CatchHandler @ 0030df20 */
              bVar21 = (*pauVar42)[iVar15];
              if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                bVar21 = (*pauVar34)[iVar15];
              }
              (*pauVar34)[iVar15] = bVar21;
              if (iVar16 < (int)uVar28) {
                    /* try { // try from 0030dc54 to 0040dcab has its CatchHandler @ 0030d8c4 */
                iVar15 = iVar40 + 5;
                bVar21 = (*pauVar42)[iVar16];
                if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
                  bVar21 = (*pauVar34)[iVar16];
                }
                (*pauVar34)[iVar16] = bVar21;
                if (iVar15 < (int)uVar28) {
                  iVar16 = iVar40 + 6;
                  bVar21 = (*pauVar42)[iVar15];
                  if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                    bVar21 = (*pauVar34)[iVar15];
                  }
                  (*pauVar34)[iVar15] = bVar21;
                  if (iVar16 < (int)uVar28) {
                    iVar15 = iVar40 + 7;
                    bVar21 = (*pauVar42)[iVar16];
                    if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
                      bVar21 = (*pauVar34)[iVar16];
                    }
                    /* try { // try from 0030dcb0 to 0040dcb3 has its CatchHandler @ 0030df28 */
                    (*pauVar34)[iVar16] = bVar21;
                    if (iVar15 < (int)uVar28) {
                      iVar16 = iVar40 + 8;
                    /* try { // try from 0030dccc to 0040dd23 has its CatchHandler @ 0030d8c4 */
                      bVar21 = (*pauVar42)[iVar15];
                      if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                        bVar21 = (*pauVar34)[iVar15];
                      }
                      (*pauVar34)[iVar15] = bVar21;
                      if (iVar16 < (int)uVar28) {
                        iVar15 = iVar40 + 9;
                        bVar21 = (*pauVar42)[iVar16];
                        if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
                          bVar21 = (*pauVar34)[iVar16];
                        }
                        (*pauVar34)[iVar16] = bVar21;
                        if (iVar15 < (int)uVar28) {
                          iVar16 = iVar40 + 10;
                          bVar21 = (*pauVar42)[iVar15];
                          if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                            bVar21 = (*pauVar34)[iVar15];
                          }
                          (*pauVar34)[iVar15] = bVar21;
                          if (iVar16 < (int)uVar28) {
                            iVar15 = iVar40 + 0xb;
                    /* try { // try from 0030dd28 to 0040dd2b has its CatchHandler @ 0030df1c */
                            bVar21 = (*pauVar42)[iVar16];
                            if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
                              bVar21 = (*pauVar34)[iVar16];
                            }
                    /* try { // try from 0030dd44 to 0040dd9b has its CatchHandler @ 0030d8c4 */
                            (*pauVar34)[iVar16] = bVar21;
                            if (iVar15 < (int)uVar28) {
                              iVar16 = iVar40 + 0xc;
                              bVar21 = (*pauVar42)[iVar15];
                              if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                                bVar21 = (*pauVar34)[iVar15];
                              }
                              (*pauVar34)[iVar15] = bVar21;
                              if (iVar16 < (int)uVar28) {
                                iVar15 = iVar40 + 0xd;
                                bVar21 = (*pauVar42)[iVar16];
                                if ((byte)(*pauVar42)[iVar16] < (byte)(*pauVar34)[iVar16]) {
                                  bVar21 = (*pauVar34)[iVar16];
                                }
                                (*pauVar34)[iVar16] = bVar21;
                                if (iVar15 < (int)uVar28) {
                                  iVar40 = iVar40 + 0xe;
                    /* try { // try from 0030dda0 to 0040dda3 has its CatchHandler @ 0030ded4 */
                                  bVar21 = (*pauVar42)[iVar15];
                                  if ((byte)(*pauVar42)[iVar15] < (byte)(*pauVar34)[iVar15]) {
                                    bVar21 = (*pauVar34)[iVar15];
                                  }
                                  (*pauVar34)[iVar15] = bVar21;
                                  if (iVar40 < (int)uVar28) {
                    /* try { // try from 0030ddbc to 0040de13 has its CatchHandler @ 0030d8c4 */
                                    bVar21 = (*pauVar42)[iVar40];
                                    if ((byte)(*pauVar42)[iVar40] < (byte)(*pauVar34)[iVar40]) {
                                      bVar21 = (*pauVar34)[iVar40];
                                    }
                                    (*pauVar34)[iVar40] = bVar21;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        goto joined_r0x0030d72c;
      }
      lVar43 = 0;
      do {
        bVar21 = (*pauVar42)[lVar43 + lVar44];
        if ((byte)(*pauVar42)[lVar43 + lVar44] < pbVar18[lVar43]) {
          bVar21 = pbVar18[lVar43];
        }
        pbVar18[lVar43] = bVar21;
        lVar43 = lVar43 + 1;
      } while (lVar43 != (ulong)(uint)(local_45c - iVar36) + 1);
    }
    goto joined_r0x0030d72c;
  }
  if (0 < (int)uVar28) {
    if ((pauVar49 < pauVar34 + 1 && pauVar34 < pauVar49 + 1) || (uVar28 < 0x16)) {
      lVar55 = 0;
      do {
        (*pauVar49)[lVar55] = (*pauVar34)[lVar55];
        lVar55 = lVar55 + 1;
      } while ((int)lVar55 < (int)uVar28);
    }
    else {
      uVar19 = -(int)pauVar34 & 0xf;
                    /* try { // try from 0030de18 to 0040de1b has its CatchHandler @ 0030dee8 */
      uVar23 = (ulong)uVar19;
      if (uVar28 < uVar19) {
        uVar23 = (ulong)uVar28;
      }
      iVar33 = (int)uVar23;
      iVar32 = 0;
                    /* try { // try from 0030de34 to 0040de9f has its CatchHandler @ 0030d8c4 */
      if (((iVar33 != 0) && ((*pauVar49)[0] = (*pauVar34)[0], iVar32 = iVar33, iVar33 != 1)) &&
         (((*pauVar49)[1] = (*pauVar34)[1], iVar33 != 2 &&
          (((*pauVar49)[2] = (*pauVar34)[2], iVar33 != 3 &&
           ((*pauVar49)[3] = (*pauVar34)[3], iVar33 != 4)))))) {
        (*pauVar49)[4] = (*pauVar34)[4];
        if (iVar33 == 5) {
          iVar32 = 5;
        }
        else {
          (*pauVar49)[5] = (*pauVar34)[5];
                    /* try { // try from 0030debc to 0040debf has its CatchHandler @ 0030deec */
                    /* try { // try from 0030dec4 to 0040dee7 has its CatchHandler @ 0030d8c4 */
                    /* catch() { ... } // from try @ 0030dda0 with catch @ 0030ded4 */
                    /* catch() { ... } // from try @ 0030de18 with catch @ 0030dee8 */
                    /* catch() { ... } // from try @ 0030debc with catch @ 0030deec */
          if (((((iVar33 != 6) && ((*pauVar49)[6] = (*pauVar34)[6], iVar33 != 7)) &&
               ((*pauVar49)[7] = (*pauVar34)[7], iVar33 != 8)) &&
              (((*pauVar49)[8] = (*pauVar34)[8], iVar33 != 9 &&
               ((*pauVar49)[9] = (*pauVar34)[9], iVar33 != 10)))) &&
             (((*pauVar49)[10] = (*pauVar34)[10], iVar33 != 0xb &&
              (((*pauVar49)[0xb] = (*pauVar34)[0xb], iVar33 != 0xc &&
               ((*pauVar49)[0xc] = (*pauVar34)[0xc], iVar33 != 0xd)))))) {
                    /* try { // try from 0030defc to 0040deff has its CatchHandler @ 0030d8c4 */
            (*pauVar49)[0xd] = (*pauVar34)[0xd];
                    /* catch() { ... } // from try @ 0030d9ac with catch @ 0030df00 */
            if (iVar33 == 0xf) {
                    /* catch() { ... } // from try @ 0030d968 with catch @ 0030df04 */
              (*pauVar49)[0xe] = (*pauVar34)[0xe];
            }
            else {
              iVar32 = 0xe;
            }
          }
        }
      }
                    /* try { // try from 0030df14 to 0040df17 has its CatchHandler @ 0030d8c4 */
                    /* catch() { ... } // from try @ 0030db00 with catch @ 0030df18 */
                    /* catch() { ... } // from try @ 0030dd28 with catch @ 0030df1c */
                    /* catch() { ... } // from try @ 0030dc38 with catch @ 0030df20 */
                    /* catch() { ... } // from try @ 0030da58 with catch @ 0030df24 */
                    /* catch() { ... } // from try @ 0030dcb0 with catch @ 0030df28 */
      uVar19 = ((uVar28 - iVar33) - 0x10 >> 4) + 1;
                    /* catch() { ... } // from try @ 0030dbb4 with catch @ 0030df2c */
      iVar36 = uVar19 * 0x10;
                    /* catch() { ... } // from try @ 0030df98 with catch @ 0030df30
                       catch() { ... } // from try @ 0030dfe4 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e054 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e178 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e208 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e2b8 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e348 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e3d8 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e468 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e4f8 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e588 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e618 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e6a8 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e738 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e778 with catch @ 0030df30
                       catch() { ... } // from try @ 0030e790 with catch @ 0030df30 */
      if (0xe < (uint)(local_45c - iVar33)) {
        uVar46 = 0;
        puVar35 = (undefined8 *)(*pauVar34 + uVar23);
        puVar45 = (undefined8 *)(*pauVar49 + uVar23);
        do {
          uVar31 = *puVar35;
          uVar46 = uVar46 + 1;
          puVar45[1] = puVar35[1];
          *puVar45 = uVar31;
          puVar35 = puVar35 + 2;
          puVar45 = puVar45 + 2;
        } while (uVar46 < uVar19);
        iVar32 = iVar32 + iVar36;
        if (iVar36 == uVar28 - iVar33) goto LAB_0030e0bc;
      }
      iVar33 = iVar32 + 1;
      (*pauVar49)[iVar32] = (*pauVar34)[iVar32];
      if (iVar33 < (int)uVar28) {
        iVar36 = iVar32 + 2;
        (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
        if (iVar36 < (int)uVar28) {
          iVar33 = iVar32 + 3;
                    /* try { // try from 0030df98 to 0040df9b has its CatchHandler @ 0030df30 */
          (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
          if (iVar33 < (int)uVar28) {
            iVar36 = iVar32 + 4;
            (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
            if (iVar36 < (int)uVar28) {
              iVar33 = iVar32 + 5;
              (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
              if (iVar33 < (int)uVar28) {
                    /* try { // try from 0030dfdc to 0040dfdf has its CatchHandler @ 0030e780 */
                iVar36 = iVar32 + 6;
                    /* try { // try from 0030dfe4 to 0040e01b has its CatchHandler @ 0030df30 */
                (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                if (iVar36 < (int)uVar28) {
                  iVar33 = iVar32 + 7;
                  (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                  if (iVar33 < (int)uVar28) {
                    iVar36 = iVar32 + 8;
                    (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                    if (iVar36 < (int)uVar28) {
                      iVar33 = iVar32 + 9;
                    /* try { // try from 0030e020 to 0040e023 has its CatchHandler @ 0030e794 */
                      (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                      if (iVar33 < (int)uVar28) {
                        iVar36 = iVar32 + 10;
                        (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                        if (iVar36 < (int)uVar28) {
                    /* try { // try from 0030e054 to 0040e13f has its CatchHandler @ 0030df30 */
                          iVar33 = iVar32 + 0xb;
                          (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                          if (iVar33 < (int)uVar28) {
                            iVar36 = iVar32 + 0xc;
                            (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                            if (iVar36 < (int)uVar28) {
                              iVar33 = iVar32 + 0xd;
                              (*pauVar49)[iVar36] = (*pauVar34)[iVar36];
                              if (iVar33 < (int)uVar28) {
                                iVar32 = iVar32 + 0xe;
                                (*pauVar49)[iVar33] = (*pauVar34)[iVar33];
                                if (iVar32 < (int)uVar28) {
                                  (*pauVar49)[iVar32] = (*pauVar34)[iVar32];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0030e0bc:
  if ((pauVar34 != (undefined1 (*) [16])auStack_408) && (pauVar34 != (undefined1 (*) [16])0x0)) {
    operator_delete__(pauVar34);
  }
  return;
}


==================================================================

### FUNC 0030e2b4 (2908 bytes) name=FUN_0030e2b4

void FUN_0030e2b4(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  ushort *puVar7;
  ushort *puVar8;
  uint uVar9;
  ushort uVar10;
  uint uVar11;
  int iVar12;
  ushort uVar13;
  ushort uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  undefined8 uVar19;
  undefined1 (*pauVar20) [16];
  bool bVar21;
  uint uVar22;
  ulong uVar23;
  undefined1 (*pauVar24) [16];
  undefined8 *puVar25;
  long lVar26;
  undefined1 (*pauVar27) [16];
  uint uVar28;
  uint uVar29;
  long lVar30;
  undefined1 (*pauVar31) [16];
  undefined1 (*pauVar32) [16];
  uint uVar33;
  undefined8 *puVar34;
  ulong uVar35;
  ulong uVar36;
  ulong uVar37;
  ulong uVar38;
  ulong uVar39;
  ulong uVar40;
  undefined1 (*pauVar41) [16];
  ulong uVar42;
  int iVar43;
  ulong uVar44;
  ushort *puVar45;
  ulong uVar46;
  long lVar47;
  undefined1 auVar48 [16];
  long lVar49;
  undefined1 (*pauVar50) [16];
  long lVar51;
  long lVar52;
  int iVar53;
  undefined1 auStack_410 [1040];
  
                    /* try { // try from 0030e2b8 to 0040e30f has its CatchHandler @ 0030df30 */
  pauVar32 = (undefined1 (*) [16])auStack_410;
  iVar53 = (*(int **)(param_1 + 0x10))[1];
  iVar12 = **(int **)(param_1 + 0x10);
  uVar16 = iVar53 + (*param_1 >> 3 & 0x1ff) * iVar53;
                    /* try { // try from 0030e314 to 0040e317 has its CatchHandler @ 0030e7a0 */
  uVar46 = (ulong)(int)uVar16;
  if (uVar46 < 0x209) {
    bVar21 = false;
  }
  else {
    uVar23 = uVar46 << 1;
    if (0x3f80000000000000 < uVar46) {
      uVar23 = 0xffffffffffffffff;
    }
    pauVar24 = operator_new__(uVar23);
    bVar21 = pauVar24 != pauVar32;
                    /* try { // try from 0030e348 to 0040e39f has its CatchHandler @ 0030df30 */
    pauVar32 = pauVar24;
  }
  pauVar50 = *(undefined1 (**) [16])(param_2 + 0x10);
  pauVar24 = *(undefined1 (**) [16])(param_1 + 4);
  uVar46 = *(ulong *)(param_1 + 0x14) >> 1;
  if (0 < (int)uVar16) {
    if ((pauVar24 < pauVar32 + 1 && pauVar32 < pauVar24 + 1) || (uVar16 < 0xf)) {
      lVar26 = 0;
      do {
        *(undefined2 *)(*pauVar32 + lVar26 * 2) = *(undefined2 *)(*pauVar24 + lVar26 * 2);
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar16);
    }
    else {
      uVar33 = -((uint)((ulong)pauVar24 >> 1) & 7) & 7;
                    /* try { // try from 0030e3a4 to 0040e3a7 has its CatchHandler @ 0030e79c */
      uVar1 = uVar16;
      if (uVar33 < uVar16) {
        uVar1 = uVar33;
      }
      uVar33 = uVar1;
                    /* try { // try from 0030e3d8 to 0040e42f has its CatchHandler @ 0030df30 */
      if (((((uVar1 != 0) && (*(undefined2 *)*pauVar32 = *(undefined2 *)*pauVar24, uVar1 != 1)) &&
           (*(undefined2 *)(*pauVar32 + 2) = *(undefined2 *)(*pauVar24 + 2), uVar1 != 2)) &&
          ((*(undefined2 *)(*pauVar32 + 4) = *(undefined2 *)(*pauVar24 + 4), uVar1 != 3 &&
           (*(undefined2 *)(*pauVar32 + 6) = *(undefined2 *)(*pauVar24 + 6), uVar1 != 4)))) &&
         (*(undefined2 *)(*pauVar32 + 8) = *(undefined2 *)(*pauVar24 + 8), uVar1 != 5)) {
        *(undefined2 *)(*pauVar32 + 10) = *(undefined2 *)(*pauVar24 + 10);
        if (uVar1 == 7) {
          *(undefined2 *)(*pauVar32 + 0xc) = *(undefined2 *)(*pauVar24 + 0xc);
          uVar33 = 7;
        }
        else {
          uVar33 = 6;
        }
      }
                    /* try { // try from 0030e434 to 0040e437 has its CatchHandler @ 0030e748 */
      uVar28 = ((uVar16 - uVar1) - 8 >> 3) + 1;
      uVar29 = 0;
      iVar53 = uVar28 * 8;
      puVar25 = (undefined8 *)(*pauVar32 + (ulong)uVar1 * 2);
      puVar34 = (undefined8 *)(*pauVar24 + (ulong)uVar1 * 2);
      do {
        uVar19 = *puVar34;
        uVar29 = uVar29 + 1;
        puVar25[1] = puVar34[1];
        *puVar25 = uVar19;
        puVar25 = puVar25 + 2;
        puVar34 = puVar34 + 2;
      } while (uVar29 < uVar28);
      uVar33 = uVar33 + iVar53;
      if (uVar16 - uVar1 != iVar53) {
        uVar23 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar33 << 1;
                    /* try { // try from 0030e468 to 0040e4bf has its CatchHandler @ 0030df30 */
        *(undefined2 *)(*pauVar32 + uVar23) = *(undefined2 *)(*pauVar24 + uVar23);
                    /* try { // try from 0030e4c4 to 0040e4c7 has its CatchHandler @ 0030e75c */
        if ((((int)(uVar33 + 1) < (int)uVar16) &&
            (*(undefined2 *)(*pauVar32 + uVar23 + 2) = *(undefined2 *)(*pauVar24 + uVar23 + 2),
            (int)(uVar33 + 2) < (int)uVar16)) &&
           ((*(undefined2 *)(*pauVar32 + uVar23 + 4) = *(undefined2 *)(*pauVar24 + uVar23 + 4),
            (int)(uVar33 + 3) < (int)uVar16 &&
            (((*(undefined2 *)(*pauVar32 + uVar23 + 6) = *(undefined2 *)(*pauVar24 + uVar23 + 6),
              (int)(uVar33 + 4) < (int)uVar16 &&
              (*(undefined2 *)(*pauVar32 + uVar23 + 8) = *(undefined2 *)(*pauVar24 + uVar23 + 8),
              (int)(uVar33 + 5) < (int)uVar16)) &&
             (*(undefined2 *)(*pauVar32 + uVar23 + 10) = *(undefined2 *)(*pauVar24 + uVar23 + 10),
             (int)(uVar33 + 6) < (int)uVar16)))))) {
                    /* try { // try from 0030e4f8 to 0040e54f has its CatchHandler @ 0030df30 */
          *(undefined2 *)(*pauVar32 + uVar23 + 0xc) = *(undefined2 *)(*pauVar24 + uVar23 + 0xc);
        }
      }
    }
  }
  uVar17 = uVar16 - 4;
  uVar15 = uVar17 >> 2;
  uVar33 = uVar15 + 1;
                    /* try { // try from 0030e554 to 0040e557 has its CatchHandler @ 0030e764 */
  uVar1 = (uVar15 - 1 >> 1) + 1;
  uVar28 = uVar1 * 8;
  uVar29 = uVar33 * 4;
                    /* try { // try from 0030e588 to 0040e5df has its CatchHandler @ 0030df30 */
  if (uVar17 < 4) {
    uVar28 = 0;
  }
  uVar23 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar28 << 1;
  if ((int)(uVar16 - 3) < 1) {
    uVar29 = 0;
  }
  uVar28 = uVar29 + 1;
  lVar26 = (long)(int)uVar29;
  uVar18 = uVar16 - uVar29;
  lVar51 = NEON_shl(lVar26,1);
  uVar2 = uVar29 + 2;
                    /* try { // try from 0030e5e4 to 0040e5e7 has its CatchHandler @ 0030e760 */
  uVar35 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar28 << 1;
  uVar3 = uVar29 + 3;
  lVar49 = NEON_shl(lVar26 + uVar46,1);
  puVar8 = (ushort *)(*pauVar32 + lVar51);
                    /* try { // try from 0030e618 to 0040e66f has its CatchHandler @ 0030df30 */
  uVar4 = uVar29 + 4;
  uVar9 = -((uint)((ulong)puVar8 >> 1) & 7) & 7;
  uVar11 = uVar18;
  if (uVar9 < uVar18) {
    uVar11 = uVar9;
  }
  uVar9 = uVar29 + 5;
  uVar36 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1;
  uVar37 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
  uVar38 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
                    /* try { // try from 0030e674 to 0040e677 has its CatchHandler @ 0030e7a8 */
  uVar39 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar9 << 1;
  uVar5 = uVar29 + 6;
                    /* try { // try from 0030e6a8 to 0040e713 has its CatchHandler @ 0030df30 */
  uVar6 = ((uVar18 - uVar11) - 8 >> 3) + 1;
  uVar40 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
  lVar30 = (ulong)uVar11 * 2;
  lVar52 = NEON_shl(uVar46 + 8 + lVar26,1);
                    /* try { // try from 0030e730 to 0040e733 has its CatchHandler @ 0030e768 */
                    /* try { // try from 0030e738 to 0040e75b has its CatchHandler @ 0030df30 */
  iVar53 = uVar6 * 8;
                    /* catch() { ... } // from try @ 0030e434 with catch @ 0030e748 */
  pauVar20 = pauVar24;
                    /* catch() { ... } // from try @ 0030e4c4 with catch @ 0030e75c */
                    /* catch() { ... } // from try @ 0030e5e4 with catch @ 0030e760 */
joined_r0x0030e764:
  do {
    pauVar41 = pauVar20;
    iVar12 = iVar12 + -1;
                    /* catch() { ... } // from try @ 0030e554 with catch @ 0030e764 */
    if (iVar12 == 0) break;
    pauVar24 = (undefined1 (*) [16])(*pauVar24 + uVar46 * 2);
                    /* catch() { ... } // from try @ 0030e730 with catch @ 0030e768 */
    pauVar20 = (undefined1 (*) [16])(*pauVar41 + uVar46 * 2);
    if (0 < (int)(uVar16 - 3)) {
                    /* try { // try from 0030e778 to 0040e77b has its CatchHandler @ 0030df30 */
                    /* catch() { ... } // from try @ 0030e284 with catch @ 0030e77c */
                    /* catch() { ... } // from try @ 0030dfdc with catch @ 0030e780 */
                    /* try { // try from 0030e790 to 0040e793 has its CatchHandler @ 0030df30 */
                    /* catch() { ... } // from try @ 0030e020 with catch @ 0030e794 */
                    /* catch() { ... } // from try @ 0030e1d4 with catch @ 0030e798 */
                    /* catch() { ... } // from try @ 0030e3a4 with catch @ 0030e79c */
      if ((pauVar32 < pauVar24 + 4 && pauVar24 < pauVar32 + 4) || (uVar33 < 3)) {
                    /* try { // try from 0030ed0c to 0040ed0f has its CatchHandler @ 0030ef7c */
        puVar45 = (ushort *)(*pauVar20 + 2);
        pauVar27 = pauVar32;
        do {
          puVar7 = puVar45 + 4;
          uVar14 = *(ushort *)*pauVar27;
          uVar13 = puVar45[-1];
          uVar10 = *puVar45;
          if (*(ushort *)(*pauVar27 + 2) < *puVar45) {
            uVar10 = *(ushort *)(*pauVar27 + 2);
          }
          *(ushort *)(*pauVar27 + 2) = uVar10;
          if (uVar14 < uVar13) {
            uVar13 = uVar14;
          }
          *(ushort *)*pauVar27 = uVar13;
          uVar13 = puVar45[1];
          uVar10 = puVar45[2];
          if (*(ushort *)(*pauVar27 + 6) < puVar45[2]) {
            uVar10 = *(ushort *)(*pauVar27 + 6);
          }
          *(ushort *)(*pauVar27 + 6) = uVar10;
          if (*(ushort *)(*pauVar27 + 4) < uVar13) {
            uVar13 = *(ushort *)(*pauVar27 + 4);
          }
          *(ushort *)(*pauVar27 + 4) = uVar13;
          puVar45 = puVar7;
          pauVar27 = (undefined1 (*) [16])(*pauVar27 + 8);
        } while (puVar7 != (ushort *)(*pauVar20 + (ulong)uVar15 * 8 + 10));
      }
      else {
                    /* catch() { ... } // from try @ 0030e314 with catch @ 0030e7a0 */
                    /* catch() { ... } // from try @ 0030e144 with catch @ 0030e7a4 */
                    /* catch() { ... } // from try @ 0030e674 with catch @ 0030e7a8 */
        if (3 < uVar17) {
                    /* catch() { ... } // from try @ 0030e814 with catch @ 0030e7ac
                       catch() { ... } // from try @ 0030e968 with catch @ 0030e7ac
                       catch() { ... } // from try @ 0030eac8 with catch @ 0030e7ac */
          uVar22 = 0;
          pauVar27 = pauVar32;
          pauVar31 = pauVar24;
          do {
            uVar22 = uVar22 + 1;
            auVar48 = NEON_umin(*pauVar31,*pauVar27,2);
            *(long *)(*pauVar27 + 8) = auVar48._8_8_;
            *(long *)*pauVar27 = auVar48._0_8_;
            pauVar27 = pauVar27 + 1;
            pauVar31 = pauVar31 + 1;
          } while (uVar22 < uVar1);
          if (uVar33 == uVar1 * 2) goto LAB_0030e844;
        }
        uVar13 = *(ushort *)(*pauVar32 + uVar23 + 2);
        uVar14 = *(ushort *)(*pauVar32 + uVar23);
        uVar10 = *(ushort *)(*pauVar20 + uVar23 + 2);
        if (uVar13 < *(ushort *)(*pauVar20 + uVar23 + 2)) {
          uVar10 = uVar13;
        }
        uVar13 = *(ushort *)(*pauVar20 + uVar23);
        if (uVar14 < *(ushort *)(*pauVar20 + uVar23)) {
          uVar13 = uVar14;
        }
        *(ushort *)(*pauVar32 + uVar23) = uVar13;
                    /* try { // try from 0030e814 to 0040e817 has its CatchHandler @ 0030e7ac */
        *(ushort *)(*pauVar32 + uVar23 + 2) = uVar10;
        uVar13 = *(ushort *)(*pauVar32 + uVar23 + 6);
        uVar14 = *(ushort *)(*pauVar32 + uVar23 + 4);
        uVar10 = *(ushort *)(*pauVar20 + uVar23 + 6);
        if (uVar13 < *(ushort *)(*pauVar20 + uVar23 + 6)) {
          uVar10 = uVar13;
        }
                    /* try { // try from 0030e834 to 0040e837 has its CatchHandler @ 0030eafc */
        uVar13 = *(ushort *)(*pauVar20 + uVar23 + 4);
        if (uVar14 < *(ushort *)(*pauVar20 + uVar23 + 4)) {
          uVar13 = uVar14;
        }
        *(ushort *)(*pauVar32 + uVar23 + 4) = uVar13;
        *(ushort *)(*pauVar32 + uVar23 + 6) = uVar10;
      }
    }
LAB_0030e844:
    if ((int)uVar29 < (int)uVar16) {
                    /* try { // try from 0030e85c to 0040e85f has its CatchHandler @ 0030eacc */
      if ((*pauVar41 + lVar49 < pauVar32[1] + lVar51 && puVar8 < *pauVar41 + lVar52) ||
         (uVar18 < 0xc)) {
        lVar47 = 0;
        do {
          uVar10 = *(ushort *)(*pauVar20 + lVar47 + lVar51);
          if (*(ushort *)((long)puVar8 + lVar47) < *(ushort *)(*pauVar20 + lVar47 + lVar51)) {
            uVar10 = *(ushort *)((long)puVar8 + lVar47);
          }
          *(ushort *)((long)puVar8 + lVar47) = uVar10;
          lVar47 = lVar47 + 2;
        } while (lVar47 != ((ulong)((uVar16 - 1) - uVar29) + 1) * 2);
        goto joined_r0x0030e764;
      }
      if (uVar11 == 0) {
        uVar44 = (ulong)uVar29;
      }
      else {
                    /* try { // try from 0030e88c to 0040e88f has its CatchHandler @ 0030eb04 */
                    /* try { // try from 0030e894 to 0040e897 has its CatchHandler @ 0030eacc */
        uVar10 = *(ushort *)(*pauVar20 + lVar51);
        if (*puVar8 < *(ushort *)(*pauVar20 + lVar51)) {
          uVar10 = *puVar8;
        }
        *puVar8 = uVar10;
        if (uVar11 == 1) {
          uVar44 = (ulong)uVar28;
                    /* try { // try from 0030ed80 to 0040edcb has its CatchHandler @ 0030eb14 */
        }
        else {
          uVar13 = *(ushort *)(*pauVar32 + uVar35);
          uVar10 = *(ushort *)(*pauVar20 + uVar35);
          if (uVar13 < *(ushort *)(*pauVar20 + uVar35)) {
            uVar10 = uVar13;
          }
          *(ushort *)(*pauVar32 + uVar35) = uVar10;
          if (uVar11 == 2) {
            uVar44 = (ulong)uVar2;
          }
          else {
            uVar13 = *(ushort *)(*pauVar32 + uVar36);
            uVar10 = *(ushort *)(*pauVar20 + uVar36);
            if (uVar13 < *(ushort *)(*pauVar20 + uVar36)) {
              uVar10 = uVar13;
            }
            *(ushort *)(*pauVar32 + uVar36) = uVar10;
            if (uVar11 == 3) {
              uVar44 = (ulong)uVar3;
            }
            else {
              uVar13 = *(ushort *)(*pauVar32 + uVar37);
              uVar10 = *(ushort *)(*pauVar20 + uVar37);
              if (uVar13 < *(ushort *)(*pauVar20 + uVar37)) {
                uVar10 = uVar13;
              }
              *(ushort *)(*pauVar32 + uVar37) = uVar10;
              if (uVar11 == 4) {
                uVar44 = (ulong)uVar4;
              }
              else {
                uVar13 = *(ushort *)(*pauVar32 + uVar38);
                uVar10 = *(ushort *)(*pauVar20 + uVar38);
                if (uVar13 < *(ushort *)(*pauVar20 + uVar38)) {
                  uVar10 = uVar13;
                }
                *(ushort *)(*pauVar32 + uVar38) = uVar10;
                if (uVar11 == 5) {
                  uVar44 = (ulong)uVar9;
                }
                else {
                  uVar13 = *(ushort *)(*pauVar32 + uVar39);
                  uVar10 = *(ushort *)(*pauVar20 + uVar39);
                  if (uVar13 < *(ushort *)(*pauVar20 + uVar39)) {
                    uVar10 = uVar13;
                  }
                  *(ushort *)(*pauVar32 + uVar39) = uVar10;
                  if (uVar11 == 7) {
                    uVar13 = *(ushort *)(*pauVar32 + uVar40);
                    uVar44 = (ulong)(uVar29 + 7);
                    uVar10 = *(ushort *)(*pauVar20 + uVar40);
                    if (uVar13 < *(ushort *)(*pauVar20 + uVar40)) {
                      uVar10 = uVar13;
                    }
                    *(ushort *)(*pauVar32 + uVar40) = uVar10;
                  }
                  else {
                    uVar44 = (ulong)uVar5;
                  }
                }
              }
            }
          }
        }
      }
                    /* try { // try from 0030e968 to 0040ea4b has its CatchHandler @ 0030e7ac */
      if (6 < (uVar18 - 1) - uVar11) {
        uVar22 = 0;
        pauVar27 = (undefined1 (*) [16])(*pauVar32 + (lVar26 + (ulong)uVar11) * 2);
        puVar25 = (undefined8 *)(*pauVar32 + lVar51 + lVar30);
        pauVar41 = (undefined1 (*) [16])(*pauVar41 + lVar30 + lVar49);
        do {
          uVar22 = uVar22 + 1;
          auVar48 = NEON_umin(*pauVar41,*pauVar27,2);
          puVar25[1] = auVar48._8_8_;
          *puVar25 = auVar48._0_8_;
          pauVar27 = pauVar27 + 1;
          puVar25 = puVar25 + 2;
          pauVar41 = pauVar41 + 1;
        } while (uVar22 < uVar6);
        uVar44 = (ulong)(uint)((int)uVar44 + iVar53);
        if (uVar18 - uVar11 == iVar53) goto joined_r0x0030e764;
      }
      uVar42 = -(uVar44 >> 0x1f) & 0xfffffffe00000000 | uVar44 << 1;
      iVar43 = (int)uVar44;
      uVar10 = *(ushort *)(*pauVar20 + uVar42);
      if (*(ushort *)(*pauVar32 + uVar42) < *(ushort *)(*pauVar20 + uVar42)) {
        uVar10 = *(ushort *)(*pauVar32 + uVar42);
      }
      *(ushort *)(*pauVar32 + uVar42) = uVar10;
      if (iVar43 + 1 < (int)uVar16) {
        lVar47 = uVar42 + 2;
        uVar10 = *(ushort *)(*pauVar20 + lVar47);
        if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
          uVar10 = *(ushort *)(*pauVar32 + lVar47);
        }
        *(ushort *)(*pauVar32 + lVar47) = uVar10;
        if (iVar43 + 2 < (int)uVar16) {
          lVar47 = uVar42 + 4;
          uVar10 = *(ushort *)(*pauVar20 + lVar47);
          if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
            uVar10 = *(ushort *)(*pauVar32 + lVar47);
          }
          *(ushort *)(*pauVar32 + lVar47) = uVar10;
          if (iVar43 + 3 < (int)uVar16) {
            lVar47 = uVar42 + 6;
            uVar10 = *(ushort *)(*pauVar20 + lVar47);
            if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
              uVar10 = *(ushort *)(*pauVar32 + lVar47);
            }
            *(ushort *)(*pauVar32 + lVar47) = uVar10;
            if (iVar43 + 4 < (int)uVar16) {
              lVar47 = uVar42 + 8;
                    /* try { // try from 0030ea58 to 0040ea5b has its CatchHandler @ 0030eafc */
              uVar10 = *(ushort *)(*pauVar20 + lVar47);
              if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
                uVar10 = *(ushort *)(*pauVar32 + lVar47);
              }
              *(ushort *)(*pauVar32 + lVar47) = uVar10;
                    /* try { // try from 0030ea68 to 0040ea6b has its CatchHandler @ 0030ea70 */
              if (iVar43 + 5 < (int)uVar16) {
                lVar47 = uVar42 + 10;
                    /* catch() { ... } // from try @ 0030ea68 with catch @ 0030ea70 */
                uVar10 = *(ushort *)(*pauVar20 + lVar47);
                if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
                  uVar10 = *(ushort *)(*pauVar32 + lVar47);
                }
                *(ushort *)(*pauVar32 + lVar47) = uVar10;
                if (iVar43 + 6 < (int)uVar16) {
                  lVar47 = uVar42 + 0xc;
                  uVar10 = *(ushort *)(*pauVar20 + lVar47);
                  if (*(ushort *)(*pauVar32 + lVar47) < *(ushort *)(*pauVar20 + lVar47)) {
                    uVar10 = *(ushort *)(*pauVar32 + lVar47);
                  }
                  *(ushort *)(*pauVar32 + lVar47) = uVar10;
                }
              }
            }
          }
        }
      }
    }
  } while( true );
  if (0 < (int)uVar16) {
                    /* try { // try from 0030eac8 to 0040eacb has its CatchHandler @ 0030e7ac */
                    /* catch() { ... } // from try @ 0030e85c with catch @ 0030eacc
                       catch() { ... } // from try @ 0030e894 with catch @ 0030eacc */
    if ((pauVar50 < pauVar32 + 1 && pauVar32 < pauVar50 + 1) || (uVar16 < 0xf)) {
      lVar26 = 0;
      do {
        *(undefined2 *)(*pauVar50 + lVar26 * 2) = *(undefined2 *)(*pauVar32 + lVar26 * 2);
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar16);
    }
    else {
                    /* catch() { ... } // from try @ 0030e834 with catch @ 0030eafc
                       catch() { ... } // from try @ 0030ea58 with catch @ 0030eafc */
      uVar33 = -((uint)((ulong)pauVar32 >> 1) & 7) & 7;
                    /* catch() { ... } // from try @ 0030e88c with catch @ 0030eb04 */
      if (uVar16 < uVar33) {
        uVar33 = uVar16;
      }
      uVar46 = 0;
      if (uVar33 != 0) {
                    /* catch() { ... } // from try @ 0030eb48 with catch @ 0030eb14
                       catch() { ... } // from try @ 0030ed80 with catch @ 0030eb14
                       catch() { ... } // from try @ 0030ef4c with catch @ 0030eb14
                       catch() { ... } // from try @ 0030efa0 with catch @ 0030eb14 */
        *(undefined2 *)*pauVar50 = *(undefined2 *)*pauVar32;
                    /* try { // try from 0030eb48 to 0040eb67 has its CatchHandler @ 0030eb14 */
        if (((uVar33 == 1) ||
            (*(undefined2 *)(*pauVar50 + 2) = *(undefined2 *)(*pauVar32 + 2), uVar33 == 2)) ||
           ((*(undefined2 *)(*pauVar50 + 4) = *(undefined2 *)(*pauVar32 + 4), uVar33 == 3 ||
            (*(undefined2 *)(*pauVar50 + 6) = *(undefined2 *)(*pauVar32 + 6), uVar33 == 4)))) {
          uVar46 = (ulong)uVar33;
        }
        else {
          *(undefined2 *)(*pauVar50 + 8) = *(undefined2 *)(*pauVar32 + 8);
          if (uVar33 == 5) {
            uVar46 = 5;
          }
          else {
            *(undefined2 *)(*pauVar50 + 10) = *(undefined2 *)(*pauVar32 + 10);
            if (uVar33 == 7) {
              uVar46 = 7;
              *(undefined2 *)(*pauVar50 + 0xc) = *(undefined2 *)(*pauVar32 + 0xc);
            }
            else {
              uVar46 = 6;
            }
          }
        }
      }
      uVar1 = ((uVar16 - uVar33) - 8 >> 3) + 1;
      iVar53 = uVar1 * 8;
      if (6 < (uVar16 - 1) - uVar33) {
        uVar28 = 0;
                    /* try { // try from 0030ebb0 to 0040ebd3 has its CatchHandler @ 0030ef7c */
        puVar25 = (undefined8 *)(*pauVar32 + (ulong)uVar33 * 2);
        puVar34 = (undefined8 *)(*pauVar50 + (ulong)uVar33 * 2);
        do {
          uVar19 = *puVar25;
          uVar28 = uVar28 + 1;
          puVar34[1] = puVar25[1];
          *puVar34 = uVar19;
          puVar25 = puVar25 + 2;
          puVar34 = puVar34 + 2;
        } while (uVar28 < uVar1);
        uVar46 = (ulong)(uint)((int)uVar46 + iVar53);
        if (iVar53 == uVar16 - uVar33) goto LAB_0030ec7c;
      }
      uVar23 = -(uVar46 >> 0x1f) & 0xfffffffe00000000 | uVar46 << 1;
      iVar53 = (int)uVar46;
      *(undefined2 *)(*pauVar50 + uVar23) = *(undefined2 *)(*pauVar32 + uVar23);
                    /* try { // try from 0030ec30 to 0040ec33 has its CatchHandler @ 0030eff8 */
      if (((((iVar53 + 1 < (int)uVar16) &&
            (*(undefined2 *)(*pauVar50 + uVar23 + 2) = *(undefined2 *)(*pauVar32 + uVar23 + 2),
            iVar53 + 2 < (int)uVar16)) &&
           (*(undefined2 *)(*pauVar50 + uVar23 + 4) = *(undefined2 *)(*pauVar32 + uVar23 + 4),
           iVar53 + 3 < (int)uVar16)) &&
          ((*(undefined2 *)(*pauVar50 + uVar23 + 6) = *(undefined2 *)(*pauVar32 + uVar23 + 6),
           iVar53 + 4 < (int)uVar16 &&
           (*(undefined2 *)(*pauVar50 + uVar23 + 8) = *(undefined2 *)(*pauVar32 + uVar23 + 8),
           iVar53 + 5 < (int)uVar16)))) &&
         (*(undefined2 *)(*pauVar50 + uVar23 + 10) = *(undefined2 *)(*pauVar32 + uVar23 + 10),
         iVar53 + 6 < (int)uVar16)) {
                    /* try { // try from 0030ec74 to 0040ec77 has its CatchHandler @ 0030efa4 */
        *(undefined2 *)(*pauVar50 + uVar23 + 0xc) = *(undefined2 *)(*pauVar32 + uVar23 + 0xc);
      }
    }
  }
LAB_0030ec7c:
  if (bVar21) {
    operator_delete__(pauVar32);
  }
  return;
}


==================================================================

### FUNC 0030ee10 (3000 bytes) name=FUN_0030ee10

void FUN_0030ee10(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  long lVar8;
  short *psVar9;
  short *psVar10;
  uint uVar11;
  short sVar12;
  uint uVar13;
  int iVar14;
  short sVar15;
  short sVar16;
  short sVar17;
  uint uVar18;
  uint uVar19;
  uint uVar20;
  uint uVar21;
  undefined8 uVar22;
  undefined1 (*pauVar23) [16];
  bool bVar24;
  ulong uVar25;
  undefined1 (*pauVar26) [16];
  undefined8 *puVar27;
  long lVar28;
  uint uVar29;
  long lVar30;
  uint uVar31;
  undefined1 (*pauVar32) [16];
  long lVar33;
  undefined1 (*pauVar34) [16];
  long lVar35;
  uint uVar36;
  int iVar37;
  ulong uVar38;
  short *psVar39;
  undefined1 (*pauVar40) [16];
  undefined1 (*pauVar41) [16];
  ulong uVar42;
  undefined8 *puVar43;
  uint uVar44;
  ulong uVar45;
  ulong uVar46;
  ulong uVar47;
  ulong uVar48;
  ulong uVar49;
  ulong uVar50;
  ulong uVar51;
  long lVar52;
  undefined1 auVar53 [16];
  undefined1 (*pauVar54) [16];
  long lVar55;
  long lVar56;
  int iVar57;
  undefined1 auStack_410 [1040];
  
  pauVar40 = (undefined1 (*) [16])auStack_410;
  iVar57 = (*(int **)(param_1 + 0x10))[1];
  iVar14 = **(int **)(param_1 + 0x10);
  uVar19 = iVar57 + (*param_1 >> 3 & 0x1ff) * iVar57;
  uVar51 = (ulong)(int)uVar19;
  if (uVar51 < 0x209) {
    bVar24 = false;
                    /* try { // try from 0030f968 to 0040f96b has its CatchHandler @ 0030f044 */
  }
  else {
    uVar25 = uVar51 << 1;
    if (0x3f80000000000000 < uVar51) {
      uVar25 = 0xffffffffffffffff;
    }
    pauVar26 = operator_new__(uVar25);
    bVar24 = pauVar26 != pauVar40;
    pauVar40 = pauVar26;
  }
  pauVar54 = *(undefined1 (**) [16])(param_2 + 0x10);
  pauVar26 = *(undefined1 (**) [16])(param_1 + 4);
  uVar51 = *(ulong *)(param_1 + 0x14) >> 1;
  if (0 < (int)uVar19) {
    if ((pauVar26 < pauVar40 + 1 && pauVar40 < pauVar26 + 1) || (uVar19 < 0xf)) {
      lVar28 = 0;
      do {
                    /* try { // try from 0030f978 to 0040f97b has its CatchHandler @ 0030fb88 */
        *(undefined2 *)(*pauVar40 + lVar28 * 2) = *(undefined2 *)(*pauVar26 + lVar28 * 2);
        lVar28 = lVar28 + 1;
                    /* try { // try from 0030f988 to 0040f997 has its CatchHandler @ 0030faa8 */
      } while ((int)lVar28 < (int)uVar19);
    }
    else {
      uVar44 = -((uint)((ulong)pauVar26 >> 1) & 7) & 7;
      uVar1 = uVar19;
      if (uVar44 < uVar19) {
        uVar1 = uVar44;
      }
      uVar44 = uVar1;
                    /* try { // try from 0030ef4c to 0040ef4f has its CatchHandler @ 0030eb14 */
      if (((((uVar1 != 0) && (*(undefined2 *)*pauVar40 = *(undefined2 *)*pauVar26, uVar1 != 1)) &&
           (*(undefined2 *)(*pauVar40 + 2) = *(undefined2 *)(*pauVar26 + 2), uVar1 != 2)) &&
          ((*(undefined2 *)(*pauVar40 + 4) = *(undefined2 *)(*pauVar26 + 4), uVar1 != 3 &&
           (*(undefined2 *)(*pauVar40 + 6) = *(undefined2 *)(*pauVar26 + 6), uVar1 != 4)))) &&
         (*(undefined2 *)(*pauVar40 + 8) = *(undefined2 *)(*pauVar26 + 8), uVar1 != 5)) {
                    /* try { // try from 0030ef5c to 0040ef5f has its CatchHandler @ 0030ef7c */
        *(undefined2 *)(*pauVar40 + 10) = *(undefined2 *)(*pauVar26 + 10);
        if (uVar1 == 7) {
                    /* try { // try from 0030ef6c to 0040ef6f has its CatchHandler @ 0030eff8 */
          *(undefined2 *)(*pauVar40 + 0xc) = *(undefined2 *)(*pauVar26 + 0xc);
          uVar44 = 7;
        }
        else {
                    /* try { // try from 0030f9b8 to 0040f9bb has its CatchHandler @ 0030faa8 */
          uVar44 = 6;
        }
      }
                    /* catch() { ... } // from try @ 0030ebb0 with catch @ 0030ef7c
                       catch() { ... } // from try @ 0030ed0c with catch @ 0030ef7c
                       catch() { ... } // from try @ 0030edd4 with catch @ 0030ef7c
                       catch() { ... } // from try @ 0030ef5c with catch @ 0030ef7c */
      uVar31 = ((uVar19 - uVar1) - 8 >> 3) + 1;
      uVar36 = 0;
      iVar57 = uVar31 * 8;
      puVar27 = (undefined8 *)(*pauVar40 + (ulong)uVar1 * 2);
      puVar43 = (undefined8 *)(*pauVar26 + (ulong)uVar1 * 2);
      do {
                    /* try { // try from 0030efa0 to 0040efa3 has its CatchHandler @ 0030eb14 */
        uVar22 = *puVar43;
                    /* catch() { ... } // from try @ 0030ec74 with catch @ 0030efa4 */
        uVar36 = uVar36 + 1;
        puVar27[1] = puVar43[1];
        *puVar27 = uVar22;
        puVar27 = puVar27 + 2;
        puVar43 = puVar43 + 2;
      } while (uVar36 < uVar31);
      uVar44 = uVar44 + iVar57;
      if (uVar19 - uVar1 != iVar57) {
        uVar25 = -(ulong)(uVar44 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar44 << 1;
        *(undefined2 *)(*pauVar40 + uVar25) = *(undefined2 *)(*pauVar26 + uVar25);
                    /* catch() { ... } // from try @ 0030ec30 with catch @ 0030eff8
                       catch() { ... } // from try @ 0030ef6c with catch @ 0030eff8 */
                    /* catch() { ... } // from try @ 0030f08c with catch @ 0030f044
                       catch() { ... } // from try @ 0030f550 with catch @ 0030f044
                       catch() { ... } // from try @ 0030f968 with catch @ 0030f044
                       catch() { ... } // from try @ 0030fa78 with catch @ 0030f044 */
        if ((((int)(uVar44 + 1) < (int)uVar19) &&
            (*(undefined2 *)(*pauVar40 + uVar25 + 2) = *(undefined2 *)(*pauVar26 + uVar25 + 2),
            (int)(uVar44 + 2) < (int)uVar19)) &&
           ((*(undefined2 *)(*pauVar40 + uVar25 + 4) = *(undefined2 *)(*pauVar26 + uVar25 + 4),
            (int)(uVar44 + 3) < (int)uVar19 &&
            (((*(undefined2 *)(*pauVar40 + uVar25 + 6) = *(undefined2 *)(*pauVar26 + uVar25 + 6),
              (int)(uVar44 + 4) < (int)uVar19 &&
              (*(undefined2 *)(*pauVar40 + uVar25 + 8) = *(undefined2 *)(*pauVar26 + uVar25 + 8),
              (int)(uVar44 + 5) < (int)uVar19)) &&
             (*(undefined2 *)(*pauVar40 + uVar25 + 10) = *(undefined2 *)(*pauVar26 + uVar25 + 10),
             (int)(uVar44 + 6) < (int)uVar19)))))) {
          *(undefined2 *)(*pauVar40 + uVar25 + 0xc) = *(undefined2 *)(*pauVar26 + uVar25 + 0xc);
        }
      }
    }
  }
  uVar20 = uVar19 - 4;
                    /* try { // try from 0030f08c to 0040f11f has its CatchHandler @ 0030f044 */
  uVar18 = uVar20 >> 2;
  uVar44 = uVar18 + 1;
  uVar1 = (uVar18 - 1 >> 1) + 1;
  uVar31 = uVar1 * 8;
  uVar36 = uVar44 * 4;
  if (uVar20 < 4) {
    uVar31 = 0;
  }
  uVar25 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar31 << 1;
  lVar28 = uVar25 + 2;
  lVar7 = uVar25 + 4;
  lVar8 = uVar25 + 6;
  if ((int)(uVar19 - 3) < 1) {
    uVar36 = 0;
  }
  uVar21 = uVar19 - uVar36;
  uVar31 = uVar36 + 1;
  lVar30 = (long)(int)uVar36;
  uVar2 = uVar36 + 2;
  uVar45 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar31 << 1;
  uVar3 = uVar36 + 3;
  lVar52 = lVar30 * 2;
                    /* try { // try from 0030f144 to 0040f167 has its CatchHandler @ 0030fa90 */
  uVar4 = uVar36 + 4;
  uVar5 = uVar36 + 5;
  uVar46 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1;
  psVar10 = (short *)(*pauVar40 + lVar52);
  uVar47 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
  uVar11 = -((uint)((ulong)psVar10 >> 1) & 7) & 7;
  lVar55 = NEON_shl(lVar30 + uVar51,1);
  uVar13 = uVar21;
  if (uVar11 < uVar21) {
    uVar13 = uVar11;
  }
                    /* try { // try from 0030f1a8 to 0040f1ab has its CatchHandler @ 0030faa8 */
  uVar11 = uVar36 + 6;
  uVar48 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
  uVar50 = -(ulong)(uVar11 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar11 << 1;
  uVar49 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
                    /* try { // try from 0030f1ec to 0040f1ef has its CatchHandler @ 0030fa98 */
                    /* try { // try from 0030f1f4 to 0040f243 has its CatchHandler @ 0030faa8 */
  lVar33 = (ulong)uVar13 * 2;
  uVar6 = ((uVar21 - uVar13) - 8 >> 3) + 1;
                    /* try { // try from 0030f248 to 0040f24b has its CatchHandler @ 0030fa7c */
                    /* try { // try from 0030f264 to 0040f2bf has its CatchHandler @ 0030faa8 */
  lVar56 = NEON_shl(uVar51 + 8 + lVar30,1);
  iVar57 = uVar6 * 8;
  pauVar23 = pauVar26;
joined_r0x0030f2a8:
  do {
    pauVar41 = pauVar23;
    iVar14 = iVar14 + -1;
    if (iVar14 == 0) break;
    pauVar26 = (undefined1 (*) [16])(*pauVar26 + uVar51 * 2);
    pauVar23 = (undefined1 (*) [16])(*pauVar41 + uVar51 * 2);
    if (0 < (int)(uVar19 - 3)) {
                    /* try { // try from 0030f2c4 to 0040f2c7 has its CatchHandler @ 0030fb38 */
                    /* try { // try from 0030f2e0 to 0040f2e3 has its CatchHandler @ 0030faa8 */
      if ((pauVar40 < pauVar26 + 4 && pauVar26 < pauVar40 + 4) || (uVar44 < 3)) {
        psVar39 = (short *)(*pauVar23 + 2);
        pauVar32 = pauVar40;
        do {
          psVar9 = psVar39 + 4;
          sVar17 = *(short *)*pauVar32;
          sVar15 = psVar39[-1];
          sVar16 = psVar39[-1];
                    /* try { // try from 0030f8dc to 0040f8df has its CatchHandler @ 0030fbb4 */
          sVar12 = *psVar39;
          if (*(short *)(*pauVar32 + 2) < *psVar39) {
            sVar12 = *(short *)(*pauVar32 + 2);
          }
          *(short *)(*pauVar32 + 2) = sVar12;
          if (sVar17 < sVar16) {
            sVar15 = sVar17;
          }
          *(short *)*pauVar32 = sVar15;
                    /* try { // try from 0030f8f8 to 0040f8fb has its CatchHandler @ 0030faa8 */
          sVar15 = psVar39[1];
          sVar12 = psVar39[2];
          if (*(short *)(*pauVar32 + 6) < psVar39[2]) {
            sVar12 = *(short *)(*pauVar32 + 6);
          }
          sVar16 = psVar39[1];
          *(short *)(*pauVar32 + 6) = sVar12;
          if (*(short *)(*pauVar32 + 4) < sVar16) {
            sVar15 = *(short *)(*pauVar32 + 4);
          }
          *(short *)(*pauVar32 + 4) = sVar15;
          psVar39 = psVar9;
          pauVar32 = (undefined1 (*) [16])(*pauVar32 + 8);
        } while (psVar9 != (short *)(*pauVar23 + (ulong)uVar18 * 8 + 10));
      }
      else {
        if (3 < uVar20) {
          uVar29 = 0;
          pauVar32 = pauVar40;
          pauVar34 = pauVar26;
          do {
            uVar29 = uVar29 + 1;
            auVar53 = NEON_smin(*pauVar34,*pauVar32,2);
            *(long *)(*pauVar32 + 8) = auVar53._8_8_;
            *(long *)*pauVar32 = auVar53._0_8_;
            pauVar32 = pauVar32 + 1;
            pauVar34 = pauVar34 + 1;
          } while (uVar29 < uVar1);
          if (uVar44 == uVar1 * 2) goto LAB_0030f388;
        }
        sVar15 = *(short *)(*pauVar40 + lVar28);
        sVar16 = *(short *)(*pauVar40 + uVar25);
        sVar12 = *(short *)(*pauVar23 + lVar28);
        if (sVar15 < *(short *)(*pauVar23 + lVar28)) {
          sVar12 = sVar15;
        }
        sVar15 = *(short *)(*pauVar23 + uVar25);
        if (sVar16 < *(short *)(*pauVar23 + uVar25)) {
          sVar15 = sVar16;
        }
        *(short *)(*pauVar40 + uVar25) = sVar15;
        *(short *)(*pauVar40 + lVar28) = sVar12;
        sVar15 = *(short *)(*pauVar40 + lVar8);
        sVar16 = *(short *)(*pauVar40 + lVar7);
                    /* try { // try from 0030f36c to 0040f36f has its CatchHandler @ 0030fb3c */
        sVar12 = *(short *)(*pauVar23 + lVar8);
        if (sVar15 < *(short *)(*pauVar23 + lVar8)) {
          sVar12 = sVar15;
        }
        sVar15 = *(short *)(*pauVar23 + lVar7);
        if (sVar16 < *(short *)(*pauVar23 + lVar7)) {
          sVar15 = sVar16;
        }
        *(short *)(*pauVar40 + lVar7) = sVar15;
        *(short *)(*pauVar40 + lVar8) = sVar12;
      }
    }
LAB_0030f388:
    if ((int)uVar36 < (int)uVar19) {
                    /* try { // try from 0030f394 to 0040f397 has its CatchHandler @ 0030fb44 */
                    /* try { // try from 0030f3c4 to 0040f3c7 has its CatchHandler @ 0030fab0 */
      if ((*pauVar41 + lVar55 < pauVar40[1] + lVar52 && psVar10 < *pauVar41 + lVar56) ||
         (uVar21 < 0xc)) {
        lVar35 = 0;
        do {
                    /* try { // try from 0030f87c to 0040f8d7 has its CatchHandler @ 0030faa8 */
          sVar12 = *(short *)(*pauVar23 + lVar35 + lVar52);
          if (*(short *)((long)psVar10 + lVar35) < *(short *)(*pauVar23 + lVar35 + lVar52)) {
            sVar12 = *(short *)((long)psVar10 + lVar35);
          }
          *(short *)((long)psVar10 + lVar35) = sVar12;
          lVar35 = lVar35 + 2;
        } while (lVar35 != ((ulong)((uVar19 - 1) - uVar36) + 1) * 2);
        goto joined_r0x0030f2a8;
      }
      if (uVar13 == 0) {
        uVar38 = (ulong)uVar36;
      }
      else {
                    /* try { // try from 0030f3cc to 0040f3cf has its CatchHandler @ 0030fb44 */
        sVar12 = *(short *)(*pauVar23 + lVar52);
        if (*psVar10 < *(short *)(*pauVar23 + lVar52)) {
          sVar12 = *psVar10;
        }
        *psVar10 = sVar12;
        if (uVar13 == 1) {
          uVar38 = (ulong)uVar31;
        }
        else {
          sVar15 = *(short *)(*pauVar40 + uVar45);
          sVar12 = *(short *)(*pauVar23 + uVar45);
          if (sVar15 < *(short *)(*pauVar23 + uVar45)) {
            sVar12 = sVar15;
          }
          *(short *)(*pauVar40 + uVar45) = sVar12;
          if (uVar13 == 2) {
            uVar38 = (ulong)uVar2;
          }
          else {
            sVar15 = *(short *)(*pauVar40 + uVar46);
            sVar12 = *(short *)(*pauVar23 + uVar46);
            if (sVar15 < *(short *)(*pauVar23 + uVar46)) {
              sVar12 = sVar15;
            }
            *(short *)(*pauVar40 + uVar46) = sVar12;
            if (uVar13 == 3) {
                    /* try { // try from 0030f954 to 0040f957 has its CatchHandler @ 0030fa90 */
              uVar38 = (ulong)uVar3;
            }
            else {
                    /* try { // try from 0030f44c to 0040f44f has its CatchHandler @ 0030fb4c */
              sVar15 = *(short *)(*pauVar40 + uVar47);
              sVar12 = *(short *)(*pauVar23 + uVar47);
              if (sVar15 < *(short *)(*pauVar23 + uVar47)) {
                sVar12 = sVar15;
              }
              *(short *)(*pauVar40 + uVar47) = sVar12;
              if (uVar13 == 4) {
                uVar38 = (ulong)uVar4;
              }
              else {
                sVar15 = *(short *)(*pauVar40 + uVar48);
                sVar12 = *(short *)(*pauVar23 + uVar48);
                if (sVar15 < *(short *)(*pauVar23 + uVar48)) {
                  sVar12 = sVar15;
                }
                *(short *)(*pauVar40 + uVar48) = sVar12;
                if (uVar13 == 5) {
                  uVar38 = (ulong)uVar5;
                }
                else {
                  sVar15 = *(short *)(*pauVar40 + uVar49);
                  sVar12 = *(short *)(*pauVar23 + uVar49);
                  if (sVar15 < *(short *)(*pauVar23 + uVar49)) {
                    sVar12 = sVar15;
                  }
                  *(short *)(*pauVar40 + uVar49) = sVar12;
                  if (uVar13 == 7) {
                    uVar38 = (ulong)(uVar36 + 7);
                    sVar15 = *(short *)(*pauVar40 + uVar50);
                    sVar12 = *(short *)(*pauVar23 + uVar50);
                    if (sVar15 < *(short *)(*pauVar23 + uVar50)) {
                      sVar12 = sVar15;
                    }
                    *(short *)(*pauVar40 + uVar50) = sVar12;
                  }
                  else {
                    uVar38 = (ulong)uVar11;
                  }
                }
              }
            }
          }
        }
      }
      if (6 < (uVar21 - 1) - uVar13) {
        uVar29 = 0;
        pauVar32 = (undefined1 (*) [16])(*pauVar40 + (lVar30 + (ulong)uVar13) * 2);
        puVar27 = (undefined8 *)(*pauVar40 + lVar52 + lVar33);
        pauVar41 = (undefined1 (*) [16])(*pauVar41 + lVar33 + lVar55);
        do {
          uVar29 = uVar29 + 1;
                    /* try { // try from 0030f524 to 0040f527 has its CatchHandler @ 0030fa90 */
          auVar53 = NEON_smin(*pauVar41,*pauVar32,2);
          puVar27[1] = auVar53._8_8_;
          *puVar27 = auVar53._0_8_;
          pauVar32 = pauVar32 + 1;
          puVar27 = puVar27 + 2;
          pauVar41 = pauVar41 + 1;
        } while (uVar29 < uVar6);
        uVar38 = (ulong)(uint)((int)uVar38 + iVar57);
        if (uVar21 - uVar13 == iVar57) goto joined_r0x0030f2a8;
      }
      uVar42 = -(uVar38 >> 0x1f) & 0xfffffffe00000000 | uVar38 << 1;
      iVar37 = (int)uVar38;
                    /* try { // try from 0030f550 to 0040f5a3 has its CatchHandler @ 0030f044 */
      sVar12 = *(short *)(*pauVar23 + uVar42);
      if (*(short *)(*pauVar40 + uVar42) < *(short *)(*pauVar23 + uVar42)) {
        sVar12 = *(short *)(*pauVar40 + uVar42);
      }
      *(short *)(*pauVar40 + uVar42) = sVar12;
      if (iVar37 + 1 < (int)uVar19) {
        lVar35 = uVar42 + 2;
        sVar12 = *(short *)(*pauVar23 + lVar35);
        if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
          sVar12 = *(short *)(*pauVar40 + lVar35);
        }
        *(short *)(*pauVar40 + lVar35) = sVar12;
        if (iVar37 + 2 < (int)uVar19) {
          lVar35 = uVar42 + 4;
          sVar12 = *(short *)(*pauVar23 + lVar35);
          if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
            sVar12 = *(short *)(*pauVar40 + lVar35);
          }
          *(short *)(*pauVar40 + lVar35) = sVar12;
          if (iVar37 + 3 < (int)uVar19) {
            lVar35 = uVar42 + 6;
            sVar12 = *(short *)(*pauVar23 + lVar35);
            if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
              sVar12 = *(short *)(*pauVar40 + lVar35);
            }
            *(short *)(*pauVar40 + lVar35) = sVar12;
            if (iVar37 + 4 < (int)uVar19) {
              lVar35 = uVar42 + 8;
              sVar12 = *(short *)(*pauVar23 + lVar35);
              if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
                sVar12 = *(short *)(*pauVar40 + lVar35);
              }
              *(short *)(*pauVar40 + lVar35) = sVar12;
              if (iVar37 + 5 < (int)uVar19) {
                lVar35 = uVar42 + 10;
                sVar12 = *(short *)(*pauVar23 + lVar35);
                if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
                  sVar12 = *(short *)(*pauVar40 + lVar35);
                }
                *(short *)(*pauVar40 + lVar35) = sVar12;
                if (iVar37 + 6 < (int)uVar19) {
                  lVar35 = uVar42 + 0xc;
                  sVar12 = *(short *)(*pauVar23 + lVar35);
                  if (*(short *)(*pauVar40 + lVar35) < *(short *)(*pauVar23 + lVar35)) {
                    sVar12 = *(short *)(*pauVar40 + lVar35);
                  }
                  *(short *)(*pauVar40 + lVar35) = sVar12;
                }
              }
            }
          }
        }
      }
    }
  } while( true );
  if (0 < (int)uVar19) {
    if ((pauVar54 < pauVar40 + 1 && pauVar40 < pauVar54 + 1) || (uVar19 < 0xf)) {
      lVar28 = 0;
      do {
                    /* try { // try from 0030f99c to 0040f99f has its CatchHandler @ 0030fb84 */
        *(undefined2 *)(*pauVar54 + lVar28 * 2) = *(undefined2 *)(*pauVar40 + lVar28 * 2);
        lVar28 = lVar28 + 1;
      } while ((int)lVar28 < (int)uVar19);
    }
    else {
      uVar44 = -((uint)((ulong)pauVar40 >> 1) & 7) & 7;
      if (uVar19 < uVar44) {
        uVar44 = uVar19;
      }
      uVar51 = 0;
      if (uVar44 != 0) {
        *(undefined2 *)*pauVar54 = *(undefined2 *)*pauVar40;
        if (((uVar44 == 1) ||
            (*(undefined2 *)(*pauVar54 + 2) = *(undefined2 *)(*pauVar40 + 2), uVar44 == 2)) ||
           ((*(undefined2 *)(*pauVar54 + 4) = *(undefined2 *)(*pauVar40 + 4), uVar44 == 3 ||
            (*(undefined2 *)(*pauVar54 + 6) = *(undefined2 *)(*pauVar40 + 6), uVar44 == 4)))) {
          uVar51 = (ulong)uVar44;
        }
        else {
          *(undefined2 *)(*pauVar54 + 8) = *(undefined2 *)(*pauVar40 + 8);
          if (uVar44 == 5) {
            uVar51 = 5;
          }
          else {
            *(undefined2 *)(*pauVar54 + 10) = *(undefined2 *)(*pauVar40 + 10);
            if (uVar44 == 7) {
              uVar51 = 7;
              *(undefined2 *)(*pauVar54 + 0xc) = *(undefined2 *)(*pauVar40 + 0xc);
            }
            else {
              uVar51 = 6;
            }
          }
        }
      }
                    /* try { // try from 0030f72c to 0040f72f has its CatchHandler @ 0030fa90 */
      uVar1 = ((uVar19 - uVar44) - 8 >> 3) + 1;
      iVar57 = uVar1 * 8;
      if (6 < (uVar19 - 1) - uVar44) {
        uVar31 = 0;
        puVar27 = (undefined8 *)(*pauVar40 + (ulong)uVar44 * 2);
        puVar43 = (undefined8 *)(*pauVar54 + (ulong)uVar44 * 2);
        do {
                    /* try { // try from 0030f75c to 0040f75f has its CatchHandler @ 0030faa8 */
          uVar22 = *puVar27;
          uVar31 = uVar31 + 1;
                    /* try { // try from 0030f764 to 0040f767 has its CatchHandler @ 0030fa8c */
          puVar43[1] = puVar27[1];
          *puVar43 = uVar22;
          puVar27 = puVar27 + 2;
          puVar43 = puVar43 + 2;
        } while (uVar31 < uVar1);
        uVar51 = (ulong)(uint)((int)uVar51 + iVar57);
        if (iVar57 == uVar19 - uVar44) goto LAB_0030f824;
      }
      uVar25 = -(uVar51 >> 0x1f) & 0xfffffffe00000000 | uVar51 << 1;
      iVar57 = (int)uVar51;
                    /* try { // try from 0030f780 to 0040f803 has its CatchHandler @ 0030faa8 */
      *(undefined2 *)(*pauVar54 + uVar25) = *(undefined2 *)(*pauVar40 + uVar25);
      if (((((iVar57 + 1 < (int)uVar19) &&
            (*(undefined2 *)(*pauVar54 + uVar25 + 2) = *(undefined2 *)(*pauVar40 + uVar25 + 2),
            iVar57 + 2 < (int)uVar19)) &&
           (*(undefined2 *)(*pauVar54 + uVar25 + 4) = *(undefined2 *)(*pauVar40 + uVar25 + 4),
           iVar57 + 3 < (int)uVar19)) &&
          ((*(undefined2 *)(*pauVar54 + uVar25 + 6) = *(undefined2 *)(*pauVar40 + uVar25 + 6),
           iVar57 + 4 < (int)uVar19 &&
           (*(undefined2 *)(*pauVar54 + uVar25 + 8) = *(undefined2 *)(*pauVar40 + uVar25 + 8),
           iVar57 + 5 < (int)uVar19)))) &&
         (*(undefined2 *)(*pauVar54 + uVar25 + 10) = *(undefined2 *)(*pauVar40 + uVar25 + 10),
         iVar57 + 6 < (int)uVar19)) {
                    /* try { // try from 0030f820 to 0040f823 has its CatchHandler @ 0030fa30 */
        *(undefined2 *)(*pauVar54 + uVar25 + 0xc) = *(undefined2 *)(*pauVar40 + uVar25 + 0xc);
      }
    }
  }
LAB_0030f824:
                    /* try { // try from 0030f828 to 0040f85b has its CatchHandler @ 0030faa8 */
  if (bVar24) {
    operator_delete__(pauVar40);
  }
                    /* try { // try from 0030f860 to 0040f863 has its CatchHandler @ 0030fbb8 */
  return;
}


==================================================================

### FUNC 0030f9c8 (2908 bytes) name=FUN_0030f9c8

void FUN_0030f9c8(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  ushort *puVar7;
  ushort *puVar8;
  uint uVar9;
  ushort uVar10;
  uint uVar11;
  int iVar12;
  ushort uVar13;
  ushort uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  undefined8 uVar19;
  undefined1 (*pauVar20) [16];
  bool bVar21;
  uint uVar22;
  ulong uVar23;
  undefined1 (*pauVar24) [16];
  undefined8 *puVar25;
  long lVar26;
  undefined1 (*pauVar27) [16];
  uint uVar28;
  uint uVar29;
  long lVar30;
  undefined1 (*pauVar31) [16];
  undefined1 (*pauVar32) [16];
  uint uVar33;
  undefined8 *puVar34;
  ulong uVar35;
  ulong uVar36;
  ulong uVar37;
  ulong uVar38;
  ulong uVar39;
  ulong uVar40;
  undefined1 (*pauVar41) [16];
  ulong uVar42;
  int iVar43;
  ulong uVar44;
  ushort *puVar45;
  ulong uVar46;
  long lVar47;
  undefined1 auVar48 [16];
  long lVar49;
  undefined1 (*pauVar50) [16];
  long lVar51;
  long lVar52;
  int iVar53;
  undefined1 auStack_410 [1040];
  
  pauVar32 = (undefined1 (*) [16])auStack_410;
  iVar53 = (*(int **)(param_1 + 0x10))[1];
                    /* try { // try from 0030fa14 to 0040fa17 has its CatchHandler @ 0030fb3c */
  iVar12 = **(int **)(param_1 + 0x10);
  uVar16 = iVar53 + (*param_1 >> 3 & 0x1ff) * iVar53;
                    /* try { // try from 0030fa28 to 0040fa2b has its CatchHandler @ 0030fb7c */
  uVar46 = (ulong)(int)uVar16;
                    /* catch() { ... } // from try @ 0030f820 with catch @ 0030fa30 */
  if (uVar46 < 0x209) {
    bVar21 = false;
  }
  else {
    uVar23 = uVar46 << 1;
    if (0x3f80000000000000 < uVar46) {
      uVar23 = 0xffffffffffffffff;
    }
    pauVar24 = operator_new__(uVar23);
    bVar21 = pauVar24 != pauVar32;
    pauVar32 = pauVar24;
  }
  pauVar50 = *(undefined1 (**) [16])(param_2 + 0x10);
  pauVar24 = *(undefined1 (**) [16])(param_1 + 4);
                    /* try { // try from 0030fa78 to 0040fa7b has its CatchHandler @ 0030f044 */
  uVar46 = *(ulong *)(param_1 + 0x14) >> 1;
                    /* catch() { ... } // from try @ 0030f248 with catch @ 0030fa7c */
  if (0 < (int)uVar16) {
                    /* catch() { ... } // from try @ 0030f764 with catch @ 0030fa8c */
                    /* catch() { ... } // from try @ 0030f144 with catch @ 0030fa90
                       catch() { ... } // from try @ 0030f524 with catch @ 0030fa90
                       catch() { ... } // from try @ 0030f72c with catch @ 0030fa90
                       catch() { ... } // from try @ 0030f954 with catch @ 0030fa90 */
                    /* catch() { ... } // from try @ 0030f1ec with catch @ 0030fa98 */
    if ((pauVar24 < pauVar32 + 1 && pauVar32 < pauVar24 + 1) || (uVar16 < 0xf)) {
      lVar26 = 0;
      do {
        *(undefined2 *)(*pauVar32 + lVar26 * 2) = *(undefined2 *)(*pauVar24 + lVar26 * 2);
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar16);
    }
    else {
                    /* catch() { ... } // from try @ 0030f1a8 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f1f4 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f264 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f2e0 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f75c with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f780 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f828 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f87c with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f8f8 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f988 with catch @ 0030faa8
                       catch() { ... } // from try @ 0030f9b8 with catch @ 0030faa8 */
                    /* catch() { ... } // from try @ 0030f3c4 with catch @ 0030fab0 */
      uVar33 = -((uint)((ulong)pauVar24 >> 1) & 7) & 7;
      uVar1 = uVar16;
      if (uVar33 < uVar16) {
        uVar1 = uVar33;
      }
      uVar33 = uVar1;
      if (((((uVar1 != 0) && (*(undefined2 *)*pauVar32 = *(undefined2 *)*pauVar24, uVar1 != 1)) &&
           (*(undefined2 *)(*pauVar32 + 2) = *(undefined2 *)(*pauVar24 + 2), uVar1 != 2)) &&
          ((*(undefined2 *)(*pauVar32 + 4) = *(undefined2 *)(*pauVar24 + 4), uVar1 != 3 &&
           (*(undefined2 *)(*pauVar32 + 6) = *(undefined2 *)(*pauVar24 + 6), uVar1 != 4)))) &&
         (*(undefined2 *)(*pauVar32 + 8) = *(undefined2 *)(*pauVar24 + 8), uVar1 != 5)) {
        *(undefined2 *)(*pauVar32 + 10) = *(undefined2 *)(*pauVar24 + 10);
        if (uVar1 == 7) {
          *(undefined2 *)(*pauVar32 + 0xc) = *(undefined2 *)(*pauVar24 + 0xc);
          uVar33 = 7;
        }
        else {
          uVar33 = 6;
        }
      }
                    /* catch() { ... } // from try @ 0030f2c4 with catch @ 0030fb38 */
                    /* catch() { ... } // from try @ 0030f36c with catch @ 0030fb3c
                       catch() { ... } // from try @ 0030fa14 with catch @ 0030fb3c */
                    /* catch() { ... } // from try @ 0030f394 with catch @ 0030fb44
                       catch() { ... } // from try @ 0030f3cc with catch @ 0030fb44 */
                    /* catch() { ... } // from try @ 0030f44c with catch @ 0030fb4c */
      uVar28 = ((uVar16 - uVar1) - 8 >> 3) + 1;
      uVar29 = 0;
      iVar53 = uVar28 * 8;
      puVar25 = (undefined8 *)(*pauVar32 + (ulong)uVar1 * 2);
      puVar34 = (undefined8 *)(*pauVar24 + (ulong)uVar1 * 2);
      do {
        uVar19 = *puVar34;
        uVar29 = uVar29 + 1;
        puVar25[1] = puVar34[1];
        *puVar25 = uVar19;
        puVar25 = puVar25 + 2;
        puVar34 = puVar34 + 2;
      } while (uVar29 < uVar28);
      uVar33 = uVar33 + iVar53;
      if (uVar16 - uVar1 != iVar53) {
        uVar23 = -(ulong)(uVar33 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar33 << 1;
                    /* catch() { ... } // from try @ 0030fa28 with catch @ 0030fb7c */
                    /* catch() { ... } // from try @ 0030f99c with catch @ 0030fb84 */
                    /* catch() { ... } // from try @ 0030f978 with catch @ 0030fb88 */
        *(undefined2 *)(*pauVar32 + uVar23) = *(undefined2 *)(*pauVar24 + uVar23);
                    /* catch() { ... } // from try @ 0030f8dc with catch @ 0030fbb4 */
                    /* catch() { ... } // from try @ 0030f860 with catch @ 0030fbb8 */
                    /* catch() { ... } // from try @ 0030fc40 with catch @ 0030fbc0
                       catch() { ... } // from try @ 0030fc8c with catch @ 0030fbc0
                       catch() { ... } // from try @ 003100c0 with catch @ 0030fbc0 */
        if ((((int)(uVar33 + 1) < (int)uVar16) &&
            (*(undefined2 *)(*pauVar32 + uVar23 + 2) = *(undefined2 *)(*pauVar24 + uVar23 + 2),
            (int)(uVar33 + 2) < (int)uVar16)) &&
           ((*(undefined2 *)(*pauVar32 + uVar23 + 4) = *(undefined2 *)(*pauVar24 + uVar23 + 4),
            (int)(uVar33 + 3) < (int)uVar16 &&
            (((*(undefined2 *)(*pauVar32 + uVar23 + 6) = *(undefined2 *)(*pauVar24 + uVar23 + 6),
              (int)(uVar33 + 4) < (int)uVar16 &&
              (*(undefined2 *)(*pauVar32 + uVar23 + 8) = *(undefined2 *)(*pauVar24 + uVar23 + 8),
              (int)(uVar33 + 5) < (int)uVar16)) &&
             (*(undefined2 *)(*pauVar32 + uVar23 + 10) = *(undefined2 *)(*pauVar24 + uVar23 + 10),
             (int)(uVar33 + 6) < (int)uVar16)))))) {
          *(undefined2 *)(*pauVar32 + uVar23 + 0xc) = *(undefined2 *)(*pauVar24 + uVar23 + 0xc);
        }
      }
    }
  }
  uVar17 = uVar16 - 4;
                    /* try { // try from 0030fc40 to 0040fc43 has its CatchHandler @ 0030fbc0 */
  uVar15 = uVar17 >> 2;
  uVar33 = uVar15 + 1;
  uVar1 = (uVar15 - 1 >> 1) + 1;
  uVar28 = uVar1 * 8;
                    /* try { // try from 0030fc84 to 0040fc87 has its CatchHandler @ 003100b0 */
  uVar29 = uVar33 * 4;
                    /* try { // try from 0030fc8c to 0040fceb has its CatchHandler @ 0030fbc0 */
  if (uVar17 < 4) {
    uVar28 = 0;
  }
  uVar23 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar28 << 1;
  if ((int)(uVar16 - 3) < 1) {
    uVar29 = 0;
  }
  uVar28 = uVar29 + 1;
  lVar26 = (long)(int)uVar29;
  uVar18 = uVar16 - uVar29;
  lVar51 = NEON_shl(lVar26,1);
  uVar2 = uVar29 + 2;
  uVar35 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar28 << 1;
  uVar3 = uVar29 + 3;
  lVar49 = NEON_shl(lVar26 + uVar46,1);
  puVar8 = (ushort *)(*pauVar32 + lVar51);
  uVar4 = uVar29 + 4;
  uVar9 = -((uint)((ulong)puVar8 >> 1) & 7) & 7;
  uVar11 = uVar18;
  if (uVar9 < uVar18) {
    uVar11 = uVar9;
  }
  uVar9 = uVar29 + 5;
  uVar36 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1;
  uVar37 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
  uVar38 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
  uVar39 = -(ulong)(uVar9 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar9 << 1;
  uVar5 = uVar29 + 6;
  uVar6 = ((uVar18 - uVar11) - 8 >> 3) + 1;
  uVar40 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
  lVar30 = (ulong)uVar11 * 2;
  lVar52 = NEON_shl(uVar46 + 8 + lVar26,1);
  iVar53 = uVar6 * 8;
  pauVar20 = pauVar24;
joined_r0x0030fe78:
  do {
    pauVar41 = pauVar20;
    iVar12 = iVar12 + -1;
    if (iVar12 == 0) break;
    pauVar24 = (undefined1 (*) [16])(*pauVar24 + uVar46 * 2);
    pauVar20 = (undefined1 (*) [16])(*pauVar41 + uVar46 * 2);
    if (0 < (int)(uVar16 - 3)) {
      if ((pauVar32 < pauVar24 + 4 && pauVar24 < pauVar32 + 4) || (uVar33 < 3)) {
        puVar45 = (ushort *)(*pauVar20 + 2);
        pauVar27 = pauVar32;
        do {
          puVar7 = puVar45 + 4;
          uVar14 = *(ushort *)*pauVar27;
          uVar13 = puVar45[-1];
          uVar10 = *puVar45;
          if (*puVar45 < *(ushort *)(*pauVar27 + 2)) {
            uVar10 = *(ushort *)(*pauVar27 + 2);
          }
          *(ushort *)(*pauVar27 + 2) = uVar10;
          if (uVar13 < uVar14) {
            uVar13 = uVar14;
          }
          *(ushort *)*pauVar27 = uVar13;
          uVar13 = puVar45[1];
          uVar10 = puVar45[2];
          if (puVar45[2] < *(ushort *)(*pauVar27 + 6)) {
            uVar10 = *(ushort *)(*pauVar27 + 6);
          }
          *(ushort *)(*pauVar27 + 6) = uVar10;
          if (uVar13 < *(ushort *)(*pauVar27 + 4)) {
            uVar13 = *(ushort *)(*pauVar27 + 4);
          }
          *(ushort *)(*pauVar27 + 4) = uVar13;
          puVar45 = puVar7;
          pauVar27 = (undefined1 (*) [16])(*pauVar27 + 8);
        } while (puVar7 != (ushort *)(*pauVar20 + (ulong)uVar15 * 8 + 10));
      }
      else {
        if (3 < uVar17) {
          uVar22 = 0;
          pauVar27 = pauVar32;
          pauVar31 = pauVar24;
          do {
            uVar22 = uVar22 + 1;
            auVar48 = NEON_umax(*pauVar31,*pauVar27,2);
            *(long *)(*pauVar27 + 8) = auVar48._8_8_;
            *(long *)*pauVar27 = auVar48._0_8_;
            pauVar27 = pauVar27 + 1;
            pauVar31 = pauVar31 + 1;
          } while (uVar22 < uVar1);
          if (uVar33 == uVar1 * 2) goto LAB_0030ff58;
        }
        uVar13 = *(ushort *)(*pauVar32 + uVar23 + 2);
        uVar14 = *(ushort *)(*pauVar32 + uVar23);
        uVar10 = *(ushort *)(*pauVar20 + uVar23 + 2);
        if (*(ushort *)(*pauVar20 + uVar23 + 2) < uVar13) {
          uVar10 = uVar13;
        }
        uVar13 = *(ushort *)(*pauVar20 + uVar23);
        if (*(ushort *)(*pauVar20 + uVar23) < uVar14) {
          uVar13 = uVar14;
        }
        *(ushort *)(*pauVar32 + uVar23) = uVar13;
        *(ushort *)(*pauVar32 + uVar23 + 2) = uVar10;
        uVar13 = *(ushort *)(*pauVar32 + uVar23 + 6);
        uVar14 = *(ushort *)(*pauVar32 + uVar23 + 4);
        uVar10 = *(ushort *)(*pauVar20 + uVar23 + 6);
        if (*(ushort *)(*pauVar20 + uVar23 + 6) < uVar13) {
          uVar10 = uVar13;
        }
        uVar13 = *(ushort *)(*pauVar20 + uVar23 + 4);
        if (*(ushort *)(*pauVar20 + uVar23 + 4) < uVar14) {
          uVar13 = uVar14;
        }
        *(ushort *)(*pauVar32 + uVar23 + 4) = uVar13;
        *(ushort *)(*pauVar32 + uVar23 + 6) = uVar10;
      }
    }
LAB_0030ff58:
    if ((int)uVar29 < (int)uVar16) {
      if ((*pauVar41 + lVar49 < pauVar32[1] + lVar51 && puVar8 < *pauVar41 + lVar52) ||
         (uVar18 < 0xc)) {
        lVar47 = 0;
        do {
          uVar10 = *(ushort *)(*pauVar20 + lVar47 + lVar51);
          if (*(ushort *)(*pauVar20 + lVar47 + lVar51) < *(ushort *)((long)puVar8 + lVar47)) {
            uVar10 = *(ushort *)((long)puVar8 + lVar47);
          }
          *(ushort *)((long)puVar8 + lVar47) = uVar10;
          lVar47 = lVar47 + 2;
                    /* try { // try from 00310404 to 00410407 has its CatchHandler @ 0031078c */
        } while (lVar47 != ((ulong)((uVar16 - 1) - uVar29) + 1) * 2);
        goto joined_r0x0030fe78;
      }
      if (uVar11 == 0) {
        uVar44 = (ulong)uVar29;
      }
      else {
        uVar10 = *(ushort *)(*pauVar20 + lVar51);
        if (*(ushort *)(*pauVar20 + lVar51) < *puVar8) {
          uVar10 = *puVar8;
        }
        *puVar8 = uVar10;
        if (uVar11 == 1) {
          uVar44 = (ulong)uVar28;
        }
        else {
          uVar13 = *(ushort *)(*pauVar32 + uVar35);
          uVar10 = *(ushort *)(*pauVar20 + uVar35);
          if (*(ushort *)(*pauVar20 + uVar35) < uVar13) {
            uVar10 = uVar13;
          }
          *(ushort *)(*pauVar32 + uVar35) = uVar10;
          if (uVar11 == 2) {
            uVar44 = (ulong)uVar2;
          }
          else {
            uVar13 = *(ushort *)(*pauVar32 + uVar36);
            uVar10 = *(ushort *)(*pauVar20 + uVar36);
            if (*(ushort *)(*pauVar20 + uVar36) < uVar13) {
              uVar10 = uVar13;
            }
            *(ushort *)(*pauVar32 + uVar36) = uVar10;
            if (uVar11 == 3) {
              uVar44 = (ulong)uVar3;
            }
            else {
              uVar13 = *(ushort *)(*pauVar32 + uVar37);
              uVar10 = *(ushort *)(*pauVar20 + uVar37);
              if (*(ushort *)(*pauVar20 + uVar37) < uVar13) {
                uVar10 = uVar13;
              }
              *(ushort *)(*pauVar32 + uVar37) = uVar10;
              if (uVar11 == 4) {
                    /* try { // try from 003104a8 to 00410533 has its CatchHandler @ 003100f0 */
                uVar44 = (ulong)uVar4;
              }
              else {
                uVar13 = *(ushort *)(*pauVar32 + uVar38);
                uVar10 = *(ushort *)(*pauVar20 + uVar38);
                if (*(ushort *)(*pauVar20 + uVar38) < uVar13) {
                  uVar10 = uVar13;
                }
                *(ushort *)(*pauVar32 + uVar38) = uVar10;
                if (uVar11 == 5) {
                  uVar44 = (ulong)uVar9;
                }
                else {
                  uVar13 = *(ushort *)(*pauVar32 + uVar39);
                  uVar10 = *(ushort *)(*pauVar20 + uVar39);
                  if (*(ushort *)(*pauVar20 + uVar39) < uVar13) {
                    uVar10 = uVar13;
                  }
                  *(ushort *)(*pauVar32 + uVar39) = uVar10;
                  if (uVar11 == 7) {
                    uVar13 = *(ushort *)(*pauVar32 + uVar40);
                    uVar44 = (ulong)(uVar29 + 7);
                    uVar10 = *(ushort *)(*pauVar20 + uVar40);
                    if (*(ushort *)(*pauVar20 + uVar40) < uVar13) {
                      uVar10 = uVar13;
                    }
                    *(ushort *)(*pauVar32 + uVar40) = uVar10;
                  }
                  else {
                    uVar44 = (ulong)uVar5;
                  }
                }
              }
            }
          }
        }
      }
      if (6 < (uVar18 - 1) - uVar11) {
        uVar22 = 0;
        pauVar27 = (undefined1 (*) [16])(*pauVar32 + (lVar26 + (ulong)uVar11) * 2);
        puVar25 = (undefined8 *)(*pauVar32 + lVar51 + lVar30);
        pauVar41 = (undefined1 (*) [16])(*pauVar41 + lVar30 + lVar49);
        do {
          uVar22 = uVar22 + 1;
          auVar48 = NEON_umax(*pauVar41,*pauVar27,2);
          puVar25[1] = auVar48._8_8_;
          *puVar25 = auVar48._0_8_;
          pauVar27 = pauVar27 + 1;
          puVar25 = puVar25 + 2;
          pauVar41 = pauVar41 + 1;
                    /* catch() { ... } // from try @ 0030fc84 with catch @ 003100b0 */
        } while (uVar22 < uVar6);
                    /* try { // try from 003100c0 to 004100c3 has its CatchHandler @ 0030fbc0 */
        uVar44 = (ulong)(uint)((int)uVar44 + iVar53);
        if (uVar18 - uVar11 == iVar53) goto joined_r0x0030fe78;
      }
      uVar42 = -(uVar44 >> 0x1f) & 0xfffffffe00000000 | uVar44 << 1;
      iVar43 = (int)uVar44;
      uVar10 = *(ushort *)(*pauVar20 + uVar42);
      if (*(ushort *)(*pauVar20 + uVar42) < *(ushort *)(*pauVar32 + uVar42)) {
        uVar10 = *(ushort *)(*pauVar32 + uVar42);
      }
      *(ushort *)(*pauVar32 + uVar42) = uVar10;
      if (iVar43 + 1 < (int)uVar16) {
                    /* catch() { ... } // from try @ 0031015c with catch @ 003100f0
                       catch() { ... } // from try @ 003101c0 with catch @ 003100f0
                       catch() { ... } // from try @ 00310338 with catch @ 003100f0
                       catch() { ... } // from try @ 003104a8 with catch @ 003100f0
                       catch() { ... } // from try @ 00310554 with catch @ 003100f0
                       catch() { ... } // from try @ 003107b0 with catch @ 003100f0
                       catch() { ... } // from try @ 003107e8 with catch @ 003100f0 */
        lVar47 = uVar42 + 2;
        uVar10 = *(ushort *)(*pauVar20 + lVar47);
        if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
          uVar10 = *(ushort *)(*pauVar32 + lVar47);
        }
        *(ushort *)(*pauVar32 + lVar47) = uVar10;
        if (iVar43 + 2 < (int)uVar16) {
          lVar47 = uVar42 + 4;
          uVar10 = *(ushort *)(*pauVar20 + lVar47);
          if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
            uVar10 = *(ushort *)(*pauVar32 + lVar47);
          }
          *(ushort *)(*pauVar32 + lVar47) = uVar10;
          if (iVar43 + 3 < (int)uVar16) {
            lVar47 = uVar42 + 6;
            uVar10 = *(ushort *)(*pauVar20 + lVar47);
            if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
              uVar10 = *(ushort *)(*pauVar32 + lVar47);
            }
            *(ushort *)(*pauVar32 + lVar47) = uVar10;
            if (iVar43 + 4 < (int)uVar16) {
                    /* try { // try from 0031015c to 0041015f has its CatchHandler @ 003100f0 */
              lVar47 = uVar42 + 8;
              uVar10 = *(ushort *)(*pauVar20 + lVar47);
              if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
                uVar10 = *(ushort *)(*pauVar32 + lVar47);
              }
              *(ushort *)(*pauVar32 + lVar47) = uVar10;
              if (iVar43 + 5 < (int)uVar16) {
                lVar47 = uVar42 + 10;
                uVar10 = *(ushort *)(*pauVar20 + lVar47);
                if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
                  uVar10 = *(ushort *)(*pauVar32 + lVar47);
                }
                *(ushort *)(*pauVar32 + lVar47) = uVar10;
                if (iVar43 + 6 < (int)uVar16) {
                  lVar47 = uVar42 + 0xc;
                  uVar10 = *(ushort *)(*pauVar20 + lVar47);
                  if (*(ushort *)(*pauVar20 + lVar47) < *(ushort *)(*pauVar32 + lVar47)) {
                    uVar10 = *(ushort *)(*pauVar32 + lVar47);
                  }
                    /* try { // try from 003101b8 to 004101bb has its CatchHandler @ 003107d8 */
                  *(ushort *)(*pauVar32 + lVar47) = uVar10;
                }
              }
            }
          }
        }
      }
    }
  } while( true );
  if (0 < (int)uVar16) {
    if ((pauVar50 < pauVar32 + 1 && pauVar32 < pauVar50 + 1) || (uVar16 < 0xf)) {
      lVar26 = 0;
      do {
        *(undefined2 *)(*pauVar50 + lVar26 * 2) = *(undefined2 *)(*pauVar32 + lVar26 * 2);
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar16);
    }
    else {
      uVar33 = -((uint)((ulong)pauVar32 >> 1) & 7) & 7;
      if (uVar16 < uVar33) {
        uVar33 = uVar16;
      }
      uVar46 = 0;
      if (uVar33 != 0) {
        *(undefined2 *)*pauVar50 = *(undefined2 *)*pauVar32;
        if (((uVar33 == 1) ||
            (*(undefined2 *)(*pauVar50 + 2) = *(undefined2 *)(*pauVar32 + 2), uVar33 == 2)) ||
           ((*(undefined2 *)(*pauVar50 + 4) = *(undefined2 *)(*pauVar32 + 4), uVar33 == 3 ||
            (*(undefined2 *)(*pauVar50 + 6) = *(undefined2 *)(*pauVar32 + 6), uVar33 == 4)))) {
          uVar46 = (ulong)uVar33;
        }
        else {
          *(undefined2 *)(*pauVar50 + 8) = *(undefined2 *)(*pauVar32 + 8);
          if (uVar33 == 5) {
            uVar46 = 5;
          }
          else {
            *(undefined2 *)(*pauVar50 + 10) = *(undefined2 *)(*pauVar32 + 10);
            if (uVar33 == 7) {
              uVar46 = 7;
              *(undefined2 *)(*pauVar50 + 0xc) = *(undefined2 *)(*pauVar32 + 0xc);
            }
            else {
              uVar46 = 6;
            }
          }
        }
      }
                    /* try { // try from 00310294 to 00410297 has its CatchHandler @ 003107b4 */
      uVar1 = ((uVar16 - uVar33) - 8 >> 3) + 1;
      iVar53 = uVar1 * 8;
      if (6 < (uVar16 - 1) - uVar33) {
        uVar28 = 0;
        puVar25 = (undefined8 *)(*pauVar32 + (ulong)uVar33 * 2);
        puVar34 = (undefined8 *)(*pauVar50 + (ulong)uVar33 * 2);
        do {
          uVar19 = *puVar25;
          uVar28 = uVar28 + 1;
          puVar34[1] = puVar25[1];
          *puVar34 = uVar19;
          puVar25 = puVar25 + 2;
          puVar34 = puVar34 + 2;
        } while (uVar28 < uVar1);
        uVar46 = (ulong)(uint)((int)uVar46 + iVar53);
        if (iVar53 == uVar16 - uVar33) goto LAB_00310390;
      }
      uVar23 = -(uVar46 >> 0x1f) & 0xfffffffe00000000 | uVar46 << 1;
      iVar53 = (int)uVar46;
      *(undefined2 *)(*pauVar50 + uVar23) = *(undefined2 *)(*pauVar32 + uVar23);
                    /* try { // try from 00310338 to 00410363 has its CatchHandler @ 003100f0 */
      if (((((iVar53 + 1 < (int)uVar16) &&
            (*(undefined2 *)(*pauVar50 + uVar23 + 2) = *(undefined2 *)(*pauVar32 + uVar23 + 2),
            iVar53 + 2 < (int)uVar16)) &&
           (*(undefined2 *)(*pauVar50 + uVar23 + 4) = *(undefined2 *)(*pauVar32 + uVar23 + 4),
           iVar53 + 3 < (int)uVar16)) &&
          ((*(undefined2 *)(*pauVar50 + uVar23 + 6) = *(undefined2 *)(*pauVar32 + uVar23 + 6),
           iVar53 + 4 < (int)uVar16 &&
           (*(undefined2 *)(*pauVar50 + uVar23 + 8) = *(undefined2 *)(*pauVar32 + uVar23 + 8),
           iVar53 + 5 < (int)uVar16)))) &&
         (*(undefined2 *)(*pauVar50 + uVar23 + 10) = *(undefined2 *)(*pauVar32 + uVar23 + 10),
         iVar53 + 6 < (int)uVar16)) {
        *(undefined2 *)(*pauVar50 + uVar23 + 0xc) = *(undefined2 *)(*pauVar32 + uVar23 + 0xc);
      }
    }
  }
LAB_00310390:
  if (bVar21) {
    operator_delete__(pauVar32);
  }
  return;
}


==================================================================

### FUNC 00310524 (3000 bytes) name=FUN_00310524

void FUN_00310524(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  long lVar7;
  long lVar8;
  short *psVar9;
  short *psVar10;
  uint uVar11;
  short sVar12;
  uint uVar13;
  int iVar14;
  short sVar15;
  short sVar16;
  short sVar17;
  uint uVar18;
  uint uVar19;
  uint uVar20;
  uint uVar21;
  undefined8 uVar22;
  undefined1 (*pauVar23) [16];
  bool bVar24;
  ulong uVar25;
  undefined1 (*pauVar26) [16];
  undefined8 *puVar27;
  long lVar28;
  uint uVar29;
  long lVar30;
  uint uVar31;
  undefined1 (*pauVar32) [16];
  long lVar33;
  undefined1 (*pauVar34) [16];
  long lVar35;
  uint uVar36;
  int iVar37;
  ulong uVar38;
  short *psVar39;
  undefined1 (*pauVar40) [16];
  undefined1 (*pauVar41) [16];
  ulong uVar42;
  undefined8 *puVar43;
  uint uVar44;
  ulong uVar45;
  ulong uVar46;
  ulong uVar47;
  ulong uVar48;
  ulong uVar49;
  ulong uVar50;
  ulong uVar51;
  long lVar52;
  undefined1 auVar53 [16];
  undefined1 (*pauVar54) [16];
  long lVar55;
  long lVar56;
  int iVar57;
  undefined1 auStack_410 [1040];
  
                    /* try { // try from 0031053c to 0041053f has its CatchHandler @ 003107b4 */
                    /* try { // try from 00310548 to 0041054b has its CatchHandler @ 0031078c */
                    /* try { // try from 00310554 to 00410763 has its CatchHandler @ 003100f0 */
  pauVar40 = (undefined1 (*) [16])auStack_410;
  iVar57 = (*(int **)(param_1 + 0x10))[1];
  iVar14 = **(int **)(param_1 + 0x10);
  uVar19 = iVar57 + (*param_1 >> 3 & 0x1ff) * iVar57;
  uVar51 = (ulong)(int)uVar19;
  if (uVar51 < 0x209) {
    bVar24 = false;
  }
  else {
    uVar25 = uVar51 << 1;
    if (0x3f80000000000000 < uVar51) {
      uVar25 = 0xffffffffffffffff;
    }
    pauVar26 = operator_new__(uVar25);
    bVar24 = pauVar26 != pauVar40;
    pauVar40 = pauVar26;
  }
  pauVar54 = *(undefined1 (**) [16])(param_2 + 0x10);
  pauVar26 = *(undefined1 (**) [16])(param_1 + 4);
  uVar51 = *(ulong *)(param_1 + 0x14) >> 1;
  if (0 < (int)uVar19) {
    if ((pauVar26 < pauVar40 + 1 && pauVar40 < pauVar26 + 1) || (uVar19 < 0xf)) {
      lVar28 = 0;
      do {
        *(undefined2 *)(*pauVar40 + lVar28 * 2) = *(undefined2 *)(*pauVar26 + lVar28 * 2);
        lVar28 = lVar28 + 1;
      } while ((int)lVar28 < (int)uVar19);
    }
    else {
      uVar44 = -((uint)((ulong)pauVar26 >> 1) & 7) & 7;
      uVar1 = uVar19;
      if (uVar44 < uVar19) {
        uVar1 = uVar44;
      }
      uVar44 = uVar1;
      if (((((uVar1 != 0) && (*(undefined2 *)*pauVar40 = *(undefined2 *)*pauVar26, uVar1 != 1)) &&
           (*(undefined2 *)(*pauVar40 + 2) = *(undefined2 *)(*pauVar26 + 2), uVar1 != 2)) &&
          ((*(undefined2 *)(*pauVar40 + 4) = *(undefined2 *)(*pauVar26 + 4), uVar1 != 3 &&
           (*(undefined2 *)(*pauVar40 + 6) = *(undefined2 *)(*pauVar26 + 6), uVar1 != 4)))) &&
         (*(undefined2 *)(*pauVar40 + 8) = *(undefined2 *)(*pauVar26 + 8), uVar1 != 5)) {
        *(undefined2 *)(*pauVar40 + 10) = *(undefined2 *)(*pauVar26 + 10);
        if (uVar1 == 7) {
          *(undefined2 *)(*pauVar40 + 0xc) = *(undefined2 *)(*pauVar26 + 0xc);
          uVar44 = 7;
        }
        else {
          uVar44 = 6;
        }
      }
      uVar31 = ((uVar19 - uVar1) - 8 >> 3) + 1;
      uVar36 = 0;
      iVar57 = uVar31 * 8;
      puVar27 = (undefined8 *)(*pauVar40 + (ulong)uVar1 * 2);
      puVar43 = (undefined8 *)(*pauVar26 + (ulong)uVar1 * 2);
      do {
        uVar22 = *puVar43;
        uVar36 = uVar36 + 1;
        puVar27[1] = puVar43[1];
        *puVar27 = uVar22;
        puVar27 = puVar27 + 2;
        puVar43 = puVar43 + 2;
      } while (uVar36 < uVar31);
      uVar44 = uVar44 + iVar57;
      if (uVar19 - uVar1 != iVar57) {
        uVar25 = -(ulong)(uVar44 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar44 << 1;
        *(undefined2 *)(*pauVar40 + uVar25) = *(undefined2 *)(*pauVar26 + uVar25);
        if ((((int)(uVar44 + 1) < (int)uVar19) &&
            (*(undefined2 *)(*pauVar40 + uVar25 + 2) = *(undefined2 *)(*pauVar26 + uVar25 + 2),
            (int)(uVar44 + 2) < (int)uVar19)) &&
           ((*(undefined2 *)(*pauVar40 + uVar25 + 4) = *(undefined2 *)(*pauVar26 + uVar25 + 4),
            (int)(uVar44 + 3) < (int)uVar19 &&
            (((*(undefined2 *)(*pauVar40 + uVar25 + 6) = *(undefined2 *)(*pauVar26 + uVar25 + 6),
              (int)(uVar44 + 4) < (int)uVar19 &&
              (*(undefined2 *)(*pauVar40 + uVar25 + 8) = *(undefined2 *)(*pauVar26 + uVar25 + 8),
              (int)(uVar44 + 5) < (int)uVar19)) &&
             (*(undefined2 *)(*pauVar40 + uVar25 + 10) = *(undefined2 *)(*pauVar26 + uVar25 + 10),
             (int)(uVar44 + 6) < (int)uVar19)))))) {
          *(undefined2 *)(*pauVar40 + uVar25 + 0xc) = *(undefined2 *)(*pauVar26 + uVar25 + 0xc);
        }
      }
    }
  }
  uVar20 = uVar19 - 4;
  uVar18 = uVar20 >> 2;
  uVar44 = uVar18 + 1;
                    /* try { // try from 003107b0 to 004107b3 has its CatchHandler @ 003100f0 */
                    /* catch() { ... } // from try @ 00310294 with catch @ 003107b4
                       catch() { ... } // from try @ 0031053c with catch @ 003107b4 */
  uVar1 = (uVar18 - 1 >> 1) + 1;
  uVar31 = uVar1 * 8;
                    /* catch() { ... } // from try @ 003101b8 with catch @ 003107d8 */
  uVar36 = uVar44 * 4;
                    /* try { // try from 003107e8 to 004107eb has its CatchHandler @ 003100f0 */
                    /* catch() { ... } // from try @ 00310404 with catch @ 0031078c
                       catch() { ... } // from try @ 00310548 with catch @ 0031078c */
  if (uVar20 < 4) {
    uVar31 = 0;
  }
  uVar25 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar31 << 1;
                    /* catch() { ... } // from try @ 00310a18 with catch @ 00310800
                       catch() { ... } // from try @ 00310a74 with catch @ 00310800 */
  lVar28 = uVar25 + 2;
  lVar7 = uVar25 + 4;
  lVar8 = uVar25 + 6;
  if ((int)(uVar19 - 3) < 1) {
    uVar36 = 0;
  }
  uVar21 = uVar19 - uVar36;
  uVar31 = uVar36 + 1;
  lVar30 = (long)(int)uVar36;
  uVar2 = uVar36 + 2;
  uVar45 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar31 << 1;
  uVar3 = uVar36 + 3;
  lVar52 = lVar30 * 2;
  uVar4 = uVar36 + 4;
  uVar5 = uVar36 + 5;
  uVar46 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar2 << 1;
  psVar10 = (short *)(*pauVar40 + lVar52);
  uVar47 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
  uVar11 = -((uint)((ulong)psVar10 >> 1) & 7) & 7;
  lVar55 = NEON_shl(lVar30 + uVar51,1);
  uVar13 = uVar21;
  if (uVar11 < uVar21) {
    uVar13 = uVar11;
  }
                    /* try { // try from 003108bc to 00410933 has its CatchHandler @ 00310a78 */
  uVar11 = uVar36 + 6;
  uVar48 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar4 << 1;
  uVar50 = -(ulong)(uVar11 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar11 << 1;
  uVar49 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar5 << 1;
  lVar33 = (ulong)uVar13 * 2;
  uVar6 = ((uVar21 - uVar13) - 8 >> 3) + 1;
  lVar56 = NEON_shl(uVar51 + 8 + lVar30,1);
  iVar57 = uVar6 * 8;
                    /* try { // try from 003109a4 to 004109a7 has its CatchHandler @ 00310a50 */
  pauVar23 = pauVar26;
joined_r0x003109bc:
  do {
    pauVar41 = pauVar23;
    iVar14 = iVar14 + -1;
    if (iVar14 == 0) break;
    pauVar26 = (undefined1 (*) [16])(*pauVar26 + uVar51 * 2);
    pauVar23 = (undefined1 (*) [16])(*pauVar41 + uVar51 * 2);
    if (0 < (int)(uVar19 - 3)) {
      if ((pauVar40 < pauVar26 + 4 && pauVar26 < pauVar40 + 4) || (uVar44 < 3)) {
        psVar39 = (short *)(*pauVar23 + 2);
        pauVar32 = pauVar40;
        do {
          psVar9 = psVar39 + 4;
          sVar17 = *(short *)*pauVar32;
          sVar15 = psVar39[-1];
          sVar16 = psVar39[-1];
          sVar12 = *psVar39;
          if (*psVar39 < *(short *)(*pauVar32 + 2)) {
            sVar12 = *(short *)(*pauVar32 + 2);
          }
          *(short *)(*pauVar32 + 2) = sVar12;
          if (sVar16 < sVar17) {
            sVar15 = sVar17;
          }
          *(short *)*pauVar32 = sVar15;
          sVar15 = psVar39[1];
          sVar12 = psVar39[2];
          if (psVar39[2] < *(short *)(*pauVar32 + 6)) {
            sVar12 = *(short *)(*pauVar32 + 6);
          }
          sVar16 = psVar39[1];
          *(short *)(*pauVar32 + 6) = sVar12;
                    /* try { // try from 0031102c to 0041109b has its CatchHandler @ 00312f40 */
          if (sVar16 < *(short *)(*pauVar32 + 4)) {
            sVar15 = *(short *)(*pauVar32 + 4);
          }
          *(short *)(*pauVar32 + 4) = sVar15;
          psVar39 = psVar9;
          pauVar32 = (undefined1 (*) [16])(*pauVar32 + 8);
        } while (psVar9 != (short *)(*pauVar23 + (ulong)uVar18 * 8 + 10));
      }
      else {
        if (3 < uVar20) {
          uVar29 = 0;
          pauVar32 = pauVar40;
          pauVar34 = pauVar26;
          do {
            uVar29 = uVar29 + 1;
                    /* try { // try from 00310a18 to 00410a3f has its CatchHandler @ 00310800 */
            auVar53 = NEON_smax(*pauVar34,*pauVar32,2);
            *(long *)(*pauVar32 + 8) = auVar53._8_8_;
            *(long *)*pauVar32 = auVar53._0_8_;
            pauVar32 = pauVar32 + 1;
            pauVar34 = pauVar34 + 1;
          } while (uVar29 < uVar1);
          if (uVar44 == uVar1 * 2) goto LAB_00310a9c;
        }
        sVar15 = *(short *)(*pauVar40 + lVar28);
        sVar16 = *(short *)(*pauVar40 + uVar25);
                    /* try { // try from 00310a48 to 00410a4b has its CatchHandler @ 00310a50 */
                    /* catch() { ... } // from try @ 003109a4 with catch @ 00310a50
                       catch() { ... } // from try @ 00310a48 with catch @ 00310a50 */
        sVar12 = *(short *)(*pauVar23 + lVar28);
        if (*(short *)(*pauVar23 + lVar28) < sVar15) {
          sVar12 = sVar15;
        }
        sVar15 = *(short *)(*pauVar23 + uVar25);
        if (*(short *)(*pauVar23 + uVar25) < sVar16) {
          sVar15 = sVar16;
        }
        *(short *)(*pauVar40 + uVar25) = sVar15;
        *(short *)(*pauVar40 + lVar28) = sVar12;
        sVar15 = *(short *)(*pauVar40 + lVar8);
        sVar16 = *(short *)(*pauVar40 + lVar7);
                    /* try { // try from 00310a74 to 00410a77 has its CatchHandler @ 00310800 */
                    /* catch() { ... } // from try @ 003108bc with catch @ 00310a78 */
        sVar12 = *(short *)(*pauVar23 + lVar8);
        if (*(short *)(*pauVar23 + lVar8) < sVar15) {
          sVar12 = sVar15;
        }
        sVar15 = *(short *)(*pauVar23 + lVar7);
        if (*(short *)(*pauVar23 + lVar7) < sVar16) {
          sVar15 = sVar16;
        }
        *(short *)(*pauVar40 + lVar7) = sVar15;
        *(short *)(*pauVar40 + lVar8) = sVar12;
      }
    }
LAB_00310a9c:
    if ((int)uVar36 < (int)uVar19) {
                    /* catch() { ... } // from try @ 00310ae4 with catch @ 00310ab0
                       catch() { ... } // from try @ 00310d14 with catch @ 00310ab0
                       catch() { ... } // from try @ 00310db0 with catch @ 00310ab0 */
      if ((*pauVar41 + lVar55 < pauVar40[1] + lVar52 && psVar10 < *pauVar41 + lVar56) ||
         (uVar21 < 0xc)) {
        lVar35 = 0;
        do {
          sVar12 = *(short *)(*pauVar23 + lVar35 + lVar52);
          if (*(short *)(*pauVar23 + lVar35 + lVar52) < *(short *)((long)psVar10 + lVar35)) {
            sVar12 = *(short *)((long)psVar10 + lVar35);
          }
          *(short *)((long)psVar10 + lVar35) = sVar12;
          lVar35 = lVar35 + 2;
        } while (lVar35 != ((ulong)((uVar19 - 1) - uVar36) + 1) * 2);
        goto joined_r0x003109bc;
      }
      if (uVar13 == 0) {
        uVar38 = (ulong)uVar36;
      }
      else {
                    /* try { // try from 00310ae4 to 00410b2b has its CatchHandler @ 00310ab0 */
        sVar12 = *(short *)(*pauVar23 + lVar52);
        if (*(short *)(*pauVar23 + lVar52) < *psVar10) {
          sVar12 = *psVar10;
        }
        *psVar10 = sVar12;
        if (uVar13 == 1) {
          uVar38 = (ulong)uVar31;
        }
        else {
          sVar15 = *(short *)(*pauVar40 + uVar45);
          sVar12 = *(short *)(*pauVar23 + uVar45);
          if (*(short *)(*pauVar23 + uVar45) < sVar15) {
            sVar12 = sVar15;
          }
          *(short *)(*pauVar40 + uVar45) = sVar12;
          if (uVar13 == 2) {
            uVar38 = (ulong)uVar2;
          }
          else {
            sVar15 = *(short *)(*pauVar40 + uVar46);
            sVar12 = *(short *)(*pauVar23 + uVar46);
            if (*(short *)(*pauVar23 + uVar46) < sVar15) {
              sVar12 = sVar15;
            }
            *(short *)(*pauVar40 + uVar46) = sVar12;
            if (uVar13 == 3) {
              uVar38 = (ulong)uVar3;
            }
            else {
              sVar15 = *(short *)(*pauVar40 + uVar47);
              sVar12 = *(short *)(*pauVar23 + uVar47);
              if (*(short *)(*pauVar23 + uVar47) < sVar15) {
                sVar12 = sVar15;
              }
              *(short *)(*pauVar40 + uVar47) = sVar12;
              if (uVar13 == 4) {
                uVar38 = (ulong)uVar4;
              }
              else {
                sVar15 = *(short *)(*pauVar40 + uVar48);
                sVar12 = *(short *)(*pauVar23 + uVar48);
                if (*(short *)(*pauVar23 + uVar48) < sVar15) {
                  sVar12 = sVar15;
                }
                *(short *)(*pauVar40 + uVar48) = sVar12;
                if (uVar13 == 5) {
                  uVar38 = (ulong)uVar5;
                }
                else {
                  sVar15 = *(short *)(*pauVar40 + uVar49);
                  sVar12 = *(short *)(*pauVar23 + uVar49);
                  if (*(short *)(*pauVar23 + uVar49) < sVar15) {
                    sVar12 = sVar15;
                  }
                  *(short *)(*pauVar40 + uVar49) = sVar12;
                    /* try { // try from 00310bd8 to 00410c2f has its CatchHandler @ 00310db4 */
                  if (uVar13 == 7) {
                    uVar38 = (ulong)(uVar36 + 7);
                    sVar15 = *(short *)(*pauVar40 + uVar50);
                    sVar12 = *(short *)(*pauVar23 + uVar50);
                    if (*(short *)(*pauVar23 + uVar50) < sVar15) {
                      sVar12 = sVar15;
                    }
                    *(short *)(*pauVar40 + uVar50) = sVar12;
                  }
                  else {
                    uVar38 = (ulong)uVar11;
                  }
                }
              }
            }
          }
        }
      }
      if (6 < (uVar21 - 1) - uVar13) {
        uVar29 = 0;
        pauVar32 = (undefined1 (*) [16])(*pauVar40 + (lVar30 + (ulong)uVar13) * 2);
        puVar27 = (undefined8 *)(*pauVar40 + lVar52 + lVar33);
        pauVar41 = (undefined1 (*) [16])(*pauVar41 + lVar33 + lVar55);
        do {
          uVar29 = uVar29 + 1;
          auVar53 = NEON_smax(*pauVar41,*pauVar32,2);
          puVar27[1] = auVar53._8_8_;
          *puVar27 = auVar53._0_8_;
          pauVar32 = pauVar32 + 1;
          puVar27 = puVar27 + 2;
          pauVar41 = pauVar41 + 1;
        } while (uVar29 < uVar6);
        uVar38 = (ulong)(uint)((int)uVar38 + iVar57);
        if (uVar21 - uVar13 == iVar57) goto joined_r0x003109bc;
      }
      uVar42 = -(uVar38 >> 0x1f) & 0xfffffffe00000000 | uVar38 << 1;
      iVar37 = (int)uVar38;
      sVar12 = *(short *)(*pauVar23 + uVar42);
      if (*(short *)(*pauVar23 + uVar42) < *(short *)(*pauVar40 + uVar42)) {
        sVar12 = *(short *)(*pauVar40 + uVar42);
      }
      *(short *)(*pauVar40 + uVar42) = sVar12;
      if (iVar37 + 1 < (int)uVar19) {
        lVar35 = uVar42 + 2;
        sVar12 = *(short *)(*pauVar23 + lVar35);
        if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
          sVar12 = *(short *)(*pauVar40 + lVar35);
        }
                    /* try { // try from 00310ca0 to 00410ca3 has its CatchHandler @ 00310d8c */
        *(short *)(*pauVar40 + lVar35) = sVar12;
        if (iVar37 + 2 < (int)uVar19) {
          lVar35 = uVar42 + 4;
          sVar12 = *(short *)(*pauVar23 + lVar35);
          if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
            sVar12 = *(short *)(*pauVar40 + lVar35);
          }
          *(short *)(*pauVar40 + lVar35) = sVar12;
          if (iVar37 + 3 < (int)uVar19) {
            lVar35 = uVar42 + 6;
            sVar12 = *(short *)(*pauVar23 + lVar35);
            if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
              sVar12 = *(short *)(*pauVar40 + lVar35);
            }
            *(short *)(*pauVar40 + lVar35) = sVar12;
            if (iVar37 + 4 < (int)uVar19) {
              lVar35 = uVar42 + 8;
                    /* try { // try from 00310d14 to 00410d73 has its CatchHandler @ 00310ab0 */
              sVar12 = *(short *)(*pauVar23 + lVar35);
              if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
                sVar12 = *(short *)(*pauVar40 + lVar35);
              }
              *(short *)(*pauVar40 + lVar35) = sVar12;
              if (iVar37 + 5 < (int)uVar19) {
                lVar35 = uVar42 + 10;
                sVar12 = *(short *)(*pauVar23 + lVar35);
                if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
                  sVar12 = *(short *)(*pauVar40 + lVar35);
                }
                *(short *)(*pauVar40 + lVar35) = sVar12;
                if (iVar37 + 6 < (int)uVar19) {
                  lVar35 = uVar42 + 0xc;
                  sVar12 = *(short *)(*pauVar23 + lVar35);
                  if (*(short *)(*pauVar23 + lVar35) < *(short *)(*pauVar40 + lVar35)) {
                    sVar12 = *(short *)(*pauVar40 + lVar35);
                  }
                  *(short *)(*pauVar40 + lVar35) = sVar12;
                }
              }
            }
          }
        }
      }
    }
  } while( true );
                    /* try { // try from 00310d7c to 00410d7f has its CatchHandler @ 00310d8c */
  if (0 < (int)uVar19) {
                    /* catch() { ... } // from try @ 00310ca0 with catch @ 00310d8c
                       catch() { ... } // from try @ 00310d7c with catch @ 00310d8c */
    if ((pauVar54 < pauVar40 + 1 && pauVar40 < pauVar54 + 1) || (uVar19 < 0xf)) {
      lVar28 = 0;
      do {
        *(undefined2 *)(*pauVar54 + lVar28 * 2) = *(undefined2 *)(*pauVar40 + lVar28 * 2);
        lVar28 = lVar28 + 1;
                    /* try { // try from 003110b8 to 004110bb has its CatchHandler @ 00312f00 */
      } while ((int)lVar28 < (int)uVar19);
    }
    else {
                    /* try { // try from 00310db0 to 00410db3 has its CatchHandler @ 00310ab0 */
                    /* catch() { ... } // from try @ 00310bd8 with catch @ 00310db4 */
      uVar44 = -((uint)((ulong)pauVar40 >> 1) & 7) & 7;
      if (uVar19 < uVar44) {
        uVar44 = uVar19;
      }
      uVar51 = 0;
      if (uVar44 != 0) {
        *(undefined2 *)*pauVar54 = *(undefined2 *)*pauVar40;
                    /* catch() { ... } // from try @ 00310e58 with catch @ 00310df0
                       catch() { ... } // from try @ 00310ea4 with catch @ 00310df0
                       catch() { ... } // from try @ 003111d4 with catch @ 00310df0
                       catch() { ... } // from try @ 003114b8 with catch @ 00310df0
                       catch() { ... } // from try @ 00311748 with catch @ 00310df0
                       catch() { ... } // from try @ 00312efc with catch @ 00310df0
                       catch() { ... } // from try @ 00312f3c with catch @ 00310df0 */
        if (((uVar44 == 1) ||
            (*(undefined2 *)(*pauVar54 + 2) = *(undefined2 *)(*pauVar40 + 2), uVar44 == 2)) ||
           ((*(undefined2 *)(*pauVar54 + 4) = *(undefined2 *)(*pauVar40 + 4), uVar44 == 3 ||
            (*(undefined2 *)(*pauVar54 + 6) = *(undefined2 *)(*pauVar40 + 6), uVar44 == 4)))) {
          uVar51 = (ulong)uVar44;
        }
        else {
          *(undefined2 *)(*pauVar54 + 8) = *(undefined2 *)(*pauVar40 + 8);
          if (uVar44 == 5) {
            uVar51 = 5;
          }
          else {
            *(undefined2 *)(*pauVar54 + 10) = *(undefined2 *)(*pauVar40 + 10);
            if (uVar44 == 7) {
              uVar51 = 7;
              *(undefined2 *)(*pauVar54 + 0xc) = *(undefined2 *)(*pauVar40 + 0xc);
            }
            else {
              uVar51 = 6;
            }
          }
        }
      }
      uVar1 = ((uVar19 - uVar44) - 8 >> 3) + 1;
      iVar57 = uVar1 * 8;
                    /* try { // try from 00310e58 to 00410e5b has its CatchHandler @ 00310df0 */
      if (6 < (uVar19 - 1) - uVar44) {
        uVar31 = 0;
        puVar27 = (undefined8 *)(*pauVar40 + (ulong)uVar44 * 2);
        puVar43 = (undefined8 *)(*pauVar54 + (ulong)uVar44 * 2);
        do {
          uVar22 = *puVar27;
          uVar31 = uVar31 + 1;
          puVar43[1] = puVar27[1];
          *puVar43 = uVar22;
          puVar27 = puVar27 + 2;
          puVar43 = puVar43 + 2;
        } while (uVar31 < uVar1);
        uVar51 = (ulong)(uint)((int)uVar51 + iVar57);
        if (iVar57 == uVar19 - uVar44) goto LAB_00310f38;
      }
      uVar25 = -(uVar51 >> 0x1f) & 0xfffffffe00000000 | uVar51 << 1;
      iVar57 = (int)uVar51;
                    /* try { // try from 00310e9c to 00410e9f has its CatchHandler @ 00312f2c */
                    /* try { // try from 00310ea4 to 00410ed3 has its CatchHandler @ 00310df0 */
      *(undefined2 *)(*pauVar54 + uVar25) = *(undefined2 *)(*pauVar40 + uVar25);
                    /* try { // try from 00310f08 to 00410f2b has its CatchHandler @ 00312f5c */
      if (((((iVar57 + 1 < (int)uVar19) &&
            (*(undefined2 *)(*pauVar54 + uVar25 + 2) = *(undefined2 *)(*pauVar40 + uVar25 + 2),
            iVar57 + 2 < (int)uVar19)) &&
           (*(undefined2 *)(*pauVar54 + uVar25 + 4) = *(undefined2 *)(*pauVar40 + uVar25 + 4),
           iVar57 + 3 < (int)uVar19)) &&
          ((*(undefined2 *)(*pauVar54 + uVar25 + 6) = *(undefined2 *)(*pauVar40 + uVar25 + 6),
           iVar57 + 4 < (int)uVar19 &&
           (*(undefined2 *)(*pauVar54 + uVar25 + 8) = *(undefined2 *)(*pauVar40 + uVar25 + 8),
           iVar57 + 5 < (int)uVar19)))) &&
         (*(undefined2 *)(*pauVar54 + uVar25 + 10) = *(undefined2 *)(*pauVar40 + uVar25 + 10),
         iVar57 + 6 < (int)uVar19)) {
        *(undefined2 *)(*pauVar54 + uVar25 + 0xc) = *(undefined2 *)(*pauVar40 + uVar25 + 0xc);
      }
    }
  }
LAB_00310f38:
  if (bVar24) {
    operator_delete__(pauVar40);
  }
  return;
}


==================================================================

### FUNC 003110dc (1696 bytes) name=FUN_003110dc

void FUN_003110dc(uint *param_1,long param_2)

{
  uint uVar1;
  float *pfVar2;
  float *pfVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  float *pfVar10;
  bool bVar11;
  ulong uVar12;
  float *pfVar13;
  float *pfVar14;
  float *pfVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  float *pfVar19;
  ulong uVar20;
  long lVar21;
  float *pfVar22;
  ulong uVar23;
  float *pfVar24;
  uint uVar25;
  long lVar26;
  ulong uVar27;
  float *pfVar28;
  ulong uVar29;
  undefined8 uVar30;
  float fVar31;
  undefined8 uVar32;
  float *pfVar33;
  int iVar34;
  float afStack_420 [264];
  
  pfVar15 = afStack_420;
  iVar34 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar8 = iVar34 + (*param_1 >> 3 & 0x1ff) * iVar34;
  uVar27 = (ulong)(int)uVar8;
                    /* try { // try from 00311134 to 00411137 has its CatchHandler @ 00312ebc */
  if (uVar27 < 0x109) {
    bVar11 = false;
  }
  else {
    uVar12 = uVar27 << 2;
    if (0x1fc0000000000000 < uVar27) {
      uVar12 = 0xffffffffffffffff;
    }
    pfVar13 = operator_new__(uVar12);
    bVar11 = pfVar13 != pfVar15;
    pfVar15 = pfVar13;
  }
  pfVar33 = *(float **)(param_2 + 0x10);
  pfVar13 = *(float **)(param_1 + 4);
  uVar27 = *(ulong *)(param_1 + 0x14) >> 2;
  if (0 < (int)uVar8) {
                    /* try { // try from 003111a8 to 004111ab has its CatchHandler @ 00312f5c */
    if ((pfVar13 < pfVar15 + 4 && pfVar15 < pfVar13 + 4) || (uVar8 < 0xc)) {
                    /* try { // try from 00311748 to 0041174b has its CatchHandler @ 00310df0 */
      lVar26 = 0;
      do {
        pfVar15[lVar26] = pfVar13[lVar26];
        lVar26 = lVar26 + 1;
                    /* try { // try from 0031175c to 0041176b has its CatchHandler @ 00312ebc */
      } while ((int)lVar26 < (int)uVar8);
    }
    else {
      uVar25 = -((uint)((ulong)pfVar13 >> 2) & 3) & 3;
      uVar7 = uVar8;
      if (uVar25 < uVar8) {
        uVar7 = uVar25;
      }
      uVar25 = uVar7;
      if ((uVar7 != 0) && (*pfVar15 = *pfVar13, uVar7 != 1)) {
                    /* try { // try from 003111d4 to 00411227 has its CatchHandler @ 00310df0 */
        pfVar15[1] = pfVar13[1];
        if (uVar7 == 3) {
          pfVar15[2] = pfVar13[2];
        }
        else {
          uVar25 = 2;
        }
      }
      uVar16 = ((uVar8 - uVar7) - 4 >> 2) + 1;
      uVar17 = 0;
      iVar34 = uVar16 * 4;
      pfVar14 = pfVar15 + uVar7;
      pfVar19 = pfVar13 + uVar7;
      do {
        uVar30 = *(undefined8 *)pfVar19;
        uVar17 = uVar17 + 1;
        *(undefined8 *)(pfVar14 + 2) = *(undefined8 *)(pfVar19 + 2);
        *(undefined8 *)pfVar14 = uVar30;
        pfVar14 = pfVar14 + 4;
        pfVar19 = pfVar19 + 4;
      } while (uVar17 < uVar16);
      uVar25 = uVar25 + iVar34;
      if (uVar8 - uVar7 != iVar34) {
        uVar12 = -(ulong)(uVar25 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar25 << 2;
        *(undefined4 *)((long)pfVar15 + uVar12) = *(undefined4 *)((long)pfVar13 + uVar12);
        if (((int)(uVar25 + 1) < (int)uVar8) &&
           (*(undefined4 *)((long)pfVar15 + uVar12 + 4) =
                 *(undefined4 *)((long)pfVar13 + uVar12 + 4), (int)(uVar25 + 2) < (int)uVar8)) {
          *(undefined4 *)((long)pfVar15 + uVar12 + 8) = *(undefined4 *)((long)pfVar13 + uVar12 + 8);
        }
      }
    }
  }
  uVar16 = uVar8 - 4 >> 2;
  uVar25 = uVar16 + 1;
                    /* try { // try from 00311290 to 004112b7 has its CatchHandler @ 00312f40 */
  uVar7 = uVar25 * 4;
  if ((int)(uVar8 - 3) < 1) {
    uVar7 = 0;
  }
  uVar9 = uVar8 - uVar7;
  lVar26 = (long)(int)uVar7;
  uVar17 = uVar7 + 1;
  uVar1 = uVar7 + 2;
  pfVar14 = pfVar15 + lVar26;
                    /* try { // try from 00311310 to 00411313 has its CatchHandler @ 00312f48 */
  uVar4 = -((uint)((ulong)pfVar14 >> 2) & 3) & 3;
                    /* try { // try from 00311318 to 00411387 has its CatchHandler @ 00312f40 */
  uVar5 = uVar9;
  if (uVar4 < uVar9) {
    uVar5 = uVar4;
  }
  uVar29 = -(ulong)(uVar17 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar17 << 2;
  uVar4 = ((uVar9 - uVar5) - 4 >> 2) + 1;
  uVar12 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
  pfVar19 = (float *)((long)pfVar15 + uVar29);
  pfVar3 = (float *)((long)pfVar15 + uVar12);
  iVar34 = uVar4 * 4;
  pfVar10 = pfVar13;
joined_r0x00311394:
  pfVar28 = pfVar10;
  iVar6 = iVar6 + -1;
  if (iVar6 != 0) {
    pfVar13 = pfVar13 + uVar27;
    pfVar10 = pfVar28 + uVar27;
    if (0 < (int)(uVar8 - 3)) {
      if ((pfVar15 < pfVar13 + 0x10 && pfVar13 < pfVar15 + 0x10) || (uVar25 < 3)) {
        pfVar22 = pfVar15;
        pfVar24 = pfVar10 + 1;
        do {
          pfVar2 = pfVar24 + 4;
          fVar31 = pfVar24[-1];
          pfVar22[1] = pfVar22[1] + *pfVar24;
          *pfVar22 = *pfVar22 + fVar31;
          fVar31 = pfVar24[1];
          pfVar22[3] = pfVar22[3] + pfVar24[2];
          pfVar22[2] = pfVar22[2] + fVar31;
          pfVar22 = pfVar22 + 4;
          pfVar24 = pfVar2;
        } while (pfVar2 != pfVar10 + (ulong)uVar16 * 4 + 5);
      }
      else {
        uVar18 = 0;
        pfVar22 = pfVar15;
        pfVar24 = pfVar13;
        do {
          uVar18 = uVar18 + 1;
          uVar30 = *(undefined8 *)pfVar24;
          *(ulong *)(pfVar22 + 2) =
               CONCAT44((float)((ulong)*(undefined8 *)(pfVar22 + 2) >> 0x20) +
                        (float)((ulong)*(undefined8 *)(pfVar24 + 2) >> 0x20),
                        (float)*(undefined8 *)(pfVar22 + 2) + (float)*(undefined8 *)(pfVar24 + 2));
          *(ulong *)pfVar22 =
               CONCAT44((float)((ulong)*(undefined8 *)pfVar22 >> 0x20) +
                        (float)((ulong)uVar30 >> 0x20),(float)*(undefined8 *)pfVar22 + (float)uVar30
                       );
          pfVar22 = pfVar22 + 4;
          pfVar24 = pfVar24 + 4;
        } while (uVar18 < uVar25);
      }
    }
    if ((int)uVar7 < (int)uVar8) {
                    /* try { // try from 00311418 to 0041141b has its CatchHandler @ 00312ebc */
      if ((pfVar15 + lVar26 + 4 <= pfVar28 + lVar26 + uVar27 ||
           pfVar28 + uVar27 + 4 + lVar26 <= pfVar14) && (7 < uVar9)) {
        if (uVar5 == 0) {
          uVar23 = (ulong)uVar7;
        }
        else {
          *pfVar14 = *pfVar14 + pfVar10[lVar26];
          if (uVar5 == 1) {
            uVar23 = (ulong)uVar17;
          }
          else {
            *pfVar19 = *pfVar19 + *(float *)((long)pfVar10 + uVar29);
            if (uVar5 == 3) {
              uVar23 = (ulong)(uVar7 + 3);
              *pfVar3 = *pfVar3 + *(float *)((long)pfVar10 + uVar12);
            }
            else {
              uVar23 = (ulong)uVar1;
            }
          }
        }
        if (2 < (uVar9 - 1) - uVar5) {
          uVar18 = 0;
          pfVar22 = pfVar15 + (ulong)uVar5 + lVar26;
          pfVar28 = pfVar28 + lVar26 + uVar27 + (ulong)uVar5;
          pfVar24 = pfVar15 + lVar26 + (ulong)uVar5;
          do {
            uVar32 = *(undefined8 *)pfVar28;
            uVar18 = uVar18 + 1;
                    /* try { // try from 0031148c to 0041148f has its CatchHandler @ 00312f5c */
            uVar30 = *(undefined8 *)pfVar24;
            *(ulong *)(pfVar22 + 2) =
                 CONCAT44((float)((ulong)*(undefined8 *)(pfVar24 + 2) >> 0x20) +
                          (float)((ulong)*(undefined8 *)(pfVar28 + 2) >> 0x20),
                          (float)*(undefined8 *)(pfVar24 + 2) + (float)*(undefined8 *)(pfVar28 + 2))
            ;
            *(ulong *)pfVar22 =
                 CONCAT44((float)((ulong)uVar30 >> 0x20) + (float)((ulong)uVar32 >> 0x20),
                          (float)uVar30 + (float)uVar32);
            pfVar22 = pfVar22 + 4;
            pfVar28 = pfVar28 + 4;
            pfVar24 = pfVar24 + 4;
          } while (uVar18 < uVar4);
          uVar23 = (ulong)(uint)((int)uVar23 + iVar34);
          if (uVar9 - uVar5 == iVar34) goto joined_r0x00311394;
        }
        uVar20 = -(uVar23 >> 0x1f) & 0xfffffffc00000000 | uVar23 << 2;
                    /* try { // try from 003114b8 to 0041171b has its CatchHandler @ 00310df0 */
        *(float *)((long)pfVar15 + uVar20) =
             *(float *)((long)pfVar15 + uVar20) + *(float *)((long)pfVar10 + uVar20);
        if ((int)uVar23 + 1 < (int)uVar8) {
          lVar21 = uVar20 + 4;
          *(float *)((long)pfVar15 + lVar21) =
               *(float *)((long)pfVar15 + lVar21) + *(float *)((long)pfVar10 + lVar21);
          if ((int)uVar23 + 2 < (int)uVar8) {
            lVar21 = uVar20 + 8;
            *(float *)((long)pfVar15 + lVar21) =
                 *(float *)((long)pfVar15 + lVar21) + *(float *)((long)pfVar10 + lVar21);
          }
        }
        goto joined_r0x00311394;
      }
      lVar21 = 0;
      do {
        *(float *)((long)pfVar14 + lVar21) =
             *(float *)((long)pfVar14 + lVar21) + *(float *)((long)pfVar10 + lVar21 + lVar26 * 4);
        lVar21 = lVar21 + 4;
      } while (lVar21 != ((ulong)((uVar8 - 1) - uVar7) + 1) * 4);
    }
    goto joined_r0x00311394;
  }
  if (0 < (int)uVar8) {
    if ((pfVar33 < pfVar15 + 4 && pfVar15 < pfVar33 + 4) || (uVar8 < 0xc)) {
                    /* try { // try from 00311728 to 0041172b has its CatchHandler @ 00312f5c */
      lVar26 = 0;
      do {
                    /* try { // try from 00311734 to 0041173f has its CatchHandler @ 00312f40 */
        pfVar33[lVar26] = pfVar15[lVar26];
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar8);
    }
    else {
      uVar25 = -((uint)((ulong)pfVar15 >> 2) & 3) & 3;
      if (uVar8 < uVar25) {
        uVar25 = uVar8;
      }
      uVar27 = 0;
      if (uVar25 != 0) {
        *pfVar33 = *pfVar15;
        if (uVar25 == 1) {
          uVar27 = 1;
        }
        else {
          pfVar33[1] = pfVar15[1];
          if (uVar25 == 3) {
            uVar27 = 3;
            pfVar33[2] = pfVar15[2];
          }
          else {
                    /* try { // try from 00311774 to 00411777 has its CatchHandler @ 00312f5c */
            uVar27 = 2;
          }
        }
      }
      uVar7 = ((uVar8 - uVar25) - 4 >> 2) + 1;
      iVar34 = uVar7 * 4;
      if (2 < (uVar8 - 1) - uVar25) {
        uVar16 = 0;
        pfVar13 = pfVar15 + uVar25;
        pfVar14 = pfVar33 + uVar25;
        do {
          uVar30 = *(undefined8 *)pfVar13;
          uVar16 = uVar16 + 1;
          *(undefined8 *)(pfVar14 + 2) = *(undefined8 *)(pfVar13 + 2);
          *(undefined8 *)pfVar14 = uVar30;
          pfVar13 = pfVar13 + 4;
          pfVar14 = pfVar14 + 4;
        } while (uVar16 < uVar7);
        uVar27 = (ulong)(uint)((int)uVar27 + iVar34);
        if (iVar34 == uVar8 - uVar25) goto LAB_00311638;
      }
      uVar12 = -(uVar27 >> 0x1f) & 0xfffffffc00000000 | uVar27 << 2;
      *(undefined4 *)((long)pfVar33 + uVar12) = *(undefined4 *)((long)pfVar15 + uVar12);
      if (((int)uVar27 + 1 < (int)uVar8) &&
         (*(undefined4 *)((long)pfVar33 + uVar12 + 4) = *(undefined4 *)((long)pfVar15 + uVar12 + 4),
         (int)uVar27 + 2 < (int)uVar8)) {
        *(undefined4 *)((long)pfVar33 + uVar12 + 8) = *(undefined4 *)((long)pfVar15 + uVar12 + 8);
      }
    }
  }
LAB_00311638:
  if (bVar11) {
    operator_delete__(pfVar15);
  }
  return;
}


==================================================================

### FUNC 0031177c (2572 bytes) name=FUN_0031177c

void FUN_0031177c(uint *param_1,long param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  short sVar11;
  short sVar12;
  short sVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  float *pfVar18;
  bool bVar19;
  uint uVar20;
  ulong uVar21;
  float *pfVar22;
  long lVar23;
  float *pfVar24;
  int iVar25;
  ulong uVar26;
  float *pfVar27;
  uint uVar28;
  float *pfVar29;
  uint uVar30;
  short *psVar31;
  short *psVar32;
  long lVar33;
  uint uVar34;
  uint uVar35;
  undefined1 (*pauVar36) [16];
  ulong uVar37;
  short *psVar38;
  float *pfVar39;
  int iVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined8 uVar49;
  undefined1 auVar50 [16];
  long lVar51;
  long lVar52;
  long lVar53;
  long lVar54;
  long lVar55;
  long lVar56;
  long lVar57;
  long lVar58;
  long lVar59;
  float afStack_420 [264];
  
                    /* try { // try from 00311780 to 00411783 has its CatchHandler @ 00312f40 */
                    /* try { // try from 00311798 to 0041179b has its CatchHandler @ 00312f5c */
                    /* try { // try from 003117ac to 00412c3b has its CatchHandler @ 00312f40 */
  pfVar27 = afStack_420;
  iVar25 = (*(int **)(param_1 + 0x10))[1];
  iVar10 = **(int **)(param_1 + 0x10);
  uVar16 = iVar25 + (*param_1 >> 3 & 0x1ff) * iVar25;
  uVar37 = (ulong)(int)uVar16;
  if (uVar37 < 0x109) {
    bVar19 = false;
  }
  else {
    uVar21 = uVar37 << 2;
    if (0x1fc0000000000000 < uVar37) {
      uVar21 = 0xffffffffffffffff;
    }
    pfVar22 = operator_new__(uVar21);
    bVar19 = pfVar22 != pfVar27;
    pfVar27 = pfVar22;
  }
  uVar37 = *(ulong *)(param_1 + 0x14);
  pfVar22 = *(float **)(param_2 + 0x10);
  psVar31 = *(short **)(param_1 + 4);
  if ((int)uVar16 < 1) goto LAB_00311a24;
  uVar20 = -((uint)((ulong)pfVar27 >> 2) & 3) & 3;
  if (uVar16 < uVar20) {
    uVar20 = uVar16;
  }
  uVar21 = (ulong)uVar20;
  if ((int)uVar16 < 9) {
    uVar21 = (ulong)uVar16;
LAB_0031185c:
    uVar20 = (uint)uVar21;
    *pfVar27 = (float)(int)*psVar31;
    uVar26 = uVar21;
    if ((((uVar20 != 1) && (pfVar27[1] = (float)(int)psVar31[1], uVar20 != 2)) &&
        (pfVar27[2] = (float)(int)psVar31[2], uVar20 != 3)) &&
       (((pfVar27[3] = (float)(int)psVar31[3], uVar20 != 4 &&
         (pfVar27[4] = (float)(int)psVar31[4], uVar20 != 5)) &&
        (pfVar27[5] = (float)(int)psVar31[5], uVar20 != 6)))) {
      pfVar27[6] = (float)(int)psVar31[6];
      if (uVar20 == 8) {
        pfVar27[7] = (float)(int)psVar31[7];
      }
      else {
        uVar26 = 7;
      }
    }
    iVar25 = (int)uVar26;
    if (uVar16 == uVar20) goto LAB_00311a24;
  }
  else {
    iVar25 = 0;
    if (uVar20 != 0) goto LAB_0031185c;
  }
  iVar17 = uVar16 - (int)uVar21;
  uVar20 = (iVar17 - 8U >> 3) + 1;
  iVar14 = uVar20 * 8;
  if (6 < (uVar16 - 1) - (int)uVar21) {
    uVar30 = 0;
    pfVar24 = pfVar27 + uVar21;
    psVar32 = psVar31 + uVar21;
    do {
      uVar30 = uVar30 + 1;
      auVar45._0_4_ = (int)*psVar32;
      auVar45._4_4_ = (int)psVar32[1];
      auVar45._8_4_ = (int)psVar32[2];
      auVar45._12_4_ = (int)psVar32[3];
      auVar41._0_4_ = (int)psVar32[4];
      auVar41._4_4_ = (int)psVar32[5];
      auVar41._8_4_ = (int)psVar32[6];
      auVar41._12_4_ = (int)psVar32[7];
      auVar45 = NEON_scvtf(auVar45,4);
      auVar41 = NEON_scvtf(auVar41,4);
      *(long *)(pfVar24 + 2) = auVar45._8_8_;
      *(long *)pfVar24 = auVar45._0_8_;
      *(long *)(pfVar24 + 6) = auVar41._8_8_;
      *(long *)(pfVar24 + 4) = auVar41._0_8_;
      pfVar24 = pfVar24 + 8;
      psVar32 = psVar32 + 8;
    } while (uVar30 < uVar20);
    iVar25 = iVar25 + iVar14;
    if (iVar17 == iVar14) goto LAB_00311a24;
  }
  iVar14 = iVar25 + 1;
  pfVar27[iVar25] = (float)(int)psVar31[iVar25];
  if (iVar14 < (int)uVar16) {
    iVar17 = iVar25 + 2;
    pfVar27[iVar14] = (float)(int)psVar31[iVar14];
    if (iVar17 < (int)uVar16) {
      iVar14 = iVar25 + 3;
      pfVar27[iVar17] = (float)(int)psVar31[iVar17];
      if (iVar14 < (int)uVar16) {
        iVar17 = iVar25 + 4;
        pfVar27[iVar14] = (float)(int)psVar31[iVar14];
        if (iVar17 < (int)uVar16) {
          iVar14 = iVar25 + 5;
          pfVar27[iVar17] = (float)(int)psVar31[iVar17];
          if (iVar14 < (int)uVar16) {
            iVar25 = iVar25 + 6;
            pfVar27[iVar14] = (float)(int)psVar31[iVar14];
            if (iVar25 < (int)uVar16) {
              pfVar27[iVar25] = (float)(int)psVar31[iVar25];
            }
          }
        }
      }
    }
  }
LAB_00311a24:
  uVar30 = uVar16 - 4;
  iVar25 = (uVar30 >> 2) + 1;
  uVar20 = ((uVar30 >> 2) - 1 >> 1) + 1;
  iVar17 = iVar25 * 4;
  iVar14 = uVar20 * 8;
  lVar53 = NEON_shl(uVar37 >> 1,1);
  if (uVar30 < 4) {
    iVar14 = 0;
  }
  if ((int)(uVar16 - 3) < 1) {
    iVar17 = 0;
  }
  iVar1 = iVar17 + 1;
  lVar33 = (long)iVar14;
  iVar14 = iVar17 + 2;
  lVar23 = (long)iVar17;
  pfVar24 = pfVar27 + lVar23;
  uVar9 = -((uint)((ulong)pfVar24 >> 2) & 3) & 3;
  iVar2 = iVar17 + 3;
  iVar3 = iVar17 + 4;
  lVar59 = NEON_shl(lVar23,1);
  iVar4 = iVar17 + 5;
  iVar5 = iVar17 + 6;
  iVar6 = iVar17 + 7;
  lVar58 = NEON_shl((long)iVar1,1);
  uVar28 = uVar16 - iVar17;
  if (uVar28 < uVar9) {
    uVar9 = uVar28;
  }
  lVar57 = NEON_shl((long)iVar14,1);
  lVar56 = NEON_shl((long)iVar2,1);
  lVar55 = NEON_shl((long)iVar3,1);
  lVar54 = NEON_shl((long)iVar4,1);
  lVar52 = NEON_shl((long)iVar5,1);
  lVar51 = NEON_shl((long)iVar6,1);
joined_r0x00311bd8:
  do {
    psVar32 = psVar31;
    iVar10 = iVar10 + -1;
    if (iVar10 == 0) {
      if (0 < (int)uVar16) {
        if ((pfVar22 < pfVar27 + 4 && pfVar27 < pfVar22 + 4) || (uVar16 < 0xc)) {
          lVar53 = 0;
          do {
            pfVar22[lVar53] = pfVar27[lVar53];
            lVar53 = lVar53 + 1;
          } while ((int)lVar53 < (int)uVar16);
        }
        else {
          uVar20 = -((uint)((ulong)pfVar27 >> 2) & 3) & 3;
          if (uVar16 < uVar20) {
            uVar20 = uVar16;
          }
          uVar30 = 0;
          if ((uVar20 != 0) && (*pfVar22 = *pfVar27, uVar30 = uVar20, uVar20 != 1)) {
            pfVar22[1] = pfVar27[1];
            if (uVar20 == 3) {
              pfVar22[2] = pfVar27[2];
            }
            else {
              uVar30 = 2;
            }
          }
          uVar9 = ((uVar16 - uVar20) - 4 >> 2) + 1;
          iVar25 = uVar9 * 4;
          uVar28 = 0;
          pfVar24 = pfVar27 + uVar20;
          pfVar29 = pfVar22 + uVar20;
          do {
            uVar49 = *(undefined8 *)pfVar24;
            uVar28 = uVar28 + 1;
            *(undefined8 *)(pfVar29 + 2) = *(undefined8 *)(pfVar24 + 2);
            *(undefined8 *)pfVar29 = uVar49;
            pfVar24 = pfVar24 + 4;
            pfVar29 = pfVar29 + 4;
          } while (uVar28 < uVar9);
          uVar30 = iVar25 + uVar30;
          if (iVar25 != uVar16 - uVar20) {
            uVar37 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
            *(undefined4 *)((long)pfVar22 + uVar37) = *(undefined4 *)((long)pfVar27 + uVar37);
            if (((int)(uVar30 + 1) < (int)uVar16) &&
               (*(undefined4 *)((long)pfVar22 + uVar37 + 4) =
                     *(undefined4 *)((long)pfVar27 + uVar37 + 4), (int)(uVar30 + 2) < (int)uVar16))
            {
              *(undefined4 *)((long)pfVar22 + uVar37 + 8) =
                   *(undefined4 *)((long)pfVar27 + uVar37 + 8);
            }
          }
        }
      }
      if (bVar19) {
        operator_delete__(pfVar27);
      }
      return;
    }
    psVar31 = (short *)((long)psVar32 + lVar53);
    if (0 < (int)(uVar16 - 3)) {
      if (3 < uVar30) {
        pauVar36 = (undefined1 (*) [16])(pfVar27 + 4);
        uVar34 = 0;
        psVar38 = psVar31;
        pfVar29 = pfVar27;
        do {
          uVar34 = uVar34 + 1;
          auVar41 = *pauVar36;
          auVar50._0_4_ = (int)*psVar38;
          auVar50._4_4_ = (int)psVar38[1];
          auVar50._8_4_ = (int)psVar38[2];
          auVar50._12_4_ = (int)psVar38[3];
          auVar47._0_4_ = (int)psVar38[4];
          auVar47._4_4_ = (int)psVar38[5];
          auVar47._8_4_ = (int)psVar38[6];
          auVar47._12_4_ = (int)psVar38[7];
          auVar50 = NEON_scvtf(auVar50,4);
          auVar45 = NEON_scvtf(auVar47,4);
          auVar42._0_8_ = CONCAT44(auVar41._4_4_ + auVar45._4_4_,auVar41._0_4_ + auVar45._0_4_);
          auVar42._8_4_ = auVar41._8_4_ + auVar45._8_4_;
          auVar42._12_4_ = auVar41._12_4_ + auVar45._12_4_;
          *(ulong *)(pfVar29 + 2) =
               CONCAT44((float)((ulong)*(undefined8 *)(pfVar29 + 2) >> 0x20) + auVar50._12_4_,
                        (float)*(undefined8 *)(pfVar29 + 2) + auVar50._8_4_);
          *(ulong *)pfVar29 =
               CONCAT44((float)((ulong)*(undefined8 *)pfVar29 >> 0x20) + auVar50._4_4_,
                        (float)*(undefined8 *)pfVar29 + auVar50._0_4_);
          pfVar29 = pfVar29 + 8;
          *(long *)((long)*pauVar36 + 8) = auVar42._8_8_;
          *(undefined8 *)*pauVar36 = auVar42._0_8_;
          pauVar36 = pauVar36 + 2;
          psVar38 = psVar38 + 8;
        } while (uVar34 < uVar20);
        if (iVar25 == uVar20 * 2) goto LAB_00311cbc;
      }
      sVar11 = psVar31[lVar33 + 1];
      sVar12 = psVar31[lVar33 + 2];
      sVar13 = psVar31[lVar33 + 3];
      pfVar27[lVar33] = pfVar27[lVar33] + (float)(int)psVar31[lVar33];
      pfVar27[lVar33 + 1] = (float)(int)sVar11 + pfVar27[lVar33 + 1];
      pfVar27[lVar33 + 2] = pfVar27[lVar33 + 2] + (float)(int)sVar12;
      pfVar27[lVar33 + 3] = (float)(int)sVar13 + pfVar27[lVar33 + 3];
    }
LAB_00311cbc:
  } while ((int)uVar16 <= iVar17);
  uVar34 = uVar9;
  if (uVar28 < 9) {
    uVar34 = uVar28;
  }
  iVar40 = iVar17;
  if (uVar34 != 0) {
    *pfVar24 = *pfVar24 + (float)(int)*(short *)((long)psVar31 + lVar59);
    iVar40 = iVar1;
    if (((((uVar34 != 1) &&
          (pfVar27[iVar1] = pfVar27[iVar1] + (float)(int)*(short *)((long)psVar31 + lVar58),
          iVar40 = iVar14, uVar34 != 2)) &&
         (pfVar27[iVar14] = pfVar27[iVar14] + (float)(int)*(short *)((long)psVar31 + lVar57),
         iVar40 = iVar2, uVar34 != 3)) &&
        ((pfVar27[iVar2] = pfVar27[iVar2] + (float)(int)*(short *)((long)psVar31 + lVar56),
         iVar40 = iVar3, uVar34 != 4 &&
         (pfVar27[iVar3] = pfVar27[iVar3] + (float)(int)*(short *)((long)psVar31 + lVar55),
         iVar40 = iVar4, uVar34 != 5)))) &&
       ((pfVar27[iVar4] = pfVar27[iVar4] + (float)(int)*(short *)((long)psVar31 + lVar54),
        iVar40 = iVar5, uVar34 != 6 &&
        (pfVar27[iVar5] = pfVar27[iVar5] + (float)(int)*(short *)((long)psVar31 + lVar52),
        iVar40 = iVar6, uVar34 == 8)))) {
      pfVar27[iVar6] = pfVar27[iVar6] + (float)(int)*(short *)((long)psVar31 + lVar51);
      iVar40 = iVar17 + 8;
    }
    if (uVar34 == uVar28) goto joined_r0x00311bd8;
  }
  uVar7 = ((uVar28 - uVar34) - 8 >> 3) + 1;
  iVar15 = uVar7 * 8;
  if (6 < (uVar28 - 1) - uVar34) {
    pfVar29 = pfVar27 + lVar23 + (ulong)uVar34;
    uVar35 = 0;
    psVar32 = psVar32 + (ulong)uVar34 + (uVar37 >> 1) + lVar23;
    pfVar39 = pfVar29;
    do {
      pfVar18 = pfVar29 + 2;
      uVar49 = *(undefined8 *)pfVar29;
      auVar41 = *(undefined1 (*) [16])(pfVar29 + 4);
      uVar35 = uVar35 + 1;
      pfVar29 = pfVar29 + 8;
      auVar46._0_4_ = (int)*psVar32;
      auVar46._4_4_ = (int)psVar32[1];
      auVar46._8_4_ = (int)psVar32[2];
      auVar46._12_4_ = (int)psVar32[3];
      auVar43._0_4_ = (int)psVar32[4];
      auVar43._4_4_ = (int)psVar32[5];
      auVar43._8_4_ = (int)psVar32[6];
      auVar43._12_4_ = (int)psVar32[7];
      auVar47 = NEON_scvtf(auVar46,4);
      auVar45 = NEON_scvtf(auVar43,4);
      auVar48._0_8_ =
           CONCAT44((float)((ulong)uVar49 >> 0x20) + auVar47._4_4_,(float)uVar49 + auVar47._0_4_);
      auVar48._8_4_ = (float)*(undefined8 *)pfVar18 + auVar47._8_4_;
      auVar48._12_4_ = (float)((ulong)*(undefined8 *)pfVar18 >> 0x20) + auVar47._12_4_;
      auVar44._0_8_ = CONCAT44(auVar45._4_4_ + auVar41._4_4_,auVar45._0_4_ + auVar41._0_4_);
      auVar44._8_4_ = auVar45._8_4_ + auVar41._8_4_;
      auVar44._12_4_ = auVar45._12_4_ + auVar41._12_4_;
      *(long *)(pfVar39 + 2) = auVar48._8_8_;
      *(undefined8 *)pfVar39 = auVar48._0_8_;
      *(long *)(pfVar39 + 6) = auVar44._8_8_;
      *(undefined8 *)(pfVar39 + 4) = auVar44._0_8_;
      psVar32 = psVar32 + 8;
      pfVar39 = pfVar39 + 8;
    } while (uVar35 < uVar7);
    iVar40 = iVar40 + iVar15;
    if (iVar15 == uVar28 - uVar34) goto joined_r0x00311bd8;
  }
  iVar15 = iVar40 + 1;
  pfVar27[iVar40] = pfVar27[iVar40] + (float)(int)psVar31[iVar40];
  if (iVar15 < (int)uVar16) {
    iVar8 = iVar40 + 2;
    pfVar27[iVar15] = pfVar27[iVar15] + (float)(int)psVar31[iVar15];
    if (iVar8 < (int)uVar16) {
      iVar15 = iVar40 + 3;
      pfVar27[iVar8] = pfVar27[iVar8] + (float)(int)psVar31[iVar8];
      if (iVar15 < (int)uVar16) {
        iVar8 = iVar40 + 4;
        pfVar27[iVar15] = pfVar27[iVar15] + (float)(int)psVar31[iVar15];
        if (iVar8 < (int)uVar16) {
          iVar15 = iVar40 + 5;
          pfVar27[iVar8] = pfVar27[iVar8] + (float)(int)psVar31[iVar8];
          if (iVar15 < (int)uVar16) {
            iVar40 = iVar40 + 6;
            pfVar27[iVar15] = pfVar27[iVar15] + (float)(int)psVar31[iVar15];
            if (iVar40 < (int)uVar16) {
              pfVar27[iVar40] = pfVar27[iVar40] + (float)(int)psVar31[iVar40];
            }
          }
        }
      }
    }
  }
  goto joined_r0x00311bd8;
}


==================================================================

### FUNC 00312188 (2572 bytes) name=FUN_00312188

void FUN_00312188(uint *param_1,long param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  ushort uVar11;
  ushort uVar12;
  ushort uVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  float *pfVar18;
  bool bVar19;
  uint uVar20;
  ulong uVar21;
  float *pfVar22;
  long lVar23;
  float *pfVar24;
  int iVar25;
  ulong uVar26;
  float *pfVar27;
  uint uVar28;
  float *pfVar29;
  uint uVar30;
  ushort *puVar31;
  ushort *puVar32;
  long lVar33;
  uint uVar34;
  uint uVar35;
  undefined1 (*pauVar36) [16];
  ulong uVar37;
  ushort *puVar38;
  float *pfVar39;
  int iVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined8 uVar49;
  undefined1 auVar50 [16];
  long lVar51;
  long lVar52;
  long lVar53;
  long lVar54;
  long lVar55;
  long lVar56;
  long lVar57;
  long lVar58;
  long lVar59;
  float afStack_420 [264];
  
  pfVar27 = afStack_420;
  iVar25 = (*(int **)(param_1 + 0x10))[1];
  iVar10 = **(int **)(param_1 + 0x10);
  uVar16 = iVar25 + (*param_1 >> 3 & 0x1ff) * iVar25;
  uVar37 = (ulong)(int)uVar16;
  if (uVar37 < 0x109) {
    bVar19 = false;
  }
  else {
    uVar21 = uVar37 << 2;
    if (0x1fc0000000000000 < uVar37) {
      uVar21 = 0xffffffffffffffff;
    }
    pfVar22 = operator_new__(uVar21);
    bVar19 = pfVar22 != pfVar27;
    pfVar27 = pfVar22;
  }
  uVar37 = *(ulong *)(param_1 + 0x14);
  pfVar22 = *(float **)(param_2 + 0x10);
  puVar31 = *(ushort **)(param_1 + 4);
  if ((int)uVar16 < 1) goto LAB_00312430;
  uVar20 = -((uint)((ulong)pfVar27 >> 2) & 3) & 3;
  if (uVar16 < uVar20) {
    uVar20 = uVar16;
  }
  uVar21 = (ulong)uVar20;
  if ((int)uVar16 < 9) {
    uVar21 = (ulong)uVar16;
LAB_00312268:
    uVar20 = (uint)uVar21;
    *pfVar27 = (float)*puVar31;
    uVar26 = uVar21;
    if ((((uVar20 != 1) && (pfVar27[1] = (float)puVar31[1], uVar20 != 2)) &&
        (pfVar27[2] = (float)puVar31[2], uVar20 != 3)) &&
       (((pfVar27[3] = (float)puVar31[3], uVar20 != 4 &&
         (pfVar27[4] = (float)puVar31[4], uVar20 != 5)) &&
        (pfVar27[5] = (float)puVar31[5], uVar20 != 6)))) {
      pfVar27[6] = (float)puVar31[6];
      if (uVar20 == 8) {
        pfVar27[7] = (float)puVar31[7];
      }
      else {
        uVar26 = 7;
      }
    }
    iVar25 = (int)uVar26;
    if (uVar16 == uVar20) goto LAB_00312430;
  }
  else {
    iVar25 = 0;
    if (uVar20 != 0) goto LAB_00312268;
  }
  iVar17 = uVar16 - (int)uVar21;
  uVar20 = (iVar17 - 8U >> 3) + 1;
  iVar14 = uVar20 * 8;
  if (6 < (uVar16 - 1) - (int)uVar21) {
    uVar30 = 0;
    pfVar24 = pfVar27 + uVar21;
    puVar32 = puVar31 + uVar21;
    do {
      uVar30 = uVar30 + 1;
      auVar45._2_2_ = 0;
      auVar45._0_2_ = *puVar32;
      auVar45._4_2_ = puVar32[1];
      auVar45._6_2_ = 0;
      auVar45._8_2_ = puVar32[2];
      auVar45._10_2_ = 0;
      auVar45._12_2_ = puVar32[3];
      auVar45._14_2_ = 0;
      auVar41._2_2_ = 0;
      auVar41._0_2_ = puVar32[4];
      auVar41._4_2_ = puVar32[5];
      auVar41._6_2_ = 0;
      auVar41._8_2_ = puVar32[6];
      auVar41._10_2_ = 0;
      auVar41._12_2_ = puVar32[7];
      auVar41._14_2_ = 0;
      auVar45 = NEON_scvtf(auVar45,4);
      auVar41 = NEON_scvtf(auVar41,4);
      *(long *)(pfVar24 + 2) = auVar45._8_8_;
      *(long *)pfVar24 = auVar45._0_8_;
      *(long *)(pfVar24 + 6) = auVar41._8_8_;
      *(long *)(pfVar24 + 4) = auVar41._0_8_;
      pfVar24 = pfVar24 + 8;
      puVar32 = puVar32 + 8;
    } while (uVar30 < uVar20);
    iVar25 = iVar25 + iVar14;
    if (iVar17 == iVar14) goto LAB_00312430;
  }
  iVar14 = iVar25 + 1;
  pfVar27[iVar25] = (float)puVar31[iVar25];
  if (iVar14 < (int)uVar16) {
    iVar17 = iVar25 + 2;
    pfVar27[iVar14] = (float)puVar31[iVar14];
    if (iVar17 < (int)uVar16) {
      iVar14 = iVar25 + 3;
      pfVar27[iVar17] = (float)puVar31[iVar17];
      if (iVar14 < (int)uVar16) {
        iVar17 = iVar25 + 4;
        pfVar27[iVar14] = (float)puVar31[iVar14];
        if (iVar17 < (int)uVar16) {
          iVar14 = iVar25 + 5;
          pfVar27[iVar17] = (float)puVar31[iVar17];
          if (iVar14 < (int)uVar16) {
            iVar25 = iVar25 + 6;
            pfVar27[iVar14] = (float)puVar31[iVar14];
            if (iVar25 < (int)uVar16) {
              pfVar27[iVar25] = (float)puVar31[iVar25];
            }
          }
        }
      }
    }
  }
LAB_00312430:
  uVar30 = uVar16 - 4;
  iVar25 = (uVar30 >> 2) + 1;
  uVar20 = ((uVar30 >> 2) - 1 >> 1) + 1;
  iVar17 = iVar25 * 4;
  iVar14 = uVar20 * 8;
  lVar53 = NEON_shl(uVar37 >> 1,1);
  if (uVar30 < 4) {
    iVar14 = 0;
  }
  if ((int)(uVar16 - 3) < 1) {
    iVar17 = 0;
  }
  iVar1 = iVar17 + 1;
  lVar33 = (long)iVar14;
  iVar14 = iVar17 + 2;
  lVar23 = (long)iVar17;
  pfVar24 = pfVar27 + lVar23;
  uVar9 = -((uint)((ulong)pfVar24 >> 2) & 3) & 3;
  iVar2 = iVar17 + 3;
  iVar3 = iVar17 + 4;
  lVar59 = NEON_shl(lVar23,1);
  iVar4 = iVar17 + 5;
  iVar5 = iVar17 + 6;
  iVar6 = iVar17 + 7;
  lVar58 = NEON_shl((long)iVar1,1);
  uVar28 = uVar16 - iVar17;
  if (uVar28 < uVar9) {
    uVar9 = uVar28;
  }
  lVar57 = NEON_shl((long)iVar14,1);
  lVar56 = NEON_shl((long)iVar2,1);
  lVar55 = NEON_shl((long)iVar3,1);
  lVar54 = NEON_shl((long)iVar4,1);
  lVar52 = NEON_shl((long)iVar5,1);
  lVar51 = NEON_shl((long)iVar6,1);
joined_r0x003125e4:
  do {
    puVar32 = puVar31;
    iVar10 = iVar10 + -1;
    if (iVar10 == 0) {
      if (0 < (int)uVar16) {
        if ((pfVar22 < pfVar27 + 4 && pfVar27 < pfVar22 + 4) || (uVar16 < 0xc)) {
          lVar53 = 0;
          do {
            pfVar22[lVar53] = pfVar27[lVar53];
            lVar53 = lVar53 + 1;
          } while ((int)lVar53 < (int)uVar16);
        }
        else {
          uVar20 = -((uint)((ulong)pfVar27 >> 2) & 3) & 3;
          if (uVar16 < uVar20) {
            uVar20 = uVar16;
          }
          uVar30 = 0;
          if ((uVar20 != 0) && (*pfVar22 = *pfVar27, uVar30 = uVar20, uVar20 != 1)) {
            pfVar22[1] = pfVar27[1];
            if (uVar20 == 3) {
              pfVar22[2] = pfVar27[2];
            }
            else {
              uVar30 = 2;
            }
          }
          uVar9 = ((uVar16 - uVar20) - 4 >> 2) + 1;
          iVar25 = uVar9 * 4;
          uVar28 = 0;
          pfVar24 = pfVar27 + uVar20;
          pfVar29 = pfVar22 + uVar20;
          do {
            uVar49 = *(undefined8 *)pfVar24;
            uVar28 = uVar28 + 1;
            *(undefined8 *)(pfVar29 + 2) = *(undefined8 *)(pfVar24 + 2);
            *(undefined8 *)pfVar29 = uVar49;
            pfVar24 = pfVar24 + 4;
            pfVar29 = pfVar29 + 4;
          } while (uVar28 < uVar9);
          uVar30 = iVar25 + uVar30;
          if (iVar25 != uVar16 - uVar20) {
            uVar37 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
            *(undefined4 *)((long)pfVar22 + uVar37) = *(undefined4 *)((long)pfVar27 + uVar37);
            if (((int)(uVar30 + 1) < (int)uVar16) &&
               (*(undefined4 *)((long)pfVar22 + uVar37 + 4) =
                     *(undefined4 *)((long)pfVar27 + uVar37 + 4), (int)(uVar30 + 2) < (int)uVar16))
            {
              *(undefined4 *)((long)pfVar22 + uVar37 + 8) =
                   *(undefined4 *)((long)pfVar27 + uVar37 + 8);
            }
          }
        }
      }
      if (bVar19) {
        operator_delete__(pfVar27);
      }
      return;
    }
    puVar31 = (ushort *)((long)puVar32 + lVar53);
    if (0 < (int)(uVar16 - 3)) {
      if (3 < uVar30) {
        pauVar36 = (undefined1 (*) [16])(pfVar27 + 4);
        uVar34 = 0;
        puVar38 = puVar31;
        pfVar29 = pfVar27;
        do {
          uVar34 = uVar34 + 1;
          auVar41 = *pauVar36;
          auVar50._2_2_ = 0;
          auVar50._0_2_ = *puVar38;
          auVar50._4_2_ = puVar38[1];
          auVar50._6_2_ = 0;
          auVar50._8_2_ = puVar38[2];
          auVar50._10_2_ = 0;
          auVar50._12_2_ = puVar38[3];
          auVar50._14_2_ = 0;
          auVar47._2_2_ = 0;
          auVar47._0_2_ = puVar38[4];
          auVar47._4_2_ = puVar38[5];
          auVar47._6_2_ = 0;
          auVar47._8_2_ = puVar38[6];
          auVar47._10_2_ = 0;
          auVar47._12_2_ = puVar38[7];
          auVar47._14_2_ = 0;
          auVar50 = NEON_scvtf(auVar50,4);
          auVar45 = NEON_scvtf(auVar47,4);
          auVar42._0_8_ = CONCAT44(auVar41._4_4_ + auVar45._4_4_,auVar41._0_4_ + auVar45._0_4_);
          auVar42._8_4_ = auVar41._8_4_ + auVar45._8_4_;
          auVar42._12_4_ = auVar41._12_4_ + auVar45._12_4_;
          *(ulong *)(pfVar29 + 2) =
               CONCAT44((float)((ulong)*(undefined8 *)(pfVar29 + 2) >> 0x20) + auVar50._12_4_,
                        (float)*(undefined8 *)(pfVar29 + 2) + auVar50._8_4_);
          *(ulong *)pfVar29 =
               CONCAT44((float)((ulong)*(undefined8 *)pfVar29 >> 0x20) + auVar50._4_4_,
                        (float)*(undefined8 *)pfVar29 + auVar50._0_4_);
          pfVar29 = pfVar29 + 8;
          *(long *)((long)*pauVar36 + 8) = auVar42._8_8_;
          *(undefined8 *)*pauVar36 = auVar42._0_8_;
          pauVar36 = pauVar36 + 2;
          puVar38 = puVar38 + 8;
        } while (uVar34 < uVar20);
        if (iVar25 == uVar20 * 2) goto LAB_003126c8;
      }
      uVar11 = puVar31[lVar33 + 1];
      uVar12 = puVar31[lVar33 + 2];
      uVar13 = puVar31[lVar33 + 3];
      pfVar27[lVar33] = pfVar27[lVar33] + (float)puVar31[lVar33];
      pfVar27[lVar33 + 1] = (float)uVar11 + pfVar27[lVar33 + 1];
      pfVar27[lVar33 + 2] = pfVar27[lVar33 + 2] + (float)uVar12;
      pfVar27[lVar33 + 3] = (float)uVar13 + pfVar27[lVar33 + 3];
    }
LAB_003126c8:
  } while ((int)uVar16 <= iVar17);
  uVar34 = uVar9;
  if (uVar28 < 9) {
    uVar34 = uVar28;
  }
  iVar40 = iVar17;
  if (uVar34 != 0) {
    *pfVar24 = *pfVar24 + (float)*(ushort *)((long)puVar31 + lVar59);
    iVar40 = iVar1;
    if (((((uVar34 != 1) &&
          (pfVar27[iVar1] = pfVar27[iVar1] + (float)*(ushort *)((long)puVar31 + lVar58),
          iVar40 = iVar14, uVar34 != 2)) &&
         (pfVar27[iVar14] = pfVar27[iVar14] + (float)*(ushort *)((long)puVar31 + lVar57),
         iVar40 = iVar2, uVar34 != 3)) &&
        ((pfVar27[iVar2] = pfVar27[iVar2] + (float)*(ushort *)((long)puVar31 + lVar56),
         iVar40 = iVar3, uVar34 != 4 &&
         (pfVar27[iVar3] = pfVar27[iVar3] + (float)*(ushort *)((long)puVar31 + lVar55),
         iVar40 = iVar4, uVar34 != 5)))) &&
       ((pfVar27[iVar4] = pfVar27[iVar4] + (float)*(ushort *)((long)puVar31 + lVar54),
        iVar40 = iVar5, uVar34 != 6 &&
        (pfVar27[iVar5] = pfVar27[iVar5] + (float)*(ushort *)((long)puVar31 + lVar52),
        iVar40 = iVar6, uVar34 == 8)))) {
      pfVar27[iVar6] = pfVar27[iVar6] + (float)*(ushort *)((long)puVar31 + lVar51);
      iVar40 = iVar17 + 8;
    }
    if (uVar34 == uVar28) goto joined_r0x003125e4;
  }
  uVar7 = ((uVar28 - uVar34) - 8 >> 3) + 1;
  iVar15 = uVar7 * 8;
  if (6 < (uVar28 - 1) - uVar34) {
    pfVar29 = pfVar27 + lVar23 + (ulong)uVar34;
    uVar35 = 0;
    puVar32 = puVar32 + (ulong)uVar34 + (uVar37 >> 1) + lVar23;
    pfVar39 = pfVar29;
    do {
      pfVar18 = pfVar29 + 2;
      uVar49 = *(undefined8 *)pfVar29;
      auVar41 = *(undefined1 (*) [16])(pfVar29 + 4);
      uVar35 = uVar35 + 1;
      pfVar29 = pfVar29 + 8;
      auVar46._2_2_ = 0;
      auVar46._0_2_ = *puVar32;
      auVar46._4_2_ = puVar32[1];
      auVar46._6_2_ = 0;
      auVar46._8_2_ = puVar32[2];
      auVar46._10_2_ = 0;
      auVar46._12_2_ = puVar32[3];
      auVar46._14_2_ = 0;
      auVar43._2_2_ = 0;
      auVar43._0_2_ = puVar32[4];
      auVar43._4_2_ = puVar32[5];
      auVar43._6_2_ = 0;
      auVar43._8_2_ = puVar32[6];
      auVar43._10_2_ = 0;
      auVar43._12_2_ = puVar32[7];
      auVar43._14_2_ = 0;
      auVar47 = NEON_scvtf(auVar46,4);
      auVar45 = NEON_scvtf(auVar43,4);
      auVar48._0_8_ =
           CONCAT44((float)((ulong)uVar49 >> 0x20) + auVar47._4_4_,(float)uVar49 + auVar47._0_4_);
      auVar48._8_4_ = (float)*(undefined8 *)pfVar18 + auVar47._8_4_;
      auVar48._12_4_ = (float)((ulong)*(undefined8 *)pfVar18 >> 0x20) + auVar47._12_4_;
      auVar44._0_8_ = CONCAT44(auVar45._4_4_ + auVar41._4_4_,auVar45._0_4_ + auVar41._0_4_);
      auVar44._8_4_ = auVar45._8_4_ + auVar41._8_4_;
      auVar44._12_4_ = auVar45._12_4_ + auVar41._12_4_;
      *(long *)(pfVar39 + 2) = auVar48._8_8_;
      *(undefined8 *)pfVar39 = auVar48._0_8_;
      *(long *)(pfVar39 + 6) = auVar44._8_8_;
      *(undefined8 *)(pfVar39 + 4) = auVar44._0_8_;
      puVar32 = puVar32 + 8;
      pfVar39 = pfVar39 + 8;
    } while (uVar35 < uVar7);
    iVar40 = iVar40 + iVar15;
    if (iVar15 == uVar28 - uVar34) goto joined_r0x003125e4;
  }
  iVar15 = iVar40 + 1;
  pfVar27[iVar40] = pfVar27[iVar40] + (float)puVar31[iVar40];
  if (iVar15 < (int)uVar16) {
    iVar8 = iVar40 + 2;
    pfVar27[iVar15] = pfVar27[iVar15] + (float)puVar31[iVar15];
    if (iVar8 < (int)uVar16) {
      iVar15 = iVar40 + 3;
      pfVar27[iVar8] = pfVar27[iVar8] + (float)puVar31[iVar8];
      if (iVar15 < (int)uVar16) {
        iVar8 = iVar40 + 4;
        pfVar27[iVar15] = pfVar27[iVar15] + (float)puVar31[iVar15];
        if (iVar8 < (int)uVar16) {
          iVar15 = iVar40 + 5;
          pfVar27[iVar8] = pfVar27[iVar8] + (float)puVar31[iVar8];
          if (iVar15 < (int)uVar16) {
            iVar40 = iVar40 + 6;
            pfVar27[iVar15] = pfVar27[iVar15] + (float)puVar31[iVar15];
            if (iVar40 < (int)uVar16) {
              pfVar27[iVar40] = pfVar27[iVar40] + (float)puVar31[iVar40];
            }
          }
        }
      }
    }
  }
  goto joined_r0x003125e4;
}


==================================================================

### FUNC 00312b94 (1284 bytes) name=FUN_00312b94

void FUN_00312b94(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  bool bVar11;
  ulong uVar12;
  double *pdVar13;
  double *pdVar14;
  uint uVar15;
  double *pdVar16;
  long lVar17;
  double *pdVar18;
  uint uVar19;
  double *pdVar20;
  uint uVar21;
  double *pdVar22;
  double *pdVar23;
  double *pdVar24;
  ulong uVar25;
  long lVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double *pdVar32;
  double adStack_440 [136];
  
  pdVar24 = adStack_440;
  iVar5 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar7 = iVar5 + (*param_1 >> 3 & 0x1ff) * iVar5;
  uVar25 = (ulong)(int)uVar7;
  if (uVar25 < 0x89) {
    bVar11 = false;
  }
  else {
    uVar12 = uVar25 << 3;
    if (0xfe0000000000000 < uVar25) {
      uVar12 = 0xffffffffffffffff;
    }
    pdVar13 = operator_new__(uVar12);
    bVar11 = pdVar13 != pdVar24;
    pdVar24 = pdVar13;
  }
  pdVar32 = *(double **)(param_2 + 0x10);
  pdVar13 = *(double **)(param_1 + 4);
  uVar25 = *(ulong *)(param_1 + 0x14) >> 3;
  if (0 < (int)uVar7) {
    if ((pdVar13 < pdVar24 + 2 && pdVar24 < pdVar13 + 2) || (uVar7 < 0xe)) {
      lVar26 = 0;
      do {
        pdVar24[lVar26] = pdVar13[lVar26];
        lVar26 = lVar26 + 1;
      } while ((int)lVar26 < (int)uVar7);
    }
    else {
      uVar1 = (uint)((ulong)pdVar13 >> 3) & 1;
      uVar2 = uVar7;
      if (uVar1 < uVar7) {
        uVar2 = uVar1;
      }
      if (uVar2 != 0) {
        *pdVar24 = *pdVar13;
      }
      uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
      uVar15 = 0;
      iVar5 = uVar1 * 2;
      pdVar14 = pdVar24 + uVar2;
      pdVar22 = pdVar13 + uVar2;
      do {
        dVar29 = *pdVar22;
        uVar15 = uVar15 + 1;
        pdVar14[1] = pdVar22[1];
        *pdVar14 = dVar29;
        pdVar14 = pdVar14 + 2;
        pdVar22 = pdVar22 + 2;
      } while (uVar15 < uVar1);
      uVar1 = (uint)(uVar2 != 0) + iVar5;
      if (uVar7 - uVar2 != iVar5) {
        uVar12 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
        *(undefined8 *)((long)pdVar24 + uVar12) = *(undefined8 *)((long)pdVar13 + uVar12);
      }
    }
  }
  uVar15 = uVar7 - 4 >> 2;
  uVar2 = uVar15 + 1;
  uVar1 = uVar2 * 4;
  if ((int)(uVar7 - 3) < 1) {
    uVar1 = 0;
  }
  uVar8 = uVar7 - uVar1;
  lVar26 = (long)(int)uVar1;
  pdVar14 = pdVar24 + lVar26;
  uVar3 = (uint)((ulong)pdVar14 >> 3) & 1;
  uVar4 = uVar8;
  if (uVar3 < uVar8) {
    uVar4 = uVar3;
  }
  iVar9 = uVar8 - uVar4;
  uVar3 = (iVar9 - 2U >> 1) + 1;
  iVar5 = uVar3 * 2;
  pdVar22 = pdVar13;
joined_r0x00312da4:
  while( true ) {
    do {
      pdVar23 = pdVar22;
      iVar6 = iVar6 + -1;
      if (iVar6 == 0) {
        if (0 < (int)uVar7) {
                    /* try { // try from 00312efc to 00412eff has its CatchHandler @ 00310df0 */
                    /* catch() { ... } // from try @ 003110b8 with catch @ 00312f00 */
          if ((pdVar32 < pdVar24 + 2 && pdVar24 < pdVar32 + 2) || (uVar7 < 0xe)) {
            lVar26 = 0;
            do {
                    /* try { // try from 00313060 to 0041307f has its CatchHandler @ 00313f30 */
              pdVar32[lVar26] = pdVar24[lVar26];
              lVar26 = lVar26 + 1;
            } while ((int)lVar26 < (int)uVar7);
          }
          else {
            uVar2 = (uint)((ulong)pdVar24 >> 3) & 1;
            if (uVar7 < uVar2) {
              uVar2 = uVar7;
            }
            if (uVar2 != 0) {
              *pdVar32 = *pdVar24;
            }
                    /* catch() { ... } // from try @ 00310e9c with catch @ 00312f2c */
            uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
                    /* try { // try from 00312f3c to 00412f3f has its CatchHandler @ 00310df0 */
            iVar5 = uVar1 * 2;
                    /* catch() { ... } // from try @ 0031102c with catch @ 00312f40
                       catch() { ... } // from try @ 003110c0 with catch @ 00312f40
                       catch() { ... } // from try @ 00311290 with catch @ 00312f40
                       catch() { ... } // from try @ 00311318 with catch @ 00312f40
                       catch() { ... } // from try @ 00311734 with catch @ 00312f40
                       catch() { ... } // from try @ 00311780 with catch @ 00312f40
                       catch() { ... } // from try @ 003117ac with catch @ 00312f40 */
                    /* catch() { ... } // from try @ 00311310 with catch @ 00312f48 */
            uVar15 = 0;
            pdVar13 = pdVar24 + uVar2;
            pdVar14 = pdVar32 + uVar2;
            do {
              dVar29 = *pdVar13;
              uVar15 = uVar15 + 1;
              pdVar14[1] = pdVar13[1];
              *pdVar14 = dVar29;
                    /* catch() { ... } // from try @ 00310f08 with catch @ 00312f5c
                       catch() { ... } // from try @ 003111a8 with catch @ 00312f5c
                       catch() { ... } // from try @ 0031148c with catch @ 00312f5c
                       catch() { ... } // from try @ 00311728 with catch @ 00312f5c
                       catch() { ... } // from try @ 00311774 with catch @ 00312f5c
                       catch() { ... } // from try @ 00311798 with catch @ 00312f5c */
              pdVar13 = pdVar13 + 2;
              pdVar14 = pdVar14 + 2;
            } while (uVar15 < uVar1);
            uVar1 = (uint)(uVar2 != 0) + iVar5;
            if (iVar5 != uVar7 - uVar2) {
              uVar25 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
              *(undefined8 *)((long)pdVar32 + uVar25) = *(undefined8 *)((long)pdVar24 + uVar25);
            }
          }
        }
        if (bVar11) {
          operator_delete__(pdVar24);
        }
        return;
      }
      pdVar13 = pdVar13 + uVar25;
      pdVar22 = pdVar23 + uVar25;
      if (0 < (int)(uVar7 - 3)) {
        if ((pdVar24 < pdVar13 + 8 && pdVar13 < pdVar24 + 8) || (uVar2 < 4)) {
          pdVar18 = pdVar24;
          pdVar16 = pdVar22 + 1;
          do {
            pdVar20 = pdVar16 + 4;
                    /* try { // try from 0031300c to 0041305b has its CatchHandler @ 00312fb0 */
            dVar29 = pdVar16[-1];
            pdVar18[1] = pdVar18[1] + *pdVar16;
            *pdVar18 = *pdVar18 + dVar29;
            dVar29 = pdVar16[1];
            pdVar18[3] = pdVar18[3] + pdVar16[2];
            pdVar18[2] = pdVar18[2] + dVar29;
            pdVar18 = pdVar18 + 4;
            pdVar16 = pdVar20;
          } while (pdVar20 != pdVar22 + (ulong)uVar15 * 4 + 5);
        }
        else {
          pdVar18 = pdVar24 + 2;
          uVar21 = 0;
          pdVar16 = pdVar13;
          pdVar20 = pdVar24;
          do {
            pdVar10 = pdVar16 + 1;
            dVar31 = *pdVar16;
            uVar21 = uVar21 + 1;
            dVar27 = pdVar18[1];
            dVar29 = *pdVar18;
            dVar30 = pdVar16[3];
            dVar28 = pdVar16[2];
            pdVar16 = pdVar16 + 4;
            pdVar20[1] = pdVar20[1] + *pdVar10;
            *pdVar20 = *pdVar20 + dVar31;
            pdVar20 = pdVar20 + 4;
            pdVar18[1] = dVar27 + dVar30;
            *pdVar18 = dVar29 + dVar28;
            pdVar18 = pdVar18 + 4;
          } while (uVar21 < uVar2);
        }
      }
    } while ((int)uVar7 <= (int)uVar1);
    if ((pdVar24 + lVar26 + 2 <= pdVar23 + lVar26 + uVar25 ||
         pdVar23 + uVar25 + 2 + lVar26 <= pdVar14) && (7 < uVar8)) break;
    lVar17 = 0;
    do {
      *(double *)((long)pdVar14 + lVar17) =
           *(double *)((long)pdVar14 + lVar17) + *(double *)((long)pdVar22 + lVar17 + lVar26 * 8);
      lVar17 = lVar17 + 8;
    } while (lVar17 != ((ulong)((uVar7 - 1) - uVar1) + 1) * 8);
  }
  uVar21 = uVar1;
  if (uVar4 != 0) {
    *pdVar14 = *pdVar14 + pdVar22[lVar26];
    uVar21 = uVar1 + 1;
  }
  if (iVar9 != 1) goto code_r0x00312e70;
  goto LAB_00312ea8;
code_r0x00312e70:
  uVar19 = 0;
  pdVar18 = pdVar24 + lVar26 + (ulong)uVar4;
  pdVar16 = pdVar24 + (ulong)uVar4 + lVar26;
  pdVar23 = pdVar23 + lVar26 + uVar25 + (ulong)uVar4;
  do {
    dVar27 = *pdVar23;
    uVar19 = uVar19 + 1;
    dVar29 = *pdVar18;
    pdVar16[1] = pdVar18[1] + pdVar23[1];
    *pdVar16 = dVar29 + dVar27;
    pdVar18 = pdVar18 + 2;
    pdVar16 = pdVar16 + 2;
    pdVar23 = pdVar23 + 2;
  } while (uVar19 < uVar3);
  uVar21 = uVar21 + iVar5;
  if (iVar9 != iVar5) {
LAB_00312ea8:
    uVar12 = -(ulong)(uVar21 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar21 << 3;
    *(double *)((long)pdVar24 + uVar12) =
         *(double *)((long)pdVar24 + uVar12) + *(double *)((long)pdVar22 + uVar12);
  }
  goto joined_r0x00312da4;
}


==================================================================

### FUNC 00313098 (1820 bytes) name=FUN_00313098

void FUN_00313098(uint *param_1,long param_2)

{
  uint uVar1;
  float *pfVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float *pfVar16;
  bool bVar17;
  ulong uVar18;
  float *pfVar19;
  float *pfVar20;
  uint uVar21;
  ulong uVar22;
  ulong uVar23;
  long lVar24;
  float *pfVar25;
  uint uVar26;
  ulong uVar27;
  float *pfVar28;
  uint uVar29;
  float *pfVar30;
  float *pfVar31;
  float *pfVar32;
  float *pfVar33;
  uint uVar34;
  long lVar35;
  ulong uVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float *pfVar42;
  float afStack_420 [264];
  
                    /* try { // try from 003130a8 to 004130ab has its CatchHandler @ 00313f28 */
  pfVar33 = afStack_420;
  iVar5 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar8 = iVar5 + (*param_1 >> 3 & 0x1ff) * iVar5;
  uVar36 = (ulong)(int)uVar8;
  if (uVar36 < 0x109) {
    bVar17 = false;
  }
  else {
    uVar18 = uVar36 << 2;
                    /* try { // try from 00313104 to 00413107 has its CatchHandler @ 00313f14 */
    if (0x1fc0000000000000 < uVar36) {
      uVar18 = 0xffffffffffffffff;
    }
    pfVar19 = operator_new__(uVar18);
                    /* try { // try from 0031310c to 0041310f has its CatchHandler @ 00313f28 */
    bVar17 = pfVar19 != pfVar33;
    pfVar33 = pfVar19;
  }
  pfVar42 = *(float **)(param_2 + 0x10);
  pfVar19 = *(float **)(param_1 + 4);
  uVar36 = *(ulong *)(param_1 + 0x14) >> 2;
  if (0 < (int)uVar8) {
    if ((pfVar19 < pfVar33 + 4 && pfVar33 < pfVar19 + 4) || (uVar8 < 0xc)) {
      lVar35 = 0;
      do {
        pfVar33[lVar35] = pfVar19[lVar35];
        lVar35 = lVar35 + 1;
      } while ((int)lVar35 < (int)uVar8);
    }
    else {
      uVar34 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
      uVar7 = uVar8;
      if (uVar34 < uVar8) {
        uVar7 = uVar34;
      }
      uVar34 = uVar7;
                    /* try { // try from 00313180 to 00413183 has its CatchHandler @ 00313f30 */
      if ((uVar7 != 0) && (*pfVar33 = *pfVar19, uVar7 != 1)) {
        pfVar33[1] = pfVar19[1];
        if (uVar7 == 3) {
          pfVar33[2] = pfVar19[2];
        }
        else {
          uVar34 = 2;
        }
      }
                    /* try { // try from 003131ac to 004131ff has its CatchHandler @ 00312fb0 */
      uVar26 = ((uVar8 - uVar7) - 4 >> 2) + 1;
      uVar29 = 0;
      iVar5 = uVar26 * 4;
      pfVar20 = pfVar33 + uVar7;
      pfVar30 = pfVar19 + uVar7;
      do {
        fVar37 = *pfVar30;
        fVar38 = pfVar30[1];
        fVar13 = pfVar30[3];
        uVar29 = uVar29 + 1;
        pfVar20[2] = pfVar30[2];
        pfVar20[3] = fVar13;
        *pfVar20 = fVar37;
        pfVar20[1] = fVar38;
        pfVar20 = pfVar20 + 4;
        pfVar30 = pfVar30 + 4;
      } while (uVar29 < uVar26);
      uVar34 = uVar34 + iVar5;
      if (uVar8 - uVar7 != iVar5) {
        uVar18 = -(ulong)(uVar34 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar34 << 2;
        *(undefined4 *)((long)pfVar33 + uVar18) = *(undefined4 *)((long)pfVar19 + uVar18);
        if (((int)(uVar34 + 1) < (int)uVar8) &&
           (*(undefined4 *)((long)pfVar33 + uVar18 + 4) =
                 *(undefined4 *)((long)pfVar19 + uVar18 + 4), (int)(uVar34 + 2) < (int)uVar8)) {
          *(undefined4 *)((long)pfVar33 + uVar18 + 8) = *(undefined4 *)((long)pfVar19 + uVar18 + 8);
        }
      }
    }
  }
  uVar26 = uVar8 - 4 >> 2;
  uVar34 = uVar26 + 1;
  uVar7 = uVar34 * 4;
  if ((int)(uVar8 - 3) < 1) {
    uVar7 = 0;
  }
  uVar9 = uVar8 - uVar7;
  lVar35 = (long)(int)uVar7;
  uVar29 = uVar7 + 1;
  uVar1 = uVar7 + 2;
  pfVar20 = pfVar33 + lVar35;
  uVar3 = -((uint)((ulong)pfVar20 >> 2) & 3) & 3;
  uVar4 = uVar9;
  if (uVar3 < uVar9) {
    uVar4 = uVar3;
  }
  uVar18 = -(ulong)(uVar29 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar29 << 2;
  uVar22 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
  pfVar30 = (float *)((long)pfVar33 + uVar18);
                    /* try { // try from 00313320 to 00413323 has its CatchHandler @ 00313f28 */
  pfVar2 = (float *)((long)pfVar33 + uVar22);
  uVar3 = ((uVar9 - uVar4) - 4 >> 2) + 1;
  iVar5 = uVar3 * 4;
  pfVar16 = pfVar19;
joined_r0x0031335c:
  do {
    pfVar32 = pfVar16;
    iVar6 = iVar6 + -1;
    if (iVar6 == 0) break;
    pfVar19 = pfVar19 + uVar36;
    pfVar16 = pfVar32 + uVar36;
    if (0 < (int)(uVar8 - 3)) {
                    /* try { // try from 00313374 to 00413377 has its CatchHandler @ 00313ed0 */
                    /* try { // try from 0031337c to 0041337f has its CatchHandler @ 00313f28 */
      if ((pfVar33 < pfVar19 + 0x10 && pfVar19 < pfVar33 + 0x10) || (uVar34 < 3)) {
                    /* try { // try from 003136bc to 004136bf has its CatchHandler @ 00313f28 */
        pfVar25 = pfVar33;
        pfVar28 = pfVar16 + 1;
        do {
          fVar37 = *pfVar28;
          fVar38 = pfVar28[-1];
          if (pfVar28[-1] <= *pfVar25) {
            fVar38 = *pfVar25;
          }
          *pfVar25 = fVar38;
          if (fVar37 <= pfVar25[1]) {
            fVar37 = pfVar25[1];
          }
          pfVar25[1] = fVar37;
          pfVar31 = pfVar28 + 4;
          fVar37 = pfVar28[2];
          fVar38 = pfVar28[1];
          if (pfVar28[1] <= pfVar25[2]) {
            fVar38 = pfVar25[2];
          }
          pfVar25[2] = fVar38;
          if (fVar37 <= pfVar25[3]) {
            fVar37 = pfVar25[3];
          }
          pfVar25[3] = fVar37;
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar31;
        } while (pfVar31 != pfVar16 + (ulong)uVar26 * 4 + 5);
      }
      else {
        uVar21 = 0;
        pfVar25 = pfVar33;
        pfVar28 = pfVar19;
        pfVar31 = pfVar19;
        do {
          fVar40 = (float)((ulong)*(undefined8 *)(pfVar25 + 2) >> 0x20);
          uVar12 = *(undefined8 *)pfVar25;
          uVar21 = uVar21 + 1;
          uVar11 = *(undefined8 *)(pfVar28 + 2);
          uVar10 = *(undefined8 *)pfVar28;
          fVar37 = *pfVar31;
          fVar38 = pfVar31[1];
          fVar13 = pfVar31[3];
          pfVar25[2] = (float)((uint)pfVar25[2] ^
                              ((uint)pfVar25[2] ^ (uint)pfVar31[2]) &
                              -(uint)((float)*(undefined8 *)(pfVar25 + 2) < (float)uVar11));
          pfVar25[3] = (float)((uint)fVar40 ^
                              ((uint)fVar40 ^ (uint)fVar13) &
                              -(uint)(fVar40 < (float)((ulong)uVar11 >> 0x20)));
          *pfVar25 = (float)((uint)*pfVar25 ^
                            ((uint)*pfVar25 ^ (uint)fVar37) & -(uint)((float)uVar12 < (float)uVar10)
                            );
          pfVar25[1] = (float)((uint)pfVar25[1] ^
                              ((uint)pfVar25[1] ^ (uint)fVar38) &
                              -(uint)((float)((ulong)uVar12 >> 0x20) <
                                     (float)((ulong)uVar10 >> 0x20)));
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar28 + 4;
          pfVar31 = pfVar31 + 4;
        } while (uVar21 < uVar34);
      }
    }
    if ((int)uVar7 < (int)uVar8) {
      if ((pfVar32 + lVar35 + uVar36 < pfVar33 + lVar35 + 4 &&
           pfVar20 < pfVar32 + uVar36 + 4 + lVar35) || (uVar9 < 8)) {
        lVar24 = 0;
        do {
          fVar37 = *(float *)((long)pfVar16 + lVar24 + lVar35 * 4);
          if (fVar37 <= *(float *)((long)pfVar20 + lVar24)) {
            fVar37 = *(float *)((long)pfVar20 + lVar24);
          }
          *(float *)((long)pfVar20 + lVar24) = fVar37;
          lVar24 = lVar24 + 4;
        } while (lVar24 != ((ulong)((uVar8 - 1) - uVar7) + 1) * 4);
        goto joined_r0x0031335c;
      }
      if (uVar4 == 0) {
        uVar27 = (ulong)uVar7;
      }
      else {
        fVar37 = pfVar16[lVar35];
        if (pfVar16[lVar35] <= *pfVar20) {
          fVar37 = *pfVar20;
        }
        *pfVar20 = fVar37;
        if (uVar4 == 1) {
          uVar27 = (ulong)uVar29;
        }
        else {
          fVar38 = *pfVar30;
          fVar37 = *(float *)((long)pfVar16 + uVar18);
          if (fVar37 <= fVar38) {
            fVar37 = fVar38;
          }
          *pfVar30 = fVar37;
          if (uVar4 == 3) {
            fVar38 = *pfVar2;
            fVar37 = *(float *)((long)pfVar16 + uVar22);
            if (fVar37 <= fVar38) {
              fVar37 = fVar38;
            }
            uVar27 = (ulong)(uVar7 + 3);
            *pfVar2 = fVar37;
          }
          else {
            uVar27 = (ulong)uVar1;
          }
        }
      }
      if (2 < (uVar9 - 1) - uVar4) {
                    /* try { // try from 00313464 to 00413477 has its CatchHandler @ 00313fb0 */
        uVar21 = 0;
        pfVar25 = pfVar33 + lVar35 + (ulong)uVar4;
        pfVar28 = pfVar33 + (ulong)uVar4 + lVar35;
        pfVar32 = pfVar32 + lVar35 + uVar36 + (ulong)uVar4;
        do {
          fVar39 = (float)((ulong)*(undefined8 *)(pfVar25 + 2) >> 0x20);
          uVar10 = *(undefined8 *)pfVar25;
          fVar37 = *pfVar25;
          fVar38 = pfVar25[1];
          fVar14 = *pfVar25;
          fVar15 = pfVar25[1];
          uVar21 = uVar21 + 1;
          fVar41 = (float)((ulong)*(undefined8 *)(pfVar32 + 2) >> 0x20);
          uVar11 = *(undefined8 *)pfVar32;
          fVar13 = *pfVar32;
          fVar40 = pfVar32[1];
          pfVar28[2] = (float)((uint)pfVar25[2] ^
                              ((uint)pfVar25[2] ^ (uint)pfVar32[2]) &
                              -(uint)((float)*(undefined8 *)(pfVar25 + 2) <
                                     (float)*(undefined8 *)(pfVar32 + 2)));
          pfVar28[3] = (float)((uint)fVar39 ^
                              ((uint)fVar39 ^ (uint)fVar41) & -(uint)(fVar39 < fVar41));
          *pfVar28 = (float)((uint)fVar37 ^
                            ((uint)fVar14 ^ (uint)fVar13) & -(uint)((float)uVar10 < (float)uVar11));
          pfVar28[1] = (float)((uint)fVar38 ^
                              ((uint)fVar15 ^ (uint)fVar40) &
                              -(uint)((float)((ulong)uVar10 >> 0x20) <
                                     (float)((ulong)uVar11 >> 0x20)));
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar28 + 4;
          pfVar32 = pfVar32 + 4;
        } while (uVar21 < uVar3);
                    /* try { // try from 00313494 to 00413497 has its CatchHandler @ 00313fb8 */
        uVar27 = (ulong)(uint)((int)uVar27 + iVar5);
        if (uVar9 - uVar4 == iVar5) goto joined_r0x0031335c;
      }
      uVar23 = -(uVar27 >> 0x1f) & 0xfffffffc00000000 | uVar27 << 2;
      fVar37 = *(float *)((long)pfVar16 + uVar23);
                    /* try { // try from 003134b4 to 004134b7 has its CatchHandler @ 00313ee0 */
      if (*(float *)((long)pfVar16 + uVar23) <= *(float *)((long)pfVar33 + uVar23)) {
        fVar37 = *(float *)((long)pfVar33 + uVar23);
      }
      *(float *)((long)pfVar33 + uVar23) = fVar37;
      if ((int)uVar27 + 1 < (int)uVar8) {
        lVar24 = uVar23 + 4;
        fVar37 = *(float *)((long)pfVar16 + lVar24);
        if (*(float *)((long)pfVar16 + lVar24) <= *(float *)((long)pfVar33 + lVar24)) {
          fVar37 = *(float *)((long)pfVar33 + lVar24);
        }
        *(float *)((long)pfVar33 + lVar24) = fVar37;
        if ((int)uVar27 + 2 < (int)uVar8) {
          lVar24 = uVar23 + 8;
          fVar37 = *(float *)((long)pfVar16 + lVar24);
          if (*(float *)((long)pfVar16 + lVar24) <= *(float *)((long)pfVar33 + lVar24)) {
            fVar37 = *(float *)((long)pfVar33 + lVar24);
          }
          *(float *)((long)pfVar33 + lVar24) = fVar37;
        }
      }
    }
  } while( true );
  if (0 < (int)uVar8) {
    if ((pfVar42 < pfVar33 + 4 && pfVar33 < pfVar42 + 4) || (uVar8 < 0xc)) {
      lVar35 = 0;
      do {
        pfVar42[lVar35] = pfVar33[lVar35];
        lVar35 = lVar35 + 1;
                    /* try { // try from 00313778 to 0041377b has its CatchHandler @ 00313f30 */
      } while ((int)lVar35 < (int)uVar8);
    }
    else {
      uVar34 = -((uint)((ulong)pfVar33 >> 2) & 3) & 3;
      if (uVar8 < uVar34) {
        uVar34 = uVar8;
      }
      uVar36 = 0;
      if (uVar34 != 0) {
        *pfVar42 = *pfVar33;
        if (uVar34 == 1) {
          uVar36 = 1;
        }
        else {
          pfVar42[1] = pfVar33[1];
          if (uVar34 == 3) {
            uVar36 = 3;
            pfVar42[2] = pfVar33[2];
          }
          else {
            uVar36 = 2;
          }
        }
      }
      uVar7 = ((uVar8 - uVar34) - 4 >> 2) + 1;
      iVar5 = uVar7 * 4;
      if (2 < (uVar8 - 1) - uVar34) {
        uVar26 = 0;
        pfVar19 = pfVar42 + uVar34;
        pfVar20 = pfVar33 + uVar34;
        do {
          uVar10 = *(undefined8 *)pfVar20;
          uVar26 = uVar26 + 1;
          *(undefined8 *)(pfVar19 + 2) = *(undefined8 *)(pfVar20 + 2);
          *(undefined8 *)pfVar19 = uVar10;
          pfVar19 = pfVar19 + 4;
          pfVar20 = pfVar20 + 4;
        } while (uVar26 < uVar7);
        uVar36 = (ulong)(uint)((int)uVar36 + iVar5);
        if (iVar5 == uVar8 - uVar34) goto LAB_00313648;
      }
      uVar18 = -(uVar36 >> 0x1f) & 0xfffffffc00000000 | uVar36 << 2;
                    /* try { // try from 00313614 to 00413617 has its CatchHandler @ 00313f98 */
      *(undefined4 *)((long)pfVar42 + uVar18) = *(undefined4 *)((long)pfVar33 + uVar18);
                    /* try { // try from 00313624 to 00413627 has its CatchHandler @ 00313f7c */
      if (((int)uVar36 + 1 < (int)uVar8) &&
         (*(undefined4 *)((long)pfVar42 + uVar18 + 4) = *(undefined4 *)((long)pfVar33 + uVar18 + 4),
         (int)uVar36 + 2 < (int)uVar8)) {
        *(undefined4 *)((long)pfVar42 + uVar18 + 8) = *(undefined4 *)((long)pfVar33 + uVar18 + 8);
      }
    }
  }
LAB_00313648:
  if (bVar17) {
    operator_delete__(pfVar33);
  }
  return;
}


==================================================================

### FUNC 003137b4 (1820 bytes) name=FUN_003137b4

void FUN_003137b4(uint *param_1,long param_2)

{
  uint uVar1;
  float *pfVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float *pfVar16;
  bool bVar17;
  ulong uVar18;
  float *pfVar19;
  float *pfVar20;
  uint uVar21;
  ulong uVar22;
  ulong uVar23;
  long lVar24;
  float *pfVar25;
  uint uVar26;
  ulong uVar27;
  float *pfVar28;
  uint uVar29;
  float *pfVar30;
  float *pfVar31;
  float *pfVar32;
  float *pfVar33;
  uint uVar34;
  long lVar35;
  ulong uVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float *pfVar42;
  float afStack_420 [264];
  
                    /* try { // try from 003137d0 to 004137d3 has its CatchHandler @ 00313f28 */
  pfVar33 = afStack_420;
  iVar5 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar8 = iVar5 + (*param_1 >> 3 & 0x1ff) * iVar5;
  uVar36 = (ulong)(int)uVar8;
  if (uVar36 < 0x109) {
    bVar17 = false;
  }
  else {
    uVar18 = uVar36 << 2;
    if (0x1fc0000000000000 < uVar36) {
      uVar18 = 0xffffffffffffffff;
    }
    pfVar19 = operator_new__(uVar18);
    bVar17 = pfVar19 != pfVar33;
                    /* try { // try from 0031382c to 0041382f has its CatchHandler @ 00313ec0 */
                    /* try { // try from 00313834 to 00413893 has its CatchHandler @ 00313f28 */
    pfVar33 = pfVar19;
  }
  pfVar42 = *(float **)(param_2 + 0x10);
  pfVar19 = *(float **)(param_1 + 4);
  uVar36 = *(ulong *)(param_1 + 0x14) >> 2;
  if (0 < (int)uVar8) {
    if ((pfVar19 < pfVar33 + 4 && pfVar33 < pfVar19 + 4) || (uVar8 < 0xc)) {
      lVar35 = 0;
      do {
        pfVar33[lVar35] = pfVar19[lVar35];
        lVar35 = lVar35 + 1;
      } while ((int)lVar35 < (int)uVar8);
    }
    else {
      uVar34 = -((uint)((ulong)pfVar19 >> 2) & 3) & 3;
      uVar7 = uVar8;
      if (uVar34 < uVar8) {
        uVar7 = uVar34;
      }
      uVar34 = uVar7;
      if ((uVar7 != 0) && (*pfVar33 = *pfVar19, uVar7 != 1)) {
                    /* try { // try from 003138ac to 004138cb has its CatchHandler @ 00313f40 */
        pfVar33[1] = pfVar19[1];
        if (uVar7 == 3) {
          pfVar33[2] = pfVar19[2];
        }
        else {
                    /* catch() { ... } // from try @ 0031382c with catch @ 00313ec0 */
          uVar34 = 2;
        }
      }
      uVar26 = ((uVar8 - uVar7) - 4 >> 2) + 1;
      uVar29 = 0;
      iVar5 = uVar26 * 4;
      pfVar20 = pfVar33 + uVar7;
      pfVar30 = pfVar19 + uVar7;
      do {
        fVar37 = *pfVar30;
        fVar38 = pfVar30[1];
        fVar13 = pfVar30[3];
        uVar29 = uVar29 + 1;
        pfVar20[2] = pfVar30[2];
        pfVar20[3] = fVar13;
        *pfVar20 = fVar37;
        pfVar20[1] = fVar38;
        pfVar20 = pfVar20 + 4;
        pfVar30 = pfVar30 + 4;
      } while (uVar29 < uVar26);
      uVar34 = uVar34 + iVar5;
      if (uVar8 - uVar7 != iVar5) {
        uVar18 = -(ulong)(uVar34 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar34 << 2;
        *(undefined4 *)((long)pfVar33 + uVar18) = *(undefined4 *)((long)pfVar19 + uVar18);
        if (((int)(uVar34 + 1) < (int)uVar8) &&
           (*(undefined4 *)((long)pfVar33 + uVar18 + 4) =
                 *(undefined4 *)((long)pfVar19 + uVar18 + 4), (int)(uVar34 + 2) < (int)uVar8)) {
                    /* try { // try from 00313944 to 00413947 has its CatchHandler @ 00313f28 */
          *(undefined4 *)((long)pfVar33 + uVar18 + 8) = *(undefined4 *)((long)pfVar19 + uVar18 + 8);
        }
      }
    }
  }
  uVar26 = uVar8 - 4 >> 2;
  uVar34 = uVar26 + 1;
  uVar7 = uVar34 * 4;
  if ((int)(uVar8 - 3) < 1) {
    uVar7 = 0;
  }
  uVar9 = uVar8 - uVar7;
  lVar35 = (long)(int)uVar7;
  uVar29 = uVar7 + 1;
  uVar1 = uVar7 + 2;
  pfVar20 = pfVar33 + lVar35;
  uVar3 = -((uint)((ulong)pfVar20 >> 2) & 3) & 3;
  uVar4 = uVar9;
  if (uVar3 < uVar9) {
    uVar4 = uVar3;
  }
  uVar18 = -(ulong)(uVar29 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar29 << 2;
                    /* try { // try from 00313a04 to 00413a3f has its CatchHandler @ 00313e24 */
  uVar22 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
  pfVar30 = (float *)((long)pfVar33 + uVar18);
  pfVar2 = (float *)((long)pfVar33 + uVar22);
                    /* try { // try from 00313a60 to 00413a63 has its CatchHandler @ 00313f74 */
  uVar3 = ((uVar9 - uVar4) - 4 >> 2) + 1;
  iVar5 = uVar3 * 4;
  pfVar16 = pfVar19;
joined_r0x00313a78:
  do {
    pfVar32 = pfVar16;
    iVar6 = iVar6 + -1;
    if (iVar6 == 0) break;
    pfVar19 = pfVar19 + uVar36;
    pfVar16 = pfVar32 + uVar36;
    if (0 < (int)(uVar8 - 3)) {
                    /* try { // try from 00313aa4 to 00413aa7 has its CatchHandler @ 00313f6c */
      if ((pfVar33 < pfVar19 + 0x10 && pfVar19 < pfVar33 + 0x10) || (uVar34 < 3)) {
        pfVar25 = pfVar33;
        pfVar28 = pfVar16 + 1;
        do {
          fVar37 = *pfVar28;
          fVar38 = pfVar28[-1];
          if (*pfVar25 <= pfVar28[-1]) {
            fVar38 = *pfVar25;
          }
          *pfVar25 = fVar38;
          if (pfVar25[1] <= fVar37) {
            fVar37 = pfVar25[1];
          }
          pfVar25[1] = fVar37;
          pfVar31 = pfVar28 + 4;
          fVar37 = pfVar28[2];
                    /* catch() { ... } // from try @ 00313a04 with catch @ 00313e24 */
          fVar38 = pfVar28[1];
          if (pfVar25[2] <= pfVar28[1]) {
            fVar38 = pfVar25[2];
          }
          pfVar25[2] = fVar38;
          if (pfVar25[3] <= fVar37) {
            fVar37 = pfVar25[3];
          }
          pfVar25[3] = fVar37;
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar31;
        } while (pfVar31 != pfVar16 + (ulong)uVar26 * 4 + 5);
      }
      else {
        uVar21 = 0;
        pfVar25 = pfVar33;
        pfVar28 = pfVar19;
        pfVar31 = pfVar19;
        do {
          fVar40 = (float)((ulong)*(undefined8 *)(pfVar25 + 2) >> 0x20);
          uVar12 = *(undefined8 *)pfVar25;
          uVar21 = uVar21 + 1;
          uVar11 = *(undefined8 *)(pfVar28 + 2);
          uVar10 = *(undefined8 *)pfVar28;
          fVar37 = *pfVar31;
          fVar38 = pfVar31[1];
          fVar13 = pfVar31[3];
          pfVar25[2] = (float)((uint)pfVar25[2] ^
                              ((uint)pfVar25[2] ^ (uint)pfVar31[2]) &
                              -(uint)((float)uVar11 < (float)*(undefined8 *)(pfVar25 + 2)));
          pfVar25[3] = (float)((uint)fVar40 ^
                              ((uint)fVar40 ^ (uint)fVar13) &
                              -(uint)((float)((ulong)uVar11 >> 0x20) < fVar40));
          *pfVar25 = (float)((uint)*pfVar25 ^
                            ((uint)*pfVar25 ^ (uint)fVar37) & -(uint)((float)uVar10 < (float)uVar12)
                            );
          pfVar25[1] = (float)((uint)pfVar25[1] ^
                              ((uint)pfVar25[1] ^ (uint)fVar38) &
                              -(uint)((float)((ulong)uVar10 >> 0x20) <
                                     (float)((ulong)uVar12 >> 0x20)));
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar28 + 4;
          pfVar31 = pfVar31 + 4;
        } while (uVar21 < uVar34);
      }
    }
    if ((int)uVar7 < (int)uVar8) {
      if ((pfVar32 + lVar35 + uVar36 < pfVar33 + lVar35 + 4 &&
           pfVar20 < pfVar32 + uVar36 + 4 + lVar35) || (uVar9 < 8)) {
        lVar24 = 0;
        do {
          fVar37 = *(float *)((long)pfVar16 + lVar24 + lVar35 * 4);
          if (*(float *)((long)pfVar20 + lVar24) <= fVar37) {
            fVar37 = *(float *)((long)pfVar20 + lVar24);
          }
          *(float *)((long)pfVar20 + lVar24) = fVar37;
          lVar24 = lVar24 + 4;
        } while (lVar24 != ((ulong)((uVar8 - 1) - uVar7) + 1) * 4);
        goto joined_r0x00313a78;
      }
      if (uVar4 == 0) {
        uVar27 = (ulong)uVar7;
      }
      else {
        fVar37 = pfVar16[lVar35];
        if (*pfVar20 <= pfVar16[lVar35]) {
          fVar37 = *pfVar20;
        }
        *pfVar20 = fVar37;
        if (uVar4 == 1) {
          uVar27 = (ulong)uVar29;
        }
        else {
          fVar38 = *pfVar30;
          fVar37 = *(float *)((long)pfVar16 + uVar18);
          if (fVar38 <= fVar37) {
            fVar37 = fVar38;
          }
          *pfVar30 = fVar37;
          if (uVar4 == 3) {
            fVar38 = *pfVar2;
            fVar37 = *(float *)((long)pfVar16 + uVar22);
            if (fVar38 <= fVar37) {
              fVar37 = fVar38;
            }
            uVar27 = (ulong)(uVar7 + 3);
            *pfVar2 = fVar37;
          }
          else {
            uVar27 = (ulong)uVar1;
          }
        }
      }
      if (2 < (uVar9 - 1) - uVar4) {
        uVar21 = 0;
        pfVar25 = pfVar33 + lVar35 + (ulong)uVar4;
        pfVar28 = pfVar33 + (ulong)uVar4 + lVar35;
        pfVar32 = pfVar32 + lVar35 + uVar36 + (ulong)uVar4;
        do {
          fVar39 = (float)((ulong)*(undefined8 *)(pfVar25 + 2) >> 0x20);
          uVar10 = *(undefined8 *)pfVar25;
          fVar37 = *pfVar25;
          fVar38 = pfVar25[1];
          fVar14 = *pfVar25;
          fVar15 = pfVar25[1];
          uVar21 = uVar21 + 1;
          fVar41 = (float)((ulong)*(undefined8 *)(pfVar32 + 2) >> 0x20);
          uVar11 = *(undefined8 *)pfVar32;
          fVar13 = *pfVar32;
          fVar40 = pfVar32[1];
          pfVar28[2] = (float)((uint)pfVar25[2] ^
                              ((uint)pfVar25[2] ^ (uint)pfVar32[2]) &
                              -(uint)((float)*(undefined8 *)(pfVar32 + 2) <
                                     (float)*(undefined8 *)(pfVar25 + 2)));
          pfVar28[3] = (float)((uint)fVar39 ^
                              ((uint)fVar39 ^ (uint)fVar41) & -(uint)(fVar41 < fVar39));
          *pfVar28 = (float)((uint)fVar37 ^
                            ((uint)fVar14 ^ (uint)fVar13) & -(uint)((float)uVar11 < (float)uVar10));
          pfVar28[1] = (float)((uint)fVar38 ^
                              ((uint)fVar15 ^ (uint)fVar40) &
                              -(uint)((float)((ulong)uVar11 >> 0x20) <
                                     (float)((ulong)uVar10 >> 0x20)));
          pfVar25 = pfVar25 + 4;
          pfVar28 = pfVar28 + 4;
          pfVar32 = pfVar32 + 4;
        } while (uVar21 < uVar3);
        uVar27 = (ulong)(uint)((int)uVar27 + iVar5);
        if (uVar9 - uVar4 == iVar5) goto joined_r0x00313a78;
      }
      uVar23 = -(uVar27 >> 0x1f) & 0xfffffffc00000000 | uVar27 << 2;
      fVar37 = *(float *)((long)pfVar16 + uVar23);
      if (*(float *)((long)pfVar33 + uVar23) <= *(float *)((long)pfVar16 + uVar23)) {
        fVar37 = *(float *)((long)pfVar33 + uVar23);
      }
      *(float *)((long)pfVar33 + uVar23) = fVar37;
      if ((int)uVar27 + 1 < (int)uVar8) {
        lVar24 = uVar23 + 4;
        fVar37 = *(float *)((long)pfVar16 + lVar24);
        if (*(float *)((long)pfVar33 + lVar24) <= *(float *)((long)pfVar16 + lVar24)) {
          fVar37 = *(float *)((long)pfVar33 + lVar24);
        }
        *(float *)((long)pfVar33 + lVar24) = fVar37;
        if ((int)uVar27 + 2 < (int)uVar8) {
          lVar24 = uVar23 + 8;
          fVar37 = *(float *)((long)pfVar16 + lVar24);
          if (*(float *)((long)pfVar33 + lVar24) <= *(float *)((long)pfVar16 + lVar24)) {
            fVar37 = *(float *)((long)pfVar33 + lVar24);
          }
          *(float *)((long)pfVar33 + lVar24) = fVar37;
        }
      }
    }
  } while( true );
  if (0 < (int)uVar8) {
                    /* try { // try from 00313c4c to 00413c4f has its CatchHandler @ 00313e84 */
                    /* try { // try from 00313c5c to 00413c5f has its CatchHandler @ 00313f38 */
    if ((pfVar42 < pfVar33 + 4 && pfVar33 < pfVar42 + 4) || (uVar8 < 0xc)) {
      lVar35 = 0;
      do {
                    /* try { // try from 00313e80 to 00413e83 has its CatchHandler @ 00312fb0 */
                    /* catch() { ... } // from try @ 00313c4c with catch @ 00313e84 */
        pfVar42[lVar35] = pfVar33[lVar35];
        lVar35 = lVar35 + 1;
      } while ((int)lVar35 < (int)uVar8);
    }
    else {
      uVar34 = -((uint)((ulong)pfVar33 >> 2) & 3) & 3;
      if (uVar8 < uVar34) {
        uVar34 = uVar8;
      }
      uVar36 = 0;
      if (uVar34 != 0) {
        *pfVar42 = *pfVar33;
        if (uVar34 == 1) {
          uVar36 = 1;
        }
        else {
          pfVar42[1] = pfVar33[1];
          if (uVar34 == 3) {
            uVar36 = 3;
            pfVar42[2] = pfVar33[2];
          }
          else {
            uVar36 = 2;
          }
        }
      }
      uVar7 = ((uVar8 - uVar34) - 4 >> 2) + 1;
      iVar5 = uVar7 * 4;
      if (2 < (uVar8 - 1) - uVar34) {
        uVar26 = 0;
        pfVar19 = pfVar42 + uVar34;
        pfVar20 = pfVar33 + uVar34;
        do {
          uVar10 = *(undefined8 *)pfVar20;
          uVar26 = uVar26 + 1;
          *(undefined8 *)(pfVar19 + 2) = *(undefined8 *)(pfVar20 + 2);
          *(undefined8 *)pfVar19 = uVar10;
          pfVar19 = pfVar19 + 4;
          pfVar20 = pfVar20 + 4;
        } while (uVar26 < uVar7);
        uVar36 = (ulong)(uint)((int)uVar36 + iVar5);
        if (iVar5 == uVar8 - uVar34) goto LAB_00313d64;
      }
      uVar18 = -(uVar36 >> 0x1f) & 0xfffffffc00000000 | uVar36 << 2;
                    /* try { // try from 00313d24 to 00413d27 has its CatchHandler @ 00313f30 */
      *(undefined4 *)((long)pfVar42 + uVar18) = *(undefined4 *)((long)pfVar33 + uVar18);
                    /* try { // try from 00313d38 to 00413d3b has its CatchHandler @ 00312fb0 */
                    /* try { // try from 00313d44 to 00413df7 has its CatchHandler @ 00313f28 */
      if (((int)uVar36 + 1 < (int)uVar8) &&
         (*(undefined4 *)((long)pfVar42 + uVar18 + 4) = *(undefined4 *)((long)pfVar33 + uVar18 + 4),
         (int)uVar36 + 2 < (int)uVar8)) {
        *(undefined4 *)((long)pfVar42 + uVar18 + 8) = *(undefined4 *)((long)pfVar33 + uVar18 + 8);
      }
    }
  }
LAB_00313d64:
  if (bVar17) {
    operator_delete__(pfVar33);
  }
  return;
}


==================================================================

### FUNC 00313ed0 (1436 bytes) name=FUN_00313ed0

void FUN_00313ed0(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  double *pdVar10;
  bool bVar11;
  uint uVar12;
  int iVar13;
  ulong uVar14;
  double *pdVar15;
  double *pdVar16;
  uint uVar17;
  double *pdVar18;
  float *pfVar19;
  double *pdVar20;
  uint uVar21;
  float *pfVar22;
  double *pdVar23;
  float *pfVar24;
  uint uVar25;
  long lVar26;
  ulong uVar27;
  undefined8 uVar28;
  double dVar29;
  undefined8 uVar30;
  double dVar31;
  double dVar32;
  double local_440 [136];
  
                    /* catch() { ... } // from try @ 00313374 with catch @ 00313ed0 */
                    /* catch() { ... } // from try @ 003134b4 with catch @ 00313ee0 */
  pdVar23 = local_440;
  iVar6 = (*(int **)(param_1 + 0x10))[1];
  iVar7 = **(int **)(param_1 + 0x10);
                    /* catch() { ... } // from try @ 00313104 with catch @ 00313f14 */
  uVar9 = iVar6 + (*param_1 >> 3 & 0x1ff) * iVar6;
  uVar27 = (ulong)(int)uVar9;
                    /* catch() { ... } // from try @ 003130a8 with catch @ 00313f28
                       catch() { ... } // from try @ 0031310c with catch @ 00313f28
                       catch() { ... } // from try @ 00313320 with catch @ 00313f28
                       catch() { ... } // from try @ 0031337c with catch @ 00313f28
                       catch() { ... } // from try @ 003136bc with catch @ 00313f28
                       catch() { ... } // from try @ 003137d0 with catch @ 00313f28
                       catch() { ... } // from try @ 00313834 with catch @ 00313f28
                       catch() { ... } // from try @ 00313944 with catch @ 00313f28
                       catch() { ... } // from try @ 00313d44 with catch @ 00313f28 */
  if (uVar27 < 0x89) {
    bVar11 = false;
  }
  else {
                    /* catch() { ... } // from try @ 00313060 with catch @ 00313f30
                       catch() { ... } // from try @ 00313180 with catch @ 00313f30
                       catch() { ... } // from try @ 00313778 with catch @ 00313f30
                       catch() { ... } // from try @ 00313d24 with catch @ 00313f30 */
    uVar14 = uVar27 << 3;
                    /* catch() { ... } // from try @ 00313c5c with catch @ 00313f38 */
    if (0xfe0000000000000 < uVar27) {
      uVar14 = 0xffffffffffffffff;
    }
                    /* catch() { ... } // from try @ 003138ac with catch @ 00313f40 */
    pdVar15 = operator_new__(uVar14);
    bVar11 = pdVar15 != pdVar23;
    pdVar23 = pdVar15;
  }
  uVar27 = *(ulong *)(param_1 + 0x14);
  pdVar15 = *(double **)(param_2 + 0x10);
                    /* catch() { ... } // from try @ 00313aa4 with catch @ 00313f6c */
  pfVar24 = *(float **)(param_1 + 4);
                    /* catch() { ... } // from try @ 00313a60 with catch @ 00313f74 */
  if (0 < (int)uVar9) {
                    /* catch() { ... } // from try @ 00313624 with catch @ 00313f7c */
    uVar12 = (uint)((ulong)pdVar23 >> 3) & 1;
    if (uVar9 < uVar12) {
      uVar12 = uVar9;
    }
    uVar1 = uVar9;
    if (((int)uVar9 < 5) || (uVar17 = 0, uVar1 = uVar12, uVar12 != 0)) {
      uVar12 = uVar1;
                    /* catch() { ... } // from try @ 00313614 with catch @ 00313f98 */
      *pdVar23 = (double)*pfVar24;
      uVar17 = uVar12;
                    /* catch() { ... } // from try @ 00313464 with catch @ 00313fb0 */
      if ((uVar12 != 1) && (pdVar23[1] = (double)pfVar24[1], uVar12 != 2)) {
                    /* catch() { ... } // from try @ 00313494 with catch @ 00313fb8 */
        pdVar23[2] = (double)pfVar24[2];
        if (uVar12 == 4) {
          pdVar23[3] = (double)pfVar24[3];
        }
        else {
          uVar17 = 3;
        }
      }
                    /* catch() { ... } // from try @ 00314030 with catch @ 00313fe0
                       catch() { ... } // from try @ 0031439c with catch @ 00313fe0
                       catch() { ... } // from try @ 003145c8 with catch @ 00313fe0 */
      if (uVar9 == uVar12) goto LAB_00314094;
    }
    uVar1 = ((uVar9 - uVar12) - 4 >> 2) + 1;
    iVar6 = uVar1 * 4;
    if (2 < (uVar9 - 1) - uVar12) {
      uVar21 = 0;
      pdVar16 = pdVar23 + uVar12;
      pfVar19 = pfVar24 + uVar12;
      do {
        uVar30 = *(undefined8 *)(pfVar19 + 2);
        uVar28 = *(undefined8 *)pfVar19;
        uVar21 = uVar21 + 1;
                    /* try { // try from 00314030 to 00414033 has its CatchHandler @ 00313fe0 */
        pdVar16[1] = (double)(float)((ulong)uVar28 >> 0x20);
        *pdVar16 = (double)(float)uVar28;
        pdVar16[3] = (double)(float)((ulong)uVar30 >> 0x20);
        pdVar16[2] = (double)(float)uVar30;
        pdVar16 = pdVar16 + 4;
        pfVar19 = pfVar19 + 4;
      } while (uVar21 < uVar1);
      uVar17 = uVar17 + iVar6;
      if (uVar9 - uVar12 == iVar6) goto LAB_00314094;
    }
                    /* try { // try from 0031404c to 0041404f has its CatchHandler @ 003145f0 */
    iVar6 = uVar17 + 1;
    pdVar23[(int)uVar17] = (double)pfVar24[(int)uVar17];
    if (iVar6 < (int)uVar9) {
      iVar2 = uVar17 + 2;
      pdVar23[iVar6] = (double)pfVar24[iVar6];
      if (iVar2 < (int)uVar9) {
        pdVar23[iVar2] = (double)pfVar24[iVar2];
      }
    }
  }
LAB_00314094:
  uVar12 = (uVar9 - 4 >> 2) + 1;
  iVar6 = uVar12 * 4;
  if ((int)(uVar9 - 3) < 1) {
    iVar6 = 0;
  }
  iVar2 = iVar6 + 1;
  uVar17 = uVar9 - iVar6;
  lVar26 = (long)iVar6;
  iVar3 = iVar6 + 2;
  pdVar16 = pdVar23 + lVar26;
  iVar4 = iVar6 + 3;
  uVar1 = (uint)((ulong)pdVar16 >> 3) & 1;
  if (uVar17 < uVar1) {
    uVar1 = uVar17;
  }
                    /* try { // try from 00314120 to 00414123 has its CatchHandler @ 003145e0 */
joined_r0x00314134:
  do {
    pfVar19 = pfVar24;
    iVar7 = iVar7 + -1;
    if (iVar7 == 0) {
      if (0 < (int)uVar9) {
                    /* try { // try from 00314328 to 0041432b has its CatchHandler @ 003145f0 */
        if ((pdVar15 < pdVar23 + 2 && pdVar23 < pdVar15 + 2) || (uVar9 < 0xe)) {
          lVar26 = 0;
          do {
            pdVar15[lVar26] = pdVar23[lVar26];
            lVar26 = lVar26 + 1;
          } while ((int)lVar26 < (int)uVar9);
        }
        else {
          uVar12 = (uint)((ulong)pdVar23 >> 3) & 1;
          if (uVar9 < uVar12) {
            uVar12 = uVar9;
          }
          if (uVar12 != 0) {
            *pdVar15 = *pdVar23;
          }
          uVar1 = ((uVar9 - uVar12) - 2 >> 1) + 1;
          iVar6 = uVar1 * 2;
          uVar17 = 0;
          pdVar16 = pdVar23 + uVar12;
          pdVar18 = pdVar15 + uVar12;
          do {
                    /* try { // try from 0031439c to 004143c7 has its CatchHandler @ 00313fe0 */
            dVar29 = *pdVar16;
            uVar17 = uVar17 + 1;
            pdVar18[1] = pdVar16[1];
            *pdVar18 = dVar29;
            pdVar16 = pdVar16 + 2;
            pdVar18 = pdVar18 + 2;
          } while (uVar17 < uVar1);
          uVar1 = iVar6 + (uint)(uVar12 != 0);
          if (iVar6 != uVar9 - uVar12) {
            uVar27 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
            *(undefined8 *)((long)pdVar15 + uVar27) = *(undefined8 *)((long)pdVar23 + uVar27);
          }
        }
      }
                    /* try { // try from 003143d0 to 004143d3 has its CatchHandler @ 003145f0 */
      if (bVar11) {
        operator_delete__(pdVar23);
      }
                    /* try { // try from 003143dc to 004143f3 has its CatchHandler @ 003145e8 */
      return;
    }
    pfVar24 = pfVar19 + (uVar27 >> 2);
    if (0 < (int)(uVar9 - 3)) {
      pdVar18 = pdVar23 + 2;
                    /* try { // try from 00314150 to 00414153 has its CatchHandler @ 003145cc */
      uVar21 = 0;
      pdVar20 = pdVar23;
      pfVar22 = pfVar24;
      do {
        uVar30 = *(undefined8 *)(pfVar22 + 2);
        uVar28 = *(undefined8 *)pfVar22;
                    /* try { // try from 00314158 to 004141e7 has its CatchHandler @ 003145e0 */
        uVar21 = uVar21 + 1;
        dVar31 = pdVar18[1];
        dVar29 = *pdVar18;
        pdVar20[1] = pdVar20[1] + (double)(float)((ulong)uVar28 >> 0x20);
        *pdVar20 = *pdVar20 + (double)(float)uVar28;
        pdVar20 = pdVar20 + 4;
        pdVar18[1] = dVar31 + (double)(float)((ulong)uVar30 >> 0x20);
        *pdVar18 = dVar29 + (double)(float)uVar30;
        pdVar18 = pdVar18 + 4;
        pfVar22 = pfVar22 + 4;
      } while (uVar21 < uVar12);
    }
  } while ((int)uVar9 <= iVar6);
  uVar21 = uVar1;
  if (uVar17 < 5) {
    uVar21 = uVar17;
  }
  iVar13 = iVar6;
  if (uVar21 != 0) goto code_r0x003141a0;
  goto LAB_00314214;
code_r0x003141a0:
  *pdVar16 = *pdVar16 + (double)pfVar24[lVar26];
  iVar13 = iVar2;
  if (((uVar21 != 1) &&
      (pdVar23[iVar2] = pdVar23[iVar2] + (double)pfVar24[iVar2], iVar13 = iVar3, uVar21 != 2)) &&
     (pdVar23[iVar3] = pdVar23[iVar3] + (double)pfVar24[iVar3], iVar13 = iVar4, uVar21 == 4)) {
    pdVar23[iVar4] = pdVar23[iVar4] + (double)pfVar24[iVar4];
    iVar13 = iVar6 + 4;
  }
  if (uVar21 != uVar17) {
LAB_00314214:
    uVar5 = ((uVar17 - uVar21) - 4 >> 2) + 1;
    iVar8 = uVar5 * 4;
                    /* try { // try from 00314238 to 0041423b has its CatchHandler @ 00314564 */
    if (2 < (uVar17 - 1) - uVar21) {
                    /* try { // try from 00314240 to 00414243 has its CatchHandler @ 003145e0 */
      uVar25 = 0;
      pdVar18 = pdVar23 + (ulong)uVar21 + lVar26;
      pfVar19 = pfVar19 + (ulong)uVar21 + (uVar27 >> 2) + lVar26;
      pdVar20 = pdVar18;
      do {
        uVar30 = *(undefined8 *)(pfVar19 + 2);
        uVar28 = *(undefined8 *)pfVar19;
        pdVar10 = pdVar18 + 1;
        dVar29 = *pdVar18;
        dVar32 = pdVar18[3];
        dVar31 = pdVar18[2];
        uVar25 = uVar25 + 1;
        pdVar18 = pdVar18 + 4;
        pdVar20[1] = *pdVar10 + (double)(float)((ulong)uVar28 >> 0x20);
        *pdVar20 = dVar29 + (double)(float)uVar28;
        pdVar20[3] = (double)(float)((ulong)uVar30 >> 0x20) + dVar32;
        pdVar20[2] = (double)(float)uVar30 + dVar31;
        pfVar19 = pfVar19 + 4;
        pdVar20 = pdVar20 + 4;
      } while (uVar25 < uVar5);
      iVar13 = iVar13 + iVar8;
      if (iVar8 == uVar17 - uVar21) goto joined_r0x00314134;
    }
    iVar8 = iVar13 + 1;
                    /* try { // try from 003142b4 to 004142b7 has its CatchHandler @ 003145e8 */
    pdVar23[iVar13] = pdVar23[iVar13] + (double)pfVar24[iVar13];
    if (iVar8 < (int)uVar9) {
      iVar13 = iVar13 + 2;
      pdVar23[iVar8] = pdVar23[iVar8] + (double)pfVar24[iVar8];
      if (iVar13 < (int)uVar9) {
        pdVar23[iVar13] = pdVar23[iVar13] + (double)pfVar24[iVar13];
      }
    }
  }
  goto joined_r0x00314134;
}


==================================================================

### FUNC 0031446c (2576 bytes) name=FUN_0031446c

void FUN_0031446c(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  ushort uVar13;
  ushort uVar14;
  ushort uVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  undefined1 auVar19 [14];
  undefined1 auVar20 [14];
  undefined1 auVar21 [14];
  undefined1 auVar22 [14];
  undefined1 auVar23 [14];
  undefined1 auVar24 [14];
  bool bVar25;
  uint uVar26;
  ulong uVar27;
  double *pdVar28;
  double *pdVar29;
  uint uVar30;
  double *pdVar31;
  long lVar32;
  double *pdVar33;
  ushort *puVar34;
  undefined1 (*pauVar35) [16];
  uint uVar36;
  long lVar37;
  ushort *puVar38;
  uint uVar39;
  uint uVar40;
  double *pdVar41;
  ulong uVar42;
  ushort *puVar43;
  double *pdVar44;
  int iVar45;
  double dVar46;
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  ulong uVar50;
  undefined1 auVar51 [16];
  undefined1 auVar52 [16];
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  undefined1 auVar55 [16];
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  long lVar59;
  double dVar60;
  double dVar61;
  long lVar62;
  undefined1 auVar63 [16];
  double dVar64;
  double dVar65;
  long lVar66;
  long lVar67;
  long lVar68;
  long lVar69;
  long lVar70;
  long lVar71;
  long lVar72;
  double local_440 [136];
  
                    /* try { // try from 00314494 to 0041455f has its CatchHandler @ 003145e0 */
  pdVar31 = local_440;
  iVar11 = (*(int **)(param_1 + 0x10))[1];
  iVar12 = **(int **)(param_1 + 0x10);
  uVar18 = iVar11 + (*param_1 >> 3 & 0x1ff) * iVar11;
  uVar42 = (ulong)(int)uVar18;
  if (uVar42 < 0x89) {
                    /* try { // try from 00314e40 to 00414e43 has its CatchHandler @ 0031670c */
    bVar25 = false;
  }
  else {
    uVar27 = uVar42 << 3;
    if (0xfe0000000000000 < uVar42) {
      uVar27 = 0xffffffffffffffff;
    }
    pdVar28 = operator_new__(uVar27);
    bVar25 = pdVar28 != pdVar31;
    pdVar31 = pdVar28;
  }
  uVar42 = *(ulong *)(param_1 + 0x14);
  pdVar28 = *(double **)(param_2 + 0x10);
  puVar34 = *(ushort **)(param_1 + 4);
  if (0 < (int)uVar18) {
    uVar26 = (uint)((ulong)pdVar31 >> 3) & 1;
    if (uVar18 < uVar26) {
      uVar26 = uVar18;
    }
    uVar1 = uVar18;
    if (((int)uVar18 < 9) || (uVar30 = 0, uVar1 = uVar26, uVar26 != 0)) {
      uVar26 = uVar1;
      *pdVar31 = (double)*puVar34;
      uVar30 = uVar26;
                    /* catch() { ... } // from try @ 00314238 with catch @ 00314564 */
      if (((uVar26 != 1) &&
          (((pdVar31[1] = (double)puVar34[1], uVar26 != 2 &&
            (pdVar31[2] = (double)puVar34[2], uVar26 != 3)) &&
           (pdVar31[3] = (double)puVar34[3], uVar26 != 4)))) &&
         ((pdVar31[4] = (double)puVar34[4], uVar26 != 5 &&
          (pdVar31[5] = (double)puVar34[5], uVar26 != 6)))) {
        pdVar31[6] = (double)puVar34[6];
        if (uVar26 == 8) {
                    /* try { // try from 003145c8 to 004145cb has its CatchHandler @ 00313fe0 */
                    /* catch() { ... } // from try @ 00314150 with catch @ 003145cc */
          pdVar31[7] = (double)puVar34[7];
        }
        else {
          uVar30 = 7;
        }
      }
      if (uVar18 == uVar26) goto LAB_00314730;
    }
                    /* catch() { ... } // from try @ 00314120 with catch @ 003145e0
                       catch() { ... } // from try @ 00314158 with catch @ 003145e0
                       catch() { ... } // from try @ 00314240 with catch @ 003145e0
                       catch() { ... } // from try @ 00314494 with catch @ 003145e0 */
                    /* catch() { ... } // from try @ 003142b4 with catch @ 003145e8
                       catch() { ... } // from try @ 003143dc with catch @ 003145e8 */
                    /* catch() { ... } // from try @ 0031404c with catch @ 003145f0
                       catch() { ... } // from try @ 00314328 with catch @ 003145f0
                       catch() { ... } // from try @ 003143d0 with catch @ 003145f0 */
    uVar1 = ((uVar18 - uVar26) - 8 >> 3) + 1;
    iVar11 = uVar1 * 8;
                    /* catch() { ... } // from try @ 003166d4 with catch @ 00314600 */
    if (6 < (uVar18 - 1) - uVar26) {
      uVar36 = 0;
      pdVar29 = pdVar31 + uVar26;
      puVar38 = puVar34 + uVar26;
      do {
        uVar36 = uVar36 + 1;
        uVar50 = CONCAT26(0,CONCAT24(puVar38[1],(uint)*puVar38));
        auVar19._8_2_ = puVar38[2];
        auVar19._0_8_ = uVar50;
        auVar19._10_2_ = 0;
        auVar19._12_2_ = puVar38[3];
        uVar27 = CONCAT26(0,CONCAT24(puVar38[5],(uint)puVar38[4]));
        auVar20._8_2_ = puVar38[6];
        auVar20._0_8_ = uVar27;
        auVar20._10_2_ = 0;
        auVar20._12_2_ = puVar38[7];
        auVar56._0_8_ = uVar50 & 0xffffffff;
        auVar56._8_2_ = puVar38[1];
        auVar56._10_6_ = 0;
        auVar51._0_8_ = (ulong)auVar19._8_6_ & 0xffffffff;
        auVar51._8_6_ = auVar19._8_6_ >> 0x20;
        auVar51._14_2_ = 0;
        auVar54._0_8_ = uVar27 & 0xffffffff;
        auVar54._8_2_ = puVar38[5];
        auVar54._10_6_ = 0;
        auVar47._0_8_ = (ulong)auVar20._8_6_ & 0xffffffff;
        auVar47._8_6_ = auVar20._8_6_ >> 0x20;
        auVar47._14_2_ = 0;
        auVar56 = NEON_scvtf(auVar56,8);
        pdVar29[1] = auVar56._8_8_;
        *pdVar29 = auVar56._0_8_;
        auVar51 = NEON_scvtf(auVar51,8);
        auVar54 = NEON_scvtf(auVar54,8);
        auVar47 = NEON_scvtf(auVar47,8);
        pdVar29[3] = auVar51._8_8_;
        pdVar29[2] = auVar51._0_8_;
        pdVar29[5] = auVar54._8_8_;
        pdVar29[4] = auVar54._0_8_;
        pdVar29[7] = auVar47._8_8_;
        pdVar29[6] = auVar47._0_8_;
        pdVar29 = pdVar29 + 8;
        puVar38 = puVar38 + 8;
      } while (uVar36 < uVar1);
      uVar30 = uVar30 + iVar11;
      if (uVar18 - uVar26 == iVar11) goto LAB_00314730;
    }
    iVar11 = uVar30 + 1;
    pdVar31[(int)uVar30] = (double)puVar34[(int)uVar30];
    if (iVar11 < (int)uVar18) {
      iVar2 = uVar30 + 2;
      pdVar31[iVar11] = (double)puVar34[iVar11];
      if (iVar2 < (int)uVar18) {
        iVar11 = uVar30 + 3;
        pdVar31[iVar2] = (double)puVar34[iVar2];
        if (iVar11 < (int)uVar18) {
          iVar2 = uVar30 + 4;
          pdVar31[iVar11] = (double)puVar34[iVar11];
          if (iVar2 < (int)uVar18) {
            iVar11 = uVar30 + 5;
            pdVar31[iVar2] = (double)puVar34[iVar2];
            if (iVar11 < (int)uVar18) {
              iVar2 = uVar30 + 6;
              pdVar31[iVar11] = (double)puVar34[iVar11];
              if (iVar2 < (int)uVar18) {
                pdVar31[iVar2] = (double)puVar34[iVar2];
              }
            }
          }
        }
      }
    }
  }
LAB_00314730:
  uVar1 = uVar18 - 4;
  iVar11 = (uVar1 >> 2) + 1;
  uVar26 = ((uVar1 >> 2) - 1 >> 1) + 1;
  iVar16 = iVar11 * 4;
  iVar2 = uVar26 * 8;
  if (uVar1 < 4) {
    iVar2 = 0;
  }
  if ((int)(uVar18 - 3) < 1) {
    iVar16 = 0;
  }
  iVar3 = iVar16 + 1;
  iVar4 = iVar16 + 2;
  lVar37 = (long)iVar2;
  lVar32 = (long)iVar16;
                    /* try { // try from 003147a0 to 004147a3 has its CatchHandler @ 00316d90 */
  iVar2 = iVar16 + 3;
  lVar68 = NEON_shl((long)iVar3,1);
  iVar5 = iVar16 + 4;
  iVar6 = iVar16 + 5;
  lVar67 = NEON_shl((long)iVar4,1);
  iVar7 = iVar16 + 6;
  iVar8 = iVar16 + 7;
  lVar66 = NEON_shl((long)iVar2,1);
                    /* try { // try from 003147ec to 004147ef has its CatchHandler @ 00316d80 */
                    /* try { // try from 003147f4 to 0041487f has its CatchHandler @ 00316d90 */
  pdVar29 = pdVar31 + lVar32;
  uVar30 = (uint)((ulong)pdVar29 >> 3) & 1;
  lVar59 = NEON_shl((long)iVar5,1);
  uVar36 = uVar18 - iVar16;
  lVar70 = NEON_shl((long)iVar6,1);
  lVar62 = NEON_shl(uVar42 >> 1,1);
  lVar71 = NEON_shl((long)iVar7,1);
  if (uVar36 < uVar30) {
    uVar30 = uVar36;
  }
  lVar69 = NEON_shl(lVar32,1);
  lVar72 = NEON_shl((long)iVar8,1);
joined_r0x003148b4:
  do {
    puVar38 = puVar34;
    iVar12 = iVar12 + -1;
    if (iVar12 == 0) {
      if (0 < (int)uVar18) {
        if ((pdVar28 < pdVar31 + 2 && pdVar31 < pdVar28 + 2) || (uVar18 < 0xe)) {
          lVar32 = 0;
          do {
            pdVar28[lVar32] = pdVar31[lVar32];
            lVar32 = lVar32 + 1;
          } while ((int)lVar32 < (int)uVar18);
        }
        else {
          uVar26 = (uint)((ulong)pdVar31 >> 3) & 1;
          if (uVar18 < uVar26) {
            uVar26 = uVar18;
          }
          if (uVar26 != 0) {
            *pdVar28 = *pdVar31;
          }
          uVar1 = ((uVar18 - uVar26) - 2 >> 1) + 1;
          iVar11 = uVar1 * 2;
          uVar30 = 0;
          pdVar29 = pdVar31 + uVar26;
          pdVar33 = pdVar28 + uVar26;
          do {
            dVar46 = *pdVar29;
            uVar30 = uVar30 + 1;
            pdVar33[1] = pdVar29[1];
            *pdVar33 = dVar46;
            pdVar29 = pdVar29 + 2;
            pdVar33 = pdVar33 + 2;
          } while (uVar30 < uVar1);
          uVar1 = iVar11 + (uint)(uVar26 != 0);
          if (iVar11 != uVar18 - uVar26) {
            uVar42 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
            *(undefined8 *)((long)pdVar28 + uVar42) = *(undefined8 *)((long)pdVar31 + uVar42);
          }
        }
      }
      if (bVar25) {
        operator_delete__(pdVar31);
      }
      return;
    }
    puVar34 = (ushort *)((long)puVar38 + lVar62);
                    /* try { // try from 003148c8 to 004148cb has its CatchHandler @ 00316e0c */
    if (0 < (int)(uVar18 - 3)) {
                    /* try { // try from 003148d0 to 0041491f has its CatchHandler @ 00316d90 */
      if (3 < uVar1) {
        pdVar33 = pdVar31 + 2;
        pdVar41 = pdVar31 + 4;
        pauVar35 = (undefined1 (*) [16])(pdVar31 + 6);
        uVar39 = 0;
        puVar43 = puVar34;
        pdVar44 = pdVar31;
        do {
          uVar39 = uVar39 + 1;
          dVar46 = *pdVar33;
          dVar60 = pdVar33[1];
          dVar61 = *pdVar41;
          dVar64 = pdVar41[1];
          auVar47 = *pauVar35;
          uVar50 = CONCAT26(0,CONCAT24(puVar43[1],(uint)*puVar43));
          auVar21._8_2_ = puVar43[2];
          auVar21._0_8_ = uVar50;
          auVar21._10_2_ = 0;
          auVar21._12_2_ = puVar43[3];
          uVar27 = CONCAT26(0,CONCAT24(puVar43[5],(uint)puVar43[4]));
          auVar22._8_2_ = puVar43[6];
          auVar22._0_8_ = uVar27;
          auVar22._10_2_ = 0;
          auVar22._12_2_ = puVar43[7];
          auVar63._0_8_ = uVar50 & 0xffffffff;
          auVar63._8_2_ = puVar43[1];
          auVar63._10_6_ = 0;
          auVar52._0_8_ = (ulong)auVar21._8_6_ & 0xffffffff;
          auVar52._8_6_ = auVar21._8_6_ >> 0x20;
          auVar52._14_2_ = 0;
          auVar48._0_8_ = (ulong)auVar22._8_6_ & 0xffffffff;
          auVar48._8_6_ = auVar22._8_6_ >> 0x20;
          auVar48._14_2_ = 0;
          auVar63 = NEON_scvtf(auVar63,8);
          auVar54 = NEON_scvtf(auVar52,8);
          auVar58._8_2_ = puVar43[5];
          auVar58._0_8_ = uVar27 & 0xffffffff;
          auVar58._10_6_ = 0;
          auVar56 = NEON_scvtf(auVar58,8);
          auVar51 = NEON_scvtf(auVar48,8);
          pdVar44[1] = pdVar44[1] + auVar63._8_8_;
          *pdVar44 = *pdVar44 + auVar63._0_8_;
                    /* try { // try from 0031494c to 0041494f has its CatchHandler @ 00316db8 */
          pdVar44 = pdVar44 + 8;
          pdVar33[1] = dVar60 + auVar54._8_8_;
          *pdVar33 = dVar46 + auVar54._0_8_;
                    /* try { // try from 00314954 to 00414983 has its CatchHandler @ 00316d90 */
          pdVar33 = pdVar33 + 8;
          pdVar41[1] = dVar64 + auVar56._8_8_;
          *pdVar41 = dVar61 + auVar56._0_8_;
          pdVar41 = pdVar41 + 8;
          *(double *)(*pauVar35 + 8) = auVar47._8_8_ + auVar51._8_8_;
          *(double *)*pauVar35 = auVar47._0_8_ + auVar51._0_8_;
          pauVar35 = pauVar35 + 4;
          puVar43 = puVar43 + 8;
        } while (uVar39 < uVar26);
        if (iVar11 == uVar26 * 2) goto LAB_003149dc;
      }
      uVar13 = puVar34[lVar37 + 1];
      uVar14 = puVar34[lVar37 + 2];
      uVar15 = puVar34[lVar37 + 3];
      pdVar31[lVar37] = pdVar31[lVar37] + (double)puVar34[lVar37];
      pdVar31[lVar37 + 1] = (double)uVar13 + pdVar31[lVar37 + 1];
                    /* try { // try from 003149c4 to 004149c7 has its CatchHandler @ 00316dc8 */
                    /* try { // try from 003149cc to 00414bb3 has its CatchHandler @ 00316d90 */
      pdVar31[lVar37 + 2] = pdVar31[lVar37 + 2] + (double)uVar14;
      pdVar31[lVar37 + 3] = (double)uVar15 + pdVar31[lVar37 + 3];
    }
LAB_003149dc:
  } while ((int)uVar18 <= iVar16);
  uVar39 = uVar30;
  if (uVar36 < 9) {
    uVar39 = uVar36;
  }
  iVar45 = iVar16;
  if (uVar39 != 0) {
    *pdVar29 = *pdVar29 + (double)*(ushort *)((long)puVar34 + lVar69);
    iVar45 = iVar3;
    if (((((uVar39 != 1) &&
          (pdVar31[iVar3] = pdVar31[iVar3] + (double)*(ushort *)((long)puVar34 + lVar68),
          iVar45 = iVar4, uVar39 != 2)) &&
         (pdVar31[iVar4] = pdVar31[iVar4] + (double)*(ushort *)((long)puVar34 + lVar67),
         iVar45 = iVar2, uVar39 != 3)) &&
        ((pdVar31[iVar2] = pdVar31[iVar2] + (double)*(ushort *)((long)puVar34 + lVar66),
         iVar45 = iVar5, uVar39 != 4 &&
         (pdVar31[iVar5] = pdVar31[iVar5] + (double)*(ushort *)((long)puVar34 + lVar59),
         iVar45 = iVar6, uVar39 != 5)))) &&
       ((pdVar31[iVar6] = pdVar31[iVar6] + (double)*(ushort *)((long)puVar34 + lVar70),
        iVar45 = iVar7, uVar39 != 6 &&
        (pdVar31[iVar7] = pdVar31[iVar7] + (double)*(ushort *)((long)puVar34 + lVar71),
        iVar45 = iVar8, uVar39 == 8)))) {
      pdVar31[iVar8] = pdVar31[iVar8] + (double)*(ushort *)((long)puVar34 + lVar72);
      iVar45 = iVar16 + 8;
    }
    if (uVar39 == uVar36) goto joined_r0x003148b4;
  }
  uVar9 = ((uVar36 - uVar39) - 8 >> 3) + 1;
  iVar17 = uVar9 * 8;
  if (6 < (uVar36 - 1) - uVar39) {
    uVar40 = 0;
    pdVar33 = pdVar31 + (ulong)uVar39 + lVar32;
    puVar38 = puVar38 + (ulong)uVar39 + (uVar42 >> 1) + lVar32;
    pdVar41 = pdVar33;
    do {
      pdVar44 = pdVar33 + 1;
      dVar46 = *pdVar33;
      dVar65 = pdVar33[3];
      dVar64 = pdVar33[2];
      auVar47 = *(undefined1 (*) [16])(pdVar33 + 4);
      dVar61 = pdVar33[7];
      dVar60 = pdVar33[6];
      uVar50 = CONCAT26(0,CONCAT24(puVar38[1],(uint)*puVar38));
      auVar23._8_2_ = puVar38[2];
      auVar23._0_8_ = uVar50;
      auVar23._10_2_ = 0;
      auVar23._12_2_ = puVar38[3];
      uVar27 = CONCAT26(0,CONCAT24(puVar38[5],(uint)puVar38[4]));
      auVar24._8_2_ = puVar38[6];
      auVar24._0_8_ = uVar27;
      auVar24._10_2_ = 0;
      auVar24._12_2_ = puVar38[7];
      uVar40 = uVar40 + 1;
      pdVar33 = pdVar33 + 8;
      auVar57._0_8_ = uVar50 & 0xffffffff;
      auVar57._8_2_ = puVar38[1];
      auVar57._10_6_ = 0;
      auVar53._0_8_ = (ulong)auVar23._8_6_ & 0xffffffff;
      auVar53._8_6_ = auVar23._8_6_ >> 0x20;
      auVar53._14_2_ = 0;
      auVar55._0_8_ = uVar27 & 0xffffffff;
      auVar55._8_2_ = puVar38[5];
      auVar55._10_6_ = 0;
      auVar49._0_8_ = (ulong)auVar24._8_6_ & 0xffffffff;
      auVar49._8_6_ = auVar24._8_6_ >> 0x20;
      auVar49._14_2_ = 0;
      auVar58 = NEON_scvtf(auVar57,8);
      auVar54 = NEON_scvtf(auVar53,8);
      auVar56 = NEON_scvtf(auVar55,8);
      auVar51 = NEON_scvtf(auVar49,8);
      pdVar41[1] = *pdVar44 + auVar58._8_8_;
      *pdVar41 = dVar46 + auVar58._0_8_;
      pdVar41[3] = auVar54._8_8_ + dVar65;
      pdVar41[2] = auVar54._0_8_ + dVar64;
      pdVar41[5] = auVar56._8_8_ + auVar47._8_8_;
      pdVar41[4] = auVar56._0_8_ + auVar47._0_8_;
      pdVar41[7] = auVar51._8_8_ + dVar61;
      pdVar41[6] = auVar51._0_8_ + dVar60;
      puVar38 = puVar38 + 8;
      pdVar41 = pdVar41 + 8;
    } while (uVar40 < uVar9);
    iVar45 = iVar45 + iVar17;
    if (iVar17 == uVar36 - uVar39) goto joined_r0x003148b4;
  }
  iVar17 = iVar45 + 1;
  pdVar31[iVar45] = pdVar31[iVar45] + (double)puVar34[iVar45];
  if (iVar17 < (int)uVar18) {
                    /* try { // try from 00314c10 to 00414c13 has its CatchHandler @ 00316f68 */
    iVar10 = iVar45 + 2;
    pdVar31[iVar17] = pdVar31[iVar17] + (double)puVar34[iVar17];
    if (iVar10 < (int)uVar18) {
      iVar17 = iVar45 + 3;
      pdVar31[iVar10] = pdVar31[iVar10] + (double)puVar34[iVar10];
      if (iVar17 < (int)uVar18) {
        iVar10 = iVar45 + 4;
        pdVar31[iVar17] = pdVar31[iVar17] + (double)puVar34[iVar17];
        if (iVar10 < (int)uVar18) {
          iVar17 = iVar45 + 5;
          pdVar31[iVar10] = pdVar31[iVar10] + (double)puVar34[iVar10];
          if (iVar17 < (int)uVar18) {
            iVar45 = iVar45 + 6;
            pdVar31[iVar17] = pdVar31[iVar17] + (double)puVar34[iVar17];
            if (iVar45 < (int)uVar18) {
              pdVar31[iVar45] = pdVar31[iVar45] + (double)puVar34[iVar45];
            }
          }
        }
      }
    }
  }
  goto joined_r0x003148b4;
}


==================================================================

### FUNC 00314e7c (2576 bytes) name=FUN_00314e7c

void FUN_00314e7c(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  short sVar13;
  short sVar14;
  short sVar15;
  int iVar16;
  int iVar17;
  uint uVar18;
  bool bVar19;
  uint uVar20;
  ulong uVar21;
  double *pdVar22;
  double *pdVar23;
  uint uVar24;
  double *pdVar25;
  long lVar26;
  double *pdVar27;
  short *psVar28;
  undefined1 (*pauVar29) [16];
  uint uVar30;
  long lVar31;
  short *psVar32;
  uint uVar33;
  uint uVar34;
  double *pdVar35;
  ulong uVar36;
  short *psVar37;
  double *pdVar38;
  int iVar39;
  double dVar40;
  undefined1 auVar41 [16];
  undefined1 auVar42 [16];
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  long lVar52;
  double dVar53;
  double dVar54;
  long lVar55;
  undefined1 auVar56 [16];
  double dVar57;
  double dVar58;
  long lVar59;
  long lVar60;
  long lVar61;
  long lVar62;
  long lVar63;
  long lVar64;
  long lVar65;
  double local_440 [136];
  
  pdVar25 = local_440;
  iVar11 = (*(int **)(param_1 + 0x10))[1];
  iVar12 = **(int **)(param_1 + 0x10);
  uVar18 = iVar11 + (*param_1 >> 3 & 0x1ff) * iVar11;
  uVar36 = (ulong)(int)uVar18;
  if (uVar36 < 0x89) {
    bVar19 = false;
  }
  else {
    uVar21 = uVar36 << 3;
    if (0xfe0000000000000 < uVar36) {
      uVar21 = 0xffffffffffffffff;
    }
    pdVar22 = operator_new__(uVar21);
    bVar19 = pdVar22 != pdVar25;
    pdVar25 = pdVar22;
  }
  uVar36 = *(ulong *)(param_1 + 0x14);
  pdVar22 = *(double **)(param_2 + 0x10);
  psVar28 = *(short **)(param_1 + 4);
  if (0 < (int)uVar18) {
    uVar20 = (uint)((ulong)pdVar25 >> 3) & 1;
    if (uVar18 < uVar20) {
      uVar20 = uVar18;
    }
    uVar1 = uVar18;
    if (((int)uVar18 < 9) || (uVar24 = 0, uVar1 = uVar20, uVar20 != 0)) {
      uVar20 = uVar1;
      *pdVar25 = (double)(int)*psVar28;
      uVar24 = uVar20;
      if (((uVar20 != 1) &&
          (((pdVar25[1] = (double)(int)psVar28[1], uVar20 != 2 &&
            (pdVar25[2] = (double)(int)psVar28[2], uVar20 != 3)) &&
           (pdVar25[3] = (double)(int)psVar28[3], uVar20 != 4)))) &&
         ((pdVar25[4] = (double)(int)psVar28[4], uVar20 != 5 &&
          (pdVar25[5] = (double)(int)psVar28[5], uVar20 != 6)))) {
        pdVar25[6] = (double)(int)psVar28[6];
        if (uVar20 == 8) {
          pdVar25[7] = (double)(int)psVar28[7];
        }
        else {
          uVar24 = 7;
        }
      }
      if (uVar18 == uVar20) goto LAB_00315140;
    }
    uVar1 = ((uVar18 - uVar20) - 8 >> 3) + 1;
    iVar11 = uVar1 * 8;
    if (6 < (uVar18 - 1) - uVar20) {
      uVar30 = 0;
      pdVar23 = pdVar25 + uVar20;
      psVar32 = psVar28 + uVar20;
      do {
        uVar30 = uVar30 + 1;
        auVar49._0_8_ = (long)(int)*psVar32;
        auVar49._8_8_ = (long)(int)psVar32[1];
        auVar44._0_8_ = (long)(int)psVar32[2];
        auVar44._8_8_ = (long)(int)psVar32[3];
        auVar47._0_8_ = (long)(int)psVar32[4];
        auVar47._8_8_ = (long)(int)psVar32[5];
                    /* try { // try from 00315054 to 00415057 has its CatchHandler @ 0031671c */
        auVar41._0_8_ = (long)(int)psVar32[6];
        auVar41._8_8_ = (long)(int)psVar32[7];
        auVar49 = NEON_scvtf(auVar49,8);
        pdVar23[1] = auVar49._8_8_;
        *pdVar23 = auVar49._0_8_;
        auVar44 = NEON_scvtf(auVar44,8);
        auVar47 = NEON_scvtf(auVar47,8);
        auVar41 = NEON_scvtf(auVar41,8);
        pdVar23[3] = auVar44._8_8_;
        pdVar23[2] = auVar44._0_8_;
        pdVar23[5] = auVar47._8_8_;
        pdVar23[4] = auVar47._0_8_;
        pdVar23[7] = auVar41._8_8_;
        pdVar23[6] = auVar41._0_8_;
        pdVar23 = pdVar23 + 8;
        psVar32 = psVar32 + 8;
                    /* try { // try from 00315078 to 0041510f has its CatchHandler @ 00316604 */
      } while (uVar30 < uVar1);
      uVar24 = uVar24 + iVar11;
      if (uVar18 - uVar20 == iVar11) goto LAB_00315140;
    }
    iVar11 = uVar24 + 1;
    pdVar25[(int)uVar24] = (double)(int)psVar28[(int)uVar24];
    if (iVar11 < (int)uVar18) {
      iVar2 = uVar24 + 2;
      pdVar25[iVar11] = (double)(int)psVar28[iVar11];
      if (iVar2 < (int)uVar18) {
        iVar11 = uVar24 + 3;
        pdVar25[iVar2] = (double)(int)psVar28[iVar2];
        if (iVar11 < (int)uVar18) {
          iVar2 = uVar24 + 4;
          pdVar25[iVar11] = (double)(int)psVar28[iVar11];
          if (iVar2 < (int)uVar18) {
            iVar11 = uVar24 + 5;
            pdVar25[iVar2] = (double)(int)psVar28[iVar2];
            if (iVar11 < (int)uVar18) {
              iVar2 = uVar24 + 6;
                    /* try { // try from 00315128 to 0041512b has its CatchHandler @ 003166e8 */
              pdVar25[iVar11] = (double)(int)psVar28[iVar11];
              if (iVar2 < (int)uVar18) {
                pdVar25[iVar2] = (double)(int)psVar28[iVar2];
              }
            }
          }
        }
      }
    }
  }
LAB_00315140:
  uVar1 = uVar18 - 4;
  iVar11 = (uVar1 >> 2) + 1;
  uVar20 = ((uVar1 >> 2) - 1 >> 1) + 1;
  iVar16 = iVar11 * 4;
  iVar2 = uVar20 * 8;
  if (uVar1 < 4) {
    iVar2 = 0;
  }
  if ((int)(uVar18 - 3) < 1) {
    iVar16 = 0;
  }
  iVar3 = iVar16 + 1;
  iVar4 = iVar16 + 2;
                    /* try { // try from 00315198 to 004151db has its CatchHandler @ 00316604 */
  lVar31 = (long)iVar2;
  lVar26 = (long)iVar16;
  iVar2 = iVar16 + 3;
  lVar61 = NEON_shl((long)iVar3,1);
  iVar5 = iVar16 + 4;
  iVar6 = iVar16 + 5;
  lVar60 = NEON_shl((long)iVar4,1);
  iVar7 = iVar16 + 6;
  iVar8 = iVar16 + 7;
  lVar59 = NEON_shl((long)iVar2,1);
  pdVar23 = pdVar25 + lVar26;
                    /* try { // try from 0031524c to 0041524f has its CatchHandler @ 0031670c */
  uVar24 = (uint)((ulong)pdVar23 >> 3) & 1;
  lVar52 = NEON_shl((long)iVar5,1);
  uVar30 = uVar18 - iVar16;
  lVar63 = NEON_shl((long)iVar6,1);
  lVar55 = NEON_shl(uVar36 >> 1,1);
  lVar64 = NEON_shl((long)iVar7,1);
  if (uVar30 < uVar24) {
    uVar24 = uVar30;
  }
  lVar62 = NEON_shl(lVar26,1);
  lVar65 = NEON_shl((long)iVar8,1);
joined_r0x003152c4:
  do {
    psVar32 = psVar28;
    iVar12 = iVar12 + -1;
    if (iVar12 == 0) {
      if (0 < (int)uVar18) {
        if ((pdVar22 < pdVar25 + 2 && pdVar25 < pdVar22 + 2) || (uVar18 < 0xe)) {
          lVar26 = 0;
          do {
            pdVar22[lVar26] = pdVar25[lVar26];
            lVar26 = lVar26 + 1;
          } while ((int)lVar26 < (int)uVar18);
        }
        else {
          uVar20 = (uint)((ulong)pdVar25 >> 3) & 1;
          if (uVar18 < uVar20) {
            uVar20 = uVar18;
          }
          if (uVar20 != 0) {
            *pdVar22 = *pdVar25;
          }
          uVar1 = ((uVar18 - uVar20) - 2 >> 1) + 1;
          iVar11 = uVar1 * 2;
          uVar24 = 0;
          pdVar23 = pdVar25 + uVar20;
          pdVar27 = pdVar22 + uVar20;
          do {
            dVar40 = *pdVar23;
            uVar24 = uVar24 + 1;
            pdVar27[1] = pdVar23[1];
            *pdVar27 = dVar40;
            pdVar23 = pdVar23 + 2;
            pdVar27 = pdVar27 + 2;
          } while (uVar24 < uVar1);
          uVar1 = iVar11 + (uint)(uVar20 != 0);
          if (iVar11 != uVar18 - uVar20) {
            uVar36 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
                    /* try { // try from 003157b4 to 00415aef has its CatchHandler @ 00316d54 */
            *(undefined8 *)((long)pdVar22 + uVar36) = *(undefined8 *)((long)pdVar25 + uVar36);
          }
        }
      }
      if (bVar19) {
        operator_delete__(pdVar25);
      }
      return;
    }
                    /* try { // try from 003152d0 to 004152d3 has its CatchHandler @ 00316714 */
    psVar28 = (short *)((long)psVar32 + lVar55);
    if (0 < (int)(uVar18 - 3)) {
      if (3 < uVar1) {
        pdVar27 = pdVar25 + 2;
        pdVar35 = pdVar25 + 4;
        pauVar29 = (undefined1 (*) [16])(pdVar25 + 6);
        uVar33 = 0;
        psVar37 = psVar28;
        pdVar38 = pdVar25;
        do {
          uVar33 = uVar33 + 1;
          dVar40 = *pdVar27;
          dVar53 = pdVar27[1];
          dVar54 = *pdVar35;
          dVar57 = pdVar35[1];
          auVar41 = *pauVar29;
          auVar56._0_8_ = (long)(int)*psVar37;
          auVar56._8_8_ = (long)(int)psVar37[1];
          auVar45._0_8_ = (long)(int)psVar37[2];
          auVar45._8_8_ = (long)(int)psVar37[3];
          auVar42._0_8_ = (long)(int)psVar37[6];
          auVar42._8_8_ = (long)(int)psVar37[7];
          auVar56 = NEON_scvtf(auVar56,8);
          auVar47 = NEON_scvtf(auVar45,8);
          auVar51._8_8_ = (long)(int)psVar37[5];
          auVar51._0_8_ = (long)(int)psVar37[4];
          auVar49 = NEON_scvtf(auVar51,8);
          auVar44 = NEON_scvtf(auVar42,8);
                    /* try { // try from 00315354 to 00415357 has its CatchHandler @ 00316c24 */
          pdVar38[1] = pdVar38[1] + auVar56._8_8_;
          *pdVar38 = *pdVar38 + auVar56._0_8_;
          pdVar38 = pdVar38 + 8;
          pdVar27[1] = dVar53 + auVar47._8_8_;
          *pdVar27 = dVar40 + auVar47._0_8_;
          pdVar27 = pdVar27 + 8;
          pdVar35[1] = dVar57 + auVar49._8_8_;
          *pdVar35 = dVar54 + auVar49._0_8_;
          pdVar35 = pdVar35 + 8;
          *(double *)(*pauVar29 + 8) = auVar41._8_8_ + auVar44._8_8_;
          *(double *)*pauVar29 = auVar41._0_8_ + auVar44._0_8_;
          pauVar29 = pauVar29 + 4;
          psVar37 = psVar37 + 8;
        } while (uVar33 < uVar20);
        if (iVar11 == uVar20 * 2) goto LAB_003153ec;
      }
      sVar13 = psVar28[lVar31 + 1];
      sVar14 = psVar28[lVar31 + 2];
      sVar15 = psVar28[lVar31 + 3];
      pdVar25[lVar31] = pdVar25[lVar31] + (double)(int)psVar28[lVar31];
      pdVar25[lVar31 + 1] = (double)(int)sVar13 + pdVar25[lVar31 + 1];
      pdVar25[lVar31 + 2] = pdVar25[lVar31 + 2] + (double)(int)sVar14;
      pdVar25[lVar31 + 3] = (double)(int)sVar15 + pdVar25[lVar31 + 3];
    }
LAB_003153ec:
  } while ((int)uVar18 <= iVar16);
  uVar33 = uVar24;
  if (uVar30 < 9) {
    uVar33 = uVar30;
  }
  iVar39 = iVar16;
  if (uVar33 != 0) {
    *pdVar23 = *pdVar23 + (double)(int)*(short *)((long)psVar28 + lVar62);
    iVar39 = iVar3;
    if (((((uVar33 != 1) &&
          (pdVar25[iVar3] = pdVar25[iVar3] + (double)(int)*(short *)((long)psVar28 + lVar61),
          iVar39 = iVar4, uVar33 != 2)) &&
         (pdVar25[iVar4] = pdVar25[iVar4] + (double)(int)*(short *)((long)psVar28 + lVar60),
         iVar39 = iVar2, uVar33 != 3)) &&
        ((pdVar25[iVar2] = pdVar25[iVar2] + (double)(int)*(short *)((long)psVar28 + lVar59),
         iVar39 = iVar5, uVar33 != 4 &&
         (pdVar25[iVar5] = pdVar25[iVar5] + (double)(int)*(short *)((long)psVar28 + lVar52),
         iVar39 = iVar6, uVar33 != 5)))) &&
       ((pdVar25[iVar6] = pdVar25[iVar6] + (double)(int)*(short *)((long)psVar28 + lVar63),
        iVar39 = iVar7, uVar33 != 6 &&
        (pdVar25[iVar7] = pdVar25[iVar7] + (double)(int)*(short *)((long)psVar28 + lVar64),
        iVar39 = iVar8, uVar33 == 8)))) {
      pdVar25[iVar8] = pdVar25[iVar8] + (double)(int)*(short *)((long)psVar28 + lVar65);
      iVar39 = iVar16 + 8;
    }
    if (uVar33 == uVar30) goto joined_r0x003152c4;
  }
  uVar9 = ((uVar30 - uVar33) - 8 >> 3) + 1;
  iVar17 = uVar9 * 8;
  if (6 < (uVar30 - 1) - uVar33) {
    uVar34 = 0;
    pdVar27 = pdVar25 + (ulong)uVar33 + lVar26;
    psVar32 = psVar32 + (ulong)uVar33 + (uVar36 >> 1) + lVar26;
    pdVar35 = pdVar27;
    do {
      pdVar38 = pdVar27 + 1;
      dVar40 = *pdVar27;
      dVar58 = pdVar27[3];
      dVar57 = pdVar27[2];
      auVar41 = *(undefined1 (*) [16])(pdVar27 + 4);
      dVar54 = pdVar27[7];
      dVar53 = pdVar27[6];
      uVar34 = uVar34 + 1;
      pdVar27 = pdVar27 + 8;
      auVar50._0_8_ = (long)(int)*psVar32;
      auVar50._8_8_ = (long)(int)psVar32[1];
      auVar46._0_8_ = (long)(int)psVar32[2];
      auVar46._8_8_ = (long)(int)psVar32[3];
      auVar48._0_8_ = (long)(int)psVar32[4];
      auVar48._8_8_ = (long)(int)psVar32[5];
      auVar43._0_8_ = (long)(int)psVar32[6];
      auVar43._8_8_ = (long)(int)psVar32[7];
      auVar51 = NEON_scvtf(auVar50,8);
      auVar47 = NEON_scvtf(auVar46,8);
      auVar49 = NEON_scvtf(auVar48,8);
      auVar44 = NEON_scvtf(auVar43,8);
      pdVar35[1] = *pdVar38 + auVar51._8_8_;
      *pdVar35 = dVar40 + auVar51._0_8_;
      pdVar35[3] = auVar47._8_8_ + dVar58;
      pdVar35[2] = auVar47._0_8_ + dVar57;
      pdVar35[5] = auVar49._8_8_ + auVar41._8_8_;
      pdVar35[4] = auVar49._0_8_ + auVar41._0_8_;
      pdVar35[7] = auVar44._8_8_ + dVar54;
      pdVar35[6] = auVar44._0_8_ + dVar53;
      psVar32 = psVar32 + 8;
      pdVar35 = pdVar35 + 8;
    } while (uVar34 < uVar9);
    iVar39 = iVar39 + iVar17;
                    /* try { // try from 003155ec to 004155ef has its CatchHandler @ 00316e78 */
    if (iVar17 == uVar30 - uVar33) goto joined_r0x003152c4;
  }
  iVar17 = iVar39 + 1;
                    /* try { // try from 00315610 to 00415613 has its CatchHandler @ 00316e70 */
  pdVar25[iVar39] = pdVar25[iVar39] + (double)(int)psVar28[iVar39];
  if (iVar17 < (int)uVar18) {
    iVar10 = iVar39 + 2;
    pdVar25[iVar17] = pdVar25[iVar17] + (double)(int)psVar28[iVar17];
    if (iVar10 < (int)uVar18) {
      iVar17 = iVar39 + 3;
      pdVar25[iVar10] = pdVar25[iVar10] + (double)(int)psVar28[iVar10];
      if (iVar17 < (int)uVar18) {
                    /* try { // try from 00315670 to 00415673 has its CatchHandler @ 00316e68 */
        iVar10 = iVar39 + 4;
        pdVar25[iVar17] = pdVar25[iVar17] + (double)(int)psVar28[iVar17];
        if (iVar10 < (int)uVar18) {
          iVar17 = iVar39 + 5;
                    /* try { // try from 003156ac to 004156af has its CatchHandler @ 00316fd8 */
          pdVar25[iVar10] = pdVar25[iVar10] + (double)(int)psVar28[iVar10];
          if (iVar17 < (int)uVar18) {
            iVar39 = iVar39 + 6;
            pdVar25[iVar17] = pdVar25[iVar17] + (double)(int)psVar28[iVar17];
            if (iVar39 < (int)uVar18) {
              pdVar25[iVar39] = pdVar25[iVar39] + (double)(int)psVar28[iVar39];
            }
          }
        }
      }
    }
  }
  goto joined_r0x003152c4;
}


==================================================================

### FUNC 0031588c (1392 bytes) name=FUN_0031588c

void FUN_0031588c(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double *pdVar15;
  bool bVar16;
  ulong uVar17;
  double *pdVar18;
  double *pdVar19;
  uint uVar20;
  double *pdVar21;
  long lVar22;
  double *pdVar23;
  uint uVar24;
  double *pdVar25;
  double *pdVar26;
  double *pdVar27;
  uint uVar28;
  double *pdVar29;
  double *pdVar30;
  ulong uVar31;
  long lVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double *pdVar41;
  double adStack_440 [136];
  
  pdVar30 = adStack_440;
  iVar5 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar7 = iVar5 + (*param_1 >> 3 & 0x1ff) * iVar5;
  uVar31 = (ulong)(int)uVar7;
  if (uVar31 < 0x89) {
    bVar16 = false;
  }
  else {
    uVar17 = uVar31 << 3;
    if (0xfe0000000000000 < uVar31) {
      uVar17 = 0xffffffffffffffff;
    }
    pdVar18 = operator_new__(uVar17);
    bVar16 = pdVar18 != pdVar30;
    pdVar30 = pdVar18;
  }
  pdVar41 = *(double **)(param_2 + 0x10);
  pdVar18 = *(double **)(param_1 + 4);
  uVar31 = *(ulong *)(param_1 + 0x14) >> 3;
  if (0 < (int)uVar7) {
    if ((pdVar18 < pdVar30 + 2 && pdVar30 < pdVar18 + 2) || (uVar7 < 0xe)) {
                    /* try { // try from 00315de0 to 00415de3 has its CatchHandler @ 00317004 */
      lVar32 = 0;
      do {
        pdVar30[lVar32] = pdVar18[lVar32];
        lVar32 = lVar32 + 1;
      } while ((int)lVar32 < (int)uVar7);
    }
    else {
      uVar1 = (uint)((ulong)pdVar18 >> 3) & 1;
      uVar2 = uVar7;
      if (uVar1 < uVar7) {
        uVar2 = uVar1;
      }
      if (uVar2 != 0) {
        *pdVar30 = *pdVar18;
      }
      uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
      uVar20 = 0;
      iVar5 = uVar1 * 2;
      pdVar19 = pdVar30 + uVar2;
      pdVar26 = pdVar18 + uVar2;
      do {
        dVar33 = *pdVar26;
        uVar20 = uVar20 + 1;
        pdVar19[1] = pdVar26[1];
        *pdVar19 = dVar33;
        pdVar19 = pdVar19 + 2;
        pdVar26 = pdVar26 + 2;
      } while (uVar20 < uVar1);
      uVar1 = (uint)(uVar2 != 0) + iVar5;
      if (uVar7 - uVar2 != iVar5) {
        uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
        *(undefined8 *)((long)pdVar30 + uVar17) = *(undefined8 *)((long)pdVar18 + uVar17);
      }
    }
  }
  uVar20 = uVar7 - 4 >> 2;
  uVar2 = uVar20 + 1;
  uVar1 = uVar2 * 4;
  if ((int)(uVar7 - 3) < 1) {
    uVar1 = 0;
  }
  uVar8 = uVar7 - uVar1;
  lVar32 = (long)(int)uVar1;
  pdVar19 = pdVar30 + lVar32;
  uVar3 = (uint)((ulong)pdVar19 >> 3) & 1;
  uVar4 = uVar8;
  if (uVar3 < uVar8) {
    uVar4 = uVar3;
  }
  iVar9 = uVar8 - uVar4;
  uVar3 = (iVar9 - 2U >> 1) + 1;
  iVar5 = uVar3 * 2;
  pdVar26 = pdVar18;
joined_r0x00315aa4:
  while( true ) {
    do {
      pdVar29 = pdVar26;
      iVar6 = iVar6 + -1;
      if (iVar6 == 0) {
        if (0 < (int)uVar7) {
          if ((pdVar41 < pdVar30 + 2 && pdVar30 < pdVar41 + 2) || (uVar7 < 0xe)) {
            lVar32 = 0;
            do {
              pdVar41[lVar32] = pdVar30[lVar32];
              lVar32 = lVar32 + 1;
            } while ((int)lVar32 < (int)uVar7);
          }
          else {
            uVar2 = (uint)((ulong)pdVar30 >> 3) & 1;
            if (uVar7 < uVar2) {
              uVar2 = uVar7;
            }
            if (uVar2 != 0) {
              *pdVar41 = *pdVar30;
            }
            uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
            iVar5 = uVar1 * 2;
            uVar20 = 0;
            pdVar18 = pdVar41 + uVar2;
            pdVar19 = pdVar30 + uVar2;
            do {
              dVar33 = *pdVar19;
              uVar20 = uVar20 + 1;
              pdVar18[1] = pdVar19[1];
              *pdVar18 = dVar33;
              pdVar18 = pdVar18 + 2;
              pdVar19 = pdVar19 + 2;
            } while (uVar20 < uVar1);
            uVar1 = (uint)(uVar2 != 0) + iVar5;
            if (iVar5 != uVar7 - uVar2) {
              uVar31 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
              *(undefined8 *)((long)pdVar41 + uVar31) = *(undefined8 *)((long)pdVar30 + uVar31);
            }
          }
        }
        if (bVar16) {
          operator_delete__(pdVar30);
        }
        return;
      }
      pdVar18 = pdVar18 + uVar31;
      pdVar26 = pdVar29 + uVar31;
      if (0 < (int)(uVar7 - 3)) {
        if ((pdVar30 < pdVar18 + 8 && pdVar18 < pdVar30 + 8) || (uVar2 < 7)) {
          pdVar23 = pdVar30;
          pdVar21 = pdVar26 + 1;
          do {
            dVar33 = *pdVar21;
            dVar36 = pdVar21[-1];
            if (*pdVar23 <= pdVar21[-1]) {
              dVar36 = *pdVar23;
            }
            *pdVar23 = dVar36;
            if (pdVar23[1] <= dVar33) {
              dVar33 = pdVar23[1];
            }
            pdVar23[1] = dVar33;
            pdVar25 = pdVar21 + 4;
            dVar33 = pdVar21[2];
            dVar36 = pdVar21[1];
            if (pdVar23[2] <= pdVar21[1]) {
              dVar36 = pdVar23[2];
            }
            pdVar23[2] = dVar36;
            if (pdVar23[3] <= dVar33) {
              dVar33 = pdVar23[3];
            }
            pdVar23[3] = dVar33;
            pdVar23 = pdVar23 + 4;
            pdVar21 = pdVar25;
          } while (pdVar25 != pdVar26 + (ulong)uVar20 * 4 + 5);
        }
        else {
          pdVar23 = pdVar30 + 2;
          uVar28 = 0;
          pdVar21 = pdVar18;
          pdVar25 = pdVar18;
          pdVar27 = pdVar30;
          do {
            pdVar10 = pdVar21 + 1;
            dVar38 = *pdVar21;
            dVar40 = pdVar23[1];
            dVar39 = *pdVar23;
            dVar12 = *pdVar23;
            dVar13 = pdVar23[1];
            dVar11 = *pdVar23;
            dVar35 = pdVar23[1];
            uVar28 = uVar28 + 1;
            dVar37 = pdVar21[3];
            dVar34 = pdVar21[2];
            dVar14 = *pdVar25;
            pdVar15 = pdVar25 + 1;
            pdVar21 = pdVar21 + 4;
            dVar33 = pdVar25[2];
            dVar36 = pdVar25[3];
            pdVar25 = pdVar25 + 4;
            pdVar27[1] = (double)((ulong)pdVar27[1] ^
                                 ((ulong)pdVar27[1] ^ (ulong)*pdVar15) &
                                 -(ulong)(*pdVar10 < pdVar27[1]));
            *pdVar27 = (double)((ulong)*pdVar27 ^
                               ((ulong)*pdVar27 ^ (ulong)dVar14) & -(ulong)(dVar38 < *pdVar27));
            pdVar27 = pdVar27 + 4;
            pdVar23[1] = (double)((ulong)dVar13 ^
                                 ((ulong)dVar35 ^ (ulong)dVar36) & -(ulong)(dVar37 < dVar40));
            *pdVar23 = (double)((ulong)dVar12 ^
                               ((ulong)dVar11 ^ (ulong)dVar33) & -(ulong)(dVar34 < dVar39));
                    /* try { // try from 00315b3c to 00415d0b has its CatchHandler @ 00316e60 */
            pdVar23 = pdVar23 + 4;
          } while (uVar28 < uVar2);
        }
      }
    } while ((int)uVar7 <= (int)uVar1);
    if ((pdVar30 + lVar32 + 2 <= pdVar29 + lVar32 + uVar31 ||
         pdVar29 + uVar31 + 2 + lVar32 <= pdVar19) && (6 < uVar8)) break;
    lVar22 = 0;
    do {
      dVar33 = *(double *)((long)pdVar26 + lVar22 + lVar32 * 8);
      if (*(double *)((long)pdVar19 + lVar22) <= dVar33) {
        dVar33 = *(double *)((long)pdVar19 + lVar22);
      }
      *(double *)((long)pdVar19 + lVar22) = dVar33;
      lVar22 = lVar22 + 8;
    } while (lVar22 != ((ulong)((uVar7 - 1) - uVar1) + 1) * 8);
  }
  uVar28 = uVar1;
  if (uVar4 != 0) {
    dVar33 = pdVar26[lVar32];
    if (*pdVar19 <= pdVar26[lVar32]) {
      dVar33 = *pdVar19;
    }
    *pdVar19 = dVar33;
    uVar28 = uVar1 + 1;
  }
  if (iVar9 != 1) goto code_r0x00315b9c;
  goto LAB_00315bd8;
code_r0x00315b9c:
  uVar24 = 0;
  pdVar23 = pdVar30 + lVar32 + (ulong)uVar4;
  pdVar21 = pdVar30 + (ulong)uVar4 + lVar32;
  pdVar29 = pdVar29 + lVar32 + uVar31 + (ulong)uVar4;
  do {
    dVar35 = *pdVar23;
    dVar11 = *pdVar23;
    dVar36 = *pdVar23;
    uVar24 = uVar24 + 1;
    dVar33 = *pdVar29;
    pdVar21[1] = (double)((ulong)pdVar23[1] ^
                         ((ulong)pdVar23[1] ^ (ulong)pdVar29[1]) & -(ulong)(pdVar29[1] < pdVar23[1])
                         );
    *pdVar21 = (double)((ulong)dVar11 ^ ((ulong)dVar36 ^ (ulong)dVar33) & -(ulong)(dVar33 < dVar35))
    ;
    pdVar23 = pdVar23 + 2;
    pdVar21 = pdVar21 + 2;
    pdVar29 = pdVar29 + 2;
  } while (uVar24 < uVar3);
  uVar28 = uVar28 + iVar5;
  if (iVar9 != iVar5) {
LAB_00315bd8:
    uVar17 = -(ulong)(uVar28 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar28 << 3;
    dVar33 = *(double *)((long)pdVar26 + uVar17);
    if (*(double *)((long)pdVar30 + uVar17) <= *(double *)((long)pdVar26 + uVar17)) {
      dVar33 = *(double *)((long)pdVar30 + uVar17);
    }
    *(double *)((long)pdVar30 + uVar17) = dVar33;
  }
  goto joined_r0x00315aa4;
}


==================================================================

### FUNC 00315dfc (1392 bytes) name=FUN_00315dfc

void FUN_00315dfc(uint *param_1,long param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  double *pdVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double *pdVar15;
  bool bVar16;
  ulong uVar17;
  double *pdVar18;
  double *pdVar19;
  uint uVar20;
  double *pdVar21;
  long lVar22;
  double *pdVar23;
  uint uVar24;
  double *pdVar25;
  double *pdVar26;
  double *pdVar27;
  uint uVar28;
  double *pdVar29;
  double *pdVar30;
  ulong uVar31;
  long lVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double dVar39;
  double dVar40;
  double *pdVar41;
  double adStack_440 [136];
  
  pdVar30 = adStack_440;
  iVar5 = (*(int **)(param_1 + 0x10))[1];
  iVar6 = **(int **)(param_1 + 0x10);
  uVar7 = iVar5 + (*param_1 >> 3 & 0x1ff) * iVar5;
  uVar31 = (ulong)(int)uVar7;
  if (uVar31 < 0x89) {
    bVar16 = false;
  }
  else {
    uVar17 = uVar31 << 3;
    if (0xfe0000000000000 < uVar31) {
      uVar17 = 0xffffffffffffffff;
    }
    pdVar18 = operator_new__(uVar17);
    bVar16 = pdVar18 != pdVar30;
    pdVar30 = pdVar18;
  }
  pdVar41 = *(double **)(param_2 + 0x10);
  pdVar18 = *(double **)(param_1 + 4);
  uVar31 = *(ulong *)(param_1 + 0x14) >> 3;
  if (0 < (int)uVar7) {
    if ((pdVar18 < pdVar30 + 2 && pdVar30 < pdVar18 + 2) || (uVar7 < 0xe)) {
      lVar32 = 0;
      do {
        pdVar30[lVar32] = pdVar18[lVar32];
        lVar32 = lVar32 + 1;
                    /* try { // try from 00316364 to 00416367 has its CatchHandler @ 00316f68 */
      } while ((int)lVar32 < (int)uVar7);
    }
    else {
      uVar1 = (uint)((ulong)pdVar18 >> 3) & 1;
      uVar2 = uVar7;
      if (uVar1 < uVar7) {
        uVar2 = uVar1;
      }
      if (uVar2 != 0) {
        *pdVar30 = *pdVar18;
      }
      uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
      uVar20 = 0;
      iVar5 = uVar1 * 2;
      pdVar19 = pdVar30 + uVar2;
      pdVar26 = pdVar18 + uVar2;
      do {
        dVar33 = *pdVar26;
        uVar20 = uVar20 + 1;
        pdVar19[1] = pdVar26[1];
        *pdVar19 = dVar33;
        pdVar19 = pdVar19 + 2;
        pdVar26 = pdVar26 + 2;
      } while (uVar20 < uVar1);
      uVar1 = (uint)(uVar2 != 0) + iVar5;
      if (uVar7 - uVar2 != iVar5) {
        uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
        *(undefined8 *)((long)pdVar30 + uVar17) = *(undefined8 *)((long)pdVar18 + uVar17);
      }
    }
  }
  uVar20 = uVar7 - 4 >> 2;
                    /* try { // try from 00315f48 to 00415f6f has its CatchHandler @ 00316e60 */
  uVar2 = uVar20 + 1;
  uVar1 = uVar2 * 4;
  if ((int)(uVar7 - 3) < 1) {
    uVar1 = 0;
  }
  uVar8 = uVar7 - uVar1;
  lVar32 = (long)(int)uVar1;
  pdVar19 = pdVar30 + lVar32;
  uVar3 = (uint)((ulong)pdVar19 >> 3) & 1;
  uVar4 = uVar8;
  if (uVar3 < uVar8) {
    uVar4 = uVar3;
  }
  iVar9 = uVar8 - uVar4;
                    /* try { // try from 00315fe0 to 00415fe3 has its CatchHandler @ 00316d54 */
  uVar3 = (iVar9 - 2U >> 1) + 1;
  iVar5 = uVar3 * 2;
  pdVar26 = pdVar18;
joined_r0x00316014:
  while( true ) {
    do {
      pdVar29 = pdVar26;
      iVar6 = iVar6 + -1;
      if (iVar6 == 0) {
        if (0 < (int)uVar7) {
          if ((pdVar41 < pdVar30 + 2 && pdVar30 < pdVar41 + 2) || (uVar7 < 0xe)) {
            lVar32 = 0;
            do {
              pdVar41[lVar32] = pdVar30[lVar32];
              lVar32 = lVar32 + 1;
            } while ((int)lVar32 < (int)uVar7);
          }
          else {
            uVar2 = (uint)((ulong)pdVar30 >> 3) & 1;
            if (uVar7 < uVar2) {
              uVar2 = uVar7;
            }
            if (uVar2 != 0) {
              *pdVar41 = *pdVar30;
            }
                    /* try { // try from 003161e0 to 004161e3 has its CatchHandler @ 00316e70 */
            uVar1 = ((uVar7 - uVar2) - 2 >> 1) + 1;
            iVar5 = uVar1 * 2;
            uVar20 = 0;
            pdVar18 = pdVar41 + uVar2;
            pdVar19 = pdVar30 + uVar2;
            do {
              dVar33 = *pdVar19;
              uVar20 = uVar20 + 1;
              pdVar18[1] = pdVar19[1];
              *pdVar18 = dVar33;
              pdVar18 = pdVar18 + 2;
              pdVar19 = pdVar19 + 2;
            } while (uVar20 < uVar1);
            uVar1 = (uint)(uVar2 != 0) + iVar5;
            if (iVar5 != uVar7 - uVar2) {
              uVar31 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
              *(undefined8 *)((long)pdVar41 + uVar31) = *(undefined8 *)((long)pdVar30 + uVar31);
            }
          }
        }
        if (bVar16) {
          operator_delete__(pdVar30);
        }
                    /* try { // try from 00316254 to 00416257 has its CatchHandler @ 00316e78 */
        return;
      }
      pdVar18 = pdVar18 + uVar31;
      pdVar26 = pdVar29 + uVar31;
      if (0 < (int)(uVar7 - 3)) {
        if ((pdVar30 < pdVar18 + 8 && pdVar18 < pdVar30 + 8) || (uVar2 < 7)) {
          pdVar23 = pdVar30;
          pdVar21 = pdVar26 + 1;
          do {
            dVar33 = *pdVar21;
            dVar36 = pdVar21[-1];
            if (pdVar21[-1] <= *pdVar23) {
              dVar36 = *pdVar23;
            }
            *pdVar23 = dVar36;
            if (dVar33 <= pdVar23[1]) {
              dVar33 = pdVar23[1];
            }
            pdVar23[1] = dVar33;
            pdVar25 = pdVar21 + 4;
            dVar33 = pdVar21[2];
            dVar36 = pdVar21[1];
            if (pdVar21[1] <= pdVar23[2]) {
                    /* try { // try from 003162f0 to 004162f3 has its CatchHandler @ 00316c24 */
              dVar36 = pdVar23[2];
            }
            pdVar23[2] = dVar36;
            if (dVar33 <= pdVar23[3]) {
              dVar33 = pdVar23[3];
            }
            pdVar23[3] = dVar33;
            pdVar23 = pdVar23 + 4;
            pdVar21 = pdVar25;
          } while (pdVar25 != pdVar26 + (ulong)uVar20 * 4 + 5);
        }
        else {
          pdVar23 = pdVar30 + 2;
                    /* try { // try from 00316054 to 00416057 has its CatchHandler @ 00316e58 */
          uVar28 = 0;
          pdVar21 = pdVar18;
          pdVar25 = pdVar18;
          pdVar27 = pdVar30;
          do {
            pdVar10 = pdVar21 + 1;
            dVar38 = *pdVar21;
            dVar40 = pdVar23[1];
            dVar39 = *pdVar23;
            dVar12 = *pdVar23;
            dVar13 = pdVar23[1];
            dVar11 = *pdVar23;
            dVar35 = pdVar23[1];
            uVar28 = uVar28 + 1;
            dVar37 = pdVar21[3];
            dVar34 = pdVar21[2];
            dVar14 = *pdVar25;
            pdVar15 = pdVar25 + 1;
            pdVar21 = pdVar21 + 4;
            dVar33 = pdVar25[2];
            dVar36 = pdVar25[3];
            pdVar25 = pdVar25 + 4;
            pdVar27[1] = (double)((ulong)pdVar27[1] ^
                                 ((ulong)pdVar27[1] ^ (ulong)*pdVar15) &
                                 -(ulong)(pdVar27[1] < *pdVar10));
            *pdVar27 = (double)((ulong)*pdVar27 ^
                               ((ulong)*pdVar27 ^ (ulong)dVar14) & -(ulong)(*pdVar27 < dVar38));
            pdVar27 = pdVar27 + 4;
            pdVar23[1] = (double)((ulong)dVar13 ^
                                 ((ulong)dVar35 ^ (ulong)dVar36) & -(ulong)(dVar40 < dVar37));
            *pdVar23 = (double)((ulong)dVar12 ^
                               ((ulong)dVar11 ^ (ulong)dVar33) & -(ulong)(dVar39 < dVar34));
            pdVar23 = pdVar23 + 4;
          } while (uVar28 < uVar2);
        }
      }
    } while ((int)uVar7 <= (int)uVar1);
    if ((pdVar30 + lVar32 + 2 <= pdVar29 + lVar32 + uVar31 ||
         pdVar29 + uVar31 + 2 + lVar32 <= pdVar19) && (6 < uVar8)) break;
    lVar22 = 0;
    do {
      dVar33 = *(double *)((long)pdVar26 + lVar22 + lVar32 * 8);
      if (dVar33 <= *(double *)((long)pdVar19 + lVar22)) {
        dVar33 = *(double *)((long)pdVar19 + lVar22);
      }
      *(double *)((long)pdVar19 + lVar22) = dVar33;
      lVar22 = lVar22 + 8;
    } while (lVar22 != ((ulong)((uVar7 - 1) - uVar1) + 1) * 8);
  }
  uVar28 = uVar1;
  if (uVar4 != 0) {
    dVar33 = pdVar26[lVar32];
    if (pdVar26[lVar32] <= *pdVar19) {
                    /* try { // try from 003160f8 to 004160fb has its CatchHandler @ 00316fd8 */
      dVar33 = *pdVar19;
    }
    *pdVar19 = dVar33;
    uVar28 = uVar1 + 1;
  }
  if (iVar9 != 1) goto code_r0x0031610c;
  goto LAB_00316148;
code_r0x0031610c:
  uVar24 = 0;
  pdVar23 = pdVar30 + lVar32 + (ulong)uVar4;
  pdVar21 = pdVar30 + (ulong)uVar4 + lVar32;
  pdVar29 = pdVar29 + lVar32 + uVar31 + (ulong)uVar4;
  do {
    dVar35 = *pdVar23;
    dVar11 = *pdVar23;
    dVar36 = *pdVar23;
    uVar24 = uVar24 + 1;
    dVar33 = *pdVar29;
    pdVar21[1] = (double)((ulong)pdVar23[1] ^
                         ((ulong)pdVar23[1] ^ (ulong)pdVar29[1]) & -(ulong)(pdVar23[1] < pdVar29[1])
                         );
    *pdVar21 = (double)((ulong)dVar11 ^ ((ulong)dVar36 ^ (ulong)dVar33) & -(ulong)(dVar35 < dVar33))
    ;
    pdVar23 = pdVar23 + 2;
    pdVar21 = pdVar21 + 2;
    pdVar29 = pdVar29 + 2;
  } while (uVar24 < uVar3);
  uVar28 = uVar28 + iVar5;
  if (iVar9 != iVar5) {
LAB_00316148:
    uVar17 = -(ulong)(uVar28 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar28 << 3;
    dVar33 = *(double *)((long)pdVar26 + uVar17);
    if (*(double *)((long)pdVar26 + uVar17) <= *(double *)((long)pdVar30 + uVar17)) {
      dVar33 = *(double *)((long)pdVar30 + uVar17);
    }
    *(double *)((long)pdVar30 + uVar17) = dVar33;
  }
  goto joined_r0x00316014;
}


==================================================================

### FUNC 0031636c (3480 bytes) name=FUN_0031636c

void FUN_0031636c(uint *param_1,long param_2)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  uint *puVar7;
  long lVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  uint3 uVar16;
  undefined1 auVar17 [13];
  uint *puVar18;
  bool bVar19;
  ulong uVar20;
  uint *puVar21;
  float *pfVar22;
  ulong *puVar23;
  undefined1 (*pauVar24) [16];
  long lVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  uint *puVar29;
  long lVar30;
  uint *puVar31;
  uint uVar32;
  uint *puVar33;
  float *pfVar34;
  uint uVar35;
  uint uVar36;
  uint uVar37;
  uint *puVar38;
  byte *pbVar39;
  uint *puVar40;
  ulong uVar41;
  long lVar42;
  int iVar43;
  uint *puVar44;
  byte bVar45;
  byte bVar46;
  byte bVar47;
  undefined1 auVar48 [16];
  undefined8 uVar49;
  undefined8 uVar50;
  undefined8 uVar51;
  undefined8 uVar52;
  undefined8 uVar53;
  undefined8 uVar54;
  undefined8 uVar55;
  undefined8 uVar56;
  undefined8 uVar57;
  int iVar58;
  uint auStack_420 [264];
  
  puVar31 = auStack_420;
  iVar11 = (*(int **)(param_1 + 0x10))[1];
  iVar12 = **(int **)(param_1 + 0x10);
  uVar13 = iVar11 + (*param_1 >> 3 & 0x1ff) * iVar11;
  uVar41 = (ulong)(int)uVar13;
  if (uVar41 < 0x109) {
    bVar19 = false;
  }
  else {
    uVar20 = uVar41 << 2;
                    /* try { // try from 003163e8 to 004163eb has its CatchHandler @ 00316d90 */
    if (0x1fc0000000000000 < uVar41) {
      uVar20 = 0xffffffffffffffff;
    }
    puVar21 = operator_new__(uVar20);
    bVar19 = puVar21 != puVar31;
    puVar31 = puVar21;
  }
  pfVar22 = *(float **)(param_2 + 0x10);
  puVar21 = *(uint **)(param_1 + 4);
  lVar42 = *(long *)(param_1 + 0x14);
  if (0 < (int)uVar13) {
    if ((puVar21 < puVar31 + uVar41 && puVar31 < (uint *)((long)puVar21 + uVar41)) ||
       (uVar13 < 0x15)) {
      lVar25 = 0;
      do {
        puVar31[lVar25] = (uint)*(byte *)((long)puVar21 + lVar25);
        lVar25 = lVar25 + 1;
      } while ((int)lVar25 < (int)uVar13);
    }
    else {
      uVar35 = -((uint)((ulong)puVar31 >> 2) & 3) & 3;
      uVar2 = uVar13;
      if (uVar35 < uVar13) {
        uVar2 = uVar35;
      }
      uVar35 = uVar2;
                    /* try { // try from 0031646c to 0041646f has its CatchHandler @ 00316e1c */
      if ((uVar2 != 0) && (*puVar31 = (uint)(byte)*puVar21, uVar2 != 1)) {
        puVar31[1] = (uint)*(byte *)((long)puVar21 + 1);
        if (uVar2 == 3) {
          puVar31[2] = (uint)*(byte *)((long)puVar21 + 2);
        }
        else {
          uVar35 = 2;
        }
      }
      uVar36 = 0;
      uVar32 = ((uVar13 - uVar2) - 0x10 >> 4) + 1;
      iVar11 = uVar32 * 0x10;
      puVar23 = (ulong *)(puVar31 + uVar2);
      pauVar24 = (undefined1 (*) [16])((long)puVar21 + (ulong)uVar2);
      do {
        auVar48 = *pauVar24;
                    /* try { // try from 003164bc to 004164bf has its CatchHandler @ 00316c2c */
        uVar36 = uVar36 + 1;
        uVar16 = CONCAT12(auVar48[1],auVar48._0_2_) & 0xff00ff;
                    /* try { // try from 003164d4 to 004164e3 has its CatchHandler @ 00316c24 */
        uVar41 = CONCAT35(0,CONCAT14(auVar48[0xd],(uint)auVar48[0xc]));
        auVar17[8] = auVar48[0xe];
        auVar17._0_8_ = uVar41;
        auVar17._9_3_ = 0;
        auVar17[0xc] = auVar48[0xf];
        puVar23[1] = (ulong)CONCAT14(auVar48[3],(uint)auVar48[2]);
        *puVar23 = (ulong)((uint6)CONCAT14((char)(uVar16 >> 0x10),(uint)uVar16) & 0xffff0000ffff);
                    /* try { // try from 003164ec to 004164ef has its CatchHandler @ 0031670c */
        puVar23[3] = (ulong)CONCAT14(auVar48[7],(uint)auVar48[6]);
        puVar23[2] = (ulong)((uint6)CONCAT14(auVar48[5],
                                             (uint)CONCAT12(auVar48[5],(ushort)auVar48[4])) &
                            0xffff0000ffff);
        puVar23[5] = (ulong)CONCAT14(auVar48[0xb],(uint)auVar48[10]);
        puVar23[4] = (ulong)((uint6)CONCAT14(auVar48[9],
                                             (uint)CONCAT12(auVar48[9],(ushort)auVar48[8])) &
                            0xffff0000ffff);
        puVar23[7] = (ulong)auVar17._8_5_;
        puVar23[6] = uVar41;
        puVar23 = puVar23 + 8;
        pauVar24 = pauVar24 + 1;
                    /* try { // try from 003164f8 to 004164fb has its CatchHandler @ 00316714 */
      } while (uVar36 < uVar32);
      iVar6 = uVar35 + iVar11;
      if (uVar13 - uVar2 != iVar11) {
        iVar11 = iVar6 + 1;
        puVar31[iVar6] = (uint)*(byte *)((long)puVar21 + (long)iVar6);
        if (iVar11 < (int)uVar13) {
          iVar1 = iVar6 + 2;
          puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
          if (iVar1 < (int)uVar13) {
            iVar11 = iVar6 + 3;
            puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
            if (iVar11 < (int)uVar13) {
              iVar1 = iVar6 + 4;
              puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
              if (iVar1 < (int)uVar13) {
                iVar11 = iVar6 + 5;
                puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
                if (iVar11 < (int)uVar13) {
                  iVar1 = iVar6 + 6;
                  puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
                  if (iVar1 < (int)uVar13) {
                    iVar11 = iVar6 + 7;
                    puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
                    if (iVar11 < (int)uVar13) {
                      iVar1 = iVar6 + 8;
                    /* try { // try from 003165b8 to 004165bb has its CatchHandler @ 0031671c */
                      puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
                    /* try { // try from 003165c4 to 004165c7 has its CatchHandler @ 00316c2c */
                      if (iVar1 < (int)uVar13) {
                        iVar11 = iVar6 + 9;
                    /* try { // try from 003165d0 to 004165e7 has its CatchHandler @ 00316604 */
                        puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
                        if (iVar11 < (int)uVar13) {
                          iVar1 = iVar6 + 10;
                          puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
                          if (iVar1 < (int)uVar13) {
                            iVar11 = iVar6 + 0xb;
                    /* catch() { ... } // from try @ 00315078 with catch @ 00316604
                       catch() { ... } // from try @ 00315198 with catch @ 00316604
                       catch() { ... } // from try @ 003165d0 with catch @ 00316604 */
                            puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
                            if (iVar11 < (int)uVar13) {
                              iVar1 = iVar6 + 0xc;
                              puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
                              if (iVar1 < (int)uVar13) {
                                iVar11 = iVar6 + 0xd;
                                puVar31[iVar1] = (uint)*(byte *)((long)puVar21 + (long)iVar1);
                                if (iVar11 < (int)uVar13) {
                                  iVar6 = iVar6 + 0xe;
                                  puVar31[iVar11] = (uint)*(byte *)((long)puVar21 + (long)iVar11);
                                  if (iVar6 < (int)uVar13) {
                                    puVar31[iVar6] = (uint)*(byte *)((long)puVar21 + (long)iVar6);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  uVar36 = uVar13 - 4;
  iVar1 = uVar13 - 3;
  uVar32 = uVar36 >> 2;
  uVar35 = uVar32 + 1;
  uVar2 = (uVar32 - 3 >> 2) + 1;
  iVar6 = uVar35 * 4;
  iVar11 = uVar2 * 0x10;
                    /* try { // try from 003166d4 to 004166d7 has its CatchHandler @ 00314600 */
  if (uVar36 < 0xc) {
    iVar11 = 0;
  }
                    /* try { // try from 003166e0 to 004166e3 has its CatchHandler @ 00316c24 */
                    /* catch() { ... } // from try @ 00315128 with catch @ 003166e8 */
  if (iVar1 < 1) {
    iVar6 = 0;
  }
  uVar14 = uVar13 - iVar6;
  iVar3 = iVar6 + 1;
  lVar25 = (long)iVar6;
                    /* catch() { ... } // from try @ 00314e40 with catch @ 0031670c
                       catch() { ... } // from try @ 0031524c with catch @ 0031670c
                       catch() { ... } // from try @ 003164ec with catch @ 0031670c */
                    /* catch() { ... } // from try @ 00314e14 with catch @ 00316714
                       catch() { ... } // from try @ 003152d0 with catch @ 00316714
                       catch() { ... } // from try @ 003164f8 with catch @ 00316714 */
                    /* catch() { ... } // from try @ 00315054 with catch @ 0031671c
                       catch() { ... } // from try @ 003165b8 with catch @ 0031671c */
  lVar26 = (long)iVar11;
                    /* try { // try from 00316728 to 0041672b has its CatchHandler @ 00316c5c */
                    /* try { // try from 00316738 to 0041673b has its CatchHandler @ 00316d5c */
  puVar7 = puVar31 + lVar25;
                    /* try { // try from 0031674c to 0041674f has its CatchHandler @ 00316e58 */
  uVar9 = -((uint)((ulong)puVar7 >> 2) & 3) & 3;
  lVar27 = (long)(iVar11 + 4);
                    /* try { // try from 0031675c to 0041675f has its CatchHandler @ 00317004 */
  uVar10 = uVar14;
  if (uVar9 < uVar14) {
    uVar10 = uVar9;
  }
                    /* try { // try from 00316770 to 00416773 has its CatchHandler @ 00316d54 */
  lVar28 = (long)(iVar11 + 8);
                    /* try { // try from 0031677c to 0041677f has its CatchHandler @ 00316e58 */
                    /* try { // try from 00316788 to 0041678b has its CatchHandler @ 00316e60 */
                    /* try { // try from 00316794 to 00416797 has its CatchHandler @ 00316c5c */
  iVar4 = iVar6 + 2;
  lVar8 = lVar25 + lVar42;
  uVar9 = ((uVar14 - uVar10) - 0x10 >> 4) + 1;
  iVar58 = uVar9 * 0x10;
                    /* try { // try from 00316890 to 00416893 has its CatchHandler @ 00316fe0 */
joined_r0x00316934:
  do {
    puVar18 = puVar21;
    iVar12 = iVar12 + -1;
    if (iVar12 == 0) break;
    puVar21 = (uint *)((long)puVar18 + lVar42);
    if (0 < iVar1) {
      if ((puVar21 < puVar31 + (ulong)uVar35 * 4 &&
           puVar31 < (uint *)((long)puVar18 + lVar42 + (ulong)uVar35 * 4)) || (uVar35 < 4)) {
        pbVar39 = (byte *)((long)puVar21 + 1);
        puVar38 = puVar31;
        do {
                    /* catch() { ... } // from try @ 00317098 with catch @ 00317050
                       catch() { ... } // from try @ 00317130 with catch @ 00317050
                       catch() { ... } // from try @ 00317c34 with catch @ 00317050
                       catch() { ... } // from try @ 00318424 with catch @ 00317050
                       catch() { ... } // from try @ 003184c0 with catch @ 00317050
                       catch() { ... } // from try @ 00318c28 with catch @ 00317050
                       catch() { ... } // from try @ 003192a4 with catch @ 00317050
                       catch() { ... } // from try @ 0031943c with catch @ 00317050
                       catch() { ... } // from try @ 003194cc with catch @ 00317050 */
          pbVar5 = pbVar39 + 4;
          bVar45 = pbVar39[-1];
          puVar38[1] = (uint)*pbVar39 + puVar38[1];
          *puVar38 = *puVar38 + (uint)bVar45;
          bVar45 = pbVar39[1];
          puVar38[3] = (uint)pbVar39[2] + puVar38[3];
                    /* try { // try from 00317098 to 004170d7 has its CatchHandler @ 00317050 */
          puVar38[2] = puVar38[2] + (uint)bVar45;
          pbVar39 = pbVar5;
          puVar38 = puVar38 + 4;
        } while (pbVar5 != (byte *)((long)puVar21 + (ulong)uVar32 * 4 + 5));
      }
      else {
        if (0xb < uVar36) {
          puVar38 = puVar31 + 4;
          puVar33 = puVar31 + 8;
          puVar29 = puVar31 + 0xc;
          uVar37 = 0;
          puVar40 = puVar31;
          puVar44 = puVar21;
          do {
            uVar50 = *(undefined8 *)(puVar44 + 2);
            uVar49 = *(undefined8 *)puVar44;
            uVar37 = uVar37 + 1;
            uVar56 = *(undefined8 *)(puVar38 + 2);
            uVar55 = *(undefined8 *)puVar38;
            uVar54 = *(undefined8 *)(puVar33 + 2);
            uVar53 = *(undefined8 *)puVar33;
            uVar52 = *(undefined8 *)(puVar29 + 2);
            uVar51 = *(undefined8 *)puVar29;
            bVar45 = (byte)((ulong)uVar49 >> 8);
            bVar46 = (byte)((ulong)uVar49 >> 0x28);
            uVar16 = CONCAT12((char)((ulong)uVar50 >> 8),(short)uVar50) & 0xff00ff;
            bVar47 = (byte)((ulong)uVar50 >> 0x28);
            iVar43 = (int)((ulong)uVar55 >> 0x20) + (uint)bVar46;
            *(ulong *)(puVar40 + 2) =
                 CONCAT44((int)((ulong)*(undefined8 *)(puVar40 + 2) >> 0x20) +
                          (uint)(byte)((ulong)uVar49 >> 0x18),
                          (int)*(undefined8 *)(puVar40 + 2) + (uint)(byte)((ulong)uVar49 >> 0x10));
            *(ulong *)puVar40 =
                 CONCAT44((int)((ulong)*(undefined8 *)puVar40 >> 0x20) + (uint)bVar45,
                          (int)*(undefined8 *)puVar40 +
                          (CONCAT12(bVar45,(ushort)(byte)uVar49) & 0xffff));
            puVar40 = puVar40 + 0x10;
            *(ulong *)(puVar38 + 2) =
                 CONCAT44((int)((ulong)uVar56 >> 0x20) + (uint)(byte)((ulong)uVar49 >> 0x38),
                          (int)uVar56 + (uint)(byte)((ulong)uVar49 >> 0x30));
            *(ulong *)puVar38 =
                 CONCAT26((short)((uint)iVar43 >> 0x10),
                          CONCAT24((short)iVar43,
                                   (int)uVar55 +
                                   (CONCAT12(bVar46,(ushort)(byte)((ulong)uVar49 >> 0x20)) & 0xffff)
                                  ));
            puVar38 = puVar38 + 0x10;
            *(ulong *)(puVar33 + 2) =
                 CONCAT44((int)((ulong)uVar54 >> 0x20) + (uint)(byte)((ulong)uVar50 >> 0x18),
                          (int)uVar54 + (uint)(byte)((ulong)uVar50 >> 0x10));
            *(ulong *)puVar33 =
                 CONCAT44((int)((ulong)uVar53 >> 0x20) + (uint)(byte)(uVar16 >> 0x10),
                          (int)uVar53 + (uVar16 & 0xffff));
            puVar33 = puVar33 + 0x10;
            *(ulong *)(puVar29 + 2) =
                 CONCAT44((int)((ulong)uVar52 >> 0x20) + (uint)(byte)((ulong)uVar50 >> 0x38),
                          (int)uVar52 + (uint)(byte)((ulong)uVar50 >> 0x30));
            *(ulong *)puVar29 =
                 CONCAT44((int)((ulong)uVar51 >> 0x20) + (uint)bVar47,
                          (int)uVar51 +
                          (CONCAT12(bVar47,(ushort)(byte)((ulong)uVar50 >> 0x20)) & 0xffff));
            puVar29 = puVar29 + 0x10;
            puVar44 = puVar44 + 4;
                    /* try { // try from 003169f8 to 00416a4f has its CatchHandler @ 00316e60 */
          } while (uVar37 < uVar2);
          if (uVar35 == uVar2 * 4) goto LAB_00316b20;
        }
        bVar45 = *(byte *)((long)puVar21 + lVar26 + 1);
        puVar31[lVar26] = puVar31[lVar26] + (uint)*(byte *)((long)puVar21 + lVar26);
        puVar31[lVar26 + 1] = (uint)bVar45 + puVar31[lVar26 + 1];
        bVar45 = *(byte *)((long)puVar21 + lVar26 + 3);
                    /* try { // try from 00316a58 to 00416a5b has its CatchHandler @ 00316d54 */
        puVar31[lVar26 + 2] = puVar31[lVar26 + 2] + (uint)*(byte *)((long)puVar21 + lVar26 + 2);
        puVar31[lVar26 + 3] = (uint)bVar45 + puVar31[lVar26 + 3];
                    /* try { // try from 00316a64 to 00416a67 has its CatchHandler @ 00316d5c */
        if (iVar11 + 4 < iVar1) {
          bVar45 = *(byte *)((long)puVar21 + lVar27 + 1);
          puVar31[lVar27] = puVar31[lVar27] + (uint)*(byte *)((long)puVar21 + lVar27);
          puVar31[lVar27 + 1] = (uint)bVar45 + puVar31[lVar27 + 1];
          bVar45 = *(byte *)((long)puVar21 + lVar27 + 3);
          puVar31[lVar27 + 2] = puVar31[lVar27 + 2] + (uint)*(byte *)((long)puVar21 + lVar27 + 2);
          puVar31[lVar27 + 3] = (uint)bVar45 + puVar31[lVar27 + 3];
          if (iVar11 + 8 < iVar1) {
            bVar45 = *(byte *)((long)puVar21 + lVar28 + 1);
            puVar31[lVar28] = puVar31[lVar28] + (uint)*(byte *)((long)puVar21 + lVar28);
            puVar31[lVar28 + 1] = (uint)bVar45 + puVar31[lVar28 + 1];
            bVar45 = *(byte *)((long)puVar21 + lVar28 + 3);
            puVar31[lVar28 + 2] = puVar31[lVar28 + 2] + (uint)*(byte *)((long)puVar21 + lVar28 + 2);
            puVar31[lVar28 + 3] = (uint)bVar45 + puVar31[lVar28 + 3];
          }
        }
      }
    }
LAB_00316b20:
    if (iVar6 < (int)uVar13) {
                    /* try { // try from 00316b48 to 00416b4b has its CatchHandler @ 00316e60 */
                    /* try { // try from 00316b54 to 00416b57 has its CatchHandler @ 00317004 */
      if (((uint *)((long)puVar18 + lVar8) < puVar31 + (ulong)uVar14 + lVar25 &&
           puVar7 < (uint *)((long)puVar18 + lVar8 + (ulong)uVar14)) || (uVar14 < 0x13)) {
        lVar30 = 0;
        do {
          puVar7[lVar30] = puVar7[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30 + lVar25);
          lVar30 = lVar30 + 1;
                    /* catch() { ... } // from try @ 00316fc8 with catch @ 00317028 */
        } while (lVar30 != (ulong)((uVar13 - 1) - iVar6) + 1);
        goto joined_r0x00316934;
      }
      iVar43 = iVar6;
                    /* try { // try from 00316b8c to 00416b8f has its CatchHandler @ 00316fe0 */
      if ((uVar10 != 0) &&
         ((*puVar7 = *puVar7 + (uint)*(byte *)((long)puVar21 + lVar25), iVar43 = iVar3, uVar10 != 1
          && (puVar31[iVar3] = puVar31[iVar3] + (uint)*(byte *)((long)puVar21 + (long)iVar3),
             iVar43 = iVar4, uVar10 == 3)))) {
                    /* try { // try from 00316ba0 to 00416ba3 has its CatchHandler @ 00316d54 */
        puVar31[iVar4] = puVar31[iVar4] + (uint)*(byte *)((long)puVar21 + (long)iVar4);
        iVar43 = iVar6 + 3;
      }
                    /* try { // try from 00316bb8 to 00416bbb has its CatchHandler @ 00316fe0 */
      if (0xe < (uVar14 - 1) - uVar10) {
        uVar37 = 0;
        puVar38 = puVar31 + lVar25 + (ulong)uVar10;
        puVar33 = puVar31 + (ulong)uVar10 + lVar25;
        pbVar39 = (byte *)((long)puVar18 + lVar8 + (ulong)uVar10);
        do {
          uVar51 = *(undefined8 *)puVar38;
                    /* try { // try from 00316bec to 00416bef has its CatchHandler @ 00316e60 */
          uVar37 = uVar37 + 1;
          uVar55 = *(undefined8 *)(puVar38 + 10);
          uVar54 = *(undefined8 *)(puVar38 + 8);
                    /* try { // try from 00316bf8 to 00416bfb has its CatchHandler @ 00316fd8 */
          uVar50 = *(undefined8 *)(pbVar39 + 8);
          uVar49 = *(undefined8 *)pbVar39;
          bVar45 = (byte)((ulong)uVar49 >> 8);
          bVar46 = (byte)((ulong)uVar49 >> 0x28);
                    /* try { // try from 00316c04 to 00416c07 has its CatchHandler @ 00316e68 */
          uVar16 = CONCAT12((char)((ulong)uVar50 >> 8),(short)uVar50) & 0xff00ff;
          bVar47 = (byte)((ulong)uVar50 >> 0x28);
                    /* try { // try from 00316c10 to 00416c13 has its CatchHandler @ 00316e70 */
          uVar57 = *(undefined8 *)(puVar38 + 6);
          uVar56 = *(undefined8 *)(puVar38 + 4);
                    /* try { // try from 00316c1c to 00416c1f has its CatchHandler @ 00316e78 */
                    /* catch() { ... } // from try @ 00315354 with catch @ 00316c24
                       catch() { ... } // from try @ 003162f0 with catch @ 00316c24
                       catch() { ... } // from try @ 003164d4 with catch @ 00316c24
                       catch() { ... } // from try @ 003166e0 with catch @ 00316c24
                       catch() { ... } // from try @ 00316e84 with catch @ 00316c24
                       catch() { ... } // from try @ 00316f18 with catch @ 00316c24 */
          uVar53 = *(undefined8 *)(puVar38 + 0xe);
          uVar52 = *(undefined8 *)(puVar38 + 0xc);
                    /* catch() { ... } // from try @ 003164bc with catch @ 00316c2c
                       catch() { ... } // from try @ 003165c4 with catch @ 00316c2c */
          iVar15 = (uint)bVar46 + (int)((ulong)uVar56 >> 0x20);
          *(ulong *)(puVar33 + 2) =
               CONCAT44((int)((ulong)*(undefined8 *)(puVar38 + 2) >> 0x20) +
                        (uint)(byte)((ulong)uVar49 >> 0x18),
                        (int)*(undefined8 *)(puVar38 + 2) + (uint)(byte)((ulong)uVar49 >> 0x10));
          *(ulong *)puVar33 =
               CONCAT44((int)((ulong)uVar51 >> 0x20) + (uint)bVar45,
                        (int)uVar51 + (CONCAT12(bVar45,(ushort)(byte)uVar49) & 0xffff));
          *(ulong *)(puVar33 + 6) =
               CONCAT44((uint)(byte)((ulong)uVar49 >> 0x38) + (int)((ulong)uVar57 >> 0x20),
                        (uint)(byte)((ulong)uVar49 >> 0x30) + (int)uVar57);
          *(ulong *)(puVar33 + 4) =
               CONCAT26((short)((uint)iVar15 >> 0x10),
                        CONCAT24((short)iVar15,
                                 (CONCAT12(bVar46,(ushort)(byte)((ulong)uVar49 >> 0x20)) & 0xffff) +
                                 (int)uVar56));
          *(ulong *)(puVar33 + 10) =
               CONCAT44((uint)(byte)((ulong)uVar50 >> 0x18) + (int)((ulong)uVar55 >> 0x20),
                        (uint)(byte)((ulong)uVar50 >> 0x10) + (int)uVar55);
          *(ulong *)(puVar33 + 8) =
               CONCAT44((uint)(byte)(uVar16 >> 0x10) + (int)((ulong)uVar54 >> 0x20),
                        (uVar16 & 0xffff) + (int)uVar54);
          *(ulong *)(puVar33 + 0xe) =
               CONCAT44((uint)(byte)((ulong)uVar50 >> 0x38) + (int)((ulong)uVar53 >> 0x20),
                        (uint)(byte)((ulong)uVar50 >> 0x30) + (int)uVar53);
          *(ulong *)(puVar33 + 0xc) =
               CONCAT44((uint)bVar47 + (int)((ulong)uVar52 >> 0x20),
                        (CONCAT12(bVar47,(ushort)(byte)((ulong)uVar50 >> 0x20)) & 0xffff) +
                        (int)uVar52);
          puVar38 = puVar38 + 0x10;
          puVar33 = puVar33 + 0x10;
          pbVar39 = pbVar39 + 0x10;
        } while (uVar37 < uVar9);
                    /* catch() { ... } // from try @ 00316728 with catch @ 00316c5c
                       catch() { ... } // from try @ 00316794 with catch @ 00316c5c */
        iVar43 = iVar43 + iVar58;
        if (uVar14 - uVar10 == iVar58) goto joined_r0x00316934;
      }
      lVar30 = (long)iVar43;
      puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
      if (iVar43 + 1 < (int)uVar13) {
        lVar30 = (long)(iVar43 + 1);
        puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
        if (iVar43 + 2 < (int)uVar13) {
          lVar30 = (long)(iVar43 + 2);
          puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
          if (iVar43 + 3 < (int)uVar13) {
            lVar30 = (long)(iVar43 + 3);
            puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
            if (iVar43 + 4 < (int)uVar13) {
              lVar30 = (long)(iVar43 + 4);
              puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
              if (iVar43 + 5 < (int)uVar13) {
                lVar30 = (long)(iVar43 + 5);
                puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                if (iVar43 + 6 < (int)uVar13) {
                  lVar30 = (long)(iVar43 + 6);
                    /* catch() { ... } // from try @ 003157b4 with catch @ 00316d54
                       catch() { ... } // from try @ 00315fe0 with catch @ 00316d54
                       catch() { ... } // from try @ 00316770 with catch @ 00316d54
                       catch() { ... } // from try @ 00316a58 with catch @ 00316d54
                       catch() { ... } // from try @ 00316ba0 with catch @ 00316d54 */
                    /* catch() { ... } // from try @ 00316738 with catch @ 00316d5c
                       catch() { ... } // from try @ 00316a64 with catch @ 00316d5c */
                  puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                  if (iVar43 + 7 < (int)uVar13) {
                    lVar30 = (long)(iVar43 + 7);
                    /* catch() { ... } // from try @ 003147ec with catch @ 00316d80 */
                    puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                    /* catch() { ... } // from try @ 003147a0 with catch @ 00316d90
                       catch() { ... } // from try @ 003147f4 with catch @ 00316d90
                       catch() { ... } // from try @ 003148d0 with catch @ 00316d90
                       catch() { ... } // from try @ 00314954 with catch @ 00316d90
                       catch() { ... } // from try @ 003149cc with catch @ 00316d90
                       catch() { ... } // from try @ 003163e8 with catch @ 00316d90
                       catch() { ... } // from try @ 00316e9c with catch @ 00316d90
                       catch() { ... } // from try @ 00316f84 with catch @ 00316d90
                       catch() { ... } // from try @ 00316fd0 with catch @ 00316d90 */
                    if (iVar43 + 8 < (int)uVar13) {
                      lVar30 = (long)(iVar43 + 8);
                    /* try { // try from 00316db0 to 00416db3 has its CatchHandler @ 00316e1c */
                      puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                      if (iVar43 + 9 < (int)uVar13) {
                    /* catch() { ... } // from try @ 0031494c with catch @ 00316db8 */
                        lVar30 = (long)(iVar43 + 9);
                    /* catch() { ... } // from try @ 003149c4 with catch @ 00316dc8 */
                        puVar31[lVar30] = puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                        if (iVar43 + 10 < (int)uVar13) {
                          lVar30 = (long)(iVar43 + 10);
                          puVar31[lVar30] =
                               puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                          if (iVar43 + 0xb < (int)uVar13) {
                            lVar30 = (long)(iVar43 + 0xb);
                    /* catch() { ... } // from try @ 003148c8 with catch @ 00316e0c */
                    /* catch() { ... } // from try @ 0031646c with catch @ 00316e1c
                       catch() { ... } // from try @ 00316db0 with catch @ 00316e1c
                       catch() { ... } // from try @ 00316ea8 with catch @ 00316e1c */
                            puVar31[lVar30] =
                                 puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                            if (iVar43 + 0xc < (int)uVar13) {
                              lVar30 = (long)(iVar43 + 0xc);
                              puVar31[lVar30] =
                                   puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                              if (iVar43 + 0xd < (int)uVar13) {
                                lVar30 = (long)(iVar43 + 0xd);
                    /* try { // try from 00316e50 to 00416e53 has its CatchHandler @ 00316e60 */
                    /* catch() { ... } // from try @ 00316054 with catch @ 00316e58
                       catch() { ... } // from try @ 0031674c with catch @ 00316e58
                       catch() { ... } // from try @ 0031677c with catch @ 00316e58 */
                    /* catch() { ... } // from try @ 00315b3c with catch @ 00316e60
                       catch() { ... } // from try @ 00315f48 with catch @ 00316e60
                       catch() { ... } // from try @ 00316788 with catch @ 00316e60
                       catch() { ... } // from try @ 003169f8 with catch @ 00316e60
                       catch() { ... } // from try @ 00316b48 with catch @ 00316e60
                       catch() { ... } // from try @ 00316bec with catch @ 00316e60
                       catch() { ... } // from try @ 00316e50 with catch @ 00316e60 */
                                puVar31[lVar30] =
                                     puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                    /* catch() { ... } // from try @ 00315670 with catch @ 00316e68
                       catch() { ... } // from try @ 0031616c with catch @ 00316e68
                       catch() { ... } // from try @ 00316c04 with catch @ 00316e68 */
                                if (iVar43 + 0xe < (int)uVar13) {
                                  lVar30 = (long)(iVar43 + 0xe);
                    /* catch() { ... } // from try @ 00315610 with catch @ 00316e70
                       catch() { ... } // from try @ 003161e0 with catch @ 00316e70
                       catch() { ... } // from try @ 00316c10 with catch @ 00316e70 */
                    /* catch() { ... } // from try @ 003155ec with catch @ 00316e78
                       catch() { ... } // from try @ 00316254 with catch @ 00316e78
                       catch() { ... } // from try @ 00316c1c with catch @ 00316e78
                       catch() { ... } // from try @ 00316ec0 with catch @ 00316e78 */
                                  puVar31[lVar30] =
                                       puVar31[lVar30] + (uint)*(byte *)((long)puVar21 + lVar30);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  } while( true );
                    /* try { // try from 00316e90 to 00416e93 has its CatchHandler @ 00316f68 */
  if (0 < (int)uVar13) {
                    /* try { // try from 00316e9c to 00416e9f has its CatchHandler @ 00316d90 */
    uVar35 = -((uint)((ulong)puVar31 >> 2) & 3) & 3;
                    /* try { // try from 00316ea8 to 00416eab has its CatchHandler @ 00316e1c */
    if (uVar13 < uVar35) {
      uVar35 = uVar13;
    }
    if (uVar13 < 5) {
      uVar35 = uVar13;
    }
    uVar41 = 0;
    if (uVar35 != 0) {
                    /* try { // try from 00316ec0 to 00416f03 has its CatchHandler @ 00316e78 */
      *pfVar22 = (float)(int)*puVar31;
      if ((uVar35 == 1) || (pfVar22[1] = (float)(int)puVar31[1], uVar35 == 2)) {
        uVar41 = (ulong)uVar35;
      }
      else {
        pfVar22[2] = (float)(int)puVar31[2];
        if (uVar35 == 4) {
          uVar41 = 4;
          pfVar22[3] = (float)(int)puVar31[3];
        }
        else {
          uVar41 = 3;
        }
      }
      if (uVar35 == uVar13) goto LAB_00316fbc;
    }
                    /* try { // try from 00316f18 to 00416f1b has its CatchHandler @ 00316c24 */
    uVar2 = ((uVar13 - uVar35) - 4 >> 2) + 1;
    iVar11 = uVar2 * 4;
    if (2 < (uVar13 - 1) - uVar35) {
      uVar32 = 0;
      pauVar24 = (undefined1 (*) [16])(puVar31 + uVar35);
      pfVar34 = pfVar22 + uVar35;
      do {
        uVar32 = uVar32 + 1;
        auVar48 = NEON_scvtf(*pauVar24,4);
        *(long *)(pfVar34 + 2) = auVar48._8_8_;
        *(long *)pfVar34 = auVar48._0_8_;
        pauVar24 = pauVar24 + 1;
        pfVar34 = pfVar34 + 4;
      } while (uVar32 < uVar2);
      uVar41 = (ulong)(uint)((int)uVar41 + iVar11);
                    /* catch() { ... } // from try @ 00314c10 with catch @ 00316f68
                       catch() { ... } // from try @ 00316364 with catch @ 00316f68
                       catch() { ... } // from try @ 00316e90 with catch @ 00316f68 */
      if (iVar11 == uVar13 - uVar35) goto LAB_00316fbc;
    }
    uVar20 = -(uVar41 >> 0x1f) & 0xfffffffc00000000 | uVar41 << 2;
                    /* try { // try from 00316f84 to 00416f87 has its CatchHandler @ 00316d90 */
    *(float *)((long)pfVar22 + uVar20) = (float)*(int *)((long)puVar31 + uVar20);
    if (((int)uVar41 + 1 < (int)uVar13) &&
       (*(float *)((long)pfVar22 + uVar20 + 4) = (float)*(int *)((long)puVar31 + uVar20 + 4),
       (int)uVar41 + 2 < (int)uVar13)) {
      *(float *)((long)pfVar22 + uVar20 + 8) = (float)*(int *)((long)puVar31 + uVar20 + 8);
    }
  }
LAB_00316fbc:
  if (bVar19) {
                    /* try { // try from 00316fc8 to 00416fcb has its CatchHandler @ 00317028 */
    operator_delete__(puVar31);
  }
                    /* try { // try from 00316fd0 to 00416fd3 has its CatchHandler @ 00316d90 */
                    /* catch() { ... } // from try @ 003156ac with catch @ 00316fd8
                       catch() { ... } // from try @ 003160f8 with catch @ 00316fd8
                       catch() { ... } // from try @ 00316bf8 with catch @ 00316fd8 */
                    /* catch() { ... } // from try @ 00316890 with catch @ 00316fe0
                       catch() { ... } // from try @ 00316b8c with catch @ 00316fe0
                       catch() { ... } // from try @ 00316bb8 with catch @ 00316fe0 */
  return;
}


==================================================================

### FUNC 00317104 (3504 bytes) name=FUN_00317104

void FUN_00317104(uint *param_1,long param_2)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint3 uVar15;
  uint3 uVar16;
  uint *puVar17;
  bool bVar18;
  ulong uVar19;
  uint *puVar20;
  ulong *puVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  uint *puVar26;
  long lVar27;
  uint *puVar28;
  uint uVar29;
  uint *puVar30;
  uint *puVar31;
  uint uVar32;
  uint uVar33;
  byte *pbVar34;
  uint uVar35;
  uint *puVar36;
  uint *puVar37;
  ulong uVar38;
  long lVar39;
  int iVar40;
  uint *puVar41;
  byte bVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  byte bVar45;
  byte bVar46;
  undefined8 uVar47;
  undefined8 uVar48;
  undefined8 uVar49;
  undefined8 uVar50;
  undefined8 uVar51;
  undefined8 uVar52;
  undefined8 uVar53;
  undefined8 uVar54;
  undefined8 uVar55;
  int iVar56;
  uint *puVar57;
  uint auStack_420 [264];
  
                    /* try { // try from 00317128 to 0041712b has its CatchHandler @ 003194bc */
                    /* try { // try from 00317130 to 00417157 has its CatchHandler @ 00317050 */
  puVar28 = auStack_420;
  iVar10 = (*(int **)(param_1 + 0x10))[1];
  iVar11 = **(int **)(param_1 + 0x10);
                    /* try { // try from 0031715c to 0041717b has its CatchHandler @ 00319508 */
  uVar12 = iVar10 + (*param_1 >> 3 & 0x1ff) * iVar10;
  uVar38 = (ulong)(int)uVar12;
  if (uVar38 < 0x109) {
    bVar18 = false;
  }
  else {
    uVar19 = uVar38 << 2;
                    /* try { // try from 00317180 to 0041719f has its CatchHandler @ 003194f4 */
    if (0x1fc0000000000000 < uVar38) {
      uVar19 = 0xffffffffffffffff;
    }
    puVar20 = operator_new__(uVar19);
    bVar18 = puVar20 != puVar28;
    puVar28 = puVar20;
  }
  puVar57 = *(uint **)(param_2 + 0x10);
  puVar20 = *(uint **)(param_1 + 4);
  lVar39 = *(long *)(param_1 + 0x14);
  if (0 < (int)uVar12) {
    if ((puVar20 < puVar28 + uVar38 && puVar28 < (uint *)((long)puVar20 + uVar38)) ||
       (uVar12 < 0x15)) {
      lVar22 = 0;
      do {
        puVar28[lVar22] = (uint)*(byte *)((long)puVar20 + lVar22);
        lVar22 = lVar22 + 1;
      } while ((int)lVar22 < (int)uVar12);
    }
    else {
      uVar32 = -((uint)((ulong)puVar28 >> 2) & 3) & 3;
      uVar2 = uVar12;
      if (uVar32 < uVar12) {
        uVar2 = uVar32;
      }
      uVar32 = uVar2;
                    /* try { // try from 00317200 to 00417227 has its CatchHandler @ 0031934c */
      if ((uVar2 != 0) && (*puVar28 = (uint)(byte)*puVar20, uVar2 != 1)) {
        puVar28[1] = (uint)*(byte *)((long)puVar20 + 1);
        if (uVar2 == 3) {
          puVar28[2] = (uint)*(byte *)((long)puVar20 + 2);
        }
        else {
          uVar32 = 2;
                    /* try { // try from 00317ea8 to 00417eab has its CatchHandler @ 0031934c */
        }
      }
      uVar33 = 0;
      uVar29 = ((uVar12 - uVar2) - 0x10 >> 4) + 1;
      iVar10 = uVar29 * 0x10;
      puVar21 = (ulong *)(puVar28 + uVar2);
      pbVar34 = (byte *)((long)puVar20 + (ulong)uVar2);
      do {
        uVar48 = *(undefined8 *)(pbVar34 + 8);
        uVar47 = *(undefined8 *)pbVar34;
                    /* try { // try from 00317250 to 00417253 has its CatchHandler @ 003195a4 */
        uVar33 = uVar33 + 1;
        uVar15 = CONCAT12((char)((ulong)uVar47 >> 8),(short)uVar47) & 0xff00ff;
        uVar43 = (undefined1)((ulong)uVar47 >> 0x28);
        uVar16 = CONCAT12((char)((ulong)uVar48 >> 8),(short)uVar48) & 0xff00ff;
        uVar44 = (undefined1)((ulong)uVar48 >> 0x28);
        puVar21[1] = (ulong)CONCAT14((char)((ulong)uVar47 >> 0x18),
                                     (uint)(byte)((ulong)uVar47 >> 0x10));
        *puVar21 = (ulong)((uint6)CONCAT14((char)(uVar15 >> 0x10),(uint)uVar15) & 0xffff0000ffff);
        puVar21[3] = (ulong)CONCAT14((char)((ulong)uVar47 >> 0x38),
                                     (uint)(byte)((ulong)uVar47 >> 0x30));
        puVar21[2] = (ulong)((uint6)CONCAT14(uVar43,(uint)CONCAT12(uVar43,(ushort)(byte)((ulong)
                                                  uVar47 >> 0x20))) & 0xffff0000ffff);
        puVar21[5] = (ulong)CONCAT14((char)((ulong)uVar48 >> 0x18),
                                     (uint)(byte)((ulong)uVar48 >> 0x10));
        puVar21[4] = (ulong)((uint6)CONCAT14((char)(uVar16 >> 0x10),(uint)uVar16) & 0xffff0000ffff);
        puVar21[7] = (ulong)CONCAT14((char)((ulong)uVar48 >> 0x38),
                                     (uint)(byte)((ulong)uVar48 >> 0x30));
        puVar21[6] = (ulong)((uint6)CONCAT14(uVar44,(uint)CONCAT12(uVar44,(ushort)(byte)((ulong)
                                                  uVar48 >> 0x20))) & 0xffff0000ffff);
        puVar21 = puVar21 + 8;
        pbVar34 = pbVar34 + 0x10;
      } while (uVar33 < uVar29);
      iVar6 = uVar32 + iVar10;
      if (uVar12 - uVar2 != iVar10) {
        iVar10 = iVar6 + 1;
        puVar28[iVar6] = (uint)*(byte *)((long)puVar20 + (long)iVar6);
        if (iVar10 < (int)uVar12) {
          iVar1 = iVar6 + 2;
                    /* try { // try from 003172bc to 004172bf has its CatchHandler @ 00319578 */
          puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
          if (iVar1 < (int)uVar12) {
            iVar10 = iVar6 + 3;
            puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
            if (iVar10 < (int)uVar12) {
              iVar1 = iVar6 + 4;
              puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
              if (iVar1 < (int)uVar12) {
                iVar10 = iVar6 + 5;
                puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
                if (iVar10 < (int)uVar12) {
                  iVar1 = iVar6 + 6;
                  puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
                  if (iVar1 < (int)uVar12) {
                    /* try { // try from 00317330 to 00417333 has its CatchHandler @ 00319554 */
                    iVar10 = iVar6 + 7;
                    puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
                    if (iVar10 < (int)uVar12) {
                      iVar1 = iVar6 + 8;
                      puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
                      if (iVar1 < (int)uVar12) {
                        iVar10 = iVar6 + 9;
                        puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
                        if (iVar10 < (int)uVar12) {
                          iVar1 = iVar6 + 10;
                          puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
                          if (iVar1 < (int)uVar12) {
                            iVar10 = iVar6 + 0xb;
                            puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
                            if (iVar10 < (int)uVar12) {
                    /* try { // try from 003173a4 to 004173a7 has its CatchHandler @ 00319354 */
                              iVar1 = iVar6 + 0xc;
                              puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
                              if (iVar1 < (int)uVar12) {
                                iVar10 = iVar6 + 0xd;
                                puVar28[iVar1] = (uint)*(byte *)((long)puVar20 + (long)iVar1);
                                if (iVar10 < (int)uVar12) {
                                  iVar6 = iVar6 + 0xe;
                                  puVar28[iVar10] = (uint)*(byte *)((long)puVar20 + (long)iVar10);
                                  if (iVar6 < (int)uVar12) {
                                    puVar28[iVar6] = (uint)*(byte *)((long)puVar20 + (long)iVar6);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  uVar33 = uVar12 - 4;
  iVar1 = uVar12 - 3;
  uVar29 = uVar33 >> 2;
                    /* try { // try from 00317418 to 0041741b has its CatchHandler @ 00319604 */
  uVar32 = uVar29 + 1;
                    /* try { // try from 00317444 to 00417447 has its CatchHandler @ 003195d8 */
  uVar2 = (uVar29 - 3 >> 2) + 1;
  iVar6 = uVar32 * 4;
  iVar10 = uVar2 * 0x10;
  if (uVar33 < 0xc) {
    iVar10 = 0;
  }
  if (iVar1 < 1) {
    iVar6 = 0;
  }
  uVar13 = uVar12 - iVar6;
  iVar3 = iVar6 + 1;
  lVar22 = (long)iVar6;
                    /* try { // try from 003174ac to 004174af has its CatchHandler @ 003195ac */
  lVar23 = (long)iVar10;
  puVar31 = puVar28 + lVar22;
  uVar8 = -((uint)((ulong)puVar31 >> 2) & 3) & 3;
  lVar24 = (long)(iVar10 + 4);
  uVar9 = uVar13;
  if (uVar8 < uVar13) {
    uVar9 = uVar8;
  }
  lVar25 = (long)(iVar10 + 8);
                    /* try { // try from 00317520 to 00417523 has its CatchHandler @ 003195e0 */
  iVar4 = iVar6 + 2;
  lVar7 = lVar22 + lVar39;
  uVar8 = ((uVar13 - uVar9) - 0x10 >> 4) + 1;
                    /* try { // try from 00317594 to 00417597 has its CatchHandler @ 00319474 */
  iVar56 = uVar8 * 0x10;
                    /* try { // try from 00317608 to 0041760b has its CatchHandler @ 00319510 */
                    /* try { // try from 00317634 to 00417637 has its CatchHandler @ 00319680 */
                    /* try { // try from 0031769c to 0041769f has its CatchHandler @ 00319654 */
joined_r0x003176cc:
  do {
    puVar17 = puVar20;
    iVar11 = iVar11 + -1;
    if (iVar11 == 0) break;
    puVar20 = (uint *)((long)puVar17 + lVar39);
    if (0 < iVar1) {
      if ((puVar20 < puVar28 + (ulong)uVar32 * 4 &&
           puVar28 < (uint *)((long)puVar17 + lVar39 + (ulong)uVar32 * 4)) || (uVar32 < 4)) {
        pbVar34 = (byte *)((long)puVar20 + 1);
        puVar36 = puVar28;
        do {
          pbVar5 = pbVar34 + 4;
          bVar42 = pbVar34[-1];
          puVar36[1] = (uint)*pbVar34 + puVar36[1];
          *puVar36 = *puVar36 + (uint)bVar42;
          bVar42 = pbVar34[1];
          puVar36[3] = (uint)pbVar34[2] + puVar36[3];
          puVar36[2] = puVar36[2] + (uint)bVar42;
          pbVar34 = pbVar5;
          puVar36 = puVar36 + 4;
        } while (pbVar5 != (byte *)((long)puVar20 + (ulong)uVar29 * 4 + 5));
      }
      else {
                    /* try { // try from 00317710 to 00417713 has its CatchHandler @ 00319630 */
        if (0xb < uVar33) {
          puVar36 = puVar28 + 4;
          puVar30 = puVar28 + 8;
          puVar26 = puVar28 + 0xc;
          uVar35 = 0;
          puVar37 = puVar28;
          puVar41 = puVar20;
          do {
            uVar48 = *(undefined8 *)(puVar41 + 2);
            uVar47 = *(undefined8 *)puVar41;
            uVar35 = uVar35 + 1;
            uVar54 = *(undefined8 *)(puVar36 + 2);
            uVar53 = *(undefined8 *)puVar36;
            uVar52 = *(undefined8 *)(puVar30 + 2);
            uVar51 = *(undefined8 *)puVar30;
            uVar50 = *(undefined8 *)(puVar26 + 2);
            uVar49 = *(undefined8 *)puVar26;
            bVar42 = (byte)((ulong)uVar47 >> 8);
            bVar45 = (byte)((ulong)uVar47 >> 0x28);
            uVar15 = CONCAT12((char)((ulong)uVar48 >> 8),(short)uVar48) & 0xff00ff;
            bVar46 = (byte)((ulong)uVar48 >> 0x28);
            iVar40 = (int)((ulong)uVar53 >> 0x20) + (uint)bVar45;
            *(ulong *)(puVar37 + 2) =
                 CONCAT44((int)((ulong)*(undefined8 *)(puVar37 + 2) >> 0x20) +
                          (uint)(byte)((ulong)uVar47 >> 0x18),
                          (int)*(undefined8 *)(puVar37 + 2) + (uint)(byte)((ulong)uVar47 >> 0x10));
            *(ulong *)puVar37 =
                 CONCAT44((int)((ulong)*(undefined8 *)puVar37 >> 0x20) + (uint)bVar42,
                          (int)*(undefined8 *)puVar37 +
                          (CONCAT12(bVar42,(ushort)(byte)uVar47) & 0xffff));
            puVar37 = puVar37 + 0x10;
            *(ulong *)(puVar36 + 2) =
                 CONCAT44((int)((ulong)uVar54 >> 0x20) + (uint)(byte)((ulong)uVar47 >> 0x38),
                          (int)uVar54 + (uint)(byte)((ulong)uVar47 >> 0x30));
            *(ulong *)puVar36 =
                 CONCAT26((short)((uint)iVar40 >> 0x10),
                          CONCAT24((short)iVar40,
                                   (int)uVar53 +
                                   (CONCAT12(bVar45,(ushort)(byte)((ulong)uVar47 >> 0x20)) & 0xffff)
                                  ));
            puVar36 = puVar36 + 0x10;
            *(ulong *)(puVar30 + 2) =
                 CONCAT44((int)((ulong)uVar52 >> 0x20) + (uint)(byte)((ulong)uVar48 >> 0x18),
                          (int)uVar52 + (uint)(byte)((ulong)uVar48 >> 0x10));
            *(ulong *)puVar30 =
                 CONCAT44((int)((ulong)uVar51 >> 0x20) + (uint)(byte)(uVar15 >> 0x10),
                          (int)uVar51 + (uVar15 & 0xffff));
                    /* try { // try from 00317784 to 00417787 has its CatchHandler @ 0031960c */
            puVar30 = puVar30 + 0x10;
            *(ulong *)(puVar26 + 2) =
                 CONCAT44((int)((ulong)uVar50 >> 0x20) + (uint)(byte)((ulong)uVar48 >> 0x38),
                          (int)uVar50 + (uint)(byte)((ulong)uVar48 >> 0x30));
            *(ulong *)puVar26 =
                 CONCAT44((int)((ulong)uVar49 >> 0x20) + (uint)bVar46,
                          (int)uVar49 +
                          (CONCAT12(bVar46,(ushort)(byte)((ulong)uVar48 >> 0x20)) & 0xffff));
            puVar26 = puVar26 + 0x10;
            puVar41 = puVar41 + 4;
          } while (uVar35 < uVar2);
          if (uVar32 == uVar2 * 4) goto LAB_003178b8;
        }
        bVar42 = *(byte *)((long)puVar20 + lVar23 + 1);
        puVar28[lVar23] = puVar28[lVar23] + (uint)*(byte *)((long)puVar20 + lVar23);
        puVar28[lVar23 + 1] = (uint)bVar42 + puVar28[lVar23 + 1];
        bVar42 = *(byte *)((long)puVar20 + lVar23 + 3);
        puVar28[lVar23 + 2] = puVar28[lVar23 + 2] + (uint)*(byte *)((long)puVar20 + lVar23 + 2);
                    /* try { // try from 003177f8 to 004177fb has its CatchHandler @ 003194d0 */
        puVar28[lVar23 + 3] = (uint)bVar42 + puVar28[lVar23 + 3];
        if (iVar10 + 4 < iVar1) {
          bVar42 = *(byte *)((long)puVar20 + lVar24 + 1);
          puVar28[lVar24] = puVar28[lVar24] + (uint)*(byte *)((long)puVar20 + lVar24);
          puVar28[lVar24 + 1] = (uint)bVar42 + puVar28[lVar24 + 1];
          bVar42 = *(byte *)((long)puVar20 + lVar24 + 3);
          puVar28[lVar24 + 2] = puVar28[lVar24 + 2] + (uint)*(byte *)((long)puVar20 + lVar24 + 2);
          puVar28[lVar24 + 3] = (uint)bVar42 + puVar28[lVar24 + 3];
          if (iVar10 + 8 < iVar1) {
            bVar42 = *(byte *)((long)puVar20 + lVar25 + 1);
            puVar28[lVar25] = puVar28[lVar25] + (uint)*(byte *)((long)puVar20 + lVar25);
                    /* try { // try from 00317884 to 0041792b has its CatchHandler @ 003194b4 */
            puVar28[lVar25 + 1] = (uint)bVar42 + puVar28[lVar25 + 1];
            bVar42 = *(byte *)((long)puVar20 + lVar25 + 3);
            puVar28[lVar25 + 2] = puVar28[lVar25 + 2] + (uint)*(byte *)((long)puVar20 + lVar25 + 2);
            puVar28[lVar25 + 3] = (uint)bVar42 + puVar28[lVar25 + 3];
          }
        }
      }
    }
LAB_003178b8:
    if (iVar6 < (int)uVar12) {
      if (((uint *)((long)puVar17 + lVar7) < puVar28 + (ulong)uVar13 + lVar22 &&
           puVar31 < (uint *)((long)puVar17 + lVar7 + (ulong)uVar13)) || (uVar13 < 0x13)) {
        lVar27 = 0;
        do {
          puVar31[lVar27] = puVar31[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27 + lVar22);
          lVar27 = lVar27 + 1;
        } while (lVar27 != (ulong)((uVar12 - 1) - iVar6) + 1);
        goto joined_r0x003176cc;
      }
      iVar40 = iVar6;
      if ((uVar9 != 0) &&
         ((*puVar31 = *puVar31 + (uint)*(byte *)((long)puVar20 + lVar22), iVar40 = iVar3, uVar9 != 1
          && (puVar28[iVar3] = puVar28[iVar3] + (uint)*(byte *)((long)puVar20 + (long)iVar3),
             iVar40 = iVar4, uVar9 == 3)))) {
        puVar28[iVar4] = puVar28[iVar4] + (uint)*(byte *)((long)puVar20 + (long)iVar4);
        iVar40 = iVar6 + 3;
      }
                    /* try { // try from 00317948 to 0041794b has its CatchHandler @ 00319688 */
                    /* try { // try from 00317950 to 00417953 has its CatchHandler @ 003194b4 */
      if (0xe < (uVar13 - 1) - uVar9) {
        uVar35 = 0;
        puVar36 = puVar28 + lVar22 + (ulong)uVar9;
        puVar30 = puVar28 + (ulong)uVar9 + lVar22;
        pbVar34 = (byte *)((long)puVar17 + lVar7 + (ulong)uVar9);
        do {
          uVar49 = *(undefined8 *)puVar36;
          uVar35 = uVar35 + 1;
          uVar53 = *(undefined8 *)(puVar36 + 10);
          uVar52 = *(undefined8 *)(puVar36 + 8);
          uVar48 = *(undefined8 *)(pbVar34 + 8);
          uVar47 = *(undefined8 *)pbVar34;
          bVar42 = (byte)((ulong)uVar47 >> 8);
          bVar45 = (byte)((ulong)uVar47 >> 0x28);
          uVar15 = CONCAT12((char)((ulong)uVar48 >> 8),(short)uVar48) & 0xff00ff;
          bVar46 = (byte)((ulong)uVar48 >> 0x28);
          uVar55 = *(undefined8 *)(puVar36 + 6);
          uVar54 = *(undefined8 *)(puVar36 + 4);
          uVar51 = *(undefined8 *)(puVar36 + 0xe);
          uVar50 = *(undefined8 *)(puVar36 + 0xc);
                    /* try { // try from 003179c4 to 004179c7 has its CatchHandler @ 00319680 */
          iVar14 = (uint)bVar45 + (int)((ulong)uVar54 >> 0x20);
          *(ulong *)(puVar30 + 2) =
               CONCAT44((int)((ulong)*(undefined8 *)(puVar36 + 2) >> 0x20) +
                        (uint)(byte)((ulong)uVar47 >> 0x18),
                        (int)*(undefined8 *)(puVar36 + 2) + (uint)(byte)((ulong)uVar47 >> 0x10));
          *(ulong *)puVar30 =
               CONCAT44((int)((ulong)uVar49 >> 0x20) + (uint)bVar42,
                        (int)uVar49 + (CONCAT12(bVar42,(ushort)(byte)uVar47) & 0xffff));
          *(ulong *)(puVar30 + 6) =
               CONCAT44((uint)(byte)((ulong)uVar47 >> 0x38) + (int)((ulong)uVar55 >> 0x20),
                        (uint)(byte)((ulong)uVar47 >> 0x30) + (int)uVar55);
          *(ulong *)(puVar30 + 4) =
               CONCAT26((short)((uint)iVar14 >> 0x10),
                        CONCAT24((short)iVar14,
                                 (CONCAT12(bVar45,(ushort)(byte)((ulong)uVar47 >> 0x20)) & 0xffff) +
                                 (int)uVar54));
          *(ulong *)(puVar30 + 10) =
               CONCAT44((uint)(byte)((ulong)uVar48 >> 0x18) + (int)((ulong)uVar53 >> 0x20),
                        (uint)(byte)((ulong)uVar48 >> 0x10) + (int)uVar53);
          *(ulong *)(puVar30 + 8) =
               CONCAT44((uint)(byte)(uVar15 >> 0x10) + (int)((ulong)uVar52 >> 0x20),
                        (uVar15 & 0xffff) + (int)uVar52);
          *(ulong *)(puVar30 + 0xe) =
               CONCAT44((uint)(byte)((ulong)uVar48 >> 0x38) + (int)((ulong)uVar51 >> 0x20),
                        (uint)(byte)((ulong)uVar48 >> 0x30) + (int)uVar51);
          *(ulong *)(puVar30 + 0xc) =
               CONCAT44((uint)bVar46 + (int)((ulong)uVar50 >> 0x20),
                        (CONCAT12(bVar46,(ushort)(byte)((ulong)uVar48 >> 0x20)) & 0xffff) +
                        (int)uVar50);
          puVar36 = puVar36 + 0x10;
          puVar30 = puVar30 + 0x10;
          pbVar34 = pbVar34 + 0x10;
        } while (uVar35 < uVar8);
        iVar40 = iVar40 + iVar56;
        if (uVar13 - uVar9 == iVar56) goto joined_r0x003176cc;
      }
      lVar27 = (long)iVar40;
      puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
      if (iVar40 + 1 < (int)uVar12) {
        lVar27 = (long)(iVar40 + 1);
                    /* try { // try from 00317a38 to 00417a3b has its CatchHandler @ 003195d8 */
        puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
        if (iVar40 + 2 < (int)uVar12) {
          lVar27 = (long)(iVar40 + 2);
          puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
          if (iVar40 + 3 < (int)uVar12) {
            lVar27 = (long)(iVar40 + 3);
            puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
            if (iVar40 + 4 < (int)uVar12) {
              lVar27 = (long)(iVar40 + 4);
                    /* try { // try from 00317aac to 00417aaf has its CatchHandler @ 003195a4 */
              puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
              if (iVar40 + 5 < (int)uVar12) {
                lVar27 = (long)(iVar40 + 5);
                puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                if (iVar40 + 6 < (int)uVar12) {
                  lVar27 = (long)(iVar40 + 6);
                  puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                  if (iVar40 + 7 < (int)uVar12) {
                    lVar27 = (long)(iVar40 + 7);
                    /* try { // try from 00317b20 to 00417b23 has its CatchHandler @ 0031934c */
                    puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                    if (iVar40 + 8 < (int)uVar12) {
                      lVar27 = (long)(iVar40 + 8);
                      puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                      if (iVar40 + 9 < (int)uVar12) {
                        lVar27 = (long)(iVar40 + 9);
                        puVar28[lVar27] = puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                        if (iVar40 + 10 < (int)uVar12) {
                          lVar27 = (long)(iVar40 + 10);
                          puVar28[lVar27] =
                               puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                    /* try { // try from 00317b94 to 00417b97 has its CatchHandler @ 003194f4 */
                          if (iVar40 + 0xb < (int)uVar12) {
                            lVar27 = (long)(iVar40 + 0xb);
                            puVar28[lVar27] =
                                 puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                            if (iVar40 + 0xc < (int)uVar12) {
                              lVar27 = (long)(iVar40 + 0xc);
                              puVar28[lVar27] =
                                   puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                              if (iVar40 + 0xd < (int)uVar12) {
                                lVar27 = (long)(iVar40 + 0xd);
                                puVar28[lVar27] =
                                     puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                                if (iVar40 + 0xe < (int)uVar12) {
                                  lVar27 = (long)(iVar40 + 0xe);
                    /* try { // try from 00317c08 to 00417c0b has its CatchHandler @ 00319508 */
                                  puVar28[lVar27] =
                                       puVar28[lVar27] + (uint)*(byte *)((long)puVar20 + lVar27);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  } while( true );
  if (0 < (int)uVar12) {
                    /* try { // try from 00317c34 to 00417c87 has its CatchHandler @ 00317050 */
    if ((puVar57 < puVar28 + 4 && puVar28 < puVar57 + 4) || (uVar12 < 0xc)) {
      lVar39 = 0;
      do {
        puVar57[lVar39] = puVar28[lVar39];
        lVar39 = lVar39 + 1;
      } while ((int)lVar39 < (int)uVar12);
    }
    else {
      uVar32 = -((uint)((ulong)puVar28 >> 2) & 3) & 3;
      if (uVar12 < uVar32) {
        uVar32 = uVar12;
      }
      uVar38 = 0;
      if (uVar32 != 0) {
        *puVar57 = *puVar28;
        if (uVar32 == 1) {
          uVar38 = 1;
        }
        else {
          puVar57[1] = puVar28[1];
          if (uVar32 == 3) {
            uVar38 = 3;
            puVar57[2] = puVar28[2];
          }
          else {
            uVar38 = 2;
          }
        }
      }
      uVar2 = ((uVar12 - uVar32) - 4 >> 2) + 1;
      iVar10 = uVar2 * 4;
      if (2 < (uVar12 - 1) - uVar32) {
                    /* try { // try from 00317cd8 to 00417cdb has its CatchHandler @ 003194b4 */
        uVar29 = 0;
        puVar20 = puVar28 + uVar32;
        puVar31 = puVar57 + uVar32;
        do {
          uVar47 = *(undefined8 *)puVar20;
          uVar29 = uVar29 + 1;
          *(undefined8 *)(puVar31 + 2) = *(undefined8 *)(puVar20 + 2);
          *(undefined8 *)puVar31 = uVar47;
          puVar20 = puVar20 + 4;
          puVar31 = puVar31 + 4;
        } while (uVar29 < uVar2);
        uVar38 = (ulong)(uint)((int)uVar38 + iVar10);
        if (iVar10 == uVar12 - uVar32) goto LAB_00317d4c;
      }
      uVar19 = -(uVar38 >> 0x1f) & 0xfffffffc00000000 | uVar38 << 2;
      *(undefined4 *)((long)puVar57 + uVar19) = *(undefined4 *)((long)puVar28 + uVar19);
      if (((int)uVar38 + 1 < (int)uVar12) &&
         (*(undefined4 *)((long)puVar57 + uVar19 + 4) = *(undefined4 *)((long)puVar28 + uVar19 + 4),
         (int)uVar38 + 2 < (int)uVar12)) {
        *(undefined4 *)((long)puVar57 + uVar19 + 8) = *(undefined4 *)((long)puVar28 + uVar19 + 8);
      }
    }
  }
LAB_00317d4c:
                    /* try { // try from 00317d4c to 00417d4f has its CatchHandler @ 00319680 */
  if (bVar18) {
    operator_delete__(puVar28);
  }
  return;
}


==================================================================

### FUNC 00317eb4 (3496 bytes) name=FUN_00317eb4

void FUN_00317eb4(uint *param_1,long param_2)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  byte *pbVar5;
  int iVar6;
  uint *puVar7;
  long lVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  byte bVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  undefined1 auVar17 [13];
  undefined1 auVar18 [13];
  byte bVar19;
  byte bVar20;
  byte bVar21;
  byte bVar22;
  byte bVar23;
  byte bVar24;
  byte bVar25;
  byte bVar26;
  byte bVar27;
  uint *puVar28;
  uint uVar29;
  uint uVar30;
  uint uVar31;
  bool bVar32;
  ulong uVar33;
  uint *puVar34;
  double *pdVar35;
  ulong *puVar36;
  long lVar37;
  long lVar38;
  long lVar39;
  long lVar40;
  uint *puVar41;
  long lVar42;
  uint *puVar43;
  uint *puVar44;
  double *pdVar45;
  uint uVar46;
  uint uVar47;
  byte *pbVar48;
  uint uVar49;
  uint *puVar50;
  uint *puVar51;
  uint uVar52;
  ulong uVar53;
  long lVar54;
  int iVar55;
  uint *puVar56;
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined8 uVar61;
  undefined8 uVar62;
  undefined8 uVar63;
  undefined8 uVar64;
  undefined8 uVar65;
  int iVar66;
  uint auStack_420 [264];
  
  puVar43 = auStack_420;
  iVar11 = (*(int **)(param_1 + 0x10))[1];
  iVar12 = **(int **)(param_1 + 0x10);
  uVar14 = iVar11 + (*param_1 >> 3 & 0x1ff) * iVar11;
  uVar53 = (ulong)(int)uVar14;
                    /* try { // try from 00317f1c to 00417f1f has its CatchHandler @ 003194f4 */
  if (uVar53 < 0x109) {
                    /* try { // try from 00318c28 to 00418c3b has its CatchHandler @ 00317050 */
    bVar32 = false;
  }
  else {
    uVar33 = uVar53 << 2;
    if (0x1fc0000000000000 < uVar53) {
      uVar33 = 0xffffffffffffffff;
    }
    puVar34 = operator_new__(uVar33);
    bVar32 = puVar34 != puVar43;
    puVar43 = puVar34;
  }
  pdVar35 = *(double **)(param_2 + 0x10);
  puVar34 = *(uint **)(param_1 + 4);
  lVar54 = *(long *)(param_1 + 0x14);
  if (0 < (int)uVar14) {
                    /* try { // try from 00317f90 to 00417f93 has its CatchHandler @ 00319508 */
    if ((puVar34 < puVar43 + uVar53 && puVar43 < (uint *)((long)puVar34 + uVar53)) ||
       (uVar14 < 0x15)) {
      lVar37 = 0;
      do {
        puVar43[lVar37] = (uint)*(byte *)((long)puVar34 + lVar37);
        lVar37 = lVar37 + 1;
                    /* try { // try from 00318c48 to 00418c4b has its CatchHandler @ 00319508 */
      } while ((int)lVar37 < (int)uVar14);
    }
    else {
      uVar46 = -((uint)((ulong)puVar43 >> 2) & 3) & 3;
      uVar52 = uVar14;
      if (uVar46 < uVar14) {
        uVar52 = uVar46;
      }
      uVar46 = uVar52;
      if ((uVar52 != 0) && (*puVar43 = (uint)(byte)*puVar34, uVar52 != 1)) {
        puVar43[1] = (uint)*(byte *)((long)puVar34 + 1);
        if (uVar52 == 3) {
          puVar43[2] = (uint)*(byte *)((long)puVar34 + 2);
        }
        else {
          uVar46 = 2;
                    /* try { // try from 00318c58 to 00418c5b has its CatchHandler @ 003194f4 */
        }
      }
      uVar47 = 0;
      uVar1 = ((uVar14 - uVar52) - 0x10 >> 4) + 1;
      iVar11 = uVar1 * 0x10;
      puVar36 = (ulong *)(puVar43 + uVar52);
      pbVar48 = (byte *)((long)puVar34 + (ulong)uVar52);
      do {
                    /* try { // try from 00317ffc to 00417fff has its CatchHandler @ 003194d0 */
        bVar13 = *pbVar48;
        bVar19 = pbVar48[1];
        bVar20 = pbVar48[8];
        bVar21 = pbVar48[9];
        bVar22 = pbVar48[10];
        bVar23 = pbVar48[0xb];
                    /* try { // try from 00318008 to 0041800b has its CatchHandler @ 0031960c */
        uVar47 = uVar47 + 1;
                    /* try { // try from 00318014 to 00418017 has its CatchHandler @ 00319630 */
                    /* try { // try from 00318020 to 00418023 has its CatchHandler @ 00319510 */
        uVar33 = CONCAT35(0,CONCAT14(pbVar48[5],(uint)pbVar48[4]));
        auVar17[8] = pbVar48[6];
        auVar17._0_8_ = uVar33;
        auVar17._9_3_ = 0;
        auVar17[0xc] = pbVar48[7];
                    /* try { // try from 0031802c to 0041802f has its CatchHandler @ 00319474 */
        uVar53 = CONCAT35(0,CONCAT14(pbVar48[0xd],(uint)pbVar48[0xc]));
        auVar18[8] = pbVar48[0xe];
        auVar18._0_8_ = uVar53;
        auVar18._9_3_ = 0;
        auVar18[0xc] = pbVar48[0xf];
        puVar36[1] = (ulong)CONCAT14(pbVar48[3],(uint)pbVar48[2]);
        *puVar36 = (ulong)((uint6)CONCAT14(bVar19,(uint)CONCAT12(bVar19,(ushort)bVar13)) &
                          0xffff0000ffff);
        puVar36[3] = (ulong)auVar17._8_5_;
        puVar36[2] = uVar33;
                    /* try { // try from 00318038 to 0041803b has its CatchHandler @ 003195e0 */
        puVar36[5] = (ulong)CONCAT14(bVar23,(uint)bVar22);
        puVar36[4] = (ulong)((uint6)CONCAT14(bVar21,(uint)CONCAT12(bVar21,(ushort)bVar20)) &
                            0xffff0000ffff);
        puVar36[7] = (ulong)auVar18._8_5_;
        puVar36[6] = uVar53;
        puVar36 = puVar36 + 8;
        pbVar48 = pbVar48 + 0x10;
      } while (uVar47 < uVar1);
                    /* try { // try from 00318044 to 00418047 has its CatchHandler @ 00319604 */
      iVar6 = uVar46 + iVar11;
      if (uVar14 - uVar52 != iVar11) {
                    /* try { // try from 00318050 to 00418053 has its CatchHandler @ 00319354 */
        iVar11 = iVar6 + 1;
                    /* try { // try from 0031805c to 0041805f has its CatchHandler @ 00319554 */
        puVar43[iVar6] = (uint)*(byte *)((long)puVar34 + (long)iVar6);
        if (iVar11 < (int)uVar14) {
          iVar2 = iVar6 + 2;
          puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
          if (iVar2 < (int)uVar14) {
            iVar11 = iVar6 + 3;
            puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
            if (iVar11 < (int)uVar14) {
              iVar2 = iVar6 + 4;
              puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
              if (iVar2 < (int)uVar14) {
                iVar11 = iVar6 + 5;
                puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
                if (iVar11 < (int)uVar14) {
                  iVar2 = iVar6 + 6;
                  puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
                  if (iVar2 < (int)uVar14) {
                    iVar11 = iVar6 + 7;
                    puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
                    if (iVar11 < (int)uVar14) {
                      iVar2 = iVar6 + 8;
                      puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
                      if (iVar2 < (int)uVar14) {
                        iVar11 = iVar6 + 9;
                        puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
                        if (iVar11 < (int)uVar14) {
                          iVar2 = iVar6 + 10;
                          puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
                          if (iVar2 < (int)uVar14) {
                            iVar11 = iVar6 + 0xb;
                            puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
                            if (iVar11 < (int)uVar14) {
                              iVar2 = iVar6 + 0xc;
                              puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
                              if (iVar2 < (int)uVar14) {
                                iVar11 = iVar6 + 0xd;
                                puVar43[iVar2] = (uint)*(byte *)((long)puVar34 + (long)iVar2);
                                if (iVar11 < (int)uVar14) {
                                  iVar6 = iVar6 + 0xe;
                                  puVar43[iVar11] = (uint)*(byte *)((long)puVar34 + (long)iVar11);
                                  if (iVar6 < (int)uVar14) {
                                    puVar43[iVar6] = (uint)*(byte *)((long)puVar34 + (long)iVar6);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  uVar47 = uVar14 - 4;
  iVar2 = uVar14 - 3;
  uVar1 = uVar47 >> 2;
  uVar46 = uVar1 + 1;
  uVar52 = (uVar1 - 3 >> 2) + 1;
  iVar6 = uVar46 * 4;
                    /* try { // try from 00318204 to 004182b7 has its CatchHandler @ 0031934c */
  iVar11 = uVar52 * 0x10;
  if (uVar47 < 0xc) {
    iVar11 = 0;
  }
  if (iVar2 < 1) {
    iVar6 = 0;
  }
  uVar15 = uVar14 - iVar6;
  iVar3 = iVar6 + 1;
  lVar37 = (long)iVar6;
  lVar38 = (long)iVar11;
  puVar7 = puVar43 + lVar37;
  uVar9 = -((uint)((ulong)puVar7 >> 2) & 3) & 3;
  lVar39 = (long)(iVar11 + 4);
  uVar10 = uVar15;
  if (uVar9 < uVar15) {
    uVar10 = uVar9;
  }
  lVar40 = (long)(iVar11 + 8);
  iVar4 = iVar6 + 2;
  lVar8 = lVar37 + lVar54;
  uVar9 = ((uVar15 - uVar10) - 0x10 >> 4) + 1;
  iVar66 = uVar9 * 0x10;
                    /* try { // try from 00318424 to 0041845f has its CatchHandler @ 00317050 */
joined_r0x0031847c:
  do {
    puVar28 = puVar34;
    iVar12 = iVar12 + -1;
    if (iVar12 == 0) break;
    puVar34 = (uint *)((long)puVar28 + lVar54);
    if (0 < iVar2) {
      if ((puVar34 < puVar43 + (ulong)uVar46 * 4 &&
           puVar43 < (uint *)((long)puVar28 + lVar54 + (ulong)uVar46 * 4)) || (uVar46 < 4)) {
                    /* try { // try from 00318b94 to 00418b97 has its CatchHandler @ 00319440 */
                    /* try { // try from 00318ba4 to 00418ba7 has its CatchHandler @ 003193c4 */
        pbVar48 = (byte *)((long)puVar34 + 1);
        puVar50 = puVar43;
        do {
                    /* try { // try from 00318bb0 to 00418bb3 has its CatchHandler @ 003196e0 */
          pbVar5 = pbVar48 + 4;
                    /* try { // try from 00318bbc to 00418bbf has its CatchHandler @ 0031969c */
          bVar13 = pbVar48[-1];
                    /* try { // try from 00318bc8 to 00418bcb has its CatchHandler @ 00319450 */
          puVar50[1] = (uint)*pbVar48 + puVar50[1];
          *puVar50 = *puVar50 + (uint)bVar13;
                    /* try { // try from 00318bd4 to 00418bd7 has its CatchHandler @ 00319518 */
          bVar13 = pbVar48[1];
                    /* try { // try from 00318be0 to 00418be3 has its CatchHandler @ 003195d8 */
          puVar50[3] = (uint)pbVar48[2] + puVar50[3];
                    /* try { // try from 00318bec to 00418bef has its CatchHandler @ 003195a4 */
          puVar50[2] = puVar50[2] + (uint)bVar13;
          pbVar48 = pbVar5;
          puVar50 = puVar50 + 4;
        } while (pbVar5 != (byte *)((long)puVar34 + (ulong)uVar1 * 4 + 5));
      }
      else {
                    /* try { // try from 003184b8 to 004184bb has its CatchHandler @ 0031942c */
                    /* try { // try from 003184c0 to 004184c3 has its CatchHandler @ 00317050 */
        if (0xb < uVar47) {
          puVar50 = puVar43 + 4;
          puVar44 = puVar43 + 8;
          puVar41 = puVar43 + 0xc;
          uVar49 = 0;
          puVar51 = puVar43;
          puVar56 = puVar34;
          do {
            uVar29 = *puVar56;
            bVar13 = *(byte *)((long)puVar56 + 1);
            uVar30 = puVar56[1];
            bVar19 = *(byte *)((long)puVar56 + 5);
            bVar20 = *(byte *)((long)puVar56 + 6);
            bVar21 = *(byte *)((long)puVar56 + 7);
            uVar31 = puVar56[2];
            bVar22 = *(byte *)((long)puVar56 + 9);
            bVar23 = *(byte *)((long)puVar56 + 10);
            bVar24 = *(byte *)((long)puVar56 + 0xb);
            uVar49 = uVar49 + 1;
            uVar64 = *(undefined8 *)(puVar50 + 2);
            uVar63 = *(undefined8 *)puVar50;
            uVar62 = *(undefined8 *)(puVar44 + 2);
            uVar61 = *(undefined8 *)puVar44;
                    /* try { // try from 003184fc to 004184ff has its CatchHandler @ 003194b4 */
            iVar55 = (int)((ulong)uVar63 >> 0x20) + (uint)bVar19;
            auVar60._0_8_ =
                 CONCAT44((int)((ulong)*(undefined8 *)puVar41 >> 0x20) +
                          (uint)*(byte *)((long)puVar56 + 0xd),
                          (int)*(undefined8 *)puVar41 + (uint)(byte)puVar56[3]);
            auVar60._8_4_ = (int)*(undefined8 *)(puVar41 + 2) + (uint)*(byte *)((long)puVar56 + 0xe)
            ;
            auVar60._12_4_ =
                 (int)((ulong)*(undefined8 *)(puVar41 + 2) >> 0x20) +
                 (uint)*(byte *)((long)puVar56 + 0xf);
            *(ulong *)(puVar51 + 2) =
                 CONCAT44((int)((ulong)*(undefined8 *)(puVar51 + 2) >> 0x20) +
                          (uint)*(byte *)((long)puVar56 + 3),
                          (int)*(undefined8 *)(puVar51 + 2) + (uint)*(byte *)((long)puVar56 + 2));
            *(ulong *)puVar51 =
                 CONCAT44((int)((ulong)*(undefined8 *)puVar51 >> 0x20) + (uint)bVar13,
                          (int)*(undefined8 *)puVar51 +
                          (CONCAT12(bVar13,(ushort)(byte)uVar29) & 0xffff));
            puVar51 = puVar51 + 0x10;
            *(ulong *)(puVar50 + 2) =
                 CONCAT44((int)((ulong)uVar64 >> 0x20) + (uint)bVar21,(int)uVar64 + (uint)bVar20);
            *(ulong *)puVar50 =
                 CONCAT26((short)((uint)iVar55 >> 0x10),
                          CONCAT24((short)iVar55,
                                   (int)uVar63 + (CONCAT12(bVar19,(ushort)(byte)uVar30) & 0xffff)));
            puVar50 = puVar50 + 0x10;
            *(ulong *)(puVar44 + 2) =
                 CONCAT44((int)((ulong)uVar62 >> 0x20) + (uint)bVar24,(int)uVar62 + (uint)bVar23);
            *(ulong *)puVar44 =
                 CONCAT44((int)((ulong)uVar61 >> 0x20) + (uint)bVar22,
                          (int)uVar61 + (CONCAT12(bVar22,(ushort)(byte)uVar31) & 0xffff));
            puVar44 = puVar44 + 0x10;
            *(long *)(puVar41 + 2) = auVar60._8_8_;
            *(undefined8 *)puVar41 = auVar60._0_8_;
            puVar41 = puVar41 + 0x10;
            puVar56 = puVar56 + 4;
          } while (uVar49 < uVar52);
          if (uVar46 == uVar52 * 4) goto LAB_00318668;
        }
                    /* try { // try from 00318560 to 00418563 has its CatchHandler @ 00319394 */
        bVar13 = *(byte *)((long)puVar34 + lVar38 + 1);
        puVar43[lVar38] = puVar43[lVar38] + (uint)*(byte *)((long)puVar34 + lVar38);
        puVar43[lVar38 + 1] = (uint)bVar13 + puVar43[lVar38 + 1];
        bVar13 = *(byte *)((long)puVar34 + lVar38 + 3);
        puVar43[lVar38 + 2] = puVar43[lVar38 + 2] + (uint)*(byte *)((long)puVar34 + lVar38 + 2);
        puVar43[lVar38 + 3] = (uint)bVar13 + puVar43[lVar38 + 3];
        if (iVar11 + 4 < iVar2) {
          bVar13 = *(byte *)((long)puVar34 + lVar39 + 1);
          puVar43[lVar39] = puVar43[lVar39] + (uint)*(byte *)((long)puVar34 + lVar39);
                    /* try { // try from 003185e4 to 004185e7 has its CatchHandler @ 003193c4 */
          puVar43[lVar39 + 1] = (uint)bVar13 + puVar43[lVar39 + 1];
          bVar13 = *(byte *)((long)puVar34 + lVar39 + 3);
          puVar43[lVar39 + 2] = puVar43[lVar39 + 2] + (uint)*(byte *)((long)puVar34 + lVar39 + 2);
          puVar43[lVar39 + 3] = (uint)bVar13 + puVar43[lVar39 + 3];
          if (iVar11 + 8 < iVar2) {
            bVar13 = *(byte *)((long)puVar34 + lVar40 + 1);
            puVar43[lVar40] = puVar43[lVar40] + (uint)*(byte *)((long)puVar34 + lVar40);
            puVar43[lVar40 + 1] = (uint)bVar13 + puVar43[lVar40 + 1];
            bVar13 = *(byte *)((long)puVar34 + lVar40 + 3);
            puVar43[lVar40 + 2] = puVar43[lVar40 + 2] + (uint)*(byte *)((long)puVar34 + lVar40 + 2);
            puVar43[lVar40 + 3] = (uint)bVar13 + puVar43[lVar40 + 3];
          }
        }
      }
    }
LAB_00318668:
                    /* try { // try from 00318668 to 0041866b has its CatchHandler @ 00319440 */
    if (iVar6 < (int)uVar14) {
      if (((uint *)((long)puVar28 + lVar8) < puVar43 + (ulong)uVar15 + lVar37 &&
           puVar7 < (uint *)((long)puVar28 + lVar8 + (ulong)uVar15)) || (uVar15 < 0x13)) {
        lVar42 = 0;
                    /* try { // try from 00318b68 to 00418b6b has its CatchHandler @ 003194f4 */
        do {
                    /* try { // try from 00318b74 to 00418b77 has its CatchHandler @ 003194b4 */
          puVar7[lVar42] = puVar7[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42 + lVar37);
          lVar42 = lVar42 + 1;
                    /* try { // try from 00318b84 to 00418b87 has its CatchHandler @ 00319448 */
        } while (lVar42 != (ulong)((uVar14 - 1) - iVar6) + 1);
        goto joined_r0x0031847c;
      }
      iVar55 = iVar6;
      if ((uVar10 != 0) &&
         ((*puVar7 = *puVar7 + (uint)*(byte *)((long)puVar34 + lVar37), iVar55 = iVar3, uVar10 != 1
          && (puVar43[iVar3] = puVar43[iVar3] + (uint)*(byte *)((long)puVar34 + (long)iVar3),
             iVar55 = iVar4, uVar10 == 3)))) {
                    /* try { // try from 003186ec to 004186ef has its CatchHandler @ 00319448 */
        puVar43[iVar4] = puVar43[iVar4] + (uint)*(byte *)((long)puVar34 + (long)iVar4);
        iVar55 = iVar6 + 3;
      }
      if (0xe < (uVar15 - 1) - uVar10) {
        uVar49 = 0;
        puVar50 = puVar43 + lVar37 + (ulong)uVar10;
        puVar44 = puVar43 + (ulong)uVar10 + lVar37;
        pbVar48 = (byte *)((long)puVar28 + lVar8 + (ulong)uVar10);
        do {
          uVar61 = *(undefined8 *)puVar50;
          uVar49 = uVar49 + 1;
          uVar63 = *(undefined8 *)(puVar50 + 10);
          uVar62 = *(undefined8 *)(puVar50 + 8);
          bVar13 = *pbVar48;
          bVar19 = pbVar48[1];
          bVar20 = pbVar48[4];
          bVar21 = pbVar48[5];
          bVar22 = pbVar48[6];
          bVar23 = pbVar48[7];
          bVar24 = pbVar48[8];
          bVar25 = pbVar48[9];
          bVar26 = pbVar48[10];
          bVar27 = pbVar48[0xb];
                    /* try { // try from 00318748 to 0041874b has its CatchHandler @ 00319450 */
          uVar65 = *(undefined8 *)(puVar50 + 6);
          uVar64 = *(undefined8 *)(puVar50 + 4);
          iVar16 = (uint)bVar21 + (int)((ulong)uVar64 >> 0x20);
          auVar58._0_8_ =
               CONCAT44((uint)pbVar48[0xd] + (int)((ulong)*(undefined8 *)(puVar50 + 0xc) >> 0x20),
                        (uint)pbVar48[0xc] + (int)*(undefined8 *)(puVar50 + 0xc));
          auVar58._8_4_ = (uint)pbVar48[0xe] + (int)*(undefined8 *)(puVar50 + 0xe);
          auVar58._12_4_ = (uint)pbVar48[0xf] + (int)((ulong)*(undefined8 *)(puVar50 + 0xe) >> 0x20)
          ;
                    /* try { // try from 00318790 to 004187eb has its CatchHandler @ 00319518 */
          *(ulong *)(puVar44 + 2) =
               CONCAT44((int)((ulong)*(undefined8 *)(puVar50 + 2) >> 0x20) + (uint)pbVar48[3],
                        (int)*(undefined8 *)(puVar50 + 2) + (uint)pbVar48[2]);
          *(ulong *)puVar44 =
               CONCAT44((int)((ulong)uVar61 >> 0x20) + (uint)bVar19,
                        (int)uVar61 + (CONCAT12(bVar19,(ushort)bVar13) & 0xffff));
          *(ulong *)(puVar44 + 6) =
               CONCAT44((uint)bVar23 + (int)((ulong)uVar65 >> 0x20),(uint)bVar22 + (int)uVar65);
          *(ulong *)(puVar44 + 4) =
               CONCAT26((short)((uint)iVar16 >> 0x10),
                        CONCAT24((short)iVar16,
                                 (CONCAT12(bVar21,(ushort)bVar20) & 0xffff) + (int)uVar64));
          *(ulong *)(puVar44 + 10) =
               CONCAT44((uint)bVar27 + (int)((ulong)uVar63 >> 0x20),(uint)bVar26 + (int)uVar63);
          *(ulong *)(puVar44 + 8) =
               CONCAT44((uint)bVar25 + (int)((ulong)uVar62 >> 0x20),
                        (CONCAT12(bVar25,(ushort)bVar24) & 0xffff) + (int)uVar62);
          *(long *)(puVar44 + 0xe) = auVar58._8_8_;
          *(undefined8 *)(puVar44 + 0xc) = auVar58._0_8_;
          puVar50 = puVar50 + 0x10;
          puVar44 = puVar44 + 0x10;
          pbVar48 = pbVar48 + 0x10;
        } while (uVar49 < uVar9);
        iVar55 = iVar55 + iVar66;
        if (uVar15 - uVar10 == iVar66) goto joined_r0x0031847c;
      }
      lVar42 = (long)iVar55;
      puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
      if (iVar55 + 1 < (int)uVar14) {
        lVar42 = (long)(iVar55 + 1);
        puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
        if (iVar55 + 2 < (int)uVar14) {
                    /* try { // try from 00318804 to 00418807 has its CatchHandler @ 00319540 */
          lVar42 = (long)(iVar55 + 2);
          puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
          if (iVar55 + 3 < (int)uVar14) {
            lVar42 = (long)(iVar55 + 3);
            puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
            if (iVar55 + 4 < (int)uVar14) {
              lVar42 = (long)(iVar55 + 4);
              puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
              if (iVar55 + 5 < (int)uVar14) {
                lVar42 = (long)(iVar55 + 5);
                    /* try { // try from 00318878 to 0041887b has its CatchHandler @ 0031969c */
                puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                if (iVar55 + 6 < (int)uVar14) {
                  lVar42 = (long)(iVar55 + 6);
                  puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                  if (iVar55 + 7 < (int)uVar14) {
                    lVar42 = (long)(iVar55 + 7);
                    puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                    if (iVar55 + 8 < (int)uVar14) {
                      lVar42 = (long)(iVar55 + 8);
                    /* try { // try from 003188ec to 004188ef has its CatchHandler @ 003196e0 */
                      puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                      if (iVar55 + 9 < (int)uVar14) {
                        lVar42 = (long)(iVar55 + 9);
                        puVar43[lVar42] = puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                        if (iVar55 + 10 < (int)uVar14) {
                          lVar42 = (long)(iVar55 + 10);
                          puVar43[lVar42] =
                               puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                          if (iVar55 + 0xb < (int)uVar14) {
                            lVar42 = (long)(iVar55 + 0xb);
                    /* try { // try from 00318960 to 004189ff has its CatchHandler @ 00319518 */
                            puVar43[lVar42] =
                                 puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                            if (iVar55 + 0xc < (int)uVar14) {
                              lVar42 = (long)(iVar55 + 0xc);
                              puVar43[lVar42] =
                                   puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                              if (iVar55 + 0xd < (int)uVar14) {
                                lVar42 = (long)(iVar55 + 0xd);
                                puVar43[lVar42] =
                                     puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                                if (iVar55 + 0xe < (int)uVar14) {
                                  lVar42 = (long)(iVar55 + 0xe);
                                  puVar43[lVar42] =
                                       puVar43[lVar42] + (uint)*(byte *)((long)puVar34 + lVar42);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  } while( true );
  if (0 < (int)uVar14) {
    uVar46 = (uint)((ulong)pdVar35 >> 3) & 1;
    if (uVar14 < uVar46) {
      uVar46 = uVar14;
    }
    if (uVar14 < 5) {
      uVar46 = uVar14;
    }
    uVar52 = 0;
    if (uVar46 != 0) {
      *pdVar35 = (double)(int)*puVar43;
      uVar52 = uVar46;
      if ((uVar46 != 1) && (pdVar35[1] = (double)(int)puVar43[1], uVar46 != 2)) {
        pdVar35[2] = (double)(int)puVar43[2];
        if (uVar46 == 4) {
          pdVar35[3] = (double)(int)puVar43[3];
        }
        else {
          uVar52 = 3;
        }
      }
      if (uVar46 == uVar14) goto LAB_00318b14;
    }
    uVar1 = ((uVar14 - uVar46) - 4 >> 2) + 1;
    iVar11 = uVar1 * 4;
                    /* try { // try from 00318a70 to 00418a73 has its CatchHandler @ 00319450 */
    if (2 < (uVar14 - 1) - uVar46) {
      uVar47 = 0;
      puVar34 = puVar43 + uVar46;
      pdVar45 = pdVar35 + uVar46;
      do {
        uVar47 = uVar47 + 1;
        auVar59._0_8_ = (long)(int)*puVar34;
        auVar59._8_8_ = (long)(int)puVar34[1];
        auVar57._0_8_ = (long)(int)puVar34[2];
        auVar57._8_8_ = (long)(int)puVar34[3];
        auVar60 = NEON_scvtf(auVar59,8);
        pdVar45[1] = auVar60._8_8_;
        *pdVar45 = auVar60._0_8_;
        auVar60 = NEON_scvtf(auVar57,8);
        pdVar45[3] = auVar60._8_8_;
        pdVar45[2] = auVar60._0_8_;
        puVar34 = puVar34 + 4;
        pdVar45 = pdVar45 + 4;
      } while (uVar47 < uVar1);
      uVar52 = uVar52 + iVar11;
      if (iVar11 == uVar14 - uVar46) goto LAB_00318b14;
    }
    iVar11 = uVar52 + 1;
    pdVar35[(int)uVar52] = (double)(int)puVar43[(int)uVar52];
    if (iVar11 < (int)uVar14) {
      iVar12 = uVar52 + 2;
                    /* try { // try from 00318ae4 to 00418ae7 has its CatchHandler @ 003194b4 */
      pdVar35[iVar11] = (double)(int)puVar43[iVar11];
      if (iVar12 < (int)uVar14) {
        pdVar35[iVar12] = (double)(int)puVar43[iVar12];
      }
    }
  }
LAB_00318b14:
  if (bVar32) {
                    /* try { // try from 00318b1c to 00418b1f has its CatchHandler @ 0031934c */
    operator_delete__(puVar43);
  }
                    /* try { // try from 00318b2c to 00418b2f has its CatchHandler @ 00319508 */
                    /* try { // try from 00318b38 to 00418b3b has its CatchHandler @ 00319680 */
                    /* try { // try from 00318b44 to 00418b47 has its CatchHandler @ 003195d8 */
                    /* try { // try from 00318b50 to 00418b53 has its CatchHandler @ 003195a4 */
  return;
}


==================================================================

### FUNC 00318c5c (840 bytes) name=FUN_00318c5c

void FUN_00318c5c(char *param_1,char *param_2,long param_3)

{
  char cVar1;
  long lVar2;
  ulong uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  ulong uVar7;
  long lVar8;
  char cVar9;
  char *pcVar10;
  ulong uVar11;
  char *pcVar12;
  uint uVar13;
  char *pcVar14;
  int iVar15;
  long lVar16;
  uint uVar17;
  ulong uVar18;
  long lVar19;
  
                    /* try { // try from 00318c68 to 00418c6b has its CatchHandler @ 0031934c */
  lVar5 = (long)param_2 - (long)param_1;
  if (lVar5 < 0x11) {
    return;
  }
  if (param_3 != 0) {
    lVar5 = lVar5 >> 1;
    iVar15 = (int)param_1[1];
    param_3 = param_3 + -1;
    uVar13 = (uint)(byte)param_2[-1];
    iVar4 = (int)param_1[lVar5];
    if (param_1[lVar5] <= param_1[1]) goto LAB_00318d5c;
LAB_00318ca4:
    if (iVar4 < (int)uVar13) goto LAB_00318d6c;
    if ((int)uVar13 <= iVar15) goto LAB_00318d88;
    do {
      cVar1 = *param_1;
      uVar17 = (uint)cVar1;
      *param_1 = (char)uVar13;
      param_2[-1] = cVar1;
      iVar15 = (int)*param_1;
      iVar4 = (int)param_1[1];
      pcVar14 = param_2;
      pcVar12 = param_1;
      pcVar10 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = pcVar12 + 1;
            while (iVar4 < iVar15) {
              param_2 = param_2 + 1;
              iVar4 = (int)*param_2;
            }
            pcVar14 = pcVar14 + -1;
            while (iVar15 < (int)uVar17) {
              pcVar14 = pcVar14 + -1;
              uVar17 = (uint)*pcVar14;
            }
            if (pcVar14 <= param_2) break;
                    /* try { // try from 00318d0c to 00418d97 has its CatchHandler @ 003192b0 */
            *param_2 = (char)uVar17;
            *pcVar14 = (char)iVar4;
            uVar17 = (uint)(byte)pcVar14[-1];
            iVar15 = (int)*param_1;
            iVar4 = (int)param_2[1];
            pcVar12 = param_2;
          }
          FUN_00318c5c(param_2,pcVar10,param_3);
          lVar5 = (long)param_2 - (long)param_1;
          if (lVar5 < 0x11) {
            return;
          }
          if (param_3 == 0) goto LAB_00318e8c;
          lVar5 = lVar5 >> 1;
          iVar15 = (int)param_1[1];
          param_3 = param_3 + -1;
          iVar4 = (int)param_1[lVar5];
          uVar13 = (uint)(byte)param_2[-1];
          if (param_1[1] < iVar4) goto LAB_00318ca4;
LAB_00318d5c:
          if ((int)uVar13 <= iVar15) break;
LAB_00318d88:
          iVar4 = (int)*param_1;
          param_1[1] = *param_1;
          *param_1 = (char)iVar15;
          uVar17 = (uint)(byte)param_2[-1];
          pcVar14 = param_2;
          pcVar12 = param_1;
          pcVar10 = param_2;
        }
        if (iVar4 < (int)uVar13) break;
LAB_00318d6c:
        cVar1 = *param_1;
        *param_1 = (char)iVar4;
        param_1[lVar5] = cVar1;
        iVar15 = (int)*param_1;
        iVar4 = (int)param_1[1];
        uVar17 = (uint)(byte)param_2[-1];
        pcVar14 = param_2;
        pcVar12 = param_1;
        pcVar10 = param_2;
      }
    } while( true );
  }
LAB_00318e8c:
  lVar19 = lVar5 + -2 >> 1;
  lVar16 = lVar19;
  do {
    pcVar12 = param_1 + lVar16;
    cVar1 = param_1[lVar16];
    lVar6 = lVar16;
    while (lVar6 < lVar5 + -1 >> 1) {
      lVar8 = (lVar6 + 1) * 2;
      pcVar12 = param_1 + lVar8;
                    /* try { // try from 00318ec8 to 00418ecb has its CatchHandler @ 003192b8 */
      cVar9 = param_1[lVar8];
      if ((int)cVar9 < (int)(uint)(byte)pcVar12[-1]) {
        lVar8 = lVar8 + -1;
        pcVar12 = param_1 + lVar8;
        cVar9 = param_1[lVar8];
      }
      param_1[lVar6] = cVar9;
      lVar6 = lVar8;
    }
    if ((lVar6 == lVar19) && (((uint)lVar5 & 1) != 1)) {
      lVar8 = (lVar6 + 1) * 2;
      lVar6 = lVar8 + -1;
                    /* try { // try from 00318dc0 to 00418dc3 has its CatchHandler @ 003192a8 */
      *pcVar12 = param_1[lVar8 + -1];
      pcVar12 = param_1 + lVar6;
    }
    if (lVar16 < lVar6) {
      lVar8 = lVar6 + -1 >> 1;
      cVar9 = param_1[lVar8];
                    /* try { // try from 00318de0 to 00418de3 has its CatchHandler @ 003191a8 */
      while (lVar2 = lVar8, cVar9 < cVar1) {
        param_1[lVar6] = cVar9;
        pcVar12 = param_1 + lVar2;
        if (lVar2 <= lVar16) break;
        lVar8 = (lVar2 + -1) / 2;
        cVar9 = param_1[lVar8];
        lVar6 = lVar2;
      }
      *pcVar12 = cVar1;
      if (lVar16 == 0) break;
    }
    else {
      *pcVar12 = cVar1;
    }
    lVar16 = lVar16 + -1;
  } while( true );
LAB_00318dec:
  param_2 = param_2 + -1;
  cVar1 = *param_2;
  uVar18 = (long)param_2 - (long)param_1;
  *param_2 = *param_1;
  lVar5 = (long)(uVar18 - 1) / 2;
  if (lVar5 < 1) {
    uVar7 = uVar18 & 1;
    pcVar12 = param_1;
    if ((uVar18 & 1) == 0) goto LAB_00318e50;
  }
  else {
    uVar11 = 0;
    do {
      uVar7 = (uVar11 + 1) * 2;
      pcVar12 = param_1 + uVar7;
      cVar9 = param_1[uVar7];
      if ((int)cVar9 < (int)(uint)(byte)pcVar12[-1]) {
        uVar7 = uVar7 - 1;
        pcVar12 = param_1 + uVar7;
        cVar9 = param_1[uVar7];
      }
      param_1[uVar11] = cVar9;
      uVar11 = uVar7;
    } while ((long)uVar7 < lVar5);
    if ((uVar18 & 1) == 0) {
LAB_00318e50:
                    /* try { // try from 00318e54 to 00418e57 has its CatchHandler @ 003192e0 */
      if (uVar7 == (long)(uVar18 - 2) / 2) {
                    /* try { // try from 00318f3c to 00418f3f has its CatchHandler @ 003192a8 */
        lVar5 = (uVar7 + 1) * 2;
        uVar7 = lVar5 - 1;
        *pcVar12 = param_1[lVar5 + -1];
        pcVar12 = param_1 + uVar7;
      }
      else if ((long)uVar7 < 1) goto LAB_00318e68;
    }
    uVar11 = (long)(uVar7 - 1) >> 1;
    cVar9 = param_1[uVar11];
    while (uVar3 = uVar11, cVar9 < cVar1) {
      param_1[uVar7] = cVar9;
      pcVar12 = param_1 + uVar3;
      uVar11 = (long)(uVar3 - 1) >> 1;
      if (uVar3 == 0) break;
      cVar9 = param_1[uVar11];
      uVar7 = uVar3;
    }
  }
LAB_00318e68:
  *pcVar12 = cVar1;
  if ((long)uVar18 < 2) {
    return;
  }
  goto LAB_00318dec;
}


==================================================================

### FUNC 00318fb0 (2376 bytes) name=FUN_00318fb0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00318fb0(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  byte bVar5;
  long lVar6;
  int iVar7;
  size_t sVar8;
  undefined1 auVar9 [16];
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  undefined1 (*pauVar14) [16];
  size_t __n;
  byte *pbVar15;
  int iVar16;
  byte *pbVar17;
  byte *pbVar18;
  uint uVar19;
  undefined1 (*pauVar20) [16];
  byte *pbVar21;
  uint uVar22;
  undefined1 (*pauVar23) [16];
  undefined1 (*pauVar24) [16];
  int iVar25;
  long lVar26;
  byte *__dest;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  int iVar29;
  byte *local_418;
  byte local_408 [1032];
  
                    /* try { // try from 00318fb0 to 00418fb3 has its CatchHandler @ 00319328 */
  local_418 = local_408;
  lVar11 = *(long *)(param_1 + 0x10);
  uVar4 = param_3 & 1 ^ 1;
  lVar12 = *(long *)(param_2 + 0x10);
  if (uVar4 == 0) {
    iVar25 = *(int *)(param_1 + 8);
    iVar29 = *(int *)(param_1 + 0xc);
                    /* try { // try from 003198b8 to 004198bb has its CatchHandler @ 0031adc0 */
    if (0x408 < (ulong)(long)iVar25) {
      local_418 = operator_new__((long)iVar25);
                    /* try { // try from 003198d4 to 004198d7 has its CatchHandler @ 0031ada0 */
    }
  }
  else {
                    /* try { // try from 00319024 to 00419027 has its CatchHandler @ 00319304 */
    iVar29 = *(int *)(param_1 + 8);
    iVar25 = *(int *)(param_1 + 0xc);
  }
  if (0 < iVar29) {
    __n = (size_t)iVar25;
    uVar3 = iVar25 / 2;
    lVar26 = 0;
    iVar7 = iVar25 + -1;
                    /* try { // try from 00319098 to 004190db has its CatchHandler @ 003192b0 */
    do {
      if (uVar4 == 0) {
        lVar13 = 0;
        __dest = local_418;
        if (0 < iVar25) {
          do {
            local_418[lVar13] =
                 *(byte *)(*(long *)(param_1 + 0x10) + lVar13 * **(long **)(param_1 + 0x48) + lVar26
                          );
            lVar13 = lVar13 + 1;
          } while ((int)lVar13 < iVar25);
        }
      }
      else {
                    /* catch() { ... } // from try @ 00319768 with catch @ 00319720
                       catch() { ... } // from try @ 00319860 with catch @ 00319720
                       catch() { ... } // from try @ 003198f8 with catch @ 00319720
                       catch() { ... } // from try @ 00319938 with catch @ 00319720
                       catch() { ... } // from try @ 0031a354 with catch @ 00319720
                       catch() { ... } // from try @ 0031a424 with catch @ 00319720
                       catch() { ... } // from try @ 0031aba0 with catch @ 00319720
                       catch() { ... } // from try @ 0031ac60 with catch @ 00319720
                       catch() { ... } // from try @ 0031ad88 with catch @ 00319720
                       catch() { ... } // from try @ 0031ad9c with catch @ 00319720
                       catch() { ... } // from try @ 0031adb4 with catch @ 00319720 */
        __dest = (byte *)(*(long *)(param_2 + 0x10) + lVar26 * **(long **)(param_2 + 0x48));
        if (lVar11 != lVar12) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar26 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      pbVar15 = __dest + __n;
      if (__dest != pbVar15) {
        FUN_00318c5c(__dest,pbVar15,(0x3f - LZCOUNT(__n)) * 2);
        pbVar17 = __dest;
        if (iVar25 < 0x11) {
          while (pbVar21 = pbVar17 + 1, pbVar15 != pbVar21) {
            bVar5 = *pbVar21;
            if ((char)bVar5 < (char)*__dest) {
              sVar8 = (long)pbVar21 - (long)__dest;
              if (sVar8 != 0) {
                memmove(pbVar21 + (1 - sVar8),__dest,sVar8);
              }
              *__dest = bVar5;
              pbVar17 = pbVar21;
            }
            else {
              uVar19 = (uint)*pbVar17;
                    /* catch() { ... } // from try @ 003188ec with catch @ 003196e0
                       catch() { ... } // from try @ 00318bb0 with catch @ 003196e0 */
              pbVar18 = pbVar21;
              if ((int)(char)bVar5 < (int)(uint)*pbVar17) {
                do {
                  pbVar17 = pbVar18 + -1;
                  *pbVar18 = (byte)uVar19;
                  uVar19 = (uint)pbVar18[-2];
                  pbVar18 = pbVar17;
                } while ((int)(char)bVar5 < (int)uVar19);
                *pbVar17 = bVar5;
                pbVar17 = pbVar21;
              }
              else {
                    /* try { // try from 00319860 to 00419863 has its CatchHandler @ 00319720 */
                *pbVar21 = bVar5;
                pbVar17 = pbVar21;
              }
            }
          }
        }
        else {
          pbVar17 = __dest + 1;
          do {
            pbVar21 = pbVar17;
            bVar5 = *pbVar21;
            if ((char)bVar5 < (char)*__dest) {
              sVar8 = (long)pbVar21 - (long)__dest;
              if (sVar8 != 0) {
                memmove(pbVar21 + (1 - sVar8),__dest,sVar8);
              }
                    /* try { // try from 00319768 to 00419807 has its CatchHandler @ 00319720 */
              *__dest = bVar5;
            }
            else {
              uVar19 = (uint)pbVar21[-1];
              pbVar17 = pbVar21;
              if ((int)(char)bVar5 < (int)(uint)pbVar21[-1]) {
                do {
                  pbVar18 = pbVar17 + -1;
                  *pbVar17 = (byte)uVar19;
                  uVar19 = (uint)pbVar17[-2];
                  pbVar17 = pbVar18;
                } while ((int)(char)bVar5 < (int)uVar19);
                *pbVar18 = bVar5;
              }
              else {
                *pbVar21 = bVar5;
              }
            }
            pbVar17 = pbVar21 + 1;
          } while (pbVar17 != __dest + 0x10);
          if (pbVar15 != pbVar17) {
            uVar19 = (uint)*pbVar21;
            iVar16 = (int)(char)*pbVar17;
            if ((int)(char)*pbVar17 < (int)(uint)*pbVar21) goto LAB_003197a0;
            do {
              *pbVar17 = (byte)iVar16;
              while( true ) {
                pbVar17 = pbVar17 + 1;
                if (pbVar17 == pbVar15) goto LAB_00319144;
                uVar19 = (uint)pbVar17[-1];
                iVar16 = (int)(char)*pbVar17;
                pbVar21 = pbVar17 + -1;
                if ((int)uVar19 <= iVar16) break;
LAB_003197a0:
                do {
                  pbVar18 = pbVar21;
                  pbVar18[1] = (byte)uVar19;
                  uVar19 = (uint)pbVar18[-1];
                  pbVar21 = pbVar18 + -1;
                } while (iVar16 < (int)uVar19);
                *pbVar18 = (byte)iVar16;
              }
            } while( true );
          }
        }
      }
LAB_00319144:
                    /* try { // try from 0031914c to 0041915b has its CatchHandler @ 003194b4 */
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar3)) {
        if (uVar3 < 0x14 || (long)(__n - uVar3) < (long)(ulong)uVar3 && 0 < iVar25) {
          lVar13 = 0;
                    /* try { // try from 00319878 to 0041987b has its CatchHandler @ 0031adb8 */
          pbVar15 = __dest + iVar7;
          do {
            bVar5 = __dest[lVar13];
            __dest[lVar13] = *pbVar15;
            lVar13 = lVar13 + 1;
            *pbVar15 = bVar5;
            pbVar15 = pbVar15 + -1;
          } while ((int)lVar13 < (int)uVar3);
        }
        else {
          uVar19 = -(int)__dest & 0xf;
                    /* try { // try from 00319164 to 00419167 has its CatchHandler @ 003192b0 */
          uVar10 = uVar3;
          if (uVar19 < uVar3) {
            uVar10 = uVar19;
          }
          uVar19 = uVar10;
          if (uVar10 != 0) {
            bVar5 = *__dest;
                    /* try { // try from 00319170 to 00419173 has its CatchHandler @ 00319304 */
                    /* try { // try from 0031917c to 0041917f has its CatchHandler @ 00319328 */
            *__dest = __dest[iVar7];
            __dest[iVar7] = bVar5;
                    /* try { // try from 00319188 to 0041918b has its CatchHandler @ 003192a8 */
            if (uVar10 != 1) {
                    /* try { // try from 00319194 to 00419197 has its CatchHandler @ 003192b8 */
              bVar5 = __dest[1];
              __dest[1] = __dest[iVar25 + -2];
                    /* try { // try from 003191a0 to 004191a3 has its CatchHandler @ 003192e0 */
              __dest[iVar25 + -2] = bVar5;
              if (uVar10 != 2) {
                    /* catch() { ... } // from try @ 00318de0 with catch @ 003191a8 */
                bVar5 = __dest[2];
                __dest[2] = __dest[iVar25 + -3];
                __dest[iVar25 + -3] = bVar5;
                if (uVar10 != 3) {
                  bVar5 = __dest[3];
                  __dest[3] = __dest[iVar25 + -4];
                  __dest[iVar25 + -4] = bVar5;
                  if (uVar10 != 4) {
                    bVar5 = __dest[4];
                    __dest[4] = __dest[iVar25 + -5];
                    __dest[iVar25 + -5] = bVar5;
                    if (uVar10 != 5) {
                      bVar5 = __dest[5];
                      __dest[5] = __dest[iVar25 + -6];
                      __dest[iVar25 + -6] = bVar5;
                      if (uVar10 == 6) {
                        uVar19 = 6;
                      }
                      else {
                        bVar5 = __dest[6];
                        __dest[6] = __dest[iVar25 + -7];
                        __dest[iVar25 + -7] = bVar5;
                        if (uVar10 != 7) {
                          bVar5 = __dest[7];
                          __dest[7] = __dest[iVar25 + -8];
                          __dest[iVar25 + -8] = bVar5;
                          if (uVar10 != 8) {
                            bVar5 = __dest[8];
                            __dest[8] = __dest[iVar25 + -9];
                            __dest[iVar25 + -9] = bVar5;
                            if (uVar10 != 9) {
                              bVar5 = __dest[9];
                              __dest[9] = __dest[iVar25 + -10];
                              __dest[iVar25 + -10] = bVar5;
                    /* try { // try from 003192a4 to 004192a7 has its CatchHandler @ 00317050 */
                              if (uVar10 != 10) {
                    /* catch() { ... } // from try @ 00318dc0 with catch @ 003192a8
                       catch() { ... } // from try @ 00318f3c with catch @ 003192a8
                       catch() { ... } // from try @ 00319188 with catch @ 003192a8 */
                                bVar5 = __dest[10];
                    /* catch() { ... } // from try @ 00318d0c with catch @ 003192b0
                       catch() { ... } // from try @ 00319098 with catch @ 003192b0
                       catch() { ... } // from try @ 00319164 with catch @ 003192b0 */
                    /* catch() { ... } // from try @ 00318ec8 with catch @ 003192b8
                       catch() { ... } // from try @ 00319194 with catch @ 003192b8 */
                                __dest[10] = __dest[iVar25 + -0xb];
                                __dest[iVar25 + -0xb] = bVar5;
                                if (uVar10 != 0xb) {
                                  bVar5 = __dest[0xb];
                                  __dest[0xb] = __dest[iVar25 + -0xc];
                    /* catch() { ... } // from try @ 00318e54 with catch @ 003192e0
                       catch() { ... } // from try @ 003191a0 with catch @ 003192e0 */
                                  __dest[iVar25 + -0xc] = bVar5;
                                  if (uVar10 != 0xc) {
                                    bVar5 = __dest[0xc];
                                    __dest[0xc] = __dest[iVar25 + -0xd];
                                    __dest[iVar25 + -0xd] = bVar5;
                    /* catch() { ... } // from try @ 00319024 with catch @ 00319304
                       catch() { ... } // from try @ 00319170 with catch @ 00319304 */
                                    if (uVar10 != 0xd) {
                                      bVar5 = __dest[0xd];
                                      __dest[0xd] = __dest[iVar25 + -0xe];
                                      __dest[iVar25 + -0xe] = bVar5;
                                      if (uVar10 == 0xf) {
                    /* catch() { ... } // from try @ 00318fb0 with catch @ 00319328
                       catch() { ... } // from try @ 0031917c with catch @ 00319328 */
                                        bVar5 = __dest[0xe];
                                        __dest[0xe] = __dest[iVar25 + -0xf];
                                        __dest[iVar25 + -0xf] = bVar5;
                                      }
                                      else {
                    /* try { // try from 0031989c to 0041989f has its CatchHandler @ 0031adbc */
                                        uVar19 = 0xe;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
                    /* catch() { ... } // from try @ 00317200 with catch @ 0031934c
                       catch() { ... } // from try @ 00317b20 with catch @ 0031934c
                       catch() { ... } // from try @ 00317ea8 with catch @ 0031934c
                       catch() { ... } // from try @ 00318204 with catch @ 0031934c
                       catch() { ... } // from try @ 00318b1c with catch @ 0031934c
                       catch() { ... } // from try @ 00318b5c with catch @ 0031934c
                       catch() { ... } // from try @ 00318bf8 with catch @ 0031934c
                       catch() { ... } // from try @ 00318c68 with catch @ 0031934c */
                    /* catch() { ... } // from try @ 003173a4 with catch @ 00319354
                       catch() { ... } // from try @ 00318050 with catch @ 00319354 */
          uVar1 = ((uVar3 - uVar10) - 0x10 >> 4) + 1;
          iVar16 = uVar1 * 0x10;
          if (0xe < (uVar3 - 1) - uVar10) {
            uVar22 = 0;
            pauVar20 = (undefined1 (*) [16])(__dest + ((__n - 0x10) - (ulong)uVar10));
            pauVar14 = (undefined1 (*) [16])(__dest + uVar10);
            pauVar23 = pauVar20;
            pauVar24 = (undefined1 (*) [16])(__dest + uVar10);
            do {
              auVar9 = *pauVar23;
                    /* catch() { ... } // from try @ 00318560 with catch @ 00319394 */
              uVar22 = uVar22 + 1;
              pauVar23 = pauVar23 + -1;
              auVar27._8_8_ = _DAT_00319928;
              auVar27._0_8_ = _DAT_00319920;
              auVar28 = a64_TBL(ZEXT816(0),auVar9,auVar27);
              auVar9._8_8_ = _DAT_00319928;
              auVar9._0_8_ = _DAT_00319920;
              auVar27 = a64_TBL(ZEXT816(0),*pauVar24,auVar9);
              *(long *)(*pauVar14 + 8) = auVar28._8_8_;
              *(long *)*pauVar14 = auVar28._0_8_;
              *(long *)(*pauVar20 + 8) = auVar27._8_8_;
              *(long *)*pauVar20 = auVar27._0_8_;
              pauVar20 = pauVar20 + -1;
              pauVar14 = pauVar14 + 1;
              pauVar24 = pauVar24 + 1;
            } while (uVar22 < uVar1);
            uVar19 = uVar19 + iVar16;
                    /* catch() { ... } // from try @ 003185e4 with catch @ 003193c4
                       catch() { ... } // from try @ 00318ba4 with catch @ 003193c4 */
            if (iVar16 == uVar3 - uVar10) goto LAB_00319614;
          }
          iVar16 = uVar19 + 1;
          bVar5 = __dest[(int)uVar19];
          __dest[(int)uVar19] = __dest[(int)(iVar7 - uVar19)];
          __dest[(int)(iVar7 - uVar19)] = bVar5;
          if (iVar16 < (int)uVar3) {
            iVar2 = uVar19 + 2;
            bVar5 = __dest[iVar16];
            __dest[iVar16] = __dest[iVar7 - iVar16];
            __dest[iVar7 - iVar16] = bVar5;
            if (iVar2 < (int)uVar3) {
              iVar16 = uVar19 + 3;
                    /* catch() { ... } // from try @ 003184b8 with catch @ 0031942c */
              bVar5 = __dest[iVar2];
              __dest[iVar2] = __dest[iVar7 - iVar2];
              __dest[iVar7 - iVar2] = bVar5;
                    /* try { // try from 0031943c to 0041943f has its CatchHandler @ 00317050 */
              if (iVar16 < (int)uVar3) {
                    /* catch() { ... } // from try @ 00318668 with catch @ 00319440
                       catch() { ... } // from try @ 00318b94 with catch @ 00319440 */
                    /* catch() { ... } // from try @ 003186ec with catch @ 00319448
                       catch() { ... } // from try @ 00318b84 with catch @ 00319448 */
                iVar2 = uVar19 + 4;
                    /* catch() { ... } // from try @ 00318748 with catch @ 00319450
                       catch() { ... } // from try @ 00318a70 with catch @ 00319450
                       catch() { ... } // from try @ 00318bc8 with catch @ 00319450 */
                bVar5 = __dest[iVar16];
                __dest[iVar16] = __dest[iVar7 - iVar16];
                __dest[iVar7 - iVar16] = bVar5;
                if (iVar2 < (int)uVar3) {
                  iVar16 = uVar19 + 5;
                  bVar5 = __dest[iVar2];
                    /* catch() { ... } // from try @ 00317594 with catch @ 00319474
                       catch() { ... } // from try @ 0031802c with catch @ 00319474 */
                  __dest[iVar2] = __dest[iVar7 - iVar2];
                  __dest[iVar7 - iVar2] = bVar5;
                  if (iVar16 < (int)uVar3) {
                    iVar2 = uVar19 + 6;
                    bVar5 = __dest[iVar16];
                    __dest[iVar16] = __dest[iVar7 - iVar16];
                    __dest[iVar7 - iVar16] = bVar5;
                    /* catch() { ... } // from try @ 00317884 with catch @ 003194b4
                       catch() { ... } // from try @ 00317950 with catch @ 003194b4
                       catch() { ... } // from try @ 00317cd8 with catch @ 003194b4
                       catch() { ... } // from try @ 003184fc with catch @ 003194b4
                       catch() { ... } // from try @ 00318ae4 with catch @ 003194b4
                       catch() { ... } // from try @ 00318b74 with catch @ 003194b4
                       catch() { ... } // from try @ 00318cc8 with catch @ 003194b4
                       catch() { ... } // from try @ 0031914c with catch @ 003194b4 */
                    if (iVar2 < (int)uVar3) {
                      iVar16 = uVar19 + 7;
                    /* catch() { ... } // from try @ 00317128 with catch @ 003194bc */
                    /* try { // try from 003194cc to 004194cf has its CatchHandler @ 00317050 */
                      bVar5 = __dest[iVar2];
                    /* catch() { ... } // from try @ 003177f8 with catch @ 003194d0
                       catch() { ... } // from try @ 00317ffc with catch @ 003194d0 */
                      __dest[iVar2] = __dest[iVar7 - iVar2];
                      __dest[iVar7 - iVar2] = bVar5;
                      if (iVar16 < (int)uVar3) {
                        iVar2 = uVar19 + 8;
                    /* catch() { ... } // from try @ 00317180 with catch @ 003194f4
                       catch() { ... } // from try @ 00317b94 with catch @ 003194f4
                       catch() { ... } // from try @ 00317f1c with catch @ 003194f4
                       catch() { ... } // from try @ 00318b68 with catch @ 003194f4
                       catch() { ... } // from try @ 00318c1c with catch @ 003194f4
                       catch() { ... } // from try @ 00318c58 with catch @ 003194f4 */
                        bVar5 = __dest[iVar16];
                        __dest[iVar16] = __dest[iVar7 - iVar16];
                        __dest[iVar7 - iVar16] = bVar5;
                        if (iVar2 < (int)uVar3) {
                    /* catch() { ... } // from try @ 0031715c with catch @ 00319508
                       catch() { ... } // from try @ 00317c08 with catch @ 00319508
                       catch() { ... } // from try @ 00317f90 with catch @ 00319508
                       catch() { ... } // from try @ 00318b2c with catch @ 00319508
                       catch() { ... } // from try @ 00318c10 with catch @ 00319508
                       catch() { ... } // from try @ 00318c48 with catch @ 00319508 */
                    /* catch() { ... } // from try @ 00317608 with catch @ 00319510
                       catch() { ... } // from try @ 00318020 with catch @ 00319510 */
                          iVar16 = uVar19 + 9;
                    /* catch() { ... } // from try @ 00318790 with catch @ 00319518
                       catch() { ... } // from try @ 00318960 with catch @ 00319518
                       catch() { ... } // from try @ 00318bd4 with catch @ 00319518 */
                          bVar5 = __dest[iVar2];
                          __dest[iVar2] = __dest[iVar7 - iVar2];
                          __dest[iVar7 - iVar2] = bVar5;
                          if (iVar16 < (int)uVar3) {
                            iVar2 = uVar19 + 10;
                    /* catch() { ... } // from try @ 00318804 with catch @ 00319540 */
                            bVar5 = __dest[iVar16];
                            __dest[iVar16] = __dest[iVar7 - iVar16];
                            __dest[iVar7 - iVar16] = bVar5;
                    /* catch() { ... } // from try @ 00317330 with catch @ 00319554
                       catch() { ... } // from try @ 0031805c with catch @ 00319554 */
                            if (iVar2 < (int)uVar3) {
                              iVar16 = uVar19 + 0xb;
                              bVar5 = __dest[iVar2];
                              __dest[iVar2] = __dest[iVar7 - iVar2];
                    /* catch() { ... } // from try @ 003172bc with catch @ 00319578 */
                              __dest[iVar7 - iVar2] = bVar5;
                              if (iVar16 < (int)uVar3) {
                                iVar2 = uVar19 + 0xc;
                                bVar5 = __dest[iVar16];
                                __dest[iVar16] = __dest[iVar7 - iVar16];
                                __dest[iVar7 - iVar16] = bVar5;
                    /* catch() { ... } // from try @ 00317250 with catch @ 003195a4
                       catch() { ... } // from try @ 00317aac with catch @ 003195a4
                       catch() { ... } // from try @ 00317e34 with catch @ 003195a4
                       catch() { ... } // from try @ 00318b50 with catch @ 003195a4
                       catch() { ... } // from try @ 00318bec with catch @ 003195a4 */
                                if (iVar2 < (int)uVar3) {
                                  iVar16 = uVar19 + 0xd;
                    /* catch() { ... } // from try @ 003174ac with catch @ 003195ac */
                                  bVar5 = __dest[iVar2];
                                  __dest[iVar2] = __dest[iVar7 - iVar2];
                                  __dest[iVar7 - iVar2] = bVar5;
                                  if (iVar16 < (int)uVar3) {
                    /* catch() { ... } // from try @ 00317444 with catch @ 003195d8
                       catch() { ... } // from try @ 00317a38 with catch @ 003195d8
                       catch() { ... } // from try @ 00317dc0 with catch @ 003195d8
                       catch() { ... } // from try @ 00318b44 with catch @ 003195d8
                       catch() { ... } // from try @ 00318be0 with catch @ 003195d8 */
                                    iVar2 = uVar19 + 0xe;
                    /* catch() { ... } // from try @ 00317520 with catch @ 003195e0
                       catch() { ... } // from try @ 00318038 with catch @ 003195e0 */
                                    bVar5 = __dest[iVar16];
                                    __dest[iVar16] = __dest[iVar7 - iVar16];
                                    __dest[iVar7 - iVar16] = bVar5;
                                    if (iVar2 < (int)uVar3) {
                    /* catch() { ... } // from try @ 00317418 with catch @ 00319604
                       catch() { ... } // from try @ 00318044 with catch @ 00319604 */
                                      bVar5 = __dest[iVar2];
                    /* catch() { ... } // from try @ 00317784 with catch @ 0031960c
                       catch() { ... } // from try @ 00318008 with catch @ 0031960c */
                                      __dest[iVar2] = __dest[iVar7 - iVar2];
                                      __dest[iVar7 - iVar2] = bVar5;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00319614:
      if ((uVar4 == 0) && (0 < iVar25)) {
        lVar13 = 0;
        do {
          pbVar15 = __dest + lVar13;
                    /* catch() { ... } // from try @ 00317710 with catch @ 00319630
                       catch() { ... } // from try @ 00318014 with catch @ 00319630 */
          lVar6 = lVar13 * **(long **)(param_2 + 0x48);
          lVar13 = lVar13 + 1;
          *(byte *)(*(long *)(param_2 + 0x10) + lVar6 + lVar26) = *pbVar15;
        } while ((int)lVar13 < iVar25);
      }
      lVar26 = lVar26 + 1;
                    /* catch() { ... } // from try @ 0031769c with catch @ 00319654 */
    } while ((int)lVar26 < iVar29);
  }
  if ((local_418 != local_408) && (local_418 != (byte *)0x0)) {
    operator_delete__(local_418);
  }
                    /* catch() { ... } // from try @ 00317634 with catch @ 00319680
                       catch() { ... } // from try @ 003179c4 with catch @ 00319680
                       catch() { ... } // from try @ 00317d4c with catch @ 00319680
                       catch() { ... } // from try @ 00318b38 with catch @ 00319680
                       catch() { ... } // from try @ 00318c04 with catch @ 00319680 */
                    /* catch() { ... } // from try @ 00317948 with catch @ 00319688 */
                    /* catch() { ... } // from try @ 00318878 with catch @ 0031969c
                       catch() { ... } // from try @ 00318bbc with catch @ 0031969c */
  return;
}


==================================================================

### FUNC 00319930 (840 bytes) name=FUN_00319930

void FUN_00319930(byte *param_1,byte *param_2,long param_3)

{
  long lVar1;
  ulong uVar2;
  byte bVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  byte *pbVar8;
  ulong uVar9;
  byte *pbVar10;
  byte bVar11;
  byte *pbVar12;
  byte bVar13;
  long lVar14;
  byte bVar15;
  ulong uVar16;
  long lVar17;
  
                    /* try { // try from 00319938 to 00419997 has its CatchHandler @ 00319720 */
  lVar4 = (long)param_2 - (long)param_1;
  if (lVar4 < 0x11) {
    return;
  }
  if (param_3 != 0) {
    lVar4 = lVar4 >> 1;
    bVar13 = param_1[1];
    param_3 = param_3 + -1;
    bVar11 = param_2[-1];
    bVar3 = param_1[lVar4];
    if (bVar3 <= bVar13) goto LAB_00319a30;
LAB_00319978:
    if (bVar3 < bVar11) goto LAB_00319a40;
    if (bVar11 <= bVar13) goto LAB_00319a5c;
    do {
      bVar15 = *param_1;
      *param_1 = bVar11;
      param_2[-1] = bVar15;
      bVar13 = *param_1;
      bVar3 = param_1[1];
      pbVar12 = param_2;
      pbVar10 = param_1;
      pbVar8 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = pbVar10 + 1;
            while (bVar3 < bVar13) {
              param_2 = param_2 + 1;
              bVar3 = *param_2;
            }
            pbVar12 = pbVar12 + -1;
            while (bVar13 < bVar15) {
              pbVar12 = pbVar12 + -1;
              bVar15 = *pbVar12;
            }
            if (pbVar12 <= param_2) break;
            *param_2 = bVar15;
            *pbVar12 = bVar3;
            bVar15 = pbVar12[-1];
            bVar13 = *param_1;
            bVar3 = param_2[1];
            pbVar10 = param_2;
          }
          FUN_00319930(param_2,pbVar8,param_3);
          lVar4 = (long)param_2 - (long)param_1;
          if (lVar4 < 0x11) {
            return;
          }
          if (param_3 == 0) goto LAB_00319b60;
          lVar4 = lVar4 >> 1;
          bVar13 = param_1[1];
          param_3 = param_3 + -1;
          bVar3 = param_1[lVar4];
          bVar11 = param_2[-1];
          if (bVar13 < bVar3) goto LAB_00319978;
LAB_00319a30:
          if (bVar11 <= bVar13) break;
LAB_00319a5c:
          bVar3 = *param_1;
          param_1[1] = bVar3;
          *param_1 = bVar13;
          bVar15 = param_2[-1];
          pbVar12 = param_2;
          pbVar10 = param_1;
          pbVar8 = param_2;
        }
        if (bVar3 < bVar11) break;
LAB_00319a40:
        bVar13 = *param_1;
        *param_1 = bVar3;
        param_1[lVar4] = bVar13;
        bVar13 = *param_1;
        bVar3 = param_1[1];
        bVar15 = param_2[-1];
        pbVar12 = param_2;
        pbVar10 = param_1;
        pbVar8 = param_2;
      }
    } while( true );
  }
LAB_00319b60:
  lVar17 = lVar4 + -2 >> 1;
  lVar14 = lVar17;
  do {
    pbVar10 = param_1 + lVar14;
    bVar13 = param_1[lVar14];
    lVar5 = lVar14;
    while (lVar5 < lVar4 + -1 >> 1) {
      lVar7 = (lVar5 + 1) * 2;
      pbVar10 = param_1 + lVar7;
      bVar3 = param_1[lVar7];
      if (bVar3 < pbVar10[-1]) {
        lVar7 = lVar7 + -1;
        pbVar10 = param_1 + lVar7;
        bVar3 = param_1[lVar7];
      }
      param_1[lVar5] = bVar3;
      lVar5 = lVar7;
    }
    if ((lVar5 == lVar17) && (((uint)lVar4 & 1) != 1)) {
      lVar7 = (lVar5 + 1) * 2;
      lVar5 = lVar7 + -1;
      *pbVar10 = param_1[lVar7 + -1];
      pbVar10 = param_1 + lVar5;
    }
    if (lVar14 < lVar5) {
      lVar7 = lVar5 + -1 >> 1;
      bVar3 = param_1[lVar7];
      while (lVar1 = lVar7, bVar3 < bVar13) {
        param_1[lVar5] = bVar3;
        pbVar10 = param_1 + lVar1;
        if (lVar1 <= lVar14) break;
        lVar7 = (lVar1 + -1) / 2;
        bVar3 = param_1[lVar7];
        lVar5 = lVar1;
      }
      *pbVar10 = bVar13;
      if (lVar14 == 0) break;
    }
    else {
      *pbVar10 = bVar13;
    }
    lVar14 = lVar14 + -1;
  } while( true );
LAB_00319ac0:
  param_2 = param_2 + -1;
  bVar13 = *param_2;
  uVar16 = (long)param_2 - (long)param_1;
  *param_2 = *param_1;
  lVar4 = (long)(uVar16 - 1) / 2;
  if (lVar4 < 1) {
    uVar6 = uVar16 & 1;
    pbVar10 = param_1;
    if ((uVar16 & 1) == 0) goto LAB_00319b24;
  }
  else {
    uVar9 = 0;
    do {
      uVar6 = (uVar9 + 1) * 2;
      pbVar10 = param_1 + uVar6;
      bVar3 = param_1[uVar6];
      if (bVar3 < pbVar10[-1]) {
        uVar6 = uVar6 - 1;
        pbVar10 = param_1 + uVar6;
        bVar3 = param_1[uVar6];
      }
      param_1[uVar9] = bVar3;
      uVar9 = uVar6;
    } while ((long)uVar6 < lVar4);
    if ((uVar16 & 1) == 0) {
LAB_00319b24:
      if (uVar6 == (long)(uVar16 - 2) / 2) {
        lVar4 = (uVar6 + 1) * 2;
        uVar6 = lVar4 - 1;
        *pbVar10 = param_1[lVar4 + -1];
        pbVar10 = param_1 + uVar6;
      }
      else if ((long)uVar6 < 1) goto LAB_00319b3c;
    }
    uVar9 = (long)(uVar6 - 1) >> 1;
    bVar3 = param_1[uVar9];
    while (uVar2 = uVar9, bVar3 < bVar13) {
      param_1[uVar6] = bVar3;
      pbVar10 = param_1 + uVar2;
      uVar9 = (long)(uVar2 - 1) >> 1;
      if (uVar2 == 0) break;
      bVar3 = param_1[uVar9];
      uVar6 = uVar2;
    }
  }
LAB_00319b3c:
  *pbVar10 = bVar13;
  if ((long)uVar16 < 2) {
    return;
  }
  goto LAB_00319ac0;
}


==================================================================

### FUNC 00319c80 (2376 bytes) name=FUN_00319c80

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00319c80(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  long lVar6;
  int iVar7;
  size_t sVar8;
  undefined1 auVar9 [16];
  uint uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  undefined1 (*pauVar14) [16];
  uint uVar15;
  size_t __n;
  byte *pbVar16;
  byte bVar17;
  byte *pbVar18;
  byte bVar19;
  undefined1 (*pauVar20) [16];
  byte *pbVar21;
  uint uVar22;
  byte *pbVar23;
  undefined1 (*pauVar24) [16];
  undefined1 (*pauVar25) [16];
  int iVar26;
  long lVar27;
  byte *__dest;
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  int iVar30;
  byte *local_418;
  byte local_408 [1032];
  
  local_418 = local_408;
                    /* try { // try from 00319cb4 to 00419d1b has its CatchHandler @ 0031aca0 */
  lVar11 = *(long *)(param_1 + 0x10);
  uVar4 = param_3 & 1 ^ 1;
  lVar12 = *(long *)(param_2 + 0x10);
  if (uVar4 == 0) {
    iVar26 = *(int *)(param_1 + 8);
    iVar30 = *(int *)(param_1 + 0xc);
    if (0x408 < (ulong)(long)iVar26) {
      local_418 = operator_new__((long)iVar26);
    }
  }
  else {
    iVar30 = *(int *)(param_1 + 8);
    iVar26 = *(int *)(param_1 + 0xc);
  }
  if (0 < iVar30) {
    __n = (size_t)iVar26;
    uVar3 = iVar26 / 2;
    lVar27 = 0;
    iVar7 = iVar26 + -1;
                    /* try { // try from 00319d64 to 00419d67 has its CatchHandler @ 0031ac98 */
    do {
      if (uVar4 == 0) {
        lVar13 = 0;
        __dest = local_418;
        if (0 < iVar26) {
          do {
            local_418[lVar13] =
                 *(byte *)(*(long *)(param_1 + 0x10) + lVar13 * **(long **)(param_1 + 0x48) + lVar27
                          );
            lVar13 = lVar13 + 1;
          } while ((int)lVar13 < iVar26);
        }
      }
      else {
        __dest = (byte *)(*(long *)(param_2 + 0x10) + lVar27 * **(long **)(param_2 + 0x48));
        if (lVar11 != lVar12) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar27 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      pbVar16 = __dest + __n;
      if (__dest != pbVar16) {
        FUN_00319930(__dest,pbVar16,(0x3f - LZCOUNT(__n)) * 2);
        pbVar23 = __dest;
        if (iVar26 < 0x11) {
          while (pbVar21 = pbVar23 + 1, pbVar16 != pbVar21) {
            bVar17 = *pbVar21;
            if (bVar17 < *__dest) {
              sVar8 = (long)pbVar21 - (long)__dest;
              if (sVar8 != 0) {
                memmove(pbVar21 + (1 - sVar8),__dest,sVar8);
              }
              *__dest = bVar17;
              pbVar23 = pbVar21;
            }
            else {
              bVar19 = *pbVar23;
              pbVar23 = pbVar21;
              if (bVar17 < bVar19) {
                do {
                  pbVar18 = pbVar23 + -1;
                  *pbVar23 = bVar19;
                  bVar19 = pbVar23[-2];
                  pbVar23 = pbVar18;
                } while (bVar17 < bVar19);
                *pbVar18 = bVar17;
                pbVar23 = pbVar21;
              }
              else {
                *pbVar21 = bVar17;
              }
            }
          }
        }
        else {
                    /* try { // try from 0031a41c to 0041a41f has its CatchHandler @ 0031ad8c */
          pbVar23 = __dest + 1;
          do {
            pbVar21 = pbVar23;
            bVar17 = *pbVar21;
                    /* try { // try from 0031a424 to 0041a4bf has its CatchHandler @ 00319720 */
            if (bVar17 < *__dest) {
              sVar8 = (long)pbVar21 - (long)__dest;
              if (sVar8 != 0) {
                    /* try { // try from 0031a4d8 to 0041a4db has its CatchHandler @ 0031ac94 */
                memmove(pbVar21 + (1 - sVar8),__dest,sVar8);
              }
              *__dest = bVar17;
            }
            else {
                    /* try { // try from 0031a4f0 to 0041a4f3 has its CatchHandler @ 0031ac90 */
              bVar19 = pbVar21[-1];
              pbVar23 = pbVar21;
              if (bVar17 < bVar19) {
                do {
                  pbVar18 = pbVar23 + -1;
                  *pbVar23 = bVar19;
                  bVar19 = pbVar23[-2];
                  pbVar23 = pbVar18;
                } while (bVar17 < bVar19);
                *pbVar18 = bVar17;
              }
              else {
                *pbVar21 = bVar17;
              }
            }
            pbVar23 = pbVar21 + 1;
          } while (pbVar23 != __dest + 0x10);
          if (pbVar16 != pbVar23) {
            bVar19 = *pbVar21;
            bVar17 = *pbVar23;
            if (bVar17 < bVar19) goto LAB_0031a470;
            do {
              *pbVar23 = bVar17;
              while( true ) {
                pbVar23 = pbVar23 + 1;
                if (pbVar23 == pbVar16) goto LAB_00319e14;
                bVar19 = pbVar23[-1];
                bVar17 = *pbVar23;
                pbVar21 = pbVar23 + -1;
                if (bVar19 <= bVar17) break;
LAB_0031a470:
                do {
                  pbVar18 = pbVar21;
                  pbVar18[1] = bVar19;
                  bVar19 = pbVar18[-1];
                  pbVar21 = pbVar18 + -1;
                } while (bVar17 < bVar19);
                *pbVar18 = bVar17;
              }
            } while( true );
          }
        }
      }
LAB_00319e14:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar3)) {
        if (uVar3 < 0x14 || (long)(__n - uVar3) < (long)(ulong)uVar3 && 0 < iVar26) {
          lVar13 = 0;
          pbVar16 = __dest + iVar7;
          do {
            bVar17 = __dest[lVar13];
            __dest[lVar13] = *pbVar16;
            lVar13 = lVar13 + 1;
            *pbVar16 = bVar17;
            pbVar16 = pbVar16 + -1;
          } while ((int)lVar13 < (int)uVar3);
        }
        else {
          uVar15 = -(int)__dest & 0xf;
          uVar10 = uVar3;
          if (uVar15 < uVar3) {
            uVar10 = uVar15;
          }
          uVar15 = uVar10;
          if (uVar10 != 0) {
            bVar17 = *__dest;
            *__dest = __dest[iVar7];
            __dest[iVar7] = bVar17;
            if (uVar10 != 1) {
              bVar17 = __dest[1];
              __dest[1] = __dest[iVar26 + -2];
              __dest[iVar26 + -2] = bVar17;
              if (uVar10 != 2) {
                bVar17 = __dest[2];
                    /* try { // try from 00319e84 to 00419eeb has its CatchHandler @ 0031ad48 */
                __dest[2] = __dest[iVar26 + -3];
                __dest[iVar26 + -3] = bVar17;
                if (uVar10 != 3) {
                  bVar17 = __dest[3];
                  __dest[3] = __dest[iVar26 + -4];
                  __dest[iVar26 + -4] = bVar17;
                  if (uVar10 != 4) {
                    bVar17 = __dest[4];
                    __dest[4] = __dest[iVar26 + -5];
                    __dest[iVar26 + -5] = bVar17;
                    if (uVar10 != 5) {
                      bVar17 = __dest[5];
                      __dest[5] = __dest[iVar26 + -6];
                      __dest[iVar26 + -6] = bVar17;
                      if (uVar10 == 6) {
                        uVar15 = 6;
                      }
                      else {
                        bVar17 = __dest[6];
                        __dest[6] = __dest[iVar26 + -7];
                        __dest[iVar26 + -7] = bVar17;
                        if (uVar10 != 7) {
                          bVar17 = __dest[7];
                          __dest[7] = __dest[iVar26 + -8];
                          __dest[iVar26 + -8] = bVar17;
                          if (uVar10 != 8) {
                            bVar17 = __dest[8];
                            __dest[8] = __dest[iVar26 + -9];
                            __dest[iVar26 + -9] = bVar17;
                            if (uVar10 != 9) {
                              bVar17 = __dest[9];
                              __dest[9] = __dest[iVar26 + -10];
                              __dest[iVar26 + -10] = bVar17;
                              if (uVar10 != 10) {
                                bVar17 = __dest[10];
                                __dest[10] = __dest[iVar26 + -0xb];
                                __dest[iVar26 + -0xb] = bVar17;
                                if (uVar10 != 0xb) {
                                  bVar17 = __dest[0xb];
                                  __dest[0xb] = __dest[iVar26 + -0xc];
                                  __dest[iVar26 + -0xc] = bVar17;
                                  if (uVar10 != 0xc) {
                                    bVar17 = __dest[0xc];
                                    __dest[0xc] = __dest[iVar26 + -0xd];
                                    __dest[iVar26 + -0xd] = bVar17;
                                    if (uVar10 != 0xd) {
                                      bVar17 = __dest[0xd];
                                      __dest[0xd] = __dest[iVar26 + -0xe];
                                      __dest[iVar26 + -0xe] = bVar17;
                                      if (uVar10 == 0xf) {
                                        bVar17 = __dest[0xe];
                                        __dest[0xe] = __dest[iVar26 + -0xf];
                                        __dest[iVar26 + -0xf] = bVar17;
                                      }
                                      else {
                                        uVar15 = 0xe;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar1 = ((uVar3 - uVar10) - 0x10 >> 4) + 1;
          iVar5 = uVar1 * 0x10;
          if (0xe < (uVar3 - 1) - uVar10) {
            uVar22 = 0;
            pauVar20 = (undefined1 (*) [16])(__dest + ((__n - 0x10) - (ulong)uVar10));
            pauVar14 = (undefined1 (*) [16])(__dest + uVar10);
            pauVar24 = pauVar20;
            pauVar25 = (undefined1 (*) [16])(__dest + uVar10);
            do {
              auVar9 = *pauVar24;
              uVar22 = uVar22 + 1;
              pauVar24 = pauVar24 + -1;
              auVar28._8_8_ = _UNK_0031a5f8;
              auVar28._0_8_ = _DAT_0031a5f0;
              auVar29 = a64_TBL(ZEXT816(0),auVar9,auVar28);
              auVar9._8_8_ = _UNK_0031a5f8;
              auVar9._0_8_ = _DAT_0031a5f0;
              auVar28 = a64_TBL(ZEXT816(0),*pauVar25,auVar9);
              *(long *)(*pauVar14 + 8) = auVar29._8_8_;
              *(long *)*pauVar14 = auVar29._0_8_;
              *(long *)(*pauVar20 + 8) = auVar28._8_8_;
              *(long *)*pauVar20 = auVar28._0_8_;
              pauVar20 = pauVar20 + -1;
              pauVar14 = pauVar14 + 1;
              pauVar25 = pauVar25 + 1;
            } while (uVar22 < uVar1);
            uVar15 = uVar15 + iVar5;
            if (iVar5 == uVar3 - uVar10) goto LAB_0031a2e4;
          }
          iVar5 = uVar15 + 1;
          bVar17 = __dest[(int)uVar15];
          __dest[(int)uVar15] = __dest[(int)(iVar7 - uVar15)];
          __dest[(int)(iVar7 - uVar15)] = bVar17;
          if (iVar5 < (int)uVar3) {
            iVar2 = uVar15 + 2;
            bVar17 = __dest[iVar5];
            __dest[iVar5] = __dest[iVar7 - iVar5];
            __dest[iVar7 - iVar5] = bVar17;
            if (iVar2 < (int)uVar3) {
              iVar5 = uVar15 + 3;
              bVar17 = __dest[iVar2];
              __dest[iVar2] = __dest[iVar7 - iVar2];
              __dest[iVar7 - iVar2] = bVar17;
              if (iVar5 < (int)uVar3) {
                iVar2 = uVar15 + 4;
                bVar17 = __dest[iVar5];
                __dest[iVar5] = __dest[iVar7 - iVar5];
                __dest[iVar7 - iVar5] = bVar17;
                if (iVar2 < (int)uVar3) {
                  iVar5 = uVar15 + 5;
                  bVar17 = __dest[iVar2];
                  __dest[iVar2] = __dest[iVar7 - iVar2];
                  __dest[iVar7 - iVar2] = bVar17;
                  if (iVar5 < (int)uVar3) {
                    iVar2 = uVar15 + 6;
                    bVar17 = __dest[iVar5];
                    __dest[iVar5] = __dest[iVar7 - iVar5];
                    __dest[iVar7 - iVar5] = bVar17;
                    if (iVar2 < (int)uVar3) {
                      iVar5 = uVar15 + 7;
                      bVar17 = __dest[iVar2];
                      __dest[iVar2] = __dest[iVar7 - iVar2];
                      __dest[iVar7 - iVar2] = bVar17;
                      if (iVar5 < (int)uVar3) {
                        iVar2 = uVar15 + 8;
                        bVar17 = __dest[iVar5];
                    /* try { // try from 0031a1bc to 0041a1bf has its CatchHandler @ 0031abe4 */
                        __dest[iVar5] = __dest[iVar7 - iVar5];
                        __dest[iVar7 - iVar5] = bVar17;
                        if (iVar2 < (int)uVar3) {
                          iVar5 = uVar15 + 9;
                          bVar17 = __dest[iVar2];
                          __dest[iVar2] = __dest[iVar7 - iVar2];
                          __dest[iVar7 - iVar2] = bVar17;
                          if (iVar5 < (int)uVar3) {
                            iVar2 = uVar15 + 10;
                            bVar17 = __dest[iVar5];
                            __dest[iVar5] = __dest[iVar7 - iVar5];
                            __dest[iVar7 - iVar5] = bVar17;
                            if (iVar2 < (int)uVar3) {
                              iVar5 = uVar15 + 0xb;
                              bVar17 = __dest[iVar2];
                    /* try { // try from 0031a240 to 0041a243 has its CatchHandler @ 0031ac98 */
                              __dest[iVar2] = __dest[iVar7 - iVar2];
                              __dest[iVar7 - iVar2] = bVar17;
                              if (iVar5 < (int)uVar3) {
                                iVar2 = uVar15 + 0xc;
                                bVar17 = __dest[iVar5];
                                __dest[iVar5] = __dest[iVar7 - iVar5];
                                __dest[iVar7 - iVar5] = bVar17;
                                if (iVar2 < (int)uVar3) {
                                  iVar5 = uVar15 + 0xd;
                                  bVar17 = __dest[iVar2];
                                  __dest[iVar2] = __dest[iVar7 - iVar2];
                                  __dest[iVar7 - iVar2] = bVar17;
                                  if (iVar5 < (int)uVar3) {
                                    iVar2 = uVar15 + 0xe;
                    /* try { // try from 0031a2b4 to 0041a2b7 has its CatchHandler @ 0031aca0 */
                                    bVar17 = __dest[iVar5];
                                    __dest[iVar5] = __dest[iVar7 - iVar5];
                                    __dest[iVar7 - iVar5] = bVar17;
                                    if (iVar2 < (int)uVar3) {
                                      bVar17 = __dest[iVar2];
                                      __dest[iVar2] = __dest[iVar7 - iVar2];
                                      __dest[iVar7 - iVar2] = bVar17;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0031a2e4:
      if ((uVar4 == 0) && (0 < iVar26)) {
        lVar13 = 0;
        do {
          pbVar16 = __dest + lVar13;
          lVar6 = lVar13 * **(long **)(param_2 + 0x48);
          lVar13 = lVar13 + 1;
          *(byte *)(*(long *)(param_2 + 0x10) + lVar6 + lVar27) = *pbVar16;
        } while ((int)lVar13 < iVar26);
      }
      lVar27 = lVar27 + 1;
    } while ((int)lVar27 < iVar30);
  }
  if ((local_418 != local_408) && (local_418 != (byte *)0x0)) {
    operator_delete__(local_418);
  }
                    /* try { // try from 0031a354 to 0041a3c3 has its CatchHandler @ 00319720 */
  return;
}


==================================================================

### FUNC 0031a600 (864 bytes) name=FUN_0031a600

void FUN_0031a600(short *param_1,short *param_2,long param_3)

{
  long lVar1;
  long lVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  short *psVar6;
  short *psVar7;
  short sVar8;
  short *psVar9;
  short sVar10;
  long lVar11;
  long lVar12;
  short sVar13;
  ulong uVar14;
  long lVar15;
  
  lVar11 = (long)param_2 - (long)param_1;
  if (lVar11 < 0x22) {
    return;
  }
  if (param_3 != 0) {
    sVar13 = param_1[1];
    lVar1 = (lVar11 >> 2) * 2;
    param_3 = param_3 + -1;
    sVar10 = param_2[-1];
    sVar8 = param_1[lVar11 >> 2];
    if (sVar8 <= sVar13) goto LAB_0031a708;
LAB_0031a64c:
    if (sVar8 < sVar10) goto LAB_0031a718;
    if (sVar10 <= sVar13) goto LAB_0031a734;
    do {
      sVar8 = *param_1;
      *param_1 = sVar10;
      param_2[-1] = sVar8;
      sVar13 = *param_1;
      sVar10 = param_1[1];
      psVar9 = param_2;
      psVar7 = param_1;
      psVar6 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = psVar7 + 1;
            while (sVar10 < sVar13) {
              param_2 = param_2 + 1;
              sVar10 = *param_2;
            }
            psVar9 = psVar9 + -1;
            while (sVar13 < sVar8) {
              psVar9 = psVar9 + -1;
              sVar8 = *psVar9;
            }
            if (psVar9 <= param_2) break;
            *param_2 = sVar8;
            *psVar9 = sVar10;
            sVar8 = psVar9[-1];
            sVar13 = *param_1;
            sVar10 = param_2[1];
            psVar7 = param_2;
          }
          FUN_0031a600(param_2,psVar6,param_3);
          lVar11 = (long)param_2 - (long)param_1;
          if (lVar11 < 0x22) {
            return;
          }
          if (param_3 == 0) goto LAB_0031a74c;
          sVar13 = param_1[1];
          lVar1 = (lVar11 >> 2) * 2;
          param_3 = param_3 + -1;
          sVar8 = param_1[lVar11 >> 2];
          sVar10 = param_2[-1];
          if (sVar13 < sVar8) goto LAB_0031a64c;
LAB_0031a708:
          if (sVar10 <= sVar13) break;
LAB_0031a734:
          sVar10 = *param_1;
          param_1[1] = sVar10;
          *param_1 = sVar13;
          sVar8 = param_2[-1];
          psVar9 = param_2;
          psVar7 = param_1;
          psVar6 = param_2;
        }
        if (sVar8 < sVar10) break;
LAB_0031a718:
        sVar13 = *param_1;
        *param_1 = sVar8;
        *(short *)((long)param_1 + lVar1) = sVar13;
        sVar13 = *param_1;
        sVar10 = param_1[1];
        sVar8 = param_2[-1];
        psVar9 = param_2;
        psVar7 = param_1;
        psVar6 = param_2;
      }
    } while( true );
  }
LAB_0031a74c:
  lVar11 = lVar11 >> 1;
  lVar15 = lVar11 + -2 >> 1;
  psVar7 = param_1 + lVar15;
  lVar1 = lVar15;
  do {
                    /* try { // try from 0031a770 to 0041a773 has its CatchHandler @ 0031ac8c */
    sVar13 = *psVar7;
    lVar3 = lVar1;
    psVar9 = psVar7;
    while (lVar3 < lVar11 + -1 >> 1) {
      lVar12 = lVar3 + 1;
                    /* try { // try from 0031a788 to 0041a78b has its CatchHandler @ 0031ac88 */
      lVar2 = lVar12 * 2;
      psVar9 = param_1 + lVar12 * 2;
      sVar10 = param_1[lVar12 * 2];
      if (sVar10 < psVar9[-1]) {
        lVar2 = lVar2 + -1;
        sVar10 = param_1[lVar2];
        psVar9 = param_1 + lVar2;
      }
      param_1[lVar3] = sVar10;
                    /* try { // try from 0031a7c0 to 0041a7d3 has its CatchHandler @ 0031ac64 */
      lVar3 = lVar2;
    }
    if ((lVar3 == lVar15) && (((uint)lVar11 & 1) != 1)) {
      lVar12 = lVar3 + 1;
                    /* try { // try from 0031a7dc to 0041a7df has its CatchHandler @ 0031abe4 */
      lVar3 = lVar12 * 2 + -1;
      *psVar9 = param_1[lVar12 * 2 + -1];
                    /* try { // try from 0031a7e8 to 0041a7eb has its CatchHandler @ 0031ac98 */
      psVar9 = param_1 + lVar3;
    }
    if (lVar1 < lVar3) {
      lVar12 = lVar3 + -1;
      do {
        lVar2 = lVar12 >> 1;
        if (sVar13 <= param_1[lVar2]) break;
        param_1[lVar3] = param_1[lVar2];
                    /* try { // try from 0031a8d8 to 0041a937 has its CatchHandler @ 0031abe4 */
        psVar9 = param_1 + lVar2;
        lVar12 = (lVar2 + -1) - (lVar2 + -1 >> 0x3f);
        lVar3 = lVar2;
      } while (lVar1 < lVar2);
      *psVar9 = sVar13;
      if (lVar1 == 0) break;
    }
    else {
      *psVar9 = sVar13;
    }
    psVar7 = psVar7 + -1;
    lVar1 = lVar1 + -1;
  } while( true );
LAB_0031a814:
  param_2 = param_2 + -1;
  sVar13 = *param_2;
  *param_2 = *param_1;
  uVar14 = (long)param_2 - (long)param_1 >> 1;
                    /* try { // try from 0031a828 to 0041a8af has its CatchHandler @ 0031ad48 */
  lVar11 = (long)(uVar14 - 1) / 2;
  if (lVar11 < 1) {
    uVar5 = uVar14 & 1;
    psVar7 = param_1;
    if ((uVar14 & 1) == 0) goto LAB_0031a884;
  }
  else {
    uVar4 = 0;
    do {
      lVar1 = uVar4 + 1;
      uVar5 = lVar1 * 2;
      psVar7 = param_1 + lVar1 * 2;
      sVar10 = param_1[lVar1 * 2];
      if (sVar10 < psVar7[-1]) {
        uVar5 = uVar5 - 1;
        sVar10 = param_1[uVar5];
        psVar7 = param_1 + uVar5;
      }
      param_1[uVar4] = sVar10;
      uVar4 = uVar5;
    } while ((long)uVar5 < lVar11);
    if ((uVar14 & 1) == 0) {
LAB_0031a884:
      if (uVar5 == (long)(uVar14 - 2) / 2) {
        lVar11 = uVar5 + 1;
        uVar5 = lVar11 * 2 - 1;
        *psVar7 = param_1[lVar11 * 2 + -1];
        psVar7 = param_1 + uVar5;
      }
      else if ((long)uVar5 < 1) goto LAB_0031a89c;
    }
    uVar14 = (long)(uVar5 - 1) >> 1;
    sVar10 = param_1[uVar14];
    while (uVar4 = uVar14, sVar10 < sVar13) {
      param_1[uVar5] = sVar10;
      psVar7 = param_1 + uVar4;
      uVar14 = (long)(uVar4 - 1) >> 1;
      if (uVar4 == 0) break;
      sVar10 = param_1[uVar14];
      uVar5 = uVar4;
    }
  }
LAB_0031a89c:
  *psVar7 = sVar13;
  if ((long)param_2 - (long)param_1 < 4) {
    return;
  }
  goto LAB_0031a814;
}


==================================================================

### FUNC 0031a960 (1876 bytes) name=FUN_0031a960

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0031a960(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined2 uVar4;
  int iVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  int iVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  undefined1 (*pauVar12) [16];
  ulong uVar13;
  ulong uVar14;
  ulong uVar15;
  short *psVar16;
  ulong uVar17;
  size_t sVar18;
  undefined1 (*pauVar19) [16];
  short *psVar20;
  short sVar21;
  short sVar22;
  uint uVar23;
  ulong uVar24;
  long lVar25;
  ulong uVar26;
  ulong uVar27;
  undefined1 (*pauVar28) [16];
  ulong uVar29;
  short *psVar30;
  short *psVar31;
  ulong uVar32;
  undefined1 (*pauVar33) [16];
  int iVar34;
  ulong uVar35;
  ulong __n;
  short *__dest;
  long lVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  int iVar39;
  short *local_420;
  short local_410 [520];
  
                    /* try { // try from 0031a964 to 0041a9c3 has its CatchHandler @ 0031ac98 */
  local_420 = local_410;
  lVar9 = *(long *)(param_1 + 0x10);
  uVar3 = param_3 & 1 ^ 1;
  lVar10 = *(long *)(param_2 + 0x10);
  if (uVar3 == 0) {
    uVar35 = (ulong)*(uint *)(param_1 + 8);
    iVar39 = *(int *)(param_1 + 0xc);
    uVar14 = (ulong)(int)*(uint *)(param_1 + 8);
    if (0x208 < uVar14) {
      uVar17 = uVar14 << 1;
      if (0x3f80000000000000 < uVar14) {
        uVar17 = 0xffffffffffffffff;
      }
      local_420 = operator_new__(uVar17);
    }
  }
  else {
    iVar39 = *(int *)(param_1 + 8);
    uVar35 = (ulong)*(uint *)(param_1 + 0xc);
  }
  if (0 < iVar39) {
    iVar34 = (int)uVar35;
    uVar6 = iVar34 - 1;
    uVar2 = iVar34 / 2;
    uVar29 = (ulong)uVar2;
    uVar27 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
    __n = -(uVar35 >> 0x1f) & 0xfffffffe00000000 | uVar35 << 1;
                    /* try { // try from 0031aa34 to 0041aa37 has its CatchHandler @ 0031aca0 */
    uVar35 = -(ulong)(iVar34 - 7U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 7U) << 1;
    uVar32 = -(ulong)(iVar34 - 2U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 2U) << 1;
    uVar26 = -(ulong)(iVar34 - 3U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 3U) << 1;
    uVar24 = -(ulong)(iVar34 - 4U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 4U) << 1;
    uVar17 = -(ulong)(iVar34 - 5U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 5U) << 1;
    uVar14 = -(ulong)(iVar34 - 6U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 6U) << 1;
    lVar36 = 0;
    do {
                    /* try { // try from 0031aaa8 to 0041aaab has its CatchHandler @ 0031ad70 */
      if (uVar3 == 0) {
        __dest = local_420;
        if (0 < iVar34) {
          lVar11 = 0;
          lVar25 = **(long **)(param_1 + 0x48);
          psVar16 = (short *)(*(long *)(param_1 + 0x10) + lVar36 * 2);
          do {
            sVar22 = *psVar16;
            psVar16 = (short *)((long)psVar16 + lVar25);
            local_420[lVar11] = sVar22;
            lVar11 = lVar11 + 1;
          } while ((int)lVar11 < iVar34);
        }
      }
      else {
                    /* try { // try from 0031aed4 to 0041aed7 has its CatchHandler @ 0031b190 */
        __dest = (short *)(*(long *)(param_2 + 0x10) + lVar36 * **(long **)(param_2 + 0x48));
        if (lVar9 != lVar10) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar36 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      psVar16 = (short *)((long)__dest + __n);
      if (__dest != psVar16) {
        FUN_0031a600(__dest,psVar16,(0x3f - LZCOUNT((long)__n >> 1)) * 2);
        psVar31 = __dest + 1;
        if ((long)__n < 0x22) {
          for (; psVar16 != psVar31; psVar31 = psVar31 + 1) {
                    /* try { // try from 0031ab14 to 0041ab17 has its CatchHandler @ 0031aca0 */
            sVar22 = *psVar31;
                    /* try { // try from 0031ab20 to 0041ab23 has its CatchHandler @ 0031ad70 */
            if (sVar22 < *__dest) {
              sVar18 = (long)psVar31 - (long)__dest;
              if ((long)sVar18 >> 1 != 0) {
                    /* try { // try from 0031ae68 to 0041ae6b has its CatchHandler @ 0031b198 */
                memmove((void *)((long)psVar31 + (2 - sVar18)),__dest,sVar18);
              }
              *__dest = sVar22;
            }
            else {
              sVar21 = psVar31[-1];
              psVar30 = psVar31;
              if (sVar22 < sVar21) {
                do {
                  psVar20 = psVar30 + -1;
                  *psVar30 = sVar21;
                  sVar21 = psVar30[-2];
                  psVar30 = psVar20;
                } while (sVar22 < sVar21);
                *psVar20 = sVar22;
              }
              else {
                *psVar31 = sVar22;
              }
            }
                    /* try { // try from 0031ab34 to 0041ab37 has its CatchHandler @ 0031aca0 */
          }
        }
        else {
          do {
            psVar30 = psVar31;
                    /* try { // try from 0031af04 to 0041af07 has its CatchHandler @ 0031b11c */
            sVar22 = *psVar30;
                    /* try { // try from 0031af0c to 0041af6b has its CatchHandler @ 0031b190 */
            if (sVar22 < *__dest) {
              sVar18 = (long)psVar30 - (long)__dest;
              if ((long)sVar18 >> 1 != 0) {
                memmove((void *)((long)psVar30 + (2 - sVar18)),__dest,sVar18);
              }
              *__dest = sVar22;
            }
            else {
              sVar21 = psVar30[-1];
                    /* try { // try from 0031afdc to 0041afdf has its CatchHandler @ 0031b198 */
              psVar31 = psVar30;
              if (sVar22 < sVar21) {
                do {
                  psVar20 = psVar31 + -1;
                  *psVar31 = sVar21;
                  sVar21 = psVar31[-2];
                  psVar31 = psVar20;
                } while (sVar22 < sVar21);
                *psVar20 = sVar22;
              }
              else {
                *psVar30 = sVar22;
              }
            }
            psVar31 = psVar30 + 1;
          } while (psVar31 != __dest + 0x10);
          if (psVar16 != psVar31) {
            sVar22 = *psVar30;
            sVar21 = *psVar31;
            if (sVar21 < sVar22) goto LAB_0031af54;
            do {
              *psVar31 = sVar21;
              while( true ) {
                psVar31 = psVar31 + 1;
                if (psVar16 == psVar31) goto LAB_0031ab40;
                sVar22 = psVar31[-1];
                sVar21 = *psVar31;
                psVar30 = psVar31 + -1;
                if (sVar22 <= sVar21) break;
LAB_0031af54:
                do {
                  psVar20 = psVar30;
                  psVar20[1] = sVar22;
                  sVar22 = psVar20[-1];
                  psVar30 = psVar20 + -1;
                } while (sVar21 < sVar22);
                *psVar20 = sVar21;
              }
            } while( true );
          }
        }
      }
LAB_0031ab40:
                    /* try { // try from 0031ab48 to 0041ab4b has its CatchHandler @ 0031ac64 */
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 0xc || (long)(__n + uVar29 * -2) < (long)(uVar29 * 2) && 0 < (long)__n) {
          lVar11 = 0;
          psVar16 = (short *)((long)__dest + uVar27);
          do {
            sVar22 = __dest[lVar11];
            __dest[lVar11] = *psVar16;
            lVar11 = lVar11 + 1;
            *psVar16 = sVar22;
            psVar16 = psVar16 + -1;
          } while ((int)lVar11 < (int)uVar2);
        }
        else {
                    /* try { // try from 0031ab58 to 0041ab5b has its CatchHandler @ 0031aca0 */
          uVar1 = -((uint)((ulong)__dest >> 1) & 7) & 7;
                    /* try { // try from 0031ab68 to 0041ab6b has its CatchHandler @ 0031ad70 */
          uVar13 = uVar29;
          if (uVar1 < uVar2) {
            uVar13 = (ulong)uVar1;
          }
          iVar8 = (int)uVar13;
          uVar15 = uVar13;
          if (iVar8 != 0) {
                    /* try { // try from 0031ab74 to 0041ab77 has its CatchHandler @ 0031ac64 */
            sVar22 = *__dest;
                    /* try { // try from 0031ab80 to 0041ab83 has its CatchHandler @ 0031aca0 */
            *__dest = *(short *)((long)__dest + uVar27);
            *(short *)((long)__dest + uVar27) = sVar22;
            if (iVar8 != 1) {
              sVar22 = __dest[1];
              __dest[1] = *(short *)((long)__dest + uVar32);
                    /* try { // try from 0031aba0 to 0041abaf has its CatchHandler @ 00319720 */
              *(short *)((long)__dest + uVar32) = sVar22;
              if (iVar8 != 2) {
                sVar22 = __dest[2];
                    /* try { // try from 0031abb8 to 0041abbb has its CatchHandler @ 0031ad70 */
                __dest[2] = *(short *)((long)__dest + uVar26);
                *(short *)((long)__dest + uVar26) = sVar22;
                if (iVar8 != 3) {
                    /* try { // try from 0031abc4 to 0041abc7 has its CatchHandler @ 0031aca0 */
                  sVar22 = __dest[3];
                  __dest[3] = *(short *)((long)__dest + uVar24);
                  *(short *)((long)__dest + uVar24) = sVar22;
                  if (iVar8 != 4) {
                    /* catch() { ... } // from try @ 0031a1bc with catch @ 0031abe4
                       catch() { ... } // from try @ 0031a7dc with catch @ 0031abe4
                       catch() { ... } // from try @ 0031a8d8 with catch @ 0031abe4 */
                    sVar22 = __dest[4];
                    __dest[4] = *(short *)((long)__dest + uVar17);
                    *(short *)((long)__dest + uVar17) = sVar22;
                    if (iVar8 != 5) {
                      sVar22 = __dest[5];
                      __dest[5] = *(short *)((long)__dest + uVar14);
                      *(short *)((long)__dest + uVar14) = sVar22;
                      if (iVar8 == 7) {
                        sVar22 = __dest[6];
                        __dest[6] = *(short *)((long)__dest + uVar35);
                        *(short *)((long)__dest + uVar35) = sVar22;
                        uVar15 = 7;
                      }
                      else {
                        uVar15 = 6;
                      }
                    }
                  }
                }
              }
            }
          }
          uVar1 = ((uVar2 - iVar8) - 8 >> 3) + 1;
          iVar5 = uVar1 * 8;
          if (6 < (uVar2 - 1) - iVar8) {
                    /* try { // try from 0031ac60 to 0041ac63 has its CatchHandler @ 00319720 */
                    /* catch() { ... } // from try @ 0031a7c0 with catch @ 0031ac64
                       catch() { ... } // from try @ 0031ab48 with catch @ 0031ac64
                       catch() { ... } // from try @ 0031ab74 with catch @ 0031ac64 */
            pauVar19 = (undefined1 (*) [16])((long)__dest + (__n - 0xe) + ~uVar13 * 2);
            uVar23 = 0;
            pauVar12 = (undefined1 (*) [16])(__dest + uVar13);
            pauVar28 = pauVar19;
            pauVar33 = (undefined1 (*) [16])(__dest + uVar13);
            do {
              auVar7 = *pauVar19;
              uVar23 = uVar23 + 1;
                    /* catch() { ... } // from try @ 0031a788 with catch @ 0031ac88 */
                    /* catch() { ... } // from try @ 0031a770 with catch @ 0031ac8c */
              pauVar19 = pauVar19 + -1;
                    /* catch() { ... } // from try @ 0031a4f0 with catch @ 0031ac90 */
              auVar37._8_8_ = _UNK_0031b0e8;
              auVar37._0_8_ = _DAT_0031b0e0;
              auVar38 = a64_TBL(ZEXT816(0),auVar7,auVar37);
                    /* catch() { ... } // from try @ 0031a4d8 with catch @ 0031ac94 */
              auVar7._8_8_ = _UNK_0031b0e8;
              auVar7._0_8_ = _DAT_0031b0e0;
              auVar37 = a64_TBL(ZEXT816(0),*pauVar33,auVar7);
                    /* catch() { ... } // from try @ 00319d64 with catch @ 0031ac98
                       catch() { ... } // from try @ 0031a240 with catch @ 0031ac98
                       catch() { ... } // from try @ 0031a7e8 with catch @ 0031ac98
                       catch() { ... } // from try @ 0031a964 with catch @ 0031ac98 */
              *(long *)((long)*pauVar12 + 8) = auVar38._8_8_;
              *(long *)*pauVar12 = auVar38._0_8_;
              *(long *)(*pauVar28 + 8) = auVar37._8_8_;
              *(long *)*pauVar28 = auVar37._0_8_;
                    /* catch() { ... } // from try @ 00319cb4 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031a2b4 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031aa34 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031ab14 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031ab34 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031ab58 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031ab80 with catch @ 0031aca0
                       catch() { ... } // from try @ 0031abc4 with catch @ 0031aca0 */
              pauVar28 = pauVar28 + -1;
              pauVar12 = pauVar12 + 1;
              pauVar33 = pauVar33 + 1;
            } while (uVar23 < uVar1);
            uVar15 = (ulong)(uint)((int)uVar15 + iVar5);
            if (iVar5 == uVar2 - iVar8) goto LAB_0031adc8;
          }
          uVar13 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
          iVar8 = (int)uVar15;
          uVar4 = *(undefined2 *)((long)__dest + uVar13);
          uVar15 = -(ulong)(uVar6 - iVar8 >> 0x1f) & 0xfffffffe00000000 |
                   (ulong)(uVar6 - iVar8) << 1;
          *(undefined2 *)((long)__dest + uVar13) = *(undefined2 *)((long)__dest + uVar15);
          *(undefined2 *)((long)__dest + uVar15) = uVar4;
          if (iVar8 + 1 < (int)uVar2) {
            uVar1 = uVar6 - (iVar8 + 1);
            uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
            uVar4 = *(undefined2 *)((long)__dest + uVar13 + 2);
            *(undefined2 *)((long)__dest + uVar13 + 2) = *(undefined2 *)((long)__dest + uVar15);
            *(undefined2 *)((long)__dest + uVar15) = uVar4;
            if (iVar8 + 2 < (int)uVar2) {
              uVar1 = uVar6 - (iVar8 + 2);
              uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
              uVar4 = *(undefined2 *)((long)__dest + uVar13 + 4);
              *(undefined2 *)((long)__dest + uVar13 + 4) = *(undefined2 *)((long)__dest + uVar15);
              *(undefined2 *)((long)__dest + uVar15) = uVar4;
              if (iVar8 + 3 < (int)uVar2) {
                uVar1 = uVar6 - (iVar8 + 3);
                uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                uVar4 = *(undefined2 *)((long)__dest + uVar13 + 6);
                    /* catch() { ... } // from try @ 00319e84 with catch @ 0031ad48
                       catch() { ... } // from try @ 0031a828 with catch @ 0031ad48 */
                *(undefined2 *)((long)__dest + uVar13 + 6) = *(undefined2 *)((long)__dest + uVar15);
                *(undefined2 *)((long)__dest + uVar15) = uVar4;
                if (iVar8 + 4 < (int)uVar2) {
                  uVar1 = uVar6 - (iVar8 + 4);
                  uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                  uVar4 = *(undefined2 *)((long)__dest + uVar13 + 8);
                    /* catch() { ... } // from try @ 0031999c with catch @ 0031ad70
                       catch() { ... } // from try @ 0031a328 with catch @ 0031ad70
                       catch() { ... } // from try @ 0031aaa8 with catch @ 0031ad70
                       catch() { ... } // from try @ 0031ab20 with catch @ 0031ad70
                       catch() { ... } // from try @ 0031ab68 with catch @ 0031ad70
                       catch() { ... } // from try @ 0031abb8 with catch @ 0031ad70 */
                  *(undefined2 *)((long)__dest + uVar13 + 8) =
                       *(undefined2 *)((long)__dest + uVar15);
                    /* catch() { ... } // from try @ 00319928 with catch @ 0031ad78 */
                  *(undefined2 *)((long)__dest + uVar15) = uVar4;
                  if (iVar8 + 5 < (int)uVar2) {
                    uVar1 = uVar6 - (iVar8 + 5);
                    /* try { // try from 0031ad88 to 0041ad8b has its CatchHandler @ 00319720 */
                    uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                    /* catch() { ... } // from try @ 0031a41c with catch @ 0031ad8c */
                    uVar4 = *(undefined2 *)((long)__dest + uVar13 + 10);
                    /* try { // try from 0031ad9c to 0041ad9f has its CatchHandler @ 00319720 */
                    *(undefined2 *)((long)__dest + uVar13 + 10) =
                         *(undefined2 *)((long)__dest + uVar15);
                    /* catch() { ... } // from try @ 003198d4 with catch @ 0031ada0 */
                    *(undefined2 *)((long)__dest + uVar15) = uVar4;
                    /* catch() { ... } // from try @ 00319858 with catch @ 0031ada4 */
                    if (iVar8 + 6 < (int)uVar2) {
                      uVar1 = uVar6 - (iVar8 + 6);
                    /* try { // try from 0031adb4 to 0041adb7 has its CatchHandler @ 00319720 */
                      uVar4 = *(undefined2 *)((long)__dest + uVar13 + 0xc);
                    /* catch() { ... } // from try @ 00319878 with catch @ 0031adb8 */
                      uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                    /* catch() { ... } // from try @ 0031989c with catch @ 0031adbc */
                    /* catch() { ... } // from try @ 003198b8 with catch @ 0031adc0 */
                      *(undefined2 *)((long)__dest + uVar13 + 0xc) =
                           *(undefined2 *)((long)__dest + uVar15);
                      *(undefined2 *)((long)__dest + uVar15) = uVar4;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0031adc8:
      if ((uVar3 == 0) && (0 < iVar34)) {
        lVar11 = 0;
        lVar25 = **(long **)(param_2 + 0x48);
        psVar16 = (short *)(*(long *)(param_2 + 0x10) + lVar36 * 2);
        do {
          psVar31 = __dest + lVar11;
          lVar11 = lVar11 + 1;
                    /* catch() { ... } // from try @ 0031ae2c with catch @ 0031adf0
                       catch() { ... } // from try @ 0031b0c4 with catch @ 0031adf0
                       catch() { ... } // from try @ 0031b18c with catch @ 0031adf0 */
          *psVar16 = *psVar31;
          psVar16 = (short *)((long)psVar16 + lVar25);
        } while ((int)lVar11 < iVar34);
      }
      lVar36 = lVar36 + 1;
    } while ((int)lVar36 < iVar39);
  }
  if ((local_420 != local_410) && (local_420 != (short *)0x0)) {
                    /* try { // try from 0031ae2c to 0041ae2f has its CatchHandler @ 0031adf0 */
    operator_delete__(local_420);
  }
                    /* try { // try from 0031ae48 to 0041ae4b has its CatchHandler @ 0031b1a0 */
  return;
}


==================================================================

### FUNC 0031b0f0 (888 bytes) name=FUN_0031b0f0

void FUN_0031b0f0(float *param_1,float *param_2,long param_3)

{
  long lVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  float *pfVar5;
  float *pfVar6;
  float *pfVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  ulong uVar11;
  long lVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  
  lVar9 = (long)param_2 - (long)param_1;
                    /* try { // try from 0031b108 to 0041b10b has its CatchHandler @ 0031b1a0 */
  if (lVar9 < 0x44) {
    return;
  }
  if (param_3 != 0) {
                    /* catch() { ... } // from try @ 0031af04 with catch @ 0031b11c */
    param_3 = param_3 + -1;
    lVar1 = (lVar9 >> 3) * 4;
    fVar13 = param_1[1];
    fVar14 = param_1[lVar9 >> 3];
    fVar16 = param_2[-1];
    if (fVar14 <= fVar13) goto LAB_0031b1f8;
LAB_0031b13c:
    if (fVar14 < fVar16) goto LAB_0031b208;
    if (fVar16 <= fVar13) goto LAB_0031b224;
    do {
      fVar15 = *param_1;
      *param_1 = fVar16;
      param_2[-1] = fVar15;
      fVar13 = *param_1;
      fVar14 = param_1[1];
      pfVar7 = param_2;
      pfVar6 = param_1;
      pfVar5 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
                    /* try { // try from 0031b114 to 0041b117 has its CatchHandler @ 0031b198 */
            param_2 = pfVar6 + 1;
            while (fVar14 < fVar13) {
              param_2 = param_2 + 1;
              fVar14 = *param_2;
            }
            pfVar7 = pfVar7 + -1;
            while (fVar13 < fVar15) {
              pfVar7 = pfVar7 + -1;
                    /* try { // try from 0031b18c to 0041b18f has its CatchHandler @ 0031adf0 */
              fVar15 = *pfVar7;
                    /* catch() { ... } // from try @ 0031aed4 with catch @ 0031b190
                       catch() { ... } // from try @ 0031af0c with catch @ 0031b190 */
            }
                    /* catch() { ... } // from try @ 0031ae68 with catch @ 0031b198
                       catch() { ... } // from try @ 0031afdc with catch @ 0031b198
                       catch() { ... } // from try @ 0031b114 with catch @ 0031b198 */
                    /* catch() { ... } // from try @ 0031ae48 with catch @ 0031b1a0
                       catch() { ... } // from try @ 0031b050 with catch @ 0031b1a0
                       catch() { ... } // from try @ 0031b108 with catch @ 0031b1a0 */
            if (pfVar7 <= param_2) break;
            *param_2 = fVar15;
                    /* catch() { ... } // from try @ 0031b2c4 with catch @ 0031b1a8
                       catch() { ... } // from try @ 0031b310 with catch @ 0031b1a8 */
            *pfVar7 = fVar14;
            fVar15 = pfVar7[-1];
            fVar13 = *param_1;
            fVar14 = param_2[1];
            pfVar6 = param_2;
          }
          FUN_0031b0f0(param_2,pfVar5,param_3);
          lVar9 = (long)param_2 - (long)param_1;
          if (lVar9 < 0x44) {
            return;
          }
          if (param_3 == 0) goto LAB_0031b338;
          lVar1 = (lVar9 >> 3) * 4;
          param_3 = param_3 + -1;
          fVar13 = param_1[1];
          fVar14 = param_1[lVar9 >> 3];
          fVar16 = param_2[-1];
          if (fVar13 < fVar14) goto LAB_0031b13c;
LAB_0031b1f8:
          if (fVar16 <= fVar13) break;
LAB_0031b224:
          fVar14 = *param_1;
          *param_1 = fVar13;
          param_1[1] = fVar14;
          fVar15 = param_2[-1];
          pfVar7 = param_2;
          pfVar6 = param_1;
          pfVar5 = param_2;
        }
        if (fVar14 < fVar16) break;
LAB_0031b208:
        fVar13 = *param_1;
        *param_1 = fVar14;
        *(float *)((long)param_1 + lVar1) = fVar13;
        fVar15 = param_2[-1];
        fVar13 = *param_1;
        fVar14 = param_1[1];
        pfVar7 = param_2;
        pfVar6 = param_1;
        pfVar5 = param_2;
      }
    } while( true );
  }
LAB_0031b338:
  lVar9 = lVar9 >> 2;
  lVar12 = lVar9 + -2 >> 1;
  pfVar6 = param_1 + lVar12;
  lVar1 = lVar12;
  do {
    fVar13 = *pfVar6;
    lVar2 = lVar1;
    pfVar7 = pfVar6;
    while (lVar2 < lVar9 + -1 >> 1) {
      lVar10 = lVar2 + 1;
      lVar4 = lVar10 * 2;
      pfVar7 = param_1 + lVar10 * 2;
      fVar14 = param_1[lVar10 * 2];
                    /* try { // try from 0031b388 to 0041b38b has its CatchHandler @ 0031b320 */
      if (fVar14 < pfVar7[-1]) {
        lVar4 = lVar4 + -1;
        fVar14 = param_1[lVar4];
        pfVar7 = param_1 + lVar4;
      }
      param_1[lVar2] = fVar14;
      lVar2 = lVar4;
    }
    if ((lVar2 == lVar12) && (((uint)lVar9 & 1) != 1)) {
      lVar10 = lVar2 + 1;
      lVar2 = lVar10 * 2 + -1;
      *pfVar7 = param_1[lVar10 * 2 + -1];
      pfVar7 = param_1 + lVar2;
    }
    if (lVar1 < lVar2) {
      lVar10 = lVar2 + -1 >> 1;
      fVar14 = param_1[lVar10];
      while (lVar4 = lVar10, fVar14 < fVar13) {
        param_1[lVar2] = fVar14;
        pfVar7 = param_1 + lVar4;
        if (lVar4 <= lVar1) break;
        lVar10 = (lVar4 + -1) / 2;
        fVar14 = param_1[lVar10];
        lVar2 = lVar4;
      }
      *pfVar7 = fVar13;
      if (lVar1 == 0) break;
    }
    else {
                    /* try { // try from 0031b3b4 to 0041b447 has its CatchHandler @ 0031e4d4 */
      *pfVar7 = fVar13;
    }
    pfVar6 = pfVar6 + -1;
    lVar1 = lVar1 + -1;
  } while( true );
LAB_0031b28c:
  param_2 = param_2 + -1;
  fVar13 = *param_2;
  uVar11 = (long)param_2 - (long)param_1 >> 2;
  *param_2 = *param_1;
  lVar9 = (long)(uVar11 - 1) / 2;
                    /* try { // try from 0031b2b0 to 0041b2b3 has its CatchHandler @ 0031b314 */
  if (lVar9 < 1) {
    uVar3 = uVar11 & 1;
    pfVar6 = param_1;
    if ((uVar11 & 1) == 0) goto LAB_0031b2fc;
  }
  else {
    uVar8 = 0;
    do {
      lVar1 = uVar8 + 1;
      uVar3 = lVar1 * 2;
                    /* try { // try from 0031b2c4 to 0041b2c7 has its CatchHandler @ 0031b1a8 */
      pfVar6 = param_1 + lVar1 * 2;
      fVar14 = param_1[lVar1 * 2];
                    /* try { // try from 0031b2cc to 0041b2cf has its CatchHandler @ 0031b314 */
      if (fVar14 < pfVar6[-1]) {
                    /* try { // try from 0031b2d8 to 0041b2db has its CatchHandler @ 0031b2e0 */
        uVar3 = uVar3 - 1;
                    /* catch() { ... } // from try @ 0031b238 with catch @ 0031b2e0
                       catch() { ... } // from try @ 0031b2d8 with catch @ 0031b2e0 */
        fVar14 = param_1[uVar3];
        pfVar6 = param_1 + uVar3;
      }
      param_1[uVar8] = fVar14;
      uVar8 = uVar3;
    } while ((long)uVar3 < lVar9);
    if ((uVar11 & 1) == 0) {
LAB_0031b2fc:
      if (uVar3 == (long)(uVar11 - 2) / 2) {
        lVar9 = uVar3 + 1;
        uVar3 = lVar9 * 2 - 1;
        *pfVar6 = param_1[lVar9 * 2 + -1];
        pfVar6 = param_1 + uVar3;
      }
      else {
                    /* try { // try from 0031b310 to 0041b313 has its CatchHandler @ 0031b1a8 */
        if ((long)uVar3 < 1) goto LAB_0031b314;
      }
    }
    uVar11 = (long)(uVar3 - 1) >> 1;
    fVar14 = param_1[uVar11];
    while (uVar8 = uVar11, fVar14 < fVar13) {
      pfVar6 = param_1 + uVar8;
      param_1[uVar3] = fVar14;
      uVar11 = (long)(uVar8 - 1) >> 1;
      if (uVar8 == 0) break;
      fVar14 = param_1[uVar11];
      uVar3 = uVar8;
    }
  }
LAB_0031b314:
                    /* catch() { ... } // from try @ 0031b2b0 with catch @ 0031b314
                       catch() { ... } // from try @ 0031b2cc with catch @ 0031b314 */
  *pfVar6 = fVar13;
  if ((long)param_2 - (long)param_1 < 8) {
                    /* catch() { ... } // from try @ 0031b388 with catch @ 0031b320
                       catch() { ... } // from try @ 0031b4b8 with catch @ 0031b320
                       catch() { ... } // from try @ 0031e4b8 with catch @ 0031b320 */
    return;
  }
  goto LAB_0031b28c;
}


==================================================================

### FUNC 0031b470 (1524 bytes) name=FUN_0031b470

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0031b470(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined4 uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined1 (*pauVar11) [16];
  ulong uVar12;
  float *pfVar13;
  size_t sVar14;
  undefined1 (*pauVar15) [16];
  ulong uVar16;
  float *pfVar17;
  ulong uVar18;
  long lVar19;
  ulong uVar20;
  undefined1 (*pauVar21) [16];
  float *pfVar22;
  float *pfVar23;
  uint uVar24;
  undefined1 (*pauVar25) [16];
  int iVar26;
  ulong uVar27;
  ulong uVar28;
  ulong __n;
  float *__dest;
  long lVar29;
  float fVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  float fVar33;
  int iVar34;
  float *local_430;
  float local_420 [264];
  
  local_430 = local_420;
                    /* try { // try from 0031b4b8 to 0041b4eb has its CatchHandler @ 0031b320 */
  lVar8 = *(long *)(param_1 + 0x10);
  uVar3 = param_3 & 1 ^ 1;
  lVar9 = *(long *)(param_2 + 0x10);
  if (uVar3 == 0) {
    uVar27 = (ulong)*(uint *)(param_1 + 8);
    iVar34 = *(int *)(param_1 + 0xc);
    uVar12 = (ulong)(int)*(uint *)(param_1 + 8);
    if (0x108 < uVar12) {
      uVar18 = uVar12 << 2;
      if (0x1fc0000000000000 < uVar12) {
        uVar18 = 0xffffffffffffffff;
      }
      local_430 = operator_new__(uVar18);
    }
  }
  else {
    iVar34 = *(int *)(param_1 + 8);
    uVar27 = (ulong)*(uint *)(param_1 + 0xc);
  }
                    /* try { // try from 0031b4f4 to 0041b4f7 has its CatchHandler @ 0031e4d4 */
  if (0 < iVar34) {
    iVar26 = (int)uVar27;
    uVar6 = iVar26 - 1;
    uVar2 = iVar26 / 2;
    uVar28 = (ulong)uVar2;
    __n = -(uVar27 >> 0x1f) & 0xfffffffc00000000 | uVar27 << 2;
    uVar12 = -(ulong)(iVar26 - 2U >> 0x1f) & 0xfffffffc00000000 | (ulong)(iVar26 - 2U) << 2;
    uVar27 = -(ulong)(iVar26 - 3U >> 0x1f) & 0xfffffffc00000000 | (ulong)(iVar26 - 3U) << 2;
    lVar29 = 0;
    uVar18 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar6 << 2;
                    /* try { // try from 0031b570 to 0041b573 has its CatchHandler @ 0031e4bc */
    do {
      if (uVar3 == 0) {
        __dest = local_430;
        if (0 < iVar26) {
          lVar10 = 0;
          lVar19 = **(long **)(param_1 + 0x48);
          pfVar13 = (float *)(*(long *)(param_1 + 0x10) + lVar29 * 4);
          do {
            fVar33 = *pfVar13;
            pfVar13 = (float *)((long)pfVar13 + lVar19);
            local_430[lVar10] = fVar33;
            lVar10 = lVar10 + 1;
                    /* try { // try from 0031b5b8 to 0041b5bb has its CatchHandler @ 0031e470 */
          } while ((int)lVar10 < iVar26);
        }
      }
      else {
        __dest = (float *)(*(long *)(param_2 + 0x10) + lVar29 * **(long **)(param_2 + 0x48));
        if (lVar8 != lVar9) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar29 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      pfVar13 = (float *)((long)__dest + __n);
      if (__dest != pfVar13) {
        FUN_0031b0f0(__dest,pfVar13,(0x3f - LZCOUNT((long)__n >> 2)) * 2);
        pfVar23 = __dest + 1;
        if ((long)__n < 0x44) {
          for (; pfVar13 != pfVar23; pfVar23 = pfVar23 + 1) {
            fVar33 = *pfVar23;
            if (*__dest <= fVar33) {
              fVar30 = pfVar23[-1];
              pfVar22 = pfVar23;
              if (fVar33 < fVar30) {
                do {
                  pfVar17 = pfVar22 + -1;
                  *pfVar22 = fVar30;
                  fVar30 = pfVar22[-2];
                  pfVar22 = pfVar17;
                } while (fVar33 < fVar30);
                *pfVar17 = fVar33;
              }
              else {
                *pfVar23 = fVar33;
              }
            }
            else {
              sVar14 = (long)pfVar23 - (long)__dest;
                    /* try { // try from 0031b608 to 0041b60b has its CatchHandler @ 0031e4ec */
              if ((long)sVar14 >> 2 != 0) {
                memmove((void *)((long)pfVar23 + (4 - sVar14)),__dest,sVar14);
              }
                    /* try { // try from 0031b610 to 0041c767 has its CatchHandler @ 0031e4bc */
              *__dest = fVar33;
            }
          }
        }
        else {
          do {
            pfVar22 = pfVar23;
            fVar33 = *pfVar22;
            if (*__dest <= fVar33) {
              fVar30 = pfVar22[-1];
              pfVar23 = pfVar22;
              if (fVar33 < fVar30) {
                do {
                  pfVar17 = pfVar23 + -1;
                  *pfVar23 = fVar30;
                  fVar30 = pfVar23[-2];
                  pfVar23 = pfVar17;
                } while (fVar33 < fVar30);
                *pfVar17 = fVar33;
              }
              else {
                *pfVar22 = fVar33;
              }
            }
            else {
              sVar14 = (long)pfVar22 - (long)__dest;
              if ((long)sVar14 >> 2 != 0) {
                memmove((void *)((long)pfVar22 + (4 - sVar14)),__dest,sVar14);
              }
              *__dest = fVar33;
            }
            pfVar23 = pfVar22 + 1;
          } while (pfVar23 != __dest + 0x10);
          if (pfVar13 != pfVar23) {
            fVar33 = *pfVar22;
            fVar30 = *pfVar23;
            if (fVar30 < fVar33) goto LAB_0031b90c;
            do {
              *pfVar23 = fVar30;
              while( true ) {
                pfVar23 = pfVar23 + 1;
                if (pfVar13 == pfVar23) goto LAB_0031b620;
                fVar33 = pfVar23[-1];
                fVar30 = *pfVar23;
                pfVar22 = pfVar23 + -1;
                if (fVar33 <= fVar30) break;
LAB_0031b90c:
                do {
                  pfVar17 = pfVar22;
                  pfVar17[1] = fVar33;
                  fVar33 = pfVar17[-1];
                  pfVar22 = pfVar17 + -1;
                } while (fVar30 < fVar33);
                *pfVar17 = fVar30;
              }
            } while( true );
          }
        }
      }
LAB_0031b620:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(__n + uVar28 * -4) < (long)(uVar28 * 4) && 0 < (long)__n) {
          lVar10 = 0;
          pfVar13 = (float *)((long)__dest + uVar18);
          do {
            fVar33 = __dest[lVar10];
            __dest[lVar10] = *pfVar13;
            lVar10 = lVar10 + 1;
            *pfVar13 = fVar33;
            pfVar13 = pfVar13 + -1;
          } while ((int)lVar10 < (int)uVar2);
        }
        else {
          uVar1 = -((uint)((ulong)__dest >> 2) & 3) & 3;
          uVar16 = uVar28;
          if (uVar1 < uVar2) {
            uVar16 = (ulong)uVar1;
          }
          iVar7 = (int)uVar16;
          uVar20 = uVar16;
          if (iVar7 != 0) {
            fVar33 = *__dest;
            *__dest = *(float *)((long)__dest + uVar18);
            *(float *)((long)__dest + uVar18) = fVar33;
            if (iVar7 != 1) {
              fVar33 = __dest[1];
              __dest[1] = *(float *)((long)__dest + uVar12);
              *(float *)((long)__dest + uVar12) = fVar33;
              if (iVar7 == 3) {
                fVar33 = __dest[2];
                __dest[2] = *(float *)((long)__dest + uVar27);
                *(float *)((long)__dest + uVar27) = fVar33;
              }
              else {
                uVar20 = 2;
              }
            }
          }
          uVar1 = ((uVar2 - iVar7) - 4 >> 2) + 1;
          uVar24 = 0;
          pauVar15 = (undefined1 (*) [16])((long)__dest + (__n - 0xc) + ~uVar16 * 4);
          iVar5 = uVar1 * 4;
          pauVar11 = (undefined1 (*) [16])(__dest + uVar16);
          pauVar21 = pauVar15;
          pauVar25 = (undefined1 (*) [16])(__dest + uVar16);
          do {
            auVar32 = *pauVar15;
            uVar24 = uVar24 + 1;
            pauVar15 = pauVar15 + -1;
            auVar31._8_8_ = _UNK_0031ba98;
            auVar31._0_8_ = _DAT_0031ba90;
            auVar31 = a64_TBL(ZEXT816(0),auVar32,auVar31);
            auVar32._8_8_ = _UNK_0031ba98;
            auVar32._0_8_ = _DAT_0031ba90;
            auVar32 = a64_TBL(ZEXT816(0),*pauVar25,auVar32);
            *(long *)((long)*pauVar11 + 8) = auVar31._8_8_;
            *(long *)*pauVar11 = auVar31._0_8_;
            *(long *)(*pauVar21 + 8) = auVar32._8_8_;
            *(long *)*pauVar21 = auVar32._0_8_;
            pauVar21 = pauVar21 + -1;
            pauVar11 = pauVar11 + 1;
            pauVar25 = pauVar25 + 1;
          } while (uVar24 < uVar1);
          uVar1 = iVar5 + (int)uVar20;
          if (iVar5 != uVar2 - iVar7) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            uVar4 = *(undefined4 *)((long)__dest + uVar16);
            uVar20 = -(ulong)(uVar6 - uVar1 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar6 - uVar1) << 2;
            *(undefined4 *)((long)__dest + uVar16) = *(undefined4 *)((long)__dest + uVar20);
            *(undefined4 *)((long)__dest + uVar20) = uVar4;
            if ((int)(uVar1 + 1) < (int)uVar2) {
              uVar24 = uVar6 - (uVar1 + 1);
              uVar20 = -(ulong)(uVar24 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar24 << 2;
              uVar4 = *(undefined4 *)((long)__dest + uVar16 + 4);
              *(undefined4 *)((long)__dest + uVar16 + 4) = *(undefined4 *)((long)__dest + uVar20);
              *(undefined4 *)((long)__dest + uVar20) = uVar4;
              if ((int)(uVar1 + 2) < (int)uVar2) {
                uVar1 = uVar6 - (uVar1 + 2);
                uVar20 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
                uVar4 = *(undefined4 *)((long)__dest + uVar16 + 8);
                *(undefined4 *)((long)__dest + uVar16 + 8) = *(undefined4 *)((long)__dest + uVar20);
                *(undefined4 *)((long)__dest + uVar20) = uVar4;
              }
            }
          }
        }
      }
      if ((uVar3 == 0) && (0 < iVar26)) {
        lVar10 = 0;
        lVar19 = **(long **)(param_2 + 0x48);
        pfVar13 = (float *)(*(long *)(param_2 + 0x10) + lVar29 * 4);
        do {
          pfVar23 = __dest + lVar10;
          lVar10 = lVar10 + 1;
          *pfVar13 = *pfVar23;
          pfVar13 = (float *)((long)pfVar13 + lVar19);
        } while ((int)lVar10 < iVar26);
      }
      lVar29 = lVar29 + 1;
    } while ((int)lVar29 < iVar34);
  }
  if ((local_430 != local_420) && (local_430 != (float *)0x0)) {
    operator_delete__(local_430);
  }
  return;
}


==================================================================

### FUNC 0031baa0 (888 bytes) name=FUN_0031baa0

void FUN_0031baa0(double *param_1,double *param_2,long param_3)

{
  long lVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  double *pdVar5;
  double *pdVar6;
  double *pdVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  ulong uVar11;
  long lVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  
  lVar9 = (long)param_2 - (long)param_1;
  if (lVar9 < 0x88) {
    return;
  }
  if (param_3 != 0) {
    param_3 = param_3 + -1;
    lVar1 = (lVar9 >> 4) * 8;
    dVar13 = param_1[1];
    dVar14 = param_1[lVar9 >> 4];
    dVar16 = param_2[-1];
    if (dVar14 <= dVar13) goto LAB_0031bba8;
LAB_0031baec:
    if (dVar14 < dVar16) goto LAB_0031bbb8;
    if (dVar16 <= dVar13) goto LAB_0031bbd4;
    do {
      dVar15 = *param_1;
      *param_1 = dVar16;
      param_2[-1] = dVar15;
      dVar13 = *param_1;
      dVar14 = param_1[1];
      pdVar7 = param_2;
      pdVar6 = param_1;
      pdVar5 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = pdVar6 + 1;
            while (dVar14 < dVar13) {
              param_2 = param_2 + 1;
              dVar14 = *param_2;
            }
            pdVar7 = pdVar7 + -1;
            while (dVar13 < dVar15) {
              pdVar7 = pdVar7 + -1;
              dVar15 = *pdVar7;
            }
            if (pdVar7 <= param_2) break;
            *param_2 = dVar15;
            *pdVar7 = dVar14;
            dVar15 = pdVar7[-1];
            dVar13 = *param_1;
            dVar14 = param_2[1];
            pdVar6 = param_2;
          }
          FUN_0031baa0(param_2,pdVar5,param_3);
          lVar9 = (long)param_2 - (long)param_1;
          if (lVar9 < 0x88) {
            return;
          }
          if (param_3 == 0) goto LAB_0031bce8;
          lVar1 = (lVar9 >> 4) * 8;
          param_3 = param_3 + -1;
          dVar13 = param_1[1];
          dVar14 = param_1[lVar9 >> 4];
          dVar16 = param_2[-1];
          if (dVar13 < dVar14) goto LAB_0031baec;
LAB_0031bba8:
          if (dVar16 <= dVar13) break;
LAB_0031bbd4:
          dVar14 = *param_1;
          *param_1 = dVar13;
          param_1[1] = dVar14;
          dVar15 = param_2[-1];
          pdVar7 = param_2;
          pdVar6 = param_1;
          pdVar5 = param_2;
        }
        if (dVar14 < dVar16) break;
LAB_0031bbb8:
        dVar13 = *param_1;
        *param_1 = dVar14;
        *(double *)((long)param_1 + lVar1) = dVar13;
        dVar15 = param_2[-1];
        dVar13 = *param_1;
        dVar14 = param_1[1];
        pdVar7 = param_2;
        pdVar6 = param_1;
        pdVar5 = param_2;
      }
    } while( true );
  }
LAB_0031bce8:
  lVar9 = lVar9 >> 3;
  lVar12 = lVar9 + -2 >> 1;
  pdVar6 = param_1 + lVar12;
  lVar1 = lVar12;
  do {
    dVar13 = *pdVar6;
    lVar2 = lVar1;
    pdVar7 = pdVar6;
    while (lVar2 < lVar9 + -1 >> 1) {
      lVar10 = lVar2 + 1;
      lVar4 = lVar10 * 2;
      pdVar7 = param_1 + lVar10 * 2;
      dVar14 = param_1[lVar10 * 2];
      if (dVar14 < pdVar7[-1]) {
        lVar4 = lVar4 + -1;
        dVar14 = param_1[lVar4];
        pdVar7 = param_1 + lVar4;
      }
      param_1[lVar2] = dVar14;
      lVar2 = lVar4;
    }
    if ((lVar2 == lVar12) && (((uint)lVar9 & 1) != 1)) {
      lVar10 = lVar2 + 1;
      lVar2 = lVar10 * 2 + -1;
      *pdVar7 = param_1[lVar10 * 2 + -1];
      pdVar7 = param_1 + lVar2;
    }
    if (lVar1 < lVar2) {
      lVar10 = lVar2 + -1 >> 1;
      dVar14 = param_1[lVar10];
      while (lVar4 = lVar10, dVar14 < dVar13) {
        param_1[lVar2] = dVar14;
        pdVar7 = param_1 + lVar4;
        if (lVar4 <= lVar1) break;
        lVar10 = (lVar4 + -1) / 2;
        dVar14 = param_1[lVar10];
        lVar2 = lVar4;
      }
      *pdVar7 = dVar13;
      if (lVar1 == 0) break;
    }
    else {
      *pdVar7 = dVar13;
    }
    pdVar6 = pdVar6 + -1;
    lVar1 = lVar1 + -1;
  } while( true );
LAB_0031bc3c:
  param_2 = param_2 + -1;
  dVar13 = *param_2;
  uVar11 = (long)param_2 - (long)param_1 >> 3;
  *param_2 = *param_1;
  lVar9 = (long)(uVar11 - 1) / 2;
  if (lVar9 < 1) {
    uVar3 = uVar11 & 1;
    pdVar6 = param_1;
    if ((uVar11 & 1) == 0) goto LAB_0031bcac;
  }
  else {
    uVar8 = 0;
    do {
      lVar1 = uVar8 + 1;
      uVar3 = lVar1 * 2;
      pdVar6 = param_1 + lVar1 * 2;
      dVar14 = param_1[lVar1 * 2];
      if (dVar14 < pdVar6[-1]) {
        uVar3 = uVar3 - 1;
        dVar14 = param_1[uVar3];
        pdVar6 = param_1 + uVar3;
      }
      param_1[uVar8] = dVar14;
      uVar8 = uVar3;
    } while ((long)uVar3 < lVar9);
    if ((uVar11 & 1) == 0) {
LAB_0031bcac:
      if (uVar3 == (long)(uVar11 - 2) / 2) {
        lVar9 = uVar3 + 1;
        uVar3 = lVar9 * 2 - 1;
        *pdVar6 = param_1[lVar9 * 2 + -1];
        pdVar6 = param_1 + uVar3;
      }
      else if ((long)uVar3 < 1) goto LAB_0031bcc4;
    }
    uVar11 = (long)(uVar3 - 1) >> 1;
    dVar14 = param_1[uVar11];
    while (uVar8 = uVar11, dVar14 < dVar13) {
      pdVar6 = param_1 + uVar8;
      param_1[uVar3] = dVar14;
      uVar11 = (long)(uVar8 - 1) >> 1;
      if (uVar8 == 0) break;
      dVar14 = param_1[uVar11];
      uVar3 = uVar8;
    }
  }
LAB_0031bcc4:
  *pdVar6 = dVar13;
  if ((long)param_2 - (long)param_1 < 0x10) {
    return;
  }
  goto LAB_0031bc3c;
}


==================================================================

### FUNC 0031be20 (1340 bytes) name=FUN_0031be20

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0031be20(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  undefined1 auVar8 [16];
  long lVar9;
  long lVar10;
  long lVar11;
  undefined1 (*pauVar12) [16];
  ulong uVar13;
  undefined1 (*pauVar14) [16];
  ulong uVar15;
  double *pdVar16;
  double dVar17;
  size_t sVar18;
  undefined8 uVar19;
  double *pdVar20;
  long lVar21;
  undefined1 (*pauVar22) [16];
  uint uVar23;
  double *pdVar24;
  double *pdVar25;
  undefined1 (*pauVar26) [16];
  int iVar27;
  ulong uVar28;
  ulong uVar29;
  double *__dest;
  long lVar30;
  double dVar31;
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  int iVar34;
  double *local_450;
  double local_440 [136];
  
  local_450 = local_440;
  lVar9 = *(long *)(param_1 + 0x10);
  uVar4 = param_3 & 1 ^ 1;
  lVar10 = *(long *)(param_2 + 0x10);
  if (uVar4 == 0) {
    uVar28 = (ulong)*(uint *)(param_1 + 8);
    iVar34 = *(int *)(param_1 + 0xc);
    uVar29 = (ulong)(int)*(uint *)(param_1 + 8);
    if (0x88 < uVar29) {
      uVar13 = uVar29 << 3;
      if (0xfe0000000000000 < uVar29) {
        uVar13 = 0xffffffffffffffff;
      }
      local_450 = operator_new__(uVar13);
    }
  }
  else {
    iVar34 = *(int *)(param_1 + 8);
    uVar28 = (ulong)*(uint *)(param_1 + 0xc);
  }
  if (0 < iVar34) {
    iVar27 = (int)uVar28;
    uVar6 = iVar27 - 1;
    uVar29 = -(uVar28 >> 0x1f) & 0xfffffff800000000 | uVar28 << 3;
    uVar2 = iVar27 / 2;
    uVar28 = -(ulong)(uVar6 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar6 << 3;
    lVar30 = 0;
    do {
      if (uVar4 == 0) {
        __dest = local_450;
        if (0 < iVar27) {
          lVar11 = 0;
          lVar21 = **(long **)(param_1 + 0x48);
          pdVar16 = (double *)(*(long *)(param_1 + 0x10) + lVar30 * 8);
          do {
            dVar17 = *pdVar16;
            pdVar16 = (double *)((long)pdVar16 + lVar21);
            local_450[lVar11] = dVar17;
            lVar11 = lVar11 + 1;
          } while ((int)lVar11 < iVar27);
        }
      }
      else {
        __dest = (double *)(*(long *)(param_2 + 0x10) + lVar30 * **(long **)(param_2 + 0x48));
        if (lVar9 != lVar10) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar30 * **(long **)(param_1 + 0x48)),
                 uVar29);
        }
      }
      pdVar16 = (double *)((long)__dest + uVar29);
      if (__dest != pdVar16) {
        FUN_0031baa0(__dest,pdVar16,(0x3f - LZCOUNT((long)uVar29 >> 3)) * 2);
        pdVar25 = __dest + 1;
        if ((long)uVar29 < 0x88) {
          for (; pdVar16 != pdVar25; pdVar25 = pdVar25 + 1) {
            dVar17 = *pdVar25;
            if (*__dest <= dVar17) {
              dVar31 = pdVar25[-1];
              pdVar24 = pdVar25;
              if (dVar17 < dVar31) {
                do {
                  pdVar20 = pdVar24 + -1;
                  *pdVar24 = dVar31;
                  dVar31 = pdVar24[-2];
                  pdVar24 = pdVar20;
                } while (dVar17 < dVar31);
                *pdVar20 = dVar17;
              }
              else {
                *pdVar25 = dVar17;
              }
            }
            else {
              sVar18 = (long)pdVar25 - (long)__dest;
              if ((long)sVar18 >> 3 != 0) {
                memmove((void *)((long)pdVar25 + (8 - sVar18)),__dest,sVar18);
              }
              *__dest = dVar17;
            }
          }
        }
        else {
          do {
            pdVar24 = pdVar25;
            dVar17 = *pdVar24;
            if (*__dest <= dVar17) {
              dVar31 = pdVar24[-1];
              pdVar25 = pdVar24;
              if (dVar17 < dVar31) {
                do {
                  pdVar20 = pdVar25 + -1;
                  *pdVar25 = dVar31;
                  dVar31 = pdVar25[-2];
                  pdVar25 = pdVar20;
                } while (dVar17 < dVar31);
                *pdVar20 = dVar17;
              }
              else {
                *pdVar24 = dVar17;
              }
            }
            else {
              sVar18 = (long)pdVar24 - (long)__dest;
              if ((long)sVar18 >> 3 != 0) {
                memmove((void *)((long)pdVar24 + (8 - sVar18)),__dest,sVar18);
              }
              *__dest = dVar17;
            }
            pdVar25 = pdVar24 + 1;
          } while (pdVar25 != __dest + 0x10);
          if (pdVar16 != pdVar25) {
            auVar32._0_8_ = *pdVar24;
            auVar32._8_8_ = 0;
            auVar33._0_8_ = *pdVar25;
            auVar33._8_8_ = 0;
            if (auVar33._0_8_ < auVar32._0_8_) goto LAB_0031c20c;
            do {
              *pdVar25 = auVar33._0_8_;
              while( true ) {
                pdVar25 = pdVar25 + 1;
                if (pdVar16 == pdVar25) goto LAB_0031bfb4;
                auVar32._0_8_ = pdVar25[-1];
                auVar32._8_8_ = 0;
                auVar33._0_8_ = *pdVar25;
                auVar33._8_8_ = 0;
                pdVar24 = pdVar25 + -1;
                if (auVar32._0_8_ <= auVar33._0_8_) break;
LAB_0031c20c:
                do {
                  pdVar20 = pdVar24;
                  pdVar20[1] = auVar32._0_8_;
                  auVar32._0_8_ = pdVar20[-1];
                  auVar32._8_8_ = 0;
                  pdVar24 = pdVar20 + -1;
                } while (auVar33._0_8_ < auVar32._0_8_);
                *pdVar20 = auVar33._0_8_;
              }
            } while( true );
          }
        }
      }
LAB_0031bfb4:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 ||
            (long)(uVar29 + (ulong)uVar2 * -8) < (long)((ulong)uVar2 * 8) && 0 < (long)uVar29) {
          lVar11 = 0;
          pdVar16 = (double *)((long)__dest + uVar28);
          do {
            dVar17 = __dest[lVar11];
            __dest[lVar11] = *pdVar16;
            lVar11 = lVar11 + 1;
            *pdVar16 = dVar17;
            pdVar16 = pdVar16 + -1;
          } while ((int)lVar11 < (int)uVar2);
        }
        else {
          uVar1 = (uint)((ulong)__dest >> 3) & 1;
          uVar3 = uVar2;
          if (uVar1 < uVar2) {
            uVar3 = uVar1;
          }
          if (uVar3 != 0) {
            dVar17 = *__dest;
            *__dest = *(double *)((long)__dest + uVar28);
            *(double *)((long)__dest + uVar28) = dVar17;
          }
          uVar1 = ((uVar2 - uVar3) - 2 >> 1) + 1;
          uVar23 = 0;
          iVar5 = uVar1 * 2;
          pauVar14 = (undefined1 (*) [16])((long)__dest + (uVar29 - 0x10) + (ulong)uVar3 * -8);
          pauVar12 = (undefined1 (*) [16])(__dest + uVar3);
          pauVar22 = pauVar14;
          pauVar26 = (undefined1 (*) [16])(__dest + uVar3);
          do {
            auVar32 = *pauVar14;
            uVar23 = uVar23 + 1;
            pauVar14 = pauVar14 + -1;
            auVar7._8_8_ = _UNK_0031c388;
            auVar7._0_8_ = _DAT_0031c380;
            auVar32 = a64_TBL(ZEXT816(0),auVar32,auVar7);
            auVar8._8_8_ = _UNK_0031c388;
            auVar8._0_8_ = _DAT_0031c380;
            auVar33 = a64_TBL(ZEXT816(0),*pauVar12,auVar8);
            *(long *)(*pauVar26 + 8) = auVar32._8_8_;
            *(long *)*pauVar26 = auVar32._0_8_;
            *(long *)(*pauVar22 + 8) = auVar33._8_8_;
            *(long *)*pauVar22 = auVar33._0_8_;
            pauVar22 = pauVar22 + -1;
            pauVar12 = pauVar12 + 1;
            pauVar26 = pauVar26 + 1;
          } while (uVar23 < uVar1);
          uVar1 = iVar5 + (uint)(uVar3 != 0);
          if (iVar5 != uVar2 - uVar3) {
            uVar13 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
            uVar15 = -(ulong)(uVar6 - uVar1 >> 0x1f) & 0xfffffff800000000 |
                     (ulong)(uVar6 - uVar1) << 3;
            uVar19 = *(undefined8 *)((long)__dest + uVar13);
            *(undefined8 *)((long)__dest + uVar13) = *(undefined8 *)((long)__dest + uVar15);
            *(undefined8 *)((long)__dest + uVar15) = uVar19;
          }
        }
      }
      if ((uVar4 == 0) && (0 < iVar27)) {
        lVar11 = 0;
        lVar21 = **(long **)(param_2 + 0x48);
        pdVar16 = (double *)(*(long *)(param_2 + 0x10) + lVar30 * 8);
        do {
          pdVar25 = __dest + lVar11;
          lVar11 = lVar11 + 1;
          *pdVar16 = *pdVar25;
          pdVar16 = (double *)((long)pdVar16 + lVar21);
        } while ((int)lVar11 < iVar27);
      }
      lVar30 = lVar30 + 1;
    } while ((int)lVar30 < iVar34);
  }
  if ((local_450 != local_440) && (local_450 != (double *)0x0)) {
    operator_delete__(local_450);
  }
  return;
}


==================================================================

### FUNC 0031c390 (864 bytes) name=FUN_0031c390

void FUN_0031c390(ushort *param_1,ushort *param_2,long param_3)

{
  long lVar1;
  long lVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  ushort *puVar6;
  ushort *puVar7;
  ushort uVar8;
  ushort *puVar9;
  ushort uVar10;
  long lVar11;
  long lVar12;
  ushort uVar13;
  ulong uVar14;
  long lVar15;
  
  lVar11 = (long)param_2 - (long)param_1;
  if (lVar11 < 0x22) {
    return;
  }
  if (param_3 != 0) {
    uVar13 = param_1[1];
    lVar1 = (lVar11 >> 2) * 2;
    param_3 = param_3 + -1;
    uVar10 = param_2[-1];
    uVar8 = param_1[lVar11 >> 2];
    if (uVar8 <= uVar13) goto LAB_0031c498;
LAB_0031c3dc:
    if (uVar8 < uVar10) goto LAB_0031c4a8;
    if (uVar10 <= uVar13) goto LAB_0031c4c4;
    do {
      uVar8 = *param_1;
      *param_1 = uVar10;
      param_2[-1] = uVar8;
      uVar13 = *param_1;
      uVar10 = param_1[1];
      puVar9 = param_2;
      puVar7 = param_1;
      puVar6 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = puVar7 + 1;
            while (uVar10 < uVar13) {
              param_2 = param_2 + 1;
              uVar10 = *param_2;
            }
            puVar9 = puVar9 + -1;
            while (uVar13 < uVar8) {
              puVar9 = puVar9 + -1;
              uVar8 = *puVar9;
            }
            if (puVar9 <= param_2) break;
            *param_2 = uVar8;
            *puVar9 = uVar10;
            uVar8 = puVar9[-1];
            uVar13 = *param_1;
            uVar10 = param_2[1];
            puVar7 = param_2;
          }
          FUN_0031c390(param_2,puVar6,param_3);
          lVar11 = (long)param_2 - (long)param_1;
          if (lVar11 < 0x22) {
            return;
          }
          if (param_3 == 0) goto LAB_0031c4dc;
          uVar13 = param_1[1];
          lVar1 = (lVar11 >> 2) * 2;
          param_3 = param_3 + -1;
          uVar8 = param_1[lVar11 >> 2];
          uVar10 = param_2[-1];
          if (uVar13 < uVar8) goto LAB_0031c3dc;
LAB_0031c498:
          if (uVar10 <= uVar13) break;
LAB_0031c4c4:
          uVar10 = *param_1;
          param_1[1] = uVar10;
          *param_1 = uVar13;
          uVar8 = param_2[-1];
          puVar9 = param_2;
          puVar7 = param_1;
          puVar6 = param_2;
        }
        if (uVar8 < uVar10) break;
LAB_0031c4a8:
        uVar13 = *param_1;
        *param_1 = uVar8;
        *(ushort *)((long)param_1 + lVar1) = uVar13;
        uVar13 = *param_1;
        uVar10 = param_1[1];
        uVar8 = param_2[-1];
        puVar9 = param_2;
        puVar7 = param_1;
        puVar6 = param_2;
      }
    } while( true );
  }
LAB_0031c4dc:
  lVar11 = lVar11 >> 1;
  lVar15 = lVar11 + -2 >> 1;
  puVar7 = param_1 + lVar15;
  lVar1 = lVar15;
  do {
    uVar13 = *puVar7;
    lVar3 = lVar1;
    puVar9 = puVar7;
    while (lVar3 < lVar11 + -1 >> 1) {
      lVar12 = lVar3 + 1;
      lVar2 = lVar12 * 2;
      puVar9 = param_1 + lVar12 * 2;
      uVar8 = param_1[lVar12 * 2];
      if (uVar8 < puVar9[-1]) {
        lVar2 = lVar2 + -1;
        uVar8 = param_1[lVar2];
        puVar9 = param_1 + lVar2;
      }
      param_1[lVar3] = uVar8;
      lVar3 = lVar2;
    }
    if ((lVar3 == lVar15) && (((uint)lVar11 & 1) != 1)) {
      lVar12 = lVar3 + 1;
      lVar3 = lVar12 * 2 + -1;
      *puVar9 = param_1[lVar12 * 2 + -1];
      puVar9 = param_1 + lVar3;
    }
    if (lVar1 < lVar3) {
      lVar12 = lVar3 + -1;
      do {
        lVar2 = lVar12 >> 1;
        if (uVar13 <= param_1[lVar2]) break;
        param_1[lVar3] = param_1[lVar2];
        puVar9 = param_1 + lVar2;
        lVar12 = (lVar2 + -1) - (lVar2 + -1 >> 0x3f);
        lVar3 = lVar2;
      } while (lVar1 < lVar2);
      *puVar9 = uVar13;
      if (lVar1 == 0) break;
    }
    else {
      *puVar9 = uVar13;
    }
    puVar7 = puVar7 + -1;
    lVar1 = lVar1 + -1;
  } while( true );
LAB_0031c5a4:
  param_2 = param_2 + -1;
  uVar13 = *param_2;
  *param_2 = *param_1;
  uVar14 = (long)param_2 - (long)param_1 >> 1;
  lVar11 = (long)(uVar14 - 1) / 2;
  if (lVar11 < 1) {
    uVar5 = uVar14 & 1;
    puVar7 = param_1;
    if ((uVar14 & 1) == 0) goto LAB_0031c614;
  }
  else {
    uVar4 = 0;
    do {
      lVar1 = uVar4 + 1;
      uVar5 = lVar1 * 2;
      puVar7 = param_1 + lVar1 * 2;
      uVar8 = param_1[lVar1 * 2];
      if (uVar8 < puVar7[-1]) {
        uVar5 = uVar5 - 1;
        uVar8 = param_1[uVar5];
        puVar7 = param_1 + uVar5;
      }
      param_1[uVar4] = uVar8;
      uVar4 = uVar5;
    } while ((long)uVar5 < lVar11);
    if ((uVar14 & 1) == 0) {
LAB_0031c614:
      if (uVar5 == (long)(uVar14 - 2) / 2) {
        lVar11 = uVar5 + 1;
        uVar5 = lVar11 * 2 - 1;
        *puVar7 = param_1[lVar11 * 2 + -1];
        puVar7 = param_1 + uVar5;
      }
      else if ((long)uVar5 < 1) goto LAB_0031c62c;
    }
    uVar14 = (long)(uVar5 - 1) >> 1;
    uVar8 = param_1[uVar14];
    while (uVar4 = uVar14, uVar8 < uVar13) {
      param_1[uVar5] = uVar8;
      puVar7 = param_1 + uVar4;
      uVar14 = (long)(uVar4 - 1) >> 1;
      if (uVar4 == 0) break;
      uVar8 = param_1[uVar14];
      uVar5 = uVar4;
    }
  }
LAB_0031c62c:
  *puVar7 = uVar13;
  if ((long)param_2 - (long)param_1 < 4) {
    return;
  }
  goto LAB_0031c5a4;
}


==================================================================

### FUNC 0031c6f0 (1876 bytes) name=FUN_0031c6f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0031c6f0(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined2 uVar4;
  int iVar5;
  uint uVar6;
  undefined1 auVar7 [16];
  int iVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  undefined1 (*pauVar12) [16];
  ulong uVar13;
  ulong uVar14;
  ulong uVar15;
  ushort *puVar16;
  ulong uVar17;
  size_t sVar18;
  undefined1 (*pauVar19) [16];
  ushort *puVar20;
  ushort uVar21;
  uint uVar22;
  ulong uVar23;
  long lVar24;
  ulong uVar25;
  ushort uVar26;
  ulong uVar27;
  undefined1 (*pauVar28) [16];
  ulong uVar29;
  ushort *puVar30;
  ushort *puVar31;
  ulong uVar32;
  undefined1 (*pauVar33) [16];
  int iVar34;
  ulong uVar35;
  ulong __n;
  ushort *__dest;
  long lVar36;
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  int iVar39;
  ushort *local_420;
  ushort local_410 [520];
  
  local_420 = local_410;
  lVar9 = *(long *)(param_1 + 0x10);
  uVar3 = param_3 & 1 ^ 1;
  lVar10 = *(long *)(param_2 + 0x10);
  if (uVar3 == 0) {
    uVar35 = (ulong)*(uint *)(param_1 + 8);
    iVar39 = *(int *)(param_1 + 0xc);
    uVar14 = (ulong)(int)*(uint *)(param_1 + 8);
    if (0x208 < uVar14) {
      uVar17 = uVar14 << 1;
      if (0x3f80000000000000 < uVar14) {
        uVar17 = 0xffffffffffffffff;
      }
      local_420 = operator_new__(uVar17);
    }
  }
  else {
    iVar39 = *(int *)(param_1 + 8);
    uVar35 = (ulong)*(uint *)(param_1 + 0xc);
  }
  if (0 < iVar39) {
    iVar34 = (int)uVar35;
    uVar6 = iVar34 - 1;
                    /* try { // try from 0031c784 to 0041c787 has its CatchHandler @ 0031e4dc */
                    /* try { // try from 0031c78c to 0041c82f has its CatchHandler @ 0031e4bc */
    uVar2 = iVar34 / 2;
    uVar29 = (ulong)uVar2;
    uVar27 = -(ulong)(uVar6 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar6 << 1;
    __n = -(uVar35 >> 0x1f) & 0xfffffffe00000000 | uVar35 << 1;
    uVar35 = -(ulong)(iVar34 - 7U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 7U) << 1;
    uVar32 = -(ulong)(iVar34 - 2U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 2U) << 1;
    uVar25 = -(ulong)(iVar34 - 3U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 3U) << 1;
    uVar23 = -(ulong)(iVar34 - 4U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 4U) << 1;
    uVar17 = -(ulong)(iVar34 - 5U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 5U) << 1;
    uVar14 = -(ulong)(iVar34 - 6U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar34 - 6U) << 1;
    lVar36 = 0;
    do {
      if (uVar3 == 0) {
        __dest = local_420;
        if (0 < iVar34) {
          lVar11 = 0;
                    /* try { // try from 0031c84c to 0041c84f has its CatchHandler @ 0031e4c4 */
          lVar24 = **(long **)(param_1 + 0x48);
          puVar16 = (ushort *)(*(long *)(param_1 + 0x10) + lVar36 * 2);
          do {
            uVar26 = *puVar16;
            puVar16 = (ushort *)((long)puVar16 + lVar24);
            local_420[lVar11] = uVar26;
            lVar11 = lVar11 + 1;
          } while ((int)lVar11 < iVar34);
        }
      }
      else {
        __dest = (ushort *)(*(long *)(param_2 + 0x10) + lVar36 * **(long **)(param_2 + 0x48));
        if (lVar9 != lVar10) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar36 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      puVar16 = (ushort *)((long)__dest + __n);
      if (__dest != puVar16) {
        FUN_0031c390(__dest,puVar16,(0x3f - LZCOUNT((long)__n >> 1)) * 2);
        puVar31 = __dest + 1;
        if ((long)__n < 0x22) {
          for (; puVar16 != puVar31; puVar31 = puVar31 + 1) {
            uVar26 = *puVar31;
            if (uVar26 < *__dest) {
              sVar18 = (long)puVar31 - (long)__dest;
              if ((long)sVar18 >> 1 != 0) {
                memmove((void *)((long)puVar31 + (2 - sVar18)),__dest,sVar18);
              }
              *__dest = uVar26;
            }
            else {
              uVar21 = puVar31[-1];
              puVar30 = puVar31;
              if (uVar26 < uVar21) {
                do {
                  puVar20 = puVar30 + -1;
                  *puVar30 = uVar21;
                  uVar21 = puVar30[-2];
                  puVar30 = puVar20;
                } while (uVar26 < uVar21);
                *puVar20 = uVar26;
              }
              else {
                *puVar31 = uVar26;
              }
            }
          }
        }
        else {
          do {
            puVar30 = puVar31;
            uVar26 = *puVar30;
            if (uVar26 < *__dest) {
              sVar18 = (long)puVar30 - (long)__dest;
              if ((long)sVar18 >> 1 != 0) {
                memmove((void *)((long)puVar30 + (2 - sVar18)),__dest,sVar18);
              }
              *__dest = uVar26;
            }
            else {
              uVar21 = puVar30[-1];
              puVar31 = puVar30;
              if (uVar26 < uVar21) {
                do {
                  puVar20 = puVar31 + -1;
                  *puVar31 = uVar21;
                  uVar21 = puVar31[-2];
                  puVar31 = puVar20;
                } while (uVar26 < uVar21);
                *puVar20 = uVar26;
              }
              else {
                *puVar30 = uVar26;
              }
            }
            puVar31 = puVar30 + 1;
          } while (puVar31 != __dest + 0x10);
          if (puVar16 != puVar31) {
            uVar21 = *puVar30;
            uVar26 = *puVar31;
            if (uVar26 < uVar21) goto LAB_0031cce4;
            do {
              *puVar31 = uVar26;
              while( true ) {
                puVar31 = puVar31 + 1;
                if (puVar16 == puVar31) goto LAB_0031c8d0;
                uVar21 = puVar31[-1];
                uVar26 = *puVar31;
                puVar30 = puVar31 + -1;
                if (uVar21 <= uVar26) break;
LAB_0031cce4:
                do {
                  puVar20 = puVar30;
                  puVar20[1] = uVar21;
                  uVar21 = puVar20[-1];
                  puVar30 = puVar20 + -1;
                } while (uVar26 < uVar21);
                *puVar20 = uVar26;
              }
            } while( true );
          }
        }
      }
LAB_0031c8d0:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 0xc || (long)(__n + uVar29 * -2) < (long)(uVar29 * 2) && 0 < (long)__n) {
          lVar11 = 0;
          puVar16 = (ushort *)((long)__dest + uVar27);
          do {
            uVar26 = __dest[lVar11];
            __dest[lVar11] = *puVar16;
            lVar11 = lVar11 + 1;
            *puVar16 = uVar26;
            puVar16 = puVar16 + -1;
          } while ((int)lVar11 < (int)uVar2);
        }
        else {
          uVar1 = -((uint)((ulong)__dest >> 1) & 7) & 7;
          uVar13 = uVar29;
          if (uVar1 < uVar2) {
            uVar13 = (ulong)uVar1;
          }
          iVar8 = (int)uVar13;
          uVar15 = uVar13;
          if (iVar8 != 0) {
            uVar26 = *__dest;
            *__dest = *(ushort *)((long)__dest + uVar27);
            *(ushort *)((long)__dest + uVar27) = uVar26;
            if (iVar8 != 1) {
              uVar26 = __dest[1];
              __dest[1] = *(ushort *)((long)__dest + uVar32);
              *(ushort *)((long)__dest + uVar32) = uVar26;
              if (iVar8 != 2) {
                uVar26 = __dest[2];
                __dest[2] = *(ushort *)((long)__dest + uVar25);
                *(ushort *)((long)__dest + uVar25) = uVar26;
                if (iVar8 != 3) {
                  uVar26 = __dest[3];
                  __dest[3] = *(ushort *)((long)__dest + uVar23);
                  *(ushort *)((long)__dest + uVar23) = uVar26;
                  if (iVar8 != 4) {
                    uVar26 = __dest[4];
                    __dest[4] = *(ushort *)((long)__dest + uVar17);
                    *(ushort *)((long)__dest + uVar17) = uVar26;
                    if (iVar8 != 5) {
                      uVar26 = __dest[5];
                      __dest[5] = *(ushort *)((long)__dest + uVar14);
                      *(ushort *)((long)__dest + uVar14) = uVar26;
                      if (iVar8 == 7) {
                        uVar26 = __dest[6];
                        __dest[6] = *(ushort *)((long)__dest + uVar35);
                        *(ushort *)((long)__dest + uVar35) = uVar26;
                        uVar15 = 7;
                      }
                      else {
                        uVar15 = 6;
                      }
                    }
                  }
                }
              }
            }
          }
          uVar1 = ((uVar2 - iVar8) - 8 >> 3) + 1;
          iVar5 = uVar1 * 8;
          if (6 < (uVar2 - 1) - iVar8) {
            pauVar19 = (undefined1 (*) [16])((long)__dest + (__n - 0xe) + ~uVar13 * 2);
            uVar22 = 0;
            pauVar12 = (undefined1 (*) [16])(__dest + uVar13);
            pauVar28 = pauVar19;
            pauVar33 = (undefined1 (*) [16])(__dest + uVar13);
            do {
              auVar7 = *pauVar19;
              uVar22 = uVar22 + 1;
              pauVar19 = pauVar19 + -1;
              auVar37._8_8_ = _UNK_0031ce78;
              auVar37._0_8_ = _DAT_0031ce70;
              auVar38 = a64_TBL(ZEXT816(0),auVar7,auVar37);
              auVar7._8_8_ = _UNK_0031ce78;
              auVar7._0_8_ = _DAT_0031ce70;
              auVar37 = a64_TBL(ZEXT816(0),*pauVar33,auVar7);
              *(long *)((long)*pauVar12 + 8) = auVar38._8_8_;
              *(long *)*pauVar12 = auVar38._0_8_;
              *(long *)(*pauVar28 + 8) = auVar37._8_8_;
              *(long *)*pauVar28 = auVar37._0_8_;
              pauVar28 = pauVar28 + -1;
              pauVar12 = pauVar12 + 1;
              pauVar33 = pauVar33 + 1;
            } while (uVar22 < uVar1);
            uVar15 = (ulong)(uint)((int)uVar15 + iVar5);
            if (iVar5 == uVar2 - iVar8) goto LAB_0031cb58;
          }
          uVar13 = -(uVar15 >> 0x1f) & 0xfffffffe00000000 | uVar15 << 1;
          iVar8 = (int)uVar15;
          uVar4 = *(undefined2 *)((long)__dest + uVar13);
          uVar15 = -(ulong)(uVar6 - iVar8 >> 0x1f) & 0xfffffffe00000000 |
                   (ulong)(uVar6 - iVar8) << 1;
          *(undefined2 *)((long)__dest + uVar13) = *(undefined2 *)((long)__dest + uVar15);
          *(undefined2 *)((long)__dest + uVar15) = uVar4;
          if (iVar8 + 1 < (int)uVar2) {
            uVar1 = uVar6 - (iVar8 + 1);
            uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
            uVar4 = *(undefined2 *)((long)__dest + uVar13 + 2);
            *(undefined2 *)((long)__dest + uVar13 + 2) = *(undefined2 *)((long)__dest + uVar15);
            *(undefined2 *)((long)__dest + uVar15) = uVar4;
            if (iVar8 + 2 < (int)uVar2) {
              uVar1 = uVar6 - (iVar8 + 2);
              uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
              uVar4 = *(undefined2 *)((long)__dest + uVar13 + 4);
              *(undefined2 *)((long)__dest + uVar13 + 4) = *(undefined2 *)((long)__dest + uVar15);
              *(undefined2 *)((long)__dest + uVar15) = uVar4;
              if (iVar8 + 3 < (int)uVar2) {
                uVar1 = uVar6 - (iVar8 + 3);
                uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                uVar4 = *(undefined2 *)((long)__dest + uVar13 + 6);
                *(undefined2 *)((long)__dest + uVar13 + 6) = *(undefined2 *)((long)__dest + uVar15);
                *(undefined2 *)((long)__dest + uVar15) = uVar4;
                if (iVar8 + 4 < (int)uVar2) {
                  uVar1 = uVar6 - (iVar8 + 4);
                  uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                  uVar4 = *(undefined2 *)((long)__dest + uVar13 + 8);
                  *(undefined2 *)((long)__dest + uVar13 + 8) =
                       *(undefined2 *)((long)__dest + uVar15);
                  *(undefined2 *)((long)__dest + uVar15) = uVar4;
                  if (iVar8 + 5 < (int)uVar2) {
                    uVar1 = uVar6 - (iVar8 + 5);
                    uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                    uVar4 = *(undefined2 *)((long)__dest + uVar13 + 10);
                    *(undefined2 *)((long)__dest + uVar13 + 10) =
                         *(undefined2 *)((long)__dest + uVar15);
                    *(undefined2 *)((long)__dest + uVar15) = uVar4;
                    if (iVar8 + 6 < (int)uVar2) {
                      uVar1 = uVar6 - (iVar8 + 6);
                      uVar4 = *(undefined2 *)((long)__dest + uVar13 + 0xc);
                      uVar15 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
                      *(undefined2 *)((long)__dest + uVar13 + 0xc) =
                           *(undefined2 *)((long)__dest + uVar15);
                      *(undefined2 *)((long)__dest + uVar15) = uVar4;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0031cb58:
      if ((uVar3 == 0) && (0 < iVar34)) {
        lVar11 = 0;
        lVar24 = **(long **)(param_2 + 0x48);
        puVar16 = (ushort *)(*(long *)(param_2 + 0x10) + lVar36 * 2);
        do {
          puVar31 = __dest + lVar11;
          lVar11 = lVar11 + 1;
          *puVar16 = *puVar31;
          puVar16 = (ushort *)((long)puVar16 + lVar24);
        } while ((int)lVar11 < iVar34);
      }
      lVar36 = lVar36 + 1;
    } while ((int)lVar36 < iVar39);
  }
  if ((local_420 != local_410) && (local_420 != (ushort *)0x0)) {
    operator_delete__(local_420);
  }
  return;
}


==================================================================

### FUNC 0031ce80 (872 bytes) name=FUN_0031ce80

void FUN_0031ce80(int *param_1,int *param_2,long param_3)

{
  long lVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  int *piVar5;
  int *piVar6;
  int iVar7;
  int *piVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  ulong uVar12;
  int iVar13;
  ulong uVar14;
  long lVar15;
  
  lVar10 = (long)param_2 - (long)param_1;
  if (lVar10 < 0x44) {
    return;
  }
  if (param_3 != 0) {
    iVar13 = param_1[1];
    lVar1 = (lVar10 >> 3) * 4;
    param_3 = param_3 + -1;
    iVar9 = param_2[-1];
    iVar7 = param_1[lVar10 >> 3];
    if (iVar7 <= iVar13) goto LAB_0031cf88;
LAB_0031cecc:
    if (iVar7 < iVar9) goto LAB_0031cf98;
    if (iVar9 <= iVar13) goto LAB_0031cfb4;
    do {
      iVar7 = *param_1;
      *param_1 = iVar9;
      param_2[-1] = iVar7;
      iVar13 = *param_1;
      iVar9 = param_1[1];
      piVar8 = param_2;
      piVar6 = param_1;
      piVar5 = param_2;
      while( true ) {
        while( true ) {
          while( true ) {
            param_2 = piVar6 + 1;
            while (iVar9 < iVar13) {
              param_2 = param_2 + 1;
              iVar9 = *param_2;
            }
            piVar8 = piVar8 + -1;
            while (iVar13 < iVar7) {
              piVar8 = piVar8 + -1;
              iVar7 = *piVar8;
            }
            if (piVar8 <= param_2) break;
            *param_2 = iVar7;
            *piVar8 = iVar9;
            iVar7 = piVar8[-1];
            iVar13 = *param_1;
            iVar9 = param_2[1];
            piVar6 = param_2;
          }
          FUN_0031ce80(param_2,piVar5,param_3);
          lVar10 = (long)param_2 - (long)param_1;
          if (lVar10 < 0x44) {
            return;
          }
          if (param_3 == 0) goto LAB_0031d0c8;
          iVar13 = param_1[1];
          lVar1 = (lVar10 >> 3) * 4;
          param_3 = param_3 + -1;
          iVar7 = param_1[lVar10 >> 3];
          iVar9 = param_2[-1];
          if (iVar13 < iVar7) goto LAB_0031cecc;
LAB_0031cf88:
          if (iVar9 <= iVar13) break;
LAB_0031cfb4:
          iVar9 = *param_1;
          param_1[1] = iVar9;
          *param_1 = iVar13;
          iVar7 = param_2[-1];
          piVar8 = param_2;
          piVar6 = param_1;
          piVar5 = param_2;
        }
        if (iVar7 < iVar9) break;
LAB_0031cf98:
        iVar13 = *param_1;
        *param_1 = iVar7;
        *(int *)((long)param_1 + lVar1) = iVar13;
        iVar13 = *param_1;
        iVar9 = param_1[1];
        iVar7 = param_2[-1];
        piVar8 = param_2;
        piVar6 = param_1;
        piVar5 = param_2;
      }
    } while( true );
  }
LAB_0031d0c8:
  lVar10 = lVar10 >> 2;
  lVar15 = lVar10 + -2 >> 1;
  piVar6 = param_1 + lVar15;
  lVar1 = lVar15;
  do {
    iVar13 = *piVar6;
    lVar2 = lVar1;
    piVar8 = piVar6;
    while (lVar2 < lVar10 + -1 >> 1) {
      lVar11 = lVar2 + 1;
      lVar4 = lVar11 * 2;
      piVar8 = param_1 + lVar11 * 2;
      iVar9 = param_1[lVar11 * 2];
      if (iVar9 < piVar8[-1]) {
        lVar4 = lVar4 + -1;
        iVar9 = param_1[lVar4];
        piVar8 = param_1 + lVar4;
      }
      param_1[lVar2] = iVar9;
      lVar2 = lVar4;
    }
    if ((lVar2 == lVar15) && (((uint)lVar10 & 1) != 1)) {
      lVar11 = lVar2 + 1;
      lVar2 = lVar11 * 2 + -1;
      *piVar8 = param_1[lVar11 * 2 + -1];
      piVar8 = param_1 + lVar2;
    }
    if (lVar1 < lVar2) {
      lVar11 = lVar2 + -1;
      do {
        lVar4 = lVar11 >> 1;
        if (iVar13 <= param_1[lVar4]) break;
        param_1[lVar2] = param_1[lVar4];
        piVar8 = param_1 + lVar4;
        lVar11 = (lVar4 + -1) - (lVar4 + -1 >> 0x3f);
        lVar2 = lVar4;
      } while (lVar1 < lVar4);
      *piVar8 = iVar13;
      if (lVar1 == 0) break;
    }
    else {
      *piVar8 = iVar13;
    }
    piVar6 = piVar6 + -1;
    lVar1 = lVar1 + -1;
  } while( true );
LAB_0031d01c:
  param_2 = param_2 + -1;
  iVar13 = *param_2;
  *param_2 = *param_1;
  uVar14 = (long)param_2 - (long)param_1 >> 2;
  lVar10 = (long)(uVar14 - 1) / 2;
  if (lVar10 < 1) {
    uVar3 = uVar14 & 1;
    piVar6 = param_1;
    if ((uVar14 & 1) == 0) goto LAB_0031d08c;
  }
  else {
    uVar12 = 0;
    do {
      lVar1 = uVar12 + 1;
      uVar3 = lVar1 * 2;
      piVar6 = param_1 + lVar1 * 2;
      iVar9 = param_1[lVar1 * 2];
      if (iVar9 < piVar6[-1]) {
        uVar3 = uVar3 - 1;
        iVar9 = param_1[uVar3];
        piVar6 = param_1 + uVar3;
      }
      param_1[uVar12] = iVar9;
      uVar12 = uVar3;
    } while ((long)uVar3 < lVar10);
    if ((uVar14 & 1) == 0) {
LAB_0031d08c:
      if (uVar3 == (long)(uVar14 - 2) / 2) {
        lVar10 = uVar3 + 1;
        uVar3 = lVar10 * 2 - 1;
        *piVar6 = param_1[lVar10 * 2 + -1];
        piVar6 = param_1 + uVar3;
      }
      else if ((long)uVar3 < 1) goto LAB_0031d0a4;
    }
    uVar14 = (long)(uVar3 - 1) >> 1;
    iVar9 = param_1[uVar14];
    while (uVar12 = uVar14, iVar9 < iVar13) {
      param_1[uVar3] = iVar9;
      piVar6 = param_1 + uVar12;
      uVar14 = (long)(uVar12 - 1) >> 1;
      if (uVar12 == 0) break;
      iVar9 = param_1[uVar14];
      uVar3 = uVar12;
    }
  }
LAB_0031d0a4:
  *piVar6 = iVar13;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_0031d01c;
}


==================================================================

### FUNC 0031d1f0 (1540 bytes) name=FUN_0031d1f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0031d1f0(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  undefined4 uVar4;
  uint uVar5;
  undefined1 auVar6 [16];
  int iVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  undefined1 (*pauVar11) [16];
  ulong uVar12;
  int *piVar13;
  size_t sVar14;
  undefined1 (*pauVar15) [16];
  ulong uVar16;
  int *piVar17;
  int iVar18;
  ulong uVar19;
  long lVar20;
  ulong uVar21;
  undefined1 (*pauVar22) [16];
  uint uVar23;
  undefined1 (*pauVar24) [16];
  int *piVar25;
  int *piVar26;
  int iVar27;
  ulong uVar28;
  ulong uVar29;
  ulong __n;
  int *__dest;
  long lVar30;
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  int iVar33;
  int *local_430;
  int local_420 [264];
  
  local_430 = local_420;
  lVar8 = *(long *)(param_1 + 0x10);
  uVar3 = param_3 & 1 ^ 1;
  lVar9 = *(long *)(param_2 + 0x10);
  if (uVar3 == 0) {
    uVar28 = (ulong)*(uint *)(param_1 + 8);
    iVar33 = *(int *)(param_1 + 0xc);
    uVar12 = (ulong)(int)*(uint *)(param_1 + 8);
    if (0x108 < uVar12) {
      uVar19 = uVar12 << 2;
      if (0x1fc0000000000000 < uVar12) {
        uVar19 = 0xffffffffffffffff;
      }
      local_430 = operator_new__(uVar19);
    }
  }
  else {
    iVar33 = *(int *)(param_1 + 8);
    uVar28 = (ulong)*(uint *)(param_1 + 0xc);
  }
  if (0 < iVar33) {
    iVar27 = (int)uVar28;
    uVar5 = iVar27 - 1;
    uVar2 = iVar27 / 2;
    uVar29 = (ulong)uVar2;
    __n = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
    uVar12 = -(ulong)(iVar27 - 2U >> 0x1f) & 0xfffffffc00000000 | (ulong)(iVar27 - 2U) << 2;
    uVar28 = -(ulong)(iVar27 - 3U >> 0x1f) & 0xfffffffc00000000 | (ulong)(iVar27 - 3U) << 2;
    lVar30 = 0;
    uVar19 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
    do {
      if (uVar3 == 0) {
        __dest = local_430;
        if (0 < iVar27) {
          lVar10 = 0;
          lVar20 = **(long **)(param_1 + 0x48);
          piVar13 = (int *)(*(long *)(param_1 + 0x10) + lVar30 * 4);
          do {
            iVar7 = *piVar13;
            piVar13 = (int *)((long)piVar13 + lVar20);
            local_430[lVar10] = iVar7;
            lVar10 = lVar10 + 1;
          } while ((int)lVar10 < iVar27);
        }
      }
      else {
        __dest = (int *)(*(long *)(param_2 + 0x10) + lVar30 * **(long **)(param_2 + 0x48));
        if (lVar8 != lVar9) {
          memcpy(__dest,(void *)(*(long *)(param_1 + 0x10) + lVar30 * **(long **)(param_1 + 0x48)),
                 __n);
        }
      }
      piVar13 = (int *)((long)__dest + __n);
      if (__dest != piVar13) {
        FUN_0031ce80(__dest,piVar13,(0x3f - LZCOUNT((long)__n >> 2)) * 2);
        piVar26 = __dest + 1;
        if ((long)__n < 0x44) {
          for (; piVar13 != piVar26; piVar26 = piVar26 + 1) {
            iVar7 = *piVar26;
            if (iVar7 < *__dest) {
              sVar14 = (long)piVar26 - (long)__dest;
              if ((long)sVar14 >> 2 != 0) {
                memmove((void *)((long)piVar26 + (4 - sVar14)),__dest,sVar14);
              }
              *__dest = iVar7;
            }
            else {
              iVar18 = piVar26[-1];
              piVar25 = piVar26;
              if (iVar7 < iVar18) {
                do {
                  piVar17 = piVar25 + -1;
                  *piVar25 = iVar18;
                  iVar18 = piVar25[-2];
                  piVar25 = piVar17;
                } while (iVar7 < iVar18);
                *piVar17 = iVar7;
              }
              else {
                *piVar26 = iVar7;
              }
            }
          }
        }
        else {
          do {
            piVar25 = piVar26;
            iVar7 = *piVar25;
            if (iVar7 < *__dest) {
              sVar14 = (long)piVar25 - (long)__dest;
              if ((long)sVar14 >> 2 != 0) {
                memmove((void *)((long)piVar25 + (4 - sVar14)),__dest,sVar14);
              }
              *__dest = iVar7;
            }
            else {
              iVar18 = piVar25[-1];
              piVar26 = piVar25;
              if (iVar7 < iVar18) {
                do {
                  piVar17 = piVar26 + -1;
                  *piVar26 = iVar18;
                  iVar18 = piVar26[-2];
                  piVar26 = piVar17;
                } while (iVar7 < iVar18);
                *piVar17 = iVar7;
              }
              else {
                *piVar25 = iVar7;
              }
            }
            piVar26 = piVar25 + 1;
          } while (piVar26 != __dest + 0x10);
          if (piVar13 != piVar26) {
            iVar7 = *piVar25;
            iVar18 = *piVar26;
            if (iVar18 < iVar7) goto LAB_0031d694;
            do {
              *piVar26 = iVar18;
              while( true ) {
                piVar26 = piVar26 + 1;
                if (piVar13 == piVar26) goto LAB_0031d3a0;
                iVar7 = piVar26[-1];
                iVar18 = *piVar26;
                piVar25 = piVar26 + -1;
                if (iVar7 <= iVar18) break;
LAB_0031d694:
                do {
                  piVar17 = piVar25;
                  piVar17[1] = iVar7;
                  iVar7 = piVar17[-1];
                  piVar25 = piVar17 + -1;
                } while (iVar18 < iVar7);
                *piVar17 = iVar18;
              }
            } while( true );
          }
        }
      }
LAB_0031d3a0:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(__n + uVar29 * -4) < (long)(uVar29 * 4) && 0 < (long)__n) {
          lVar10 = 0;
          piVar13 = (int *)((long)__dest + uVar19);
          do {
            iVar7 = __dest[lVar10];
            __dest[lVar10] = *piVar13;
            lVar10 = lVar10 + 1;
            *piVar13 = iVar7;
            piVar13 = piVar13 + -1;
          } while ((int)lVar10 < (int)uVar2);
        }
        else {
          uVar1 = -((uint)((ulong)__dest >> 2) & 3) & 3;
          uVar16 = uVar29;
          if (uVar1 < uVar2) {
            uVar16 = (ulong)uVar1;
          }
          iVar7 = (int)uVar16;
          uVar21 = uVar16;
          if (iVar7 != 0) {
            iVar18 = *__dest;
            *__dest = *(int *)((long)__dest + uVar19);
            *(int *)((long)__dest + uVar19) = iVar18;
            if (iVar7 != 1) {
              iVar18 = __dest[1];
              __dest[1] = *(int *)((long)__dest + uVar12);
              *(int *)((long)__dest + uVar12) = iVar18;
              if (iVar7 == 3) {
                iVar18 = __dest[2];
                __dest[2] = *(int *)((long)__dest + uVar28);
                *(int *)((long)__dest + uVar28) = iVar18;
              }
              else {
                uVar21 = 2;
              }
            }
          }
          uVar1 = ((uVar2 - iVar7) - 4 >> 2) + 1;
          uVar23 = 0;
          pauVar15 = (undefined1 (*) [16])((long)__dest + (__n - 0xc) + ~uVar16 * 4);
          iVar18 = uVar1 * 4;
          pauVar11 = (undefined1 (*) [16])(__dest + uVar16);
          pauVar22 = pauVar15;
          pauVar24 = (undefined1 (*) [16])(__dest + uVar16);
          do {
            auVar6 = *pauVar15;
            uVar23 = uVar23 + 1;
            pauVar15 = pauVar15 + -1;
            auVar31._8_8_ = _UNK_0031d828;
            auVar31._0_8_ = _DAT_0031d820;
            auVar32 = a64_TBL(ZEXT816(0),auVar6,auVar31);
            auVar6._8_8_ = _UNK_0031d828;
            auVar6._0_8_ = _DAT_0031d820;
            auVar31 = a64_TBL(ZEXT816(0),*pauVar24,auVar6);
            *(long *)((long)*pauVar11 + 8) = auVar32._8_8_;
            *(long *)*pauVar11 = auVar32._0_8_;
            *(long *)(*pauVar22 + 8) = auVar31._8_8_;
            *(long *)*pauVar22 = auVar31._0_8_;
            pauVar22 = pauVar22 + -1;
            pauVar11 = pauVar11 + 1;
            pauVar24 = pauVar24 + 1;
          } while (uVar23 < uVar1);
          uVar1 = iVar18 + (int)uVar21;
          if (iVar18 != uVar2 - iVar7) {
            uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
            uVar4 = *(undefined4 *)((long)__dest + uVar16);
            uVar21 = -(ulong)(uVar5 - uVar1 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar5 - uVar1) << 2;
            *(undefined4 *)((long)__dest + uVar16) = *(undefined4 *)((long)__dest + uVar21);
            *(undefined4 *)((long)__dest + uVar21) = uVar4;
            if ((int)(uVar1 + 1) < (int)uVar2) {
              uVar23 = uVar5 - (uVar1 + 1);
              uVar21 = -(ulong)(uVar23 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar23 << 2;
              uVar4 = *(undefined4 *)((long)__dest + uVar16 + 4);
              *(undefined4 *)((long)__dest + uVar16 + 4) = *(undefined4 *)((long)__dest + uVar21);
              *(undefined4 *)((long)__dest + uVar21) = uVar4;
              if ((int)(uVar1 + 2) < (int)uVar2) {
                uVar1 = uVar5 - (uVar1 + 2);
                uVar4 = *(undefined4 *)((long)__dest + uVar16 + 8);
                uVar21 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
                *(undefined4 *)((long)__dest + uVar16 + 8) = *(undefined4 *)((long)__dest + uVar21);
                *(undefined4 *)((long)__dest + uVar21) = uVar4;
              }
            }
          }
        }
      }
      if ((uVar3 == 0) && (0 < iVar27)) {
        lVar10 = 0;
        lVar20 = **(long **)(param_2 + 0x48);
        piVar13 = (int *)(*(long *)(param_2 + 0x10) + lVar30 * 4);
        do {
          piVar26 = __dest + lVar10;
          lVar10 = lVar10 + 1;
          *piVar13 = *piVar26;
          piVar13 = (int *)((long)piVar13 + lVar20);
        } while ((int)lVar10 < iVar27);
      }
      lVar30 = lVar30 + 1;
    } while ((int)lVar30 < iVar33);
  }
  if ((local_430 != local_420) && (local_430 != (int *)0x0)) {
    operator_delete__(local_430);
  }
  return;
}


==================================================================

### FUNC 0031d830 (136 bytes) name=getStdAllocator

/* cv::Mat::getStdAllocator() */

undefined8 * cv::Mat::getStdAllocator(void)

{
  int iVar1;
  
  if (((DAT_00531ff0 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00531ff0), iVar1 != 0)) {
    DAT_00531fd8 = &PTR_FUN_004fc710;
    __cxa_guard_release(&DAT_00531ff0);
    __cxa_atexit(FUN_00307790,&DAT_00531fd8,&DAT_00502000);
    return &DAT_00531fd8;
  }
  return &DAT_00531fd8;
}


==================================================================

### FUNC 0031d8b8 (292 bytes) name=swap

/* cv::swap(cv::Mat&, cv::Mat&) */

void cv::swap(Mat *param_1,Mat *param_2)

{
  undefined4 uVar1;
  undefined8 uVar2;
  Mat *pMVar3;
  Mat *pMVar4;
  
  uVar1 = *(undefined4 *)param_1;
  *(undefined4 *)param_1 = *(undefined4 *)param_2;
  *(undefined4 *)param_2 = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 4);
  *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_2 + 4);
  *(undefined4 *)(param_2 + 4) = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 8);
  *(undefined4 *)(param_1 + 8) = *(undefined4 *)(param_2 + 8);
  *(undefined4 *)(param_2 + 8) = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 0xc);
  *(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
  *(undefined4 *)(param_2 + 0xc) = uVar1;
  uVar2 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
  *(undefined8 *)(param_2 + 0x10) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_2 + 0x18);
  *(undefined8 *)(param_2 + 0x18) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x20);
  *(undefined8 *)(param_1 + 0x20) = *(undefined8 *)(param_2 + 0x20);
  *(undefined8 *)(param_2 + 0x20) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x28);
  *(undefined8 *)(param_1 + 0x28) = *(undefined8 *)(param_2 + 0x28);
  *(undefined8 *)(param_2 + 0x28) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x30);
  *(undefined8 *)(param_1 + 0x30) = *(undefined8 *)(param_2 + 0x30);
  *(undefined8 *)(param_2 + 0x30) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x38);
  *(undefined8 *)(param_1 + 0x38) = *(undefined8 *)(param_2 + 0x38);
  *(undefined8 *)(param_2 + 0x38) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x40);
  *(undefined8 *)(param_1 + 0x40) = *(undefined8 *)(param_2 + 0x40);
  *(undefined8 *)(param_2 + 0x40) = uVar2;
  pMVar3 = *(Mat **)(param_1 + 0x48);
  *(undefined8 *)(param_1 + 0x48) = *(undefined8 *)(param_2 + 0x48);
  *(Mat **)(param_2 + 0x48) = pMVar3;
  uVar2 = *(undefined8 *)(param_1 + 0x50);
  *(undefined8 *)(param_1 + 0x50) = *(undefined8 *)(param_2 + 0x50);
  *(undefined8 *)(param_2 + 0x50) = uVar2;
  pMVar4 = *(Mat **)(param_1 + 0x48);
  uVar2 = *(undefined8 *)(param_1 + 0x58);
  *(undefined8 *)(param_1 + 0x58) = *(undefined8 *)(param_2 + 0x58);
  *(undefined8 *)(param_2 + 0x58) = uVar2;
  if (pMVar4 == param_2 + 0x50) {
    *(Mat **)(param_1 + 0x48) = param_1 + 0x50;
    *(Mat **)(param_1 + 0x40) = param_1 + 8;
    pMVar3 = *(Mat **)(param_2 + 0x48);
  }
  if (pMVar3 != param_1 + 0x50) {
    return;
  }
  *(Mat **)(param_2 + 0x48) = param_2 + 0x50;
  *(Mat **)(param_2 + 0x40) = param_2 + 8;
  return;
}


==================================================================

### FUNC 0031d9dc (332 bytes) name=copySize

/* cv::Mat::copySize(cv::Mat const&) */

void __thiscall cv::Mat::copySize(Mat *this,Mat *param_1)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  long lVar7;
  char *pcVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar1 = *(uint *)(param_1 + 4);
  if (0x20 < uVar1) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_10,0x21);
    uVar6 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar5 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar4 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar3 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar8[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar8 = uVar3;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    *(undefined8 *)(pcVar8 + 0x10) = uVar5;
    *(undefined8 *)(pcVar8 + 0x18) = uVar6;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10a);
    String::deallocate((String *)&local_10);
  }
  if (uVar1 != *(uint *)(this + 4)) {
    if (*(Mat **)(this + 0x48) != this + 0x50) {
      fastFree(*(Mat **)(this + 0x48));
      *(Mat **)(this + 0x48) = this + 0x50;
      *(Mat **)(this + 0x40) = this + 8;
    }
    if (2 < (int)uVar1) {
      uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      lVar10 = fastMalloc(uVar14 + (long)(int)(uVar1 + 1) * 4);
      *(long *)(this + 0x48) = lVar10;
      lVar10 = lVar10 + uVar14 + 4;
      *(long *)(this + 0x40) = lVar10;
      *(uint *)(lVar10 + -4) = uVar1;
      *(undefined4 *)(this + 0xc) = 0xffffffff;
      *(undefined4 *)(this + 8) = 0xffffffff;
    }
  }
  *(uint *)(this + 4) = uVar1;
  if (0 < (int)uVar1) {
    lVar13 = *(long *)(this + 0x48);
    lVar10 = 0;
    lVar12 = *(long *)(param_1 + 0x48);
    lVar11 = *(long *)(this + 0x40);
    lVar7 = *(long *)(param_1 + 0x40);
    do {
      iVar9 = (int)lVar10;
      *(undefined4 *)(lVar11 + lVar10 * 4) = *(undefined4 *)(lVar7 + lVar10 * 4);
      iVar2 = *(int *)(this + 4);
      *(undefined8 *)(lVar13 + lVar10 * 8) = *(undefined8 *)(lVar12 + lVar10 * 8);
      lVar10 = lVar10 + 1;
    } while (iVar9 + 1 < iVar2);
  }
  return;
}


==================================================================

### FUNC 0031db3c (444 bytes) name=deallocate

/* cv::Mat::deallocate() */

void __thiscall cv::Mat::deallocate(Mat *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char *pcVar4;
  long *plVar5;
  code *pcVar6;
  long lVar7;
  UMatData *this_00;
  long local_10;
  long local_8;
  
  this_00 = *(UMatData **)(this + 0x38);
  if (this_00 != (UMatData *)0x0) {
    plVar5 = *(long **)(this_00 + 8);
    if ((plVar5 == (long *)0x0) && (plVar5 = *(long **)(this + 0x30), plVar5 == (long *)0x0)) {
      plVar5 = (long *)getStdAllocator();
      this_00 = *(UMatData **)(this + 0x38);
    }
    pcVar6 = *(code **)(*plVar5 + 0x30);
    if (pcVar6 != MatAllocator::unmap) {
      (*pcVar6)(plVar5,this_00);
      *(undefined8 *)(this + 0x38) = 0;
      return;
    }
    lVar7 = *(long *)(this_00 + 0x10);
    if (lVar7 == 0) {
      pcVar6 = *(code **)(*plVar5 + 0x20);
      if (pcVar6 == FUN_00309fdc) {
        if (*(int *)(this_00 + 0x10) < 0) {
          local_10 = lVar7;
          local_8 = lVar7;
          pcVar4 = (char *)String::allocate((String *)&local_10,0x11);
          uVar3 = s_u_>urefcount_>__0_0046ac38._8_8_;
          uVar2 = s_u_>urefcount_>__0_0046ac38._0_8_;
          pcVar4[0x10] = s_u_>urefcount_>__0_0046ac38[0x10];
          *(undefined8 *)pcVar4 = uVar2;
          *(undefined8 *)(pcVar4 + 8) = uVar3;
          error(-0xd7,(String *)&local_10,
                "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd3);
          String::deallocate((String *)&local_10);
        }
        iVar1 = *(int *)(this_00 + 0x14);
        if (iVar1 < 0) {
          local_10 = 0;
          local_8 = 0;
          pcVar4 = (char *)String::allocate((String *)&local_10,0x10);
          uVar2 = s_u_>refcount_>__0_0046ac50._8_8_;
          *(undefined8 *)pcVar4 = s_u_>refcount_>__0_0046ac50._0_8_;
          *(undefined8 *)(pcVar4 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,
                "virtual void cv::StdMatAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xd4);
          String::deallocate((String *)&local_10);
          iVar1 = *(int *)(this_00 + 0x14);
        }
        if (iVar1 == 0) {
          if ((*(uint *)(this_00 + 0x30) >> 5 & 1) == 0) {
            fastFree(*(void **)(this_00 + 0x20));
            *(undefined8 *)(this_00 + 0x20) = 0;
          }
          UMatData::~UMatData(this_00);
          operator_delete(this_00);
          *(undefined8 *)(this + 0x38) = 0;
          return;
        }
      }
      else {
        (*pcVar6)(plVar5,this_00);
      }
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  return;
}


==================================================================

### FUNC 0031dd20 (2124 bytes) name=create

/* cv::Mat::create(int, int const*, int) */

void __thiscall cv::Mat::create(Mat *this,int param_1,int *param_2,int param_3)

{
  ulong *puVar1;
  long *plVar2;
  uint uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  int iVar7;
  uint uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  int iVar13;
  long lVar14;
  undefined4 *puVar15;
  int *piVar16;
  MatAllocator *pMVar17;
  undefined8 uVar18;
  UMatData *this_00;
  char *pcVar19;
  int *piVar20;
  ulong uVar21;
  int iVar22;
  long lVar23;
  int *piVar24;
  long *plVar25;
  long lVar26;
  long lVar27;
  ulong uVar28;
  long lVar29;
  MatAllocator *pMVar30;
  long lVar31;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((0x20U < (uint)param_1) || (param_2 == (int *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_10,0x23);
    cVar5 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90[0x22];
    uVar11 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._24_8_;
    uVar10 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._16_8_;
    uVar9 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._8_8_;
    uVar18 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._0_8_;
    *(undefined2 *)(pcVar19 + 0x20) = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._32_2_;
    pcVar19[0x22] = cVar5;
    *(undefined8 *)pcVar19 = uVar18;
    *(undefined8 *)(pcVar19 + 8) = uVar9;
    *(undefined8 *)(pcVar19 + 0x10) = uVar10;
    *(undefined8 *)(pcVar19 + 0x18) = uVar11;
    error(-0xd7,(String *)&local_10,"void cv::Mat::create(int, const int*, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x175);
    String::deallocate((String *)&local_10);
  }
  uVar3 = param_3 & 0xfff;
  if ((*(long *)(this + 0x10) != 0) &&
     (((*(int *)(this + 4) == param_1 || ((param_1 == 1 && (*(int *)(this + 4) < 3)))) &&
      ((*(uint *)this & 0xfff) == uVar3)))) {
    if (param_1 == 2) {
      iVar22 = *param_2;
      if ((*(int *)(this + 8) == iVar22) && (*(int *)(this + 0xc) == param_2[1])) {
        return;
      }
    }
    else {
      if (param_1 < 1) {
        if (param_1 == 0) {
          piVar16 = *(int **)(this + 0x40);
                    /* try { // try from 0031e4b8 to 0041e4bb has its CatchHandler @ 0031b320 */
LAB_0031dfd8:
          if (piVar16[1] == 1) {
            return;
          }
        }
        goto LAB_0031dda8;
      }
      iVar22 = *param_2;
    }
    piVar16 = *(int **)(this + 0x40);
    if (*piVar16 == iVar22) {
      iVar22 = 0;
      piVar20 = param_2;
      piVar24 = piVar16;
      do {
        piVar24 = piVar24 + 1;
        piVar20 = piVar20 + 1;
        iVar22 = iVar22 + 1;
        if (param_1 <= iVar22) {
          if (param_1 == iVar22) {
            if (param_1 != 1) {
              return;
            }
            goto LAB_0031dfd8;
          }
          break;
        }
      } while (*piVar24 == *piVar20);
    }
  }
LAB_0031dda8:
  if (*(long *)(this + 0x38) != 0) {
    piVar16 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar22 = *piVar16;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar6) {
        *piVar16 = iVar22 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar22 == 1) {
      deallocate(this);
    }
  }
  iVar22 = *(int *)(this + 4);
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (0 < iVar22) {
    iVar13 = 0;
    puVar15 = *(undefined4 **)(this + 0x40);
    do {
      *puVar15 = 0;
      iVar13 = iVar13 + 1;
      iVar22 = *(int *)(this + 4);
      puVar15 = puVar15 + 1;
    } while (iVar13 < iVar22);
  }
  if (param_1 == 0) {
    return;
  }
  *(uint *)this = uVar3 | 0x42ff0000;
  if (0x20U < (uint)param_1) {
    local_10 = 0;
    local_8 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_10,0x21);
    uVar11 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar10 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar9 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar18 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar19[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar19 = uVar18;
    *(undefined8 *)(pcVar19 + 8) = uVar9;
    *(undefined8 *)(pcVar19 + 0x10) = uVar10;
    *(undefined8 *)(pcVar19 + 0x18) = uVar11;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10a);
    String::deallocate((String *)&local_10);
    iVar22 = *(int *)(this + 4);
  }
  if (param_1 == iVar22) {
LAB_0031de78:
    *(int *)(this + 4) = param_1;
    if (param_2 == (int *)0x0) {
LAB_0031e064:
      if (2 < param_1) goto LAB_0031e06c;
    }
    else {
LAB_0031de80:
      uVar8 = param_1 - 1;
      lVar14 = (long)(int)((*(uint *)this >> 3 & 0x1ff) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3));
      if (-1 < (int)uVar8) {
        lVar26 = (long)(int)uVar8;
        lVar29 = lVar26 << 2;
        lVar27 = lVar26 << 3;
        lVar31 = lVar14;
        do {
          iVar22 = *(int *)((long)param_2 + lVar29);
          if (iVar22 < 0) {
            local_10 = 0;
            local_8 = 0;
            puVar15 = (undefined4 *)String::allocate((String *)&local_10,6);
            uVar12 = DAT_0046acbc;
            *puVar15 = DAT_0046acb8;
            *(undefined2 *)(puVar15 + 1) = uVar12;
            error(-0xd7,(String *)&local_10,
                  "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x125);
            String::deallocate((String *)&local_10);
          }
          lVar23 = *(long *)(this + 0x48);
          *(int *)(*(long *)(this + 0x40) + lVar29) = iVar22;
          lVar29 = lVar29 + -4;
          *(long *)(lVar23 + lVar27) = lVar31;
          lVar27 = lVar27 + -8;
          lVar31 = iVar22 * lVar31;
        } while (lVar27 != (lVar26 - (ulong)uVar8) * 8 + -8);
      }
      if (param_1 != 1) {
        param_1 = *(int *)(this + 4);
        goto LAB_0031e064;
      }
      *(undefined4 *)(this + 0xc) = 1;
      *(undefined4 *)(this + 4) = 2;
      *(long *)(*(long *)(this + 0x48) + 8) = lVar14;
    }
    lVar14 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
  }
  else {
    if (*(Mat **)(this + 0x48) != this + 0x50) {
      fastFree(*(Mat **)(this + 0x48));
      *(Mat **)(this + 0x48) = this + 0x50;
      *(Mat **)(this + 0x40) = this + 8;
    }
    if (param_1 < 3) goto LAB_0031de78;
    uVar28 = -(ulong)((uint)param_1 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)param_1 << 3;
    lVar14 = fastMalloc(uVar28 + (long)(param_1 + 1) * 4);
    *(long *)(this + 0x48) = lVar14;
    lVar14 = lVar14 + uVar28 + 4;
    *(long *)(this + 0x40) = lVar14;
    *(int *)(lVar14 + -4) = param_1;
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
    *(int *)(this + 4) = param_1;
    if (param_2 != (int *)0x0) goto LAB_0031de80;
LAB_0031e06c:
    lVar31 = 0;
    lVar14 = 1;
    do {
      lVar26 = lVar31 * 4;
      lVar31 = lVar31 + 1;
      lVar14 = lVar14 * *(int *)(*(long *)(this + 0x40) + lVar26);
    } while ((int)lVar31 < param_1);
  }
  if (lVar14 != 0) {
    pMVar30 = *(MatAllocator **)(this + 0x30);
    pMVar17 = (MatAllocator *)getStdAllocator();
    lVar14 = *(long *)(this + 0x40);
    if (pMVar30 == (MatAllocator *)0x0) {
      pMVar30 = pMVar17;
    }
    lVar31 = *(long *)(this + 0x48);
    if (*(code **)(*(long *)pMVar30 + 0x10) == FUN_0030779c) {
      uVar3 = *(int *)(this + 4) - 1;
      uVar28 = (ulong)(int)(((uint)param_3 >> 3 & 0x1ff) + 1 <<
                           (ulong)((uint)(0xfa50L >> ((param_3 & 7U) << 1)) & 3));
      if (-1 < (int)uVar3) {
        lVar26 = (long)(int)uVar3;
        if (lVar31 == 0) {
          piVar16 = (int *)(lVar14 + lVar26 * 4);
          do {
            piVar20 = piVar16 + -1;
            uVar28 = uVar28 * (long)*piVar16;
            piVar16 = piVar20;
          } while (piVar20 != (int *)(lVar14 + (lVar26 - (ulong)uVar3) * 4 + -4));
        }
        else {
          uVar21 = 0;
          do {
            lVar27 = uVar21 * 2;
            iVar22 = *(int *)(lVar14 + lVar26 * 4 + uVar21);
            uVar21 = uVar21 - 4;
            *(ulong *)(lVar31 + lVar26 * 8 + lVar27) = uVar28;
            uVar28 = uVar28 * (long)iVar22;
          } while (uVar21 != ((ulong)uVar3 << 2 ^ 0xfffffffffffffffc));
        }
      }
      uVar18 = fastMalloc(uVar28);
      this_00 = operator_new(0x50);
      UMatData::UMatData(this_00,pMVar30);
      *(undefined8 *)(this_00 + 0x20) = uVar18;
      *(undefined8 *)(this_00 + 0x18) = uVar18;
      *(ulong *)(this_00 + 0x28) = uVar28;
      *(UMatData **)(this + 0x38) = this_00;
    }
    else {
                    /* catch() { ... } // from try @ 0031c84c with catch @ 0031e4c4 */
                    /* catch() { ... } // from try @ 0031b3b4 with catch @ 0031e4d4
                       catch() { ... } // from try @ 0031b4f4 with catch @ 0031e4d4 */
      lVar14 = (**(code **)(*(long *)pMVar30 + 0x10))
                         (pMVar30,*(int *)(this + 4),lVar14,uVar3,0,lVar31,0,0);
                    /* catch() { ... } // from try @ 0031c784 with catch @ 0031e4dc */
      *(long *)(this + 0x38) = lVar14;
      if (lVar14 == 0) {
        local_20 = lVar14;
        local_18 = lVar14;
                    /* catch() { ... } // from try @ 0031b608 with catch @ 0031e4ec */
        puVar15 = (undefined4 *)String::allocate((String *)&local_20,6);
        uVar12 = DAT_0046acc4;
        *puVar15 = DAT_0046acc0;
        *(undefined2 *)(puVar15 + 1) = uVar12;
        error(-0xd7,(String *)&local_20,"void cv::Mat::create(int, const int*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x195);
        String::deallocate((String *)&local_20);
      }
    }
    if (*(long *)(*(long *)(this + 0x48) + (long)(*(int *)(this + 4) + -1) * 8) !=
        (long)(int)((*(uint *)this >> 3 & 0x1ff) + 1 <<
                   (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3))) {
      local_10 = 0;
      local_8 = 0;
      pcVar19 = (char *)String::allocate((String *)&local_10,0x2b);
      cVar5 = s_step_dims_1______size_t_CV_ELEM__0046acc8[0x2a];
      uVar12 = s_step_dims_1______size_t_CV_ELEM__0046acc8._40_2_;
      uVar11 = s_step_dims_1______size_t_CV_ELEM__0046acc8._24_8_;
      uVar10 = s_step_dims_1______size_t_CV_ELEM__0046acc8._16_8_;
      uVar9 = s_step_dims_1______size_t_CV_ELEM__0046acc8._8_8_;
      uVar18 = s_step_dims_1______size_t_CV_ELEM__0046acc8._0_8_;
                    /* catch() { ... } // from try @ 0031b5b8 with catch @ 0031e470 */
      *(undefined8 *)(pcVar19 + 0x20) = s_step_dims_1______size_t_CV_ELEM__0046acc8._32_8_;
      *(undefined2 *)(pcVar19 + 0x28) = uVar12;
      pcVar19[0x2a] = cVar5;
      *(undefined8 *)pcVar19 = uVar18;
      *(undefined8 *)(pcVar19 + 8) = uVar9;
      *(undefined8 *)(pcVar19 + 0x10) = uVar10;
      *(undefined8 *)(pcVar19 + 0x18) = uVar11;
      error(-0xd7,(String *)&local_10,"void cv::Mat::create(int, const int*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x19d);
      String::deallocate((String *)&local_10);
    }
  }
  lVar14 = 0;
  if (*(long *)(this + 0x38) != 0) {
    piVar16 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar16,0x10);
      if (bVar6) {
        *piVar16 = *piVar16 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    lVar14 = *(long *)(this + 0x38);
  }
  iVar22 = *(int *)(this + 4);
  if ((iVar22 < 1) || (piVar16 = *(int **)(this + 0x40), 1 < *piVar16)) {
                    /* catch() { ... } // from try @ 0031b570 with catch @ 0031e4bc
                       catch() { ... } // from try @ 0031b5c0 with catch @ 0031e4bc
                       catch() { ... } // from try @ 0031b610 with catch @ 0031e4bc
                       catch() { ... } // from try @ 0031c78c with catch @ 0031e4bc */
    iVar13 = 0;
  }
  else {
    iVar13 = 0;
    do {
      piVar16 = piVar16 + 1;
      iVar13 = iVar13 + 1;
      if (iVar13 == iVar22) break;
    } while (*piVar16 < 2);
  }
  iVar7 = iVar22 + -1;
  if (iVar13 < iVar7) {
    lVar26 = *(long *)(this + 0x48);
    lVar27 = (long)iVar7 * 8;
    lVar31 = (long)iVar7 * 4;
    lVar29 = lVar27 + -8;
    if (*(ulong *)(lVar26 + lVar29) <=
        (ulong)((long)*(int *)(*(long *)(this + 0x40) + lVar31) * *(long *)(lVar26 + lVar27))) {
      plVar25 = (long *)(lVar26 + lVar29);
      piVar16 = (int *)(*(long *)(this + 0x40) + lVar31 + -4);
      do {
        if (plVar25 ==
            (long *)(lVar26 + ((long)(iVar22 + -2) - (ulong)(uint)((iVar22 + -2) - iVar13)) * 8))
        goto LAB_0031e174;
        iVar4 = *piVar16;
        lVar31 = *plVar25;
        puVar1 = (ulong *)(plVar25 + -1);
        plVar25 = plVar25 + -1;
        piVar16 = piVar16 + -1;
      } while (*puVar1 <= (ulong)(iVar4 * lVar31));
    }
    *(uint *)this = *(uint *)this & 0xffffbfff;
  }
  else {
LAB_0031e174:
    *(uint *)this = *(uint *)this | 0x4000;
  }
  if (2 < iVar22) {
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
  }
  if (lVar14 == 0) {
    lVar14 = *(long *)(this + 0x10);
  }
  else {
    lVar14 = *(long *)(lVar14 + 0x18);
    *(long *)(this + 0x10) = lVar14;
    *(long *)(this + 0x18) = lVar14;
  }
  if (lVar14 == 0) {
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x20) = 0;
  }
  else {
    piVar16 = *(int **)(this + 0x40);
    plVar25 = *(long **)(this + 0x48);
    iVar22 = *piVar16;
    lVar31 = *(long *)(this + 0x18) + (long)iVar22 * *plVar25;
    *(long *)(this + 0x28) = lVar31;
    if (iVar22 < 1) {
      *(long *)(this + 0x20) = lVar31;
    }
    else {
      lVar14 = lVar14 + (long)piVar16[iVar7] * plVar25[iVar7];
      *(long *)(this + 0x20) = lVar14;
      if (0 < iVar7) {
        lVar31 = 0;
        do {
          piVar20 = piVar16 + lVar31;
          plVar2 = plVar25 + lVar31;
          lVar31 = lVar31 + 1;
          lVar14 = lVar14 + (long)(*piVar20 + -1) * *plVar2;
        } while ((int)lVar31 < iVar7);
        *(long *)(this + 0x20) = lVar14;
      }
    }
  }
  return;
}


==================================================================

### FUNC 0031e6b0 (800 bytes) name=Mat

/* cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&) */

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Rect_ *param_2)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined2 uVar7;
  uint uVar8;
  uint uVar9;
  void *__dest;
  undefined8 *puVar10;
  char *pcVar11;
  int iVar12;
  undefined4 *puVar13;
  long lVar14;
  undefined8 *puVar15;
  int iVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  long lVar22;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = *(int *)(param_2 + 4);
  uVar9 = *(uint *)param_1;
  lVar22 = **(long **)(param_1 + 0x48);
  lVar14 = *(long *)(param_1 + 0x10);
  *(undefined4 *)(this + 4) = 2;
  iVar16 = *(int *)(param_2 + 0xc);
  iVar2 = *(int *)(param_1 + 4);
  iVar12 = *(int *)(param_2 + 8);
  uVar21 = *(undefined8 *)(param_1 + 0x18);
  uVar20 = *(undefined8 *)(param_1 + 0x20);
  uVar19 = *(undefined8 *)(param_1 + 0x28);
  uVar18 = *(undefined8 *)(param_1 + 0x30);
  uVar17 = *(undefined8 *)(param_1 + 0x38);
  lVar14 = lVar14 + iVar3 * lVar22;
  *(uint *)this = uVar9;
  *(int *)(this + 8) = iVar16;
  *(int *)(this + 0xc) = iVar12;
  *(long *)(this + 0x10) = lVar14;
  *(undefined8 *)(this + 0x18) = uVar21;
  *(undefined8 *)(this + 0x20) = uVar20;
  *(undefined8 *)(this + 0x28) = uVar19;
  *(undefined8 *)(this + 0x30) = uVar18;
  *(undefined8 *)(this + 0x38) = uVar17;
  *(Mat **)(this + 0x40) = this + 8;
  *(Mat **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  if (2 < iVar2) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)String::allocate((String *)&local_10,0xb);
    cVar5 = s_m_dims_<__2_0046acf8[10];
    uVar7 = s_m_dims_<__2_0046acf8._8_2_;
    *(undefined8 *)pcVar11 = s_m_dims_<__2_0046acf8._0_8_;
    *(undefined2 *)(pcVar11 + 8) = uVar7;
    pcVar11[10] = cVar5;
    error(-0xd7,(String *)&local_10,"cv::Mat::Mat(const cv::Mat&, const Rect&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1e8);
    String::deallocate((String *)&local_10);
    uVar9 = *(uint *)this;
    iVar12 = *(int *)(param_2 + 8);
    iVar16 = *(int *)(param_2 + 0xc);
    lVar14 = *(long *)(this + 0x10);
  }
  iVar2 = *(int *)(param_1 + 0xc);
  iVar3 = *(int *)param_2;
  uVar8 = 0xffffbfff;
  if (iVar2 <= iVar12) {
    uVar8 = 0xffffffff;
  }
  uVar8 = uVar8 & uVar9;
  uVar9 = 0x4000;
  if (iVar16 != 1) {
    uVar9 = 0;
  }
  *(uint *)this = uVar9 | uVar8;
  iVar4 = ((uVar8 & 0xff8) >> 3) + 1 << (ulong)((uint)(0xfa50L >> ((uVar8 & 7) << 1)) & 3);
  *(long *)(this + 0x10) = lVar14 + (long)iVar4 * (long)iVar3;
  if (((((iVar12 < 0) || (iVar3 < 0)) || (iVar2 < iVar3 + iVar12)) ||
      ((iVar16 < 0 || (*(int *)(param_2 + 4) < 0)))) ||
     (*(int *)(param_1 + 8) < *(int *)(param_2 + 4) + iVar16)) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)String::allocate((String *)&local_10,0x7c);
    memcpy(__dest,
           "0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows"
           ,0x7c);
    error(-0xd7,(String *)&local_10,"cv::Mat::Mat(const cv::Mat&, const Rect&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1ef);
    String::deallocate((String *)&local_10);
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = *piVar1 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  if ((*(int *)(param_2 + 8) < *(int *)(param_1 + 0xc)) ||
     (*(int *)(param_2 + 0xc) < *(int *)(param_1 + 8))) {
    puVar15 = *(undefined8 **)(param_1 + 0x48);
    *(uint *)this = *(uint *)this | 0x8000;
    puVar10 = *(undefined8 **)(this + 0x48);
    iVar16 = *(int *)(this + 8);
    *puVar10 = *puVar15;
    puVar10[1] = (long)iVar4;
    uVar17 = s_m_dims_<__2_0046acf8._0_8_;
    uVar7 = s_m_dims_<__2_0046acf8._8_2_;
  }
  else {
    puVar10 = *(undefined8 **)(this + 0x48);
    iVar16 = *(int *)(this + 8);
    *puVar10 = **(undefined8 **)(param_1 + 0x48);
    puVar10[1] = (long)iVar4;
    uVar17 = s_m_dims_<__2_0046acf8._0_8_;
    uVar7 = s_m_dims_<__2_0046acf8._8_2_;
  }
  if (0 < iVar16) {
    s_m_dims_<__2_0046acf8[0] = (char)uVar17;
    s_m_dims_<__2_0046acf8[1] = SUB81(uVar17,1);
    s_m_dims_<__2_0046acf8[2] = SUB81(uVar17,2);
    s_m_dims_<__2_0046acf8[3] = SUB81(uVar17,3);
    s_m_dims_<__2_0046acf8[4] = SUB81(uVar17,4);
    s_m_dims_<__2_0046acf8[5] = SUB81(uVar17,5);
    s_m_dims_<__2_0046acf8[6] = SUB81(uVar17,6);
    s_m_dims_<__2_0046acf8[7] = SUB81(uVar17,7);
    s_m_dims_<__2_0046acf8[8] = (char)uVar7;
    s_m_dims_<__2_0046acf8[9] = SUB21(uVar7,1);
    if (0 < *(int *)(this + 0xc)) {
      return;
    }
  }
  s_m_dims_<__2_0046acf8._0_8_ = uVar17;
  s_m_dims_<__2_0046acf8._8_2_ = uVar7;
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar16 = *piVar1;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar6) {
        *piVar1 = iVar16 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar16 == 1) {
      deallocate(this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (0 < *(int *)(this + 4)) {
    iVar16 = 0;
    puVar13 = *(undefined4 **)(this + 0x40);
    do {
      *puVar13 = 0;
      iVar16 = iVar16 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar16 < *(int *)(this + 4));
  }
  *(undefined4 *)(this + 0xc) = 0;
  *(undefined4 *)(this + 8) = 0;
  return;
}


==================================================================

### FUNC 0031e9f8 (1348 bytes) name=Mat

/* cv::Mat::Mat(int, int const*, int, void*, unsigned long const*) */

void __thiscall
cv::Mat::Mat(Mat *this,int param_1,int *param_2,int param_3,void *param_4,ulong *param_5)

{
  ulong *puVar1;
  int *piVar2;
  long *plVar3;
  Mat *pMVar4;
  int iVar5;
  ulong uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined2 uVar10;
  char cVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  int iVar15;
  long lVar16;
  long lVar17;
  char *pcVar18;
  undefined4 *puVar19;
  long lVar20;
  int *piVar21;
  int iVar22;
  long *plVar23;
  uint uVar24;
  long lVar25;
  long lVar26;
  ulong uVar27;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 0031eb10 with catch @ 0031ea00
                       catch() { ... } // from try @ 0031eb70 with catch @ 0031ea00 */
  pMVar4 = this + 0x50;
  *(undefined4 *)(this + 4) = 0;
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 0xc) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  iVar14 = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(Mat **)(this + 0x40) = this + 8;
  *(Mat **)(this + 0x48) = pMVar4;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(uint *)this = param_3 & 0xfffU | 0x42ff0000;
  *(void **)(this + 0x10) = param_4;
  *(void **)(this + 0x18) = param_4;
  if (0x20 < (uint)param_1) {
    local_10 = 0;
    local_8 = 0;
    pcVar18 = (char *)String::allocate((String *)&local_10,0x21);
    uVar13 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar12 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar8 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar7 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar18[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar18 = uVar7;
    *(undefined8 *)(pcVar18 + 8) = uVar8;
    *(undefined8 *)(pcVar18 + 0x10) = uVar12;
    *(undefined8 *)(pcVar18 + 0x18) = uVar13;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10a);
    String::deallocate((String *)&local_10);
    iVar14 = *(int *)(this + 4);
  }
                    /* try { // try from 0031ea90 to 0041ea93 has its CatchHandler @ 0031eb40 */
  if (param_1 == iVar14) {
LAB_0031eab8:
    *(int *)(this + 4) = param_1;
    if (param_2 != (int *)0x0) goto LAB_0031eac4;
LAB_0031ef04:
    uVar24 = *(uint *)this;
LAB_0031ebb0:
    iVar14 = param_1 + -1;
                    /* try { // try from 0031ebb4 to 0041ebd3 has its CatchHandler @ 0031eb80 */
    if ((param_1 < 1) || (piVar21 = *(int **)(this + 0x40), iVar22 = param_1, 1 < *piVar21)) {
      iVar22 = 0;
    }
    else {
LAB_0031ebcc:
      param_1 = iVar22;
      iVar15 = 0;
      do {
        piVar21 = piVar21 + 1;
        iVar15 = iVar15 + 1;
        iVar22 = param_1;
        if (iVar15 == param_1) break;
        iVar22 = iVar15;
      } while (*piVar21 < 2);
    }
    if (iVar14 <= iVar22) {
LAB_0031ec60:
      *(uint *)this = uVar24 | 0x4000;
      goto LAB_0031ec68;
    }
    lVar20 = *(long *)(this + 0x48);
    piVar21 = *(int **)(this + 0x40);
  }
  else {
    if (pMVar4 != *(Mat **)(this + 0x48)) {
      fastFree(*(Mat **)(this + 0x48));
      *(Mat **)(this + 0x48) = pMVar4;
      *(Mat **)(this + 0x40) = this + 8;
    }
    if (param_1 < 3) goto LAB_0031eab8;
    uVar27 = -(ulong)((uint)param_1 >> 0x1f) & 0xfffffff800000000 | (ulong)(uint)param_1 << 3;
    lVar16 = fastMalloc(uVar27 + (long)(param_1 + 1) * 4);
    *(long *)(this + 0x48) = lVar16;
    lVar16 = lVar16 + uVar27 + 4;
    *(long *)(this + 0x40) = lVar16;
    *(int *)(lVar16 + -4) = param_1;
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
    *(int *)(this + 4) = param_1;
    if (param_2 == (int *)0x0) goto LAB_0031ef04;
LAB_0031eac4:
    uVar24 = *(uint *)this;
    iVar14 = param_1 + -1;
    uVar27 = 0x88442211UL >> ((uVar24 & 7) << 2) & 0xf;
    lVar16 = (long)(int)((uVar24 >> 3 & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> ((uVar24 & 7) << 1)) & 3));
                    /* try { // try from 0031eb08 to 0041eb0b has its CatchHandler @ 0031eb74 */
    if (-1 < iVar14) {
                    /* try { // try from 0031eb10 to 0041eb13 has its CatchHandler @ 0031ea00 */
      lVar25 = (long)iVar14 << 3;
                    /* try { // try from 0031eb2c to 0041eb2f has its CatchHandler @ 0031eb74 */
      lVar26 = (long)iVar14 << 2;
                    /* try { // try from 0031eb38 to 0041eb3b has its CatchHandler @ 0031eb40 */
                    /* catch() { ... } // from try @ 0031ea90 with catch @ 0031eb40
                       catch() { ... } // from try @ 0031eb38 with catch @ 0031eb40 */
      lVar20 = lVar16;
      iVar22 = iVar14;
      do {
        iVar15 = *(int *)((long)param_2 + lVar26);
        if (iVar15 < 0) {
          local_10 = 0;
          local_8 = 0;
          puVar19 = (undefined4 *)String::allocate((String *)&local_10,6);
          uVar10 = DAT_0046acbc;
          *puVar19 = DAT_0046acb8;
          *(undefined2 *)(puVar19 + 1) = uVar10;
          error(-0xd7,(String *)&local_10,
                "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x125);
          String::deallocate((String *)&local_10);
        }
        *(int *)(*(long *)(this + 0x40) + lVar26) = iVar15;
        if (param_5 == (ulong *)0x0) {
          *(long *)(*(long *)(this + 0x48) + lVar25) = lVar20;
          lVar20 = iVar15 * lVar20;
        }
        else {
          uVar6 = 0;
          if (uVar27 != 0) {
            uVar6 = *(ulong *)((long)param_5 + lVar25) / uVar27;
          }
          if (*(ulong *)((long)param_5 + lVar25) != uVar6 * uVar27) {
            local_10 = 0;
            local_8 = 0;
            pcVar18 = (char *)String::allocate((String *)&local_10,0x1f);
            cVar11 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
            uVar10 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
            uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
            uVar8 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
            uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
            *(undefined8 *)(pcVar18 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
            *(undefined4 *)(pcVar18 + 0x18) = uVar9;
            *(undefined2 *)(pcVar18 + 0x1c) = uVar10;
            pcVar18[0x1e] = cVar11;
            *(undefined8 *)pcVar18 = uVar7;
            *(undefined8 *)(pcVar18 + 8) = uVar8;
            error(-0xd,(String *)&local_10,
                  "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",300);
            String::deallocate((String *)&local_10);
          }
                    /* try { // try from 0031eb70 to 0041eb73 has its CatchHandler @ 0031ea00 */
                    /* catch() { ... } // from try @ 0031eb08 with catch @ 0031eb74
                       catch() { ... } // from try @ 0031eb2c with catch @ 0031eb74 */
          lVar17 = lVar16;
          if (iVar22 < iVar14) {
            lVar17 = *(long *)((long)param_5 + lVar25);
          }
                    /* catch() { ... } // from try @ 0031ebb4 with catch @ 0031eb80
                       catch() { ... } // from try @ 0031f338 with catch @ 0031eb80
                       catch() { ... } // from try @ 0031fc58 with catch @ 0031eb80
                       catch() { ... } // from try @ 0031feb8 with catch @ 0031eb80 */
          *(long *)(*(long *)(this + 0x48) + lVar25) = lVar17;
        }
        iVar22 = iVar22 + -1;
        lVar25 = lVar25 + -8;
        lVar26 = lVar26 + -4;
      } while (iVar22 != -1);
      uVar24 = *(uint *)this;
    }
    if (param_1 != 1) {
      param_1 = *(int *)(this + 4);
      goto LAB_0031ebb0;
    }
    piVar21 = *(int **)(this + 0x40);
    *(undefined4 *)(this + 0xc) = 1;
    param_1 = 2;
    *(undefined4 *)(this + 4) = 2;
    lVar20 = *(long *)(this + 0x48);
    iVar15 = *piVar21;
    *(long *)(lVar20 + 8) = lVar16;
    iVar14 = 1;
    iVar22 = 2;
    if (iVar15 < 2) goto LAB_0031ebcc;
    iVar22 = 0;
  }
  iVar15 = param_1 + -2;
  lVar16 = (long)iVar15 * 8;
                    /* try { // try from 0031ec2c to 0041ec53 has its CatchHandler @ 0031ffb0 */
  if (*(ulong *)(lVar20 + lVar16) <=
      (ulong)((long)piVar21[iVar14] * *(long *)(lVar20 + (long)iVar14 * 8))) {
    plVar23 = (long *)(lVar20 + lVar16);
    piVar21 = piVar21 + iVar15;
    do {
      if (iVar15 <= iVar22) goto LAB_0031ec60;
      iVar5 = *piVar21;
      lVar16 = *plVar23;
      iVar15 = iVar15 + -1;
      puVar1 = (ulong *)(plVar23 + -1);
      plVar23 = plVar23 + -1;
      piVar21 = piVar21 + -1;
    } while (*puVar1 <= (ulong)(iVar5 * lVar16));
  }
  *(uint *)this = uVar24 & 0xffffbfff;
LAB_0031ec68:
  if (2 < param_1) {
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
  }
  if (*(long *)(this + 0x38) == 0) {
    lVar16 = *(long *)(this + 0x10);
  }
  else {
                    /* try { // try from 0031ec84 to 0041ec87 has its CatchHandler @ 0031ffa8 */
    lVar16 = *(long *)(*(long *)(this + 0x38) + 0x18);
    *(long *)(this + 0x10) = lVar16;
    *(long *)(this + 0x18) = lVar16;
  }
  if (lVar16 == 0) {
    *(undefined8 *)(this + 0x28) = 0;
    lVar16 = 0;
  }
  else {
    piVar21 = *(int **)(this + 0x40);
    plVar23 = *(long **)(this + 0x48);
    iVar22 = *piVar21;
                    /* try { // try from 0031eca4 to 0041eca7 has its CatchHandler @ 00320004 */
                    /* try { // try from 0031ecac to 0041ecaf has its CatchHandler @ 0031ffa8 */
    lVar20 = *(long *)(this + 0x18) + (long)iVar22 * *plVar23;
    *(long *)(this + 0x28) = lVar20;
    if (iVar22 < 1) {
      *(long *)(this + 0x20) = lVar20;
      return;
    }
    lVar20 = 0;
    lVar16 = lVar16 + (long)piVar21[iVar14] * plVar23[iVar14];
    *(long *)(this + 0x20) = lVar16;
    if (iVar14 < 1) {
      return;
    }
    do {
      piVar2 = piVar21 + lVar20;
      plVar3 = plVar23 + lVar20;
      lVar20 = lVar20 + 1;
      lVar16 = lVar16 + (long)(*piVar2 + -1) * *plVar3;
    } while ((int)lVar20 < iVar14);
  }
  *(long *)(this + 0x20) = lVar16;
  return;
}


==================================================================

### FUNC 0031ef78 (1172 bytes) name=Mat

/* cv::Mat::Mat(cv::Mat const&, cv::Range const*) */

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Range *param_2)

{
  ulong *puVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  undefined4 uVar5;
  char cVar6;
  bool bVar7;
  undefined2 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  char *pcVar13;
  int *piVar14;
  long *plVar15;
  undefined8 *puVar16;
  undefined4 *puVar17;
  undefined8 *puVar18;
  long lVar19;
  long lVar20;
  long lVar21;
  Range *pRVar22;
  long lVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  undefined8 uVar28;
  Range *local_10;
  Range *local_8;
  
  *(undefined8 *)this = DAT_0031f438;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(Mat **)(this + 0x40) = this + 8;
  *(Mat **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  iVar2 = *(int *)(param_1 + 4);
  if (param_2 == (Range *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar13 = (char *)String::allocate((String *)&local_10,6);
    uVar8 = s_ranges_0046ad88._4_2_;
                    /* try { // try from 0031f3c0 to 0041f3c3 has its CatchHandler @ 0031ffa8 */
    *(undefined4 *)pcVar13 = s_ranges_0046ad88._0_4_;
    *(undefined2 *)(pcVar13 + 4) = uVar8;
    error(-0xd7,(String *)&local_10,"cv::Mat::Mat(const cv::Mat&, const cv::Range*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x210);
    String::deallocate((String *)&local_10);
  }
  if (iVar2 < 1) {
    if (this == param_1) goto LAB_0031f24c;
LAB_0031f0e4:
    if (*(long *)(param_1 + 0x38) != 0) {
      piVar14 = (int *)(*(long *)(param_1 + 0x38) + 0x14);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = *piVar14 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(long *)(this + 0x38) != 0) {
      piVar14 = (int *)(*(long *)(this + 0x38) + 0x14);
      do {
        iVar12 = *piVar14;
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = iVar12 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
      if (iVar12 == 1) {
        deallocate(this);
      }
    }
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x10) = 0;
                    /* try { // try from 0031f134 to 0041f137 has its CatchHandler @ 0031ff5c */
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    if (*(int *)(this + 4) < 1) {
      *(undefined4 *)this = *(undefined4 *)param_1;
LAB_0031f170:
      iVar12 = *(int *)(param_1 + 4);
      if (2 < iVar12) goto LAB_0031f17c;
      puVar18 = *(undefined8 **)(param_1 + 0x48);
      puVar16 = *(undefined8 **)(this + 0x48);
      uVar5 = *(undefined4 *)(param_1 + 8);
      *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
      *(int *)(this + 4) = iVar12;
      *(undefined4 *)(this + 8) = uVar5;
      *puVar16 = *puVar18;
      puVar16[1] = puVar18[1];
    }
    else {
      iVar12 = 0;
      puVar17 = *(undefined4 **)(this + 0x40);
      do {
        *puVar17 = 0;
        iVar12 = iVar12 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar12 < *(int *)(this + 4));
      *(undefined4 *)this = *(undefined4 *)param_1;
      if (*(int *)(this + 4) < 3) goto LAB_0031f170;
LAB_0031f17c:
      copySize(this,param_1);
    }
    uVar28 = *(undefined8 *)(param_1 + 0x10);
    uVar27 = *(undefined8 *)(param_1 + 0x28);
    uVar26 = *(undefined8 *)(param_1 + 0x20);
                    /* try { // try from 0031f1a8 to 0041f1ab has its CatchHandler @ 0031ff90 */
    uVar25 = *(undefined8 *)(param_1 + 0x38);
    uVar24 = *(undefined8 *)(param_1 + 0x30);
                    /* try { // try from 0031f1b0 to 0041f1b3 has its CatchHandler @ 0031ff98 */
    *(undefined8 *)(this + 0x18) = *(undefined8 *)(param_1 + 0x18);
    *(undefined8 *)(this + 0x10) = uVar28;
    *(undefined8 *)(this + 0x28) = uVar27;
    *(undefined8 *)(this + 0x20) = uVar26;
    *(undefined8 *)(this + 0x38) = uVar25;
    *(undefined8 *)(this + 0x30) = uVar24;
    if (iVar2 < 1) goto LAB_0031f24c;
  }
  else {
    lVar23 = 0;
    pRVar22 = param_2;
    do {
      iVar12 = *(int *)pRVar22;
      iVar3 = *(int *)(pRVar22 + 4);
      if (((iVar12 != -0x80000000) || (iVar3 != 0x7fffffff)) &&
         ((iVar12 < 0 ||
          ((iVar3 <= iVar12 || (*(int *)(*(long *)(param_1 + 0x40) + lVar23) < iVar3)))))) {
        local_10 = (Range *)0x0;
        local_8 = (Range *)0x0;
        pcVar13 = (char *)String::allocate((String *)&local_10,0x4c);
        uVar5 = s_r____Range__all_______0_<__r_sta_0046ad90._72_4_;
        uVar11 = s_r____Range__all_______0_<__r_sta_0046ad90._56_8_;
        uVar10 = s_r____Range__all_______0_<__r_sta_0046ad90._48_8_;
        uVar9 = s_r____Range__all_______0_<__r_sta_0046ad90._40_8_;
        uVar28 = s_r____Range__all_______0_<__r_sta_0046ad90._32_8_;
        uVar27 = s_r____Range__all_______0_<__r_sta_0046ad90._24_8_;
        uVar26 = s_r____Range__all_______0_<__r_sta_0046ad90._16_8_;
        uVar25 = s_r____Range__all_______0_<__r_sta_0046ad90._8_8_;
        uVar24 = s_r____Range__all_______0_<__r_sta_0046ad90._0_8_;
        *(undefined8 *)(pcVar13 + 0x40) = s_r____Range__all_______0_<__r_sta_0046ad90._64_8_;
        *(undefined4 *)(pcVar13 + 0x48) = uVar5;
        *(undefined8 *)pcVar13 = uVar24;
        *(undefined8 *)(pcVar13 + 8) = uVar25;
        *(undefined8 *)(pcVar13 + 0x10) = uVar26;
        *(undefined8 *)(pcVar13 + 0x18) = uVar27;
                    /* try { // try from 0031f0b8 to 0041f0bb has its CatchHandler @ 0031febc */
        *(undefined8 *)(pcVar13 + 0x20) = uVar28;
        *(undefined8 *)(pcVar13 + 0x28) = uVar9;
        *(undefined8 *)(pcVar13 + 0x30) = uVar10;
        *(undefined8 *)(pcVar13 + 0x38) = uVar11;
        error(-0xd7,(String *)&local_10,"cv::Mat::Mat(const cv::Mat&, const cv::Range*)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x214);
        String::deallocate((String *)&local_10);
      }
      lVar23 = lVar23 + 4;
      pRVar22 = pRVar22 + 8;
    } while (lVar23 != ((ulong)(iVar2 - 1) + 1) * 4);
    if (this != param_1) goto LAB_0031f0e4;
  }
  lVar23 = 0;
  iVar12 = 0;
  do {
    iVar3 = *(int *)param_2;
    iVar4 = *(int *)(param_2 + 4);
    if (((iVar3 != -0x80000000) || (iVar4 != 0x7fffffff)) &&
       ((iVar4 != *(int *)(*(long *)(this + 0x40) + lVar23) || (iVar3 != 0)))) {
      lVar21 = *(long *)(this + 0x48);
      lVar19 = *(long *)(this + 0x10);
      *(int *)(*(long *)(this + 0x40) + lVar23) = iVar4 - iVar3;
                    /* try { // try from 0031f224 to 0041f227 has its CatchHandler @ 0031ffa0 */
      *(long *)(this + 0x10) = lVar19 + (long)iVar3 * *(long *)(lVar21 + lVar23 * 2);
      *(uint *)this = *(uint *)this | 0x8000;
    }
    iVar12 = iVar12 + 1;
    param_2 = param_2 + 8;
    lVar23 = lVar23 + 4;
  } while (iVar12 < iVar2);
LAB_0031f24c:
  iVar2 = *(int *)(this + 4);
  if ((iVar2 < 1) || (piVar14 = *(int **)(this + 0x40), 1 < *piVar14)) {
    iVar12 = 0;
  }
  else {
    iVar12 = 0;
    do {
      piVar14 = piVar14 + 1;
      iVar12 = iVar12 + 1;
      if (iVar12 == iVar2) break;
    } while (*piVar14 < 2);
  }
  iVar3 = iVar2 + -1;
  if (iVar12 < iVar3) {
                    /* try { // try from 0031f298 to 0041f29b has its CatchHandler @ 0031ffa8 */
    lVar19 = *(long *)(this + 0x48);
    lVar21 = (long)iVar3 * 8;
    lVar23 = (long)iVar3 * 4;
    lVar20 = lVar21 + -8;
    if (*(ulong *)(lVar19 + lVar20) <=
        (ulong)((long)*(int *)(*(long *)(this + 0x40) + lVar23) * *(long *)(lVar19 + lVar21))) {
      plVar15 = (long *)(lVar19 + lVar20);
      piVar14 = (int *)(*(long *)(this + 0x40) + lVar23 + -4);
      do {
                    /* try { // try from 0031f30c to 0041f30f has its CatchHandler @ 0031ffb0 */
        if (plVar15 ==
            (long *)(lVar19 + ((long)(iVar2 + -2) - (ulong)(uint)((iVar2 + -2) - iVar12)) * 8))
        goto LAB_0031f310;
        iVar3 = *piVar14;
        lVar23 = *plVar15;
        puVar1 = (ulong *)(plVar15 + -1);
        plVar15 = plVar15 + -1;
        piVar14 = piVar14 + -1;
      } while (*puVar1 <= (ulong)(iVar3 * lVar23));
    }
    *(uint *)this = *(uint *)this & 0xffffbfff;
  }
  else {
LAB_0031f310:
    *(uint *)this = *(uint *)this | 0x4000;
  }
                    /* try { // try from 0031f338 to 0041f38b has its CatchHandler @ 0031eb80 */
  return;
}


==================================================================

### FUNC 0031f440 (2012 bytes) name=Mat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&) */

void __thiscall cv::Mat::Mat(Mat *this,Mat *param_1,Range *param_2,Range *param_3)

{
  int *piVar1;
  undefined4 uVar2;
  char cVar3;
  bool bVar4;
  undefined2 uVar5;
  int iVar6;
  ulong uVar7;
  undefined8 uVar8;
  char *pcVar9;
  void *pvVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  undefined8 *puVar15;
  ulong uVar16;
  Range *pRVar17;
  int iVar18;
  long lVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  undefined8 uVar23;
  undefined4 local_4b0;
  int local_4ac;
  undefined4 local_4a8;
  undefined4 local_4a4;
  undefined8 local_4a0;
  undefined8 uStack_498;
  undefined8 local_490;
  undefined8 uStack_488;
  undefined8 local_480;
  long lStack_478;
  undefined4 *local_470;
  undefined8 *local_468;
  undefined8 auStack_460 [2];
  Range *local_450;
  long local_448;
  undefined8 local_440 [136];
  
  *(undefined8 *)this = DAT_0031fc98;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  iVar18 = *(int *)(param_1 + 4);
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(Mat **)(this + 0x40) = this + 8;
  *(Mat **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  if (iVar18 < 2) {
    local_450 = (Range *)0x0;
    local_448 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_450,0xb);
    cVar3 = s_m_dims_>__2_0046ade0[10];
    uVar5 = s_m_dims_>__2_0046ade0._8_2_;
    *(undefined8 *)pcVar9 = s_m_dims_>__2_0046ade0._0_8_;
    *(undefined2 *)(pcVar9 + 8) = uVar5;
    pcVar9[10] = cVar3;
    error(-0xd7,(String *)&local_450,
          "cv::Mat::Mat(const cv::Mat&, const cv::Range&, const cv::Range&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1b9);
    String::deallocate((String *)&local_450);
    iVar18 = *(int *)(param_1 + 4);
  }
  if (iVar18 < 3) {
    if (this != param_1) {
      if (*(long *)(param_1 + 0x38) != 0) {
        piVar1 = (int *)(*(long *)(param_1 + 0x38) + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(long *)(this + 0x38) != 0) {
        piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
        do {
          iVar18 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar18 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar18 == 1) {
          deallocate(this);
        }
      }
      *(undefined8 *)(this + 0x38) = 0;
      *(undefined8 *)(this + 0x10) = 0;
      *(undefined8 *)(this + 0x28) = 0;
      *(undefined8 *)(this + 0x20) = 0;
      *(undefined8 *)(this + 0x18) = 0;
      if (*(int *)(this + 4) < 1) {
        *(undefined4 *)this = *(undefined4 *)param_1;
LAB_0031f858:
        iVar18 = *(int *)(param_1 + 4);
        if (2 < iVar18) goto LAB_0031f928;
        puVar15 = *(undefined8 **)(param_1 + 0x48);
        puVar13 = *(undefined8 **)(this + 0x48);
        uVar2 = *(undefined4 *)(param_1 + 8);
        *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
        *(int *)(this + 4) = iVar18;
        *(undefined4 *)(this + 8) = uVar2;
        *puVar13 = *puVar15;
        puVar13[1] = puVar15[1];
      }
      else {
        iVar18 = 0;
        puVar14 = *(undefined4 **)(this + 0x40);
        do {
          *puVar14 = 0;
          iVar18 = iVar18 + 1;
          puVar14 = puVar14 + 1;
        } while (iVar18 < *(int *)(this + 4));
        *(undefined4 *)this = *(undefined4 *)param_1;
        if (*(int *)(this + 4) < 3) goto LAB_0031f858;
LAB_0031f928:
        copySize(this,param_1);
      }
                    /* try { // try from 0031f890 to 0041f893 has its CatchHandler @ 0031ffb0 */
      uVar23 = *(undefined8 *)(param_1 + 0x10);
      uVar22 = *(undefined8 *)(param_1 + 0x28);
      uVar21 = *(undefined8 *)(param_1 + 0x20);
      uVar20 = *(undefined8 *)(param_1 + 0x38);
      uVar8 = *(undefined8 *)(param_1 + 0x30);
      *(undefined8 *)(this + 0x18) = *(undefined8 *)(param_1 + 0x18);
      *(undefined8 *)(this + 0x10) = uVar23;
      *(undefined8 *)(this + 0x28) = uVar22;
      *(undefined8 *)(this + 0x20) = uVar21;
      *(undefined8 *)(this + 0x38) = uVar20;
      *(undefined8 *)(this + 0x30) = uVar8;
    }
    iVar18 = *(int *)param_2;
    if (iVar18 == -0x80000000) {
      if (*(int *)(param_2 + 4) != 0x7fffffff) goto LAB_0031f954;
    }
    else {
      if (iVar18 == 0) {
        iVar6 = *(int *)(param_2 + 4);
                    /* try { // try from 0031f8e4 to 0041f8e7 has its CatchHandler @ 0031ff34 */
        if (*(int *)(this + 8) == iVar6) goto LAB_0031f8e8;
      }
      else {
        if (iVar18 < 0) goto LAB_0031f954;
        iVar6 = *(int *)(param_2 + 4);
      }
      if ((iVar6 < iVar18) || (*(int *)(param_1 + 8) < iVar6)) {
LAB_0031f954:
        local_450 = (Range *)0x0;
        local_448 = 0;
        pvVar10 = (void *)String::allocate((String *)&local_450,0x53);
        memcpy(pvVar10,
               "0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows"
               ,0x53);
        error(-0xd7,(String *)&local_450,
              "cv::Mat::Mat(const cv::Mat&, const cv::Range&, const cv::Range&)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1c8);
        String::deallocate((String *)&local_450);
        iVar18 = *(int *)param_2;
        iVar6 = *(int *)(param_2 + 4);
      }
      *(int *)(this + 8) = iVar6 - iVar18;
      *(long *)(this + 0x10) = *(long *)(this + 0x10) + (long)iVar18 * *(long *)(this + 0x50);
      *(uint *)this = *(uint *)this | 0x8000;
    }
LAB_0031f8e8:
    iVar18 = *(int *)param_3;
                    /* try { // try from 0031f8ec to 0041f8ef has its CatchHandler @ 0031ffb0 */
    if (iVar18 == -0x80000000) {
      if (*(int *)(param_3 + 4) != 0x7fffffff) goto LAB_0031fa58;
    }
    else {
                    /* try { // try from 0031f900 to 0041f903 has its CatchHandler @ 0031ffa0 */
      if (iVar18 == 0) {
        iVar6 = *(int *)(param_3 + 4);
        if (*(int *)(this + 0xc) == iVar6) goto LAB_0031fb08;
      }
      else {
        if (iVar18 < 0) goto LAB_0031fa58;
        iVar6 = *(int *)(param_3 + 4);
                    /* try { // try from 0031f90c to 0041f90f has its CatchHandler @ 0031ffb0 */
      }
                    /* try { // try from 0031fbe4 to 0041fbe7 has its CatchHandler @ 0031ffb0 */
      if ((iVar6 < iVar18) || (*(int *)(param_1 + 0xc) < iVar6)) {
LAB_0031fa58:
        local_450 = (Range *)0x0;
        local_448 = 0;
        pvVar10 = (void *)String::allocate((String *)&local_450,0x53);
        memcpy(pvVar10,
               "0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols"
               ,0x53);
        error(-0xd7,(String *)&local_450,
              "cv::Mat::Mat(const cv::Mat&, const cv::Range&, const cv::Range&)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1d0);
        String::deallocate((String *)&local_450);
        iVar18 = *(int *)param_3;
        iVar6 = *(int *)(param_3 + 4);
      }
      *(int *)(this + 0xc) = iVar6 - iVar18;
      if (*(int *)(this + 4) < 1) {
        lVar19 = 0;
      }
      else {
        lVar19 = (long)iVar18 *
                 *(long *)(*(long *)(this + 0x48) + (long)*(int *)(this + 4) * 8 + -8);
      }
      uVar12 = 0xffffbfff;
      if (*(int *)(param_1 + 0xc) <= iVar6 - iVar18) {
        uVar12 = 0xffffffff;
      }
      *(long *)(this + 0x10) = *(long *)(this + 0x10) + lVar19;
      *(uint *)this = uVar12 & *(uint *)this | 0x8000;
    }
LAB_0031fb08:
    if (*(int *)(this + 8) == 1) {
      *(uint *)this = *(uint *)this | 0x4000;
    }
    else if (*(int *)(this + 8) < 1) goto LAB_0031fb28;
                    /* try { // try from 0031fb20 to 0041fb23 has its CatchHandler @ 0031ffa8 */
    if (0 < *(int *)(this + 0xc)) {
      return;
    }
LAB_0031fb28:
                    /* try { // try from 0031fb2c to 0041fb2f has its CatchHandler @ 0031ff5c */
    if (*(long *)(this + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
      do {
        iVar18 = *piVar1;
                    /* try { // try from 0031fb38 to 0041fb3b has its CatchHandler @ 0031ff90 */
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar18 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
                    /* try { // try from 0031fb44 to 0041fb47 has its CatchHandler @ 0031ffa0 */
      if (iVar18 == 1) {
                    /* try { // try from 0031fb50 to 0041fb5f has its CatchHandler @ 0031ffb8 */
        deallocate(this);
      }
    }
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    if (0 < *(int *)(this + 4)) {
      iVar18 = 0;
      puVar14 = *(undefined4 **)(this + 0x40);
      do {
        *puVar14 = 0;
        iVar18 = iVar18 + 1;
        puVar14 = puVar14 + 1;
      } while (iVar18 < *(int *)(this + 4));
    }
    *(undefined4 *)(this + 0xc) = 0;
    *(undefined4 *)(this + 8) = 0;
    return;
  }
  lVar19 = (long)iVar18;
  puVar13 = local_440;
  do {
    puVar15 = puVar13 + 2;
    puVar13[1] = 0;
    *puVar13 = 0;
    puVar13 = puVar15;
  } while (puVar15 != (undefined8 *)&stack0x00000000);
  local_450 = (Range *)local_440;
  local_448 = 0x88;
  if (iVar18 < 0x89) {
    local_440[0] = *(undefined8 *)param_2;
    local_440[1] = *(undefined8 *)param_3;
    if (iVar18 == 3) goto LAB_0031f584;
LAB_0031f5bc:
    uVar11 = (iVar18 - 4U >> 1) + 1;
    iVar6 = uVar11 * 2;
    uVar12 = 0;
    pRVar17 = local_450;
    do {
      *(undefined8 *)(pRVar17 + 0x18) = _DAT_0031fca8;
      *(undefined8 *)(pRVar17 + 0x10) = _DAT_0031fca0;
      uVar12 = uVar12 + 1;
      pRVar17 = pRVar17 + 0x10;
    } while (uVar12 < uVar11);
    uVar7 = (ulong)(iVar6 + 2);
    if (iVar18 + -2 == iVar6) goto LAB_0031f600;
LAB_0031f5e8:
    uVar7 = -(uVar7 >> 0x1f) & 0xfffffff800000000 | uVar7 << 3;
    *(undefined4 *)(local_450 + uVar7) = 0x80000000;
    *(undefined4 *)(local_450 + uVar7 + 4) = 0x7fffffff;
  }
  else {
    local_450 = operator_new__(lVar19 << 3);
    uVar16 = 0;
    uVar7 = (lVar19 - 2U >> 1) + 1;
    pRVar17 = local_450;
    do {
      *(undefined8 *)(pRVar17 + 8) = 0;
      *(undefined8 *)pRVar17 = 0;
      uVar16 = uVar16 + 1;
      pRVar17 = pRVar17 + 0x10;
    } while (uVar16 < uVar7);
    if (lVar19 != uVar7 * 2) {
      *(undefined4 *)(local_450 + uVar7 * 0x10) = 0;
      *(undefined4 *)(local_450 + uVar7 * 0x10 + 4) = 0;
    }
    iVar18 = *(int *)(param_1 + 4);
    *(undefined8 *)local_450 = *(undefined8 *)param_2;
    *(undefined8 *)(local_450 + 8) = *(undefined8 *)param_3;
    if (2 < iVar18) {
      if (iVar18 != 3) goto LAB_0031f5bc;
LAB_0031f584:
      uVar7 = 2;
      goto LAB_0031f5e8;
    }
  }
LAB_0031f600:
  local_448 = lVar19;
  Mat((Mat *)&local_4b0,param_1,local_450);
  if (lStack_478 != 0) {
    piVar1 = (int *)(lStack_478 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar18 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar18 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
                    /* try { // try from 0031f650 to 0041f663 has its CatchHandler @ 0031ffb8 */
    if (iVar18 == 1) {
      deallocate(this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (*(int *)(this + 4) < 1) {
    *(undefined4 *)this = local_4b0;
LAB_0031f6a0:
    if (local_4ac < 3) {
      puVar13 = *(undefined8 **)(this + 0x48);
      *(int *)(this + 4) = local_4ac;
      *(undefined4 *)(this + 8) = local_4a8;
      uVar8 = *local_468;
      *(undefined4 *)(this + 0xc) = local_4a4;
      *puVar13 = uVar8;
      puVar13[1] = local_468[1];
      goto LAB_0031f6d8;
    }
  }
  else {
    iVar18 = 0;
    puVar14 = *(undefined4 **)(this + 0x40);
    do {
      *puVar14 = 0;
      iVar18 = iVar18 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar18 < *(int *)(this + 4));
    *(undefined4 *)this = local_4b0;
    if (*(int *)(this + 4) < 3) goto LAB_0031f6a0;
  }
  copySize(this,(Mat *)&local_4b0);
LAB_0031f6d8:
  *(undefined8 *)(this + 0x18) = uStack_498;
  *(undefined8 *)(this + 0x10) = local_4a0;
  *(undefined8 *)(this + 0x28) = uStack_488;
  *(undefined8 *)(this + 0x20) = local_490;
  *(long *)(this + 0x38) = lStack_478;
  *(undefined8 *)(this + 0x30) = local_480;
  if (lStack_478 != 0) {
    piVar1 = (int *)(lStack_478 + 0x14);
    do {
      iVar18 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar18 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar18 == 1) {
      deallocate((Mat *)&local_4b0);
    }
  }
  lStack_478 = 0;
  local_4a0 = 0;
  uStack_488 = 0;
  local_490 = 0;
  uStack_498 = 0;
  if (0 < local_4ac) {
    iVar18 = 0;
    do {
      *local_470 = 0;
      iVar18 = iVar18 + 1;
                    /* try { // try from 0031f760 to 0041f763 has its CatchHandler @ 0031ffa8 */
      local_470 = local_470 + 1;
    } while (iVar18 < local_4ac);
  }
  if (local_468 != auStack_460) {
    fastFree(local_468);
  }
  if ((local_450 != (Range *)local_440) && (local_450 != (Range *)0x0)) {
    operator_delete__(local_450);
  }
  return;
}


==================================================================

### FUNC 0031fcb0 (596 bytes) name=diag

/* cv::Mat::diag(int) const */

void cv::Mat::diag(int param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined1 uVar7;
  uint uVar8;
  Mat *pMVar9;
  undefined8 *puVar10;
  long lVar11;
  int *piVar12;
  int in_w1;
  long *plVar13;
  int iVar14;
  long lVar15;
  undefined8 uVar16;
  long *plVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  Mat *in_x8;
  undefined8 uVar21;
  undefined8 local_10;
  undefined8 local_8;
  
  pMVar9 = (Mat *)(ulong)(uint)param_1;
  iVar14 = *(int *)(pMVar9 + 4);
  if (2 < iVar14) {
    local_10 = 0;
    local_8 = 0;
                    /* try { // try from 0031fcec to 0041fcef has its CatchHandler @ 0031ffb0 */
    puVar10 = (undefined8 *)String::allocate((String *)&local_10,9);
    uVar7 = LAB_0046aea8;
    *puVar10 = DAT_0046aea0;
    *(undefined1 *)(puVar10 + 1) = uVar7;
    error(-0xd7,(String *)&local_10,"cv::Mat cv::Mat::diag(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x29f);
                    /* try { // try from 0031fd30 to 0041fd33 has its CatchHandler @ 0031fe8c */
    String::deallocate((String *)&local_10);
    iVar14 = *(int *)(pMVar9 + 4);
  }
                    /* try { // try from 0031fd38 to 0041fd3b has its CatchHandler @ 0031ffb0 */
  uVar1 = *(undefined4 *)pMVar9;
  uVar2 = *(undefined4 *)(pMVar9 + 8);
  uVar3 = *(undefined4 *)(pMVar9 + 0xc);
  uVar21 = *(undefined8 *)(pMVar9 + 0x10);
  uVar20 = *(undefined8 *)(pMVar9 + 0x18);
  uVar19 = *(undefined8 *)(pMVar9 + 0x20);
  uVar18 = *(undefined8 *)(pMVar9 + 0x28);
  uVar16 = *(undefined8 *)(pMVar9 + 0x30);
  lVar11 = *(long *)(pMVar9 + 0x38);
  *(long *)(in_x8 + 0x38) = lVar11;
  *(undefined4 *)in_x8 = uVar1;
  *(int *)(in_x8 + 4) = iVar14;
  *(undefined4 *)(in_x8 + 8) = uVar2;
  *(undefined4 *)(in_x8 + 0xc) = uVar3;
  *(undefined8 *)(in_x8 + 0x10) = uVar21;
  *(undefined8 *)(in_x8 + 0x18) = uVar20;
  *(undefined8 *)(in_x8 + 0x20) = uVar19;
  *(undefined8 *)(in_x8 + 0x28) = uVar18;
  *(undefined8 *)(in_x8 + 0x30) = uVar16;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  if (lVar11 != 0) {
    piVar12 = (int *)(lVar11 + 0x14);
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar6) {
        *piVar12 = *piVar12 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  iVar14 = *(int *)(pMVar9 + 4);
                    /* try { // try from 0031fdbc to 0041fe6f has its CatchHandler @ 0031ffa8 */
  if (iVar14 < 3) {
    plVar13 = *(long **)(pMVar9 + 0x48);
    plVar17 = *(long **)(in_x8 + 0x48);
    lVar11 = *plVar13;
    *plVar17 = lVar11;
    plVar17[1] = plVar13[1];
  }
  else {
    *(undefined4 *)(in_x8 + 4) = 0;
    copySize(in_x8,pMVar9);
    iVar14 = *(int *)(pMVar9 + 4);
    plVar17 = *(long **)(in_x8 + 0x48);
                    /* try { // try from 0031feb8 to 0041febb has its CatchHandler @ 0031eb80 */
    lVar11 = *plVar17;
  }
                    /* catch() { ... } // from try @ 0031f0b8 with catch @ 0031febc */
  if (iVar14 < 1) {
    lVar15 = 0;
  }
  else {
    lVar15 = *(long *)(*(long *)(pMVar9 + 0x48) + (long)iVar14 * 8 + -8);
  }
  if (in_w1 < 0) {
    iVar4 = *(int *)(pMVar9 + 8);
    iVar14 = *(int *)(pMVar9 + 0xc);
    *(long *)(in_x8 + 0x10) = *(long *)(in_x8 + 0x10) - (long)in_w1 * **(long **)(pMVar9 + 0x48);
    if (in_w1 + iVar4 < iVar14) {
      iVar14 = in_w1 + iVar4;
    }
  }
  else {
    iVar14 = *(int *)(pMVar9 + 8);
    if (*(int *)(pMVar9 + 0xc) - in_w1 < *(int *)(pMVar9 + 8)) {
      iVar14 = *(int *)(pMVar9 + 0xc) - in_w1;
    }
    *(long *)(in_x8 + 0x10) = *(long *)(in_x8 + 0x10) + lVar15 * in_w1;
  }
  piVar12 = *(int **)(in_x8 + 0x40);
  *(int *)(in_x8 + 8) = iVar14;
  if (iVar14 < 2) {
    lVar15 = 0;
  }
  *piVar12 = iVar14;
  *(undefined4 *)(in_x8 + 0xc) = 1;
  piVar12[1] = 1;
  *plVar17 = lVar15 + lVar11;
  if (*(int *)(in_x8 + 8) < 2) {
    uVar8 = *(uint *)in_x8 | 0x4000;
  }
  else {
    uVar8 = *(uint *)in_x8 & 0xffffbfff;
  }
  piVar12 = *(int **)(pMVar9 + 0x40);
  *(uint *)in_x8 = uVar8;
  if ((piVar12[1] != 1) || (*piVar12 != 1)) {
    *(uint *)in_x8 = uVar8 | 0x8000;
  }
                    /* catch() { ... } // from try @ 0031fd30 with catch @ 0031fe8c */
  return;
}


==================================================================

### FUNC 0031ff18 (688 bytes) name=pop_back

/* cv::Mat::pop_back(unsigned long) */

void __thiscall cv::Mat::pop_back(Mat *this,ulong param_1)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  int *piVar7;
  char *pcVar8;
  long lVar9;
  undefined4 *puVar10;
  undefined8 *puVar11;
  int iVar12;
  long *plVar13;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  int local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
                    /* catch() { ... } // from try @ 0031fc28 with catch @ 0031ff24 */
  piVar7 = *(int **)(this + 0x40);
  local_64 = *piVar7;
                    /* catch() { ... } // from try @ 0031f8e4 with catch @ 0031ff34 */
  if ((ulong)(long)local_64 < param_1) {
    local_60 = 0;
    local_58 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_60,0x1b);
    cVar2 = s_nelems_<__(size_t)size_p[0]_0046aeb0[0x1a];
    uVar6 = s_nelems_<__(size_t)size_p[0]_0046aeb0._24_2_;
    uVar5 = s_nelems_<__(size_t)size_p[0]_0046aeb0._8_8_;
    uVar4 = s_nelems_<__(size_t)size_p[0]_0046aeb0._0_8_;
                    /* catch() { ... } // from try @ 0031f1a8 with catch @ 0031ff90
                       catch() { ... } // from try @ 0031fb38 with catch @ 0031ff90 */
                    /* catch() { ... } // from try @ 0031f1b0 with catch @ 0031ff98 */
                    /* catch() { ... } // from try @ 0031f224 with catch @ 0031ffa0
                       catch() { ... } // from try @ 0031f900 with catch @ 0031ffa0
                       catch() { ... } // from try @ 0031fb44 with catch @ 0031ffa0 */
                    /* catch() { ... } // from try @ 0031ec84 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031ecac with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031f298 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031f3c0 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031f760 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031fb20 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031fca8 with catch @ 0031ffa8
                       catch() { ... } // from try @ 0031fdbc with catch @ 0031ffa8 */
                    /* catch() { ... } // from try @ 0031ec2c with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031f30c with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031f890 with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031f8ec with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031f90c with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031fbe4 with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031fc30 with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031fcec with catch @ 0031ffb0
                       catch() { ... } // from try @ 0031fd38 with catch @ 0031ffb0 */
                    /* catch() { ... } // from try @ 0031f650 with catch @ 0031ffb8
                       catch() { ... } // from try @ 0031fb50 with catch @ 0031ffb8 */
    *(undefined8 *)(pcVar8 + 0x10) = s_nelems_<__(size_t)size_p[0]_0046aeb0._16_8_;
    *(undefined2 *)(pcVar8 + 0x18) = uVar6;
    pcVar8[0x1a] = cVar2;
    *(undefined8 *)pcVar8 = uVar4;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    error(-0xd7,(String *)&local_60,"void cv::Mat::pop_back(size_t)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x2c1);
    String::deallocate((String *)&local_60);
    piVar7 = *(int **)(this + 0x40);
    uVar1 = *(uint *)this;
    local_64 = *piVar7;
  }
  else {
    uVar1 = *(uint *)this;
  }
  if ((uVar1 >> 0xf & 1) == 0) {
    plVar13 = *(long **)(this + 0x48);
    lVar9 = *(long *)(this + 0x20);
    *piVar7 = local_64 - (int)param_1;
                    /* catch() { ... } // from try @ 0031f134 with catch @ 0031ff5c
                       catch() { ... } // from try @ 0031fb2c with catch @ 0031ff5c */
    *(ulong *)(this + 0x20) = lVar9 - param_1 * *plVar13;
    return;
  }
  local_64 = local_64 - (int)param_1;
  local_70 = 0x80000000;
                    /* catch() { ... } // from try @ 0031eca4 with catch @ 00320004 */
  local_68 = 0;
  local_6c = 0x7fffffff;
  Mat((Mat *)&local_60,this,(Range *)&local_68,(Range *)&local_70);
  if (lStack_28 != 0) {
    piVar7 = (int *)(lStack_28 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar3) {
        *piVar7 = *piVar7 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar7 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar12 = *piVar7;
                    /* catch() { ... } // from try @ 0032008c with catch @ 00320050
                       catch() { ... } // from try @ 003204e4 with catch @ 00320050
                       catch() { ... } // from try @ 00320748 with catch @ 00320050
                       catch() { ... } // from try @ 00320aa4 with catch @ 00320050
                       catch() { ... } // from try @ 00320b20 with catch @ 00320050 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar3) {
        *piVar7 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      deallocate(this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (*(int *)(this + 4) < 1) {
    *(undefined4 *)this = (undefined4)local_60;
LAB_003200ac:
    if (local_60._4_4_ < 3) {
      *(int *)(this + 4) = local_60._4_4_;
      puVar11 = *(undefined8 **)(this + 0x48);
      *(undefined4 *)(this + 8) = (undefined4)local_58;
      *(undefined4 *)(this + 0xc) = local_58._4_4_;
      *puVar11 = *local_18;
      puVar11[1] = local_18[1];
      goto LAB_003200c4;
    }
  }
  else {
    iVar12 = 0;
    puVar10 = *(undefined4 **)(this + 0x40);
    do {
      *puVar10 = 0;
                    /* try { // try from 0032008c to 004200ab has its CatchHandler @ 00320050 */
      iVar12 = iVar12 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar12 < *(int *)(this + 4));
    *(undefined4 *)this = (undefined4)local_60;
    if (*(int *)(this + 4) < 3) goto LAB_003200ac;
  }
  copySize(this,(Mat *)&local_60);
LAB_003200c4:
  *(undefined8 *)(this + 0x18) = uStack_48;
  *(undefined8 *)(this + 0x10) = local_50;
  *(undefined8 *)(this + 0x28) = uStack_38;
  *(undefined8 *)(this + 0x20) = local_40;
  *(long *)(this + 0x38) = lStack_28;
  *(undefined8 *)(this + 0x30) = local_30;
  if (lStack_28 != 0) {
    piVar7 = (int *)(lStack_28 + 0x14);
    do {
      iVar12 = *piVar7;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar3) {
        *piVar7 = iVar12 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 0032010c to 00420133 has its CatchHandler @ 00320b58 */
    } while (cVar2 != '\0');
    if (iVar12 == 1) {
      deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_60._4_4_) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_60._4_4_);
  }
  if (local_18 == auStack_10) {
    return;
  }
  fastFree(local_18);
  return;
}


==================================================================

### FUNC 00320210 (1092 bytes) name=reserve

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::reserve(unsigned long) */

void __thiscall cv::Mat::reserve(Mat *this,ulong param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  long lVar6;
  char *pcVar7;
  int iVar8;
  int *piVar9;
  long *plVar10;
  ulong uVar11;
  undefined8 *puVar12;
  long lVar13;
  undefined4 *puVar14;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  int local_d4;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined8 *local_80;
  long *local_78;
  long local_70 [2];
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar8 = (int)param_1;
                    /* try { // try from 0032022c to 00420283 has its CatchHandler @ 00320b60 */
  if (iVar8 < 0) {
    local_60 = 0;
    local_58 = 0;
    pcVar7 = (char *)String::allocate((String *)&local_60,0x10);
    uVar5 = s__int_nelems_>__0_0046aed0._8_8_;
    *(undefined8 *)pcVar7 = s__int_nelems_>__0_0046aed0._0_8_;
    *(undefined8 *)(pcVar7 + 8) = uVar5;
    error(-0xd7,(String *)&local_60,"void cv::Mat::reserve(size_t)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x2e6);
    String::deallocate((String *)&local_60);
  }
  if (((*(uint *)this >> 0xf & 1) == 0) &&
     (*(long *)(this + 0x10) + param_1 * **(long **)(this + 0x48) <= *(ulong *)(this + 0x28))) {
    return;
  }
  piVar9 = *(int **)(this + 0x40);
  iVar2 = *piVar9;
  if (param_1 <= (ulong)(long)iVar2) {
    return;
  }
  if (iVar8 < 1) {
    iVar8 = 1;
  }
  *piVar9 = iVar8;
  iVar8 = *(int *)(this + 4);
  if (iVar8 < 3) {
    if (0 < iVar8) {
      lVar13 = (long)*(int *)(this + 8) * (long)*(int *)(this + 0xc);
      goto LAB_003202e4;
    }
    lVar6 = 0x3f;
    uVar11 = 0;
LAB_003202b4:
    iVar8 = 0;
    if (uVar11 != 0) {
      iVar8 = (int)((lVar6 * param_1) / uVar11);
    }
    *piVar9 = iVar8;
    iVar8 = *(int *)(this + 4);
  }
  else {
    lVar6 = 0;
    lVar13 = 1;
    do {
      piVar1 = piVar9 + lVar6;
                    /* try { // try from 003202d4 to 004202d7 has its CatchHandler @ 00320b34 */
      lVar6 = lVar6 + 1;
                    /* try { // try from 003202dc to 004202e7 has its CatchHandler @ 00320b60 */
      lVar13 = lVar13 * *piVar1;
    } while ((int)lVar6 < iVar8);
LAB_003202e4:
    uVar11 = lVar13 * *(long *)(*(long *)(this + 0x48) + (long)iVar8 * 8 + -8);
    lVar6 = uVar11 + 0x3f;
    if (uVar11 < 0x40) goto LAB_003202b4;
  }
  local_78 = local_70;
  local_80 = &uStack_b8;
  local_b0 = 0;
  local_70[1] = 0;
  local_70[0] = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_90 = 0;
  uStack_b8 = _UNK_003206c8;
  local_c0 = _DAT_003206c0;
  local_88 = 0;
  create((Mat *)&local_c0,iVar8,piVar9,*(uint *)this & 0xfff);
  **(int **)(this + 0x40) = iVar2;
  if (0 < iVar2) {
    local_e0 = 0x80000000;
    local_d8 = 0;
    local_dc = 0x7fffffff;
    local_d4 = iVar2;
    Mat((Mat *)&local_60,(Mat *)&local_c0,(Range *)&local_d8,(Range *)&local_e0);
    local_c8 = 0;
    local_c4 = 0;
    local_d8 = 0x2010000;
    local_d0 = (Mat *)&local_60;
    copyTo(this,(_OutputArray *)&local_d8);
    if (local_28 != 0) {
      piVar9 = (int *)(local_28 + 0x14);
      do {
        iVar8 = *piVar9;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar4) {
          *piVar9 = iVar8 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar8 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar8 = 0;
      do {
        *local_20 = 0;
        iVar8 = iVar8 + 1;
        local_20 = local_20 + 1;
      } while (iVar8 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar4) {
        *piVar9 = *piVar9 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 00320444 to 00420447 has its CatchHandler @ 00320b68 */
    } while (cVar3 != '\0');
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar9 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar8 = *piVar9;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar4) {
        *piVar9 = iVar8 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar8 == 1) {
      deallocate(this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (*(int *)(this + 4) < 1) {
    *(undefined4 *)this = (undefined4)local_c0;
LAB_003204b8:
                    /* try { // try from 003204b8 to 004204bb has its CatchHandler @ 00320b58 */
    if (local_c0._4_4_ < 3) {
      *(int *)(this + 4) = local_c0._4_4_;
      plVar10 = *(long **)(this + 0x48);
      *(undefined4 *)(this + 8) = (undefined4)uStack_b8;
      *(undefined4 *)(this + 0xc) = uStack_b8._4_4_;
      lVar6 = *local_78;
                    /* try { // try from 003204e4 to 00420537 has its CatchHandler @ 00320050 */
      *plVar10 = lVar6;
      plVar10[1] = local_78[1];
      goto LAB_003204f0;
    }
  }
  else {
    iVar8 = 0;
    puVar14 = *(undefined4 **)(this + 0x40);
    do {
      *puVar14 = 0;
      iVar8 = iVar8 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar8 < *(int *)(this + 4));
    *(undefined4 *)this = (undefined4)local_c0;
    if (*(int *)(this + 4) < 3) goto LAB_003204b8;
  }
                    /* try { // try from 003205bc to 004205bf has its CatchHandler @ 00320b44 */
                    /* try { // try from 003205c4 to 004205c7 has its CatchHandler @ 00320b58 */
  copySize(this,(Mat *)&local_c0);
  lVar6 = **(long **)(this + 0x48);
LAB_003204f0:
  *(undefined8 *)(this + 0x18) = local_a8;
  *(undefined8 *)(this + 0x28) = local_98;
  *(long *)(this + 0x10) = local_b0;
  *(undefined8 *)(this + 0x30) = local_90;
  *(long *)(this + 0x38) = local_88;
  **(int **)(this + 0x40) = iVar2;
  *(long *)(this + 0x20) = local_b0 + lVar6 * iVar2;
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar8 = *piVar9;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar4) {
        *piVar9 = iVar8 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar8 == 1) {
      deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
                    /* try { // try from 00320570 to 00420573 has its CatchHandler @ 00320b58 */
  if (0 < local_c0._4_4_) {
    iVar8 = 0;
    puVar12 = local_80;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar8 = iVar8 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar8 < local_c0._4_4_);
  }
  if (local_78 == local_70) {
    return;
  }
  fastFree(local_78);
  return;
}


==================================================================

### FUNC 003206d0 (252 bytes) name=push_back_

/* cv::Mat::push_back_(void const*) */

void __thiscall cv::Mat::push_back_(Mat *this,void *param_1)

{
  int iVar1;
  int iVar2;
  long lVar3;
  ulong uVar4;
  long *plVar5;
  size_t __n;
  
  iVar2 = **(int **)(this + 0x40);
  if ((*(uint *)this >> 0xf & 1) == 0) {
    plVar5 = *(long **)(this + 0x48);
    lVar3 = *plVar5;
    if ((ulong)(*(long *)(this + 0x20) + lVar3) <= *(ulong *)(this + 0x28)) {
      iVar1 = *(int *)(this + 4);
      goto joined_r0x003207c0;
    }
  }
  iVar1 = (iVar2 * 3 + 1) / 2;
  if (iVar1 < iVar2 + 1) {
    iVar1 = iVar2 + 1;
  }
  reserve(this,(long)iVar1);
  iVar1 = *(int *)(this + 4);
  plVar5 = *(long **)(this + 0x48);
                    /* try { // try from 00320748 to 0042074b has its CatchHandler @ 00320050 */
  lVar3 = *plVar5;
joined_r0x003207c0:
  if (iVar1 < 1) {
    __n = 0;
  }
  else {
    __n = plVar5[(long)iVar1 + -1];
  }
  memcpy((void *)(*(long *)(this + 0x10) + lVar3 * iVar2),param_1,__n);
  lVar3 = *(long *)(this + 0x20);
  uVar4 = **(ulong **)(this + 0x48);
  **(int **)(this + 0x40) = iVar2 + 1;
  *(ulong *)(this + 0x20) = lVar3 + uVar4;
  if (__n < uVar4) {
    *(uint *)this = *(uint *)this & 0xffffbfff;
  }
  return;
}


==================================================================

### FUNC 003207cc (240 bytes) name=resize

/* cv::Mat::resize(unsigned long) */

void __thiscall cv::Mat::resize(Mat *this,ulong param_1)

{
  int iVar1;
  undefined8 uVar2;
  long lVar3;
  char *pcVar4;
  int iVar5;
  long lVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar1 = **(int **)(this + 0x40);
  iVar5 = (int)param_1;
  if (iVar5 != iVar1) {
    if (iVar5 < 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar4 = (char *)String::allocate((String *)&local_10,0x10);
      uVar2 = s__int_nelems_>__0_0046aed0._8_8_;
                    /* try { // try from 0032089c to 0042089f has its CatchHandler @ 00320b24 */
      *(undefined8 *)pcVar4 = s__int_nelems_>__0_0046aed0._0_8_;
      *(undefined8 *)(pcVar4 + 8) = uVar2;
                    /* try { // try from 003208a4 to 004208a7 has its CatchHandler @ 00320b58 */
      error(-0xd7,(String *)&local_10,"void cv::Mat::resize(size_t)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x308);
      String::deallocate((String *)&local_10);
    }
                    /* try { // try from 00320858 to 0042085b has its CatchHandler @ 00320b58 */
    if (((*(uint *)this >> 0xf & 1) != 0) ||
       (lVar3 = **(long **)(this + 0x48),
       *(ulong *)(this + 0x28) < *(long *)(this + 0x10) + param_1 * lVar3)) {
      reserve(this,param_1);
      lVar3 = **(long **)(this + 0x48);
    }
    lVar6 = *(long *)(this + 0x20);
    **(int **)(this + 0x40) = iVar5;
    *(long *)(this + 0x20) = lVar6 + lVar3 * (iVar5 - iVar1);
  }
  return;
}


==================================================================

### FUNC 003208d0 (280 bytes) name=resize

/* cv::Mat::resize(unsigned long, cv::Scalar_<double> const&) */

void __thiscall cv::Mat::resize(Mat *this,ulong param_1,Scalar_ *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_70;
  undefined4 local_6c;
  int local_68;
  int local_64;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar4 = **(int **)(this + 0x40);
  resize(this,param_1);
  local_64 = **(int **)(this + 0x40);
  if (iVar4 < local_64) {
                    /* try { // try from 00320920 to 00420923 has its CatchHandler @ 00320b58 */
    local_70 = 0x80000000;
    local_6c = 0x7fffffff;
    local_68 = iVar4;
    Mat(aMStack_60,this,(Range *)&local_68,(Range *)&local_70);
    operator=(aMStack_60,param_2);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
                    /* try { // try from 00320990 to 00420993 has its CatchHandler @ 00320b60 */
    local_48 = 0;
    if (0 < local_5c) {
                    /* try { // try from 0032099c to 0042099f has its CatchHandler @ 00320b68 */
      iVar4 = 0;
      do {
        *local_20 = 0;
        iVar4 = iVar4 + 1;
        local_20 = local_20 + 1;
      } while (iVar4 < local_5c);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
      return;
    }
  }
                    /* try { // try from 0032090c to 0042090f has its CatchHandler @ 00320abc */
                    /* try { // try from 00320914 to 00420917 has its CatchHandler @ 00320b60 */
  return;
}


==================================================================

### FUNC 00320a10 (1648 bytes) name=push_back

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::push_back(cv::Mat const&) */

void __thiscall cv::Mat::push_back(Mat *this,Mat *param_1)

{
  long lVar1;
  int iVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  int *piVar7;
  void *__dest;
  uint uVar8;
  ulong uVar9;
  undefined8 *puVar10;
  int *piVar11;
  long lVar12;
  long lVar13;
  undefined4 *puVar14;
  int *piVar15;
  undefined4 local_80;
  undefined4 local_7c;
  int local_78;
  int local_74;
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  long local_50;
  long lStack_48;
  long local_40;
  long lStack_38;
  long local_30;
  long lStack_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  piVar11 = *(int **)(param_1 + 0x40);
  piVar15 = *(int **)(this + 0x40);
  iVar6 = *piVar11;
  iVar2 = *piVar15;
  if (iVar6 == 0) {
    return;
  }
  if (this == param_1) {
    uStack_58 = *(undefined8 *)(this + 8);
    local_60 = *(ulong *)this;
    local_18 = &local_10;
    local_50 = *(long *)(this + 0x10);
    lStack_48 = *(long *)(this + 0x18);
    local_20 = &uStack_58;
    local_40 = *(long *)(this + 0x20);
    lStack_38 = *(long *)(this + 0x28);
    local_30 = *(long *)(this + 0x30);
    lStack_28 = *(long *)(this + 0x38);
    uStack_8 = 0;
    local_10 = 0;
    iVar6 = *(int *)(this + 4);
    if (lStack_28 != 0) {
      piVar11 = (int *)(lStack_28 + 0x14);
      do {
                    /* try { // try from 00320dd4 to 00420dd7 has its CatchHandler @ 00320fd8 */
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar5) {
          *piVar11 = *piVar11 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      iVar6 = *(int *)(this + 4);
    }
    if (iVar6 < 3) {
      local_10 = **(undefined8 **)(this + 0x48);
      uStack_8 = (*(undefined8 **)(this + 0x48))[1];
    }
    else {
      local_60 = local_60 & 0xffffffff;
      copySize((Mat *)&local_60,this);
                    /* catch() { ... } // from try @ 00320ca0 with catch @ 0032105c
                       catch() { ... } // from try @ 00320cd8 with catch @ 0032105c */
    }
    push_back(this,(Mat *)&local_60);
    if (lStack_28 != 0) {
      piVar11 = (int *)(lStack_28 + 0x14);
      do {
        iVar6 = *piVar11;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar5) {
          *piVar11 = iVar6 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar6 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
                    /* try { // try from 00320e48 to 00420e4b has its CatchHandler @ 00321020 */
    if (0 < local_60._4_4_) {
      iVar6 = 0;
      puVar10 = local_20;
      do {
        *(undefined4 *)puVar10 = 0;
        iVar6 = iVar6 + 1;
        puVar10 = (undefined8 *)((long)puVar10 + 4);
      } while (iVar6 < local_60._4_4_);
    }
    goto LAB_00320c08;
  }
  local_50 = *(long *)(this + 0x10);
  if (local_50 == 0) {
    local_78 = 0x2010000;
    local_18 = &local_10;
    local_20 = &uStack_58;
    local_68 = 0;
    local_64 = 0;
    uStack_58 = _LAB_00321148;
    local_60 = _DAT_00321140;
                    /* try { // try from 00320ebc to 00420ee3 has its CatchHandler @ 00320b80 */
    uStack_8 = 0;
    local_10 = 0;
    local_70 = (Mat *)&local_60;
    lStack_48 = local_50;
    local_40 = local_50;
    lStack_38 = local_50;
    local_30 = local_50;
    lStack_28 = local_50;
    copyTo(param_1,(_OutputArray *)&local_78);
    if (lStack_28 != 0) {
      piVar11 = (int *)(lStack_28 + 0x14);
      do {
                    /* try { // try from 00320eec to 00420eef has its CatchHandler @ 00321020 */
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar5) {
          *piVar11 = *piVar11 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
                    /* try { // try from 00320ef8 to 00420f0f has its CatchHandler @ 00320fd8 */
    if (*(long *)(this + 0x38) != 0) {
      piVar11 = (int *)(*(long *)(this + 0x38) + 0x14);
      do {
        iVar6 = *piVar11;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar5) {
          *piVar11 = iVar6 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar6 == 1) {
        deallocate(this);
      }
    }
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    if (*(int *)(this + 4) < 1) {
      *(undefined4 *)this = (undefined4)local_60;
LAB_00320f68:
      if (2 < local_60._4_4_) goto LAB_0032103c;
      *(int *)(this + 4) = local_60._4_4_;
      puVar10 = *(undefined8 **)(this + 0x48);
      *(undefined4 *)(this + 8) = (undefined4)uStack_58;
      *(undefined4 *)(this + 0xc) = uStack_58._4_4_;
      *puVar10 = *local_18;
      puVar10[1] = local_18[1];
    }
    else {
      iVar6 = 0;
      puVar14 = *(undefined4 **)(this + 0x40);
      do {
        *puVar14 = 0;
        iVar6 = iVar6 + 1;
        puVar14 = puVar14 + 1;
      } while (iVar6 < *(int *)(this + 4));
      *(undefined4 *)this = (undefined4)local_60;
      if (*(int *)(this + 4) < 3) goto LAB_00320f68;
LAB_0032103c:
      copySize(this,(Mat *)&local_60);
    }
    *(long *)(this + 0x18) = lStack_48;
    *(long *)(this + 0x10) = local_50;
    *(long *)(this + 0x28) = lStack_38;
    *(long *)(this + 0x20) = local_40;
    *(long *)(this + 0x38) = lStack_28;
    *(long *)(this + 0x30) = local_30;
    if (lStack_28 != 0) {
                    /* catch() { ... } // from try @ 00320dd4 with catch @ 00320fd8
                       catch() { ... } // from try @ 00320ef8 with catch @ 00320fd8 */
      piVar11 = (int *)(lStack_28 + 0x14);
      do {
        iVar6 = *piVar11;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar5) {
          *piVar11 = iVar6 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar6 == 1) {
        deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
                    /* try { // try from 0032101c to 0042101f has its CatchHandler @ 00320b80 */
                    /* catch() { ... } // from try @ 00320bdc with catch @ 00321020
                       catch() { ... } // from try @ 00320e48 with catch @ 00321020
                       catch() { ... } // from try @ 00320eec with catch @ 00321020 */
      iVar6 = 0;
      puVar10 = local_20;
      do {
        *(undefined4 *)puVar10 = 0;
                    /* catch() { ... } // from try @ 00320cd0 with catch @ 00321028 */
        iVar6 = iVar6 + 1;
        puVar10 = (undefined8 *)((long)puVar10 + 4);
      } while (iVar6 < local_60._4_4_);
    }
    goto LAB_00320c08;
  }
  *piVar15 = iVar6;
  iVar3 = piVar15[-1];
                    /* try { // try from 00320a5c to 00420a6b has its CatchHandler @ 00320b60 */
  if (iVar3 == piVar11[-1]) {
    if (iVar3 == 2) {
      if ((iVar6 != *piVar11) || (piVar15[1] != piVar11[1])) goto LAB_00320a60;
      *piVar15 = iVar2;
    }
    else {
      if (0 < iVar3) {
        if (iVar6 == *piVar11) {
          piVar7 = piVar15;
          do {
            piVar11 = piVar11 + 1;
            if (piVar7 == piVar15 + (iVar3 - 1)) goto LAB_00320c78;
            piVar7 = piVar7 + 1;
          } while (*piVar7 == *piVar11);
        }
        goto LAB_00320a60;
      }
LAB_00320c78:
      *piVar15 = iVar2;
    }
  }
  else {
LAB_00320a60:
    *piVar15 = iVar2;
    local_60 = 0;
    uStack_58 = 0;
    String::allocate((String *)&local_60,0);
    error(-0xd1,(String *)&local_60,"void cv::Mat::push_back(const cv::Mat&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x335);
    String::deallocate((String *)&local_60);
  }
                    /* try { // try from 00320aa4 to 00420aa7 has its CatchHandler @ 00320050 */
  uVar8 = *(uint *)this;
                    /* try { // try from 00320ab4 to 00420ab7 has its CatchHandler @ 00320b58 */
  if ((uVar8 & 0xfff) != (*(uint *)param_1 & 0xfff)) {
                    /* catch() { ... } // from try @ 0032090c with catch @ 00320abc */
    local_60 = 0;
    uStack_58 = 0;
    String::allocate((String *)&local_60,0);
    error(-0xcd,(String *)&local_60,"void cv::Mat::push_back(const cv::Mat&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x337);
    String::deallocate((String *)&local_60);
    uVar8 = *(uint *)this;
  }
  if ((uVar8 >> 0xf & 1) == 0) {
    lVar12 = **(long **)(this + 0x48);
    uVar9 = *(long *)(this + 0x20) + iVar6 * lVar12;
                    /* try { // try from 00320b20 to 00420b23 has its CatchHandler @ 00320050 */
    if (*(ulong *)(this + 0x28) < uVar9) goto LAB_00320c84;
  }
  else {
LAB_00320c84:
    iVar3 = (iVar2 * 3 + 1) / 2;
                    /* try { // try from 00320ca0 to 00420ca3 has its CatchHandler @ 0032105c */
    if (iVar3 < iVar2 + iVar6) {
      iVar3 = iVar2 + iVar6;
    }
    reserve(this,(long)iVar3);
    lVar12 = **(long **)(this + 0x48);
    uVar9 = *(long *)(this + 0x20) + iVar6 * lVar12;
  }
                    /* catch() { ... } // from try @ 0032089c with catch @ 00320b24 */
  **(int **)(this + 0x40) = **(int **)(this + 0x40) + iVar6;
                    /* catch() { ... } // from try @ 003202d4 with catch @ 00320b34 */
  *(ulong *)(this + 0x20) = uVar9;
                    /* catch() { ... } // from try @ 003205bc with catch @ 00320b44 */
  if (((*(uint *)this >> 0xe & 1) != 0) && ((*(uint *)param_1 >> 0xe & 1) != 0)) {
    iVar6 = *(int *)(param_1 + 4);
                    /* try { // try from 00320cd0 to 00420cd3 has its CatchHandler @ 00321028 */
                    /* try { // try from 00320cd8 to 00420d63 has its CatchHandler @ 0032105c */
    __dest = (void *)(*(long *)(this + 0x10) + lVar12 * iVar2);
    if (iVar6 < 3) {
      lVar13 = (long)*(int *)(param_1 + 0xc) * (long)*(int *)(param_1 + 8);
      if (iVar6 < 1) {
        memcpy(__dest,*(void **)(param_1 + 0x10),0);
        return;
      }
    }
    else {
      lVar12 = 0;
      lVar13 = 1;
      do {
        lVar1 = lVar12 * 4;
        lVar12 = lVar12 + 1;
        lVar13 = lVar13 * *(int *)(*(long *)(param_1 + 0x40) + lVar1);
      } while ((int)lVar12 < iVar6);
    }
    memcpy(__dest,*(void **)(param_1 + 0x10),
           lVar13 * *(long *)(*(long *)(param_1 + 0x48) + (long)iVar6 * 8 + -8));
    return;
  }
                    /* catch() { ... } // from try @ 0032010c with catch @ 00320b58
                       catch() { ... } // from try @ 003204b8 with catch @ 00320b58
                       catch() { ... } // from try @ 00320570 with catch @ 00320b58
                       catch() { ... } // from try @ 003205c4 with catch @ 00320b58
                       catch() { ... } // from try @ 003206cc with catch @ 00320b58
                       catch() { ... } // from try @ 00320858 with catch @ 00320b58
                       catch() { ... } // from try @ 003208a4 with catch @ 00320b58
                       catch() { ... } // from try @ 00320920 with catch @ 00320b58
                       catch() { ... } // from try @ 00320ab4 with catch @ 00320b58 */
  local_80 = 0x80000000;
                    /* catch() { ... } // from try @ 0032022c with catch @ 00320b60
                       catch() { ... } // from try @ 003202dc with catch @ 00320b60
                       catch() { ... } // from try @ 003208c8 with catch @ 00320b60
                       catch() { ... } // from try @ 00320914 with catch @ 00320b60
                       catch() { ... } // from try @ 00320990 with catch @ 00320b60
                       catch() { ... } // from try @ 00320a5c with catch @ 00320b60 */
                    /* catch() { ... } // from try @ 00320444 with catch @ 00320b68
                       catch() { ... } // from try @ 003206a0 with catch @ 00320b68
                       catch() { ... } // from try @ 0032099c with catch @ 00320b68 */
  local_74 = iVar2 + iVar6;
  local_7c = 0x7fffffff;
  local_78 = iVar2;
  Mat((Mat *)&local_60,this,(Range *)&local_78,(Range *)&local_80);
                    /* catch() { ... } // from try @ 00320bc0 with catch @ 00320b80
                       catch() { ... } // from try @ 00320ebc with catch @ 00320b80
                       catch() { ... } // from try @ 0032101c with catch @ 00320b80 */
  local_68 = 0;
  local_64 = 0;
  local_78 = 0x2010000;
  local_70 = (Mat *)&local_60;
  copyTo(param_1,(_OutputArray *)&local_78);
  if (lStack_28 != 0) {
    piVar11 = (int *)(lStack_28 + 0x14);
    do {
      iVar6 = *piVar11;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar5) {
        *piVar11 = iVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
                    /* try { // try from 00320bc0 to 00420bc3 has its CatchHandler @ 00320b80 */
    if (iVar6 == 1) {
      deallocate((Mat *)&local_60);
    }
  }
                    /* try { // try from 00320bdc to 00420bdf has its CatchHandler @ 00321020 */
  if (0 < local_60._4_4_) {
    iVar6 = 0;
    puVar10 = local_20;
    do {
      *(undefined4 *)puVar10 = 0;
      iVar6 = iVar6 + 1;
      puVar10 = (undefined8 *)((long)puVar10 + 4);
    } while (iVar6 < local_60._4_4_);
  }
LAB_00320c08:
  lStack_28 = 0;
  lStack_38 = 0;
  local_40 = 0;
  lStack_48 = 0;
  local_50 = 0;
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00321150 (6104 bytes) name=cvarrToMat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::cvarrToMat(void const*, bool, bool, int, cv::AutoBuffer<double, 136ul>*) */

void __thiscall
cv::cvarrToMat(cv *this,void *param_1,bool param_2,bool param_3,int param_4,AutoBuffer *param_5)

{
  int *piVar1;
  long *plVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  ulong uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  uint uVar15;
  char *pcVar16;
  undefined4 *puVar17;
  undefined8 *puVar18;
  long lVar19;
  undefined8 *puVar20;
  ulong uVar21;
  ulong *puVar22;
  undefined8 *puVar23;
  int iVar24;
  long lVar25;
  int *piVar26;
  long lVar27;
  int iVar28;
  uint uVar29;
  long lVar30;
  int iVar31;
  long *plVar32;
  Mat *in_x8;
  Mat *pMVar33;
  ulong uVar34;
  ulong uVar35;
  undefined4 uVar36;
  undefined4 uVar37;
  undefined4 uVar38;
  undefined4 uVar39;
  undefined8 local_208;
  undefined8 local_200;
  undefined8 local_1f8;
  undefined8 local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 local_1d8;
  long local_1d0;
  undefined8 local_1c8;
  long local_1c0;
  long local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  undefined8 uStack_148;
  undefined8 local_140;
  undefined8 uStack_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 *local_f0;
  undefined8 *puStack_e8;
  undefined8 *local_e0;
  undefined8 *puStack_d8;
  undefined8 *local_d0;
  undefined8 *puStack_c8;
  undefined8 *local_c0;
  ulong *puStack_b8;
  ulong local_b0;
  ulong uStack_a8;
  long local_a0;
  long lStack_98;
  long local_90;
  long lStack_88;
  long local_80;
  long lStack_78;
  long local_70;
  long lStack_68;
  long local_60;
  long lStack_58;
  long local_50;
  long lStack_48;
  long local_40;
  long lStack_38;
  long local_30;
  long lStack_28;
  long local_20;
  long lStack_18;
  long local_10;
  long lStack_8;
  
  puVar23 = (undefined8 *)(ulong)(uint)param_4;
  if (this == (cv *)0x0) {
    *(undefined8 *)(in_x8 + 0x10) = 0;
    uVar8 = _UNK_00322ad8;
    uVar7 = _DAT_00322ad0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 8) = uVar8;
    *(undefined8 *)in_x8 = uVar7;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    return;
  }
  uVar15 = *(uint *)this;
  uVar29 = uVar15 & 0xffff0000;
  if (uVar29 == 0x42420000) {
    iVar14 = *(int *)(this + 0x24);
                    /* try { // try from 003212a8 to 004212ab has its CatchHandler @ 0032133c */
    if ((iVar14 < 0) || (iVar24 = *(int *)(this + 0x20), iVar24 < 0)) {
LAB_003211bc:
      if (uVar29 == 0x42990000) {
        iVar14 = *(int *)(this + 0x28);
        iVar24 = *(int *)(this + 0x2c);
        if (iVar14 == 0) {
          *(undefined8 *)(in_x8 + 0x10) = 0;
          uVar8 = _UNK_00322ad8;
          uVar7 = _DAT_00322ad0;
          *(undefined8 *)(in_x8 + 0x18) = 0;
          *(undefined8 *)(in_x8 + 0x20) = 0;
          *(undefined8 *)(in_x8 + 0x28) = 0;
          *(undefined8 *)(in_x8 + 0x30) = 0;
          *(undefined8 *)(in_x8 + 8) = uVar8;
          *(undefined8 *)in_x8 = uVar7;
          *(undefined8 *)(in_x8 + 0x38) = 0;
          *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
          *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
          *(undefined8 *)(in_x8 + 0x58) = 0;
          *(undefined8 *)(in_x8 + 0x50) = 0;
          return;
        }
        if ((iVar14 < 1) ||
           ((uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3) !=
            iVar24)) {
          local_100 = (int *)0x0;
          uStack_f8 = (int *)0x0;
          puVar18 = (undefined8 *)String::allocate((String *)&local_100,0x2c);
          uVar36 = DAT_0046afa0;
          uVar11 = _LAB_0046af90;
          uVar10 = DAT_0046af88;
          uVar8 = DAT_0046af80;
          uVar7 = DAT_0046af78;
          puVar18[4] = DAT_0046af98;
          *(undefined4 *)(puVar18 + 5) = uVar36;
          *puVar18 = uVar7;
          puVar18[1] = uVar8;
          puVar18[2] = uVar10;
          puVar18[3] = uVar11;
          error(-0xd7,(String *)&local_100,
                "cv::Mat cv::cvarrToMat(const CvArr*, bool, bool, int, cv::AutoBuffer<double>*)",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x361);
          String::deallocate((String *)&local_100);
        }
        if ((((ulong)param_1 & 0xff) == 0) &&
           (lVar19 = *(long *)(this + 0x58), lVar19 == *(long *)(lVar19 + 8))) {
          lVar19 = *(long *)(lVar19 + 0x18);
          iVar24 = (uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3);
          *(undefined4 *)(in_x8 + 4) = 2;
          *(long *)(in_x8 + 0x10) = lVar19;
          *(long *)(in_x8 + 0x18) = lVar19;
          puVar18 = (undefined8 *)(lVar19 + (long)iVar24 * (long)iVar14);
          *(int *)(in_x8 + 8) = iVar14;
          *(undefined4 *)(in_x8 + 0xc) = 1;
          *(undefined8 *)(in_x8 + 0x30) = 0;
          *(undefined8 *)(in_x8 + 0x38) = 0;
        }
        else {
          if (puVar23 == (undefined8 *)0x0) {
            puStack_b8 = &local_b0;
            local_c0 = &uStack_f8;
            local_180 = CONCAT44(1,iVar14);
            uStack_f8 = (int *)_UNK_00322ad8;
            local_100 = (int *)_DAT_00322ad0;
            uStack_a8 = 0;
            local_b0 = 0;
            local_f0 = puVar23;
            puStack_e8 = puVar23;
            local_e0 = puVar23;
            puStack_d8 = puVar23;
            local_d0 = puVar23;
            puStack_c8 = puVar23;
            Mat::create((Mat *)&local_100,2,(int *)&local_180,uVar15 & 0xfff);
            cvCvtSeqToArray(this,local_f0,0x3fffffff00000000);
            *(undefined8 **)(in_x8 + 0x10) = local_f0;
            *(undefined8 **)(in_x8 + 0x18) = puStack_e8;
            *(int **)(in_x8 + 8) = uStack_f8;
            *(int **)in_x8 = local_100;
            *(undefined8 **)(in_x8 + 0x20) = local_e0;
            *(undefined8 **)(in_x8 + 0x28) = puStack_d8;
            *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
            *(undefined8 **)(in_x8 + 0x30) = local_d0;
            *(undefined8 **)(in_x8 + 0x38) = puStack_c8;
            *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
            *(undefined8 *)(in_x8 + 0x58) = 0;
            *(undefined8 *)(in_x8 + 0x50) = 0;
            if (puStack_c8 != (undefined8 *)0x0) {
              piVar26 = (int *)((long)puStack_c8 + 0x14);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
                if (bVar5) {
                  *piVar26 = *piVar26 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (local_100._4_4_ < 3) {
              puVar22 = *(ulong **)(in_x8 + 0x48);
              *puVar22 = *puStack_b8;
              puVar22[1] = puStack_b8[1];
            }
            else {
              *(undefined4 *)(in_x8 + 4) = 0;
              Mat::copySize(in_x8,(Mat *)&local_100);
            }
            if (puStack_c8 != (undefined8 *)0x0) {
              piVar26 = (int *)((long)puStack_c8 + 0x14);
              do {
                iVar14 = *piVar26;
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
                if (bVar5) {
                  *piVar26 = iVar14 + -1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
              if (iVar14 == 1) {
                Mat::deallocate((Mat *)&local_100);
              }
            }
            puStack_c8 = (undefined8 *)0x0;
            local_f0 = (undefined8 *)0x0;
            puStack_d8 = (undefined8 *)0x0;
            local_e0 = (undefined8 *)0x0;
            puStack_e8 = (undefined8 *)0x0;
            if (0 < local_100._4_4_) {
              iVar14 = 0;
              puVar23 = local_c0;
              do {
                *(undefined4 *)puVar23 = 0;
                iVar14 = iVar14 + 1;
                puVar23 = (undefined8 *)((long)puVar23 + 4);
              } while (iVar14 < local_100._4_4_);
            }
            if (puStack_b8 == &local_b0) {
              return;
            }
            fastFree(puStack_b8);
            return;
          }
          uVar35 = (long)iVar24 * (long)iVar14 + 7U >> 3;
          if ((ulong)puVar23[1] < uVar35) {
            puVar18 = puVar23 + 2;
            puVar20 = (undefined8 *)*puVar23;
            if (puVar20 != puVar18) {
              if (puVar20 != (void *)0x0) {
                operator_delete__(puVar20);
              }
              *puVar23 = puVar18;
              puVar23[1] = 0x88;
            }
            if (0x88 < uVar35) {
              uVar21 = uVar35 << 3;
              if (0xfe0000000000000 < uVar35) {
                uVar21 = 0xffffffffffffffff;
              }
              puVar18 = operator_new__(uVar21);
              puVar23[1] = uVar35;
              *puVar23 = puVar18;
            }
          }
          else {
            puVar23[1] = uVar35;
            puVar18 = (undefined8 *)*puVar23;
          }
          cvCvtSeqToArray(this,puVar18,0x3fffffff00000000);
          *(undefined8 **)(in_x8 + 0x10) = puVar18;
          iVar24 = (uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3);
          *(undefined4 *)(in_x8 + 4) = 2;
          *(undefined8 **)(in_x8 + 0x18) = puVar18;
          puVar18 = (undefined8 *)((long)puVar18 + (long)iVar24 * (long)iVar14);
          *(int *)(in_x8 + 8) = iVar14;
          *(undefined4 *)(in_x8 + 0xc) = 1;
          *(undefined8 *)(in_x8 + 0x30) = 0;
          *(undefined8 *)(in_x8 + 0x38) = 0;
        }
        *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
        *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
        *(uint *)in_x8 = (uVar15 & 0xfff) + 0x42ff0000 | 0x4000;
        *(long *)(in_x8 + 0x50) = (long)iVar24;
        *(long *)(in_x8 + 0x58) = (long)iVar24;
        *(undefined8 **)(in_x8 + 0x28) = puVar18;
        *(undefined8 **)(in_x8 + 0x20) = puVar18;
        return;
      }
LAB_003211c8:
      local_100 = (int *)0x0;
      uStack_f8 = (int *)0x0;
      pcVar16 = (char *)String::allocate((String *)&local_100,0x12);
      uVar8 = s_Unknown_array_type_0046afa8._8_8_;
      uVar7 = s_Unknown_array_type_0046afa8._0_8_;
                    /* try { // try from 00321204 to 00421207 has its CatchHandler @ 0032133c */
      *(undefined2 *)(pcVar16 + 0x10) = s_Unknown_array_type_0046afa8._16_2_;
      *(undefined8 *)pcVar16 = uVar7;
      *(undefined8 *)(pcVar16 + 8) = uVar8;
      error(-5,(String *)&local_100,
            "cv::Mat cv::cvarrToMat(const CvArr*, bool, bool, int, cv::AutoBuffer<double>*)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x370);
      String::deallocate((String *)&local_100);
      *(undefined4 *)(in_x8 + 4) = 0;
      *(undefined4 *)(in_x8 + 8) = 0;
      *(undefined4 *)in_x8 = 0x42ff0000;
      *(undefined4 *)(in_x8 + 0xc) = 0;
      *(undefined8 *)(in_x8 + 0x10) = 0;
      *(undefined8 *)(in_x8 + 0x18) = 0;
      *(undefined8 *)(in_x8 + 0x20) = 0;
      *(undefined8 *)(in_x8 + 0x28) = 0;
      *(undefined8 *)(in_x8 + 0x30) = 0;
      *(undefined8 *)(in_x8 + 0x38) = 0;
      *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
      *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
      *(undefined8 *)(in_x8 + 0x58) = 0;
      *(undefined8 *)(in_x8 + 0x50) = 0;
      return;
    }
    *(undefined8 *)(in_x8 + 0x10) = 0;
    uVar8 = _UNK_00322ad8;
    uVar7 = _DAT_00322ad0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 8) = uVar8;
    *(undefined8 *)in_x8 = uVar7;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    if (((ulong)param_1 & 0xff) == 0) {
      *(undefined4 *)(in_x8 + 4) = 2;
      *(uint *)in_x8 = (uVar15 & 0x4fff) + 0x42ff0000;
      *(int *)(in_x8 + 8) = iVar24;
      *(int *)(in_x8 + 0xc) = iVar14;
      iVar28 = (uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3);
      lVar30 = (long)*(int *)(this + 4);
      lVar27 = 0;
      lVar25 = *(long *)(this + 0x18);
                    /* catch() { ... } // from try @ 003210cc with catch @ 0032133c
                       catch() { ... } // from try @ 00321204 with catch @ 0032133c
                       catch() { ... } // from try @ 003212a8 with catch @ 0032133c */
      *(long *)(in_x8 + 0x10) = lVar25;
      *(long *)(in_x8 + 0x18) = lVar25;
      lVar19 = (long)iVar28 * (long)iVar14;
      if (lVar30 != 0) {
        lVar27 = lVar19 - lVar30;
        lVar19 = lVar30;
      }
      *(long *)(in_x8 + 0x50) = lVar19;
                    /* try { // try from 00321360 to 00421363 has its CatchHandler @ 00321064 */
      *(long *)(in_x8 + 0x58) = (long)iVar28;
                    /* catch() { ... } // from try @ 00321140 with catch @ 00321364 */
      lVar25 = lVar25 + lVar19 * iVar24;
      *(long *)(in_x8 + 0x28) = lVar25;
      *(long *)(in_x8 + 0x20) = lVar25 + lVar27;
      return;
    }
    local_100._0_4_ = (uVar15 & 0xfff) + 0x42ff0000;
    local_f0 = *(undefined8 **)(this + 0x18);
    uVar35 = (ulong)*(int *)(this + 4);
    iVar28 = (uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3);
    local_c0 = &uStack_f8;
    puStack_b8 = &local_b0;
    local_100._4_4_ = 2;
    uStack_f8 = (int *)CONCAT44(iVar14,iVar24);
    local_e0 = (undefined8 *)0x0;
    puStack_d8 = (undefined8 *)0x0;
    local_d0 = (undefined8 *)0x0;
    puStack_c8 = (undefined8 *)0x0;
    uStack_a8 = 0;
    local_b0 = 0;
    uVar21 = (long)iVar28 * (long)iVar14;
    puStack_e8 = local_f0;
    if (uVar35 == 0) {
      local_100 = (int *)CONCAT44(2,(uint)local_100 | 0x4000);
      lVar19 = 0;
      goto LAB_003222dc;
    }
    uVar34 = 0x88442211UL >> ((uVar15 & 7) << 2) & 0xf;
    if (iVar24 == 1) {
      uVar6 = 0;
      if (uVar34 != 0) {
        uVar6 = uVar21 / uVar34;
      }
      uVar35 = uVar21;
      if (uVar21 - uVar6 * uVar34 != 0) goto LAB_003228a0;
LAB_00322898:
      uVar29 = 0x4000;
    }
    else {
      uVar6 = 0;
      if (uVar34 != 0) {
        uVar6 = uVar35 / uVar34;
      }
      if (uVar35 != uVar6 * uVar34) {
LAB_003228a0:
        local_180 = 0;
        pMStack_178 = (Mat *)0x0;
        pcVar16 = (char *)String::allocate((String *)&local_180,0x1f);
        cVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar36 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar8 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar16 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar16 + 0x18) = uVar36;
        *(undefined2 *)(pcVar16 + 0x1c) = uVar9;
        pcVar16[0x1e] = cVar4;
        *(undefined8 *)pcVar16 = uVar7;
        *(undefined8 *)(pcVar16 + 8) = uVar8;
        error(-0xd,(String *)&local_180,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)&local_180);
        iVar24 = (int)uStack_f8;
      }
      uVar29 = 0;
      if (uVar21 - uVar35 == 0) goto LAB_00322898;
    }
    lVar19 = uVar21 - uVar35;
    local_100 = (int *)CONCAT44(local_100._4_4_,(uint)local_100 | uVar29);
    uVar21 = uVar35;
LAB_003222dc:
    *puStack_b8 = uVar21;
    puStack_b8[1] = (long)iVar28;
    puStack_d8 = (undefined8 *)((long)puStack_e8 + (long)iVar24 * uVar21);
    local_e0 = (undefined8 *)((long)puStack_d8 + lVar19);
    local_170 = 0;
    local_180 = CONCAT44(local_180._4_4_,0x2010000);
    Mat::copyTo((Mat *)&local_100,(_OutputArray *)&local_180);
    if (puStack_c8 != (undefined8 *)0x0) {
      piVar26 = (int *)((long)puStack_c8 + 0x14);
      do {
        iVar14 = *piVar26;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = iVar14 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_100);
      }
    }
    puStack_c8 = (undefined8 *)0x0;
    local_f0 = (undefined8 *)0x0;
    puStack_d8 = (undefined8 *)0x0;
    local_e0 = (undefined8 *)0x0;
    puStack_e8 = (undefined8 *)0x0;
    if (0 < local_100._4_4_) {
      iVar14 = 0;
      puVar23 = local_c0;
      do {
        *(undefined4 *)puVar23 = 0;
        iVar14 = iVar14 + 1;
        puVar23 = (undefined8 *)((long)puVar23 + 4);
      } while (iVar14 < local_100._4_4_);
    }
    if (puStack_b8 == &local_b0) {
      return;
    }
    fastFree(puStack_b8);
    return;
  }
  if (uVar29 != 0x42430000) {
    if ((uVar15 != 0x90) || (*(long *)(this + 0x58) == 0)) goto LAB_003211bc;
    piVar26 = *(int **)(this + 0x30);
    if (((!param_3) && (piVar26 != (int *)0x0)) && (0 < *piVar26)) {
      local_100 = (int *)0x0;
      uStack_f8 = (int *)0x0;
      pcVar16 = (char *)String::allocate((String *)&local_100,0x24);
      uVar11 = s_COI_is_not_supported_by_the_func_0046aee8._24_8_;
      uVar10 = s_COI_is_not_supported_by_the_func_0046aee8._16_8_;
      uVar8 = s_COI_is_not_supported_by_the_func_0046aee8._8_8_;
      uVar7 = s_COI_is_not_supported_by_the_func_0046aee8._0_8_;
                    /* try { // try from 0032189c to 0042189f has its CatchHandler @ 003219a0 */
      *(undefined4 *)(pcVar16 + 0x20) = s_COI_is_not_supported_by_the_func_0046aee8._32_4_;
      *(undefined8 *)pcVar16 = uVar7;
      *(undefined8 *)(pcVar16 + 8) = uVar8;
      *(undefined8 *)(pcVar16 + 0x10) = uVar10;
      *(undefined8 *)(pcVar16 + 0x18) = uVar11;
      error(-0x18,(String *)&local_100,
            "cv::Mat cv::cvarrToMat(const CvArr*, bool, bool, int, cv::AutoBuffer<double>*)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x358);
      String::deallocate((String *)&local_100);
      piVar26 = *(int **)(this + 0x30);
    }
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    uVar8 = _UNK_00322ae8;
    uVar7 = _DAT_00322ae0;
    pMVar33 = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 8) = uVar8;
    *(undefined8 *)in_x8 = uVar7;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
                    /* try { // try from 00321910 to 00421937 has its CatchHandler @ 003216b8 */
    *(Mat **)(in_x8 + 0x48) = pMVar33;
    uVar29 = *(uint *)(this + 0x10);
    lVar19 = (long)*(int *)(this + 0x60);
    *(undefined8 *)(in_x8 + 0x58) = 0;
    iVar14 = 0x14;
    if (-1 < (int)uVar29) {
      iVar14 = 0;
    }
    *(long *)(in_x8 + 0x50) = lVar19;
    uVar29 = 0x43160520 >> (iVar14 + ((uVar29 & 0xf0) >> 2) & 0x1f);
    if (piVar26 == (int *)0x0) {
      if (*(int *)(this + 0x1c) != 0) {
        local_100 = piVar26;
        uStack_f8 = piVar26;
        puVar23 = (undefined8 *)String::allocate((String *)&local_100,0x26);
        uVar9 = DAT_0046af34;
        uVar11 = DAT_0046af28;
        uVar10 = _LAB_0046af20;
        uVar8 = _DAT_0046af18;
        uVar7 = DAT_0046af10;
        *(undefined4 *)(puVar23 + 4) = DAT_0046af30;
        *(undefined2 *)((long)puVar23 + 0x24) = uVar9;
        *puVar23 = uVar7;
        puVar23[1] = uVar8;
        puVar23[2] = uVar10;
        puVar23[3] = uVar11;
        error(-0xd7,(String *)&local_100,"cv::Mat cv::iplImageToMat(const IplImage*, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x273);
        String::deallocate((String *)&local_100);
        pMVar33 = *(Mat **)(in_x8 + 0x48);
        lVar19 = *(long *)pMVar33;
      }
      puStack_e8 = *(undefined8 **)(this + 0x58);
      iVar14 = *(int *)(this + 0x2c);
      iVar24 = *(int *)(this + 0x28);
      uVar29 = (uVar29 & 7) + (*(int *)(this + 8) + -1) * 8 + 0x42ff0000;
      *(int *)(in_x8 + 8) = iVar14;
      *(int *)(in_x8 + 0xc) = iVar24;
      iVar28 = (uVar29 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar29 & 7) << 1)) & 3);
      *(undefined8 **)(in_x8 + 0x10) = puStack_e8;
      *(undefined8 **)(in_x8 + 0x18) = puStack_e8;
      goto LAB_003219f0;
    }
                    /* try { // try from 00321940 to 00421943 has its CatchHandler @ 003219a0 */
    iVar14 = *(int *)(this + 0x1c);
    if (iVar14 == 0) {
      iVar31 = *piVar26;
LAB_0032195c:
      bVar5 = false;
      iVar14 = (*(int *)(this + 8) + -1) * 8;
    }
    else {
                    /* catch() { ... } // from try @ 003217b8 with catch @ 00321948 */
      iVar31 = *piVar26;
      if (iVar31 == 0) {
        local_180 = 0;
        pMStack_178 = (Mat *)0x0;
        pcVar16 = (char *)String::allocate((String *)&local_180,0x3c);
        uVar36 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._56_4_;
        uVar13 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._40_8_;
        uVar12 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._32_8_;
        uVar11 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._24_8_;
        uVar10 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._16_8_;
        uVar8 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._8_8_;
        uVar7 = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._0_8_;
        *(undefined8 *)(pcVar16 + 0x30) = s_img_>dataOrder____IPL_DATA_ORDER_0046af38._48_8_;
        *(undefined4 *)(pcVar16 + 0x38) = uVar36;
        *(undefined8 *)pcVar16 = uVar7;
        *(undefined8 *)(pcVar16 + 8) = uVar8;
        *(undefined8 *)(pcVar16 + 0x10) = uVar10;
        *(undefined8 *)(pcVar16 + 0x18) = uVar11;
        *(undefined8 *)(pcVar16 + 0x20) = uVar12;
        *(undefined8 *)(pcVar16 + 0x28) = uVar13;
        error(-0xd7,(String *)&local_180,"cv::Mat cv::iplImageToMat(const IplImage*, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x27c);
        String::deallocate((String *)&local_180);
        piVar26 = *(int **)(this + 0x30);
        pMVar33 = *(Mat **)(in_x8 + 0x48);
        iVar31 = *piVar26;
        if (iVar31 == 0) {
          lVar19 = *(long *)pMVar33;
          goto LAB_0032195c;
        }
        iVar14 = *(int *)(this + 0x1c);
        lVar19 = *(long *)pMVar33;
      }
      if (iVar14 != 1) goto LAB_0032195c;
      iVar14 = 0;
      bVar5 = true;
    }
    uVar29 = (uVar29 & 7) + iVar14 + 0x42ff0000;
    iVar14 = piVar26[4];
    iVar24 = piVar26[3];
                    /* try { // try from 00321994 to 00421997 has its CatchHandler @ 003216b8 */
                    /* catch() { ... } // from try @ 0032177c with catch @ 00321998
                       catch() { ... } // from try @ 003217c0 with catch @ 00321998 */
    *(int *)(in_x8 + 8) = iVar14;
                    /* catch() { ... } // from try @ 00321728 with catch @ 003219a0
                       catch() { ... } // from try @ 0032189c with catch @ 003219a0
                       catch() { ... } // from try @ 00321940 with catch @ 003219a0 */
    iVar28 = (uVar29 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar29 & 7) << 1)) & 3);
    *(int *)(in_x8 + 0xc) = iVar24;
    lVar25 = 0;
    if (bVar5) {
      lVar25 = (long)*(int *)(this + 0x2c) * *(long *)(in_x8 + 0x50) * (long)(iVar31 + -1);
    }
    puStack_e8 = (undefined8 *)
                 (*(long *)(this + 0x58) +
                 lVar19 * piVar26[2] + (long)iVar28 * (long)piVar26[1] + lVar25);
    *(undefined8 **)(in_x8 + 0x10) = puStack_e8;
    *(undefined8 **)(in_x8 + 0x18) = puStack_e8;
LAB_003219f0:
    lVar25 = (long)iVar24 * (long)iVar28;
    puStack_d8 = (undefined8 *)((long)puStack_e8 + iVar14 * lVar19);
    *(undefined8 **)(in_x8 + 0x28) = puStack_d8;
    local_e0 = (undefined8 *)((long)puStack_e8 + (iVar14 * lVar19 - lVar19) + lVar25);
    *(undefined8 **)(in_x8 + 0x20) = local_e0;
    if ((lVar25 - lVar19 == 0) || (uVar15 = 0, iVar14 == 1)) {
      uVar15 = 0x4000;
    }
    uVar15 = uVar15 | uVar29;
    *(uint *)in_x8 = uVar15;
    *(long *)(pMVar33 + 8) = (long)iVar28;
    if (((ulong)param_1 & 0xff) == 0) {
      return;
    }
    iVar28 = *(int *)(in_x8 + 4);
    local_f0 = *(undefined8 **)(in_x8 + 0x10);
    local_c0 = &uStack_f8;
    local_d0 = *(undefined8 **)(in_x8 + 0x30);
    puStack_b8 = &local_b0;
    puStack_c8 = *(undefined8 **)(in_x8 + 0x38);
    local_100 = (int *)CONCAT44(iVar28,uVar15);
    uStack_f8 = (int *)CONCAT44(iVar24,iVar14);
    uStack_a8 = 0;
    local_b0 = 0;
    if (puStack_c8 != (undefined8 *)0x0) {
      piVar26 = (int *)((long)puStack_c8 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = *piVar26 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      iVar28 = *(int *)(in_x8 + 4);
    }
    if (iVar28 < 3) {
      local_b0 = **(ulong **)(in_x8 + 0x48);
      uStack_a8 = (*(ulong **)(in_x8 + 0x48))[1];
    }
    else {
      local_100 = (int *)(ulong)uVar15;
      Mat::copySize((Mat *)&local_100,in_x8);
    }
    if (*(long *)(in_x8 + 0x38) != 0) {
      piVar26 = (int *)(*(long *)(in_x8 + 0x38) + 0x14);
      do {
        iVar14 = *piVar26;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = iVar14 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate(in_x8);
      }
    }
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    if (0 < *(int *)(in_x8 + 4)) {
      iVar14 = 0;
      puVar17 = *(undefined4 **)(in_x8 + 0x40);
      do {
        *puVar17 = 0;
        iVar14 = iVar14 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar14 < *(int *)(in_x8 + 4));
    }
    if (((*(int **)(this + 0x30) == (int *)0x0) || (iVar14 = **(int **)(this + 0x30), iVar14 == 0))
       || (*(int *)(this + 0x1c) == 1)) {
      local_170 = 0;
      local_180 = CONCAT44(local_180._4_4_,0x2010000);
      pMStack_178 = in_x8;
      Mat::copyTo((Mat *)&local_100,(_OutputArray *)&local_180);
    }
    else {
      local_180 = (ulong)(iVar14 - 1);
      local_1e0 = (ulong)uStack_f8;
      Mat::create(in_x8,2,(int *)&local_1e0,(uint)local_100 & 0xfff);
      mixChannels((Mat *)&local_100,1,in_x8,1,(int *)&local_180,1);
    }
    if (puStack_c8 != (undefined8 *)0x0) {
      piVar26 = (int *)((long)puStack_c8 + 0x14);
      do {
        iVar14 = *piVar26;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = iVar14 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_100);
      }
    }
    puStack_c8 = (undefined8 *)0x0;
    local_f0 = (undefined8 *)0x0;
    puStack_d8 = (undefined8 *)0x0;
    local_e0 = (undefined8 *)0x0;
    puStack_e8 = (undefined8 *)0x0;
    if (0 < local_100._4_4_) {
      iVar14 = 0;
      puVar23 = local_c0;
      do {
        *(undefined4 *)puVar23 = 0;
        iVar14 = iVar14 + 1;
        puVar23 = (undefined8 *)((long)puVar23 + 4);
      } while (iVar14 < local_100._4_4_);
    }
    if (puStack_b8 == &local_b0) {
      return;
    }
    fastFree(puStack_b8);
    return;
  }
  lVar19 = *(long *)(this + 0x18);
  if (lVar19 == 0) goto LAB_003211c8;
  uVar29 = *(uint *)(this + 4);
  *(undefined4 *)(in_x8 + 4) = 0;
                    /* catch() { ... } // from try @ 003210fc with catch @ 00321394
                       catch() { ... } // from try @ 00321148 with catch @ 00321394 */
  *(undefined4 *)(in_x8 + 8) = 0;
                    /* catch() { ... } // from try @ 0032140c with catch @ 0032139c
                       catch() { ... } // from try @ 00321450 with catch @ 0032139c
                       catch() { ... } // from try @ 003214c8 with catch @ 0032139c
                       catch() { ... } // from try @ 00321530 with catch @ 0032139c
                       catch() { ... } // from try @ 00321610 with catch @ 0032139c
                       catch() { ... } // from try @ 00321678 with catch @ 0032139c
                       catch() { ... } // from try @ 0032168c with catch @ 0032139c
                       catch() { ... } // from try @ 003216a0 with catch @ 0032139c
                       catch() { ... } // from try @ 003216b4 with catch @ 0032139c */
  pMVar33 = in_x8 + 0x50;
  *(undefined4 *)(in_x8 + 0xc) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x30) = 0;
  *(undefined8 *)(in_x8 + 0x38) = 0;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = pMVar33;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  *(long *)(in_x8 + 0x10) = lVar19;
  *(long *)(in_x8 + 0x18) = lVar19;
  *(uint *)in_x8 = uVar15 & 0xfff | 0x42ff0000;
  if ((int)uVar29 < 1) {
    uVar15 = 0;
    if (0x20 < uVar29) goto LAB_003224b0;
LAB_00321c78:
    if (uVar29 != uVar15) goto LAB_00321690;
  }
  else {
    iVar14 = (uVar29 - 4 >> 2) + 1;
    uVar15 = iVar14 * 4;
    if (uVar29 - 1 < 3) {
      uVar15 = 0;
LAB_0032162c:
      iVar14 = uVar15 + 1;
      iVar24 = *(int *)(this + (long)(int)uVar15 * 8 + 0x24);
      *(undefined4 *)((long)&local_180 + (long)(int)uVar15 * 4) =
           *(undefined4 *)(this + (long)(int)uVar15 * 8 + 0x20);
      (&local_100)[(int)uVar15] = (long)iVar24;
      if (iVar14 < (int)uVar29) {
        iVar24 = uVar15 + 2;
        iVar28 = *(int *)(this + (long)iVar14 * 8 + 0x24);
        *(undefined4 *)((long)&local_180 + (long)iVar14 * 4) =
             *(undefined4 *)(this + (long)iVar14 * 8 + 0x20);
                    /* catch() { ... } // from try @ 00321608 with catch @ 00321668 */
        (&local_100)[iVar14] = (long)iVar28;
        if (iVar24 < (int)uVar29) {
                    /* try { // try from 00321678 to 0042167b has its CatchHandler @ 0032139c */
          iVar14 = *(int *)(this + (long)iVar24 * 8 + 0x24);
                    /* catch() { ... } // from try @ 00321448 with catch @ 0032167c */
          *(undefined4 *)((long)&local_180 + (long)iVar24 * 4) =
               *(undefined4 *)(this + (long)iVar24 * 8 + 0x20);
          (&local_100)[iVar24] = (long)iVar14;
        }
      }
    }
    else {
                    /* try { // try from 0032140c to 0042140f has its CatchHandler @ 0032139c */
      uVar36 = *(undefined4 *)(this + 0x28);
      uVar38 = *(undefined4 *)(this + 0x2c);
      uVar37 = *(undefined4 *)(this + 0x38);
      uVar39 = *(undefined4 *)(this + 0x3c);
      pMStack_178 = (Mat *)CONCAT17((char)((uint)uVar37 >> 0x18),
                                    CONCAT16((char)((uint)uVar37 >> 0x10),
                                             CONCAT15((char)((uint)uVar37 >> 8),
                                                      CONCAT14((char)uVar37,
                                                               *(undefined4 *)(this + 0x30)))));
      local_180 = CONCAT17((char)((uint)uVar36 >> 0x18),
                           CONCAT16((char)((uint)uVar36 >> 0x10),
                                    CONCAT15((char)((uint)uVar36 >> 8),
                                             CONCAT14((char)uVar36,*(undefined4 *)(this + 0x20)))));
                    /* try { // try from 00321448 to 0042144b has its CatchHandler @ 0032167c */
      uStack_f8 = (int *)(long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                              CONCAT16((char)((uint)uVar38 >> 0x10),
                                                       CONCAT15((char)((uint)uVar38 >> 8),
                                                                CONCAT14((char)uVar38,
                                                                         *(int *)(this + 0x24)))))
                                    >> 0x20);
      local_100 = (int *)(long)*(int *)(this + 0x24);
      puStack_e8 = (undefined8 *)
                   (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                        CONCAT16((char)((uint)uVar39 >> 0x10),
                                                 CONCAT15((char)((uint)uVar39 >> 8),
                                                          CONCAT14((char)uVar39,
                                                                   *(int *)(this + 0x34))))) >> 0x20
                              );
      local_f0 = (undefined8 *)(long)*(int *)(this + 0x34);
                    /* try { // try from 00321450 to 00421493 has its CatchHandler @ 0032139c */
      if (iVar14 != 1) {
        uVar36 = *(undefined4 *)(this + 0x48);
        uVar38 = *(undefined4 *)(this + 0x4c);
        uVar37 = *(undefined4 *)(this + 0x58);
        uVar39 = *(undefined4 *)(this + 0x5c);
        uStack_168 = CONCAT17((char)((uint)uVar37 >> 0x18),
                              CONCAT16((char)((uint)uVar37 >> 0x10),
                                       CONCAT15((char)((uint)uVar37 >> 8),
                                                CONCAT14((char)uVar37,*(undefined4 *)(this + 0x50)))
                                      ));
        local_170 = CONCAT17((char)((uint)uVar36 >> 0x18),
                             CONCAT16((char)((uint)uVar36 >> 0x10),
                                      CONCAT15((char)((uint)uVar36 >> 8),
                                               CONCAT14((char)uVar36,*(undefined4 *)(this + 0x40))))
                            );
        puStack_d8 = (undefined8 *)
                     (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                          CONCAT16((char)((uint)uVar38 >> 0x10),
                                                   CONCAT15((char)((uint)uVar38 >> 8),
                                                            CONCAT14((char)uVar38,
                                                                     *(int *)(this + 0x44))))) >>
                                0x20);
        local_e0 = (undefined8 *)(long)*(int *)(this + 0x44);
        puStack_c8 = (undefined8 *)
                     (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                          CONCAT16((char)((uint)uVar39 >> 0x10),
                                                   CONCAT15((char)((uint)uVar39 >> 8),
                                                            CONCAT14((char)uVar39,
                                                                     *(int *)(this + 0x54))))) >>
                                0x20);
        local_d0 = (undefined8 *)(long)*(int *)(this + 0x54);
        if (iVar14 != 2) {
          uVar36 = *(undefined4 *)(this + 0x68);
          uVar38 = *(undefined4 *)(this + 0x6c);
          uVar37 = *(undefined4 *)(this + 0x78);
          uVar39 = *(undefined4 *)(this + 0x7c);
                    /* try { // try from 003214c0 to 004214c3 has its CatchHandler @ 00321690 */
                    /* try { // try from 003214c8 to 004214fb has its CatchHandler @ 0032139c */
          uStack_158 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                CONCAT16((char)((uint)uVar37 >> 0x10),
                                         CONCAT15((char)((uint)uVar37 >> 8),
                                                  CONCAT14((char)uVar37,*(undefined4 *)(this + 0x70)
                                                          ))));
          local_160 = CONCAT17((char)((uint)uVar36 >> 0x18),
                               CONCAT16((char)((uint)uVar36 >> 0x10),
                                        CONCAT15((char)((uint)uVar36 >> 8),
                                                 CONCAT14((char)uVar36,*(undefined4 *)(this + 0x60))
                                                )));
          puStack_b8 = (ulong *)(long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                                     CONCAT16((char)((uint)uVar38 >> 0x10),
                                                              CONCAT15((char)((uint)uVar38 >> 8),
                                                                       CONCAT14((char)uVar38,
                                                                                *(int *)(this + 100)
                                                                               )))) >> 0x20);
          local_c0 = (undefined8 *)(long)*(int *)(this + 100);
          uStack_a8 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                           CONCAT16((char)((uint)uVar39 >> 0x10),
                                                    CONCAT15((char)((uint)uVar39 >> 8),
                                                             CONCAT14((char)uVar39,
                                                                      *(int *)(this + 0x74))))) >>
                                 0x20);
          local_b0 = (long)*(int *)(this + 0x74);
          if (iVar14 != 3) {
            uVar36 = *(undefined4 *)(this + 0x88);
            uVar38 = *(undefined4 *)(this + 0x8c);
            uVar37 = *(undefined4 *)(this + 0x98);
            uVar39 = *(undefined4 *)(this + 0x9c);
            uStack_148 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                  CONCAT16((char)((uint)uVar37 >> 0x10),
                                           CONCAT15((char)((uint)uVar37 >> 8),
                                                    CONCAT14((char)uVar37,
                                                             *(undefined4 *)(this + 0x90)))));
            local_150 = CONCAT17((char)((uint)uVar36 >> 0x18),
                                 CONCAT16((char)((uint)uVar36 >> 0x10),
                                          CONCAT15((char)((uint)uVar36 >> 8),
                                                   CONCAT14((char)uVar36,
                                                            *(undefined4 *)(this + 0x80)))));
            lStack_98 = (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                             CONCAT16((char)((uint)uVar38 >> 0x10),
                                                      CONCAT15((char)((uint)uVar38 >> 8),
                                                               CONCAT14((char)uVar38,
                                                                        *(int *)(this + 0x84))))) >>
                                   0x20);
            local_a0 = (long)*(int *)(this + 0x84);
            lStack_88 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                             CONCAT16((char)((uint)uVar39 >> 0x10),
                                                      CONCAT15((char)((uint)uVar39 >> 8),
                                                               CONCAT14((char)uVar39,
                                                                        *(int *)(this + 0x94))))) >>
                                   0x20);
            local_90 = (long)*(int *)(this + 0x94);
            if (iVar14 != 4) {
              uVar36 = *(undefined4 *)(this + 0xa8);
              uVar38 = *(undefined4 *)(this + 0xac);
              uVar37 = *(undefined4 *)(this + 0xb8);
              uVar39 = *(undefined4 *)(this + 0xbc);
                    /* try { // try from 00321528 to 0042152b has its CatchHandler @ 003216a4 */
                    /* try { // try from 00321530 to 004215bb has its CatchHandler @ 0032139c */
              uStack_138 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                    CONCAT16((char)((uint)uVar37 >> 0x10),
                                             CONCAT15((char)((uint)uVar37 >> 8),
                                                      CONCAT14((char)uVar37,
                                                               *(undefined4 *)(this + 0xb0)))));
              local_140 = CONCAT17((char)((uint)uVar36 >> 0x18),
                                   CONCAT16((char)((uint)uVar36 >> 0x10),
                                            CONCAT15((char)((uint)uVar36 >> 8),
                                                     CONCAT14((char)uVar36,
                                                              *(undefined4 *)(this + 0xa0)))));
              lStack_78 = (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                               CONCAT16((char)((uint)uVar38 >> 0x10),
                                                        CONCAT15((char)((uint)uVar38 >> 8),
                                                                 CONCAT14((char)uVar38,
                                                                          *(int *)(this + 0xa4)))))
                                     >> 0x20);
              local_80 = (long)*(int *)(this + 0xa4);
              lStack_68 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                               CONCAT16((char)((uint)uVar39 >> 0x10),
                                                        CONCAT15((char)((uint)uVar39 >> 8),
                                                                 CONCAT14((char)uVar39,
                                                                          *(int *)(this + 0xb4)))))
                                     >> 0x20);
              local_70 = (long)*(int *)(this + 0xb4);
              if (iVar14 != 5) {
                uVar36 = *(undefined4 *)(this + 200);
                uVar38 = *(undefined4 *)(this + 0xcc);
                uVar37 = *(undefined4 *)(this + 0xd8);
                uVar39 = *(undefined4 *)(this + 0xdc);
                uStack_128 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                      CONCAT16((char)((uint)uVar37 >> 0x10),
                                               CONCAT15((char)((uint)uVar37 >> 8),
                                                        CONCAT14((char)uVar37,
                                                                 *(undefined4 *)(this + 0xd0)))));
                local_130 = CONCAT17((char)((uint)uVar36 >> 0x18),
                                     CONCAT16((char)((uint)uVar36 >> 0x10),
                                              CONCAT15((char)((uint)uVar36 >> 8),
                                                       CONCAT14((char)uVar36,
                                                                *(undefined4 *)(this + 0xc0)))));
                lStack_58 = (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                                 CONCAT16((char)((uint)uVar38 >> 0x10),
                                                          CONCAT15((char)((uint)uVar38 >> 8),
                                                                   CONCAT14((char)uVar38,
                                                                            *(int *)(this + 0xc4))))
                                                ) >> 0x20);
                local_60 = (long)*(int *)(this + 0xc4);
                lStack_48 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                                 CONCAT16((char)((uint)uVar39 >> 0x10),
                                                          CONCAT15((char)((uint)uVar39 >> 8),
                                                                   CONCAT14((char)uVar39,
                                                                            *(int *)(this + 0xd4))))
                                                ) >> 0x20);
                local_50 = (long)*(int *)(this + 0xd4);
                if (iVar14 != 6) {
                  uVar36 = *(undefined4 *)(this + 0xe8);
                  uVar38 = *(undefined4 *)(this + 0xec);
                  uVar37 = *(undefined4 *)(this + 0xf8);
                  uVar39 = *(undefined4 *)(this + 0xfc);
                  uStack_118 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                        CONCAT16((char)((uint)uVar37 >> 0x10),
                                                 CONCAT15((char)((uint)uVar37 >> 8),
                                                          CONCAT14((char)uVar37,
                                                                   *(undefined4 *)(this + 0xf0)))));
                  local_120 = CONCAT17((char)((uint)uVar36 >> 0x18),
                                       CONCAT16((char)((uint)uVar36 >> 0x10),
                                                CONCAT15((char)((uint)uVar36 >> 8),
                                                         CONCAT14((char)uVar36,
                                                                  *(undefined4 *)(this + 0xe0)))));
                  lStack_38 = (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                                   CONCAT16((char)((uint)uVar38 >> 0x10),
                                                            CONCAT15((char)((uint)uVar38 >> 8),
                                                                     CONCAT14((char)uVar38,
                                                                              *(int *)(this + 0xe4))
                                                                    ))) >> 0x20);
                  local_40 = (long)*(int *)(this + 0xe4);
                  lStack_28 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                                   CONCAT16((char)((uint)uVar39 >> 0x10),
                                                            CONCAT15((char)((uint)uVar39 >> 8),
                                                                     CONCAT14((char)uVar39,
                                                                              *(int *)(this + 0xf4))
                                                                    ))) >> 0x20);
                  local_30 = (long)*(int *)(this + 0xf4);
                  if (iVar14 != 7) {
                    uVar36 = *(undefined4 *)(this + 0x108);
                    uVar38 = *(undefined4 *)(this + 0x10c);
                    uVar37 = *(undefined4 *)(this + 0x118);
                    uVar39 = *(undefined4 *)(this + 0x11c);
                    /* try { // try from 00321608 to 0042160b has its CatchHandler @ 00321668 */
                    /* try { // try from 00321610 to 0042165b has its CatchHandler @ 0032139c */
                    uStack_108 = CONCAT17((char)((uint)uVar37 >> 0x18),
                                          CONCAT16((char)((uint)uVar37 >> 0x10),
                                                   CONCAT15((char)((uint)uVar37 >> 8),
                                                            CONCAT14((char)uVar37,
                                                                     *(undefined4 *)(this + 0x110)))
                                                  ));
                    local_110 = CONCAT17((char)((uint)uVar36 >> 0x18),
                                         CONCAT16((char)((uint)uVar36 >> 0x10),
                                                  CONCAT15((char)((uint)uVar36 >> 8),
                                                           CONCAT14((char)uVar36,
                                                                    *(undefined4 *)(this + 0x100))))
                                        );
                    lStack_18 = (long)(int)(CONCAT17((char)((uint)uVar38 >> 0x18),
                                                     CONCAT16((char)((uint)uVar38 >> 0x10),
                                                              CONCAT15((char)((uint)uVar38 >> 8),
                                                                       CONCAT14((char)uVar38,
                                                                                *(int *)(this + 
                                                  0x104))))) >> 0x20);
                    local_20 = (long)*(int *)(this + 0x104);
                    lStack_8 = (long)(int)(CONCAT17((char)((uint)uVar39 >> 0x18),
                                                    CONCAT16((char)((uint)uVar39 >> 0x10),
                                                             CONCAT15((char)((uint)uVar39 >> 8),
                                                                      CONCAT14((char)uVar39,
                                                                               *(int *)(this + 0x114
                                                                                       ))))) >> 0x20
                                          );
                    local_10 = (long)*(int *)(this + 0x114);
                  }
                }
              }
            }
          }
        }
      }
      if (uVar29 != uVar15) goto LAB_0032162c;
    }
                    /* try { // try from 0032168c to 0042168f has its CatchHandler @ 0032139c */
    if (0x20 < (int)uVar29) {
LAB_003224b0:
      local_1e0 = 0;
      local_1d8 = 0;
      pcVar16 = (char *)String::allocate((String *)&local_1e0,0x21);
      uVar11 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
      uVar10 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
      uVar8 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
      uVar7 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
      pcVar16[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
      *(undefined8 *)pcVar16 = uVar7;
      *(undefined8 *)(pcVar16 + 8) = uVar8;
      *(undefined8 *)(pcVar16 + 0x10) = uVar10;
      *(undefined8 *)(pcVar16 + 0x18) = uVar11;
      error(-0xd7,(String *)&local_1e0,
            "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10a);
      String::deallocate((String *)&local_1e0);
      uVar15 = *(uint *)(in_x8 + 4);
      goto LAB_00321c78;
    }
LAB_00321690:
                    /* catch() { ... } // from try @ 003214c0 with catch @ 00321690 */
    if (pMVar33 != *(Mat **)(in_x8 + 0x48)) {
                    /* try { // try from 003216a0 to 004216a3 has its CatchHandler @ 0032139c */
      fastFree(*(Mat **)(in_x8 + 0x48));
                    /* catch() { ... } // from try @ 00321528 with catch @ 003216a4 */
      *(Mat **)(in_x8 + 0x48) = pMVar33;
      *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    }
                    /* try { // try from 003216b4 to 004216b7 has its CatchHandler @ 0032139c */
    if (2 < (int)uVar29) {
      uVar35 = -(ulong)(uVar29 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar29 << 3;
      lVar19 = fastMalloc(uVar35 + (long)(int)(uVar29 + 1) * 4);
      *(long *)(in_x8 + 0x48) = lVar19;
      lVar19 = lVar19 + uVar35 + 4;
      *(long *)(in_x8 + 0x40) = lVar19;
      *(uint *)(lVar19 + -4) = uVar29;
      *(undefined4 *)(in_x8 + 0xc) = 0xffffffff;
      *(undefined4 *)(in_x8 + 8) = 0xffffffff;
    }
  }
                    /* catch() { ... } // from try @ 0032170c with catch @ 003216b8
                       catch() { ... } // from try @ 00321910 with catch @ 003216b8
                       catch() { ... } // from try @ 00321994 with catch @ 003216b8 */
  uVar15 = *(uint *)in_x8;
  *(uint *)(in_x8 + 4) = uVar29;
  iVar14 = uVar29 - 1;
  uVar35 = 0x88442211UL >> ((uVar15 & 7) << 2) & 0xf;
  uVar21 = (ulong)(int)((uVar15 >> 3 & 0x1ff) + 1 <<
                       (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3));
  if (-1 < iVar14) {
                    /* try { // try from 0032170c to 0042170f has its CatchHandler @ 003216b8 */
    lVar25 = (long)iVar14 << 3;
    lVar19 = (long)iVar14 << 2;
    iVar24 = iVar14;
                    /* try { // try from 00321728 to 0042172b has its CatchHandler @ 003219a0 */
    do {
      iVar28 = *(int *)((long)&local_180 + lVar19);
      if (iVar28 < 0) {
        local_1f8 = 0;
        local_1f0 = 0;
        puVar17 = (undefined4 *)String::allocate((String *)&local_1f8,6);
        uVar9 = DAT_0046acbc;
        *puVar17 = DAT_0046acb8;
        *(undefined2 *)(puVar17 + 1) = uVar9;
        error(-0xd7,(String *)&local_1f8,
              "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x125);
        String::deallocate((String *)&local_1f8);
      }
      uVar34 = *(ulong *)((long)&local_100 + lVar25);
      *(int *)(*(long *)(in_x8 + 0x40) + lVar19) = iVar28;
                    /* try { // try from 0032177c to 0042177f has its CatchHandler @ 00321998 */
      uVar6 = 0;
      if (uVar35 != 0) {
        uVar6 = uVar34 / uVar35;
      }
      if (uVar34 != uVar6 * uVar35) {
        local_208 = 0;
        local_200 = 0;
        pcVar16 = (char *)String::allocate((String *)&local_208,0x1f);
        cVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar36 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar8 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
                    /* try { // try from 003217b8 to 004217bb has its CatchHandler @ 00321948 */
                    /* try { // try from 003217c0 to 0042182b has its CatchHandler @ 00321998 */
        *(undefined8 *)(pcVar16 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar16 + 0x18) = uVar36;
        *(undefined2 *)(pcVar16 + 0x1c) = uVar9;
        pcVar16[0x1e] = cVar4;
        *(undefined8 *)pcVar16 = uVar7;
        *(undefined8 *)(pcVar16 + 8) = uVar8;
        error(-0xd,(String *)&local_208,
              "void cv::setSize(cv::Mat&, int, const int*, const size_t*, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",300);
        String::deallocate((String *)&local_208);
      }
      iVar28 = iVar24 + -1;
      if (iVar14 <= iVar24) {
        uVar34 = uVar21;
      }
      lVar19 = lVar19 + -4;
      *(ulong *)(*(long *)(in_x8 + 0x48) + lVar25) = uVar34;
      lVar25 = lVar25 + -8;
      iVar24 = iVar28;
    } while (iVar28 != -1);
    uVar15 = *(uint *)in_x8;
  }
  if (uVar29 == 1) {
    piVar26 = *(int **)(in_x8 + 0x40);
    *(undefined4 *)(in_x8 + 0xc) = 1;
    iVar14 = 2;
    *(undefined4 *)(in_x8 + 4) = 2;
    lVar19 = *(long *)(in_x8 + 0x48);
    iVar24 = *piVar26;
    *(ulong *)(lVar19 + 8) = uVar21;
    iVar28 = 1;
    iVar31 = 2;
    if (iVar24 < 2) goto LAB_00321cbc;
    iVar24 = 0;
  }
  else {
    iVar14 = *(int *)(in_x8 + 4);
    iVar28 = iVar14 + -1;
    if ((iVar14 < 1) || (piVar26 = *(int **)(in_x8 + 0x40), iVar31 = iVar14, 1 < *piVar26)) {
      iVar24 = 0;
    }
    else {
LAB_00321cbc:
      iVar14 = iVar31;
      iVar31 = 0;
      do {
        piVar26 = piVar26 + 1;
        iVar31 = iVar31 + 1;
        iVar24 = iVar14;
        if (iVar31 == iVar14) break;
        iVar24 = iVar31;
      } while (*piVar26 < 2);
    }
    if (iVar28 <= iVar24) {
LAB_00321d50:
      *(uint *)in_x8 = uVar15 | 0x4000;
      goto LAB_00321d58;
    }
    lVar19 = *(long *)(in_x8 + 0x48);
    piVar26 = *(int **)(in_x8 + 0x40);
  }
  iVar31 = iVar14 + -2;
  lVar25 = (long)iVar31 * 8;
  if (*(ulong *)(lVar19 + lVar25) <=
      (ulong)((long)piVar26[iVar28] * *(long *)(lVar19 + (long)iVar28 * 8))) {
    plVar32 = (long *)(lVar19 + lVar25);
    piVar26 = piVar26 + iVar31;
    do {
      if (iVar31 <= iVar24) goto LAB_00321d50;
      iVar3 = *piVar26;
      lVar19 = *plVar32;
      iVar31 = iVar31 + -1;
      puVar22 = (ulong *)(plVar32 + -1);
      plVar32 = plVar32 + -1;
      piVar26 = piVar26 + -1;
    } while (*puVar22 <= (ulong)(iVar3 * lVar19));
  }
  *(uint *)in_x8 = uVar15 & 0xffffbfff;
LAB_00321d58:
  if (2 < iVar14) {
    *(undefined4 *)(in_x8 + 0xc) = 0xffffffff;
    *(undefined4 *)(in_x8 + 8) = 0xffffffff;
  }
  local_1a8 = *(long *)(in_x8 + 0x38);
  if (local_1a8 == 0) {
    local_1d0 = *(long *)(in_x8 + 0x10);
  }
  else {
    local_1d0 = *(long *)(local_1a8 + 0x18);
    *(long *)(in_x8 + 0x10) = local_1d0;
    *(long *)(in_x8 + 0x18) = local_1d0;
  }
  if (local_1d0 == 0) {
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    local_1b8 = 0;
    local_1c0 = 0;
  }
  else {
    piVar26 = *(int **)(in_x8 + 0x40);
    plVar32 = *(long **)(in_x8 + 0x48);
    iVar24 = *piVar26;
    local_1b8 = *(long *)(in_x8 + 0x18) + (long)iVar24 * *plVar32;
    *(long *)(in_x8 + 0x28) = local_1b8;
    if (iVar24 < 1) {
      *(long *)(in_x8 + 0x20) = local_1b8;
      local_1c0 = local_1b8;
    }
    else {
      local_1c0 = local_1d0 + (long)piVar26[iVar28] * plVar32[iVar28];
      *(long *)(in_x8 + 0x20) = local_1c0;
      if (0 < iVar28) {
        lVar19 = 0;
        do {
          piVar1 = piVar26 + lVar19;
          plVar2 = plVar32 + lVar19;
          lVar19 = lVar19 + 1;
          local_1c0 = local_1c0 + (long)(*piVar1 + -1) * *plVar2;
        } while ((int)lVar19 < iVar28);
        *(long *)(in_x8 + 0x20) = local_1c0;
      }
    }
  }
  if (((ulong)param_1 & 0xff) != 0) {
    uVar29 = *(uint *)in_x8;
    local_1a0 = &local_1d8;
    local_1d8 = *(undefined8 *)(in_x8 + 8);
    local_198 = &local_190;
    local_1c8 = *(undefined8 *)(in_x8 + 0x18);
    local_1b0 = *(undefined8 *)(in_x8 + 0x30);
    local_1e0 = CONCAT44(iVar14,uVar29);
    local_188 = 0;
    local_190 = 0;
    if (local_1a8 != 0) {
      piVar26 = (int *)(local_1a8 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = *piVar26 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      iVar14 = *(int *)(in_x8 + 4);
    }
    if (iVar14 < 3) {
      local_190 = **(undefined8 **)(in_x8 + 0x48);
      local_188 = (*(undefined8 **)(in_x8 + 0x48))[1];
    }
    else {
      local_1e0 = (ulong)uVar29;
      Mat::copySize((Mat *)&local_1e0,in_x8);
    }
    if (*(long *)(in_x8 + 0x38) != 0) {
      piVar26 = (int *)(*(long *)(in_x8 + 0x38) + 0x14);
      do {
        iVar14 = *piVar26;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = iVar14 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate(in_x8);
      }
    }
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    if (0 < *(int *)(in_x8 + 4)) {
      iVar14 = 0;
      puVar17 = *(undefined4 **)(in_x8 + 0x40);
      do {
        *puVar17 = 0;
        iVar14 = iVar14 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar14 < *(int *)(in_x8 + 4));
    }
    local_1e8 = 0;
    local_1e4 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x2010000);
    Mat::copyTo((Mat *)&local_1e0,(_OutputArray *)&local_1f8);
    if (local_1a8 != 0) {
      piVar26 = (int *)(local_1a8 + 0x14);
      do {
        iVar14 = *piVar26;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar5) {
          *piVar26 = iVar14 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar14 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    local_1a8 = 0;
    local_1d0 = 0;
    local_1b8 = 0;
    local_1c0 = 0;
    local_1c8 = 0;
    if (0 < local_1e0._4_4_) {
      iVar14 = 0;
      puVar23 = local_1a0;
      do {
        *(undefined4 *)puVar23 = 0;
        iVar14 = iVar14 + 1;
        puVar23 = (undefined8 *)((long)puVar23 + 4);
      } while (iVar14 < local_1e0._4_4_);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
  }
                    /* try { // try from 00321278 to 0042129f has its CatchHandler @ 00321064 */
  return;
}


==================================================================

### FUNC 00322af0 (372 bytes) name=locateROI

/* cv::Mat::locateROI(cv::Size_<int>&, cv::Point_<int>&) const */

void __thiscall cv::Mat::locateROI(Mat *this,Size_ *param_1,Point_ *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  long lVar7;
  char *pcVar8;
  ulong *puVar9;
  ulong uVar10;
  int iVar11;
  long lVar12;
  ulong uVar13;
  int iVar14;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar14 = *(int *)(this + 4);
                    /* try { // try from 00322b10 to 00422b13 has its CatchHandler @ 00323424 */
  if (iVar14 < 3) {
    puVar9 = *(ulong **)(this + 0x48);
    uVar10 = *puVar9;
    if (uVar10 != 0) goto joined_r0x00322c38;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)String::allocate((String *)&local_10,0x18);
  uVar6 = s_dims_<__2_&&_step[0]_>_0_0046afc0._8_8_;
  uVar5 = s_dims_<__2_&&_step[0]_>_0_0046afc0._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_dims_<__2_&&_step[0]_>_0_0046afc0._16_8_;
  *(undefined8 *)pcVar8 = uVar5;
  *(undefined8 *)(pcVar8 + 8) = uVar6;
  error(-0xd7,(String *)&local_10,"void cv::Mat::locateROI(cv::Size&, cv::Point&) const",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x376);
  String::deallocate((String *)&local_10);
  iVar14 = *(int *)(this + 4);
  puVar9 = *(ulong **)(this + 0x48);
  uVar10 = *puVar9;
joined_r0x00322c38:
  if (iVar14 < 1) {
    uVar13 = 0;
    uVar4 = *(long *)(this + 0x10) - *(long *)(this + 0x18);
    lVar12 = *(long *)(this + 0x20) - *(long *)(this + 0x18);
  }
  else {
    uVar4 = *(long *)(this + 0x10) - *(long *)(this + 0x18);
    uVar13 = puVar9[(long)iVar14 + -1];
    lVar12 = *(long *)(this + 0x20) - *(long *)(this + 0x18);
  }
  if (uVar4 == 0) {
    iVar11 = 0;
    iVar14 = iVar11;
  }
  else {
    iVar14 = 0;
                    /* try { // try from 00322b4c to 00422b4f has its CatchHandler @ 0032342c */
    if (uVar10 != 0) {
      iVar14 = (int)(uVar4 / uVar10);
    }
                    /* try { // try from 00322b54 to 00422b77 has its CatchHandler @ 00323424 */
    iVar11 = 0;
    if (uVar13 != 0) {
      iVar11 = (int)((uVar4 - (long)iVar14 * uVar10) / uVar13);
    }
  }
  lVar7 = *(long *)(this + 0x50);
  iVar1 = iVar11 + *(int *)(this + 0xc);
  iVar3 = *(int *)(this + 8);
  *(int *)param_2 = iVar11;
  *(int *)(param_2 + 4) = iVar14;
  iVar11 = 0;
  if (uVar10 != 0) {
    iVar11 = (int)((lVar12 - (long)iVar1 * uVar13) / uVar10);
  }
  iVar2 = iVar11 + 1;
  if (iVar11 + 1 < iVar14 + iVar3) {
    iVar2 = iVar14 + iVar3;
  }
  *(int *)(param_1 + 4) = iVar2;
  iVar14 = 0;
  if (uVar13 != 0) {
    iVar14 = (int)((ulong)(lVar12 - (iVar2 + -1) * lVar7) / uVar13);
  }
  if (iVar1 <= iVar14) {
    iVar1 = iVar14;
  }
  *(int *)param_1 = iVar1;
                    /* try { // try from 00322bc0 to 00422bc3 has its CatchHandler @ 003233f8 */
                    /* try { // try from 00322bc8 to 00423137 has its CatchHandler @ 00323424 */
  return;
}


==================================================================

### FUNC 00322c78 (516 bytes) name=adjustROI

/* cv::Mat::adjustROI(int, int, int, int) */

Mat * __thiscall cv::Mat::adjustROI(Mat *this,int param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char *pcVar7;
  int *piVar8;
  long *plVar9;
  long lVar10;
  int local_18;
  int local_14;
  int local_10 [2];
  undefined8 local_8;
  
  iVar2 = *(int *)(this + 4);
  if ((2 < iVar2) || (**(long **)(this + 0x48) == 0)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_8 = 0;
    pcVar7 = (char *)String::allocate((String *)local_10,0x18);
    uVar6 = s_dims_<__2_&&_step[0]_>_0_0046afc0._8_8_;
    uVar5 = s_dims_<__2_&&_step[0]_>_0_0046afc0._0_8_;
    *(undefined8 *)(pcVar7 + 0x10) = s_dims_<__2_&&_step[0]_>_0_0046afc0._16_8_;
    *(undefined8 *)pcVar7 = uVar5;
    *(undefined8 *)(pcVar7 + 8) = uVar6;
    error(-0xd7,(String *)local_10,"cv::Mat& cv::Mat::adjustROI(int, int, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x38b);
    String::deallocate((String *)local_10);
    iVar2 = *(int *)(this + 4);
  }
  if (iVar2 < 1) {
    lVar10 = 0;
  }
  else {
    lVar10 = *(long *)(*(long *)(this + 0x48) + (long)iVar2 * 8 + -8);
  }
  local_10[0] = 0;
  local_10[1] = 0;
  local_14 = 0;
  local_18 = 0;
  locateROI(this,(Size_ *)&local_18,(Point_ *)local_10);
  iVar3 = local_10[1] - param_1;
  iVar2 = local_10[1] + *(int *)(this + 8) + param_2;
  if (iVar3 < 0) {
    iVar3 = 0;
  }
  if (local_14 < iVar2) {
    iVar2 = local_14;
  }
  iVar4 = local_10[0] - param_3;
  if (iVar4 < 0) {
    iVar4 = 0;
  }
  iVar1 = local_10[0] + *(int *)(this + 0xc) + param_4;
  piVar8 = *(int **)(this + 0x40);
  if (local_18 < iVar1) {
    iVar1 = local_18;
  }
  *(int *)(this + 8) = iVar2 - iVar3;
  *(long *)(this + 0x10) =
       *(long *)(this + 0x10) +
       (long)(iVar3 - local_10[1]) * *(long *)(this + 0x50) + lVar10 * (iVar4 - local_10[0]);
  *(int *)(this + 0xc) = iVar1 - iVar4;
  *piVar8 = iVar2 - iVar3;
  plVar9 = *(long **)(this + 0x48);
  piVar8[1] = *(int *)(this + 0xc);
  if ((lVar10 * *(int *)(this + 0xc) - *plVar9 != 0) && (*(int *)(this + 8) != 1)) {
    *(uint *)this = *(uint *)this & 0xffffbfff;
    return this;
  }
  *(uint *)this = *(uint *)this | 0x4000;
  return this;
}


==================================================================

### FUNC 00322e90 (1164 bytes) name=reshape

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::reshape(int, int) const */

void cv::Mat::reshape(int param_1,int param_2)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  undefined4 uVar11;
  undefined1 uVar12;
  Mat *pMVar13;
  long lVar14;
  undefined8 *puVar15;
  void *__dest;
  char *pcVar16;
  undefined8 uVar17;
  undefined8 *puVar18;
  uint in_w2;
  undefined8 uVar19;
  long lVar20;
  undefined8 uVar21;
  long lVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  Mat *in_x8;
  int iVar25;
  undefined8 uVar26;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  pMVar13 = (Mat *)(ulong)(uint)param_1;
  uVar2 = *(uint *)pMVar13;
  uVar24 = *(undefined8 *)(pMVar13 + 0x10);
  uVar26 = *(undefined8 *)(pMVar13 + 8);
  uVar23 = *(undefined8 *)(pMVar13 + 0x18);
  uVar21 = *(undefined8 *)(pMVar13 + 0x20);
  uVar19 = *(undefined8 *)(pMVar13 + 0x28);
  *(undefined8 *)in_x8 = *(undefined8 *)pMVar13;
  uVar17 = *(undefined8 *)(pMVar13 + 0x30);
  iVar25 = (uVar2 >> 3 & 0x1ff) + 1;
  lVar14 = *(long *)(pMVar13 + 0x38);
  *(undefined8 *)(in_x8 + 8) = uVar26;
  *(undefined8 *)(in_x8 + 0x10) = uVar24;
  *(undefined8 *)(in_x8 + 0x18) = uVar23;
  *(undefined8 *)(in_x8 + 0x20) = uVar21;
  *(undefined8 *)(in_x8 + 0x28) = uVar19;
  *(undefined8 *)(in_x8 + 0x30) = uVar17;
  *(long *)(in_x8 + 0x38) = lVar14;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  if (lVar14 != 0) {
    piVar1 = (int *)(lVar14 + 0x14);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  if (*(int *)(pMVar13 + 4) < 3) {
    puVar18 = *(undefined8 **)(pMVar13 + 0x48);
    puVar15 = *(undefined8 **)(in_x8 + 0x48);
    *puVar15 = *puVar18;
    puVar15[1] = puVar18[1];
  }
  else {
    *(undefined4 *)(in_x8 + 4) = 0;
    copySize(in_x8,pMVar13);
    if (2 < *(int *)(pMVar13 + 4)) {
      if ((in_w2 == 0) && (param_2 != 0)) {
        lVar14 = (long)(*(int *)(pMVar13 + 4) + -1);
        lVar20 = lVar14 * 4;
        iVar4 = iVar25 * *(int *)(*(long *)(pMVar13 + 0x40) + lVar20);
        iVar5 = 0;
        if (param_2 != 0) {
          iVar5 = iVar4 / param_2;
        }
        if (iVar4 - iVar5 * param_2 == 0) {
          uVar3 = *(uint *)in_x8;
          lVar22 = *(long *)(in_x8 + 0x40);
          uVar2 = (param_2 + -1) * 8;
          *(uint *)in_x8 = uVar3 & 0xfffff007 | uVar2;
          iVar4 = 0;
          if (param_2 != 0) {
            iVar4 = (iVar25 * *(int *)(lVar22 + lVar20)) / param_2;
          }
          *(long *)(*(long *)(in_x8 + 0x48) + lVar14 * 8) =
               (long)(int)(((uVar2 & 0xff8) >> 3) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((uVar3 & 7) << 1)) & 3));
          *(int *)(lVar22 + lVar20) = iVar4;
          return;
        }
      }
      local_50 = 0;
      local_48 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_50,9);
      uVar12 = LAB_0046aea8;
      *puVar15 = DAT_0046aea0;
      *(undefined1 *)(puVar15 + 1) = uVar12;
      error(-0xd7,(String *)&local_50,"cv::Mat cv::Mat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3c9);
      String::deallocate((String *)&local_50);
    }
  }
  if (param_2 == 0) {
    param_2 = iVar25;
  }
  iVar25 = iVar25 * *(int *)(pMVar13 + 0xc);
  if (iVar25 < param_2) {
joined_r0x00323074:
    if (in_w2 == 0) {
      in_w2 = 0;
      if (param_2 != 0) {
        in_w2 = (iVar25 * *(int *)(pMVar13 + 8)) / param_2;
      }
      goto LAB_00322f7c;
    }
  }
  else {
    iVar4 = 0;
    if (param_2 != 0) {
      iVar4 = iVar25 / param_2;
    }
    if (iVar25 - iVar4 * param_2 != 0) goto joined_r0x00323074;
LAB_00322f7c:
    if (in_w2 == 0) goto LAB_00322f80;
  }
  if (*(uint *)(pMVar13 + 8) != in_w2) {
    uVar2 = iVar25 * *(uint *)(pMVar13 + 8);
    if ((*(uint *)pMVar13 >> 0xe & 1) == 0) {
      local_40 = 0;
      local_38 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_40,0x48);
      uVar26 = DAT_00462218;
      uVar24 = DAT_00462210;
      uVar23 = DAT_00462208;
      uVar21 = DAT_00462200;
      uVar19 = DAT_004621f8;
      uVar17 = DAT_004621f0;
      puVar15[8] = s_changed_00462230._0_8_;
      uVar9 = _DAT_00462228;
      uVar8 = DAT_00462220;
      *puVar15 = uVar17;
      puVar15[1] = uVar19;
      puVar15[2] = uVar21;
      puVar15[3] = uVar23;
      puVar15[4] = uVar24;
      puVar15[5] = uVar26;
      puVar15[6] = uVar8;
      puVar15[7] = uVar9;
      error(-0xd,(String *)&local_40,"cv::Mat cv::Mat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3d8);
      String::deallocate((String *)&local_40);
    }
    if (uVar2 < in_w2) {
      local_30 = 0;
      local_28 = 0;
      pcVar16 = (char *)String::allocate((String *)&local_30,0x16);
      uVar10 = s_Bad_new_number_of_rows_00462240._20_2_;
      uVar19 = s_Bad_new_number_of_rows_00462240._8_8_;
      uVar17 = s_Bad_new_number_of_rows_00462240._0_8_;
      *(undefined4 *)(pcVar16 + 0x10) = s_Bad_new_number_of_rows_00462240._16_4_;
      *(undefined2 *)(pcVar16 + 0x14) = uVar10;
      *(undefined8 *)pcVar16 = uVar17;
      *(undefined8 *)(pcVar16 + 8) = uVar19;
      error(-0xd3,(String *)&local_30,"cv::Mat cv::Mat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3db);
      String::deallocate((String *)&local_30);
    }
    iVar25 = 0;
    if (in_w2 != 0) {
      iVar25 = (int)uVar2 / (int)in_w2;
    }
    if (iVar25 * in_w2 != uVar2) {
      local_20 = 0;
      local_18 = 0;
      __dest = (void *)String::allocate((String *)&local_20,0x4e);
      memcpy(__dest,&DAT_00461f80,0x4e);
      error(-5,(String *)&local_20,"cv::Mat cv::Mat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3e1);
      String::deallocate((String *)&local_20);
    }
    *(uint *)(in_x8 + 8) = in_w2;
    **(long **)(in_x8 + 0x48) = (long)iVar25 * (0x88442211UL >> ((*(uint *)pMVar13 & 7) << 2) & 0xf)
    ;
  }
LAB_00322f80:
  iVar4 = 0;
  if (param_2 != 0) {
    iVar4 = iVar25 / param_2;
  }
  if (iVar4 * param_2 != iVar25) {
    local_10 = 0;
    local_8 = 0;
    puVar15 = (undefined8 *)String::allocate((String *)&local_10,0x3e);
    uVar10 = DAT_00462294;
    uVar11 = DAT_00462290;
    uVar26 = DAT_00462280;
    uVar24 = DAT_00462278;
    uVar23 = DAT_00462270;
    uVar21 = _LAB_00462268;
    uVar19 = DAT_00462260;
    uVar17 = DAT_00462258;
    puVar15[6] = DAT_00462288;
    *(undefined4 *)(puVar15 + 7) = uVar11;
    *(undefined2 *)((long)puVar15 + 0x3c) = uVar10;
    *puVar15 = uVar17;
    puVar15[1] = uVar19;
    puVar15[2] = uVar21;
    puVar15[3] = uVar23;
    puVar15[4] = uVar24;
    puVar15[5] = uVar26;
    error(-0xf,(String *)&local_10,"cv::Mat cv::Mat::reshape(int, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3eb);
    String::deallocate((String *)&local_10);
  }
  uVar3 = *(uint *)in_x8;
  *(int *)(in_x8 + 0xc) = iVar4;
  uVar2 = (param_2 + -1) * 8;
  *(uint *)in_x8 = uVar3 & 0xfffff007 | uVar2;
  *(long *)(*(long *)(in_x8 + 0x48) + 8) =
       (long)(int)(((uVar2 & 0xff8) >> 3) + 1 << (ulong)((uint)(0xfa50L >> ((uVar3 & 7) << 1)) & 3))
  ;
  return;
}


==================================================================

### FUNC 00323390 (284 bytes) name=checkVector

/* cv::Mat::checkVector(int, int, bool) const */

ulong __thiscall cv::Mat::checkVector(Mat *this,int param_1,int param_2,bool param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  int *piVar7;
  
  uVar1 = *(uint *)this;
  if (((param_2 != (uVar1 & 7)) && (0 < param_2)) || (((uVar1 & 0x4000) == 0 && (param_3)))) {
    return 0xffffffff;
  }
  if (*(int *)(this + 4) == 2) {
    iVar2 = *(int *)(this + 8);
    iVar3 = *(int *)(this + 0xc);
    if (((iVar2 == 1) || (iVar3 == 1)) && (iVar5 = (uVar1 >> 3 & 0x1ff) + 1, param_1 == iVar5)) {
      lVar6 = (long)iVar3 * (long)iVar2;
    }
    else {
      uVar4 = 0xffffffff;
      if ((param_1 != iVar3) || ((uVar1 >> 3 & 0x1ff) != 0)) goto LAB_00323428;
      iVar5 = 1;
      lVar6 = (long)param_1 * (long)iVar2;
    }
  }
  else {
    uVar4 = 0xffffffff;
    if ((*(int *)(this + 4) != 3) || ((uVar1 >> 3 & 0x1ff) != 0)) goto LAB_00323428;
    piVar7 = *(int **)(this + 0x40);
                    /* catch() { ... } // from try @ 00322bc0 with catch @ 003233f8 */
    if ((piVar7[2] != param_1) || ((*piVar7 != 1 && (piVar7[1] != 1)))) goto LAB_00323428;
                    /* catch() { ... } // from try @ 003234c8 with catch @ 00323448
                       catch() { ... } // from try @ 003235c0 with catch @ 00323448
                       catch() { ... } // from try @ 00323618 with catch @ 00323448
                       catch() { ... } // from try @ 0032365c with catch @ 00323448
                       catch() { ... } // from try @ 0032367c with catch @ 00323448
                       catch() { ... } // from try @ 00323690 with catch @ 00323448
                       catch() { ... } // from try @ 003236a4 with catch @ 00323448 */
    if (((uVar1 & 0x4000) == 0) &&
       (*(long *)(*(long *)(this + 0x48) + 8) !=
        (long)piVar7[2] * *(long *)(*(long *)(this + 0x48) + 0x10))) {
      return 0xffffffff;
    }
    iVar5 = 1;
    lVar6 = (long)*piVar7 * (long)piVar7[1] * (long)piVar7[2];
  }
                    /* try { // try from 00323420 to 00423423 has its CatchHandler @ 003229f0 */
                    /* catch() { ... } // from try @ 00322b10 with catch @ 00323424
                       catch() { ... } // from try @ 00322b54 with catch @ 00323424
                       catch() { ... } // from try @ 00322bc8 with catch @ 00323424 */
  uVar4 = 0;
  if ((long)param_1 != 0) {
    uVar4 = (ulong)(iVar5 * lVar6) / (ulong)(long)param_1;
  }
LAB_00323428:
                    /* catch() { ... } // from try @ 00322b4c with catch @ 0032342c */
  return uVar4 & 0xffffffff;
}


==================================================================

### FUNC 003234ac (4388 bytes) name=scalarToRawData

/* cv::scalarToRawData(cv::Scalar_<double> const&, void*, int, int) */

void cv::scalarToRawData(Scalar_ *param_1,void *param_2,int param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined1 *puVar4;
  undefined2 *puVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  undefined4 *puVar10;
  long lVar11;
  undefined8 *puVar12;
  long lVar13;
  undefined1 uVar14;
  undefined2 uVar15;
  ulong uVar16;
  undefined8 *puVar17;
  uint uVar18;
  uint uVar19;
  undefined8 uVar20;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar7 = (uint)param_3 >> 3 & 0x1ff;
  uVar1 = uVar7 + 1;
                    /* try { // try from 003234c8 to 0042359b has its CatchHandler @ 00323448 */
  if (4 < uVar1) {
    local_10 = 0;
    local_8 = 0;
    puVar10 = (undefined4 *)String::allocate((String *)&local_10,7);
    uVar14 = DAT_0046afe6;
    uVar15 = DAT_0046afe4;
    *puVar10 = DAT_0046afe0;
    *(undefined2 *)(puVar10 + 1) = uVar15;
    *(undefined1 *)((long)puVar10 + 6) = uVar14;
                    /* try { // try from 003235b8 to 004235bb has its CatchHandler @ 0032366c */
    error(-0xd7,(String *)&local_10,"void cv::scalarToRawData(const Scalar&, void*, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x40f);
                    /* try { // try from 003235c0 to 004235f3 has its CatchHandler @ 00323448 */
    String::deallocate((String *)&local_10);
  }
  switch(param_3 & 7) {
  case 0:
    lVar11 = 0;
    do {
      lVar13 = lrint(*(double *)(param_1 + lVar11 * 8));
      uVar9 = (uint)lVar13;
      if (0xff < uVar9) {
        uVar9 = -(uint)(0 < (int)uVar9);
      }
      *(char *)((long)param_2 + lVar11) = (char)uVar9;
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
    if ((int)uVar1 < param_4) {
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + (long)(int)uVar7 + 1) < (long)param_2 + 0x10U) || (uVar9 < 0x16))
      {
                    /* try { // try from 003244cc to 004244cf has its CatchHandler @ 00324654 */
        puVar4 = (undefined1 *)((long)param_2 + (ulong)((param_4 + -2) - uVar7) + 1);
        do {
          *(undefined1 *)((long)param_2 + (long)(int)uVar1) = *(undefined1 *)param_2;
          param_2 = (void *)((long)param_2 + 1);
        } while (param_2 != puVar4);
      }
      else {
        uVar18 = -(int)param_2 & 0xf;
        if (uVar9 < uVar18) {
          uVar18 = uVar9;
        }
        uVar8 = uVar1;
        if (uVar18 != 0) {
          *(undefined1 *)((long)param_2 + (long)(int)uVar1) = *(undefined1 *)param_2;
          uVar8 = uVar7 + 2;
          if (uVar18 != 1) {
            *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                 *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                    /* try { // try from 00323878 to 0042387b has its CatchHandler @ 00323d28 */
            uVar8 = uVar7 + 3;
            if (uVar18 != 2) {
              *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                   *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
              uVar8 = uVar7 + 4;
              if (uVar18 != 3) {
                *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                     *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                uVar8 = uVar7 + 5;
                if (uVar18 != 4) {
                  *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                       *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                  uVar8 = uVar7 + 6;
                  if (uVar18 != 5) {
                    *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                         *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                    uVar8 = uVar7 + 7;
                    if (uVar18 != 6) {
                      *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                           *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                      uVar8 = uVar7 + 8;
                    /* try { // try from 003238f4 to 004238f7 has its CatchHandler @ 00323ca0 */
                      if (uVar18 != 7) {
                        *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                             *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                        uVar8 = uVar7 + 9;
                        if (uVar18 != 8) {
                    /* try { // try from 00323914 to 00423917 has its CatchHandler @ 00323cf0 */
                    /* try { // try from 0032391c to 0042391f has its CatchHandler @ 00323ca0 */
                          *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                               *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                          uVar8 = uVar7 + 10;
                          if (uVar18 != 9) {
                            *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                 *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                            uVar8 = uVar7 + 0xb;
                            if (uVar18 != 10) {
                              *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                   *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                              uVar8 = uVar7 + 0xc;
                              if (uVar18 != 0xb) {
                                *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                     *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                                uVar8 = uVar7 + 0xd;
                                if (uVar18 != 0xc) {
                                  *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                       *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
                                  uVar8 = uVar7 + 0xe;
                                  if (uVar18 != 0xd) {
                                    *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                         *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1))
                                    ;
                                    uVar8 = uVar7 + 0xf;
                                    if (uVar18 == 0xf) {
                                      *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
                                           *(undefined1 *)
                                            ((long)param_2 + (long)(int)(uVar8 - uVar1));
                    /* try { // try from 003239ac to 004239af has its CatchHandler @ 00323d00 */
                                      uVar8 = uVar7 + 0x10;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar2 = ((uVar9 - uVar18) - 0x10 >> 4) + 1;
        iVar6 = uVar2 * 0x10;
        if (0xe < ((param_4 - uVar7) + -2) - uVar18) {
          uVar19 = 0;
          puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar18);
          puVar17 = (undefined8 *)((long)param_2 + (ulong)uVar18 + (long)(int)uVar7 + 1);
          do {
            uVar20 = *puVar12;
            uVar19 = uVar19 + 1;
            puVar17[1] = puVar12[1];
            *puVar17 = uVar20;
            puVar12 = puVar12 + 2;
            puVar17 = puVar17 + 2;
          } while (uVar19 < uVar2);
          uVar8 = uVar8 + iVar6;
          if (iVar6 == uVar9 - uVar18) {
            return;
          }
        }
        iVar6 = uVar8 + 1;
        *(undefined1 *)((long)param_2 + (long)(int)uVar8) =
             *(undefined1 *)((long)param_2 + (long)(int)(uVar8 - uVar1));
        if (iVar6 < param_4) {
                    /* try { // try from 00323a20 to 00423a23 has its CatchHandler @ 00323ca0 */
          iVar3 = uVar8 + 2;
          *(undefined1 *)((long)param_2 + (long)iVar6) =
               *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
          if (iVar3 < param_4) {
            iVar6 = uVar8 + 3;
            *(undefined1 *)((long)param_2 + (long)iVar3) =
                 *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
            if (iVar6 < param_4) {
              iVar3 = uVar8 + 4;
              *(undefined1 *)((long)param_2 + (long)iVar6) =
                   *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
              if (iVar3 < param_4) {
                iVar6 = uVar8 + 5;
                    /* try { // try from 00323a74 to 00423ac7 has its CatchHandler @ 003236a8 */
                *(undefined1 *)((long)param_2 + (long)iVar3) =
                     *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                if (iVar6 < param_4) {
                  iVar3 = uVar8 + 6;
                  *(undefined1 *)((long)param_2 + (long)iVar6) =
                       *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                  if (iVar3 < param_4) {
                    iVar6 = uVar8 + 7;
                    *(undefined1 *)((long)param_2 + (long)iVar3) =
                         *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                    if (iVar6 < param_4) {
                      iVar3 = uVar8 + 8;
                      *(undefined1 *)((long)param_2 + (long)iVar6) =
                           *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                      if (iVar3 < param_4) {
                        iVar6 = uVar8 + 9;
                        *(undefined1 *)((long)param_2 + (long)iVar3) =
                             *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                        if (iVar6 < param_4) {
                          iVar3 = uVar8 + 10;
                          *(undefined1 *)((long)param_2 + (long)iVar6) =
                               *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                          if (iVar3 < param_4) {
                            iVar6 = uVar8 + 0xb;
                            *(undefined1 *)((long)param_2 + (long)iVar3) =
                                 *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                            if (iVar6 < param_4) {
                              iVar3 = uVar8 + 0xc;
                              *(undefined1 *)((long)param_2 + (long)iVar6) =
                                   *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                              if (iVar3 < param_4) {
                                iVar6 = uVar8 + 0xd;
                                *(undefined1 *)((long)param_2 + (long)iVar3) =
                                     *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                                if (iVar6 < param_4) {
                                  iVar3 = uVar8 + 0xe;
                                  *(undefined1 *)((long)param_2 + (long)iVar6) =
                                       *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                                  if (iVar3 < param_4) {
                                    *(undefined1 *)((long)param_2 + (long)iVar3) =
                                         *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1))
                                    ;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    break;
  case 1:
    lVar11 = 0;
    do {
      lVar13 = lrint(*(double *)(param_1 + lVar11 * 8));
      uVar14 = (undefined1)lVar13;
      if ((0xff < (int)lVar13 + 0x80U) && (uVar14 = 0x7f, (int)lVar13 < 1)) {
        uVar14 = 0x80;
      }
      *(undefined1 *)((long)param_2 + lVar11) = uVar14;
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
                    /* try { // try from 00323ba0 to 00423ba3 has its CatchHandler @ 00323d40 */
    if ((int)uVar1 < param_4) {
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + (long)(int)uVar7 + 1) < (long)param_2 + 0x10U) || (uVar9 < 0x16))
      {
        puVar4 = (undefined1 *)((long)param_2 + (ulong)((param_4 + -2) - uVar7) + 1);
        do {
                    /* try { // try from 00324538 to 0042453b has its CatchHandler @ 0032470c */
          *(undefined1 *)((long)param_2 + (long)(int)uVar1) = *(undefined1 *)param_2;
          param_2 = (void *)((long)param_2 + 1);
                    /* try { // try from 00324540 to 00424583 has its CatchHandler @ 003246a4 */
        } while (param_2 != puVar4);
      }
      else {
        uVar18 = -(int)param_2 & 0xf;
        uVar8 = uVar9;
        if (uVar18 < uVar9) {
          uVar8 = uVar18;
        }
        uVar18 = uVar1;
        if (uVar8 != 0) {
          *(undefined1 *)((long)param_2 + (long)(int)uVar1) = *(undefined1 *)param_2;
          uVar18 = uVar7 + 2;
          if (uVar8 != 1) {
            *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                 *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
            uVar18 = uVar7 + 3;
                    /* try { // try from 00323c0c to 00423c6f has its CatchHandler @ 00323ca0 */
            if (uVar8 != 2) {
              *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                   *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
              uVar18 = uVar7 + 4;
              if (uVar8 != 3) {
                *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                     *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                uVar18 = uVar7 + 5;
                if (uVar8 != 4) {
                  *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                       *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                  uVar18 = uVar7 + 6;
                  if (uVar8 != 5) {
                    *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                         *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                    uVar18 = uVar7 + 7;
                    if (uVar8 != 6) {
                      *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                           *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                      uVar18 = uVar7 + 8;
                      if (uVar8 != 7) {
                    /* try { // try from 00323c88 to 00423c9b has its CatchHandler @ 003236a8 */
                        *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                             *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                        uVar18 = uVar7 + 9;
                        if (uVar8 != 8) {
                    /* catch() { ... } // from try @ 003238f4 with catch @ 00323ca0
                       catch() { ... } // from try @ 0032391c with catch @ 00323ca0
                       catch() { ... } // from try @ 00323a20 with catch @ 00323ca0
                       catch() { ... } // from try @ 00323c0c with catch @ 00323ca0 */
                          *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                               *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                          uVar18 = uVar7 + 10;
                          if (uVar8 != 9) {
                            *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                 *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                            uVar18 = uVar7 + 0xb;
                            if (uVar8 != 10) {
                              *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                   *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                              uVar18 = uVar7 + 0xc;
                              if (uVar8 != 0xb) {
                    /* try { // try from 00323cec to 00423cef has its CatchHandler @ 003236a8 */
                    /* catch() { ... } // from try @ 00323914 with catch @ 00323cf0 */
                                *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                     *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                                uVar18 = uVar7 + 0xd;
                                if (uVar8 != 0xc) {
                    /* catch() { ... } // from try @ 003239ac with catch @ 00323d00 */
                                  *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                       *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
                                  uVar18 = uVar7 + 0xe;
                                  if (uVar8 != 0xd) {
                                    *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                         *(undefined1 *)
                                          ((long)param_2 + (long)(int)(uVar18 - uVar1));
                    /* catch() { ... } // from try @ 00323878 with catch @ 00323d28 */
                                    uVar18 = uVar7 + 0xf;
                                    if (uVar8 == 0xf) {
                    /* catch() { ... } // from try @ 00323788 with catch @ 00323d30 */
                                      *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
                                           *(undefined1 *)
                                            ((long)param_2 + (long)(int)(uVar18 - uVar1));
                                      uVar18 = uVar7 + 0x10;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
                    /* catch() { ... } // from try @ 00323708 with catch @ 00323d40
                       catch() { ... } // from try @ 00323790 with catch @ 00323d40
                       catch() { ... } // from try @ 00323ba0 with catch @ 00323d40 */
                    /* catch() { ... } // from try @ 00324690 with catch @ 00323d48 */
        uVar2 = ((uVar9 - uVar8) - 0x10 >> 4) + 1;
        iVar6 = uVar2 * 0x10;
        if (0xe < ((param_4 - uVar7) + -2) - uVar8) {
          uVar19 = 0;
          puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar8);
          puVar17 = (undefined8 *)((long)param_2 + (long)(int)uVar7 + 1 + (ulong)uVar8);
          do {
            uVar20 = *puVar12;
            uVar19 = uVar19 + 1;
            puVar17[1] = puVar12[1];
            *puVar17 = uVar20;
            puVar12 = puVar12 + 2;
            puVar17 = puVar17 + 2;
          } while (uVar19 < uVar2);
          uVar18 = uVar18 + iVar6;
          if (uVar9 - uVar8 == iVar6) {
            return;
          }
        }
        iVar6 = uVar18 + 1;
        *(undefined1 *)((long)param_2 + (long)(int)uVar18) =
             *(undefined1 *)((long)param_2 + (long)(int)(uVar18 - uVar1));
        if (iVar6 < param_4) {
          iVar3 = uVar18 + 2;
          *(undefined1 *)((long)param_2 + (long)iVar6) =
               *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
          if (iVar3 < param_4) {
            iVar6 = uVar18 + 3;
            *(undefined1 *)((long)param_2 + (long)iVar3) =
                 *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
            if (iVar6 < param_4) {
              iVar3 = uVar18 + 4;
              *(undefined1 *)((long)param_2 + (long)iVar6) =
                   *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
              if (iVar3 < param_4) {
                iVar6 = uVar18 + 5;
                *(undefined1 *)((long)param_2 + (long)iVar3) =
                     *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                if (iVar6 < param_4) {
                  iVar3 = uVar18 + 6;
                  *(undefined1 *)((long)param_2 + (long)iVar6) =
                       *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                  if (iVar3 < param_4) {
                    iVar6 = uVar18 + 7;
                    *(undefined1 *)((long)param_2 + (long)iVar3) =
                         *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                    /* try { // try from 00323e38 to 00423e83 has its CatchHandler @ 003246a4 */
                    if (iVar6 < param_4) {
                      iVar3 = uVar18 + 8;
                      *(undefined1 *)((long)param_2 + (long)iVar6) =
                           *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                      if (iVar3 < param_4) {
                        iVar6 = uVar18 + 9;
                        *(undefined1 *)((long)param_2 + (long)iVar3) =
                             *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                        if (iVar6 < param_4) {
                          iVar3 = uVar18 + 10;
                          *(undefined1 *)((long)param_2 + (long)iVar6) =
                               *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                          if (iVar3 < param_4) {
                            iVar6 = uVar18 + 0xb;
                            *(undefined1 *)((long)param_2 + (long)iVar3) =
                                 *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                            if (iVar6 < param_4) {
                              iVar3 = uVar18 + 0xc;
                              *(undefined1 *)((long)param_2 + (long)iVar6) =
                                   *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                              if (iVar3 < param_4) {
                                iVar6 = uVar18 + 0xd;
                                *(undefined1 *)((long)param_2 + (long)iVar3) =
                                     *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1));
                                if (iVar6 < param_4) {
                    /* try { // try from 00323ecc to 00423ecf has its CatchHandler @ 003246ac */
                                  iVar3 = uVar18 + 0xe;
                    /* try { // try from 00323ed4 to 00423f57 has its CatchHandler @ 003246a4 */
                                  *(undefined1 *)((long)param_2 + (long)iVar6) =
                                       *(undefined1 *)((long)param_2 + (long)(int)(iVar6 - uVar1));
                                  if (iVar3 < param_4) {
                                    *(undefined1 *)((long)param_2 + (long)iVar3) =
                                         *(undefined1 *)((long)param_2 + (long)(int)(iVar3 - uVar1))
                                    ;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    break;
  case 2:
    lVar11 = 0;
    do {
      lVar13 = lrint(*(double *)(param_1 + lVar11 * 8));
      uVar9 = (uint)lVar13;
      if (0xffff < uVar9) {
        uVar9 = -(uint)(0 < (int)uVar9);
      }
      *(short *)((long)param_2 + lVar11 * 2) = (short)uVar9;
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
    if ((int)uVar1 < param_4) {
      lVar11 = ((long)(int)uVar7 + 9) * 2;
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + lVar11 + -0x10) < (long)param_2 + 0x10U) || (uVar9 < 0xf)) {
        puVar5 = (undefined2 *)((long)param_2 + ((ulong)((param_4 + -2) - uVar7) + 1) * 2);
        do {
          *(undefined2 *)((long)param_2 + (long)(int)uVar1 * 2) = *(undefined2 *)param_2;
          param_2 = (void *)((long)param_2 + 2);
        } while (param_2 != puVar5);
      }
      else {
        uVar18 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
                    /* try { // try from 00324190 to 00424193 has its CatchHandler @ 003246cc */
        uVar8 = uVar9;
        if (uVar18 < uVar9) {
          uVar8 = uVar18;
        }
                    /* try { // try from 00324198 to 00424303 has its CatchHandler @ 003246a4 */
        uVar18 = uVar1;
        if (uVar8 != 0) {
          *(undefined2 *)((long)param_2 + lVar11 + -0x10) = *(undefined2 *)param_2;
          uVar18 = uVar7 + 2;
          if (uVar8 != 1) {
            *(undefined2 *)((long)param_2 + lVar11 + -0xe) =
                 *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 2) - uVar1) * 2);
            uVar18 = uVar7 + 3;
            if (uVar8 != 2) {
              *(undefined2 *)((long)param_2 + lVar11 + -0xc) =
                   *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 3) - uVar1) * 2);
              uVar18 = uVar7 + 4;
              if (uVar8 != 3) {
                *(undefined2 *)((long)param_2 + lVar11 + -10) =
                     *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 4) - uVar1) * 2);
                uVar18 = uVar7 + 5;
                if (uVar8 != 4) {
                  *(undefined2 *)((long)param_2 + lVar11 + -8) =
                       *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 5) - uVar1) * 2);
                  uVar18 = uVar7 + 6;
                  if (uVar8 != 5) {
                    *(undefined2 *)((long)param_2 + lVar11 + -6) =
                         *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 6) - uVar1) * 2);
                    uVar18 = uVar7 + 7;
                    if (uVar8 == 7) {
                      *(undefined2 *)((long)param_2 + lVar11 + -4) =
                           *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 7) - uVar1) * 2);
                      uVar18 = uVar7 + 8;
                    }
                  }
                }
              }
            }
          }
        }
        uVar19 = 0;
        uVar2 = ((uVar9 - uVar8) - 8 >> 3) + 1;
        iVar6 = uVar2 * 8;
        puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar8 * 2);
        puVar17 = (undefined8 *)((long)param_2 + ((long)(int)uVar7 + 1 + (ulong)uVar8) * 2);
        do {
          uVar20 = *puVar12;
          uVar19 = uVar19 + 1;
          puVar17[1] = puVar12[1];
          *puVar17 = uVar20;
          puVar12 = puVar12 + 2;
          puVar17 = puVar17 + 2;
        } while (uVar19 < uVar2);
        uVar18 = uVar18 + iVar6;
        if (uVar9 - uVar8 != iVar6) {
          uVar16 = -(ulong)(uVar18 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar18 << 1;
          *(undefined2 *)((long)param_2 + uVar16) =
               *(undefined2 *)((long)param_2 + (long)(int)(uVar18 - uVar1) * 2);
          if ((int)(uVar18 + 1) < param_4) {
            *(undefined2 *)((long)param_2 + uVar16 + 2) =
                 *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 1) - uVar1) * 2);
            if ((int)(uVar18 + 2) < param_4) {
              *(undefined2 *)((long)param_2 + uVar16 + 4) =
                   *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 2) - uVar1) * 2);
              if ((int)(uVar18 + 3) < param_4) {
                *(undefined2 *)((long)param_2 + uVar16 + 6) =
                     *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 3) - uVar1) * 2);
                if ((int)(uVar18 + 4) < param_4) {
                  *(undefined2 *)((long)param_2 + uVar16 + 8) =
                       *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 4) - uVar1) * 2);
                  if ((int)(uVar18 + 5) < param_4) {
                    *(undefined2 *)((long)param_2 + uVar16 + 10) =
                         *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 5) - uVar1) * 2);
                    if ((int)(uVar18 + 6) < param_4) {
                      *(undefined2 *)((long)param_2 + uVar16 + 0xc) =
                           *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 6) - uVar1) * 2);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    break;
  case 3:
    lVar11 = 0;
    do {
      lVar13 = lrint(*(double *)(param_1 + lVar11 * 8));
      uVar15 = (undefined2)lVar13;
      if ((0xffff < (int)lVar13 + 0x8000U) && (uVar15 = 0x7fff, (int)lVar13 < 1)) {
        uVar15 = 0x8000;
      }
      *(undefined2 *)((long)param_2 + lVar11 * 2) = uVar15;
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
    if ((int)uVar1 < param_4) {
      lVar11 = ((long)(int)uVar7 + 9) * 2;
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + lVar11 + -0x10) < (long)param_2 + 0x10U) || (uVar9 < 0xf)) {
        puVar5 = (undefined2 *)((long)param_2 + ((ulong)((param_4 + -2) - uVar7) + 1) * 2);
        do {
          *(undefined2 *)((long)param_2 + (long)(int)uVar1 * 2) = *(undefined2 *)param_2;
          param_2 = (void *)((long)param_2 + 2);
        } while (param_2 != puVar5);
      }
      else {
        uVar18 = -((uint)((ulong)param_2 >> 1) & 7) & 7;
        uVar8 = uVar9;
        if (uVar18 < uVar9) {
          uVar8 = uVar18;
        }
        uVar18 = uVar1;
        if (uVar8 != 0) {
          *(undefined2 *)((long)param_2 + lVar11 + -0x10) = *(undefined2 *)param_2;
          uVar18 = uVar7 + 2;
          if (uVar8 != 1) {
                    /* try { // try from 00323fa4 to 00423fa7 has its CatchHandler @ 003246bc */
                    /* try { // try from 00323fac to 004240ab has its CatchHandler @ 003246a4 */
            *(undefined2 *)((long)param_2 + lVar11 + -0xe) =
                 *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 2) - uVar1) * 2);
            uVar18 = uVar7 + 3;
            if (uVar8 != 2) {
              *(undefined2 *)((long)param_2 + lVar11 + -0xc) =
                   *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 3) - uVar1) * 2);
              uVar18 = uVar7 + 4;
              if (uVar8 != 3) {
                *(undefined2 *)((long)param_2 + lVar11 + -10) =
                     *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 4) - uVar1) * 2);
                uVar18 = uVar7 + 5;
                if (uVar8 != 4) {
                  *(undefined2 *)((long)param_2 + lVar11 + -8) =
                       *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 5) - uVar1) * 2);
                  uVar18 = uVar7 + 6;
                  if (uVar8 != 5) {
                    *(undefined2 *)((long)param_2 + lVar11 + -6) =
                         *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 6) - uVar1) * 2);
                    uVar18 = uVar7 + 7;
                    if (uVar8 == 7) {
                      *(undefined2 *)((long)param_2 + lVar11 + -4) =
                           *(undefined2 *)((long)param_2 + (long)(int)((uVar7 + 7) - uVar1) * 2);
                      uVar18 = uVar7 + 8;
                    }
                  }
                }
              }
            }
          }
        }
        uVar19 = 0;
        uVar2 = ((uVar9 - uVar8) - 8 >> 3) + 1;
        iVar6 = uVar2 * 8;
        puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar8 * 2);
        puVar17 = (undefined8 *)((long)param_2 + ((long)(int)uVar7 + 1 + (ulong)uVar8) * 2);
        do {
          uVar20 = *puVar12;
          uVar19 = uVar19 + 1;
          puVar17[1] = puVar12[1];
          *puVar17 = uVar20;
          puVar12 = puVar12 + 2;
          puVar17 = puVar17 + 2;
        } while (uVar19 < uVar2);
        uVar18 = uVar18 + iVar6;
        if (uVar9 - uVar8 != iVar6) {
          uVar16 = -(ulong)(uVar18 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar18 << 1;
          *(undefined2 *)((long)param_2 + uVar16) =
               *(undefined2 *)((long)param_2 + (long)(int)(uVar18 - uVar1) * 2);
          if ((int)(uVar18 + 1) < param_4) {
            *(undefined2 *)((long)param_2 + uVar16 + 2) =
                 *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 1) - uVar1) * 2);
            if ((int)(uVar18 + 2) < param_4) {
              *(undefined2 *)((long)param_2 + uVar16 + 4) =
                   *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 2) - uVar1) * 2);
              if ((int)(uVar18 + 3) < param_4) {
                    /* try { // try from 003240c4 to 004240c7 has its CatchHandler @ 003246dc */
                    /* try { // try from 003240cc to 00424157 has its CatchHandler @ 003246a4 */
                *(undefined2 *)((long)param_2 + uVar16 + 6) =
                     *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 3) - uVar1) * 2);
                if ((int)(uVar18 + 4) < param_4) {
                  *(undefined2 *)((long)param_2 + uVar16 + 8) =
                       *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 4) - uVar1) * 2);
                  if ((int)(uVar18 + 5) < param_4) {
                    *(undefined2 *)((long)param_2 + uVar16 + 10) =
                         *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 5) - uVar1) * 2);
                    if ((int)(uVar18 + 6) < param_4) {
                      *(undefined2 *)((long)param_2 + uVar16 + 0xc) =
                           *(undefined2 *)((long)param_2 + (long)(int)((uVar18 + 6) - uVar1) * 2);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    break;
  case 4:
    lVar11 = 0;
    do {
      lVar13 = lrint(*(double *)(param_1 + lVar11 * 8));
      *(int *)((long)param_2 + lVar11 * 4) = (int)lVar13;
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
                    /* try { // try from 00324348 to 0042434b has its CatchHandler @ 00324694 */
    if ((int)uVar1 < param_4) {
                    /* try { // try from 00324350 to 0042437b has its CatchHandler @ 003246a4 */
      lVar11 = ((long)(int)uVar7 + 5) * 4;
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + lVar11 + -0x10) < (long)param_2 + 0x10U) || (uVar9 < 0xc)) {
        puVar10 = (undefined4 *)((long)param_2 + ((ulong)((param_4 + -2) - uVar7) + 1) * 4);
        do {
          *(undefined4 *)((long)param_2 + (long)(int)uVar1 * 4) = *(undefined4 *)param_2;
          param_2 = (void *)((long)param_2 + 4);
        } while (param_2 != puVar10);
      }
      else {
        uVar18 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
        uVar8 = uVar9;
        if (uVar18 < uVar9) {
          uVar8 = uVar18;
        }
        uVar18 = uVar1;
        if (uVar8 != 0) {
          *(undefined4 *)((long)param_2 + lVar11 + -0x10) = *(undefined4 *)param_2;
          uVar18 = uVar7 + 2;
          if (uVar8 != 1) {
            *(undefined4 *)((long)param_2 + lVar11 + -0xc) =
                 *(undefined4 *)((long)param_2 + (long)(int)((uVar7 + 2) - uVar1) * 4);
            uVar18 = uVar7 + 3;
            if (uVar8 == 3) {
                    /* try { // try from 003243d4 to 004243d7 has its CatchHandler @ 003246ec */
              *(undefined4 *)((long)param_2 + lVar11 + -8) =
                   *(undefined4 *)((long)param_2 + (long)(int)((uVar7 + 3) - uVar1) * 4);
              uVar18 = uVar7 + 4;
            }
          }
        }
                    /* try { // try from 003243dc to 004243ff has its CatchHandler @ 003246a4 */
        uVar19 = 0;
        uVar2 = ((uVar9 - uVar8) - 4 >> 2) + 1;
        iVar6 = uVar2 * 4;
        puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar8 * 4);
        puVar17 = (undefined8 *)((long)param_2 + ((long)(int)uVar7 + 1 + (ulong)uVar8) * 4);
        do {
          uVar20 = *puVar12;
          uVar19 = uVar19 + 1;
          puVar17[1] = puVar12[1];
          *puVar17 = uVar20;
          puVar12 = puVar12 + 2;
          puVar17 = puVar17 + 2;
        } while (uVar19 < uVar2);
        uVar18 = uVar18 + iVar6;
        if (uVar9 - uVar8 != iVar6) {
          uVar16 = -(ulong)(uVar18 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar18 << 2;
          *(undefined4 *)((long)param_2 + uVar16) =
               *(undefined4 *)((long)param_2 + (long)(int)(uVar18 - uVar1) * 4);
          if ((int)(uVar18 + 1) < param_4) {
                    /* try { // try from 00324440 to 00424443 has its CatchHandler @ 003246fc */
                    /* try { // try from 00324448 to 00424483 has its CatchHandler @ 003246a4 */
            *(undefined4 *)((long)param_2 + uVar16 + 4) =
                 *(undefined4 *)((long)param_2 + (long)(int)((uVar18 + 1) - uVar1) * 4);
            if ((int)(uVar18 + 2) < param_4) {
              *(undefined4 *)((long)param_2 + uVar16 + 8) =
                   *(undefined4 *)((long)param_2 + (long)(int)((uVar18 + 2) - uVar1) * 4);
            }
          }
        }
      }
    }
    break;
  case 5:
    lVar11 = 0;
    do {
      *(float *)((long)param_2 + lVar11 * 4) = (float)*(double *)(param_1 + lVar11 * 8);
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
    if ((int)uVar1 < param_4) {
      lVar11 = ((long)(int)uVar7 + 5) * 4;
      uVar9 = (param_4 - uVar7) - 1;
                    /* try { // try from 00323610 to 00423613 has its CatchHandler @ 00323680 */
                    /* try { // try from 00323618 to 00423637 has its CatchHandler @ 00323448 */
      if (((ulong)((long)param_2 + lVar11 + -0x10) < (long)param_2 + 0x10U) || (uVar9 < 0xc)) {
        puVar10 = (undefined4 *)((long)param_2 + ((ulong)((param_4 + -2) - uVar7) + 1) * 4);
        do {
          *(undefined4 *)((long)param_2 + (long)(int)uVar1 * 4) = *(undefined4 *)param_2;
          param_2 = (void *)((long)param_2 + 4);
        } while (param_2 != puVar10);
      }
      else {
        uVar18 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
        uVar8 = uVar9;
        if (uVar18 < uVar9) {
          uVar8 = uVar18;
        }
        uVar18 = uVar1;
        if (uVar8 != 0) {
          *(undefined4 *)((long)param_2 + lVar11 + -0x10) = *(undefined4 *)param_2;
          uVar18 = uVar7 + 2;
          if (uVar8 != 1) {
                    /* try { // try from 00323654 to 00423657 has its CatchHandler @ 00323694 */
                    /* try { // try from 0032365c to 0042365f has its CatchHandler @ 00323448 */
            *(undefined4 *)((long)param_2 + lVar11 + -0xc) =
                 *(undefined4 *)((long)param_2 + (long)(int)((uVar7 + 2) - uVar1) * 4);
            uVar18 = uVar7 + 3;
            if (uVar8 == 3) {
                    /* catch() { ... } // from try @ 003235b8 with catch @ 0032366c */
              *(undefined4 *)((long)param_2 + lVar11 + -8) =
                   *(undefined4 *)((long)param_2 + (long)(int)((uVar7 + 3) - uVar1) * 4);
              uVar18 = uVar7 + 4;
            }
          }
        }
                    /* try { // try from 0032367c to 0042367f has its CatchHandler @ 00323448 */
                    /* catch() { ... } // from try @ 00323610 with catch @ 00323680 */
        uVar19 = 0;
                    /* try { // try from 00323690 to 00423693 has its CatchHandler @ 00323448 */
        uVar2 = ((uVar9 - uVar8) - 4 >> 2) + 1;
                    /* catch() { ... } // from try @ 00323654 with catch @ 00323694 */
        iVar6 = uVar2 * 4;
        puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar8 * 4);
        puVar17 = (undefined8 *)((long)param_2 + ((long)(int)uVar7 + 1 + (ulong)uVar8) * 4);
        do {
          uVar20 = *puVar12;
          uVar19 = uVar19 + 1;
                    /* try { // try from 003236a4 to 004236a7 has its CatchHandler @ 00323448 */
                    /* catch() { ... } // from try @ 003236d8 with catch @ 003236a8
                       catch() { ... } // from try @ 00323a74 with catch @ 003236a8
                       catch() { ... } // from try @ 00323c88 with catch @ 003236a8
                       catch() { ... } // from try @ 00323cec with catch @ 003236a8 */
          puVar17[1] = puVar12[1];
          *puVar17 = uVar20;
          puVar12 = puVar12 + 2;
          puVar17 = puVar17 + 2;
        } while (uVar19 < uVar2);
        uVar18 = uVar18 + iVar6;
        if (uVar9 - uVar8 != iVar6) {
          uVar16 = -(ulong)(uVar18 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar18 << 2;
          *(undefined4 *)((long)param_2 + uVar16) =
               *(undefined4 *)((long)param_2 + (long)(int)(uVar18 - uVar1) * 4);
          if ((int)(uVar18 + 1) < param_4) {
                    /* try { // try from 003236d8 to 004236f7 has its CatchHandler @ 003236a8 */
            *(undefined4 *)((long)param_2 + uVar16 + 4) =
                 *(undefined4 *)((long)param_2 + (long)(int)((uVar18 + 1) - uVar1) * 4);
            if ((int)(uVar18 + 2) < param_4) {
              *(undefined4 *)((long)param_2 + uVar16 + 8) =
                   *(undefined4 *)((long)param_2 + (long)(int)((uVar18 + 2) - uVar1) * 4);
            }
          }
        }
      }
    }
    break;
  case 6:
    lVar11 = 0;
    do {
                    /* try { // try from 00323708 to 0042373f has its CatchHandler @ 00323d40 */
      *(undefined8 *)((long)param_2 + lVar11 * 8) = *(undefined8 *)(param_1 + lVar11 * 8);
      lVar11 = lVar11 + 1;
    } while ((int)lVar11 < (int)uVar1);
    if ((int)uVar1 < param_4) {
      lVar11 = (long)(int)uVar7 * 8 + 8;
      uVar9 = (param_4 - uVar7) - 1;
      if (((ulong)((long)param_2 + lVar11) < (long)param_2 + 0x10U) || (uVar9 < 0xe)) {
                    /* try { // try from 003244f4 to 004244f7 has its CatchHandler @ 003246a4 */
        puVar12 = (undefined8 *)((long)param_2 + ((ulong)((param_4 + -2) - uVar7) + 1) * 8);
        do {
          *(undefined8 *)((long)param_2 + (long)(int)uVar1 * 8) = *(undefined8 *)param_2;
          param_2 = (void *)((long)param_2 + 8);
        } while (param_2 != puVar12);
      }
      else {
        uVar8 = (uint)((ulong)param_2 >> 3) & 1;
        uVar18 = uVar9;
        if (uVar8 < uVar9) {
          uVar18 = uVar8;
        }
        uVar8 = uVar1;
        if (uVar18 != 0) {
          *(undefined8 *)((long)param_2 + lVar11) = *(undefined8 *)param_2;
          uVar8 = uVar7 + 2;
        }
                    /* try { // try from 00323788 to 0042378b has its CatchHandler @ 00323d30 */
        uVar2 = ((uVar9 - uVar18) - 2 >> 1) + 1;
        uVar19 = 0;
                    /* try { // try from 00323790 to 004237e3 has its CatchHandler @ 00323d40 */
        iVar6 = uVar2 * 2;
        puVar12 = (undefined8 *)((long)param_2 + (ulong)uVar18 * 8);
        puVar17 = (undefined8 *)((long)param_2 + ((long)(int)uVar7 + 1 + (ulong)uVar18) * 8);
        do {
          uVar20 = *puVar12;
          uVar19 = uVar19 + 1;
          puVar17[1] = puVar12[1];
          *puVar17 = uVar20;
          puVar12 = puVar12 + 2;
          puVar17 = puVar17 + 2;
        } while (uVar19 < uVar2);
        iVar3 = uVar8 + iVar6;
        if (uVar9 - uVar18 != iVar6) {
          *(undefined8 *)((long)param_2 + (long)iVar3 * 8) =
               *(undefined8 *)((long)param_2 + (long)(int)(iVar3 - uVar1) * 8);
          return;
        }
      }
    }
    break;
  default:
    local_10 = 0;
    local_8 = 0;
    String::allocate((String *)&local_10,0);
    error(-0xd2,(String *)&local_10,"void cv::scalarToRawData(const Scalar&, void*, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x452);
    String::deallocate((String *)&local_10);
  }
  return;
}


==================================================================

### FUNC 003245f8 (12 bytes) name=kind

/* cv::_InputArray::kind() const */

uint __thiscall cv::_InputArray::kind(_InputArray *this)

{
  return *(uint *)this & 0x1f0000;
}


==================================================================

### FUNC 00324604 (452 bytes) name=getGpuMat

/* cv::_InputArray::getGpuMat() const */

void cv::_InputArray::getGpuMat(void)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  int iVar9;
  _InputArray *in_x0;
  char *pcVar10;
  undefined8 uVar11;
  void *__dest;
  undefined4 *puVar12;
  int *piVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar9 = kind(in_x0);
  if (iVar9 == 0x90000) {
    puVar12 = *(undefined4 **)(in_x0 + 8);
    uVar1 = *puVar12;
    uVar2 = puVar12[1];
    uVar3 = puVar12[2];
    uVar16 = *(undefined8 *)(puVar12 + 4);
    uVar15 = *(undefined8 *)(puVar12 + 6);
    piVar13 = *(int **)(puVar12 + 8);
    uVar14 = *(undefined8 *)(puVar12 + 10);
    uVar11 = *(undefined8 *)(puVar12 + 0xc);
    *(undefined8 *)(in_x8 + 0xe) = *(undefined8 *)(puVar12 + 0xe);
    *in_x8 = uVar1;
    in_x8[1] = uVar2;
    in_x8[2] = uVar3;
                    /* try { // try from 0032478c to 0042483b has its CatchHandler @ 00324740 */
    *(undefined8 *)(in_x8 + 4) = uVar16;
    *(undefined8 *)(in_x8 + 6) = uVar15;
    *(int **)(in_x8 + 8) = piVar13;
    *(undefined8 *)(in_x8 + 10) = uVar14;
    *(undefined8 *)(in_x8 + 0xc) = uVar11;
    if (piVar13 == (int *)0x0) {
      return;
    }
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar5) {
        *piVar13 = *piVar13 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    return;
  }
  if (iVar9 == 0x80000) {
    cuda::HostMem::createGpuMatHeader(*(HostMem **)(in_x0 + 8));
    return;
  }
  if (iVar9 == 0x70000) {
                    /* catch() { ... } // from try @ 00324538 with catch @ 0032470c */
    local_10 = 0;
    local_8 = 0;
                    /* catch() { ... } // from try @ 00324644 with catch @ 0032471c */
    __dest = (void *)String::allocate((String *)&local_10,0x4f);
                    /* catch() { ... } // from try @ 003245dc with catch @ 0032472c */
    memcpy(__dest,&DAT_0046afe8,0x4f);
                    /* catch() { ... } // from try @ 0032478c with catch @ 00324740
                       catch() { ... } // from try @ 00324d74 with catch @ 00324740
                       catch() { ... } // from try @ 003252a4 with catch @ 00324740
                       catch() { ... } // from try @ 00325498 with catch @ 00324740 */
    error(-0xd5,(String *)&local_10,"cv::cuda::GpuMat cv::_InputArray::getGpuMat() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x592);
  }
  else {
    if (iVar9 == 0) {
      uVar11 = cuda::GpuMat::defaultAllocator();
      *in_x8 = 0;
                    /* catch() { ... } // from try @ 00324440 with catch @ 003246fc */
      in_x8[1] = 0;
      in_x8[2] = 0;
      goto LAB_003246c8;
    }
                    /* try { // try from 00324644 to 00424647 has its CatchHandler @ 0032471c */
    local_10 = 0;
                    /* try { // try from 0032464c to 0042464f has its CatchHandler @ 003246a4 */
    local_8 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_10,0x3e);
    uVar8 = s_getGpuMat_is_available_only_for_c_0046b038._60_2_;
    uVar1 = s_getGpuMat_is_available_only_for_c_0046b038._56_4_;
    uVar7 = s_getGpuMat_is_available_only_for_c_0046b038._40_8_;
    uVar6 = s_getGpuMat_is_available_only_for_c_0046b038._32_8_;
    uVar16 = s_getGpuMat_is_available_only_for_c_0046b038._24_8_;
    uVar15 = s_getGpuMat_is_available_only_for_c_0046b038._16_8_;
    uVar14 = s_getGpuMat_is_available_only_for_c_0046b038._8_8_;
    uVar11 = s_getGpuMat_is_available_only_for_c_0046b038._0_8_;
                    /* catch() { ... } // from try @ 003244cc with catch @ 00324654 */
    *(undefined8 *)(pcVar10 + 0x30) = s_getGpuMat_is_available_only_for_c_0046b038._48_8_;
                    /* try { // try from 00324690 to 00424693 has its CatchHandler @ 00323d48 */
                    /* catch() { ... } // from try @ 00324348 with catch @ 00324694 */
    *(undefined4 *)(pcVar10 + 0x38) = uVar1;
    *(undefined2 *)(pcVar10 + 0x3c) = uVar8;
    *(undefined8 *)pcVar10 = uVar11;
    *(undefined8 *)(pcVar10 + 8) = uVar14;
                    /* catch() { ... } // from try @ 00323e38 with catch @ 003246a4
                       catch() { ... } // from try @ 00323ed4 with catch @ 003246a4
                       catch() { ... } // from try @ 00323fac with catch @ 003246a4
                       catch() { ... } // from try @ 003240cc with catch @ 003246a4
                       catch() { ... } // from try @ 00324198 with catch @ 003246a4
                       catch() { ... } // from try @ 00324350 with catch @ 003246a4
                       catch() { ... } // from try @ 003243dc with catch @ 003246a4
                       catch() { ... } // from try @ 00324448 with catch @ 003246a4
                       catch() { ... } // from try @ 003244f4 with catch @ 003246a4
                       catch() { ... } // from try @ 00324540 with catch @ 003246a4
                       catch() { ... } // from try @ 003245e4 with catch @ 003246a4
                       catch() { ... } // from try @ 0032464c with catch @ 003246a4 */
    *(undefined8 *)(pcVar10 + 0x10) = uVar15;
    *(undefined8 *)(pcVar10 + 0x18) = uVar16;
    *(undefined8 *)(pcVar10 + 0x20) = uVar6;
    *(undefined8 *)(pcVar10 + 0x28) = uVar7;
                    /* catch() { ... } // from try @ 00323ecc with catch @ 003246ac */
    error(-0xd5,(String *)&local_10,"cv::cuda::GpuMat cv::_InputArray::getGpuMat() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x599);
  }
  String::deallocate((String *)&local_10);
  uVar11 = cuda::GpuMat::defaultAllocator();
                    /* catch() { ... } // from try @ 00323fa4 with catch @ 003246bc */
  *in_x8 = 0;
  in_x8[1] = 0;
  in_x8[2] = 0;
LAB_003246c8:
  *(undefined8 *)(in_x8 + 4) = 0;
                    /* catch() { ... } // from try @ 00324190 with catch @ 003246cc */
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
                    /* catch() { ... } // from try @ 003240c4 with catch @ 003246dc */
  *(undefined8 *)(in_x8 + 0xe) = uVar11;
                    /* catch() { ... } // from try @ 003243d4 with catch @ 003246ec */
  return;
}


==================================================================

### FUNC 003247f0 (212 bytes) name=getOGlBuffer

/* cv::_InputArray::getOGlBuffer() const */

void cv::_InputArray::getOGlBuffer(void)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  int iVar7;
  _InputArray *in_x0;
  char *pcVar8;
  long lVar9;
  long *plVar10;
  long *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar7 = kind(in_x0);
  if (iVar7 != 0x70000) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_10,0x12);
    uVar6 = s_k____OPENGL_BUFFER_0046b078._8_8_;
    uVar5 = s_k____OPENGL_BUFFER_0046b078._0_8_;
                    /* try { // try from 00324840 to 0042485b has its CatchHandler @ 003254a4 */
    *(undefined2 *)(pcVar8 + 0x10) = s_k____OPENGL_BUFFER_0046b078._16_2_;
    *(undefined8 *)pcVar8 = uVar5;
    *(undefined8 *)(pcVar8 + 8) = uVar6;
    error(-0xd7,(String *)&local_10,"cv::ogl::Buffer cv::_InputArray::getOGlBuffer() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5a1);
    String::deallocate((String *)&local_10);
  }
  plVar10 = *(long **)(in_x0 + 8);
  lVar9 = *plVar10;
  in_x8[1] = plVar10[1];
  *in_x8 = lVar9;
  if (lVar9 != 0) {
    piVar1 = (int *)(lVar9 + 8);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  lVar9 = plVar10[3];
  lVar4 = plVar10[2];
  *(undefined4 *)((long)in_x8 + 0x14) = *(undefined4 *)((long)plVar10 + 0x14);
  *(int *)(in_x8 + 3) = (int)lVar9;
  *(int *)(in_x8 + 2) = (int)lVar4;
  return;
}


==================================================================

### FUNC 003248d8 (2156 bytes) name=size

/* cv::_InputArray::size(int) const */

void cv::_InputArray::size(int param_1)

{
  uint uVar1;
  int iVar2;
  undefined1 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  int iVar6;
  _InputArray *this;
  undefined4 *puVar7;
  ulong uVar8;
  char *pcVar9;
  undefined8 uVar10;
  int *piVar11;
  int in_w1;
  undefined8 uVar12;
  ulong uVar13;
  undefined8 *puVar14;
  long lVar15;
  long lVar16;
  int *in_x8;
  long lVar17;
  long *plVar18;
  undefined8 local_10;
  undefined8 local_8;
  
  this = (_InputArray *)(ulong)(uint)param_1;
  lVar17 = (long)in_w1;
  iVar6 = kind(this);
  if (iVar6 == 0x10000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5bc);
      String::deallocate((String *)&local_10);
    }
    iVar6 = (*(int **)(*(long *)(this + 8) + 0x40))[1];
    in_x8[1] = **(int **)(*(long *)(this + 8) + 0x40);
    *in_x8 = iVar6;
    return;
  }
  if (iVar6 == 0x60000) {
    if (-1 < in_w1) {
                    /* try { // try from 00324a74 to 00424b0b has its CatchHandler @ 0032549c */
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5c2);
      String::deallocate((String *)&local_10);
    }
    MatExpr::size();
    return;
  }
  if (iVar6 == 0xa0000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
                    /* try { // try from 00324b28 to 00424b2b has its CatchHandler @ 003254bc */
                    /* try { // try from 00324b30 to 00424bef has its CatchHandler @ 0032549c */
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5c8);
      String::deallocate((String *)&local_10);
    }
    iVar6 = (*(int **)(*(long *)(this + 8) + 0x30))[1];
    in_x8[1] = **(int **)(*(long *)(this + 8) + 0x30);
    *in_x8 = iVar6;
    return;
  }
  if (iVar6 == 0x20000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
                    /* try { // try from 00324c60 to 00424c63 has its CatchHandler @ 003254b4 */
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5ce);
      String::deallocate((String *)&local_10);
    }
    *(undefined8 *)in_x8 = *(undefined8 *)(this + 0x10);
    return;
  }
  if (iVar6 == 0x30000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5d4);
      String::deallocate((String *)&local_10);
    }
    uVar13 = (*(long **)(this + 8))[1] - **(long **)(this + 8);
    if (uVar13 != (long)uVar13 >> 2) {
LAB_00324bf0:
      uVar1 = *(uint *)this;
      in_x8[1] = 1;
      uVar8 = (ulong)(int)((uVar1 >> 3 & 0x1ff) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3));
      iVar6 = 0;
      if (uVar8 != 0) {
        iVar6 = (int)(uVar13 / uVar8);
      }
      *in_x8 = iVar6;
      return;
    }
LAB_00324e58:
    *in_x8 = (int)uVar13;
    in_x8[1] = 1;
    return;
  }
  if (iVar6 == 0xc0000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
                    /* try { // try from 00324d48 to 00424d4b has its CatchHandler @ 003254a4 */
      *puVar7 = DAT_0046b090;
                    /* try { // try from 00324d74 to 00424dc7 has its CatchHandler @ 00324740 */
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5dd);
      String::deallocate((String *)&local_10);
    }
    puVar14 = *(undefined8 **)(this + 8);
    uVar10 = puVar14[2];
    uVar12 = *puVar14;
    iVar6 = *(int *)(puVar14 + 3);
    iVar2 = *(int *)(puVar14 + 1);
    in_x8[1] = 1;
    *in_x8 = (iVar6 + ((int)uVar10 - (int)uVar12) * 8) - iVar2;
    return;
  }
  if (iVar6 == 0) {
LAB_00324d18:
    *in_x8 = 0;
    in_x8[1] = 0;
    return;
  }
  if (iVar6 == 0x40000) {
    plVar18 = *(long **)(this + 8);
    lVar15 = *plVar18;
    if (-1 < in_w1) {
      lVar16 = lVar15;
      if ((int)(plVar18[1] - lVar15 >> 3) * -0x55555555 <= in_w1) {
        local_10 = 0;
        local_8 = 0;
        pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
        uVar12 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar10 = s_i_<_(int)vv_size()_0046b098._0_8_;
        *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar9 = uVar10;
        *(undefined8 *)(pcVar9 + 8) = uVar12;
        error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5ea);
        String::deallocate((String *)&local_10);
        lVar15 = *plVar18;
        lVar16 = **(long **)(this + 8);
      }
      lVar17 = lVar17 * 0x18;
      uVar13 = *(long *)(lVar15 + lVar17 + 8) - *(long *)(lVar15 + lVar17);
      if (uVar13 != *(long *)(lVar16 + lVar17 + 8) - *(long *)(lVar16 + lVar17) >> 2)
      goto LAB_00324bf0;
      goto LAB_00324e58;
    }
    lVar17 = plVar18[1];
    if (lVar17 != lVar15) {
      in_x8[1] = 1;
      *in_x8 = (int)(lVar17 - lVar15 >> 3) * -0x55555555;
      return;
    }
    goto LAB_00324d18;
  }
  if (iVar6 == 0x50000) {
    plVar18 = *(long **)(this + 8);
    if (-1 < in_w1) {
      lVar15 = *plVar18;
      if ((int)(plVar18[1] - lVar15 >> 5) * -0x55555555 <= in_w1) {
        local_10 = 0;
        local_8 = 0;
        pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
        uVar12 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar10 = s_i_<_(int)vv_size()_0046b098._0_8_;
                    /* try { // try from 00325044 to 00425047 has its CatchHandler @ 003254d0 */
        *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar9 = uVar10;
        *(undefined8 *)(pcVar9 + 8) = uVar12;
        error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x5f6);
        String::deallocate((String *)&local_10);
        lVar15 = *plVar18;
      }
      piVar11 = *(int **)(lVar15 + lVar17 * 0x60 + 0x40);
      iVar6 = piVar11[1];
      in_x8[1] = *piVar11;
      *in_x8 = iVar6;
      return;
    }
    lVar15 = *plVar18;
    lVar17 = plVar18[1];
    if (lVar15 != lVar17) {
      in_x8[1] = 1;
      *in_x8 = (int)(lVar17 - lVar15 >> 5) * -0x55555555;
      return;
    }
    goto LAB_00324d18;
  }
  if (iVar6 == 0xb0000) {
    plVar18 = *(long **)(this + 8);
    if (-1 < in_w1) {
      lVar15 = *plVar18;
      if ((int)(plVar18[1] - lVar15 >> 4) * -0x33333333 <= in_w1) {
        local_10 = 0;
        local_8 = 0;
        pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
        uVar12 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar10 = s_i_<_(int)vv_size()_0046b098._0_8_;
                    /* try { // try from 003250e8 to 004250eb has its CatchHandler @ 0032549c */
        *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar9 = uVar10;
        *(undefined8 *)(pcVar9 + 8) = uVar12;
        error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x600);
        String::deallocate((String *)&local_10);
        lVar15 = *plVar18;
      }
      piVar11 = *(int **)(lVar15 + lVar17 * 0x50 + 0x30);
      iVar6 = piVar11[1];
      in_x8[1] = *piVar11;
      *in_x8 = iVar6;
      return;
    }
    lVar15 = *plVar18;
    lVar17 = plVar18[1];
    if (lVar15 != lVar17) {
      in_x8[1] = 1;
      *in_x8 = (int)(lVar17 - lVar15 >> 4) * -0x33333333;
      return;
    }
    goto LAB_00324d18;
  }
  if (iVar6 == 0x70000) {
    if (-1 < in_w1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar3 = DAT_0046b094;
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar3;
      error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x607);
      String::deallocate((String *)&local_10);
    }
    iVar6 = *(int *)(*(long *)(this + 8) + 0x10);
    *in_x8 = *(int *)(*(long *)(this + 8) + 0x14);
    in_x8[1] = iVar6;
    return;
  }
  if (iVar6 == 0x90000) {
    if (in_w1 < 0) goto LAB_003249bc;
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
    uVar3 = DAT_0046b094;
    *puVar7 = DAT_0046b090;
    *(undefined1 *)(puVar7 + 1) = uVar3;
    error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x60e);
                    /* try { // try from 00324f80 to 00424fa3 has its CatchHandler @ 0032549c */
  }
  else {
    if (iVar6 != 0x80000) {
      local_10 = 0;
      local_8 = 0;
      pcVar9 = (char *)String::allocate((String *)&local_10,0x1e);
      uVar5 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
      uVar4 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
      uVar12 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
      uVar10 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
                    /* try { // try from 00324cd4 to 00424cd7 has its CatchHandler @ 003254ac */
      *(undefined8 *)(pcVar9 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
      *(undefined4 *)(pcVar9 + 0x18) = uVar4;
      *(undefined2 *)(pcVar9 + 0x1c) = uVar5;
      *(undefined8 *)pcVar9 = uVar10;
      *(undefined8 *)(pcVar9 + 8) = uVar12;
      error(-0xd5,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x61a);
      String::deallocate((String *)&local_10);
      goto LAB_00324d18;
    }
    if (in_w1 < 0) goto LAB_003249bc;
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
    uVar3 = DAT_0046b094;
    *puVar7 = DAT_0046b090;
    *(undefined1 *)(puVar7 + 1) = uVar3;
    error(-0xd7,(String *)&local_10,"cv::Size cv::_InputArray::size(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x615);
  }
  String::deallocate((String *)&local_10);
LAB_003249bc:
  iVar6 = *(int *)(*(long *)(this + 8) + 4);
  *in_x8 = *(int *)(*(long *)(this + 8) + 8);
  in_x8[1] = iVar6;
  return;
                    /* try { // try from 003249d0 to 004249d3 has its CatchHandler @ 003253fc */
}


==================================================================

### FUNC 00325248 (32 bytes) name=rows

/* cv::_InputArray::rows(int) const */

undefined4 cv::_InputArray::rows(int param_1)

{
  undefined4 local_4;
  
  size(param_1);
  return local_4;
}


==================================================================

### FUNC 00325268 (32 bytes) name=cols

/* cv::_InputArray::cols(int) const */

undefined4 cv::_InputArray::cols(int param_1)

{
  undefined4 local_8;
  
                    /* try { // try from 00325268 to 0042526b has its CatchHandler @ 003254b4 */
                    /* try { // try from 00325274 to 00425277 has its CatchHandler @ 003254ac */
  size(param_1);
                    /* try { // try from 00325280 to 00425293 has its CatchHandler @ 003254a4 */
  return local_8;
}


==================================================================

### FUNC 00325288 (1632 bytes) name=sizend

/* cv::_InputArray::sizend(int*, int) const */

ulong __thiscall cv::_InputArray::sizend(_InputArray *this,int *param_1,int param_2)

{
  uint uVar1;
  undefined1 uVar2;
  undefined8 uVar3;
  int iVar4;
  ulong uVar5;
  undefined4 *puVar6;
  char *pcVar7;
  int *piVar8;
  long lVar9;
  int *piVar10;
  ulong uVar11;
  uint uVar12;
  uint uVar13;
  int *piVar14;
  int iVar15;
  uint uVar16;
  long *plVar17;
  undefined8 uVar18;
  int local_10 [4];
  
                    /* try { // try from 003252a4 to 004252a7 has its CatchHandler @ 00324740 */
  uVar5 = kind(this);
  iVar4 = (int)uVar5;
  if (iVar4 == 0) {
    return uVar5;
  }
                    /* try { // try from 003252b0 to 004252b3 has its CatchHandler @ 0032549c */
  if (iVar4 == 0x10000) {
    if (-1 < param_2) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      puVar6 = (undefined4 *)String::allocate((String *)local_10,5);
      uVar2 = DAT_0046b094;
      *puVar6 = DAT_0046b090;
      *(undefined1 *)(puVar6 + 1) = uVar2;
      error(-0xd7,(String *)local_10,"int cv::_InputArray::sizend(int*, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x626);
      String::deallocate((String *)local_10);
    }
    uVar1 = *(uint *)(*(long *)(this + 8) + 4);
    uVar5 = (ulong)uVar1;
    if (param_1 == (int *)0x0) {
      return uVar5;
    }
    if ((int)uVar1 < 1) {
      return uVar5;
    }
    piVar10 = *(int **)(*(long *)(this + 8) + 0x40);
                    /* try { // try from 00325498 to 0042549b has its CatchHandler @ 00324740 */
                    /* catch() { ... } // from try @ 003248d4 with catch @ 0032549c
                       catch() { ... } // from try @ 00324a74 with catch @ 0032549c
                       catch() { ... } // from try @ 00324b30 with catch @ 0032549c
                       catch() { ... } // from try @ 00324f80 with catch @ 0032549c
                       catch() { ... } // from try @ 003250e8 with catch @ 0032549c
                       catch() { ... } // from try @ 003252b0 with catch @ 0032549c
                       catch() { ... } // from try @ 00325398 with catch @ 0032549c */
                    /* catch() { ... } // from try @ 00324840 with catch @ 003254a4
                       catch() { ... } // from try @ 00324d48 with catch @ 003254a4
                       catch() { ... } // from try @ 00325280 with catch @ 003254a4 */
                    /* catch() { ... } // from try @ 00324cd4 with catch @ 003254ac
                       catch() { ... } // from try @ 00325274 with catch @ 003254ac */
    if ((piVar10 < param_1 + 4 && param_1 < piVar10 + 4) || (uVar1 < 0xc)) {
      lVar9 = 0;
      do {
        param_1[lVar9] = piVar10[lVar9];
        lVar9 = lVar9 + 1;
      } while ((int)lVar9 < (int)uVar1);
      return uVar5;
    }
                    /* catch() { ... } // from try @ 00324c60 with catch @ 003254b4
                       catch() { ... } // from try @ 00325268 with catch @ 003254b4 */
    uVar12 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
                    /* catch() { ... } // from try @ 00324b28 with catch @ 003254bc */
    if (uVar1 < uVar12) {
      uVar12 = uVar1;
    }
    uVar16 = uVar12;
                    /* catch() { ... } // from try @ 00325044 with catch @ 003254d0
                       catch() { ... } // from try @ 0032523c with catch @ 003254d0 */
    if ((uVar12 != 0) && (*param_1 = *piVar10, uVar12 != 1)) {
      param_1[1] = piVar10[1];
      if (uVar12 == 3) {
        param_1[2] = piVar10[2];
      }
      else {
        uVar16 = 2;
      }
    }
    iVar15 = uVar1 - uVar12;
    uVar1 = (iVar15 - 4U >> 2) + 1;
    uVar13 = 0;
    iVar4 = uVar1 * 4;
    piVar8 = param_1 + uVar12;
    piVar14 = piVar10 + uVar12;
    do {
      uVar18 = *(undefined8 *)piVar14;
      uVar13 = uVar13 + 1;
      *(undefined8 *)(piVar8 + 2) = *(undefined8 *)(piVar14 + 2);
      *(undefined8 *)piVar8 = uVar18;
      piVar8 = piVar8 + 4;
      piVar14 = piVar14 + 4;
    } while (uVar13 < uVar1);
  }
  else if (iVar4 == 0xa0000) {
    if (-1 < param_2) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      puVar6 = (undefined4 *)String::allocate((String *)local_10,5);
      uVar2 = DAT_0046b094;
      *puVar6 = DAT_0046b090;
      *(undefined1 *)(puVar6 + 1) = uVar2;
      error(-0xd7,(String *)local_10,"int cv::_InputArray::sizend(int*, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x62f);
      String::deallocate((String *)local_10);
    }
    uVar1 = *(uint *)(*(long *)(this + 8) + 4);
    uVar5 = (ulong)uVar1;
    if (param_1 == (int *)0x0) {
      return uVar5;
    }
    if ((int)uVar1 < 1) {
      return uVar5;
    }
    piVar10 = *(int **)(*(long *)(this + 8) + 0x30);
    if ((piVar10 < param_1 + 4 && param_1 < piVar10 + 4) || (uVar1 < 0xc)) {
      lVar9 = 0;
      do {
        param_1[lVar9] = piVar10[lVar9];
        lVar9 = lVar9 + 1;
      } while ((int)lVar9 < (int)uVar1);
      return uVar5;
    }
    uVar12 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
    uVar13 = uVar1;
    if (uVar12 < uVar1) {
      uVar13 = uVar12;
    }
    uVar16 = uVar13;
    if ((uVar13 != 0) && (*param_1 = *piVar10, uVar13 != 1)) {
      param_1[1] = piVar10[1];
      if (uVar13 == 3) {
        param_1[2] = piVar10[2];
      }
      else {
        uVar16 = 2;
      }
    }
    iVar15 = uVar1 - uVar13;
    uVar1 = (iVar15 - 4U >> 2) + 1;
    uVar12 = 0;
    iVar4 = uVar1 * 4;
    piVar8 = param_1 + uVar13;
    piVar14 = piVar10 + uVar13;
    do {
      uVar18 = *(undefined8 *)piVar14;
      uVar12 = uVar12 + 1;
      *(undefined8 *)(piVar8 + 2) = *(undefined8 *)(piVar14 + 2);
      *(undefined8 *)piVar8 = uVar18;
      piVar8 = piVar8 + 4;
      piVar14 = piVar14 + 4;
    } while (uVar12 < uVar1);
  }
  else {
                    /* try { // try from 003252bc to 004252bf has its CatchHandler @ 003253fc */
    if ((iVar4 == 0x50000) && (-1 < param_2)) {
      plVar17 = *(long **)(this + 8);
      lVar9 = *plVar17;
      if ((int)(plVar17[1] - lVar9 >> 5) * -0x55555555 <= param_2) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
                    /* try { // try from 003257ac to 00425d3b has its CatchHandler @ 003262b0 */
        pcVar7 = (char *)String::allocate((String *)local_10,0x12);
        uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar18 = s_i_<_(int)vv_size()_0046b098._0_8_;
        *(undefined2 *)(pcVar7 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar7 = uVar18;
        *(undefined8 *)(pcVar7 + 8) = uVar3;
        error(-0xd7,(String *)local_10,"int cv::_InputArray::sizend(int*, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x639);
        String::deallocate((String *)local_10);
        lVar9 = *plVar17;
      }
      lVar9 = lVar9 + (long)param_2 * 0x60;
      uVar1 = *(uint *)(lVar9 + 4);
      uVar5 = (ulong)uVar1;
      if (param_1 == (int *)0x0) {
        return uVar5;
      }
      if ((int)uVar1 < 1) {
        return uVar5;
      }
      piVar10 = *(int **)(lVar9 + 0x40);
      if ((piVar10 < param_1 + 4 && param_1 < piVar10 + 4) || (uVar1 < 0xc)) {
        lVar9 = 0;
        do {
          param_1[lVar9] = piVar10[lVar9];
          lVar9 = lVar9 + 1;
        } while ((int)lVar9 < (int)uVar1);
        return uVar5;
      }
      uVar12 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
      uVar13 = uVar1;
      if (uVar12 < uVar1) {
        uVar13 = uVar12;
      }
      uVar16 = uVar13;
      if ((uVar13 != 0) && (*param_1 = *piVar10, uVar13 != 1)) {
        param_1[1] = piVar10[1];
        if (uVar13 == 3) {
          param_1[2] = piVar10[2];
        }
        else {
          uVar16 = 2;
        }
      }
      iVar15 = uVar1 - uVar13;
      uVar1 = (iVar15 - 4U >> 2) + 1;
                    /* try { // try from 00325398 to 004253df has its CatchHandler @ 0032549c */
      uVar12 = 0;
      iVar4 = uVar1 * 4;
      piVar8 = param_1 + uVar13;
      piVar14 = piVar10 + uVar13;
      do {
        uVar18 = *(undefined8 *)piVar14;
        uVar12 = uVar12 + 1;
        *(undefined8 *)(piVar8 + 2) = *(undefined8 *)(piVar14 + 2);
        *(undefined8 *)piVar8 = uVar18;
        piVar8 = piVar8 + 4;
        piVar14 = piVar14 + 4;
      } while (uVar12 < uVar1);
    }
    else {
      if ((iVar4 != 0xb0000) || (param_2 < 0)) {
        size((int)this);
        if (param_1 != (int *)0x0) {
          *param_1 = local_10[1];
          param_1[1] = local_10[0];
        }
        return 2;
      }
      plVar17 = *(long **)(this + 8);
      lVar9 = *plVar17;
      if ((int)(plVar17[1] - lVar9 >> 4) * -0x33333333 <= param_2) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar7 = (char *)String::allocate((String *)local_10,0x12);
        uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar18 = s_i_<_(int)vv_size()_0046b098._0_8_;
        *(undefined2 *)(pcVar7 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar7 = uVar18;
        *(undefined8 *)(pcVar7 + 8) = uVar3;
        error(-0xd7,(String *)local_10,"int cv::_InputArray::sizend(int*, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x643);
        String::deallocate((String *)local_10);
        lVar9 = *plVar17;
      }
      lVar9 = lVar9 + (long)param_2 * 0x50;
      uVar1 = *(uint *)(lVar9 + 4);
      uVar5 = (ulong)uVar1;
      if (param_1 == (int *)0x0) {
        return uVar5;
      }
      if ((int)uVar1 < 1) {
        return uVar5;
      }
      piVar10 = *(int **)(lVar9 + 0x30);
      if ((piVar10 < param_1 + 4 && param_1 < piVar10 + 4) || (uVar1 < 0xc)) {
        lVar9 = 0;
        do {
          param_1[lVar9] = piVar10[lVar9];
          lVar9 = lVar9 + 1;
        } while ((int)lVar9 < (int)uVar1);
        return uVar5;
      }
      uVar12 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
                    /* catch() { ... } // from try @ 003255fc with catch @ 003255b0
                       catch() { ... } // from try @ 00326080 with catch @ 003255b0
                       catch() { ... } // from try @ 00326380 with catch @ 003255b0 */
      uVar13 = uVar1;
      if (uVar12 < uVar1) {
        uVar13 = uVar12;
      }
      uVar16 = uVar13;
      if ((uVar13 != 0) && (*param_1 = *piVar10, uVar13 != 1)) {
        param_1[1] = piVar10[1];
        if (uVar13 == 3) {
          param_1[2] = piVar10[2];
        }
        else {
          uVar16 = 2;
        }
      }
      iVar15 = uVar1 - uVar13;
                    /* try { // try from 003255fc to 004255ff has its CatchHandler @ 003255b0 */
      uVar1 = (iVar15 - 4U >> 2) + 1;
      uVar12 = 0;
      iVar4 = uVar1 * 4;
      piVar8 = param_1 + uVar13;
      piVar14 = piVar10 + uVar13;
      do {
        uVar18 = *(undefined8 *)piVar14;
        uVar12 = uVar12 + 1;
                    /* try { // try from 00325618 to 0042561b has its CatchHandler @ 00326384 */
        *(undefined8 *)(piVar8 + 2) = *(undefined8 *)(piVar14 + 2);
        *(undefined8 *)piVar8 = uVar18;
        piVar8 = piVar8 + 4;
        piVar14 = piVar14 + 4;
      } while (uVar12 < uVar1);
    }
  }
  uVar16 = uVar16 + iVar4;
  if (iVar15 != iVar4) {
    uVar11 = -(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2;
    *(undefined4 *)((long)param_1 + uVar11) = *(undefined4 *)((long)piVar10 + uVar11);
    if (((int)(uVar16 + 1) < (int)uVar5) &&
       (*(undefined4 *)((long)param_1 + uVar11 + 4) = *(undefined4 *)((long)piVar10 + uVar11 + 4),
       (int)(uVar16 + 2) < (int)uVar5)) {
      *(undefined4 *)((long)param_1 + uVar11 + 8) = *(undefined4 *)((long)piVar10 + uVar11 + 8);
    }
  }
                    /* catch() { ... } // from try @ 003249d0 with catch @ 003253fc
                       catch() { ... } // from try @ 003252bc with catch @ 003253fc */
  return uVar5;
}


==================================================================

### FUNC 00325938 (1528 bytes) name=dims

/* cv::_InputArray::dims(int) const */

ulong __thiscall cv::_InputArray::dims(_InputArray *this,int param_1)

{
  undefined1 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  int iVar6;
  ulong uVar7;
  undefined4 *puVar8;
  char *pcVar9;
  long lVar10;
  long *plVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar7 = kind(this);
  iVar6 = (int)uVar7;
  if (iVar6 == 0x10000) {
    if (param_1 < 0) goto LAB_00325a70;
    local_10 = 0;
    local_8 = 0;
    puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
    uVar1 = DAT_0046b094;
    *puVar8 = DAT_0046b090;
    *(undefined1 *)(puVar8 + 1) = uVar1;
    error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x680);
  }
  else {
    if (iVar6 == 0x60000) {
      if (-1 < param_1) {
        local_10 = 0;
        local_8 = 0;
        puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar8 = DAT_0046b090;
        *(undefined1 *)(puVar8 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x686);
        String::deallocate((String *)&local_10);
      }
      return (ulong)*(uint *)(*(long *)(this + 8) + 0x14);
    }
    if (iVar6 != 0xa0000) {
      if (iVar6 == 0x20000) {
        if (param_1 < 0) {
          return 2;
        }
        local_10 = 0;
        local_8 = 0;
        puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar8 = DAT_0046b090;
        *(undefined1 *)(puVar8 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x692);
      }
      else {
        if ((iVar6 != 0xc0000) && (iVar6 != 0x30000)) {
          if (iVar6 == 0) {
            return uVar7;
          }
          if (iVar6 == 0x40000) {
            if (-1 < param_1) {
              if (param_1 < (int)((*(long **)(this + 8))[1] - **(long **)(this + 8) >> 3) *
                            -0x55555555) {
                return 2;
              }
              local_10 = 0;
              local_8 = 0;
              pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
              uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
              uVar2 = s_i_<_(int)vv_size()_0046b098._0_8_;
              *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
              *(undefined8 *)pcVar9 = uVar2;
              *(undefined8 *)(pcVar9 + 8) = uVar3;
              error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6a4);
              goto LAB_00325bb4;
            }
          }
          else if (iVar6 == 0x50000) {
            plVar11 = *(long **)(this + 8);
            if (-1 < param_1) {
              lVar10 = *plVar11;
              if ((int)(plVar11[1] - lVar10 >> 5) * -0x55555555 <= param_1) {
                local_10 = 0;
                local_8 = 0;
                pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
                uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
                uVar2 = s_i_<_(int)vv_size()_0046b098._0_8_;
                    /* try { // try from 00325e84 to 00425e87 has its CatchHandler @ 00326438 */
                *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
                *(undefined8 *)pcVar9 = uVar2;
                *(undefined8 *)(pcVar9 + 8) = uVar3;
                error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6ad);
                String::deallocate((String *)&local_10);
                lVar10 = *plVar11;
              }
              return (ulong)*(uint *)(lVar10 + (long)param_1 * 0x60 + 4);
            }
          }
          else {
            if (iVar6 != 0xb0000) {
              if (iVar6 == 0x70000) {
                if (param_1 < 0) {
                  return 2;
                }
                local_10 = 0;
                local_8 = 0;
                puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
                uVar1 = DAT_0046b094;
                *puVar8 = DAT_0046b090;
                *(undefined1 *)(puVar8 + 1) = uVar1;
                error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6be);
                    /* try { // try from 00325d94 to 00425d97 has its CatchHandler @ 0032641c */
              }
              else if (iVar6 == 0x90000) {
                if (param_1 < 0) {
                  return 2;
                }
                    /* try { // try from 00325e10 to 00425e13 has its CatchHandler @ 00326430 */
                local_10 = 0;
                local_8 = 0;
                puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
                uVar1 = DAT_0046b094;
                *puVar8 = DAT_0046b090;
                *(undefined1 *)(puVar8 + 1) = uVar1;
                error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6c4);
              }
              else {
                if (iVar6 != 0x80000) {
                    /* try { // try from 00325d9c to 00425d9f has its CatchHandler @ 003262b0 */
                  local_10 = 0;
                  local_8 = 0;
                  pcVar9 = (char *)String::allocate((String *)&local_10,0x1e);
                  uVar5 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
                  uVar4 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
                  uVar3 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
                  uVar2 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
                  *(undefined8 *)(pcVar9 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
                  *(undefined4 *)(pcVar9 + 0x18) = uVar4;
                  *(undefined2 *)(pcVar9 + 0x1c) = uVar5;
                  *(undefined8 *)pcVar9 = uVar2;
                  *(undefined8 *)(pcVar9 + 8) = uVar3;
                  error(-0xd5,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6ce);
                  String::deallocate((String *)&local_10);
                  return 0;
                }
                if (param_1 < 0) {
                  return 2;
                }
                local_10 = 0;
                local_8 = 0;
                puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
                uVar1 = DAT_0046b094;
                *puVar8 = DAT_0046b090;
                *(undefined1 *)(puVar8 + 1) = uVar1;
                error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6ca);
              }
              goto LAB_00325bb4;
            }
            plVar11 = *(long **)(this + 8);
            if (-1 < param_1) {
              lVar10 = *plVar11;
              if ((int)(plVar11[1] - lVar10 >> 4) * -0x33333333 <= param_1) {
                local_10 = 0;
                local_8 = 0;
                pcVar9 = (char *)String::allocate((String *)&local_10,0x12);
                uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
                uVar2 = s_i_<_(int)vv_size()_0046b098._0_8_;
                    /* try { // try from 00325ef8 to 00425efb has its CatchHandler @ 00326440 */
                *(undefined2 *)(pcVar9 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
                *(undefined8 *)pcVar9 = uVar2;
                *(undefined8 *)(pcVar9 + 8) = uVar3;
                error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6b7);
                String::deallocate((String *)&local_10);
                lVar10 = *plVar11;
              }
              return (ulong)*(uint *)(lVar10 + (long)param_1 * 0x50 + 4);
            }
          }
          return 1;
        }
        if (param_1 < 0) {
          return 2;
        }
        local_10 = 0;
        local_8 = 0;
        puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar8 = DAT_0046b090;
        *(undefined1 *)(puVar8 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x698);
      }
LAB_00325bb4:
      String::deallocate((String *)&local_10);
      return 2;
    }
    if (param_1 < 0) goto LAB_00325a70;
    local_10 = 0;
    local_8 = 0;
    puVar8 = (undefined4 *)String::allocate((String *)&local_10,5);
    uVar1 = DAT_0046b094;
    *puVar8 = DAT_0046b090;
    *(undefined1 *)(puVar8 + 1) = uVar1;
    error(-0xd7,(String *)&local_10,"int cv::_InputArray::dims(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x68c);
  }
  String::deallocate((String *)&local_10);
LAB_00325a70:
  return (ulong)*(uint *)(*(long *)(this + 8) + 4);
}


==================================================================

### FUNC 00326020 (764 bytes) name=sameSize

/* cv::_InputArray::sameSize(cv::_InputArray const&) const */

bool __thiscall cv::_InputArray::sameSize(_InputArray *this,_InputArray *param_1)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  int local_8;
  int local_4;
  
  iVar2 = kind(this);
  iVar3 = kind(param_1);
  if (iVar2 == 0x10000) {
                    /* try { // try from 00326104 to 00426113 has its CatchHandler @ 003263d4 */
    lVar5 = *(long *)(this + 8);
    if (iVar3 == 0x10000) {
                    /* try { // try from 00326218 to 0042621b has its CatchHandler @ 00326384 */
      piVar6 = *(int **)(lVar5 + 0x40);
      piVar7 = *(int **)(*(long *)(param_1 + 8) + 0x40);
      iVar2 = piVar6[-1];
                    /* try { // try from 00326224 to 00426227 has its CatchHandler @ 00326440 */
      if (iVar2 != piVar7[-1]) {
        return false;
      }
                    /* try { // try from 00326230 to 00426233 has its CatchHandler @ 003263c4 */
      if (iVar2 != 2) {
                    /* try { // try from 0032623c to 0042623f has its CatchHandler @ 00326430 */
        if (iVar2 < 1) {
          return true;
        }
                    /* try { // try from 00326248 to 0042624b has its CatchHandler @ 003262b0 */
        if (*piVar6 != *piVar7) {
          return false;
        }
        piVar1 = piVar6 + (iVar2 - 1);
                    /* try { // try from 00326260 to 00426263 has its CatchHandler @ 003262b0 */
                    /* try { // try from 00326254 to 00426257 has its CatchHandler @ 003263f8 */
        do {
          piVar7 = piVar7 + 1;
                    /* try { // try from 00326278 to 0042627b has its CatchHandler @ 003263f8 */
          if (piVar6 == piVar1) {
            return true;
          }
          piVar6 = piVar6 + 1;
                    /* try { // try from 0032626c to 0042626f has its CatchHandler @ 003263d4 */
        } while (*piVar6 == *piVar7);
        return false;
      }
LAB_003262f4:
      if (*piVar6 == *piVar7) {
        return piVar6[1] == piVar7[1];
      }
      return false;
    }
    if (iVar3 == 0xa0000) {
      piVar6 = *(int **)(lVar5 + 0x40);
      piVar7 = *(int **)(*(long *)(param_1 + 8) + 0x30);
      iVar2 = piVar6[-1];
      if (iVar2 != piVar7[-1]) {
        return false;
      }
      if (iVar2 != 2) {
        if (iVar2 < 1) {
          return true;
        }
                    /* catch() { ... } // from try @ 003257ac with catch @ 003262b0
                       catch() { ... } // from try @ 00325d9c with catch @ 003262b0
                       catch() { ... } // from try @ 00326248 with catch @ 003262b0
                       catch() { ... } // from try @ 00326260 with catch @ 003262b0 */
        if (*piVar6 != *piVar7) {
          return false;
        }
        piVar1 = piVar6 + (iVar2 - 1);
        do {
          piVar7 = piVar7 + 1;
          if (piVar6 == piVar1) {
            return true;
          }
          piVar6 = piVar6 + 1;
        } while (*piVar6 == *piVar7);
        return false;
      }
      goto LAB_003262f4;
    }
                    /* try { // try from 00326120 to 00426133 has its CatchHandler @ 003263f8 */
    if (2 < *(int *)(lVar5 + 4)) {
      return false;
    }
    iVar2 = (*(int **)(lVar5 + 0x40))[1];
    iVar3 = **(int **)(lVar5 + 0x40);
  }
  else {
    if (iVar2 == 0xa0000) {
      lVar5 = *(long *)(this + 8);
      if (iVar3 == 0x10000) {
        piVar6 = *(int **)(lVar5 + 0x30);
        piVar7 = *(int **)(*(long *)(param_1 + 8) + 0x40);
                    /* try { // try from 00326140 to 00426143 has its CatchHandler @ 003263d4 */
        iVar2 = piVar6[-1];
        if (iVar2 != piVar7[-1]) {
          return false;
        }
                    /* try { // try from 00326154 to 00426157 has its CatchHandler @ 003263cc */
        if (iVar2 != 2) {
          if (iVar2 < 1) {
            return true;
          }
          if (*piVar6 != *piVar7) {
            return false;
          }
          piVar1 = piVar6 + (iVar2 - 1);
          do {
            piVar7 = piVar7 + 1;
            if (piVar6 == piVar1) {
              return true;
            }
            piVar6 = piVar6 + 1;
          } while (*piVar6 == *piVar7);
          return false;
        }
        goto LAB_003262f4;
      }
      if (iVar3 == 0xa0000) {
        piVar6 = *(int **)(lVar5 + 0x30);
        piVar7 = *(int **)(*(long *)(param_1 + 8) + 0x30);
        iVar2 = piVar6[-1];
        if (iVar2 != piVar7[-1]) {
          return false;
        }
        if (iVar2 != 2) {
          if (iVar2 < 1) {
            return true;
          }
          if (*piVar6 != *piVar7) {
            return false;
          }
          piVar1 = piVar6 + (iVar2 - 1);
          do {
            piVar7 = piVar7 + 1;
            if (piVar6 == piVar1) {
              return true;
            }
            piVar6 = piVar6 + 1;
                    /* try { // try from 00326200 to 00426203 has its CatchHandler @ 00326438 */
          } while (*piVar6 == *piVar7);
          return false;
        }
        goto LAB_003262f4;
      }
      if (2 < *(int *)(lVar5 + 4)) {
        return false;
      }
      iVar2 = (*(int **)(lVar5 + 0x30))[1];
      iVar3 = **(int **)(lVar5 + 0x30);
      iVar4 = dims(param_1,-1);
      goto joined_r0x003260d0;
    }
                    /* try { // try from 00326054 to 00426057 has its CatchHandler @ 00326384 */
    size((int)this);
    iVar2 = local_8;
    iVar3 = local_4;
  }
  iVar4 = dims(param_1,-1);
joined_r0x003260d0:
  if (2 < iVar4) {
                    /* try { // try from 00326080 to 004260d3 has its CatchHandler @ 003255b0 */
    return false;
  }
  size((int)param_1);
  if (local_8 == iVar2) {
    return local_4 == iVar3;
  }
  return false;
}


==================================================================

### FUNC 0032631c (928 bytes) name=total

/* cv::_InputArray::total(int) const */

long __thiscall cv::_InputArray::total(_InputArray *this,int param_1)

{
  long lVar1;
  undefined1 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int iVar5;
  undefined4 *puVar6;
  long lVar7;
  char *pcVar8;
  long lVar9;
  long lVar10;
  long *plVar11;
  int local_10 [4];
  
  iVar5 = kind(this);
  if (iVar5 == 0x10000) {
                    /* catch() { ... } // from try @ 00325618 with catch @ 00326384
                       catch() { ... } // from try @ 00326054 with catch @ 00326384
                       catch() { ... } // from try @ 00326218 with catch @ 00326384 */
    if (-1 < param_1) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      puVar6 = (undefined4 *)String::allocate((String *)local_10,5);
      uVar2 = DAT_0046b094;
                    /* catch() { ... } // from try @ 00325f6c with catch @ 003263c4
                       catch() { ... } // from try @ 00326230 with catch @ 003263c4 */
                    /* catch() { ... } // from try @ 00325fe0 with catch @ 003263cc
                       catch() { ... } // from try @ 00326154 with catch @ 003263cc
                       catch() { ... } // from try @ 0032620c with catch @ 003263cc */
      *puVar6 = DAT_0046b090;
                    /* catch() { ... } // from try @ 00326104 with catch @ 003263d4
                       catch() { ... } // from try @ 00326140 with catch @ 003263d4
                       catch() { ... } // from try @ 0032626c with catch @ 003263d4 */
      *(undefined1 *)(puVar6 + 1) = uVar2;
      error(-0xd7,(String *)local_10,"size_t cv::_InputArray::total(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6d8);
      String::deallocate((String *)local_10);
    }
    lVar10 = *(long *)(this + 8);
    if (2 < *(int *)(lVar10 + 4)) {
      lVar7 = 1;
      lVar9 = 0;
      do {
        lVar1 = lVar9 * 4;
        lVar9 = lVar9 + 1;
        lVar7 = lVar7 * *(int *)(*(long *)(lVar10 + 0x40) + lVar1);
      } while ((int)lVar9 < *(int *)(lVar10 + 4));
      return lVar7;
    }
  }
  else {
    if (iVar5 != 0xa0000) {
      if (iVar5 == 0x50000) {
        plVar11 = *(long **)(this + 8);
        if (param_1 < 0) {
          return (plVar11[1] - *plVar11 >> 5) * -0x5555555555555555;
        }
        lVar10 = *plVar11;
        if ((int)(plVar11[1] - lVar10 >> 5) * -0x55555555 <= param_1) {
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar8 = (char *)String::allocate((String *)local_10,0x12);
          uVar4 = s_i_<_(int)vv_size()_0046b098._8_8_;
          uVar3 = s_i_<_(int)vv_size()_0046b098._0_8_;
          *(undefined2 *)(pcVar8 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
          *(undefined8 *)pcVar8 = uVar3;
          *(undefined8 *)(pcVar8 + 8) = uVar4;
          error(-0xd7,(String *)local_10,"size_t cv::_InputArray::total(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6e8);
          String::deallocate((String *)local_10);
          lVar10 = *plVar11;
        }
        lVar10 = lVar10 + (long)param_1 * 0x60;
        if (2 < *(int *)(lVar10 + 4)) {
          lVar9 = 0;
          lVar7 = 1;
          do {
            lVar1 = lVar9 * 4;
            lVar9 = lVar9 + 1;
            lVar7 = lVar7 * *(int *)(*(long *)(lVar10 + 0x40) + lVar1);
          } while ((int)lVar9 < *(int *)(lVar10 + 4));
          return lVar7;
        }
      }
      else {
        if (iVar5 != 0xb0000) {
          size((int)this);
                    /* try { // try from 00326380 to 00426383 has its CatchHandler @ 003255b0 */
          return (long)(local_10[0] * local_10[1]);
        }
        plVar11 = *(long **)(this + 8);
        if (param_1 < 0) {
          return (plVar11[1] - *plVar11 >> 4) * -0x3333333333333333;
        }
        lVar10 = *plVar11;
        if ((int)(plVar11[1] - lVar10 >> 4) * -0x33333333 <= param_1) {
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar8 = (char *)String::allocate((String *)local_10,0x12);
          uVar4 = s_i_<_(int)vv_size()_0046b098._8_8_;
          uVar3 = s_i_<_(int)vv_size()_0046b098._0_8_;
          *(undefined2 *)(pcVar8 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
          *(undefined8 *)pcVar8 = uVar3;
          *(undefined8 *)(pcVar8 + 8) = uVar4;
          error(-0xd7,(String *)local_10,"size_t cv::_InputArray::total(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6f2);
          String::deallocate((String *)local_10);
          lVar10 = *plVar11;
        }
        lVar10 = lVar10 + (long)param_1 * 0x50;
        if (2 < *(int *)(lVar10 + 4)) {
          lVar9 = 0;
          lVar7 = 1;
          do {
            lVar1 = lVar9 * 4;
            lVar9 = lVar9 + 1;
            lVar7 = lVar7 * *(int *)(*(long *)(lVar10 + 0x30) + lVar1);
          } while ((int)lVar9 < *(int *)(lVar10 + 4));
          return lVar7;
        }
      }
      return (long)*(int *)(lVar10 + 0xc) * (long)*(int *)(lVar10 + 8);
    }
    if (-1 < param_1) {
      local_10[0] = 0;
      local_10[1] = 0;
                    /* catch() { ... } // from try @ 00325d94 with catch @ 0032641c */
      local_10[2] = 0;
      local_10[3] = 0;
      puVar6 = (undefined4 *)String::allocate((String *)local_10,5);
      uVar2 = DAT_0046b094;
                    /* catch() { ... } // from try @ 00325e10 with catch @ 00326430
                       catch() { ... } // from try @ 0032623c with catch @ 00326430 */
                    /* catch() { ... } // from try @ 00325e84 with catch @ 00326438
                       catch() { ... } // from try @ 00326200 with catch @ 00326438 */
                    /* catch() { ... } // from try @ 00325ef8 with catch @ 00326440
                       catch() { ... } // from try @ 00326224 with catch @ 00326440 */
      *puVar6 = DAT_0046b090;
      *(undefined1 *)(puVar6 + 1) = uVar2;
      error(-0xd7,(String *)local_10,"size_t cv::_InputArray::total(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6de);
      String::deallocate((String *)local_10);
    }
    lVar10 = *(long *)(this + 8);
    if (2 < *(int *)(lVar10 + 4)) {
      lVar7 = 1;
      lVar9 = 0;
      do {
        lVar1 = lVar9 * 4;
        lVar9 = lVar9 + 1;
        lVar7 = lVar7 * *(int *)(*(long *)(lVar10 + 0x30) + lVar1);
      } while ((int)lVar9 < *(int *)(lVar10 + 4));
      return lVar7;
    }
  }
                    /* catch() { ... } // from try @ 00326120 with catch @ 003263f8
                       catch() { ... } // from try @ 00326254 with catch @ 003263f8
                       catch() { ... } // from try @ 00326278 with catch @ 003263f8 */
  return (long)*(int *)(lVar10 + 0xc) * (long)*(int *)(lVar10 + 8);
}


==================================================================

### FUNC 0032670c (896 bytes) name=type

/* cv::_InputArray::type(int) const */

ulong __thiscall cv::_InputArray::type(_InputArray *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  uint uVar6;
  char *pcVar7;
  ulong uVar8;
  long lVar9;
  long *plVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar6 = kind(this);
  if ((uVar6 == 0x10000) || (uVar6 == 0xa0000)) {
LAB_0032680c:
    return (ulong)(**(uint **)(this + 8) & 0xfff);
  }
  if (uVar6 == 0x60000) {
    uVar8 = MatExpr::type(*(MatExpr **)(this + 8));
    return uVar8;
  }
  if (((uVar6 & 0xfffeffff) == 0x20000) || ((uVar6 & 0xfff7ffff) == 0x40000)) {
    return (ulong)(*(uint *)this & 0xfff);
  }
  if (uVar6 == 0) {
    return 0xffffffff;
  }
  if (uVar6 == 0xb0000) {
    plVar10 = *(long **)(this + 8);
    lVar9 = *plVar10;
    if (lVar9 != plVar10[1]) {
      if ((int)(plVar10[1] - lVar9 >> 4) * -0x33333333 <= param_1) {
        local_10 = 0;
        local_8 = 0;
        pcVar7 = (char *)String::allocate((String *)&local_10,0x12);
        uVar2 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar1 = s_i_<_(int)vv_size()_0046b098._0_8_;
        *(undefined2 *)(pcVar7 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar7 = uVar1;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        error(-0xd7,(String *)&local_10,"int cv::_InputArray::type(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x714);
        String::deallocate((String *)&local_10);
        lVar9 = *plVar10;
      }
      if (param_1 < 0) {
        param_1 = 0;
      }
      return (ulong)(*(uint *)(lVar9 + (long)param_1 * 0x50) & 0xfff);
    }
    uVar6 = *(uint *)this;
    if ((int)uVar6 < 0) goto LAB_003268f4;
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)String::allocate((String *)&local_10,0x19);
    cVar5 = s__flags___FIXED_TYPE_____0_0046b0d0[0x18];
    uVar2 = s__flags___FIXED_TYPE_____0_0046b0d0._8_8_;
    uVar1 = s__flags___FIXED_TYPE_____0_0046b0d0._0_8_;
    *(undefined8 *)(pcVar7 + 0x10) = s__flags___FIXED_TYPE_____0_0046b0d0._16_8_;
    pcVar7[0x18] = cVar5;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"int cv::_InputArray::type(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x711);
  }
  else {
    if (uVar6 != 0x50000) {
      if (uVar6 == 0x70000) {
        return (ulong)*(uint *)(*(long *)(this + 8) + 0x18);
      }
      if ((uVar6 & 0xfffeffff) != 0x80000) {
        local_10 = 0;
        local_8 = 0;
        pcVar7 = (char *)String::allocate((String *)&local_10,0x1e);
        uVar4 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
        uVar3 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
        uVar2 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
        uVar1 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
        *(undefined8 *)(pcVar7 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
        *(undefined4 *)(pcVar7 + 0x18) = uVar3;
        *(undefined2 *)(pcVar7 + 0x1c) = uVar4;
        *(undefined8 *)pcVar7 = uVar1;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        error(-0xd5,(String *)&local_10,"int cv::_InputArray::type(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x72d);
        String::deallocate((String *)&local_10);
        return 0;
      }
      goto LAB_0032680c;
    }
    plVar10 = *(long **)(this + 8);
    lVar9 = *plVar10;
    if (lVar9 != plVar10[1]) {
      if ((int)(plVar10[1] - lVar9 >> 5) * -0x55555555 <= param_1) {
        local_10 = 0;
        local_8 = 0;
        pcVar7 = (char *)String::allocate((String *)&local_10,0x12);
        uVar2 = s_i_<_(int)vv_size()_0046b098._8_8_;
        uVar1 = s_i_<_(int)vv_size()_0046b098._0_8_;
        *(undefined2 *)(pcVar7 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
        *(undefined8 *)pcVar7 = uVar1;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        error(-0xd7,(String *)&local_10,"int cv::_InputArray::type(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x720);
        String::deallocate((String *)&local_10);
        lVar9 = *plVar10;
      }
      if (param_1 < 0) {
        param_1 = 0;
      }
      return (ulong)(*(uint *)(lVar9 + (long)param_1 * 0x60) & 0xfff);
    }
    uVar6 = *(uint *)this;
    if ((int)uVar6 < 0) goto LAB_003268f4;
    local_10 = 0;
    local_8 = 0;
    pcVar7 = (char *)String::allocate((String *)&local_10,0x19);
    cVar5 = s__flags___FIXED_TYPE_____0_0046b0d0[0x18];
    uVar2 = s__flags___FIXED_TYPE_____0_0046b0d0._8_8_;
    uVar1 = s__flags___FIXED_TYPE_____0_0046b0d0._0_8_;
    *(undefined8 *)(pcVar7 + 0x10) = s__flags___FIXED_TYPE_____0_0046b0d0._16_8_;
    pcVar7[0x18] = cVar5;
    *(undefined8 *)pcVar7 = uVar1;
    *(undefined8 *)(pcVar7 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"int cv::_InputArray::type(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x71d);
  }
  String::deallocate((String *)&local_10);
  uVar6 = *(uint *)this;
LAB_003268f4:
  return (ulong)(uVar6 & 0xfff);
}


==================================================================

### FUNC 00326af0 (3960 bytes) name=getMat_

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_InputArray::getMat_(int) const */

void cv::_InputArray::getMat_(int param_1)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  ulong uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  undefined1 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  _InputArray *this;
  undefined4 *puVar15;
  undefined8 *puVar16;
  void *__dest;
  char *pcVar17;
  int in_w1;
  uint uVar18;
  undefined8 *puVar19;
  ulong uVar20;
  Mat *pMVar21;
  uint uVar22;
  long lVar23;
  code *pcVar24;
  undefined8 uVar25;
  uint *puVar26;
  undefined8 uVar27;
  long lVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  Mat *in_x8;
  undefined8 uVar31;
  ulong uVar32;
  long lVar33;
  long *plVar34;
  ulong uVar35;
  undefined8 uVar36;
  undefined4 local_70;
  undefined4 local_6c;
  int local_68;
  int local_64;
  undefined8 local_60;
  undefined8 uStack_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  this = (_InputArray *)(ulong)(uint)param_1;
  iVar12 = kind(this);
  uVar18 = *(uint *)this;
  if (iVar12 == 0x10000) {
    pMVar21 = *(Mat **)(this + 8);
    if (-1 < in_w1) {
      local_68 = -0x80000000;
      local_60 = CONCAT44(in_w1 + 1,in_w1);
      local_64 = 0x7fffffff;
      Mat::Mat(in_x8,pMVar21,(Range *)&local_60,(Range *)&local_68);
      return;
    }
    uVar31 = *(undefined8 *)(pMVar21 + 0x10);
    uVar30 = *(undefined8 *)(pMVar21 + 0x18);
    uVar29 = *(undefined8 *)(pMVar21 + 0x20);
    uVar27 = *(undefined8 *)(pMVar21 + 0x28);
    uVar25 = *(undefined8 *)(pMVar21 + 0x30);
    uVar36 = *(undefined8 *)(pMVar21 + 8);
    lVar23 = *(long *)(pMVar21 + 0x38);
    *(undefined8 *)in_x8 = *(undefined8 *)pMVar21;
    *(undefined8 *)(in_x8 + 8) = uVar36;
    *(undefined8 *)(in_x8 + 0x10) = uVar31;
    *(undefined8 *)(in_x8 + 0x18) = uVar30;
    *(undefined8 *)(in_x8 + 0x20) = uVar29;
    *(undefined8 *)(in_x8 + 0x28) = uVar27;
    *(undefined8 *)(in_x8 + 0x30) = uVar25;
    *(long *)(in_x8 + 0x38) = lVar23;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    if (lVar23 != 0) {
      piVar1 = (int *)(lVar23 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
LAB_00327248:
    if (*(int *)(pMVar21 + 4) < 3) {
      puVar19 = *(undefined8 **)(pMVar21 + 0x48);
      puVar16 = *(undefined8 **)(in_x8 + 0x48);
      *puVar16 = *puVar19;
      puVar16[1] = puVar19[1];
      return;
    }
    *(undefined4 *)(in_x8 + 4) = 0;
    Mat::copySize(in_x8,pMVar21);
    return;
  }
  if (iVar12 == 0xa0000) {
    if (in_w1 < 0) {
      UMat::getMat((int)*(undefined8 *)(this + 8));
      return;
    }
    UMat::getMat((int)*(undefined8 *)(this + 8));
    local_64 = in_w1 + 1;
    local_70 = 0x80000000;
    local_6c = 0x7fffffff;
    local_68 = in_w1;
    Mat::Mat(in_x8,(Mat *)&local_60,(Range *)&local_68,(Range *)&local_70);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar12 = *piVar1;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = iVar12 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar12 = 0;
      puVar16 = local_20;
      do {
        *(undefined4 *)puVar16 = 0;
        iVar12 = iVar12 + 1;
        puVar16 = (undefined8 *)((long)puVar16 + 4);
      } while (iVar12 < local_60._4_4_);
    }
LAB_00326ddc:
    local_28 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    local_50 = 0;
    if (local_18 == &local_10) {
      return;
    }
    fastFree(local_18);
    return;
  }
  if (iVar12 == 0x60000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x472);
      String::deallocate((String *)&local_60);
    }
    puVar16 = *(undefined8 **)(this + 8);
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    plVar34 = (long *)*puVar16;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    lVar23 = *plVar34;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined4 *)in_x8 = 0x42ff0000;
    pcVar24 = *(code **)(lVar23 + 0x18);
    *(undefined4 *)(in_x8 + 4) = 0;
    *(undefined4 *)(in_x8 + 8) = 0;
    *(undefined4 *)(in_x8 + 0xc) = 0;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    (*pcVar24)(plVar34);
    return;
  }
  if (iVar12 == 0x20000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x478);
      String::deallocate((String *)&local_60);
      uVar18 = *(uint *)this;
    }
    iVar12 = *(int *)(this + 0x10);
    iVar3 = *(int *)(this + 0x14);
    iVar14 = (uVar18 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar18 & 7) << 1)) & 3);
    lVar28 = *(long *)(this + 8);
    *(undefined4 *)(in_x8 + 4) = 2;
    lVar23 = (long)iVar14 * (long)iVar12;
    *(int *)(in_x8 + 0xc) = iVar12;
    lVar33 = lVar28 + lVar23 * iVar3;
    *(int *)(in_x8 + 8) = iVar3;
    *(long *)(in_x8 + 0x10) = lVar28;
    *(long *)(in_x8 + 0x18) = lVar28;
    *(undefined8 *)(in_x8 + 0x30) = 0;
LAB_00327198:
    *(long *)(in_x8 + 0x58) = (long)iVar14;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(uint *)in_x8 = (uVar18 & 0xfff) + 0x42ff0000 | 0x4000;
    *(long *)(in_x8 + 0x50) = lVar23;
    *(long *)(in_x8 + 0x28) = lVar33;
    *(long *)(in_x8 + 0x20) = lVar33;
    return;
  }
  if (iVar12 == 0x30000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x47e);
      String::deallocate((String *)&local_60);
      uVar18 = *(uint *)this;
    }
    plVar34 = *(long **)(this + 8);
    if (plVar34[1] != *plVar34) {
      size(param_1);
      iVar14 = (uVar18 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar18 & 7) << 1)) & 3);
      lVar33 = *plVar34;
      *(int *)(in_x8 + 0xc) = (int)local_60;
      lVar23 = (long)iVar14 * (long)(int)local_60;
      *(undefined4 *)(in_x8 + 4) = 2;
      *(int *)(in_x8 + 8) = local_60._4_4_;
      *(long *)(in_x8 + 0x10) = lVar33;
      *(long *)(in_x8 + 0x18) = lVar33;
      *(undefined8 *)(in_x8 + 0x30) = 0;
      lVar33 = lVar33 + lVar23 * local_60._4_4_;
      goto LAB_00327198;
    }
LAB_00327070:
    *(undefined8 *)(in_x8 + 0x10) = 0;
    uVar27 = _UNK_00327bf8;
    uVar25 = _DAT_00327bf0;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 8) = uVar27;
    *(undefined8 *)in_x8 = uVar25;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    return;
  }
  if (iVar12 == 0xc0000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x487);
      String::deallocate((String *)&local_60);
    }
    plVar34 = *(long **)(this + 8);
    iVar12 = ((int)plVar34[3] + ((int)plVar34[2] - (int)*plVar34) * 8) - (int)plVar34[1];
    if (iVar12 != 0) {
      local_68 = 1;
      local_18 = &local_10;
      local_20 = &uStack_58;
      uStack_58 = _UNK_00327bf8;
      local_60 = _DAT_00327bf0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_28 = 0;
      uStack_8 = 0;
      local_10 = 0;
      local_64 = iVar12;
      Mat::create((Mat *)&local_60,2,&local_68,0);
      if (0 < iVar12) {
        uVar35 = 0;
        do {
          *(bool *)(local_50 + uVar35) =
               (1L << ((uint)uVar35 & 0x3f) & *(ulong *)(*plVar34 + (uVar35 >> 6) * 8)) != 0;
          uVar35 = uVar35 + 1;
        } while ((int)uVar35 < iVar12);
      }
      *(undefined8 *)(in_x8 + 0x18) = local_48;
      *(undefined8 *)(in_x8 + 0x20) = local_40;
      *(undefined8 *)(in_x8 + 8) = uStack_58;
      *(undefined8 *)in_x8 = local_60;
      *(undefined8 *)(in_x8 + 0x28) = local_38;
      *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
      *(long *)(in_x8 + 0x10) = local_50;
      *(undefined8 *)(in_x8 + 0x30) = local_30;
      *(long *)(in_x8 + 0x38) = local_28;
      *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
      *(undefined8 *)(in_x8 + 0x58) = 0;
      *(undefined8 *)(in_x8 + 0x50) = 0;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (local_60._4_4_ < 3) {
        puVar16 = *(undefined8 **)(in_x8 + 0x48);
        *puVar16 = *local_18;
        puVar16[1] = local_18[1];
      }
      else {
        *(undefined4 *)(in_x8 + 4) = 0;
        Mat::copySize(in_x8,(Mat *)&local_60);
      }
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          iVar12 = *piVar1;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = iVar12 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar12 == 1) {
          Mat::deallocate((Mat *)&local_60);
        }
      }
      if (0 < local_60._4_4_) {
        iVar12 = 0;
        puVar16 = local_20;
        do {
          *(undefined4 *)puVar16 = 0;
          iVar12 = iVar12 + 1;
          puVar16 = (undefined8 *)((long)puVar16 + 4);
        } while (iVar12 < local_60._4_4_);
      }
      goto LAB_00326ddc;
    }
    goto LAB_00327070;
  }
  if (iVar12 == 0) goto LAB_00327070;
  if (iVar12 == 0x40000) {
    uVar35 = type(this,in_w1);
    plVar34 = *(long **)(this + 8);
    if ((in_w1 < 0) || (lVar23 = *plVar34, (int)(plVar34[1] - lVar23 >> 3) * -0x55555555 <= in_w1))
    {
      local_60 = 0;
      uStack_58 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_60,0x1c);
      uVar7 = s_0_<__i_&&_i_<_(int)vv_size()_0046b188._24_4_;
      uVar27 = s_0_<__i_&&_i_<_(int)vv_size()_0046b188._8_8_;
      uVar25 = s_0_<__i_&&_i_<_(int)vv_size()_0046b188._0_8_;
      *(undefined8 *)(pcVar17 + 0x10) = s_0_<__i_&&_i_<_(int)vv_size()_0046b188._16_8_;
      *(undefined4 *)(pcVar17 + 0x18) = uVar7;
      *(undefined8 *)pcVar17 = uVar25;
      *(undefined8 *)(pcVar17 + 8) = uVar27;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x49b);
      String::deallocate((String *)&local_60);
      lVar23 = *plVar34;
    }
    lVar33 = (long)in_w1 * 0x18;
    if (*(long *)(lVar23 + lVar33) != *(long *)(lVar23 + lVar33 + 8)) {
      size(param_1);
      iVar12 = ((uint)((uVar35 & 0xffffffff) >> 3) & 0x1ff) + 1 <<
               (ulong)((uint)(0xfa50L >> (((uint)uVar35 & 7) << 1)) & 3);
      lVar28 = *(long *)(lVar23 + lVar33);
      *(int *)(in_x8 + 0xc) = (int)local_60;
      lVar33 = (long)iVar12 * (long)(int)local_60;
      *(undefined4 *)(in_x8 + 4) = 2;
      lVar23 = lVar28 + lVar33 * local_60._4_4_;
      *(int *)(in_x8 + 8) = local_60._4_4_;
      *(long *)(in_x8 + 0x10) = lVar28;
      *(long *)(in_x8 + 0x18) = lVar28;
      *(undefined8 *)(in_x8 + 0x30) = 0;
      *(undefined8 *)(in_x8 + 0x38) = 0;
      *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
      *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
      *(uint *)in_x8 = ((uint)uVar35 & 0xfff) + 0x42ff0000 | 0x4000;
      *(long *)(in_x8 + 0x50) = lVar33;
      *(long *)(in_x8 + 0x58) = (long)iVar12;
      *(long *)(in_x8 + 0x28) = lVar23;
      *(long *)(in_x8 + 0x20) = lVar23;
      return;
    }
    goto LAB_00327070;
  }
  if (iVar12 == 0x50000) {
    plVar34 = *(long **)(this + 8);
    if ((in_w1 < 0) || (lVar23 = *plVar34, (int)(plVar34[1] - lVar23 >> 5) * -0x55555555 <= in_w1))
    {
      local_60 = 0;
      uStack_58 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_60,0x1b);
      cVar4 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8[0x1a];
      uVar8 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._24_2_;
      uVar27 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._8_8_;
      uVar25 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._0_8_;
      *(undefined8 *)(pcVar17 + 0x10) = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._16_8_;
      *(undefined2 *)(pcVar17 + 0x18) = uVar8;
      pcVar17[0x1a] = cVar4;
      *(undefined8 *)pcVar17 = uVar25;
      *(undefined8 *)(pcVar17 + 8) = uVar27;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4a4);
      String::deallocate((String *)&local_60);
      lVar23 = *plVar34;
    }
    pMVar21 = (Mat *)(lVar23 + (long)in_w1 * 0x60);
    uVar31 = *(undefined8 *)(pMVar21 + 0x10);
    uVar30 = *(undefined8 *)(pMVar21 + 0x18);
    uVar29 = *(undefined8 *)(pMVar21 + 0x20);
    uVar27 = *(undefined8 *)(pMVar21 + 0x28);
    uVar36 = *(undefined8 *)(pMVar21 + 8);
    uVar25 = *(undefined8 *)(pMVar21 + 0x30);
    *(undefined8 *)in_x8 = *(undefined8 *)pMVar21;
    lVar23 = *(long *)(pMVar21 + 0x38);
    *(undefined8 *)(in_x8 + 8) = uVar36;
    *(undefined8 *)(in_x8 + 0x10) = uVar31;
    *(undefined8 *)(in_x8 + 0x18) = uVar30;
    *(undefined8 *)(in_x8 + 0x20) = uVar29;
    *(undefined8 *)(in_x8 + 0x28) = uVar27;
    *(undefined8 *)(in_x8 + 0x30) = uVar25;
    *(long *)(in_x8 + 0x38) = lVar23;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    if (lVar23 != 0) {
      piVar1 = (int *)(lVar23 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    goto LAB_00327248;
  }
  if (iVar12 == 0xb0000) {
    plVar34 = *(long **)(this + 8);
    if ((in_w1 < 0) || (lVar23 = *plVar34, (int)(plVar34[1] - lVar23 >> 4) * -0x33333333 <= in_w1))
    {
      local_60 = 0;
      uStack_58 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_60,0x1b);
      cVar4 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8[0x1a];
      uVar8 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._24_2_;
      uVar27 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._8_8_;
      uVar25 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._0_8_;
      *(undefined8 *)(pcVar17 + 0x10) = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._16_8_;
      *(undefined2 *)(pcVar17 + 0x18) = uVar8;
      pcVar17[0x1a] = cVar4;
      *(undefined8 *)pcVar17 = uVar25;
      *(undefined8 *)(pcVar17 + 8) = uVar27;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4ac);
      String::deallocate((String *)&local_60);
      lVar23 = *plVar34;
    }
    UMat::getMat((int)lVar23 + in_w1 * 0x50);
    return;
  }
  if (iVar12 == 0x70000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4b3);
      String::deallocate((String *)&local_60);
    }
    local_60 = 0;
    uStack_58 = 0;
    __dest = (void *)String::allocate((String *)&local_60,0x4b);
    memcpy(__dest,"You should explicitly call mapHost/unmapHost methods for ogl::Buffer object",0x4b
          );
    error(-0xd5,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4b4);
LAB_003277f8:
    String::deallocate((String *)&local_60);
    *(undefined4 *)(in_x8 + 4) = 0;
    *(undefined4 *)(in_x8 + 8) = 0;
    *(undefined4 *)in_x8 = 0x42ff0000;
    *(undefined4 *)(in_x8 + 0xc) = 0;
    *(undefined8 *)(in_x8 + 0x10) = 0;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    return;
  }
  if (iVar12 == 0x90000) {
    if (-1 < in_w1) {
      local_60 = 0;
      uStack_58 = 0;
      puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
      uVar9 = DAT_0046b094;
      *puVar15 = DAT_0046b090;
      *(undefined1 *)(puVar15 + 1) = uVar9;
      error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4ba);
      String::deallocate((String *)&local_60);
    }
    local_60 = 0;
    uStack_58 = 0;
    pcVar17 = (char *)String::allocate((String *)&local_60,0x42);
    uVar36 = s_You_should_explicitly_call_downl_0046b140._40_8_;
    uVar31 = s_You_should_explicitly_call_downl_0046b140._32_8_;
    uVar30 = s_You_should_explicitly_call_downl_0046b140._24_8_;
    uVar29 = s_You_should_explicitly_call_downl_0046b140._16_8_;
    uVar27 = s_You_should_explicitly_call_downl_0046b140._8_8_;
    uVar25 = s_You_should_explicitly_call_downl_0046b140._0_8_;
    *(undefined2 *)(pcVar17 + 0x40) = s_You_should_explicitly_call_downl_0046b140._64_2_;
    uVar11 = s_You_should_explicitly_call_downl_0046b140._56_8_;
    uVar10 = s_You_should_explicitly_call_downl_0046b140._48_8_;
    *(undefined8 *)pcVar17 = uVar25;
    *(undefined8 *)(pcVar17 + 8) = uVar27;
    *(undefined8 *)(pcVar17 + 0x10) = uVar29;
    *(undefined8 *)(pcVar17 + 0x18) = uVar30;
    *(undefined8 *)(pcVar17 + 0x20) = uVar31;
    *(undefined8 *)(pcVar17 + 0x28) = uVar36;
    *(undefined8 *)(pcVar17 + 0x30) = uVar10;
    *(undefined8 *)(pcVar17 + 0x38) = uVar11;
    error(-0xd5,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4bb);
    goto LAB_003277f8;
  }
  if (iVar12 != 0x80000) {
    local_60 = 0;
    uStack_58 = 0;
    pcVar17 = (char *)String::allocate((String *)&local_60,0x1e);
    uVar8 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
    uVar7 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
    uVar27 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
    uVar25 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
    *(undefined8 *)(pcVar17 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
    *(undefined4 *)(pcVar17 + 0x18) = uVar7;
    *(undefined2 *)(pcVar17 + 0x1c) = uVar8;
    *(undefined8 *)pcVar17 = uVar25;
    *(undefined8 *)(pcVar17 + 8) = uVar27;
    error(-0xd5,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4c8);
    goto LAB_003277f8;
  }
  if (-1 < in_w1) {
    local_60 = 0;
    uStack_58 = 0;
    puVar15 = (undefined4 *)String::allocate((String *)&local_60,5);
    uVar9 = DAT_0046b094;
    *puVar15 = DAT_0046b090;
    *(undefined1 *)(puVar15 + 1) = uVar9;
    error(-0xd7,(String *)&local_60,"cv::Mat cv::_InputArray::getMat_(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4c1);
    String::deallocate((String *)&local_60);
  }
  puVar26 = *(uint **)(this + 8);
  pMVar21 = in_x8 + 0x50;
  uVar22 = *puVar26;
  uVar2 = puVar26[2];
  uVar13 = puVar26[1];
  lVar23 = *(long *)(puVar26 + 6);
  uVar35 = *(ulong *)(puVar26 + 4);
  uVar18 = (uVar22 & 0xfff) + 0x42ff0000;
  *(undefined4 *)(in_x8 + 4) = 2;
  *(uint *)in_x8 = uVar18;
  iVar12 = (uVar22 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3);
  *(uint *)(in_x8 + 8) = uVar13;
  *(uint *)(in_x8 + 0xc) = uVar2;
  *(long *)(in_x8 + 0x10) = lVar23;
  *(long *)(in_x8 + 0x18) = lVar23;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x30) = 0;
  *(undefined8 *)(in_x8 + 0x38) = 0;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = pMVar21;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  uVar32 = (long)iVar12 * (long)(int)uVar2;
  if (uVar35 == 0) {
    *(uint *)in_x8 = uVar18 | 0x4000;
    lVar33 = 0;
    goto LAB_00326cb8;
  }
  uVar20 = 0x88442211UL >> ((uVar22 & 7) << 2) & 0xf;
  if (uVar13 == 1) {
    uVar6 = 0;
    if (uVar20 != 0) {
      uVar6 = uVar32 / uVar20;
    }
    uVar35 = uVar32;
    if (uVar32 - uVar6 * uVar20 != 0) goto LAB_003279e0;
LAB_003279d4:
    uVar22 = 0x4000;
  }
  else {
    uVar6 = 0;
    if (uVar20 != 0) {
      uVar6 = uVar35 / uVar20;
    }
    if (uVar35 != uVar6 * uVar20) {
LAB_003279e0:
      local_60 = 0;
      uStack_58 = 0;
      pcVar17 = (char *)String::allocate((String *)&local_60,0x1f);
      cVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
      uVar8 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
      uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
      uVar27 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
      uVar25 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
      *(undefined8 *)(pcVar17 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
      *(undefined4 *)(pcVar17 + 0x18) = uVar7;
      *(undefined2 *)(pcVar17 + 0x1c) = uVar8;
      pcVar17[0x1e] = cVar4;
      *(undefined8 *)pcVar17 = uVar25;
      *(undefined8 *)(pcVar17 + 8) = uVar27;
      error(-0xd,(String *)&local_60,"cv::Mat::Mat(cv::Size, int, void*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",0x1bc
           );
      String::deallocate((String *)&local_60);
      uVar18 = *(uint *)in_x8;
      pMVar21 = *(Mat **)(in_x8 + 0x48);
      lVar23 = *(long *)(in_x8 + 0x18);
      uVar13 = *(uint *)(in_x8 + 8);
    }
    uVar22 = 0;
    if (uVar32 - uVar35 == 0) goto LAB_003279d4;
  }
  lVar33 = uVar32 - uVar35;
  *(uint *)in_x8 = uVar22 | uVar18;
  uVar32 = uVar35;
LAB_00326cb8:
  *(ulong *)pMVar21 = uVar32;
  *(long *)(pMVar21 + 8) = (long)iVar12;
  lVar23 = lVar23 + (long)(int)uVar13 * uVar32;
  *(long *)(in_x8 + 0x28) = lVar23;
  *(long *)(in_x8 + 0x20) = lVar23 + lVar33;
  return;
}


==================================================================

### FUNC 00327c00 (1212 bytes) name=getUMat

/* cv::_InputArray::getUMat(int) const */

void cv::_InputArray::getUMat(int param_1)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  undefined4 uVar4;
  char cVar5;
  bool bVar6;
  undefined2 uVar7;
  int iVar8;
  _InputArray *this;
  char *pcVar9;
  undefined8 *puVar10;
  int in_w1;
  Mat *pMVar11;
  UMat *pUVar12;
  long lVar13;
  undefined8 *puVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  UMat *in_x8;
  long *plVar17;
  undefined8 uVar18;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  int local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  this = (_InputArray *)(ulong)(uint)param_1;
  iVar8 = kind(this);
  if (iVar8 == 0xa0000) {
    pUVar12 = *(UMat **)(this + 8);
    if (-1 < in_w1) {
      local_68 = 0x80000000;
      local_60 = CONCAT44(in_w1 + 1,in_w1);
      local_64 = 0x7fffffff;
      UMat::UMat(in_x8,pUVar12,(Range *)&local_60,(Range *)&local_68);
      return;
    }
    uVar16 = *(undefined8 *)(pUVar12 + 0x10);
    uVar4 = *(undefined4 *)(pUVar12 + 0x18);
    lVar13 = *(long *)(pUVar12 + 0x20);
    uVar15 = *(undefined8 *)(pUVar12 + 0x28);
    uVar18 = *(undefined8 *)(pUVar12 + 8);
    *(undefined8 *)in_x8 = *(undefined8 *)pUVar12;
    *(undefined8 *)(in_x8 + 8) = uVar18;
    *(undefined8 *)(in_x8 + 0x10) = uVar16;
    *(undefined4 *)(in_x8 + 0x18) = uVar4;
    *(long *)(in_x8 + 0x20) = lVar13;
    *(undefined8 *)(in_x8 + 0x28) = uVar15;
    *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
    *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
    *(undefined8 *)(in_x8 + 0x48) = 0;
    *(undefined8 *)(in_x8 + 0x40) = 0;
    if (lVar13 != 0) {
      piVar1 = (int *)(lVar13 + 0x10);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
  }
  else {
    if (iVar8 != 0xb0000) {
      uVar2 = *(uint *)this & 0x3000000;
      if (iVar8 == 0x10000) {
        if (in_w1 < 0) {
          Mat::getUMat(*(Mat **)(this + 8),uVar2,0);
          return;
        }
        local_70 = 0x80000000;
        local_6c = 0x7fffffff;
        local_64 = in_w1 + 1;
        Mat::Mat((Mat *)&local_60,*(Mat **)(this + 8),(Range *)&local_68,(Range *)&local_70);
        Mat::getUMat((Mat *)&local_60,uVar2,0);
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            iVar8 = *piVar1;
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar6) {
              *piVar1 = iVar8 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar8 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        if (0 < local_60._4_4_) {
          iVar8 = 0;
          puVar10 = local_20;
          do {
            *(undefined4 *)puVar10 = 0;
            iVar8 = iVar8 + 1;
            puVar10 = (undefined8 *)((long)puVar10 + 4);
          } while (iVar8 < local_60._4_4_);
        }
      }
      else {
        iVar8 = kind(this);
        if ((iVar8 == 0x10000) && (in_w1 < 0)) {
          pMVar11 = *(Mat **)(this + 8);
          local_20 = &local_58;
          local_18 = &local_10;
          uVar3 = *(uint *)pMVar11;
          local_50 = *(undefined8 *)(pMVar11 + 0x10);
          local_60 = *(ulong *)pMVar11;
          local_58 = *(undefined8 *)(pMVar11 + 8);
          local_48 = *(undefined8 *)(pMVar11 + 0x18);
          local_40 = *(undefined8 *)(pMVar11 + 0x20);
          local_38 = *(undefined8 *)(pMVar11 + 0x28);
          local_30 = *(undefined8 *)(pMVar11 + 0x30);
          local_28 = *(long *)(pMVar11 + 0x38);
          local_8 = 0;
          local_10 = 0;
          if (local_28 != 0) {
            piVar1 = (int *)(local_28 + 0x14);
            do {
              cVar5 = '\x01';
              bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar6) {
                *piVar1 = *piVar1 + 1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
          }
          if (*(int *)(pMVar11 + 4) < 3) {
            local_10 = **(undefined8 **)(pMVar11 + 0x48);
            local_8 = (*(undefined8 **)(pMVar11 + 0x48))[1];
          }
          else {
            local_60 = (ulong)uVar3;
            Mat::copySize((Mat *)&local_60,pMVar11);
          }
        }
        else {
          getMat_(param_1);
        }
        Mat::getUMat((Mat *)&local_60,uVar2,0);
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            iVar8 = *piVar1;
            cVar5 = '\x01';
            bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar6) {
              *piVar1 = iVar8 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar8 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        if (0 < local_60._4_4_) {
          iVar8 = 0;
          puVar10 = local_20;
          do {
            *(undefined4 *)puVar10 = 0;
            iVar8 = iVar8 + 1;
            puVar10 = (undefined8 *)((long)puVar10 + 4);
          } while (iVar8 < local_60._4_4_);
        }
      }
      local_28 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      local_50 = 0;
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      return;
    }
    plVar17 = *(long **)(this + 8);
    if ((in_w1 < 0) || (lVar13 = *plVar17, (int)(plVar17[1] - lVar13 >> 4) * -0x33333333 <= in_w1))
    {
      local_60 = 0;
      local_58 = 0;
      pcVar9 = (char *)String::allocate((String *)&local_60,0x1b);
      cVar5 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8[0x1a];
      uVar7 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._24_2_;
      uVar16 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._8_8_;
      uVar15 = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._0_8_;
      *(undefined8 *)(pcVar9 + 0x10) = s_0_<__i_&&_i_<_(int)v_size()_0046b1a8._16_8_;
      *(undefined2 *)(pcVar9 + 0x18) = uVar7;
      pcVar9[0x1a] = cVar5;
      *(undefined8 *)pcVar9 = uVar15;
      *(undefined8 *)(pcVar9 + 8) = uVar16;
      error(-0xd7,(String *)&local_60,"cv::UMat cv::_InputArray::getUMat(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4dc);
      String::deallocate((String *)&local_60);
      lVar13 = *plVar17;
    }
    pUVar12 = (UMat *)(lVar13 + (long)in_w1 * 0x50);
    uVar16 = *(undefined8 *)(pUVar12 + 0x10);
    uVar4 = *(undefined4 *)(pUVar12 + 0x18);
    lVar13 = *(long *)(pUVar12 + 0x20);
    uVar15 = *(undefined8 *)(pUVar12 + 0x28);
    uVar18 = *(undefined8 *)(pUVar12 + 8);
    *(undefined8 *)in_x8 = *(undefined8 *)pUVar12;
    *(undefined8 *)(in_x8 + 8) = uVar18;
    *(undefined8 *)(in_x8 + 0x10) = uVar16;
    *(undefined4 *)(in_x8 + 0x18) = uVar4;
    *(long *)(in_x8 + 0x20) = lVar13;
    *(undefined8 *)(in_x8 + 0x28) = uVar15;
    *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
    *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
    *(undefined8 *)(in_x8 + 0x48) = 0;
    *(undefined8 *)(in_x8 + 0x40) = 0;
    if (lVar13 != 0) {
      piVar1 = (int *)(lVar13 + 0x10);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar6) {
          *piVar1 = *piVar1 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
  }
  if (*(int *)(pUVar12 + 4) < 3) {
    puVar14 = *(undefined8 **)(pUVar12 + 0x38);
    puVar10 = *(undefined8 **)(in_x8 + 0x38);
    *puVar10 = *puVar14;
    puVar10[1] = puVar14[1];
    return;
  }
  *(undefined4 *)(in_x8 + 4) = 0;
  UMat::copySize(in_x8,pUVar12);
  return;
}


==================================================================

### FUNC 0032811c (1028 bytes) name=insertImageCOI

/* cv::insertImageCOI(cv::_InputArray const&, void*, int) */

void cv::insertImageCOI(_InputArray *param_1,void *param_2,int param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  int *piVar15;
  Mat *pMVar16;
  int *piVar17;
  AutoBuffer *in_x5;
  long local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  AutoBuffer *local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x10000) {
    pMVar16 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar16;
    local_bc = *(int *)(pMVar16 + 4);
    local_b8 = *(int *)(pMVar16 + 8);
    local_b4 = *(undefined4 *)(pMVar16 + 0xc);
    local_b0 = *(undefined8 *)(pMVar16 + 0x10);
    local_a8 = *(undefined8 *)(pMVar16 + 0x18);
    local_a0 = *(undefined8 *)(pMVar16 + 0x20);
    in_x5 = *(AutoBuffer **)(pMVar16 + 0x28);
    local_90 = *(undefined8 *)(pMVar16 + 0x30);
    local_88 = *(long *)(pMVar16 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar15 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar15,0x10);
        if (bVar2) {
          *piVar15 = *piVar15 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    local_98 = in_x5;
    if (*(int *)(pMVar16 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar16 + 0x48);
      local_68 = (*(undefined8 **)(pMVar16 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar16);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  cvarrToMat(param_2,(void *)0x0,true,true,0,in_x5);
  if (param_3 < 0) {
    if (((param_2 == (void *)0x0) || (*(int *)param_2 != 0x90)) ||
       (*(long *)((long)param_2 + 0x58) == 0)) {
      local_e0 = 0;
      local_d8 = 0;
      pcVar14 = (char *)String::allocate((String *)&local_e0,0x10);
      uVar3 = s_CV_IS_IMAGE_arr__0046b1c8._8_8_;
      *(undefined8 *)pcVar14 = s_CV_IS_IMAGE_arr__0046b1c8._0_8_;
      *(undefined8 *)(pcVar14 + 8) = uVar3;
      error(-0xd7,(String *)&local_e0,"void cv::insertImageCOI(cv::InputArray, CvArr*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3b1);
      String::deallocate((String *)&local_e0);
    }
    iVar13 = cvGetImageCOI(param_2);
    param_3 = iVar13 - 1;
  }
  iVar13 = local_80[-1];
  if (iVar13 == local_20[-1]) {
    if (iVar13 == 2) {
      if ((*local_80 == *local_20) && (local_80[1] == local_20[1])) goto LAB_00328440;
    }
    else if (iVar13 < 1) {
LAB_00328440:
      if (((-1 < param_3) && ((local_c0 & 7) == (local_60 & 7))) &&
         (param_3 <= (int)(local_60 >> 3 & 0x1ff))) goto LAB_00328210;
    }
    else if (*local_80 == *local_20) {
      piVar15 = local_80;
      piVar17 = local_20;
      do {
        piVar17 = piVar17 + 1;
        if (piVar15 == local_80 + (iVar13 - 1)) goto LAB_00328440;
        piVar15 = piVar15 + 1;
      } while (*piVar15 == *piVar17);
    }
  }
  local_d0 = 0;
  local_c8 = 0;
  pcVar14 = (char *)String::allocate((String *)&local_d0,0x54);
  uVar12 = s_ch_size____mat_size____ch_depth__0046b1e0._72_8_;
  uVar11 = s_ch_size____mat_size____ch_depth__0046b1e0._64_8_;
  uVar10 = s_ch_size____mat_size____ch_depth__0046b1e0._56_8_;
  uVar9 = s_ch_size____mat_size____ch_depth__0046b1e0._48_8_;
  uVar8 = s_ch_size____mat_size____ch_depth__0046b1e0._40_8_;
  uVar7 = s_ch_size____mat_size____ch_depth__0046b1e0._32_8_;
  uVar6 = s_ch_size____mat_size____ch_depth__0046b1e0._24_8_;
  uVar5 = s_ch_size____mat_size____ch_depth__0046b1e0._16_8_;
  uVar4 = s_ch_size____mat_size____ch_depth__0046b1e0._8_8_;
  uVar3 = s_ch_size____mat_size____ch_depth__0046b1e0._0_8_;
  *(undefined4 *)(pcVar14 + 0x50) = s_ch_size____mat_size____ch_depth__0046b1e0._80_4_;
  *(undefined8 *)pcVar14 = uVar3;
  *(undefined8 *)(pcVar14 + 8) = uVar4;
  *(undefined8 *)(pcVar14 + 0x10) = uVar5;
  *(undefined8 *)(pcVar14 + 0x18) = uVar6;
  *(undefined8 *)(pcVar14 + 0x20) = uVar7;
  *(undefined8 *)(pcVar14 + 0x28) = uVar8;
  *(undefined8 *)(pcVar14 + 0x30) = uVar9;
  *(undefined8 *)(pcVar14 + 0x38) = uVar10;
  *(undefined8 *)(pcVar14 + 0x40) = uVar11;
  *(undefined8 *)(pcVar14 + 0x48) = uVar12;
  error(-0xd7,(String *)&local_d0,"void cv::insertImageCOI(cv::InputArray, CvArr*, int)",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3b4);
  String::deallocate((String *)&local_d0);
LAB_00328210:
  local_e8 = (ulong)(uint)param_3 << 0x20;
  mixChannels((Mat *)&local_c0,1,(Mat *)&local_60,1,(int *)&local_e8,1);
  if (local_28 != 0) {
    piVar15 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar15;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar15,0x10);
      if (bVar2) {
        *piVar15 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar15 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar15;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar15,0x10);
      if (bVar2) {
        *piVar15 = iVar13 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = (AutoBuffer *)0x0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    piVar15 = local_80;
    do {
      *piVar15 = 0;
      iVar13 = iVar13 + 1;
      piVar15 = piVar15 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00328590 (28 bytes) name=depth

/* cv::_InputArray::depth(int) const */

uint __thiscall cv::_InputArray::depth(_InputArray *this,int param_1)

{
  uint uVar1;
  
  uVar1 = type(this,param_1);
  return uVar1 & 7;
}


==================================================================

### FUNC 003285ac (32 bytes) name=channels

/* cv::_InputArray::channels(int) const */

int __thiscall cv::_InputArray::channels(_InputArray *this,int param_1)

{
  ulong uVar1;
  
  uVar1 = type(this,param_1);
  return ((uint)(uVar1 >> 3) & 0x1ff) + 1;
}


==================================================================

### FUNC 003285cc (556 bytes) name=empty

/* cv::_InputArray::empty() const */

bool __thiscall cv::_InputArray::empty(_InputArray *this)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  bool bVar6;
  uint uVar7;
  char *pcVar8;
  long lVar9;
  long lVar10;
  long *plVar11;
  long lVar12;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar7 = kind(this);
  if (uVar7 == 0x10000) {
    lVar9 = *(long *)(this + 8);
    if (*(long *)(lVar9 + 0x10) == 0) {
      return true;
    }
    if (2 < *(int *)(lVar9 + 4)) {
      lVar12 = 1;
      lVar10 = 0;
      do {
        lVar1 = lVar10 * 4;
        lVar10 = lVar10 + 1;
        lVar12 = lVar12 * *(int *)(*(long *)(lVar9 + 0x40) + lVar1);
      } while ((int)lVar10 < *(int *)(lVar9 + 4));
      goto LAB_00328710;
    }
  }
  else {
    if (uVar7 != 0xa0000) {
      if ((uVar7 & 0xfffbffff) == 0x20000) {
        bVar6 = false;
      }
      else {
        if (uVar7 == 0x30000) {
LAB_00328774:
          return **(long **)(this + 8) == (*(long **)(this + 8))[1];
        }
        if (uVar7 == 0xc0000) {
          plVar11 = *(long **)(this + 8);
          bVar6 = *plVar11 == plVar11[2] && (int)plVar11[1] == (int)plVar11[3];
        }
        else {
          if (uVar7 == 0) {
            return true;
          }
          if (((uVar7 & 0xfffeffff) == 0x40000) || (uVar7 == 0xb0000)) goto LAB_00328774;
          if (uVar7 == 0x70000) {
            bVar6 = true;
            if (*(int *)(*(long *)(this + 8) + 0x10) != 0) {
              bVar6 = *(int *)(*(long *)(this + 8) + 0x14) == 0;
            }
          }
          else if ((uVar7 & 0xfffeffff) == 0x80000) {
            bVar6 = *(long *)(*(long *)(this + 8) + 0x18) == 0;
          }
          else {
            local_10 = 0;
            local_8 = 0;
            pcVar8 = (char *)String::allocate((String *)&local_10,0x1e);
            uVar5 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
            uVar4 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
            uVar3 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
            uVar2 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
            *(undefined8 *)(pcVar8 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
            *(undefined4 *)(pcVar8 + 0x18) = uVar4;
            *(undefined2 *)(pcVar8 + 0x1c) = uVar5;
            *(undefined8 *)pcVar8 = uVar2;
            *(undefined8 *)(pcVar8 + 8) = uVar3;
            error(-0xd5,(String *)&local_10,"bool cv::_InputArray::empty() const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x775);
            String::deallocate((String *)&local_10);
            bVar6 = true;
          }
        }
      }
      return bVar6;
    }
    lVar9 = *(long *)(this + 8);
    if (*(long *)(lVar9 + 0x20) == 0) {
      return true;
    }
    if (2 < *(int *)(lVar9 + 4)) {
      lVar12 = 1;
      lVar10 = 0;
      do {
        lVar1 = lVar10 * 4;
        lVar10 = lVar10 + 1;
        lVar12 = lVar12 * *(int *)(*(long *)(lVar9 + 0x30) + lVar1);
      } while ((int)lVar10 < *(int *)(lVar9 + 4));
      goto LAB_00328710;
    }
  }
  lVar12 = (long)*(int *)(lVar9 + 0xc) * (long)*(int *)(lVar9 + 8);
LAB_00328710:
  return lVar12 == 0;
}


==================================================================

### FUNC 0032880c (604 bytes) name=isContinuous

/* cv::_InputArray::isContinuous(int) const */

uint __thiscall cv::_InputArray::isContinuous(_InputArray *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  uint uVar6;
  char *pcVar7;
  long lVar8;
  uint uVar9;
  long *plVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar6 = kind(this);
  if ((uVar6 == 0x10000) || (uVar6 == 0xa0000)) {
    uVar9 = 1;
    if (param_1 < 0) {
      return **(uint **)(this + 8) >> 0xe & 1;
    }
  }
  else {
    uVar9 = (uint)(uVar6 == 0x30000 || (uVar6 & 0xfff9ffff) == 0);
    if (uVar9 == 0) {
      if (uVar6 == 0xc0000) {
        uVar9 = 1;
      }
      else if (uVar6 == 0x50000) {
        plVar10 = *(long **)(this + 8);
        lVar8 = *plVar10;
        if ((ulong)((plVar10[1] - lVar8 >> 5) * -0x5555555555555555) <= (ulong)(long)param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar7 = (char *)String::allocate((String *)&local_10,0x15);
          cVar5 = s__size_t_i_<_vv_size()_0046b238[0x14];
          uVar2 = s__size_t_i_<_vv_size()_0046b238._8_8_;
          uVar1 = s__size_t_i_<_vv_size()_0046b238._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
          pcVar7[0x14] = cVar5;
          *(undefined8 *)pcVar7 = uVar1;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,"bool cv::_InputArray::isContinuous(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x78a);
          String::deallocate((String *)&local_10);
          lVar8 = *plVar10;
        }
        uVar9 = *(uint *)(lVar8 + (long)param_1 * 0x60) >> 0xe & 1;
      }
      else if (uVar6 == 0xb0000) {
        plVar10 = *(long **)(this + 8);
        lVar8 = *plVar10;
        if ((ulong)((plVar10[1] - lVar8 >> 4) * -0x3333333333333333) <= (ulong)(long)param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar7 = (char *)String::allocate((String *)&local_10,0x15);
          cVar5 = s__size_t_i_<_vv_size()_0046b238[0x14];
          uVar2 = s__size_t_i_<_vv_size()_0046b238._8_8_;
          uVar1 = s__size_t_i_<_vv_size()_0046b238._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
          pcVar7[0x14] = cVar5;
          *(undefined8 *)pcVar7 = uVar1;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,"bool cv::_InputArray::isContinuous(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x791);
          String::deallocate((String *)&local_10);
          lVar8 = *plVar10;
        }
        uVar9 = *(uint *)(lVar8 + (long)param_1 * 0x50) >> 0xe & 1;
      }
      else {
        local_10 = 0;
        local_8 = 0;
        pcVar7 = (char *)String::allocate((String *)&local_10,0x1e);
        uVar4 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
        uVar3 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
        uVar2 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
        uVar1 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
        *(undefined8 *)(pcVar7 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
        *(undefined4 *)(pcVar7 + 0x18) = uVar3;
        *(undefined2 *)(pcVar7 + 0x1c) = uVar4;
        *(undefined8 *)pcVar7 = uVar1;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        error(-0xd5,(String *)&local_10,"bool cv::_InputArray::isContinuous(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x795);
        String::deallocate((String *)&local_10);
      }
    }
  }
  return uVar9;
}


==================================================================

### FUNC 00328aa4 (580 bytes) name=isSubmatrix

/* cv::_InputArray::isSubmatrix(int) const */

uint __thiscall cv::_InputArray::isSubmatrix(_InputArray *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  uint uVar4;
  char *pcVar5;
  long lVar6;
  uint uVar7;
  long *plVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar4 = kind(this);
  if ((uVar4 == 0x10000) || (uVar4 == 0xa0000)) {
    uVar7 = 0;
    if (param_1 < 0) {
      return **(uint **)(this + 8) >> 0xf & 1;
    }
  }
  else {
    if (uVar4 == 0x30000 || (uVar4 & 0xfff9ffff) == 0) {
      return 0;
    }
    uVar7 = 0;
    if (uVar4 != 0xc0000) {
      if (uVar4 == 0x50000) {
        plVar8 = *(long **)(this + 8);
        lVar6 = *plVar8;
        if ((ulong)((plVar8[1] - lVar6 >> 5) * -0x5555555555555555) <= (ulong)(long)param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar5 = (char *)String::allocate((String *)&local_10,0x15);
          cVar3 = s__size_t_i_<_vv_size()_0046b238[0x14];
          uVar2 = s__size_t_i_<_vv_size()_0046b238._8_8_;
          uVar1 = s__size_t_i_<_vv_size()_0046b238._0_8_;
          *(undefined4 *)(pcVar5 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
          pcVar5[0x14] = cVar3;
          *(undefined8 *)pcVar5 = uVar1;
          *(undefined8 *)(pcVar5 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,"bool cv::_InputArray::isSubmatrix(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7aa);
          String::deallocate((String *)&local_10);
          lVar6 = *plVar8;
        }
        uVar7 = *(uint *)(lVar6 + (long)param_1 * 0x60) >> 0xf & 1;
      }
      else if (uVar4 == 0xb0000) {
        plVar8 = *(long **)(this + 8);
        lVar6 = *plVar8;
        if ((ulong)((plVar8[1] - lVar6 >> 4) * -0x3333333333333333) <= (ulong)(long)param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar5 = (char *)String::allocate((String *)&local_10,0x15);
          cVar3 = s__size_t_i_<_vv_size()_0046b238[0x14];
          uVar2 = s__size_t_i_<_vv_size()_0046b238._8_8_;
          uVar1 = s__size_t_i_<_vv_size()_0046b238._0_8_;
          *(undefined4 *)(pcVar5 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
          pcVar5[0x14] = cVar3;
          *(undefined8 *)pcVar5 = uVar1;
          *(undefined8 *)(pcVar5 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,"bool cv::_InputArray::isSubmatrix(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7b1);
          String::deallocate((String *)&local_10);
          lVar6 = *plVar8;
        }
        uVar7 = *(uint *)(lVar6 + (long)param_1 * 0x50) >> 0xf & 1;
      }
      else {
        local_10 = 0;
        local_8 = 0;
        String::allocate((String *)&local_10,0);
        error(-0xd5,(String *)&local_10,"bool cv::_InputArray::isSubmatrix(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7b5);
        String::deallocate((String *)&local_10);
      }
    }
  }
  return uVar7;
}


==================================================================

### FUNC 00328d24 (876 bytes) name=offset

/* cv::_InputArray::offset(int) const */

long __thiscall cv::_InputArray::offset(_InputArray *this,int param_1)

{
  undefined1 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  uint uVar5;
  long lVar6;
  undefined4 *puVar7;
  char *pcVar8;
  ulong uVar9;
  long *plVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar9 = (ulong)param_1;
  uVar5 = kind(this);
  if (uVar5 == 0x10000) {
    if (-1 < param_1) {
      local_10 = 0;
      local_8 = 0;
      puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar1 = DAT_0046b094;
      *puVar7 = DAT_0046b090;
      *(undefined1 *)(puVar7 + 1) = uVar1;
      error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7bf);
      String::deallocate((String *)&local_10);
    }
    lVar6 = *(long *)(*(long *)(this + 8) + 0x10) - *(long *)(*(long *)(this + 8) + 0x18);
  }
  else {
    if (uVar5 == 0xa0000) {
      if (-1 < param_1) {
        local_10 = 0;
        local_8 = 0;
        puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar7 = DAT_0046b090;
        *(undefined1 *)(puVar7 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7c6);
        String::deallocate((String *)&local_10);
      }
      return *(long *)(*(long *)(this + 8) + 0x28);
    }
    if (((uVar5 == 0x30000) || ((uVar5 & 0xfff9ffff) == 0)) || (uVar5 == 0xc0000)) {
      return 0;
    }
    if (uVar5 == 0x50000) {
      plVar10 = *(long **)(this + 8);
      if (param_1 < 0) {
        lVar6 = 1;
      }
      else {
        lVar6 = *plVar10;
        if ((int)(plVar10[1] - lVar6 >> 5) * -0x55555555 <= param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar8 = (char *)String::allocate((String *)&local_10,0x12);
          uVar3 = s_i_<_(int)vv_size()_0046b098._8_8_;
          uVar2 = s_i_<_(int)vv_size()_0046b098._0_8_;
          *(undefined2 *)(pcVar8 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
          *(undefined8 *)pcVar8 = uVar2;
          *(undefined8 *)(pcVar8 + 8) = uVar3;
          error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7d3);
          String::deallocate((String *)&local_10);
          lVar6 = *plVar10;
        }
        lVar6 = lVar6 + uVar9 * 0x60;
        lVar6 = *(long *)(lVar6 + 0x10) - *(long *)(lVar6 + 0x18);
      }
    }
    else if (uVar5 == 0xb0000) {
      plVar10 = *(long **)(this + 8);
      lVar6 = *plVar10;
      if ((ulong)((plVar10[1] - lVar6 >> 4) * -0x3333333333333333) <= uVar9) {
        local_10 = 0;
        local_8 = 0;
        pcVar8 = (char *)String::allocate((String *)&local_10,0x15);
        cVar4 = s__size_t_i_<_vv_size()_0046b238[0x14];
        uVar3 = s__size_t_i_<_vv_size()_0046b238._8_8_;
        uVar2 = s__size_t_i_<_vv_size()_0046b238._0_8_;
        *(undefined4 *)(pcVar8 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
        pcVar8[0x14] = cVar4;
        *(undefined8 *)pcVar8 = uVar2;
        *(undefined8 *)(pcVar8 + 8) = uVar3;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7db);
        String::deallocate((String *)&local_10);
        lVar6 = *plVar10;
      }
      lVar6 = *(long *)(lVar6 + uVar9 * 0x50 + 0x28);
    }
    else if (uVar5 == 0x90000) {
      if (-1 < param_1) {
        local_10 = 0;
        local_8 = 0;
        puVar7 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar7 = DAT_0046b090;
        *(undefined1 *)(puVar7 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7e1);
        String::deallocate((String *)&local_10);
      }
      lVar6 = *(long *)(*(long *)(this + 8) + 0x18) - *(long *)(*(long *)(this + 8) + 0x28);
    }
    else {
      local_10 = 0;
      local_8 = 0;
      String::allocate((String *)&local_10,0);
      error(-0xd5,(String *)&local_10,"size_t cv::_InputArray::offset(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7e6);
      String::deallocate((String *)&local_10);
      lVar6 = 0;
    }
  }
  return lVar6;
}


==================================================================

### FUNC 00329108 (852 bytes) name=step

/* cv::_InputArray::step(int) const */

undefined8 __thiscall cv::_InputArray::step(_InputArray *this,int param_1)

{
  undefined1 uVar1;
  undefined8 uVar2;
  char cVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined4 *puVar6;
  char *pcVar7;
  long lVar8;
  ulong uVar9;
  long *plVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar9 = (ulong)param_1;
  uVar4 = kind(this);
  if (uVar4 == 0x10000) {
    if (-1 < param_1) {
      local_10 = 0;
      local_8 = 0;
      puVar6 = (undefined4 *)String::allocate((String *)&local_10,5);
      uVar1 = DAT_0046b094;
      *puVar6 = DAT_0046b090;
      *(undefined1 *)(puVar6 + 1) = uVar1;
      error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7f0);
      String::deallocate((String *)&local_10);
    }
    uVar5 = *(undefined8 *)(*(long *)(this + 8) + 0x50);
  }
  else {
    if (uVar4 == 0xa0000) {
      if (-1 < param_1) {
        local_10 = 0;
        local_8 = 0;
        puVar6 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar6 = DAT_0046b090;
        *(undefined1 *)(puVar6 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x7f6);
        String::deallocate((String *)&local_10);
      }
      return *(undefined8 *)(*(long *)(this + 8) + 0x40);
    }
    if (((uVar4 == 0x30000) || ((uVar4 & 0xfff9ffff) == 0)) || (uVar4 == 0xc0000)) {
      return 0;
    }
    if (uVar4 == 0x50000) {
      plVar10 = *(long **)(this + 8);
      if (param_1 < 0) {
        uVar5 = 1;
      }
      else {
        lVar8 = *plVar10;
        if ((int)(plVar10[1] - lVar8 >> 5) * -0x55555555 <= param_1) {
          local_10 = 0;
          local_8 = 0;
          pcVar7 = (char *)String::allocate((String *)&local_10,0x12);
          uVar2 = s_i_<_(int)vv_size()_0046b098._8_8_;
          uVar5 = s_i_<_(int)vv_size()_0046b098._0_8_;
          *(undefined2 *)(pcVar7 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
          *(undefined8 *)pcVar7 = uVar5;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x803);
          String::deallocate((String *)&local_10);
          lVar8 = *plVar10;
        }
        uVar5 = *(undefined8 *)(lVar8 + uVar9 * 0x60 + 0x50);
      }
    }
    else if (uVar4 == 0xb0000) {
      plVar10 = *(long **)(this + 8);
      lVar8 = *plVar10;
      if ((ulong)((plVar10[1] - lVar8 >> 4) * -0x3333333333333333) <= uVar9) {
        local_10 = 0;
        local_8 = 0;
        pcVar7 = (char *)String::allocate((String *)&local_10,0x15);
        cVar3 = s__size_t_i_<_vv_size()_0046b238[0x14];
        uVar2 = s__size_t_i_<_vv_size()_0046b238._8_8_;
        uVar5 = s__size_t_i_<_vv_size()_0046b238._0_8_;
        *(undefined4 *)(pcVar7 + 0x10) = s__size_t_i_<_vv_size()_0046b238._16_4_;
        pcVar7[0x14] = cVar3;
        *(undefined8 *)pcVar7 = uVar5;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x80a);
        String::deallocate((String *)&local_10);
        lVar8 = *plVar10;
      }
      uVar5 = *(undefined8 *)(lVar8 + uVar9 * 0x50 + 0x40);
    }
    else if (uVar4 == 0x90000) {
      if (-1 < param_1) {
        local_10 = 0;
        local_8 = 0;
        puVar6 = (undefined4 *)String::allocate((String *)&local_10,5);
        uVar1 = DAT_0046b094;
        *puVar6 = DAT_0046b090;
        *(undefined1 *)(puVar6 + 1) = uVar1;
        error(-0xd7,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x810);
        String::deallocate((String *)&local_10);
      }
      uVar5 = *(undefined8 *)(*(long *)(this + 8) + 0x10);
    }
    else {
      local_10 = 0;
      local_8 = 0;
      String::allocate((String *)&local_10,0);
      error(-0xd5,(String *)&local_10,"size_t cv::_InputArray::step(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x814);
      String::deallocate((String *)&local_10);
      uVar5 = 0;
    }
  }
  return uVar5;
}


==================================================================

### FUNC 003294d4 (12 bytes) name=fixedSize

/* cv::_OutputArray::fixedSize() const */

uint __thiscall cv::_OutputArray::fixedSize(_OutputArray *this)

{
  return *(uint *)this >> 0x1e & 1;
}


==================================================================

### FUNC 003294e0 (12 bytes) name=fixedType

/* cv::_OutputArray::fixedType() const */

uint __thiscall cv::_OutputArray::fixedType(_OutputArray *this)

{
  return *(uint *)this >> 0x1f;
}


==================================================================

### FUNC 003294ec (32 bytes) name=needed

/* cv::_OutputArray::needed() const */

bool __thiscall cv::_OutputArray::needed(_OutputArray *this)

{
  int iVar1;
  
  iVar1 = _InputArray::kind((_InputArray *)this);
  return iVar1 != 0;
}


==================================================================

### FUNC 0032950c (408 bytes) name=getMatRef

/* cv::_OutputArray::getMatRef(int) const */

long __thiscall cv::_OutputArray::getMatRef(_OutputArray *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  int iVar4;
  char *pcVar5;
  long lVar6;
  long *plVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind((_InputArray *)this);
  if (-1 < param_1) {
    if (iVar4 != 0x50000) {
      local_10 = 0;
      local_8 = 0;
      pcVar5 = (char *)String::allocate((String *)&local_10,0x13);
      cVar3 = s_k____STD_VECTOR_MAT_0046b260[0x12];
      uVar2 = s_k____STD_VECTOR_MAT_0046b260._8_8_;
      uVar1 = s_k____STD_VECTOR_MAT_0046b260._0_8_;
      *(undefined2 *)(pcVar5 + 0x10) = s_k____STD_VECTOR_MAT_0046b260._16_2_;
      pcVar5[0x12] = cVar3;
      *(undefined8 *)pcVar5 = uVar1;
      *(undefined8 *)(pcVar5 + 8) = uVar2;
      error(-0xd7,(String *)&local_10,"cv::Mat& cv::_OutputArray::getMatRef(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa2a);
      String::deallocate((String *)&local_10);
    }
    plVar7 = *(long **)(this + 8);
    lVar6 = *plVar7;
    if ((int)(plVar7[1] - lVar6 >> 5) * -0x55555555 <= param_1) {
      local_10 = 0;
      local_8 = 0;
      pcVar5 = (char *)String::allocate((String *)&local_10,0x11);
      uVar2 = s_i_<_(int)v_size()_0046b278._8_8_;
      uVar1 = s_i_<_(int)v_size()_0046b278._0_8_;
      pcVar5[0x10] = s_i_<_(int)v_size()_0046b278[0x10];
      *(undefined8 *)pcVar5 = uVar1;
      *(undefined8 *)(pcVar5 + 8) = uVar2;
      error(-0xd7,(String *)&local_10,"cv::Mat& cv::_OutputArray::getMatRef(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa2c);
      String::deallocate((String *)&local_10);
      lVar6 = *plVar7;
    }
    return lVar6 + (long)param_1 * 0x60;
  }
  if (iVar4 != 0x10000) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,8);
    *(undefined8 *)pcVar5 = s_k____MAT_0046b250._0_8_;
    error(-0xd7,(String *)&local_10,"cv::Mat& cv::_OutputArray::getMatRef(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa25);
    String::deallocate((String *)&local_10);
  }
  return *(long *)(this + 8);
}


==================================================================

### FUNC 003296e0 (412 bytes) name=getUMatRef

/* cv::_OutputArray::getUMatRef(int) const */

long __thiscall cv::_OutputArray::getUMatRef(_OutputArray *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  int iVar4;
  char *pcVar5;
  long lVar6;
  long *plVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind((_InputArray *)this);
  if (-1 < param_1) {
    if (iVar4 != 0xb0000) {
      local_10 = 0;
      local_8 = 0;
      pcVar5 = (char *)String::allocate((String *)&local_10,0x14);
      uVar2 = s_k____STD_VECTOR_UMAT_0046b2a0._8_8_;
      uVar1 = s_k____STD_VECTOR_UMAT_0046b2a0._0_8_;
      *(undefined4 *)(pcVar5 + 0x10) = s_k____STD_VECTOR_UMAT_0046b2a0._16_4_;
      *(undefined8 *)pcVar5 = uVar1;
      *(undefined8 *)(pcVar5 + 8) = uVar2;
      error(-0xd7,(String *)&local_10,"cv::UMat& cv::_OutputArray::getUMatRef(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa3b);
      String::deallocate((String *)&local_10);
    }
    plVar7 = *(long **)(this + 8);
    lVar6 = *plVar7;
    if ((int)(plVar7[1] - lVar6 >> 4) * -0x33333333 <= param_1) {
      local_10 = 0;
      local_8 = 0;
      pcVar5 = (char *)String::allocate((String *)&local_10,0x11);
      uVar2 = s_i_<_(int)v_size()_0046b278._8_8_;
      uVar1 = s_i_<_(int)v_size()_0046b278._0_8_;
      pcVar5[0x10] = s_i_<_(int)v_size()_0046b278[0x10];
      *(undefined8 *)pcVar5 = uVar1;
      *(undefined8 *)(pcVar5 + 8) = uVar2;
      error(-0xd7,(String *)&local_10,"cv::UMat& cv::_OutputArray::getUMatRef(int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa3d);
      String::deallocate((String *)&local_10);
      lVar6 = *plVar7;
    }
    return lVar6 + (long)param_1 * 0x50;
  }
  if (iVar4 != 0xa0000) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,9);
    cVar3 = s_k____UMAT_0046b290[8];
    *(undefined8 *)pcVar5 = s_k____UMAT_0046b290._0_8_;
    pcVar5[8] = cVar3;
    error(-0xd7,(String *)&local_10,"cv::UMat& cv::_OutputArray::getUMatRef(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa36);
    String::deallocate((String *)&local_10);
  }
  return *(long *)(this + 8);
}


==================================================================

### FUNC 003298b8 (140 bytes) name=getGpuMatRef

/* cv::_OutputArray::getGpuMatRef() const */

undefined8 __thiscall cv::_OutputArray::getGpuMatRef(_OutputArray *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = _InputArray::kind((_InputArray *)this);
  if (iVar3 != 0x90000) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0x11);
    uVar2 = s_k____CUDA_GPU_MAT_0046b2b8._8_8_;
    uVar1 = s_k____CUDA_GPU_MAT_0046b2b8._0_8_;
    pcVar4[0x10] = s_k____CUDA_GPU_MAT_0046b2b8[0x10];
    *(undefined8 *)pcVar4 = uVar1;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"cv::cuda::GpuMat& cv::_OutputArray::getGpuMatRef() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa45);
    String::deallocate((String *)&local_10);
  }
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 00329958 (140 bytes) name=getOGlBufferRef

/* cv::_OutputArray::getOGlBufferRef() const */

undefined8 __thiscall cv::_OutputArray::getOGlBufferRef(_OutputArray *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = _InputArray::kind((_InputArray *)this);
  if (iVar3 != 0x70000) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0x12);
    uVar2 = s_k____OPENGL_BUFFER_0046b078._8_8_;
    uVar1 = s_k____OPENGL_BUFFER_0046b078._0_8_;
    *(undefined2 *)(pcVar4 + 0x10) = s_k____OPENGL_BUFFER_0046b078._16_2_;
    *(undefined8 *)pcVar4 = uVar1;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"cv::ogl::Buffer& cv::_OutputArray::getOGlBufferRef() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa4c);
    String::deallocate((String *)&local_10);
  }
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 003299f8 (140 bytes) name=getHostMemRef

/* cv::_OutputArray::getHostMemRef() const */

undefined8 __thiscall cv::_OutputArray::getHostMemRef(_OutputArray *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = _InputArray::kind((_InputArray *)this);
  if (iVar3 != 0x80000) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0x12);
    uVar2 = s_k____CUDA_HOST_MEM_0046b2d0._8_8_;
    uVar1 = s_k____CUDA_HOST_MEM_0046b2d0._0_8_;
    *(undefined2 *)(pcVar4 + 0x10) = s_k____CUDA_HOST_MEM_0046b2d0._16_2_;
    *(undefined8 *)pcVar4 = uVar1;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"cv::cuda::HostMem& cv::_OutputArray::getHostMemRef() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa53);
    String::deallocate((String *)&local_10);
  }
  return *(undefined8 *)(this + 8);
}


==================================================================

### FUNC 00329a98 (1256 bytes) name=setTo

/* cv::_OutputArray::setTo(cv::_InputArray const&, cv::_InputArray const&) const */

void __thiscall
cv::_OutputArray::setTo(_OutputArray *this,_InputArray *param_1,_InputArray *param_2)

{
  uint uVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  uint uVar11;
  int iVar12;
  uint *puVar13;
  ulong uVar14;
  char *pcVar15;
  undefined8 uVar16;
  Mat *pMVar17;
  undefined8 uVar18;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  uint *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar11 = _InputArray::kind((_InputArray *)this);
  if (uVar11 == 0) {
    return;
  }
  if (((uVar11 & 0xfffdffff) == 0x10000) || (uVar11 == 0x20000)) {
    iVar12 = _InputArray::kind((_InputArray *)this);
    if (iVar12 == 0x10000) {
      pMVar17 = *(Mat **)(this + 8);
      local_20 = (uint *)&local_58;
      local_18 = &local_10;
      uVar11 = *(uint *)pMVar17;
      local_50 = *(undefined8 **)(pMVar17 + 0x10);
      local_60 = *(ulong *)pMVar17;
      local_58 = *(undefined8 *)(pMVar17 + 8);
      local_48 = *(undefined8 *)(pMVar17 + 0x18);
      local_40 = *(undefined8 *)(pMVar17 + 0x20);
      local_38 = *(undefined8 *)(pMVar17 + 0x28);
      local_30 = *(undefined8 *)(pMVar17 + 0x30);
      local_28 = *(long *)(pMVar17 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar2 = (int *)(local_28 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = *piVar2 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(int *)(pMVar17 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar17 + 0x48);
        local_8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
      }
      else {
        local_60 = (ulong)uVar11;
        Mat::copySize((Mat *)&local_60,pMVar17);
      }
    }
    else {
      _InputArray::getMat_((int)this);
    }
    Mat::setTo((Mat *)&local_60,param_1,param_2);
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        iVar12 = *piVar2;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = iVar12 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar12 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar12 = 0;
      puVar13 = local_20;
      do {
        *puVar13 = 0;
        iVar12 = iVar12 + 1;
        puVar13 = puVar13 + 1;
      } while (iVar12 < local_60._4_4_);
    }
    goto LAB_00329bc8;
  }
  if (uVar11 == 0xa0000) {
    UMat::setTo(*(UMat **)(this + 8),param_1,param_2);
    return;
  }
  if (uVar11 != 0x90000) {
    local_60 = 0;
    local_58 = 0;
    String::allocate((String *)&local_60,0);
    error(-0xd5,(String *)&local_60,
          "void cv::_OutputArray::setTo(const cv::_InputArray&, const cv::_InputArray&) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa6b);
    String::deallocate((String *)&local_60);
    return;
  }
  iVar12 = _InputArray::kind(param_1);
  if (iVar12 == 0x10000) {
    pMVar17 = *(Mat **)(param_1 + 8);
    local_20 = (uint *)&local_58;
    local_18 = &local_10;
    uVar11 = *(uint *)pMVar17;
    local_50 = *(undefined8 **)(pMVar17 + 0x10);
    local_60 = *(ulong *)pMVar17;
    local_58 = *(undefined8 *)(pMVar17 + 8);
    local_48 = *(undefined8 *)(pMVar17 + 0x18);
    local_40 = *(undefined8 *)(pMVar17 + 0x20);
    local_38 = *(undefined8 *)(pMVar17 + 0x28);
    local_30 = *(undefined8 *)(pMVar17 + 0x30);
    local_28 = *(long *)(pMVar17 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = *piVar2 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar17 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar17 + 0x48);
      local_8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar11;
      Mat::copySize((Mat *)&local_60,pMVar17);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  uVar14 = _InputArray::type((_InputArray *)this,-1);
  _InputArray::kind(param_1);
  if ((local_60._4_4_ < 3) && (((uint)local_60 >> 0xe & 1) != 0)) {
    uVar11 = *local_20;
    if (local_20[1] == 1) {
      if (((uVar11 != 1) &&
          (uVar1 = ((uint)((uVar14 & 0xffffffff) >> 3) & 0x1ff) + 1, uVar11 != uVar1)) &&
         ((uVar11 != 4 || ((4 < uVar1 || (((uint)local_60 & 0xfff) != 6)))))) goto LAB_00329cfc;
    }
    else if ((uVar11 != 1) || (local_20[1] != ((uint)((uVar14 & 0xffffffff) >> 3) & 0x1ff) + 1))
    goto LAB_00329cfc;
  }
  else {
LAB_00329cfc:
    local_a0 = 0;
    local_98 = 0;
    pcVar15 = (char *)String::allocate((String *)&local_a0,0x41);
    uVar8 = s_checkScalar_value__type____arr_k_0046b2e8._40_8_;
    uVar7 = s_checkScalar_value__type____arr_k_0046b2e8._32_8_;
    uVar6 = s_checkScalar_value__type____arr_k_0046b2e8._24_8_;
    uVar5 = s_checkScalar_value__type____arr_k_0046b2e8._16_8_;
    uVar18 = s_checkScalar_value__type____arr_k_0046b2e8._8_8_;
    uVar16 = s_checkScalar_value__type____arr_k_0046b2e8._0_8_;
    pcVar15[0x40] = s_checkScalar_value__type____arr_k_0046b2e8[0x40];
    uVar10 = s_checkScalar_value__type____arr_k_0046b2e8._56_8_;
    uVar9 = s_checkScalar_value__type____arr_k_0046b2e8._48_8_;
    *(undefined8 *)pcVar15 = uVar16;
    *(undefined8 *)(pcVar15 + 8) = uVar18;
    *(undefined8 *)(pcVar15 + 0x10) = uVar5;
    *(undefined8 *)(pcVar15 + 0x18) = uVar6;
    *(undefined8 *)(pcVar15 + 0x20) = uVar7;
    *(undefined8 *)(pcVar15 + 0x28) = uVar8;
    *(undefined8 *)(pcVar15 + 0x30) = uVar9;
    *(undefined8 *)(pcVar15 + 0x38) = uVar10;
    error(-0xd7,(String *)&local_a0,
          "void cv::_OutputArray::setTo(const cv::_InputArray&, const cv::_InputArray&) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa67);
    String::deallocate((String *)&local_a0);
  }
  uVar18 = *(undefined8 *)(this + 8);
  local_a0 = *local_50;
  local_98 = local_50[1];
  local_90 = local_50[2];
  local_88 = local_50[3];
  local_80 = local_a0;
  local_78 = local_98;
  local_70 = local_90;
  local_68 = local_88;
  uVar16 = cuda::Stream::Null();
  cuda::GpuMat::setTo(uVar18,&local_80,param_2,uVar16);
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  if (0 < local_60._4_4_) {
    iVar12 = 0;
    puVar13 = local_20;
    do {
      *puVar13 = 0;
      iVar12 = iVar12 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar12 < local_60._4_4_);
  }
LAB_00329bc8:
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = (undefined8 *)0x0;
  if (local_18 == &local_10) {
    return;
  }
  fastFree(local_18);
  return;
}


==================================================================

### FUNC 00329fec (848 bytes) name=assign

/* cv::_OutputArray::assign(cv::UMat const&) const */

void __thiscall cv::_OutputArray::assign(_OutputArray *this,UMat *param_1)

{
  int *piVar1;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  Mat *pMVar7;
  undefined4 *puVar8;
  undefined8 uVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  UMat *this_00;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar6 = _InputArray::kind((_InputArray *)this);
  if (iVar6 != 0xa0000) {
    if (iVar6 == 0x10000) {
      local_58 = *(undefined8 *)(this + 8);
      local_50 = 0;
      local_60 = CONCAT44(local_60._4_4_,0x2010000);
      UMat::copyTo(param_1,(_OutputArray *)&local_60);
      return;
    }
    if (iVar6 != 0x20000) {
      local_60 = 0;
      local_58 = 0;
      String::allocate((String *)&local_60,0);
      error(-0xd5,(String *)&local_60,"void cv::_OutputArray::assign(const cv::UMat&) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa80);
      String::deallocate((String *)&local_60);
      return;
    }
    iVar6 = _InputArray::kind((_InputArray *)this);
    if (iVar6 == 0x10000) {
      pMVar7 = *(Mat **)(this + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar2 = *(uint *)pMVar7;
      local_50 = *(undefined8 *)(pMVar7 + 0x10);
      local_60 = *(ulong *)pMVar7;
      local_58 = *(undefined8 *)(pMVar7 + 8);
      local_48 = *(undefined8 *)(pMVar7 + 0x18);
      local_40 = *(undefined8 *)(pMVar7 + 0x20);
      local_38 = *(undefined8 *)(pMVar7 + 0x28);
      local_30 = *(undefined8 *)(pMVar7 + 0x30);
      local_28 = *(long *)(pMVar7 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (*(int *)(pMVar7 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar7 + 0x48);
        local_8 = (*(undefined8 **)(pMVar7 + 0x48))[1];
      }
      else {
        local_60 = (ulong)uVar2;
        Mat::copySize((Mat *)&local_60,pMVar7);
      }
    }
    else {
      _InputArray::getMat_((int)this);
    }
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0xc2010000;
    local_70 = (Mat *)&local_60;
    UMat::copyTo(param_1,(_OutputArray *)local_78);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar6 = *piVar1;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = iVar6 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar6 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar6 = 0;
      puVar10 = local_20;
      do {
        *(undefined4 *)puVar10 = 0;
        iVar6 = iVar6 + 1;
        puVar10 = (undefined8 *)((long)puVar10 + 4);
      } while (iVar6 < local_60._4_4_);
    }
    if (local_18 == &local_10) {
      return;
    }
    fastFree(local_18);
    return;
  }
  this_00 = *(UMat **)(this + 8);
  if (this_00 == param_1) {
    return;
  }
  if (*(long *)(param_1 + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x20) + 0x10);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (*(long *)(this_00 + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(this_00 + 0x20) + 0x10);
    do {
      iVar6 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar6 == 1) {
      UMat::deallocate(this_00);
    }
  }
  if (*(int *)(this_00 + 4) < 1) {
    *(undefined4 *)this_00 = *(undefined4 *)param_1;
    *(undefined8 *)(this_00 + 0x20) = 0;
LAB_0032a274:
    iVar6 = *(int *)(param_1 + 4);
    if (iVar6 < 3) {
      puVar11 = *(undefined8 **)(param_1 + 0x38);
      puVar10 = *(undefined8 **)(this_00 + 0x38);
      uVar3 = *(undefined4 *)(param_1 + 8);
      *(undefined4 *)(this_00 + 0xc) = *(undefined4 *)(param_1 + 0xc);
      *(int *)(this_00 + 4) = iVar6;
      *(undefined4 *)(this_00 + 8) = uVar3;
      *puVar10 = *puVar11;
      puVar10[1] = puVar11[1];
      goto LAB_0032a28c;
    }
  }
  else {
    iVar6 = 0;
    puVar8 = *(undefined4 **)(this_00 + 0x30);
    do {
      *puVar8 = 0;
      iVar6 = iVar6 + 1;
      puVar8 = puVar8 + 1;
    } while (iVar6 < *(int *)(this_00 + 4));
    uVar3 = *(undefined4 *)param_1;
    *(undefined8 *)(this_00 + 0x20) = 0;
    *(undefined4 *)this_00 = uVar3;
    if (*(int *)(this_00 + 4) < 3) goto LAB_0032a274;
  }
  UMat::copySize(this_00,param_1);
LAB_0032a28c:
  *(undefined8 *)(this_00 + 0x10) = *(undefined8 *)(param_1 + 0x10);
  if (*(int *)(this_00 + 0x18) == 0) {
    *(undefined4 *)(this_00 + 0x18) = *(undefined4 *)(param_1 + 0x18);
  }
  uVar9 = *(undefined8 *)(param_1 + 0x20);
  *(undefined8 *)(this_00 + 0x28) = *(undefined8 *)(param_1 + 0x28);
  *(undefined8 *)(this_00 + 0x20) = uVar9;
  return;
}


==================================================================

### FUNC 0032a374 (868 bytes) name=assign

/* cv::_OutputArray::assign(cv::Mat const&) const */

void __thiscall cv::_OutputArray::assign(_OutputArray *this,Mat *param_1)

{
  int *piVar1;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  Mat *pMVar7;
  undefined4 *puVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar6 = _InputArray::kind((_InputArray *)this);
  if (iVar6 == 0xa0000) {
    local_58 = *(undefined8 *)(this + 8);
    local_50 = 0;
    local_60 = CONCAT44(local_60._4_4_,0x20a0000);
    Mat::copyTo(param_1,(_OutputArray *)&local_60);
    return;
  }
  if (iVar6 != 0x10000) {
    if (iVar6 != 0x20000) {
      local_60 = 0;
      local_58 = 0;
      String::allocate((String *)&local_60,0);
      error(-0xd5,(String *)&local_60,"void cv::_OutputArray::assign(const cv::Mat&) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa96);
      String::deallocate((String *)&local_60);
      return;
    }
    iVar6 = _InputArray::kind((_InputArray *)this);
    if (iVar6 == 0x10000) {
      pMVar7 = *(Mat **)(this + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar2 = *(uint *)pMVar7;
      local_50 = *(undefined8 *)(pMVar7 + 0x10);
      local_60 = *(ulong *)pMVar7;
      local_58 = *(undefined8 *)(pMVar7 + 8);
      local_48 = *(undefined8 *)(pMVar7 + 0x18);
      local_40 = *(undefined8 *)(pMVar7 + 0x20);
      local_38 = *(undefined8 *)(pMVar7 + 0x28);
      local_30 = *(undefined8 *)(pMVar7 + 0x30);
      local_28 = *(long *)(pMVar7 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (*(int *)(pMVar7 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar7 + 0x48);
        local_8 = (*(undefined8 **)(pMVar7 + 0x48))[1];
      }
      else {
        local_60 = (ulong)uVar2;
        Mat::copySize((Mat *)&local_60,pMVar7);
      }
    }
    else {
      _InputArray::getMat_((int)this);
    }
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0xc2010000;
    local_70 = (Mat *)&local_60;
    Mat::copyTo(param_1,(_OutputArray *)local_78);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar6 = *piVar1;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = iVar6 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar6 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar6 = 0;
      puVar9 = local_20;
      do {
        *(undefined4 *)puVar9 = 0;
        iVar6 = iVar6 + 1;
        puVar9 = (undefined8 *)((long)puVar9 + 4);
      } while (iVar6 < local_60._4_4_);
    }
    if (local_18 == &local_10) {
      return;
    }
    fastFree(local_18);
    return;
  }
  pMVar7 = *(Mat **)(this + 8);
  if (param_1 == pMVar7) {
    return;
  }
  if (*(long *)(param_1 + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(param_1 + 0x38) + 0x14);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (*(long *)(pMVar7 + 0x38) != 0) {
    piVar1 = (int *)(*(long *)(pMVar7 + 0x38) + 0x14);
    do {
      iVar6 = *piVar1;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar5) {
        *piVar1 = iVar6 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate(pMVar7);
    }
  }
  *(undefined8 *)(pMVar7 + 0x38) = 0;
  *(undefined8 *)(pMVar7 + 0x10) = 0;
  *(undefined8 *)(pMVar7 + 0x28) = 0;
  *(undefined8 *)(pMVar7 + 0x20) = 0;
  *(undefined8 *)(pMVar7 + 0x18) = 0;
  if (*(int *)(pMVar7 + 4) < 1) {
    *(undefined4 *)pMVar7 = *(undefined4 *)param_1;
LAB_0032a634:
    iVar6 = *(int *)(param_1 + 4);
    if (iVar6 < 3) {
      puVar10 = *(undefined8 **)(param_1 + 0x48);
      puVar9 = *(undefined8 **)(pMVar7 + 0x48);
      uVar3 = *(undefined4 *)(param_1 + 8);
      *(undefined4 *)(pMVar7 + 0xc) = *(undefined4 *)(param_1 + 0xc);
      *(int *)(pMVar7 + 4) = iVar6;
      *(undefined4 *)(pMVar7 + 8) = uVar3;
      *puVar9 = *puVar10;
      puVar9[1] = puVar10[1];
      goto LAB_0032a64c;
    }
  }
  else {
    iVar6 = 0;
    puVar8 = *(undefined4 **)(pMVar7 + 0x40);
    do {
      *puVar8 = 0;
      iVar6 = iVar6 + 1;
      puVar8 = puVar8 + 1;
    } while (iVar6 < *(int *)(pMVar7 + 4));
    *(undefined4 *)pMVar7 = *(undefined4 *)param_1;
    if (*(int *)(pMVar7 + 4) < 3) goto LAB_0032a634;
  }
  Mat::copySize(pMVar7,param_1);
LAB_0032a64c:
  uVar15 = *(undefined8 *)(param_1 + 0x10);
  uVar14 = *(undefined8 *)(param_1 + 0x28);
  uVar13 = *(undefined8 *)(param_1 + 0x20);
  uVar12 = *(undefined8 *)(param_1 + 0x38);
  uVar11 = *(undefined8 *)(param_1 + 0x30);
  *(undefined8 *)(pMVar7 + 0x18) = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(pMVar7 + 0x10) = uVar15;
  *(undefined8 *)(pMVar7 + 0x28) = uVar14;
  *(undefined8 *)(pMVar7 + 0x20) = uVar13;
  *(undefined8 *)(pMVar7 + 0x38) = uVar12;
  *(undefined8 *)(pMVar7 + 0x30) = uVar11;
  return;
}


==================================================================

### FUNC 0032a710 (12 bytes) name=noArray

/* cv::noArray() */

undefined4 * cv::noArray(void)

{
  return &DAT_00531fc0;
}


==================================================================

### FUNC 0032a71c (1080 bytes) name=setIdentity

/* cv::setIdentity(cv::_InputOutputArray const&, cv::Scalar_<double> const&) */

void cv::setIdentity(_InputOutputArray *param_1,Scalar_ *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  int iVar6;
  char *pcVar7;
  long lVar8;
  int *piVar9;
  Mat *pMVar10;
  float *pfVar11;
  int iVar12;
  float *pfVar13;
  ulong uVar14;
  undefined8 uVar15;
  double dVar16;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  float *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  ulong *local_78;
  ulong local_70;
  ulong local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar6 = _InputArray::dims((_InputArray *)param_1,-1);
  if (2 < iVar6) {
    local_60 = 0;
    local_58 = 0;
    pcVar7 = (char *)String::allocate((String *)&local_60,0xe);
    uVar5 = s__m_dims___<__2_0046b330._12_2_;
    uVar4 = s__m_dims___<__2_0046b330._8_4_;
    *(undefined8 *)pcVar7 = s__m_dims___<__2_0046b330._0_8_;
    *(undefined4 *)(pcVar7 + 8) = uVar4;
    *(undefined2 *)(pcVar7 + 0xc) = uVar5;
    error(-0xd7,(String *)&local_60,"void cv::setIdentity(cv::InputOutputArray, const Scalar&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xb20);
    String::deallocate((String *)&local_60);
  }
  iVar6 = _InputArray::kind((_InputArray *)param_1);
  if (iVar6 == 0x10000) {
    pMVar10 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar10;
    local_bc = *(int *)(pMVar10 + 4);
    local_b8 = *(int *)(pMVar10 + 8);
    local_b4 = *(int *)(pMVar10 + 0xc);
    local_b0 = *(float **)(pMVar10 + 0x10);
    local_a8 = *(undefined8 *)(pMVar10 + 0x18);
    local_a0 = *(undefined8 *)(pMVar10 + 0x20);
    local_98 = *(undefined8 *)(pMVar10 + 0x28);
    local_90 = *(undefined8 *)(pMVar10 + 0x30);
    local_88 = *(long *)(pMVar10 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar9 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar10 + 4) < 3) {
      local_70 = **(ulong **)(pMVar10 + 0x48);
      local_68 = (*(ulong **)(pMVar10 + 0x48))[1];
      iVar6 = local_b8;
      iVar3 = local_b4;
      pfVar11 = local_b0;
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar10);
      iVar6 = local_b8;
      iVar3 = local_b4;
      pfVar11 = local_b0;
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
    iVar6 = local_b8;
    iVar3 = local_b4;
    pfVar11 = local_b0;
  }
  local_b8 = iVar6;
  local_b4 = iVar3;
  local_b0 = pfVar11;
  if ((local_c0 & 0xfff) == 5) {
    dVar16 = *(double *)param_2;
    if (0 < iVar6) {
      uVar14 = local_70 & 0xfffffffffffffffc;
      iVar12 = 0;
      lVar8 = uVar14 + 4;
      pfVar13 = pfVar11;
      if (iVar3 < 1) {
        do {
          if (iVar12 < iVar3) {
            *pfVar11 = (float)dVar16;
          }
          iVar12 = iVar12 + 1;
          pfVar11 = (float *)((long)pfVar11 + lVar8);
        } while (iVar12 != iVar6);
      }
      else {
        do {
          memset(pfVar11,0,((ulong)(iVar3 - 1) + 1) * 4);
          if (iVar12 < iVar3) {
            *pfVar13 = (float)dVar16;
          }
          iVar12 = iVar12 + 1;
          pfVar11 = (float *)((long)pfVar11 + uVar14);
          pfVar13 = (float *)((long)pfVar13 + lVar8);
        } while (iVar12 != iVar6);
      }
    }
    goto LAB_0032a8a8;
  }
  if ((local_c0 & 0xfff) == 6) {
    uVar15 = *(undefined8 *)param_2;
    if (0 < iVar6) {
      iVar12 = 0;
      do {
        lVar8 = 0;
        if (0 < iVar3) {
          do {
            while (iVar12 != (int)lVar8) {
              (pfVar11 + lVar8 * 2)[0] = 0.0;
              (pfVar11 + lVar8 * 2)[1] = 0.0;
              lVar8 = lVar8 + 1;
              if (iVar3 <= (int)lVar8) goto LAB_0032ab00;
            }
            *(undefined8 *)(pfVar11 + lVar8 * 2) = uVar15;
            lVar8 = lVar8 + 1;
          } while ((int)lVar8 < iVar3);
        }
LAB_0032ab00:
        iVar12 = iVar12 + 1;
        pfVar11 = (float *)((long)pfVar11 + (local_70 & 0xfffffffffffffff8));
      } while (iVar12 != iVar6);
    }
    goto LAB_0032a8a8;
  }
  local_58 = 0;
  local_60 = 0;
  uStack_48 = 0;
  local_50 = 0;
  Mat::operator=((Mat *)&local_c0,(Scalar_ *)&local_60);
  Mat::diag((int)(Mat *)&local_c0);
  Mat::operator=((Mat *)&local_60,param_2);
  if (local_28 == 0) {
LAB_0032a858:
    uVar15 = local_60;
  }
  else {
    piVar9 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar6 != 1) goto LAB_0032a858;
    Mat::deallocate((Mat *)&local_60);
    uVar15 = local_60;
  }
  if (0 < local_60._4_4_) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_60._4_4_ = (int)((ulong)uVar15 >> 0x20);
      local_20 = local_20 + 1;
    } while (iVar6 < local_60._4_4_);
  }
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  local_50 = 0;
  local_60 = uVar15;
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
LAB_0032a8a8:
  if (local_88 != 0) {
    piVar9 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar9;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar2) {
        *piVar9 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (float *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    piVar9 = local_80;
    do {
      *piVar9 = 0;
      iVar6 = iVar6 + 1;
      piVar9 = piVar9 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0032abb8 (948 bytes) name=trace

/* cv::trace(cv::_InputArray const&) */

void __thiscall cv::trace(cv *this,_InputArray *param_1)

{
  char cVar1;
  bool bVar2;
  undefined2 uVar3;
  int iVar4;
  char *pcVar5;
  double *pdVar6;
  Mat *pMVar7;
  int *piVar8;
  int iVar9;
  double *in_x8;
  float fVar10;
  double dVar11;
  double dVar12;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  double *local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  ulong *local_78;
  ulong local_70;
  ulong local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar4 = _InputArray::kind((_InputArray *)this);
  if (iVar4 == 0x10000) {
    pMVar7 = *(Mat **)(this + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar7;
    local_bc = *(int *)(pMVar7 + 4);
    local_b8 = *(int *)(pMVar7 + 8);
    local_b4 = *(int *)(pMVar7 + 0xc);
    local_b0 = *(double **)(pMVar7 + 0x10);
    local_a8 = *(undefined8 *)(pMVar7 + 0x18);
    local_a0 = *(undefined8 *)(pMVar7 + 0x20);
    local_98 = *(undefined8 *)(pMVar7 + 0x28);
    local_90 = *(undefined8 *)(pMVar7 + 0x30);
    local_88 = *(long *)(pMVar7 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar8 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar7 + 4) < 3) {
      local_70 = **(ulong **)(pMVar7 + 0x48);
      local_68 = (*(ulong **)(pMVar7 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar7);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  if (local_bc < 3) {
    iVar4 = local_b8;
    if (local_b4 < local_b8) {
      iVar4 = local_b4;
    }
  }
  else {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar5 = (char *)String::allocate((String *)&local_d8,0xb);
    cVar1 = s_m_dims_<__2_0046acf8[10];
    uVar3 = s_m_dims_<__2_0046acf8._8_2_;
    *(undefined8 *)pcVar5 = s_m_dims_<__2_0046acf8._0_8_;
    *(undefined2 *)(pcVar5 + 8) = uVar3;
    pcVar5[10] = cVar1;
    error(-0xd7,(String *)&local_d8,"cv::Scalar cv::trace(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xb4e);
    String::deallocate((String *)&local_d8);
    iVar4 = local_b8;
    if (local_b4 < local_b8) {
      iVar4 = local_b4;
    }
  }
  if ((local_c0 & 0xfff) == 5) {
    if (iVar4 < 1) {
      dVar11 = 0.0;
    }
    else {
      dVar11 = 0.0;
      iVar9 = 0;
      pdVar6 = local_b0;
      do {
        fVar10 = *(float *)pdVar6;
        iVar9 = iVar9 + 1;
        pdVar6 = (double *)((long)pdVar6 + ((local_70 >> 2) + 1) * 4);
        dVar11 = dVar11 + (double)fVar10;
      } while (iVar9 != iVar4);
    }
    *in_x8 = dVar11;
    in_x8[1] = 0.0;
    in_x8[2] = 0.0;
    in_x8[3] = 0.0;
  }
  else if ((local_c0 & 0xfff) == 6) {
    if (iVar4 < 1) {
      dVar11 = 0.0;
    }
    else {
      dVar11 = 0.0;
      iVar9 = 0;
      pdVar6 = local_b0;
      do {
        iVar9 = iVar9 + 1;
        dVar12 = *pdVar6;
        pdVar6 = pdVar6 + (local_70 >> 3) + 1;
        dVar11 = dVar11 + dVar12;
      } while (iVar9 != iVar4);
    }
    *in_x8 = dVar11;
    in_x8[1] = 0.0;
    in_x8[2] = 0.0;
    in_x8[3] = 0.0;
  }
  else {
    Mat::diag((int)&local_c0);
    local_c8 = 0;
    local_c4 = 0;
    local_d8 = CONCAT44(local_d8._4_4_,0x1010000);
    local_d0 = aMStack_60;
    sum((cv *)&local_d8,(_InputArray *)0x1010000);
    if (local_28 != 0) {
      piVar8 = (int *)(local_28 + 0x14);
      do {
        iVar4 = *piVar8;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar4 == 1) {
        Mat::deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar4 = 0;
      do {
        *local_20 = 0;
        iVar4 = iVar4 + 1;
        local_20 = local_20 + 1;
      } while (iVar4 < local_5c);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar8 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar8;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar2) {
        *piVar8 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = (double *)0x0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    piVar8 = local_80;
    do {
      *piVar8 = 0;
      iVar4 = iVar4 + 1;
      piVar8 = piVar8 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0032afc8 (848 bytes) name=completeSymm

/* cv::completeSymm(cv::_InputOutputArray const&, bool) */

void cv::completeSymm(_InputOutputArray *param_1,bool param_2)

{
  bool bVar1;
  int iVar2;
  char cVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  long lVar9;
  int iVar10;
  char *pcVar11;
  int *piVar12;
  Mat *pMVar13;
  void *__src;
  void *__dest;
  size_t __n;
  long lVar14;
  int iVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  iVar10 = _InputArray::kind((_InputArray *)param_1);
  if (iVar10 == 0x10000) {
    pMVar13 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar13;
    local_5c = *(int *)(pMVar13 + 4);
    local_58 = *(int *)(pMVar13 + 8);
    local_54 = *(int *)(pMVar13 + 0xc);
    local_50 = *(long *)(pMVar13 + 0x10);
    local_48 = *(undefined8 *)(pMVar13 + 0x18);
    local_40 = *(undefined8 *)(pMVar13 + 0x20);
    local_38 = *(undefined8 *)(pMVar13 + 0x28);
    local_30 = *(undefined8 *)(pMVar13 + 0x30);
    local_28 = *(long *)(pMVar13 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar12 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar1) {
          *piVar12 = *piVar12 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (2 < *(int *)(pMVar13 + 4)) {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar13);
      goto LAB_0032b020;
    }
    local_10 = **(long **)(pMVar13 + 0x48);
    local_8 = (*(long **)(pMVar13 + 0x48))[1];
    if (local_5c < 1) goto LAB_0032b2ec;
LAB_0032b030:
    __n = local_18[(long)local_5c + -1];
    if ((local_5c < 3) && (lVar14 = local_10, local_58 == local_54)) goto LAB_0032b0d4;
  }
  else {
    _InputArray::getMat_((int)param_1);
LAB_0032b020:
    if (0 < local_5c) goto LAB_0032b030;
LAB_0032b2ec:
    __n = 0;
    lVar14 = local_10;
    if (local_58 == local_54) goto LAB_0032b0d4;
  }
  lVar14 = local_10;
  local_70 = 0;
  local_68 = 0;
  pcVar11 = (char *)String::allocate((String *)&local_70,0x1f);
  cVar3 = s_m_dims_<__2_&&_m_rows____m_cols_0046b340[0x1e];
  uVar8 = s_m_dims_<__2_&&_m_rows____m_cols_0046b340._28_2_;
  uVar7 = s_m_dims_<__2_&&_m_rows____m_cols_0046b340._24_4_;
  uVar6 = s_m_dims_<__2_&&_m_rows____m_cols_0046b340._8_8_;
  uVar5 = s_m_dims_<__2_&&_m_rows____m_cols_0046b340._0_8_;
  *(undefined8 *)(pcVar11 + 0x10) = s_m_dims_<__2_&&_m_rows____m_cols_0046b340._16_8_;
  *(undefined4 *)(pcVar11 + 0x18) = uVar7;
  *(undefined2 *)(pcVar11 + 0x1c) = uVar8;
  pcVar11[0x1e] = cVar3;
  *(undefined8 *)pcVar11 = uVar5;
  *(undefined8 *)(pcVar11 + 8) = uVar6;
  error(-0xd7,(String *)&local_70,"void cv::completeSymm(cv::InputOutputArray, bool)",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc8c);
  String::deallocate((String *)&local_70);
LAB_0032b0d4:
  lVar9 = local_50;
  iVar10 = local_58;
  if (0 < local_58) {
    lVar17 = 0;
    lVar18 = 0;
    iVar15 = 1;
    iVar16 = 0;
    iVar4 = local_58;
    do {
      iVar2 = iVar15;
      if (!param_2) {
        iVar2 = iVar16;
        iVar4 = iVar15 + -1;
      }
      if (iVar2 < iVar4) {
        __src = (void *)(lVar9 + lVar17 + lVar14 * iVar2);
        __dest = (void *)(lVar9 + lVar18 + (long)iVar2 * __n);
        iVar16 = iVar2;
        do {
          iVar16 = iVar16 + 1;
          memcpy(__dest,__src,__n);
          __src = (void *)((long)__src + lVar14);
          __dest = (void *)((long)__dest + __n);
        } while (iVar16 != iVar4);
      }
      lVar18 = lVar18 + lVar14;
      lVar17 = lVar17 + __n;
      bVar1 = iVar15 < iVar10;
      iVar15 = iVar15 + 1;
      iVar16 = iVar2;
    } while (bVar1);
  }
  if (local_28 != 0) {
    piVar12 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar12;
      cVar3 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar1) {
        *piVar12 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    piVar12 = local_20;
    do {
      *piVar12 = 0;
      iVar10 = iVar10 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0032b360 (1088 bytes) name=cross

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::cross(cv::_InputArray const&) const */

void cv::Mat::cross(_InputArray *param_1)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  void *__dest;
  _InputArray *in_x1;
  Mat *pMVar7;
  float *pfVar8;
  double *pdVar9;
  int *piVar10;
  long lVar11;
  long lVar12;
  float *pfVar13;
  double *pdVar14;
  long lVar15;
  long lVar16;
  Mat *in_x8;
  int local_78;
  int local_74;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  double *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  ulong *local_18;
  ulong local_10;
  ulong local_8;
  
  iVar6 = _InputArray::kind(in_x1);
  if (iVar6 == 0x10000) {
    pMVar7 = *(Mat **)(in_x1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar7;
    local_5c = *(int *)(pMVar7 + 4);
    local_58 = *(int *)(pMVar7 + 8);
    local_54 = *(undefined4 *)(pMVar7 + 0xc);
    local_50 = *(double **)(pMVar7 + 0x10);
    local_48 = *(undefined8 *)(pMVar7 + 0x18);
    local_40 = *(undefined8 *)(pMVar7 + 0x20);
    local_38 = *(undefined8 *)(pMVar7 + 0x28);
    local_30 = *(undefined8 *)(pMVar7 + 0x30);
    local_28 = *(long *)(pMVar7 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar10 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar3) {
          *piVar10 = *piVar10 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar7 + 4) < 3) {
      local_10 = **(ulong **)(pMVar7 + 0x48);
      local_8 = (*(ulong **)(pMVar7 + 0x48))[1];
    }
    else {
      local_5c = 0;
      copySize((Mat *)&local_60,pMVar7);
    }
  }
  else {
    _InputArray::getMat_((int)in_x1);
  }
  uVar1 = *(uint *)param_1;
  if ((*(int *)(param_1 + 4) < 3) && (local_5c < 3)) {
    if ((**(int **)(param_1 + 0x40) != *local_20) ||
       (((*(int **)(param_1 + 0x40))[1] != local_20[1] || ((uVar1 & 0xfff) != (local_60 & 0xfff)))))
    goto LAB_0032b3cc;
    if (*(long *)(param_1 + 8) != 0x100000003) {
      local_74 = *(int *)(param_1 + 0xc);
      if ((local_74 + (uVar1 >> 3 & 0x1ff) * local_74 == 3) && (*(int *)(param_1 + 8) == 1)) {
        local_78 = 1;
        goto LAB_0032b424;
      }
      goto LAB_0032b3cc;
    }
  }
  else {
LAB_0032b3cc:
    local_70 = 0;
    local_68 = 0;
    __dest = (void *)String::allocate((String *)&local_70,0x85);
    memcpy(__dest,&DAT_0046b360,0x85);
    error(-0xd7,(String *)&local_70,"cv::Mat cv::Mat::cross(cv::InputArray) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xca0);
    String::deallocate((String *)&local_70);
  }
  local_78 = *(int *)(param_1 + 8);
  local_74 = *(int *)(param_1 + 0xc);
LAB_0032b424:
  *(undefined8 *)(in_x8 + 0x10) = 0;
  uVar5 = _UNK_0032b7e8;
  uVar4 = _DAT_0032b7e0;
  *(undefined8 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x30) = 0;
  *(undefined8 *)(in_x8 + 8) = uVar5;
  *(undefined8 *)in_x8 = uVar4;
  *(undefined8 *)(in_x8 + 0x38) = 0;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  create(in_x8,2,&local_78,uVar1 & 0xfff);
  if ((uVar1 & 7) == 5) {
    pfVar8 = *(float **)(param_1 + 0x10);
    pfVar13 = *(float **)(in_x8 + 0x10);
    if (*(int *)(param_1 + 8) < 2) {
      lVar11 = 4;
      lVar12 = 8;
      lVar15 = lVar11;
      lVar16 = lVar12;
    }
    else {
      lVar12 = (*(ulong *)(param_1 + 0x50) >> 2) << 3;
      lVar11 = (local_10 >> 2) << 2;
      lVar15 = (*(ulong *)(param_1 + 0x50) >> 2) << 2;
      lVar16 = (local_10 >> 2) << 3;
    }
    *pfVar13 = *(float *)((long)pfVar8 + lVar15) * *(float *)((long)local_50 + lVar16) -
               *(float *)((long)pfVar8 + lVar12) * *(float *)((long)local_50 + lVar11);
    pfVar13[1] = *(float *)((long)pfVar8 + lVar12) * *(float *)local_50 -
                 *pfVar8 * *(float *)((long)local_50 + lVar16);
    pfVar13[2] = *pfVar8 * *(float *)((long)local_50 + lVar11) -
                 *(float *)((long)pfVar8 + lVar15) * *(float *)local_50;
  }
  else if ((uVar1 & 7) == 6) {
    pdVar9 = *(double **)(param_1 + 0x10);
    pdVar14 = *(double **)(in_x8 + 0x10);
    if (*(int *)(param_1 + 8) < 2) {
      lVar11 = 8;
      lVar12 = 0x10;
      lVar15 = lVar11;
      lVar16 = lVar12;
    }
    else {
      lVar12 = (*(ulong *)(param_1 + 0x50) >> 3) << 4;
      lVar11 = (local_10 >> 3) << 3;
      lVar15 = (*(ulong *)(param_1 + 0x50) >> 3) << 3;
      lVar16 = (local_10 >> 3) << 4;
    }
    *pdVar14 = *(double *)((long)pdVar9 + lVar15) * *(double *)((long)local_50 + lVar16) -
               *(double *)((long)pdVar9 + lVar12) * *(double *)((long)local_50 + lVar11);
    pdVar14[1] = *(double *)((long)pdVar9 + lVar12) * *local_50 -
                 *pdVar9 * *(double *)((long)local_50 + lVar16);
    pdVar14[2] = *pdVar9 * *(double *)((long)local_50 + lVar11) -
                 *(double *)((long)pdVar9 + lVar15) * *local_50;
  }
  if (local_28 != 0) {
    piVar10 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = (double *)0x0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    piVar10 = local_20;
    do {
      *piVar10 = 0;
      iVar6 = iVar6 + 1;
      piVar10 = piVar10 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0032b7f0 (264 bytes) name=cvSetIdentity

void cvSetIdentity(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                  cv *param_5)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_5,(void *)0x0,true,false,0,in_x5);
  local_98[0] = 0x3010000;
  local_88 = 0;
  local_84 = 0;
  local_90 = aMStack_60;
  local_80 = param_1;
  local_78 = param_2;
  local_70 = param_3;
  local_68 = param_4;
  cv::setIdentity((_InputOutputArray *)local_98,(Scalar_ *)&local_80);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0032b920 (260 bytes) name=cvTrace

undefined1  [16] cvTrace(cv *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined1 auVar5 [16];
  undefined4 local_b8 [2];
  Mat *local_b0;
  undefined4 local_a8;
  undefined4 local_a4;
  ulong local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  undefined8 uStack_88;
  ulong local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  local_a8 = 0;
  local_a4 = 0;
  local_b8[0] = 0x1010000;
  local_b0 = aMStack_60;
  cv::trace((cv *)local_b8,(_InputArray *)0x1010000);
  local_78 = uStack_98;
  local_80 = local_a0;
  uStack_68 = uStack_88;
  local_70 = local_90;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  auVar5._8_8_ = 0;
  auVar5._0_8_ = local_80;
  return auVar5;
}


==================================================================

### FUNC 0032ba4c (224 bytes) name=cvCompleteSymm

void cvCompleteSymm(cv *param_1,int param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x3010000;
  local_70 = aMStack_60;
  cv::completeSymm((_InputOutputArray *)local_78,param_2 != 0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0032bb54 (912 bytes) name=cvCrossProduct

void cvCrossProduct(cv *param_1,cv *param_2,cv *param_3,undefined8 param_4,undefined8 param_5,
                   AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  int iVar11;
  undefined8 local_198;
  Mat *local_190;
  undefined4 local_188;
  undefined4 local_184;
  uint local_180;
  int local_17c;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  long local_148;
  int *local_140;
  undefined1 *local_138;
  undefined1 auStack_130 [16];
  uint local_120;
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  int *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  if (((local_140[1] != local_e0[1]) || (*local_140 != *local_e0)) ||
     ((local_180 & 0xfff) != (local_120 & 0xfff))) {
    local_198 = 0;
    local_190 = (Mat *)0x0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_198,0x36);
    uVar10 = s_srcA_size______dst_size______src_0046b3e8._52_2_;
    uVar9 = s_srcA_size______dst_size______src_0046b3e8._40_8_;
    uVar8 = s_srcA_size______dst_size______src_0046b3e8._32_8_;
    uVar7 = s_srcA_size______dst_size______src_0046b3e8._24_8_;
    uVar6 = s_srcA_size______dst_size______src_0046b3e8._16_8_;
    uVar5 = s_srcA_size______dst_size______src_0046b3e8._8_8_;
    uVar4 = s_srcA_size______dst_size______src_0046b3e8._0_8_;
    *(undefined4 *)(param_6 + 0x30) = s_srcA_size______dst_size______src_0046b3e8._48_4_;
    *(undefined2 *)(param_6 + 0x34) = uVar10;
    *(undefined8 *)param_6 = uVar4;
    *(undefined8 *)(param_6 + 8) = uVar5;
    *(undefined8 *)(param_6 + 0x10) = uVar6;
    *(undefined8 *)(param_6 + 0x18) = uVar7;
    *(undefined8 *)(param_6 + 0x20) = uVar8;
    *(undefined8 *)(param_6 + 0x28) = uVar9;
    cv::error(-0xd7,(String *)&local_198,"void cvCrossProduct(const CvArr*, const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x100b);
    cv::String::deallocate((String *)&local_198);
  }
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  cv::Mat::cross((_InputArray *)&local_180);
  local_188 = 0;
  local_184 = 0;
  local_198 = CONCAT44(local_198._4_4_,0x2010000);
  local_190 = (Mat *)&local_120;
  cv::Mat::copyTo(aMStack_60,(_OutputArray *)&local_198);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar11 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar11 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar11 = 0;
    do {
      *local_80 = 0;
      iVar11 = iVar11 + 1;
      local_80 = local_80 + 1;
    } while (iVar11 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar11 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar11 = 0;
    do {
      *local_e0 = 0;
      iVar11 = iVar11 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar11 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar1 = (int *)(local_148 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar11 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar11 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar11 = 0;
    do {
      *local_140 = 0;
      iVar11 = iVar11 + 1;
      local_140 = local_140 + 1;
    } while (iVar11 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 0032bf98 (1032 bytes) name=cvRange

uint * cvRange(double param_1,double param_2,uint *param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  uint *puVar11;
  char *pcVar12;
  ulong uVar13;
  int *piVar14;
  long lVar15;
  int iVar16;
  long lVar17;
  uint uVar18;
  uint uVar19;
  uint uVar20;
  ulong uVar21;
  int *piVar22;
  uint uVar23;
  int iVar24;
  ulong uVar25;
  undefined8 uVar26;
  undefined8 uVar27;
  float fVar28;
  double __x;
  undefined8 local_38;
  undefined8 local_30;
  undefined1 auStack_28 [40];
  
  if ((((param_3 == (uint *)0x0) || (uVar20 = *param_3, (uVar20 & 0xffff0000) != 0x42420000)) ||
      (uVar18 = param_3[9], (int)uVar18 < 1)) ||
     ((uVar23 = param_3[8], (int)uVar23 < 1 || (puVar11 = param_3, *(long *)(param_3 + 6) == 0)))) {
    puVar11 = (uint *)cvGetMat(param_3,auStack_28,0,0);
    uVar20 = *puVar11;
    uVar18 = puVar11[9];
    uVar23 = puVar11[8];
  }
  uVar5 = uVar18 * uVar23;
  __x = (param_2 - param_1) / (double)(int)uVar5;
  if ((uVar20 >> 0xe & 1) == 0) {
    iVar10 = (uVar20 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar20 & 7) << 1)) & 3);
    uVar5 = 0;
    if (iVar10 != 0) {
      uVar5 = (int)puVar11[1] / iVar10;
    }
    uVar21 = (ulong)uVar5;
  }
  else {
    uVar23 = 1;
    uVar21 = 1;
    uVar18 = uVar5;
  }
  if ((uVar20 & 0xfff) == 4) {
    piVar22 = *(int **)(puVar11 + 6);
    uVar13 = lrint(param_1);
    uVar25 = uVar13 & 0xffffffff;
    lVar17 = lrint(__x);
    if ((DAT_0032c3b8 <= ABS(param_1 - (double)(int)uVar13)) ||
       (iVar10 = (int)lVar17, DAT_0032c3b8 <= ABS(__x - (double)iVar10))) {
      if (0 < (int)uVar23) {
        uVar20 = 0;
        do {
          lVar17 = 0;
          if (0 < (int)uVar18) {
            do {
              lVar15 = lrint(param_1);
              piVar22[lVar17] = (int)lVar15;
              lVar17 = lVar17 + 1;
              param_1 = param_1 + __x;
            } while ((int)lVar17 < (int)uVar18);
          }
          uVar20 = uVar20 + 1;
          piVar22 = (int *)((long)piVar22 + (-(uVar21 >> 0x1f) & 0xfffffffc00000000 | uVar21 << 2));
        } while (uVar20 != uVar23);
      }
    }
    else if (0 < (int)uVar23) {
      iVar3 = iVar10 * 4;
      uVar20 = 0;
      do {
        iVar24 = (int)uVar25;
        if (0 < (int)uVar18) {
          uVar5 = -((uint)((ulong)piVar22 >> 2) & 3) & 3;
          if (uVar18 < uVar5) {
            uVar5 = uVar18;
          }
          if (uVar18 < 8) {
            uVar5 = uVar18;
          }
          if (uVar5 == 0) {
            uVar13 = 0;
            iVar16 = iVar24;
LAB_0032c1e8:
            uVar1 = ((uVar18 - uVar5) - 4 >> 2) + 1;
            iVar4 = uVar1 * 4;
            if (2 < (uVar18 - 1) - uVar5) {
              iVar2 = iVar10 + iVar16 + iVar10;
              uVar19 = 0;
              uVar27 = CONCAT44(iVar10 + iVar2,iVar2);
              uVar26 = CONCAT44(iVar16 + iVar10,iVar16);
              piVar14 = piVar22 + uVar5;
              do {
                *(undefined8 *)(piVar14 + 2) = uVar27;
                *(undefined8 *)piVar14 = uVar26;
                uVar19 = uVar19 + 1;
                uVar26 = CONCAT44((int)((ulong)uVar26 >> 0x20) + iVar3,(int)uVar26 + iVar3);
                uVar27 = CONCAT44((int)((ulong)uVar27 >> 0x20) + iVar3,(int)uVar27 + iVar3);
                piVar14 = piVar14 + 4;
              } while (uVar19 < uVar1);
              uVar13 = (ulong)(uint)((int)uVar13 + iVar4);
              iVar16 = iVar16 + iVar10 * iVar4;
              if (iVar4 == uVar18 - uVar5) goto LAB_0032c28c;
            }
            uVar25 = -(uVar13 >> 0x1f) & 0xfffffffc00000000 | uVar13 << 2;
            *(int *)((long)piVar22 + uVar25) = iVar16;
            if ((int)uVar13 + 1 < (int)uVar18) {
              *(int *)((long)piVar22 + uVar25 + 4) = iVar10 + iVar16;
              if ((int)uVar13 + 2 < (int)uVar18) {
                *(int *)((long)piVar22 + uVar25 + 8) = iVar10 + iVar10 + iVar16;
              }
            }
          }
          else {
            *piVar22 = iVar24;
            iVar16 = iVar24 + iVar10;
            if (uVar5 == 1) {
LAB_0032c380:
              uVar13 = (ulong)uVar5;
            }
            else {
              piVar22[1] = iVar16;
              iVar16 = iVar16 + iVar10;
              if (uVar5 == 2) goto LAB_0032c380;
              piVar22[2] = iVar16;
              iVar16 = iVar16 + iVar10;
              if (uVar5 == 3) goto LAB_0032c380;
              piVar22[3] = iVar16;
              iVar16 = iVar16 + iVar10;
              if (uVar5 == 4) goto LAB_0032c380;
              piVar22[4] = iVar16;
              iVar16 = iVar16 + iVar10;
              if (uVar5 == 5) goto LAB_0032c380;
              piVar22[5] = iVar16;
              iVar16 = iVar16 + iVar10;
              if (uVar5 == 7) {
                piVar22[6] = iVar16;
                uVar13 = 7;
                iVar16 = iVar16 + iVar10;
              }
              else {
                uVar13 = 6;
              }
            }
            if (uVar5 != uVar18) goto LAB_0032c1e8;
          }
LAB_0032c28c:
          uVar25 = (ulong)(iVar24 + iVar10 + (uVar18 - 1) * iVar10);
        }
        uVar20 = uVar20 + 1;
        piVar22 = (int *)((long)piVar22 + (-(uVar21 >> 0x1f) & 0xfffffffc00000000 | uVar21 << 2));
      } while (uVar20 != uVar23);
    }
  }
  else if ((uVar20 & 0xfff) == 5) {
    lVar17 = *(long *)(puVar11 + 6);
    if (0 < (int)uVar23) {
      uVar20 = 0;
      do {
        lVar15 = 0;
        if (0 < (int)uVar18) {
          do {
            fVar28 = (float)param_1;
            param_1 = param_1 + __x;
            *(float *)(lVar17 + lVar15 * 4) = fVar28;
            lVar15 = lVar15 + 1;
          } while ((int)lVar15 < (int)uVar18);
        }
        uVar20 = uVar20 + 1;
        lVar17 = lVar17 + (-(uVar21 >> 0x1f) & 0xfffffffc00000000 | uVar21 << 2);
      } while (uVar20 != uVar23);
      return param_3;
    }
  }
  else {
    local_38 = 0;
    local_30 = 0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_38,0x34);
    uVar9 = s_The_function_only_supports_32sC1_0046b420._40_8_;
    uVar8 = s_The_function_only_supports_32sC1_0046b420._32_8_;
    uVar7 = s_The_function_only_supports_32sC1_0046b420._24_8_;
    uVar6 = s_The_function_only_supports_32sC1_0046b420._16_8_;
    uVar27 = s_The_function_only_supports_32sC1_0046b420._8_8_;
    uVar26 = s_The_function_only_supports_32sC1_0046b420._0_8_;
    *(undefined4 *)(pcVar12 + 0x30) = s_The_function_only_supports_32sC1_0046b420._48_4_;
    *(undefined8 *)pcVar12 = uVar26;
    *(undefined8 *)(pcVar12 + 8) = uVar27;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    *(undefined8 *)(pcVar12 + 0x20) = uVar8;
    *(undefined8 *)(pcVar12 + 0x28) = uVar9;
    cv::error(-0xd2,(String *)&local_38,"CvArr* cvRange(CvArr*, double, double)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x105e);
    cv::String::deallocate((String *)&local_38);
  }
  return param_3;
}


==================================================================

### FUNC 0032c3c0 (2772 bytes) name=cvKMeans2

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8
cvKMeans2(cv *param_1,int param_2,cv *param_3,ulong param_4,undefined8 param_5,AutoBuffer *param_6,
         undefined8 param_7,undefined4 param_8,cv *param_9,undefined8 *param_10)

{
  long lVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  char *pcVar8;
  void *__dest;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  int iVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  ulong uVar15;
  undefined8 uVar16;
  undefined8 local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  undefined8 local_268;
  undefined8 local_260;
  undefined8 local_258;
  undefined8 local_250;
  undefined8 local_248;
  uint local_240;
  int local_23c;
  int local_238;
  int local_234;
  undefined8 local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined4 *local_200;
  undefined8 *local_1f8;
  undefined8 auStack_1f0 [2];
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  long local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  Mat *local_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  long local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  uint local_c0;
  int local_bc;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  uVar15 = (ulong)param_6 & 0xffffffff;
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_198 = &local_190;
  local_1a0 = &uStack_1d8;
  local_1d0 = 0;
  uStack_1c8 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  uStack_1d8 = _UNK_0032cfe8;
  local_1e0 = _DAT_0032cfe0;
  if (param_9 == (cv *)0x0) goto LAB_0032caa4;
  cv::cvarrToMat(param_9,(void *)0x0,true,false,0,param_6);
  if (lStack_148 != 0) {
    piVar2 = (int *)(lStack_148 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar13 = local_138;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_0032c52c:
    if (2 < local_17c) goto LAB_0032cd14;
    uStack_1d8 = local_178;
    local_1e0 = CONCAT44(local_17c,local_180);
    *local_198 = *local_138;
    local_198[1] = puVar13[1];
  }
  else {
    iVar12 = 0;
    puVar10 = local_1a0;
    do {
      *(undefined4 *)puVar10 = 0;
      iVar12 = iVar12 + 1;
      puVar10 = (undefined8 *)((long)puVar10 + 4);
    } while (iVar12 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_0032c52c;
LAB_0032cd14:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
  }
  uStack_1b8 = uStack_158;
  local_1c0 = local_160;
  lStack_1a8 = lStack_148;
  local_1b0 = local_150;
  uStack_1c8 = uStack_168;
  local_1d0 = local_170;
  if (lStack_148 != 0) {
    piVar2 = (int *)(lStack_148 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar12 = 0;
    do {
      *local_140 = 0;
      iVar12 = iVar12 + 1;
      local_140 = local_140 + 1;
    } while (iVar12 < local_17c);
  }
  if (local_138 != auStack_130) {
    cv::fastFree(local_138);
  }
  cv::Mat::reshape((int)(Mat *)&local_1e0,1);
  if (lStack_e8 != 0) {
    piVar2 = (int *)(lStack_e8 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar13 = local_d8;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (local_1e0._4_4_ < 1) {
LAB_0032c6ac:
    if (2 < local_11c) goto LAB_0032cd64;
    uStack_1d8 = local_118;
    local_1e0 = CONCAT44(local_11c,local_120);
    *local_198 = *local_d8;
    local_198[1] = puVar13[1];
  }
  else {
    iVar12 = 0;
    puVar10 = local_1a0;
    do {
      *(undefined4 *)puVar10 = 0;
      iVar12 = iVar12 + 1;
      puVar10 = (undefined8 *)((long)puVar10 + 4);
    } while (iVar12 < local_1e0._4_4_);
    if (local_1e0._4_4_ < 3) goto LAB_0032c6ac;
LAB_0032cd64:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
  }
  uStack_1b8 = uStack_f8;
  local_1c0 = local_100;
  lStack_1a8 = lStack_e8;
  local_1b0 = local_f0;
  uStack_1c8 = uStack_108;
  local_1d0 = local_110;
  if (lStack_e8 != 0) {
    piVar2 = (int *)(lStack_e8 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar12 = 0;
    do {
      *local_e0 = 0;
      iVar12 = iVar12 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar12 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  cv::Mat::reshape((int)(Mat *)&local_240,1);
  if (lStack_88 != 0) {
    piVar2 = (int *)(lStack_88 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_208 != 0) {
    piVar2 = (int *)(lStack_208 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (local_23c < 1) {
LAB_0032c82c:
    local_240 = local_c0;
    if (2 < local_bc) goto LAB_0032cd54;
    local_238 = (int)local_b8;
    local_234 = local_b8._4_4_;
    local_23c = local_bc;
    *local_1f8 = *local_78;
    local_1f8[1] = local_78[1];
  }
  else {
    iVar12 = 0;
    puVar14 = local_200;
    do {
      *puVar14 = 0;
      iVar12 = iVar12 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar12 < local_23c);
    if (local_23c < 3) goto LAB_0032c82c;
LAB_0032cd54:
    local_240 = local_c0;
    cv::Mat::copySize((Mat *)&local_240,(Mat *)&local_c0);
  }
  uStack_218 = uStack_98;
  local_220 = local_a0;
  lStack_208 = lStack_88;
  local_210 = local_90;
  uStack_228 = uStack_a8;
  local_230 = local_b0;
  if (lStack_88 != 0) {
    piVar2 = (int *)(lStack_88 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar12 = 0;
    do {
      *local_80 = 0;
      iVar12 = iVar12 + 1;
      local_80 = local_80 + 1;
    } while (iVar12 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  if (local_1d0 == 0) {
LAB_0032cd74:
    local_290 = 0;
    local_288 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_290,0x10);
    uVar16 = s__centers_empty___0046b458._8_8_;
    *(undefined8 *)pcVar8 = s__centers_empty___0046b458._0_8_;
    *(undefined8 *)(pcVar8 + 8) = uVar16;
    cv::error(-0xd7,(String *)&local_290,
              "int cvKMeans2(const CvArr*, int, CvArr*, CvTermCriteria, int, CvRNG*, int, CvArr*, double*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1089);
    cv::String::deallocate((String *)&local_290);
  }
  else {
    if (local_1e0._4_4_ < 3) {
      lVar11 = (long)uStack_1d8._4_4_ * (long)(int)uStack_1d8;
    }
    else {
      lVar9 = 0;
      lVar11 = 1;
      do {
        lVar1 = lVar9 * 4;
        lVar9 = lVar9 + 1;
        lVar11 = lVar11 * *(int *)((long)local_1a0 + lVar1);
      } while ((int)lVar9 < local_1e0._4_4_);
    }
    if (lVar11 == 0) goto LAB_0032cd74;
  }
  if ((int)uStack_1d8 != param_2) {
    local_280 = 0;
    local_278 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_280,0x1d);
    cVar3 = s_centers_rows____cluster_count_0046b470[0x1c];
    uVar6 = s_centers_rows____cluster_count_0046b470._24_4_;
    uVar5 = s_centers_rows____cluster_count_0046b470._8_8_;
    uVar16 = s_centers_rows____cluster_count_0046b470._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s_centers_rows____cluster_count_0046b470._16_8_;
    *(undefined4 *)(pcVar8 + 0x18) = uVar6;
    pcVar8[0x1c] = cVar3;
    *(undefined8 *)pcVar8 = uVar16;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_280,
              "int cvKMeans2(const CvArr*, int, CvArr*, CvTermCriteria, int, CvRNG*, int, CvArr*, double*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x108a);
    cv::String::deallocate((String *)&local_280);
  }
  if (uStack_1d8._4_4_ != local_234) {
    local_270 = 0;
    local_268 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_270,0x19);
    cVar3 = s_centers_cols____data_cols_0046b490[0x18];
    uVar5 = s_centers_cols____data_cols_0046b490._8_8_;
    uVar16 = s_centers_cols____data_cols_0046b490._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s_centers_cols____data_cols_0046b490._16_8_;
    pcVar8[0x18] = cVar3;
    *(undefined8 *)pcVar8 = uVar16;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_270,
              "int cvKMeans2(const CvArr*, int, CvArr*, CvTermCriteria, int, CvRNG*, int, CvArr*, double*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x108b);
    cv::String::deallocate((String *)&local_270);
  }
  if (((uint)local_1e0 & 7) != (local_240 & 7)) {
    local_260 = 0;
    local_258 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_260,0x1f);
    cVar3 = s_centers_depth______data_depth___0046b4b0[0x1e];
    uVar7 = s_centers_depth______data_depth___0046b4b0._28_2_;
    uVar6 = s_centers_depth______data_depth___0046b4b0._24_4_;
    uVar5 = s_centers_depth______data_depth___0046b4b0._8_8_;
    uVar16 = s_centers_depth______data_depth___0046b4b0._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s_centers_depth______data_depth___0046b4b0._16_8_;
    *(undefined4 *)(pcVar8 + 0x18) = uVar6;
    *(undefined2 *)(pcVar8 + 0x1c) = uVar7;
    pcVar8[0x1e] = cVar3;
    *(undefined8 *)pcVar8 = uVar16;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    cv::error(-0xd7,(String *)&local_260,
              "int cvKMeans2(const CvArr*, int, CvArr*, CvTermCriteria, int, CvRNG*, int, CvArr*, double*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x108c);
    cv::String::deallocate((String *)&local_260);
  }
LAB_0032caa4:
  if (((((local_60 >> 0xe & 1) == 0) || ((local_60 & 0xfff) != 4)) ||
      ((local_54 != 1 && (local_58 != 1)))) || (local_54 + local_58 + -1 != local_238)) {
    local_250 = 0;
    local_248 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_250,0x88);
    memcpy(__dest,&DAT_0046b4d0,0x88);
    cv::error(-0xd7,(String *)&local_250,
              "int cvKMeans2(const CvArr*, int, CvArr*, CvTermCriteria, int, CvRNG*, int, CvArr*, double*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1090);
    cv::String::deallocate((String *)&local_250);
  }
  local_120 = 0x1010000;
  local_110 = 0;
  local_b0 = 0;
  local_c0 = 0x3010000;
  if (param_9 == (cv *)0x0) {
    local_178 = (Mat *)param_9;
    local_180 = 0x2000000;
  }
  else {
    local_180 = 0x2010000;
    local_178 = (Mat *)&local_1e0;
  }
  local_170 = 0;
  local_118 = (Mat *)&local_240;
  local_b8 = (Mat *)&local_60;
  uVar16 = cv::kmeans((cv *)&local_120,param_2,&local_c0,
                      param_4 & 0xffffffff | ((long)param_4 >> 0x20) << 0x20,param_5,uVar15,param_8,
                      &local_180);
  if (param_10 != (undefined8 *)0x0) {
    *param_10 = uVar16;
  }
  if (lStack_1a8 != 0) {
    piVar2 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar12 = 0;
    puVar13 = local_1a0;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar12 = iVar12 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar12 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    cv::fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (lStack_208 != 0) {
    piVar2 = (int *)(lStack_208 + 0x14);
    do {
      iVar12 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      cv::Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_23c) {
    iVar12 = 0;
    do {
      *local_200 = 0;
      iVar12 = iVar12 + 1;
      local_200 = local_200 + 1;
    } while (iVar12 < local_23c);
  }
  if (local_1f8 != auStack_1f0) {
    cv::fastFree(local_1f8);
  }
  return 1;
}


==================================================================

### FUNC 0032cff0 (216 bytes) name=reshape

/* cv::Mat::reshape(int, int, int const*) const */

void cv::Mat::reshape(int param_1,int param_2,int *param_3)

{
  long in_x3;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(int *)((ulong)(uint)param_1 + 4) == (int)param_3) {
    if (in_x3 == 0) {
      reshape(param_1,param_2);
      return;
    }
    if (*(int *)((ulong)(uint)param_1 + 4) == 2) {
      reshape(param_1,param_2);
      return;
    }
  }
  local_10 = 0;
  local_8 = 0;
  String::allocate((String *)&local_10,0);
  error(-0xd5,(String *)&local_10,"cv::Mat cv::Mat::reshape(int, int, const int*) const",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10a8);
  String::deallocate((String *)&local_10);
  in_x8[1] = 0;
  in_x8[2] = 0;
  *in_x8 = 0x42ff0000;
  in_x8[3] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  *(undefined8 *)(in_x8 + 0xe) = 0;
  *(undefined4 **)(in_x8 + 0x10) = in_x8 + 2;
  *(undefined4 **)(in_x8 + 0x12) = in_x8 + 0x14;
  *(undefined8 *)(in_x8 + 0x16) = 0;
  *(undefined8 *)(in_x8 + 0x14) = 0;
  return;
}


==================================================================

### FUNC 0032d0dc (36 bytes) name=NAryMatIterator

/* cv::NAryMatIterator::NAryMatIterator() */

void __thiscall cv::NAryMatIterator::NAryMatIterator(NAryMatIterator *this)

{
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  return;
}


==================================================================

### FUNC 0032d100 (2692 bytes) name=init

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::NAryMatIterator::init(cv::Mat const**, cv::Mat*, unsigned char**, int) */

void __thiscall
cv::NAryMatIterator::init
          (NAryMatIterator *this,Mat **param_1,Mat *param_2,uchar **param_3,int param_4)

{
  Mat *pMVar1;
  int *piVar2;
  int iVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined4 uVar8;
  undefined1 uVar9;
  undefined2 uVar10;
  int iVar11;
  undefined8 *puVar12;
  int *piVar13;
  char *pcVar14;
  long lVar15;
  ulong *puVar16;
  long *plVar17;
  int *piVar18;
  ulong uVar19;
  ulong uVar20;
  undefined4 *puVar21;
  uint uVar22;
  uint uVar23;
  uint uVar24;
  int iVar25;
  long lVar26;
  uint uVar27;
  uint uVar28;
  long lVar29;
  uint *puVar30;
  long lVar31;
  undefined8 local_60;
  undefined8 uStack_58;
  long local_50;
  long local_48;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long lStack_8;
  
  if ((param_1 == (Mat **)0x0) || ((param_3 == (uchar **)0x0 && (param_2 == (Mat *)0x0)))) {
    local_60 = (Mat *)0x0;
    uStack_58 = (Mat *)0x0;
    puVar12 = (undefined8 *)String::allocate((String *)&local_60,0x1d);
    uVar9 = DAT_0046b57c;
    uVar8 = DAT_0046b578;
    uVar7 = _LAB_0046b568;
    uVar6 = DAT_0046b560;
    puVar12[2] = DAT_0046b570;
    *(undefined4 *)(puVar12 + 3) = uVar8;
    *(undefined1 *)((long)puVar12 + 0x1c) = uVar9;
    *puVar12 = uVar6;
    puVar12[1] = uVar7;
    error(-0xd7,(String *)&local_60,
          "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10c0);
    String::deallocate((String *)&local_60);
  }
  *(Mat ***)this = param_1;
  *(uchar ***)(this + 0x10) = param_3;
  *(Mat **)(this + 8) = param_2;
  *(int *)(this + 0x18) = param_4;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  if (param_4 < 0) {
    if (*param_1 != (Mat *)0x0) {
      iVar11 = 0;
      do {
        param_1 = param_1 + 1;
        local_60 = *param_1;
        iVar11 = iVar11 + 1;
      } while (local_60 != (Mat *)0x0);
      *(int *)(this + 0x18) = iVar11;
      if (1000 < iVar11) {
        uStack_58 = local_60;
        pcVar14 = (char *)String::allocate((String *)&local_60,0xf);
        cVar4 = s_narrays_<__1000_0046b580[0xe];
        uVar10 = s_narrays_<__1000_0046b580._12_2_;
        uVar8 = s_narrays_<__1000_0046b580._8_4_;
        *(undefined8 *)pcVar14 = s_narrays_<__1000_0046b580._0_8_;
        *(undefined4 *)(pcVar14 + 8) = uVar8;
        *(undefined2 *)(pcVar14 + 0xc) = uVar10;
        pcVar14[0xe] = cVar4;
        error(-0xd7,(String *)&local_60,
              "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10cf);
        String::deallocate((String *)&local_60);
        param_4 = *(int *)(this + 0x18);
        goto LAB_0032d1d0;
      }
      *(undefined4 *)(this + 0x30) = 0;
      goto LAB_0032d1dc;
    }
    *(undefined4 *)(this + 0x18) = 0;
  }
  else {
LAB_0032d1d0:
    *(undefined4 *)(this + 0x30) = 0;
    if (0 < param_4) {
LAB_0032d1dc:
      lVar29 = 0;
      uVar27 = 0xffffffff;
      iVar25 = -1;
      uVar24 = 0;
      iVar11 = 0;
      do {
        puVar30 = *(uint **)(*(long *)this + lVar29);
        if (puVar30 == (uint *)0x0) {
          local_60 = (Mat *)puVar30;
          uStack_58 = (Mat *)puVar30;
          pcVar14 = (char *)String::allocate((String *)&local_60,0xe);
          uVar10 = s_arrays_i_____0_0046b590._12_2_;
          uVar8 = s_arrays_i_____0_0046b590._8_4_;
          *(undefined8 *)pcVar14 = s_arrays_i_____0_0046b590._0_8_;
          *(undefined4 *)(pcVar14 + 8) = uVar8;
          *(undefined2 *)(pcVar14 + 0xc) = uVar10;
          error(-0xd7,(String *)&local_60,
                "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10d6);
          String::deallocate((String *)&local_60);
          puVar30 = *(uint **)(*(long *)this + lVar29);
        }
        if (*(long *)(this + 0x10) != 0) {
          *(undefined8 *)(*(long *)(this + 0x10) + lVar29) = *(undefined8 *)(puVar30 + 4);
        }
        if (*(long *)(puVar30 + 4) != 0) {
          if (iVar25 < 0) {
            uVar27 = puVar30[1];
            iVar25 = iVar11;
            if (((int)uVar27 < 1) || (piVar13 = *(int **)(puVar30 + 0x10), 1 < *piVar13)) {
              uVar24 = 0;
            }
            else {
              uVar24 = 0;
              do {
                piVar13 = piVar13 + 1;
                uVar24 = uVar24 + 1;
                if (uVar24 == uVar27) break;
              } while (*piVar13 < 2);
            }
            goto LAB_0032d2b8;
          }
          piVar13 = *(int **)(puVar30 + 0x10);
          iVar3 = piVar13[-1];
          piVar18 = *(int **)(*(long *)(*(long *)this + (long)iVar25 * 8) + 0x40);
          if (iVar3 == piVar18[-1]) {
            if (iVar3 == 2) {
              if ((*piVar13 != *piVar18) || (piVar13[1] != piVar18[1])) goto LAB_0032d25c;
            }
            else if (0 < iVar3) {
              if (*piVar13 == *piVar18) {
                piVar2 = piVar13 + (iVar3 - 1);
                do {
                  piVar18 = piVar18 + 1;
                  if (piVar13 == piVar2) goto LAB_0032d2b8;
                  piVar13 = piVar13 + 1;
                } while (*piVar13 == *piVar18);
              }
              goto LAB_0032d25c;
            }
          }
          else {
LAB_0032d25c:
            local_60 = (Mat *)0x0;
            uStack_58 = (Mat *)0x0;
            pcVar14 = (char *)String::allocate((String *)&local_60,0x1a);
            uVar10 = s_A_size____arrays_i0__>size_0046b5c0._24_2_;
            uVar7 = s_A_size____arrays_i0__>size_0046b5c0._8_8_;
            uVar6 = s_A_size____arrays_i0__>size_0046b5c0._0_8_;
            *(undefined8 *)(pcVar14 + 0x10) = s_A_size____arrays_i0__>size_0046b5c0._16_8_;
            *(undefined2 *)(pcVar14 + 0x18) = uVar10;
            *(undefined8 *)pcVar14 = uVar6;
            *(undefined8 *)(pcVar14 + 8) = uVar7;
            error(-0xd7,(String *)&local_60,
                  "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10ea);
            String::deallocate((String *)&local_60);
          }
LAB_0032d2b8:
          if ((*puVar30 >> 0xe & 1) == 0) {
            uVar23 = uVar27 - 1;
            lVar31 = (long)(int)uVar23 * 8;
            if ((int)puVar30[1] < 1) {
              lVar15 = 0;
            }
            else {
              lVar15 = *(long *)(*(long *)(puVar30 + 0x12) + (long)(int)puVar30[1] * 8 + -8);
            }
            if (*(long *)(*(long *)(puVar30 + 0x12) + lVar31) != lVar15) {
              local_60 = (Mat *)0x0;
              uStack_58 = (Mat *)0x0;
              pcVar14 = (char *)String::allocate((String *)&local_60,0x1b);
              cVar4 = s_A_step_d_1_____A_elemSize___0046b5a0[0x1a];
              uVar10 = s_A_step_d_1_____A_elemSize___0046b5a0._24_2_;
              uVar7 = s_A_step_d_1_____A_elemSize___0046b5a0._8_8_;
              uVar6 = s_A_step_d_1_____A_elemSize___0046b5a0._0_8_;
              *(undefined8 *)(pcVar14 + 0x10) = s_A_step_d_1_____A_elemSize___0046b5a0._16_8_;
              *(undefined2 *)(pcVar14 + 0x18) = uVar10;
              pcVar14[0x1a] = cVar4;
              *(undefined8 *)pcVar14 = uVar6;
              *(undefined8 *)(pcVar14 + 8) = uVar7;
              error(-0xd7,(String *)&local_60,
                    "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x10ee);
              String::deallocate((String *)&local_60);
            }
            if ((int)uVar24 < (int)uVar23) {
              lVar15 = *(long *)(puVar30 + 0x12);
              lVar26 = (long)(int)uVar23 * 4;
              puVar16 = (ulong *)(lVar15 + lVar31 + -8);
              uVar19 = *(ulong *)(lVar15 + lVar31 + -8);
              if (uVar19 <= (ulong)((long)*(int *)(*(long *)(puVar30 + 0x10) + lVar26) *
                                   *(long *)(lVar15 + lVar31))) {
                piVar13 = (int *)(*(long *)(puVar30 + 0x10) + lVar26 + -4);
                uVar28 = uVar27 - 2;
                do {
                  uVar22 = uVar28;
                  uVar23 = uVar24;
                  if (uVar22 == uVar24) break;
                  puVar16 = puVar16 + -1;
                  uVar20 = uVar19 * (long)*piVar13;
                  uVar19 = *puVar16;
                  piVar13 = piVar13 + -1;
                  uVar28 = uVar22 - 1;
                  uVar23 = uVar22;
                } while (*puVar16 <= uVar20);
              }
            }
            if ((int)uVar23 < (int)*(uint *)(this + 0x30)) {
              uVar23 = *(uint *)(this + 0x30);
            }
            *(uint *)(this + 0x30) = uVar23;
          }
        }
        iVar11 = iVar11 + 1;
        lVar29 = lVar29 + 8;
      } while (iVar11 < *(int *)(this + 0x18));
      if (-1 < iVar25) {
        uVar28 = uVar27 - 1;
        uVar19 = -(ulong)(uVar28 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar28 << 2;
        uVar23 = *(uint *)(this + 0x30);
        lVar29 = *(long *)(*(long *)(*(long *)this + (long)iVar25 * 8) + 0x40);
        iVar11 = *(int *)(lVar29 + uVar19);
        *(long *)(this + 0x28) = (long)iVar11;
        if ((int)uVar23 < (int)uVar28) {
          lVar31 = uVar19 - 4;
          piVar13 = (int *)(lVar29 + lVar31);
          lVar31 = (long)iVar11 * (long)*(int *)(lVar29 + lVar31);
          uVar27 = uVar27 - 2;
          if (lVar31 - (int)lVar31 == 0) {
            do {
              uVar28 = uVar27;
              iVar11 = (int)lVar31;
              if (uVar28 == uVar23) {
                *(long *)(this + 0x28) = (long)iVar11;
                uVar28 = uVar23;
                goto joined_r0x0032da70;
              }
              piVar13 = piVar13 + -1;
              lVar31 = (long)iVar11 * (long)*piVar13;
              uVar27 = uVar28 - 1;
            } while (lVar31 - (int)lVar31 == 0);
            *(long *)(this + 0x28) = (long)iVar11;
          }
        }
joined_r0x0032da70:
        if (uVar28 == uVar24) {
          *(undefined4 *)(this + 0x30) = 0;
          *(undefined8 *)(this + 0x20) = 1;
        }
        else {
          lVar31 = 1;
          *(uint *)(this + 0x30) = uVar28;
          *(undefined8 *)(this + 0x20) = 1;
          if (-1 < (int)(uVar28 - 1)) {
            piVar13 = (int *)(lVar29 + (long)(int)(uVar28 - 1) * 4);
            do {
              piVar18 = piVar13 + -1;
              lVar31 = lVar31 * *piVar13;
              piVar13 = piVar18;
            } while (piVar18 != (int *)(lVar29 + -4));
            *(long *)(this + 0x20) = lVar31;
          }
        }
        goto LAB_0032d4a0;
      }
    }
  }
  *(undefined4 *)(this + 0x30) = 0;
LAB_0032d4a0:
  *(undefined8 *)(this + 0x38) = 0;
  if ((*(long *)(this + 8) != 0) && (0 < *(int *)(this + 0x18))) {
    lVar31 = 0;
    lVar29 = 0;
    iVar11 = 0;
    do {
      local_60 = *(Mat **)(*(long *)this + lVar29);
      if (local_60 == (Mat *)0x0) {
        uStack_58 = local_60;
        pcVar14 = (char *)String::allocate((String *)&local_60,0xe);
        uVar10 = s_arrays_i_____0_0046b590._12_2_;
        uVar8 = s_arrays_i_____0_0046b590._8_4_;
        *(undefined8 *)pcVar14 = s_arrays_i_____0_0046b590._0_8_;
        *(undefined4 *)(pcVar14 + 8) = uVar8;
        *(undefined2 *)(pcVar14 + 0xc) = uVar10;
        error(-0xd7,(String *)&local_60,
              "void cv::NAryMatIterator::init(const cv::Mat**, cv::Mat*, uchar**, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1113);
        String::deallocate((String *)&local_60);
        local_60 = *(Mat **)(*(long *)this + lVar29);
      }
      local_50 = *(long *)((long)local_60 + 0x10);
      local_48 = local_50;
      if (local_50 == 0) {
        local_18 = &local_10;
        local_20 = &uStack_58;
        pMVar1 = (Mat *)(*(long *)(this + 8) + lVar31);
        uStack_58 = (Mat *)_UNK_0032dc58;
        local_60 = (Mat *)_DAT_0032dc50;
        lStack_8 = 0;
        local_10 = 0;
        local_30 = local_50;
        if (pMVar1 != (Mat *)&local_60) {
          local_40 = local_50;
          local_38 = local_50;
          local_28 = local_50;
          if (*(long *)(pMVar1 + 0x38) != 0) {
            piVar13 = (int *)(*(long *)(pMVar1 + 0x38) + 0x14);
            do {
              iVar25 = *piVar13;
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
              if (bVar5) {
                *piVar13 = iVar25 + -1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
            if (iVar25 == 1) {
              Mat::deallocate(pMVar1);
            }
          }
          *(undefined8 *)(pMVar1 + 0x38) = 0;
          *(undefined8 *)(pMVar1 + 0x10) = 0;
          *(undefined8 *)(pMVar1 + 0x28) = 0;
          *(undefined8 *)(pMVar1 + 0x20) = 0;
          *(undefined8 *)(pMVar1 + 0x18) = 0;
          if (*(int *)(pMVar1 + 4) < 1) {
            *(undefined4 *)pMVar1 = (undefined4)local_60;
LAB_0032d954:
            if (2 < local_60._4_4_) goto LAB_0032d960;
            *(int *)(pMVar1 + 4) = local_60._4_4_;
            *(undefined4 *)(pMVar1 + 8) = (undefined4)uStack_58;
            plVar17 = *(long **)(pMVar1 + 0x48);
            *(undefined4 *)(pMVar1 + 0xc) = uStack_58._4_4_;
            *plVar17 = *local_18;
            plVar17[1] = local_18[1];
          }
          else {
            iVar25 = 0;
            puVar21 = *(undefined4 **)(pMVar1 + 0x40);
            do {
              *puVar21 = 0;
              iVar25 = iVar25 + 1;
              puVar21 = puVar21 + 1;
            } while (iVar25 < *(int *)(pMVar1 + 4));
            *(undefined4 *)pMVar1 = (undefined4)local_60;
            if (*(int *)(pMVar1 + 4) < 3) goto LAB_0032d954;
LAB_0032d960:
            Mat::copySize(pMVar1,(Mat *)&local_60);
          }
          *(long *)(pMVar1 + 0x10) = local_50;
          *(long *)(pMVar1 + 0x18) = local_48;
          *(long *)(pMVar1 + 0x20) = local_40;
          *(long *)(pMVar1 + 0x28) = local_38;
          *(long *)(pMVar1 + 0x30) = local_30;
          *(long *)(pMVar1 + 0x38) = local_28;
          if (local_28 != 0) {
            piVar13 = (int *)(local_28 + 0x14);
            do {
              iVar25 = *piVar13;
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
              if (bVar5) {
                *piVar13 = iVar25 + -1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
            if (iVar25 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
        }
        if (0 < local_60._4_4_) {
          iVar25 = 0;
          puVar12 = local_20;
          do {
            *(undefined4 *)puVar12 = 0;
            iVar25 = iVar25 + 1;
            puVar12 = (undefined8 *)((long)puVar12 + 4);
          } while (iVar25 < local_60._4_4_);
        }
      }
      else {
        uVar24 = *(uint *)local_60;
        iVar25 = (uVar24 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar24 & 7) << 1)) & 3);
        local_18 = &local_10;
        uStack_58 = (Mat *)CONCAT44((int)*(undefined8 *)(this + 0x28),1);
        local_20 = &uStack_58;
        local_10 = (long)iVar25 * (long)(int)*(undefined8 *)(this + 0x28);
                    /* catch() { ... } // from try @ 0032d59c with catch @ 0032d548
                       catch() { ... } // from try @ 0032d5c4 with catch @ 0032d548
                       catch() { ... } // from try @ 0032d5e0 with catch @ 0032d548 */
        pMVar1 = (Mat *)(*(long *)(this + 8) + lVar31);
        lStack_8 = (long)iVar25;
        local_30 = 0;
        local_28 = 0;
        local_60 = (Mat *)(CONCAT44(2,(uVar24 & 0xfff) + 0x42ff0000) | 0x4000);
        local_40 = local_50 + local_10;
        if (pMVar1 != (Mat *)&local_60) {
          local_38 = local_40;
          if (*(long *)(pMVar1 + 0x38) == 0) {
LAB_0032d5ac:
            *(undefined8 *)(pMVar1 + 0x38) = 0;
            *(undefined8 *)(pMVar1 + 0x10) = 0;
                    /* try { // try from 0032d5bc to 0042d5bf has its CatchHandler @ 0032d5d0 */
            *(undefined8 *)(pMVar1 + 0x28) = 0;
            *(undefined8 *)(pMVar1 + 0x20) = 0;
                    /* try { // try from 0032d5c4 to 0042d5c7 has its CatchHandler @ 0032d548 */
            *(undefined8 *)(pMVar1 + 0x18) = 0;
            if (0 < *(int *)(pMVar1 + 4)) goto LAB_0032d5cc;
LAB_0032d88c:
            *(undefined4 *)pMVar1 = (undefined4)local_60;
LAB_0032d5f8:
            if (2 < local_60._4_4_) goto LAB_0032d854;
            *(int *)(pMVar1 + 4) = local_60._4_4_;
            *(undefined4 *)(pMVar1 + 8) = (undefined4)uStack_58;
            plVar17 = *(long **)(pMVar1 + 0x48);
            *(undefined4 *)(pMVar1 + 0xc) = uStack_58._4_4_;
            *plVar17 = *local_18;
            plVar17[1] = local_18[1];
          }
          else {
            piVar13 = (int *)(*(long *)(pMVar1 + 0x38) + 0x14);
            do {
              iVar25 = *piVar13;
                    /* try { // try from 0032d59c to 0042d59f has its CatchHandler @ 0032d548 */
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
              if (bVar5) {
                *piVar13 = iVar25 + -1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
            if (iVar25 != 1) goto LAB_0032d5ac;
            Mat::deallocate(pMVar1);
            *(undefined8 *)(pMVar1 + 0x38) = 0;
            *(undefined8 *)(pMVar1 + 0x10) = 0;
            *(undefined8 *)(pMVar1 + 0x28) = 0;
            *(undefined8 *)(pMVar1 + 0x20) = 0;
            *(undefined8 *)(pMVar1 + 0x18) = 0;
            if (*(int *)(pMVar1 + 4) < 1) goto LAB_0032d88c;
LAB_0032d5cc:
                    /* catch() { ... } // from try @ 0032d5bc with catch @ 0032d5d0 */
            iVar25 = 0;
            puVar21 = *(undefined4 **)(pMVar1 + 0x40);
            do {
              *puVar21 = 0;
              iVar25 = iVar25 + 1;
                    /* try { // try from 0032d5e0 to 0042d5e3 has its CatchHandler @ 0032d548 */
              puVar21 = puVar21 + 1;
            } while (iVar25 < *(int *)(pMVar1 + 4));
            *(undefined4 *)pMVar1 = (undefined4)local_60;
            if (*(int *)(pMVar1 + 4) < 3) goto LAB_0032d5f8;
LAB_0032d854:
            Mat::copySize(pMVar1,(Mat *)&local_60);
          }
          *(long *)(pMVar1 + 0x10) = local_50;
          *(long *)(pMVar1 + 0x18) = local_48;
          *(long *)(pMVar1 + 0x20) = local_40;
          *(long *)(pMVar1 + 0x28) = local_38;
          *(long *)(pMVar1 + 0x30) = local_30;
          *(long *)(pMVar1 + 0x38) = local_28;
          if (local_28 != 0) {
            piVar13 = (int *)(local_28 + 0x14);
            do {
              iVar25 = *piVar13;
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
              if (bVar5) {
                *piVar13 = iVar25 + -1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
            if (iVar25 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
        }
        if (0 < local_60._4_4_) {
          iVar25 = 0;
          puVar12 = local_20;
          do {
            *(undefined4 *)puVar12 = 0;
            iVar25 = iVar25 + 1;
            puVar12 = (undefined8 *)((long)puVar12 + 4);
          } while (iVar25 < local_60._4_4_);
        }
      }
      local_28 = 0;
      local_38 = 0;
      local_40 = 0;
      local_48 = 0;
      local_50 = 0;
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      iVar11 = iVar11 + 1;
      lVar29 = lVar29 + 8;
      lVar31 = lVar31 + 0x60;
    } while (iVar11 < *(int *)(this + 0x18));
  }
  return;
}


==================================================================

### FUNC 0032dc60 (44 bytes) name=NAryMatIterator

/* cv::NAryMatIterator::NAryMatIterator(cv::Mat const**, cv::Mat*, int) */

void __thiscall
cv::NAryMatIterator::NAryMatIterator(NAryMatIterator *this,Mat **param_1,Mat *param_2,int param_3)

{
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  init(this,param_1,param_2,(uchar **)0x0,param_3);
  return;
}


==================================================================

### FUNC 0032dc8c (52 bytes) name=NAryMatIterator

/* cv::NAryMatIterator::NAryMatIterator(cv::Mat const**, unsigned char**, int) */

void __thiscall
cv::NAryMatIterator::NAryMatIterator
          (NAryMatIterator *this,Mat **param_1,uchar **param_2,int param_3)

{
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  init(this,param_1,(Mat *)0x0,param_2,param_3);
  return;
}


==================================================================

### FUNC 0032dcc0 (432 bytes) name=operator++

/* cv::NAryMatIterator::TEMPNAMEPLACEHOLDERVALUE() */

void __thiscall cv::NAryMatIterator::operator++(NAryMatIterator *this)

{
  ulong uVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  bool bVar7;
  long lVar8;
  int iVar9;
  ulong uVar10;
  long *plVar11;
  long lVar12;
  int *piVar13;
  long lVar14;
  long lVar15;
  
  if (*(ulong *)(this + 0x38) < *(long *)(this + 0x20) - 1U) {
    uVar1 = *(ulong *)(this + 0x38) + 1;
    *(ulong *)(this + 0x38) = uVar1;
    if (*(int *)(this + 0x30) == 1) {
      lVar14 = *(long *)(this + 0x10);
      if (lVar14 != 0) {
        iVar2 = *(int *)(this + 0x18);
        if (iVar2 < 1) {
          return;
        }
        lVar15 = 0;
        while( true ) {
          bVar7 = lVar15 == (ulong)(iVar2 - 1) * 8;
          if (*(long *)(lVar14 + lVar15) != 0) {
            *(ulong *)(lVar14 + lVar15) =
                 *(long *)(*(long *)(*(long *)this + lVar15) + 0x10) +
                 uVar1 * **(long **)(*(long *)(*(long *)this + lVar15) + 0x48);
          }
          lVar15 = lVar15 + 8;
          if (bVar7) break;
          lVar14 = *(long *)(this + 0x10);
        }
      }
      if ((*(long *)(this + 8) != 0) && (iVar2 = *(int *)(this + 0x18), 0 < iVar2)) {
        plVar11 = (long *)(*(long *)(this + 8) + 0x10);
        lVar14 = 0;
        do {
          if (*plVar11 != 0) {
            *plVar11 = *(long *)(*(long *)(*(long *)this + lVar14) + 0x10) +
                       uVar1 * **(long **)(*(long *)(*(long *)this + lVar14) + 0x48);
          }
          lVar14 = lVar14 + 8;
          plVar11 = plVar11 + 0xc;
        } while (lVar14 != ((ulong)(iVar2 - 1) + 1) * 8);
        return;
      }
    }
    else {
      iVar2 = *(int *)(this + 0x18);
      if (0 < iVar2) {
        uVar5 = *(int *)(this + 0x30) - 1;
        lVar15 = 0;
        lVar14 = 0;
        do {
          lVar8 = *(long *)(*(long *)this + lVar14);
          lVar12 = *(long *)(lVar8 + 0x10);
          if (lVar12 != 0) {
            if (((uint)(0 < (int)uVar1) & ~uVar5 >> 0x1f) != 0) {
              uVar10 = uVar1 & 0xffffffff;
              plVar11 = (long *)(*(long *)(lVar8 + 0x48) + (long)(int)uVar5 * 8);
              piVar13 = (int *)(*(long *)(lVar8 + 0x40) + (long)(int)uVar5 * 4);
              uVar6 = uVar5;
              do {
                iVar3 = *piVar13;
                uVar6 = uVar6 - 1;
                uVar4 = 0;
                iVar9 = (int)uVar10;
                if (iVar3 != 0) {
                  uVar4 = iVar9 / iVar3;
                }
                uVar10 = (ulong)uVar4;
                lVar12 = lVar12 + (long)(int)(iVar9 - uVar4 * iVar3) * *plVar11;
              } while ((0 < (int)uVar4) &&
                      (plVar11 = plVar11 + -1, piVar13 = piVar13 + -1, -1 < (int)uVar6));
            }
            if (*(long *)(this + 0x10) != 0) {
              *(long *)(*(long *)(this + 0x10) + lVar14) = lVar12;
            }
            if (*(long *)(this + 8) != 0) {
              *(long *)(*(long *)(this + 8) + lVar15 + 0x10) = lVar12;
            }
          }
          lVar14 = lVar14 + 8;
          lVar15 = lVar15 + 0x60;
        } while (lVar14 != ((ulong)(iVar2 - 1) + 1) * 8);
      }
    }
  }
  return;
}


==================================================================

### FUNC 0032de70 (920 bytes) name=download

/* cv::MatAllocator::download(cv::UMatData*, void*, int, unsigned long const*, unsigned long const*,
   unsigned long const*, unsigned long const*) const */

MatAllocator * __thiscall
cv::MatAllocator::download
          (MatAllocator *this,UMatData *param_1,void *param_2,int param_3,ulong *param_4,
          ulong *param_5,ulong *param_6,ulong *param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  ulong uVar6;
  char *pcVar7;
  int iVar8;
  ulong uVar9;
  long lVar10;
  void *pvVar11;
  Mat *local_1a0;
  Mat *local_198;
  uchar *local_190;
  void *local_188;
  NAryMatIterator aNStack_180 [32];
  ulong local_160;
  size_t local_158;
  Mat aMStack_140 [4];
  int local_13c;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  long local_108;
  undefined4 *local_100;
  MatAllocator *local_f8;
  MatAllocator aMStack_f0 [16];
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_a8;
  undefined4 *local_a0;
  undefined1 *local_98;
  undefined1 auStack_90 [16];
  int local_80 [32];
  
  if (param_1 != (UMatData *)0x0) {
    pvVar11 = *(void **)(param_1 + 0x18);
    if (0 < param_3) {
      if (param_5 == (ulong *)0x0) {
        uVar6 = *param_4;
        lVar10 = 0;
        while( true ) {
          if (0x7fffffff < uVar6) {
            local_e0 = 0;
            local_d8 = 0;
            pcVar7 = (char *)String::allocate((String *)&local_e0,0x18);
            uVar5 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._8_8_;
            uVar4 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._0_8_;
            *(undefined8 *)(pcVar7 + 0x10) = s_sz_i__<__(size_t)INT_MAX_0046b5e0._16_8_;
            *(undefined8 *)pcVar7 = uVar4;
            *(undefined8 *)(pcVar7 + 8) = uVar5;
            error(-0xd7,(String *)&local_e0,
                  "virtual void cv::MatAllocator::download(cv::UMatData*, void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4e);
            String::deallocate((String *)&local_e0);
            uVar6 = param_4[lVar10];
          }
          if (uVar6 == 0) {
            return (MatAllocator *)0x0;
          }
          local_80[lVar10] = (int)uVar6;
          lVar10 = lVar10 + 1;
          if (lVar10 == (ulong)(param_3 - 1) + 1) break;
          uVar6 = param_4[lVar10];
        }
      }
      else {
        lVar10 = 0;
        do {
          uVar6 = param_4[lVar10];
          if (0x7fffffff < uVar6) {
            local_e0 = 0;
            local_d8 = 0;
            pcVar7 = (char *)String::allocate((String *)&local_e0,0x18);
            *(undefined8 *)(pcVar7 + 0x10) = s_sz_i__<__(size_t)INT_MAX_0046b5e0._16_8_;
            uVar4 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._8_8_;
            *(undefined8 *)pcVar7 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._0_8_;
            *(undefined8 *)(pcVar7 + 8) = uVar4;
            error(-0xd7,(String *)&local_e0,
                  "virtual void cv::MatAllocator::download(cv::UMatData*, void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x4e);
            String::deallocate((String *)&local_e0);
            uVar6 = param_4[lVar10];
          }
          if (uVar6 == 0) {
            return (MatAllocator *)0x0;
          }
          if ((int)lVar10 < (int)(param_3 - 1U)) {
            uVar9 = param_6[lVar10];
          }
          else {
            uVar9 = 1;
          }
          pvVar11 = (void *)((long)pvVar11 + uVar9 * param_5[lVar10]);
          local_80[lVar10] = (int)uVar6;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(param_3 - 1U) + 1);
      }
    }
    Mat::Mat(aMStack_140,param_3,local_80,0,pvVar11,param_6);
    Mat::Mat((Mat *)&local_e0,param_3,local_80,0,param_2,param_7);
    local_1a0 = aMStack_140;
    local_198 = (Mat *)&local_e0;
    NAryMatIterator::NAryMatIterator(aNStack_180,&local_1a0,&local_190,2);
    for (uVar6 = 0; uVar6 < local_160; uVar6 = uVar6 + 1) {
      memcpy(local_188,local_190,local_158);
      NAryMatIterator::operator++(aNStack_180);
    }
    if (local_a8 != 0) {
      piVar1 = (int *)(local_a8 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_e0);
      }
    }
    local_a8 = 0;
    local_d0 = 0;
    local_b8 = 0;
    local_c0 = 0;
    local_c8 = 0;
    if (0 < local_e0._4_4_) {
      iVar8 = 0;
      do {
        *local_a0 = 0;
        iVar8 = iVar8 + 1;
        local_a0 = local_a0 + 1;
      } while (iVar8 < local_e0._4_4_);
    }
    if (local_98 != auStack_90) {
      fastFree(local_98);
    }
    if (local_108 != 0) {
      piVar1 = (int *)(local_108 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate(aMStack_140);
      }
    }
    local_108 = 0;
    local_130 = 0;
    local_118 = 0;
    local_120 = 0;
    local_128 = 0;
    if (0 < local_13c) {
      iVar8 = 0;
      do {
        *local_100 = 0;
        iVar8 = iVar8 + 1;
        local_100 = local_100 + 1;
      } while (iVar8 < local_13c);
    }
    this = local_f8;
    if (local_f8 != aMStack_f0) {
      this = (MatAllocator *)fastFree(local_f8);
    }
  }
  return this;
}


==================================================================

### FUNC 0032e268 (920 bytes) name=upload

/* cv::MatAllocator::upload(cv::UMatData*, void const*, int, unsigned long const*, unsigned long
   const*, unsigned long const*, unsigned long const*) const */

MatAllocator * __thiscall
cv::MatAllocator::upload
          (MatAllocator *this,UMatData *param_1,void *param_2,int param_3,ulong *param_4,
          ulong *param_5,ulong *param_6,ulong *param_7)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  ulong uVar6;
  char *pcVar7;
  int iVar8;
  ulong uVar9;
  long lVar10;
  void *pvVar11;
  Mat *local_1a0;
  Mat *local_198;
  uchar *local_190;
  void *local_188;
  NAryMatIterator aNStack_180 [32];
  ulong local_160;
  size_t local_158;
  Mat aMStack_140 [4];
  int local_13c;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  long local_108;
  undefined4 *local_100;
  MatAllocator *local_f8;
  MatAllocator aMStack_f0 [16];
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_a8;
  undefined4 *local_a0;
  undefined1 *local_98;
  undefined1 auStack_90 [16];
  int local_80 [32];
  
  if (param_1 != (UMatData *)0x0) {
    pvVar11 = *(void **)(param_1 + 0x18);
    if (0 < param_3) {
      if (param_5 == (ulong *)0x0) {
        uVar6 = *param_4;
        lVar10 = 0;
        while( true ) {
          if (0x7fffffff < uVar6) {
            local_e0 = 0;
            local_d8 = 0;
            pcVar7 = (char *)String::allocate((String *)&local_e0,0x18);
            uVar5 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._8_8_;
            uVar4 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._0_8_;
            *(undefined8 *)(pcVar7 + 0x10) = s_sz_i__<__(size_t)INT_MAX_0046b5e0._16_8_;
            *(undefined8 *)pcVar7 = uVar4;
            *(undefined8 *)(pcVar7 + 8) = uVar5;
            error(-0xd7,(String *)&local_e0,
                  "virtual void cv::MatAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6d);
            String::deallocate((String *)&local_e0);
            uVar6 = param_4[lVar10];
          }
          if (uVar6 == 0) {
            return (MatAllocator *)0x0;
          }
          local_80[lVar10] = (int)uVar6;
          lVar10 = lVar10 + 1;
          if (lVar10 == (ulong)(param_3 - 1) + 1) break;
          uVar6 = param_4[lVar10];
        }
      }
      else {
        lVar10 = 0;
        do {
          uVar6 = param_4[lVar10];
          if (0x7fffffff < uVar6) {
            local_e0 = 0;
            local_d8 = 0;
            pcVar7 = (char *)String::allocate((String *)&local_e0,0x18);
            *(undefined8 *)(pcVar7 + 0x10) = s_sz_i__<__(size_t)INT_MAX_0046b5e0._16_8_;
            uVar4 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._8_8_;
            *(undefined8 *)pcVar7 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._0_8_;
            *(undefined8 *)(pcVar7 + 8) = uVar4;
            error(-0xd7,(String *)&local_e0,
                  "virtual void cv::MatAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x6d);
            String::deallocate((String *)&local_e0);
            uVar6 = param_4[lVar10];
          }
          if (uVar6 == 0) {
            return (MatAllocator *)0x0;
          }
          if ((int)lVar10 < (int)(param_3 - 1U)) {
            uVar9 = param_6[lVar10];
          }
          else {
            uVar9 = 1;
          }
          pvVar11 = (void *)((long)pvVar11 + uVar9 * param_5[lVar10]);
          local_80[lVar10] = (int)uVar6;
          lVar10 = lVar10 + 1;
        } while (lVar10 != (ulong)(param_3 - 1U) + 1);
      }
    }
    Mat::Mat(aMStack_140,param_3,local_80,0,param_2,param_7);
    Mat::Mat((Mat *)&local_e0,param_3,local_80,0,pvVar11,param_6);
    local_1a0 = aMStack_140;
    local_198 = (Mat *)&local_e0;
    NAryMatIterator::NAryMatIterator(aNStack_180,&local_1a0,&local_190,2);
    for (uVar6 = 0; uVar6 < local_160; uVar6 = uVar6 + 1) {
      memcpy(local_188,local_190,local_158);
      NAryMatIterator::operator++(aNStack_180);
    }
    if (local_a8 != 0) {
      piVar1 = (int *)(local_a8 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_e0);
      }
    }
    local_a8 = 0;
    local_d0 = 0;
    local_b8 = 0;
    local_c0 = 0;
    local_c8 = 0;
    if (0 < local_e0._4_4_) {
      iVar8 = 0;
      do {
        *local_a0 = 0;
        iVar8 = iVar8 + 1;
        local_a0 = local_a0 + 1;
      } while (iVar8 < local_e0._4_4_);
    }
    if (local_98 != auStack_90) {
      fastFree(local_98);
    }
    if (local_108 != 0) {
      piVar1 = (int *)(local_108 + 0x14);
      do {
        iVar8 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar8 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate(aMStack_140);
      }
    }
    local_108 = 0;
    local_130 = 0;
    local_118 = 0;
    local_120 = 0;
    local_128 = 0;
    if (0 < local_13c) {
      iVar8 = 0;
      do {
        *local_100 = 0;
        iVar8 = iVar8 + 1;
        local_100 = local_100 + 1;
      } while (iVar8 < local_13c);
    }
    this = local_f8;
    if (local_f8 != aMStack_f0) {
      this = (MatAllocator *)fastFree(local_f8);
    }
  }
  return this;
}


==================================================================

### FUNC 0032e660 (808 bytes) name=copy

/* cv::MatAllocator::copy(cv::UMatData*, cv::UMatData*, int, unsigned long const*, unsigned long
   const*, unsigned long const*, unsigned long const*, unsigned long const*, bool) const */

UMatData *
cv::MatAllocator::copy
          (UMatData *param_1,UMatData *param_2,int param_3,ulong *param_4,ulong *param_5,
          ulong *param_6,ulong *param_7,ulong *param_8,bool param_9)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  undefined8 uVar5;
  ulong uVar6;
  char *pcVar7;
  long lVar8;
  int iVar9;
  long lVar10;
  void *pvVar11;
  void *pvVar12;
  undefined7 in_stack_00000001;
  Mat *local_1a0;
  Mat *local_198;
  uchar *local_190;
  void *local_188;
  NAryMatIterator aNStack_180 [32];
  ulong local_160;
  size_t local_158;
  Mat aMStack_140 [4];
  int local_13c;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 local_118;
  long local_108;
  undefined4 *local_100;
  UMatData *local_f8;
  UMatData aUStack_f0 [16];
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_a8;
  undefined4 *local_a0;
  undefined1 *local_98;
  undefined1 auStack_90 [16];
  int local_80 [32];
  
  if ((param_2 != (UMatData *)0x0) && ((ulong)(uint)param_3 != 0)) {
    iVar9 = (int)param_4;
    pvVar12 = *(void **)(param_2 + 0x18);
    pvVar11 = *(void **)((ulong)(uint)param_3 + 0x18);
    if (0 < iVar9) {
      uVar4 = iVar9 - 1;
      lVar10 = 0;
      do {
        uVar6 = param_5[lVar10];
        if (0x7fffffff < uVar6) {
          local_e0 = 0;
          local_d8 = 0;
          pcVar7 = (char *)String::allocate((String *)&local_e0,0x18);
          *(undefined8 *)(pcVar7 + 0x10) = s_sz_i__<__(size_t)INT_MAX_0046b5e0._16_8_;
          uVar5 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._8_8_;
          *(undefined8 *)pcVar7 = s_sz_i__<__(size_t)INT_MAX_0046b5e0._0_8_;
          *(undefined8 *)(pcVar7 + 8) = uVar5;
          error(-0xd7,(String *)&local_e0,
                "virtual void cv::MatAllocator::copy(cv::UMatData*, cv::UMatData*, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, bool) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8c);
          String::deallocate((String *)&local_e0);
          uVar6 = param_5[lVar10];
        }
        if (uVar6 == 0) {
          return (UMatData *)0x0;
        }
        if (param_6 != (ulong *)0x0) {
          if ((int)lVar10 < (int)uVar4) {
            pvVar12 = (void *)((long)pvVar12 + param_7[lVar10] * param_6[lVar10]);
          }
          else {
            pvVar12 = (void *)((long)pvVar12 + param_6[lVar10]);
          }
        }
        if (param_8 != (ulong *)0x0) {
          if ((int)lVar10 < (int)uVar4) {
            lVar8 = *(long *)(CONCAT71(in_stack_00000001,param_9) + lVar10 * 8);
          }
          else {
            lVar8 = 1;
          }
          pvVar11 = (void *)((long)pvVar11 + lVar8 * param_8[lVar10]);
        }
        local_80[lVar10] = (int)uVar6;
        lVar10 = lVar10 + 1;
      } while (lVar10 != (ulong)uVar4 + 1);
    }
    Mat::Mat(aMStack_140,iVar9,local_80,0,pvVar12,param_7);
    Mat::Mat((Mat *)&local_e0,iVar9,local_80,0,pvVar11,(ulong *)CONCAT71(in_stack_00000001,param_9))
    ;
    local_1a0 = aMStack_140;
    local_198 = (Mat *)&local_e0;
    NAryMatIterator::NAryMatIterator(aNStack_180,&local_1a0,&local_190,2);
    for (uVar6 = 0; uVar6 < local_160; uVar6 = uVar6 + 1) {
      memcpy(local_188,local_190,local_158);
      NAryMatIterator::operator++(aNStack_180);
    }
    if (local_a8 != 0) {
      piVar1 = (int *)(local_a8 + 0x14);
      do {
        iVar9 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar9 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar9 == 1) {
        Mat::deallocate((Mat *)&local_e0);
      }
    }
    local_a8 = 0;
    local_d0 = 0;
    local_b8 = 0;
    local_c0 = 0;
    local_c8 = 0;
    if (0 < local_e0._4_4_) {
      iVar9 = 0;
      do {
        *local_a0 = 0;
        iVar9 = iVar9 + 1;
        local_a0 = local_a0 + 1;
      } while (iVar9 < local_e0._4_4_);
    }
    if (local_98 != auStack_90) {
      fastFree(local_98);
    }
    if (local_108 != 0) {
      piVar1 = (int *)(local_108 + 0x14);
      do {
        iVar9 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar9 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar9 == 1) {
        Mat::deallocate(aMStack_140);
      }
    }
    local_108 = 0;
    local_130 = 0;
    local_118 = 0;
    local_120 = 0;
    local_128 = 0;
    if (0 < local_13c) {
      iVar9 = 0;
      do {
        *local_100 = 0;
        iVar9 = iVar9 + 1;
        local_100 = local_100 + 1;
      } while (iVar9 < local_13c);
    }
    param_1 = local_f8;
    if (local_f8 != aUStack_f0) {
      param_1 = (UMatData *)fastFree(local_f8);
    }
  }
  return param_1;
}


==================================================================

### FUNC 0032e9e8 (68 bytes) name=operator++

/* cv::NAryMatIterator::TEMPNAMEPLACEHOLDERVALUE(int) */

undefined8 * __thiscall cv::NAryMatIterator::operator++(NAryMatIterator *this,int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 *in_x8;
  
  uVar4 = *(undefined8 *)(this + 8);
  uVar1 = *(undefined8 *)(this + 0x10);
  uVar5 = *(undefined8 *)(this + 0x18);
  uVar2 = *(undefined8 *)(this + 0x20);
  uVar6 = *(undefined8 *)(this + 0x28);
  uVar3 = *(undefined8 *)(this + 0x30);
  uVar7 = *(undefined8 *)(this + 0x38);
  *in_x8 = *(undefined8 *)this;
  in_x8[1] = uVar4;
  in_x8[2] = uVar1;
  in_x8[3] = uVar5;
  in_x8[4] = uVar2;
  in_x8[5] = uVar6;
  in_x8[6] = uVar3;
  in_x8[7] = uVar7;
  operator++(this);
  return in_x8;
}


==================================================================

### FUNC 0032ea2c (88 bytes) name=pos

/* cv::MatConstIterator::pos() const */

void cv::MatConstIterator::pos(void)

{
  int iVar1;
  undefined4 uVar2;
  long *in_x0;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  undefined4 *in_x8;
  
  lVar3 = *in_x0;
  if (lVar3 != 0) {
    uVar6 = **(ulong **)(lVar3 + 0x48);
    uVar5 = in_x0[2] - *(long *)(lVar3 + 0x10);
    uVar4 = in_x0[1];
    iVar1 = 0;
    if (uVar6 != 0) {
      iVar1 = (int)(uVar5 / uVar6);
    }
    in_x8[1] = iVar1;
    uVar2 = 0;
    if (uVar4 != 0) {
      uVar2 = (undefined4)((uVar5 - (long)iVar1 * uVar6) / uVar4);
    }
    *in_x8 = uVar2;
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 0032ea84 (224 bytes) name=pos

/* cv::MatConstIterator::pos(int*) const */

void __thiscall cv::MatConstIterator::pos(MatConstIterator *this,int *param_1)

{
  ulong uVar1;
  undefined4 uVar2;
  undefined2 uVar3;
  int iVar4;
  long lVar5;
  char *pcVar6;
  long lVar7;
  ulong uVar8;
  ulong uVar9;
  long lVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar10 = *(long *)this;
  if ((param_1 == (int *)0x0) || (lVar10 == 0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar6 = (char *)String::allocate((String *)&local_10,0xe);
    uVar3 = s_m____0_____idx_0046b600._12_2_;
    uVar2 = s_m____0_____idx_0046b600._8_4_;
    *(undefined8 *)pcVar6 = s_m____0_____idx_0046b600._0_8_;
    *(undefined4 *)(pcVar6 + 8) = uVar2;
    *(undefined2 *)(pcVar6 + 0xc) = uVar3;
    error(-0xd7,(String *)&local_10,"void cv::MatConstIterator::pos(int*) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x116d);
    String::deallocate((String *)&local_10);
    lVar10 = *(long *)this;
  }
  uVar8 = *(long *)(this + 0x10) - *(long *)(lVar10 + 0x10);
  if (0 < *(int *)(lVar10 + 4)) {
    lVar7 = *(long *)(lVar10 + 0x48);
    lVar5 = 0;
    do {
      uVar9 = *(ulong *)(lVar7 + lVar5 * 8);
      iVar4 = (int)lVar5;
      uVar1 = 0;
      if (uVar9 != 0) {
        uVar1 = uVar8 / uVar9;
      }
      param_1[lVar5] = (int)uVar1;
      lVar5 = lVar5 + 1;
      uVar8 = uVar8 - uVar1 * uVar9;
    } while (iVar4 + 1 < *(int *)(lVar10 + 4));
  }
  return;
}


==================================================================

### FUNC 0032eb78 (172 bytes) name=lpos

/* cv::MatConstIterator::lpos() const */

ulong __thiscall cv::MatConstIterator::lpos(MatConstIterator *this)

{
  long lVar1;
  uint uVar2;
  ulong uVar3;
  long lVar4;
  uint *puVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  
  puVar5 = *(uint **)this;
  if (puVar5 == (uint *)0x0) {
    return 0;
  }
  if ((*puVar5 >> 0xe & 1) == 0) {
    uVar2 = puVar5[1];
    uVar6 = *(long *)(this + 0x10) - *(long *)(puVar5 + 4);
    if (uVar2 != 2) {
      uVar3 = 0;
      if (0 < (int)uVar2) {
        lVar4 = 0;
        uVar3 = 0;
        do {
          uVar7 = *(ulong *)(*(long *)(puVar5 + 0x12) + lVar4 * 8);
          lVar1 = lVar4 * 4;
          lVar4 = lVar4 + 1;
          uVar8 = 0;
          if (uVar7 != 0) {
            uVar8 = uVar6 / uVar7;
          }
          uVar6 = uVar6 - uVar8 * uVar7;
          uVar3 = uVar8 + (long)*(int *)(*(long *)(puVar5 + 0x10) + lVar1) * uVar3;
        } while ((int)lVar4 < (int)uVar2);
      }
      return uVar3;
    }
    uVar8 = **(ulong **)(puVar5 + 0x12);
    uVar3 = 0;
    if (uVar8 != 0) {
      uVar3 = uVar6 / uVar8;
    }
    uVar7 = 0;
    if (*(ulong *)(this + 8) != 0) {
      uVar7 = (uVar6 - uVar3 * uVar8) / *(ulong *)(this + 8);
    }
    return uVar7 + (long)(int)puVar5[3] * uVar3;
  }
  uVar6 = 0;
  if (*(ulong *)(this + 8) != 0) {
    uVar6 = (ulong)(*(long *)(this + 0x10) - *(long *)(this + 0x18)) / *(ulong *)(this + 8);
  }
  return uVar6;
}


==================================================================

### FUNC 0032ec24 (560 bytes) name=seek

/* cv::MatConstIterator::seek(long, bool) */

void __thiscall cv::MatConstIterator::seek(MatConstIterator *this,long param_1,bool param_2)

{
  long *plVar1;
  uint uVar2;
  int iVar3;
  ulong uVar4;
  long lVar5;
  int *piVar6;
  ulong uVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  uint *puVar13;
  ulong uVar14;
  long lVar15;
  long lVar16;
  
  puVar13 = *(uint **)this;
  if ((*puVar13 >> 0xe & 1) == 0) {
    uVar2 = puVar13[1];
    if (uVar2 != 2) {
      if (param_2) {
        lVar5 = lpos(this);
        puVar13 = *(uint **)this;
        param_1 = param_1 + lVar5;
      }
      lVar5 = *(long *)(puVar13 + 0x10);
      uVar8 = -(ulong)(uVar2 - 1 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar2 - 1) << 2;
      if (param_1 < 0) {
        param_1 = 0;
      }
      uVar2 = uVar2 - 2;
      iVar11 = *(int *)(lVar5 + uVar8);
      lVar16 = (long)iVar11;
      lVar10 = 0;
      if (lVar16 != 0) {
        lVar10 = param_1 / lVar16;
      }
      lVar15 = *(long *)(puVar13 + 4) +
               (long)((int)param_1 - iVar11 * (int)lVar10) * *(long *)(this + 8);
      *(long *)(this + 0x10) = lVar15;
      lVar12 = *(long *)(puVar13 + 4);
      *(long *)(this + 0x18) = lVar12;
      if (-1 < (int)uVar2) {
        lVar9 = (long)(int)uVar2 << 3;
        piVar6 = (int *)(lVar5 + (uVar8 - 4));
        lVar5 = lVar10;
        do {
          iVar11 = *piVar6;
          plVar1 = (long *)(*(long *)(puVar13 + 0x12) + lVar9);
          lVar9 = lVar9 + -8;
          lVar10 = 0;
          if ((long)iVar11 != 0) {
            lVar10 = lVar5 / (long)iVar11;
          }
          lVar12 = lVar12 + (long)((int)lVar5 - iVar11 * (int)lVar10) * *plVar1;
          *(long *)(this + 0x18) = lVar12;
          piVar6 = piVar6 + -1;
          lVar5 = lVar10;
        } while (lVar9 != ((long)(int)uVar2 - (ulong)uVar2) * 8 + -8);
      }
      lVar5 = lVar12 + lVar16 * *(long *)(this + 8);
      *(long *)(this + 0x20) = lVar5;
      if (0 < lVar10) {
        *(long *)(this + 0x10) = lVar5;
        return;
      }
      *(long *)(this + 0x10) = lVar12 + (lVar15 - *(long *)(puVar13 + 4));
      return;
    }
    if (param_2) {
      lVar5 = *(long *)(puVar13 + 4);
      uVar7 = **(ulong **)(puVar13 + 0x12);
      uVar14 = *(ulong *)(this + 8);
      lVar10 = (long)(int)puVar13[3];
      uVar8 = 0;
      if (uVar7 != 0) {
        uVar8 = (ulong)(*(long *)(this + 0x10) - lVar5) / uVar7;
      }
      uVar4 = 0;
      if (uVar14 != 0) {
        uVar4 = ((*(long *)(this + 0x10) - lVar5) - uVar8 * uVar7) / uVar14;
      }
      param_1 = uVar4 + lVar10 * uVar8 + param_1;
    }
    else {
      lVar10 = (long)(int)puVar13[3];
      lVar5 = *(long *)(puVar13 + 4);
      uVar7 = **(ulong **)(puVar13 + 0x12);
      uVar14 = *(ulong *)(this + 8);
    }
    lVar16 = 0;
    if (lVar10 != 0) {
      lVar16 = param_1 / lVar10;
    }
    uVar2 = puVar13[2];
    iVar11 = (int)lVar16;
    iVar3 = uVar2 - 1;
    if (iVar11 < 0) {
      iVar11 = 0;
    }
    if (iVar3 < iVar11) {
      iVar11 = iVar3;
    }
    lVar5 = lVar5 + (long)iVar11 * uVar7;
    *(long *)(this + 0x18) = lVar5;
    uVar8 = lVar5 + lVar10 * uVar14;
    *(ulong *)(this + 0x20) = uVar8;
    if (lVar16 < 0) {
      *(long *)(this + 0x10) = lVar5;
      return;
    }
    if (lVar16 < (int)uVar2) {
      uVar8 = lVar5 + (param_1 - lVar16 * lVar10) * uVar14;
    }
  }
  else {
    uVar8 = *(ulong *)(this + 0x18);
    uVar7 = *(ulong *)(this + 0x10);
    if (!param_2) {
      uVar7 = uVar8;
    }
    uVar7 = uVar7 + param_1 * *(long *)(this + 8);
    *(ulong *)(this + 0x10) = uVar7;
    if (uVar8 <= uVar7) {
      if (uVar7 <= *(ulong *)(this + 0x20)) {
        return;
      }
      *(ulong *)(this + 0x10) = *(ulong *)(this + 0x20);
      return;
    }
  }
  *(ulong *)(this + 0x10) = uVar8;
  return;
}


==================================================================

### FUNC 0032ee54 (120 bytes) name=seek

/* cv::MatConstIterator::seek(int const*, bool) */

void __thiscall cv::MatConstIterator::seek(MatConstIterator *this,int *param_1,bool param_2)

{
  long lVar1;
  int *piVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  
  lVar4 = *(long *)this;
  iVar3 = *(int *)(lVar4 + 4);
  if (param_1 == (int *)0x0) {
    seek(this,0,param_2);
    return;
  }
  if (iVar3 != 2) {
    if (0 < iVar3) {
      lVar6 = 0;
      lVar5 = 0;
      do {
        lVar1 = lVar6 * 4;
        piVar2 = param_1 + lVar6;
        lVar6 = lVar6 + 1;
        lVar5 = (long)*piVar2 + *(int *)(*(long *)(lVar4 + 0x40) + lVar1) * lVar5;
      } while ((int)lVar6 < iVar3);
      seek(this,lVar5,param_2);
      return;
    }
    seek(this,0,param_2);
    return;
  }
  seek(this,(long)(param_1[1] + *param_1 * *(int *)(*(long *)(lVar4 + 0x40) + 4)),param_2);
  return;
}


==================================================================

### FUNC 0032eecc (500 bytes) name=clear

/* cv::SparseMat::Hdr::clear() */

void __thiscall cv::SparseMat::Hdr::clear(Hdr *this)

{
  void *__s;
  undefined8 *__dest;
  void *__dest_00;
  undefined8 *__src;
  ulong __n;
  void *pvVar1;
  size_t sVar2;
  
  __src = *(undefined8 **)(this + 0x40);
  *(undefined8 **)(this + 0x48) = __src;
  if ((ulong)(*(long *)(this + 0x50) - (long)__src) < 0x40) {
    __dest = operator_new(0x40);
    *__dest = 0;
    __dest[1] = 0;
    __dest[2] = 0;
    __dest[3] = 0;
    __dest[4] = 0;
    __dest[5] = 0;
    __dest[6] = 0;
    __dest[7] = 0;
    sVar2 = (long)__src - (long)*(void **)(this + 0x40);
    if ((long)sVar2 >> 3 != 0) {
      memmove(__dest,*(void **)(this + 0x40),sVar2);
    }
    pvVar1 = (void *)((long)__dest + sVar2 + 0x40);
    sVar2 = *(long *)(this + 0x48) - (long)__src;
    if ((long)sVar2 >> 3 != 0) {
      memmove(pvVar1,__src,sVar2);
    }
    if (*(void **)(this + 0x40) != (void *)0x0) {
      operator_delete(*(void **)(this + 0x40));
    }
    *(undefined8 **)(this + 0x40) = __dest;
    *(size_t *)(this + 0x48) = (long)pvVar1 + sVar2;
    *(undefined8 **)(this + 0x50) = __dest + 8;
  }
  else {
    *__src = 0;
    __src[1] = 0;
    __src[2] = 0;
    __src[3] = 0;
    __src[4] = 0;
    __src[5] = 0;
    __src[6] = 0;
    __src[7] = 0;
    *(undefined8 **)(this + 0x48) = __src + 8;
  }
  pvVar1 = *(void **)(this + 0x28);
  __n = *(ulong *)(this + 0x10);
  *(void **)(this + 0x30) = pvVar1;
  if (__n == 0) {
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    return;
  }
  if ((ulong)(*(long *)(this + 0x38) - (long)pvVar1) < __n) {
    __s = operator_new(__n);
    memset(__s,0,__n);
    sVar2 = (long)pvVar1 - (long)*(void **)(this + 0x28);
    if (sVar2 != 0) {
      memmove(__s,*(void **)(this + 0x28),sVar2);
    }
    __dest_00 = (void *)((long)__s + sVar2 + __n);
    sVar2 = *(long *)(this + 0x30) - (long)pvVar1;
    if (sVar2 != 0) {
      __dest_00 = memmove(__dest_00,pvVar1,sVar2);
    }
    if (*(void **)(this + 0x28) != (void *)0x0) {
      operator_delete(*(void **)(this + 0x28));
    }
    *(void **)(this + 0x28) = __s;
    *(size_t *)(this + 0x30) = (long)__dest_00 + sVar2;
    *(ulong *)(this + 0x38) = (long)__s + __n;
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    return;
  }
  memset(pvVar1,0,__n);
  *(ulong *)(this + 0x30) = *(long *)(this + 0x30) + __n;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  return;
}


==================================================================

### FUNC 0032f0c0 (572 bytes) name=Hdr

/* cv::SparseMat::Hdr::Hdr(int, int const*, int) */

void __thiscall cv::SparseMat::Hdr::Hdr(Hdr *this,int param_1,int *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  size_t __n;
  uint uVar7;
  int *piVar8;
  long lVar9;
  Hdr *pHVar10;
  undefined8 uVar11;
  
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  uVar7 = (uint)(0x88442211L >> ((param_3 & 7U) << 2)) & 0xf;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined4 *)this = 1;
  uVar7 = -uVar7 & param_1 * 4 + 0xf + uVar7;
  *(uint *)(this + 8) = uVar7;
  *(int *)(this + 4) = param_1;
  *(ulong *)(this + 0x10) =
       (long)(int)((((uint)param_3 >> 3 & 0x1ff) + 1 <<
                   (ulong)((uint)(0xfa50L >> ((param_3 & 7U) << 1)) & 3)) + uVar7) + 7U &
       0xfffffffffffffff8;
  if (param_1 < 1) {
    param_1 = 0;
  }
  else {
    if ((this + 0x58 < (Hdr *)(param_2 + 4) && param_2 < this + 0x68) || ((uint)param_1 < 0xc)) {
      lVar9 = 0;
      do {
        lVar2 = lVar9 + 4;
        *(undefined4 *)(this + lVar9 + 0x58) = *(undefined4 *)((long)param_2 + lVar9);
        lVar9 = lVar2;
      } while (lVar2 != ((ulong)(param_1 - 1) + 1) * 4);
    }
    else {
      uVar7 = -((uint)((ulong)param_2 >> 2) & 3) & 3;
      uVar4 = param_1;
      if (uVar7 < (uint)param_1) {
        uVar4 = uVar7;
      }
      uVar7 = uVar4;
      if ((uVar4 != 0) && (*(int *)(this + 0x58) = *param_2, uVar4 != 1)) {
        *(int *)(this + 0x5c) = param_2[1];
        if (uVar4 == 3) {
          *(int *)(this + 0x60) = param_2[2];
        }
        else {
          uVar7 = 2;
        }
      }
      uVar1 = ((param_1 - uVar4) - 4 >> 2) + 1;
      uVar6 = 0;
      iVar5 = uVar1 * 4;
      piVar8 = param_2 + uVar4;
      pHVar10 = this + (ulong)uVar4 * 4 + 0x58;
      do {
        uVar11 = *(undefined8 *)piVar8;
        uVar6 = uVar6 + 1;
        *(undefined8 *)(pHVar10 + 8) = *(undefined8 *)(piVar8 + 2);
        *(undefined8 *)pHVar10 = uVar11;
        piVar8 = piVar8 + 4;
        pHVar10 = pHVar10 + 0x10;
      } while (uVar6 < uVar1);
      iVar3 = uVar7 + iVar5;
      if (param_1 - uVar4 != iVar5) {
        lVar9 = (long)iVar3;
        *(int *)(this + lVar9 * 4 + 0x58) = param_2[lVar9];
        if (iVar3 + 1 < param_1) {
          *(int *)(this + (long)(iVar3 + 1) * 4 + 0x58) = param_2[lVar9 + 1];
          if (iVar3 + 2 < param_1) {
            *(int *)(this + (long)(iVar3 + 2) * 4 + 0x58) = param_2[lVar9 + 2];
          }
        }
      }
    }
    if (0x1f < param_1) goto LAB_0032f2a0;
  }
  __n = ((ulong)(0x1f - param_1) + 1) * 4;
  if (0x1f < param_1) {
    __n = 4;
  }
  memset(this + (long)param_1 * 4 + 0x58,0,__n);
LAB_0032f2a0:
  clear(this);
  return;
}


==================================================================

### FUNC 0032f324 (16 bytes) name=clear

/* cv::SparseMat::clear() */

void __thiscall cv::SparseMat::clear(SparseMat *this)

{
  if (*(Hdr **)(this + 8) != (Hdr *)0x0) {
    Hdr::clear(*(Hdr **)(this + 8));
    return;
  }
  return;
}


==================================================================

### FUNC 0032f334 (620 bytes) name=create

/* cv::SparseMat::create(int, int const*, int) */

void __thiscall cv::SparseMat::create(SparseMat *this,int param_1,int *param_2,int param_3)

{
  uint uVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  char *pcVar10;
  Hdr *this_00;
  int *piVar11;
  int iVar12;
  int *piVar13;
  int *piVar14;
  void *pvVar15;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((0x1f < param_1 - 1U) || (param_2 == (int *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_10,0x22);
    uVar8 = s__sizes____0_<_d_&&_d_<__CV_MAX_D_0046b610._24_8_;
    uVar7 = s__sizes____0_<_d_&&_d_<__CV_MAX_D_0046b610._16_8_;
    uVar6 = s__sizes____0_<_d_&&_d_<__CV_MAX_D_0046b610._8_8_;
    uVar5 = s__sizes____0_<_d_&&_d_<__CV_MAX_D_0046b610._0_8_;
    *(undefined2 *)(pcVar10 + 0x20) = s__sizes____0_<_d_&&_d_<__CV_MAX_D_0046b610._32_2_;
    *(undefined8 *)pcVar10 = uVar5;
    *(undefined8 *)(pcVar10 + 8) = uVar6;
    *(undefined8 *)(pcVar10 + 0x10) = uVar7;
    *(undefined8 *)(pcVar10 + 0x18) = uVar8;
    error(-0xd7,(String *)&local_10,"void cv::SparseMat::create(int, const int*, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x12a7);
    String::deallocate((String *)&local_10);
    if (param_1 < 1) goto LAB_0032f410;
  }
  piVar11 = param_2;
  do {
    while (*piVar11 < 1) {
      local_10 = 0;
      local_8 = 0;
      pcVar10 = (char *)String::allocate((String *)&local_10,0xd);
      cVar3 = s__sizes_i__>_0_0046b638[0xc];
      uVar9 = s__sizes_i__>_0_0046b638._8_4_;
      *(undefined8 *)pcVar10 = s__sizes_i__>_0_0046b638._0_8_;
      *(undefined4 *)(pcVar10 + 8) = uVar9;
      pcVar10[0xc] = cVar3;
      error(-0xd7,(String *)&local_10,"void cv::SparseMat::create(int, const int*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x12a9);
      piVar11 = piVar11 + 1;
      String::deallocate((String *)&local_10);
      if (piVar11 == param_2 + (ulong)(param_1 - 1U) + 1) goto LAB_0032f410;
    }
    piVar11 = piVar11 + 1;
  } while (piVar11 != param_2 + (ulong)(param_1 - 1U) + 1);
LAB_0032f410:
  piVar11 = *(int **)(this + 8);
  uVar1 = param_3 & 0xfff;
  if (piVar11 != (int *)0x0) {
    if ((((*(uint *)this & 0xfff) == uVar1) && (piVar11[1] == param_1)) && (*piVar11 == 1)) {
      if (param_1 < 1) {
        if (param_1 == 0) {
LAB_0032f58c:
          clear(this);
          return;
        }
      }
      else if (*param_2 == piVar11[0x16]) {
        iVar12 = 0;
        piVar13 = piVar11 + 0x17;
        piVar14 = param_2;
        do {
          piVar14 = piVar14 + 1;
          iVar12 = iVar12 + 1;
          if (iVar12 == piVar11[1]) goto LAB_0032f58c;
          iVar2 = *piVar13;
          piVar13 = piVar13 + 1;
        } while (*piVar14 == iVar2);
      }
    }
    do {
      iVar12 = *piVar11;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar4) {
        *piVar11 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((iVar12 == 1) && (pvVar15 = *(void **)(this + 8), pvVar15 != (void *)0x0)) {
      if (*(void **)((long)pvVar15 + 0x40) != (void *)0x0) {
        operator_delete(*(void **)((long)pvVar15 + 0x40));
      }
      if (*(void **)((long)pvVar15 + 0x28) != (void *)0x0) {
        operator_delete(*(void **)((long)pvVar15 + 0x28));
      }
      operator_delete(pvVar15);
    }
  }
  *(undefined8 *)(this + 8) = 0;
  *(uint *)this = uVar1 | 0x42fd0000;
  this_00 = operator_new(0xd8);
  Hdr::Hdr(this_00,param_1,param_2,uVar1);
  *(Hdr **)(this + 8) = this_00;
  return;
}


==================================================================

### FUNC 0032f5e0 (712 bytes) name=resizeHashTab

/* cv::SparseMat::resizeHashTab(unsigned long) */

void __thiscall cv::SparseMat::resizeHashTab(SparseMat *this,ulong param_1)

{
  long *plVar1;
  long lVar2;
  long lVar3;
  void *pvVar4;
  void *__s;
  long lVar5;
  void *pvVar6;
  size_t sVar7;
  long lVar8;
  int iVar9;
  long *plVar10;
  ulong __n;
  long lVar11;
  ulong uVar12;
  long lVar13;
  long lVar14;
  size_t __n_00;
  double dVar15;
  void *local_18;
  void *local_10;
  void *local_8;
  
  if (param_1 < 8) {
    sVar7 = 0x40;
    param_1 = 8;
    lVar11 = *(long *)(*(long *)(this + 8) + 0x48) - *(long *)(*(long *)(this + 8) + 0x40) >> 3;
LAB_0032f75c:
    __s = operator_new(sVar7);
    lVar14 = (long)__s + sVar7;
    local_18 = __s;
    local_8 = (void *)lVar14;
    memset(__s,0,sVar7);
    if (param_1 == 0) {
      sVar7 = 8;
    }
    lVar13 = *(long *)(this + 8);
    local_10 = (void *)lVar14;
    memset(__s,0,sVar7);
  }
  else {
    if ((param_1 - 1 & param_1) == 0) {
      lVar11 = *(long *)(*(long *)(this + 8) + 0x48) - *(long *)(*(long *)(this + 8) + 0x40) >> 3;
LAB_0032f7e4:
      local_8 = (void *)0x0;
      sVar7 = param_1 << 3;
      local_18 = local_8;
      local_10 = local_8;
      if (0x1fffffffffffffff < param_1) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f0e4();
      }
      goto LAB_0032f75c;
    }
    dVar15 = ::log((double)param_1);
    lVar13 = *(long *)(this + 8);
    local_18 = (void *)0x0;
    lVar11 = *(long *)(lVar13 + 0x48) - *(long *)(lVar13 + 0x40) >> 3;
    iVar9 = (int)(dVar15 / DAT_0032f8c0);
    param_1 = 1L << ((ulong)(iVar9 + (uint)((double)iVar9 < dVar15 / DAT_0032f8c0)) & 0x3f);
    if (param_1 != 0) goto LAB_0032f7e4;
    local_8 = (void *)0x0;
    local_10 = (void *)0x0;
    __s = (void *)0x0;
    lVar14 = 0;
  }
  lVar3 = *(long *)(lVar13 + 0x28);
  if (lVar11 != 0) {
    plVar10 = *(long **)(lVar13 + 0x40);
    plVar1 = plVar10 + lVar11;
    do {
      lVar11 = *plVar10;
      while (lVar11 != 0) {
        lVar2 = lVar3 + lVar11;
        lVar8 = (param_1 - 1 & *(ulong *)(lVar3 + lVar11)) * 8;
        lVar5 = *(long *)(lVar2 + 8);
        *(undefined8 *)(lVar2 + 8) = *(undefined8 *)((long)__s + lVar8);
        *(long *)((long)__s + lVar8) = lVar11;
        lVar11 = lVar5;
      }
      plVar10 = plVar10 + 1;
    } while (plVar10 != plVar1);
  }
  if (&local_18 == (void **)(lVar13 + 0x40)) goto LAB_0032f71c;
  pvVar4 = *(void **)(lVar13 + 0x40);
  __n = lVar14 - (long)__s;
  uVar12 = (long)__n >> 3;
  if (uVar12 <= (ulong)(*(long *)(lVar13 + 0x50) - (long)pvVar4 >> 3)) {
    pvVar6 = *(void **)(lVar13 + 0x48);
    sVar7 = (long)pvVar6 - (long)pvVar4;
    if ((ulong)((long)sVar7 >> 3) < uVar12) {
      if ((long)sVar7 >> 3 != 0) {
        memmove(pvVar4,__s,sVar7);
        pvVar4 = *(void **)(lVar13 + 0x40);
        pvVar6 = *(void **)(lVar13 + 0x48);
        sVar7 = (long)pvVar6 - (long)pvVar4;
      }
      __n_00 = lVar14 - (long)((long)__s + sVar7);
      if ((long)__n_00 >> 3 != 0) {
        memmove(pvVar6,(void *)((long)__s + sVar7),__n_00);
        pvVar4 = *(void **)(lVar13 + 0x40);
      }
    }
    else if (uVar12 != 0) {
      memmove(pvVar4,__s,__n);
      *(ulong *)(lVar13 + 0x48) = (long)*(void **)(lVar13 + 0x40) + __n;
      goto LAB_0032f71c;
    }
    *(ulong *)(lVar13 + 0x48) = (long)pvVar4 + __n;
    goto LAB_0032f71c;
  }
  pvVar4 = (void *)0x0;
  if (uVar12 == 0) {
LAB_0032f820:
    pvVar6 = *(void **)(lVar13 + 0x40);
  }
  else {
    if (0x1fffffffffffffff < uVar12) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
    pvVar4 = operator_new(__n);
    if (uVar12 == 0) goto LAB_0032f820;
    memmove(pvVar4,__s,__n);
    pvVar6 = *(void **)(lVar13 + 0x40);
  }
  if (pvVar6 != (void *)0x0) {
    operator_delete(pvVar6);
  }
  *(void **)(lVar13 + 0x40) = pvVar4;
  *(ulong *)(lVar13 + 0x50) = (long)pvVar4 + __n;
  *(ulong *)(lVar13 + 0x48) = (long)pvVar4 + __n;
LAB_0032f71c:
  if (__s == (void *)0x0) {
    return;
  }
  operator_delete(__s);
  return;
}


==================================================================

### FUNC 0032f8c8 (1212 bytes) name=newNode

/* cv::SparseMat::newNode(int const*, unsigned long) */

void * __thiscall cv::SparseMat::newNode(SparseMat *this,int *param_1,ulong param_2)

{
  undefined4 *puVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  size_t sVar7;
  ulong uVar8;
  void *__dest;
  void *__dest_00;
  uint uVar9;
  ulong uVar10;
  long lVar11;
  int *piVar12;
  size_t sVar13;
  long lVar14;
  undefined8 *puVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  ulong uVar19;
  long lVar20;
  ulong uVar21;
  ulong uVar22;
  void *__s;
  undefined8 uVar23;
  ulong uVar24;
  
  lVar17 = *(long *)(this + 8);
  lVar11 = *(long *)(lVar17 + 0x40);
  lVar20 = *(long *)(lVar17 + 0x48) - lVar11 >> 3;
  uVar22 = *(long *)(lVar17 + 0x18) + 1;
  uVar10 = lVar20 * 2;
  *(ulong *)(lVar17 + 0x18) = uVar22;
  if ((ulong)(lVar20 * 3) < uVar22) {
    if (uVar10 < 8) {
      uVar10 = 8;
    }
    resizeHashTab(this,uVar10);
    lVar17 = *(long *)(this + 8);
    lVar11 = *(long *)(lVar17 + 0x40);
    lVar20 = *(long *)(lVar17 + 0x48) - lVar11 >> 3;
  }
  uVar22 = *(ulong *)(lVar17 + 0x20);
  lVar14 = *(long *)(lVar17 + 0x28);
  lVar18 = lVar17;
  if (uVar22 != 0) goto LAB_0032f9d0;
  __s = *(void **)(lVar17 + 0x30);
  uVar21 = *(ulong *)(lVar17 + 0x10);
  uVar22 = (long)__s - lVar14;
  uVar10 = uVar22 * 3 >> 1;
  if (uVar10 < uVar21 << 3) {
    uVar10 = uVar21 << 3;
  }
  uVar19 = 0;
  if (uVar21 != 0) {
    uVar19 = uVar10 / uVar21;
  }
  uVar19 = uVar19 * uVar21;
  if (uVar22 <= uVar19 && uVar19 - uVar22 != 0) {
    uVar10 = uVar19 - uVar22;
    if (uVar10 != 0) {
      if ((ulong)(*(long *)(lVar17 + 0x38) - (long)__s) < uVar10) {
        if (~uVar22 < uVar10) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f39c("vector::_M_fill_insert");
        }
        uVar8 = uVar10;
        if (uVar10 < uVar22) {
          uVar8 = uVar22;
        }
        uVar8 = uVar8 + uVar22;
        if (uVar8 < uVar22) {
          uVar8 = 0xffffffffffffffff;
LAB_0032fd10:
          __dest = operator_new(uVar8);
          uVar24 = uVar8;
        }
        else {
          __dest = (void *)0x0;
          uVar24 = 0;
          if (uVar8 != 0) goto LAB_0032fd10;
        }
        memset((void *)((long)__dest + uVar22),0,uVar10);
        sVar7 = (long)__s - (long)*(void **)(lVar17 + 0x28);
        sVar13 = 0;
        if (sVar7 != 0) {
          memmove(__dest,*(void **)(lVar17 + 0x28),sVar7);
          sVar13 = sVar7;
        }
        sVar7 = *(long *)(lVar17 + 0x30) - (long)__s;
        __dest_00 = (void *)((long)__dest + sVar13 + uVar10);
        sVar13 = 0;
        if (sVar7 != 0) {
          __dest_00 = memmove(__dest_00,__s,sVar7);
          sVar13 = sVar7;
        }
        if (*(void **)(lVar17 + 0x28) != (void *)0x0) {
          operator_delete(*(void **)(lVar17 + 0x28));
        }
        *(void **)(lVar17 + 0x28) = __dest;
        lVar18 = *(long *)(this + 8);
        *(size_t *)(lVar17 + 0x30) = (long)__dest_00 + sVar13;
        *(ulong *)(lVar17 + 0x38) = (long)__dest + uVar24;
        lVar14 = *(long *)(lVar18 + 0x28);
        lVar11 = *(long *)(lVar18 + 0x40);
      }
      else {
        memset(__s,0,uVar10);
        lVar18 = *(long *)(this + 8);
        *(ulong *)(lVar17 + 0x30) = *(long *)(lVar17 + 0x30) + uVar10;
        lVar14 = *(long *)(lVar18 + 0x28);
        lVar11 = *(long *)(lVar18 + 0x40);
      }
    }
  }
  else if (uVar22 > uVar19) {
    *(ulong *)(lVar17 + 0x30) = lVar14 + uVar19;
    lVar18 = *(long *)(this + 8);
    lVar14 = *(long *)(lVar18 + 0x28);
    lVar11 = *(long *)(lVar18 + 0x40);
  }
  if (uVar22 < uVar21) {
    uVar22 = uVar21;
  }
  *(ulong *)(lVar18 + 0x20) = uVar22;
  uVar10 = uVar22;
  while (uVar10 < uVar19 - uVar21) {
    lVar17 = lVar14 + uVar10;
    uVar10 = uVar10 + uVar21;
    *(ulong *)(lVar17 + 8) = uVar10;
  }
  *(undefined8 *)(lVar14 + uVar10 + 8) = 0;
LAB_0032f9d0:
  lVar17 = lVar14 + uVar22;
  uVar5 = *(uint *)(lVar18 + 4);
  lVar20 = (lVar20 - 1U & param_2) * 8;
  *(undefined8 *)(lVar18 + 0x20) = *(undefined8 *)(lVar17 + 8);
  *(ulong *)(lVar14 + uVar22) = param_2;
  *(undefined8 *)(lVar17 + 8) = *(undefined8 *)(lVar11 + lVar20);
  *(ulong *)(lVar11 + lVar20) = uVar22;
  if (0 < (int)uVar5) {
    if (((int *)(lVar14 + uVar22 + 0x10) < param_1 + 4 && param_1 < (int *)(lVar14 + uVar22 + 0x20))
       || (uVar5 < 0xc)) {
      lVar11 = 0;
      do {
        lVar20 = lVar17 + lVar11;
        puVar1 = (undefined4 *)((long)param_1 + lVar11);
        lVar11 = lVar11 + 4;
        *(undefined4 *)(lVar20 + 0x10) = *puVar1;
      } while (lVar11 != ((ulong)(uVar5 - 1) + 1) * 4);
    }
    else {
      uVar16 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
      uVar4 = uVar5;
      if (uVar16 < uVar5) {
        uVar4 = uVar16;
      }
      uVar16 = uVar4;
      if ((uVar4 != 0) && (*(int *)(lVar17 + 0x10) = *param_1, uVar4 != 1)) {
        *(int *)(lVar17 + 0x14) = param_1[1];
        if (uVar4 == 3) {
          *(int *)(lVar17 + 0x18) = param_1[2];
        }
        else {
          uVar16 = 2;
        }
      }
      uVar2 = ((uVar5 - uVar4) - 4 >> 2) + 1;
      iVar6 = uVar2 * 4;
      uVar9 = 0;
      piVar12 = param_1 + uVar4;
      puVar15 = (undefined8 *)(lVar14 + uVar22 + (ulong)uVar4 * 4 + 0x10);
      do {
        uVar23 = *(undefined8 *)piVar12;
        uVar9 = uVar9 + 1;
        puVar15[1] = *(undefined8 *)(piVar12 + 2);
        *puVar15 = uVar23;
        piVar12 = piVar12 + 4;
        puVar15 = puVar15 + 2;
      } while (uVar9 < uVar2);
      iVar3 = iVar6 + uVar16;
      if (iVar6 != uVar5 - uVar4) {
        lVar11 = (long)iVar3;
        *(int *)(lVar17 + (lVar11 + 4) * 4) = param_1[lVar11];
        if (iVar3 + 1 < (int)uVar5) {
          *(int *)(lVar17 + (long)(iVar3 + 1) * 4 + 0x10) = param_1[lVar11 + 1];
          if (iVar3 + 2 < (int)uVar5) {
            *(int *)(lVar17 + (long)(iVar3 + 2) * 4 + 0x10) = param_1[lVar11 + 2];
          }
        }
      }
    }
  }
  lVar11 = (long)*(int *)(lVar18 + 8);
  iVar6 = (*(uint *)this >> 3 & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3);
  if (iVar6 == 4) {
    *(undefined4 *)(lVar17 + lVar11) = 0;
  }
  else if (iVar6 == 8) {
    *(undefined8 *)(lVar17 + lVar11) = 0;
  }
  else {
    memset((void *)(lVar17 + lVar11),0,(long)iVar6);
  }
  return (void *)(lVar17 + lVar11);
}


==================================================================

### FUNC 0032fd84 (1432 bytes) name=SparseMat

/* cv::SparseMat::SparseMat(cv::Mat const&) */

void __thiscall cv::SparseMat::SparseMat(SparseMat *this,Mat *param_1)

{
  ulong uVar1;
  undefined1 *puVar2;
  ulong uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  ulong uVar11;
  int *piVar12;
  long lVar13;
  ulong uVar14;
  undefined8 *puVar15;
  long *plVar16;
  uint *puVar17;
  long lVar19;
  ulong uVar20;
  long lVar21;
  ulong uVar22;
  undefined8 *puVar23;
  ulong uVar24;
  long lVar25;
  int iVar26;
  undefined8 uVar27;
  undefined8 local_80;
  undefined8 uStack_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  undefined8 uStack_28;
  undefined8 local_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  uint *puVar18;
  
  *(undefined4 *)this = 0x42fd0000;
  uVar4 = *(uint *)param_1;
  iVar5 = *(int *)(param_1 + 4);
  piVar12 = *(int **)(param_1 + 0x40);
  *(undefined8 *)(this + 8) = 0;
  create(this,iVar5,piVar12,uVar4 & 0xfff);
  iVar5 = *(int *)(param_1 + 4);
  local_80 = 0;
  uStack_78 = 0;
  local_70 = 0;
  uStack_68 = 0;
  local_60 = 0;
  uStack_58 = 0;
  local_50 = 0;
  uStack_48 = 0;
  local_40 = 0;
  uStack_38 = 0;
  local_30 = 0;
  uStack_28 = 0;
  local_20 = 0;
  uStack_18 = 0;
  local_10 = 0;
  uStack_8 = 0;
  iVar7 = *(int *)(*(long *)(param_1 + 0x40) + (long)(iVar5 + -1) * 4);
  if (iVar5 < 1) {
    uVar24 = 0;
  }
  else {
    uVar24 = *(ulong *)(*(long *)(param_1 + 0x48) + (long)iVar5 * 8 + -8);
  }
  iVar10 = iVar5 + -2;
  lVar25 = *(long *)(param_1 + 0x10);
  do {
    iVar26 = 0;
    lVar21 = lVar25;
    if (0 < iVar7) {
      do {
        uVar14 = 0;
        do {
          uVar22 = uVar14 + 4;
          if (uVar24 < uVar22) {
            if (uVar24 <= uVar14) goto joined_r0x003302d0;
            cVar8 = *(char *)(lVar21 + uVar14);
            goto joined_r0x0032fe90;
          }
          uVar14 = uVar22;
        } while (*(int *)(lVar21 + uVar22 + -4) == 0);
LAB_0032ff54:
        lVar13 = *(long *)(this + 8);
        *(int *)((long)&local_80 + (long)(iVar5 + -1) * 4) = iVar26;
        uVar14 = 0;
        if (lVar13 != 0) {
          iVar6 = *(int *)(lVar13 + 4);
          uVar14 = local_80 & 0xffffffff;
          if (1 < iVar6) {
            puVar17 = (uint *)((long)&local_80 + 4);
            do {
              puVar18 = puVar17 + 1;
              uVar14 = (ulong)*puVar17 + uVar14 * 0x5bd1e995;
              puVar17 = puVar18;
            } while (puVar18 != (uint *)((long)&local_80 + ((ulong)(iVar6 - 2) + 2) * 4));
          }
        }
        lVar13 = newNode(this,(int *)&local_80,uVar14);
        if (uVar24 < 4) {
          uVar14 = 0;
        }
        else {
          lVar19 = 0;
          uVar22 = 4;
          do {
            uVar14 = uVar22;
            *(undefined4 *)(lVar13 + lVar19) = *(undefined4 *)(lVar21 + lVar19);
            lVar19 = lVar19 + 4;
            uVar22 = uVar14 + 4;
          } while (uVar14 + 4 <= uVar24);
        }
        if (uVar14 < uVar24) {
          puVar2 = (undefined1 *)(lVar21 + uVar14);
          uVar22 = uVar24 - uVar14;
          if ((puVar2 < (undefined1 *)(lVar13 + uVar14 + 0x10) &&
               (undefined1 *)(lVar13 + uVar14) < (undefined1 *)(lVar21 + uVar14 + 0x10)) ||
             (uVar22 < 0x16)) {
            do {
              *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
              uVar22 = uVar14 + 1;
              if (uVar22 == uVar24) break;
              *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
              uVar14 = uVar14 + 2;
            } while (uVar14 != uVar24);
          }
          else {
            uVar3 = -(long)puVar2 & 0xfU;
            if (uVar22 < (-(long)puVar2 & 0xfU)) {
              uVar3 = uVar22;
            }
            uVar20 = uVar14;
            if (uVar3 != 0) {
              *(undefined1 *)(lVar13 + uVar14) = *puVar2;
              uVar20 = uVar14 + 1;
              if (uVar3 != 1) {
                *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                uVar20 = uVar14 + 2;
                if (uVar3 != 2) {
                  *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                  uVar20 = uVar14 + 3;
                  if (uVar3 != 3) {
                    *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                    uVar20 = uVar14 + 4;
                    if (uVar3 != 4) {
                      *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                      uVar20 = uVar14 + 5;
                      if (uVar3 != 5) {
                        *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                        uVar20 = uVar14 + 6;
                        if (uVar3 != 6) {
                          *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                          uVar20 = uVar14 + 7;
                          if (uVar3 != 7) {
                            *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                            uVar20 = uVar14 + 8;
                            if (uVar3 != 8) {
                              *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                              uVar20 = uVar14 + 9;
                              if (uVar3 != 9) {
                                *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
                                uVar20 = uVar14 + 10;
                                if (uVar3 != 10) {
                                  *(undefined1 *)(lVar13 + uVar20) =
                                       *(undefined1 *)(lVar21 + uVar20);
                                  uVar20 = uVar14 + 0xb;
                                  if (uVar3 != 0xb) {
                                    *(undefined1 *)(lVar13 + uVar20) =
                                         *(undefined1 *)(lVar21 + uVar20);
                                    uVar20 = uVar14 + 0xc;
                                    if (uVar3 != 0xc) {
                                      *(undefined1 *)(lVar13 + uVar20) =
                                           *(undefined1 *)(lVar21 + uVar20);
                                      uVar20 = uVar14 + 0xd;
                                      if (uVar3 != 0xd) {
                                        *(undefined1 *)(lVar13 + uVar20) =
                                             *(undefined1 *)(lVar21 + uVar20);
                                        uVar20 = uVar14 + 0xe;
                                        if (uVar3 == 0xf) {
                                          *(undefined1 *)(lVar13 + uVar20) =
                                               *(undefined1 *)(lVar21 + uVar20);
                                          uVar20 = uVar14 + 0xf;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar1 = ((uVar22 - uVar3) - 0x10 >> 4) + 1;
            lVar19 = uVar1 * 0x10;
            if (0xe < (uVar22 - 1) - uVar3) {
              uVar11 = 0;
              puVar15 = (undefined8 *)(lVar21 + uVar3 + uVar14);
              puVar23 = (undefined8 *)(lVar13 + uVar3 + uVar14);
              do {
                uVar27 = *puVar15;
                uVar11 = uVar11 + 1;
                puVar23[1] = puVar15[1];
                *puVar23 = uVar27;
                puVar15 = puVar15 + 2;
                puVar23 = puVar23 + 2;
              } while (uVar11 < uVar1);
              uVar20 = uVar20 + lVar19;
              if (lVar19 - (uVar22 - uVar3) == 0) goto joined_r0x003302d0;
            }
            uVar14 = uVar20 + 1;
            *(undefined1 *)(lVar13 + uVar20) = *(undefined1 *)(lVar21 + uVar20);
            if (uVar14 < uVar24) {
              uVar22 = uVar20 + 2;
              *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
              if (uVar22 < uVar24) {
                uVar14 = uVar20 + 3;
                *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
                if (uVar14 < uVar24) {
                  uVar22 = uVar20 + 4;
                  *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
                  if (uVar22 < uVar24) {
                    uVar14 = uVar20 + 5;
                    *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
                    if (uVar14 < uVar24) {
                      uVar22 = uVar20 + 6;
                      *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
                      if (uVar22 < uVar24) {
                        uVar14 = uVar20 + 7;
                        *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
                        if (uVar14 < uVar24) {
                          uVar22 = uVar20 + 8;
                          *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
                          if (uVar22 < uVar24) {
                            uVar14 = uVar20 + 9;
                            *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
                            if (uVar14 < uVar24) {
                              uVar22 = uVar20 + 10;
                              *(undefined1 *)(lVar13 + uVar14) = *(undefined1 *)(lVar21 + uVar14);
                              if (uVar22 < uVar24) {
                                uVar14 = uVar20 + 0xb;
                                *(undefined1 *)(lVar13 + uVar22) = *(undefined1 *)(lVar21 + uVar22);
                                if (uVar14 < uVar24) {
                                  uVar22 = uVar20 + 0xc;
                                  *(undefined1 *)(lVar13 + uVar14) =
                                       *(undefined1 *)(lVar21 + uVar14);
                                  if (uVar22 < uVar24) {
                                    uVar14 = uVar20 + 0xd;
                                    *(undefined1 *)(lVar13 + uVar22) =
                                         *(undefined1 *)(lVar21 + uVar22);
                                    if (uVar14 < uVar24) {
                                      uVar20 = uVar20 + 0xe;
                                      *(undefined1 *)(lVar13 + uVar14) =
                                           *(undefined1 *)(lVar21 + uVar14);
                                      if (uVar20 < uVar24) {
                                        *(undefined1 *)(lVar13 + uVar20) =
                                             *(undefined1 *)(lVar21 + uVar20);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
joined_r0x003302d0:
        lVar21 = lVar21 + uVar24;
        iVar26 = iVar26 + 1;
      } while (iVar26 != iVar7);
      lVar25 = lVar25 + uVar24 + (iVar7 - 1) * uVar24;
    }
    if (iVar10 < 0) {
      return;
    }
    piVar12 = (int *)(*(long *)(param_1 + 0x40) + ((long)iVar10 + 1) * 4);
    plVar16 = (long *)(*(long *)(param_1 + 0x48) + (long)iVar10 * 8);
    iVar26 = iVar10;
    while( true ) {
      iVar9 = *piVar12;
      piVar12 = piVar12 + -1;
      lVar21 = plVar16[1];
      iVar6 = *(int *)((long)&local_80 + (long)iVar26 * 4) + 1;
      lVar13 = *plVar16;
      *(int *)((long)&local_80 + (long)iVar26 * 4) = iVar6;
      lVar25 = lVar25 + (lVar13 - iVar9 * lVar21);
      if (iVar6 < *piVar12) break;
      *(int *)((long)&local_80 + (long)iVar26 * 4) = 0;
      iVar26 = iVar26 + -1;
      plVar16 = plVar16 + -1;
      if (iVar26 == -1) {
        return;
      }
    }
  } while( true );
joined_r0x0032fe90:
  if (cVar8 != '\0') goto LAB_0032ff54;
  uVar14 = uVar14 + 1;
  if (uVar24 <= uVar14) goto joined_r0x003302d0;
  cVar8 = *(char *)(lVar21 + uVar14);
  goto joined_r0x0032fe90;
}


==================================================================

### FUNC 0033031c (340 bytes) name=ptr

/* cv::SparseMat::ptr(int, bool, unsigned long*) */

long __thiscall cv::SparseMat::ptr(SparseMat *this,int param_1,bool param_2,ulong *param_3)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  ulong uVar6;
  long lVar7;
  long lVar8;
  int local_10 [4];
  
  lVar8 = *(long *)(this + 8);
  if ((lVar8 == 0) || (*(int *)(lVar8 + 4) != 1)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar5 = (char *)String::allocate((String *)local_10,0x15);
    cVar4 = s_hdr____hdr_>dims____1_0046b648[0x14];
    uVar3 = s_hdr____hdr_>dims____1_0046b648._8_8_;
    uVar2 = s_hdr____hdr_>dims____1_0046b648._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_hdr____hdr_>dims____1_0046b648._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    error(-0xd7,(String *)local_10,"uchar* cv::SparseMat::ptr(int, bool, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x133a);
    String::deallocate((String *)local_10);
    lVar8 = *(long *)(this + 8);
  }
  if (param_3 == (ulong *)0x0) {
    uVar6 = (ulong)param_1;
  }
  else {
    uVar6 = *param_3;
  }
  lVar7 = *(long *)(*(long *)(lVar8 + 0x40) +
                   (uVar6 & (*(long *)(lVar8 + 0x48) - *(long *)(lVar8 + 0x40) >> 3) - 1U) * 8);
  while( true ) {
    if (lVar7 == 0) {
      if (param_2) {
        local_10[0] = param_1;
        lVar8 = newNode(this,local_10,uVar6);
        return lVar8;
      }
      return 0;
    }
    lVar1 = *(long *)(lVar8 + 0x28) + lVar7;
    if ((uVar6 == *(ulong *)(*(long *)(lVar8 + 0x28) + lVar7)) &&
       (*(int *)(lVar1 + 0x10) == param_1)) break;
    lVar7 = *(long *)(lVar1 + 8);
  }
  return lVar1 + *(int *)(lVar8 + 8);
}


==================================================================

### FUNC 00330484 (368 bytes) name=ptr

/* cv::SparseMat::ptr(int, int, bool, unsigned long*) */

long __thiscall
cv::SparseMat::ptr(SparseMat *this,int param_1,int param_2,bool param_3,ulong *param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  ulong uVar7;
  long lVar8;
  int local_10 [4];
  
  lVar6 = *(long *)(this + 8);
  if ((lVar6 == 0) || (*(int *)(lVar6 + 4) != 2)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar5 = (char *)String::allocate((String *)local_10,0x15);
    cVar4 = s_hdr____hdr_>dims____2_0046b660[0x14];
    uVar3 = s_hdr____hdr_>dims____2_0046b660._8_8_;
    uVar2 = s_hdr____hdr_>dims____2_0046b660._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_hdr____hdr_>dims____2_0046b660._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    error(-0xd7,(String *)local_10,"uchar* cv::SparseMat::ptr(int, int, bool, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1350);
    String::deallocate((String *)local_10);
    lVar6 = *(long *)(this + 8);
  }
  if (param_4 == (ulong *)0x0) {
    uVar7 = (ulong)(uint)param_2 + (ulong)(uint)param_1 * 0x5bd1e995;
  }
  else {
    uVar7 = *param_4;
  }
  lVar8 = *(long *)(*(long *)(lVar6 + 0x40) +
                   (uVar7 & (*(long *)(lVar6 + 0x48) - *(long *)(lVar6 + 0x40) >> 3) - 1U) * 8);
  while( true ) {
    if (lVar8 == 0) {
      if (param_3) {
        local_10[1] = param_2;
        local_10[0] = param_1;
        lVar6 = newNode(this,local_10,uVar7);
        return lVar6;
      }
      return 0;
    }
    lVar1 = *(long *)(lVar6 + 0x28) + lVar8;
    if (((uVar7 == *(ulong *)(*(long *)(lVar6 + 0x28) + lVar8)) &&
        (*(int *)(lVar1 + 0x10) == param_1)) && (*(int *)(lVar1 + 0x14) == param_2)) break;
    lVar8 = *(long *)(lVar1 + 8);
  }
  return lVar1 + *(int *)(lVar6 + 8);
}


==================================================================

### FUNC 00330608 (404 bytes) name=ptr

/* cv::SparseMat::ptr(int, int, int, bool, unsigned long*) */

long __thiscall
cv::SparseMat::ptr(SparseMat *this,int param_1,int param_2,int param_3,bool param_4,ulong *param_5)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  ulong uVar7;
  long lVar8;
  int local_10 [4];
  
  lVar6 = *(long *)(this + 8);
  if ((lVar6 == 0) || (*(int *)(lVar6 + 4) != 3)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar5 = (char *)String::allocate((String *)local_10,0x15);
    cVar4 = s_hdr____hdr_>dims____3_0046b678[0x14];
    uVar3 = s_hdr____hdr_>dims____3_0046b678._8_8_;
    uVar2 = s_hdr____hdr_>dims____3_0046b678._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_hdr____hdr_>dims____3_0046b678._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    error(-0xd7,(String *)local_10,"uchar* cv::SparseMat::ptr(int, int, int, bool, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1366);
    String::deallocate((String *)local_10);
    lVar6 = *(long *)(this + 8);
  }
  if (param_5 == (ulong *)0x0) {
    uVar7 = (ulong)(uint)param_3 +
            ((ulong)(uint)param_2 + (ulong)(uint)param_1 * 0x5bd1e995) * 0x5bd1e995;
  }
  else {
    uVar7 = *param_5;
  }
  lVar8 = *(long *)(*(long *)(lVar6 + 0x40) +
                   (uVar7 & (*(long *)(lVar6 + 0x48) - *(long *)(lVar6 + 0x40) >> 3) - 1U) * 8);
  while( true ) {
    if (lVar8 == 0) {
      if (param_4) {
        local_10[1] = param_2;
        local_10[0] = param_1;
        local_10[2] = param_3;
        lVar6 = newNode(this,local_10,uVar7);
        return lVar6;
      }
      return 0;
    }
    lVar1 = *(long *)(lVar6 + 0x28) + lVar8;
    if ((((uVar7 == *(ulong *)(*(long *)(lVar6 + 0x28) + lVar8)) &&
         (*(int *)(lVar1 + 0x10) == param_1)) && (*(int *)(lVar1 + 0x14) == param_2)) &&
       (*(int *)(lVar1 + 0x18) == param_3)) break;
    lVar8 = *(long *)(lVar1 + 8);
  }
  return lVar1 + *(int *)(lVar6 + 8);
}


==================================================================

### FUNC 003307b0 (436 bytes) name=ptr

/* cv::SparseMat::ptr(int const*, bool, unsigned long*) */

long __thiscall cv::SparseMat::ptr(SparseMat *this,int *param_1,bool param_2,ulong *param_3)

{
  long lVar1;
  int iVar2;
  int iVar3;
  undefined1 uVar4;
  uint *puVar5;
  undefined2 *puVar7;
  ulong uVar8;
  int iVar9;
  long lVar10;
  int *piVar11;
  int *piVar12;
  long lVar13;
  long local_10;
  long local_8;
  uint *puVar6;
  
  lVar13 = *(long *)(this + 8);
  if (lVar13 == 0) {
    local_10 = lVar13;
    local_8 = lVar13;
    puVar7 = (undefined2 *)String::allocate((String *)&local_10,3);
    uVar4 = DAT_0046b692;
    *puVar7 = DAT_0046b690;
    *(undefined1 *)(puVar7 + 1) = uVar4;
    error(-0xd7,(String *)&local_10,"uchar* cv::SparseMat::ptr(const int*, bool, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x137d);
    String::deallocate((String *)&local_10);
    lVar13 = *(long *)(this + 8);
  }
  iVar2 = *(int *)(lVar13 + 4);
  if (param_3 == (ulong *)0x0) {
    uVar8 = (ulong)(uint)*param_1;
    if (1 < iVar2) {
      puVar5 = (uint *)(param_1 + 1);
      do {
        puVar6 = puVar5 + 1;
        uVar8 = (ulong)*puVar5 + uVar8 * 0x5bd1e995;
        puVar5 = puVar6;
      } while (puVar6 != (uint *)(param_1 + (ulong)(iVar2 - 2) + 2));
    }
  }
  else {
    uVar8 = *param_3;
  }
  lVar10 = *(long *)(*(long *)(lVar13 + 0x40) +
                    (uVar8 & (*(long *)(lVar13 + 0x48) - *(long *)(lVar13 + 0x40) >> 3) - 1U) * 8);
  do {
    if (lVar10 == 0) {
      if (!param_2) {
        return 0;
      }
      lVar13 = newNode(this,param_1,uVar8);
      return lVar13;
    }
    lVar1 = *(long *)(lVar13 + 0x28) + lVar10;
    if (uVar8 == *(ulong *)(*(long *)(lVar13 + 0x28) + lVar10)) {
      if (iVar2 < 1) {
        if (iVar2 == 0) {
LAB_00330868:
          return lVar1 + *(int *)(lVar13 + 8);
        }
      }
      else if (*(int *)(lVar1 + 0x10) == *param_1) {
        iVar9 = 0;
        piVar12 = (int *)(lVar1 + 0x14);
        piVar11 = param_1;
        do {
          piVar11 = piVar11 + 1;
          iVar9 = iVar9 + 1;
          if (iVar9 == iVar2) goto LAB_00330868;
          iVar3 = *piVar12;
          piVar12 = piVar12 + 1;
        } while (iVar3 == *piVar11);
      }
    }
    lVar10 = *(long *)(lVar1 + 8);
  } while( true );
}


==================================================================

### FUNC 00330978 (96 bytes) name=removeNode

/* cv::SparseMat::removeNode(unsigned long, unsigned long, unsigned long) */

void __thiscall cv::SparseMat::removeNode(SparseMat *this,ulong param_1,ulong param_2,ulong param_3)

{
  long lVar1;
  long lVar2;
  long lVar3;
  
  lVar2 = *(long *)(this + 8);
  lVar1 = *(long *)(lVar2 + 0x28) + param_2;
  if (param_3 == 0) {
    *(undefined8 *)(*(long *)(lVar2 + 0x40) + param_1 * 8) = *(undefined8 *)(lVar1 + 8);
    lVar3 = *(long *)(lVar2 + 0x18);
    *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(lVar2 + 0x20);
    *(ulong *)(lVar2 + 0x20) = param_2;
    *(long *)(lVar2 + 0x18) = lVar3 + -1;
    return;
  }
  *(undefined8 *)(*(long *)(lVar2 + 0x28) + param_3 + 8) = *(undefined8 *)(lVar1 + 8);
  lVar3 = *(long *)(lVar2 + 0x18);
  *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(lVar2 + 0x20);
  *(ulong *)(lVar2 + 0x20) = param_2;
  *(long *)(lVar2 + 0x18) = lVar3 + -1;
  return;
}


==================================================================

### FUNC 003309d8 (312 bytes) name=erase

/* cv::SparseMat::erase(int, int, unsigned long*) */

void __thiscall cv::SparseMat::erase(SparseMat *this,int param_1,int param_2,ulong *param_3)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar6 = *(long *)(this + 8);
  if ((lVar6 == 0) || (*(int *)(lVar6 + 4) != 2)) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,0x15);
    cVar4 = s_hdr____hdr_>dims____2_0046b660[0x14];
    uVar3 = s_hdr____hdr_>dims____2_0046b660._8_8_;
    uVar2 = s_hdr____hdr_>dims____2_0046b660._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_hdr____hdr_>dims____2_0046b660._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    error(-0xd7,(String *)&local_10,"void cv::SparseMat::erase(int, int, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1395);
    String::deallocate((String *)&local_10);
    lVar6 = *(long *)(this + 8);
  }
  if (param_3 == (ulong *)0x0) {
    uVar11 = (ulong)(uint)param_2 + (ulong)(uint)param_1 * 0x5bd1e995;
  }
  else {
    uVar11 = *param_3;
  }
  uVar7 = uVar11 & (*(long *)(lVar6 + 0x48) - *(long *)(lVar6 + 0x40) >> 3) - 1U;
  uVar8 = *(ulong *)(*(long *)(lVar6 + 0x40) + uVar7 * 8);
  if (uVar8 != 0) {
    uVar10 = 0;
    do {
      uVar9 = uVar8;
      lVar1 = *(long *)(lVar6 + 0x28) + uVar9;
      if (((uVar11 == *(ulong *)(*(long *)(lVar6 + 0x28) + uVar9)) &&
          (*(int *)(lVar1 + 0x10) == param_1)) && (*(int *)(lVar1 + 0x14) == param_2)) {
        removeNode(this,uVar7,uVar9,uVar10);
        return;
      }
      uVar8 = *(ulong *)(lVar1 + 8);
      uVar10 = uVar9;
    } while (*(ulong *)(lVar1 + 8) != 0);
  }
  return;
}


==================================================================

### FUNC 00330b24 (352 bytes) name=erase

/* cv::SparseMat::erase(int, int, int, unsigned long*) */

void __thiscall
cv::SparseMat::erase(SparseMat *this,int param_1,int param_2,int param_3,ulong *param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar6 = *(long *)(this + 8);
  if ((lVar6 == 0) || (*(int *)(lVar6 + 4) != 3)) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,0x15);
    cVar4 = s_hdr____hdr_>dims____3_0046b678[0x14];
    uVar3 = s_hdr____hdr_>dims____3_0046b678._8_8_;
    uVar2 = s_hdr____hdr_>dims____3_0046b678._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s_hdr____hdr_>dims____3_0046b678._16_4_;
    pcVar5[0x14] = cVar4;
    *(undefined8 *)pcVar5 = uVar2;
    *(undefined8 *)(pcVar5 + 8) = uVar3;
    error(-0xd7,(String *)&local_10,"void cv::SparseMat::erase(int, int, int, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x13a8);
    String::deallocate((String *)&local_10);
    lVar6 = *(long *)(this + 8);
  }
  if (param_4 == (ulong *)0x0) {
    uVar11 = (ulong)(uint)param_3 +
             ((ulong)(uint)param_2 + (ulong)(uint)param_1 * 0x5bd1e995) * 0x5bd1e995;
  }
  else {
    uVar11 = *param_4;
  }
  uVar7 = uVar11 & (*(long *)(lVar6 + 0x48) - *(long *)(lVar6 + 0x40) >> 3) - 1U;
  uVar8 = *(ulong *)(*(long *)(lVar6 + 0x40) + uVar7 * 8);
  if (uVar8 != 0) {
    uVar10 = 0;
    do {
      uVar9 = uVar8;
      lVar1 = *(long *)(lVar6 + 0x28) + uVar9;
      if ((((uVar11 == *(ulong *)(*(long *)(lVar6 + 0x28) + uVar9)) &&
           (*(int *)(lVar1 + 0x10) == param_1)) && (*(int *)(lVar1 + 0x14) == param_2)) &&
         (*(int *)(lVar1 + 0x18) == param_3)) {
        removeNode(this,uVar7,uVar9,uVar10);
        return;
      }
      uVar8 = *(ulong *)(lVar1 + 8);
      uVar10 = uVar9;
    } while (*(ulong *)(lVar1 + 8) != 0);
  }
  return;
}


==================================================================

### FUNC 00330c98 (384 bytes) name=erase

/* cv::SparseMat::erase(int const*, unsigned long*) */

void __thiscall cv::SparseMat::erase(SparseMat *this,int *param_1,ulong *param_2)

{
  long lVar1;
  int iVar2;
  int iVar3;
  undefined1 uVar4;
  uint *puVar5;
  undefined2 *puVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  int iVar13;
  int *piVar14;
  int *piVar15;
  ulong uVar16;
  long local_10;
  long local_8;
  uint *puVar6;
  
  lVar11 = *(long *)(this + 8);
  if (lVar11 == 0) {
    local_10 = lVar11;
    local_8 = lVar11;
    puVar7 = (undefined2 *)String::allocate((String *)&local_10,3);
    uVar4 = DAT_0046b692;
    *puVar7 = DAT_0046b690;
    *(undefined1 *)(puVar7 + 1) = uVar4;
    error(-0xd7,(String *)&local_10,"void cv::SparseMat::erase(const int*, size_t*)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x13bc);
    String::deallocate((String *)&local_10);
    lVar11 = *(long *)(this + 8);
  }
  iVar2 = *(int *)(lVar11 + 4);
  if (param_2 == (ulong *)0x0) {
    uVar16 = (ulong)(uint)*param_1;
    if (1 < iVar2) {
      puVar5 = (uint *)(param_1 + 1);
      do {
        puVar6 = puVar5 + 1;
        uVar16 = (ulong)*puVar5 + uVar16 * 0x5bd1e995;
        puVar5 = puVar6;
      } while (puVar6 != (uint *)(param_1 + (ulong)(iVar2 - 2) + 2));
    }
  }
  else {
    uVar16 = *param_2;
  }
  uVar8 = uVar16 & (*(long *)(lVar11 + 0x48) - *(long *)(lVar11 + 0x40) >> 3) - 1U;
  uVar9 = *(ulong *)(*(long *)(lVar11 + 0x40) + uVar8 * 8);
  if (uVar9 != 0) {
    uVar12 = 0;
    do {
      uVar10 = uVar9;
      lVar1 = *(long *)(lVar11 + 0x28) + uVar10;
      if (uVar16 == *(ulong *)(*(long *)(lVar11 + 0x28) + uVar10)) {
        if (iVar2 < 1) {
          if (iVar2 == 0) {
LAB_00330d58:
            removeNode(this,uVar8,uVar10,uVar12);
            return;
          }
        }
        else if (*(int *)(lVar1 + 0x10) == *param_1) {
          iVar13 = 0;
          piVar15 = (int *)(lVar1 + 0x14);
          piVar14 = param_1;
          do {
            piVar14 = piVar14 + 1;
            iVar13 = iVar13 + 1;
            if (iVar13 == iVar2) goto LAB_00330d58;
            iVar3 = *piVar15;
            piVar15 = piVar15 + 1;
          } while (iVar3 == *piVar14);
        }
      }
      uVar9 = *(ulong *)(lVar1 + 8);
      uVar12 = uVar10;
    } while (*(ulong *)(lVar1 + 8) != 0);
  }
  return;
}


==================================================================

### FUNC 00330e2c (116 bytes) name=SparseMatConstIterator

/* cv::SparseMatConstIterator::SparseMatConstIterator(cv::SparseMat const*) */

void __thiscall
cv::SparseMatConstIterator::SparseMatConstIterator(SparseMatConstIterator *this,SparseMat *param_1)

{
  int iVar1;
  long lVar2;
  long lVar3;
  long *plVar4;
  long lVar5;
  long lVar6;
  
  *(undefined8 *)(this + 8) = 0;
  *(SparseMat **)this = param_1;
  *(undefined8 *)(this + 0x10) = 0;
  if ((param_1 != (SparseMat *)0x0) && (lVar6 = *(long *)(param_1 + 8), lVar6 != 0)) {
    plVar4 = *(long **)(lVar6 + 0x40);
    lVar5 = *(long *)(lVar6 + 0x48) - (long)plVar4 >> 3;
    if (lVar5 != 0) {
      lVar3 = *plVar4;
      if (lVar3 == 0) {
        lVar2 = 0;
        do {
          lVar2 = lVar2 + 1;
          if (lVar2 == lVar5) {
            return;
          }
          lVar3 = plVar4[lVar2];
        } while (lVar3 == 0);
      }
      else {
        lVar2 = 0;
      }
      iVar1 = *(int *)(lVar6 + 8);
      lVar6 = *(long *)(lVar6 + 0x28);
      *(long *)(this + 8) = lVar2;
      *(long *)(this + 0x10) = lVar6 + lVar3 + iVar1;
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00330ea0 (152 bytes) name=operator++

/* cv::SparseMatConstIterator::TEMPNAMEPLACEHOLDERVALUE() */

void __thiscall cv::SparseMatConstIterator::operator++(SparseMatConstIterator *this)

{
  long lVar1;
  ulong uVar2;
  ulong uVar3;
  long lVar4;
  long lVar5;
  
  if (((*(long *)(this + 0x10) != 0) && (*(long *)this != 0)) &&
     (lVar4 = *(long *)(*(long *)this + 8), lVar4 != 0)) {
    lVar5 = (long)*(int *)(lVar4 + 8);
    lVar1 = *(long *)((*(long *)(this + 0x10) - lVar5) + 8);
    if (lVar1 != 0) {
      *(long *)(this + 0x10) = *(long *)(lVar4 + 0x28) + lVar5 + lVar1;
      return;
    }
    uVar2 = *(ulong *)(this + 8);
    uVar3 = *(long *)(lVar4 + 0x48) - *(long *)(lVar4 + 0x40) >> 3;
    do {
      uVar2 = uVar2 + 1;
      if (uVar3 <= uVar2) {
        *(ulong *)(this + 8) = uVar3;
        *(undefined8 *)(this + 0x10) = 0;
        return;
      }
      lVar1 = *(long *)(*(long *)(lVar4 + 0x40) + uVar2 * 8);
    } while (lVar1 == 0);
    lVar4 = *(long *)(lVar4 + 0x28);
    *(ulong *)(this + 8) = uVar2;
    *(long *)(this + 0x10) = lVar4 + lVar1 + lVar5;
  }
  return;
}


==================================================================

### FUNC 00330f38 (1300 bytes) name=copyTo

/* cv::SparseMat::copyTo(cv::Mat&) const */

void __thiscall cv::SparseMat::copyTo(SparseMat *this,Mat *param_1)

{
  long lVar1;
  long lVar2;
  ulong uVar3;
  undefined1 *puVar4;
  ulong uVar5;
  int iVar6;
  undefined1 uVar7;
  ulong uVar8;
  undefined2 *puVar9;
  ulong uVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  undefined8 *puVar14;
  ulong uVar15;
  long lVar16;
  ulong uVar17;
  undefined8 *puVar18;
  ulong uVar19;
  int iVar20;
  long lVar21;
  undefined8 uVar22;
  long local_20;
  long local_18;
  long local_10;
  undefined8 local_8;
  
  lVar11 = *(long *)(this + 8);
  if (lVar11 == 0) {
    local_20 = lVar11;
    local_18 = lVar11;
    puVar9 = (undefined2 *)String::allocate((String *)&local_20,3);
    uVar7 = DAT_0046b692;
    *puVar9 = DAT_0046b690;
    *(undefined1 *)(puVar9 + 1) = uVar7;
    error(-0xd7,(String *)&local_20,"void cv::SparseMat::copyTo(cv::Mat&) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x12d2);
    iVar20 = 0;
    String::deallocate((String *)&local_20);
    lVar11 = *(long *)(this + 8);
    if (lVar11 == 0) goto LAB_00330f64;
  }
  iVar20 = *(int *)(lVar11 + 4);
LAB_00330f64:
  Mat::create(param_1,iVar20,(int *)(lVar11 + 0x58),*(uint *)this & 0xfff);
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  Mat::operator=(param_1,(Scalar_ *)&local_20);
  SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)&local_20,this);
  if (*(long *)(this + 8) != 0) {
    lVar11 = *(long *)(*(long *)(this + 8) + 0x18);
    iVar6 = (*(uint *)this >> 3 & 0x1ff) + 1 <<
            (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3);
    uVar19 = (ulong)iVar6;
    if (lVar11 != 0) {
      lVar21 = 0;
      do {
        if ((local_10 == 0) || (local_20 == 0)) {
          lVar16 = 0;
        }
        else {
          lVar16 = 0;
          if (*(long *)(local_20 + 8) != 0) {
            lVar16 = local_10 - *(int *)(*(long *)(local_20 + 8) + 8);
          }
        }
        if (iVar20 < 2) {
          lVar12 = *(long *)(param_1 + 0x10) +
                   (long)*(int *)(lVar16 + 0x10) * **(long **)(param_1 + 0x48);
          if (3 < iVar6) goto LAB_00331044;
LAB_003313cc:
          uVar15 = 0;
LAB_00331074:
          puVar4 = (undefined1 *)(local_10 + uVar15);
          uVar10 = uVar19 - uVar15;
          if ((puVar4 < (undefined1 *)(lVar12 + uVar15 + 0x10) &&
               (undefined1 *)(lVar12 + uVar15) < (undefined1 *)(local_10 + uVar15 + 0x10)) ||
             (uVar10 < 0x16)) {
            do {
              *(undefined1 *)(lVar12 + uVar15) = *(undefined1 *)(local_10 + uVar15);
              uVar10 = uVar15 + 1;
              if (uVar19 == uVar10) break;
              *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
              uVar15 = uVar15 + 2;
            } while (uVar19 != uVar15);
          }
          else {
            uVar5 = uVar10;
            if ((-(long)puVar4 & 0xfU) < uVar10) {
              uVar5 = -(long)puVar4 & 0xfU;
            }
            uVar17 = uVar15;
            if (uVar5 != 0) {
              *(undefined1 *)(lVar12 + uVar15) = *puVar4;
              uVar17 = uVar15 + 1;
              if (uVar5 != 1) {
                *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                uVar17 = uVar15 + 2;
                if (uVar5 != 2) {
                  *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                  uVar17 = uVar15 + 3;
                  if (uVar5 != 3) {
                    *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                    uVar17 = uVar15 + 4;
                    if (uVar5 != 4) {
                      *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                      uVar17 = uVar15 + 5;
                      if (uVar5 != 5) {
                        *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                        uVar17 = uVar15 + 6;
                        if (uVar5 != 6) {
                          *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                          uVar17 = uVar15 + 7;
                          if (uVar5 != 7) {
                            *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                            uVar17 = uVar15 + 8;
                            if (uVar5 != 8) {
                              *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
                              uVar17 = uVar15 + 9;
                              if (uVar5 != 9) {
                                *(undefined1 *)(lVar12 + uVar17) =
                                     *(undefined1 *)(local_10 + uVar17);
                                uVar17 = uVar15 + 10;
                                if (uVar5 != 10) {
                                  *(undefined1 *)(lVar12 + uVar17) =
                                       *(undefined1 *)(local_10 + uVar17);
                                  uVar17 = uVar15 + 0xb;
                                  if (uVar5 != 0xb) {
                                    *(undefined1 *)(lVar12 + uVar17) =
                                         *(undefined1 *)(local_10 + uVar17);
                                    uVar17 = uVar15 + 0xc;
                                    if (uVar5 != 0xc) {
                                      *(undefined1 *)(lVar12 + uVar17) =
                                           *(undefined1 *)(local_10 + uVar17);
                                      uVar17 = uVar15 + 0xd;
                                      if (uVar5 != 0xd) {
                                        *(undefined1 *)(lVar12 + uVar17) =
                                             *(undefined1 *)(local_10 + uVar17);
                                        uVar17 = uVar15 + 0xe;
                                        if (uVar5 == 0xf) {
                                          *(undefined1 *)(lVar12 + uVar17) =
                                               *(undefined1 *)(local_10 + uVar17);
                                          uVar17 = uVar15 + 0xf;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            uVar3 = ((uVar10 - uVar5) - 0x10 >> 4) + 1;
            lVar16 = uVar3 * 0x10;
            if (0xe < (uVar10 - 1) - uVar5) {
              uVar8 = 0;
              puVar14 = (undefined8 *)(lVar12 + uVar5 + uVar15);
              puVar18 = (undefined8 *)(local_10 + uVar5 + uVar15);
              do {
                uVar22 = *puVar18;
                uVar8 = uVar8 + 1;
                puVar14[1] = puVar18[1];
                *puVar14 = uVar22;
                puVar14 = puVar14 + 2;
                puVar18 = puVar18 + 2;
              } while (uVar8 < uVar3);
              uVar17 = uVar17 + lVar16;
              if (lVar16 - (uVar10 - uVar5) == 0) goto LAB_00331358;
            }
            uVar10 = uVar17 + 1;
            *(undefined1 *)(lVar12 + uVar17) = *(undefined1 *)(local_10 + uVar17);
            if (uVar10 < uVar19) {
              uVar15 = uVar17 + 2;
              *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
              if (uVar15 < uVar19) {
                uVar10 = uVar17 + 3;
                *(undefined1 *)(lVar12 + uVar15) = *(undefined1 *)(local_10 + uVar15);
                if (uVar10 < uVar19) {
                  uVar15 = uVar17 + 4;
                  *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
                  if (uVar15 < uVar19) {
                    uVar10 = uVar17 + 5;
                    *(undefined1 *)(lVar12 + uVar15) = *(undefined1 *)(local_10 + uVar15);
                    if (uVar10 < uVar19) {
                      uVar15 = uVar17 + 6;
                      *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
                      if (uVar15 < uVar19) {
                        uVar10 = uVar17 + 7;
                        *(undefined1 *)(lVar12 + uVar15) = *(undefined1 *)(local_10 + uVar15);
                        if (uVar10 < uVar19) {
                          uVar15 = uVar17 + 8;
                          *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
                          if (uVar15 < uVar19) {
                            uVar10 = uVar17 + 9;
                            *(undefined1 *)(lVar12 + uVar15) = *(undefined1 *)(local_10 + uVar15);
                            if (uVar10 < uVar19) {
                              uVar15 = uVar17 + 10;
                              *(undefined1 *)(lVar12 + uVar10) = *(undefined1 *)(local_10 + uVar10);
                              if (uVar15 < uVar19) {
                                uVar10 = uVar17 + 0xb;
                                *(undefined1 *)(lVar12 + uVar15) =
                                     *(undefined1 *)(local_10 + uVar15);
                                if (uVar10 < uVar19) {
                                  uVar15 = uVar17 + 0xc;
                                  *(undefined1 *)(lVar12 + uVar10) =
                                       *(undefined1 *)(local_10 + uVar10);
                                  if (uVar15 < uVar19) {
                                    uVar10 = uVar17 + 0xd;
                                    *(undefined1 *)(lVar12 + uVar15) =
                                         *(undefined1 *)(local_10 + uVar15);
                                    if (uVar10 < uVar19) {
                                      uVar17 = uVar17 + 0xe;
                                      *(undefined1 *)(lVar12 + uVar10) =
                                           *(undefined1 *)(local_10 + uVar10);
                                      if (uVar17 < uVar19) {
                                        *(undefined1 *)(lVar12 + uVar17) =
                                             *(undefined1 *)(local_10 + uVar17);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else {
          lVar12 = *(long *)(param_1 + 0x10);
          if (0 < *(int *)(param_1 + 4)) {
            lVar13 = 0;
            do {
              lVar1 = lVar13 * 4;
              lVar2 = lVar13 * 8;
              lVar13 = lVar13 + 1;
              lVar12 = lVar12 + (long)*(int *)(lVar16 + 0x10 + lVar1) *
                                *(long *)(*(long *)(param_1 + 0x48) + lVar2);
            } while ((int)lVar13 < *(int *)(param_1 + 4));
          }
          if (iVar6 < 4) goto LAB_003313cc;
LAB_00331044:
          lVar16 = 0;
          uVar10 = 4;
          do {
            uVar15 = uVar10;
            *(undefined4 *)(lVar12 + lVar16) = *(undefined4 *)(local_10 + lVar16);
            lVar16 = lVar16 + 4;
            uVar10 = uVar15 + 4;
          } while (uVar15 + 4 <= uVar19);
          if (uVar15 < uVar19) goto LAB_00331074;
        }
LAB_00331358:
        lVar21 = lVar21 + 1;
        SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_20);
      } while (lVar21 != lVar11);
    }
  }
  return;
}


==================================================================

### FUNC 00331460 (852 bytes) name=convertTo

/* cv::SparseMat::convertTo(cv::Mat&, int, double, double) const */

void __thiscall
cv::SparseMat::convertTo(SparseMat *this,Mat *param_1,int param_2,double param_3,double param_4)

{
  long lVar1;
  long lVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  undefined1 uVar6;
  char cVar7;
  undefined2 *puVar8;
  char *pcVar9;
  int iVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  long lVar15;
  code *pcVar16;
  code *local_30;
  code *local_28;
  double local_20;
  long local_18;
  long local_10;
  undefined8 local_8;
  
  lVar13 = *(long *)(this + 8);
  uVar5 = *(uint *)this >> 3 & 0x1ff;
  uVar4 = *(uint *)this & 0xfff;
  if (-1 < param_2) {
    uVar4 = param_2;
  }
  iVar3 = uVar5 + 1;
  uVar4 = (uVar4 & 7) + uVar5 * 8;
  if (lVar13 == 0) {
    local_20 = (double)lVar13;
    local_18 = lVar13;
    puVar8 = (undefined2 *)String::allocate((String *)&local_20,3);
    uVar6 = DAT_0046b692;
    *puVar8 = DAT_0046b690;
    *(undefined1 *)(puVar8 + 1) = uVar6;
    error(-0xd7,(String *)&local_20,
          "void cv::SparseMat::convertTo(cv::Mat&, int, double, double) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1315);
    String::deallocate((String *)&local_20);
    lVar13 = *(long *)(this + 8);
    iVar10 = 0;
    if (lVar13 == 0) goto LAB_003314bc;
  }
  iVar10 = *(int *)(lVar13 + 4);
LAB_003314bc:
  Mat::create(param_1,iVar10,(int *)(lVar13 + 0x58),uVar4);
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  local_20 = param_4;
  Mat::operator=(param_1,(Scalar_ *)&local_20);
  SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)&local_20,this);
  lVar13 = 0;
  if (*(long *)(this + 8) != 0) {
    lVar13 = *(long *)(*(long *)(this + 8) + 0x18);
  }
  if ((param_4 == 0.0) && (param_3 == 1.0)) {
    pcVar16 = (code *)(&PTR_FUN_004f61f0)[((ulong)*(uint *)this & 7) * 8 + ((ulong)uVar4 & 7)];
    if (pcVar16 == (code *)0x0) {
      local_30 = pcVar16;
      local_28 = pcVar16;
      pcVar9 = (char *)String::allocate((String *)&local_30,9);
      cVar7 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar9 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar9[8] = cVar7;
      error(-0xd7,(String *)&local_30,
            "void (* cv::getConvertElem(int, int))(const void*, void*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1220);
      String::deallocate((String *)&local_30);
    }
    lVar15 = 0;
    if (lVar13 != 0) {
      do {
        if ((local_10 == 0) || (local_20 == 0.0)) {
          lVar14 = 0;
        }
        else {
          lVar14 = 0;
          if (*(long *)((long)local_20 + 8) != 0) {
            lVar14 = local_10 - *(int *)(*(long *)((long)local_20 + 8) + 8);
          }
        }
        lVar11 = *(long *)(param_1 + 0x10);
        if (0 < *(int *)(param_1 + 4)) {
          lVar12 = 0;
          do {
            lVar1 = lVar12 * 4;
            lVar2 = lVar12 * 8;
            lVar12 = lVar12 + 1;
            lVar11 = lVar11 + (long)*(int *)(lVar14 + 0x10 + lVar1) *
                              *(long *)(*(long *)(param_1 + 0x48) + lVar2);
          } while ((int)lVar12 < *(int *)(param_1 + 4));
        }
        lVar15 = lVar15 + 1;
        (*pcVar16)(local_10,lVar11,iVar3);
        SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_20);
      } while (lVar15 != lVar13);
    }
  }
  else {
    pcVar16 = (code *)(&PTR_FUN_004f6650)[((ulong)*(uint *)this & 7) * 8 + ((ulong)uVar4 & 7)];
    if (pcVar16 == (code *)0x0) {
      local_30 = pcVar16;
      local_28 = pcVar16;
      pcVar9 = (char *)String::allocate((String *)&local_30,9);
      cVar7 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar9 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar9[8] = cVar7;
      error(-0xd7,(String *)&local_30,
            "void (* cv::getConvertScaleElem(int, int))(const void*, void*, int, double, double)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x124d);
      String::deallocate((String *)&local_30);
    }
    lVar15 = 0;
    if (lVar13 != 0) {
      if (local_10 == 0) goto LAB_00331680;
      do {
        if (local_20 == 0.0) goto LAB_00331680;
        lVar14 = 0;
        if (*(long *)((long)local_20 + 8) != 0) {
          lVar14 = local_10 - *(int *)(*(long *)((long)local_20 + 8) + 8);
        }
        while( true ) {
          lVar11 = *(long *)(param_1 + 0x10);
          if (0 < *(int *)(param_1 + 4)) {
            lVar12 = 0;
            do {
              lVar1 = lVar12 * 4;
              lVar2 = lVar12 * 8;
              lVar12 = lVar12 + 1;
              lVar11 = lVar11 + (long)*(int *)(lVar14 + 0x10 + lVar1) *
                                *(long *)(*(long *)(param_1 + 0x48) + lVar2);
            } while ((int)lVar12 < *(int *)(param_1 + 4));
          }
          lVar15 = lVar15 + 1;
          (*pcVar16)(param_3,param_4,local_10,lVar11,iVar3);
          SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_20);
          if (lVar15 == lVar13) {
            return;
          }
          if (local_10 != 0) break;
LAB_00331680:
          lVar14 = 0;
        }
      } while( true );
    }
  }
  return;
}


==================================================================

### FUNC 003317f0 (1216 bytes) name=copyTo

/* cv::SparseMat::copyTo(cv::SparseMat&) const */

void __thiscall cv::SparseMat::copyTo(SparseMat *this,SparseMat *param_1)

{
  ulong uVar1;
  undefined1 *puVar2;
  ulong uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  code *pcVar7;
  long lVar8;
  ulong uVar9;
  int *piVar10;
  ulong *puVar11;
  undefined8 *puVar12;
  ulong uVar13;
  int *piVar14;
  long lVar15;
  ulong uVar16;
  ulong uVar17;
  undefined8 *puVar18;
  ulong uVar19;
  void *pvVar20;
  long lVar21;
  long lVar22;
  undefined8 uVar23;
  long local_18 [2];
  long local_8;
  
  piVar10 = *(int **)(this + 8);
  piVar14 = *(int **)(param_1 + 8);
  if (piVar10 == piVar14) {
    return;
  }
  if (piVar10 == (int *)0x0) {
    if (piVar14 != (int *)0x0) {
      do {
        iVar4 = *piVar14;
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar6) {
          *piVar14 = iVar4 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if ((iVar4 == 1) && (pvVar20 = *(void **)(param_1 + 8), pvVar20 != (void *)0x0)) {
        if (*(void **)((long)pvVar20 + 0x40) != (void *)0x0) {
          operator_delete(*(void **)((long)pvVar20 + 0x40));
        }
        if (*(void **)((long)pvVar20 + 0x28) != (void *)0x0) {
          operator_delete(*(void **)((long)pvVar20 + 0x28));
        }
        operator_delete(pvVar20);
        *(undefined8 *)(param_1 + 8) = 0;
        return;
      }
    }
    *(undefined8 *)(param_1 + 8) = 0;
    return;
  }
  create(param_1,piVar10[1],piVar10 + 0x16,*(uint *)this & 0xfff);
  SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)local_18,this);
  if (*(long *)(this + 8) == 0) {
    return;
  }
  lVar22 = *(long *)(*(long *)(this + 8) + 0x18);
  iVar4 = (*(uint *)this >> 3 & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3);
  uVar19 = (ulong)iVar4;
  if (lVar22 == 0) {
    return;
  }
  lVar21 = 0;
  do {
    if (((local_8 == 0) || (local_18[0] == 0)) || (*(long *)(local_18[0] + 8) == 0)) {
                    /* WARNING: Does not return */
      pcVar7 = (code *)SoftwareBreakpoint(1000,0x331c38);
      (*pcVar7)();
    }
    puVar11 = (ulong *)(local_8 - *(int *)(*(long *)(local_18[0] + 8) + 8));
    lVar8 = newNode(param_1,(int *)(puVar11 + 2),*puVar11);
    if (iVar4 < 4) {
      uVar13 = 0;
LAB_003318f0:
      puVar2 = (undefined1 *)(local_8 + uVar13);
      uVar9 = uVar19 - uVar13;
      if ((puVar2 < (undefined1 *)(lVar8 + uVar13 + 0x10) &&
           (undefined1 *)(lVar8 + uVar13) < (undefined1 *)(local_8 + uVar13 + 0x10)) ||
         (uVar9 < 0x16)) {
        do {
          *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
          uVar9 = uVar13 + 1;
          if (uVar19 == uVar9) break;
          *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
          uVar13 = uVar13 + 2;
        } while (uVar19 != uVar13);
      }
      else {
        uVar3 = uVar9;
        if ((-(long)puVar2 & 0xfU) < uVar9) {
          uVar3 = -(long)puVar2 & 0xfU;
        }
        uVar16 = uVar13;
        if (uVar3 != 0) {
          *(undefined1 *)(lVar8 + uVar13) = *puVar2;
          uVar16 = uVar13 + 1;
          if (uVar3 != 1) {
            *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
            uVar16 = uVar13 + 2;
            if (uVar3 != 2) {
              *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
              uVar16 = uVar13 + 3;
              if (uVar3 != 3) {
                *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                uVar16 = uVar13 + 4;
                if (uVar3 != 4) {
                  *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                  uVar16 = uVar13 + 5;
                  if (uVar3 != 5) {
                    *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                    uVar16 = uVar13 + 6;
                    if (uVar3 != 6) {
                      *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                      uVar16 = uVar13 + 7;
                      if (uVar3 != 7) {
                        *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                        uVar16 = uVar13 + 8;
                        if (uVar3 != 8) {
                          *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                          uVar16 = uVar13 + 9;
                          if (uVar3 != 9) {
                            *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                            uVar16 = uVar13 + 10;
                            if (uVar3 != 10) {
                              *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                              uVar16 = uVar13 + 0xb;
                              if (uVar3 != 0xb) {
                                *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
                                uVar16 = uVar13 + 0xc;
                                if (uVar3 != 0xc) {
                                  *(undefined1 *)(lVar8 + uVar16) =
                                       *(undefined1 *)(local_8 + uVar16);
                                  uVar16 = uVar13 + 0xd;
                                  if (uVar3 != 0xd) {
                                    *(undefined1 *)(lVar8 + uVar16) =
                                         *(undefined1 *)(local_8 + uVar16);
                                    uVar16 = uVar13 + 0xe;
                                    if (uVar3 == 0xf) {
                                      *(undefined1 *)(lVar8 + uVar16) =
                                           *(undefined1 *)(local_8 + uVar16);
                                      uVar16 = uVar13 + 0xf;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar1 = ((uVar9 - uVar3) - 0x10 >> 4) + 1;
        lVar15 = uVar1 * 0x10;
        if (0xe < (uVar9 - 1) - uVar3) {
          uVar17 = 0;
          puVar12 = (undefined8 *)(lVar8 + uVar3 + uVar13);
          puVar18 = (undefined8 *)(local_8 + uVar3 + uVar13);
          do {
            uVar23 = *puVar18;
            uVar17 = uVar17 + 1;
            puVar12[1] = puVar18[1];
            *puVar12 = uVar23;
            puVar12 = puVar12 + 2;
            puVar18 = puVar18 + 2;
          } while (uVar17 < uVar1);
          uVar16 = uVar16 + lVar15;
          if (uVar9 - uVar3 == lVar15) goto LAB_00331bd4;
        }
        uVar13 = uVar16 + 1;
        *(undefined1 *)(lVar8 + uVar16) = *(undefined1 *)(local_8 + uVar16);
        if (uVar13 < uVar19) {
          uVar9 = uVar16 + 2;
          *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
          if (uVar9 < uVar19) {
            uVar13 = uVar16 + 3;
            *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
            if (uVar13 < uVar19) {
              uVar9 = uVar16 + 4;
              *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
              if (uVar9 < uVar19) {
                uVar13 = uVar16 + 5;
                *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                if (uVar13 < uVar19) {
                  uVar9 = uVar16 + 6;
                  *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
                  if (uVar9 < uVar19) {
                    uVar13 = uVar16 + 7;
                    *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                    if (uVar13 < uVar19) {
                      uVar9 = uVar16 + 8;
                      *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
                      if (uVar9 < uVar19) {
                        uVar13 = uVar16 + 9;
                        *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                        if (uVar13 < uVar19) {
                          uVar9 = uVar16 + 10;
                          *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
                          if (uVar9 < uVar19) {
                            uVar13 = uVar16 + 0xb;
                            *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                            if (uVar13 < uVar19) {
                              uVar9 = uVar16 + 0xc;
                              *(undefined1 *)(lVar8 + uVar13) = *(undefined1 *)(local_8 + uVar13);
                              if (uVar9 < uVar19) {
                                uVar13 = uVar16 + 0xd;
                                *(undefined1 *)(lVar8 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                                if (uVar13 < uVar19) {
                                  uVar16 = uVar16 + 0xe;
                                  *(undefined1 *)(lVar8 + uVar13) =
                                       *(undefined1 *)(local_8 + uVar13);
                                  if (uVar16 < uVar19) {
                                    *(undefined1 *)(lVar8 + uVar16) =
                                         *(undefined1 *)(local_8 + uVar16);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      lVar15 = 0;
      uVar9 = 4;
      do {
        uVar13 = uVar9;
        *(undefined4 *)(lVar8 + lVar15) = *(undefined4 *)(local_8 + lVar15);
        lVar15 = lVar15 + 4;
        uVar9 = uVar13 + 4;
      } while (uVar13 + 4 <= uVar19);
      if (uVar13 < uVar19) goto LAB_003318f0;
    }
LAB_00331bd4:
    lVar21 = lVar21 + 1;
    SparseMatConstIterator::operator++((SparseMatConstIterator *)local_18);
    if (lVar21 == lVar22) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00331cb0 (1056 bytes) name=convertTo

/* cv::SparseMat::convertTo(cv::SparseMat&, int, double) const */

void __thiscall
cv::SparseMat::convertTo(SparseMat *this,SparseMat *param_1,int param_2,double param_3)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  uint uVar6;
  undefined8 uVar7;
  long lVar8;
  int *piVar9;
  void *pvVar10;
  char *pcVar11;
  long lVar12;
  ulong *puVar13;
  long lVar14;
  code *pcVar15;
  code *local_28;
  code *local_20;
  long local_18;
  int *local_10;
  long local_8;
  
  lVar12 = *(long *)(this + 8);
  uVar3 = *(uint *)this & 0xfff;
  uVar2 = uVar3;
  if (-1 < param_2) {
    uVar2 = param_2;
  }
  uVar6 = *(uint *)this >> 3 & 0x1ff;
  uVar2 = (uVar2 & 7) + uVar6 * 8;
  if (lVar12 == *(long *)(param_1 + 8)) {
    if (uVar2 != uVar3) {
      local_10 = (int *)0x0;
      local_18 = CONCAT44(local_18._4_4_,0x42fd0000);
      convertTo(this,(SparseMat *)&local_18,uVar2,param_3);
      if (local_10 != (int *)0x0) {
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(local_10,0x10);
          if (bVar5) {
            *local_10 = *local_10 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      piVar9 = *(int **)(param_1 + 8);
      if (piVar9 != (int *)0x0) {
        do {
          iVar1 = *piVar9;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar9,0x10);
          if (bVar5) {
            *piVar9 = iVar1 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if ((iVar1 == 1) && (pvVar10 = *(void **)(param_1 + 8), pvVar10 != (void *)0x0)) {
          if (*(void **)((long)pvVar10 + 0x40) != (void *)0x0) {
            operator_delete(*(void **)((long)pvVar10 + 0x40));
          }
          if (*(void **)((long)pvVar10 + 0x28) != (void *)0x0) {
            operator_delete(*(void **)((long)pvVar10 + 0x28));
          }
          operator_delete(pvVar10);
        }
      }
      piVar9 = local_10;
      *(undefined4 *)param_1 = (undefined4)local_18;
      *(int **)(param_1 + 8) = local_10;
      if (local_10 == (int *)0x0) {
        return;
      }
      do {
        iVar1 = *local_10;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(local_10,0x10);
        if (bVar5) {
          *local_10 = iVar1 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar1 != 1) {
        return;
      }
      if (local_10 == (int *)0x0) {
        return;
      }
      if (*(void **)(local_10 + 0x10) != (void *)0x0) {
        operator_delete(*(void **)(local_10 + 0x10));
      }
      pvVar10 = *(void **)(piVar9 + 10);
      if (pvVar10 != (void *)0x0) {
        operator_delete(pvVar10);
      }
      operator_delete(piVar9);
      return;
    }
    if (lVar12 != 0) goto LAB_00331d1c;
LAB_00331fac:
    local_18 = 0;
    local_10 = (int *)0x0;
    pcVar11 = (char *)String::allocate((String *)&local_18,8);
    *(undefined8 *)pcVar11 = s_hdr____0_0046b698._0_8_;
    error(-0xd7,(String *)&local_18,
          "void cv::SparseMat::convertTo(cv::SparseMat&, int, double) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x12f0);
    String::deallocate((String *)&local_18);
    lVar12 = *(long *)(this + 8);
    if (lVar12 == *(long *)(param_1 + 8)) goto LAB_00331d1c;
  }
  else if (lVar12 == 0) goto LAB_00331fac;
  create(param_1,*(int *)(lVar12 + 4),(int *)(lVar12 + 0x58),uVar2);
LAB_00331d1c:
  SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)&local_18,this);
  lVar12 = 0;
  if (*(long *)(this + 8) != 0) {
    lVar12 = *(long *)(*(long *)(this + 8) + 0x18);
  }
  iVar1 = uVar6 + 1;
  lVar14 = ((ulong)*(uint *)this & 7) * 8 + ((ulong)uVar2 & 7);
  if (param_3 == 1.0) {
    pcVar15 = (code *)(&PTR_FUN_004f61f0)[lVar14];
    if (pcVar15 == (code *)0x0) {
      local_28 = pcVar15;
      local_20 = pcVar15;
      pcVar11 = (char *)String::allocate((String *)&local_28,9);
      cVar4 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar11 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar11[8] = cVar4;
      error(-0xd7,(String *)&local_28,
            "void (* cv::getConvertElem(int, int))(const void*, void*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1220);
      String::deallocate((String *)&local_28);
    }
    lVar14 = 0;
    if (lVar12 != 0) {
      do {
        while( true ) {
          if ((local_8 == 0) || (local_18 == 0)) {
            puVar13 = (ulong *)0x0;
          }
          else {
            puVar13 = (ulong *)0x0;
            if (*(long *)(local_18 + 8) != 0) {
              puVar13 = (ulong *)(local_8 - *(int *)(*(long *)(local_18 + 8) + 8));
            }
          }
          if (*(long *)(this + 8) != *(long *)(param_1 + 8)) break;
          lVar14 = lVar14 + 1;
          (*pcVar15)(local_8,local_8,iVar1);
          SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_18);
          if (lVar14 == lVar12) {
            return;
          }
        }
        lVar14 = lVar14 + 1;
        uVar7 = newNode(param_1,(int *)(puVar13 + 2),*puVar13);
        (*pcVar15)(local_8,uVar7,iVar1);
        SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_18);
      } while (lVar14 != lVar12);
    }
  }
  else {
    pcVar15 = (code *)(&PTR_FUN_004f6650)[lVar14];
    if (pcVar15 == (code *)0x0) {
      local_28 = pcVar15;
      local_20 = pcVar15;
      pcVar11 = (char *)String::allocate((String *)&local_28,9);
      cVar4 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar11 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar11[8] = cVar4;
      error(-0xd7,(String *)&local_28,
            "void (* cv::getConvertScaleElem(int, int))(const void*, void*, int, double, double)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x124d);
      String::deallocate((String *)&local_28);
    }
    lVar14 = 0;
    if (lVar12 != 0) {
      do {
        if ((local_8 == 0) || (local_18 == 0)) {
          puVar13 = (ulong *)0x0;
        }
        else {
          puVar13 = (ulong *)0x0;
          if (*(long *)(local_18 + 8) != 0) {
            puVar13 = (ulong *)(local_8 - *(int *)(*(long *)(local_18 + 8) + 8));
          }
        }
        lVar8 = local_8;
        if (*(long *)(this + 8) != *(long *)(param_1 + 8)) {
          lVar8 = newNode(param_1,(int *)(puVar13 + 2),*puVar13);
        }
        lVar14 = lVar14 + 1;
        (*pcVar15)(param_3,0,local_8,lVar8,iVar1);
        SparseMatConstIterator::operator++((SparseMatConstIterator *)&local_18);
      } while (lVar14 != lVar12);
    }
  }
  return;
}


==================================================================

### FUNC 00332164 (796 bytes) name=norm

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::norm(cv::SparseMat const&, int) */

undefined1  [16] cv::norm(SparseMat *param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined4 uVar11;
  undefined2 uVar12;
  bool bVar13;
  char *pcVar14;
  undefined8 *puVar15;
  long lVar16;
  long lVar17;
  double dVar18;
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  double __x;
  undefined8 local_28;
  undefined8 local_20;
  SparseMatConstIterator aSStack_18 [16];
  double *local_8;
  
  SparseMatConstIterator::SparseMatConstIterator(aSStack_18,param_1);
  lVar16 = 0;
  if (*(long *)(param_1 + 8) != 0) {
    lVar16 = *(long *)(*(long *)(param_1 + 8) + 0x18);
  }
  uVar1 = param_2 & 7;
  bVar13 = uVar1 == 4;
  uVar2 = *(uint *)param_1 & 0xfff;
  if ((uVar1 - 1 < 2) || (bVar13)) {
    if (uVar2 == 5) goto LAB_00332354;
LAB_003321cc:
    if (uVar2 == 6) {
      __x = 0.0;
      if (uVar1 == 1) {
        dVar18 = __x;
        if (lVar16 != 0) {
          lVar17 = 0;
          do {
            if (__x < ABS(*local_8)) {
              __x = ABS(*local_8);
            }
            lVar17 = lVar17 + 1;
            SparseMatConstIterator::operator++(aSStack_18);
            dVar18 = __x;
          } while (lVar17 != lVar16);
        }
        goto LAB_00332248;
      }
      if (uVar1 == 2) {
        dVar18 = 0.0;
        if (lVar16 != 0) {
          lVar17 = 0;
          dVar18 = __x;
          do {
            lVar17 = lVar17 + 1;
            dVar18 = dVar18 + ABS(*local_8);
            SparseMatConstIterator::operator++(aSStack_18);
          } while (lVar17 != lVar16);
        }
        goto LAB_00332248;
      }
      lVar17 = 0;
      dVar18 = 0.0;
      if (lVar16 != 0) {
        do {
          lVar17 = lVar17 + 1;
          __x = __x + *local_8 * *local_8;
          SparseMatConstIterator::operator++(aSStack_18);
        } while (lVar17 != lVar16);
        dVar18 = __x;
        if (!bVar13) goto LAB_00332248;
        goto LAB_003322a8;
      }
    }
    else {
      local_28 = 0;
      local_20 = 0;
      pcVar14 = (char *)String::allocate((String *)&local_28,0x1e);
      uVar12 = s_Only_32f_and_64f_are_supported_0046b6f0._28_2_;
      uVar11 = s_Only_32f_and_64f_are_supported_0046b6f0._24_4_;
      uVar4 = s_Only_32f_and_64f_are_supported_0046b6f0._8_8_;
      uVar3 = s_Only_32f_and_64f_are_supported_0046b6f0._0_8_;
      *(undefined8 *)(pcVar14 + 0x10) = s_Only_32f_and_64f_are_supported_0046b6f0._16_8_;
      *(undefined4 *)(pcVar14 + 0x18) = uVar11;
      *(undefined2 *)(pcVar14 + 0x1c) = uVar12;
      *(undefined8 *)pcVar14 = uVar3;
      *(undefined8 *)(pcVar14 + 8) = uVar4;
      error(-0xd2,(String *)&local_28,"double cv::norm(const cv::SparseMat&, int)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1489);
      String::deallocate((String *)&local_28);
      dVar18 = 0.0;
    }
  }
  else {
    local_28 = 0;
    local_20 = 0;
    puVar15 = (undefined8 *)String::allocate((String *)&local_28,0x42);
    uVar10 = _LAB_0046b6e0;
    uVar9 = DAT_0046b6d8;
    uVar8 = DAT_0046b6d0;
    uVar7 = DAT_0046b6c8;
    uVar6 = DAT_0046b6c0;
    uVar5 = DAT_0046b6b8;
    uVar4 = DAT_0046b6b0;
    uVar3 = DAT_0046b6a8;
    *(undefined2 *)(puVar15 + 8) = DAT_0046b6e8;
    *puVar15 = uVar3;
    puVar15[1] = uVar4;
    puVar15[2] = uVar5;
    puVar15[3] = uVar6;
    puVar15[4] = uVar7;
    puVar15[5] = uVar8;
    puVar15[6] = uVar9;
    puVar15[7] = uVar10;
    error(-0xd7,(String *)&local_28,"double cv::norm(const cv::SparseMat&, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1468);
    String::deallocate((String *)&local_28);
    if (uVar2 != 5) goto LAB_003321cc;
LAB_00332354:
    dVar18 = 0.0;
    if (uVar1 == 1) {
      if (lVar16 != 0) {
        lVar17 = 0;
        do {
          if (dVar18 < ABS((double)*(float *)local_8)) {
            dVar18 = ABS((double)*(float *)local_8);
          }
          lVar17 = lVar17 + 1;
          SparseMatConstIterator::operator++(aSStack_18);
        } while (lVar17 != lVar16);
      }
      goto LAB_00332248;
    }
    if (uVar1 == 2) {
      if (lVar16 != 0) {
        lVar17 = 0;
        do {
          lVar17 = lVar17 + 1;
          dVar18 = dVar18 + (double)ABS(*(float *)local_8);
          SparseMatConstIterator::operator++(aSStack_18);
        } while (lVar17 != lVar16);
      }
      goto LAB_00332248;
    }
    lVar17 = 0;
    if (lVar16 != 0) {
      do {
        lVar17 = lVar17 + 1;
        dVar18 = dVar18 + (double)*(float *)local_8 * (double)*(float *)local_8;
        SparseMatConstIterator::operator++(aSStack_18);
      } while (lVar17 != lVar16);
    }
  }
  __x = dVar18;
  dVar18 = __x;
  if (bVar13) {
LAB_003322a8:
    dVar18 = SQRT(__x);
    if (NAN(dVar18)) {
      dVar18 = ::sqrt(__x);
    }
    auVar20._8_8_ = 0;
    auVar20._0_8_ = dVar18;
    return auVar20;
  }
LAB_00332248:
  auVar19._8_8_ = 0;
  auVar19._0_8_ = dVar18;
  return auVar19;
}


==================================================================

### FUNC 003324a8 (1256 bytes) name=minMaxLoc

/* WARNING: Type propagation algorithm not settling */
/* cv::minMaxLoc(cv::SparseMat const&, double*, double*, int*, int*) */

void cv::minMaxLoc(SparseMat *param_1,double *param_2,double *param_3,int *param_4,int *param_5)

{
  ulong uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char *pcVar6;
  int *piVar7;
  int *piVar8;
  int *piVar9;
  ulong uVar10;
  int *piVar11;
  int *piVar12;
  int *piVar13;
  long lVar14;
  int *piVar15;
  int *piVar16;
  float fVar17;
  undefined8 uVar18;
  double dVar19;
  float fVar20;
  double dVar21;
  float fVar22;
  double dVar23;
  undefined8 local_28;
  undefined8 local_20;
  long local_18 [2];
  double *local_8;
  
  SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)local_18,param_1);
  lVar14 = *(long *)(param_1 + 8);
  dVar21 = DAT_003329b0;
  dVar23 = DAT_003329b8;
  fVar20 = DAT_003329a4;
  fVar22 = DAT_003329a8;
  if (lVar14 == 0) {
    uVar2 = *(uint *)param_1 & 0xfff;
    if (uVar2 == 5) {
      piVar15 = (int *)0x0;
      piVar12 = (int *)0x0;
      piVar13 = (int *)0x0;
      goto LAB_003328c8;
    }
    piVar15 = (int *)0x0;
    if (uVar2 == 6) {
      piVar15 = (int *)0x0;
      piVar12 = (int *)0x0;
      piVar13 = (int *)0x0;
      goto LAB_00332814;
    }
  }
  else {
    uVar2 = *(uint *)param_1 & 0xfff;
    piVar16 = *(int **)(lVar14 + 0x18);
    piVar15 = (int *)(long)*(int *)(lVar14 + 4);
    piVar12 = piVar16;
    piVar13 = piVar16;
    if (uVar2 == 5) {
      if (piVar16 != (int *)0x0) {
        piVar12 = (int *)0x0;
        piVar13 = (int *)0x0;
        piVar9 = (int *)0x0;
        do {
          fVar17 = *(float *)local_8;
          if (fVar17 < fVar22) {
            lVar14 = 0;
            if (local_18[0] != 0) {
              lVar14 = 0;
              if (*(long *)(local_18[0] + 8) != 0) {
                lVar14 = (long)local_8 - (long)*(int *)(*(long *)(local_18[0] + 8) + 8);
              }
            }
            piVar13 = (int *)(lVar14 + 0x10);
            fVar22 = fVar17;
          }
          if (fVar20 < fVar17) {
            lVar14 = 0;
            if (local_18[0] != 0) {
              lVar14 = 0;
              if (*(long *)(local_18[0] + 8) != 0) {
                lVar14 = (long)local_8 - (long)*(int *)(*(long *)(local_18[0] + 8) + 8);
              }
            }
            piVar12 = (int *)(lVar14 + 0x10);
            fVar20 = fVar17;
          }
          piVar9 = (int *)((long)piVar9 + 1);
          SparseMatConstIterator::operator++((SparseMatConstIterator *)local_18);
        } while (piVar9 != piVar16);
      }
LAB_003328c8:
      if (param_2 != (double *)0x0) {
        *param_2 = (double)fVar22;
      }
      if (param_3 != (double *)0x0) {
        *param_3 = (double)fVar20;
      }
      goto joined_r0x00332824;
    }
    if (uVar2 == 6) {
      if (piVar16 != (int *)0x0) {
        piVar12 = (int *)0x0;
        piVar13 = (int *)0x0;
        piVar9 = (int *)0x0;
        do {
          dVar19 = *local_8;
          if (dVar19 < dVar23) {
            lVar14 = 0;
            if (local_18[0] != 0) {
              lVar14 = 0;
              if (*(long *)(local_18[0] + 8) != 0) {
                lVar14 = (long)local_8 - (long)*(int *)(*(long *)(local_18[0] + 8) + 8);
              }
            }
            piVar13 = (int *)(lVar14 + 0x10);
            dVar23 = dVar19;
          }
          if (dVar21 < dVar19) {
            lVar14 = 0;
            if (local_18[0] != 0) {
              lVar14 = 0;
              if (*(long *)(local_18[0] + 8) != 0) {
                lVar14 = (long)local_8 - (long)*(int *)(*(long *)(local_18[0] + 8) + 8);
              }
            }
            piVar12 = (int *)(lVar14 + 0x10);
            dVar21 = dVar19;
          }
          piVar9 = (int *)((long)piVar9 + 1);
          SparseMatConstIterator::operator++((SparseMatConstIterator *)local_18);
        } while (piVar9 != piVar16);
      }
LAB_00332814:
      if (param_2 != (double *)0x0) {
        *param_2 = dVar23;
      }
      if (param_3 != (double *)0x0) {
        *param_3 = dVar21;
      }
      goto joined_r0x00332824;
    }
  }
  local_28 = 0;
  local_20 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_28,0x1e);
  uVar5 = s_Only_32f_and_64f_are_supported_0046b6f0._28_2_;
  uVar4 = s_Only_32f_and_64f_are_supported_0046b6f0._24_4_;
  uVar3 = s_Only_32f_and_64f_are_supported_0046b6f0._8_8_;
  uVar18 = s_Only_32f_and_64f_are_supported_0046b6f0._0_8_;
  *(undefined8 *)(pcVar6 + 0x10) = s_Only_32f_and_64f_are_supported_0046b6f0._16_8_;
  *(undefined4 *)(pcVar6 + 0x18) = uVar4;
  *(undefined2 *)(pcVar6 + 0x1c) = uVar5;
  *(undefined8 *)pcVar6 = uVar18;
  *(undefined8 *)(pcVar6 + 8) = uVar3;
  error(-0xd2,(String *)&local_28,
        "void cv::minMaxLoc(const cv::SparseMat&, double*, double*, int*, int*)",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x14c4);
  piVar12 = (int *)0x0;
  piVar13 = (int *)0x0;
  String::deallocate((String *)&local_28);
joined_r0x00332824:
  if (param_4 == (int *)0x0) {
    piVar16 = piVar15;
    if (param_5 == (int *)0x0) {
      s_Only_32f_and_64f_are_supported_0046b6f0[0] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._0_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[1] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[2] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[3] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[4] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[5] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[6] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[7] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[8] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._8_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[9] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[10] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xb] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xc] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xd] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xe] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xf] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x10] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._16_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x11] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x12] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x13] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x14] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x15] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x16] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x17] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x18] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._24_4_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x19] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1a] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1b] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1c] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._28_2_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1d] =
           SUB21(s_Only_32f_and_64f_are_supported_0046b6f0._28_2_,1);
      return;
    }
  }
  else {
    if (piVar15 == (int *)0x0) {
      s_Only_32f_and_64f_are_supported_0046b6f0[0] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._0_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[1] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[2] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[3] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[4] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[5] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[6] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[7] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._0_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[8] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._8_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[9] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[10] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xb] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xc] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xd] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xe] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[0xf] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._8_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x10] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._16_8_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x11] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x12] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x13] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x14] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,4);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x15] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,5);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x16] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,6);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x17] =
           SUB81(s_Only_32f_and_64f_are_supported_0046b6f0._16_8_,7);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x18] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._24_4_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x19] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,1);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1a] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,2);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1b] =
           SUB41(s_Only_32f_and_64f_are_supported_0046b6f0._24_4_,3);
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1c] =
           (char)s_Only_32f_and_64f_are_supported_0046b6f0._28_2_;
      s_Only_32f_and_64f_are_supported_0046b6f0[0x1d] =
           SUB21(s_Only_32f_and_64f_are_supported_0046b6f0._28_2_,1);
      return;
    }
    piVar16 = param_5;
    if ((param_4 < piVar13 + 4 && piVar13 < param_4 + 4) || (piVar15 < (int *)0xc)) {
      piVar9 = (int *)0x0;
      do {
        param_4[(long)piVar9] = piVar13[(long)piVar9];
        piVar9 = (int *)((long)piVar9 + 1);
      } while (piVar9 != piVar15);
    }
    else {
      piVar7 = (int *)(-((ulong)param_4 >> 2 & 3) & 3);
      piVar9 = piVar15;
      if (piVar7 < piVar15) {
        piVar9 = piVar7;
      }
      piVar7 = piVar9;
      if ((piVar9 != (int *)0x0) && (*param_4 = *piVar13, piVar9 != (int *)0x1)) {
        param_4[1] = piVar13[1];
        if (piVar9 == (int *)0x3) {
          param_4[2] = piVar13[2];
        }
        else {
          piVar7 = (int *)0x2;
        }
      }
      uVar10 = 0;
      uVar1 = (((long)piVar15 - (long)piVar9) - 4U >> 2) + 1;
      piVar8 = param_4 + (long)piVar9;
      piVar11 = piVar13 + (long)piVar9;
      do {
        uVar18 = *(undefined8 *)piVar11;
        uVar10 = uVar10 + 1;
        *(undefined8 *)(piVar8 + 2) = *(undefined8 *)(piVar11 + 2);
        *(undefined8 *)piVar8 = uVar18;
        piVar8 = piVar8 + 4;
        piVar11 = piVar11 + 4;
      } while (uVar10 < uVar1);
      piVar7 = piVar7 + uVar1;
      if ((long)piVar15 - (long)piVar9 != uVar1 * 4) {
        piVar9 = (int *)((long)piVar7 + 1);
        param_4[(long)piVar7] = piVar13[(long)piVar7];
        if (piVar9 < piVar15) {
          piVar7 = (int *)((long)piVar7 + 2);
          param_4[(long)piVar9] = piVar13[(long)piVar9];
          if (piVar7 < piVar15) {
            param_4[(long)piVar7] = piVar13[(long)piVar7];
          }
        }
      }
    }
  }
  if (piVar16 != (int *)0x0) {
    if ((param_5 < piVar12 + 4 && piVar12 < param_5 + 4) || (piVar15 < (int *)0xc)) {
      piVar13 = (int *)0x0;
      do {
        param_5[(long)piVar13] = piVar12[(long)piVar13];
        piVar13 = (int *)((long)piVar13 + 1);
      } while (piVar13 != piVar15);
    }
    else {
      piVar16 = (int *)(-((ulong)param_5 >> 2 & 3) & 3);
      piVar13 = piVar15;
      if (piVar16 < piVar15) {
        piVar13 = piVar16;
      }
      piVar16 = piVar13;
      if ((piVar13 != (int *)0x0) && (*param_5 = *piVar12, piVar13 != (int *)0x1)) {
        param_5[1] = piVar12[1];
        if (piVar13 == (int *)0x3) {
          param_5[2] = piVar12[2];
        }
        else {
          piVar16 = (int *)0x2;
        }
      }
      uVar10 = 0;
      uVar1 = (((long)piVar15 - (long)piVar13) - 4U >> 2) + 1;
      piVar9 = param_5 + (long)piVar13;
      piVar7 = piVar12 + (long)piVar13;
      do {
        uVar18 = *(undefined8 *)piVar7;
        uVar10 = uVar10 + 1;
        *(undefined8 *)(piVar9 + 2) = *(undefined8 *)(piVar7 + 2);
        *(undefined8 *)piVar9 = uVar18;
        piVar9 = piVar9 + 4;
        piVar7 = piVar7 + 4;
      } while (uVar10 < uVar1);
      piVar16 = piVar16 + uVar1;
      if ((long)piVar15 - (long)piVar13 != uVar1 * 4) {
        piVar13 = (int *)((long)piVar16 + 1);
        param_5[(long)piVar16] = piVar12[(long)piVar16];
        if (piVar13 < piVar15) {
          piVar16 = (int *)((long)piVar16 + 2);
          param_5[(long)piVar13] = piVar12[(long)piVar13];
          if (piVar16 < piVar15) {
            param_5[(long)piVar16] = piVar12[(long)piVar16];
          }
        }
      }
    }
  }
  return;
}


==================================================================

### FUNC 003329c0 (236 bytes) name=normalize

/* cv::normalize(cv::SparseMat const&, cv::SparseMat&, double, int) */

void cv::normalize(SparseMat *param_1,SparseMat *param_2,double param_3,int param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  char cVar4;
  char *pcVar5;
  double dVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_4 - 1U < 2) || (param_4 == 4)) {
    dVar6 = (double)norm(param_1,param_4);
    if (dVar6 <= DAT_00332ac0) {
      dVar6 = 0.0;
    }
    else {
      dVar6 = param_3 / dVar6;
    }
  }
  else {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,0x1d);
    cVar4 = s_Unknown_unsupported_norm_type_00463410[0x1c];
    uVar3 = s_Unknown_unsupported_norm_type_00463410._24_4_;
    uVar2 = s_Unknown_unsupported_norm_type_00463410._8_8_;
    uVar1 = s_Unknown_unsupported_norm_type_00463410._0_8_;
    *(undefined8 *)(pcVar5 + 0x10) = s_Unknown_unsupported_norm_type_00463410._16_8_;
    *(undefined4 *)(pcVar5 + 0x18) = uVar3;
    pcVar5[0x1c] = cVar4;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    error(-5,(String *)&local_10,
          "void cv::normalize(const cv::SparseMat&, cv::SparseMat&, double, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x14d8);
    String::deallocate((String *)&local_10);
    dVar6 = 1.0;
  }
  SparseMat::convertTo(param_1,param_2,-1,dVar6);
  return;
}


==================================================================

### FUNC 00332ac8 (640 bytes) name=RotatedRect

/* cv::RotatedRect::RotatedRect(cv::Point_<float> const&, cv::Point_<float> const&,
   cv::Point_<float> const&) */

void __thiscall
cv::RotatedRect::RotatedRect(RotatedRect *this,Point_ *param_1,Point_ *param_2,Point_ *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  char *pcVar10;
  uint uVar11;
  double dVar12;
  float fVar13;
  double dVar14;
  double dVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  double dVar23;
  float local_20 [4];
  undefined8 local_10;
  undefined8 local_8;
  
  *(undefined4 *)this = 0;
  fVar19 = *(float *)param_1;
  fVar21 = *(float *)param_2;
  *(undefined4 *)(this + 4) = 0;
  fVar13 = fVar19 - fVar21;
  fVar16 = *(float *)(param_1 + 4);
  fVar18 = *(float *)(param_3 + 4);
  fVar22 = fVar16 - *(float *)(param_2 + 4);
  fVar17 = *(float *)param_3;
  fVar20 = *(float *)(param_2 + 4) - fVar18;
  fVar21 = fVar21 - fVar17;
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 0xc) = 0;
  dVar12 = (double)fVar13 * (double)fVar13 + 0.0 + (double)fVar22 * (double)fVar22;
  local_20[0] = fVar13;
  local_20[1] = fVar22;
  local_20[2] = fVar21;
  local_20[3] = fVar20;
  dVar23 = SQRT(dVar12);
  if (NAN(dVar23)) {
    dVar23 = ::sqrt(dVar12);
  }
  dVar15 = (double)fVar21 * (double)fVar21 + 0.0 + (double)fVar20 * (double)fVar20;
  dVar12 = SQRT(dVar15);
  if (NAN(dVar12)) {
    dVar12 = ::sqrt(dVar15);
  }
  if (DAT_00332d60 < (double)ABS(fVar21 * fVar13 + 0.0 + fVar20 * fVar22) / (dVar23 * dVar12)) {
    local_10 = 0;
    local_8 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_10,0x4a);
    uVar9 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._64_8_;
    uVar8 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._56_8_;
    uVar7 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._48_8_;
    uVar6 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._40_8_;
    uVar5 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._32_8_;
    uVar4 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._24_8_;
    uVar3 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._16_8_;
    uVar2 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._8_8_;
    uVar1 = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._0_8_;
    *(undefined2 *)(pcVar10 + 0x48) = s_abs_vecs_0__dot_vecs_1_______nor_0046b710._72_2_;
    *(undefined8 *)(pcVar10 + 0x40) = uVar9;
    *(undefined8 *)pcVar10 = uVar1;
    *(undefined8 *)(pcVar10 + 8) = uVar2;
    *(undefined8 *)(pcVar10 + 0x10) = uVar3;
    *(undefined8 *)(pcVar10 + 0x18) = uVar4;
    *(undefined8 *)(pcVar10 + 0x20) = uVar5;
    *(undefined8 *)(pcVar10 + 0x28) = uVar6;
    *(undefined8 *)(pcVar10 + 0x30) = uVar7;
    *(undefined8 *)(pcVar10 + 0x38) = uVar8;
    error(-0xd7,(String *)&local_10,
          "cv::RotatedRect::RotatedRect(const Point2f&, const Point2f&, const Point2f&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x14e6);
    String::deallocate((String *)&local_10);
  }
  uVar11 = (uint)(ABS(fVar20) < ABS(fVar21));
  fVar20 = local_20[(long)(int)uVar11 * 2];
  fVar13 = local_20[(long)(int)uVar11 * 2 + 1];
  dVar12 = atan((double)(fVar13 / fVar20));
  dVar15 = (double)fVar20;
  dVar23 = (double)fVar13;
  dVar23 = dVar15 * dVar15 + 0.0 + dVar23 * dVar23;
  dVar15 = SQRT(dVar23);
  if (NAN(dVar15)) {
    dVar15 = ::sqrt(dVar23);
  }
  dVar23 = (double)local_20[(long)(int)(uVar11 ^ 1) * 2] *
           (double)local_20[(long)(int)(uVar11 ^ 1) * 2] + 0.0 +
           (double)local_20[(long)(int)(uVar11 ^ 1) * 2 + 1] *
           (double)local_20[(long)(int)(uVar11 ^ 1) * 2 + 1];
  dVar14 = SQRT(dVar23);
  if (NAN(dVar14)) {
    dVar14 = ::sqrt(dVar23);
  }
  dVar23 = DAT_00332d70;
  dVar12 = dVar12 * DAT_00332d68;
  *(float *)this = (fVar17 + fVar19) * 0.5;
  *(float *)(this + 4) = (fVar16 + fVar18) * 0.5;
  *(float *)(this + 8) = (float)dVar15;
  *(float *)(this + 0xc) = (float)dVar14;
  *(float *)(this + 0x10) = (float)(dVar12 / dVar23);
  return;
}


==================================================================

### FUNC 00332d78 (228 bytes) name=points

/* cv::RotatedRect::points(cv::Point_<float>*) const */

void __thiscall cv::RotatedRect::points(RotatedRect *this,Point_ *param_1)

{
  float fVar1;
  double dVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  double __x;
  
  __x = ((double)*(float *)(this + 0x10) * DAT_00332e60) / DAT_00332e68;
  dVar2 = cos(__x);
  fVar8 = (float)dVar2 * 0.5;
  dVar2 = sin(__x);
  fVar6 = *(float *)(this + 0xc);
  fVar1 = (float)dVar2 * 0.5;
  fVar3 = *(float *)(this + 8);
  fVar5 = (*(float *)(this + 4) + fVar6 * fVar8) - fVar3 * fVar1;
  fVar4 = (*(float *)this - fVar1 * fVar6) - fVar8 * fVar3;
  *(float *)(param_1 + 4) = fVar5;
  fVar7 = *(float *)(this + 4);
  *(float *)param_1 = fVar4;
  fVar7 = (fVar7 - fVar6 * fVar8) - fVar3 * fVar1;
  fVar1 = (*(float *)this + fVar1 * fVar6) - fVar8 * fVar3;
  *(float *)(param_1 + 0xc) = fVar7;
  *(float *)(param_1 + 8) = fVar1;
  fVar3 = *(float *)this;
  *(float *)(param_1 + 0x14) = *(float *)(this + 4) * 2.0 - fVar5;
  *(float *)(param_1 + 0x10) = fVar3 * 2.0 - fVar4;
  fVar3 = *(float *)this;
  *(float *)(param_1 + 0x1c) = *(float *)(this + 4) * 2.0 - fVar7;
  *(float *)(param_1 + 0x18) = fVar3 * 2.0 - fVar1;
  return;
}


==================================================================

### FUNC 00332e70 (356 bytes) name=boundingRect

/* cv::RotatedRect::boundingRect() const */

int * cv::RotatedRect::boundingRect(void)

{
  int iVar1;
  int iVar2;
  RotatedRect *in_x0;
  int *in_x8;
  float fVar3;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  local_18 = 0;
  local_20 = 0;
  uStack_8 = 0;
  local_10 = 0;
  points(in_x0,(Point_ *)&local_20);
  fVar3 = (float)local_18;
  if ((float)local_20 <= (float)local_18) {
    fVar3 = (float)local_20;
  }
  if ((float)local_10 < fVar3) {
    fVar3 = (float)local_10;
  }
  if ((float)uStack_8 < fVar3) {
    fVar3 = (float)uStack_8;
  }
  iVar1 = (int)fVar3 - (uint)(fVar3 < (float)(int)fVar3);
  fVar3 = local_18._4_4_;
  if (local_20._4_4_ <= local_18._4_4_) {
    fVar3 = local_20._4_4_;
  }
  if (local_10._4_4_ < fVar3) {
    fVar3 = local_10._4_4_;
  }
  if (uStack_8._4_4_ < fVar3) {
    fVar3 = uStack_8._4_4_;
  }
  iVar2 = (int)fVar3 - (uint)(fVar3 < (float)(int)fVar3);
  if ((float)local_18 <= (float)local_20) {
    local_18._0_4_ = (float)local_20;
  }
  if ((float)local_18 < (float)local_10) {
    local_18._0_4_ = (float)local_10;
  }
  if ((float)local_18 < (float)uStack_8) {
    local_18._0_4_ = (float)uStack_8;
  }
  if (local_18._4_4_ <= local_20._4_4_) {
    local_18._4_4_ = local_20._4_4_;
  }
  if (local_18._4_4_ < local_10._4_4_) {
    local_18._4_4_ = local_10._4_4_;
  }
  if (local_18._4_4_ < uStack_8._4_4_) {
    local_18._4_4_ = uStack_8._4_4_;
  }
  in_x8[2] = (1 - iVar1) +
             (int)(float)local_18 + (uint)((float)(int)(float)local_18 < (float)local_18);
  *in_x8 = iVar1;
  in_x8[1] = iVar2;
  in_x8[3] = (1 - iVar2) + (int)local_18._4_4_ + (uint)((float)(int)local_18._4_4_ < local_18._4_4_)
  ;
  return in_x8;
}


==================================================================

### FUNC 00332fd4 (136 bytes) name=CvMatND

/* CvMatND::CvMatND(cv::Mat const&) */

void __thiscall CvMatND::CvMatND(CvMatND *this,Mat *param_1)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  
  cvInitMatNDHeader(this,*(undefined4 *)(param_1 + 4),*(undefined8 *)(param_1 + 0x40),
                    *(uint *)param_1 & 0xfff,*(undefined8 *)(param_1 + 0x10));
  iVar2 = *(int *)(param_1 + 4);
  if (0 < iVar2) {
    lVar3 = *(long *)(param_1 + 0x48);
    lVar4 = 0;
    do {
      lVar1 = lVar4 + 8;
      *(int *)(this + lVar4 + 0x24) = (int)*(undefined8 *)(lVar3 + lVar4);
      lVar4 = lVar1;
    } while (lVar1 != ((ulong)(iVar2 - 1) + 1) * 8);
  }
  *(uint *)this = *(uint *)this | *(uint *)param_1 & 0x4000;
  return;
}


==================================================================

### FUNC 0033305c (284 bytes) name=_IplImage

/* _IplImage::_IplImage(cv::Mat const&) */

void __thiscall _IplImage::_IplImage(_IplImage *this,Mat *param_1)

{
  uint uVar1;
  undefined2 uVar2;
  char cVar3;
  char *pcVar4;
  uint uVar5;
  undefined8 local_10;
  undefined8 local_8;
  
  if (2 < *(int *)(param_1 + 4)) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)cv::String::allocate((String *)&local_10,0xb);
    cVar3 = s_m_dims_<__2_0046acf8[10];
    uVar2 = s_m_dims_<__2_0046acf8._8_2_;
    *(undefined8 *)pcVar4 = s_m_dims_<__2_0046acf8._0_8_;
    *(undefined2 *)(pcVar4 + 8) = uVar2;
    pcVar4[10] = cVar3;
    cv::error(-0xd7,(String *)&local_10,"_IplImage::_IplImage(const cv::Mat&)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1523);
    cv::String::deallocate((String *)&local_10);
  }
  uVar1 = *(uint *)param_1 & 7;
  if ((uVar1 - 3 < 2) || (uVar5 = 0, uVar1 == 1)) {
    uVar5 = 0x80000000;
  }
  cvInitImageHeader(this,CONCAT44(**(undefined4 **)(param_1 + 0x40),
                                  (*(undefined4 **)(param_1 + 0x40))[1]),
                    uVar5 | ((uint)(0x88442211L >> (ulong)(uVar1 << 2)) & 0xf) << 3,
                    (*(uint *)param_1 >> 3 & 0x1ff) + 1,0,4);
  cvSetData(this,*(undefined8 *)(param_1 + 0x10),**(undefined4 **)(param_1 + 0x48));
  return;
}


==================================================================

### FUNC 0033318c (1116 bytes) name=cvCreateSparseMat

/* cvCreateSparseMat(cv::SparseMat const&) */

undefined8 cvCreateSparseMat(SparseMat *param_1)

{
  ulong uVar1;
  undefined1 *puVar2;
  ulong uVar3;
  int iVar4;
  undefined8 uVar5;
  ulong uVar6;
  long lVar7;
  undefined8 *puVar8;
  ulong uVar9;
  long lVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  undefined8 *puVar14;
  ulong uVar15;
  long lVar16;
  undefined8 uVar17;
  long local_18 [2];
  long local_8;
  
  lVar12 = *(long *)(param_1 + 8);
  if (lVar12 == 0) {
    uVar5 = 0;
  }
  else {
    uVar5 = cvCreateSparseMat(*(undefined4 *)(lVar12 + 4),lVar12 + 0x58,*(uint *)param_1 & 0xfff);
    cv::SparseMatConstIterator::SparseMatConstIterator((SparseMatConstIterator *)local_18,param_1);
    if (*(long *)(param_1 + 8) != 0) {
      lVar12 = *(long *)(*(long *)(param_1 + 8) + 0x18);
      iVar4 = (*(uint *)param_1 >> 3 & 0x1ff) + 1 <<
              (ulong)((uint)(0xfa50L >> ((*(uint *)param_1 & 7) << 1)) & 3);
      uVar15 = (ulong)iVar4;
      if (lVar12 != 0) {
        lVar16 = 0;
        do {
          if ((local_8 == 0) || (local_18[0] == 0)) {
            lVar7 = 0;
          }
          else {
            lVar7 = 0;
            if (*(long *)(local_18[0] + 8) != 0) {
              lVar7 = local_8 - *(int *)(*(long *)(local_18[0] + 8) + 8);
            }
          }
          lVar7 = cvPtrND(uVar5,lVar7 + 0x10,0,0xfffffffe,0);
          if (iVar4 < 4) {
            uVar9 = 0;
LAB_00333288:
            puVar2 = (undefined1 *)(local_8 + uVar9);
            uVar6 = uVar15 - uVar9;
            if ((puVar2 < (undefined1 *)(lVar7 + uVar9 + 0x10) &&
                 (undefined1 *)(lVar7 + uVar9) < (undefined1 *)(local_8 + uVar9 + 0x10)) ||
               (uVar6 < 0x16)) {
              do {
                *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                uVar6 = uVar9 + 1;
                if (uVar15 == uVar6) break;
                *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                uVar9 = uVar9 + 2;
              } while (uVar15 != uVar9);
            }
            else {
              uVar3 = uVar6;
              if ((-(long)puVar2 & 0xfU) < uVar6) {
                uVar3 = -(long)puVar2 & 0xfU;
              }
              uVar11 = uVar9;
              if (uVar3 != 0) {
                *(undefined1 *)(lVar7 + uVar9) = *puVar2;
                uVar11 = uVar9 + 1;
                if (uVar3 != 1) {
                  *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                  uVar11 = uVar9 + 2;
                  if (uVar3 != 2) {
                    *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                    uVar11 = uVar9 + 3;
                    if (uVar3 != 3) {
                      *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                      uVar11 = uVar9 + 4;
                      if (uVar3 != 4) {
                        *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                        uVar11 = uVar9 + 5;
                        if (uVar3 != 5) {
                          *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                          uVar11 = uVar9 + 6;
                          if (uVar3 != 6) {
                            *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                            uVar11 = uVar9 + 7;
                            if (uVar3 != 7) {
                              *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                              uVar11 = uVar9 + 8;
                              if (uVar3 != 8) {
                                *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
                                uVar11 = uVar9 + 9;
                                if (uVar3 != 9) {
                                  *(undefined1 *)(lVar7 + uVar11) =
                                       *(undefined1 *)(local_8 + uVar11);
                                  uVar11 = uVar9 + 10;
                                  if (uVar3 != 10) {
                                    *(undefined1 *)(lVar7 + uVar11) =
                                         *(undefined1 *)(local_8 + uVar11);
                                    uVar11 = uVar9 + 0xb;
                                    if (uVar3 != 0xb) {
                                      *(undefined1 *)(lVar7 + uVar11) =
                                           *(undefined1 *)(local_8 + uVar11);
                                      uVar11 = uVar9 + 0xc;
                                      if (uVar3 != 0xc) {
                                        *(undefined1 *)(lVar7 + uVar11) =
                                             *(undefined1 *)(local_8 + uVar11);
                                        uVar11 = uVar9 + 0xd;
                                        if (uVar3 != 0xd) {
                                          *(undefined1 *)(lVar7 + uVar11) =
                                               *(undefined1 *)(local_8 + uVar11);
                                          uVar11 = uVar9 + 0xe;
                                          if (uVar3 == 0xf) {
                                            *(undefined1 *)(lVar7 + uVar11) =
                                                 *(undefined1 *)(local_8 + uVar11);
                                            uVar11 = uVar9 + 0xf;
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
              uVar1 = ((uVar6 - uVar3) - 0x10 >> 4) + 1;
              lVar10 = uVar1 * 0x10;
              if (0xe < (uVar6 - 1) - uVar3) {
                uVar13 = 0;
                puVar8 = (undefined8 *)(lVar7 + uVar3 + uVar9);
                puVar14 = (undefined8 *)(local_8 + uVar3 + uVar9);
                do {
                  uVar17 = *puVar14;
                  uVar13 = uVar13 + 1;
                  puVar8[1] = puVar14[1];
                  *puVar8 = uVar17;
                  puVar8 = puVar8 + 2;
                  puVar14 = puVar14 + 2;
                } while (uVar13 < uVar1);
                uVar11 = uVar11 + lVar10;
                if (uVar6 - uVar3 == lVar10) goto LAB_0033356c;
              }
              uVar9 = uVar11 + 1;
              *(undefined1 *)(lVar7 + uVar11) = *(undefined1 *)(local_8 + uVar11);
              if (uVar9 < uVar15) {
                uVar6 = uVar11 + 2;
                *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                if (uVar6 < uVar15) {
                  uVar9 = uVar11 + 3;
                  *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                  if (uVar9 < uVar15) {
                    uVar6 = uVar11 + 4;
                    *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                    if (uVar6 < uVar15) {
                      uVar9 = uVar11 + 5;
                      *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                      if (uVar9 < uVar15) {
                        uVar6 = uVar11 + 6;
                        *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                        if (uVar6 < uVar15) {
                          uVar9 = uVar11 + 7;
                          *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                          if (uVar9 < uVar15) {
                            uVar6 = uVar11 + 8;
                            *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                            if (uVar6 < uVar15) {
                              uVar9 = uVar11 + 9;
                              *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                              if (uVar9 < uVar15) {
                                uVar6 = uVar11 + 10;
                                *(undefined1 *)(lVar7 + uVar9) = *(undefined1 *)(local_8 + uVar9);
                                if (uVar6 < uVar15) {
                                  uVar9 = uVar11 + 0xb;
                                  *(undefined1 *)(lVar7 + uVar6) = *(undefined1 *)(local_8 + uVar6);
                                  if (uVar9 < uVar15) {
                                    uVar6 = uVar11 + 0xc;
                                    *(undefined1 *)(lVar7 + uVar9) =
                                         *(undefined1 *)(local_8 + uVar9);
                                    if (uVar6 < uVar15) {
                                      uVar9 = uVar11 + 0xd;
                                      *(undefined1 *)(lVar7 + uVar6) =
                                           *(undefined1 *)(local_8 + uVar6);
                                      if (uVar9 < uVar15) {
                                        uVar11 = uVar11 + 0xe;
                                        *(undefined1 *)(lVar7 + uVar9) =
                                             *(undefined1 *)(local_8 + uVar9);
                                        if (uVar11 < uVar15) {
                                          *(undefined1 *)(lVar7 + uVar11) =
                                               *(undefined1 *)(local_8 + uVar11);
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          else {
            lVar10 = 0;
            uVar6 = 4;
            do {
              uVar9 = uVar6;
              *(undefined4 *)(lVar7 + lVar10) = *(undefined4 *)(local_8 + lVar10);
              lVar10 = lVar10 + 4;
              uVar6 = uVar9 + 4;
            } while (uVar9 + 4 <= uVar15);
            if (uVar9 < uVar15) goto LAB_00333288;
          }
LAB_0033356c:
          lVar16 = lVar16 + 1;
          cv::SparseMatConstIterator::operator++((SparseMatConstIterator *)local_18);
        } while (lVar16 != lVar12);
      }
    }
  }
  return uVar5;
}


==================================================================

### FUNC 003335e8 (1240 bytes) name=copyToSparseMat

/* CvSparseMat::copyToSparseMat(cv::SparseMat&) const */

void __thiscall CvSparseMat::copyToSparseMat(CvSparseMat *this,SparseMat *param_1)

{
  ulong uVar1;
  uint uVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  long *plVar6;
  int *piVar7;
  ulong uVar8;
  ulong uVar9;
  undefined8 *puVar10;
  ulong uVar11;
  long lVar12;
  uint *puVar13;
  long lVar15;
  ulong uVar16;
  ulong uVar17;
  long lVar18;
  ulong uVar19;
  undefined8 *puVar20;
  undefined8 uVar21;
  long local_18;
  long local_10;
  uint local_8;
  uint *puVar14;
  
  cv::SparseMat::create(param_1,*(int *)(this + 4),(int *)(this + 0x34),*(int *)this);
  lVar4 = cvInitSparseMatIterator(this,&local_18);
  iVar3 = (*(uint *)param_1 >> 3 & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> ((*(uint *)param_1 & 7) << 1)) & 3);
  uVar19 = (ulong)iVar3;
  if (lVar4 == 0) {
    return;
  }
  lVar12 = *(long *)(param_1 + 8);
  piVar7 = (int *)(lVar4 + *(int *)(this + 0x30));
  uVar2 = *(uint *)(lVar4 + *(int *)(this + 0x30));
  if (lVar12 == 0) goto LAB_003339fc;
LAB_00333668:
  uVar9 = (ulong)uVar2;
  if (1 < *(int *)(lVar12 + 4)) {
    puVar13 = (uint *)(piVar7 + 1);
    do {
      puVar14 = puVar13 + 1;
      uVar9 = (ulong)*puVar13 + uVar9 * 0x5bd1e995;
      puVar13 = puVar14;
    } while (puVar14 != (uint *)(piVar7 + (ulong)(*(int *)(lVar12 + 4) - 2) + 2));
  }
  lVar5 = cv::SparseMat::newNode(param_1,piVar7,uVar9);
  lVar18 = (long)*(int *)(this + 0x2c);
  lVar12 = lVar4 + lVar18;
  if (iVar3 < 4) goto LAB_00333a18;
LAB_003336b4:
  lVar15 = 0;
  uVar9 = 4;
  do {
    uVar11 = uVar9;
    *(undefined4 *)(lVar5 + lVar15) = *(undefined4 *)(lVar12 + lVar15);
    lVar15 = lVar15 + 4;
    uVar9 = uVar11 + 4;
  } while (uVar11 + 4 <= uVar19);
  if (uVar19 <= uVar11) goto LAB_003339d8;
  do {
    uVar9 = lVar4 + lVar18 + uVar11;
    uVar8 = uVar19 - uVar11;
    if (((undefined1 *)(lVar5 + uVar11) < (undefined1 *)(lVar4 + lVar18 + 0x10 + uVar11) &&
         uVar9 < lVar5 + uVar11 + 0x10) || (uVar8 < 0x16)) {
      do {
        *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
        uVar9 = uVar11 + 1;
        if (uVar19 == uVar9) break;
        *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
        uVar11 = uVar11 + 2;
      } while (uVar19 != uVar11);
    }
    else {
      uVar9 = -uVar9 & 0xf;
      if (uVar8 < uVar9) {
        uVar9 = uVar8;
      }
      uVar16 = uVar11;
      if (uVar9 != 0) {
        *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
        uVar16 = uVar11 + 1;
        if (uVar9 != 1) {
          *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
          uVar16 = uVar11 + 2;
          if (uVar9 != 2) {
            *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
            uVar16 = uVar11 + 3;
            if (uVar9 != 3) {
              *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
              uVar16 = uVar11 + 4;
              if (uVar9 != 4) {
                *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                uVar16 = uVar11 + 5;
                if (uVar9 != 5) {
                  *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                  uVar16 = uVar11 + 6;
                  if (uVar9 != 6) {
                    *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                    uVar16 = uVar11 + 7;
                    if (uVar9 != 7) {
                      *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                      uVar16 = uVar11 + 8;
                      if (uVar9 != 8) {
                        *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                        uVar16 = uVar11 + 9;
                        if (uVar9 != 9) {
                          *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                          uVar16 = uVar11 + 10;
                          if (uVar9 != 10) {
                            *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                            uVar16 = uVar11 + 0xb;
                            if (uVar9 != 0xb) {
                              *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                              uVar16 = uVar11 + 0xc;
                              if (uVar9 != 0xc) {
                                *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
                                uVar16 = uVar11 + 0xd;
                                if (uVar9 != 0xd) {
                                  *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16)
                                  ;
                                  uVar16 = uVar11 + 0xe;
                                  if (uVar9 == 0xf) {
                                    *(undefined1 *)(lVar5 + uVar16) =
                                         *(undefined1 *)(lVar12 + uVar16);
                                    uVar16 = uVar11 + 0xf;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      uVar1 = ((uVar8 - uVar9) - 0x10 >> 4) + 1;
      lVar15 = uVar1 * 0x10;
      if (0xe < (uVar8 - 1) - uVar9) {
        uVar17 = 0;
        puVar10 = (undefined8 *)(lVar5 + uVar9 + uVar11);
        puVar20 = (undefined8 *)(lVar4 + uVar9 + lVar18 + uVar11);
        do {
          uVar21 = *puVar20;
          uVar17 = uVar17 + 1;
          puVar10[1] = puVar20[1];
          *puVar10 = uVar21;
          puVar10 = puVar10 + 2;
          puVar20 = puVar20 + 2;
        } while (uVar17 < uVar1);
        uVar16 = uVar16 + lVar15;
        if (lVar15 - (uVar8 - uVar9) == 0) goto LAB_003339d8;
      }
      uVar9 = uVar16 + 1;
      *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16);
      if (uVar9 < uVar19) {
        uVar11 = uVar16 + 2;
        *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
        if (uVar11 < uVar19) {
          uVar9 = uVar16 + 3;
          *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
          if (uVar9 < uVar19) {
            uVar11 = uVar16 + 4;
            *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
            if (uVar11 < uVar19) {
              uVar9 = uVar16 + 5;
              *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
              if (uVar9 < uVar19) {
                uVar11 = uVar16 + 6;
                *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
                if (uVar11 < uVar19) {
                  uVar9 = uVar16 + 7;
                  *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
                  if (uVar9 < uVar19) {
                    uVar11 = uVar16 + 8;
                    *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
                    if (uVar11 < uVar19) {
                      uVar9 = uVar16 + 9;
                      *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
                      if (uVar9 < uVar19) {
                        uVar11 = uVar16 + 10;
                        *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
                        if (uVar11 < uVar19) {
                          uVar9 = uVar16 + 0xb;
                          *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
                          if (uVar9 < uVar19) {
                            uVar11 = uVar16 + 0xc;
                            *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
                            if (uVar11 < uVar19) {
                              uVar9 = uVar16 + 0xd;
                              *(undefined1 *)(lVar5 + uVar11) = *(undefined1 *)(lVar12 + uVar11);
                              if (uVar9 < uVar19) {
                                uVar16 = uVar16 + 0xe;
                                *(undefined1 *)(lVar5 + uVar9) = *(undefined1 *)(lVar12 + uVar9);
                                if (uVar16 < uVar19) {
                                  *(undefined1 *)(lVar5 + uVar16) = *(undefined1 *)(lVar12 + uVar16)
                                  ;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003339d8:
    lVar4 = *(long *)(local_10 + 8);
    if (lVar4 == 0) {
      local_8 = local_8 + 1;
      uVar9 = (ulong)local_8;
      if ((int)*(uint *)(local_18 + 0x28) <= (int)local_8) {
        return;
      }
      uVar11 = -(ulong)(local_8 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
      plVar6 = (long *)(*(long *)(local_18 + 0x20) + uVar11);
      lVar4 = *(long *)(*(long *)(local_18 + 0x20) + uVar11);
      while (lVar4 == 0) {
        local_8 = (int)uVar9 + 1;
        uVar9 = (ulong)local_8;
        if (local_8 == *(uint *)(local_18 + 0x28)) {
          return;
        }
        plVar6 = plVar6 + 1;
        lVar4 = *plVar6;
      }
    }
    lVar12 = *(long *)(param_1 + 8);
    piVar7 = (int *)(lVar4 + *(int *)(this + 0x30));
    uVar2 = *(uint *)(lVar4 + *(int *)(this + 0x30));
    local_10 = lVar4;
    if (lVar12 != 0) goto LAB_00333668;
LAB_003339fc:
    lVar5 = cv::SparseMat::newNode(param_1,piVar7,0);
    lVar18 = (long)*(int *)(this + 0x2c);
    lVar12 = lVar4 + lVar18;
    if (3 < iVar3) goto LAB_003336b4;
LAB_00333a18:
    uVar11 = 0;
  } while( true );
}


==================================================================

### FUNC 00333ac0 (3288 bytes) name=_M_fill_insert

/* std::vector<cv::Mat, std::allocator<cv::Mat>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<cv::Mat*, std::vector<cv::Mat,
   std::allocator<cv::Mat> > >, unsigned long, cv::Mat const&) */

void __thiscall
std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
          (vector<cv::Mat,std::allocator<cv::Mat>> *this,Mat *param_2,ulong param_3,Mat *param_4)

{
  int *piVar1;
  undefined4 uVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  int iVar6;
  undefined8 *puVar7;
  ulong uVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined4 *puVar11;
  undefined8 uVar12;
  Mat *pMVar13;
  Mat *pMVar14;
  Mat *pMVar15;
  ulong uVar16;
  long lVar17;
  Mat *pMVar18;
  Mat *pMVar19;
  undefined8 local_60;
  undefined8 uStack_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (param_3 == 0) {
    return;
  }
  if (param_3 <= (ulong)((*(long *)(this + 0x10) - *(long *)(this + 8) >> 5) * -0x5555555555555555))
  {
    uStack_58 = *(undefined8 *)(param_4 + 8);
    local_60 = *(ulong *)param_4;
    local_50 = *(undefined8 *)(param_4 + 0x10);
    local_18 = &local_10;
    local_48 = *(undefined8 *)(param_4 + 0x18);
    local_40 = *(undefined8 *)(param_4 + 0x20);
    local_20 = &uStack_58;
    uStack_8 = 0;
    local_10 = 0;
    local_38 = *(undefined8 *)(param_4 + 0x28);
    local_30 = *(undefined8 *)(param_4 + 0x30);
    local_28 = *(long *)(param_4 + 0x38);
    iVar6 = *(int *)(param_4 + 4);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      iVar6 = *(int *)(param_4 + 4);
    }
    if (iVar6 < 3) {
      pMVar13 = *(Mat **)(this + 8);
      local_10 = **(undefined8 **)(param_4 + 0x48);
      lVar17 = (long)pMVar13 - (long)param_2;
      uStack_8 = (*(undefined8 **)(param_4 + 0x48))[1];
    }
    else {
      local_60 = local_60 & 0xffffffff;
      cv::Mat::copySize((Mat *)&local_60,param_4);
      pMVar13 = *(Mat **)(this + 8);
      lVar17 = (long)pMVar13 - (long)param_2;
    }
    if (param_3 < (ulong)((lVar17 >> 5) * -0x5555555555555555)) {
      pMVar18 = pMVar13 + param_3 * -0x60;
      pMVar15 = pMVar18;
      pMVar14 = pMVar13;
      if (pMVar18 != pMVar13) {
        do {
          if (pMVar14 != (Mat *)0x0) {
            *(undefined4 *)pMVar14 = *(undefined4 *)pMVar15;
            uVar12 = *(undefined8 *)(pMVar15 + 0x10);
            *(undefined4 *)(pMVar14 + 4) = *(undefined4 *)(pMVar15 + 4);
            *(undefined4 *)(pMVar14 + 8) = *(undefined4 *)(pMVar15 + 8);
            uVar2 = *(undefined4 *)(pMVar15 + 0xc);
            *(undefined8 *)(pMVar14 + 0x10) = uVar12;
            *(undefined4 *)(pMVar14 + 0xc) = uVar2;
            *(undefined8 *)(pMVar14 + 0x18) = *(undefined8 *)(pMVar15 + 0x18);
            *(undefined8 *)(pMVar14 + 0x20) = *(undefined8 *)(pMVar15 + 0x20);
            *(undefined8 *)(pMVar14 + 0x28) = *(undefined8 *)(pMVar15 + 0x28);
            *(undefined8 *)(pMVar14 + 0x30) = *(undefined8 *)(pMVar15 + 0x30);
            lVar17 = *(long *)(pMVar15 + 0x38);
            *(long *)(pMVar14 + 0x38) = lVar17;
            *(Mat **)(pMVar14 + 0x40) = pMVar14 + 8;
            *(Mat **)(pMVar14 + 0x48) = pMVar14 + 0x50;
            *(undefined8 *)(pMVar14 + 0x58) = 0;
            *(undefined8 *)(pMVar14 + 0x50) = 0;
            if (lVar17 != 0) {
              piVar1 = (int *)(lVar17 + 0x14);
              do {
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = *piVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
            if (*(int *)(pMVar15 + 4) < 3) {
              puVar9 = *(undefined8 **)(pMVar15 + 0x48);
              puVar7 = *(undefined8 **)(pMVar14 + 0x48);
              *puVar7 = *puVar9;
              puVar7[1] = puVar9[1];
            }
            else {
              *(undefined4 *)(pMVar14 + 4) = 0;
              cv::Mat::copySize(pMVar14,pMVar15);
            }
          }
          pMVar15 = pMVar15 + 0x60;
          pMVar14 = pMVar14 + 0x60;
        } while (pMVar13 != pMVar15);
        pMVar15 = *(Mat **)(this + 8);
      }
      *(Mat **)(this + 8) = pMVar15 + param_3 * 0x60;
      pMVar15 = pMVar18;
      if (0 < ((long)pMVar18 - (long)param_2 >> 5) * -0x5555555555555555) {
        do {
          pMVar14 = pMVar13 + -0x60;
          pMVar19 = pMVar15 + -0x60;
          if (pMVar14 != pMVar19) {
            if (*(long *)(pMVar15 + -0x28) != 0) {
              piVar1 = (int *)(*(long *)(pMVar15 + -0x28) + 0x14);
              do {
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = *piVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
            if (*(long *)(pMVar13 + -0x28) == 0) {
LAB_00333d10:
              *(undefined8 *)(pMVar13 + -0x28) = 0;
              *(undefined8 *)(pMVar13 + -0x50) = 0;
              *(undefined8 *)(pMVar13 + -0x38) = 0;
              *(undefined8 *)(pMVar13 + -0x40) = 0;
              *(undefined8 *)(pMVar13 + -0x48) = 0;
              if (0 < *(int *)(pMVar13 + -0x5c)) goto LAB_00333d30;
LAB_0033468c:
              *(undefined4 *)pMVar14 = *(undefined4 *)pMVar19;
LAB_00333d5c:
              if (2 < *(int *)(pMVar15 + -0x5c)) goto LAB_00334640;
              *(int *)(pMVar13 + -0x5c) = *(int *)(pMVar15 + -0x5c);
              puVar9 = *(undefined8 **)(pMVar15 + -0x18);
              *(undefined4 *)(pMVar13 + -0x58) = *(undefined4 *)(pMVar15 + -0x58);
              puVar7 = *(undefined8 **)(pMVar13 + -0x18);
              *(undefined4 *)(pMVar13 + -0x54) = *(undefined4 *)(pMVar15 + -0x54);
              *puVar7 = *puVar9;
              puVar7[1] = puVar9[1];
            }
            else {
              piVar1 = (int *)(*(long *)(pMVar13 + -0x28) + 0x14);
              do {
                iVar6 = *piVar1;
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = iVar6 + -1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
              if (iVar6 != 1) goto LAB_00333d10;
              cv::Mat::deallocate(pMVar14);
              *(undefined8 *)(pMVar13 + -0x28) = 0;
              *(undefined8 *)(pMVar13 + -0x50) = 0;
              *(undefined8 *)(pMVar13 + -0x38) = 0;
              *(undefined8 *)(pMVar13 + -0x40) = 0;
              *(undefined8 *)(pMVar13 + -0x48) = 0;
              if (*(int *)(pMVar13 + -0x5c) < 1) goto LAB_0033468c;
LAB_00333d30:
              iVar6 = 0;
              puVar11 = *(undefined4 **)(pMVar13 + -0x20);
              do {
                *puVar11 = 0;
                iVar6 = iVar6 + 1;
                puVar11 = puVar11 + 1;
              } while (iVar6 < *(int *)(pMVar13 + -0x5c));
              *(undefined4 *)pMVar14 = *(undefined4 *)pMVar19;
              if (*(int *)(pMVar13 + -0x5c) < 3) goto LAB_00333d5c;
LAB_00334640:
              cv::Mat::copySize(pMVar14,pMVar19);
            }
            *(undefined8 *)(pMVar13 + -0x50) = *(undefined8 *)(pMVar15 + -0x50);
            *(undefined8 *)(pMVar13 + -0x48) = *(undefined8 *)(pMVar15 + -0x48);
            *(undefined8 *)(pMVar13 + -0x40) = *(undefined8 *)(pMVar15 + -0x40);
            *(undefined8 *)(pMVar13 + -0x38) = *(undefined8 *)(pMVar15 + -0x38);
            *(undefined8 *)(pMVar13 + -0x30) = *(undefined8 *)(pMVar15 + -0x30);
            *(undefined8 *)(pMVar13 + -0x28) = *(undefined8 *)(pMVar15 + -0x28);
          }
          pMVar13 = pMVar14;
          pMVar15 = pMVar19;
        } while (pMVar19 != pMVar18 + -((long)pMVar18 - (long)param_2));
      }
      pMVar13 = param_2 + param_3 * 0x60;
      lVar17 = local_28;
      for (; param_2 != pMVar13; param_2 = param_2 + 0x60) {
        if (param_2 != (Mat *)&local_60) {
          if (lVar17 != 0) {
            piVar1 = (int *)(lVar17 + 0x14);
            do {
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar4) {
                *piVar1 = *piVar1 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
          if (*(long *)(param_2 + 0x38) == 0) {
LAB_00333e20:
            *(undefined8 *)(param_2 + 0x38) = 0;
            *(undefined8 *)(param_2 + 0x10) = 0;
            *(undefined8 *)(param_2 + 0x28) = 0;
            *(undefined8 *)(param_2 + 0x20) = 0;
            *(undefined8 *)(param_2 + 0x18) = 0;
            if (0 < *(int *)(param_2 + 4)) goto LAB_00333e40;
LAB_003346c0:
            *(undefined4 *)param_2 = (undefined4)local_60;
LAB_00333e6c:
            if (2 < local_60._4_4_) goto LAB_00334630;
            puVar7 = *(undefined8 **)(param_2 + 0x48);
            *(int *)(param_2 + 4) = local_60._4_4_;
            *(undefined4 *)(param_2 + 8) = (undefined4)uStack_58;
            uVar12 = *local_18;
            *(undefined4 *)(param_2 + 0xc) = uStack_58._4_4_;
            *puVar7 = uVar12;
            puVar7[1] = local_18[1];
          }
          else {
            piVar1 = (int *)(*(long *)(param_2 + 0x38) + 0x14);
            do {
              iVar6 = *piVar1;
              cVar3 = '\x01';
              bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar4) {
                *piVar1 = iVar6 + -1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
            if (iVar6 != 1) goto LAB_00333e20;
            cv::Mat::deallocate(param_2);
            *(undefined8 *)(param_2 + 0x38) = 0;
            *(undefined8 *)(param_2 + 0x10) = 0;
            *(undefined8 *)(param_2 + 0x28) = 0;
            *(undefined8 *)(param_2 + 0x20) = 0;
            *(undefined8 *)(param_2 + 0x18) = 0;
            if (*(int *)(param_2 + 4) < 1) goto LAB_003346c0;
LAB_00333e40:
            iVar6 = 0;
            puVar11 = *(undefined4 **)(param_2 + 0x40);
            do {
              *puVar11 = 0;
              iVar6 = iVar6 + 1;
              puVar11 = puVar11 + 1;
            } while (iVar6 < *(int *)(param_2 + 4));
            *(undefined4 *)param_2 = (undefined4)local_60;
            if (*(int *)(param_2 + 4) < 3) goto LAB_00333e6c;
LAB_00334630:
            cv::Mat::copySize(param_2,(Mat *)&local_60);
          }
          *(undefined8 *)(param_2 + 0x10) = local_50;
          *(undefined8 *)(param_2 + 0x18) = local_48;
          *(undefined8 *)(param_2 + 0x20) = local_40;
          *(undefined8 *)(param_2 + 0x28) = local_38;
          *(undefined8 *)(param_2 + 0x30) = local_30;
          *(long *)(param_2 + 0x38) = local_28;
          lVar17 = local_28;
        }
      }
    }
    else {
      lVar5 = param_3 + (lVar17 >> 5) * 0x5555555555555555;
      pMVar15 = pMVar13;
      lVar10 = lVar5;
      if (lVar5 != 0) {
        do {
          if (pMVar15 != (Mat *)0x0) {
            *(undefined4 *)pMVar15 = (undefined4)local_60;
            *(int *)(pMVar15 + 4) = local_60._4_4_;
            *(undefined4 *)(pMVar15 + 8) = (undefined4)uStack_58;
            *(undefined8 *)(pMVar15 + 0x10) = local_50;
            *(undefined4 *)(pMVar15 + 0xc) = uStack_58._4_4_;
            *(undefined8 *)(pMVar15 + 0x18) = local_48;
            *(undefined8 *)(pMVar15 + 0x20) = local_40;
            *(undefined8 *)(pMVar15 + 0x28) = local_38;
            *(undefined8 *)(pMVar15 + 0x30) = local_30;
            *(long *)(pMVar15 + 0x38) = local_28;
            *(Mat **)(pMVar15 + 0x40) = pMVar15 + 8;
            *(Mat **)(pMVar15 + 0x48) = pMVar15 + 0x50;
            *(undefined8 *)(pMVar15 + 0x58) = 0;
            *(undefined8 *)(pMVar15 + 0x50) = 0;
            if (local_28 != 0) {
              piVar1 = (int *)(local_28 + 0x14);
              do {
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = *piVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
            if (local_60._4_4_ < 3) {
              puVar7 = *(undefined8 **)(pMVar15 + 0x48);
              *puVar7 = *local_18;
              puVar7[1] = local_18[1];
            }
            else {
              *(undefined4 *)(pMVar15 + 4) = 0;
              cv::Mat::copySize(pMVar15,(Mat *)&local_60);
            }
          }
          lVar10 = lVar10 + -1;
          pMVar15 = pMVar15 + 0x60;
        } while (lVar10 != 0);
        pMVar15 = *(Mat **)(this + 8);
      }
      pMVar15 = pMVar15 + lVar5 * 0x60;
      *(Mat **)(this + 8) = pMVar15;
      pMVar14 = param_2;
      if (param_2 == pMVar13) {
        *(Mat **)(this + 8) = pMVar15 + lVar17;
        lVar17 = local_28;
      }
      else {
        do {
          if (pMVar15 != (Mat *)0x0) {
            *(undefined4 *)pMVar15 = *(undefined4 *)pMVar14;
            uVar12 = *(undefined8 *)(pMVar14 + 0x10);
            *(undefined4 *)(pMVar15 + 4) = *(undefined4 *)(pMVar14 + 4);
            *(undefined4 *)(pMVar15 + 8) = *(undefined4 *)(pMVar14 + 8);
            uVar2 = *(undefined4 *)(pMVar14 + 0xc);
            *(undefined8 *)(pMVar15 + 0x10) = uVar12;
            *(undefined4 *)(pMVar15 + 0xc) = uVar2;
            *(undefined8 *)(pMVar15 + 0x18) = *(undefined8 *)(pMVar14 + 0x18);
            *(undefined8 *)(pMVar15 + 0x20) = *(undefined8 *)(pMVar14 + 0x20);
            *(undefined8 *)(pMVar15 + 0x28) = *(undefined8 *)(pMVar14 + 0x28);
            *(undefined8 *)(pMVar15 + 0x30) = *(undefined8 *)(pMVar14 + 0x30);
            lVar10 = *(long *)(pMVar14 + 0x38);
            *(long *)(pMVar15 + 0x38) = lVar10;
            *(Mat **)(pMVar15 + 0x40) = pMVar15 + 8;
            *(Mat **)(pMVar15 + 0x48) = pMVar15 + 0x50;
            *(undefined8 *)(pMVar15 + 0x58) = 0;
            *(undefined8 *)(pMVar15 + 0x50) = 0;
            if (lVar10 != 0) {
              piVar1 = (int *)(lVar10 + 0x14);
              do {
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = *piVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
            if (*(int *)(pMVar14 + 4) < 3) {
              puVar9 = *(undefined8 **)(pMVar14 + 0x48);
              puVar7 = *(undefined8 **)(pMVar15 + 0x48);
              *puVar7 = *puVar9;
              puVar7[1] = puVar9[1];
            }
            else {
              *(undefined4 *)(pMVar15 + 4) = 0;
              cv::Mat::copySize(pMVar15,pMVar14);
            }
          }
          pMVar14 = pMVar14 + 0x60;
          pMVar15 = pMVar15 + 0x60;
        } while (pMVar13 != pMVar14);
        *(long *)(this + 8) = *(long *)(this + 8) + lVar17;
        lVar17 = local_28;
        do {
          if (param_2 != (Mat *)&local_60) {
            if (lVar17 != 0) {
              piVar1 = (int *)(lVar17 + 0x14);
              do {
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = *piVar1 + 1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
            }
            if (*(long *)(param_2 + 0x38) == 0) {
LAB_0033456c:
              *(undefined8 *)(param_2 + 0x38) = 0;
              *(undefined8 *)(param_2 + 0x10) = 0;
              *(undefined8 *)(param_2 + 0x28) = 0;
              *(undefined8 *)(param_2 + 0x20) = 0;
              *(undefined8 *)(param_2 + 0x18) = 0;
              if (0 < *(int *)(param_2 + 4)) goto LAB_0033458c;
LAB_0033472c:
              *(undefined4 *)param_2 = (undefined4)local_60;
LAB_003345b8:
              if (2 < local_60._4_4_) goto LAB_003346cc;
              puVar7 = *(undefined8 **)(param_2 + 0x48);
              *(int *)(param_2 + 4) = local_60._4_4_;
              *(undefined4 *)(param_2 + 8) = (undefined4)uStack_58;
              uVar12 = *local_18;
              *(undefined4 *)(param_2 + 0xc) = uStack_58._4_4_;
              *puVar7 = uVar12;
              puVar7[1] = local_18[1];
            }
            else {
              piVar1 = (int *)(*(long *)(param_2 + 0x38) + 0x14);
              do {
                iVar6 = *piVar1;
                cVar3 = '\x01';
                bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar4) {
                  *piVar1 = iVar6 + -1;
                  cVar3 = ExclusiveMonitorsStatus();
                }
              } while (cVar3 != '\0');
              if (iVar6 != 1) goto LAB_0033456c;
              cv::Mat::deallocate(param_2);
              *(undefined8 *)(param_2 + 0x38) = 0;
              *(undefined8 *)(param_2 + 0x10) = 0;
              *(undefined8 *)(param_2 + 0x28) = 0;
              *(undefined8 *)(param_2 + 0x20) = 0;
              *(undefined8 *)(param_2 + 0x18) = 0;
              if (*(int *)(param_2 + 4) < 1) goto LAB_0033472c;
LAB_0033458c:
              iVar6 = 0;
              puVar11 = *(undefined4 **)(param_2 + 0x40);
              do {
                *puVar11 = 0;
                iVar6 = iVar6 + 1;
                puVar11 = puVar11 + 1;
              } while (iVar6 < *(int *)(param_2 + 4));
              *(undefined4 *)param_2 = (undefined4)local_60;
              if (*(int *)(param_2 + 4) < 3) goto LAB_003345b8;
LAB_003346cc:
              cv::Mat::copySize(param_2,(Mat *)&local_60);
            }
            *(undefined8 *)(param_2 + 0x10) = local_50;
            *(undefined8 *)(param_2 + 0x18) = local_48;
            *(undefined8 *)(param_2 + 0x20) = local_40;
            *(undefined8 *)(param_2 + 0x28) = local_38;
            *(undefined8 *)(param_2 + 0x30) = local_30;
            *(long *)(param_2 + 0x38) = local_28;
            lVar17 = local_28;
          }
          param_2 = param_2 + 0x60;
        } while (pMVar13 != param_2);
      }
    }
    if (lVar17 != 0) {
      piVar1 = (int *)(lVar17 + 0x14);
      do {
        iVar6 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar6 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar6 == 1) {
        cv::Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar6 = 0;
      puVar7 = local_20;
      do {
        *(undefined4 *)puVar7 = 0;
        iVar6 = iVar6 + 1;
        puVar7 = (undefined8 *)((long)puVar7 + 4);
      } while (iVar6 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      cv::fastFree(local_18);
    }
    return;
  }
  lVar10 = *(long *)this;
  lVar17 = *(long *)(this + 8) - lVar10 >> 5;
  uVar8 = lVar17 * -0x5555555555555555;
  if (lVar17 * 0x5555555555555555 + 0x2aaaaaaaaaaaaaaU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar16 = uVar8;
  if (uVar8 < param_3) {
    uVar16 = param_3;
  }
  uVar16 = uVar16 + uVar8;
  if ((uVar8 < uVar16 || uVar8 - uVar16 == 0) && (uVar16 < 0x2aaaaaaaaaaaaab)) {
    lVar10 = (long)param_2 - lVar10;
    if (uVar16 == 0) {
      pMVar13 = (Mat *)0x0;
      goto LAB_00333fe0;
    }
    uVar8 = uVar16 * 0x60;
  }
  else {
    lVar10 = (long)param_2 - lVar10;
    uVar8 = 0xffffffffffffffc0;
    uVar16 = 0x2aaaaaaaaaaaaaa;
  }
  pMVar13 = operator_new(uVar8);
LAB_00333fe0:
  pMVar15 = pMVar13 + lVar10;
  uVar8 = param_3;
  do {
    if (pMVar15 != (Mat *)0x0) {
      *(undefined4 *)pMVar15 = *(undefined4 *)param_4;
      uVar12 = *(undefined8 *)(param_4 + 0x10);
      *(undefined4 *)(pMVar15 + 4) = *(undefined4 *)(param_4 + 4);
      *(undefined4 *)(pMVar15 + 8) = *(undefined4 *)(param_4 + 8);
      uVar2 = *(undefined4 *)(param_4 + 0xc);
      *(undefined8 *)(pMVar15 + 0x10) = uVar12;
      *(undefined4 *)(pMVar15 + 0xc) = uVar2;
      *(undefined8 *)(pMVar15 + 0x18) = *(undefined8 *)(param_4 + 0x18);
      *(undefined8 *)(pMVar15 + 0x20) = *(undefined8 *)(param_4 + 0x20);
      *(undefined8 *)(pMVar15 + 0x28) = *(undefined8 *)(param_4 + 0x28);
      *(undefined8 *)(pMVar15 + 0x30) = *(undefined8 *)(param_4 + 0x30);
      lVar17 = *(long *)(param_4 + 0x38);
      *(long *)(pMVar15 + 0x38) = lVar17;
      *(Mat **)(pMVar15 + 0x40) = pMVar15 + 8;
      *(Mat **)(pMVar15 + 0x48) = pMVar15 + 0x50;
      *(undefined8 *)(pMVar15 + 0x58) = 0;
      *(undefined8 *)(pMVar15 + 0x50) = 0;
      if (lVar17 != 0) {
        piVar1 = (int *)(lVar17 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(int *)(param_4 + 4) < 3) {
        puVar9 = *(undefined8 **)(param_4 + 0x48);
        puVar7 = *(undefined8 **)(pMVar15 + 0x48);
        *puVar7 = *puVar9;
        puVar7[1] = puVar9[1];
      }
      else {
        *(undefined4 *)(pMVar15 + 4) = 0;
        cv::Mat::copySize(pMVar15,param_4);
      }
    }
    uVar8 = uVar8 - 1;
    pMVar15 = pMVar15 + 0x60;
  } while (uVar8 != 0);
  pMVar14 = pMVar13;
  for (pMVar15 = *(Mat **)this; param_2 != pMVar15; pMVar15 = pMVar15 + 0x60) {
    if (pMVar14 != (Mat *)0x0) {
      *(undefined4 *)pMVar14 = *(undefined4 *)pMVar15;
      uVar12 = *(undefined8 *)(pMVar15 + 0x10);
      *(undefined4 *)(pMVar14 + 4) = *(undefined4 *)(pMVar15 + 4);
      *(undefined4 *)(pMVar14 + 8) = *(undefined4 *)(pMVar15 + 8);
      uVar2 = *(undefined4 *)(pMVar15 + 0xc);
      *(undefined8 *)(pMVar14 + 0x10) = uVar12;
      *(undefined4 *)(pMVar14 + 0xc) = uVar2;
      *(undefined8 *)(pMVar14 + 0x18) = *(undefined8 *)(pMVar15 + 0x18);
      *(undefined8 *)(pMVar14 + 0x20) = *(undefined8 *)(pMVar15 + 0x20);
      *(undefined8 *)(pMVar14 + 0x28) = *(undefined8 *)(pMVar15 + 0x28);
      *(undefined8 *)(pMVar14 + 0x30) = *(undefined8 *)(pMVar15 + 0x30);
      lVar17 = *(long *)(pMVar15 + 0x38);
      *(long *)(pMVar14 + 0x38) = lVar17;
      *(Mat **)(pMVar14 + 0x40) = pMVar14 + 8;
      *(Mat **)(pMVar14 + 0x48) = pMVar14 + 0x50;
      *(undefined8 *)(pMVar14 + 0x58) = 0;
      *(undefined8 *)(pMVar14 + 0x50) = 0;
      if (lVar17 != 0) {
        piVar1 = (int *)(lVar17 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(int *)(pMVar15 + 4) < 3) {
        puVar9 = *(undefined8 **)(pMVar15 + 0x48);
        puVar7 = *(undefined8 **)(pMVar14 + 0x48);
        *puVar7 = *puVar9;
        puVar7[1] = puVar9[1];
      }
      else {
        *(undefined4 *)(pMVar14 + 4) = 0;
        cv::Mat::copySize(pMVar14,pMVar15);
      }
    }
    pMVar14 = pMVar14 + 0x60;
  }
  pMVar15 = *(Mat **)(this + 8);
  pMVar14 = pMVar14 + param_3 * 0x60;
  if (param_2 != pMVar15) {
    do {
      if (pMVar14 != (Mat *)0x0) {
        *(undefined4 *)pMVar14 = *(undefined4 *)param_2;
        uVar12 = *(undefined8 *)(param_2 + 0x10);
        *(undefined4 *)(pMVar14 + 4) = *(undefined4 *)(param_2 + 4);
        *(undefined4 *)(pMVar14 + 8) = *(undefined4 *)(param_2 + 8);
        uVar2 = *(undefined4 *)(param_2 + 0xc);
        *(undefined8 *)(pMVar14 + 0x10) = uVar12;
        *(undefined4 *)(pMVar14 + 0xc) = uVar2;
        *(undefined8 *)(pMVar14 + 0x18) = *(undefined8 *)(param_2 + 0x18);
        *(undefined8 *)(pMVar14 + 0x20) = *(undefined8 *)(param_2 + 0x20);
        *(undefined8 *)(pMVar14 + 0x28) = *(undefined8 *)(param_2 + 0x28);
        *(undefined8 *)(pMVar14 + 0x30) = *(undefined8 *)(param_2 + 0x30);
        lVar17 = *(long *)(param_2 + 0x38);
        *(long *)(pMVar14 + 0x38) = lVar17;
        *(Mat **)(pMVar14 + 0x40) = pMVar14 + 8;
        *(Mat **)(pMVar14 + 0x48) = pMVar14 + 0x50;
        *(undefined8 *)(pMVar14 + 0x58) = 0;
        *(undefined8 *)(pMVar14 + 0x50) = 0;
        if (lVar17 != 0) {
          piVar1 = (int *)(lVar17 + 0x14);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar4) {
              *piVar1 = *piVar1 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (*(int *)(param_2 + 4) < 3) {
          puVar9 = *(undefined8 **)(param_2 + 0x48);
          puVar7 = *(undefined8 **)(pMVar14 + 0x48);
          *puVar7 = *puVar9;
          puVar7[1] = puVar9[1];
        }
        else {
          *(undefined4 *)(pMVar14 + 4) = 0;
          cv::Mat::copySize(pMVar14,param_2);
        }
      }
      param_2 = param_2 + 0x60;
      pMVar14 = pMVar14 + 0x60;
    } while (pMVar15 != param_2);
    pMVar15 = *(Mat **)(this + 8);
  }
  pMVar18 = *(Mat **)this;
  if (pMVar18 != pMVar15) {
    do {
      if (*(long *)(pMVar18 + 0x38) != 0) {
        piVar1 = (int *)(*(long *)(pMVar18 + 0x38) + 0x14);
        do {
          iVar6 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar6 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar6 == 1) {
          cv::Mat::deallocate(pMVar18);
        }
      }
      *(undefined8 *)(pMVar18 + 0x38) = 0;
      *(undefined8 *)(pMVar18 + 0x10) = 0;
      *(undefined8 *)(pMVar18 + 0x28) = 0;
      *(undefined8 *)(pMVar18 + 0x20) = 0;
      *(undefined8 *)(pMVar18 + 0x18) = 0;
      if (0 < *(int *)(pMVar18 + 4)) {
        iVar6 = 0;
        puVar11 = *(undefined4 **)(pMVar18 + 0x40);
        do {
          *puVar11 = 0;
          iVar6 = iVar6 + 1;
          puVar11 = puVar11 + 1;
        } while (iVar6 < *(int *)(pMVar18 + 4));
      }
      if (*(Mat **)(pMVar18 + 0x48) != pMVar18 + 0x50) {
        cv::fastFree(*(Mat **)(pMVar18 + 0x48));
      }
      pMVar18 = pMVar18 + 0x60;
    } while (pMVar18 != pMVar15);
    pMVar15 = *(Mat **)this;
  }
  if (pMVar15 != (Mat *)0x0) {
    operator_delete(pMVar15);
  }
  *(Mat **)this = pMVar13;
  *(Mat **)(this + 8) = pMVar14;
  *(Mat **)(this + 0x10) = pMVar13 + uVar16 * 0x60;
  return;
}


==================================================================

### FUNC 003349c0 (7972 bytes) name=getMatVector

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_InputArray::getMatVector(std::vector<cv::Mat, std::allocator<cv::Mat> >&) const */

void __thiscall cv::_InputArray::getMatVector(_InputArray *this,vector *param_1)

{
  int iVar1;
  undefined4 uVar2;
  int iVar3;
  uint uVar4;
  char cVar5;
  undefined2 uVar6;
  bool bVar7;
  int iVar8;
  int iVar9;
  char *pcVar10;
  long *plVar11;
  undefined4 *puVar12;
  uint uVar13;
  int *piVar14;
  undefined8 *puVar15;
  long lVar16;
  undefined8 *puVar17;
  int iVar18;
  Mat *pMVar19;
  long lVar20;
  Mat *pMVar21;
  uint *puVar22;
  Mat *pMVar23;
  ulong uVar24;
  long lVar25;
  ulong uVar26;
  long lVar27;
  long *plVar28;
  long lVar29;
  undefined8 uVar30;
  undefined8 uVar31;
  undefined8 uVar32;
  undefined8 uVar33;
  undefined8 uVar34;
  undefined4 local_130;
  undefined4 local_12c;
  int local_128;
  int local_124;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  int local_c0;
  int local_bc;
  int local_b8 [12];
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 uStack_58;
  long local_50;
  long lStack_48;
  long local_40;
  long lStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined8 *local_20;
  long *local_18;
  long local_10;
  long lStack_8;
  
  iVar8 = kind(this);
  uVar13 = *(uint *)this;
  if (iVar8 != 0x10000) {
    if (iVar8 != 0x60000) {
      if (iVar8 != 0x20000) {
        if (iVar8 != 0x30000) {
          if (iVar8 == 0) {
            pMVar19 = *(Mat **)(param_1 + 8);
            pMVar21 = *(Mat **)param_1;
            for (pMVar23 = pMVar21; pMVar23 != pMVar19; pMVar23 = pMVar23 + 0x60) {
              if (*(long *)(pMVar23 + 0x38) != 0) {
                piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
                do {
                  iVar8 = *piVar14;
                  cVar5 = '\x01';
                  bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                  if (bVar7) {
                    *piVar14 = iVar8 + -1;
                    cVar5 = ExclusiveMonitorsStatus();
                  }
                } while (cVar5 != '\0');
                if (iVar8 == 1) {
                  Mat::deallocate(pMVar23);
                }
              }
              *(undefined8 *)(pMVar23 + 0x38) = 0;
              *(undefined8 *)(pMVar23 + 0x10) = 0;
              *(undefined8 *)(pMVar23 + 0x28) = 0;
              *(undefined8 *)(pMVar23 + 0x20) = 0;
              *(undefined8 *)(pMVar23 + 0x18) = 0;
              if (0 < *(int *)(pMVar23 + 4)) {
                iVar8 = 0;
                puVar12 = *(undefined4 **)(pMVar23 + 0x40);
                do {
                  *puVar12 = 0;
                  iVar8 = iVar8 + 1;
                  puVar12 = puVar12 + 1;
                } while (iVar8 < *(int *)(pMVar23 + 4));
              }
              if (*(Mat **)(pMVar23 + 0x48) != pMVar23 + 0x50) {
                fastFree(*(Mat **)(pMVar23 + 0x48));
              }
            }
            *(Mat **)(param_1 + 8) = pMVar21;
            return;
          }
          if (iVar8 != 0x40000) {
            if (iVar8 != 0x50000) {
              if (iVar8 != 0xb0000) {
                local_60 = 0;
                uStack_58 = 0;
                pcVar10 = (char *)String::allocate((String *)&local_60,0x1e);
                uVar6 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
                uVar2 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
                uVar31 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
                uVar30 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
                *(undefined8 *)(pcVar10 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
                *(undefined4 *)(pcVar10 + 0x18) = uVar2;
                *(undefined2 *)(pcVar10 + 0x1c) = uVar6;
                *(undefined8 *)pcVar10 = uVar30;
                *(undefined8 *)(pcVar10 + 8) = uVar31;
                error(-0xd5,(String *)&local_60,
                      "void cv::_InputArray::getMatVector(std::vector<cv::Mat>&) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x54a);
                String::deallocate((String *)&local_60);
                return;
              }
              plVar28 = *(long **)(this + 8);
              local_20 = &uStack_58;
              pMVar23 = *(Mat **)(param_1 + 8);
              local_18 = &local_10;
              lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
              lVar27 = plVar28[1] - *plVar28 >> 4;
              uVar24 = lVar16 * -0x5555555555555555;
              local_60._4_4_ = 0;
              local_60._0_4_ = 0x42ff0000;
              uStack_58 = 0;
              uVar26 = lVar27 * -0x3333333333333333;
              local_50 = 0;
              lStack_48 = 0;
              local_40 = 0;
              lStack_38 = 0;
              local_30 = 0;
              lStack_28 = 0;
              lStack_8 = 0;
              local_10 = 0;
              if (uVar24 < uVar26) {
                std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                          ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                           uVar26 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
              }
              else {
                if (uVar24 <= uVar26) goto LAB_00335a10;
                pMVar21 = (Mat *)(*(long *)param_1 + lVar27 * -0x3333333333333320);
                pMVar19 = pMVar21;
                if (pMVar23 == pMVar21) {
                  *(Mat **)(param_1 + 8) = pMVar21;
                }
                else {
                  do {
                    if (*(long *)(pMVar19 + 0x38) != 0) {
                      piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
                      do {
                        iVar8 = *piVar14;
                        cVar5 = '\x01';
                        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                        if (bVar7) {
                          *piVar14 = iVar8 + -1;
                          cVar5 = ExclusiveMonitorsStatus();
                        }
                      } while (cVar5 != '\0');
                      if (iVar8 == 1) {
                        Mat::deallocate(pMVar19);
                      }
                    }
                    *(undefined8 *)(pMVar19 + 0x38) = 0;
                    *(undefined8 *)(pMVar19 + 0x10) = 0;
                    *(undefined8 *)(pMVar19 + 0x28) = 0;
                    *(undefined8 *)(pMVar19 + 0x20) = 0;
                    *(undefined8 *)(pMVar19 + 0x18) = 0;
                    if (0 < *(int *)(pMVar19 + 4)) {
                      iVar8 = 0;
                      puVar12 = *(undefined4 **)(pMVar19 + 0x40);
                      do {
                        *puVar12 = 0;
                        iVar8 = iVar8 + 1;
                        puVar12 = puVar12 + 1;
                      } while (iVar8 < *(int *)(pMVar19 + 4));
                    }
                    if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
                      fastFree(*(Mat **)(pMVar19 + 0x48));
                    }
                    pMVar19 = pMVar19 + 0x60;
                  } while (pMVar23 != pMVar19);
                  *(Mat **)(param_1 + 8) = pMVar21;
                }
              }
              if (lStack_28 != 0) {
                piVar14 = (int *)(lStack_28 + 0x14);
                do {
                  iVar8 = *piVar14;
                  cVar5 = '\x01';
                  bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                  if (bVar7) {
                    *piVar14 = iVar8 + -1;
                    cVar5 = ExclusiveMonitorsStatus();
                  }
                } while (cVar5 != '\0');
                if (iVar8 == 1) {
                  Mat::deallocate((Mat *)&local_60);
                }
              }
LAB_00335a10:
              lStack_28 = 0;
              local_50 = 0;
              lStack_38 = 0;
              local_40 = 0;
              lStack_48 = 0;
              if (0 < (int)local_60._4_4_) {
                iVar8 = 0;
                puVar15 = local_20;
                do {
                  *(undefined4 *)puVar15 = 0;
                  iVar8 = iVar8 + 1;
                  puVar15 = (undefined8 *)((long)puVar15 + 4);
                } while (iVar8 < (int)local_60._4_4_);
              }
              if (local_18 != &local_10) {
                fastFree(local_18);
              }
              if (uVar26 == 0) {
                return;
              }
              iVar8 = 0;
              lVar16 = 0;
              uVar24 = 0;
              do {
                pMVar23 = (Mat *)(*(long *)param_1 + lVar16);
                UMat::getMat((int)*plVar28 + iVar8);
                if (pMVar23 != (Mat *)&local_60) {
                  if (lStack_28 != 0) {
                    piVar14 = (int *)(lStack_28 + 0x14);
                    do {
                      cVar5 = '\x01';
                      bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                      if (bVar7) {
                        *piVar14 = *piVar14 + 1;
                        cVar5 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar5 != '\0');
                  }
                  if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_00335adc:
                    *(undefined8 *)(pMVar23 + 0x38) = 0;
                    *(undefined8 *)(pMVar23 + 0x10) = 0;
                    *(undefined8 *)(pMVar23 + 0x28) = 0;
                    *(undefined8 *)(pMVar23 + 0x20) = 0;
                    *(undefined8 *)(pMVar23 + 0x18) = 0;
                    if (0 < *(int *)(pMVar23 + 4)) goto LAB_00335afc;
LAB_00335c58:
                    *(uint *)pMVar23 = (uint)local_60;
LAB_00335b28:
                    if (2 < (int)local_60._4_4_) goto LAB_00335c20;
                    *(uint *)(pMVar23 + 4) = local_60._4_4_;
                    *(undefined4 *)(pMVar23 + 8) = (undefined4)uStack_58;
                    plVar11 = *(long **)(pMVar23 + 0x48);
                    *(undefined4 *)(pMVar23 + 0xc) = uStack_58._4_4_;
                    *plVar11 = *local_18;
                    plVar11[1] = local_18[1];
                  }
                  else {
                    piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
                    do {
                      iVar9 = *piVar14;
                      cVar5 = '\x01';
                      bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                      if (bVar7) {
                        *piVar14 = iVar9 + -1;
                        cVar5 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar5 != '\0');
                    if (iVar9 != 1) goto LAB_00335adc;
                    Mat::deallocate(pMVar23);
                    *(undefined8 *)(pMVar23 + 0x38) = 0;
                    *(undefined8 *)(pMVar23 + 0x10) = 0;
                    *(undefined8 *)(pMVar23 + 0x28) = 0;
                    *(undefined8 *)(pMVar23 + 0x20) = 0;
                    *(undefined8 *)(pMVar23 + 0x18) = 0;
                    if (*(int *)(pMVar23 + 4) < 1) goto LAB_00335c58;
LAB_00335afc:
                    iVar9 = 0;
                    puVar12 = *(undefined4 **)(pMVar23 + 0x40);
                    do {
                      *puVar12 = 0;
                      iVar9 = iVar9 + 1;
                      puVar12 = puVar12 + 1;
                    } while (iVar9 < *(int *)(pMVar23 + 4));
                    *(uint *)pMVar23 = (uint)local_60;
                    if (*(int *)(pMVar23 + 4) < 3) goto LAB_00335b28;
LAB_00335c20:
                    Mat::copySize(pMVar23,(Mat *)&local_60);
                  }
                  *(long *)(pMVar23 + 0x18) = lStack_48;
                  *(long *)(pMVar23 + 0x10) = local_50;
                  *(long *)(pMVar23 + 0x28) = lStack_38;
                  *(long *)(pMVar23 + 0x20) = local_40;
                  *(long *)(pMVar23 + 0x38) = lStack_28;
                  *(undefined8 *)(pMVar23 + 0x30) = local_30;
                }
                if (lStack_28 != 0) {
                  piVar14 = (int *)(lStack_28 + 0x14);
                  do {
                    iVar9 = *piVar14;
                    cVar5 = '\x01';
                    bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                    if (bVar7) {
                      *piVar14 = iVar9 + -1;
                      cVar5 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar5 != '\0');
                  if (iVar9 == 1) {
                    Mat::deallocate((Mat *)&local_60);
                  }
                }
                lStack_28 = 0;
                local_50 = 0;
                lStack_38 = 0;
                local_40 = 0;
                lStack_48 = 0;
                if (0 < (int)local_60._4_4_) {
                  iVar9 = 0;
                  puVar15 = local_20;
                  do {
                    *(undefined4 *)puVar15 = 0;
                    iVar9 = iVar9 + 1;
                    puVar15 = (undefined8 *)((long)puVar15 + 4);
                  } while (iVar9 < (int)local_60._4_4_);
                }
                if (local_18 != &local_10) {
                  fastFree(local_18);
                }
                uVar24 = uVar24 + 1;
                lVar16 = lVar16 + 0x60;
                iVar8 = iVar8 + 0x50;
                if (uVar24 == uVar26) {
                  return;
                }
              } while( true );
            }
            plVar28 = *(long **)(this + 8);
            pMVar23 = *(Mat **)(param_1 + 8);
            local_20 = &uStack_58;
            lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
            local_18 = &local_10;
            uVar24 = (plVar28[1] - *plVar28 >> 5) * -0x5555555555555555;
            local_60 = 0x42ff0000;
            bVar7 = (ulong)(lVar16 * -0x5555555555555555) <= uVar24;
            uStack_58 = 0;
            local_50 = 0;
            lStack_48 = 0;
            local_40 = 0;
            lStack_38 = 0;
            local_30 = 0;
            lStack_28 = 0;
            lStack_8 = 0;
            local_10 = 0;
            if (bVar7 && uVar24 + lVar16 * 0x5555555555555555 != 0) {
              std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                        ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                         uVar24 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
            }
            else {
              if (bVar7) goto LAB_00336064;
              pMVar21 = (Mat *)(*(long *)param_1 + (plVar28[1] - *plVar28));
              pMVar19 = pMVar21;
              if (pMVar23 == pMVar21) {
                *(Mat **)(param_1 + 8) = pMVar21;
              }
              else {
                do {
                  if (*(long *)(pMVar19 + 0x38) != 0) {
                    piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
                    do {
                      iVar8 = *piVar14;
                      cVar5 = '\x01';
                      bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                      if (bVar7) {
                        *piVar14 = iVar8 + -1;
                        cVar5 = ExclusiveMonitorsStatus();
                      }
                    } while (cVar5 != '\0');
                    if (iVar8 == 1) {
                      Mat::deallocate(pMVar19);
                    }
                  }
                  *(undefined8 *)(pMVar19 + 0x38) = 0;
                  *(undefined8 *)(pMVar19 + 0x10) = 0;
                  *(undefined8 *)(pMVar19 + 0x28) = 0;
                  *(undefined8 *)(pMVar19 + 0x20) = 0;
                  *(undefined8 *)(pMVar19 + 0x18) = 0;
                  if (0 < *(int *)(pMVar19 + 4)) {
                    iVar8 = 0;
                    puVar12 = *(undefined4 **)(pMVar19 + 0x40);
                    do {
                      *puVar12 = 0;
                      iVar8 = iVar8 + 1;
                      puVar12 = puVar12 + 1;
                    } while (iVar8 < *(int *)(pMVar19 + 4));
                  }
                  if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
                    fastFree(*(Mat **)(pMVar19 + 0x48));
                  }
                  pMVar19 = pMVar19 + 0x60;
                } while (pMVar23 != pMVar19);
                *(Mat **)(param_1 + 8) = pMVar21;
              }
            }
            if (lStack_28 != 0) {
              piVar14 = (int *)(lStack_28 + 0x14);
              do {
                iVar8 = *piVar14;
                cVar5 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                if (bVar7) {
                  *piVar14 = iVar8 + -1;
                  cVar5 = ExclusiveMonitorsStatus();
                }
              } while (cVar5 != '\0');
              if (iVar8 == 1) {
                Mat::deallocate((Mat *)&local_60);
              }
            }
LAB_00336064:
            lStack_28 = 0;
            local_50 = 0;
            lStack_38 = 0;
            local_40 = 0;
            lStack_48 = 0;
            if (0 < (int)local_60._4_4_) {
              iVar8 = 0;
              puVar15 = local_20;
              do {
                *(undefined4 *)puVar15 = 0;
                iVar8 = iVar8 + 1;
                puVar15 = (undefined8 *)((long)puVar15 + 4);
              } while (iVar8 < (int)local_60._4_4_);
            }
            if (local_18 != &local_10) {
              fastFree(local_18);
            }
            if (uVar24 == 0) {
              return;
            }
            lVar16 = 0;
            uVar26 = 0;
            do {
              pMVar23 = (Mat *)(*(long *)param_1 + lVar16);
              pMVar19 = (Mat *)(*plVar28 + lVar16);
              if (pMVar23 != pMVar19) {
                if (*(long *)(pMVar19 + 0x38) != 0) {
                  piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
                  do {
                    cVar5 = '\x01';
                    bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                    if (bVar7) {
                      *piVar14 = *piVar14 + 1;
                      cVar5 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar5 != '\0');
                }
                if (*(long *)(pMVar23 + 0x38) != 0) {
                  piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
                  do {
                    iVar8 = *piVar14;
                    cVar5 = '\x01';
                    bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                    if (bVar7) {
                      *piVar14 = iVar8 + -1;
                      cVar5 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar5 != '\0');
                  if (iVar8 == 1) {
                    Mat::deallocate(pMVar23);
                  }
                }
                *(undefined8 *)(pMVar23 + 0x38) = 0;
                *(undefined8 *)(pMVar23 + 0x10) = 0;
                *(undefined8 *)(pMVar23 + 0x28) = 0;
                *(undefined8 *)(pMVar23 + 0x20) = 0;
                *(undefined8 *)(pMVar23 + 0x18) = 0;
                if (*(int *)(pMVar23 + 4) < 1) {
                  *(undefined4 *)pMVar23 = *(undefined4 *)pMVar19;
LAB_0033616c:
                  iVar8 = *(int *)(pMVar19 + 4);
                  if (2 < iVar8) goto LAB_003363c8;
                  puVar17 = *(undefined8 **)(pMVar19 + 0x48);
                  puVar15 = *(undefined8 **)(pMVar23 + 0x48);
                  uVar2 = *(undefined4 *)(pMVar19 + 8);
                  *(undefined4 *)(pMVar23 + 0xc) = *(undefined4 *)(pMVar19 + 0xc);
                  *(int *)(pMVar23 + 4) = iVar8;
                  *(undefined4 *)(pMVar23 + 8) = uVar2;
                  *puVar15 = *puVar17;
                  puVar15[1] = puVar17[1];
                }
                else {
                  iVar8 = 0;
                  puVar12 = *(undefined4 **)(pMVar23 + 0x40);
                  do {
                    *puVar12 = 0;
                    iVar8 = iVar8 + 1;
                    puVar12 = puVar12 + 1;
                  } while (iVar8 < *(int *)(pMVar23 + 4));
                  *(undefined4 *)pMVar23 = *(undefined4 *)pMVar19;
                  if (*(int *)(pMVar23 + 4) < 3) goto LAB_0033616c;
LAB_003363c8:
                  Mat::copySize(pMVar23,pMVar19);
                }
                uVar34 = *(undefined8 *)(pMVar19 + 0x10);
                uVar33 = *(undefined8 *)(pMVar19 + 0x28);
                uVar32 = *(undefined8 *)(pMVar19 + 0x20);
                uVar31 = *(undefined8 *)(pMVar19 + 0x38);
                uVar30 = *(undefined8 *)(pMVar19 + 0x30);
                *(undefined8 *)(pMVar23 + 0x18) = *(undefined8 *)(pMVar19 + 0x18);
                *(undefined8 *)(pMVar23 + 0x10) = uVar34;
                *(undefined8 *)(pMVar23 + 0x28) = uVar33;
                *(undefined8 *)(pMVar23 + 0x20) = uVar32;
                *(undefined8 *)(pMVar23 + 0x38) = uVar31;
                *(undefined8 *)(pMVar23 + 0x30) = uVar30;
              }
              uVar26 = uVar26 + 1;
              lVar16 = lVar16 + 0x60;
              if (uVar26 == uVar24) {
                return;
              }
            } while( true );
          }
          plVar28 = *(long **)(this + 8);
          pMVar23 = *(Mat **)(param_1 + 8);
          local_20 = &uStack_58;
          local_18 = &local_10;
          lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
          uVar26 = lVar16 * -0x5555555555555555;
          iVar8 = (int)(plVar28[1] - *plVar28 >> 3) * -0x55555555;
          local_60._4_4_ = 0;
          local_60._0_4_ = 0x42ff0000;
          uVar24 = (ulong)iVar8;
          uStack_58 = 0;
          local_50 = 0;
          lStack_48 = 0;
          local_40 = 0;
          lStack_38 = 0;
          local_30 = 0;
          lStack_28 = 0;
          lStack_8 = 0;
          local_10 = 0;
          if (uVar26 < uVar24) {
            std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                      ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                       uVar24 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
          }
          else {
            if (uVar26 <= uVar24) goto LAB_00335cfc;
            pMVar21 = (Mat *)(*(long *)param_1 + uVar24 * 0x60);
            pMVar19 = pMVar21;
            if (pMVar23 == pMVar21) {
              *(Mat **)(param_1 + 8) = pMVar21;
            }
            else {
              do {
                if (*(long *)(pMVar19 + 0x38) != 0) {
                  piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
                  do {
                    iVar9 = *piVar14;
                    cVar5 = '\x01';
                    bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                    if (bVar7) {
                      *piVar14 = iVar9 + -1;
                      cVar5 = ExclusiveMonitorsStatus();
                    }
                  } while (cVar5 != '\0');
                  if (iVar9 == 1) {
                    Mat::deallocate(pMVar19);
                  }
                }
                *(undefined8 *)(pMVar19 + 0x38) = 0;
                *(undefined8 *)(pMVar19 + 0x10) = 0;
                *(undefined8 *)(pMVar19 + 0x28) = 0;
                *(undefined8 *)(pMVar19 + 0x20) = 0;
                *(undefined8 *)(pMVar19 + 0x18) = 0;
                if (0 < *(int *)(pMVar19 + 4)) {
                  iVar9 = 0;
                  puVar12 = *(undefined4 **)(pMVar19 + 0x40);
                  do {
                    *puVar12 = 0;
                    iVar9 = iVar9 + 1;
                    puVar12 = puVar12 + 1;
                  } while (iVar9 < *(int *)(pMVar19 + 4));
                }
                if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
                  fastFree(*(Mat **)(pMVar19 + 0x48));
                }
                pMVar19 = pMVar19 + 0x60;
              } while (pMVar23 != pMVar19);
              *(Mat **)(param_1 + 8) = pMVar21;
            }
          }
          if (lStack_28 != 0) {
            piVar14 = (int *)(lStack_28 + 0x14);
            do {
              iVar9 = *piVar14;
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = iVar9 + -1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
            if (iVar9 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
LAB_00335cfc:
          lStack_28 = 0;
          local_50 = 0;
          lStack_38 = 0;
          local_40 = 0;
          lStack_48 = 0;
          if (0 < (int)local_60._4_4_) {
            iVar9 = 0;
            puVar15 = local_20;
            do {
              *(undefined4 *)puVar15 = 0;
              iVar9 = iVar9 + 1;
              puVar15 = (undefined8 *)((long)puVar15 + 4);
            } while (iVar9 < (int)local_60._4_4_);
          }
          if (local_18 != &local_10) {
            fastFree(local_18);
          }
          if (iVar8 < 1) {
            return;
          }
          uVar4 = (uVar13 & 0xfff) + 0x42ff0000 | 0x4000;
          iVar3 = (uVar13 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3);
          lVar16 = 0;
          lVar27 = (long)iVar3;
          iVar9 = 0;
          do {
            lVar25 = *(long *)param_1;
            lVar29 = lVar16 * 4;
            lVar20 = *plVar28;
            size((int)this);
            local_50 = *(long *)(lVar20 + lVar16);
            pMVar23 = (Mat *)(lVar25 + lVar29);
            local_10 = (long)iVar3 * (long)local_c0;
            uStack_58 = CONCAT44(local_c0,local_bc);
            local_30 = 0;
            lStack_28 = 0;
            local_60._4_4_ = 2;
            local_40 = local_50 + local_10 * local_bc;
            local_20 = &uStack_58;
            local_18 = &local_10;
            lStack_8 = lVar27;
            local_60._0_4_ = uVar4;
            if (pMVar23 != (Mat *)&local_60) {
              lStack_48 = local_50;
              lStack_38 = local_40;
              if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_00335e54:
                *(undefined8 *)(pMVar23 + 0x38) = 0;
                *(undefined8 *)(pMVar23 + 0x10) = 0;
                *(undefined8 *)(pMVar23 + 0x28) = 0;
                *(undefined8 *)(pMVar23 + 0x20) = 0;
                *(undefined8 *)(pMVar23 + 0x18) = 0;
                if (0 < *(int *)(pMVar23 + 4)) goto LAB_00335e74;
LAB_00335fd0:
                *(uint *)(lVar25 + lVar29) = (uint)local_60;
LAB_00335ea0:
                if (2 < (int)local_60._4_4_) goto LAB_00335f98;
                *(uint *)(pMVar23 + 4) = local_60._4_4_;
                *(undefined4 *)(pMVar23 + 8) = (undefined4)uStack_58;
                plVar11 = *(long **)(pMVar23 + 0x48);
                *(undefined4 *)(pMVar23 + 0xc) = uStack_58._4_4_;
                *plVar11 = *local_18;
                plVar11[1] = local_18[1];
              }
              else {
                piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
                do {
                  iVar18 = *piVar14;
                  cVar5 = '\x01';
                  bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                  if (bVar7) {
                    *piVar14 = iVar18 + -1;
                    cVar5 = ExclusiveMonitorsStatus();
                  }
                } while (cVar5 != '\0');
                if (iVar18 != 1) goto LAB_00335e54;
                Mat::deallocate(pMVar23);
                *(undefined8 *)(pMVar23 + 0x38) = 0;
                *(undefined8 *)(pMVar23 + 0x10) = 0;
                *(undefined8 *)(pMVar23 + 0x28) = 0;
                *(undefined8 *)(pMVar23 + 0x20) = 0;
                *(undefined8 *)(pMVar23 + 0x18) = 0;
                if (*(int *)(pMVar23 + 4) < 1) goto LAB_00335fd0;
LAB_00335e74:
                iVar18 = 0;
                puVar12 = *(undefined4 **)(pMVar23 + 0x40);
                do {
                  *puVar12 = 0;
                  iVar18 = iVar18 + 1;
                  iVar1 = *(int *)(pMVar23 + 4);
                  puVar12 = puVar12 + 1;
                } while (iVar18 < iVar1);
                *(uint *)(lVar25 + lVar29) = (uint)local_60;
                if (iVar1 < 3) goto LAB_00335ea0;
LAB_00335f98:
                Mat::copySize(pMVar23,(Mat *)&local_60);
              }
              *(long *)(pMVar23 + 0x10) = local_50;
              *(long *)(pMVar23 + 0x18) = lStack_48;
              *(long *)(pMVar23 + 0x20) = local_40;
              *(long *)(pMVar23 + 0x28) = lStack_38;
              *(undefined8 *)(pMVar23 + 0x30) = local_30;
              *(long *)(pMVar23 + 0x38) = lStack_28;
              if (lStack_28 != 0) {
                piVar14 = (int *)(lStack_28 + 0x14);
                do {
                  iVar18 = *piVar14;
                  cVar5 = '\x01';
                  bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                  if (bVar7) {
                    *piVar14 = iVar18 + -1;
                    cVar5 = ExclusiveMonitorsStatus();
                  }
                } while (cVar5 != '\0');
                if (iVar18 == 1) {
                  Mat::deallocate((Mat *)&local_60);
                }
              }
            }
            lStack_28 = 0;
            local_50 = 0;
            lStack_38 = 0;
            local_40 = 0;
            lStack_48 = 0;
            if (0 < (int)local_60._4_4_) {
              iVar18 = 0;
              puVar15 = local_20;
              do {
                *(undefined4 *)puVar15 = 0;
                iVar18 = iVar18 + 1;
                puVar15 = (undefined8 *)((long)puVar15 + 4);
              } while (iVar18 < (int)local_60._4_4_);
            }
            if (local_18 != &local_10) {
              fastFree(local_18);
            }
            iVar9 = iVar9 + 1;
            lVar16 = lVar16 + 0x18;
            if (iVar9 == iVar8) {
              return;
            }
          } while( true );
        }
        plVar28 = *(long **)(this + 8);
        iVar8 = (uVar13 >> 3 & 0x1ff) + 1;
        pMVar23 = *(Mat **)(param_1 + 8);
        lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
        uVar26 = plVar28[1] - *plVar28;
        local_20 = &uStack_58;
        uVar4 = (uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3;
        local_18 = &local_10;
        local_60 = 0x42ff0000;
        uVar24 = lVar16 * -0x5555555555555555;
        uStack_58 = 0;
        local_50 = 0;
        lStack_48 = 0;
        local_40 = 0;
        lStack_38 = 0;
        local_30 = 0;
        lStack_28 = 0;
        lStack_8 = 0;
        local_10 = 0;
        if (uVar24 < uVar26) {
          std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                    ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                     uVar26 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
        }
        else {
          if (uVar24 <= uVar26) goto LAB_003356dc;
          pMVar21 = (Mat *)(*(long *)param_1 + uVar26 * 0x60);
          pMVar19 = pMVar21;
          if (pMVar23 == pMVar21) {
            *(Mat **)(param_1 + 8) = pMVar21;
          }
          else {
            do {
              if (*(long *)(pMVar19 + 0x38) != 0) {
                piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
                do {
                  iVar9 = *piVar14;
                  cVar5 = '\x01';
                  bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                  if (bVar7) {
                    *piVar14 = iVar9 + -1;
                    cVar5 = ExclusiveMonitorsStatus();
                  }
                } while (cVar5 != '\0');
                if (iVar9 == 1) {
                  Mat::deallocate(pMVar19);
                }
              }
              *(undefined8 *)(pMVar19 + 0x38) = 0;
              *(undefined8 *)(pMVar19 + 0x10) = 0;
              *(undefined8 *)(pMVar19 + 0x28) = 0;
              *(undefined8 *)(pMVar19 + 0x20) = 0;
              *(undefined8 *)(pMVar19 + 0x18) = 0;
              if (0 < *(int *)(pMVar19 + 4)) {
                iVar9 = 0;
                puVar12 = *(undefined4 **)(pMVar19 + 0x40);
                do {
                  *puVar12 = 0;
                  iVar9 = iVar9 + 1;
                  puVar12 = puVar12 + 1;
                } while (iVar9 < *(int *)(pMVar19 + 4));
              }
              if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
                fastFree(*(Mat **)(pMVar19 + 0x48));
              }
              pMVar19 = pMVar19 + 0x60;
            } while (pMVar23 != pMVar19);
            *(Mat **)(param_1 + 8) = pMVar21;
          }
        }
        if (lStack_28 != 0) {
          piVar14 = (int *)(lStack_28 + 0x14);
          do {
            iVar9 = *piVar14;
            cVar5 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
            if (bVar7) {
              *piVar14 = iVar9 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar9 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
LAB_003356dc:
        lStack_28 = 0;
        local_50 = 0;
        lStack_38 = 0;
        local_40 = 0;
        lStack_48 = 0;
        if (0 < (int)local_60._4_4_) {
          iVar9 = 0;
          puVar15 = local_20;
          do {
            *(undefined4 *)puVar15 = 0;
            iVar9 = iVar9 + 1;
            puVar15 = (undefined8 *)((long)puVar15 + 4);
          } while (iVar9 < (int)local_60._4_4_);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
        if (uVar26 == 0) {
          return;
        }
        iVar9 = 1 << (ulong)uVar4;
        lVar27 = 0;
        lVar16 = 0;
        uVar24 = 0;
        lVar20 = (long)iVar9 * (long)iVar8;
        lVar25 = (long)iVar9;
        do {
          local_50 = *plVar28 + lVar27;
          pMVar23 = (Mat *)(*(long *)param_1 + lVar16);
          uStack_58 = CONCAT44(iVar8,1);
          local_40 = local_50 + lVar20;
          local_30 = 0;
          lStack_28 = 0;
          local_60 = CONCAT44(2,(uVar13 & 7) + 0x42ff0000) | 0x4000;
          local_20 = &uStack_58;
          local_18 = &local_10;
          local_10 = lVar20;
          lStack_8 = lVar25;
          if (pMVar23 != (Mat *)&local_60) {
            lStack_48 = local_50;
            lStack_38 = local_40;
            if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_003357f0:
              *(undefined8 *)(pMVar23 + 0x38) = 0;
              *(undefined8 *)(pMVar23 + 0x10) = 0;
              *(undefined8 *)(pMVar23 + 0x28) = 0;
              *(undefined8 *)(pMVar23 + 0x20) = 0;
              *(undefined8 *)(pMVar23 + 0x18) = 0;
              if (0 < *(int *)(pMVar23 + 4)) goto LAB_00335810;
LAB_00335974:
              *(uint *)pMVar23 = (uint)local_60;
LAB_0033583c:
              if (2 < (int)local_60._4_4_) goto LAB_0033593c;
              *(uint *)(pMVar23 + 4) = local_60._4_4_;
              *(undefined4 *)(pMVar23 + 8) = (undefined4)uStack_58;
              plVar11 = *(long **)(pMVar23 + 0x48);
              *(undefined4 *)(pMVar23 + 0xc) = uStack_58._4_4_;
              *plVar11 = *local_18;
              plVar11[1] = local_18[1];
            }
            else {
              piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
              do {
                iVar9 = *piVar14;
                cVar5 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                if (bVar7) {
                  *piVar14 = iVar9 + -1;
                  cVar5 = ExclusiveMonitorsStatus();
                }
              } while (cVar5 != '\0');
              if (iVar9 != 1) goto LAB_003357f0;
              Mat::deallocate(pMVar23);
              *(undefined8 *)(pMVar23 + 0x38) = 0;
              *(undefined8 *)(pMVar23 + 0x10) = 0;
              *(undefined8 *)(pMVar23 + 0x28) = 0;
              *(undefined8 *)(pMVar23 + 0x20) = 0;
              *(undefined8 *)(pMVar23 + 0x18) = 0;
              if (*(int *)(pMVar23 + 4) < 1) goto LAB_00335974;
LAB_00335810:
              iVar9 = 0;
              puVar12 = *(undefined4 **)(pMVar23 + 0x40);
              do {
                *puVar12 = 0;
                iVar9 = iVar9 + 1;
                puVar12 = puVar12 + 1;
              } while (iVar9 < *(int *)(pMVar23 + 4));
              *(uint *)pMVar23 = (uint)local_60;
              if (*(int *)(pMVar23 + 4) < 3) goto LAB_0033583c;
LAB_0033593c:
              Mat::copySize(pMVar23,(Mat *)&local_60);
            }
            *(long *)(pMVar23 + 0x10) = local_50;
            *(long *)(pMVar23 + 0x18) = lStack_48;
            *(long *)(pMVar23 + 0x20) = local_40;
            *(long *)(pMVar23 + 0x28) = lStack_38;
            *(undefined8 *)(pMVar23 + 0x30) = local_30;
            *(long *)(pMVar23 + 0x38) = lStack_28;
            if (lStack_28 != 0) {
              piVar14 = (int *)(lStack_28 + 0x14);
              do {
                iVar9 = *piVar14;
                cVar5 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                if (bVar7) {
                  *piVar14 = iVar9 + -1;
                  cVar5 = ExclusiveMonitorsStatus();
                }
              } while (cVar5 != '\0');
              if (iVar9 == 1) {
                Mat::deallocate((Mat *)&local_60);
              }
            }
          }
          lStack_28 = 0;
          local_50 = 0;
          lStack_38 = 0;
          local_40 = 0;
          lStack_48 = 0;
          if (0 < (int)local_60._4_4_) {
            iVar9 = 0;
            puVar15 = local_20;
            do {
              *(undefined4 *)puVar15 = 0;
              iVar9 = iVar9 + 1;
              puVar15 = (undefined8 *)((long)puVar15 + 4);
            } while (iVar9 < (int)local_60._4_4_);
          }
          if (local_18 != &local_10) {
            fastFree(local_18);
          }
          uVar24 = uVar24 + 1;
          lVar16 = lVar16 + 0x60;
          lVar27 = lVar27 + (iVar8 << (ulong)uVar4);
          if (uVar24 == uVar26) {
            return;
          }
        } while( true );
      }
      pMVar23 = *(Mat **)(param_1 + 8);
      lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
      local_18 = &local_10;
      uStack_58 = _UNK_00336b28;
      local_60 = _DAT_00336b20;
      local_20 = &uStack_58;
      local_50 = 0;
      lStack_48 = 0;
      local_40 = 0;
      lStack_38 = 0;
      local_30 = 0;
      lStack_28 = 0;
      uVar26 = (ulong)*(int *)(this + 0x14);
      lStack_8 = 0;
      local_10 = 0;
      uVar24 = lVar16 * -0x5555555555555555;
      if (uVar24 < uVar26) {
        std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                  ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                   uVar26 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
      }
      else {
        if (uVar24 <= uVar26) goto LAB_00335378;
        pMVar21 = (Mat *)(*(long *)param_1 + uVar26 * 0x60);
        pMVar19 = pMVar21;
        if (pMVar23 == pMVar21) {
          *(Mat **)(param_1 + 8) = pMVar21;
        }
        else {
          do {
            if (*(long *)(pMVar19 + 0x38) != 0) {
              piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
              do {
                iVar8 = *piVar14;
                cVar5 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
                if (bVar7) {
                  *piVar14 = iVar8 + -1;
                  cVar5 = ExclusiveMonitorsStatus();
                }
              } while (cVar5 != '\0');
              if (iVar8 == 1) {
                Mat::deallocate(pMVar19);
              }
            }
            *(undefined8 *)(pMVar19 + 0x38) = 0;
            *(undefined8 *)(pMVar19 + 0x10) = 0;
            *(undefined8 *)(pMVar19 + 0x28) = 0;
            *(undefined8 *)(pMVar19 + 0x20) = 0;
            *(undefined8 *)(pMVar19 + 0x18) = 0;
            if (0 < *(int *)(pMVar19 + 4)) {
              iVar8 = 0;
              puVar12 = *(undefined4 **)(pMVar19 + 0x40);
              do {
                *puVar12 = 0;
                iVar8 = iVar8 + 1;
                puVar12 = puVar12 + 1;
              } while (iVar8 < *(int *)(pMVar19 + 4));
            }
            if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
              fastFree(*(Mat **)(pMVar19 + 0x48));
            }
            pMVar19 = pMVar19 + 0x60;
          } while (pMVar23 != pMVar19);
          *(Mat **)(param_1 + 8) = pMVar21;
        }
      }
      if (lStack_28 != 0) {
        piVar14 = (int *)(lStack_28 + 0x14);
        do {
          iVar8 = *piVar14;
          cVar5 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar7) {
            *piVar14 = iVar8 + -1;
            cVar5 = ExclusiveMonitorsStatus();
          }
        } while (cVar5 != '\0');
        if (iVar8 == 1) {
          Mat::deallocate((Mat *)&local_60);
        }
      }
LAB_00335378:
      lStack_28 = 0;
      local_50 = 0;
      lStack_38 = 0;
      local_40 = 0;
      lStack_48 = 0;
      if (0 < (int)local_60._4_4_) {
        iVar8 = 0;
        puVar15 = local_20;
        do {
          *(undefined4 *)puVar15 = 0;
          iVar8 = iVar8 + 1;
          puVar15 = (undefined8 *)((long)puVar15 + 4);
        } while (iVar8 < (int)local_60._4_4_);
      }
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      if (uVar26 == 0) {
        return;
      }
      lVar16 = 0;
      uVar24 = 0;
      do {
        uVar4 = *(uint *)this;
        iVar8 = *(int *)(this + 0x10);
        iVar9 = (uVar4 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3);
        local_50 = *(long *)(this + 8) +
                   (long)(int)((uVar13 >> 3 & 0x1ff) + 1 <<
                              (ulong)((uint)(0xfa50L >> ((uVar13 & 7) << 1)) & 3)) * (long)iVar8 *
                   uVar24;
        uStack_58 = CONCAT44(iVar8,1);
        pMVar23 = (Mat *)(*(long *)param_1 + lVar16);
        lStack_8 = (long)iVar9;
        local_30 = 0;
        lStack_28 = 0;
        local_10 = (long)iVar9 * (long)iVar8;
        local_60 = CONCAT44(2,(uVar4 & 0xfff) + 0x42ff0000) | 0x4000;
        local_40 = local_50 + local_10;
        local_20 = &uStack_58;
        local_18 = &local_10;
        if (pMVar23 != (Mat *)&local_60) {
          lStack_48 = local_50;
          lStack_38 = local_40;
          if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_003354a0:
            *(undefined8 *)(pMVar23 + 0x38) = 0;
            *(undefined8 *)(pMVar23 + 0x10) = 0;
            *(undefined8 *)(pMVar23 + 0x28) = 0;
            *(undefined8 *)(pMVar23 + 0x20) = 0;
            *(undefined8 *)(pMVar23 + 0x18) = 0;
            if (0 < *(int *)(pMVar23 + 4)) goto LAB_003354c0;
LAB_00335618:
            *(uint *)pMVar23 = (uint)local_60;
LAB_003354ec:
            if (2 < (int)local_60._4_4_) goto LAB_003355e0;
            *(uint *)(pMVar23 + 4) = local_60._4_4_;
            *(undefined4 *)(pMVar23 + 8) = (undefined4)uStack_58;
            plVar28 = *(long **)(pMVar23 + 0x48);
            *(undefined4 *)(pMVar23 + 0xc) = uStack_58._4_4_;
            *plVar28 = *local_18;
            plVar28[1] = local_18[1];
          }
          else {
            piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
            do {
              iVar8 = *piVar14;
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = iVar8 + -1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
            if (iVar8 != 1) goto LAB_003354a0;
            Mat::deallocate(pMVar23);
            *(undefined8 *)(pMVar23 + 0x38) = 0;
            *(undefined8 *)(pMVar23 + 0x10) = 0;
            *(undefined8 *)(pMVar23 + 0x28) = 0;
            *(undefined8 *)(pMVar23 + 0x20) = 0;
            *(undefined8 *)(pMVar23 + 0x18) = 0;
            if (*(int *)(pMVar23 + 4) < 1) goto LAB_00335618;
LAB_003354c0:
            iVar8 = 0;
            puVar12 = *(undefined4 **)(pMVar23 + 0x40);
            do {
              *puVar12 = 0;
              iVar8 = iVar8 + 1;
              puVar12 = puVar12 + 1;
            } while (iVar8 < *(int *)(pMVar23 + 4));
            *(uint *)pMVar23 = (uint)local_60;
            if (*(int *)(pMVar23 + 4) < 3) goto LAB_003354ec;
LAB_003355e0:
            Mat::copySize(pMVar23,(Mat *)&local_60);
          }
          *(long *)(pMVar23 + 0x10) = local_50;
          *(long *)(pMVar23 + 0x18) = lStack_48;
          *(long *)(pMVar23 + 0x20) = local_40;
          *(long *)(pMVar23 + 0x28) = lStack_38;
          *(undefined8 *)(pMVar23 + 0x30) = local_30;
          *(long *)(pMVar23 + 0x38) = lStack_28;
          if (lStack_28 != 0) {
            piVar14 = (int *)(lStack_28 + 0x14);
            do {
              iVar8 = *piVar14;
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = iVar8 + -1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
            if (iVar8 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
        }
        lStack_28 = 0;
        local_50 = 0;
        lStack_38 = 0;
        local_40 = 0;
        lStack_48 = 0;
        if (0 < (int)local_60._4_4_) {
          iVar8 = 0;
          puVar15 = local_20;
          do {
            *(undefined4 *)puVar15 = 0;
            iVar8 = iVar8 + 1;
            puVar15 = (undefined8 *)((long)puVar15 + 4);
          } while (iVar8 < (int)local_60._4_4_);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
        uVar24 = uVar24 + 1;
        lVar16 = lVar16 + 0x60;
        if (uVar26 == uVar24) {
          return;
        }
      } while( true );
    }
    local_b8[2] = 0;
    local_b8[3] = 0;
    local_78 = &local_70;
    local_b8[4] = 0;
    local_b8[5] = 0;
    local_80 = local_b8;
    local_b8[6] = 0;
    local_b8[7] = 0;
    local_b8[8] = 0;
    local_b8[9] = 0;
    local_b8[10] = 0;
    local_b8[0xb] = 0;
    local_88 = 0;
    local_c0 = 0x42ff0000;
    plVar28 = (long *)**(undefined8 **)(this + 8);
    local_bc = 0;
    local_b8[0] = 0;
    local_b8[1] = 0;
    local_68 = 0;
    local_70 = 0;
    (**(code **)(*plVar28 + 0x18))(plVar28,*(undefined8 **)(this + 8),(Mat *)&local_c0,0xffffffff);
    pMVar23 = *(Mat **)(param_1 + 8);
    local_20 = &uStack_58;
    local_18 = &local_10;
    lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
    uVar24 = lVar16 * -0x5555555555555555;
    iVar8 = *local_80;
    local_60 = 0x42ff0000;
    uVar26 = (ulong)iVar8;
    uStack_58 = 0;
    local_50 = 0;
    lStack_48 = 0;
    local_40 = 0;
    lStack_38 = 0;
    local_30 = 0;
    lStack_28 = 0;
    lStack_8 = 0;
    local_10 = 0;
    if (uVar24 < uVar26) {
      std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
                 uVar26 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
    }
    else {
      if (uVar24 <= uVar26) goto LAB_00334ff4;
      pMVar21 = (Mat *)(*(long *)param_1 + uVar26 * 0x60);
      pMVar19 = pMVar21;
      if (pMVar23 == pMVar21) {
        *(Mat **)(param_1 + 8) = pMVar21;
      }
      else {
        do {
          if (*(long *)(pMVar19 + 0x38) != 0) {
            piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
            do {
              iVar9 = *piVar14;
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = iVar9 + -1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
            if (iVar9 == 1) {
              Mat::deallocate(pMVar19);
            }
          }
          *(undefined8 *)(pMVar19 + 0x38) = 0;
          *(undefined8 *)(pMVar19 + 0x10) = 0;
          *(undefined8 *)(pMVar19 + 0x28) = 0;
          *(undefined8 *)(pMVar19 + 0x20) = 0;
          *(undefined8 *)(pMVar19 + 0x18) = 0;
          if (0 < *(int *)(pMVar19 + 4)) {
            iVar9 = 0;
            puVar12 = *(undefined4 **)(pMVar19 + 0x40);
            do {
              *puVar12 = 0;
              iVar9 = iVar9 + 1;
              puVar12 = puVar12 + 1;
            } while (iVar9 < *(int *)(pMVar19 + 4));
          }
          if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
            fastFree(*(Mat **)(pMVar19 + 0x48));
          }
          pMVar19 = pMVar19 + 0x60;
        } while (pMVar23 != pMVar19);
        *(Mat **)(param_1 + 8) = pMVar21;
      }
    }
    if (lStack_28 != 0) {
      piVar14 = (int *)(lStack_28 + 0x14);
      do {
        iVar9 = *piVar14;
        cVar5 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = iVar9 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar9 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
LAB_00334ff4:
    lStack_28 = 0;
    local_50 = 0;
    lStack_38 = 0;
    local_40 = 0;
    lStack_48 = 0;
    if (0 < (int)local_60._4_4_) {
      iVar9 = 0;
      puVar15 = local_20;
      do {
        *(undefined4 *)puVar15 = 0;
        iVar9 = iVar9 + 1;
        puVar15 = (undefined8 *)((long)puVar15 + 4);
      } while (iVar9 < (int)local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (0 < iVar8) {
      lVar16 = 0;
      iVar9 = 0;
      do {
        iVar3 = iVar9 + 1;
        local_130 = 0x80000000;
        pMVar23 = (Mat *)(*(long *)param_1 + lVar16);
        local_12c = 0x7fffffff;
        local_128 = iVar9;
        local_124 = iVar3;
        Mat::Mat((Mat *)&local_120,(Mat *)&local_c0,(Range *)&local_128,(Range *)&local_130);
        if (pMVar23 != (Mat *)&local_120) {
          if (lStack_e8 != 0) {
            piVar14 = (int *)(lStack_e8 + 0x14);
            do {
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = *piVar14 + 1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
          }
          if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_003350e8:
            *(undefined8 *)(pMVar23 + 0x38) = 0;
            *(undefined8 *)(pMVar23 + 0x10) = 0;
            *(undefined8 *)(pMVar23 + 0x28) = 0;
            *(undefined8 *)(pMVar23 + 0x20) = 0;
            *(undefined8 *)(pMVar23 + 0x18) = 0;
            if (0 < *(int *)(pMVar23 + 4)) goto LAB_00335108;
LAB_003352e4:
            *(undefined4 *)pMVar23 = local_120;
LAB_00335134:
            if (2 < local_11c) goto LAB_003352a0;
            puVar15 = *(undefined8 **)(pMVar23 + 0x48);
            *(undefined4 *)(pMVar23 + 8) = local_118;
            *(int *)(pMVar23 + 4) = local_11c;
            *(undefined4 *)(pMVar23 + 0xc) = local_114;
            *puVar15 = *local_d8;
            puVar15[1] = local_d8[1];
          }
          else {
            piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
            do {
              iVar9 = *piVar14;
              cVar5 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar7) {
                *piVar14 = iVar9 + -1;
                cVar5 = ExclusiveMonitorsStatus();
              }
            } while (cVar5 != '\0');
            if (iVar9 != 1) goto LAB_003350e8;
            Mat::deallocate(pMVar23);
            *(undefined8 *)(pMVar23 + 0x38) = 0;
            *(undefined8 *)(pMVar23 + 0x10) = 0;
            *(undefined8 *)(pMVar23 + 0x28) = 0;
            *(undefined8 *)(pMVar23 + 0x20) = 0;
            *(undefined8 *)(pMVar23 + 0x18) = 0;
            if (*(int *)(pMVar23 + 4) < 1) goto LAB_003352e4;
LAB_00335108:
            iVar9 = 0;
            puVar12 = *(undefined4 **)(pMVar23 + 0x40);
            do {
              *puVar12 = 0;
              iVar9 = iVar9 + 1;
              puVar12 = puVar12 + 1;
            } while (iVar9 < *(int *)(pMVar23 + 4));
            *(undefined4 *)pMVar23 = local_120;
            if (*(int *)(pMVar23 + 4) < 3) goto LAB_00335134;
LAB_003352a0:
            Mat::copySize(pMVar23,(Mat *)&local_120);
          }
          *(undefined8 *)(pMVar23 + 0x18) = uStack_108;
          *(undefined8 *)(pMVar23 + 0x10) = local_110;
          *(undefined8 *)(pMVar23 + 0x28) = uStack_f8;
          *(undefined8 *)(pMVar23 + 0x20) = local_100;
          *(long *)(pMVar23 + 0x38) = lStack_e8;
          *(undefined8 *)(pMVar23 + 0x30) = local_f0;
        }
        if (lStack_e8 != 0) {
          piVar14 = (int *)(lStack_e8 + 0x14);
          do {
            iVar9 = *piVar14;
            cVar5 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
            if (bVar7) {
              *piVar14 = iVar9 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar9 == 1) {
            Mat::deallocate((Mat *)&local_120);
          }
        }
        lStack_e8 = 0;
        local_110 = 0;
        uStack_f8 = 0;
        local_100 = 0;
        uStack_108 = 0;
        if (0 < local_11c) {
          iVar9 = 0;
          puVar12 = local_e0;
          do {
            *puVar12 = 0;
            iVar9 = iVar9 + 1;
            puVar12 = puVar12 + 1;
          } while (iVar9 < local_11c);
        }
        if (local_d8 != auStack_d0) {
          fastFree(local_d8);
        }
        lVar16 = lVar16 + 0x60;
        iVar9 = iVar3;
      } while (iVar3 != iVar8);
    }
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        iVar8 = *piVar14;
        cVar5 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = iVar8 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b8[2] = 0;
    local_b8[3] = 0;
    local_b8[8] = 0;
    local_b8[9] = 0;
    local_b8[6] = 0;
    local_b8[7] = 0;
    local_b8[4] = 0;
    local_b8[5] = 0;
    if (0 < local_bc) {
      iVar8 = 0;
      piVar14 = local_80;
      do {
        *piVar14 = 0;
        iVar8 = iVar8 + 1;
        piVar14 = piVar14 + 1;
      } while (iVar8 < local_bc);
    }
    if (local_78 == &local_70) {
      return;
    }
    fastFree(local_78);
    return;
  }
  puVar22 = *(uint **)(this + 8);
  local_20 = &uStack_58;
  pMVar23 = *(Mat **)(param_1 + 8);
  local_18 = &local_10;
  lVar16 = (long)pMVar23 - *(long *)param_1 >> 5;
  iVar8 = **(int **)(puVar22 + 0x10);
  uVar24 = lVar16 * -0x5555555555555555;
  uVar26 = (ulong)iVar8;
  local_60._0_4_ = 0x42ff0000;
  uVar13 = (uint)local_60;
  local_60._0_4_ = 0x42ff0000;
  local_60._4_4_ = 0;
  uStack_58 = 0;
  local_50 = 0;
  lStack_48 = 0;
  local_40 = 0;
  lStack_38 = 0;
  local_30 = 0;
  lStack_28 = 0;
  lStack_8 = 0;
  local_10 = 0;
  if (uVar24 < uVar26) {
    local_60._0_4_ = uVar13;
    std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
              ((vector<cv::Mat,std::allocator<cv::Mat>> *)param_1,pMVar23,
               uVar26 + lVar16 * 0x5555555555555555,(Mat *)&local_60);
  }
  else {
    if (uVar24 <= uVar26) goto LAB_00334bec;
    pMVar21 = (Mat *)(*(long *)param_1 + uVar26 * 0x60);
    pMVar19 = pMVar21;
    local_60._0_4_ = uVar13;
    if (pMVar23 == pMVar21) {
      *(Mat **)(param_1 + 8) = pMVar21;
    }
    else {
      do {
        if (*(long *)(pMVar19 + 0x38) != 0) {
          piVar14 = (int *)(*(long *)(pMVar19 + 0x38) + 0x14);
          do {
            iVar9 = *piVar14;
            cVar5 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
            if (bVar7) {
              *piVar14 = iVar9 + -1;
              cVar5 = ExclusiveMonitorsStatus();
            }
          } while (cVar5 != '\0');
          if (iVar9 == 1) {
            Mat::deallocate(pMVar19);
          }
        }
        *(undefined8 *)(pMVar19 + 0x38) = 0;
        *(undefined8 *)(pMVar19 + 0x10) = 0;
        *(undefined8 *)(pMVar19 + 0x28) = 0;
        *(undefined8 *)(pMVar19 + 0x20) = 0;
        *(undefined8 *)(pMVar19 + 0x18) = 0;
        if (0 < *(int *)(pMVar19 + 4)) {
          iVar9 = 0;
          puVar12 = *(undefined4 **)(pMVar19 + 0x40);
          do {
            *puVar12 = 0;
            iVar9 = iVar9 + 1;
            puVar12 = puVar12 + 1;
          } while (iVar9 < *(int *)(pMVar19 + 4));
        }
        if (*(Mat **)(pMVar19 + 0x48) != pMVar19 + 0x50) {
          fastFree(*(Mat **)(pMVar19 + 0x48));
        }
        pMVar19 = pMVar19 + 0x60;
      } while (pMVar23 != pMVar19);
      *(Mat **)(param_1 + 8) = pMVar21;
    }
  }
  if (lStack_28 != 0) {
    piVar14 = (int *)(lStack_28 + 0x14);
    do {
      iVar9 = *piVar14;
      cVar5 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar7) {
        *piVar14 = iVar9 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
LAB_00334bec:
  lStack_28 = 0;
  local_50 = 0;
  lStack_38 = 0;
  local_40 = 0;
  lStack_48 = 0;
  if (0 < (int)local_60._4_4_) {
    iVar9 = 0;
    puVar15 = local_20;
    do {
      *(undefined4 *)puVar15 = 0;
      iVar9 = iVar9 + 1;
      puVar15 = (undefined8 *)((long)puVar15 + 4);
    } while (iVar9 < (int)local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  lVar27 = 0;
  lVar16 = 0;
  if (iVar8 < 1) {
    return;
  }
  uVar13 = puVar22[1];
  pMVar23 = *(Mat **)param_1;
  if (uVar13 == 2) goto LAB_00334e30;
LAB_00334c6c:
  Mat::Mat((Mat *)&local_60,uVar13 - 1,(int *)(*(long *)(puVar22 + 0x10) + 4),*puVar22 & 0xfff,
           (void *)(*(long *)(puVar22 + 4) + lVar16 * **(long **)(puVar22 + 0x12)),
           (ulong *)(*(long **)(puVar22 + 0x12) + 1));
  if (pMVar23 == (Mat *)&local_60) goto LAB_00334d98;
  if (lStack_28 != 0) {
    piVar14 = (int *)(lStack_28 + 0x14);
    do {
      cVar5 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar7) {
        *piVar14 = *piVar14 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  do {
    if (*(long *)(pMVar23 + 0x38) == 0) {
LAB_00334ce0:
      *(undefined8 *)(pMVar23 + 0x38) = 0;
      *(undefined8 *)(pMVar23 + 0x10) = 0;
      *(undefined8 *)(pMVar23 + 0x28) = 0;
      *(undefined8 *)(pMVar23 + 0x20) = 0;
      *(undefined8 *)(pMVar23 + 0x18) = 0;
      if (0 < *(int *)(pMVar23 + 4)) goto LAB_00334d00;
LAB_00334f00:
      *(uint *)pMVar23 = (uint)local_60;
LAB_00334d2c:
      if (2 < (int)local_60._4_4_) goto LAB_00334ec8;
      *(uint *)(pMVar23 + 4) = local_60._4_4_;
      *(undefined4 *)(pMVar23 + 8) = (undefined4)uStack_58;
      plVar28 = *(long **)(pMVar23 + 0x48);
      *(undefined4 *)(pMVar23 + 0xc) = uStack_58._4_4_;
      *plVar28 = *local_18;
      plVar28[1] = local_18[1];
    }
    else {
      piVar14 = (int *)(*(long *)(pMVar23 + 0x38) + 0x14);
      do {
        iVar9 = *piVar14;
        cVar5 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = iVar9 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar9 != 1) goto LAB_00334ce0;
      Mat::deallocate(pMVar23);
      *(undefined8 *)(pMVar23 + 0x38) = 0;
      *(undefined8 *)(pMVar23 + 0x10) = 0;
      *(undefined8 *)(pMVar23 + 0x28) = 0;
      *(undefined8 *)(pMVar23 + 0x20) = 0;
      *(undefined8 *)(pMVar23 + 0x18) = 0;
      if (*(int *)(pMVar23 + 4) < 1) goto LAB_00334f00;
LAB_00334d00:
      iVar9 = 0;
      puVar12 = *(undefined4 **)(pMVar23 + 0x40);
      do {
        *puVar12 = 0;
        iVar9 = iVar9 + 1;
        puVar12 = puVar12 + 1;
      } while (iVar9 < *(int *)(pMVar23 + 4));
      *(uint *)pMVar23 = (uint)local_60;
      if (*(int *)(pMVar23 + 4) < 3) goto LAB_00334d2c;
LAB_00334ec8:
      Mat::copySize(pMVar23,(Mat *)&local_60);
    }
    *(long *)(pMVar23 + 0x10) = local_50;
    *(long *)(pMVar23 + 0x18) = lStack_48;
    *(long *)(pMVar23 + 0x20) = local_40;
    *(long *)(pMVar23 + 0x28) = lStack_38;
    *(undefined8 *)(pMVar23 + 0x30) = local_30;
    *(long *)(pMVar23 + 0x38) = lStack_28;
LAB_00334d98:
    if (lStack_28 != 0) {
      piVar14 = (int *)(lStack_28 + 0x14);
      do {
        iVar9 = *piVar14;
        cVar5 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar7) {
          *piVar14 = iVar9 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar9 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    do {
      lStack_28 = 0;
      local_50 = 0;
      lStack_38 = 0;
      local_40 = 0;
      lStack_48 = 0;
      if (0 < (int)local_60._4_4_) {
        iVar9 = 0;
        puVar15 = local_20;
        do {
          *(undefined4 *)puVar15 = 0;
          iVar9 = iVar9 + 1;
          puVar15 = (undefined8 *)((long)puVar15 + 4);
        } while (iVar9 < (int)local_60._4_4_);
      }
      if (local_18 != &local_10) {
        fastFree(local_18);
      }
      lVar16 = lVar16 + 1;
      lVar27 = lVar27 + 0x60;
      if (iVar8 <= (int)lVar16) {
        return;
      }
      uVar13 = puVar22[1];
      pMVar23 = (Mat *)(*(long *)param_1 + lVar27);
      if (uVar13 != 2) goto LAB_00334c6c;
LAB_00334e30:
      uVar4 = *puVar22;
      iVar9 = (uVar4 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3);
      local_50 = *(long *)(puVar22 + 4) + lVar16 * **(long **)(puVar22 + 0x12);
      uStack_58 = CONCAT44(puVar22[3],1);
      local_60._0_4_ = (uVar4 & 0xfff) + 0x42ff0000 | 0x4000;
      lStack_8 = (long)iVar9;
      local_30 = 0;
      lStack_28 = 0;
      local_10 = (long)iVar9 * (long)(int)puVar22[3];
      local_40 = local_50 + local_10;
      lStack_48 = local_50;
      lStack_38 = local_40;
      local_20 = &uStack_58;
      local_18 = &local_10;
      local_60._4_4_ = uVar13;
    } while (pMVar23 == (Mat *)&local_60);
  } while( true );
}


==================================================================

### FUNC 00336b30 (2828 bytes) name=_M_fill_insert

/* std::vector<cv::UMat, std::allocator<cv::UMat>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<cv::UMat*, std::vector<cv::UMat,
   std::allocator<cv::UMat> > >, unsigned long, cv::UMat const&) */

void __thiscall
std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
          (vector<cv::UMat,std::allocator<cv::UMat>> *this,UMat *param_2,ulong param_3,UMat *param_4
          )

{
  int *piVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  long lVar6;
  int iVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  ulong uVar10;
  long lVar11;
  undefined4 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  UMat *pUVar15;
  UMat *pUVar16;
  UMat *pUVar17;
  long lVar18;
  UMat *pUVar19;
  UMat *pUVar20;
  ulong uVar21;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined4 local_38;
  long local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (param_3 == 0) {
    return;
  }
  if (param_3 <= (ulong)((*(long *)(this + 0x10) - *(long *)(this + 8) >> 4) * -0x3333333333333333))
  {
    uStack_48 = *(undefined8 *)(param_4 + 8);
    local_50 = *(ulong *)param_4;
    local_40 = *(undefined8 *)(param_4 + 0x10);
    local_18 = &local_10;
    local_38 = *(undefined4 *)(param_4 + 0x18);
    local_30 = *(long *)(param_4 + 0x20);
    local_20 = &uStack_48;
    uStack_8 = 0;
    local_10 = 0;
    local_28 = *(undefined8 *)(param_4 + 0x28);
    iVar7 = *(int *)(param_4 + 4);
    if (local_30 != 0) {
      piVar1 = (int *)(local_30 + 0x10);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar5) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      iVar7 = *(int *)(param_4 + 4);
    }
    if (iVar7 < 3) {
      pUVar15 = *(UMat **)(this + 8);
      local_10 = **(undefined8 **)(param_4 + 0x38);
      lVar18 = (long)pUVar15 - (long)param_2;
      uStack_8 = (*(undefined8 **)(param_4 + 0x38))[1];
    }
    else {
      local_50 = local_50 & 0xffffffff;
      cv::UMat::copySize((UMat *)&local_50,param_4);
      pUVar15 = *(UMat **)(this + 8);
      lVar18 = (long)pUVar15 - (long)param_2;
    }
    if (param_3 < (ulong)((lVar18 >> 4) * -0x3333333333333333)) {
      pUVar19 = pUVar15 + param_3 * -0x50;
      pUVar17 = pUVar19;
      pUVar16 = pUVar15;
      if (pUVar19 != pUVar15) {
        do {
          if (pUVar16 != (UMat *)0x0) {
            *(undefined4 *)pUVar16 = *(undefined4 *)pUVar17;
            uVar14 = *(undefined8 *)(pUVar17 + 0x10);
            *(undefined4 *)(pUVar16 + 4) = *(undefined4 *)(pUVar17 + 4);
            uVar2 = *(undefined4 *)(pUVar17 + 0x18);
            *(undefined4 *)(pUVar16 + 8) = *(undefined4 *)(pUVar17 + 8);
            uVar13 = *(undefined8 *)(pUVar17 + 0x28);
            uVar3 = *(undefined4 *)(pUVar17 + 0xc);
            *(undefined8 *)(pUVar16 + 0x10) = uVar14;
            *(undefined4 *)(pUVar16 + 0xc) = uVar3;
            lVar18 = *(long *)(pUVar17 + 0x20);
            *(long *)(pUVar16 + 0x20) = lVar18;
            *(undefined4 *)(pUVar16 + 0x18) = uVar2;
            *(undefined8 *)(pUVar16 + 0x28) = uVar13;
            *(UMat **)(pUVar16 + 0x30) = pUVar16 + 8;
            *(UMat **)(pUVar16 + 0x38) = pUVar16 + 0x40;
            *(undefined8 *)(pUVar16 + 0x48) = 0;
            *(undefined8 *)(pUVar16 + 0x40) = 0;
            if (lVar18 != 0) {
              piVar1 = (int *)(lVar18 + 0x10);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = *piVar1 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (*(int *)(pUVar17 + 4) < 3) {
              puVar9 = *(undefined8 **)(pUVar17 + 0x38);
              puVar8 = *(undefined8 **)(pUVar16 + 0x38);
              *puVar8 = *puVar9;
              puVar8[1] = puVar9[1];
            }
            else {
              *(undefined4 *)(pUVar16 + 4) = 0;
              cv::UMat::copySize(pUVar16,pUVar17);
            }
          }
          pUVar17 = pUVar17 + 0x50;
          pUVar16 = pUVar16 + 0x50;
        } while (pUVar15 != pUVar17);
        pUVar17 = *(UMat **)(this + 8);
      }
      *(UMat **)(this + 8) = pUVar17 + param_3 * 0x50;
      pUVar17 = pUVar19;
      if (0 < ((long)pUVar19 - (long)param_2 >> 4) * -0x3333333333333333) {
        do {
          pUVar16 = pUVar15 + -0x50;
          pUVar20 = pUVar17 + -0x50;
          if (pUVar16 != pUVar20) {
            if (*(long *)(pUVar17 + -0x30) != 0) {
              piVar1 = (int *)(*(long *)(pUVar17 + -0x30) + 0x10);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = *piVar1 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (*(long *)(pUVar15 + -0x30) == 0) {
LAB_00336d60:
              if (0 < *(int *)(pUVar15 + -0x4c)) goto LAB_00336d6c;
LAB_0033757c:
              *(undefined4 *)pUVar16 = *(undefined4 *)pUVar20;
              *(undefined8 *)(pUVar15 + -0x30) = 0;
LAB_00336d9c:
              if (2 < *(int *)(pUVar17 + -0x4c)) goto LAB_00337520;
              *(int *)(pUVar15 + -0x4c) = *(int *)(pUVar17 + -0x4c);
              puVar9 = *(undefined8 **)(pUVar17 + -0x18);
              *(undefined4 *)(pUVar15 + -0x48) = *(undefined4 *)(pUVar17 + -0x48);
              puVar8 = *(undefined8 **)(pUVar15 + -0x18);
              *(undefined4 *)(pUVar15 + -0x44) = *(undefined4 *)(pUVar17 + -0x44);
              *puVar8 = *puVar9;
              puVar8[1] = puVar9[1];
            }
            else {
              piVar1 = (int *)(*(long *)(pUVar15 + -0x30) + 0x10);
              do {
                iVar7 = *piVar1;
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = iVar7 + -1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
              if (iVar7 != 1) goto LAB_00336d60;
              cv::UMat::deallocate(pUVar16);
              if (*(int *)(pUVar15 + -0x4c) < 1) goto LAB_0033757c;
LAB_00336d6c:
              iVar7 = 0;
              puVar12 = *(undefined4 **)(pUVar15 + -0x20);
              do {
                *puVar12 = 0;
                iVar7 = iVar7 + 1;
                puVar12 = puVar12 + 1;
              } while (iVar7 < *(int *)(pUVar15 + -0x4c));
              uVar2 = *(undefined4 *)pUVar20;
              *(undefined8 *)(pUVar15 + -0x30) = 0;
              *(undefined4 *)pUVar16 = uVar2;
              if (*(int *)(pUVar15 + -0x4c) < 3) goto LAB_00336d9c;
LAB_00337520:
              cv::UMat::copySize(pUVar16,pUVar20);
            }
            *(undefined8 *)(pUVar15 + -0x40) = *(undefined8 *)(pUVar17 + -0x40);
            if (*(int *)(pUVar15 + -0x38) == 0) {
              *(undefined4 *)(pUVar15 + -0x38) = *(undefined4 *)(pUVar17 + -0x38);
            }
            uVar13 = *(undefined8 *)(pUVar17 + -0x30);
            *(undefined8 *)(pUVar15 + -0x28) = *(undefined8 *)(pUVar17 + -0x28);
            *(undefined8 *)(pUVar15 + -0x30) = uVar13;
          }
          pUVar15 = pUVar16;
          pUVar17 = pUVar20;
        } while (pUVar20 != pUVar19 + -((long)pUVar19 - (long)param_2));
      }
      pUVar15 = param_2 + param_3 * 0x50;
      for (; param_2 != pUVar15; param_2 = param_2 + 0x50) {
        if (param_2 != (UMat *)&local_50) {
          if (local_30 != 0) {
            piVar1 = (int *)(local_30 + 0x10);
            do {
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar5) {
                *piVar1 = *piVar1 + 1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
          }
          if (*(long *)(param_2 + 0x20) == 0) {
LAB_00336e58:
            if (0 < *(int *)(param_2 + 4)) goto LAB_00336e64;
LAB_00337558:
            *(undefined8 *)(param_2 + 0x20) = 0;
            *(undefined4 *)param_2 = (undefined4)local_50;
LAB_00336e94:
            if (2 < local_50._4_4_) goto LAB_00337510;
            puVar8 = *(undefined8 **)(param_2 + 0x38);
            *(int *)(param_2 + 4) = local_50._4_4_;
            *(undefined4 *)(param_2 + 8) = (undefined4)uStack_48;
            uVar13 = *local_18;
            *(undefined4 *)(param_2 + 0xc) = uStack_48._4_4_;
            *puVar8 = uVar13;
            puVar8[1] = local_18[1];
          }
          else {
            piVar1 = (int *)(*(long *)(param_2 + 0x20) + 0x10);
            do {
              iVar7 = *piVar1;
              cVar4 = '\x01';
              bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar5) {
                *piVar1 = iVar7 + -1;
                cVar4 = ExclusiveMonitorsStatus();
              }
            } while (cVar4 != '\0');
            if (iVar7 != 1) goto LAB_00336e58;
            cv::UMat::deallocate(param_2);
            if (*(int *)(param_2 + 4) < 1) goto LAB_00337558;
LAB_00336e64:
            iVar7 = 0;
            puVar12 = *(undefined4 **)(param_2 + 0x30);
            do {
              *puVar12 = 0;
              iVar7 = iVar7 + 1;
              puVar12 = puVar12 + 1;
            } while (iVar7 < *(int *)(param_2 + 4));
            *(undefined8 *)(param_2 + 0x20) = 0;
            *(undefined4 *)param_2 = (undefined4)local_50;
            if (*(int *)(param_2 + 4) < 3) goto LAB_00336e94;
LAB_00337510:
            cv::UMat::copySize(param_2,(UMat *)&local_50);
          }
          *(undefined8 *)(param_2 + 0x10) = local_40;
          if (*(int *)(param_2 + 0x18) == 0) {
            *(undefined4 *)(param_2 + 0x18) = local_38;
          }
          *(long *)(param_2 + 0x20) = local_30;
          *(undefined8 *)(param_2 + 0x28) = local_28;
        }
      }
    }
    else {
      lVar6 = param_3 + (lVar18 >> 4) * 0x3333333333333333;
      pUVar17 = pUVar15;
      lVar11 = lVar6;
      if (lVar6 != 0) {
        do {
          if (pUVar17 != (UMat *)0x0) {
            *(undefined4 *)pUVar17 = (undefined4)local_50;
            *(int *)(pUVar17 + 4) = local_50._4_4_;
            *(undefined4 *)(pUVar17 + 8) = (undefined4)uStack_48;
            *(undefined8 *)(pUVar17 + 0x10) = local_40;
            *(undefined4 *)(pUVar17 + 0xc) = uStack_48._4_4_;
            *(long *)(pUVar17 + 0x20) = local_30;
            *(undefined4 *)(pUVar17 + 0x18) = local_38;
            *(undefined8 *)(pUVar17 + 0x28) = local_28;
            *(UMat **)(pUVar17 + 0x30) = pUVar17 + 8;
            *(UMat **)(pUVar17 + 0x38) = pUVar17 + 0x40;
            *(undefined8 *)(pUVar17 + 0x48) = 0;
            *(undefined8 *)(pUVar17 + 0x40) = 0;
            if (local_30 != 0) {
              piVar1 = (int *)(local_30 + 0x10);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = *piVar1 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (local_50._4_4_ < 3) {
              puVar8 = *(undefined8 **)(pUVar17 + 0x38);
              *puVar8 = *local_18;
              puVar8[1] = local_18[1];
            }
            else {
              *(undefined4 *)(pUVar17 + 4) = 0;
              cv::UMat::copySize(pUVar17,(UMat *)&local_50);
            }
          }
          lVar11 = lVar11 + -1;
          pUVar17 = pUVar17 + 0x50;
        } while (lVar11 != 0);
        pUVar17 = *(UMat **)(this + 8);
      }
      pUVar17 = pUVar17 + lVar6 * 0x50;
      *(UMat **)(this + 8) = pUVar17;
      pUVar16 = param_2;
      if (param_2 != pUVar15) {
        do {
          if (pUVar17 != (UMat *)0x0) {
            *(undefined4 *)pUVar17 = *(undefined4 *)pUVar16;
            uVar13 = *(undefined8 *)(pUVar16 + 0x10);
            *(undefined4 *)(pUVar17 + 4) = *(undefined4 *)(pUVar16 + 4);
            uVar2 = *(undefined4 *)(pUVar16 + 0x18);
            *(undefined4 *)(pUVar17 + 8) = *(undefined4 *)(pUVar16 + 8);
            uVar14 = *(undefined8 *)(pUVar16 + 0x28);
            uVar3 = *(undefined4 *)(pUVar16 + 0xc);
            *(undefined8 *)(pUVar17 + 0x10) = uVar13;
            *(undefined4 *)(pUVar17 + 0xc) = uVar3;
            lVar11 = *(long *)(pUVar16 + 0x20);
            *(long *)(pUVar17 + 0x20) = lVar11;
            *(undefined4 *)(pUVar17 + 0x18) = uVar2;
            *(undefined8 *)(pUVar17 + 0x28) = uVar14;
            *(UMat **)(pUVar17 + 0x30) = pUVar17 + 8;
            *(UMat **)(pUVar17 + 0x38) = pUVar17 + 0x40;
            *(undefined8 *)(pUVar17 + 0x48) = 0;
            *(undefined8 *)(pUVar17 + 0x40) = 0;
            if (lVar11 != 0) {
              piVar1 = (int *)(lVar11 + 0x10);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = *piVar1 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (*(int *)(pUVar16 + 4) < 3) {
              puVar9 = *(undefined8 **)(pUVar16 + 0x38);
              puVar8 = *(undefined8 **)(pUVar17 + 0x38);
              *puVar8 = *puVar9;
              puVar8[1] = puVar9[1];
            }
            else {
              *(undefined4 *)(pUVar17 + 4) = 0;
              cv::UMat::copySize(pUVar17,pUVar16);
            }
          }
          pUVar16 = pUVar16 + 0x50;
          pUVar17 = pUVar17 + 0x50;
        } while (pUVar15 != pUVar16);
        *(long *)(this + 8) = *(long *)(this + 8) + lVar18;
        do {
          if (param_2 != (UMat *)&local_50) {
            if (local_30 != 0) {
              piVar1 = (int *)(local_30 + 0x10);
              do {
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = *piVar1 + 1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
            }
            if (*(long *)(param_2 + 0x20) == 0) {
LAB_0033745c:
              if (0 < *(int *)(param_2 + 4)) goto LAB_00337468;
LAB_003375d8:
              *(undefined8 *)(param_2 + 0x20) = 0;
              *(undefined4 *)param_2 = (undefined4)local_50;
LAB_00337498:
              if (2 < local_50._4_4_) goto LAB_0033758c;
              puVar8 = *(undefined8 **)(param_2 + 0x38);
              *(int *)(param_2 + 4) = local_50._4_4_;
              *(undefined4 *)(param_2 + 8) = (undefined4)uStack_48;
              uVar13 = *local_18;
              *(undefined4 *)(param_2 + 0xc) = uStack_48._4_4_;
              *puVar8 = uVar13;
              puVar8[1] = local_18[1];
            }
            else {
              piVar1 = (int *)(*(long *)(param_2 + 0x20) + 0x10);
              do {
                iVar7 = *piVar1;
                cVar4 = '\x01';
                bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
                if (bVar5) {
                  *piVar1 = iVar7 + -1;
                  cVar4 = ExclusiveMonitorsStatus();
                }
              } while (cVar4 != '\0');
              if (iVar7 != 1) goto LAB_0033745c;
              cv::UMat::deallocate(param_2);
              if (*(int *)(param_2 + 4) < 1) goto LAB_003375d8;
LAB_00337468:
              iVar7 = 0;
              puVar12 = *(undefined4 **)(param_2 + 0x30);
              do {
                *puVar12 = 0;
                iVar7 = iVar7 + 1;
                puVar12 = puVar12 + 1;
              } while (iVar7 < *(int *)(param_2 + 4));
              *(undefined8 *)(param_2 + 0x20) = 0;
              *(undefined4 *)param_2 = (undefined4)local_50;
              if (*(int *)(param_2 + 4) < 3) goto LAB_00337498;
LAB_0033758c:
              cv::UMat::copySize(param_2,(UMat *)&local_50);
            }
            *(undefined8 *)(param_2 + 0x10) = local_40;
            if (*(int *)(param_2 + 0x18) == 0) {
              *(undefined4 *)(param_2 + 0x18) = local_38;
            }
            *(long *)(param_2 + 0x20) = local_30;
            *(undefined8 *)(param_2 + 0x28) = local_28;
          }
          param_2 = param_2 + 0x50;
          if (pUVar15 == param_2) {
            cv::UMat::~UMat((UMat *)&local_50);
            return;
          }
        } while( true );
      }
      *(UMat **)(this + 8) = pUVar17 + lVar18;
    }
    cv::UMat::~UMat((UMat *)&local_50);
    return;
  }
  lVar11 = *(long *)this;
  lVar18 = *(long *)(this + 8) - lVar11 >> 4;
  uVar10 = lVar18 * -0x3333333333333333;
  if (lVar18 * 0x3333333333333333 + 0x333333333333333U < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar21 = uVar10;
  if (uVar10 < param_3) {
    uVar21 = param_3;
  }
  uVar21 = uVar21 + uVar10;
  if ((uVar10 < uVar21 || uVar10 - uVar21 == 0) && (uVar21 < 0x333333333333334)) {
    lVar11 = (long)param_2 - lVar11;
    if (uVar21 == 0) {
      pUVar15 = (UMat *)0x0;
      goto LAB_00336f94;
    }
    uVar10 = uVar21 * 0x50;
  }
  else {
    lVar11 = (long)param_2 - lVar11;
    uVar10 = 0xfffffffffffffff0;
    uVar21 = 0x333333333333333;
  }
  pUVar15 = operator_new(uVar10);
LAB_00336f94:
  pUVar17 = pUVar15 + lVar11;
  uVar10 = param_3;
  do {
    if (pUVar17 != (UMat *)0x0) {
      *(undefined4 *)pUVar17 = *(undefined4 *)param_4;
      uVar14 = *(undefined8 *)(param_4 + 0x10);
      *(undefined4 *)(pUVar17 + 4) = *(undefined4 *)(param_4 + 4);
      uVar2 = *(undefined4 *)(param_4 + 0x18);
      *(undefined4 *)(pUVar17 + 8) = *(undefined4 *)(param_4 + 8);
      uVar13 = *(undefined8 *)(param_4 + 0x28);
      uVar3 = *(undefined4 *)(param_4 + 0xc);
      *(undefined8 *)(pUVar17 + 0x10) = uVar14;
      *(undefined4 *)(pUVar17 + 0xc) = uVar3;
      lVar18 = *(long *)(param_4 + 0x20);
      *(long *)(pUVar17 + 0x20) = lVar18;
      *(undefined4 *)(pUVar17 + 0x18) = uVar2;
      *(undefined8 *)(pUVar17 + 0x28) = uVar13;
      *(UMat **)(pUVar17 + 0x30) = pUVar17 + 8;
      *(UMat **)(pUVar17 + 0x38) = pUVar17 + 0x40;
      *(undefined8 *)(pUVar17 + 0x48) = 0;
      *(undefined8 *)(pUVar17 + 0x40) = 0;
      if (lVar18 != 0) {
        piVar1 = (int *)(lVar18 + 0x10);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (*(int *)(param_4 + 4) < 3) {
        puVar9 = *(undefined8 **)(param_4 + 0x38);
        puVar8 = *(undefined8 **)(pUVar17 + 0x38);
        *puVar8 = *puVar9;
        puVar8[1] = puVar9[1];
      }
      else {
        *(undefined4 *)(pUVar17 + 4) = 0;
        cv::UMat::copySize(pUVar17,param_4);
      }
    }
    uVar10 = uVar10 - 1;
    pUVar17 = pUVar17 + 0x50;
  } while (uVar10 != 0);
  pUVar16 = pUVar15;
  for (pUVar17 = *(UMat **)this; param_2 != pUVar17; pUVar17 = pUVar17 + 0x50) {
    if (pUVar16 != (UMat *)0x0) {
      *(undefined4 *)pUVar16 = *(undefined4 *)pUVar17;
      uVar14 = *(undefined8 *)(pUVar17 + 0x10);
      *(undefined4 *)(pUVar16 + 4) = *(undefined4 *)(pUVar17 + 4);
      uVar2 = *(undefined4 *)(pUVar17 + 0x18);
      *(undefined4 *)(pUVar16 + 8) = *(undefined4 *)(pUVar17 + 8);
      uVar13 = *(undefined8 *)(pUVar17 + 0x28);
      uVar3 = *(undefined4 *)(pUVar17 + 0xc);
      *(undefined8 *)(pUVar16 + 0x10) = uVar14;
      *(undefined4 *)(pUVar16 + 0xc) = uVar3;
      lVar18 = *(long *)(pUVar17 + 0x20);
      *(long *)(pUVar16 + 0x20) = lVar18;
      *(undefined4 *)(pUVar16 + 0x18) = uVar2;
      *(undefined8 *)(pUVar16 + 0x28) = uVar13;
      *(UMat **)(pUVar16 + 0x30) = pUVar16 + 8;
      *(UMat **)(pUVar16 + 0x38) = pUVar16 + 0x40;
      *(undefined8 *)(pUVar16 + 0x48) = 0;
      *(undefined8 *)(pUVar16 + 0x40) = 0;
      if (lVar18 != 0) {
        piVar1 = (int *)(lVar18 + 0x10);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar5) {
            *piVar1 = *piVar1 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (*(int *)(pUVar17 + 4) < 3) {
        puVar9 = *(undefined8 **)(pUVar17 + 0x38);
        puVar8 = *(undefined8 **)(pUVar16 + 0x38);
        *puVar8 = *puVar9;
        puVar8[1] = puVar9[1];
      }
      else {
        *(undefined4 *)(pUVar16 + 4) = 0;
        cv::UMat::copySize(pUVar16,pUVar17);
      }
    }
    pUVar16 = pUVar16 + 0x50;
  }
  pUVar17 = *(UMat **)(this + 8);
  pUVar16 = pUVar16 + param_3 * 0x50;
  if (param_2 != pUVar17) {
    do {
      if (pUVar16 != (UMat *)0x0) {
        *(undefined4 *)pUVar16 = *(undefined4 *)param_2;
        uVar14 = *(undefined8 *)(param_2 + 0x10);
        *(undefined4 *)(pUVar16 + 4) = *(undefined4 *)(param_2 + 4);
        uVar2 = *(undefined4 *)(param_2 + 0x18);
        *(undefined4 *)(pUVar16 + 8) = *(undefined4 *)(param_2 + 8);
        uVar13 = *(undefined8 *)(param_2 + 0x28);
        uVar3 = *(undefined4 *)(param_2 + 0xc);
        *(undefined8 *)(pUVar16 + 0x10) = uVar14;
        *(undefined4 *)(pUVar16 + 0xc) = uVar3;
        lVar18 = *(long *)(param_2 + 0x20);
        *(long *)(pUVar16 + 0x20) = lVar18;
        *(undefined4 *)(pUVar16 + 0x18) = uVar2;
        *(undefined8 *)(pUVar16 + 0x28) = uVar13;
        *(UMat **)(pUVar16 + 0x30) = pUVar16 + 8;
        *(UMat **)(pUVar16 + 0x38) = pUVar16 + 0x40;
        *(undefined8 *)(pUVar16 + 0x48) = 0;
        *(undefined8 *)(pUVar16 + 0x40) = 0;
        if (lVar18 != 0) {
          piVar1 = (int *)(lVar18 + 0x10);
          do {
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar5) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
        }
        if (*(int *)(param_2 + 4) < 3) {
          puVar9 = *(undefined8 **)(param_2 + 0x38);
          puVar8 = *(undefined8 **)(pUVar16 + 0x38);
          *puVar8 = *puVar9;
          puVar8[1] = puVar9[1];
        }
        else {
          *(undefined4 *)(pUVar16 + 4) = 0;
          cv::UMat::copySize(pUVar16,param_2);
        }
      }
      param_2 = param_2 + 0x50;
      pUVar16 = pUVar16 + 0x50;
    } while (pUVar17 != param_2);
    pUVar17 = *(UMat **)(this + 8);
  }
  pUVar19 = *(UMat **)this;
  if (*(UMat **)this != pUVar17) {
    do {
      pUVar20 = pUVar19 + 0x50;
      cv::UMat::~UMat(pUVar19);
      pUVar19 = pUVar20;
    } while (pUVar20 != pUVar17);
    pUVar17 = *(UMat **)this;
  }
  if (pUVar17 != (UMat *)0x0) {
    operator_delete(pUVar17);
  }
  *(UMat **)this = pUVar15;
  *(UMat **)(this + 8) = pUVar16;
  *(UMat **)(this + 0x10) = pUVar15 + uVar21 * 0x50;
  return;
}


==================================================================

### FUNC 00337800 (2304 bytes) name=getUMatVector

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_InputArray::getUMatVector(std::vector<cv::UMat, std::allocator<cv::UMat> >&) const */

void __thiscall cv::_InputArray::getUMatVector(_InputArray *this,vector *param_1)

{
  int *piVar1;
  UMat *this_00;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  bool bVar7;
  int iVar8;
  char *pcVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  long lVar12;
  undefined8 *puVar13;
  UMat *pUVar14;
  UMat *pUVar15;
  UMat *pUVar16;
  ulong uVar17;
  undefined8 uVar18;
  ulong uVar19;
  long *plVar20;
  long lVar21;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined4 local_38;
  long local_30;
  undefined8 local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  iVar8 = kind(this);
  uVar2 = *(uint *)this;
  if (iVar8 == 0) {
    pUVar14 = *(UMat **)(param_1 + 8);
    pUVar15 = *(UMat **)param_1;
    for (pUVar16 = pUVar15; pUVar16 != pUVar14; pUVar16 = pUVar16 + 0x50) {
      UMat::~UMat(pUVar16);
    }
    *(UMat **)(param_1 + 8) = pUVar15;
    return;
  }
  if (iVar8 == 0x50000) {
    plVar20 = *(long **)(this + 8);
    local_20 = &uStack_48;
    pUVar16 = *(UMat **)(param_1 + 8);
    local_18 = &local_10;
    lVar12 = (long)pUVar16 - *(long *)param_1 >> 4;
    lVar21 = plVar20[1] - *plVar20 >> 5;
    uVar19 = lVar12 * -0x3333333333333333;
    local_50 = 0x42ff0000;
    uStack_48 = 0;
    uVar17 = lVar21 * -0x5555555555555555;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    uStack_8 = 0;
    local_10 = 0;
    if (uVar19 < uVar17) {
      std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
                ((vector<cv::UMat,std::allocator<cv::UMat>> *)param_1,pUVar16,
                 uVar17 + lVar12 * 0x3333333333333333,(UMat *)&local_50);
    }
    else if (uVar17 < uVar19) {
      pUVar15 = (UMat *)(*(long *)param_1 + lVar21 * 0x5555555555555570);
      for (pUVar14 = pUVar15; pUVar16 != pUVar14; pUVar14 = pUVar14 + 0x50) {
        UMat::~UMat(pUVar14);
      }
      *(UMat **)(param_1 + 8) = pUVar15;
    }
    UMat::~UMat((UMat *)&local_50);
    if (uVar17 == 0) {
      return;
    }
    lVar21 = 0;
    lVar12 = 0;
    uVar19 = 0;
    do {
      pUVar16 = (UMat *)(*(long *)param_1 + lVar12);
      Mat::getUMat((UMat *)&local_50,*plVar20 + lVar21,uVar2 & 0x3000000,0);
      if (pUVar16 != (UMat *)&local_50) {
        if (local_30 != 0) {
          piVar1 = (int *)(local_30 + 0x10);
          do {
            cVar4 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar7) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
        }
        if (*(long *)(pUVar16 + 0x20) == 0) {
LAB_00337a54:
          if (0 < *(int *)(pUVar16 + 4)) goto LAB_00337a60;
LAB_00337b34:
          *(undefined4 *)pUVar16 = (undefined4)local_50;
          *(undefined8 *)(pUVar16 + 0x20) = 0;
LAB_00337a90:
          if (2 < local_50._4_4_) goto LAB_00337b10;
          *(int *)(pUVar16 + 4) = local_50._4_4_;
          *(undefined4 *)(pUVar16 + 8) = (undefined4)uStack_48;
          puVar10 = *(undefined8 **)(pUVar16 + 0x38);
          *(undefined4 *)(pUVar16 + 0xc) = uStack_48._4_4_;
          *puVar10 = *local_18;
          puVar10[1] = local_18[1];
        }
        else {
          piVar1 = (int *)(*(long *)(pUVar16 + 0x20) + 0x10);
          do {
            iVar8 = *piVar1;
            cVar4 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar7) {
              *piVar1 = iVar8 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          if (iVar8 != 1) goto LAB_00337a54;
          UMat::deallocate(pUVar16);
          if (*(int *)(pUVar16 + 4) < 1) goto LAB_00337b34;
LAB_00337a60:
          iVar8 = 0;
          puVar11 = *(undefined4 **)(pUVar16 + 0x30);
          do {
            *puVar11 = 0;
            iVar8 = iVar8 + 1;
            puVar11 = puVar11 + 1;
          } while (iVar8 < *(int *)(pUVar16 + 4));
          *(undefined8 *)(pUVar16 + 0x20) = 0;
          *(undefined4 *)pUVar16 = (undefined4)local_50;
          if (*(int *)(pUVar16 + 4) < 3) goto LAB_00337a90;
LAB_00337b10:
          UMat::copySize(pUVar16,(UMat *)&local_50);
        }
        *(undefined8 *)(pUVar16 + 0x10) = local_40;
        if (*(int *)(pUVar16 + 0x18) == 0) {
          *(undefined4 *)(pUVar16 + 0x18) = local_38;
        }
        *(undefined8 *)(pUVar16 + 0x28) = local_28;
        *(long *)(pUVar16 + 0x20) = local_30;
      }
      uVar19 = uVar19 + 1;
      lVar12 = lVar12 + 0x50;
      lVar21 = lVar21 + 0x60;
      UMat::~UMat((UMat *)&local_50);
      if (uVar19 == uVar17) {
        return;
      }
    } while( true );
  }
  if (iVar8 == 0xb0000) {
    plVar20 = *(long **)(this + 8);
    pUVar16 = *(UMat **)(param_1 + 8);
    local_20 = &uStack_48;
    lVar12 = (long)pUVar16 - *(long *)param_1 >> 4;
    local_18 = &local_10;
    uVar19 = (plVar20[1] - *plVar20 >> 4) * -0x3333333333333333;
    local_50 = 0x42ff0000;
    bVar7 = (ulong)(lVar12 * -0x3333333333333333) <= uVar19;
    uStack_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    uStack_8 = 0;
    local_10 = 0;
    if (bVar7 && uVar19 + lVar12 * 0x3333333333333333 != 0) {
      std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
                ((vector<cv::UMat,std::allocator<cv::UMat>> *)param_1,pUVar16,
                 uVar19 + lVar12 * 0x3333333333333333,(UMat *)&local_50);
    }
    else if (!bVar7) {
      pUVar15 = (UMat *)(*(long *)param_1 + (plVar20[1] - *plVar20));
      for (pUVar14 = pUVar15; pUVar16 != pUVar14; pUVar14 = pUVar14 + 0x50) {
        UMat::~UMat(pUVar14);
      }
      *(UMat **)(param_1 + 8) = pUVar15;
    }
    UMat::~UMat((UMat *)&local_50);
    if (uVar19 == 0) {
      return;
    }
    lVar12 = 0;
    uVar17 = 0;
    do {
      pUVar16 = (UMat *)(*(long *)param_1 + lVar12);
      pUVar14 = (UMat *)(*plVar20 + lVar12);
      if (pUVar16 != pUVar14) {
        if (*(long *)(pUVar14 + 0x20) != 0) {
          piVar1 = (int *)(*(long *)(pUVar14 + 0x20) + 0x10);
          do {
            cVar4 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar7) {
              *piVar1 = *piVar1 + 1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
        }
        if (*(long *)(pUVar16 + 0x20) != 0) {
          piVar1 = (int *)(*(long *)(pUVar16 + 0x20) + 0x10);
          do {
            iVar8 = *piVar1;
            cVar4 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar7) {
              *piVar1 = iVar8 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          if (iVar8 == 1) {
            UMat::deallocate(pUVar16);
          }
        }
        if (*(int *)(pUVar16 + 4) < 1) {
          *(undefined4 *)pUVar16 = *(undefined4 *)pUVar14;
          *(undefined8 *)(pUVar16 + 0x20) = 0;
LAB_00337e10:
          iVar8 = *(int *)(pUVar14 + 4);
          if (2 < iVar8) goto LAB_00338080;
          puVar13 = *(undefined8 **)(pUVar14 + 0x38);
          puVar10 = *(undefined8 **)(pUVar16 + 0x38);
          uVar3 = *(undefined4 *)(pUVar14 + 8);
          *(undefined4 *)(pUVar16 + 0xc) = *(undefined4 *)(pUVar14 + 0xc);
          *(int *)(pUVar16 + 4) = iVar8;
          *(undefined4 *)(pUVar16 + 8) = uVar3;
          *puVar10 = *puVar13;
          puVar10[1] = puVar13[1];
        }
        else {
          iVar8 = 0;
          puVar11 = *(undefined4 **)(pUVar16 + 0x30);
          do {
            *puVar11 = 0;
            iVar8 = iVar8 + 1;
            puVar11 = puVar11 + 1;
          } while (iVar8 < *(int *)(pUVar16 + 4));
          uVar3 = *(undefined4 *)pUVar14;
          *(undefined8 *)(pUVar16 + 0x20) = 0;
          *(undefined4 *)pUVar16 = uVar3;
          if (*(int *)(pUVar16 + 4) < 3) goto LAB_00337e10;
LAB_00338080:
          UMat::copySize(pUVar16,pUVar14);
        }
        *(undefined8 *)(pUVar16 + 0x10) = *(undefined8 *)(pUVar14 + 0x10);
        if (*(int *)(pUVar16 + 0x18) == 0) {
          *(undefined4 *)(pUVar16 + 0x18) = *(undefined4 *)(pUVar14 + 0x18);
        }
        uVar18 = *(undefined8 *)(pUVar14 + 0x20);
        *(undefined8 *)(pUVar16 + 0x28) = *(undefined8 *)(pUVar14 + 0x28);
        *(undefined8 *)(pUVar16 + 0x20) = uVar18;
      }
      uVar17 = uVar17 + 1;
      lVar12 = lVar12 + 0x50;
      if (uVar17 == uVar19) {
        return;
      }
    } while( true );
  }
  uStack_48 = _UNK_00338198;
  local_50 = _DAT_00338190;
  if (iVar8 != 0xa0000) {
    if (iVar8 != 0x10000) {
      local_50 = 0;
      uStack_48 = 0;
      pcVar9 = (char *)String::allocate((String *)&local_50,0x1e);
      uVar6 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
      uVar3 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
      uVar5 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
      uVar18 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
      *(undefined8 *)(pcVar9 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
      *(undefined4 *)(pcVar9 + 0x18) = uVar3;
      *(undefined2 *)(pcVar9 + 0x1c) = uVar6;
      *(undefined8 *)pcVar9 = uVar18;
      *(undefined8 *)(pcVar9 + 8) = uVar5;
      error(-0xd5,(String *)&local_50,
            "void cv::_InputArray::getUMatVector(std::vector<cv::UMat>&) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x57d);
      String::deallocate((String *)&local_50);
      return;
    }
    pUVar16 = *(UMat **)(param_1 + 8);
    local_18 = &local_10;
    local_20 = &uStack_48;
    uVar18 = *(undefined8 *)(this + 8);
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    uStack_8 = 0;
    local_10 = 0;
    uVar19 = ((long)pUVar16 - *(long *)param_1 >> 4) * -0x3333333333333333;
    if (uVar19 == 0) {
      std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
                ((vector<cv::UMat,std::allocator<cv::UMat>> *)param_1,pUVar16,1,(UMat *)&local_50);
    }
    else if (1 < uVar19) {
      pUVar14 = (UMat *)(*(long *)param_1 + 0x50);
      for (pUVar15 = pUVar14; pUVar16 != pUVar15; pUVar15 = pUVar15 + 0x50) {
        UMat::~UMat(pUVar15);
      }
      *(UMat **)(param_1 + 8) = pUVar14;
    }
    UMat::~UMat((UMat *)&local_50);
    pUVar16 = *(UMat **)param_1;
    Mat::getUMat((UMat *)&local_50,uVar18,uVar2 & 0x3000000,0);
    if (pUVar16 == (UMat *)&local_50) goto LAB_00337cac;
    if (local_30 != 0) {
      piVar1 = (int *)(local_30 + 0x10);
      do {
        cVar4 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = *piVar1 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(long *)(pUVar16 + 0x20) != 0) {
      piVar1 = (int *)(*(long *)(pUVar16 + 0x20) + 0x10);
      do {
        iVar8 = *piVar1;
        cVar4 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar7) {
          *piVar1 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        UMat::deallocate(pUVar16);
      }
    }
    if (*(int *)(pUVar16 + 4) < 1) {
      *(undefined4 *)pUVar16 = (undefined4)local_50;
      *(undefined8 *)(pUVar16 + 0x20) = 0;
LAB_00337c74:
      if (2 < local_50._4_4_) goto LAB_00337c80;
      *(int *)(pUVar16 + 4) = local_50._4_4_;
      *(undefined4 *)(pUVar16 + 8) = (undefined4)uStack_48;
      puVar10 = *(undefined8 **)(pUVar16 + 0x38);
      *(undefined4 *)(pUVar16 + 0xc) = uStack_48._4_4_;
      *puVar10 = *local_18;
      puVar10[1] = local_18[1];
    }
    else {
      iVar8 = 0;
      puVar11 = *(undefined4 **)(pUVar16 + 0x30);
      do {
        *puVar11 = 0;
        iVar8 = iVar8 + 1;
        puVar11 = puVar11 + 1;
      } while (iVar8 < *(int *)(pUVar16 + 4));
      *(undefined8 *)(pUVar16 + 0x20) = 0;
      *(undefined4 *)pUVar16 = (undefined4)local_50;
      if (*(int *)(pUVar16 + 4) < 3) goto LAB_00337c74;
LAB_00337c80:
      UMat::copySize(pUVar16,(UMat *)&local_50);
    }
    *(undefined8 *)(pUVar16 + 0x10) = local_40;
    if (*(int *)(pUVar16 + 0x18) == 0) {
      *(undefined4 *)(pUVar16 + 0x18) = local_38;
    }
    *(long *)(pUVar16 + 0x20) = local_30;
    *(undefined8 *)(pUVar16 + 0x28) = local_28;
LAB_00337cac:
    UMat::~UMat((UMat *)&local_50);
    return;
  }
  pUVar14 = *(UMat **)(param_1 + 8);
  local_18 = &local_10;
  local_20 = &uStack_48;
  pUVar16 = *(UMat **)(this + 8);
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  uStack_8 = 0;
  local_10 = 0;
  uVar19 = ((long)pUVar14 - *(long *)param_1 >> 4) * -0x3333333333333333;
  if (uVar19 == 0) {
    std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
              ((vector<cv::UMat,std::allocator<cv::UMat>> *)param_1,pUVar14,1,(UMat *)&local_50);
  }
  else if (1 < uVar19) {
    pUVar15 = (UMat *)(*(long *)param_1 + 0x50);
    for (this_00 = pUVar15; pUVar14 != this_00; this_00 = this_00 + 0x50) {
      UMat::~UMat(this_00);
    }
    *(UMat **)(param_1 + 8) = pUVar15;
  }
  UMat::~UMat((UMat *)&local_50);
  pUVar14 = *(UMat **)param_1;
  if (pUVar16 == pUVar14) {
    return;
  }
  if (*(long *)(pUVar16 + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(pUVar16 + 0x20) + 0x10);
    do {
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (*(long *)(pUVar14 + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(pUVar14 + 0x20) + 0x10);
    do {
      iVar8 = *piVar1;
      cVar4 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      UMat::deallocate(pUVar14);
    }
  }
  if (*(int *)(pUVar14 + 4) < 1) {
    *(undefined4 *)pUVar14 = *(undefined4 *)pUVar16;
    *(undefined8 *)(pUVar14 + 0x20) = 0;
LAB_00337fa4:
    iVar8 = *(int *)(pUVar16 + 4);
    if (iVar8 < 3) {
      puVar13 = *(undefined8 **)(pUVar16 + 0x38);
      puVar10 = *(undefined8 **)(pUVar14 + 0x38);
      uVar3 = *(undefined4 *)(pUVar16 + 8);
      *(undefined4 *)(pUVar14 + 0xc) = *(undefined4 *)(pUVar16 + 0xc);
      *(int *)(pUVar14 + 4) = iVar8;
      *(undefined4 *)(pUVar14 + 8) = uVar3;
      *puVar10 = *puVar13;
      puVar10[1] = puVar13[1];
      goto LAB_00337fdc;
    }
  }
  else {
    iVar8 = 0;
    puVar11 = *(undefined4 **)(pUVar14 + 0x30);
    do {
      *puVar11 = 0;
      iVar8 = iVar8 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar8 < *(int *)(pUVar14 + 4));
    uVar3 = *(undefined4 *)pUVar16;
    *(undefined8 *)(pUVar14 + 0x20) = 0;
    *(undefined4 *)pUVar14 = uVar3;
    if (*(int *)(pUVar14 + 4) < 3) goto LAB_00337fa4;
  }
  UMat::copySize(pUVar14,pUVar16);
LAB_00337fdc:
  *(undefined8 *)(pUVar14 + 0x10) = *(undefined8 *)(pUVar16 + 0x10);
  if (*(int *)(pUVar14 + 0x18) == 0) {
    *(undefined4 *)(pUVar14 + 0x18) = *(undefined4 *)(pUVar16 + 0x18);
  }
  uVar18 = *(undefined8 *)(pUVar16 + 0x20);
  *(undefined8 *)(pUVar14 + 0x28) = *(undefined8 *)(pUVar16 + 0x28);
  *(undefined8 *)(pUVar14 + 0x20) = uVar18;
  return;
}


==================================================================

### FUNC 003381a0 (2352 bytes) name=_M_fill_insert

/* WARNING: Removing unreachable block (ram,0x00338a5c) */
/* WARNING: Removing unreachable block (ram,0x00338a64) */
/* WARNING: Removing unreachable block (ram,0x00338a68) */
/* WARNING: Removing unreachable block (ram,0x00338a8c) */
/* WARNING: Removing unreachable block (ram,0x00338a98) */
/* std::vector<std::vector<unsigned char, std::allocator<unsigned char> >,
   std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > >
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::vector<unsigned char, std::allocator<unsigned
   char> >*, std::vector<std::vector<unsigned char, std::allocator<unsigned char> >,
   std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > >, unsigned long,
   std::vector<unsigned char, std::allocator<unsigned char> > const&) */

void __thiscall
std::
vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
::_M_fill_insert(vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
                 *this,void **param_2,ulong param_3,long *param_4)

{
  long lVar1;
  ulong uVar2;
  long lVar3;
  undefined8 *puVar4;
  void *pvVar5;
  ulong uVar6;
  void *pvVar7;
  void *pvVar8;
  long lVar9;
  long lVar10;
  ulong uVar11;
  size_t sVar12;
  void *__dest;
  void **ppvVar13;
  undefined8 *puVar14;
  void **ppvVar15;
  void **ppvVar16;
  void *pvVar17;
  void **ppvVar18;
  void **ppvVar19;
  void *local_18;
  void *local_10;
  long local_8;
  
  if (param_3 == 0) {
    return;
  }
  if (param_3 <= (ulong)((*(long *)(this + 0x10) - *(long *)(this + 8) >> 3) * -0x5555555555555555))
  {
    pvVar7 = (void *)*param_4;
    local_18 = (void *)0x0;
    local_10 = (void *)0x0;
    uVar11 = param_4[1] - (long)pvVar7;
    local_8 = 0;
    if (uVar11 == 0) {
      pvVar5 = (void *)0x0;
      uVar6 = 0;
    }
    else {
      pvVar5 = operator_new(uVar11);
      pvVar7 = (void *)*param_4;
      uVar6 = param_4[1] - (long)pvVar7;
    }
    local_8 = (long)pvVar5 + uVar11;
    local_18 = pvVar5;
    if (uVar6 != 0) {
      local_10 = pvVar5;
      memmove(pvVar5,pvVar7,uVar6);
    }
    lVar9 = (long)pvVar5 + uVar6;
    ppvVar13 = *(void ***)(this + 8);
    lVar3 = (long)ppvVar13 - (long)param_2;
    local_10 = (void *)lVar9;
    if (param_3 < (ulong)((lVar3 >> 3) * -0x5555555555555555)) {
      ppvVar18 = ppvVar13 + param_3 * -3;
      ppvVar15 = ppvVar18;
      ppvVar16 = ppvVar13;
      if (ppvVar18 != ppvVar13) {
        do {
          if (ppvVar16 != (void **)0x0) {
            pvVar8 = ppvVar15[1];
            pvVar7 = (void *)0x0;
            pvVar17 = *ppvVar15;
            *ppvVar16 = (void *)0x0;
            ppvVar16[1] = (void *)0x0;
            uVar11 = (long)pvVar8 - (long)pvVar17;
            ppvVar16[2] = (void *)0x0;
            if (uVar11 != 0) {
              pvVar7 = operator_new(uVar11);
            }
            *ppvVar16 = pvVar7;
            ppvVar16[1] = pvVar7;
            ppvVar16[2] = (void *)((long)pvVar7 + uVar11);
            sVar12 = (long)ppvVar15[1] - (long)*ppvVar15;
            if (sVar12 != 0) {
              pvVar7 = memmove(pvVar7,*ppvVar15,sVar12);
            }
            ppvVar16[1] = (void *)((long)pvVar7 + sVar12);
          }
          ppvVar15 = ppvVar15 + 3;
          ppvVar16 = ppvVar16 + 3;
        } while (ppvVar13 != ppvVar15);
        ppvVar15 = *(void ***)(this + 8);
      }
      *(void ***)(this + 8) = ppvVar15 + param_3 * 3;
      ppvVar15 = ppvVar18;
      if (0 < ((long)ppvVar18 - (long)param_2 >> 3) * -0x5555555555555555) {
        do {
          ppvVar16 = ppvVar13 + -3;
          ppvVar19 = ppvVar15 + -3;
          if (ppvVar16 != ppvVar19) {
            pvVar7 = *ppvVar19;
            pvVar17 = ppvVar15[-2];
            pvVar8 = *ppvVar16;
            uVar11 = (long)pvVar17 - (long)pvVar7;
            if ((ulong)((long)ppvVar13[-1] - (long)pvVar8) < uVar11) {
              pvVar8 = operator_new(uVar11);
              if (uVar11 != 0) {
                memmove(pvVar8,pvVar7,uVar11);
              }
              if (*ppvVar16 != (void *)0x0) {
                operator_delete(*ppvVar16);
              }
              *ppvVar16 = pvVar8;
              ppvVar13[-1] = (void *)((long)pvVar8 + uVar11);
            }
            else {
              __dest = ppvVar13[-2];
              sVar12 = (long)__dest - (long)pvVar8;
              if (sVar12 < uVar11) {
                if (sVar12 != 0) {
                  memmove(pvVar8,pvVar7,sVar12);
                  pvVar7 = *ppvVar19;
                  pvVar17 = ppvVar15[-2];
                  pvVar8 = *ppvVar16;
                  __dest = ppvVar13[-2];
                }
                pvVar7 = (void *)((long)pvVar7 + ((long)__dest - (long)pvVar8));
                sVar12 = (long)pvVar17 - (long)pvVar7;
                if (sVar12 != 0) {
                  memmove(__dest,pvVar7,sVar12);
                  pvVar8 = *ppvVar16;
                }
              }
              else if (uVar11 != 0) {
                memmove(pvVar8,pvVar7,uVar11);
                pvVar8 = *ppvVar16;
              }
            }
            ppvVar13[-2] = (void *)((long)pvVar8 + uVar11);
          }
          ppvVar13 = ppvVar16;
          ppvVar15 = ppvVar19;
        } while (ppvVar19 != (void **)((long)ppvVar18 - ((long)ppvVar18 - (long)param_2)));
      }
      ppvVar13 = param_2 + param_3 * 3;
      for (; param_2 != ppvVar13; param_2 = param_2 + 3) {
        if (param_2 != &local_18) {
          pvVar7 = *param_2;
          if ((ulong)((long)param_2[2] - (long)pvVar7) < uVar6) {
            pvVar8 = operator_new(uVar6);
            if (uVar6 != 0) {
              memmove(pvVar8,pvVar5,uVar6);
            }
            if (*param_2 != (void *)0x0) {
              operator_delete(*param_2);
            }
            pvVar7 = (void *)((long)pvVar8 + uVar6);
            *param_2 = pvVar8;
            param_2[2] = pvVar7;
          }
          else {
            pvVar8 = param_2[1];
            uVar11 = (long)pvVar8 - (long)pvVar7;
            if (uVar11 < uVar6) {
              lVar3 = 0;
              if (uVar11 != 0) {
                memmove(pvVar7,pvVar5,uVar11);
                pvVar7 = *param_2;
                pvVar8 = param_2[1];
                lVar3 = (long)pvVar8 - (long)pvVar7;
              }
              sVar12 = lVar9 - ((long)pvVar5 + lVar3);
              if (sVar12 == 0) goto LAB_003388f0;
              memmove(pvVar8,(void *)((long)pvVar5 + lVar3),sVar12);
              pvVar7 = (void *)((long)*param_2 + uVar6);
            }
            else if (uVar6 == 0) {
LAB_003388f0:
              pvVar7 = (void *)((long)pvVar7 + uVar6);
            }
            else {
              memmove(pvVar7,pvVar5,uVar6);
              pvVar7 = (void *)((long)*param_2 + uVar6);
            }
          }
          param_2[1] = pvVar7;
        }
      }
    }
    else {
      lVar1 = param_3 + (lVar3 >> 3) * 0x5555555555555555;
      ppvVar15 = ppvVar13;
      if (lVar1 != 0) {
        lVar10 = lVar1;
        if (uVar6 == 0) {
          do {
            if (ppvVar15 != (void **)0x0) {
              *ppvVar15 = (void *)0x0;
              ppvVar15[2] = (void *)0x0;
              ppvVar15[1] = (void *)0x0;
            }
            lVar10 = lVar10 + -1;
            ppvVar15 = ppvVar15 + 3;
          } while (lVar10 != 0);
        }
        else if (uVar6 == 0) {
          do {
            if (ppvVar15 != (void **)0x0) {
              *ppvVar15 = (void *)0x0;
              ppvVar15[2] = (void *)0x0;
              ppvVar15[1] = (void *)0x0;
            }
            lVar10 = lVar10 + -1;
            ppvVar15 = ppvVar15 + 3;
          } while (lVar10 != 0);
        }
        else {
          do {
            if (ppvVar15 != (void **)0x0) {
              *ppvVar15 = (void *)0x0;
              ppvVar15[1] = (void *)0x0;
              ppvVar15[2] = (void *)0x0;
              pvVar7 = operator_new(uVar6);
              *ppvVar15 = pvVar7;
              ppvVar15[1] = pvVar7;
              ppvVar15[2] = (void *)((long)pvVar7 + uVar6);
              memmove(pvVar7,pvVar5,uVar6);
              ppvVar15[1] = (void *)((long)pvVar7 + uVar6);
            }
            lVar10 = lVar10 + -1;
            ppvVar15 = ppvVar15 + 3;
          } while (lVar10 != 0);
        }
        ppvVar15 = *(void ***)(this + 8);
      }
      ppvVar15 = ppvVar15 + lVar1 * 3;
      *(void ***)(this + 8) = ppvVar15;
      ppvVar16 = param_2;
      if (param_2 == ppvVar13) {
        *(long *)(this + 8) = (long)ppvVar15 + lVar3;
      }
      else {
        do {
          if (ppvVar15 != (void **)0x0) {
            pvVar8 = ppvVar16[1];
            pvVar7 = (void *)0x0;
            pvVar17 = *ppvVar16;
            *ppvVar15 = (void *)0x0;
            ppvVar15[1] = (void *)0x0;
            uVar11 = (long)pvVar8 - (long)pvVar17;
            ppvVar15[2] = (void *)0x0;
            if (uVar11 != 0) {
              pvVar7 = operator_new(uVar11);
            }
            *ppvVar15 = pvVar7;
            ppvVar15[1] = pvVar7;
            ppvVar15[2] = (void *)((long)pvVar7 + uVar11);
            sVar12 = (long)ppvVar16[1] - (long)*ppvVar16;
            if (sVar12 != 0) {
              pvVar7 = memmove(pvVar7,*ppvVar16,sVar12);
            }
            ppvVar15[1] = (void *)((long)pvVar7 + sVar12);
          }
          ppvVar16 = ppvVar16 + 3;
          ppvVar15 = ppvVar15 + 3;
        } while (ppvVar13 != ppvVar16);
        *(long *)(this + 8) = *(long *)(this + 8) + lVar3;
        do {
          if (param_2 != &local_18) {
            pvVar7 = *param_2;
            if ((ulong)((long)param_2[2] - (long)pvVar7) < uVar6) {
              pvVar8 = operator_new(uVar6);
              if (uVar6 != 0) {
                memmove(pvVar8,pvVar5,uVar6);
              }
              if (*param_2 != (void *)0x0) {
                operator_delete(*param_2);
              }
              pvVar7 = (void *)((long)pvVar8 + uVar6);
              *param_2 = pvVar8;
              param_2[2] = pvVar7;
            }
            else {
              pvVar8 = param_2[1];
              uVar11 = (long)pvVar8 - (long)pvVar7;
              if (uVar11 < uVar6) {
                lVar3 = 0;
                if (uVar11 != 0) {
                  memmove(pvVar7,pvVar5,uVar11);
                  pvVar7 = *param_2;
                  pvVar8 = param_2[1];
                  lVar3 = (long)pvVar8 - (long)pvVar7;
                }
                sVar12 = lVar9 - ((long)pvVar5 + lVar3);
                if (sVar12 == 0) goto LAB_00338374;
                memmove(pvVar8,(void *)((long)pvVar5 + lVar3),sVar12);
                pvVar7 = (void *)((long)*param_2 + uVar6);
              }
              else if (uVar6 == 0) {
LAB_00338374:
                pvVar7 = (void *)((long)pvVar7 + uVar6);
              }
              else {
                memmove(pvVar7,pvVar5,uVar6);
                pvVar7 = (void *)((long)*param_2 + uVar6);
              }
            }
            param_2[1] = pvVar7;
          }
          param_2 = param_2 + 3;
        } while (ppvVar13 != param_2);
      }
    }
    if (pvVar5 == (void *)0x0) {
      return;
    }
    operator_delete(pvVar5);
    return;
  }
  lVar3 = *(long *)this;
  lVar9 = *(long *)(this + 8) - lVar3 >> 3;
  uVar11 = lVar9 * -0x5555555555555555;
  if (lVar9 * 0x5555555555555555 + 0xaaaaaaaaaaaaaaaU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar6 = uVar11;
  if (uVar11 < param_3) {
    uVar6 = param_3;
  }
  uVar6 = uVar6 + uVar11;
  if ((uVar11 < uVar6 || uVar11 - uVar6 == 0) && (uVar6 < 0xaaaaaaaaaaaaaab)) {
    lVar3 = (long)param_2 - lVar3;
    if (uVar6 == 0) {
      puVar4 = (undefined8 *)0x0;
      goto LAB_00338424;
    }
    uVar11 = uVar6 * 0x18;
  }
  else {
    lVar3 = (long)param_2 - lVar3;
    uVar11 = 0xfffffffffffffff0;
    uVar6 = 0xaaaaaaaaaaaaaaa;
  }
  puVar4 = operator_new(uVar11);
LAB_00338424:
  puVar14 = (undefined8 *)((long)puVar4 + lVar3);
  uVar11 = param_3;
  do {
    if (puVar14 != (undefined8 *)0x0) {
      lVar9 = param_4[1];
      pvVar7 = (void *)0x0;
      lVar3 = *param_4;
      *puVar14 = 0;
      puVar14[1] = 0;
      uVar2 = lVar9 - lVar3;
      puVar14[2] = 0;
      if (uVar2 != 0) {
        pvVar7 = operator_new(uVar2);
      }
      *puVar14 = pvVar7;
      puVar14[1] = pvVar7;
      puVar14[2] = (long)pvVar7 + uVar2;
      sVar12 = param_4[1] - *param_4;
      if (sVar12 != 0) {
        pvVar7 = memmove(pvVar7,(void *)*param_4,sVar12);
      }
      puVar14[1] = (long)pvVar7 + sVar12;
    }
    uVar11 = uVar11 - 1;
    puVar14 = puVar14 + 3;
  } while (uVar11 != 0);
  puVar14 = puVar4;
  for (ppvVar13 = *(void ***)this; param_2 != ppvVar13; ppvVar13 = ppvVar13 + 3) {
    if (puVar14 != (undefined8 *)0x0) {
      pvVar5 = ppvVar13[1];
      pvVar7 = (void *)0x0;
      pvVar8 = *ppvVar13;
      *puVar14 = 0;
      puVar14[1] = 0;
      uVar11 = (long)pvVar5 - (long)pvVar8;
      puVar14[2] = 0;
      if (uVar11 != 0) {
        pvVar7 = operator_new(uVar11);
      }
      *puVar14 = pvVar7;
      puVar14[1] = pvVar7;
      puVar14[2] = (long)pvVar7 + uVar11;
      sVar12 = (long)ppvVar13[1] - (long)*ppvVar13;
      if (sVar12 != 0) {
        pvVar7 = memmove(pvVar7,*ppvVar13,sVar12);
      }
      puVar14[1] = (long)pvVar7 + sVar12;
    }
    puVar14 = puVar14 + 3;
  }
  ppvVar13 = *(void ***)(this + 8);
  puVar14 = puVar14 + param_3 * 3;
  if (param_2 != ppvVar13) {
    do {
      if (puVar14 != (undefined8 *)0x0) {
        pvVar5 = param_2[1];
        pvVar7 = (void *)0x0;
        pvVar8 = *param_2;
        *puVar14 = 0;
        puVar14[1] = 0;
        uVar11 = (long)pvVar5 - (long)pvVar8;
        puVar14[2] = 0;
        if (uVar11 != 0) {
          pvVar7 = operator_new(uVar11);
        }
        *puVar14 = pvVar7;
        puVar14[1] = pvVar7;
        puVar14[2] = (long)pvVar7 + uVar11;
        sVar12 = (long)param_2[1] - (long)*param_2;
        if (sVar12 != 0) {
          pvVar7 = memmove(pvVar7,*param_2,sVar12);
        }
        puVar14[1] = (long)pvVar7 + sVar12;
      }
      param_2 = param_2 + 3;
      puVar14 = puVar14 + 3;
    } while (ppvVar13 != param_2);
    ppvVar13 = *(void ***)(this + 8);
  }
  ppvVar15 = *(void ***)this;
  if (ppvVar15 != ppvVar13) {
    do {
      if (*ppvVar15 != (void *)0x0) {
        operator_delete(*ppvVar15);
      }
      ppvVar15 = ppvVar15 + 3;
    } while (ppvVar15 != ppvVar13);
    ppvVar13 = *(void ***)this;
  }
  if (ppvVar13 != (void **)0x0) {
    operator_delete(ppvVar13);
  }
  *(undefined8 **)this = puVar4;
  *(undefined8 **)(this + 8) = puVar14;
  *(undefined8 **)(this + 0x10) = puVar4 + uVar6 * 3;
  return;
}


==================================================================

### FUNC 00338cb4 (1304 bytes) name=FUN_00338cb4

void FUN_00338cb4(long *param_1,undefined8 *param_2,ulong param_3,undefined2 *param_4)

{
  undefined1 uVar1;
  undefined1 uVar2;
  long lVar3;
  undefined2 uVar4;
  undefined2 uVar5;
  undefined2 uVar6;
  undefined2 uVar7;
  ulong uVar8;
  undefined1 *puVar9;
  undefined2 *puVar10;
  undefined1 *puVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  undefined1 *puVar14;
  undefined8 *puVar15;
  ulong uVar16;
  long lVar17;
  long lVar18;
  undefined8 *puVar19;
  ulong uVar20;
  
  if (param_3 == 0) {
    return;
  }
  puVar15 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar15 >> 1)) {
    lVar18 = (long)puVar15 - (long)param_2;
    uVar1 = *(undefined1 *)param_4;
    uVar2 = *(undefined1 *)((long)param_4 + 1);
    uVar7 = *param_4;
    uVar6 = *param_4;
    uVar5 = *param_4;
    uVar4 = *param_4;
    if (param_3 < (ulong)(lVar18 >> 1)) {
      puVar19 = (undefined8 *)((long)puVar15 + param_3 * -2);
      puVar12 = puVar15;
      puVar13 = puVar19;
      if (puVar15 != puVar19) {
        do {
          if (puVar12 != (undefined8 *)0x0) {
            *(undefined1 *)puVar12 = *(undefined1 *)puVar13;
            *(undefined1 *)((long)puVar12 + 1) = *(undefined1 *)((long)puVar13 + 1);
          }
          puVar13 = (undefined8 *)((long)puVar13 + 2);
          puVar12 = (undefined8 *)((long)puVar12 + 2);
        } while (puVar15 != puVar13);
        puVar12 = (undefined8 *)param_1[1];
      }
      param_1[1] = (long)((long)puVar12 + param_3 * 2);
      puVar13 = (undefined8 *)((long)puVar19 - ((long)puVar19 - (long)param_2));
      if (1 < (long)puVar19 - (long)param_2) {
        do {
          puVar19 = (undefined8 *)((long)puVar19 + -2);
          puVar15 = (undefined8 *)((long)puVar15 + -2);
          *(undefined2 *)puVar15 = *(undefined2 *)puVar19;
        } while (puVar19 != puVar13);
      }
      puVar15 = (undefined8 *)((long)param_2 + param_3 * 2);
      if (param_2 != puVar15) {
        uVar8 = (ulong)((long)puVar15 - (long)((long)param_2 + 2)) >> 1;
        uVar20 = (uVar8 - 7 >> 3) + 1;
        if (6 < uVar8) {
          uVar16 = 0;
          puVar13 = param_2;
          do {
            puVar13[1] = CONCAT17(uVar2,CONCAT16(uVar1,CONCAT15(uVar2,CONCAT14(uVar1,CONCAT13(uVar2,
                                                  CONCAT12(uVar1,uVar5))))));
            *puVar13 = CONCAT17(uVar2,CONCAT16(uVar1,CONCAT15(uVar2,CONCAT14(uVar1,CONCAT13(uVar2,
                                                  CONCAT12(uVar1,uVar4))))));
            uVar16 = uVar16 + 1;
            puVar13 = puVar13 + 2;
          } while (uVar16 < uVar20);
          param_2 = param_2 + uVar20 * 2;
          if (uVar8 + 1 == uVar20 * 8) {
            return;
          }
        }
        *(undefined1 *)param_2 = uVar1;
        *(undefined1 *)((long)param_2 + 1) = uVar2;
        if (puVar15 != (undefined8 *)((long)param_2 + 2)) {
          *(undefined1 *)((long)param_2 + 2) = uVar1;
          *(undefined1 *)((long)param_2 + 3) = uVar2;
          if (puVar15 != (undefined8 *)((long)param_2 + 4)) {
            *(undefined1 *)((long)param_2 + 4) = uVar1;
            *(undefined1 *)((long)param_2 + 5) = uVar2;
            if (puVar15 != (undefined8 *)((long)param_2 + 6)) {
              *(undefined1 *)((long)param_2 + 6) = uVar1;
              *(undefined1 *)((long)param_2 + 7) = uVar2;
              if (puVar15 != param_2 + 1) {
                *(undefined1 *)(param_2 + 1) = uVar1;
                *(undefined1 *)((long)param_2 + 9) = uVar2;
                if (puVar15 != (undefined8 *)((long)param_2 + 10)) {
                  *(undefined1 *)((long)param_2 + 10) = uVar1;
                  *(undefined1 *)((long)param_2 + 0xb) = uVar2;
                  if (puVar15 != (undefined8 *)((long)param_2 + 0xc)) {
LAB_00339010:
                    *(undefined1 *)((long)param_2 + 0xc) = uVar1;
                    *(undefined1 *)((long)param_2 + 0xd) = uVar2;
                    return;
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      lVar3 = param_3 - (lVar18 >> 1);
      puVar13 = puVar15;
      lVar17 = lVar3;
      if (lVar3 != 0) {
        do {
          if (puVar13 != (undefined8 *)0x0) {
            *(undefined1 *)puVar13 = uVar1;
            *(undefined1 *)((long)puVar13 + 1) = uVar2;
          }
          lVar17 = lVar17 + -1;
          puVar13 = (undefined8 *)((long)puVar13 + 2);
        } while (lVar17 != 0);
        puVar13 = (undefined8 *)param_1[1];
      }
      puVar10 = (undefined2 *)((long)puVar13 + lVar3 * 2);
      param_1[1] = (long)puVar10;
      puVar13 = param_2;
      if (puVar15 == param_2) {
        param_1[1] = (long)((long)puVar10 + lVar18);
      }
      else {
        do {
          if (puVar10 != (undefined2 *)0x0) {
            *(undefined1 *)puVar10 = *(undefined1 *)puVar13;
            *(undefined1 *)((long)puVar10 + 1) = *(undefined1 *)((long)puVar13 + 1);
          }
          puVar13 = (undefined8 *)((long)puVar13 + 2);
          puVar10 = puVar10 + 1;
        } while (puVar15 != puVar13);
        param_1[1] = param_1[1] + lVar18;
        uVar8 = (ulong)((long)puVar15 - (long)((long)param_2 + 2)) >> 1;
        uVar20 = (uVar8 - 7 >> 3) + 1;
        if (6 < uVar8) {
          uVar16 = 0;
          puVar13 = param_2;
          do {
            puVar13[1] = CONCAT17(uVar2,CONCAT16(uVar1,CONCAT15(uVar2,CONCAT14(uVar1,CONCAT13(uVar2,
                                                  CONCAT12(uVar1,uVar7))))));
            *puVar13 = CONCAT17(uVar2,CONCAT16(uVar1,CONCAT15(uVar2,CONCAT14(uVar1,CONCAT13(uVar2,
                                                  CONCAT12(uVar1,uVar6))))));
            uVar16 = uVar16 + 1;
            puVar13 = puVar13 + 2;
          } while (uVar16 < uVar20);
          param_2 = param_2 + uVar20 * 2;
          if (uVar20 * 8 - (uVar8 + 1) == 0) {
            return;
          }
        }
        *(undefined1 *)param_2 = uVar1;
        *(undefined1 *)((long)param_2 + 1) = uVar2;
        if (puVar15 != (undefined8 *)((long)param_2 + 2)) {
          *(undefined1 *)((long)param_2 + 2) = uVar1;
          *(undefined1 *)((long)param_2 + 3) = uVar2;
          if (puVar15 != (undefined8 *)((long)param_2 + 4)) {
            *(undefined1 *)((long)param_2 + 4) = uVar1;
            *(undefined1 *)((long)param_2 + 5) = uVar2;
            if (puVar15 != (undefined8 *)((long)param_2 + 6)) {
              *(undefined1 *)((long)param_2 + 6) = uVar1;
              *(undefined1 *)((long)param_2 + 7) = uVar2;
              if (puVar15 != param_2 + 1) {
                *(undefined1 *)(param_2 + 1) = uVar1;
                *(undefined1 *)((long)param_2 + 9) = uVar2;
                if (puVar15 != (undefined8 *)((long)param_2 + 10)) {
                  *(undefined1 *)((long)param_2 + 10) = uVar1;
                  *(undefined1 *)((long)param_2 + 0xb) = uVar2;
                  if (puVar15 != (undefined8 *)((long)param_2 + 0xc)) goto LAB_00339010;
                }
              }
            }
          }
        }
      }
    }
    return;
  }
  lVar18 = *param_1;
  uVar20 = (long)puVar15 - lVar18 >> 1;
  if (0x7fffffffffffffff - uVar20 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar8 = uVar20;
  if (uVar20 < param_3) {
    uVar8 = param_3;
  }
  uVar8 = uVar8 + uVar20;
  if (((long)uVar8 < 0) || (uVar8 < uVar20)) {
    lVar18 = (long)param_2 - lVar18;
    uVar8 = 0xfffffffffffffffe;
  }
  else {
    lVar18 = (long)param_2 - lVar18;
    if (uVar8 == 0) {
      uVar8 = 0;
      puVar9 = (undefined1 *)0x0;
      goto LAB_0033909c;
    }
    uVar8 = uVar8 * 2;
  }
  puVar9 = operator_new(uVar8);
LAB_0033909c:
  puVar14 = puVar9 + lVar18;
  uVar20 = param_3;
  do {
    if (puVar14 != (undefined1 *)0x0) {
      *puVar14 = *(undefined1 *)param_4;
      puVar14[1] = *(undefined1 *)((long)param_4 + 1);
    }
    uVar20 = uVar20 - 1;
    puVar14 = puVar14 + 2;
  } while (uVar20 != 0);
  puVar13 = (undefined8 *)*param_1;
  puVar14 = puVar9;
  puVar15 = puVar13;
  if (param_2 != puVar13) {
    do {
      if (puVar14 != (undefined1 *)0x0) {
        *puVar14 = *(undefined1 *)puVar15;
        puVar14[1] = *(undefined1 *)((long)puVar15 + 1);
      }
      puVar15 = (undefined8 *)((long)puVar15 + 2);
      puVar14 = puVar14 + 2;
    } while (param_2 != puVar15);
    puVar14 = puVar9 + ((long)param_2 - (long)((long)puVar13 + 2) & 0xfffffffffffffffeU) + 2;
  }
  puVar13 = (undefined8 *)param_1[1];
  puVar14 = puVar14 + param_3 * 2;
  puVar11 = puVar14;
  puVar15 = param_2;
  if (param_2 != puVar13) {
    do {
      if (puVar11 != (undefined1 *)0x0) {
        *puVar11 = *(undefined1 *)puVar15;
        puVar11[1] = *(undefined1 *)((long)puVar15 + 1);
      }
      puVar15 = (undefined8 *)((long)puVar15 + 2);
      puVar11 = puVar11 + 2;
    } while (puVar13 != puVar15);
    puVar14 = puVar14 + ((long)puVar13 - (long)((long)param_2 + 2) & 0xfffffffffffffffeU) + 2;
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)puVar9;
  param_1[1] = (long)puVar14;
  param_1[2] = (long)(puVar9 + uVar8);
  return;
}


==================================================================

### FUNC 003391cc (908 bytes) name=FUN_003391cc

void FUN_003391cc(long *param_1,undefined2 *param_2,ulong param_3,undefined2 *param_4)

{
  undefined1 uVar1;
  undefined2 uVar2;
  long lVar3;
  undefined1 *puVar4;
  undefined2 *puVar5;
  undefined1 *puVar6;
  undefined1 *puVar7;
  undefined2 *puVar8;
  undefined2 *puVar9;
  ulong uVar10;
  undefined2 *puVar11;
  undefined2 *puVar12;
  long lVar13;
  long lVar14;
  ulong uVar15;
  undefined1 local_8;
  undefined1 uStack_7;
  
  if (param_3 == 0) {
    return;
  }
  puVar8 = (undefined2 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar8) * -0x5555555555555555)) {
    lVar13 = (long)puVar8 - (long)param_2;
    uVar2 = *param_4;
    uVar1 = *(undefined1 *)(param_4 + 1);
    if (param_3 < (ulong)(lVar13 * -0x5555555555555555)) {
      puVar12 = (undefined2 *)((long)puVar8 + param_3 * -3);
      puVar5 = puVar8;
      puVar11 = puVar12;
      if (puVar8 != puVar12) {
        do {
          if (puVar5 != (undefined2 *)0x0) {
            *(undefined1 *)puVar5 = *(undefined1 *)puVar11;
            *(undefined1 *)((long)puVar5 + 1) = *(undefined1 *)((long)puVar11 + 1);
            *(undefined1 *)(puVar5 + 1) = *(undefined1 *)(puVar11 + 1);
          }
          puVar11 = (undefined2 *)((long)puVar11 + 3);
          puVar5 = (undefined2 *)((long)puVar5 + 3);
        } while (puVar11 != puVar8);
        puVar5 = (undefined2 *)param_1[1];
      }
      param_1[1] = (long)((long)puVar5 + param_3 * 3);
      puVar11 = puVar8;
      puVar5 = puVar12;
      if (0 < ((long)puVar12 - (long)param_2) * -0x5555555555555555) {
        do {
          puVar9 = (undefined2 *)((long)puVar11 + -3);
          *puVar9 = *(undefined2 *)((long)puVar5 + -3);
          *(undefined1 *)((long)puVar11 + -1) = *(undefined1 *)((long)puVar5 + -1);
          puVar11 = puVar9;
          puVar5 = (undefined2 *)((long)puVar5 + -3);
        } while (puVar9 != (undefined2 *)((long)puVar8 - ((long)puVar12 - (long)param_2)));
      }
      puVar8 = (undefined2 *)((long)param_2 + param_3 * 3);
      for (; param_2 != puVar8; param_2 = (undefined2 *)((long)param_2 + 3)) {
        *param_2 = uVar2;
        *(undefined1 *)(param_2 + 1) = uVar1;
      }
      return;
    }
    lVar3 = param_3 + lVar13 * 0x5555555555555555;
    if (lVar3 == 0) {
      lVar14 = 0;
      puVar11 = puVar8;
    }
    else {
      lVar14 = lVar3 * 2;
      local_8 = (undefined1)uVar2;
      uStack_7 = (undefined1)((ushort)uVar2 >> 8);
      puVar11 = puVar8;
      do {
        if (puVar11 != (undefined2 *)0x0) {
          *(undefined1 *)puVar11 = local_8;
          *(undefined1 *)((long)puVar11 + 1) = uStack_7;
          *(undefined1 *)(puVar11 + 1) = uVar1;
        }
        puVar11 = (undefined2 *)((long)puVar11 + 3);
      } while (puVar11 != (undefined2 *)((long)puVar8 + lVar3 * 3));
      puVar11 = (undefined2 *)param_1[1];
    }
    puVar4 = (undefined1 *)((long)puVar11 + lVar14 + lVar3);
    param_1[1] = (long)puVar4;
    puVar11 = param_2;
    if (puVar8 == param_2) {
      param_1[1] = (long)(puVar4 + lVar13);
      return;
    }
    do {
      if (puVar4 != (undefined1 *)0x0) {
        *puVar4 = *(undefined1 *)puVar11;
        puVar4[1] = *(undefined1 *)((long)puVar11 + 1);
        puVar4[2] = *(undefined1 *)(puVar11 + 1);
      }
      puVar11 = (undefined2 *)((long)puVar11 + 3);
      puVar4 = puVar4 + 3;
    } while (puVar11 != puVar8);
    param_1[1] = param_1[1] + lVar13;
    do {
      puVar8 = (undefined2 *)((long)param_2 + 3);
      *param_2 = uVar2;
      *(undefined1 *)(param_2 + 1) = uVar1;
      param_2 = puVar8;
    } while (puVar8 != puVar11);
    return;
  }
  lVar13 = *param_1;
  uVar10 = ((long)puVar8 - lVar13) * -0x5555555555555555;
  if (((long)puVar8 - lVar13) * 0x5555555555555555 + 0x5555555555555555U < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar15 = uVar10;
  if (uVar10 < param_3) {
    uVar15 = param_3;
  }
  uVar15 = uVar15 + uVar10;
  if ((uVar10 < uVar15 || uVar10 - uVar15 == 0) && (uVar15 < 0x5555555555555556)) {
    lVar13 = (long)param_2 - lVar13;
    if (uVar15 == 0) {
      uVar15 = 0;
      puVar4 = (undefined1 *)0x0;
      goto LAB_00339420;
    }
    uVar15 = uVar15 * 3;
  }
  else {
    lVar13 = (long)param_2 - lVar13;
    uVar15 = 0xffffffffffffffff;
  }
  puVar4 = operator_new(uVar15);
LAB_00339420:
  puVar6 = puVar4 + lVar13;
  puVar7 = puVar6 + param_3 * 3;
  do {
    if (puVar6 != (undefined1 *)0x0) {
      *puVar6 = *(undefined1 *)param_4;
      puVar6[1] = *(undefined1 *)((long)param_4 + 1);
      puVar6[2] = *(undefined1 *)(param_4 + 1);
    }
    puVar6 = puVar6 + 3;
  } while (puVar6 != puVar7);
  puVar11 = (undefined2 *)*param_1;
  puVar6 = puVar4;
  puVar8 = puVar11;
  if (param_2 != puVar11) {
    do {
      if (puVar6 != (undefined1 *)0x0) {
        *puVar6 = *(undefined1 *)puVar8;
        puVar6[1] = *(undefined1 *)((long)puVar8 + 1);
        puVar6[2] = *(undefined1 *)(puVar8 + 1);
      }
      puVar8 = (undefined2 *)((long)puVar8 + 3);
      puVar6 = puVar6 + 3;
    } while (puVar8 != param_2);
    puVar6 = puVar4 + ((long)param_2 - (long)puVar11);
  }
  puVar11 = (undefined2 *)param_1[1];
  puVar6 = puVar6 + param_3 * 3;
  puVar8 = param_2;
  puVar7 = puVar6;
  if (param_2 != puVar11) {
    do {
      if (puVar7 != (undefined1 *)0x0) {
        *puVar7 = *(undefined1 *)puVar8;
        puVar7[1] = *(undefined1 *)((long)puVar8 + 1);
        puVar7[2] = *(undefined1 *)(puVar8 + 1);
      }
      puVar8 = (undefined2 *)((long)puVar8 + 3);
      puVar7 = puVar7 + 3;
    } while (puVar8 != puVar11);
    puVar6 = puVar6 + ((long)puVar8 - (long)param_2);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)puVar4;
  param_1[1] = (long)puVar6;
  param_1[2] = (long)(puVar4 + uVar15);
  return;
}


==================================================================

### FUNC 00339558 (1692 bytes) name=FUN_00339558

void FUN_00339558(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined6 *param_4)

{
  undefined4 *puVar1;
  undefined2 uVar2;
  undefined2 uVar3;
  undefined2 uVar4;
  long lVar5;
  undefined4 uVar6;
  undefined6 uVar7;
  undefined6 uVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  undefined6 uVar11;
  undefined6 uVar12;
  undefined4 uVar13;
  undefined8 *puVar14;
  undefined2 *puVar15;
  ulong uVar16;
  long lVar17;
  undefined2 *puVar18;
  undefined2 *puVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  undefined8 *puVar23;
  ulong uVar24;
  ulong uVar25;
  long lVar26;
  
  if (param_3 == 0) {
    return;
  }
  puVar21 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar21 >> 1) * -0x5555555555555555)) {
    lVar26 = (long)puVar21 - (long)param_2;
    uVar2 = *(undefined2 *)param_4;
    puVar1 = (undefined4 *)((long)param_4 + 2);
    uVar3 = *(undefined2 *)puVar1;
    uVar4 = *(undefined2 *)((long)param_4 + 4);
    uVar13 = *puVar1;
    uVar12 = *param_4;
    uVar11 = *param_4;
    uVar10 = *puVar1;
    uVar9 = *puVar1;
    uVar8 = *param_4;
    uVar7 = *param_4;
    uVar6 = *puVar1;
    if (param_3 < (ulong)((lVar26 >> 1) * -0x5555555555555555)) {
      puVar23 = (undefined8 *)((long)puVar21 + param_3 * -6);
      puVar20 = puVar21;
      for (puVar14 = puVar23; puVar21 != puVar14; puVar14 = (undefined8 *)((long)puVar14 + 6)) {
        if (puVar20 != (undefined8 *)0x0) {
          *(undefined2 *)puVar20 = *(undefined2 *)puVar14;
          *(undefined2 *)((long)puVar20 + 2) = *(undefined2 *)((long)puVar14 + 2);
          *(undefined2 *)((long)puVar20 + 4) = *(undefined2 *)((long)puVar14 + 4);
        }
        puVar20 = (undefined8 *)((long)puVar20 + 6);
      }
      param_1[1] = (long)puVar21 + param_3 * 6;
      puVar14 = puVar21;
      puVar20 = puVar23;
      if (0 < ((long)puVar23 - (long)param_2 >> 1) * -0x5555555555555555) {
        do {
          puVar22 = (undefined8 *)((long)puVar14 + -6);
          *(undefined4 *)puVar22 = *(undefined4 *)((long)puVar20 + -6);
          *(undefined2 *)((long)puVar14 + -2) = *(undefined2 *)((long)puVar20 + -2);
          puVar14 = puVar22;
          puVar20 = (undefined8 *)((long)puVar20 + -6);
        } while (puVar22 != (undefined8 *)((long)puVar21 - ((long)puVar23 - (long)param_2)));
      }
      puVar21 = (undefined8 *)((long)param_2 + param_3 * 6);
      if (param_2 != puVar21) {
        uVar16 = ((ulong)((long)puVar21 - ((long)param_2 + 6)) >> 1) * 0x2aaaaaaaaaaaaaab &
                 0x7fffffffffffffff;
        uVar25 = (uVar16 - 7 >> 3) + 1;
        if (6 < uVar16) {
          uVar24 = 0;
          puVar14 = param_2;
          do {
            uVar24 = uVar24 + 1;
            puVar14[1] = CONCAT26(uVar3,CONCAT24(uVar2,uVar9));
            *puVar14 = CONCAT26(uVar2,uVar8);
            puVar14[3] = CONCAT26(uVar2,uVar7);
            puVar14[2] = CONCAT26(uVar4,CONCAT24(uVar3,CONCAT22(uVar2,uVar4)));
            puVar14[5] = CONCAT26(uVar4,CONCAT24(uVar3,CONCAT22(uVar2,uVar4)));
            puVar14[4] = CONCAT26(uVar3,CONCAT24(uVar2,uVar6));
            puVar14 = puVar14 + 6;
          } while (uVar24 < uVar25);
          param_2 = param_2 + uVar25 * 6;
          if (uVar16 + 1 == uVar25 * 8) {
            return;
          }
        }
        *(undefined2 *)param_2 = uVar2;
        *(undefined2 *)((long)param_2 + 2) = uVar3;
        *(undefined2 *)((long)param_2 + 4) = uVar4;
        if (puVar21 != (undefined8 *)((long)param_2 + 6)) {
          *(undefined2 *)((long)param_2 + 6) = uVar2;
          *(undefined2 *)(param_2 + 1) = uVar3;
          *(undefined2 *)((long)param_2 + 10) = uVar4;
          if (puVar21 != (undefined8 *)((long)param_2 + 0xc)) {
            *(undefined2 *)((long)param_2 + 0xc) = uVar2;
            *(undefined2 *)((long)param_2 + 0xe) = uVar3;
            *(undefined2 *)(param_2 + 2) = uVar4;
            if (puVar21 != (undefined8 *)((long)param_2 + 0x12)) {
              *(undefined2 *)((long)param_2 + 0x12) = uVar2;
              *(undefined2 *)((long)param_2 + 0x14) = uVar3;
              *(undefined2 *)((long)param_2 + 0x16) = uVar4;
              if (puVar21 != param_2 + 3) {
                *(undefined2 *)(param_2 + 3) = uVar2;
                *(undefined2 *)((long)param_2 + 0x1a) = uVar3;
                *(undefined2 *)((long)param_2 + 0x1c) = uVar4;
                if (puVar21 != (undefined8 *)((long)param_2 + 0x1e)) {
                  *(undefined2 *)((long)param_2 + 0x1e) = uVar2;
                  *(undefined2 *)(param_2 + 4) = uVar3;
                  *(undefined2 *)((long)param_2 + 0x22) = uVar4;
                  if (puVar21 != (undefined8 *)((long)param_2 + 0x24)) {
LAB_003399e4:
                    *(undefined2 *)((long)param_2 + 0x24) = uVar2;
                    *(undefined2 *)((long)param_2 + 0x26) = uVar3;
                    *(undefined2 *)(param_2 + 5) = uVar4;
                    return;
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      lVar17 = param_3 + (lVar26 >> 1) * 0x5555555555555555;
      puVar14 = puVar21;
      for (lVar5 = lVar17; lVar5 != 0; lVar5 = lVar5 + -1) {
        if (puVar14 != (undefined8 *)0x0) {
          *(undefined2 *)puVar14 = uVar2;
          *(undefined2 *)((long)puVar14 + 2) = uVar3;
          *(undefined2 *)((long)puVar14 + 4) = uVar4;
        }
        puVar14 = (undefined8 *)((long)puVar14 + 6);
      }
      puVar19 = (undefined2 *)((long)puVar21 + lVar17 * 6);
      param_1[1] = puVar19;
      puVar15 = puVar19;
      puVar14 = param_2;
      if (puVar21 == param_2) {
        param_1[1] = (long)puVar19 + lVar26;
      }
      else {
        do {
          if (puVar15 != (undefined2 *)0x0) {
            *puVar15 = *(undefined2 *)puVar14;
            puVar15[1] = *(undefined2 *)((long)puVar14 + 2);
            puVar15[2] = *(undefined2 *)((long)puVar14 + 4);
          }
          puVar14 = (undefined8 *)((long)puVar14 + 6);
          puVar15 = puVar15 + 3;
        } while (puVar21 != puVar14);
        param_1[1] = (long)puVar19 + lVar26;
        uVar16 = ((ulong)((long)puVar21 - ((long)param_2 + 6)) >> 1) * 0x2aaaaaaaaaaaaaab &
                 0x7fffffffffffffff;
        uVar25 = (uVar16 - 7 >> 3) + 1;
        if (6 < uVar16) {
          uVar24 = 0;
          puVar14 = param_2;
          do {
            uVar24 = uVar24 + 1;
            puVar14[1] = CONCAT26(uVar3,CONCAT24(uVar2,uVar13));
            *puVar14 = CONCAT26(uVar2,uVar12);
            puVar14[3] = CONCAT26(uVar2,uVar11);
            puVar14[2] = CONCAT26(uVar4,CONCAT24(uVar3,CONCAT22(uVar2,uVar4)));
            puVar14[5] = CONCAT26(uVar4,CONCAT24(uVar3,CONCAT22(uVar2,uVar4)));
            puVar14[4] = CONCAT26(uVar3,CONCAT24(uVar2,uVar10));
            puVar14 = puVar14 + 6;
          } while (uVar24 < uVar25);
          param_2 = param_2 + uVar25 * 6;
          if (uVar25 * 8 - (uVar16 + 1) == 0) {
            return;
          }
        }
        *(undefined2 *)param_2 = uVar2;
        *(undefined2 *)((long)param_2 + 2) = uVar3;
        *(undefined2 *)((long)param_2 + 4) = uVar4;
        if (puVar21 != (undefined8 *)((long)param_2 + 6)) {
          *(undefined2 *)((long)param_2 + 6) = uVar2;
          *(undefined2 *)(param_2 + 1) = uVar3;
          *(undefined2 *)((long)param_2 + 10) = uVar4;
          if (puVar21 != (undefined8 *)((long)param_2 + 0xc)) {
            *(undefined2 *)((long)param_2 + 0xc) = uVar2;
            *(undefined2 *)((long)param_2 + 0xe) = uVar3;
            *(undefined2 *)(param_2 + 2) = uVar4;
            if (puVar21 != (undefined8 *)((long)param_2 + 0x12)) {
              *(undefined2 *)((long)param_2 + 0x12) = uVar2;
              *(undefined2 *)((long)param_2 + 0x14) = uVar3;
              *(undefined2 *)((long)param_2 + 0x16) = uVar4;
              if (puVar21 != param_2 + 3) {
                *(undefined2 *)(param_2 + 3) = uVar2;
                *(undefined2 *)((long)param_2 + 0x1a) = uVar3;
                *(undefined2 *)((long)param_2 + 0x1c) = uVar4;
                if (puVar21 != (undefined8 *)((long)param_2 + 0x1e)) {
                  *(undefined2 *)((long)param_2 + 0x1e) = uVar2;
                  *(undefined2 *)(param_2 + 4) = uVar3;
                  *(undefined2 *)((long)param_2 + 0x22) = uVar4;
                  if (puVar21 != (undefined8 *)((long)param_2 + 0x24)) goto LAB_003399e4;
                }
              }
            }
          }
        }
      }
    }
    return;
  }
  puVar14 = (undefined8 *)*param_1;
  lVar26 = (long)puVar21 - (long)puVar14 >> 1;
  uVar25 = lVar26 * -0x5555555555555555;
  if (lVar26 * 0x5555555555555555 + 0x2aaaaaaaaaaaaaaaU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar16 = uVar25;
  if (uVar25 < param_3) {
    uVar16 = param_3;
  }
  uVar16 = uVar16 + uVar25;
  if ((uVar25 < uVar16 || uVar25 - uVar16 == 0) && (uVar16 < 0x2aaaaaaaaaaaaaab)) {
    lVar26 = (long)param_2 - (long)puVar14;
    if (uVar16 == 0) {
      uVar16 = 0;
      puVar15 = (undefined2 *)0x0;
      goto LAB_00339a88;
    }
    uVar16 = uVar16 * 6;
  }
  else {
    lVar26 = (long)param_2 - (long)puVar14;
    uVar16 = 0xfffffffffffffffc;
  }
  puVar15 = operator_new(uVar16);
  puVar21 = (undefined8 *)param_1[1];
  puVar14 = (undefined8 *)*param_1;
LAB_00339a88:
  puVar19 = (undefined2 *)((long)puVar15 + lVar26);
  uVar25 = param_3;
  do {
    if (puVar19 != (undefined2 *)0x0) {
      *puVar19 = *(undefined2 *)param_4;
      puVar19[1] = *(undefined2 *)((long)param_4 + 2);
      puVar19[2] = *(undefined2 *)((long)param_4 + 4);
    }
    uVar25 = uVar25 - 1;
    puVar19 = puVar19 + 3;
  } while (uVar25 != 0);
  puVar19 = puVar15;
  puVar20 = puVar14;
  if (param_2 != puVar14) {
    do {
      if (puVar19 != (undefined2 *)0x0) {
        *puVar19 = *(undefined2 *)puVar20;
        puVar19[1] = *(undefined2 *)((long)puVar20 + 2);
        puVar19[2] = *(undefined2 *)((long)puVar20 + 4);
      }
      puVar20 = (undefined8 *)((long)puVar20 + 6);
      puVar19 = puVar19 + 3;
    } while (param_2 != puVar20);
    puVar19 = puVar15 + ((((ulong)((long)param_2 - ((long)puVar14 + 6)) >> 1) * 0x2aaaaaaaaaaaaaab &
                         0x7fffffffffffffff) + 1) * 3;
  }
  puVar19 = puVar19 + param_3 * 3;
  puVar18 = puVar19;
  puVar20 = param_2;
  if (param_2 != puVar21) {
    do {
      if (puVar18 != (undefined2 *)0x0) {
        *puVar18 = *(undefined2 *)puVar20;
        puVar18[1] = *(undefined2 *)((long)puVar20 + 2);
        puVar18[2] = *(undefined2 *)((long)puVar20 + 4);
      }
      puVar20 = (undefined8 *)((long)puVar20 + 6);
      puVar18 = puVar18 + 3;
    } while (puVar21 != puVar20);
    puVar19 = puVar19 + ((((ulong)((long)puVar21 - ((long)param_2 + 6)) >> 1) * 0x2aaaaaaaaaaaaaab &
                         0x7fffffffffffffff) + 1) * 3;
  }
  if (puVar14 != (undefined8 *)0x0) {
    operator_delete(puVar14);
  }
  *param_1 = puVar15;
  param_1[1] = puVar19;
  param_1[2] = (long)puVar15 + uVar16;
  return;
}


==================================================================

### FUNC 00339bf4 (936 bytes) name=FUN_00339bf4

void FUN_00339bf4(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  undefined4 uVar2;
  long lVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  ulong uVar8;
  ulong uVar9;
  undefined4 *puVar10;
  long lVar11;
  undefined4 *puVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  undefined8 *puVar17;
  ulong uVar18;
  long lVar19;
  
  if (param_3 == 0) {
    return;
  }
  puVar16 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar16 >> 3)) {
    lVar19 = (long)puVar16 - (long)param_2;
    uVar1 = *(undefined4 *)param_4;
    uVar2 = *(undefined4 *)((long)param_4 + 4);
    uVar7 = *param_4;
    uVar6 = *param_4;
    uVar5 = *param_4;
    uVar4 = *param_4;
    if (param_3 < (ulong)(lVar19 >> 3)) {
      puVar17 = puVar16 + -param_3;
      puVar15 = puVar16;
      for (puVar13 = puVar17; puVar16 != puVar13; puVar13 = puVar13 + 1) {
        if (puVar15 != (undefined8 *)0x0) {
          *(undefined4 *)puVar15 = *(undefined4 *)puVar13;
          *(undefined4 *)((long)puVar15 + 4) = *(undefined4 *)((long)puVar13 + 4);
        }
        puVar15 = puVar15 + 1;
      }
      param_1[1] = puVar16 + param_3;
      puVar13 = (undefined8 *)((long)puVar16 - ((long)puVar17 - (long)param_2));
      if (7 < (long)puVar17 - (long)param_2) {
        do {
          puVar17 = puVar17 + -1;
          puVar16 = puVar16 + -1;
          *puVar16 = *puVar17;
        } while (puVar16 != puVar13);
      }
      if (param_2 != param_2 + param_3) {
        uVar8 = (ulong)((long)(param_2 + param_3) - (long)(param_2 + 1)) >> 3;
        uVar18 = (uVar8 - 1 >> 1) + 1;
        if (uVar8 != 0) {
          uVar9 = 0;
          puVar16 = param_2;
          do {
            puVar16[1] = uVar5;
            *puVar16 = uVar4;
            uVar9 = uVar9 + 1;
            puVar16 = puVar16 + 2;
          } while (uVar9 < uVar18);
          param_2 = param_2 + uVar18 * 2;
          if (uVar8 + 1 == uVar18 * 2) {
            return;
          }
        }
LAB_00339df0:
        *(undefined4 *)param_2 = uVar1;
        *(undefined4 *)((long)param_2 + 4) = uVar2;
        return;
      }
    }
    else {
      lVar11 = param_3 - (lVar19 >> 3);
      puVar13 = puVar16;
      for (lVar3 = lVar11; lVar3 != 0; lVar3 = lVar3 + -1) {
        if (puVar13 != (undefined8 *)0x0) {
          *(undefined4 *)puVar13 = uVar1;
          *(undefined4 *)((long)puVar13 + 4) = uVar2;
        }
        puVar13 = puVar13 + 1;
      }
      puVar17 = puVar16 + lVar11;
      param_1[1] = puVar17;
      puVar15 = puVar17;
      puVar13 = param_2;
      if (puVar16 != param_2) {
        do {
          if (puVar15 != (undefined8 *)0x0) {
            *(undefined4 *)puVar15 = *(undefined4 *)puVar13;
            *(undefined4 *)((long)puVar15 + 4) = *(undefined4 *)((long)puVar13 + 4);
          }
          puVar13 = puVar13 + 1;
          puVar15 = puVar15 + 1;
        } while (puVar16 != puVar13);
        param_1[1] = (long)puVar17 + lVar19;
        uVar8 = (ulong)((long)puVar16 - (long)(param_2 + 1)) >> 3;
        uVar18 = (uVar8 - 1 >> 1) + 1;
        if (uVar8 != 0) {
          uVar9 = 0;
          puVar16 = param_2;
          do {
            puVar16[1] = uVar7;
            *puVar16 = uVar6;
            uVar9 = uVar9 + 1;
            puVar16 = puVar16 + 2;
          } while (uVar9 < uVar18);
          param_2 = param_2 + uVar18 * 2;
          if (uVar18 * 2 - (uVar8 + 1) == 0) {
            return;
          }
        }
        goto LAB_00339df0;
      }
      param_1[1] = (long)puVar17 + lVar19;
    }
    return;
  }
  puVar13 = (undefined8 *)*param_1;
  uVar18 = (long)puVar16 - (long)puVar13 >> 3;
  if (0x1fffffffffffffff - uVar18 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar8 = uVar18;
  if (uVar18 < param_3) {
    uVar8 = param_3;
  }
  uVar8 = uVar8 + uVar18;
  if ((uVar8 < uVar18) || (0x1fffffffffffffff < uVar8)) {
    lVar19 = (long)param_2 - (long)puVar13;
    uVar8 = 0xfffffffffffffff8;
  }
  else {
    lVar19 = (long)param_2 - (long)puVar13;
    if (uVar8 == 0) {
      uVar8 = 0;
      puVar10 = (undefined4 *)0x0;
      goto LAB_00339e88;
    }
    uVar8 = uVar8 * 8;
  }
  puVar10 = operator_new(uVar8);
  puVar16 = (undefined8 *)param_1[1];
  puVar13 = (undefined8 *)*param_1;
LAB_00339e88:
  puVar14 = (undefined4 *)((long)puVar10 + lVar19);
  uVar18 = param_3;
  do {
    if (puVar14 != (undefined4 *)0x0) {
      *puVar14 = *(undefined4 *)param_4;
      puVar14[1] = *(undefined4 *)((long)param_4 + 4);
    }
    uVar18 = uVar18 - 1;
    puVar14 = puVar14 + 2;
  } while (uVar18 != 0);
  puVar14 = puVar10;
  puVar15 = puVar13;
  if (param_2 != puVar13) {
    do {
      if (puVar14 != (undefined4 *)0x0) {
        *puVar14 = *(undefined4 *)puVar15;
        puVar14[1] = *(undefined4 *)((long)puVar15 + 4);
      }
      puVar15 = puVar15 + 1;
      puVar14 = puVar14 + 2;
    } while (param_2 != puVar15);
    puVar14 = (undefined4 *)
              ((long)puVar10 + ((long)param_2 - (long)(puVar13 + 1) & 0xfffffffffffffff8U) + 8);
  }
  puVar14 = puVar14 + param_3 * 2;
  puVar12 = puVar14;
  puVar15 = param_2;
  if (param_2 != puVar16) {
    do {
      if (puVar12 != (undefined4 *)0x0) {
        *puVar12 = *(undefined4 *)puVar15;
        puVar12[1] = *(undefined4 *)((long)puVar15 + 4);
      }
      puVar15 = puVar15 + 1;
      puVar12 = puVar12 + 2;
    } while (puVar16 != puVar15);
    puVar14 = (undefined4 *)
              ((long)puVar14 + ((long)puVar16 - (long)(param_2 + 1) & 0xfffffffffffffff8U) + 8);
  }
  if (puVar13 != (undefined8 *)0x0) {
    operator_delete(puVar13);
  }
  *param_1 = puVar10;
  param_1[1] = puVar14;
  param_1[2] = (long)puVar10 + uVar8;
  return;
}


==================================================================

### FUNC 00339f9c (1408 bytes) name=FUN_00339f9c

void FUN_00339f9c(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  ulong uVar15;
  long lVar16;
  undefined4 *puVar17;
  undefined4 *puVar18;
  undefined8 *puVar19;
  undefined8 *puVar20;
  undefined8 *puVar21;
  undefined8 *puVar22;
  ulong uVar23;
  ulong uVar24;
  long lVar25;
  
  if (param_3 == 0) {
    return;
  }
  puVar20 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar20 >> 2) * -0x5555555555555555)) {
    lVar25 = (long)puVar20 - (long)param_2;
    uVar1 = *(undefined4 *)param_4;
    puVar13 = (undefined8 *)((long)param_4 + 4);
    uVar2 = *(undefined4 *)puVar13;
    uVar12 = *param_4;
    uVar11 = *param_4;
    uVar8 = *param_4;
    uVar7 = *param_4;
    uVar3 = *(undefined4 *)(param_4 + 1);
    uVar10 = *puVar13;
    uVar9 = *puVar13;
    uVar6 = *puVar13;
    uVar5 = *puVar13;
    if (param_3 < (ulong)((lVar25 >> 2) * -0x5555555555555555)) {
      puVar22 = (undefined8 *)((long)puVar20 + param_3 * -0xc);
      puVar19 = puVar20;
      for (puVar13 = puVar22; puVar20 != puVar13; puVar13 = (undefined8 *)((long)puVar13 + 0xc)) {
        if (puVar19 != (undefined8 *)0x0) {
          *(undefined4 *)puVar19 = *(undefined4 *)puVar13;
          *(undefined4 *)((long)puVar19 + 4) = *(undefined4 *)((long)puVar13 + 4);
          *(undefined4 *)(puVar19 + 1) = *(undefined4 *)(puVar13 + 1);
        }
        puVar19 = (undefined8 *)((long)puVar19 + 0xc);
      }
      param_1[1] = (undefined4 *)((long)puVar20 + param_3 * 0xc);
      puVar13 = puVar20;
      puVar19 = puVar22;
      if (0 < ((long)puVar22 - (long)param_2 >> 2) * -0x5555555555555555) {
        do {
          puVar21 = (undefined8 *)((long)puVar13 + -0xc);
          *puVar21 = *(undefined8 *)((long)puVar19 + -0xc);
          *(undefined4 *)((long)puVar13 + -4) = *(undefined4 *)((long)puVar19 + -4);
          puVar13 = puVar21;
          puVar19 = (undefined8 *)((long)puVar19 + -0xc);
        } while (puVar21 != (undefined8 *)((long)puVar20 - ((long)puVar22 - (long)param_2)));
      }
      puVar20 = (undefined8 *)((long)param_2 + param_3 * 0xc);
      if (param_2 != puVar20) {
        uVar15 = ((ulong)((long)puVar20 - (long)((long)param_2 + 0xc)) >> 2) * 0x2aaaaaaaaaaaaaab &
                 0x3fffffffffffffff;
        uVar24 = (uVar15 - 3 >> 2) + 1;
        if (2 < uVar15) {
          uVar23 = 0;
          puVar13 = param_2;
          do {
            uVar23 = uVar23 + 1;
            puVar13[1] = CONCAT44(uVar1,uVar3);
            *puVar13 = uVar8;
            puVar13[3] = uVar7;
            puVar13[2] = uVar6;
            puVar13[5] = uVar5;
            puVar13[4] = CONCAT44(uVar1,uVar3);
            puVar13 = puVar13 + 6;
          } while (uVar23 < uVar24);
          param_2 = param_2 + uVar24 * 6;
          if (uVar15 + 1 == uVar24 * 4) {
            return;
          }
        }
        *(undefined4 *)param_2 = uVar1;
        *(undefined4 *)((long)param_2 + 4) = uVar2;
        *(undefined4 *)(param_2 + 1) = uVar3;
        if (puVar20 != (undefined8 *)((long)param_2 + 0xc)) {
          *(undefined4 *)((long)param_2 + 0xc) = uVar1;
          *(undefined4 *)(param_2 + 2) = uVar2;
          *(undefined4 *)((long)param_2 + 0x14) = uVar3;
          if (puVar20 != param_2 + 3) {
LAB_0033a308:
            *(undefined4 *)(param_2 + 3) = uVar1;
            *(undefined4 *)((long)param_2 + 0x1c) = uVar2;
            *(undefined4 *)(param_2 + 4) = uVar3;
            return;
          }
        }
      }
    }
    else {
      lVar16 = param_3 + (lVar25 >> 2) * 0x5555555555555555;
      puVar13 = puVar20;
      for (lVar4 = lVar16; lVar4 != 0; lVar4 = lVar4 + -1) {
        if (puVar13 != (undefined8 *)0x0) {
          *(undefined4 *)puVar13 = uVar1;
          *(undefined4 *)((long)puVar13 + 4) = uVar2;
          *(undefined4 *)(puVar13 + 1) = uVar3;
        }
        puVar13 = (undefined8 *)((long)puVar13 + 0xc);
      }
      puVar18 = (undefined4 *)((long)puVar20 + lVar16 * 0xc);
      param_1[1] = puVar18;
      puVar14 = puVar18;
      puVar13 = param_2;
      if (puVar20 == param_2) {
        param_1[1] = (long)puVar18 + lVar25;
      }
      else {
        do {
          if (puVar14 != (undefined4 *)0x0) {
            *puVar14 = *(undefined4 *)puVar13;
            puVar14[1] = *(undefined4 *)((long)puVar13 + 4);
            puVar14[2] = *(undefined4 *)(puVar13 + 1);
          }
          puVar13 = (undefined8 *)((long)puVar13 + 0xc);
          puVar14 = puVar14 + 3;
        } while (puVar20 != puVar13);
        param_1[1] = (long)puVar18 + lVar25;
        uVar15 = ((ulong)((long)puVar20 - (long)((long)param_2 + 0xc)) >> 2) * 0x2aaaaaaaaaaaaaab &
                 0x3fffffffffffffff;
        uVar24 = (uVar15 - 3 >> 2) + 1;
        if (2 < uVar15) {
          uVar23 = 0;
          puVar13 = param_2;
          do {
            uVar23 = uVar23 + 1;
            puVar13[1] = CONCAT44(uVar1,uVar3);
            *puVar13 = uVar12;
            puVar13[3] = uVar11;
            puVar13[2] = uVar10;
            puVar13[5] = uVar9;
            puVar13[4] = CONCAT44(uVar1,uVar3);
            puVar13 = puVar13 + 6;
          } while (uVar23 < uVar24);
          param_2 = param_2 + uVar24 * 6;
          if (uVar24 * 4 - (uVar15 + 1) == 0) {
            return;
          }
        }
        *(undefined4 *)param_2 = uVar1;
        *(undefined4 *)((long)param_2 + 4) = uVar2;
        *(undefined4 *)(param_2 + 1) = uVar3;
        if (puVar20 != (undefined8 *)((long)param_2 + 0xc)) {
          *(undefined4 *)((long)param_2 + 0xc) = uVar1;
          *(undefined4 *)(param_2 + 2) = uVar2;
          *(undefined4 *)((long)param_2 + 0x14) = uVar3;
          if (puVar20 != param_2 + 3) goto LAB_0033a308;
        }
      }
    }
    return;
  }
  puVar13 = (undefined8 *)*param_1;
  lVar25 = (long)puVar20 - (long)puVar13 >> 2;
  uVar24 = lVar25 * -0x5555555555555555;
  if (lVar25 * 0x5555555555555555 + 0x1555555555555555U < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar15 = uVar24;
  if (uVar24 < param_3) {
    uVar15 = param_3;
  }
  uVar15 = uVar15 + uVar24;
  if ((uVar24 < uVar15 || uVar24 - uVar15 == 0) && (uVar15 < 0x1555555555555556)) {
    lVar25 = (long)param_2 - (long)puVar13;
    if (uVar15 == 0) {
      uVar15 = 0;
      puVar14 = (undefined4 *)0x0;
      goto LAB_0033a3b0;
    }
    uVar15 = uVar15 * 0xc;
  }
  else {
    lVar25 = (long)param_2 - (long)puVar13;
    uVar15 = 0xfffffffffffffffc;
  }
  puVar14 = operator_new(uVar15);
  puVar20 = (undefined8 *)param_1[1];
  puVar13 = (undefined8 *)*param_1;
LAB_0033a3b0:
  puVar18 = (undefined4 *)((long)puVar14 + lVar25);
  uVar24 = param_3;
  do {
    if (puVar18 != (undefined4 *)0x0) {
      *puVar18 = *(undefined4 *)param_4;
      puVar18[1] = *(undefined4 *)((long)param_4 + 4);
      puVar18[2] = *(undefined4 *)(param_4 + 1);
    }
    uVar24 = uVar24 - 1;
    puVar18 = puVar18 + 3;
  } while (uVar24 != 0);
  puVar18 = puVar14;
  puVar19 = puVar13;
  if (param_2 != puVar13) {
    do {
      if (puVar18 != (undefined4 *)0x0) {
        *puVar18 = *(undefined4 *)puVar19;
        puVar18[1] = *(undefined4 *)((long)puVar19 + 4);
        puVar18[2] = *(undefined4 *)(puVar19 + 1);
      }
      puVar19 = (undefined8 *)((long)puVar19 + 0xc);
      puVar18 = puVar18 + 3;
    } while (param_2 != puVar19);
    puVar18 = puVar14 + ((((ulong)((long)param_2 - (long)((long)puVar13 + 0xc)) >> 2) *
                          0x2aaaaaaaaaaaaaab & 0x3fffffffffffffff) + 1) * 3;
  }
  puVar18 = puVar18 + param_3 * 3;
  puVar17 = puVar18;
  puVar19 = param_2;
  if (param_2 != puVar20) {
    do {
      if (puVar17 != (undefined4 *)0x0) {
        *puVar17 = *(undefined4 *)puVar19;
        puVar17[1] = *(undefined4 *)((long)puVar19 + 4);
        puVar17[2] = *(undefined4 *)(puVar19 + 1);
      }
      puVar19 = (undefined8 *)((long)puVar19 + 0xc);
      puVar17 = puVar17 + 3;
    } while (puVar20 != puVar19);
    puVar18 = puVar18 + ((((ulong)((long)puVar20 - (long)((long)param_2 + 0xc)) >> 2) *
                          0x2aaaaaaaaaaaaaab & 0x3fffffffffffffff) + 1) * 3;
  }
  if (puVar13 != (undefined8 *)0x0) {
    operator_delete(puVar13);
  }
  *param_1 = puVar14;
  param_1[1] = puVar18;
  param_1[2] = (long)puVar14 + uVar15;
  return;
}


==================================================================

### FUNC 0033a51c (884 bytes) name=FUN_0033a51c

void FUN_0033a51c(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  long lVar4;
  long lVar5;
  undefined8 *puVar6;
  undefined4 *puVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined8 *puVar11;
  ulong uVar12;
  undefined8 *puVar13;
  long lVar14;
  ulong uVar15;
  
  if (param_3 == 0) {
    return;
  }
  puVar11 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar11 >> 4)) {
    lVar14 = (long)puVar11 - (long)param_2;
    uVar1 = *param_4;
    uVar2 = param_4[1];
    if (param_3 < (ulong)(lVar14 >> 4)) {
      puVar13 = puVar11 + param_3 * -2;
      puVar8 = puVar11;
      for (puVar6 = puVar13; puVar11 != puVar6; puVar6 = puVar6 + 2) {
        if (puVar8 != (undefined8 *)0x0) {
          *(undefined4 *)puVar8 = *(undefined4 *)puVar6;
          *(undefined4 *)((long)puVar8 + 4) = *(undefined4 *)((long)puVar6 + 4);
          *(undefined4 *)(puVar8 + 1) = *(undefined4 *)(puVar6 + 1);
          *(undefined4 *)((long)puVar8 + 0xc) = *(undefined4 *)((long)puVar6 + 0xc);
        }
        puVar8 = puVar8 + 2;
      }
      param_1[1] = puVar11 + param_3 * 2;
      puVar6 = puVar13;
      if (0xf < (long)puVar13 - (long)param_2) {
        do {
          puVar8 = puVar6 + -2;
          uVar3 = puVar6[-1];
          puVar11[-2] = *puVar8;
          puVar11[-1] = uVar3;
          puVar11 = puVar11 + -2;
          puVar6 = puVar8;
        } while (puVar8 != (undefined8 *)((long)puVar13 - ((long)puVar13 - (long)param_2)));
      }
      puVar11 = param_2 + param_3 * 2;
      for (; param_2 != puVar11; param_2 = param_2 + 2) {
        *param_2 = uVar1;
        param_2[1] = uVar2;
      }
      return;
    }
    lVar5 = param_3 - (lVar14 >> 4);
    puVar6 = puVar11;
    for (lVar4 = lVar5; lVar4 != 0; lVar4 = lVar4 + -1) {
      if (puVar6 != (undefined8 *)0x0) {
        puVar6[1] = uVar2;
        *puVar6 = uVar1;
      }
      puVar6 = puVar6 + 2;
    }
    puVar13 = puVar11 + lVar5 * 2;
    param_1[1] = puVar13;
    puVar8 = puVar13;
    puVar6 = param_2;
    if (puVar11 == param_2) {
      param_1[1] = (long)puVar13 + lVar14;
      return;
    }
    do {
      if (puVar8 != (undefined8 *)0x0) {
        *(undefined4 *)puVar8 = *(undefined4 *)puVar6;
        *(undefined4 *)((long)puVar8 + 4) = *(undefined4 *)((long)puVar6 + 4);
        *(undefined4 *)(puVar8 + 1) = *(undefined4 *)(puVar6 + 1);
        *(undefined4 *)((long)puVar8 + 0xc) = *(undefined4 *)((long)puVar6 + 0xc);
      }
      puVar6 = puVar6 + 2;
      puVar8 = puVar8 + 2;
    } while (puVar11 != puVar6);
    param_1[1] = (long)puVar13 + lVar14;
    do {
      puVar6 = param_2 + 2;
      *param_2 = uVar1;
      param_2[1] = uVar2;
      param_2 = puVar6;
    } while (puVar11 != puVar6);
    return;
  }
  puVar6 = (undefined8 *)*param_1;
  uVar12 = (long)puVar11 - (long)puVar6 >> 4;
  if (0xfffffffffffffff - uVar12 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar15 = uVar12;
  if (uVar12 < param_3) {
    uVar15 = param_3;
  }
  uVar15 = uVar15 + uVar12;
  if ((uVar15 < uVar12) || (0xfffffffffffffff < uVar15)) {
    lVar14 = (long)param_2 - (long)puVar6;
    uVar15 = 0xfffffffffffffff0;
  }
  else {
    lVar14 = (long)param_2 - (long)puVar6;
    if (uVar15 == 0) {
      uVar15 = 0;
      puVar7 = (undefined4 *)0x0;
      goto LAB_0033a74c;
    }
    uVar15 = uVar15 * 0x10;
  }
  puVar7 = operator_new(uVar15);
  puVar11 = (undefined8 *)param_1[1];
  puVar6 = (undefined8 *)*param_1;
LAB_0033a74c:
  puVar9 = (undefined4 *)((long)puVar7 + lVar14);
  uVar12 = param_3;
  do {
    if (puVar9 != (undefined4 *)0x0) {
      *puVar9 = *(undefined4 *)param_4;
      puVar9[1] = *(undefined4 *)((long)param_4 + 4);
      puVar9[2] = *(undefined4 *)(param_4 + 1);
      puVar9[3] = *(undefined4 *)((long)param_4 + 0xc);
    }
    uVar12 = uVar12 - 1;
    puVar9 = puVar9 + 4;
  } while (uVar12 != 0);
  puVar9 = puVar7;
  puVar8 = puVar6;
  if (param_2 != puVar6) {
    do {
      if (puVar9 != (undefined4 *)0x0) {
        *puVar9 = *(undefined4 *)puVar8;
        puVar9[1] = *(undefined4 *)((long)puVar8 + 4);
        puVar9[2] = *(undefined4 *)(puVar8 + 1);
        puVar9[3] = *(undefined4 *)((long)puVar8 + 0xc);
      }
      puVar8 = puVar8 + 2;
      puVar9 = puVar9 + 4;
    } while (param_2 != puVar8);
    puVar9 = (undefined4 *)
             ((long)puVar7 + ((long)param_2 - (long)(puVar6 + 2) & 0xfffffffffffffff0U) + 0x10);
  }
  puVar9 = puVar9 + param_3 * 4;
  puVar8 = param_2;
  puVar10 = puVar9;
  if (param_2 != puVar11) {
    do {
      if (puVar10 != (undefined4 *)0x0) {
        *puVar10 = *(undefined4 *)puVar8;
        puVar10[1] = *(undefined4 *)((long)puVar8 + 4);
        puVar10[2] = *(undefined4 *)(puVar8 + 1);
        puVar10[3] = *(undefined4 *)((long)puVar8 + 0xc);
      }
      puVar8 = puVar8 + 2;
      puVar10 = puVar10 + 4;
    } while (puVar8 != puVar11);
    puVar9 = (undefined4 *)
             ((long)puVar9 + ((long)puVar8 - (long)(param_2 + 2) & 0xfffffffffffffff0U) + 0x10);
  }
  if (puVar6 != (undefined8 *)0x0) {
    operator_delete(puVar6);
  }
  *param_1 = puVar7;
  param_1[1] = puVar9;
  param_1[2] = (long)puVar7 + uVar15;
  return;
}


==================================================================

### FUNC 0033a890 (1172 bytes) name=FUN_0033a890

void FUN_0033a890(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  long lVar4;
  long lVar5;
  undefined8 *puVar6;
  undefined4 *puVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  undefined8 uVar13;
  undefined8 *puVar14;
  ulong uVar15;
  long lVar16;
  ulong uVar17;
  
  if (param_3 == 0) {
    return;
  }
  puVar11 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar11 >> 3) * -0x5555555555555555)) {
    lVar16 = (long)puVar11 - (long)param_2;
    uVar13 = param_4[2];
    uVar1 = *param_4;
    uVar2 = param_4[1];
    if (param_3 < (ulong)((lVar16 >> 3) * -0x5555555555555555)) {
      puVar14 = puVar11 + param_3 * -3;
      puVar8 = puVar11;
      for (puVar6 = puVar14; puVar11 != puVar6; puVar6 = puVar6 + 3) {
        if (puVar8 != (undefined8 *)0x0) {
          *(undefined4 *)puVar8 = *(undefined4 *)puVar6;
          *(undefined4 *)((long)puVar8 + 4) = *(undefined4 *)((long)puVar6 + 4);
          *(undefined4 *)(puVar8 + 1) = *(undefined4 *)(puVar6 + 1);
          *(undefined4 *)((long)puVar8 + 0xc) = *(undefined4 *)((long)puVar6 + 0xc);
          *(undefined4 *)(puVar8 + 2) = *(undefined4 *)(puVar6 + 2);
          *(undefined4 *)((long)puVar8 + 0x14) = *(undefined4 *)((long)puVar6 + 0x14);
        }
        puVar8 = puVar8 + 3;
      }
      param_1[1] = puVar11 + param_3 * 3;
      puVar6 = puVar11;
      puVar8 = puVar14;
      if (0 < ((long)puVar14 - (long)param_2 >> 3) * -0x5555555555555555) {
        do {
          puVar12 = puVar6 + -3;
          uVar3 = puVar8[-2];
          *puVar12 = puVar8[-3];
          puVar6[-2] = uVar3;
          puVar6[-1] = puVar8[-1];
          puVar6 = puVar12;
          puVar8 = puVar8 + -3;
        } while (puVar12 != (undefined8 *)((long)puVar11 - ((long)puVar14 - (long)param_2)));
      }
      puVar11 = param_2 + param_3 * 3;
      for (; param_2 != puVar11; param_2 = param_2 + 3) {
        param_2[2] = uVar13;
        *param_2 = uVar1;
        param_2[1] = uVar2;
      }
      return;
    }
    lVar5 = param_3 + (lVar16 >> 3) * 0x5555555555555555;
    puVar6 = puVar11;
    for (lVar4 = lVar5; lVar4 != 0; lVar4 = lVar4 + -1) {
      if (puVar6 != (undefined8 *)0x0) {
        *puVar6 = uVar1;
        puVar6[1] = uVar2;
        puVar6[2] = uVar13;
      }
      puVar6 = puVar6 + 3;
    }
    puVar14 = puVar11 + lVar5 * 3;
    param_1[1] = puVar14;
    puVar8 = puVar14;
    puVar6 = param_2;
    if (puVar11 == param_2) {
      param_1[1] = (long)puVar14 + lVar16;
      return;
    }
    do {
      if (puVar8 != (undefined8 *)0x0) {
        *(undefined4 *)puVar8 = *(undefined4 *)puVar6;
        *(undefined4 *)((long)puVar8 + 4) = *(undefined4 *)((long)puVar6 + 4);
        *(undefined4 *)(puVar8 + 1) = *(undefined4 *)(puVar6 + 1);
        *(undefined4 *)((long)puVar8 + 0xc) = *(undefined4 *)((long)puVar6 + 0xc);
        *(undefined4 *)(puVar8 + 2) = *(undefined4 *)(puVar6 + 2);
        *(undefined4 *)((long)puVar8 + 0x14) = *(undefined4 *)((long)puVar6 + 0x14);
      }
      puVar6 = puVar6 + 3;
      puVar8 = puVar8 + 3;
    } while (puVar11 != puVar6);
    param_1[1] = (long)puVar14 + lVar16;
    do {
      param_2[2] = uVar13;
      *param_2 = uVar1;
      param_2[1] = uVar2;
      param_2 = param_2 + 3;
    } while (puVar11 != param_2);
    return;
  }
  puVar6 = (undefined8 *)*param_1;
  lVar16 = (long)puVar11 - (long)puVar6 >> 3;
  uVar15 = lVar16 * -0x5555555555555555;
  if (lVar16 * 0x5555555555555555 + 0xaaaaaaaaaaaaaaaU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar17 = uVar15;
  if (uVar15 < param_3) {
    uVar17 = param_3;
  }
  uVar17 = uVar17 + uVar15;
  if ((uVar15 < uVar17 || uVar15 - uVar17 == 0) && (uVar17 < 0xaaaaaaaaaaaaaab)) {
    lVar16 = (long)param_2 - (long)puVar6;
    if (uVar17 == 0) {
      uVar17 = 0;
      puVar7 = (undefined4 *)0x0;
      goto LAB_0033ab70;
    }
    uVar17 = uVar17 * 0x18;
  }
  else {
    lVar16 = (long)param_2 - (long)puVar6;
    uVar17 = 0xfffffffffffffff0;
  }
  puVar7 = operator_new(uVar17);
  puVar11 = (undefined8 *)param_1[1];
  puVar6 = (undefined8 *)*param_1;
LAB_0033ab70:
  puVar9 = (undefined4 *)((long)puVar7 + lVar16);
  uVar15 = param_3;
  do {
    if (puVar9 != (undefined4 *)0x0) {
      *puVar9 = *(undefined4 *)param_4;
      puVar9[1] = *(undefined4 *)((long)param_4 + 4);
      puVar9[2] = *(undefined4 *)(param_4 + 1);
      puVar9[3] = *(undefined4 *)((long)param_4 + 0xc);
      puVar9[4] = *(undefined4 *)(param_4 + 2);
      puVar9[5] = *(undefined4 *)((long)param_4 + 0x14);
    }
    uVar15 = uVar15 - 1;
    puVar9 = puVar9 + 6;
  } while (uVar15 != 0);
  puVar9 = puVar7;
  puVar8 = puVar6;
  if (param_2 != puVar6) {
    do {
      if (puVar9 != (undefined4 *)0x0) {
        *puVar9 = *(undefined4 *)puVar8;
        puVar9[1] = *(undefined4 *)((long)puVar8 + 4);
        puVar9[2] = *(undefined4 *)(puVar8 + 1);
        puVar9[3] = *(undefined4 *)((long)puVar8 + 0xc);
        puVar9[4] = *(undefined4 *)(puVar8 + 2);
        puVar9[5] = *(undefined4 *)((long)puVar8 + 0x14);
      }
      puVar8 = puVar8 + 3;
      puVar9 = puVar9 + 6;
    } while (param_2 != puVar8);
    puVar9 = puVar7 + ((((ulong)((long)param_2 - (long)(puVar6 + 3)) >> 3) * 0xaaaaaaaaaaaaaab &
                       0x1fffffffffffffff) + 1) * 6;
  }
  puVar9 = puVar9 + param_3 * 6;
  puVar8 = param_2;
  puVar10 = puVar9;
  if (param_2 != puVar11) {
    do {
      if (puVar10 != (undefined4 *)0x0) {
        *puVar10 = *(undefined4 *)puVar8;
        puVar10[1] = *(undefined4 *)((long)puVar8 + 4);
        puVar10[2] = *(undefined4 *)(puVar8 + 1);
        puVar10[3] = *(undefined4 *)((long)puVar8 + 0xc);
        puVar10[4] = *(undefined4 *)(puVar8 + 2);
        puVar10[5] = *(undefined4 *)((long)puVar8 + 0x14);
      }
      puVar8 = puVar8 + 3;
      puVar10 = puVar10 + 6;
    } while (puVar8 != puVar11);
    puVar9 = puVar9 + ((((ulong)((long)puVar8 - (long)(param_2 + 3)) >> 3) * 0xaaaaaaaaaaaaaab &
                       0x1fffffffffffffff) + 1) * 6;
  }
  if (puVar6 != (undefined8 *)0x0) {
    operator_delete(puVar6);
  }
  *param_1 = puVar7;
  param_1[1] = puVar9;
  param_1[2] = (long)puVar7 + uVar17;
  return;
}


==================================================================

### FUNC 0033ad24 (1136 bytes) name=FUN_0033ad24

void FUN_0033ad24(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  long lVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  undefined4 *puVar12;
  ulong uVar13;
  undefined8 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  long lVar17;
  ulong uVar18;
  
  if (param_3 == 0) {
    return;
  }
  puVar14 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar14 >> 5)) {
    lVar17 = (long)puVar14 - (long)param_2;
    uVar1 = *param_4;
    uVar3 = param_4[1];
    uVar2 = param_4[2];
    uVar4 = param_4[3];
    if (param_3 < (ulong)(lVar17 >> 5)) {
      puVar16 = puVar14 + param_3 * -4;
      puVar10 = puVar14;
      for (puVar8 = puVar16; puVar14 != puVar8; puVar8 = puVar8 + 4) {
        if (puVar10 != (undefined8 *)0x0) {
          *(undefined4 *)puVar10 = *(undefined4 *)puVar8;
          *(undefined4 *)((long)puVar10 + 4) = *(undefined4 *)((long)puVar8 + 4);
          *(undefined4 *)(puVar10 + 1) = *(undefined4 *)(puVar8 + 1);
          *(undefined4 *)((long)puVar10 + 0xc) = *(undefined4 *)((long)puVar8 + 0xc);
          *(undefined4 *)(puVar10 + 2) = *(undefined4 *)(puVar8 + 2);
          *(undefined4 *)((long)puVar10 + 0x14) = *(undefined4 *)((long)puVar8 + 0x14);
          *(undefined4 *)(puVar10 + 3) = *(undefined4 *)(puVar8 + 3);
          *(undefined4 *)((long)puVar10 + 0x1c) = *(undefined4 *)((long)puVar8 + 0x1c);
        }
        puVar10 = puVar10 + 4;
      }
      param_1[1] = puVar14 + param_3 * 4;
      puVar8 = puVar14;
      puVar10 = puVar16;
      if (0x1f < (long)puVar16 - (long)param_2) {
        do {
          uVar5 = puVar10[-3];
          puVar15 = puVar8 + -4;
          *puVar15 = puVar10[-4];
          puVar8[-3] = uVar5;
          uVar5 = puVar10[-1];
          puVar8[-2] = puVar10[-2];
          puVar8[-1] = uVar5;
          puVar8 = puVar15;
          puVar10 = puVar10 + -4;
        } while (puVar15 != (undefined8 *)((long)puVar14 - ((long)puVar16 - (long)param_2)));
      }
      puVar14 = param_2 + param_3 * 4;
      for (; param_2 != puVar14; param_2 = param_2 + 4) {
        *param_2 = uVar1;
        param_2[1] = uVar3;
        param_2[2] = uVar2;
        param_2[3] = uVar4;
      }
      return;
    }
    lVar7 = param_3 - (lVar17 >> 5);
    puVar8 = puVar14;
    for (lVar6 = lVar7; lVar6 != 0; lVar6 = lVar6 + -1) {
      if (puVar8 != (undefined8 *)0x0) {
        puVar8[1] = uVar3;
        *puVar8 = uVar1;
        puVar8[3] = uVar4;
        puVar8[2] = uVar2;
      }
      puVar8 = puVar8 + 4;
    }
    puVar16 = puVar14 + lVar7 * 4;
    param_1[1] = puVar16;
    puVar10 = puVar16;
    puVar8 = param_2;
    if (puVar14 == param_2) {
      param_1[1] = (long)puVar16 + lVar17;
      return;
    }
    do {
      if (puVar10 != (undefined8 *)0x0) {
        *(undefined4 *)puVar10 = *(undefined4 *)puVar8;
        *(undefined4 *)((long)puVar10 + 4) = *(undefined4 *)((long)puVar8 + 4);
        *(undefined4 *)(puVar10 + 1) = *(undefined4 *)(puVar8 + 1);
        *(undefined4 *)((long)puVar10 + 0xc) = *(undefined4 *)((long)puVar8 + 0xc);
        *(undefined4 *)(puVar10 + 2) = *(undefined4 *)(puVar8 + 2);
        *(undefined4 *)((long)puVar10 + 0x14) = *(undefined4 *)((long)puVar8 + 0x14);
        *(undefined4 *)(puVar10 + 3) = *(undefined4 *)(puVar8 + 3);
        *(undefined4 *)((long)puVar10 + 0x1c) = *(undefined4 *)((long)puVar8 + 0x1c);
      }
      puVar8 = puVar8 + 4;
      puVar10 = puVar10 + 4;
    } while (puVar14 != puVar8);
    param_1[1] = (long)puVar16 + lVar17;
    do {
      puVar8 = param_2 + 4;
      *param_2 = uVar1;
      param_2[1] = uVar3;
      param_2[2] = uVar2;
      param_2[3] = uVar4;
      param_2 = puVar8;
    } while (puVar14 != puVar8);
    return;
  }
  puVar8 = (undefined8 *)*param_1;
  uVar13 = (long)puVar14 - (long)puVar8 >> 5;
  if (0x7ffffffffffffff - uVar13 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar18 = uVar13;
  if (uVar13 < param_3) {
    uVar18 = param_3;
  }
  uVar18 = uVar18 + uVar13;
  if ((uVar18 < uVar13) || (0x7ffffffffffffff < uVar18)) {
    lVar17 = (long)param_2 - (long)puVar8;
    uVar18 = 0xffffffffffffffe0;
  }
  else {
    lVar17 = (long)param_2 - (long)puVar8;
    if (uVar18 == 0) {
      uVar18 = 0;
      puVar9 = (undefined4 *)0x0;
      goto LAB_0033aff0;
    }
    uVar18 = uVar18 * 0x20;
  }
  puVar9 = operator_new(uVar18);
  puVar14 = (undefined8 *)param_1[1];
  puVar8 = (undefined8 *)*param_1;
LAB_0033aff0:
  puVar11 = (undefined4 *)((long)puVar9 + lVar17);
  uVar13 = param_3;
  do {
    if (puVar11 != (undefined4 *)0x0) {
      *puVar11 = *(undefined4 *)param_4;
      puVar11[1] = *(undefined4 *)((long)param_4 + 4);
      puVar11[2] = *(undefined4 *)(param_4 + 1);
      puVar11[3] = *(undefined4 *)((long)param_4 + 0xc);
      puVar11[4] = *(undefined4 *)(param_4 + 2);
      puVar11[5] = *(undefined4 *)((long)param_4 + 0x14);
      puVar11[6] = *(undefined4 *)(param_4 + 3);
      puVar11[7] = *(undefined4 *)((long)param_4 + 0x1c);
    }
    uVar13 = uVar13 - 1;
    puVar11 = puVar11 + 8;
  } while (uVar13 != 0);
  puVar11 = puVar9;
  puVar10 = puVar8;
  if (param_2 != puVar8) {
    do {
      if (puVar11 != (undefined4 *)0x0) {
        *puVar11 = *(undefined4 *)puVar10;
        puVar11[1] = *(undefined4 *)((long)puVar10 + 4);
        puVar11[2] = *(undefined4 *)(puVar10 + 1);
        puVar11[3] = *(undefined4 *)((long)puVar10 + 0xc);
        puVar11[4] = *(undefined4 *)(puVar10 + 2);
        puVar11[5] = *(undefined4 *)((long)puVar10 + 0x14);
        puVar11[6] = *(undefined4 *)(puVar10 + 3);
        puVar11[7] = *(undefined4 *)((long)puVar10 + 0x1c);
      }
      puVar10 = puVar10 + 4;
      puVar11 = puVar11 + 8;
    } while (param_2 != puVar10);
    puVar11 = (undefined4 *)
              ((long)puVar9 + ((long)param_2 - (long)(puVar8 + 4) & 0xffffffffffffffe0U) + 0x20);
  }
  puVar11 = puVar11 + param_3 * 8;
  puVar10 = param_2;
  puVar12 = puVar11;
  if (param_2 != puVar14) {
    do {
      if (puVar12 != (undefined4 *)0x0) {
        *puVar12 = *(undefined4 *)puVar10;
        puVar12[1] = *(undefined4 *)((long)puVar10 + 4);
        puVar12[2] = *(undefined4 *)(puVar10 + 1);
        puVar12[3] = *(undefined4 *)((long)puVar10 + 0xc);
        puVar12[4] = *(undefined4 *)(puVar10 + 2);
        puVar12[5] = *(undefined4 *)((long)puVar10 + 0x14);
        puVar12[6] = *(undefined4 *)(puVar10 + 3);
        puVar12[7] = *(undefined4 *)((long)puVar10 + 0x1c);
      }
      puVar10 = puVar10 + 4;
      puVar12 = puVar12 + 8;
    } while (puVar10 != puVar14);
    puVar11 = (undefined4 *)
              ((long)puVar11 + ((long)puVar10 - (long)(param_2 + 4) & 0xffffffffffffffe0U) + 0x20);
  }
  if (puVar8 != (undefined8 *)0x0) {
    operator_delete(puVar8);
  }
  *param_1 = puVar9;
  param_1[1] = puVar11;
  param_1[2] = (long)puVar9 + uVar18;
  return;
}


==================================================================

### FUNC 0033b194 (1372 bytes) name=FUN_0033b194

void FUN_0033b194(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  undefined8 *puVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  ulong uVar15;
  long lVar16;
  long lVar17;
  ulong uVar18;
  undefined4 local_28;
  undefined4 uStack_24;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18;
  undefined4 uStack_14;
  undefined4 local_10;
  undefined4 local_c;
  
  if (param_3 == 0) {
    return;
  }
  puVar12 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar12 >> 2) * -0x71c71c71c71c71c7)) {
    lVar17 = (long)puVar12 - (long)param_2;
    uVar6 = *(undefined4 *)(param_4 + 4);
    uVar1 = *param_4;
    uVar3 = param_4[1];
    uVar2 = param_4[2];
    uVar4 = param_4[3];
    if (param_3 < (ulong)((lVar17 >> 2) * -0x71c71c71c71c71c7)) {
      puVar13 = (undefined8 *)((long)puVar12 + param_3 * -0x24);
      puVar14 = puVar12;
      for (puVar8 = puVar13; puVar12 != puVar8; puVar8 = (undefined8 *)((long)puVar8 + 0x24)) {
        if (puVar14 != (undefined8 *)0x0) {
          *(undefined4 *)puVar14 = *(undefined4 *)puVar8;
          *(undefined4 *)((long)puVar14 + 4) = *(undefined4 *)((long)puVar8 + 4);
          *(undefined4 *)(puVar14 + 1) = *(undefined4 *)(puVar8 + 1);
          *(undefined4 *)((long)puVar14 + 0xc) = *(undefined4 *)((long)puVar8 + 0xc);
          *(undefined4 *)(puVar14 + 2) = *(undefined4 *)(puVar8 + 2);
          *(undefined4 *)((long)puVar14 + 0x14) = *(undefined4 *)((long)puVar8 + 0x14);
          *(undefined4 *)(puVar14 + 3) = *(undefined4 *)(puVar8 + 3);
          *(undefined4 *)((long)puVar14 + 0x1c) = *(undefined4 *)((long)puVar8 + 0x1c);
          *(undefined4 *)(puVar14 + 4) = *(undefined4 *)(puVar8 + 4);
        }
        puVar14 = (undefined8 *)((long)puVar14 + 0x24);
      }
      param_1[1] = (long)puVar12 + param_3 * 0x24;
      puVar8 = puVar13;
      if (0 < ((long)puVar13 - (long)param_2 >> 2) * -0x71c71c71c71c71c7) {
        do {
          puVar14 = (undefined8 *)((long)puVar8 + -0x24);
          uVar5 = *(undefined8 *)((long)puVar8 + -0x1c);
          *(undefined8 *)((long)puVar12 + -0x24) = *puVar14;
          *(undefined8 *)((long)puVar12 + -0x1c) = uVar5;
          uVar5 = *(undefined8 *)((long)puVar8 + -0xc);
          *(undefined8 *)((long)puVar12 + -0x14) = *(undefined8 *)((long)puVar8 + -0x14);
          *(undefined8 *)((long)puVar12 + -0xc) = uVar5;
          *(undefined4 *)((long)puVar12 + -4) = *(undefined4 *)((long)puVar8 + -4);
          puVar12 = (undefined8 *)((long)puVar12 + -0x24);
          puVar8 = puVar14;
        } while (puVar14 != (undefined8 *)((long)puVar13 - ((long)puVar13 - (long)param_2)));
      }
      puVar12 = (undefined8 *)((long)param_2 + param_3 * 0x24);
      for (; param_2 != puVar12; param_2 = (undefined8 *)((long)param_2 + 0x24)) {
        *(undefined4 *)(param_2 + 4) = uVar6;
        *param_2 = uVar1;
        param_2[1] = uVar3;
        param_2[2] = uVar2;
        param_2[3] = uVar4;
      }
      return;
    }
    lVar7 = param_3 + (lVar17 >> 2) * 0x71c71c71c71c71c7;
    if (lVar7 != 0) {
      local_28 = (undefined4)uVar1;
      uStack_24 = (undefined4)((ulong)uVar1 >> 0x20);
      local_20 = (undefined4)uVar3;
      local_1c = (undefined4)((ulong)uVar3 >> 0x20);
      local_18 = (undefined4)uVar2;
      uStack_14 = (undefined4)((ulong)uVar2 >> 0x20);
      local_10 = (undefined4)uVar4;
      local_c = (undefined4)((ulong)uVar4 >> 0x20);
      puVar8 = puVar12;
      lVar16 = lVar7;
      do {
        if (puVar8 != (undefined8 *)0x0) {
          *(undefined4 *)puVar8 = local_28;
          *(undefined4 *)((long)puVar8 + 4) = uStack_24;
          *(undefined4 *)(puVar8 + 1) = local_20;
          *(undefined4 *)((long)puVar8 + 0xc) = local_1c;
          *(undefined4 *)(puVar8 + 2) = local_18;
          *(undefined4 *)((long)puVar8 + 0x14) = uStack_14;
          *(undefined4 *)(puVar8 + 3) = local_10;
          *(undefined4 *)((long)puVar8 + 0x1c) = local_c;
          *(undefined4 *)(puVar8 + 4) = uVar6;
        }
        lVar16 = lVar16 + -1;
        puVar8 = (undefined8 *)((long)puVar8 + 0x24);
      } while (lVar16 != 0);
    }
    puVar10 = (undefined4 *)((long)puVar12 + lVar7 * 0x24);
    param_1[1] = puVar10;
    puVar9 = puVar10;
    puVar8 = param_2;
    if (puVar12 == param_2) {
      param_1[1] = (long)puVar10 + lVar17;
      return;
    }
    do {
      if (puVar9 != (undefined4 *)0x0) {
        *puVar9 = *(undefined4 *)puVar8;
        puVar9[1] = *(undefined4 *)((long)puVar8 + 4);
        puVar9[2] = *(undefined4 *)(puVar8 + 1);
        puVar9[3] = *(undefined4 *)((long)puVar8 + 0xc);
        puVar9[4] = *(undefined4 *)(puVar8 + 2);
        puVar9[5] = *(undefined4 *)((long)puVar8 + 0x14);
        puVar9[6] = *(undefined4 *)(puVar8 + 3);
        puVar9[7] = *(undefined4 *)((long)puVar8 + 0x1c);
        puVar9[8] = *(undefined4 *)(puVar8 + 4);
      }
      puVar8 = (undefined8 *)((long)puVar8 + 0x24);
      puVar9 = puVar9 + 9;
    } while (puVar12 != puVar8);
    param_1[1] = (long)puVar10 + lVar17;
    do {
      *(undefined4 *)(param_2 + 4) = uVar6;
      *param_2 = uVar1;
      param_2[1] = uVar3;
      param_2[2] = uVar2;
      param_2[3] = uVar4;
      param_2 = (undefined8 *)((long)param_2 + 0x24);
    } while (puVar12 != param_2);
    return;
  }
  puVar8 = (undefined8 *)*param_1;
  lVar17 = (long)puVar12 - (long)puVar8 >> 2;
  uVar15 = lVar17 * -0x71c71c71c71c71c7;
  if (lVar17 * 0x71c71c71c71c71c7 + 0x71c71c71c71c71cU < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar18 = uVar15;
  if (uVar15 < param_3) {
    uVar18 = param_3;
  }
  uVar18 = uVar18 + uVar15;
  if ((uVar15 < uVar18 || uVar15 - uVar18 == 0) && (uVar18 < 0x71c71c71c71c71d)) {
    lVar17 = (long)param_2 - (long)puVar8;
    if (uVar18 == 0) {
      uVar18 = 0;
      puVar9 = (undefined4 *)0x0;
      goto LAB_0033b4f4;
    }
    uVar18 = uVar18 * 0x24;
  }
  else {
    lVar17 = (long)param_2 - (long)puVar8;
    uVar18 = 0xfffffffffffffff0;
  }
  puVar9 = operator_new(uVar18);
  puVar12 = (undefined8 *)param_1[1];
  puVar8 = (undefined8 *)*param_1;
LAB_0033b4f4:
  puVar10 = (undefined4 *)((long)puVar9 + lVar17);
  uVar15 = param_3;
  do {
    if (puVar10 != (undefined4 *)0x0) {
      *puVar10 = *(undefined4 *)param_4;
      puVar10[1] = *(undefined4 *)((long)param_4 + 4);
      puVar10[2] = *(undefined4 *)(param_4 + 1);
      puVar10[3] = *(undefined4 *)((long)param_4 + 0xc);
      puVar10[4] = *(undefined4 *)(param_4 + 2);
      puVar10[5] = *(undefined4 *)((long)param_4 + 0x14);
      puVar10[6] = *(undefined4 *)(param_4 + 3);
      puVar10[7] = *(undefined4 *)((long)param_4 + 0x1c);
      puVar10[8] = *(undefined4 *)(param_4 + 4);
    }
    uVar15 = uVar15 - 1;
    puVar10 = puVar10 + 9;
  } while (uVar15 != 0);
  puVar10 = puVar9;
  puVar14 = puVar8;
  if (param_2 != puVar8) {
    do {
      if (puVar10 != (undefined4 *)0x0) {
        *puVar10 = *(undefined4 *)puVar14;
        puVar10[1] = *(undefined4 *)((long)puVar14 + 4);
        puVar10[2] = *(undefined4 *)(puVar14 + 1);
        puVar10[3] = *(undefined4 *)((long)puVar14 + 0xc);
        puVar10[4] = *(undefined4 *)(puVar14 + 2);
        puVar10[5] = *(undefined4 *)((long)puVar14 + 0x14);
        puVar10[6] = *(undefined4 *)(puVar14 + 3);
        puVar10[7] = *(undefined4 *)((long)puVar14 + 0x1c);
        puVar10[8] = *(undefined4 *)(puVar14 + 4);
      }
      puVar14 = (undefined8 *)((long)puVar14 + 0x24);
      puVar10 = puVar10 + 9;
    } while (param_2 != puVar14);
    puVar10 = puVar9 + ((((ulong)((long)param_2 - ((long)puVar8 + 0x24)) >> 2) * 0xe38e38e38e38e39 &
                        0x3fffffffffffffff) + 1) * 9;
  }
  puVar10 = puVar10 + param_3 * 9;
  puVar14 = param_2;
  puVar11 = puVar10;
  if (param_2 != puVar12) {
    do {
      if (puVar11 != (undefined4 *)0x0) {
        *puVar11 = *(undefined4 *)puVar14;
        puVar11[1] = *(undefined4 *)((long)puVar14 + 4);
        puVar11[2] = *(undefined4 *)(puVar14 + 1);
        puVar11[3] = *(undefined4 *)((long)puVar14 + 0xc);
        puVar11[4] = *(undefined4 *)(puVar14 + 2);
        puVar11[5] = *(undefined4 *)((long)puVar14 + 0x14);
        puVar11[6] = *(undefined4 *)(puVar14 + 3);
        puVar11[7] = *(undefined4 *)((long)puVar14 + 0x1c);
        puVar11[8] = *(undefined4 *)(puVar14 + 4);
      }
      puVar14 = (undefined8 *)((long)puVar14 + 0x24);
      puVar11 = puVar11 + 9;
    } while (puVar14 != puVar12);
    puVar10 = puVar10 + ((((ulong)((long)puVar14 - ((long)param_2 + 0x24)) >> 2) * 0xe38e38e38e38e39
                         & 0x3fffffffffffffff) + 1) * 9;
  }
  if (puVar8 != (undefined8 *)0x0) {
    operator_delete(puVar8);
  }
  *param_1 = puVar9;
  param_1[1] = puVar10;
  param_1[2] = (long)puVar9 + uVar18;
  return;
}


==================================================================

### FUNC 0033b6f0 (1496 bytes) name=FUN_0033b6f0

void FUN_0033b6f0(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  undefined8 *puVar12;
  undefined4 *puVar13;
  undefined4 *puVar14;
  undefined8 *puVar15;
  undefined8 *puVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  
  if (param_3 == 0) {
    return;
  }
  puVar16 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)((param_1[2] - (long)puVar16 >> 4) * -0x5555555555555555)) {
    lVar19 = (long)puVar16 - (long)param_2;
    uVar1 = *param_4;
    uVar4 = param_4[1];
    uVar2 = param_4[2];
    uVar5 = param_4[3];
    uVar3 = param_4[4];
    uVar6 = param_4[5];
    if (param_3 < (ulong)((lVar19 >> 4) * -0x5555555555555555)) {
      puVar15 = puVar16 + param_3 * -6;
      puVar12 = puVar16;
      for (puVar10 = puVar15; puVar16 != puVar10; puVar10 = puVar10 + 6) {
        if (puVar12 != (undefined8 *)0x0) {
          *(undefined4 *)puVar12 = *(undefined4 *)puVar10;
          *(undefined4 *)((long)puVar12 + 4) = *(undefined4 *)((long)puVar10 + 4);
          *(undefined4 *)(puVar12 + 1) = *(undefined4 *)(puVar10 + 1);
          *(undefined4 *)((long)puVar12 + 0xc) = *(undefined4 *)((long)puVar10 + 0xc);
          *(undefined4 *)(puVar12 + 2) = *(undefined4 *)(puVar10 + 2);
          *(undefined4 *)((long)puVar12 + 0x14) = *(undefined4 *)((long)puVar10 + 0x14);
          *(undefined4 *)(puVar12 + 3) = *(undefined4 *)(puVar10 + 3);
          *(undefined4 *)((long)puVar12 + 0x1c) = *(undefined4 *)((long)puVar10 + 0x1c);
          *(undefined4 *)(puVar12 + 4) = *(undefined4 *)(puVar10 + 4);
          *(undefined4 *)((long)puVar12 + 0x24) = *(undefined4 *)((long)puVar10 + 0x24);
          *(undefined4 *)(puVar12 + 5) = *(undefined4 *)(puVar10 + 5);
          *(undefined4 *)((long)puVar12 + 0x2c) = *(undefined4 *)((long)puVar10 + 0x2c);
        }
        puVar12 = puVar12 + 6;
      }
      param_1[1] = puVar16 + param_3 * 6;
      puVar10 = puVar15;
      if (0 < ((long)puVar15 - (long)param_2 >> 4) * -0x5555555555555555) {
        do {
          puVar12 = puVar10 + -6;
          uVar7 = puVar10[-5];
          puVar16[-6] = *puVar12;
          puVar16[-5] = uVar7;
          uVar7 = puVar10[-3];
          puVar16[-4] = puVar10[-4];
          puVar16[-3] = uVar7;
          uVar7 = puVar10[-1];
          puVar16[-2] = puVar10[-2];
          puVar16[-1] = uVar7;
          puVar10 = puVar12;
          puVar16 = puVar16 + -6;
        } while (puVar12 != (undefined8 *)((long)puVar15 - ((long)puVar15 - (long)param_2)));
      }
      puVar16 = param_2 + param_3 * 6;
      for (; param_2 != puVar16; param_2 = param_2 + 6) {
        *param_2 = uVar1;
        param_2[1] = uVar4;
        param_2[2] = uVar2;
        param_2[3] = uVar5;
        param_2[4] = uVar3;
        param_2[5] = uVar6;
      }
      return;
    }
    lVar9 = param_3 + (lVar19 >> 4) * 0x5555555555555555;
    puVar10 = puVar16;
    for (lVar8 = lVar9; lVar8 != 0; lVar8 = lVar8 + -1) {
      if (puVar10 != (undefined8 *)0x0) {
        puVar10[1] = uVar4;
        *puVar10 = uVar1;
        puVar10[3] = uVar5;
        puVar10[2] = uVar2;
        puVar10[5] = uVar6;
        puVar10[4] = uVar3;
      }
      puVar10 = puVar10 + 6;
    }
    puVar15 = puVar16 + lVar9 * 6;
    param_1[1] = puVar15;
    puVar12 = puVar15;
    puVar10 = param_2;
    if (puVar16 == param_2) {
      param_1[1] = (long)puVar15 + lVar19;
      return;
    }
    do {
      if (puVar12 != (undefined8 *)0x0) {
        *(undefined4 *)puVar12 = *(undefined4 *)puVar10;
        *(undefined4 *)((long)puVar12 + 4) = *(undefined4 *)((long)puVar10 + 4);
        *(undefined4 *)(puVar12 + 1) = *(undefined4 *)(puVar10 + 1);
        *(undefined4 *)((long)puVar12 + 0xc) = *(undefined4 *)((long)puVar10 + 0xc);
        *(undefined4 *)(puVar12 + 2) = *(undefined4 *)(puVar10 + 2);
        *(undefined4 *)((long)puVar12 + 0x14) = *(undefined4 *)((long)puVar10 + 0x14);
        *(undefined4 *)(puVar12 + 3) = *(undefined4 *)(puVar10 + 3);
        *(undefined4 *)((long)puVar12 + 0x1c) = *(undefined4 *)((long)puVar10 + 0x1c);
        *(undefined4 *)(puVar12 + 4) = *(undefined4 *)(puVar10 + 4);
        *(undefined4 *)((long)puVar12 + 0x24) = *(undefined4 *)((long)puVar10 + 0x24);
        *(undefined4 *)(puVar12 + 5) = *(undefined4 *)(puVar10 + 5);
        *(undefined4 *)((long)puVar12 + 0x2c) = *(undefined4 *)((long)puVar10 + 0x2c);
      }
      puVar10 = puVar10 + 6;
      puVar12 = puVar12 + 6;
    } while (puVar16 != puVar10);
    param_1[1] = (long)puVar15 + lVar19;
    do {
      puVar10 = param_2 + 6;
      *param_2 = uVar1;
      param_2[1] = uVar4;
      param_2[2] = uVar2;
      param_2[3] = uVar5;
      param_2[4] = uVar3;
      param_2[5] = uVar6;
      param_2 = puVar10;
    } while (puVar16 != puVar10);
    return;
  }
  puVar10 = (undefined8 *)*param_1;
  lVar19 = (long)puVar16 - (long)puVar10 >> 4;
  uVar17 = lVar19 * -0x5555555555555555;
  if (lVar19 * 0x5555555555555555 + 0x555555555555555U < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar18 = uVar17;
  if (uVar17 < param_3) {
    uVar18 = param_3;
  }
  uVar18 = uVar18 + uVar17;
  if ((uVar17 < uVar18 || uVar17 - uVar18 == 0) && (uVar18 < 0x555555555555556)) {
    lVar19 = (long)param_2 - (long)puVar10;
    if (uVar18 == 0) {
      uVar18 = 0;
      puVar11 = (undefined4 *)0x0;
      goto LAB_0033ba84;
    }
    uVar18 = uVar18 * 0x30;
  }
  else {
    lVar19 = (long)param_2 - (long)puVar10;
    uVar18 = 0xfffffffffffffff0;
  }
  puVar11 = operator_new(uVar18);
  puVar16 = (undefined8 *)param_1[1];
  puVar10 = (undefined8 *)*param_1;
LAB_0033ba84:
  puVar13 = (undefined4 *)((long)puVar11 + lVar19);
  uVar17 = param_3;
  do {
    if (puVar13 != (undefined4 *)0x0) {
      *puVar13 = *(undefined4 *)param_4;
      puVar13[1] = *(undefined4 *)((long)param_4 + 4);
      puVar13[2] = *(undefined4 *)(param_4 + 1);
      puVar13[3] = *(undefined4 *)((long)param_4 + 0xc);
      puVar13[4] = *(undefined4 *)(param_4 + 2);
      puVar13[5] = *(undefined4 *)((long)param_4 + 0x14);
      puVar13[6] = *(undefined4 *)(param_4 + 3);
      puVar13[7] = *(undefined4 *)((long)param_4 + 0x1c);
      puVar13[8] = *(undefined4 *)(param_4 + 4);
      puVar13[9] = *(undefined4 *)((long)param_4 + 0x24);
      puVar13[10] = *(undefined4 *)(param_4 + 5);
      puVar13[0xb] = *(undefined4 *)((long)param_4 + 0x2c);
    }
    uVar17 = uVar17 - 1;
    puVar13 = puVar13 + 0xc;
  } while (uVar17 != 0);
  puVar13 = puVar11;
  puVar12 = puVar10;
  if (param_2 != puVar10) {
    do {
      if (puVar13 != (undefined4 *)0x0) {
        *puVar13 = *(undefined4 *)puVar12;
        puVar13[1] = *(undefined4 *)((long)puVar12 + 4);
        puVar13[2] = *(undefined4 *)(puVar12 + 1);
        puVar13[3] = *(undefined4 *)((long)puVar12 + 0xc);
        puVar13[4] = *(undefined4 *)(puVar12 + 2);
        puVar13[5] = *(undefined4 *)((long)puVar12 + 0x14);
        puVar13[6] = *(undefined4 *)(puVar12 + 3);
        puVar13[7] = *(undefined4 *)((long)puVar12 + 0x1c);
        puVar13[8] = *(undefined4 *)(puVar12 + 4);
        puVar13[9] = *(undefined4 *)((long)puVar12 + 0x24);
        puVar13[10] = *(undefined4 *)(puVar12 + 5);
        puVar13[0xb] = *(undefined4 *)((long)puVar12 + 0x2c);
      }
      puVar12 = puVar12 + 6;
      puVar13 = puVar13 + 0xc;
    } while (param_2 != puVar12);
    puVar13 = puVar11 + ((((ulong)((long)param_2 - (long)(puVar10 + 6)) >> 4) * 0xaaaaaaaaaaaaaab &
                         0xfffffffffffffff) + 1) * 0xc;
  }
  puVar13 = puVar13 + param_3 * 0xc;
  puVar12 = param_2;
  puVar14 = puVar13;
  if (param_2 != puVar16) {
    do {
      if (puVar14 != (undefined4 *)0x0) {
        *puVar14 = *(undefined4 *)puVar12;
        puVar14[1] = *(undefined4 *)((long)puVar12 + 4);
        puVar14[2] = *(undefined4 *)(puVar12 + 1);
        puVar14[3] = *(undefined4 *)((long)puVar12 + 0xc);
        puVar14[4] = *(undefined4 *)(puVar12 + 2);
        puVar14[5] = *(undefined4 *)((long)puVar12 + 0x14);
        puVar14[6] = *(undefined4 *)(puVar12 + 3);
        puVar14[7] = *(undefined4 *)((long)puVar12 + 0x1c);
        puVar14[8] = *(undefined4 *)(puVar12 + 4);
        puVar14[9] = *(undefined4 *)((long)puVar12 + 0x24);
        puVar14[10] = *(undefined4 *)(puVar12 + 5);
        puVar14[0xb] = *(undefined4 *)((long)puVar12 + 0x2c);
      }
      puVar12 = puVar12 + 6;
      puVar14 = puVar14 + 0xc;
    } while (puVar12 != puVar16);
    puVar13 = puVar13 + ((((ulong)((long)puVar12 - (long)(param_2 + 6)) >> 4) * 0xaaaaaaaaaaaaaab &
                         0xfffffffffffffff) + 1) * 0xc;
  }
  if (puVar10 != (undefined8 *)0x0) {
    operator_delete(puVar10);
  }
  *param_1 = puVar11;
  param_1[1] = puVar13;
  param_1[2] = (long)puVar11 + uVar18;
  return;
}


==================================================================

### FUNC 0033bcc8 (1628 bytes) name=FUN_0033bcc8

void FUN_0033bcc8(undefined8 *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  long lVar10;
  long lVar11;
  undefined8 *puVar12;
  undefined4 *puVar13;
  undefined8 *puVar14;
  undefined4 *puVar15;
  undefined4 *puVar16;
  ulong uVar17;
  undefined8 *puVar18;
  undefined8 *puVar19;
  ulong uVar20;
  long lVar21;
  
  if (param_3 == 0) {
    return;
  }
  puVar19 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar19 >> 6)) {
    lVar21 = (long)puVar19 - (long)param_2;
    uVar1 = *param_4;
    uVar5 = param_4[1];
    uVar2 = param_4[2];
    uVar6 = param_4[3];
    uVar3 = param_4[4];
    uVar7 = param_4[5];
    uVar4 = param_4[6];
    uVar8 = param_4[7];
    if (param_3 < (ulong)(lVar21 >> 6)) {
      puVar18 = puVar19 + param_3 * -8;
      puVar14 = puVar19;
      for (puVar12 = puVar18; puVar19 != puVar12; puVar12 = puVar12 + 8) {
        if (puVar14 != (undefined8 *)0x0) {
          *(undefined4 *)puVar14 = *(undefined4 *)puVar12;
          *(undefined4 *)((long)puVar14 + 4) = *(undefined4 *)((long)puVar12 + 4);
          *(undefined4 *)(puVar14 + 1) = *(undefined4 *)(puVar12 + 1);
          *(undefined4 *)((long)puVar14 + 0xc) = *(undefined4 *)((long)puVar12 + 0xc);
          *(undefined4 *)(puVar14 + 2) = *(undefined4 *)(puVar12 + 2);
          *(undefined4 *)((long)puVar14 + 0x14) = *(undefined4 *)((long)puVar12 + 0x14);
          *(undefined4 *)(puVar14 + 3) = *(undefined4 *)(puVar12 + 3);
          *(undefined4 *)((long)puVar14 + 0x1c) = *(undefined4 *)((long)puVar12 + 0x1c);
          *(undefined4 *)(puVar14 + 4) = *(undefined4 *)(puVar12 + 4);
          *(undefined4 *)((long)puVar14 + 0x24) = *(undefined4 *)((long)puVar12 + 0x24);
          *(undefined4 *)(puVar14 + 5) = *(undefined4 *)(puVar12 + 5);
          *(undefined4 *)((long)puVar14 + 0x2c) = *(undefined4 *)((long)puVar12 + 0x2c);
          *(undefined4 *)(puVar14 + 6) = *(undefined4 *)(puVar12 + 6);
          *(undefined4 *)((long)puVar14 + 0x34) = *(undefined4 *)((long)puVar12 + 0x34);
          *(undefined4 *)(puVar14 + 7) = *(undefined4 *)(puVar12 + 7);
          *(undefined4 *)((long)puVar14 + 0x3c) = *(undefined4 *)((long)puVar12 + 0x3c);
        }
        puVar14 = puVar14 + 8;
      }
      param_1[1] = puVar19 + param_3 * 8;
      puVar12 = puVar18;
      if (0x3f < (long)puVar18 - (long)param_2) {
        do {
          puVar14 = puVar12 + -8;
          uVar9 = puVar12[-7];
          puVar19[-8] = *puVar14;
          puVar19[-7] = uVar9;
          uVar9 = puVar12[-5];
          puVar19[-6] = puVar12[-6];
          puVar19[-5] = uVar9;
          uVar9 = puVar12[-3];
          puVar19[-4] = puVar12[-4];
          puVar19[-3] = uVar9;
          uVar9 = puVar12[-1];
          puVar19[-2] = puVar12[-2];
          puVar19[-1] = uVar9;
          puVar12 = puVar14;
          puVar19 = puVar19 + -8;
        } while (puVar14 != (undefined8 *)((long)puVar18 - ((long)puVar18 - (long)param_2)));
      }
      puVar19 = param_2 + param_3 * 8;
      for (; param_2 != puVar19; param_2 = param_2 + 8) {
        *param_2 = uVar1;
        param_2[1] = uVar5;
        param_2[2] = uVar2;
        param_2[3] = uVar6;
        param_2[4] = uVar3;
        param_2[5] = uVar7;
        param_2[6] = uVar4;
        param_2[7] = uVar8;
      }
      return;
    }
    lVar11 = param_3 - (lVar21 >> 6);
    puVar12 = puVar19;
    for (lVar10 = lVar11; lVar10 != 0; lVar10 = lVar10 + -1) {
      if (puVar12 != (undefined8 *)0x0) {
        puVar12[1] = uVar5;
        *puVar12 = uVar1;
        puVar12[3] = uVar6;
        puVar12[2] = uVar2;
        puVar12[5] = uVar7;
        puVar12[4] = uVar3;
        puVar12[7] = uVar8;
        puVar12[6] = uVar4;
      }
      puVar12 = puVar12 + 8;
    }
    puVar18 = puVar19 + lVar11 * 8;
    param_1[1] = puVar18;
    puVar14 = puVar18;
    puVar12 = param_2;
    if (puVar19 == param_2) {
      param_1[1] = (long)puVar18 + lVar21;
      return;
    }
    do {
      if (puVar14 != (undefined8 *)0x0) {
        *(undefined4 *)puVar14 = *(undefined4 *)puVar12;
        *(undefined4 *)((long)puVar14 + 4) = *(undefined4 *)((long)puVar12 + 4);
        *(undefined4 *)(puVar14 + 1) = *(undefined4 *)(puVar12 + 1);
        *(undefined4 *)((long)puVar14 + 0xc) = *(undefined4 *)((long)puVar12 + 0xc);
        *(undefined4 *)(puVar14 + 2) = *(undefined4 *)(puVar12 + 2);
        *(undefined4 *)((long)puVar14 + 0x14) = *(undefined4 *)((long)puVar12 + 0x14);
        *(undefined4 *)(puVar14 + 3) = *(undefined4 *)(puVar12 + 3);
        *(undefined4 *)((long)puVar14 + 0x1c) = *(undefined4 *)((long)puVar12 + 0x1c);
        *(undefined4 *)(puVar14 + 4) = *(undefined4 *)(puVar12 + 4);
        *(undefined4 *)((long)puVar14 + 0x24) = *(undefined4 *)((long)puVar12 + 0x24);
        *(undefined4 *)(puVar14 + 5) = *(undefined4 *)(puVar12 + 5);
        *(undefined4 *)((long)puVar14 + 0x2c) = *(undefined4 *)((long)puVar12 + 0x2c);
        *(undefined4 *)(puVar14 + 6) = *(undefined4 *)(puVar12 + 6);
        *(undefined4 *)((long)puVar14 + 0x34) = *(undefined4 *)((long)puVar12 + 0x34);
        *(undefined4 *)(puVar14 + 7) = *(undefined4 *)(puVar12 + 7);
        *(undefined4 *)((long)puVar14 + 0x3c) = *(undefined4 *)((long)puVar12 + 0x3c);
      }
      puVar12 = puVar12 + 8;
      puVar14 = puVar14 + 8;
    } while (puVar19 != puVar12);
    param_1[1] = (long)puVar18 + lVar21;
    do {
      puVar12 = param_2 + 8;
      *param_2 = uVar1;
      param_2[1] = uVar5;
      param_2[2] = uVar2;
      param_2[3] = uVar6;
      param_2[4] = uVar3;
      param_2[5] = uVar7;
      param_2[6] = uVar4;
      param_2[7] = uVar8;
      param_2 = puVar12;
    } while (puVar19 != puVar12);
    return;
  }
  puVar12 = (undefined8 *)*param_1;
  uVar17 = (long)puVar19 - (long)puVar12 >> 6;
  if (0x3ffffffffffffff - uVar17 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar20 = uVar17;
  if (uVar17 < param_3) {
    uVar20 = param_3;
  }
  uVar20 = uVar20 + uVar17;
  if ((uVar20 < uVar17) || (0x3ffffffffffffff < uVar20)) {
    lVar21 = (long)param_2 - (long)puVar12;
    uVar20 = 0xffffffffffffffc0;
  }
  else {
    lVar21 = (long)param_2 - (long)puVar12;
    if (uVar20 == 0) {
      uVar20 = 0;
      puVar13 = (undefined4 *)0x0;
      goto LAB_0033c0bc;
    }
    uVar20 = uVar20 * 0x40;
  }
  puVar13 = operator_new(uVar20);
  puVar19 = (undefined8 *)param_1[1];
  puVar12 = (undefined8 *)*param_1;
LAB_0033c0bc:
  puVar15 = (undefined4 *)((long)puVar13 + lVar21);
  uVar17 = param_3;
  do {
    if (puVar15 != (undefined4 *)0x0) {
      *puVar15 = *(undefined4 *)param_4;
      puVar15[1] = *(undefined4 *)((long)param_4 + 4);
      puVar15[2] = *(undefined4 *)(param_4 + 1);
      puVar15[3] = *(undefined4 *)((long)param_4 + 0xc);
      puVar15[4] = *(undefined4 *)(param_4 + 2);
      puVar15[5] = *(undefined4 *)((long)param_4 + 0x14);
      puVar15[6] = *(undefined4 *)(param_4 + 3);
      puVar15[7] = *(undefined4 *)((long)param_4 + 0x1c);
      puVar15[8] = *(undefined4 *)(param_4 + 4);
      puVar15[9] = *(undefined4 *)((long)param_4 + 0x24);
      puVar15[10] = *(undefined4 *)(param_4 + 5);
      puVar15[0xb] = *(undefined4 *)((long)param_4 + 0x2c);
      puVar15[0xc] = *(undefined4 *)(param_4 + 6);
      puVar15[0xd] = *(undefined4 *)((long)param_4 + 0x34);
      puVar15[0xe] = *(undefined4 *)(param_4 + 7);
      puVar15[0xf] = *(undefined4 *)((long)param_4 + 0x3c);
    }
    uVar17 = uVar17 - 1;
    puVar15 = puVar15 + 0x10;
  } while (uVar17 != 0);
  puVar15 = puVar13;
  puVar14 = puVar12;
  if (param_2 != puVar12) {
    do {
      if (puVar15 != (undefined4 *)0x0) {
        *puVar15 = *(undefined4 *)puVar14;
        puVar15[1] = *(undefined4 *)((long)puVar14 + 4);
        puVar15[2] = *(undefined4 *)(puVar14 + 1);
        puVar15[3] = *(undefined4 *)((long)puVar14 + 0xc);
        puVar15[4] = *(undefined4 *)(puVar14 + 2);
        puVar15[5] = *(undefined4 *)((long)puVar14 + 0x14);
        puVar15[6] = *(undefined4 *)(puVar14 + 3);
        puVar15[7] = *(undefined4 *)((long)puVar14 + 0x1c);
        puVar15[8] = *(undefined4 *)(puVar14 + 4);
        puVar15[9] = *(undefined4 *)((long)puVar14 + 0x24);
        puVar15[10] = *(undefined4 *)(puVar14 + 5);
        puVar15[0xb] = *(undefined4 *)((long)puVar14 + 0x2c);
        puVar15[0xc] = *(undefined4 *)(puVar14 + 6);
        puVar15[0xd] = *(undefined4 *)((long)puVar14 + 0x34);
        puVar15[0xe] = *(undefined4 *)(puVar14 + 7);
        puVar15[0xf] = *(undefined4 *)((long)puVar14 + 0x3c);
      }
      puVar14 = puVar14 + 8;
      puVar15 = puVar15 + 0x10;
    } while (param_2 != puVar14);
    puVar15 = (undefined4 *)
              ((long)puVar13 + ((long)param_2 - (long)(puVar12 + 8) & 0xffffffffffffffc0U) + 0x40);
  }
  puVar15 = puVar15 + param_3 * 0x10;
  puVar14 = param_2;
  puVar16 = puVar15;
  if (param_2 != puVar19) {
    do {
      if (puVar16 != (undefined4 *)0x0) {
        *puVar16 = *(undefined4 *)puVar14;
        puVar16[1] = *(undefined4 *)((long)puVar14 + 4);
        puVar16[2] = *(undefined4 *)(puVar14 + 1);
        puVar16[3] = *(undefined4 *)((long)puVar14 + 0xc);
        puVar16[4] = *(undefined4 *)(puVar14 + 2);
        puVar16[5] = *(undefined4 *)((long)puVar14 + 0x14);
        puVar16[6] = *(undefined4 *)(puVar14 + 3);
        puVar16[7] = *(undefined4 *)((long)puVar14 + 0x1c);
        puVar16[8] = *(undefined4 *)(puVar14 + 4);
        puVar16[9] = *(undefined4 *)((long)puVar14 + 0x24);
        puVar16[10] = *(undefined4 *)(puVar14 + 5);
        puVar16[0xb] = *(undefined4 *)((long)puVar14 + 0x2c);
        puVar16[0xc] = *(undefined4 *)(puVar14 + 6);
        puVar16[0xd] = *(undefined4 *)((long)puVar14 + 0x34);
        puVar16[0xe] = *(undefined4 *)(puVar14 + 7);
        puVar16[0xf] = *(undefined4 *)((long)puVar14 + 0x3c);
      }
      puVar14 = puVar14 + 8;
      puVar16 = puVar16 + 0x10;
    } while (puVar14 != puVar19);
    puVar15 = (undefined4 *)
              ((long)puVar15 + ((long)puVar14 - (long)(param_2 + 8) & 0xffffffffffffffc0U) + 0x40);
  }
  if (puVar12 != (undefined8 *)0x0) {
    operator_delete(puVar12);
  }
  *param_1 = puVar13;
  param_1[1] = puVar15;
  param_1[2] = (long)puVar13 + uVar20;
  return;
}


==================================================================

### FUNC 0033c324 (2768 bytes) name=FUN_0033c324

void FUN_0033c324(undefined8 *param_1,undefined4 *param_2,ulong param_3,undefined4 *param_4)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  uint uVar3;
  void *pvVar4;
  undefined4 *puVar5;
  ulong uVar6;
  int iVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  undefined4 *puVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  undefined4 *puVar18;
  undefined4 *puVar19;
  long lVar20;
  long lVar21;
  undefined8 uVar22;
  undefined1 auStack_80 [128];
  
  if (param_3 == 0) {
    return;
  }
  puVar19 = (undefined4 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar19 >> 7)) {
    lVar20 = (long)puVar19 - (long)param_2;
    memcpy(auStack_80,param_4,0x80);
    if (param_3 < (ulong)(lVar20 >> 7)) {
      puVar8 = puVar19 + param_3 * -0x20;
      puVar5 = puVar19;
      for (puVar18 = puVar8; puVar19 != puVar18; puVar18 = puVar18 + 0x20) {
        if (puVar5 != (undefined4 *)0x0) {
          if ((puVar18 < puVar5 + 4) && (puVar5 < puVar18 + 4)) {
            lVar20 = 0;
            do {
              *(undefined4 *)((long)puVar5 + lVar20) = *(undefined4 *)((long)puVar18 + lVar20);
              lVar20 = lVar20 + 4;
            } while (lVar20 != 0x80);
          }
          else {
            uVar10 = -((ulong)puVar18 >> 2 & 3);
            uVar3 = (uint)uVar10 & 3;
            if ((uVar10 & 3) == 0) {
              iVar17 = 0x20;
              uVar10 = 0;
              iVar15 = 8;
              iVar16 = 0x20;
              uVar14 = 0;
              iVar7 = 0x20;
            }
            else {
              *puVar5 = *puVar18;
              uVar14 = uVar3;
              if (uVar3 == 1) {
                iVar7 = 0x1f;
              }
              else {
                puVar5[1] = puVar18[1];
                if (uVar3 == 3) {
                  iVar7 = 0x1d;
                  puVar5[2] = puVar18[2];
                }
                else {
                  iVar7 = 0x1e;
                  uVar14 = 2;
                }
              }
              uVar10 = (ulong)uVar3;
              iVar15 = 7;
              iVar17 = 0x20 - uVar3;
              iVar16 = 0x1c;
            }
            puVar1 = (undefined8 *)(puVar18 + uVar10);
            puVar2 = (undefined8 *)(puVar5 + uVar10);
            uVar22 = *puVar1;
            puVar2[1] = puVar1[1];
            *puVar2 = uVar22;
            uVar22 = puVar1[2];
            puVar2[3] = puVar1[3];
            puVar2[2] = uVar22;
            uVar22 = puVar1[4];
            puVar2[5] = puVar1[5];
            puVar2[4] = uVar22;
            uVar22 = puVar1[6];
            puVar2[7] = puVar1[7];
            puVar2[6] = uVar22;
            uVar22 = puVar1[8];
            puVar2[9] = puVar1[9];
            puVar2[8] = uVar22;
            uVar22 = puVar1[10];
            puVar2[0xb] = puVar1[0xb];
            puVar2[10] = uVar22;
            uVar22 = puVar1[0xc];
            puVar2[0xd] = puVar1[0xd];
            puVar2[0xc] = uVar22;
            if (iVar15 == 8) {
              uVar22 = puVar1[0xe];
              puVar2[0xf] = puVar1[0xf];
              puVar2[0xe] = uVar22;
            }
            uVar14 = uVar14 + iVar16;
            if (iVar16 != iVar17) {
              puVar5[(int)uVar14] = puVar18[uVar14];
              if (iVar7 - iVar16 != 1) {
                puVar5[(int)(uVar14 + 1)] = puVar18[(ulong)uVar14 + 1];
                if (iVar7 - iVar16 != 2) {
                  puVar5[(int)(uVar14 + 2)] = puVar18[(ulong)uVar14 + 2];
                }
              }
            }
          }
        }
        puVar5 = puVar5 + 0x20;
      }
      param_1[1] = puVar19 + param_3 * 0x20;
      puVar18 = (undefined4 *)((long)puVar19 - ((long)puVar8 - (long)param_2));
      if (0x7f < (long)puVar8 - (long)param_2) {
        do {
          puVar19 = puVar19 + -0x20;
          puVar8 = puVar8 + -0x20;
          memcpy(puVar19,puVar8,0x80);
        } while (puVar19 != puVar18);
      }
      puVar19 = param_2 + param_3 * 0x20;
      for (; param_2 != puVar19; param_2 = param_2 + 0x20) {
        memcpy(param_2,auStack_80,0x80);
      }
      return;
    }
    lVar21 = param_3 - (lVar20 >> 7);
    puVar18 = puVar19;
    for (lVar11 = lVar21; lVar11 != 0; lVar11 = lVar11 + -1) {
      pvVar4 = (void *)0x0;
      if (puVar18 != (undefined4 *)0x0) {
        pvVar4 = memcpy(puVar18,auStack_80,0x80);
      }
      puVar18 = (undefined4 *)((long)pvVar4 + 0x80);
    }
    puVar8 = puVar19 + lVar21 * 0x20;
    param_1[1] = puVar8;
    puVar18 = param_2;
    puVar5 = puVar8;
    if (puVar19 != param_2) {
      do {
        if (puVar5 != (undefined4 *)0x0) {
          if ((puVar5 < puVar18 + 4) && (puVar18 < puVar5 + 4)) {
            lVar11 = 0;
            do {
              *(undefined4 *)((long)puVar5 + lVar11) = *(undefined4 *)((long)puVar18 + lVar11);
              lVar11 = lVar11 + 4;
            } while (lVar11 != 0x80);
          }
          else {
            uVar10 = -((ulong)puVar18 >> 2 & 3);
            uVar3 = (uint)uVar10 & 3;
            if ((uVar10 & 3) == 0) {
              uVar10 = 0;
              iVar15 = 8;
              iVar17 = 0x20;
              iVar16 = 0x20;
              uVar14 = 0;
              iVar7 = iVar17;
            }
            else {
              *puVar5 = *puVar18;
              uVar14 = uVar3;
              if (uVar3 == 1) {
                iVar16 = 0x1f;
              }
              else {
                puVar5[1] = puVar18[1];
                if (uVar3 == 3) {
                  iVar16 = 0x1d;
                  puVar5[2] = puVar18[2];
                }
                else {
                  iVar16 = 0x1e;
                  uVar14 = 2;
                }
              }
              uVar10 = (ulong)uVar3;
              iVar17 = 0x20 - uVar3;
              iVar15 = 7;
              iVar7 = 0x1c;
            }
            puVar1 = (undefined8 *)(puVar18 + uVar10);
            puVar2 = (undefined8 *)(puVar5 + uVar10);
            uVar22 = *puVar1;
            puVar2[1] = puVar1[1];
            *puVar2 = uVar22;
            uVar22 = puVar1[2];
            puVar2[3] = puVar1[3];
            puVar2[2] = uVar22;
            uVar22 = puVar1[4];
            puVar2[5] = puVar1[5];
            puVar2[4] = uVar22;
            uVar22 = puVar1[6];
            puVar2[7] = puVar1[7];
            puVar2[6] = uVar22;
            uVar22 = puVar1[8];
            puVar2[9] = puVar1[9];
            puVar2[8] = uVar22;
            uVar22 = puVar1[10];
            puVar2[0xb] = puVar1[0xb];
            puVar2[10] = uVar22;
            uVar22 = puVar1[0xc];
            puVar2[0xd] = puVar1[0xd];
            puVar2[0xc] = uVar22;
            if (iVar15 == 8) {
              uVar22 = puVar1[0xe];
              puVar2[0xf] = puVar1[0xf];
              puVar2[0xe] = uVar22;
            }
            uVar14 = uVar14 + iVar7;
            if (iVar17 != iVar7) {
              puVar5[(int)uVar14] = puVar18[uVar14];
              if (iVar16 - iVar7 != 1) {
                puVar5[(int)(uVar14 + 1)] = puVar18[(ulong)uVar14 + 1];
                if (iVar16 - iVar7 != 2) {
                  puVar5[(int)(uVar14 + 2)] = puVar18[(ulong)uVar14 + 2];
                }
              }
            }
          }
        }
        puVar18 = puVar18 + 0x20;
        puVar5 = puVar5 + 0x20;
      } while (puVar19 != puVar18);
      param_1[1] = (long)puVar8 + lVar20;
      do {
        puVar18 = param_2 + 0x20;
        memcpy(param_2,auStack_80,0x80);
        param_2 = puVar18;
      } while (puVar19 != puVar18);
      return;
    }
    param_1[1] = (long)puVar8 + lVar20;
    return;
  }
  puVar18 = (undefined4 *)*param_1;
  uVar10 = (long)puVar19 - (long)puVar18 >> 7;
  if (0x1ffffffffffffff - uVar10 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar6 = uVar10;
  if (uVar10 < param_3) {
    uVar6 = param_3;
  }
  uVar6 = uVar6 + uVar10;
  if ((uVar6 < uVar10) || (0x1ffffffffffffff < uVar6)) {
    lVar20 = (long)param_2 - (long)puVar18;
    uVar6 = 0xffffffffffffff80;
  }
  else {
    lVar20 = (long)param_2 - (long)puVar18;
    if (uVar6 == 0) {
      puVar5 = (undefined4 *)0x0;
      uVar6 = 0;
      goto LAB_0033c860;
    }
    uVar6 = uVar6 * 0x80;
  }
  puVar5 = operator_new(uVar6);
  puVar19 = (undefined4 *)param_1[1];
  puVar18 = (undefined4 *)*param_1;
LAB_0033c860:
  uVar3 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
  puVar8 = (undefined4 *)((long)puVar5 + lVar20);
  iVar17 = (0x1c - uVar3 >> 2) + 1;
  puVar1 = (undefined8 *)(param_4 + uVar3);
  uVar10 = param_3;
  do {
    if (puVar8 != (undefined4 *)0x0) {
      if ((param_4 < puVar8 + 4) && (puVar8 < param_4 + 4)) {
        lVar20 = 0;
        do {
          *(undefined4 *)((long)puVar8 + lVar20) = *(undefined4 *)((long)param_4 + lVar20);
          lVar20 = lVar20 + 4;
        } while (lVar20 != 0x80);
      }
      else {
        uVar14 = uVar3;
        if (uVar3 == 0) {
          iVar7 = 0x20;
        }
        else {
          *puVar8 = *param_4;
          if (uVar3 == 1) {
            iVar7 = 0x1f;
          }
          else {
            puVar8[1] = param_4[1];
            if (uVar3 == 3) {
              iVar7 = 0x1d;
              puVar8[2] = param_4[2];
            }
            else {
              iVar7 = 0x1e;
              uVar14 = 2;
            }
          }
        }
        puVar2 = (undefined8 *)(puVar8 + uVar3);
        uVar22 = *puVar1;
                    /* catch() { ... } // from try @ 0033c9ac with catch @ 0033c90c
                       catch() { ... } // from try @ 0033ca08 with catch @ 0033c90c
                       catch() { ... } // from try @ 0033e058 with catch @ 0033c90c */
        puVar2[1] = puVar1[1];
        *puVar2 = uVar22;
        uVar22 = puVar1[2];
        puVar2[3] = puVar1[3];
        puVar2[2] = uVar22;
        uVar22 = puVar1[4];
        puVar2[5] = puVar1[5];
        puVar2[4] = uVar22;
        uVar22 = puVar1[6];
        puVar2[7] = puVar1[7];
        puVar2[6] = uVar22;
        uVar22 = puVar1[8];
        puVar2[9] = puVar1[9];
        puVar2[8] = uVar22;
        uVar22 = puVar1[10];
        puVar2[0xb] = puVar1[0xb];
        puVar2[10] = uVar22;
        uVar22 = puVar1[0xc];
        puVar2[0xd] = puVar1[0xd];
        puVar2[0xc] = uVar22;
        if (iVar17 == 8) {
          uVar22 = puVar1[0xe];
          puVar2[0xf] = puVar1[0xf];
          puVar2[0xe] = uVar22;
        }
        iVar7 = iVar7 + iVar17 * -4;
        uVar14 = uVar14 + iVar17 * 4;
        if (0x20 - uVar3 != iVar17 * 4) {
          uVar12 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
          puVar8[(int)uVar14] = *(undefined4 *)((long)param_4 + uVar12);
          if (iVar7 != 1) {
                    /* try { // try from 0033c9ac to 0043c9af has its CatchHandler @ 0033c90c */
            puVar8[(int)(uVar14 + 1)] = *(undefined4 *)((long)param_4 + uVar12 + 4);
            if (iVar7 != 2) {
              puVar8[(int)(uVar14 + 2)] = *(undefined4 *)((long)param_4 + uVar12 + 8);
            }
          }
        }
      }
    }
    uVar10 = uVar10 - 1;
    puVar8 = puVar8 + 0x20;
  } while (uVar10 != 0);
  puVar8 = puVar18;
  puVar13 = puVar5;
  if (param_2 != puVar18) {
    do {
      if (puVar13 != (undefined4 *)0x0) {
        if ((puVar8 < puVar13 + 4) && (puVar13 < puVar8 + 4)) {
          lVar20 = 0;
          do {
            *(undefined4 *)((long)puVar13 + lVar20) = *(undefined4 *)((long)puVar8 + lVar20);
            lVar20 = lVar20 + 4;
          } while (lVar20 != 0x80);
        }
        else {
                    /* try { // try from 0033ca00 to 0043ca03 has its CatchHandler @ 0033e048 */
          uVar10 = -((ulong)puVar8 >> 2 & 3);
          uVar3 = (uint)uVar10 & 3;
                    /* try { // try from 0033ca08 to 0043ca0b has its CatchHandler @ 0033c90c */
          if ((uVar10 & 3) == 0) {
            uVar10 = 0;
            iVar15 = 8;
            iVar17 = 0x20;
            iVar16 = 0x20;
            uVar14 = 0;
            iVar7 = iVar17;
          }
          else {
            *puVar13 = *puVar8;
            uVar14 = uVar3;
            if (uVar3 == 1) {
              iVar16 = 0x1f;
            }
            else {
              puVar13[1] = puVar8[1];
              if (uVar3 == 3) {
                iVar16 = 0x1d;
                puVar13[2] = puVar8[2];
              }
              else {
                iVar16 = 0x1e;
                uVar14 = 2;
              }
            }
            uVar10 = (ulong)uVar3;
            iVar17 = 0x20 - uVar3;
            iVar15 = 7;
            iVar7 = 0x1c;
          }
          puVar1 = (undefined8 *)(puVar8 + uVar10);
          puVar2 = (undefined8 *)(puVar13 + uVar10);
          uVar22 = *puVar1;
          puVar2[1] = puVar1[1];
          *puVar2 = uVar22;
          uVar22 = puVar1[2];
          puVar2[3] = puVar1[3];
          puVar2[2] = uVar22;
          uVar22 = puVar1[4];
          puVar2[5] = puVar1[5];
          puVar2[4] = uVar22;
          uVar22 = puVar1[6];
          puVar2[7] = puVar1[7];
          puVar2[6] = uVar22;
          uVar22 = puVar1[8];
          puVar2[9] = puVar1[9];
          puVar2[8] = uVar22;
          uVar22 = puVar1[10];
          puVar2[0xb] = puVar1[0xb];
          puVar2[10] = uVar22;
          uVar22 = puVar1[0xc];
          puVar2[0xd] = puVar1[0xd];
          puVar2[0xc] = uVar22;
          if (iVar15 == 8) {
            uVar22 = puVar1[0xe];
            puVar2[0xf] = puVar1[0xf];
            puVar2[0xe] = uVar22;
          }
          uVar14 = uVar14 + iVar7;
          if (iVar17 != iVar7) {
            puVar13[(int)uVar14] = puVar8[uVar14];
            if (iVar16 - iVar7 != 1) {
              puVar13[(int)(uVar14 + 1)] = puVar8[(ulong)uVar14 + 1];
              if (iVar16 - iVar7 != 2) {
                puVar13[(int)(uVar14 + 2)] = puVar8[(ulong)uVar14 + 2];
              }
            }
          }
        }
      }
      puVar8 = puVar8 + 0x20;
      puVar13 = puVar13 + 0x20;
    } while (param_2 != puVar8);
    puVar13 = (undefined4 *)
              ((long)puVar5 + ((long)param_2 - (long)(puVar18 + 0x20) & 0xffffffffffffff80U) + 0x80)
    ;
  }
  puVar13 = puVar13 + param_3 * 0x20;
  puVar9 = puVar13;
  puVar8 = param_2;
  if (param_2 != puVar19) {
    do {
      if (puVar9 != (undefined4 *)0x0) {
        if ((puVar9 < puVar8 + 4) && (puVar8 < puVar9 + 4)) {
          lVar20 = 0;
          do {
            *(undefined4 *)((long)puVar9 + lVar20) = *(undefined4 *)((long)puVar8 + lVar20);
            lVar20 = lVar20 + 4;
          } while (lVar20 != 0x80);
        }
        else {
          uVar10 = -((ulong)puVar8 >> 2 & 3);
          uVar3 = (uint)uVar10 & 3;
          if ((uVar10 & 3) == 0) {
            uVar10 = 0;
            iVar15 = 8;
            iVar17 = 0x20;
            iVar16 = 0x20;
            uVar14 = 0;
            iVar7 = iVar17;
          }
          else {
            *puVar9 = *puVar8;
            uVar14 = uVar3;
            if (uVar3 == 1) {
              iVar16 = 0x1f;
            }
            else {
              puVar9[1] = puVar8[1];
              if (uVar3 == 3) {
                iVar16 = 0x1d;
                puVar9[2] = puVar8[2];
              }
              else {
                iVar16 = 0x1e;
                uVar14 = 2;
              }
            }
            uVar10 = (ulong)uVar3;
            iVar17 = 0x20 - uVar3;
            iVar15 = 7;
            iVar7 = 0x1c;
          }
          puVar1 = (undefined8 *)(puVar8 + uVar10);
          puVar2 = (undefined8 *)(puVar9 + uVar10);
          uVar22 = *puVar1;
          puVar2[1] = puVar1[1];
          *puVar2 = uVar22;
          uVar22 = puVar1[2];
          puVar2[3] = puVar1[3];
          puVar2[2] = uVar22;
          uVar22 = puVar1[4];
          puVar2[5] = puVar1[5];
          puVar2[4] = uVar22;
          uVar22 = puVar1[6];
          puVar2[7] = puVar1[7];
          puVar2[6] = uVar22;
          uVar22 = puVar1[8];
          puVar2[9] = puVar1[9];
          puVar2[8] = uVar22;
          uVar22 = puVar1[10];
          puVar2[0xb] = puVar1[0xb];
          puVar2[10] = uVar22;
          uVar22 = puVar1[0xc];
          puVar2[0xd] = puVar1[0xd];
          puVar2[0xc] = uVar22;
          if (iVar15 == 8) {
            uVar22 = puVar1[0xe];
            puVar2[0xf] = puVar1[0xf];
            puVar2[0xe] = uVar22;
          }
          uVar14 = uVar14 + iVar7;
          if (iVar17 != iVar7) {
            puVar9[(int)uVar14] = puVar8[uVar14];
            if (iVar16 - iVar7 != 1) {
              puVar9[(int)(uVar14 + 1)] = puVar8[(ulong)uVar14 + 1];
              if (iVar16 - iVar7 != 2) {
                puVar9[(int)(uVar14 + 2)] = puVar8[(ulong)uVar14 + 2];
              }
            }
          }
        }
      }
      puVar8 = puVar8 + 0x20;
      puVar9 = puVar9 + 0x20;
    } while (puVar8 != puVar19);
    puVar13 = (undefined4 *)
              ((long)puVar13 + ((long)puVar8 - (long)(param_2 + 0x20) & 0xffffffffffffff80U) + 0x80)
    ;
  }
  if (puVar18 != (undefined4 *)0x0) {
    operator_delete(puVar18);
  }
  *param_1 = puVar5;
  param_1[1] = puVar13;
  param_1[2] = (long)puVar5 + uVar6;
  return;
}


==================================================================

### FUNC 0033cdf4 (3936 bytes) name=FUN_0033cdf4

void FUN_0033cdf4(undefined8 *param_1,undefined4 *param_2,ulong param_3,undefined4 *param_4)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  uint uVar3;
  ulong uVar4;
  void *pvVar5;
  undefined4 *puVar6;
  ulong uVar7;
  int iVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  long lVar11;
  ulong uVar12;
  int iVar13;
  long lVar14;
  undefined4 *puVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  undefined4 *puVar19;
  undefined4 *puVar20;
  long lVar21;
  undefined8 uVar22;
  undefined1 auStack_100 [256];
  
  if (param_3 == 0) {
    return;
  }
  puVar20 = (undefined4 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar20 >> 8)) {
    lVar14 = (long)puVar20 - (long)param_2;
    memcpy(auStack_100,param_4,0x100);
    if (param_3 < (ulong)(lVar14 >> 8)) {
      puVar9 = puVar20 + param_3 * -0x40;
      puVar6 = puVar20;
      for (puVar19 = puVar9; puVar20 != puVar19; puVar19 = puVar19 + 0x40) {
        if (puVar6 != (undefined4 *)0x0) {
          if ((puVar19 < puVar6 + 4) && (puVar6 < puVar19 + 4)) {
            lVar14 = 0;
            do {
              *(undefined4 *)((long)puVar6 + lVar14) = *(undefined4 *)((long)puVar19 + lVar14);
              lVar14 = lVar14 + 4;
            } while (lVar14 != 0x100);
          }
          else {
            uVar4 = -((ulong)puVar19 >> 2 & 3);
            uVar3 = (uint)uVar4 & 3;
            if ((uVar4 & 3) == 0) {
              iVar18 = 0x40;
              uVar4 = 0;
              iVar13 = 0x10;
              iVar17 = 0x40;
              uVar16 = 0;
              iVar8 = 0x40;
            }
            else {
              *puVar6 = *puVar19;
              uVar16 = uVar3;
              if (uVar3 == 1) {
                iVar8 = 0x3f;
              }
              else {
                puVar6[1] = puVar19[1];
                if (uVar3 == 3) {
                  iVar8 = 0x3d;
                  puVar6[2] = puVar19[2];
                }
                else {
                  iVar8 = 0x3e;
                  uVar16 = 2;
                }
              }
              uVar4 = (ulong)uVar3;
              iVar17 = 0x3c;
              iVar18 = 0x40 - uVar3;
              iVar13 = 0xf;
            }
            puVar1 = (undefined8 *)(puVar19 + uVar4);
            puVar2 = (undefined8 *)(puVar6 + uVar4);
            uVar22 = *puVar1;
            puVar2[1] = puVar1[1];
            *puVar2 = uVar22;
            uVar22 = puVar1[2];
            puVar2[3] = puVar1[3];
            puVar2[2] = uVar22;
            uVar22 = puVar1[4];
            puVar2[5] = puVar1[5];
            puVar2[4] = uVar22;
            uVar22 = puVar1[6];
            puVar2[7] = puVar1[7];
            puVar2[6] = uVar22;
            uVar22 = puVar1[8];
            puVar2[9] = puVar1[9];
            puVar2[8] = uVar22;
            uVar22 = puVar1[10];
            puVar2[0xb] = puVar1[0xb];
            puVar2[10] = uVar22;
            uVar22 = puVar1[0xc];
            puVar2[0xd] = puVar1[0xd];
            puVar2[0xc] = uVar22;
            uVar22 = puVar1[0xe];
            puVar2[0xf] = puVar1[0xf];
            puVar2[0xe] = uVar22;
            uVar22 = puVar1[0x10];
            puVar2[0x11] = puVar1[0x11];
            puVar2[0x10] = uVar22;
            uVar22 = puVar1[0x12];
            puVar2[0x13] = puVar1[0x13];
            puVar2[0x12] = uVar22;
            uVar22 = puVar1[0x14];
            puVar2[0x15] = puVar1[0x15];
            puVar2[0x14] = uVar22;
            uVar22 = puVar1[0x16];
            puVar2[0x17] = puVar1[0x17];
            puVar2[0x16] = uVar22;
            uVar22 = puVar1[0x18];
            puVar2[0x19] = puVar1[0x19];
            puVar2[0x18] = uVar22;
            uVar22 = puVar1[0x1a];
            puVar2[0x1b] = puVar1[0x1b];
            puVar2[0x1a] = uVar22;
            uVar22 = puVar1[0x1c];
            puVar2[0x1d] = puVar1[0x1d];
            puVar2[0x1c] = uVar22;
            if (iVar13 == 0x10) {
              uVar22 = puVar1[0x1e];
              puVar2[0x1f] = puVar1[0x1f];
              puVar2[0x1e] = uVar22;
            }
            uVar16 = uVar16 + iVar17;
            if (iVar17 != iVar18) {
              puVar6[(int)uVar16] = puVar19[uVar16];
              if (iVar8 - iVar17 != 1) {
                puVar6[(int)(uVar16 + 1)] = puVar19[(ulong)uVar16 + 1];
                if (iVar8 - iVar17 != 2) {
                  puVar6[(int)(uVar16 + 2)] = puVar19[(ulong)uVar16 + 2];
                }
              }
            }
          }
        }
        puVar6 = puVar6 + 0x40;
      }
      param_1[1] = puVar20 + param_3 * 0x40;
      puVar19 = (undefined4 *)((long)puVar20 - ((long)puVar9 - (long)param_2));
      if (0xff < (long)puVar9 - (long)param_2) {
        do {
          puVar20 = puVar20 + -0x40;
          puVar9 = puVar9 + -0x40;
          memcpy(puVar20,puVar9,0x100);
        } while (puVar20 != puVar19);
      }
      puVar20 = param_2 + param_3 * 0x40;
      for (; param_2 != puVar20; param_2 = param_2 + 0x40) {
        memcpy(param_2,auStack_100,0x100);
      }
      return;
    }
    lVar21 = param_3 - (lVar14 >> 8);
    puVar19 = puVar20;
    for (lVar11 = lVar21; lVar11 != 0; lVar11 = lVar11 + -1) {
      pvVar5 = (void *)0x0;
      if (puVar19 != (undefined4 *)0x0) {
        pvVar5 = memcpy(puVar19,auStack_100,0x100);
      }
      puVar19 = (undefined4 *)((long)pvVar5 + 0x100);
    }
    puVar9 = puVar20 + lVar21 * 0x40;
    param_1[1] = puVar9;
    puVar19 = param_2;
    puVar6 = puVar9;
    if (puVar20 != param_2) {
      do {
        if (puVar6 != (undefined4 *)0x0) {
          if ((puVar6 < puVar19 + 4) && (puVar19 < puVar6 + 4)) {
            lVar11 = 0;
            do {
              *(undefined4 *)((long)puVar6 + lVar11) = *(undefined4 *)((long)puVar19 + lVar11);
              lVar11 = lVar11 + 4;
            } while (lVar11 != 0x100);
          }
          else {
            uVar4 = -((ulong)puVar19 >> 2 & 3);
            uVar3 = (uint)uVar4 & 3;
            if ((uVar4 & 3) == 0) {
              uVar4 = 0;
              iVar13 = 0x10;
              iVar18 = 0x40;
              iVar17 = 0x40;
              uVar16 = 0;
              iVar8 = iVar18;
            }
            else {
              *puVar6 = *puVar19;
              uVar16 = uVar3;
              if (uVar3 == 1) {
                iVar17 = 0x3f;
              }
              else {
                puVar6[1] = puVar19[1];
                if (uVar3 == 3) {
                  iVar17 = 0x3d;
                  puVar6[2] = puVar19[2];
                }
                else {
                  iVar17 = 0x3e;
                  uVar16 = 2;
                }
              }
              uVar4 = (ulong)uVar3;
              iVar18 = 0x40 - uVar3;
              iVar13 = 0xf;
              iVar8 = 0x3c;
            }
            puVar1 = (undefined8 *)(puVar19 + uVar4);
            puVar2 = (undefined8 *)(puVar6 + uVar4);
            uVar22 = *puVar1;
            puVar2[1] = puVar1[1];
            *puVar2 = uVar22;
            uVar22 = puVar1[2];
            puVar2[3] = puVar1[3];
            puVar2[2] = uVar22;
            uVar22 = puVar1[4];
            puVar2[5] = puVar1[5];
            puVar2[4] = uVar22;
            uVar22 = puVar1[6];
            puVar2[7] = puVar1[7];
            puVar2[6] = uVar22;
            uVar22 = puVar1[8];
            puVar2[9] = puVar1[9];
            puVar2[8] = uVar22;
            uVar22 = puVar1[10];
            puVar2[0xb] = puVar1[0xb];
            puVar2[10] = uVar22;
            uVar22 = puVar1[0xc];
            puVar2[0xd] = puVar1[0xd];
            puVar2[0xc] = uVar22;
            uVar22 = puVar1[0xe];
            puVar2[0xf] = puVar1[0xf];
            puVar2[0xe] = uVar22;
            uVar22 = puVar1[0x10];
            puVar2[0x11] = puVar1[0x11];
            puVar2[0x10] = uVar22;
            uVar22 = puVar1[0x12];
            puVar2[0x13] = puVar1[0x13];
            puVar2[0x12] = uVar22;
            uVar22 = puVar1[0x14];
            puVar2[0x15] = puVar1[0x15];
            puVar2[0x14] = uVar22;
            uVar22 = puVar1[0x16];
            puVar2[0x17] = puVar1[0x17];
            puVar2[0x16] = uVar22;
            uVar22 = puVar1[0x18];
            puVar2[0x19] = puVar1[0x19];
            puVar2[0x18] = uVar22;
            uVar22 = puVar1[0x1a];
            puVar2[0x1b] = puVar1[0x1b];
            puVar2[0x1a] = uVar22;
            uVar22 = puVar1[0x1c];
            puVar2[0x1d] = puVar1[0x1d];
            puVar2[0x1c] = uVar22;
            if (iVar13 == 0x10) {
              uVar22 = puVar1[0x1e];
              puVar2[0x1f] = puVar1[0x1f];
              puVar2[0x1e] = uVar22;
            }
            uVar16 = uVar16 + iVar8;
            if (iVar18 != iVar8) {
              puVar6[(int)uVar16] = puVar19[uVar16];
              if (iVar17 - iVar8 != 1) {
                puVar6[(int)(uVar16 + 1)] = puVar19[(ulong)uVar16 + 1];
                if (iVar17 - iVar8 != 2) {
                  puVar6[(int)(uVar16 + 2)] = puVar19[(ulong)uVar16 + 2];
                }
              }
            }
          }
        }
        puVar19 = puVar19 + 0x40;
        puVar6 = puVar6 + 0x40;
      } while (puVar20 != puVar19);
      param_1[1] = (long)puVar9 + lVar14;
      do {
        puVar19 = param_2 + 0x40;
        memcpy(param_2,auStack_100,0x100);
        param_2 = puVar19;
      } while (puVar20 != puVar19);
      return;
    }
    param_1[1] = (long)puVar9 + lVar14;
    return;
  }
  puVar19 = (undefined4 *)*param_1;
  uVar4 = (long)puVar20 - (long)puVar19 >> 8;
  if (0xffffffffffffff - uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar7 = uVar4;
  if (uVar4 < param_3) {
    uVar7 = param_3;
  }
  uVar7 = uVar7 + uVar4;
  if ((uVar7 < uVar4) || (0xffffffffffffff < uVar7)) {
    lVar14 = (long)param_2 - (long)puVar19;
    uVar7 = 0xffffffffffffff00;
  }
  else {
    lVar14 = (long)param_2 - (long)puVar19;
    if (uVar7 == 0) {
      puVar6 = (undefined4 *)0x0;
      uVar7 = 0;
      goto LAB_0033d508;
    }
    uVar7 = uVar7 * 0x100;
  }
  puVar6 = operator_new(uVar7);
  puVar20 = (undefined4 *)param_1[1];
  puVar19 = (undefined4 *)*param_1;
LAB_0033d508:
  uVar3 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
  puVar9 = (undefined4 *)((long)puVar6 + lVar14);
  puVar1 = (undefined8 *)(param_4 + uVar3);
  iVar18 = (0x3c - uVar3 >> 2) + 1;
  uVar4 = param_3;
  do {
    if (puVar9 != (undefined4 *)0x0) {
      if ((param_4 < puVar9 + 4) && (puVar9 < param_4 + 4)) {
        lVar14 = 0;
        do {
          *(undefined4 *)((long)puVar9 + lVar14) = *(undefined4 *)((long)param_4 + lVar14);
          lVar14 = lVar14 + 4;
        } while (lVar14 != 0x100);
      }
      else {
        uVar16 = uVar3;
        if (uVar3 == 0) {
          iVar8 = 0x40;
        }
        else {
          *puVar9 = *param_4;
          if (uVar3 == 1) {
            iVar8 = 0x3f;
          }
          else {
            puVar9[1] = param_4[1];
            if (uVar3 == 3) {
              iVar8 = 0x3d;
              puVar9[2] = param_4[2];
            }
            else {
              iVar8 = 0x3e;
              uVar16 = 2;
            }
          }
        }
        uVar22 = *puVar1;
        puVar2 = (undefined8 *)(puVar9 + uVar3);
        puVar2[1] = puVar1[1];
        *puVar2 = uVar22;
        uVar22 = puVar1[2];
        puVar2[3] = puVar1[3];
        puVar2[2] = uVar22;
        uVar22 = puVar1[4];
        puVar2[5] = puVar1[5];
        puVar2[4] = uVar22;
        uVar22 = puVar1[6];
        puVar2[7] = puVar1[7];
        puVar2[6] = uVar22;
        uVar22 = puVar1[8];
        puVar2[9] = puVar1[9];
        puVar2[8] = uVar22;
        uVar22 = puVar1[10];
        puVar2[0xb] = puVar1[0xb];
        puVar2[10] = uVar22;
        uVar22 = puVar1[0xc];
        puVar2[0xd] = puVar1[0xd];
        puVar2[0xc] = uVar22;
        uVar22 = puVar1[0xe];
        puVar2[0xf] = puVar1[0xf];
        puVar2[0xe] = uVar22;
        uVar22 = puVar1[0x10];
        puVar2[0x11] = puVar1[0x11];
        puVar2[0x10] = uVar22;
        uVar22 = puVar1[0x12];
        puVar2[0x13] = puVar1[0x13];
        puVar2[0x12] = uVar22;
        uVar22 = puVar1[0x14];
        puVar2[0x15] = puVar1[0x15];
        puVar2[0x14] = uVar22;
        uVar22 = puVar1[0x16];
        puVar2[0x17] = puVar1[0x17];
        puVar2[0x16] = uVar22;
        uVar22 = puVar1[0x18];
        puVar2[0x19] = puVar1[0x19];
        puVar2[0x18] = uVar22;
        uVar22 = puVar1[0x1a];
        puVar2[0x1b] = puVar1[0x1b];
        puVar2[0x1a] = uVar22;
        uVar22 = puVar1[0x1c];
        puVar2[0x1d] = puVar1[0x1d];
        puVar2[0x1c] = uVar22;
        if (iVar18 == 0x10) {
          uVar22 = puVar1[0x1e];
          puVar2[0x1f] = puVar1[0x1f];
          puVar2[0x1e] = uVar22;
        }
        uVar16 = uVar16 + iVar18 * 4;
        iVar8 = iVar8 + iVar18 * -4;
        if (0x40 - uVar3 != iVar18 * 4) {
          uVar12 = -(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2;
          puVar9[(int)uVar16] = *(undefined4 *)((long)param_4 + uVar12);
          if (iVar8 != 1) {
            puVar9[(int)(uVar16 + 1)] = *(undefined4 *)((long)param_4 + uVar12 + 4);
            if (iVar8 != 2) {
              puVar9[(int)(uVar16 + 2)] = *(undefined4 *)((long)param_4 + uVar12 + 8);
            }
          }
        }
      }
    }
    uVar4 = uVar4 - 1;
    puVar9 = puVar9 + 0x40;
  } while (uVar4 != 0);
  puVar9 = puVar19;
  puVar15 = puVar6;
  if (param_2 != puVar19) {
    do {
      if (puVar15 != (undefined4 *)0x0) {
        if ((puVar9 < puVar15 + 4) && (puVar15 < puVar9 + 4)) {
          lVar14 = 0;
          do {
            *(undefined4 *)((long)puVar15 + lVar14) = *(undefined4 *)((long)puVar9 + lVar14);
            lVar14 = lVar14 + 4;
          } while (lVar14 != 0x100);
        }
        else {
          uVar4 = -((ulong)puVar9 >> 2 & 3);
          uVar3 = (uint)uVar4 & 3;
          if ((uVar4 & 3) == 0) {
            uVar4 = 0;
            iVar17 = 0x10;
            iVar18 = 0x40;
            iVar13 = 0x40;
            uVar16 = 0;
            iVar8 = iVar18;
          }
          else {
            *puVar15 = *puVar9;
            uVar16 = uVar3;
            if (uVar3 == 1) {
              iVar13 = 0x3f;
            }
            else {
              puVar15[1] = puVar9[1];
              if (uVar3 == 3) {
                iVar13 = 0x3d;
                puVar15[2] = puVar9[2];
              }
              else {
                iVar13 = 0x3e;
                uVar16 = 2;
              }
            }
            uVar4 = (ulong)uVar3;
            iVar18 = 0x40 - uVar3;
            iVar17 = 0xf;
            iVar8 = 0x3c;
          }
          puVar1 = (undefined8 *)(puVar9 + uVar4);
          puVar2 = (undefined8 *)(puVar15 + uVar4);
          uVar22 = *puVar1;
          puVar2[1] = puVar1[1];
          *puVar2 = uVar22;
          uVar22 = puVar1[2];
          puVar2[3] = puVar1[3];
          puVar2[2] = uVar22;
          uVar22 = puVar1[4];
          puVar2[5] = puVar1[5];
          puVar2[4] = uVar22;
          uVar22 = puVar1[6];
          puVar2[7] = puVar1[7];
          puVar2[6] = uVar22;
          uVar22 = puVar1[8];
          puVar2[9] = puVar1[9];
          puVar2[8] = uVar22;
          uVar22 = puVar1[10];
          puVar2[0xb] = puVar1[0xb];
          puVar2[10] = uVar22;
          uVar22 = puVar1[0xc];
          puVar2[0xd] = puVar1[0xd];
          puVar2[0xc] = uVar22;
          uVar22 = puVar1[0xe];
          puVar2[0xf] = puVar1[0xf];
          puVar2[0xe] = uVar22;
          uVar22 = puVar1[0x10];
          puVar2[0x11] = puVar1[0x11];
          puVar2[0x10] = uVar22;
          uVar22 = puVar1[0x12];
          puVar2[0x13] = puVar1[0x13];
          puVar2[0x12] = uVar22;
          uVar22 = puVar1[0x14];
          puVar2[0x15] = puVar1[0x15];
          puVar2[0x14] = uVar22;
          uVar22 = puVar1[0x16];
          puVar2[0x17] = puVar1[0x17];
          puVar2[0x16] = uVar22;
          uVar22 = puVar1[0x18];
          puVar2[0x19] = puVar1[0x19];
          puVar2[0x18] = uVar22;
          uVar22 = puVar1[0x1a];
          puVar2[0x1b] = puVar1[0x1b];
          puVar2[0x1a] = uVar22;
          uVar22 = puVar1[0x1c];
          puVar2[0x1d] = puVar1[0x1d];
          puVar2[0x1c] = uVar22;
          if (iVar17 == 0x10) {
            uVar22 = puVar1[0x1e];
            puVar2[0x1f] = puVar1[0x1f];
            puVar2[0x1e] = uVar22;
          }
          uVar16 = uVar16 + iVar8;
          if (iVar18 != iVar8) {
            puVar15[(int)uVar16] = puVar9[uVar16];
            if (iVar13 - iVar8 != 1) {
              puVar15[(int)(uVar16 + 1)] = puVar9[(ulong)uVar16 + 1];
              if (iVar13 - iVar8 != 2) {
                puVar15[(int)(uVar16 + 2)] = puVar9[(ulong)uVar16 + 2];
              }
            }
          }
        }
      }
      puVar9 = puVar9 + 0x40;
      puVar15 = puVar15 + 0x40;
    } while (param_2 != puVar9);
    puVar15 = (undefined4 *)
              ((long)puVar6 + ((long)param_2 - (long)(puVar19 + 0x40) & 0xffffffffffffff00U) + 0x100
              );
  }
  puVar15 = puVar15 + param_3 * 0x40;
  puVar10 = puVar15;
  puVar9 = param_2;
  if (param_2 != puVar20) {
    do {
      if (puVar10 != (undefined4 *)0x0) {
        if ((puVar10 < puVar9 + 4) && (puVar9 < puVar10 + 4)) {
          lVar14 = 0;
          do {
            *(undefined4 *)((long)puVar10 + lVar14) = *(undefined4 *)((long)puVar9 + lVar14);
            lVar14 = lVar14 + 4;
          } while (lVar14 != 0x100);
        }
        else {
          uVar4 = -((ulong)puVar9 >> 2 & 3);
          uVar3 = (uint)uVar4 & 3;
          if ((uVar4 & 3) == 0) {
            uVar4 = 0;
            iVar13 = 0x10;
            iVar18 = 0x40;
            iVar17 = 0x40;
            uVar16 = 0;
            iVar8 = iVar18;
          }
          else {
            *puVar10 = *puVar9;
            uVar16 = uVar3;
            if (uVar3 == 1) {
              iVar17 = 0x3f;
            }
            else {
              puVar10[1] = puVar9[1];
              if (uVar3 == 3) {
                iVar17 = 0x3d;
                puVar10[2] = puVar9[2];
              }
              else {
                iVar17 = 0x3e;
                uVar16 = 2;
              }
            }
            uVar4 = (ulong)uVar3;
            iVar18 = 0x40 - uVar3;
            iVar13 = 0xf;
            iVar8 = 0x3c;
          }
          puVar1 = (undefined8 *)(puVar9 + uVar4);
          puVar2 = (undefined8 *)(puVar10 + uVar4);
          uVar22 = *puVar1;
          puVar2[1] = puVar1[1];
          *puVar2 = uVar22;
          uVar22 = puVar1[2];
          puVar2[3] = puVar1[3];
          puVar2[2] = uVar22;
          uVar22 = puVar1[4];
          puVar2[5] = puVar1[5];
          puVar2[4] = uVar22;
          uVar22 = puVar1[6];
          puVar2[7] = puVar1[7];
          puVar2[6] = uVar22;
          uVar22 = puVar1[8];
          puVar2[9] = puVar1[9];
          puVar2[8] = uVar22;
          uVar22 = puVar1[10];
          puVar2[0xb] = puVar1[0xb];
          puVar2[10] = uVar22;
          uVar22 = puVar1[0xc];
          puVar2[0xd] = puVar1[0xd];
          puVar2[0xc] = uVar22;
          uVar22 = puVar1[0xe];
          puVar2[0xf] = puVar1[0xf];
          puVar2[0xe] = uVar22;
          uVar22 = puVar1[0x10];
          puVar2[0x11] = puVar1[0x11];
          puVar2[0x10] = uVar22;
          uVar22 = puVar1[0x12];
          puVar2[0x13] = puVar1[0x13];
          puVar2[0x12] = uVar22;
          uVar22 = puVar1[0x14];
          puVar2[0x15] = puVar1[0x15];
          puVar2[0x14] = uVar22;
          uVar22 = puVar1[0x16];
          puVar2[0x17] = puVar1[0x17];
          puVar2[0x16] = uVar22;
          uVar22 = puVar1[0x18];
          puVar2[0x19] = puVar1[0x19];
          puVar2[0x18] = uVar22;
          uVar22 = puVar1[0x1a];
          puVar2[0x1b] = puVar1[0x1b];
          puVar2[0x1a] = uVar22;
          uVar22 = puVar1[0x1c];
          puVar2[0x1d] = puVar1[0x1d];
          puVar2[0x1c] = uVar22;
          if (iVar13 == 0x10) {
            uVar22 = puVar1[0x1e];
            puVar2[0x1f] = puVar1[0x1f];
            puVar2[0x1e] = uVar22;
          }
          uVar16 = uVar16 + iVar8;
          if (iVar18 != iVar8) {
            puVar10[(int)uVar16] = puVar9[uVar16];
            if (iVar17 - iVar8 != 1) {
              puVar10[(int)(uVar16 + 1)] = puVar9[(ulong)uVar16 + 1];
              if (iVar17 - iVar8 != 2) {
                puVar10[(int)(uVar16 + 2)] = puVar9[(ulong)uVar16 + 2];
              }
            }
          }
        }
      }
      puVar9 = puVar9 + 0x40;
      puVar10 = puVar10 + 0x40;
    } while (puVar9 != puVar20);
    puVar15 = (undefined4 *)
              ((long)puVar15 + ((long)puVar9 - (long)(param_2 + 0x40) & 0xffffffffffffff00U) + 0x100
              );
  }
  if (puVar19 != (undefined4 *)0x0) {
    operator_delete(puVar19);
  }
  *param_1 = puVar6;
  param_1[1] = puVar15;
  param_1[2] = (long)puVar6 + uVar7;
  return;
}


==================================================================

### FUNC 0033dd54 (2252 bytes) name=FUN_0033dd54

void FUN_0033dd54(undefined8 *param_1,undefined4 *param_2,ulong param_3,undefined4 *param_4)

{
  ulong uVar1;
  void *pvVar2;
  undefined4 *puVar3;
  int iVar4;
  undefined8 *puVar5;
  undefined4 *puVar6;
  uint uVar7;
  long lVar8;
  undefined8 *puVar9;
  uint uVar10;
  undefined4 *puVar11;
  ulong uVar12;
  undefined4 *puVar13;
  uint uVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  undefined4 *puVar18;
  undefined4 *puVar19;
  long lVar20;
  ulong uVar21;
  long lVar22;
  undefined8 uVar23;
  undefined1 auStack_200 [512];
  
  if (param_3 == 0) {
    return;
  }
  puVar19 = (undefined4 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar19 >> 9)) {
    lVar20 = (long)puVar19 - (long)param_2;
    memcpy(auStack_200,param_4,0x200);
    if (param_3 < (ulong)(lVar20 >> 9)) {
      puVar11 = puVar19 + param_3 * -0x80;
      puVar3 = puVar19;
      for (puVar18 = puVar11; puVar19 != puVar18; puVar18 = puVar18 + 0x80) {
        if (puVar3 != (undefined4 *)0x0) {
          if ((puVar18 < puVar3 + 4) && (puVar3 < puVar18 + 4)) {
            lVar20 = 0;
            do {
              *(undefined4 *)((long)puVar3 + lVar20) = *(undefined4 *)((long)puVar18 + lVar20);
              lVar20 = lVar20 + 4;
            } while (lVar20 != 0x200);
          }
          else {
            uVar1 = -((ulong)puVar18 >> 2 & 3);
            uVar7 = (uint)uVar1 & 3;
            if ((uVar1 & 3) == 0) {
              iVar17 = 0x80;
              uVar1 = 0;
              uVar14 = 0x20;
              iVar16 = 0x80;
              uVar15 = 0;
              iVar4 = 0x80;
            }
            else {
              *puVar3 = *puVar18;
              uVar15 = uVar7;
              if (uVar7 == 1) {
                iVar4 = 0x7f;
              }
              else {
                puVar3[1] = puVar18[1];
                if (uVar7 == 3) {
                  iVar4 = 0x7d;
                  puVar3[2] = puVar18[2];
                }
                else {
                  iVar4 = 0x7e;
                  uVar15 = 2;
                }
              }
              uVar1 = (ulong)uVar7;
              uVar14 = 0x1f;
              iVar17 = 0x80 - uVar7;
              iVar16 = 0x7c;
            }
            uVar7 = 0;
            puVar5 = (undefined8 *)(puVar3 + uVar1);
            puVar9 = (undefined8 *)(puVar18 + uVar1);
            do {
              uVar23 = *puVar9;
              uVar7 = uVar7 + 1;
              puVar5[1] = puVar9[1];
              *puVar5 = uVar23;
              puVar5 = puVar5 + 2;
              puVar9 = puVar9 + 2;
            } while (uVar7 < uVar14);
            uVar15 = uVar15 + iVar16;
            if (iVar16 != iVar17) {
              puVar3[(int)uVar15] = puVar18[uVar15];
              if (iVar4 - iVar16 != 1) {
                puVar3[(int)(uVar15 + 1)] = puVar18[(ulong)uVar15 + 1];
                if (iVar4 - iVar16 != 2) {
                  puVar3[(int)(uVar15 + 2)] = puVar18[(ulong)uVar15 + 2];
                }
              }
            }
          }
        }
        puVar3 = puVar3 + 0x80;
      }
      param_1[1] = puVar19 + param_3 * 0x80;
      puVar18 = (undefined4 *)((long)puVar19 - ((long)puVar11 - (long)param_2));
      if (0x1ff < (long)puVar11 - (long)param_2) {
        do {
          puVar19 = puVar19 + -0x80;
          puVar11 = puVar11 + -0x80;
          memcpy(puVar19,puVar11,0x200);
        } while (puVar19 != puVar18);
      }
      puVar19 = param_2 + param_3 * 0x80;
      for (; param_2 != puVar19; param_2 = param_2 + 0x80) {
        memcpy(param_2,auStack_200,0x200);
      }
      return;
    }
    lVar22 = param_3 - (lVar20 >> 9);
    puVar18 = puVar19;
    for (lVar8 = lVar22; lVar8 != 0; lVar8 = lVar8 + -1) {
      pvVar2 = (void *)0x0;
      if (puVar18 != (undefined4 *)0x0) {
        pvVar2 = memcpy(puVar18,auStack_200,0x200);
      }
      puVar18 = (undefined4 *)((long)pvVar2 + 0x200);
    }
    puVar11 = puVar19 + lVar22 * 0x80;
    param_1[1] = puVar11;
    puVar18 = param_2;
    puVar3 = puVar11;
    if (puVar19 == param_2) {
      param_1[1] = (long)puVar11 + lVar20;
      return;
    }
    do {
      if (puVar3 != (undefined4 *)0x0) {
        if ((puVar3 < puVar18 + 4) && (puVar18 < puVar3 + 4)) {
          lVar8 = 0;
          do {
            *(undefined4 *)((long)puVar3 + lVar8) = *(undefined4 *)((long)puVar18 + lVar8);
            lVar8 = lVar8 + 4;
          } while (lVar8 != 0x200);
        }
        else {
          uVar1 = -((ulong)puVar18 >> 2 & 3);
          uVar7 = (uint)uVar1 & 3;
          if ((uVar1 & 3) == 0) {
            uVar1 = 0;
            uVar7 = 0x20;
            iVar17 = 0x80;
            iVar16 = 0x80;
            uVar15 = 0;
            iVar4 = iVar17;
          }
          else {
            *puVar3 = *puVar18;
            uVar15 = uVar7;
            if (uVar7 == 1) {
              iVar16 = 0x7f;
            }
            else {
              puVar3[1] = puVar18[1];
              if (uVar7 == 3) {
                iVar16 = 0x7d;
                puVar3[2] = puVar18[2];
              }
              else {
                iVar16 = 0x7e;
                uVar15 = 2;
              }
            }
            uVar1 = (ulong)uVar7;
            iVar17 = 0x80 - uVar7;
            uVar7 = 0x1f;
            iVar4 = 0x7c;
          }
                    /* catch() { ... } // from try @ 0033ca00 with catch @ 0033e048 */
          uVar14 = 0;
          puVar5 = (undefined8 *)(puVar3 + uVar1);
          puVar9 = (undefined8 *)(puVar18 + uVar1);
          do {
            uVar23 = *puVar9;
                    /* try { // try from 0033e058 to 0043e05b has its CatchHandler @ 0033c90c */
            uVar14 = uVar14 + 1;
                    /* catch() { ... } // from try @ 0033e0fc with catch @ 0033e05c
                       catch() { ... } // from try @ 0033e158 with catch @ 0033e05c
                       catch() { ... } // from try @ 0033f6c0 with catch @ 0033e05c */
            puVar5[1] = puVar9[1];
            *puVar5 = uVar23;
            puVar5 = puVar5 + 2;
            puVar9 = puVar9 + 2;
          } while (uVar14 < uVar7);
          uVar15 = uVar15 + iVar4;
          if (iVar17 != iVar4) {
            puVar3[(int)uVar15] = puVar18[uVar15];
            if (iVar16 - iVar4 != 1) {
              puVar3[(int)(uVar15 + 1)] = puVar18[(ulong)uVar15 + 1];
              if (iVar16 - iVar4 != 2) {
                puVar3[(int)(uVar15 + 2)] = puVar18[(ulong)uVar15 + 2];
              }
            }
          }
        }
      }
      puVar18 = puVar18 + 0x80;
      puVar3 = puVar3 + 0x80;
    } while (puVar19 != puVar18);
    param_1[1] = (long)puVar11 + lVar20;
    do {
      puVar18 = param_2 + 0x80;
      memcpy(param_2,auStack_200,0x200);
      param_2 = puVar18;
    } while (puVar19 != puVar18);
                    /* try { // try from 0033e0fc to 0043e0ff has its CatchHandler @ 0033e05c */
    return;
  }
                    /* try { // try from 0033e150 to 0043e153 has its CatchHandler @ 0033f6b0 */
  puVar18 = (undefined4 *)*param_1;
                    /* try { // try from 0033e158 to 0043e15b has its CatchHandler @ 0033e05c */
  uVar1 = (long)puVar19 - (long)puVar18 >> 9;
  if (0x7fffffffffffff - uVar1 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar21 = uVar1;
  if (uVar1 < param_3) {
    uVar21 = param_3;
  }
  uVar21 = uVar21 + uVar1;
  if ((uVar21 < uVar1) || (0x7fffffffffffff < uVar21)) {
    lVar20 = (long)param_2 - (long)puVar18;
    uVar21 = 0xfffffffffffffe00;
  }
  else {
    lVar20 = (long)param_2 - (long)puVar18;
    if (uVar21 == 0) {
      puVar3 = (undefined4 *)0x0;
      uVar21 = 0;
      goto LAB_0033e1b8;
    }
    uVar21 = uVar21 * 0x200;
  }
  puVar3 = operator_new(uVar21);
  puVar19 = (undefined4 *)param_1[1];
  puVar18 = (undefined4 *)*param_1;
LAB_0033e1b8:
  uVar15 = -((uint)((ulong)param_4 >> 2) & 3) & 3;
  puVar11 = (undefined4 *)((long)puVar3 + lVar20);
  uVar7 = (0x7c - uVar15 >> 2) + 1;
  uVar1 = param_3;
  do {
    if (puVar11 != (undefined4 *)0x0) {
      if ((param_4 < puVar11 + 4) && (puVar11 < param_4 + 4)) {
        lVar20 = 0;
        do {
          *(undefined4 *)((long)puVar11 + lVar20) = *(undefined4 *)((long)param_4 + lVar20);
          lVar20 = lVar20 + 4;
        } while (lVar20 != 0x200);
      }
      else {
        uVar14 = uVar15;
        if (uVar15 == 0) {
          iVar17 = 0x80;
        }
        else {
          *puVar11 = *param_4;
          if (uVar15 == 1) {
            iVar17 = 0x7f;
          }
          else {
            puVar11[1] = param_4[1];
            if (uVar15 == 3) {
              iVar17 = 0x7d;
              puVar11[2] = param_4[2];
            }
            else {
              iVar17 = 0x7e;
              uVar14 = 2;
            }
          }
        }
        uVar10 = 0;
        puVar5 = (undefined8 *)(param_4 + uVar15);
        puVar9 = (undefined8 *)(puVar11 + uVar15);
        do {
          uVar23 = *puVar5;
          uVar10 = uVar10 + 1;
          puVar9[1] = puVar5[1];
          *puVar9 = uVar23;
          puVar5 = puVar5 + 2;
          puVar9 = puVar9 + 2;
        } while (uVar10 < uVar7);
        uVar14 = uVar14 + uVar7 * 4;
        iVar17 = iVar17 + uVar7 * -4;
        if (0x80 - uVar15 != uVar7 * 4) {
          uVar12 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
          puVar11[(int)uVar14] = *(undefined4 *)((long)param_4 + uVar12);
          if (iVar17 != 1) {
            puVar11[(int)(uVar14 + 1)] = *(undefined4 *)((long)param_4 + uVar12 + 4);
            if (iVar17 != 2) {
              puVar11[(int)(uVar14 + 2)] = *(undefined4 *)((long)param_4 + uVar12 + 8);
            }
          }
        }
      }
    }
    puVar11 = puVar11 + 0x80;
    uVar1 = uVar1 - 1;
  } while (uVar1 != 0);
  puVar6 = puVar3;
  puVar11 = puVar18;
  if (param_2 != puVar18) {
    do {
      if (puVar6 != (undefined4 *)0x0) {
        if ((puVar11 < puVar6 + 4) && (puVar6 < puVar11 + 4)) {
          lVar20 = 0;
          do {
            *(undefined4 *)((long)puVar6 + lVar20) = *(undefined4 *)((long)puVar11 + lVar20);
            lVar20 = lVar20 + 4;
          } while (lVar20 != 0x200);
        }
        else {
          uVar1 = -((ulong)puVar11 >> 2 & 3);
          uVar7 = (uint)uVar1 & 3;
          if ((uVar1 & 3) == 0) {
            uVar1 = 0;
            uVar7 = 0x20;
            iVar17 = 0x80;
            iVar16 = 0x80;
            uVar15 = 0;
            iVar4 = iVar17;
          }
          else {
            *puVar6 = *puVar11;
            uVar15 = uVar7;
            if (uVar7 == 1) {
              iVar16 = 0x7f;
            }
            else {
              puVar6[1] = puVar11[1];
              if (uVar7 == 3) {
                iVar16 = 0x7d;
                puVar6[2] = puVar11[2];
              }
              else {
                iVar16 = 0x7e;
                uVar15 = 2;
              }
            }
            uVar1 = (ulong)uVar7;
            iVar17 = 0x80 - uVar7;
            uVar7 = 0x1f;
            iVar4 = 0x7c;
          }
          uVar14 = 0;
          puVar5 = (undefined8 *)(puVar6 + uVar1);
          puVar9 = (undefined8 *)(puVar11 + uVar1);
          do {
            uVar23 = *puVar9;
            uVar14 = uVar14 + 1;
            puVar5[1] = puVar9[1];
            *puVar5 = uVar23;
            puVar5 = puVar5 + 2;
            puVar9 = puVar9 + 2;
          } while (uVar14 < uVar7);
          uVar15 = uVar15 + iVar4;
          if (iVar17 != iVar4) {
            puVar6[(int)uVar15] = puVar11[uVar15];
            if (iVar16 - iVar4 != 1) {
              puVar6[(int)(uVar15 + 1)] = puVar11[(ulong)uVar15 + 1];
              if (iVar16 - iVar4 != 2) {
                puVar6[(int)(uVar15 + 2)] = puVar11[(ulong)uVar15 + 2];
              }
            }
          }
        }
      }
      puVar11 = puVar11 + 0x80;
      puVar6 = puVar6 + 0x80;
    } while (param_2 != puVar11);
    puVar6 = (undefined4 *)
             ((long)puVar3 + ((long)param_2 - (long)(puVar18 + 0x80) & 0xfffffffffffffe00U) + 0x200)
    ;
  }
  puVar6 = puVar6 + param_3 * 0x80;
  puVar11 = param_2;
  puVar13 = puVar6;
  if (param_2 != puVar19) {
    do {
      if (puVar13 != (undefined4 *)0x0) {
        if ((puVar13 < puVar11 + 4) && (puVar11 < puVar13 + 4)) {
          lVar20 = 0;
          do {
            *(undefined4 *)((long)puVar13 + lVar20) = *(undefined4 *)((long)puVar11 + lVar20);
            lVar20 = lVar20 + 4;
          } while (lVar20 != 0x200);
        }
        else {
          uVar1 = -((ulong)puVar11 >> 2 & 3);
          uVar7 = (uint)uVar1 & 3;
          if ((uVar1 & 3) == 0) {
            uVar1 = 0;
            uVar7 = 0x20;
            iVar17 = 0x80;
            iVar16 = 0x80;
            uVar15 = 0;
            iVar4 = iVar17;
          }
          else {
            *puVar13 = *puVar11;
            uVar15 = uVar7;
            if (uVar7 == 1) {
              iVar16 = 0x7f;
            }
            else {
              puVar13[1] = puVar11[1];
              if (uVar7 == 3) {
                iVar16 = 0x7d;
                puVar13[2] = puVar11[2];
              }
              else {
                iVar16 = 0x7e;
                uVar15 = 2;
              }
            }
            uVar1 = (ulong)uVar7;
            iVar17 = 0x80 - uVar7;
            uVar7 = 0x1f;
            iVar4 = 0x7c;
          }
          uVar14 = 0;
          puVar5 = (undefined8 *)(puVar13 + uVar1);
          puVar9 = (undefined8 *)(puVar11 + uVar1);
          do {
            uVar23 = *puVar9;
            uVar14 = uVar14 + 1;
            puVar5[1] = puVar9[1];
            *puVar5 = uVar23;
            puVar5 = puVar5 + 2;
            puVar9 = puVar9 + 2;
          } while (uVar14 < uVar7);
          uVar15 = uVar15 + iVar4;
          if (iVar17 != iVar4) {
            puVar13[(int)uVar15] = puVar11[uVar15];
            if (iVar16 - iVar4 != 1) {
              puVar13[(int)(uVar15 + 1)] = puVar11[(ulong)uVar15 + 1];
              if (iVar16 - iVar4 != 2) {
                puVar13[(int)(uVar15 + 2)] = puVar11[(ulong)uVar15 + 2];
              }
            }
          }
        }
      }
      puVar11 = puVar11 + 0x80;
      puVar13 = puVar13 + 0x80;
    } while (puVar11 != puVar19);
    puVar6 = (undefined4 *)
             ((long)puVar6 + ((long)puVar11 - (long)(param_2 + 0x80) & 0xfffffffffffffe00U) + 0x200)
    ;
  }
  if (puVar18 != (undefined4 *)0x0) {
    operator_delete(puVar18);
  }
  *param_1 = puVar3;
  param_1[1] = puVar6;
  param_1[2] = (long)puVar3 + uVar21;
  return;
}


==================================================================

### FUNC 0033e620 (9488 bytes) name=create

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_OutputArray::create(int, int const*, int, int, bool, int) const */

void __thiscall
cv::_OutputArray::create
          (_OutputArray *this,int param_1,int *param_2,int param_3,int param_4,bool param_5,
          int param_6)

{
  long lVar1;
  UMat *this_00;
  int *piVar2;
  Mat *this_01;
  undefined8 *puVar3;
  UMat *pUVar4;
  Mat *pMVar5;
  void *pvVar6;
  bool bVar7;
  undefined8 *puVar8;
  undefined1 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined4 uVar12;
  undefined2 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  char cVar23;
  byte bVar24;
  int iVar25;
  int iVar26;
  char *pcVar27;
  undefined4 *puVar28;
  undefined8 *puVar29;
  long lVar30;
  long lVar31;
  long lVar32;
  ulong *puVar33;
  ulong uVar34;
  uint *puVar35;
  uint uVar36;
  void *pvVar37;
  ulong uVar38;
  ulong uVar39;
  size_t sVar40;
  void *pvVar41;
  vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
  *pvVar42;
  vector<cv::UMat,std::allocator<cv::UMat>> *pvVar43;
  vector<cv::Mat,std::allocator<cv::Mat>> *pvVar44;
  int iVar45;
  ulong uVar46;
  uint uVar47;
  UMat *pUVar48;
  Mat *pMVar49;
  long lVar50;
  undefined8 local_200;
  ulong uStack_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  ulong *local_1d0;
  ulong **local_1c8;
  ulong *local_1c0;
  undefined8 *local_1b8;
  undefined8 local_1b0;
  undefined8 local_1a8;
  undefined8 local_1a0;
  undefined8 uStack_198;
  undefined8 local_190;
  undefined8 uStack_188;
  
  lVar50 = (long)param_4;
  iVar25 = _InputArray::kind((_InputArray *)this);
  uVar47 = param_3 & 0xfff;
  if (iVar25 == 0x10000) {
    if (-1 < param_4) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar28 = (undefined4 *)String::allocate((String *)&local_200,5);
      uVar9 = DAT_0046b094;
      *puVar28 = DAT_0046b090;
      *(undefined1 *)(puVar28 + 1) = uVar9;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8a8);
      String::deallocate((String *)&local_200);
    }
    pMVar49 = *(Mat **)(this + 8);
    if (param_5) {
      if ((*(uint *)pMVar49 >> 0xe & 1) == 0) {
        cVar23 = fixedType(this);
        if ((cVar23 != '\0') || (cVar23 = fixedSize(this), cVar23 != '\0')) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          pcVar27 = (char *)String::allocate((String *)&local_200,0x1c);
          uVar12 = s__fixedType_______fixedSize___0046b9c0._24_4_;
          uVar11 = s__fixedType_______fixedSize___0046b9c0._8_8_;
          uVar10 = s__fixedType_______fixedSize___0046b9c0._0_8_;
          *(undefined8 *)(pcVar27 + 0x10) = s__fixedType_______fixedSize___0046b9c0._16_8_;
          *(undefined4 *)(pcVar27 + 0x18) = uVar12;
          *(undefined8 *)pcVar27 = uVar10;
          *(undefined8 *)(pcVar27 + 8) = uVar11;
          error(-0xd7,(String *)&local_200,
                "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8ae);
          String::deallocate((String *)&local_200);
        }
        if (*(long *)(pMVar49 + 0x38) != 0) {
          piVar2 = (int *)(*(long *)(pMVar49 + 0x38) + 0x14);
          do {
            iVar25 = *piVar2;
            cVar23 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar7) {
              *piVar2 = iVar25 + -1;
              cVar23 = ExclusiveMonitorsStatus();
            }
          } while (cVar23 != '\0');
          if (iVar25 == 1) {
            Mat::deallocate(pMVar49);
          }
        }
        *(undefined8 *)(pMVar49 + 0x38) = 0;
        *(undefined8 *)(pMVar49 + 0x10) = 0;
        *(undefined8 *)(pMVar49 + 0x28) = 0;
        *(undefined8 *)(pMVar49 + 0x20) = 0;
        *(undefined8 *)(pMVar49 + 0x18) = 0;
        if (0 < *(int *)(pMVar49 + 4)) {
          iVar25 = 0;
          puVar28 = *(undefined4 **)(pMVar49 + 0x40);
          do {
            *puVar28 = 0;
            iVar25 = iVar25 + 1;
            puVar28 = puVar28 + 1;
          } while (iVar25 < *(int *)(pMVar49 + 4));
        }
      }
      if (((((param_1 == 2) && (*(int *)(pMVar49 + 4) == 2)) && (*(long *)(pMVar49 + 0x10) != 0)) &&
          ((uVar47 == (*(uint *)pMVar49 & 0xfff) && (*(int *)(pMVar49 + 8) == param_2[1])))) &&
         (*(int *)(pMVar49 + 0xc) == *param_2)) {
        return;
      }
    }
    cVar23 = fixedType(this);
    if (cVar23 != '\0') {
      uVar36 = *(uint *)pMVar49;
      if ((((uint)param_3 >> 3 & 0x1ff) + 1 == (uVar36 >> 3 & 0x1ff) + 1) &&
         ((param_6 >> (*(uint *)this & 0x1f) & 1U) != 0)) {
        uVar47 = uVar36 & 0xfff;
      }
      else if (uVar47 != (uVar36 & 0xfff)) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1e);
        uVar13 = _LAB_0046b77c;
        uVar12 = _LAB_0046b778;
        uVar11 = DAT_0046b768;
        uVar10 = DAT_0046b760;
        puVar29[2] = _DAT_0046b770;
        *(undefined4 *)(puVar29 + 3) = uVar12;
        *(undefined2 *)((long)puVar29 + 0x1c) = uVar13;
        *puVar29 = uVar10;
        puVar29[1] = uVar11;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8bc);
        String::deallocate((String *)&local_200);
      }
    }
    cVar23 = fixedSize(this);
    if (cVar23 != '\0') {
      if (*(int *)(pMVar49 + 4) != param_1) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        pcVar27 = (char *)String::allocate((String *)&local_200,0xb);
        cVar23 = s_m_dims____d_0046b780[10];
        uVar13 = s_m_dims____d_0046b780._8_2_;
        *(undefined8 *)pcVar27 = s_m_dims____d_0046b780._0_8_;
        *(undefined2 *)(pcVar27 + 8) = uVar13;
        pcVar27[10] = cVar23;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8c0);
        String::deallocate((String *)&local_200);
      }
      if (0 < param_1) {
        lVar50 = 0;
        do {
          if (*(int *)(*(long *)(pMVar49 + 0x40) + lVar50) != *(int *)((long)param_2 + lVar50)) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            pcVar27 = (char *)String::allocate((String *)&local_200,0x15);
            uVar12 = s_m_size_j_____sizes_j__0046b790._16_4_;
            uVar11 = s_m_size_j_____sizes_j__0046b790._8_8_;
            uVar10 = s_m_size_j_____sizes_j__0046b790._0_8_;
            pcVar27[0x14] = s_m_size_j_____sizes_j__0046b790[0x14];
            *(undefined4 *)(pcVar27 + 0x10) = uVar12;
            *(undefined8 *)pcVar27 = uVar10;
            *(undefined8 *)(pcVar27 + 8) = uVar11;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8c2);
            String::deallocate((String *)&local_200);
          }
          lVar50 = lVar50 + 4;
        } while (lVar50 != ((ulong)(param_1 - 1) + 1) * 4);
      }
    }
LAB_0033eb5c:
    Mat::create(pMVar49,param_1,param_2,uVar47);
    return;
  }
  if (iVar25 == 0xa0000) {
    if (-1 < param_4) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar28 = (undefined4 *)String::allocate((String *)&local_200,5);
      uVar9 = DAT_0046b094;
      *puVar28 = DAT_0046b090;
      *(undefined1 *)(puVar28 + 1) = uVar9;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8ca);
      String::deallocate((String *)&local_200);
    }
    pUVar48 = *(UMat **)(this + 8);
    if (param_5) {
      if ((*(uint *)pUVar48 >> 0xe & 1) == 0) {
                    /* try { // try from 0033f6c0 to 0043f6c3 has its CatchHandler @ 0033e05c */
                    /* catch() { ... } // from try @ 0033f764 with catch @ 0033f6c4
                       catch() { ... } // from try @ 0033f7c0 with catch @ 0033f6c4
                       catch() { ... } // from try @ 00340ee8 with catch @ 0033f6c4 */
        cVar23 = fixedType(this);
        if ((cVar23 != '\0') || (cVar23 = fixedSize(this), cVar23 != '\0')) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          pcVar27 = (char *)String::allocate((String *)&local_200,0x1c);
          uVar12 = s__fixedType_______fixedSize___0046b9c0._24_4_;
          uVar11 = s__fixedType_______fixedSize___0046b9c0._8_8_;
          uVar10 = s__fixedType_______fixedSize___0046b9c0._0_8_;
          *(undefined8 *)(pcVar27 + 0x10) = s__fixedType_______fixedSize___0046b9c0._16_8_;
          *(undefined4 *)(pcVar27 + 0x18) = uVar12;
          *(undefined8 *)pcVar27 = uVar10;
          *(undefined8 *)(pcVar27 + 8) = uVar11;
          error(-0xd7,(String *)&local_200,
                "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8d0);
          String::deallocate((String *)&local_200);
        }
        if (*(long *)(pUVar48 + 0x20) != 0) {
          piVar2 = (int *)(*(long *)(pUVar48 + 0x20) + 0x10);
          do {
            iVar25 = *piVar2;
            cVar23 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar7) {
              *piVar2 = iVar25 + -1;
              cVar23 = ExclusiveMonitorsStatus();
            }
          } while (cVar23 != '\0');
          if (iVar25 == 1) {
            UMat::deallocate(pUVar48);
          }
        }
                    /* try { // try from 0033f764 to 0043f767 has its CatchHandler @ 0033f6c4 */
        if (0 < *(int *)(pUVar48 + 4)) {
          iVar25 = 0;
          puVar28 = *(undefined4 **)(pUVar48 + 0x30);
          do {
            *puVar28 = 0;
            iVar25 = iVar25 + 1;
            puVar28 = puVar28 + 1;
          } while (iVar25 < *(int *)(pUVar48 + 4));
        }
        *(undefined8 *)(pUVar48 + 0x20) = 0;
      }
      if (((param_1 == 2) && (*(int *)(pUVar48 + 4) == 2)) && (*(long *)(pUVar48 + 0x20) != 0)) {
        if ((((long)*(int *)(pUVar48 + 0xc) * (long)*(int *)(pUVar48 + 8) != 0) &&
            (uVar47 == (*(uint *)pUVar48 & 0xfff))) &&
           ((param_2[1] == *(int *)(pUVar48 + 8) && (*param_2 == *(int *)(pUVar48 + 0xc))))) {
          return;
        }
      }
    }
    cVar23 = fixedType(this);
    if (cVar23 != '\0') {
      uVar36 = *(uint *)pUVar48;
      if ((((uint)param_3 >> 3 & 0x1ff) + 1 == (uVar36 >> 3 & 0x1ff) + 1) &&
         ((param_6 >> (*(uint *)this & 0x1f) & 1U) != 0)) {
        uVar47 = uVar36 & 0xfff;
      }
      else if (uVar47 != (uVar36 & 0xfff)) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1e);
        uVar13 = _LAB_0046b77c;
        uVar12 = _LAB_0046b778;
        uVar11 = DAT_0046b768;
        uVar10 = DAT_0046b760;
        puVar29[2] = _DAT_0046b770;
        *(undefined4 *)(puVar29 + 3) = uVar12;
        *(undefined2 *)((long)puVar29 + 0x1c) = uVar13;
        *puVar29 = uVar10;
        puVar29[1] = uVar11;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8de);
        String::deallocate((String *)&local_200);
      }
    }
    cVar23 = fixedSize(this);
    if (cVar23 != '\0') {
      if (*(int *)(pUVar48 + 4) != param_1) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        pcVar27 = (char *)String::allocate((String *)&local_200,0xb);
        cVar23 = s_m_dims____d_0046b780[10];
        uVar13 = s_m_dims____d_0046b780._8_2_;
        *(undefined8 *)pcVar27 = s_m_dims____d_0046b780._0_8_;
        *(undefined2 *)(pcVar27 + 8) = uVar13;
        pcVar27[10] = cVar23;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8e2);
        String::deallocate((String *)&local_200);
      }
      if (0 < param_1) {
        lVar50 = 0;
        do {
          if (*(int *)(*(long *)(pUVar48 + 0x30) + lVar50) != *(int *)((long)param_2 + lVar50)) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            pcVar27 = (char *)String::allocate((String *)&local_200,0x15);
            uVar12 = s_m_size_j_____sizes_j__0046b790._16_4_;
            uVar11 = s_m_size_j_____sizes_j__0046b790._8_8_;
            uVar10 = s_m_size_j_____sizes_j__0046b790._0_8_;
            pcVar27[0x14] = s_m_size_j_____sizes_j__0046b790[0x14];
            *(undefined4 *)(pcVar27 + 0x10) = uVar12;
            *(undefined8 *)pcVar27 = uVar10;
            *(undefined8 *)(pcVar27 + 8) = uVar11;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8e4);
            String::deallocate((String *)&local_200);
          }
          lVar50 = lVar50 + 4;
        } while (lVar50 != ((ulong)(param_1 - 1) + 1) * 4);
      }
    }
LAB_0033edd4:
    UMat::create(pUVar48,param_1,param_2,uVar47,0);
    return;
  }
  if (iVar25 == 0x20000) {
    if (-1 < param_4) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar28 = (undefined4 *)String::allocate((String *)&local_200,5);
      uVar9 = DAT_0046b094;
      *puVar28 = DAT_0046b090;
      *(undefined1 *)(puVar28 + 1) = uVar9;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8ec);
      String::deallocate((String *)&local_200);
    }
    if ((uVar47 != (*(uint *)this & 0xfff)) &&
       ((((uint)param_3 >> 3 & 0x1ff) != 0 || ((param_6 >> (*(uint *)this & 0x1f) & 1U) == 0)))) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      pcVar27 = (char *)String::allocate((String *)&local_200,0x51);
      uVar21 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._72_8_;
      uVar20 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._64_8_;
      uVar19 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._56_8_;
      uVar18 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._48_8_;
      uVar17 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._40_8_;
      uVar16 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._32_8_;
      uVar15 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._24_8_;
      uVar14 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._16_8_;
      uVar11 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._8_8_;
      uVar10 = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8._0_8_;
      pcVar27[0x50] = s_mtype____type0_____CV_MAT_CN_mty_0046b7a8[0x50];
      *(undefined8 *)pcVar27 = uVar10;
      *(undefined8 *)(pcVar27 + 8) = uVar11;
      *(undefined8 *)(pcVar27 + 0x10) = uVar14;
      *(undefined8 *)(pcVar27 + 0x18) = uVar15;
      *(undefined8 *)(pcVar27 + 0x20) = uVar16;
      *(undefined8 *)(pcVar27 + 0x28) = uVar17;
      *(undefined8 *)(pcVar27 + 0x30) = uVar18;
      *(undefined8 *)(pcVar27 + 0x38) = uVar19;
      *(undefined8 *)(pcVar27 + 0x40) = uVar20;
      *(undefined8 *)(pcVar27 + 0x48) = uVar21;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8ee);
      String::deallocate((String *)&local_200);
    }
    if (param_1 == 2) {
      if ((*param_2 == *(int *)(this + 0x14)) && (param_2[1] == *(int *)(this + 0x10))) {
        return;
      }
      if (((param_5) && (*param_2 == *(int *)(this + 0x10))) &&
         (*(int *)(this + 0x14) == param_2[1])) {
        return;
      }
    }
    local_200 = (void *)0x0;
    uStack_1f8 = 0;
    pvVar37 = (void *)String::allocate((String *)&local_200,0x81);
    memcpy(pvVar37,&LAB_0046b800,0x81);
    error(-0xd7,(String *)&local_200,
          "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8f0);
    goto LAB_0033ef68;
  }
  if ((iVar25 - 0x30000U & 0xfffeffff) != 0) {
    if (iVar25 == 0) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      pcVar27 = (char *)String::allocate((String *)&local_200,0x2c);
      uVar12 = s_create___called_for_the_missing_o_0046b990._40_4_;
      uVar15 = s_create___called_for_the_missing_o_0046b990._24_8_;
      uVar14 = s_create___called_for_the_missing_o_0046b990._16_8_;
      uVar11 = s_create___called_for_the_missing_o_0046b990._8_8_;
      uVar10 = s_create___called_for_the_missing_o_0046b990._0_8_;
      *(undefined8 *)(pcVar27 + 0x20) = s_create___called_for_the_missing_o_0046b990._32_8_;
      *(undefined4 *)(pcVar27 + 0x28) = uVar12;
      *(undefined8 *)pcVar27 = uVar10;
      *(undefined8 *)(pcVar27 + 8) = uVar11;
      *(undefined8 *)(pcVar27 + 0x10) = uVar14;
      *(undefined8 *)(pcVar27 + 0x18) = uVar15;
      error(-0x1b,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x948);
      goto LAB_0033ef68;
    }
    if (iVar25 != 0x50000) {
      if (iVar25 != 0xb0000) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        pcVar27 = (char *)String::allocate((String *)&local_200,0x1e);
        uVar13 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
        uVar12 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
        uVar11 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
        uVar10 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
        *(undefined8 *)(pcVar27 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
        *(undefined4 *)(pcVar27 + 0x18) = uVar12;
        *(undefined2 *)(pcVar27 + 0x1c) = uVar13;
        *(undefined8 *)pcVar27 = uVar10;
        *(undefined8 *)(pcVar27 + 8) = uVar11;
        error(-0xd5,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9c2);
        goto LAB_0033ef68;
      }
      pvVar43 = *(vector<cv::UMat,std::allocator<cv::UMat>> **)(this + 8);
      if (-1 < param_4) {
        lVar31 = *(long *)pvVar43;
        if ((int)(*(long *)(pvVar43 + 8) - lVar31 >> 4) * -0x33333333 <= param_4) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          pcVar27 = (char *)String::allocate((String *)&local_200,0x11);
          uVar11 = s_i_<_(int)v_size()_0046b278._8_8_;
          uVar10 = s_i_<_(int)v_size()_0046b278._0_8_;
          pcVar27[0x10] = s_i_<_(int)v_size()_0046b278[0x10];
          *(undefined8 *)pcVar27 = uVar10;
          *(undefined8 *)(pcVar27 + 8) = uVar11;
          error(-0xd7,(String *)&local_200,
                "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9a0);
          String::deallocate((String *)&local_200);
          lVar31 = *(long *)pvVar43;
        }
        pUVar48 = (UMat *)(lVar31 + lVar50 * 0x50);
        if (param_5) {
          if ((*(uint *)(lVar31 + lVar50 * 0x50) >> 0xe & 1) == 0) {
            cVar23 = fixedType(this);
            if ((cVar23 != '\0') || (cVar23 = fixedSize(this), cVar23 != '\0')) {
              local_200 = (void *)0x0;
              uStack_1f8 = 0;
              pcVar27 = (char *)String::allocate((String *)&local_200,0x1c);
              uVar12 = s__fixedType_______fixedSize___0046b9c0._24_4_;
              uVar11 = s__fixedType_______fixedSize___0046b9c0._8_8_;
              uVar10 = s__fixedType_______fixedSize___0046b9c0._0_8_;
              *(undefined8 *)(pcVar27 + 0x10) = s__fixedType_______fixedSize___0046b9c0._16_8_;
              *(undefined4 *)(pcVar27 + 0x18) = uVar12;
              *(undefined8 *)pcVar27 = uVar10;
              *(undefined8 *)(pcVar27 + 8) = uVar11;
              error(-0xd7,(String *)&local_200,
                    "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9a7);
              String::deallocate((String *)&local_200);
            }
            if (*(long *)(pUVar48 + 0x20) != 0) {
              piVar2 = (int *)(*(long *)(pUVar48 + 0x20) + 0x10);
              do {
                iVar25 = *piVar2;
                cVar23 = '\x01';
                bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
                if (bVar7) {
                  *piVar2 = iVar25 + -1;
                  cVar23 = ExclusiveMonitorsStatus();
                }
              } while (cVar23 != '\0');
              if (iVar25 == 1) {
                UMat::deallocate(pUVar48);
              }
            }
            if (0 < *(int *)(pUVar48 + 4)) {
              iVar25 = 0;
              puVar28 = *(undefined4 **)(pUVar48 + 0x30);
              do {
                *puVar28 = 0;
                iVar25 = iVar25 + 1;
                puVar28 = puVar28 + 1;
              } while (iVar25 < *(int *)(pUVar48 + 4));
            }
            *(undefined8 *)(pUVar48 + 0x20) = 0;
          }
          if (((param_1 == 2) && (*(int *)(pUVar48 + 4) == 2)) &&
             ((*(long *)(pUVar48 + 0x20) != 0 &&
              (((uVar47 == (*(uint *)pUVar48 & 0xfff) && (*(int *)(pUVar48 + 8) == param_2[1])) &&
               (*(int *)(pUVar48 + 0xc) == *param_2)))))) {
            return;
          }
        }
        cVar23 = fixedType(this);
        if (cVar23 != '\0') {
          uVar36 = *(uint *)pUVar48;
          if ((((uint)param_3 >> 3 & 0x1ff) + 1 == (uVar36 >> 3 & 0x1ff) + 1) &&
             ((param_6 >> (*(uint *)this & 0x1f) & 1U) != 0)) {
            uVar47 = uVar36 & 0xfff;
          }
          else if (uVar47 != (uVar36 & 0xfff)) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1e);
            uVar13 = _LAB_0046b77c;
            uVar12 = _LAB_0046b778;
            uVar11 = DAT_0046b768;
            uVar10 = DAT_0046b760;
            puVar29[2] = _DAT_0046b770;
            *(undefined4 *)(puVar29 + 3) = uVar12;
            *(undefined2 *)((long)puVar29 + 0x1c) = uVar13;
            *puVar29 = uVar10;
            puVar29[1] = uVar11;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9b5);
            String::deallocate((String *)&local_200);
          }
        }
        cVar23 = fixedSize(this);
        if (cVar23 != '\0') {
          if (*(int *)(pUVar48 + 4) != param_1) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            pcVar27 = (char *)String::allocate((String *)&local_200,0xb);
            cVar23 = s_m_dims____d_0046b780[10];
            uVar13 = s_m_dims____d_0046b780._8_2_;
            *(undefined8 *)pcVar27 = s_m_dims____d_0046b780._0_8_;
            *(undefined2 *)(pcVar27 + 8) = uVar13;
            pcVar27[10] = cVar23;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9b9);
            String::deallocate((String *)&local_200);
          }
          if (0 < param_1) {
            lVar50 = 0;
            do {
              if (*(int *)(*(long *)(pUVar48 + 0x30) + lVar50) != *(int *)((long)param_2 + lVar50))
              {
                local_200 = (void *)0x0;
                uStack_1f8 = 0;
                pcVar27 = (char *)String::allocate((String *)&local_200,0x15);
                uVar12 = s_m_size_j_____sizes_j__0046b790._16_4_;
                uVar11 = s_m_size_j_____sizes_j__0046b790._8_8_;
                uVar10 = s_m_size_j_____sizes_j__0046b790._0_8_;
                pcVar27[0x14] = s_m_size_j_____sizes_j__0046b790[0x14];
                *(undefined4 *)(pcVar27 + 0x10) = uVar12;
                *(undefined8 *)pcVar27 = uVar10;
                *(undefined8 *)(pcVar27 + 8) = uVar11;
                error(-0xd7,(String *)&local_200,
                      "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                      "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9bb);
                String::deallocate((String *)&local_200);
              }
              lVar50 = lVar50 + 4;
            } while (lVar50 != ((ulong)(param_1 - 1) + 1) * 4);
          }
        }
        goto LAB_0033edd4;
      }
      if (param_1 == 2) {
        iVar45 = *param_2;
        iVar25 = param_2[1];
        if ((iVar45 == 1) || (iVar25 == 1)) goto LAB_00340360;
        if (iVar45 * iVar25 != 0) goto LAB_003402e4;
      }
      else {
LAB_003402e4:
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        pcVar27 = (char *)String::allocate((String *)&local_200,0x44);
        uVar17 = s_d____2_____sizes_0_____1____size_0046b888._40_8_;
        uVar16 = s_d____2_____sizes_0_____1____size_0046b888._32_8_;
        uVar15 = s_d____2_____sizes_0_____1____size_0046b888._24_8_;
        uVar14 = s_d____2_____sizes_0_____1____size_0046b888._16_8_;
        uVar11 = s_d____2_____sizes_0_____1____size_0046b888._8_8_;
        uVar10 = s_d____2_____sizes_0_____1____size_0046b888._0_8_;
        *(undefined4 *)(pcVar27 + 0x40) = s_d____2_____sizes_0_____1____size_0046b888._64_4_;
        uVar19 = s_d____2_____sizes_0_____1____size_0046b888._56_8_;
        uVar18 = s_d____2_____sizes_0_____1____size_0046b888._48_8_;
        *(undefined8 *)pcVar27 = uVar10;
        *(undefined8 *)(pcVar27 + 8) = uVar11;
        *(undefined8 *)(pcVar27 + 0x10) = uVar14;
        *(undefined8 *)(pcVar27 + 0x18) = uVar15;
        *(undefined8 *)(pcVar27 + 0x20) = uVar16;
        *(undefined8 *)(pcVar27 + 0x28) = uVar17;
        *(undefined8 *)(pcVar27 + 0x30) = uVar18;
        *(undefined8 *)(pcVar27 + 0x38) = uVar19;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x98d);
        String::deallocate((String *)&local_200);
        iVar25 = param_2[1];
        iVar45 = *param_2;
LAB_00340360:
        if (0 < iVar25 * iVar45) {
          uVar46 = (ulong)(iVar25 + iVar45 + -1);
          goto LAB_0033fa78;
        }
      }
      uVar46 = 0;
LAB_0033fa78:
      lVar50 = *(long *)(pvVar43 + 8) - *(long *)pvVar43;
      uVar34 = (lVar50 >> 4) * -0x3333333333333333;
      bVar24 = fixedSize(this);
      if ((uVar46 == uVar34) < bVar24) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1b);
        uVar9 = DAT_0046ba62;
        uVar13 = DAT_0046ba60;
        uVar11 = _LAB_0046ba50;
        uVar10 = DAT_0046ba48;
        puVar29[2] = DAT_0046ba58;
        *(undefined2 *)(puVar29 + 3) = uVar13;
        *(undefined1 *)((long)puVar29 + 0x1a) = uVar9;
        *puVar29 = uVar10;
        puVar29[1] = uVar11;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x990);
        String::deallocate((String *)&local_200);
      }
      local_1c8 = &local_1c0;
      local_1d0 = &uStack_1f8;
      local_200 = (void *)DAT_00340e80;
      uStack_1f8 = 0;
      local_1f0 = 0;
      local_1e0 = 0;
      local_1e8 = (ulong)local_1e8._4_4_ << 0x20;
      pUVar48 = *(UMat **)(pvVar43 + 8);
      local_1d8 = 0;
      local_1b8 = (undefined8 *)0x0;
      lVar31 = (long)pUVar48 - *(long *)pvVar43 >> 4;
      local_1c0 = (ulong *)0x0;
      uVar39 = lVar31 * -0x3333333333333333;
      if (uVar39 < uVar46) {
        std::vector<cv::UMat,std::allocator<cv::UMat>>::_M_fill_insert
                  (pvVar43,pUVar48,uVar46 + lVar31 * 0x3333333333333333,&local_200);
      }
      else if (uVar46 < uVar39) {
        pUVar4 = (UMat *)(*(long *)pvVar43 + uVar46 * 0x50);
        for (this_00 = pUVar4; pUVar48 != this_00; this_00 = this_00 + 0x50) {
          UMat::~UMat(this_00);
        }
        *(UMat **)(pvVar43 + 8) = pUVar4;
      }
      UMat::~UMat((UMat *)&local_200);
      cVar23 = fixedType(this);
      if (cVar23 == '\0') {
        return;
      }
      uVar47 = *(uint *)this;
      if (uVar46 <= uVar34) {
        return;
      }
      lVar31 = *(long *)pvVar43;
      do {
        uVar36 = *(uint *)(lVar31 + lVar50);
        puVar35 = (uint *)(lVar31 + lVar50);
        if ((uVar47 & 0xfff) != (uVar36 & 0xfff)) {
          if (*(long *)(puVar35 + 8) != 0) {
            if ((int)puVar35[1] < 3) {
              lVar32 = (long)(int)puVar35[3] * (long)(int)puVar35[2];
            }
            else {
              lVar30 = 0;
              lVar32 = 1;
              do {
                lVar1 = lVar30 * 4;
                lVar30 = lVar30 + 1;
                lVar32 = lVar32 * *(int *)(*(long *)(puVar35 + 0xc) + lVar1);
              } while ((int)lVar30 < (int)puVar35[1]);
            }
            if (lVar32 != 0) {
              local_200 = (void *)0x0;
              uStack_1f8 = 0;
              puVar29 = (undefined8 *)String::allocate((String *)&local_200,0xc);
              uVar12 = DAT_0046ba70;
              *puVar29 = DAT_0046ba68;
              *(undefined4 *)(puVar29 + 1) = uVar12;
              error(-0xd7,(String *)&local_200,
                    "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x999);
              String::deallocate((String *)&local_200);
              lVar31 = *(long *)pvVar43;
              puVar35 = (uint *)(lVar31 + lVar50);
              uVar36 = *(uint *)(lVar31 + lVar50);
            }
          }
          *puVar35 = uVar36 & 0xfffff000 | uVar47 & 0xfff;
        }
        uVar34 = uVar34 + 1;
        lVar50 = lVar50 + 0x50;
      } while (uVar34 < uVar46);
      return;
    }
    pvVar44 = *(vector<cv::Mat,std::allocator<cv::Mat>> **)(this + 8);
    if (-1 < param_4) {
      lVar31 = *(long *)pvVar44;
                    /* try { // try from 0033f7b8 to 0043f7bb has its CatchHandler @ 00340ed8 */
                    /* try { // try from 0033f7c0 to 0043f7c3 has its CatchHandler @ 0033f6c4 */
      if ((int)(*(long *)(pvVar44 + 8) - lVar31 >> 5) * -0x55555555 <= param_4) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        pcVar27 = (char *)String::allocate((String *)&local_200,0x11);
        uVar11 = s_i_<_(int)v_size()_0046b278._8_8_;
        uVar10 = s_i_<_(int)v_size()_0046b278._0_8_;
        pcVar27[0x10] = s_i_<_(int)v_size()_0046b278[0x10];
        *(undefined8 *)pcVar27 = uVar10;
        *(undefined8 *)(pcVar27 + 8) = uVar11;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x965);
        String::deallocate((String *)&local_200);
        lVar31 = *(long *)pvVar44;
      }
      pMVar49 = (Mat *)(lVar31 + lVar50 * 0x60);
      if (param_5) {
        if ((*(uint *)(lVar31 + lVar50 * 0x60) >> 0xe & 1) == 0) {
          cVar23 = fixedType(this);
          if ((cVar23 != '\0') || (cVar23 = fixedSize(this), cVar23 != '\0')) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            pcVar27 = (char *)String::allocate((String *)&local_200,0x1c);
            uVar12 = s__fixedType_______fixedSize___0046b9c0._24_4_;
            uVar11 = s__fixedType_______fixedSize___0046b9c0._8_8_;
            uVar10 = s__fixedType_______fixedSize___0046b9c0._0_8_;
            *(undefined8 *)(pcVar27 + 0x10) = s__fixedType_______fixedSize___0046b9c0._16_8_;
            *(undefined4 *)(pcVar27 + 0x18) = uVar12;
            *(undefined8 *)pcVar27 = uVar10;
            *(undefined8 *)(pcVar27 + 8) = uVar11;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x96c);
            String::deallocate((String *)&local_200);
          }
          if (*(long *)(pMVar49 + 0x38) != 0) {
            piVar2 = (int *)(*(long *)(pMVar49 + 0x38) + 0x14);
            do {
              iVar25 = *piVar2;
              cVar23 = '\x01';
              bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
              if (bVar7) {
                *piVar2 = iVar25 + -1;
                cVar23 = ExclusiveMonitorsStatus();
              }
            } while (cVar23 != '\0');
            if (iVar25 == 1) {
              Mat::deallocate(pMVar49);
            }
          }
          *(undefined8 *)(pMVar49 + 0x38) = 0;
          *(undefined8 *)(pMVar49 + 0x10) = 0;
          *(undefined8 *)(pMVar49 + 0x28) = 0;
          *(undefined8 *)(pMVar49 + 0x20) = 0;
          *(undefined8 *)(pMVar49 + 0x18) = 0;
          if (0 < *(int *)(pMVar49 + 4)) {
            iVar25 = 0;
            puVar28 = *(undefined4 **)(pMVar49 + 0x40);
            do {
              *puVar28 = 0;
              iVar25 = iVar25 + 1;
              puVar28 = puVar28 + 1;
            } while (iVar25 < *(int *)(pMVar49 + 4));
          }
        }
        if (((((param_1 == 2) && (*(int *)(pMVar49 + 4) == 2)) && (*(long *)(pMVar49 + 0x10) != 0))
            && ((uVar47 == (*(uint *)pMVar49 & 0xfff) && (*(int *)(pMVar49 + 8) == param_2[1])))) &&
           (*(int *)(pMVar49 + 0xc) == *param_2)) {
          return;
        }
      }
      cVar23 = fixedType(this);
      if (cVar23 != '\0') {
        uVar36 = *(uint *)pMVar49;
        if ((((uint)param_3 >> 3 & 0x1ff) + 1 == (uVar36 >> 3 & 0x1ff) + 1) &&
           ((param_6 >> (*(uint *)this & 0x1f) & 1U) != 0)) {
          uVar47 = uVar36 & 0xfff;
        }
        else if (uVar47 != (uVar36 & 0xfff)) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1e);
          uVar13 = _LAB_0046b77c;
          uVar12 = _LAB_0046b778;
          uVar11 = DAT_0046b768;
          uVar10 = DAT_0046b760;
          puVar29[2] = _DAT_0046b770;
          *(undefined4 *)(puVar29 + 3) = uVar12;
          *(undefined2 *)((long)puVar29 + 0x1c) = uVar13;
          *puVar29 = uVar10;
          puVar29[1] = uVar11;
          error(-0xd7,(String *)&local_200,
                "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x97a);
          String::deallocate((String *)&local_200);
        }
      }
      cVar23 = fixedSize(this);
      if (cVar23 != '\0') {
        if (*(int *)(pMVar49 + 4) != param_1) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          pcVar27 = (char *)String::allocate((String *)&local_200,0xb);
          cVar23 = s_m_dims____d_0046b780[10];
          uVar13 = s_m_dims____d_0046b780._8_2_;
          *(undefined8 *)pcVar27 = s_m_dims____d_0046b780._0_8_;
          *(undefined2 *)(pcVar27 + 8) = uVar13;
          pcVar27[10] = cVar23;
          error(-0xd7,(String *)&local_200,
                "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x97e);
          String::deallocate((String *)&local_200);
        }
        if (0 < param_1) {
          lVar50 = 0;
          do {
            if (*(int *)(*(long *)(pMVar49 + 0x40) + lVar50) != *(int *)((long)param_2 + lVar50)) {
              local_200 = (void *)0x0;
              uStack_1f8 = 0;
              pcVar27 = (char *)String::allocate((String *)&local_200,0x15);
              uVar12 = s_m_size_j_____sizes_j__0046b790._16_4_;
              uVar11 = s_m_size_j_____sizes_j__0046b790._8_8_;
              uVar10 = s_m_size_j_____sizes_j__0046b790._0_8_;
              pcVar27[0x14] = s_m_size_j_____sizes_j__0046b790[0x14];
              *(undefined4 *)(pcVar27 + 0x10) = uVar12;
              *(undefined8 *)pcVar27 = uVar10;
              *(undefined8 *)(pcVar27 + 8) = uVar11;
              error(-0xd7,(String *)&local_200,
                    "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x980);
              String::deallocate((String *)&local_200);
            }
            lVar50 = lVar50 + 4;
          } while (lVar50 != ((ulong)(param_1 - 1) + 1) * 4);
        }
      }
      goto LAB_0033eb5c;
    }
    if (param_1 == 2) {
      iVar25 = *param_2;
      iVar45 = param_2[1];
      if (iVar25 == 1) goto LAB_00340574;
      if (iVar45 == 1) {
        iVar45 = 1;
        goto LAB_00340574;
      }
      if (iVar25 * iVar45 != 0) goto LAB_003404f8;
LAB_00340080:
      uVar46 = 0;
    }
    else {
LAB_003404f8:
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      pcVar27 = (char *)String::allocate((String *)&local_200,0x44);
      uVar17 = s_d____2_____sizes_0_____1____size_0046b888._40_8_;
      uVar16 = s_d____2_____sizes_0_____1____size_0046b888._32_8_;
      uVar15 = s_d____2_____sizes_0_____1____size_0046b888._24_8_;
      uVar14 = s_d____2_____sizes_0_____1____size_0046b888._16_8_;
      uVar11 = s_d____2_____sizes_0_____1____size_0046b888._8_8_;
      uVar10 = s_d____2_____sizes_0_____1____size_0046b888._0_8_;
      *(undefined4 *)(pcVar27 + 0x40) = s_d____2_____sizes_0_____1____size_0046b888._64_4_;
      uVar19 = s_d____2_____sizes_0_____1____size_0046b888._56_8_;
      uVar18 = s_d____2_____sizes_0_____1____size_0046b888._48_8_;
      *(undefined8 *)pcVar27 = uVar10;
      *(undefined8 *)(pcVar27 + 8) = uVar11;
      *(undefined8 *)(pcVar27 + 0x10) = uVar14;
      *(undefined8 *)(pcVar27 + 0x18) = uVar15;
      *(undefined8 *)(pcVar27 + 0x20) = uVar16;
      *(undefined8 *)(pcVar27 + 0x28) = uVar17;
      *(undefined8 *)(pcVar27 + 0x30) = uVar18;
      *(undefined8 *)(pcVar27 + 0x38) = uVar19;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x952);
      String::deallocate((String *)&local_200);
      iVar25 = *param_2;
      iVar45 = param_2[1];
LAB_00340574:
      if (iVar25 * iVar45 < 1) goto LAB_00340080;
      uVar46 = (ulong)(iVar25 + iVar45 + -1);
    }
    lVar50 = *(long *)(pvVar44 + 8) - *(long *)pvVar44;
    uVar34 = (lVar50 >> 5) * -0x5555555555555555;
    bVar24 = fixedSize(this);
    if ((uVar46 == uVar34) < bVar24) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x1b);
      uVar9 = DAT_0046ba62;
      uVar13 = DAT_0046ba60;
      uVar11 = _LAB_0046ba50;
      uVar10 = DAT_0046ba48;
      puVar29[2] = DAT_0046ba58;
      *(undefined2 *)(puVar29 + 3) = uVar13;
      *(undefined1 *)((long)puVar29 + 0x1a) = uVar9;
      *puVar29 = uVar10;
      puVar29[1] = uVar11;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x955);
      String::deallocate((String *)&local_200);
    }
    local_1b8 = &local_1b0;
    local_1c0 = &uStack_1f8;
    local_200 = (void *)DAT_00340e80;
    uStack_1f8 = 0;
    local_1f0 = 0;
    local_1e8 = 0;
    local_1e0 = 0;
    local_1d8 = 0;
    local_1d0 = (ulong *)0x0;
    local_1c8 = (ulong **)0x0;
    local_1a8 = 0;
    pMVar49 = *(Mat **)(pvVar44 + 8);
    local_1b0 = 0;
    lVar31 = (long)pMVar49 - *(long *)pvVar44 >> 5;
    uVar39 = lVar31 * -0x5555555555555555;
    if (uVar39 < uVar46) {
      std::vector<cv::Mat,std::allocator<cv::Mat>>::_M_fill_insert
                (pvVar44,pMVar49,uVar46 + lVar31 * 0x5555555555555555,&local_200);
    }
    else {
      if (uVar39 <= uVar46) goto LAB_00340184;
      pMVar5 = (Mat *)(*(long *)pvVar44 + uVar46 * 0x60);
      for (this_01 = pMVar5; pMVar49 != this_01; this_01 = this_01 + 0x60) {
        if (*(long *)(this_01 + 0x38) != 0) {
          piVar2 = (int *)(*(long *)(this_01 + 0x38) + 0x14);
          do {
            iVar25 = *piVar2;
            cVar23 = '\x01';
            bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar7) {
              *piVar2 = iVar25 + -1;
              cVar23 = ExclusiveMonitorsStatus();
            }
          } while (cVar23 != '\0');
          if (iVar25 == 1) {
            Mat::deallocate(this_01);
          }
        }
        *(undefined8 *)(this_01 + 0x38) = 0;
        *(undefined8 *)(this_01 + 0x10) = 0;
        *(undefined8 *)(this_01 + 0x28) = 0;
        *(undefined8 *)(this_01 + 0x20) = 0;
        *(undefined8 *)(this_01 + 0x18) = 0;
        if (0 < *(int *)(this_01 + 4)) {
          iVar25 = 0;
          puVar28 = *(undefined4 **)(this_01 + 0x40);
          do {
            *puVar28 = 0;
            iVar25 = iVar25 + 1;
            puVar28 = puVar28 + 1;
          } while (iVar25 < *(int *)(this_01 + 4));
        }
        if (*(Mat **)(this_01 + 0x48) != this_01 + 0x50) {
          fastFree(*(Mat **)(this_01 + 0x48));
        }
      }
      *(Mat **)(pvVar44 + 8) = pMVar5;
    }
    if (local_1c8 != (ulong **)0x0) {
      piVar2 = (int *)((long)local_1c8 + 0x14);
      do {
        iVar25 = *piVar2;
        cVar23 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar7) {
          *piVar2 = iVar25 + -1;
          cVar23 = ExclusiveMonitorsStatus();
        }
      } while (cVar23 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_200);
      }
    }
LAB_00340184:
    local_1c8 = (ulong **)0x0;
    local_1f0 = 0;
    local_1d8 = 0;
    local_1e0 = 0;
    local_1e8 = 0;
    if (0 < local_200._4_4_) {
      iVar25 = 0;
      puVar33 = local_1c0;
      do {
        *(undefined4 *)puVar33 = 0;
        iVar25 = iVar25 + 1;
        puVar33 = (ulong *)((long)puVar33 + 4);
      } while (iVar25 < local_200._4_4_);
    }
    if (local_1b8 != &local_1b0) {
      fastFree(local_1b8);
    }
    cVar23 = fixedType(this);
    if (cVar23 == '\0') {
      return;
    }
    uVar47 = *(uint *)this;
    if (uVar46 <= uVar34) {
      return;
    }
    lVar31 = *(long *)pvVar44;
    do {
      uVar36 = *(uint *)(lVar31 + lVar50);
      puVar35 = (uint *)(lVar31 + lVar50);
      if ((uVar47 & 0xfff) != (uVar36 & 0xfff)) {
        if (*(long *)(puVar35 + 4) != 0) {
          if ((int)puVar35[1] < 3) {
            lVar32 = (long)(int)puVar35[3] * (long)(int)puVar35[2];
          }
          else {
            lVar30 = 0;
            lVar32 = 1;
            do {
              lVar1 = lVar30 * 4;
              lVar30 = lVar30 + 1;
              lVar32 = lVar32 * *(int *)(*(long *)(puVar35 + 0x10) + lVar1);
            } while ((int)lVar30 < (int)puVar35[1]);
          }
          if (lVar32 != 0) {
            local_200 = (void *)0x0;
            uStack_1f8 = 0;
            puVar29 = (undefined8 *)String::allocate((String *)&local_200,0xc);
            uVar12 = DAT_0046ba70;
            *puVar29 = DAT_0046ba68;
            *(undefined4 *)(puVar29 + 1) = uVar12;
            error(-0xd7,(String *)&local_200,
                  "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x95e);
            String::deallocate((String *)&local_200);
            lVar31 = *(long *)pvVar44;
            puVar35 = (uint *)(lVar31 + lVar50);
            uVar36 = *(uint *)(lVar31 + lVar50);
          }
        }
        *puVar35 = uVar36 & 0xfffff000 | uVar47 & 0xfff;
      }
      uVar34 = uVar34 + 1;
      lVar50 = lVar50 + 0x60;
    } while (uVar34 < uVar46);
    return;
  }
  if (param_1 == 2) {
    iVar45 = *param_2;
    if (iVar45 == 1) goto LAB_0033e72c;
    if (param_2[1] == 1) {
      iVar26 = 1;
      goto LAB_0033e730;
    }
    if (iVar45 * param_2[1] != 0) goto LAB_0033e6b4;
LAB_0033f234:
    uVar46 = 0;
  }
  else {
LAB_0033e6b4:
    local_200 = (void *)0x0;
    uStack_1f8 = 0;
    pcVar27 = (char *)String::allocate((String *)&local_200,0x44);
    uVar19 = s_d____2_____sizes_0_____1____size_0046b888._56_8_;
    uVar18 = s_d____2_____sizes_0_____1____size_0046b888._48_8_;
    uVar17 = s_d____2_____sizes_0_____1____size_0046b888._40_8_;
    uVar16 = s_d____2_____sizes_0_____1____size_0046b888._32_8_;
    uVar15 = s_d____2_____sizes_0_____1____size_0046b888._24_8_;
    uVar14 = s_d____2_____sizes_0_____1____size_0046b888._16_8_;
    uVar11 = s_d____2_____sizes_0_____1____size_0046b888._8_8_;
    uVar10 = s_d____2_____sizes_0_____1____size_0046b888._0_8_;
    *(undefined4 *)(pcVar27 + 0x40) = s_d____2_____sizes_0_____1____size_0046b888._64_4_;
    *(undefined8 *)pcVar27 = uVar10;
    *(undefined8 *)(pcVar27 + 8) = uVar11;
    *(undefined8 *)(pcVar27 + 0x10) = uVar14;
    *(undefined8 *)(pcVar27 + 0x18) = uVar15;
    *(undefined8 *)(pcVar27 + 0x20) = uVar16;
    *(undefined8 *)(pcVar27 + 0x28) = uVar17;
    *(undefined8 *)(pcVar27 + 0x30) = uVar18;
    *(undefined8 *)(pcVar27 + 0x38) = uVar19;
    error(-0xd7,(String *)&local_200,
          "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8f6);
    String::deallocate((String *)&local_200);
    iVar45 = *param_2;
LAB_0033e72c:
    iVar26 = param_2[1];
LAB_0033e730:
    if (iVar45 * iVar26 < 1) goto LAB_0033f234;
    uVar46 = (ulong)(iVar45 + iVar26 + -1);
  }
  pvVar42 = *(vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
              **)(this + 8);
  if (iVar25 == 0x40000) {
    if (param_4 < 0) {
      cVar23 = fixedSize(this);
      if ((cVar23 != '\0') &&
         (uVar46 != (*(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 3) * -0x5555555555555555)) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x20);
        uVar14 = _DAT_0046b9f8;
        uVar11 = DAT_0046b9f0;
        uVar10 = _LAB_0046b9e8;
        *puVar29 = _DAT_0046b9e0;
        puVar29[1] = uVar10;
        puVar29[2] = uVar11;
        puVar29[3] = uVar14;
        error(-0xd7,(String *)&local_200,
              "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x8ff);
        String::deallocate((String *)&local_200);
      }
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      local_1f0 = 0;
      puVar29 = *(undefined8 **)(pvVar42 + 8);
      lVar50 = (long)puVar29 - *(long *)pvVar42 >> 3;
      uVar34 = lVar50 * -0x5555555555555555;
      if (uVar34 < uVar46) {
        std::
        vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
        ::_M_fill_insert(pvVar42,puVar29,uVar46 + lVar50 * 0x5555555555555555,&local_200);
      }
      else {
        if (uVar34 <= uVar46) {
          return;
        }
        puVar3 = (undefined8 *)(*(long *)pvVar42 + uVar46 * 0x18);
        for (puVar8 = puVar3; puVar29 != puVar8; puVar8 = puVar8 + 3) {
          if ((void *)*puVar8 != (void *)0x0) {
            operator_delete((void *)*puVar8);
          }
        }
        *(undefined8 **)(pvVar42 + 8) = puVar3;
      }
                    /* catch() { ... } // from try @ 0033e150 with catch @ 0033f6b0 */
      if (local_200 == (void *)0x0) {
        return;
      }
      operator_delete(local_200);
      return;
    }
    lVar31 = *(long *)pvVar42;
    if ((int)(*(long *)(pvVar42 + 8) - lVar31 >> 3) * -0x55555555 <= param_4) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      pcVar27 = (char *)String::allocate((String *)&local_200,0x12);
      uVar11 = s_i_<_(int)vv_size()_0046b098._8_8_;
      uVar10 = s_i_<_(int)vv_size()_0046b098._0_8_;
      *(undefined2 *)(pcVar27 + 0x10) = s_i_<_(int)vv_size()_0046b098._16_2_;
      *(undefined8 *)pcVar27 = uVar10;
      *(undefined8 *)(pcVar27 + 8) = uVar11;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x903);
      String::deallocate((String *)&local_200);
      lVar31 = *(long *)pvVar42;
    }
    pvVar42 = (vector<std::vector<unsigned_char,std::allocator<unsigned_char>>,std::allocator<std::vector<unsigned_char,std::allocator<unsigned_char>>>>
               *)(lVar31 + lVar50 * 0x18);
  }
  else if (-1 < param_4) {
    local_200 = (void *)0x0;
    uStack_1f8 = 0;
    puVar28 = (undefined4 *)String::allocate((String *)&local_200,5);
    uVar9 = DAT_0046b094;
    *puVar28 = DAT_0046b090;
    *(undefined1 *)(puVar28 + 1) = uVar9;
    error(-0xd7,(String *)&local_200,
          "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x907);
    String::deallocate((String *)&local_200);
  }
  uVar36 = *(uint *)this;
  if (uVar47 == (uVar36 & 0xfff)) {
    iVar25 = (uVar36 >> 3 & 0x1ff) + 1;
  }
  else {
    iVar25 = (uVar36 >> 3 & 0x1ff) + 1;
    if ((((uint)param_3 >> 3 & 0x1ff) + 1 != iVar25) || ((param_6 >> (uVar36 & 0x1f) & 1U) == 0)) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x60);
      uVar22 = s_k_____0__0046b928._0_8_;
      uVar21 = DAT_0046b920;
      uVar20 = DAT_0046b918;
      uVar19 = DAT_0046b910;
      uVar18 = DAT_0046b908;
      uVar17 = _LAB_0046b900;
      uVar16 = DAT_0046b8f8;
      uVar15 = DAT_0046b8f0;
      uVar14 = DAT_0046b8e8;
      uVar11 = DAT_0046b8e0;
      uVar10 = DAT_0046b8d8;
      *puVar29 = DAT_0046b8d0;
      puVar29[1] = uVar10;
      puVar29[2] = uVar11;
      puVar29[3] = uVar14;
      puVar29[4] = uVar15;
      puVar29[5] = uVar16;
      puVar29[6] = uVar17;
      puVar29[7] = uVar18;
      puVar29[8] = uVar19;
      puVar29[9] = uVar20;
      puVar29[10] = uVar21;
      puVar29[0xb] = uVar22;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x90a);
      String::deallocate((String *)&local_200);
    }
  }
  cVar23 = fixedSize(this);
  uVar47 = iVar25 << (ulong)((uint)(0xfa50L >> ((uVar36 & 7) << 1)) & 3);
  if (cVar23 != '\0') {
    uVar34 = 0;
    if ((long)(int)uVar47 != 0) {
      uVar34 = (ulong)(*(long *)(pvVar42 + 8) - *(long *)pvVar42) / (ulong)(long)(int)uVar47;
    }
    if (uVar46 != uVar34) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      puVar29 = (undefined8 *)String::allocate((String *)&local_200,0x3d);
      uVar9 = LAB_0046ba44;
      uVar12 = DAT_0046ba40;
      uVar17 = DAT_0046ba30;
      uVar16 = DAT_0046ba28;
      uVar15 = DAT_0046ba20;
      uVar14 = DAT_0046ba18;
      uVar11 = DAT_0046ba10;
      uVar10 = DAT_0046ba08;
      puVar29[6] = DAT_0046ba38;
      *(undefined4 *)(puVar29 + 7) = uVar12;
      *(undefined1 *)((long)puVar29 + 0x3c) = uVar9;
      *puVar29 = uVar10;
      puVar29[1] = uVar11;
      puVar29[2] = uVar14;
      puVar29[3] = uVar15;
      puVar29[4] = uVar16;
      puVar29[5] = uVar17;
      error(-0xd7,(String *)&local_200,
            "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x90d);
      String::deallocate((String *)&local_200);
    }
  }
  if (uVar47 == 0x10) {
    uStack_1f8 = 0;
    local_200 = (void *)0x0;
    uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 4;
    if (uVar34 < uVar46) {
      FUN_0033a51c(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
      return;
    }
    if (uVar34 <= uVar46) {
      return;
    }
    *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x10;
    return;
  }
  if ((int)uVar47 < 0x11) {
    if (uVar47 == 4) {
      pvVar37 = *(void **)(pvVar42 + 8);
      lVar50 = (long)pvVar37 - *(long *)pvVar42;
      uVar34 = lVar50 >> 2;
      if (uVar46 <= uVar34) {
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 4;
        return;
      }
      uVar46 = uVar46 - uVar34;
      if (uVar46 == 0) {
        return;
      }
      if (uVar46 <= (ulong)(*(long *)(pvVar42 + 0x10) - (long)pvVar37 >> 2)) {
        memset(pvVar37,0,uVar46 * 4);
        *(void **)(pvVar42 + 8) = (void *)((long)pvVar37 + uVar46 * 4);
        return;
      }
      if (0x3fffffffffffffff - uVar34 < uVar46) {
LAB_00340c08:
                    /* WARNING: Subroutine does not return */
        FUN_0040f39c("vector::_M_fill_insert");
      }
      uVar39 = uVar46;
      if (uVar46 < uVar34) {
        uVar39 = uVar34;
      }
      uVar39 = uVar39 + uVar34;
      if ((uVar39 < uVar34) || (0x3fffffffffffffff < uVar39)) {
        uVar39 = 0x3fffffffffffffff;
      }
      else if (uVar39 == 0) {
        pvVar41 = (void *)0x0;
        uVar39 = 0;
        goto LAB_00340a80;
      }
      uVar39 = uVar39 << 2;
      pvVar41 = operator_new(uVar39);
LAB_00340a80:
      memset((void *)((long)pvVar41 + lVar50),0,uVar46 * 4);
      sVar40 = (long)pvVar37 - (long)*(void **)pvVar42;
      if ((long)sVar40 >> 2 != 0) {
        memmove(pvVar41,*(void **)pvVar42,sVar40);
      }
      pvVar6 = (void *)((long)pvVar41 + uVar46 * 4 + sVar40);
      sVar40 = *(long *)(pvVar42 + 8) - (long)pvVar37;
      if ((long)sVar40 >> 2 != 0) {
        memmove(pvVar6,pvVar37,sVar40);
      }
      if (*(void **)pvVar42 != (void *)0x0) {
        operator_delete(*(void **)pvVar42);
      }
      *(void **)pvVar42 = pvVar41;
      *(size_t *)(pvVar42 + 8) = (long)pvVar6 + sVar40;
      *(ulong *)(pvVar42 + 0x10) = (long)pvVar41 + uVar39;
      return;
    }
    if ((int)uVar47 < 5) {
      if (uVar47 == 2) {
        local_200 = (void *)((ulong)local_200 & 0xffffffffffff0000);
        uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 1;
        if (uVar34 < uVar46) {
          FUN_00338cb4(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 2;
        return;
      }
      if (2 < (int)uVar47) {
        local_200 = (void *)((ulong)local_200 & 0xffffffffff000000);
        lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42;
        uVar34 = lVar50 * -0x5555555555555555;
        if (uVar34 < uVar46) {
          FUN_003391cc(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x5555555555555555);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 3;
        return;
      }
      if (uVar47 == 1) {
        pvVar37 = *(void **)(pvVar42 + 8);
        uVar34 = (long)pvVar37 - *(long *)pvVar42;
        if (uVar46 <= uVar34) {
          if (uVar34 <= uVar46) {
            return;
          }
          *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46;
          return;
        }
        uVar46 = uVar46 - uVar34;
        if (uVar46 == 0) {
          return;
        }
        if (uVar46 <= (ulong)(*(long *)(pvVar42 + 0x10) - (long)pvVar37)) {
          memset(pvVar37,0,uVar46);
          *(ulong *)(pvVar42 + 8) = *(long *)(pvVar42 + 8) + uVar46;
          return;
        }
        if (~uVar34 < uVar46) goto LAB_00340c08;
        uVar39 = uVar46;
        if (uVar46 < uVar34) {
          uVar39 = uVar34;
        }
        uVar39 = uVar39 + uVar34;
        if (uVar39 < uVar34) {
          uVar39 = 0xffffffffffffffff;
        }
        else {
          pvVar41 = (void *)0x0;
          uVar38 = 0;
          if (uVar39 == 0) goto LAB_003409c4;
        }
        pvVar41 = operator_new(uVar39);
        uVar38 = uVar39;
LAB_003409c4:
        memset((void *)((long)pvVar41 + uVar34),0,uVar46);
        sVar40 = (long)pvVar37 - (long)*(void **)pvVar42;
        if (sVar40 != 0) {
          memmove(pvVar41,*(void **)pvVar42,sVar40);
        }
        pvVar6 = (void *)((long)pvVar41 + uVar46 + sVar40);
        sVar40 = *(long *)(pvVar42 + 8) - (long)pvVar37;
        if (sVar40 != 0) {
          memmove(pvVar6,pvVar37,sVar40);
        }
        if (*(void **)pvVar42 != (void *)0x0) {
          operator_delete(*(void **)pvVar42);
        }
        *(void **)pvVar42 = pvVar41;
        *(size_t *)(pvVar42 + 8) = (long)pvVar6 + sVar40;
        *(ulong *)(pvVar42 + 0x10) = (long)pvVar41 + uVar38;
        return;
      }
    }
    else {
      if (uVar47 == 8) {
        uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 3;
        local_200 = (void *)0x0;
        if (uVar34 < uVar46) {
          FUN_00339bf4(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 8;
        return;
      }
      if (uVar47 == 0xc) {
        lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 2;
        local_200 = (void *)0x0;
        uVar34 = lVar50 * -0x5555555555555555;
        uStack_1f8 = uStack_1f8 & 0xffffffff00000000;
        if (uVar34 < uVar46) {
          FUN_00339f9c(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x5555555555555555);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0xc;
        return;
      }
      if (uVar47 == 6) {
        lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 1;
        uVar34 = lVar50 * -0x5555555555555555;
        local_200 = (void *)((ulong)local_200 & 0xffff000000000000);
        if (uVar34 < uVar46) {
          FUN_00339558(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x5555555555555555);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 6;
        return;
      }
    }
  }
  else {
    if (uVar47 == 0x30) {
      local_200 = (void *)0x0;
      uStack_1f8 = 0;
      local_1f0 = 0;
      local_1e8 = 0;
      local_1e0 = 0;
      local_1d8 = 0;
      lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 4;
      uVar34 = lVar50 * -0x5555555555555555;
      if (uVar34 < uVar46) {
        FUN_0033b6f0(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x5555555555555555);
        return;
      }
      if (uVar34 <= uVar46) {
        return;
      }
      *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x30;
      return;
    }
    if ((int)uVar47 < 0x31) {
      if (uVar47 == 0x20) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        local_1f0 = 0;
        local_1e8 = 0;
        uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 5;
        if (uVar34 < uVar46) {
          FUN_0033ad24(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x20;
        return;
      }
      if (uVar47 == 0x24) {
        local_1e0 = (ulong)local_1e0._4_4_ << 0x20;
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        local_1f0 = 0;
        local_1e8 = 0;
        lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 2;
        uVar34 = lVar50 * -0x71c71c71c71c71c7;
        if (uVar34 < uVar46) {
          FUN_0033b194(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x71c71c71c71c71c7);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x24;
        return;
      }
      if (uVar47 == 0x18) {
        local_1f0 = 0;
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        lVar50 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 3;
        uVar34 = lVar50 * -0x5555555555555555;
        if (uVar34 < uVar46) {
          FUN_0033a890(pvVar42,*(long *)(pvVar42 + 8),uVar46 + lVar50 * 0x5555555555555555);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x18;
        return;
      }
    }
    else {
      if (uVar47 == 0x80) {
        local_200 = (void *)0x0;
        uStack_1f8 = 0;
        local_1f0 = 0;
        local_1e8 = 0;
        local_1e0 = 0;
        local_1d8 = 0;
        local_1d0 = (ulong *)0x0;
        local_1c8 = (ulong **)0x0;
        local_1c0 = (ulong *)0x0;
        local_1b8 = (undefined8 *)0x0;
        local_1b0 = 0;
        local_1a8 = 0;
        local_1a0 = 0;
        uStack_198 = 0;
        local_190 = 0;
        uStack_188 = 0;
        uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 7;
        if (uVar34 < uVar46) {
          FUN_0033c324(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
          return;
        }
        if (uVar34 <= uVar46) {
          return;
        }
        *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x80;
        return;
      }
      if ((int)uVar47 < 0x81) {
        if (uVar47 == 0x40) {
          local_200 = (void *)0x0;
          uStack_1f8 = 0;
          local_1f0 = 0;
          local_1e8 = 0;
          local_1e0 = 0;
          local_1d8 = 0;
          local_1d0 = (ulong *)0x0;
          local_1c8 = (ulong **)0x0;
          uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 6;
          if (uVar34 < uVar46) {
            FUN_0033bcc8(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34);
            return;
          }
          if (uVar34 <= uVar46) {
            return;
          }
          *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x40;
          return;
        }
      }
      else {
        if (uVar47 == 0x100) {
          memset(&local_200,0,0x100);
          uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 8;
          if (uVar34 < uVar46) {
            FUN_0033cdf4(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34,&local_200);
            return;
          }
          if (uVar34 <= uVar46) {
            return;
          }
          *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x100;
          return;
        }
        if (uVar47 == 0x200) {
          memset(&local_200,0,0x200);
          uVar34 = *(long *)(pvVar42 + 8) - *(long *)pvVar42 >> 9;
          if (uVar34 < uVar46) {
            FUN_0033dd54(pvVar42,*(long *)(pvVar42 + 8),uVar46 - uVar34,&local_200);
            return;
          }
          if (uVar34 <= uVar46) {
            return;
          }
          *(ulong *)(pvVar42 + 8) = *(long *)pvVar42 + uVar46 * 0x200;
          return;
        }
      }
    }
  }
  format("Vectors with element size %d are not supported. Please, modify OutputArray::create()\n",
         &local_200,(ulong)uVar47);
  error(-5,(String *)&local_200,
        "void cv::_OutputArray::create(int, const int*, int, int, bool, int) const",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x941);
LAB_0033ef68:
  String::deallocate((String *)&local_200);
  return;
}


==================================================================

### FUNC 00340e88 (872 bytes) name=extractImageCOI

/* cv::extractImageCOI(void const*, cv::_OutputArray const&, int) */

void cv::extractImageCOI(void *param_1,_OutputArray *param_2,int param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  int iVar7;
  char *pcVar8;
  Mat *pMVar9;
  undefined4 *puVar10;
  AutoBuffer *in_x5;
  ulong local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  int *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined4 local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cvarrToMat(param_1,(void *)0x0,true,true,0,in_x5);
                    /* catch() { ... } // from try @ 0033f7b8 with catch @ 00340ed8 */
  _OutputArray::create(param_2,local_bc,local_80,local_c0 & 7,-1,false,0);
                    /* try { // try from 00340ee8 to 00440eeb has its CatchHandler @ 0033f6c4 */
  iVar7 = _InputArray::kind((_InputArray *)param_2);
                    /* catch() { ... } // from try @ 00340f8c with catch @ 00340eec
                       catch() { ... } // from try @ 00340fe8 with catch @ 00340eec
                       catch() { ... } // from try @ 003425dc with catch @ 00340eec */
  if (iVar7 == 0x10000) {
    pMVar9 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar9;
    local_5c = *(int *)(pMVar9 + 4);
    local_58 = *(undefined4 *)(pMVar9 + 8);
    local_54 = *(undefined4 *)(pMVar9 + 0xc);
    local_50 = *(undefined8 *)(pMVar9 + 0x10);
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (param_3 < 0) {
    if (((param_1 == (void *)0x0) || (*(int *)param_1 != 0x90)) ||
       (*(long *)((long)param_1 + 0x58) == 0)) {
      local_e0 = 0;
      local_d8 = 0;
      pcVar8 = (char *)String::allocate((String *)&local_e0,0x10);
      uVar4 = s_CV_IS_IMAGE_arr__0046b1c8._8_8_;
      *(undefined8 *)pcVar8 = s_CV_IS_IMAGE_arr__0046b1c8._0_8_;
      *(undefined8 *)(pcVar8 + 8) = uVar4;
      error(-0xd7,(String *)&local_e0,"void cv::extractImageCOI(const CvArr*, cv::OutputArray, int)"
            ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3a4);
      String::deallocate((String *)&local_e0);
    }
    iVar7 = cvGetImageCOI(param_1);
    param_3 = iVar7 - 1;
    if (-1 < param_3) goto LAB_00340f0c;
  }
  else {
LAB_00340f0c:
    if (param_3 <= (int)(local_c0 >> 3 & 0x1ff)) goto LAB_00340f1c;
  }
  local_d0 = 0;
  local_c8 = 0;
  pcVar8 = (char *)String::allocate((String *)&local_d0,0x20);
  uVar6 = s_0_<__coi_&&_coi_<_mat_channels()_0046ba78._24_8_;
  uVar5 = s_0_<__coi_&&_coi_<_mat_channels()_0046ba78._16_8_;
  uVar4 = s_0_<__coi_&&_coi_<_mat_channels()_0046ba78._8_8_;
  *(undefined8 *)pcVar8 = s_0_<__coi_&&_coi_<_mat_channels()_0046ba78._0_8_;
  *(undefined8 *)(pcVar8 + 8) = uVar4;
  *(undefined8 *)(pcVar8 + 0x10) = uVar5;
  *(undefined8 *)(pcVar8 + 0x18) = uVar6;
  error(-0xd7,(String *)&local_d0,"void cv::extractImageCOI(const CvArr*, cv::OutputArray, int)",
        "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3a7);
  String::deallocate((String *)&local_d0);
LAB_00340f1c:
  local_e8 = (ulong)(uint)param_3;
  mixChannels((Mat *)&local_c0,1,(Mat *)&local_60,1,(int *)&local_e8,1);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar7 = 0;
    puVar10 = local_20;
    do {
                    /* try { // try from 00340f8c to 00440f8f has its CatchHandler @ 00340eec */
      *puVar10 = 0;
      iVar7 = iVar7 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar7 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
                    /* try { // try from 00340fe0 to 00440fe3 has its CatchHandler @ 003425cc */
  local_b0 = 0;
                    /* try { // try from 00340fe8 to 00440feb has its CatchHandler @ 00340eec */
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar7 = 0;
    do {
      *local_80 = 0;
      iVar7 = iVar7 + 1;
      local_80 = local_80 + 1;
    } while (iVar7 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00341264 (2228 bytes) name=create

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_OutputArray::create(cv::Size_<int>, int, int, bool, int) const */

void __thiscall
cv::_OutputArray::create
          (_OutputArray *this,int *param_2,uint param_3,int param_4,bool param_5,int param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  undefined4 uVar8;
  char cVar9;
  int iVar10;
  uint *puVar11;
  Mat *this_00;
  undefined8 *puVar12;
  UMat *pUVar13;
  char *pcVar14;
  long lVar15;
  int local_10 [4];
  
  iVar10 = _InputArray::kind((_InputArray *)this);
  if ((iVar10 == 0x10000) && (param_4 < 0)) {
    if (param_5 < (param_6 == 0)) {
      cVar9 = fixedSize(this);
      if ((cVar9 != '\0') &&
         (((*(int **)(*(long *)(this + 8) + 0x40))[1] != *param_2 ||
          (**(int **)(*(long *)(this + 8) + 0x40) != param_2[1])))) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar14 = (char *)String::allocate((String *)local_10,0x35);
        uVar8 = s__fixedSize________Mat__obj__>siz_0046bbe0._48_4_;
        uVar6 = s__fixedSize________Mat__obj__>siz_0046bbe0._40_8_;
        uVar5 = s__fixedSize________Mat__obj__>siz_0046bbe0._32_8_;
        uVar4 = s__fixedSize________Mat__obj__>siz_0046bbe0._24_8_;
        uVar3 = s__fixedSize________Mat__obj__>siz_0046bbe0._16_8_;
        uVar2 = s__fixedSize________Mat__obj__>siz_0046bbe0._8_8_;
        uVar1 = s__fixedSize________Mat__obj__>siz_0046bbe0._0_8_;
        pcVar14[0x34] = s__fixedSize________Mat__obj__>siz_0046bbe0[0x34];
        *(undefined4 *)(pcVar14 + 0x30) = uVar8;
        *(undefined8 *)pcVar14 = uVar1;
        *(undefined8 *)(pcVar14 + 8) = uVar2;
        *(undefined8 *)(pcVar14 + 0x10) = uVar3;
        *(undefined8 *)(pcVar14 + 0x18) = uVar4;
        *(undefined8 *)(pcVar14 + 0x20) = uVar5;
        *(undefined8 *)(pcVar14 + 0x28) = uVar6;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x851);
        String::deallocate((String *)local_10);
      }
      cVar9 = fixedType(this);
      if (cVar9 != '\0') {
        this_00 = *(Mat **)(this + 8);
        if ((*(uint *)this_00 & 0xfff) == param_3) goto LAB_00341758;
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar14 = (char *)String::allocate((String *)local_10,0x2c);
        uVar8 = s__fixedType________Mat__obj__>typ_0046bad8._40_4_;
        uVar4 = s__fixedType________Mat__obj__>typ_0046bad8._24_8_;
        uVar3 = s__fixedType________Mat__obj__>typ_0046bad8._16_8_;
        uVar2 = s__fixedType________Mat__obj__>typ_0046bad8._8_8_;
        uVar1 = s__fixedType________Mat__obj__>typ_0046bad8._0_8_;
        *(undefined8 *)(pcVar14 + 0x20) = s__fixedType________Mat__obj__>typ_0046bad8._32_8_;
        *(undefined4 *)(pcVar14 + 0x28) = uVar8;
        *(undefined8 *)pcVar14 = uVar1;
        *(undefined8 *)(pcVar14 + 8) = uVar2;
        *(undefined8 *)(pcVar14 + 0x10) = uVar3;
        *(undefined8 *)(pcVar14 + 0x18) = uVar4;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x852);
        String::deallocate((String *)local_10);
      }
      this_00 = *(Mat **)(this + 8);
LAB_00341758:
      if ((((*(int *)(this_00 + 4) < 3) && (param_2[1] == *(int *)(this_00 + 8))) &&
          (*param_2 == *(int *)(this_00 + 0xc))) &&
         (((param_3 & 0xfff) == (*(uint *)this_00 & 0xfff) && (*(long *)(this_00 + 0x10) != 0)))) {
        return;
      }
      local_10[1] = *param_2;
      local_10[0] = param_2[1];
      Mat::create(this_00,2,local_10,param_3 & 0xfff);
      return;
    }
LAB_003412b4:
    if (iVar10 == 0x70000) {
      if ((param_4 < 0) && (param_5 < (param_6 == 0))) {
        cVar9 = fixedSize(this);
        if ((cVar9 != '\0') &&
           ((*(int *)(*(long *)(this + 8) + 0x14) != *param_2 ||
            (*(int *)(*(long *)(this + 8) + 0x10) != param_2[1])))) {
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar14 = (char *)String::allocate((String *)local_10,0x32);
          uVar6 = s__fixedSize________ogl__Buffer__o_0046bc50._40_8_;
          uVar5 = s__fixedSize________ogl__Buffer__o_0046bc50._32_8_;
          uVar4 = s__fixedSize________ogl__Buffer__o_0046bc50._24_8_;
          uVar3 = s__fixedSize________ogl__Buffer__o_0046bc50._16_8_;
          uVar2 = s__fixedSize________ogl__Buffer__o_0046bc50._8_8_;
          uVar1 = s__fixedSize________ogl__Buffer__o_0046bc50._0_8_;
          *(undefined2 *)(pcVar14 + 0x30) = s__fixedSize________ogl__Buffer__o_0046bc50._48_2_;
          *(undefined8 *)pcVar14 = uVar1;
          *(undefined8 *)(pcVar14 + 8) = uVar2;
          *(undefined8 *)(pcVar14 + 0x10) = uVar3;
          *(undefined8 *)(pcVar14 + 0x18) = uVar4;
          *(undefined8 *)(pcVar14 + 0x20) = uVar5;
          *(undefined8 *)(pcVar14 + 0x28) = uVar6;
          error(-0xd7,(String *)local_10,
                "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x866);
          String::deallocate((String *)local_10);
        }
        cVar9 = fixedType(this);
        if (cVar9 != '\0') {
          lVar15 = *(long *)(this + 8);
          if (param_3 == *(uint *)(lVar15 + 0x18)) goto LAB_00341a5c;
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar14 = (char *)String::allocate((String *)local_10,0x34);
          uVar6 = s__fixedType________ogl__Buffer__o_0046bb70._40_8_;
          uVar5 = s__fixedType________ogl__Buffer__o_0046bb70._32_8_;
          uVar4 = s__fixedType________ogl__Buffer__o_0046bb70._24_8_;
          uVar3 = s__fixedType________ogl__Buffer__o_0046bb70._16_8_;
          uVar2 = s__fixedType________ogl__Buffer__o_0046bb70._8_8_;
          uVar1 = s__fixedType________ogl__Buffer__o_0046bb70._0_8_;
          *(undefined4 *)(pcVar14 + 0x30) = s__fixedType________ogl__Buffer__o_0046bb70._48_4_;
          *(undefined8 *)pcVar14 = uVar1;
          *(undefined8 *)(pcVar14 + 8) = uVar2;
          *(undefined8 *)(pcVar14 + 0x10) = uVar3;
          *(undefined8 *)(pcVar14 + 0x18) = uVar4;
          *(undefined8 *)(pcVar14 + 0x20) = uVar5;
          *(undefined8 *)(pcVar14 + 0x28) = uVar6;
          error(-0xd7,(String *)local_10,
                "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x867);
          String::deallocate((String *)local_10);
        }
        lVar15 = *(long *)(this + 8);
LAB_00341a5c:
        ogl::Buffer::create(lVar15,param_2[1],*param_2,param_3,0x8892,0);
        return;
      }
      goto LAB_003412d0;
    }
  }
  else {
    if ((iVar10 != 0xa0000) || (-1 < param_4)) {
      if ((iVar10 == 0x90000) && (param_4 < 0)) {
        if (param_5 < (param_6 == 0)) {
          cVar9 = fixedSize(this);
          if ((cVar9 != '\0') &&
             ((*(int *)(*(long *)(this + 8) + 8) != *param_2 ||
              (*(int *)(*(long *)(this + 8) + 4) != param_2[1])))) {
            local_10[0] = 0;
            local_10[1] = 0;
            local_10[2] = 0;
            local_10[3] = 0;
            pcVar14 = (char *)String::allocate((String *)local_10,0x33);
            uVar7 = s__fixedSize________cuda__GpuMat___0046baa0._48_2_;
            uVar6 = s__fixedSize________cuda__GpuMat___0046baa0._40_8_;
            uVar5 = s__fixedSize________cuda__GpuMat___0046baa0._32_8_;
            uVar4 = s__fixedSize________cuda__GpuMat___0046baa0._24_8_;
            uVar3 = s__fixedSize________cuda__GpuMat___0046baa0._16_8_;
            uVar2 = s__fixedSize________cuda__GpuMat___0046baa0._8_8_;
            uVar1 = s__fixedSize________cuda__GpuMat___0046baa0._0_8_;
            pcVar14[0x32] = s__fixedSize________cuda__GpuMat___0046baa0[0x32];
            *(undefined2 *)(pcVar14 + 0x30) = uVar7;
            *(undefined8 *)pcVar14 = uVar1;
            *(undefined8 *)(pcVar14 + 8) = uVar2;
            *(undefined8 *)(pcVar14 + 0x10) = uVar3;
            *(undefined8 *)(pcVar14 + 0x18) = uVar4;
            *(undefined8 *)(pcVar14 + 0x20) = uVar5;
            *(undefined8 *)(pcVar14 + 0x28) = uVar6;
            error(-0xd7,(String *)local_10,
                  "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x85f);
            String::deallocate((String *)local_10);
          }
          cVar9 = fixedType(this);
          if (cVar9 != '\0') {
            puVar11 = *(uint **)(this + 8);
            if (param_3 == (*puVar11 & 0xfff)) goto LAB_003415fc;
            local_10[0] = 0;
            local_10[1] = 0;
            local_10[2] = 0;
            local_10[3] = 0;
            pcVar14 = (char *)String::allocate((String *)local_10,0x35);
            uVar8 = s__fixedType________cuda__GpuMat___0046bb38._48_4_;
            uVar6 = s__fixedType________cuda__GpuMat___0046bb38._40_8_;
            uVar5 = s__fixedType________cuda__GpuMat___0046bb38._32_8_;
            uVar4 = s__fixedType________cuda__GpuMat___0046bb38._24_8_;
            uVar3 = s__fixedType________cuda__GpuMat___0046bb38._16_8_;
            uVar2 = s__fixedType________cuda__GpuMat___0046bb38._8_8_;
            uVar1 = s__fixedType________cuda__GpuMat___0046bb38._0_8_;
            pcVar14[0x34] = s__fixedType________cuda__GpuMat___0046bb38[0x34];
            *(undefined4 *)(pcVar14 + 0x30) = uVar8;
            *(undefined8 *)pcVar14 = uVar1;
            *(undefined8 *)(pcVar14 + 8) = uVar2;
            *(undefined8 *)(pcVar14 + 0x10) = uVar3;
            *(undefined8 *)(pcVar14 + 0x18) = uVar4;
            *(undefined8 *)(pcVar14 + 0x20) = uVar5;
            *(undefined8 *)(pcVar14 + 0x28) = uVar6;
            error(-0xd7,(String *)local_10,
                  "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x860);
            String::deallocate((String *)local_10);
          }
          puVar11 = *(uint **)(this + 8);
LAB_003415fc:
          cuda::GpuMat::create((int)puVar11,param_2[1],*param_2);
          return;
        }
        goto LAB_003412d0;
      }
      goto LAB_003412b4;
    }
    if (param_5 < (param_6 == 0)) {
      cVar9 = fixedSize(this);
      if ((cVar9 != '\0') &&
         (((*(int **)(*(long *)(this + 8) + 0x30))[1] != *param_2 ||
          (**(int **)(*(long *)(this + 8) + 0x30) != param_2[1])))) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        puVar12 = (undefined8 *)String::allocate((String *)local_10,0x36);
        uVar8 = DAT_0046bc48;
        uVar6 = DAT_0046bc40;
        uVar5 = DAT_0046bc38;
        uVar4 = DAT_0046bc30;
        uVar3 = DAT_0046bc28;
        uVar2 = DAT_0046bc20;
        uVar1 = DAT_0046bc18;
        *(undefined2 *)((long)puVar12 + 0x34) = _LAB_0046bc4c;
        *(undefined4 *)(puVar12 + 6) = uVar8;
        *puVar12 = uVar1;
        puVar12[1] = uVar2;
        puVar12[2] = uVar3;
        puVar12[3] = uVar4;
        puVar12[4] = uVar5;
        puVar12[5] = uVar6;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x858);
        String::deallocate((String *)local_10);
      }
      cVar9 = fixedType(this);
      if (cVar9 != '\0') {
        pUVar13 = *(UMat **)(this + 8);
        if (param_3 == (*(uint *)pUVar13 & 0xfff)) goto LAB_003418e4;
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar14 = (char *)String::allocate((String *)local_10,0x2d);
        cVar9 = s__fixedType________UMat__obj__>ty_0046bb08[0x2c];
        uVar8 = s__fixedType________UMat__obj__>ty_0046bb08._40_4_;
        uVar4 = s__fixedType________UMat__obj__>ty_0046bb08._24_8_;
        uVar3 = s__fixedType________UMat__obj__>ty_0046bb08._16_8_;
        uVar2 = s__fixedType________UMat__obj__>ty_0046bb08._8_8_;
        uVar1 = s__fixedType________UMat__obj__>ty_0046bb08._0_8_;
        *(undefined8 *)(pcVar14 + 0x20) = s__fixedType________UMat__obj__>ty_0046bb08._32_8_;
        *(undefined4 *)(pcVar14 + 0x28) = uVar8;
        pcVar14[0x2c] = cVar9;
        *(undefined8 *)pcVar14 = uVar1;
        *(undefined8 *)(pcVar14 + 8) = uVar2;
        *(undefined8 *)(pcVar14 + 0x10) = uVar3;
        *(undefined8 *)(pcVar14 + 0x18) = uVar4;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x859);
        String::deallocate((String *)local_10);
      }
      pUVar13 = *(UMat **)(this + 8);
LAB_003418e4:
      if ((((*(int *)(pUVar13 + 4) < 3) && (param_2[1] == *(int *)(pUVar13 + 8))) &&
          (*param_2 == *(int *)(pUVar13 + 0xc))) &&
         (((param_3 & 0xfff) == (*(uint *)pUVar13 & 0xfff) && (*(long *)(pUVar13 + 0x20) != 0)))) {
        return;
      }
      local_10[1] = *param_2;
      local_10[0] = param_2[1];
      UMat::create(pUVar13,2,local_10,param_3 & 0xfff,0);
      return;
    }
  }
  if (((-1 < param_4) || (iVar10 != 0x80000)) || ((param_6 == 0) <= param_5)) {
LAB_003412d0:
    local_10[1] = *param_2;
    local_10[0] = param_2[1];
    create(this,2,local_10,param_3,param_4,param_5,param_6);
    return;
  }
  cVar9 = fixedSize(this);
  if ((cVar9 != '\0') &&
     ((*(int *)(*(long *)(this + 8) + 8) != *param_2 ||
      (*(int *)(*(long *)(this + 8) + 4) != param_2[1])))) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar14 = (char *)String::allocate((String *)local_10,0x34);
    uVar6 = s__fixedSize________cuda__HostMem__0046bc88._40_8_;
    uVar5 = s__fixedSize________cuda__HostMem__0046bc88._32_8_;
    uVar4 = s__fixedSize________cuda__HostMem__0046bc88._24_8_;
    uVar3 = s__fixedSize________cuda__HostMem__0046bc88._16_8_;
    uVar2 = s__fixedSize________cuda__HostMem__0046bc88._8_8_;
    uVar1 = s__fixedSize________cuda__HostMem__0046bc88._0_8_;
    *(undefined4 *)(pcVar14 + 0x30) = s__fixedSize________cuda__HostMem__0046bc88._48_4_;
    *(undefined8 *)pcVar14 = uVar1;
    *(undefined8 *)(pcVar14 + 8) = uVar2;
    *(undefined8 *)(pcVar14 + 0x10) = uVar3;
    *(undefined8 *)(pcVar14 + 0x18) = uVar4;
    *(undefined8 *)(pcVar14 + 0x20) = uVar5;
    *(undefined8 *)(pcVar14 + 0x28) = uVar6;
    error(-0xd7,(String *)local_10,
          "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x86d);
    String::deallocate((String *)local_10);
  }
  cVar9 = fixedType(this);
  if (cVar9 != '\0') {
    puVar11 = *(uint **)(this + 8);
    if (param_3 == (*puVar11 & 0xfff)) goto LAB_00341480;
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar14 = (char *)String::allocate((String *)local_10,0x36);
    uVar8 = s__fixedType________cuda__HostMem__0046bba8._48_4_;
    uVar6 = s__fixedType________cuda__HostMem__0046bba8._40_8_;
    uVar5 = s__fixedType________cuda__HostMem__0046bba8._32_8_;
    uVar4 = s__fixedType________cuda__HostMem__0046bba8._24_8_;
    uVar3 = s__fixedType________cuda__HostMem__0046bba8._16_8_;
    uVar2 = s__fixedType________cuda__HostMem__0046bba8._8_8_;
    uVar1 = s__fixedType________cuda__HostMem__0046bba8._0_8_;
    *(undefined2 *)(pcVar14 + 0x34) = s__fixedType________cuda__HostMem__0046bba8._52_2_;
    *(undefined4 *)(pcVar14 + 0x30) = uVar8;
    *(undefined8 *)pcVar14 = uVar1;
    *(undefined8 *)(pcVar14 + 8) = uVar2;
    *(undefined8 *)(pcVar14 + 0x10) = uVar3;
    *(undefined8 *)(pcVar14 + 0x18) = uVar4;
    *(undefined8 *)(pcVar14 + 0x20) = uVar5;
    *(undefined8 *)(pcVar14 + 0x28) = uVar6;
    error(-0xd7,(String *)local_10,
          "void cv::_OutputArray::create(cv::Size, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x86e);
    String::deallocate((String *)local_10);
  }
  puVar11 = *(uint **)(this + 8);
LAB_00341480:
  cuda::HostMem::create((int)puVar11,param_2[1],*param_2);
  return;
}


==================================================================

### FUNC 00341be0 (924 bytes) name=release

/* cv::_OutputArray::release() const */

void __thiscall cv::_OutputArray::release(_OutputArray *this)

{
  int *piVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char cVar7;
  int iVar8;
  char *pcVar9;
  undefined4 *puVar10;
  Mat *pMVar11;
  UMat *pUVar12;
  UMat *pUVar13;
  Mat *pMVar14;
  UMat *pUVar15;
  undefined8 *puVar16;
  Mat *pMVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  cVar7 = fixedSize(this);
  if (cVar7 != '\0') {
    local_10 = 0;
    local_8 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_10,0xc);
    uVar5 = s__fixedType_______fixedSize___0046b9c0._24_4_;
    *(undefined8 *)pcVar9 = s__fixedType_______fixedSize___0046b9c0._16_8_;
    *(undefined4 *)(pcVar9 + 8) = uVar5;
    error(-0xd7,(String *)&local_10,"void cv::_OutputArray::release() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x9cd);
    String::deallocate((String *)&local_10);
  }
  iVar8 = _InputArray::kind((_InputArray *)this);
  if (iVar8 == 0x10000) {
    pMVar11 = *(Mat **)(this + 8);
    if (*(long *)(pMVar11 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(pMVar11 + 0x38) + 0x14);
      do {
        iVar8 = *piVar1;
        cVar7 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = iVar8 + -1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate(pMVar11);
      }
    }
    *(undefined8 *)(pMVar11 + 0x38) = 0;
    *(undefined8 *)(pMVar11 + 0x10) = 0;
    *(undefined8 *)(pMVar11 + 0x28) = 0;
    *(undefined8 *)(pMVar11 + 0x20) = 0;
    *(undefined8 *)(pMVar11 + 0x18) = 0;
    if (0 < *(int *)(pMVar11 + 4)) {
      iVar8 = 0;
      puVar10 = *(undefined4 **)(pMVar11 + 0x40);
      do {
        *puVar10 = 0;
        iVar8 = iVar8 + 1;
        puVar10 = puVar10 + 1;
      } while (iVar8 < *(int *)(pMVar11 + 4));
    }
    return;
  }
  if (iVar8 == 0xa0000) {
    pUVar12 = *(UMat **)(this + 8);
    if (*(long *)(pUVar12 + 0x20) != 0) {
      piVar1 = (int *)(*(long *)(pUVar12 + 0x20) + 0x10);
      do {
        iVar8 = *piVar1;
        cVar7 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = iVar8 + -1;
          cVar7 = ExclusiveMonitorsStatus();
        }
      } while (cVar7 != '\0');
      if (iVar8 == 1) {
        UMat::deallocate(pUVar12);
      }
    }
    if (0 < *(int *)(pUVar12 + 4)) {
      iVar8 = 0;
      puVar10 = *(undefined4 **)(pUVar12 + 0x30);
      do {
        *puVar10 = 0;
        iVar8 = iVar8 + 1;
        puVar10 = puVar10 + 1;
      } while (iVar8 < *(int *)(pUVar12 + 4));
    }
    *(undefined8 *)(pUVar12 + 0x20) = 0;
    return;
  }
  if (iVar8 == 0x90000) {
    cuda::GpuMat::release();
    return;
  }
  if (iVar8 == 0x80000) {
    cuda::HostMem::release();
    return;
  }
  if (iVar8 == 0x70000) {
    ogl::Buffer::release();
    return;
  }
  if (iVar8 == 0) {
    return;
  }
  if (iVar8 != 0x30000) {
    if (iVar8 == 0x40000) {
      puVar16 = *(undefined8 **)(this + 8);
      pUVar15 = (UMat *)*puVar16;
      pUVar13 = (UMat *)puVar16[1];
      pUVar12 = pUVar15;
      if (pUVar13 != pUVar15) {
        do {
          if (*(void **)pUVar12 != (void *)0x0) {
            operator_delete(*(void **)pUVar12);
          }
          pUVar12 = pUVar12 + 0x18;
        } while (pUVar13 != pUVar12);
        puVar16[1] = pUVar15;
        return;
      }
    }
    else {
      if (iVar8 == 0x50000) {
        puVar16 = *(undefined8 **)(this + 8);
        pMVar14 = (Mat *)puVar16[1];
        pMVar17 = (Mat *)*puVar16;
        for (pMVar11 = pMVar17; pMVar11 != pMVar14; pMVar11 = pMVar11 + 0x60) {
          if (*(long *)(pMVar11 + 0x38) != 0) {
            piVar1 = (int *)(*(long *)(pMVar11 + 0x38) + 0x14);
            do {
              iVar8 = *piVar1;
              cVar7 = '\x01';
              bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
              if (bVar2) {
                *piVar1 = iVar8 + -1;
                cVar7 = ExclusiveMonitorsStatus();
              }
            } while (cVar7 != '\0');
            if (iVar8 == 1) {
              Mat::deallocate(pMVar11);
            }
          }
          *(undefined8 *)(pMVar11 + 0x38) = 0;
          *(undefined8 *)(pMVar11 + 0x10) = 0;
          *(undefined8 *)(pMVar11 + 0x28) = 0;
          *(undefined8 *)(pMVar11 + 0x20) = 0;
          *(undefined8 *)(pMVar11 + 0x18) = 0;
          if (0 < *(int *)(pMVar11 + 4)) {
            iVar8 = 0;
            puVar10 = *(undefined4 **)(pMVar11 + 0x40);
            do {
              *puVar10 = 0;
              iVar8 = iVar8 + 1;
              puVar10 = puVar10 + 1;
            } while (iVar8 < *(int *)(pMVar11 + 4));
          }
          if (*(Mat **)(pMVar11 + 0x48) != pMVar11 + 0x50) {
            fastFree(*(Mat **)(pMVar11 + 0x48));
          }
        }
        puVar16[1] = pMVar17;
        return;
      }
      if (iVar8 != 0xb0000) {
        local_10 = 0;
        local_8 = 0;
        pcVar9 = (char *)String::allocate((String *)&local_10,0x1e);
        uVar6 = s_Unknown_unsupported_array_type_0046b0b0._28_2_;
        uVar5 = s_Unknown_unsupported_array_type_0046b0b0._24_4_;
        uVar4 = s_Unknown_unsupported_array_type_0046b0b0._8_8_;
        uVar3 = s_Unknown_unsupported_array_type_0046b0b0._0_8_;
        *(undefined8 *)(pcVar9 + 0x10) = s_Unknown_unsupported_array_type_0046b0b0._16_8_;
        *(undefined4 *)(pcVar9 + 0x18) = uVar5;
        *(undefined2 *)(pcVar9 + 0x1c) = uVar6;
        *(undefined8 *)pcVar9 = uVar3;
        *(undefined8 *)(pcVar9 + 8) = uVar4;
        error(-0xd5,(String *)&local_10,"void cv::_OutputArray::release() const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa0a);
        String::deallocate((String *)&local_10);
        return;
      }
      puVar16 = *(undefined8 **)(this + 8);
      pUVar13 = (UMat *)puVar16[1];
      pUVar15 = (UMat *)*puVar16;
      for (pUVar12 = pUVar15; pUVar12 != pUVar13; pUVar12 = pUVar12 + 0x50) {
        UMat::~UMat(pUVar12);
      }
    }
    puVar16[1] = pUVar15;
    return;
  }
  local_10 = 0;
  create(this,&local_10,*(uint *)this & 0xfff,0xffffffff,0);
  return;
}


==================================================================

### FUNC 00341fa8 (868 bytes) name=copyTo

/* cv::_InputArray::copyTo(cv::_OutputArray const&) const */

void __thiscall cv::_InputArray::copyTo(_InputArray *this,_OutputArray *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  undefined8 uVar6;
  Mat *pMVar7;
  undefined8 *puVar8;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar4 = kind(this);
  if (uVar4 == 0) {
    _OutputArray::release(param_1);
    return;
  }
  if ((((uVar4 & 0xfffdffff) == 0x10000) || (uVar4 == 0x20000)) || (uVar4 == 0xc0000)) {
    iVar5 = kind(this);
    if (iVar5 == 0x10000) {
      pMVar7 = *(Mat **)(this + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar4 = *(uint *)pMVar7;
      local_50 = *(undefined8 *)(pMVar7 + 0x10);
      local_60 = *(ulong *)pMVar7;
      local_58 = *(undefined8 *)(pMVar7 + 8);
      local_48 = *(undefined8 *)(pMVar7 + 0x18);
      local_40 = *(undefined8 *)(pMVar7 + 0x20);
      local_38 = *(undefined8 *)(pMVar7 + 0x28);
      local_30 = *(undefined8 *)(pMVar7 + 0x30);
      local_28 = *(long *)(pMVar7 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar7 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar7 + 0x48);
        local_8 = (*(undefined8 **)(pMVar7 + 0x48))[1];
      }
      else {
        local_60 = (ulong)uVar4;
        Mat::copySize((Mat *)&local_60,pMVar7);
      }
    }
    else {
      getMat_((int)this);
    }
    Mat::copyTo((Mat *)&local_60,param_1);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar5 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar5 = 0;
      puVar8 = local_20;
      do {
        *(undefined4 *)puVar8 = 0;
        iVar5 = iVar5 + 1;
        puVar8 = (undefined8 *)((long)puVar8 + 4);
      } while (iVar5 < local_60._4_4_);
    }
  }
  else {
    if (uVar4 != 0x60000) {
      if (uVar4 == 0xa0000) {
        UMat::copyTo(*(UMat **)(this + 8),param_1);
        return;
      }
      local_60 = 0;
      local_58 = 0;
      String::allocate((String *)&local_60,0);
      error(-0xd5,(String *)&local_60,"void cv::_InputArray::copyTo(const cv::_OutputArray&) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x82e);
      String::deallocate((String *)&local_60);
      return;
    }
    puVar8 = *(undefined8 **)(this + 8);
    iVar5 = kind((_InputArray *)param_1);
    if (iVar5 == 0x10000) {
      uVar6 = _OutputArray::getMatRef(param_1,-1);
      (**(code **)(*(long *)*puVar8 + 0x18))((long *)*puVar8,puVar8,uVar6,0xffffffff);
      return;
    }
    local_18 = &local_10;
    local_20 = &local_58;
    local_60 = DAT_00342390;
    local_58 = 0;
    local_50 = 0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    local_8 = 0;
    local_10 = 0;
    (**(code **)(*(long *)*puVar8 + 0x18))((long *)*puVar8,puVar8,(Mat *)&local_60,0xffffffff);
    Mat::copyTo((Mat *)&local_60,param_1);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar5 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    if (0 < local_60._4_4_) {
      iVar5 = 0;
      puVar8 = local_20;
      do {
        *(undefined4 *)puVar8 = 0;
        iVar5 = iVar5 + 1;
        puVar8 = (undefined8 *)((long)puVar8 + 4);
      } while (iVar5 < local_60._4_4_);
    }
  }
  local_28 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  local_50 = 0;
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00342398 (596 bytes) name=copyTo

/* cv::_InputArray::copyTo(cv::_OutputArray const&, cv::_InputArray const&) const */

void __thiscall
cv::_InputArray::copyTo(_InputArray *this,_OutputArray *param_1,_InputArray *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  int iVar5;
  undefined8 *puVar6;
  Mat *pMVar7;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar4 = kind(this);
  if (uVar4 == 0) {
    _OutputArray::release(param_1);
    return;
  }
  if ((((uVar4 & 0xfffdffff) == 0x10000) || (uVar4 == 0x20000)) || (uVar4 == 0xc0000)) {
    iVar5 = kind(this);
    if (iVar5 == 0x10000) {
      pMVar7 = *(Mat **)(this + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      uVar4 = *(uint *)pMVar7;
      local_50 = *(undefined8 *)(pMVar7 + 0x10);
      local_60 = *(ulong *)pMVar7;
      local_58 = *(undefined8 *)(pMVar7 + 8);
      local_48 = *(undefined8 *)(pMVar7 + 0x18);
      local_40 = *(undefined8 *)(pMVar7 + 0x20);
      local_38 = *(undefined8 *)(pMVar7 + 0x28);
      local_30 = *(undefined8 *)(pMVar7 + 0x30);
      local_28 = *(long *)(pMVar7 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar1 = (int *)(local_28 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = *piVar1 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar7 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar7 + 0x48);
        local_8 = (*(undefined8 **)(pMVar7 + 0x48))[1];
      }
      else {
                    /* catch() { ... } // from try @ 00340fe0 with catch @ 003425cc */
        local_60 = (ulong)uVar4;
        Mat::copySize((Mat *)&local_60,pMVar7);
      }
    }
    else {
      getMat_((int)this);
    }
    Mat::copyTo((Mat *)&local_60,param_1,param_2);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar5 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar5 = 0;
      puVar6 = local_20;
      do {
        *(undefined4 *)puVar6 = 0;
        iVar5 = iVar5 + 1;
        puVar6 = (undefined8 *)((long)puVar6 + 4);
      } while (iVar5 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
  }
  else {
    if (uVar4 != 0xa0000) {
      local_60 = 0;
      local_58 = 0;
      String::allocate((String *)&local_60,0);
      error(-0xd5,(String *)&local_60,
            "void cv::_InputArray::copyTo(const cv::_OutputArray&, const cv::_InputArray&) const",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x83f);
      String::deallocate((String *)&local_60);
      return;
    }
                    /* try { // try from 003425dc to 004425df has its CatchHandler @ 00340eec */
    UMat::copyTo(*(UMat **)(this + 8),param_1,param_2);
  }
  return;
}


==================================================================

### FUNC 00342624 (184 bytes) name=clear

/* cv::_OutputArray::clear() const */

void __thiscall cv::_OutputArray::clear(_OutputArray *this)

{
  undefined4 uVar1;
  char cVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = _InputArray::kind((_InputArray *)this);
  if (iVar3 != 0x10000) {
    release(this);
    return;
  }
  cVar2 = fixedSize(this);
  if (cVar2 != '\0') {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0xc);
    uVar1 = s__fixedType_______fixedSize___0046b9c0._24_4_;
    *(undefined8 *)pcVar4 = s__fixedType_______fixedSize___0046b9c0._16_8_;
    *(undefined4 *)(pcVar4 + 8) = uVar1;
    error(-0xd7,(String *)&local_10,"void cv::_OutputArray::clear() const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xa13);
    String::deallocate((String *)&local_10);
  }
  Mat::resize(*(Mat **)(this + 8),0);
  return;
}


==================================================================

### FUNC 003426f0 (976 bytes) name=sort

/* cv::sort(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::sort(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  char *pcVar10;
  Mat *pMVar11;
  int *piVar12;
  undefined4 *puVar13;
  code *pcVar14;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  int local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar9 = _InputArray::kind(param_1);
  if (iVar9 == 0x10000) {
    pMVar11 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar11;
    local_bc = *(int *)(pMVar11 + 4);
    local_b8 = *(int *)(pMVar11 + 8);
    local_b4 = *(undefined4 *)(pMVar11 + 0xc);
    local_b0 = *(undefined8 *)(pMVar11 + 0x10);
    local_a8 = *(undefined8 *)(pMVar11 + 0x18);
    local_a0 = *(undefined8 *)(pMVar11 + 0x20);
    local_98 = *(undefined8 *)(pMVar11 + 0x28);
    local_90 = *(undefined8 *)(pMVar11 + 0x30);
    local_88 = *(long *)(pMVar11 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar12 = (int *)(local_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar11 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar11 + 0x48);
      local_68 = (*(undefined8 **)(pMVar11 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar11);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  pcVar14 = (code *)(&PTR_FUN_004f6850)[(int)(local_c0 & 7)];
  if (((2 < local_bc) || (pcVar14 == (code *)0x0)) || ((local_c0 >> 3 & 0x1ff) != 0)) {
    local_d0 = 0;
    local_c8 = 0;
    pcVar10 = (char *)String::allocate((String *)&local_d0,0x31);
    uVar8 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    uVar7 = s_src_dims_<__2_&&_src_channels()___0046bcc0._32_8_;
    uVar6 = s_src_dims_<__2_&&_src_channels()___0046bcc0._24_8_;
    uVar5 = s_src_dims_<__2_&&_src_channels()___0046bcc0._16_8_;
    uVar4 = s_src_dims_<__2_&&_src_channels()___0046bcc0._8_8_;
    uVar3 = s_src_dims_<__2_&&_src_channels()___0046bcc0._0_8_;
    pcVar10[0x30] = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar10 = uVar3;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    *(undefined8 *)(pcVar10 + 0x10) = uVar5;
    *(undefined8 *)(pcVar10 + 0x18) = uVar6;
    *(undefined8 *)(pcVar10 + 0x20) = uVar7;
    *(undefined8 *)(pcVar10 + 0x28) = uVar8;
    error(-0xd7,(String *)&local_d0,"void cv::sort(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xfd0);
    String::deallocate((String *)&local_d0);
  }
  local_5c = *local_80;
  local_60 = local_80[1];
  _OutputArray::create(param_2,(Mat *)&local_60,local_c0 & 0xfff,0xffffffff,0,0);
  iVar9 = _InputArray::kind((_InputArray *)param_2);
  if (iVar9 == 0x10000) {
    pMVar11 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(int *)pMVar11;
    local_50 = *(undefined8 *)(pMVar11 + 0x10);
    local_5c = *(int *)(pMVar11 + 4);
    local_58 = *(undefined4 *)(pMVar11 + 8);
    local_54 = *(undefined4 *)(pMVar11 + 0xc);
    local_48 = *(undefined8 *)(pMVar11 + 0x18);
    local_40 = *(undefined8 *)(pMVar11 + 0x20);
    local_38 = *(undefined8 *)(pMVar11 + 0x28);
    local_30 = *(undefined8 *)(pMVar11 + 0x30);
    local_28 = *(long *)(pMVar11 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar12 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
        if (bVar2) {
          *piVar12 = *piVar12 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar11 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar11 + 0x48);
      local_8 = (*(undefined8 **)(pMVar11 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar11);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  (*pcVar14)((Mat *)&local_c0,(Mat *)&local_60,param_3);
  if (local_28 != 0) {
    piVar12 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar9 = 0;
    puVar13 = local_20;
    do {
      *puVar13 = 0;
      iVar9 = iVar9 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar9 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar12 = (int *)(local_88 + 0x14);
    do {
      iVar9 = *piVar12;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar12,0x10);
      if (bVar2) {
        *piVar12 = iVar9 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar9 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar9 = 0;
    piVar12 = local_80;
    do {
      *piVar12 = 0;
      iVar9 = iVar9 + 1;
      piVar12 = piVar12 + 1;
    } while (iVar9 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00342b24 (1656 bytes) name=sortIdx

/* cv::sortIdx(cv::_InputArray const&, cv::_OutputArray const&, int) */

void cv::sortIdx(_InputArray *param_1,_OutputArray *param_2,int param_3)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  int iVar10;
  char *pcVar11;
  Mat *pMVar12;
  undefined4 *puVar13;
  int *piVar14;
  code *pcVar15;
  undefined8 local_130;
  undefined8 local_128;
  int local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  long local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  int local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  undefined4 local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar12;
    local_5c = *(int *)(pMVar12 + 4);
    local_58 = *(int *)(pMVar12 + 8);
    local_54 = *(undefined4 *)(pMVar12 + 0xc);
    local_50 = *(long *)(pMVar12 + 0x10);
    local_48 = *(undefined8 *)(pMVar12 + 0x18);
    local_40 = *(undefined8 *)(pMVar12 + 0x20);
    local_38 = *(undefined8 *)(pMVar12 + 0x28);
    local_30 = *(undefined8 *)(pMVar12 + 0x30);
    local_28 = *(long *)(pMVar12 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar2) {
          *piVar14 = *piVar14 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar12 + 0x48);
      local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  pcVar15 = (code *)(&PTR_FUN_004f6500)[(int)(local_60 & 7)];
  if (((2 < local_5c) || (pcVar15 == (code *)0x0)) || ((local_60 >> 3 & 0x1ff) != 0)) {
    local_130 = 0;
    local_128 = 0;
    pcVar11 = (char *)String::allocate((String *)&local_130,0x31);
    uVar8 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    uVar7 = s_src_dims_<__2_&&_src_channels()___0046bcc0._32_8_;
    uVar6 = s_src_dims_<__2_&&_src_channels()___0046bcc0._24_8_;
    uVar5 = s_src_dims_<__2_&&_src_channels()___0046bcc0._16_8_;
    uVar4 = s_src_dims_<__2_&&_src_channels()___0046bcc0._8_8_;
    uVar3 = s_src_dims_<__2_&&_src_channels()___0046bcc0._0_8_;
    pcVar11[0x30] = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar11 = uVar3;
    *(undefined8 *)(pcVar11 + 8) = uVar4;
    *(undefined8 *)(pcVar11 + 0x10) = uVar5;
    *(undefined8 *)(pcVar11 + 0x18) = uVar6;
    *(undefined8 *)(pcVar11 + 0x20) = uVar7;
    *(undefined8 *)(pcVar11 + 0x28) = uVar8;
    error(-0xd7,(String *)&local_130,"void cv::sortIdx(cv::InputArray, cv::OutputArray, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xfdf);
    String::deallocate((String *)&local_130);
  }
  iVar10 = _InputArray::kind((_InputArray *)param_2);
  if (iVar10 == 0x10000) {
    pMVar12 = *(Mat **)(param_2 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(int *)pMVar12;
    local_11c = *(int *)(pMVar12 + 4);
    local_118 = *(undefined4 *)(pMVar12 + 8);
    local_114 = *(undefined4 *)(pMVar12 + 0xc);
    local_110 = *(long *)(pMVar12 + 0x10);
    uStack_108 = *(undefined8 *)(pMVar12 + 0x18);
    local_100 = *(undefined8 *)(pMVar12 + 0x20);
    uStack_f8 = *(undefined8 *)(pMVar12 + 0x28);
    local_f0 = *(undefined8 *)(pMVar12 + 0x30);
    lStack_e8 = *(long *)(pMVar12 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (lStack_e8 != 0) {
      piVar14 = (int *)(lStack_e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar2) {
          *piVar14 = *piVar14 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (2 < *(int *)(pMVar12 + 4)) {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar12);
      goto LAB_00342c20;
    }
    local_d0 = **(undefined8 **)(pMVar12 + 0x48);
    local_c8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    if (local_110 == local_50) goto LAB_00343154;
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_00342c20:
    if (local_110 == local_50) {
LAB_00343154:
      _OutputArray::release(param_2);
    }
  }
  local_bc = *local_20;
  local_c0 = local_20[1];
  _OutputArray::create(param_2,(Mat *)&local_c0,4,0xffffffff,0,0);
  iVar10 = _InputArray::kind((_InputArray *)param_2);
  if (iVar10 == 0x10000) {
    pMVar12 = *(Mat **)(param_2 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(int *)pMVar12;
    local_b0 = *(undefined8 *)(pMVar12 + 0x10);
    local_bc = *(int *)(pMVar12 + 4);
    local_b8 = *(undefined4 *)(pMVar12 + 8);
    local_b4 = *(undefined4 *)(pMVar12 + 0xc);
    uStack_a8 = *(undefined8 *)(pMVar12 + 0x18);
    local_a0 = *(undefined8 *)(pMVar12 + 0x20);
    uStack_98 = *(undefined8 *)(pMVar12 + 0x28);
    local_90 = *(undefined8 *)(pMVar12 + 0x30);
    lStack_88 = *(long *)(pMVar12 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (lStack_88 != 0) {
      piVar14 = (int *)(lStack_88 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar2) {
          *piVar14 = *piVar14 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar12 + 0x48);
      local_68 = (*(undefined8 **)(pMVar12 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar12);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (lStack_88 != 0) {
    piVar14 = (int *)(lStack_88 + 0x14);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = *piVar14 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar14 = (int *)(lStack_e8 + 0x14);
    do {
      iVar10 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  puVar9 = local_78;
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_00342d10:
    local_120 = local_c0;
    if (local_bc < 3) {
      local_118 = local_b8;
      local_114 = local_b4;
      local_11c = local_bc;
      *local_d8 = *local_78;
      local_d8[1] = puVar9[1];
      goto LAB_00342d28;
    }
  }
  else {
    iVar10 = 0;
    puVar13 = local_e0;
    do {
      *puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar10 < local_11c);
    if (local_11c < 3) goto LAB_00342d10;
  }
  local_120 = local_c0;
  Mat::copySize((Mat *)&local_120,(Mat *)&local_c0);
LAB_00342d28:
  uStack_f8 = uStack_98;
  local_100 = local_a0;
  lStack_e8 = lStack_88;
  local_f0 = local_90;
  uStack_108 = uStack_a8;
  local_110 = local_b0;
  if (lStack_88 != 0) {
    piVar14 = (int *)(lStack_88 + 0x14);
    do {
      iVar10 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar10 = 0;
    puVar13 = local_80;
    do {
      *puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar10 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  (*pcVar15)((Mat *)&local_60,(Mat *)&local_120,param_3);
  if (lStack_e8 != 0) {
    piVar14 = (int *)(lStack_e8 + 0x14);
    do {
      iVar10 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    puVar13 = local_e0;
    do {
      *puVar13 = 0;
      iVar10 = iVar10 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar10 = *piVar14;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar2) {
        *piVar14 = iVar10 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar10 = 0;
    piVar14 = local_20;
    do {
      *piVar14 = 0;
      iVar10 = iVar10 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar10 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00343228 (1912 bytes) name=cvSort

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void cvSort(cv *param_1,cv *param_2,cv *param_3,int param_4,undefined8 param_5,AutoBuffer *param_6)

{
  char cVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  bool bVar10;
  char *pcVar11;
  undefined8 *puVar12;
  int *piVar13;
  int iVar14;
  undefined4 *puVar15;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  undefined8 uStack_118;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  int *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  if (param_3 == (cv *)0x0) goto LAB_00343554;
  cv::cvarrToMat(param_3,(void *)0x0,true,false,0,param_6);
  local_c0 = CONCAT44(iStack_11c,local_120);
  local_78 = &local_70;
  local_80 = (int *)&uStack_b8;
  uStack_b8 = uStack_118;
  uVar2 = uStack_b8;
  local_a8 = local_108;
  local_a0 = local_100;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  uStack_68 = 0;
  local_70 = 0;
  if (local_e8 == 0) {
    if (iStack_11c < 3) goto LAB_00343304;
LAB_003438ec:
    local_c0 = (ulong)local_120;
    cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    if ((local_20[1] != local_80[1]) || (*local_20 != *local_80)) goto LAB_00343344;
LAB_00343924:
    if ((((uint)local_c0 & 0xfff) != 4) || (local_50 == local_b0)) goto LAB_00343344;
  }
  else {
    piVar13 = (int *)(local_e8 + 0x14);
    do {
      cVar1 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar10) {
        *piVar13 = *piVar13 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (2 < iStack_11c) goto LAB_003438ec;
LAB_00343304:
    local_70 = *local_d8;
    param_6 = (AutoBuffer *)(ulong)(uint)local_20[1];
    uStack_b8._4_4_ = (uint)((ulong)uStack_118 >> 0x20);
    uStack_68 = local_d8[1];
    bVar10 = local_20[1] == uStack_b8._4_4_;
    uStack_b8 = uVar2;
    if ((bVar10) &&
       (uStack_b8._0_4_ = (int)uStack_118, bVar10 = *local_20 == (int)uStack_b8, bVar10))
    goto LAB_00343924;
LAB_00343344:
    local_170 = 0;
    local_168 = 0;
    param_6 = (AutoBuffer *)cv::String::allocate((String *)&local_170,0x48);
    uVar7 = DAT_0046bd20;
    uVar6 = DAT_0046bd18;
    uVar5 = DAT_0046bd10;
    uVar4 = _LAB_0046bd08;
    uVar3 = _DAT_0046bd00;
    uVar2 = DAT_0046bcf8;
    *(undefined8 *)(param_6 + 0x40) = s_idx_data_0046bd38._0_8_;
    uVar9 = DAT_0046bd30;
    uVar8 = DAT_0046bd28;
    *(undefined8 *)param_6 = uVar2;
    *(undefined8 *)(param_6 + 8) = uVar3;
    *(undefined8 *)(param_6 + 0x10) = uVar4;
    *(undefined8 *)(param_6 + 0x18) = uVar5;
    *(undefined8 *)(param_6 + 0x20) = uVar6;
    *(undefined8 *)(param_6 + 0x28) = uVar7;
    *(undefined8 *)(param_6 + 0x30) = uVar8;
    *(undefined8 *)(param_6 + 0x38) = uVar9;
    cv::error(-0xd7,(String *)&local_170,"void cvSort(const CvArr*, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x106d);
    cv::String::deallocate((String *)&local_170);
  }
  local_150 = CONCAT44(local_150._4_4_,0x1010000);
  local_128 = 0;
  local_124 = 0;
  local_138 = CONCAT44(local_138._4_4_,0x2010000);
  local_140 = 0;
  local_13c = 0;
  local_148 = (Mat *)&local_60;
  local_130 = (Mat *)&local_c0;
  cv::sortIdx((_InputArray *)&local_150,(_OutputArray *)&local_138,param_4);
  if (local_110 != local_b0) {
    local_160 = 0;
    local_158 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_160,0x15);
    cVar1 = s_idx0_data____idx_data_0046bd48[0x14];
    uVar3 = s_idx0_data____idx_data_0046bd48._8_8_;
    uVar2 = s_idx0_data____idx_data_0046bd48._0_8_;
    param_6 = (AutoBuffer *)(ulong)(byte)s_idx0_data____idx_data_0046bd48[0x14];
    *(undefined4 *)(pcVar11 + 0x10) = s_idx0_data____idx_data_0046bd48._16_4_;
    pcVar11[0x14] = cVar1;
    *(undefined8 *)pcVar11 = uVar2;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    cv::error(-0xd7,(String *)&local_160,"void cvSort(const CvArr*, CvArr*, CvArr*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x106f);
    cv::String::deallocate((String *)&local_160);
  }
  if (local_88 != 0) {
    piVar13 = (int *)(local_88 + 0x14);
    do {
      iVar14 = *piVar13;
      cVar1 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar10) {
        *piVar13 = iVar14 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar14 = 0;
    piVar13 = local_80;
    do {
      *piVar13 = 0;
      iVar14 = iVar14 + 1;
      piVar13 = piVar13 + 1;
    } while (iVar14 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    cv::fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar13 = (int *)(local_e8 + 0x14);
    do {
      iVar14 = *piVar13;
      cVar1 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar10) {
        *piVar13 = iVar14 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar14 = 0;
    puVar15 = local_e0;
    do {
      *puVar15 = 0;
      iVar14 = iVar14 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar14 < iStack_11c);
  }
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
LAB_00343554:
  if (param_2 != (cv *)0x0) {
    cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
    local_c0 = CONCAT44(iStack_11c,local_120);
    local_78 = &local_70;
    local_80 = (int *)&uStack_b8;
    uStack_b8 = uStack_118;
    local_a8 = local_108;
    local_a0 = local_100;
    local_98 = local_f8;
    local_b0 = local_110;
    local_90 = local_f0;
    local_88 = local_e8;
    uStack_68 = 0;
    local_70 = 0;
    if (local_e8 != 0) {
      piVar13 = (int *)(local_e8 + 0x14);
      do {
        cVar1 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar10) {
          *piVar13 = *piVar13 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iStack_11c < 3) {
      local_70 = *local_d8;
      uStack_68 = local_d8[1];
    }
    else {
      local_c0 = (ulong)local_120;
      cv::Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    }
    if (((*local_20 != *local_80) || (local_80[1] != local_20[1])) ||
       ((local_60 & 0xfff) != ((uint)local_c0 & 0xfff))) {
      local_150 = 0;
      local_148 = (Mat *)0x0;
      puVar12 = (undefined8 *)cv::String::allocate((String *)&local_150,0x34);
      uVar7 = DAT_0045bf30;
      uVar6 = _LAB_0045bf28;
      uVar5 = _DAT_0045bf20;
      uVar4 = DAT_0045bf18;
      uVar3 = DAT_0045bf10;
      uVar2 = DAT_0045bf08;
      *(undefined4 *)(puVar12 + 6) = DAT_0045bf38;
      *puVar12 = uVar2;
      puVar12[1] = uVar3;
      puVar12[2] = uVar4;
      puVar12[3] = uVar5;
      puVar12[4] = uVar6;
      puVar12[5] = uVar7;
      cv::error(-0xd7,(String *)&local_150,"void cvSort(const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1075);
      cv::String::deallocate((String *)&local_150);
    }
    local_150 = CONCAT44(local_150._4_4_,0x1010000);
    local_128 = 0;
    local_124 = 0;
    local_138 = CONCAT44(local_138._4_4_,0x2010000);
    local_140 = 0;
    local_13c = 0;
    local_148 = (Mat *)&local_60;
    local_130 = (Mat *)&local_c0;
    cv::sort((_InputArray *)&local_150,(_OutputArray *)&local_138,param_4);
    if (local_110 != local_b0) {
      local_138 = 0;
      local_130 = (Mat *)0x0;
      pcVar11 = (char *)cv::String::allocate((String *)&local_138,0x15);
      cVar1 = s_dst0_data____dst_data_00469338[0x14];
      uVar3 = s_dst0_data____dst_data_00469338._8_8_;
      uVar2 = s_dst0_data____dst_data_00469338._0_8_;
      *(undefined4 *)(pcVar11 + 0x10) = s_dst0_data____dst_data_00469338._16_4_;
      pcVar11[0x14] = cVar1;
      *(undefined8 *)pcVar11 = uVar2;
      *(undefined8 *)(pcVar11 + 8) = uVar3;
      cv::error(-0xd7,(String *)&local_138,"void cvSort(const CvArr*, CvArr*, CvArr*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1077);
      cv::String::deallocate((String *)&local_138);
    }
    if (local_88 != 0) {
      piVar13 = (int *)(local_88 + 0x14);
      do {
        iVar14 = *piVar13;
        cVar1 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar10) {
          *piVar13 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar14 == 1) {
        cv::Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar14 = 0;
      piVar13 = local_80;
      do {
        *piVar13 = 0;
        iVar14 = iVar14 + 1;
        piVar13 = piVar13 + 1;
      } while (iVar14 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      cv::fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar13 = (int *)(local_e8 + 0x14);
      do {
        iVar14 = *piVar13;
        cVar1 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar10) {
          *piVar13 = iVar14 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar14 == 1) {
        cv::Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = 0;
    local_f8 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < iStack_11c) {
      iVar14 = 0;
      do {
        *local_e0 = 0;
        iVar14 = iVar14 + 1;
        local_e0 = local_e0 + 1;
      } while (iVar14 < iStack_11c);
    }
    if (local_d8 != auStack_d0) {
      cv::fastFree(local_d8);
    }
  }
  if (local_28 != 0) {
    piVar13 = (int *)(local_28 + 0x14);
    do {
      iVar14 = *piVar13;
      cVar1 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar13,0x10);
      if (bVar10) {
        *piVar13 = iVar14 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar14 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar14 = 0;
    do {
      *local_20 = 0;
      iVar14 = iVar14 + 1;
      local_20 = local_20 + 1;
    } while (iVar14 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00343a98 (2172 bytes) name=create

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::_OutputArray::create(int, int, int, int, bool, int) const */

void __thiscall
cv::_OutputArray::create
          (_OutputArray *this,int param_1,int param_2,int param_3,int param_4,bool param_5,
          int param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  char cVar11;
  int iVar12;
  uint *puVar13;
  Mat *this_00;
  UMat *pUVar14;
  undefined8 *puVar15;
  long lVar16;
  char *pcVar17;
  int local_10 [4];
  
  iVar12 = _InputArray::kind((_InputArray *)this);
  if ((iVar12 == 0x10000) && (param_4 < 0)) {
    if (param_5 < (param_6 == 0)) {
      cVar11 = fixedSize(this);
      if ((cVar11 != '\0') &&
         ((param_2 != (*(int **)(*(long *)(this + 8) + 0x40))[1] ||
          (param_1 != **(int **)(*(long *)(this + 8) + 0x40))))) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        puVar15 = (undefined8 *)String::allocate((String *)local_10,0x44);
        uVar9 = DAT_0046bd98;
        uVar8 = DAT_0046bd90;
        uVar7 = DAT_0046bd88;
        uVar6 = DAT_0046bd80;
        uVar4 = DAT_0046bd78;
        uVar3 = DAT_0046bd70;
        uVar2 = DAT_0046bd68;
        uVar1 = DAT_0046bd60;
        *(undefined4 *)(puVar15 + 8) = _LAB_0046bda0;
        *puVar15 = uVar1;
        puVar15[1] = uVar2;
        puVar15[2] = uVar3;
        puVar15[3] = uVar4;
        puVar15[4] = uVar6;
        puVar15[5] = uVar7;
        puVar15[6] = uVar8;
        puVar15[7] = uVar9;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x87b);
        String::deallocate((String *)local_10);
      }
      cVar11 = fixedType(this);
      if (cVar11 != '\0') {
        this_00 = *(Mat **)(this + 8);
        if ((*(uint *)this_00 & 0xfff) == param_3) goto LAB_00343f70;
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar17 = (char *)String::allocate((String *)local_10,0x2c);
        uVar5 = s__fixedType________Mat__obj__>typ_0046bad8._40_4_;
        uVar4 = s__fixedType________Mat__obj__>typ_0046bad8._24_8_;
        uVar3 = s__fixedType________Mat__obj__>typ_0046bad8._16_8_;
        uVar2 = s__fixedType________Mat__obj__>typ_0046bad8._8_8_;
        uVar1 = s__fixedType________Mat__obj__>typ_0046bad8._0_8_;
        *(undefined8 *)(pcVar17 + 0x20) = s__fixedType________Mat__obj__>typ_0046bad8._32_8_;
        *(undefined4 *)(pcVar17 + 0x28) = uVar5;
        *(undefined8 *)pcVar17 = uVar1;
        *(undefined8 *)(pcVar17 + 8) = uVar2;
        *(undefined8 *)(pcVar17 + 0x10) = uVar3;
        *(undefined8 *)(pcVar17 + 0x18) = uVar4;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x87c);
        String::deallocate((String *)local_10);
      }
      this_00 = *(Mat **)(this + 8);
LAB_00343f70:
      if ((((*(int *)(this_00 + 4) < 3) && (param_1 == *(int *)(this_00 + 8))) &&
          (param_2 == *(int *)(this_00 + 0xc))) &&
         (((param_3 & 0xfffU) == (*(uint *)this_00 & 0xfff) && (*(long *)(this_00 + 0x10) != 0)))) {
        return;
      }
      local_10[1] = param_2;
      local_10[0] = param_1;
      Mat::create(this_00,2,local_10,param_3 & 0xfffU);
      return;
    }
LAB_00343af0:
    if (iVar12 == 0x70000) {
      if ((param_4 < 0) && (param_5 < (param_6 == 0))) {
        cVar11 = fixedSize(this);
        if ((cVar11 != '\0') &&
           ((param_2 != *(int *)(*(long *)(this + 8) + 0x14) ||
            (param_1 != *(int *)(*(long *)(this + 8) + 0x10))))) {
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          puVar15 = (undefined8 *)String::allocate((String *)local_10,0x41);
          uVar9 = DAT_0046be70;
          uVar8 = _DAT_0046be68;
          uVar7 = DAT_0046be60;
          uVar6 = DAT_0046be58;
          uVar4 = DAT_0046be50;
          uVar3 = DAT_0046be48;
          uVar2 = _LAB_0046be40;
          uVar1 = DAT_0046be38;
          *(undefined1 *)(puVar15 + 8) = DAT_0046be78;
          *puVar15 = uVar1;
          puVar15[1] = uVar2;
          puVar15[2] = uVar3;
          puVar15[3] = uVar4;
          puVar15[4] = uVar6;
          puVar15[5] = uVar7;
          puVar15[6] = uVar8;
          puVar15[7] = uVar9;
          error(-0xd7,(String *)local_10,
                "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x890);
          String::deallocate((String *)local_10);
        }
        cVar11 = fixedType(this);
        if (cVar11 != '\0') {
          lVar16 = *(long *)(this + 8);
          if (param_3 == *(int *)(lVar16 + 0x18)) goto LAB_00344268;
          local_10[0] = 0;
          local_10[1] = 0;
          local_10[2] = 0;
          local_10[3] = 0;
          pcVar17 = (char *)String::allocate((String *)local_10,0x34);
          uVar7 = s__fixedType________ogl__Buffer__o_0046bb70._40_8_;
          uVar6 = s__fixedType________ogl__Buffer__o_0046bb70._32_8_;
          uVar4 = s__fixedType________ogl__Buffer__o_0046bb70._24_8_;
          uVar3 = s__fixedType________ogl__Buffer__o_0046bb70._16_8_;
          uVar2 = s__fixedType________ogl__Buffer__o_0046bb70._8_8_;
          uVar1 = s__fixedType________ogl__Buffer__o_0046bb70._0_8_;
          *(undefined4 *)(pcVar17 + 0x30) = s__fixedType________ogl__Buffer__o_0046bb70._48_4_;
          *(undefined8 *)pcVar17 = uVar1;
          *(undefined8 *)(pcVar17 + 8) = uVar2;
          *(undefined8 *)(pcVar17 + 0x10) = uVar3;
          *(undefined8 *)(pcVar17 + 0x18) = uVar4;
          *(undefined8 *)(pcVar17 + 0x20) = uVar6;
          *(undefined8 *)(pcVar17 + 0x28) = uVar7;
          error(-0xd7,(String *)local_10,
                "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x891);
          String::deallocate((String *)local_10);
        }
        lVar16 = *(long *)(this + 8);
LAB_00344268:
        ogl::Buffer::create(lVar16,param_1,param_2,param_3,0x8892,0);
        return;
      }
      goto LAB_00343b0c;
    }
  }
  else {
    if ((iVar12 != 0xa0000) || (-1 < param_4)) {
      if ((iVar12 == 0x90000) && (param_4 < 0)) {
        if (param_5 < (param_6 == 0)) {
          cVar11 = fixedSize(this);
          if ((cVar11 != '\0') &&
             ((param_2 != *(int *)(*(long *)(this + 8) + 8) ||
              (param_1 != *(int *)(*(long *)(this + 8) + 4))))) {
            local_10[0] = 0;
            local_10[1] = 0;
            local_10[2] = 0;
            local_10[3] = 0;
            puVar15 = (undefined8 *)String::allocate((String *)local_10,0x42);
            uVar9 = DAT_0046be28;
            uVar8 = DAT_0046be20;
            uVar7 = _LAB_0046be18;
            uVar6 = _LAB_0046be10;
            uVar4 = _DAT_0046be08;
            uVar3 = DAT_0046be00;
            uVar2 = DAT_0046bdf8;
            uVar1 = DAT_0046bdf0;
            *(undefined2 *)(puVar15 + 8) = DAT_0046be30;
            *puVar15 = uVar1;
            puVar15[1] = uVar2;
            puVar15[2] = uVar3;
            puVar15[3] = uVar4;
            puVar15[4] = uVar6;
            puVar15[5] = uVar7;
            puVar15[6] = uVar8;
            puVar15[7] = uVar9;
            error(-0xd7,(String *)local_10,
                  "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x889);
            String::deallocate((String *)local_10);
          }
          cVar11 = fixedType(this);
          if (cVar11 != '\0') {
            puVar13 = *(uint **)(this + 8);
            if (param_3 == (*puVar13 & 0xfff)) goto LAB_00343e20;
            local_10[0] = 0;
            local_10[1] = 0;
            local_10[2] = 0;
            local_10[3] = 0;
            pcVar17 = (char *)String::allocate((String *)local_10,0x35);
            uVar5 = s__fixedType________cuda__GpuMat___0046bb38._48_4_;
            uVar7 = s__fixedType________cuda__GpuMat___0046bb38._40_8_;
            uVar6 = s__fixedType________cuda__GpuMat___0046bb38._32_8_;
            uVar4 = s__fixedType________cuda__GpuMat___0046bb38._24_8_;
            uVar3 = s__fixedType________cuda__GpuMat___0046bb38._16_8_;
            uVar2 = s__fixedType________cuda__GpuMat___0046bb38._8_8_;
            uVar1 = s__fixedType________cuda__GpuMat___0046bb38._0_8_;
            pcVar17[0x34] = s__fixedType________cuda__GpuMat___0046bb38[0x34];
            *(undefined4 *)(pcVar17 + 0x30) = uVar5;
            *(undefined8 *)pcVar17 = uVar1;
            *(undefined8 *)(pcVar17 + 8) = uVar2;
            *(undefined8 *)(pcVar17 + 0x10) = uVar3;
            *(undefined8 *)(pcVar17 + 0x18) = uVar4;
            *(undefined8 *)(pcVar17 + 0x20) = uVar6;
            *(undefined8 *)(pcVar17 + 0x28) = uVar7;
            error(-0xd7,(String *)local_10,
                  "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
                  "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x88a);
            String::deallocate((String *)local_10);
          }
          puVar13 = *(uint **)(this + 8);
LAB_00343e20:
          cuda::GpuMat::create((int)puVar13,param_1,param_2);
          return;
        }
        goto LAB_00343b0c;
      }
      goto LAB_00343af0;
    }
    if (param_5 < (param_6 == 0)) {
      cVar11 = fixedSize(this);
      if ((cVar11 != '\0') &&
         ((param_2 != (*(int **)(*(long *)(this + 8) + 0x30))[1] ||
          (param_1 != **(int **)(*(long *)(this + 8) + 0x30))))) {
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        puVar15 = (undefined8 *)String::allocate((String *)local_10,0x45);
        uVar5 = DAT_0046bde8;
        uVar9 = DAT_0046bde0;
        uVar8 = DAT_0046bdd8;
        uVar7 = DAT_0046bdd0;
        uVar6 = _LAB_0046bdc8;
        uVar4 = DAT_0046bdc0;
        uVar3 = DAT_0046bdb8;
        uVar2 = DAT_0046bdb0;
        uVar1 = DAT_0046bda8;
        *(undefined1 *)((long)puVar15 + 0x44) = LAB_0046bdec;
        *(undefined4 *)(puVar15 + 8) = uVar5;
        *puVar15 = uVar1;
        puVar15[1] = uVar2;
        puVar15[2] = uVar3;
        puVar15[3] = uVar4;
        puVar15[4] = uVar6;
        puVar15[5] = uVar7;
        puVar15[6] = uVar8;
        puVar15[7] = uVar9;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x882);
        String::deallocate((String *)local_10);
      }
      cVar11 = fixedType(this);
      if (cVar11 != '\0') {
        pUVar14 = *(UMat **)(this + 8);
        if (param_3 == (*(uint *)pUVar14 & 0xfff)) goto LAB_003440f0;
        local_10[0] = 0;
        local_10[1] = 0;
        local_10[2] = 0;
        local_10[3] = 0;
        pcVar17 = (char *)String::allocate((String *)local_10,0x2d);
        cVar11 = s__fixedType________UMat__obj__>ty_0046bb08[0x2c];
        uVar5 = s__fixedType________UMat__obj__>ty_0046bb08._40_4_;
        uVar4 = s__fixedType________UMat__obj__>ty_0046bb08._24_8_;
        uVar3 = s__fixedType________UMat__obj__>ty_0046bb08._16_8_;
        uVar2 = s__fixedType________UMat__obj__>ty_0046bb08._8_8_;
        uVar1 = s__fixedType________UMat__obj__>ty_0046bb08._0_8_;
        *(undefined8 *)(pcVar17 + 0x20) = s__fixedType________UMat__obj__>ty_0046bb08._32_8_;
        *(undefined4 *)(pcVar17 + 0x28) = uVar5;
        pcVar17[0x2c] = cVar11;
        *(undefined8 *)pcVar17 = uVar1;
        *(undefined8 *)(pcVar17 + 8) = uVar2;
        *(undefined8 *)(pcVar17 + 0x10) = uVar3;
        *(undefined8 *)(pcVar17 + 0x18) = uVar4;
        error(-0xd7,(String *)local_10,
              "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x883);
        String::deallocate((String *)local_10);
      }
      pUVar14 = *(UMat **)(this + 8);
LAB_003440f0:
      if ((((*(int *)(pUVar14 + 4) < 3) && (param_1 == *(int *)(pUVar14 + 8))) &&
          (param_2 == *(int *)(pUVar14 + 0xc))) &&
         (((param_3 & 0xfffU) == (*(uint *)pUVar14 & 0xfff) && (*(long *)(pUVar14 + 0x20) != 0)))) {
        return;
      }
      local_10[1] = param_2;
      local_10[0] = param_1;
      UMat::create(pUVar14,2,local_10,param_3 & 0xfffU,0);
      return;
    }
  }
  if (((-1 < param_4) || (iVar12 != 0x80000)) || ((param_6 == 0) <= param_5)) {
LAB_00343b0c:
    local_10[1] = param_2;
    local_10[0] = param_1;
    create(this,2,local_10,param_3,param_4,param_5,param_6);
    return;
  }
  cVar11 = fixedSize(this);
  if ((cVar11 != '\0') &&
     ((param_2 != *(int *)(*(long *)(this + 8) + 8) ||
      (param_1 != *(int *)(*(long *)(this + 8) + 4))))) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar17 = (char *)String::allocate((String *)local_10,0x43);
    uVar10 = s__fixedSize________cuda__HostMem__0046be80._64_2_;
    uVar9 = s__fixedSize________cuda__HostMem__0046be80._56_8_;
    uVar8 = s__fixedSize________cuda__HostMem__0046be80._48_8_;
    uVar7 = s__fixedSize________cuda__HostMem__0046be80._40_8_;
    uVar6 = s__fixedSize________cuda__HostMem__0046be80._32_8_;
    uVar4 = s__fixedSize________cuda__HostMem__0046be80._24_8_;
    uVar3 = s__fixedSize________cuda__HostMem__0046be80._16_8_;
    uVar2 = s__fixedSize________cuda__HostMem__0046be80._8_8_;
    uVar1 = s__fixedSize________cuda__HostMem__0046be80._0_8_;
    pcVar17[0x42] = s__fixedSize________cuda__HostMem__0046be80[0x42];
    *(undefined2 *)(pcVar17 + 0x40) = uVar10;
    *(undefined8 *)pcVar17 = uVar1;
    *(undefined8 *)(pcVar17 + 8) = uVar2;
    *(undefined8 *)(pcVar17 + 0x10) = uVar3;
    *(undefined8 *)(pcVar17 + 0x18) = uVar4;
    *(undefined8 *)(pcVar17 + 0x20) = uVar6;
    *(undefined8 *)(pcVar17 + 0x28) = uVar7;
    *(undefined8 *)(pcVar17 + 0x30) = uVar8;
    *(undefined8 *)(pcVar17 + 0x38) = uVar9;
    error(-0xd7,(String *)local_10,
          "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x897);
    String::deallocate((String *)local_10);
  }
  cVar11 = fixedType(this);
  if (cVar11 != '\0') {
    puVar13 = *(uint **)(this + 8);
    if (param_3 == (*puVar13 & 0xfff)) goto LAB_00343cb0;
    local_10[0] = 0;
    local_10[1] = 0;
    local_10[2] = 0;
    local_10[3] = 0;
    pcVar17 = (char *)String::allocate((String *)local_10,0x36);
    uVar5 = s__fixedType________cuda__HostMem__0046bba8._48_4_;
    uVar7 = s__fixedType________cuda__HostMem__0046bba8._40_8_;
    uVar6 = s__fixedType________cuda__HostMem__0046bba8._32_8_;
    uVar4 = s__fixedType________cuda__HostMem__0046bba8._24_8_;
    uVar3 = s__fixedType________cuda__HostMem__0046bba8._16_8_;
    uVar2 = s__fixedType________cuda__HostMem__0046bba8._8_8_;
    uVar1 = s__fixedType________cuda__HostMem__0046bba8._0_8_;
    *(undefined2 *)(pcVar17 + 0x34) = s__fixedType________cuda__HostMem__0046bba8._52_2_;
    *(undefined4 *)(pcVar17 + 0x30) = uVar5;
    *(undefined8 *)pcVar17 = uVar1;
    *(undefined8 *)(pcVar17 + 8) = uVar2;
    *(undefined8 *)(pcVar17 + 0x10) = uVar3;
    *(undefined8 *)(pcVar17 + 0x18) = uVar4;
    *(undefined8 *)(pcVar17 + 0x20) = uVar6;
    *(undefined8 *)(pcVar17 + 0x28) = uVar7;
    error(-0xd7,(String *)local_10,
          "void cv::_OutputArray::create(int, int, int, int, bool, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x898);
    String::deallocate((String *)local_10);
  }
  puVar13 = *(uint **)(this + 8);
LAB_00343cb0:
  cuda::HostMem::create((int)puVar13,param_1,param_2);
  return;
}


==================================================================

### FUNC 003443dc (988 bytes) name=hconcat

/* cv::hconcat(cv::Mat const*, unsigned long, cv::_OutputArray const&) */

void cv::hconcat(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  undefined4 *puVar15;
  Mat *pMVar16;
  int iVar17;
  ulong uVar18;
  int local_d8 [2];
  undefined8 local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((param_2 == 0) || (param_1 == (Mat *)0x0)) {
    _OutputArray::release(param_3);
    return;
  }
  uVar18 = 0;
  iVar13 = 0;
  pMVar16 = param_1 + 4;
  do {
    while (((*(int *)pMVar16 < 3 && (*(int *)(pMVar16 + 4) == *(int *)(param_1 + 8))) &&
           ((*(uint *)(pMVar16 + -4) & 0xfff) == (*(uint *)param_1 & 0xfff)))) {
      uVar18 = uVar18 + 1;
      iVar13 = iVar13 + *(int *)(pMVar16 + 8);
      pMVar16 = pMVar16 + 0x60;
      if (uVar18 == param_2) goto LAB_003444fc;
    }
    local_60 = 0;
    local_58 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_60,0x50);
    uVar12 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._72_8_;
    uVar11 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._64_8_;
    uVar10 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._56_8_;
    uVar9 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._48_8_;
    uVar8 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._40_8_;
    uVar7 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._32_8_;
    uVar6 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._24_8_;
    uVar5 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._16_8_;
    uVar4 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._8_8_;
    *(undefined8 *)pcVar14 = s_src_i__dims_<__2_&&_src[i]_rows___0046bec8._0_8_;
    *(undefined8 *)(pcVar14 + 8) = uVar4;
    *(undefined8 *)(pcVar14 + 0x10) = uVar5;
    *(undefined8 *)(pcVar14 + 0x18) = uVar6;
    *(undefined8 *)(pcVar14 + 0x20) = uVar7;
    *(undefined8 *)(pcVar14 + 0x28) = uVar8;
    *(undefined8 *)(pcVar14 + 0x30) = uVar9;
    *(undefined8 *)(pcVar14 + 0x38) = uVar10;
    *(undefined8 *)(pcVar14 + 0x40) = uVar11;
    *(undefined8 *)(pcVar14 + 0x48) = uVar12;
    error(-0xd7,(String *)&local_60,"void cv::hconcat(const cv::Mat*, size_t, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xab2);
    uVar18 = uVar18 + 1;
    String::deallocate((String *)&local_60);
    iVar13 = iVar13 + *(int *)(pMVar16 + 8);
    pMVar16 = pMVar16 + 0x60;
  } while (uVar18 != param_2);
LAB_003444fc:
  _OutputArray::create(param_3,*(int *)(param_1 + 8),iVar13,*(uint *)param_1 & 0xfff,-1,false,0);
  iVar13 = _InputArray::kind((_InputArray *)param_3);
  if (iVar13 == 0x10000) {
    pMVar16 = *(Mat **)(param_3 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar16;
    local_bc = *(int *)(pMVar16 + 4);
    local_b8 = *(undefined4 *)(pMVar16 + 8);
    local_b4 = *(undefined4 *)(pMVar16 + 0xc);
    local_b0 = *(undefined8 *)(pMVar16 + 0x10);
    local_a8 = *(undefined8 *)(pMVar16 + 0x18);
    local_a0 = *(undefined8 *)(pMVar16 + 0x20);
    local_98 = *(undefined8 *)(pMVar16 + 0x28);
    local_90 = *(undefined8 *)(pMVar16 + 0x30);
    local_88 = *(long *)(pMVar16 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar16 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar16 + 0x48);
      local_68 = (*(undefined8 **)(pMVar16 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar16);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  uVar18 = 0;
  iVar13 = 0;
  do {
    local_d8[1] = 0;
    local_d0 = (String *)CONCAT44(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc));
    local_d8[0] = iVar13;
    Mat::Mat((Mat *)&local_60,(Mat *)&local_c0,(_OutputArray *)local_d8);
    local_c8 = 0;
    local_c4 = 0;
    local_d8[0] = 0x2010000;
    local_d0 = (String *)&local_60;
    Mat::copyTo(param_1,(_OutputArray *)local_d8);
    iVar13 = iVar13 + *(int *)(param_1 + 0xc);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar17 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar17 = 0;
      puVar15 = local_20;
      do {
        *puVar15 = 0;
        iVar17 = iVar17 + 1;
        puVar15 = puVar15 + 1;
      } while (iVar17 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
    uVar18 = uVar18 + 1;
    param_1 = param_1 + 0x60;
  } while (uVar18 != param_2);
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    puVar15 = local_80;
    do {
      *puVar15 = 0;
      iVar13 = iVar13 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 0034481c (652 bytes) name=hconcat

/* cv::hconcat(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::hconcat(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat *pMVar5;
  undefined4 *puVar6;
  Mat *this;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar5;
    local_bc = *(undefined4 *)(pMVar5 + 4);
    local_b8 = *(undefined4 *)(pMVar5 + 8);
    local_b4 = *(undefined4 *)(pMVar5 + 0xc);
    local_b0 = *(undefined8 *)(pMVar5 + 0x10);
    local_a8 = *(undefined8 *)(pMVar5 + 0x18);
    local_a0 = *(undefined8 *)(pMVar5 + 0x20);
    local_98 = *(undefined8 *)(pMVar5 + 0x28);
    local_90 = *(undefined8 *)(pMVar5 + 0x30);
    local_88 = *(long *)(pMVar5 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar5 + 0x48);
      local_68 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar5;
    local_50 = *(undefined8 *)(pMVar5 + 0x10);
    local_5c = *(undefined4 *)(pMVar5 + 4);
    local_58 = *(undefined4 *)(pMVar5 + 8);
    local_54 = *(undefined4 *)(pMVar5 + 0xc);
    local_48 = *(undefined8 *)(pMVar5 + 0x18);
    local_40 = *(undefined8 *)(pMVar5 + 0x20);
    local_38 = *(undefined8 *)(pMVar5 + 0x28);
    local_30 = *(undefined8 *)(pMVar5 + 0x30);
    local_28 = *(long *)(pMVar5 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar5 + 0x48);
      local_8 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  hconcat((Mat *)&local_c0,2,param_3);
  pMVar5 = (Mat *)register0x00000008;
  do {
    this = pMVar5 + -0x60;
    if (*(long *)(pMVar5 + -0x28) != 0) {
      piVar1 = (int *)(*(long *)(pMVar5 + -0x28) + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        Mat::deallocate(this);
      }
    }
    *(undefined8 *)(pMVar5 + -0x28) = 0;
    *(undefined8 *)(pMVar5 + -0x50) = 0;
    *(undefined8 *)(pMVar5 + -0x38) = 0;
    *(undefined8 *)(pMVar5 + -0x40) = 0;
    *(undefined8 *)(pMVar5 + -0x48) = 0;
    if (0 < *(int *)(pMVar5 + -0x5c)) {
      iVar4 = 0;
      puVar6 = *(undefined4 **)(pMVar5 + -0x20);
      do {
        *puVar6 = 0;
        iVar4 = iVar4 + 1;
        puVar6 = puVar6 + 1;
      } while (iVar4 < *(int *)(pMVar5 + -0x5c));
    }
    if (*(Mat **)(pMVar5 + -0x18) != pMVar5 + -0x10) {
      fastFree(*(Mat **)(pMVar5 + -0x18));
    }
    pMVar5 = this;
  } while (this != (Mat *)&local_c0);
  return;
}


==================================================================

### FUNC 00344b14 (268 bytes) name=hconcat

/* cv::hconcat(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::hconcat(_InputArray *param_1,_OutputArray *param_2)

{
  int *piVar1;
  Mat *pMVar2;
  char cVar3;
  bool bVar4;
  Mat *pMVar5;
  Mat *pMVar6;
  int iVar7;
  undefined4 *puVar8;
  Mat *local_18;
  Mat *local_10;
  undefined8 local_8;
  
  local_18 = (Mat *)0x0;
  local_10 = (Mat *)0x0;
  local_8 = 0;
  _InputArray::getMatVector(param_1,(vector *)&local_18);
  pMVar2 = local_18;
  if (local_18 == local_10) {
    pMVar2 = (Mat *)0x0;
  }
  hconcat(pMVar2,((long)local_10 - (long)local_18 >> 5) * -0x5555555555555555,param_2);
  pMVar6 = local_10;
  pMVar5 = local_10;
  for (pMVar2 = local_18; pMVar2 != pMVar6; pMVar2 = pMVar2 + 0x60) {
    if (*(long *)(pMVar2 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(pMVar2 + 0x38) + 0x14);
      do {
        iVar7 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar7 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate(pMVar2);
      }
    }
    *(undefined8 *)(pMVar2 + 0x38) = 0;
    *(undefined8 *)(pMVar2 + 0x10) = 0;
    *(undefined8 *)(pMVar2 + 0x28) = 0;
    *(undefined8 *)(pMVar2 + 0x20) = 0;
    *(undefined8 *)(pMVar2 + 0x18) = 0;
    if (0 < *(int *)(pMVar2 + 4)) {
      iVar7 = 0;
      puVar8 = *(undefined4 **)(pMVar2 + 0x40);
      do {
        *puVar8 = 0;
        iVar7 = iVar7 + 1;
        puVar8 = puVar8 + 1;
      } while (iVar7 < *(int *)(pMVar2 + 4));
    }
    if (*(Mat **)(pMVar2 + 0x48) != pMVar2 + 0x50) {
      fastFree(*(Mat **)(pMVar2 + 0x48));
    }
    pMVar5 = local_18;
  }
  if (pMVar5 != (Mat *)0x0) {
    operator_delete(pMVar5);
  }
  return;
}


==================================================================

### FUNC 00344c50 (988 bytes) name=vconcat

/* cv::vconcat(cv::Mat const*, unsigned long, cv::_OutputArray const&) */

void cv::vconcat(Mat *param_1,ulong param_2,_OutputArray *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  undefined4 *puVar15;
  Mat *pMVar16;
  int iVar17;
  ulong uVar18;
  undefined4 local_d8;
  int local_d4;
  undefined8 local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if ((param_2 == 0) || (param_1 == (Mat *)0x0)) {
    _OutputArray::release(param_3);
    return;
  }
  uVar18 = 0;
  iVar13 = 0;
  pMVar16 = param_1 + 4;
  do {
    while (((*(int *)pMVar16 < 3 && (*(int *)(pMVar16 + 8) == *(int *)(param_1 + 0xc))) &&
           ((*(uint *)(pMVar16 + -4) & 0xfff) == (*(uint *)param_1 & 0xfff)))) {
      uVar18 = uVar18 + 1;
      iVar13 = iVar13 + *(int *)(pMVar16 + 4);
      pMVar16 = pMVar16 + 0x60;
      if (uVar18 == param_2) goto LAB_00344d70;
    }
    local_60 = 0;
    local_58 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_60,0x50);
    uVar12 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._72_8_;
    uVar11 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._64_8_;
    uVar10 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._56_8_;
    uVar9 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._48_8_;
    uVar8 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._40_8_;
    uVar7 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._32_8_;
    uVar6 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._24_8_;
    uVar5 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._16_8_;
    uVar4 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._8_8_;
    *(undefined8 *)pcVar14 = s_src_i__dims_<__2_&&_src[i]_cols___0046bf20._0_8_;
    *(undefined8 *)(pcVar14 + 8) = uVar4;
    *(undefined8 *)(pcVar14 + 0x10) = uVar5;
    *(undefined8 *)(pcVar14 + 0x18) = uVar6;
    *(undefined8 *)(pcVar14 + 0x20) = uVar7;
    *(undefined8 *)(pcVar14 + 0x28) = uVar8;
    *(undefined8 *)(pcVar14 + 0x30) = uVar9;
    *(undefined8 *)(pcVar14 + 0x38) = uVar10;
    *(undefined8 *)(pcVar14 + 0x40) = uVar11;
    *(undefined8 *)(pcVar14 + 0x48) = uVar12;
    error(-0xd7,(String *)&local_60,"void cv::vconcat(const cv::Mat*, size_t, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xada);
    uVar18 = uVar18 + 1;
    String::deallocate((String *)&local_60);
    iVar13 = iVar13 + *(int *)(pMVar16 + 4);
    pMVar16 = pMVar16 + 0x60;
  } while (uVar18 != param_2);
LAB_00344d70:
  _OutputArray::create(param_3,iVar13,*(int *)(param_1 + 0xc),*(uint *)param_1 & 0xfff,-1,false,0);
  iVar13 = _InputArray::kind((_InputArray *)param_3);
  if (iVar13 == 0x10000) {
    pMVar16 = *(Mat **)(param_3 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar16;
    local_bc = *(int *)(pMVar16 + 4);
    local_b8 = *(undefined4 *)(pMVar16 + 8);
    local_b4 = *(undefined4 *)(pMVar16 + 0xc);
    local_b0 = *(undefined8 *)(pMVar16 + 0x10);
    local_a8 = *(undefined8 *)(pMVar16 + 0x18);
    local_a0 = *(undefined8 *)(pMVar16 + 0x20);
    local_98 = *(undefined8 *)(pMVar16 + 0x28);
    local_90 = *(undefined8 *)(pMVar16 + 0x30);
    local_88 = *(long *)(pMVar16 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar16 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar16 + 0x48);
      local_68 = (*(undefined8 **)(pMVar16 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar16);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  uVar18 = 0;
  iVar13 = 0;
  do {
    local_d8 = 0;
    local_d0 = (String *)CONCAT44(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc));
    local_d4 = iVar13;
    Mat::Mat((Mat *)&local_60,(Mat *)&local_c0,(_OutputArray *)&local_d8);
    local_c8 = 0;
    local_c4 = 0;
    local_d8 = 0x2010000;
    local_d0 = (String *)&local_60;
    Mat::copyTo(param_1,(_OutputArray *)&local_d8);
    iVar13 = iVar13 + *(int *)(param_1 + 8);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar17 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar17 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar17 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar17 = 0;
      puVar15 = local_20;
      do {
        *puVar15 = 0;
        iVar17 = iVar17 + 1;
        puVar15 = puVar15 + 1;
      } while (iVar17 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
    uVar18 = uVar18 + 1;
    param_1 = param_1 + 0x60;
  } while (uVar18 != param_2);
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    puVar15 = local_80;
    do {
      *puVar15 = 0;
      iVar13 = iVar13 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00345090 (652 bytes) name=vconcat

/* cv::vconcat(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&) */

void cv::vconcat(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat *pMVar5;
  undefined4 *puVar6;
  Mat *this;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::kind(param_1);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar5;
    local_bc = *(undefined4 *)(pMVar5 + 4);
    local_b8 = *(undefined4 *)(pMVar5 + 8);
    local_b4 = *(undefined4 *)(pMVar5 + 0xc);
    local_b0 = *(undefined8 *)(pMVar5 + 0x10);
    local_a8 = *(undefined8 *)(pMVar5 + 0x18);
    local_a0 = *(undefined8 *)(pMVar5 + 0x20);
    local_98 = *(undefined8 *)(pMVar5 + 0x28);
    local_90 = *(undefined8 *)(pMVar5 + 0x30);
    local_88 = *(long *)(pMVar5 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar5 + 0x48);
      local_68 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_2 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar5;
    local_50 = *(undefined8 *)(pMVar5 + 0x10);
    local_5c = *(undefined4 *)(pMVar5 + 4);
    local_58 = *(undefined4 *)(pMVar5 + 8);
    local_54 = *(undefined4 *)(pMVar5 + 0xc);
    local_48 = *(undefined8 *)(pMVar5 + 0x18);
    local_40 = *(undefined8 *)(pMVar5 + 0x20);
    local_38 = *(undefined8 *)(pMVar5 + 0x28);
    local_30 = *(undefined8 *)(pMVar5 + 0x30);
    local_28 = *(long *)(pMVar5 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar5 + 0x48);
      local_8 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  vconcat((Mat *)&local_c0,2,param_3);
  pMVar5 = (Mat *)register0x00000008;
  do {
    this = pMVar5 + -0x60;
    if (*(long *)(pMVar5 + -0x28) != 0) {
      piVar1 = (int *)(*(long *)(pMVar5 + -0x28) + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        Mat::deallocate(this);
      }
    }
    *(undefined8 *)(pMVar5 + -0x28) = 0;
    *(undefined8 *)(pMVar5 + -0x50) = 0;
    *(undefined8 *)(pMVar5 + -0x38) = 0;
    *(undefined8 *)(pMVar5 + -0x40) = 0;
    *(undefined8 *)(pMVar5 + -0x48) = 0;
    if (0 < *(int *)(pMVar5 + -0x5c)) {
      iVar4 = 0;
      puVar6 = *(undefined4 **)(pMVar5 + -0x20);
      do {
        *puVar6 = 0;
        iVar4 = iVar4 + 1;
        puVar6 = puVar6 + 1;
      } while (iVar4 < *(int *)(pMVar5 + -0x5c));
    }
    if (*(Mat **)(pMVar5 + -0x18) != pMVar5 + -0x10) {
      fastFree(*(Mat **)(pMVar5 + -0x18));
    }
    pMVar5 = this;
  } while (this != (Mat *)&local_c0);
  return;
}


==================================================================

### FUNC 00345388 (268 bytes) name=vconcat

/* cv::vconcat(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::vconcat(_InputArray *param_1,_OutputArray *param_2)

{
  int *piVar1;
  Mat *pMVar2;
  char cVar3;
  bool bVar4;
  Mat *pMVar5;
  Mat *pMVar6;
  int iVar7;
  undefined4 *puVar8;
  Mat *local_18;
  Mat *local_10;
  undefined8 local_8;
  
  local_18 = (Mat *)0x0;
  local_10 = (Mat *)0x0;
  local_8 = 0;
  _InputArray::getMatVector(param_1,(vector *)&local_18);
  pMVar2 = local_18;
  if (local_18 == local_10) {
    pMVar2 = (Mat *)0x0;
  }
  vconcat(pMVar2,((long)local_10 - (long)local_18 >> 5) * -0x5555555555555555,param_2);
  pMVar6 = local_10;
  pMVar5 = local_10;
  for (pMVar2 = local_18; pMVar2 != pMVar6; pMVar2 = pMVar2 + 0x60) {
    if (*(long *)(pMVar2 + 0x38) != 0) {
      piVar1 = (int *)(*(long *)(pMVar2 + 0x38) + 0x14);
      do {
        iVar7 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar7 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate(pMVar2);
      }
    }
    *(undefined8 *)(pMVar2 + 0x38) = 0;
    *(undefined8 *)(pMVar2 + 0x10) = 0;
    *(undefined8 *)(pMVar2 + 0x28) = 0;
    *(undefined8 *)(pMVar2 + 0x20) = 0;
    *(undefined8 *)(pMVar2 + 0x18) = 0;
    if (0 < *(int *)(pMVar2 + 4)) {
      iVar7 = 0;
      puVar8 = *(undefined4 **)(pMVar2 + 0x40);
      do {
        *puVar8 = 0;
        iVar7 = iVar7 + 1;
        puVar8 = puVar8 + 1;
      } while (iVar7 < *(int *)(pMVar2 + 4));
    }
    if (*(Mat **)(pMVar2 + 0x48) != pMVar2 + 0x50) {
      fastFree(*(Mat **)(pMVar2 + 0x48));
    }
    pMVar5 = local_18;
  }
  if (pMVar5 != (Mat *)0x0) {
    operator_delete(pMVar5);
  }
  return;
}


==================================================================

### FUNC 003454c4 (1980 bytes) name=transpose

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::transpose(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::transpose(_InputArray *param_1,_OutputArray *param_2)

{
  uint uVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  bool bVar10;
  int iVar11;
  ulong uVar12;
  undefined8 *puVar13;
  int *piVar14;
  char *pcVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  Mat *pMVar19;
  code *pcVar20;
  undefined8 local_108;
  undefined8 local_100;
  code *local_f8;
  code *local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar12 = _InputArray::type(param_1,-1);
  iVar16 = ((uint)(uVar12 >> 3) & 0x1ff) + 1 <<
           (ulong)((uint)(0xfa50L >> (((uint)uVar12 & 7) << 1)) & 3);
  iVar11 = _InputArray::dims(param_1,-1);
  if ((iVar16 < 0x21) && (iVar11 < 3)) {
    iVar11 = _InputArray::kind(param_1);
    if (iVar11 != 0x10000) goto LAB_0034552c;
LAB_003457e8:
    pMVar19 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar19;
    local_bc = *(int *)(pMVar19 + 4);
    local_b8 = *(int *)(pMVar19 + 8);
    local_b4 = *(int *)(pMVar19 + 0xc);
    local_b0 = *(long *)(pMVar19 + 0x10);
    local_a8 = *(undefined8 *)(pMVar19 + 0x18);
    local_a0 = *(undefined8 *)(pMVar19 + 0x20);
    local_98 = *(undefined8 *)(pMVar19 + 0x28);
    local_90 = *(undefined8 *)(pMVar19 + 0x30);
    local_88 = *(long *)(pMVar19 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar10) {
          *piVar14 = *piVar14 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (2 < *(int *)(pMVar19 + 4)) {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar19);
      goto LAB_00345540;
    }
    local_70 = **(undefined8 **)(pMVar19 + 0x48);
    local_68 = (*(undefined8 **)(pMVar19 + 0x48))[1];
    if (local_b0 != 0) goto LAB_00345548;
LAB_0034589c:
    _OutputArray::release(param_2);
  }
  else {
    local_60 = 0;
    local_58 = 0;
    pcVar15 = (char *)String::allocate((String *)&local_60,0x1d);
    cVar2 = s__src_dims___<__2_&&_esz_<__32_0046bfd0[0x1c];
    uVar9 = s__src_dims___<__2_&&_esz_<__32_0046bfd0._24_4_;
    uVar4 = s__src_dims___<__2_&&_esz_<__32_0046bfd0._8_8_;
    uVar3 = s__src_dims___<__2_&&_esz_<__32_0046bfd0._0_8_;
    *(undefined8 *)(pcVar15 + 0x10) = s__src_dims___<__2_&&_esz_<__32_0046bfd0._16_8_;
    *(undefined4 *)(pcVar15 + 0x18) = uVar9;
    pcVar15[0x1c] = cVar2;
    *(undefined8 *)pcVar15 = uVar3;
    *(undefined8 *)(pcVar15 + 8) = uVar4;
    error(-0xd7,(String *)&local_60,"void cv::transpose(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc18);
    String::deallocate((String *)&local_60);
    iVar11 = _InputArray::kind(param_1);
    if (iVar11 == 0x10000) goto LAB_003457e8;
LAB_0034552c:
    _InputArray::getMat_((int)param_1);
LAB_00345540:
    if (local_b0 == 0) goto LAB_0034589c;
LAB_00345548:
    if (local_bc < 3) {
      lVar18 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar17 = 0;
      lVar18 = 1;
      do {
        piVar14 = local_80 + lVar17;
        lVar17 = lVar17 + 1;
        lVar18 = lVar18 * *piVar14;
      } while ((int)lVar17 < local_bc);
    }
    if (lVar18 == 0) goto LAB_0034589c;
    _OutputArray::create(param_2,local_b4,local_b8,local_c0 & 0xfff,-1,false,0);
    iVar11 = _InputArray::kind((_InputArray *)param_2);
    if (iVar11 == 0x10000) {
      pMVar19 = *(Mat **)(param_2 + 8);
      local_20 = (int *)&local_58;
      local_18 = &local_10;
      uVar1 = *(uint *)pMVar19;
      local_50 = *(long *)(pMVar19 + 0x10);
      local_60 = *(ulong *)pMVar19;
      local_58 = *(undefined8 *)(pMVar19 + 8);
      local_48 = *(undefined8 *)(pMVar19 + 0x18);
      local_40 = *(undefined8 *)(pMVar19 + 0x20);
      local_38 = *(undefined8 *)(pMVar19 + 0x28);
      local_30 = *(undefined8 *)(pMVar19 + 0x30);
      local_28 = *(long *)(pMVar19 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar14 = (int *)(local_28 + 0x14);
        do {
          cVar2 = '\x01';
          bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar10) {
            *piVar14 = *piVar14 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (2 < *(int *)(pMVar19 + 4)) {
        local_60 = (ulong)uVar1;
        Mat::copySize((Mat *)&local_60,pMVar19);
        goto LAB_003455c0;
      }
      local_10 = **(undefined8 **)(pMVar19 + 0x48);
      local_8 = (*(undefined8 **)(pMVar19 + 0x48))[1];
      local_58._4_4_ = (int)((ulong)local_58 >> 0x20);
      bVar10 = local_b8 == local_58._4_4_;
      if (bVar10) goto LAB_003459b8;
    }
    else {
      _InputArray::getMat_((int)param_2);
LAB_003455c0:
      bVar10 = local_b8 == local_58._4_4_;
      if (bVar10) {
LAB_003459b8:
        bVar10 = local_b4 == (int)local_58;
        if (bVar10) {
          if (local_50 == local_b0) {
            pcVar20 = *(code **)(&DAT_004f6540 + (long)iVar16 * 8);
            iVar11 = local_b8;
            iVar16 = local_b4;
            if (pcVar20 == (code *)0x0) {
              local_f8 = pcVar20;
              local_f0 = pcVar20;
              pcVar15 = (char *)String::allocate((String *)&local_f8,9);
              cVar2 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
              *(undefined8 *)pcVar15 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
              pcVar15[8] = cVar2;
              error(-0xd7,(String *)&local_f8,"void cv::transpose(cv::InputArray, cv::OutputArray)",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc79);
              String::deallocate((String *)&local_f8);
              iVar11 = local_58._4_4_;
              iVar16 = (int)local_58;
            }
            if (iVar11 != iVar16) {
              local_e8 = 0;
              local_e0 = 0;
              pcVar15 = (char *)String::allocate((String *)&local_e8,0x14);
              uVar4 = s_dst_cols____dst_rows_0046bfb8._8_8_;
              uVar3 = s_dst_cols____dst_rows_0046bfb8._0_8_;
              *(undefined4 *)(pcVar15 + 0x10) = s_dst_cols____dst_rows_0046bfb8._16_4_;
              *(undefined8 *)pcVar15 = uVar3;
              *(undefined8 *)(pcVar15 + 8) = uVar4;
              error(-0xd7,(String *)&local_e8,"void cv::transpose(cv::InputArray, cv::OutputArray)",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc7a);
              String::deallocate((String *)&local_e8);
              iVar16 = (int)local_58;
            }
            (*pcVar20)(local_50,local_10,iVar16);
          }
          else {
            pMVar19 = *(Mat **)(&DAT_004f63f0 + (long)iVar16 * 8);
            if (pMVar19 == (Mat *)0x0) {
              local_d8 = pMVar19;
              local_d0 = pMVar19;
              pcVar15 = (char *)String::allocate((String *)&local_d8,9);
              cVar2 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
              *(undefined8 *)pcVar15 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
              pcVar15[8] = cVar2;
              error(-0xd7,(String *)&local_d8,"void cv::transpose(cv::InputArray, cv::OutputArray)",
                    "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc80);
              String::deallocate((String *)&local_d8);
            }
            local_d8 = (Mat *)CONCAT44(*local_80,local_80[1]);
            (*(code *)pMVar19)(local_b0,local_70,local_50,local_10,(String *)&local_d8);
          }
          if (local_28 != 0) {
            piVar14 = (int *)(local_28 + 0x14);
            do {
              iVar16 = *piVar14;
              cVar2 = '\x01';
              bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar10) {
                *piVar14 = iVar16 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
            if (iVar16 == 1) {
              Mat::deallocate((Mat *)&local_60);
            }
          }
          local_28 = 0;
          local_50 = 0;
          local_38 = 0;
          local_40 = 0;
          local_48 = 0;
          if (0 < local_60._4_4_) {
            iVar16 = 0;
            piVar14 = local_20;
            do {
              *piVar14 = 0;
              iVar16 = iVar16 + 1;
              piVar14 = piVar14 + 1;
            } while (iVar16 < local_60._4_4_);
          }
          if (local_18 != &local_10) {
            fastFree(local_18);
          }
          if (local_88 != 0) {
            piVar14 = (int *)(local_88 + 0x14);
            do {
              iVar16 = *piVar14;
              cVar2 = '\x01';
              bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
              if (bVar10) {
                *piVar14 = iVar16 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
            if (iVar16 == 1) {
              Mat::deallocate((Mat *)&local_c0);
            }
          }
          if (0 < local_bc) {
            iVar16 = 0;
            piVar14 = local_80;
            do {
              *piVar14 = 0;
              iVar16 = iVar16 + 1;
              piVar14 = piVar14 + 1;
            } while (iVar16 < local_bc);
          }
          goto LAB_00345744;
        }
      }
    }
    if (((local_80[1] != local_20[1]) || (*local_80 != *local_20)) ||
       ((local_b4 != 1 && (local_b8 != 1)))) {
      local_100 = 0;
      local_108 = 0;
      puVar13 = (undefined8 *)String::allocate((String *)&local_108,0x3c);
      uVar9 = DAT_0046bfb0;
      uVar8 = DAT_0046bfa0;
      uVar7 = DAT_0046bf98;
      uVar6 = DAT_0046bf90;
      uVar5 = DAT_0046bf88;
      uVar4 = _LAB_0046bf80;
      uVar3 = _LAB_0046bf78;
      puVar13[6] = DAT_0046bfa8;
      *(undefined4 *)(puVar13 + 7) = uVar9;
      *puVar13 = uVar3;
      puVar13[1] = uVar4;
      puVar13[2] = uVar5;
      puVar13[3] = uVar6;
      puVar13[4] = uVar7;
      puVar13[5] = uVar8;
      error(-0xd7,(String *)&local_108,"void cv::transpose(cv::InputArray, cv::OutputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xc2a);
      String::deallocate((String *)&local_108);
    }
    local_c8 = 0;
    local_c4 = 0;
    local_d8 = (Mat *)CONCAT44(local_d8._4_4_,0x2010000);
    local_d0 = (Mat *)&local_60;
    Mat::copyTo((Mat *)&local_c0,(_OutputArray *)&local_d8);
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        iVar16 = *piVar14;
        cVar2 = '\x01';
        bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar10) {
          *piVar14 = iVar16 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar16 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_60._4_4_) {
      iVar16 = 0;
      piVar14 = local_20;
      do {
        *piVar14 = 0;
        iVar16 = iVar16 + 1;
        piVar14 = piVar14 + 1;
      } while (iVar16 < local_60._4_4_);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
  }
  if (local_88 != 0) {
    piVar14 = (int *)(local_88 + 0x14);
    do {
      iVar16 = *piVar14;
      cVar2 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar10) {
        *piVar14 = iVar16 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar16 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  if (0 < local_bc) {
    iVar16 = 0;
    piVar14 = local_80;
    do {
      *piVar14 = 0;
      iVar16 = iVar16 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar16 < local_bc);
  }
LAB_00345744:
  local_88 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  local_b0 = 0;
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00345d24 (580 bytes) name=diag

/* cv::Mat::diag(cv::Mat const&) */

void __thiscall cv::Mat::diag(Mat *this,Mat *param_1)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  char *pcVar8;
  int iVar9;
  int iVar10;
  Mat *in_x8;
  undefined4 local_90 [2];
  Mat *local_88;
  undefined4 local_80;
  undefined4 local_7c;
  int local_78;
  int local_74;
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar10 = *(int *)(this + 0xc);
  iVar9 = *(int *)(this + 8);
  if ((iVar10 != 1) && (iVar9 != 1)) {
    local_60 = 0;
    local_58 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_60,0x1a);
    uVar7 = s_d_cols____1____d_rows____1_0046bff0._24_2_;
    uVar6 = s_d_cols____1____d_rows____1_0046bff0._8_8_;
    uVar5 = s_d_cols____1____d_rows____1_0046bff0._0_8_;
    *(undefined8 *)(pcVar8 + 0x10) = s_d_cols____1____d_rows____1_0046bff0._16_8_;
    *(undefined2 *)(pcVar8 + 0x18) = uVar7;
    *(undefined8 *)pcVar8 = uVar5;
    *(undefined8 *)(pcVar8 + 8) = uVar6;
    error(-0xd7,(String *)&local_60,"static cv::Mat cv::Mat::diag(const cv::Mat&)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x3f5);
    String::deallocate((String *)&local_60);
    iVar9 = *(int *)(this + 8);
    iVar10 = *(int *)(this + 0xc);
  }
  uVar2 = *(uint *)this;
  local_78 = iVar9 + iVar10 + -1;
  *(undefined4 *)in_x8 = 0x42ff0000;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(undefined4 *)(in_x8 + 4) = 0;
  *(undefined4 *)(in_x8 + 8) = 0;
  *(undefined4 *)(in_x8 + 0xc) = 0;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined8 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x30) = 0;
  *(undefined8 *)(in_x8 + 0x38) = 0;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  local_60 = 0;
  local_58 = 0;
  local_50 = 0;
  local_48 = 0;
  local_74 = local_78;
  create(in_x8,2,&local_78,uVar2 & 0xfff);
  operator=(in_x8,(Scalar_ *)&local_60);
  diag((int)in_x8);
  local_70 = (Mat *)&local_60;
  if (*(int *)(this + 0xc) == 1) {
    local_68 = 0;
    local_64 = 0;
    local_78 = 0x2010000;
    copyTo(this,(_OutputArray *)&local_78);
  }
  else {
    local_90[0] = 0x1010000;
    local_80 = 0;
    local_7c = 0;
    local_68 = 0;
    local_64 = 0;
    local_78 = 0x2010000;
    local_88 = this;
    transpose((_InputArray *)local_90,(_OutputArray *)&local_78);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar9 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar9 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar9 == 1) {
      deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar9 = 0;
    do {
      *local_20 = 0;
      iVar9 = iVar9 + 1;
      local_20 = local_20 + 1;
    } while (iVar9 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00345fc8 (580 bytes) name=cvTranspose

void cvTranspose(cv *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  char *pcVar12;
  int iVar13;
  AutoBuffer *in_x5;
  undefined4 local_f0 [2];
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,in_x5);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  if (((local_b8 != local_54) || (local_b4 != local_58)) ||
     ((local_c0 & 0xfff) != (local_60 & 0xfff))) {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_d8,0x48);
    uVar9 = s_src_rows____dst_cols____src_cols_0046c010._40_8_;
    uVar8 = s_src_rows____dst_cols____src_cols_0046c010._32_8_;
    uVar7 = s_src_rows____dst_cols____src_cols_0046c010._24_8_;
    uVar6 = s_src_rows____dst_cols____src_cols_0046c010._16_8_;
    uVar5 = s_src_rows____dst_cols____src_cols_0046c010._8_8_;
    uVar4 = s_src_rows____dst_cols____src_cols_0046c010._0_8_;
    *(undefined8 *)(pcVar12 + 0x40) = s_src_rows____dst_cols____src_cols_0046c010._64_8_;
    uVar11 = s_src_rows____dst_cols____src_cols_0046c010._56_8_;
    uVar10 = s_src_rows____dst_cols____src_cols_0046c010._48_8_;
    *(undefined8 *)pcVar12 = uVar4;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar6;
    *(undefined8 *)(pcVar12 + 0x18) = uVar7;
    *(undefined8 *)(pcVar12 + 0x20) = uVar8;
    *(undefined8 *)(pcVar12 + 0x28) = uVar9;
    *(undefined8 *)(pcVar12 + 0x30) = uVar10;
    *(undefined8 *)(pcVar12 + 0x38) = uVar11;
    cv::error(-0xd7,(String *)&local_d8,"void cvTranspose(const CvArr*, CvArr*)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xffb);
    cv::String::deallocate((String *)&local_d8);
  }
  local_f0[0] = 0x1010000;
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::transpose((_InputArray *)local_f0,(_OutputArray *)&local_d8);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 00346270 (3224 bytes) name=reduce

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::reduce(cv::_InputArray const&, cv::_OutputArray const&, int, int, int) */

void cv::reduce(_InputArray *param_1,_OutputArray *param_2,int param_3,int param_4,int param_5)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  bool bVar14;
  bool bVar15;
  bool bVar16;
  char cVar17;
  int iVar18;
  int iVar19;
  undefined8 *puVar20;
  ulong uVar21;
  char *pcVar22;
  int *piVar23;
  Mat *pMVar24;
  int iVar25;
  code *pcVar26;
  uint uVar27;
  uint uVar28;
  uint uVar29;
  int local_140;
  int local_13c;
  undefined8 local_138;
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  uint local_120;
  int iStack_11c;
  int iStack_118;
  int iStack_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int iStack_bc;
  int iStack_b8;
  int iStack_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar18 = _InputArray::dims(param_1,-1);
  if (2 < iVar18) {
    local_60 = 0;
    local_58 = 0;
    puVar20 = (undefined8 *)String::allocate((String *)&local_60,0x10);
    uVar3 = _DAT_00463f58;
    *puVar20 = DAT_00463f50;
    puVar20[1] = uVar3;
    error(-0xd7,(String *)&local_60,
          "void cv::reduce(cv::InputArray, cv::OutputArray, int, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xe2f);
    String::deallocate((String *)&local_60);
  }
  uVar21 = _InputArray::type(param_1,-1);
  uVar28 = (uint)uVar21;
  uVar2 = uVar28 & 7;
  uVar1 = (uint)((uVar21 & 0xffffffff) >> 3) & 0x1ff;
  if (param_5 < 0) {
    cVar17 = _OutputArray::fixedType(param_2);
    param_5 = uVar28;
    if (cVar17 != '\0') {
      param_5 = _InputArray::type((_InputArray *)param_2,-1);
    }
    uVar27 = uVar2;
    if (-1 < param_5) goto LAB_00346328;
  }
  else {
LAB_00346328:
    uVar27 = param_5 & 7;
  }
  iVar18 = uVar1 * 8;
  uVar27 = uVar27 + iVar18;
  uVar29 = uVar27 & 7;
  if ((uVar27 >> 3) + 1 != uVar1 + 1) {
    local_60 = 0;
    local_58 = 0;
    pcVar22 = (char *)String::allocate((String *)&local_60,0x16);
    uVar5 = s_cn____CV_MAT_CN_dtype__0046c060._20_2_;
    uVar4 = s_cn____CV_MAT_CN_dtype__0046c060._8_8_;
    uVar3 = s_cn____CV_MAT_CN_dtype__0046c060._0_8_;
    *(undefined4 *)(pcVar22 + 0x10) = s_cn____CV_MAT_CN_dtype__0046c060._16_4_;
    *(undefined2 *)(pcVar22 + 0x14) = uVar5;
    *(undefined8 *)pcVar22 = uVar3;
    *(undefined8 *)(pcVar22 + 8) = uVar4;
    error(-0xd7,(String *)&local_60,
          "void cv::reduce(cv::InputArray, cv::OutputArray, int, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xe37);
    String::deallocate((String *)&local_60);
  }
  bVar14 = param_4 == 0;
  bVar15 = param_4 == 2;
  if (((!bVar14) && (!bVar15)) && ((param_4 & 0xfffffffdU) != 1)) {
    local_60 = 0;
    local_58 = 0;
    puVar20 = (undefined8 *)String::allocate((String *)&local_60,0x58);
    uVar13 = DAT_0046c0c0;
    uVar12 = DAT_0046c0b8;
    uVar11 = DAT_0046c0b0;
    uVar10 = DAT_0046c0a8;
    uVar9 = DAT_0046c0a0;
    uVar8 = DAT_0046c098;
    uVar7 = DAT_0046c090;
    uVar6 = DAT_0046c088;
    uVar4 = DAT_0046c080;
    uVar3 = _LAB_0046c078;
    puVar20[10] = s_DUCE_AVG_0046c0c8._0_8_;
    *puVar20 = uVar3;
    puVar20[1] = uVar4;
    puVar20[2] = uVar6;
    puVar20[3] = uVar7;
    puVar20[4] = uVar8;
    puVar20[5] = uVar9;
    puVar20[6] = uVar10;
    puVar20[7] = uVar11;
    puVar20[8] = uVar12;
    puVar20[9] = uVar13;
    error(-0xd7,(String *)&local_60,
          "void cv::reduce(cv::InputArray, cv::OutputArray, int, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xe39);
    String::deallocate((String *)&local_60);
  }
  iVar19 = _InputArray::kind(param_1);
  if (iVar19 == 0x10000) {
    pMVar24 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar1 = *(uint *)pMVar24;
    local_50 = *(undefined8 *)(pMVar24 + 0x10);
    local_60 = *(ulong *)pMVar24;
    local_58 = *(undefined8 *)(pMVar24 + 8);
    local_48 = *(undefined8 *)(pMVar24 + 0x18);
    local_40 = *(undefined8 *)(pMVar24 + 0x20);
    local_38 = *(undefined8 *)(pMVar24 + 0x28);
    local_30 = *(undefined8 *)(pMVar24 + 0x30);
    local_28 = *(long *)(pMVar24 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar23 = (int *)(local_28 + 0x14);
      do {
        cVar17 = '\x01';
        bVar16 = (bool)ExclusiveMonitorPass(piVar23,0x10);
        if (bVar16) {
          *piVar23 = *piVar23 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar24 + 0x48);
      local_8 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar1;
      Mat::copySize((Mat *)&local_60,pMVar24);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (param_3 == 0) {
    iVar19 = 1;
    iVar25 = local_58._4_4_;
  }
  else {
    iVar19 = (int)local_58;
    iVar25 = 1;
  }
  _OutputArray::create(param_2,iVar19,iVar25,uVar27,-1,false,0);
  iVar19 = _InputArray::kind((_InputArray *)param_2);
  if (iVar19 == 0x10000) {
    pMVar24 = *(Mat **)(param_2 + 8);
    local_e0 = &iStack_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar24;
    iStack_11c = *(int *)(pMVar24 + 4);
    iStack_118 = *(int *)(pMVar24 + 8);
    iStack_114 = *(int *)(pMVar24 + 0xc);
    local_110 = *(long *)(pMVar24 + 0x10);
    local_108 = *(undefined8 *)(pMVar24 + 0x18);
    local_100 = *(undefined8 *)(pMVar24 + 0x20);
    local_f8 = *(undefined8 *)(pMVar24 + 0x28);
    local_f0 = *(undefined8 *)(pMVar24 + 0x30);
    local_e8 = *(long *)(pMVar24 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar23 = (int *)(local_e8 + 0x14);
      do {
        cVar17 = '\x01';
        bVar16 = (bool)ExclusiveMonitorPass(piVar23,0x10);
        if (bVar16) {
          *piVar23 = *piVar23 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar24 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar24 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar24 + 0x48))[1];
    }
    else {
      iStack_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar24);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iStack_b8 = iStack_118;
  iStack_b4 = iStack_114;
  local_c0 = local_120;
  iStack_bc = iStack_11c;
  local_78 = &local_70;
  local_a8 = local_108;
  local_80 = &iStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  local_a0 = local_100;
  local_98 = local_f8;
  local_b0 = local_110;
  local_90 = local_f0;
  local_88 = local_e8;
  if (local_e8 != 0) {
    piVar23 = (int *)(local_e8 + 0x14);
    do {
      cVar17 = '\x01';
      bVar16 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar16) {
        *piVar23 = *piVar23 + 1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
  }
  if (iStack_11c < 3) {
    local_70 = *local_d8;
    uStack_68 = local_d8[1];
    if (param_4 == 1) goto LAB_003465ec;
LAB_003464d4:
    if (param_3 == 0) {
      if (!bVar14) {
        if (bVar15) {
          if (((uVar27 | uVar28) & 7) == 0) {
            pcVar26 = FUN_0030cfac;
            goto LAB_00346630;
          }
          if ((uVar29 == 2) && (uVar2 == 2)) {
            pcVar26 = FUN_0030f9c8;
            goto LAB_00346630;
          }
          if ((uVar29 == 3) && (uVar2 == 3)) {
            pcVar26 = FUN_00310524;
            goto LAB_00346630;
          }
          if ((uVar29 == 5) && (uVar2 == 5)) {
            pcVar26 = FUN_00313098;
            goto LAB_00346630;
          }
          if ((uVar29 == 6) && (uVar2 == 6)) {
            pcVar26 = FUN_00315dfc;
            goto LAB_00346630;
          }
        }
        else if (param_4 == 3) {
          if (((uVar27 | uVar28) & 7) == 0) {
            pcVar26 = FUN_0030bca4;
            goto LAB_00346630;
          }
          if ((uVar29 == 2) && (uVar2 == 2)) {
            pcVar26 = FUN_0030e2b4;
            goto LAB_00346630;
          }
          if ((uVar29 == 3) && (uVar2 == 3)) {
            pcVar26 = FUN_0030ee10;
            goto LAB_00346630;
          }
          if ((uVar29 == 5) && (uVar2 == 5)) {
            pcVar26 = FUN_003137b4;
            goto LAB_00346630;
          }
          if ((uVar29 == 6) && (uVar2 == 6)) {
            pcVar26 = FUN_0031588c;
            goto LAB_00346630;
          }
        }
        goto LAB_00346558;
      }
      bVar14 = uVar29 == 4;
      goto LAB_0034652c;
    }
    if (bVar14) {
      bVar14 = uVar29 == 4;
      goto LAB_00346614;
    }
    if (bVar15) {
      if (((uVar27 | uVar28) & 7) == 0) {
        pcVar26 = FUN_002ff478;
        goto LAB_00346630;
      }
      if ((uVar29 == 2) && (uVar2 == 2)) {
        pcVar26 = FUN_002ff938;
        goto LAB_00346630;
      }
      if ((uVar29 == 3) && (uVar2 == 3)) {
        pcVar26 = FUN_002ffd20;
        goto LAB_00346630;
      }
      if ((uVar29 == 5) && (uVar2 == 5)) {
        pcVar26 = FUN_00300110;
        goto LAB_00346630;
      }
      if ((uVar29 == 6) && (uVar2 == 6)) {
        pcVar26 = FUN_0030042c;
        goto LAB_00346630;
      }
    }
    else if (param_4 == 3) {
      if (((uVar27 | uVar28) & 7) == 0) {
        pcVar26 = FUN_003006e4;
        goto LAB_00346630;
      }
      if ((uVar29 == 2) && (uVar2 == 2)) {
        pcVar26 = FUN_00300ba4;
        goto LAB_00346630;
      }
      if ((uVar29 == 3) && (uVar2 == 3)) {
        pcVar26 = FUN_00300f8c;
        goto LAB_00346630;
      }
      if ((uVar29 == 5) && (uVar2 == 5)) {
        pcVar26 = FUN_0030137c;
        goto LAB_00346630;
      }
      if ((uVar29 == 6) && (uVar2 == 6)) {
        pcVar26 = FUN_00301698;
        goto LAB_00346630;
      }
    }
  }
  else {
    iStack_bc = 0;
    Mat::copySize((Mat *)&local_c0,(Mat *)&local_120);
    if (param_4 != 1) goto LAB_003464d4;
LAB_003465ec:
    if (uVar29 < 4 && uVar2 < 4) {
      uVar1 = iVar18 + 4;
      bVar14 = true;
      if ((((2 < iStack_bc) || (iStack_118 != iStack_b8)) || (iStack_114 != iStack_b4)) ||
         ((uVar1 != (local_c0 & 0xfff) || (uVar29 = 4, local_b0 == 0)))) {
        local_140 = iStack_118;
        local_13c = iStack_114;
        Mat::create((Mat *)&local_c0,2,&local_140,uVar1);
        uVar29 = 4;
      }
    }
    else {
      bVar14 = uVar29 == 4;
    }
    if (param_3 == 0) {
LAB_0034652c:
      bVar15 = (uVar21 & 7) == 0;
      if ((bVar14) && (bVar15)) {
        pcVar26 = FUN_00317104;
        goto LAB_00346630;
      }
      bVar14 = uVar29 == 5;
      if ((bVar14) && (bVar15)) {
        pcVar26 = FUN_0031636c;
        goto LAB_00346630;
      }
      bVar16 = uVar29 == 6;
      if ((bVar16) && (bVar15)) {
        pcVar26 = FUN_00317eb4;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 2)) {
        pcVar26 = FUN_00312188;
        goto LAB_00346630;
      }
      if ((bVar16) && (uVar2 == 2)) {
        pcVar26 = FUN_0031446c;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 3)) {
        pcVar26 = FUN_0031177c;
        goto LAB_00346630;
      }
      if ((bVar16) && (uVar2 == 3)) {
        pcVar26 = FUN_00314e7c;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 5)) {
        pcVar26 = FUN_003110dc;
        goto LAB_00346630;
      }
      if (bVar16) {
        if (uVar2 == 5) {
          pcVar26 = FUN_00313ed0;
          goto LAB_00346630;
        }
        if (uVar2 == 6) {
          pcVar26 = FUN_00312b94;
          goto LAB_00346630;
        }
      }
    }
    else {
LAB_00346614:
      bVar15 = (uVar21 & 7) == 0;
      if ((bVar14) && (bVar15)) {
        pcVar26 = FUN_002fcd98;
        goto LAB_00346630;
      }
      bVar14 = uVar29 == 5;
      if ((bVar14) && (bVar15)) {
        pcVar26 = FUN_002fd228;
        goto LAB_00346630;
      }
      bVar16 = uVar29 == 6;
      if ((bVar16) && (bVar15)) {
        pcVar26 = FUN_002fd718;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 2)) {
        pcVar26 = FUN_002fdc38;
        goto LAB_00346630;
      }
      if ((bVar16) && (uVar2 == 2)) {
        pcVar26 = FUN_002fe01c;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 3)) {
        pcVar26 = FUN_002fe420;
        goto LAB_00346630;
      }
      if ((bVar16) && (uVar2 == 3)) {
        pcVar26 = FUN_002fe804;
        goto LAB_00346630;
      }
      if ((bVar14) && (uVar2 == 5)) {
        pcVar26 = FUN_002fec08;
        goto LAB_00346630;
      }
      if (bVar16) {
        if (uVar2 == 5) {
          pcVar26 = FUN_002feef0;
          goto LAB_00346630;
        }
        if (uVar2 == 6) {
          pcVar26 = FUN_002ff1f4;
          goto LAB_00346630;
        }
      }
    }
  }
LAB_00346558:
  local_138 = 0;
  local_130 = (Mat *)0x0;
  pcVar22 = (char *)String::allocate((String *)&local_138,0x39);
  cVar17 = s_Unsupported_combination_of_input_0046c0d8[0x38];
  uVar9 = s_Unsupported_combination_of_input_0046c0d8._40_8_;
  uVar8 = s_Unsupported_combination_of_input_0046c0d8._32_8_;
  uVar7 = s_Unsupported_combination_of_input_0046c0d8._24_8_;
  uVar6 = s_Unsupported_combination_of_input_0046c0d8._16_8_;
  uVar4 = s_Unsupported_combination_of_input_0046c0d8._8_8_;
  uVar3 = s_Unsupported_combination_of_input_0046c0d8._0_8_;
  *(undefined8 *)(pcVar22 + 0x30) = s_Unsupported_combination_of_input_0046c0d8._48_8_;
  pcVar22[0x38] = cVar17;
  *(undefined8 *)pcVar22 = uVar3;
  *(undefined8 *)(pcVar22 + 8) = uVar4;
  *(undefined8 *)(pcVar22 + 0x10) = uVar6;
  *(undefined8 *)(pcVar22 + 0x18) = uVar7;
  *(undefined8 *)(pcVar22 + 0x20) = uVar8;
  *(undefined8 *)(pcVar22 + 0x28) = uVar9;
  error(-0xd2,(String *)&local_138,"void cv::reduce(cv::InputArray, cv::OutputArray, int, int, int)"
        ,"/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xeb8);
  String::deallocate((String *)&local_138);
  pcVar26 = (code *)0x0;
LAB_00346630:
  (*pcVar26)((String *)&local_60,(Mat *)&local_c0);
  if (param_4 == 1) {
    local_128 = 0;
    local_124 = 0;
    local_138 = CONCAT44(local_138._4_4_,0x2010000);
    if (param_3 == 0) {
      iVar18 = (int)local_58;
    }
    else {
      iVar18 = local_58._4_4_;
    }
    local_130 = (Mat *)&local_120;
    Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_138,local_120 & 0xfff,
                   1.0 / (double)iVar18,0.0);
  }
  if (local_88 != 0) {
    piVar23 = (int *)(local_88 + 0x14);
    do {
      iVar18 = *piVar23;
      cVar17 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar14) {
        *piVar23 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < iStack_bc) {
    iVar18 = 0;
    piVar23 = local_80;
    do {
      *piVar23 = 0;
      iVar18 = iVar18 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar18 < iStack_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar23 = (int *)(local_e8 + 0x14);
    do {
      iVar18 = *piVar23;
      cVar17 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar14) {
        *piVar23 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < iStack_11c) {
    iVar18 = 0;
    piVar23 = local_e0;
    do {
      *piVar23 = 0;
      iVar18 = iVar18 + 1;
      piVar23 = piVar23 + 1;
    } while (iVar18 < iStack_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  if (local_28 != 0) {
    piVar23 = (int *)(local_28 + 0x14);
    do {
      iVar18 = *piVar23;
      cVar17 = '\x01';
      bVar14 = (bool)ExclusiveMonitorPass(piVar23,0x10);
      if (bVar14) {
        *piVar23 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar18 = 0;
    puVar20 = local_20;
    do {
      *(undefined4 *)puVar20 = 0;
      iVar18 = iVar18 + 1;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar18 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 00346fc8 (932 bytes) name=cvReduce

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvReduce(cv *param_1,cv *param_2,uint param_3,int param_4,undefined8 param_5,
             AutoBuffer *param_6)

{
  int *piVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  bool bVar10;
  undefined8 *puVar11;
  char *pcVar12;
  int iVar13;
  String *this;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  Mat *local_e8;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined8 local_d8;
  Mat *local_d0;
  undefined4 local_c8;
  undefined4 local_c4;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,false,0,param_6);
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,param_6);
  if ((int)param_3 < 0) {
    if (local_b8 <= local_58) {
      param_3 = (uint)(local_54 < local_b4 || local_54 == 1);
      goto LAB_003472b0;
    }
joined_r0x00347334:
    param_3 = 0;
    if (local_54 == local_b4) {
joined_r0x00347340:
      if (local_58 == 1) goto LAB_00347090;
    }
LAB_003472c4:
    this = (String *)&local_f0;
    local_f0 = 0;
    local_e8 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate(this,0x22);
    uVar6 = s_The_output_array_size_is_incorre_0046c150._24_8_;
    uVar5 = s_The_output_array_size_is_incorre_0046c150._16_8_;
    uVar4 = s_The_output_array_size_is_incorre_0046c150._8_8_;
    uVar3 = s_The_output_array_size_is_incorre_0046c150._0_8_;
    *(undefined2 *)(pcVar12 + 0x20) = s_The_output_array_size_is_incorre_0046c150._32_2_;
    *(undefined8 *)pcVar12 = uVar3;
    *(undefined8 *)(pcVar12 + 8) = uVar4;
    *(undefined8 *)(pcVar12 + 0x10) = uVar5;
    *(undefined8 *)(pcVar12 + 0x18) = uVar6;
    cv::error(-0xc9,this,"void cvReduce(const CvArr*, CvArr*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x101d);
  }
  else {
    if ((int)param_3 < 2) {
LAB_003472b0:
      if (param_3 == 0) goto joined_r0x00347334;
      param_3 = 1;
      bVar10 = local_58 == local_b8;
      local_58 = local_54;
      if (bVar10) goto joined_r0x00347340;
      goto LAB_003472c4;
    }
    this = (String *)&local_100;
    local_100 = 0;
    local_f8 = 0;
    puVar11 = (undefined8 *)cv::String::allocate(this,0x30);
    uVar7 = _DAT_0046c140;
    uVar6 = DAT_0046c138;
    uVar5 = DAT_0046c130;
    uVar4 = DAT_0046c128;
    uVar3 = DAT_0046c120;
    *puVar11 = DAT_0046c118;
    puVar11[1] = uVar3;
    puVar11[2] = uVar4;
    puVar11[3] = uVar5;
    puVar11[4] = uVar6;
    puVar11[5] = uVar7;
    cv::error(-0xd3,this,"void cvReduce(const CvArr*, CvArr*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1019);
  }
  cv::String::deallocate(this);
LAB_00347090:
  if ((local_c0 >> 3 & 0x1ff) + 1 != (local_60 >> 3 & 0x1ff) + 1) {
    local_d8 = 0;
    local_d0 = (Mat *)0x0;
    pcVar12 = (char *)cv::String::allocate((String *)&local_d8,0x3d);
    cVar2 = s_Input_and_output_arrays_must_hav_0046c178[0x3c];
    uVar9 = s_Input_and_output_arrays_must_hav_0046c178._56_4_;
    uVar8 = s_Input_and_output_arrays_must_hav_0046c178._40_8_;
    uVar7 = s_Input_and_output_arrays_must_hav_0046c178._32_8_;
    uVar6 = s_Input_and_output_arrays_must_hav_0046c178._24_8_;
    uVar5 = s_Input_and_output_arrays_must_hav_0046c178._16_8_;
    uVar4 = s_Input_and_output_arrays_must_hav_0046c178._8_8_;
    uVar3 = s_Input_and_output_arrays_must_hav_0046c178._0_8_;
    *(undefined8 *)(pcVar12 + 0x30) = s_Input_and_output_arrays_must_hav_0046c178._48_8_;
    *(undefined4 *)(pcVar12 + 0x38) = uVar9;
    pcVar12[0x3c] = cVar2;
    *(undefined8 *)pcVar12 = uVar3;
    *(undefined8 *)(pcVar12 + 8) = uVar4;
    *(undefined8 *)(pcVar12 + 0x10) = uVar5;
    *(undefined8 *)(pcVar12 + 0x18) = uVar6;
    *(undefined8 *)(pcVar12 + 0x20) = uVar7;
    *(undefined8 *)(pcVar12 + 0x28) = uVar8;
    cv::error(-0xcd,(String *)&local_d8,"void cvReduce(const CvArr*, CvArr*, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0x1020);
    cv::String::deallocate((String *)&local_d8);
  }
  local_f0 = CONCAT44(local_f0._4_4_,0x1010000);
  local_e0 = 0;
  local_dc = 0;
  local_c8 = 0;
  local_c4 = 0;
  local_d8 = CONCAT44(local_d8._4_4_,0x2010000);
  local_e8 = (Mat *)&local_c0;
  local_d0 = (Mat *)&local_60;
  cv::reduce((_InputArray *)&local_f0,(_OutputArray *)&local_d8,param_3,param_4,local_60 & 0xfff);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar10) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar13 = 0;
    do {
      *local_20 = 0;
      iVar13 = iVar13 + 1;
      local_20 = local_20 + 1;
    } while (iVar13 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar13 = *piVar1;
      cVar2 = '\x01';
      bVar10 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar10) {
        *piVar1 = iVar13 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar13 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar13 = 0;
    do {
      *local_80 = 0;
      iVar13 = iVar13 + 1;
      local_80 = local_80 + 1;
    } while (iVar13 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 003473e8 (92 bytes) name=createSameSize

/* cv::_OutputArray::createSameSize(cv::_InputArray const&, int) const */

void __thiscall
cv::_OutputArray::createSameSize(_OutputArray *this,_InputArray *param_1,int param_2)

{
  int iVar1;
  int aiStack_80 [32];
  
  iVar1 = _InputArray::sizend(param_1,aiStack_80,-1);
  create(this,iVar1,aiStack_80,param_2,-1,false,0);
  return;
}


==================================================================

### FUNC 00347444 (968 bytes) name=FUN_00347444

void FUN_00347444(int *param_1,int *param_2,long param_3,long param_4)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  int *piVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  ulong uVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  
  lVar10 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar10 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar14 = param_1[1];
    param_3 = param_3 + -1;
    lVar12 = (long)iVar14;
    bVar1 = *(byte *)(param_4 + param_2[-1]);
    bVar2 = *(byte *)(param_4 + lVar12);
    bVar3 = *(byte *)(param_4 + param_1[lVar10 >> 3]);
    piVar9 = param_2;
    piVar8 = param_1;
    if (bVar2 < bVar3) {
      if (bVar3 < bVar1) {
LAB_00347570:
        iVar14 = *param_1;
        *param_1 = param_1[lVar10 >> 3];
        param_1[lVar10 >> 3] = iVar14;
        iVar14 = param_2[-1];
        iVar11 = param_1[1];
        lVar12 = (long)*param_1;
      }
      else {
        if (bVar1 <= bVar2) goto LAB_0034758c;
LAB_003474b8:
        iVar14 = *param_1;
        *param_1 = param_2[-1];
        param_2[-1] = iVar14;
        iVar11 = param_1[1];
        lVar12 = (long)*param_1;
      }
    }
    else {
      if (bVar1 <= bVar2) {
        if (bVar3 < bVar1) goto LAB_003474b8;
        goto LAB_00347570;
      }
LAB_0034758c:
      iVar11 = *param_1;
      param_1[1] = iVar11;
      *param_1 = iVar14;
      iVar14 = param_2[-1];
    }
    while( true ) {
      piVar8 = piVar8 + 1;
      bVar1 = *(byte *)(param_4 + iVar11);
      while (bVar1 < *(byte *)(param_4 + lVar12)) {
        piVar8 = piVar8 + 1;
        iVar11 = *piVar8;
        bVar1 = *(byte *)(param_4 + iVar11);
      }
      piVar9 = piVar9 + -1;
      bVar1 = *(byte *)(param_4 + iVar14);
      while (*(byte *)(param_4 + lVar12) < bVar1) {
        piVar9 = piVar9 + -1;
        iVar14 = *piVar9;
        bVar1 = *(byte *)(param_4 + iVar14);
      }
      if (piVar9 <= piVar8) break;
      *piVar8 = iVar14;
      *piVar9 = iVar11;
      iVar14 = piVar9[-1];
      iVar11 = piVar8[1];
      lVar12 = (long)*param_1;
    }
    FUN_00347444(piVar8,param_2,param_3,param_4);
    lVar10 = (long)piVar8 - (long)param_1;
    param_2 = piVar8;
  }
  lVar10 = lVar10 >> 2;
  lVar16 = lVar10 + -2 >> 1;
  piVar8 = param_1 + lVar16;
  lVar12 = lVar16;
  do {
    iVar14 = *piVar8;
    lVar4 = lVar12;
    piVar9 = piVar8;
    while (lVar4 < lVar10 + -1 >> 1) {
      lVar7 = lVar4 + 1;
      lVar6 = lVar7 * 2;
      piVar9 = param_1 + lVar7 * 2;
      iVar11 = param_1[lVar7 * 2];
      if (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + piVar9[-1])) {
        lVar6 = lVar6 + -1;
        iVar11 = param_1[lVar6];
        piVar9 = param_1 + lVar6;
      }
      param_1[lVar4] = iVar11;
      lVar4 = lVar6;
    }
    if ((lVar16 == lVar4) && (((uint)lVar10 & 1) != 1)) {
      lVar7 = lVar4 + 1;
      lVar4 = lVar7 * 2 + -1;
      *piVar9 = param_1[lVar7 * 2 + -1];
      piVar9 = param_1 + lVar4;
    }
    if (lVar12 < lVar4) {
      lVar7 = lVar4 + -1 >> 1;
      iVar11 = param_1[lVar7];
      if (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + iVar14)) {
        do {
          param_1[lVar4] = iVar11;
          piVar9 = param_1 + lVar7;
          if (lVar7 <= lVar12) break;
          lVar6 = (lVar7 + -1) / 2;
          iVar11 = param_1[lVar6];
          lVar4 = lVar7;
          lVar7 = lVar6;
        } while (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + iVar14));
      }
      *piVar9 = iVar14;
      if (lVar12 == 0) break;
    }
    else {
      *piVar9 = iVar14;
    }
    piVar8 = piVar8 + -1;
    lVar12 = lVar12 + -1;
  } while( true );
LAB_00347604:
  param_2 = param_2 + -1;
  iVar14 = *param_2;
  *param_2 = *param_1;
  uVar15 = (long)param_2 - (long)param_1 >> 2;
  lVar10 = (long)(uVar15 - 1) / 2;
  if (lVar10 < 1) {
    uVar5 = uVar15 & 1;
    piVar8 = param_1;
    if ((uVar15 & 1) == 0) goto LAB_0034767c;
  }
  else {
    uVar13 = 0;
    do {
      lVar12 = uVar13 + 1;
      uVar5 = lVar12 * 2;
      piVar8 = param_1 + lVar12 * 2;
      iVar11 = param_1[lVar12 * 2];
      if (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + piVar8[-1])) {
        uVar5 = uVar5 - 1;
        iVar11 = param_1[uVar5];
        piVar8 = param_1 + uVar5;
      }
      param_1[uVar13] = iVar11;
      uVar13 = uVar5;
    } while ((long)uVar5 < lVar10);
    if ((uVar15 & 1) == 0) {
LAB_0034767c:
      if (uVar5 == (long)(uVar15 - 2) / 2) {
        lVar10 = uVar5 + 1;
        uVar5 = lVar10 * 2 - 1;
        *piVar8 = param_1[lVar10 * 2 + -1];
        piVar8 = param_1 + uVar5;
      }
      else if ((long)uVar5 < 1) goto LAB_00347694;
    }
    uVar15 = (long)(uVar5 - 1) >> 1;
    iVar11 = param_1[uVar15];
    if (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + iVar14)) {
      do {
        param_1[uVar5] = iVar11;
        piVar8 = param_1 + uVar15;
        uVar13 = (long)(uVar15 - 1) >> 1;
        if (uVar15 == 0) break;
        iVar11 = param_1[uVar13];
        uVar5 = uVar15;
        uVar15 = uVar13;
      } while (*(byte *)(param_4 + iVar11) < *(byte *)(param_4 + iVar14));
    }
  }
LAB_00347694:
  *piVar8 = iVar14;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_00347604;
}


==================================================================

### FUNC 00347810 (2388 bytes) name=FUN_00347810

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00347810(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  byte bVar7;
  uint uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int *piVar11;
  undefined1 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  int *piVar18;
  ulong uVar19;
  undefined1 (*pauVar20) [16];
  char *pcVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  ulong uVar25;
  size_t sVar26;
  int *piVar27;
  undefined1 (*pauVar28) [16];
  int *piVar29;
  uint uVar30;
  ulong uVar31;
  long lVar32;
  undefined1 (*pauVar33) [16];
  undefined1 (*pauVar34) [16];
  int *piVar35;
  int *piVar36;
  uint uVar37;
  ulong uVar38;
  ulong uVar39;
  int *piVar40;
  undefined1 *puVar41;
  long lVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined8 local_858;
  undefined8 local_850;
  undefined1 *local_848;
  ulong local_840;
  undefined1 local_838 [1032];
  int *local_430;
  ulong local_428;
  int local_420 [264];
  
  local_430 = local_420;
  local_428 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_848 = local_838;
  local_840 = 0x408;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_858 = 0;
    local_850 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_858,0x14);
    uVar14 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar13 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar21 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar21 = uVar13;
    *(undefined8 *)(pcVar21 + 8) = uVar14;
    cv::error(-0xd7,(String *)&local_858,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = unsigned char]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_858);
  }
  if (uVar4 == 0) {
    uVar38 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar31 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar23 = uVar31;
    if (local_840 < uVar31) {
      if (local_848 != local_838) {
        if (local_848 != (undefined1 *)0x0) {
          operator_delete__(local_848);
        }
        local_848 = local_838;
        local_840 = 0x408;
      }
      uVar23 = local_840;
      if (0x408 < uVar31) {
        local_848 = operator_new__(uVar31);
        uVar23 = uVar31;
      }
    }
    local_840 = uVar23;
    if (local_428 < uVar31) {
      if (local_430 != local_420) {
        if (local_430 != (int *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
      if (uVar31 < 0x109) {
        piVar11 = local_420;
        puVar12 = local_848;
      }
      else {
        uVar23 = uVar31 << 2;
        if (0x1fc0000000000000 < uVar31) {
          uVar23 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar23);
        local_428 = uVar31;
        piVar11 = local_430;
        puVar12 = local_848;
      }
    }
    else {
      local_428 = uVar31;
      piVar11 = local_430;
      puVar12 = local_848;
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar38 = (ulong)*(uint *)(param_1 + 0xc);
    piVar11 = local_430;
    puVar12 = local_848;
  }
  piVar40 = piVar11;
  local_848 = puVar12;
  if (0 < iVar5) {
    uVar23 = -(uVar38 >> 0x1f) & 0xfffffffc00000000 | uVar38 << 2;
    uVar37 = (uint)uVar38;
    uVar2 = (int)uVar37 / 2;
    uVar39 = (ulong)uVar2;
    uVar8 = uVar37 - 1;
    uVar31 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
    uVar38 = -(ulong)(uVar37 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 2) << 2;
    uVar3 = uVar37;
    if ((int)uVar37 < 1) {
      uVar3 = 1;
    }
    uVar24 = -(ulong)(uVar37 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 3) << 2;
    lVar42 = 0;
    do {
      if (uVar4 == 0) {
        lVar17 = 0;
        piVar40 = piVar11;
        puVar41 = puVar12;
        if (0 < (int)uVar37) {
          do {
            puVar12[lVar17] =
                 *(undefined1 *)
                  (*(long *)(param_1 + 0x10) + lVar17 * **(long **)(param_1 + 0x48) + lVar42);
            lVar17 = lVar17 + 1;
          } while ((int)lVar17 < (int)uVar37);
          uVar15 = -((uint)((ulong)piVar11 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
joined_r0x00347e7c:
          uVar30 = uVar3;
          if (((int)uVar3 < 8) || (uVar25 = 0, uVar30 = uVar15, uVar15 != 0)) {
            uVar15 = uVar30;
            *piVar40 = 0;
            if ((uVar15 == 1) ||
               ((((piVar40[1] = 1, uVar15 == 2 || (piVar40[2] = 2, uVar15 == 3)) ||
                 (piVar40[3] = 3, uVar15 == 4)) || (piVar40[4] = 4, uVar15 == 5)))) {
              uVar25 = (ulong)uVar15;
            }
            else {
              piVar40[5] = 5;
              if (uVar15 == 7) {
                uVar25 = 7;
                piVar40[6] = 6;
              }
              else {
                uVar25 = 6;
              }
            }
            if (uVar15 == uVar3) goto LAB_00347ad4;
          }
          uVar30 = uVar8;
          if ((int)uVar37 < 1) {
            uVar30 = 0;
          }
          uVar1 = ((uVar3 - uVar15) - 4 >> 2) + 1;
          iVar16 = uVar1 * 4;
          if (2 < uVar30 - uVar15) {
            iVar22 = (int)uVar25;
            uVar30 = 0;
            auVar43._0_4_ = iVar22 + (int)_DAT_003481c0;
            auVar43._4_4_ = iVar22 + (int)((ulong)_DAT_003481c0 >> 0x20);
            auVar43._8_4_ = iVar22 + (int)_UNK_003481c8;
            auVar43._12_4_ = iVar22 + (int)((ulong)_UNK_003481c8 >> 0x20);
            piVar18 = piVar40 + uVar15;
            do {
              *(long *)(piVar18 + 2) = auVar43._8_8_;
              *(long *)piVar18 = auVar43._0_8_;
              uVar30 = uVar30 + 1;
              auVar44._0_4_ = auVar43._0_4_ + 4;
              auVar44._4_4_ = auVar43._4_4_ + 4;
              auVar44._8_4_ = auVar43._8_4_ + 4;
              auVar44._12_4_ = auVar43._12_4_ + 4;
              piVar18 = piVar18 + 4;
              auVar43 = auVar44;
            } while (uVar30 < uVar1);
            uVar25 = (ulong)(uint)(iVar22 + iVar16);
            if (iVar16 == uVar3 - uVar15) goto LAB_00347ad4;
          }
          uVar19 = -(uVar25 >> 0x1f) & 0xfffffffc00000000 | uVar25 << 2;
          iVar16 = (int)uVar25;
          *(int *)((long)piVar40 + uVar19) = iVar16;
          if (iVar16 + 1 < (int)uVar37) {
            *(int *)((long)piVar40 + uVar19 + 4) = iVar16 + 1;
            if (iVar16 + 2 < (int)uVar37) {
              *(int *)((long)piVar40 + uVar19 + 8) = iVar16 + 2;
            }
          }
        }
      }
      else {
        puVar41 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar42 * *(long *)(param_1 + 0x50));
        piVar40 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar37) {
          uVar15 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
          goto joined_r0x00347e7c;
        }
      }
LAB_00347ad4:
      piVar18 = (int *)((long)piVar40 + uVar23);
      if (piVar40 != piVar18) {
        FUN_00347444(piVar40,piVar18,(0x3f - LZCOUNT((long)uVar23 >> 2)) * 2,puVar41);
        if ((long)uVar23 < 0x44) {
          piVar35 = piVar40 + 1;
          if (piVar18 != piVar35) {
            iVar16 = *piVar35;
            lVar17 = (long)iVar16;
            bVar7 = puVar41[lVar17];
            if ((byte)puVar41[*piVar40] <= bVar7) goto LAB_00347efc;
            do {
              sVar26 = (long)piVar35 - (long)piVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)piVar35 + (4 - sVar26)),piVar40,sVar26);
              }
              *piVar40 = iVar16;
              while( true ) {
                piVar35 = piVar35 + 1;
                if (piVar18 == piVar35) goto LAB_00347ba8;
                iVar16 = *piVar35;
                lVar17 = (long)iVar16;
                bVar7 = puVar41[lVar17];
                if (bVar7 < (byte)puVar41[*piVar40]) break;
LAB_00347efc:
                iVar22 = piVar35[-1];
                piVar36 = piVar35;
                if (bVar7 < (byte)puVar41[iVar22]) {
                  do {
                    piVar27 = piVar36 + -1;
                    *piVar36 = iVar22;
                    iVar22 = piVar36[-2];
                    piVar36 = piVar27;
                  } while ((byte)puVar41[lVar17] < (byte)puVar41[iVar22]);
                  *piVar27 = iVar16;
                }
                else {
                  *piVar35 = iVar16;
                }
              }
            } while( true );
          }
        }
        else {
          piVar36 = piVar40 + 0x10;
          piVar35 = piVar40 + 1;
          do {
            iVar16 = *piVar35;
            if ((byte)puVar41[iVar16] < (byte)puVar41[*piVar40]) {
              sVar26 = (long)piVar35 - (long)piVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)piVar35 + (4 - sVar26)),piVar40,sVar26);
              }
              *piVar40 = iVar16;
            }
            else {
              iVar22 = piVar35[-1];
              piVar27 = piVar35;
              if ((byte)puVar41[iVar16] < (byte)puVar41[iVar22]) {
                do {
                  piVar29 = piVar27 + -1;
                  *piVar27 = iVar22;
                  iVar22 = piVar27[-2];
                  piVar27 = piVar29;
                } while ((byte)puVar41[iVar16] < (byte)puVar41[iVar22]);
                *piVar29 = iVar16;
              }
              else {
                *piVar35 = iVar16;
              }
            }
            piVar35 = piVar35 + 1;
          } while (piVar36 != piVar35);
          for (; piVar18 != piVar36; piVar36 = piVar36 + 1) {
            while( true ) {
              iVar16 = piVar36[-1];
              iVar22 = *piVar36;
              piVar35 = piVar36;
              if ((byte)puVar41[iVar22] < (byte)puVar41[iVar16]) break;
              piVar35 = piVar36 + 1;
              *piVar36 = iVar22;
              piVar36 = piVar35;
              if (piVar18 == piVar35) goto LAB_00347ba8;
            }
            do {
              piVar27 = piVar35 + -1;
              *piVar35 = iVar16;
              iVar16 = piVar35[-2];
              piVar35 = piVar27;
            } while ((byte)puVar41[iVar22] < (byte)puVar41[iVar16]);
            *piVar27 = iVar22;
          }
        }
      }
LAB_00347ba8:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar23 + uVar39 * -4) < (long)(uVar39 * 4) && 0 < (long)uVar23) {
          lVar17 = 0;
          piVar18 = (int *)((long)piVar40 + uVar31);
          do {
            iVar16 = piVar40[lVar17];
            piVar40[lVar17] = *piVar18;
            lVar17 = lVar17 + 1;
            *piVar18 = iVar16;
            piVar18 = piVar18 + -1;
          } while ((int)lVar17 < (int)uVar2);
        }
        else {
          uVar15 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
          uVar25 = uVar39;
          if (uVar15 < uVar2) {
            uVar25 = (ulong)uVar15;
          }
          iVar16 = (int)uVar25;
          uVar19 = uVar25;
          if (iVar16 != 0) {
            iVar22 = *piVar40;
            *piVar40 = *(int *)((long)piVar40 + uVar31);
            *(int *)((long)piVar40 + uVar31) = iVar22;
            if (iVar16 != 1) {
              iVar22 = piVar40[1];
              piVar40[1] = *(int *)((long)piVar40 + uVar38);
              *(int *)((long)piVar40 + uVar38) = iVar22;
              if (iVar16 == 3) {
                iVar22 = piVar40[2];
                piVar40[2] = *(int *)((long)piVar40 + uVar24);
                *(int *)((long)piVar40 + uVar24) = iVar22;
              }
              else {
                uVar19 = 2;
              }
            }
          }
          uVar15 = ((uVar2 - iVar16) - 4 >> 2) + 1;
          pauVar28 = (undefined1 (*) [16])((long)piVar40 + (uVar23 - 0xc) + ~uVar25 * 4);
          uVar30 = 0;
          iVar22 = uVar15 * 4;
          pauVar20 = (undefined1 (*) [16])(piVar40 + uVar25);
          pauVar33 = pauVar28;
          pauVar34 = (undefined1 (*) [16])(piVar40 + uVar25);
          do {
            auVar43 = *pauVar28;
            uVar30 = uVar30 + 1;
            pauVar28 = pauVar28 + -1;
            auVar9._8_8_ = _UNK_003481d8;
            auVar9._0_8_ = _DAT_003481d0;
            auVar44 = a64_TBL(ZEXT816(0),auVar43,auVar9);
            auVar10._8_8_ = _UNK_003481d8;
            auVar10._0_8_ = _DAT_003481d0;
            auVar43 = a64_TBL(ZEXT816(0),*pauVar20,auVar10);
            *(long *)((long)*pauVar34 + 8) = auVar44._8_8_;
            *(long *)*pauVar34 = auVar44._0_8_;
            *(long *)(*pauVar33 + 8) = auVar43._8_8_;
            *(long *)*pauVar33 = auVar43._0_8_;
            pauVar33 = pauVar33 + -1;
            pauVar20 = pauVar20 + 1;
            pauVar34 = pauVar34 + 1;
          } while (uVar30 < uVar15);
          uVar15 = iVar22 + (int)uVar19;
          if (iVar22 != uVar2 - iVar16) {
            uVar25 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
            uVar6 = *(undefined4 *)((long)piVar40 + uVar25);
            uVar19 = -(ulong)(uVar8 - uVar15 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar8 - uVar15) << 2;
            *(undefined4 *)((long)piVar40 + uVar25) = *(undefined4 *)((long)piVar40 + uVar19);
            *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
            if ((int)(uVar15 + 1) < (int)uVar2) {
              uVar30 = uVar8 - (uVar15 + 1);
              uVar19 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
              uVar6 = *(undefined4 *)((long)piVar40 + uVar25 + 4);
              *(undefined4 *)((long)piVar40 + uVar25 + 4) = *(undefined4 *)((long)piVar40 + uVar19);
              *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
              if ((int)(uVar15 + 2) < (int)uVar2) {
                uVar15 = uVar8 - (uVar15 + 2);
                uVar6 = *(undefined4 *)((long)piVar40 + uVar25 + 8);
                uVar19 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
                *(undefined4 *)((long)piVar40 + uVar25 + 8) =
                     *(undefined4 *)((long)piVar40 + uVar19);
                *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
              }
            }
          }
        }
      }
      if ((uVar4 == 0) && (0 < (int)uVar37)) {
        lVar17 = 0;
        lVar32 = **(long **)(param_2 + 0x48);
        piVar18 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * 4);
        do {
          piVar35 = piVar40 + lVar17;
          lVar17 = lVar17 + 1;
          *piVar18 = *piVar35;
          piVar18 = (int *)((long)piVar18 + lVar32);
        } while ((int)lVar17 < (int)uVar37);
      }
      lVar42 = lVar42 + 1;
      piVar40 = local_430;
    } while ((int)lVar42 < iVar5);
  }
  if ((piVar40 != local_420) && (piVar40 != (int *)0x0)) {
    operator_delete__(piVar40);
  }
  if ((local_848 != local_838) && (local_848 != (undefined1 *)0x0)) {
    operator_delete__(local_848);
  }
  return;
}


==================================================================

### FUNC 003481e0 (968 bytes) name=FUN_003481e0

void FUN_003481e0(int *param_1,int *param_2,long param_3,long param_4)

{
  char cVar1;
  char cVar2;
  char cVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  long lVar7;
  int *piVar8;
  int *piVar9;
  long lVar10;
  int iVar11;
  long lVar12;
  ulong uVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  
  lVar10 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar10 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar14 = param_1[1];
    param_3 = param_3 + -1;
    lVar12 = (long)iVar14;
    cVar1 = *(char *)(param_4 + param_2[-1]);
    cVar2 = *(char *)(param_4 + lVar12);
    cVar3 = *(char *)(param_4 + param_1[lVar10 >> 3]);
    piVar9 = param_2;
    piVar8 = param_1;
    if (cVar2 < cVar3) {
      if (cVar3 < cVar1) {
LAB_0034830c:
        iVar14 = *param_1;
        *param_1 = param_1[lVar10 >> 3];
        param_1[lVar10 >> 3] = iVar14;
        iVar14 = param_2[-1];
        iVar11 = param_1[1];
        lVar12 = (long)*param_1;
      }
      else {
        if (cVar1 <= cVar2) goto LAB_00348328;
LAB_00348254:
        iVar14 = *param_1;
        *param_1 = param_2[-1];
        param_2[-1] = iVar14;
        iVar11 = param_1[1];
        lVar12 = (long)*param_1;
      }
    }
    else {
      if (cVar1 <= cVar2) {
        if (cVar3 < cVar1) goto LAB_00348254;
        goto LAB_0034830c;
      }
LAB_00348328:
      iVar11 = *param_1;
      param_1[1] = iVar11;
      *param_1 = iVar14;
      iVar14 = param_2[-1];
    }
    while( true ) {
      piVar8 = piVar8 + 1;
      cVar1 = *(char *)(param_4 + iVar11);
      while (cVar1 < *(char *)(param_4 + lVar12)) {
        piVar8 = piVar8 + 1;
        iVar11 = *piVar8;
        cVar1 = *(char *)(param_4 + iVar11);
      }
      piVar9 = piVar9 + -1;
      cVar1 = *(char *)(param_4 + iVar14);
      while (*(char *)(param_4 + lVar12) < cVar1) {
        piVar9 = piVar9 + -1;
        iVar14 = *piVar9;
        cVar1 = *(char *)(param_4 + iVar14);
      }
      if (piVar9 <= piVar8) break;
      *piVar8 = iVar14;
      *piVar9 = iVar11;
      iVar14 = piVar9[-1];
      iVar11 = piVar8[1];
      lVar12 = (long)*param_1;
    }
    FUN_003481e0(piVar8,param_2,param_3,param_4);
    lVar10 = (long)piVar8 - (long)param_1;
    param_2 = piVar8;
  }
  lVar10 = lVar10 >> 2;
  lVar16 = lVar10 + -2 >> 1;
  piVar8 = param_1 + lVar16;
  lVar12 = lVar16;
  do {
    iVar14 = *piVar8;
    lVar4 = lVar12;
    piVar9 = piVar8;
    while (lVar4 < lVar10 + -1 >> 1) {
      lVar7 = lVar4 + 1;
      lVar6 = lVar7 * 2;
      piVar9 = param_1 + lVar7 * 2;
      iVar11 = param_1[lVar7 * 2];
      if (*(char *)(param_4 + iVar11) < *(char *)(param_4 + piVar9[-1])) {
        lVar6 = lVar6 + -1;
        iVar11 = param_1[lVar6];
        piVar9 = param_1 + lVar6;
      }
      param_1[lVar4] = iVar11;
      lVar4 = lVar6;
    }
    if ((lVar16 == lVar4) && (((uint)lVar10 & 1) != 1)) {
      lVar7 = lVar4 + 1;
      lVar4 = lVar7 * 2 + -1;
      *piVar9 = param_1[lVar7 * 2 + -1];
      piVar9 = param_1 + lVar4;
    }
    if (lVar12 < lVar4) {
      lVar7 = lVar4 + -1 >> 1;
      iVar11 = param_1[lVar7];
      if (*(char *)(param_4 + iVar11) < *(char *)(param_4 + iVar14)) {
        do {
          param_1[lVar4] = iVar11;
          piVar9 = param_1 + lVar7;
          if (lVar7 <= lVar12) break;
          lVar6 = (lVar7 + -1) / 2;
          iVar11 = param_1[lVar6];
          lVar4 = lVar7;
          lVar7 = lVar6;
        } while (*(char *)(param_4 + iVar11) < *(char *)(param_4 + iVar14));
      }
      *piVar9 = iVar14;
      if (lVar12 == 0) break;
    }
    else {
      *piVar9 = iVar14;
    }
    piVar8 = piVar8 + -1;
    lVar12 = lVar12 + -1;
  } while( true );
LAB_003483a0:
  param_2 = param_2 + -1;
  iVar14 = *param_2;
  *param_2 = *param_1;
  uVar15 = (long)param_2 - (long)param_1 >> 2;
  lVar10 = (long)(uVar15 - 1) / 2;
  if (lVar10 < 1) {
    uVar5 = uVar15 & 1;
    piVar8 = param_1;
    if ((uVar15 & 1) == 0) goto LAB_00348418;
  }
  else {
    uVar13 = 0;
    do {
      lVar12 = uVar13 + 1;
      uVar5 = lVar12 * 2;
      piVar8 = param_1 + lVar12 * 2;
      iVar11 = param_1[lVar12 * 2];
      if (*(char *)(param_4 + iVar11) < *(char *)(param_4 + piVar8[-1])) {
        uVar5 = uVar5 - 1;
        iVar11 = param_1[uVar5];
        piVar8 = param_1 + uVar5;
      }
      param_1[uVar13] = iVar11;
      uVar13 = uVar5;
    } while ((long)uVar5 < lVar10);
    if ((uVar15 & 1) == 0) {
LAB_00348418:
      if (uVar5 == (long)(uVar15 - 2) / 2) {
        lVar10 = uVar5 + 1;
        uVar5 = lVar10 * 2 - 1;
        *piVar8 = param_1[lVar10 * 2 + -1];
        piVar8 = param_1 + uVar5;
      }
      else if ((long)uVar5 < 1) goto LAB_00348430;
    }
    uVar15 = (long)(uVar5 - 1) >> 1;
    iVar11 = param_1[uVar15];
    if (*(char *)(param_4 + iVar11) < *(char *)(param_4 + iVar14)) {
      do {
        param_1[uVar5] = iVar11;
        piVar8 = param_1 + uVar15;
        uVar13 = (long)(uVar15 - 1) >> 1;
        if (uVar15 == 0) break;
        iVar11 = param_1[uVar13];
        uVar5 = uVar15;
        uVar15 = uVar13;
      } while (*(char *)(param_4 + iVar11) < *(char *)(param_4 + iVar14));
    }
  }
LAB_00348430:
  *piVar8 = iVar14;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_003483a0;
}


==================================================================

### FUNC 003485b0 (2388 bytes) name=FUN_003485b0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_003485b0(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  char cVar7;
  uint uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int *piVar11;
  undefined1 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  int *piVar18;
  ulong uVar19;
  undefined1 (*pauVar20) [16];
  char *pcVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  ulong uVar25;
  size_t sVar26;
  int *piVar27;
  undefined1 (*pauVar28) [16];
  int *piVar29;
  uint uVar30;
  ulong uVar31;
  long lVar32;
  undefined1 (*pauVar33) [16];
  undefined1 (*pauVar34) [16];
  int *piVar35;
  int *piVar36;
  uint uVar37;
  ulong uVar38;
  ulong uVar39;
  int *piVar40;
  undefined1 *puVar41;
  long lVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined8 local_858;
  undefined8 local_850;
  undefined1 *local_848;
  ulong local_840;
  undefined1 local_838 [1032];
  int *local_430;
  ulong local_428;
  int local_420 [264];
  
  local_430 = local_420;
  local_428 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_848 = local_838;
  local_840 = 0x408;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_858 = 0;
    local_850 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_858,0x14);
    uVar14 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar13 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar21 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar21 = uVar13;
    *(undefined8 *)(pcVar21 + 8) = uVar14;
    cv::error(-0xd7,(String *)&local_858,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = signed char]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_858);
  }
  if (uVar4 == 0) {
    uVar38 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar31 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar23 = uVar31;
    if (local_840 < uVar31) {
      if (local_848 != local_838) {
        if (local_848 != (undefined1 *)0x0) {
          operator_delete__(local_848);
        }
        local_848 = local_838;
        local_840 = 0x408;
      }
      uVar23 = local_840;
      if (0x408 < uVar31) {
        local_848 = operator_new__(uVar31);
        uVar23 = uVar31;
      }
    }
    local_840 = uVar23;
    if (local_428 < uVar31) {
      if (local_430 != local_420) {
        if (local_430 != (int *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
      if (uVar31 < 0x109) {
        piVar11 = local_420;
        puVar12 = local_848;
      }
      else {
        uVar23 = uVar31 << 2;
        if (0x1fc0000000000000 < uVar31) {
          uVar23 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar23);
        local_428 = uVar31;
        piVar11 = local_430;
        puVar12 = local_848;
      }
    }
    else {
      local_428 = uVar31;
      piVar11 = local_430;
      puVar12 = local_848;
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar38 = (ulong)*(uint *)(param_1 + 0xc);
    piVar11 = local_430;
    puVar12 = local_848;
  }
  piVar40 = piVar11;
  local_848 = puVar12;
  if (0 < iVar5) {
    uVar23 = -(uVar38 >> 0x1f) & 0xfffffffc00000000 | uVar38 << 2;
    uVar37 = (uint)uVar38;
    uVar2 = (int)uVar37 / 2;
    uVar39 = (ulong)uVar2;
    uVar8 = uVar37 - 1;
    uVar31 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
    uVar38 = -(ulong)(uVar37 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 2) << 2;
    uVar3 = uVar37;
    if ((int)uVar37 < 1) {
      uVar3 = 1;
    }
    uVar24 = -(ulong)(uVar37 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 3) << 2;
    lVar42 = 0;
    do {
      if (uVar4 == 0) {
        lVar17 = 0;
        piVar40 = piVar11;
        puVar41 = puVar12;
        if (0 < (int)uVar37) {
          do {
            puVar12[lVar17] =
                 *(undefined1 *)
                  (*(long *)(param_1 + 0x10) + lVar17 * **(long **)(param_1 + 0x48) + lVar42);
            lVar17 = lVar17 + 1;
          } while ((int)lVar17 < (int)uVar37);
          uVar15 = -((uint)((ulong)piVar11 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
joined_r0x00348c1c:
          uVar30 = uVar3;
          if (((int)uVar3 < 8) || (uVar25 = 0, uVar30 = uVar15, uVar15 != 0)) {
            uVar15 = uVar30;
            *piVar40 = 0;
            if ((uVar15 == 1) ||
               ((((piVar40[1] = 1, uVar15 == 2 || (piVar40[2] = 2, uVar15 == 3)) ||
                 (piVar40[3] = 3, uVar15 == 4)) || (piVar40[4] = 4, uVar15 == 5)))) {
              uVar25 = (ulong)uVar15;
            }
            else {
              piVar40[5] = 5;
              if (uVar15 == 7) {
                uVar25 = 7;
                piVar40[6] = 6;
              }
              else {
                uVar25 = 6;
              }
            }
            if (uVar15 == uVar3) goto LAB_00348874;
          }
          uVar30 = uVar8;
          if ((int)uVar37 < 1) {
            uVar30 = 0;
          }
          uVar1 = ((uVar3 - uVar15) - 4 >> 2) + 1;
          iVar16 = uVar1 * 4;
          if (2 < uVar30 - uVar15) {
            iVar22 = (int)uVar25;
            uVar30 = 0;
            auVar43._0_4_ = iVar22 + (int)_DAT_00348f60;
            auVar43._4_4_ = iVar22 + (int)((ulong)_DAT_00348f60 >> 0x20);
            auVar43._8_4_ = iVar22 + (int)_UNK_00348f68;
            auVar43._12_4_ = iVar22 + (int)((ulong)_UNK_00348f68 >> 0x20);
            piVar18 = piVar40 + uVar15;
            do {
              *(long *)(piVar18 + 2) = auVar43._8_8_;
              *(long *)piVar18 = auVar43._0_8_;
              uVar30 = uVar30 + 1;
              auVar44._0_4_ = auVar43._0_4_ + 4;
              auVar44._4_4_ = auVar43._4_4_ + 4;
              auVar44._8_4_ = auVar43._8_4_ + 4;
              auVar44._12_4_ = auVar43._12_4_ + 4;
              piVar18 = piVar18 + 4;
              auVar43 = auVar44;
            } while (uVar30 < uVar1);
            uVar25 = (ulong)(uint)(iVar22 + iVar16);
            if (iVar16 == uVar3 - uVar15) goto LAB_00348874;
          }
          uVar19 = -(uVar25 >> 0x1f) & 0xfffffffc00000000 | uVar25 << 2;
          iVar16 = (int)uVar25;
          *(int *)((long)piVar40 + uVar19) = iVar16;
          if (iVar16 + 1 < (int)uVar37) {
            *(int *)((long)piVar40 + uVar19 + 4) = iVar16 + 1;
            if (iVar16 + 2 < (int)uVar37) {
              *(int *)((long)piVar40 + uVar19 + 8) = iVar16 + 2;
            }
          }
        }
      }
      else {
        puVar41 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar42 * *(long *)(param_1 + 0x50));
        piVar40 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar37) {
          uVar15 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
          goto joined_r0x00348c1c;
        }
      }
LAB_00348874:
      piVar18 = (int *)((long)piVar40 + uVar23);
      if (piVar40 != piVar18) {
        FUN_003481e0(piVar40,piVar18,(0x3f - LZCOUNT((long)uVar23 >> 2)) * 2,puVar41);
        if ((long)uVar23 < 0x44) {
          piVar35 = piVar40 + 1;
          if (piVar18 != piVar35) {
            iVar16 = *piVar35;
            lVar17 = (long)iVar16;
            cVar7 = puVar41[lVar17];
            if ((char)puVar41[*piVar40] <= cVar7) goto LAB_00348c9c;
            do {
              sVar26 = (long)piVar35 - (long)piVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)piVar35 + (4 - sVar26)),piVar40,sVar26);
              }
              *piVar40 = iVar16;
              while( true ) {
                piVar35 = piVar35 + 1;
                if (piVar18 == piVar35) goto LAB_00348948;
                iVar16 = *piVar35;
                lVar17 = (long)iVar16;
                cVar7 = puVar41[lVar17];
                if (cVar7 < (char)puVar41[*piVar40]) break;
LAB_00348c9c:
                iVar22 = piVar35[-1];
                piVar36 = piVar35;
                if (cVar7 < (char)puVar41[iVar22]) {
                  do {
                    piVar27 = piVar36 + -1;
                    *piVar36 = iVar22;
                    iVar22 = piVar36[-2];
                    piVar36 = piVar27;
                  } while ((char)puVar41[lVar17] < (char)puVar41[iVar22]);
                  *piVar27 = iVar16;
                }
                else {
                  *piVar35 = iVar16;
                }
              }
            } while( true );
          }
        }
        else {
          piVar36 = piVar40 + 0x10;
          piVar35 = piVar40 + 1;
          do {
            iVar16 = *piVar35;
            if ((char)puVar41[iVar16] < (char)puVar41[*piVar40]) {
              sVar26 = (long)piVar35 - (long)piVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)piVar35 + (4 - sVar26)),piVar40,sVar26);
              }
              *piVar40 = iVar16;
            }
            else {
              iVar22 = piVar35[-1];
              piVar27 = piVar35;
              if ((char)puVar41[iVar16] < (char)puVar41[iVar22]) {
                do {
                  piVar29 = piVar27 + -1;
                  *piVar27 = iVar22;
                  iVar22 = piVar27[-2];
                  piVar27 = piVar29;
                } while ((char)puVar41[iVar16] < (char)puVar41[iVar22]);
                *piVar29 = iVar16;
              }
              else {
                *piVar35 = iVar16;
              }
            }
            piVar35 = piVar35 + 1;
          } while (piVar36 != piVar35);
          for (; piVar18 != piVar36; piVar36 = piVar36 + 1) {
            while( true ) {
              iVar16 = piVar36[-1];
              iVar22 = *piVar36;
              piVar35 = piVar36;
              if ((char)puVar41[iVar22] < (char)puVar41[iVar16]) break;
              piVar35 = piVar36 + 1;
              *piVar36 = iVar22;
              piVar36 = piVar35;
              if (piVar18 == piVar35) goto LAB_00348948;
            }
            do {
              piVar27 = piVar35 + -1;
              *piVar35 = iVar16;
              iVar16 = piVar35[-2];
              piVar35 = piVar27;
            } while ((char)puVar41[iVar22] < (char)puVar41[iVar16]);
            *piVar27 = iVar22;
          }
        }
      }
LAB_00348948:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar23 + uVar39 * -4) < (long)(uVar39 * 4) && 0 < (long)uVar23) {
          lVar17 = 0;
          piVar18 = (int *)((long)piVar40 + uVar31);
          do {
            iVar16 = piVar40[lVar17];
            piVar40[lVar17] = *piVar18;
            lVar17 = lVar17 + 1;
            *piVar18 = iVar16;
            piVar18 = piVar18 + -1;
          } while ((int)lVar17 < (int)uVar2);
        }
        else {
          uVar15 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
          uVar25 = uVar39;
          if (uVar15 < uVar2) {
            uVar25 = (ulong)uVar15;
          }
          iVar16 = (int)uVar25;
          uVar19 = uVar25;
          if (iVar16 != 0) {
            iVar22 = *piVar40;
            *piVar40 = *(int *)((long)piVar40 + uVar31);
            *(int *)((long)piVar40 + uVar31) = iVar22;
            if (iVar16 != 1) {
              iVar22 = piVar40[1];
              piVar40[1] = *(int *)((long)piVar40 + uVar38);
              *(int *)((long)piVar40 + uVar38) = iVar22;
              if (iVar16 == 3) {
                iVar22 = piVar40[2];
                piVar40[2] = *(int *)((long)piVar40 + uVar24);
                *(int *)((long)piVar40 + uVar24) = iVar22;
              }
              else {
                uVar19 = 2;
              }
            }
          }
          uVar15 = ((uVar2 - iVar16) - 4 >> 2) + 1;
          pauVar28 = (undefined1 (*) [16])((long)piVar40 + (uVar23 - 0xc) + ~uVar25 * 4);
          uVar30 = 0;
          iVar22 = uVar15 * 4;
          pauVar20 = (undefined1 (*) [16])(piVar40 + uVar25);
          pauVar33 = pauVar28;
          pauVar34 = (undefined1 (*) [16])(piVar40 + uVar25);
          do {
            auVar43 = *pauVar28;
            uVar30 = uVar30 + 1;
            pauVar28 = pauVar28 + -1;
            auVar9._8_8_ = _UNK_00348f78;
            auVar9._0_8_ = _DAT_00348f70;
            auVar44 = a64_TBL(ZEXT816(0),auVar43,auVar9);
            auVar10._8_8_ = _UNK_00348f78;
            auVar10._0_8_ = _DAT_00348f70;
            auVar43 = a64_TBL(ZEXT816(0),*pauVar20,auVar10);
            *(long *)((long)*pauVar34 + 8) = auVar44._8_8_;
            *(long *)*pauVar34 = auVar44._0_8_;
            *(long *)(*pauVar33 + 8) = auVar43._8_8_;
            *(long *)*pauVar33 = auVar43._0_8_;
            pauVar33 = pauVar33 + -1;
            pauVar20 = pauVar20 + 1;
            pauVar34 = pauVar34 + 1;
          } while (uVar30 < uVar15);
          uVar15 = iVar22 + (int)uVar19;
          if (iVar22 != uVar2 - iVar16) {
            uVar25 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
            uVar6 = *(undefined4 *)((long)piVar40 + uVar25);
            uVar19 = -(ulong)(uVar8 - uVar15 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar8 - uVar15) << 2;
            *(undefined4 *)((long)piVar40 + uVar25) = *(undefined4 *)((long)piVar40 + uVar19);
            *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
            if ((int)(uVar15 + 1) < (int)uVar2) {
              uVar30 = uVar8 - (uVar15 + 1);
              uVar19 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
              uVar6 = *(undefined4 *)((long)piVar40 + uVar25 + 4);
              *(undefined4 *)((long)piVar40 + uVar25 + 4) = *(undefined4 *)((long)piVar40 + uVar19);
              *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
              if ((int)(uVar15 + 2) < (int)uVar2) {
                uVar15 = uVar8 - (uVar15 + 2);
                uVar6 = *(undefined4 *)((long)piVar40 + uVar25 + 8);
                uVar19 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
                *(undefined4 *)((long)piVar40 + uVar25 + 8) =
                     *(undefined4 *)((long)piVar40 + uVar19);
                *(undefined4 *)((long)piVar40 + uVar19) = uVar6;
              }
            }
          }
        }
      }
      if ((uVar4 == 0) && (0 < (int)uVar37)) {
        lVar17 = 0;
        lVar32 = **(long **)(param_2 + 0x48);
        piVar18 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * 4);
        do {
          piVar35 = piVar40 + lVar17;
          lVar17 = lVar17 + 1;
          *piVar18 = *piVar35;
          piVar18 = (int *)((long)piVar18 + lVar32);
        } while ((int)lVar17 < (int)uVar37);
      }
      lVar42 = lVar42 + 1;
      piVar40 = local_430;
    } while ((int)lVar42 < iVar5);
  }
  if ((piVar40 != local_420) && (piVar40 != (int *)0x0)) {
    operator_delete__(piVar40);
  }
  if ((local_848 != local_838) && (local_848 != (undefined1 *)0x0)) {
    operator_delete__(local_848);
  }
  return;
}


==================================================================

### FUNC 00348f80 (932 bytes) name=FUN_00348f80

void FUN_00348f80(int *param_1,int *param_2,long param_3,long param_4)

{
  ushort uVar1;
  ushort uVar2;
  long lVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  int *piVar7;
  int iVar8;
  int *piVar9;
  ulong uVar10;
  ushort uVar11;
  long lVar12;
  long lVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  
  lVar12 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar12 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar14 = param_1[1];
    param_3 = param_3 + -1;
    uVar11 = *(ushort *)(param_4 + (long)iVar14 * 2);
    uVar1 = *(ushort *)(param_4 + (long)param_2[-1] * 2);
    uVar2 = *(ushort *)(param_4 + (long)param_1[lVar12 >> 3] * 2);
    piVar9 = param_2;
    piVar7 = param_1;
    if (uVar11 < uVar2) {
      if (uVar2 < uVar1) {
LAB_003490ac:
        iVar14 = *param_1;
        *param_1 = param_1[lVar12 >> 3];
        param_1[lVar12 >> 3] = iVar14;
        iVar14 = param_2[-1];
        iVar8 = param_1[1];
        uVar11 = *(ushort *)(param_4 + (long)*param_1 * 2);
      }
      else {
        if (uVar1 <= uVar11) goto LAB_003490cc;
LAB_00348ff0:
        iVar14 = *param_1;
        *param_1 = param_2[-1];
        param_2[-1] = iVar14;
        iVar8 = param_1[1];
        uVar11 = *(ushort *)(param_4 + (long)*param_1 * 2);
      }
    }
    else {
      if (uVar1 <= uVar11) {
        if (uVar2 < uVar1) goto LAB_00348ff0;
        goto LAB_003490ac;
      }
LAB_003490cc:
      iVar8 = *param_1;
      param_1[1] = iVar8;
      *param_1 = iVar14;
      iVar14 = param_2[-1];
    }
    while( true ) {
      piVar7 = piVar7 + 1;
      uVar1 = *(ushort *)(param_4 + (long)iVar8 * 2);
      while (uVar1 < uVar11) {
        piVar7 = piVar7 + 1;
        iVar8 = *piVar7;
        uVar1 = *(ushort *)(param_4 + (long)iVar8 * 2);
      }
      piVar9 = piVar9 + -1;
      uVar1 = *(ushort *)(param_4 + (long)iVar14 * 2);
      while (uVar11 < uVar1) {
        piVar9 = piVar9 + -1;
        iVar14 = *piVar9;
        uVar1 = *(ushort *)(param_4 + (long)iVar14 * 2);
      }
      if (piVar9 <= piVar7) break;
      *piVar7 = iVar14;
      *piVar9 = iVar8;
      iVar14 = piVar9[-1];
      iVar8 = piVar7[1];
      uVar11 = *(ushort *)(param_4 + (long)*param_1 * 2);
    }
    FUN_00348f80(piVar7,param_2,param_3,param_4);
    lVar12 = (long)piVar7 - (long)param_1;
    param_2 = piVar7;
  }
  lVar12 = lVar12 >> 2;
  lVar16 = lVar12 + -2 >> 1;
  piVar7 = param_1 + lVar16;
  lVar13 = lVar16;
  do {
    iVar14 = *piVar7;
    lVar3 = lVar13;
    piVar9 = piVar7;
    while (lVar3 < lVar12 + -1 >> 1) {
      lVar6 = lVar3 + 1;
      lVar5 = lVar6 * 2;
      piVar9 = param_1 + lVar6 * 2;
      iVar8 = param_1[lVar6 * 2];
      if (*(ushort *)(param_4 + (long)iVar8 * 2) < *(ushort *)(param_4 + (long)piVar9[-1] * 2)) {
        lVar5 = lVar5 + -1;
        iVar8 = param_1[lVar5];
        piVar9 = param_1 + lVar5;
      }
      param_1[lVar3] = iVar8;
      lVar3 = lVar5;
    }
    if ((lVar16 == lVar3) && (((uint)lVar12 & 1) != 1)) {
      lVar6 = lVar3 + 1;
      lVar3 = lVar6 * 2 + -1;
      *piVar9 = param_1[lVar6 * 2 + -1];
      piVar9 = param_1 + lVar3;
    }
    if (lVar13 < lVar3) {
      lVar6 = lVar3 + -1;
      uVar1 = *(ushort *)(param_4 + (long)iVar14 * 2);
      do {
        lVar5 = lVar6 >> 1;
        if (uVar1 <= *(ushort *)(param_4 + (long)param_1[lVar5] * 2)) break;
        param_1[lVar3] = param_1[lVar5];
        piVar9 = param_1 + lVar5;
        lVar6 = (lVar5 + -1) - (lVar5 + -1 >> 0x3f);
                    /* catch() { ... } // from try @ 003492e8 with catch @ 00349298
                       catch() { ... } // from try @ 00349464 with catch @ 00349298
                       catch() { ... } // from try @ 0034957c with catch @ 00349298
                       catch() { ... } // from try @ 00349634 with catch @ 00349298
                       catch() { ... } // from try @ 0034a9e4 with catch @ 00349298
                       catch() { ... } // from try @ 0034ab24 with catch @ 00349298
                       catch() { ... } // from try @ 0034ae08 with catch @ 00349298
                       catch() { ... } // from try @ 0034afb4 with catch @ 00349298
                       catch() { ... } // from try @ 0034afec with catch @ 00349298
                       catch() { ... } // from try @ 0034b0ec with catch @ 00349298
                       catch() { ... } // from try @ 0034b188 with catch @ 00349298
                       catch() { ... } // from try @ 0034b2b0 with catch @ 00349298
                       catch() { ... } // from try @ 0034b2d4 with catch @ 00349298 */
        lVar3 = lVar5;
      } while (lVar13 < lVar5);
      *piVar9 = iVar14;
      if (lVar13 == 0) break;
    }
    else {
      *piVar9 = iVar14;
    }
    piVar7 = piVar7 + -1;
    lVar13 = lVar13 + -1;
  } while( true );
LAB_00349140:
  param_2 = param_2 + -1;
  iVar14 = *param_2;
  *param_2 = *param_1;
  uVar15 = (long)param_2 - (long)param_1 >> 2;
  lVar12 = (long)(uVar15 - 1) / 2;
  if (lVar12 < 1) {
    uVar4 = uVar15 & 1;
    piVar7 = param_1;
    if ((uVar15 & 1) == 0) goto LAB_003491b8;
  }
  else {
    uVar10 = 0;
    do {
      lVar13 = uVar10 + 1;
      uVar4 = lVar13 * 2;
      piVar7 = param_1 + lVar13 * 2;
      iVar8 = param_1[lVar13 * 2];
      if (*(ushort *)(param_4 + (long)iVar8 * 2) < *(ushort *)(param_4 + (long)piVar7[-1] * 2)) {
        uVar4 = uVar4 - 1;
        iVar8 = param_1[uVar4];
        piVar7 = param_1 + uVar4;
      }
      param_1[uVar10] = iVar8;
      uVar10 = uVar4;
    } while ((long)uVar4 < lVar12);
    if ((uVar15 & 1) == 0) {
LAB_003491b8:
      if (uVar4 == (long)(uVar15 - 2) / 2) {
        lVar12 = uVar4 + 1;
        uVar4 = lVar12 * 2 - 1;
        *piVar7 = param_1[lVar12 * 2 + -1];
        piVar7 = param_1 + uVar4;
      }
      else if ((long)uVar4 < 1) goto LAB_003491d0;
    }
    uVar1 = *(ushort *)(param_4 + (long)iVar14 * 2);
    uVar15 = (long)(uVar4 - 1) >> 1;
    iVar8 = param_1[uVar15];
    uVar2 = *(ushort *)(param_4 + (long)iVar8 * 2);
    while (uVar10 = uVar15, uVar2 < uVar1) {
      param_1[uVar4] = iVar8;
      piVar7 = param_1 + uVar10;
                    /* try { // try from 003492e8 to 00449427 has its CatchHandler @ 00349298 */
      uVar15 = (long)(uVar10 - 1) >> 1;
      if (uVar10 == 0) break;
      iVar8 = param_1[uVar15];
      uVar4 = uVar10;
      uVar2 = *(ushort *)(param_4 + (long)iVar8 * 2);
    }
  }
LAB_003491d0:
  *piVar7 = iVar14;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_00349140;
}


==================================================================

### FUNC 00349330 (2360 bytes) name=FUN_00349330

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_00349330(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  uint uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int *piVar11;
  undefined1 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  int *piVar18;
  ulong uVar19;
  undefined1 (*pauVar20) [16];
  int *piVar21;
  char *pcVar22;
  ushort uVar23;
  int iVar24;
  ulong uVar25;
  ulong uVar26;
  undefined2 *puVar27;
  ulong uVar28;
  size_t sVar29;
  undefined1 (*pauVar30) [16];
  int *piVar31;
  uint uVar32;
  ulong uVar33;
  long lVar34;
  undefined1 (*pauVar35) [16];
  undefined1 (*pauVar36) [16];
  int *piVar37;
  int *piVar38;
  uint uVar39;
  ulong uVar40;
  ulong uVar41;
  int *piVar42;
  undefined1 *puVar43;
  long lVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined8 local_860;
  undefined8 local_858;
  undefined1 *local_850;
  ulong local_848;
  undefined1 local_840 [1040];
  int *local_430;
  ulong local_428;
  int local_420 [264];
  
  local_430 = local_420;
  local_850 = local_840;
  local_428 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_848 = 0x208;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_860 = 0;
    local_858 = 0;
    pcVar22 = (char *)cv::String::allocate((String *)&local_860,0x14);
    uVar14 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar13 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar22 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar22 = uVar13;
    *(undefined8 *)(pcVar22 + 8) = uVar14;
    cv::error(-0xd7,(String *)&local_860,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = short unsigned int]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_860);
  }
  if (uVar4 == 0) {
    uVar40 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar33 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar25 = uVar33;
    if (local_848 < uVar33) {
      if (local_850 != local_840) {
        if (local_850 != (undefined1 *)0x0) {
          operator_delete__(local_850);
        }
        local_850 = local_840;
        local_848 = 0x208;
      }
      uVar25 = local_848;
      if (0x208 < uVar33) {
        uVar25 = uVar33 << 1;
        if (0x3f80000000000000 < uVar33) {
          uVar25 = 0xffffffffffffffff;
        }
        local_850 = operator_new__(uVar25);
        uVar25 = uVar33;
      }
    }
    local_848 = uVar25;
    piVar11 = local_430;
    puVar12 = local_850;
    if (local_428 < uVar33) {
      if (local_430 != local_420) {
        if (local_430 != (int *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
      if (uVar33 < 0x109) {
        piVar11 = local_420;
        puVar12 = local_850;
        uVar33 = local_428;
      }
      else {
        uVar25 = uVar33 << 2;
        if (0x1fc0000000000000 < uVar33) {
          uVar25 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar25);
        piVar11 = local_430;
        puVar12 = local_850;
      }
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar40 = (ulong)*(uint *)(param_1 + 0xc);
    piVar11 = local_430;
    puVar12 = local_850;
    uVar33 = local_428;
  }
  local_428 = uVar33;
  piVar42 = piVar11;
  local_850 = puVar12;
  if (0 < iVar5) {
    uVar25 = -(uVar40 >> 0x1f) & 0xfffffffc00000000 | uVar40 << 2;
    uVar39 = (uint)uVar40;
    uVar2 = (int)uVar39 / 2;
    uVar41 = (ulong)uVar2;
    uVar8 = uVar39 - 1;
    uVar33 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
    uVar40 = -(ulong)(uVar39 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar39 - 2) << 2;
    uVar3 = uVar39;
    if ((int)uVar39 < 1) {
      uVar3 = 1;
    }
    uVar26 = -(ulong)(uVar39 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar39 - 3) << 2;
                    /* try { // try from 00349454 to 00449457 has its CatchHandler @ 0034b170 */
                    /* try { // try from 00349464 to 00449523 has its CatchHandler @ 00349298 */
    lVar44 = 0;
    do {
      if (uVar4 == 0) {
        piVar42 = piVar11;
        puVar43 = puVar12;
        if (0 < (int)uVar39) {
          lVar17 = 0;
          lVar34 = **(long **)(param_1 + 0x48);
          puVar27 = (undefined2 *)(*(long *)(param_1 + 0x10) + lVar44 * 2);
          do {
            uVar7 = *puVar27;
            puVar27 = (undefined2 *)((long)puVar27 + lVar34);
            *(undefined2 *)(puVar12 + lVar17 * 2) = uVar7;
            lVar17 = lVar17 + 1;
          } while ((int)lVar17 < (int)uVar39);
          uVar15 = -((uint)((ulong)piVar11 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
joined_r0x00349930:
          uVar32 = uVar3;
          if (((int)uVar3 < 8) || (uVar28 = 0, uVar32 = uVar15, uVar15 != 0)) {
            uVar15 = uVar32;
            *piVar42 = 0;
            if ((uVar15 == 1) ||
               ((((piVar42[1] = 1, uVar15 == 2 || (piVar42[2] = 2, uVar15 == 3)) ||
                 (piVar42[3] = 3, uVar15 == 4)) || (piVar42[4] = 4, uVar15 == 5)))) {
              uVar28 = (ulong)uVar15;
            }
            else {
              piVar42[5] = 5;
              if (uVar15 == 7) {
                uVar28 = 7;
                piVar42[6] = 6;
              }
              else {
                uVar28 = 6;
              }
            }
            if (uVar15 == uVar3) goto LAB_003495f8;
          }
                    /* try { // try from 0034956c to 0044956f has its CatchHandler @ 0034b2a0 */
          uVar32 = uVar8;
          if ((int)uVar39 < 1) {
            uVar32 = 0;
          }
                    /* try { // try from 0034957c to 004495db has its CatchHandler @ 00349298 */
          uVar1 = ((uVar3 - uVar15) - 4 >> 2) + 1;
          iVar16 = uVar1 * 4;
          if (2 < uVar32 - uVar15) {
            iVar24 = (int)uVar28;
            uVar32 = 0;
            auVar45._0_4_ = iVar24 + (int)_DAT_00349cc0;
            auVar45._4_4_ = iVar24 + (int)((ulong)_DAT_00349cc0 >> 0x20);
            auVar45._8_4_ = iVar24 + (int)_UNK_00349cc8;
            auVar45._12_4_ = iVar24 + (int)((ulong)_UNK_00349cc8 >> 0x20);
            piVar18 = piVar42 + uVar15;
            do {
              *(long *)(piVar18 + 2) = auVar45._8_8_;
              *(long *)piVar18 = auVar45._0_8_;
              uVar32 = uVar32 + 1;
              auVar46._0_4_ = auVar45._0_4_ + 4;
              auVar46._4_4_ = auVar45._4_4_ + 4;
              auVar46._8_4_ = auVar45._8_4_ + 4;
              auVar46._12_4_ = auVar45._12_4_ + 4;
              piVar18 = piVar18 + 4;
              auVar45 = auVar46;
            } while (uVar32 < uVar1);
            uVar28 = (ulong)(uint)(iVar24 + iVar16);
            if (iVar16 == uVar3 - uVar15) goto LAB_003495f8;
          }
          uVar19 = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
          iVar16 = (int)uVar28;
          *(int *)((long)piVar42 + uVar19) = iVar16;
          if (iVar16 + 1 < (int)uVar39) {
            *(int *)((long)piVar42 + uVar19 + 4) = iVar16 + 1;
            if (iVar16 + 2 < (int)uVar39) {
              *(int *)((long)piVar42 + uVar19 + 8) = iVar16 + 2;
            }
          }
        }
      }
      else {
        puVar43 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar44 * *(long *)(param_1 + 0x50));
        piVar42 = (int *)(*(long *)(param_2 + 0x10) + lVar44 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar39) {
          uVar15 = -((uint)((ulong)piVar42 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
          goto joined_r0x00349930;
        }
      }
LAB_003495f8:
      piVar18 = (int *)((long)piVar42 + uVar25);
      if (piVar42 != piVar18) {
        FUN_00348f80(piVar42,piVar18,(0x3f - LZCOUNT((long)uVar25 >> 2)) * 2,puVar43);
        piVar37 = piVar42;
        if ((long)uVar25 < 0x44) {
                    /* try { // try from 0034962c to 0044962f has its CatchHandler @ 0034b2c4 */
          while (piVar38 = piVar37 + 1, piVar18 != piVar38) {
                    /* try { // try from 00349634 to 00449653 has its CatchHandler @ 00349298 */
            iVar16 = *piVar38;
            uVar23 = *(ushort *)(puVar43 + (long)iVar16 * 2);
            if (uVar23 < *(ushort *)(puVar43 + (long)*piVar42 * 2)) {
              sVar29 = (long)piVar38 - (long)piVar42;
              if ((long)sVar29 >> 2 != 0) {
                memmove((void *)((long)piVar38 + (4 - sVar29)),piVar42,sVar29);
              }
              *piVar42 = iVar16;
              piVar37 = piVar38;
            }
            else {
              iVar24 = *piVar37;
              piVar37 = piVar38;
              if (uVar23 < *(ushort *)(puVar43 + (long)iVar24 * 2)) {
                do {
                  piVar31 = piVar37 + -1;
                  *piVar37 = iVar24;
                  iVar24 = piVar37[-2];
                  piVar37 = piVar31;
                } while (uVar23 < *(ushort *)(puVar43 + (long)iVar24 * 2));
                *piVar31 = iVar16;
                piVar37 = piVar38;
              }
              else {
                *piVar38 = iVar16;
              }
            }
          }
        }
        else {
          piVar37 = piVar42 + 0x10;
          piVar38 = piVar42 + 1;
          do {
            iVar16 = *piVar38;
            uVar23 = *(ushort *)(puVar43 + (long)iVar16 * 2);
            if (uVar23 < *(ushort *)(puVar43 + (long)*piVar42 * 2)) {
              sVar29 = (long)piVar38 - (long)piVar42;
              if ((long)sVar29 >> 2 != 0) {
                memmove((void *)((long)piVar38 + (4 - sVar29)),piVar42,sVar29);
              }
              *piVar42 = iVar16;
            }
            else {
              iVar24 = piVar38[-1];
              piVar31 = piVar38;
              if (uVar23 < *(ushort *)(puVar43 + (long)iVar24 * 2)) {
                do {
                  piVar21 = piVar31 + -1;
                  *piVar31 = iVar24;
                  iVar24 = piVar31[-2];
                  piVar31 = piVar21;
                } while (uVar23 < *(ushort *)(puVar43 + (long)iVar24 * 2));
                *piVar21 = iVar16;
              }
              else {
                *piVar38 = iVar16;
              }
            }
            piVar38 = piVar38 + 1;
          } while (piVar37 != piVar38);
          if (piVar18 != piVar37) {
            iVar16 = piVar42[0xf];
            iVar24 = *piVar37;
            uVar23 = *(ushort *)(puVar43 + (long)iVar24 * 2);
            piVar38 = piVar42 + 0xf;
            if (uVar23 < *(ushort *)(puVar43 + (long)iVar16 * 2)) goto LAB_003499b0;
            do {
              *piVar37 = iVar24;
              while( true ) {
                piVar37 = piVar37 + 1;
                if (piVar18 == piVar37) goto LAB_00349668;
                iVar16 = piVar37[-1];
                iVar24 = *piVar37;
                uVar23 = *(ushort *)(puVar43 + (long)iVar24 * 2);
                piVar38 = piVar37 + -1;
                if (*(ushort *)(puVar43 + (long)iVar16 * 2) <= uVar23) break;
LAB_003499b0:
                do {
                  piVar31 = piVar38;
                  piVar31[1] = iVar16;
                  iVar16 = piVar31[-1];
                  piVar38 = piVar31 + -1;
                } while (uVar23 < *(ushort *)(puVar43 + (long)iVar16 * 2));
                *piVar31 = iVar24;
              }
            } while( true );
          }
        }
      }
LAB_00349668:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
                    /* try { // try from 0034967c to 00449703 has its CatchHandler @ 0034b2e0 */
        if (uVar2 < 9 || (long)(uVar25 + uVar41 * -4) < (long)(uVar41 * 4) && 0 < (long)uVar25) {
          lVar17 = 0;
          piVar18 = (int *)((long)piVar42 + uVar33);
          do {
            iVar16 = piVar42[lVar17];
            piVar42[lVar17] = *piVar18;
            lVar17 = lVar17 + 1;
            *piVar18 = iVar16;
            piVar18 = piVar18 + -1;
          } while ((int)lVar17 < (int)uVar2);
        }
        else {
          uVar15 = -((uint)((ulong)piVar42 >> 2) & 3) & 3;
          uVar28 = uVar41;
          if (uVar15 < uVar2) {
            uVar28 = (ulong)uVar15;
          }
          iVar16 = (int)uVar28;
          uVar19 = uVar28;
          if (iVar16 != 0) {
            iVar24 = *piVar42;
            *piVar42 = *(int *)((long)piVar42 + uVar33);
            *(int *)((long)piVar42 + uVar33) = iVar24;
            if (iVar16 != 1) {
              iVar24 = piVar42[1];
              piVar42[1] = *(int *)((long)piVar42 + uVar40);
              *(int *)((long)piVar42 + uVar40) = iVar24;
              if (iVar16 == 3) {
                iVar24 = piVar42[2];
                piVar42[2] = *(int *)((long)piVar42 + uVar26);
                *(int *)((long)piVar42 + uVar26) = iVar24;
              }
              else {
                uVar19 = 2;
              }
            }
          }
                    /* try { // try from 00349708 to 0044972b has its CatchHandler @ 0034b2d8 */
          uVar15 = ((uVar2 - iVar16) - 4 >> 2) + 1;
          pauVar30 = (undefined1 (*) [16])((long)piVar42 + (uVar25 - 0xc) + ~uVar28 * 4);
          uVar32 = 0;
          iVar24 = uVar15 * 4;
          pauVar20 = (undefined1 (*) [16])(piVar42 + uVar28);
          pauVar35 = pauVar30;
          pauVar36 = (undefined1 (*) [16])(piVar42 + uVar28);
          do {
            auVar45 = *pauVar30;
            uVar32 = uVar32 + 1;
                    /* try { // try from 00349730 to 00449753 has its CatchHandler @ 0034b0f0 */
            pauVar30 = pauVar30 + -1;
            auVar9._8_8_ = _UNK_00349cd8;
            auVar9._0_8_ = _DAT_00349cd0;
            auVar46 = a64_TBL(ZEXT816(0),auVar45,auVar9);
            auVar10._8_8_ = _UNK_00349cd8;
            auVar10._0_8_ = _DAT_00349cd0;
            auVar45 = a64_TBL(ZEXT816(0),*pauVar20,auVar10);
            *(long *)((long)*pauVar36 + 8) = auVar46._8_8_;
            *(long *)*pauVar36 = auVar46._0_8_;
            *(long *)(*pauVar35 + 8) = auVar45._8_8_;
            *(long *)*pauVar35 = auVar45._0_8_;
            pauVar35 = pauVar35 + -1;
            pauVar20 = pauVar20 + 1;
            pauVar36 = pauVar36 + 1;
          } while (uVar32 < uVar15);
                    /* try { // try from 00349758 to 0044977b has its CatchHandler @ 0034b06c */
          uVar15 = iVar24 + (int)uVar19;
          if (iVar24 != uVar2 - iVar16) {
            uVar28 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
            uVar6 = *(undefined4 *)((long)piVar42 + uVar28);
            uVar19 = -(ulong)(uVar8 - uVar15 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar8 - uVar15) << 2;
            *(undefined4 *)((long)piVar42 + uVar28) = *(undefined4 *)((long)piVar42 + uVar19);
            *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
            if ((int)(uVar15 + 1) < (int)uVar2) {
              uVar32 = uVar8 - (uVar15 + 1);
              uVar19 = -(ulong)(uVar32 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar32 << 2;
              uVar6 = *(undefined4 *)((long)piVar42 + uVar28 + 4);
              *(undefined4 *)((long)piVar42 + uVar28 + 4) = *(undefined4 *)((long)piVar42 + uVar19);
              *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
              if ((int)(uVar15 + 2) < (int)uVar2) {
                uVar15 = uVar8 - (uVar15 + 2);
                uVar6 = *(undefined4 *)((long)piVar42 + uVar28 + 8);
                uVar19 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
                *(undefined4 *)((long)piVar42 + uVar28 + 8) =
                     *(undefined4 *)((long)piVar42 + uVar19);
                *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
              }
            }
          }
        }
      }
                    /* try { // try from 003497d4 to 00449d6b has its CatchHandler @ 0034b0f8 */
      if ((uVar4 == 0) && (0 < (int)uVar39)) {
        lVar17 = 0;
        lVar34 = **(long **)(param_2 + 0x48);
        piVar18 = (int *)(*(long *)(param_2 + 0x10) + lVar44 * 4);
        do {
          piVar37 = piVar42 + lVar17;
          lVar17 = lVar17 + 1;
          *piVar18 = *piVar37;
          piVar18 = (int *)((long)piVar18 + lVar34);
        } while ((int)lVar17 < (int)uVar39);
      }
      lVar44 = lVar44 + 1;
      piVar42 = local_430;
    } while ((int)lVar44 < iVar5);
  }
  if ((piVar42 != local_420) && (piVar42 != (int *)0x0)) {
    operator_delete__(piVar42);
  }
  if ((local_850 != local_840) && (local_850 != (undefined1 *)0x0)) {
    operator_delete__(local_850);
  }
  return;
}


==================================================================

### FUNC 00349ce0 (932 bytes) name=FUN_00349ce0

void FUN_00349ce0(int *param_1,int *param_2,long param_3,long param_4)

{
  short sVar1;
  short sVar2;
  long lVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  int *piVar7;
  int iVar8;
  int *piVar9;
  ulong uVar10;
  short sVar11;
  long lVar12;
  long lVar13;
  int iVar14;
  ulong uVar15;
  long lVar16;
  
  lVar12 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar12 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar14 = param_1[1];
    param_3 = param_3 + -1;
    sVar11 = *(short *)(param_4 + (long)iVar14 * 2);
    sVar1 = *(short *)(param_4 + (long)param_2[-1] * 2);
    sVar2 = *(short *)(param_4 + (long)param_1[lVar12 >> 3] * 2);
    piVar9 = param_2;
    piVar7 = param_1;
    if (sVar11 < sVar2) {
      if (sVar2 < sVar1) {
LAB_00349e0c:
        iVar14 = *param_1;
        *param_1 = param_1[lVar12 >> 3];
        param_1[lVar12 >> 3] = iVar14;
        iVar14 = param_2[-1];
        iVar8 = param_1[1];
        sVar11 = *(short *)(param_4 + (long)*param_1 * 2);
      }
      else {
        if (sVar1 <= sVar11) goto LAB_00349e2c;
LAB_00349d50:
        iVar14 = *param_1;
        *param_1 = param_2[-1];
        param_2[-1] = iVar14;
        iVar8 = param_1[1];
        sVar11 = *(short *)(param_4 + (long)*param_1 * 2);
      }
    }
    else {
                    /* try { // try from 00349e00 to 00449e03 has its CatchHandler @ 0034b06c */
      if (sVar1 <= sVar11) {
        if (sVar2 < sVar1) goto LAB_00349d50;
        goto LAB_00349e0c;
      }
LAB_00349e2c:
      iVar8 = *param_1;
      param_1[1] = iVar8;
      *param_1 = iVar14;
      iVar14 = param_2[-1];
    }
    while( true ) {
      piVar7 = piVar7 + 1;
      sVar1 = *(short *)(param_4 + (long)iVar8 * 2);
      while (sVar1 < sVar11) {
        piVar7 = piVar7 + 1;
        iVar8 = *piVar7;
        sVar1 = *(short *)(param_4 + (long)iVar8 * 2);
      }
      piVar9 = piVar9 + -1;
      sVar1 = *(short *)(param_4 + (long)iVar14 * 2);
      while (sVar11 < sVar1) {
        piVar9 = piVar9 + -1;
        iVar14 = *piVar9;
        sVar1 = *(short *)(param_4 + (long)iVar14 * 2);
      }
      if (piVar9 <= piVar7) break;
      *piVar7 = iVar14;
      *piVar9 = iVar8;
      iVar14 = piVar9[-1];
      iVar8 = piVar7[1];
      sVar11 = *(short *)(param_4 + (long)*param_1 * 2);
    }
    FUN_00349ce0(piVar7,param_2,param_3,param_4);
    lVar12 = (long)piVar7 - (long)param_1;
    param_2 = piVar7;
  }
  lVar12 = lVar12 >> 2;
  lVar16 = lVar12 + -2 >> 1;
  piVar7 = param_1 + lVar16;
  lVar13 = lVar16;
  do {
    iVar14 = *piVar7;
    lVar3 = lVar13;
    piVar9 = piVar7;
    while (lVar3 < lVar12 + -1 >> 1) {
      lVar6 = lVar3 + 1;
                    /* try { // try from 00349f8c to 00449f8f has its CatchHandler @ 0034b2e0 */
      lVar5 = lVar6 * 2;
      piVar9 = param_1 + lVar6 * 2;
      iVar8 = param_1[lVar6 * 2];
      if (*(short *)(param_4 + (long)iVar8 * 2) < *(short *)(param_4 + (long)piVar9[-1] * 2)) {
        lVar5 = lVar5 + -1;
        iVar8 = param_1[lVar5];
        piVar9 = param_1 + lVar5;
      }
      param_1[lVar3] = iVar8;
      lVar3 = lVar5;
    }
    if ((lVar16 == lVar3) && (((uint)lVar12 & 1) != 1)) {
      lVar6 = lVar3 + 1;
      lVar3 = lVar6 * 2 + -1;
      *piVar9 = param_1[lVar6 * 2 + -1];
      piVar9 = param_1 + lVar3;
    }
    if (lVar13 < lVar3) {
      lVar6 = lVar3 + -1;
      sVar1 = *(short *)(param_4 + (long)iVar14 * 2);
      do {
        lVar5 = lVar6 >> 1;
                    /* try { // try from 00349e84 to 00449e87 has its CatchHandler @ 0034b0f0 */
        if (sVar1 <= *(short *)(param_4 + (long)param_1[lVar5] * 2)) break;
        param_1[lVar3] = param_1[lVar5];
                    /* try { // try from 00349fec to 00449fef has its CatchHandler @ 0034b0f0 */
        piVar9 = param_1 + lVar5;
        lVar6 = (lVar5 + -1) - (lVar5 + -1 >> 0x3f);
                    /* try { // try from 00349ff8 to 00449ffb has its CatchHandler @ 0034b2d8 */
        lVar3 = lVar5;
      } while (lVar13 < lVar5);
      *piVar9 = iVar14;
      if (lVar13 == 0) break;
    }
    else {
      *piVar9 = iVar14;
    }
    piVar7 = piVar7 + -1;
    lVar13 = lVar13 + -1;
                    /* try { // try from 00349fe0 to 00449fe3 has its CatchHandler @ 0034b06c */
  } while( true );
LAB_00349ea0:
  param_2 = param_2 + -1;
  iVar14 = *param_2;
  *param_2 = *param_1;
  uVar15 = (long)param_2 - (long)param_1 >> 2;
  lVar12 = (long)(uVar15 - 1) / 2;
  if (lVar12 < 1) {
    uVar4 = uVar15 & 1;
    piVar7 = param_1;
    if ((uVar15 & 1) == 0) goto LAB_00349f18;
  }
  else {
    uVar10 = 0;
    do {
      lVar13 = uVar10 + 1;
      uVar4 = lVar13 * 2;
      piVar7 = param_1 + lVar13 * 2;
      iVar8 = param_1[lVar13 * 2];
      if (*(short *)(param_4 + (long)iVar8 * 2) < *(short *)(param_4 + (long)piVar7[-1] * 2)) {
        uVar4 = uVar4 - 1;
        iVar8 = param_1[uVar4];
        piVar7 = param_1 + uVar4;
      }
      param_1[uVar10] = iVar8;
                    /* try { // try from 00349f08 to 00449f0b has its CatchHandler @ 0034b2d8 */
      uVar10 = uVar4;
    } while ((long)uVar4 < lVar12);
    if ((uVar15 & 1) == 0) {
LAB_00349f18:
      if (uVar4 == (long)(uVar15 - 2) / 2) {
                    /* try { // try from 0034a004 to 0044a007 has its CatchHandler @ 0034b2e0 */
        lVar12 = uVar4 + 1;
        uVar4 = lVar12 * 2 - 1;
        *piVar7 = param_1[lVar12 * 2 + -1];
        piVar7 = param_1 + uVar4;
      }
      else if ((long)uVar4 < 1) goto LAB_00349f30;
    }
    sVar1 = *(short *)(param_4 + (long)iVar14 * 2);
    uVar15 = (long)(uVar4 - 1) >> 1;
    iVar8 = param_1[uVar15];
    sVar2 = *(short *)(param_4 + (long)iVar8 * 2);
    while (uVar10 = uVar15, sVar2 < sVar1) {
      param_1[uVar4] = iVar8;
      piVar7 = param_1 + uVar10;
      uVar15 = (long)(uVar10 - 1) >> 1;
      if (uVar10 == 0) break;
      iVar8 = param_1[uVar15];
      uVar4 = uVar10;
      sVar2 = *(short *)(param_4 + (long)iVar8 * 2);
    }
  }
LAB_00349f30:
  *piVar7 = iVar14;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_00349ea0;
}


==================================================================

### FUNC 0034a090 (2360 bytes) name=FUN_0034a090

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0034a090(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  uint uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  int *piVar11;
  undefined1 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  int *piVar18;
  ulong uVar19;
  undefined1 (*pauVar20) [16];
  int *piVar21;
  char *pcVar22;
  short sVar23;
  int iVar24;
  ulong uVar25;
  ulong uVar26;
  undefined2 *puVar27;
  ulong uVar28;
  size_t sVar29;
  undefined1 (*pauVar30) [16];
  int *piVar31;
  uint uVar32;
  ulong uVar33;
  long lVar34;
  undefined1 (*pauVar35) [16];
  undefined1 (*pauVar36) [16];
  int *piVar37;
  int *piVar38;
  uint uVar39;
  ulong uVar40;
  ulong uVar41;
  int *piVar42;
  undefined1 *puVar43;
  long lVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined8 local_860;
  undefined8 local_858;
  undefined1 *local_850;
  ulong local_848;
  undefined1 local_840 [1040];
  int *local_430;
  ulong local_428;
  int local_420 [264];
  
                    /* try { // try from 0034a098 to 0044a10b has its CatchHandler @ 0034b0f8 */
  local_430 = local_420;
  local_850 = local_840;
  local_428 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_848 = 0x208;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_860 = 0;
    local_858 = 0;
    pcVar22 = (char *)cv::String::allocate((String *)&local_860,0x14);
    uVar14 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar13 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar22 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar22 = uVar13;
    *(undefined8 *)(pcVar22 + 8) = uVar14;
    cv::error(-0xd7,(String *)&local_860,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = short int]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_860);
  }
  if (uVar4 == 0) {
    uVar40 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar33 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar25 = uVar33;
    if (local_848 < uVar33) {
      if (local_850 != local_840) {
        if (local_850 != (undefined1 *)0x0) {
          operator_delete__(local_850);
        }
        local_850 = local_840;
        local_848 = 0x208;
      }
      uVar25 = local_848;
      if (0x208 < uVar33) {
        uVar25 = uVar33 << 1;
        if (0x3f80000000000000 < uVar33) {
          uVar25 = 0xffffffffffffffff;
        }
        local_850 = operator_new__(uVar25);
        uVar25 = uVar33;
      }
    }
    local_848 = uVar25;
    piVar11 = local_430;
    puVar12 = local_850;
    if (local_428 < uVar33) {
      if (local_430 != local_420) {
        if (local_430 != (int *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
      if (uVar33 < 0x109) {
        piVar11 = local_420;
        puVar12 = local_850;
        uVar33 = local_428;
      }
      else {
        uVar25 = uVar33 << 2;
        if (0x1fc0000000000000 < uVar33) {
          uVar25 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar25);
        piVar11 = local_430;
        puVar12 = local_850;
      }
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar40 = (ulong)*(uint *)(param_1 + 0xc);
                    /* try { // try from 0034a138 to 0044a13b has its CatchHandler @ 0034b2b4 */
                    /* try { // try from 0034a140 to 0044a953 has its CatchHandler @ 0034b0f8 */
    piVar11 = local_430;
    puVar12 = local_850;
    uVar33 = local_428;
  }
  local_428 = uVar33;
  piVar42 = piVar11;
  local_850 = puVar12;
  if (0 < iVar5) {
    uVar25 = -(uVar40 >> 0x1f) & 0xfffffffc00000000 | uVar40 << 2;
    uVar39 = (uint)uVar40;
    uVar2 = (int)uVar39 / 2;
    uVar41 = (ulong)uVar2;
    uVar8 = uVar39 - 1;
    uVar33 = -(ulong)(uVar8 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar8 << 2;
    uVar40 = -(ulong)(uVar39 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar39 - 2) << 2;
    uVar3 = uVar39;
    if ((int)uVar39 < 1) {
      uVar3 = 1;
    }
    uVar26 = -(ulong)(uVar39 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar39 - 3) << 2;
    lVar44 = 0;
    do {
      if (uVar4 == 0) {
        piVar42 = piVar11;
        puVar43 = puVar12;
        if (0 < (int)uVar39) {
          lVar17 = 0;
          lVar34 = **(long **)(param_1 + 0x48);
          puVar27 = (undefined2 *)(*(long *)(param_1 + 0x10) + lVar44 * 2);
          do {
            uVar7 = *puVar27;
            puVar27 = (undefined2 *)((long)puVar27 + lVar34);
            *(undefined2 *)(puVar12 + lVar17 * 2) = uVar7;
            lVar17 = lVar17 + 1;
          } while ((int)lVar17 < (int)uVar39);
          uVar15 = -((uint)((ulong)piVar11 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
joined_r0x0034a690:
          uVar32 = uVar3;
          if (((int)uVar3 < 8) || (uVar28 = 0, uVar32 = uVar15, uVar15 != 0)) {
            uVar15 = uVar32;
            *piVar42 = 0;
            if ((uVar15 == 1) ||
               ((((piVar42[1] = 1, uVar15 == 2 || (piVar42[2] = 2, uVar15 == 3)) ||
                 (piVar42[3] = 3, uVar15 == 4)) || (piVar42[4] = 4, uVar15 == 5)))) {
              uVar28 = (ulong)uVar15;
            }
            else {
              piVar42[5] = 5;
              if (uVar15 == 7) {
                uVar28 = 7;
                piVar42[6] = 6;
              }
              else {
                uVar28 = 6;
              }
            }
            if (uVar15 == uVar3) goto LAB_0034a358;
          }
          uVar32 = uVar8;
          if ((int)uVar39 < 1) {
            uVar32 = 0;
          }
          uVar1 = ((uVar3 - uVar15) - 4 >> 2) + 1;
          iVar16 = uVar1 * 4;
          if (2 < uVar32 - uVar15) {
            iVar24 = (int)uVar28;
            uVar32 = 0;
            auVar45._0_4_ = iVar24 + (int)_DAT_0034aa20;
            auVar45._4_4_ = iVar24 + (int)((ulong)_DAT_0034aa20 >> 0x20);
            auVar45._8_4_ = iVar24 + (int)_UNK_0034aa28;
            auVar45._12_4_ = iVar24 + (int)((ulong)_UNK_0034aa28 >> 0x20);
            piVar18 = piVar42 + uVar15;
            do {
              *(long *)(piVar18 + 2) = auVar45._8_8_;
              *(long *)piVar18 = auVar45._0_8_;
              uVar32 = uVar32 + 1;
              auVar46._0_4_ = auVar45._0_4_ + 4;
              auVar46._4_4_ = auVar45._4_4_ + 4;
              auVar46._8_4_ = auVar45._8_4_ + 4;
              auVar46._12_4_ = auVar45._12_4_ + 4;
              piVar18 = piVar18 + 4;
              auVar45 = auVar46;
            } while (uVar32 < uVar1);
            uVar28 = (ulong)(uint)(iVar24 + iVar16);
            if (iVar16 == uVar3 - uVar15) goto LAB_0034a358;
          }
          uVar19 = -(uVar28 >> 0x1f) & 0xfffffffc00000000 | uVar28 << 2;
          iVar16 = (int)uVar28;
          *(int *)((long)piVar42 + uVar19) = iVar16;
          if (iVar16 + 1 < (int)uVar39) {
            *(int *)((long)piVar42 + uVar19 + 4) = iVar16 + 1;
            if (iVar16 + 2 < (int)uVar39) {
              *(int *)((long)piVar42 + uVar19 + 8) = iVar16 + 2;
            }
          }
        }
      }
      else {
        puVar43 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar44 * *(long *)(param_1 + 0x50));
        piVar42 = (int *)(*(long *)(param_2 + 0x10) + lVar44 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar39) {
          uVar15 = -((uint)((ulong)piVar42 >> 2) & 3) & 3;
          if (uVar3 < uVar15) {
            uVar15 = uVar3;
          }
          goto joined_r0x0034a690;
        }
      }
LAB_0034a358:
      piVar18 = (int *)((long)piVar42 + uVar25);
      if (piVar42 != piVar18) {
        FUN_00349ce0(piVar42,piVar18,(0x3f - LZCOUNT((long)uVar25 >> 2)) * 2,puVar43);
        piVar37 = piVar42;
        if ((long)uVar25 < 0x44) {
          while (piVar38 = piVar37 + 1, piVar18 != piVar38) {
            iVar16 = *piVar38;
            sVar23 = *(short *)(puVar43 + (long)iVar16 * 2);
            if (sVar23 < *(short *)(puVar43 + (long)*piVar42 * 2)) {
              sVar29 = (long)piVar38 - (long)piVar42;
              if ((long)sVar29 >> 2 != 0) {
                memmove((void *)((long)piVar38 + (4 - sVar29)),piVar42,sVar29);
              }
              *piVar42 = iVar16;
              piVar37 = piVar38;
            }
            else {
              iVar24 = *piVar37;
              piVar37 = piVar38;
              if (sVar23 < *(short *)(puVar43 + (long)iVar24 * 2)) {
                do {
                  piVar31 = piVar37 + -1;
                  *piVar37 = iVar24;
                  iVar24 = piVar37[-2];
                  piVar37 = piVar31;
                } while (sVar23 < *(short *)(puVar43 + (long)iVar24 * 2));
                *piVar31 = iVar16;
                piVar37 = piVar38;
              }
              else {
                *piVar38 = iVar16;
              }
            }
          }
        }
        else {
          piVar37 = piVar42 + 0x10;
          piVar38 = piVar42 + 1;
          do {
            iVar16 = *piVar38;
            sVar23 = *(short *)(puVar43 + (long)iVar16 * 2);
            if (sVar23 < *(short *)(puVar43 + (long)*piVar42 * 2)) {
              sVar29 = (long)piVar38 - (long)piVar42;
              if ((long)sVar29 >> 2 != 0) {
                memmove((void *)((long)piVar38 + (4 - sVar29)),piVar42,sVar29);
              }
              *piVar42 = iVar16;
            }
            else {
              iVar24 = piVar38[-1];
              piVar31 = piVar38;
              if (sVar23 < *(short *)(puVar43 + (long)iVar24 * 2)) {
                do {
                  piVar21 = piVar31 + -1;
                  *piVar31 = iVar24;
                  iVar24 = piVar31[-2];
                  piVar31 = piVar21;
                } while (sVar23 < *(short *)(puVar43 + (long)iVar24 * 2));
                *piVar21 = iVar16;
              }
              else {
                *piVar38 = iVar16;
              }
            }
            piVar38 = piVar38 + 1;
          } while (piVar37 != piVar38);
          if (piVar18 != piVar37) {
            iVar16 = piVar42[0xf];
            iVar24 = *piVar37;
            sVar23 = *(short *)(puVar43 + (long)iVar24 * 2);
            piVar38 = piVar42 + 0xf;
            if (sVar23 < *(short *)(puVar43 + (long)iVar16 * 2)) goto LAB_0034a710;
            do {
              *piVar37 = iVar24;
              while( true ) {
                piVar37 = piVar37 + 1;
                if (piVar18 == piVar37) goto LAB_0034a3c8;
                iVar16 = piVar37[-1];
                iVar24 = *piVar37;
                sVar23 = *(short *)(puVar43 + (long)iVar24 * 2);
                piVar38 = piVar37 + -1;
                if (*(short *)(puVar43 + (long)iVar16 * 2) <= sVar23) break;
LAB_0034a710:
                do {
                  piVar31 = piVar38;
                  piVar31[1] = iVar16;
                  iVar16 = piVar31[-1];
                  piVar38 = piVar31 + -1;
                } while (sVar23 < *(short *)(puVar43 + (long)iVar16 * 2));
                *piVar31 = iVar24;
              }
            } while( true );
          }
        }
      }
LAB_0034a3c8:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar25 + uVar41 * -4) < (long)(uVar41 * 4) && 0 < (long)uVar25) {
          lVar17 = 0;
          piVar18 = (int *)((long)piVar42 + uVar33);
          do {
            iVar16 = piVar42[lVar17];
            piVar42[lVar17] = *piVar18;
            lVar17 = lVar17 + 1;
            *piVar18 = iVar16;
            piVar18 = piVar18 + -1;
          } while ((int)lVar17 < (int)uVar2);
        }
        else {
          uVar15 = -((uint)((ulong)piVar42 >> 2) & 3) & 3;
          uVar28 = uVar41;
          if (uVar15 < uVar2) {
            uVar28 = (ulong)uVar15;
          }
          iVar16 = (int)uVar28;
          uVar19 = uVar28;
          if (iVar16 != 0) {
            iVar24 = *piVar42;
            *piVar42 = *(int *)((long)piVar42 + uVar33);
            *(int *)((long)piVar42 + uVar33) = iVar24;
            if (iVar16 != 1) {
              iVar24 = piVar42[1];
              piVar42[1] = *(int *)((long)piVar42 + uVar40);
              *(int *)((long)piVar42 + uVar40) = iVar24;
              if (iVar16 == 3) {
                iVar24 = piVar42[2];
                piVar42[2] = *(int *)((long)piVar42 + uVar26);
                *(int *)((long)piVar42 + uVar26) = iVar24;
              }
              else {
                uVar19 = 2;
              }
            }
          }
          uVar15 = ((uVar2 - iVar16) - 4 >> 2) + 1;
          pauVar30 = (undefined1 (*) [16])((long)piVar42 + (uVar25 - 0xc) + ~uVar28 * 4);
          uVar32 = 0;
          iVar24 = uVar15 * 4;
          pauVar20 = (undefined1 (*) [16])(piVar42 + uVar28);
          pauVar35 = pauVar30;
          pauVar36 = (undefined1 (*) [16])(piVar42 + uVar28);
          do {
            auVar45 = *pauVar30;
            uVar32 = uVar32 + 1;
            pauVar30 = pauVar30 + -1;
            auVar9._8_8_ = _UNK_0034aa38;
            auVar9._0_8_ = _DAT_0034aa30;
            auVar46 = a64_TBL(ZEXT816(0),auVar45,auVar9);
            auVar10._8_8_ = _UNK_0034aa38;
            auVar10._0_8_ = _DAT_0034aa30;
            auVar45 = a64_TBL(ZEXT816(0),*pauVar20,auVar10);
            *(long *)((long)*pauVar36 + 8) = auVar46._8_8_;
            *(long *)*pauVar36 = auVar46._0_8_;
            *(long *)(*pauVar35 + 8) = auVar45._8_8_;
            *(long *)*pauVar35 = auVar45._0_8_;
            pauVar35 = pauVar35 + -1;
            pauVar20 = pauVar20 + 1;
            pauVar36 = pauVar36 + 1;
          } while (uVar32 < uVar15);
          uVar15 = iVar24 + (int)uVar19;
          if (iVar24 != uVar2 - iVar16) {
            uVar28 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
            uVar6 = *(undefined4 *)((long)piVar42 + uVar28);
            uVar19 = -(ulong)(uVar8 - uVar15 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar8 - uVar15) << 2;
            *(undefined4 *)((long)piVar42 + uVar28) = *(undefined4 *)((long)piVar42 + uVar19);
            *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
            if ((int)(uVar15 + 1) < (int)uVar2) {
              uVar32 = uVar8 - (uVar15 + 1);
              uVar19 = -(ulong)(uVar32 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar32 << 2;
              uVar6 = *(undefined4 *)((long)piVar42 + uVar28 + 4);
              *(undefined4 *)((long)piVar42 + uVar28 + 4) = *(undefined4 *)((long)piVar42 + uVar19);
              *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
              if ((int)(uVar15 + 2) < (int)uVar2) {
                uVar15 = uVar8 - (uVar15 + 2);
                uVar6 = *(undefined4 *)((long)piVar42 + uVar28 + 8);
                uVar19 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
                *(undefined4 *)((long)piVar42 + uVar28 + 8) =
                     *(undefined4 *)((long)piVar42 + uVar19);
                *(undefined4 *)((long)piVar42 + uVar19) = uVar6;
              }
            }
          }
        }
      }
      if ((uVar4 == 0) && (0 < (int)uVar39)) {
        lVar17 = 0;
        lVar34 = **(long **)(param_2 + 0x48);
        piVar18 = (int *)(*(long *)(param_2 + 0x10) + lVar44 * 4);
        do {
          piVar37 = piVar42 + lVar17;
          lVar17 = lVar17 + 1;
          *piVar18 = *piVar37;
          piVar18 = (int *)((long)piVar18 + lVar34);
        } while ((int)lVar17 < (int)uVar39);
      }
      lVar44 = lVar44 + 1;
      piVar42 = local_430;
    } while ((int)lVar44 < iVar5);
  }
  if ((piVar42 != local_420) && (piVar42 != (int *)0x0)) {
    operator_delete__(piVar42);
  }
  if ((local_850 != local_840) && (local_850 != (undefined1 *)0x0)) {
    operator_delete__(local_850);
  }
  return;
}


==================================================================

### FUNC 0034aa40 (968 bytes) name=FUN_0034aa40

void FUN_0034aa40(uint *param_1,uint *param_2,long param_3,long param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  ulong uVar5;
  long lVar6;
  long lVar7;
  uint *puVar8;
  uint *puVar9;
  long lVar10;
  ulong uVar11;
  uint uVar12;
  long lVar13;
  ulong uVar14;
  ulong uVar15;
  uint uVar16;
  long lVar17;
  
                    /* try { // try from 0034aa40 to 0044aa63 has its CatchHandler @ 0034b120 */
  lVar10 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar10 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    uVar16 = param_1[1];
    param_3 = param_3 + -1;
    lVar13 = (long)(int)uVar16;
    iVar1 = *(int *)(param_4 + (long)(int)param_2[-1] * 4);
    iVar2 = *(int *)(param_4 + lVar13 * 4);
    iVar3 = *(int *)(param_4 + (long)(int)param_1[lVar10 >> 3] * 4);
    puVar9 = param_2;
    puVar8 = param_1;
    if (iVar2 < iVar3) {
      if (iVar3 < iVar1) {
LAB_0034ab6c:
        uVar16 = *param_1;
        *param_1 = param_1[lVar10 >> 3];
        param_1[lVar10 >> 3] = uVar16;
        uVar16 = param_2[-1];
        uVar12 = param_1[1];
        lVar13 = (long)(int)*param_1;
      }
      else {
        if (iVar1 <= iVar2) goto LAB_0034ab88;
LAB_0034aab4:
        uVar16 = *param_1;
        *param_1 = param_2[-1];
        param_2[-1] = uVar16;
        uVar12 = param_1[1];
        lVar13 = (long)(int)*param_1;
      }
    }
    else {
      if (iVar1 <= iVar2) {
        if (iVar3 < iVar1) goto LAB_0034aab4;
        goto LAB_0034ab6c;
      }
LAB_0034ab88:
      uVar12 = *param_1;
      param_1[1] = uVar12;
      *param_1 = uVar16;
      uVar16 = param_2[-1];
    }
    while( true ) {
                    /* try { // try from 0034aa68 to 0044aafb has its CatchHandler @ 0034b148 */
      puVar8 = puVar8 + 1;
      iVar1 = *(int *)(param_4 + lVar13 * 4);
      iVar2 = *(int *)(param_4 + (long)(int)uVar12 * 4);
      while (iVar2 < iVar1) {
        puVar8 = puVar8 + 1;
        uVar12 = *puVar8;
        iVar2 = *(int *)(param_4 + (long)(int)uVar12 * 4);
      }
      puVar9 = puVar9 + -1;
      iVar2 = *(int *)(param_4 + (long)(int)uVar16 * 4);
                    /* try { // try from 0034ab00 to 0044ab1b has its CatchHandler @ 0034b120 */
      while (iVar1 < iVar2) {
        puVar9 = puVar9 + -1;
        uVar16 = *puVar9;
        iVar2 = *(int *)(param_4 + (long)(int)uVar16 * 4);
      }
      if (puVar9 <= puVar8) break;
      *puVar8 = uVar16;
                    /* try { // try from 0034ab24 to 0044ace7 has its CatchHandler @ 00349298 */
      *puVar9 = uVar12;
      uVar16 = puVar9[-1];
      uVar12 = puVar8[1];
      lVar13 = (long)(int)*param_1;
    }
    FUN_0034aa40(puVar8,param_2,param_3,param_4);
    lVar10 = (long)puVar8 - (long)param_1;
    param_2 = puVar8;
  }
  lVar10 = lVar10 >> 2;
  lVar17 = lVar10 + -2 >> 1;
  puVar8 = param_1 + lVar17;
  lVar13 = lVar17;
  do {
    uVar16 = *puVar8;
    lVar4 = lVar13;
    puVar9 = puVar8;
    while (lVar4 < lVar10 + -1 >> 1) {
      lVar7 = lVar4 + 1;
      lVar6 = lVar7 * 2;
      puVar9 = param_1 + lVar7 * 2;
      uVar12 = param_1[lVar7 * 2];
                    /* try { // try from 0034ad00 to 0044ad03 has its CatchHandler @ 0034b06c */
      if (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + (long)(int)puVar9[-1] * 4))
      {
        lVar6 = lVar6 + -1;
                    /* try { // try from 0034ad14 to 0044ad17 has its CatchHandler @ 0034b2e0 */
        uVar12 = param_1[lVar6];
        puVar9 = param_1 + lVar6;
      }
      param_1[lVar4] = uVar12;
                    /* try { // try from 0034ad28 to 0044ad2b has its CatchHandler @ 0034b2d8 */
      lVar4 = lVar6;
    }
    if ((lVar17 == lVar4) && (((uint)lVar10 & 1) != 1)) {
      lVar7 = lVar4 + 1;
      lVar4 = lVar7 * 2 + -1;
      *puVar9 = param_1[lVar7 * 2 + -1];
      puVar9 = param_1 + lVar4;
    }
    if (lVar13 < lVar4) {
      uVar14 = -(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2;
      lVar7 = lVar4 + -1 >> 1;
      uVar12 = param_1[lVar7];
      if (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + uVar14)) {
        do {
          param_1[lVar4] = uVar12;
          puVar9 = param_1 + lVar7;
          if (lVar7 <= lVar13) break;
          lVar6 = (lVar7 + -1) / 2;
          uVar12 = param_1[lVar6];
          lVar4 = lVar7;
          lVar7 = lVar6;
        } while (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + uVar14));
      }
      *puVar9 = uVar16;
      if (lVar13 == 0) break;
    }
    else {
      *puVar9 = uVar16;
    }
    puVar8 = puVar8 + -1;
                    /* try { // try from 0034ad3c to 0044ad3f has its CatchHandler @ 0034b0f0 */
    lVar13 = lVar13 + -1;
  } while( true );
LAB_0034ac00:
  param_2 = param_2 + -1;
  uVar16 = *param_2;
  *param_2 = *param_1;
  uVar14 = (long)param_2 - (long)param_1 >> 2;
  lVar10 = (long)(uVar14 - 1) / 2;
  if (lVar10 < 1) {
    uVar5 = uVar14 & 1;
    puVar8 = param_1;
    if ((uVar14 & 1) == 0) goto LAB_0034ac78;
  }
  else {
    uVar11 = 0;
    do {
      lVar13 = uVar11 + 1;
      uVar5 = lVar13 * 2;
      puVar8 = param_1 + lVar13 * 2;
      uVar12 = param_1[lVar13 * 2];
      if (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + (long)(int)puVar8[-1] * 4))
      {
        uVar5 = uVar5 - 1;
        uVar12 = param_1[uVar5];
        puVar8 = param_1 + uVar5;
      }
      param_1[uVar11] = uVar12;
      uVar11 = uVar5;
    } while ((long)uVar5 < lVar10);
    if ((uVar14 & 1) == 0) {
LAB_0034ac78:
      if (uVar5 == (long)(uVar14 - 2) / 2) {
        lVar10 = uVar5 + 1;
        uVar5 = lVar10 * 2 - 1;
        *puVar8 = param_1[lVar10 * 2 + -1];
        puVar8 = param_1 + uVar5;
      }
      else if ((long)uVar5 < 1) goto LAB_0034ac90;
    }
    uVar11 = -(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2;
    uVar14 = (long)(uVar5 - 1) >> 1;
    uVar12 = param_1[uVar14];
    if (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + uVar11)) {
      do {
        param_1[uVar5] = uVar12;
        puVar8 = param_1 + uVar14;
        uVar15 = (long)(uVar14 - 1) >> 1;
        if (uVar14 == 0) break;
        uVar12 = param_1[uVar15];
        uVar5 = uVar14;
        uVar14 = uVar15;
      } while (*(int *)(param_4 + (long)(int)uVar12 * 4) < *(int *)(param_4 + uVar11));
    }
  }
LAB_0034ac90:
  *puVar8 = uVar16;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_0034ac00;
}


==================================================================

### FUNC 0034ae10 (2368 bytes) name=FUN_0034ae10

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0034ae10(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  uint *puVar10;
  undefined1 *puVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  uint uVar14;
  int iVar15;
  long lVar16;
  uint *puVar17;
  ulong uVar18;
  undefined1 (*pauVar19) [16];
  char *pcVar20;
  int iVar21;
  ulong uVar22;
  ulong uVar23;
  undefined4 *puVar24;
  ulong uVar25;
  size_t sVar26;
  undefined1 (*pauVar27) [16];
  uint *puVar28;
  uint uVar29;
  ulong uVar30;
  long lVar31;
  uint *puVar32;
  undefined1 (*pauVar33) [16];
  uint *puVar34;
  undefined1 (*pauVar35) [16];
  uint *puVar36;
  uint uVar37;
  ulong uVar38;
  ulong uVar39;
  uint *puVar40;
  undefined1 *puVar41;
  long lVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined8 local_870;
  undefined8 local_868;
  undefined1 *local_860;
  ulong local_858;
  undefined1 local_850 [1056];
  uint *local_430;
  ulong local_428;
  uint local_420 [264];
  
  local_430 = local_420;
  local_860 = local_850;
  local_858 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_428 = 0x108;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_870 = 0;
    local_868 = 0;
    pcVar20 = (char *)cv::String::allocate((String *)&local_870,0x14);
    uVar13 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar12 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar20 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar20 = uVar12;
    *(undefined8 *)(pcVar20 + 8) = uVar13;
    cv::error(-0xd7,(String *)&local_870,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = int]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_870);
  }
  if (uVar4 == 0) {
                    /* try { // try from 0034b5c0 to 0044b5c3 has its CatchHandler @ 0034bca0 */
    uVar38 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
                    /* try { // try from 0034b5c8 to 0044b5cb has its CatchHandler @ 0034b4c4 */
    uVar30 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar22 = uVar30;
    if (local_858 < uVar30) {
      if (local_860 != local_850) {
        if (local_860 != (undefined1 *)0x0) {
          operator_delete__(local_860);
        }
        local_860 = local_850;
        local_858 = 0x108;
      }
      uVar22 = local_858;
      if (0x108 < uVar30) {
        uVar22 = uVar30 << 2;
        if (0x1fc0000000000000 < uVar30) {
          uVar22 = 0xffffffffffffffff;
        }
        local_860 = operator_new__(uVar22);
        uVar22 = uVar30;
      }
    }
    local_858 = uVar22;
    puVar10 = local_430;
    puVar11 = local_860;
    if (local_428 < uVar30) {
      if (local_430 != local_420) {
        if (local_430 != (uint *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
      if (uVar30 < 0x109) {
        puVar10 = local_420;
        puVar11 = local_860;
        uVar30 = local_428;
      }
      else {
        uVar22 = uVar30 << 2;
        if (0x1fc0000000000000 < uVar30) {
          uVar22 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar22);
        puVar10 = local_430;
        puVar11 = local_860;
      }
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar38 = (ulong)*(uint *)(param_1 + 0xc);
    puVar10 = local_430;
    puVar11 = local_860;
    uVar30 = local_428;
  }
  local_428 = uVar30;
  puVar40 = puVar10;
  local_860 = puVar11;
  if (0 < iVar5) {
    uVar22 = -(uVar38 >> 0x1f) & 0xfffffffc00000000 | uVar38 << 2;
    uVar37 = (uint)uVar38;
    uVar2 = (int)uVar37 / 2;
    uVar39 = (ulong)uVar2;
    uVar7 = uVar37 - 1;
    uVar30 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar7 << 2;
    uVar38 = -(ulong)(uVar37 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 2) << 2;
    uVar3 = uVar37;
    if ((int)uVar37 < 1) {
      uVar3 = 1;
    }
    uVar23 = -(ulong)(uVar37 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 3) << 2;
    lVar42 = 0;
    do {
      if (uVar4 == 0) {
                    /* try { // try from 0034af6c to 0044af6f has its CatchHandler @ 0034b278 */
                    /* try { // try from 0034af74 to 0044af8b has its CatchHandler @ 0034b148 */
        puVar40 = puVar10;
        puVar41 = puVar11;
        if (0 < (int)uVar37) {
          lVar16 = 0;
          lVar31 = **(long **)(param_1 + 0x48);
          puVar24 = (undefined4 *)(*(long *)(param_1 + 0x10) + lVar42 * 4);
          do {
                    /* try { // try from 0034af90 to 0044afab has its CatchHandler @ 0034b120 */
            uVar6 = *puVar24;
            puVar24 = (undefined4 *)((long)puVar24 + lVar31);
            *(undefined4 *)(puVar11 + lVar16 * 4) = uVar6;
            lVar16 = lVar16 + 1;
          } while ((int)lVar16 < (int)uVar37);
                    /* try { // try from 0034afb4 to 0044afcb has its CatchHandler @ 00349298 */
          uVar14 = -((uint)((ulong)puVar10 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
joined_r0x0034b418:
          uVar29 = uVar3;
          if (((int)uVar3 < 8) || (uVar25 = 0, uVar29 = uVar14, uVar14 != 0)) {
            uVar14 = uVar29;
            *puVar40 = 0;
                    /* try { // try from 0034afdc to 0044afdf has its CatchHandler @ 0034b148 */
                    /* try { // try from 0034afec to 0044b00b has its CatchHandler @ 00349298 */
            if ((uVar14 == 1) ||
               ((((puVar40[1] = 1, uVar14 == 2 || (puVar40[2] = 2, uVar14 == 3)) ||
                 (puVar40[3] = 3, uVar14 == 4)) || (puVar40[4] = 4, uVar14 == 5)))) {
              uVar25 = (ulong)uVar14;
            }
            else {
                    /* try { // try from 0034b01c to 0044b01f has its CatchHandler @ 0034b120 */
              puVar40[5] = 5;
              if (uVar14 == 7) {
                uVar25 = 7;
                puVar40[6] = 6;
              }
              else {
                uVar25 = 6;
              }
            }
            if (uVar14 == uVar3) goto LAB_0034b0d4;
          }
          uVar29 = uVar7;
          if ((int)uVar37 < 1) {
            uVar29 = 0;
          }
          uVar1 = ((uVar3 - uVar14) - 4 >> 2) + 1;
          iVar15 = uVar1 * 4;
          if (2 < uVar29 - uVar14) {
                    /* catch() { ... } // from try @ 00349758 with catch @ 0034b06c
                       catch() { ... } // from try @ 00349e00 with catch @ 0034b06c
                       catch() { ... } // from try @ 00349fe0 with catch @ 0034b06c
                       catch() { ... } // from try @ 0034ad00 with catch @ 0034b06c */
            iVar21 = (int)uVar25;
            uVar29 = 0;
            auVar43._0_4_ = iVar21 + (int)_DAT_0034b7a0;
            auVar43._4_4_ = iVar21 + (int)((ulong)_DAT_0034b7a0 >> 0x20);
            auVar43._8_4_ = iVar21 + (int)_UNK_0034b7a8;
            auVar43._12_4_ = iVar21 + (int)((ulong)_UNK_0034b7a8 >> 0x20);
            puVar17 = puVar40 + uVar14;
            do {
              *(long *)(puVar17 + 2) = auVar43._8_8_;
              *(long *)puVar17 = auVar43._0_8_;
              uVar29 = uVar29 + 1;
              auVar44._0_4_ = auVar43._0_4_ + 4;
              auVar44._4_4_ = auVar43._4_4_ + 4;
              auVar44._8_4_ = auVar43._8_4_ + 4;
              auVar44._12_4_ = auVar43._12_4_ + 4;
              puVar17 = puVar17 + 4;
              auVar43 = auVar44;
            } while (uVar29 < uVar1);
            uVar25 = (ulong)(uint)(iVar21 + iVar15);
            if (iVar15 == uVar3 - uVar14) goto LAB_0034b0d4;
          }
          uVar18 = -(uVar25 >> 0x1f) & 0xfffffffc00000000 | uVar25 << 2;
          iVar15 = (int)uVar25;
          *(int *)((long)puVar40 + uVar18) = iVar15;
          if (iVar15 + 1 < (int)uVar37) {
            *(int *)((long)puVar40 + uVar18 + 4) = iVar15 + 1;
            if (iVar15 + 2 < (int)uVar37) {
              *(int *)((long)puVar40 + uVar18 + 8) = iVar15 + 2;
            }
          }
        }
      }
      else {
        puVar41 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar42 * *(long *)(param_1 + 0x50));
        puVar40 = (uint *)(*(long *)(param_2 + 0x10) + lVar42 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar37) {
          uVar14 = -((uint)((ulong)puVar40 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
          goto joined_r0x0034b418;
        }
      }
LAB_0034b0d4:
      puVar17 = (uint *)((long)puVar40 + uVar22);
      if (puVar40 != puVar17) {
                    /* try { // try from 0034b0ec to 0044b0ef has its CatchHandler @ 00349298 */
                    /* catch() { ... } // from try @ 00349730 with catch @ 0034b0f0
                       catch() { ... } // from try @ 00349e84 with catch @ 0034b0f0
                       catch() { ... } // from try @ 00349fec with catch @ 0034b0f0
                       catch() { ... } // from try @ 0034ad3c with catch @ 0034b0f0 */
        FUN_0034aa40(puVar40,puVar17,(0x3f - LZCOUNT((long)uVar22 >> 2)) * 2,puVar41);
                    /* catch() { ... } // from try @ 003497d4 with catch @ 0034b0f8
                       catch() { ... } // from try @ 0034a098 with catch @ 0034b0f8
                       catch() { ... } // from try @ 0034a140 with catch @ 0034b0f8 */
        puVar34 = puVar40;
        if ((long)uVar22 < 0x44) {
          while (puVar36 = puVar34 + 1, puVar17 != puVar36) {
            uVar14 = *puVar36;
            uVar25 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
                    /* catch() { ... } // from try @ 0034aa40 with catch @ 0034b120
                       catch() { ... } // from try @ 0034ab00 with catch @ 0034b120
                       catch() { ... } // from try @ 0034af90 with catch @ 0034b120
                       catch() { ... } // from try @ 0034b01c with catch @ 0034b120 */
            if (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)*puVar40 * 4)) {
              sVar26 = (long)puVar36 - (long)puVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)puVar36 + (4 - sVar26)),puVar40,sVar26);
              }
              *puVar40 = uVar14;
              puVar34 = puVar36;
            }
            else {
              uVar29 = *puVar34;
              puVar34 = puVar36;
              if (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar29 * 4)) {
                do {
                  puVar28 = puVar34 + -1;
                  *puVar34 = uVar29;
                  uVar29 = puVar34[-2];
                  puVar34 = puVar28;
                } while (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar29 * 4));
                *puVar28 = uVar14;
                puVar34 = puVar36;
              }
              else {
                *puVar36 = uVar14;
              }
            }
          }
        }
        else {
          puVar36 = puVar40 + 0x10;
          puVar34 = puVar40 + 1;
          do {
            uVar14 = *puVar34;
            uVar25 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
            if (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)*puVar40 * 4)) {
              sVar26 = (long)puVar34 - (long)puVar40;
              if ((long)sVar26 >> 2 != 0) {
                memmove((void *)((long)puVar34 + (4 - sVar26)),puVar40,sVar26);
              }
              *puVar40 = uVar14;
            }
            else {
              uVar29 = puVar34[-1];
              puVar28 = puVar34;
              if (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar29 * 4)) {
                do {
                  puVar32 = puVar28 + -1;
                  *puVar28 = uVar29;
                  uVar29 = puVar28[-2];
                  puVar28 = puVar32;
                } while (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar29 * 4));
                *puVar32 = uVar14;
              }
              else {
                *puVar34 = uVar14;
              }
            }
            puVar34 = puVar34 + 1;
          } while (puVar36 != puVar34);
          for (; puVar17 != puVar36; puVar36 = puVar36 + 1) {
            while( true ) {
              uVar14 = puVar36[-1];
              uVar29 = *puVar36;
              uVar25 = -(ulong)(uVar29 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar29 << 2;
              puVar34 = puVar36;
              if (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar14 * 4)) break;
              puVar34 = puVar36 + 1;
              *puVar36 = uVar29;
              puVar36 = puVar34;
              if (puVar17 == puVar34) goto LAB_0034b14c;
            }
            do {
              puVar28 = puVar34 + -1;
              *puVar34 = uVar14;
              uVar14 = puVar34[-2];
              puVar34 = puVar28;
            } while (*(int *)(puVar41 + uVar25) < *(int *)(puVar41 + (long)(int)uVar14 * 4));
            *puVar28 = uVar29;
                    /* catch() { ... } // from try @ 0034b520 with catch @ 0034b4c4
                       catch() { ... } // from try @ 0034b5c8 with catch @ 0034b4c4
                       catch() { ... } // from try @ 0034bcb0 with catch @ 0034b4c4 */
          }
        }
      }
LAB_0034b14c:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar22 + uVar39 * -4) < (long)(uVar39 * 4) && 0 < (long)uVar22) {
          lVar16 = 0;
          puVar17 = (uint *)((long)puVar40 + uVar30);
          do {
            uVar14 = puVar40[lVar16];
            puVar40[lVar16] = *puVar17;
            lVar16 = lVar16 + 1;
            *puVar17 = uVar14;
            puVar17 = puVar17 + -1;
          } while ((int)lVar16 < (int)uVar2);
        }
        else {
          uVar14 = -((uint)((ulong)puVar40 >> 2) & 3) & 3;
                    /* catch() { ... } // from try @ 00349454 with catch @ 0034b170 */
          uVar25 = uVar39;
          if (uVar14 < uVar2) {
            uVar25 = (ulong)uVar14;
          }
          iVar15 = (int)uVar25;
          uVar18 = uVar25;
          if (iVar15 != 0) {
            uVar14 = *puVar40;
                    /* try { // try from 0034b188 to 0044b267 has its CatchHandler @ 00349298 */
            *puVar40 = *(uint *)((long)puVar40 + uVar30);
            *(uint *)((long)puVar40 + uVar30) = uVar14;
            if (iVar15 != 1) {
              uVar14 = puVar40[1];
              puVar40[1] = *(uint *)((long)puVar40 + uVar38);
              *(uint *)((long)puVar40 + uVar38) = uVar14;
              if (iVar15 == 3) {
                uVar14 = puVar40[2];
                puVar40[2] = *(uint *)((long)puVar40 + uVar23);
                *(uint *)((long)puVar40 + uVar23) = uVar14;
              }
              else {
                uVar18 = 2;
              }
            }
          }
          uVar14 = ((uVar2 - iVar15) - 4 >> 2) + 1;
          pauVar27 = (undefined1 (*) [16])((long)puVar40 + (uVar22 - 0xc) + ~uVar25 * 4);
          uVar29 = 0;
          iVar21 = uVar14 * 4;
          pauVar19 = (undefined1 (*) [16])(puVar40 + uVar25);
          pauVar33 = pauVar27;
          pauVar35 = (undefined1 (*) [16])(puVar40 + uVar25);
          do {
            auVar43 = *pauVar27;
            uVar29 = uVar29 + 1;
            pauVar27 = pauVar27 + -1;
            auVar8._8_8_ = _UNK_0034b7b8;
            auVar8._0_8_ = _DAT_0034b7b0;
            auVar44 = a64_TBL(ZEXT816(0),auVar43,auVar8);
            auVar9._8_8_ = _UNK_0034b7b8;
            auVar9._0_8_ = _DAT_0034b7b0;
            auVar43 = a64_TBL(ZEXT816(0),*pauVar19,auVar9);
            *(long *)((long)*pauVar35 + 8) = auVar44._8_8_;
            *(long *)*pauVar35 = auVar44._0_8_;
            *(long *)(*pauVar33 + 8) = auVar43._8_8_;
            *(long *)*pauVar33 = auVar43._0_8_;
            pauVar33 = pauVar33 + -1;
            pauVar19 = pauVar19 + 1;
            pauVar35 = pauVar35 + 1;
          } while (uVar29 < uVar14);
          uVar14 = iVar21 + (int)uVar18;
          if (iVar21 != uVar2 - iVar15) {
            uVar25 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
            uVar6 = *(undefined4 *)((long)puVar40 + uVar25);
            uVar18 = -(ulong)(uVar7 - uVar14 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar7 - uVar14) << 2;
            *(undefined4 *)((long)puVar40 + uVar25) = *(undefined4 *)((long)puVar40 + uVar18);
            *(undefined4 *)((long)puVar40 + uVar18) = uVar6;
            if ((int)(uVar14 + 1) < (int)uVar2) {
              uVar29 = uVar7 - (uVar14 + 1);
                    /* catch() { ... } // from try @ 0034af6c with catch @ 0034b278 */
              uVar18 = -(ulong)(uVar29 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar29 << 2;
              uVar6 = *(undefined4 *)((long)puVar40 + uVar25 + 4);
              *(undefined4 *)((long)puVar40 + uVar25 + 4) = *(undefined4 *)((long)puVar40 + uVar18);
              *(undefined4 *)((long)puVar40 + uVar18) = uVar6;
              if ((int)(uVar14 + 2) < (int)uVar2) {
                    /* catch() { ... } // from try @ 0034956c with catch @ 0034b2a0 */
                uVar14 = uVar7 - (uVar14 + 2);
                uVar6 = *(undefined4 *)((long)puVar40 + uVar25 + 8);
                uVar18 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
                    /* try { // try from 0034b2b0 to 0044b2b3 has its CatchHandler @ 00349298 */
                *(undefined4 *)((long)puVar40 + uVar25 + 8) =
                     *(undefined4 *)((long)puVar40 + uVar18);
                    /* catch() { ... } // from try @ 0034a138 with catch @ 0034b2b4 */
                *(undefined4 *)((long)puVar40 + uVar18) = uVar6;
              }
            }
          }
        }
      }
                    /* catch() { ... } // from try @ 0034962c with catch @ 0034b2c4 */
      if ((uVar4 == 0) && (0 < (int)uVar37)) {
        lVar16 = 0;
                    /* try { // try from 0034b2d4 to 0044b2d7 has its CatchHandler @ 00349298 */
        lVar31 = **(long **)(param_2 + 0x48);
                    /* catch() { ... } // from try @ 00349708 with catch @ 0034b2d8
                       catch() { ... } // from try @ 00349f08 with catch @ 0034b2d8
                       catch() { ... } // from try @ 00349ff8 with catch @ 0034b2d8
                       catch() { ... } // from try @ 0034ad28 with catch @ 0034b2d8 */
        puVar17 = (uint *)(*(long *)(param_2 + 0x10) + lVar42 * 4);
        do {
          puVar34 = puVar40 + lVar16;
                    /* catch() { ... } // from try @ 0034967c with catch @ 0034b2e0
                       catch() { ... } // from try @ 00349f8c with catch @ 0034b2e0
                       catch() { ... } // from try @ 0034a004 with catch @ 0034b2e0
                       catch() { ... } // from try @ 0034ad14 with catch @ 0034b2e0 */
          lVar16 = lVar16 + 1;
          *puVar17 = *puVar34;
          puVar17 = (uint *)((long)puVar17 + lVar31);
        } while ((int)lVar16 < (int)uVar37);
      }
      lVar42 = lVar42 + 1;
      puVar40 = local_430;
    } while ((int)lVar42 < iVar5);
  }
  if ((puVar40 != local_420) && (puVar40 != (uint *)0x0)) {
    operator_delete__(puVar40);
  }
  if ((local_860 != local_850) && (local_860 != (undefined1 *)0x0)) {
    operator_delete__(local_860);
  }
  return;
}


==================================================================

### FUNC 0034b7c0 (948 bytes) name=FUN_0034b7c0

void FUN_0034b7c0(int *param_1,int *param_2,long param_3,long param_4)

{
  long lVar1;
  ulong uVar2;
  long lVar3;
  long lVar4;
  int *piVar5;
  int iVar6;
  int *piVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  int iVar11;
  ulong uVar12;
  long lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  
  lVar9 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar9 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar11 = param_1[1];
    param_3 = param_3 + -1;
    fVar14 = *(float *)(param_4 + (long)iVar11 * 4);
    fVar16 = *(float *)(param_4 + (long)param_2[-1] * 4);
    fVar15 = *(float *)(param_4 + (long)param_1[lVar9 >> 3] * 4);
    piVar7 = param_2;
    piVar5 = param_1;
    if (fVar15 <= fVar14) {
      if (fVar16 <= fVar14) {
        if (fVar15 < fVar16) goto LAB_0034b830;
        goto LAB_0034b8ec;
      }
LAB_0034b90c:
      iVar6 = *param_1;
      param_1[1] = iVar6;
      *param_1 = iVar11;
      iVar11 = param_2[-1];
    }
    else if (fVar15 < fVar16) {
LAB_0034b8ec:
      iVar11 = *param_1;
      *param_1 = param_1[lVar9 >> 3];
      param_1[lVar9 >> 3] = iVar11;
      iVar11 = param_2[-1];
      iVar6 = param_1[1];
      fVar14 = *(float *)(param_4 + (long)*param_1 * 4);
    }
    else {
      if (fVar16 <= fVar14) goto LAB_0034b90c;
LAB_0034b830:
      iVar11 = *param_1;
      *param_1 = param_2[-1];
      param_2[-1] = iVar11;
      iVar6 = param_1[1];
      fVar14 = *(float *)(param_4 + (long)*param_1 * 4);
    }
    while( true ) {
      piVar5 = piVar5 + 1;
      fVar15 = *(float *)(param_4 + (long)iVar6 * 4);
      while (fVar15 < fVar14) {
        piVar5 = piVar5 + 1;
        iVar6 = *piVar5;
        fVar15 = *(float *)(param_4 + (long)iVar6 * 4);
      }
      piVar7 = piVar7 + -1;
      fVar15 = *(float *)(param_4 + (long)iVar11 * 4);
      while (fVar14 < fVar15) {
        piVar7 = piVar7 + -1;
        iVar11 = *piVar7;
        fVar15 = *(float *)(param_4 + (long)iVar11 * 4);
      }
      if (piVar7 <= piVar5) break;
      *piVar5 = iVar11;
      *piVar7 = iVar6;
      iVar11 = piVar7[-1];
      iVar6 = piVar5[1];
      fVar14 = *(float *)(param_4 + (long)*param_1 * 4);
    }
    FUN_0034b7c0(piVar5,param_2,param_3,param_4);
    lVar9 = (long)piVar5 - (long)param_1;
    param_2 = piVar5;
  }
  lVar9 = lVar9 >> 2;
  lVar13 = lVar9 + -2 >> 1;
  piVar5 = param_1 + lVar13;
  lVar10 = lVar13;
  do {
    iVar11 = *piVar5;
    lVar1 = lVar10;
    piVar7 = piVar5;
    while (lVar1 < lVar9 + -1 >> 1) {
      lVar4 = lVar1 + 1;
      lVar3 = lVar4 * 2;
      piVar7 = param_1 + lVar4 * 2;
      iVar6 = param_1[lVar4 * 2];
      if (*(float *)(param_4 + (long)iVar6 * 4) < *(float *)(param_4 + (long)piVar7[-1] * 4)) {
        lVar3 = lVar3 + -1;
        iVar6 = param_1[lVar3];
        piVar7 = param_1 + lVar3;
      }
      param_1[lVar1] = iVar6;
      lVar1 = lVar3;
    }
    if ((lVar13 == lVar1) && (((uint)lVar9 & 1) != 1)) {
      lVar4 = lVar1 + 1;
      lVar1 = lVar4 * 2 + -1;
      *piVar7 = param_1[lVar4 * 2 + -1];
      piVar7 = param_1 + lVar1;
    }
    if (lVar10 < lVar1) {
      lVar4 = lVar1 + -1 >> 1;
      fVar15 = *(float *)(param_4 + (long)iVar11 * 4);
      iVar6 = param_1[lVar4];
      fVar14 = *(float *)(param_4 + (long)iVar6 * 4);
      while (lVar3 = lVar4, fVar14 < fVar15) {
        param_1[lVar1] = iVar6;
        piVar7 = param_1 + lVar3;
        if (lVar3 <= lVar10) break;
        lVar4 = (lVar3 + -1) / 2;
        iVar6 = param_1[lVar4];
        lVar1 = lVar3;
        fVar14 = *(float *)(param_4 + (long)iVar6 * 4);
      }
      *piVar7 = iVar11;
      if (lVar10 == 0) break;
    }
    else {
      *piVar7 = iVar11;
    }
    piVar5 = piVar5 + -1;
    lVar10 = lVar10 + -1;
  } while( true );
LAB_0034b97c:
  param_2 = param_2 + -1;
  iVar11 = *param_2;
  *param_2 = *param_1;
  uVar12 = (long)param_2 - (long)param_1 >> 2;
  lVar9 = (long)(uVar12 - 1) / 2;
  if (lVar9 < 1) {
    uVar2 = uVar12 & 1;
    piVar5 = param_1;
    if ((uVar12 & 1) == 0) goto LAB_0034b9f4;
  }
  else {
    uVar8 = 0;
    do {
      lVar10 = uVar8 + 1;
      uVar2 = lVar10 * 2;
      piVar5 = param_1 + lVar10 * 2;
      iVar6 = param_1[lVar10 * 2];
      if (*(float *)(param_4 + (long)iVar6 * 4) < *(float *)(param_4 + (long)piVar5[-1] * 4)) {
        uVar2 = uVar2 - 1;
        iVar6 = param_1[uVar2];
        piVar5 = param_1 + uVar2;
      }
      param_1[uVar8] = iVar6;
      uVar8 = uVar2;
    } while ((long)uVar2 < lVar9);
    if ((uVar12 & 1) == 0) {
LAB_0034b9f4:
      if (uVar2 == (long)(uVar12 - 2) / 2) {
        lVar9 = uVar2 + 1;
        uVar2 = lVar9 * 2 - 1;
        *piVar5 = param_1[lVar9 * 2 + -1];
        piVar5 = param_1 + uVar2;
      }
      else if ((long)uVar2 < 1) goto LAB_0034ba0c;
    }
    uVar12 = (long)(uVar2 - 1) >> 1;
    fVar15 = *(float *)(param_4 + (long)iVar11 * 4);
    iVar6 = param_1[uVar12];
    fVar14 = *(float *)(param_4 + (long)iVar6 * 4);
    while (uVar8 = uVar12, fVar14 < fVar15) {
      param_1[uVar2] = iVar6;
      piVar5 = param_1 + uVar8;
      uVar12 = (long)(uVar8 - 1) >> 1;
      if (uVar8 == 0) break;
      iVar6 = param_1[uVar12];
      uVar2 = uVar8;
      fVar14 = *(float *)(param_4 + (long)iVar6 * 4);
    }
  }
LAB_0034ba0c:
  *piVar5 = iVar11;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_0034b97c;
}


==================================================================

### FUNC 0034bb80 (2356 bytes) name=FUN_0034bb80

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0034bb80(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  int *piVar10;
  undefined1 *puVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  uint uVar14;
  int iVar15;
  long lVar16;
  int *piVar17;
  ulong uVar18;
  undefined1 (*pauVar19) [16];
  int *piVar20;
  char *pcVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  undefined4 *puVar25;
  ulong uVar26;
  size_t sVar27;
  undefined1 (*pauVar28) [16];
  int *piVar29;
  uint uVar30;
  ulong uVar31;
  long lVar32;
  int *piVar33;
  undefined1 (*pauVar34) [16];
  undefined1 (*pauVar35) [16];
  int *piVar36;
  uint uVar37;
  ulong uVar38;
  ulong uVar39;
  int *piVar40;
  undefined1 *puVar41;
  long lVar42;
  undefined1 auVar43 [16];
  float fVar44;
  undefined1 auVar45 [16];
  undefined8 local_870;
  undefined8 local_868;
  undefined1 *local_860;
  ulong local_858;
  undefined1 local_850 [1056];
  int *local_430;
  ulong local_428;
  int local_420 [264];
  
  local_430 = local_420;
  local_860 = local_850;
  local_858 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_428 = 0x108;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
    local_870 = 0;
    local_868 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_870,0x14);
    uVar13 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar12 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar21 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar21 = uVar12;
    *(undefined8 *)(pcVar21 + 8) = uVar13;
    cv::error(-0xd7,(String *)&local_870,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = float]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_870);
  }
  if (uVar4 == 0) {
    uVar38 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar31 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar23 = uVar31;
    if (local_858 < uVar31) {
      if (local_860 != local_850) {
        if (local_860 != (undefined1 *)0x0) {
          operator_delete__(local_860);
        }
        local_860 = local_850;
        local_858 = 0x108;
      }
      uVar23 = local_858;
      if (0x108 < uVar31) {
        uVar23 = uVar31 << 2;
        if (0x1fc0000000000000 < uVar31) {
          uVar23 = 0xffffffffffffffff;
        }
        local_860 = operator_new__(uVar23);
        uVar23 = uVar31;
      }
    }
    local_858 = uVar23;
    piVar10 = local_430;
    puVar11 = local_860;
    if (local_428 < uVar31) {
      if (local_430 != local_420) {
        if (local_430 != (int *)0x0) {
          operator_delete__(local_430);
        }
        local_430 = local_420;
        local_428 = 0x108;
      }
                    /* try { // try from 0034c3d0 to 0044c68f has its CatchHandler @ 0034dabc */
      if (uVar31 < 0x109) {
        piVar10 = local_420;
        puVar11 = local_860;
        uVar31 = local_428;
      }
      else {
        uVar23 = uVar31 << 2;
        if (0x1fc0000000000000 < uVar31) {
          uVar23 = 0xffffffffffffffff;
        }
        local_430 = operator_new__(uVar23);
        piVar10 = local_430;
        puVar11 = local_860;
      }
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar38 = (ulong)*(uint *)(param_1 + 0xc);
    piVar10 = local_430;
    puVar11 = local_860;
    uVar31 = local_428;
  }
  local_428 = uVar31;
  piVar40 = piVar10;
  local_860 = puVar11;
  if (0 < iVar5) {
    uVar23 = -(uVar38 >> 0x1f) & 0xfffffffc00000000 | uVar38 << 2;
    uVar37 = (uint)uVar38;
    uVar2 = (int)uVar37 / 2;
    uVar39 = (ulong)uVar2;
    uVar7 = uVar37 - 1;
    uVar31 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar7 << 2;
    uVar38 = -(ulong)(uVar37 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 2) << 2;
    uVar3 = uVar37;
    if ((int)uVar37 < 1) {
      uVar3 = 1;
    }
    uVar24 = -(ulong)(uVar37 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar37 - 3) << 2;
                    /* catch() { ... } // from try @ 0034b5c0 with catch @ 0034bca0 */
                    /* try { // try from 0034bcb0 to 0044bcb3 has its CatchHandler @ 0034b4c4 */
                    /* catch() { ... } // from try @ 0034bd0c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034bedc with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034bf78 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034c10c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034c874 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034cc14 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034d1c8 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034d63c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034d6f4 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034d768 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034da8c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034db5c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034dbd8 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034dc24 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034dcd0 with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034dd2c with catch @ 0034bcb4
                       catch() { ... } // from try @ 0034dea4 with catch @ 0034bcb4 */
    lVar42 = 0;
    do {
      if (uVar4 == 0) {
        piVar40 = piVar10;
        puVar41 = puVar11;
        if (0 < (int)uVar37) {
          lVar16 = 0;
          lVar32 = **(long **)(param_1 + 0x48);
          puVar25 = (undefined4 *)(*(long *)(param_1 + 0x10) + lVar42 * 4);
          do {
            uVar6 = *puVar25;
            puVar25 = (undefined4 *)((long)puVar25 + lVar32);
            *(undefined4 *)(puVar11 + lVar16 * 4) = uVar6;
                    /* try { // try from 0034bd0c to 0044be7b has its CatchHandler @ 0034bcb4 */
            lVar16 = lVar16 + 1;
          } while ((int)lVar16 < (int)uVar37);
          uVar14 = -((uint)((ulong)piVar10 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
joined_r0x0034c17c:
          uVar30 = uVar3;
          if (((int)uVar3 < 8) || (uVar26 = 0, uVar30 = uVar14, uVar14 != 0)) {
            uVar14 = uVar30;
            *piVar40 = 0;
            if ((uVar14 == 1) ||
               ((((piVar40[1] = 1, uVar14 == 2 || (piVar40[2] = 2, uVar14 == 3)) ||
                 (piVar40[3] = 3, uVar14 == 4)) || (piVar40[4] = 4, uVar14 == 5)))) {
              uVar26 = (ulong)uVar14;
            }
            else {
              piVar40[5] = 5;
              if (uVar14 == 7) {
                uVar26 = 7;
                piVar40[6] = 6;
              }
              else {
                uVar26 = 6;
              }
            }
            if (uVar14 == uVar3) goto LAB_0034be44;
          }
          uVar30 = uVar7;
          if ((int)uVar37 < 1) {
            uVar30 = 0;
          }
          uVar1 = ((uVar3 - uVar14) - 4 >> 2) + 1;
          iVar15 = uVar1 * 4;
          if (2 < uVar30 - uVar14) {
            iVar22 = (int)uVar26;
            uVar30 = 0;
            auVar43._0_4_ = iVar22 + (int)_DAT_0034c510;
            auVar43._4_4_ = iVar22 + (int)((ulong)_DAT_0034c510 >> 0x20);
            auVar43._8_4_ = iVar22 + (int)_UNK_0034c518;
            auVar43._12_4_ = iVar22 + (int)((ulong)_UNK_0034c518 >> 0x20);
            piVar17 = piVar40 + uVar14;
            do {
              *(long *)(piVar17 + 2) = auVar43._8_8_;
              *(long *)piVar17 = auVar43._0_8_;
              uVar30 = uVar30 + 1;
              auVar45._0_4_ = auVar43._0_4_ + 4;
              auVar45._4_4_ = auVar43._4_4_ + 4;
              auVar45._8_4_ = auVar43._8_4_ + 4;
              auVar45._12_4_ = auVar43._12_4_ + 4;
              piVar17 = piVar17 + 4;
              auVar43 = auVar45;
            } while (uVar30 < uVar1);
            uVar26 = (ulong)(uint)(iVar22 + iVar15);
            if (iVar15 == uVar3 - uVar14) goto LAB_0034be44;
          }
          uVar18 = -(uVar26 >> 0x1f) & 0xfffffffc00000000 | uVar26 << 2;
          iVar15 = (int)uVar26;
          *(int *)((long)piVar40 + uVar18) = iVar15;
          if (iVar15 + 1 < (int)uVar37) {
            *(int *)((long)piVar40 + uVar18 + 4) = iVar15 + 1;
            if (iVar15 + 2 < (int)uVar37) {
              *(int *)((long)piVar40 + uVar18 + 8) = iVar15 + 2;
            }
          }
        }
      }
      else {
        puVar41 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar42 * *(long *)(param_1 + 0x50));
        piVar40 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar37) {
          uVar14 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
          goto joined_r0x0034c17c;
        }
      }
LAB_0034be44:
      piVar17 = (int *)((long)piVar40 + uVar23);
      if (piVar40 != piVar17) {
        FUN_0034b7c0(piVar40,piVar17,(0x3f - LZCOUNT((long)uVar23 >> 2)) * 2,puVar41);
        piVar36 = piVar40;
        if ((long)uVar23 < 0x44) {
          while (piVar33 = piVar36 + 1, piVar17 != piVar33) {
            iVar15 = *piVar33;
            fVar44 = *(float *)(puVar41 + (long)iVar15 * 4);
            if (*(float *)(puVar41 + (long)*piVar40 * 4) <= fVar44) {
              iVar22 = *piVar36;
                    /* try { // try from 0034c10c to 0044c27f has its CatchHandler @ 0034bcb4 */
              piVar36 = piVar33;
                    /* try { // try from 0034c104 to 0044c107 has its CatchHandler @ 0034dba8 */
              if (fVar44 < *(float *)(puVar41 + (long)iVar22 * 4)) {
                do {
                  piVar29 = piVar36 + -1;
                  *piVar36 = iVar22;
                  iVar22 = piVar36[-2];
                  piVar36 = piVar29;
                } while (fVar44 < *(float *)(puVar41 + (long)iVar22 * 4));
                *piVar29 = iVar15;
                piVar36 = piVar33;
              }
              else {
                *piVar33 = iVar15;
              }
            }
            else {
              sVar27 = (long)piVar33 - (long)piVar40;
              if ((long)sVar27 >> 2 != 0) {
                memmove((void *)((long)piVar33 + (4 - sVar27)),piVar40,sVar27);
              }
              *piVar40 = iVar15;
              piVar36 = piVar33;
            }
          }
        }
        else {
          piVar36 = piVar40 + 0x10;
          piVar33 = piVar40 + 1;
          do {
            iVar15 = *piVar33;
            fVar44 = *(float *)(puVar41 + (long)iVar15 * 4);
            if (*(float *)(puVar41 + (long)*piVar40 * 4) <= fVar44) {
              iVar22 = piVar33[-1];
              piVar29 = piVar33;
              if (fVar44 < *(float *)(puVar41 + (long)iVar22 * 4)) {
                do {
                  piVar20 = piVar29 + -1;
                  *piVar29 = iVar22;
                    /* try { // try from 0034c2ac to 0044c2cf has its CatchHandler @ 0034dbb8 */
                  iVar22 = piVar29[-2];
                  piVar29 = piVar20;
                } while (fVar44 < *(float *)(puVar41 + (long)iVar22 * 4));
                *piVar20 = iVar15;
              }
              else {
                *piVar33 = iVar15;
              }
            }
            else {
              sVar27 = (long)piVar33 - (long)piVar40;
              if ((long)sVar27 >> 2 != 0) {
                memmove((void *)((long)piVar33 + (4 - sVar27)),piVar40,sVar27);
                    /* try { // try from 0034c284 to 0044c2a7 has its CatchHandler @ 0034dbc0 */
              }
              *piVar40 = iVar15;
            }
            piVar33 = piVar33 + 1;
          } while (piVar36 != piVar33);
          if (piVar17 != piVar36) {
            iVar15 = piVar40[0xf];
            iVar22 = *piVar36;
            fVar44 = *(float *)(puVar41 + (long)iVar22 * 4);
            piVar33 = piVar40 + 0xf;
            if (fVar44 < *(float *)(puVar41 + (long)iVar15 * 4)) goto LAB_0034c1fc;
            do {
              *piVar36 = iVar22;
              while( true ) {
                piVar36 = piVar36 + 1;
                if (piVar17 == piVar36) goto LAB_0034beb4;
                iVar15 = piVar36[-1];
                iVar22 = *piVar36;
                fVar44 = *(float *)(puVar41 + (long)iVar22 * 4);
                piVar33 = piVar36 + -1;
                if (*(float *)(puVar41 + (long)iVar15 * 4) <= fVar44) break;
LAB_0034c1fc:
                do {
                  piVar29 = piVar33;
                  piVar29[1] = iVar15;
                  iVar15 = piVar29[-1];
                  piVar33 = piVar29 + -1;
                } while (fVar44 < *(float *)(puVar41 + (long)iVar15 * 4));
                *piVar29 = iVar22;
              }
            } while( true );
          }
        }
      }
LAB_0034beb4:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar23 + uVar39 * -4) < (long)(uVar39 * 4) && 0 < (long)uVar23) {
          lVar16 = 0;
          piVar17 = (int *)((long)piVar40 + uVar31);
          do {
            iVar15 = piVar40[lVar16];
            piVar40[lVar16] = *piVar17;
            lVar16 = lVar16 + 1;
            *piVar17 = iVar15;
            piVar17 = piVar17 + -1;
          } while ((int)lVar16 < (int)uVar2);
        }
        else {
                    /* try { // try from 0034bed4 to 0044bed7 has its CatchHandler @ 0034dcc0 */
          uVar14 = -((uint)((ulong)piVar40 >> 2) & 3) & 3;
                    /* try { // try from 0034bedc to 0044bf43 has its CatchHandler @ 0034bcb4 */
          uVar26 = uVar39;
          if (uVar14 < uVar2) {
            uVar26 = (ulong)uVar14;
          }
          iVar15 = (int)uVar26;
          uVar18 = uVar26;
          if (iVar15 != 0) {
            iVar22 = *piVar40;
            *piVar40 = *(int *)((long)piVar40 + uVar31);
            *(int *)((long)piVar40 + uVar31) = iVar22;
            if (iVar15 != 1) {
              iVar22 = piVar40[1];
              piVar40[1] = *(int *)((long)piVar40 + uVar38);
              *(int *)((long)piVar40 + uVar38) = iVar22;
              if (iVar15 == 3) {
                iVar22 = piVar40[2];
                piVar40[2] = *(int *)((long)piVar40 + uVar24);
                *(int *)((long)piVar40 + uVar24) = iVar22;
              }
              else {
                uVar18 = 2;
              }
            }
          }
          uVar14 = ((uVar2 - iVar15) - 4 >> 2) + 1;
          pauVar28 = (undefined1 (*) [16])((long)piVar40 + (uVar23 - 0xc) + ~uVar26 * 4);
          uVar30 = 0;
                    /* try { // try from 0034bf70 to 0044bf73 has its CatchHandler @ 0034dbc8 */
          iVar22 = uVar14 * 4;
          pauVar19 = (undefined1 (*) [16])(piVar40 + uVar26);
          pauVar34 = pauVar28;
          pauVar35 = (undefined1 (*) [16])(piVar40 + uVar26);
          do {
            auVar43 = *pauVar28;
                    /* try { // try from 0034bf78 to 0044c0bb has its CatchHandler @ 0034bcb4 */
            uVar30 = uVar30 + 1;
            pauVar28 = pauVar28 + -1;
            auVar8._8_8_ = _UNK_0034c528;
            auVar8._0_8_ = _DAT_0034c520;
            auVar45 = a64_TBL(ZEXT816(0),auVar43,auVar8);
            auVar9._8_8_ = _UNK_0034c528;
            auVar9._0_8_ = _DAT_0034c520;
            auVar43 = a64_TBL(ZEXT816(0),*pauVar19,auVar9);
            *(long *)((long)*pauVar35 + 8) = auVar45._8_8_;
            *(long *)*pauVar35 = auVar45._0_8_;
            *(long *)(*pauVar34 + 8) = auVar43._8_8_;
            *(long *)*pauVar34 = auVar43._0_8_;
            pauVar34 = pauVar34 + -1;
            pauVar19 = pauVar19 + 1;
            pauVar35 = pauVar35 + 1;
          } while (uVar30 < uVar14);
          uVar14 = iVar22 + (int)uVar18;
          if (iVar22 != uVar2 - iVar15) {
            uVar26 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
            uVar6 = *(undefined4 *)((long)piVar40 + uVar26);
            uVar18 = -(ulong)(uVar7 - uVar14 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar7 - uVar14) << 2;
            *(undefined4 *)((long)piVar40 + uVar26) = *(undefined4 *)((long)piVar40 + uVar18);
            *(undefined4 *)((long)piVar40 + uVar18) = uVar6;
            if ((int)(uVar14 + 1) < (int)uVar2) {
              uVar30 = uVar7 - (uVar14 + 1);
              uVar18 = -(ulong)(uVar30 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar30 << 2;
              uVar6 = *(undefined4 *)((long)piVar40 + uVar26 + 4);
              *(undefined4 *)((long)piVar40 + uVar26 + 4) = *(undefined4 *)((long)piVar40 + uVar18);
              *(undefined4 *)((long)piVar40 + uVar18) = uVar6;
              if ((int)(uVar14 + 2) < (int)uVar2) {
                uVar14 = uVar7 - (uVar14 + 2);
                uVar6 = *(undefined4 *)((long)piVar40 + uVar26 + 8);
                uVar18 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
                *(undefined4 *)((long)piVar40 + uVar26 + 8) =
                     *(undefined4 *)((long)piVar40 + uVar18);
                *(undefined4 *)((long)piVar40 + uVar18) = uVar6;
              }
            }
          }
        }
      }
      if ((uVar4 == 0) && (0 < (int)uVar37)) {
        lVar16 = 0;
        lVar32 = **(long **)(param_2 + 0x48);
        piVar17 = (int *)(*(long *)(param_2 + 0x10) + lVar42 * 4);
        do {
          piVar36 = piVar40 + lVar16;
          lVar16 = lVar16 + 1;
          *piVar17 = *piVar36;
          piVar17 = (int *)((long)piVar17 + lVar32);
        } while ((int)lVar16 < (int)uVar37);
      }
      lVar42 = lVar42 + 1;
      piVar40 = local_430;
    } while ((int)lVar42 < iVar5);
  }
  if ((piVar40 != local_420) && (piVar40 != (int *)0x0)) {
    operator_delete__(piVar40);
  }
  if ((local_860 != local_850) && (local_860 != (undefined1 *)0x0)) {
    operator_delete__(local_860);
  }
  return;
}


==================================================================

### FUNC 0034c530 (948 bytes) name=FUN_0034c530

void FUN_0034c530(int *param_1,int *param_2,long param_3,long param_4)

{
  long lVar1;
  ulong uVar2;
  long lVar3;
  long lVar4;
  int *piVar5;
  int iVar6;
  int *piVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  int iVar11;
  ulong uVar12;
  long lVar13;
  double dVar14;
  double dVar15;
  double dVar16;
  
  lVar9 = (long)param_2 - (long)param_1;
  while( true ) {
    if (lVar9 < 0x44) {
      return;
    }
    if (param_3 == 0) break;
    iVar11 = param_1[1];
    param_3 = param_3 + -1;
    dVar14 = *(double *)(param_4 + (long)iVar11 * 8);
    dVar16 = *(double *)(param_4 + (long)param_2[-1] * 8);
    dVar15 = *(double *)(param_4 + (long)param_1[lVar9 >> 3] * 8);
    piVar7 = param_2;
    piVar5 = param_1;
    if (dVar15 <= dVar14) {
      if (dVar16 <= dVar14) {
        if (dVar15 < dVar16) goto LAB_0034c5a0;
        goto LAB_0034c65c;
      }
LAB_0034c67c:
      iVar6 = *param_1;
      param_1[1] = iVar6;
      *param_1 = iVar11;
      iVar11 = param_2[-1];
    }
    else if (dVar15 < dVar16) {
LAB_0034c65c:
      iVar11 = *param_1;
      *param_1 = param_1[lVar9 >> 3];
      param_1[lVar9 >> 3] = iVar11;
      iVar11 = param_2[-1];
      iVar6 = param_1[1];
      dVar14 = *(double *)(param_4 + (long)*param_1 * 8);
    }
    else {
      if (dVar16 <= dVar14) goto LAB_0034c67c;
LAB_0034c5a0:
      iVar11 = *param_1;
      *param_1 = param_2[-1];
      param_2[-1] = iVar11;
      iVar6 = param_1[1];
      dVar14 = *(double *)(param_4 + (long)*param_1 * 8);
    }
    while( true ) {
      piVar5 = piVar5 + 1;
      dVar15 = *(double *)(param_4 + (long)iVar6 * 8);
      while (dVar15 < dVar14) {
        piVar5 = piVar5 + 1;
        iVar6 = *piVar5;
        dVar15 = *(double *)(param_4 + (long)iVar6 * 8);
      }
      piVar7 = piVar7 + -1;
      dVar15 = *(double *)(param_4 + (long)iVar11 * 8);
      while (dVar14 < dVar15) {
        piVar7 = piVar7 + -1;
        iVar11 = *piVar7;
        dVar15 = *(double *)(param_4 + (long)iVar11 * 8);
      }
      if (piVar7 <= piVar5) break;
      *piVar5 = iVar11;
      *piVar7 = iVar6;
      iVar11 = piVar7[-1];
      iVar6 = piVar5[1];
      dVar14 = *(double *)(param_4 + (long)*param_1 * 8);
    }
    FUN_0034c530(piVar5,param_2,param_3,param_4);
    lVar9 = (long)piVar5 - (long)param_1;
    param_2 = piVar5;
  }
  lVar9 = lVar9 >> 2;
  lVar13 = lVar9 + -2 >> 1;
  piVar5 = param_1 + lVar13;
  lVar10 = lVar13;
  do {
                    /* try { // try from 0034c7c0 to 0044c7c3 has its CatchHandler @ 0034dbb8 */
    iVar11 = *piVar5;
    lVar1 = lVar10;
    piVar7 = piVar5;
    while (lVar1 < lVar9 + -1 >> 1) {
      lVar4 = lVar1 + 1;
      lVar3 = lVar4 * 2;
      piVar7 = param_1 + lVar4 * 2;
      iVar6 = param_1[lVar4 * 2];
      if (*(double *)(param_4 + (long)iVar6 * 8) < *(double *)(param_4 + (long)piVar7[-1] * 8)) {
        lVar3 = lVar3 + -1;
        iVar6 = param_1[lVar3];
        piVar7 = param_1 + lVar3;
      }
      param_1[lVar1] = iVar6;
      lVar1 = lVar3;
    }
    if ((lVar13 == lVar1) && (((uint)lVar9 & 1) != 1)) {
      lVar4 = lVar1 + 1;
      lVar1 = lVar4 * 2 + -1;
      *piVar7 = param_1[lVar4 * 2 + -1];
      piVar7 = param_1 + lVar1;
    }
    if (lVar10 < lVar1) {
      lVar4 = lVar1 + -1 >> 1;
      dVar15 = *(double *)(param_4 + (long)iVar11 * 8);
      iVar6 = param_1[lVar4];
      dVar14 = *(double *)(param_4 + (long)iVar6 * 8);
      while (lVar3 = lVar4, dVar14 < dVar15) {
        param_1[lVar1] = iVar6;
        piVar7 = param_1 + lVar3;
                    /* try { // try from 0034c844 to 0044c847 has its CatchHandler @ 0034dbc0 */
        if (lVar3 <= lVar10) break;
        lVar4 = (lVar3 + -1) / 2;
        iVar6 = param_1[lVar4];
        lVar1 = lVar3;
        dVar14 = *(double *)(param_4 + (long)iVar6 * 8);
      }
      *piVar7 = iVar11;
      if (lVar10 == 0) break;
    }
    else {
      *piVar7 = iVar11;
    }
    piVar5 = piVar5 + -1;
    lVar10 = lVar10 + -1;
  } while( true );
LAB_0034c6ec:
  param_2 = param_2 + -1;
  iVar11 = *param_2;
  *param_2 = *param_1;
  uVar12 = (long)param_2 - (long)param_1 >> 2;
  lVar9 = (long)(uVar12 - 1) / 2;
  if (lVar9 < 1) {
    uVar2 = uVar12 & 1;
    piVar5 = param_1;
    if ((uVar12 & 1) == 0) goto LAB_0034c764;
  }
  else {
    uVar8 = 0;
    do {
      lVar10 = uVar8 + 1;
      uVar2 = lVar10 * 2;
      piVar5 = param_1 + lVar10 * 2;
      iVar6 = param_1[lVar10 * 2];
                    /* try { // try from 0034c73c to 0044c73f has its CatchHandler @ 0034dcb8 */
      if (*(double *)(param_4 + (long)iVar6 * 8) < *(double *)(param_4 + (long)piVar5[-1] * 8)) {
        uVar2 = uVar2 - 1;
        iVar6 = param_1[uVar2];
        piVar5 = param_1 + uVar2;
      }
      param_1[uVar8] = iVar6;
      uVar8 = uVar2;
    } while ((long)uVar2 < lVar9);
    if ((uVar12 & 1) == 0) {
LAB_0034c764:
      if (uVar2 == (long)(uVar12 - 2) / 2) {
        lVar9 = uVar2 + 1;
                    /* try { // try from 0034c874 to 0044cab7 has its CatchHandler @ 0034bcb4 */
        uVar2 = lVar9 * 2 - 1;
        *piVar5 = param_1[lVar9 * 2 + -1];
        piVar5 = param_1 + uVar2;
      }
      else if ((long)uVar2 < 1) goto LAB_0034c77c;
    }
    uVar12 = (long)(uVar2 - 1) >> 1;
    dVar15 = *(double *)(param_4 + (long)iVar11 * 8);
    iVar6 = param_1[uVar12];
    dVar14 = *(double *)(param_4 + (long)iVar6 * 8);
    while (uVar8 = uVar12, dVar14 < dVar15) {
      param_1[uVar2] = iVar6;
      piVar5 = param_1 + uVar8;
      uVar12 = (long)(uVar8 - 1) >> 1;
      if (uVar8 == 0) break;
      iVar6 = param_1[uVar12];
      uVar2 = uVar8;
      dVar14 = *(double *)(param_4 + (long)iVar6 * 8);
    }
  }
LAB_0034c77c:
  *piVar5 = iVar11;
  if ((long)param_2 - (long)param_1 < 8) {
    return;
  }
  goto LAB_0034c6ec;
}


==================================================================

### FUNC 0034c8f0 (2360 bytes) name=FUN_0034c8f0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

void FUN_0034c8f0(long param_1,long param_2,uint param_3)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  undefined4 uVar6;
  uint uVar7;
  undefined1 auVar8 [16];
  undefined1 auVar9 [16];
  int *piVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  undefined8 uVar13;
  uint uVar14;
  int iVar15;
  long lVar16;
  int *piVar17;
  ulong uVar18;
  undefined1 (*pauVar19) [16];
  int *piVar20;
  char *pcVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  undefined8 *puVar25;
  ulong uVar26;
  undefined8 uVar27;
  size_t sVar28;
  undefined1 (*pauVar29) [16];
  int *piVar30;
  uint uVar31;
  ulong uVar32;
  long lVar33;
  int *piVar34;
  undefined1 (*pauVar35) [16];
  undefined1 (*pauVar36) [16];
  int *piVar37;
  uint uVar38;
  ulong uVar39;
  ulong uVar40;
  int *piVar41;
  undefined1 *puVar42;
  long lVar43;
  undefined1 auVar44 [16];
  double dVar45;
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined8 local_890;
  undefined8 local_888;
  int *local_880;
  ulong local_878;
  int local_870 [264];
  undefined1 *local_450;
  ulong local_448;
  undefined1 local_440 [1088];
  
  local_880 = local_870;
  local_450 = local_440;
  local_878 = 0x108;
  uVar4 = param_3 & 1 ^ 1;
  local_448 = 0x88;
  if (*(long *)(param_1 + 0x10) == *(long *)(param_2 + 0x10)) {
                    /* try { // try from 0034d1c8 to 0044d1e3 has its CatchHandler @ 0034bcb4 */
    local_890 = 0;
    local_888 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_890,0x14);
    uVar13 = s_src_data____dst_data_0046c1b8._8_8_;
    uVar27 = s_src_data____dst_data_0046c1b8._0_8_;
    *(undefined4 *)(pcVar21 + 0x10) = s_src_data____dst_data_0046c1b8._16_4_;
    *(undefined8 *)pcVar21 = uVar27;
    *(undefined8 *)(pcVar21 + 8) = uVar13;
    cv::error(-0xd7,(String *)&local_890,
              "void cv::sortIdx_(const cv::Mat&, cv::Mat&, int) [with T = double]",
              "/builds/master_pack-android/opencv/modules/core/src/matrix.cpp",0xf70);
    cv::String::deallocate((String *)&local_890);
  }
  if (uVar4 == 0) {
    uVar39 = (ulong)*(uint *)(param_1 + 8);
    iVar5 = *(int *)(param_1 + 0xc);
    uVar32 = (ulong)(int)*(uint *)(param_1 + 8);
    uVar23 = uVar32;
    if (local_448 < uVar32) {
      if (local_450 != local_440) {
        if (local_450 != (undefined1 *)0x0) {
          operator_delete__(local_450);
        }
        local_450 = local_440;
        local_448 = 0x88;
      }
      uVar23 = local_448;
      if (0x88 < uVar32) {
        uVar23 = uVar32 << 3;
        if (0xfe0000000000000 < uVar32) {
          uVar23 = 0xffffffffffffffff;
        }
        local_450 = operator_new__(uVar23);
        uVar23 = uVar32;
      }
    }
    local_448 = uVar23;
    piVar10 = local_880;
    puVar11 = local_450;
    if (local_878 < uVar32) {
      if (local_880 != local_870) {
        if (local_880 != (int *)0x0) {
          operator_delete__(local_880);
        }
        local_880 = local_870;
        local_878 = 0x108;
      }
      if (uVar32 < 0x109) {
        piVar10 = local_870;
        uVar32 = local_878;
        puVar11 = local_450;
      }
      else {
        uVar23 = uVar32 << 2;
        if (0x1fc0000000000000 < uVar32) {
          uVar23 = 0xffffffffffffffff;
        }
        local_880 = operator_new__(uVar23);
        piVar10 = local_880;
        puVar11 = local_450;
      }
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar39 = (ulong)*(uint *)(param_1 + 0xc);
    piVar10 = local_880;
    uVar32 = local_878;
    puVar11 = local_450;
  }
  local_878 = uVar32;
  piVar41 = piVar10;
  local_450 = puVar11;
  if (0 < iVar5) {
    uVar23 = -(uVar39 >> 0x1f) & 0xfffffffc00000000 | uVar39 << 2;
    uVar38 = (uint)uVar39;
    uVar2 = (int)uVar38 / 2;
    uVar40 = (ulong)uVar2;
    uVar7 = uVar38 - 1;
    uVar32 = -(ulong)(uVar7 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar7 << 2;
    uVar39 = -(ulong)(uVar38 - 2 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar38 - 2) << 2;
    uVar3 = uVar38;
    if ((int)uVar38 < 1) {
      uVar3 = 1;
    }
    uVar24 = -(ulong)(uVar38 - 3 >> 0x1f) & 0xfffffffc00000000 | (ulong)(uVar38 - 3) << 2;
    lVar43 = 0;
    do {
      if (uVar4 == 0) {
        piVar41 = piVar10;
        puVar42 = puVar11;
        if (0 < (int)uVar38) {
          lVar16 = 0;
          lVar33 = **(long **)(param_1 + 0x48);
          puVar25 = (undefined8 *)(*(long *)(param_1 + 0x10) + lVar43 * 8);
          do {
            uVar27 = *puVar25;
            puVar25 = (undefined8 *)((long)puVar25 + lVar33);
            *(undefined8 *)(puVar11 + lVar16 * 8) = uVar27;
            lVar16 = lVar16 + 1;
          } while ((int)lVar16 < (int)uVar38);
          uVar14 = -((uint)((ulong)piVar10 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
joined_r0x0034cef0:
          uVar31 = uVar3;
          if (((int)uVar3 < 8) || (uVar26 = 0, uVar31 = uVar14, uVar14 != 0)) {
            uVar14 = uVar31;
            *piVar41 = 0;
                    /* try { // try from 0034cabc to 0044cadf has its CatchHandler @ 0034dc14 */
                    /* try { // try from 0034cae4 to 0044cb07 has its CatchHandler @ 0034db60 */
            if ((uVar14 == 1) ||
               ((((piVar41[1] = 1, uVar14 == 2 || (piVar41[2] = 2, uVar14 == 3)) ||
                 (piVar41[3] = 3, uVar14 == 4)) || (piVar41[4] = 4, uVar14 == 5)))) {
              uVar26 = (ulong)uVar14;
            }
            else {
              piVar41[5] = 5;
              if (uVar14 == 7) {
                uVar26 = 7;
                piVar41[6] = 6;
              }
              else {
                uVar26 = 6;
              }
            }
            if (uVar14 == uVar3) goto LAB_0034cbb8;
          }
          uVar31 = uVar7;
          if ((int)uVar38 < 1) {
            uVar31 = 0;
          }
          uVar1 = ((uVar3 - uVar14) - 4 >> 2) + 1;
          iVar15 = uVar1 * 4;
          if (2 < uVar31 - uVar14) {
            iVar22 = (int)uVar26;
            uVar31 = 0;
            auVar44._0_4_ = iVar22 + (int)_DAT_0034d280;
            auVar44._4_4_ = iVar22 + (int)((ulong)_DAT_0034d280 >> 0x20);
            auVar44._8_4_ = iVar22 + (int)_UNK_0034d288;
            auVar44._12_4_ = iVar22 + (int)((ulong)_UNK_0034d288 >> 0x20);
            piVar17 = piVar41 + uVar14;
            do {
              *(long *)(piVar17 + 2) = auVar44._8_8_;
              *(long *)piVar17 = auVar44._0_8_;
              uVar31 = uVar31 + 1;
              auVar46._0_4_ = auVar44._0_4_ + 4;
              auVar46._4_4_ = auVar44._4_4_ + 4;
              auVar46._8_4_ = auVar44._8_4_ + 4;
              auVar46._12_4_ = auVar44._12_4_ + 4;
              piVar17 = piVar17 + 4;
              auVar44 = auVar46;
            } while (uVar31 < uVar1);
            uVar26 = (ulong)(uint)(iVar22 + iVar15);
            if (iVar15 == uVar3 - uVar14) goto LAB_0034cbb8;
          }
          uVar18 = -(uVar26 >> 0x1f) & 0xfffffffc00000000 | uVar26 << 2;
          iVar15 = (int)uVar26;
          *(int *)((long)piVar41 + uVar18) = iVar15;
          if (iVar15 + 1 < (int)uVar38) {
            *(int *)((long)piVar41 + uVar18 + 4) = iVar15 + 1;
            if (iVar15 + 2 < (int)uVar38) {
              *(int *)((long)piVar41 + uVar18 + 8) = iVar15 + 2;
            }
          }
        }
      }
      else {
        puVar42 = (undefined1 *)(*(long *)(param_1 + 0x10) + lVar43 * *(long *)(param_1 + 0x50));
        piVar41 = (int *)(*(long *)(param_2 + 0x10) + lVar43 * **(long **)(param_2 + 0x48));
        if (0 < (int)uVar38) {
          uVar14 = -((uint)((ulong)piVar41 >> 2) & 3) & 3;
          if (uVar3 < uVar14) {
            uVar14 = uVar3;
          }
          goto joined_r0x0034cef0;
        }
      }
LAB_0034cbb8:
      piVar17 = (int *)((long)piVar41 + uVar23);
      if (piVar41 != piVar17) {
                    /* try { // try from 0034cbcc to 0044cbcf has its CatchHandler @ 0034dbec */
                    /* try { // try from 0034cbd4 to 0044cbeb has its CatchHandler @ 0034db60 */
        FUN_0034c530(piVar41,piVar17,(0x3f - LZCOUNT((long)uVar23 >> 2)) * 2,puVar42);
        puVar12 = local_450;
        uVar26 = local_448;
        piVar37 = piVar41;
        if ((long)uVar23 < 0x44) {
                    /* try { // try from 0034cbf0 to 0044cc0b has its CatchHandler @ 0034dc14 */
          while (piVar34 = piVar37 + 1, local_450 = puVar12, local_448 = uVar26, piVar17 != piVar34)
          {
            iVar15 = *piVar34;
            dVar45 = *(double *)(puVar42 + (long)iVar15 * 8);
            if (*(double *)(puVar42 + (long)*piVar41 * 8) <= dVar45) {
              iVar22 = *piVar37;
              piVar37 = piVar34;
              if (dVar45 < *(double *)(puVar42 + (long)iVar22 * 8)) {
                do {
                  piVar30 = piVar37 + -1;
                  *piVar37 = iVar22;
                  iVar22 = piVar37[-2];
                  piVar37 = piVar30;
                } while (dVar45 < *(double *)(puVar42 + (long)iVar22 * 8));
                *piVar30 = iVar15;
                piVar37 = piVar34;
              }
              else {
                *piVar34 = iVar15;
              }
            }
            else {
              sVar28 = (long)piVar34 - (long)piVar41;
                    /* try { // try from 0034cc14 to 0044ccab has its CatchHandler @ 0034bcb4 */
              if ((long)sVar28 >> 2 != 0) {
                memmove((void *)((long)piVar34 + (4 - sVar28)),piVar41,sVar28);
              }
              *piVar41 = iVar15;
              puVar12 = local_450;
              uVar26 = local_448;
              piVar37 = piVar34;
            }
          }
        }
        else {
          piVar37 = piVar41 + 0x10;
          piVar34 = piVar41 + 1;
          do {
            iVar15 = *piVar34;
            dVar45 = *(double *)(puVar42 + (long)iVar15 * 8);
            if (*(double *)(puVar42 + (long)*piVar41 * 8) <= dVar45) {
              iVar22 = piVar34[-1];
              piVar30 = piVar34;
              if (dVar45 < *(double *)(puVar42 + (long)iVar22 * 8)) {
                do {
                  piVar20 = piVar30 + -1;
                  *piVar30 = iVar22;
                  iVar22 = piVar30[-2];
                  piVar30 = piVar20;
                } while (dVar45 < *(double *)(puVar42 + (long)iVar22 * 8));
                *piVar20 = iVar15;
              }
              else {
                *piVar34 = iVar15;
              }
            }
            else {
              sVar28 = (long)piVar34 - (long)piVar41;
              if ((long)sVar28 >> 2 != 0) {
                memmove((void *)((long)piVar34 + (4 - sVar28)),piVar41,sVar28);
              }
              *piVar41 = iVar15;
            }
            piVar34 = piVar34 + 1;
          } while (piVar37 != piVar34);
          if (piVar17 != piVar37) {
            iVar15 = piVar41[0xf];
            iVar22 = *piVar37;
            auVar47._0_8_ = *(double *)(puVar42 + (long)iVar22 * 8);
            auVar47._8_8_ = 0;
            piVar34 = piVar41 + 0xf;
            if (auVar47._0_8_ < *(double *)(puVar42 + (long)iVar15 * 8)) goto LAB_0034cf70;
            do {
              *piVar37 = iVar22;
              while( true ) {
                piVar37 = piVar37 + 1;
                if (piVar17 == piVar37) goto LAB_0034cc28;
                iVar15 = piVar37[-1];
                iVar22 = *piVar37;
                auVar47._0_8_ = *(double *)(puVar42 + (long)iVar22 * 8);
                auVar47._8_8_ = 0;
                piVar34 = piVar37 + -1;
                if (*(double *)(puVar42 + (long)iVar15 * 8) <= auVar47._0_8_) break;
LAB_0034cf70:
                do {
                  piVar30 = piVar34;
                  piVar30[1] = iVar15;
                  iVar15 = piVar30[-1];
                  piVar34 = piVar30 + -1;
                } while (auVar47._0_8_ < *(double *)(puVar42 + (long)iVar15 * 8));
                *piVar30 = iVar22;
              }
            } while( true );
          }
        }
      }
LAB_0034cc28:
      if (((param_3 & 0x10) != 0) && (0 < (int)uVar2)) {
        if (uVar2 < 9 || (long)(uVar23 + uVar40 * -4) < (long)(uVar40 * 4) && 0 < (long)uVar23) {
          lVar16 = 0;
          piVar17 = (int *)((long)piVar41 + uVar32);
          do {
            iVar15 = piVar41[lVar16];
            piVar41[lVar16] = *piVar17;
            lVar16 = lVar16 + 1;
            *piVar17 = iVar15;
            piVar17 = piVar17 + -1;
          } while ((int)lVar16 < (int)uVar2);
        }
        else {
          uVar14 = -((uint)((ulong)piVar41 >> 2) & 3) & 3;
          uVar26 = uVar40;
          if (uVar14 < uVar2) {
            uVar26 = (ulong)uVar14;
          }
          iVar15 = (int)uVar26;
          uVar18 = uVar26;
          if (iVar15 != 0) {
            iVar22 = *piVar41;
            *piVar41 = *(int *)((long)piVar41 + uVar32);
            *(int *)((long)piVar41 + uVar32) = iVar22;
            if (iVar15 != 1) {
              iVar22 = piVar41[1];
              piVar41[1] = *(int *)((long)piVar41 + uVar39);
              *(int *)((long)piVar41 + uVar39) = iVar22;
              if (iVar15 == 3) {
                iVar22 = piVar41[2];
                piVar41[2] = *(int *)((long)piVar41 + uVar24);
                *(int *)((long)piVar41 + uVar24) = iVar22;
              }
              else {
                uVar18 = 2;
              }
            }
          }
          uVar14 = ((uVar2 - iVar15) - 4 >> 2) + 1;
          pauVar29 = (undefined1 (*) [16])((long)piVar41 + (uVar23 - 0xc) + ~uVar26 * 4);
          uVar31 = 0;
          iVar22 = uVar14 * 4;
          pauVar19 = (undefined1 (*) [16])(piVar41 + uVar26);
          pauVar35 = pauVar29;
          pauVar36 = (undefined1 (*) [16])(piVar41 + uVar26);
          do {
            auVar44 = *pauVar29;
            uVar31 = uVar31 + 1;
            pauVar29 = pauVar29 + -1;
            auVar8._8_8_ = _UNK_0034d298;
            auVar8._0_8_ = _DAT_0034d290;
            auVar46 = a64_TBL(ZEXT816(0),auVar44,auVar8);
            auVar9._8_8_ = _UNK_0034d298;
            auVar9._0_8_ = _DAT_0034d290;
            auVar44 = a64_TBL(ZEXT816(0),*pauVar19,auVar9);
            *(long *)((long)*pauVar36 + 8) = auVar46._8_8_;
            *(long *)*pauVar36 = auVar46._0_8_;
            *(long *)(*pauVar35 + 8) = auVar44._8_8_;
            *(long *)*pauVar35 = auVar44._0_8_;
            pauVar35 = pauVar35 + -1;
            pauVar19 = pauVar19 + 1;
            pauVar36 = pauVar36 + 1;
          } while (uVar31 < uVar14);
          uVar14 = iVar22 + (int)uVar18;
          if (iVar22 != uVar2 - iVar15) {
            uVar26 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
            uVar6 = *(undefined4 *)((long)piVar41 + uVar26);
            uVar18 = -(ulong)(uVar7 - uVar14 >> 0x1f) & 0xfffffffc00000000 |
                     (ulong)(uVar7 - uVar14) << 2;
            *(undefined4 *)((long)piVar41 + uVar26) = *(undefined4 *)((long)piVar41 + uVar18);
            *(undefined4 *)((long)piVar41 + uVar18) = uVar6;
            if ((int)(uVar14 + 1) < (int)uVar2) {
              uVar31 = uVar7 - (uVar14 + 1);
              uVar18 = -(ulong)(uVar31 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar31 << 2;
              uVar6 = *(undefined4 *)((long)piVar41 + uVar26 + 4);
              *(undefined4 *)((long)piVar41 + uVar26 + 4) = *(undefined4 *)((long)piVar41 + uVar18);
              *(undefined4 *)((long)piVar41 + uVar18) = uVar6;
              if ((int)(uVar14 + 2) < (int)uVar2) {
                    /* try { // try from 0034cd78 to 0044d1b3 has its CatchHandler @ 0034dabc */
                uVar14 = uVar7 - (uVar14 + 2);
                uVar6 = *(undefined4 *)((long)piVar41 + uVar26 + 8);
                uVar18 = -(ulong)(uVar14 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar14 << 2;
                *(undefined4 *)((long)piVar41 + uVar26 + 8) =
                     *(undefined4 *)((long)piVar41 + uVar18);
                *(undefined4 *)((long)piVar41 + uVar18) = uVar6;
              }
            }
          }
        }
      }
      if ((uVar4 == 0) && (0 < (int)uVar38)) {
        lVar16 = 0;
        lVar33 = **(long **)(param_2 + 0x48);
        piVar17 = (int *)(*(long *)(param_2 + 0x10) + lVar43 * 4);
        do {
          piVar37 = piVar41 + lVar16;
          lVar16 = lVar16 + 1;
          *piVar17 = *piVar37;
          piVar17 = (int *)((long)piVar17 + lVar33);
        } while ((int)lVar16 < (int)uVar38);
      }
      lVar43 = lVar43 + 1;
      piVar41 = local_880;
    } while ((int)lVar43 < iVar5);
  }
  if ((piVar41 != local_870) && (piVar41 != (int *)0x0)) {
    operator_delete__(piVar41);
  }
  if ((local_450 != local_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  return;
}


==================================================================

### FUNC 0034d2a0 (8 bytes) name=FUN_0034d2a0

undefined4 FUN_0034d2a0(undefined8 param_1,undefined4 param_2)

{
  return param_2;
}


==================================================================

### FUNC 0034d2a8 (8 bytes) name=FUN_0034d2a8

undefined8 FUN_0034d2a8(long param_1)

{
  return *(undefined8 *)(param_1 + 0x18);
}


==================================================================

### FUNC 0034d2b0 (8 bytes) name=FUN_0034d2b0

undefined8 FUN_0034d2b0(long param_1)

{
  return *(undefined8 *)(param_1 + 0x20);
}


==================================================================

### FUNC 0034d2b8 (4 bytes) name=~String

/* cv::String::~String() */

void __thiscall cv::String::~String(String *this)

{
  (*(code *)PTR_deallocate_005015e8)();
  return;
}


==================================================================

### FUNC 0034d2bc (208 bytes) name=FUN_0034d2bc

undefined8 FUN_0034d2bc(long param_1)

{
  char cVar1;
  undefined8 uVar2;
  long lVar3;
  
  cVar1 = DAT_00532040;
  if (DAT_00532998 == 0) {
    if (DAT_00532040 != '\0') {
      return 0;
    }
    DAT_00532998 = dlopen("libOpenCL.so",1);
    if ((DAT_00532998 == 0) && (DAT_00532998 = dlopen("libCL.so",1), DAT_00532998 == 0)) {
      DAT_00532040 = 1;
      DAT_00532970 = cVar1;
      return 0;
    }
    DAT_00532040 = '\x01';
    lVar3 = dlsym(DAT_00532998,"clEnqueueReadBufferRect");
    DAT_00532970 = lVar3 != 0;
    if (DAT_00532998 == 0) {
      return 0;
    }
  }
  if (param_1 == 0) {
    return 0;
  }
  uVar2 = dlsym(DAT_00532998,param_1);
  return uVar2;
}


==================================================================

### FUNC 0034d38c (100 bytes) name=FUN_0034d38c

undefined8 FUN_0034d38c(undefined4 param_1,undefined8 param_2,undefined8 param_3)

{
  undefined8 uVar1;
  
  if ((DAT_005320b8 == (code *)0x0) &&
     (DAT_005320b8 = (code *)FUN_0034d2bc("clGetPlatformIDs"), DAT_005320b8 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_005320b8)(param_1,param_2,param_3);
  return uVar1;
}


==================================================================

### FUNC 0034d3f0 (116 bytes) name=FUN_0034d3f0

undefined8
FUN_0034d3f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5)

{
  undefined8 uVar1;
  
  if ((DAT_005320b0 == (code *)0x0) &&
     (DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo"), DAT_005320b0 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_005320b0)(param_1,param_2,param_3,param_4,param_5);
  return uVar1;
}


==================================================================

### FUNC 0034d464 (116 bytes) name=FUN_0034d464

undefined8
FUN_0034d464(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5)

{
  undefined8 uVar1;
  
  if ((DAT_00532990 == (code *)0x0) &&
     (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_00532990)(param_1,param_2,param_3,param_4,param_5);
  return uVar1;
}


==================================================================

### FUNC 0034d4d8 (84 bytes) name=FUN_0034d4d8

undefined8 FUN_0034d4d8(undefined8 param_1)

{
  undefined8 uVar1;
  
  if ((DAT_00532988 == (code *)0x0) &&
     (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_00532988)(param_1);
  return uVar1;
}


==================================================================

### FUNC 0034d52c (84 bytes) name=FUN_0034d52c

undefined8 FUN_0034d52c(undefined8 param_1)

{
  undefined8 uVar1;
  
  if ((DAT_00532980 == (code *)0x0) &&
     (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_00532980)(param_1);
                    /* try { // try from 0034d554 to 0044d557 has its CatchHandler @ 0034dbc0 */
  return uVar1;
}


==================================================================

### FUNC 0034d580 (108 bytes) name=FUN_0034d580

undefined8 FUN_0034d580(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined8 uVar1;
  
                    /* try { // try from 0034d5b8 to 0044d5bb has its CatchHandler @ 0034dcb8 */
                    /* try { // try from 0034d5c4 to 0044d617 has its CatchHandler @ 0034dbb8 */
  if ((DAT_00532008 == (code *)0x0) &&
     (DAT_00532008 = (code *)FUN_0034d2bc("clSetKernelArg"), DAT_00532008 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_00532008)(param_1,param_2,param_3,param_4);
  return uVar1;
}


==================================================================

### FUNC 0034d5ec (84 bytes) name=FUN_0034d5ec

undefined8 FUN_0034d5ec(undefined8 param_1)

{
  undefined8 uVar1;
  
  if ((DAT_00532000 == (code *)0x0) &&
     (DAT_00532000 = (code *)FUN_0034d2bc("clFlush"), DAT_00532000 == (code *)0x0)) {
    return 0xfffffc18;
  }
  uVar1 = (*DAT_00532000)(param_1);
                    /* try { // try from 0034d620 to 0044d623 has its CatchHandler @ 0034dabc */
  return uVar1;
}


==================================================================

### FUNC 0034d640 (36 bytes) name=FUN_0034d640

void FUN_0034d640(void *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  
  piVar1 = (int *)((long)param_1 + 0x10);
  do {
    iVar2 = *piVar1;
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar4) {
      *piVar1 = iVar2 + -1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  if (0 < iVar2) {
    return;
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0034d664 (92 bytes) name=~Platform

/* cv::ocl::Platform::~Platform() */

void __thiscall cv::ocl::Platform::~Platform(Platform *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      String::deallocate((String *)(piVar4 + 4));
                    /* try { // try from 0034d6b0 to 0044d6b3 has its CatchHandler @ 0034ddb0 */
      operator_delete(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0034d6c0 (92 bytes) name=~ProgramSource

/* cv::ocl::ProgramSource::~ProgramSource() */

void __thiscall cv::ocl::ProgramSource::~ProgramSource(ProgramSource *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 0034d6f4 to 0044d70f has its CatchHandler @ 0034bcb4 */
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      String::deallocate((String *)(piVar4 + 2));
      operator_delete(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0034d71c (128 bytes) name=~Device

/* cv::ocl::Device::~Device() */

void __thiscall cv::ocl::Device::~Device(Device *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 0034d73c to 0044d73f has its CatchHandler @ 0034dbc0 */
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
                    /* try { // try from 0034d768 to 0044d88f has its CatchHandler @ 0034bcb4 */
      String::deallocate((String *)(piVar4 + 0x1a));
      String::deallocate((String *)(piVar4 + 0x16));
      String::deallocate((String *)(piVar4 + 8));
      String::deallocate((String *)(piVar4 + 4));
      operator_delete(piVar4);
      return;
    }
  }
                    /* try { // try from 0034d748 to 0044d74b has its CatchHandler @ 0034dabc */
  return;
}


==================================================================

### FUNC 0034d7d0 (236 bytes) name=FUN_0034d7d0

String * FUN_0034d7d0(String *param_1,undefined8 param_2,undefined8 param_3)

{
  int iVar1;
  size_t __n;
  void *__dest;
  ulong local_408;
  char acStack_400 [1024];
  
  local_408 = 0;
  if ((DAT_005320b0 != (code *)0x0) ||
     (DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo"), DAT_005320b0 != (code *)0x0)) {
    iVar1 = (*DAT_005320b0)(param_2,param_3,0x3f0,acStack_400,&local_408);
    if ((iVar1 == 0) && (local_408 < 0x400)) {
      *(undefined8 *)param_1 = 0;
      *(undefined8 *)(param_1 + 8) = 0;
      __n = strlen(acStack_400);
      __dest = (void *)cv::String::allocate(param_1,__n);
      memcpy(__dest,acStack_400,__n);
      return param_1;
    }
  }
  *(undefined8 *)param_1 = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  return param_1;
}


==================================================================

### FUNC 0034d8bc (448 bytes) name=FUN_0034d8bc

void FUN_0034d8bc(long param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::Mutex::lock((Mutex *)(param_1 + 0x10));
  puVar9 = (undefined8 *)(param_1 + 0x38);
  puVar7 = (undefined8 *)*puVar9;
  if (puVar7 != puVar9) {
    do {
      lVar6 = puVar7[3];
      if (lVar6 == 0) {
        local_20 = lVar6;
        local_18 = lVar6;
        pcVar5 = (char *)cv::String::allocate((String *)&local_20,0x14);
        uVar2 = s_entry_capacity_____0_0046d5e8._8_8_;
        uVar1 = s_entry_capacity_____0_0046d5e8._0_8_;
        *(undefined4 *)(pcVar5 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
        *(undefined8 *)pcVar5 = uVar1;
        *(undefined8 *)(pcVar5 + 8) = uVar2;
        cv::error(-0xd7,(String *)&local_20,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
        cv::String::deallocate((String *)&local_20);
        lVar6 = puVar7[2];
        if (lVar6 == 0) goto LAB_0034d9a0;
LAB_0034d91c:
        if (DAT_00532980 == (code *)0x0) goto LAB_0034da14;
LAB_0034d928:
        (*DAT_00532980)(lVar6);
      }
      else {
        lVar6 = puVar7[2];
        if (lVar6 != 0) goto LAB_0034d91c;
LAB_0034d9a0:
        local_10 = 0;
        local_8 = local_10;
        pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x17);
        cVar4 = s_entry_clBuffer_____NULL_0046d640[0x16];
        uVar3 = s_entry_clBuffer_____NULL_0046d640._20_2_;
        uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
        uVar1 = s_entry_clBuffer_____NULL_0046d640._0_8_;
        *(undefined4 *)(pcVar5 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
        *(undefined2 *)(pcVar5 + 0x14) = uVar3;
        pcVar5[0x16] = cVar4;
        *(undefined8 *)pcVar5 = uVar1;
        *(undefined8 *)(pcVar5 + 8) = uVar2;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
        cv::String::deallocate((String *)&local_10);
        lVar6 = puVar7[2];
        if (DAT_00532980 != (code *)0x0) goto LAB_0034d928;
LAB_0034da14:
        DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
        if (DAT_00532980 != (code *)0x0) goto LAB_0034d928;
      }
      puVar7 = (undefined8 *)*puVar7;
    } while (puVar7 != puVar9);
    puVar7 = *(undefined8 **)(param_1 + 0x38);
    while (puVar7 != puVar9) {
      puVar8 = (undefined8 *)*puVar7;
      operator_delete(puVar7);
      puVar7 = puVar8;
    }
  }
  *(undefined8 **)(param_1 + 0x38) = puVar9;
  *(undefined8 **)(param_1 + 0x40) = puVar9;
  *(undefined8 *)(param_1 + 0x18) = 0;
  cv::Mutex::unlock((Mutex *)(param_1 + 0x10));
  return;
}


==================================================================

### FUNC 0034dab0 (800 bytes) name=FUN_0034dab0

long FUN_0034dab0(char *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  code *pcVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  size_t __n;
  void *pvVar7;
  int *piVar8;
  char *pcVar9;
  long lVar10;
  char *local_40;
  char *local_38;
  char *local_30;
  char *local_28;
  char *local_20;
  char *local_18;
  String aSStack_10 [16];
  
                    /* try { // try from 0034dab4 to 0044dab7 has its CatchHandler @ 0034dc14 */
                    /* catch() { ... } // from try @ 0034c3d0 with catch @ 0034dabc
                       catch() { ... } // from try @ 0034cd78 with catch @ 0034dabc
                       catch() { ... } // from try @ 0034d620 with catch @ 0034dabc
                       catch() { ... } // from try @ 0034d748 with catch @ 0034dabc */
  pcVar6 = getenv(param_1);
  if (pcVar6 == (char *)0x0) {
    return param_2;
  }
  local_40 = (char *)0x0;
  local_38 = (char *)0x0;
  __n = strlen(pcVar6);
  pvVar7 = (void *)cv::String::allocate((String *)&local_40,__n);
  memcpy(pvVar7,pcVar6,__n);
  local_28 = local_38;
  if (local_38 == (char *)0x0) {
    pcVar6 = (char *)0x0;
    pcVar9 = local_28;
                    /* catch() { ... } // from try @ 0034d6b0 with catch @ 0034ddb0 */
  }
  else {
    if ((int)*local_40 - 0x30U < 10) {
      pcVar6 = (char *)0x0;
LAB_0034db38:
      pcVar6 = pcVar6 + 1;
      if (pcVar6 != local_38) goto LAB_0034db28;
      piVar8 = (int *)(local_40 + -4);
      do {
                    /* try { // try from 0034db5c to 0044db5f has its CatchHandler @ 0034bcb4 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
                    /* catch() { ... } // from try @ 0034cae4 with catch @ 0034db60
                       catch() { ... } // from try @ 0034cbd4 with catch @ 0034db60
                       catch() { ... } // from try @ 0034daa0 with catch @ 0034db60 */
      } while (cVar1 != '\0');
      local_30 = local_40;
      goto LAB_0034db78;
    }
    local_28 = (char *)0x0;
    pcVar6 = (char *)0x0;
    pcVar9 = local_28;
  }
LAB_0034dbd4:
  local_30 = pcVar9;
  local_18 = (char *)0x0;
  local_20 = (char *)0x0;
  pcVar9 = local_38 + -(long)pcVar6;
                    /* try { // try from 0034dbd8 to 0044dbe7 has its CatchHandler @ 0034bcb4 */
  if (pcVar9 != (char *)0x0) {
    if (pcVar9 == local_38) {
      piVar8 = (int *)(local_40 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      local_18 = local_38;
      local_20 = local_40;
    }
    else {
                    /* catch() { ... } // from try @ 0034cbcc with catch @ 0034dbec */
      pvVar7 = (void *)cv::String::allocate((String *)&local_20,(ulong)pcVar9);
      memcpy(pvVar7,local_40 + (long)pcVar6,(size_t)pcVar9);
    }
    pcVar6 = local_18;
    pcVar9 = local_30;
    if (local_30 == (char *)0x0) {
      pcVar9 = "";
    }
    iVar4 = atoi(pcVar9);
    pcVar9 = local_20;
                    /* catch() { ... } // from try @ 0034cabc with catch @ 0034dc14
                       catch() { ... } // from try @ 0034cbf0 with catch @ 0034dc14
                       catch() { ... } // from try @ 0034dab4 with catch @ 0034dc14 */
    lVar10 = (long)iVar4;
    if (pcVar6 == (char *)0x0) goto LAB_0034db98;
                    /* try { // try from 0034dc24 to 0044dc87 has its CatchHandler @ 0034bcb4 */
    if (local_20 == "MB") {
LAB_0034dc78:
      lVar10 = (long)(iVar4 << 0x14);
    }
    else {
      if (local_20 == (char *)0x0) {
LAB_0034dce4:
        if ((pcVar9 != "Kb") &&
           ((pcVar9 == (char *)0x0 ||
            (((iVar5 = strcmp(pcVar9,"Kb"), iVar5 != 0 && (pcVar9 != "kb")) &&
             (iVar5 = strcmp(pcVar9,"kb"), iVar5 != 0)))))) {
                    /* try { // try from 0034dd20 to 0044dd23 has its CatchHandler @ 0034dda0 */
          pcVar6 = local_40;
          if (local_40 == (char *)0x0) {
                    /* try { // try from 0034dd2c to 0044dd2f has its CatchHandler @ 0034bcb4 */
            pcVar6 = "";
          }
          cv::format("Invalid value for %s parameter: %s",aSStack_10,param_1,pcVar6);
          cv::error(-5,aSStack_10,"size_t getConfigurationParameterForSize(const char*, size_t)",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x79);
                    /* WARNING: Does not return */
          pcVar3 = (code *)SoftwareBreakpoint(1000,0x34dd6c);
          (*pcVar3)();
        }
      }
      else {
        iVar5 = strcmp(local_20,"MB");
        if ((((iVar5 == 0) || (pcVar9 == "Mb")) || (iVar5 = strcmp(pcVar9,"Mb"), iVar5 == 0)) ||
           ((pcVar9 == "mb" || (iVar5 = strcmp(pcVar9,"mb"), iVar5 == 0)))) goto LAB_0034dc78;
                    /* catch() { ... } // from try @ 0034c2d4 with catch @ 0034dcb8
                       catch() { ... } // from try @ 0034c73c with catch @ 0034dcb8
                       catch() { ... } // from try @ 0034d5b8 with catch @ 0034dcb8
                       catch() { ... } // from try @ 0034d8b8 with catch @ 0034dcb8 */
                    /* catch() { ... } // from try @ 0034bed4 with catch @ 0034dcc0 */
        if ((pcVar9 != "KB") && (iVar5 = strcmp(pcVar9,"KB"), iVar5 != 0)) goto LAB_0034dce4;
      }
                    /* try { // try from 0034dcd0 to 0044dcf3 has its CatchHandler @ 0034bcb4 */
      lVar10 = (long)(iVar4 << 10);
    }
    goto LAB_0034db98;
  }
LAB_0034db88:
  local_18 = (char *)0x0;
  local_20 = (char *)0x0;
  pcVar6 = local_30;
  if (local_30 == (char *)0x0) {
                    /* catch() { ... } // from try @ 0034dd20 with catch @ 0034dda0 */
    pcVar6 = "";
  }
  iVar4 = atoi(pcVar6);
  lVar10 = (long)iVar4;
LAB_0034db98:
  cv::String::deallocate((String *)&local_20);
  cv::String::deallocate((String *)&local_30);
                    /* catch() { ... } // from try @ 0034c104 with catch @ 0034dba8 */
  cv::String::deallocate((String *)&local_40);
                    /* catch() { ... } // from try @ 0034c2ac with catch @ 0034dbb8
                       catch() { ... } // from try @ 0034c7c0 with catch @ 0034dbb8
                       catch() { ... } // from try @ 0034d5c4 with catch @ 0034dbb8 */
                    /* catch() { ... } // from try @ 0034c284 with catch @ 0034dbc0
                       catch() { ... } // from try @ 0034c844 with catch @ 0034dbc0
                       catch() { ... } // from try @ 0034d554 with catch @ 0034dbc0
                       catch() { ... } // from try @ 0034d73c with catch @ 0034dbc0 */
  return lVar10;
LAB_0034db28:
  if (9 < (int)local_40[(long)pcVar6] - 0x30U) goto LAB_0034dc84;
  goto LAB_0034db38;
LAB_0034dc84:
  local_30 = (char *)0x0;
  local_28 = (char *)0x0;
  pcVar9 = local_28;
  if (pcVar6 == (char *)0x0) goto LAB_0034dbd4;
  pvVar7 = (void *)cv::String::allocate((String *)&local_30,(ulong)pcVar6);
  memcpy(pvVar7,local_40,(size_t)pcVar6);
LAB_0034db78:
  pcVar9 = local_30;
  if (pcVar6 <= local_38) goto LAB_0034dbd4;
  goto LAB_0034db88;
}


==================================================================

### FUNC 0034de14 (664 bytes) name=FUN_0034de14

void FUN_0034de14(undefined8 *param_1)

{
  Mutex *this;
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  void *pvVar9;
  undefined8 *puVar10;
  undefined8 local_30;
  undefined8 local_28;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  this = (Mutex *)(param_1 + 2);
  param_1[1] = &PTR_FUN_004f68f0;
  *param_1 = &PTR_FUN_004f68a0;
  cv::Mutex::lock(this);
  puVar10 = param_1 + 7;
  puVar7 = (undefined8 *)*puVar10;
  if (puVar7 != puVar10) {
    do {
      lVar6 = puVar7[3];
      if (lVar6 == 0) {
        local_20 = lVar6;
        local_18 = lVar6;
        pcVar5 = (char *)cv::String::allocate((String *)&local_20,0x14);
        uVar2 = s_entry_capacity_____0_0046d5e8._8_8_;
        uVar1 = s_entry_capacity_____0_0046d5e8._0_8_;
        *(undefined4 *)(pcVar5 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
        *(undefined8 *)pcVar5 = uVar1;
        *(undefined8 *)(pcVar5 + 8) = uVar2;
        cv::error(-0xd7,(String *)&local_20,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
        cv::String::deallocate((String *)&local_20);
        lVar6 = puVar7[2];
        if (lVar6 == 0) goto LAB_0034df18;
LAB_0034de94:
        if (DAT_00532980 == (code *)0x0) goto LAB_0034df8c;
LAB_0034dea0:
                    /* try { // try from 0034dea4 to 0044dea7 has its CatchHandler @ 0034bcb4 */
        (*DAT_00532980)(lVar6);
      }
      else {
        lVar6 = puVar7[2];
        if (lVar6 != 0) goto LAB_0034de94;
LAB_0034df18:
        local_10 = 0;
        local_8 = local_10;
        pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x17);
        cVar4 = s_entry_clBuffer_____NULL_0046d640[0x16];
        uVar3 = s_entry_clBuffer_____NULL_0046d640._20_2_;
        uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
        uVar1 = s_entry_clBuffer_____NULL_0046d640._0_8_;
        *(undefined4 *)(pcVar5 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
        *(undefined2 *)(pcVar5 + 0x14) = uVar3;
        pcVar5[0x16] = cVar4;
        *(undefined8 *)pcVar5 = uVar1;
        *(undefined8 *)(pcVar5 + 8) = uVar2;
        cv::error(-0xd7,(String *)&local_10,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
        cv::String::deallocate((String *)&local_10);
        lVar6 = puVar7[2];
        if (DAT_00532980 != (code *)0x0) goto LAB_0034dea0;
LAB_0034df8c:
        DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
        if (DAT_00532980 != (code *)0x0) goto LAB_0034dea0;
      }
      puVar7 = (undefined8 *)*puVar7;
    } while (puVar7 != puVar10);
    puVar7 = (undefined8 *)param_1[7];
    while (puVar7 != puVar10) {
      puVar8 = (undefined8 *)*puVar7;
      operator_delete(puVar7);
      puVar7 = puVar8;
    }
  }
  param_1[7] = puVar10;
  param_1[8] = puVar10;
  param_1[3] = 0;
  cv::Mutex::unlock(this);
  if ((undefined8 *)param_1[7] != puVar10) {
    local_30 = 0;
    local_28 = 0;
    pcVar5 = (char *)cv::String::allocate((String *)&local_30,0x18);
    uVar2 = s_reservedEntries__empty___0046d6a8._8_8_;
    uVar1 = s_reservedEntries__empty___0046d6a8._0_8_;
    *(undefined8 *)(pcVar5 + 0x10) = s_reservedEntries__empty___0046d6a8._16_8_;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    cv::error(-0xd7,(String *)&local_30,
              "cv::ocl::OpenCLBufferPoolBaseImpl<Derived, BufferEntry, T>::~OpenCLBufferPoolBaseImpl() [with Derived = cv::ocl::OpenCLBufferPoolImpl; BufferEntry = cv::ocl::CLBufferEntry; T = _cl_mem*]"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xf31);
    cv::String::deallocate((String *)&local_30);
    puVar7 = (undefined8 *)param_1[7];
    while (puVar7 != puVar10) {
      puVar8 = (undefined8 *)*puVar7;
      operator_delete(puVar7);
      puVar7 = puVar8;
    }
  }
  puVar7 = (void *)param_1[5];
  while (puVar7 != param_1 + 5) {
    pvVar9 = (void *)*puVar7;
    operator_delete(puVar7);
    puVar7 = pvVar9;
  }
  cv::Mutex::~Mutex(this);
  return;
}


==================================================================

### FUNC 0034e158 (32 bytes) name=FUN_0034e158

void FUN_0034e158(void *param_1)

{
  FUN_0034de14();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0034e178 (28 bytes) name=FUN_0034e178

void FUN_0034e178(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f6910;
  param_1[1] = &PTR_FUN_004f6960;
  FUN_0034de14();
  return;
}


==================================================================

### FUNC 0034e194 (100 bytes) name=FUN_0034e194

void FUN_0034e194(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f6980;
  param_1[0xb] = &PTR_FUN_004f6910;
  param_1[0xc] = &PTR_FUN_004f6960;
  FUN_0034de14();
  param_1[1] = &PTR_FUN_004f6910;
  param_1[2] = &PTR_FUN_004f6960;
  FUN_0034de14(param_1 + 1);
  return;
}


==================================================================

### FUNC 0034e220 (56 bytes) name=FUN_0034e220

void FUN_0034e220(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f6910;
  param_1[1] = &PTR_FUN_004f6960;
  FUN_0034de14();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0034e258 (104 bytes) name=FUN_0034e258

void FUN_0034e258(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f6980;
  param_1[0xb] = &PTR_FUN_004f6910;
  param_1[0xc] = &PTR_FUN_004f6960;
  FUN_0034de14();
  param_1[1] = &PTR_FUN_004f6910;
  param_1[2] = &PTR_FUN_004f6960;
  FUN_0034de14(param_1 + 1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0034e2e8 (236 bytes) name=FUN_0034e2e8

String * FUN_0034e2e8(String *param_1,undefined8 param_2,undefined8 param_3)

{
  int iVar1;
  size_t __n;
  void *__dest;
  ulong local_408;
  char acStack_400 [1024];
  
  local_408 = 0;
  if ((DAT_00532990 != (code *)0x0) ||
     (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) {
    iVar1 = (*DAT_00532990)(param_2,param_3,0x3f0,acStack_400,&local_408);
    if ((iVar1 == 0) && (local_408 < 0x400)) {
      *(undefined8 *)param_1 = 0;
      *(undefined8 *)(param_1 + 8) = 0;
      __n = strlen(acStack_400);
      __dest = (void *)cv::String::allocate(param_1,__n);
      memcpy(__dest,acStack_400,__n);
      return param_1;
    }
  }
  *(undefined8 *)param_1 = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  return param_1;
}


==================================================================

### FUNC 0034e3d4 (356 bytes) name=FUN_0034e3d4

int FUN_0034e3d4(undefined8 param_1,long *param_2)

{
  ulong uVar1;
  int iVar2;
  undefined1 *puVar3;
  long local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
                    /* catch() { ... } // from try @ 0034e444 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034e47c with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034e590 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034ec64 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034f1c4 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034f9e4 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034fb80 with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034fd2c with catch @ 0034e3e0
                       catch() { ... } // from try @ 0034fdc8 with catch @ 0034e3e0
                       catch() { ... } // from try @ 00350090 with catch @ 0034e3e0
                       catch() { ... } // from try @ 003500fc with catch @ 0034e3e0
                       catch() { ... } // from try @ 00350110 with catch @ 0034e3e0 */
  if ((DAT_005320b0 == (code *)0x0) &&
     (DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo"), DAT_005320b0 == (code *)0x0)) {
    return -1000;
  }
  iVar2 = (*DAT_005320b0)(param_1,0x902,0,0,&local_420);
  if (iVar2 != 0) {
    return iVar2;
  }
  FUN_00412b08(param_2,0,*(undefined8 *)(*param_2 + -0x18),0);
  if (local_420 == 0) {
    return 0;
  }
  uVar1 = local_420 + 1;
  puVar3 = auStack_408;
                    /* try { // try from 0034e474 to 0044e477 has its CatchHandler @ 00350100 */
                    /* try { // try from 0034e47c to 0044e557 has its CatchHandler @ 0034e3e0 */
  local_410 = 0x408;
  if (0x408 < uVar1) {
    local_418 = puVar3;
    puVar3 = operator_new__(uVar1);
  }
  local_418 = puVar3;
  local_410 = uVar1;
  if (DAT_005320b0 == (code *)0x0) {
    DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo");
    iVar2 = -1000;
    if (DAT_005320b0 == (code *)0x0) goto LAB_0034e4cc;
  }
  iVar2 = (*DAT_005320b0)(param_1,0x902,local_420,puVar3,0);
  if (iVar2 == 0) {
    FUN_00413174(param_2,puVar3);
  }
LAB_0034e4cc:
  if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
    operator_delete__(local_418);
  }
                    /* try { // try from 0034e444 to 0044e447 has its CatchHandler @ 0034e3e0 */
  return iVar2;
}


==================================================================

### FUNC 0034e558 (736 bytes) name=FUN_0034e558

void FUN_0034e558(long param_1,ulong param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  ulong uVar6;
  char *pcVar7;
  long lVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  void *pvVar11;
  long lVar12;
  undefined8 *puVar13;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::Mutex::lock((Mutex *)(param_1 + 0x10));
                    /* try { // try from 0034e584 to 0044e587 has its CatchHandler @ 00350080 */
  uVar6 = *(ulong *)(param_1 + 0x20);
  *(ulong *)(param_1 + 0x20) = param_2;
                    /* try { // try from 0034e590 to 0044e5d3 has its CatchHandler @ 0034e3e0 */
  if (param_2 < uVar6) {
    puVar13 = (undefined8 *)(param_1 + 0x38);
    puVar9 = (undefined8 *)*puVar13;
    while (puVar10 = puVar9, puVar9 != puVar13) {
      while ((ulong)puVar10[3] <= param_2 >> 3) {
        puVar10 = (undefined8 *)*puVar10;
        if (puVar10 == puVar13) goto LAB_0034e5d8;
      }
      lVar8 = puVar10[2];
      *(long *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) - puVar10[3];
      if (lVar8 == 0) {
        local_30 = lVar8;
        local_28 = lVar8;
        pcVar7 = (char *)cv::String::allocate((String *)&local_30,0x17);
        cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
        uVar3 = s_entry_clBuffer_____NULL_0046d640._16_4_;
        uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
        uVar1 = s_entry_clBuffer_____NULL_0046d640._0_8_;
        *(undefined2 *)(pcVar7 + 0x14) = s_entry_clBuffer_____NULL_0046d640._20_2_;
        *(undefined4 *)(pcVar7 + 0x10) = uVar3;
        pcVar7[0x16] = cVar5;
        *(undefined8 *)pcVar7 = uVar1;
        *(undefined8 *)(pcVar7 + 8) = uVar2;
        cv::error(-0xd7,(String *)&local_30,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
        cv::String::deallocate((String *)&local_30);
        lVar8 = puVar10[2];
        if (DAT_00532980 == (code *)0x0) goto LAB_0034e800;
LAB_0034e764:
        (*DAT_00532980)(lVar8);
      }
      else {
        if (DAT_00532980 != (code *)0x0) goto LAB_0034e764;
LAB_0034e800:
        DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
        if (DAT_00532980 != (code *)0x0) goto LAB_0034e764;
      }
      puVar9 = (undefined8 *)*puVar10;
      FUN_003dc008(puVar10);
      operator_delete(puVar10);
      param_2 = *(ulong *)(param_1 + 0x20);
    }
LAB_0034e5d8:
                    /* try { // try from 0034e5d8 to 0044e5fb has its CatchHandler @ 0035011c */
    uVar6 = *(ulong *)(param_1 + 0x18);
    if (param_2 < uVar6) {
      do {
        lVar12 = *(long *)(param_1 + 0x40);
        lVar8 = *(long *)(lVar12 + 0x18);
        *(ulong *)(param_1 + 0x18) = uVar6 - lVar8;
        if (lVar8 == 0) {
          local_20 = lVar8;
          local_18 = lVar8;
          pcVar7 = (char *)cv::String::allocate((String *)&local_20,0x14);
          uVar2 = s_entry_capacity_____0_0046d5e8._8_8_;
          uVar1 = s_entry_capacity_____0_0046d5e8._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
          *(undefined8 *)pcVar7 = uVar1;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          cv::error(-0xd7,(String *)&local_20,
                    "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
          cv::String::deallocate((String *)&local_20);
          lVar8 = *(long *)(lVar12 + 0x10);
          if (lVar8 != 0) goto LAB_0034e60c;
LAB_0034e6b4:
          local_10 = 0;
          local_8 = local_10;
          pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x17);
          cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
          uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
          uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
          uVar1 = s_entry_clBuffer_____NULL_0046d640._0_8_;
          *(undefined4 *)(pcVar7 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
          *(undefined2 *)(pcVar7 + 0x14) = uVar4;
          pcVar7[0x16] = cVar5;
          *(undefined8 *)pcVar7 = uVar1;
          *(undefined8 *)(pcVar7 + 8) = uVar2;
          cv::error(-0xd7,(String *)&local_10,
                    "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
          cv::String::deallocate((String *)&local_10);
          lVar8 = *(long *)(lVar12 + 0x10);
          if (DAT_00532980 == (code *)0x0) goto LAB_0034e728;
LAB_0034e618:
          (*DAT_00532980)(lVar8);
        }
        else {
          lVar8 = *(long *)(lVar12 + 0x10);
          if (lVar8 == 0) goto LAB_0034e6b4;
LAB_0034e60c:
          if (DAT_00532980 != (code *)0x0) goto LAB_0034e618;
LAB_0034e728:
          DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
          if (DAT_00532980 != (code *)0x0) goto LAB_0034e618;
        }
        pvVar11 = *(void **)(param_1 + 0x40);
        FUN_003dc008(pvVar11);
                    /* try { // try from 0034e634 to 0044e9b3 has its CatchHandler @ 00350114 */
        operator_delete(pvVar11);
        uVar6 = *(ulong *)(param_1 + 0x18);
      } while (*(ulong *)(param_1 + 0x20) < uVar6);
    }
  }
  cv::Mutex::unlock((Mutex *)(param_1 + 0x10));
  return;
}


==================================================================

### FUNC 0034e87c (996 bytes) name=FUN_0034e87c

void FUN_0034e87c(long param_1,long param_2)

{
  undefined8 uVar1;
  undefined2 uVar2;
  char cVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  long lVar8;
  void *pvVar9;
  char *pcVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  undefined8 uVar13;
  long lVar14;
  ulong uVar15;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::Mutex::lock((Mutex *)(param_1 + 0x10));
  puVar11 = (undefined8 *)(param_1 + 0x28);
  puVar12 = (undefined8 *)*puVar11;
  if (puVar12 == puVar11) {
LAB_0034e8e4:
    local_50 = 0;
    local_48 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_50,0x33);
    cVar3 = s__findAndRemoveEntryFromAllocated_0046d6c8[0x32];
    uVar7 = s__findAndRemoveEntryFromAllocated_0046d6c8._40_8_;
    uVar6 = s__findAndRemoveEntryFromAllocated_0046d6c8._32_8_;
    uVar5 = s__findAndRemoveEntryFromAllocated_0046d6c8._24_8_;
    uVar4 = s__findAndRemoveEntryFromAllocated_0046d6c8._16_8_;
    uVar1 = s__findAndRemoveEntryFromAllocated_0046d6c8._8_8_;
    uVar13 = s__findAndRemoveEntryFromAllocated_0046d6c8._0_8_;
    *(undefined2 *)(pcVar10 + 0x30) = s__findAndRemoveEntryFromAllocated_0046d6c8._48_2_;
    pcVar10[0x32] = cVar3;
    *(undefined8 *)pcVar10 = uVar13;
    *(undefined8 *)(pcVar10 + 8) = uVar1;
    *(undefined8 *)(pcVar10 + 0x10) = uVar4;
    *(undefined8 *)(pcVar10 + 0x18) = uVar5;
    *(undefined8 *)(pcVar10 + 0x20) = uVar6;
    *(undefined8 *)(pcVar10 + 0x28) = uVar7;
    cv::error(-0xd7,(String *)&local_50,
              "void cv::ocl::OpenCLBufferPoolBaseImpl<Derived, BufferEntry, T>::release(T) [with Derived = cv::ocl::OpenCLBufferPoolImpl; BufferEntry = cv::ocl::CLBufferEntry; T = _cl_mem*]"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xf47);
    cv::String::deallocate((String *)&local_50);
    if (*(long *)(param_1 + 0x20) != 0) {
      uVar15 = 0;
      param_2 = 0;
LAB_0034e968:
      uVar13 = *(undefined8 *)(param_1 + 0x38);
      pvVar9 = operator_new(0x20);
      *(long *)((long)pvVar9 + 0x10) = param_2;
      *(ulong *)((long)pvVar9 + 0x18) = uVar15;
      FUN_003dbfec(pvVar9,uVar13);
      uVar15 = uVar15 + *(long *)(param_1 + 0x18);
      *(ulong *)(param_1 + 0x18) = uVar15;
      if (*(ulong *)(param_1 + 0x20) < uVar15) {
        do {
          lVar14 = *(long *)(param_1 + 0x40);
          lVar8 = *(long *)(lVar14 + 0x18);
          *(ulong *)(param_1 + 0x18) = uVar15 - lVar8;
          if (lVar8 == 0) {
            local_20 = lVar8;
            local_18 = lVar8;
            pcVar10 = (char *)cv::String::allocate((String *)&local_20,0x14);
            uVar1 = s_entry_capacity_____0_0046d5e8._8_8_;
            uVar13 = s_entry_capacity_____0_0046d5e8._0_8_;
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
                    /* try { // try from 0034ea50 to 0044ea53 has its CatchHandler @ 003501b4 */
            *(undefined8 *)pcVar10 = uVar13;
            *(undefined8 *)(pcVar10 + 8) = uVar1;
            cv::error(-0xd7,(String *)&local_20,
                      "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                      "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
            cv::String::deallocate((String *)&local_20);
            lVar8 = *(long *)(lVar14 + 0x10);
            if (lVar8 != 0) goto LAB_0034e9c8;
LAB_0034ea70:
            local_10 = 0;
            local_8 = local_10;
            pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x17);
            cVar3 = s_entry_clBuffer_____NULL_0046d640[0x16];
            uVar2 = s_entry_clBuffer_____NULL_0046d640._20_2_;
            uVar1 = s_entry_clBuffer_____NULL_0046d640._8_8_;
            uVar13 = s_entry_clBuffer_____NULL_0046d640._0_8_;
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
                    /* try { // try from 0034eabc to 0044eb1f has its CatchHandler @ 003501ac */
            *(undefined2 *)(pcVar10 + 0x14) = uVar2;
            pcVar10[0x16] = cVar3;
            *(undefined8 *)pcVar10 = uVar13;
            *(undefined8 *)(pcVar10 + 8) = uVar1;
            cv::error(-0xd7,(String *)&local_10,
                      "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                      "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
            cv::String::deallocate((String *)&local_10);
            lVar8 = *(long *)(lVar14 + 0x10);
            if (DAT_00532980 == (code *)0x0) goto LAB_0034eae4;
LAB_0034e9d4:
            (*DAT_00532980)(lVar8);
          }
          else {
            lVar8 = *(long *)(lVar14 + 0x10);
            if (lVar8 == 0) goto LAB_0034ea70;
LAB_0034e9c8:
                    /* try { // try from 0034e9d0 to 0044e9d3 has its CatchHandler @ 003501dc */
            if (DAT_00532980 != (code *)0x0) goto LAB_0034e9d4;
LAB_0034eae4:
            DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
            if (DAT_00532980 != (code *)0x0) goto LAB_0034e9d4;
          }
          pvVar9 = *(void **)(param_1 + 0x40);
          FUN_003dc008(pvVar9);
          operator_delete(pvVar9);
          uVar15 = *(ulong *)(param_1 + 0x18);
        } while (*(ulong *)(param_1 + 0x20) < uVar15);
      }
      goto LAB_0034eb78;
    }
    param_2 = 0;
LAB_0034eb00:
    local_40 = 0;
    local_38 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_40,0x14);
    uVar1 = s_entry_capacity_____0_0046d5e8._8_8_;
    uVar13 = s_entry_capacity_____0_0046d5e8._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
    *(undefined8 *)pcVar10 = uVar13;
    *(undefined8 *)(pcVar10 + 8) = uVar1;
    cv::error(-0xd7,(String *)&local_40,
              "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
    cv::String::deallocate((String *)&local_40);
  }
  else {
    lVar8 = puVar12[2];
    while (param_2 != lVar8) {
      puVar12 = (undefined8 *)*puVar12;
      if (puVar12 == puVar11) goto LAB_0034e8e4;
      lVar8 = puVar12[2];
    }
    uVar15 = puVar12[3];
    FUN_003dc008(puVar12);
                    /* try { // try from 0034ebb0 to 0044ebb3 has its CatchHandler @ 00350114 */
    operator_delete(puVar12);
    if (*(ulong *)(param_1 + 0x20) == 0) {
      if (uVar15 == 0) goto LAB_0034eb00;
    }
    else if (uVar15 <= *(ulong *)(param_1 + 0x20) >> 3) goto LAB_0034e968;
  }
  if (param_2 == 0) {
    local_30 = param_2;
    local_28 = param_2;
    pcVar10 = (char *)cv::String::allocate((String *)&local_30,0x17);
    cVar3 = s_entry_clBuffer_____NULL_0046d640[0x16];
    uVar2 = s_entry_clBuffer_____NULL_0046d640._20_2_;
    uVar1 = s_entry_clBuffer_____NULL_0046d640._8_8_;
    uVar13 = s_entry_clBuffer_____NULL_0046d640._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
    *(undefined2 *)(pcVar10 + 0x14) = uVar2;
    pcVar10[0x16] = cVar3;
    *(undefined8 *)pcVar10 = uVar13;
    *(undefined8 *)(pcVar10 + 8) = uVar1;
    cv::error(-0xd7,(String *)&local_30,
              "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
    cv::String::deallocate((String *)&local_30);
                    /* try { // try from 0034ec34 to 0044ec37 has its CatchHandler @ 0035011c */
  }
  if ((DAT_00532980 != (code *)0x0) ||
     (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 != (code *)0x0)) {
    (*DAT_00532980)(param_2);
  }
LAB_0034eb78:
  cv::Mutex::unlock((Mutex *)(param_1 + 0x10));
  return;
}


==================================================================

### FUNC 0034ecd0 (8 bytes) name=FUN_0034ecd0

void FUN_0034ecd0(long param_1)

{
  FUN_0034e87c(param_1 + -8);
  return;
}


==================================================================

### FUNC 0034ecd8 (664 bytes) name=FUN_0034ecd8

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034ecd8(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [8];
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,(long)*(short *)(lVar6 + lVar5 * 2));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2340(local_160,(long)*(short *)(lVar6 + (long)iVar3 * 2));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          uVar4 = FUN_003f22fc(local_160,*(undefined2 *)(lVar6 + lVar5 * 2));
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      uVar4 = FUN_003f22fc(local_160,*(undefined2 *)(lVar6 + (long)iVar3 * 2));
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034edb0;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f22fc(local_160,*(undefined2 *)(lVar6 + lVar5 * 2));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f22fc(local_160,*(undefined2 *)(lVar6 + (long)iVar3 * 2));
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034edb0:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
  return param_1;
}


==================================================================

### FUNC 0034ef84 (664 bytes) name=FUN_0034ef84

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034ef84(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [8];
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
                    /* try { // try from 0034efa4 to 0044efc7 has its CatchHandler @ 00350114 */
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,*(undefined2 *)(lVar6 + lVar5 * 2));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2340(local_160,*(undefined2 *)(lVar6 + (long)iVar3 * 2));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
                    /* try { // try from 0034f194 to 0044f197 has its CatchHandler @ 0035011c */
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
                    /* try { // try from 0034f1c4 to 0044f1c7 has its CatchHandler @ 0034e3e0 */
          uVar4 = FUN_003f2380(local_160,*(undefined2 *)(lVar6 + lVar5 * 2));
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      uVar4 = FUN_003f2380(local_160,*(undefined2 *)(lVar6 + (long)iVar3 * 2));
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034f05c;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2380(local_160,*(undefined2 *)(lVar6 + lVar5 * 2));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2380(local_160,*(undefined2 *)(lVar6 + (long)iVar3 * 2));
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034f05c:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
                    /* try { // try from 0034f090 to 0044f093 has its CatchHandler @ 00350094 */
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
                    /* try { // try from 0034f218 to 0044f21b has its CatchHandler @ 00350244 */
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
                    /* try { // try from 0034f110 to 0044f113 has its CatchHandler @ 00350114 */
  return param_1;
}


==================================================================

### FUNC 0034f230 (636 bytes) name=FUN_0034f230

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034f230(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [8];
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
                    /* try { // try from 0034f254 to 0044f297 has its CatchHandler @ 003501ac */
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,*(undefined4 *)(lVar6 + lVar5 * 4));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          uVar4 = FUN_003f2340(local_160,*(undefined4 *)(lVar6 + lVar5 * 4));
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      uVar4 = FUN_003f2340(local_160,*(undefined4 *)(lVar6 + (long)iVar3 * 4));
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034f308;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,*(undefined4 *)(lVar6 + lVar5 * 4));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
  }
  FUN_003f1ad0(local_160,&DAT_0046d700,4);
  uVar4 = FUN_003f2340(local_160,*(undefined4 *)(lVar6 + (long)iVar3 * 4));
                    /* try { // try from 0034f2fc to 0044f367 has its CatchHandler @ 00350214 */
  FUN_003f1ad0(uVar4,")",1);
LAB_0034f308:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
                    /* try { // try from 0034f394 to 0044f397 has its CatchHandler @ 00350204 */
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
                    /* try { // try from 0034f39c to 0044f9d7 has its CatchHandler @ 00350214 */
  FUN_003d381c();
  return param_1;
}


==================================================================

### FUNC 0034f4c0 (672 bytes) name=FUN_0034f4c0

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034f4c0(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [8];
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,(int)*(double *)(lVar6 + lVar5 * 8));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2340(local_160,(int)*(double *)(lVar6 + (long)iVar3 * 8));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          uVar4 = FUN_003f2c60(*(undefined8 *)(lVar6 + lVar5 * 8),local_160);
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      uVar4 = FUN_003f2c60(*(undefined8 *)(lVar6 + (long)iVar3 * 8),local_160);
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034f598;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2c60(*(undefined8 *)(lVar6 + lVar5 * 8),local_160);
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2c60(*(undefined8 *)(lVar6 + (long)iVar3 * 8),local_160);
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034f598:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
  return param_1;
}


==================================================================

### FUNC 0034f774 (688 bytes) name=FUN_0034f774

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034f774(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [8];
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,(int)*(float *)(lVar6 + lVar5 * 4));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2340(local_160,(int)*(float *)(lVar6 + (long)iVar3 * 4));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          uVar4 = FUN_003f2c60((double)*(float *)(lVar6 + lVar5 * 4),local_160);
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
                    /* try { // try from 0034f9e4 to 0044fa87 has its CatchHandler @ 0034e3e0 */
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      uVar4 = FUN_003f2c60((double)*(float *)(lVar6 + (long)iVar3 * 4),local_160);
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034f854;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2c60((double)*(float *)(lVar6 + lVar5 * 4),local_160);
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2c60((double)*(float *)(lVar6 + (long)iVar3 * 4),local_160);
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034f854:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
  return param_1;
}


==================================================================

### FUNC 0034fa38 (728 bytes) name=FUN_0034fa38

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034fa38(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [4];
  undefined1 local_164;
  undefined1 local_163;
  undefined1 local_162;
  undefined1 local_161;
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
    lVar5 = 0;
                    /* try { // try from 0034fbf0 to 0044fc7f has its CatchHandler @ 00350214 */
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,(long)*(char *)(lVar6 + lVar5));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    uVar4 = FUN_003f2340(local_160,(long)*(char *)(lVar6 + iVar3));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          local_164 = *(undefined1 *)(lVar6 + lVar5);
                    /* try { // try from 0034fca0 to 0044fcbf has its CatchHandler @ 00350114 */
          uVar4 = FUN_003f1ad0(local_160,&local_164,1);
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
                    /* try { // try from 0034fcd0 to 0044fcd3 has its CatchHandler @ 0035011c */
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      local_163 = *(undefined1 *)(lVar6 + iVar3);
      uVar4 = FUN_003f1ad0(local_160,&local_163,1);
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034fb30;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        local_162 = *(undefined1 *)(lVar6 + lVar5);
        uVar4 = FUN_003f1ad0(local_160,&local_162,1);
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    local_161 = *(undefined1 *)(lVar6 + iVar3);
    uVar4 = FUN_003f1ad0(local_160,&local_161,1);
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034fb30:
  FUN_003f8018(param_1,local_160 + 1);
                    /* try { // try from 0034fb4c to 0044fb4f has its CatchHandler @ 00350114 */
  local_160[0] = PTR_DAT_00501e68 + 0x18;
                    /* try { // try from 0034fb60 to 0044fb63 has its CatchHandler @ 0035011c */
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
                    /* try { // try from 0034fb6c to 0044fb6f has its CatchHandler @ 00350244 */
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
                    /* try { // try from 0034fb80 to 0044fb83 has its CatchHandler @ 0034e3e0 */
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
                    /* try { // try from 0034fb8c to 0044fb8f has its CatchHandler @ 0035021c */
  FUN_003ed708(auStack_120);
                    /* try { // try from 0034fb98 to 0044fb9b has its CatchHandler @ 00350114 */
                    /* try { // try from 0034fba4 to 0044fba7 has its CatchHandler @ 003501b4 */
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
  return param_1;
}


==================================================================

### FUNC 0034fd24 (728 bytes) name=FUN_0034fd24

/* WARNING: Type propagation algorithm not settling */

undefined8 FUN_0034fd24(undefined8 param_1,uint *param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  long lVar5;
  long lVar6;
  undefined1 auStack_168 [4];
  undefined1 local_164;
  undefined1 local_163;
  undefined1 local_162;
  undefined1 local_161;
  undefined *local_160 [8];
  undefined1 auStack_120 [16];
  long local_110;
  undefined *local_108;
  undefined8 local_100;
  uint local_f0;
  
                    /* try { // try from 0034fd2c to 0044fd2f has its CatchHandler @ 0034e3e0 */
                    /* try { // try from 0034fd50 to 0044fd53 has its CatchHandler @ 00350114 */
  uVar1 = *param_2;
  uVar2 = param_2[3];
  lVar6 = *(long *)(param_2 + 4);
  FUN_003f90d8(local_160,0x10);
  iVar3 = uVar2 - 1;
  local_100 = 10;
  if ((uVar1 & 7) < 2) {
                    /* try { // try from 0034fed4 to 0044feeb has its CatchHandler @ 00350114 */
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        uVar4 = FUN_003f2340(local_160,*(undefined1 *)(lVar6 + lVar5));
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
                    /* try { // try from 0034ff38 to 0044ff3b has its CatchHandler @ 00350214 */
    uVar4 = FUN_003f2340(local_160,*(undefined1 *)(lVar6 + iVar3));
  }
  else {
    if ((uVar1 & 7) == 5) {
      lVar5 = 0;
      local_f0 = local_f0 | 0x400;
      if (0 < iVar3) {
        do {
          FUN_003f1ad0(local_160,&DAT_0046d700,4);
          local_164 = *(undefined1 *)(lVar6 + lVar5);
          uVar4 = FUN_003f1ad0(local_160,&local_164,1);
          FUN_003f1ad0(uVar4,&DAT_0046d708,2);
          lVar5 = lVar5 + 1;
        } while ((int)lVar5 < iVar3);
      }
      FUN_003f1ad0(local_160,&DAT_0046d700,4);
      local_163 = *(undefined1 *)(lVar6 + iVar3);
      uVar4 = FUN_003f1ad0(local_160,&local_163,1);
                    /* try { // try from 0034ffe0 to 0044ffe3 has its CatchHandler @ 0035014c */
      FUN_003f1ad0(uVar4,&DAT_0046d708,2);
      goto LAB_0034fe1c;
    }
    lVar5 = 0;
    if (0 < iVar3) {
      do {
        FUN_003f1ad0(local_160,&DAT_0046d700,4);
        local_162 = *(undefined1 *)(lVar6 + lVar5);
        uVar4 = FUN_003f1ad0(local_160,&local_162,1);
                    /* try { // try from 0034fdc8 to 0044fdcb has its CatchHandler @ 0034e3e0 */
        FUN_003f1ad0(uVar4,")",1);
        lVar5 = lVar5 + 1;
      } while ((int)lVar5 < iVar3);
    }
    FUN_003f1ad0(local_160,&DAT_0046d700,4);
    local_161 = *(undefined1 *)(lVar6 + iVar3);
    uVar4 = FUN_003f1ad0(local_160,&local_161,1);
  }
  FUN_003f1ad0(uVar4,")",1);
LAB_0034fe1c:
  FUN_003f8018(param_1,local_160 + 1);
  local_160[0] = PTR_DAT_00501e68 + 0x18;
  local_160[1] = PTR_DAT_00501cc0 + 0x10;
  local_108 = PTR_DAT_00501e68 + 0x40;
  if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
    FUN_0034d640((undefined *)(local_110 + -0x18),auStack_168);
  }
  local_160[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(auStack_120);
  local_160[0] = *(undefined **)(PTR_PTR_00501908 + 8);
  *(undefined8 *)((long)local_160 + *(long *)(local_160[0] + -0x18)) =
       *(undefined8 *)(PTR_PTR_00501908 + 0x10);
  local_108 = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c();
                    /* try { // try from 0034fec8 to 0044fecb has its CatchHandler @ 0035011c */
  return param_1;
}


==================================================================

### FUNC 00350010 (496 bytes) name=FUN_00350010

undefined4 FUN_00350010(char *param_1)

{
  code *pcVar1;
  int iVar2;
  undefined4 uVar3;
  char *pcVar4;
  size_t __n;
  void *__dest;
  char *local_20;
  undefined8 local_18;
  String aSStack_10 [16];
  
  pcVar4 = getenv(param_1);
  if (pcVar4 == (char *)0x0) {
                    /* catch() { ... } // from try @ 0034e9d0 with catch @ 003501dc */
    return 0;
  }
  local_20 = (char *)0x0;
  local_18 = 0;
  __n = strlen(pcVar4);
  __dest = (void *)cv::String::allocate((String *)&local_20,__n);
                    /* try { // try from 00350054 to 00450057 has its CatchHandler @ 00350214 */
  memcpy(__dest,pcVar4,__n);
  pcVar4 = local_20;
  if (local_20 == "1") {
LAB_00350168:
    uVar3 = 1;
    goto LAB_0035016c;
  }
  if (local_20 != (char *)0x0) {
    iVar2 = strcmp(local_20,"1");
                    /* catch() { ... } // from try @ 0034e584 with catch @ 00350080 */
                    /* try { // try from 00350090 to 00450093 has its CatchHandler @ 0034e3e0 */
                    /* catch() { ... } // from try @ 0034f090 with catch @ 00350094 */
    if ((((iVar2 == 0) || (pcVar4 == "True")) || (iVar2 = strcmp(pcVar4,"True"), iVar2 == 0)) ||
       (pcVar4 == "true")) goto LAB_00350168;
    uVar3 = 1;
    iVar2 = strcmp(pcVar4,"true");
    if (((iVar2 == 0) || (pcVar4 == "TRUE")) || (iVar2 = strcmp(pcVar4,"TRUE"), iVar2 == 0))
    goto LAB_0035016c;
  }
  if (pcVar4 == "0") goto LAB_003501d0;
  if (pcVar4 == (char *)0x0) {
    pcVar4 = "";
    goto LAB_00350194;
  }
  iVar2 = strcmp(pcVar4,"0");
  if (iVar2 != 0) {
                    /* try { // try from 003500fc to 004500ff has its CatchHandler @ 0034e3e0 */
                    /* catch() { ... } // from try @ 0034e474 with catch @ 00350100 */
    if (pcVar4 == "False") {
LAB_003501d0:
      uVar3 = 0;
      goto LAB_0035016c;
    }
                    /* try { // try from 00350110 to 00450113 has its CatchHandler @ 0034e3e0 */
    iVar2 = strcmp(pcVar4,"False");
                    /* catch() { ... } // from try @ 0034e634 with catch @ 00350114
                       catch() { ... } // from try @ 0034ebb0 with catch @ 00350114
                       catch() { ... } // from try @ 0034efa4 with catch @ 00350114
                       catch() { ... } // from try @ 0034f110 with catch @ 00350114
                       catch() { ... } // from try @ 0034fb4c with catch @ 00350114
                       catch() { ... } // from try @ 0034fb98 with catch @ 00350114
                       catch() { ... } // from try @ 0034fca0 with catch @ 00350114
                       catch() { ... } // from try @ 0034fd50 with catch @ 00350114
                       catch() { ... } // from try @ 0034fed4 with catch @ 00350114 */
    if (iVar2 != 0) {
                    /* catch() { ... } // from try @ 0034e5d8 with catch @ 0035011c
                       catch() { ... } // from try @ 0034ec34 with catch @ 0035011c
                       catch() { ... } // from try @ 0034f194 with catch @ 0035011c
                       catch() { ... } // from try @ 0034fb60 with catch @ 0035011c
                       catch() { ... } // from try @ 0034fcd0 with catch @ 0035011c
                       catch() { ... } // from try @ 0034fec8 with catch @ 0035011c */
      if (pcVar4 == "false") goto LAB_003501d0;
      if (pcVar4 == (char *)0x0) {
LAB_003501f4:
        pcVar4 = "";
LAB_00350194:
        cv::format("Invalid value for %s parameter: %s",aSStack_10,param_1,pcVar4);
                    /* catch() { ... } // from try @ 0034eabc with catch @ 003501ac
                       catch() { ... } // from try @ 0034f254 with catch @ 003501ac */
                    /* catch() { ... } // from try @ 0034ea50 with catch @ 003501b4
                       catch() { ... } // from try @ 0034fba4 with catch @ 003501b4 */
        cv::error(-5,aSStack_10,"bool getBoolParameter(const char*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x59);
                    /* WARNING: Does not return */
        pcVar1 = (code *)SoftwareBreakpoint(1000,0x3501d0);
        (*pcVar1)();
      }
      iVar2 = strcmp(pcVar4,"false");
      if (iVar2 != 0) {
                    /* try { // try from 00350144 to 00450147 has its CatchHandler @ 00350214 */
        if (pcVar4 == "FALSE") goto LAB_003501d0;
        if (pcVar4 == (char *)0x0) goto LAB_003501f4;
                    /* catch() { ... } // from try @ 0034ffe0 with catch @ 0035014c */
        iVar2 = strcmp(pcVar4,"FALSE");
        if (iVar2 != 0) goto LAB_00350194;
      }
    }
  }
  uVar3 = 0;
LAB_0035016c:
  cv::String::deallocate((String *)&local_20);
  return uVar3;
}


==================================================================

### FUNC 00350224 (84 bytes) name=FUN_00350224

undefined1 FUN_00350224(void)

{
  if (DAT_00532119 != '\0') {
                    /* catch() { ... } // from try @ 0034f218 with catch @ 00350244
                       catch() { ... } // from try @ 0034fb6c with catch @ 00350244 */
    return DAT_005329c8;
  }
  DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
  DAT_00532119 = 1;
  return DAT_005329c8;
}


==================================================================

### FUNC 00350278 (180 bytes) name=FUN_00350278

long FUN_00350278(long param_1,char *param_2)

{
  code *pcVar1;
  int iVar2;
  void *__dest;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_2 != (char *)0x0) {
    iVar2 = strcmp(param_2,"HOST_ALLOC");
                    /* catch() { ... } // from try @ 003502e4 with catch @ 003502a0
                       catch() { ... } // from try @ 0035118c with catch @ 003502a0
                       catch() { ... } // from try @ 00351294 with catch @ 003502a0
                       catch() { ... } // from try @ 00351ea8 with catch @ 003502a0 */
    if (iVar2 == 0) {
      return param_1 + 0x58;
    }
    iVar2 = strcmp(param_2,"OCL");
    if (iVar2 != 0) {
                    /* try { // try from 003502e4 to 0045032b has its CatchHandler @ 003502a0 */
      local_10 = 0;
      local_8 = 0;
      __dest = (void *)cv::String::allocate((String *)&local_10,0x31);
      memcpy(__dest,"getBufferPoolController(): unknown BufferPool ID\n",0x31);
      cv::error(-5,(String *)&local_10,
                "virtual cv::BufferPoolController* cv::ocl::OpenCLAllocator::getBufferPoolController(const char*) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1423);
                    /* WARNING: Does not return */
      pcVar1 = (code *)SoftwareBreakpoint(1000,0x35032c);
      (*pcVar1)();
    }
  }
  return param_1 + 8;
}


==================================================================

### FUNC 00350340 (8 bytes) name=haveOpenCL

/* cv::ocl::haveOpenCL() */

undefined8 cv::ocl::haveOpenCL(void)

{
  return 0;
}


==================================================================

### FUNC 00350348 (8 bytes) name=haveAmdBlas

/* cv::ocl::haveAmdBlas() */

undefined8 cv::ocl::haveAmdBlas(void)

{
  return 0;
}


==================================================================

### FUNC 00350350 (8 bytes) name=haveAmdFft

/* cv::ocl::haveAmdFft() */

undefined8 cv::ocl::haveAmdFft(void)

{
  return 0;
}


==================================================================

### FUNC 00350358 (8 bytes) name=haveSVM

/* cv::ocl::haveSVM() */

undefined8 cv::ocl::haveSVM(void)

{
                    /* try { // try from 00350358 to 00450377 has its CatchHandler @ 00351ce0 */
  return 0;
}


==================================================================

### FUNC 00350360 (656 bytes) name=FUN_00350360

void FUN_00350360(long param_1)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  undefined2 uVar10;
  int iVar11;
  size_t __n;
  void *__dest;
  char *pcVar12;
  int *piVar13;
  long lVar14;
  uint local_404;
  long local_400;
  long local_3f8;
  undefined8 local_3f0;
  char acStack_3e8 [1000];
  
  local_404 = (uint)*(byte *)(param_1 + 0x20);
  if (local_404 == 0) {
                    /* try { // try from 003503b8 to 004503bb has its CatchHandler @ 00351b38 */
    if ((((DAT_005320b8 == (code *)0x0) &&
         (DAT_005320b8 = (code *)FUN_0034d2bc("clGetPlatformIDs"), DAT_005320b8 == (code *)0x0)) ||
        (iVar11 = (*DAT_005320b8)(1,param_1 + 8,&local_404), iVar11 != 0)) || (local_404 == 0)) {
      *(undefined8 *)(param_1 + 8) = 0;
    }
    else {
      lVar14 = *(long *)(param_1 + 8);
      if (lVar14 != 0) {
        local_400 = 0;
        if (DAT_00532119 == '\0') {
          DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
          lVar14 = *(long *)(param_1 + 8);
          DAT_00532119 = '\x01';
        }
                    /* try { // try from 003503f0 to 00450433 has its CatchHandler @ 00351b38 */
        if (DAT_005329c8 == '\0') {
                    /* try { // try from 003505dc to 00450647 has its CatchHandler @ 003518c4 */
          if ((DAT_005320b0 != (code *)0x0) ||
             (DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo"), DAT_005320b0 != (code *)0x0)
             ) {
            (*DAT_005320b0)(lVar14,0x903,1000,acStack_3e8,&local_400);
          }
        }
        else if (((DAT_005320b0 == (code *)0x0) &&
                 (DAT_005320b0 = (code *)FUN_0034d2bc("clGetPlatformInfo"),
                 DAT_005320b0 == (code *)0x0)) ||
                (iVar11 = (*DAT_005320b0)(lVar14,0x903,1000,acStack_3e8,&local_400), iVar11 != 0)) {
          local_3f8 = 0;
          local_3f0 = 0;
          pcVar12 = (char *)cv::String::allocate((String *)&local_3f8,0x3e);
          uVar10 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._60_2_;
          uVar9 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._56_4_;
          uVar8 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._40_8_;
          uVar7 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._32_8_;
          uVar6 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._24_8_;
          uVar5 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._16_8_;
          uVar4 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._8_8_;
          uVar3 = s_clGetPlatformInfo_handle__0x0903_0046d7b0._0_8_;
          *(undefined8 *)(pcVar12 + 0x30) = s_clGetPlatformInfo_handle__0x0903_0046d7b0._48_8_;
          *(undefined4 *)(pcVar12 + 0x38) = uVar9;
          *(undefined2 *)(pcVar12 + 0x3c) = uVar10;
          *(undefined8 *)pcVar12 = uVar3;
          *(undefined8 *)(pcVar12 + 8) = uVar4;
          *(undefined8 *)(pcVar12 + 0x10) = uVar5;
          *(undefined8 *)(pcVar12 + 0x18) = uVar6;
          *(undefined8 *)(pcVar12 + 0x20) = uVar7;
          *(undefined8 *)(pcVar12 + 0x28) = uVar8;
          cv::error(-0xd7,(String *)&local_3f8,"void cv::ocl::Platform::Impl::init()",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x6a9);
          cv::String::deallocate((String *)&local_3f8);
        }
        local_3f8 = 0;
        local_3f0 = 0;
        acStack_3e8[local_400] = '\0';
        __n = strlen(acStack_3e8);
        __dest = (void *)cv::String::allocate((String *)&local_3f8,__n);
                    /* try { // try from 00350460 to 00450463 has its CatchHandler @ 00351a34 */
        memcpy(__dest,acStack_3e8,__n);
                    /* try { // try from 00350468 to 0045049b has its CatchHandler @ 00351b38 */
        if ((String *)(param_1 + 0x10) != (String *)&local_3f8) {
          cv::String::deallocate((String *)(param_1 + 0x10));
          if (local_3f8 != 0) {
            piVar13 = (int *)(local_3f8 + -4);
            do {
              cVar1 = '\x01';
              bVar2 = (bool)ExclusiveMonitorPass(piVar13,0x10);
              if (bVar2) {
                *piVar13 = *piVar13 + 1;
                cVar1 = ExclusiveMonitorsStatus();
              }
            } while (cVar1 != '\0');
          }
          *(long *)(param_1 + 0x10) = local_3f8;
          *(undefined8 *)(param_1 + 0x18) = local_3f0;
        }
        cv::String::deallocate((String *)&local_3f8);
      }
    }
    *(undefined1 *)(param_1 + 0x20) = 1;
                    /* try { // try from 003504d4 to 004504d7 has its CatchHandler @ 00351e8c */
                    /* try { // try from 003504dc to 0045056f has its CatchHandler @ 00351b38 */
    return;
  }
  return;
}


==================================================================

### FUNC 00350618 (8 bytes) name=Platform

/* cv::ocl::Platform::Platform() */

void __thiscall cv::ocl::Platform::Platform(Platform *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00350620 (32 bytes) name=Platform

/* cv::ocl::Platform::Platform(cv::ocl::Platform const&) */

void __thiscall cv::ocl::Platform::Platform(Platform *this,Platform *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00350640 (152 bytes) name=operator=

/* cv::ocl::Platform::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Platform const&) */

Platform * __thiscall cv::ocl::Platform::operator=(Platform *this,Platform *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  
  piVar5 = *(int **)param_1;
  if (piVar5 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = *piVar5 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
                    /* try { // try from 003506b4 to 004506b7 has its CatchHandler @ 00351a54 */
      String::deallocate((String *)(piVar4 + 4));
      operator_delete(piVar4);
      *(int **)this = piVar5;
      return this;
    }
  }
  *(int **)this = piVar5;
  return this;
}


==================================================================

### FUNC 003506d8 (16 bytes) name=ptr

/* cv::ocl::Platform::ptr() const */

undefined8 __thiscall cv::ocl::Platform::ptr(Platform *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 003506e8 (172 bytes) name=getDefault

/* cv::ocl::Platform::getDefault() */

undefined8 * cv::ocl::Platform::getDefault(void)

{
  int iVar1;
  
                    /* try { // try from 003506f8 to 004506fb has its CatchHandler @ 00351a44 */
                    /* try { // try from 00350700 to 004507e7 has its CatchHandler @ 00351a54 */
  if (((DAT_00532080 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00532080), iVar1 != 0)) {
    Platform((Platform *)&DAT_00532148);
    __cxa_guard_release(&DAT_00532080);
    __cxa_atexit(PTR__Platform_00501ca0,&DAT_00532148,&DAT_00502000);
  }
  if (DAT_00532148 != (undefined4 *)0x0) {
    return &DAT_00532148;
  }
  DAT_00532148 = operator_new(0x28);
  *(undefined8 *)(DAT_00532148 + 4) = 0;
  *(undefined8 *)(DAT_00532148 + 6) = 0;
  *DAT_00532148 = 1;
  *(undefined8 *)(DAT_00532148 + 2) = 0;
  *(undefined1 *)(DAT_00532148 + 8) = 0;
  FUN_00350360();
  return &DAT_00532148;
}


==================================================================

### FUNC 003507a8 (1848 bytes) name=FUN_003507a8

void FUN_003507a8(undefined4 *param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  code *pcVar3;
  int iVar4;
  ulong uVar5;
  void *pvVar6;
  char *pcVar7;
  undefined4 uVar8;
  int *piVar9;
  ulong uVar10;
  ulong uVar11;
  char *pcVar12;
  undefined8 uVar13;
  long lVar14;
  int local_a8;
  undefined4 local_a4;
  undefined8 local_a0;
  long local_98;
  long local_90;
  long local_88;
  undefined8 local_80;
  long local_78;
  undefined8 local_70;
  long local_68;
  long local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  char *local_40;
  ulong local_38;
  long local_30;
  undefined8 local_28;
  char *local_20;
  ulong local_18;
  char *local_10;
  ulong local_8;
  
  *(undefined8 *)(param_1 + 4) = 0;
  *(undefined8 *)(param_1 + 6) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  *(undefined8 *)(param_1 + 10) = 0;
  *(undefined8 *)(param_1 + 0x16) = 0;
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x1a) = 0;
  *(undefined8 *)(param_1 + 0x1c) = 0;
  *(undefined8 *)(param_1 + 2) = param_2;
  *param_1 = 1;
  FUN_0034e2e8((String *)&local_60,param_2,0x102b);
  if ((String *)(param_1 + 4) != (String *)&local_60) {
    cv::String::deallocate((String *)(param_1 + 4));
    if (local_60 != 0) {
      piVar9 = (int *)(local_60 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(long *)(param_1 + 4) = local_60;
    *(undefined8 *)(param_1 + 6) = local_58;
  }
  cv::String::deallocate((String *)&local_60);
  FUN_0034e2e8((String *)&local_50,*(undefined8 *)(param_1 + 2),0x102f);
  if ((String *)(param_1 + 8) != (String *)&local_50) {
    cv::String::deallocate((String *)(param_1 + 8));
    if (local_50 != 0) {
      piVar9 = (int *)(local_50 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
                    /* try { // try from 003508a8 to 004508ab has its CatchHandler @ 00351610 */
    *(long *)(param_1 + 8) = local_50;
                    /* try { // try from 003508b0 to 004508c7 has its CatchHandler @ 00351a54 */
    *(undefined8 *)(param_1 + 10) = local_48;
  }
  cv::String::deallocate((String *)&local_50);
  local_a0 = 0;
  local_98 = 0;
  uVar13 = *(undefined8 *)(param_1 + 2);
  if ((((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) ||
      (iVar4 = (*DAT_00532990)(uVar13,0x1032,8,&local_a0,&local_98), pcVar3 = DAT_00532990,
      iVar4 != 0)) || (local_98 != 8)) {
    pcVar3 = DAT_00532990;
    local_a8 = 0;
    param_1[0xc] = 0;
    local_90 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 == (code *)0x0) goto LAB_00350d70;
LAB_0035091c:
                    /* try { // try from 0035092c to 0045092f has its CatchHandler @ 003511dc */
    iVar4 = (*DAT_00532990)(uVar13,0x1035,4,&local_a8,&local_90);
    pcVar3 = DAT_00532990;
    if ((iVar4 != 0) || (local_90 != 4)) goto LAB_0035094c;
    local_a4 = 0;
    local_88 = 0;
    *(bool *)(param_1 + 0xd) = local_a8 != 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 == (code *)0x0) goto LAB_00350e10;
LAB_00350964:
    iVar4 = (*DAT_00532990)(uVar13,0x1002,4,&local_a4,&local_88);
    pcVar3 = DAT_00532990;
    if ((iVar4 != 0) || (local_88 != 4)) goto LAB_00350990;
    param_1[0xe] = local_a4;
    local_80 = 0;
    local_78 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 == (code *)0x0) goto LAB_00350d3c;
LAB_003509ac:
    iVar4 = (*DAT_00532990)(uVar13,0x1004,8,&local_80,&local_78);
    pcVar3 = DAT_00532990;
    if ((iVar4 != 0) || (local_78 != 8)) goto LAB_003509d8;
    *(undefined8 *)(param_1 + 0x10) = local_80;
    local_70 = 0;
    local_68 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 == (code *)0x0) goto LAB_00350d08;
LAB_003509f4:
    iVar4 = (*DAT_00532990)(uVar13,0x1000,8,&local_70,&local_68);
    if ((iVar4 != 0) || (local_68 != 8)) goto LAB_00350a20;
    uVar8 = (undefined4)local_70;
  }
  else {
    param_1[0xc] = (undefined4)local_a0;
    local_a8 = 0;
    local_90 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 != (code *)0x0) goto LAB_0035091c;
LAB_00350d70:
    local_90 = 0;
    local_a8 = 0;
    DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo");
    if (DAT_00532990 != (code *)0x0) goto LAB_0035091c;
LAB_0035094c:
    pcVar3 = DAT_00532990;
    *(undefined1 *)(param_1 + 0xd) = 0;
    local_a4 = 0;
    local_88 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 != (code *)0x0) goto LAB_00350964;
LAB_00350e10:
    local_88 = 0;
    local_a4 = 0;
    DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo");
    if (DAT_00532990 != (code *)0x0) goto LAB_00350964;
LAB_00350990:
    pcVar3 = DAT_00532990;
    local_80 = 0;
    param_1[0xe] = 0;
                    /* try { // try from 003509a0 to 004510a3 has its CatchHandler @ 00351a54 */
    local_78 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 != (code *)0x0) goto LAB_003509ac;
LAB_00350d3c:
    local_78 = 0;
    local_80 = 0;
    DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo");
    if (DAT_00532990 != (code *)0x0) goto LAB_003509ac;
LAB_003509d8:
    pcVar3 = DAT_00532990;
    local_70 = 0;
    *(undefined8 *)(param_1 + 0x10) = 0;
    local_68 = 0;
    uVar13 = *(undefined8 *)(param_1 + 2);
    if (pcVar3 != (code *)0x0) goto LAB_003509f4;
LAB_00350d08:
    local_68 = 0;
    local_70 = 0;
    DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo");
    if (DAT_00532990 != (code *)0x0) goto LAB_003509f4;
LAB_00350a20:
    uVar8 = 0;
  }
  param_1[0x12] = uVar8;
  FUN_0034e2e8((String *)&local_40,*(undefined8 *)(param_1 + 2),0x102d);
  if ((String *)(param_1 + 0x16) != (String *)&local_40) {
    cv::String::deallocate((String *)(param_1 + 0x16));
    if (local_40 != (char *)0x0) {
      piVar9 = (int *)(local_40 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(char **)(param_1 + 0x16) = local_40;
    *(ulong *)(param_1 + 0x18) = local_38;
  }
  cv::String::deallocate((String *)&local_40);
  FUN_0034e2e8((String *)&local_40,*(undefined8 *)(param_1 + 2),0x102f);
  uVar11 = local_38;
  pcVar12 = local_40;
  param_1[0x14] = 0;
  param_1[0x13] = 0;
  if (((10 < local_38) && (local_40 != (char *)0x0)) &&
     (iVar4 = strncmp(local_40,"OpenCL ",7), iVar4 == 0)) {
    pcVar7 = pcVar12 + 7;
    if (pcVar7 <= pcVar12 + (uVar11 - 1)) {
      do {
        if (*pcVar7 == '.') {
          lVar14 = (long)pcVar7 - (long)pcVar12;
          if (lVar14 != -1) {
            uVar5 = lVar14 - 7;
            uVar10 = uVar11 - 7;
            local_20 = (char *)0x0;
            local_18 = 0;
            if ((uVar5 < uVar10) && (uVar10 = uVar5, uVar5 == 0)) {
              pcVar12 = "";
            }
            else {
              if (uVar11 == uVar10) {
                piVar9 = (int *)(pcVar12 + -4);
                do {
                  cVar1 = '\x01';
                  bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
                  if (bVar2) {
                    *piVar9 = *piVar9 + 1;
                    cVar1 = ExclusiveMonitorsStatus();
                  }
                } while (cVar1 != '\0');
                local_20 = local_40;
                local_18 = local_38;
              }
              else {
                pvVar6 = (void *)cv::String::allocate((String *)&local_20,uVar10);
                memcpy(pvVar6,local_40 + 7,uVar10);
              }
              pcVar12 = local_20;
              uVar11 = local_38;
              if (local_20 == (char *)0x0) {
                pcVar12 = "";
              }
            }
            iVar4 = atoi(pcVar12);
            local_10 = (char *)0x0;
            param_1[0x13] = iVar4;
            uVar10 = uVar11;
            if (lVar14 + 1U < uVar11) {
              uVar10 = lVar14 + 1U;
            }
            local_8 = 0;
            uVar5 = uVar11 - uVar10;
            if (uVar5 != 0) {
              if (uVar11 == uVar5) {
                piVar9 = (int *)(local_40 + -4);
                do {
                  cVar1 = '\x01';
                  bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
                  if (bVar2) {
                    *piVar9 = *piVar9 + 1;
                    cVar1 = ExclusiveMonitorsStatus();
                  }
                } while (cVar1 != '\0');
                local_10 = local_40;
                local_8 = local_38;
              }
              else {
                pvVar6 = (void *)cv::String::allocate((String *)&local_10,uVar5);
                memcpy(pvVar6,local_40 + uVar10,uVar5);
              }
            }
            cv::String::deallocate((String *)&local_20);
            if (local_10 != (char *)0x0) {
              piVar9 = (int *)(local_10 + -4);
              do {
                cVar1 = '\x01';
                bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
                if (bVar2) {
                  *piVar9 = *piVar9 + 1;
                  cVar1 = ExclusiveMonitorsStatus();
                }
              } while (cVar1 != '\0');
            }
            local_20 = local_10;
            local_18 = local_8;
            cv::String::deallocate((String *)&local_10);
            pcVar12 = local_20;
            if (local_20 == (char *)0x0) {
              pcVar12 = "";
            }
            iVar4 = atoi(pcVar12);
            param_1[0x14] = iVar4;
            cv::String::deallocate((String *)&local_20);
          }
          break;
        }
        pcVar7 = pcVar7 + 1;
      } while (pcVar7 != pcVar12 + (uVar11 - 1) + 1);
    }
  }
  FUN_0034e2e8((String *)&local_30,*(undefined8 *)(param_1 + 2),0x102c);
  if ((String *)(param_1 + 0x1a) != (String *)&local_30) {
    cv::String::deallocate((String *)(param_1 + 0x1a));
    if (local_30 != 0) {
      piVar9 = (int *)(local_30 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(long *)(param_1 + 0x1a) = local_30;
    *(undefined8 *)(param_1 + 0x1c) = local_28;
  }
  cv::String::deallocate((String *)&local_30);
  pcVar12 = *(char **)(param_1 + 0x1a);
  if (pcVar12 == "Advanced Micro Devices, Inc.") {
LAB_00350cb0:
    param_1[0x1e] = 1;
  }
  else {
    if (pcVar12 == (char *)0x0) {
LAB_00350da8:
      if ((*(char **)(param_1 + 4) == (char *)0x0) ||
         (pcVar7 = strstr(*(char **)(param_1 + 4),"Iris"), pcVar7 == (char *)0x0)) {
        if ((pcVar12 == "NVIDIA Corporation") ||
           ((pcVar12 != (char *)0x0 && (iVar4 = strcmp(pcVar12,"NVIDIA Corporation"), iVar4 == 0))))
        {
          param_1[0x1e] = 3;
        }
        else {
          param_1[0x1e] = 0;
        }
        goto LAB_00350cb8;
      }
    }
    else {
      iVar4 = strcmp(pcVar12,"Advanced Micro Devices, Inc.");
      if (((iVar4 == 0) || (pcVar12 == "AMD")) || (iVar4 = strcmp(pcVar12,"AMD"), iVar4 == 0))
      goto LAB_00350cb0;
      if ((((pcVar12 != "Intel(R) Corporation") &&
           (iVar4 = strcmp(pcVar12,"Intel(R) Corporation"), iVar4 != 0)) && (pcVar12 != "Intel")) &&
         (iVar4 = strcmp(pcVar12,"Intel"), iVar4 != 0)) goto LAB_00350da8;
    }
    param_1[0x1e] = 2;
  }
LAB_00350cb8:
  cv::String::deallocate((String *)&local_40);
  return;
}


==================================================================

### FUNC 00350fc8 (8 bytes) name=Device

/* cv::ocl::Device::Device() */

void __thiscall cv::ocl::Device::Device(Device *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00350fd0 (32 bytes) name=Device

/* cv::ocl::Device::Device(cv::ocl::Device const&) */

void __thiscall cv::ocl::Device::Device(Device *this,Device *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00350ff0 (176 bytes) name=operator=

/* cv::ocl::Device::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Device const&) */

Device * __thiscall cv::ocl::Device::operator=(Device *this,Device *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  
  piVar5 = *(int **)param_1;
  if (piVar5 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = *piVar5 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      String::deallocate((String *)(piVar4 + 0x1a));
      String::deallocate((String *)(piVar4 + 0x16));
      String::deallocate((String *)(piVar4 + 8));
      String::deallocate((String *)(piVar4 + 4));
      operator_delete(piVar4);
      *(int **)this = piVar5;
      return this;
    }
  }
  *(int **)this = piVar5;
  return this;
}


==================================================================

### FUNC 003510d4 (152 bytes) name=set

/* cv::ocl::Device::set(void*) */

void __thiscall cv::ocl::Device::set(Device *this,void *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  void *pvVar4;
  int *piVar5;
  
                    /* try { // try from 003510d8 to 004510ef has its CatchHandler @ 00351b38 */
  piVar5 = *(int **)this;
  if (piVar5 != (int *)0x0) {
    do {
      iVar1 = *piVar5;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      String::deallocate((String *)(piVar5 + 0x1a));
      String::deallocate((String *)(piVar5 + 0x16));
      String::deallocate((String *)(piVar5 + 8));
      String::deallocate((String *)(piVar5 + 4));
                    /* try { // try from 00351160 to 00451163 has its CatchHandler @ 00351ce0 */
      operator_delete(piVar5);
                    /* try { // try from 00351168 to 00451183 has its CatchHandler @ 00351db4 */
    }
  }
  pvVar4 = operator_new(0x80);
  FUN_003507a8(pvVar4,param_1);
  *(void **)this = pvVar4;
  return;
}


==================================================================

### FUNC 003511b4 (8 bytes) name=Device

/* cv::ocl::Device::Device(void*) */

void __thiscall cv::ocl::Device::Device(Device *this,void *param_1)

{
  *(undefined8 *)this = 0;
  set(this,param_1);
  return;
}


==================================================================

### FUNC 003511bc (16 bytes) name=ptr

/* cv::ocl::Device::ptr() const */

undefined8 __thiscall cv::ocl::Device::ptr(Device *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 003511cc (68 bytes) name=name

/* cv::ocl::Device::name() const */

void cv::ocl::Device::name(void)

{
  char cVar1;
  bool bVar2;
  long *in_x0;
  long lVar3;
  int *piVar4;
  long lVar5;
  long *in_x8;
  
  lVar5 = *in_x0;
  if (lVar5 != 0) {
    lVar3 = *(long *)(lVar5 + 0x10);
                    /* catch() { ... } // from try @ 0035092c with catch @ 003511dc */
    in_x8[1] = *(long *)(lVar5 + 0x18);
    *in_x8 = lVar3;
    if (lVar3 != 0) {
      piVar4 = (int *)(lVar3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00351210 (72 bytes) name=extensions

/* cv::ocl::Device::extensions() const */

void cv::ocl::Device::extensions(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
  if (*in_x0 != 0) {
    FUN_0034e2e8(*(undefined8 *)(*in_x0 + 8),0x1030);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00351258 (68 bytes) name=version

/* cv::ocl::Device::version() const */

void cv::ocl::Device::version(void)

{
  char cVar1;
  bool bVar2;
  long *in_x0;
  long lVar3;
  int *piVar4;
  long lVar5;
  long *in_x8;
  
  lVar5 = *in_x0;
  if (lVar5 != 0) {
    lVar3 = *(long *)(lVar5 + 0x20);
    in_x8[1] = *(long *)(lVar5 + 0x28);
    *in_x8 = lVar3;
    if (lVar3 != 0) {
      piVar4 = (int *)(lVar3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    return;
  }
  *in_x8 = 0;
                    /* try { // try from 00351294 to 00451297 has its CatchHandler @ 003502a0 */
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 0035129c (68 bytes) name=vendorName

/* cv::ocl::Device::vendorName() const */

void cv::ocl::Device::vendorName(void)

{
  char cVar1;
  bool bVar2;
  long *in_x0;
  long lVar3;
  int *piVar4;
  long lVar5;
  long *in_x8;
  
  lVar5 = *in_x0;
  if (lVar5 != 0) {
    lVar3 = *(long *)(lVar5 + 0x68);
    in_x8[1] = *(long *)(lVar5 + 0x70);
    *in_x8 = lVar3;
    if (lVar3 != 0) {
      piVar4 = (int *)(lVar3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 003512e0 (16 bytes) name=vendorID

/* cv::ocl::Device::vendorID() const */

undefined4 __thiscall cv::ocl::Device::vendorID(Device *this)

{
  undefined4 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x78);
  }
  return uVar1;
}


==================================================================

### FUNC 003512f0 (72 bytes) name=OpenCL_C_Version

/* cv::ocl::Device::OpenCL_C_Version() const */

void cv::ocl::Device::OpenCL_C_Version(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
  if (*in_x0 != 0) {
    FUN_0034e2e8(*(undefined8 *)(*in_x0 + 8),0x103d);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00351338 (72 bytes) name=OpenCLVersion

/* cv::ocl::Device::OpenCLVersion() const */

void cv::ocl::Device::OpenCLVersion(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
  if (*in_x0 != 0) {
    FUN_0034e2e8(*(undefined8 *)(*in_x0 + 8),0x1030);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00351380 (16 bytes) name=deviceVersionMajor

/* cv::ocl::Device::deviceVersionMajor() const */

undefined4 __thiscall cv::ocl::Device::deviceVersionMajor(Device *this)

{
  undefined4 uVar1;
  
                    /* try { // try from 00351384 to 00451387 has its CatchHandler @ 00351ce0 */
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x4c);
  }
  return uVar1;
}


==================================================================

### FUNC 00351390 (16 bytes) name=deviceVersionMinor

/* cv::ocl::Device::deviceVersionMinor() const */

undefined4 __thiscall cv::ocl::Device::deviceVersionMinor(Device *this)

{
  undefined4 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x50);
  }
  return uVar1;
}


==================================================================

### FUNC 003513a0 (68 bytes) name=driverVersion

/* cv::ocl::Device::driverVersion() const */

void cv::ocl::Device::driverVersion(void)

{
  char cVar1;
  bool bVar2;
  long *in_x0;
  long lVar3;
  int *piVar4;
  long lVar5;
  long *in_x8;
  
  lVar5 = *in_x0;
  if (lVar5 != 0) {
    lVar3 = *(long *)(lVar5 + 0x58);
    in_x8[1] = *(long *)(lVar5 + 0x60);
    *in_x8 = lVar3;
    if (lVar3 != 0) {
      piVar4 = (int *)(lVar3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 003513d0 to 004513d3 has its CatchHandler @ 00351a54 */
      } while (cVar1 != '\0');
    }
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 003513e4 (16 bytes) name=type

/* cv::ocl::Device::type() const */

undefined4 __thiscall cv::ocl::Device::type(Device *this)

{
  undefined4 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x48);
  }
  return uVar1;
}


==================================================================

### FUNC 003513f4 (152 bytes) name=addressBits

/* cv::ocl::Device::addressBits() const */

undefined4 __thiscall cv::ocl::Device::addressBits(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* try { // try from 00351400 to 00451403 has its CatchHandler @ 00351664 */
  if (*(long *)this != 0) {
                    /* try { // try from 00351408 to 0045140b has its CatchHandler @ 00351a54 */
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100d,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035148c (176 bytes) name=available

/* cv::ocl::Device::available() const */

ulong __thiscall cv::ocl::Device::available(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
    uVar1 = (*DAT_00532990)(uVar2,0x1027,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
      return 0;
    }
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 0035153c (176 bytes) name=compilerAvailable

/* cv::ocl::Device::compilerAvailable() const */

ulong __thiscall cv::ocl::Device::compilerAvailable(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
    uVar1 = (*DAT_00532990)(uVar2,0x1028,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
      return 0;
    }
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 003515ec (176 bytes) name=linkerAvailable

/* cv::ocl::Device::linkerAvailable() const */

ulong __thiscall cv::ocl::Device::linkerAvailable(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
                    /* catch() { ... } // from try @ 003508a8 with catch @ 00351610 */
                    /* try { // try from 00351694 to 00451697 has its CatchHandler @ 00351a54 */
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
    uVar1 = (*DAT_00532990)(uVar2,0x103e,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
                    /* catch() { ... } // from try @ 00351400 with catch @ 00351664 */
      return 0;
    }
                    /* try { // try from 00351638 to 0045163b has its CatchHandler @ 00351a54 */
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 0035169c (16 bytes) name=doubleFPConfig

/* cv::ocl::Device::doubleFPConfig() const */

undefined4 __thiscall cv::ocl::Device::doubleFPConfig(Device *this)

{
  undefined4 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x30);
  }
  return uVar1;
}


==================================================================

### FUNC 003516ac (152 bytes) name=singleFPConfig

/* cv::ocl::Device::singleFPConfig() const */

ulong __thiscall cv::ocl::Device::singleFPConfig(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  ulong local_10;
  long local_8;
  
  if (*(long *)this != 0) {
                    /* try { // try from 003516c4 to 004516c7 has its CatchHandler @ 003519e8 */
    local_10 = 0;
    local_8 = 0;
                    /* try { // try from 003516cc to 004516cf has its CatchHandler @ 00351a54 */
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x101b,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10 & 0xffffffff;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351744 (152 bytes) name=halfFPConfig

/* cv::ocl::Device::halfFPConfig() const */

ulong __thiscall cv::ocl::Device::halfFPConfig(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  ulong local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1033,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10 & 0xffffffff;
    }
  }
  return 0;
}


==================================================================

### FUNC 003517dc (176 bytes) name=endianLittle

/* cv::ocl::Device::endianLittle() const */

ulong __thiscall cv::ocl::Device::endianLittle(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
    uVar1 = (*DAT_00532990)(uVar2,0x1026,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
      return 0;
    }
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 0035188c (176 bytes) name=errorCorrectionSupport

/* cv::ocl::Device::errorCorrectionSupport() const */

ulong __thiscall cv::ocl::Device::errorCorrectionSupport(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
                    /* catch() { ... } // from try @ 003505dc with catch @ 003518c4 */
    uVar1 = (*DAT_00532990)(uVar2,0x1024,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
      return 0;
    }
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 0035193c (152 bytes) name=executionCapabilities

/* cv::ocl::Device::executionCapabilities() const */

ulong __thiscall cv::ocl::Device::executionCapabilities(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  ulong local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1029,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10 & 0xffffffff;
    }
  }
  return 0;
}


==================================================================

### FUNC 003519d4 (152 bytes) name=globalMemCacheSize

/* cv::ocl::Device::globalMemCacheSize() const */

undefined8 __thiscall cv::ocl::Device::globalMemCacheSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
                    /* catch() { ... } // from try @ 003516c4 with catch @ 003519e8 */
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 003506b4 with catch @ 00351a54
                       catch() { ... } // from try @ 00350700 with catch @ 00351a54
                       catch() { ... } // from try @ 003508b0 with catch @ 00351a54
                       catch() { ... } // from try @ 003509a0 with catch @ 00351a54
                       catch() { ... } // from try @ 003513d0 with catch @ 00351a54
                       catch() { ... } // from try @ 00351408 with catch @ 00351a54
                       catch() { ... } // from try @ 00351638 with catch @ 00351a54
                       catch() { ... } // from try @ 00351694 with catch @ 00351a54
                       catch() { ... } // from try @ 003516cc with catch @ 00351a54 */
                    /* try { // try from 00351a20 to 00451a23 has its CatchHandler @ 00351b38 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x101e,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
                    /* catch() { ... } // from try @ 003506f8 with catch @ 00351a44 */
      return local_10;
    }
  }
                    /* catch() { ... } // from try @ 00350460 with catch @ 00351a34 */
  return 0;
}


==================================================================

### FUNC 00351a6c (152 bytes) name=globalMemCacheType

/* cv::ocl::Device::globalMemCacheType() const */

undefined4 __thiscall cv::ocl::Device::globalMemCacheType(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x101c,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351b04 (152 bytes) name=globalMemCacheLineSize

/* cv::ocl::Device::globalMemCacheLineSize() const */

undefined4 __thiscall cv::ocl::Device::globalMemCacheLineSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 003503e8 with catch @ 00351b28 */
                    /* catch() { ... } // from try @ 003503b8 with catch @ 00351b38
                       catch() { ... } // from try @ 003503f0 with catch @ 00351b38
                       catch() { ... } // from try @ 00350468 with catch @ 00351b38
                       catch() { ... } // from try @ 003504dc with catch @ 00351b38
                       catch() { ... } // from try @ 003510d8 with catch @ 00351b38
                       catch() { ... } // from try @ 00351a20 with catch @ 00351b38 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x101d,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351b9c (152 bytes) name=globalMemSize

/* cv::ocl::Device::globalMemSize() const */

undefined8 __thiscall cv::ocl::Device::globalMemSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x101f,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351c34 (152 bytes) name=localMemSize

/* cv::ocl::Device::localMemSize() const */

undefined8 __thiscall cv::ocl::Device::localMemSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1023,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351ccc (152 bytes) name=localMemType

/* cv::ocl::Device::localMemType() const */

undefined4 __thiscall cv::ocl::Device::localMemType(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
                    /* catch() { ... } // from try @ 00350358 with catch @ 00351ce0
                       catch() { ... } // from try @ 00351160 with catch @ 00351ce0
                       catch() { ... } // from try @ 00351384 with catch @ 00351ce0
                       catch() { ... } // from try @ 00351cf0 with catch @ 00351ce0 */
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00351cf0 to 00451cf3 has its CatchHandler @ 00351ce0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1022,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00351d64 (16 bytes) name=hostUnifiedMemory

/* cv::ocl::Device::hostUnifiedMemory() const */

undefined1 __thiscall cv::ocl::Device::hostUnifiedMemory(Device *this)

{
  undefined1 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined1 *)(*(long *)this + 0x34);
  }
  return uVar1;
}


==================================================================

### FUNC 00351d74 (176 bytes) name=imageSupport

/* cv::ocl::Device::imageSupport() const */

ulong __thiscall cv::ocl::Device::imageSupport(Device *this)

{
  ulong uVar1;
  undefined8 uVar2;
  int local_c;
  long local_8;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    local_c = 0;
    local_8 = 0;
    if ((DAT_00532990 == (code *)0x0) &&
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
      return 0;
    }
                    /* catch() { ... } // from try @ 00350330 with catch @ 00351db4
                       catch() { ... } // from try @ 00351168 with catch @ 00351db4
                       catch() { ... } // from try @ 00351dc8 with catch @ 00351db4 */
    uVar1 = (*DAT_00532990)(uVar2,0x1016,4,&local_c,&local_8);
    if ((int)uVar1 != 0) {
      return 0;
    }
                    /* try { // try from 00351dc8 to 00451dcb has its CatchHandler @ 00351db4 */
    if (local_8 == 4) {
      return (ulong)(local_c != 0);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 00351e24 (244 bytes) name=imageFromBufferSupport

/* cv::ocl::Device::imageFromBufferSupport() const */

bool __thiscall cv::ocl::Device::imageFromBufferSupport(Device *this)

{
  long lVar1;
  char *pcVar2;
  long lVar3;
  char *pcVar4;
  long lVar5;
  char *local_10;
  long local_8;
  
  if (*(long *)this == 0) {
    return false;
  }
  FUN_0034e2e8((String *)&local_10,*(undefined8 *)(*(long *)this + 8),0x1030);
                    /* catch() { ... } // from try @ 003504d4 with catch @ 00351e8c */
  if ((local_8 != 0) && (pcVar2 = local_10 + local_8, local_10 < pcVar2)) {
    lVar5 = (long)pcVar2 - (long)local_10;
    pcVar4 = local_10;
    do {
                    /* try { // try from 00351ea8 to 00451eab has its CatchHandler @ 003502a0 */
      if (*pcVar4 == 'c') {
                    /* catch() { ... } // from try @ 00351edc with catch @ 00351eb0
                       catch() { ... } // from try @ 00352098 with catch @ 00351eb0
                       catch() { ... } // from try @ 00352170 with catch @ 00351eb0 */
        if (pcVar2 <= pcVar4) break;
        lVar3 = 0;
        while( true ) {
          lVar1 = lVar3 + 1;
                    /* try { // try from 00351edc to 00451edf has its CatchHandler @ 00351eb0 */
          if ("cl_khr_image2d_from_buffer"[lVar3 + 1] == '\0') {
            String::deallocate((String *)&local_10);
                    /* try { // try from 00351ef8 to 00451efb has its CatchHandler @ 0035214c */
            return (long)pcVar4 - (long)local_10 != -1;
          }
          if (pcVar4[lVar1] != "cl_khr_image2d_from_buffer"[lVar3 + 1]) break;
          lVar3 = lVar1;
          if (lVar1 == lVar5) goto LAB_00351e54;
        }
      }
      pcVar4 = pcVar4 + 1;
      lVar5 = lVar5 + -1;
    } while (pcVar4 != pcVar2);
  }
LAB_00351e54:
  String::deallocate((String *)&local_10);
  return false;
}


==================================================================

### FUNC 00351f18 (152 bytes) name=imagePitchAlignment

/* cv::ocl::Device::imagePitchAlignment() const */

undefined4 __thiscall cv::ocl::Device::imagePitchAlignment(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* try { // try from 00351f28 to 00451f2b has its CatchHandler @ 003521a8 */
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00351f6c to 00451f6f has its CatchHandler @ 00352174 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x104a,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
                    /* try { // try from 00351f74 to 00451fb3 has its CatchHandler @ 003521a8 */
  return 0;
}


==================================================================

### FUNC 00351fb0 (152 bytes) name=imageBaseAddressAlignment

/* cv::ocl::Device::imageBaseAddressAlignment() const */

undefined4 __thiscall cv::ocl::Device::imageBaseAddressAlignment(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x104b,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
                    /* try { // try from 00352024 to 00452027 has its CatchHandler @ 0035214c */
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352048 (152 bytes) name=image2DMaxWidth

/* cv::ocl::Device::image2DMaxWidth() const */

undefined8 __thiscall cv::ocl::Device::image2DMaxWidth(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352098 to 004520b3 has its CatchHandler @ 00351eb0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1011,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
                    /* try { // try from 003520bc to 004520bf has its CatchHandler @ 0035214c */
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 003520e0 (152 bytes) name=image2DMaxHeight

/* cv::ocl::Device::image2DMaxHeight() const */

undefined8 __thiscall cv::ocl::Device::image2DMaxHeight(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352170 to 00452173 has its CatchHandler @ 00351eb0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1012,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
                    /* catch() { ... } // from try @ 00351ef8 with catch @ 0035214c
                       catch() { ... } // from try @ 00352024 with catch @ 0035214c
                       catch() { ... } // from try @ 003520bc with catch @ 0035214c */
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352178 (152 bytes) name=image3DMaxWidth

/* cv::ocl::Device::image3DMaxWidth() const */

undefined8 __thiscall cv::ocl::Device::image3DMaxWidth(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 00351f28 with catch @ 003521a8
                       catch() { ... } // from try @ 00351f74 with catch @ 003521a8 */
                    /* catch() { ... } // from try @ 003521f0 with catch @ 003521b0
                       catch() { ... } // from try @ 0035269c with catch @ 003521b0
                       catch() { ... } // from try @ 00352844 with catch @ 003521b0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1013,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
                    /* try { // try from 003521f0 to 004521f3 has its CatchHandler @ 003521b0 */
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352210 (152 bytes) name=image3DMaxHeight

/* cv::ocl::Device::image3DMaxHeight() const */

undefined8 __thiscall cv::ocl::Device::image3DMaxHeight(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
                    /* try { // try from 0035222c to 0045222f has its CatchHandler @ 00352848 */
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1014,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 003522a8 (152 bytes) name=image3DMaxDepth

/* cv::ocl::Device::image3DMaxDepth() const */

undefined8 __thiscall cv::ocl::Device::image3DMaxDepth(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 003522f0 to 004522f3 has its CatchHandler @ 00352850 */
                    /* try { // try from 003522f8 to 0045231f has its CatchHandler @ 003527c8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1015,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352340 (152 bytes) name=imageMaxBufferSize

/* cv::ocl::Device::imageMaxBufferSize() const */

undefined8 __thiscall cv::ocl::Device::imageMaxBufferSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 003523c0 to 004523c3 has its CatchHandler @ 0035286c */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1040,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 003523d8 (152 bytes) name=imageMaxArraySize

/* cv::ocl::Device::imageMaxArraySize() const */

undefined8 __thiscall cv::ocl::Device::imageMaxArraySize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352464 to 004524cf has its CatchHandler @ 003527c8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1041,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352470 (152 bytes) name=maxClockFrequency

/* cv::ocl::Device::maxClockFrequency() const */

undefined4 __thiscall cv::ocl::Device::maxClockFrequency(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100c,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352508 (16 bytes) name=maxComputeUnits

/* cv::ocl::Device::maxComputeUnits() const */

undefined4 __thiscall cv::ocl::Device::maxComputeUnits(Device *this)

{
  undefined4 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined4 *)(*(long *)this + 0x38);
  }
  return uVar1;
}


==================================================================

### FUNC 00352518 (152 bytes) name=maxConstantArgs

/* cv::ocl::Device::maxConstantArgs() const */

undefined4 __thiscall cv::ocl::Device::maxConstantArgs(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352540 to 00452543 has its CatchHandler @ 00352864 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1021,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 003525b0 (152 bytes) name=maxConstantBufferSize

/* cv::ocl::Device::maxConstantBufferSize() const */

undefined8 __thiscall cv::ocl::Device::maxConstantBufferSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
                    /* try { // try from 003525b4 to 004525b7 has its CatchHandler @ 00352848 */
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1020,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
                    /* try { // try from 00352628 to 0045262b has its CatchHandler @ 00352894 */
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352648 (152 bytes) name=maxMemAllocSize

/* cv::ocl::Device::maxMemAllocSize() const */

undefined8 __thiscall cv::ocl::Device::maxMemAllocSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 0035269c to 004526f3 has its CatchHandler @ 003521b0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1010,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 003526e0 (152 bytes) name=maxParameterSize

/* cv::ocl::Device::maxParameterSize() const */

undefined8 __thiscall cv::ocl::Device::maxParameterSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
                    /* try { // try from 003526fc to 004526ff has its CatchHandler @ 00352894 */
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352708 to 0045270b has its CatchHandler @ 00352848 */
                    /* try { // try from 00352714 to 00452717 has its CatchHandler @ 00352864 */
                    /* try { // try from 00352720 to 00452723 has its CatchHandler @ 0035286c */
                    /* try { // try from 0035272c to 0045272f has its CatchHandler @ 003527c8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1017,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352778 (152 bytes) name=maxReadImageArgs

/* cv::ocl::Device::maxReadImageArgs() const */

undefined4 __thiscall cv::ocl::Device::maxReadImageArgs(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 003522a4 with catch @ 003527c8
                       catch() { ... } // from try @ 003522f8 with catch @ 003527c8
                       catch() { ... } // from try @ 00352464 with catch @ 003527c8
                       catch() { ... } // from try @ 0035272c with catch @ 003527c8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100e,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352810 (152 bytes) name=maxWriteImageArgs

/* cv::ocl::Device::maxWriteImageArgs() const */

undefined4 __thiscall cv::ocl::Device::maxWriteImageArgs(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 0035220c with catch @ 00352894
                       catch() { ... } // from try @ 00352628 with catch @ 00352894
                       catch() { ... } // from try @ 003526fc with catch @ 00352894 */
                    /* try { // try from 00352844 to 00452847 has its CatchHandler @ 003521b0 */
                    /* catch() { ... } // from try @ 0035222c with catch @ 00352848
                       catch() { ... } // from try @ 003525b4 with catch @ 00352848
                       catch() { ... } // from try @ 00352708 with catch @ 00352848 */
                    /* catch() { ... } // from try @ 003522f0 with catch @ 00352850 */
                    /* catch() { ... } // from try @ 00352540 with catch @ 00352864
                       catch() { ... } // from try @ 00352714 with catch @ 00352864 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100f,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
                    /* catch() { ... } // from try @ 003523c0 with catch @ 0035286c
                       catch() { ... } // from try @ 00352720 with catch @ 0035286c */
  return 0;
}


==================================================================

### FUNC 003528a8 (152 bytes) name=maxSamplers

/* cv::ocl::Device::maxSamplers() const */

undefined4 __thiscall cv::ocl::Device::maxSamplers(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* catch() { ... } // from try @ 003528e8 with catch @ 003528a8
                       catch() { ... } // from try @ 00352d94 with catch @ 003528a8
                       catch() { ... } // from try @ 00352f3c with catch @ 003528a8 */
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 003528e8 to 004528eb has its CatchHandler @ 003528a8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1018,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
                    /* try { // try from 00352924 to 00452927 has its CatchHandler @ 00352f40 */
      return local_c;
    }
  }
                    /* try { // try from 00352904 to 00452907 has its CatchHandler @ 00352f8c */
  return 0;
}


==================================================================

### FUNC 00352940 (16 bytes) name=maxWorkGroupSize

/* cv::ocl::Device::maxWorkGroupSize() const */

undefined8 __thiscall cv::ocl::Device::maxWorkGroupSize(Device *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 0x40);
  }
  return uVar1;
}


==================================================================

### FUNC 00352950 (152 bytes) name=maxWorkItemDims

/* cv::ocl::Device::maxWorkItemDims() const */

undefined4 __thiscall cv::ocl::Device::maxWorkItemDims(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 0035299c to 0045299f has its CatchHandler @ 00352ec0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1003,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 003529e8 (376 bytes) name=maxWorkItemSizes

/* cv::ocl::Device::maxWorkItemSizes(unsigned long*) const */

void __thiscall cv::ocl::Device::maxWorkItemSizes(Device *this,ulong *param_1)

{
  int iVar1;
  void *__dest;
  undefined8 uVar2;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003529e8 to 004529eb has its CatchHandler @ 00352f48 */
                    /* try { // try from 003529f0 to 00452a17 has its CatchHandler @ 00352ec0 */
  if (*(long *)this == 0) {
    return;
  }
  local_18 = 0;
  if (DAT_00532119 == '\0') {
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
    uVar2 = *(undefined8 *)(*(long *)this + 8);
  }
  else {
    uVar2 = *(undefined8 *)(*(long *)this + 8);
  }
  if (DAT_005329c8 != '\0') {
    if (((DAT_00532990 != (code *)0x0) ||
        (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
       (iVar1 = (*DAT_00532990)(uVar2,0x1005,0x100,param_1,&local_18), iVar1 == 0)) {
      return;
    }
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)String::allocate((String *)&local_10,0x55);
    memcpy(__dest,&DAT_0046d880,0x55);
    error(-0xd7,(String *)&local_10,"void cv::ocl::Device::maxWorkItemSizes(size_t*) const",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x83d);
    String::deallocate((String *)&local_10);
    return;
  }
  if ((DAT_00532990 == (code *)0x0) &&
     (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) {
    DAT_00532990 = (code *)0x0;
    return;
  }
  (*DAT_00532990)(uVar2,0x1005,0x100,param_1,&local_18);
                    /* try { // try from 00352ab8 to 00452abb has its CatchHandler @ 00352f64 */
  return;
}


==================================================================

### FUNC 00352b74 (152 bytes) name=memBaseAddrAlign

/* cv::ocl::Device::memBaseAddrAlign() const */

undefined4 __thiscall cv::ocl::Device::memBaseAddrAlign(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1019,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352c0c (152 bytes) name=nativeVectorWidthChar

/* cv::ocl::Device::nativeVectorWidthChar() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthChar(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352c38 to 00452c3b has its CatchHandler @ 00352f5c */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1036,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352ca4 (152 bytes) name=nativeVectorWidthShort

/* cv::ocl::Device::nativeVectorWidthShort() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthShort(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* try { // try from 00352cac to 00452caf has its CatchHandler @ 00352f40 */
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1037,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
                    /* try { // try from 00352d20 to 00452d23 has its CatchHandler @ 00352f8c */
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352d3c (152 bytes) name=nativeVectorWidthInt

/* cv::ocl::Device::nativeVectorWidthInt() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthInt(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1038,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352dd4 (152 bytes) name=nativeVectorWidthLong

/* cv::ocl::Device::nativeVectorWidthLong() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthLong(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
                    /* try { // try from 00352df4 to 00452df7 has its CatchHandler @ 00352f8c */
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00352e00 to 00452e03 has its CatchHandler @ 00352f40 */
                    /* try { // try from 00352e0c to 00452e0f has its CatchHandler @ 00352f5c */
                    /* try { // try from 00352e18 to 00452e1b has its CatchHandler @ 00352f64 */
                    /* try { // try from 00352e24 to 00452e27 has its CatchHandler @ 00352ec0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1039,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352e6c (152 bytes) name=nativeVectorWidthFloat

/* cv::ocl::Device::nativeVectorWidthFloat() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthFloat(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 0035299c with catch @ 00352ec0
                       catch() { ... } // from try @ 003529f0 with catch @ 00352ec0
                       catch() { ... } // from try @ 00352b5c with catch @ 00352ec0
                       catch() { ... } // from try @ 00352e24 with catch @ 00352ec0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x103a,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00352f04 (152 bytes) name=nativeVectorWidthDouble

/* cv::ocl::Device::nativeVectorWidthDouble() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthDouble(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* catch() { ... } // from try @ 00352904 with catch @ 00352f8c
                       catch() { ... } // from try @ 00352d20 with catch @ 00352f8c
                       catch() { ... } // from try @ 00352df4 with catch @ 00352f8c */
                    /* try { // try from 00352f3c to 00452f3f has its CatchHandler @ 003528a8 */
                    /* catch() { ... } // from try @ 00352924 with catch @ 00352f40
                       catch() { ... } // from try @ 00352cac with catch @ 00352f40
                       catch() { ... } // from try @ 00352e00 with catch @ 00352f40 */
                    /* catch() { ... } // from try @ 003529e8 with catch @ 00352f48 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x103b,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
                    /* catch() { ... } // from try @ 00352ab8 with catch @ 00352f64
                       catch() { ... } // from try @ 00352e18 with catch @ 00352f64 */
  return 0;
}


==================================================================

### FUNC 00352f9c (152 bytes) name=nativeVectorWidthHalf

/* cv::ocl::Device::nativeVectorWidthHalf() const */

undefined4 __thiscall cv::ocl::Device::nativeVectorWidthHalf(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* catch() { ... } // from try @ 00352fe0 with catch @ 00352fa0
                       catch() { ... } // from try @ 0035348c with catch @ 00352fa0
                       catch() { ... } // from try @ 00353634 with catch @ 00352fa0 */
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 0035301c to 0045301f has its CatchHandler @ 00353638 */
                    /* try { // try from 00352fe0 to 00452fe3 has its CatchHandler @ 00352fa0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x103c,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
                    /* try { // try from 00352ffc to 00452fff has its CatchHandler @ 00353684 */
  return 0;
}


==================================================================

### FUNC 00353034 (152 bytes) name=preferredVectorWidthChar

/* cv::ocl::Device::preferredVectorWidthChar() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthChar(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1006,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
                    /* try { // try from 00353094 to 00453097 has its CatchHandler @ 003535b8 */
  return 0;
}


==================================================================

### FUNC 003530cc (152 bytes) name=preferredVectorWidthShort

/* cv::ocl::Device::preferredVectorWidthShort() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthShort(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
                    /* try { // try from 003530e0 to 004530e3 has its CatchHandler @ 00353640 */
    local_c = 0;
                    /* try { // try from 003530e8 to 0045310f has its CatchHandler @ 003535b8 */
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1007,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00353164 (152 bytes) name=preferredVectorWidthInt

/* cv::ocl::Device::preferredVectorWidthInt() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthInt(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 003531b0 to 004531b3 has its CatchHandler @ 0035365c */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1008,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 003531fc (152 bytes) name=preferredVectorWidthLong

/* cv::ocl::Device::preferredVectorWidthLong() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthLong(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1009,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 00353294 (152 bytes) name=preferredVectorWidthFloat

/* cv::ocl::Device::preferredVectorWidthFloat() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthFloat(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100a,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035332c (152 bytes) name=preferredVectorWidthDouble

/* cv::ocl::Device::preferredVectorWidthDouble() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthDouble(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
                    /* try { // try from 00353330 to 00453333 has its CatchHandler @ 00353654 */
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x100b,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
                    /* try { // try from 003533a4 to 004533a7 has its CatchHandler @ 00353638 */
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 003533c4 (152 bytes) name=preferredVectorWidthHalf

/* cv::ocl::Device::preferredVectorWidthHalf() const */

undefined4 __thiscall cv::ocl::Device::preferredVectorWidthHalf(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined4 local_c;
  long local_8;
  
  if (*(long *)this != 0) {
    local_c = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 00353418 to 0045341b has its CatchHandler @ 00353684 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1034,4,&local_c,&local_8), iVar1 == 0)) && (local_8 == 4))
    {
      return local_c;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035345c (152 bytes) name=printfBufferSize

/* cv::ocl::Device::printfBufferSize() const */

undefined8 __thiscall cv::ocl::Device::printfBufferSize(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
  if (*(long *)this != 0) {
    local_10 = 0;
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 003534ec to 004534ef has its CatchHandler @ 00353684 */
                    /* try { // try from 0035348c to 004534e3 has its CatchHandler @ 00352fa0 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1049,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 003534f4 (152 bytes) name=profilingTimerResolution

/* cv::ocl::Device::profilingTimerResolution() const */

undefined8 __thiscall cv::ocl::Device::profilingTimerResolution(Device *this)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 local_10;
  long local_8;
  
                    /* try { // try from 003534f8 to 004534fb has its CatchHandler @ 00353638 */
                    /* try { // try from 00353504 to 00453507 has its CatchHandler @ 00353654 */
  if (*(long *)this != 0) {
    local_10 = 0;
                    /* try { // try from 00353510 to 00453513 has its CatchHandler @ 0035365c */
    local_8 = 0;
    uVar2 = *(undefined8 *)(*(long *)this + 8);
                    /* try { // try from 0035351c to 0045351f has its CatchHandler @ 003535b8 */
    if ((((DAT_00532990 != (code *)0x0) ||
         (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) &&
        (iVar1 = (*DAT_00532990)(uVar2,0x1025,8,&local_10,&local_8), iVar1 == 0)) && (local_8 == 8))
    {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035358c (8 bytes) name=Context

/* cv::ocl::Context::Context() */

void __thiscall cv::ocl::Context::Context(Context *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00353594 (32 bytes) name=Context

/* cv::ocl::Context::Context(cv::ocl::Context const&) */

void __thiscall cv::ocl::Context::Context(Context *this,Context *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 003535b4 (16 bytes) name=ptr

/* cv::ocl::Context::ptr() const */

undefined8 __thiscall cv::ocl::Context::ptr(Context *this)

{
  undefined8 uVar1;
  
                    /* catch() { ... } // from try @ 00353094 with catch @ 003535b8
                       catch() { ... } // from try @ 003530e8 with catch @ 003535b8
                       catch() { ... } // from try @ 00353254 with catch @ 003535b8
                       catch() { ... } // from try @ 0035351c with catch @ 003535b8 */
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 003535c4 (28 bytes) name=ndevices

/* cv::ocl::Context::ndevices() const */

long __thiscall cv::ocl::Context::ndevices(Context *this)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)this;
  lVar2 = 0;
  if (lVar1 != 0) {
    lVar2 = *(long *)(lVar1 + 0x18) - *(long *)(lVar1 + 0x10) >> 3;
  }
  return lVar2;
}


==================================================================

### FUNC 003535e0 (176 bytes) name=device

/* cv::ocl::Context::device(unsigned long) const */

undefined * __thiscall cv::ocl::Context::device(Context *this,ulong param_1)

{
  int iVar1;
  long lVar2;
  
                    /* catch() { ... } // from try @ 003531b0 with catch @ 0035365c
                       catch() { ... } // from try @ 00353510 with catch @ 0035365c */
  if (((DAT_005320d8 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_005320d8), iVar1 != 0)) {
    Device::Device((Device *)&DAT_00532098);
    __cxa_guard_release(&DAT_005320d8);
                    /* catch() { ... } // from try @ 00352ffc with catch @ 00353684
                       catch() { ... } // from try @ 00353418 with catch @ 00353684
                       catch() { ... } // from try @ 003534ec with catch @ 00353684 */
    __cxa_atexit(PTR__Device_00501890,&DAT_00532098,&DAT_00502000);
  }
  lVar2 = *(long *)this;
  if ((lVar2 != 0) && (param_1 < (ulong)(*(long *)(lVar2 + 0x18) - *(long *)(lVar2 + 0x10) >> 3))) {
                    /* try { // try from 00353634 to 00453637 has its CatchHandler @ 00352fa0 */
                    /* catch() { ... } // from try @ 0035301c with catch @ 00353638
                       catch() { ... } // from try @ 003533a4 with catch @ 00353638
                       catch() { ... } // from try @ 003534f8 with catch @ 00353638 */
    return (undefined *)(*(long *)(lVar2 + 0x10) + param_1 * 8);
  }
                    /* catch() { ... } // from try @ 003530e0 with catch @ 00353640 */
                    /* catch() { ... } // from try @ 00353330 with catch @ 00353654
                       catch() { ... } // from try @ 00353504 with catch @ 00353654 */
  return &DAT_00532098;
}


==================================================================

### FUNC 003536a4 (8 bytes) name=useSVM

/* cv::ocl::Context::useSVM() const */

undefined8 cv::ocl::Context::useSVM(void)

{
  return 0;
}


==================================================================

### FUNC 003536ac (132 bytes) name=setUseSVM

/* cv::ocl::Context::setUseSVM(bool) */

void __thiscall cv::ocl::Context::setUseSVM(Context *this,bool param_1)

{
  char *pcVar1;
  undefined8 local_10;
  undefined8 local_8;
  
  if (!param_1) {
    return;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar1 = (char *)String::allocate((String *)&local_10,8);
                    /* try { // try from 003536e8 to 004536eb has its CatchHandler @ 00353698 */
                    /* try { // try from 00353704 to 00453707 has its CatchHandler @ 00353ca4 */
  *(undefined8 *)pcVar1 = s__enabled_0046d8d8._0_8_;
  error(-0xd7,(String *)&local_10,"void cv::ocl::Context::setUseSVM(bool)",
        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xb49);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00353744 (8 bytes) name=Queue

/* cv::ocl::Queue::Queue() */

void __thiscall cv::ocl::Queue::Queue(Queue *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 0035374c (32 bytes) name=Queue

/* cv::ocl::Queue::Queue(cv::ocl::Queue const&) */

void __thiscall cv::ocl::Queue::Queue(Queue *this,Queue *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 0035376c (264 bytes) name=operator=

/* cv::ocl::Queue::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Queue const&) */

Queue * __thiscall cv::ocl::Queue::operator=(Queue *this,Queue *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  long lVar6;
  undefined8 uVar7;
  
                    /* try { // try from 0035377c to 0045377f has its CatchHandler @ 00353c44 */
  piVar5 = *(int **)param_1;
  if (piVar5 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = *piVar5 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar6 = *(long *)(piVar4 + 2);
      if (lVar6 != 0) {
        if ((DAT_00532988 != (code *)0x0) ||
           (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 != (code *)0x0)) {
          (*DAT_00532988)(lVar6);
        }
        uVar7 = *(undefined8 *)(piVar4 + 2);
        if ((DAT_00532138 != (code *)0x0) ||
           (DAT_00532138 = (code *)FUN_0034d2bc("clReleaseCommandQueue"),
           DAT_00532138 != (code *)0x0)) {
          (*DAT_00532138)(uVar7);
        }
      }
      operator_delete(piVar4);
      *(int **)this = piVar5;
      return this;
    }
  }
  *(int **)this = piVar5;
                    /* try { // try from 003537c0 to 004537c3 has its CatchHandler @ 00353cdc */
                    /* try { // try from 003537c8 to 004539eb has its CatchHandler @ 00353c44 */
  return this;
}


==================================================================

### FUNC 00353874 (204 bytes) name=~Queue

/* cv::ocl::Queue::~Queue() */

void __thiscall cv::ocl::Queue::~Queue(Queue *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  undefined8 uVar6;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar4 + 2);
      if (lVar5 != 0) {
        if ((DAT_00532988 != (code *)0x0) ||
           (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 != (code *)0x0)) {
          (*DAT_00532988)(lVar5);
        }
        uVar6 = *(undefined8 *)(piVar4 + 2);
        if ((DAT_00532138 != (code *)0x0) ||
           (DAT_00532138 = (code *)FUN_0034d2bc("clReleaseCommandQueue"),
           DAT_00532138 != (code *)0x0)) {
          (*DAT_00532138)(uVar6);
        }
      }
      operator_delete(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00353940 (336 bytes) name=finish

/* cv::ocl::Queue::finish() */

void __thiscall cv::ocl::Queue::finish(Queue *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  long lVar5;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(long *)this == 0) {
    return;
  }
  lVar5 = *(long *)(*(long *)this + 8);
  if (lVar5 == 0) {
    return;
  }
  if (DAT_00532119 == '\0') {
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
    lVar5 = *(long *)(*(long *)this + 8);
  }
  if (DAT_005329c8 == '\0') {
    if ((DAT_00532988 == (code *)0x0) &&
       (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 == (code *)0x0)) {
      DAT_00532988 = (code *)0x0;
      return;
    }
    (*DAT_00532988)(lVar5);
    return;
  }
  if (((DAT_00532988 != (code *)0x0) ||
      (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 != (code *)0x0)) &&
     (iVar3 = (*DAT_00532988)(lVar5), iVar3 == 0)) {
    return;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar4 = (char *)String::allocate((String *)&local_10,0x18);
  uVar2 = s_clFinish_p_>handle_____0_0046d900._8_8_;
  uVar1 = s_clFinish_p_>handle_____0_0046d900._0_8_;
  *(undefined8 *)(pcVar4 + 0x10) = s_clFinish_p_>handle_____0_0046d900._16_8_;
  *(undefined8 *)pcVar4 = uVar1;
  *(undefined8 *)(pcVar4 + 8) = uVar2;
                    /* try { // try from 00353a5c to 00453a5f has its CatchHandler @ 00353cac */
  error(-0xd7,(String *)&local_10,"void cv::ocl::Queue::finish()",
        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xbe0);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00353aa4 (16 bytes) name=ptr

/* cv::ocl::Queue::ptr() const */

undefined8 __thiscall cv::ocl::Queue::ptr(Queue *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 00353ab4 (32 bytes) name=KernelArg

/* cv::ocl::KernelArg::KernelArg() */

void __thiscall cv::ocl::KernelArg::KernelArg(KernelArg *this)

{
  *(undefined4 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined4 *)(this + 0x20) = 1;
  *(undefined4 *)(this + 0x24) = 1;
                    /* try { // try from 00353ad0 to 00453ad3 has its CatchHandler @ 00353ca4 */
  return;
}


==================================================================

### FUNC 00353ad4 (28 bytes) name=KernelArg

/* cv::ocl::KernelArg::KernelArg(int, cv::UMat*, int, int, void const*, unsigned long) */

void __thiscall
cv::ocl::KernelArg::KernelArg
          (KernelArg *this,int param_1,UMat *param_2,int param_3,int param_4,void *param_5,
          ulong param_6)

{
  *(int *)this = param_1;
  *(UMat **)(this + 8) = param_2;
  *(void **)(this + 0x10) = param_5;
  *(ulong *)(this + 0x18) = param_6;
  *(int *)(this + 0x20) = param_3;
  *(int *)(this + 0x24) = param_4;
  return;
}


==================================================================

### FUNC 00353af0 (256 bytes) name=Constant

/* cv::ocl::KernelArg::Constant(cv::Mat const&) */

void __thiscall cv::ocl::KernelArg::Constant(KernelArg *this,Mat *param_1)

{
  long lVar1;
  int iVar2;
  undefined8 uVar3;
  char *pcVar4;
  long lVar5;
  long lVar6;
  ulong uVar7;
  KernelArg *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((*(uint *)this >> 0xe & 1) == 0) {
                    /* try { // try from 00353b9c to 00453b9f has its CatchHandler @ 00353cb4 */
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0x10);
    uVar3 = s_m_isContinuous___0046d920._8_8_;
    *(undefined8 *)pcVar4 = s_m_isContinuous___0046d920._0_8_;
    *(undefined8 *)(pcVar4 + 8) = uVar3;
    error(-0xd7,(String *)&local_10,
          "static cv::ocl::KernelArg cv::ocl::KernelArg::Constant(const cv::Mat&)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xc07);
    String::deallocate((String *)&local_10);
  }
  iVar2 = *(int *)(this + 4);
  if (iVar2 < 3) {
    lVar6 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
    if (iVar2 < 1) {
      uVar7 = 0;
      goto LAB_00353b44;
    }
  }
  else {
    lVar5 = 0;
                    /* try { // try from 00353b78 to 00453b7b has its CatchHandler @ 00353cac */
    lVar6 = 1;
    do {
      lVar1 = lVar5 * 4;
      lVar5 = lVar5 + 1;
                    /* try { // try from 00353b84 to 00453b87 has its CatchHandler @ 00353698 */
      lVar6 = lVar6 * *(int *)(*(long *)(this + 0x40) + lVar1);
    } while ((int)lVar5 < iVar2);
  }
  uVar7 = lVar6 * *(long *)(*(long *)(this + 0x48) + (long)iVar2 * 8 + -8);
LAB_00353b44:
                    /* try { // try from 00353b44 to 00453b47 has its CatchHandler @ 00353698 */
  KernelArg(in_x8,8,(UMat *)0x0,0,0,*(void **)(this + 0x10),uVar7);
                    /* try { // try from 00353b6c to 00453b6f has its CatchHandler @ 00353cb4 */
  return;
}


==================================================================

### FUNC 00353c04 (8 bytes) name=Kernel

/* cv::ocl::Kernel::Kernel() */

void __thiscall cv::ocl::Kernel::Kernel(Kernel *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00353c0c (32 bytes) name=Kernel

/* cv::ocl::Kernel::Kernel(cv::ocl::Kernel const&) */

void __thiscall cv::ocl::Kernel::Kernel(Kernel *this,Kernel *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
                    /* try { // try from 00353c0c to 00453c0f has its CatchHandler @ 00353c44 */
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00353c2c (16 bytes) name=ptr

/* cv::ocl::Kernel::ptr() const */

undefined8 __thiscall cv::ocl::Kernel::ptr(Kernel *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 00353c3c (32 bytes) name=empty

/* cv::ocl::Kernel::empty() const */

bool __thiscall cv::ocl::Kernel::empty(Kernel *this)

{
  long lVar1;
  
                    /* catch() { ... } // from try @ 0035377c with catch @ 00353c44
                       catch() { ... } // from try @ 003537c8 with catch @ 00353c44
                       catch() { ... } // from try @ 00353c0c with catch @ 00353c44 */
  lVar1 = ptr(this);
  return lVar1 == 0;
}


==================================================================

### FUNC 00353c5c (524 bytes) name=set

/* cv::ocl::Kernel::set(int, void const*, unsigned long) */

int __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,void *param_2,ulong param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined2 uVar4;
  int iVar5;
  char *pcVar6;
  long *plVar7;
  long lVar8;
  long *plVar9;
  long lVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar10 = *(long *)this;
  if (lVar10 == 0) {
    return -1;
  }
  lVar8 = *(long *)(lVar10 + 8);
  if (lVar8 == 0) {
    return -1;
  }
  if (param_1 < 0) {
    return param_1;
  }
  if (param_1 == 0) {
    plVar9 = (long *)(lVar10 + 0x18);
    do {
                    /* try { // try from 00353d48 to 00453d4b has its CatchHandler @ 00353cf8 */
      if (*plVar9 != 0) {
        piVar1 = (int *)(*plVar9 + 0x10);
        do {
          iVar5 = *piVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar3) {
            *piVar1 = iVar5 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
                    /* try { // try from 00353d64 to 00453d67 has its CatchHandler @ 00354304 */
        if (iVar5 == 1) {
          plVar7 = *(long **)(*plVar9 + 8);
          (**(code **)(*plVar7 + 0x20))(plVar7,*plVar9);
                    /* try { // try from 00353ddc to 00453ddf has its CatchHandler @ 003542a4 */
        }
        *plVar9 = 0;
      }
      plVar9 = plVar9 + 1;
    } while (plVar9 != (long *)(lVar10 + 0x98));
    lVar8 = *(long *)this;
    *(undefined4 *)(lVar10 + 0x98) = 0;
    *(undefined1 *)(lVar10 + 0xb0) = 0;
    lVar8 = *(long *)(lVar8 + 8);
    if (DAT_00532008 == (code *)0x0) goto LAB_00353d94;
LAB_00353ca8:
                    /* catch() { ... } // from try @ 00353a5c with catch @ 00353cac
                       catch() { ... } // from try @ 00353b78 with catch @ 00353cac */
                    /* catch() { ... } // from try @ 00353b6c with catch @ 00353cb4
                       catch() { ... } // from try @ 00353b9c with catch @ 00353cb4 */
    iVar5 = (*DAT_00532008)(lVar8,param_1,param_3,param_2);
  }
  else {
                    /* try { // try from 00353ca0 to 00453ca3 has its CatchHandler @ 00353698 */
                    /* catch() { ... } // from try @ 00353704 with catch @ 00353ca4
                       catch() { ... } // from try @ 00353ad0 with catch @ 00353ca4
                       catch() { ... } // from try @ 00353b90 with catch @ 00353ca4 */
    if (DAT_00532008 != (code *)0x0) goto LAB_00353ca8;
LAB_00353d94:
    DAT_00532008 = (code *)FUN_0034d2bc("clSetKernelArg");
    if (DAT_00532008 != (code *)0x0) goto LAB_00353ca8;
    iVar5 = -1000;
  }
  if (DAT_00532119 == '\0') {
                    /* catch() { ... } // from try @ 00353d48 with catch @ 00353cf8
                       catch() { ... } // from try @ 003541a4 with catch @ 00353cf8
                       catch() { ... } // from try @ 003541e4 with catch @ 00353cf8
                       catch() { ... } // from try @ 00354300 with catch @ 00353cf8 */
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
  }
  if (DAT_005329c8 == '\0') {
    if (iVar5 == 0) goto LAB_00353cdc;
  }
  else {
    if (iVar5 == 0) {
LAB_00353cdc:
      s_retval____0_0046d938[8] = (char)s_retval____0_0046d938._8_2_;
      s_retval____0_0046d938[9] = SUB21(s_retval____0_0046d938._8_2_,1);
      s_retval____0_0046d938[0] = (char)s_retval____0_0046d938._0_8_;
      s_retval____0_0046d938[1] = SUB81(s_retval____0_0046d938._0_8_,1);
      s_retval____0_0046d938[2] = SUB81(s_retval____0_0046d938._0_8_,2);
      s_retval____0_0046d938[3] = SUB81(s_retval____0_0046d938._0_8_,3);
      s_retval____0_0046d938[4] = SUB81(s_retval____0_0046d938._0_8_,4);
      s_retval____0_0046d938[5] = SUB81(s_retval____0_0046d938._0_8_,5);
      s_retval____0_0046d938[6] = SUB81(s_retval____0_0046d938._0_8_,6);
      s_retval____0_0046d938[7] = SUB81(s_retval____0_0046d938._0_8_,7);
                    /* catch() { ... } // from try @ 003537c0 with catch @ 00353cdc */
      return param_1 + 1;
    }
    local_10 = 0;
    local_8 = 0;
    pcVar6 = (char *)String::allocate((String *)&local_10,0xb);
    cVar2 = s_retval____0_0046d938[10];
    uVar4 = s_retval____0_0046d938._8_2_;
                    /* try { // try from 00353e20 to 00453e23 has its CatchHandler @ 0035433c */
                    /* try { // try from 00353e28 to 0045404b has its CatchHandler @ 003542a4 */
    *(undefined8 *)pcVar6 = s_retval____0_0046d938._0_8_;
    *(undefined2 *)(pcVar6 + 8) = uVar4;
    pcVar6[10] = cVar2;
    error(-0xd7,(String *)&local_10,"int cv::ocl::Kernel::set(int, const void*, size_t)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xcba);
    String::deallocate((String *)&local_10);
  }
  return -1;
}


==================================================================

### FUNC 00353e7c (8 bytes) name=Program

/* cv::ocl::Program::Program() */

void __thiscall cv::ocl::Program::Program(Program *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00353e84 (32 bytes) name=Program

/* cv::ocl::Program::Program(cv::ocl::Program const&) */

void __thiscall cv::ocl::Program::Program(Program *this,Program *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00353ea4 (232 bytes) name=operator=

/* cv::ocl::Program::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Program const&) */

Program * __thiscall cv::ocl::Program::operator=(Program *this,Program *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  long lVar6;
  
  piVar5 = *(int **)param_1;
  if (piVar5 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = *piVar5 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar6 = *(long *)(piVar4 + 8);
      if (lVar6 != 0) {
        if ((DAT_005329a8 != (code *)0x0) ||
           (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 != (code *)0x0)) {
          (*DAT_005329a8)(lVar6);
        }
        piVar4[8] = 0;
        piVar4[9] = 0;
      }
      String::deallocate((String *)(piVar4 + 4));
      ProgramSource::~ProgramSource((ProgramSource *)(piVar4 + 2));
      operator_delete(piVar4);
      *(int **)this = piVar5;
      return this;
    }
  }
  *(int **)this = piVar5;
  return this;
}


==================================================================

### FUNC 00353fb0 (172 bytes) name=~Program

/* cv::ocl::Program::~Program() */

void __thiscall cv::ocl::Program::~Program(Program *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar4 + 8);
      if (lVar5 != 0) {
        if ((DAT_005329a8 != (code *)0x0) ||
           (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 != (code *)0x0)) {
          (*DAT_005329a8)(lVar5);
        }
        piVar4[8] = 0;
        piVar4[9] = 0;
      }
      String::deallocate((String *)(piVar4 + 4));
      ProgramSource::~ProgramSource((ProgramSource *)(piVar4 + 2));
      operator_delete(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00354080 (16 bytes) name=ptr

/* cv::ocl::Program::ptr() const */

undefined8 __thiscall cv::ocl::Program::ptr(Program *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 0x20);
  }
  return uVar1;
}


==================================================================

### FUNC 00354090 (8 bytes) name=ProgramSource

/* cv::ocl::ProgramSource::ProgramSource() */

void __thiscall cv::ocl::ProgramSource::ProgramSource(ProgramSource *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00354098 (140 bytes) name=source

/* cv::ocl::Program::source() const */

undefined * __thiscall cv::ocl::Program::source(Program *this)

{
  int iVar1;
  
  if (((DAT_00532150 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00532150), iVar1 != 0)) {
    ProgramSource::ProgramSource((ProgramSource *)&DAT_00532100);
    __cxa_guard_release(&DAT_00532150);
    __cxa_atexit(PTR__ProgramSource_00501f68,&DAT_00532100,&DAT_00502000);
  }
                    /* try { // try from 003540bc to 004540bf has its CatchHandler @ 0035430c */
  if (*(long *)this != 0) {
    return (undefined *)(*(long *)this + 8);
  }
  return &DAT_00532100;
}


==================================================================

### FUNC 00354138 (608 bytes) name=ProgramSource

/* cv::ocl::ProgramSource::ProgramSource(char const*) */

void __thiscall cv::ocl::ProgramSource::ProgramSource(ProgramSource *this,char *param_1)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  undefined4 *puVar4;
  size_t __n;
  void *__dest;
  byte *pbVar5;
  byte *pbVar6;
  ulong uVar8;
  ulong uVar9;
  int iVar10;
  ulong uVar11;
  byte *local_10;
  long local_8;
  byte *pbVar7;
  
  puVar4 = operator_new(0x20);
  *(undefined8 *)(puVar4 + 2) = 0;
  local_10 = (byte *)0x0;
  *(undefined8 *)(puVar4 + 4) = 0;
  local_8 = 0;
  if (param_1 != (char *)0x0) {
    __n = strlen(param_1);
    __dest = (void *)String::allocate((String *)&local_10,__n);
    memcpy(__dest,param_1,__n);
  }
                    /* try { // try from 003541a4 to 004541a7 has its CatchHandler @ 00353cf8 */
  *puVar4 = 1;
  if ((String *)(puVar4 + 2) == (String *)&local_10) {
    pbVar5 = *(byte **)(puVar4 + 2);
    lVar3 = *(long *)(puVar4 + 4);
  }
  else {
    String::deallocate((String *)(puVar4 + 2));
    if (local_10 != (byte *)0x0) {
      pbVar5 = local_10 + -4;
      do {
                    /* try { // try from 003541cc to 004541cf has its CatchHandler @ 00354314 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(pbVar5,0x10);
        if (bVar2) {
          *(int *)pbVar5 = *(int *)pbVar5 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
                    /* try { // try from 003541d8 to 004541db has its CatchHandler @ 0035430c */
    *(byte **)(puVar4 + 2) = local_10;
    *(long *)(puVar4 + 4) = local_8;
                    /* try { // try from 003541e4 to 004541e7 has its CatchHandler @ 00353cf8 */
    pbVar5 = local_10;
    lVar3 = local_8;
  }
  if (pbVar5 == (byte *)0x0) {
    pbVar5 = &DAT_00472008;
  }
                    /* try { // try from 003541f0 to 004541f3 has its CatchHandler @ 00354304 */
  if (DAT_00532128 == '\0') {
                    /* try { // try from 003541fc to 004541ff has its CatchHandler @ 00354314 */
    uVar11 = 0;
    do {
      uVar8 = uVar11 >> 1;
      while( true ) {
        uVar9 = uVar8 & 1;
        if ((uVar8 & 1) != 0) {
          uVar9 = 0xc96c5795d7870f42;
        }
        uVar9 = uVar9 ^ uVar8 >> 1;
        uVar8 = uVar9 & 1;
        if ((uVar9 & 1) != 0) {
          uVar8 = 0xc96c5795d7870f42;
        }
        uVar8 = uVar8 ^ uVar9 >> 1;
        uVar9 = uVar8 & 1;
        if ((uVar8 & 1) != 0) {
          uVar9 = 0xc96c5795d7870f42;
        }
        uVar9 = uVar9 ^ uVar8 >> 1;
        uVar8 = uVar9 & 1;
        if ((uVar9 & 1) != 0) {
                    /* try { // try from 0035426c to 0045426f has its CatchHandler @ 003542a4 */
          uVar8 = 0xc96c5795d7870f42;
        }
        uVar8 = uVar8 ^ uVar9 >> 1;
        uVar9 = uVar8 & 1;
        if ((uVar8 & 1) != 0) {
          uVar9 = 0xc96c5795d7870f42;
        }
        uVar9 = uVar9 ^ uVar8 >> 1;
        uVar8 = uVar9 & 1;
        if ((uVar9 & 1) != 0) {
                    /* catch() { ... } // from try @ 00353ddc with catch @ 003542a4
                       catch() { ... } // from try @ 00353e28 with catch @ 003542a4
                       catch() { ... } // from try @ 0035426c with catch @ 003542a4 */
          uVar8 = 0xc96c5795d7870f42;
        }
        uVar8 = uVar8 ^ uVar9 >> 1;
        uVar9 = uVar8 & 1;
        if ((uVar8 & 1) != 0) {
          uVar9 = 0xc96c5795d7870f42;
        }
        iVar10 = (int)uVar11;
        (&DAT_00532160)[uVar11] = uVar9 ^ uVar8 >> 1;
        if (uVar11 == 0xff) {
                    /* catch() { ... } // from try @ 003541cc with catch @ 00354314
                       catch() { ... } // from try @ 003541fc with catch @ 00354314 */
          DAT_00532128 = '\x01';
          goto LAB_00354318;
        }
        uVar11 = uVar11 + 1;
        if ((iVar10 + 1U & 1) == 0) break;
                    /* try { // try from 00354300 to 00454303 has its CatchHandler @ 00353cf8 */
        uVar8 = uVar11 >> 1 ^ 0xc96c5795d7870f42;
                    /* catch() { ... } // from try @ 00353d64 with catch @ 00354304
                       catch() { ... } // from try @ 00354130 with catch @ 00354304
                       catch() { ... } // from try @ 003541f0 with catch @ 00354304 */
      }
    } while( true );
  }
LAB_00354318:
  if (lVar3 == 0) {
    uVar11 = 0;
  }
  else {
    uVar11 = 0xffffffffffffffff;
    pbVar7 = pbVar5;
    do {
      pbVar6 = pbVar7 + 1;
                    /* catch() { ... } // from try @ 00353e20 with catch @ 0035433c */
      uVar11 = (&DAT_00532160)[(int)(((uint)*pbVar7 ^ (uint)uVar11) & 0xff)] ^ uVar11 >> 8;
      pbVar7 = pbVar6;
    } while (pbVar6 != pbVar5 + lVar3);
    uVar11 = ~uVar11;
  }
  *(ulong *)(puVar4 + 6) = uVar11;
                    /* catch() { ... } // from try @ 003543a8 with catch @ 00354358
                       catch() { ... } // from try @ 00354804 with catch @ 00354358
                       catch() { ... } // from try @ 00354844 with catch @ 00354358
                       catch() { ... } // from try @ 00354960 with catch @ 00354358 */
  String::deallocate((String *)&local_10);
  *(undefined4 **)this = puVar4;
  return;
}


==================================================================

### FUNC 003543cc (624 bytes) name=ProgramSource

/* cv::ocl::ProgramSource::ProgramSource(cv::String const&) */

void __thiscall cv::ocl::ProgramSource::ProgramSource(ProgramSource *this,String *param_1)

{
  char cVar1;
  bool bVar2;
  undefined4 *puVar3;
  int *piVar4;
  long lVar5;
  byte *pbVar6;
  byte *pbVar7;
  ulong uVar9;
  ulong uVar10;
  int iVar11;
  ulong uVar12;
  byte *pbVar8;
  
  puVar3 = operator_new(0x20);
  *(undefined8 *)(puVar3 + 2) = 0;
  *(undefined8 *)(puVar3 + 4) = 0;
  *puVar3 = 1;
  if (param_1 == (String *)(puVar3 + 2)) {
    lVar5 = 0;
    pbVar6 = &DAT_00472008;
    if (DAT_00532128 != '\0') {
      *(undefined8 *)(puVar3 + 6) = 0;
      *(undefined4 **)this = puVar3;
      return;
    }
    goto LAB_00354458;
  }
  String::deallocate((String *)(puVar3 + 2));
  if (*(long *)param_1 == 0) {
    *(undefined8 *)(puVar3 + 2) = 0;
    lVar5 = *(long *)(param_1 + 8);
    *(long *)(puVar3 + 4) = lVar5;
LAB_0035460c:
    pbVar6 = &DAT_00472008;
  }
  else {
    piVar4 = (int *)(*(long *)param_1 + -4);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = *piVar4 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    pbVar6 = *(byte **)param_1;
    lVar5 = *(long *)(param_1 + 8);
    *(byte **)(puVar3 + 2) = pbVar6;
                    /* try { // try from 0035443c to 0045443f has its CatchHandler @ 00354904 */
    *(long *)(puVar3 + 4) = lVar5;
    if (pbVar6 == (byte *)0x0) goto LAB_0035460c;
  }
  if (DAT_00532128 != '\0') {
LAB_00354574:
    if (lVar5 != 0) {
      uVar12 = 0xffffffffffffffff;
      pbVar8 = pbVar6;
      do {
        pbVar7 = pbVar8 + 1;
        uVar12 = (&DAT_00532160)[(int)(((uint)*pbVar8 ^ (uint)uVar12) & 0xff)] ^ uVar12 >> 8;
        pbVar8 = pbVar7;
      } while (pbVar7 != pbVar6 + lVar5);
      *(ulong *)(puVar3 + 6) = ~uVar12;
      *(undefined4 **)this = puVar3;
      return;
    }
    *(undefined8 *)(puVar3 + 6) = 0;
    *(undefined4 **)this = puVar3;
    return;
  }
LAB_00354458:
  uVar12 = 0;
  do {
    uVar9 = uVar12 >> 1;
    while( true ) {
      uVar10 = uVar9 & 1;
      if ((uVar9 & 1) != 0) {
        uVar10 = 0xc96c5795d7870f42;
      }
                    /* try { // try from 00354480 to 00454483 has its CatchHandler @ 0035499c */
      uVar10 = uVar10 ^ uVar9 >> 1;
      uVar9 = uVar10 & 1;
                    /* try { // try from 00354488 to 004546ab has its CatchHandler @ 00354904 */
      if ((uVar10 & 1) != 0) {
        uVar9 = 0xc96c5795d7870f42;
      }
      uVar9 = uVar9 ^ uVar10 >> 1;
      uVar10 = uVar9 & 1;
      if ((uVar9 & 1) != 0) {
        uVar10 = 0xc96c5795d7870f42;
      }
      uVar10 = uVar10 ^ uVar9 >> 1;
      uVar9 = uVar10 & 1;
      if ((uVar10 & 1) != 0) {
        uVar9 = 0xc96c5795d7870f42;
      }
      uVar9 = uVar9 ^ uVar10 >> 1;
      uVar10 = uVar9 & 1;
      if ((uVar9 & 1) != 0) {
        uVar10 = 0xc96c5795d7870f42;
      }
      uVar10 = uVar10 ^ uVar9 >> 1;
      uVar9 = uVar10 & 1;
      if ((uVar10 & 1) != 0) {
        uVar9 = 0xc96c5795d7870f42;
      }
      uVar9 = uVar9 ^ uVar10 >> 1;
      uVar10 = uVar9 & 1;
      if ((uVar9 & 1) != 0) {
        uVar10 = 0xc96c5795d7870f42;
      }
      iVar11 = (int)uVar12;
      (&DAT_00532160)[uVar12] = uVar10 ^ uVar9 >> 1;
      if (uVar12 == 0xff) {
        DAT_00532128 = '\x01';
        goto LAB_00354574;
      }
      uVar12 = uVar12 + 1;
      if ((iVar11 + 1U & 1) == 0) break;
      uVar9 = uVar12 >> 1 ^ 0xc96c5795d7870f42;
    }
  } while( true );
}


==================================================================

### FUNC 00354658 (32 bytes) name=ProgramSource

/* cv::ocl::ProgramSource::ProgramSource(cv::ocl::ProgramSource const&) */

void __thiscall cv::ocl::ProgramSource::ProgramSource(ProgramSource *this,ProgramSource *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00354678 (152 bytes) name=operator=

/* cv::ocl::ProgramSource::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::ProgramSource const&) */

ProgramSource * __thiscall
cv::ocl::ProgramSource::operator=(ProgramSource *this,ProgramSource *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  
  piVar5 = *(int **)param_1;
  if (piVar5 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = *piVar5 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      String::deallocate((String *)(piVar4 + 2));
      operator_delete(piVar4);
      *(int **)this = piVar5;
      return this;
    }
  }
  *(int **)this = piVar5;
  return this;
}


==================================================================

### FUNC 00354710 (156 bytes) name=source

/* cv::ocl::ProgramSource::source() const */

undefined8 * __thiscall cv::ocl::ProgramSource::source(ProgramSource *this)

{
  int iVar1;
  ulong uVar2;
  
                    /* try { // try from 0035471c to 0045471f has its CatchHandler @ 0035496c */
  uVar2 = DAT_005329b8 & 1;
  if (((DAT_005329b8 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_005329b8), iVar1 != 0)) {
    DAT_00532050 = uVar2;
    DAT_00532058 = uVar2;
    __cxa_guard_release(&DAT_005329b8);
    __cxa_atexit(PTR__String_005018a0,&DAT_00532050,&DAT_00502000);
                    /* try { // try from 00354790 to 00454793 has its CatchHandler @ 00354964 */
  }
  if (*(long *)this != 0) {
    return (undefined8 *)(*(long *)this + 8);
  }
  return &DAT_00532050;
}


==================================================================

### FUNC 003547ac (16 bytes) name=hash

/* cv::ocl::ProgramSource::hash() const */

undefined8 __thiscall cv::ocl::ProgramSource::hash(ProgramSource *this)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 0x18);
  }
  return uVar1;
}


==================================================================

### FUNC 003547bc (8 bytes) name=PlatformInfo

/* cv::ocl::PlatformInfo::PlatformInfo() */

void __thiscall cv::ocl::PlatformInfo::PlatformInfo(PlatformInfo *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 003547c4 (1000 bytes) name=PlatformInfo

/* cv::ocl::PlatformInfo::PlatformInfo(void*) */

void __thiscall cv::ocl::PlatformInfo::PlatformInfo(PlatformInfo *this,void *param_1)

{
  ulong uVar1;
  void *__dest;
  uint uVar2;
  char cVar3;
  int iVar4;
  undefined4 *puVar5;
  void *pvVar6;
  ulong uVar7;
  ulong uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  long lVar11;
  void *__dest_00;
  size_t sVar12;
  uint local_24;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  puVar5 = operator_new(0x28);
  cVar3 = DAT_00532119;
                    /* try { // try from 00354804 to 00454807 has its CatchHandler @ 00354358 */
  *(undefined8 *)(puVar5 + 2) = 0;
  *(undefined8 *)(puVar5 + 4) = 0;
  *(undefined8 *)(puVar5 + 6) = 0;
  *puVar5 = 1;
  uVar9 = *(undefined8 *)param_1;
  *(undefined8 *)(puVar5 + 8) = uVar9;
  local_24 = 0;
  if (cVar3 == '\0') {
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
  }
                    /* try { // try from 00354838 to 0045483b has its CatchHandler @ 0035496c */
  if (DAT_005329c8 == '\0') {
                    /* catch() { ... } // from try @ 0035482c with catch @ 00354974
                       catch() { ... } // from try @ 0035485c with catch @ 00354974 */
    if ((DAT_00532120 != (code *)0x0) ||
       (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 != (code *)0x0)) {
      (*DAT_00532120)(uVar9,0xffffffff,0,0,&local_24);
    }
  }
  else {
                    /* try { // try from 00354844 to 00454847 has its CatchHandler @ 00354358 */
                    /* try { // try from 00354850 to 00454853 has its CatchHandler @ 00354964 */
                    /* try { // try from 0035485c to 0045485f has its CatchHandler @ 00354974 */
    if (((DAT_00532120 == (code *)0x0) &&
        (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 == (code *)0x0)) ||
       (iVar4 = (*DAT_00532120)(uVar9,0xffffffff,0,0,&local_24), iVar4 != 0)) {
      local_10 = 0;
      local_8 = 0;
      pvVar6 = (void *)String::allocate((String *)&local_10,0x57);
      memcpy(pvVar6,
             "clGetDeviceIDs(platform, (cl_device_type)Device::TYPE_ALL, 0, __null, &numDevices) == 0"
             ,0x57);
      error(-0xd7,(String *)&local_10,
            "void cv::ocl::getDevices(std::vector<_cl_device_id*>&, cl_platform_id)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1437);
      String::deallocate((String *)&local_10);
    }
  }
  if (local_24 == 0) {
                    /* catch() { ... } // from try @ 00354480 with catch @ 0035499c */
    *(undefined8 *)(puVar5 + 4) = *(undefined8 *)(puVar5 + 2);
    goto LAB_003549a4;
  }
  uVar7 = (ulong)local_24;
  pvVar6 = *(void **)(puVar5 + 4);
  lVar11 = (long)pvVar6 - *(long *)(puVar5 + 2);
                    /* try { // try from 003548cc to 004548cf has its CatchHandler @ 00354904 */
  uVar8 = lVar11 >> 3;
  if (uVar8 < uVar7) {
    uVar7 = uVar7 - uVar8;
    if (uVar7 != 0) {
      if ((ulong)(*(long *)(puVar5 + 6) - (long)pvVar6 >> 3) < uVar7) {
        if (0x1fffffffffffffff - uVar8 < uVar7) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f39c("vector::_M_fill_insert");
        }
        uVar1 = uVar7;
        if (uVar7 < uVar8) {
          uVar1 = uVar8;
        }
        uVar1 = uVar1 + uVar8;
        if ((uVar1 < uVar8) || (0x1fffffffffffffff < uVar1)) {
          uVar8 = 0xfffffffffffffff8;
LAB_00354b60:
          __dest_00 = operator_new(uVar8);
        }
        else {
          __dest_00 = (void *)0x0;
          uVar8 = 0;
          if (uVar1 != 0) {
            uVar8 = uVar1 * 8;
            goto LAB_00354b60;
          }
        }
                    /* try { // try from 00354b00 to 00454b03 has its CatchHandler @ 00355070 */
        memset((void *)((long)__dest_00 + lVar11),0,uVar7 * 8);
                    /* try { // try from 00354b08 to 00454b2f has its CatchHandler @ 00354fe8 */
        sVar12 = (long)pvVar6 - (long)*(void **)(puVar5 + 2);
        if ((long)sVar12 >> 3 != 0) {
          memmove(__dest_00,*(void **)(puVar5 + 2),sVar12);
        }
        __dest = (void *)((long)__dest_00 + sVar12 + uVar7 * 8);
        sVar12 = *(long *)(puVar5 + 4) - (long)pvVar6;
        if ((long)sVar12 >> 3 != 0) {
          memmove(__dest,pvVar6,sVar12);
        }
        if (*(void **)(puVar5 + 2) != (void *)0x0) {
          operator_delete(*(void **)(puVar5 + 2));
        }
        *(void **)(puVar5 + 2) = __dest_00;
        *(size_t *)(puVar5 + 4) = (long)__dest + sVar12;
        *(ulong *)(puVar5 + 6) = (long)__dest_00 + uVar8;
      }
      else {
        memset(pvVar6,0,uVar7 * 8);
        *(ulong *)(puVar5 + 4) = *(long *)(puVar5 + 4) + uVar7 * 8;
      }
    }
  }
  else if (uVar7 < uVar8) {
    *(ulong *)(puVar5 + 4) = *(long *)(puVar5 + 2) + uVar7 * 8;
  }
  cVar3 = FUN_00350224();
  uVar2 = local_24;
  if (cVar3 == '\0') {
                    /* try { // try from 003549f8 to 004549fb has its CatchHandler @ 003549b8 */
    uVar10 = *(undefined8 *)(puVar5 + 2);
                    /* try { // try from 00354aac to 00454aaf has its CatchHandler @ 00354fe8 */
    if ((DAT_00532120 != (code *)0x0) ||
       (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 != (code *)0x0)) {
                    /* try { // try from 00354a14 to 00454a17 has its CatchHandler @ 003550b4 */
      (*DAT_00532120)(uVar9,0xffffffff,uVar2,uVar10,&local_24);
    }
  }
  else {
    uVar10 = *(undefined8 *)(puVar5 + 2);
                    /* catch() { ... } // from try @ 0035443c with catch @ 00354904
                       catch() { ... } // from try @ 00354488 with catch @ 00354904
                       catch() { ... } // from try @ 003548cc with catch @ 00354904 */
    if (((DAT_00532120 == (code *)0x0) &&
        (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 == (code *)0x0)) ||
       (iVar4 = (*DAT_00532120)(uVar9,0xffffffff,uVar2,uVar10,&local_24), iVar4 != 0)) {
      local_20 = 0;
      local_18 = 0;
      pvVar6 = (void *)String::allocate((String *)&local_20,0x65);
      memcpy(pvVar6,
             "clGetDeviceIDs(platform, (cl_device_type)Device::TYPE_ALL, numDevices, &devices[0], &numDevices) == 0"
             ,0x65);
                    /* try { // try from 00354960 to 00454963 has its CatchHandler @ 00354358 */
                    /* catch() { ... } // from try @ 003543c4 with catch @ 00354964
                       catch() { ... } // from try @ 00354790 with catch @ 00354964
                       catch() { ... } // from try @ 00354850 with catch @ 00354964 */
      error(-0xd7,(String *)&local_20,
            "void cv::ocl::getDevices(std::vector<_cl_device_id*>&, cl_platform_id)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1441);
                    /* catch() { ... } // from try @ 0035471c with catch @ 0035496c
                       catch() { ... } // from try @ 00354838 with catch @ 0035496c */
      String::deallocate((String *)&local_20);
    }
  }
LAB_003549a4:
  *(undefined4 **)this = puVar5;
                    /* catch() { ... } // from try @ 003549f8 with catch @ 003549b8
                       catch() { ... } // from try @ 00354eb4 with catch @ 003549b8
                       catch() { ... } // from try @ 00355064 with catch @ 003549b8 */
  return;
}


==================================================================

### FUNC 00354bf4 (96 bytes) name=~PlatformInfo

/* cv::ocl::PlatformInfo::~PlatformInfo() */

void __thiscall cv::ocl::PlatformInfo::~PlatformInfo(PlatformInfo *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      if (*(void **)(piVar4 + 2) != (void *)0x0) {
        operator_delete(*(void **)(piVar4 + 2));
      }
      operator_delete(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00354c54 (36 bytes) name=PlatformInfo

/* cv::ocl::PlatformInfo::PlatformInfo(cv::ocl::PlatformInfo const&) */

void __thiscall cv::ocl::PlatformInfo::PlatformInfo(PlatformInfo *this,PlatformInfo *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  undefined8 uVar4;
  
  piVar3 = *(int **)param_1;
  uVar4 = 0;
  if (piVar3 != (int *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    uVar4 = *(undefined8 *)param_1;
  }
  *(undefined8 *)this = uVar4;
                    /* try { // try from 00354c74 to 00454ce7 has its CatchHandler @ 00354fe8 */
  return;
}


==================================================================

### FUNC 00354c78 (168 bytes) name=operator=

/* cv::ocl::PlatformInfo::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::PlatformInfo const&) */

PlatformInfo * __thiscall cv::ocl::PlatformInfo::operator=(PlatformInfo *this,PlatformInfo *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  
  piVar5 = *(int **)this;
  piVar4 = *(int **)param_1;
  if (piVar4 != piVar5) {
    if (piVar4 != (int *)0x0) {
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar3) {
          *piVar4 = *piVar4 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      piVar5 = *(int **)this;
    }
    if (piVar5 != (int *)0x0) {
      do {
        iVar1 = *piVar5;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar3) {
          *piVar5 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
        if (*(void **)(piVar5 + 2) != (void *)0x0) {
          operator_delete(*(void **)(piVar5 + 2));
        }
        operator_delete(piVar5);
      }
    }
    *(undefined8 *)this = *(undefined8 *)param_1;
  }
  return this;
}


==================================================================

### FUNC 00354d20 (28 bytes) name=deviceNumber

/* cv::ocl::PlatformInfo::deviceNumber() const */

ulong __thiscall cv::ocl::PlatformInfo::deviceNumber(PlatformInfo *this)

{
  long lVar1;
  ulong uVar2;
  
  lVar1 = *(long *)this;
  uVar2 = 0;
  if (lVar1 != 0) {
    uVar2 = (ulong)(*(long *)(lVar1 + 0x10) - *(long *)(lVar1 + 8)) >> 3;
  }
  return uVar2;
}


==================================================================

### FUNC 00354d3c (224 bytes) name=getDevice

/* cv::ocl::PlatformInfo::getDevice(cv::ocl::Device&, int) const */

void __thiscall cv::ocl::PlatformInfo::getDevice(PlatformInfo *this,Device *param_1,int param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  char *pcVar6;
  long lVar7;
  long lVar8;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00354d58 to 00454d5b has its CatchHandler @ 00355084 */
  lVar7 = *(long *)this;
  if ((lVar7 == 0) ||
     (lVar8 = *(long *)(lVar7 + 8), (int)(*(long *)(lVar7 + 0x10) - lVar8 >> 3) <= param_2)) {
    local_10 = 0;
    local_8 = 0;
    pcVar6 = (char *)String::allocate((String *)&local_10,0x1f);
    cVar5 = s_p____d_<_(int)p_>devices_size___0046da30[0x1e];
    uVar4 = s_p____d_<_(int)p_>devices_size___0046da30._28_2_;
    uVar3 = s_p____d_<_(int)p_>devices_size___0046da30._24_4_;
    uVar2 = s_p____d_<_(int)p_>devices_size___0046da30._8_8_;
    uVar1 = s_p____d_<_(int)p_>devices_size___0046da30._0_8_;
                    /* try { // try from 00354dcc to 00454dcf has its CatchHandler @ 00355068 */
    *(undefined8 *)(pcVar6 + 0x10) = s_p____d_<_(int)p_>devices_size___0046da30._16_8_;
    *(undefined4 *)(pcVar6 + 0x18) = uVar3;
    *(undefined2 *)(pcVar6 + 0x1c) = uVar4;
    pcVar6[0x1e] = cVar5;
    *(undefined8 *)pcVar6 = uVar1;
    *(undefined8 *)(pcVar6 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,
          "void cv::ocl::PlatformInfo::getDevice(cv::ocl::Device&, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1485);
    String::deallocate((String *)&local_10);
    if (*(long *)this == 0) {
      return;
    }
    lVar8 = *(long *)(*(long *)this + 8);
  }
  Device::set(param_1,*(void **)(lVar8 + (long)param_2 * 8));
  return;
}


==================================================================

### FUNC 00354e30 (72 bytes) name=name

/* cv::ocl::PlatformInfo::name() const */

void cv::ocl::PlatformInfo::name(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
                    /* try { // try from 00354e40 to 00454e43 has its CatchHandler @ 003550b4 */
  if (*in_x0 != 0) {
    FUN_0034d7d0(*(undefined8 *)(*in_x0 + 0x20),0x902);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00354e78 (72 bytes) name=vendor

/* cv::ocl::PlatformInfo::vendor() const */

void cv::ocl::PlatformInfo::vendor(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
  if (*in_x0 != 0) {
    FUN_0034d7d0(*(undefined8 *)(*in_x0 + 0x20),0x903);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
                    /* try { // try from 00354eb4 to 00454f0b has its CatchHandler @ 003549b8 */
  return;
}


==================================================================

### FUNC 00354ec0 (72 bytes) name=version

/* cv::ocl::PlatformInfo::version() const */

void cv::ocl::PlatformInfo::version(void)

{
  long *in_x0;
  undefined8 *in_x8;
  
  if (*in_x0 != 0) {
    FUN_0034d7d0(*(undefined8 *)(*in_x0 + 0x20),0x901);
    return;
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return;
}


==================================================================

### FUNC 00354f08 (56 bytes) name=typeToStr

/* cv::ocl::typeToStr(int) */

undefined * cv::ocl::typeToStr(int param_1)

{
  uint uVar1;
  
  uVar1 = ((uint)param_1 >> 3 & 0x1ff) + 1;
                    /* try { // try from 00354f14 to 00454f17 has its CatchHandler @ 003550b4 */
  if (uVar1 < 0x11) {
                    /* try { // try from 00354f20 to 00454f23 has its CatchHandler @ 00355068 */
                    /* try { // try from 00354f2c to 00454f2f has its CatchHandler @ 00355084 */
    return (&PTR_s_uchar_004f71e0)[(int)((param_1 & 7U) * 0x10 + uVar1 + -1)];
  }
                    /* try { // try from 00354f38 to 00454f3b has its CatchHandler @ 0035508c */
  return &DAT_0046da50;
}


==================================================================

### FUNC 00354f40 (56 bytes) name=memopTypeToStr

/* cv::ocl::memopTypeToStr(int) */

undefined * cv::ocl::memopTypeToStr(int param_1)

{
  uint uVar1;
  
                    /* try { // try from 00354f44 to 00454f47 has its CatchHandler @ 00354fe8 */
  uVar1 = ((uint)param_1 >> 3 & 0x1ff) + 1;
  if (uVar1 < 0x11) {
    return (&PTR_s_uchar_004f69e0)[(int)((param_1 & 7U) * 0x10 + uVar1 + -1)];
  }
  return &DAT_0046da50;
}


==================================================================

### FUNC 00354f78 (56 bytes) name=vecopTypeToStr

/* cv::ocl::vecopTypeToStr(int) */

undefined * cv::ocl::vecopTypeToStr(int param_1)

{
  uint uVar1;
  
  uVar1 = ((uint)param_1 >> 3 & 0x1ff) + 1;
  if (uVar1 < 0x11) {
    return (&PTR_s_uchar_004f6de0)[(int)((param_1 & 7U) * 0x10 + uVar1 + -1)];
  }
  return &DAT_0046da50;
}


==================================================================

### FUNC 00354fb0 (248 bytes) name=convertTypeStr

/* cv::ocl::convertTypeStr(int, int, int, char*) */

char * cv::ocl::convertTypeStr(int param_1,int param_2,int param_3,char *param_4)

{
  undefined8 uVar1;
  undefined *puVar2;
  
  if (param_1 != param_2) {
    uVar1 = typeToStr((param_2 & 7U) + (param_3 + -1) * 8);
                    /* catch() { ... } // from try @ 00354aac with catch @ 00354fe8
                       catch() { ... } // from try @ 00354b08 with catch @ 00354fe8
                       catch() { ... } // from try @ 00354c74 with catch @ 00354fe8
                       catch() { ... } // from try @ 00354f44 with catch @ 00354fe8 */
    if ((((param_2 < 5) && ((3 < param_1 || (param_2 != 4)))) && ((1 < param_1 || (param_2 != 3))))
       && ((param_1 != 0 || (param_2 != 2)))) {
      if (param_1 < 5) {
                    /* catch() { ... } // from try @ 00354d58 with catch @ 00355084
                       catch() { ... } // from try @ 00354f2c with catch @ 00355084 */
                    /* catch() { ... } // from try @ 00354bd0 with catch @ 0035508c
                       catch() { ... } // from try @ 00354f38 with catch @ 0035508c */
        sprintf(param_4,"convert_%s_sat",uVar1);
      }
      else {
        if (param_2 == 4) {
          puVar2 = &DAT_00472008;
        }
        else {
          puVar2 = &DAT_0046da58;
        }
        sprintf(param_4,"convert_%s%s_rte",uVar1,puVar2);
                    /* try { // try from 00355064 to 00455067 has its CatchHandler @ 003549b8 */
                    /* catch() { ... } // from try @ 00354a34 with catch @ 00355068
                       catch() { ... } // from try @ 00354dcc with catch @ 00355068
                       catch() { ... } // from try @ 00354f20 with catch @ 00355068 */
      }
    }
    else {
      sprintf(param_4,"convert_%s",uVar1);
    }
    return param_4;
  }
                    /* catch() { ... } // from try @ 00354b00 with catch @ 00355070 */
  return "noconvert";
}


==================================================================

### FUNC 003550a8 (856 bytes) name=kernelToStr

/* cv::ocl::kernelToStr(cv::_InputArray const&, int, char const*) */

void __thiscall cv::ocl::kernelToStr(ocl *this,_InputArray *param_1,int param_2,char *param_3)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  char *pcVar4;
  undefined *puVar5;
  int *piVar6;
  Mat **ppMVar7;
  uint uVar8;
  Mat *pMVar9;
  long local_c8;
  uint local_c0;
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  Mat **local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  puVar5 = (undefined *)(ulong)(uint)param_2;
                    /* catch() { ... } // from try @ 00354a14 with catch @ 003550b4
                       catch() { ... } // from try @ 00354e40 with catch @ 003550b4
                       catch() { ... } // from try @ 00354f14 with catch @ 003550b4 */
                    /* catch() { ... } // from try @ 00355108 with catch @ 003550c8
                       catch() { ... } // from try @ 003555c4 with catch @ 003550c8
                       catch() { ... } // from try @ 00355774 with catch @ 003550c8 */
  iVar3 = _InputArray::kind((_InputArray *)this);
  if (iVar3 == 0x10000) {
    pMVar9 = *(Mat **)(this + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar8 = *(uint *)pMVar9;
    local_50 = *(undefined8 *)(pMVar9 + 0x10);
    local_60 = *(Mat **)pMVar9;
    local_58 = *(Mat **)(pMVar9 + 8);
                    /* try { // try from 003552e0 to 004552e3 has its CatchHandler @ 0035579c */
    local_48 = *(undefined8 *)(pMVar9 + 0x18);
    local_40 = *(undefined8 *)(pMVar9 + 0x20);
    local_38 = *(undefined8 *)(pMVar9 + 0x28);
    local_30 = *(undefined8 *)(pMVar9 + 0x30);
    local_28 = *(long *)(pMVar9 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar6 = (int *)(local_28 + 0x14);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = *piVar6 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (*(int *)(pMVar9 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar9 + 0x48);
      local_8 = (*(undefined8 **)(pMVar9 + 0x48))[1];
    }
    else {
      local_60 = (Mat *)(ulong)uVar8;
      Mat::copySize((Mat *)&local_60,pMVar9);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  Mat::reshape((int)(Mat *)&local_60,1);
  if (local_28 != 0) {
                    /* try { // try from 00355108 to 0045510b has its CatchHandler @ 003550c8 */
    piVar6 = (int *)(local_28 + 0x14);
    do {
      iVar3 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar3 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
                    /* try { // try from 00355124 to 00455127 has its CatchHandler @ 003557c4 */
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
                    /* try { // try from 00355144 to 00455147 has its CatchHandler @ 00355778 */
    iVar3 = 0;
    ppMVar7 = local_20;
    do {
      *(undefined4 *)ppMVar7 = 0;
      iVar3 = iVar3 + 1;
      ppMVar7 = (Mat **)((long)ppMVar7 + 4);
    } while (iVar3 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  local_c0 = local_c0 & 7;
  uVar8 = (uint)param_1;
  if ((-1 < (int)uVar8) && (uVar8 != local_c0)) {
    local_50 = 0;
    local_60 = (Mat *)CONCAT44(local_60._4_4_,0x2010000);
    local_58 = (Mat *)&local_c0;
    Mat::convertTo((Mat *)&local_c0,(_OutputArray *)&local_60,uVar8,1.0,0.0);
    local_c0 = uVar8;
  }
                    /* try { // try from 003551bc to 004551bf has its CatchHandler @ 003556f8 */
  pMVar9 = (Mat *)(&PTR_FUN_004f75e0)[(int)local_c0];
  if (pMVar9 == (Mat *)0x0) {
    local_60 = pMVar9;
    local_58 = pMVar9;
    pcVar4 = (char *)String::allocate((String *)&local_60,9);
    cVar1 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
                    /* try { // try from 00355384 to 004553f7 has its CatchHandler @ 003556f8 */
    *(undefined8 *)pcVar4 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar4[8] = cVar1;
    error(-0xd7,(String *)&local_60,
          "cv::String cv::ocl::kernelToStr(cv::InputArray, int, const char*)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1527);
    String::deallocate((String *)&local_60);
  }
  if (puVar5 == (undefined *)0x0) {
    puVar5 = &UNK_0046daa8;
  }
  (*(code *)pMVar9)(&local_c8,(Mat *)&local_c0);
  format(" -D %s=%s",puVar5,local_c8);
  if ((undefined *)(local_c8 + -0x18) != PTR_DAT_00501f30) {
    piVar6 = (int *)(local_c8 + -8);
    do {
      iVar3 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar3 < 1) {
      operator_delete((undefined *)(local_c8 + -0x18));
    }
  }
  if (local_88 != 0) {
                    /* try { // try from 00355210 to 00455213 has its CatchHandler @ 00355780 */
    piVar6 = (int *)(local_88 + 0x14);
    do {
      iVar3 = *piVar6;
                    /* try { // try from 00355218 to 0045523f has its CatchHandler @ 003556f8 */
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    if (iVar3 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar3 = 0;
    do {
      *local_80 = 0;
      iVar3 = iVar3 + 1;
      local_80 = local_80 + 1;
    } while (iVar3 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 003554b4 (628 bytes) name=buildOptionsAddMatrixDescription

/* cv::ocl::buildOptionsAddMatrixDescription(cv::String&, cv::String const&, cv::_InputArray const&)
    */

void cv::ocl::buildOptionsAddMatrixDescription(String *param_1,String *param_2,_InputArray *param_3)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  ulong uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  int *piVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  int iVar11;
  uint uVar12;
  undefined1 *puVar13;
  void *local_20;
  size_t local_18;
  void *local_10;
  undefined8 local_8;
  
                    /* try { // try from 003554dc to 004554df has its CatchHandler @ 00355778 */
  if (*(long *)(param_1 + 8) == 0) {
    uVar5 = _InputArray::type(param_3,-1);
    puVar13 = *(undefined1 **)param_2;
    uVar4 = (uint)uVar5;
  }
  else {
                    /* try { // try from 0035563c to 0045563f has its CatchHandler @ 00355794 */
    local_10 = (void *)0x0;
    local_8 = 0;
    String::allocate((String *)&local_10,*(long *)(param_1 + 8) + 1);
                    /* try { // try from 00355648 to 0045564b has its CatchHandler @ 0035579c */
                    /* try { // try from 00355654 to 00455657 has its CatchHandler @ 003556f8 */
    memcpy(local_10,*(void **)param_1,*(size_t *)(param_1 + 8));
    *(undefined1 *)((long)local_10 + *(long *)(param_1 + 8)) = LAB_0046e338;
    String::deallocate(param_1);
    if (local_10 != (void *)0x0) {
      piVar8 = (int *)((long)local_10 + -4);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar3) {
          *piVar8 = *piVar8 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    *(void **)param_1 = local_10;
    *(undefined8 *)(param_1 + 8) = local_8;
    String::deallocate((String *)&local_10);
    uVar5 = _InputArray::type(param_3,-1);
    puVar13 = *(undefined1 **)param_2;
    uVar4 = (uint)uVar5;
  }
  uVar4 = uVar4 & 7;
  if (puVar13 == (undefined1 *)0x0) {
    puVar13 = &DAT_00472008;
    uVar6 = typeToStr((int)uVar5);
    puVar9 = *(undefined1 **)param_2;
  }
  else {
    uVar6 = typeToStr((int)uVar5);
    puVar9 = *(undefined1 **)param_2;
  }
  if (puVar9 == (undefined1 *)0x0) {
    puVar9 = &DAT_00472008;
  }
  uVar7 = typeToStr(uVar4);
  puVar10 = *(undefined1 **)param_2;
  if (puVar10 == (undefined1 *)0x0) {
                    /* catch() { ... } // from try @ 003551bc with catch @ 003556f8
                       catch() { ... } // from try @ 00355218 with catch @ 003556f8
                       catch() { ... } // from try @ 00355384 with catch @ 003556f8
                       catch() { ... } // from try @ 00355654 with catch @ 003556f8 */
    uVar1 = ((uint)((uVar5 & 0xffffffff) >> 3) & 0x1ff) + 1;
    puVar10 = &DAT_00472008;
    uVar12 = (uint)(0x88442211L >> (uVar4 << 2));
    iVar11 = uVar1 << (ulong)((uint)(0xfa50L >> (uVar4 << 1)) & 3);
  }
  else {
                    /* try { // try from 00355550 to 00455553 has its CatchHandler @ 003557c4 */
    uVar1 = ((uint)((uVar5 & 0xffffffff) >> 3) & 0x1ff) + 1;
    uVar12 = (uint)(0x88442211L >> (uVar4 << 2));
    iVar11 = uVar1 << (ulong)((uint)(0xfa50L >> (uVar4 << 1)) & 3);
  }
  format("-D %s_T=%s -D %s_T1=%s -D %s_CN=%d -D %s_TSIZE=%d -D %s_T1SIZE=%d -D %s_DEPTH=%d",
         (String *)&local_20,puVar13,uVar6,puVar9,uVar7,puVar10,(ulong)uVar1,puVar10,iVar11,puVar10,
         uVar12 & 0xf,puVar10,uVar4);
  local_10 = (void *)0x0;
  local_8 = 0;
  String::allocate((String *)&local_10,local_18 + *(long *)(param_1 + 8));
  memcpy(local_10,*(void **)param_1,*(size_t *)(param_1 + 8));
                    /* try { // try from 003555c4 to 0045561b has its CatchHandler @ 003550c8 */
  memcpy((void *)((long)local_10 + *(long *)(param_1 + 8)),local_20,local_18);
  String::deallocate(param_1);
  if (local_10 != (void *)0x0) {
    piVar8 = (int *)((long)local_10 + -4);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar3) {
        *piVar8 = *piVar8 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  *(void **)param_1 = local_10;
  *(undefined8 *)(param_1 + 8) = local_8;
  String::deallocate((String *)&local_10);
  String::deallocate((String *)&local_20);
                    /* try { // try from 00355624 to 00455627 has its CatchHandler @ 003557c4 */
                    /* try { // try from 00355630 to 00455633 has its CatchHandler @ 00355778 */
  return;
}


==================================================================

### FUNC 00355784 (8 bytes) name=Image2D

/* cv::ocl::Image2D::Image2D() */

void __thiscall cv::ocl::Image2D::Image2D(Image2D *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 0035578c (32 bytes) name=Image2D

/* cv::ocl::Image2D::Image2D(cv::ocl::Image2D const&) */

void __thiscall cv::ocl::Image2D::Image2D(Image2D *this,Image2D *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = *(int **)param_1;
  *(int **)this = piVar3;
                    /* catch() { ... } // from try @ 00355468 with catch @ 00355794
                       catch() { ... } // from try @ 0035563c with catch @ 00355794 */
  if (piVar3 != (int *)0x0) {
    do {
                    /* catch() { ... } // from try @ 003552e0 with catch @ 0035579c
                       catch() { ... } // from try @ 00355648 with catch @ 0035579c */
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 003557ac (228 bytes) name=operator=

/* cv::ocl::Image2D::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Image2D const&) */

Image2D * __thiscall cv::ocl::Image2D::operator=(Image2D *this,Image2D *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  int *piVar5;
  long lVar6;
  
  piVar5 = *(int **)this;
                    /* catch() { ... } // from try @ 00355124 with catch @ 003557c4
                       catch() { ... } // from try @ 00355550 with catch @ 003557c4
                       catch() { ... } // from try @ 00355624 with catch @ 003557c4 */
  piVar4 = *(int **)param_1;
  if (piVar4 != piVar5) {
    if (piVar4 != (int *)0x0) {
      do {
                    /* catch() { ... } // from try @ 00355828 with catch @ 003557d8
                       catch() { ... } // from try @ 00355c9c with catch @ 003557d8
                       catch() { ... } // from try @ 00355cdc with catch @ 003557d8
                       catch() { ... } // from try @ 00355e00 with catch @ 003557d8 */
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar3) {
          *piVar4 = *piVar4 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      piVar5 = *(int **)this;
    }
    if (piVar5 != (int *)0x0) {
      do {
        iVar1 = *piVar5;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar3) {
          *piVar5 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
                    /* try { // try from 00355828 to 0045582b has its CatchHandler @ 003557d8 */
      if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
        lVar6 = *(long *)(piVar5 + 2);
                    /* try { // try from 00355844 to 00455847 has its CatchHandler @ 00355e04 */
        if ((lVar6 != 0) &&
           ((DAT_00532980 != (code *)0x0 ||
            (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 != (code *)0x0)
            ))) {
          (*DAT_00532980)(lVar6);
        }
        operator_delete(piVar5);
      }
    }
    *(undefined8 *)this = *(undefined8 *)param_1;
  }
  return this;
}


==================================================================

### FUNC 00355890 (152 bytes) name=~Image2D

/* cv::ocl::Image2D::~Image2D() */

void __thiscall cv::ocl::Image2D::~Image2D(Image2D *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  
  piVar4 = *(int **)this;
  if (piVar4 != (int *)0x0) {
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar4 + 2);
                    /* try { // try from 00355910 to 00455913 has its CatchHandler @ 00355e3c */
                    /* try { // try from 00355918 to 00455b43 has its CatchHandler @ 00355da4 */
      if ((lVar5 != 0) &&
         ((DAT_00532980 != (code *)0x0 ||
          (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 != (code *)0x0)))
         ) {
        (*DAT_00532980)(lVar5);
      }
      operator_delete(piVar4);
      return;
    }
  }
                    /* try { // try from 003558bc to 004558bf has its CatchHandler @ 00355da4 */
  return;
}


==================================================================

### FUNC 00355928 (220 bytes) name=FUN_00355928

void FUN_00355928(int *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  int *piVar6;
  
  do {
    iVar1 = *param_1;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(param_1,0x10);
    if (bVar3) {
      *param_1 = iVar1 + -1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if ((iVar1 == 1) && ((byte)*PTR_DAT_00501f58 < (param_1 != (int *)0x0))) {
    lVar5 = *(long *)(param_1 + 2);
    if ((lVar5 != 0) &&
       ((DAT_005320f0 != (code *)0x0 ||
        (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
      (*DAT_005320f0)(lVar5);
    }
    piVar4 = *(int **)(param_1 + 0x28);
    while (piVar4 != param_1 + 0x28) {
      piVar6 = *(int **)piVar4;
      cv::ocl::Image2D::~Image2D((Image2D *)(piVar4 + 4));
      operator_delete(piVar4);
      piVar4 = piVar6;
    }
    operator_delete(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 00355a38 (212 bytes) name=~Kernel

/* cv::ocl::Kernel::~Kernel() */

void __thiscall cv::ocl::Kernel::~Kernel(Kernel *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  
  piVar7 = *(int **)this;
  if (piVar7 != (int *)0x0) {
    do {
      iVar1 = *piVar7;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar3) {
        *piVar7 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar7 + 2);
      if ((lVar5 != 0) &&
         ((DAT_005320f0 != (code *)0x0 ||
          (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
        (*DAT_005320f0)(lVar5);
      }
      piVar4 = *(int **)(piVar7 + 0x28);
      while (piVar4 != piVar7 + 0x28) {
        piVar6 = *(int **)piVar4;
        Image2D::~Image2D((Image2D *)(piVar4 + 4));
        operator_delete(piVar4);
        piVar4 = piVar6;
      }
      operator_delete(piVar7);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00355b40 (272 bytes) name=operator=

/* cv::ocl::Kernel::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Kernel const&) */

Kernel * __thiscall cv::ocl::Kernel::operator=(Kernel *this,Kernel *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  int *piVar8;
  
  piVar8 = *(int **)param_1;
  if (piVar8 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar8,0x10);
      if (bVar3) {
        *piVar8 = *piVar8 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar7 = *(int **)this;
  if (piVar7 != (int *)0x0) {
    do {
      iVar1 = *piVar7;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar3) {
        *piVar7 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 00355bb4 to 00455bb7 has its CatchHandler @ 00355e0c */
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar7 + 2);
      if ((lVar5 != 0) &&
         ((DAT_005320f0 != (code *)0x0 ||
          (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
        (*DAT_005320f0)(lVar5);
      }
      piVar4 = *(int **)(piVar7 + 0x28);
      while (piVar4 != piVar7 + 0x28) {
        piVar6 = *(int **)piVar4;
        Image2D::~Image2D((Image2D *)(piVar4 + 4));
        operator_delete(piVar4);
        piVar4 = piVar6;
      }
      operator_delete(piVar7);
      *(int **)this = piVar8;
                    /* try { // try from 00355c28 to 00455c2b has its CatchHandler @ 00355e04 */
      return this;
    }
  }
  *(int **)this = piVar8;
  return this;
}


==================================================================

### FUNC 00355c84 (572 bytes) name=create

/* cv::ocl::Kernel::create(char const*, cv::ocl::Program const&) */

undefined8 __thiscall cv::ocl::Kernel::create(Kernel *this,char *param_1,Program *param_2)

{
  int iVar1;
  bool bVar2;
  int *piVar3;
  undefined2 uVar4;
  char cVar5;
  undefined4 *puVar6;
  long lVar7;
  undefined8 uVar8;
  char *pcVar9;
  int *piVar10;
  int *piVar11;
  int local_14;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00355c9c to 00455c9f has its CatchHandler @ 003557d8 */
  piVar11 = *(int **)this;
  if (piVar11 != (int *)0x0) {
    do {
      iVar1 = *piVar11;
      cVar5 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar2) {
        *piVar11 = iVar1 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar7 = *(long *)(piVar11 + 2);
                    /* catch() { ... } // from try @ 003558bc with catch @ 00355da4
                       catch() { ... } // from try @ 00355918 with catch @ 00355da4
                       catch() { ... } // from try @ 00355d6c with catch @ 00355da4 */
                    /* try { // try from 00355ea8 to 00455eab has its CatchHandler @ 00355e58 */
      if ((lVar7 != 0) &&
         ((DAT_005320f0 != (code *)0x0 ||
          (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
        (*DAT_005320f0)(lVar7);
      }
      piVar3 = *(int **)(piVar11 + 0x28);
      while (piVar3 != piVar11 + 0x28) {
        piVar10 = *(int **)piVar3;
        Image2D::~Image2D((Image2D *)(piVar3 + 4));
        operator_delete(piVar3);
        piVar3 = piVar10;
      }
      operator_delete(piVar11);
    }
  }
                    /* try { // try from 00355cc4 to 00455cc7 has its CatchHandler @ 00355e14 */
  puVar6 = operator_new(0xb8);
                    /* try { // try from 00355cd0 to 00455cd3 has its CatchHandler @ 00355e0c */
                    /* try { // try from 00355cdc to 00455cdf has its CatchHandler @ 003557d8 */
  *puVar6 = 1;
  *(undefined8 *)(puVar6 + 4) = 0;
  puVar6[0x26] = 0;
                    /* try { // try from 00355ce8 to 00455ceb has its CatchHandler @ 00355e04 */
  *(undefined4 **)(puVar6 + 0x28) = puVar6 + 0x28;
  *(undefined4 **)(puVar6 + 0x2a) = puVar6 + 0x28;
  lVar7 = Program::ptr(param_2);
                    /* try { // try from 00355cf4 to 00455cf7 has its CatchHandler @ 00355e14 */
  local_14 = 0;
  if (lVar7 == 0) {
    uVar8 = 0;
  }
  else if ((DAT_00532110 == (code *)0x0) &&
          (DAT_00532110 = (code *)FUN_0034d2bc("clCreateKernel"), DAT_00532110 == (code *)0x0)) {
    local_14 = -1000;
    uVar8 = 0;
  }
  else {
    uVar8 = (*DAT_00532110)(lVar7,param_1,&local_14);
  }
  *(undefined8 *)(puVar6 + 2) = uVar8;
  cVar5 = FUN_00350224();
  if ((cVar5 != '\0') && (local_14 != 0)) {
                    /* try { // try from 00355e00 to 00455e03 has its CatchHandler @ 003557d8 */
    local_10 = 0;
                    /* catch() { ... } // from try @ 00355844 with catch @ 00355e04
                       catch() { ... } // from try @ 00355c28 with catch @ 00355e04
                       catch() { ... } // from try @ 00355ce8 with catch @ 00355e04 */
    local_8 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_10,0xb);
    cVar5 = s_retval____0_0046d938[10];
    uVar4 = s_retval____0_0046d938._8_2_;
                    /* catch() { ... } // from try @ 00355bb4 with catch @ 00355e0c
                       catch() { ... } // from try @ 00355cd0 with catch @ 00355e0c */
                    /* catch() { ... } // from try @ 00355cc4 with catch @ 00355e14
                       catch() { ... } // from try @ 00355cf4 with catch @ 00355e14 */
                    /* catch() { ... } // from try @ 00355910 with catch @ 00355e3c */
    *(undefined8 *)pcVar9 = s_retval____0_0046d938._0_8_;
    *(undefined2 *)(pcVar9 + 8) = uVar4;
    pcVar9[10] = cVar5;
    error(-0xd7,(String *)&local_10,
          "cv::ocl::Kernel::Impl::Impl(const char*, const cv::ocl::Program&)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xc16);
    String::deallocate((String *)&local_10);
                    /* catch() { ... } // from try @ 00355ea8 with catch @ 00355e58
                       catch() { ... } // from try @ 0035631c with catch @ 00355e58
                       catch() { ... } // from try @ 0035635c with catch @ 00355e58
                       catch() { ... } // from try @ 00356480 with catch @ 00355e58 */
  }
  *(undefined8 *)(puVar6 + 6) = 0;
  *(undefined8 *)(puVar6 + 8) = 0;
  *(undefined8 *)(puVar6 + 10) = 0;
  *(undefined8 *)(puVar6 + 0xc) = 0;
  *(undefined8 *)(puVar6 + 0xe) = 0;
  *(undefined8 *)(puVar6 + 0x10) = 0;
  *(undefined8 *)(puVar6 + 0x12) = 0;
  *(undefined8 *)(puVar6 + 0x14) = 0;
  *(undefined8 *)(puVar6 + 0x16) = 0;
  *(undefined8 *)(puVar6 + 0x18) = 0;
  *(undefined8 *)(puVar6 + 0x1a) = 0;
  *(undefined8 *)(puVar6 + 0x1c) = 0;
  *(undefined8 *)(puVar6 + 0x1e) = 0;
  *(undefined8 *)(puVar6 + 0x20) = 0;
  *(undefined8 *)(puVar6 + 0x22) = 0;
  *(undefined8 *)(puVar6 + 0x24) = 0;
  *(undefined1 *)(puVar6 + 0x2c) = 0;
  lVar7 = *(long *)(puVar6 + 2);
  *(undefined4 **)this = puVar6;
  if (lVar7 != 0) {
                    /* try { // try from 00355d6c to 00455d6f has its CatchHandler @ 00355da4 */
    return 1;
  }
  FUN_00355928(puVar6);
  *(undefined8 *)this = 0;
  return 0;
}


==================================================================

### FUNC 00355f4c (8 bytes) name=Kernel

/* cv::ocl::Kernel::Kernel(char const*, cv::ocl::Program const&) */

void __thiscall cv::ocl::Kernel::Kernel(Kernel *this,char *param_1,Program *param_2)

{
  *(undefined8 *)this = 0;
  create(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00355f54 (420 bytes) name=FUN_00355f54

void FUN_00355f54(undefined8 param_1,undefined8 param_2,int *param_3)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  int *piVar5;
  long *plVar6;
  long *plVar7;
  long lVar8;
  int *piVar9;
  
  plVar7 = (long *)(param_3 + 6);
  do {
    if (*plVar7 != 0) {
      piVar1 = (int *)(*plVar7 + 0x10);
      do {
        iVar2 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar2 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
                    /* try { // try from 00355f90 to 00455f93 has its CatchHandler @ 003564bc */
      if (iVar2 == 1) {
        plVar6 = *(long **)(*plVar7 + 8);
        (**(code **)(*plVar6 + 0x20))(plVar6,*plVar7);
      }
      *plVar7 = 0;
    }
                    /* try { // try from 00355f98 to 004561c3 has its CatchHandler @ 00356424 */
    plVar7 = plVar7 + 1;
  } while (plVar7 != (long *)(param_3 + 0x26));
  piVar1 = param_3 + 0x28;
  param_3[0x26] = 0;
  *(undefined1 *)(param_3 + 0x2c) = 0;
  piVar5 = *(int **)(param_3 + 0x28);
  while (piVar5 != piVar1) {
    piVar9 = *(int **)piVar5;
    cv::ocl::Image2D::~Image2D((Image2D *)(piVar5 + 4));
    operator_delete(piVar5);
    piVar5 = piVar9;
  }
  *(int **)(param_3 + 0x28) = piVar1;
  lVar8 = *(long *)(param_3 + 4);
  *(int **)(param_3 + 0x2a) = piVar1;
  if (lVar8 != 0) {
    if ((DAT_005329d0 != (code *)0x0) ||
       (DAT_005329d0 = (code *)FUN_0034d2bc("clReleaseEvent"), DAT_005329d0 != (code *)0x0)) {
      (*DAT_005329d0)(lVar8);
    }
    param_3[4] = 0;
    param_3[5] = 0;
  }
  do {
    iVar2 = *param_3;
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(param_3,0x10);
    if (bVar4) {
      *param_3 = iVar2 + -1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  if ((iVar2 == 1) && (*PTR_DAT_00501f58 == '\0')) {
    lVar8 = *(long *)(param_3 + 2);
    if ((lVar8 != 0) &&
       ((DAT_005320f0 != (code *)0x0 ||
        (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
      (*DAT_005320f0)(lVar8);
    }
    piVar5 = *(int **)(param_3 + 0x28);
    while (piVar1 != piVar5) {
      piVar9 = *(int **)piVar5;
      cv::ocl::Image2D::~Image2D((Image2D *)(piVar5 + 4));
      operator_delete(piVar5);
      piVar5 = piVar9;
    }
    operator_delete(param_3);
    return;
  }
  return;
}


==================================================================

### FUNC 00356130 (2956 bytes) name=set

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::ocl::Kernel::set(int, cv::ocl::KernelArg const&) */

int __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,KernelArg *param_2)

{
  uint uVar1;
  bool bVar2;
  int *piVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  undefined8 uVar13;
  char cVar14;
  int iVar15;
  undefined4 *puVar16;
  char *pcVar17;
  void *pvVar18;
  undefined8 *puVar19;
  uint uVar20;
  long lVar21;
  long *plVar22;
  int iVar23;
  long lVar24;
  int *piVar25;
  uint uVar26;
  long *plVar27;
  int *piVar28;
  long lVar29;
  UMat *this_00;
  int local_34;
  long local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  UMat *local_10;
  undefined4 local_8;
  int local_4;
  
  lVar29 = *(long *)this;
  if ((lVar29 == 0) || (*(long *)(lVar29 + 8) == 0)) {
    return -1;
  }
  if (param_1 < 0) {
    return param_1;
  }
  if (param_1 == 0) {
    plVar27 = (long *)(lVar29 + 0x18);
    do {
      if (*plVar27 != 0) {
        piVar28 = (int *)(*plVar27 + 0x10);
        do {
          iVar15 = *piVar28;
                    /* try { // try from 00356480 to 00456483 has its CatchHandler @ 00355e58 */
                    /* catch() { ... } // from try @ 00355ec4 with catch @ 00356484
                       catch() { ... } // from try @ 003562a8 with catch @ 00356484
                       catch() { ... } // from try @ 00356368 with catch @ 00356484 */
          cVar14 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar28,0x10);
          if (bVar2) {
            *piVar28 = iVar15 + -1;
            cVar14 = ExclusiveMonitorsStatus();
          }
        } while (cVar14 != '\0');
                    /* catch() { ... } // from try @ 00356234 with catch @ 0035648c
                       catch() { ... } // from try @ 00356350 with catch @ 0035648c */
        if (iVar15 == 1) {
          plVar22 = *(long **)(*plVar27 + 8);
                    /* catch() { ... } // from try @ 00355f90 with catch @ 003564bc */
          (**(code **)(*plVar22 + 0x20))(plVar22,*plVar27);
        }
                    /* catch() { ... } // from try @ 00356344 with catch @ 00356494
                       catch() { ... } // from try @ 00356374 with catch @ 00356494 */
        *plVar27 = 0;
      }
      plVar27 = plVar27 + 1;
    } while (plVar27 != (long *)(lVar29 + 0x98));
    *(undefined4 *)(lVar29 + 0x98) = 0;
    *(undefined1 *)(lVar29 + 0xb0) = 0;
  }
  this_00 = *(UMat **)(param_2 + 8);
  if (this_00 == (UMat *)0x0) {
                    /* try { // try from 00356794 to 004567b7 has its CatchHandler @ 003564d8 */
    cVar14 = FUN_00350224();
    if (cVar14 != '\0') {
      iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1,
                            *(undefined8 *)(param_2 + 0x18),*(undefined8 *)(param_2 + 0x10));
      if (iVar15 != 0) {
        local_18 = this_00;
        local_10 = this_00;
                    /* try { // try from 003567c0 to 004567c3 has its CatchHandler @ 003568ec */
                    /* try { // try from 003567cc to 004567cf has its CatchHandler @ 003568e4 */
        pcVar17 = (char *)String::allocate((String *)&local_18,0x3b);
        cVar14 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8[0x3a];
        uVar12 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._56_2_;
        uVar9 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._40_8_;
        uVar8 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._32_8_;
        uVar7 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._24_8_;
        uVar6 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._16_8_;
        uVar5 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._8_8_;
        uVar4 = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._0_8_;
        *(undefined8 *)(pcVar17 + 0x30) = s_clSetKernelArg_p_>handle___cl_ui_0046dec8._48_8_;
        *(undefined2 *)(pcVar17 + 0x38) = uVar12;
        pcVar17[0x3a] = cVar14;
        *(undefined8 *)pcVar17 = uVar4;
        *(undefined8 *)(pcVar17 + 8) = uVar5;
        *(undefined8 *)(pcVar17 + 0x10) = uVar6;
        *(undefined8 *)(pcVar17 + 0x18) = uVar7;
        *(undefined8 *)(pcVar17 + 0x20) = uVar8;
        *(undefined8 *)(pcVar17 + 0x28) = uVar9;
        error(-0xd7,(String *)&local_18,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd1c);
        String::deallocate((String *)&local_18);
      }
      return param_1 + 1;
    }
    FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1,*(undefined8 *)(param_2 + 0x18),
                 *(undefined8 *)(param_2 + 0x10));
    return param_1 + 1;
  }
  uVar1 = *(uint *)param_2;
  uVar26 = 0x2000000;
  uVar20 = uVar1 & 2;
  if ((uVar1 >> 1 & 1) != 0) {
    uVar26 = 0x3000000;
    uVar20 = 0x1000000;
  }
  if ((uVar1 & 4) == 0) {
    uVar26 = uVar20;
  }
  local_30 = UMat::handle(this_00,uVar26);
  if (local_30 == 0) {
    piVar28 = *(int **)this;
    do {
      iVar15 = *piVar28;
      cVar14 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar28,0x10);
      if (bVar2) {
        *piVar28 = iVar15 + -1;
        cVar14 = ExclusiveMonitorsStatus();
      }
    } while (cVar14 != '\0');
                    /* try { // try from 00356720 to 00456723 has its CatchHandler @ 003568ec */
    if ((iVar15 == 1) && ((byte)*PTR_DAT_00501f58 < (piVar28 != (int *)0x0))) {
      lVar29 = *(long *)(piVar28 + 2);
                    /* try { // try from 00356cb0 to 00456cb3 has its CatchHandler @ 00356e30 */
      if ((lVar29 != 0) &&
         ((DAT_005320f0 != (code *)0x0 ||
          (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
        (*DAT_005320f0)(lVar29);
      }
      piVar3 = *(int **)(piVar28 + 0x28);
      while (piVar3 != piVar28 + 0x28) {
        piVar25 = *(int **)piVar3;
        Image2D::~Image2D((Image2D *)(piVar3 + 4));
        operator_delete(piVar3);
        piVar3 = piVar25;
      }
      operator_delete(piVar28);
    }
    *(undefined8 *)this = 0;
    return -1;
  }
  cVar14 = FUN_00350224();
  if (cVar14 == '\0') {
    FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1,8,&local_30);
  }
  else {
    iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1,8,&local_30);
    if (iVar15 != 0) {
      local_18 = (UMat *)0x0;
      local_10 = (UMat *)0x0;
                    /* try { // try from 003565d4 to 004565d7 has its CatchHandler @ 00356868 */
      pcVar17 = (char *)String::allocate((String *)&local_18,0x39);
      uVar10 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._48_8_;
      uVar9 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._40_8_;
      uVar8 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._32_8_;
      uVar7 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._24_8_;
      uVar6 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._16_8_;
      uVar5 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._8_8_;
      uVar4 = s_clSetKernelArg_p_>handle___cl_ui_0046db48._0_8_;
                    /* try { // try from 003565dc to 0045663b has its CatchHandler @ 003568dc */
      pcVar17[0x38] = s_clSetKernelArg_p_>handle___cl_ui_0046db48[0x38];
      *(undefined8 *)(pcVar17 + 0x30) = uVar10;
      *(undefined8 *)pcVar17 = uVar4;
      *(undefined8 *)(pcVar17 + 8) = uVar5;
      *(undefined8 *)(pcVar17 + 0x10) = uVar6;
      *(undefined8 *)(pcVar17 + 0x18) = uVar7;
      *(undefined8 *)(pcVar17 + 0x20) = uVar8;
      *(undefined8 *)(pcVar17 + 0x28) = uVar9;
      error(-0xd7,(String *)&local_18,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xcf3);
      String::deallocate((String *)&local_18);
    }
  }
  if ((uVar1 & 0x10) == 0) {
    lVar29 = *(long *)(param_2 + 8);
    if (*(int *)(lVar29 + 4) < 3) {
                    /* catch() { ... } // from try @ 00356514 with catch @ 003564d8
                       catch() { ... } // from try @ 00356794 with catch @ 003564d8
                       catch() { ... } // from try @ 003568d8 with catch @ 003564d8 */
      local_28 = CONCAT44((int)*(undefined8 *)(lVar29 + 0x40),(int)*(undefined8 *)(lVar29 + 0x28));
      local_20 = *(undefined8 *)(lVar29 + 8);
      cVar14 = FUN_00350224();
      if (cVar14 == '\0') {
        FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 1,4,(long)&local_28 + 4);
      }
      else {
                    /* try { // try from 00356514 to 00456517 has its CatchHandler @ 003564d8 */
        iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 1,4,(long)&local_28 + 4);
        if (iVar15 != 0) {
          local_18 = (UMat *)0x0;
          local_10 = (UMat *)0x0;
          pvVar18 = (void *)String::allocate((String *)&local_18,0x4b);
                    /* try { // try from 00356ab0 to 00456ab3 has its CatchHandler @ 00356da8 */
          memcpy(pvVar18,
                 "clSetKernelArg(p->handle, (cl_uint)(i+1), sizeof(u2d.step), &u2d.step) == 0",0x4b)
          ;
          error(-0xd7,(String *)&local_18,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xcfd);
          String::deallocate((String *)&local_18);
        }
      }
      cVar14 = FUN_00350224();
      if (cVar14 == '\0') {
        FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 2,4,&local_28);
      }
      else {
                    /* try { // try from 00356530 to 00456533 has its CatchHandler @ 003568ec */
        iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 2,4,&local_28);
        if (iVar15 != 0) {
          local_18 = (UMat *)0x0;
          local_10 = (UMat *)0x0;
          pvVar18 = (void *)String::allocate((String *)&local_18,0x4f);
          memcpy(pvVar18,
                 "clSetKernelArg(p->handle, (cl_uint)(i+2), sizeof(u2d.offset), &u2d.offset) == 0",
                 0x4f);
          error(-0xd7,(String *)&local_18,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xcfe);
          String::deallocate((String *)&local_18);
        }
      }
      iVar15 = param_1 + 3;
      if ((*(uint *)param_2 >> 8 & 1) == 0) {
                    /* try { // try from 00356550 to 00456553 has its CatchHandler @ 003568e4 */
        local_34 = 0;
        if (*(int *)(param_2 + 0x24) != 0) {
          local_34 = (local_20._4_4_ * *(int *)(param_2 + 0x20)) / *(int *)(param_2 + 0x24);
        }
        cVar14 = FUN_00350224();
        if (cVar14 == '\0') {
          FUN_0034d580(*(undefined8 *)(*(long *)this + 8),iVar15,4,&local_20);
        }
        else {
                    /* try { // try from 00356580 to 00456583 has its CatchHandler @ 003568dc */
          iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),iVar15,4,&local_20);
          if (iVar15 != 0) {
            local_18 = (UMat *)0x0;
            local_10 = (UMat *)0x0;
            pvVar18 = (void *)String::allocate((String *)&local_18,0x47);
                    /* try { // try from 00356b98 to 00456b9b has its CatchHandler @ 00356e28 */
            memcpy(pvVar18,"clSetKernelArg(p->handle, (cl_uint)i, sizeof(u2d.rows), &u2d.rows) == 0"
                   ,0x47);
            error(-0xd7,(String *)&local_18,
                  "int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd04);
            String::deallocate((String *)&local_18);
          }
        }
        cVar14 = FUN_00350224();
        if (cVar14 == '\0') {
                    /* try { // try from 00356a24 to 00456a27 has its CatchHandler @ 00356e38 */
                    /* try { // try from 00356a2c to 00456a53 has its CatchHandler @ 00356e4c */
          iVar15 = param_1 + 5;
          FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 4,4,&local_34);
        }
        else {
          iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 4,4,&local_34);
          if (iVar15 == 0) {
            iVar15 = param_1 + 5;
          }
          else {
            local_18 = (UMat *)0x0;
            local_10 = (UMat *)0x0;
            pcVar17 = (char *)String::allocate((String *)&local_18,0x43);
            uVar12 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._64_2_;
            uVar11 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._56_8_;
            uVar10 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._48_8_;
            uVar9 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._40_8_;
            uVar8 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._32_8_;
            uVar7 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._24_8_;
            uVar6 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._16_8_;
            uVar5 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._8_8_;
            uVar4 = s_clSetKernelArg_p_>handle___cl_ui_0046dc70._0_8_;
                    /* try { // try from 003568d8 to 004568db has its CatchHandler @ 003564d8 */
                    /* catch() { ... } // from try @ 00356580 with catch @ 003568dc
                       catch() { ... } // from try @ 003565dc with catch @ 003568dc */
                    /* catch() { ... } // from try @ 00356550 with catch @ 003568e4
                       catch() { ... } // from try @ 003566ac with catch @ 003568e4
                       catch() { ... } // from try @ 003567cc with catch @ 003568e4 */
                    /* catch() { ... } // from try @ 00356530 with catch @ 003568ec
                       catch() { ... } // from try @ 00356720 with catch @ 003568ec
                       catch() { ... } // from try @ 003567c0 with catch @ 003568ec */
                    /* catch() { ... } // from try @ 0035693c with catch @ 003568f8
                       catch() { ... } // from try @ 00356c80 with catch @ 003568f8
                       catch() { ... } // from try @ 00356e24 with catch @ 003568f8 */
            pcVar17[0x42] = s_clSetKernelArg_p_>handle___cl_ui_0046dc70[0x42];
            *(undefined2 *)(pcVar17 + 0x40) = uVar12;
            *(undefined8 *)pcVar17 = uVar4;
            *(undefined8 *)(pcVar17 + 8) = uVar5;
            *(undefined8 *)(pcVar17 + 0x10) = uVar6;
            *(undefined8 *)(pcVar17 + 0x18) = uVar7;
            *(undefined8 *)(pcVar17 + 0x20) = uVar8;
            *(undefined8 *)(pcVar17 + 0x28) = uVar9;
            *(undefined8 *)(pcVar17 + 0x30) = uVar10;
            *(undefined8 *)(pcVar17 + 0x38) = uVar11;
            error(-0xd7,(String *)&local_18,
                  "int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd05);
            iVar15 = param_1 + 5;
            String::deallocate((String *)&local_18);
          }
        }
      }
    }
    else {
      puVar16 = *(undefined4 **)(lVar29 + 0x30);
                    /* try { // try from 003562a8 to 004562ab has its CatchHandler @ 00356484 */
      local_18 = (UMat *)CONCAT44((int)**(undefined8 **)(lVar29 + 0x38),
                                  (int)*(undefined8 *)(lVar29 + 0x28));
      local_10 = (UMat *)CONCAT44(*puVar16,(int)(*(undefined8 **)(lVar29 + 0x38))[1]);
      local_8 = puVar16[1];
      local_4 = puVar16[2];
      cVar14 = FUN_00350224();
      if (cVar14 == '\0') {
        FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 1,4,(long)&local_18 + 4);
      }
      else {
        iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 1,4,(long)&local_18 + 4);
        if (iVar15 != 0) {
          local_28 = 0;
          local_20 = 0;
          pvVar18 = (void *)String::allocate((String *)&local_28,0x55);
          memcpy(pvVar18,&DAT_0046dcb8,0x55);
                    /* try { // try from 003569d0 to 004569d3 has its CatchHandler @ 00356e4c */
          error(-0xd7,(String *)&local_28,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd0c);
          String::deallocate((String *)&local_28);
        }
      }
      cVar14 = FUN_00350224();
      if (cVar14 == '\0') {
                    /* try { // try from 003566ac to 004566af has its CatchHandler @ 003568e4 */
        FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 2,4,&local_10);
      }
      else {
                    /* try { // try from 0035631c to 0045631f has its CatchHandler @ 00355e58 */
        iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 2,4,&local_10);
        if (iVar15 != 0) {
                    /* try { // try from 0035693c to 0045693f has its CatchHandler @ 003568f8 */
          local_28 = 0;
          local_20 = 0;
          pvVar18 = (void *)String::allocate((String *)&local_28,0x4b);
                    /* try { // try from 00356958 to 0045695b has its CatchHandler @ 00356e30 */
          memcpy(pvVar18,
                 "clSetKernelArg(p->handle, (cl_uint)(i+2), sizeof(u3d.step), &u3d.step) == 0",0x4b)
          ;
          error(-0xd7,(String *)&local_28,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd0d);
          String::deallocate((String *)&local_28);
        }
      }
      cVar14 = FUN_00350224();
      if (cVar14 == '\0') {
        FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 3,4,&local_18);
      }
      else {
                    /* try { // try from 00356344 to 00456347 has its CatchHandler @ 00356494 */
        iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 3,4,&local_18);
        if (iVar15 != 0) {
          local_28 = 0;
          local_20 = 0;
          pvVar18 = (void *)String::allocate((String *)&local_28,0x4f);
          memcpy(pvVar18,
                 "clSetKernelArg(p->handle, (cl_uint)(i+3), sizeof(u3d.offset), &u3d.offset) == 0",
                 0x4f);
                    /* try { // try from 00356b24 to 00456b27 has its CatchHandler @ 00356e4c */
          error(-0xd7,(String *)&local_28,"int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd0e);
          String::deallocate((String *)&local_28);
        }
      }
                    /* try { // try from 00356350 to 00456353 has its CatchHandler @ 0035648c */
      iVar15 = param_1 + 4;
      if ((*(uint *)param_2 >> 8 & 1) == 0) {
                    /* try { // try from 0035635c to 0045635f has its CatchHandler @ 00355e58 */
                    /* try { // try from 00356368 to 0045636b has its CatchHandler @ 00356484 */
        local_34 = 0;
        if (*(int *)(param_2 + 0x24) != 0) {
          local_34 = (local_4 * *(int *)(param_2 + 0x20)) / *(int *)(param_2 + 0x24);
        }
        cVar14 = FUN_00350224();
                    /* try { // try from 00356374 to 00456377 has its CatchHandler @ 00356494 */
        if (cVar14 == '\0') {
          FUN_0034d580(*(undefined8 *)(*(long *)this + 8),iVar15,4,&local_8);
        }
        else {
          iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),iVar15,4,&local_8);
          if (iVar15 != 0) {
            local_28 = 0;
            local_20 = 0;
            puVar19 = (undefined8 *)String::allocate((String *)&local_28,0x49);
            uVar13 = _LAB_0046ddf0;
            uVar11 = _DAT_0046dde8;
            uVar10 = DAT_0046dde0;
            uVar9 = DAT_0046ddd8;
            uVar8 = DAT_0046ddd0;
            uVar7 = DAT_0046ddc8;
            uVar6 = DAT_0046ddc0;
            uVar5 = DAT_0046ddb8;
            uVar4 = DAT_0046ddb0;
                    /* try { // try from 00356c0c to 00456c0f has its CatchHandler @ 00356e30 */
            *(undefined1 *)(puVar19 + 9) = DAT_0046ddf8;
            puVar19[8] = uVar13;
            *puVar19 = uVar4;
            puVar19[1] = uVar5;
            puVar19[2] = uVar6;
            puVar19[3] = uVar7;
            puVar19[4] = uVar8;
            puVar19[5] = uVar9;
            puVar19[6] = uVar10;
            puVar19[7] = uVar11;
            error(-0xd7,(String *)&local_28,
                  "int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd13);
            String::deallocate((String *)&local_28);
          }
        }
        cVar14 = FUN_00350224();
        if (cVar14 == '\0') {
          FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 5,4,&local_8);
        }
        else {
          iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 5,4,&local_8);
          if (iVar15 != 0) {
            local_28 = 0;
            local_20 = 0;
            pvVar18 = (void *)String::allocate((String *)&local_28,0x4b);
            memcpy(pvVar18,
                   "clSetKernelArg(p->handle, (cl_uint)(i+1), sizeof(u3d.rows), &u3d.rows) == 0",
                   0x4b);
                    /* try { // try from 00356c80 to 00456ca7 has its CatchHandler @ 003568f8 */
            error(-0xd7,(String *)&local_28,
                  "int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd14);
            String::deallocate((String *)&local_28);
          }
        }
        cVar14 = FUN_00350224();
        if (cVar14 == '\0') {
          iVar15 = param_1 + 7;
          FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 6,4,&local_34);
        }
        else {
          iVar15 = FUN_0034d580(*(undefined8 *)(*(long *)this + 8),param_1 + 6,4,&local_34);
          if (iVar15 == 0) {
            iVar15 = param_1 + 7;
                    /* try { // try from 003563ec to 004563ef has its CatchHandler @ 00356424 */
          }
          else {
                    /* catch() { ... } // from try @ 003565d4 with catch @ 00356868 */
            local_28 = 0;
            local_20 = 0;
            pvVar18 = (void *)String::allocate((String *)&local_28,0x47);
            memcpy(pvVar18,"clSetKernelArg(p->handle, (cl_uint)(i+2), sizeof(u3d.cols), &cols) == 0"
                   ,0x47);
            error(-0xd7,(String *)&local_28,
                  "int cv::ocl::Kernel::set(int, const cv::ocl::KernelArg&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd15);
            iVar15 = param_1 + 7;
            String::deallocate((String *)&local_28);
          }
        }
      }
    }
  }
  else {
    iVar15 = param_1 + 1;
  }
  lVar24 = *(long *)this;
  lVar29 = *(long *)(param_2 + 8);
  iVar23 = *(int *)(lVar24 + 0x98);
  if (((0xf < iVar23) || (lVar21 = *(long *)(lVar29 + 0x20), lVar21 == 0)) ||
     (*(int *)(lVar21 + 0x10) < 1)) {
    local_18 = (UMat *)0x0;
    local_10 = (UMat *)0x0;
    pcVar17 = (char *)String::allocate((String *)&local_18,0x2a);
    uVar12 = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._40_2_;
    uVar7 = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._24_8_;
    uVar6 = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._16_8_;
    uVar5 = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._8_8_;
    uVar4 = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._0_8_;
                    /* catch() { ... } // from try @ 00355f3c with catch @ 00356424
                       catch() { ... } // from try @ 00355f98 with catch @ 00356424
                       catch() { ... } // from try @ 003563ec with catch @ 00356424 */
    *(undefined8 *)(pcVar17 + 0x20) = s_nu_<_MAX_ARRS_&&_m_u_&&_m_u_>ure_0046de98._32_8_;
    *(undefined2 *)(pcVar17 + 0x28) = uVar12;
    *(undefined8 *)pcVar17 = uVar4;
    *(undefined8 *)(pcVar17 + 8) = uVar5;
    *(undefined8 *)(pcVar17 + 0x10) = uVar6;
    *(undefined8 *)(pcVar17 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_18,"void cv::ocl::Kernel::Impl::addUMat(const cv::UMat&, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xc2b);
    String::deallocate((String *)&local_18);
    iVar23 = *(int *)(lVar24 + 0x98);
    lVar21 = *(long *)(lVar29 + 0x20);
  }
  *(long *)(lVar24 + (long)iVar23 * 8 + 0x18) = lVar21;
  piVar28 = (int *)(lVar21 + 0x10);
  do {
    cVar14 = '\x01';
    bVar2 = (bool)ExclusiveMonitorPass(piVar28,0x10);
    if (bVar2) {
      *piVar28 = *piVar28 + 1;
      cVar14 = ExclusiveMonitorsStatus();
    }
  } while (cVar14 != '\0');
  *(int *)(lVar24 + 0x98) = *(int *)(lVar24 + 0x98) + 1;
                    /* try { // try from 00356234 to 00456237 has its CatchHandler @ 0035648c */
  if (((uVar26 & 0x2000000) != 0) && ((*(uint *)(*(long *)(lVar29 + 0x20) + 0x30) >> 3 & 1) != 0)) {
    *(undefined1 *)(lVar24 + 0xb0) = 1;
  }
  return iVar15;
}


==================================================================

### FUNC 00356df4 (84 bytes) name=set

/* cv::ocl::Kernel::set(int, cv::UMat const&) */

void __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,UMat *param_2)

{
  KernelArg aKStack_28 [40];
  
                    /* try { // try from 00356e24 to 00456e27 has its CatchHandler @ 003568f8 */
  KernelArg::KernelArg(aKStack_28,6,param_2,0,0,(void *)0x0,0);
                    /* catch() { ... } // from try @ 00356b98 with catch @ 00356e28
                       catch() { ... } // from try @ 00356cbc with catch @ 00356e28 */
                    /* catch() { ... } // from try @ 00356958 with catch @ 00356e30
                       catch() { ... } // from try @ 00356c0c with catch @ 00356e30
                       catch() { ... } // from try @ 00356cb0 with catch @ 00356e30 */
  set(this,param_1,aKStack_28);
                    /* catch() { ... } // from try @ 00356a24 with catch @ 00356e38 */
  return;
}


==================================================================

### FUNC 00356e48 (16 bytes) name=ptr

/* cv::ocl::Image2D::ptr() const */

undefined8 __thiscall cv::ocl::Image2D::ptr(Image2D *this)

{
  undefined8 uVar1;
  
                    /* catch() { ... } // from try @ 003569d0 with catch @ 00356e4c
                       catch() { ... } // from try @ 00356a2c with catch @ 00356e4c
                       catch() { ... } // from try @ 00356b24 with catch @ 00356e4c
                       catch() { ... } // from try @ 00356cc8 with catch @ 00356e4c */
  uVar1 = 0;
  if (*(long *)this != 0) {
    uVar1 = *(undefined8 *)(*(long *)this + 8);
  }
  return uVar1;
}


==================================================================

### FUNC 00356e58 (124 bytes) name=set

/* cv::ocl::Kernel::set(int, cv::ocl::Image2D const&) */

void __thiscall cv::ocl::Kernel::set(Kernel *this,int param_1,Image2D *param_2)

{
  void *pvVar1;
  long lVar2;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 00356ea8 with catch @ 00356e60
                       catch() { ... } // from try @ 00357130 with catch @ 00356e60
                       catch() { ... } // from try @ 00357278 with catch @ 00356e60 */
  lVar2 = *(long *)this;
  pvVar1 = operator_new(0x18);
  Image2D::Image2D((Image2D *)((long)pvVar1 + 0x10),param_2);
  FUN_003dbfec(pvVar1,lVar2 + 0xa0);
  local_8 = Image2D::ptr(param_2);
                    /* try { // try from 00356ea8 to 00456eab has its CatchHandler @ 00356e60 */
  set(this,param_1,&local_8,8);
                    /* try { // try from 00356ec4 to 00456ec7 has its CatchHandler @ 0035728c */
  return;
}


==================================================================

### FUNC 00356ef4 (84 bytes) name=isPerformanceCheckBypassed

/* cv::ocl::internal::isPerformanceCheckBypassed() */

undefined1 cv::ocl::internal::isPerformanceCheckBypassed(void)

{
  if (DAT_00532078 != '\0') {
                    /* try { // try from 00356f14 to 00456f17 has its CatchHandler @ 0035727c */
    return DAT_00532118;
  }
  DAT_00532118 = FUN_00350010("OPENCV_OPENCL_PERF_CHECK_BYPASS");
  DAT_00532078 = 1;
  return DAT_00532118;
}


==================================================================

### FUNC 00356f48 (68 bytes) name=isCLBuffer

/* cv::ocl::internal::isCLBuffer(cv::UMat&) */

bool cv::ocl::internal::isCLBuffer(UMat *param_1)

{
  long lVar1;
  
  lVar1 = UMat::handle(param_1,0x3000000);
  if (lVar1 != 0) {
                    /* try { // try from 00356f68 to 00456f6b has its CatchHandler @ 00357208 */
                    /* try { // try from 00356f70 to 00456fd7 has its CatchHandler @ 0035727c */
    return (*(uint *)(*(long *)(param_1 + 0x20) + 0x48) & 0xffff0000) == 0;
  }
  return true;
}


==================================================================

### FUNC 00356f8c (836 bytes) name=FUN_00356f8c

void FUN_00356f8c(long *param_1,ulong param_2,undefined8 param_3)

{
  void *__dest;
  ulong uVar1;
  ulong uVar2;
  ulong uVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  long lVar9;
  size_t sVar10;
  void *__dest_00;
  
  puVar8 = (undefined8 *)param_1[1];
  lVar9 = (long)puVar8 - *param_1;
  uVar3 = lVar9 >> 3;
  if (param_2 <= uVar3) {
    if (uVar3 <= param_2) {
      return;
    }
    param_1[1] = *param_1 + param_2 * 8;
    return;
  }
  param_2 = param_2 - uVar3;
  if (param_2 == 0) {
    return;
  }
  if ((ulong)(param_1[2] - (long)puVar8 >> 3) < param_2) {
    if (0x1fffffffffffffff - uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f39c("vector::_M_fill_insert");
    }
    uVar2 = param_2;
    if (param_2 < uVar3) {
      uVar2 = uVar3;
    }
    uVar2 = uVar2 + uVar3;
    if ((uVar2 < uVar3) || (0x1fffffffffffffff < uVar2)) {
      uVar3 = 0xfffffffffffffff8;
LAB_00357260:
      __dest_00 = operator_new(uVar3);
    }
    else {
      uVar3 = 0;
      __dest_00 = (void *)0x0;
      if (uVar2 != 0) {
        uVar3 = uVar2 * 8;
        goto LAB_00357260;
      }
    }
    puVar4 = (undefined8 *)((long)__dest_00 + lVar9);
    uVar2 = (ulong)puVar4 >> 3 & 1;
                    /* try { // try from 00357130 to 00457157 has its CatchHandler @ 00356e60 */
    if (param_2 < uVar2) {
      uVar2 = param_2;
    }
    if (param_2 < 7) {
      *(undefined8 *)((long)__dest_00 + lVar9) = param_3;
      puVar5 = puVar4 + 1;
      uVar2 = param_2;
      if (1 < param_2) {
        puVar4[1] = param_3;
        puVar5 = puVar4 + 2;
        if (param_2 != 2) {
          puVar4[2] = param_3;
                    /* try { // try from 00357160 to 00457163 has its CatchHandler @ 0035728c */
          puVar5 = puVar4 + 3;
          if (param_2 != 3) {
                    /* try { // try from 0035716c to 0045716f has its CatchHandler @ 00357284 */
            puVar4[3] = param_3;
            puVar5 = puVar4 + 4;
            if (param_2 != 4) {
              puVar4[4] = param_3;
              puVar5 = puVar4 + 5;
              if (param_2 == 6) {
                puVar4[5] = param_3;
                puVar5 = puVar4 + 6;
              }
            }
          }
        }
      }
LAB_00357198:
      if (param_2 == uVar2) goto LAB_003571c0;
      uVar1 = param_2 - uVar2;
      puVar4 = puVar5;
      if (param_2 - uVar2 != 1) goto LAB_00357224;
    }
    else {
      if (uVar2 != 0) {
        puVar5 = puVar4 + 1;
        *puVar4 = param_3;
        uVar2 = 1;
        goto LAB_00357198;
      }
      uVar2 = 0;
      uVar1 = param_2;
LAB_00357224:
      uVar7 = (uVar1 - 2 >> 1) + 1;
      uVar6 = 0;
      puVar5 = (undefined8 *)((long)__dest_00 + lVar9 + uVar2 * 8);
      do {
        puVar5[1] = param_3;
        *puVar5 = param_3;
        uVar6 = uVar6 + 1;
        puVar5 = puVar5 + 2;
      } while (uVar6 < uVar7);
      puVar5 = puVar4 + uVar7 * 2;
      if (uVar1 == uVar7 * 2) goto LAB_003571c0;
    }
    *puVar5 = param_3;
LAB_003571c0:
    sVar10 = (long)puVar8 - *param_1;
    if ((long)sVar10 >> 3 != 0) {
                    /* catch() { ... } // from try @ 003572c8 with catch @ 00357294
                       catch() { ... } // from try @ 0035753c with catch @ 00357294
                       catch() { ... } // from try @ 00357660 with catch @ 00357294 */
      memmove(__dest_00,(void *)*param_1,sVar10);
    }
    __dest = (void *)((long)__dest_00 + sVar10 + param_2 * 8);
    sVar10 = param_1[1] - (long)puVar8;
    if ((long)sVar10 >> 3 != 0) {
                    /* catch() { ... } // from try @ 00356f14 with catch @ 0035727c
                       catch() { ... } // from try @ 00356f70 with catch @ 0035727c */
                    /* catch() { ... } // from try @ 00356ee4 with catch @ 00357284
                       catch() { ... } // from try @ 00357048 with catch @ 00357284
                       catch() { ... } // from try @ 0035716c with catch @ 00357284 */
      memmove(__dest,puVar8,sVar10);
                    /* catch() { ... } // from try @ 00356ec4 with catch @ 0035728c
                       catch() { ... } // from try @ 003570bc with catch @ 0035728c
                       catch() { ... } // from try @ 00357160 with catch @ 0035728c */
    }
    if ((void *)*param_1 != (void *)0x0) {
      operator_delete((void *)*param_1);
    }
    *param_1 = (long)__dest_00;
    param_1[1] = (long)__dest + sVar10;
    param_1[2] = (long)__dest_00 + uVar3;
    return;
                    /* catch() { ... } // from try @ 00356f68 with catch @ 00357208 */
  }
  uVar3 = (ulong)puVar8 >> 3 & 1;
  if (param_2 < uVar3) {
    uVar3 = param_2;
  }
  if (param_2 < 7) {
    puVar4 = puVar8 + 1;
    *puVar8 = param_3;
    uVar3 = param_2;
    if (1 < param_2) {
      puVar8[1] = param_3;
      puVar4 = puVar8 + 2;
      if (param_2 != 2) {
        puVar8[2] = param_3;
        puVar4 = puVar8 + 3;
        if (param_2 != 3) {
          puVar8[3] = param_3;
          puVar4 = puVar8 + 4;
          if (param_2 != 4) {
                    /* try { // try from 00357048 to 0045704b has its CatchHandler @ 00357284 */
            puVar8[4] = param_3;
            puVar4 = puVar8 + 5;
            if (param_2 == 6) {
              puVar8[5] = param_3;
              puVar4 = puVar8 + 6;
            }
          }
        }
      }
    }
LAB_00357064:
    if (param_2 == uVar3) goto LAB_0035708c;
    uVar2 = param_2 - uVar3;
    if (param_2 - uVar3 != 1) goto LAB_003570b8;
  }
  else {
    if (uVar3 != 0) {
      puVar4 = puVar8 + 1;
                    /* try { // try from 003572c8 to 004572cb has its CatchHandler @ 00357294 */
      *puVar8 = param_3;
      uVar3 = 1;
      goto LAB_00357064;
    }
    uVar3 = 0;
    puVar4 = puVar8;
    uVar2 = param_2;
LAB_003570b8:
    uVar6 = (uVar2 - 2 >> 1) + 1;
                    /* try { // try from 003570bc to 004570bf has its CatchHandler @ 0035728c */
    uVar1 = 0;
    puVar8 = puVar8 + uVar3;
    do {
      puVar8[1] = param_3;
      *puVar8 = param_3;
      uVar1 = uVar1 + 1;
      puVar8 = puVar8 + 2;
    } while (uVar1 < uVar6);
    puVar4 = puVar4 + uVar6 * 2;
    if (uVar2 == uVar6 * 2) goto LAB_0035708c;
  }
  *puVar4 = param_3;
LAB_0035708c:
  param_1[1] = param_1[1] + param_2 * 8;
  return;
}


==================================================================

### FUNC 003572d0 (96 bytes) name=~vector

/* std::vector<cv::ocl::Device, std::allocator<cv::ocl::Device> >::~vector() */

void __thiscall
std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::~vector
          (vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *this)

{
  Device *this_00;
  Device *pDVar1;
  
  this_00 = *(Device **)this;
                    /* try { // try from 003572e4 to 004572e7 has its CatchHandler @ 00357664 */
  pDVar1 = *(Device **)(this + 8);
  if (this_00 != pDVar1) {
    do {
      cv::ocl::Device::~Device(this_00);
      this_00 = this_00 + 8;
    } while (pDVar1 != this_00);
    pDVar1 = *(Device **)this;
  }
  if (pDVar1 != (Device *)0x0) {
                    /* try { // try from 00357314 to 00457317 has its CatchHandler @ 00357680 */
    operator_delete(pDVar1);
    return;
  }
  return;
}


==================================================================

### FUNC 0035734c (68 bytes) name=FUN_0035734c

void FUN_0035734c(size_t *param_1)

{
  if (param_1[4] != 0) {
                    /* try { // try from 00357360 to 00457363 has its CatchHandler @ 0035766c */
                    /* try { // try from 00357368 to 004573a3 has its CatchHandler @ 00357680 */
    memcpy((void *)param_1[1],(void *)param_1[3],*param_1);
    if ((void *)param_1[4] != (void *)0x0) {
      operator_delete__((void *)param_1[4]);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00357390 (612 bytes) name=_M_insert_aux

/* std::vector<std::string, std::allocator<std::string >
   >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string,
   std::allocator<std::string > > >, std::string const&) */

void __thiscall
std::vector<std::string,std::allocator<std::string>>::_M_insert_aux
          (vector<std::string,std::allocator<std::string>> *this,long *param_2,undefined8 param_3)

{
  void *pvVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  long lVar6;
  ulong uVar7;
  void *pvVar8;
  int *piVar9;
  undefined *puVar10;
  long lVar11;
  long *plVar12;
  long lVar13;
  long *plVar14;
  ulong uVar15;
  long local_8;
  
  lVar5 = *(long *)(this + 8);
  if (lVar5 != *(long *)(this + 0x10)) {
    lVar6 = 0;
    if (lVar5 != 0) {
      FUN_00414378(lVar5,lVar5 + -8);
      lVar6 = *(long *)(this + 8);
    }
                    /* try { // try from 003573e0 to 004573e3 has its CatchHandler @ 00357600 */
    *(long *)(this + 8) = lVar6 + 8;
    FUN_00414378(&local_8,param_3);
    lVar6 = *(long *)(this + 8);
    lVar5 = lVar6 + -0x10;
    lVar13 = lVar5 - (long)param_2;
    if (7 < lVar13) {
      do {
        lVar11 = lVar5 + -8;
        FUN_004144f8(lVar5,lVar11);
        lVar5 = lVar11;
      } while (lVar11 != (lVar6 - lVar13) + -0x10);
    }
    FUN_004144f8(param_2,&local_8);
    if ((undefined *)(local_8 + -0x18) == PTR_DAT_00501f30) {
      return;
    }
    piVar9 = (int *)(local_8 + -8);
    do {
      iVar2 = *piVar9;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar4) {
        *piVar9 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (0 < iVar2) {
      return;
    }
    operator_delete((undefined *)(local_8 + -0x18));
    return;
  }
  lVar6 = *(long *)this;
  uVar7 = lVar5 - lVar6 >> 3;
  if (uVar7 == 0) {
    lVar6 = (long)param_2 - lVar6;
    uVar15 = 1;
LAB_003575ac:
    uVar7 = uVar15 << 3;
  }
  else {
    uVar15 = uVar7 * 2;
    if ((uVar7 <= uVar15) && (uVar15 < 0x2000000000000000)) {
      lVar6 = (long)param_2 - lVar6;
      if (uVar15 == 0) {
        pvVar8 = (void *)0x0;
        goto LAB_003574c4;
      }
      goto LAB_003575ac;
    }
    lVar6 = (long)param_2 - lVar6;
    uVar7 = 0xfffffffffffffff8;
    uVar15 = 0x1fffffffffffffff;
  }
  pvVar8 = operator_new(uVar7);
LAB_003574c4:
                    /* try { // try from 003574c8 to 004574cb has its CatchHandler @ 00357664 */
  if ((long)pvVar8 + lVar6 != 0) {
    FUN_00414378((long)pvVar8 + lVar6,param_3);
  }
  pvVar1 = pvVar8;
  for (plVar14 = *(long **)this; param_2 != plVar14; plVar14 = plVar14 + 1) {
    if (pvVar1 != (void *)0x0) {
      FUN_00414378(pvVar1,plVar14);
    }
    pvVar1 = (void *)((long)pvVar1 + 8);
  }
  plVar14 = *(long **)(this + 8);
  lVar5 = (long)pvVar1 + 8;
  if (param_2 != plVar14) {
    do {
      if (lVar5 != 0) {
        FUN_00414378(lVar5,param_2);
      }
      param_2 = param_2 + 1;
      lVar5 = lVar5 + 8;
    } while (plVar14 != param_2);
                    /* try { // try from 0035753c to 0045755b has its CatchHandler @ 00357294 */
    plVar14 = *(long **)(this + 8);
  }
  plVar12 = *(long **)this;
  if (plVar12 != plVar14) {
    do {
                    /* try { // try from 00357564 to 00457567 has its CatchHandler @ 00357664 */
      puVar10 = (undefined *)(*plVar12 + -0x18);
                    /* try { // try from 00357570 to 00457573 has its CatchHandler @ 00357680 */
      if (puVar10 != PTR_DAT_00501f30) {
        piVar9 = (int *)(*plVar12 + -8);
        do {
          iVar2 = *piVar9;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar9,0x10);
          if (bVar4) {
            *piVar9 = iVar2 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar2 < 1) {
          operator_delete(puVar10);
        }
      }
      plVar12 = plVar12 + 1;
    } while (plVar14 != plVar12);
    plVar14 = *(long **)this;
  }
  if (plVar14 != (long *)0x0) {
    operator_delete(plVar14);
  }
  *(void **)this = pvVar8;
  *(long *)(this + 8) = lVar5;
  *(void **)(this + 0x10) = (void *)((long)pvVar8 + uVar15 * 8);
                    /* try { // try from 00357454 to 00457457 has its CatchHandler @ 00357680 */
  return;
}


==================================================================

### FUNC 00357728 (80 bytes) name=push_back

/* std::vector<std::string, std::allocator<std::string > >::push_back(std::string const&) */

void __thiscall
std::vector<std::string,std::allocator<std::string>>::push_back
          (vector<std::string,std::allocator<std::string>> *this,string *param_1)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)(this + 8);
  if (lVar1 == *(long *)(this + 0x10)) {
                    /* try { // try from 0035776c to 004577e7 has its CatchHandler @ 003579e0 */
    _M_insert_aux(this,lVar1,param_1);
  }
  else {
    lVar2 = 0;
    if (lVar1 != 0) {
      FUN_00414378(lVar1);
      lVar2 = *(long *)(this + 8);
    }
    *(long *)(this + 8) = lVar2 + 8;
  }
                    /* try { // try from 00357764 to 00457767 has its CatchHandler @ 003579b0 */
  return;
}


==================================================================

### FUNC 00357778 (808 bytes) name=FUN_00357778

void FUN_00357778(long *param_1,char param_2,
                 vector<std::string,std::allocator<std::string>> *param_3)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  long *plVar7;
  long *plVar8;
  undefined *puVar9;
  long *plVar10;
  undefined *local_170;
  undefined *local_168 [9];
  undefined1 auStack_120 [8];
  undefined4 local_118;
  long local_110;
  undefined *local_108 [4];
  uint local_e8;
  undefined8 local_30;
  undefined1 local_28;
  undefined1 local_27;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  plVar10 = *(long **)param_3;
  plVar8 = *(long **)(param_3 + 8);
  plVar7 = plVar10;
joined_r0x003577bc:
  if (plVar7 != plVar8) {
    do {
      puVar9 = (undefined *)(*plVar7 + -0x18);
      if (puVar9 != PTR_DAT_00501f30) {
        piVar6 = (int *)(*plVar7 + -8);
        do {
          iVar1 = *piVar6;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
          if (bVar3) {
            *piVar6 = iVar1 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
        if (iVar1 < 1) goto code_r0x00357800;
      }
      plVar7 = plVar7 + 1;
      if (plVar8 == plVar7) break;
    } while( true );
  }
  *(long **)(param_3 + 8) = plVar10;
  if (*(long *)(*param_1 + -0x18) != 0) {
                    /* try { // try from 00357858 to 0045785b has its CatchHandler @ 00357988 */
    FUN_003d347c(local_108);
    local_28 = 0;
    local_30 = 0;
    puVar9 = *(undefined **)(PTR_PTR_005019a8 + 8);
    local_108[0] = PTR_DAT_00501a40 + 0x10;
    local_27 = 0;
    local_20 = 0;
    local_18 = 0;
    local_10 = 0;
    local_8 = 0;
    local_168[0] = puVar9;
    *(undefined8 *)((long)local_168 + *(long *)(puVar9 + -0x18)) =
         *(undefined8 *)(PTR_PTR_005019a8 + 0x10);
    local_168[1] = (undefined *)0x0;
    FUN_003d2728((long)local_168 + *(long *)(puVar9 + -0x18));
    local_168[3] = (undefined *)0x0;
    local_168[4] = (undefined *)0x0;
                    /* try { // try from 003578cc to 004578eb has its CatchHandler @ 00357688 */
    local_168[0] = PTR_DAT_00501d70 + 0x18;
    local_168[5] = (undefined *)0x0;
    local_108[0] = PTR_DAT_00501d70 + 0x40;
    local_168[2] = PTR_DAT_00501bb0 + 0x10;
                    /* try { // try from 003578f4 to 004578f7 has its CatchHandler @ 00357988 */
    local_168[6] = (undefined *)0x0;
    local_168[7] = (undefined *)0x0;
    local_168[8] = (undefined *)0x0;
    FUN_003ef168(auStack_120);
    local_118 = 0;
    local_168[2] = PTR_DAT_00501cc0 + 0x10;
    FUN_004108cc(&local_110,*param_1,*(undefined8 *)(*param_1 + -0x18),&local_170);
    local_118 = 8;
    FUN_003f81cc(local_168 + 2,local_110,0,0);
    FUN_003d2728(local_108,local_168 + 2);
    local_170 = PTR_DAT_00501f30 + 0x18;
                    /* catch() { ... } // from try @ 003576e8 with catch @ 00357988
                       catch() { ... } // from try @ 00357858 with catch @ 00357988
                       catch() { ... } // from try @ 003578f4 with catch @ 00357988 */
    while ((local_e8 >> 1 & 1) == 0) {
      while( true ) {
        FUN_003db200(local_168,&local_170,(int)param_2);
        lVar5 = *(long *)(param_3 + 8);
        if (lVar5 != *(long *)(param_3 + 0x10)) break;
                    /* try { // try from 003579ac to 004579af has its CatchHandler @ 00357688 */
                    /* catch() { ... } // from try @ 00357764 with catch @ 003579b0 */
        std::vector<std::string,std::allocator<std::string>>::_M_insert_aux
                  (param_3,lVar5,&local_170);
        if ((local_e8 >> 1 & 1) != 0) goto LAB_003579c0;
      }
      lVar4 = 0;
      if (lVar5 != 0) {
        FUN_00414378(lVar5,&local_170);
        lVar4 = *(long *)(param_3 + 8);
      }
      *(long *)(param_3 + 8) = lVar4 + 8;
    }
LAB_003579c0:
    if (local_170 + -0x18 != PTR_DAT_00501f30) {
      piVar6 = (int *)(local_170 + -8);
      do {
        iVar1 = *piVar6;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar3) {
          *piVar6 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar1 < 1) {
        operator_delete(local_170 + -0x18);
      }
    }
                    /* catch() { ... } // from try @ 00357718 with catch @ 003579e0
                       catch() { ... } // from try @ 0035776c with catch @ 003579e0 */
                    /* catch() { ... } // from try @ 00357a28 with catch @ 003579e8
                       catch() { ... } // from try @ 00357d4c with catch @ 003579e8
                       catch() { ... } // from try @ 00357e3c with catch @ 003579e8 */
    local_168[0] = PTR_DAT_00501d70 + 0x18;
    local_168[2] = PTR_DAT_00501cc0 + 0x10;
    local_108[0] = PTR_DAT_00501d70 + 0x40;
    if ((undefined *)(local_110 + -0x18) != PTR_DAT_00501f30) {
      piVar6 = (int *)(local_110 + -8);
      do {
        iVar1 = *piVar6;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar3) {
          *piVar6 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar1 < 1) {
        operator_delete((undefined *)(local_110 + -0x18));
                    /* try { // try from 00357a74 to 00457a77 has its CatchHandler @ 00357ec0 */
      }
    }
    local_168[2] = PTR_DAT_00501bb0 + 0x10;
    FUN_003ed708(auStack_120);
                    /* try { // try from 00357a28 to 00457a2b has its CatchHandler @ 003579e8 */
    local_168[0] = *(undefined **)(PTR_PTR_005019a8 + 8);
    *(undefined8 *)((long)local_168 + *(long *)(local_168[0] + -0x18)) =
         *(undefined8 *)(PTR_PTR_005019a8 + 0x10);
    local_108[0] = PTR_DAT_00501a40 + 0x10;
                    /* try { // try from 00357a44 to 00457a47 has its CatchHandler @ 00357e18 */
    FUN_003d381c();
  }
  return;
code_r0x00357800:
  plVar7 = plVar7 + 1;
  operator_delete(puVar9);
  goto joined_r0x003577bc;
}


==================================================================

### FUNC 00357b6c (452 bytes) name=_M_erase

/* std::_Rb_tree<cv::ocl::Context::Impl::HashKey, std::pair<cv::ocl::Context::Impl::HashKey const,
   cv::ocl::Program>, std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey const,
   cv::ocl::Program> >, std::less<cv::ocl::Context::Impl::HashKey>,
   std::allocator<std::pair<cv::ocl::Context::Impl::HashKey const, cv::ocl::Program> >
   >::_M_erase(std::_Rb_tree_node<std::pair<cv::ocl::Context::Impl::HashKey const, cv::ocl::Program>
   >*) */

void __thiscall
std::
_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
::_M_erase(_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
           *this,_Rb_tree_node *param_1)

{
  void *pvVar1;
  void *pvVar2;
  void *pvVar3;
  void *pvVar4;
  void *pvVar5;
  void *pvVar6;
  void *pvVar7;
  void *pvVar8;
  _Rb_tree_node *p_Var9;
  void *pvVar10;
  
  while (param_1 != (_Rb_tree_node *)0x0) {
    pvVar1 = *(void **)(param_1 + 0x18);
    while (pvVar1 != (void *)0x0) {
      pvVar8 = *(void **)((long)pvVar1 + 0x18);
      while (pvVar8 != (void *)0x0) {
        pvVar7 = *(void **)((long)pvVar8 + 0x18);
        while (pvVar7 != (void *)0x0) {
          pvVar6 = *(void **)((long)pvVar7 + 0x18);
          while (pvVar6 != (void *)0x0) {
            pvVar5 = *(void **)((long)pvVar6 + 0x18);
            while (pvVar5 != (void *)0x0) {
              pvVar4 = *(void **)((long)pvVar5 + 0x18);
              while (pvVar4 != (void *)0x0) {
                pvVar3 = *(void **)((long)pvVar4 + 0x18);
                while (pvVar3 != (void *)0x0) {
                  pvVar2 = *(void **)((long)pvVar3 + 0x18);
                  while (pvVar2 != (void *)0x0) {
                    _M_erase(this,*(_Rb_tree_node **)((long)pvVar2 + 0x18));
                    pvVar10 = *(void **)((long)pvVar2 + 0x10);
                    /* try { // try from 00357bf0 to 00457bf3 has its CatchHandler @ 00357ea4 */
                    cv::ocl::Program::~Program((Program *)((long)pvVar2 + 0x30));
                    operator_delete(pvVar2);
                    pvVar2 = pvVar10;
                  }
                  pvVar2 = *(void **)((long)pvVar3 + 0x10);
                  cv::ocl::Program::~Program((Program *)((long)pvVar3 + 0x30));
                  operator_delete(pvVar3);
                  pvVar3 = pvVar2;
                }
                pvVar3 = *(void **)((long)pvVar4 + 0x10);
                cv::ocl::Program::~Program((Program *)((long)pvVar4 + 0x30));
                operator_delete(pvVar4);
                pvVar4 = pvVar3;
              }
              pvVar4 = *(void **)((long)pvVar5 + 0x10);
              cv::ocl::Program::~Program((Program *)((long)pvVar5 + 0x30));
              operator_delete(pvVar5);
              pvVar5 = pvVar4;
            }
            pvVar5 = *(void **)((long)pvVar6 + 0x10);
            cv::ocl::Program::~Program((Program *)((long)pvVar6 + 0x30));
            operator_delete(pvVar6);
            pvVar6 = pvVar5;
          }
          pvVar6 = *(void **)((long)pvVar7 + 0x10);
          cv::ocl::Program::~Program((Program *)((long)pvVar7 + 0x30));
          operator_delete(pvVar7);
          pvVar7 = pvVar6;
        }
        pvVar7 = *(void **)((long)pvVar8 + 0x10);
        cv::ocl::Program::~Program((Program *)((long)pvVar8 + 0x30));
        operator_delete(pvVar8);
        pvVar8 = pvVar7;
      }
      pvVar8 = *(void **)((long)pvVar1 + 0x10);
      cv::ocl::Program::~Program((Program *)((long)pvVar1 + 0x30));
                    /* try { // try from 00357cd8 to 00457cdb has its CatchHandler @ 00357e18 */
      operator_delete(pvVar1);
      pvVar1 = pvVar8;
    }
    p_Var9 = *(_Rb_tree_node **)(param_1 + 0x10);
    cv::ocl::Program::~Program((Program *)(param_1 + 0x30));
    operator_delete(param_1);
    param_1 = p_Var9;
  }
  return;
}


==================================================================

### FUNC 00357d30 (268 bytes) name=FUN_00357d30

void FUN_00357d30(long param_1)

{
  long lVar1;
  void *pvVar2;
  Device *pDVar3;
  Device *pDVar4;
  void *pvVar5;
  Device *pDVar6;
  
  lVar1 = *(long *)(param_1 + 8);
  if (lVar1 != 0) {
                    /* try { // try from 00357d4c to 00457d73 has its CatchHandler @ 003579e8 */
    if ((DAT_005329b0 != (code *)0x0) ||
       (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 != (code *)0x0)) {
      (*DAT_005329b0)(lVar1);
    }
    *(undefined8 *)(param_1 + 8) = 0;
  }
  pDVar6 = *(Device **)(param_1 + 0x18);
  pDVar4 = *(Device **)(param_1 + 0x10);
  for (pDVar3 = pDVar4; pDVar3 != pDVar6; pDVar3 = pDVar3 + 8) {
                    /* try { // try from 00357d7c to 00457d7f has its CatchHandler @ 00357e18 */
    cv::ocl::Device::~Device(pDVar3);
                    /* try { // try from 00357d88 to 00457d8b has its CatchHandler @ 00357ec0 */
  }
                    /* try { // try from 00357d94 to 00457d97 has its CatchHandler @ 00357ea4 */
  *(Device **)(param_1 + 0x18) = pDVar4;
  pvVar2 = *(void **)(param_1 + 0x38);
  if (*(void **)(param_1 + 0x38) != (void *)0x0) {
    do {
      std::
      _Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
      ::_M_erase((_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
                  *)(param_1 + 0x28),*(_Rb_tree_node **)((long)pvVar2 + 0x18));
      pvVar5 = *(void **)((long)pvVar2 + 0x10);
      cv::ocl::Program::~Program((Program *)((long)pvVar2 + 0x30));
      operator_delete(pvVar2);
      pvVar2 = pvVar5;
    } while (pvVar5 != (void *)0x0);
    pDVar4 = *(Device **)(param_1 + 0x18);
  }
  pDVar3 = *(Device **)(param_1 + 0x10);
  if (pDVar3 != pDVar4) {
    do {
      cv::ocl::Device::~Device(pDVar3);
      pDVar3 = pDVar3 + 8;
    } while (pDVar4 != pDVar3);
    pDVar4 = *(Device **)(param_1 + 0x10);
  }
  if (pDVar4 != (Device *)0x0) {
    operator_delete(pDVar4);
    return;
  }
                    /* catch() { ... } // from try @ 00357a44 with catch @ 00357e18
                       catch() { ... } // from try @ 00357cd8 with catch @ 00357e18
                       catch() { ... } // from try @ 00357d7c with catch @ 00357e18 */
  return;
}


==================================================================

### FUNC 00357ea8 (320 bytes) name=~Context

/* cv::ocl::Context::~Context() */

void __thiscall cv::ocl::Context::~Context(Context *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  void *pvVar5;
  Device *pDVar6;
  Device *pDVar7;
  void *pvVar8;
  Device *pDVar9;
  int *piVar10;
  
                    /* catch() { ... } // from try @ 00357ac0 with catch @ 00357eac */
  piVar10 = *(int **)this;
  if (piVar10 != (int *)0x0) {
    do {
                    /* catch() { ... } // from try @ 00357a74 with catch @ 00357ec0
                       catch() { ... } // from try @ 00357ac8 with catch @ 00357ec0
                       catch() { ... } // from try @ 00357c64 with catch @ 00357ec0
                       catch() { ... } // from try @ 00357d88 with catch @ 00357ec0 */
      iVar1 = *piVar10;
                    /* catch() { ... } // from try @ 00357f20 with catch @ 00357ec8
                       catch() { ... } // from try @ 00358160 with catch @ 00357ec8
                       catch() { ... } // from try @ 00358234 with catch @ 00357ec8 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar4 = *(long *)(piVar10 + 2);
      if (lVar4 != 0) {
        if ((DAT_005329b0 != (code *)0x0) ||
           (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 != (code *)0x0)) {
          (*DAT_005329b0)(lVar4);
        }
        piVar10[2] = 0;
        piVar10[3] = 0;
      }
      pDVar9 = *(Device **)(piVar10 + 6);
                    /* try { // try from 00357f20 to 00457f23 has its CatchHandler @ 00357ec8 */
      pDVar7 = *(Device **)(piVar10 + 4);
      for (pDVar6 = pDVar7; pDVar6 != pDVar9; pDVar6 = pDVar6 + 8) {
        Device::~Device(pDVar6);
                    /* try { // try from 00357f3c to 00457f3f has its CatchHandler @ 00358210 */
      }
      *(Device **)(piVar10 + 6) = pDVar7;
      pvVar5 = *(void **)(piVar10 + 0xe);
      if (*(void **)(piVar10 + 0xe) != (void *)0x0) {
        do {
          std::
          _Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
          ::_M_erase((_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
                      *)(piVar10 + 10),*(_Rb_tree_node **)((long)pvVar5 + 0x18));
                    /* try { // try from 00357f6c to 00457f6f has its CatchHandler @ 00358268 */
          pvVar8 = *(void **)((long)pvVar5 + 0x10);
          Program::~Program((Program *)((long)pvVar5 + 0x30));
          operator_delete(pvVar5);
          pvVar5 = pvVar8;
        } while (pvVar8 != (void *)0x0);
        pDVar7 = *(Device **)(piVar10 + 6);
      }
      pDVar6 = *(Device **)(piVar10 + 4);
      if (pDVar6 != pDVar7) {
        do {
          Device::~Device(pDVar6);
          pDVar6 = pDVar6 + 8;
        } while (pDVar6 != pDVar7);
        pDVar7 = *(Device **)(piVar10 + 4);
      }
      if (pDVar7 != (Device *)0x0) {
        operator_delete(pDVar7);
      }
                    /* try { // try from 00357fb8 to 00457fbb has its CatchHandler @ 00358238 */
                    /* try { // try from 00357fc0 to 0045807b has its CatchHandler @ 00358268 */
      operator_delete(piVar10);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00358054 (368 bytes) name=create

/* WARNING: Removing unreachable block (ram,0x003580ec) */
/* cv::ocl::Context::create() */

undefined8 __thiscall cv::ocl::Context::create(Context *this)

{
  int iVar1;
  bool bVar2;
  char cVar3;
  undefined4 *puVar4;
  int *piVar5;
  void *pvVar6;
  Device *pDVar7;
  void *pvVar8;
  Device *this_00;
  
  cVar3 = haveOpenCL();
  if (cVar3 == '\0') {
    return 0;
  }
  piVar5 = *(int **)this;
  if (piVar5 != (int *)0x0) {
    do {
      iVar1 = *piVar5;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar2) {
        *piVar5 = iVar1 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      FUN_00357d30(piVar5);
      operator_delete(piVar5);
    }
  }
  puVar4 = operator_new(0x58);
  *(undefined8 *)(puVar4 + 4) = 0;
  *(undefined8 *)(puVar4 + 6) = 0;
  *(undefined8 *)(puVar4 + 8) = 0;
  *(undefined4 **)(puVar4 + 0x10) = puVar4 + 0xc;
  *(undefined4 **)(puVar4 + 0x12) = puVar4 + 0xc;
  puVar4[0xc] = 0;
  *(undefined8 *)(puVar4 + 0xe) = 0;
  *(undefined8 *)(puVar4 + 0x14) = 0;
  *puVar4 = 1;
  *(undefined8 *)(puVar4 + 2) = 0;
  *(undefined4 **)this = puVar4;
  *(undefined8 *)(puVar4 + 6) = 0;
  pvVar6 = *(void **)(puVar4 + 0xe);
  if (*(void **)(puVar4 + 0xe) == (void *)0x0) {
    this_00 = *(Device **)(puVar4 + 4);
    pDVar7 = (Device *)0x0;
    if (this_00 == (Device *)0x0) goto LAB_0035816c;
LAB_00358148:
    do {
      Device::~Device(this_00);
      this_00 = this_00 + 8;
    } while (this_00 != pDVar7);
    pDVar7 = *(Device **)(puVar4 + 4);
  }
  else {
    do {
      std::
      _Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
      ::_M_erase((_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
                  *)(puVar4 + 10),*(_Rb_tree_node **)((long)pvVar6 + 0x18));
      pvVar8 = *(void **)((long)pvVar6 + 0x10);
      Program::~Program((Program *)((long)pvVar6 + 0x30));
      operator_delete(pvVar6);
      pvVar6 = pvVar8;
    } while (pvVar8 != (void *)0x0);
    pDVar7 = *(Device **)(puVar4 + 6);
    this_00 = *(Device **)(puVar4 + 4);
    if (this_00 != pDVar7) goto LAB_00358148;
  }
                    /* try { // try from 00358160 to 0045817f has its CatchHandler @ 00357ec8 */
  if (pDVar7 != (Device *)0x0) {
    operator_delete(pDVar7);
  }
LAB_0035816c:
  operator_delete(puVar4);
  *(undefined8 *)this = 0;
                    /* try { // try from 00358188 to 0045818b has its CatchHandler @ 00358210 */
  return 0;
}


==================================================================

### FUNC 0035822c (380 bytes) name=operator=

/* cv::ocl::Context::TEMPNAMEPLACEHOLDERVALUE(cv::ocl::Context const&) */

Context * __thiscall cv::ocl::Context::operator=(Context *this,Context *param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  void *pvVar5;
  Device *pDVar6;
  Device *pDVar7;
  void *pvVar8;
  Device *pDVar9;
  int *piVar10;
  int *piVar11;
  
                    /* try { // try from 00358234 to 00458237 has its CatchHandler @ 00357ec8 */
                    /* catch() { ... } // from try @ 00357fb8 with catch @ 00358238 */
  piVar11 = *(int **)param_1;
  if (piVar11 != (int *)0x0) {
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
      if (bVar3) {
        *piVar11 = *piVar11 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  piVar10 = *(int **)this;
  if (piVar10 != (int *)0x0) {
    do {
      iVar1 = *piVar10;
                    /* catch() { ... } // from try @ 00357f6c with catch @ 00358268
                       catch() { ... } // from try @ 00357fc0 with catch @ 00358268 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* catch() { ... } // from try @ 003582ac with catch @ 00358270
                       catch() { ... } // from try @ 00358524 with catch @ 00358270
                       catch() { ... } // from try @ 00358640 with catch @ 00358270 */
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
                    /* try { // try from 003582ac to 004582af has its CatchHandler @ 00358270 */
      lVar4 = *(long *)(piVar10 + 2);
      if (lVar4 != 0) {
        if ((DAT_005329b0 != (code *)0x0) ||
           (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 != (code *)0x0)) {
                    /* try { // try from 003582c8 to 004582cb has its CatchHandler @ 00358644 */
          (*DAT_005329b0)(lVar4);
        }
        piVar10[2] = 0;
        piVar10[3] = 0;
      }
      pDVar9 = *(Device **)(piVar10 + 6);
      pDVar7 = *(Device **)(piVar10 + 4);
      for (pDVar6 = pDVar7; pDVar6 != pDVar9; pDVar6 = pDVar6 + 8) {
        Device::~Device(pDVar6);
      }
                    /* try { // try from 003582f8 to 004582fb has its CatchHandler @ 00358660 */
      *(Device **)(piVar10 + 6) = pDVar7;
      pvVar5 = *(void **)(piVar10 + 0xe);
      if (*(void **)(piVar10 + 0xe) != (void *)0x0) {
        do {
          std::
          _Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
          ::_M_erase((_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
                      *)(piVar10 + 10),*(_Rb_tree_node **)((long)pvVar5 + 0x18));
          pvVar8 = *(void **)((long)pvVar5 + 0x10);
          Program::~Program((Program *)((long)pvVar5 + 0x30));
          operator_delete(pvVar5);
          pvVar5 = pvVar8;
        } while (pvVar8 != (void *)0x0);
        pDVar7 = *(Device **)(piVar10 + 6);
      }
      pDVar6 = *(Device **)(piVar10 + 4);
      if (pDVar6 != pDVar7) {
        do {
                    /* try { // try from 00358344 to 00458347 has its CatchHandler @ 0035864c */
          Device::~Device(pDVar6);
                    /* try { // try from 0035834c to 00458387 has its CatchHandler @ 00358660 */
          pDVar6 = pDVar6 + 8;
        } while (pDVar6 != pDVar7);
        pDVar7 = *(Device **)(piVar10 + 4);
      }
      if (pDVar7 != (Device *)0x0) {
        operator_delete(pDVar7);
      }
      operator_delete(piVar10);
      *(int **)this = piVar11;
      return this;
    }
  }
  *(int **)this = piVar11;
  return this;
}


==================================================================

### FUNC 00358414 (488 bytes) name=_M_insert_aux

/* std::vector<cv::ocl::PlatformInfo, std::allocator<cv::ocl::PlatformInfo>
   >::_M_insert_aux(__gnu_cxx::__normal_iterator<cv::ocl::PlatformInfo*,
   std::vector<cv::ocl::PlatformInfo, std::allocator<cv::ocl::PlatformInfo> > >,
   cv::ocl::PlatformInfo const&) */

void __thiscall
std::vector<cv::ocl::PlatformInfo,std::allocator<cv::ocl::PlatformInfo>>::_M_insert_aux
          (vector<cv::ocl::PlatformInfo,std::allocator<cv::ocl::PlatformInfo>> *this,
          PlatformInfo *param_2,PlatformInfo *param_3)

{
  PlatformInfo *pPVar1;
  PlatformInfo *pPVar2;
  long lVar3;
  ulong uVar4;
  PlatformInfo *pPVar5;
  long lVar6;
  PlatformInfo *this_00;
  PlatformInfo *pPVar7;
  ulong uVar8;
  PlatformInfo aPStack_8 [8];
  
  pPVar2 = *(PlatformInfo **)(this + 8);
                    /* try { // try from 0035843c to 0045843f has its CatchHandler @ 00358660 */
  if (pPVar2 != *(PlatformInfo **)(this + 0x10)) {
    lVar3 = 0;
    if (pPVar2 != (PlatformInfo *)0x0) {
      cv::ocl::PlatformInfo::PlatformInfo(pPVar2,pPVar2 + -8);
      lVar3 = *(long *)(this + 8);
    }
    *(long *)(this + 8) = lVar3 + 8;
    cv::ocl::PlatformInfo::PlatformInfo(aPStack_8,param_3);
    lVar3 = *(long *)(this + 8);
    pPVar2 = (PlatformInfo *)(lVar3 + -0x10);
    lVar6 = (long)pPVar2 - (long)param_2;
    if (7 < lVar6) {
      do {
        pPVar5 = pPVar2 + -8;
        cv::ocl::PlatformInfo::operator=(pPVar2,pPVar5);
        pPVar2 = pPVar5;
      } while (pPVar5 != (PlatformInfo *)((lVar3 - lVar6) + -0x10));
    }
                    /* try { // try from 003584b0 to 004584b3 has its CatchHandler @ 00358644 */
    cv::ocl::PlatformInfo::operator=(param_2,aPStack_8);
    cv::ocl::PlatformInfo::~PlatformInfo(aPStack_8);
    return;
  }
  lVar3 = *(long *)this;
  uVar4 = (long)pPVar2 - lVar3 >> 3;
  if (uVar4 == 0) {
    lVar3 = (long)param_2 - lVar3;
    uVar8 = 1;
LAB_003585d8:
    uVar4 = uVar8 << 3;
  }
  else {
    uVar8 = uVar4 * 2;
    if ((uVar4 <= uVar8) && (uVar8 < 0x2000000000000000)) {
                    /* try { // try from 003586c0 to 004586c3 has its CatchHandler @ 00358938 */
      lVar3 = (long)param_2 - lVar3;
      if (uVar8 == 0) {
        pPVar2 = (PlatformInfo *)0x0;
        goto LAB_00358510;
      }
      goto LAB_003585d8;
    }
    lVar3 = (long)param_2 - lVar3;
    uVar4 = 0xfffffffffffffff8;
    uVar8 = 0x1fffffffffffffff;
  }
  pPVar2 = operator_new(uVar4);
LAB_00358510:
  if (pPVar2 + lVar3 != (PlatformInfo *)0x0) {
    cv::ocl::PlatformInfo::PlatformInfo(pPVar2 + lVar3,param_3);
  }
  pPVar7 = pPVar2;
                    /* try { // try from 00358524 to 00458547 has its CatchHandler @ 00358270 */
  for (pPVar5 = *(PlatformInfo **)this; param_2 != pPVar5; pPVar5 = pPVar5 + 8) {
    if (pPVar7 != (PlatformInfo *)0x0) {
      cv::ocl::PlatformInfo::PlatformInfo(pPVar7,pPVar5);
    }
    pPVar7 = pPVar7 + 8;
                    /* try { // try from 00358550 to 00458553 has its CatchHandler @ 00358644 */
  }
  pPVar5 = *(PlatformInfo **)(this + 8);
  pPVar7 = pPVar7 + 8;
                    /* try { // try from 0035855c to 0045855f has its CatchHandler @ 00358660 */
  if (param_2 != pPVar5) {
    do {
      if (pPVar7 != (PlatformInfo *)0x0) {
        cv::ocl::PlatformInfo::PlatformInfo(pPVar7,param_2);
      }
      param_2 = param_2 + 8;
      pPVar7 = pPVar7 + 8;
    } while (pPVar5 != param_2);
    pPVar5 = *(PlatformInfo **)(this + 8);
  }
  this_00 = *(PlatformInfo **)this;
  if (*(PlatformInfo **)this != pPVar5) {
    do {
      pPVar1 = this_00 + 8;
      cv::ocl::PlatformInfo::~PlatformInfo(this_00);
      this_00 = pPVar1;
    } while (pPVar1 != pPVar5);
    pPVar5 = *(PlatformInfo **)this;
  }
  if (pPVar5 != (PlatformInfo *)0x0) {
    operator_delete(pPVar5);
  }
  *(PlatformInfo **)this = pPVar2;
  *(PlatformInfo **)(this + 8) = pPVar7;
  *(PlatformInfo **)(this + 0x10) = pPVar2 + uVar8 * 8;
  return;
}


==================================================================

### FUNC 003586dc (364 bytes) name=_M_insert_aux

/* std::vector<unsigned long, std::allocator<unsigned long>
   >::_M_insert_aux(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long,
   std::allocator<unsigned long> > >, unsigned long const&) */

void __thiscall
std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
          (vector<unsigned_long,std::allocator<unsigned_long>> *this,undefined8 *param_2,
          undefined8 *param_3)

{
  ulong uVar1;
  void *__dest;
  void *pvVar2;
  undefined8 *puVar3;
  size_t sVar4;
  undefined8 uVar5;
  size_t __n;
  ulong uVar6;
  
                    /* try { // try from 003586f0 to 004586f3 has its CatchHandler @ 00358994 */
  puVar3 = *(undefined8 **)(this + 8);
  if (puVar3 != *(undefined8 **)(this + 0x10)) {
    if (puVar3 != (undefined8 *)0x0) {
      *puVar3 = puVar3[-1];
    }
    sVar4 = (long)puVar3 + (-8 - (long)param_2);
    *(undefined8 **)(this + 8) = puVar3 + 1;
    uVar5 = *param_3;
    if ((long)sVar4 >> 3 != 0) {
      memmove((void *)((long)(puVar3 + 1) + (-8 - sVar4)),param_2,sVar4);
    }
    *param_2 = uVar5;
    return;
  }
  pvVar2 = *(void **)this;
  uVar1 = (long)puVar3 - (long)pvVar2 >> 3;
  if (uVar1 == 0) {
    sVar4 = (long)param_2 - (long)pvVar2;
    uVar1 = 8;
  }
  else {
    uVar6 = uVar1 * 2;
    if ((uVar6 < uVar1) || (0x1fffffffffffffff < uVar6)) {
      sVar4 = (long)param_2 - (long)pvVar2;
      uVar1 = 0xfffffffffffffff8;
    }
    else {
      sVar4 = (long)param_2 - (long)pvVar2;
      uVar1 = uVar1 << 4;
      __dest = (void *)0x0;
      __n = sVar4;
      if (uVar6 == 0) goto LAB_003587a4;
    }
  }
  __dest = operator_new(uVar1);
  pvVar2 = *(void **)this;
  __n = (long)param_2 - (long)pvVar2;
LAB_003587a4:
  if ((long)__dest + sVar4 != 0) {
    *(undefined8 *)((long)__dest + sVar4) = *param_3;
  }
  if ((long)__n >> 3 != 0) {
    memmove(__dest,pvVar2,__n);
  }
  pvVar2 = (void *)((long)__dest + __n + 8);
  sVar4 = *(long *)(this + 8) - (long)param_2;
  if ((long)sVar4 >> 3 != 0) {
    memmove(pvVar2,param_2,sVar4);
                    /* try { // try from 00358814 to 00458817 has its CatchHandler @ 00358938 */
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = __dest;
  *(size_t *)(this + 8) = (long)pvVar2 + sVar4;
  *(ulong *)(this + 0x10) = (long)__dest + uVar1;
                    /* try { // try from 0035873c to 0045873f has its CatchHandler @ 00358960 */
                    /* try { // try from 00358744 to 004587a3 has its CatchHandler @ 00358994 */
  return;
}


==================================================================

### FUNC 00358848 (364 bytes) name=_M_insert_aux

/* std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*,
   std::vector<int, std::allocator<int> > >, int const&) */

void __thiscall
std::vector<int,std::allocator<int>>::_M_insert_aux
          (vector<int,std::allocator<int>> *this,undefined4 *param_2,undefined4 *param_3)

{
  undefined4 uVar1;
  ulong uVar2;
  void *__dest;
  void *pvVar3;
  undefined4 *puVar4;
  size_t sVar5;
  size_t __n;
  ulong uVar6;
  
  puVar4 = *(undefined4 **)(this + 8);
  if (puVar4 != *(undefined4 **)(this + 0x10)) {
    if (puVar4 != (undefined4 *)0x0) {
      *puVar4 = puVar4[-1];
    }
                    /* try { // try from 00358888 to 004588a7 has its CatchHandler @ 00358668 */
    sVar5 = (long)puVar4 + (-4 - (long)param_2);
    *(undefined4 **)(this + 8) = puVar4 + 1;
    uVar1 = *param_3;
    if ((long)sVar5 >> 2 != 0) {
      memmove((void *)((long)(puVar4 + 1) + (-4 - sVar5)),param_2,sVar5);
    }
    *param_2 = uVar1;
    return;
  }
  pvVar3 = *(void **)this;
  uVar2 = (long)puVar4 - (long)pvVar3 >> 2;
  if (uVar2 == 0) {
    sVar5 = (long)param_2 - (long)pvVar3;
    uVar2 = 4;
  }
  else {
    uVar6 = uVar2 * 2;
                    /* catch() { ... } // from try @ 003586f0 with catch @ 00358994
                       catch() { ... } // from try @ 00358744 with catch @ 00358994 */
                    /* catch() { ... } // from try @ 003589d0 with catch @ 0035899c
                       catch() { ... } // from try @ 00358bfc with catch @ 0035899c
                       catch() { ... } // from try @ 00358d20 with catch @ 0035899c */
    if ((uVar6 < uVar2) || (0x3fffffffffffffff < uVar6)) {
      sVar5 = (long)param_2 - (long)pvVar3;
      uVar2 = 0xfffffffffffffffc;
    }
    else {
      sVar5 = (long)param_2 - (long)pvVar3;
      uVar2 = uVar2 << 3;
      __dest = (void *)0x0;
      __n = sVar5;
      if (uVar6 == 0) goto LAB_00358910;
    }
  }
  __dest = operator_new(uVar2);
  pvVar3 = *(void **)this;
  __n = (long)param_2 - (long)pvVar3;
LAB_00358910:
  if ((long)__dest + sVar5 != 0) {
    *(undefined4 *)((long)__dest + sVar5) = *param_3;
  }
  if ((long)__n >> 2 != 0) {
    memmove(__dest,pvVar3,__n);
  }
  pvVar3 = (void *)((long)__dest + __n + 4);
  sVar5 = *(long *)(this + 8) - (long)param_2;
                    /* catch() { ... } // from try @ 003586c0 with catch @ 00358938
                       catch() { ... } // from try @ 00358814 with catch @ 00358938
                       catch() { ... } // from try @ 003588b0 with catch @ 00358938 */
  if ((long)sVar5 >> 2 != 0) {
    memmove(pvVar3,param_2,sVar5);
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = __dest;
  *(size_t *)(this + 8) = (long)pvVar3 + sVar5;
                    /* try { // try from 0035895c to 0045895f has its CatchHandler @ 00358668 */
  *(ulong *)(this + 0x10) = (long)__dest + uVar2;
                    /* try { // try from 003588b0 to 004588b3 has its CatchHandler @ 00358938 */
  return;
                    /* catch() { ... } // from try @ 0035873c with catch @ 00358960 */
}


==================================================================

### FUNC 003589b4 (5640 bytes) name=checkOptimalVectorWidth

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::ocl::checkOptimalVectorWidth(int const*, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::ocl::OclVectorStrategy) */

int cv::ocl::checkOptimalVectorWidth
              (long param_1,_InputArray *param_2,_InputArray *param_3,_InputArray *param_4,
              _InputArray *param_5,_InputArray *param_6,_InputArray *param_7,_InputArray *param_8,
              _InputArray *param_9,_InputArray *param_10,int param_11)

{
  int iVar1;
  ulong uVar2;
  undefined4 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined1 uVar6;
  char cVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  char *pcVar11;
  ulong uVar12;
  long lVar13;
  int *piVar14;
  undefined8 *puVar15;
  ulong uVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  int local_a8 [4];
  int local_98 [4];
  long local_88 [2];
  void *local_78;
  long *local_70;
  long *local_68;
  void *local_60;
  long *local_58;
  long *local_50;
  void *local_48;
  long *local_40;
  long *local_38;
  void *local_30;
  int *local_28;
  int *local_20;
  int *local_18;
  int *local_10;
  int *local_8;
  
                    /* try { // try from 003589d0 to 004589d3 has its CatchHandler @ 0035899c */
                    /* try { // try from 003589ec to 004589ef has its CatchHandler @ 00358d24 */
  if (param_1 == 0) {
    local_18 = (int *)param_1;
    local_10 = (int *)param_1;
    pcVar11 = (char *)String::allocate((String *)&local_18,0xc);
    uVar3 = s_vectorWidths_0046df40._8_4_;
                    /* try { // try from 003598d4 to 0045994b has its CatchHandler @ 0035987c */
    *(undefined8 *)pcVar11 = s_vectorWidths_0046df40._0_8_;
    *(undefined4 *)(pcVar11 + 8) = uVar3;
    error(-0xd7,(String *)&local_18,
          "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
          ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1560);
    String::deallocate((String *)&local_18);
  }
  uVar8 = _InputArray::type(param_2,-1);
  local_78 = (void *)0x0;
  local_70 = (long *)0x0;
  local_68 = (long *)0x0;
  local_60 = (void *)0x0;
                    /* try { // try from 00358a1c to 00458a1f has its CatchHandler @ 00358d40 */
  local_58 = (long *)0x0;
  local_50 = (long *)0x0;
  local_48 = (void *)0x0;
  local_40 = (long *)0x0;
  local_38 = (long *)0x0;
  local_30 = (void *)0x0;
  local_28 = (int *)0x0;
  local_20 = (int *)0x0;
  local_18 = (int *)0x0;
  local_10 = (int *)0x0;
  local_8 = (int *)0x0;
  cVar7 = _InputArray::empty(param_2);
  if (cVar7 == '\0') {
    iVar9 = _InputArray::kind(param_2);
                    /* try { // try from 00358a68 to 00458a6b has its CatchHandler @ 00358d2c */
                    /* try { // try from 00358a70 to 00458a93 has its CatchHandler @ 00358d40 */
    if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_2), iVar9 != 0xa0000)) {
      local_100 = 0;
      local_108 = 0;
      pcVar11 = (char *)String::allocate((String *)&local_108,0x1d);
      cVar7 = s_src1_isMat______src1_isUMat___0046df50[0x1c];
      uVar3 = s_src1_isMat______src1_isUMat___0046df50._24_4_;
      uVar5 = s_src1_isMat______src1_isUMat___0046df50._8_8_;
      uVar4 = s_src1_isMat______src1_isUMat___0046df50._0_8_;
                    /* try { // try from 00358aa0 to 00458aa3 has its CatchHandler @ 00358cc0 */
      *(undefined8 *)(pcVar11 + 0x10) = s_src1_isMat______src1_isUMat___0046df50._16_8_;
      *(undefined4 *)(pcVar11 + 0x18) = uVar3;
      pcVar11[0x1c] = cVar7;
      *(undefined8 *)pcVar11 = uVar4;
      *(undefined8 *)(pcVar11 + 8) = uVar5;
      error(-0xd7,(String *)&local_108,
            "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
            ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1566);
      String::deallocate((String *)&local_108);
    }
    _InputArray::size((int)param_2);
    uVar12 = _InputArray::type(param_2,-1);
    uVar10 = (uint)uVar12 & 7;
    local_a8[0] = *(int *)(param_1 + (long)(int)uVar10 * 4);
                    /* try { // try from 00358b14 to 00458b17 has its CatchHandler @ 00358d40 */
    iVar9 = local_98[0] + ((uint)((uVar12 & 0xffffffff) >> 3) & 0x1ff) * local_98[0];
    if ((0 < local_a8[0]) && (local_a8[0] <= iVar9)) {
      local_88[0] = (long)iVar9;
      if (local_38 == local_40) {
        std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                  ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,local_38,
                   local_88);
      }
      else {
        if (local_40 != (long *)0x0) {
          *local_40 = local_88[0];
        }
        local_40 = local_40 + 1;
      }
      if ((uVar8 == (uint)uVar12) || (param_11 != 0)) {
        local_88[0] = _InputArray::offset(param_2,-1);
        if (local_68 == local_70) {
          std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                    ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,local_68,
                     local_88);
        }
        else {
          if (local_70 != (long *)0x0) {
            *local_70 = local_88[0];
          }
          local_70 = local_70 + 1;
        }
                    /* try { // try from 00358bfc to 00458c1b has its CatchHandler @ 0035899c */
        local_88[0] = _InputArray::step(param_2,-1);
        if (local_58 == local_50) {
          std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                    ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,local_58,
                     local_88);
        }
        else {
          if (local_58 != (long *)0x0) {
            *local_58 = local_88[0];
          }
                    /* try { // try from 00358c24 to 00458c27 has its CatchHandler @ 00358d24 */
          local_58 = local_58 + 1;
        }
                    /* try { // try from 00358c30 to 00458c33 has its CatchHandler @ 00358d40 */
        iVar9 = ((uint)(0x88442211L >> (uVar10 << 2)) & 0xf) * local_a8[0];
        local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
        if (local_28 == local_20) {
                    /* try { // try from 00359b48 to 00459b4b has its CatchHandler @ 00359a2c */
          std::vector<int,std::allocator<int>>::_M_insert_aux
                    ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
        }
        else {
          if (local_28 != (int *)0x0) {
            *local_28 = iVar9;
          }
          local_28 = local_28 + 1;
        }
        if (local_10 == local_8) {
          std::vector<int,std::allocator<int>>::_M_insert_aux
                    ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
        }
        else {
          if (local_10 != (int *)0x0) {
            *local_10 = local_a8[0];
          }
          local_10 = local_10 + 1;
        }
        goto LAB_00358c94;
      }
    }
  }
  else {
LAB_00358c94:
    cVar7 = _InputArray::empty(param_3);
    if (cVar7 == '\0') {
      iVar9 = _InputArray::kind(param_3);
                    /* catch() { ... } // from try @ 00358aa0 with catch @ 00358cc0 */
      if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_3), iVar9 != 0xa0000)) {
        local_f8 = 0;
        local_f0 = 0;
        pcVar11 = (char *)String::allocate((String *)&local_f8,0x1d);
        cVar7 = s_src2_isMat______src2_isUMat___0046df70[0x1c];
        uVar3 = s_src2_isMat______src2_isUMat___0046df70._24_4_;
        uVar5 = s_src2_isMat______src2_isUMat___0046df70._8_8_;
        uVar4 = s_src2_isMat______src2_isUMat___0046df70._0_8_;
        *(undefined8 *)(pcVar11 + 0x10) = s_src2_isMat______src2_isUMat___0046df70._16_8_;
        *(undefined4 *)(pcVar11 + 0x18) = uVar3;
        pcVar11[0x1c] = cVar7;
                    /* try { // try from 00358d20 to 00458d23 has its CatchHandler @ 0035899c */
        *(undefined8 *)pcVar11 = uVar4;
        *(undefined8 *)(pcVar11 + 8) = uVar5;
                    /* catch() { ... } // from try @ 003589ec with catch @ 00358d24
                       catch() { ... } // from try @ 00358b88 with catch @ 00358d24
                       catch() { ... } // from try @ 00358c24 with catch @ 00358d24 */
        error(-0xd7,(String *)&local_f8,
              "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1567);
                    /* catch() { ... } // from try @ 00358a68 with catch @ 00358d2c */
        String::deallocate((String *)&local_f8);
      }
      _InputArray::size((int)param_3);
                    /* catch() { ... } // from try @ 00358a1c with catch @ 00358d40
                       catch() { ... } // from try @ 00358a70 with catch @ 00358d40
                       catch() { ... } // from try @ 00358b14 with catch @ 00358d40
                       catch() { ... } // from try @ 00358c30 with catch @ 00358d40 */
                    /* catch() { ... } // from try @ 00358d7c with catch @ 00358d48
                       catch() { ... } // from try @ 00358fa8 with catch @ 00358d48
                       catch() { ... } // from try @ 003590cc with catch @ 00358d48 */
      uVar10 = _InputArray::type(param_3,-1);
      iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
      local_a8[0] = iVar9;
      iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
      if ((0 < iVar9) && (iVar9 <= iVar1)) {
                    /* try { // try from 00358d7c to 00458d7f has its CatchHandler @ 00358d48 */
        local_88[0] = (long)iVar1;
        if (local_38 == local_40) {
          std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                    ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,local_38,
                     local_88);
        }
        else {
          if (local_40 != (long *)0x0) {
            *local_40 = local_88[0];
          }
                    /* try { // try from 00358d98 to 00458d9b has its CatchHandler @ 003590d0 */
          local_40 = local_40 + 1;
        }
        if ((uVar8 == uVar10) || (param_11 != 0)) {
          local_88[0] = _InputArray::offset(param_3,-1);
                    /* try { // try from 00358dc8 to 00458dcb has its CatchHandler @ 003590ec */
          if (local_70 == local_68) {
            std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                      ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,local_70,
                       local_88);
          }
          else {
            if (local_70 != (long *)0x0) {
              *local_70 = local_88[0];
            }
            local_70 = local_70 + 1;
          }
          local_88[0] = _InputArray::step(param_3,-1);
          if (local_58 == local_50) {
            std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                      ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,local_58,
                       local_88);
          }
          else {
            if (local_58 != (long *)0x0) {
              *local_58 = local_88[0];
            }
            local_58 = local_58 + 1;
          }
                    /* try { // try from 00358e14 to 00458e17 has its CatchHandler @ 003590d8 */
                    /* try { // try from 00358e1c to 00458e3f has its CatchHandler @ 003590ec */
          iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
          local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
          if (local_28 == local_20) {
            std::vector<int,std::allocator<int>>::_M_insert_aux
                      ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
          }
          else {
            if (local_28 != (int *)0x0) {
              *local_28 = iVar9;
            }
            local_28 = local_28 + 1;
                    /* try { // try from 00358e4c to 00458e4f has its CatchHandler @ 0035906c */
          }
          if (local_10 == local_8) {
            std::vector<int,std::allocator<int>>::_M_insert_aux
                      ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
          }
          else {
            if (local_10 != (int *)0x0) {
              *local_10 = local_a8[0];
            }
            local_10 = local_10 + 1;
          }
          goto LAB_00358e74;
        }
      }
    }
    else {
LAB_00358e74:
      cVar7 = _InputArray::empty(param_4);
      if (cVar7 == '\0') {
        iVar9 = _InputArray::kind(param_4);
        if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_4), iVar9 != 0xa0000)) {
          local_e8 = 0;
          local_e0 = 0;
          pcVar11 = (char *)String::allocate((String *)&local_e8,0x1d);
          cVar7 = s_src3_isMat______src3_isUMat___0046df90[0x1c];
          uVar3 = s_src3_isMat______src3_isUMat___0046df90._24_4_;
          uVar5 = s_src3_isMat______src3_isUMat___0046df90._8_8_;
          uVar4 = s_src3_isMat______src3_isUMat___0046df90._0_8_;
                    /* try { // try from 00358ec0 to 00458ec3 has its CatchHandler @ 003590ec */
          *(undefined8 *)(pcVar11 + 0x10) = s_src3_isMat______src3_isUMat___0046df90._16_8_;
          *(undefined4 *)(pcVar11 + 0x18) = uVar3;
          pcVar11[0x1c] = cVar7;
          *(undefined8 *)pcVar11 = uVar4;
          *(undefined8 *)(pcVar11 + 8) = uVar5;
          error(-0xd7,(String *)&local_e8,
                "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1568);
          String::deallocate((String *)&local_e8);
        }
        _InputArray::size((int)param_4);
        uVar10 = _InputArray::type(param_4,-1);
                    /* try { // try from 00358f34 to 00458f37 has its CatchHandler @ 003590d0 */
        iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
        local_a8[0] = iVar9;
        iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
        if ((0 < iVar9) && (iVar9 <= iVar1)) {
          local_88[0] = (long)iVar1;
          if (local_38 == local_40) {
            std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                      ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,local_38,
                       local_88);
          }
          else {
            if (local_40 != (long *)0x0) {
              *local_40 = local_88[0];
            }
            local_40 = local_40 + 1;
          }
          if ((uVar8 == uVar10) || (param_11 != 0)) {
            local_88[0] = _InputArray::offset(param_4,-1);
                    /* try { // try from 00358fa8 to 00458fc7 has its CatchHandler @ 00358d48 */
            if (local_70 == local_68) {
                    /* try { // try from 00359dc8 to 00459dcb has its CatchHandler @ 00359dd8 */
              std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                        ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,local_70,
                         local_88);
                    /* try { // try from 00359dd0 to 00459dd3 has its CatchHandler @ 00359c78 */
            }
            else {
              if (local_70 != (long *)0x0) {
                *local_70 = local_88[0];
              }
              local_70 = local_70 + 1;
            }
            local_88[0] = _InputArray::step(param_4,-1);
                    /* try { // try from 00358fd0 to 00458fd3 has its CatchHandler @ 003590d0 */
                    /* try { // try from 00358fdc to 00458fdf has its CatchHandler @ 003590ec */
            if (local_58 == local_50) {
              std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                        ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,local_58,
                         local_88);
            }
            else {
              if (local_58 != (long *)0x0) {
                *local_58 = local_88[0];
              }
              local_58 = local_58 + 1;
            }
            iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
            local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
            if (local_28 == local_20) {
              std::vector<int,std::allocator<int>>::_M_insert_aux
                        ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
            }
            else {
              if (local_28 != (int *)0x0) {
                *local_28 = iVar9;
              }
              local_28 = local_28 + 1;
            }
            if (local_10 == local_8) {
                    /* catch() { ... } // from try @ 00359dc8 with catch @ 00359dd8 */
              std::vector<int,std::allocator<int>>::_M_insert_aux
                        ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
            }
            else {
              if (local_10 != (int *)0x0) {
                *local_10 = local_a8[0];
              }
              local_10 = local_10 + 1;
            }
            goto LAB_00359054;
          }
        }
      }
      else {
LAB_00359054:
        cVar7 = _InputArray::empty(param_5);
        if (cVar7 == '\0') {
          iVar9 = _InputArray::kind(param_5);
                    /* catch() { ... } // from try @ 00358e4c with catch @ 0035906c */
          if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_5), iVar9 != 0xa0000)) {
            local_d8 = 0;
            local_d0 = 0;
            pcVar11 = (char *)String::allocate((String *)&local_d8,0x1d);
            cVar7 = s_src4_isMat______src4_isUMat___0046dfb0[0x1c];
            uVar3 = s_src4_isMat______src4_isUMat___0046dfb0._24_4_;
            uVar5 = s_src4_isMat______src4_isUMat___0046dfb0._8_8_;
            uVar4 = s_src4_isMat______src4_isUMat___0046dfb0._0_8_;
                    /* try { // try from 003590cc to 004590cf has its CatchHandler @ 00358d48 */
                    /* catch() { ... } // from try @ 00358d98 with catch @ 003590d0
                       catch() { ... } // from try @ 00358f34 with catch @ 003590d0
                       catch() { ... } // from try @ 00358fd0 with catch @ 003590d0 */
            *(undefined8 *)(pcVar11 + 0x10) = s_src4_isMat______src4_isUMat___0046dfb0._16_8_;
                    /* catch() { ... } // from try @ 00358e14 with catch @ 003590d8 */
            *(undefined4 *)(pcVar11 + 0x18) = uVar3;
            pcVar11[0x1c] = cVar7;
            *(undefined8 *)pcVar11 = uVar4;
            *(undefined8 *)(pcVar11 + 8) = uVar5;
            error(-0xd7,(String *)&local_d8,
                  "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                  ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1569);
                    /* catch() { ... } // from try @ 00358dc8 with catch @ 003590ec
                       catch() { ... } // from try @ 00358e1c with catch @ 003590ec
                       catch() { ... } // from try @ 00358ec0 with catch @ 003590ec
                       catch() { ... } // from try @ 00358fdc with catch @ 003590ec */
            String::deallocate((String *)&local_d8);
          }
                    /* catch() { ... } // from try @ 0035912c with catch @ 003590f4
                       catch() { ... } // from try @ 0035930c with catch @ 003590f4
                       catch() { ... } // from try @ 003593ec with catch @ 003590f4 */
          _InputArray::size((int)param_5);
          uVar10 = _InputArray::type(param_5,-1);
          iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
          local_a8[0] = iVar9;
          iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
                    /* try { // try from 0035912c to 0045912f has its CatchHandler @ 003590f4 */
          if ((0 < iVar9) && (iVar9 <= iVar1)) {
            local_88[0] = (long)iVar1;
                    /* try { // try from 00359148 to 0045914b has its CatchHandler @ 003593c8 */
            if (local_38 == local_40) {
              std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                        ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,local_38,
                         local_88);
            }
            else {
              if (local_40 != (long *)0x0) {
                *local_40 = local_88[0];
              }
              local_40 = local_40 + 1;
            }
            if ((uVar8 == uVar10) || (param_11 != 0)) {
                    /* try { // try from 00359178 to 0045917b has its CatchHandler @ 00359420 */
              local_88[0] = _InputArray::offset(param_5,-1);
              if (local_70 == local_68) {
                std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                          ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,local_70
                           ,local_88);
              }
              else {
                if (local_70 != (long *)0x0) {
                  *local_70 = local_88[0];
                }
                local_70 = local_70 + 1;
              }
              local_88[0] = _InputArray::step(param_5,-1);
              if (local_58 == local_50) {
                std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                          ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,local_58
                           ,local_88);
              }
              else {
                if (local_58 != (long *)0x0) {
                    /* try { // try from 003591c4 to 004591c7 has its CatchHandler @ 003593f0 */
                  *local_58 = local_88[0];
                }
                local_58 = local_58 + 1;
                    /* try { // try from 003591cc to 00459227 has its CatchHandler @ 00359420 */
              }
              iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
              local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
              if (local_28 == local_20) {
                std::vector<int,std::allocator<int>>::_M_insert_aux
                          ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
              }
              else {
                if (local_28 != (int *)0x0) {
                  *local_28 = iVar9;
                }
                local_28 = local_28 + 1;
              }
              if (local_10 == local_8) {
                    /* try { // try from 00359dfc to 00459dff has its CatchHandler @ 00359c78 */
                    /* catch() { ... } // from try @ 00359ed8 with catch @ 00359e00
                       catch() { ... } // from try @ 00359f18 with catch @ 00359e00
                       catch() { ... } // from try @ 00359fd8 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a054 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a0c8 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a128 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a140 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a154 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a168 with catch @ 00359e00
                       catch() { ... } // from try @ 0035a17c with catch @ 00359e00
                       catch() { ... } // from try @ 0035a190 with catch @ 00359e00 */
                std::vector<int,std::allocator<int>>::_M_insert_aux
                          ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
              }
              else {
                if (local_10 != (int *)0x0) {
                  *local_10 = local_a8[0];
                }
                local_10 = local_10 + 1;
              }
              goto LAB_00359234;
            }
          }
        }
        else {
LAB_00359234:
          cVar7 = _InputArray::empty(param_6);
          if (cVar7 == '\0') {
            iVar9 = _InputArray::kind(param_6);
            if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_6), iVar9 != 0xa0000)) {
              local_c8 = 0;
              local_c0 = 0;
              pcVar11 = (char *)String::allocate((String *)&local_c8,0x1d);
              cVar7 = s_src5_isMat______src5_isUMat___0046dfd0[0x1c];
              uVar3 = s_src5_isMat______src5_isUMat___0046dfd0._24_4_;
              uVar5 = s_src5_isMat______src5_isUMat___0046dfd0._8_8_;
              uVar4 = s_src5_isMat______src5_isUMat___0046dfd0._0_8_;
                    /* try { // try from 00359298 to 0045929b has its CatchHandler @ 003593c8 */
              *(undefined8 *)(pcVar11 + 0x10) = s_src5_isMat______src5_isUMat___0046dfd0._16_8_;
              *(undefined4 *)(pcVar11 + 0x18) = uVar3;
              pcVar11[0x1c] = cVar7;
              *(undefined8 *)pcVar11 = uVar4;
              *(undefined8 *)(pcVar11 + 8) = uVar5;
              error(-0xd7,(String *)&local_c8,
                    "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                    ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x156a);
              String::deallocate((String *)&local_c8);
            }
            _InputArray::size((int)param_6);
            uVar10 = _InputArray::type(param_6,-1);
            iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
            local_a8[0] = iVar9;
            iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
                    /* try { // try from 0035930c to 0045932b has its CatchHandler @ 003590f4 */
            if ((0 < iVar9) && (iVar9 <= iVar1)) {
              local_88[0] = (long)iVar1;
              if (local_38 == local_40) {
                std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                          ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,local_38
                           ,local_88);
              }
              else {
                if (local_40 != (long *)0x0) {
                    /* try { // try from 00359334 to 00459337 has its CatchHandler @ 003593c8 */
                  *local_40 = local_88[0];
                }
                local_40 = local_40 + 1;
              }
              if ((uVar8 == uVar10) || (param_11 != 0)) {
                local_88[0] = _InputArray::offset(param_6,-1);
                if (local_70 == local_68) {
                  std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                            ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,
                             local_70,local_88);
                }
                else {
                  if (local_70 != (long *)0x0) {
                    *local_70 = local_88[0];
                  }
                  local_70 = local_70 + 1;
                }
                local_88[0] = _InputArray::step(param_6,-1);
                if (local_58 == local_50) {
                  std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                            ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,
                             local_58,local_88);
                }
                else {
                  if (local_58 != (long *)0x0) {
                    *local_58 = local_88[0];
                  }
                  local_58 = local_58 + 1;
                }
                    /* catch() { ... } // from try @ 00359148 with catch @ 003593c8
                       catch() { ... } // from try @ 00359298 with catch @ 003593c8
                       catch() { ... } // from try @ 00359334 with catch @ 003593c8 */
                iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
                local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
                if (local_28 == local_20) {
                  std::vector<int,std::allocator<int>>::_M_insert_aux
                            ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
                }
                else {
                  if (local_28 != (int *)0x0) {
                    *local_28 = iVar9;
                  }
                  local_28 = local_28 + 1;
                    /* try { // try from 003593ec to 004593ef has its CatchHandler @ 003590f4 */
                }
                    /* catch() { ... } // from try @ 003591c4 with catch @ 003593f0 */
                if (local_10 == local_8) {
                  std::vector<int,std::allocator<int>>::_M_insert_aux
                            ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
                }
                else {
                  if (local_10 != (int *)0x0) {
                    *local_10 = local_a8[0];
                  }
                  local_10 = local_10 + 1;
                }
                goto LAB_00359414;
              }
            }
          }
          else {
LAB_00359414:
            cVar7 = _InputArray::empty(param_7);
                    /* catch() { ... } // from try @ 00359178 with catch @ 00359420
                       catch() { ... } // from try @ 003591cc with catch @ 00359420 */
            if (cVar7 == '\0') {
              iVar9 = _InputArray::kind(param_7);
              if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_7), iVar9 != 0xa0000)) {
                local_b8 = 0;
                local_b0 = 0;
                pcVar11 = (char *)String::allocate((String *)&local_b8,0x1d);
                cVar7 = s_src6_isMat______src6_isUMat___0046dff0[0x1c];
                uVar3 = s_src6_isMat______src6_isUMat___0046dff0._24_4_;
                uVar5 = s_src6_isMat______src6_isUMat___0046dff0._8_8_;
                uVar4 = s_src6_isMat______src6_isUMat___0046dff0._0_8_;
                *(undefined8 *)(pcVar11 + 0x10) = s_src6_isMat______src6_isUMat___0046dff0._16_8_;
                    /* try { // try from 0035998c to 0045998f has its CatchHandler @ 00359a04 */
                *(undefined4 *)(pcVar11 + 0x18) = uVar3;
                pcVar11[0x1c] = cVar7;
                    /* try { // try from 00359994 to 004599b3 has its CatchHandler @ 0035987c */
                *(undefined8 *)pcVar11 = uVar4;
                *(undefined8 *)(pcVar11 + 8) = uVar5;
                error(-0xd7,(String *)&local_b8,
                      "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x156b);
                String::deallocate((String *)&local_b8);
              }
              _InputArray::size((int)param_7);
              uVar10 = _InputArray::type(param_7,-1);
              iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
              local_a8[0] = iVar9;
              iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
              if ((0 < iVar9) && (iVar9 <= iVar1)) {
                local_88[0] = (long)iVar1;
                    /* try { // try from 003599f4 to 004599f7 has its CatchHandler @ 00359a18 */
                    /* try { // try from 003599fc to 004599ff has its CatchHandler @ 0035987c */
                if (local_38 == local_40) {
                    /* try { // try from 00359de8 to 00459deb has its CatchHandler @ 00359c78 */
                    /* catch() { ... } // from try @ 00359ce8 with catch @ 00359dec */
                  std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                            ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,
                             local_38,local_88);
                }
                else {
                    /* catch() { ... } // from try @ 0035998c with catch @ 00359a04 */
                  if (local_40 != (long *)0x0) {
                    *local_40 = local_88[0];
                  }
                  local_40 = local_40 + 1;
                }
                    /* try { // try from 00359a14 to 00459a17 has its CatchHandler @ 0035987c */
                    /* catch() { ... } // from try @ 003599f4 with catch @ 00359a18 */
                if ((uVar8 == uVar10) || (param_11 != 0)) {
                    /* try { // try from 00359a28 to 00459a2b has its CatchHandler @ 0035987c */
                    /* catch() { ... } // from try @ 00359b48 with catch @ 00359a2c
                       catch() { ... } // from try @ 00359b94 with catch @ 00359a2c
                       catch() { ... } // from try @ 00359bec with catch @ 00359a2c
                       catch() { ... } // from try @ 00359c34 with catch @ 00359a2c
                       catch() { ... } // from try @ 00359c4c with catch @ 00359a2c
                       catch() { ... } // from try @ 00359c60 with catch @ 00359a2c
                       catch() { ... } // from try @ 00359c74 with catch @ 00359a2c */
                  local_88[0] = _InputArray::offset(param_7,-1);
                  if (local_70 == local_68) {
                    std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                              ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,
                               local_70,local_88);
                  }
                  else {
                    if (local_70 != (long *)0x0) {
                      *local_70 = local_88[0];
                    }
                    local_70 = local_70 + 1;
                  }
                  local_88[0] = _InputArray::step(param_7,-1);
                  if (local_58 == local_50) {
                    /* try { // try from 00359ed8 to 00459edb has its CatchHandler @ 00359e00 */
                    std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                              ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,
                               local_58,local_88);
                  }
                  else {
                    if (local_58 != (long *)0x0) {
                      *local_58 = local_88[0];
                    }
                    local_58 = local_58 + 1;
                  }
                  iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
                  local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
                  if (local_28 == local_20) {
                    std::vector<int,std::allocator<int>>::_M_insert_aux
                              ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
                  }
                  else {
                    if (local_28 != (int *)0x0) {
                      *local_28 = iVar9;
                    }
                    local_28 = local_28 + 1;
                  }
                  if (local_10 == local_8) {
                    std::vector<int,std::allocator<int>>::_M_insert_aux
                              ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
                  }
                  else {
                    if (local_10 != (int *)0x0) {
                      *local_10 = local_a8[0];
                    }
                    local_10 = local_10 + 1;
                  }
                  goto LAB_00359424;
                }
              }
            }
            else {
LAB_00359424:
                    /* catch() { ... } // from try @ 00359460 with catch @ 00359428
                       catch() { ... } // from try @ 00359640 with catch @ 00359428
                       catch() { ... } // from try @ 00359720 with catch @ 00359428 */
              cVar7 = _InputArray::empty(param_8);
              if (cVar7 == '\0') {
                iVar9 = _InputArray::kind(param_8);
                if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_8), iVar9 != 0xa0000)) {
                  local_a8[0] = 0;
                  local_a8[1] = 0;
                    /* try { // try from 00359460 to 00459463 has its CatchHandler @ 00359428 */
                  local_a8[2] = 0;
                  local_a8[3] = 0;
                  pcVar11 = (char *)String::allocate((String *)local_a8,0x1d);
                  cVar7 = s_src7_isMat______src7_isUMat___0046e010[0x1c];
                  uVar3 = s_src7_isMat______src7_isUMat___0046e010._24_4_;
                  uVar5 = s_src7_isMat______src7_isUMat___0046e010._8_8_;
                  uVar4 = s_src7_isMat______src7_isUMat___0046e010._0_8_;
                    /* try { // try from 0035947c to 0045947f has its CatchHandler @ 003596fc */
                  *(undefined8 *)(pcVar11 + 0x10) = s_src7_isMat______src7_isUMat___0046e010._16_8_;
                  *(undefined4 *)(pcVar11 + 0x18) = uVar3;
                    /* try { // try from 003594ac to 004594af has its CatchHandler @ 00359754 */
                  pcVar11[0x1c] = cVar7;
                  *(undefined8 *)pcVar11 = uVar4;
                  *(undefined8 *)(pcVar11 + 8) = uVar5;
                  error(-0xd7,(String *)local_a8,
                        "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                        ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x156c);
                  String::deallocate((String *)local_a8);
                }
                _InputArray::size((int)param_8);
                uVar10 = _InputArray::type(param_8,-1);
                iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
                local_a8[0] = iVar9;
                    /* try { // try from 003594f8 to 004594fb has its CatchHandler @ 00359724 */
                iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
                    /* try { // try from 00359500 to 0045955b has its CatchHandler @ 00359754 */
                if ((0 < iVar9) && (iVar9 <= iVar1)) {
                  local_88[0] = (long)iVar1;
                  if (local_38 == local_40) {
                    std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                              ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,
                               local_38,local_88);
                  }
                  else {
                    if (local_40 != (long *)0x0) {
                      *local_40 = local_88[0];
                    }
                    local_40 = local_40 + 1;
                  }
                  if ((uVar8 == uVar10) || (param_11 != 0)) {
                    local_88[0] = _InputArray::offset(param_8,-1);
                    if (local_70 == local_68) {
                    /* try { // try from 00359f18 to 00459f97 has its CatchHandler @ 00359e00 */
                      std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,
                                 local_70,local_88);
                    }
                    else {
                      if (local_70 != (long *)0x0) {
                        *local_70 = local_88[0];
                      }
                      local_70 = local_70 + 1;
                    }
                    local_88[0] = _InputArray::step(param_8,-1);
                    if (local_58 == local_50) {
                    /* try { // try from 00359f0c to 00459f0f has its CatchHandler @ 0035a16c */
                      std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,
                                 local_58,local_88);
                    }
                    else {
                      if (local_58 != (long *)0x0) {
                        *local_58 = local_88[0];
                      }
                      local_58 = local_58 + 1;
                    }
                    iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
                    local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
                    /* try { // try from 003595cc to 004595cf has its CatchHandler @ 003596fc */
                    if (local_28 == local_20) {
                      std::vector<int,std::allocator<int>>::_M_insert_aux
                                ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
                    }
                    else {
                      if (local_28 != (int *)0x0) {
                        *local_28 = iVar9;
                      }
                      local_28 = local_28 + 1;
                    }
                    if (local_10 == local_8) {
                      std::vector<int,std::allocator<int>>::_M_insert_aux
                                ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
                    }
                    else {
                      if (local_10 != (int *)0x0) {
                        *local_10 = local_a8[0];
                      }
                      local_10 = local_10 + 1;
                    }
                    goto LAB_00359604;
                  }
                }
              }
              else {
LAB_00359604:
                cVar7 = _InputArray::empty(param_9);
                if (cVar7 == '\0') {
                  iVar9 = _InputArray::kind(param_9);
                  if (iVar9 != 0x10000) {
                    iVar9 = _InputArray::kind(param_9);
                    if (iVar9 != 0xa0000) {
                      local_98[0] = 0;
                      local_98[1] = 0;
                    /* try { // try from 00359640 to 0045965f has its CatchHandler @ 00359428 */
                      local_98[2] = 0;
                      local_98[3] = 0;
                      pcVar11 = (char *)String::allocate((String *)local_98,0x1d);
                      cVar7 = s_src8_isMat______src8_isUMat___0046e030[0x1c];
                      uVar3 = s_src8_isMat______src8_isUMat___0046e030._24_4_;
                      uVar5 = s_src8_isMat______src8_isUMat___0046e030._8_8_;
                      uVar4 = s_src8_isMat______src8_isUMat___0046e030._0_8_;
                    /* try { // try from 00359668 to 0045966b has its CatchHandler @ 003596fc */
                      *(undefined8 *)(pcVar11 + 0x10) =
                           s_src8_isMat______src8_isUMat___0046e030._16_8_;
                      *(undefined4 *)(pcVar11 + 0x18) = uVar3;
                      pcVar11[0x1c] = cVar7;
                      *(undefined8 *)pcVar11 = uVar4;
                      *(undefined8 *)(pcVar11 + 8) = uVar5;
                      error(-0xd7,(String *)local_98,
                            "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                            ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x156d);
                      String::deallocate((String *)local_98);
                    }
                  }
                  _InputArray::size((int)param_9);
                  uVar10 = _InputArray::type(param_9,-1);
                  iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
                  local_a8[0] = iVar9;
                  iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
                  if ((0 < iVar9) && (iVar9 <= iVar1)) {
                    local_88[0] = (long)iVar1;
                    /* catch() { ... } // from try @ 0035947c with catch @ 003596fc
                       catch() { ... } // from try @ 003595cc with catch @ 003596fc
                       catch() { ... } // from try @ 00359668 with catch @ 003596fc */
                    if (local_38 == local_40) {
                      std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,
                                 local_38,local_88);
                    }
                    else {
                      if (local_40 != (long *)0x0) {
                        *local_40 = local_88[0];
                      }
                      local_40 = local_40 + 1;
                    }
                    /* try { // try from 00359720 to 00459723 has its CatchHandler @ 00359428 */
                    if ((uVar8 == uVar10) || (param_11 != 0)) {
                    /* catch() { ... } // from try @ 003594f8 with catch @ 00359724 */
                      local_88[0] = _InputArray::offset(param_9,-1);
                      if (local_70 == local_68) {
                        std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                  ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,
                                   local_70,local_88);
                      }
                      else {
                        if (local_70 != (long *)0x0) {
                          *local_70 = local_88[0];
                        }
                        local_70 = local_70 + 1;
                      }
                    /* catch() { ... } // from try @ 003594ac with catch @ 00359754
                       catch() { ... } // from try @ 00359500 with catch @ 00359754 */
                    /* catch() { ... } // from try @ 003597cc with catch @ 0035975c
                       catch() { ... } // from try @ 00359830 with catch @ 0035975c
                       catch() { ... } // from try @ 00359878 with catch @ 0035975c */
                      local_88[0] = _InputArray::step(param_9,-1);
                      if (local_58 == local_50) {
                        std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                  ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,
                                   local_58,local_88);
                      }
                      else {
                        if (local_58 != (long *)0x0) {
                          *local_58 = local_88[0];
                        }
                        local_58 = local_58 + 1;
                      }
                      iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
                      local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
                      if (local_28 == local_20) {
                        std::vector<int,std::allocator<int>>::_M_insert_aux
                                  ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
                      }
                      else {
                        if (local_28 != (int *)0x0) {
                          *local_28 = iVar9;
                        }
                        local_28 = local_28 + 1;
                      }
                    /* try { // try from 003597cc to 004597cf has its CatchHandler @ 0035975c */
                      if (local_10 == local_8) {
                        std::vector<int,std::allocator<int>>::_M_insert_aux
                                  ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
                      }
                      else {
                        if (local_10 != (int *)0x0) {
                          *local_10 = local_a8[0];
                        }
                        local_10 = local_10 + 1;
                      }
                      goto LAB_003597e8;
                    }
                  }
                }
                else {
LAB_003597e8:
                  cVar7 = _InputArray::empty(param_10);
                  if (cVar7 != '\0') {
LAB_003597f8:
                    lVar19 = (long)local_70 - (long)local_78 >> 3;
                    if (lVar19 != 0) {
                      lVar13 = 0;
LAB_00359820:
                      uVar12 = *(ulong *)((long)local_78 + lVar13 * 8);
                      uVar17 = *(ulong *)((long)local_60 + lVar13 * 8);
                    /* try { // try from 00359828 to 0045982b has its CatchHandler @ 00359868 */
                      uVar18 = *(ulong *)((long)local_48 + lVar13 * 8);
                      do {
                        iVar9 = *(int *)((long)local_30 + lVar13 * 4);
                        uVar16 = (ulong)iVar9;
                        uVar2 = 0;
                        if (uVar16 != 0) {
                          uVar2 = uVar12 / uVar16;
                        }
                        if (uVar12 == uVar2 * uVar16) {
                          uVar2 = 0;
                          if (uVar16 != 0) {
                            uVar2 = uVar17 / uVar16;
                          }
                          if (uVar17 == uVar2 * uVar16) {
                            uVar16 = (ulong)local_18[lVar13];
                    /* catch() { ... } // from try @ 00359828 with catch @ 00359868 */
                            uVar2 = 0;
                            if (uVar16 != 0) {
                              uVar2 = uVar18 / uVar16;
                            }
                            if (uVar18 == uVar2 * uVar16) goto code_r0x00359874;
                          }
                        }
                    /* try { // try from 00359830 to 00459833 has its CatchHandler @ 0035975c */
                        *(int *)((long)local_30 + lVar13 * 4) = iVar9 >> 1;
                        local_18[lVar13] = local_18[lVar13] >> 1;
                      } while( true );
                    }
LAB_00359880:
                    iVar9 = *local_18;
                    piVar14 = local_18;
                    if (local_10 != local_18) {
                      while (piVar14 = piVar14 + 1, local_10 != piVar14) {
                        if (*piVar14 < iVar9) {
                          iVar9 = *piVar14;
                        }
                      }
                    }
                    goto LAB_00358b6c;
                  }
                  iVar9 = _InputArray::kind(param_10);
                  if ((iVar9 != 0x10000) && (iVar9 = _InputArray::kind(param_10), iVar9 != 0xa0000))
                  {
                    /* try { // try from 00359b8c to 00459b8f has its CatchHandler @ 00359c50 */
                    /* try { // try from 00359b94 to 00459bc7 has its CatchHandler @ 00359a2c */
                    local_88[0] = 0;
                    local_88[1] = 0;
                    puVar15 = (undefined8 *)String::allocate((String *)local_88,0x1d);
                    uVar6 = LAB_0046e06c;
                    uVar3 = _LAB_0046e068;
                    uVar5 = DAT_0046e058;
                    uVar4 = DAT_0046e050;
                    puVar15[2] = DAT_0046e060;
                    *(undefined4 *)(puVar15 + 3) = uVar3;
                    *(undefined1 *)((long)puVar15 + 0x1c) = uVar6;
                    /* try { // try from 00359be4 to 00459be7 has its CatchHandler @ 00359c3c */
                    *puVar15 = uVar4;
                    puVar15[1] = uVar5;
                    error(-0xd7,(String *)local_88,
                          "int cv::ocl::checkOptimalVectorWidth(const int*, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::ocl::OclVectorStrategy)"
                          ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x156e);
                    /* try { // try from 00359bec to 00459c0f has its CatchHandler @ 00359a2c */
                    String::deallocate((String *)local_88);
                  }
                  _InputArray::size((int)param_10);
                  uVar10 = _InputArray::type(param_10,-1);
                  iVar9 = *(int *)(param_1 + (long)(int)(uVar10 & 7) * 4);
                  local_a8[0] = iVar9;
                    /* try { // try from 00359c2c to 00459c2f has its CatchHandler @ 00359c64 */
                  iVar1 = local_98[0] + (uVar10 >> 3 & 0x1ff) * local_98[0];
                    /* try { // try from 00359c34 to 00459c37 has its CatchHandler @ 00359a2c */
                  if ((0 < iVar9) && (iVar9 <= iVar1)) {
                    /* catch() { ... } // from try @ 00359be4 with catch @ 00359c3c */
                    local_88[0] = (long)iVar1;
                    /* try { // try from 00359c4c to 00459c4f has its CatchHandler @ 00359a2c */
                    /* catch() { ... } // from try @ 00359b8c with catch @ 00359c50 */
                    if (local_38 == local_40) {
                      std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_48,
                                 local_38,local_88);
                    }
                    else {
                      if (local_40 != (long *)0x0) {
                        *local_40 = local_88[0];
                      }
                      local_40 = local_40 + 1;
                    /* try { // try from 00359c60 to 00459c63 has its CatchHandler @ 00359a2c */
                    }
                    /* catch() { ... } // from try @ 00359c2c with catch @ 00359c64 */
                    if ((uVar8 == uVar10) || (param_11 != 0)) {
                    /* try { // try from 00359c74 to 00459c77 has its CatchHandler @ 00359a2c */
                    /* catch() { ... } // from try @ 00359cc8 with catch @ 00359c78
                       catch() { ... } // from try @ 00359cf0 with catch @ 00359c78
                       catch() { ... } // from try @ 00359dd0 with catch @ 00359c78
                       catch() { ... } // from try @ 00359de8 with catch @ 00359c78
                       catch() { ... } // from try @ 00359dfc with catch @ 00359c78 */
                      local_88[0] = _InputArray::offset(param_10,-1);
                      if (local_70 == local_68) {
                        std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                  ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_78,
                                   local_70,local_88);
                      }
                      else {
                        if (local_70 != (long *)0x0) {
                          *local_70 = local_88[0];
                        }
                        local_70 = local_70 + 1;
                      }
                      local_88[0] = _InputArray::step(param_10,-1);
                      if (local_58 == local_50) {
                    /* try { // try from 00359fd0 to 00459fd3 has its CatchHandler @ 0035a144 */
                        std::vector<unsigned_long,std::allocator<unsigned_long>>::_M_insert_aux
                                  ((vector<unsigned_long,std::allocator<unsigned_long>> *)&local_60,
                                   local_58,local_88);
                    /* try { // try from 00359fd8 to 00459ffb has its CatchHandler @ 00359e00 */
                      }
                      else {
                        if (local_58 != (long *)0x0) {
                    /* try { // try from 00359cc8 to 00459ccb has its CatchHandler @ 00359c78 */
                          *local_58 = local_88[0];
                        }
                        local_58 = local_58 + 1;
                      }
                    /* try { // try from 00359ce8 to 00459ceb has its CatchHandler @ 00359dec */
                    /* try { // try from 00359cf0 to 00459dab has its CatchHandler @ 00359c78 */
                      iVar9 = ((uint)(0x88442211L >> ((uVar10 & 7) << 2)) & 0xf) * local_a8[0];
                      local_88[0] = CONCAT44(local_88[0]._4_4_,iVar9);
                      if (local_28 == local_20) {
                        std::vector<int,std::allocator<int>>::_M_insert_aux
                                  ((vector<int,std::allocator<int>> *)&local_30,local_28,local_88);
                      }
                      else {
                        if (local_28 != (int *)0x0) {
                          *local_28 = iVar9;
                        }
                        local_28 = local_28 + 1;
                      }
                      if (local_10 == local_8) {
                        std::vector<int,std::allocator<int>>::_M_insert_aux
                                  ((vector<int,std::allocator<int>> *)&local_18,local_10,local_a8);
                      }
                      else {
                        if (local_10 != (int *)0x0) {
                          *local_10 = local_a8[0];
                        }
                        local_10 = local_10 + 1;
                      }
                      goto LAB_003597f8;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  iVar9 = 1;
LAB_00358b6c:
  if (local_18 != (int *)0x0) {
    operator_delete(local_18);
  }
  if (local_30 != (void *)0x0) {
    operator_delete(local_30);
  }
  if (local_48 != (void *)0x0) {
                    /* try { // try from 00358b88 to 00458b8b has its CatchHandler @ 00358d24 */
    operator_delete(local_48);
  }
  if (local_60 != (void *)0x0) {
    operator_delete(local_60);
  }
  if (local_78 != (void *)0x0) {
    operator_delete(local_78);
  }
  return iVar9;
code_r0x00359874:
  lVar13 = lVar13 + 1;
                    /* try { // try from 00359878 to 0045987b has its CatchHandler @ 0035975c */
                    /* catch() { ... } // from try @ 003598d4 with catch @ 0035987c
                       catch() { ... } // from try @ 00359994 with catch @ 0035987c
                       catch() { ... } // from try @ 003599fc with catch @ 0035987c
                       catch() { ... } // from try @ 00359a14 with catch @ 0035987c
                       catch() { ... } // from try @ 00359a28 with catch @ 0035987c */
  if (lVar13 == lVar19) goto LAB_00359880;
  goto LAB_00359820;
}


==================================================================

### FUNC 0035a0c4 (1468 bytes) name=FUN_0035a0c4

void FUN_0035a0c4(long *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  void *__dest;
  undefined8 *puVar1;
  void *__dest_00;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  undefined8 *puVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  long lVar10;
  size_t sVar11;
  
                    /* try { // try from 0035a0c8 to 0045a0e7 has its CatchHandler @ 00359e00 */
  if (param_3 == 0) {
    return;
  }
  puVar8 = (undefined8 *)param_1[1];
  if (param_3 <= (ulong)(param_1[2] - (long)puVar8 >> 3)) {
    sVar11 = (long)puVar8 - (long)param_2;
    uVar9 = *param_4;
    uVar6 = (long)sVar11 >> 3;
    if (param_3 < uVar6) {
      puVar5 = puVar8 + -param_3;
                    /* try { // try from 0035a120 to 0045a123 has its CatchHandler @ 0035a180 */
                    /* try { // try from 0035a128 to 0045a12b has its CatchHandler @ 00359e00 */
      puVar1 = puVar8;
      if ((long)puVar8 - (long)puVar5 >> 3 != 0) {
        memmove(puVar8,puVar5,(long)puVar8 - (long)puVar5);
        puVar1 = (undefined8 *)param_1[1];
      }
                    /* catch() { ... } // from try @ 0035a0c0 with catch @ 0035a130 */
      sVar11 = (long)puVar5 - (long)param_2;
      param_1[1] = (long)(puVar1 + param_3);
      if ((long)sVar11 >> 3 != 0) {
        memmove((void *)((long)puVar8 - sVar11),param_2,sVar11);
      }
                    /* try { // try from 0035a140 to 0045a143 has its CatchHandler @ 00359e00 */
                    /* catch() { ... } // from try @ 00359fd0 with catch @ 0035a144 */
      if (param_2 == param_2 + param_3) {
        return;
      }
      puVar8 = param_2 + 1;
      uVar3 = (ulong)param_2 >> 3 & 1;
                    /* try { // try from 0035a154 to 0045a157 has its CatchHandler @ 00359e00 */
                    /* catch() { ... } // from try @ 0035a04c with catch @ 0035a158 */
      uVar7 = (ulong)((long)(param_2 + param_3) - (long)puVar8) >> 3;
      uVar6 = uVar7 + 1;
      uVar4 = uVar6;
      if (uVar3 < uVar6) {
        uVar4 = uVar3;
      }
                    /* try { // try from 0035a168 to 0045a16b has its CatchHandler @ 00359e00 */
                    /* catch() { ... } // from try @ 00359f0c with catch @ 0035a16c */
      uVar3 = uVar6;
      if ((uVar6 < 7) || (uVar3 = uVar4, puVar1 = param_2, uVar4 != 0)) {
        *param_2 = uVar9;
                    /* try { // try from 0035a17c to 0045a17f has its CatchHandler @ 00359e00 */
        if (uVar3 != 1) {
                    /* catch() { ... } // from try @ 0035a120 with catch @ 0035a180 */
          param_2[1] = uVar9;
          puVar8 = param_2 + 2;
          if (uVar3 != 2) {
                    /* try { // try from 0035a190 to 0045a193 has its CatchHandler @ 00359e00 */
            param_2[2] = uVar9;
                    /* catch() { ... } // from try @ 0035a1d0 with catch @ 0035a194
                       catch() { ... } // from try @ 0035a22c with catch @ 0035a194
                       catch() { ... } // from try @ 0035a280 with catch @ 0035a194 */
            puVar8 = param_2 + 3;
            if (uVar3 != 3) {
              param_2[3] = uVar9;
              puVar8 = param_2 + 4;
              if (uVar3 != 4) {
                param_2[4] = uVar9;
                puVar8 = param_2 + 5;
                if (uVar3 == 6) {
                  param_2[5] = uVar9;
                  puVar8 = param_2 + 6;
                }
              }
            }
          }
        }
        uVar4 = uVar3;
        puVar1 = puVar8;
        if (uVar6 == uVar3) {
          return;
        }
      }
                    /* try { // try from 0035a1d0 to 0045a1d3 has its CatchHandler @ 0035a194 */
      uVar3 = ((uVar6 - uVar4) - 2 >> 1) + 1;
      if (uVar7 != uVar4) {
        uVar7 = 0;
        puVar8 = param_2 + uVar4;
        do {
          puVar8[1] = uVar9;
          *puVar8 = uVar9;
          uVar7 = uVar7 + 1;
          puVar8 = puVar8 + 2;
        } while (uVar7 < uVar3);
        puVar1 = puVar1 + uVar3 * 2;
        if (uVar6 - uVar4 == uVar3 * 2) {
          return;
        }
      }
      *puVar1 = uVar9;
      return;
    }
    param_3 = param_3 - uVar6;
    puVar1 = puVar8;
    if (param_3 == 0) goto LAB_0035a2d4;
    uVar4 = (ulong)puVar8 >> 3 & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    if (param_3 < 7) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar4 = param_3;
      if (param_3 != 1) {
        puVar8[1] = uVar9;
        puVar1 = puVar8 + 2;
        if (param_3 != 2) {
          puVar8[2] = uVar9;
                    /* catch() { ... } // from try @ 0035a224 with catch @ 0035a270 */
          puVar1 = puVar8 + 3;
          if (param_3 != 3) {
            puVar8[3] = uVar9;
                    /* try { // try from 0035a280 to 0045a283 has its CatchHandler @ 0035a194 */
            puVar1 = puVar8 + 4;
            if (param_3 != 4) {
              puVar8[4] = uVar9;
              puVar1 = puVar8 + 5;
              if (param_3 == 6) {
                puVar8[5] = uVar9;
                puVar1 = puVar8 + 6;
                uVar4 = 6;
              }
            }
          }
        }
      }
LAB_0035a2a8:
      if (param_3 != uVar4) {
        uVar3 = param_3 - uVar4;
        if (param_3 - uVar4 != 1) goto LAB_0035a458;
        *puVar1 = uVar9;
      }
    }
    else {
      if (uVar4 != 0) {
        puVar1 = puVar8 + 1;
        *puVar8 = uVar9;
        uVar4 = 1;
        goto LAB_0035a2a8;
      }
      uVar4 = 0;
      uVar3 = param_3;
LAB_0035a458:
      uVar2 = (uVar3 - 2 >> 1) + 1;
      uVar7 = 0;
      puVar5 = puVar8 + uVar4;
      do {
        puVar5[1] = uVar9;
        *puVar5 = uVar9;
        uVar7 = uVar7 + 1;
        puVar5 = puVar5 + 2;
      } while (uVar7 < uVar2);
      if (uVar3 != uVar2 * 2) {
        puVar1[uVar2 * 2] = uVar9;
      }
    }
    puVar1 = (undefined8 *)param_1[1];
LAB_0035a2d4:
    puVar1 = puVar1 + param_3;
    param_1[1] = (long)puVar1;
    if (uVar6 != 0) {
      memmove(puVar1,param_2,sVar11);
      puVar1 = (undefined8 *)param_1[1];
    }
    param_1[1] = (long)puVar1 + sVar11;
    if (puVar8 == param_2) {
                    /* try { // try from 0035a224 to 0045a227 has its CatchHandler @ 0035a270 */
                    /* try { // try from 0035a22c to 0045a24f has its CatchHandler @ 0035a194 */
      return;
    }
    puVar1 = param_2 + 1;
    uVar4 = (ulong)param_2 >> 3 & 1;
    uVar3 = (ulong)((long)puVar8 - (long)puVar1) >> 3;
    uVar6 = uVar3 + 1;
    if (uVar6 < uVar4) {
      uVar4 = uVar6;
    }
    uVar7 = uVar6;
    if ((uVar6 < 7) || (uVar7 = uVar4, puVar8 = param_2, uVar4 != 0)) {
      *param_2 = uVar9;
      if (uVar7 != 1) {
        param_2[1] = uVar9;
        puVar1 = param_2 + 2;
        if (uVar7 != 2) {
          param_2[2] = uVar9;
          puVar1 = param_2 + 3;
          if (uVar7 != 3) {
            param_2[3] = uVar9;
            puVar1 = param_2 + 4;
            if (uVar7 != 4) {
              param_2[4] = uVar9;
              puVar1 = param_2 + 5;
              if (uVar7 == 6) {
                param_2[5] = uVar9;
                puVar1 = param_2 + 6;
              }
            }
          }
        }
      }
      uVar4 = uVar7;
      puVar8 = puVar1;
      if (uVar6 == uVar7) {
        return;
      }
    }
    uVar7 = ((uVar6 - uVar4) - 2 >> 1) + 1;
    if (uVar3 != uVar4) {
      uVar3 = 0;
      puVar1 = param_2 + uVar4;
      do {
        puVar1[1] = uVar9;
        *puVar1 = uVar9;
        uVar3 = uVar3 + 1;
        puVar1 = puVar1 + 2;
      } while (uVar3 < uVar7);
      puVar8 = puVar8 + uVar7 * 2;
      if (uVar6 - uVar4 == uVar7 * 2) {
        return;
      }
    }
    *puVar8 = uVar9;
    return;
  }
  lVar10 = *param_1;
  uVar6 = (long)puVar8 - lVar10 >> 3;
  if (0x1fffffffffffffff - uVar6 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar4 = uVar6;
  if (uVar6 < param_3) {
    uVar4 = param_3;
  }
  uVar4 = uVar4 + uVar6;
  if ((uVar4 < uVar6) || (0x1fffffffffffffff < uVar4)) {
    lVar10 = (long)param_2 - lVar10;
    uVar4 = 0xfffffffffffffff8;
LAB_0035a490:
    __dest_00 = operator_new(uVar4);
  }
  else {
    lVar10 = (long)param_2 - lVar10;
    if (uVar4 != 0) {
      uVar4 = uVar4 * 8;
      goto LAB_0035a490;
    }
    uVar4 = 0;
    __dest_00 = (void *)0x0;
  }
  puVar8 = (undefined8 *)((long)__dest_00 + lVar10);
  uVar9 = *param_4;
  uVar6 = (ulong)puVar8 >> 3 & 1;
  if (param_3 < uVar6) {
    uVar6 = param_3;
  }
  if (param_3 < 7) {
    *(undefined8 *)((long)__dest_00 + lVar10) = uVar9;
    puVar1 = puVar8 + 1;
    uVar6 = param_3;
    if (1 < param_3) {
      puVar8[1] = uVar9;
      puVar1 = puVar8 + 2;
      if (param_3 != 2) {
        puVar8[2] = uVar9;
        puVar1 = puVar8 + 3;
        if (param_3 != 3) {
          puVar8[3] = uVar9;
          puVar1 = puVar8 + 4;
          if (param_3 != 4) {
            puVar8[4] = uVar9;
            puVar1 = puVar8 + 5;
            if (param_3 == 6) {
              puVar8[5] = uVar9;
              puVar1 = puVar8 + 6;
            }
          }
        }
      }
    }
LAB_0035a514:
    if (param_3 == uVar6) goto LAB_0035a53c;
    uVar3 = param_3 - uVar6;
    puVar8 = puVar1;
    if (param_3 - uVar6 != 1) goto LAB_0035a5b4;
  }
  else {
    if (uVar6 != 0) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar6 = 1;
      goto LAB_0035a514;
    }
    uVar6 = 0;
    uVar3 = param_3;
LAB_0035a5b4:
    uVar2 = (uVar3 - 2 >> 1) + 1;
    uVar7 = 0;
    puVar1 = (undefined8 *)((long)__dest_00 + lVar10 + uVar6 * 8);
    do {
      puVar1[1] = uVar9;
      *puVar1 = uVar9;
      uVar7 = uVar7 + 1;
      puVar1 = puVar1 + 2;
    } while (uVar7 < uVar2);
    puVar1 = puVar8 + uVar2 * 2;
    if (uVar3 == uVar2 * 2) goto LAB_0035a53c;
  }
  *puVar1 = uVar9;
LAB_0035a53c:
  sVar11 = (long)param_2 - *param_1;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest_00,(void *)*param_1,sVar11);
  }
  __dest = (void *)((long)__dest_00 + sVar11 + param_3 * 8);
  sVar11 = param_1[1] - (long)param_2;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest,param_2,sVar11);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)__dest_00;
  param_1[1] = (long)__dest + sVar11;
  param_1[2] = (long)__dest_00 + uVar4;
                    /* catch() { ... } // from try @ 0035a648 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a690 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a7d0 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a848 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a8a8 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a8c0 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a8d4 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a8e8 with catch @ 0035a58c
                       catch() { ... } // from try @ 0035a8fc with catch @ 0035a58c */
  return;
}


==================================================================

### FUNC 0035a680 (632 bytes) name=getPlatfomsInfo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::ocl::getPlatfomsInfo(std::vector<cv::ocl::PlatformInfo, std::allocator<cv::ocl::PlatformInfo>
   >&) */

void cv::ocl::getPlatfomsInfo(vector *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  undefined1 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  void *pvVar12;
  char cVar13;
  int iVar14;
  undefined8 *puVar15;
  long lVar16;
  PlatformInfo *this;
  ulong uVar17;
  ulong uVar18;
  uint local_4c;
  PlatformInfo aPStack_48 [8];
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  void *local_18;
  void *local_10;
  undefined8 local_8;
  
                    /* try { // try from 0035a684 to 0045a687 has its CatchHandler @ 0035a8c4 */
                    /* try { // try from 0035a690 to 0045a78f has its CatchHandler @ 0035a58c */
  local_18 = (void *)0x0;
  local_10 = (void *)0x0;
  local_8 = 0;
  local_4c = 0;
  cVar13 = FUN_00350224();
  if (cVar13 == '\0') {
    FUN_0034d38c(0,0,&local_4c);
  }
  else {
    iVar14 = FUN_0034d38c(0,0,&local_4c);
    if (iVar14 != 0) {
      local_38 = 0;
      local_30 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_38,0x2f);
      uVar7 = DAT_0046e09e;
      uVar6 = DAT_0046e09c;
      uVar5 = _LAB_0046e098;
      uVar4 = _DAT_0046e088;
      uVar3 = DAT_0046e080;
      uVar2 = DAT_0046e078;
      uVar1 = DAT_0046e070;
                    /* try { // try from 0035a8a0 to 0045a8a3 has its CatchHandler @ 0035a8b0 */
                    /* try { // try from 0035a8a8 to 0045a8ab has its CatchHandler @ 0035a58c */
                    /* catch() { ... } // from try @ 0035a8a0 with catch @ 0035a8b0 */
      puVar15[4] = DAT_0046e090;
                    /* try { // try from 0035a8c0 to 0045a8c3 has its CatchHandler @ 0035a58c */
      *(undefined4 *)(puVar15 + 5) = uVar5;
                    /* catch() { ... } // from try @ 0035a684 with catch @ 0035a8c4 */
      *(undefined2 *)((long)puVar15 + 0x2c) = uVar6;
      *(undefined1 *)((long)puVar15 + 0x2e) = uVar7;
      *puVar15 = uVar1;
      puVar15[1] = uVar2;
      puVar15[2] = uVar3;
      puVar15[3] = uVar4;
                    /* try { // try from 0035a8d4 to 0045a8d7 has its CatchHandler @ 0035a58c */
      error(-0xd7,(String *)&local_38,"void cv::ocl::getPlatforms(std::vector<_cl_platform_id*>&)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x149c);
                    /* catch() { ... } // from try @ 0035a7c8 with catch @ 0035a8d8 */
      String::deallocate((String *)&local_38);
    }
  }
  pvVar12 = local_18;
  if (local_4c != 0) {
    uVar18 = (ulong)local_4c;
    local_40 = 0;
    uVar17 = (long)local_10 - (long)local_18 >> 3;
    if (uVar17 < uVar18) {
                    /* try { // try from 0035a8e8 to 0045a8eb has its CatchHandler @ 0035a58c */
                    /* catch() { ... } // from try @ 0035a840 with catch @ 0035a8ec */
      FUN_0035a0c4(&local_18,local_10,uVar18 - uVar17,&local_40);
    }
    else if (uVar18 < uVar17) {
      local_10 = (void *)((long)local_18 + uVar18 * 8);
    }
    cVar13 = FUN_00350224();
    if (cVar13 == '\0') {
      FUN_0034d38c(local_4c,local_18,&local_4c);
    }
    else {
      iVar14 = FUN_0034d38c(local_4c,local_18,&local_4c);
      if (iVar14 != 0) {
        local_28 = 0;
        local_20 = 0;
        puVar15 = (undefined8 *)String::allocate((String *)&local_28,0x41);
        uVar9 = DAT_0046e0c8;
        uVar8 = _DAT_0046e0c0;
        uVar4 = DAT_0046e0b8;
        uVar3 = DAT_0046e0b0;
        uVar2 = DAT_0046e0a8;
        uVar1 = DAT_0046e0a0;
        *(undefined1 *)(puVar15 + 8) = DAT_0046e0e0;
        uVar11 = DAT_0046e0d8;
        uVar10 = DAT_0046e0d0;
                    /* try { // try from 0035a840 to 0045a843 has its CatchHandler @ 0035a8ec */
        *puVar15 = uVar1;
        puVar15[1] = uVar2;
                    /* try { // try from 0035a848 to 0045a867 has its CatchHandler @ 0035a58c */
        puVar15[2] = uVar3;
        puVar15[3] = uVar4;
        puVar15[4] = uVar8;
        puVar15[5] = uVar9;
        puVar15[6] = uVar10;
        puVar15[7] = uVar11;
        error(-0xd7,(String *)&local_28,"void cv::ocl::getPlatforms(std::vector<_cl_platform_id*>&)"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x14a5);
        String::deallocate((String *)&local_28);
      }
    }
    uVar17 = 0;
    pvVar12 = local_10;
    if ((long)local_10 - (long)local_18 >> 3 != 0) {
      do {
        PlatformInfo::PlatformInfo(aPStack_48,(void *)((long)local_18 + uVar17 * 8));
        this = *(PlatformInfo **)(param_1 + 8);
        if (this == *(PlatformInfo **)(param_1 + 0x10)) {
                    /* try { // try from 0035a7c8 to 0045a7cb has its CatchHandler @ 0035a8d8 */
                    /* try { // try from 0035a7d0 to 0045a7f7 has its CatchHandler @ 0035a58c */
          std::vector<cv::ocl::PlatformInfo,std::allocator<cv::ocl::PlatformInfo>>::_M_insert_aux
                    ((vector<cv::ocl::PlatformInfo,std::allocator<cv::ocl::PlatformInfo>> *)param_1,
                     this,aPStack_48);
        }
        else {
          lVar16 = 0;
          if (this != (PlatformInfo *)0x0) {
            PlatformInfo::PlatformInfo(this,aPStack_48);
            lVar16 = *(long *)(param_1 + 8);
          }
          *(long *)(param_1 + 8) = lVar16 + 8;
        }
        PlatformInfo::~PlatformInfo(aPStack_48);
        uVar17 = uVar17 + 1;
        pvVar12 = local_10;
      } while (uVar17 < (ulong)((long)local_10 - (long)local_18 >> 3));
    }
  }
  local_10 = pvVar12;
  if (local_18 != (void *)0x0) {
    operator_delete(local_18);
  }
  return;
}


==================================================================

### FUNC 0035a940 (1468 bytes) name=FUN_0035a940

void FUN_0035a940(long *param_1,undefined8 *param_2,ulong param_3,undefined8 *param_4)

{
  void *__dest;
  undefined8 *puVar1;
  void *__dest_00;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  undefined8 *puVar5;
  ulong uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  long lVar10;
  size_t sVar11;
  
                    /* try { // try from 0035a944 to 0045a947 has its CatchHandler @ 0035a900 */
  if (param_3 == 0) {
    return;
  }
  puVar8 = (undefined8 *)param_1[1];
                    /* try { // try from 0035a964 to 0045a967 has its CatchHandler @ 0035aa04 */
                    /* try { // try from 0035a96c to 0045a9c3 has its CatchHandler @ 0035a900 */
  if (param_3 <= (ulong)(param_1[2] - (long)puVar8 >> 3)) {
    sVar11 = (long)puVar8 - (long)param_2;
    uVar9 = *param_4;
    uVar6 = (long)sVar11 >> 3;
    if (param_3 < uVar6) {
      puVar5 = puVar8 + -param_3;
      puVar1 = puVar8;
      if ((long)puVar8 - (long)puVar5 >> 3 != 0) {
        memmove(puVar8,puVar5,(long)puVar8 - (long)puVar5);
                    /* try { // try from 0035aca0 to 0045aca3 has its CatchHandler @ 0035aaf8 */
        puVar1 = (undefined8 *)param_1[1];
                    /* catch() { ... } // from try @ 0035ae98 with catch @ 0035aca4
                       catch() { ... } // from try @ 0035b08c with catch @ 0035aca4
                       catch() { ... } // from try @ 0035b0b4 with catch @ 0035aca4 */
      }
      sVar11 = (long)puVar5 - (long)param_2;
      param_1[1] = (long)(puVar1 + param_3);
      if ((long)sVar11 >> 3 != 0) {
        memmove((void *)((long)puVar8 - sVar11),param_2,sVar11);
      }
      if (param_2 == param_2 + param_3) {
        return;
      }
      puVar8 = param_2 + 1;
      uVar3 = (ulong)param_2 >> 3 & 1;
      uVar7 = (ulong)((long)(param_2 + param_3) - (long)puVar8) >> 3;
      uVar6 = uVar7 + 1;
                    /* try { // try from 0035a9e0 to 0045a9e3 has its CatchHandler @ 0035a9f0 */
      uVar4 = uVar6;
      if (uVar3 < uVar6) {
        uVar4 = uVar3;
      }
                    /* try { // try from 0035a9e8 to 0045a9eb has its CatchHandler @ 0035a900 */
      uVar3 = uVar6;
      if ((uVar6 < 7) || (uVar3 = uVar4, puVar1 = param_2, uVar4 != 0)) {
                    /* catch() { ... } // from try @ 0035a9e0 with catch @ 0035a9f0 */
        *param_2 = uVar9;
        if (uVar3 != 1) {
          param_2[1] = uVar9;
                    /* try { // try from 0035aa00 to 0045aa03 has its CatchHandler @ 0035a900 */
                    /* catch() { ... } // from try @ 0035a964 with catch @ 0035aa04 */
          puVar8 = param_2 + 2;
          if (uVar3 != 2) {
            param_2[2] = uVar9;
                    /* try { // try from 0035aa14 to 0045aa17 has its CatchHandler @ 0035a900 */
            puVar8 = param_2 + 3;
                    /* catch() { ... } // from try @ 0035aa54 with catch @ 0035aa18
                       catch() { ... } // from try @ 0035aaa8 with catch @ 0035aa18
                       catch() { ... } // from try @ 0035aaf4 with catch @ 0035aa18 */
            if (uVar3 != 3) {
              param_2[3] = uVar9;
              puVar8 = param_2 + 4;
              if (uVar3 != 4) {
                param_2[4] = uVar9;
                puVar8 = param_2 + 5;
                if (uVar3 == 6) {
                  param_2[5] = uVar9;
                  puVar8 = param_2 + 6;
                }
              }
            }
          }
        }
        uVar4 = uVar3;
        puVar1 = puVar8;
        if (uVar6 == uVar3) {
          return;
        }
      }
                    /* try { // try from 0035aa54 to 0045aa57 has its CatchHandler @ 0035aa18 */
      uVar3 = ((uVar6 - uVar4) - 2 >> 1) + 1;
      if (uVar7 != uVar4) {
        uVar7 = 0;
        puVar8 = param_2 + uVar4;
        do {
          puVar8[1] = uVar9;
          *puVar8 = uVar9;
          uVar7 = uVar7 + 1;
          puVar8 = puVar8 + 2;
        } while (uVar7 < uVar3);
        puVar1 = puVar1 + uVar3 * 2;
        if (uVar6 - uVar4 == uVar3 * 2) {
          return;
        }
      }
      *puVar1 = uVar9;
      return;
    }
    param_3 = param_3 - uVar6;
    puVar1 = puVar8;
    if (param_3 == 0) goto LAB_0035ab50;
    uVar4 = (ulong)puVar8 >> 3 & 1;
    if (param_3 < uVar4) {
      uVar4 = param_3;
    }
    if (param_3 < 7) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar4 = param_3;
      if (param_3 != 1) {
        puVar8[1] = uVar9;
        puVar1 = puVar8 + 2;
                    /* catch() { ... } // from try @ 0035aaa0 with catch @ 0035aae4 */
        if (param_3 != 2) {
          puVar8[2] = uVar9;
          puVar1 = puVar8 + 3;
                    /* try { // try from 0035aaf4 to 0045aaf7 has its CatchHandler @ 0035aa18 */
          if (param_3 != 3) {
                    /* catch() { ... } // from try @ 0035ab38 with catch @ 0035aaf8
                       catch() { ... } // from try @ 0035ab84 with catch @ 0035aaf8
                       catch() { ... } // from try @ 0035ac68 with catch @ 0035aaf8
                       catch() { ... } // from try @ 0035ac8c with catch @ 0035aaf8
                       catch() { ... } // from try @ 0035aca0 with catch @ 0035aaf8 */
            puVar8[3] = uVar9;
            puVar1 = puVar8 + 4;
            if (param_3 != 4) {
              puVar8[4] = uVar9;
              puVar1 = puVar8 + 5;
              if (param_3 == 6) {
                puVar8[5] = uVar9;
                puVar1 = puVar8 + 6;
                uVar4 = 6;
              }
            }
          }
        }
      }
LAB_0035ab24:
      if (param_3 != uVar4) {
        uVar3 = param_3 - uVar4;
                    /* try { // try from 0035ab38 to 0045ab3b has its CatchHandler @ 0035aaf8 */
        if (param_3 - uVar4 != 1) goto LAB_0035acd4;
        *puVar1 = uVar9;
      }
    }
    else {
      if (uVar4 != 0) {
        puVar1 = puVar8 + 1;
        *puVar8 = uVar9;
        uVar4 = 1;
        goto LAB_0035ab24;
      }
      uVar4 = 0;
      uVar3 = param_3;
LAB_0035acd4:
      uVar2 = (uVar3 - 2 >> 1) + 1;
      uVar7 = 0;
      puVar5 = puVar8 + uVar4;
      do {
        puVar5[1] = uVar9;
        *puVar5 = uVar9;
        uVar7 = uVar7 + 1;
        puVar5 = puVar5 + 2;
      } while (uVar7 < uVar2);
      if (uVar3 != uVar2 * 2) {
        puVar1[uVar2 * 2] = uVar9;
      }
    }
    puVar1 = (undefined8 *)param_1[1];
LAB_0035ab50:
    puVar1 = puVar1 + param_3;
    param_1[1] = (long)puVar1;
    if (uVar6 != 0) {
      memmove(puVar1,param_2,sVar11);
                    /* try { // try from 0035ae98 to 0045b04b has its CatchHandler @ 0035aca4 */
      puVar1 = (undefined8 *)param_1[1];
    }
    param_1[1] = (long)puVar1 + sVar11;
    if (puVar8 == param_2) {
                    /* try { // try from 0035aaa0 to 0045aaa3 has its CatchHandler @ 0035aae4 */
                    /* try { // try from 0035aaa8 to 0045aacf has its CatchHandler @ 0035aa18 */
      return;
    }
    puVar1 = param_2 + 1;
    uVar4 = (ulong)param_2 >> 3 & 1;
    uVar3 = (ulong)((long)puVar8 - (long)puVar1) >> 3;
                    /* try { // try from 0035ab7c to 0045ab7f has its CatchHandler @ 0035ac90 */
    uVar6 = uVar3 + 1;
                    /* try { // try from 0035ab84 to 0045ac1f has its CatchHandler @ 0035aaf8 */
    if (uVar6 < uVar4) {
      uVar4 = uVar6;
    }
    uVar7 = uVar6;
    if ((uVar6 < 7) || (uVar7 = uVar4, puVar8 = param_2, uVar4 != 0)) {
      *param_2 = uVar9;
      if (uVar7 != 1) {
        param_2[1] = uVar9;
        puVar1 = param_2 + 2;
        if (uVar7 != 2) {
          param_2[2] = uVar9;
          puVar1 = param_2 + 3;
          if (uVar7 != 3) {
            param_2[3] = uVar9;
            puVar1 = param_2 + 4;
            if (uVar7 != 4) {
              param_2[4] = uVar9;
              puVar1 = param_2 + 5;
              if (uVar7 == 6) {
                param_2[5] = uVar9;
                puVar1 = param_2 + 6;
              }
            }
          }
        }
      }
      uVar4 = uVar7;
      puVar8 = puVar1;
      if (uVar6 == uVar7) {
        return;
      }
    }
    uVar7 = ((uVar6 - uVar4) - 2 >> 1) + 1;
    if (uVar3 != uVar4) {
      uVar3 = 0;
      puVar1 = param_2 + uVar4;
      do {
        puVar1[1] = uVar9;
        *puVar1 = uVar9;
        uVar3 = uVar3 + 1;
        puVar1 = puVar1 + 2;
      } while (uVar3 < uVar7);
      puVar8 = puVar8 + uVar7 * 2;
      if (uVar6 - uVar4 == uVar7 * 2) {
        return;
      }
    }
    *puVar8 = uVar9;
    return;
  }
  lVar10 = *param_1;
  uVar6 = (long)puVar8 - lVar10 >> 3;
                    /* try { // try from 0035ac60 to 0045ac63 has its CatchHandler @ 0035ac7c */
                    /* try { // try from 0035ac68 to 0045ac6b has its CatchHandler @ 0035aaf8 */
  if (0x1fffffffffffffff - uVar6 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar4 = uVar6;
  if (uVar6 < param_3) {
    uVar4 = param_3;
  }
  uVar4 = uVar4 + uVar6;
                    /* catch() { ... } // from try @ 0035ac60 with catch @ 0035ac7c */
  if ((uVar4 < uVar6) || (0x1fffffffffffffff < uVar4)) {
    lVar10 = (long)param_2 - lVar10;
    uVar4 = 0xfffffffffffffff8;
LAB_0035ad0c:
    __dest_00 = operator_new(uVar4);
  }
  else {
    lVar10 = (long)param_2 - lVar10;
                    /* try { // try from 0035ac8c to 0045ac8f has its CatchHandler @ 0035aaf8 */
    if (uVar4 != 0) {
      uVar4 = uVar4 * 8;
      goto LAB_0035ad0c;
    }
    uVar4 = 0;
    __dest_00 = (void *)0x0;
                    /* catch() { ... } // from try @ 0035ab7c with catch @ 0035ac90 */
  }
  puVar8 = (undefined8 *)((long)__dest_00 + lVar10);
  uVar9 = *param_4;
  uVar6 = (ulong)puVar8 >> 3 & 1;
  if (param_3 < uVar6) {
    uVar6 = param_3;
  }
  if (param_3 < 7) {
    *(undefined8 *)((long)__dest_00 + lVar10) = uVar9;
    puVar1 = puVar8 + 1;
    uVar6 = param_3;
    if (1 < param_3) {
      puVar8[1] = uVar9;
      puVar1 = puVar8 + 2;
      if (param_3 != 2) {
        puVar8[2] = uVar9;
        puVar1 = puVar8 + 3;
        if (param_3 != 3) {
          puVar8[3] = uVar9;
          puVar1 = puVar8 + 4;
          if (param_3 != 4) {
            puVar8[4] = uVar9;
            puVar1 = puVar8 + 5;
            if (param_3 == 6) {
              puVar8[5] = uVar9;
              puVar1 = puVar8 + 6;
            }
          }
        }
      }
    }
LAB_0035ad90:
    if (param_3 == uVar6) goto LAB_0035adb8;
    uVar3 = param_3 - uVar6;
    puVar8 = puVar1;
    if (param_3 - uVar6 != 1) goto LAB_0035ae30;
  }
  else {
    if (uVar6 != 0) {
      puVar1 = puVar8 + 1;
      *puVar8 = uVar9;
      uVar6 = 1;
      goto LAB_0035ad90;
    }
    uVar6 = 0;
    uVar3 = param_3;
LAB_0035ae30:
    uVar2 = (uVar3 - 2 >> 1) + 1;
    uVar7 = 0;
    puVar1 = (undefined8 *)((long)__dest_00 + lVar10 + uVar6 * 8);
    do {
      puVar1[1] = uVar9;
      *puVar1 = uVar9;
      uVar7 = uVar7 + 1;
      puVar1 = puVar1 + 2;
    } while (uVar7 < uVar2);
    puVar1 = puVar8 + uVar2 * 2;
    if (uVar3 == uVar2 * 2) goto LAB_0035adb8;
  }
  *puVar1 = uVar9;
LAB_0035adb8:
  sVar11 = (long)param_2 - *param_1;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest_00,(void *)*param_1,sVar11);
  }
  __dest = (void *)((long)__dest_00 + sVar11 + param_3 * 8);
  sVar11 = param_1[1] - (long)param_2;
  if ((long)sVar11 >> 3 != 0) {
    memmove(__dest,param_2,sVar11);
  }
  if ((void *)*param_1 != (void *)0x0) {
    operator_delete((void *)*param_1);
  }
  *param_1 = (long)__dest_00;
  param_1[1] = (long)__dest + sVar11;
  param_1[2] = (long)__dest_00 + uVar4;
  return;
}


==================================================================

### FUNC 0035aefc (5152 bytes) name=FUN_0035aefc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined8 FUN_0035aefc(void)

{
  ulong uVar1;
  uint uVar2;
  bool bVar3;
  long *plVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  undefined1 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  long lVar14;
  long *plVar15;
  char cVar16;
  int iVar17;
  int iVar18;
  char *__s1;
  ulong uVar19;
  long lVar20;
  ulong uVar21;
  char *pcVar22;
  long lVar23;
  long *plVar24;
  long *plVar25;
  size_t sVar26;
  undefined8 *puVar27;
  bool bVar28;
  int *piVar29;
  undefined *puVar30;
  ulong uVar31;
  uint uVar32;
  undefined8 uVar33;
  long lVar34;
  undefined8 uVar35;
  long lVar36;
  ulong uVar37;
  ulong uVar38;
  uint uVar39;
  undefined8 local_9a8;
  ulong local_950;
  undefined1 auStack_928 [8];
  undefined1 auStack_920 [8];
  char *local_918;
  char *local_910;
  long local_908;
  long local_900;
  long local_8f8;
  long local_8f0;
  long local_8e8;
  undefined8 local_8e0;
  long local_8d8;
  long local_8d0;
  undefined8 local_8c8;
  undefined8 local_8c0;
  long local_8b8;
  undefined8 local_8b0;
  undefined8 local_8a8;
  undefined8 local_8a0;
  undefined *local_898;
  undefined8 local_890;
  undefined8 local_888;
  undefined8 local_880;
  long *local_878;
  long *local_870;
  undefined8 local_868;
  void *local_860;
  long local_858;
  undefined8 local_850;
  void *local_848;
  void *local_840;
  undefined8 local_838;
  long *local_830;
  ulong local_828;
  long alStack_820 [129];
  long *local_418;
  long *local_410;
  long local_408 [129];
  
  local_918 = PTR_DAT_00501f30 + 0x18;
  local_878 = (long *)0x0;
  local_870 = (long *)0x0;
  local_868 = 0;
  local_910 = local_918;
  __s1 = getenv("OPENCV_OPENCL_DEVICE");
  if (__s1 != (char *)0x0) {
    iVar17 = strcmp(__s1,"disabled");
    if (iVar17 != 0) {
                    /* try { // try from 0035b084 to 0045b087 has its CatchHandler @ 0035b0a4 */
                    /* try { // try from 0035b08c to 0045b08f has its CatchHandler @ 0035aca4 */
      FUN_00410a08(&local_860,__s1,&local_848);
                    /* catch() { ... } // from try @ 0035b084 with catch @ 0035b0a4 */
      local_418 = (long *)0x0;
      local_410 = (long *)0x0;
      local_408[0] = 0;
                    /* try { // try from 0035b0b4 to 0045b0b7 has its CatchHandler @ 0035aca4 */
      FUN_00357778(&local_860,0x3a,&local_418);
                    /* catch() { ... } // from try @ 0035b108 with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b15c with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b1f8 with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b2ac with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b384 with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b458 with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b46c with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b480 with catch @ 0035b0b8
                       catch() { ... } // from try @ 0035b494 with catch @ 0035b0b8 */
      uVar19 = (long)local_410 - (long)local_418 >> 3;
      if (uVar19 < 4) {
        if (uVar19 == 3) {
          FUN_004144f8(&local_910,local_418 + 2);
          uVar19 = (long)local_410 - (long)local_418 >> 3;
        }
        if (1 < uVar19) {
          FUN_00357778(local_418 + 1,0x7c,
                       (vector<std::string,std::allocator<std::string>> *)&local_878);
          uVar19 = (long)local_410 - (long)local_418 >> 3;
        }
        if (uVar19 == 0) {
                    /* try { // try from 0035b108 to 0045b10b has its CatchHandler @ 0035b0b8 */
          bVar28 = false;
          plVar25 = local_418;
          plVar24 = local_410;
          plVar4 = local_410;
        }
        else {
          FUN_004144f8(&local_918);
          bVar28 = false;
          plVar25 = local_418;
          plVar24 = local_410;
          plVar4 = local_410;
        }
      }
      else {
        FUN_003f1ad0(PTR_DAT_00501c50,"ERROR: Invalid configuration string for OpenCL device",0x35);
        plVar25 = *(long **)(PTR_DAT_00501c50 + *(long *)(*(long *)PTR_DAT_00501c50 + -0x18) + 0xf0)
        ;
        if (plVar25 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f118();
        }
        if ((char)plVar25[7] == '\0') {
          FUN_003d14e0(plVar25);
          uVar19 = 10;
          if (*(code **)(*plVar25 + 0x30) != FUN_0034d2a0) {
            cVar16 = (**(code **)(*plVar25 + 0x30))(plVar25,10);
            uVar19 = (ulong)(uint)(int)cVar16;
          }
        }
        else {
          uVar19 = (ulong)*(char *)((long)plVar25 + 0x43);
        }
        FUN_003f1564(PTR_DAT_00501c50,uVar19);
        FUN_003f0db8();
        bVar28 = true;
        plVar25 = local_418;
        plVar24 = local_410;
        plVar4 = local_410;
      }
      for (; plVar15 = local_410, plVar25 != local_410; plVar25 = plVar25 + 1) {
        puVar30 = (undefined *)(*plVar25 + -0x18);
        local_410 = plVar4;
        if (puVar30 != PTR_DAT_00501f30) {
          piVar29 = (int *)(*plVar25 + -8);
          do {
            iVar17 = *piVar29;
            cVar16 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar29,0x10);
            if (bVar3) {
              *piVar29 = iVar17 + -1;
              cVar16 = ExclusiveMonitorsStatus();
            }
          } while (cVar16 != '\0');
                    /* try { // try from 0035b154 to 0045b157 has its CatchHandler @ 0035b448 */
          if (iVar17 < 1) {
                    /* try { // try from 0035b15c to 0045b1af has its CatchHandler @ 0035b0b8 */
            operator_delete(puVar30);
          }
        }
        plVar24 = local_418;
        plVar4 = local_410;
        local_410 = plVar15;
      }
      local_410 = plVar4;
      if (plVar24 != (long *)0x0) {
        operator_delete(plVar24);
      }
      if ((undefined *)((long)local_860 + -0x18) != PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 0035c218 with catch @ 0035c150
                       catch() { ... } // from try @ 0035c26c with catch @ 0035c150
                       catch() { ... } // from try @ 0035c288 with catch @ 0035c150 */
        FUN_0034d640((undefined *)((long)local_860 + -0x18),&local_418);
      }
      if (!bVar28) goto LAB_0035b1f0;
    }
LAB_0035af94:
    uVar33 = 0;
    plVar24 = local_878;
    plVar4 = local_870;
    plVar15 = local_870;
    plVar25 = local_870;
    goto joined_r0x0035afa8;
  }
LAB_0035b1f0:
                    /* try { // try from 0035b1f0 to 0045b1f3 has its CatchHandler @ 0035b45c */
                    /* try { // try from 0035b1f8 to 0045b263 has its CatchHandler @ 0035b0b8 */
  if (*(long *)(local_910 + -0x18) == 1) {
    uVar19 = 0;
    pcVar22 = local_910;
    do {
      if (-1 < *(int *)(pcVar22 + -8)) {
        FUN_00412cf8(&local_910);
        pcVar22 = local_910;
      }
      if (9 < (int)pcVar22[uVar19] - 0x30U) goto LAB_0035b244;
      uVar19 = uVar19 + 1;
    } while (uVar19 < *(ulong *)(pcVar22 + -0x18));
    iVar17 = atoi(pcVar22);
                    /* catch() { ... } // from try @ 0035b154 with catch @ 0035b448 */
    if (iVar17 < 0) goto LAB_0035af94;
    bVar28 = true;
                    /* try { // try from 0035b458 to 0045b45b has its CatchHandler @ 0035b0b8 */
  }
  else {
LAB_0035b244:
    bVar28 = false;
    iVar17 = -1;
  }
  local_860 = (void *)0x0;
  local_858 = 0;
  local_850 = 0;
  local_418 = (long *)((ulong)local_418 & 0xffffffff00000000);
  cVar16 = FUN_00350224();
  if (cVar16 == '\0') {
    FUN_0034d38c(0,0,&local_418);
  }
  else {
    iVar18 = FUN_0034d38c(0,0,&local_418);
    if (iVar18 != 0) {
      local_8c8 = 0;
      local_8c0 = 0;
      puVar27 = (undefined8 *)cv::String::allocate((String *)&local_8c8,0x2f);
      uVar9 = DAT_0046e09e;
      uVar8 = DAT_0046e09c;
      uVar7 = _LAB_0046e098;
      uVar6 = _DAT_0046e088;
      uVar5 = DAT_0046e080;
      uVar35 = DAT_0046e078;
      uVar33 = DAT_0046e070;
      puVar27[4] = DAT_0046e090;
      *(undefined4 *)(puVar27 + 5) = uVar7;
      *(undefined2 *)((long)puVar27 + 0x2c) = uVar8;
      *(undefined1 *)((long)puVar27 + 0x2e) = uVar9;
      *puVar27 = uVar33;
      puVar27[1] = uVar35;
      puVar27[2] = uVar5;
      puVar27[3] = uVar6;
      cv::error(-0xd7,(String *)&local_8c8,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x8f1);
      cv::String::deallocate((String *)&local_8c8);
    }
  }
  if ((uint)local_418 != 0) {
                    /* try { // try from 0035b2a4 to 0045b2a7 has its CatchHandler @ 0035b470 */
                    /* try { // try from 0035b2ac to 0045b33b has its CatchHandler @ 0035b0b8 */
    FUN_00356f8c(&local_860,(ulong)local_418 & 0xffffffff,0);
    cVar16 = FUN_00350224();
    if (cVar16 == '\0') {
      FUN_0034d38c((ulong)local_418 & 0xffffffff,local_860,&local_418);
    }
    else {
      iVar18 = FUN_0034d38c((ulong)local_418 & 0xffffffff,local_860,&local_418);
      if (iVar18 != 0) {
        local_8b8 = 0;
        local_8b0 = 0;
        puVar27 = (undefined8 *)cv::String::allocate((String *)&local_8b8,0x41);
        uVar11 = DAT_0046e0c8;
        uVar10 = _DAT_0046e0c0;
        uVar6 = DAT_0046e0b8;
        uVar5 = DAT_0046e0b0;
        uVar35 = DAT_0046e0a8;
        uVar33 = DAT_0046e0a0;
                    /* try { // try from 0035c218 to 0045c21b has its CatchHandler @ 0035c150 */
        *(undefined1 *)(puVar27 + 8) = DAT_0046e0e0;
        uVar13 = DAT_0046e0d8;
        uVar12 = DAT_0046e0d0;
        *puVar27 = uVar33;
        puVar27[1] = uVar35;
        puVar27[2] = uVar5;
        puVar27[3] = uVar6;
        puVar27[4] = uVar10;
        puVar27[5] = uVar11;
        puVar27[6] = uVar12;
        puVar27[7] = uVar13;
        cv::error(-0xd7,(String *)&local_8b8,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x8f6);
        cv::String::deallocate((String *)&local_8b8);
      }
    }
    FUN_00356f8c(&local_860,(ulong)local_418 & 0xffffffff,0);
    if (*(long *)(local_918 + -0x18) == 0) {
                    /* try { // try from 0035b46c to 0045b46f has its CatchHandler @ 0035b0b8 */
      uVar39 = 0xffffffff;
LAB_0035b470:
                    /* catch() { ... } // from try @ 0035b2a4 with catch @ 0035b470 */
                    /* try { // try from 0035b480 to 0045b483 has its CatchHandler @ 0035b0b8 */
                    /* catch() { ... } // from try @ 0035b37c with catch @ 0035b484 */
      if ((long)local_870 - (long)local_878 >> 3 != 0) {
LAB_0035b6a4:
        local_950 = 0;
        uVar2 = uVar39;
        if ((int)uVar39 < 0) {
          uVar2 = 0;
        }
        uVar19 = (long)iVar17;
        if (!bVar28) {
          uVar19 = 0;
        }
        uVar21 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
        lVar34 = NEON_shl(uVar19,3);
LAB_0035b730:
        FUN_00414378(&local_8b8,local_878 + local_950);
        if ((*(int *)(local_8b8 + -8) < 0) ||
           (FUN_00412cf8(&local_8b8), lVar20 = local_8b8, *(int *)(local_8b8 + -8) < 0)) {
          lVar23 = local_8b8 + *(long *)(local_8b8 + -0x18);
          lVar20 = local_8b8;
        }
        else {
          FUN_00412cf8(&local_8b8);
          lVar23 = local_8b8 + *(long *)(local_8b8 + -0x18);
          if (-1 < *(int *)(local_8b8 + -8)) {
            FUN_00412cf8(&local_8b8);
          }
        }
        lVar14 = local_8b8;
        lVar36 = 0;
        if (lVar20 != lVar23) {
          do {
            iVar18 = tolower((int)*(char *)(lVar20 + lVar36));
            *(char *)(lVar14 + lVar36) = (char)iVar18;
            lVar36 = lVar36 + 1;
          } while (lVar36 != lVar23 - lVar20);
        }
        iVar18 = FUN_00412830(&local_8b8,&DAT_0046e218);
        if (((iVar18 == 0) || (iVar18 = FUN_00412830(&local_8b8,&DAT_0046e220), iVar18 == 0)) ||
           (iVar18 = FUN_00412830(&local_8b8,&DAT_0046e228), iVar18 == 0)) {
          uVar33 = 4;
        }
        else {
                    /* try { // try from 0035bf90 to 0045bf93 has its CatchHandler @ 0035c128 */
                    /* try { // try from 0035bf98 to 0045c0a3 has its CatchHandler @ 0035bc54 */
          iVar18 = FUN_00412830(&local_8b8,&DAT_0046e340);
          uVar33 = 2;
          if (iVar18 != 0) {
            iVar18 = FUN_00412830(&local_8b8,"accelerator");
            uVar33 = 8;
            if (iVar18 != 0) {
              iVar18 = FUN_00412830(&local_8b8,&DAT_0046e240);
              if (iVar18 != 0) {
                uVar33 = FUN_003f1f84(PTR_DAT_00501c50,
                                      "ERROR: Unsupported device type for OpenCL device (GPU, CPU, ACCELERATOR): "
                                     );
                FUN_003f1ad0(uVar33,local_878[local_950],
                             *(undefined8 *)(local_878[local_950] + -0x18));
                FUN_003f18d4();
                if ((undefined *)(local_8b8 + -0x18) != PTR_DAT_00501f30) {
                  FUN_0034d640((undefined *)(local_8b8 + -0x18),&local_418);
                }
                goto LAB_0035c0f0;
              }
              uVar33 = 0xffffffffffffffff;
            }
          }
        }
        local_848 = (void *)0x0;
        local_840 = (void *)0x0;
        local_838 = 0;
        lVar20 = lVar34;
        uVar38 = uVar19;
        if (((int)uVar39 < 0 || uVar39 == uVar2) &&
           ((int)uVar2 < (int)(local_858 - (long)local_860 >> 3))) {
          local_418 = (long *)((ulong)local_418 & 0xffffffff00000000);
          uVar35 = *(undefined8 *)((long)local_860 + uVar21);
          uVar37 = uVar21;
          uVar32 = uVar2;
          if (DAT_00532120 == (code *)0x0) goto LAB_0035b9c8;
LAB_0035b854:
                    /* try { // try from 0035b85c to 0045b85f has its CatchHandler @ 0035bb00 */
          iVar18 = (*DAT_00532120)(uVar35,uVar33,0,0,&local_418);
          do {
            if (DAT_00532119 == '\0') {
                    /* try { // try from 0035bbac to 0045bc3b has its CatchHandler @ 0035bb08 */
              DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
              DAT_00532119 = '\x01';
            }
                    /* try { // try from 0035b884 to 0045b8a7 has its CatchHandler @ 0035baf8 */
            if ((DAT_005329c8 != '\0') && (1 < iVar18 + 1U)) {
              local_8a8 = 0;
              local_8a0 = 0;
              pcVar22 = (char *)cv::String::allocate((String *)&local_8a8,0x1b);
              cVar16 = s_status____0____status_____1_0046e298[0x1a];
              uVar8 = s_status____0____status_____1_0046e298._24_2_;
              uVar5 = s_status____0____status_____1_0046e298._8_8_;
              uVar35 = s_status____0____status_____1_0046e298._0_8_;
                    /* try { // try from 0035b8e0 to 0045b8e3 has its CatchHandler @ 0035baa4 */
              *(undefined8 *)(pcVar22 + 0x10) = s_status____0____status_____1_0046e298._16_8_;
                    /* try { // try from 0035b8e8 to 0045b8eb has its CatchHandler @ 0035baf8 */
              *(undefined2 *)(pcVar22 + 0x18) = uVar8;
              pcVar22[0x1a] = cVar16;
              *(undefined8 *)pcVar22 = uVar35;
              *(undefined8 *)(pcVar22 + 8) = uVar5;
              cv::error(-0xd7,(String *)&local_8a8,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x933);
              cv::String::deallocate((String *)&local_8a8);
            }
            if ((uint)local_418 != 0) {
              local_8e0 = 0;
              lVar23 = (long)local_840 - (long)local_848;
              uVar31 = lVar23 >> 3;
              uVar1 = uVar31 + ((ulong)local_418 & 0xffffffff);
              if (uVar31 < uVar1) {
                FUN_0035a940(&local_848);
                lVar23 = (long)local_848 + lVar23;
                local_9a8 = *(undefined8 *)((long)local_860 + uVar37);
                    /* try { // try from 0035beac to 0045beaf has its CatchHandler @ 0035c100 */
                iVar18 = (uint)local_418;
                if (DAT_00532120 == (code *)0x0) goto LAB_0035beb0;
LAB_0035bc14:
                iVar18 = (*DAT_00532120)(local_9a8,uVar33,iVar18,lVar23,&local_418);
              }
              else {
                if (uVar1 < uVar31) {
                  local_840 = (void *)((long)local_848 + uVar1 * 8);
                }
                lVar23 = (long)local_848 + lVar23;
                local_9a8 = *(undefined8 *)((long)local_860 + uVar37);
                iVar18 = (uint)local_418;
                if (DAT_00532120 != (code *)0x0) goto LAB_0035bc14;
LAB_0035beb0:
                    /* try { // try from 0035beb4 to 0045bf73 has its CatchHandler @ 0035bc54 */
                DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs");
                if (DAT_00532120 != (code *)0x0) goto LAB_0035bc14;
                iVar18 = -1000;
              }
              cVar16 = FUN_00350224();
                    /* catch() { ... } // from try @ 0035bba4 with catch @ 0035bc40 */
              if ((cVar16 != '\0') && (1 < iVar18 + 1U)) {
                    /* try { // try from 0035bc50 to 0045bc53 has its CatchHandler @ 0035bb08 */
                    /* catch() { ... } // from try @ 0035bcb4 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035bd08 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035bdf0 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035beb4 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035bf98 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c0c8 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c0fc with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c110 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c124 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c138 with catch @ 0035bc54
                       catch() { ... } // from try @ 0035c14c with catch @ 0035bc54 */
                local_898 = (undefined *)0x0;
                local_890 = 0;
                pcVar22 = (char *)cv::String::allocate((String *)&local_898,0x1b);
                cVar16 = s_status____0____status_____1_0046e298[0x1a];
                uVar8 = s_status____0____status_____1_0046e298._24_2_;
                uVar5 = s_status____0____status_____1_0046e298._8_8_;
                uVar35 = s_status____0____status_____1_0046e298._0_8_;
                *(undefined8 *)(pcVar22 + 0x10) = s_status____0____status_____1_0046e298._16_8_;
                *(undefined2 *)(pcVar22 + 0x18) = uVar8;
                pcVar22[0x1a] = cVar16;
                *(undefined8 *)pcVar22 = uVar35;
                *(undefined8 *)(pcVar22 + 8) = uVar5;
                cv::error(-0xd7,(String *)&local_898,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x939);
                    /* try { // try from 0035bcb4 to 0045bcb7 has its CatchHandler @ 0035bc54 */
                cv::String::deallocate((String *)&local_898);
              }
            }
            uVar32 = uVar32 + 1;
            if (((uVar39 != uVar32) && (-1 < (int)uVar39)) ||
               (uVar37 = uVar37 + 8, (int)(local_858 - (long)local_860 >> 3) <= (int)uVar32)) break;
            local_418 = (long *)((ulong)local_418 & 0xffffffff00000000);
            uVar35 = *(undefined8 *)((long)local_860 + uVar37);
            if (DAT_00532120 != (code *)0x0) goto LAB_0035b854;
LAB_0035b9c8:
            DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs");
                    /* try { // try from 0035b9d0 to 0045b9f3 has its CatchHandler @ 0035b5cc */
            if (DAT_00532120 != (code *)0x0) goto LAB_0035b854;
            iVar18 = -1000;
          } while( true );
        }
        do {
          if (((bVar28) && (uVar38 != (long)iVar17)) ||
             ((ulong)((long)local_840 - (long)local_848 >> 3) <= uVar38)) goto LAB_0035b954;
          local_898 = PTR_DAT_00501f30 + 0x18;
                    /* try { // try from 0035b9fc to 0045b9ff has its CatchHandler @ 0035bb00 */
          cVar16 = FUN_00350224();
          if (cVar16 == '\0') {
            uVar33 = *(undefined8 *)((long)local_848 + lVar20);
                    /* try { // try from 0035bd00 to 0045bd03 has its CatchHandler @ 0035c0ec */
                    /* try { // try from 0035bd08 to 0045bd8f has its CatchHandler @ 0035bc54 */
            if (((DAT_00532990 != (code *)0x0) ||
                (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0
                )) && ((iVar18 = (*DAT_00532990)(uVar33,0x102b,0,0,&local_8d0), iVar18 == 0 &&
                       (FUN_00412b08(&local_898,0,*(undefined8 *)(local_898 + -0x18),0),
                       local_8d0 != 0)))) {
              plVar25 = (long *)(local_8d0 + 1);
              plVar24 = local_408;
              local_410 = (long *)0x408;
              if ((long *)0x408 < plVar25) {
                local_418 = plVar24;
                plVar24 = operator_new__((ulong)plVar25);
              }
              local_418 = plVar24;
              local_410 = plVar25;
              iVar18 = FUN_0034d464(uVar33,0x102b,local_8d0,plVar24,0);
              if (iVar18 == 0) {
                sVar26 = strlen((char *)plVar24);
                FUN_00412fdc(&local_898,plVar24,sVar26);
              }
              plVar25 = local_418;
              if (local_418 != local_408) {
LAB_0035bd74:
                if (plVar25 != (long *)0x0) {
                  operator_delete__(plVar25);
                }
              }
            }
          }
          else {
            uVar33 = *(undefined8 *)((long)local_848 + lVar20);
                    /* try { // try from 0035ba1c to 0045ba1f has its CatchHandler @ 0035b5cc */
            if (((DAT_00532990 == (code *)0x0) &&
                (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0
                )) || (iVar18 = (*DAT_00532990)(uVar33,0x102b,0,0,&local_8d8), iVar18 != 0)) {
LAB_0035ba48:
              local_888 = 0;
              local_880 = 0;
              pcVar22 = (char *)cv::String::allocate((String *)&local_888,0x3d);
              cVar16 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8[0x3c];
              uVar12 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._48_8_;
              uVar11 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._40_8_;
              uVar10 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._32_8_;
              uVar6 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._24_8_;
              uVar5 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._16_8_;
              uVar35 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._8_8_;
              uVar33 = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._0_8_;
                    /* try { // try from 0035ba68 to 0045ba6b has its CatchHandler @ 0035ba7c */
                    /* try { // try from 0035ba70 to 0045ba73 has its CatchHandler @ 0035b5cc */
                    /* catch() { ... } // from try @ 0035ba68 with catch @ 0035ba7c */
              *(undefined4 *)(pcVar22 + 0x38) = s_getStringInfo_clGetDeviceInfo__d_0046e2b8._56_4_;
                    /* try { // try from 0035ba8c to 0045ba8f has its CatchHandler @ 0035b5cc */
              pcVar22[0x3c] = cVar16;
                    /* catch() { ... } // from try @ 0035b648 with catch @ 0035ba90 */
              *(undefined8 *)(pcVar22 + 0x30) = uVar12;
                    /* try { // try from 0035baa0 to 0045baa3 has its CatchHandler @ 0035b5cc */
                    /* catch() { ... } // from try @ 0035b8e0 with catch @ 0035baa4 */
              *(undefined8 *)pcVar22 = uVar33;
              *(undefined8 *)(pcVar22 + 8) = uVar35;
              *(undefined8 *)(pcVar22 + 0x10) = uVar5;
              *(undefined8 *)(pcVar22 + 0x18) = uVar6;
              *(undefined8 *)(pcVar22 + 0x20) = uVar10;
              *(undefined8 *)(pcVar22 + 0x28) = uVar11;
              cv::error(-0xd7,(String *)&local_888,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x941);
              cv::String::deallocate((String *)&local_888);
            }
            else {
                    /* try { // try from 0035bde8 to 0045bdeb has its CatchHandler @ 0035c114 */
                    /* try { // try from 0035bdf0 to 0045be83 has its CatchHandler @ 0035bc54 */
              FUN_00412b08(&local_898,0,*(undefined8 *)(local_898 + -0x18),0);
              if (local_8d8 != 0) {
                uVar37 = local_8d8 + 1;
                local_828 = 0x408;
                plVar25 = alStack_820;
                if (0x408 < uVar37) {
                  local_830 = alStack_820;
                  plVar25 = operator_new__(uVar37);
                }
                local_830 = plVar25;
                local_828 = uVar37;
                iVar18 = FUN_0034d464(uVar33,0x102b,local_8d8,plVar25,0);
                if (iVar18 != 0) {
                  if ((local_830 != alStack_820) && (local_830 != (long *)0x0)) {
                    operator_delete__(local_830);
                  }
                  goto LAB_0035ba48;
                }
                sVar26 = strlen((char *)plVar25);
                FUN_00412fdc(&local_898,plVar25,sVar26);
                plVar25 = local_830;
                if (local_830 != alStack_820) goto LAB_0035bd74;
              }
            }
          }
          iVar18 = FUN_00412830(&local_8b8,&DAT_0046e220);
          if ((iVar18 != 0) && (iVar18 = FUN_00412830(&local_8b8,&DAT_0046e228), iVar18 != 0)) {
            if (!bVar28) {
              uVar32 = 1;
              goto LAB_0035bb44;
            }
LAB_0035bd9c:
            uVar33 = *(undefined8 *)((long)local_848 + lVar20);
            if (local_898 + -0x18 != PTR_DAT_00501f30) {
              FUN_0034d640(local_898 + -0x18,&local_418);
            }
            if (local_848 != (void *)0x0) {
              operator_delete(local_848);
            }
            if ((undefined *)(local_8b8 + -0x18) != PTR_DAT_00501f30) {
              FUN_0034d640((undefined *)(local_8b8 + -0x18),&local_418);
            }
            goto LAB_0035b290;
          }
          local_418 = (long *)((ulong)local_418 & 0xffffffff00000000);
          FUN_0034d464(*(undefined8 *)((long)local_848 + lVar20),0x1035,4,&local_418,0);
                    /* try { // try from 0035baf4 to 0045baf7 has its CatchHandler @ 0035b5cc */
          iVar18 = FUN_00412830(&local_8b8,&DAT_0046e220);
                    /* catch() { ... } // from try @ 0035b884 with catch @ 0035baf8
                       catch() { ... } // from try @ 0035b8e8 with catch @ 0035baf8 */
          uVar32 = (uint)local_418;
          if (iVar18 == 0) {
                    /* catch() { ... } // from try @ 0035b85c with catch @ 0035bb00
                       catch() { ... } // from try @ 0035b95c with catch @ 0035bb00
                       catch() { ... } // from try @ 0035b9fc with catch @ 0035bb00 */
                    /* catch() { ... } // from try @ 0035bb58 with catch @ 0035bb08
                       catch() { ... } // from try @ 0035bbac with catch @ 0035bb08
                       catch() { ... } // from try @ 0035bc50 with catch @ 0035bb08 */
            uVar32 = (uint)((uint)local_418 == 0);
          }
          if (bVar28) {
LAB_0035bb14:
            if (uVar32 != 0) goto LAB_0035bd9c;
            puVar30 = local_898 + -0x18;
            if (puVar30 != PTR_DAT_00501f30) {
LAB_0035bb80:
              piVar29 = (int *)(local_898 + -8);
              do {
                iVar18 = *piVar29;
                cVar16 = '\x01';
                bVar3 = (bool)ExclusiveMonitorPass(piVar29,0x10);
                if (bVar3) {
                  *piVar29 = iVar18 + -1;
                  cVar16 = ExclusiveMonitorsStatus();
                }
              } while (cVar16 != '\0');
              if (iVar18 < 1) {
                operator_delete(puVar30);
                    /* try { // try from 0035bba4 to 0045bba7 has its CatchHandler @ 0035bc40 */
              }
            }
          }
          else {
LAB_0035bb44:
                    /* try { // try from 0035bb58 to 0045bb5b has its CatchHandler @ 0035bb08 */
            lVar23 = FUN_00411a6c(&local_898,local_910,0,*(undefined8 *)(local_910 + -0x18));
            if (lVar23 != -1) goto LAB_0035bb14;
            puVar30 = local_898 + -0x18;
            if (puVar30 != PTR_DAT_00501f30) goto LAB_0035bb80;
          }
          lVar20 = lVar20 + 8;
          uVar38 = uVar38 + 1;
        } while( true );
      }
      if (bVar28) {
                    /* try { // try from 0035c0fc to 0045c0ff has its CatchHandler @ 0035bc54 */
                    /* catch() { ... } // from try @ 0035beac with catch @ 0035c100 */
                    /* try { // try from 0035c110 to 0045c113 has its CatchHandler @ 0035bc54 */
        FUN_00410a08((string *)&local_8f8,&DAT_0046e210,&local_830);
                    /* catch() { ... } // from try @ 0035bde8 with catch @ 0035c114 */
        std::vector<std::string,std::allocator<std::string>>::push_back
                  ((vector<std::string,std::allocator<std::string>> *)&local_878,
                   (string *)&local_8f8);
                    /* try { // try from 0035c124 to 0045c127 has its CatchHandler @ 0035bc54 */
                    /* catch() { ... } // from try @ 0035bf90 with catch @ 0035c128 */
        if ((undefined *)(local_8f8 + -0x18) != PTR_DAT_00501f30) {
          FUN_0034d640((undefined *)(local_8f8 + -0x18),&local_418);
        }
                    /* try { // try from 0035c138 to 0045c13b has its CatchHandler @ 0035bc54 */
                    /* catch() { ... } // from try @ 0035c0c0 with catch @ 0035c13c */
        if ((long)local_870 - (long)local_878 >> 3 != 0) goto LAB_0035b6a4;
        goto LAB_0035c0f0;
      }
                    /* try { // try from 0035b494 to 0045b497 has its CatchHandler @ 0035b0b8 */
      FUN_00410a08((string *)&local_908,&DAT_0046e1c0,&local_830);
      std::vector<std::string,std::allocator<std::string>>::push_back
                ((vector<std::string,std::allocator<std::string>> *)&local_878,(string *)&local_908)
      ;
                    /* catch() { ... } // from try @ 0035b4f8 with catch @ 0035b4bc
                       catch() { ... } // from try @ 0035b530 with catch @ 0035b4bc
                       catch() { ... } // from try @ 0035b5a4 with catch @ 0035b4bc */
      if ((undefined *)(local_908 + -0x18) != PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 0035c4b8 with catch @ 0035c28c
                       catch() { ... } // from try @ 0035c510 with catch @ 0035c28c
                       catch() { ... } // from try @ 0035c550 with catch @ 0035c28c */
        FUN_0034d640((undefined *)(local_908 + -0x18),&local_418);
      }
      if (__s1 == (char *)0x0) {
        if ((long)local_870 - (long)local_878 >> 3 != 0) goto LAB_0035b6a4;
        goto LAB_0035b28c;
      }
      FUN_00410a08((string *)&local_900,&DAT_0046e1c8,&local_830);
      std::vector<std::string,std::allocator<std::string>>::push_back
                ((vector<std::string,std::allocator<std::string>> *)&local_878,(string *)&local_900)
      ;
                    /* try { // try from 0035b4f8 to 0045b4fb has its CatchHandler @ 0035b4bc */
      if ((undefined *)(local_900 + -0x18) != PTR_DAT_00501f30) {
        FUN_0034d640((undefined *)(local_900 + -0x18),&local_418);
      }
      if ((long)local_870 - (long)local_878 >> 3 != 0) goto LAB_0035b6a4;
    }
    else {
      lVar34 = 0;
      uVar19 = 0;
      if (local_858 - (long)local_860 >> 3 != 0) {
        do {
          local_418 = (long *)(PTR_DAT_00501f30 + 0x18);
          cVar16 = FUN_00350224();
          if (cVar16 == '\0') {
            FUN_0034e3d4(*(undefined8 *)((long)local_860 + lVar34),&local_418);
          }
          else {
            iVar18 = FUN_0034e3d4(*(undefined8 *)((long)local_860 + lVar34),&local_418);
            if (iVar18 != 0) {
              local_848 = (void *)0x0;
              local_840 = (void *)0x0;
              pcVar22 = (char *)cv::String::allocate((String *)&local_848,0x41);
              uVar13 = s_getStringInfo_clGetPlatformInfo__0046e178._56_8_;
              uVar12 = s_getStringInfo_clGetPlatformInfo__0046e178._48_8_;
              uVar11 = s_getStringInfo_clGetPlatformInfo__0046e178._40_8_;
              uVar10 = s_getStringInfo_clGetPlatformInfo__0046e178._32_8_;
              uVar6 = s_getStringInfo_clGetPlatformInfo__0046e178._24_8_;
              uVar5 = s_getStringInfo_clGetPlatformInfo__0046e178._16_8_;
              uVar35 = s_getStringInfo_clGetPlatformInfo__0046e178._8_8_;
              uVar33 = s_getStringInfo_clGetPlatformInfo__0046e178._0_8_;
              pcVar22[0x40] = s_getStringInfo_clGetPlatformInfo__0046e178[0x40];
              *(undefined8 *)pcVar22 = uVar33;
              *(undefined8 *)(pcVar22 + 8) = uVar35;
              *(undefined8 *)(pcVar22 + 0x10) = uVar5;
              *(undefined8 *)(pcVar22 + 0x18) = uVar6;
              *(undefined8 *)(pcVar22 + 0x20) = uVar10;
              *(undefined8 *)(pcVar22 + 0x28) = uVar11;
              *(undefined8 *)(pcVar22 + 0x30) = uVar12;
              *(undefined8 *)(pcVar22 + 0x38) = uVar13;
              cv::error(-0xd7,(String *)&local_848,"_cl_device_id* cv::ocl::selectOpenCLDevice()",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x900);
              cv::String::deallocate((String *)&local_848);
            }
          }
          lVar20 = FUN_00411a6c(&local_418,local_918,0,*(undefined8 *)(local_918 + -0x18));
          if (lVar20 != -1) {
            uVar39 = (uint)uVar19;
            if (local_418 + -3 != (long *)PTR_DAT_00501f30) {
              FUN_0034d640(local_418 + -3,&local_830);
            }
            if (uVar39 != 0xffffffff) goto LAB_0035b470;
            break;
          }
          if (local_418 + -3 != (long *)PTR_DAT_00501f30) {
            FUN_0034d640(local_418 + -3,&local_830);
          }
                    /* try { // try from 0035b37c to 0045b37f has its CatchHandler @ 0035b484 */
          uVar19 = uVar19 + 1;
                    /* try { // try from 0035b384 to 0045b433 has its CatchHandler @ 0035b0b8 */
          lVar34 = lVar34 + 8;
        } while (uVar19 < (ulong)(local_858 - (long)local_860 >> 3));
      }
                    /* try { // try from 0035c0c0 to 0045c0c3 has its CatchHandler @ 0035c13c */
                    /* try { // try from 0035c0c8 to 0045c0cb has its CatchHandler @ 0035bc54 */
      FUN_003f1ad0(PTR_DAT_00501c50,"ERROR: Can\'t find OpenCL platform by name: ",0x2b);
      FUN_003f1ad0(PTR_DAT_00501c50,local_918,*(undefined8 *)(local_918 + -0x18));
                    /* catch() { ... } // from try @ 0035bd00 with catch @ 0035c0ec */
      FUN_003f18d4();
LAB_0035c0f0:
      if (__s1 == (char *)0x0) goto LAB_0035b28c;
    }
                    /* try { // try from 0035b528 to 0045b52b has its CatchHandler @ 0035b594 */
                    /* try { // try from 0035b530 to 0045b563 has its CatchHandler @ 0035b4bc */
    uVar33 = FUN_003f1f84(PTR_DAT_00501c50,
                          "ERROR: Requested OpenCL device not found, check configuration: ");
    FUN_003f1f84(uVar33,__s1);
    uVar33 = FUN_003f18d4();
    uVar33 = FUN_003f1f84(uVar33,"    Platform: ");
    if (*(long *)(local_918 + -0x18) == 0) {
      FUN_00410a08(&local_8f0,&DAT_0046e308,auStack_928);
    }
    else {
      FUN_00414378(&local_8f0,&local_918);
                    /* try { // try from 0035c288 to 0045c28b has its CatchHandler @ 0035c150 */
    }
    FUN_003f1ad0(uVar33,local_8f0,*(undefined8 *)(local_8f0 + -0x18));
    uVar33 = FUN_003f18d4();
                    /* catch() { ... } // from try @ 0035b528 with catch @ 0035b594 */
    FUN_003f1f84(uVar33,"    Device types: ");
                    /* try { // try from 0035b5a4 to 0045b5a7 has its CatchHandler @ 0035b4bc */
    if ((undefined *)(local_8f0 + -0x18) != PTR_DAT_00501f30) {
      FUN_0034d640((undefined *)(local_8f0 + -0x18),&local_418);
    }
    uVar19 = 0;
                    /* catch() { ... } // from try @ 0035b60c with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035b650 with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035b9d0 with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035ba1c with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035ba70 with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035ba8c with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035baa0 with catch @ 0035b5cc
                       catch() { ... } // from try @ 0035baf4 with catch @ 0035b5cc */
    if ((long)local_870 - (long)local_878 >> 3 != 0) {
      do {
        uVar33 = FUN_003f1ad0(PTR_DAT_00501c50,local_878[uVar19],
                              *(undefined8 *)(local_878[uVar19] + -0x18));
        FUN_003f1ad0(uVar33,&LAB_0046e338,1);
        uVar19 = uVar19 + 1;
      } while (uVar19 < (ulong)((long)local_870 - (long)local_878 >> 3));
    }
                    /* try { // try from 0035b60c to 0045b60f has its CatchHandler @ 0035b5cc */
    uVar33 = FUN_003f18d4(PTR_DAT_00501c50);
    FUN_003f1ad0(uVar33,&DAT_0046e328,0x11);
    if (*(long *)(local_910 + -0x18) == 0) {
                    /* try { // try from 0035b648 to 0045b64b has its CatchHandler @ 0035ba90 */
      FUN_00410a08(&local_8e8,&DAT_0046e308,auStack_920);
                    /* try { // try from 0035b650 to 0045b843 has its CatchHandler @ 0035b5cc */
    }
    else {
                    /* try { // try from 0035c26c to 0045c26f has its CatchHandler @ 0035c150 */
      FUN_00414378(&local_8e8,&local_910);
                    /* catch() { ... } // from try @ 0035c264 with catch @ 0035c278 */
    }
    FUN_003f1ad0(uVar33,local_8e8,*(undefined8 *)(local_8e8 + -0x18));
    FUN_003f18d4();
    if ((undefined *)(local_8e8 + -0x18) != PTR_DAT_00501f30) {
      FUN_0034d640((undefined *)(local_8e8 + -0x18),&local_418);
    }
  }
LAB_0035b28c:
  uVar33 = 0;
LAB_0035b290:
  plVar24 = local_878;
  plVar4 = local_870;
  plVar15 = local_870;
  plVar25 = local_870;
  if (local_860 != (void *)0x0) {
    operator_delete(local_860);
    plVar24 = local_878;
    plVar4 = local_870;
    plVar15 = local_870;
    plVar25 = local_870;
  }
joined_r0x0035afa8:
  do {
    while( true ) {
      local_870 = plVar15;
      plVar15 = local_870;
      if (local_870 == plVar24) {
        local_870 = plVar25;
        if (plVar4 != (long *)0x0) {
          operator_delete(plVar4);
        }
        if (local_910 + -0x18 != PTR_DAT_00501f30) {
          FUN_0034d640(local_910 + -0x18,&local_418);
        }
        if (local_918 + -0x18 != PTR_DAT_00501f30) {
          FUN_0034d640(local_918 + -0x18,&local_418);
        }
        return uVar33;
      }
      puVar30 = (undefined *)(*plVar24 + -0x18);
      if (puVar30 != PTR_DAT_00501f30) break;
LAB_0035afb4:
      plVar24 = plVar24 + 1;
      plVar4 = local_878;
    }
    piVar29 = (int *)(*plVar24 + -8);
    do {
      iVar17 = *piVar29;
      cVar16 = '\x01';
      bVar28 = (bool)ExclusiveMonitorPass(piVar29,0x10);
      if (bVar28) {
        *piVar29 = iVar17 + -1;
        cVar16 = ExclusiveMonitorsStatus();
      }
    } while (cVar16 != '\0');
    if (0 < iVar17) goto LAB_0035afb4;
    local_870 = plVar25;
    operator_delete(puVar30);
    plVar24 = plVar24 + 1;
    plVar4 = local_878;
    plVar25 = local_870;
  } while( true );
LAB_0035b954:
  if (local_848 != (void *)0x0) {
    operator_delete(local_848);
  }
                    /* try { // try from 0035b95c to 0045b95f has its CatchHandler @ 0035bb00 */
  if ((undefined *)(local_8b8 + -0x18) != PTR_DAT_00501f30) {
                    /* try { // try from 0035c264 to 0045c267 has its CatchHandler @ 0035c278 */
    FUN_0034d640((undefined *)(local_8b8 + -0x18),&local_418);
  }
  local_950 = local_950 + 1;
  if ((ulong)((long)local_870 - (long)local_878 >> 3) <= local_950) goto LAB_0035c0f0;
  goto LAB_0035b730;
}


==================================================================

### FUNC 0035c558 (840 bytes) name=_M_fill_insert

/* std::vector<cv::ocl::Device, std::allocator<cv::ocl::Device>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<cv::ocl::Device*, std::vector<cv::ocl::Device,
   std::allocator<cv::ocl::Device> > >, unsigned long, cv::ocl::Device const&) */

void __thiscall
std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::_M_fill_insert
          (vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *this,Device *param_2,
          ulong param_3,Device *param_4)

{
  Device *pDVar1;
  long lVar2;
  long lVar3;
  Device *pDVar4;
  ulong uVar5;
  Device *pDVar6;
  Device *pDVar7;
  long lVar8;
  Device *pDVar9;
  ulong uVar10;
  Device aDStack_8 [8];
  
  if (param_3 == 0) {
    return;
  }
  if (param_3 <= (ulong)(*(long *)(this + 0x10) - *(long *)(this + 8) >> 3)) {
    cv::ocl::Device::Device(aDStack_8,param_4);
    pDVar4 = *(Device **)(this + 8);
    lVar3 = (long)pDVar4 - (long)param_2;
                    /* try { // try from 0035c6fc to 0045c6ff has its CatchHandler @ 0035c8bc */
    if (param_3 < (ulong)(lVar3 >> 3)) {
                    /* try { // try from 0035c704 to 0045c733 has its CatchHandler @ 0035c554 */
      pDVar9 = pDVar4 + param_3 * -8;
      pDVar6 = pDVar9;
      pDVar7 = pDVar4;
      if (pDVar9 != pDVar4) {
        do {
          if (pDVar7 != (Device *)0x0) {
            cv::ocl::Device::Device(pDVar7,pDVar6);
          }
          pDVar6 = pDVar6 + 8;
          pDVar7 = pDVar7 + 8;
        } while (pDVar4 != pDVar6);
        pDVar6 = *(Device **)(this + 8);
      }
      *(Device **)(this + 8) = pDVar6 + param_3 * 8;
      pDVar6 = pDVar4 + -((long)pDVar9 - (long)param_2);
      if (7 < (long)pDVar9 - (long)param_2) {
        do {
          pDVar4 = pDVar4 + -8;
          pDVar9 = pDVar9 + -8;
          cv::ocl::Device::operator=(pDVar4,pDVar9);
        } while (pDVar4 != pDVar6);
      }
      pDVar4 = param_2 + param_3 * 8;
                    /* try { // try from 0035c774 to 0045c777 has its CatchHandler @ 0035c8a8 */
      for (; param_2 != pDVar4; param_2 = param_2 + 8) {
                    /* try { // try from 0035c77c to 0045c79b has its CatchHandler @ 0035c554 */
        cv::ocl::Device::operator=(param_2,aDStack_8);
      }
    }
    else {
      lVar2 = param_3 - (lVar3 >> 3);
      pDVar6 = pDVar4;
      lVar8 = lVar2;
      if (lVar2 != 0) {
        do {
          if (pDVar6 != (Device *)0x0) {
            cv::ocl::Device::Device(pDVar6,aDStack_8);
          }
                    /* try { // try from 0035c7dc to 0045c7df has its CatchHandler @ 0035c894 */
          lVar8 = lVar8 + -1;
          pDVar6 = pDVar6 + 8;
                    /* try { // try from 0035c7e4 to 0045c803 has its CatchHandler @ 0035c554 */
        } while (lVar8 != 0);
        pDVar6 = *(Device **)(this + 8);
      }
      pDVar6 = pDVar6 + lVar2 * 8;
      *(Device **)(this + 8) = pDVar6;
      pDVar7 = param_2;
      if (param_2 != pDVar4) {
        do {
          if (pDVar6 != (Device *)0x0) {
            cv::ocl::Device::Device(pDVar6,pDVar7);
          }
          pDVar7 = pDVar7 + 8;
          pDVar6 = pDVar6 + 8;
        } while (pDVar4 != pDVar7);
        *(long *)(this + 8) = *(long *)(this + 8) + lVar3;
        do {
          cv::ocl::Device::operator=(param_2,aDStack_8);
          param_2 = param_2 + 8;
                    /* try { // try from 0035c844 to 0045c847 has its CatchHandler @ 0035c880 */
        } while (pDVar4 != param_2);
        cv::ocl::Device::~Device(aDStack_8);
        return;
      }
                    /* catch() { ... } // from try @ 0035c64c with catch @ 0035c86c */
      *(Device **)(this + 8) = pDVar6 + lVar3;
    }
    cv::ocl::Device::~Device(aDStack_8);
    return;
  }
  lVar3 = *(long *)this;
  uVar5 = *(long *)(this + 8) - lVar3 >> 3;
  if (0x1fffffffffffffff - uVar5 < param_3) {
                    /* try { // try from 0035c9f8 to 0045c9fb has its CatchHandler @ 0035c8d0 */
                    /* WARNING: Subroutine does not return */
                    /* catch() { ... } // from try @ 0035ca54 with catch @ 0035c9fc
                       catch() { ... } // from try @ 0035ca7c with catch @ 0035c9fc
                       catch() { ... } // from try @ 0035cb94 with catch @ 0035c9fc
                       catch() { ... } // from try @ 0035cdc4 with catch @ 0035c9fc
                       catch() { ... } // from try @ 0035cdd8 with catch @ 0035c9fc */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar10 = uVar5;
  if (uVar5 < param_3) {
    uVar10 = param_3;
  }
  uVar10 = uVar10 + uVar5;
  if ((uVar10 < uVar5) || (0x1fffffffffffffff < uVar10)) {
    lVar3 = (long)param_2 - lVar3;
    uVar10 = 0x1fffffffffffffff;
    uVar5 = 0xfffffffffffffff8;
  }
  else {
    lVar3 = (long)param_2 - lVar3;
    if (uVar10 == 0) {
      pDVar4 = (Device *)0x0;
      goto LAB_0035c5ec;
    }
                    /* try { // try from 0035c8b8 to 0045c8bb has its CatchHandler @ 0035c554 */
    uVar5 = uVar10 * 8;
                    /* catch() { ... } // from try @ 0035c6fc with catch @ 0035c8bc */
  }
  pDVar4 = operator_new(uVar5);
LAB_0035c5ec:
  pDVar6 = pDVar4 + lVar3;
  uVar5 = param_3;
  do {
    if (pDVar6 != (Device *)0x0) {
      cv::ocl::Device::Device(pDVar6,param_4);
    }
                    /* try { // try from 0035c608 to 0045c60b has its CatchHandler @ 0035c554 */
    uVar5 = uVar5 - 1;
    pDVar6 = pDVar6 + 8;
  } while (uVar5 != 0);
  pDVar7 = pDVar4;
  for (pDVar6 = *(Device **)this; param_2 != pDVar6; pDVar6 = pDVar6 + 8) {
    if (pDVar7 != (Device *)0x0) {
      cv::ocl::Device::Device(pDVar7,pDVar6);
    }
    pDVar7 = pDVar7 + 8;
  }
  pDVar6 = *(Device **)(this + 8);
  pDVar7 = pDVar7 + param_3 * 8;
                    /* try { // try from 0035c64c to 0045c64f has its CatchHandler @ 0035c86c */
  if (param_2 != pDVar6) {
    do {
      if (pDVar7 != (Device *)0x0) {
        cv::ocl::Device::Device(pDVar7,param_2);
      }
      param_2 = param_2 + 8;
      pDVar7 = pDVar7 + 8;
    } while (pDVar6 != param_2);
    pDVar6 = *(Device **)(this + 8);
  }
  pDVar9 = *(Device **)this;
  if (*(Device **)this != pDVar6) {
    do {
      pDVar1 = pDVar9 + 8;
      cv::ocl::Device::~Device(pDVar9);
      pDVar9 = pDVar1;
    } while (pDVar6 != pDVar1);
    pDVar6 = *(Device **)this;
  }
  if (pDVar6 != (Device *)0x0) {
    operator_delete(pDVar6);
  }
                    /* try { // try from 0035c6b0 to 0045c6b3 has its CatchHandler @ 0035c554 */
  *(Device **)this = pDVar4;
  *(Device **)(this + 8) = pDVar7;
  *(Device **)(this + 0x10) = pDVar4 + uVar10 * 8;
  return;
}


==================================================================

### FUNC 0035ca38 (1516 bytes) name=FUN_0035ca38

void FUN_0035ca38(undefined4 *param_1,uint param_2)

{
  undefined8 *puVar1;
  uint uVar2;
  uint uVar3;
  Device *pDVar4;
  Device *this;
  bool bVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined4 uVar10;
  undefined8 uVar11;
  char cVar12;
  int iVar13;
  Platform *this_00;
  undefined8 uVar14;
  undefined1 *puVar15;
  char *__s1;
  int *piVar16;
  long lVar17;
  char *pcVar18;
  ulong uVar19;
  Device *pDVar20;
  uint uVar21;
  int local_498;
  uint local_494;
  Device aDStack_490 [8];
  char *local_488;
  undefined8 local_480;
  char *local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  undefined8 local_458;
  undefined1 *local_450;
  ulong local_448;
  undefined1 auStack_440 [1088];
  
                    /* try { // try from 0035ca54 to 0045ca57 has its CatchHandler @ 0035c9fc */
                    /* try { // try from 0035ca74 to 0045ca77 has its CatchHandler @ 0035cdb4 */
                    /* try { // try from 0035ca7c to 0045cb3b has its CatchHandler @ 0035c9fc */
  *(undefined8 *)(param_1 + 4) = 0;
  *(undefined8 *)(param_1 + 6) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  param_1[0xc] = 0;
  *(undefined8 *)(param_1 + 0xe) = 0;
  *(undefined4 **)(param_1 + 0x10) = param_1 + 0xc;
  *(undefined4 **)(param_1 + 0x12) = param_1 + 0xc;
  *(undefined8 *)(param_1 + 0x14) = 0;
  *param_1 = 1;
  *(undefined8 *)(param_1 + 2) = 0;
  local_498 = 0;
  this_00 = (Platform *)cv::ocl::Platform::getDefault();
  uVar14 = cv::ocl::Platform::ptr(this_00);
  uVar21 = param_2 & 0xf;
  local_458 = 0;
  local_468 = 0x1084;
  local_494 = 0;
  local_460 = uVar14;
  cVar12 = FUN_00350224();
  if (cVar12 == '\0') {
    if ((DAT_00532120 != (code *)0x0) ||
       (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 != (code *)0x0)) {
                    /* try { // try from 0035ce6c to 0045ce6f has its CatchHandler @ 0035d0a0 */
                    /* try { // try from 0035ce74 to 0045cea3 has its CatchHandler @ 0035cddc */
      (*DAT_00532120)(uVar14,uVar21,0,0,&local_494);
    }
  }
  else if (((DAT_00532120 == (code *)0x0) &&
           (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 == (code *)0x0)) ||
          (iVar13 = (*DAT_00532120)(uVar14,uVar21,0,0,&local_494), iVar13 != 0)) {
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_450,0x2c);
    uVar10 = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._40_4_;
    uVar9 = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._24_8_;
    uVar8 = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._16_8_;
    uVar7 = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._8_8_;
    uVar6 = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._0_8_;
    *(undefined8 *)(pcVar18 + 0x20) = s_clGetDeviceIDs__pl__dtype__0__0__0046e348._32_8_;
    *(undefined4 *)(pcVar18 + 0x28) = uVar10;
    *(undefined8 *)pcVar18 = uVar6;
    *(undefined8 *)(pcVar18 + 8) = uVar7;
    *(undefined8 *)(pcVar18 + 0x10) = uVar8;
    *(undefined8 *)(pcVar18 + 0x18) = uVar9;
    cv::error(-0xd7,(String *)&local_450,"cv::ocl::Context::Impl::Impl(int)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x9e2);
    cv::String::deallocate((String *)&local_450);
  }
  uVar2 = local_494 * 2 + 1;
  puVar15 = auStack_440;
  local_448 = 0x88;
  if (0x88 < uVar2) {
    local_450 = puVar15;
    puVar15 = operator_new__((ulong)uVar2 << 3);
  }
  puVar1 = (undefined8 *)(puVar15 + (ulong)local_494 * 8);
  local_450 = puVar15;
  local_448 = (ulong)uVar2;
                    /* try { // try from 0035cb8c to 0045cb8f has its CatchHandler @ 0035cdc8 */
  cVar12 = FUN_00350224();
  uVar2 = local_494;
                    /* try { // try from 0035cb94 to 0045cda3 has its CatchHandler @ 0035c9fc */
  if (cVar12 == '\0') {
    if ((DAT_00532120 != (code *)0x0) ||
       (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 != (code *)0x0)) {
      (*DAT_00532120)(uVar14,uVar21,uVar2,puVar15,&local_494);
    }
  }
  else if (((DAT_00532120 == (code *)0x0) &&
           (DAT_00532120 = (code *)FUN_0034d2bc("clGetDeviceIDs"), DAT_00532120 == (code *)0x0)) ||
          (iVar13 = (*DAT_00532120)(uVar14,uVar21,uVar2,puVar15,&local_494), iVar13 != 0)) {
                    /* try { // try from 0035cec0 to 0045cec3 has its CatchHandler @ 0035d0b4 */
    local_478 = (char *)0x0;
                    /* try { // try from 0035cec8 to 0045cecb has its CatchHandler @ 0035cddc */
    local_470 = 0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_478,0x32);
    uVar11 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._40_8_;
    uVar9 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._32_8_;
    uVar8 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._24_8_;
    uVar7 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._16_8_;
    uVar6 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._8_8_;
    uVar14 = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._0_8_;
    *(undefined2 *)(pcVar18 + 0x30) = s_clGetDeviceIDs__pl__dtype__nd0__d_0046e378._48_2_;
    *(undefined8 *)pcVar18 = uVar14;
    *(undefined8 *)(pcVar18 + 8) = uVar6;
    *(undefined8 *)(pcVar18 + 0x10) = uVar7;
    *(undefined8 *)(pcVar18 + 0x18) = uVar8;
    *(undefined8 *)(pcVar18 + 0x20) = uVar9;
    *(undefined8 *)(pcVar18 + 0x28) = uVar11;
    cv::error(-0xd7,(String *)&local_478,"cv::ocl::Context::Impl::Impl(int)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x9e7);
    cv::String::deallocate((String *)&local_478);
  }
  local_488 = (char *)0x0;
  local_480 = 0;
  if (local_494 != 0) {
    uVar19 = 0;
    uVar21 = 0;
    do {
      while( true ) {
        cv::ocl::Device::Device(aDStack_490,*(void **)(puVar15 + uVar19 * 8));
        cVar12 = cv::ocl::Device::available(aDStack_490);
        if ((cVar12 != '\0') &&
           (cVar12 = cv::ocl::Device::compilerAvailable(aDStack_490), cVar12 != '\0')) break;
LAB_0035cbf8:
        cv::ocl::Device::~Device(aDStack_490);
        uVar2 = (int)uVar19 + 1;
        uVar19 = (ulong)uVar2;
        if (local_494 <= uVar2) goto LAB_0035cd00;
      }
      if (param_2 == 0x10004) {
        cVar12 = cv::ocl::Device::hostUnifiedMemory(aDStack_490);
        if (cVar12 == '\0') goto LAB_0035cc64;
        goto LAB_0035cbf8;
      }
      if ((param_2 == 0x20004) &&
         (cVar12 = cv::ocl::Device::hostUnifiedMemory(aDStack_490), cVar12 == '\0'))
      goto LAB_0035cbf8;
LAB_0035cc64:
      cv::ocl::Device::name();
      if ((uVar21 != 0) && (local_488 != local_478)) {
        pcVar18 = local_488;
        if (local_478 == (char *)0x0) {
          __s1 = "";
          if (local_488 == (char *)0x0) goto LAB_0035cc94;
        }
        else {
          __s1 = local_478;
          if (local_488 == (char *)0x0) {
            pcVar18 = "";
          }
        }
        iVar13 = strcmp(__s1,pcVar18);
        if (iVar13 != 0) {
          cv::String::deallocate((String *)&local_478);
                    /* try { // try from 0035ce18 to 0045ce1b has its CatchHandler @ 0035cddc */
          goto LAB_0035cbf8;
        }
      }
LAB_0035cc94:
      cv::String::deallocate((String *)&local_488);
      if (local_478 != (char *)0x0) {
        piVar16 = (int *)(local_478 + -4);
        do {
          cVar12 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar5) {
            *piVar16 = *piVar16 + 1;
            cVar12 = ExclusiveMonitorsStatus();
          }
        } while (cVar12 != '\0');
      }
      uVar2 = uVar21 + 1;
      local_488 = local_478;
      local_480 = local_470;
      puVar1[uVar21] = *(undefined8 *)(puVar15 + uVar19 * 8);
      cv::String::deallocate((String *)&local_478);
      cv::ocl::Device::~Device(aDStack_490);
      uVar3 = (int)uVar19 + 1;
      uVar19 = (ulong)uVar3;
      uVar21 = uVar2;
    } while (uVar3 < local_494);
LAB_0035cd00:
    if (uVar21 != 0) {
      if ((DAT_00532108 == (code *)0x0) &&
         (DAT_00532108 = (code *)FUN_0034d2bc("clCreateContext"), DAT_00532108 == (code *)0x0)) {
        *(undefined8 *)(param_1 + 2) = 0;
        local_498 = -1000;
      }
      else {
        lVar17 = (*DAT_00532108)(&local_468,1,puVar1,0,0,&local_498);
        *(long *)(param_1 + 2) = lVar17;
        if ((lVar17 != 0) && (local_498 == 0)) {
          cv::ocl::Device::Device(aDStack_490);
          pDVar20 = *(Device **)(param_1 + 6);
          uVar19 = (long)pDVar20 - *(long *)(param_1 + 4) >> 3;
          if (uVar19 == 0) {
            std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::_M_fill_insert
                      ((vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *)(param_1 + 4),
                       pDVar20,1,aDStack_490);
          }
          else if (1 < uVar19) {
            pDVar4 = (Device *)(*(long *)(param_1 + 4) + 8);
            for (this = pDVar4; pDVar20 != this; this = this + 8) {
              cv::ocl::Device::~Device(this);
            }
            *(Device **)(param_1 + 6) = pDVar4;
          }
          cv::ocl::Device::~Device(aDStack_490);
          cv::ocl::Device::set(*(Device **)(param_1 + 4),(void *)*puVar1);
        }
      }
    }
  }
  cv::String::deallocate((String *)&local_488);
                    /* catch() { ... } // from try @ 0035ca74 with catch @ 0035cdb4 */
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
                    /* try { // try from 0035cdc4 to 0045cdc7 has its CatchHandler @ 0035c9fc */
    operator_delete__(local_450);
  }
                    /* catch() { ... } // from try @ 0035cb8c with catch @ 0035cdc8 */
                    /* try { // try from 0035cdd8 to 0045cddb has its CatchHandler @ 0035c9fc */
                    /* catch() { ... } // from try @ 0035ce18 with catch @ 0035cddc
                       catch() { ... } // from try @ 0035ce74 with catch @ 0035cddc
                       catch() { ... } // from try @ 0035cec8 with catch @ 0035cddc
                       catch() { ... } // from try @ 0035d0b0 with catch @ 0035cddc
                       catch() { ... } // from try @ 0035d0c4 with catch @ 0035cddc */
  return;
}


==================================================================

### FUNC 0035d0e8 (400 bytes) name=create

/* cv::ocl::Context::create(int) */

char __thiscall cv::ocl::Context::create(Context *this,int param_1)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  char cVar4;
  void *pvVar5;
  Device *pDVar6;
  long lVar7;
  Device *pDVar8;
  void *pvVar9;
  Device *pDVar10;
  int *piVar11;
  
  cVar4 = haveOpenCL();
  if (cVar4 != '\0') {
    piVar11 = *(int **)this;
    if (piVar11 != (int *)0x0) {
      do {
        iVar1 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar1 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
        lVar7 = *(long *)(piVar11 + 2);
        if (lVar7 != 0) {
          if ((DAT_005329b0 != (code *)0x0) ||
             (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 != (code *)0x0))
          {
            (*DAT_005329b0)(lVar7);
          }
          piVar11[2] = 0;
          piVar11[3] = 0;
        }
        pDVar10 = *(Device **)(piVar11 + 6);
        pDVar8 = *(Device **)(piVar11 + 4);
        for (pDVar6 = pDVar8; pDVar6 != pDVar10; pDVar6 = pDVar6 + 8) {
          Device::~Device(pDVar6);
        }
        *(Device **)(piVar11 + 6) = pDVar8;
        pvVar5 = *(void **)(piVar11 + 0xe);
        if (*(void **)(piVar11 + 0xe) != (void *)0x0) {
          do {
                    /* try { // try from 0035d1e8 to 0045d1eb has its CatchHandler @ 0035d5fc */
            std::
            _Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
            ::_M_erase((_Rb_tree<cv::ocl::Context::Impl::HashKey,std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>,std::_Select1st<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>,std::less<cv::ocl::Context::Impl::HashKey>,std::allocator<std::pair<cv::ocl::Context::Impl::HashKey_const,cv::ocl::Program>>>
                        *)(piVar11 + 10),*(_Rb_tree_node **)((long)pvVar5 + 0x18));
            pvVar9 = *(void **)((long)pvVar5 + 0x10);
                    /* try { // try from 0035d1f4 to 0045d353 has its CatchHandler @ 0035d0c8 */
            Program::~Program((Program *)((long)pvVar5 + 0x30));
            operator_delete(pvVar5);
            pvVar5 = pvVar9;
          } while (pvVar9 != (void *)0x0);
          pDVar8 = *(Device **)(piVar11 + 6);
        }
        pDVar6 = *(Device **)(piVar11 + 4);
        if (pDVar6 != pDVar8) {
          do {
            Device::~Device(pDVar6);
            pDVar6 = pDVar6 + 8;
          } while (pDVar6 != pDVar8);
          pDVar8 = *(Device **)(piVar11 + 4);
        }
        if (pDVar8 != (Device *)0x0) {
          operator_delete(pDVar8);
        }
        operator_delete(piVar11);
      }
    }
    pvVar5 = operator_new(0x58);
    FUN_0035ca38(pvVar5,param_1);
    lVar7 = *(long *)((long)pvVar5 + 8);
    *(void **)this = pvVar5;
                    /* try { // try from 0035d14c to 0045d19f has its CatchHandler @ 0035d0c8 */
    if (lVar7 == 0) {
      cVar4 = '\0';
      FUN_00357d30(pvVar5);
      operator_delete(pvVar5);
      *(undefined8 *)this = 0;
    }
  }
  return cVar4;
}


==================================================================

### FUNC 0035d2f8 (8 bytes) name=Context

/* cv::ocl::Context::Context(int) */

void __thiscall cv::ocl::Context::Context(Context *this,int param_1)

{
  *(undefined8 *)this = 0;
  create(this,param_1);
  return;
}


==================================================================

### FUNC 0035d300 (488 bytes) name=FUN_0035d300

void FUN_0035d300(long *param_1,undefined8 param_2,undefined8 param_3,void *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  int iVar5;
  ulong uVar6;
  long *plVar7;
  char *pcVar8;
  undefined8 uVar9;
  Device *pDVar10;
  Device *pDVar11;
  long lVar12;
  Device *pDVar13;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar12 = *param_1;
  if (*(long *)(lVar12 + 8) != 0) {
    cVar4 = FUN_00350224();
    uVar9 = *(undefined8 *)(lVar12 + 8);
    if (cVar4 == '\0') {
      if ((DAT_005329b0 != (code *)0x0) ||
         (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 != (code *)0x0)) {
                    /* try { // try from 0035d428 to 0045d42b has its CatchHandler @ 0035d638 */
        (*DAT_005329b0)(uVar9);
                    /* try { // try from 0035d430 to 0045d49f has its CatchHandler @ 0035d0c8 */
      }
    }
    else if (((DAT_005329b0 == (code *)0x0) &&
             (DAT_005329b0 = (code *)FUN_0034d2bc("clReleaseContext"), DAT_005329b0 == (code *)0x0))
            || (iVar5 = (*DAT_005329b0)(uVar9), iVar5 != 0)) {
      local_10 = 0;
      local_8 = 0;
      pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x23);
      cVar4 = s_clReleaseContext_impl_>handle____0046e3c0[0x22];
      uVar3 = s_clReleaseContext_impl_>handle____0046e3c0._24_8_;
      uVar2 = s_clReleaseContext_impl_>handle____0046e3c0._16_8_;
      uVar1 = s_clReleaseContext_impl_>handle____0046e3c0._8_8_;
      uVar9 = s_clReleaseContext_impl_>handle____0046e3c0._0_8_;
      *(undefined2 *)(pcVar8 + 0x20) = s_clReleaseContext_impl_>handle____0046e3c0._32_2_;
      pcVar8[0x22] = cVar4;
      *(undefined8 *)pcVar8 = uVar9;
      *(undefined8 *)(pcVar8 + 8) = uVar1;
                    /* try { // try from 0035d4bc to 0045d4bf has its CatchHandler @ 0035d5d4 */
      *(undefined8 *)(pcVar8 + 0x10) = uVar2;
      *(undefined8 *)(pcVar8 + 0x18) = uVar3;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::ocl::initializeContextFromHandle(cv::ocl::Context&, void*, void*, void*)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xb7a);
                    /* try { // try from 0035d4c4 to 0045d4eb has its CatchHandler @ 0035d0c8 */
      cv::String::deallocate((String *)&local_10);
    }
  }
  pDVar10 = *(Device **)(lVar12 + 0x18);
  pDVar13 = *(Device **)(lVar12 + 0x10);
  for (pDVar11 = pDVar13; pDVar10 != pDVar11; pDVar11 = pDVar11 + 8) {
    cv::ocl::Device::~Device(pDVar11);
  }
  *(Device **)(lVar12 + 0x18) = pDVar13;
  *(undefined8 *)(lVar12 + 8) = param_3;
                    /* try { // try from 0035d394 to 0045d397 has its CatchHandler @ 0035d624 */
  cv::ocl::Device::Device((Device *)&local_10);
  pDVar11 = *(Device **)(lVar12 + 0x18);
                    /* try { // try from 0035d39c to 0045d3e7 has its CatchHandler @ 0035d0c8 */
  uVar6 = (long)pDVar11 - *(long *)(lVar12 + 0x10) >> 3;
  if (uVar6 == 0) {
    std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::_M_fill_insert
              ((vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *)(lVar12 + 0x10),pDVar11,1,
               (Device *)&local_10);
  }
  else if (1 < uVar6) {
    pDVar10 = (Device *)(*(long *)(lVar12 + 0x10) + 8);
    for (pDVar13 = pDVar10; pDVar11 != pDVar13; pDVar13 = pDVar13 + 8) {
      cv::ocl::Device::~Device(pDVar13);
    }
    *(Device **)(lVar12 + 0x18) = pDVar10;
  }
  cv::ocl::Device::~Device((Device *)&local_10);
  cv::ocl::Device::set(*(Device **)(lVar12 + 0x10),param_4);
  plVar7 = (long *)cv::ocl::Platform::getDefault();
  *(undefined8 *)(*plVar7 + 8) = param_2;
  return;
}


==================================================================

### FUNC 0035d510 (744 bytes) name=FUN_0035d510

void FUN_0035d510(long param_1)

{
  Device *pDVar1;
  Device *this;
  void *pvVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  long lVar15;
  ulong uVar16;
  Device *pDVar17;
  int local_34;
  void *local_30;
  undefined8 local_28;
  Device aDStack_20 [8];
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(long *)(param_1 + 8) != 0) {
                    /* try { // try from 0035d52c to 0045d52f has its CatchHandler @ 0035d610 */
                    /* try { // try from 0035d534 to 0045d573 has its CatchHandler @ 0035d0c8 */
    local_18 = 0;
    local_10 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_18,0xe);
    uVar4 = s_handle____NULL_0046e3e8._12_2_;
    uVar3 = s_handle____NULL_0046e3e8._8_4_;
    *(undefined8 *)pcVar14 = s_handle____NULL_0046e3e8._0_8_;
    *(undefined4 *)(pcVar14 + 8) = uVar3;
    *(undefined2 *)(pcVar14 + 0xc) = uVar4;
    cv::error(-0xd7,(String *)&local_18,"void cv::ocl::Context::Impl::setDefault()",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x9b4);
    cv::String::deallocate((String *)&local_18);
  }
  local_30 = (void *)FUN_0035aefc();
  if (local_30 == (void *)0x0) {
    return;
  }
  local_28 = 0;
  pvVar2 = local_30;
  if (DAT_00532119 == '\0') {
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
    pvVar2 = local_30;
  }
  local_30 = pvVar2;
  if (DAT_005329c8 == '\0') {
    if ((DAT_00532990 != (code *)0x0) ||
       (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 != (code *)0x0)) {
                    /* try { // try from 0035d6fc to 0045d8af has its CatchHandler @ 0035d64c */
      (*DAT_00532990)(pvVar2,0x1031,8,&local_28,0);
    }
  }
  else {
                    /* try { // try from 0035d5c4 to 0045d5c7 has its CatchHandler @ 0035d5e8 */
                    /* try { // try from 0035d5cc to 0045d5cf has its CatchHandler @ 0035d0c8 */
                    /* catch() { ... } // from try @ 0035d4bc with catch @ 0035d5d4 */
                    /* try { // try from 0035d5e4 to 0045d5e7 has its CatchHandler @ 0035d0c8 */
    if (((DAT_00532990 == (code *)0x0) &&
        (DAT_00532990 = (code *)FUN_0034d2bc("clGetDeviceInfo"), DAT_00532990 == (code *)0x0)) ||
       (iVar13 = (*DAT_00532990)(pvVar2,0x1031,8,&local_28,0), iVar13 != 0)) {
      local_18 = 0;
      local_10 = 0;
      pcVar14 = (char *)cv::String::allocate((String *)&local_18,0x44);
      uVar12 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._56_8_;
      uVar11 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._48_8_;
      uVar10 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._40_8_;
      uVar9 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._32_8_;
      uVar8 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._24_8_;
      uVar7 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._16_8_;
      uVar6 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._8_8_;
      uVar5 = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._0_8_;
      *(undefined4 *)(pcVar14 + 0x40) = s_clGetDeviceInfo_d__0x1031__sizeo_0046e3f8._64_4_;
      *(undefined8 *)pcVar14 = uVar5;
      *(undefined8 *)(pcVar14 + 8) = uVar6;
      *(undefined8 *)(pcVar14 + 0x10) = uVar7;
      *(undefined8 *)(pcVar14 + 0x18) = uVar8;
      *(undefined8 *)(pcVar14 + 0x20) = uVar9;
      *(undefined8 *)(pcVar14 + 0x28) = uVar10;
      *(undefined8 *)(pcVar14 + 0x30) = uVar11;
      *(undefined8 *)(pcVar14 + 0x38) = uVar12;
      cv::error(-0xd7,(String *)&local_18,"void cv::ocl::Context::Impl::setDefault()",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x9bc);
      cv::String::deallocate((String *)&local_18);
    }
  }
                    /* try { // try from 0035d5f8 to 0045d5fb has its CatchHandler @ 0035d0c8 */
  local_18 = 0x1084;
                    /* catch() { ... } // from try @ 0035d1e8 with catch @ 0035d5fc */
  local_8 = 0;
  local_10 = local_28;
                    /* try { // try from 0035d60c to 0045d60f has its CatchHandler @ 0035d0c8 */
  if ((DAT_00532108 != (code *)0x0) ||
     (DAT_00532108 = (code *)FUN_0034d2bc("clCreateContext"), DAT_00532108 != (code *)0x0)) {
                    /* catch() { ... } // from try @ 0035d52c with catch @ 0035d610 */
                    /* try { // try from 0035d620 to 0045d623 has its CatchHandler @ 0035d0c8 */
                    /* catch() { ... } // from try @ 0035d394 with catch @ 0035d624 */
    lVar15 = (*DAT_00532108)(&local_18,1,&local_30,0,0,&local_34);
    *(long *)(param_1 + 8) = lVar15;
                    /* try { // try from 0035d634 to 0045d637 has its CatchHandler @ 0035d0c8 */
                    /* catch() { ... } // from try @ 0035d428 with catch @ 0035d638 */
    if ((lVar15 != 0) && (local_34 == 0)) {
                    /* try { // try from 0035d648 to 0045d64b has its CatchHandler @ 0035d0c8 */
      cv::ocl::Device::Device(aDStack_20);
                    /* catch() { ... } // from try @ 0035d6fc with catch @ 0035d64c
                       catch() { ... } // from try @ 0035d900 with catch @ 0035d64c
                       catch() { ... } // from try @ 0035d9bc with catch @ 0035d64c
                       catch() { ... } // from try @ 0035da30 with catch @ 0035d64c
                       catch() { ... } // from try @ 0035da5c with catch @ 0035d64c
                       catch() { ... } // from try @ 0035da70 with catch @ 0035d64c
                       catch() { ... } // from try @ 0035da84 with catch @ 0035d64c */
      pDVar17 = *(Device **)(param_1 + 0x18);
      uVar16 = (long)pDVar17 - *(long *)(param_1 + 0x10) >> 3;
      if (uVar16 == 0) {
        std::vector<cv::ocl::Device,std::allocator<cv::ocl::Device>>::_M_fill_insert
                  ((vector<cv::ocl::Device,std::allocator<cv::ocl::Device>> *)(param_1 + 0x10),
                   pDVar17,1,aDStack_20);
      }
      else if (1 < uVar16) {
        pDVar1 = (Device *)(*(long *)(param_1 + 0x10) + 8);
        for (this = pDVar1; pDVar17 != this; this = this + 8) {
          cv::ocl::Device::~Device(this);
        }
        *(Device **)(param_1 + 0x18) = pDVar1;
      }
      cv::ocl::Device::~Device(aDStack_20);
      cv::ocl::Device::set(*(Device **)(param_1 + 0x10),local_30);
      return;
    }
  }
  *(undefined8 *)(param_1 + 8) = 0;
  return;
}


==================================================================

### FUNC 0035d834 (248 bytes) name=getDefault

/* cv::ocl::Context::getDefault(bool) */

Context * cv::ocl::Context::getDefault(bool param_1)

{
  char cVar1;
  int iVar2;
  Context *this;
  undefined4 *puVar3;
  
  this = DAT_00532960;
  if (((DAT_00532010 & 1) == 0) &&
     (iVar2 = __cxa_guard_acquire(&DAT_00532010), this = DAT_00532960, iVar2 != 0)) {
    this = operator_new(8);
    Context(this);
    DAT_00532960 = this;
    __cxa_guard_release(&DAT_00532010);
  }
  if ((*(long *)this == 0) && (cVar1 = haveOpenCL(), this = DAT_00532960, cVar1 != '\0')) {
    puVar3 = *(undefined4 **)DAT_00532960;
    if (puVar3 == (undefined4 *)0x0) {
      puVar3 = operator_new(0x58);
      this = DAT_00532960;
                    /* try { // try from 0035d8f8 to 0045d8fb has its CatchHandler @ 0035da60 */
      *(undefined8 *)(puVar3 + 4) = 0;
      *(undefined8 *)(puVar3 + 6) = 0;
                    /* try { // try from 0035d900 to 0045d973 has its CatchHandler @ 0035d64c */
      *(undefined8 *)(puVar3 + 8) = 0;
      puVar3[0xc] = 0;
      *(undefined8 *)(puVar3 + 0xe) = 0;
      *(undefined8 *)(puVar3 + 0x14) = 0;
      *(undefined8 *)(puVar3 + 2) = 0;
      *(undefined4 **)(puVar3 + 0x10) = puVar3 + 0xc;
      *(undefined4 **)(puVar3 + 0x12) = puVar3 + 0xc;
      *puVar3 = 1;
      *(undefined4 **)this = puVar3;
    }
    if ((param_1) && (*(long *)(puVar3 + 2) == 0)) {
      FUN_0035d510(puVar3);
      this = DAT_00532960;
    }
  }
  return this;
}


==================================================================

### FUNC 0035d954 (48 bytes) name=getDefault

/* cv::ocl::Device::getDefault() */

void cv::ocl::Device::getDefault(void)

{
  Context *this;
  TLSDataContainer *this_00;
  long lVar1;
  
  this = (Context *)Context::getDefault(true);
  this_00 = (TLSDataContainer *)FUN_003b7ff8();
  lVar1 = TLSDataContainer::getData(this_00);
  Context::device(this,(long)*(int *)(lVar1 + 8));
  return;
}


==================================================================

### FUNC 0035d984 (124 bytes) name=useOpenCL

/* cv::ocl::useOpenCL() */

bool cv::ocl::useOpenCL(void)

{
  char cVar1;
  byte bVar2;
  TLSDataContainer *this;
  long lVar3;
  Device *pDVar4;
  long lVar5;
  
  this = (TLSDataContainer *)FUN_003b7ff8();
  lVar3 = TLSDataContainer::getData(this);
  if (-1 < *(int *)(lVar3 + 0x18)) {
    return 0 < *(int *)(lVar3 + 0x18);
  }
                    /* try { // try from 0035d9b4 to 0045d9b7 has its CatchHandler @ 0035da74 */
  cVar1 = haveOpenCL();
                    /* try { // try from 0035d9bc to 0045d9e7 has its CatchHandler @ 0035d64c */
  if (cVar1 != '\0') {
    pDVar4 = (Device *)Device::getDefault();
    lVar5 = Device::ptr(pDVar4);
    if (lVar5 != 0) {
      pDVar4 = (Device *)Device::getDefault();
      bVar2 = Device::available(pDVar4);
      *(uint *)(lVar3 + 0x18) = (uint)bVar2;
      return bVar2 != 0;
    }
  }
  *(undefined4 *)(lVar3 + 0x18) = 0;
  return false;
}


==================================================================

### FUNC 0035da18 (108 bytes) name=setUseOpenCL

/* cv::ocl::setUseOpenCL(bool) */

void cv::ocl::setUseOpenCL(bool param_1)

{
  char cVar1;
  TLSDataContainer *this;
  long lVar2;
  Device *this_00;
  long lVar3;
  
                    /* try { // try from 0035da28 to 0045da2b has its CatchHandler @ 0035da4c */
  cVar1 = haveOpenCL();
                    /* try { // try from 0035da30 to 0045da47 has its CatchHandler @ 0035d64c */
  if (cVar1 == '\0') {
    return;
  }
  this = (TLSDataContainer *)FUN_003b7ff8();
  lVar2 = TLSDataContainer::getData(this);
                    /* catch() { ... } // from try @ 0035da28 with catch @ 0035da4c */
  if (param_1) {
    this_00 = (Device *)Device::getDefault();
                    /* try { // try from 0035da70 to 0045da73 has its CatchHandler @ 0035d64c */
    lVar3 = Device::ptr(this_00);
                    /* catch() { ... } // from try @ 0035d9b4 with catch @ 0035da74 */
    *(uint *)(lVar2 + 0x18) = (uint)(lVar3 != 0);
  }
  else {
    *(undefined4 *)(lVar2 + 0x18) = 0;
  }
                    /* try { // try from 0035da5c to 0045da5f has its CatchHandler @ 0035d64c */
                    /* catch() { ... } // from try @ 0035d8f8 with catch @ 0035da60 */
  return;
}


==================================================================

### FUNC 0035da84 (172 bytes) name=workGroupSize

/* cv::ocl::Kernel::workGroupSize() const */

undefined8 __thiscall cv::ocl::Kernel::workGroupSize(Kernel *this)

{
  int iVar1;
  Device *this_00;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 0035da84 to 0045da87 has its CatchHandler @ 0035d64c */
                    /* catch() { ... } // from try @ 0035dae8 with catch @ 0035da88
                       catch() { ... } // from try @ 0035db3c with catch @ 0035da88
                       catch() { ... } // from try @ 0035ddc4 with catch @ 0035da88
                       catch() { ... } // from try @ 0035de20 with catch @ 0035da88
                       catch() { ... } // from try @ 0035de34 with catch @ 0035da88 */
  if ((*(long *)this != 0) && (*(long *)(*(long *)this + 8) != 0)) {
    local_10 = 0;
    local_8 = 0;
    this_00 = (Device *)Device::getDefault();
    uVar2 = Device::ptr(this_00);
    uVar3 = *(undefined8 *)(*(long *)this + 8);
    if ((DAT_00532028 == (code *)0x0) &&
       (DAT_00532028 = (code *)FUN_0034d2bc(&LAB_0046e440,uVar2), DAT_00532028 == (code *)0x0)) {
      return 0;
    }
    iVar1 = (*DAT_00532028)(uVar3,uVar2,0x11b0,8,&local_10,&local_8);
                    /* try { // try from 0035dae8 to 0045daeb has its CatchHandler @ 0035da88 */
    if (iVar1 == 0) {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035db30 (172 bytes) name=preferedWorkGroupSizeMultiple

/* cv::ocl::Kernel::preferedWorkGroupSizeMultiple() const */

undefined8 __thiscall cv::ocl::Kernel::preferedWorkGroupSizeMultiple(Kernel *this)

{
  int iVar1;
  Device *this_00;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 0035db34 to 0045db37 has its CatchHandler @ 0035de10 */
                    /* try { // try from 0035db3c to 0045dd73 has its CatchHandler @ 0035da88 */
  if ((*(long *)this != 0) && (*(long *)(*(long *)this + 8) != 0)) {
    local_10 = 0;
    local_8 = 0;
    this_00 = (Device *)Device::getDefault();
    uVar2 = Device::ptr(this_00);
    uVar3 = *(undefined8 *)(*(long *)this + 8);
    if ((DAT_00532028 == (code *)0x0) &&
       (DAT_00532028 = (code *)FUN_0034d2bc(&LAB_0046e440,uVar2), DAT_00532028 == (code *)0x0)) {
      return 0;
    }
    iVar1 = (*DAT_00532028)(uVar3,uVar2,0x11b3,8,&local_10,&local_8);
    if (iVar1 == 0) {
      return local_10;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035dbdc (204 bytes) name=compileWorkGroupSize

/* cv::ocl::Kernel::compileWorkGroupSize(unsigned long*) const */

bool __thiscall cv::ocl::Kernel::compileWorkGroupSize(Kernel *this,ulong *param_1)

{
  int iVar1;
  Device *this_00;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 local_8;
  
  if (*(long *)this == 0) {
    return false;
  }
  if ((param_1 == (ulong *)0x0) || (*(long *)(*(long *)this + 8) == 0)) {
    return false;
  }
  local_8 = 0;
  this_00 = (Device *)Device::getDefault();
  uVar2 = Device::ptr(this_00);
  uVar3 = *(undefined8 *)(*(long *)this + 8);
  if (DAT_00532028 == (code *)0x0) {
    DAT_00532028 = (code *)FUN_0034d2bc(&LAB_0046e440);
    if (DAT_00532028 == (code *)0x0) {
      iVar1 = -1000;
      goto LAB_0035dc44;
    }
  }
  iVar1 = (*DAT_00532028)(uVar3,uVar2,0x11b1,0x18,param_1,&local_8);
LAB_0035dc44:
  return iVar1 == 0;
}


==================================================================

### FUNC 0035dca8 (172 bytes) name=localMemSize

/* cv::ocl::Kernel::localMemSize() const */

undefined8 __thiscall cv::ocl::Kernel::localMemSize(Kernel *this)

{
  int iVar1;
  Device *this_00;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((*(long *)this != 0) && (*(long *)(*(long *)this + 8) != 0)) {
    local_10 = 0;
    local_8 = 0;
    this_00 = (Device *)Device::getDefault();
    uVar2 = Device::ptr(this_00);
    uVar3 = *(undefined8 *)(*(long *)this + 8);
    if ((DAT_00532028 == (code *)0x0) &&
       (DAT_00532028 = (code *)FUN_0034d2bc(&LAB_0046e440,uVar2), DAT_00532028 == (code *)0x0)) {
      return 0;
    }
    iVar1 = (*DAT_00532028)(uVar3,uVar2,0x11b2,8,&local_8,&local_10);
    if (iVar1 == 0) {
      return local_8;
    }
  }
  return 0;
}


==================================================================

### FUNC 0035dd54 (288 bytes) name=predictOptimalVectorWidth

/* cv::ocl::predictOptimalVectorWidth(cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::ocl::OclVectorStrategy) */

void cv::ocl::predictOptimalVectorWidth
               (undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
               undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8,
               undefined8 param_9,undefined4 param_10)

{
  undefined4 uVar1;
  Device *this;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  this = (Device *)Device::getDefault();
  local_10 = 0;
  local_8 = 0;
  local_4 = 0xffffffff;
  local_20 = 0;
  local_18 = 0;
  uVar1 = Device::preferredVectorWidthChar(this);
  local_20 = CONCAT44(local_20._4_4_,uVar1);
  uVar1 = Device::preferredVectorWidthChar(this);
  local_20 = CONCAT44(uVar1,(int)local_20);
  uVar1 = Device::preferredVectorWidthShort(this);
                    /* try { // try from 0035ddbc to 0045ddbf has its CatchHandler @ 0035de24 */
  local_18 = CONCAT44(local_18._4_4_,uVar1);
                    /* try { // try from 0035ddc4 to 0045ddc7 has its CatchHandler @ 0035da88 */
  uVar1 = Device::preferredVectorWidthShort(this);
  local_18 = CONCAT44(uVar1,(undefined4)local_18);
  uVar1 = Device::preferredVectorWidthInt(this);
  local_10 = CONCAT44(local_10._4_4_,uVar1);
  uVar1 = Device::preferredVectorWidthFloat(this);
  local_10 = CONCAT44(uVar1,(undefined4)local_10);
  uVar1 = Device::preferredVectorWidthDouble(this);
  if ((int)local_20 == 1) {
                    /* catch() { ... } // from try @ 0035db34 with catch @ 0035de10 */
    local_20 = 0x400000004;
    local_18 = 0x200000002;
                    /* try { // try from 0035de20 to 0045de23 has its CatchHandler @ 0035da88 */
                    /* catch() { ... } // from try @ 0035ddbc with catch @ 0035de24 */
    local_10 = 0x100000001;
    uVar1 = 1;
  }
  _local_8 = CONCAT44(local_4,uVar1);
                    /* try { // try from 0035de34 to 0045de37 has its CatchHandler @ 0035da88 */
                    /* catch() { ... } // from try @ 0035dea0 with catch @ 0035de38
                       catch() { ... } // from try @ 0035df24 with catch @ 0035de38
                       catch() { ... } // from try @ 0035dfb8 with catch @ 0035de38
                       catch() { ... } // from try @ 0035e040 with catch @ 0035de38
                       catch() { ... } // from try @ 0035e054 with catch @ 0035de38 */
  checkOptimalVectorWidth
            (&local_20,param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,param_9,
             param_10);
  return;
}


==================================================================

### FUNC 0035de74 (40 bytes) name=predictOptimalVectorWidthMax

/* cv::ocl::predictOptimalVectorWidthMax(cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&) */

void cv::ocl::predictOptimalVectorWidthMax
               (_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,_InputArray *param_4,
               _InputArray *param_5,_InputArray *param_6,_InputArray *param_7,_InputArray *param_8,
               _InputArray *param_9)

{
  predictOptimalVectorWidth();
  return;
}


==================================================================

### FUNC 0035de9c (232 bytes) name=canCreateAlias

/* cv::ocl::Image2D::canCreateAlias(cv::UMat const&) */

ulong cv::ocl::Image2D::canCreateAlias(UMat *param_1)

{
  long lVar1;
  ulong uVar2;
  char cVar3;
  uint uVar4;
  Device *this;
  ulong uVar5;
  long lVar6;
  long lVar7;
  
                    /* try { // try from 0035dea0 to 0045ded3 has its CatchHandler @ 0035de38 */
  this = (Device *)Device::getDefault();
  cVar3 = Device::imageFromBufferSupport(this);
  if ((cVar3 != '\0') && (*(long *)(param_1 + 0x20) != 0)) {
    if (*(int *)(param_1 + 4) < 3) {
      lVar7 = (long)*(int *)(param_1 + 0xc) * (long)*(int *)(param_1 + 8);
    }
    else {
      lVar6 = 0;
      lVar7 = 1;
      do {
        lVar1 = lVar6 * 4;
        lVar6 = lVar6 + 1;
        lVar7 = lVar7 * *(int *)(*(long *)(param_1 + 0x30) + lVar1);
      } while ((int)lVar6 < *(int *)(param_1 + 4));
    }
    if ((lVar7 != 0) && (uVar4 = Device::imagePitchAlignment(this), uVar4 != 0)) {
      if (*(int *)(param_1 + 4) < 1) {
        uVar5 = 0;
      }
      else {
        uVar5 = (ulong)uVar4 *
                *(long *)(*(long *)(param_1 + 0x38) + (long)*(int *)(param_1 + 4) * 8 + -8);
      }
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = *(ulong *)(param_1 + 0x40) / uVar5;
      }
                    /* try { // try from 0035df1c to 0045df1f has its CatchHandler @ 0035e044 */
      if (*(ulong *)(param_1 + 0x40) == uVar2 * uVar5) {
                    /* try { // try from 0035df24 to 0045df6f has its CatchHandler @ 0035de38 */
        return ((ulong)*(uint *)(*(long *)(param_1 + 0x20) + 0x30) ^ 8) >> 3 & 1;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 0035df84 (1800 bytes) name=getOpenCLAllocator

/* cv::ocl::getOpenCLAllocator() */

undefined8 * cv::ocl::getOpenCLAllocator(void)

{
  Mutex *this;
  Mutex *this_00;
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined2 uVar4;
  char cVar5;
  int iVar6;
  undefined8 *puVar7;
  Device *this_01;
  ulong uVar8;
  ulong uVar9;
  char *pcVar10;
  undefined8 uVar11;
  long lVar12;
  undefined8 *puVar13;
  void *pvVar14;
  long lVar15;
  undefined8 *puVar16;
  undefined8 *puVar17;
  long local_60;
  long local_58;
  long local_50;
  long local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 0035dfb0 to 0045dfb3 has its CatchHandler @ 0035e030 */
                    /* try { // try from 0035dfb8 to 0045dfbb has its CatchHandler @ 0035de38 */
  puVar7 = DAT_00532968;
  if (((DAT_005320a8 & 1) == 0) &&
     (iVar6 = __cxa_guard_acquire(&DAT_005320a8), puVar7 = DAT_00532968, iVar6 != 0)) {
    puVar7 = operator_new(0xb0);
    *puVar7 = &PTR_FUN_004f6980;
    this = (Mutex *)(puVar7 + 3);
    puVar7[1] = &PTR_FUN_004f68a0;
                    /* catch() { ... } // from try @ 0035dfb0 with catch @ 0035e030 */
    puVar7[2] = &PTR_FUN_004f68f0;
    Mutex::Mutex(this);
                    /* try { // try from 0035e040 to 0045e043 has its CatchHandler @ 0035de38 */
    puVar7[4] = 0;
                    /* catch() { ... } // from try @ 0035df1c with catch @ 0035e044 */
    puVar7[5] = 0;
    puVar17 = puVar7 + 8;
    puVar7[6] = puVar7 + 6;
                    /* try { // try from 0035e054 to 0045e057 has its CatchHandler @ 0035de38 */
    puVar7[7] = puVar7 + 6;
                    /* catch() { ... } // from try @ 0035e0d4 with catch @ 0035e058
                       catch() { ... } // from try @ 0035e1b8 with catch @ 0035e058
                       catch() { ... } // from try @ 0035e26c with catch @ 0035e058
                       catch() { ... } // from try @ 0035e2dc with catch @ 0035e058
                       catch() { ... } // from try @ 0035e314 with catch @ 0035e058
                       catch() { ... } // from try @ 0035e328 with catch @ 0035e058
                       catch() { ... } // from try @ 0035e33c with catch @ 0035e058 */
    puVar7[8] = puVar17;
    puVar7[9] = puVar17;
    puVar7[1] = &PTR_FUN_004f6910;
    this_00 = (Mutex *)(puVar7 + 0xd);
    puVar7[2] = &PTR_FUN_004f6960;
    *(undefined4 *)(puVar7 + 10) = 0;
    puVar7[0xb] = &PTR_FUN_004f68a0;
    puVar7[0xc] = &PTR_FUN_004f68f0;
    Mutex::Mutex(this_00);
    puVar7[0xe] = 0;
    puVar7[0xf] = 0;
    puVar1 = puVar7 + 0x12;
    puVar7[0x10] = puVar7 + 0x10;
    puVar7[0x11] = puVar7 + 0x10;
    puVar7[0x12] = puVar1;
    puVar7[0x13] = puVar1;
    puVar7[0xb] = &PTR_FUN_004f6910;
    puVar7[0xc] = &PTR_FUN_004f6960;
                    /* try { // try from 0035e0d4 to 0045e177 has its CatchHandler @ 0035e058 */
    *(undefined4 *)(puVar7 + 0x14) = 0x10;
    this_01 = (Device *)Device::getDefault();
    iVar6 = Device::vendorID(this_01);
    uVar11 = 0x8000000;
    if (iVar6 != 2) {
      uVar11 = 0;
    }
    uVar8 = FUN_0034dab0(&DAT_0046e460,uVar11);
    Mutex::lock(this);
    uVar9 = puVar7[5];
    puVar7[5] = uVar8;
    if (uVar8 < uVar9) {
      puVar16 = (undefined8 *)puVar7[8];
      while (puVar17 != puVar16) {
        while ((ulong)puVar16[3] <= uVar8 >> 3) {
          puVar16 = (undefined8 *)*puVar16;
          if (puVar17 == puVar16) goto LAB_0035e1bc;
        }
        lVar12 = puVar16[2];
        puVar7[4] = puVar7[4] - puVar16[3];
        if (lVar12 == 0) {
          local_60 = lVar12;
          local_58 = lVar12;
                    /* try { // try from 0035e328 to 0045e32b has its CatchHandler @ 0035e058 */
                    /* catch() { ... } // from try @ 0035e2d4 with catch @ 0035e32c */
          pcVar10 = (char *)String::allocate((String *)&local_60,0x17);
          cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
          uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
                    /* try { // try from 0035e33c to 0045e33f has its CatchHandler @ 0035e058 */
                    /* catch() { ... } // from try @ 0035e3ac with catch @ 0035e340
                       catch() { ... } // from try @ 0035e4c0 with catch @ 0035e340
                       catch() { ... } // from try @ 0035e594 with catch @ 0035e340
                       catch() { ... } // from try @ 0035e660 with catch @ 0035e340
                       catch() { ... } // from try @ 0035e674 with catch @ 0035e340 */
          *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
          *(undefined2 *)(pcVar10 + 0x14) = uVar4;
          uVar3 = s_entry_clBuffer_____NULL_0046d640._8_8_;
          uVar2 = s_entry_clBuffer_____NULL_0046d640._0_8_;
          pcVar10[0x16] = cVar5;
          *(undefined8 *)pcVar10 = uVar2;
          *(undefined8 *)(pcVar10 + 8) = uVar3;
          error(-0xd7,(String *)&local_60,
                "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
          String::deallocate((String *)&local_60);
          lVar12 = puVar16[2];
          if (DAT_00532980 == (code *)0x0) goto LAB_0035e394;
LAB_0035e18c:
          (*DAT_00532980)(lVar12);
        }
        else {
          if (DAT_00532980 != (code *)0x0) goto LAB_0035e18c;
LAB_0035e394:
          DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
          if (DAT_00532980 != (code *)0x0) goto LAB_0035e18c;
        }
        puVar13 = (undefined8 *)*puVar16;
        FUN_003dc008(puVar16);
                    /* try { // try from 0035e1a8 to 0045e1ab has its CatchHandler @ 0035e304 */
        operator_delete(puVar16);
        uVar8 = puVar7[5];
                    /* try { // try from 0035e1b8 to 0045e217 has its CatchHandler @ 0035e058 */
        puVar16 = puVar13;
      }
LAB_0035e1bc:
      uVar9 = puVar7[4];
      if (uVar8 < uVar9) {
        do {
          lVar15 = puVar7[9];
          lVar12 = *(long *)(lVar15 + 0x18);
          puVar7[4] = uVar9 - lVar12;
          if (lVar12 == 0) {
            local_50 = lVar12;
            local_48 = lVar12;
            pcVar10 = (char *)String::allocate((String *)&local_50,0x14);
            uVar3 = s_entry_capacity_____0_0046d5e8._8_8_;
            uVar2 = s_entry_capacity_____0_0046d5e8._0_8_;
                    /* try { // try from 0035e260 to 0045e263 has its CatchHandler @ 0035e318 */
                    /* try { // try from 0035e26c to 0045e28b has its CatchHandler @ 0035e058 */
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
            *(undefined8 *)pcVar10 = uVar2;
            *(undefined8 *)(pcVar10 + 8) = uVar3;
            error(-0xd7,(String *)&local_50,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
            String::deallocate((String *)&local_50);
            lVar12 = *(long *)(lVar15 + 0x10);
            if (lVar12 == 0) goto LAB_0035e298;
LAB_0035e1f0:
            if (DAT_00532980 == (code *)0x0) goto LAB_0035e30c;
LAB_0035e1fc:
            (*DAT_00532980)(lVar12);
          }
          else {
            lVar12 = *(long *)(lVar15 + 0x10);
            if (lVar12 != 0) goto LAB_0035e1f0;
LAB_0035e298:
            local_40 = 0;
            local_38 = local_40;
            pcVar10 = (char *)String::allocate((String *)&local_40,0x17);
            cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
            uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
            uVar3 = s_entry_clBuffer_____NULL_0046d640._8_8_;
            uVar2 = s_entry_clBuffer_____NULL_0046d640._0_8_;
                    /* try { // try from 0035e2d4 to 0045e2d7 has its CatchHandler @ 0035e32c */
                    /* try { // try from 0035e2dc to 0045e2fb has its CatchHandler @ 0035e058 */
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
            *(undefined2 *)(pcVar10 + 0x14) = uVar4;
            pcVar10[0x16] = cVar5;
            *(undefined8 *)pcVar10 = uVar2;
            *(undefined8 *)(pcVar10 + 8) = uVar3;
            error(-0xd7,(String *)&local_40,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
            String::deallocate((String *)&local_40);
            lVar12 = *(long *)(lVar15 + 0x10);
                    /* catch() { ... } // from try @ 0035e1a8 with catch @ 0035e304 */
            if (DAT_00532980 != (code *)0x0) goto LAB_0035e1fc;
LAB_0035e30c:
                    /* try { // try from 0035e314 to 0045e317 has its CatchHandler @ 0035e058 */
            DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
                    /* catch() { ... } // from try @ 0035e260 with catch @ 0035e318 */
            if (DAT_00532980 != (code *)0x0) goto LAB_0035e1fc;
          }
          pvVar14 = (void *)puVar7[9];
          FUN_003dc008(pvVar14);
          operator_delete(pvVar14);
          uVar9 = puVar7[4];
        } while ((ulong)puVar7[5] < uVar9);
      }
    }
                    /* try { // try from 0035e3ac to 0045e47f has its CatchHandler @ 0035e340 */
    Mutex::unlock(this);
    uVar8 = FUN_0034dab0("OPENCV_OPENCL_HOST_PTR_BUFFERPOOL_LIMIT",uVar11);
    Mutex::lock(this_00);
    uVar9 = puVar7[0xf];
    puVar7[0xf] = uVar8;
    if (uVar8 < uVar9) {
      puVar17 = (undefined8 *)puVar7[0x12];
      while (puVar1 != puVar17) {
        while ((ulong)puVar17[3] <= uVar8 >> 3) {
          puVar17 = (undefined8 *)*puVar17;
          if (puVar1 == puVar17) goto LAB_0035e478;
        }
        lVar12 = puVar17[2];
        puVar7[0xe] = puVar7[0xe] - puVar17[3];
        if (lVar12 == 0) {
          local_30 = lVar12;
          local_28 = lVar12;
          pcVar10 = (char *)String::allocate((String *)&local_30,0x17);
          cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
          uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
          *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
          *(undefined2 *)(pcVar10 + 0x14) = uVar4;
          uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
          uVar11 = s_entry_clBuffer_____NULL_0046d640._0_8_;
          pcVar10[0x16] = cVar5;
          *(undefined8 *)pcVar10 = uVar11;
          *(undefined8 *)(pcVar10 + 8) = uVar2;
          error(-0xd7,(String *)&local_30,
                "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
          String::deallocate((String *)&local_30);
          lVar12 = puVar17[2];
          if (DAT_00532980 == (code *)0x0) goto LAB_0035e650;
LAB_0035e448:
          (*DAT_00532980)(lVar12);
        }
        else {
          if (DAT_00532980 != (code *)0x0) goto LAB_0035e448;
LAB_0035e650:
                    /* catch() { ... } // from try @ 0035e4b8 with catch @ 0035e650 */
          DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
          if (DAT_00532980 != (code *)0x0) goto LAB_0035e448;
        }
        puVar16 = (undefined8 *)*puVar17;
        FUN_003dc008(puVar17);
        operator_delete(puVar17);
        uVar8 = puVar7[0xf];
        puVar17 = puVar16;
      }
LAB_0035e478:
      uVar9 = puVar7[0xe];
      if (uVar8 < uVar9) {
        do {
          lVar15 = puVar7[0x13];
          lVar12 = *(long *)(lVar15 + 0x18);
          puVar7[0xe] = uVar9 - lVar12;
          if (lVar12 == 0) {
            local_20 = lVar12;
            local_18 = lVar12;
            pcVar10 = (char *)String::allocate((String *)&local_20,0x14);
            uVar2 = s_entry_capacity_____0_0046d5e8._8_8_;
            uVar11 = s_entry_capacity_____0_0046d5e8._0_8_;
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_capacity_____0_0046d5e8._16_4_;
            *(undefined8 *)pcVar10 = uVar11;
            *(undefined8 *)(pcVar10 + 8) = uVar2;
            error(-0xd7,(String *)&local_20,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa3);
            String::deallocate((String *)&local_20);
            lVar12 = *(long *)(lVar15 + 0x10);
            if (lVar12 == 0) goto LAB_0035e554;
LAB_0035e4ac:
            if (DAT_00532980 == (code *)0x0) goto LAB_0035e5c8;
LAB_0035e4b8:
                    /* try { // try from 0035e4b8 to 0045e4bb has its CatchHandler @ 0035e650 */
                    /* try { // try from 0035e4c0 to 0045e54b has its CatchHandler @ 0035e340 */
            (*DAT_00532980)(lVar12);
          }
          else {
            lVar12 = *(long *)(lVar15 + 0x10);
            if (lVar12 != 0) goto LAB_0035e4ac;
LAB_0035e554:
            local_10 = 0;
            local_8 = local_10;
            pcVar10 = (char *)String::allocate((String *)&local_10,0x17);
            cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
            uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
            uVar2 = s_entry_clBuffer_____NULL_0046d640._8_8_;
            uVar11 = s_entry_clBuffer_____NULL_0046d640._0_8_;
                    /* try { // try from 0035e58c to 0045e58f has its CatchHandler @ 0035e664 */
                    /* try { // try from 0035e594 to 0045e597 has its CatchHandler @ 0035e340 */
            *(undefined4 *)(pcVar10 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
            *(undefined2 *)(pcVar10 + 0x14) = uVar4;
            pcVar10[0x16] = cVar5;
            *(undefined8 *)pcVar10 = uVar11;
            *(undefined8 *)(pcVar10 + 8) = uVar2;
            error(-0xd7,(String *)&local_10,
                  "void cv::ocl::OpenCLBufferPoolImpl::_releaseBufferEntry(const BufferEntry&)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xfa4);
            String::deallocate((String *)&local_10);
            lVar12 = *(long *)(lVar15 + 0x10);
            if (DAT_00532980 != (code *)0x0) goto LAB_0035e4b8;
LAB_0035e5c8:
            DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject");
            if (DAT_00532980 != (code *)0x0) goto LAB_0035e4b8;
          }
          pvVar14 = (void *)puVar7[0x13];
          FUN_003dc008(pvVar14);
          operator_delete(pvVar14);
          uVar9 = puVar7[0xe];
        } while ((ulong)puVar7[0xf] < uVar9);
      }
    }
                    /* catch() { ... } // from try @ 0035e58c with catch @ 0035e664 */
    Mutex::unlock(this_00);
    uVar11 = Mat::getStdAllocator();
                    /* try { // try from 0035e674 to 0045e677 has its CatchHandler @ 0035e340 */
    puVar7[0x15] = uVar11;
    DAT_00532968 = puVar7;
                    /* catch() { ... } // from try @ 0035e6f0 with catch @ 0035e678
                       catch() { ... } // from try @ 0035e7d8 with catch @ 0035e678
                       catch() { ... } // from try @ 0035e8e8 with catch @ 0035e678
                       catch() { ... } // from try @ 0035e9d0 with catch @ 0035e678
                       catch() { ... } // from try @ 0035e9e4 with catch @ 0035e678 */
    __cxa_guard_release(&DAT_005320a8);
  }
  return puVar7;
}


==================================================================

### FUNC 0035e788 (1568 bytes) name=FUN_0035e788

void FUN_0035e788(undefined4 *param_1,ProgramSource *param_2,String *param_3,String *param_4)

{
  ProgramSource *this;
  String *this_00;
  char cVar1;
  bool bVar2;
  undefined2 uVar3;
  int iVar4;
  int iVar5;
  Context *this_01;
  undefined8 *puVar6;
  long lVar7;
  ulong uVar8;
  Device *pDVar9;
  char *__s;
  size_t __n;
  void *__dest;
  int *piVar10;
  undefined8 uVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  ulong uVar14;
  undefined8 uVar15;
  int local_8a4;
  undefined1 *local_8a0;
  long local_898;
  Device aDStack_890 [8];
  long local_888;
  undefined8 local_880;
  void *local_878;
  undefined8 local_870;
  char *local_868;
  ulong local_860;
  char acStack_858 [1032];
  undefined8 *local_450;
  ulong local_448;
  undefined8 auStack_440 [136];
  
  this = (ProgramSource *)(param_1 + 2);
  this_00 = (String *)(param_1 + 4);
  cv::ocl::ProgramSource::ProgramSource(this);
                    /* try { // try from 0035e7d0 to 0045e7d3 has its CatchHandler @ 0035e9d4 */
  *(undefined8 *)(param_1 + 4) = 0;
  *(undefined8 *)(param_1 + 6) = 0;
                    /* try { // try from 0035e7d8 to 0045e8a7 has its CatchHandler @ 0035e678 */
  *param_1 = 1;
  this_01 = (Context *)cv::ocl::Context::getDefault(true);
  cv::ocl::ProgramSource::operator=(this,param_2);
  if (this_00 != param_3) {
    cv::String::deallocate(this_00);
    uVar11 = 0;
    if (*(long *)param_3 != 0) {
      piVar10 = (int *)(*(long *)param_3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar2) {
          *piVar10 = *piVar10 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      uVar11 = *(undefined8 *)param_3;
    }
    *(undefined8 *)(param_1 + 4) = uVar11;
    *(undefined8 *)(param_1 + 6) = *(undefined8 *)(param_3 + 8);
  }
  puVar6 = (undefined8 *)cv::ocl::ProgramSource::source(this);
  local_8a0 = (undefined1 *)*puVar6;
  if (local_8a0 == (undefined1 *)0x0) {
    local_8a0 = &DAT_00472008;
  }
  local_898 = puVar6[1];
  local_8a4 = 0;
  uVar11 = cv::ocl::Context::ptr(this_01);
  if ((DAT_005320e8 == (code *)0x0) &&
     (DAT_005320e8 = (code *)FUN_0034d2bc("clCreateProgramWithSource"), DAT_005320e8 == (code *)0x0)
     ) {
    *(undefined8 *)(param_1 + 8) = 0;
    return;
  }
  lVar7 = (*DAT_005320e8)(uVar11,1,&local_8a0,&local_898,&local_8a4);
  *(long *)(param_1 + 8) = lVar7;
  if (lVar7 == 0) {
    return;
  }
  if (local_8a4 != 0) {
    return;
  }
  iVar4 = cv::ocl::Context::ndevices(this_01);
                    /* try { // try from 0035e8e0 to 0045e8e3 has its CatchHandler @ 0035e9c0 */
  puVar6 = auStack_440;
                    /* try { // try from 0035e8e8 to 0045e8eb has its CatchHandler @ 0035e678 */
  uVar14 = (ulong)(iVar4 + 1);
  local_448 = 0x88;
  if (0x88 < uVar14) {
    uVar8 = uVar14 << 3;
    if (0xfe0000000000000 < uVar14) {
      uVar8 = 0xffffffffffffffff;
    }
    local_450 = puVar6;
    puVar6 = operator_new__(uVar8);
  }
  uVar8 = 0;
  local_450 = puVar6;
  local_448 = uVar14;
  if (0 < iVar4) {
    do {
      pDVar9 = (Device *)cv::ocl::Context::device(this_01,uVar8);
      uVar11 = cv::ocl::Device::ptr(pDVar9);
      puVar6[uVar8] = uVar11;
      uVar8 = uVar8 + 1;
    } while ((int)uVar8 < iVar4);
  }
  pDVar9 = (Device *)cv::ocl::Device::getDefault();
  cv::ocl::Device::Device(aDStack_890,pDVar9);
  iVar5 = cv::ocl::Device::vendorID(aDStack_890);
  if (iVar5 == 1) {
    local_878 = (void *)0x0;
    local_870 = 0;
    cv::String::allocate((String *)&local_878,*(long *)(param_1 + 6) + 0xe);
    memcpy(local_878,*(void **)(param_1 + 4),*(size_t *)(param_1 + 6));
    lVar7 = *(long *)(param_1 + 6);
    *(undefined8 *)((long)local_878 + lVar7) = s__D_AMD_DEVICE_0046e4c8._0_8_;
    uVar3 = s__D_AMD_DEVICE_0046e4c8._12_2_;
    *(undefined4 *)((long)local_878 + lVar7 + 8) = s__D_AMD_DEVICE_0046e4c8._8_4_;
    *(undefined2 *)((long)local_878 + lVar7 + 0xc) = uVar3;
    cv::String::deallocate(this_00);
    if (local_878 != (void *)0x0) {
      piVar10 = (int *)((long)local_878 - 4);
      do {
                    /* catch() { ... } // from try @ 0035eb68 with catch @ 0035ec48 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
        if (bVar2) {
          *piVar10 = *piVar10 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
                    /* try { // try from 0035ec58 to 0045ec5b has its CatchHandler @ 0035e9e8 */
    *(void **)(param_1 + 4) = local_878;
                    /* catch() { ... } // from try @ 0035ecc8 with catch @ 0035ec5c
                       catch() { ... } // from try @ 0035edf0 with catch @ 0035ec5c
                       catch() { ... } // from try @ 0035eec4 with catch @ 0035ec5c */
    *(undefined8 *)(param_1 + 6) = local_870;
    cv::String::deallocate((String *)&local_878);
  }
  else {
    iVar5 = cv::ocl::Device::vendorID(aDStack_890);
    if (iVar5 == 2) {
      local_868 = (char *)0x0;
      local_860 = 0;
      cv::String::allocate((String *)&local_868,*(long *)(param_1 + 6) + 0x10);
                    /* try { // try from 0035ecc8 to 0045eda7 has its CatchHandler @ 0035ec5c */
      memcpy(local_868,*(void **)(param_1 + 4),*(size_t *)(param_1 + 6));
      uVar11 = s__D_INTEL_DEVICE_0046e4d8._8_8_;
      lVar7 = *(long *)(param_1 + 6);
      *(undefined8 *)(local_868 + lVar7) = s__D_INTEL_DEVICE_0046e4d8._0_8_;
      *(undefined8 *)(local_868 + lVar7 + 8) = uVar11;
      cv::String::deallocate(this_00);
      if (local_868 != (char *)0x0) {
        piVar10 = (int *)(local_868 + -4);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
          if (bVar2) {
            *piVar10 = *piVar10 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      *(char **)(param_1 + 4) = local_868;
      *(ulong *)(param_1 + 6) = local_860;
      cv::String::deallocate((String *)&local_868);
    }
  }
  puVar13 = *(undefined1 **)(param_1 + 4);
  uVar11 = *(undefined8 *)(param_1 + 8);
  if (puVar13 == (undefined1 *)0x0) {
    puVar13 = &DAT_00472008;
  }
  if ((DAT_005320c8 == (code *)0x0) &&
     (DAT_005320c8 = (code *)FUN_0034d2bc("clBuildProgram"), DAT_005320c8 == (code *)0x0)) {
    local_8a4 = -1000;
  }
  else {
    local_8a4 = (*DAT_005320c8)(uVar11,iVar4,puVar6,puVar13,0,0);
                    /* catch() { ... } // from try @ 0035e8e0 with catch @ 0035e9c0 */
    if (local_8a4 == 0) goto LAB_0035eb88;
  }
  uVar11 = *puVar6;
                    /* try { // try from 0035e9d0 to 0045e9d3 has its CatchHandler @ 0035e678 */
  local_878 = (void *)0x0;
                    /* catch() { ... } // from try @ 0035e7d0 with catch @ 0035e9d4 */
  uVar15 = *(undefined8 *)(param_1 + 8);
                    /* try { // try from 0035e9e4 to 0045e9e7 has its CatchHandler @ 0035e678 */
                    /* catch() { ... } // from try @ 0035ea4c with catch @ 0035e9e8
                       catch() { ... } // from try @ 0035eb70 with catch @ 0035e9e8
                       catch() { ... } // from try @ 0035ec58 with catch @ 0035e9e8 */
  if ((((DAT_00532060 != (code *)0x0) ||
       (DAT_00532060 = (code *)FUN_0034d2bc(&LAB_0046e500), DAT_00532060 != (code *)0x0)) &&
      (iVar4 = (*DAT_00532060)(uVar15,uVar11,0x1183,0,0,&local_878), iVar4 == 0)) &&
     ((void *)0x1 < local_878)) {
    uVar14 = (long)local_878 + 0x10;
    __s = acStack_858;
    local_860 = 0x408;
    if (0x408 < uVar14) {
      local_868 = __s;
                    /* try { // try from 0035ea4c to 0045eb2f has its CatchHandler @ 0035e9e8 */
      __s = operator_new__(uVar14);
    }
    lVar7 = (long)local_878 + 1;
    uVar15 = *puVar6;
    uVar11 = *(undefined8 *)(param_1 + 8);
    local_868 = __s;
    local_860 = uVar14;
    if (((DAT_00532060 != (code *)0x0) ||
        (DAT_00532060 = (code *)FUN_0034d2bc(&LAB_0046e500), DAT_00532060 != (code *)0x0)) &&
       (iVar4 = (*DAT_00532060)(uVar11,uVar15,0x1183,lVar7,__s,&local_878), iVar4 == 0)) {
      local_888 = 0;
      local_880 = 0;
      __n = strlen(__s);
      __dest = (void *)cv::String::allocate((String *)&local_888,__n);
      memcpy(__dest,__s,__n);
      cv::String::deallocate(param_4);
      if (local_888 != 0) {
        piVar10 = (int *)(local_888 + -4);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar10,0x10);
          if (bVar2) {
            *piVar10 = *piVar10 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      *(long *)param_4 = local_888;
      *(undefined8 *)(param_4 + 8) = local_880;
      cv::String::deallocate((String *)&local_888);
      puVar13 = *(undefined1 **)(param_1 + 4);
      if (puVar13 == (undefined1 *)0x0) {
        puVar13 = &DAT_00472008;
      }
      puVar12 = *(undefined1 **)param_4;
      if (puVar12 == (undefined1 *)0x0) {
        puVar12 = &DAT_00472008;
      }
      printf("OpenCL program build log: %s\n%s\n",puVar13,puVar12);
      fflush((FILE *)(PTR___sF_00501a80 + 0x98));
    }
    if ((local_868 != acStack_858) && (local_868 != (char *)0x0)) {
      operator_delete__(local_868);
    }
  }
                    /* try { // try from 0035eb68 to 0045eb6b has its CatchHandler @ 0035ec48 */
  if ((local_8a4 != 0) && (lVar7 = *(long *)(param_1 + 8), lVar7 != 0)) {
                    /* try { // try from 0035eb70 to 0045eb73 has its CatchHandler @ 0035e9e8 */
    if ((DAT_005329a8 == (code *)0x0) &&
       (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 == (code *)0x0)) {
      *(undefined8 *)(param_1 + 8) = 0;
    }
    else {
      (*DAT_005329a8)(lVar7);
      *(undefined8 *)(param_1 + 8) = 0;
    }
  }
LAB_0035eb88:
  cv::ocl::Device::~Device(aDStack_890);
  if ((local_450 != auStack_440) && (local_450 != (undefined8 *)0x0)) {
    operator_delete__(local_450);
  }
  return;
}


==================================================================

### FUNC 0035ee6c (400 bytes) name=create

/* cv::ocl::Program::create(cv::ocl::ProgramSource const&, cv::String const&, cv::String&) */

undefined8 __thiscall
cv::ocl::Program::create(Program *this,ProgramSource *param_1,String *param_2,String *param_3)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  int *piVar5;
  
  piVar5 = *(int **)this;
  if (piVar5 != (int *)0x0) {
    do {
      iVar1 = *piVar5;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar4 = *(long *)(piVar5 + 8);
      if (lVar4 != 0) {
        if ((DAT_005329a8 != (code *)0x0) ||
           (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 != (code *)0x0)) {
                    /* try { // try from 0035ef1c to 0045ef4b has its CatchHandler @ 0035eec8 */
          (*DAT_005329a8)(lVar4);
        }
        piVar5[8] = 0;
        piVar5[9] = 0;
      }
      String::deallocate((String *)(piVar5 + 4));
      ProgramSource::~ProgramSource((ProgramSource *)(piVar5 + 2));
      operator_delete(piVar5);
    }
  }
                    /* catch() { ... } // from try @ 0035ede0 with catch @ 0035eeb4 */
  piVar5 = operator_new(0x28);
                    /* try { // try from 0035eec4 to 0045eec7 has its CatchHandler @ 0035ec5c */
                    /* catch() { ... } // from try @ 0035ef1c with catch @ 0035eec8
                       catch() { ... } // from try @ 0035efa4 with catch @ 0035eec8
                       catch() { ... } // from try @ 0035f0ac with catch @ 0035eec8
                       catch() { ... } // from try @ 0035f180 with catch @ 0035eec8
                       catch() { ... } // from try @ 0035f36c with catch @ 0035eec8
                       catch() { ... } // from try @ 0035f380 with catch @ 0035eec8
                       catch() { ... } // from try @ 0035f394 with catch @ 0035eec8 */
  FUN_0035e788(piVar5,param_1,param_2,param_3);
  lVar4 = *(long *)(piVar5 + 8);
  *(int **)this = piVar5;
  if (lVar4 == 0) {
    do {
      iVar1 = *piVar5;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 0035ef9c to 0045ef9f has its CatchHandler @ 0035f370 */
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
                    /* try { // try from 0035efa4 to 0045f06b has its CatchHandler @ 0035eec8 */
      lVar4 = *(long *)(piVar5 + 8);
      if (lVar4 != 0) {
        if ((DAT_005329a8 != (code *)0x0) ||
           (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 != (code *)0x0)) {
          (*DAT_005329a8)(lVar4);
        }
        piVar5[8] = 0;
        piVar5[9] = 0;
      }
      String::deallocate((String *)(piVar5 + 4));
      ProgramSource::~ProgramSource((ProgramSource *)(piVar5 + 2));
      operator_delete(piVar5);
    }
    *(undefined8 *)this = 0;
    return 0;
  }
  return 1;
}


==================================================================

### FUNC 0035f058 (8 bytes) name=Program

/* cv::ocl::Program::Program(cv::ocl::ProgramSource const&, cv::String const&, cv::String&) */

void __thiscall
cv::ocl::Program::Program(Program *this,ProgramSource *param_1,String *param_2,String *param_3)

{
  *(undefined8 *)this = 0;
  create(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 0035f060 (208 bytes) name=getPrefix

/* cv::ocl::Program::getPrefix(cv::String const&) */

void __thiscall cv::ocl::Program::getPrefix(Program *this,String *param_1)

{
  Context *this_00;
  undefined1 *puVar1;
  undefined1 *local_20 [2];
  undefined1 *local_10 [2];
  
  this_00 = (Context *)Context::getDefault(true);
  Context::device(this_00,0);
  Device::name();
  if (local_20[0] == (undefined1 *)0x0) {
    local_20[0] = &DAT_00472008;
  }
                    /* try { // try from 0035f0ac to 0045f137 has its CatchHandler @ 0035eec8 */
  Device::driverVersion();
  if (local_10[0] == (undefined1 *)0x0) {
    puVar1 = *(undefined1 **)this;
    local_10[0] = &DAT_00472008;
  }
  else {
    puVar1 = *(undefined1 **)this;
  }
  if (puVar1 == (undefined1 *)0x0) {
    puVar1 = &DAT_00472008;
  }
  format("name=%s\ndriver=%s\nbuildflags=%s\n",local_20[0],local_10[0],puVar1);
  String::deallocate((String *)local_10);
  String::deallocate((String *)local_20);
  return;
}


==================================================================

### FUNC 0035f154 (1052 bytes) name=getProg

/* cv::ocl::Context::getProg(cv::ocl::ProgramSource const&, cv::String const&, cv::String&) */

void cv::ocl::Context::getProg(ProgramSource *param_1,String *param_2,String *param_3)

{
  long lVar1;
  bool bVar2;
  ulong uVar3;
  long lVar4;
  long lVar5;
  void *pvVar6;
  long lVar7;
  String *in_x3;
  byte *pbVar8;
  ulong uVar10;
  Program *in_x8;
  ulong uVar11;
  int iVar12;
  ulong uVar13;
  long lVar14;
  Program aPStack_48 [8];
  byte *local_40;
  long local_38;
  ulong local_30;
  ulong local_28;
  Program aPStack_20 [8];
  ulong local_18;
  ulong local_10;
  Program aPStack_8 [8];
  byte *pbVar9;
  
                    /* try { // try from 0035f178 to 0045f17b has its CatchHandler @ 0035f35c */
  lVar14 = *(long *)param_1;
                    /* try { // try from 0035f180 to 0045f183 has its CatchHandler @ 0035eec8 */
  if (lVar14 == 0) {
    Program::Program(in_x8);
    return;
  }
  Program::getPrefix((Program *)param_3,param_2);
  uVar3 = ProgramSource::hash((ProgramSource *)param_2);
  if (local_40 == (byte *)0x0) {
    local_40 = &DAT_00472008;
  }
  if (DAT_00532128 == '\0') {
    uVar13 = 0;
    do {
      uVar10 = uVar13 >> 1;
      while( true ) {
        uVar11 = uVar10 & 1;
        if ((uVar10 & 1) != 0) {
          uVar11 = 0xc96c5795d7870f42;
        }
        uVar11 = uVar11 ^ uVar10 >> 1;
        uVar10 = uVar11 & 1;
        if ((uVar11 & 1) != 0) {
          uVar10 = 0xc96c5795d7870f42;
        }
        uVar10 = uVar10 ^ uVar11 >> 1;
        uVar11 = uVar10 & 1;
        if ((uVar10 & 1) != 0) {
          uVar11 = 0xc96c5795d7870f42;
        }
        uVar11 = uVar11 ^ uVar10 >> 1;
        uVar10 = uVar11 & 1;
        if ((uVar11 & 1) != 0) {
          uVar10 = 0xc96c5795d7870f42;
        }
        uVar10 = uVar10 ^ uVar11 >> 1;
        uVar11 = uVar10 & 1;
        if ((uVar10 & 1) != 0) {
          uVar11 = 0xc96c5795d7870f42;
        }
        uVar11 = uVar11 ^ uVar10 >> 1;
        uVar10 = uVar11 & 1;
        if ((uVar11 & 1) != 0) {
          uVar10 = 0xc96c5795d7870f42;
        }
        uVar10 = uVar10 ^ uVar11 >> 1;
        uVar11 = uVar10 & 1;
        if ((uVar10 & 1) != 0) {
          uVar11 = 0xc96c5795d7870f42;
        }
        iVar12 = (int)uVar13;
        (&DAT_00532160)[uVar13] = uVar11 ^ uVar10 >> 1;
        if (uVar13 == 0xff) {
          DAT_00532128 = '\x01';
          goto LAB_0035f2d8;
        }
        uVar13 = uVar13 + 1;
        if ((iVar12 + 1U & 1) == 0) break;
        uVar10 = uVar13 >> 1 ^ 0xc96c5795d7870f42;
      }
    } while( true );
  }
LAB_0035f2d8:
  uVar13 = 0;
  if (local_38 != 0) {
    uVar13 = 0xffffffffffffffff;
    pbVar9 = local_40;
    do {
      pbVar8 = pbVar9 + 1;
      uVar13 = (&DAT_00532160)[(int)(((uint)*pbVar9 ^ (uint)uVar13) & 0xff)] ^ uVar13 >> 8;
      pbVar9 = pbVar8;
    } while (pbVar8 != local_40 + local_38);
    uVar13 = ~uVar13;
  }
  lVar1 = lVar14 + 0x30;
  lVar4 = *(long *)(lVar14 + 0x38);
  lVar7 = lVar1;
  if (*(long *)(lVar14 + 0x38) != 0) {
    do {
      while ((lVar5 = lVar4, uVar10 = *(ulong *)(lVar5 + 0x20), uVar3 < uVar10 || uVar3 == uVar10 &&
             ((uVar3 != uVar10 || (uVar13 <= *(ulong *)(lVar5 + 0x28)))))) {
        lVar4 = *(long *)(lVar5 + 0x10);
        lVar7 = lVar5;
        if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0035f338;
      }
      lVar4 = *(long *)(lVar5 + 0x18);
    } while (*(long *)(lVar5 + 0x18) != 0);
LAB_0035f338:
    if (((lVar1 != lVar7) && (*(ulong *)(lVar7 + 0x20) <= uVar3)) &&
       ((uVar3 != *(ulong *)(lVar7 + 0x20) || (*(ulong *)(lVar7 + 0x28) <= uVar13)))) {
      Program::Program(in_x8,(Program *)(lVar7 + 0x30));
      goto LAB_0035f4d4;
    }
  }
                    /* catch() { ... } // from try @ 0035f178 with catch @ 0035f35c */
  Program::Program(aPStack_48,(ProgramSource *)param_2,param_3,in_x3);
  lVar4 = Program::ptr(aPStack_48);
                    /* try { // try from 0035f36c to 0045f36f has its CatchHandler @ 0035eec8 */
  if (lVar4 != 0) {
                    /* catch() { ... } // from try @ 0035ef9c with catch @ 0035f370 */
    local_30 = uVar3;
    local_28 = uVar13;
                    /* try { // try from 0035f380 to 0045f383 has its CatchHandler @ 0035eec8 */
                    /* catch() { ... } // from try @ 0035f0a4 with catch @ 0035f384 */
    Program::Program(aPStack_20,aPStack_48);
                    /* try { // try from 0035f394 to 0045f397 has its CatchHandler @ 0035eec8 */
                    /* catch() { ... } // from try @ 0035f3f8 with catch @ 0035f398
                       catch() { ... } // from try @ 0035f480 with catch @ 0035f398
                       catch() { ... } // from try @ 0035f55c with catch @ 0035f398
                       catch() { ... } // from try @ 0035f7a0 with catch @ 0035f398
                       catch() { ... } // from try @ 0035f888 with catch @ 0035f398
                       catch() { ... } // from try @ 0035f89c with catch @ 0035f398
                       catch() { ... } // from try @ 0035f8b0 with catch @ 0035f398 */
    local_18 = local_30;
    local_10 = local_28;
    Program::Program(aPStack_8,aPStack_20);
    lVar4 = *(long *)(lVar14 + 0x38);
    lVar7 = lVar1;
    if (lVar4 != 0) {
      uVar3 = *(ulong *)(lVar4 + 0x20);
      bVar2 = uVar3 == local_18;
      if (local_18 <= uVar3 && !bVar2) goto LAB_0035f3dc;
      do {
        if ((bVar2) && (local_10 < *(ulong *)(lVar4 + 0x28))) {
          lVar7 = *(long *)(lVar4 + 0x10);
          goto LAB_0035f3e4;
        }
        bVar2 = false;
        lVar7 = *(long *)(lVar4 + 0x18);
        lVar5 = lVar4;
        while( true ) {
          lVar4 = lVar7;
          if (lVar4 == 0) {
            lVar7 = lVar5;
            if (bVar2) goto LAB_0035f3ec;
            bVar2 = uVar3 == local_18;
            if (local_18 <= uVar3) goto LAB_0035f54c;
            goto LAB_0035f410;
          }
          uVar3 = *(ulong *)(lVar4 + 0x20);
          bVar2 = uVar3 == local_18;
          if (uVar3 <= local_18) break;
LAB_0035f3dc:
          lVar7 = *(long *)(lVar4 + 0x10);
LAB_0035f3e4:
          bVar2 = true;
          lVar5 = lVar4;
        }
      } while( true );
    }
LAB_0035f3ec:
    if (lVar7 == *(long *)(lVar14 + 0x40)) {
LAB_0035f410:
      bVar2 = true;
      if (((lVar1 != lVar7) && (*(ulong *)(lVar7 + 0x20) <= local_18)) &&
         (bVar2 = false, local_18 == *(ulong *)(lVar7 + 0x20))) {
        bVar2 = local_10 < *(ulong *)(lVar7 + 0x28);
      }
      pvVar6 = operator_new(0x38);
      *(ulong *)((long)pvVar6 + 0x20) = local_18;
      *(ulong *)((long)pvVar6 + 0x28) = local_10;
      Program::Program((Program *)((long)pvVar6 + 0x30),aPStack_8);
      FUN_003fe21c(bVar2,pvVar6,lVar7,lVar1);
                    /* try { // try from 0035f478 to 0045f47b has its CatchHandler @ 0035f8a0 */
                    /* try { // try from 0035f480 to 0045f513 has its CatchHandler @ 0035f398 */
      *(long *)(lVar14 + 0x50) = *(long *)(lVar14 + 0x50) + 1;
    }
    else {
                    /* try { // try from 0035f3f8 to 0045f427 has its CatchHandler @ 0035f398 */
      lVar5 = FUN_003fe07c(lVar7);
      bVar2 = *(ulong *)(lVar5 + 0x20) == local_18;
      if (*(ulong *)(lVar5 + 0x20) < local_18) goto LAB_0035f410;
LAB_0035f54c:
                    /* try { // try from 0035f554 to 0045f557 has its CatchHandler @ 0035f88c */
                    /* try { // try from 0035f55c to 0045f75f has its CatchHandler @ 0035f398 */
      if (((bVar2) && (*(ulong *)(lVar5 + 0x28) < local_10)) && (lVar7 != 0)) goto LAB_0035f410;
    }
    Program::~Program(aPStack_8);
    Program::~Program(aPStack_20);
  }
  Program::Program(in_x8,aPStack_48);
  Program::~Program(aPStack_48);
LAB_0035f4d4:
  String::deallocate((String *)&local_40);
  return;
}


==================================================================

### FUNC 0035f5d0 (496 bytes) name=FUN_0035f5d0

/* WARNING: Type propagation algorithm not settling */

String * FUN_0035f5d0(String *param_1,long param_2,String *param_3)

{
  ulong uVar1;
  undefined1 *__src;
  int iVar2;
  void *__dest;
  undefined8 uVar3;
  long local_440 [2];
  undefined1 *local_430;
  undefined1 *local_428;
  size_t local_420;
  undefined1 *local_418;
  ulong local_410;
  undefined1 auStack_408 [1032];
  
  if (*(long *)(param_2 + 0x20) == 0) {
    *(undefined8 *)param_1 = 0;
    *(undefined8 *)(param_1 + 8) = 0;
  }
  else {
    local_440[0] = 0;
    local_440[1] = 0;
    cv::ocl::Program::getPrefix((Program *)(param_2 + 0x10),param_3);
    uVar3 = *(undefined8 *)(param_2 + 0x20);
    if (((DAT_00532140 == (code *)0x0) &&
        (DAT_00532140 = (code *)FUN_0034d2bc("clGetProgramInfo"), DAT_00532140 == (code *)0x0)) ||
       (iVar2 = (*DAT_00532140)(uVar3,0x1165,8,local_440,local_440 + 1), iVar2 != 0)) {
      *(undefined8 *)param_1 = 0;
      *(undefined8 *)(param_1 + 8) = 0;
    }
    else {
      local_418 = auStack_408;
      uVar1 = local_420 + local_440[0] + 0x10;
      local_410 = 0x408;
      if (0x408 < uVar1) {
        local_418 = operator_new__(uVar1);
      }
      if (local_428 == (undefined1 *)0x0) {
        local_428 = &DAT_00472008;
      }
      local_430 = local_418;
      local_410 = uVar1;
      memcpy(local_418,local_428,local_420);
      uVar3 = *(undefined8 *)(param_2 + 0x20);
      local_430 = local_430 + local_420;
                    /* try { // try from 0035f7a0 to 0045f7a3 has its CatchHandler @ 0035f398 */
      if (((DAT_00532140 == (code *)0x0) &&
          (DAT_00532140 = (code *)FUN_0034d2bc("clGetProgramInfo"), DAT_00532140 == (code *)0x0)) ||
         (iVar2 = (*DAT_00532140)(uVar3,0x1166,8,&local_430,local_440 + 1), __src = local_418,
         iVar2 != 0)) {
        *(undefined8 *)param_1 = 0;
        *(undefined8 *)(param_1 + 8) = 0;
      }
      else {
        local_430[local_440[0]] = 0;
        *(undefined8 *)param_1 = 0;
        *(undefined8 *)(param_1 + 8) = 0;
        uVar1 = local_420 + local_440[0];
        if (uVar1 != 0) {
          __dest = (void *)cv::String::allocate(param_1,uVar1);
          memcpy(__dest,__src,uVar1);
                    /* try { // try from 0035f798 to 0045f79b has its CatchHandler @ 0035f878 */
        }
      }
      if ((local_418 != auStack_408) && (local_418 != (undefined1 *)0x0)) {
        operator_delete__(local_418);
      }
    }
    cv::String::deallocate((String *)&local_428);
  }
  return param_1;
}


==================================================================

### FUNC 0035f7f0 (124 bytes) name=write

/* cv::ocl::Program::write(cv::String&) const */

bool __thiscall cv::ocl::Program::write(Program *this,String *param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  long local_10;
  undefined8 local_8;
  
  bVar2 = false;
  if (*(long *)this != 0) {
    FUN_0035f5d0((String *)&local_10);
    String::deallocate(param_1);
    if (local_10 != 0) {
      piVar3 = (int *)(local_10 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(long *)param_1 = local_10;
    *(undefined8 *)(param_1 + 8) = local_8;
    String::deallocate((String *)&local_10);
    bVar2 = *(long *)(param_1 + 8) != 0;
  }
  return bVar2;
}


==================================================================

### FUNC 0035f880 (68 bytes) name=getPrefix

/* cv::ocl::Program::getPrefix() const */

void cv::ocl::Program::getPrefix(void)

{
  long *in_x0;
  String *in_x1;
  undefined8 *in_x8;
  
                    /* try { // try from 0035f888 to 0045f88b has its CatchHandler @ 0035f398 */
                    /* catch() { ... } // from try @ 0035f554 with catch @ 0035f88c */
  if (*in_x0 != 0) {
    getPrefix((Program *)(*in_x0 + 0x10),in_x1);
                    /* try { // try from 0035f89c to 0045f89f has its CatchHandler @ 0035f398 */
                    /* catch() { ... } // from try @ 0035f478 with catch @ 0035f8a0 */
    return;
  }
  *in_x8 = 0;
                    /* try { // try from 0035f8b0 to 0045f8b3 has its CatchHandler @ 0035f398 */
  in_x8[1] = 0;
                    /* catch() { ... } // from try @ 0035f900 with catch @ 0035f8b4
                       catch() { ... } // from try @ 0035f988 with catch @ 0035f8b4
                       catch() { ... } // from try @ 0035fbb0 with catch @ 0035f8b4
                       catch() { ... } // from try @ 0035fcbc with catch @ 0035f8b4
                       catch() { ... } // from try @ 0035fcd0 with catch @ 0035f8b4 */
  return;
}


==================================================================

### FUNC 0035f8c4 (332 bytes) name=create

/* cv::ocl::Kernel::create(char const*, cv::ocl::ProgramSource const&, cv::String const&,
   cv::String*) */

undefined4
cv::ocl::Kernel::create(char *param_1,ProgramSource *param_2,String *param_3,String *param_4)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  undefined4 uVar5;
  ProgramSource *pPVar6;
  long lVar7;
  int *piVar8;
  int *piVar9;
  Program aPStack_18 [8];
  undefined8 local_10;
  undefined8 local_8;
  
  piVar9 = *(int **)param_1;
  if (piVar9 != (int *)0x0) {
    do {
      iVar1 = *piVar9;
                    /* try { // try from 0035f900 to 0045f92f has its CatchHandler @ 0035f8b4 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar9,0x10);
      if (bVar3) {
        *piVar9 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar7 = *(long *)(piVar9 + 2);
      if ((lVar7 != 0) &&
         ((DAT_005320f0 != (code *)0x0 ||
          (DAT_005320f0 = (code *)FUN_0034d2bc("clReleaseKernel"), DAT_005320f0 != (code *)0x0)))) {
        (*DAT_005320f0)(lVar7);
      }
      piVar4 = *(int **)(piVar9 + 0x28);
      while (piVar4 != piVar9 + 0x28) {
        piVar8 = *(int **)piVar4;
        Image2D::~Image2D((Image2D *)(piVar4 + 4));
        operator_delete(piVar4);
        piVar4 = piVar8;
      }
      operator_delete(piVar9);
    }
    param_1[0] = '\0';
    param_1[1] = '\0';
    param_1[2] = '\0';
    param_1[3] = '\0';
    param_1[4] = '\0';
    param_1[5] = '\0';
    param_1[6] = '\0';
    param_1[7] = '\0';
  }
  local_10 = 0;
  local_8 = 0;
  pPVar6 = (ProgramSource *)Context::getDefault(true);
  Context::getProg(pPVar6,param_3,param_4);
  uVar5 = create((Kernel *)param_1,(char *)param_2,aPStack_18);
  Program::~Program(aPStack_18);
  String::deallocate((String *)&local_10);
                    /* try { // try from 0035f980 to 0045f983 has its CatchHandler @ 0035fcc0 */
                    /* try { // try from 0035f988 to 0045fb6f has its CatchHandler @ 0035f8b4 */
  return uVar5;
}


==================================================================

### FUNC 0035fa6c (8 bytes) name=Kernel

/* cv::ocl::Kernel::Kernel(char const*, cv::ocl::ProgramSource const&, cv::String const&,
   cv::String*) */

void __thiscall
cv::ocl::Kernel::Kernel
          (Kernel *this,char *param_1,ProgramSource *param_2,String *param_3,String *param_4)

{
  *(undefined8 *)this = 0;
  create((char *)this,(ProgramSource *)param_1,(String *)param_2,param_3);
  return;
}


==================================================================

### FUNC 0035fa74 (720 bytes) name=FUN_0035fa74

void FUN_0035fa74(undefined4 *param_1,undefined8 *param_2,String *param_3)

{
  String *this;
  char *__n;
  char cVar1;
  bool bVar2;
  undefined2 uVar3;
  int iVar4;
  Context *this_00;
  Device *this_01;
  char *pcVar5;
  void *__dest;
  String *extraout_x1;
  String *extraout_x1_00;
  String *pSVar6;
  int *piVar7;
  undefined8 uVar8;
  char *pcVar9;
  undefined4 local_50;
  int local_4c;
  char *local_48;
  undefined8 local_40;
  long local_38;
  char *local_30 [2];
  char *local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  this = (String *)(param_1 + 4);
  cv::ocl::ProgramSource::ProgramSource((ProgramSource *)(param_1 + 2));
  *(undefined8 *)(param_1 + 4) = 0;
  *(undefined8 *)(param_1 + 6) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  *param_1 = 1;
  pSVar6 = extraout_x1;
  if (this != param_3) {
    cv::String::deallocate(this);
    uVar8 = 0;
    pSVar6 = extraout_x1_00;
    if (*(long *)param_3 != 0) {
      piVar7 = (int *)(*(long *)param_3 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = *piVar7 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      uVar8 = *(undefined8 *)param_3;
      pSVar6 = (String *)0x0;
    }
    *(undefined8 *)(param_1 + 4) = uVar8;
    *(undefined8 *)(param_1 + 6) = *(undefined8 *)(param_3 + 8);
  }
  if (param_2[1] == 0) {
    return;
  }
  cv::ocl::Program::getPrefix((Program *)this,pSVar6);
  this_00 = (Context *)cv::ocl::Context::getDefault(true);
  this_01 = (Device *)cv::ocl::Device::getDefault();
  pcVar9 = (char *)*param_2;
  if ((((pcVar9 == (char *)0x0) || (pcVar5 = strchr(pcVar9,10), pcVar5 == (char *)0x0)) ||
      (pcVar5 = strchr(pcVar5 + 1,10), pcVar5 == (char *)0x0)) ||
     (pcVar5 = strchr(pcVar5 + 1,10), pcVar5 == (char *)0x0)) goto LAB_0035fbc4;
  local_20 = (char *)0x0;
  local_18 = 0;
  __n = pcVar5 + (1 - (long)pcVar9);
  if (__n == (char *)0x0) {
LAB_0035fba8:
                    /* try { // try from 0035fba8 to 0045fbab has its CatchHandler @ 0035fcac */
    if (local_30[0] == (char *)0x0) goto LAB_0035fbd0;
                    /* try { // try from 0035fbb0 to 0045fbb3 has its CatchHandler @ 0035f8b4 */
    pcVar9 = "";
LAB_0035fbb4:
    iVar4 = strcmp(pcVar9,local_30[0]);
    if (iVar4 == 0) goto LAB_0035fbd0;
  }
  else {
                    /* catch() { ... } // from try @ 0035f980 with catch @ 0035fcc0 */
    __dest = (void *)cv::String::allocate((String *)&local_20,(ulong)__n);
                    /* try { // try from 0035fcd0 to 0045fcd3 has its CatchHandler @ 0035f8b4 */
                    /* catch() { ... } // from try @ 0035fd28 with catch @ 0035fcd4
                       catch() { ... } // from try @ 0035fdb0 with catch @ 0035fcd4
                       catch() { ... } // from try @ 0035ffdc with catch @ 0035fcd4
                       catch() { ... } // from try @ 003600d4 with catch @ 0035fcd4
                       catch() { ... } // from try @ 003600e8 with catch @ 0035fcd4 */
    memcpy(__dest,pcVar9,(size_t)__n);
    if (local_30[0] != local_20) {
      if (local_20 == (char *)0x0) goto LAB_0035fba8;
      pcVar9 = local_20;
      if (local_30[0] == (char *)0x0) {
        local_30[0] = "";
      }
      goto LAB_0035fbb4;
    }
LAB_0035fbd0:
    local_48 = pcVar5 + 1;
    local_40 = cv::ocl::Device::ptr(this_01);
    local_50 = 0;
    local_38 = param_2[1] - (long)__n;
    local_4c = 0;
    uVar8 = cv::ocl::Context::ptr(this_00);
                    /* try { // try from 0035fd28 to 0045fd57 has its CatchHandler @ 0035fcd4 */
    if ((DAT_00532020 == (code *)0x0) &&
       (DAT_00532020 = (code *)FUN_0034d2bc(&DAT_0046e580), DAT_00532020 == (code *)0x0)) {
      local_4c = -1000;
      uVar8 = 0;
    }
    else {
      uVar8 = (*DAT_00532020)(uVar8,1,&local_40,&local_38,&local_48,&local_50,&local_4c);
    }
    *(undefined8 *)(param_1 + 8) = uVar8;
    if (DAT_00532119 == '\0') {
      DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
      DAT_00532119 = '\x01';
    }
    if ((DAT_005329c8 != '\0') && (local_4c != 0)) {
      local_10 = 0;
      local_8 = 0;
      pcVar9 = (char *)cv::String::allocate((String *)&local_10,0xb);
      cVar1 = s_retval____0_0046d938[10];
      uVar3 = s_retval____0_0046d938._8_2_;
      *(undefined8 *)pcVar9 = s_retval____0_0046d938._0_8_;
      *(undefined2 *)(pcVar9 + 8) = uVar3;
                    /* catch() { ... } // from try @ 0035fba8 with catch @ 0035fcac */
      pcVar9[10] = cVar1;
      cv::error(-0xd7,(String *)&local_10,
                "cv::ocl::Program::Impl::Impl(const cv::String&, const cv::String&)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xdea);
      cv::String::deallocate((String *)&local_10);
                    /* try { // try from 0035fcbc to 0045fcbf has its CatchHandler @ 0035f8b4 */
    }
  }
  cv::String::deallocate((String *)&local_20);
LAB_0035fbc4:
  cv::String::deallocate((String *)local_30);
  return;
}


==================================================================

### FUNC 0035fd94 (232 bytes) name=read

/* cv::ocl::Program::read(cv::String const&, cv::String const&) */

bool __thiscall cv::ocl::Program::read(Program *this,String *param_1,String *param_2)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  void *pvVar4;
  long lVar5;
  int *piVar6;
  
                    /* try { // try from 0035fda8 to 0045fdab has its CatchHandler @ 003600d8 */
                    /* try { // try from 0035fdb0 to 0045ff93 has its CatchHandler @ 0035fcd4 */
  piVar6 = *(int **)this;
  if (piVar6 != (int *)0x0) {
    do {
      iVar1 = *piVar6;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar3) {
        *piVar6 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar5 = *(long *)(piVar6 + 8);
      if (lVar5 != 0) {
        if ((DAT_005329a8 != (code *)0x0) ||
           (DAT_005329a8 = (code *)FUN_0034d2bc("clReleaseProgram"), DAT_005329a8 != (code *)0x0)) {
          (*DAT_005329a8)(lVar5);
        }
        piVar6[8] = 0;
        piVar6[9] = 0;
      }
      String::deallocate((String *)(piVar6 + 4));
      ProgramSource::~ProgramSource((ProgramSource *)(piVar6 + 2));
      operator_delete(piVar6);
    }
  }
  pvVar4 = operator_new(0x28);
  FUN_0035fa74(pvVar4,param_1,param_2);
  lVar5 = *(long *)((long)pvVar4 + 0x20);
  *(void **)this = pvVar4;
  return lVar5 != 0;
}


==================================================================

### FUNC 0035feb4 (548 bytes) name=FUN_0035feb4

undefined8 FUN_0035feb4(undefined8 param_1,UMatData *param_2,uint param_3,ulong param_4)

{
  Context *this;
  Device *this_00;
  undefined8 uVar1;
  long lVar2;
  undefined8 *puVar3;
  uint uVar4;
  ulong uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  ulong local_10;
  ulong local_8;
  
  if (param_2 == (UMatData *)0x0) {
    return 0;
  }
  cv::UMatData::lock(param_2);
  if (*(long *)(param_2 + 0x38) == 0) {
    uVar5 = *(ulong *)(param_2 + 0x20);
    if (uVar5 == 0) {
      local_10 = uVar5;
      local_8 = uVar5;
      puVar3 = (undefined8 *)cv::String::allocate((String *)&local_10,0x10);
      uVar6 = DAT_0046e5a8;
      *puVar3 = DAT_0046e5a0;
      puVar3[1] = uVar6;
                    /* catch() { ... } // from try @ 0035ffcc with catch @ 003600c4 */
      cv::error(-0xd7,(String *)&local_10,
                "virtual bool cv::ocl::OpenCLAllocator::allocate(cv::UMatData*, int, cv::UMatUsageFlags) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x10a2);
      cv::String::deallocate((String *)&local_10);
                    /* try { // try from 003600d4 to 004600d7 has its CatchHandler @ 0035fcd4 */
    }
    this = (Context *)cv::ocl::Context::getDefault(true);
    this_00 = (Device *)cv::ocl::Context::device(this,0);
    uVar6 = 0x21;
    if ((param_4 & 1) != 0) {
      uVar6 = 0x31;
    }
    uVar7 = 8;
    if ((param_4 & 1) != 0) {
      uVar7 = 0x18;
    }
    cv::ocl::Device::hostUnifiedMemory(this_00);
    uVar1 = cv::ocl::Context::ptr(this);
    local_10 = local_10 & 0xffffffff00000000;
    uVar9 = *(undefined8 *)(param_2 + 0x28);
    uVar8 = *(undefined8 *)(param_2 + 0x20);
    if (DAT_00531ff8 == (code *)0x0) {
      DAT_00531ff8 = (code *)FUN_0034d2bc("clCreateBuffer");
      if (DAT_00531ff8 != (code *)0x0) goto LAB_0035ffb8;
      local_10 = CONCAT44(local_10._4_4_,0xfffffc18);
LAB_00360044:
      if ((param_3 >> 0x1a & 1) == 0) {
        uVar7 = *(undefined8 *)(param_2 + 0x28);
        uVar8 = *(undefined8 *)(param_2 + 0x20);
        if (DAT_00531ff8 == (code *)0x0) {
          DAT_00531ff8 = (code *)FUN_0034d2bc("clCreateBuffer");
          if (DAT_00531ff8 == (code *)0x0) goto LAB_00360020;
        }
        lVar2 = (*DAT_00531ff8)(uVar1,uVar6,uVar7,uVar8,&local_10);
        if (lVar2 != 0) {
          uVar4 = 0x18;
          goto LAB_0035ffe4;
        }
      }
    }
    else {
LAB_0035ffb8:
                    /* try { // try from 0035ffcc to 0045ffcf has its CatchHandler @ 003600c4 */
      lVar2 = (*DAT_00531ff8)(uVar1,uVar7,uVar9,uVar8,&local_10);
                    /* try { // try from 0035ffdc to 0045ffdf has its CatchHandler @ 0035fcd4 */
      if ((lVar2 == 0) || ((int)local_10 < 0)) goto LAB_00360044;
      uVar4 = 8;
LAB_0035ffe4:
      if ((int)local_10 == 0) {
        *(long *)(param_2 + 0x38) = lVar2;
        *(undefined8 *)param_2 = *(undefined8 *)(param_2 + 8);
        *(undefined8 *)(param_2 + 8) = param_1;
        *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) | uVar4;
        *(undefined4 *)(param_2 + 0x48) = 0;
        goto LAB_0035fef0;
      }
    }
LAB_00360020:
    uVar6 = 0;
  }
  else {
LAB_0035fef0:
    uVar6 = 1;
    if ((param_3 >> 0x19 & 1) != 0) {
      *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) | 2;
    }
  }
  cv::UMatData::unlock(param_2);
  return uVar6;
}


==================================================================

### FUNC 003600fc (748 bytes) name=FUN_003600fc

long FUN_003600fc(long param_1,ulong param_2)

{
  long *plVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined2 uVar4;
  char cVar5;
  Context *this;
  undefined8 uVar6;
  void *pvVar7;
  char *pcVar8;
  long lVar9;
  ulong uVar10;
  long *plVar11;
  ulong uVar12;
  ulong uVar13;
  long *plVar14;
  long *plVar15;
  ulong uVar16;
  int local_24;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cv::Mutex::lock((Mutex *)(param_1 + 0x10));
  if (*(long *)(param_1 + 0x20) != 0) {
    plVar1 = (long *)(param_1 + 0x38);
    if (*(long **)(param_1 + 0x38) != plVar1) {
                    /* try { // try from 0036023c to 0046023f has its CatchHandler @ 003605a4 */
      lVar9 = 0;
      plVar11 = *(long **)(param_1 + 0x38);
      uVar10 = 0xffffffffffffffff;
      plVar14 = plVar1;
      uVar16 = 0;
                    /* try { // try from 00360244 to 004602cf has its CatchHandler @ 003600ec */
      do {
        while (((plVar15 = plVar11, uVar12 = plVar15[3], param_2 <= uVar12 &&
                (uVar13 = uVar12 - param_2, uVar13 < param_2 >> 3)) &&
               ((plVar1 == plVar14 || (uVar13 < uVar10))))) {
          lVar9 = plVar15[2];
          if (uVar13 == 0) goto LAB_003602a4;
          plVar11 = (long *)*plVar15;
          uVar10 = uVar13;
          plVar14 = plVar15;
          uVar16 = uVar12;
          if (plVar1 == (long *)*plVar15) goto LAB_0036029c;
        }
        plVar11 = (long *)*plVar15;
        plVar15 = plVar14;
        uVar12 = uVar16;
      } while (plVar1 != plVar11);
LAB_0036029c:
      if (plVar1 != plVar15) {
LAB_003602a4:
        FUN_003dc008(plVar15);
        operator_delete(plVar15);
        *(ulong *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) - uVar12;
        pvVar7 = operator_new(0x20);
        *(long *)((long)pvVar7 + 0x10) = lVar9;
        *(ulong *)((long)pvVar7 + 0x18) = uVar12;
        FUN_003dbfec(pvVar7,param_1 + 0x28);
        goto LAB_003601bc;
      }
    }
  }
  if (param_2 < 0x400) {
    uVar10 = 0xfffffffffffffff0;
    lVar9 = 0x10;
  }
  else if (param_2 < 0x10000) {
    uVar10 = 0xffffffffffffffc0;
    lVar9 = 0x40;
  }
  else if (param_2 < 0x100000) {
    uVar10 = 0xfffffffffffff000;
    lVar9 = 0x1000;
  }
  else {
    uVar10 = 0xffffffffffff0000;
    if (0xffffff < param_2) {
      uVar10 = 0xfffffffffff00000;
    }
    lVar9 = 0x10000;
    if (0xffffff < param_2) {
      lVar9 = 0x100000;
    }
  }
  uVar10 = (param_2 - 1) + lVar9 & uVar10;
  this = (Context *)cv::ocl::Context::getDefault(true);
                    /* try { // try from 00360150 to 00460203 has its CatchHandler @ 003600ec */
  local_24 = 0;
  uVar6 = cv::ocl::Context::ptr(this);
  uVar2 = *(uint *)(param_1 + 0x48);
  if ((DAT_00531ff8 == (code *)0x0) &&
     (DAT_00531ff8 = (code *)FUN_0034d2bc("clCreateBuffer"), DAT_00531ff8 == (code *)0x0)) {
    local_24 = -1000;
    lVar9 = 0;
LAB_00360300:
    local_10 = 0;
                    /* try { // try from 00360310 to 00460313 has its CatchHandler @ 003605b8 */
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x14);
    uVar3 = s_retval____CL_SUCCESS_0046e5c8._8_8_;
    uVar6 = s_retval____CL_SUCCESS_0046e5c8._0_8_;
                    /* try { // try from 00360318 to 0046058f has its CatchHandler @ 003600ec */
    *(undefined4 *)(pcVar8 + 0x10) = s_retval____CL_SUCCESS_0046e5c8._16_4_;
    *(undefined8 *)pcVar8 = uVar6;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0xd7,(String *)&local_10,
              "void cv::ocl::OpenCLBufferPoolImpl::_allocateBufferEntry(cv::ocl::OpenCLBufferPoolImpl::BufferEntry&, size_t)"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xf96);
    cv::String::deallocate((String *)&local_10);
  }
  else {
    lVar9 = (*DAT_00531ff8)(uVar6,(long)(int)(uVar2 | 1),uVar10,0,&local_24);
    if (local_24 != 0) goto LAB_00360300;
  }
  if (lVar9 == 0) {
    local_20 = lVar9;
    local_18 = lVar9;
    pcVar8 = (char *)cv::String::allocate((String *)&local_20,0x17);
    cVar5 = s_entry_clBuffer_____NULL_0046d640[0x16];
    uVar4 = s_entry_clBuffer_____NULL_0046d640._20_2_;
    uVar3 = s_entry_clBuffer_____NULL_0046d640._8_8_;
    uVar6 = s_entry_clBuffer_____NULL_0046d640._0_8_;
    *(undefined4 *)(pcVar8 + 0x10) = s_entry_clBuffer_____NULL_0046d640._16_4_;
    *(undefined2 *)(pcVar8 + 0x14) = uVar4;
    pcVar8[0x16] = cVar5;
    *(undefined8 *)pcVar8 = uVar6;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    cv::error(-0xd7,(String *)&local_20,
              "void cv::ocl::OpenCLBufferPoolImpl::_allocateBufferEntry(cv::ocl::OpenCLBufferPoolImpl::BufferEntry&, size_t)"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xf97);
    cv::String::deallocate((String *)&local_20);
  }
  pvVar7 = operator_new(0x20);
  *(long *)((long)pvVar7 + 0x10) = lVar9;
  *(ulong *)((long)pvVar7 + 0x18) = uVar10;
  FUN_003dbfec(pvVar7,param_1 + 0x28);
LAB_003601bc:
  cv::Mutex::unlock((Mutex *)(param_1 + 0x10));
  return lVar9;
}


==================================================================

### FUNC 0036041c (8 bytes) name=FUN_0036041c

void FUN_0036041c(long param_1)

{
  FUN_003600fc(param_1 + -8);
  return;
}


==================================================================

### FUNC 00360424 (556 bytes) name=FUN_00360424

UMatData *
FUN_00360424(MatAllocator *param_1,int param_2,long param_3,uint param_4,long param_5,long param_6,
            undefined4 param_7,uint param_8)

{
  int iVar1;
  char cVar2;
  uint uVar3;
  char *pcVar4;
  long lVar5;
  Context *pCVar6;
  Device *this;
  UMatData *pUVar7;
  int *piVar8;
  undefined4 uVar10;
  ulong uVar11;
  long lVar12;
  long lVar13;
  undefined8 local_10;
  undefined8 local_8;
  int *piVar9;
  
  cVar2 = cv::ocl::useOpenCL();
  if (cVar2 == '\0') goto LAB_003605e4;
  if (param_5 != 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)cv::String::allocate((String *)&local_10,9);
    cVar2 = s_data____0_0046e5e0[8];
    *(undefined8 *)pcVar4 = s_data____0_0046e5e0._0_8_;
    pcVar4[8] = cVar2;
    cv::error(-0xd7,(String *)&local_10,
              "virtual cv::UMatData* cv::ocl::OpenCLAllocator::allocate(int, const int*, int, void*, size_t*, int, cv::UMatUsageFlags) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x105f);
    cv::String::deallocate((String *)&local_10);
  }
  uVar3 = param_2 - 1;
  lVar13 = (long)(int)((param_4 >> 3 & 0x1ff) + 1 <<
                      (ulong)((uint)(0xfa50L >> ((param_4 & 7) << 1)) & 3));
  if ((int)uVar3 < 0) {
LAB_00360530:
    pCVar6 = (Context *)cv::ocl::Context::getDefault(true);
    this = (Device *)cv::ocl::Context::device(pCVar6,0);
    if ((param_8 & 1) != 0) goto LAB_00360544;
LAB_003605bc:
    uVar3 = cv::ocl::Device::hostUnifiedMemory(this);
                    /* try { // try from 003605c8 to 004605cb has its CatchHandler @ 003600ec */
                    /* catch() { ... } // from try @ 0036063c with catch @ 003605cc
                       catch() { ... } // from try @ 00360704 with catch @ 003605cc
                       catch() { ... } // from try @ 00360810 with catch @ 003605cc
                       catch() { ... } // from try @ 00360ab4 with catch @ 003605cc
                       catch() { ... } // from try @ 00360ac8 with catch @ 003605cc */
    uVar10 = 1;
    lVar5 = FUN_003600fc(param_1 + 8,lVar13);
  }
  else {
    lVar5 = (long)(int)uVar3;
    if (param_6 != 0) {
      uVar11 = 0;
      do {
        lVar12 = uVar11 * 2;
        iVar1 = *(int *)(param_3 + lVar5 * 4 + uVar11);
        uVar11 = uVar11 - 4;
        *(long *)(param_6 + lVar5 * 8 + lVar12) = lVar13;
        lVar13 = lVar13 * iVar1;
      } while (uVar11 != ((ulong)uVar3 << 2 ^ 0xfffffffffffffffc));
      goto LAB_00360530;
    }
    piVar8 = (int *)(param_3 + lVar5 * 4);
    do {
      piVar9 = piVar8 + -1;
      lVar13 = lVar13 * *piVar8;
      piVar8 = piVar9;
    } while (piVar9 != (int *)(param_3 + (lVar5 - (ulong)uVar3) * 4 + -4));
                    /* try { // try from 0036063c to 004606bb has its CatchHandler @ 003605cc */
    pCVar6 = (Context *)cv::ocl::Context::getDefault(true);
    this = (Device *)cv::ocl::Context::device(pCVar6,0);
    if ((param_8 & 1) == 0) goto LAB_003605bc;
LAB_00360544:
    uVar3 = cv::ocl::Device::hostUnifiedMemory(this);
    uVar10 = 2;
    lVar5 = FUN_003600fc(param_1 + 0x58,lVar13);
  }
  if (lVar5 != 0) {
    pUVar7 = operator_new(0x50);
    cv::UMatData::UMatData(pUVar7,param_1);
    *(undefined8 *)(pUVar7 + 0x18) = 0;
    *(long *)(pUVar7 + 0x28) = lVar13;
    *(long *)(pUVar7 + 0x38) = lVar5;
    *(uint *)(pUVar7 + 0x30) = uVar3 & 0xff ^ 1;
    *(undefined4 *)(pUVar7 + 0x48) = uVar10;
    return pUVar7;
  }
LAB_003605e4:
  pUVar7 = (UMatData *)
           (**(code **)(**(long **)(param_1 + 0xa8) + 0x10))
                     (*(long **)(param_1 + 0xa8),param_2,param_3,param_4,param_5,param_6,param_7,
                      param_8);
                    /* catch() { ... } // from try @ 0036023c with catch @ 003605a4 */
                    /* try { // try from 003605b4 to 004605b7 has its CatchHandler @ 003600ec */
                    /* catch() { ... } // from try @ 00360310 with catch @ 003605b8 */
  return pUVar7;
}


==================================================================

### FUNC 00360678 (632 bytes) name=FUN_00360678

undefined4 FUN_00360678(undefined8 param_1)

{
  undefined1 *puVar1;
  uint uVar2;
  undefined8 uVar3;
  char cVar4;
  byte bVar5;
  int iVar6;
  char *pcVar7;
  Context *this;
  undefined8 uVar8;
  undefined1 *puVar9;
  undefined1 *__s1;
  undefined4 uVar10;
  ulong uVar11;
  undefined8 local_478 [2];
  uint local_464;
  undefined8 local_460;
  undefined8 local_458;
  undefined1 *local_450;
  ulong local_448;
  undefined1 auStack_440 [1088];
  
  local_478[0] = param_1;
  cVar4 = cv::ocl::haveOpenCL();
  if (cVar4 == '\0') {
    local_450 = (undefined1 *)0x0;
    local_448 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_450,0x19);
    cVar4 = s_OpenCL_runtime_not_found__0046e5f0[0x18];
    uVar3 = s_OpenCL_runtime_not_found__0046e5f0._8_8_;
    uVar8 = s_OpenCL_runtime_not_found__0046e5f0._0_8_;
    *(undefined8 *)(pcVar7 + 0x10) = s_OpenCL_runtime_not_found__0046e5f0._16_8_;
    pcVar7[0x18] = cVar4;
                    /* try { // try from 003606fc to 004606ff has its CatchHandler @ 00360aa4 */
    *(undefined8 *)pcVar7 = uVar8;
    *(undefined8 *)(pcVar7 + 8) = uVar3;
    cv::error(-0xdc,(String *)&local_450,
              "static bool cv::ocl::Image2D::Impl::isFormatSupported(cl_image_format)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15ba);
                    /* try { // try from 00360704 to 004607cf has its CatchHandler @ 003605cc */
    cv::String::deallocate((String *)&local_450);
  }
  this = (Context *)cv::ocl::Context::getDefault(true);
  uVar8 = cv::ocl::Context::ptr(this);
  local_464 = 0;
  if ((DAT_00532018 != (code *)0x0) ||
     (DAT_00532018 = (code *)FUN_0034d2bc("clGetSupportedImageFormats"), DAT_00532018 != (code *)0x0
     )) {
    (*DAT_00532018)(uVar8,1,0x10f1,0,0,&local_464);
  }
  local_450 = auStack_440;
  local_448 = 0x88;
  uVar11 = (ulong)local_464;
  puVar9 = local_450;
  uVar2 = local_464;
  if (0x88 < uVar11) {
    puVar9 = operator_new__(uVar11 << 3);
    uVar2 = local_464;
  }
  local_464 = uVar2;
  local_450 = puVar9;
  local_448 = uVar11;
  if ((DAT_00532018 == (code *)0x0) &&
     (DAT_00532018 = (code *)FUN_0034d2bc("clGetSupportedImageFormats"), DAT_00532018 == (code *)0x0
     )) {
    iVar6 = -1000;
  }
  else {
    iVar6 = (*DAT_00532018)(uVar8,1,0x10f1,uVar2,puVar9,0);
  }
  bVar5 = FUN_00350224();
  if ((iVar6 == 0) < bVar5) {
    local_460 = 0;
    local_458 = 0;
    pcVar7 = (char *)cv::String::allocate((String *)&local_460,8);
    *(undefined8 *)pcVar7 = s_err____0_0046e630._0_8_;
    cv::error(-0xd7,(String *)&local_460,
              "static bool cv::ocl::Image2D::Impl::isFormatSupported(cl_image_format)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15c6);
    cv::String::deallocate((String *)&local_460);
  }
  puVar9 = local_450;
  if (local_464 == 0) {
    uVar10 = 0;
  }
  else {
    puVar1 = local_450 + ((ulong)(local_464 - 1) + 1) * 8;
    __s1 = local_450;
    do {
      iVar6 = memcmp(__s1,local_478,8);
      if (iVar6 == 0) {
                    /* try { // try from 00360808 to 0046080b has its CatchHandler @ 00360ab8 */
        uVar10 = 1;
        goto LAB_0036080c;
      }
      __s1 = __s1 + 8;
    } while (__s1 != puVar1);
    uVar10 = 0;
  }
LAB_0036080c:
                    /* try { // try from 00360810 to 00460a8f has its CatchHandler @ 003605cc */
  if ((puVar9 != auStack_440) && (puVar9 != (undefined1 *)0x0)) {
    operator_delete__(puVar9);
  }
  return uVar10;
}


==================================================================

### FUNC 00360934 (104 bytes) name=isFormatSupported

/* cv::ocl::Image2D::isFormatSupported(int, int, bool) */

void cv::ocl::Image2D::isFormatSupported(int param_1,int param_2,bool param_3)

{
  if (!param_3) {
    FUN_00360678(CONCAT44(*(undefined4 *)(PTR_channelTypes_00501ce0 + (long)param_1 * 4),
                          *(undefined4 *)(PTR_channelOrders_00501b60 + (long)param_2 * 4)));
    return;
  }
  FUN_00360678(CONCAT44(*(undefined4 *)(PTR_channelTypesNorm_00501f18 + (long)param_1 * 4),
                        *(undefined4 *)(PTR_channelOrders_00501b60 + (long)param_2 * 4)));
  return;
}


==================================================================

### FUNC 0036099c (588 bytes) name=create

/* cv::ocl::Queue::create(cv::ocl::Context const&, cv::ocl::Device const&) */

bool __thiscall cv::ocl::Queue::create(Queue *this,Context *param_1,Device *param_2)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  undefined2 uVar4;
  undefined4 *puVar5;
  long lVar6;
  long lVar7;
  undefined8 uVar8;
  char *pcVar9;
  Device *this_00;
  int *piVar10;
  int local_14;
  undefined8 local_10;
  undefined8 local_8;
  
  piVar10 = *(int **)this;
  if (piVar10 != (int *)0x0) {
    do {
      iVar1 = *piVar10;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar3) {
        *piVar10 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((iVar1 == 1) && (*PTR_DAT_00501f58 == '\0')) {
      lVar6 = *(long *)(piVar10 + 2);
      if (lVar6 != 0) {
                    /* try { // try from 00360b28 to 00460be7 has its CatchHandler @ 00360acc */
        if ((DAT_00532988 != (code *)0x0) ||
           (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 != (code *)0x0)) {
          (*DAT_00532988)(lVar6);
        }
        uVar8 = *(undefined8 *)(piVar10 + 2);
        if ((DAT_00532138 != (code *)0x0) ||
           (DAT_00532138 = (code *)FUN_0034d2bc("clReleaseCommandQueue"),
           DAT_00532138 != (code *)0x0)) {
          (*DAT_00532138)(uVar8);
        }
      }
      operator_delete(piVar10);
    }
  }
  puVar5 = operator_new(0x10);
  *puVar5 = 1;
  lVar6 = Context::ptr(param_1);
  if (lVar6 == 0) {
    param_1 = (Context *)Context::getDefault(true);
    lVar6 = Context::ptr(param_1);
  }
  lVar7 = Device::ptr(param_2);
  if (lVar7 == 0) {
    this_00 = (Device *)Context::device(param_1,0);
    lVar7 = Device::ptr(this_00);
  }
  local_14 = 0;
  if ((DAT_005320f8 == (code *)0x0) &&
     (DAT_005320f8 = (code *)FUN_0034d2bc("clCreateCommandQueue"), DAT_005320f8 == (code *)0x0)) {
    local_14 = -1000;
    uVar8 = 0;
  }
  else {
    uVar8 = (*DAT_005320f8)(lVar6,lVar7,0,&local_14);
  }
  *(undefined8 *)(puVar5 + 2) = uVar8;
  if (DAT_00532119 == '\0') {
    DAT_005329c8 = FUN_00350010("OPENCV_OPENCL_RAISE_ERROR");
    DAT_00532119 = '\x01';
  }
  if ((DAT_005329c8 != '\0') && (local_14 != 0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_10,0xb);
    cVar2 = s_retval____0_0046d938[10];
    uVar4 = s_retval____0_0046d938._8_2_;
                    /* catch() { ... } // from try @ 003606fc with catch @ 00360aa4 */
                    /* try { // try from 00360ab4 to 00460ab7 has its CatchHandler @ 003605cc */
                    /* catch() { ... } // from try @ 00360808 with catch @ 00360ab8 */
                    /* try { // try from 00360ac8 to 00460acb has its CatchHandler @ 003605cc */
                    /* catch() { ... } // from try @ 00360b28 with catch @ 00360acc
                       catch() { ... } // from try @ 00360c28 with catch @ 00360acc
                       catch() { ... } // from try @ 00360ecc with catch @ 00360acc */
    *(undefined8 *)pcVar9 = s_retval____0_0046d938._0_8_;
    *(undefined2 *)(pcVar9 + 8) = uVar4;
    pcVar9[10] = cVar2;
    error(-0xd7,(String *)&local_10,
          "cv::ocl::Queue::Impl::Impl(const cv::ocl::Context&, const cv::ocl::Device&)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xb9a);
    String::deallocate((String *)&local_10);
  }
  lVar6 = *(long *)(puVar5 + 2);
  *(undefined4 **)this = puVar5;
  return lVar6 != 0;
}


==================================================================

### FUNC 00360c10 (8 bytes) name=Queue

/* cv::ocl::Queue::Queue(cv::ocl::Context const&, cv::ocl::Device const&) */

void __thiscall cv::ocl::Queue::Queue(Queue *this,Context *param_1,Device *param_2)

{
  *(undefined8 *)this = 0;
  create(this,param_1,param_2);
  return;
}


==================================================================

### FUNC 00360c18 (132 bytes) name=getDefault

/* cv::ocl::Queue::getDefault() */

Queue * cv::ocl::Queue::getDefault(void)

{
  Queue *this;
  char cVar1;
  TLSDataContainer *this_00;
  long lVar2;
  Context *pCVar3;
  Device aDStack_8 [8];
  
                    /* try { // try from 00360c20 to 00460c23 has its CatchHandler @ 00360ebc */
  this_00 = (TLSDataContainer *)FUN_003b7ff8();
                    /* try { // try from 00360c28 to 00460ea7 has its CatchHandler @ 00360acc */
  lVar2 = TLSDataContainer::getData(this_00);
  this = (Queue *)(lVar2 + 0x10);
  if ((*(long *)(lVar2 + 0x10) == 0) && (cVar1 = haveOpenCL(), cVar1 != '\0')) {
    pCVar3 = (Context *)Context::getDefault(true);
    Device::Device(aDStack_8);
    create(this,pCVar3,aDStack_8);
    Device::~Device(aDStack_8);
    return this;
  }
  return this;
}


==================================================================

### FUNC 00360cb0 (24 bytes) name=finish

/* cv::ocl::finish() */

void cv::ocl::finish(void)

{
  Queue *this;
  
  this = (Queue *)Queue::getDefault();
  Queue::finish(this);
  return;
}


==================================================================

### FUNC 00360cc8 (1852 bytes) name=FUN_00360cc8

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00360cc8(long param_1,UMatData *param_2)

{
  undefined2 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char cVar8;
  int iVar9;
  char *pcVar10;
  Queue *this;
  void *pvVar11;
  undefined8 *puVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  ulong local_38 [2];
  size_t local_28;
  void *local_20;
  undefined8 local_18;
  void *local_10;
  void *local_8;
  
  if (param_2 != (UMatData *)0x0) {
    if (*(int *)(param_2 + 0x10) < 0) {
      local_28 = 0;
      local_20 = (void *)0x0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_28,0x11);
      uVar13 = s_u_>urefcount_>__0_0046ac38._8_8_;
      uVar15 = s_u_>urefcount_>__0_0046ac38._0_8_;
      pcVar10[0x10] = s_u_>urefcount_>__0_0046ac38[0x10];
      *(undefined8 *)pcVar10 = uVar15;
      *(undefined8 *)(pcVar10 + 8) = uVar13;
      cv::error(-0xd7,(String *)&local_28,
                "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x111c);
      cv::String::deallocate((String *)&local_28);
    }
    if (*(int *)(param_2 + 0x14) < 0) {
      local_28 = 0;
      local_20 = (void *)0x0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_28,0x10);
      uVar15 = s_u_>refcount_>__0_0046ac50._8_8_;
      *(undefined8 *)pcVar10 = s_u_>refcount_>__0_0046ac50._0_8_;
      *(undefined8 *)(pcVar10 + 8) = uVar15;
      cv::error(-0xd7,(String *)&local_28,
                "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x111d);
      cv::String::deallocate((String *)&local_28);
    }
    if ((*(long *)(param_2 + 0x38) == 0) || (*(int *)(param_2 + 0x10) != 0)) {
      local_28 = 0;
      local_20 = (void *)0x0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_28,0x23);
      cVar8 = s_u_>handle____0____u_>urefcount___0046e658[0x22];
      uVar2 = s_u_>handle____0____u_>urefcount___0046e658._24_8_;
      uVar14 = s_u_>handle____0____u_>urefcount___0046e658._16_8_;
      uVar13 = s_u_>handle____0____u_>urefcount___0046e658._8_8_;
      uVar15 = s_u_>handle____0____u_>urefcount___0046e658._0_8_;
      *(undefined2 *)(pcVar10 + 0x20) = s_u_>handle____0____u_>urefcount___0046e658._32_2_;
      pcVar10[0x22] = cVar8;
      *(undefined8 *)pcVar10 = uVar15;
      *(undefined8 *)(pcVar10 + 8) = uVar13;
      *(undefined8 *)(pcVar10 + 0x10) = uVar14;
      *(undefined8 *)(pcVar10 + 0x18) = uVar2;
      cv::error(-0xd7,(String *)&local_28,
                "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x111f);
      cv::String::deallocate((String *)&local_28);
    }
    if ((*(uint *)(param_2 + 0x30) >> 3 & 1) == 0) {
      if (*(int *)(param_2 + 0x14) != 0) {
        local_28 = 0;
        local_20 = (void *)0x0;
        pcVar10 = (char *)cv::String::allocate((String *)&local_28,0x10);
        uVar15 = s_u_>refcount____0_0046e790._8_8_;
        *(undefined8 *)pcVar10 = s_u_>refcount____0_0046e790._0_8_;
        *(undefined8 *)(pcVar10 + 8) = uVar15;
        cv::error(-0xd7,(String *)&local_28,
                  "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1180);
        cv::String::deallocate((String *)&local_28);
      }
      if (((*(void **)(param_2 + 0x18) != (void *)0x0) && ((*(uint *)(param_2 + 0x30) & 1) != 0)) &&
         ((*(uint *)(param_2 + 0x30) >> 5 & 1) == 0)) {
        cv::fastFree(*(void **)(param_2 + 0x18));
        *(undefined8 *)(param_2 + 0x18) = 0;
      }
      if ((*(uint *)(param_2 + 0x48) & 1) == 0) {
        if ((*(uint *)(param_2 + 0x48) >> 1 & 1) == 0) {
          uVar15 = *(undefined8 *)(param_2 + 0x38);
                    /* catch() { ... } // from try @ 00361028 with catch @ 003612b8 */
          if ((DAT_00532980 != (code *)0x0) ||
             (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 != (code *)0x0
             )) {
            (*DAT_00532980)(uVar15);
          }
        }
        else {
          FUN_0034e87c(param_1 + 0x58,*(undefined8 *)(param_2 + 0x38));
        }
      }
      else {
        FUN_0034e87c(param_1 + 8,*(undefined8 *)(param_2 + 0x38));
      }
      *(undefined8 *)(param_2 + 0x38) = 0;
      cv::UMatData::~UMatData(param_2);
      operator_delete(param_2);
    }
    else {
      if (((*(uint *)(param_2 + 0x30) >> 1 & 1) != 0) && (0 < *(int *)(param_2 + 0x14))) {
        this = (Queue *)cv::ocl::Queue::getDefault();
        uVar15 = cv::ocl::Queue::ptr(this);
        if ((*(uint *)(param_2 + 0x30) & 0x18) == 0x18) {
          local_20 = *(void **)(param_2 + 0x20);
          local_28 = *(size_t *)(param_2 + 0x28);
          local_18 = 0x10;
          local_8 = (void *)0x0;
          local_10 = local_20;
          if (((ulong)local_20 & 0xf) != 0) {
            local_8 = operator_new__(local_28 + 0xf);
            local_10 = (void *)((long)local_8 + 0xfU & 0xfffffffffffffff0);
          }
          cVar8 = FUN_00350224();
          pvVar11 = local_10;
          uVar13 = *(undefined8 *)(param_2 + 0x38);
          uVar14 = *(undefined8 *)(param_2 + 0x28);
          if (cVar8 == '\0') {
            if ((DAT_005320a0 != (code *)0x0) ||
               (DAT_005320a0 = (code *)FUN_0034d2bc("clEnqueueReadBuffer"),
               DAT_005320a0 != (code *)0x0)) {
              (*DAT_005320a0)(uVar15,uVar13,1,0,uVar14,pvVar11,0,0,0);
            }
          }
          else if (((DAT_005320a0 == (code *)0x0) &&
                   (DAT_005320a0 = (code *)FUN_0034d2bc("clEnqueueReadBuffer"),
                   DAT_005320a0 == (code *)0x0)) ||
                  (iVar9 = (*DAT_005320a0)(uVar15,uVar13,1,0,uVar14,pvVar11,0,0,0), iVar9 != 0)) {
            local_38[0] = 0;
            local_38[1] = 0;
            pvVar11 = (void *)cv::String::allocate((String *)local_38,0x62);
            memcpy(pvVar11,
                   "clEnqueueReadBuffer(q, (cl_mem)u->handle, 1, 0, u->size, alignedPtr.getAlignedPtr(), 0, 0, 0) == 0"
                   ,0x62);
                    /* try { // try from 00361028 to 0046102b has its CatchHandler @ 003612b8 */
            cv::error(-0xd7,(String *)local_38,
                      "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                      "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1154);
            cv::String::deallocate((String *)local_38);
                    /* try { // try from 00361038 to 004612af has its CatchHandler @ 00360ed0 */
          }
          if ((local_8 != (void *)0x0) &&
             (memcpy(local_20,local_10,local_28), local_8 != (void *)0x0)) {
            operator_delete__(local_8);
          }
        }
        else {
          local_38[0] = local_38[0] & 0xffffffff00000000;
          uVar13 = *(undefined8 *)(param_2 + 0x38);
          uVar14 = *(undefined8 *)(param_2 + 0x28);
          if ((DAT_00532038 == (code *)0x0) &&
             (DAT_00532038 = (code *)FUN_0034d2bc(&DAT_0046e700), DAT_00532038 == (code *)0x0)) {
            local_38[0] = CONCAT44(local_38[0]._4_4_,0xfffffc18);
            uVar13 = 0;
          }
          else {
            uVar13 = (*DAT_00532038)(uVar15,uVar13,1,3,0,uVar14,0,0,0,local_38);
          }
          cVar8 = FUN_00350224();
          if ((cVar8 != '\0') && ((int)local_38[0] != 0)) {
            local_28 = 0;
            local_20 = (void *)0x0;
            pcVar10 = (char *)cv::String::allocate((String *)&local_28,0xb);
            cVar8 = s_retval____0_0046d938[10];
            uVar1 = s_retval____0_0046d938._8_2_;
            *(undefined8 *)pcVar10 = s_retval____0_0046d938._0_8_;
            *(undefined2 *)(pcVar10 + 8) = uVar1;
            pcVar10[10] = cVar8;
            cv::error(-0xd7,(String *)&local_28,
                      "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                      "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x115d);
            cv::String::deallocate((String *)&local_28);
          }
          cVar8 = FUN_00350224();
          uVar14 = *(undefined8 *)(param_2 + 0x38);
          if (cVar8 == '\0') {
            if ((DAT_00532068 != (code *)0x0) ||
               (DAT_00532068 = (code *)FUN_0034d2bc("clEnqueueUnmapMemObject"),
               DAT_00532068 != (code *)0x0)) {
              (*DAT_00532068)(uVar15,uVar14,uVar13,0,0,0);
            }
          }
          else {
                    /* try { // try from 00361328 to 00461353 has its CatchHandler @ 003612cc */
            if (((DAT_00532068 == (code *)0x0) &&
                (DAT_00532068 = (code *)FUN_0034d2bc("clEnqueueUnmapMemObject"),
                DAT_00532068 == (code *)0x0)) ||
               (iVar9 = (*DAT_00532068)(uVar15,uVar14,uVar13,0,0,0), iVar9 != 0)) {
              local_28 = 0;
              local_20 = (void *)0x0;
              puVar12 = (undefined8 *)cv::String::allocate((String *)&local_28,0x41);
              uVar7 = DAT_0046e768;
              uVar6 = DAT_0046e760;
              uVar5 = DAT_0046e758;
              uVar4 = DAT_0046e750;
              uVar3 = _LAB_0046e748;
              uVar2 = _LAB_0046e740;
              uVar14 = _DAT_0046e738;
              uVar13 = DAT_0046e730;
              *(undefined1 *)(puVar12 + 8) = DAT_0046e770;
              *puVar12 = uVar13;
              puVar12[1] = uVar14;
              puVar12[2] = uVar2;
              puVar12[3] = uVar3;
              puVar12[4] = uVar4;
              puVar12[5] = uVar5;
              puVar12[6] = uVar6;
              puVar12[7] = uVar7;
                    /* try { // try from 003613a4 to 004613a7 has its CatchHandler @ 00361910 */
              cv::error(-0xd7,(String *)&local_28,
                        "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x115e);
                    /* try { // try from 003613ac to 00461473 has its CatchHandler @ 003612cc */
              cv::String::deallocate((String *)&local_28);
            }
          }
          cVar8 = FUN_00350224();
          if (cVar8 == '\0') {
            FUN_0034d4d8(uVar15);
          }
          else {
            iVar9 = FUN_0034d4d8(uVar15);
                    /* catch() { ... } // from try @ 00360c20 with catch @ 00360ebc */
            if (iVar9 != 0) {
                    /* catch() { ... } // from try @ 00361328 with catch @ 003612cc
                       catch() { ... } // from try @ 003613ac with catch @ 003612cc
                       catch() { ... } // from try @ 003614b4 with catch @ 003612cc
                       catch() { ... } // from try @ 00361588 with catch @ 003612cc
                       catch() { ... } // from try @ 0036190c with catch @ 003612cc
                       catch() { ... } // from try @ 00361920 with catch @ 003612cc
                       catch() { ... } // from try @ 00361934 with catch @ 003612cc */
              local_28 = 0;
              local_20 = (void *)0x0;
              pcVar10 = (char *)cv::String::allocate((String *)&local_28,0x10);
              uVar15 = s_clFinish_q_____0_0046e778._8_8_;
              *(undefined8 *)pcVar10 = s_clFinish_q_____0_0046e778._0_8_;
              *(undefined8 *)(pcVar10 + 8) = uVar15;
              cv::error(-0xd7,(String *)&local_28,
                        "virtual void cv::ocl::OpenCLAllocator::deallocate(cv::UMatData*) const",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x115f);
              cv::String::deallocate((String *)&local_28);
            }
          }
        }
        *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd;
      }
                    /* try { // try from 00360ecc to 00460ecf has its CatchHandler @ 00360acc */
                    /* catch() { ... } // from try @ 00360f34 with catch @ 00360ed0
                       catch() { ... } // from try @ 00361038 with catch @ 00360ed0
                       catch() { ... } // from try @ 003612c8 with catch @ 00360ed0 */
      uVar15 = *(undefined8 *)(param_2 + 0x38);
      if ((DAT_00532980 != (code *)0x0) ||
         (DAT_00532980 = (code *)FUN_0034d2bc("clReleaseMemObject"), DAT_00532980 != (code *)0x0)) {
        (*DAT_00532980)(uVar15);
      }
      *(undefined8 *)(param_2 + 0x38) = 0;
      *(undefined8 *)(param_2 + 8) = *(undefined8 *)param_2;
      if (((*(void **)(param_2 + 0x18) != (void *)0x0) && ((*(uint *)(param_2 + 0x30) & 1) != 0)) &&
         ((*(uint *)(param_2 + 0x30) >> 5 & 1) == 0)) {
        cv::fastFree(*(void **)(param_2 + 0x18));
      }
      *(undefined8 *)(param_2 + 0x18) = *(undefined8 *)(param_2 + 0x20);
      if (*(int *)(param_2 + 0x14) == 0) {
        (**(code **)(**(long **)(param_2 + 8) + 0x20))(*(long **)(param_2 + 8),param_2);
                    /* try { // try from 00360f34 to 00460fef has its CatchHandler @ 00360ed0 */
        return;
      }
    }
  }
  return;
}


==================================================================

### FUNC 003614b4 (1968 bytes) name=FUN_003614b4

void FUN_003614b4(long *param_1,UMatData *param_2,UMatData *param_3,int param_4,undefined8 *param_5,
                 undefined8 *param_6,undefined8 *param_7,undefined8 *param_8,undefined8 *param_9,
                 char param_10)

{
  uint uVar1;
  bool bVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  char cVar7;
  int iVar8;
  ulong uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  char *pcVar13;
  Queue *this;
  undefined8 uVar14;
  void *pvVar15;
  ulong uVar16;
  undefined8 uVar17;
  ulong uVar18;
  long lVar19;
  long lVar20;
  String *this_00;
  long lVar21;
  undefined8 uVar22;
  long lVar23;
  undefined8 uVar24;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003614b4 to 0046153f has its CatchHandler @ 003612cc */
  if (param_2 == (UMatData *)0x0) {
    return;
  }
  if (param_3 == (UMatData *)0x0) {
    return;
  }
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  if (param_6 == (undefined8 *)0x0) {
    lVar21 = 0;
  }
  else {
    lVar21 = param_6[(long)param_4 + -1];
  }
  if (param_8 == (undefined8 *)0x0) {
    uVar1 = param_4 - 2;
    uVar9 = (ulong)uVar1;
    lVar20 = param_5[(long)param_4 + -1];
    if (-1 < (int)uVar1) {
      if (param_6 == (undefined8 *)0x0) {
        uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
        bVar2 = true;
        uVar16 = 0;
        do {
          if (lVar20 == *(long *)((long)param_7 + uVar16 + uVar18)) {
            if (lVar20 != *(long *)((long)param_9 + uVar16 + uVar18)) {
              bVar2 = false;
            }
          }
          else {
            bVar2 = false;
          }
          lVar23 = uVar16 + uVar18;
          uVar16 = uVar16 - 8;
          lVar20 = lVar20 * *(long *)((long)param_5 + lVar23);
        } while (uVar16 != (uVar9 << 3 ^ 0xfffffffffffffff8));
      }
      else {
        uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
        bVar2 = true;
        uVar16 = 0;
        do {
          lVar23 = *(long *)((long)param_7 + uVar16 + uVar18);
          if (lVar20 == lVar23) {
            if (lVar20 != *(long *)((long)param_9 + uVar16 + uVar18)) {
              bVar2 = false;
            }
          }
          else {
            bVar2 = false;
          }
          lVar19 = uVar16 + uVar18;
          lVar3 = uVar16 + uVar18;
          uVar16 = uVar16 - 8;
          lVar20 = lVar20 * *(long *)((long)param_5 + lVar19);
          lVar21 = lVar21 + lVar23 * *(long *)((long)param_6 + lVar3);
        } while (uVar16 != (uVar9 << 3 ^ 0xfffffffffffffff8));
      }
      lVar23 = 0;
      goto LAB_003615f8;
    }
    bVar2 = true;
    lVar23 = 0;
    uVar17 = 0;
    uVar10 = 0;
    uVar11 = 0;
    uVar12 = 0;
  }
  else {
    uVar1 = param_4 - 2;
    uVar9 = (ulong)uVar1;
    lVar23 = param_8[(long)param_4 + -1];
    lVar20 = param_5[(long)param_4 + -1];
    if ((int)uVar1 < 0) {
      bVar2 = true;
      uVar12 = 0;
      uVar11 = 0;
      uVar10 = 0;
      uVar17 = 0;
    }
    else {
      if (param_6 == (undefined8 *)0x0) {
        uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
                    /* try { // try from 003619a0 to 004619cb has its CatchHandler @ 00361938 */
        bVar2 = true;
        uVar16 = 0;
        do {
          if (lVar20 == *(long *)((long)param_7 + uVar16 + uVar18)) {
            if (lVar20 != *(long *)((long)param_9 + uVar16 + uVar18)) {
              bVar2 = false;
            }
          }
          else {
            bVar2 = false;
          }
          lVar19 = uVar16 + uVar18;
          lVar3 = uVar16 + uVar18;
          lVar4 = uVar16 + uVar18;
          uVar16 = uVar16 - 8;
          lVar20 = lVar20 * *(long *)((long)param_5 + lVar19);
          lVar23 = lVar23 + *(long *)((long)param_9 + lVar3) * *(long *)((long)param_8 + lVar4);
        } while (uVar16 != (uVar9 << 3 ^ 0xfffffffffffffff8));
      }
      else {
                    /* try { // try from 00361580 to 00461583 has its CatchHandler @ 003618fc */
        uVar16 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar9 << 3;
                    /* try { // try from 00361588 to 004618e7 has its CatchHandler @ 003612cc */
        uVar18 = 0;
        bVar2 = true;
        do {
          lVar19 = *(long *)((long)param_7 + uVar18 + uVar16);
          if (lVar20 == lVar19) {
            if (lVar20 != *(long *)((long)param_9 + uVar18 + uVar16)) {
              bVar2 = false;
            }
          }
          else {
            bVar2 = false;
          }
          lVar4 = uVar18 + uVar16;
          lVar5 = uVar18 + uVar16;
          lVar3 = uVar18 + uVar16;
          lVar6 = uVar18 + uVar16;
          uVar18 = uVar18 - 8;
          lVar20 = lVar20 * *(long *)((long)param_5 + lVar4);
          lVar21 = lVar21 + lVar19 * *(long *)((long)param_6 + lVar5);
          lVar23 = lVar23 + *(long *)((long)param_9 + lVar3) * *(long *)((long)param_8 + lVar6);
        } while (uVar18 != (uVar9 << 3 ^ 0xfffffffffffffff8));
      }
LAB_003615f8:
      if (bVar2) {
        uVar12 = 0;
        uVar11 = 0;
        uVar10 = 0;
        uVar17 = 0;
      }
      else if (param_4 == 2) {
        local_40 = *param_5;
        local_48 = param_5[1];
        local_38 = 1;
        if (param_6 != (undefined8 *)0x0) {
          local_30 = param_6[1];
          local_28 = *param_6;
        }
        if (param_8 != (undefined8 *)0x0) {
          local_18 = param_8[1];
                    /* try { // try from 00361a1c to 00461a1f has its CatchHandler @ 00361f80 */
          local_10 = *param_8;
                    /* try { // try from 00361a24 to 00461ab7 has its CatchHandler @ 00361938 */
        }
        uVar12 = 0;
        uVar10 = 0;
        uVar17 = *param_7;
        uVar11 = *param_9;
      }
      else {
        if (3 < param_4) {
          local_58 = 0;
          local_50 = 0;
          pcVar13 = (char *)cv::String::allocate((String *)&local_58,9);
          cVar7 = s_dims_<__3_0046e7a8[8];
                    /* try { // try from 00361af8 to 00461afb has its CatchHandler @ 00361f94 */
                    /* try { // try from 00361b00 to 00461bff has its CatchHandler @ 00361938 */
          *(undefined8 *)pcVar13 = s_dims_<__3_0046e7a8._0_8_;
          pcVar13[8] = cVar7;
          cv::error(-0xd7,(String *)&local_58,
                    "bool cv::ocl::OpenCLAllocator::checkContinuous(int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, size_t&, size_t*, size_t&, size_t*, size_t*, size_t&, size_t*, size_t*) const"
                    ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x127f);
          cv::String::deallocate((String *)&local_58);
        }
        local_48 = param_5[2];
        local_40 = param_5[1];
        local_38 = *param_5;
        if (param_6 != (undefined8 *)0x0) {
          local_30 = param_6[2];
          local_28 = param_6[1];
          local_20 = *param_6;
        }
        if (param_8 != (undefined8 *)0x0) {
          local_18 = param_8[2];
          local_10 = param_8[1];
          local_8 = *param_8;
        }
        uVar17 = param_7[1];
        uVar10 = *param_7;
        uVar11 = param_9[1];
        uVar12 = *param_9;
      }
    }
  }
  cv::UMatData::lock(param_2);
  cv::UMatData::lock(param_3);
  if ((*(long *)(param_2 + 0x38) == 0) ||
     ((*(long *)(param_2 + 0x18) != 0 &&
      ((*(uint *)(param_2 + 0x30) >> 1 & 1) < (*(uint *)(param_2 + 0x30) >> 2 & 1))))) {
    (**(code **)(*param_1 + 0x40))
              (param_1,param_3,*(long *)(param_2 + 0x18) + lVar21,param_4,param_5,param_8,param_9,
               param_7);
    goto LAB_003616e8;
  }
  if ((*(long *)(param_3 + 0x38) == 0) ||
     ((*(long *)(param_3 + 0x18) != 0 &&
      ((*(uint *)(param_3 + 0x30) >> 1 & 1) < (*(uint *)(param_3 + 0x30) >> 2 & 1))))) {
    (**(code **)(*param_1 + 0x38))
              (param_1,param_2,*(long *)(param_3 + 0x18) + lVar23,param_4,param_5,param_6,param_7,
               param_9);
    *(uint *)(param_3 + 0x30) = *(uint *)(param_3 + 0x30) & 0xfffffffd | 4;
    goto LAB_003616e8;
  }
  if (*(int *)(param_3 + 0x14) != 0) {
    local_88 = 0;
    local_80 = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_88,0x12);
    uVar22 = s_dst_>refcount____0_0046e7b8._8_8_;
    uVar14 = s_dst_>refcount____0_0046e7b8._0_8_;
    *(undefined2 *)(pcVar13 + 0x10) = s_dst_>refcount____0_0046e7b8._16_2_;
    *(undefined8 *)pcVar13 = uVar14;
    *(undefined8 *)(pcVar13 + 8) = uVar22;
    cv::error(-0xd7,(String *)&local_88,
              "virtual void cv::ocl::OpenCLAllocator::copy(cv::UMatData*, cv::UMatData*, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, bool) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x13a3);
    cv::String::deallocate((String *)&local_88);
  }
  this = (Queue *)cv::ocl::Queue::getDefault();
  uVar14 = cv::ocl::Queue::ptr(this);
  if (bVar2) {
    uVar17 = *(undefined8 *)(param_2 + 0x38);
    uVar10 = *(undefined8 *)(param_3 + 0x38);
    if (((DAT_00532130 == (code *)0x0) &&
        (DAT_00532130 = (code *)FUN_0034d2bc("clEnqueueCopyBuffer"), DAT_00532130 == (code *)0x0))
       || (iVar8 = (*DAT_00532130)(uVar14,uVar17,uVar10,lVar21,lVar23,lVar20,0,0,0), iVar8 != 0)) {
      this_00 = (String *)&local_78;
      local_78 = 0;
      local_70 = 0;
      pvVar15 = (void *)cv::String::allocate(this_00,0x7f);
      memcpy(pvVar15,
             "(retval = clEnqueueCopyBuffer(q, (cl_mem)src->handle, (cl_mem)dst->handle, srcrawofs, dstrawofs, total, 0, 0, 0)) == CL_SUCCESS"
             ,0x7f);
      cv::error(-0xd7,this_00,
                "virtual void cv::ocl::OpenCLAllocator::copy(cv::UMatData*, cv::UMatData*, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, bool) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x13f3);
LAB_00361964:
      cv::String::deallocate(this_00);
    }
  }
  else {
    uVar22 = *(undefined8 *)(param_2 + 0x38);
    uVar24 = *(undefined8 *)(param_3 + 0x38);
                    /* catch() { ... } // from try @ 00361580 with catch @ 003618fc */
                    /* try { // try from 0036190c to 0046190f has its CatchHandler @ 003612cc */
                    /* catch() { ... } // from try @ 003613a4 with catch @ 00361910 */
    if (((DAT_005329c0 == (code *)0x0) &&
        (DAT_005329c0 = (code *)FUN_0034d2bc("clEnqueueCopyBufferRect"), DAT_005329c0 == (code *)0x0
        )) || (iVar8 = (*DAT_005329c0)(uVar14,uVar22,uVar24,&local_30,&local_18,&local_48,uVar17,
                                       uVar10,uVar11,uVar12,0,0,0), iVar8 != 0)) {
      this_00 = (String *)&local_68;
                    /* try { // try from 00361920 to 00461923 has its CatchHandler @ 003612cc */
                    /* catch() { ... } // from try @ 003614ac with catch @ 00361924 */
      local_68 = 0;
      local_60 = 0;
      pvVar15 = (void *)cv::String::allocate(this_00,0xc6);
                    /* try { // try from 00361934 to 00461937 has its CatchHandler @ 003612cc */
                    /* catch() { ... } // from try @ 003619a0 with catch @ 00361938
                       catch() { ... } // from try @ 00361a24 with catch @ 00361938
                       catch() { ... } // from try @ 00361b00 with catch @ 00361938
                       catch() { ... } // from try @ 00361c40 with catch @ 00361938
                       catch() { ... } // from try @ 00361f7c with catch @ 00361938
                       catch() { ... } // from try @ 00361f90 with catch @ 00361938
                       catch() { ... } // from try @ 00361fa4 with catch @ 00361938 */
      memcpy(pvVar15,&DAT_0046e880,0xc6);
      cv::error(-0xd7,this_00,
                "virtual void cv::ocl::OpenCLAllocator::copy(cv::UMatData*, cv::UMatData*, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, bool) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x13fb);
      goto LAB_00361964;
    }
  }
  *(uint *)(param_3 + 0x30) = *(uint *)(param_3 + 0x30) & 0xfffffffb | 2;
  if (param_10 != '\0') {
    cVar7 = FUN_00350224();
    if (cVar7 == '\0') {
      FUN_0034d4d8(uVar14);
    }
    else {
                    /* try { // try from 00361c38 to 00461c3b has its CatchHandler @ 00361f6c */
                    /* try { // try from 00361c40 to 00461f57 has its CatchHandler @ 00361938 */
      if (((DAT_00532988 == (code *)0x0) &&
          (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 == (code *)0x0)) ||
         (iVar8 = (*DAT_00532988)(uVar14), iVar8 != 0)) {
        local_58 = 0;
        local_50 = 0;
        pcVar13 = (char *)cv::String::allocate((String *)&local_58,0x10);
        uVar17 = s_clFinish_q_____0_0046e778._8_8_;
        *(undefined8 *)pcVar13 = s_clFinish_q_____0_0046e778._0_8_;
        *(undefined8 *)(pcVar13 + 8) = uVar17;
        cv::error(-0xd7,(String *)&local_58,
                  "virtual void cv::ocl::OpenCLAllocator::copy(cv::UMatData*, cv::UMatData*, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, bool) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1412);
        cv::String::deallocate((String *)&local_58);
      }
    }
  }
LAB_003616e8:
  cv::UMatData::unlock(param_3);
  cv::UMatData::unlock(param_2);
  return;
}


==================================================================

### FUNC 00361ce4 (1612 bytes) name=FUN_00361ce4

void FUN_00361ce4(undefined8 param_1,UMatData *param_2,void *param_3,int param_4,long *param_5,
                 undefined8 *param_6,undefined8 *param_7,long *param_8)

{
  uint uVar1;
  bool bVar2;
  char cVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  int iVar6;
  ulong uVar7;
  long lVar8;
  long lVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  Queue *this;
  undefined8 uVar12;
  long *plVar13;
  char *pcVar14;
  void *pvVar15;
  long lVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  String *this_00;
  long lVar20;
  undefined8 uVar21;
  void *pvVar22;
  long lVar23;
  long local_78;
  long local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  long local_48;
  long local_40;
  long local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_2 == (UMatData *)0x0) {
    return;
  }
  if ((*(int *)(param_2 + 0x14) != 0) && ((*(uint *)(param_2 + 0x30) >> 3 & 1) == 0)) {
    local_18 = 0;
    local_10 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_18,0x21);
    uVar21 = s_u_>refcount____0____u_>tempUMat__0046eac8._24_8_;
    uVar12 = s_u_>refcount____0____u_>tempUMat__0046eac8._16_8_;
    uVar11 = s_u_>refcount____0____u_>tempUMat__0046eac8._8_8_;
    uVar10 = s_u_>refcount____0____u_>tempUMat__0046eac8._0_8_;
                    /* catch() { ... } // from try @ 00361c38 with catch @ 00361f6c */
                    /* try { // try from 00361f7c to 00461f7f has its CatchHandler @ 00361938 */
                    /* catch() { ... } // from try @ 00361a1c with catch @ 00361f80 */
                    /* try { // try from 00361f90 to 00461f93 has its CatchHandler @ 00361938 */
    pcVar14[0x20] = s_u_>refcount____0____u_>tempUMat__0046eac8[0x20];
                    /* catch() { ... } // from try @ 00361af8 with catch @ 00361f94 */
    *(undefined8 *)pcVar14 = uVar10;
    *(undefined8 *)(pcVar14 + 8) = uVar11;
    *(undefined8 *)(pcVar14 + 0x10) = uVar12;
    *(undefined8 *)(pcVar14 + 0x18) = uVar21;
                    /* try { // try from 00361fa4 to 00461fa7 has its CatchHandler @ 00361938 */
    cv::error(-0xd7,(String *)&local_18,
              "virtual void cv::ocl::OpenCLAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1303);
                    /* catch() { ... } // from try @ 00361ffc with catch @ 00361fa8
                       catch() { ... } // from try @ 00362080 with catch @ 00361fa8
                       catch() { ... } // from try @ 003621c8 with catch @ 00361fa8
                       catch() { ... } // from try @ 00362504 with catch @ 00361fa8
                       catch() { ... } // from try @ 00362518 with catch @ 00361fa8 */
    cv::String::deallocate((String *)&local_18);
  }
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  local_28 = 0;
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  if (param_6 == (undefined8 *)0x0) {
    uVar1 = param_4 - 2;
    lVar19 = param_5[(long)param_4 + -1];
    if (-1 < (int)uVar1) {
      uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      uVar17 = (ulong)uVar1 << 3 ^ 0xfffffffffffffff8;
                    /* try { // try from 003621c0 to 004621c3 has its CatchHandler @ 003624f4 */
      bVar2 = true;
      uVar7 = 0;
                    /* try { // try from 003621c8 to 004624df has its CatchHandler @ 00361fa8 */
      do {
        while (lVar19 == *(long *)((long)param_8 + uVar7 + uVar18)) {
          lVar20 = uVar7 + uVar18;
          lVar8 = uVar7 + uVar18;
          uVar7 = uVar7 - 8;
          if (lVar19 != *(long *)((long)param_7 + lVar20)) {
            bVar2 = false;
          }
          lVar19 = lVar19 * *(long *)((long)param_5 + lVar8);
          if (uVar7 == uVar17) goto LAB_00362210;
        }
        lVar20 = uVar7 + uVar18;
        uVar7 = uVar7 - 8;
        bVar2 = false;
        lVar19 = lVar19 * *(long *)((long)param_5 + lVar20);
      } while (uVar7 != uVar17);
LAB_00362210:
      lVar20 = 0;
      goto LAB_00361df4;
    }
    bVar2 = true;
    lVar20 = 0;
    lVar8 = 0;
    lVar9 = 0;
    uVar10 = 0;
    uVar11 = 0;
  }
  else {
    uVar1 = param_4 - 2;
    lVar20 = param_6[(long)param_4 + -1];
    lVar19 = param_5[(long)param_4 + -1];
    if ((int)uVar1 < 0) {
      bVar2 = true;
      uVar11 = 0;
      uVar10 = 0;
      lVar9 = 0;
      lVar8 = 0;
    }
    else {
      uVar7 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      uVar18 = (ulong)uVar1 << 3 ^ 0xfffffffffffffff8;
      uVar17 = 0;
      bVar2 = true;
      do {
        while (lVar19 == *(long *)((long)param_8 + uVar17 + uVar7)) {
          lVar8 = uVar17 + uVar7;
          lVar16 = uVar17 + uVar7;
          lVar9 = uVar17 + uVar7;
          lVar23 = uVar17 + uVar7;
          uVar17 = uVar17 - 8;
          if (lVar19 != *(long *)((long)param_7 + lVar8)) {
            bVar2 = false;
          }
          lVar19 = lVar19 * *(long *)((long)param_5 + lVar16);
          lVar20 = lVar20 + *(long *)((long)param_7 + lVar9) * *(long *)((long)param_6 + lVar23);
          if (uVar17 == uVar18) goto LAB_00361df4;
        }
        lVar9 = uVar17 + uVar7;
        bVar2 = false;
        lVar8 = uVar17 + uVar7;
        lVar16 = uVar17 + uVar7;
        uVar17 = uVar17 - 8;
        lVar19 = lVar19 * *(long *)((long)param_5 + lVar9);
        lVar20 = lVar20 + *(long *)((long)param_7 + lVar8) * *(long *)((long)param_6 + lVar16);
      } while (uVar17 != uVar18);
LAB_00361df4:
      if (bVar2) {
        uVar11 = 0;
        uVar10 = 0;
        lVar9 = 0;
        lVar8 = 0;
      }
      else if (param_4 == 2) {
        local_40 = *param_5;
        local_48 = param_5[1];
        local_38 = 1;
        if (param_6 != (undefined8 *)0x0) {
          local_18 = param_6[1];
          local_10 = *param_6;
        }
        lVar8 = *param_8;
        uVar11 = 0;
        uVar10 = *param_7;
        lVar9 = 0;
      }
      else {
        if (3 < param_4) {
          local_58 = 0;
          local_50 = 0;
          pcVar14 = (char *)cv::String::allocate((String *)&local_58,9);
          cVar3 = s_dims_<__3_0046e7a8[8];
          *(undefined8 *)pcVar14 = s_dims_<__3_0046e7a8._0_8_;
          pcVar14[8] = cVar3;
          cv::error(-0xd7,(String *)&local_58,
                    "bool cv::ocl::OpenCLAllocator::checkContinuous(int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, size_t&, size_t*, size_t&, size_t*, size_t*, size_t&, size_t*, size_t*) const"
                    ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x127f);
          cv::String::deallocate((String *)&local_58);
        }
        local_48 = param_5[2];
        local_40 = param_5[1];
        local_38 = *param_5;
        if (param_6 != (undefined8 *)0x0) {
          local_18 = param_6[2];
          local_10 = param_6[1];
          local_8 = *param_6;
        }
        lVar8 = param_8[1];
        lVar9 = *param_8;
        uVar10 = param_7[1];
        uVar11 = *param_7;
      }
    }
  }
  cv::UMatData::lock(param_2);
  if ((*(long *)(param_2 + 0x18) != 0) &&
     (((*(uint *)(param_2 + 0x30) >> 1 & 1) < (*(uint *)(param_2 + 0x30) >> 2 & 1) ||
      (*(long *)(param_2 + 0x28) == lVar19)))) {
    plVar13 = (long *)cv::Mat::getStdAllocator();
    (**(code **)(*plVar13 + 0x40))(plVar13,param_2,param_3,param_4,param_5,param_6,param_7,param_8);
    *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd | 4;
    cv::UMatData::unlock(param_2);
    return;
  }
  lVar16 = *(long *)(param_2 + 0x38);
  if (lVar16 == 0) {
    local_78 = lVar16;
    local_70 = lVar16;
    pcVar14 = (char *)cv::String::allocate((String *)&local_78,0xe);
    uVar5 = s_u_>handle____0_0046e948._12_2_;
    uVar4 = s_u_>handle____0_0046e948._8_4_;
    *(undefined8 *)pcVar14 = s_u_>handle____0_0046e948._0_8_;
    *(undefined4 *)(pcVar14 + 8) = uVar4;
    *(undefined2 *)(pcVar14 + 0xc) = uVar5;
    cv::error(-0xd7,(String *)&local_78,
              "virtual void cv::ocl::OpenCLAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x131d);
    cv::String::deallocate((String *)&local_78);
  }
  this = (Queue *)cv::ocl::Queue::getDefault();
  uVar12 = cv::ocl::Queue::ptr(this);
  lVar16 = *param_5;
  pvVar22 = (void *)0x0;
  lVar23 = *param_8;
  if (((ulong)param_3 & 0xf) == 0) {
    pvVar15 = param_3;
    if (bVar2) goto LAB_00361eb8;
LAB_00361fe0:
    uVar21 = *(undefined8 *)(param_2 + 0x38);
                    /* try { // try from 00361ffc to 00462027 has its CatchHandler @ 00361fa8 */
    if (((DAT_00532978 != (code *)0x0) ||
        (DAT_00532978 = (code *)FUN_0034d2bc("clEnqueueWriteBufferRect"),
        DAT_00532978 != (code *)0x0)) &&
       (iVar6 = (*DAT_00532978)(uVar12,uVar21,1,&local_18,&local_30,&local_48,uVar10,uVar11,lVar8,
                                lVar9,pvVar15,0,0,0), -1 < iVar6)) goto LAB_00361ef8;
    this_00 = (String *)&local_58;
    local_58 = 0;
    local_50 = 0;
    pvVar15 = (void *)cv::String::allocate(this_00,0xc1);
    memcpy(pvVar15,&DAT_0046ea00,0xc1);
                    /* try { // try from 00362078 to 0046207b has its CatchHandler @ 00362508 */
    cv::error(-0xd7,this_00,
              "virtual void cv::ocl::OpenCLAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1366);
                    /* try { // try from 00362080 to 00462187 has its CatchHandler @ 00361fa8 */
  }
  else {
    pvVar22 = operator_new__(lVar16 * lVar23 + 0xf);
    pvVar15 = (void *)((long)pvVar22 + 0xfU & 0xfffffffffffffff0);
    memcpy(pvVar15,param_3,lVar16 * lVar23);
    if (!bVar2) goto LAB_00361fe0;
LAB_00361eb8:
    uVar10 = *(undefined8 *)(param_2 + 0x38);
    if (((DAT_005329a0 != (code *)0x0) ||
        (DAT_005329a0 = (code *)FUN_0034d2bc("clEnqueueWriteBuffer"), DAT_005329a0 != (code *)0x0))
       && (iVar6 = (*DAT_005329a0)(uVar12,uVar10,1,lVar20,lVar19,pvVar15,0,0,0), -1 < iVar6))
    goto LAB_00361ef8;
    this_00 = (String *)&local_68;
    local_68 = 0;
    local_60 = 0;
    pvVar15 = (void *)cv::String::allocate(this_00,0x6f);
    memcpy(pvVar15,
           "clEnqueueWriteBuffer(q, (cl_mem)u->handle, CL_TRUE, dstrawofs, total, alignedPtr.getAlignedPtr(), 0, 0, 0) >= 0"
           ,0x6f);
    cv::error(-0xd7,this_00,
              "virtual void cv::ocl::OpenCLAllocator::upload(cv::UMatData*, const void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1360);
  }
  cv::String::deallocate(this_00);
LAB_00361ef8:
  if (pvVar22 != (void *)0x0) {
    operator_delete__(pvVar22);
  }
  *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffb | 2;
  cv::UMatData::unlock(param_2);
  return;
}


==================================================================

### FUNC 003623b4 (1380 bytes) name=FUN_003623b4

void FUN_003623b4(undefined8 param_1,UMatData *param_2,void *param_3,int param_4,long *param_5,
                 undefined8 *param_6,long *param_7,long *param_8)

{
  uint uVar1;
  bool bVar2;
  char cVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  int iVar6;
  long *plVar7;
  Queue *this;
  undefined8 uVar8;
  ulong uVar9;
  long lVar10;
  char *pcVar11;
  void *pvVar12;
  long lVar13;
  ulong uVar14;
  long lVar15;
  ulong uVar16;
  long lVar17;
  String *this_00;
  long lVar18;
  undefined8 uVar19;
  long lVar20;
  long lVar21;
  long lVar22;
  long local_a0;
  long local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  long local_70;
  long local_68;
  long local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  size_t local_28;
  void *local_20;
  undefined8 local_18;
  void *local_10;
  void *local_8;
  
  if (param_2 == (UMatData *)0x0) {
    return;
  }
  cv::UMatData::lock(param_2);
  if ((*(long *)(param_2 + 0x18) != 0) && ((*(uint *)(param_2 + 0x30) >> 1 & 1) == 0)) {
    plVar7 = (long *)cv::Mat::getStdAllocator();
    (**(code **)(*plVar7 + 0x38))(plVar7,param_2,param_3,param_4,param_5,param_6,param_7,param_8);
    goto LAB_00362438;
  }
  lVar13 = *(long *)(param_2 + 0x38);
  if (lVar13 == 0) {
    local_a0 = lVar13;
    local_98 = lVar13;
    pcVar11 = (char *)cv::String::allocate((String *)&local_a0,0xe);
    uVar5 = s_u_>handle____0_0046e948._12_2_;
    uVar4 = s_u_>handle____0_0046e948._8_4_;
    *(undefined8 *)pcVar11 = s_u_>handle____0_0046e948._0_8_;
    *(undefined4 *)(pcVar11 + 8) = uVar4;
                    /* try { // try from 00362738 to 0046273b has its CatchHandler @ 00362a74 */
    *(undefined2 *)(pcVar11 + 0xc) = uVar5;
    cv::error(-0xd7,(String *)&local_a0,
              "virtual void cv::ocl::OpenCLAllocator::download(cv::UMatData*, void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x12a3);
    cv::String::deallocate((String *)&local_a0);
                    /* try { // try from 00362748 to 00462a57 has its CatchHandler @ 0036251c */
  }
  this = (Queue *)cv::ocl::Queue::getDefault();
  uVar8 = cv::ocl::Queue::ptr(this);
  local_70 = 0;
  local_68 = 0;
  local_60 = 0;
  local_58 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_30 = 0;
  if (param_6 == (undefined8 *)0x0) {
    uVar1 = param_4 - 2;
    lVar17 = param_5[(long)param_4 + -1];
    lVar13 = 0;
    if ((int)uVar1 < 0) goto LAB_003628e0;
    uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
    bVar2 = true;
    uVar9 = 0;
    do {
      if (lVar17 == *(long *)((long)param_7 + uVar9 + uVar14)) {
        if (lVar17 != *(long *)((long)param_8 + uVar9 + uVar14)) {
          bVar2 = false;
        }
      }
      else {
        bVar2 = false;
      }
      lVar13 = uVar9 + uVar14;
      uVar9 = uVar9 - 8;
      lVar17 = lVar17 * *(long *)((long)param_5 + lVar13);
    } while (uVar9 != ((ulong)uVar1 << 3 ^ 0xfffffffffffffff8));
    lVar13 = 0;
LAB_00362534:
    if (bVar2) {
      lVar15 = 0;
      lVar10 = *param_5;
      lVar18 = *param_8;
      lVar22 = 0;
      lVar20 = lVar15;
      lVar21 = lVar15;
    }
    else if (param_4 == 2) {
      local_70 = param_5[1];
      lVar10 = *param_5;
      local_60 = 1;
      if (param_6 != (undefined8 *)0x0) {
        local_58 = param_6[1];
        local_50 = *param_6;
      }
      lVar18 = *param_8;
      lVar15 = 0;
      lVar20 = *param_7;
      lVar21 = lVar18;
      lVar22 = lVar15;
      local_68 = lVar10;
    }
    else {
      if (3 < param_4) {
        local_28 = 0;
        local_20 = (void *)0x0;
        pcVar11 = (char *)cv::String::allocate((String *)&local_28,9);
        cVar3 = s_dims_<__3_0046e7a8[8];
        *(undefined8 *)pcVar11 = s_dims_<__3_0046e7a8._0_8_;
        pcVar11[8] = cVar3;
        cv::error(-0xd7,(String *)&local_28,
                  "bool cv::ocl::OpenCLAllocator::checkContinuous(int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, size_t&, size_t*, size_t&, size_t*, size_t*, size_t&, size_t*, size_t*) const"
                  ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x127f);
        cv::String::deallocate((String *)&local_28);
      }
      local_70 = param_5[2];
      lVar10 = *param_5;
      if (param_6 != (undefined8 *)0x0) {
        local_58 = param_6[2];
        local_50 = param_6[1];
        local_48 = *param_6;
                    /* try { // try from 00362578 to 004625a3 has its CatchHandler @ 0036251c */
      }
      lVar18 = *param_8;
      lVar15 = lVar18;
      lVar20 = param_7[1];
      lVar21 = param_8[1];
      lVar22 = *param_7;
      local_68 = param_5[1];
      local_60 = lVar10;
    }
  }
  else {
    uVar1 = param_4 - 2;
    lVar13 = param_6[(long)param_4 + -1];
    lVar17 = param_5[(long)param_4 + -1];
    if (-1 < (int)uVar1) {
      uVar9 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      uVar16 = (ulong)uVar1 << 3 ^ 0xfffffffffffffff8;
      uVar14 = 0;
      bVar2 = true;
      do {
                    /* try { // try from 00362504 to 00462507 has its CatchHandler @ 00361fa8 */
                    /* catch() { ... } // from try @ 00362078 with catch @ 00362508 */
        while (lVar15 = *(long *)((long)param_7 + uVar14 + uVar9), lVar17 == lVar15) {
          lVar20 = uVar14 + uVar9;
          lVar21 = uVar14 + uVar9;
          lVar22 = uVar14 + uVar9;
                    /* try { // try from 00362518 to 0046251b has its CatchHandler @ 00361fa8 */
                    /* catch() { ... } // from try @ 00362578 with catch @ 0036251c
                       catch() { ... } // from try @ 003625fc with catch @ 0036251c
                       catch() { ... } // from try @ 00362748 with catch @ 0036251c
                       catch() { ... } // from try @ 00362a70 with catch @ 0036251c
                       catch() { ... } // from try @ 00362a84 with catch @ 0036251c */
          uVar14 = uVar14 - 8;
          if (lVar17 != *(long *)((long)param_8 + lVar20)) {
            bVar2 = false;
          }
          lVar17 = lVar17 * *(long *)((long)param_5 + lVar21);
          lVar13 = lVar13 + lVar15 * *(long *)((long)param_6 + lVar22);
          if (uVar14 == uVar16) goto LAB_00362534;
        }
        lVar20 = uVar14 + uVar9;
        bVar2 = false;
        lVar21 = uVar14 + uVar9;
        uVar14 = uVar14 - 8;
                    /* catch() { ... } // from try @ 003621c0 with catch @ 003624f4 */
        lVar17 = lVar17 * *(long *)((long)param_5 + lVar20);
        lVar13 = lVar13 + lVar15 * *(long *)((long)param_6 + lVar21);
      } while (uVar14 != uVar16);
      goto LAB_00362534;
    }
LAB_003628e0:
    lVar15 = 0;
    lVar10 = *param_5;
    lVar18 = *param_8;
    bVar2 = true;
    lVar21 = 0;
    lVar22 = 0;
    lVar20 = 0;
  }
  local_28 = lVar18 * lVar10;
  local_18 = 0x10;
  local_8 = (void *)0x0;
  local_20 = param_3;
  if (((ulong)param_3 & 0xf) != 0) {
    local_10 = param_3;
    local_8 = operator_new__(local_28 + 0xf);
    param_3 = (void *)((long)local_8 + 0xfU & 0xfffffffffffffff0);
  }
  local_10 = param_3;
  if (bVar2) {
    uVar19 = *(undefined8 *)(param_2 + 0x38);
                    /* try { // try from 003625f4 to 004625f7 has its CatchHandler @ 00362a60 */
    if (((DAT_005320a0 == (code *)0x0) &&
        (DAT_005320a0 = (code *)FUN_0034d2bc("clEnqueueReadBuffer"), DAT_005320a0 == (code *)0x0))
       || (iVar6 = (*DAT_005320a0)(uVar8,uVar19,1,lVar13,lVar17,param_3,0,0,0), iVar6 < 0)) {
      this_00 = (String *)&local_90;
      local_90 = 0;
      local_88 = 0;
      pvVar12 = (void *)cv::String::allocate(this_00,0x6e);
      memcpy(pvVar12,&DAT_0046eaf0,0x6e);
      cv::error(-0xd7,this_00,
                "virtual void cv::ocl::OpenCLAllocator::download(cv::UMatData*, void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x12f0);
LAB_003626bc:
      cv::String::deallocate(this_00);
    }
  }
  else {
    uVar19 = *(undefined8 *)(param_2 + 0x38);
    if (((DAT_00532070 == (code *)0x0) &&
        (DAT_00532070 = (code *)FUN_0034d2bc("clEnqueueReadBufferRect"), DAT_00532070 == (code *)0x0
        )) || (iVar6 = (*DAT_00532070)(uVar8,uVar19,1,&local_58,&local_40,&local_70,lVar20,lVar22,
                                       lVar21,lVar15,param_3,0,0,0), iVar6 < 0)) {
      this_00 = (String *)&local_80;
      local_80 = 0;
      local_78 = 0;
      pvVar12 = (void *)cv::String::allocate(this_00,0xc0);
      memcpy(pvVar12,&DAT_0046eb60,0xc0);
      cv::error(-0xd7,this_00,
                "virtual void cv::ocl::OpenCLAllocator::download(cv::UMatData*, void*, int, const size_t*, const size_t*, const size_t*, const size_t*) const"
                ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x12f6);
      goto LAB_003626bc;
    }
  }
                    /* try { // try from 003625fc to 004626ff has its CatchHandler @ 0036251c */
  if ((local_8 != (void *)0x0) && (memcpy(local_20,local_10,local_28), local_8 != (void *)0x0)) {
    operator_delete__(local_8);
  }
LAB_00362438:
  cv::UMatData::unlock(param_2);
  return;
}


==================================================================

### FUNC 00362988 (1016 bytes) name=FUN_00362988

void FUN_00362988(undefined8 param_1,UMatData *param_2)

{
  undefined4 uVar1;
  undefined2 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  char cVar12;
  int iVar13;
  Queue *this;
  undefined8 uVar14;
  char *pcVar15;
  Device *this_00;
  void *pvVar16;
  void *pvVar17;
  uint uVar18;
  long lVar19;
  void *__src;
  size_t __n;
  undefined8 uVar20;
  long local_40;
  long local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  long local_10;
  long local_8;
  
  if (param_2 != (UMatData *)0x0) {
    lVar19 = *(long *)(param_2 + 0x38);
    if (lVar19 == 0) {
      local_10 = lVar19;
      local_8 = lVar19;
      pcVar15 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar2 = s_u_>handle____0_0046e948._12_2_;
      uVar1 = s_u_>handle____0_0046e948._8_4_;
                    /* try { // try from 00362ad8 to 00462baf has its CatchHandler @ 00362a88 */
      *(undefined8 *)pcVar15 = s_u_>handle____0_0046e948._0_8_;
      *(undefined4 *)(pcVar15 + 8) = uVar1;
      *(undefined2 *)(pcVar15 + 0xc) = uVar2;
      cv::error(-0xd7,(String *)&local_10,
                "virtual void cv::ocl::OpenCLAllocator::unmap(cv::UMatData*) const",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x120f);
      cv::String::deallocate((String *)&local_10);
    }
    cv::UMatData::lock(param_2);
    if (*(int *)(param_2 + 0x14) < 1) {
      this = (Queue *)cv::ocl::Queue::getDefault();
      uVar14 = cv::ocl::Queue::ptr(this);
      uVar18 = *(uint *)(param_2 + 0x30);
      if (((uVar18 & 1) == 0) && ((uVar18 >> 6 & 1) != 0)) {
        lVar19 = *(long *)(param_2 + 0x18);
        if (lVar19 == 0) {
          local_40 = lVar19;
          local_38 = lVar19;
          pcVar15 = (char *)cv::String::allocate((String *)&local_40,0xf);
          cVar12 = s_u_>data____NULL_0046ec28[0xe];
          uVar2 = s_u_>data____NULL_0046ec28._12_2_;
          uVar1 = s_u_>data____NULL_0046ec28._8_4_;
          *(undefined8 *)pcVar15 = s_u_>data____NULL_0046ec28._0_8_;
          *(undefined4 *)(pcVar15 + 8) = uVar1;
          *(undefined2 *)(pcVar15 + 0xc) = uVar2;
          pcVar15[0xe] = cVar12;
          cv::error(-0xd7,(String *)&local_40,
                    "virtual void cv::ocl::OpenCLAllocator::unmap(cv::UMatData*) const",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x121b);
          cv::String::deallocate((String *)&local_40);
          lVar19 = *(long *)(param_2 + 0x18);
          uVar18 = *(uint *)(param_2 + 0x30);
        }
        *(uint *)(param_2 + 0x30) = uVar18 & 0xffffffbf;
        uVar20 = *(undefined8 *)(param_2 + 0x38);
        if (((DAT_00532068 == (code *)0x0) &&
            (DAT_00532068 = (code *)FUN_0034d2bc("clEnqueueUnmapMemObject"),
            DAT_00532068 == (code *)0x0)) ||
           (iVar13 = (*DAT_00532068)(uVar14,uVar20,lVar19,0,0,0), iVar13 != 0)) {
          local_30 = 0;
          local_28 = 0;
          pcVar15 = (char *)cv::String::allocate((String *)&local_30,0x58);
          uVar11 = s__retval___clEnqueueUnmapMemObjec_0046ec38._72_8_;
          uVar10 = s__retval___clEnqueueUnmapMemObjec_0046ec38._64_8_;
          uVar9 = s__retval___clEnqueueUnmapMemObjec_0046ec38._56_8_;
          uVar8 = s__retval___clEnqueueUnmapMemObjec_0046ec38._48_8_;
          uVar7 = s__retval___clEnqueueUnmapMemObjec_0046ec38._40_8_;
          uVar6 = s__retval___clEnqueueUnmapMemObjec_0046ec38._32_8_;
          uVar5 = s__retval___clEnqueueUnmapMemObjec_0046ec38._24_8_;
          uVar4 = s__retval___clEnqueueUnmapMemObjec_0046ec38._16_8_;
          uVar3 = s__retval___clEnqueueUnmapMemObjec_0046ec38._8_8_;
          uVar20 = s__retval___clEnqueueUnmapMemObjec_0046ec38._0_8_;
          *(undefined8 *)(pcVar15 + 0x50) = s__retval___clEnqueueUnmapMemObjec_0046ec38._80_8_;
          *(undefined8 *)pcVar15 = uVar20;
          *(undefined8 *)(pcVar15 + 8) = uVar3;
          *(undefined8 *)(pcVar15 + 0x10) = uVar4;
          *(undefined8 *)(pcVar15 + 0x18) = uVar5;
          *(undefined8 *)(pcVar15 + 0x20) = uVar6;
          *(undefined8 *)(pcVar15 + 0x28) = uVar7;
          *(undefined8 *)(pcVar15 + 0x30) = uVar8;
          *(undefined8 *)(pcVar15 + 0x38) = uVar9;
          *(undefined8 *)(pcVar15 + 0x40) = uVar10;
          *(undefined8 *)(pcVar15 + 0x48) = uVar11;
          cv::error(-0xd7,(String *)&local_30,
                    "virtual void cv::ocl::OpenCLAllocator::unmap(cv::UMatData*) const",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1237);
          cv::String::deallocate((String *)&local_30);
        }
        this_00 = (Device *)cv::ocl::Device::getDefault();
        iVar13 = cv::ocl::Device::vendorID(this_00);
        if (iVar13 == 1) {
          cVar12 = FUN_00350224();
                    /* catch() { ... } // from try @ 00362be8 with catch @ 00362d10 */
          if (cVar12 == '\0') {
            FUN_0034d4d8(uVar14);
          }
          else {
            iVar13 = FUN_0034d4d8(uVar14);
            if (iVar13 != 0) {
                    /* try { // try from 00362d20 to 00462d23 has its CatchHandler @ 00362a88 */
                    /* catch() { ... } // from try @ 00362ea0 with catch @ 00362d24
                       catch() { ... } // from try @ 00362ef4 with catch @ 00362d24
                       catch() { ... } // from try @ 00362fdc with catch @ 00362d24
                       catch() { ... } // from try @ 00363048 with catch @ 00362d24
                       catch() { ... } // from try @ 00363158 with catch @ 00362d24
                       catch() { ... } // from try @ 00363288 with catch @ 00362d24
                       catch() { ... } // from try @ 00363300 with catch @ 00362d24
                       catch() { ... } // from try @ 003633dc with catch @ 00362d24
                       catch() { ... } // from try @ 00363458 with catch @ 00362d24
                       catch() { ... } // from try @ 003634f4 with catch @ 00362d24
                       catch() { ... } // from try @ 0036351c with catch @ 00362d24
                       catch() { ... } // from try @ 00363530 with catch @ 00362d24
                       catch() { ... } // from try @ 00363544 with catch @ 00362d24
                       catch() { ... } // from try @ 00363558 with catch @ 00362d24
                       catch() { ... } // from try @ 0036356c with catch @ 00362d24
                       catch() { ... } // from try @ 00363580 with catch @ 00362d24
                       catch() { ... } // from try @ 00363594 with catch @ 00362d24
                       catch() { ... } // from try @ 003635a8 with catch @ 00362d24
                       catch() { ... } // from try @ 003635bc with catch @ 00362d24 */
              local_20 = 0;
              local_18 = 0;
              pcVar15 = (char *)cv::String::allocate((String *)&local_20,0x10);
              uVar14 = s_clFinish_q_____0_0046e778._8_8_;
              *(undefined8 *)pcVar15 = s_clFinish_q_____0_0046e778._0_8_;
              *(undefined8 *)(pcVar15 + 8) = uVar14;
              cv::error(-0xd7,(String *)&local_20,
                        "virtual void cv::ocl::OpenCLAllocator::unmap(cv::UMatData*) const",
                        "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x123b);
              cv::String::deallocate((String *)&local_20);
            }
          }
        }
        *(undefined8 *)(param_2 + 0x18) = 0;
        *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffff9;
        cv::UMatData::unlock(param_2);
      }
      else {
        if ((uVar18 & 5) == 5) {
          __src = *(void **)(param_2 + 0x18);
          __n = *(size_t *)(param_2 + 0x28);
          pvVar17 = (void *)0x0;
          pvVar16 = __src;
          if (((ulong)__src & 0xf) != 0) {
            pvVar17 = operator_new__(__n + 0xf);
            pvVar16 = (void *)((long)pvVar17 + 0xfU & 0xfffffffffffffff0);
            memcpy(pvVar16,__src,__n);
            __n = *(size_t *)(param_2 + 0x28);
          }
          uVar20 = *(undefined8 *)(param_2 + 0x38);
                    /* try { // try from 00362be8 to 00462beb has its CatchHandler @ 00362d10 */
          if (((DAT_005329a0 == (code *)0x0) &&
              (DAT_005329a0 = (code *)FUN_0034d2bc("clEnqueueWriteBuffer"),
              DAT_005329a0 == (code *)0x0)) ||
             (iVar13 = (*DAT_005329a0)(uVar14,uVar20,1,0,__n,pvVar16,0,0,0), iVar13 != 0)) {
                    /* try { // try from 00362bf8 to 00462bfb has its CatchHandler @ 00362a88 */
            local_10 = 0;
            local_8 = 0;
            pvVar16 = (void *)cv::String::allocate((String *)&local_10,0x7d);
            memcpy(pvVar16,
                   "(retval = clEnqueueWriteBuffer(q, (cl_mem)u->handle, CL_TRUE, 0, u->size, alignedPtr.getAlignedPtr(), 0, 0, 0)) == CL_SUCCESS"
                   ,0x7d);
            cv::error(-0xd7,(String *)&local_10,
                      "virtual void cv::ocl::OpenCLAllocator::unmap(cv::UMatData*) const",
                      "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1246);
            cv::String::deallocate((String *)&local_10);
          }
          if (pvVar17 != (void *)0x0) {
                    /* catch() { ... } // from try @ 003625f4 with catch @ 00362a60 */
            operator_delete__(pvVar17);
          }
          uVar18 = *(uint *)(param_2 + 0x30);
        }
                    /* try { // try from 00362a70 to 00462a73 has its CatchHandler @ 0036251c */
        *(uint *)(param_2 + 0x30) = uVar18 & 0xfffffff9;
                    /* catch() { ... } // from try @ 00362738 with catch @ 00362a74 */
        cv::UMatData::unlock(param_2);
      }
                    /* try { // try from 00362a84 to 00462a87 has its CatchHandler @ 0036251c */
                    /* catch() { ... } // from try @ 00362ad8 with catch @ 00362a88
                       catch() { ... } // from try @ 00362bf8 with catch @ 00362a88
                       catch() { ... } // from try @ 00362d20 with catch @ 00362a88 */
      return;
    }
    cv::UMatData::unlock(param_2);
  }
  return;
}


==================================================================

### FUNC 00362e00 (744 bytes) name=FUN_00362e00

void FUN_00362e00(undefined8 param_1,UMatData *param_2,uint param_3)

{
  undefined4 uVar1;
  undefined2 uVar2;
  int iVar3;
  Queue *this;
  undefined8 uVar4;
  void *pvVar5;
  char *pcVar6;
  uint uVar7;
  void *pvVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 local_38;
  undefined8 local_30;
  void *local_28;
  void *local_20;
  undefined8 local_18;
  void *local_10;
  void *local_8;
  
  if (param_2 == (UMatData *)0x0) {
    return;
  }
  pvVar8 = *(void **)(param_2 + 0x38);
  if (pvVar8 == (void *)0x0) {
    local_28 = pvVar8;
    local_20 = pvVar8;
    pcVar6 = (char *)cv::String::allocate((String *)&local_28,0xe);
    uVar2 = s_u_>handle____0_0046e948._12_2_;
    uVar1 = s_u_>handle____0_0046e948._8_4_;
    *(undefined8 *)pcVar6 = s_u_>handle____0_0046e948._0_8_;
    *(undefined4 *)(pcVar6 + 8) = uVar1;
    *(undefined2 *)(pcVar6 + 0xc) = uVar2;
    cv::error(-0xd7,(String *)&local_28,
              "virtual void cv::ocl::OpenCLAllocator::map(cv::UMatData*, int) const",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x11b5);
    cv::String::deallocate((String *)&local_28);
  }
  cv::UMatData::lock(param_2);
  if ((param_3 >> 0x19 & 1) != 0) {
    *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) | 4;
  }
  this = (Queue *)cv::ocl::Queue::getDefault();
  uVar4 = cv::ocl::Queue::ptr(this);
  uVar7 = *(uint *)(param_2 + 0x30);
  pvVar8 = *(void **)(param_2 + 0x18);
  if ((uVar7 & 1) == 0) {
    if (pvVar8 != (void *)0x0) goto LAB_00362e50;
    local_28 = (void *)((ulong)local_28 & 0xffffffff00000000);
    uVar10 = *(undefined8 *)(param_2 + 0x38);
    uVar9 = *(undefined8 *)(param_2 + 0x28);
    if ((DAT_00532038 == (code *)0x0) &&
       (DAT_00532038 = (code *)FUN_0034d2bc(&DAT_0046e700), DAT_00532038 == (code *)0x0)) {
      *(undefined8 *)(param_2 + 0x18) = 0;
    }
    else {
      pvVar5 = (void *)(*DAT_00532038)(uVar4,uVar10,1,3,0,uVar9,0,0,0,&local_28);
      *(void **)(param_2 + 0x18) = pvVar5;
                    /* try { // try from 00363038 to 0046303b has its CatchHandler @ 00363520 */
      if ((pvVar5 != (void *)0x0) && (pvVar8 = pvVar5, (int)local_28 == 0)) {
                    /* try { // try from 00363048 to 00463117 has its CatchHandler @ 00362d24 */
        *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd | 0x40;
        goto LAB_00362e50;
      }
    }
    uVar7 = *(uint *)(param_2 + 0x30) | 1;
    *(uint *)(param_2 + 0x30) = uVar7;
  }
  if (pvVar8 == (void *)0x0) {
    pvVar8 = (void *)cv::fastMalloc(*(ulong *)(param_2 + 0x28));
    *(void **)(param_2 + 0x18) = pvVar8;
    uVar7 = *(uint *)(param_2 + 0x30) | 2;
    *(uint *)(param_2 + 0x30) = uVar7;
  }
  if (((param_3 >> 0x18 & 1) != 0) && ((uVar7 >> 1 & 1) != 0)) {
                    /* try { // try from 00362ea0 to 00462ea3 has its CatchHandler @ 00362d24 */
    pvVar5 = *(void **)(param_2 + 0x28);
    local_18 = 0x10;
    local_8 = (void *)0x0;
    local_28 = pvVar5;
    local_20 = pvVar8;
    if (((ulong)pvVar8 & 0xf) != 0) {
      local_10 = pvVar8;
      local_8 = operator_new__((long)pvVar5 + 0xf);
                    /* try { // try from 00362fd4 to 00462fd7 has its CatchHandler @ 00363534 */
      pvVar8 = (void *)((long)local_8 + 0xfU & 0xfffffffffffffff0);
      pvVar5 = *(void **)(param_2 + 0x28);
                    /* try { // try from 00362fdc to 00462ff7 has its CatchHandler @ 00362d24 */
    }
    uVar9 = *(undefined8 *)(param_2 + 0x38);
    local_10 = pvVar8;
                    /* try { // try from 00362eec to 00462eef has its CatchHandler @ 00363598 */
                    /* try { // try from 00362ef4 to 00462f97 has its CatchHandler @ 00362d24 */
    if (((DAT_005320a0 == (code *)0x0) &&
        (DAT_005320a0 = (code *)FUN_0034d2bc("clEnqueueReadBuffer"), DAT_005320a0 == (code *)0x0))
       || (iVar3 = (*DAT_005320a0)(uVar4,uVar9,1,0,pvVar5,pvVar8,0,0,0), iVar3 != 0)) {
      local_38 = 0;
      local_30 = 0;
      pvVar8 = (void *)cv::String::allocate((String *)&local_38,0x71);
      memcpy(pvVar8,&DAT_0046ed18,0x71);
      cv::error(-0xd7,(String *)&local_38,
                "virtual void cv::ocl::OpenCLAllocator::map(cv::UMatData*, int) const",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1204);
      cv::String::deallocate((String *)&local_38);
      *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd;
    }
    else {
      *(uint *)(param_2 + 0x30) = *(uint *)(param_2 + 0x30) & 0xfffffffd;
    }
    if ((local_8 != (void *)0x0) &&
       (memcpy(local_20,local_10,(size_t)local_28), local_8 != (void *)0x0)) {
      operator_delete__(local_8);
    }
  }
LAB_00362e50:
  cv::UMatData::unlock(param_2);
  return;
}


==================================================================

### FUNC 00363134 (3348 bytes) name=FUN_00363134

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00363134(long param_1,UMat *param_2,char param_3,char param_4)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  undefined2 uVar4;
  undefined1 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  char cVar15;
  int iVar16;
  int iVar17;
  undefined8 *puVar18;
  Device *pDVar19;
  Context *pCVar20;
  undefined8 uVar21;
  Queue *pQVar22;
  undefined8 uVar23;
  undefined8 uVar24;
  char *pcVar25;
  void *__dest;
  undefined4 *puVar26;
  long lVar27;
  long lVar28;
  int local_94;
  undefined4 local_90;
  undefined4 uStack_8c;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  long local_60;
  long local_58;
  undefined8 local_50;
  long local_48;
  long local_40;
  long local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined4 local_10;
  undefined4 local_c;
  undefined8 local_8;
  
                    /* try { // try from 00363150 to 00463153 has its CatchHandler @ 003635ac */
                    /* try { // try from 00363158 to 00463237 has its CatchHandler @ 00362d24 */
  cVar15 = cv::ocl::haveOpenCL();
  if (cVar15 == '\0') {
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x19);
    cVar15 = s_OpenCL_runtime_not_found__0046e5f0[0x18];
    uVar21 = s_OpenCL_runtime_not_found__0046e5f0._8_8_;
    uVar23 = s_OpenCL_runtime_not_found__0046e5f0._0_8_;
                    /* try { // try from 003639cc to 004639cf has its CatchHandler @ 003639dc */
                    /* try { // try from 003639d4 to 004639d7 has its CatchHandler @ 00363808 */
                    /* catch() { ... } // from try @ 003639cc with catch @ 003639dc */
                    /* try { // try from 003639ec to 004639ef has its CatchHandler @ 00363808 */
                    /* catch() { ... } // from try @ 00363938 with catch @ 003639f0 */
                    /* try { // try from 00363a00 to 00463a03 has its CatchHandler @ 00363808 */
    *(undefined8 *)(pcVar25 + 0x10) = s_OpenCL_runtime_not_found__0046e5f0._16_8_;
                    /* catch() { ... } // from try @ 00363a50 with catch @ 00363a04
                       catch() { ... } // from try @ 00363b38 with catch @ 00363a04
                       catch() { ... } // from try @ 00363ba0 with catch @ 00363a04
                       catch() { ... } // from try @ 00363bb8 with catch @ 00363a04
                       catch() { ... } // from try @ 00363bcc with catch @ 00363a04 */
    pcVar25[0x18] = cVar15;
    *(undefined8 *)pcVar25 = uVar23;
    *(undefined8 *)(pcVar25 + 8) = uVar21;
    cv::error(-0xdc,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15d4);
    cv::String::deallocate((String *)&local_48);
  }
  if (*(long *)(param_2 + 0x20) == 0) {
LAB_003631a0:
    local_48 = 0;
    local_40 = 0;
    puVar18 = (undefined8 *)cv::String::allocate((String *)&local_48,0xc);
    uVar7 = _LAB_0046ef88;
    *puVar18 = DAT_0046ef80;
    *(undefined4 *)(puVar18 + 1) = uVar7;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15d6);
    cv::String::deallocate((String *)&local_48);
  }
  else {
    if (*(int *)(param_2 + 4) < 3) {
                    /* try { // try from 00363458 to 0046349b has its CatchHandler @ 00362d24 */
      lVar28 = (long)*(int *)(param_2 + 0xc) * (long)*(int *)(param_2 + 8);
    }
    else {
      lVar27 = 0;
      lVar28 = 1;
      do {
        lVar1 = lVar27 * 4;
        lVar27 = lVar27 + 1;
        lVar28 = lVar28 * *(int *)(*(long *)(param_2 + 0x30) + lVar1);
      } while ((int)lVar27 < *(int *)(param_2 + 4));
    }
    if (lVar28 == 0) goto LAB_003631a0;
  }
  pDVar19 = (Device *)cv::ocl::Device::getDefault();
  cVar15 = cv::ocl::Device::imageSupport(pDVar19);
  if (cVar15 == '\0') {
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x28);
    uVar6 = s_ocl__Device__getDefault___imageS_0046ed90._24_8_;
    uVar24 = s_ocl__Device__getDefault___imageS_0046ed90._16_8_;
    uVar21 = s_ocl__Device__getDefault___imageS_0046ed90._8_8_;
    uVar23 = s_ocl__Device__getDefault___imageS_0046ed90._0_8_;
                    /* try { // try from 00363a50 to 00463b13 has its CatchHandler @ 00363a04 */
    *(undefined8 *)(pcVar25 + 0x20) = s_ocl__Device__getDefault___imageS_0046ed90._32_8_;
    *(undefined8 *)pcVar25 = uVar23;
    *(undefined8 *)(pcVar25 + 8) = uVar21;
    *(undefined8 *)(pcVar25 + 0x10) = uVar24;
    *(undefined8 *)(pcVar25 + 0x18) = uVar6;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15d7);
    cv::String::deallocate((String *)&local_48);
  }
  uVar3 = *(uint *)param_2 & 7;
  uVar2 = (*(uint *)param_2 >> 3 & 0x1ff) + 1;
  if (4 < uVar2) {
    local_48 = 0;
    local_40 = 0;
    puVar26 = (undefined4 *)cv::String::allocate((String *)&local_48,7);
    uVar5 = DAT_0046afe6;
    uVar4 = DAT_0046afe4;
    *puVar26 = DAT_0046afe0;
    *(undefined2 *)(puVar26 + 1) = uVar4;
    *(undefined1 *)((long)puVar26 + 6) = uVar5;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15da);
                    /* try { // try from 00363684 to 00463687 has its CatchHandler @ 003637e0 */
    cv::String::deallocate((String *)&local_48);
  }
  if (param_3 == '\0') {
                    /* try { // try from 00363450 to 00463453 has its CatchHandler @ 00363548 */
    uStack_8c = *(undefined4 *)(PTR_channelTypes_00501ce0 + (long)(int)uVar3 * 4);
  }
  else {
    uStack_8c = *(undefined4 *)(PTR_channelTypesNorm_00501f18 + (long)(int)uVar3 * 4);
  }
  local_90 = *(undefined4 *)(PTR_channelOrders_00501b60 + (long)(int)uVar2 * 4);
  cVar15 = FUN_00360678(CONCAT44(uStack_8c,local_90));
  if (cVar15 == '\0') {
                    /* try { // try from 003635bc to 004635bf has its CatchHandler @ 00362d24 */
                    /* catch() { ... } // from try @ 00363614 with catch @ 003635c0
                       catch() { ... } // from try @ 0036368c with catch @ 003635c0
                       catch() { ... } // from try @ 00363780 with catch @ 003635c0
                       catch() { ... } // from try @ 003637c4 with catch @ 003635c0
                       catch() { ... } // from try @ 003637dc with catch @ 003635c0
                       catch() { ... } // from try @ 003637f0 with catch @ 003635c0
                       catch() { ... } // from try @ 00363804 with catch @ 003635c0 */
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x1d);
    cVar15 = s_Image_format_is_not_supported_0046edc0[0x1c];
    uVar7 = s_Image_format_is_not_supported_0046edc0._24_4_;
    uVar21 = s_Image_format_is_not_supported_0046edc0._8_8_;
    uVar23 = s_Image_format_is_not_supported_0046edc0._0_8_;
    *(undefined8 *)(pcVar25 + 0x10) = s_Image_format_is_not_supported_0046edc0._16_8_;
    *(undefined4 *)(pcVar25 + 0x18) = uVar7;
    pcVar25[0x1c] = cVar15;
    *(undefined8 *)pcVar25 = uVar23;
    *(undefined8 *)(pcVar25 + 8) = uVar21;
                    /* try { // try from 00363614 to 00463667 has its CatchHandler @ 003635c0 */
    cv::error(-0xdc,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15de);
    cv::String::deallocate((String *)&local_48);
  }
  if (param_4 == '\0') {
    pCVar20 = (Context *)cv::ocl::Context::getDefault(true);
    uVar21 = cv::ocl::Context::ptr(pCVar20);
    pQVar22 = (Queue *)cv::ocl::Queue::getDefault();
    uVar23 = cv::ocl::Queue::ptr(pQVar22);
    pDVar19 = (Device *)cv::ocl::Device::getDefault();
                    /* try { // try from 00363280 to 00463283 has its CatchHandler @ 0036350c */
    iVar16 = cv::ocl::Device::deviceVersionMinor(pDVar19);
                    /* try { // try from 00363288 to 004632cb has its CatchHandler @ 00362d24 */
    iVar17 = cv::ocl::Device::deviceVersionMajor(pDVar19);
LAB_00363294:
    if (1 < iVar17) {
LAB_0036329c:
      local_38 = (long)*(int *)(param_2 + 8);
      local_40 = (long)*(int *)(param_2 + 0xc);
      local_48 = CONCAT44(local_48._4_4_,0x10f1);
      local_30 = 0;
      local_28 = 1;
      if (param_4 != '\0') goto LAB_00363560;
      local_18 = 0;
      local_8 = 0;
      local_20 = 0;
      goto joined_r0x00363590;
    }
LAB_00363af4:
    if ((1 < iVar16) && (iVar17 == 1)) goto LAB_0036329c;
    if (param_4 != '\0') {
      local_48 = 0;
      local_40 = 0;
      puVar26 = (undefined4 *)cv::String::allocate((String *)&local_48,6);
      uVar4 = DAT_0046edf4;
                    /* try { // try from 00363b30 to 00463b33 has its CatchHandler @ 00363bbc */
                    /* try { // try from 00363b38 to 00463b7b has its CatchHandler @ 00363a04 */
      *puVar26 = DAT_0046edf0;
      *(undefined2 *)(puVar26 + 1) = uVar4;
      cv::error(-0xd7,(String *)&local_48,
                "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15ff);
      cv::String::deallocate((String *)&local_48);
    }
    iVar17 = *(int *)(param_2 + 0xc);
    iVar16 = *(int *)(param_2 + 8);
                    /* try { // try from 00363e24 to 00463e27 has its CatchHandler @ 00363bd0 */
                    /* catch() { ... } // from try @ 00363d74 with catch @ 00363e28 */
                    /* try { // try from 00363e38 to 00463e3b has its CatchHandler @ 00363bd0 */
                    /* catch() { ... } // from try @ 00363e00 with catch @ 00363e3c */
    if ((DAT_005320d0 == (code *)0x0) &&
       (DAT_005320d0 = (code *)FUN_0034d2bc("clCreateImage2D"), DAT_005320d0 == (code *)0x0))
    goto LAB_003635a8;
    uVar24 = (*DAT_005320d0)(uVar21,1,&local_90,(long)iVar17,(long)iVar16,0,0,&local_94);
                    /* try { // try from 00363b98 to 00463b9b has its CatchHandler @ 00363ba8 */
  }
  else {
    lVar28 = cv::UMat::handle(param_2,0x3000000);
    if (lVar28 == 0) {
      local_48 = lVar28;
      local_40 = lVar28;
      pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x1e);
      uVar4 = s_Incorrect_UMat__handle_is_null_0046ef90._28_2_;
      uVar7 = s_Incorrect_UMat__handle_is_null_0046ef90._24_4_;
      uVar21 = s_Incorrect_UMat__handle_is_null_0046ef90._8_8_;
      uVar23 = s_Incorrect_UMat__handle_is_null_0046ef90._0_8_;
      *(undefined8 *)(pcVar25 + 0x10) = s_Incorrect_UMat__handle_is_null_0046ef90._16_8_;
      *(undefined4 *)(pcVar25 + 0x18) = uVar7;
      *(undefined2 *)(pcVar25 + 0x1c) = uVar4;
      *(undefined8 *)pcVar25 = uVar23;
      *(undefined8 *)(pcVar25 + 8) = uVar21;
      cv::error(-0xdc,(String *)&local_48,
                "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15e1);
      cv::String::deallocate((String *)&local_48);
    }
    pCVar20 = (Context *)cv::ocl::Context::getDefault(true);
    uVar21 = cv::ocl::Context::ptr(pCVar20);
    pQVar22 = (Queue *)cv::ocl::Queue::getDefault();
    uVar23 = cv::ocl::Queue::ptr(pQVar22);
    pDVar19 = (Device *)cv::ocl::Device::getDefault();
    iVar16 = cv::ocl::Device::deviceVersionMinor(pDVar19);
    iVar17 = cv::ocl::Device::deviceVersionMajor(pDVar19);
    cVar15 = cv::ocl::Image2D::canCreateAlias(param_2);
    if (cVar15 != '\0') goto LAB_00363294;
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x1d);
    cVar15 = s__alias____canCreateAlias_src__0046efb0[0x1c];
    uVar7 = s__alias____canCreateAlias_src__0046efb0._24_4_;
    uVar6 = s__alias____canCreateAlias_src__0046efb0._8_8_;
    uVar24 = s__alias____canCreateAlias_src__0046efb0._0_8_;
                    /* try { // try from 003634ec to 004634ef has its CatchHandler @ 0036355c */
                    /* try { // try from 003634f4 to 004634f7 has its CatchHandler @ 00362d24 */
                    /* catch() { ... } // from try @ 00363280 with catch @ 0036350c */
    *(undefined8 *)(pcVar25 + 0x10) = s__alias____canCreateAlias_src__0046efb0._16_8_;
                    /* try { // try from 0036351c to 0046351f has its CatchHandler @ 00362d24 */
    *(undefined4 *)(pcVar25 + 0x18) = uVar7;
                    /* catch() { ... } // from try @ 00363038 with catch @ 00363520 */
    pcVar25[0x1c] = cVar15;
    *(undefined8 *)pcVar25 = uVar24;
    *(undefined8 *)(pcVar25 + 8) = uVar6;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x15eb);
                    /* try { // try from 00363530 to 00463533 has its CatchHandler @ 00362d24 */
    cv::String::deallocate((String *)&local_48);
                    /* catch() { ... } // from try @ 00362fd4 with catch @ 00363534 */
    if (iVar17 < 2) goto LAB_00363af4;
    local_38 = (long)*(int *)(param_2 + 8);
                    /* try { // try from 00363544 to 00463547 has its CatchHandler @ 00362d24 */
    local_40 = (long)*(int *)(param_2 + 0xc);
                    /* catch() { ... } // from try @ 00363450 with catch @ 00363548 */
    local_48 = CONCAT44(local_48._4_4_,0x10f1);
                    /* try { // try from 00363558 to 0046355b has its CatchHandler @ 00362d24 */
                    /* catch() { ... } // from try @ 003634ec with catch @ 0036355c */
LAB_00363560:
    local_28 = 1;
    local_30 = 0;
                    /* try { // try from 0036356c to 0046356f has its CatchHandler @ 00362d24 */
                    /* catch() { ... } // from try @ 003633d4 with catch @ 00363570 */
    local_20 = **(undefined8 **)(param_2 + 0x38);
    local_18 = 0;
    local_8 = cv::UMat::handle(param_2,0x3000000);
                    /* try { // try from 00363580 to 00463583 has its CatchHandler @ 00362d24 */
                    /* catch() { ... } // from try @ 003632f8 with catch @ 00363584 */
joined_r0x00363590:
    local_c = 0;
    local_10 = 0;
    if (DAT_005320c0 == (code *)0x0) {
      local_c = 0;
                    /* try { // try from 00363594 to 00463597 has its CatchHandler @ 00362d24 */
      local_10 = 0;
                    /* catch() { ... } // from try @ 00362eec with catch @ 00363598 */
      DAT_005320c0 = (code *)FUN_0034d2bc("clCreateImage");
      if (DAT_005320c0 == (code *)0x0) {
LAB_003635a8:
                    /* try { // try from 003635a8 to 004635ab has its CatchHandler @ 00362d24 */
        uVar24 = 0;
                    /* catch() { ... } // from try @ 00363150 with catch @ 003635ac */
        local_94 = -1000;
        goto LAB_00363308;
      }
    }
                    /* try { // try from 003632f8 to 004632fb has its CatchHandler @ 00363584 */
                    /* try { // try from 00363300 to 00463393 has its CatchHandler @ 00362d24 */
    uVar24 = (*DAT_005320c0)(uVar21,1,&local_90,&local_48,0,&local_94);
  }
LAB_00363308:
  *(undefined8 *)(param_1 + 8) = uVar24;
  cVar15 = FUN_00350224();
  if ((cVar15 != '\0') && (local_94 != 0)) {
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,8);
    *(undefined8 *)pcVar25 = s_err____0_0046e630._0_8_;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1603);
    cv::String::deallocate((String *)&local_48);
  }
  local_78 = 0;
  local_60 = (long)*(int *)(param_2 + 0xc);
  local_70 = 0;
  local_58 = (long)*(int *)(param_2 + 8);
  local_68 = 0;
  local_50 = 1;
  if (param_4 == '\0') {
    if ((*(uint *)param_2 >> 0xe & 1) == 0) {
                    /* try { // try from 0036368c to 0046375b has its CatchHandler @ 003635c0 */
      if (*(int *)(param_2 + 4) < 1) {
        lVar28 = 0;
        if (DAT_00531ff8 == (code *)0x0) goto LAB_00363c6c;
LAB_003636c0:
        lVar28 = (*DAT_00531ff8)(uVar21,4,lVar28,0,&local_94);
      }
      else {
        lVar28 = (long)(*(int *)(param_2 + 0xc) * *(int *)(param_2 + 8)) *
                 *(long *)(*(long *)(param_2 + 0x38) + (long)*(int *)(param_2 + 4) * 8 + -8);
        if (DAT_00531ff8 != (code *)0x0) goto LAB_003636c0;
LAB_00363c6c:
        DAT_00531ff8 = (code *)FUN_0034d2bc("clCreateBuffer");
        if (DAT_00531ff8 != (code *)0x0) goto LAB_003636c0;
        local_94 = -1000;
        lVar28 = 0;
      }
      cVar15 = FUN_00350224();
      if ((cVar15 != '\0') && (local_94 != 0)) {
        local_48 = 0;
        local_40 = 0;
        pcVar25 = (char *)cv::String::allocate((String *)&local_48,8);
        *(undefined8 *)pcVar25 = s_err____0_0046e630._0_8_;
        cv::error(-0xd7,(String *)&local_48,
                  "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x160c);
        cv::String::deallocate((String *)&local_48);
      }
      local_38 = 1;
      if (*(int *)(param_2 + 4) < 1) {
        local_48 = 0;
      }
      else {
        local_48 = (long)*(int *)(param_2 + 0xc) *
                   *(long *)(*(long *)(param_2 + 0x38) + (long)*(int *)(param_2 + 4) * 8 + -8);
      }
      local_40 = (long)*(int *)(param_2 + 8);
      uVar21 = cv::UMat::handle(param_2,0x1000000);
      uVar24 = *(undefined8 *)(param_2 + 0x40);
      if (*(int *)(param_2 + 4) < 1) {
        lVar27 = 0;
        if (DAT_005329c0 == (code *)0x0) goto LAB_00363c2c;
LAB_00363780:
                    /* try { // try from 00363780 to 0046379f has its CatchHandler @ 003635c0 */
        iVar17 = (*DAT_005329c0)(uVar23,uVar21,lVar28,&local_78,&local_78,&local_48,uVar24,0,lVar27,
                                 0,0,0,0);
        if (iVar17 != 0) goto LAB_003637b8;
      }
      else {
        lVar27 = (long)*(int *)(param_2 + 0xc) *
                 *(long *)(*(long *)(param_2 + 0x38) + (long)*(int *)(param_2 + 4) * 8 + -8);
                    /* try { // try from 00363778 to 0046377b has its CatchHandler @ 003637cc */
        if (DAT_005329c0 != (code *)0x0) goto LAB_00363780;
LAB_00363c2c:
        DAT_005329c0 = (code *)FUN_0034d2bc("clEnqueueCopyBufferRect");
        if (DAT_005329c0 != (code *)0x0) goto LAB_00363780;
LAB_003637b8:
                    /* try { // try from 003637bc to 004637bf has its CatchHandler @ 003637f4 */
                    /* try { // try from 003637c4 to 004637c7 has its CatchHandler @ 003635c0 */
        local_88 = 0;
        local_80 = 0;
                    /* catch() { ... } // from try @ 00363778 with catch @ 003637cc */
        __dest = (void *)cv::String::allocate((String *)&local_88,0xa5);
                    /* try { // try from 003637dc to 004637df has its CatchHandler @ 003635c0 */
        memcpy(__dest,
               "clEnqueueCopyBufferRect(queue, (cl_mem)src.handle(ACCESS_READ), devData, origin, origin, roi, src.step, 0, src.cols * src.elemSize(), 0, 0, NULL, NULL) == CL_SUCCESS"
               ,0xa5);
                    /* catch() { ... } // from try @ 00363684 with catch @ 003637e0 */
                    /* try { // try from 003637f0 to 004637f3 has its CatchHandler @ 003635c0 */
                    /* catch() { ... } // from try @ 003637bc with catch @ 003637f4 */
        cv::error(-0xd7,(String *)&local_88,
                  "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1610);
                    /* try { // try from 00363804 to 00463807 has its CatchHandler @ 003635c0 */
        cv::String::deallocate((String *)&local_88);
      }
                    /* catch() { ... } // from try @ 00363858 with catch @ 00363808
                       catch() { ... } // from try @ 00363940 with catch @ 00363808
                       catch() { ... } // from try @ 003639d4 with catch @ 00363808
                       catch() { ... } // from try @ 003639ec with catch @ 00363808
                       catch() { ... } // from try @ 00363a00 with catch @ 00363808 */
      cVar15 = FUN_00350224();
      if (cVar15 == '\0') {
        if ((DAT_00532000 != (code *)0x0) ||
           (DAT_00532000 = (code *)FUN_0034d2bc("clFlush"), DAT_00532000 != (code *)0x0)) {
          (*DAT_00532000)(uVar23);
        }
      }
      else {
                    /* try { // try from 00363ba0 to 00463ba3 has its CatchHandler @ 00363a04 */
                    /* catch() { ... } // from try @ 00363b98 with catch @ 00363ba8 */
        if (((DAT_00532000 == (code *)0x0) &&
            (DAT_00532000 = (code *)FUN_0034d2bc("clFlush"), DAT_00532000 == (code *)0x0)) ||
           (iVar17 = (*DAT_00532000)(uVar23), iVar17 != 0)) {
                    /* try { // try from 00363bb8 to 00463bbb has its CatchHandler @ 00363a04 */
                    /* catch() { ... } // from try @ 00363b30 with catch @ 00363bbc */
          local_88 = 0;
          local_80 = 0;
          pcVar25 = (char *)cv::String::allocate((String *)&local_88,0x13);
          cVar15 = s_clFlush_queue_____0_0046eeb0[0x12];
          uVar24 = s_clFlush_queue_____0_0046eeb0._8_8_;
          uVar21 = s_clFlush_queue_____0_0046eeb0._0_8_;
                    /* try { // try from 00363bcc to 00463bcf has its CatchHandler @ 00363a04 */
                    /* catch() { ... } // from try @ 00363c18 with catch @ 00363bd0
                       catch() { ... } // from try @ 00363d7c with catch @ 00363bd0
                       catch() { ... } // from try @ 00363dc4 with catch @ 00363bd0
                       catch() { ... } // from try @ 00363e08 with catch @ 00363bd0
                       catch() { ... } // from try @ 00363e24 with catch @ 00363bd0
                       catch() { ... } // from try @ 00363e38 with catch @ 00363bd0
                       catch() { ... } // from try @ 00363e4c with catch @ 00363bd0 */
          *(undefined2 *)(pcVar25 + 0x10) = s_clFlush_queue_____0_0046eeb0._16_2_;
          pcVar25[0x12] = cVar15;
          *(undefined8 *)pcVar25 = uVar21;
          *(undefined8 *)(pcVar25 + 8) = uVar24;
          cv::error(-0xd7,(String *)&local_88,
                    "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                    "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1611);
          cv::String::deallocate((String *)&local_88);
        }
      }
    }
    else {
      lVar28 = cv::UMat::handle(param_2,0x1000000);
    }
    if (lVar28 != 0) {
      cVar15 = FUN_00350224();
      uVar21 = *(undefined8 *)(param_1 + 8);
      goto joined_r0x003638b4;
    }
  }
  else {
    lVar28 = cv::UMat::handle(param_2,0x1000000);
    if (lVar28 != 0) {
      return;
    }
  }
  local_48 = 0;
  local_40 = 0;
  pcVar25 = (char *)cv::String::allocate((String *)&local_48,0xf);
  cVar15 = s_devData____NULL_0046eec8[0xe];
  uVar4 = s_devData____NULL_0046eec8._12_2_;
  uVar7 = s_devData____NULL_0046eec8._8_4_;
                    /* try { // try from 00363858 to 0046391b has its CatchHandler @ 00363808 */
  *(undefined8 *)pcVar25 = s_devData____NULL_0046eec8._0_8_;
  *(undefined4 *)(pcVar25 + 8) = uVar7;
  *(undefined2 *)(pcVar25 + 0xc) = uVar4;
  pcVar25[0xe] = cVar15;
  cv::error(-0xd7,(String *)&local_48,
            "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x1617);
  cv::String::deallocate((String *)&local_48);
  if (param_4 != '\0') {
    return;
  }
  cVar15 = FUN_00350224();
  lVar28 = 0;
  uVar21 = *(undefined8 *)(param_1 + 8);
joined_r0x003638b4:
  if (cVar15 == '\0') {
                    /* try { // try from 00363d7c to 00463d9f has its CatchHandler @ 00363bd0 */
    if ((DAT_00532090 != (code *)0x0) ||
       (DAT_00532090 = (code *)FUN_0034d2bc("clEnqueueCopyBufferToImage"),
       DAT_00532090 != (code *)0x0)) {
      (*DAT_00532090)(uVar23,lVar28,uVar21,0,&local_78,&local_60,0,0,0);
    }
  }
  else if (((DAT_00532090 == (code *)0x0) &&
           (DAT_00532090 = (code *)FUN_0034d2bc("clEnqueueCopyBufferToImage"),
           DAT_00532090 == (code *)0x0)) ||
          (iVar17 = (*DAT_00532090)(uVar23,lVar28,uVar21,0,&local_78,&local_60,0,0,0), iVar17 != 0))
  {
    local_48 = 0;
    local_40 = 0;
    pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x58);
    uVar14 = s_clEnqueueCopyBufferToImage_queue_0046eef8._72_8_;
    uVar13 = s_clEnqueueCopyBufferToImage_queue_0046eef8._64_8_;
    uVar12 = s_clEnqueueCopyBufferToImage_queue_0046eef8._56_8_;
    uVar11 = s_clEnqueueCopyBufferToImage_queue_0046eef8._48_8_;
    uVar10 = s_clEnqueueCopyBufferToImage_queue_0046eef8._40_8_;
    uVar9 = s_clEnqueueCopyBufferToImage_queue_0046eef8._32_8_;
    uVar8 = s_clEnqueueCopyBufferToImage_queue_0046eef8._24_8_;
    uVar6 = s_clEnqueueCopyBufferToImage_queue_0046eef8._16_8_;
    uVar24 = s_clEnqueueCopyBufferToImage_queue_0046eef8._8_8_;
    uVar21 = s_clEnqueueCopyBufferToImage_queue_0046eef8._0_8_;
                    /* try { // try from 00363938 to 0046393b has its CatchHandler @ 003639f0 */
    *(undefined8 *)(pcVar25 + 0x50) = s_clEnqueueCopyBufferToImage_queue_0046eef8._80_8_;
                    /* try { // try from 00363940 to 004639af has its CatchHandler @ 00363808 */
    *(undefined8 *)pcVar25 = uVar21;
    *(undefined8 *)(pcVar25 + 8) = uVar24;
    *(undefined8 *)(pcVar25 + 0x10) = uVar6;
    *(undefined8 *)(pcVar25 + 0x18) = uVar8;
    *(undefined8 *)(pcVar25 + 0x20) = uVar9;
    *(undefined8 *)(pcVar25 + 0x28) = uVar10;
    *(undefined8 *)(pcVar25 + 0x30) = uVar11;
    *(undefined8 *)(pcVar25 + 0x38) = uVar12;
    *(undefined8 *)(pcVar25 + 0x40) = uVar13;
    *(undefined8 *)(pcVar25 + 0x48) = uVar14;
    cv::error(-0xd7,(String *)&local_48,
              "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x161b);
    cv::String::deallocate((String *)&local_48);
  }
  if ((*(uint *)param_2 >> 0xe & 1) == 0) {
    cVar15 = FUN_00350224();
    if (cVar15 == '\0') {
      FUN_0034d5ec(uVar23);
    }
    else {
      iVar17 = FUN_0034d5ec(uVar23);
      if (iVar17 != 0) {
                    /* try { // try from 00363dbc to 00463dbf has its CatchHandler @ 00363e14 */
                    /* try { // try from 00363dc4 to 00463de3 has its CatchHandler @ 00363bd0 */
        local_48 = 0;
        local_40 = 0;
        pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x13);
        cVar15 = s_clFlush_queue_____0_0046eeb0[0x12];
        uVar21 = s_clFlush_queue_____0_0046eeb0._8_8_;
        uVar23 = s_clFlush_queue_____0_0046eeb0._0_8_;
                    /* try { // try from 00363e00 to 00463e03 has its CatchHandler @ 00363e3c */
        *(undefined2 *)(pcVar25 + 0x10) = s_clFlush_queue_____0_0046eeb0._16_2_;
                    /* try { // try from 00363e08 to 00463e0b has its CatchHandler @ 00363bd0 */
        pcVar25[0x12] = cVar15;
        *(undefined8 *)pcVar25 = uVar23;
        *(undefined8 *)(pcVar25 + 8) = uVar21;
        cv::error(-0xd7,(String *)&local_48,
                  "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x161e);
                    /* catch() { ... } // from try @ 00363dbc with catch @ 00363e14 */
        cv::String::deallocate((String *)&local_48);
      }
    }
    cVar15 = FUN_00350224();
                    /* try { // try from 003633d4 to 004633d7 has its CatchHandler @ 00363570 */
    if (cVar15 == '\0') {
      FUN_0034d52c(lVar28);
    }
    else {
                    /* try { // try from 003633dc to 0046340f has its CatchHandler @ 00362d24 */
      iVar17 = FUN_0034d52c(lVar28);
      if (iVar17 != 0) {
        local_48 = 0;
        local_40 = 0;
        pcVar25 = (char *)cv::String::allocate((String *)&local_48,0x20);
        uVar24 = s_clReleaseMemObject_devData_____0_0046ef58._24_8_;
        uVar21 = s_clReleaseMemObject_devData_____0_0046ef58._16_8_;
        uVar23 = s_clReleaseMemObject_devData_____0_0046ef58._8_8_;
        *(undefined8 *)pcVar25 = s_clReleaseMemObject_devData_____0_0046ef58._0_8_;
        *(undefined8 *)(pcVar25 + 8) = uVar23;
        *(undefined8 *)(pcVar25 + 0x10) = uVar21;
        *(undefined8 *)(pcVar25 + 0x18) = uVar24;
        cv::error(-0xd7,(String *)&local_48,
                  "void cv::ocl::Image2D::Impl::init(const cv::UMat&, bool, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0x161f);
        cv::String::deallocate((String *)&local_48);
      }
    }
  }
  return;
}


==================================================================

### FUNC 00363f88 (96 bytes) name=Image2D

/* cv::ocl::Image2D::Image2D(cv::UMat const&, bool, bool) */

void __thiscall cv::ocl::Image2D::Image2D(Image2D *this,UMat *param_1,bool param_2,bool param_3)

{
  undefined4 *puVar1;
  
                    /* try { // try from 00363fac to 00463faf has its CatchHandler @ 00364b24 */
  puVar1 = operator_new(0x10);
  *(undefined8 *)(puVar1 + 2) = 0;
                    /* try { // try from 00363fb4 to 0046404b has its CatchHandler @ 00363e50 */
  *puVar1 = 1;
  FUN_00363134(puVar1,param_1,param_2,param_3);
  *(undefined4 **)this = puVar1;
  return;
}


==================================================================

### FUNC 00363ffc (896 bytes) name=runTask

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::ocl::Kernel::runTask(bool, cv::ocl::Queue const&) */

bool __thiscall cv::ocl::Kernel::runTask(Kernel *this,bool param_1,Queue *param_2)

{
  bool bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  int *piVar11;
  Queue *this_00;
  undefined8 *puVar12;
  undefined8 uVar13;
  long *plVar14;
  long lVar15;
  long lVar16;
  long *plVar17;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar15 = *(long *)this;
  if (lVar15 == 0) {
    return false;
  }
  if (*(long *)(lVar15 + 8) == 0) {
    return false;
  }
  if (*(long *)(lVar15 + 0x10) != 0) {
    return false;
  }
  lVar15 = Queue::ptr(param_2);
  if (lVar15 == 0) {
    this_00 = (Queue *)Queue::getDefault();
    lVar15 = Queue::ptr(this_00);
  }
  uVar13 = *(undefined8 *)(*(long *)this + 8);
  if (param_1) {
    if (DAT_005320e0 == (code *)0x0) {
      lVar16 = 0;
LAB_003641f8:
      DAT_005320e0 = (code *)FUN_0034d2bc("clEnqueueTask");
      if (DAT_005320e0 != (code *)0x0) goto LAB_00364110;
      iVar9 = -1000;
    }
    else {
      iVar9 = (*DAT_005320e0)(lVar15,uVar13,0,0,0);
    }
  }
  else {
    lVar16 = *(long *)this + 0x10;
    if (DAT_005320e0 == (code *)0x0) goto LAB_003641f8;
LAB_00364110:
    iVar9 = (*DAT_005320e0)(lVar15,uVar13,0,0,lVar16);
    if ((iVar9 == 0) && (!param_1)) {
      piVar11 = *(int **)this;
      do {
        cVar8 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar1) {
          *piVar11 = *piVar11 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
      cVar8 = FUN_00350224();
      lVar15 = *(long *)this;
      if (cVar8 == '\0') {
        uVar13 = *(undefined8 *)(lVar15 + 0x10);
        if ((DAT_00532088 == (code *)0x0) &&
           (DAT_00532088 = (code *)FUN_0034d2bc("clSetEventCallback"), DAT_00532088 == (code *)0x0))
        {
          iVar9 = 0;
        }
        else {
          iVar9 = 0;
          (*DAT_00532088)(uVar13,0,FUN_00355f54,lVar15);
        }
      }
      else {
        uVar13 = *(undefined8 *)(lVar15 + 0x10);
        if ((DAT_00532088 != (code *)0x0) ||
           (DAT_00532088 = (code *)FUN_0034d2bc("clSetEventCallback"), DAT_00532088 != (code *)0x0))
        {
                    /* try { // try from 00364164 to 00464167 has its CatchHandler @ 00364a44 */
                    /* try { // try from 0036416c to 004644e7 has its CatchHandler @ 00363e50 */
          iVar10 = (*DAT_00532088)(uVar13,0,FUN_00355f54,lVar15);
          iVar9 = 0;
          if (iVar10 == 0) goto LAB_00364184;
        }
        local_10 = 0;
        local_8 = 0;
        puVar12 = (undefined8 *)String::allocate((String *)&local_10,0x39);
        uVar7 = DAT_0046f040;
        uVar6 = DAT_0046f038;
        uVar5 = DAT_0046f030;
        uVar4 = DAT_0046f028;
        uVar3 = DAT_0046f020;
        uVar2 = DAT_0046f018;
        uVar13 = DAT_0046f010;
        *(undefined1 *)(puVar12 + 7) = LAB_0046f048;
        puVar12[6] = uVar7;
        *puVar12 = uVar13;
        puVar12[1] = uVar2;
        puVar12[2] = uVar3;
        puVar12[3] = uVar4;
        puVar12[4] = uVar5;
        puVar12[5] = uVar6;
        error(-0xd7,(String *)&local_10,"bool cv::ocl::Kernel::runTask(bool, const cv::ocl::Queue&)"
              ,"/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd5d);
        iVar9 = 0;
        String::deallocate((String *)&local_10);
      }
      goto LAB_00364184;
    }
  }
  cVar8 = FUN_00350224();
                    /* try { // try from 0036409c to 0046409f has its CatchHandler @ 00364b08 */
  if (cVar8 == '\0') {
    if ((DAT_00532988 != (code *)0x0) ||
       (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 != (code *)0x0)) {
      (*DAT_00532988)(lVar15);
    }
  }
  else {
                    /* try { // try from 003640a4 to 00464123 has its CatchHandler @ 00363e50 */
    if (((DAT_00532988 == (code *)0x0) &&
        (DAT_00532988 = (code *)FUN_0034d2bc("clFinish"), DAT_00532988 == (code *)0x0)) ||
       (iVar10 = (*DAT_00532988)(lVar15), iVar10 != 0)) {
      local_10 = 0;
      local_8 = 0;
      puVar12 = (undefined8 *)String::allocate((String *)&local_10,0x11);
      uVar2 = DAT_0046efe8;
      uVar13 = _LAB_0046efe0;
      *(undefined1 *)(puVar12 + 2) = DAT_0046eff0;
      *puVar12 = uVar13;
      puVar12[1] = uVar2;
      error(-0xd7,(String *)&local_10,"bool cv::ocl::Kernel::runTask(bool, const cv::ocl::Queue&)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd57);
      String::deallocate((String *)&local_10);
    }
  }
  lVar15 = *(long *)this;
  plVar17 = (long *)(lVar15 + 0x18);
  do {
    if (*plVar17 != 0) {
      piVar11 = (int *)(*plVar17 + 0x10);
      do {
        iVar10 = *piVar11;
        cVar8 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar1) {
          *piVar11 = iVar10 + -1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
      if (iVar10 == 1) {
        plVar14 = *(long **)(*plVar17 + 8);
        (**(code **)(*plVar14 + 0x20))(plVar14,*plVar17);
      }
      *plVar17 = 0;
    }
    plVar17 = plVar17 + 1;
  } while (plVar17 != (long *)(lVar15 + 0x98));
  *(undefined4 *)(lVar15 + 0x98) = 0;
  *(undefined1 *)(lVar15 + 0xb0) = 0;
LAB_00364184:
  return iVar9 == 0;
}


==================================================================

### FUNC 003643a4 (1580 bytes) name=run

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::ocl::Kernel::run(int, unsigned long*, unsigned long*, bool, cv::ocl::Queue const&) */

bool __thiscall
cv::ocl::Kernel::run
          (Kernel *this,int param_1,ulong *param_2,ulong *param_3,bool param_4,Queue *param_5)

{
  ulong uVar1;
  ulong uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 uVar8;
  undefined2 uVar9;
  char cVar10;
  int iVar11;
  int iVar12;
  undefined4 *puVar13;
  int *piVar14;
  Queue *this_00;
  undefined8 *puVar15;
  undefined8 uVar16;
  long lVar17;
  long *plVar18;
  long lVar19;
  long lVar20;
  long *plVar21;
  ulong uVar22;
  ulong *puVar23;
  bool bVar24;
  ulong *local_210;
  ulong *local_208;
  undefined1 auStack_200 [256];
  ulong local_100 [32];
  
  lVar19 = *(long *)this;
  if (lVar19 == 0) {
    return false;
  }
  if (*(long *)(lVar19 + 8) == 0) {
    return false;
  }
  if (*(long *)(lVar19 + 0x10) != 0) {
    return false;
  }
  lVar19 = Queue::ptr(param_5);
  if (lVar19 == 0) {
    this_00 = (Queue *)Queue::getDefault();
    lVar19 = Queue::ptr(this_00);
  }
  memset(auStack_200,0,0x100);
  memset(local_100,0,0x100);
  local_100[0] = 1;
  local_100[1] = 1;
  local_100[2] = 1;
  if (param_2 == (ulong *)0x0) {
    local_210 = param_2;
    local_208 = param_2;
    puVar15 = (undefined8 *)String::allocate((String *)&local_210,0x10);
    uVar16 = DAT_0046f058;
    *puVar15 = _LAB_0046f050;
    puVar15[1] = uVar16;
    error(-0xd7,(String *)&local_210,
          "bool cv::ocl::Kernel::run(int, size_t*, size_t*, bool, const cv::ocl::Queue&)",
          "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd2a);
                    /* try { // try from 00364818 to 0046481b has its CatchHandler @ 00364acc */
    String::deallocate((String *)&local_210);
  }
  if (0 < param_1) {
    if (param_3 == (ulong *)0x0) {
      if (param_1 == 1) {
        uVar22 = *param_2;
        local_100[0] = uVar22 + 0x3f & 0xffffffffffffffc0;
      }
      else {
                    /* try { // try from 0036474c to 004647db has its CatchHandler @ 00363e50 */
        if (param_1 == 3) {
                    /* try { // try from 00364918 to 0046491b has its CatchHandler @ 00364b88 */
          uVar22 = 1;
          lVar20 = 0;
                    /* try { // try from 00364920 to 0046493f has its CatchHandler @ 00363e50 */
          do {
            uVar1 = 4;
            if ((int)lVar20 < 1) {
              uVar1 = 8;
            }
            uVar22 = uVar22 * param_2[lVar20];
            uVar2 = 0;
            if (uVar1 != 0) {
              uVar2 = ((uVar1 - 1) + param_2[lVar20]) / uVar1;
            }
            local_100[lVar20] = uVar2 * uVar1;
            lVar20 = lVar20 + 1;
          } while (lVar20 != 3);
        }
        else if (param_1 == 2) {
                    /* try { // try from 00364988 to 004649c7 has its CatchHandler @ 00363e50 */
          uVar22 = 1;
          lVar20 = 0;
          while( true ) {
            uVar1 = 0x100;
            if ((int)lVar20 != 0) {
              uVar1 = 8;
            }
            uVar22 = uVar22 * param_2[lVar20];
            uVar2 = 0;
            if (uVar1 != 0) {
              uVar2 = ((uVar1 - 1) + param_2[lVar20]) / uVar1;
            }
            local_100[lVar20] = uVar2 * uVar1;
            if (lVar20 == 1) break;
            lVar20 = 1;
          }
        }
        else {
          uVar22 = 1;
          lVar20 = 0;
          do {
            lVar17 = *(long *)((long)param_2 + lVar20);
            *(long *)((long)local_100 + lVar20) = lVar17;
            lVar20 = lVar20 + 8;
            uVar22 = uVar22 * lVar17;
          } while (lVar20 != ((ulong)(param_1 - 1) + 1) * 8);
        }
      }
    }
    else {
      lVar20 = 0;
      uVar22 = 1;
      do {
        puVar23 = *(ulong **)((long)param_3 + lVar20);
        if (puVar23 == (ulong *)0x0) {
          local_210 = puVar23;
          local_208 = puVar23;
                    /* try { // try from 0036451c to 0046451f has its CatchHandler @ 00364b38 */
          puVar13 = (undefined4 *)String::allocate((String *)&local_210,7);
          uVar8 = DAT_0046f06e;
          uVar9 = DAT_0046f06c;
                    /* try { // try from 00364528 to 0046454b has its CatchHandler @ 00363e50 */
          *puVar13 = DAT_0046f068;
          *(undefined2 *)(puVar13 + 1) = uVar9;
          *(undefined1 *)((long)puVar13 + 6) = uVar8;
          error(-0xd7,(String *)&local_210,
                "bool cv::ocl::Kernel::run(int, size_t*, size_t*, bool, const cv::ocl::Queue&)",
                "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd2f);
          String::deallocate((String *)&local_210);
        }
        uVar22 = uVar22 * *(long *)((long)param_2 + lVar20);
        uVar1 = 0;
        if (puVar23 != (ulong *)0x0) {
          uVar1 = (ulong)(*(long *)((long)param_2 + lVar20) + -1 + (long)puVar23) / (ulong)puVar23;
        }
        *(ulong *)((long)local_100 + lVar20) = uVar1 * (long)puVar23;
        lVar20 = lVar20 + 8;
      } while (lVar20 != ((ulong)(param_1 - 1) + 1) * 8);
    }
    if (uVar22 == 0) {
      return true;
    }
  }
  lVar20 = *(long *)this;
  if (*(char *)(lVar20 + 0xb0) == '\0') {
    uVar16 = *(undefined8 *)(lVar20 + 8);
    if (param_4) goto LAB_0036458c;
    lVar20 = lVar20 + 0x10;
    bVar24 = false;
    if (DAT_00532030 == (code *)0x0) goto LAB_003647a8;
LAB_00364648:
    iVar11 = (*DAT_00532030)(lVar19,uVar16,param_1,auStack_200,local_100,param_3,0,0,lVar20);
                    /* try { // try from 00364670 to 00464673 has its CatchHandler @ 00364b74 */
    if ((iVar11 == 0) && (!bVar24)) {
      piVar14 = *(int **)this;
      do {
        cVar10 = '\x01';
        bVar24 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar24) {
          *piVar14 = *piVar14 + 1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
      cVar10 = FUN_00350224();
                    /* try { // try from 003646a0 to 004646a3 has its CatchHandler @ 00363e50 */
      if (cVar10 == '\0') {
        lVar19 = *(long *)this;
        uVar16 = *(undefined8 *)(lVar19 + 0x10);
        if ((DAT_00532088 == (code *)0x0) &&
           (DAT_00532088 = (code *)FUN_0034d2bc("clSetEventCallback"), DAT_00532088 == (code *)0x0))
        {
          iVar11 = 0;
                    /* try { // try from 00364980 to 00464983 has its CatchHandler @ 00364b9c */
        }
        else {
          iVar11 = 0;
          (*DAT_00532088)(uVar16,0,FUN_00355f54,lVar19);
                    /* try { // try from 00364740 to 00464743 has its CatchHandler @ 00364b4c */
        }
      }
      else {
        lVar19 = *(long *)this;
        uVar16 = *(undefined8 *)(lVar19 + 0x10);
                    /* try { // try from 00364820 to 0046484f has its CatchHandler @ 00363e50 */
        if ((DAT_00532088 != (code *)0x0) ||
           (DAT_00532088 = (code *)FUN_0034d2bc("clSetEventCallback"), DAT_00532088 != (code *)0x0))
        {
          iVar12 = (*DAT_00532088)(uVar16,0,FUN_00355f54,lVar19);
          iVar11 = 0;
          if (iVar12 == 0) goto LAB_003646d8;
        }
        local_210 = (ulong *)0x0;
        local_208 = (ulong *)0x0;
        puVar15 = (undefined8 *)String::allocate((String *)&local_210,0x39);
        uVar8 = LAB_0046f048;
        uVar7 = DAT_0046f038;
        uVar6 = DAT_0046f030;
        uVar5 = DAT_0046f028;
        uVar4 = DAT_0046f020;
        uVar3 = DAT_0046f018;
        uVar16 = DAT_0046f010;
        puVar15[6] = DAT_0046f040;
        *(undefined1 *)(puVar15 + 7) = uVar8;
        *puVar15 = uVar16;
        puVar15[1] = uVar3;
        puVar15[2] = uVar4;
        puVar15[3] = uVar5;
                    /* try { // try from 003648a0 to 004648a3 has its CatchHandler @ 00364a1c */
        puVar15[4] = uVar6;
        puVar15[5] = uVar7;
        error(-0xd7,(String *)&local_210,
              "bool cv::ocl::Kernel::run(int, size_t*, size_t*, bool, const cv::ocl::Queue&)",
              "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd49);
                    /* try { // try from 003648a8 to 004648c7 has its CatchHandler @ 00363e50 */
        iVar11 = 0;
        String::deallocate((String *)&local_210);
      }
      goto LAB_003646d8;
    }
  }
  else {
                    /* try { // try from 00364588 to 0046458b has its CatchHandler @ 00364af4 */
    uVar16 = *(undefined8 *)(lVar20 + 8);
LAB_0036458c:
                    /* try { // try from 00364590 to 004645c3 has its CatchHandler @ 00363e50 */
    if (DAT_00532030 == (code *)0x0) {
      bVar24 = true;
      lVar20 = 0;
LAB_003647a8:
      DAT_00532030 = (code *)FUN_0034d2bc("clEnqueueNDRangeKernel");
      if (DAT_00532030 != (code *)0x0) goto LAB_00364648;
      iVar11 = -1000;
    }
    else {
      iVar11 = (*DAT_00532030)(lVar19,uVar16,param_1,auStack_200,local_100,param_3,0,0,0);
    }
  }
  cVar10 = FUN_00350224();
  if (cVar10 == '\0') {
    FUN_0034d4d8(lVar19);
  }
  else {
    iVar12 = FUN_0034d4d8(lVar19);
    if (iVar12 != 0) {
      local_210 = (ulong *)0x0;
      local_208 = (ulong *)0x0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_210,0x11);
      uVar3 = DAT_0046efe8;
      uVar16 = _LAB_0046efe0;
      *(undefined1 *)(puVar15 + 2) = DAT_0046eff0;
      *puVar15 = uVar16;
      puVar15[1] = uVar3;
      error(-0xd7,(String *)&local_210,
            "bool cv::ocl::Kernel::run(int, size_t*, size_t*, bool, const cv::ocl::Queue&)",
            "/builds/master_pack-android/opencv/modules/core/src/ocl.cpp",0xd43);
      String::deallocate((String *)&local_210);
    }
  }
  lVar19 = *(long *)this;
  plVar21 = (long *)(lVar19 + 0x18);
  do {
    if (*plVar21 != 0) {
      piVar14 = (int *)(*plVar21 + 0x10);
      do {
        iVar12 = *piVar14;
                    /* try { // try from 003645fc to 004645ff has its CatchHandler @ 00364a30 */
        cVar10 = '\x01';
        bVar24 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar24) {
          *piVar14 = iVar12 + -1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
                    /* try { // try from 00364604 to 00464637 has its CatchHandler @ 00363e50 */
      if (iVar12 == 1) {
                    /* try { // try from 003646e4 to 004646e7 has its CatchHandler @ 00364b60 */
        plVar18 = *(long **)(*plVar21 + 8);
        (**(code **)(*plVar18 + 0x20))(plVar18,*plVar21);
                    /* try { // try from 00364700 to 00464703 has its CatchHandler @ 00363e50 */
      }
      *plVar21 = 0;
    }
    plVar21 = plVar21 + 1;
  } while (plVar21 != (long *)(lVar19 + 0x98));
  *(undefined4 *)(lVar19 + 0x98) = 0;
  *(undefined1 *)(lVar19 + 0xb0) = 0;
LAB_003646d8:
  return iVar11 == 0;
}


==================================================================

### FUNC 00364a20 (32 bytes) name=FUN_00364a20

void FUN_00364a20(long *param_1)

{
                    /* try { // try from 00364a2c to 00464a2f has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 003645fc with catch @ 00364a30 */
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00364a40 (144 bytes) name=setGlDevice

/* cv::cuda::setGlDevice(int) */

void cv::cuda::setGlDevice(int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00364a40 to 00464a43 has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 00364164 with catch @ 00364a44 */
                    /* try { // try from 00364a54 to 00464a7b has its CatchHandler @ 00363e50 */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
                    /* try { // try from 00364ac4 to 00464ac7 has its CatchHandler @ 00364ae0 */
                    /* catch() { ... } // from try @ 00364818 with catch @ 00364acc */
  return;
}


==================================================================

### FUNC 00364ae4 (168 bytes) name=Buffer

/* cv::ogl::Buffer::Buffer() */

void __thiscall cv::ogl::Buffer::Buffer(Buffer *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00364af0 to 00464af3 has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 00364588 with catch @ 00364af4 */
  local_10 = 0;
                    /* try { // try from 00364b04 to 00464b07 has its CatchHandler @ 00363e50 */
  local_8 = 0;
                    /* catch() { ... } // from try @ 0036409c with catch @ 00364b08 */
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
                    /* try { // try from 00364b18 to 00464b1b has its CatchHandler @ 00363e50 */
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* catch() { ... } // from try @ 00363fac with catch @ 00364b24 */
                    /* try { // try from 00364b34 to 00464b37 has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 0036451c with catch @ 00364b38 */
                    /* try { // try from 00364b48 to 00464b4b has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 00364740 with catch @ 00364b4c */
                    /* try { // try from 00364b5c to 00464b5f has its CatchHandler @ 00363e50 */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
                    /* catch() { ... } // from try @ 003646e4 with catch @ 00364b60 */
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
                    /* try { // try from 00364b70 to 00464b73 has its CatchHandler @ 00363e50 */
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* catch() { ... } // from try @ 00364670 with catch @ 00364b74 */
  String::deallocate((String *)&local_10);
                    /* try { // try from 00364b84 to 00464b87 has its CatchHandler @ 00363e50 */
                    /* catch() { ... } // from try @ 00364918 with catch @ 00364b88 */
  return;
}


==================================================================

### FUNC 00364bd4 (168 bytes) name=Buffer

/* cv::ogl::Buffer::Buffer(int, int, int, unsigned int, bool) */

void __thiscall
cv::ogl::Buffer::Buffer(Buffer *this,int param_1,int param_2,int param_3,uint param_4,bool param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
                    /* try { // try from 00364c50 to 00464c53 has its CatchHandler @ 00364bcc */
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00364cc4 (168 bytes) name=Buffer

/* cv::ogl::Buffer::Buffer(cv::Size_<int>, int, unsigned int, bool) */

void __thiscall cv::ogl::Buffer::Buffer(Buffer *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00364d28 to 00464d2b has its CatchHandler @ 00365de4 */
                    /* try { // try from 00364d30 to 00464d8b has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00364db4 (168 bytes) name=Buffer

/* cv::ogl::Buffer::Buffer(cv::_InputArray const&, cv::ogl::Buffer::Target, bool) */

void __thiscall cv::ogl::Buffer::Buffer(Buffer *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00364dcc to 00464dcf has its CatchHandler @ 00365d44 */
  local_10 = 0;
                    /* try { // try from 00364dd4 to 00464fbb has its CatchHandler @ 00364bcc */
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00364ea4 (144 bytes) name=create

/* cv::ogl::Buffer::create(int, int, int, cv::ogl::Buffer::Target, bool) */

void cv::ogl::Buffer::create(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00364f48 (4 bytes) name=release

/* cv::ogl::Buffer::release() */

void cv::ogl::Buffer::release(void)

{
  return;
}


==================================================================

### FUNC 00364f4c (144 bytes) name=setAutoRelease

/* cv::ogl::Buffer::setAutoRelease(bool) */

void cv::ogl::Buffer::setAutoRelease(bool param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00364ff0 (144 bytes) name=copyFrom

/* cv::ogl::Buffer::copyFrom(cv::_InputArray const&, cv::ogl::Buffer::Target, bool) */

void cv::ogl::Buffer::copyFrom(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00364ff4 to 00464ff7 has its CatchHandler @ 00365ee0 */
                    /* try { // try from 00364ffc to 00465033 has its CatchHandler @ 00364bcc */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365094 (144 bytes) name=copyFrom

/* cv::ogl::Buffer::copyFrom(cv::_InputArray const&, cv::cuda::Stream&, cv::ogl::Buffer::Target,
   bool) */

void cv::ogl::Buffer::copyFrom(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365138 (144 bytes) name=copyTo

/* cv::ogl::Buffer::copyTo(cv::_OutputArray const&) const */

void cv::ogl::Buffer::copyTo(_OutputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365170 to 00465173 has its CatchHandler @ 00365e40 */
                    /* try { // try from 00365178 to 004651c7 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003651dc (144 bytes) name=copyTo

/* cv::ogl::Buffer::copyTo(cv::_OutputArray const&, cv::cuda::Stream&) const */

void cv::ogl::Buffer::copyTo(_OutputArray *param_1,Stream *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 0036520c to 0046520f has its CatchHandler @ 00365ef4 */
                    /* try { // try from 00365214 to 0046524b has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365280 (160 bytes) name=clone

/* cv::ogl::Buffer::clone(cv::ogl::Buffer::Target, bool) const */

Buffer * cv::ogl::Buffer::clone(Buffer *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365294 to 00465297 has its CatchHandler @ 00365e54 */
                    /* try { // try from 0036529c to 0046533f has its CatchHandler @ 00364bcc */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  Buffer(param_1);
  return param_1;
}


==================================================================

### FUNC 00365334 (144 bytes) name=bind

/* cv::ogl::Buffer::bind(cv::ogl::Buffer::Target) const */

void cv::ogl::Buffer::bind(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 0036536c to 0046536f has its CatchHandler @ 00365d58 */
                    /* try { // try from 00365374 to 004653bb has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003653d8 (144 bytes) name=unbind

/* cv::ogl::Buffer::unbind(cv::ogl::Buffer::Target) */

void cv::ogl::Buffer::unbind(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 0036540c to 0046540f has its CatchHandler @ 00365e2c */
                    /* try { // try from 00365414 to 004654eb has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 0036547c (220 bytes) name=mapHost

/* cv::ogl::Buffer::mapHost(cv::ogl::Buffer::Access) */

undefined4 * cv::ogl::Buffer::mapHost(undefined4 *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  param_1[1] = 0;
  param_1[2] = 0;
  *(undefined4 **)(param_1 + 0x12) = param_1 + 0x14;
  *param_1 = 0x42ff0000;
  param_1[3] = 0;
  *(undefined8 *)(param_1 + 4) = 0;
  *(undefined8 *)(param_1 + 6) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  *(undefined8 *)(param_1 + 10) = 0;
  *(undefined8 *)(param_1 + 0xc) = 0;
                    /* try { // try from 00365538 to 0046553b has its CatchHandler @ 00365dd0 */
  *(undefined8 *)(param_1 + 0xe) = 0;
  *(undefined4 **)(param_1 + 0x10) = param_1 + 2;
                    /* try { // try from 00365540 to 0046558b has its CatchHandler @ 00364bcc */
  *(undefined8 *)(param_1 + 0x16) = 0;
  *(undefined8 *)(param_1 + 0x14) = 0;
  return param_1;
}


==================================================================

### FUNC 0036556c (144 bytes) name=unmapHost

/* cv::ogl::Buffer::unmapHost() */

void cv::ogl::Buffer::unmapHost(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
                    /* try { // try from 003655d4 to 004655d7 has its CatchHandler @ 00365d80 */
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
                    /* try { // try from 003655dc to 00465667 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365610 (192 bytes) name=mapDevice

/* cv::ogl::Buffer::mapDevice() */

void __thiscall cv::ogl::Buffer::mapDevice(Buffer *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char *pcVar6;
  undefined8 uVar7;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar5 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar7 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar4;
  *(undefined2 *)(pcVar6 + 0x2c) = uVar5;
  *(undefined8 *)pcVar6 = uVar7;
  *(undefined8 *)(pcVar6 + 8) = uVar1;
  *(undefined8 *)(pcVar6 + 0x10) = uVar2;
  *(undefined8 *)(pcVar6 + 0x18) = uVar3;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* try { // try from 00365690 to 00465693 has its CatchHandler @ 00365e0c */
  String::deallocate((String *)&local_10);
  uVar7 = cuda::GpuMat::defaultAllocator();
                    /* try { // try from 00365698 to 004656bb has its CatchHandler @ 00364bcc */
  *in_x8 = 0;
  *(undefined8 *)(in_x8 + 0xe) = uVar7;
  in_x8[1] = 0;
  in_x8[2] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  return;
}


==================================================================

### FUNC 003656e4 (144 bytes) name=unmapDevice

/* cv::ogl::Buffer::unmapDevice() */

void cv::ogl::Buffer::unmapDevice(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365708 to 0046570b has its CatchHandler @ 00365df8 */
                    /* try { // try from 00365710 to 00465747 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365788 (192 bytes) name=mapDevice

/* cv::ogl::Buffer::mapDevice(cv::cuda::Stream&) */

void cv::ogl::Buffer::mapDevice(Stream *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char *pcVar6;
  undefined8 uVar7;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365788 to 0046578b has its CatchHandler @ 00365d30 */
                    /* try { // try from 00365790 to 004657cb has its CatchHandler @ 00364bcc */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar5 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar7 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar4;
  *(undefined2 *)(pcVar6 + 0x2c) = uVar5;
  *(undefined8 *)pcVar6 = uVar7;
  *(undefined8 *)(pcVar6 + 8) = uVar1;
  *(undefined8 *)(pcVar6 + 0x10) = uVar2;
  *(undefined8 *)(pcVar6 + 0x18) = uVar3;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  uVar7 = cuda::GpuMat::defaultAllocator();
  *in_x8 = 0;
  *(undefined8 *)(in_x8 + 0xe) = uVar7;
                    /* try { // try from 0036581c to 0046581f has its CatchHandler @ 00365e68 */
  in_x8[1] = 0;
  in_x8[2] = 0;
                    /* try { // try from 00365824 to 0046586b has its CatchHandler @ 00364bcc */
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  return;
}


==================================================================

### FUNC 0036585c (144 bytes) name=unmapDevice

/* cv::ogl::Buffer::unmapDevice(cv::cuda::Stream&) */

void cv::ogl::Buffer::unmapDevice(Stream *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365898 to 0046589b has its CatchHandler @ 00365e7c */
                    /* try { // try from 003658a0 to 00465913 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365900 (148 bytes) name=bufId

/* cv::ogl::Buffer::bufId() const */

undefined8 cv::ogl::Buffer::bufId(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 0036594c to 0046594f has its CatchHandler @ 00365d94 */
                    /* try { // try from 00365954 to 004659cb has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return 0;
}


==================================================================

### FUNC 003659a8 (168 bytes) name=Texture2D

/* cv::ogl::Texture2D::Texture2D() */

void __thiscall cv::ogl::Texture2D::Texture2D(Texture2D *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365a14 to 00465a17 has its CatchHandler @ 00365ecc */
                    /* try { // try from 00365a1c to 00465a47 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365a98 (168 bytes) name=Texture2D

/* cv::ogl::Texture2D::Texture2D(int, int, cv::ogl::Texture2D::Format, unsigned int, bool) */

void __thiscall cv::ogl::Texture2D::Texture2D(Texture2D *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365b08 to 00465b0b has its CatchHandler @ 00365ea4 */
                    /* try { // try from 00365b10 to 00465b37 has its CatchHandler @ 00364bcc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365b88 (168 bytes) name=Texture2D

/* cv::ogl::Texture2D::Texture2D(cv::Size_<int>, cv::ogl::Texture2D::Format, unsigned int, bool) */

void __thiscall cv::ogl::Texture2D::Texture2D(Texture2D *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365c78 (168 bytes) name=Texture2D

/* cv::ogl::Texture2D::Texture2D(cv::_InputArray const&, bool) */

void __thiscall cv::ogl::Texture2D::Texture2D(Texture2D *this,_InputArray *param_1,bool param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
                    /* try { // try from 00365c9c to 00465c9f has its CatchHandler @ 00365d6c */
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
                    /* try { // try from 00365ca4 to 00465cc7 has its CatchHandler @ 00364bcc */
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x14) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* try { // try from 00365d08 to 00465d0b has its CatchHandler @ 00365dbc */
  String::deallocate((String *)&local_10);
                    /* try { // try from 00365d10 to 00465d13 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365084 with catch @ 00365d1c */
  return;
}


==================================================================

### FUNC 00365d68 (144 bytes) name=create

/* cv::ogl::Texture2D::create(int, int, cv::ogl::Texture2D::Format, bool) */

void cv::ogl::Texture2D::create(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365d68 to 00465d6b has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365c9c with catch @ 00365d6c */
                    /* try { // try from 00365d7c to 00465d7f has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 003655d4 with catch @ 00365d80 */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365d90 to 00465d93 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 0036594c with catch @ 00365d94 */
                    /* try { // try from 00365da4 to 00465da7 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00364c90 with catch @ 00365da8 */
                    /* try { // try from 00365db8 to 00465dbb has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365d08 with catch @ 00365dbc */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
                    /* try { // try from 00365dcc to 00465dcf has its CatchHandler @ 00364bcc */
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
                    /* catch() { ... } // from try @ 00365538 with catch @ 00365dd0 */
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* try { // try from 00365de0 to 00465de3 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00364d28 with catch @ 00365de4 */
  String::deallocate((String *)&local_10);
                    /* try { // try from 00365df4 to 00465df7 has its CatchHandler @ 00364bcc */
  return;
}


==================================================================

### FUNC 00365e0c (4 bytes) name=release

/* cv::ogl::Texture2D::release() */

void cv::ogl::Texture2D::release(void)

{
                    /* catch() { ... } // from try @ 00365690 with catch @ 00365e0c */
  return;
}


==================================================================

### FUNC 00365e10 (144 bytes) name=setAutoRelease

/* cv::ogl::Texture2D::setAutoRelease(bool) */

void cv::ogl::Texture2D::setAutoRelease(bool param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365e1c to 00465e1f has its CatchHandler @ 00364bcc */
  local_10 = 0;
                    /* catch() { ... } // from try @ 0036540c with catch @ 00365e2c */
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365e3c to 00465e3f has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365170 with catch @ 00365e40 */
                    /* try { // try from 00365e50 to 00465e53 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365294 with catch @ 00365e54 */
                    /* try { // try from 00365e64 to 00465e67 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 0036581c with catch @ 00365e68 */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
                    /* try { // try from 00365e78 to 00465e7b has its CatchHandler @ 00364bcc */
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
                    /* catch() { ... } // from try @ 00365898 with catch @ 00365e7c */
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* try { // try from 00365e8c to 00465e8f has its CatchHandler @ 00364bcc */
  String::deallocate((String *)&local_10);
                    /* catch() { ... } // from try @ 00365b74 with catch @ 00365e90 */
  return;
}


==================================================================

### FUNC 00365eb4 (144 bytes) name=copyFrom

/* cv::ogl::Texture2D::copyFrom(cv::_InputArray const&, bool) */

void cv::ogl::Texture2D::copyFrom(_InputArray *param_1,bool param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365eb4 to 00465eb7 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365a80 with catch @ 00365eb8 */
                    /* try { // try from 00365ec8 to 00465ecb has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365a14 with catch @ 00365ecc */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00365edc to 00465edf has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00364ff4 with catch @ 00365ee0 */
                    /* try { // try from 00365ef0 to 00465ef3 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 0036520c with catch @ 00365ef4 */
                    /* try { // try from 00365f04 to 00465f07 has its CatchHandler @ 00364bcc */
                    /* catch() { ... } // from try @ 00365f5c with catch @ 00365f08
                       catch() { ... } // from try @ 00366074 with catch @ 00365f08
                       catch() { ... } // from try @ 00366128 with catch @ 00365f08
                       catch() { ... } // from try @ 0036619c with catch @ 00365f08
                       catch() { ... } // from try @ 003661fc with catch @ 00365f08
                       catch() { ... } // from try @ 0036626c with catch @ 00365f08
                       catch() { ... } // from try @ 003662d4 with catch @ 00365f08
                       catch() { ... } // from try @ 0036634c with catch @ 00365f08
                       catch() { ... } // from try @ 00366364 with catch @ 00365f08
                       catch() { ... } // from try @ 00366378 with catch @ 00365f08
                       catch() { ... } // from try @ 0036638c with catch @ 00365f08
                       catch() { ... } // from try @ 003663a0 with catch @ 00365f08
                       catch() { ... } // from try @ 003663b4 with catch @ 00365f08
                       catch() { ... } // from try @ 003663c8 with catch @ 00365f08
                       catch() { ... } // from try @ 003663dc with catch @ 00365f08 */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365f58 (144 bytes) name=copyTo

/* cv::ogl::Texture2D::copyTo(cv::_OutputArray const&, int, bool) const */

void cv::ogl::Texture2D::copyTo(_OutputArray *param_1,int param_2,bool param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00365f5c to 00466013 has its CatchHandler @ 00365f08 */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00365ffc (144 bytes) name=bind

/* cv::ogl::Texture2D::bind() const */

void cv::ogl::Texture2D::bind(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
                    /* try { // try from 0036606c to 0046606f has its CatchHandler @ 00366368 */
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
                    /* try { // try from 00366074 to 004660f3 has its CatchHandler @ 00365f08 */
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003660a0 (148 bytes) name=texId

/* cv::ogl::Texture2D::texId() const */

undefined8 cv::ogl::Texture2D::texId(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
                    /* try { // try from 00366120 to 00466123 has its CatchHandler @ 00366354 */
                    /* try { // try from 00366128 to 00466177 has its CatchHandler @ 00365f08 */
  return 0;
}


==================================================================

### FUNC 00366148 (576 bytes) name=setVertexArray

/* cv::ogl::Arrays::setVertexArray(cv::_InputArray const&) */

void __thiscall cv::ogl::Arrays::setVertexArray(Arrays *this,_InputArray *param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  int iVar15;
  char *pcVar16;
  long *plVar17;
  long *local_20;
  undefined8 local_18;
  int local_10;
  int local_c;
  undefined4 local_8;
  
  iVar14 = _InputArray::channels(param_1,-1);
  iVar15 = _InputArray::depth(param_1,-1);
  if (2 < iVar14 - 2U) {
    local_20 = (long *)0x0;
                    /* try { // try from 00366264 to 00466267 has its CatchHandler @ 003663b8 */
    local_18 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_20,0x1d);
    cVar2 = s_cn____2____cn____3____cn____4_0046f900[0x1c];
    uVar7 = s_cn____2____cn____3____cn____4_0046f900._24_4_;
    uVar6 = s_cn____2____cn____3____cn____4_0046f900._8_8_;
    uVar5 = s_cn____2____cn____3____cn____4_0046f900._0_8_;
                    /* try { // try from 0036626c to 0046628b has its CatchHandler @ 00365f08 */
    *(undefined8 *)(pcVar16 + 0x10) = s_cn____2____cn____3____cn____4_0046f900._16_8_;
    *(undefined4 *)(pcVar16 + 0x18) = uVar7;
    pcVar16[0x1c] = cVar2;
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setVertexArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x4db);
    String::deallocate((String *)&local_20);
  }
                    /* try { // try from 00366194 to 00466197 has its CatchHandler @ 003663cc */
  if (3 < iVar15 - 3U) {
                    /* try { // try from 0036619c to 004661bb has its CatchHandler @ 00365f08 */
    local_20 = (long *)0x0;
    local_18 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_20,0x48);
    uVar13 = s_depth____CV_16S____depth____CV_3_0046f920._56_8_;
    uVar12 = s_depth____CV_16S____depth____CV_3_0046f920._48_8_;
    uVar11 = s_depth____CV_16S____depth____CV_3_0046f920._40_8_;
    uVar10 = s_depth____CV_16S____depth____CV_3_0046f920._32_8_;
    uVar9 = s_depth____CV_16S____depth____CV_3_0046f920._24_8_;
    uVar8 = s_depth____CV_16S____depth____CV_3_0046f920._16_8_;
    uVar6 = s_depth____CV_16S____depth____CV_3_0046f920._8_8_;
    uVar5 = s_depth____CV_16S____depth____CV_3_0046f920._0_8_;
    *(undefined8 *)(pcVar16 + 0x40) = s_depth____CV_16S____depth____CV_3_0046f920._64_8_;
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
                    /* try { // try from 003661f4 to 004661f7 has its CatchHandler @ 0036637c */
    *(undefined8 *)(pcVar16 + 0x10) = uVar8;
    *(undefined8 *)(pcVar16 + 0x18) = uVar9;
    *(undefined8 *)(pcVar16 + 0x20) = uVar10;
    *(undefined8 *)(pcVar16 + 0x28) = uVar11;
                    /* try { // try from 003661fc to 00466247 has its CatchHandler @ 00365f08 */
    *(undefined8 *)(pcVar16 + 0x30) = uVar12;
    *(undefined8 *)(pcVar16 + 0x38) = uVar13;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setVertexArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x4dc);
    String::deallocate((String *)&local_20);
  }
  iVar14 = _InputArray::kind(param_1);
  if (iVar14 == 0x70000) {
                    /* try { // try from 003662cc to 004662cf has its CatchHandler @ 003663a4 */
    _InputArray::getOGlBuffer();
                    /* try { // try from 003662d4 to 004662f3 has its CatchHandler @ 00365f08 */
    if (local_20 != (long *)0x0) {
      plVar1 = local_20 + 1;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    plVar17 = *(long **)(this + 8);
    *(undefined8 *)(this + 0x10) = local_18;
    *(long **)(this + 8) = local_20;
    plVar1 = plVar17 + 1;
    if (plVar17 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
                    /* try { // try from 00366378 to 0046637b has its CatchHandler @ 00365f08 */
                    /* catch() { ... } // from try @ 003661f4 with catch @ 0036637c */
        (**(code **)(*plVar17 + 0x10))();
      }
    }
    *(int *)(this + 0x18) = local_10;
    *(int *)(this + 0x1c) = local_c;
    *(undefined4 *)(this + 0x20) = local_8;
    if (local_20 == (long *)0x0) goto LAB_00366238;
    plVar1 = local_20 + 1;
    do {
      lVar4 = *plVar1;
                    /* try { // try from 00366344 to 00466347 has its CatchHandler @ 00366390 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 0036634c to 0046634f has its CatchHandler @ 00365f08 */
    } while (cVar2 != '\0');
                    /* catch() { ... } // from try @ 00366120 with catch @ 00366354 */
    if ((int)lVar4 == 1) {
      (**(code **)(*local_20 + 0x10))();
                    /* try { // try from 00366364 to 00466367 has its CatchHandler @ 00365f08 */
      local_10 = *(int *)(this + 0x18);
                    /* catch() { ... } // from try @ 0036606c with catch @ 00366368 */
      local_c = *(int *)(this + 0x1c);
      goto LAB_00366238;
    }
  }
  else {
    Buffer::copyFrom(this + 8,param_1,0x8892,0);
  }
  local_10 = *(int *)(this + 0x18);
  local_c = *(int *)(this + 0x1c);
LAB_00366238:
  *(int *)this = local_10 * local_c;
  return;
}


==================================================================

### FUNC 003663e8 (36 bytes) name=resetVertexArray

/* cv::ogl::Arrays::resetVertexArray() */

void __thiscall cv::ogl::Arrays::resetVertexArray(Arrays *this)

{
  Buffer::release();
  *(undefined4 *)this = 0;
  return;
}


==================================================================

### FUNC 0036640c (368 bytes) name=setColorArray

/* cv::ogl::Arrays::setColorArray(cv::_InputArray const&) */

void __thiscall cv::ogl::Arrays::setColorArray(Arrays *this,_InputArray *param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  int iVar7;
  char *pcVar8;
  long *plVar9;
  long *local_20;
  undefined8 local_18;
  undefined4 local_10;
  undefined4 local_c;
  undefined4 local_8;
  
  iVar7 = _InputArray::channels(param_1,-1);
  if (1 < iVar7 - 3U) {
    local_20 = (long *)0x0;
    local_18 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_20,0x12);
    uVar6 = s_cn____3____cn____4_0046f970._8_8_;
    uVar5 = s_cn____3____cn____4_0046f970._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_cn____3____cn____4_0046f970._16_2_;
    *(undefined8 *)pcVar8 = uVar5;
    *(undefined8 *)(pcVar8 + 8) = uVar6;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setColorArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x4f0);
    String::deallocate((String *)&local_20);
  }
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x70000) {
    _InputArray::getOGlBuffer();
    if (local_20 != (long *)0x0) {
      plVar1 = local_20 + 1;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
                    /* try { // try from 003664f4 to 004664f7 has its CatchHandler @ 003667c0 */
    plVar9 = *(long **)(this + 0x28);
    *(undefined8 *)(this + 0x30) = local_18;
                    /* try { // try from 003664fc to 004665d7 has its CatchHandler @ 003663e0 */
    *(long **)(this + 0x28) = local_20;
    plVar1 = plVar9 + 1;
    if (plVar9 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
        (**(code **)(*plVar9 + 0x10))();
      }
    }
    *(undefined4 *)(this + 0x38) = local_10;
    *(undefined4 *)(this + 0x3c) = local_c;
    *(undefined4 *)(this + 0x40) = local_8;
    plVar1 = local_20 + 1;
    if (local_20 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
        (**(code **)(*local_20 + 0x10))();
      }
    }
  }
  else {
    Buffer::copyFrom(this + 0x28,param_1,0x8892,0);
  }
                    /* try { // try from 003664c4 to 004664c7 has its CatchHandler @ 003663e0 */
  return;
}


==================================================================

### FUNC 003665c8 (8 bytes) name=resetColorArray

/* cv::ogl::Arrays::resetColorArray() */

void cv::ogl::Arrays::resetColorArray(void)

{
  Buffer::release();
  return;
}


==================================================================

### FUNC 003665d0 (500 bytes) name=setNormalArray

/* cv::ogl::Arrays::setNormalArray(cv::_InputArray const&) */

void __thiscall cv::ogl::Arrays::setNormalArray(Arrays *this,_InputArray *param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined2 uVar5;
  undefined1 uVar6;
  int iVar7;
  int iVar8;
  undefined4 *puVar9;
  void *__dest;
  long *plVar10;
  long *local_20;
  undefined8 local_18;
  undefined4 local_10;
  undefined4 local_c;
  undefined4 local_8;
  
  iVar7 = _InputArray::channels(param_1,-1);
  iVar8 = _InputArray::depth(param_1,-1);
  if (iVar7 != 3) {
                    /* try { // try from 00366618 to 0046661b has its CatchHandler @ 00366784 */
    local_20 = (long *)0x0;
                    /* try { // try from 00366620 to 0046664f has its CatchHandler @ 003663e0 */
    local_18 = 0;
    puVar9 = (undefined4 *)String::allocate((String *)&local_20,7);
    uVar6 = DAT_0045d4e6;
    uVar5 = DAT_0045d4e4;
    *puVar9 = DAT_0045d4e0;
    *(undefined2 *)(puVar9 + 1) = uVar5;
    *(undefined1 *)((long)puVar9 + 6) = uVar6;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setNormalArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x502);
    String::deallocate((String *)&local_20);
  }
  if ((3 < iVar8 - 3U) && (iVar8 != 1)) {
                    /* try { // try from 00366688 to 0046668b has its CatchHandler @ 00366798 */
                    /* try { // try from 00366690 to 004666af has its CatchHandler @ 003663e0 */
    local_20 = (long *)0x0;
    local_18 = 0;
    __dest = (void *)String::allocate((String *)&local_20,0x5a);
    memcpy(__dest,
           "depth == CV_8S || depth == CV_16S || depth == CV_32S || depth == CV_32F || depth == CV_64F"
           ,0x5a);
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setNormalArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x503);
    String::deallocate((String *)&local_20);
  }
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x70000) {
    _InputArray::getOGlBuffer();
    if (local_20 != (long *)0x0) {
      plVar1 = local_20 + 1;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    plVar10 = *(long **)(this + 0x48);
    *(undefined8 *)(this + 0x50) = local_18;
    *(long **)(this + 0x48) = local_20;
    plVar1 = plVar10 + 1;
    if (plVar10 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
                    /* try { // try from 00366760 to 00466763 has its CatchHandler @ 00366770 */
      if ((int)lVar4 == 1) {
                    /* try { // try from 003667bc to 004667bf has its CatchHandler @ 003663e0 */
        (**(code **)(*plVar10 + 0x10))();
                    /* catch() { ... } // from try @ 003664f4 with catch @ 003667c0 */
      }
    }
                    /* try { // try from 00366768 to 0046676b has its CatchHandler @ 003663e0 */
    *(undefined4 *)(this + 0x58) = local_10;
                    /* catch() { ... } // from try @ 00366760 with catch @ 00366770 */
    *(undefined4 *)(this + 0x5c) = local_c;
                    /* try { // try from 00366780 to 00466783 has its CatchHandler @ 003663e0 */
    *(undefined4 *)(this + 0x60) = local_8;
                    /* catch() { ... } // from try @ 00366618 with catch @ 00366784 */
    plVar1 = local_20 + 1;
    if (local_20 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
                    /* try { // try from 00366794 to 00466797 has its CatchHandler @ 003663e0 */
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
                    /* catch() { ... } // from try @ 00366688 with catch @ 00366798 */
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
                    /* try { // try from 003667a8 to 004667ab has its CatchHandler @ 003663e0 */
                    /* catch() { ... } // from try @ 003666f8 with catch @ 003667ac */
        (**(code **)(*local_20 + 0x10))();
      }
    }
  }
  else {
                    /* try { // try from 003666f8 to 004666fb has its CatchHandler @ 003667ac */
    Buffer::copyFrom(this + 0x48,param_1,0x8892,0);
  }
                    /* try { // try from 00366700 to 0046671f has its CatchHandler @ 003663e0 */
  return;
}


==================================================================

### FUNC 00366824 (8 bytes) name=resetNormalArray

/* cv::ogl::Arrays::resetNormalArray() */

void cv::ogl::Arrays::resetNormalArray(void)

{
  Buffer::release();
  return;
}


==================================================================

### FUNC 0036682c (528 bytes) name=setTexCoordArray

/* cv::ogl::Arrays::setTexCoordArray(cv::_InputArray const&) */

void __thiscall cv::ogl::Arrays::setTexCoordArray(Arrays *this,_InputArray *param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  int iVar14;
  char *pcVar15;
  long *plVar16;
  long *local_20;
  undefined8 local_18;
  undefined4 local_10;
  undefined4 local_c;
  undefined4 local_8;
  
                    /* try { // try from 00366840 to 00466843 has its CatchHandler @ 003669b0 */
                    /* try { // try from 00366848 to 00466913 has its CatchHandler @ 003667d4 */
  iVar13 = _InputArray::channels(param_1,-1);
  iVar14 = _InputArray::depth(param_1,-1);
  if (3 < iVar13 - 1U) {
                    /* try { // try from 00366930 to 00466933 has its CatchHandler @ 0036699c */
    local_20 = (long *)0x0;
                    /* try { // try from 00366938 to 0046696f has its CatchHandler @ 003667d4 */
    local_18 = 0;
    pcVar15 = (char *)String::allocate((String *)&local_20,0x12);
    uVar6 = s_cn_>__1____cn_<__4_0046f9e8._8_8_;
    uVar5 = s_cn_>__1____cn_<__4_0046f9e8._0_8_;
    *(undefined2 *)(pcVar15 + 0x10) = s_cn_>__1____cn_<__4_0046f9e8._16_2_;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setTexCoordArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x515);
    String::deallocate((String *)&local_20);
  }
  if (3 < iVar14 - 3U) {
    local_20 = (long *)0x0;
    local_18 = 0;
    pcVar15 = (char *)String::allocate((String *)&local_20,0x48);
    uVar12 = s_depth____CV_16S____depth____CV_3_0046f920._56_8_;
    uVar11 = s_depth____CV_16S____depth____CV_3_0046f920._48_8_;
    uVar10 = s_depth____CV_16S____depth____CV_3_0046f920._40_8_;
    uVar9 = s_depth____CV_16S____depth____CV_3_0046f920._32_8_;
    uVar8 = s_depth____CV_16S____depth____CV_3_0046f920._24_8_;
    uVar7 = s_depth____CV_16S____depth____CV_3_0046f920._16_8_;
    uVar6 = s_depth____CV_16S____depth____CV_3_0046f920._8_8_;
    uVar5 = s_depth____CV_16S____depth____CV_3_0046f920._0_8_;
    *(undefined8 *)(pcVar15 + 0x40) = s_depth____CV_16S____depth____CV_3_0046f920._64_8_;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
    *(undefined8 *)(pcVar15 + 0x20) = uVar9;
    *(undefined8 *)(pcVar15 + 0x28) = uVar10;
    *(undefined8 *)(pcVar15 + 0x30) = uVar11;
    *(undefined8 *)(pcVar15 + 0x38) = uVar12;
    error(-0xd7,(String *)&local_20,"void cv::ogl::Arrays::setTexCoordArray(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x516);
    String::deallocate((String *)&local_20);
  }
  iVar13 = _InputArray::kind(param_1);
  if (iVar13 == 0x70000) {
                    /* try { // try from 0036698c to 0046698f has its CatchHandler @ 003669c4 */
    _InputArray::getOGlBuffer();
                    /* try { // try from 00366994 to 00466997 has its CatchHandler @ 003667d4 */
                    /* catch() { ... } // from try @ 00366930 with catch @ 0036699c */
    if (local_20 != (long *)0x0) {
      plVar1 = local_20 + 1;
      do {
                    /* try { // try from 003669ac to 004669af has its CatchHandler @ 003667d4 */
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
                    /* catch() { ... } // from try @ 00366840 with catch @ 003669b0 */
      } while (cVar2 != '\0');
    }
    plVar16 = *(long **)(this + 0x68);
    *(undefined8 *)(this + 0x70) = local_18;
    *(long **)(this + 0x68) = local_20;
                    /* try { // try from 003669c0 to 004669c3 has its CatchHandler @ 003667d4 */
    plVar1 = plVar16 + 1;
                    /* catch() { ... } // from try @ 0036698c with catch @ 003669c4 */
    if (plVar16 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 003669d4 to 004669d7 has its CatchHandler @ 003667d4 */
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
        (**(code **)(*plVar16 + 0x10))();
      }
    }
    *(undefined4 *)(this + 0x78) = local_10;
    *(undefined4 *)(this + 0x7c) = local_c;
    *(undefined4 *)(this + 0x80) = local_8;
    plVar1 = local_20 + 1;
    if (local_20 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
        (**(code **)(*local_20 + 0x10))();
      }
    }
  }
  else {
    Buffer::copyFrom(this + 0x68,param_1,0x8892,0);
  }
  return;
}


==================================================================

### FUNC 00366a9c (8 bytes) name=resetTexCoordArray

/* cv::ogl::Arrays::resetTexCoordArray() */

void cv::ogl::Arrays::resetTexCoordArray(void)

{
  Buffer::release();
  return;
}


==================================================================

### FUNC 00366aa4 (48 bytes) name=release

/* cv::ogl::Arrays::release() */

void __thiscall cv::ogl::Arrays::release(Arrays *this)

{
  resetVertexArray(this);
  resetColorArray();
  resetNormalArray();
  resetTexCoordArray();
  return;
}


==================================================================

### FUNC 00366ad4 (80 bytes) name=setAutoRelease

/* cv::ogl::Arrays::setAutoRelease(bool) */

void cv::ogl::Arrays::setAutoRelease(bool param_1)

{
                    /* catch() { ... } // from try @ 00366b08 with catch @ 00366ad4
                       catch() { ... } // from try @ 00366b70 with catch @ 00366ad4
                       catch() { ... } // from try @ 00366b88 with catch @ 00366ad4 */
  Buffer::setAutoRelease((bool)(param_1 + '\b'));
  Buffer::setAutoRelease((bool)(param_1 + '('));
                    /* try { // try from 00366b08 to 00466b4b has its CatchHandler @ 00366ad4 */
  Buffer::setAutoRelease((bool)(param_1 + 'H'));
  Buffer::setAutoRelease((bool)(param_1 + 'h'));
  return;
}


==================================================================

### FUNC 00366b24 (144 bytes) name=bind

/* cv::ogl::Arrays::bind() const */

void cv::ogl::Arrays::bind(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00366b68 to 00466b6b has its CatchHandler @ 00366b78 */
                    /* try { // try from 00366b70 to 00466b73 has its CatchHandler @ 00366ad4 */
                    /* catch() { ... } // from try @ 00366b68 with catch @ 00366b78 */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
                    /* try { // try from 00366b88 to 00466b8b has its CatchHandler @ 00366ad4 */
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
                    /* catch() { ... } // from try @ 00366bb8 with catch @ 00366b8c
                       catch() { ... } // from try @ 00366c10 with catch @ 00366b8c
                       catch() { ... } // from try @ 00366c28 with catch @ 00366b8c */
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00366bc8 (144 bytes) name=render

/* cv::ogl::render(cv::ogl::Texture2D const&, cv::Rect_<double>, cv::Rect_<double>) */

void cv::ogl::render(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00366c08 to 00466c0b has its CatchHandler @ 00366c18 */
                    /* try { // try from 00366c10 to 00466c13 has its CatchHandler @ 00366b8c */
                    /* catch() { ... } // from try @ 00366c08 with catch @ 00366c18 */
                    /* try { // try from 00366c28 to 00466c2b has its CatchHandler @ 00366b8c */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
                    /* catch() { ... } // from try @ 00366c80 with catch @ 00366c2c
                       catch() { ... } // from try @ 00366cb8 with catch @ 00366c2c
                       catch() { ... } // from try @ 00366db0 with catch @ 00366c2c
                       catch() { ... } // from try @ 00366e38 with catch @ 00366c2c
                       catch() { ... } // from try @ 00366e4c with catch @ 00366c2c */
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00366c6c (144 bytes) name=render

/* cv::ogl::render(cv::ogl::Arrays const&, int, cv::Scalar_<double>) */

void cv::ogl::render(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00366c80 to 00466c83 has its CatchHandler @ 00366c2c */
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
                    /* try { // try from 00366cb0 to 00466cb3 has its CatchHandler @ 00366e28 */
                    /* try { // try from 00366cb8 to 00466d8b has its CatchHandler @ 00366c2c */
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00366d10 (144 bytes) name=render

/* cv::ogl::render(cv::ogl::Arrays const&, cv::_InputArray const&, int, cv::Scalar_<double>) */

void cv::ogl::render(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2e);
  uVar6 = s_The_library_is_compiled_without_O_0046f890._44_2_;
  uVar5 = s_The_library_is_compiled_without_O_0046f890._40_4_;
  uVar4 = s_The_library_is_compiled_without_O_0046f890._24_8_;
  uVar3 = s_The_library_is_compiled_without_O_0046f890._16_8_;
  uVar2 = s_The_library_is_compiled_without_O_0046f890._8_8_;
  uVar1 = s_The_library_is_compiled_without_O_0046f890._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_O_0046f890._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined2 *)(pcVar7 + 0x2c) = uVar6;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xda,(String *)&local_10,"void {anonymous}::throw_no_ogl()",
        "/builds/master_pack-android/opencv/modules/core/src/opengl.cpp",0x3a);
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00366db4 (316 bytes) name=FUN_00366db4

int FUN_00366db4(void)

{
  bool bVar1;
  char cVar2;
  bool bVar3;
  FILE *__stream;
  char *__s;
  char *pcVar4;
  int iVar5;
  int local_7d8;
  int local_7d4;
  char acStack_7d0 [2000];
  
  __stream = fopen("/sys/devices/system/cpu/possible","r");
  if (__stream != (FILE *)0x0) {
    __s = fgets(acStack_7d0,2000,__stream);
    fclose(__stream);
    if (__s != (char *)0x0) {
      iVar5 = 0;
      cVar2 = *__s;
      while (cVar2 != '\0') {
                    /* catch() { ... } // from try @ 00366cb0 with catch @ 00366e28 */
        bVar1 = false;
        pcVar4 = __s;
        if (cVar2 == ',') {
LAB_00366e8c:
          *pcVar4 = '\0';
          pcVar4 = pcVar4 + 1;
          if (bVar1) goto LAB_00366e98;
LAB_00366e58:
          iVar5 = iVar5 + 1;
        }
        else {
          do {
                    /* catch() { ... } // from try @ 00366da8 with catch @ 00366e3c */
            bVar3 = cVar2 == '-';
            pcVar4 = pcVar4 + 1;
            cVar2 = *pcVar4;
            if (bVar3) {
              bVar1 = true;
            }
                    /* try { // try from 00366e4c to 00466e4f has its CatchHandler @ 00366c2c */
          } while ((cVar2 != ',') &&
                  (cVar2 != '\0'
                    /* try { // try from 00366e38 to 00466e3b has its CatchHandler @ 00366c2c */));
                    /* catch() { ... } // from try @ 00366e80 with catch @ 00366e50
                       catch() { ... } // from try @ 00366ee0 with catch @ 00366e50
                       catch() { ... } // from try @ 00366ef8 with catch @ 00366e50 */
          if (cVar2 != '\0') goto LAB_00366e8c;
          if (!bVar1) goto LAB_00366e58;
LAB_00366e98:
          local_7d8 = 0;
          local_7d4 = 0;
          sscanf(__s,"%d-%d",&local_7d8,&local_7d4);
          iVar5 = iVar5 + (local_7d4 - local_7d8) + 1;
        }
        __s = pcVar4;
        cVar2 = *pcVar4;
      }
      if (iVar5 != 0) {
                    /* try { // try from 00366ed8 to 00466edb has its CatchHandler @ 00366ee8 */
                    /* try { // try from 00366ee0 to 00466ee3 has its CatchHandler @ 00366e50 */
                    /* catch() { ... } // from try @ 00366ed8 with catch @ 00366ee8 */
        return iVar5;
      }
    }
  }
                    /* try { // try from 00366e80 to 00466ebb has its CatchHandler @ 00366e50 */
  return 1;
}


==================================================================

### FUNC 00366ef0 (4 bytes) name=~ParallelLoopBody

/* cv::ParallelLoopBody::~ParallelLoopBody() */

void __thiscall cv::ParallelLoopBody::~ParallelLoopBody(ParallelLoopBody *this)

{
  return;
}


==================================================================

### FUNC 00366ef4 (32 bytes) name=~ParallelLoopBody

/* cv::ParallelLoopBody::~ParallelLoopBody() */

void __thiscall cv::ParallelLoopBody::~ParallelLoopBody(ParallelLoopBody *this)

{
                    /* try { // try from 00366ef8 to 00466efb has its CatchHandler @ 00366e50 */
                    /* catch() { ... } // from try @ 00366f80 with catch @ 00366efc
                       catch() { ... } // from try @ 00366fcc with catch @ 00366efc
                       catch() { ... } // from try @ 00366fe4 with catch @ 00366efc */
  ~ParallelLoopBody(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00366f14 (196 bytes) name=parallel_for_

/* cv::parallel_for_(cv::Range const&, cv::ParallelLoopBody const&, double) */

void cv::parallel_for_(Range *param_1,ParallelLoopBody *param_2,double param_3)

{
  long lVar1;
  double __x;
  double dVar2;
  
  if (DAT_005093c0 != 0) {
    __x = (double)(*(int *)(param_1 + 4) - *(int *)param_1);
    if (0.0 < param_3) {
      dVar2 = param_3;
      if (param_3 < 1.0) {
        dVar2 = 1.0;
                    /* catch() { ... } // from try @ 00366fc4 with catch @ 00366fd4 */
      }
      if ((dVar2 <= __x) && (__x = 1.0, 1.0 <= param_3)) {
        __x = param_3;
      }
    }
    lVar1 = lrint(__x);
                    /* try { // try from 00366f80 to 00466f83 has its CatchHandler @ 00366efc */
    if ((int)lVar1 != 1) {
      FUN_0036a0d4(param_3,param_1);
      return;
    }
  }
  (**(code **)(*(long *)param_2 + 0x10))(param_2,param_1);
                    /* try { // try from 00366fc4 to 00466fc7 has its CatchHandler @ 00366fd4 */
  return;
}


==================================================================

### FUNC 00366fd8 (40 bytes) name=getNumThreads

/* cv::getNumThreads() */

void cv::getNumThreads(void)

{
                    /* try { // try from 00366fe4 to 00466fe7 has its CatchHandler @ 00366efc */
                    /* catch() { ... } // from try @ 0036703c with catch @ 00366fe8
                       catch() { ... } // from try @ 00367064 with catch @ 00366fe8
                       catch() { ... } // from try @ 003670d8 with catch @ 00366fe8
                       catch() { ... } // from try @ 00367124 with catch @ 00366fe8
                       catch() { ... } // from try @ 00367138 with catch @ 00366fe8 */
  if (DAT_005093c0 != 0) {
    FUN_00368158(1);
  }
  return;
}


==================================================================

### FUNC 00367000 (12 bytes) name=setNumThreads

/* cv::setNumThreads(int) */

void cv::setNumThreads(int param_1)

{
  DAT_005093c0 = param_1;
  FUN_00368e7c();
  return;
}


==================================================================

### FUNC 0036700c (8 bytes) name=getThreadNum

/* cv::getThreadNum() */

undefined8 cv::getThreadNum(void)

{
  return 0;
}


==================================================================

### FUNC 00367014 (108 bytes) name=getNumberOfCPUs

/* cv::getNumberOfCPUs() */

undefined4 cv::getNumberOfCPUs(void)

{
  int iVar1;
  undefined4 uVar2;
  
  if (((DAT_005329e0 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_005329e0), iVar1 != 0)) {
    uVar2 = FUN_00366db4();
    DAT_005329d8 = uVar2;
                    /* try { // try from 0036705c to 0046705f has its CatchHandler @ 00367114 */
                    /* try { // try from 00367064 to 004670b3 has its CatchHandler @ 00366fe8 */
    __cxa_guard_release(&DAT_005329e0);
    return uVar2;
  }
                    /* try { // try from 0036703c to 0046703f has its CatchHandler @ 00366fe8 */
  return DAT_005329d8;
}


==================================================================

### FUNC 00367094 (12 bytes) name=currentParallelFramework

/* cv::currentParallelFramework() */

char * cv::currentParallelFramework(void)

{
  return "pthreads";
}


==================================================================

### FUNC 003670a0 (4 bytes) name=cvSetNumThreads

void cv::cvSetNumThreads(int param_1)

{
  (*(code *)PTR_setNumThreads_005012f0)(param_1);
  return;
}


==================================================================

### FUNC 003670a4 (4 bytes) name=cvGetNumThreads

void cv::cvGetNumThreads(void)

{
  (*(code *)PTR_getNumThreads_00500d88)();
  return;
}


==================================================================

### FUNC 003670a8 (4 bytes) name=cvGetThreadNum

void cv::cvGetThreadNum(void)

{
  (*(code *)PTR_getThreadNum_00500b10)();
  return;
}


==================================================================

### FUNC 003670ac (8 bytes) name=FUN_003670ac

void FUN_003670ac(undefined8 param_1,void *param_2)

{
  operator_delete(param_2);
  return;
}


==================================================================

### FUNC 003670b4 (32 bytes) name=FUN_003670b4

void FUN_003670b4(void)

{
  undefined1 *puVar1;
  
  puVar1 = operator_new(1);
  *puVar1 = 0;
                    /* try { // try from 003670d0 to 004670d3 has its CatchHandler @ 00367128 */
  return;
}


==================================================================

### FUNC 003670d4 (16 bytes) name=FUN_003670d4

void FUN_003670d4(TLSDataContainer *param_1)

{
                    /* try { // try from 003670d8 to 004670ef has its CatchHandler @ 00366fe8 */
  *(undefined ***)param_1 = &PTR_FUN_004f7630;
  cv::TLSDataContainer::~TLSDataContainer(param_1);
  return;
}


==================================================================

### FUNC 003670e4 (44 bytes) name=FUN_003670e4

void FUN_003670e4(TLSDataContainer *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7630;
  cv::TLSDataContainer::~TLSDataContainer(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00367110 (420 bytes) name=FUN_00367110

undefined8 FUN_00367110(long param_1)

{
  pthread_mutex_t *__mutex;
  uint *puVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined1 *puVar5;
  uint uVar6;
  long lVar7;
  int local_8;
  int local_4;
  
                    /* catch() { ... } // from try @ 0036705c with catch @ 00367114 */
                    /* try { // try from 00367124 to 00467127 has its CatchHandler @ 00366fe8 */
                    /* catch() { ... } // from try @ 003670d0 with catch @ 00367128 */
  __mutex = (pthread_mutex_t *)(param_1 + 8);
                    /* try { // try from 00367138 to 0046713b has its CatchHandler @ 00366fe8 */
                    /* catch() { ... } // from try @ 00367180 with catch @ 0036713c
                       catch() { ... } // from try @ 003671a8 with catch @ 0036713c
                       catch() { ... } // from try @ 003671c0 with catch @ 0036713c */
  puVar5 = (undefined1 *)
           cv::TLSDataContainer::getData((TLSDataContainer *)(*(long *)(param_1 + 0x68) + 0xa0));
  *puVar5 = 1;
  pthread_mutex_lock(__mutex);
  iVar4 = 1;
  *(undefined4 *)(param_1 + 0x70) = 1;
joined_r0x00367164:
  if (iVar4 != 1) {
LAB_00367268:
    pthread_mutex_unlock(__mutex);
    return 0;
  }
  if (*(char *)(param_1 + 0x60) == '\0') goto LAB_00367180;
  goto LAB_003671a0;
LAB_00367180:
                    /* try { // try from 00367180 to 00467183 has its CatchHandler @ 0036713c */
  while (pthread_cond_wait((pthread_cond_t *)(param_1 + 0x30),__mutex),
        *(char *)(param_1 + 0x60) == '\0') {
    if (*(int *)(param_1 + 0x70) == 2) goto LAB_00367268;
  }
  iVar4 = *(int *)(param_1 + 0x70);
  if (iVar4 == 1) {
LAB_003671a0:
                    /* try { // try from 003671a0 to 004671a3 has its CatchHandler @ 003671b0 */
    puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
    do {
                    /* try { // try from 003671a8 to 004671ab has its CatchHandler @ 0036713c */
      uVar6 = *puVar1;
                    /* catch() { ... } // from try @ 003671a0 with catch @ 003671b0 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
      if (bVar3) {
        *puVar1 = uVar6 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    lVar7 = *(long *)(param_1 + 0x68);
                    /* try { // try from 003671c0 to 004671c3 has its CatchHandler @ 0036713c */
                    /* catch() { ... } // from try @ 003671fc with catch @ 003671c4
                       catch() { ... } // from try @ 00367234 with catch @ 003671c4
                       catch() { ... } // from try @ 0036734c with catch @ 003671c4 */
    if (uVar6 < *(uint *)(lVar7 + 0x9c)) {
      do {
        iVar4 = (*(int **)(lVar7 + 0x90))[1];
        local_8 = **(int **)(lVar7 + 0x90) + uVar6 * *(int *)(lVar7 + 0x98);
        local_4 = *(int *)(lVar7 + 0x98) + local_8;
                    /* try { // try from 003671fc to 004671ff has its CatchHandler @ 003671c4 */
        if (iVar4 < local_4) {
          local_4 = iVar4;
        }
        (**(code **)(**(long **)(lVar7 + 0x88) + 0x10))(*(long **)(lVar7 + 0x88),&local_8);
        puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
        do {
          uVar6 = *puVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
          if (bVar3) {
            *puVar1 = uVar6 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
                    /* try { // try from 0036722c to 0046722f has its CatchHandler @ 0036733c */
      } while (uVar6 < *(uint *)(lVar7 + 0x9c));
      lVar7 = *(long *)(param_1 + 0x68);
    }
                    /* try { // try from 00367234 to 00467313 has its CatchHandler @ 003671c4 */
    *(undefined1 *)(param_1 + 0x60) = 0;
    puVar1 = (uint *)(lVar7 + 0x80);
    do {
      uVar6 = *puVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
      if (bVar3) {
        *puVar1 = uVar6 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (*(long *)(lVar7 + 0x18) - 1U == (ulong)uVar6) {
      pthread_mutex_lock((pthread_mutex_t *)(lVar7 + 0x20));
      *(undefined1 *)(lVar7 + 0x78) = 1;
      pthread_cond_signal((pthread_cond_t *)(lVar7 + 0x48));
      pthread_mutex_unlock((pthread_mutex_t *)(lVar7 + 0x20));
      iVar4 = *(int *)(param_1 + 0x70);
    }
    else {
      iVar4 = *(int *)(param_1 + 0x70);
    }
  }
  goto joined_r0x00367164;
}


==================================================================

### FUNC 003672b4 (148 bytes) name=FUN_003672b4

pthread_t * FUN_003672b4(pthread_t *param_1)

{
  pthread_mutex_t *__mutex;
  uint uVar1;
  
  if ((int)param_1[0xe] != 1) {
    return param_1;
  }
  __mutex = (pthread_mutex_t *)(param_1 + 1);
  *(undefined4 *)(param_1 + 0xe) = 2;
  pthread_mutex_lock(__mutex);
  *(undefined1 *)(param_1 + 0xc) = 1;
  pthread_cond_signal((pthread_cond_t *)(param_1 + 6));
  pthread_mutex_unlock(__mutex);
  pthread_join(*param_1,(void **)0x0);
  *(undefined4 *)(param_1 + 0xe) = 3;
  pthread_mutex_destroy(__mutex);
                    /* catch() { ... } // from try @ 0036722c with catch @ 0036733c */
  uVar1 = pthread_cond_destroy((pthread_cond_t *)(param_1 + 6));
  return (pthread_t *)(ulong)uVar1;
}


==================================================================

### FUNC 00367348 (108 bytes) name=FUN_00367348

bool FUN_00367348(pthread_t *param_1,pthread_t param_2,pthread_t param_3)

{
  uint uVar1;
  uint uVar2;
  
                    /* try { // try from 0036734c to 0046734f has its CatchHandler @ 003671c4 */
                    /* catch() { ... } // from try @ 00367404 with catch @ 00367350
                       catch() { ... } // from try @ 00367460 with catch @ 00367350
                       catch() { ... } // from try @ 003674d0 with catch @ 00367350
                       catch() { ... } // from try @ 00367524 with catch @ 00367350
                       catch() { ... } // from try @ 00367584 with catch @ 00367350
                       catch() { ... } // from try @ 0036759c with catch @ 00367350
                       catch() { ... } // from try @ 003675b0 with catch @ 00367350
                       catch() { ... } // from try @ 003675c4 with catch @ 00367350
                       catch() { ... } // from try @ 003675d8 with catch @ 00367350 */
  param_1[0xf] = param_2;
  param_1[0xd] = param_3;
  uVar1 = pthread_mutex_init((pthread_mutex_t *)(param_1 + 1),(pthread_mutexattr_t *)0x0);
  uVar2 = pthread_cond_init((pthread_cond_t *)(param_1 + 6),(pthread_condattr_t *)0x0);
  uVar2 = uVar2 | uVar1;
  if (uVar2 == 0) {
    uVar2 = pthread_create(param_1,(pthread_attr_t *)0x0,FUN_00367110,param_1);
  }
  return uVar2 == 0;
}


==================================================================

### FUNC 003673b4 (128 bytes) name=FUN_003673b4

void FUN_003673b4(pthread_t *param_1)

{
  if ((int)param_1[0xe] != 1) {
    *(undefined4 *)(param_1 + 0xe) = 3;
    return;
  }
  *(undefined4 *)(param_1 + 0xe) = 2;
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 1));
  *(undefined1 *)(param_1 + 0xc) = 1;
                    /* try { // try from 00367404 to 00467407 has its CatchHandler @ 00367350 */
  pthread_cond_signal((pthread_cond_t *)(param_1 + 6));
  pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 1));
  pthread_join(*param_1,(void **)0x0);
  *(undefined4 *)(param_1 + 0xe) = 3;
  return;
}


==================================================================

### FUNC 00367434 (64 bytes) name=FUN_00367434

int FUN_00367434(long param_1)

{
  int iVar1;
  
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8));
                    /* try { // try from 00367458 to 0046745b has its CatchHandler @ 0036758c */
  *(undefined1 *)(param_1 + 0x60) = 1;
  pthread_cond_signal((pthread_cond_t *)(param_1 + 0x30));
                    /* try { // try from 00367460 to 0046747f has its CatchHandler @ 00367350 */
  iVar1 = pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8));
  return iVar1;
}


==================================================================

### FUNC 00367474 (180 bytes) name=FUN_00367474

void FUN_00367474(long param_1)

{
  uint *puVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  long lVar6;
  int local_8;
  int local_4;
  
  puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
  do {
    uVar5 = *puVar1;
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(puVar1,0x10);
    if (bVar4) {
      *puVar1 = uVar5 + 1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  lVar6 = *(long *)(param_1 + 0x68);
  if (uVar5 < *(uint *)(lVar6 + 0x9c)) {
    do {
                    /* try { // try from 003674c8 to 004674cb has its CatchHandler @ 003675a0 */
      iVar2 = (*(int **)(lVar6 + 0x90))[1];
                    /* try { // try from 003674d0 to 004674ef has its CatchHandler @ 00367350 */
      local_8 = **(int **)(lVar6 + 0x90) + uVar5 * *(int *)(lVar6 + 0x98);
      local_4 = *(int *)(lVar6 + 0x98) + local_8;
      if (iVar2 < local_4) {
        local_4 = iVar2;
      }
      (**(code **)(**(long **)(lVar6 + 0x88) + 0x10))(*(long **)(lVar6 + 0x88),&local_8);
      puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
      do {
        uVar5 = *puVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(puVar1,0x10);
        if (bVar4) {
          *puVar1 = uVar5 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    } while (uVar5 < *(uint *)(lVar6 + 0x9c));
  }
                    /* try { // try from 0036751c to 0046751f has its CatchHandler @ 003675b4 */
                    /* try { // try from 00367524 to 0046754f has its CatchHandler @ 00367350 */
  return;
}


==================================================================

### FUNC 00367528 (416 bytes) name=FUN_00367528

int FUN_00367528(long param_1)

{
  pthread_mutex_t *__mutex;
  uint *puVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined1 *puVar5;
  uint uVar6;
  long lVar7;
  int local_8;
  int local_4;
  
  __mutex = (pthread_mutex_t *)(param_1 + 8);
  puVar5 = (undefined1 *)
           cv::TLSDataContainer::getData((TLSDataContainer *)(*(long *)(param_1 + 0x68) + 0xa0));
  *puVar5 = 1;
  pthread_mutex_lock(__mutex);
  iVar4 = 1;
  *(undefined4 *)(param_1 + 0x70) = 1;
joined_r0x0036757c:
                    /* try { // try from 0036757c to 0046757f has its CatchHandler @ 003675c8 */
  if (iVar4 != 1) {
LAB_00367680:
    iVar4 = pthread_mutex_unlock(__mutex);
    return iVar4;
  }
                    /* try { // try from 00367584 to 00467587 has its CatchHandler @ 00367350 */
  if (*(char *)(param_1 + 0x60) == '\0') goto LAB_00367598;
  goto LAB_003675b8;
LAB_00367598:
                    /* try { // try from 0036759c to 0046759f has its CatchHandler @ 00367350 */
                    /* catch() { ... } // from try @ 003674c8 with catch @ 003675a0 */
  while (pthread_cond_wait((pthread_cond_t *)(param_1 + 0x30),__mutex),
        *(char *)(param_1 + 0x60) == '\0') {
                    /* catch() { ... } // from try @ 00367458 with catch @ 0036758c */
    if (*(int *)(param_1 + 0x70) == 2) goto LAB_00367680;
  }
  iVar4 = *(int *)(param_1 + 0x70);
                    /* try { // try from 003675b0 to 004675b3 has its CatchHandler @ 00367350 */
                    /* catch() { ... } // from try @ 0036751c with catch @ 003675b4 */
  if (iVar4 == 1) {
LAB_003675b8:
    puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
    do {
      uVar6 = *puVar1;
                    /* try { // try from 003675c4 to 004675c7 has its CatchHandler @ 00367350 */
                    /* catch() { ... } // from try @ 0036757c with catch @ 003675c8 */
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
      if (bVar3) {
        *puVar1 = uVar6 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    lVar7 = *(long *)(param_1 + 0x68);
                    /* try { // try from 003675d8 to 004675db has its CatchHandler @ 00367350 */
    if (uVar6 < *(uint *)(lVar7 + 0x9c)) {
      do {
        iVar4 = (*(int **)(lVar7 + 0x90))[1];
        local_8 = **(int **)(lVar7 + 0x90) + uVar6 * *(int *)(lVar7 + 0x98);
        local_4 = *(int *)(lVar7 + 0x98) + local_8;
        if (iVar4 < local_4) {
          local_4 = iVar4;
        }
        (**(code **)(**(long **)(lVar7 + 0x88) + 0x10))(*(long **)(lVar7 + 0x88),&local_8);
        puVar1 = (uint *)(*(long *)(param_1 + 0x68) + 0x7c);
        do {
          uVar6 = *puVar1;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
          if (bVar3) {
            *puVar1 = uVar6 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      } while (uVar6 < *(uint *)(lVar7 + 0x9c));
      lVar7 = *(long *)(param_1 + 0x68);
    }
    *(undefined1 *)(param_1 + 0x60) = 0;
    puVar1 = (uint *)(lVar7 + 0x80);
    do {
      uVar6 = *puVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
      if (bVar3) {
        *puVar1 = uVar6 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (*(long *)(lVar7 + 0x18) - 1U == (ulong)uVar6) {
      pthread_mutex_lock((pthread_mutex_t *)(lVar7 + 0x20));
      *(undefined1 *)(lVar7 + 0x78) = 1;
      pthread_cond_signal((pthread_cond_t *)(lVar7 + 0x48));
      pthread_mutex_unlock((pthread_mutex_t *)(lVar7 + 0x20));
      iVar4 = *(int *)(param_1 + 0x70);
    }
    else {
      iVar4 = *(int *)(param_1 + 0x70);
    }
  }
  goto joined_r0x0036757c;
}


==================================================================

### FUNC 003676c8 (84 bytes) name=FUN_003676c8

int FUN_003676c8(long param_1)

{
  char cVar1;
  int iVar2;
  
  cVar1 = *(char *)(param_1 + 0x78);
  while (cVar1 == '\0') {
    pthread_cond_wait((pthread_cond_t *)(param_1 + 0x48),(pthread_mutex_t *)(param_1 + 0x20));
    cVar1 = *(char *)(param_1 + 0x78);
  }
  pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x20));
  iVar2 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  return iVar2;
}


==================================================================

### FUNC 0036771c (116 bytes) name=FUN_0036771c

ulong FUN_0036771c(ulong param_1)

{
  uint *puVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  
  puVar1 = (uint *)(param_1 + 0x80);
  do {
    uVar4 = *puVar1;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(puVar1,0x10);
    if (bVar3) {
      *puVar1 = uVar4 + 1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if (*(long *)(param_1 + 0x18) - 1U != (ulong)uVar4) {
    return param_1;
  }
  pthread_mutex_lock((pthread_mutex_t *)(param_1 + 0x20));
  *(undefined1 *)(param_1 + 0x78) = 1;
  pthread_cond_signal((pthread_cond_t *)(param_1 + 0x48));
  uVar4 = pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 0x20));
  return (ulong)uVar4;
}


==================================================================

### FUNC 00367790 (8 bytes) name=FUN_00367790

undefined8 FUN_00367790(long param_1)

{
  return *(undefined8 *)(param_1 + 0x18);
}


==================================================================

### FUNC 00367798 (96 bytes) name=FUN_00367798

int FUN_00367798(void)

{
  char *__s;
  int local_4;
  
  local_4 = 2;
  __s = getenv("OPENCV_FOR_THREADS_NUM");
  if (__s != (char *)0x0) {
    sscanf(__s,"%u",&local_4);
    if (local_4 == 0) {
      local_4 = 1;
    }
    return local_4;
  }
  return local_4;
}


==================================================================

### FUNC 003677f8 (236 bytes) name=FUN_003677f8

undefined8 * FUN_003677f8(undefined8 *param_1)

{
  pthread_mutex_t *__mutex;
  uint uVar1;
  undefined8 *extraout_x0;
  pthread_t *ppVar3;
  pthread_t *ppVar4;
  undefined8 *puVar2;
  
  ppVar3 = (pthread_t *)*param_1;
  ppVar4 = (pthread_t *)param_1[1];
  puVar2 = param_1;
  if (ppVar3 != ppVar4) {
    do {
      while ((int)ppVar3[0xe] != 1) {
        ppVar3 = ppVar3 + 0x10;
        if (ppVar4 == ppVar3) goto LAB_003678a0;
      }
      __mutex = (pthread_mutex_t *)(ppVar3 + 1);
      *(undefined4 *)(ppVar3 + 0xe) = 2;
      pthread_mutex_lock(__mutex);
      *(undefined1 *)(ppVar3 + 0xc) = 1;
      pthread_cond_signal((pthread_cond_t *)(ppVar3 + 6));
      pthread_mutex_unlock(__mutex);
      pthread_join(*ppVar3,(void **)0x0);
      *(undefined4 *)(ppVar3 + 0xe) = 3;
      pthread_mutex_destroy(__mutex);
      uVar1 = pthread_cond_destroy((pthread_cond_t *)(ppVar3 + 6));
      puVar2 = (undefined8 *)(ulong)uVar1;
      ppVar3 = ppVar3 + 0x10;
    } while (ppVar4 != ppVar3);
LAB_003678a0:
    ppVar4 = (pthread_t *)*param_1;
  }
  if (ppVar4 == (pthread_t *)0x0) {
    return puVar2;
  }
  operator_delete(ppVar4);
  return extraout_x0;
}


==================================================================

### FUNC 00367900 (784 bytes) name=FUN_00367900

long * FUN_00367900(void)

{
  pthread_t *ppVar1;
  pthread_mutex_t *__mutex;
  long lVar2;
  int iVar3;
  int iVar4;
  long *plVar5;
  char *pcVar6;
  long *plVar7;
  long lVar8;
  ulong uVar9;
  uint uVar10;
  ulong uVar11;
  pthread_t *ppVar12;
  ulong uVar13;
  pthread_t *ppVar14;
  uint local_4;
  
  if (DAT_005329e8 == (long *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (DAT_005329e8 == (long *)0x0) {
      plVar5 = operator_new(0xb8);
      *plVar5 = 0;
      plVar5[1] = 0;
      plVar5[2] = 0;
      plVar5[3] = 0;
      *(undefined1 *)(plVar5 + 0xf) = 0;
      *(undefined4 *)(plVar5 + 0x10) = 0;
      plVar5[0x11] = 0;
      plVar5[0x12] = 0;
      *(undefined4 *)(plVar5 + 0x13) = 0;
      *(undefined4 *)((long)plVar5 + 0x9c) = 0;
      cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar5 + 0x14));
      *(undefined4 *)(plVar5 + 0x16) = 0;
      plVar5[0x14] = (long)&PTR_FUN_004f7630;
      iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar5 + 4),(pthread_mutexattr_t *)0x0);
      iVar4 = pthread_cond_init((pthread_cond_t *)(plVar5 + 9),(pthread_condattr_t *)0x0);
      if (iVar4 == 0 && iVar3 == 0) {
        local_4 = 2;
        pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
        uVar10 = local_4;
        if ((pcVar6 != (char *)0x0) &&
           (sscanf(pcVar6,"%u",&local_4), uVar10 = local_4, local_4 == 0)) {
          uVar10 = 1;
        }
        iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
        if (iVar3 == 0) {
          uVar11 = (ulong)uVar10;
          if (uVar11 == 0) {
            local_4 = 2;
            pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
            if ((pcVar6 != (char *)0x0) && (sscanf(pcVar6,"%u",&local_4), local_4 == 0)) {
              local_4 = 1;
            }
            uVar11 = (ulong)local_4;
          }
          if ((plVar5[3] != uVar11) && ((int)plVar5[0x16] != 1)) {
            if ((int)plVar5[0x16] == 2) {
              plVar7 = (long *)FUN_00367900();
              if ((int)plVar7[0x16] == 2) {
                uVar9 = plVar7[3];
                for (uVar13 = 0; uVar13 < uVar9; uVar13 = uVar13 + 1) {
                  lVar8 = *plVar7;
                  lVar2 = lVar8 + uVar13 * 0x80;
                  if (*(int *)(lVar2 + 0x70) == 1) {
                    *(undefined4 *)(lVar2 + 0x70) = 2;
                    pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                    *(undefined1 *)(lVar2 + 0x60) = 1;
                    pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                    pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                    pthread_join(*(pthread_t *)(lVar8 + uVar13 * 0x80),(void **)0x0);
                    uVar9 = plVar7[3];
                  }
                  *(undefined4 *)(lVar2 + 0x70) = 3;
                }
              }
              ppVar12 = (pthread_t *)*plVar5;
              ppVar14 = (pthread_t *)plVar5[1];
              *(undefined4 *)(plVar7 + 0x16) = 0;
              for (ppVar1 = ppVar12; ppVar1 != ppVar14; ppVar1 = ppVar1 + 0x10) {
                if ((int)ppVar1[0xe] == 1) {
                  __mutex = (pthread_mutex_t *)(ppVar1 + 1);
                  *(undefined4 *)(ppVar1 + 0xe) = 2;
                  pthread_mutex_lock(__mutex);
                  *(undefined1 *)(ppVar1 + 0xc) = 1;
                  pthread_cond_signal((pthread_cond_t *)(ppVar1 + 6));
                  pthread_mutex_unlock(__mutex);
                  pthread_join(*ppVar1,(void **)0x0);
                  *(undefined4 *)(ppVar1 + 0xe) = 3;
                  pthread_mutex_destroy(__mutex);
                  pthread_cond_destroy((pthread_cond_t *)(ppVar1 + 6));
                }
              }
              plVar5[1] = (long)ppVar12;
            }
            plVar5[3] = uVar11;
            if (uVar11 == 1) {
              *(undefined4 *)(plVar5 + 0x16) = 3;
            }
            else {
              *(undefined4 *)(plVar5 + 0x16) = 0;
            }
          }
          pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
        }
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        DAT_005329e8 = plVar5;
      }
      else {
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        plVar5[3] = 1;
        *(undefined4 *)(plVar5 + 0x16) = 1;
        DAT_005329e8 = plVar5;
      }
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  }
  return DAT_005329e8;
}


==================================================================

### FUNC 00367c44 (540 bytes) name=FUN_00367c44

int FUN_00367c44(long *param_1,ulong param_2)

{
  pthread_t *ppVar1;
  pthread_mutex_t *__mutex;
  long lVar2;
  int iVar3;
  char *__s;
  long *plVar4;
  ulong uVar5;
  uint uVar6;
  ulong uVar7;
  pthread_t *ppVar8;
  long lVar9;
  long lVar10;
  pthread_t *ppVar11;
  uint local_4;
  
  iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
  if (iVar3 != 0) {
    return iVar3;
  }
  if (param_2 == 0) {
    local_4 = 2;
    __s = getenv("OPENCV_FOR_THREADS_NUM");
    uVar6 = local_4;
    if ((__s != (char *)0x0) && (sscanf(__s,"%u",&local_4), uVar6 = local_4, local_4 == 0)) {
      uVar6 = 1;
    }
    param_2 = (ulong)uVar6;
    if (param_1[3] == param_2) goto LAB_00367cb0;
  }
  else if (param_1[3] == param_2) goto LAB_00367cb0;
  if ((int)param_1[0x16] != 1) {
    if ((int)param_1[0x16] == 2) {
      plVar4 = (long *)FUN_00367900();
      if (((int)plVar4[0x16] == 2) && (uVar5 = plVar4[3], uVar5 != 0)) {
        uVar7 = 0;
        do {
          lVar10 = *plVar4;
          lVar9 = uVar7 * 0x80;
          uVar7 = uVar7 + 1;
          lVar2 = lVar10 + lVar9;
          if (*(int *)(lVar2 + 0x70) == 1) {
            *(undefined4 *)(lVar2 + 0x70) = 2;
            pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
            *(undefined1 *)(lVar2 + 0x60) = 1;
            pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
            pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
            pthread_join(*(pthread_t *)(lVar10 + lVar9),(void **)0x0);
            uVar5 = plVar4[3];
          }
          *(undefined4 *)(lVar2 + 0x70) = 3;
        } while (uVar7 < uVar5);
      }
      ppVar11 = (pthread_t *)*param_1;
      ppVar8 = (pthread_t *)param_1[1];
      *(undefined4 *)(plVar4 + 0x16) = 0;
      for (ppVar1 = ppVar11; ppVar1 != ppVar8; ppVar1 = ppVar1 + 0x10) {
        if ((int)ppVar1[0xe] == 1) {
          __mutex = (pthread_mutex_t *)(ppVar1 + 1);
          *(undefined4 *)(ppVar1 + 0xe) = 2;
          pthread_mutex_lock(__mutex);
          *(undefined1 *)(ppVar1 + 0xc) = 1;
          pthread_cond_signal((pthread_cond_t *)(ppVar1 + 6));
          pthread_mutex_unlock(__mutex);
          pthread_join(*ppVar1,(void **)0x0);
          *(undefined4 *)(ppVar1 + 0xe) = 3;
          pthread_mutex_destroy(__mutex);
          pthread_cond_destroy((pthread_cond_t *)(ppVar1 + 6));
        }
      }
      param_1[1] = (long)ppVar11;
    }
    param_1[3] = param_2;
    if (param_2 == 1) {
      *(undefined4 *)(param_1 + 0x16) = 3;
    }
    else {
      *(undefined4 *)(param_1 + 0x16) = 0;
    }
  }
LAB_00367cb0:
  iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  return iVar3;
}


==================================================================

### FUNC 00367e60 (716 bytes) name=FUN_00367e60

int FUN_00367e60(long *param_1)

{
  pthread_t *ppVar1;
  pthread_mutex_t *__mutex;
  long lVar2;
  int iVar3;
  int iVar4;
  char *pcVar5;
  long *plVar6;
  ulong uVar7;
  uint uVar8;
  ulong uVar9;
  ulong uVar10;
  pthread_t *ppVar11;
  pthread_t *ppVar12;
  long lVar13;
  uint local_4;
  
  *param_1 = 0;
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 0xf) = 0;
  *(undefined4 *)(param_1 + 0x10) = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  *(undefined4 *)(param_1 + 0x13) = 0;
  *(undefined4 *)((long)param_1 + 0x9c) = 0;
  cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(param_1 + 0x14));
  *(undefined4 *)(param_1 + 0x16) = 0;
  param_1[0x14] = (long)&PTR_FUN_004f7630;
  iVar3 = pthread_mutex_init((pthread_mutex_t *)(param_1 + 4),(pthread_mutexattr_t *)0x0);
  iVar4 = pthread_cond_init((pthread_cond_t *)(param_1 + 9),(pthread_condattr_t *)0x0);
  if (iVar4 == 0 && iVar3 == 0) {
    local_4 = 2;
    pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
    uVar8 = local_4;
    if ((pcVar5 != (char *)0x0) && (sscanf(pcVar5,"%u",&local_4), uVar8 = local_4, local_4 == 0)) {
      uVar8 = 1;
    }
    iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (iVar3 == 0) {
      uVar9 = (ulong)uVar8;
      iVar3 = 0;
      if (uVar9 == 0) {
        local_4 = 2;
        pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
        if (pcVar5 == (char *)0x0) {
          uVar9 = (ulong)local_4;
          iVar3 = 0;
        }
        else {
          iVar3 = sscanf(pcVar5,"%u",&local_4);
          uVar8 = local_4;
          if (local_4 == 0) {
            uVar8 = 1;
          }
          uVar9 = (ulong)uVar8;
        }
      }
      if ((param_1[3] != uVar9) && ((int)param_1[0x16] != 1)) {
        if ((int)param_1[0x16] == 2) {
          plVar6 = (long *)FUN_00367900(iVar3);
          if (((int)plVar6[0x16] == 2) && (uVar7 = plVar6[3], uVar7 != 0)) {
            uVar10 = 0;
            do {
              lVar13 = *plVar6;
              lVar2 = lVar13 + uVar10 * 0x80;
              if (*(int *)(lVar2 + 0x70) == 1) {
                *(undefined4 *)(lVar2 + 0x70) = 2;
                pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                *(undefined1 *)(lVar2 + 0x60) = 1;
                pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                pthread_join(*(pthread_t *)(lVar13 + uVar10 * 0x80),(void **)0x0);
                uVar7 = plVar6[3];
              }
              uVar10 = uVar10 + 1;
              *(undefined4 *)(lVar2 + 0x70) = 3;
            } while (uVar10 < uVar7);
          }
          ppVar12 = (pthread_t *)*param_1;
          ppVar11 = (pthread_t *)param_1[1];
          *(undefined4 *)(plVar6 + 0x16) = 0;
          for (ppVar1 = ppVar12; ppVar1 != ppVar11; ppVar1 = ppVar1 + 0x10) {
            if ((int)ppVar1[0xe] == 1) {
              __mutex = (pthread_mutex_t *)(ppVar1 + 1);
              *(undefined4 *)(ppVar1 + 0xe) = 2;
              pthread_mutex_lock(__mutex);
              *(undefined1 *)(ppVar1 + 0xc) = 1;
              pthread_cond_signal((pthread_cond_t *)(ppVar1 + 6));
              pthread_mutex_unlock(__mutex);
              pthread_join(*ppVar1,(void **)0x0);
              *(undefined4 *)(ppVar1 + 0xe) = 3;
              pthread_mutex_destroy(__mutex);
              pthread_cond_destroy((pthread_cond_t *)(ppVar1 + 6));
            }
          }
          param_1[1] = (long)ppVar12;
        }
        param_1[3] = uVar9;
        if (uVar9 == 1) {
          *(undefined4 *)(param_1 + 0x16) = 3;
        }
        else {
          *(undefined4 *)(param_1 + 0x16) = 0;
        }
      }
      iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
    }
    *(undefined4 *)((long)param_1 + 0x7c) = 0;
  }
  else {
    iVar3 = 1;
    *(undefined4 *)((long)param_1 + 0x7c) = 0;
    param_1[3] = 1;
    *(undefined4 *)(param_1 + 0x16) = 1;
  }
  return iVar3;
}


==================================================================

### FUNC 00368158 (788 bytes) name=FUN_00368158

long FUN_00368158(void)

{
  pthread_t *ppVar1;
  pthread_mutex_t *__mutex;
  long lVar2;
  int iVar3;
  int iVar4;
  long *plVar5;
  char *pcVar6;
  long *plVar7;
  long lVar8;
  ulong uVar9;
  uint uVar10;
  ulong uVar11;
  pthread_t *ppVar12;
  ulong uVar13;
  pthread_t *ppVar14;
  uint local_4;
  
  if (DAT_005329e8 == (long *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (DAT_005329e8 == (long *)0x0) {
      plVar5 = operator_new(0xb8);
      *plVar5 = 0;
      plVar5[1] = 0;
      plVar5[2] = 0;
      plVar5[3] = 0;
      *(undefined1 *)(plVar5 + 0xf) = 0;
      *(undefined4 *)(plVar5 + 0x10) = 0;
      plVar5[0x11] = 0;
      plVar5[0x12] = 0;
      *(undefined4 *)(plVar5 + 0x13) = 0;
      *(undefined4 *)((long)plVar5 + 0x9c) = 0;
      cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar5 + 0x14));
      *(undefined4 *)(plVar5 + 0x16) = 0;
      plVar5[0x14] = (long)&PTR_FUN_004f7630;
      iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar5 + 4),(pthread_mutexattr_t *)0x0);
      iVar4 = pthread_cond_init((pthread_cond_t *)(plVar5 + 9),(pthread_condattr_t *)0x0);
      if (iVar4 == 0 && iVar3 == 0) {
        local_4 = 2;
        pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
        uVar10 = local_4;
        if ((pcVar6 != (char *)0x0) &&
           (sscanf(pcVar6,"%u",&local_4), uVar10 = local_4, local_4 == 0)) {
          uVar10 = 1;
        }
        iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
        if (iVar3 == 0) {
          uVar11 = (ulong)uVar10;
          if (uVar11 == 0) {
            local_4 = 2;
            pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
            if ((pcVar6 != (char *)0x0) && (sscanf(pcVar6,"%u",&local_4), local_4 == 0)) {
              local_4 = 1;
            }
            uVar11 = (ulong)local_4;
          }
          if ((plVar5[3] != uVar11) && ((int)plVar5[0x16] != 1)) {
            if ((int)plVar5[0x16] == 2) {
              plVar7 = (long *)FUN_00367900();
              if ((int)plVar7[0x16] == 2) {
                uVar9 = plVar7[3];
                for (uVar13 = 0; uVar13 < uVar9; uVar13 = uVar13 + 1) {
                  lVar8 = *plVar7;
                  lVar2 = lVar8 + uVar13 * 0x80;
                  if (*(int *)(lVar2 + 0x70) == 1) {
                    *(undefined4 *)(lVar2 + 0x70) = 2;
                    pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                    *(undefined1 *)(lVar2 + 0x60) = 1;
                    pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                    pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                    pthread_join(*(pthread_t *)(lVar8 + uVar13 * 0x80),(void **)0x0);
                    uVar9 = plVar7[3];
                  }
                  *(undefined4 *)(lVar2 + 0x70) = 3;
                }
              }
              ppVar12 = (pthread_t *)*plVar5;
              ppVar14 = (pthread_t *)plVar5[1];
              *(undefined4 *)(plVar7 + 0x16) = 0;
              for (ppVar1 = ppVar12; ppVar1 != ppVar14; ppVar1 = ppVar1 + 0x10) {
                if ((int)ppVar1[0xe] == 1) {
                  __mutex = (pthread_mutex_t *)(ppVar1 + 1);
                  *(undefined4 *)(ppVar1 + 0xe) = 2;
                  pthread_mutex_lock(__mutex);
                  *(undefined1 *)(ppVar1 + 0xc) = 1;
                  pthread_cond_signal((pthread_cond_t *)(ppVar1 + 6));
                  pthread_mutex_unlock(__mutex);
                  pthread_join(*ppVar1,(void **)0x0);
                  *(undefined4 *)(ppVar1 + 0xe) = 3;
                  pthread_mutex_destroy(__mutex);
                  pthread_cond_destroy((pthread_cond_t *)(ppVar1 + 6));
                }
              }
              plVar5[1] = (long)ppVar12;
            }
            plVar5[3] = uVar11;
            if (uVar11 == 1) {
              *(undefined4 *)(plVar5 + 0x16) = 3;
            }
            else {
              *(undefined4 *)(plVar5 + 0x16) = 0;
            }
          }
          pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
        }
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        DAT_005329e8 = plVar5;
      }
      else {
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        plVar5[3] = 1;
        *(undefined4 *)(plVar5 + 0x16) = 1;
        DAT_005329e8 = plVar5;
      }
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  }
  return DAT_005329e8[3];
}


==================================================================

### FUNC 003684a0 (1148 bytes) name=FUN_003684a0

void FUN_003684a0(undefined8 *param_1)

{
  pthread_mutex_t *ppVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long *plVar5;
  char *pcVar6;
  long *plVar7;
  ulong uVar8;
  pthread_t *ppVar9;
  ulong uVar10;
  pthread_t *ppVar11;
  uint uVar12;
  long lVar13;
  ulong uVar14;
  pthread_t *ppVar15;
  uint local_4;
  
  param_1 = (undefined8 *)*param_1;
  if (param_1 != (undefined8 *)0x0) {
    if (DAT_005329e8 == (long *)0x0) {
      pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
      if (DAT_005329e8 == (long *)0x0) {
        plVar5 = operator_new(0xb8);
        *plVar5 = 0;
        plVar5[1] = 0;
        plVar5[2] = 0;
        plVar5[3] = 0;
        *(undefined1 *)(plVar5 + 0xf) = 0;
        *(undefined4 *)(plVar5 + 0x10) = 0;
        plVar5[0x11] = 0;
        plVar5[0x12] = 0;
        *(undefined4 *)(plVar5 + 0x13) = 0;
        *(undefined4 *)((long)plVar5 + 0x9c) = 0;
        cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar5 + 0x14));
        *(undefined4 *)(plVar5 + 0x16) = 0;
        plVar5[0x14] = (long)&PTR_FUN_004f7630;
        iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar5 + 4),(pthread_mutexattr_t *)0x0);
        iVar4 = pthread_cond_init((pthread_cond_t *)(plVar5 + 9),(pthread_condattr_t *)0x0);
        if (iVar4 == 0 && iVar3 == 0) {
          local_4 = 2;
          pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
          uVar12 = local_4;
          if ((pcVar6 != (char *)0x0) &&
             (sscanf(pcVar6,"%u",&local_4), uVar12 = local_4, local_4 == 0)) {
            uVar12 = 1;
          }
          iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
          if (iVar3 == 0) {
            uVar8 = (ulong)uVar12;
            if (uVar8 == 0) {
              local_4 = 2;
              pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
              uVar12 = local_4;
              if ((pcVar6 != (char *)0x0) &&
                 (sscanf(pcVar6,"%u",&local_4), uVar12 = local_4, local_4 == 0)) {
                uVar12 = 1;
              }
              uVar8 = (ulong)uVar12;
            }
            if ((plVar5[3] != uVar8) && ((int)plVar5[0x16] != 1)) {
              if ((int)plVar5[0x16] == 2) {
                plVar7 = (long *)FUN_00367900();
                if (((int)plVar7[0x16] == 2) && (uVar10 = plVar7[3], uVar10 != 0)) {
                  uVar14 = 0;
                  do {
                    lVar13 = *plVar7;
                    lVar2 = lVar13 + uVar14 * 0x80;
                    if (*(int *)(lVar2 + 0x70) == 1) {
                      *(undefined4 *)(lVar2 + 0x70) = 2;
                      pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                      *(undefined1 *)(lVar2 + 0x60) = 1;
                      pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                      pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                      pthread_join(*(pthread_t *)(lVar13 + uVar14 * 0x80),(void **)0x0);
                      uVar10 = plVar7[3];
                    }
                    uVar14 = uVar14 + 1;
                    *(undefined4 *)(lVar2 + 0x70) = 3;
                  } while (uVar14 < uVar10);
                }
                ppVar11 = (pthread_t *)*plVar5;
                ppVar15 = (pthread_t *)plVar5[1];
                *(undefined4 *)(plVar7 + 0x16) = 0;
                for (ppVar9 = ppVar11; ppVar9 != ppVar15; ppVar9 = ppVar9 + 0x10) {
                  if ((int)ppVar9[0xe] == 1) {
                    ppVar1 = (pthread_mutex_t *)(ppVar9 + 1);
                    *(undefined4 *)(ppVar9 + 0xe) = 2;
                    pthread_mutex_lock(ppVar1);
                    *(undefined1 *)(ppVar9 + 0xc) = 1;
                    pthread_cond_signal((pthread_cond_t *)(ppVar9 + 6));
                    pthread_mutex_unlock(ppVar1);
                    pthread_join(*ppVar9,(void **)0x0);
                    *(undefined4 *)(ppVar9 + 0xe) = 3;
                    pthread_mutex_destroy(ppVar1);
                    pthread_cond_destroy((pthread_cond_t *)(ppVar9 + 6));
                  }
                }
                plVar5[1] = (long)ppVar11;
              }
              plVar5[3] = uVar8;
              if (uVar8 == 1) {
                *(undefined4 *)(plVar5 + 0x16) = 3;
              }
              else {
                *(undefined4 *)(plVar5 + 0x16) = 0;
              }
            }
            pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
          }
          *(undefined4 *)((long)plVar5 + 0x7c) = 0;
          DAT_005329e8 = plVar5;
        }
        else {
          *(undefined4 *)((long)plVar5 + 0x7c) = 0;
          plVar5[3] = 1;
          *(undefined4 *)(plVar5 + 0x16) = 1;
          DAT_005329e8 = plVar5;
        }
      }
      pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
    }
    plVar5 = DAT_005329e8;
    if (((int)DAT_005329e8[0x16] == 2) && (uVar8 = DAT_005329e8[3], uVar8 != 0)) {
      uVar10 = 0;
      do {
        lVar13 = *plVar5;
        lVar2 = lVar13 + uVar10 * 0x80;
        if (*(int *)(lVar2 + 0x70) == 1) {
          *(undefined4 *)(lVar2 + 0x70) = 2;
          pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
          *(undefined1 *)(lVar2 + 0x60) = 1;
          pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
          pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
          pthread_join(*(pthread_t *)(lVar13 + uVar10 * 0x80),(void **)0x0);
          uVar8 = plVar5[3];
        }
        uVar10 = uVar10 + 1;
        *(undefined4 *)(lVar2 + 0x70) = 3;
      } while (uVar10 < uVar8);
    }
    *(undefined4 *)(plVar5 + 0x16) = 0;
    pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 4));
    pthread_cond_destroy((pthread_cond_t *)(param_1 + 9));
    pthread_mutex_destroy((pthread_mutex_t *)&DAT_005093c8);
    param_1[0x14] = &PTR_FUN_004f7630;
    cv::TLSDataContainer::~TLSDataContainer((TLSDataContainer *)(param_1 + 0x14));
    ppVar9 = (pthread_t *)*param_1;
    ppVar11 = (pthread_t *)param_1[1];
    if (ppVar9 != ppVar11) {
      do {
        while ((int)ppVar9[0xe] == 1) {
          ppVar1 = (pthread_mutex_t *)(ppVar9 + 1);
          *(undefined4 *)(ppVar9 + 0xe) = 2;
          pthread_mutex_lock(ppVar1);
          *(undefined1 *)(ppVar9 + 0xc) = 1;
          pthread_cond_signal((pthread_cond_t *)(ppVar9 + 6));
          pthread_mutex_unlock(ppVar1);
          pthread_join(*ppVar9,(void **)0x0);
          *(undefined4 *)(ppVar9 + 0xe) = 3;
          pthread_mutex_destroy(ppVar1);
          pthread_cond_destroy((pthread_cond_t *)(ppVar9 + 6));
          ppVar9 = ppVar9 + 0x10;
          if (ppVar11 == ppVar9) goto LAB_003685a4;
        }
        ppVar9 = ppVar9 + 0x10;
      } while (ppVar11 != ppVar9);
LAB_003685a4:
      ppVar11 = (pthread_t *)*param_1;
    }
    if (ppVar11 != (pthread_t *)0x0) {
      operator_delete(ppVar11);
    }
    operator_delete(param_1);
  }
  return;
}


==================================================================

### FUNC 00368994 (1136 bytes) name=FUN_00368994

void FUN_00368994(undefined8 *param_1)

{
  pthread_mutex_t *ppVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  long *plVar5;
  char *pcVar6;
  long *plVar7;
  ulong uVar8;
  pthread_t *ppVar9;
  ulong uVar10;
  pthread_t *ppVar11;
  uint uVar12;
  long lVar13;
  ulong uVar14;
  pthread_t *ppVar15;
  uint local_4;
  
  if (DAT_005329e8 == (long *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (DAT_005329e8 == (long *)0x0) {
      plVar5 = operator_new(0xb8);
      *plVar5 = 0;
      plVar5[1] = 0;
      plVar5[2] = 0;
      plVar5[3] = 0;
      *(undefined1 *)(plVar5 + 0xf) = 0;
      *(undefined4 *)(plVar5 + 0x10) = 0;
      plVar5[0x11] = 0;
      plVar5[0x12] = 0;
      *(undefined4 *)(plVar5 + 0x13) = 0;
      *(undefined4 *)((long)plVar5 + 0x9c) = 0;
      cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar5 + 0x14));
      *(undefined4 *)(plVar5 + 0x16) = 0;
      plVar5[0x14] = (long)&PTR_FUN_004f7630;
      iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar5 + 4),(pthread_mutexattr_t *)0x0);
      iVar4 = pthread_cond_init((pthread_cond_t *)(plVar5 + 9),(pthread_condattr_t *)0x0);
      if (iVar4 == 0 && iVar3 == 0) {
        local_4 = 2;
        pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
        uVar12 = local_4;
        if ((pcVar6 != (char *)0x0) &&
           (sscanf(pcVar6,"%u",&local_4), uVar12 = local_4, local_4 == 0)) {
          uVar12 = 1;
        }
        iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
        if (iVar3 == 0) {
          uVar8 = (ulong)uVar12;
          if (uVar8 == 0) {
            local_4 = 2;
            pcVar6 = getenv("OPENCV_FOR_THREADS_NUM");
            uVar12 = local_4;
            if ((pcVar6 != (char *)0x0) &&
               (sscanf(pcVar6,"%u",&local_4), uVar12 = local_4, local_4 == 0)) {
              uVar12 = 1;
            }
            uVar8 = (ulong)uVar12;
          }
          if ((plVar5[3] != uVar8) && ((int)plVar5[0x16] != 1)) {
            if ((int)plVar5[0x16] == 2) {
              plVar7 = (long *)FUN_00367900();
              if (((int)plVar7[0x16] == 2) && (uVar10 = plVar7[3], uVar10 != 0)) {
                uVar14 = 0;
                do {
                  lVar13 = *plVar7;
                  lVar2 = lVar13 + uVar14 * 0x80;
                  if (*(int *)(lVar2 + 0x70) == 1) {
                    *(undefined4 *)(lVar2 + 0x70) = 2;
                    pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                    *(undefined1 *)(lVar2 + 0x60) = 1;
                    pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                    pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                    pthread_join(*(pthread_t *)(lVar13 + uVar14 * 0x80),(void **)0x0);
                    uVar10 = plVar7[3];
                  }
                  uVar14 = uVar14 + 1;
                  *(undefined4 *)(lVar2 + 0x70) = 3;
                } while (uVar14 < uVar10);
              }
              ppVar11 = (pthread_t *)*plVar5;
              ppVar15 = (pthread_t *)plVar5[1];
              *(undefined4 *)(plVar7 + 0x16) = 0;
              for (ppVar9 = ppVar11; ppVar9 != ppVar15; ppVar9 = ppVar9 + 0x10) {
                if ((int)ppVar9[0xe] == 1) {
                  ppVar1 = (pthread_mutex_t *)(ppVar9 + 1);
                  *(undefined4 *)(ppVar9 + 0xe) = 2;
                  pthread_mutex_lock(ppVar1);
                  *(undefined1 *)(ppVar9 + 0xc) = 1;
                  pthread_cond_signal((pthread_cond_t *)(ppVar9 + 6));
                  pthread_mutex_unlock(ppVar1);
                  pthread_join(*ppVar9,(void **)0x0);
                  *(undefined4 *)(ppVar9 + 0xe) = 3;
                  pthread_mutex_destroy(ppVar1);
                  pthread_cond_destroy((pthread_cond_t *)(ppVar9 + 6));
                }
              }
              plVar5[1] = (long)ppVar11;
            }
            plVar5[3] = uVar8;
            if (uVar8 == 1) {
              *(undefined4 *)(plVar5 + 0x16) = 3;
            }
            else {
              *(undefined4 *)(plVar5 + 0x16) = 0;
            }
          }
          pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
        }
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        DAT_005329e8 = plVar5;
      }
      else {
        *(undefined4 *)((long)plVar5 + 0x7c) = 0;
        plVar5[3] = 1;
        *(undefined4 *)(plVar5 + 0x16) = 1;
        DAT_005329e8 = plVar5;
      }
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  }
  plVar5 = DAT_005329e8;
  if (((int)DAT_005329e8[0x16] == 2) && (uVar8 = DAT_005329e8[3], uVar8 != 0)) {
    uVar10 = 0;
    do {
      lVar13 = *plVar5;
      lVar2 = lVar13 + uVar10 * 0x80;
      if (*(int *)(lVar2 + 0x70) == 1) {
        *(undefined4 *)(lVar2 + 0x70) = 2;
        pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
        *(undefined1 *)(lVar2 + 0x60) = 1;
        pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
        pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
        pthread_join(*(pthread_t *)(lVar13 + uVar10 * 0x80),(void **)0x0);
        uVar8 = plVar5[3];
      }
      uVar10 = uVar10 + 1;
      *(undefined4 *)(lVar2 + 0x70) = 3;
    } while (uVar10 < uVar8);
  }
  *(undefined4 *)(plVar5 + 0x16) = 0;
  pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 4));
  pthread_cond_destroy((pthread_cond_t *)(param_1 + 9));
  pthread_mutex_destroy((pthread_mutex_t *)&DAT_005093c8);
  param_1[0x14] = &PTR_FUN_004f7630;
  cv::TLSDataContainer::~TLSDataContainer((TLSDataContainer *)(param_1 + 0x14));
  ppVar9 = (pthread_t *)*param_1;
  ppVar11 = (pthread_t *)param_1[1];
  if (ppVar9 != ppVar11) {
    do {
      while ((int)ppVar9[0xe] == 1) {
        ppVar1 = (pthread_mutex_t *)(ppVar9 + 1);
        *(undefined4 *)(ppVar9 + 0xe) = 2;
        pthread_mutex_lock(ppVar1);
        *(undefined1 *)(ppVar9 + 0xc) = 1;
        pthread_cond_signal((pthread_cond_t *)(ppVar9 + 6));
        pthread_mutex_unlock(ppVar1);
        pthread_join(*ppVar9,(void **)0x0);
        *(undefined4 *)(ppVar9 + 0xe) = 3;
        pthread_mutex_destroy(ppVar1);
        pthread_cond_destroy((pthread_cond_t *)(ppVar9 + 6));
        ppVar9 = ppVar9 + 0x10;
        if (ppVar11 == ppVar9) goto LAB_00368a94;
      }
      ppVar9 = ppVar9 + 0x10;
    } while (ppVar11 != ppVar9);
LAB_00368a94:
    ppVar11 = (pthread_t *)*param_1;
  }
  if (ppVar11 != (pthread_t *)0x0) {
    operator_delete(ppVar11);
  }
  return;
}


==================================================================

### FUNC 00368e7c (2352 bytes) name=FUN_00368e7c

int FUN_00368e7c(int param_1)

{
  pthread_mutex_t *ppVar1;
  long lVar2;
  int iVar3;
  int iVar4;
  char *pcVar5;
  long *plVar6;
  ulong uVar7;
  long *plVar8;
  ulong uVar9;
  uint uVar10;
  ulong uVar11;
  pthread_t *ppVar12;
  ulong uVar13;
  pthread_t *ppVar14;
  long lVar15;
  pthread_t *ppVar16;
  uint local_4;
  
  uVar11 = (ulong)param_1;
  if (param_1 < 0) {
    if (DAT_005329e8 == (long *)0x0) {
      pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
      if (DAT_005329e8 == (long *)0x0) {
        plVar8 = operator_new(0xb8);
        *plVar8 = 0;
        plVar8[1] = 0;
        plVar8[2] = 0;
        plVar8[3] = 0;
        *(undefined1 *)(plVar8 + 0xf) = 0;
        *(undefined4 *)(plVar8 + 0x10) = 0;
        plVar8[0x11] = 0;
        plVar8[0x12] = 0;
        *(undefined4 *)(plVar8 + 0x13) = 0;
        *(undefined4 *)((long)plVar8 + 0x9c) = 0;
        cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar8 + 0x14));
        *(undefined4 *)(plVar8 + 0x16) = 0;
        plVar8[0x14] = (long)&PTR_FUN_004f7630;
        iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar8 + 4),(pthread_mutexattr_t *)0x0);
        iVar4 = pthread_cond_init((pthread_cond_t *)(plVar8 + 9),(pthread_condattr_t *)0x0);
        if (iVar4 == 0 && iVar3 == 0) {
          local_4 = 2;
          pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
          if ((pcVar5 != (char *)0x0) && (sscanf(pcVar5,"%u",&local_4), local_4 == 0)) {
            local_4 = 1;
          }
          uVar10 = local_4;
          iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
          if (iVar3 == 0) {
            uVar11 = (ulong)uVar10;
            if (uVar11 == 0) {
              local_4 = 2;
              pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
              if ((pcVar5 != (char *)0x0) && (sscanf(pcVar5,"%u",&local_4), local_4 == 0)) {
                local_4 = 1;
              }
              uVar11 = (ulong)local_4;
            }
            if ((plVar8[3] != uVar11) && ((int)plVar8[0x16] != 1)) {
              if ((int)plVar8[0x16] == 2) {
                plVar6 = (long *)FUN_00367900();
                if ((int)plVar6[0x16] == 2) {
                  uVar13 = plVar6[3];
                  for (uVar7 = 0; uVar7 < uVar13; uVar7 = uVar7 + 1) {
                    lVar15 = *plVar6;
                    lVar2 = lVar15 + uVar7 * 0x80;
                    if (*(int *)(lVar2 + 0x70) == 1) {
                      *(undefined4 *)(lVar2 + 0x70) = 2;
                      pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                      *(undefined1 *)(lVar2 + 0x60) = 1;
                      pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                      pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                      pthread_join(*(pthread_t *)(lVar15 + uVar7 * 0x80),(void **)0x0);
                      uVar13 = plVar6[3];
                    }
                    *(undefined4 *)(lVar2 + 0x70) = 3;
                  }
                }
                ppVar14 = (pthread_t *)plVar8[1];
                ppVar16 = (pthread_t *)*plVar8;
                *(undefined4 *)(plVar6 + 0x16) = 0;
                ppVar12 = ppVar16;
                while (ppVar14 != ppVar12) {
                  if ((int)ppVar12[0xe] == 1) {
                    ppVar1 = (pthread_mutex_t *)(ppVar12 + 1);
                    *(undefined4 *)(ppVar12 + 0xe) = 2;
                    pthread_mutex_lock(ppVar1);
                    *(undefined1 *)(ppVar12 + 0xc) = 1;
                    pthread_cond_signal((pthread_cond_t *)(ppVar12 + 6));
                    pthread_mutex_unlock(ppVar1);
                    pthread_join(*ppVar12,(void **)0x0);
                    *(undefined4 *)(ppVar12 + 0xe) = 3;
                    pthread_mutex_destroy(ppVar1);
                    pthread_cond_destroy((pthread_cond_t *)(ppVar12 + 6));
                    ppVar12 = ppVar12 + 0x10;
                  }
                  else {
                    ppVar12 = ppVar12 + 0x10;
                  }
                }
                plVar8[1] = (long)ppVar16;
              }
              plVar8[3] = uVar11;
              if (uVar11 == 1) {
                *(undefined4 *)(plVar8 + 0x16) = 3;
              }
              else {
                *(undefined4 *)(plVar8 + 0x16) = 0;
              }
            }
            pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
          }
          *(undefined4 *)((long)plVar8 + 0x7c) = 0;
          DAT_005329e8 = plVar8;
        }
        else {
          *(undefined4 *)((long)plVar8 + 0x7c) = 0;
          plVar8[3] = 1;
          *(undefined4 *)(plVar8 + 0x16) = 1;
          DAT_005329e8 = plVar8;
        }
      }
      pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
    }
    plVar8 = DAT_005329e8;
    iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (iVar3 != 0) {
      return iVar3;
    }
    local_4 = 2;
    pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
    uVar10 = local_4;
    if ((pcVar5 != (char *)0x0) && (sscanf(pcVar5,"%u",&local_4), uVar10 = local_4, local_4 == 0)) {
      uVar10 = 1;
    }
    uVar11 = (ulong)uVar10;
    if ((plVar8[3] == uVar11) || ((int)plVar8[0x16] == 1)) goto LAB_00368ef8;
    if ((int)plVar8[0x16] == 2) {
      plVar6 = (long *)FUN_00367900();
      if (((int)plVar6[0x16] == 2) && (uVar7 = plVar6[3], uVar7 != 0)) {
        uVar13 = 0;
        do {
          lVar15 = *plVar6;
          lVar2 = lVar15 + uVar13 * 0x80;
          if (*(int *)(lVar2 + 0x70) == 1) {
            *(undefined4 *)(lVar2 + 0x70) = 2;
            pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
            *(undefined1 *)(lVar2 + 0x60) = 1;
            pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
            pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
            pthread_join(*(pthread_t *)(lVar15 + uVar13 * 0x80),(void **)0x0);
            uVar7 = plVar6[3];
          }
          uVar13 = uVar13 + 1;
          *(undefined4 *)(lVar2 + 0x70) = 3;
        } while (uVar13 < uVar7);
      }
      ppVar16 = (pthread_t *)*plVar8;
      ppVar14 = (pthread_t *)plVar8[1];
      *(undefined4 *)(plVar6 + 0x16) = 0;
      for (ppVar12 = ppVar16; ppVar12 != ppVar14; ppVar12 = ppVar12 + 0x10) {
        if ((int)ppVar12[0xe] == 1) {
          ppVar1 = (pthread_mutex_t *)(ppVar12 + 1);
          *(undefined4 *)(ppVar12 + 0xe) = 2;
          pthread_mutex_lock(ppVar1);
          *(undefined1 *)(ppVar12 + 0xc) = 1;
          pthread_cond_signal((pthread_cond_t *)(ppVar12 + 6));
          pthread_mutex_unlock(ppVar1);
          pthread_join(*ppVar12,(void **)0x0);
          *(undefined4 *)(ppVar12 + 0xe) = 3;
          pthread_mutex_destroy(ppVar1);
          pthread_cond_destroy((pthread_cond_t *)(ppVar12 + 6));
        }
      }
      goto LAB_00369094;
    }
  }
  else {
    if (DAT_005329e8 == (long *)0x0) {
      pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
      if (DAT_005329e8 == (long *)0x0) {
        plVar8 = operator_new(0xb8);
        *plVar8 = 0;
        plVar8[1] = 0;
        plVar8[2] = 0;
        plVar8[3] = 0;
        *(undefined1 *)(plVar8 + 0xf) = 0;
        *(undefined4 *)(plVar8 + 0x10) = 0;
        plVar8[0x11] = 0;
        plVar8[0x12] = 0;
        *(undefined4 *)(plVar8 + 0x13) = 0;
        *(undefined4 *)((long)plVar8 + 0x9c) = 0;
        cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar8 + 0x14));
        *(undefined4 *)(plVar8 + 0x16) = 0;
        plVar8[0x14] = (long)&PTR_FUN_004f7630;
        iVar3 = pthread_mutex_init((pthread_mutex_t *)(plVar8 + 4),(pthread_mutexattr_t *)0x0);
        iVar4 = pthread_cond_init((pthread_cond_t *)(plVar8 + 9),(pthread_condattr_t *)0x0);
        if (iVar4 == 0 && iVar3 == 0) {
          local_4 = 2;
          pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
          uVar10 = local_4;
          if ((pcVar5 != (char *)0x0) &&
             (sscanf(pcVar5,"%u",&local_4), uVar10 = local_4, local_4 == 0)) {
            uVar10 = 1;
          }
          iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
          if (iVar3 == 0) {
            uVar7 = (ulong)uVar10;
            if (uVar7 == 0) {
              local_4 = 2;
              pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
              if ((pcVar5 != (char *)0x0) && (sscanf(pcVar5,"%u",&local_4), local_4 == 0)) {
                local_4 = 1;
              }
              uVar7 = (ulong)local_4;
            }
            if ((plVar8[3] != uVar7) && ((int)plVar8[0x16] != 1)) {
              if ((int)plVar8[0x16] == 2) {
                plVar6 = (long *)FUN_00367900();
                if ((int)plVar6[0x16] == 2) {
                  uVar9 = plVar6[3];
                  for (uVar13 = 0; uVar13 < uVar9; uVar13 = uVar13 + 1) {
                    lVar15 = *plVar6;
                    lVar2 = lVar15 + uVar13 * 0x80;
                    if (*(int *)(lVar2 + 0x70) == 1) {
                      *(undefined4 *)(lVar2 + 0x70) = 2;
                      pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
                      *(undefined1 *)(lVar2 + 0x60) = 1;
                      pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
                      pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
                      pthread_join(*(pthread_t *)(lVar15 + uVar13 * 0x80),(void **)0x0);
                      uVar9 = plVar6[3];
                    }
                    *(undefined4 *)(lVar2 + 0x70) = 3;
                  }
                }
                ppVar16 = (pthread_t *)*plVar8;
                ppVar14 = (pthread_t *)plVar8[1];
                *(undefined4 *)(plVar6 + 0x16) = 0;
                for (ppVar12 = ppVar16; ppVar12 != ppVar14; ppVar12 = ppVar12 + 0x10) {
                  if ((int)ppVar12[0xe] == 1) {
                    ppVar1 = (pthread_mutex_t *)(ppVar12 + 1);
                    *(undefined4 *)(ppVar12 + 0xe) = 2;
                    pthread_mutex_lock(ppVar1);
                    *(undefined1 *)(ppVar12 + 0xc) = 1;
                    pthread_cond_signal((pthread_cond_t *)(ppVar12 + 6));
                    pthread_mutex_unlock(ppVar1);
                    pthread_join(*ppVar12,(void **)0x0);
                    *(undefined4 *)(ppVar12 + 0xe) = 3;
                    pthread_mutex_destroy(ppVar1);
                    pthread_cond_destroy((pthread_cond_t *)(ppVar12 + 6));
                  }
                }
                plVar8[1] = (long)ppVar16;
              }
              plVar8[3] = uVar7;
              if (uVar7 == 1) {
                *(undefined4 *)(plVar8 + 0x16) = 3;
              }
              else {
                *(undefined4 *)(plVar8 + 0x16) = 0;
              }
            }
            pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
          }
          *(undefined4 *)((long)plVar8 + 0x7c) = 0;
          DAT_005329e8 = plVar8;
        }
        else {
          *(undefined4 *)((long)plVar8 + 0x7c) = 0;
          plVar8[3] = 1;
          *(undefined4 *)(plVar8 + 0x16) = 1;
          DAT_005329e8 = plVar8;
        }
      }
      pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
    }
    plVar8 = DAT_005329e8;
    iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (iVar3 != 0) {
      return iVar3;
    }
    if (param_1 == 0) {
      local_4 = 2;
      pcVar5 = getenv("OPENCV_FOR_THREADS_NUM");
      if (pcVar5 == (char *)0x0) {
        uVar11 = (ulong)local_4;
      }
      else {
        sscanf(pcVar5,"%u",&local_4);
        uVar10 = local_4;
        if (local_4 == 0) {
          uVar10 = 1;
        }
        uVar11 = (ulong)uVar10;
      }
    }
    if ((plVar8[3] == uVar11) || ((int)plVar8[0x16] == 1)) goto LAB_00368ef8;
    if ((int)plVar8[0x16] == 2) {
      plVar6 = (long *)FUN_00367900();
      if (((int)plVar6[0x16] == 2) && (uVar7 = plVar6[3], uVar7 != 0)) {
        uVar13 = 0;
        do {
          lVar15 = *plVar6;
          lVar2 = lVar15 + uVar13 * 0x80;
          if (*(int *)(lVar2 + 0x70) == 1) {
            *(undefined4 *)(lVar2 + 0x70) = 2;
            pthread_mutex_lock((pthread_mutex_t *)(lVar2 + 8));
            *(undefined1 *)(lVar2 + 0x60) = 1;
            pthread_cond_signal((pthread_cond_t *)(lVar2 + 0x30));
            pthread_mutex_unlock((pthread_mutex_t *)(lVar2 + 8));
            pthread_join(*(pthread_t *)(lVar15 + uVar13 * 0x80),(void **)0x0);
            uVar7 = plVar6[3];
          }
          uVar13 = uVar13 + 1;
          *(undefined4 *)(lVar2 + 0x70) = 3;
        } while (uVar13 < uVar7);
      }
      ppVar16 = (pthread_t *)*plVar8;
      ppVar14 = (pthread_t *)plVar8[1];
      *(undefined4 *)(plVar6 + 0x16) = 0;
      for (ppVar12 = ppVar16; ppVar12 != ppVar14; ppVar12 = ppVar12 + 0x10) {
        if ((int)ppVar12[0xe] == 1) {
          ppVar1 = (pthread_mutex_t *)(ppVar12 + 1);
          *(undefined4 *)(ppVar12 + 0xe) = 2;
          pthread_mutex_lock(ppVar1);
          *(undefined1 *)(ppVar12 + 0xc) = 1;
          pthread_cond_signal((pthread_cond_t *)(ppVar12 + 6));
          pthread_mutex_unlock(ppVar1);
          pthread_join(*ppVar12,(void **)0x0);
          *(undefined4 *)(ppVar12 + 0xe) = 3;
          pthread_mutex_destroy(ppVar1);
          pthread_cond_destroy((pthread_cond_t *)(ppVar12 + 6));
        }
      }
LAB_00369094:
      plVar8[1] = (long)ppVar16;
    }
  }
  plVar8[3] = uVar11;
  if (uVar11 == 1) {
    *(undefined4 *)(plVar8 + 0x16) = 3;
  }
  else {
    *(undefined4 *)(plVar8 + 0x16) = 0;
  }
LAB_00368ef8:
  iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  return iVar3;
}


==================================================================

### FUNC 00369814 (1116 bytes) name=FUN_00369814

pthread_t * FUN_00369814(pthread_t *param_1,pthread_t *param_2,pthread_t *param_3,void *param_4)

{
  pthread_mutex_t *__mutex;
  long lVar1;
  uint uVar2;
  pthread_t *ppVar3;
  void *pvVar4;
  ulong uVar5;
  pthread_t *extraout_x0;
  pthread_t *ppVar6;
  pthread_t pVar7;
  pthread_t *ppVar8;
  pthread_t *ppVar9;
  long lVar10;
  pthread_t *ppVar11;
  pthread_t *ppVar12;
  long lVar13;
  ulong uVar14;
  pthread_t local_80;
  pthread_mutex_t pStack_78;
  pthread_cond_t pStack_50;
  undefined1 local_20;
  int local_10;
  
  if (param_3 == (pthread_t *)0x0) {
    return param_1;
  }
  ppVar8 = (pthread_t *)param_1[1];
  if (param_3 <= (pthread_t *)((long)(param_1[2] - (long)ppVar8) >> 7)) {
    lVar13 = (long)ppVar8 - (long)param_2;
    ppVar3 = memcpy(&local_80,param_4,0x80);
    if (param_3 < (pthread_t *)(lVar13 >> 7)) {
      ppVar6 = ppVar8 + (long)param_3 * -0x10;
      ppVar3 = ppVar8;
      ppVar9 = ppVar6;
      if (ppVar8 != ppVar6) {
        do {
          pvVar4 = (void *)0x0;
          if (ppVar3 != (pthread_t *)0x0) {
            pvVar4 = memcpy(ppVar3,ppVar9,0x80);
          }
          ppVar9 = ppVar9 + 0x10;
          ppVar3 = (pthread_t *)((long)pvVar4 + 0x80);
        } while (ppVar8 != ppVar9);
        ppVar3 = (pthread_t *)param_1[1];
      }
      ppVar3 = ppVar3 + (long)param_3 * 0x10;
      param_1[1] = (pthread_t)ppVar3;
      ppVar9 = (pthread_t *)((long)ppVar8 - ((long)ppVar6 - (long)param_2));
      if (0x7f < (long)ppVar6 - (long)param_2) {
        do {
          ppVar8 = ppVar8 + -0x10;
          ppVar6 = ppVar6 + -0x10;
          ppVar3 = memcpy(ppVar8,ppVar6,0x80);
        } while (ppVar8 != ppVar9);
      }
      ppVar8 = param_2 + (long)param_3 * 0x10;
      for (; param_2 != ppVar8; param_2 = param_2 + 0x10) {
        ppVar3 = memcpy(param_2,&local_80,0x80);
      }
    }
    else {
      lVar1 = (long)param_3 - (lVar13 >> 7);
      ppVar9 = ppVar8;
      lVar10 = lVar1;
      if (lVar1 != 0) {
        do {
          ppVar6 = (pthread_t *)0x0;
          if (ppVar9 != (pthread_t *)0x0) {
            ppVar3 = memcpy(ppVar9,&local_80,0x80);
            ppVar6 = ppVar3;
          }
          lVar10 = lVar10 + -1;
          ppVar9 = ppVar6 + 0x10;
        } while (lVar10 != 0);
        ppVar9 = (pthread_t *)param_1[1];
      }
      ppVar9 = ppVar9 + lVar1 * 0x10;
      param_1[1] = (pthread_t)ppVar9;
      ppVar6 = param_2;
      if (ppVar8 == param_2) {
        param_1[1] = (long)ppVar9 + lVar13;
      }
      else {
        do {
          pvVar4 = (void *)0x0;
          if (ppVar9 != (pthread_t *)0x0) {
            pvVar4 = memcpy(ppVar9,ppVar6,0x80);
          }
          ppVar6 = ppVar6 + 0x10;
          ppVar9 = (pthread_t *)((long)pvVar4 + 0x80);
        } while (ppVar8 != ppVar6);
        param_1[1] = param_1[1] + lVar13;
        do {
          ppVar9 = param_2 + 0x10;
          ppVar3 = memcpy(param_2,&local_80,0x80);
          param_2 = ppVar9;
        } while (ppVar8 != ppVar9);
      }
    }
    if (local_10 != 1) {
      return ppVar3;
    }
    local_10 = 2;
    pthread_mutex_lock(&pStack_78);
    local_20 = 1;
    pthread_cond_signal(&pStack_50);
    pthread_mutex_unlock(&pStack_78);
    pthread_join(local_80,(void **)0x0);
    local_10 = 3;
    pthread_mutex_destroy(&pStack_78);
    uVar2 = pthread_cond_destroy(&pStack_50);
    return (pthread_t *)(ulong)uVar2;
  }
  pVar7 = *param_1;
  ppVar8 = (pthread_t *)((long)((long)ppVar8 - pVar7) >> 7);
  if ((pthread_t *)(0x1ffffffffffffff - (long)ppVar8) < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  ppVar3 = ppVar8;
  if (ppVar8 < param_3) {
    ppVar3 = param_3;
  }
  ppVar3 = (pthread_t *)((long)ppVar3 + (long)ppVar8);
  if ((ppVar3 < ppVar8) || ((pthread_t *)0x1ffffffffffffff < ppVar3)) {
    lVar13 = (long)param_2 - pVar7;
    uVar14 = 0xffffffffffffff80;
  }
  else {
    lVar13 = (long)param_2 - pVar7;
    if (ppVar3 == (pthread_t *)0x0) {
      uVar14 = 0;
      ppVar3 = (pthread_t *)0x0;
      goto LAB_00369aa0;
    }
    uVar14 = (long)ppVar3 * 0x80;
  }
  ppVar8 = operator_new(uVar14);
  ppVar3 = ppVar8;
LAB_00369aa0:
  ppVar9 = (pthread_t *)((long)ppVar3 + lVar13);
  ppVar6 = param_3;
  do {
    ppVar11 = (pthread_t *)0x0;
    if (ppVar9 != (pthread_t *)0x0) {
      ppVar8 = memcpy(ppVar9,param_4,0x80);
      ppVar11 = ppVar8;
    }
    ppVar6 = (pthread_t *)((long)ppVar6 + -1);
    ppVar9 = ppVar11 + 0x10;
  } while (ppVar6 != (pthread_t *)0x0);
  ppVar11 = (pthread_t *)*param_1;
  ppVar6 = ppVar3;
  ppVar9 = ppVar11;
  if (param_2 != ppVar11) {
    do {
      ppVar12 = (pthread_t *)0x0;
      if (ppVar6 != (pthread_t *)0x0) {
        ppVar8 = memcpy(ppVar6,ppVar9,0x80);
        ppVar12 = ppVar8;
      }
      ppVar9 = ppVar9 + 0x10;
      ppVar6 = ppVar12 + 0x10;
    } while (param_2 != ppVar9);
    ppVar6 = (pthread_t *)
             ((long)ppVar3 + ((long)param_2 - (long)(ppVar11 + 0x10) & 0xffffffffffffff80U) + 0x80);
  }
  ppVar12 = (pthread_t *)param_1[1];
  ppVar6 = ppVar6 + (long)param_3 * 0x10;
  ppVar11 = ppVar6;
  ppVar9 = param_2;
  if (param_2 != ppVar12) {
    do {
      pvVar4 = (void *)0x0;
      if (ppVar11 != (pthread_t *)0x0) {
        pvVar4 = memcpy(ppVar11,ppVar9,0x80);
      }
      ppVar9 = ppVar9 + 0x10;
      ppVar11 = (pthread_t *)((long)pvVar4 + 0x80);
    } while (ppVar12 != ppVar9);
    uVar5 = (long)ppVar12 - (long)(param_2 + 0x10);
    ppVar12 = (pthread_t *)param_1[1];
    ppVar8 = (pthread_t *)((uVar5 & 0xffffffffffffff80) + 0x80);
    ppVar6 = (pthread_t *)((long)ppVar6 + (long)ppVar8);
  }
  ppVar9 = (pthread_t *)*param_1;
  if (ppVar9 != ppVar12) {
    do {
      while ((int)ppVar9[0xe] != 1) {
        ppVar9 = ppVar9 + 0x10;
        if (ppVar12 == ppVar9) goto LAB_00369bf8;
      }
      __mutex = (pthread_mutex_t *)(ppVar9 + 1);
      *(undefined4 *)(ppVar9 + 0xe) = 2;
      ppVar11 = ppVar9 + 0x10;
      pthread_mutex_lock(__mutex);
      *(undefined1 *)(ppVar9 + 0xc) = 1;
      pthread_cond_signal((pthread_cond_t *)(ppVar9 + 6));
      pthread_mutex_unlock(__mutex);
      pthread_join(*ppVar9,(void **)0x0);
      *(undefined4 *)(ppVar9 + 0xe) = 3;
      pthread_mutex_destroy(__mutex);
      uVar2 = pthread_cond_destroy((pthread_cond_t *)(ppVar9 + 6));
      ppVar8 = (pthread_t *)(ulong)uVar2;
      ppVar9 = ppVar11;
    } while (ppVar12 != ppVar11);
LAB_00369bf8:
    ppVar12 = (pthread_t *)*param_1;
  }
  if (ppVar12 != (pthread_t *)0x0) {
    operator_delete(ppVar12);
    ppVar8 = extraout_x0;
  }
  *param_1 = (pthread_t)ppVar3;
  param_1[1] = (pthread_t)ppVar6;
  param_1[2] = (long)ppVar3 + uVar14;
  return ppVar8;
}


==================================================================

### FUNC 00369c70 (544 bytes) name=FUN_00369c70

undefined8 FUN_00369c70(long *param_1)

{
  pthread_mutex_t *__mutex;
  pthread_t *ppVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  ulong uVar5;
  long lVar6;
  pthread_t *ppVar7;
  pthread_t *ppVar8;
  pthread_t local_80;
  pthread_mutex_t pStack_78;
  pthread_cond_t pStack_50;
  undefined1 local_20;
  undefined8 local_18;
  int local_10;
  undefined8 local_8;
  
  local_10 = (int)param_1[0x16];
  if (local_10 != 0) {
    return 1;
  }
  uVar4 = param_1[3];
  if (uVar4 == 1) {
    return 1;
  }
  lVar6 = *param_1;
  ppVar8 = (pthread_t *)param_1[1];
  local_20 = 0;
  local_18 = 0;
  uVar5 = (long)ppVar8 - lVar6 >> 7;
  local_8 = 0;
  if (uVar5 < uVar4) {
    FUN_00369814(param_1,ppVar8,uVar4 - uVar5,&local_80);
  }
  else {
    if (uVar5 <= uVar4) goto LAB_00369cd4;
    ppVar1 = (pthread_t *)(lVar6 + uVar4 * 0x80);
    for (ppVar7 = ppVar1; ppVar8 != ppVar7; ppVar7 = ppVar7 + 0x10) {
      while ((int)ppVar7[0xe] != 1) {
        ppVar7 = ppVar7 + 0x10;
        if (ppVar8 == ppVar7) goto LAB_00369e04;
      }
      __mutex = (pthread_mutex_t *)(ppVar7 + 1);
      *(undefined4 *)(ppVar7 + 0xe) = 2;
      pthread_mutex_lock(__mutex);
      *(undefined1 *)(ppVar7 + 0xc) = 1;
      pthread_cond_signal((pthread_cond_t *)(ppVar7 + 6));
      pthread_mutex_unlock(__mutex);
      pthread_join(*ppVar7,(void **)0x0);
      *(undefined4 *)(ppVar7 + 0xe) = 3;
      pthread_mutex_destroy(__mutex);
      pthread_cond_destroy((pthread_cond_t *)(ppVar7 + 6));
    }
LAB_00369e04:
    param_1[1] = (long)ppVar1;
  }
  if (local_10 == 1) {
    local_10 = 2;
    pthread_mutex_lock(&pStack_78);
    local_20 = 1;
    pthread_cond_signal(&pStack_50);
    pthread_mutex_unlock(&pStack_78);
    pthread_join(local_80,(void **)0x0);
    local_10 = 3;
    pthread_mutex_destroy(&pStack_78);
    pthread_cond_destroy(&pStack_50);
  }
  lVar6 = *param_1;
  ppVar8 = (pthread_t *)param_1[1];
LAB_00369cd4:
  uVar4 = 0;
  if ((long)ppVar8 - lVar6 >> 7 != 0) {
    do {
      ppVar8 = (pthread_t *)(lVar6 + uVar4 * 0x80);
      ppVar8[0xf] = uVar4;
      ppVar8[0xd] = (pthread_t)param_1;
      iVar2 = pthread_mutex_init((pthread_mutex_t *)(ppVar8 + 1),(pthread_mutexattr_t *)0x0);
      iVar3 = pthread_cond_init((pthread_cond_t *)(ppVar8 + 6),(pthread_condattr_t *)0x0);
      if (iVar3 == 0 && iVar2 == 0) {
        pthread_create(ppVar8,(pthread_attr_t *)0x0,FUN_00367110,ppVar8);
      }
      lVar6 = *param_1;
      uVar4 = uVar4 + 1;
    } while (uVar4 < (ulong)(param_1[1] - lVar6 >> 7));
  }
  *(undefined4 *)(param_1 + 0x16) = 2;
  return 1;
}


==================================================================

### FUNC 00369ef8 (476 bytes) name=FUN_00369ef8

ulong FUN_00369ef8(double param_1,long *param_2,int *param_3,long *param_4)

{
  pthread_mutex_t *__mutex;
  int iVar1;
  int iVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  char *pcVar6;
  int iVar7;
  long lVar8;
  ulong uVar9;
  double dVar10;
  
  pcVar6 = (char *)cv::TLSDataContainer::getData((TLSDataContainer *)(param_2 + 0x14));
  if (((((ulong)param_2[3] < 2) || (*pcVar6 != '\0')) || (param_3[1] - *param_3 < 2)) ||
     (((0.0 < param_1 && (param_1 < 1.5)) ||
      ((iVar4 = pthread_mutex_trylock((pthread_mutex_t *)&DAT_005093c8), iVar4 != 0 ||
       (cVar3 = FUN_00369c70(param_2), cVar3 == '\0')))))) {
    uVar9 = (**(code **)(*param_4 + 0x10))(param_4,param_3);
    return uVar9;
  }
  dVar10 = (double)(param_3[1] - *param_3) / (double)(ulong)((param_2[1] - *param_2 >> 7) << 2);
  if (dVar10 <= param_1) {
    dVar10 = param_1;
  }
  __mutex = (pthread_mutex_t *)(param_2 + 4);
  pthread_mutex_lock(__mutex);
  param_2[0x12] = (long)param_3;
  iVar4 = param_3[1];
  iVar1 = *param_3;
  iVar7 = (int)dVar10;
  lVar8 = *param_2;
  *(undefined4 *)(param_2 + 0x10) = 0;
  *(undefined4 *)((long)param_2 + 0x7c) = 0;
  iVar2 = 0;
  if (iVar7 != 0) {
    iVar2 = ((iVar4 - iVar1) + -1) / iVar7;
  }
  *(int *)(param_2 + 0x13) = iVar7;
  *(undefined1 *)(param_2 + 0xf) = 0;
  param_2[0x11] = (long)param_4;
  *(int *)((long)param_2 + 0x9c) = iVar2 + 1;
  if (param_2[1] - lVar8 >> 7 != 0) {
    uVar9 = 0;
    do {
      lVar8 = lVar8 + uVar9 * 0x80;
      uVar9 = uVar9 + 1;
      pthread_mutex_lock((pthread_mutex_t *)(lVar8 + 8));
      *(undefined1 *)(lVar8 + 0x60) = 1;
      pthread_cond_signal((pthread_cond_t *)(lVar8 + 0x30));
      pthread_mutex_unlock((pthread_mutex_t *)(lVar8 + 8));
      lVar8 = *param_2;
    } while (uVar9 < (ulong)(param_2[1] - lVar8 >> 7));
    if ((char)param_2[0xf] != '\0') goto LAB_0036a074;
  }
  do {
    pthread_cond_wait((pthread_cond_t *)(param_2 + 9),__mutex);
  } while ((char)param_2[0xf] == '\0');
LAB_0036a074:
  pthread_mutex_unlock(__mutex);
  uVar5 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  return (ulong)uVar5;
}


==================================================================

### FUNC 0036a0d4 (1228 bytes) name=FUN_0036a0d4

ulong FUN_0036a0d4(double param_1,int *param_2,long *param_3)

{
  pthread_mutex_t *ppVar1;
  pthread_t *ppVar2;
  int iVar3;
  char cVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  char *pcVar8;
  long *plVar9;
  long *plVar10;
  pthread_t *ppVar11;
  ulong uVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  ulong uVar16;
  long lVar17;
  double dVar18;
  pthread_t *ppVar19;
  ulong uVar20;
  uint local_4;
  
  if (DAT_005329e8 == (long *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
    if (DAT_005329e8 == (long *)0x0) {
      plVar9 = operator_new(0xb8);
      *plVar9 = 0;
      plVar9[1] = 0;
      plVar9[2] = 0;
      plVar9[3] = 0;
      *(undefined1 *)(plVar9 + 0xf) = 0;
      *(undefined4 *)(plVar9 + 0x10) = 0;
      plVar9[0x11] = 0;
      plVar9[0x12] = 0;
      *(undefined4 *)(plVar9 + 0x13) = 0;
      *(undefined4 *)((long)plVar9 + 0x9c) = 0;
      cv::TLSDataContainer::TLSDataContainer((TLSDataContainer *)(plVar9 + 0x14));
      *(undefined4 *)(plVar9 + 0x16) = 0;
      plVar9[0x14] = (long)&PTR_FUN_004f7630;
      iVar5 = pthread_mutex_init((pthread_mutex_t *)(plVar9 + 4),(pthread_mutexattr_t *)0x0);
      iVar7 = pthread_cond_init((pthread_cond_t *)(plVar9 + 9),(pthread_condattr_t *)0x0);
      if (iVar7 == 0 && iVar5 == 0) {
        local_4 = 2;
        pcVar8 = getenv("OPENCV_FOR_THREADS_NUM");
        uVar6 = local_4;
        if ((pcVar8 != (char *)0x0) && (sscanf(pcVar8,"%u",&local_4), uVar6 = local_4, local_4 == 0)
           ) {
          uVar6 = 1;
        }
        iVar5 = pthread_mutex_lock((pthread_mutex_t *)&DAT_005093c8);
        if (iVar5 == 0) {
          uVar16 = (ulong)uVar6;
          if (uVar16 == 0) {
            local_4 = 2;
            pcVar8 = getenv("OPENCV_FOR_THREADS_NUM");
            if ((pcVar8 != (char *)0x0) && (sscanf(pcVar8,"%u",&local_4), local_4 == 0)) {
              local_4 = 1;
            }
            uVar16 = (ulong)local_4;
          }
          if ((plVar9[3] != uVar16) && ((int)plVar9[0x16] != 1)) {
            if ((int)plVar9[0x16] == 2) {
              plVar10 = (long *)FUN_00367900();
              if (((int)plVar10[0x16] == 2) && (uVar12 = plVar10[3], uVar12 != 0)) {
                uVar20 = 0;
                do {
                  lVar17 = NEON_shl(uVar20,7);
                  lVar14 = *plVar10;
                  lVar15 = lVar14 + lVar17;
                  if (*(int *)(lVar15 + 0x70) == 1) {
                    *(undefined4 *)(lVar15 + 0x70) = 2;
                    pthread_mutex_lock((pthread_mutex_t *)(lVar15 + 8));
                    *(undefined1 *)(lVar15 + 0x60) = 1;
                    pthread_cond_signal((pthread_cond_t *)(lVar15 + 0x30));
                    pthread_mutex_unlock((pthread_mutex_t *)(lVar15 + 8));
                    pthread_join(*(pthread_t *)(lVar14 + lVar17),(void **)0x0);
                    uVar12 = plVar10[3];
                  }
                  uVar20 = uVar20 + 1;
                  *(undefined4 *)(lVar15 + 0x70) = 3;
                } while (uVar20 < uVar12);
              }
              ppVar19 = (pthread_t *)*plVar9;
              ppVar11 = (pthread_t *)plVar9[1];
              *(undefined4 *)(plVar10 + 0x16) = 0;
              for (ppVar2 = ppVar19; ppVar2 != ppVar11; ppVar2 = ppVar2 + 0x10) {
                if ((int)ppVar2[0xe] == 1) {
                  ppVar1 = (pthread_mutex_t *)(ppVar2 + 1);
                  *(undefined4 *)(ppVar2 + 0xe) = 2;
                  pthread_mutex_lock(ppVar1);
                  *(undefined1 *)(ppVar2 + 0xc) = 1;
                  pthread_cond_signal((pthread_cond_t *)(ppVar2 + 6));
                  pthread_mutex_unlock(ppVar1);
                  pthread_join(*ppVar2,(void **)0x0);
                  *(undefined4 *)(ppVar2 + 0xe) = 3;
                  pthread_mutex_destroy(ppVar1);
                  pthread_cond_destroy((pthread_cond_t *)(ppVar2 + 6));
                }
              }
              plVar9[1] = (long)ppVar19;
            }
            plVar9[3] = uVar16;
            if (uVar16 == 1) {
              *(undefined4 *)(plVar9 + 0x16) = 3;
            }
            else {
              *(undefined4 *)(plVar9 + 0x16) = 0;
            }
          }
          pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
        }
        *(undefined4 *)((long)plVar9 + 0x7c) = 0;
        DAT_005329e8 = plVar9;
      }
      else {
        *(undefined4 *)((long)plVar9 + 0x7c) = 0;
        plVar9[3] = 1;
        *(undefined4 *)(plVar9 + 0x16) = 1;
        DAT_005329e8 = plVar9;
      }
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  }
  plVar9 = DAT_005329e8;
  pcVar8 = (char *)cv::TLSDataContainer::getData((TLSDataContainer *)(DAT_005329e8 + 0x14));
  if (((((ulong)plVar9[3] < 2) || (*pcVar8 != '\0')) || (param_2[1] - *param_2 < 2)) ||
     (((0.0 < param_1 && (param_1 < 1.5)) ||
      ((iVar5 = pthread_mutex_trylock((pthread_mutex_t *)&DAT_005093c8), iVar5 != 0 ||
       (cVar4 = FUN_00369c70(plVar9), cVar4 == '\0')))))) {
    uVar16 = (**(code **)(*param_3 + 0x10))(param_3,param_2);
    return uVar16;
  }
  dVar18 = (double)(param_2[1] - *param_2) / (double)(ulong)((plVar9[1] - *plVar9 >> 7) << 2);
  if (dVar18 <= param_1) {
    dVar18 = param_1;
  }
  ppVar1 = (pthread_mutex_t *)(plVar9 + 4);
  pthread_mutex_lock(ppVar1);
  plVar9[0x12] = (long)param_2;
  iVar5 = param_2[1];
  iVar7 = *param_2;
  iVar13 = (int)dVar18;
  lVar15 = *plVar9;
  *(undefined4 *)(plVar9 + 0x10) = 0;
  *(undefined4 *)((long)plVar9 + 0x7c) = 0;
  iVar3 = 0;
  if (iVar13 != 0) {
    iVar3 = ((iVar5 - iVar7) + -1) / iVar13;
  }
  *(int *)(plVar9 + 0x13) = iVar13;
  *(undefined1 *)(plVar9 + 0xf) = 0;
  plVar9[0x11] = (long)param_3;
  *(int *)((long)plVar9 + 0x9c) = iVar3 + 1;
  if (plVar9[1] - lVar15 >> 7 != 0) {
    uVar16 = 0;
    do {
      lVar15 = lVar15 + uVar16 * 0x80;
      uVar16 = uVar16 + 1;
      pthread_mutex_lock((pthread_mutex_t *)(lVar15 + 8));
      *(undefined1 *)(lVar15 + 0x60) = 1;
      pthread_cond_signal((pthread_cond_t *)(lVar15 + 0x30));
      pthread_mutex_unlock((pthread_mutex_t *)(lVar15 + 8));
      lVar15 = *plVar9;
    } while (uVar16 < (ulong)(plVar9[1] - lVar15 >> 7));
    if ((char)plVar9[0xf] != '\0') goto LAB_0036a268;
  }
  do {
    pthread_cond_wait((pthread_cond_t *)(plVar9 + 9),ppVar1);
  } while ((char)plVar9[0xf] == '\0');
LAB_0036a268:
  pthread_mutex_unlock(ppVar1);
  uVar6 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_005093c8);
  return (ulong)uVar6;
}


==================================================================

### FUNC 0036a5d8 (204 bytes) name=PCA

/* cv::PCA::PCA() */

void __thiscall cv::PCA::PCA(PCA *this)

{
  *(undefined8 *)this = DAT_0036a6a8;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(PCA **)(this + 0x40) = this + 8;
  *(PCA **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined4 *)(this + 0x60) = 0x42ff0000;
  *(undefined4 *)(this + 100) = 0;
  *(undefined4 *)(this + 0x68) = 0;
  *(undefined4 *)(this + 0x6c) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(PCA **)(this + 0xa0) = this + 0x68;
  *(PCA **)(this + 0xa8) = this + 0xb0;
  *(undefined8 *)(this + 0xb8) = 0;
  *(undefined8 *)(this + 0xb0) = 0;
  *(undefined4 *)(this + 0xc0) = 0x42ff0000;
  *(undefined4 *)(this + 0xc4) = 0;
  *(undefined4 *)(this + 200) = 0;
  *(undefined4 *)(this + 0xcc) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(PCA **)(this + 0x100) = this + 200;
  *(PCA **)(this + 0x108) = this + 0x110;
  *(undefined8 *)(this + 0x118) = 0;
  *(undefined8 *)(this + 0x110) = 0;
  return;
}


==================================================================

### FUNC 0036a6b0 (5532 bytes) name=operator()

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::PCA::TEMPNAMEPLACEHOLDERVALUE(cv::_InputArray const&, cv::_InputArray const&, int, int) */

PCA * __thiscall
cv::PCA::operator()(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,int param_4)

{
  Mat *this_00;
  uint uVar1;
  int iVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  int iVar8;
  long lVar9;
  char *pcVar10;
  _InputArray *p_Var11;
  undefined8 uVar12;
  long lVar13;
  int *piVar14;
  Mat *pMVar15;
  Mat **ppMVar16;
  undefined4 *puVar17;
  undefined8 *puVar18;
  int iVar19;
  undefined8 *puVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  int iVar26;
  undefined4 local_388;
  undefined4 local_384;
  int local_380;
  int local_37c;
  undefined4 local_378;
  undefined4 local_374;
  undefined4 local_370;
  int local_36c;
  undefined4 local_368;
  undefined4 local_364;
  undefined4 local_360;
  int local_35c;
  int local_358;
  int local_354;
  int local_350;
  int local_34c;
  int local_348;
  int local_344;
  PCA *local_340;
  undefined4 local_338;
  undefined4 local_334;
  undefined8 local_330;
  Mat *local_328;
  undefined4 local_320;
  undefined4 local_31c;
  undefined8 local_318;
  Mat *local_310;
  undefined4 local_308;
  undefined4 local_304;
  undefined8 local_300;
  Mat *pMStack_2f8;
  undefined8 local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  undefined8 local_2d0;
  long local_2c8;
  Mat **local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined8 local_2a0;
  Mat *pMStack_298;
  undefined8 local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  long local_268;
  Mat **local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  undefined8 local_240;
  undefined8 uStack_238;
  long local_230;
  undefined8 uStack_228;
  undefined8 local_220;
  undefined8 uStack_218;
  undefined8 local_210;
  long lStack_208;
  undefined8 *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 uStack_1e8;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  long local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  uint local_180;
  int local_17c;
  int local_178;
  int local_174;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  int *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined4 local_120;
  int local_11c;
  int local_118;
  int local_114;
  long local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined8 uStack_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined4 local_60;
  int local_5c;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  iVar8 = _InputArray::kind(param_1);
  if (iVar8 == 0x10000) {
    pMVar15 = *(Mat **)(param_1 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(uint *)pMVar15;
    local_17c = *(int *)(pMVar15 + 4);
    local_178 = *(int *)(pMVar15 + 8);
    local_174 = *(int *)(pMVar15 + 0xc);
    local_170 = *(undefined8 *)(pMVar15 + 0x10);
    local_168 = *(undefined8 *)(pMVar15 + 0x18);
    local_160 = *(undefined8 *)(pMVar15 + 0x20);
    local_158 = *(undefined8 *)(pMVar15 + 0x28);
    local_150 = *(undefined8 *)(pMVar15 + 0x30);
    local_148 = *(long *)(pMVar15 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (local_148 != 0) {
      piVar14 = (int *)(local_148 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = *piVar14 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(int *)(pMVar15 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar15 + 0x48);
      local_128 = (*(undefined8 **)(pMVar15 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar8 = _InputArray::kind(param_2);
  if (iVar8 == 0x10000) {
    pMVar15 = *(Mat **)(param_2 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(undefined4 *)pMVar15;
    local_11c = *(int *)(pMVar15 + 4);
    local_118 = *(int *)(pMVar15 + 8);
    local_114 = *(int *)(pMVar15 + 0xc);
    local_110 = *(long *)(pMVar15 + 0x10);
    local_108 = *(undefined8 *)(pMVar15 + 0x18);
    local_100 = *(undefined8 *)(pMVar15 + 0x20);
    local_f8 = *(undefined8 *)(pMVar15 + 0x28);
    local_f0 = *(undefined8 *)(pMVar15 + 0x30);
    local_e8 = *(long *)(pMVar15 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar14 = (int *)(local_e8 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = *piVar14 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (2 < *(int *)(pMVar15 + 4)) {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar15);
      goto LAB_0036a744;
    }
    local_d0 = **(undefined8 **)(pMVar15 + 0x48);
    local_c8 = (*(undefined8 **)(pMVar15 + 0x48))[1];
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_0036a744:
  }
  if ((local_180 >> 3 & 0x1ff) != 0) {
    local_330 = 0;
    local_328 = (Mat *)0x0;
    pcVar10 = (char *)String::allocate((String *)&local_330,0x14);
    uVar6 = s_data_channels______1_0046fca0._8_8_;
    uVar12 = s_data_channels______1_0046fca0._0_8_;
    *(undefined4 *)(pcVar10 + 0x10) = s_data_channels______1_0046fca0._16_4_;
    *(undefined8 *)pcVar10 = uVar12;
    *(undefined8 *)(pcVar10 + 8) = uVar6;
    error(-0xd7,(String *)&local_330,
          "cv::PCA& cv::PCA::operator()(cv::InputArray, cv::InputArray, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0x48);
    String::deallocate((String *)&local_330);
  }
  if ((param_3 & 1U) == 0) {
    iVar26 = 0xe;
    iVar25 = 0xf;
    iVar19 = 0xd;
    iVar21 = 1;
    iVar22 = 0xc;
    iVar8 = local_178;
    iVar23 = local_174;
    iVar24 = local_174;
  }
  else {
    iVar26 = 0x16;
    iVar25 = 0x17;
    iVar19 = 0x15;
    iVar22 = 0x14;
    iVar8 = local_174;
    iVar23 = local_178;
    iVar21 = local_178;
    iVar24 = 1;
  }
  iVar2 = iVar8;
  if (iVar23 < iVar8) {
    iVar2 = iVar23;
  }
  if ((iVar2 <= param_4) || (param_4 < 1)) {
    param_4 = iVar2;
  }
  if (iVar23 <= iVar8) {
    iVar22 = iVar19;
    iVar26 = iVar25;
  }
  uVar1 = local_180 & 7;
  if (uVar1 < 5) {
    uVar1 = 5;
  }
  pMVar15 = (Mat *)(this + 0xc0);
  if ((((2 < *(int *)(this + 0xc4)) || (iVar21 != *(int *)(this + 200))) ||
      (iVar24 != *(int *)(this + 0xcc))) ||
     (((*(uint *)(this + 0xc0) & 0xfff) != uVar1 || (*(long *)(this + 0xd0) == 0)))) {
    local_358 = iVar21;
    local_354 = iVar24;
    Mat::create(pMVar15,2,&local_358,uVar1);
  }
  local_2b8 = &local_2b0;
  local_2c0 = &pMStack_2f8;
  uStack_2a8 = 0;
  local_2b0 = 0;
  pMStack_2f8 = _UNK_0036be88;
  local_300 = _DAT_0036be80;
  local_2f0 = 0;
  local_2e8 = 0;
  local_2e0 = 0;
  local_2d8 = 0;
  local_2d0 = 0;
  local_2c8 = 0;
  local_350 = iVar2;
  local_34c = iVar2;
  Mat::create((Mat *)&local_300,2,&local_350,uVar1);
  if (local_110 != 0) {
    if (local_11c < 3) {
      lVar9 = (long)local_114 * (long)local_118;
    }
    else {
      lVar13 = 0;
      lVar9 = 1;
      do {
        piVar14 = local_e0 + lVar13;
        lVar13 = lVar13 + 1;
        lVar9 = lVar9 * *piVar14;
      } while ((int)lVar13 < local_11c);
    }
    if (lVar9 != 0) {
      if ((local_e0[1] != iVar24) || (*local_e0 != iVar21)) {
        local_318 = 0;
        local_310 = (Mat *)0x0;
        pcVar10 = (char *)String::allocate((String *)&local_318,0x17);
        cVar4 = s__mean_size______mean_sz_0046fcf8[0x16];
        uVar7 = s__mean_size______mean_sz_0046fcf8._20_2_;
        uVar6 = s__mean_size______mean_sz_0046fcf8._8_8_;
        uVar12 = s__mean_size______mean_sz_0046fcf8._0_8_;
        *(undefined4 *)(pcVar10 + 0x10) = s__mean_size______mean_sz_0046fcf8._16_4_;
        *(undefined2 *)(pcVar10 + 0x14) = uVar7;
        pcVar10[0x16] = cVar4;
        *(undefined8 *)pcVar10 = uVar12;
        *(undefined8 *)(pcVar10 + 8) = uVar6;
        error(-0xd7,(String *)&local_318,
              "cv::PCA& cv::PCA::operator()(cv::InputArray, cv::InputArray, int, int)",
              "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0x68);
        String::deallocate((String *)&local_318);
      }
      local_50 = 0;
      local_60 = 0x2010000;
      local_58 = pMVar15;
      Mat::convertTo((Mat *)&local_120,(_OutputArray *)&local_60,uVar1,1.0,0.0);
      iVar22 = iVar26;
    }
  }
  local_1e0._0_4_ = 0x1010000;
  local_c0._0_4_ = 0x2010000;
  local_1d0 = 0;
  local_b0 = 0;
  local_50 = 0;
  local_60 = 0x3010000;
  uStack_1d8 = (Mat *)&local_180;
  uStack_b8 = (Mat *)&local_300;
  local_58 = pMVar15;
  calcCovarMatrix((_InputArray *)&local_1e0,(_OutputArray *)&local_c0,(_InputOutputArray *)&local_60
                  ,iVar22,uVar1);
  local_1d0 = 0;
  this_00 = (Mat *)(this + 0x60);
  local_1e0 = CONCAT44(local_1e0._4_4_,0x1010000);
  local_b0 = 0;
  local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
  local_50 = 0;
  local_60 = 0x2010000;
  uStack_1d8 = (Mat *)&local_300;
  uStack_b8 = this_00;
  local_58 = (Mat *)this;
  eigen((_InputArray *)&local_1e0,(_OutputArray *)&local_c0,(_OutputArray *)&local_60);
  if (iVar8 < iVar23) {
    local_1f8 = &local_1f0;
    local_230 = 0;
    uStack_228 = 0;
    local_200 = &uStack_238;
    local_220 = 0;
    uVar3 = 0;
    if (*(int *)(this + 200) != 0) {
      uVar3 = local_178 / *(int *)(this + 200);
    }
    uStack_218 = 0;
    local_210 = 0;
    lStack_208 = 0;
    iVar8 = 0;
    if (*(int *)(this + 0xcc) != 0) {
      iVar8 = local_174 / *(int *)(this + 0xcc);
    }
    uStack_238 = _UNK_0036be88;
    local_240 = _DAT_0036be80;
    uStack_1e8 = 0;
    local_1f0 = 0;
    repeat((cv *)pMVar15,(Mat *)(ulong)uVar3,iVar8,(int)local_1f8);
    if (((local_180 & 0xfff) == uVar1) && (local_1d0 != *(long *)(this + 0xd0))) {
      local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
      local_2a0 = CONCAT44(local_2a0._4_4_,0x1010000);
      local_290 = 0;
      local_b0 = 0;
      local_50 = 0;
      local_60 = 0x2010000;
      pMStack_298 = (Mat *)&local_180;
      uStack_b8 = (Mat *)&local_1e0;
      local_58 = (Mat *)&local_1e0;
      p_Var11 = (_InputArray *)noArray();
      subtract((_InputArray *)&local_2a0,(_InputArray *)&local_c0,(_OutputArray *)&local_60,p_Var11,
               -1);
      if (lStack_1a8 != 0) {
        piVar14 = (int *)(lStack_1a8 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = *piVar14 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (lStack_208 != 0) {
        piVar14 = (int *)(lStack_208 + 0x14);
        do {
          iVar8 = *piVar14;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = iVar8 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar8 == 1) {
          Mat::deallocate((Mat *)&local_240);
        }
      }
      puVar18 = local_198;
      lStack_208 = 0;
      local_230 = 0;
      uStack_218 = 0;
      local_220 = 0;
      uStack_228 = 0;
      if (local_240._4_4_ < 1) {
LAB_0036bb80:
        if (2 < local_1e0._4_4_) goto LAB_0036bbec;
        local_240 = local_1e0;
        uStack_238 = uStack_1d8;
        *local_1f8 = *local_198;
        local_1f8[1] = puVar18[1];
      }
      else {
        iVar8 = 0;
        puVar20 = local_200;
        do {
          *(undefined4 *)puVar20 = 0;
          iVar8 = iVar8 + 1;
          puVar20 = (undefined8 *)((long)puVar20 + 4);
        } while (iVar8 < local_240._4_4_);
        if (local_240._4_4_ < 3) goto LAB_0036bb80;
LAB_0036bbec:
        local_240 = CONCAT44(local_240._4_4_,(undefined4)local_1e0);
        Mat::copySize((Mat *)&local_240,(Mat *)&local_1e0);
      }
      uStack_228 = uStack_1c8;
      local_230 = local_1d0;
      uStack_218 = uStack_1b8;
      local_220 = local_1c0;
      lStack_208 = lStack_1a8;
      local_210 = local_1b0;
    }
    else {
      local_50 = 0;
      local_60 = 0x2010000;
      local_58 = (Mat *)&local_240;
      Mat::convertTo((Mat *)&local_180,(_OutputArray *)&local_60,uVar1,1.0,0.0);
      local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
      local_2a0 = CONCAT44(local_2a0._4_4_,0x1010000);
      local_290 = 0;
      local_b0 = 0;
      local_50 = 0;
      local_60 = 0x2010000;
      pMStack_298 = (Mat *)&local_240;
      uStack_b8 = (Mat *)&local_1e0;
      local_58 = (Mat *)&local_240;
      p_Var11 = (_InputArray *)noArray();
      subtract((_InputArray *)&local_2a0,(_InputArray *)&local_c0,(_OutputArray *)&local_60,p_Var11,
               -1);
    }
    local_b0 = 0;
    local_78 = &local_70;
    local_80 = &uStack_b8;
    uStack_b8 = _UNK_0036be88;
    local_c0 = _DAT_0036be80;
    uStack_a8 = 0;
    local_a0 = 0;
    uStack_68 = 0;
    local_70 = 0;
    uStack_98 = 0;
    local_90 = 0;
    lStack_88 = 0;
    local_348 = iVar2;
    local_344 = iVar23;
    Mat::create((Mat *)&local_c0,2,&local_348,uVar1);
    local_258 = &local_250;
    local_290 = 0;
    pMStack_298 = _UNK_0036be88;
    local_2a0 = _DAT_0036be80;
    iVar8 = 0;
    if ((param_3 & 1U) != 0) {
      iVar8 = 2;
    }
    local_288 = 0;
    local_260 = &pMStack_298;
    local_280 = 0;
    local_278 = 0;
    local_270 = 0;
    local_268 = 0;
    uStack_248 = 0;
    local_250 = 0;
    local_60 = 0x2010000;
    local_338 = 0;
    local_334 = 0;
    local_348 = 0x1010000;
    local_320 = 0;
    local_31c = 0;
    local_330 = CONCAT44(local_330._4_4_,0x1010000);
    local_308 = 0;
    local_304 = 0;
    local_318 = CONCAT44(local_318._4_4_,0x1010000);
    local_50 = 0;
    local_340 = this;
    local_328 = (Mat *)&local_240;
    local_310 = (Mat *)&local_2a0;
    local_58 = (Mat *)&local_c0;
    gemm((_InputArray *)&local_348,(_InputArray *)&local_330,1.0,(_InputArray *)&local_318,0.0,
         (_OutputArray *)&local_60,iVar8);
    if (local_268 != 0) {
      piVar14 = (int *)(local_268 + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_2a0);
      }
    }
    local_268 = 0;
    local_290 = 0;
    local_278 = 0;
    local_280 = 0;
    local_288 = 0;
    if (0 < local_2a0._4_4_) {
      iVar8 = 0;
      ppMVar16 = local_260;
      do {
        *(undefined4 *)ppMVar16 = 0;
        iVar8 = iVar8 + 1;
        ppMVar16 = (Mat **)((long)ppMVar16 + 4);
      } while (iVar8 < local_2a0._4_4_);
    }
    if (local_258 != &local_250) {
      fastFree(local_258);
    }
    if (this != (PCA *)&local_c0) {
      if (lStack_88 != 0) {
        piVar14 = (int *)(lStack_88 + 0x14);
        do {
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = *piVar14 + 1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (*(long *)(this + 0x38) != 0) {
        piVar14 = (int *)(*(long *)(this + 0x38) + 0x14);
        do {
          iVar8 = *piVar14;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
          if (bVar5) {
            *piVar14 = iVar8 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
        if (iVar8 == 1) {
          Mat::deallocate((Mat *)this);
        }
      }
      *(undefined8 *)(this + 0x38) = 0;
      *(undefined8 *)(this + 0x10) = 0;
      *(undefined8 *)(this + 0x28) = 0;
      *(undefined8 *)(this + 0x20) = 0;
      *(undefined8 *)(this + 0x18) = 0;
      if (*(int *)(this + 4) < 1) {
        *(undefined4 *)this = (undefined4)local_c0;
LAB_0036b618:
        if (2 < local_c0._4_4_) goto LAB_0036b624;
        *(int *)(this + 4) = local_c0._4_4_;
        puVar18 = *(undefined8 **)(this + 0x48);
        *(undefined4 *)(this + 8) = (undefined4)uStack_b8;
        *(undefined4 *)(this + 0xc) = uStack_b8._4_4_;
        *puVar18 = *local_78;
        puVar18[1] = local_78[1];
      }
      else {
        iVar8 = 0;
        puVar17 = *(undefined4 **)(this + 0x40);
        do {
          *puVar17 = 0;
          iVar8 = iVar8 + 1;
          puVar17 = puVar17 + 1;
        } while (iVar8 < *(int *)(this + 4));
        *(undefined4 *)this = (undefined4)local_c0;
        if (*(int *)(this + 4) < 3) goto LAB_0036b618;
LAB_0036b624:
        Mat::copySize((Mat *)this,(Mat *)&local_c0);
      }
      *(undefined8 *)(this + 0x18) = uStack_a8;
      *(undefined8 *)(this + 0x10) = local_b0;
      *(undefined8 *)(this + 0x28) = uStack_98;
      *(undefined8 *)(this + 0x20) = local_a0;
      *(long *)(this + 0x38) = lStack_88;
      *(undefined8 *)(this + 0x30) = local_90;
    }
    if (0 < param_4) {
      iVar8 = 0;
      do {
        iVar23 = iVar8 + 1;
        local_388 = 0x80000000;
        local_384 = 0x7fffffff;
        local_380 = iVar8;
        local_37c = iVar23;
        Mat::Mat((Mat *)&local_60,(Mat *)this,(Range *)&local_380,(Range *)&local_388);
        local_308 = 0;
        local_318 = CONCAT44(local_318._4_4_,0x1010000);
        local_304 = 0;
        local_290 = 0;
        local_2a0 = CONCAT44(local_2a0._4_4_,0x3010000);
        local_310 = (Mat *)&local_60;
        pMStack_298 = (Mat *)&local_60;
        p_Var11 = (_InputArray *)noArray();
        normalize((_InputArray *)&local_318,(_InputOutputArray *)&local_2a0,1.0,0.0,4,-1,p_Var11);
        if (local_28 != 0) {
          piVar14 = (int *)(local_28 + 0x14);
          do {
            iVar8 = *piVar14;
            cVar4 = '\x01';
            bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
            if (bVar5) {
              *piVar14 = iVar8 + -1;
              cVar4 = ExclusiveMonitorsStatus();
            }
          } while (cVar4 != '\0');
          if (iVar8 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        local_28 = 0;
        local_50 = 0;
        local_38 = 0;
        local_40 = 0;
        local_48 = 0;
        if (0 < local_5c) {
          iVar8 = 0;
          puVar17 = local_20;
          do {
            *puVar17 = 0;
            iVar8 = iVar8 + 1;
            puVar17 = puVar17 + 1;
          } while (iVar8 < local_5c);
        }
        if (local_18 != auStack_10) {
          fastFree(local_18);
        }
        iVar8 = iVar23;
      } while (iVar23 != param_4);
    }
    if (lStack_88 != 0) {
      piVar14 = (int *)(lStack_88 + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar8 = 0;
      puVar18 = local_80;
      do {
        iVar8 = iVar8 + 1;
        *(undefined4 *)puVar18 = 0;
        puVar18 = (undefined8 *)((long)puVar18 + 4);
      } while (iVar8 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (lStack_1a8 != 0) {
      piVar14 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (0 < local_1e0._4_4_) {
      iVar8 = 0;
      puVar18 = local_1a0;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar8 = iVar8 + 1;
        puVar18 = (undefined8 *)((long)puVar18 + 4);
      } while (iVar8 < local_1e0._4_4_);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
    if (lStack_208 != 0) {
      piVar14 = (int *)(lStack_208 + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
    lStack_208 = 0;
    local_230 = 0;
    uStack_218 = 0;
    local_220 = 0;
    uStack_228 = 0;
    if (0 < local_240._4_4_) {
      iVar8 = 0;
      puVar18 = local_200;
      do {
        *(undefined4 *)puVar18 = 0;
        iVar8 = iVar8 + 1;
        puVar18 = (undefined8 *)((long)puVar18 + 4);
      } while (iVar8 < local_240._4_4_);
    }
    if (local_1f8 != &local_1f0) {
      fastFree(local_1f8);
    }
  }
  if (iVar2 <= param_4) goto LAB_0036af20;
  local_378 = 0x80000000;
  local_374 = 0x7fffffff;
  local_370 = 0;
  local_36c = param_4;
  Mat::Mat((Mat *)&local_c0,this_00,(Range *)&local_370,(Range *)&local_378);
  local_1f8 = &local_1f0;
  local_230 = 0;
  local_200 = &uStack_238;
  uStack_228 = 0;
  local_220 = 0;
  uStack_218 = 0;
  local_210 = 0;
  lStack_208 = 0;
  uStack_238 = _UNK_0036be88;
  local_240 = _DAT_0036be80;
  local_50 = 0;
  uStack_1e8 = 0;
  local_1f0 = 0;
  local_60 = 0x2010000;
  local_58 = (Mat *)&local_240;
  Mat::copyTo((Mat *)&local_c0,(_OutputArray *)&local_60);
  if (this_00 != (Mat *)&local_240) {
    if (lStack_208 != 0) {
      piVar14 = (int *)(lStack_208 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = *piVar14 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(long *)(this + 0x98) != 0) {
      piVar14 = (int *)(*(long *)(this + 0x98) + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate(this_00);
      }
    }
    *(undefined8 *)(this + 0x98) = 0;
    *(undefined8 *)(this + 0x70) = 0;
    *(undefined8 *)(this + 0x88) = 0;
    *(undefined8 *)(this + 0x80) = 0;
    *(undefined8 *)(this + 0x78) = 0;
    if (*(int *)(this + 100) < 1) {
      *(undefined4 *)(this + 0x60) = (undefined4)local_240;
LAB_0036ab78:
      if (2 < local_240._4_4_) goto LAB_0036ab84;
      puVar18 = *(undefined8 **)(this + 0xa8);
      *(int *)(this + 100) = local_240._4_4_;
      *(undefined4 *)(this + 0x68) = (undefined4)uStack_238;
      uVar12 = *local_1f8;
      *(undefined4 *)(this + 0x6c) = uStack_238._4_4_;
      *puVar18 = uVar12;
      puVar18[1] = local_1f8[1];
    }
    else {
      iVar8 = 0;
      puVar17 = *(undefined4 **)(this + 0xa0);
      do {
        *puVar17 = 0;
        iVar8 = iVar8 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar8 < *(int *)(this + 100));
      *(undefined4 *)this_00 = (undefined4)local_240;
      if (*(int *)(this + 100) < 3) goto LAB_0036ab78;
LAB_0036ab84:
      Mat::copySize(this_00,(Mat *)&local_240);
    }
    *(undefined8 *)(this + 0x78) = uStack_228;
    *(long *)(this + 0x70) = local_230;
    *(undefined8 *)(this + 0x88) = uStack_218;
    *(undefined8 *)(this + 0x80) = local_220;
    *(long *)(this + 0x98) = lStack_208;
    *(undefined8 *)(this + 0x90) = local_210;
  }
  if (lStack_208 != 0) {
    piVar14 = (int *)(lStack_208 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_240);
    }
  }
  lStack_208 = 0;
  local_230 = 0;
  uStack_218 = 0;
  local_220 = 0;
  uStack_228 = 0;
  if (0 < local_240._4_4_) {
    iVar8 = 0;
    puVar18 = local_200;
    do {
      *(undefined4 *)puVar18 = 0;
      iVar8 = iVar8 + 1;
      puVar18 = (undefined8 *)((long)puVar18 + 4);
    } while (iVar8 < local_240._4_4_);
  }
  if (local_1f8 != &local_1f0) {
    fastFree(local_1f8);
  }
  if (lStack_88 != 0) {
    piVar14 = (int *)(lStack_88 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_c0._4_4_) {
    iVar8 = 0;
    puVar18 = local_80;
    do {
      iVar8 = iVar8 + 1;
      *(undefined4 *)puVar18 = 0;
      puVar18 = (undefined8 *)((long)puVar18 + 4);
    } while (iVar8 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  local_368 = 0x80000000;
  local_364 = 0x7fffffff;
  local_360 = 0;
  local_35c = param_4;
  Mat::Mat((Mat *)&local_60,(Mat *)this,(Range *)&local_360,(Range *)&local_368);
  local_198 = &local_190;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1a0 = &uStack_1d8;
  uStack_188 = 0;
  local_190 = 0;
  local_1c0 = 0;
  uStack_1d8 = _UNK_0036be88;
  local_1e0 = _DAT_0036be80;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_b0 = 0;
  local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
  uStack_b8 = (Mat *)&local_1e0;
  Mat::copyTo((Mat *)&local_60,(_OutputArray *)&local_c0);
  if (this == (PCA *)&local_1e0) {
    lVar9 = *(long *)(this + 0x38);
  }
  else {
    if (lStack_1a8 != 0) {
      piVar14 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = *piVar14 + 1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
    }
    if (*(long *)(this + 0x38) != 0) {
      piVar14 = (int *)(*(long *)(this + 0x38) + 0x14);
      do {
        iVar8 = *piVar14;
        cVar4 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar5) {
          *piVar14 = iVar8 + -1;
          cVar4 = ExclusiveMonitorsStatus();
        }
      } while (cVar4 != '\0');
      if (iVar8 == 1) {
        Mat::deallocate((Mat *)this);
      }
    }
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    if (*(int *)(this + 4) < 1) {
      *(undefined4 *)this = (undefined4)local_1e0;
LAB_0036adec:
      if (2 < local_1e0._4_4_) goto LAB_0036adf8;
      puVar18 = *(undefined8 **)(this + 0x48);
      *(int *)(this + 4) = local_1e0._4_4_;
      *(undefined4 *)(this + 8) = (undefined4)uStack_1d8;
      uVar12 = *local_198;
      *(undefined4 *)(this + 0xc) = uStack_1d8._4_4_;
      *puVar18 = uVar12;
      puVar18[1] = local_198[1];
    }
    else {
      iVar8 = 0;
      puVar17 = *(undefined4 **)(this + 0x40);
      do {
        *puVar17 = 0;
        iVar8 = iVar8 + 1;
        puVar17 = puVar17 + 1;
      } while (iVar8 < *(int *)(this + 4));
      *(undefined4 *)this = (undefined4)local_1e0;
      if (*(int *)(this + 4) < 3) goto LAB_0036adec;
LAB_0036adf8:
      Mat::copySize((Mat *)this,(Mat *)&local_1e0);
    }
    *(undefined8 *)(this + 0x18) = uStack_1c8;
    *(long *)(this + 0x10) = local_1d0;
    *(undefined8 *)(this + 0x28) = uStack_1b8;
    *(undefined8 *)(this + 0x20) = local_1c0;
    *(long *)(this + 0x38) = lStack_1a8;
    *(undefined8 *)(this + 0x30) = local_1b0;
    lVar9 = lStack_1a8;
  }
  if (lVar9 != 0) {
    piVar14 = (int *)(lVar9 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar8 = 0;
    puVar18 = local_1a0;
    do {
      *(undefined4 *)puVar18 = 0;
      iVar8 = iVar8 + 1;
      puVar18 = (undefined8 *)((long)puVar18 + 4);
    } while (iVar8 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
LAB_0036af20:
  if (local_2c8 != 0) {
    piVar14 = (int *)(local_2c8 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_300);
    }
  }
  local_2c8 = 0;
  local_2f0 = 0;
  local_2d8 = 0;
  local_2e0 = 0;
  local_2e8 = 0;
  if (0 < local_300._4_4_) {
    iVar8 = 0;
    ppMVar16 = local_2c0;
    do {
      *(undefined4 *)ppMVar16 = 0;
      iVar8 = iVar8 + 1;
      ppMVar16 = (Mat **)((long)ppMVar16 + 4);
    } while (iVar8 < local_300._4_4_);
  }
  if (local_2b8 != &local_2b0) {
    fastFree(local_2b8);
  }
  if (local_e8 != 0) {
    piVar14 = (int *)(local_e8 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_110 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar8 = 0;
    piVar14 = local_e0;
    do {
      *piVar14 = 0;
      iVar8 = iVar8 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar8 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar14 = (int *)(local_148 + 0x14);
    do {
      iVar8 = *piVar14;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar5) {
        *piVar14 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  local_148 = 0;
  local_170 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  if (0 < local_17c) {
    iVar8 = 0;
    piVar14 = local_140;
    do {
      *piVar14 = 0;
      iVar8 = iVar8 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar8 < local_17c);
  }
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  return this;
}


==================================================================

### FUNC 0036be90 (260 bytes) name=PCA

/* cv::PCA::PCA(cv::_InputArray const&, cv::_InputArray const&, int, int) */

void __thiscall
cv::PCA::PCA(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,int param_4)

{
  *(undefined8 *)this = DAT_0036bfe8;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(PCA **)(this + 0x40) = this + 8;
  *(PCA **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined4 *)(this + 0x60) = 0x42ff0000;
  *(undefined4 *)(this + 100) = 0;
  *(undefined4 *)(this + 0x68) = 0;
  *(undefined4 *)(this + 0x6c) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(PCA **)(this + 0xa0) = this + 0x68;
  *(PCA **)(this + 0xa8) = this + 0xb0;
  *(undefined8 *)(this + 0xb8) = 0;
  *(undefined8 *)(this + 0xb0) = 0;
  *(undefined4 *)(this + 0xc0) = 0x42ff0000;
  *(undefined4 *)(this + 0xc4) = 0;
  *(undefined4 *)(this + 200) = 0;
  *(undefined4 *)(this + 0xcc) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(PCA **)(this + 0x100) = this + 200;
  *(PCA **)(this + 0x108) = this + 0x110;
  *(undefined8 *)(this + 0x118) = 0;
  *(undefined8 *)(this + 0x110) = 0;
  operator()(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0036bff0 (1108 bytes) name=write

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::write(cv::FileStorage&) const */

void __thiscall cv::PCA::write(PCA *this,FileStorage *param_1)

{
  uint uVar1;
  undefined4 uVar2;
  undefined1 uVar3;
  undefined2 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char cVar7;
  char *pcVar8;
  undefined4 *puVar9;
  FileStorage *pFVar10;
  undefined2 *puVar11;
  undefined8 *puVar12;
  undefined8 local_10;
  undefined8 local_8;
  
  cVar7 = (**(code **)(*(long *)param_1 + 0x18))(param_1);
  if (cVar7 == '\0') {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_10,0xd);
    cVar7 = s_fs_isOpened___0046fd10[0xc];
    uVar2 = s_fs_isOpened___0046fd10._8_4_;
    *(undefined8 *)pcVar8 = s_fs_isOpened___0046fd10._0_8_;
    *(undefined4 *)(pcVar8 + 8) = uVar2;
    pcVar8[0xc] = cVar7;
    error(-0xd7,(String *)&local_10,"void cv::PCA::write(cv::FileStorage&) const",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0x99);
    String::deallocate((String *)&local_10);
  }
  local_10 = 0;
  local_8 = 0;
  puVar9 = (undefined4 *)String::allocate((String *)&local_10,4);
  *puVar9 = DAT_0046fd20;
  pFVar10 = (FileStorage *)operator<<(param_1,(String *)&local_10);
  String::deallocate((String *)&local_10);
  local_10 = 0;
  local_8 = 0;
  puVar11 = (undefined2 *)String::allocate((String *)&local_10,3);
  uVar3 = DAT_0046fd2a;
  *puVar11 = DAT_0046fd28;
  *(undefined1 *)(puVar11 + 1) = uVar3;
  operator<<(pFVar10,(String *)&local_10);
  String::deallocate((String *)&local_10);
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)String::allocate((String *)&local_10,7);
  cVar7 = s_vectors_0046fd30[6];
  uVar4 = s_vectors_0046fd30._4_2_;
  *(undefined4 *)pcVar8 = s_vectors_0046fd30._0_4_;
  *(undefined2 *)(pcVar8 + 4) = uVar4;
  pcVar8[6] = cVar7;
  pFVar10 = (FileStorage *)operator<<(param_1,(String *)&local_10);
  String::deallocate((String *)&local_10);
  cVar7 = (**(code **)(*(long *)pFVar10 + 0x18))(pFVar10);
  if (cVar7 != '\0') {
    if (*(int *)(pFVar10 + 0x40) == 6) {
      local_10 = 0;
      local_8 = 0;
      puVar12 = (undefined8 *)String::allocate((String *)&local_10,0x1e);
      uVar4 = DAT_0046fd54;
      uVar2 = DAT_0046fd50;
      uVar6 = _LAB_0046fd40;
      uVar5 = _LAB_0046fd38;
      puVar12[2] = DAT_0046fd48;
      *(undefined4 *)(puVar12 + 3) = uVar2;
      *(undefined2 *)((long)puVar12 + 0x1c) = uVar4;
      *puVar12 = uVar5;
      puVar12[1] = uVar6;
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const _Tp&) [with _Tp = cv::Mat]",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/persistence.hpp",
            0x428);
      String::deallocate((String *)&local_10);
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)this);
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    else {
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)this);
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    if ((uVar1 >> 2 & 1) != 0) {
      *(undefined4 *)(pFVar10 + 0x40) = 6;
    }
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)String::allocate((String *)&local_10,6);
  uVar4 = s_values_0046fdb0._4_2_;
  *(undefined4 *)pcVar8 = s_values_0046fdb0._0_4_;
  *(undefined2 *)(pcVar8 + 4) = uVar4;
  pFVar10 = (FileStorage *)operator<<(param_1,(String *)&local_10);
  String::deallocate((String *)&local_10);
  cVar7 = (**(code **)(*(long *)pFVar10 + 0x18))(pFVar10);
  if (cVar7 != '\0') {
    if (*(int *)(pFVar10 + 0x40) == 6) {
      local_10 = 0;
      local_8 = 0;
      puVar12 = (undefined8 *)String::allocate((String *)&local_10,0x1e);
      uVar4 = DAT_0046fd54;
      uVar2 = DAT_0046fd50;
      uVar6 = _LAB_0046fd40;
      uVar5 = _LAB_0046fd38;
      puVar12[2] = DAT_0046fd48;
      *(undefined4 *)(puVar12 + 3) = uVar2;
      *(undefined2 *)((long)puVar12 + 0x1c) = uVar4;
      *puVar12 = uVar5;
      puVar12[1] = uVar6;
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const _Tp&) [with _Tp = cv::Mat]",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/persistence.hpp",
            0x428);
      String::deallocate((String *)&local_10);
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)(this + 0x60));
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    else {
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)(this + 0x60));
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    if ((uVar1 >> 2 & 1) != 0) {
      *(undefined4 *)(pFVar10 + 0x40) = 6;
    }
  }
  local_10 = 0;
  local_8 = 0;
  puVar9 = (undefined4 *)String::allocate((String *)&local_10,4);
  *puVar9 = DAT_0046fdb8;
  pFVar10 = (FileStorage *)operator<<(param_1,(String *)&local_10);
  String::deallocate((String *)&local_10);
  cVar7 = (**(code **)(*(long *)pFVar10 + 0x18))(pFVar10);
  if (cVar7 != '\0') {
    if (*(int *)(pFVar10 + 0x40) == 6) {
      local_10 = 0;
      local_8 = 0;
      puVar12 = (undefined8 *)String::allocate((String *)&local_10,0x1e);
      uVar4 = DAT_0046fd54;
      uVar2 = DAT_0046fd50;
      uVar6 = _LAB_0046fd40;
      uVar5 = _LAB_0046fd38;
      puVar12[2] = DAT_0046fd48;
      *(undefined4 *)(puVar12 + 3) = uVar2;
      *(undefined2 *)((long)puVar12 + 0x1c) = uVar4;
      *puVar12 = uVar5;
      puVar12[1] = uVar6;
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const _Tp&) [with _Tp = cv::Mat]",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/persistence.hpp",
            0x428);
      String::deallocate((String *)&local_10);
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)(this + 0xc0));
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    else {
      cv::write(pFVar10,(String *)(pFVar10 + 0x18),(Mat *)(this + 0xc0));
      uVar1 = *(uint *)(pFVar10 + 0x40);
    }
    if ((uVar1 >> 2 & 1) != 0) {
      *(undefined4 *)(pFVar10 + 0x40) = 6;
    }
  }
  return;
}


==================================================================

### FUNC 0036c500 (1028 bytes) name=read

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::read(cv::FileNode const&) */

void __thiscall cv::PCA::read(PCA *this,FileNode *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined2 uVar4;
  undefined1 uVar5;
  undefined4 uVar6;
  int iVar7;
  undefined8 *puVar8;
  long lVar9;
  long *plVar10;
  char *local_140;
  undefined8 local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined8 local_120;
  long alStack_118 [7];
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  long alStack_b8 [7];
  undefined8 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  undefined8 local_60;
  long alStack_58 [7];
  long *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  lVar9 = *(long *)(param_1 + 8);
  if (lVar9 == 0) {
    local_60 = lVar9;
    alStack_58[0] = lVar9;
    puVar8 = (undefined8 *)String::allocate((String *)&local_60,0xb);
    uVar5 = DAT_0046fdca;
    uVar4 = DAT_0046fdc8;
    *puVar8 = DAT_0046fdc0;
    *(undefined2 *)(puVar8 + 1) = uVar4;
    *(undefined1 *)((long)puVar8 + 10) = uVar5;
    error(-0xd7,(String *)&local_60,"void cv::PCA::read(const cv::FileNode&)",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0xa3);
    String::deallocate((String *)&local_60);
  }
  FileNode::operator[]((char *)param_1);
  local_140 = (char *)0x0;
  local_138 = 0;
  cv::read((FileNode *)&local_60,(String *)&local_140,(String *)&local_140);
  if ((local_140 != "PCA") &&
     ((local_140 == (char *)0x0 || (iVar7 = strcmp(local_140,"PCA"), iVar7 != 0)))) {
    local_130 = 0;
    local_128 = 0;
    puVar8 = (undefined8 *)String::allocate((String *)&local_130,0xd);
    uVar5 = DAT_0046fddc;
    uVar6 = DAT_0046fdd8;
    *puVar8 = _LAB_0046fdd0;
    *(undefined4 *)(puVar8 + 1) = uVar6;
    *(undefined1 *)((long)puVar8 + 0xc) = uVar5;
    error(-0xd7,(String *)&local_130,"void cv::PCA::read(const cv::FileNode&)",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0xa5);
    String::deallocate((String *)&local_130);
  }
  FileNode::operator[]((char *)param_1);
  local_d8 = &local_d0;
  local_e0 = alStack_118;
  uStack_c8 = 0;
  local_d0 = 0;
  alStack_118[1] = 0;
  alStack_118[2] = 0;
  alStack_118[0] = _UNK_0036c9b8;
  local_120 = _DAT_0036c9b0;
  alStack_118[3] = 0;
  alStack_118[4] = 0;
  alStack_118[5] = 0;
  alStack_118[6] = 0;
  cv::read((FileNode *)&local_60,(Mat *)this,(Mat *)&local_120);
  if (alStack_118[6] != 0) {
    piVar1 = (int *)(alStack_118[6] + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  alStack_118[6] = 0;
  alStack_118[1] = 0;
  alStack_118[4] = 0;
  alStack_118[3] = 0;
  alStack_118[2] = 0;
  if (0 < local_120._4_4_) {
    iVar7 = 0;
    plVar10 = local_e0;
    do {
      *(undefined4 *)plVar10 = 0;
      iVar7 = iVar7 + 1;
      plVar10 = (long *)((long)plVar10 + 4);
    } while (iVar7 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  FileNode::operator[]((char *)param_1);
  alStack_b8[1] = 0;
  local_78 = &local_70;
  local_80 = alStack_b8;
  uStack_68 = 0;
  local_70 = 0;
  alStack_b8[0] = _UNK_0036c9b8;
  local_c0 = _DAT_0036c9b0;
  alStack_b8[2] = 0;
  alStack_b8[3] = 0;
  alStack_b8[4] = 0;
  alStack_b8[5] = 0;
  alStack_b8[6] = 0;
  cv::read((FileNode *)&local_60,(Mat *)(this + 0x60),(Mat *)&local_c0);
  if (alStack_b8[6] != 0) {
    piVar1 = (int *)(alStack_b8[6] + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  alStack_b8[6] = 0;
  alStack_b8[1] = 0;
  alStack_b8[4] = 0;
  alStack_b8[3] = 0;
  alStack_b8[2] = 0;
  if (0 < local_c0._4_4_) {
    iVar7 = 0;
    plVar10 = local_80;
    do {
      *(undefined4 *)plVar10 = 0;
      iVar7 = iVar7 + 1;
      plVar10 = (long *)((long)plVar10 + 4);
    } while (iVar7 < local_c0._4_4_);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  FileNode::operator[]((char *)param_1);
  local_18 = &local_10;
  local_20 = alStack_58;
  alStack_58[0] = _UNK_0036c9b8;
  local_60 = _DAT_0036c9b0;
  alStack_58[1] = 0;
  alStack_58[2] = 0;
  alStack_58[3] = 0;
  alStack_58[4] = 0;
  alStack_58[5] = 0;
  alStack_58[6] = 0;
  uStack_8 = 0;
  local_10 = 0;
  cv::read((FileNode *)&local_c0,(Mat *)(this + 0xc0),(Mat *)&local_60);
  if (alStack_58[6] != 0) {
    piVar1 = (int *)(alStack_58[6] + 0x14);
    do {
      iVar7 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar7 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  alStack_58[6] = 0;
  alStack_58[1] = 0;
  alStack_58[4] = 0;
  alStack_58[3] = 0;
  alStack_58[2] = 0;
  if (0 < local_60._4_4_) {
    iVar7 = 0;
    plVar10 = local_20;
    do {
      *(undefined4 *)plVar10 = 0;
      iVar7 = iVar7 + 1;
      plVar10 = (long *)((long)plVar10 + 4);
    } while (iVar7 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  String::deallocate((String *)&local_140);
  return;
}


==================================================================

### FUNC 0036c9c0 (6568 bytes) name=operator()

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::PCA::TEMPNAMEPLACEHOLDERVALUE(cv::_InputArray const&, cv::_InputArray const&, int, double) */

PCA * __thiscall
cv::PCA::operator()(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,double param_4)

{
  Mat *this_00;
  uint uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined4 uVar9;
  int iVar10;
  int iVar11;
  char *pcVar12;
  long lVar13;
  undefined8 uVar14;
  _InputArray *p_Var15;
  Mat **ppMVar16;
  long lVar17;
  double *pdVar18;
  double *pdVar19;
  undefined8 *puVar20;
  Mat *pMVar21;
  _OutputArray **pp_Var22;
  undefined4 *puVar23;
  float *pfVar24;
  float *pfVar25;
  long *plVar26;
  int *piVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  float fVar33;
  double dVar34;
  float fVar35;
  double dVar36;
  undefined4 local_450;
  undefined4 local_44c;
  int local_448;
  int local_444;
  undefined4 local_440;
  undefined4 local_43c;
  undefined4 local_438;
  int local_434;
  undefined4 local_430;
  undefined4 local_42c;
  undefined4 local_428;
  int local_424;
  int local_420;
  int local_41c;
  int local_418;
  int local_414;
  int local_410;
  int local_40c;
  int local_408;
  int local_404;
  int local_400;
  int local_3fc;
  undefined8 local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e8;
  undefined8 local_3e0;
  undefined8 local_3d8;
  PCA *local_3d0;
  undefined4 local_3c8;
  undefined4 local_3c4;
  undefined8 local_3c0;
  Mat *pMStack_3b8;
  undefined8 local_3b0;
  undefined8 local_3a8;
  undefined8 local_3a0;
  undefined8 local_398;
  undefined8 local_390;
  long local_388;
  Mat **local_380;
  undefined8 *local_378;
  undefined8 local_370;
  undefined8 uStack_368;
  undefined8 local_360;
  Mat *pMStack_358;
  undefined8 local_350;
  undefined8 local_348;
  undefined8 local_340;
  undefined8 local_338;
  undefined8 local_330;
  long local_328;
  Mat **local_320;
  undefined8 *local_318;
  undefined8 local_310;
  undefined8 uStack_308;
  undefined8 local_300;
  undefined8 uStack_2f8;
  undefined8 local_2f0;
  undefined8 uStack_2e8;
  undefined8 local_2e0;
  undefined8 uStack_2d8;
  undefined8 local_2d0;
  long lStack_2c8;
  undefined8 *local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined8 local_2a0;
  undefined8 uStack_298;
  undefined8 local_290;
  undefined8 uStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  undefined8 *local_260;
  undefined8 *local_258;
  undefined8 local_250;
  undefined8 uStack_248;
  uint local_240;
  int local_23c;
  int local_238;
  int local_234;
  undefined8 local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  undefined8 local_210;
  long local_208;
  int *local_200;
  undefined8 *local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined4 local_1e0;
  int local_1dc;
  int local_1d8;
  int local_1d4;
  long local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  int *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined8 local_180;
  Mat *pMStack_178;
  long local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  long local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined8 local_c0;
  undefined8 uStack_b8;
  float *local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined8 *local_80;
  long *local_78;
  long local_70;
  undefined8 uStack_68;
  undefined4 local_60;
  int local_5c;
  _OutputArray *local_58;
  double *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  _OutputArray **local_20;
  long *local_18;
  long local_10;
  undefined8 local_8;
  
  iVar10 = _InputArray::kind(param_1);
  if (iVar10 == 0x10000) {
    pMVar21 = *(Mat **)(param_1 + 8);
    local_200 = &local_238;
    local_1f8 = &local_1f0;
    local_240 = *(uint *)pMVar21;
    local_23c = *(int *)(pMVar21 + 4);
    local_238 = *(int *)(pMVar21 + 8);
    local_234 = *(int *)(pMVar21 + 0xc);
    local_230 = *(undefined8 *)(pMVar21 + 0x10);
    local_228 = *(undefined8 *)(pMVar21 + 0x18);
    local_220 = *(undefined8 *)(pMVar21 + 0x20);
    local_218 = *(undefined8 *)(pMVar21 + 0x28);
    local_210 = *(undefined8 *)(pMVar21 + 0x30);
    local_208 = *(long *)(pMVar21 + 0x38);
    local_1e8 = 0;
    local_1f0 = 0;
    if (local_208 != 0) {
      piVar27 = (int *)(local_208 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = *piVar27 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar21 + 4) < 3) {
      local_1f0 = **(undefined8 **)(pMVar21 + 0x48);
      local_1e8 = (*(undefined8 **)(pMVar21 + 0x48))[1];
    }
    else {
      local_23c = 0;
      Mat::copySize((Mat *)&local_240,pMVar21);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar10 = _InputArray::kind(param_2);
  if (iVar10 == 0x10000) {
    pMVar21 = *(Mat **)(param_2 + 8);
    local_1a0 = &local_1d8;
    local_198 = &local_190;
    local_1e0 = *(undefined4 *)pMVar21;
    local_1dc = *(int *)(pMVar21 + 4);
    local_1d8 = *(int *)(pMVar21 + 8);
    local_1d4 = *(int *)(pMVar21 + 0xc);
    local_1d0 = *(long *)(pMVar21 + 0x10);
    local_1c8 = *(undefined8 *)(pMVar21 + 0x18);
    local_1c0 = *(undefined8 *)(pMVar21 + 0x20);
    local_1b8 = *(undefined8 *)(pMVar21 + 0x28);
    local_1b0 = *(undefined8 *)(pMVar21 + 0x30);
    local_1a8 = *(long *)(pMVar21 + 0x38);
    local_188 = 0;
    local_190 = 0;
    if (local_1a8 != 0) {
      piVar27 = (int *)(local_1a8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = *piVar27 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (2 < *(int *)(pMVar21 + 4)) {
      local_1dc = 0;
      Mat::copySize((Mat *)&local_1e0,pMVar21);
      goto LAB_0036ca54;
    }
    local_190 = **(undefined8 **)(pMVar21 + 0x48);
    local_188 = (*(undefined8 **)(pMVar21 + 0x48))[1];
  }
  else {
    _InputArray::getMat_((int)param_2);
LAB_0036ca54:
  }
  if ((local_240 >> 3 & 0x1ff) != 0) {
    local_3f8 = 0;
    local_3f0 = 0;
    pcVar12 = (char *)String::allocate((String *)&local_3f8,0x14);
    uVar5 = s_data_channels______1_0046fca0._8_8_;
    uVar14 = s_data_channels______1_0046fca0._0_8_;
    *(undefined4 *)(pcVar12 + 0x10) = s_data_channels______1_0046fca0._16_4_;
    *(undefined8 *)pcVar12 = uVar14;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    error(-0xd7,(String *)&local_3f8,
          "cv::PCA& cv::PCA::operator()(cv::InputArray, cv::InputArray, int, double)",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0xd1);
    String::deallocate((String *)&local_3f8);
  }
  if ((param_3 & 1U) == 0) {
    iVar32 = 0xd;
    iVar28 = 1;
    iVar11 = 0xc;
    iVar10 = local_238;
    iVar29 = local_234;
    iVar31 = local_234;
  }
  else {
    iVar32 = 0x15;
    iVar11 = 0x14;
    iVar10 = local_234;
    iVar29 = local_238;
    iVar28 = local_238;
    iVar31 = 1;
  }
  if ((param_4 <= 0.0) || (1.0 < param_4)) {
    local_3e8 = 0;
    local_3e0 = 0;
    pcVar12 = (char *)String::allocate((String *)&local_3e8,0x2d);
    cVar3 = s_retainedVariance_>_0____retained_0046fde0[0x2c];
    uVar9 = s_retainedVariance_>_0____retained_0046fde0._40_4_;
    uVar8 = s_retainedVariance_>_0____retained_0046fde0._24_8_;
    uVar7 = s_retainedVariance_>_0____retained_0046fde0._16_8_;
    uVar5 = s_retainedVariance_>_0____retained_0046fde0._8_8_;
    uVar14 = s_retainedVariance_>_0____retained_0046fde0._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_retainedVariance_>_0____retained_0046fde0._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar9;
    pcVar12[0x2c] = cVar3;
    *(undefined8 *)pcVar12 = uVar14;
    *(undefined8 *)(pcVar12 + 8) = uVar5;
    *(undefined8 *)(pcVar12 + 0x10) = uVar7;
    *(undefined8 *)(pcVar12 + 0x18) = uVar8;
    error(-0xd7,(String *)&local_3e8,
          "cv::PCA& cv::PCA::operator()(cv::InputArray, cv::InputArray, int, double)",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0xe1);
    String::deallocate((String *)&local_3e8);
  }
  iVar30 = iVar10;
  if (iVar29 <= iVar10) {
    iVar30 = iVar29;
    iVar11 = iVar32;
  }
  pMVar21 = (Mat *)(this + 0xc0);
  uVar1 = local_240 & 7;
  if (uVar1 < 5) {
    uVar1 = 5;
  }
  if ((((2 < *(int *)(this + 0xc4)) || (iVar28 != *(int *)(this + 200))) ||
      (iVar31 != *(int *)(this + 0xcc))) ||
     (((*(uint *)(this + 0xc0) & 0xfff) != uVar1 || (*(long *)(this + 0xd0) == 0)))) {
    local_420 = iVar28;
    local_41c = iVar31;
    Mat::create(pMVar21,2,&local_420,uVar1);
  }
  local_378 = &local_370;
  local_380 = &pMStack_3b8;
  uStack_368 = 0;
  local_370 = 0;
  pMStack_3b8 = _UNK_0036e5a8;
  local_3c0 = _DAT_0036e5a0;
  local_3b0 = 0;
  local_3a8 = 0;
  local_3a0 = 0;
  local_398 = 0;
  local_390 = 0;
  local_388 = 0;
  local_418 = iVar30;
  local_414 = iVar30;
  Mat::create((Mat *)&local_3c0,2,&local_418,uVar1);
  if (local_1d0 != 0) {
    if (local_1dc < 3) {
      lVar13 = (long)local_1d4 * (long)local_1d8;
    }
    else {
      lVar17 = 0;
      lVar13 = 1;
      do {
        piVar27 = local_1a0 + lVar17;
        lVar17 = lVar17 + 1;
        lVar13 = lVar13 * *piVar27;
      } while ((int)lVar17 < local_1dc);
    }
    if (lVar13 != 0) {
      if ((local_1a0[1] != iVar31) || (*local_1a0 != iVar28)) {
        local_3d8 = 0;
        local_3d0 = (PCA *)0x0;
        pcVar12 = (char *)String::allocate((String *)&local_3d8,0x17);
        cVar3 = s__mean_size______mean_sz_0046fcf8[0x16];
        uVar6 = s__mean_size______mean_sz_0046fcf8._20_2_;
        uVar5 = s__mean_size______mean_sz_0046fcf8._8_8_;
        uVar14 = s__mean_size______mean_sz_0046fcf8._0_8_;
        *(undefined4 *)(pcVar12 + 0x10) = s__mean_size______mean_sz_0046fcf8._16_4_;
        *(undefined2 *)(pcVar12 + 0x14) = uVar6;
        pcVar12[0x16] = cVar3;
        *(undefined8 *)pcVar12 = uVar14;
        *(undefined8 *)(pcVar12 + 8) = uVar5;
        error(-0xd7,(String *)&local_3d8,
              "cv::PCA& cv::PCA::operator()(cv::InputArray, cv::InputArray, int, double)",
              "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0xf1);
        String::deallocate((String *)&local_3d8);
      }
      local_50 = (double *)0x0;
      local_60 = 0x2010000;
      local_58 = (_OutputArray *)pMVar21;
      Mat::convertTo((Mat *)&local_1e0,(_OutputArray *)&local_60,uVar1,1.0,0.0);
    }
  }
  local_120 = 0x1010000;
  local_c0._0_4_ = 0x2010000;
  local_110 = 0;
  local_b0 = (float *)0x0;
  local_50 = (double *)0x0;
  local_60 = 0x3010000;
  local_118 = (Mat *)&local_240;
  uStack_b8 = (Mat *)&local_3c0;
  local_58 = (_OutputArray *)pMVar21;
  calcCovarMatrix((_InputArray *)&local_120,(_OutputArray *)&local_c0,(_InputOutputArray *)&local_60
                  ,iVar11,uVar1);
  this_00 = (Mat *)(this + 0x60);
  local_110 = 0;
  local_120 = 0x1010000;
  local_b0 = (float *)0x0;
  local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
  local_50 = (double *)0x0;
  local_60 = 0x2010000;
  local_118 = (Mat *)&local_3c0;
  uStack_b8 = this_00;
  local_58 = (_OutputArray *)this;
  eigen((_InputArray *)&local_120,(_OutputArray *)&local_c0,(_OutputArray *)&local_60);
  if (iVar10 < iVar29) {
    local_138 = &local_130;
    local_140 = &pMStack_178;
    uVar2 = 0;
    if (*(int *)(this + 200) != 0) {
      uVar2 = local_238 / *(int *)(this + 200);
    }
    local_170 = 0;
    uStack_168 = 0;
    local_160 = 0;
    uStack_158 = 0;
    local_150 = 0;
    lStack_148 = 0;
    iVar10 = 0;
    if (*(int *)(this + 0xcc) != 0) {
      iVar10 = local_234 / *(int *)(this + 0xcc);
    }
    pMStack_178 = _UNK_0036e5a8;
    local_180 = _DAT_0036e5a0;
    uStack_128 = 0;
    local_130 = 0;
    repeat((cv *)pMVar21,(Mat *)(ulong)uVar2,iVar10,(int)local_138);
    if (((local_240 & 0xfff) == uVar1) && (local_110 != *(long *)(this + 0xd0))) {
      local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
      local_2a0 = CONCAT44(local_2a0._4_4_,0x1010000);
      local_290 = 0;
      local_b0 = (float *)0x0;
      local_50 = (double *)0x0;
      local_60 = 0x2010000;
      uStack_298 = (Mat *)&local_240;
      uStack_b8 = (Mat *)&local_120;
      local_58 = (_OutputArray *)&local_120;
      p_Var15 = (_InputArray *)noArray();
      subtract((_InputArray *)&local_2a0,(_InputArray *)&local_c0,(_OutputArray *)&local_60,p_Var15,
               -1);
      if (lStack_e8 != 0) {
        piVar27 = (int *)(lStack_e8 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
          if (bVar4) {
            *piVar27 = *piVar27 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (lStack_148 != 0) {
        piVar27 = (int *)(lStack_148 + 0x14);
        do {
          iVar10 = *piVar27;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
          if (bVar4) {
            *piVar27 = iVar10 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar10 == 1) {
          Mat::deallocate((Mat *)&local_180);
        }
      }
      puVar20 = local_d8;
      lStack_148 = 0;
      local_170 = 0;
      uStack_158 = 0;
      local_160 = 0;
      uStack_168 = 0;
      if (local_180._4_4_ < 1) {
LAB_0036e28c:
        if (2 < local_11c) goto LAB_0036e2f8;
        local_180 = CONCAT44(local_11c,local_120);
        pMStack_178 = local_118;
        *local_138 = *local_d8;
        local_138[1] = puVar20[1];
      }
      else {
        iVar10 = 0;
        ppMVar16 = local_140;
        do {
          *(undefined4 *)ppMVar16 = 0;
          iVar10 = iVar10 + 1;
          ppMVar16 = (Mat **)((long)ppMVar16 + 4);
        } while (iVar10 < local_180._4_4_);
        if (local_180._4_4_ < 3) goto LAB_0036e28c;
LAB_0036e2f8:
        local_180 = CONCAT44(local_180._4_4_,local_120);
        Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
      }
      uStack_168 = uStack_108;
      local_170 = local_110;
      uStack_158 = uStack_f8;
      local_160 = local_100;
      lStack_148 = lStack_e8;
      local_150 = local_f0;
    }
    else {
      local_50 = (double *)0x0;
      local_60 = 0x2010000;
      local_58 = (_OutputArray *)&local_180;
      Mat::convertTo((Mat *)&local_240,(_OutputArray *)&local_60,uVar1,1.0,0.0);
      local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
      local_2a0 = CONCAT44(local_2a0._4_4_,0x1010000);
      local_290 = 0;
      local_b0 = (float *)0x0;
      local_50 = (double *)0x0;
      local_60 = 0x2010000;
      uStack_298 = (Mat *)&local_180;
      uStack_b8 = (Mat *)&local_120;
      local_58 = (_OutputArray *)&local_180;
      p_Var15 = (_InputArray *)noArray();
      subtract((_InputArray *)&local_2a0,(_InputArray *)&local_c0,(_OutputArray *)&local_60,p_Var15,
               -1);
    }
    local_b0 = (float *)0x0;
    local_78 = &local_70;
    local_80 = &uStack_b8;
    uStack_b8 = _UNK_0036e5a8;
    local_c0 = _DAT_0036e5a0;
    uStack_a8 = 0;
    local_a0 = 0;
    uStack_68 = 0;
    local_70 = 0;
    uStack_98 = 0;
    local_90 = 0;
    lStack_88 = 0;
    local_410 = iVar30;
    local_40c = iVar29;
    Mat::create((Mat *)&local_c0,2,&local_410,uVar1);
    local_318 = &local_310;
    local_320 = &pMStack_358;
    pMStack_358 = _UNK_0036e5a8;
    local_360 = _DAT_0036e5a0;
    iVar10 = 0;
    if ((param_3 & 1U) != 0) {
      iVar10 = 2;
    }
    local_3d8 = CONCAT44(local_3d8._4_4_,0x1010000);
    local_300 = CONCAT44(local_300._4_4_,0x1010000);
    uStack_308 = 0;
    local_310 = 0;
    local_2a0 = CONCAT44(local_2a0._4_4_,0x1010000);
    local_3c8 = 0;
    local_3c4 = 0;
    local_2f0 = 0;
    local_290 = 0;
    local_350 = 0;
    local_348 = 0;
    local_340 = 0;
    local_338 = 0;
    local_330 = 0;
    local_328 = 0;
    local_50 = (double *)0x0;
    local_60 = 0x2010000;
    local_3d0 = this;
    uStack_2f8 = (Mat *)&local_180;
    uStack_298 = (Mat *)&local_360;
    local_58 = (_OutputArray *)&local_c0;
    gemm((_InputArray *)&local_3d8,(_InputArray *)&local_300,1.0,(_InputArray *)&local_2a0,0.0,
         (_OutputArray *)&local_60,iVar10);
    if (local_328 != 0) {
      piVar27 = (int *)(local_328 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_360);
      }
    }
    local_328 = 0;
    local_350 = 0;
    local_338 = 0;
    local_340 = 0;
    local_348 = 0;
    if (0 < local_360._4_4_) {
      iVar10 = 0;
      ppMVar16 = local_320;
      do {
        *(undefined4 *)ppMVar16 = 0;
        iVar10 = iVar10 + 1;
        ppMVar16 = (Mat **)((long)ppMVar16 + 4);
      } while (iVar10 < local_360._4_4_);
    }
    if (local_318 != &local_310) {
      fastFree(local_318);
    }
    if (this == (PCA *)&local_c0) {
      iVar10 = *(int *)(this + 8);
    }
    else {
      if (lStack_88 != 0) {
        piVar27 = (int *)(lStack_88 + 0x14);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
          if (bVar4) {
            *piVar27 = *piVar27 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(long *)(this + 0x38) != 0) {
        piVar27 = (int *)(*(long *)(this + 0x38) + 0x14);
        do {
          iVar10 = *piVar27;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
          if (bVar4) {
            *piVar27 = iVar10 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar10 == 1) {
          Mat::deallocate((Mat *)this);
        }
      }
      *(undefined8 *)(this + 0x38) = 0;
      *(undefined8 *)(this + 0x10) = 0;
      *(undefined8 *)(this + 0x28) = 0;
      *(undefined8 *)(this + 0x20) = 0;
      *(undefined8 *)(this + 0x18) = 0;
      if (*(int *)(this + 4) < 1) {
        *(undefined4 *)this = (undefined4)local_c0;
LAB_0036db90:
        if (2 < local_c0._4_4_) goto LAB_0036db9c;
        plVar26 = *(long **)(this + 0x48);
        *(int *)(this + 4) = local_c0._4_4_;
        *(undefined4 *)(this + 0xc) = uStack_b8._4_4_;
        *(int *)(this + 8) = (int)uStack_b8;
        *plVar26 = *local_78;
        plVar26[1] = local_78[1];
        iVar10 = (int)uStack_b8;
      }
      else {
        iVar10 = 0;
        puVar23 = *(undefined4 **)(this + 0x40);
        do {
          *puVar23 = 0;
          iVar10 = iVar10 + 1;
          puVar23 = puVar23 + 1;
        } while (iVar10 < *(int *)(this + 4));
        *(undefined4 *)this = (undefined4)local_c0;
        if (*(int *)(this + 4) < 3) goto LAB_0036db90;
LAB_0036db9c:
        Mat::copySize((Mat *)this,(Mat *)&local_c0);
        iVar10 = *(int *)(this + 8);
      }
      *(undefined8 *)(this + 0x18) = uStack_a8;
      *(float **)(this + 0x10) = local_b0;
      *(undefined8 *)(this + 0x28) = uStack_98;
      *(undefined8 *)(this + 0x20) = local_a0;
      *(long *)(this + 0x38) = lStack_88;
      *(undefined8 *)(this + 0x30) = local_90;
    }
    if (0 < iVar10) {
      iVar10 = 0;
      do {
        iVar29 = iVar10 + 1;
        local_450 = 0x80000000;
        local_44c = 0x7fffffff;
        local_448 = iVar10;
        local_444 = iVar29;
        Mat::Mat((Mat *)&local_60,(Mat *)this,(Range *)&local_448,(Range *)&local_450);
        local_300 = CONCAT44(local_300._4_4_,0x1010000);
        local_2f0 = 0;
        local_290 = 0;
        local_2a0 = CONCAT44(local_2a0._4_4_,0x3010000);
        uStack_2f8 = (Mat *)&local_60;
        uStack_298 = (Mat *)&local_60;
        p_Var15 = (_InputArray *)noArray();
        normalize((_InputArray *)&local_300,(_InputOutputArray *)&local_2a0,1.0,0.0,4,-1,p_Var15);
        if (local_28 != 0) {
          piVar27 = (int *)(local_28 + 0x14);
          do {
            iVar10 = *piVar27;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
            if (bVar4) {
              *piVar27 = iVar10 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          if (iVar10 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        local_28 = 0;
        local_50 = (double *)0x0;
        local_38 = 0;
        local_40 = 0;
        local_48 = 0;
        if (0 < local_5c) {
          iVar10 = 0;
          pp_Var22 = local_20;
          do {
            *(undefined4 *)pp_Var22 = 0;
            iVar10 = iVar10 + 1;
            pp_Var22 = (_OutputArray **)((long)pp_Var22 + 4);
          } while (iVar10 < local_5c);
        }
        if (local_18 != &local_10) {
          fastFree(local_18);
        }
        iVar10 = iVar29;
      } while (iVar29 < *(int *)(this + 8));
    }
    if (lStack_88 != 0) {
      piVar27 = (int *)(lStack_88 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = (float *)0x0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar10 = 0;
      puVar20 = local_80;
      do {
        iVar10 = iVar10 + 1;
        *(undefined4 *)puVar20 = 0;
        puVar20 = (undefined8 *)((long)puVar20 + 4);
      } while (iVar10 < local_c0._4_4_);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (lStack_e8 != 0) {
      piVar27 = (int *)(lStack_e8 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar10 = 0;
      puVar23 = local_e0;
      do {
        *puVar23 = 0;
        iVar10 = iVar10 + 1;
        puVar23 = puVar23 + 1;
      } while (iVar10 < local_11c);
    }
    if (local_d8 != auStack_d0) {
      fastFree(local_d8);
    }
    if (lStack_148 != 0) {
      piVar27 = (int *)(lStack_148 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (0 < local_180._4_4_) {
      iVar10 = 0;
      ppMVar16 = local_140;
      do {
        *(undefined4 *)ppMVar16 = 0;
        iVar10 = iVar10 + 1;
        ppMVar16 = (Mat **)((long)ppMVar16 + 4);
      } while (iVar10 < local_180._4_4_);
    }
    if (local_138 == &local_130) goto LAB_0036cda8;
    fastFree(local_138);
    piVar27 = *(int **)(this + 0xa0);
    if (uVar1 != 5) goto LAB_0036cdb8;
LAB_0036de74:
    local_404 = piVar27[1];
    local_408 = *piVar27;
    local_80 = &uStack_b8;
    local_78 = &local_70;
    local_c0 = 0x42ff0000;
    uStack_b8 = (Mat *)0x0;
    local_b0 = (float *)0x0;
    uStack_a8 = 0;
    local_a0 = 0;
    uStack_98 = 0;
    local_90 = 0;
    lStack_88 = 0;
    uStack_68 = 0;
    local_70 = 0;
    Mat::create((Mat *)&local_c0,2,&local_408,uVar1);
    if (0 < (int)uStack_b8) {
      iVar10 = 0;
      lVar13 = *local_78;
      pfVar25 = local_b0;
      do {
        while (*pfVar25 = 0.0, iVar10 < 0) {
          iVar10 = iVar10 + 1;
          pfVar25 = (float *)((long)pfVar25 + lVar13);
          if (iVar10 == (int)uStack_b8) goto LAB_0036df4c;
        }
        iVar10 = iVar10 + 1;
        fVar33 = 0.0;
        pfVar24 = *(float **)(this + 0x70);
        iVar29 = 0;
        lVar17 = **(long **)(this + 0xa8);
        do {
          fVar35 = *pfVar24;
          iVar29 = iVar29 + 1;
          pfVar24 = (float *)((long)pfVar24 + lVar17);
          fVar33 = fVar33 + fVar35;
          *pfVar25 = fVar33;
        } while (iVar10 != iVar29);
        pfVar25 = (float *)((long)pfVar25 + lVar13);
      } while (iVar10 != (int)uStack_b8);
    }
LAB_0036df4c:
    iVar10 = *(int *)(this + 0x68);
    if (iVar10 < 1) {
LAB_0036e340:
      iVar29 = 2;
    }
    else {
      fVar33 = *(float *)((long)local_b0 + (long)((int)uStack_b8 + -1) * *local_78);
      if (param_4 < (double)(*local_b0 / fVar33)) goto LAB_0036e340;
      iVar11 = 0;
      pfVar25 = local_b0;
      do {
        pfVar25 = (float *)((long)pfVar25 + *local_78);
        iVar11 = iVar11 + 1;
        iVar29 = iVar10;
        if (iVar11 == iVar10) break;
        iVar29 = iVar11;
      } while ((double)(*pfVar25 / fVar33) <= param_4);
      if (iVar29 < 2) {
        iVar29 = 2;
      }
    }
    if (lStack_88 != 0) {
      piVar27 = (int *)(lStack_88 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = (float *)0x0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar10 = 0;
      puVar20 = local_80;
      do {
        iVar10 = iVar10 + 1;
        *(undefined4 *)puVar20 = 0;
        puVar20 = (undefined8 *)((long)puVar20 + 4);
      } while (iVar10 < local_c0._4_4_);
    }
    plVar26 = local_78;
    if (local_78 != &local_70) {
LAB_0036cf70:
      fastFree(plVar26);
    }
  }
  else {
LAB_0036cda8:
    piVar27 = *(int **)(this + 0xa0);
    if (uVar1 == 5) goto LAB_0036de74;
LAB_0036cdb8:
    local_3fc = piVar27[1];
    local_400 = *piVar27;
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = 0x42ff0000;
    local_5c = 0;
    local_58 = (_OutputArray *)0x0;
    local_50 = (double *)0x0;
    local_48 = 0;
    local_40 = 0;
    local_38 = 0;
    local_30 = 0;
    local_28 = 0;
    local_8 = 0;
    local_10 = 0;
    Mat::create((Mat *)&local_60,2,&local_400,6);
    if (0 < (int)local_58) {
      iVar10 = 0;
      lVar13 = *local_18;
      pdVar19 = local_50;
      do {
        while (*pdVar19 = 0.0, iVar10 < 0) {
          iVar10 = iVar10 + 1;
          pdVar19 = (double *)((long)pdVar19 + lVar13);
          if (iVar10 == (int)local_58) goto LAB_0036ce8c;
        }
        iVar10 = iVar10 + 1;
        dVar34 = 0.0;
        pdVar18 = *(double **)(this + 0x70);
        iVar29 = 0;
        lVar17 = **(long **)(this + 0xa8);
        do {
          dVar36 = *pdVar18;
          iVar29 = iVar29 + 1;
          pdVar18 = (double *)((long)pdVar18 + lVar17);
          dVar34 = dVar34 + dVar36;
          *pdVar19 = dVar34;
        } while (iVar29 != iVar10);
        pdVar19 = (double *)((long)pdVar19 + lVar13);
      } while (iVar10 != (int)local_58);
    }
LAB_0036ce8c:
    iVar10 = *(int *)(this + 0x68);
    if (iVar10 < 1) {
LAB_0036e32c:
      iVar29 = 2;
    }
    else {
      dVar34 = *(double *)((long)local_50 + (long)((int)local_58 + -1) * *local_18);
      if (param_4 < *local_50 / dVar34) goto LAB_0036e32c;
      iVar11 = 0;
      pdVar19 = local_50;
      do {
        pdVar19 = (double *)((long)pdVar19 + *local_18);
        iVar11 = iVar11 + 1;
        iVar29 = iVar10;
        if (iVar11 == iVar10) break;
        iVar29 = iVar11;
      } while (*pdVar19 / dVar34 <= param_4);
      if (iVar29 < 2) {
        iVar29 = 2;
      }
    }
    if (local_28 != 0) {
      piVar27 = (int *)(local_28 + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = (double *)0x0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar10 = 0;
      pp_Var22 = local_20;
      do {
        *(undefined4 *)pp_Var22 = 0;
        iVar10 = iVar10 + 1;
        pp_Var22 = (_OutputArray **)((long)pp_Var22 + 4);
      } while (iVar10 < local_5c);
    }
    plVar26 = local_18;
    if (local_18 != &local_10) goto LAB_0036cf70;
  }
  local_440 = 0x80000000;
  local_43c = 0x7fffffff;
  local_438 = 0;
  local_434 = iVar29;
  Mat::Mat((Mat *)&local_180,this_00,(Range *)&local_438,(Range *)&local_440);
  local_2b8 = &local_2b0;
  local_2f0 = 0;
  local_2c0 = &uStack_2f8;
  uStack_2e8 = 0;
  local_2e0 = 0;
  uStack_2d8 = 0;
  local_2d0 = 0;
  lStack_2c8 = 0;
  uStack_2f8 = _UNK_0036e5a8;
  local_300 = _DAT_0036e5a0;
  local_50 = (double *)0x0;
  uStack_2a8 = 0;
  local_2b0 = 0;
  local_60 = 0x2010000;
  local_58 = (_OutputArray *)&local_300;
  Mat::copyTo((Mat *)&local_180,(_OutputArray *)&local_60);
  if (this_00 != (Mat *)&local_300) {
    if (lStack_2c8 != 0) {
      piVar27 = (int *)(lStack_2c8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = *piVar27 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(long *)(this + 0x98) != 0) {
      piVar27 = (int *)(*(long *)(this + 0x98) + 0x14);
      do {
        iVar10 = *piVar27;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
        if (bVar4) {
          *piVar27 = iVar10 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate(this_00);
      }
    }
    *(undefined8 *)(this + 0x98) = 0;
    *(undefined8 *)(this + 0x70) = 0;
    *(undefined8 *)(this + 0x88) = 0;
    *(undefined8 *)(this + 0x80) = 0;
    *(undefined8 *)(this + 0x78) = 0;
    if (*(int *)(this + 100) < 1) {
      *(undefined4 *)(this + 0x60) = (undefined4)local_300;
LAB_0036d0b4:
      if (2 < local_300._4_4_) goto LAB_0036d680;
      puVar20 = *(undefined8 **)(this + 0xa8);
      *(int *)(this + 100) = local_300._4_4_;
      *(undefined4 *)(this + 0x68) = (undefined4)uStack_2f8;
      uVar14 = *local_2b8;
      *(undefined4 *)(this + 0x6c) = uStack_2f8._4_4_;
      *puVar20 = uVar14;
      puVar20[1] = local_2b8[1];
    }
    else {
      iVar10 = 0;
      puVar23 = *(undefined4 **)(this + 0xa0);
      do {
        *puVar23 = 0;
        iVar10 = iVar10 + 1;
        puVar23 = puVar23 + 1;
      } while (iVar10 < *(int *)(this + 100));
      *(undefined4 *)this_00 = (undefined4)local_300;
      if (*(int *)(this + 100) < 3) goto LAB_0036d0b4;
LAB_0036d680:
      Mat::copySize(this_00,(Mat *)&local_300);
    }
    *(undefined8 *)(this + 0x78) = uStack_2e8;
    *(undefined8 *)(this + 0x70) = local_2f0;
    *(undefined8 *)(this + 0x88) = uStack_2d8;
    *(undefined8 *)(this + 0x80) = local_2e0;
    *(long *)(this + 0x98) = lStack_2c8;
    *(undefined8 *)(this + 0x90) = local_2d0;
  }
  if (lStack_2c8 != 0) {
    piVar27 = (int *)(lStack_2c8 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_300);
    }
  }
  lStack_2c8 = 0;
  local_2f0 = 0;
  uStack_2d8 = 0;
  local_2e0 = 0;
  uStack_2e8 = 0;
  if (0 < local_300._4_4_) {
    iVar10 = 0;
    puVar20 = local_2c0;
    do {
      *(undefined4 *)puVar20 = 0;
      iVar10 = iVar10 + 1;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar10 < local_300._4_4_);
  }
  if (local_2b8 != &local_2b0) {
    fastFree(local_2b8);
  }
  if (lStack_148 != 0) {
    piVar27 = (int *)(lStack_148 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar10 = 0;
    ppMVar16 = local_140;
    do {
      *(undefined4 *)ppMVar16 = 0;
      iVar10 = iVar10 + 1;
      ppMVar16 = (Mat **)((long)ppMVar16 + 4);
    } while (iVar10 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  local_430 = 0x80000000;
  local_42c = 0x7fffffff;
  local_428 = 0;
  local_424 = iVar29;
  Mat::Mat((Mat *)&local_120,(Mat *)this,(Range *)&local_428,(Range *)&local_430);
  local_258 = &local_250;
  local_290 = 0;
  local_260 = &uStack_298;
  uStack_288 = 0;
  local_280 = 0;
  uStack_278 = 0;
  local_270 = 0;
  lStack_268 = 0;
  uStack_298 = _UNK_0036e5a8;
  local_2a0 = _DAT_0036e5a0;
  local_50 = (double *)0x0;
  uStack_248 = 0;
  local_250 = 0;
  local_60 = 0x2010000;
  local_58 = (_OutputArray *)&local_2a0;
  Mat::copyTo((Mat *)&local_120,(_OutputArray *)&local_60);
  if (this == (PCA *)&local_2a0) {
    lVar13 = *(long *)(this + 0x38);
    goto LAB_0036d39c;
  }
  if (lStack_268 != 0) {
    piVar27 = (int *)(lStack_268 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = *piVar27 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (*(long *)(this + 0x38) != 0) {
    piVar27 = (int *)(*(long *)(this + 0x38) + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)this);
    }
  }
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  if (*(int *)(this + 4) < 1) {
    *(undefined4 *)this = (undefined4)local_2a0;
LAB_0036d330:
    if (2 < local_2a0._4_4_) goto LAB_0036d670;
    puVar20 = *(undefined8 **)(this + 0x48);
    *(int *)(this + 4) = local_2a0._4_4_;
    *(undefined4 *)(this + 8) = (undefined4)uStack_298;
    uVar14 = *local_258;
    *(undefined4 *)(this + 0xc) = uStack_298._4_4_;
    *puVar20 = uVar14;
    puVar20[1] = local_258[1];
  }
  else {
    iVar10 = 0;
    puVar23 = *(undefined4 **)(this + 0x40);
    do {
      *puVar23 = 0;
      iVar10 = iVar10 + 1;
      puVar23 = puVar23 + 1;
    } while (iVar10 < *(int *)(this + 4));
    *(undefined4 *)this = (undefined4)local_2a0;
    if (*(int *)(this + 4) < 3) goto LAB_0036d330;
LAB_0036d670:
    Mat::copySize((Mat *)this,(Mat *)&local_2a0);
  }
  *(undefined8 *)(this + 0x18) = uStack_288;
  *(undefined8 *)(this + 0x10) = local_290;
  *(undefined8 *)(this + 0x28) = uStack_278;
  *(undefined8 *)(this + 0x20) = local_280;
  *(long *)(this + 0x38) = lStack_268;
  *(undefined8 *)(this + 0x30) = local_270;
  lVar13 = lStack_268;
LAB_0036d39c:
  if (lVar13 != 0) {
    piVar27 = (int *)(lVar13 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = 0;
  uStack_278 = 0;
  local_280 = 0;
  uStack_288 = 0;
  if (0 < local_2a0._4_4_) {
    iVar10 = 0;
    puVar20 = local_260;
    do {
      *(undefined4 *)puVar20 = 0;
      iVar10 = iVar10 + 1;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar10 < local_2a0._4_4_);
  }
  if (local_258 != &local_250) {
    fastFree(local_258);
  }
  if (lStack_e8 != 0) {
    piVar27 = (int *)(lStack_e8 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar10 = 0;
    do {
      *local_e0 = 0;
      iVar10 = iVar10 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar10 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    fastFree(local_d8);
  }
  if (local_388 != 0) {
    piVar27 = (int *)(local_388 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_3c0);
    }
  }
  local_388 = 0;
  local_3b0 = 0;
  local_398 = 0;
  local_3a0 = 0;
  local_3a8 = 0;
  if (0 < local_3c0._4_4_) {
    iVar10 = 0;
    ppMVar16 = local_380;
    do {
      *(undefined4 *)ppMVar16 = 0;
      iVar10 = iVar10 + 1;
      ppMVar16 = (Mat **)((long)ppMVar16 + 4);
    } while (iVar10 < local_3c0._4_4_);
  }
  if (local_378 != &local_370) {
    fastFree(local_378);
  }
  if (local_1a8 != 0) {
    piVar27 = (int *)(local_1a8 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1dc) {
    iVar10 = 0;
    piVar27 = local_1a0;
    do {
      *piVar27 = 0;
      iVar10 = iVar10 + 1;
      piVar27 = piVar27 + 1;
    } while (iVar10 < local_1dc);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (local_208 != 0) {
    piVar27 = (int *)(local_208 + 0x14);
    do {
      iVar10 = *piVar27;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar27,0x10);
      if (bVar4) {
        *piVar27 = iVar10 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate((Mat *)&local_240);
    }
  }
  local_208 = 0;
  local_230 = 0;
  local_218 = 0;
  local_220 = 0;
  local_228 = 0;
  if (0 < local_23c) {
    iVar10 = 0;
    piVar27 = local_200;
    do {
      *piVar27 = 0;
      iVar10 = iVar10 + 1;
      piVar27 = piVar27 + 1;
    } while (iVar10 < local_23c);
  }
  if (local_1f8 != &local_1f0) {
    fastFree(local_1f8);
  }
  return this;
}


==================================================================

### FUNC 0036e5b0 (260 bytes) name=PCA

/* cv::PCA::PCA(cv::_InputArray const&, cv::_InputArray const&, int, double) */

void __thiscall
cv::PCA::PCA(PCA *this,_InputArray *param_1,_InputArray *param_2,int param_3,double param_4)

{
  *(undefined8 *)this = DAT_0036e708;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(PCA **)(this + 0x40) = this + 8;
  *(PCA **)(this + 0x48) = this + 0x50;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined4 *)(this + 0x60) = 0x42ff0000;
  *(undefined4 *)(this + 100) = 0;
  *(undefined4 *)(this + 0x68) = 0;
  *(undefined4 *)(this + 0x6c) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(PCA **)(this + 0xa0) = this + 0x68;
  *(PCA **)(this + 0xa8) = this + 0xb0;
  *(undefined8 *)(this + 0xb8) = 0;
  *(undefined8 *)(this + 0xb0) = 0;
  *(undefined4 *)(this + 0xc0) = 0x42ff0000;
  *(undefined4 *)(this + 0xc4) = 0;
  *(undefined4 *)(this + 200) = 0;
  *(undefined4 *)(this + 0xcc) = 0;
  *(undefined8 *)(this + 0xd0) = 0;
  *(undefined8 *)(this + 0xd8) = 0;
  *(undefined8 *)(this + 0xe0) = 0;
  *(undefined8 *)(this + 0xe8) = 0;
  *(undefined8 *)(this + 0xf0) = 0;
  *(undefined8 *)(this + 0xf8) = 0;
  *(PCA **)(this + 0x100) = this + 200;
  *(PCA **)(this + 0x108) = this + 0x110;
  *(undefined8 *)(this + 0x118) = 0;
  *(undefined8 *)(this + 0x110) = 0;
  operator()(this,param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0036e710 (2212 bytes) name=project

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::project(cv::_InputArray const&, cv::_OutputArray const&) const */

void __thiscall cv::PCA::project(PCA *this,_InputArray *param_1,_OutputArray *param_2)

{
  long lVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  int iVar5;
  int iVar6;
  void *__dest;
  _InputArray *p_Var7;
  Mat **ppMVar8;
  undefined8 *puVar9;
  long lVar10;
  Mat *pMVar11;
  undefined8 *puVar12;
  int iVar13;
  int *piVar14;
  long lVar15;
  int iVar16;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  long local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined4 local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  long local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 auStack_130 [2];
  undefined8 local_120;
  Mat *pMStack_118;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  Mat **local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined8 local_c0;
  Mat *pMStack_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  Mat **local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 uStack_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar5 = _InputArray::kind(param_1);
  if (iVar5 == 0x10000) {
    pMVar11 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar11;
    local_5c = *(int *)(pMVar11 + 4);
    local_58 = *(int *)(pMVar11 + 8);
    local_54 = *(int *)(pMVar11 + 0xc);
    local_50 = *(undefined8 *)(pMVar11 + 0x10);
    local_48 = *(undefined8 *)(pMVar11 + 0x18);
    local_40 = *(undefined8 *)(pMVar11 + 0x20);
    local_38 = *(undefined8 *)(pMVar11 + 0x28);
    local_30 = *(undefined8 *)(pMVar11 + 0x30);
    local_28 = *(long *)(pMVar11 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar14 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar4) {
          *piVar14 = *piVar14 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar11 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar11 + 0x48);
      local_8 = (*(undefined8 **)(pMVar11 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar11);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (*(long *)(this + 0xd0) == 0) {
LAB_0036e7e4:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    __dest = (void *)String::allocate((String *)&local_1f8,0x84);
    memcpy(__dest,
           "!mean.empty() && !eigenvectors.empty() && ((mean.rows == 1 && mean.cols == data.cols) || (mean.cols == 1 && mean.rows == data.rows))"
           ,0x84);
    error(-0xd7,(String *)&local_1f8,"void cv::PCA::project(cv::InputArray, cv::OutputArray) const",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0x128);
    String::deallocate((String *)&local_1f8);
    iVar5 = *(int *)(this + 200);
    iVar13 = *(int *)(this + 0xcc);
    iVar6 = local_58;
    iVar16 = local_54;
  }
  else {
    if (*(int *)(this + 0xc4) < 3) {
      lVar15 = (long)*(int *)(this + 0xcc) * (long)*(int *)(this + 200);
    }
    else {
      lVar10 = 0;
      lVar15 = 1;
      do {
        lVar1 = lVar10 * 4;
        lVar10 = lVar10 + 1;
        lVar15 = lVar15 * *(int *)(*(long *)(this + 0x100) + lVar1);
      } while ((int)lVar10 < *(int *)(this + 0xc4));
    }
    if ((lVar15 == 0) || (*(long *)(this + 0x10) == 0)) goto LAB_0036e7e4;
    if (*(int *)(this + 4) < 3) {
      lVar10 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
    }
    else {
      lVar15 = 0;
      lVar10 = 1;
      do {
        lVar1 = lVar15 * 4;
        lVar15 = lVar15 + 1;
        lVar10 = lVar10 * *(int *)(*(long *)(this + 0x40) + lVar1);
      } while ((int)lVar15 < *(int *)(this + 4));
    }
    if (lVar10 == 0) goto LAB_0036e7e4;
    iVar5 = *(int *)(this + 200);
    if (iVar5 == 1) {
      iVar13 = *(int *)(this + 0xcc);
      if (iVar13 != local_54) goto LAB_0036e7d0;
      iVar5 = 1;
      iVar6 = local_58;
      iVar16 = iVar13;
    }
    else {
      iVar13 = *(int *)(this + 0xcc);
LAB_0036e7d0:
      if ((iVar13 != 1) || (iVar5 != local_58)) goto LAB_0036e7e4;
      iVar13 = 1;
      iVar6 = iVar5;
      iVar16 = local_54;
    }
  }
  uVar2 = 0;
  if (iVar5 != 0) {
    uVar2 = iVar6 / iVar5;
  }
  local_198 = &local_190;
  local_1a0 = &uStack_1d8;
  uStack_188 = 0;
  local_190 = 0;
  uStack_1d8 = _UNK_0036f098;
  local_1e0 = _DAT_0036f090;
  local_1d0 = 0;
  uStack_1c8 = 0;
  local_1c0 = 0;
  iVar5 = 0;
  if (iVar13 != 0) {
    iVar5 = iVar16 / iVar13;
  }
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  repeat((cv *)(this + 0xc0),(Mat *)(ulong)uVar2,iVar5,(int)local_198);
  pMStack_118 = (Mat *)&local_180;
  if (((*(uint *)(this + 0xc0) & 0xfff) == (local_60 & 0xfff)) &&
     (local_170 != *(long *)(this + 0xd0))) {
    local_110 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
    local_120 = CONCAT44(local_120._4_4_,0x1010000);
    local_1e8 = 0;
    local_1e4 = 0;
    local_b0 = 0;
    local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
    local_1f0 = (Mat *)&local_60;
    pMStack_b8 = (Mat *)&local_180;
    p_Var7 = (_InputArray *)noArray();
    subtract((_InputArray *)&local_1f8,(_InputArray *)&local_120,(_OutputArray *)&local_c0,p_Var7,-1
            );
    if (lStack_148 != 0) {
      piVar14 = (int *)(lStack_148 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar4) {
          *piVar14 = *piVar14 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_1a8 != 0) {
      piVar14 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar5 = *piVar14;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar4) {
          *piVar14 = iVar5 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    puVar9 = local_138;
    lStack_1a8 = 0;
    local_1d0 = 0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    uStack_1c8 = 0;
    if (local_1e0._4_4_ < 1) {
LAB_0036eec0:
      if (2 < local_17c) goto LAB_0036eecc;
      uStack_1d8 = (Mat *)CONCAT44(local_174,local_178);
      local_1e0 = CONCAT44(local_17c,local_180);
      *local_198 = *local_138;
      local_198[1] = puVar9[1];
    }
    else {
      iVar5 = 0;
      puVar12 = local_1a0;
      do {
        *(undefined4 *)puVar12 = 0;
        iVar5 = iVar5 + 1;
        puVar12 = (undefined8 *)((long)puVar12 + 4);
      } while (iVar5 < local_1e0._4_4_);
      if (local_1e0._4_4_ < 3) goto LAB_0036eec0;
LAB_0036eecc:
      local_1e0 = CONCAT44(local_1e0._4_4_,local_180);
      Mat::copySize((Mat *)&local_1e0,(Mat *)&local_180);
    }
    uStack_1b8 = uStack_158;
    local_1c0 = local_160;
    lStack_1a8 = lStack_148;
    local_1b0 = local_150;
    uStack_1c8 = uStack_168;
    local_1d0 = local_170;
  }
  else {
    local_b0 = 0;
    local_c0._0_4_ = 0x2010000;
    pMStack_b8 = (Mat *)&local_1e0;
    Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_c0,*(uint *)(this + 0xc0) & 0xfff,1.0,0.0
                  );
    local_110 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
    local_120 = CONCAT44(local_120._4_4_,0x1010000);
    local_1e8 = 0;
    local_1e4 = 0;
    local_b0 = 0;
    local_c0 = CONCAT44(local_c0._4_4_,0x2010000);
    local_1f0 = (Mat *)&local_1e0;
    pMStack_b8 = (Mat *)&local_1e0;
    p_Var7 = (_InputArray *)noArray();
    subtract((_InputArray *)&local_1f8,(_InputArray *)&local_120,(_OutputArray *)&local_c0,p_Var7,-1
            );
  }
  if (*(int *)(this + 200) == 1) {
    local_110 = 0;
    local_d8 = &local_d0;
    local_108 = 0;
    local_e0 = &pMStack_118;
    pMStack_118 = _UNK_0036f098;
    local_120 = _DAT_0036f090;
    local_100 = 0;
    local_f8 = 0;
    local_f0 = 0;
    local_e8 = 0;
    uStack_c8 = 0;
    local_d0 = 0;
    local_200 = 0;
    local_1fc = 0;
    local_210[0] = 0x1010000;
    local_1e8 = 0;
    local_1e4 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
    local_b0 = 0;
    local_c0 = CONCAT44(local_c0._4_4_,0x1010000);
    local_208 = (Mat *)&local_1e0;
    local_1f0 = (Mat *)this;
    pMStack_b8 = (Mat *)&local_120;
    gemm((_InputArray *)local_210,(_InputArray *)&local_1f8,1.0,(_InputArray *)&local_c0,0.0,param_2
         ,2);
    if (local_e8 != 0) {
      piVar14 = (int *)(local_e8 + 0x14);
      do {
        iVar5 = *piVar14;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar4) {
          *piVar14 = iVar5 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = 0;
    local_f8 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_120._4_4_) {
      iVar5 = 0;
      ppMVar8 = local_e0;
      do {
        *(undefined4 *)ppMVar8 = 0;
        iVar5 = iVar5 + 1;
        ppMVar8 = (Mat **)((long)ppMVar8 + 4);
      } while (iVar5 < local_120._4_4_);
    }
    puVar9 = local_d8;
    if (local_d8 == &local_d0) goto LAB_0036ea4c;
  }
  else {
    local_78 = &local_70;
    local_80 = &pMStack_b8;
    pMStack_b8 = _UNK_0036f098;
    local_c0 = _DAT_0036f090;
    local_b0 = 0;
    local_a8 = 0;
    local_a0 = 0;
    local_98 = 0;
    local_90 = 0;
    local_88 = 0;
    uStack_68 = 0;
    local_70 = 0;
    local_200 = 0;
    local_1fc = 0;
    local_210[0] = 0x1010000;
    local_110 = 0;
    local_120 = CONCAT44(local_120._4_4_,0x1010000);
    local_1e8 = 0;
    local_1e4 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
    local_208 = (Mat *)this;
    local_1f0 = (Mat *)&local_1e0;
    pMStack_118 = (Mat *)&local_c0;
    gemm((_InputArray *)local_210,(_InputArray *)&local_1f8,1.0,(_InputArray *)&local_120,0.0,
         param_2,0);
    if (local_88 != 0) {
      piVar14 = (int *)(local_88 + 0x14);
      do {
        iVar5 = *piVar14;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
        if (bVar4) {
          *piVar14 = iVar5 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar5 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_c0._4_4_) {
      iVar5 = 0;
      ppMVar8 = local_80;
      do {
        *(undefined4 *)ppMVar8 = 0;
        iVar5 = iVar5 + 1;
        ppMVar8 = (Mat **)((long)ppMVar8 + 4);
      } while (iVar5 < local_c0._4_4_);
    }
    puVar9 = local_78;
    if (local_78 == &local_70) goto LAB_0036ea4c;
  }
  fastFree(puVar9);
LAB_0036ea4c:
  if (lStack_148 != 0) {
    piVar14 = (int *)(lStack_148 + 0x14);
    do {
      iVar5 = *piVar14;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar4) {
        *piVar14 = iVar5 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar5 = 0;
    do {
      *local_140 = 0;
      iVar5 = iVar5 + 1;
      local_140 = local_140 + 1;
    } while (iVar5 < local_17c);
  }
  if (local_138 != auStack_130) {
    fastFree(local_138);
  }
  if (lStack_1a8 != 0) {
    piVar14 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar5 = *piVar14;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar4) {
        *piVar14 = iVar5 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar5 = 0;
    puVar9 = local_1a0;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar5 = iVar5 + 1;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar5 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar14 = (int *)(local_28 + 0x14);
    do {
      iVar5 = *piVar14;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar4) {
        *piVar14 = iVar5 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar5 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar5 = 0;
    piVar14 = local_20;
    do {
      *piVar14 = 0;
      iVar5 = iVar5 + 1;
      piVar14 = piVar14 + 1;
    } while (iVar5 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0036f0a0 (124 bytes) name=project

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::project(cv::_InputArray const&) const */

void cv::PCA::project(_InputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _InputArray *in_x1;
  undefined8 *in_x8;
  undefined4 local_18 [4];
  undefined4 local_8;
  undefined4 local_4;
  
  uVar2 = _UNK_0036f148;
  uVar1 = _DAT_0036f140;
  in_x8[8] = in_x8 + 1;
  in_x8[2] = 0;
  in_x8[1] = uVar2;
  *in_x8 = uVar1;
  in_x8[3] = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[9] = in_x8 + 10;
  in_x8[0xb] = 0;
  in_x8[10] = 0;
  local_8 = 0;
  local_4 = 0;
  local_18[0] = 0x2010000;
  project((PCA *)param_1,in_x1,(_OutputArray *)local_18);
  return;
}


==================================================================

### FUNC 0036f150 (2200 bytes) name=backProject

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::backProject(cv::_InputArray const&, cv::_OutputArray const&) const */

void __thiscall cv::PCA::backProject(PCA *this,_InputArray *param_1,_OutputArray *param_2)

{
  long lVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  undefined8 *puVar5;
  int iVar6;
  void *__dest;
  long lVar7;
  Mat *pMVar8;
  Mat **ppMVar9;
  uint *puVar10;
  long lVar11;
  undefined8 local_1f8;
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  Mat *pMStack_1d8;
  undefined8 local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  Mat **local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  Mat *local_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  undefined4 local_60;
  int local_5c;
  uint local_58;
  int local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  uint *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar6 = _InputArray::kind(param_1);
  if (iVar6 == 0x10000) {
    pMVar8 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(undefined4 *)pMVar8;
    local_5c = *(int *)(pMVar8 + 4);
    local_58 = *(uint *)(pMVar8 + 8);
    local_54 = *(int *)(pMVar8 + 0xc);
    local_50 = *(undefined8 *)(pMVar8 + 0x10);
    local_48 = *(undefined8 *)(pMVar8 + 0x18);
    local_40 = *(undefined8 *)(pMVar8 + 0x20);
    local_38 = *(undefined8 *)(pMVar8 + 0x28);
    local_30 = *(undefined8 *)(pMVar8 + 0x30);
    local_28 = *(long *)(pMVar8 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar2 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = *piVar2 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar8 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar8 + 0x48);
      local_8 = (*(undefined8 **)(pMVar8 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar8);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (*(long *)(this + 0xd0) == 0) {
LAB_0036f218:
    local_1f8 = 0;
    local_1f0 = (Mat *)0x0;
    __dest = (void *)String::allocate((String *)&local_1f8,0x94);
    memcpy(__dest,&DAT_0046fe98,0x94);
    error(-0xd7,(String *)&local_1f8,
          "void cv::PCA::backProject(cv::InputArray, cv::OutputArray) const",
          "/builds/master_pack-android/opencv/modules/core/src/pca.cpp",0x147);
    String::deallocate((String *)&local_1f8);
  }
  else {
    if (*(int *)(this + 0xc4) < 3) {
      lVar11 = (long)*(int *)(this + 0xcc) * (long)*(int *)(this + 200);
    }
    else {
      lVar7 = 0;
      lVar11 = 1;
      do {
        lVar1 = lVar7 * 4;
        lVar7 = lVar7 + 1;
        lVar11 = lVar11 * *(int *)(*(long *)(this + 0x100) + lVar1);
      } while ((int)lVar7 < *(int *)(this + 0xc4));
    }
    if ((lVar11 == 0) || (*(long *)(this + 0x10) == 0)) goto LAB_0036f218;
    if (*(int *)(this + 4) < 3) {
      lVar7 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
    }
    else {
      lVar11 = 0;
      lVar7 = 1;
      do {
        lVar1 = lVar11 * 4;
        lVar11 = lVar11 + 1;
        lVar7 = lVar7 * *(int *)(*(long *)(this + 0x40) + lVar1);
      } while ((int)lVar11 < *(int *)(this + 4));
    }
    if ((lVar7 == 0) ||
       (((*(int *)(this + 200) != 1 || (*(int *)(this + 8) != local_54)) &&
        ((*(int *)(this + 0xcc) != 1 || (*(uint *)(this + 8) != local_58)))))) goto LAB_0036f218;
  }
  local_138 = &local_130;
  local_198 = &local_190;
  uStack_128 = 0;
  local_130 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1a0 = &pMStack_1d8;
  local_140 = &pMStack_178;
  pMStack_1d8 = _UNK_0036fac8;
  local_1e0 = _DAT_0036fac0;
  pMStack_178 = _UNK_0036fac8;
  local_180 = _DAT_0036fac0;
  iVar6 = 0x2010000;
  local_1d0 = 0;
  local_1c8 = 0;
  local_1c0 = 0;
  local_1b8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  local_b0 = 0;
  local_c0 = 0x2010000;
  local_b8 = (Mat *)&local_1e0;
  Mat::convertTo((Mat *)&local_60,(_OutputArray *)&local_c0,*(uint *)(this + 0xc0) & 0xfff,1.0,0.0);
  if (*(int *)(this + 200) == 1) {
    repeat((cv *)(this + 0xc0),(Mat *)(ulong)local_58,1,iVar6);
    if (lStack_e8 != 0) {
      piVar2 = (int *)(lStack_e8 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = *piVar2 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (lStack_148 != 0) {
      piVar2 = (int *)(lStack_148 + 0x14);
      do {
        iVar6 = *piVar2;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = iVar6 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar6 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    puVar5 = local_d8;
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if (local_180._4_4_ < 1) {
LAB_0036f814:
      if (2 < local_11c) goto LAB_0036f97c;
      pMStack_178 = local_118;
      local_180 = CONCAT44(local_11c,local_120);
      *local_138 = *local_d8;
      local_138[1] = puVar5[1];
    }
    else {
      iVar6 = 0;
      ppMVar9 = local_140;
      do {
        *(undefined4 *)ppMVar9 = 0;
        iVar6 = iVar6 + 1;
        ppMVar9 = (Mat **)((long)ppMVar9 + 4);
      } while (iVar6 < local_180._4_4_);
      if (local_180._4_4_ < 3) goto LAB_0036f814;
LAB_0036f97c:
      local_180 = CONCAT44(local_180._4_4_,local_120);
      Mat::copySize((Mat *)&local_180,(Mat *)&local_120);
    }
    uStack_158 = uStack_f8;
    local_160 = local_100;
    lStack_148 = lStack_e8;
    local_150 = local_f0;
    uStack_168 = uStack_108;
    local_170 = local_110;
    if (lStack_e8 != 0) {
      piVar2 = (int *)(lStack_e8 + 0x14);
      do {
        iVar6 = *piVar2;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar4) {
          *piVar2 = iVar6 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar6 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    lStack_e8 = 0;
    local_110 = 0;
    uStack_f8 = 0;
    local_100 = 0;
    uStack_108 = 0;
    if (0 < local_11c) {
      iVar6 = 0;
      do {
        *local_e0 = 0;
        iVar6 = iVar6 + 1;
        local_e0 = local_e0 + 1;
      } while (iVar6 < local_11c);
    }
    if (local_d8 != auStack_d0) {
      fastFree(local_d8);
    }
    local_1e8 = 0;
    local_1e4 = 0;
    local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
    local_110 = 0;
    local_120 = 0x1010000;
    local_b0 = 0;
    local_c0 = 0x1010000;
    local_1f0 = (Mat *)&local_1e0;
    local_118 = (Mat *)this;
    local_b8 = (Mat *)&local_180;
    gemm((_InputArray *)&local_1f8,(_InputArray *)&local_120,1.0,(_InputArray *)&local_c0,1.0,
         param_2,0);
    goto LAB_0036f4d4;
  }
  repeat((cv *)(this + 0xc0),(Mat *)0x1,local_54,iVar6);
  if (lStack_88 != 0) {
    piVar2 = (int *)(lStack_88 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = *piVar2 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (lStack_148 != 0) {
    piVar2 = (int *)(lStack_148 + 0x14);
    do {
      iVar6 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  puVar5 = local_78;
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (local_180._4_4_ < 1) {
LAB_0036f3bc:
    if (2 < local_bc) goto LAB_0036f3c8;
    pMStack_178 = local_b8;
    local_180 = CONCAT44(local_bc,local_c0);
    *local_138 = *local_78;
    local_138[1] = puVar5[1];
  }
  else {
    iVar6 = 0;
    ppMVar9 = local_140;
    do {
      *(undefined4 *)ppMVar9 = 0;
      iVar6 = iVar6 + 1;
      ppMVar9 = (Mat **)((long)ppMVar9 + 4);
    } while (iVar6 < local_180._4_4_);
    if (local_180._4_4_ < 3) goto LAB_0036f3bc;
LAB_0036f3c8:
    local_180 = CONCAT44(local_180._4_4_,local_c0);
    Mat::copySize((Mat *)&local_180,(Mat *)&local_c0);
  }
  uStack_158 = uStack_98;
  local_160 = local_a0;
  lStack_148 = lStack_88;
  local_150 = local_90;
  uStack_168 = uStack_a8;
  local_170 = local_b0;
  if (lStack_88 != 0) {
    piVar2 = (int *)(lStack_88 + 0x14);
    do {
      iVar6 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    do {
      *local_80 = 0;
      iVar6 = iVar6 + 1;
      local_80 = local_80 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  local_1e8 = 0;
  local_1e4 = 0;
  local_1f8 = CONCAT44(local_1f8._4_4_,0x1010000);
  local_110 = 0;
  local_120 = 0x1010000;
  local_b0 = 0;
  local_c0 = 0x1010000;
  local_1f0 = (Mat *)this;
  local_118 = (Mat *)&local_1e0;
  local_b8 = (Mat *)&local_180;
  gemm((_InputArray *)&local_1f8,(_InputArray *)&local_120,1.0,(_InputArray *)&local_c0,1.0,param_2,
       1);
LAB_0036f4d4:
  if (lStack_148 != 0) {
    piVar2 = (int *)(lStack_148 + 0x14);
    do {
      iVar6 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_180._4_4_) {
    iVar6 = 0;
    ppMVar9 = local_140;
    do {
      *(undefined4 *)ppMVar9 = 0;
      iVar6 = iVar6 + 1;
      ppMVar9 = (Mat **)((long)ppMVar9 + 4);
    } while (iVar6 < local_180._4_4_);
  }
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  if (local_1a8 != 0) {
    piVar2 = (int *)(local_1a8 + 0x14);
    do {
      iVar6 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  local_1a8 = 0;
  local_1d0 = 0;
  local_1b8 = 0;
  local_1c0 = 0;
  local_1c8 = 0;
  if (0 < local_1e0._4_4_) {
    iVar6 = 0;
    ppMVar9 = local_1a0;
    do {
      *(undefined4 *)ppMVar9 = 0;
      iVar6 = iVar6 + 1;
      ppMVar9 = (Mat **)((long)ppMVar9 + 4);
    } while (iVar6 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (local_28 != 0) {
    piVar2 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar2;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar4) {
        *piVar2 = iVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    puVar10 = local_20;
    do {
      *puVar10 = 0;
      iVar6 = iVar6 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 0036fad0 (124 bytes) name=backProject

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::PCA::backProject(cv::_InputArray const&) const */

void cv::PCA::backProject(_InputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _InputArray *in_x1;
  undefined8 *in_x8;
  undefined4 local_18 [4];
  undefined4 local_8;
  undefined4 local_4;
  
  uVar2 = _UNK_0036fb78;
  uVar1 = _DAT_0036fb70;
  in_x8[8] = in_x8 + 1;
  in_x8[2] = 0;
  in_x8[1] = uVar2;
  *in_x8 = uVar1;
  in_x8[3] = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = 0;
  in_x8[7] = 0;
  in_x8[9] = in_x8 + 10;
  in_x8[0xb] = 0;
  in_x8[10] = 0;
  local_8 = 0;
  local_4 = 0;
  local_18[0] = 0x2010000;
  backProject((PCA *)param_1,in_x1,(_OutputArray *)local_18);
  return;
}


==================================================================

### FUNC 0036fb80 (500 bytes) name=PCACompute

/* cv::PCACompute(cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&,
   int) */

void cv::PCACompute(_InputArray *param_1,_InputOutputArray *param_2,_OutputArray *param_3,
                   int param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  PCA aPStack_120 [4];
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  PCA::PCA(aPStack_120);
  PCA::operator()(aPStack_120,param_1,(_InputArray *)param_2,0,param_4);
  Mat::copyTo(aMStack_60,(_OutputArray *)param_2);
  Mat::copyTo((Mat *)aPStack_120,param_3);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)aPStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      *local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 0036fdd0 (496 bytes) name=PCACompute

/* cv::PCACompute(cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&,
   double) */

void cv::PCACompute(_InputArray *param_1,_InputOutputArray *param_2,_OutputArray *param_3,
                   double param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  PCA aPStack_120 [4];
  int local_11c;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  long local_e8;
  undefined4 *local_e0;
  undefined1 *local_d8;
  undefined1 auStack_d0 [16];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  PCA::PCA(aPStack_120);
  PCA::operator()(aPStack_120,param_1,(_InputArray *)param_2,0,param_4);
  Mat::copyTo(aMStack_60,(_OutputArray *)param_2);
  Mat::copyTo((Mat *)aPStack_120,param_3);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar1 = (int *)(local_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)aPStack_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      *local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 0037001c (1760 bytes) name=PCAProject

/* cv::PCAProject(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_OutputArray const&) */

void cv::PCAProject(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                   _OutputArray *param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat *pMVar5;
  undefined4 *puVar6;
  undefined4 local_1e0;
  int local_1dc;
  undefined4 local_1d8;
  undefined4 local_1d4;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined4 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined4 local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  PCA::PCA((PCA *)&local_120);
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_2 + 8);
    local_1a0 = &local_1d8;
    local_198 = &local_190;
    local_1e0 = *(undefined4 *)pMVar5;
    local_1dc = *(int *)(pMVar5 + 4);
    local_1d8 = *(undefined4 *)(pMVar5 + 8);
    local_1d4 = *(undefined4 *)(pMVar5 + 0xc);
    local_1d0 = *(undefined8 *)(pMVar5 + 0x10);
    uStack_1c8 = *(undefined8 *)(pMVar5 + 0x18);
    local_1c0 = *(undefined8 *)(pMVar5 + 0x20);
    uStack_1b8 = *(undefined8 *)(pMVar5 + 0x28);
    local_1b0 = *(undefined8 *)(pMVar5 + 0x30);
    lStack_1a8 = *(long *)(pMVar5 + 0x38);
    local_188 = 0;
    local_190 = 0;
    if (lStack_1a8 != 0) {
      piVar1 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_190 = **(undefined8 **)(pMVar5 + 0x48);
      local_188 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_1dc = 0;
      Mat::copySize((Mat *)&local_1e0,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_00370100:
    local_60 = local_1e0;
    if (2 < local_1dc) goto LAB_0037010c;
    local_58 = local_1d8;
    local_54 = local_1d4;
    *local_18 = *local_198;
    local_18[1] = local_198[1];
    local_5c = local_1dc;
  }
  else {
    iVar4 = 0;
    puVar6 = local_20;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_5c);
    if (local_5c < 3) goto LAB_00370100;
LAB_0037010c:
    local_60 = local_1e0;
    Mat::copySize((Mat *)&local_60,(Mat *)&local_1e0);
  }
  uStack_38 = uStack_1b8;
  local_40 = local_1c0;
  lStack_28 = lStack_1a8;
  local_30 = local_1b0;
  uStack_48 = uStack_1c8;
  local_50 = local_1d0;
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1dc) {
    iVar4 = 0;
    puVar6 = local_1a0;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_1dc);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  iVar4 = _InputArray::kind(param_3);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_3 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(undefined4 *)pMVar5;
    local_17c = *(int *)(pMVar5 + 4);
    local_178 = *(undefined4 *)(pMVar5 + 8);
    local_174 = *(undefined4 *)(pMVar5 + 0xc);
    local_170 = *(undefined8 *)(pMVar5 + 0x10);
    uStack_168 = *(undefined8 *)(pMVar5 + 0x18);
    local_160 = *(undefined8 *)(pMVar5 + 0x20);
    uStack_158 = *(undefined8 *)(pMVar5 + 0x28);
    local_150 = *(undefined8 *)(pMVar5 + 0x30);
    lStack_148 = *(long *)(pMVar5 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (lStack_148 != 0) {
      piVar1 = (int *)(lStack_148 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar5 + 0x48);
      local_128 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_0037026c:
    local_120 = local_180;
    if (local_17c < 3) {
      local_114 = local_174;
      local_118 = local_178;
      *local_d8 = *local_138;
      local_d8[1] = local_138[1];
      local_11c = local_17c;
      goto LAB_00370284;
    }
  }
  else {
    iVar4 = 0;
    puVar6 = local_e0;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_11c);
    if (local_11c < 3) goto LAB_0037026c;
  }
  local_120 = local_180;
  Mat::copySize((Mat *)&local_120,(Mat *)&local_180);
LAB_00370284:
  uStack_f8 = uStack_158;
  local_100 = local_160;
  lStack_e8 = lStack_148;
  local_f0 = local_150;
  uStack_108 = uStack_168;
  local_110 = local_170;
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar4 = 0;
    puVar6 = local_140;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_17c);
  }
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  PCA::project((PCA *)&local_120,param_1,param_4);
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      *local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 003707a4 (1760 bytes) name=PCABackProject

/* cv::PCABackProject(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&,
   cv::_OutputArray const&) */

void cv::PCABackProject(_InputArray *param_1,_InputArray *param_2,_InputArray *param_3,
                       _OutputArray *param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat *pMVar5;
  undefined4 *puVar6;
  undefined4 local_1e0;
  int local_1dc;
  undefined4 local_1d8;
  undefined4 local_1d4;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined4 *local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 local_188;
  undefined4 local_180;
  int local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  undefined4 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined4 *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined4 local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  PCA::PCA((PCA *)&local_120);
  iVar4 = _InputArray::kind(param_2);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_2 + 8);
    local_1a0 = &local_1d8;
    local_198 = &local_190;
    local_1e0 = *(undefined4 *)pMVar5;
    local_1dc = *(int *)(pMVar5 + 4);
    local_1d8 = *(undefined4 *)(pMVar5 + 8);
    local_1d4 = *(undefined4 *)(pMVar5 + 0xc);
    local_1d0 = *(undefined8 *)(pMVar5 + 0x10);
    uStack_1c8 = *(undefined8 *)(pMVar5 + 0x18);
    local_1c0 = *(undefined8 *)(pMVar5 + 0x20);
    uStack_1b8 = *(undefined8 *)(pMVar5 + 0x28);
    local_1b0 = *(undefined8 *)(pMVar5 + 0x30);
    lStack_1a8 = *(long *)(pMVar5 + 0x38);
    local_188 = 0;
    local_190 = 0;
    if (lStack_1a8 != 0) {
      piVar1 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_190 = **(undefined8 **)(pMVar5 + 0x48);
      local_188 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_1dc = 0;
      Mat::copySize((Mat *)&local_1e0,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (local_5c < 1) {
LAB_00370888:
    local_60 = local_1e0;
    if (2 < local_1dc) goto LAB_00370894;
    local_58 = local_1d8;
    local_54 = local_1d4;
    *local_18 = *local_198;
    local_18[1] = local_198[1];
    local_5c = local_1dc;
  }
  else {
    iVar4 = 0;
    puVar6 = local_20;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_5c);
    if (local_5c < 3) goto LAB_00370888;
LAB_00370894:
    local_60 = local_1e0;
    Mat::copySize((Mat *)&local_60,(Mat *)&local_1e0);
  }
  uStack_38 = uStack_1b8;
  local_40 = local_1c0;
  lStack_28 = lStack_1a8;
  local_30 = local_1b0;
  uStack_48 = uStack_1c8;
  local_50 = local_1d0;
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < local_1dc) {
    iVar4 = 0;
    puVar6 = local_1a0;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_1dc);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  iVar4 = _InputArray::kind(param_3);
  if (iVar4 == 0x10000) {
    pMVar5 = *(Mat **)(param_3 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(undefined4 *)pMVar5;
    local_17c = *(int *)(pMVar5 + 4);
    local_178 = *(undefined4 *)(pMVar5 + 8);
    local_174 = *(undefined4 *)(pMVar5 + 0xc);
    local_170 = *(undefined8 *)(pMVar5 + 0x10);
    uStack_168 = *(undefined8 *)(pMVar5 + 0x18);
    local_160 = *(undefined8 *)(pMVar5 + 0x20);
    uStack_158 = *(undefined8 *)(pMVar5 + 0x28);
    local_150 = *(undefined8 *)(pMVar5 + 0x30);
    lStack_148 = *(long *)(pMVar5 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (lStack_148 != 0) {
      piVar1 = (int *)(lStack_148 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar5 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar5 + 0x48);
      local_128 = (*(undefined8 **)(pMVar5 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar5);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_11c < 1) {
LAB_003709f4:
    local_120 = local_180;
    if (local_17c < 3) {
      local_114 = local_174;
      local_118 = local_178;
      *local_d8 = *local_138;
      local_d8[1] = local_138[1];
      local_11c = local_17c;
      goto LAB_00370a0c;
    }
  }
  else {
    iVar4 = 0;
    puVar6 = local_e0;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_11c);
    if (local_11c < 3) goto LAB_003709f4;
  }
  local_120 = local_180;
  Mat::copySize((Mat *)&local_120,(Mat *)&local_180);
LAB_00370a0c:
  uStack_f8 = uStack_158;
  local_100 = local_160;
  lStack_e8 = lStack_148;
  local_f0 = local_150;
  uStack_108 = uStack_168;
  local_110 = local_170;
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < local_17c) {
    iVar4 = 0;
    puVar6 = local_140;
    do {
      *puVar6 = 0;
      iVar4 = iVar4 + 1;
      puVar6 = puVar6 + 1;
    } while (iVar4 < local_17c);
  }
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  PCA::backProject((PCA *)&local_120,param_1,param_4);
  if (lStack_28 != 0) {
    piVar1 = (int *)(lStack_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar4 = 0;
    do {
      *local_80 = 0;
      iVar4 = iVar4 + 1;
      local_80 = local_80 + 1;
    } while (iVar4 < local_bc);
  }
  if (local_78 != auStack_70) {
    fastFree(local_78);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      *local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = local_e0 + 1;
    } while (iVar4 < local_11c);
  }
  if (local_d8 != auStack_d0) {
    fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 00370f2c (76 bytes) name=FUN_00370f2c

uint FUN_00370f2c(uint *param_1)

{
  if (param_1 == (uint *)0x0) {
    return 0;
  }
  if (((*param_1 & 0xffff0000) == 0x42420000) && (-1 < (int)param_1[9])) {
    return ~param_1[8] >> 0x1f;
  }
  return 0;
}


==================================================================

### FUNC 00370f78 (28 bytes) name=FUN_00370f78

bool FUN_00370f78(uint *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if (param_1 != (uint *)0x0) {
    bVar1 = (*param_1 & 0xffff0000) == 0x42430000;
  }
  return bVar1;
}


==================================================================

### FUNC 00370f94 (28 bytes) name=FUN_00370f94

bool FUN_00370f94(uint *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if (param_1 != (uint *)0x0) {
    bVar1 = (*param_1 & 0xffff0000) == 0x42440000;
  }
  return bVar1;
}


==================================================================

### FUNC 00370fb0 (88 bytes) name=FUN_00370fb0

int FUN_00370fb0(undefined8 *param_1,undefined8 *param_2,int *param_3)

{
  int *piVar1;
  int iVar2;
  int *piVar3;
  int *piVar4;
  
  piVar4 = (int *)*param_2;
  piVar3 = (int *)*param_1;
  if (*param_3 < 1) {
LAB_00371000:
    iVar2 = 0;
  }
  else {
    iVar2 = *piVar3 - *piVar4;
    if (iVar2 == 0) {
      piVar1 = piVar3 + (*param_3 - 1);
      do {
        piVar4 = piVar4 + 1;
        if (piVar3 == piVar1) goto LAB_00371000;
        piVar3 = piVar3 + 1;
        iVar2 = *piVar3 - *piVar4;
      } while (iVar2 == 0);
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00371008 (20 bytes) name=FUN_00371008

bool FUN_00371008(int *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if (param_1 != (int *)0x0) {
    bVar1 = *param_1 == 0x90;
  }
  return bVar1;
}


==================================================================

### FUNC 0037101c (28 bytes) name=FUN_0037101c

bool FUN_0037101c(uint *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if (param_1 != (uint *)0x0) {
    bVar1 = (*param_1 & 0xffff0000) == 0x42990000;
  }
  return bVar1;
}


==================================================================

### FUNC 00371038 (36 bytes) name=FUN_00371038

bool FUN_00371038(uint *param_1)

{
  bool bVar1;
  
  bVar1 = false;
  if (param_1 != (uint *)0x0) {
    bVar1 = (*param_1 & 0xffff3000) == 0x42981000;
  }
  return bVar1;
}


==================================================================

### FUNC 0037105c (16 bytes) name=isOpened

/* cv::FileStorage::isOpened() const */

undefined1 __thiscall cv::FileStorage::isOpened(FileStorage *this)

{
  undefined1 uVar1;
  
  uVar1 = 0;
  if (*(long *)(this + 0x10) != 0) {
    uVar1 = *(undefined1 *)(*(long *)(this + 0x10) + 0x180);
  }
  return uVar1;
}


==================================================================

### FUNC 0037106c (4 bytes) name=FUN_0037106c

void FUN_0037106c(void)

{
  return;
}


==================================================================

### FUNC 00371070 (4 bytes) name=FUN_00371070

void FUN_00371070(void)

{
  return;
}


==================================================================

### FUNC 00371074 (160 bytes) name=FUN_00371074

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00371074(undefined8 *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined1 uVar3;
  undefined8 *puVar4;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 != (undefined8 *)0x0) {
    *param_1 = 0;
    return;
  }
  local_10 = param_1;
  local_8 = param_1;
  puVar4 = (undefined8 *)cv::String::allocate((String *)&local_10,0x13);
  uVar3 = DAT_004707e2;
  uVar2 = _DAT_004707d8;
  uVar1 = DAT_004707d0;
  *(undefined2 *)(puVar4 + 2) = DAT_004707e0;
  *(undefined1 *)((long)puVar4 + 0x12) = uVar3;
  *puVar4 = uVar1;
  puVar4[1] = uVar2;
  cv::error(-0x1b,(String *)&local_10,"void icvReleaseGraph(void**)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x113a);
  cv::String::deallocate((String *)&local_10);
  uRam0000000000000000 = 0;
  return;
}


==================================================================

### FUNC 00371128 (160 bytes) name=FUN_00371128

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00371128(undefined8 *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined1 uVar3;
  undefined8 *puVar4;
  undefined8 *local_10;
  undefined8 *local_8;
  
  if (param_1 != (undefined8 *)0x0) {
    *param_1 = 0;
    return;
  }
  local_10 = param_1;
  local_8 = param_1;
  puVar4 = (undefined8 *)cv::String::allocate((String *)&local_10,0x13);
  uVar3 = DAT_004707e2;
  uVar2 = _DAT_004707d8;
  uVar1 = DAT_004707d0;
  *(undefined2 *)(puVar4 + 2) = DAT_004707e0;
  *(undefined1 *)((long)puVar4 + 0x12) = uVar3;
  *puVar4 = uVar1;
  puVar4[1] = uVar2;
  cv::error(-0x1b,(String *)&local_10,"void icvReleaseSeq(void**)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf9c);
  cv::String::deallocate((String *)&local_10);
  uRam0000000000000000 = 0;
  return;
}


==================================================================

### FUNC 003711dc (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 003711e0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 003711e4 (52 bytes) name=FUN_003711e4

void FUN_003711e4(long *param_1)

{
  cv::DefaultDeleter<CvFileStorage>::operator()
            ((DefaultDeleter<CvFileStorage> *)(param_1 + 3),(CvFileStorage *)param_1[2]);
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 00371218 (52 bytes) name=FUN_00371218

void FUN_00371218(long *param_1)

{
  cv::DefaultDeleter<CvSparseMat>::operator()
            ((DefaultDeleter<CvSparseMat> *)(param_1 + 3),(CvSparseMat *)param_1[2]);
  (**(code **)(*param_1 + 8))(param_1);
  return;
}


==================================================================

### FUNC 0037124c (4 bytes) name=cvReleaseMat

void cvReleaseMat(void)

{
  (*(code *)PTR_cvReleaseMat_00500ee0)();
  return;
}


==================================================================

### FUNC 00371250 (8 bytes) name=FUN_00371250

void FUN_00371250(undefined8 param_1)

{
  cvCloneGraph(param_1,0);
  return;
}


==================================================================

### FUNC 00371258 (36 bytes) name=FUN_00371258

void FUN_00371258(undefined8 param_1)

{
  cvSeqSlice(param_1,0x3fffffff00000000,0,1);
  return;
}


==================================================================

### FUNC 0037127c (676 bytes) name=FUN_0037127c

char * FUN_0037127c(long param_1,char *param_2)

{
  char *pcVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  uint uVar5;
  char *pcVar6;
  void *pvVar7;
  long *__src;
  char *pcVar8;
  long lVar9;
  ulong uVar10;
  size_t sVar11;
  long *plVar12;
  long *plVar13;
  long *__dest;
  long lVar14;
  long local_10;
  long local_8;
  
  plVar12 = *(long **)(param_1 + 0x178);
  if (plVar12 == (long *)0x0) {
    if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
      local_10 = *(long *)(param_1 + 0x70);
      if (local_10 == 0) {
        local_8 = local_10;
        pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x19);
        cVar4 = s_The_storage_is_not_opened_00470830[0x18];
        uVar3 = s_The_storage_is_not_opened_00470830._8_8_;
        uVar2 = s_The_storage_is_not_opened_00470830._0_8_;
        *(undefined8 *)(pcVar6 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
        pcVar6[0x18] = cVar4;
        *(undefined8 *)pcVar6 = uVar2;
        *(undefined8 *)(pcVar6 + 8) = uVar3;
        cv::error(-2,(String *)&local_10,"void icvPuts(CvFileStorage*, const char*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x100);
        pcVar6 = (char *)cv::String::deallocate((String *)&local_10);
      }
      else {
        pcVar6 = (char *)gzputs(local_10);
      }
    }
    else {
      uVar5 = fputs(param_2,*(FILE **)(param_1 + 0x68));
      pcVar6 = (char *)(ulong)uVar5;
    }
  }
  else {
    pcVar6 = (char *)strlen(param_2);
    if (0 < (long)pcVar6) {
      pcVar8 = (char *)plVar12[6];
      pcVar1 = param_2 + (long)pcVar6;
      do {
        if (pcVar8 == (char *)(plVar12[8] + -1)) {
          plVar13 = (long *)plVar12[9];
          uVar10 = plVar12[1];
          if (uVar10 - ((long)plVar13 - *plVar12 >> 3) < 2) {
            __src = (long *)plVar12[5];
            lVar14 = (long)plVar13 - (long)__src >> 3;
            lVar9 = lVar14 + 2;
            if ((ulong)(lVar9 * 2) < uVar10) {
              __dest = (long *)(*plVar12 + (uVar10 - lVar9 >> 1) * 8);
              if (__dest < __src) {
                sVar11 = (long)plVar13 + (8 - (long)__src);
                if ((long)sVar11 >> 3 != 0) {
                  memmove(__dest,__src,sVar11);
                }
              }
              else {
                sVar11 = (long)plVar13 + (8 - (long)__src);
                if ((long)sVar11 >> 3 != 0) {
                  memmove((void *)((long)__dest + ((lVar14 + 1) * 8 - sVar11)),__src,sVar11);
                }
              }
            }
            else {
              if (uVar10 == 0) {
                uVar10 = 3;
              }
              else {
                uVar10 = uVar10 * 2 + 2;
                if (0x1fffffffffffffff < uVar10) {
                    /* WARNING: Subroutine does not return */
                  FUN_0040f0e4();
                }
              }
              pvVar7 = operator_new(uVar10 << 3);
              __dest = (long *)((long)pvVar7 + (uVar10 - lVar9 >> 1) * 8);
              sVar11 = (plVar12[9] + 8) - plVar12[5];
              if ((long)sVar11 >> 3 != 0) {
                memmove(__dest,(void *)plVar12[5],sVar11);
              }
              operator_delete((void *)*plVar12);
              *plVar12 = (long)pvVar7;
              plVar12[1] = uVar10;
            }
            plVar12[5] = (long)__dest;
            lVar9 = *__dest;
            plVar13 = __dest + lVar14;
            plVar12[3] = lVar9;
            plVar12[4] = lVar9 + 0x200;
            plVar12[9] = (long)plVar13;
            lVar9 = __dest[lVar14];
            plVar12[7] = lVar9;
            plVar12[8] = lVar9 + 0x200;
          }
          pvVar7 = operator_new(0x200);
          plVar13[1] = (long)pvVar7;
          if ((char *)plVar12[6] != (char *)0x0) {
            *(char *)plVar12[6] = *param_2;
          }
          lVar9 = plVar12[9];
          plVar12[9] = lVar9 + 8;
          pcVar8 = *(char **)(lVar9 + 8);
          plVar12[7] = (long)pcVar8;
          pcVar6 = pcVar8 + 0x200;
          plVar12[8] = (long)pcVar6;
          plVar12[6] = (long)pcVar8;
        }
        else {
          lVar9 = 0;
          if (pcVar8 != (char *)0x0) {
            *pcVar8 = *param_2;
            lVar9 = plVar12[6];
          }
          pcVar8 = (char *)(lVar9 + 1);
          plVar12[6] = (long)pcVar8;
        }
        param_2 = param_2 + 1;
      } while (param_2 != pcVar1);
    }
  }
  return pcVar6;
}


==================================================================

### FUNC 00371534 (744 bytes) name=FUN_00371534

size_t FUN_00371534(char *param_1,undefined4 *param_2)

{
  undefined4 *puVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 uVar7;
  int iVar8;
  size_t sVar9;
  char *pcVar10;
  long lVar11;
  char *pcVar12;
  ulong uVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  ulong uVar18;
  char *local_10;
  char *local_8;
  
  if (param_1 == (char *)0x0) {
    return 0;
  }
  sVar9 = strlen(param_1);
  iVar8 = (int)sVar9;
  if (iVar8 != 0) {
    *param_2 = 0;
    if (iVar8 < 1) {
      sVar9 = 0;
    }
    else {
      uVar18 = 0;
      iVar14 = 0;
      do {
        uVar15 = (int)param_1[iVar14] - 0x30;
        iVar17 = (int)uVar18;
        if ((uVar15 & 0xff) < 10) {
          if ((byte)((param_1 + iVar14)[1] - 0x30U) < 10) {
            local_10 = (char *)0x0;
            lVar11 = strtol(param_1 + iVar14,&local_10,10);
            uVar15 = (uint)lVar11;
            iVar14 = ((int)local_10 - (int)param_1) + -1;
          }
          if ((int)uVar15 < 1) {
            local_10 = (char *)0x0;
            local_8 = (char *)0x0;
            pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x1f);
            cVar6 = s_Invalid_data_type_specification_00470850[0x1e];
            uVar5 = s_Invalid_data_type_specification_00470850._28_2_;
            uVar4 = s_Invalid_data_type_specification_00470850._24_4_;
            uVar3 = s_Invalid_data_type_specification_00470850._8_8_;
            uVar2 = s_Invalid_data_type_specification_00470850._0_8_;
            *(undefined8 *)(pcVar10 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
            *(undefined4 *)(pcVar10 + 0x18) = uVar4;
            *(undefined2 *)(pcVar10 + 0x1c) = uVar5;
            pcVar10[0x1e] = cVar6;
            *(undefined8 *)pcVar10 = uVar2;
            *(undefined8 *)(pcVar10 + 8) = uVar3;
            cv::error(-5,(String *)&local_10,"int icvDecodeFormat(const char*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0);
            cv::String::deallocate((String *)&local_10);
          }
          param_2[iVar17] = uVar15;
        }
        else {
          pcVar10 = strchr("ucwsifdr",(int)param_1[iVar14]);
          if (pcVar10 == (char *)0x0) {
            local_10 = pcVar10;
            local_8 = pcVar10;
            pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x1f);
            cVar6 = s_Invalid_data_type_specification_00470850[0x1e];
            uVar5 = s_Invalid_data_type_specification_00470850._28_2_;
            uVar4 = s_Invalid_data_type_specification_00470850._24_4_;
            uVar3 = s_Invalid_data_type_specification_00470850._8_8_;
            uVar2 = s_Invalid_data_type_specification_00470850._0_8_;
            *(undefined8 *)(pcVar12 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
            *(undefined4 *)(pcVar12 + 0x18) = uVar4;
            *(undefined2 *)(pcVar12 + 0x1c) = uVar5;
            pcVar12[0x1e] = cVar6;
            *(undefined8 *)pcVar12 = uVar2;
            *(undefined8 *)(pcVar12 + 8) = uVar3;
            cv::error(-5,(String *)&local_10,"int icvDecodeFormat(const char*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8);
            cv::String::deallocate((String *)&local_10);
          }
          uVar13 = -(uVar18 >> 0x1f) & 0xfffffffc00000000 | uVar18 << 2;
          puVar1 = (undefined4 *)((long)param_2 + uVar13);
          if (*(int *)((long)param_2 + uVar13) == 0) {
            *(undefined4 *)((long)param_2 + uVar13) = 1;
          }
          iVar16 = (int)pcVar10 + -0x472f10;
          puVar1[1] = iVar16;
          if (iVar17 == 0) {
            uVar18 = 2;
            *(undefined4 *)((long)param_2 + uVar13 + 8) = 0;
          }
          else if (iVar16 == puVar1[-1]) {
            *(int *)((long)param_2 + (uVar13 - 8)) =
                 *(int *)((long)param_2 + (uVar13 - 8)) + *(int *)((long)param_2 + uVar13);
            *puVar1 = 0;
          }
          else {
            uVar15 = iVar17 + 2;
            uVar18 = (ulong)uVar15;
            if ((int)uVar15 < 0x100) {
              lVar11 = (long)(int)uVar15 * 4;
            }
            else {
              local_10 = (char *)0x0;
              local_8 = (char *)0x0;
              pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x20);
              uVar7 = s_Too_long_data_type_specification_00470870._24_8_;
              uVar3 = s_Too_long_data_type_specification_00470870._16_8_;
              uVar2 = s_Too_long_data_type_specification_00470870._8_8_;
              *(undefined8 *)pcVar10 = s_Too_long_data_type_specification_00470870._0_8_;
              *(undefined8 *)(pcVar10 + 8) = uVar2;
              *(undefined8 *)(pcVar10 + 0x10) = uVar3;
              *(undefined8 *)(pcVar10 + 0x18) = uVar7;
              cv::error(-5,(String *)&local_10,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbe2)
              ;
              cv::String::deallocate((String *)&local_10);
              lVar11 = (long)(int)uVar15 << 2;
            }
            *(undefined4 *)((long)param_2 + lVar11) = 0;
          }
        }
        iVar14 = iVar14 + 1;
      } while (iVar14 < iVar8);
      sVar9 = (size_t)(uint)((int)uVar18 >> 1);
    }
  }
  return sVar9;
}


==================================================================

### FUNC 00371858 (112 bytes) name=FUN_00371858

void FUN_00371858(undefined8 param_1,ulong param_2,undefined8 param_3,undefined8 param_4,
                 undefined4 param_5)

{
  char acStack_400 [1024];
  
  sprintf(acStack_400,"%s(%d): %s",param_1,param_2 & 0xffffffff,param_4);
  cvError(0xffffff2c,param_3,acStack_400,
          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",param_5);
  return;
}


==================================================================

### FUNC 003718c8 (288 bytes) name=FUN_003718c8

void FUN_003718c8(long param_1,uint param_2,uint *param_3)

{
  undefined8 uVar1;
  long lVar2;
  undefined8 *puVar3;
  
  if ((param_2 & 7) != 6) {
    uVar1 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
    if ((*param_3 & 7) != 0) {
      cvSeqPush(uVar1,param_3);
    }
    *(undefined8 *)(param_3 + 4) = uVar1;
    *param_3 = param_2;
    cvSetSeqBlockSize(uVar1,8);
    return;
  }
  if (*param_3 != 0) {
    FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                 "void icvFSCreateCollection(CvFileStorage*, int, CvFileNode*)",
                 "Sequence element should not have name (use <_></_>)",0x199);
  }
  uVar1 = *(undefined8 *)(param_1 + 0x10);
  lVar2 = cvCreateSet(0,0x78,0x30,uVar1);
  *(undefined4 *)(lVar2 + 0x6c) = 0x10;
  puVar3 = (undefined8 *)cvMemStorageAlloc(uVar1,0x80);
  *(undefined8 **)(lVar2 + 0x70) = puVar3;
  *puVar3 = 0;
  puVar3[1] = 0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  puVar3[4] = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  puVar3[0xb] = 0;
  puVar3[0xc] = 0;
  puVar3[0xd] = 0;
  puVar3[0xe] = 0;
  puVar3[0xf] = 0;
  *(long *)(param_3 + 4) = lVar2;
  *param_3 = param_2;
  cvSetSeqBlockSize(lVar2,8);
  return;
}


==================================================================

### FUNC 003719e8 (124 bytes) name=release

/* cv::FileStorage::release() */

void __thiscall cv::FileStorage::release(FileStorage *this)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  long *plVar5;
  
  plVar5 = *(long **)(this + 8);
  if (plVar5 != (long *)0x0) {
    plVar1 = plVar5 + 1;
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))();
      *(undefined8 *)(this + 8) = 0;
      *(undefined8 *)(this + 0x10) = 0;
      *(undefined8 *)(this + 0x30) = *(undefined8 *)(this + 0x28);
      *(undefined4 *)(this + 0x40) = 0;
      return;
    }
  }
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x30) = *(undefined8 *)(this + 0x28);
  *(undefined4 *)(this + 0x40) = 0;
  return;
}


==================================================================

### FUNC 00371a64 (1628 bytes) name=FUN_00371a64

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00371a64(long param_1,char *param_2,uint param_3,undefined8 *param_4)

{
  char cVar1;
  byte bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined2 uVar12;
  int iVar13;
  void *pvVar14;
  size_t sVar15;
  char *pcVar16;
  size_t sVar17;
  undefined8 *puVar18;
  int iVar19;
  undefined1 *puVar20;
  long lVar21;
  undefined1 *puVar22;
  int iVar23;
  int iVar24;
  size_t __n;
  uint local_14;
  undefined8 local_10;
  undefined8 local_8;
  
  puVar20 = *(undefined1 **)(param_1 + 0x78);
  local_14 = *(uint *)(param_1 + 0x44);
  if ((param_2 == (char *)0x0) || (cVar1 = *param_2, cVar1 == '\0')) {
    if ((param_3 & 0xfffffffd) == 1) {
      param_2 = (char *)0x0;
      if (4 < (local_14 & 7)) goto LAB_00371ad8;
      *(undefined4 *)(param_1 + 0xc) = 0;
      local_14 = 0x25;
      goto LAB_00371b9c;
    }
LAB_00371c68:
    *puVar20 = 0x3c;
    iVar13 = 1;
    param_2 = "_";
  }
  else {
    if ((param_3 & 0xfffffffd) == 1) {
      if ((local_14 & 7) < 5) {
        *(undefined4 *)(param_1 + 0xc) = 0;
        local_14 = 0x26;
      }
      else {
LAB_00371ad8:
        if (((local_14 & 7) == 6) != (param_2 != (char *)0x0)) {
          local_10 = 0;
          local_8 = 0;
          pvVar14 = (void *)cv::String::allocate((String *)&local_10,0x55);
          memcpy(pvVar14,
                 "An attempt to add element without a key to a map, or add element with key to sequence"
                 ,0x55);
          cv::error(-5,(String *)&local_10,
                    "void icvXMLWriteTag(CvFileStorage*, const char*, int, CvAttrList)",
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x8ee);
          cv::String::deallocate((String *)&local_10);
        }
        if ((local_14 >> 5 & 1) == 0) {
          puVar20 = *(undefined1 **)(param_1 + 0x78);
          lVar21 = *(long *)(param_1 + 0x80);
          iVar13 = *(int *)(param_1 + 0x58);
          if ((undefined1 *)(lVar21 + iVar13) < puVar20) {
            puVar20[1] = (byte)local_14 & 0x20;
            *puVar20 = 10;
            FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
            lVar21 = *(long *)(param_1 + 0x80);
            iVar13 = *(int *)(param_1 + 0x58);
            *(long *)(param_1 + 0x78) = lVar21;
          }
          iVar19 = *(int *)(param_1 + 0x40);
          if (iVar19 != iVar13) {
            if (iVar13 < iVar19) {
              memset((void *)(lVar21 + iVar13),0x20,(long)(iVar19 - iVar13));
              lVar21 = *(long *)(param_1 + 0x80);
            }
            *(int *)(param_1 + 0x58) = iVar19;
            iVar13 = iVar19;
          }
          puVar20 = (undefined1 *)(lVar21 + iVar13);
          *(undefined1 **)(param_1 + 0x78) = puVar20;
        }
      }
LAB_00371b9c:
      if (param_2 == (char *)0x0) goto LAB_00371c68;
      cVar1 = *param_2;
    }
    if ((cVar1 == '_') && (param_2[1] == '\0')) {
      local_10 = 0;
      local_8 = 0;
      puVar18 = (undefined8 *)cv::String::allocate((String *)&local_10,0x21);
      uVar6 = DAT_00470950;
      uVar5 = DAT_00470948;
      uVar4 = _LAB_00470940;
      uVar3 = DAT_00470938;
      *(undefined1 *)(puVar18 + 4) = DAT_00470958;
      *puVar18 = uVar3;
      puVar18[1] = uVar4;
      puVar18[2] = uVar5;
      puVar18[3] = uVar6;
      cv::error(-5,(String *)&local_10,
                "void icvXMLWriteTag(CvFileStorage*, const char*, int, CvAttrList)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x8fd);
      cv::String::deallocate((String *)&local_10);
    }
    sVar15 = strlen(param_2);
    iVar13 = (int)sVar15;
    *puVar20 = 0x3c;
  }
  if (param_3 == 2) {
    if (param_4 != (undefined8 *)0x0) {
      local_10 = 0;
      local_8 = 0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_10,0x2d);
      cVar1 = s_Closing_tag_should_not_include_a_00470960[0x2c];
      uVar7 = s_Closing_tag_should_not_include_a_00470960._40_4_;
      uVar6 = s_Closing_tag_should_not_include_a_00470960._24_8_;
      uVar5 = s_Closing_tag_should_not_include_a_00470960._16_8_;
      uVar4 = s_Closing_tag_should_not_include_a_00470960._8_8_;
      uVar3 = s_Closing_tag_should_not_include_a_00470960._0_8_;
      *(undefined8 *)(pcVar16 + 0x20) = s_Closing_tag_should_not_include_a_00470960._32_8_;
      *(undefined4 *)(pcVar16 + 0x28) = uVar7;
      pcVar16[0x2c] = cVar1;
      *(undefined8 *)pcVar16 = uVar3;
      *(undefined8 *)(pcVar16 + 8) = uVar4;
      *(undefined8 *)(pcVar16 + 0x10) = uVar5;
      *(undefined8 *)(pcVar16 + 0x18) = uVar6;
      cv::error(-5,(String *)&local_10,
                "void icvXMLWriteTag(CvFileStorage*, const char*, int, CvAttrList)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x904);
      cv::String::deallocate((String *)&local_10);
    }
    puVar22 = puVar20 + 2;
    puVar20[1] = 0x2f;
  }
  else {
    puVar22 = puVar20 + 1;
  }
  if ((0x19 < (((int)*param_2 & 0xffffffdfU) - 0x41 & 0xff)) && ((int)*param_2 != 0x5f)) {
    local_10 = 0;
    local_8 = 0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_10,0x23);
    cVar1 = s_Key_should_start_with_a_letter_o_004709e0[0x22];
    uVar6 = s_Key_should_start_with_a_letter_o_004709e0._24_8_;
    uVar5 = s_Key_should_start_with_a_letter_o_004709e0._16_8_;
    uVar4 = s_Key_should_start_with_a_letter_o_004709e0._8_8_;
    uVar3 = s_Key_should_start_with_a_letter_o_004709e0._0_8_;
    *(undefined2 *)(pcVar16 + 0x20) = s_Key_should_start_with_a_letter_o_004709e0._32_2_;
    pcVar16[0x22] = cVar1;
    *(undefined8 *)pcVar16 = uVar3;
    *(undefined8 *)(pcVar16 + 8) = uVar4;
    *(undefined8 *)(pcVar16 + 0x10) = uVar5;
    *(undefined8 *)(pcVar16 + 0x18) = uVar6;
    cv::error(-5,(String *)&local_10,
              "void icvXMLWriteTag(CvFileStorage*, const char*, int, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x909);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(undefined1 **)(param_1 + 0x88) <= puVar22 + iVar13) {
    iVar23 = (int)puVar22 - (int)*(long *)(param_1 + 0x80);
    iVar24 = (int)((((long)*(undefined1 **)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) / 2);
    iVar19 = iVar13 + iVar23;
    if (iVar13 + iVar23 < iVar24) {
      iVar19 = iVar24;
    }
    pvVar14 = (void *)cv::cvAlloc((long)(iVar19 + 0x100));
    *(long *)(param_1 + 0x78) =
         (long)pvVar14 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
    if (0 < iVar23) {
      memcpy(pvVar14,*(void **)(param_1 + 0x80),(long)iVar23);
    }
    *(void **)(param_1 + 0x80) = pvVar14;
    *(long *)(param_1 + 0x88) = (long)pvVar14 + (long)iVar19;
    puVar22 = (undefined1 *)((long)pvVar14 + (long)iVar23);
  }
  lVar21 = 0;
  if (0 < iVar13) {
    do {
      bVar2 = param_2[lVar21];
      if ((((9 < (byte)(bVar2 - 0x30)) && (0x19 < (byte)((bVar2 & 0xdf) + 0xbf))) && (bVar2 != 0x5f)
          ) && (bVar2 != 0x2d)) {
        local_10 = 0;
        local_8 = 0;
        pcVar16 = (char *)cv::String::allocate((String *)&local_10,0x4a);
        uVar12 = s_Key_name_may_only_contain_alphan_00470990._72_2_;
        uVar11 = s_Key_name_may_only_contain_alphan_00470990._56_8_;
        uVar10 = s_Key_name_may_only_contain_alphan_00470990._48_8_;
        uVar9 = s_Key_name_may_only_contain_alphan_00470990._40_8_;
        uVar8 = s_Key_name_may_only_contain_alphan_00470990._32_8_;
        uVar6 = s_Key_name_may_only_contain_alphan_00470990._24_8_;
        uVar5 = s_Key_name_may_only_contain_alphan_00470990._16_8_;
        uVar4 = s_Key_name_may_only_contain_alphan_00470990._8_8_;
        uVar3 = s_Key_name_may_only_contain_alphan_00470990._0_8_;
        *(undefined8 *)(pcVar16 + 0x40) = s_Key_name_may_only_contain_alphan_00470990._64_8_;
        *(undefined2 *)(pcVar16 + 0x48) = uVar12;
        *(undefined8 *)pcVar16 = uVar3;
        *(undefined8 *)(pcVar16 + 8) = uVar4;
        *(undefined8 *)(pcVar16 + 0x10) = uVar5;
        *(undefined8 *)(pcVar16 + 0x18) = uVar6;
        *(undefined8 *)(pcVar16 + 0x20) = uVar8;
        *(undefined8 *)(pcVar16 + 0x28) = uVar9;
        *(undefined8 *)(pcVar16 + 0x30) = uVar10;
        *(undefined8 *)(pcVar16 + 0x38) = uVar11;
        cv::error(-5,(String *)&local_10,
                  "void icvXMLWriteTag(CvFileStorage*, const char*, int, CvAttrList)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x910);
        cv::String::deallocate((String *)&local_10);
      }
      puVar22[lVar21] = bVar2;
      lVar21 = lVar21 + 1;
    } while ((int)lVar21 < iVar13);
  }
  puVar22 = puVar22 + iVar13;
  if (param_4 != (undefined8 *)0x0) {
    pcVar16 = (char *)*param_4;
    while (pcVar16 != (char *)0x0) {
      sVar15 = strlen(pcVar16);
      sVar17 = strlen((char *)param_4[1]);
      iVar13 = (int)sVar17 + (int)sVar15 + 4;
      if (*(undefined1 **)(param_1 + 0x88) <= puVar22 + iVar13) {
        iVar19 = (int)puVar22 - (int)*(long *)(param_1 + 0x80);
        iVar13 = iVar13 + iVar19;
        iVar23 = (int)((((long)*(undefined1 **)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) /
                      2);
        if (iVar13 < iVar23) {
          iVar13 = iVar23;
        }
        pvVar14 = (void *)cv::cvAlloc((long)(iVar13 + 0x100));
        *(long *)(param_1 + 0x78) =
             (long)pvVar14 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
        if (0 < iVar19) {
          memcpy(pvVar14,*(void **)(param_1 + 0x80),(long)iVar19);
        }
        *(void **)(param_1 + 0x80) = pvVar14;
        *(long *)(param_1 + 0x88) = (long)pvVar14 + (long)iVar13;
        puVar22 = (undefined1 *)((long)pvVar14 + (long)iVar19);
      }
      *puVar22 = 0x20;
      __n = (size_t)(int)sVar15;
      puVar22 = puVar22 + 1;
      sVar15 = (size_t)(int)sVar17;
      memcpy(puVar22,(void *)*param_4,__n);
      puVar22[__n] = 0x3d;
      puVar20 = puVar22 + __n + 2;
      puVar22[__n + 1] = 0x22;
      memcpy(puVar20,(void *)param_4[1],sVar15);
      puVar20[sVar15] = 0x22;
      param_4 = param_4 + 2;
      puVar22 = puVar20 + sVar15 + 1;
      if (param_4 == (undefined8 *)0x0) break;
      pcVar16 = (char *)*param_4;
    }
  }
  puVar20 = puVar22;
  if (param_3 == 3) {
    puVar20 = puVar22 + 1;
    *puVar22 = 0x2f;
  }
  *puVar20 = 0x3e;
  *(uint *)(param_1 + 0x44) = local_14 & 0xffffffdf;
  *(undefined1 **)(param_1 + 0x78) = puVar20 + 1;
  return;
}


==================================================================

### FUNC 00372124 (212 bytes) name=FUN_00372124

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00372124(long param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 *puVar3;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 uStack_10;
  undefined4 local_8;
  undefined4 local_4;
  
  if (*(int *)(*(long *)(param_1 + 0x38) + 0x28) == 0) {
    local_28 = 0;
    local_20 = 0;
    puVar3 = (undefined8 *)cv::String::allocate((String *)&local_28,0x14);
    uVar2 = DAT_00470a10;
    uVar1 = _LAB_00470a08;
    *(undefined4 *)(puVar3 + 2) = DAT_00470a18;
    *puVar3 = uVar1;
    puVar3[1] = uVar2;
    cv::error(-2,(String *)&local_28,"void icvXMLEndWriteStruct(CvFileStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x968);
    cv::String::deallocate((String *)&local_28);
  }
  FUN_00371a64(param_1,*(undefined8 *)(param_1 + 0x50),2,0,0);
  cvSeqPop(*(undefined8 *)(param_1 + 0x38),(String *)&local_28);
  *(undefined4 *)(param_1 + 0x40) = local_8;
  *(undefined4 *)(param_1 + 0x44) = local_4;
  *(undefined8 *)(param_1 + 0x48) = local_18;
  *(undefined8 *)(param_1 + 0x50) = uStack_10;
  cvRestoreMemStoragePos(*(undefined8 *)(param_1 + 0x20),(String *)&local_28);
  return;
}


==================================================================

### FUNC 0037220c (856 bytes) name=FUN_0037220c

char * FUN_0037220c(long param_1,char *param_2,int param_3)

{
  char cVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  size_t sVar4;
  char *pcVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  ulong uVar9;
  int iVar10;
  long lVar11;
  ulong uVar12;
  ulong uVar13;
  long local_10;
  long local_8;
  
  uVar7 = (uint)*param_2;
  while( true ) {
    while( true ) {
      while (uVar7 == 0x20) {
        param_2 = param_2 + 1;
        uVar7 = (uint)*param_2;
      }
      if (uVar7 == 0x23) {
        if (0x7fffffff < (long)param_2 - *(long *)(param_1 + 0x80)) {
          return param_2;
        }
        uVar7 = 0;
        *param_2 = '\0';
      }
      else if (0x1f < (uVar7 & 0xff)) {
        if ((long)param_3 <= (long)param_2 - *(long *)(param_1 + 0x80)) {
          return param_2;
        }
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),&DAT_00472ad0,
                     "Incorrect indentation",0x3c5);
        return param_2;
      }
      if (((uVar7 == 0) || (uVar7 == 10)) || (uVar7 == 0xd)) break;
      pcVar5 = "Tabs are prohibited in YAML!";
      if (uVar7 != 9) {
        pcVar5 = "Invalid character";
      }
      FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),&DAT_00472ad0,
                   pcVar5,0x3df);
      uVar7 = (uint)*param_2;
    }
    lVar11 = *(long *)(param_1 + 0x160);
    param_2 = *(char **)(param_1 + 0x80);
    uVar9 = *(long *)(param_1 + 0x88) - (long)param_2;
    iVar8 = (int)uVar9;
    if (lVar11 != 0) break;
    if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
      local_10 = *(long *)(param_1 + 0x70);
      if (local_10 == 0) {
        local_8 = local_10;
        pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x19);
        cVar1 = s_The_storage_is_not_opened_00470830[0x18];
        uVar3 = s_The_storage_is_not_opened_00470830._8_8_;
        uVar2 = s_The_storage_is_not_opened_00470830._0_8_;
        *(undefined8 *)(pcVar5 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
        pcVar5[0x18] = cVar1;
        *(undefined8 *)pcVar5 = uVar2;
        *(undefined8 *)(pcVar5 + 8) = uVar3;
        cv::error(-2,(String *)&local_10,"char* icvGets(CvFileStorage*, char*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d);
        cv::String::deallocate((String *)&local_10);
        goto LAB_003724a4;
      }
      param_2 = (char *)gzgets(local_10,param_2,uVar9 & 0xffffffff);
    }
    else {
      param_2 = fgets(param_2,iVar8,*(FILE **)(param_1 + 0x68));
    }
    if (param_2 == (char *)0x0) goto LAB_003724a4;
LAB_00372338:
    sVar4 = strlen(param_2);
    if ((param_2[(long)(int)sVar4 + -1] != '\r') && (param_2[(long)(int)sVar4 + -1] != '\n')) {
      if (*(long *)(param_1 + 0x160) == 0) {
        if (*(FILE **)(param_1 + 0x68) != (FILE *)0x0) {
          uVar7 = feof(*(FILE **)(param_1 + 0x68));
          goto LAB_003723e0;
        }
        if (*(long *)(param_1 + 0x70) != 0) {
          uVar7 = gzeof();
          goto LAB_003723e0;
        }
      }
      else {
        uVar7 = (uint)(*(ulong *)(param_1 + 0x168) <= *(ulong *)(param_1 + 0x170));
LAB_003723e0:
        if (uVar7 != 0) goto LAB_00372358;
      }
      FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),&DAT_00472ad0,
                   "Too long string or a last string w/o newline",0x3d9);
    }
LAB_00372358:
    *(int *)(param_1 + 0x94) = *(int *)(param_1 + 0x94) + 1;
    uVar7 = (uint)*param_2;
  }
  uVar12 = *(ulong *)(param_1 + 0x170);
  uVar13 = *(ulong *)(param_1 + 0x168);
  uVar9 = uVar12;
  if ((uVar12 < uVar13) && (iVar8 = iVar8 + -1, 0 < iVar8)) {
    cVar1 = *(char *)(lVar11 + uVar12);
    uVar9 = uVar12 + 1;
    if (cVar1 != '\0') {
      *param_2 = cVar1;
      if (cVar1 == '\n') {
        param_2[1] = '\0';
        *(ulong *)(param_1 + 0x170) = uVar9;
      }
      else {
        iVar10 = 1;
        do {
          uVar6 = uVar9;
          if ((uVar9 == uVar13) || (iVar8 <= iVar10)) break;
          cVar1 = *(char *)(lVar11 + uVar9);
          uVar6 = uVar9 + 1;
          if (cVar1 == '\0') break;
          param_2[uVar9 - uVar12] = cVar1;
          iVar10 = iVar10 + 1;
          uVar9 = uVar6;
        } while (cVar1 != '\n');
        param_2[iVar10] = '\0';
        *(ulong *)(param_1 + 0x170) = uVar6;
      }
      goto LAB_00372338;
    }
  }
  *param_2 = '\0';
  *(ulong *)(param_1 + 0x170) = uVar9;
LAB_003724a4:
  builtin_strncpy(*(char **)(param_1 + 0x80),"...",4);
  *(undefined4 *)(param_1 + 0x98) = 1;
  return *(char **)(param_1 + 0x80);
}


==================================================================

### FUNC 00372578 (1024 bytes) name=FUN_00372578

byte * FUN_00372578(long param_1,byte *param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  int iVar4;
  size_t sVar5;
  char *pcVar6;
  int iVar7;
  ulong uVar8;
  byte bVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  byte *pbVar13;
  byte *pbVar14;
  int iVar15;
  ulong uVar16;
  long local_10;
  long local_8;
  
  iVar15 = 0;
LAB_003725b8:
  do {
    param_2 = param_2 + -1;
    if (param_3 != 1) {
      if (param_3 == 3) {
        do {
          param_2 = param_2 + 1;
          bVar9 = *param_2;
          if (bVar9 == 0x3c) {
            iVar15 = iVar15 + 1;
          }
          iVar15 = iVar15 - (uint)(bVar9 == 0x3e);
          if (iVar15 == -1) {
            return param_2;
          }
        } while ((0x1f < bVar9) || (bVar9 == 9));
      }
      else {
        do {
          do {
            pbVar13 = param_2;
            bVar9 = pbVar13[1];
            pbVar14 = pbVar13 + 1;
            param_2 = pbVar14;
          } while (bVar9 == 9);
        } while (bVar9 == 0x20);
        if (bVar9 == 0x3c) {
          if (pbVar13[2] != 0x21) {
            return pbVar14;
          }
          if (pbVar13[3] != 0x2d) {
            return pbVar14;
          }
          if (pbVar13[4] != 0x2d) {
            return pbVar14;
          }
          if (param_3 != 0) {
            FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                         "char* icvXMLSkipSpaces(CvFileStorage*, char*, int)",
                         "Comments are not allowed here",0x6f6);
          }
          bVar9 = pbVar13[5];
          param_3 = 1;
          goto LAB_00372750;
        }
        if (0x1f < bVar9) {
          return pbVar14;
        }
      }
      break;
    }
    do {
      pbVar14 = param_2;
      bVar9 = pbVar14[1];
      param_2 = pbVar14 + 1;
      if ((bVar9 < 0x20) && (bVar9 != 9)) goto LAB_00372648;
    } while ((bVar9 != 0x2d) || ((pbVar14[2] != 0x2d || (pbVar14[3] != 0x3e))));
    bVar9 = pbVar14[4];
    param_3 = 0;
LAB_00372750:
    param_2 = pbVar14 + 4;
  } while (0x1f < bVar9);
LAB_00372648:
  param_2 = *(byte **)(param_1 + 0x80);
  uVar16 = *(long *)(param_1 + 0x88) - (long)param_2;
  iVar4 = (int)uVar16;
  if ((bVar9 == 10 || bVar9 == 0) || (bVar9 == 0xd)) {
    lVar11 = *(long *)(param_1 + 0x160);
    if (lVar11 != 0) goto LAB_00372698;
LAB_00372808:
    if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
      local_10 = *(long *)(param_1 + 0x70);
      if (local_10 == 0) {
        local_8 = local_10;
        pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x19);
        cVar3 = s_The_storage_is_not_opened_00470830[0x18];
        uVar2 = s_The_storage_is_not_opened_00470830._8_8_;
        uVar1 = s_The_storage_is_not_opened_00470830._0_8_;
        *(undefined8 *)(pcVar6 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
        pcVar6[0x18] = cVar3;
        *(undefined8 *)pcVar6 = uVar1;
        *(undefined8 *)(pcVar6 + 8) = uVar2;
        cv::error(-2,(String *)&local_10,"char* icvGets(CvFileStorage*, char*, int)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d);
        cv::String::deallocate((String *)&local_10);
        goto LAB_003728d4;
      }
      param_2 = (byte *)gzgets(local_10,param_2,uVar16 & 0xffffffff);
    }
    else {
      param_2 = (byte *)fgets((char *)param_2,iVar4,*(FILE **)(param_1 + 0x68));
    }
    if (param_2 == (byte *)0x0) goto LAB_003728d4;
  }
  else {
    FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                 "char* icvXMLSkipSpaces(CvFileStorage*, char*, int)",
                 "Invalid character in the stream",0x702);
    param_2 = *(byte **)(param_1 + 0x80);
    lVar11 = *(long *)(param_1 + 0x160);
    if (lVar11 == 0) goto LAB_00372808;
LAB_00372698:
    uVar8 = *(ulong *)(param_1 + 0x170);
    uVar12 = *(ulong *)(param_1 + 0x168);
    uVar16 = uVar8;
    if ((uVar12 <= uVar8) || (iVar4 = iVar4 + -1, iVar4 < 1)) {
LAB_003728cc:
      *param_2 = 0;
      *(ulong *)(param_1 + 0x170) = uVar16;
LAB_003728d4:
      pbVar14 = *(byte **)(param_1 + 0x80);
      *pbVar14 = 0;
      *(undefined4 *)(param_1 + 0x98) = 1;
      return pbVar14;
    }
    bVar9 = *(byte *)(lVar11 + uVar8);
    uVar16 = uVar8 + 1;
    if (bVar9 == 0) goto LAB_003728cc;
    *param_2 = bVar9;
    if (bVar9 == 10) {
      param_2[1] = 0;
      *(ulong *)(param_1 + 0x170) = uVar16;
    }
    else {
      iVar7 = 1;
      do {
        uVar10 = uVar16;
        if ((uVar16 == uVar12) || (iVar4 <= iVar7)) break;
        bVar9 = *(byte *)(lVar11 + uVar16);
        uVar10 = uVar16 + 1;
        if (bVar9 == 0) break;
        param_2[uVar16 - uVar8] = bVar9;
        iVar7 = iVar7 + 1;
        uVar16 = uVar10;
      } while (bVar9 != 10);
      param_2[iVar7] = 0;
      *(ulong *)(param_1 + 0x170) = uVar10;
    }
  }
  sVar5 = strlen((char *)param_2);
  if ((param_2[(long)(int)sVar5 + -1] == 0xd) || (param_2[(long)(int)sVar5 + -1] == 10))
  goto LAB_00372730;
  if (*(long *)(param_1 + 0x160) == 0) {
    if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
      if (*(long *)(param_1 + 0x70) == 0) goto LAB_003727e0;
      iVar4 = gzeof();
    }
    else {
      iVar4 = feof(*(FILE **)(param_1 + 0x68));
    }
    if (iVar4 != 0) goto LAB_00372730;
  }
  else if (*(ulong *)(param_1 + 0x168) <= *(ulong *)(param_1 + 0x170)) goto LAB_00372730;
LAB_003727e0:
  FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
               "char* icvXMLSkipSpaces(CvFileStorage*, char*, int)",
               "Too long string or a last string w/o newline",0x70f);
LAB_00372730:
  *(int *)(param_1 + 0x94) = *(int *)(param_1 + 0x94) + 1;
  goto LAB_003725b8;
}


==================================================================

### FUNC 0037298c (516 bytes) name=FUN_0037298c

void FUN_0037298c(long param_1,long param_2,uint param_3,long param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char *pcVar9;
  long lVar10;
  undefined1 *puVar11;
  int iVar12;
  int iVar13;
  undefined1 auVar14 [16];
  undefined1 auStack_78 [16];
  undefined8 local_68;
  undefined8 uStack_60;
  undefined4 local_58;
  uint local_54;
  char *local_50;
  long local_48;
  
  if ((param_3 & 7) < 5) {
    local_50 = (char *)0x0;
    local_48 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_50,0x42);
    uVar8 = s_Some_collection_type__CV_NODE_SE_00470ae0._56_8_;
    uVar7 = s_Some_collection_type__CV_NODE_SE_00470ae0._48_8_;
    uVar6 = s_Some_collection_type__CV_NODE_SE_00470ae0._40_8_;
    uVar5 = s_Some_collection_type__CV_NODE_SE_00470ae0._32_8_;
    uVar4 = s_Some_collection_type__CV_NODE_SE_00470ae0._24_8_;
    uVar3 = s_Some_collection_type__CV_NODE_SE_00470ae0._16_8_;
    uVar2 = s_Some_collection_type__CV_NODE_SE_00470ae0._8_8_;
    uVar1 = s_Some_collection_type__CV_NODE_SE_00470ae0._0_8_;
    *(undefined2 *)(pcVar9 + 0x40) = s_Some_collection_type__CV_NODE_SE_00470ae0._64_2_;
    *(undefined8 *)pcVar9 = uVar1;
    *(undefined8 *)(pcVar9 + 8) = uVar2;
    *(undefined8 *)(pcVar9 + 0x10) = uVar3;
    *(undefined8 *)(pcVar9 + 0x18) = uVar4;
    *(undefined8 *)(pcVar9 + 0x20) = uVar5;
    *(undefined8 *)(pcVar9 + 0x28) = uVar6;
    *(undefined8 *)(pcVar9 + 0x30) = uVar7;
    *(undefined8 *)(pcVar9 + 0x38) = uVar8;
    cv::error(-5,(String *)&local_50,
              "void icvXMLStartWriteStruct(CvFileStorage*, const char*, int, const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x940);
    cv::String::deallocate((String *)&local_50);
  }
  iVar13 = 0;
  if (param_4 != 0) {
    iVar13 = 2;
    local_50 = "type_id";
    local_48 = param_4;
  }
  *(undefined8 *)((String *)&local_50 + (long)iVar13 * 8) = 0;
  FUN_00371a64(param_1,param_2,1,(String *)&local_50);
  local_68 = *(undefined8 *)*(undefined1 (*) [16])(param_1 + 0x48);
  uStack_60 = *(undefined8 *)(param_1 + 0x50);
  local_58 = *(undefined4 *)(param_1 + 0x40);
  local_54 = *(uint *)(param_1 + 0x44) & 0xffffffdf;
  cvSaveMemStoragePos(*(undefined8 *)(param_1 + 0x20),auStack_78);
  cvSeqPush(*(undefined8 *)(param_1 + 0x38),auStack_78);
  iVar13 = *(int *)(param_1 + 0x40) + 2;
  *(int *)(param_1 + 0x40) = iVar13;
  if ((param_3 >> 3 & 1) == 0) {
    puVar11 = *(undefined1 **)(param_1 + 0x78);
    lVar10 = *(long *)(param_1 + 0x80);
    iVar12 = *(int *)(param_1 + 0x58);
    if ((undefined1 *)(lVar10 + iVar12) < puVar11) {
      puVar11[1] = (byte)param_3 & 8;
      *puVar11 = 10;
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      iVar13 = *(int *)(param_1 + 0x40);
      lVar10 = *(long *)(param_1 + 0x80);
      iVar12 = *(int *)(param_1 + 0x58);
      *(long *)(param_1 + 0x78) = lVar10;
    }
    if (iVar12 != iVar13) {
      if (iVar12 < iVar13) {
        memset((void *)(lVar10 + iVar12),0x20,(long)(iVar13 - iVar12));
        lVar10 = *(long *)(param_1 + 0x80);
      }
      *(int *)(param_1 + 0x58) = iVar13;
    }
    *(long *)(param_1 + 0x78) = lVar10 + iVar13;
  }
  *(uint *)(param_1 + 0x44) = param_3 & 0xf | 0x20;
  if (param_2 != 0) {
    auVar14 = cvMemStorageAllocString(*(undefined8 *)(param_1 + 0x20),param_2,0xffffffff);
    *(undefined1 (*) [16])(param_1 + 0x48) = auVar14;
    return;
  }
  *(undefined8 *)(param_1 + 0x50) = 0;
  *(undefined4 *)(param_1 + 0x48) = 0;
  return;
}


==================================================================

### FUNC 00372ba4 (472 bytes) name=FUN_00372ba4

void FUN_00372ba4(long param_1)

{
  undefined2 *puVar1;
  uint uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  long lVar8;
  char *pcVar9;
  undefined1 *puVar10;
  undefined1 uVar11;
  int iVar12;
  undefined2 *puVar13;
  int iVar14;
  undefined1 *puVar15;
  uint local_14;
  undefined8 local_10;
  undefined8 local_8;
  
  local_14 = 0;
  lVar8 = *(long *)(param_1 + 0x38);
  uVar2 = *(uint *)(param_1 + 0x44);
  if (*(int *)(lVar8 + 0x28) == 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar9 = (char *)cv::String::allocate((String *)&local_10,0x2c);
    uVar7 = s_EndWriteStruct_w_o_matching_Star_00470b40._40_4_;
    uVar6 = s_EndWriteStruct_w_o_matching_Star_00470b40._24_8_;
    uVar5 = s_EndWriteStruct_w_o_matching_Star_00470b40._16_8_;
    uVar4 = s_EndWriteStruct_w_o_matching_Star_00470b40._8_8_;
    uVar3 = s_EndWriteStruct_w_o_matching_Star_00470b40._0_8_;
    *(undefined8 *)(pcVar9 + 0x20) = s_EndWriteStruct_w_o_matching_Star_00470b40._32_8_;
    *(undefined4 *)(pcVar9 + 0x28) = uVar7;
    *(undefined8 *)pcVar9 = uVar3;
    *(undefined8 *)(pcVar9 + 8) = uVar4;
    *(undefined8 *)(pcVar9 + 0x10) = uVar5;
    *(undefined8 *)(pcVar9 + 0x18) = uVar6;
    cv::error(-2,(String *)&local_10,"void icvYMLEndWriteStruct(CvFileStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x61b);
    cv::String::deallocate((String *)&local_10);
    lVar8 = *(long *)(param_1 + 0x38);
  }
  cvSeqPop(lVar8,&local_14);
  if ((uVar2 >> 3 & 1) == 0) {
    if ((uVar2 >> 5 & 1) != 0) {
      puVar15 = *(undefined1 **)(param_1 + 0x78);
      lVar8 = *(long *)(param_1 + 0x80);
      iVar12 = *(int *)(param_1 + 0x58);
      if ((undefined1 *)(lVar8 + iVar12) < puVar15) {
        puVar15[1] = (byte)uVar2 & 8;
        *puVar15 = 10;
        FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
        lVar8 = *(long *)(param_1 + 0x80);
        iVar12 = *(int *)(param_1 + 0x58);
        *(long *)(param_1 + 0x78) = lVar8;
      }
      iVar14 = *(int *)(param_1 + 0x40);
      if (iVar14 != iVar12) {
        if (iVar12 <= iVar14) {
          memset((void *)(lVar8 + iVar12),0x20,(long)(iVar14 - iVar12));
          lVar8 = *(long *)(param_1 + 0x80);
        }
        *(int *)(param_1 + 0x58) = iVar14;
        iVar12 = iVar14;
      }
      puVar1 = (undefined2 *)(lVar8 + iVar12);
      *(undefined2 **)(param_1 + 0x78) = puVar1;
      if ((uVar2 & 7) == 6) {
        puVar13 = (undefined2 *)&LAB_00470b30;
      }
      else {
        puVar13 = &DAT_00470b38;
      }
      *puVar1 = *puVar13;
      *(undefined2 **)(param_1 + 0x78) = puVar1 + 1;
    }
    if ((local_14 >> 3 & 1) != 0) goto LAB_00372d18;
    iVar12 = *(int *)(param_1 + 0x40);
    iVar14 = 3;
  }
  else {
    puVar10 = *(undefined1 **)(param_1 + 0x78);
    puVar15 = puVar10;
    if (((undefined1 *)(*(long *)(param_1 + 0x80) + (long)*(int *)(param_1 + 0x40)) < puVar10) &&
       ((uVar2 >> 5 & 1) == 0)) {
      puVar15 = puVar10 + 1;
      *puVar10 = 0x20;
    }
    uVar11 = 0x7d;
    if ((uVar2 & 7) != 6) {
      uVar11 = 0x5d;
    }
    *puVar15 = uVar11;
    *(undefined1 **)(param_1 + 0x78) = puVar15 + 1;
    if ((local_14 >> 3 & 1) != 0) goto LAB_00372d18;
    iVar12 = *(int *)(param_1 + 0x40);
    iVar14 = 4;
  }
  *(int *)(param_1 + 0x40) = iVar12 - iVar14;
LAB_00372d18:
  *(uint *)(param_1 + 0x44) = local_14;
  return;
}


==================================================================

### FUNC 00372d90 (848 bytes) name=FUN_00372d90

void FUN_00372d90(long param_1,long param_2,int param_3)

{
  uint uVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  size_t sVar10;
  char *pcVar11;
  void *__dest;
  void *__dest_00;
  ulong uVar12;
  undefined1 *puVar13;
  char *__s;
  int iVar14;
  int iVar15;
  undefined1 *puVar16;
  int iVar17;
  undefined8 local_90;
  undefined8 local_88;
  char local_6b [107];
  
  uVar12 = (long)param_3 >> 0x3f;
  local_6b[2] = 0;
  uVar12 = ((long)param_3 ^ uVar12) - uVar12;
  __s = local_6b + 2;
  do {
    pcVar11 = __s;
    cVar2 = (char)uVar12;
    uVar12 = (uVar12 & 0xffffffff) / 10;
    __s = pcVar11 + -1;
    *__s = cVar2 + '0' + (char)uVar12 * -10;
  } while ((int)uVar12 != 0);
  if (param_3 < 0) {
    __s = pcVar11 + -2;
    pcVar11[-2] = '-';
  }
  sVar10 = strlen(__s);
  uVar1 = *(uint *)(param_1 + 0x44) & 7;
  iVar14 = (int)sVar10;
  if (uVar1 == 6) {
LAB_00372f34:
    sVar10 = (size_t)iVar14;
    FUN_00371a64(param_1,param_2,1,0,0);
    __dest = *(void **)(param_1 + 0x78);
    uVar12 = (long)__dest + sVar10;
    if (*(ulong *)(param_1 + 0x88) <= uVar12) {
      iVar15 = (int)__dest - (int)*(long *)(param_1 + 0x80);
      iVar9 = (int)((long)((*(ulong *)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) / 2);
      iVar17 = iVar15 + iVar14;
      if (iVar15 + iVar14 < iVar9) {
        iVar17 = iVar9;
      }
      __dest_00 = (void *)cv::cvAlloc((long)(iVar17 + 0x100));
      *(long *)(param_1 + 0x78) =
           (long)__dest_00 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
      if (0 < iVar15) {
        memcpy(__dest_00,*(void **)(param_1 + 0x80),(long)iVar15);
      }
      __dest = (void *)((long)__dest_00 + (long)iVar15);
      *(void **)(param_1 + 0x80) = __dest_00;
      uVar12 = (long)__dest + sVar10;
      *(long *)(param_1 + 0x88) = (long)__dest_00 + (long)iVar17;
    }
    memcpy(__dest,__s,sVar10);
    *(ulong *)(param_1 + 0x78) = uVar12;
    FUN_00371a64(param_1,param_2,2,0,0);
    return;
  }
  if (uVar1 < 5) {
    if (param_2 != 0) goto LAB_00372f34;
    puVar16 = *(undefined1 **)(param_1 + 0x78);
    puVar13 = *(undefined1 **)(param_1 + 0x80);
    iVar17 = iVar14 + ((int)puVar16 - (int)puVar13);
  }
  else {
    puVar16 = *(undefined1 **)(param_1 + 0x78);
    puVar13 = *(undefined1 **)(param_1 + 0x80);
    iVar17 = iVar14 + ((int)puVar16 - (int)puVar13);
    if (param_2 != 0) {
      local_90 = 0;
      local_88 = 0;
      pcVar11 = (char *)cv::String::allocate((String *)&local_90,0x31);
      uVar8 = s_elements_with_keys_can_not_be_wr_00470b70._40_8_;
      uVar7 = s_elements_with_keys_can_not_be_wr_00470b70._32_8_;
      uVar6 = s_elements_with_keys_can_not_be_wr_00470b70._24_8_;
      uVar5 = s_elements_with_keys_can_not_be_wr_00470b70._16_8_;
      uVar4 = s_elements_with_keys_can_not_be_wr_00470b70._8_8_;
      uVar3 = s_elements_with_keys_can_not_be_wr_00470b70._0_8_;
      pcVar11[0x30] = s_elements_with_keys_can_not_be_wr_00470b70[0x30];
      *(undefined8 *)pcVar11 = uVar3;
      *(undefined8 *)(pcVar11 + 8) = uVar4;
      *(undefined8 *)(pcVar11 + 0x10) = uVar5;
      *(undefined8 *)(pcVar11 + 0x18) = uVar6;
      *(undefined8 *)(pcVar11 + 0x20) = uVar7;
      *(undefined8 *)(pcVar11 + 0x28) = uVar8;
      cv::error(-5,(String *)&local_90,
                "void icvXMLWriteScalar(CvFileStorage*, const char*, const char*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x99b);
      cv::String::deallocate((String *)&local_90);
      puVar13 = *(undefined1 **)(param_1 + 0x80);
    }
  }
  *(undefined4 *)(param_1 + 0x44) = 5;
  if ((iVar17 <= *(int *)(param_1 + 0x90)) || (iVar17 - *(int *)(param_1 + 0x40) < 0xb)) {
    if (puVar16 <= puVar13) {
      if ((puVar13 + *(int *)(param_1 + 0x40) < puVar16) && (puVar16[-1] != '>')) {
LAB_00372fc8:
        *puVar16 = 0x20;
        memcpy(puVar16 + 1,__s,(long)iVar14);
        *(undefined1 **)(param_1 + 0x78) = puVar16 + 1 + iVar14;
        return;
      }
      goto LAB_00372efc;
    }
    if (puVar16[-1] != '>') {
      if (puVar13 + *(int *)(param_1 + 0x40) < puVar16) goto LAB_00372fc8;
      goto LAB_00372efc;
    }
  }
  puVar16 = *(undefined1 **)(param_1 + 0x78);
  iVar17 = *(int *)(param_1 + 0x58);
  if (puVar13 + iVar17 < puVar16) {
    puVar16[1] = 0;
    *puVar16 = 10;
    FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
    puVar13 = *(undefined1 **)(param_1 + 0x80);
    iVar17 = *(int *)(param_1 + 0x58);
    *(undefined1 **)(param_1 + 0x78) = puVar13;
  }
  iVar9 = *(int *)(param_1 + 0x40);
  if (iVar9 != iVar17) {
    if (iVar17 <= iVar9) {
      memset(puVar13 + iVar17,0x20,(long)(iVar9 - iVar17));
      puVar13 = *(undefined1 **)(param_1 + 0x80);
    }
    *(int *)(param_1 + 0x58) = iVar9;
    iVar17 = iVar9;
  }
  puVar16 = puVar13 + iVar17;
  *(undefined1 **)(param_1 + 0x78) = puVar16;
LAB_00372efc:
  memcpy(puVar16,__s,(long)iVar14);
  *(undefined1 **)(param_1 + 0x78) = puVar16 + iVar14;
  return;
}


==================================================================

### FUNC 003730f4 (1060 bytes) name=FUN_003730f4

void FUN_003730f4(double param_1,long param_2,long param_3)

{
  char cVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  uint uVar8;
  int iVar9;
  long lVar10;
  size_t sVar11;
  void *__dest;
  void *__dest_00;
  undefined1 *puVar12;
  char *pcVar13;
  int iVar14;
  int iVar15;
  ulong uVar16;
  undefined1 *puVar17;
  int iVar18;
  undefined8 local_90;
  undefined8 local_88;
  undefined4 local_80;
  undefined1 local_7c;
  
  uVar8 = (uint)((ulong)param_1 >> 0x20);
  if ((uVar8 & 0x7ff00000) == 0x7ff00000) {
    uVar8 = uVar8 & 0x7fffffff;
    if (SUB84(param_1,0) != 0) {
      uVar8 = uVar8 + 1;
    }
    if (uVar8 < 0x7ff00001) {
      if ((long)param_1 < 0) {
        pcVar13 = "-.Inf";
      }
      else {
        pcVar13 = ".Inf";
      }
      strcpy((char *)&local_80,pcVar13);
    }
    else {
      local_80 = DAT_00470bc8;
      local_7c = DAT_00470bcc;
    }
  }
  else {
    lVar10 = lrint(param_1);
    if (param_1 == (double)(int)lVar10) {
      sprintf((char *)&local_80,"%d.",lVar10);
    }
    else {
      pcVar13 = (char *)&local_80;
      sprintf(pcVar13,"%.16e",param_1,lVar10);
      cVar1 = (char)local_80;
      if (((char)local_80 - 0x2bU & 0xfd) == 0) {
        pcVar13 = (char *)((long)&local_80 + 1);
        cVar1 = local_80._1_1_;
      }
      while (((int)cVar1 - 0x30U & 0xff) < 10) {
        pcVar13 = pcVar13 + 1;
        cVar1 = *pcVar13;
      }
      if (cVar1 == 0x2c) {
        *pcVar13 = '.';
      }
    }
  }
  sVar11 = strlen((char *)&local_80);
  uVar8 = *(uint *)(param_2 + 0x44) & 7;
  iVar14 = (int)sVar11;
  if (uVar8 == 6) {
LAB_003731c8:
    sVar11 = (size_t)iVar14;
    FUN_00371a64(param_2,param_3,1,0,0);
    __dest = *(void **)(param_2 + 0x78);
    uVar16 = (long)__dest + sVar11;
    if (*(ulong *)(param_2 + 0x88) <= uVar16) {
      iVar15 = (int)__dest - (int)*(long *)(param_2 + 0x80);
      iVar9 = (int)((long)((*(ulong *)(param_2 + 0x88) - *(long *)(param_2 + 0x80)) * 3) / 2);
      iVar18 = iVar15 + iVar14;
      if (iVar15 + iVar14 < iVar9) {
        iVar18 = iVar9;
      }
      __dest_00 = (void *)cv::cvAlloc((long)(iVar18 + 0x100));
      *(long *)(param_2 + 0x78) =
           (long)__dest_00 + (*(long *)(param_2 + 0x78) - (long)*(void **)(param_2 + 0x80));
      if (0 < iVar15) {
        memcpy(__dest_00,*(void **)(param_2 + 0x80),(long)iVar15);
      }
      __dest = (void *)((long)__dest_00 + (long)iVar15);
      *(void **)(param_2 + 0x80) = __dest_00;
      uVar16 = (long)__dest + sVar11;
      *(long *)(param_2 + 0x88) = (long)__dest_00 + (long)iVar18;
    }
    memcpy(__dest,&local_80,sVar11);
    *(ulong *)(param_2 + 0x78) = uVar16;
    FUN_00371a64(param_2,param_3,2,0,0);
    return;
  }
  if (uVar8 < 5) {
    if (param_3 != 0) goto LAB_003731c8;
    puVar17 = *(undefined1 **)(param_2 + 0x78);
    puVar12 = *(undefined1 **)(param_2 + 0x80);
    iVar18 = iVar14 + ((int)puVar17 - (int)puVar12);
  }
  else {
    puVar17 = *(undefined1 **)(param_2 + 0x78);
    puVar12 = *(undefined1 **)(param_2 + 0x80);
    iVar18 = iVar14 + ((int)puVar17 - (int)puVar12);
    if (param_3 != 0) {
      local_90 = 0;
      local_88 = 0;
      pcVar13 = (char *)cv::String::allocate((String *)&local_90,0x31);
      uVar7 = s_elements_with_keys_can_not_be_wr_00470b70._40_8_;
      uVar6 = s_elements_with_keys_can_not_be_wr_00470b70._32_8_;
      uVar5 = s_elements_with_keys_can_not_be_wr_00470b70._24_8_;
      uVar4 = s_elements_with_keys_can_not_be_wr_00470b70._16_8_;
      uVar3 = s_elements_with_keys_can_not_be_wr_00470b70._8_8_;
      uVar2 = s_elements_with_keys_can_not_be_wr_00470b70._0_8_;
      pcVar13[0x30] = s_elements_with_keys_can_not_be_wr_00470b70[0x30];
      *(undefined8 *)pcVar13 = uVar2;
      *(undefined8 *)(pcVar13 + 8) = uVar3;
      *(undefined8 *)(pcVar13 + 0x10) = uVar4;
      *(undefined8 *)(pcVar13 + 0x18) = uVar5;
      *(undefined8 *)(pcVar13 + 0x20) = uVar6;
      *(undefined8 *)(pcVar13 + 0x28) = uVar7;
      cv::error(-5,(String *)&local_90,
                "void icvXMLWriteScalar(CvFileStorage*, const char*, const char*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x99b);
      cv::String::deallocate((String *)&local_90);
      puVar12 = *(undefined1 **)(param_2 + 0x80);
    }
  }
  *(undefined4 *)(param_2 + 0x44) = 5;
  if ((iVar18 <= *(int *)(param_2 + 0x90)) || (iVar18 - *(int *)(param_2 + 0x40) < 0xb)) {
    if (puVar17 <= puVar12) {
      if ((puVar12 + *(int *)(param_2 + 0x40) < puVar17) && (puVar17[-1] != '>')) {
LAB_003733a4:
        *puVar17 = 0x20;
        memcpy(puVar17 + 1,&local_80,(long)iVar14);
        *(undefined1 **)(param_2 + 0x78) = puVar17 + 1 + iVar14;
        return;
      }
      goto LAB_00373348;
    }
    if (puVar17[-1] != '>') {
      if (puVar12 + *(int *)(param_2 + 0x40) < puVar17) goto LAB_003733a4;
      goto LAB_00373348;
    }
  }
  puVar17 = *(undefined1 **)(param_2 + 0x78);
  iVar18 = *(int *)(param_2 + 0x58);
  if (puVar12 + iVar18 < puVar17) {
    puVar17[1] = 0;
    *puVar17 = 10;
    FUN_0037127c(param_2,*(undefined8 *)(param_2 + 0x80));
    iVar18 = *(int *)(param_2 + 0x58);
    puVar12 = *(undefined1 **)(param_2 + 0x80);
    *(undefined1 **)(param_2 + 0x78) = puVar12;
  }
  iVar9 = *(int *)(param_2 + 0x40);
  if (iVar9 != iVar18) {
    if (iVar18 <= iVar9) {
      memset(puVar12 + iVar18,0x20,(long)(iVar9 - iVar18));
      puVar12 = *(undefined1 **)(param_2 + 0x80);
    }
    *(int *)(param_2 + 0x58) = iVar9;
    iVar18 = iVar9;
  }
  puVar17 = puVar12 + iVar18;
  *(undefined1 **)(param_2 + 0x78) = puVar17;
LAB_00373348:
  memcpy(puVar17,&local_80,(long)iVar14);
  *(undefined1 **)(param_2 + 0x78) = puVar17 + iVar14;
  return;
}


==================================================================

### FUNC 0037352c (600 bytes) name=FUN_0037352c

void FUN_0037352c(long param_1)

{
  undefined2 *puVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int iVar5;
  undefined1 *puVar6;
  undefined1 *puVar7;
  undefined1 uVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint local_4;
  
  if (*(int *)(param_1 + 0xc) != 0) {
    return;
  }
  lVar4 = *(long *)(param_1 + 0x38);
  if (0 < *(int *)(lVar4 + 0x28)) {
    uVar10 = *(uint *)(param_1 + 0x44) & 8;
    uVar9 = *(uint *)(param_1 + 0x44);
    do {
      local_4 = 0;
      cvSeqPop(lVar4,&local_4);
      if (uVar10 == 0) {
        if ((uVar9 >> 5 & 1) != 0) {
          puVar6 = *(undefined1 **)(param_1 + 0x78);
          lVar4 = *(long *)(param_1 + 0x80);
          iVar3 = *(int *)(param_1 + 0x58);
          if ((undefined1 *)(lVar4 + iVar3) < puVar6) {
            *puVar6 = 10;
            puVar6[1] = 0;
            FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
            lVar4 = *(long *)(param_1 + 0x80);
            iVar3 = *(int *)(param_1 + 0x58);
            *(long *)(param_1 + 0x78) = lVar4;
          }
          iVar5 = *(int *)(param_1 + 0x40);
          if (iVar5 != iVar3) {
            if (iVar3 <= iVar5) {
              memset((void *)(lVar4 + iVar3),0x20,(long)(iVar5 - iVar3));
              lVar4 = *(long *)(param_1 + 0x80);
            }
            *(int *)(param_1 + 0x58) = iVar5;
            iVar3 = iVar5;
          }
          puVar1 = (undefined2 *)&LAB_00470b30;
          if ((uVar9 & 7) != 6) {
            puVar1 = &DAT_00470b38;
          }
          *(undefined2 *)(lVar4 + iVar3) = *puVar1;
          *(undefined2 **)(param_1 + 0x78) = (undefined2 *)(lVar4 + iVar3) + 1;
        }
        uVar10 = local_4 & 8;
        if ((local_4 >> 3 & 1) == 0) {
          iVar3 = *(int *)(param_1 + 0x40);
          iVar5 = 3;
          goto LAB_003735ec;
        }
      }
      else {
        puVar7 = *(undefined1 **)(param_1 + 0x78);
        puVar6 = puVar7;
        if (((undefined1 *)(*(long *)(param_1 + 0x80) + (long)*(int *)(param_1 + 0x40)) < puVar7) &&
           ((uVar9 >> 5 & 1) == 0)) {
          puVar6 = puVar7 + 1;
          *puVar7 = 0x20;
        }
        uVar8 = 0x7d;
        if ((uVar9 & 7) != 6) {
          uVar8 = 0x5d;
        }
        *puVar6 = uVar8;
        *(undefined1 **)(param_1 + 0x78) = puVar6 + 1;
        uVar10 = local_4 & 8;
        if ((local_4 >> 3 & 1) == 0) {
          iVar3 = *(int *)(param_1 + 0x40);
          iVar5 = 4;
LAB_003735ec:
          *(int *)(param_1 + 0x40) = iVar3 - iVar5;
        }
      }
      lVar4 = *(long *)(param_1 + 0x38);
      *(uint *)(param_1 + 0x44) = local_4;
      uVar9 = local_4;
    } while (0 < *(int *)(lVar4 + 0x28));
  }
  puVar6 = *(undefined1 **)(param_1 + 0x78);
  lVar4 = *(long *)(param_1 + 0x80);
  iVar3 = *(int *)(param_1 + 0x58);
  *(undefined4 *)(param_1 + 0x40) = 0;
  if ((undefined1 *)(lVar4 + iVar3) < puVar6) {
    puVar6[1] = 0;
    *puVar6 = 10;
    FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
    iVar11 = *(int *)(param_1 + 0x40);
    iVar3 = *(int *)(param_1 + 0x58);
    lVar4 = *(long *)(param_1 + 0x80);
    *(long *)(param_1 + 0x78) = lVar4;
    bVar2 = SBORROW4(iVar3,iVar11);
    iVar5 = iVar3 - iVar11;
    if (iVar3 == iVar11) goto LAB_00373634;
  }
  else {
    bVar2 = false;
    iVar11 = 0;
    iVar5 = iVar3;
    if (iVar3 == 0) goto LAB_00373634;
  }
  if (iVar5 < 0 == bVar2) {
    *(int *)(param_1 + 0x58) = iVar11;
  }
  else {
    memset((void *)(lVar4 + iVar3),0x20,(long)(iVar11 - iVar3));
    *(int *)(param_1 + 0x58) = iVar11;
    lVar4 = *(long *)(param_1 + 0x80);
  }
LAB_00373634:
  *(long *)(param_1 + 0x78) = lVar4 + iVar11;
  FUN_0037127c(param_1,&DAT_00470bd0);
  FUN_0037127c(param_1,&DAT_00470bd8);
  *(undefined8 *)(param_1 + 0x78) = *(undefined8 *)(param_1 + 0x80);
  return;
}


==================================================================

### FUNC 00373784 (320 bytes) name=FUN_00373784

void FUN_00373784(long param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  bool bVar5;
  long lVar6;
  undefined1 *puVar7;
  undefined1 auStack_28 [16];
  undefined8 local_18;
  undefined8 uStack_10;
  undefined4 local_8;
  undefined4 local_4;
  
  if (*(int *)(param_1 + 0xc) == 0) {
    if (0 < *(int *)(*(long *)(param_1 + 0x38) + 0x28)) {
      do {
        FUN_00371a64(param_1,*(undefined8 *)(param_1 + 0x50),2,0,0);
        cvSeqPop(*(undefined8 *)(param_1 + 0x38),auStack_28);
        *(undefined4 *)(param_1 + 0x40) = local_8;
        *(undefined4 *)(param_1 + 0x44) = local_4;
        *(undefined8 *)(param_1 + 0x48) = local_18;
        *(undefined8 *)(param_1 + 0x50) = uStack_10;
        cvRestoreMemStoragePos(*(undefined8 *)(param_1 + 0x20),auStack_28);
      } while (0 < *(int *)(*(long *)(param_1 + 0x38) + 0x28));
    }
    puVar7 = *(undefined1 **)(param_1 + 0x78);
    lVar6 = *(long *)(param_1 + 0x80);
    iVar2 = *(int *)(param_1 + 0x58);
    *(undefined4 *)(param_1 + 0x40) = 0;
    if ((undefined1 *)(lVar6 + iVar2) < puVar7) {
      puVar7[1] = 0;
      *puVar7 = 10;
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      iVar3 = *(int *)(param_1 + 0x40);
      iVar2 = *(int *)(param_1 + 0x58);
      lVar6 = *(long *)(param_1 + 0x80);
      *(long *)(param_1 + 0x78) = lVar6;
      bVar4 = SBORROW4(iVar3,iVar2);
      iVar1 = iVar3 - iVar2;
      bVar5 = iVar3 == iVar2;
    }
    else {
      bVar4 = SBORROW4(0,iVar2);
      iVar1 = -iVar2;
      bVar5 = iVar2 == 0;
      iVar3 = 0;
    }
    if (!bVar5) {
      if (bVar5 || iVar1 < 0 != bVar4) {
        *(int *)(param_1 + 0x58) = iVar3;
      }
      else {
        memset((void *)(lVar6 + iVar2),0x20,(long)(iVar3 - iVar2));
        *(int *)(param_1 + 0x58) = iVar3;
        lVar6 = *(long *)(param_1 + 0x80);
      }
    }
    *(long *)(param_1 + 0x78) = lVar6 + iVar3;
    FUN_0037127c(param_1,"\n<!-- next stream -->\n");
    *(undefined8 *)(param_1 + 0x78) = *(undefined8 *)(param_1 + 0x80);
  }
  return;
}


==================================================================

### FUNC 003738c4 (1656 bytes) name=FUN_003738c4

void FUN_003738c4(long param_1,long param_2,char *param_3,int param_4)

{
  uint uVar1;
  char cVar2;
  byte bVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined4 uVar11;
  undefined2 uVar12;
  int iVar13;
  int iVar14;
  size_t sVar15;
  void *__dest;
  byte *__s;
  char *pcVar16;
  void *__dest_00;
  byte *pbVar17;
  undefined1 *puVar18;
  int iVar19;
  byte *pbVar20;
  ulong uVar21;
  int iVar22;
  long lVar23;
  undefined1 *puVar24;
  undefined8 local_6020;
  undefined8 local_6018;
  undefined8 local_6010;
  char *local_6008;
  undefined1 auStack_6000 [24576];
  
  if (param_3 == (char *)0x0) {
    local_6010 = param_3;
    local_6008 = param_3;
    pcVar16 = (char *)cv::String::allocate((String *)&local_6010,0x13);
    cVar2 = s_Null_string_pointer_00470bf8[0x12];
    uVar6 = s_Null_string_pointer_00470bf8._8_8_;
    uVar5 = s_Null_string_pointer_00470bf8._0_8_;
    *(undefined2 *)(pcVar16 + 0x10) = s_Null_string_pointer_00470bf8._16_2_;
    pcVar16[0x12] = cVar2;
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
    cv::error(-0x1b,(String *)&local_6010,
              "void icvXMLWriteString(CvFileStorage*, const char*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x9c7);
    cv::String::deallocate((String *)&local_6010);
  }
  sVar15 = strlen(param_3);
  iVar13 = (int)sVar15;
  if (0x1000 < iVar13) {
    local_6010 = (char *)0x0;
    local_6008 = (char *)0x0;
    pcVar16 = (char *)cv::String::allocate((String *)&local_6010,0x1e);
    uVar12 = s_The_written_string_is_too_long_00470c10._28_2_;
    uVar11 = s_The_written_string_is_too_long_00470c10._24_4_;
    uVar6 = s_The_written_string_is_too_long_00470c10._8_8_;
    uVar5 = s_The_written_string_is_too_long_00470c10._0_8_;
    *(undefined8 *)(pcVar16 + 0x10) = s_The_written_string_is_too_long_00470c10._16_8_;
    *(undefined4 *)(pcVar16 + 0x18) = uVar11;
    *(undefined2 *)(pcVar16 + 0x1c) = uVar12;
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
    cv::error(-5,(String *)&local_6010,
              "void icvXMLWriteString(CvFileStorage*, const char*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x9cb);
    cv::String::deallocate((String *)&local_6010);
  }
  if ((iVar13 == 0) || (param_4 != 0)) {
    bVar4 = true;
    local_6010 = (char *)CONCAT71(local_6010._1_7_,0x22);
    if (0 < iVar13) goto LAB_00373944;
    pbVar20 = (byte *)((long)&local_6010 + 1);
LAB_00373b0c:
    pbVar17 = pbVar20 + 1;
    param_3 = (char *)&local_6010;
    iVar13 = 0;
    *pbVar20 = 0x22;
LAB_00373a40:
    *pbVar17 = 0;
    iVar13 = ((int)pbVar17 - ((int)auStack_6000 + -0x10)) - iVar13;
  }
  else {
    cVar2 = *param_3;
    if (cVar2 != '\"') {
      bVar4 = false;
      if (0 < iVar13) goto LAB_00373944;
LAB_00373f18:
      local_6010 = (char *)CONCAT71(local_6010._1_7_,0x22);
      pbVar20 = (byte *)((long)&local_6010 + 1);
LAB_00373a04:
      if (((byte)(cVar2 - 0x30U) < 10 || (byte)(cVar2 - 0x2dU) < 2) || (cVar2 == '+'))
      goto LAB_00373b0c;
      param_3 = (char *)((long)&local_6010 + 1);
      iVar13 = 1;
      pbVar17 = pbVar20;
      goto LAB_00373a40;
    }
    if (param_3[(long)iVar13 + -1] != '\"') {
      bVar4 = false;
      if (iVar13 < 1) goto LAB_00373f18;
LAB_00373944:
      local_6010 = (char *)CONCAT71(local_6010._1_7_,0x22);
      lVar23 = 0;
      pbVar20 = (byte *)((long)&local_6010 + 1);
      do {
        while ((bVar3 = param_3[lVar23], bVar3 != 0x20 && (-1 < (char)bVar3))) {
          if ((bVar3 < 0x20) || (bVar3 == 0x3c)) {
            *pbVar20 = 0x26;
            if (bVar3 == 0x3c) {
              pbVar17 = pbVar20 + 3;
              *(undefined2 *)(pbVar20 + 1) = DAT_00470c30;
            }
            else {
              if (bVar3 != 0x3e) goto LAB_00373b40;
LAB_00373b7c:
              pbVar17 = pbVar20 + 3;
              *(undefined2 *)(pbVar20 + 1) = DAT_00470c38;
            }
LAB_003739bc:
            *pbVar17 = 0x3b;
            bVar4 = true;
            pbVar20 = pbVar17;
          }
          else {
            if ((bVar3 == 0x3e) || ((byte)(bVar3 - 0x26) < 2)) {
              *pbVar20 = 0x26;
              if (bVar3 == 0x3e) goto LAB_00373b7c;
LAB_00373b40:
              __s = pbVar20 + 1;
              if (bVar3 == 0x26) {
                pbVar17 = pbVar20 + 4;
                *(undefined2 *)__s = DAT_00470c40;
                pbVar20[3] = DAT_00470c42;
              }
              else if (bVar3 == 0x27) {
                pbVar17 = pbVar20 + 5;
                *(undefined4 *)__s = DAT_00470c48;
              }
              else {
                if (bVar3 == 0x22) goto LAB_003739b0;
                sprintf((char *)__s,"#x%02x");
                pbVar17 = pbVar20 + 5;
              }
              goto LAB_003739bc;
            }
            if (bVar3 == 0x22) {
              *pbVar20 = 0x26;
LAB_003739b0:
              pbVar17 = pbVar20 + 5;
              *(undefined4 *)(pbVar20 + 1) = DAT_00470c50;
              goto LAB_003739bc;
            }
            *pbVar20 = bVar3;
          }
          pbVar20 = pbVar20 + 1;
          lVar23 = lVar23 + 1;
          if (iVar13 <= (int)lVar23) goto LAB_003739fc;
        }
        lVar23 = lVar23 + 1;
        *pbVar20 = bVar3;
        bVar4 = true;
        pbVar20 = pbVar20 + 1;
      } while ((int)lVar23 < iVar13);
LAB_003739fc:
      if (bVar4) goto LAB_00373b0c;
      cVar2 = *param_3;
      goto LAB_00373a04;
    }
  }
  uVar1 = *(uint *)(param_1 + 0x44) & 7;
  if (uVar1 == 6) {
LAB_00373a6c:
    sVar15 = (size_t)iVar13;
    FUN_00371a64(param_1,param_2,1,0,0);
    __dest = *(void **)(param_1 + 0x78);
    uVar21 = (long)__dest + sVar15;
    if (*(ulong *)(param_1 + 0x88) <= uVar21) {
      iVar22 = (int)__dest - (int)*(long *)(param_1 + 0x80);
      iVar14 = (int)((long)((*(ulong *)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) / 2);
      iVar19 = iVar13 + iVar22;
      if (iVar13 + iVar22 < iVar14) {
        iVar19 = iVar14;
      }
      __dest_00 = (void *)cv::cvAlloc((long)(iVar19 + 0x100));
      *(long *)(param_1 + 0x78) =
           (long)__dest_00 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
      if (0 < iVar22) {
        memcpy(__dest_00,*(void **)(param_1 + 0x80),(long)iVar22);
      }
      __dest = (void *)((long)__dest_00 + (long)iVar22);
      *(void **)(param_1 + 0x80) = __dest_00;
      uVar21 = (long)__dest + sVar15;
      *(long *)(param_1 + 0x88) = (long)__dest_00 + (long)iVar19;
    }
    memcpy(__dest,param_3,sVar15);
    *(ulong *)(param_1 + 0x78) = uVar21;
    FUN_00371a64(param_1,param_2,2,0,0);
    return;
  }
  if (uVar1 < 5) {
    if (param_2 != 0) goto LAB_00373a6c;
    puVar24 = *(undefined1 **)(param_1 + 0x78);
    puVar18 = *(undefined1 **)(param_1 + 0x80);
    iVar19 = iVar13 + ((int)puVar24 - (int)puVar18);
  }
  else {
    puVar24 = *(undefined1 **)(param_1 + 0x78);
    puVar18 = *(undefined1 **)(param_1 + 0x80);
    iVar19 = iVar13 + ((int)puVar24 - (int)puVar18);
    if (param_2 != 0) {
      local_6020 = 0;
      local_6018 = 0;
      pcVar16 = (char *)cv::String::allocate((String *)&local_6020,0x31);
      uVar10 = s_elements_with_keys_can_not_be_wr_00470b70._40_8_;
      uVar9 = s_elements_with_keys_can_not_be_wr_00470b70._32_8_;
      uVar8 = s_elements_with_keys_can_not_be_wr_00470b70._24_8_;
      uVar7 = s_elements_with_keys_can_not_be_wr_00470b70._16_8_;
      uVar6 = s_elements_with_keys_can_not_be_wr_00470b70._8_8_;
      uVar5 = s_elements_with_keys_can_not_be_wr_00470b70._0_8_;
      pcVar16[0x30] = s_elements_with_keys_can_not_be_wr_00470b70[0x30];
      *(undefined8 *)pcVar16 = uVar5;
      *(undefined8 *)(pcVar16 + 8) = uVar6;
      *(undefined8 *)(pcVar16 + 0x10) = uVar7;
      *(undefined8 *)(pcVar16 + 0x18) = uVar8;
      *(undefined8 *)(pcVar16 + 0x20) = uVar9;
      *(undefined8 *)(pcVar16 + 0x28) = uVar10;
      cv::error(-5,(String *)&local_6020,
                "void icvXMLWriteScalar(CvFileStorage*, const char*, const char*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x99b);
      cv::String::deallocate((String *)&local_6020);
      puVar18 = *(undefined1 **)(param_1 + 0x80);
    }
  }
  *(undefined4 *)(param_1 + 0x44) = 5;
  if ((iVar19 <= *(int *)(param_1 + 0x90)) || (iVar19 - *(int *)(param_1 + 0x40) < 0xb)) {
    if (puVar24 <= puVar18) {
      if ((puVar18 + *(int *)(param_1 + 0x40) < puVar24) && (puVar24[-1] != '>')) {
LAB_00373d70:
        *puVar24 = 0x20;
        memcpy(puVar24 + 1,param_3,(long)iVar13);
        *(undefined1 **)(param_1 + 0x78) = puVar24 + 1 + iVar13;
        return;
      }
      goto LAB_00373d2c;
    }
    if (puVar24[-1] != '>') {
      if (puVar18 + *(int *)(param_1 + 0x40) < puVar24) goto LAB_00373d70;
      goto LAB_00373d2c;
    }
  }
  puVar24 = *(undefined1 **)(param_1 + 0x78);
  iVar19 = *(int *)(param_1 + 0x58);
  if (puVar18 + iVar19 < puVar24) {
    puVar24[1] = 0;
    *puVar24 = 10;
    FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
    iVar19 = *(int *)(param_1 + 0x58);
    puVar18 = *(undefined1 **)(param_1 + 0x80);
    *(undefined1 **)(param_1 + 0x78) = puVar18;
  }
  iVar14 = *(int *)(param_1 + 0x40);
  if (iVar14 != iVar19) {
    if (iVar19 <= iVar14) {
      memset(puVar18 + iVar19,0x20,(long)(iVar14 - iVar19));
      puVar18 = *(undefined1 **)(param_1 + 0x80);
    }
    *(int *)(param_1 + 0x58) = iVar14;
    iVar19 = iVar14;
  }
  puVar24 = puVar18 + iVar19;
  *(undefined1 **)(param_1 + 0x78) = puVar24;
LAB_00373d2c:
  memcpy(puVar24,param_3,(long)iVar13);
  *(undefined1 **)(param_1 + 0x78) = puVar24 + iVar13;
  return;
}


==================================================================

### FUNC 00373f78 (1500 bytes) name=FUN_00373f78

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00373f78(long param_1,char *param_2,int param_3)

{
  undefined4 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  bool bVar8;
  bool bVar9;
  int iVar10;
  char *pcVar11;
  undefined8 *puVar12;
  size_t sVar13;
  long lVar14;
  void *pvVar15;
  char *pcVar16;
  long lVar17;
  int iVar18;
  char *pcVar19;
  int iVar20;
  char *pcVar21;
  size_t __n;
  char *local_10;
  char *local_8;
  
  if (param_2 == (char *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0xc);
    uVar1 = s_Null_comment_00470c60._8_4_;
    *(undefined8 *)pcVar11 = s_Null_comment_00470c60._0_8_;
    *(undefined4 *)(pcVar11 + 8) = uVar1;
    cv::error(-0x1b,(String *)&local_10,"void icvXMLWriteComment(CvFileStorage*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xa1a);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar11 = strstr(param_2,"--");
  if (pcVar11 != (char *)0x0) {
    local_10 = (char *)0x0;
    local_8 = (char *)0x0;
    puVar12 = (undefined8 *)cv::String::allocate((String *)&local_10,0x31);
    uVar7 = _LAB_00470ca0;
    uVar6 = _DAT_00470c98;
    uVar5 = DAT_00470c90;
    uVar4 = DAT_00470c88;
    uVar3 = DAT_00470c80;
    uVar2 = DAT_00470c78;
    *(undefined1 *)(puVar12 + 6) = LAB_00470ca8;
    *puVar12 = uVar2;
    puVar12[1] = uVar3;
    puVar12[2] = uVar4;
    puVar12[3] = uVar5;
    puVar12[4] = uVar6;
    puVar12[5] = uVar7;
    cv::error(-5,(String *)&local_10,"void icvXMLWriteComment(CvFileStorage*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xa1d);
    cv::String::deallocate((String *)&local_10);
  }
  sVar13 = strlen(param_2);
  pcVar11 = strchr(param_2,10);
  bVar8 = pcVar11 != (char *)0x0;
  pcVar19 = *(char **)(param_1 + 0x78);
  if (((bVar8) || (param_3 == 0)) ||
     (pcVar16 = *(char **)(param_1 + 0x88), (long)pcVar16 - (long)pcVar19 < (long)((int)sVar13 + 5))
     ) {
    lVar17 = *(long *)(param_1 + 0x80);
    iVar10 = *(int *)(param_1 + 0x58);
    if ((char *)(lVar17 + iVar10) < pcVar19) {
      pcVar19[1] = '\0';
      *pcVar19 = '\n';
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      lVar17 = *(long *)(param_1 + 0x80);
      iVar10 = *(int *)(param_1 + 0x58);
      *(long *)(param_1 + 0x78) = lVar17;
    }
    iVar18 = *(int *)(param_1 + 0x40);
    if (iVar18 != iVar10) {
      if (iVar10 <= iVar18) {
        memset((void *)(lVar17 + iVar10),0x20,(long)(iVar18 - iVar10));
        lVar17 = *(long *)(param_1 + 0x80);
      }
      *(int *)(param_1 + 0x58) = iVar18;
      iVar10 = iVar18;
    }
    pcVar21 = (char *)(lVar17 + iVar10);
    *(char **)(param_1 + 0x78) = pcVar21;
    if (!bVar8) goto LAB_003740a0;
    lVar14 = 4;
    *(undefined4 *)(lVar17 + iVar10) = _LAB_00470cc0;
    pcVar21[4] = LAB_00470cc4;
    pcVar19 = pcVar21 + 4;
    *(char **)(param_1 + 0x78) = pcVar19;
    lVar17 = *(long *)(param_1 + 0x80);
    iVar10 = *(int *)(param_1 + 0x58);
    if (pcVar19 <= (char *)(lVar17 + iVar10)) goto LAB_003740f0;
  }
  else {
    pcVar21 = pcVar19;
    if ((char *)(*(long *)(param_1 + 0x80) + (long)*(int *)(param_1 + 0x40)) < pcVar19) {
      pcVar21 = pcVar19 + 1;
      *pcVar19 = ' ';
LAB_003740a0:
      pcVar16 = *(char **)(param_1 + 0x88);
    }
    iVar10 = (int)sVar13 + 9;
    if (pcVar16 <= pcVar21 + iVar10) {
      iVar18 = (int)pcVar21 - (int)*(long *)(param_1 + 0x80);
      iVar10 = iVar10 + iVar18;
      iVar20 = (int)((((long)pcVar16 - *(long *)(param_1 + 0x80)) * 3) / 2);
      if (iVar10 < iVar20) {
        iVar10 = iVar20;
      }
      pvVar15 = (void *)cv::cvAlloc((long)(iVar10 + 0x100));
      *(long *)(param_1 + 0x78) =
           (long)pvVar15 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
      if (0 < iVar18) {
        memcpy(pvVar15,*(void **)(param_1 + 0x80),(long)iVar18);
      }
      *(void **)(param_1 + 0x80) = pvVar15;
      *(long *)(param_1 + 0x88) = (long)pvVar15 + (long)iVar10;
      pcVar21 = (char *)((long)pvVar15 + (long)iVar18);
    }
    sprintf(pcVar21,"<!-- %s -->",param_2);
    sVar13 = strlen(pcVar21);
    lVar14 = (long)(int)sVar13;
    pcVar19 = pcVar21 + lVar14;
    lVar17 = *(long *)(param_1 + 0x80);
    iVar10 = *(int *)(param_1 + 0x58);
    *(char **)(param_1 + 0x78) = pcVar19;
    if (pcVar19 <= (char *)(lVar17 + iVar10)) goto LAB_003740f0;
  }
  pcVar21[lVar14] = '\n';
  pcVar19[1] = '\0';
  FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
  lVar17 = *(long *)(param_1 + 0x80);
  iVar10 = *(int *)(param_1 + 0x58);
  *(long *)(param_1 + 0x78) = lVar17;
LAB_003740f0:
  iVar18 = *(int *)(param_1 + 0x40);
  if (iVar10 != iVar18) {
    if (iVar10 < iVar18) {
      memset((void *)(lVar17 + iVar10),0x20,(long)(iVar18 - iVar10));
      lVar17 = *(long *)(param_1 + 0x80);
    }
    *(int *)(param_1 + 0x58) = iVar18;
  }
  pcVar19 = (char *)(lVar17 + iVar18);
  *(char **)(param_1 + 0x78) = pcVar19;
  if (bVar8) {
    do {
      if (pcVar11 == (char *)0x0) {
        sVar13 = strlen(param_2);
        __n = (size_t)(int)sVar13;
        pcVar16 = pcVar19 + __n;
        if (*(char **)(param_1 + 0x88) <= pcVar16) {
          iVar18 = (int)pcVar19 - (int)lVar17;
          iVar10 = iVar18 + (int)sVar13;
          iVar20 = (int)((((long)*(char **)(param_1 + 0x88) - lVar17) * 3) / 2);
          if (iVar10 < iVar20) {
            iVar10 = iVar20;
          }
          pvVar15 = (void *)cv::cvAlloc((long)(iVar10 + 0x100));
          *(long *)(param_1 + 0x78) =
               (long)pvVar15 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
          if (0 < iVar18) {
            memcpy(pvVar15,*(void **)(param_1 + 0x80),(long)iVar18);
          }
          pcVar19 = (char *)((long)pvVar15 + (long)iVar18);
          *(void **)(param_1 + 0x80) = pvVar15;
          pcVar16 = pcVar19 + __n;
          *(long *)(param_1 + 0x88) = (long)pvVar15 + (long)iVar10;
        }
        pcVar21 = (char *)0x0;
        memcpy(pcVar19,param_2,__n);
      }
      else {
        lVar14 = (long)pcVar11 - (long)param_2;
        iVar10 = (int)lVar14 + 1;
        if (*(char **)(param_1 + 0x88) <= pcVar19 + iVar10) {
          iVar18 = (int)pcVar19 - (int)lVar17;
          iVar10 = iVar10 + iVar18;
          iVar20 = (int)((((long)*(char **)(param_1 + 0x88) - lVar17) * 3) / 2);
          if (iVar10 < iVar20) {
            iVar10 = iVar20;
          }
          pvVar15 = (void *)cv::cvAlloc((long)(iVar10 + 0x100));
          *(long *)(param_1 + 0x78) =
               (long)pvVar15 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
          if (0 < iVar18) {
            memcpy(pvVar15,*(void **)(param_1 + 0x80),(long)iVar18);
          }
          *(void **)(param_1 + 0x80) = pvVar15;
          *(long *)(param_1 + 0x88) = (long)pvVar15 + (long)iVar10;
          pcVar19 = (char *)((long)pvVar15 + (long)iVar18);
        }
        pcVar21 = pcVar11 + 1;
        pcVar16 = pcVar19 + lVar14;
        memcpy(pcVar19,param_2,lVar14 + 1);
        pcVar11 = strchr(pcVar21,10);
      }
      lVar17 = *(long *)(param_1 + 0x80);
      iVar10 = *(int *)(param_1 + 0x58);
      *(char **)(param_1 + 0x78) = pcVar16;
      if ((char *)(lVar17 + iVar10) < pcVar16) {
        *pcVar16 = '\n';
        pcVar16[1] = '\0';
        FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
        lVar17 = *(long *)(param_1 + 0x80);
        iVar10 = *(int *)(param_1 + 0x58);
        *(long *)(param_1 + 0x78) = lVar17;
      }
      iVar18 = *(int *)(param_1 + 0x40);
      if (iVar18 != iVar10) {
        if (iVar10 <= iVar18) {
          memset((void *)(lVar17 + iVar10),0x20,(long)(iVar18 - iVar10));
          lVar17 = *(long *)(param_1 + 0x80);
        }
        *(int *)(param_1 + 0x58) = iVar18;
        iVar10 = iVar18;
      }
      pcVar19 = (char *)(lVar17 + iVar10);
      *(char **)(param_1 + 0x78) = pcVar19;
      param_2 = pcVar21;
    } while (pcVar21 != (char *)0x0);
    *(undefined4 *)pcVar19 = s_<_____s___>_00470cb0._8_4_;
    lVar17 = *(long *)(param_1 + 0x80);
    iVar10 = *(int *)(param_1 + 0x58);
    *(char **)(param_1 + 0x78) = pcVar19 + 3;
    if ((char *)(lVar17 + iVar10) < pcVar19 + 3) {
      pcVar19[4] = '\0';
      pcVar19[3] = '\n';
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      iVar20 = *(int *)(param_1 + 0x40);
      iVar10 = *(int *)(param_1 + 0x58);
      lVar17 = *(long *)(param_1 + 0x80);
      *(long *)(param_1 + 0x78) = lVar17;
      bVar8 = SBORROW4(iVar20,iVar10);
      iVar18 = iVar20 - iVar10;
      bVar9 = iVar20 == iVar10;
    }
    else {
      iVar20 = *(int *)(param_1 + 0x40);
      bVar8 = SBORROW4(iVar20,iVar10);
      iVar18 = iVar20 - iVar10;
      bVar9 = iVar20 == iVar10;
    }
    if (!bVar9) {
      if (!bVar9 && iVar18 < 0 == bVar8) {
        memset((void *)(lVar17 + iVar10),0x20,(long)(iVar20 - iVar10));
        lVar17 = *(long *)(param_1 + 0x80);
      }
      *(int *)(param_1 + 0x58) = iVar20;
      iVar10 = iVar20;
    }
    *(long *)(param_1 + 0x78) = lVar17 + iVar10;
  }
  return;
}


==================================================================

### FUNC 0037457c (888 bytes) name=FUN_0037457c

void FUN_0037457c(long param_1,char *param_2,int param_3)

{
  undefined4 uVar1;
  size_t sVar2;
  char *pcVar3;
  undefined1 *puVar4;
  void *pvVar5;
  undefined1 *puVar6;
  int iVar7;
  long lVar8;
  int iVar9;
  int iVar10;
  char *__s;
  size_t __n;
  char *local_10;
  char *local_8;
  
  if (param_2 == (char *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar3 = (char *)cv::String::allocate((String *)&local_10,0xc);
    uVar1 = s_Null_comment_00470c60._8_4_;
    *(undefined8 *)pcVar3 = s_Null_comment_00470c60._0_8_;
    *(undefined4 *)(pcVar3 + 8) = uVar1;
    cv::error(-0x1b,(String *)&local_10,"void icvYMLWriteComment(CvFileStorage*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x69e);
    cv::String::deallocate((String *)&local_10);
  }
  sVar2 = strlen(param_2);
  pcVar3 = strchr(param_2,10);
  puVar6 = *(undefined1 **)(param_1 + 0x78);
  if (((pcVar3 == (char *)0x0) && (param_3 != 0)) &&
     ((long)(int)sVar2 <= *(long *)(param_1 + 0x88) - (long)puVar6)) {
    puVar4 = *(undefined1 **)(param_1 + 0x80);
    if (puVar4 != puVar6) {
      puVar4 = puVar6 + 1;
      *puVar6 = 0x20;
      pcVar3 = (char *)0x0;
      goto LAB_00374648;
    }
  }
  else {
    puVar4 = *(undefined1 **)(param_1 + 0x80);
  }
  iVar7 = *(int *)(param_1 + 0x58);
  if (puVar4 + iVar7 < puVar6) {
    puVar6[1] = 0;
    *puVar6 = 10;
    FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
    puVar4 = *(undefined1 **)(param_1 + 0x80);
    iVar7 = *(int *)(param_1 + 0x58);
    *(undefined1 **)(param_1 + 0x78) = puVar4;
  }
  iVar9 = *(int *)(param_1 + 0x40);
  if (iVar9 != iVar7) {
    if (iVar7 <= iVar9) {
      memset(puVar4 + iVar7,0x20,(long)(iVar9 - iVar7));
      puVar4 = *(undefined1 **)(param_1 + 0x80);
    }
    *(int *)(param_1 + 0x58) = iVar9;
    iVar7 = iVar9;
  }
  puVar4 = puVar4 + iVar7;
  *(undefined1 **)(param_1 + 0x78) = puVar4;
LAB_00374648:
  do {
    puVar6 = puVar4 + 2;
    *puVar4 = 0x23;
    puVar4[1] = 0x20;
    if (pcVar3 == (char *)0x0) {
      sVar2 = strlen(param_2);
      __n = (size_t)(int)sVar2;
      puVar4 = puVar6 + __n;
      if (*(undefined1 **)(param_1 + 0x88) <= puVar4) {
        iVar10 = (int)puVar6 - (int)*(long *)(param_1 + 0x80);
        iVar7 = iVar10 + (int)sVar2;
        iVar9 = (int)((((long)*(undefined1 **)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) / 2
                     );
        if (iVar7 < iVar9) {
          iVar7 = iVar9;
        }
        pvVar5 = (void *)cv::cvAlloc((long)(iVar7 + 0x100));
        *(long *)(param_1 + 0x78) =
             (long)pvVar5 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
        if (0 < iVar10) {
          memcpy(pvVar5,*(void **)(param_1 + 0x80),(long)iVar10);
        }
        puVar6 = (undefined1 *)((long)pvVar5 + (long)iVar10);
        *(void **)(param_1 + 0x80) = pvVar5;
        puVar4 = puVar6 + __n;
        *(long *)(param_1 + 0x88) = (long)pvVar5 + (long)iVar7;
      }
      __s = (char *)0x0;
      memcpy(puVar6,param_2,__n);
      *(undefined1 **)(param_1 + 0x78) = puVar4;
    }
    else {
      lVar8 = (long)pcVar3 - (long)param_2;
      iVar7 = (int)lVar8 + 1;
      if (*(undefined1 **)(param_1 + 0x88) <= puVar6 + iVar7) {
        iVar9 = (int)puVar6 - (int)*(long *)(param_1 + 0x80);
        iVar7 = iVar7 + iVar9;
        iVar10 = (int)((((long)*(undefined1 **)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) /
                      2);
        if (iVar7 < iVar10) {
          iVar7 = iVar10;
        }
        pvVar5 = (void *)cv::cvAlloc((long)(iVar7 + 0x100));
        *(long *)(param_1 + 0x78) =
             (long)pvVar5 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
        if (0 < iVar9) {
          memcpy(pvVar5,*(void **)(param_1 + 0x80),(long)iVar9);
        }
        *(void **)(param_1 + 0x80) = pvVar5;
        *(long *)(param_1 + 0x88) = (long)pvVar5 + (long)iVar7;
        puVar6 = (undefined1 *)((long)pvVar5 + (long)iVar9);
      }
      __s = pcVar3 + 1;
      puVar4 = puVar6 + lVar8;
      memcpy(puVar6,param_2,lVar8 + 1);
      *(undefined1 **)(param_1 + 0x78) = puVar4;
      pcVar3 = strchr(__s,10);
    }
    lVar8 = *(long *)(param_1 + 0x80);
    iVar7 = *(int *)(param_1 + 0x58);
    if ((undefined1 *)(lVar8 + iVar7) < puVar4) {
      *puVar4 = 10;
      puVar4[1] = 0;
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      lVar8 = *(long *)(param_1 + 0x80);
      iVar7 = *(int *)(param_1 + 0x58);
      *(long *)(param_1 + 0x78) = lVar8;
    }
    iVar9 = *(int *)(param_1 + 0x40);
    if (iVar9 != iVar7) {
      if (iVar7 <= iVar9) {
        memset((void *)(lVar8 + iVar7),0x20,(long)(iVar9 - iVar7));
        lVar8 = *(long *)(param_1 + 0x80);
      }
      *(int *)(param_1 + 0x58) = iVar9;
      iVar7 = iVar9;
    }
    puVar4 = (undefined1 *)(lVar8 + iVar7);
    *(undefined1 **)(param_1 + 0x78) = puVar4;
    param_2 = __s;
  } while (__s != (char *)0x0);
  return;
}


==================================================================

### FUNC 00374908 (1604 bytes) name=FUN_00374908

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00374908(long param_1,undefined8 param_2,uint *param_3)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  undefined8 uVar10;
  undefined1 uVar11;
  undefined8 *puVar12;
  undefined8 uVar13;
  long lVar14;
  uint *puVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  undefined1 auStack_c0 [24];
  uint *local_a8;
  uint *local_98;
  undefined1 auStack_80 [24];
  uint *local_68;
  uint *local_58;
  undefined8 local_40;
  undefined8 local_38;
  int *local_28;
  int *local_18;
  
  switch(*param_3 & 7) {
  case 0:
switchD_003749f4_caseD_0:
    (**(code **)(param_1 + 0x128))(param_1,param_2,5,0);
    goto LAB_00374b78;
  case 1:
    (**(code **)(param_1 + 0x138))(param_1,param_2,param_3[4]);
    break;
  case 2:
    (**(code **)(param_1 + 0x140))(*(undefined8 *)(param_3 + 4),param_1);
    break;
  case 3:
    (**(code **)(param_1 + 0x148))(param_1,param_2,*(undefined8 *)(param_3 + 6),0);
    break;
  default:
    local_40 = 0;
    local_38 = 0;
    puVar12 = (undefined8 *)cv::String::allocate((String *)&local_40,0x19);
    uVar11 = DAT_00470ce0;
    uVar10 = DAT_00470cd0;
    uVar13 = DAT_00470cc8;
    puVar12[2] = _LAB_00470cd8;
    *(undefined1 *)(puVar12 + 3) = uVar11;
    *puVar12 = uVar13;
    puVar12[1] = uVar10;
    cv::error(-0xce,(String *)&local_40,
              "void icvWriteFileNode(CvFileStorage*, const char*, const CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd6b);
    cv::String::deallocate((String *)&local_40);
    break;
  case 5:
  case 6:
    iVar1 = 0;
    if ((**(uint **)(param_3 + 4) & 0x100) != 0) {
      iVar1 = 8;
    }
    uVar13 = 0;
    if (*(long *)(param_3 + 2) != 0) {
      uVar13 = *(undefined8 *)(*(long *)(param_3 + 2) + 0x18);
    }
    iVar17 = 0;
    (**(code **)(param_1 + 0x128))(param_1,param_2,iVar1 + (*param_3 & 7),uVar13);
    lVar14 = *(long *)(param_3 + 4);
    uVar4 = *param_3;
    iVar1 = *(int *)(lVar14 + 0x28);
    iVar5 = *(int *)(lVar14 + 0x2c);
    cvStartReadSeq(lVar14,auStack_c0,0);
    if (0 < iVar1) {
      do {
        puVar15 = local_a8;
        uVar6 = *local_a8;
        if ((uVar4 & 7) == 6) {
          if ((int)uVar6 < 0) goto LAB_00374af8;
          param_2 = *(undefined8 *)(*(long *)(local_a8 + 8) + 0x10);
          if ((uVar6 & 7) < 7) goto LAB_00374b4c;
switchD_00374b60_caseD_4:
          local_40 = 0;
          local_38 = 0;
          puVar12 = (undefined8 *)cv::String::allocate((String *)&local_40,0x19);
          uVar13 = _LAB_00470cd8;
          *(undefined1 *)(puVar12 + 3) = DAT_00470ce0;
          puVar12[2] = uVar13;
          uVar13 = DAT_00470cd0;
          *puVar12 = DAT_00470cc8;
          puVar12[1] = uVar13;
          cv::error(-0xce,(String *)&local_40,
                    "void icvWriteFileNode(CvFileStorage*, const char*, const CvFileNode*)",
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd6b);
          cv::String::deallocate((String *)&local_40);
          goto LAB_00374af8;
        }
        param_2 = 0;
        if (6 < (uVar6 & 7)) goto switchD_00374b60_caseD_4;
LAB_00374b4c:
        switch(uVar6 & 7) {
        case 0:
          (**(code **)(param_1 + 0x128))(param_1,param_2,5,0);
          goto LAB_00374d64;
        case 1:
switchD_00374b60_caseD_1:
          (**(code **)(param_1 + 0x138))(param_1,param_2,puVar15[4]);
          local_a8 = (uint *)((long)local_a8 + (long)iVar5);
          if (local_98 <= local_a8) goto LAB_00374d40;
          goto LAB_00374b10;
        case 2:
          (**(code **)(param_1 + 0x140))(*(undefined8 *)(local_a8 + 4),param_1);
          break;
        case 3:
          (**(code **)(param_1 + 0x148))(param_1,param_2,*(undefined8 *)(local_a8 + 6),0);
          break;
        case 4:
          goto switchD_00374b60_caseD_4;
        default:
          iVar2 = 0;
          if ((**(uint **)(local_a8 + 4) & 0x100) != 0) {
            iVar2 = 8;
          }
          uVar13 = 0;
          if (*(long *)(local_a8 + 2) != 0) {
            uVar13 = *(undefined8 *)(*(long *)(local_a8 + 2) + 0x18);
          }
          iVar16 = 0;
          (**(code **)(param_1 + 0x128))(param_1,param_2,(uVar6 & 7) + iVar2,uVar13);
          uVar6 = *puVar15;
          lVar14 = *(long *)(puVar15 + 4);
          iVar2 = *(int *)(lVar14 + 0x28);
          iVar7 = *(int *)(lVar14 + 0x2c);
          cvStartReadSeq(lVar14,auStack_80,0);
          if (0 < iVar2) {
            do {
              puVar15 = local_68;
              uVar8 = *local_68;
              if ((uVar6 & 7) == 6) {
                if ((int)uVar8 < 0) goto LAB_00374ca8;
                param_2 = *(undefined8 *)(*(long *)(local_68 + 8) + 0x10);
                if ((uVar8 & 7) < 7) goto LAB_00374cfc;
switchD_00374d10_caseD_4:
                local_40 = 0;
                local_38 = 0;
                puVar12 = (undefined8 *)cv::String::allocate((String *)&local_40,0x19);
                uVar13 = _LAB_00470cd8;
                *(undefined1 *)(puVar12 + 3) = DAT_00470ce0;
                puVar12[2] = uVar13;
                uVar13 = DAT_00470cd0;
                *puVar12 = DAT_00470cc8;
                puVar12[1] = uVar13;
                cv::error(-0xce,(String *)&local_40,
                          "void icvWriteFileNode(CvFileStorage*, const char*, const CvFileNode*)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0xd6b);
                cv::String::deallocate((String *)&local_40);
                goto LAB_00374ca8;
              }
              param_2 = 0;
              if (6 < (uVar8 & 7)) goto switchD_00374d10_caseD_4;
LAB_00374cfc:
              switch(uVar8 & 7) {
              case 0:
                (**(code **)(param_1 + 0x128))(param_1,param_2,5,0);
                goto LAB_00374f38;
              case 1:
                (**(code **)(param_1 + 0x138))(param_1,param_2,local_68[4]);
                break;
              case 2:
                (**(code **)(param_1 + 0x140))(*(undefined8 *)(local_68 + 4),param_1);
                break;
              case 3:
                (**(code **)(param_1 + 0x148))(param_1,param_2,*(undefined8 *)(local_68 + 6),0);
                local_68 = (uint *)((long)local_68 + (long)iVar7);
                if (local_58 <= local_68) goto LAB_00374ee4;
                goto LAB_00374cc0;
              case 4:
                goto switchD_00374d10_caseD_4;
              default:
                iVar3 = 0;
                if ((**(uint **)(local_68 + 4) & 0x100) != 0) {
                  iVar3 = 8;
                }
                uVar13 = 0;
                if (*(long *)(local_68 + 2) != 0) {
                  uVar13 = *(undefined8 *)(*(long *)(local_68 + 2) + 0x18);
                }
                (**(code **)(param_1 + 0x128))(param_1,param_2,(uVar8 & 7) + iVar3,uVar13);
                lVar14 = *(long *)(puVar15 + 4);
                uVar8 = *puVar15;
                iVar3 = *(int *)(lVar14 + 0x28);
                iVar9 = *(int *)(lVar14 + 0x2c);
                cvStartReadSeq(lVar14,&local_40,0);
                if (0 < iVar3) {
                  iVar18 = 0;
                  if ((uVar8 & 7) == 6) {
                    do {
                      if (-1 < *local_28) {
                        FUN_00374908(param_1,*(undefined8 *)(*(long *)(local_28 + 8) + 0x10));
                      }
                      local_28 = (int *)((long)local_28 + (long)iVar9);
                      if (local_18 <= local_28) {
                        cvChangeSeqBlock(&local_40,1);
                      }
                      iVar18 = iVar18 + 1;
                    } while (iVar18 != iVar3);
                  }
                  else {
                    do {
                      FUN_00374908(param_1,0,local_28);
                      local_28 = (int *)((long)local_28 + (long)iVar9);
                      if (local_18 <= local_28) {
                        cvChangeSeqBlock(&local_40,1);
                      }
                      iVar18 = iVar18 + 1;
                    } while (iVar18 != iVar3);
                  }
                }
LAB_00374f38:
                (**(code **)(param_1 + 0x130))(param_1);
                break;
              case 7:
                goto switchD_00374b60_caseD_1;
              }
LAB_00374ca8:
              local_68 = (uint *)((long)local_68 + (long)iVar7);
              if (local_58 <= local_68) {
LAB_00374ee4:
                cvChangeSeqBlock(auStack_80,1);
              }
LAB_00374cc0:
              iVar16 = iVar16 + 1;
            } while (iVar16 != iVar2);
          }
LAB_00374d64:
          (**(code **)(param_1 + 0x130))(param_1);
          break;
        case 7:
          goto switchD_003749f4_caseD_0;
        }
LAB_00374af8:
        local_a8 = (uint *)((long)local_a8 + (long)iVar5);
        if (local_98 <= local_a8) {
LAB_00374d40:
          cvChangeSeqBlock(auStack_c0,1);
        }
LAB_00374b10:
        iVar17 = iVar17 + 1;
      } while (iVar17 != iVar1);
    }
LAB_00374b78:
    (**(code **)(param_1 + 0x130))(param_1);
  }
  return;
}


==================================================================

### FUNC 00374f88 (1776 bytes) name=FUN_00374f88

void FUN_00374f88(long param_1,char *param_2,char *param_3)

{
  bool bVar1;
  byte bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  void *pvVar14;
  size_t sVar15;
  long lVar16;
  char *pcVar17;
  undefined1 *puVar18;
  undefined1 *puVar19;
  undefined1 *puVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  uint uVar24;
  uint uVar25;
  int iVar26;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar24 = *(uint *)(param_1 + 0x44);
  if ((param_2 == (char *)0x0) || (*param_2 == '\0')) {
    if (4 < (uVar24 & 7)) {
      param_2 = (char *)0x0;
      iVar13 = 0;
      if ((uVar24 & 7) == 6) goto LAB_00374fe0;
      uVar25 = uVar24 & 8;
      if (param_3 != (char *)0x0) goto LAB_0037505c;
      goto LAB_00375328;
    }
    *(undefined4 *)(param_1 + 0xc) = 0;
    if (param_3 != (char *)0x0) {
      param_2 = (char *)0x0;
      uVar24 = 0x25;
      uVar25 = 0;
      iVar13 = 0;
      goto LAB_0037505c;
    }
    uVar25 = 5;
    uVar24 = 0x25;
    iVar26 = 0;
    iVar13 = 0;
    param_2 = (char *)0x0;
LAB_00375338:
    puVar19 = *(undefined1 **)(param_1 + 0x78);
    lVar16 = *(long *)(param_1 + 0x80);
    iVar21 = *(int *)(param_1 + 0x58);
    if ((undefined1 *)(lVar16 + iVar21) < puVar19) {
      puVar19[1] = 0;
      *puVar19 = 10;
      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
      lVar16 = *(long *)(param_1 + 0x80);
      iVar21 = *(int *)(param_1 + 0x58);
      *(long *)(param_1 + 0x78) = lVar16;
    }
    iVar22 = *(int *)(param_1 + 0x40);
    if (iVar22 != iVar21) {
      if (iVar21 <= iVar22) {
        memset((void *)(lVar16 + iVar21),0x20,(long)(iVar22 - iVar21));
        lVar16 = *(long *)(param_1 + 0x80);
      }
      *(int *)(param_1 + 0x58) = iVar22;
      iVar21 = iVar22;
    }
    puVar19 = (undefined1 *)(lVar16 + iVar21);
    *(undefined1 **)(param_1 + 0x78) = puVar19;
    if (uVar25 == 6) {
      uVar25 = 0;
      goto LAB_003750c0;
    }
    *(undefined1 *)(lVar16 + iVar21) = 0x2d;
    if (param_3 == (char *)0x0) {
      puVar19 = puVar19 + 1;
      uVar25 = 0;
      if (param_2 == (char *)0x0) goto LAB_003752a8;
      goto LAB_003750c4;
    }
    puVar19[1] = 0x20;
    uVar25 = 0;
    puVar19 = puVar19 + 2;
    if (param_2 != (char *)0x0) goto LAB_003750c4;
LAB_0037527c:
    puVar18 = *(undefined1 **)(param_1 + 0x88);
    sVar15 = (size_t)iVar26;
    puVar20 = puVar19 + sVar15;
    if (puVar18 <= puVar20) {
LAB_003753c4:
      iVar21 = (int)puVar19 - (int)*(long *)(param_1 + 0x80);
      iVar22 = (int)((((long)puVar18 - *(long *)(param_1 + 0x80)) * 3) / 2);
      iVar13 = iVar26 + iVar21;
      if (iVar26 + iVar21 < iVar22) {
        iVar13 = iVar22;
      }
      pvVar14 = (void *)cv::cvAlloc((long)(iVar13 + 0x100));
      *(long *)(param_1 + 0x78) =
           (long)pvVar14 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
      if (0 < iVar21) {
        memcpy(pvVar14,*(void **)(param_1 + 0x80),(long)iVar21);
      }
      puVar19 = (undefined1 *)((long)pvVar14 + (long)iVar21);
      *(void **)(param_1 + 0x80) = pvVar14;
      puVar20 = puVar19 + sVar15;
      *(long *)(param_1 + 0x88) = (long)pvVar14 + (long)iVar13;
    }
  }
  else {
    if ((uVar24 & 7) < 5) {
      *(undefined4 *)(param_1 + 0xc) = 0;
      uVar24 = 0x26;
      sVar15 = strlen(param_2);
      iVar13 = (int)sVar15;
      if (iVar13 != 0) goto LAB_00375044;
LAB_00375454:
      local_10 = 0;
      local_8 = 0;
      pcVar17 = (char *)cv::String::allocate((String *)&local_10,0x13);
      cVar5 = s_The_key_is_an_empty_00470ce8[0x12];
      uVar4 = s_The_key_is_an_empty_00470ce8._8_8_;
      uVar3 = s_The_key_is_an_empty_00470ce8._0_8_;
      *(undefined2 *)(pcVar17 + 0x10) = s_The_key_is_an_empty_00470ce8._16_2_;
      pcVar17[0x12] = cVar5;
      *(undefined8 *)pcVar17 = uVar3;
      *(undefined8 *)(pcVar17 + 8) = uVar4;
      cv::error(-5,(String *)&local_10,"void icvYMLWrite(CvFileStorage*, const char*, const char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x5a2);
LAB_00375510:
      cv::String::deallocate((String *)&local_10);
    }
    else {
      iVar13 = 1;
      if ((uVar24 & 7) == 6) {
LAB_00375034:
        sVar15 = strlen(param_2);
        iVar13 = (int)sVar15;
        if (iVar13 == 0) goto LAB_00375454;
LAB_00375044:
        if (0x1000 < iVar13) {
          local_10 = 0;
          local_8 = 0;
          pcVar17 = (char *)cv::String::allocate((String *)&local_10,0x13);
          cVar5 = s_The_key_is_too_long_00470d00[0x12];
          uVar4 = s_The_key_is_too_long_00470d00._8_8_;
          uVar3 = s_The_key_is_too_long_00470d00._0_8_;
          *(undefined2 *)(pcVar17 + 0x10) = s_The_key_is_too_long_00470d00._16_2_;
          pcVar17[0x12] = cVar5;
          *(undefined8 *)pcVar17 = uVar3;
          *(undefined8 *)(pcVar17 + 8) = uVar4;
          cv::error(-5,(String *)&local_10,
                    "void icvYMLWrite(CvFileStorage*, const char*, const char*)",
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x5a5);
          goto LAB_00375510;
        }
      }
      else {
LAB_00374fe0:
        local_10 = 0;
        local_8 = 0;
        pvVar14 = (void *)cv::String::allocate((String *)&local_10,0x55);
        memcpy(pvVar14,
               "An attempt to add element without a key to a map, or add element with key to sequence"
               ,0x55);
        cv::error(-5,(String *)&local_10,
                  "void icvYMLWrite(CvFileStorage*, const char*, const char*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x596);
        cv::String::deallocate((String *)&local_10);
        bVar1 = iVar13 != 0;
        iVar13 = 0;
        if (bVar1) goto LAB_00375034;
      }
    }
    uVar25 = uVar24 & 8;
    if (param_3 == (char *)0x0) {
LAB_00375328:
      iVar26 = (int)param_3;
    }
    else {
LAB_0037505c:
      sVar15 = strlen(param_3);
      iVar26 = (int)sVar15;
    }
    if (uVar25 == 0) {
      uVar25 = uVar24 & 7;
      goto LAB_00375338;
    }
    puVar19 = *(undefined1 **)(param_1 + 0x78);
    puVar20 = puVar19;
    if ((uVar24 >> 5 & 1) == 0) {
      puVar20 = puVar19 + 1;
      *puVar19 = 0x2c;
    }
    lVar16 = *(long *)(param_1 + 0x80);
    iVar21 = iVar13 + ((int)puVar20 - (int)lVar16) + iVar26;
    if ((*(int *)(param_1 + 0x90) < iVar21) &&
       (iVar22 = *(int *)(param_1 + 0x40), 10 < iVar21 - iVar22)) {
      iVar21 = *(int *)(param_1 + 0x58);
      *(undefined1 **)(param_1 + 0x78) = puVar20;
      if ((undefined1 *)(lVar16 + iVar21) < puVar20) {
        puVar20[1] = 0;
        *puVar20 = 10;
        FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x80));
        iVar22 = *(int *)(param_1 + 0x40);
        lVar16 = *(long *)(param_1 + 0x80);
        iVar21 = *(int *)(param_1 + 0x58);
        *(long *)(param_1 + 0x78) = lVar16;
      }
      if (iVar22 != iVar21) {
        if (iVar21 <= iVar22) {
          memset((void *)(lVar16 + iVar21),0x20,(long)(iVar22 - iVar21));
          lVar16 = *(long *)(param_1 + 0x80);
        }
        *(int *)(param_1 + 0x58) = iVar22;
      }
      puVar19 = (undefined1 *)(lVar16 + iVar22);
      *(undefined1 **)(param_1 + 0x78) = puVar19;
    }
    else {
      puVar19 = puVar20 + 1;
      *puVar20 = 0x20;
    }
LAB_003750c0:
    if (param_2 != (char *)0x0) {
LAB_003750c4:
      if ((0x19 < (((int)*param_2 & 0xffffffdfU) - 0x41 & 0xff)) && ((int)*param_2 != 0x5f)) {
        local_10 = 0;
        local_8 = 0;
        pcVar17 = (char *)cv::String::allocate((String *)&local_10,0x21);
        uVar7 = s_Key_must_start_with_a_letter_or___00470d70._24_8_;
        uVar6 = s_Key_must_start_with_a_letter_or___00470d70._16_8_;
        uVar4 = s_Key_must_start_with_a_letter_or___00470d70._8_8_;
        uVar3 = s_Key_must_start_with_a_letter_or___00470d70._0_8_;
        pcVar17[0x20] = s_Key_must_start_with_a_letter_or___00470d70[0x20];
        *(undefined8 *)pcVar17 = uVar3;
        *(undefined8 *)(pcVar17 + 8) = uVar4;
        *(undefined8 *)(pcVar17 + 0x10) = uVar6;
        *(undefined8 *)(pcVar17 + 0x18) = uVar7;
        cv::error(-5,(String *)&local_10,
                  "void icvYMLWrite(CvFileStorage*, const char*, const char*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x5c8);
        cv::String::deallocate((String *)&local_10);
      }
      puVar20 = puVar19;
      if (*(undefined1 **)(param_1 + 0x88) <= puVar19 + iVar13) {
        iVar22 = (int)puVar19 - (int)*(long *)(param_1 + 0x80);
        iVar23 = (int)((((long)*(undefined1 **)(param_1 + 0x88) - *(long *)(param_1 + 0x80)) * 3) /
                      2);
        iVar21 = iVar13 + iVar22;
        if (iVar13 + iVar22 < iVar23) {
          iVar21 = iVar23;
        }
        pvVar14 = (void *)cv::cvAlloc((long)(iVar21 + 0x100));
        *(long *)(param_1 + 0x78) =
             (long)pvVar14 + (*(long *)(param_1 + 0x78) - (long)*(void **)(param_1 + 0x80));
        if (0 < iVar22) {
          memcpy(pvVar14,*(void **)(param_1 + 0x80),(long)iVar22);
        }
        *(void **)(param_1 + 0x80) = pvVar14;
        *(long *)(param_1 + 0x88) = (long)pvVar14 + (long)iVar21;
        puVar20 = (undefined1 *)((long)pvVar14 + (long)iVar22);
      }
      lVar16 = 0;
      if (0 < iVar13) {
        do {
          bVar2 = param_2[lVar16];
          puVar20[lVar16] = bVar2;
          if ((((9 < (byte)(bVar2 - 0x30)) && (0x19 < (byte)((bVar2 & 0xdf) + 0xbf))) &&
              (bVar2 != 0x2d && bVar2 != 0x5f)) && (bVar2 != 0x20)) {
            local_10 = 0;
            local_8 = 0;
            pcVar17 = (char *)cv::String::allocate((String *)&local_10,0x50);
            uVar12 = s_Key_names_may_only_contain_alpha_00470d18._72_8_;
            uVar11 = s_Key_names_may_only_contain_alpha_00470d18._64_8_;
            uVar10 = s_Key_names_may_only_contain_alpha_00470d18._56_8_;
            uVar9 = s_Key_names_may_only_contain_alpha_00470d18._48_8_;
            uVar8 = s_Key_names_may_only_contain_alpha_00470d18._40_8_;
            uVar7 = s_Key_names_may_only_contain_alpha_00470d18._32_8_;
            uVar6 = s_Key_names_may_only_contain_alpha_00470d18._24_8_;
            uVar4 = s_Key_names_may_only_contain_alpha_00470d18._16_8_;
            uVar3 = s_Key_names_may_only_contain_alpha_00470d18._8_8_;
            *(undefined8 *)pcVar17 = s_Key_names_may_only_contain_alpha_00470d18._0_8_;
            *(undefined8 *)(pcVar17 + 8) = uVar3;
            *(undefined8 *)(pcVar17 + 0x10) = uVar4;
            *(undefined8 *)(pcVar17 + 0x18) = uVar6;
            *(undefined8 *)(pcVar17 + 0x20) = uVar7;
            *(undefined8 *)(pcVar17 + 0x28) = uVar8;
            *(undefined8 *)(pcVar17 + 0x30) = uVar9;
            *(undefined8 *)(pcVar17 + 0x38) = uVar10;
            *(undefined8 *)(pcVar17 + 0x40) = uVar11;
            *(undefined8 *)(pcVar17 + 0x48) = uVar12;
            cv::error(-5,(String *)&local_10,
                      "void icvYMLWrite(CvFileStorage*, const char*, const char*)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x5d2);
            cv::String::deallocate((String *)&local_10);
          }
          lVar16 = lVar16 + 1;
        } while ((int)lVar16 < iVar13);
      }
      puVar20[iVar13] = 0x3a;
      puVar19 = puVar20 + (long)iVar13 + 1;
      if (uVar25 == 0) {
        if (param_3 == (char *)0x0) goto LAB_003752a8;
        puVar19 = puVar20 + (long)iVar13 + 2;
        puVar20[(long)iVar13 + 1] = 0x20;
        goto LAB_0037527c;
      }
    }
    if (param_3 == (char *)0x0) goto LAB_003752a8;
    puVar18 = *(undefined1 **)(param_1 + 0x88);
    sVar15 = (size_t)iVar26;
    puVar20 = puVar19 + sVar15;
    if (puVar18 <= puVar20) goto LAB_003753c4;
  }
  memcpy(puVar19,param_3,sVar15);
  puVar19 = puVar20;
LAB_003752a8:
  *(undefined1 **)(param_1 + 0x78) = puVar19;
  *(uint *)(param_1 + 0x44) = uVar24 & 0xffffffdf;
  return;
}


==================================================================

### FUNC 003756dc (968 bytes) name=FUN_003756dc

void FUN_003756dc(undefined8 param_1,undefined8 param_2,char *param_3,int param_4)

{
  char cVar1;
  byte bVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  int iVar8;
  size_t sVar9;
  char *pcVar10;
  uint uVar11;
  long lVar12;
  byte *pbVar13;
  byte *pbVar14;
  undefined8 local_4010;
  char *local_4008;
  
  if (param_3 == (char *)0x0) {
    local_4010 = param_3;
    local_4008 = param_3;
    pcVar10 = (char *)cv::String::allocate((String *)&local_4010,0x13);
    cVar1 = s_Null_string_pointer_00470bf8[0x12];
    uVar5 = s_Null_string_pointer_00470bf8._8_8_;
    uVar4 = s_Null_string_pointer_00470bf8._0_8_;
    *(undefined2 *)(pcVar10 + 0x10) = s_Null_string_pointer_00470bf8._16_2_;
    pcVar10[0x12] = cVar1;
    *(undefined8 *)pcVar10 = uVar4;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    cv::error(-0x1b,(String *)&local_4010,
              "void icvYMLWriteString(CvFileStorage*, const char*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x660);
    cv::String::deallocate((String *)&local_4010);
  }
  sVar9 = strlen(param_3);
  iVar8 = (int)sVar9;
  if (0x1000 < iVar8) {
    local_4010 = (char *)0x0;
    local_4008 = (char *)0x0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_4010,0x1e);
    uVar7 = s_The_written_string_is_too_long_00470c10._28_2_;
    uVar6 = s_The_written_string_is_too_long_00470c10._24_4_;
    uVar5 = s_The_written_string_is_too_long_00470c10._8_8_;
    uVar4 = s_The_written_string_is_too_long_00470c10._0_8_;
    *(undefined8 *)(pcVar10 + 0x10) = s_The_written_string_is_too_long_00470c10._16_8_;
    *(undefined4 *)(pcVar10 + 0x18) = uVar6;
    *(undefined2 *)(pcVar10 + 0x1c) = uVar7;
    *(undefined8 *)pcVar10 = uVar4;
    *(undefined8 *)(pcVar10 + 8) = uVar5;
    cv::error(-5,(String *)&local_4010,
              "void icvYMLWriteString(CvFileStorage*, const char*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x664);
    cv::String::deallocate((String *)&local_4010);
  }
  if ((iVar8 == 0) || (param_4 != 0)) {
    bVar3 = true;
    local_4010 = (char *)CONCAT71(local_4010._1_7_,0x22);
    if (iVar8 < 1) {
      pbVar13 = (byte *)((long)&local_4010 + 1);
    }
    else {
LAB_00375764:
      local_4010 = (char *)CONCAT71(local_4010._1_7_,0x22);
      lVar12 = 0;
      pbVar13 = (byte *)((long)&local_4010 + 1);
      do {
        bVar2 = param_3[lVar12];
        if (bVar3) {
LAB_003758fc:
          if (((byte)(bVar2 + 0x9f) < 0x1a) || ((byte)(bVar2 - 0x30) < 10)) goto LAB_00375804;
LAB_003757f4:
          if ((byte)(bVar2 + 0xbf) < 0x1a) goto LAB_00375804;
          uVar11 = (uint)(char)bVar2;
          if ((bVar2 < 0x20) || (uVar11 == 0x5c)) {
            *pbVar13 = 0x5c;
            if (0x1f < bVar2) goto LAB_003758f0;
            if (bVar2 == 10) {
              pbVar13[1] = 0x6e;
              pbVar13 = pbVar13 + 2;
            }
            else if (uVar11 == 0xd) {
              pbVar13[1] = 0x72;
              pbVar13 = pbVar13 + 2;
            }
            else if (uVar11 == 9) {
              pbVar13[1] = 0x74;
              pbVar13 = pbVar13 + 2;
            }
            else {
              pbVar14 = pbVar13 + 1;
              pbVar13 = pbVar13 + 4;
              sprintf((char *)pbVar14,"x%02x",(ulong)uVar11);
            }
          }
          else {
            if ((uVar11 != 0x27) && (bVar2 != 0x22)) goto LAB_00375804;
            *pbVar13 = 0x5c;
LAB_003758f0:
            pbVar13[1] = bVar2;
            pbVar13 = pbVar13 + 2;
          }
        }
        else {
          if (9 < (byte)(bVar2 - 0x30)) {
            if ((byte)((bVar2 & 0xdf) + 0xbf) < 0x1a) goto LAB_003758fc;
            if ((bVar2 != 0x5f) &&
               (((bVar2 != 0x20 && (bVar2 != 0x2d)) && (1 < (byte)(bVar2 - 0x28))))) {
              bVar3 = (bVar2 & 0xfb) != 0x2b && bVar2 != 0x3b;
            }
            goto LAB_003757f4;
          }
LAB_00375804:
          *pbVar13 = bVar2;
          pbVar13 = pbVar13 + 1;
        }
        lVar12 = lVar12 + 1;
      } while ((int)lVar12 < iVar8);
      if (!bVar3) {
        uVar11 = (uint)*param_3;
        goto LAB_00375820;
      }
    }
LAB_00375a20:
    param_3 = (char *)&local_4010;
    pbVar14 = pbVar13 + 1;
    *pbVar13 = 0x22;
  }
  else {
    cVar1 = *param_3;
    uVar11 = (uint)cVar1;
    if (((uint)(byte)param_3[(long)iVar8 + -1] == (int)cVar1) &&
       (((int)cVar1 == 0x27 || (uVar11 == 0x22)))) goto LAB_0037585c;
    bVar3 = false;
    local_4010 = (char *)CONCAT71(local_4010._1_7_,0x22);
    if (0 < iVar8) goto LAB_00375764;
    pbVar13 = (byte *)((long)&local_4010 + 1);
LAB_00375820:
    if ((((uVar11 & 0xff) - 0x30 & 0xff) < 10 || ((uVar11 & 0xff) - 0x2d & 0xff) < 2) ||
       (uVar11 == 0x2b)) goto LAB_00375a20;
    param_3 = (char *)((long)&local_4010 + 1);
    pbVar14 = pbVar13;
  }
  *pbVar14 = 0;
LAB_0037585c:
  FUN_00374f88(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00375acc (340 bytes) name=FUN_00375acc

void FUN_00375acc(double param_1,undefined8 param_2,undefined8 param_3)

{
  char cVar1;
  long lVar2;
  uint uVar3;
  char *pcVar4;
  undefined4 local_80;
  undefined1 local_7c;
  
  uVar3 = (uint)((ulong)param_1 >> 0x20);
  if ((uVar3 & 0x7ff00000) == 0x7ff00000) {
    uVar3 = uVar3 & 0x7fffffff;
    if (SUB84(param_1,0) != 0) {
      uVar3 = uVar3 + 1;
    }
    if (uVar3 < 0x7ff00001) {
      if ((long)param_1 < 0) {
        pcVar4 = "-.Inf";
      }
      else {
        pcVar4 = ".Inf";
      }
      strcpy((char *)&local_80,pcVar4);
    }
    else {
      local_80 = DAT_00470bc8;
      local_7c = DAT_00470bcc;
    }
  }
  else {
    lVar2 = lrint(param_1);
    if (param_1 == (double)(int)lVar2) {
      sprintf((char *)&local_80,"%d.",lVar2);
    }
    else {
      pcVar4 = (char *)&local_80;
      sprintf(pcVar4,"%.16e",param_1,lVar2);
      cVar1 = (char)local_80;
      if (((char)local_80 - 0x2bU & 0xfd) == 0) {
        pcVar4 = (char *)((long)&local_80 + 1);
        cVar1 = local_80._1_1_;
      }
      while (((int)cVar1 - 0x30U & 0xff) < 10) {
        pcVar4 = pcVar4 + 1;
        cVar1 = *pcVar4;
      }
      if (cVar1 == 0x2c) {
        *pcVar4 = '.';
      }
    }
  }
  FUN_00374f88(param_2,param_3,&local_80);
  return;
}


==================================================================

### FUNC 00375c20 (108 bytes) name=FUN_00375c20

void FUN_00375c20(undefined8 param_1,undefined8 param_2,int param_3)

{
  char cVar1;
  char *pcVar2;
  char *pcVar3;
  ulong uVar4;
  char local_6b [107];
  
  uVar4 = (long)param_3 >> 0x3f;
  uVar4 = ((long)param_3 ^ uVar4) - uVar4;
  local_6b[2] = 0;
  pcVar3 = local_6b + 2;
  do {
    pcVar2 = pcVar3;
    cVar1 = (char)uVar4;
    uVar4 = (uVar4 & 0xffffffff) / 10;
    pcVar3 = pcVar2 + -1;
    *pcVar3 = cVar1 + '0' + (char)uVar4 * -10;
  } while ((int)uVar4 != 0);
  if (param_3 < 0) {
    pcVar3 = pcVar2 + -2;
    pcVar2[-2] = '-';
  }
  FUN_00374f88(param_1,param_2,pcVar3);
  return;
}


==================================================================

### FUNC 00375c8c (484 bytes) name=FUN_00375c8c

void FUN_00375c8c(long param_1,undefined8 param_2,uint param_3,long param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  char *pcVar10;
  undefined1 uVar11;
  int iVar12;
  uint local_1404;
  undefined8 local_1400;
  undefined8 local_13f8;
  
  if ((param_3 & 7) < 5) {
    local_1400 = 0;
    local_13f8 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_1400,0x44);
    uVar6 = s_Some_collection_type___CV_NODE_S_00470da0._40_8_;
    uVar5 = s_Some_collection_type___CV_NODE_S_00470da0._32_8_;
    uVar4 = s_Some_collection_type___CV_NODE_S_00470da0._24_8_;
    uVar3 = s_Some_collection_type___CV_NODE_S_00470da0._16_8_;
    uVar2 = s_Some_collection_type___CV_NODE_S_00470da0._8_8_;
    uVar1 = s_Some_collection_type___CV_NODE_S_00470da0._0_8_;
    *(undefined4 *)(pcVar10 + 0x40) = s_Some_collection_type___CV_NODE_S_00470da0._64_4_;
    uVar8 = s_Some_collection_type___CV_NODE_S_00470da0._56_8_;
    uVar7 = s_Some_collection_type___CV_NODE_S_00470da0._48_8_;
    *(undefined8 *)pcVar10 = uVar1;
    *(undefined8 *)(pcVar10 + 8) = uVar2;
    *(undefined8 *)(pcVar10 + 0x10) = uVar3;
    *(undefined8 *)(pcVar10 + 0x18) = uVar4;
    *(undefined8 *)(pcVar10 + 0x20) = uVar5;
    *(undefined8 *)(pcVar10 + 0x28) = uVar6;
    *(undefined8 *)(pcVar10 + 0x30) = uVar7;
    *(undefined8 *)(pcVar10 + 0x38) = uVar8;
    cv::error(-5,(String *)&local_1400,
              "void icvYMLStartWriteStruct(CvFileStorage*, const char*, int, const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x5f2);
    cv::String::deallocate((String *)&local_1400);
  }
  if ((param_3 >> 3 & 1) == 0) {
    if (param_4 == 0) {
      pcVar10 = (char *)0x0;
    }
    else {
      pcVar10 = (char *)&local_1400;
      sprintf(pcVar10,"!!%s",param_4);
    }
    FUN_00374f88(param_1,param_2,pcVar10);
    local_1404 = *(uint *)(param_1 + 0x44);
    cvSeqPush(*(undefined8 *)(param_1 + 0x38),&local_1404);
    *(uint *)(param_1 + 0x44) = param_3 & 0xf | 0x20;
    if ((local_1404 >> 3 & 1) != 0) {
      return;
    }
    iVar12 = *(int *)(param_1 + 0x40);
    iVar9 = 3;
    goto LAB_00375d44;
  }
  if ((param_3 & 7) == 6) {
    uVar11 = 0x7b;
    if (param_4 != 0) goto LAB_00375cf8;
LAB_00375e64:
    local_1400._0_2_ = CONCAT11((char)param_4,uVar11);
  }
  else {
    uVar11 = 0x5b;
    if (param_4 == 0) goto LAB_00375e64;
LAB_00375cf8:
    sprintf((char *)&local_1400,"!!%s %c",param_4);
  }
  FUN_00374f88(param_1,param_2,&local_1400);
  local_1404 = *(uint *)(param_1 + 0x44);
  cvSeqPush(*(undefined8 *)(param_1 + 0x38),&local_1404);
  *(uint *)(param_1 + 0x44) = param_3 & 0xf | 0x28;
  if ((local_1404 >> 3 & 1) != 0) {
    return;
  }
  iVar12 = *(int *)(param_1 + 0x40);
  iVar9 = 4;
LAB_00375d44:
  *(int *)(param_1 + 0x40) = iVar12 + iVar9;
  return;
}


==================================================================

### FUNC 00375e84 (864 bytes) name=FUN_00375e84

int FUN_00375e84(char *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  int iVar8;
  size_t sVar9;
  char *pcVar10;
  long lVar11;
  char *pcVar12;
  ulong uVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  int iVar17;
  ulong uVar18;
  char *local_210;
  undefined8 local_208;
  uint local_200 [128];
  
  if (param_1 != (char *)0x0) {
    sVar9 = strlen(param_1);
    iVar8 = (int)sVar9;
    if (iVar8 != 0) {
      local_200[0] = 0;
      if (0 < iVar8) {
        uVar18 = 0;
        iVar14 = 0;
        do {
          uVar15 = (int)param_1[iVar14] - 0x30;
          iVar17 = (int)uVar18;
          if ((uVar15 & 0xff) < 10) {
            if ((byte)((param_1 + iVar14)[1] - 0x30U) < 10) {
              local_210 = (char *)0x0;
              lVar11 = strtol(param_1 + iVar14,&local_210,10);
              uVar15 = (uint)lVar11;
              iVar14 = ((int)local_210 - (int)param_1) + -1;
            }
            if ((int)uVar15 < 1) {
              local_210 = (char *)0x0;
              local_208 = (char *)0x0;
              pcVar10 = (char *)cv::String::allocate((String *)&local_210,0x1f);
              cVar5 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar4 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar3 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar2 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar1 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar10 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar10 + 0x18) = uVar3;
              *(undefined2 *)(pcVar10 + 0x1c) = uVar4;
              pcVar10[0x1e] = cVar5;
              *(undefined8 *)pcVar10 = uVar1;
              *(undefined8 *)(pcVar10 + 8) = uVar2;
              cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0)
              ;
              cv::String::deallocate((String *)&local_210);
            }
            local_200[iVar17] = uVar15;
          }
          else {
            pcVar10 = strchr("ucwsifdr",(int)param_1[iVar14]);
            if (pcVar10 == (char *)0x0) {
              local_210 = pcVar10;
              local_208 = pcVar10;
              pcVar12 = (char *)cv::String::allocate((String *)&local_210,0x1f);
              cVar5 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar4 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar3 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar2 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar1 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar12 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar12 + 0x18) = uVar3;
              *(undefined2 *)(pcVar12 + 0x1c) = uVar4;
              pcVar12[0x1e] = cVar5;
              *(undefined8 *)pcVar12 = uVar1;
              *(undefined8 *)(pcVar12 + 8) = uVar2;
              cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8)
              ;
              cv::String::deallocate((String *)&local_210);
            }
            uVar13 = -(uVar18 >> 0x1f) & 0xfffffffc00000000 | uVar18 << 2;
            if (*(int *)((long)local_200 + uVar13) == 0) {
              *(undefined4 *)((long)local_200 + uVar13) = 1;
            }
            iVar16 = (int)pcVar10 + -0x472f10;
            *(int *)((long)local_200 + uVar13 + 4) = iVar16;
            if (iVar17 == 0) {
              uVar18 = 2;
              *(undefined4 *)((long)local_200 + uVar13 + 8) = 0;
            }
            else if (iVar16 == *(int *)((long)&local_208 + uVar13 + 4)) {
              *(int *)((long)&local_208 + uVar13) =
                   *(int *)((long)&local_208 + uVar13) + *(int *)((long)local_200 + uVar13);
              *(int *)((long)local_200 + uVar13) = 0;
            }
            else {
              uVar15 = iVar17 + 2;
              uVar18 = (ulong)uVar15;
              if ((int)uVar15 < 0x100) {
                lVar11 = (long)(int)uVar15 * 4;
              }
              else {
                local_210 = (char *)0x0;
                local_208 = (char *)0x0;
                pcVar10 = (char *)cv::String::allocate((String *)&local_210,0x20);
                uVar6 = s_Too_long_data_type_specification_00470870._24_8_;
                uVar2 = s_Too_long_data_type_specification_00470870._16_8_;
                uVar1 = s_Too_long_data_type_specification_00470870._8_8_;
                *(undefined8 *)pcVar10 = s_Too_long_data_type_specification_00470870._0_8_;
                *(undefined8 *)(pcVar10 + 8) = uVar1;
                *(undefined8 *)(pcVar10 + 0x10) = uVar2;
                *(undefined8 *)(pcVar10 + 0x18) = uVar6;
                cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0xbe2);
                cv::String::deallocate((String *)&local_210);
                lVar11 = (long)(int)uVar15 << 2;
              }
              *(undefined4 *)((long)local_200 + lVar11) = 0;
            }
          }
          iVar14 = iVar14 + 1;
        } while (iVar14 < iVar8);
        if (((int)uVar18 >> 1 == 1) && ((int)local_200[0] < 5)) goto LAB_00375fb8;
      }
    }
  }
  local_210 = (char *)0x0;
  local_208 = (char *)0x0;
  pcVar10 = (char *)cv::String::allocate((String *)&local_210,0x21);
  uVar7 = s_Too_complex_format_for_the_matri_00470df8._24_8_;
  uVar6 = s_Too_complex_format_for_the_matri_00470df8._16_8_;
  uVar2 = s_Too_complex_format_for_the_matri_00470df8._8_8_;
  uVar1 = s_Too_complex_format_for_the_matri_00470df8._0_8_;
  pcVar10[0x20] = s_Too_complex_format_for_the_matri_00470df8[0x20];
  *(undefined8 *)pcVar10 = uVar1;
  *(undefined8 *)(pcVar10 + 8) = uVar2;
  *(undefined8 *)(pcVar10 + 0x10) = uVar6;
  *(undefined8 *)(pcVar10 + 0x18) = uVar7;
  cv::error(-2,(String *)&local_210,"int icvDecodeSimpleFormat(const char*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc0d);
  cv::String::deallocate((String *)&local_210);
LAB_00375fb8:
  return (local_200[1] & 7) + (local_200[0] - 1) * 8;
}


==================================================================

### FUNC 00376234 (716 bytes) name=getDefaultObjectName

/* cv::FileStorage::getDefaultObjectName(cv::String const&) */

void __thiscall cv::FileStorage::getDefaultObjectName(FileStorage *this,String *param_1)

{
  ulong uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  size_t __n;
  void *__dest;
  byte bVar5;
  uint uVar6;
  char *pcVar7;
  String *in_x8;
  byte *pbVar8;
  byte *__s1;
  byte *pbVar9;
  byte *pbVar10;
  undefined8 local_428;
  undefined8 local_420;
  char *local_418;
  ulong local_410;
  char acStack_408 [1032];
  
  pbVar9 = *(byte **)this;
  if (pbVar9 == (byte *)0x0) {
    pbVar9 = &DAT_00472008;
  }
  pcVar4 = acStack_408;
  uVar1 = *(long *)(this + 8) + 1;
  __s1 = pbVar9 + *(long *)(this + 8);
  local_410 = 0x408;
  pbVar8 = __s1 + -1;
  if (0x408 < uVar1) {
    local_418 = pcVar4;
    pcVar4 = operator_new__(uVar1);
  }
  pbVar10 = pbVar8;
  local_418 = pcVar4;
  local_410 = uVar1;
  if (pbVar9 <= pbVar8) {
    bVar5 = __s1[-1];
    uVar6 = (uint)bVar5;
    if ((bVar5 != 0x5c && bVar5 != 0x2f) && (bVar5 != 0x3a)) {
      while( true ) {
        pbVar10 = __s1;
        if ((uVar6 == 0x2e) &&
           ((pbVar10 = pbVar8, *__s1 != 0 &&
            (iVar3 = strncmp((char *)__s1,".gz",3), pbVar10 = __s1, iVar3 == 0)))) {
          pbVar10 = pbVar8;
        }
        __s1 = pbVar10;
        pbVar10 = pbVar9 + -1;
        if (pbVar8 + -1 == pbVar9 + -1) break;
        pbVar8 = pbVar8 + -1;
        bVar5 = *pbVar8;
        uVar6 = (uint)(char)bVar5;
        pbVar10 = pbVar8;
        if ((bVar5 == 0x5c || bVar5 == 0x2f) || (bVar5 == 0x3a)) break;
      }
    }
  }
  pbVar9 = pbVar10 + 1;
  if (pbVar9 == __s1) {
    local_428 = 0;
    local_420 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_428,0x10);
    uVar2 = s_Invalid_filename_00470e28._8_8_;
    *(undefined8 *)pcVar4 = s_Invalid_filename_00470e28._0_8_;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-5,(String *)&local_428,
          "static cv::String cv::FileStorage::getDefaultObjectName(const cv::String&)",
          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x86);
    String::deallocate((String *)&local_428);
    pcVar4 = local_418;
    if (((((int)(char)pbVar10[1] & 0xffffffdfU) - 0x41 & 0xff) < 0x1a) ||
       (pcVar7 = local_418, (int)(char)pbVar10[1] == 0x5f)) goto LAB_003763d4;
LAB_00376364:
    pcVar4 = pcVar7 + 1;
    *pcVar7 = 0x5f;
  }
  else if ((0x19 < (((int)(char)pbVar10[1] & 0xffffffdfU) - 0x41 & 0xff)) &&
          (pcVar7 = pcVar4, (int)(char)pbVar10[1] != 0x5f)) goto LAB_00376364;
  pcVar7 = pcVar4;
  if (pbVar9 < __s1) {
    do {
      pbVar8 = pbVar9 + 1;
      bVar5 = *pbVar9;
      if ((((9 < (byte)(bVar5 - 0x30)) && (0x19 < (byte)((bVar5 & 0xdf) + 0xbf))) && (bVar5 != 0x5f)
          ) && (bVar5 != 0x2d)) {
        bVar5 = 0x5f;
      }
      *pcVar7 = bVar5;
      pcVar7 = pcVar7 + 1;
      pbVar9 = pbVar8;
    } while (pbVar8 != __s1);
    pcVar4 = pcVar4 + (long)(pbVar8 + ~(ulong)pbVar10);
  }
LAB_003763d4:
  pcVar7 = local_418;
  *pcVar4 = 0;
  iVar3 = strcmp(local_418,"_");
  if (iVar3 == 0) {
    *(char (*) [8])pcVar7 = s_unnamed_00470e40;
  }
  *(undefined8 *)in_x8 = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  __n = strlen(pcVar7);
  __dest = (void *)String::allocate(in_x8,__n);
  memcpy(__dest,pcVar7,__n);
  if ((local_418 != acStack_408) && (local_418 != (char *)0x0)) {
    operator_delete__(local_418);
  }
  return;
}


==================================================================

### FUNC 00376530 (128 bytes) name=cvAttrValue

undefined8 cvAttrValue(undefined8 *param_1,char *param_2)

{
  int iVar1;
  char *__s2;
  long lVar2;
  undefined8 *puVar3;
  
  while( true ) {
    if (param_1 == (undefined8 *)0x0) {
      return 0;
    }
    puVar3 = (undefined8 *)*param_1;
    if (puVar3 == (undefined8 *)0x0) break;
    lVar2 = 0;
    __s2 = (char *)*puVar3;
    while (__s2 != (char *)0x0) {
      iVar1 = strcmp(param_2,__s2);
      if (iVar1 == 0) {
        return puVar3[lVar2 + 1];
      }
      lVar2 = lVar2 + 2;
      __s2 = (char *)puVar3[lVar2];
    }
    param_1 = (undefined8 *)param_1[1];
  }
  return 0;
}


==================================================================

### FUNC 003765b0 (448 bytes) name=cvGetHashedKey

uint * cvGetHashedKey(long param_1,char *param_2,uint param_3,int param_4)

{
  byte *pbVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  char *pcVar5;
  uint uVar6;
  uint uVar7;
  long lVar8;
  uint *puVar9;
  ulong uVar10;
  undefined1 (*pauVar11) [16];
  long lVar12;
  undefined1 auVar13 [16];
  uint *local_8;
  
  if (param_1 == 0) {
    return (uint *)0x0;
  }
  lVar12 = *(long *)(param_1 + 0x28);
  if ((int)param_3 < 0) {
    uVar7 = (uint)*param_2;
    if (*param_2 == '\0') {
      uVar6 = 0;
      param_3 = 0;
      goto LAB_0037660c;
    }
    param_3 = 0;
    uVar6 = 0;
    pcVar5 = param_2;
    do {
      pcVar5 = pcVar5 + 1;
      uVar6 = uVar6 * 0x21 + (uVar7 & 0xff);
      uVar7 = (uint)*pcVar5;
      param_3 = param_3 + 1;
    } while (uVar7 != 0);
  }
  else {
    lVar8 = 0;
    uVar6 = 0;
    if (param_3 == 0) {
      uVar6 = 0;
      goto LAB_0037660c;
    }
    do {
      pbVar1 = (byte *)(param_2 + lVar8);
      lVar8 = lVar8 + 1;
      uVar6 = (uint)*pbVar1 + uVar6 * 0x21;
    } while ((int)lVar8 < (int)param_3);
  }
  uVar6 = uVar6 & 0x7fffffff;
LAB_0037660c:
  uVar7 = *(uint *)(lVar12 + 0x6c);
  if ((uVar7 - 1 & uVar7) == 0) {
    uVar7 = uVar6 & uVar7 - 1;
  }
  else {
    uVar2 = 0;
    if (uVar7 != 0) {
      uVar2 = uVar6 / uVar7;
    }
    uVar7 = uVar6 - uVar2 * uVar7;
  }
  uVar10 = -(ulong)(uVar7 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar7 << 3;
  puVar9 = *(uint **)(*(long *)(lVar12 + 0x70) + uVar10);
  if (puVar9 != (uint *)0x0) {
    do {
      if (((*puVar9 == uVar6) && (puVar9[2] == param_3)) &&
         (iVar3 = memcmp(*(void **)(puVar9 + 4),param_2,(long)(int)param_3), iVar3 == 0)) {
        return puVar9;
      }
      puVar9 = *(uint **)(puVar9 + 6);
    } while (puVar9 != (uint *)0x0);
  }
  if (param_4 == 0) {
    return (uint *)0x0;
  }
  local_8 = *(uint **)(lVar12 + 0x60);
  if (local_8 == (uint *)0x0) {
    cvSetAdd(lVar12,0,&local_8);
  }
  else {
    uVar7 = *local_8;
    iVar3 = *(int *)(lVar12 + 0x68);
    *(undefined8 *)(lVar12 + 0x60) = *(undefined8 *)(local_8 + 2);
    *local_8 = uVar7 & 0x3ffffff;
    *(int *)(lVar12 + 0x68) = iVar3 + 1;
  }
  puVar9 = local_8;
  uVar4 = *(undefined8 *)(lVar12 + 0x48);
  pauVar11 = (undefined1 (*) [16])(local_8 + 2);
  *local_8 = uVar6;
  auVar13 = cvMemStorageAllocString(uVar4,param_2,param_3);
  lVar12 = *(long *)(lVar12 + 0x70);
  *pauVar11 = auVar13;
  *(undefined8 *)(puVar9 + 6) = *(undefined8 *)(lVar12 + uVar10);
  *(uint **)(lVar12 + uVar10) = puVar9;
  return puVar9;
}


==================================================================

### FUNC 00376770 (896 bytes) name=cvGetFileNode

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint * cvGetFileNode(int *param_1,uint *param_2,uint *param_3,int param_4)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  char cVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  int iVar13;
  char *pcVar14;
  undefined8 *puVar15;
  uint *puVar16;
  ulong uVar17;
  int iVar18;
  long lVar19;
  uint *puVar20;
  uint *local_10;
  uint *local_8;
  
  if (param_1 == (int *)0x0) {
    return (uint *)0x0;
  }
  if (*param_1 != 0x4c4d4159) {
    local_10 = (uint *)0x0;
    local_8 = (uint *)0x0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x1f);
    cVar8 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
    uVar7 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
    uVar6 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
    uVar5 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
    uVar4 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
    *(undefined8 *)(pcVar14 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
    *(undefined4 *)(pcVar14 + 0x18) = uVar6;
    *(undefined2 *)(pcVar14 + 0x1c) = uVar7;
    pcVar14[0x1e] = cVar8;
    *(undefined8 *)pcVar14 = uVar4;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    cv::error(-5,(String *)&local_10,
              "CvFileNode* cvGetFileNode(CvFileStorage*, CvFileNode*, const CvStringHashNode*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x27a);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 == (uint *)0x0) {
    local_10 = param_3;
    local_8 = param_3;
    pcVar14 = (char *)cv::String::allocate((String *)&local_10,0x10);
    uVar4 = s_Null_key_element_00470e68._8_8_;
    *(undefined8 *)pcVar14 = s_Null_key_element_00470e68._0_8_;
    *(undefined8 *)(pcVar14 + 8) = uVar4;
    cv::error(-0x1b,(String *)&local_10,
              "CvFileNode* cvGetFileNode(CvFileStorage*, CvFileNode*, const CvStringHashNode*, int)"
              ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x27d);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_2 == (uint *)0x0) {
    iVar13 = 1;
  }
  else {
    if (*(long *)(param_1 + 0xc) == 0) {
      s_Invalid_pointer_to_file_storage_00470e48[0] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._0_8_;
      s_Invalid_pointer_to_file_storage_00470e48[1] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[2] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[3] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[4] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[5] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[6] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[7] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[8] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._8_8_;
      s_Invalid_pointer_to_file_storage_00470e48[9] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[10] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0xb] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0xc] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[0xd] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[0xe] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[0xf] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[0x10] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._16_8_;
      s_Invalid_pointer_to_file_storage_00470e48[0x11] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[0x12] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0x13] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0x14] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[0x15] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[0x16] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[0x17] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[0x18] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._24_4_;
      s_Invalid_pointer_to_file_storage_00470e48[0x19] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,1);
      s_Invalid_pointer_to_file_storage_00470e48[0x1a] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0x1b] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0x1c] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._28_2_;
      s_Invalid_pointer_to_file_storage_00470e48[0x1d] =
           SUB21(s_Invalid_pointer_to_file_storage_00470e48._28_2_,1);
      s_Null_key_element_00470e68[0] = (char)s_Null_key_element_00470e68._0_8_;
      s_Null_key_element_00470e68[1] = SUB81(s_Null_key_element_00470e68._0_8_,1);
      s_Null_key_element_00470e68[2] = SUB81(s_Null_key_element_00470e68._0_8_,2);
      s_Null_key_element_00470e68[3] = SUB81(s_Null_key_element_00470e68._0_8_,3);
      s_Null_key_element_00470e68[4] = SUB81(s_Null_key_element_00470e68._0_8_,4);
      s_Null_key_element_00470e68[5] = SUB81(s_Null_key_element_00470e68._0_8_,5);
      s_Null_key_element_00470e68[6] = SUB81(s_Null_key_element_00470e68._0_8_,6);
      s_Null_key_element_00470e68[7] = SUB81(s_Null_key_element_00470e68._0_8_,7);
      s_Null_key_element_00470e68[8] = (char)s_Null_key_element_00470e68._8_8_;
      s_Null_key_element_00470e68[9] = SUB81(s_Null_key_element_00470e68._8_8_,1);
      s_Null_key_element_00470e68[10] = SUB81(s_Null_key_element_00470e68._8_8_,2);
      s_Null_key_element_00470e68[0xb] = SUB81(s_Null_key_element_00470e68._8_8_,3);
      s_Null_key_element_00470e68[0xc] = SUB81(s_Null_key_element_00470e68._8_8_,4);
      s_Null_key_element_00470e68[0xd] = SUB81(s_Null_key_element_00470e68._8_8_,5);
      s_Null_key_element_00470e68[0xe] = SUB81(s_Null_key_element_00470e68._8_8_,6);
      s_Null_key_element_00470e68[0xf] = SUB81(s_Null_key_element_00470e68._8_8_,7);
      return (uint *)0x0;
    }
    iVar13 = *(int *)(*(long *)(param_1 + 0xc) + 0x28);
    if (iVar13 < 1) {
      s_Invalid_pointer_to_file_storage_00470e48[0] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._0_8_;
      s_Invalid_pointer_to_file_storage_00470e48[1] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[2] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[3] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[4] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[5] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[6] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[7] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[8] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._8_8_;
      s_Invalid_pointer_to_file_storage_00470e48[9] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[10] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0xb] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0xc] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[0xd] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[0xe] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[0xf] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[0x10] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._16_8_;
      s_Invalid_pointer_to_file_storage_00470e48[0x11] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,1);
      s_Invalid_pointer_to_file_storage_00470e48[0x12] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0x13] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0x14] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,4);
      s_Invalid_pointer_to_file_storage_00470e48[0x15] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,5);
      s_Invalid_pointer_to_file_storage_00470e48[0x16] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,6);
      s_Invalid_pointer_to_file_storage_00470e48[0x17] =
           SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,7);
      s_Invalid_pointer_to_file_storage_00470e48[0x18] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._24_4_;
      s_Invalid_pointer_to_file_storage_00470e48[0x19] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,1);
      s_Invalid_pointer_to_file_storage_00470e48[0x1a] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,2);
      s_Invalid_pointer_to_file_storage_00470e48[0x1b] =
           SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,3);
      s_Invalid_pointer_to_file_storage_00470e48[0x1c] =
           (char)s_Invalid_pointer_to_file_storage_00470e48._28_2_;
      s_Invalid_pointer_to_file_storage_00470e48[0x1d] =
           SUB21(s_Invalid_pointer_to_file_storage_00470e48._28_2_,1);
      s_Null_key_element_00470e68[0] = (char)s_Null_key_element_00470e68._0_8_;
      s_Null_key_element_00470e68[1] = SUB81(s_Null_key_element_00470e68._0_8_,1);
      s_Null_key_element_00470e68[2] = SUB81(s_Null_key_element_00470e68._0_8_,2);
      s_Null_key_element_00470e68[3] = SUB81(s_Null_key_element_00470e68._0_8_,3);
      s_Null_key_element_00470e68[4] = SUB81(s_Null_key_element_00470e68._0_8_,4);
      s_Null_key_element_00470e68[5] = SUB81(s_Null_key_element_00470e68._0_8_,5);
      s_Null_key_element_00470e68[6] = SUB81(s_Null_key_element_00470e68._0_8_,6);
      s_Null_key_element_00470e68[7] = SUB81(s_Null_key_element_00470e68._0_8_,7);
      s_Null_key_element_00470e68[8] = (char)s_Null_key_element_00470e68._8_8_;
      s_Null_key_element_00470e68[9] = SUB81(s_Null_key_element_00470e68._8_8_,1);
      s_Null_key_element_00470e68[10] = SUB81(s_Null_key_element_00470e68._8_8_,2);
      s_Null_key_element_00470e68[0xb] = SUB81(s_Null_key_element_00470e68._8_8_,3);
      s_Null_key_element_00470e68[0xc] = SUB81(s_Null_key_element_00470e68._8_8_,4);
      s_Null_key_element_00470e68[0xd] = SUB81(s_Null_key_element_00470e68._8_8_,5);
      s_Null_key_element_00470e68[0xe] = SUB81(s_Null_key_element_00470e68._8_8_,6);
      s_Null_key_element_00470e68[0xf] = SUB81(s_Null_key_element_00470e68._8_8_,7);
      return (uint *)0x0;
    }
  }
  puVar20 = (uint *)0x0;
  iVar18 = 0;
  do {
    if (param_2 == (uint *)0x0) {
      puVar16 = (uint *)cvGetSeqElem(*(undefined8 *)(param_1 + 0xc),iVar18);
      uVar1 = *puVar16;
    }
    else {
      uVar1 = *param_2;
      puVar16 = param_2;
    }
    uVar1 = uVar1 & 7;
    if (uVar1 != 6) {
      if (uVar1 == 5) {
        uVar1 = *(uint *)(*(long *)(puVar16 + 4) + 0x28);
      }
      if (uVar1 == 0) {
        s_Invalid_pointer_to_file_storage_00470e48[0] =
             (char)s_Invalid_pointer_to_file_storage_00470e48._0_8_;
        s_Invalid_pointer_to_file_storage_00470e48[1] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,1);
        s_Invalid_pointer_to_file_storage_00470e48[2] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,2);
        s_Invalid_pointer_to_file_storage_00470e48[3] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,3);
        s_Invalid_pointer_to_file_storage_00470e48[4] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,4);
        s_Invalid_pointer_to_file_storage_00470e48[5] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,5);
        s_Invalid_pointer_to_file_storage_00470e48[6] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,6);
        s_Invalid_pointer_to_file_storage_00470e48[7] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,7);
        s_Invalid_pointer_to_file_storage_00470e48[8] =
             (char)s_Invalid_pointer_to_file_storage_00470e48._8_8_;
        s_Invalid_pointer_to_file_storage_00470e48[9] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,1);
        s_Invalid_pointer_to_file_storage_00470e48[10] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,2);
        s_Invalid_pointer_to_file_storage_00470e48[0xb] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,3);
        s_Invalid_pointer_to_file_storage_00470e48[0xc] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,4);
        s_Invalid_pointer_to_file_storage_00470e48[0xd] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,5);
        s_Invalid_pointer_to_file_storage_00470e48[0xe] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,6);
        s_Invalid_pointer_to_file_storage_00470e48[0xf] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,7);
        s_Invalid_pointer_to_file_storage_00470e48[0x10] =
             (char)s_Invalid_pointer_to_file_storage_00470e48._16_8_;
        s_Invalid_pointer_to_file_storage_00470e48[0x11] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,1);
        s_Invalid_pointer_to_file_storage_00470e48[0x12] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,2);
        s_Invalid_pointer_to_file_storage_00470e48[0x13] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,3);
        s_Invalid_pointer_to_file_storage_00470e48[0x14] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,4);
        s_Invalid_pointer_to_file_storage_00470e48[0x15] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,5);
        s_Invalid_pointer_to_file_storage_00470e48[0x16] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,6);
        s_Invalid_pointer_to_file_storage_00470e48[0x17] =
             SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,7);
        s_Invalid_pointer_to_file_storage_00470e48[0x18] =
             (char)s_Invalid_pointer_to_file_storage_00470e48._24_4_;
        s_Invalid_pointer_to_file_storage_00470e48[0x19] =
             SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,1);
        s_Invalid_pointer_to_file_storage_00470e48[0x1a] =
             SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,2);
        s_Invalid_pointer_to_file_storage_00470e48[0x1b] =
             SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,3);
        s_Invalid_pointer_to_file_storage_00470e48[0x1c] =
             (char)s_Invalid_pointer_to_file_storage_00470e48._28_2_;
        s_Invalid_pointer_to_file_storage_00470e48[0x1d] =
             SUB21(s_Invalid_pointer_to_file_storage_00470e48._28_2_,1);
        s_Null_key_element_00470e68[0] = (char)s_Null_key_element_00470e68._0_8_;
        s_Null_key_element_00470e68[1] = SUB81(s_Null_key_element_00470e68._0_8_,1);
        s_Null_key_element_00470e68[2] = SUB81(s_Null_key_element_00470e68._0_8_,2);
        s_Null_key_element_00470e68[3] = SUB81(s_Null_key_element_00470e68._0_8_,3);
        s_Null_key_element_00470e68[4] = SUB81(s_Null_key_element_00470e68._0_8_,4);
        s_Null_key_element_00470e68[5] = SUB81(s_Null_key_element_00470e68._0_8_,5);
        s_Null_key_element_00470e68[6] = SUB81(s_Null_key_element_00470e68._0_8_,6);
        s_Null_key_element_00470e68[7] = SUB81(s_Null_key_element_00470e68._0_8_,7);
        s_Null_key_element_00470e68[8] = (char)s_Null_key_element_00470e68._8_8_;
        s_Null_key_element_00470e68[9] = SUB81(s_Null_key_element_00470e68._8_8_,1);
        s_Null_key_element_00470e68[10] = SUB81(s_Null_key_element_00470e68._8_8_,2);
        s_Null_key_element_00470e68[0xb] = SUB81(s_Null_key_element_00470e68._8_8_,3);
        s_Null_key_element_00470e68[0xc] = SUB81(s_Null_key_element_00470e68._8_8_,4);
        s_Null_key_element_00470e68[0xd] = SUB81(s_Null_key_element_00470e68._8_8_,5);
        s_Null_key_element_00470e68[0xe] = SUB81(s_Null_key_element_00470e68._8_8_,6);
        s_Null_key_element_00470e68[0xf] = SUB81(s_Null_key_element_00470e68._8_8_,7);
        return (uint *)0x0;
      }
      local_10 = (uint *)0x0;
      local_8 = (uint *)0x0;
      puVar15 = (undefined8 *)cv::String::allocate((String *)&local_10,0x31);
      uVar12 = DAT_00470ea8;
      uVar11 = DAT_00470ea0;
      uVar10 = DAT_00470e98;
      uVar9 = DAT_00470e90;
      uVar5 = DAT_00470e88;
      uVar4 = _DAT_00470e80;
      *(undefined1 *)(puVar15 + 6) = DAT_00470eb0;
      *puVar15 = uVar4;
      puVar15[1] = uVar5;
      puVar15[2] = uVar9;
      puVar15[3] = uVar10;
      puVar15[4] = uVar11;
      puVar15[5] = uVar12;
      cv::error(-2,(String *)&local_10,
                "CvFileNode* cvGetFileNode(CvFileStorage*, CvFileNode*, const CvStringHashNode*, int)"
                ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x294);
      cv::String::deallocate((String *)&local_10);
      return (uint *)0x0;
    }
    lVar19 = *(long *)(puVar16 + 4);
    uVar1 = *(uint *)(lVar19 + 0x6c);
    if ((uVar1 - 1 & uVar1) == 0) {
      uVar1 = uVar1 - 1 & *param_3;
    }
    else {
      uVar3 = 0;
      if (uVar1 != 0) {
        uVar3 = *param_3 / uVar1;
      }
      uVar1 = *param_3 - uVar3 * uVar1;
    }
    uVar17 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
    puVar16 = *(uint **)(*(long *)(lVar19 + 0x70) + uVar17);
    if (puVar16 == (uint *)0x0) {
LAB_003768fc:
      if ((iVar18 == iVar13 + -1) && (param_4 != 0)) {
        local_10 = *(uint **)(lVar19 + 0x60);
        if (local_10 == (uint *)0x0) {
          cvSetAdd(lVar19,0,&local_10);
        }
        else {
          uVar1 = *local_10;
          iVar2 = *(int *)(lVar19 + 0x68);
          *(undefined8 *)(lVar19 + 0x60) = *(undefined8 *)(local_10 + 2);
          *local_10 = uVar1 & 0x3ffffff;
          *(int *)(lVar19 + 0x68) = iVar2 + 1;
        }
        lVar19 = *(long *)(lVar19 + 0x70);
        *(uint **)(local_10 + 8) = param_3;
        *(undefined8 *)(local_10 + 10) = *(undefined8 *)(lVar19 + uVar17);
        *(uint **)(lVar19 + uVar17) = local_10;
        puVar20 = local_10;
      }
    }
    else {
      if (param_4 != 0) {
        do {
          while (*(uint **)(puVar16 + 8) != param_3) {
            puVar16 = *(uint **)(puVar16 + 10);
            if (puVar16 == (uint *)0x0) goto LAB_003768fc;
          }
          FUN_00371858(*(undefined8 *)(param_1 + 0x18),param_1[0x25],
                       "CvFileNode* cvGetFileNode(CvFileStorage*, CvFileNode*, const CvStringHashNode*, int)"
                       ,&LAB_00470eb8,0x2a8);
          puVar16 = *(uint **)(puVar16 + 10);
        } while (puVar16 != (uint *)0x0);
        goto LAB_003768fc;
      }
      do {
        if (*(uint **)(puVar16 + 8) == param_3) {
          s_Invalid_pointer_to_file_storage_00470e48[0] =
               (char)s_Invalid_pointer_to_file_storage_00470e48._0_8_;
          s_Invalid_pointer_to_file_storage_00470e48[1] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,1);
          s_Invalid_pointer_to_file_storage_00470e48[2] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,2);
          s_Invalid_pointer_to_file_storage_00470e48[3] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,3);
          s_Invalid_pointer_to_file_storage_00470e48[4] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,4);
          s_Invalid_pointer_to_file_storage_00470e48[5] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,5);
          s_Invalid_pointer_to_file_storage_00470e48[6] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,6);
          s_Invalid_pointer_to_file_storage_00470e48[7] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,7);
          s_Invalid_pointer_to_file_storage_00470e48[8] =
               (char)s_Invalid_pointer_to_file_storage_00470e48._8_8_;
          s_Invalid_pointer_to_file_storage_00470e48[9] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,1);
          s_Invalid_pointer_to_file_storage_00470e48[10] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,2);
          s_Invalid_pointer_to_file_storage_00470e48[0xb] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,3);
          s_Invalid_pointer_to_file_storage_00470e48[0xc] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,4);
          s_Invalid_pointer_to_file_storage_00470e48[0xd] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,5);
          s_Invalid_pointer_to_file_storage_00470e48[0xe] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,6);
          s_Invalid_pointer_to_file_storage_00470e48[0xf] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,7);
          s_Invalid_pointer_to_file_storage_00470e48[0x10] =
               (char)s_Invalid_pointer_to_file_storage_00470e48._16_8_;
          s_Invalid_pointer_to_file_storage_00470e48[0x11] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,1);
          s_Invalid_pointer_to_file_storage_00470e48[0x12] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,2);
          s_Invalid_pointer_to_file_storage_00470e48[0x13] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,3);
          s_Invalid_pointer_to_file_storage_00470e48[0x14] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,4);
          s_Invalid_pointer_to_file_storage_00470e48[0x15] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,5);
          s_Invalid_pointer_to_file_storage_00470e48[0x16] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,6);
          s_Invalid_pointer_to_file_storage_00470e48[0x17] =
               SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,7);
          s_Invalid_pointer_to_file_storage_00470e48[0x18] =
               (char)s_Invalid_pointer_to_file_storage_00470e48._24_4_;
          s_Invalid_pointer_to_file_storage_00470e48[0x19] =
               SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,1);
          s_Invalid_pointer_to_file_storage_00470e48[0x1a] =
               SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,2);
          s_Invalid_pointer_to_file_storage_00470e48[0x1b] =
               SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,3);
          s_Invalid_pointer_to_file_storage_00470e48[0x1c] =
               (char)s_Invalid_pointer_to_file_storage_00470e48._28_2_;
          s_Invalid_pointer_to_file_storage_00470e48[0x1d] =
               SUB21(s_Invalid_pointer_to_file_storage_00470e48._28_2_,1);
          s_Null_key_element_00470e68[0] = (char)s_Null_key_element_00470e68._0_8_;
          s_Null_key_element_00470e68[1] = SUB81(s_Null_key_element_00470e68._0_8_,1);
          s_Null_key_element_00470e68[2] = SUB81(s_Null_key_element_00470e68._0_8_,2);
          s_Null_key_element_00470e68[3] = SUB81(s_Null_key_element_00470e68._0_8_,3);
          s_Null_key_element_00470e68[4] = SUB81(s_Null_key_element_00470e68._0_8_,4);
          s_Null_key_element_00470e68[5] = SUB81(s_Null_key_element_00470e68._0_8_,5);
          s_Null_key_element_00470e68[6] = SUB81(s_Null_key_element_00470e68._0_8_,6);
          s_Null_key_element_00470e68[7] = SUB81(s_Null_key_element_00470e68._0_8_,7);
          s_Null_key_element_00470e68[8] = (char)s_Null_key_element_00470e68._8_8_;
          s_Null_key_element_00470e68[9] = SUB81(s_Null_key_element_00470e68._8_8_,1);
          s_Null_key_element_00470e68[10] = SUB81(s_Null_key_element_00470e68._8_8_,2);
          s_Null_key_element_00470e68[0xb] = SUB81(s_Null_key_element_00470e68._8_8_,3);
          s_Null_key_element_00470e68[0xc] = SUB81(s_Null_key_element_00470e68._8_8_,4);
          s_Null_key_element_00470e68[0xd] = SUB81(s_Null_key_element_00470e68._8_8_,5);
          s_Null_key_element_00470e68[0xe] = SUB81(s_Null_key_element_00470e68._8_8_,6);
          s_Null_key_element_00470e68[0xf] = SUB81(s_Null_key_element_00470e68._8_8_,7);
          return puVar16;
        }
        puVar16 = *(uint **)(puVar16 + 10);
      } while (puVar16 != (uint *)0x0);
    }
    iVar18 = iVar18 + 1;
    if (iVar13 <= iVar18) {
      return puVar20;
    }
  } while( true );
}


==================================================================

### FUNC 00376b2c (768 bytes) name=cvGetFileNodeByName

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long cvGetFileNodeByName(int *param_1,uint *param_2,char *param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  size_t sVar11;
  int iVar12;
  char *pcVar13;
  undefined8 *puVar14;
  uint uVar15;
  uint *puVar16;
  long lVar17;
  uint uVar18;
  size_t __n;
  uint uVar19;
  int iVar20;
  int iVar21;
  char *local_10;
  char *local_8;
  
  if (param_1 != (int *)0x0) {
    if (*param_1 != 0x4c4d4159) {
      local_10 = (char *)0x0;
      local_8 = (char *)0x0;
      pcVar13 = (char *)cv::String::allocate((String *)&local_10,0x1f);
      cVar6 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
      uVar5 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
      uVar4 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
      uVar3 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
      uVar2 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
      *(undefined8 *)(pcVar13 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
      *(undefined4 *)(pcVar13 + 0x18) = uVar4;
      *(undefined2 *)(pcVar13 + 0x1c) = uVar5;
      pcVar13[0x1e] = cVar6;
      *(undefined8 *)pcVar13 = uVar2;
      *(undefined8 *)(pcVar13 + 8) = uVar3;
      cv::error(-5,(String *)&local_10,
                "CvFileNode* cvGetFileNodeByName(const CvFileStorage*, const CvFileNode*, const char*)"
                ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x2c5);
      cv::String::deallocate((String *)&local_10);
    }
    if (param_3 == (char *)0x0) {
      local_10 = param_3;
      local_8 = param_3;
      pcVar13 = (char *)cv::String::allocate((String *)&local_10,0x11);
      uVar3 = s_Null_element_name_00470ec8._8_8_;
      uVar2 = s_Null_element_name_00470ec8._0_8_;
      pcVar13[0x10] = s_Null_element_name_00470ec8[0x10];
      *(undefined8 *)pcVar13 = uVar2;
      *(undefined8 *)(pcVar13 + 8) = uVar3;
      cv::error(-0x1b,(String *)&local_10,
                "CvFileNode* cvGetFileNodeByName(const CvFileStorage*, const CvFileNode*, const char*)"
                ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x2c8);
      cv::String::deallocate((String *)&local_10);
    }
    uVar15 = (uint)*param_3;
    if (*param_3 == '\0') {
      __n = 0;
      uVar19 = 0;
      uVar18 = 0;
    }
    else {
      uVar18 = 0;
      sVar11 = 1;
      do {
        __n = sVar11;
        uVar18 = uVar18 * 0x21 + (uVar15 & 0xff);
        uVar15 = (uint)param_3[__n];
        uVar19 = (uint)__n;
        sVar11 = __n + 1;
      } while (uVar15 != 0);
      uVar18 = uVar18 & 0x7fffffff;
    }
    iVar21 = 1;
    if ((param_2 != (uint *)0x0) ||
       ((*(long *)(param_1 + 0xc) != 0 &&
        (iVar21 = *(int *)(*(long *)(param_1 + 0xc) + 0x28), 0 < iVar21)))) {
      iVar20 = 0;
      do {
        if (param_2 == (uint *)0x0) {
          puVar16 = (uint *)cvGetSeqElem(*(undefined8 *)(param_1 + 0xc),iVar20);
          uVar15 = *puVar16;
        }
        else {
          uVar15 = *param_2;
          puVar16 = param_2;
        }
        uVar15 = uVar15 & 7;
        if (uVar15 != 6) {
          if (uVar15 == 5) {
            uVar15 = *(uint *)(*(long *)(puVar16 + 4) + 0x28);
          }
          if (uVar15 == 0) {
            s_Invalid_pointer_to_file_storage_00470e48[0] =
                 (char)s_Invalid_pointer_to_file_storage_00470e48._0_8_;
            s_Invalid_pointer_to_file_storage_00470e48[1] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,1);
            s_Invalid_pointer_to_file_storage_00470e48[2] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,2);
            s_Invalid_pointer_to_file_storage_00470e48[3] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,3);
            s_Invalid_pointer_to_file_storage_00470e48[4] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,4);
            s_Invalid_pointer_to_file_storage_00470e48[5] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,5);
            s_Invalid_pointer_to_file_storage_00470e48[6] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,6);
            s_Invalid_pointer_to_file_storage_00470e48[7] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._0_8_,7);
            s_Invalid_pointer_to_file_storage_00470e48[8] =
                 (char)s_Invalid_pointer_to_file_storage_00470e48._8_8_;
            s_Invalid_pointer_to_file_storage_00470e48[9] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,1);
            s_Invalid_pointer_to_file_storage_00470e48[10] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,2);
            s_Invalid_pointer_to_file_storage_00470e48[0xb] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,3);
            s_Invalid_pointer_to_file_storage_00470e48[0xc] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,4);
            s_Invalid_pointer_to_file_storage_00470e48[0xd] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,5);
            s_Invalid_pointer_to_file_storage_00470e48[0xe] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,6);
            s_Invalid_pointer_to_file_storage_00470e48[0xf] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._8_8_,7);
            s_Invalid_pointer_to_file_storage_00470e48[0x10] =
                 (char)s_Invalid_pointer_to_file_storage_00470e48._16_8_;
            s_Invalid_pointer_to_file_storage_00470e48[0x11] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,1);
            s_Invalid_pointer_to_file_storage_00470e48[0x12] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,2);
            s_Invalid_pointer_to_file_storage_00470e48[0x13] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,3);
            s_Invalid_pointer_to_file_storage_00470e48[0x14] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,4);
            s_Invalid_pointer_to_file_storage_00470e48[0x15] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,5);
            s_Invalid_pointer_to_file_storage_00470e48[0x16] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,6);
            s_Invalid_pointer_to_file_storage_00470e48[0x17] =
                 SUB81(s_Invalid_pointer_to_file_storage_00470e48._16_8_,7);
            s_Invalid_pointer_to_file_storage_00470e48[0x18] =
                 (char)s_Invalid_pointer_to_file_storage_00470e48._24_4_;
            s_Invalid_pointer_to_file_storage_00470e48[0x19] =
                 SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,1);
            s_Invalid_pointer_to_file_storage_00470e48[0x1a] =
                 SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,2);
            s_Invalid_pointer_to_file_storage_00470e48[0x1b] =
                 SUB41(s_Invalid_pointer_to_file_storage_00470e48._24_4_,3);
            s_Invalid_pointer_to_file_storage_00470e48[0x1c] =
                 (char)s_Invalid_pointer_to_file_storage_00470e48._28_2_;
            s_Invalid_pointer_to_file_storage_00470e48[0x1d] =
                 SUB21(s_Invalid_pointer_to_file_storage_00470e48._28_2_,1);
            s_Null_element_name_00470ec8[0] = (char)s_Null_element_name_00470ec8._0_8_;
            s_Null_element_name_00470ec8[1] = SUB81(s_Null_element_name_00470ec8._0_8_,1);
            s_Null_element_name_00470ec8[2] = SUB81(s_Null_element_name_00470ec8._0_8_,2);
            s_Null_element_name_00470ec8[3] = SUB81(s_Null_element_name_00470ec8._0_8_,3);
            s_Null_element_name_00470ec8[4] = SUB81(s_Null_element_name_00470ec8._0_8_,4);
            s_Null_element_name_00470ec8[5] = SUB81(s_Null_element_name_00470ec8._0_8_,5);
            s_Null_element_name_00470ec8[6] = SUB81(s_Null_element_name_00470ec8._0_8_,6);
            s_Null_element_name_00470ec8[7] = SUB81(s_Null_element_name_00470ec8._0_8_,7);
            s_Null_element_name_00470ec8[8] = (char)s_Null_element_name_00470ec8._8_8_;
            s_Null_element_name_00470ec8[9] = SUB81(s_Null_element_name_00470ec8._8_8_,1);
            s_Null_element_name_00470ec8[10] = SUB81(s_Null_element_name_00470ec8._8_8_,2);
            s_Null_element_name_00470ec8[0xb] = SUB81(s_Null_element_name_00470ec8._8_8_,3);
            s_Null_element_name_00470ec8[0xc] = SUB81(s_Null_element_name_00470ec8._8_8_,4);
            s_Null_element_name_00470ec8[0xd] = SUB81(s_Null_element_name_00470ec8._8_8_,5);
            s_Null_element_name_00470ec8[0xe] = SUB81(s_Null_element_name_00470ec8._8_8_,6);
            s_Null_element_name_00470ec8[0xf] = SUB81(s_Null_element_name_00470ec8._8_8_,7);
            return 0;
          }
          local_10 = (char *)0x0;
          local_8 = (char *)0x0;
          puVar14 = (undefined8 *)cv::String::allocate((String *)&local_10,0x31);
          uVar10 = DAT_00470ea8;
          uVar9 = DAT_00470ea0;
          uVar8 = DAT_00470e98;
          uVar7 = DAT_00470e90;
          uVar3 = DAT_00470e88;
          uVar2 = _DAT_00470e80;
          *(undefined1 *)(puVar14 + 6) = DAT_00470eb0;
          *puVar14 = uVar2;
          puVar14[1] = uVar3;
          puVar14[2] = uVar7;
          puVar14[3] = uVar8;
          puVar14[4] = uVar9;
          puVar14[5] = uVar10;
          cv::error(-2,(String *)&local_10,
                    "CvFileNode* cvGetFileNodeByName(const CvFileStorage*, const CvFileNode*, const char*)"
                    ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x2e3);
          cv::String::deallocate((String *)&local_10);
          return 0;
        }
        uVar15 = *(uint *)(*(long *)(puVar16 + 4) + 0x6c);
        if ((uVar15 - 1 & uVar15) == 0) {
          uVar15 = uVar18 & uVar15 - 1;
        }
        else {
          uVar1 = 0;
          if (uVar15 != 0) {
            uVar1 = uVar18 / uVar15;
          }
          uVar15 = uVar18 - uVar1 * uVar15;
        }
        for (lVar17 = *(long *)(*(long *)(*(long *)(puVar16 + 4) + 0x70) + (long)(int)uVar15 * 8);
            lVar17 != 0; lVar17 = *(long *)(lVar17 + 0x28)) {
          puVar16 = *(uint **)(lVar17 + 0x20);
          if (((*puVar16 == uVar18) && (puVar16[2] == uVar19)) &&
             (iVar12 = memcmp(*(void **)(puVar16 + 4),param_3,__n), iVar12 == 0)) {
            return lVar17;
          }
        }
        iVar20 = iVar20 + 1;
      } while (iVar20 < iVar21);
    }
  }
  return 0;
}


==================================================================

### FUNC 00376e68 (248 bytes) name=cvGetRootFileNode

undefined8 cvGetRootFileNode(int *param_1,uint param_2)

{
  undefined8 uVar1;
  undefined4 uVar2;
  undefined2 uVar3;
  char cVar4;
  char *pcVar5;
  long lVar6;
  undefined8 uVar7;
  int iVar8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar8 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00376f10;
    iVar8 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar5 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar4 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar7 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar5 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar5 + 0x18) = uVar2;
  *(undefined2 *)(pcVar5 + 0x1c) = uVar3;
  pcVar5[0x1e] = cVar4;
  *(undefined8 *)pcVar5 = uVar7;
  *(undefined8 *)(pcVar5 + 8) = uVar1;
  cv::error(iVar8,(String *)&local_10,"CvFileNode* cvGetRootFileNode(const CvFileStorage*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x304);
  cv::String::deallocate((String *)&local_10);
LAB_00376f10:
  lVar6 = *(long *)(param_1 + 0xc);
  uVar7 = 0;
  if (lVar6 != 0) {
    if (*(uint *)(lVar6 + 0x28) <= param_2) {
      return 0;
    }
    uVar7 = cvGetSeqElem(lVar6,param_2);
  }
  return uVar7;
}


==================================================================

### FUNC 00376f74 (352 bytes) name=cvStartWriteStruct

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvStartWriteStruct(int *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00377028;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,
            "void cvStartWriteStruct(CvFileStorage*, const char*, int, const char*, CvAttrList)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb75);
  cv::String::deallocate((String *)&local_10);
LAB_00377028:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,
              "void cvStartWriteStruct(CvFileStorage*, const char*, int, const char*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb75);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x4a))(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 003770fc (312 bytes) name=cvEndWriteStruct

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvEndWriteStruct(int *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_0037719c;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,"void cvEndWriteStruct(CvFileStorage*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb7d);
  cv::String::deallocate((String *)&local_10);
LAB_0037719c:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,"void cvEndWriteStruct(CvFileStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb7d);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x4c))(param_1);
  return;
}


==================================================================

### FUNC 0037725c (176 bytes) name=~FileStorage

/* cv::FileStorage::~FileStorage() */

void __thiscall cv::FileStorage::~FileStorage(FileStorage *this)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  void *pvVar4;
  long *plVar5;
  long lVar6;
  
  pvVar4 = *(void **)(this + 0x28);
  *(undefined **)this = PTR_vtable_00501a10 + 0x10;
  if (*(void **)(this + 0x30) != pvVar4) {
    do {
      cvEndWriteStruct(*(undefined8 *)(this + 0x10));
      lVar6 = *(long *)(this + 0x30);
      pvVar4 = *(void **)(this + 0x28);
      *(void **)(this + 0x30) = (void *)(lVar6 + -1);
    } while ((void *)(lVar6 + -1) != pvVar4);
  }
  if (pvVar4 != (void *)0x0) {
    operator_delete(pvVar4);
  }
  String::deallocate((String *)(this + 0x18));
  plVar5 = *(long **)(this + 8);
  if (plVar5 != (long *)0x0) {
    plVar1 = plVar5 + 1;
    do {
      lVar6 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*plVar5 + 0x10))();
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00377360 (32 bytes) name=~FileStorage

/* cv::FileStorage::~FileStorage() */

void __thiscall cv::FileStorage::~FileStorage(FileStorage *this)

{
  ~FileStorage(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00377380 (700 bytes) name=releaseAndGetString

/* cv::FileStorage::releaseAndGetString() */

void cv::FileStorage::releaseAndGetString(void)

{
  long *plVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  int iVar5;
  long *in_x0;
  long lVar6;
  undefined1 *puVar7;
  undefined1 *puVar8;
  long *plVar9;
  undefined1 *puVar10;
  int *piVar11;
  String *in_x8;
  long lVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  undefined1 *puVar15;
  long local_10;
  undefined8 local_8;
  
  *(undefined8 *)in_x8 = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  lVar12 = in_x0[2];
  if ((lVar12 == 0) || (*(long *)(lVar12 + 0x178) == 0)) goto LAB_00377508;
  String::deallocate(in_x8);
  if (*(char *)(lVar12 + 0x180) == '\0') {
    lVar6 = *(long *)(lVar12 + 0x178);
  }
  else {
    if (*(int *)(lVar12 + 8) == 0) {
LAB_0037743c:
      if (*(FILE **)(lVar12 + 0x68) == (FILE *)0x0) {
        if (*(long *)(lVar12 + 0x70) != 0) {
          gzclose();
        }
      }
      else {
        fclose(*(FILE **)(lVar12 + 0x68));
      }
      lVar6 = *(long *)(lVar12 + 0x178);
    }
    else {
      if (((*(long *)(lVar12 + 0x68) != 0) || (*(long *)(lVar12 + 0x70) != 0)) ||
         (*(long *)(lVar12 + 0x178) != 0)) {
        lVar6 = *(long *)(lVar12 + 0x38);
        if (lVar6 != 0) {
          while (0 < *(int *)(lVar6 + 0x28)) {
            cvEndWriteStruct(lVar12);
            lVar6 = *(long *)(lVar12 + 0x38);
          }
        }
        puVar10 = *(undefined1 **)(lVar12 + 0x78);
        lVar6 = *(long *)(lVar12 + 0x80);
        iVar5 = *(int *)(lVar12 + 0x58);
        if ((undefined1 *)(lVar6 + iVar5) < puVar10) {
          puVar10[1] = 0;
          *puVar10 = 10;
          FUN_0037127c(lVar12,*(undefined8 *)(lVar12 + 0x80));
          lVar6 = *(long *)(lVar12 + 0x80);
          iVar5 = *(int *)(lVar12 + 0x58);
          *(long *)(lVar12 + 0x78) = lVar6;
        }
        iVar2 = *(int *)(lVar12 + 0x40);
        if (iVar2 != iVar5) {
          if (iVar5 <= iVar2) {
            memset((void *)(lVar6 + iVar5),0x20,(long)(iVar2 - iVar5));
            lVar6 = *(long *)(lVar12 + 0x80);
          }
          *(int *)(lVar12 + 0x58) = iVar2;
          iVar5 = iVar2;
        }
        *(long *)(lVar12 + 0x78) = lVar6 + iVar5;
        if (*(int *)(lVar12 + 4) == 8) {
          FUN_0037127c(lVar12,&LAB_00470f08);
        }
        goto LAB_0037743c;
      }
      lVar6 = 0;
    }
    *(undefined8 *)(lVar12 + 0x68) = 0;
    *(undefined8 *)(lVar12 + 0x70) = 0;
    *(undefined8 *)(lVar12 + 0x160) = 0;
    *(undefined8 *)(lVar12 + 0x170) = 0;
    *(undefined1 *)(lVar12 + 0x180) = 0;
  }
  if (lVar6 != 0) {
    lVar12 = *(long *)(lVar6 + 0x28);
    puVar15 = *(undefined1 **)(lVar6 + 0x30);
    puVar13 = *(undefined1 **)(lVar6 + 0x10);
    puVar10 = *(undefined1 **)(lVar6 + 0x20);
    local_10 = 0;
    local_8 = 0;
    puVar7 = (undefined1 *)
             String::allocate((String *)&local_10,
                              (ulong)(puVar10 +
                                     (long)(puVar15 +
                                           ((((*(long *)(lVar6 + 0x48) - lVar12 >> 3) + -1) * 0x200
                                            - *(long *)(lVar6 + 0x38)) - (long)puVar13))));
    while (puVar15 != puVar13) {
      puVar14 = puVar13 + 1;
      puVar8 = puVar7 + 1;
      *puVar7 = *puVar13;
      puVar7 = puVar8;
      puVar13 = puVar14;
      if (puVar14 == puVar10) {
        puVar13 = *(undefined1 **)(lVar12 + 8);
        lVar12 = lVar12 + 8;
        puVar10 = puVar13 + 0x200;
      }
    }
    String::deallocate(in_x8);
    if (local_10 != 0) {
      piVar11 = (int *)(local_10 + -4);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar4) {
          *piVar11 = *piVar11 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    *(long *)in_x8 = local_10;
    *(undefined8 *)(in_x8 + 8) = local_8;
    String::deallocate((String *)&local_10);
  }
LAB_00377508:
  if (*(code **)(*in_x0 + 0x20) != release) {
    (**(code **)(*in_x0 + 0x20))();
    return;
  }
  plVar9 = (long *)in_x0[1];
  plVar1 = plVar9 + 1;
  if (plVar9 != (long *)0x0) {
    do {
      lVar12 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar12 == 1) {
      (**(code **)(*plVar9 + 0x10))();
    }
  }
  in_x0[6] = in_x0[5];
  in_x0[1] = 0;
  in_x0[2] = 0;
  *(undefined4 *)(in_x0 + 8) = 0;
  return;
}


==================================================================

### FUNC 00377660 (580 bytes) name=cvReleaseFileStorage

void cvReleaseFileStorage(undefined8 *param_1)

{
  int iVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  void *pvVar7;
  char *pcVar8;
  undefined1 *puVar9;
  int iVar10;
  void *__s;
  undefined8 *puVar11;
  long lVar13;
  long *plVar14;
  undefined8 *local_10;
  undefined8 *local_8;
  undefined8 *puVar12;
  
  if (param_1 == (undefined8 *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x23);
    cVar2 = s_NULL_double_pointer_to_file_stor_00470f20[0x22];
    uVar6 = s_NULL_double_pointer_to_file_stor_00470f20._24_8_;
    uVar5 = s_NULL_double_pointer_to_file_stor_00470f20._16_8_;
    uVar4 = s_NULL_double_pointer_to_file_stor_00470f20._8_8_;
    uVar3 = s_NULL_double_pointer_to_file_stor_00470f20._0_8_;
    *(undefined2 *)(pcVar8 + 0x20) = s_NULL_double_pointer_to_file_stor_00470f20._32_2_;
    pcVar8[0x22] = cVar2;
    *(undefined8 *)pcVar8 = uVar3;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    *(undefined8 *)(pcVar8 + 0x10) = uVar5;
    *(undefined8 *)(pcVar8 + 0x18) = uVar6;
    cv::error(-0x1b,(String *)&local_10,"void cvReleaseFileStorage(CvFileStorage**)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x226);
    cv::String::deallocate((String *)&local_10);
  }
  __s = (void *)*param_1;
  if (__s == (void *)0x0) {
    return;
  }
  cVar2 = *(char *)((long)__s + 0x180);
  *param_1 = 0;
  if (cVar2 == '\0') goto LAB_0037768c;
  if (*(int *)((long)__s + 8) == 0) {
LAB_00377794:
    if (*(FILE **)((long)__s + 0x68) == (FILE *)0x0) {
      if (*(long *)((long)__s + 0x70) != 0) {
        gzclose();
      }
    }
    else {
      fclose(*(FILE **)((long)__s + 0x68));
    }
  }
  else if (((*(long *)((long)__s + 0x68) != 0) || (*(long *)((long)__s + 0x70) != 0)) ||
          (*(long *)((long)__s + 0x178) != 0)) {
    if (*(long *)((long)__s + 0x38) != 0) {
      iVar10 = *(int *)(*(long *)((long)__s + 0x38) + 0x28);
      while (0 < iVar10) {
        cvEndWriteStruct(__s);
        iVar10 = *(int *)(*(long *)((long)__s + 0x38) + 0x28);
      }
    }
    puVar9 = *(undefined1 **)((long)__s + 0x78);
    lVar13 = *(long *)((long)__s + 0x80);
    iVar10 = *(int *)((long)__s + 0x58);
    if ((undefined1 *)(lVar13 + iVar10) < puVar9) {
      puVar9[1] = 0;
      *puVar9 = 10;
      FUN_0037127c(__s,*(undefined8 *)((long)__s + 0x80));
      lVar13 = *(long *)((long)__s + 0x80);
      iVar10 = *(int *)((long)__s + 0x58);
      *(long *)((long)__s + 0x78) = lVar13;
    }
    iVar1 = *(int *)((long)__s + 0x40);
    if (iVar10 != iVar1) {
      if (iVar10 < iVar1) {
        memset((void *)(lVar13 + iVar10),0x20,(long)(iVar1 - iVar10));
        lVar13 = *(long *)((long)__s + 0x80);
      }
      *(int *)((long)__s + 0x58) = iVar1;
    }
    *(long *)((long)__s + 0x78) = lVar13 + iVar1;
    if (*(int *)((long)__s + 4) == 8) {
      FUN_0037127c(__s,&LAB_00470f08);
    }
    goto LAB_00377794;
  }
  *(undefined8 *)((long)__s + 0x68) = 0;
  *(undefined8 *)((long)__s + 0x70) = 0;
  *(undefined8 *)((long)__s + 0x160) = 0;
  *(undefined8 *)((long)__s + 0x170) = 0;
  *(undefined1 *)((long)__s + 0x180) = 0;
LAB_0037768c:
  cvReleaseMemStorage((long)__s + 0x20);
  cv::cvFree_(*(void **)((long)__s + 0x80));
  *(undefined8 *)((long)__s + 0x80) = 0;
  cvReleaseMemStorage((long)__s + 0x10);
  plVar14 = *(long **)((long)__s + 0x178);
  if (plVar14 != (long *)0x0) {
    pvVar7 = (void *)*plVar14;
    lVar13 = plVar14[9];
    if (pvVar7 != (void *)0x0) {
      puVar11 = (undefined8 *)plVar14[5];
      if ((undefined8 *)plVar14[5] < (undefined8 *)(lVar13 + 8U)) {
        do {
          puVar12 = puVar11 + 1;
          operator_delete((void *)*puVar11);
          puVar11 = puVar12;
        } while (puVar12 < (undefined8 *)(lVar13 + 8U));
        pvVar7 = (void *)*plVar14;
      }
      operator_delete(pvVar7);
    }
    operator_delete(plVar14);
  }
  memset(__s,0,0x188);
  cv::cvFree_(__s);
  return;
}


==================================================================

### FUNC 003778b8 (336 bytes) name=cvWriteInt

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteInt(int *param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00377964;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,"void cvWriteInt(CvFileStorage*, const char*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb85);
  cv::String::deallocate((String *)&local_10);
LAB_00377964:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,"void cvWriteInt(CvFileStorage*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb85);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x4e))(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00377a30 (344 bytes) name=cvWriteReal

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteReal(undefined8 param_1,int *param_2,undefined8 param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_2 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_2 == 0x4c4d4159) goto LAB_00377ae0;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,"void cvWriteReal(CvFileStorage*, const char*, double)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb8d);
  cv::String::deallocate((String *)&local_10);
LAB_00377ae0:
  if (param_2[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,"void cvWriteReal(CvFileStorage*, const char*, double)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb8d);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_2 + 0x50))(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00377bb0 (352 bytes) name=cvWriteString

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteString(int *param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00377c64;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,
            "void cvWriteString(CvFileStorage*, const char*, const char*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb95);
  cv::String::deallocate((String *)&local_10);
LAB_00377c64:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,
              "void cvWriteString(CvFileStorage*, const char*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb95);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x52))(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 00377d38 (336 bytes) name=cvWriteComment

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteComment(int *param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00377de4;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,"void cvWriteComment(CvFileStorage*, const char*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb9d);
  cv::String::deallocate((String *)&local_10);
LAB_00377de4:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,"void cvWriteComment(CvFileStorage*, const char*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xb9d);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x54))(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00377eb0 (312 bytes) name=cvStartNextStream

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvStartNextStream(int *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  undefined8 *puVar9;
  int iVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00377f50;
    iVar10 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar10,(String *)&local_10,"void cvStartNextStream(CvFileStorage*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xba5);
  cv::String::deallocate((String *)&local_10);
LAB_00377f50:
  if (param_1[2] == 0) {
    local_10 = 0;
    local_8 = 0;
    puVar9 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
    *(undefined4 *)(puVar9 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar9 + 0x24) = uVar4;
    *puVar9 = uVar1;
    puVar9[1] = uVar2;
    puVar9[2] = uVar6;
    puVar9[3] = uVar7;
    cv::error(-2,(String *)&local_10,"void cvStartNextStream(CvFileStorage*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xba5);
    cv::String::deallocate((String *)&local_10);
  }
  (**(code **)(param_1 + 0x56))(param_1);
  return;
}


==================================================================

### FUNC 00378010 (3264 bytes) name=cvWriteRawData

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteRawData(int *param_1,char *param_2,int param_3,char *param_4)

{
  char cVar1;
  byte bVar2;
  ushort uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  char *pcVar13;
  size_t sVar14;
  long lVar15;
  char *pcVar16;
  undefined1 *puVar17;
  void *pvVar18;
  undefined8 *puVar19;
  void *__dest;
  uint uVar20;
  int iVar21;
  undefined1 *puVar22;
  undefined1 *puVar23;
  int iVar24;
  ulong uVar25;
  int iVar26;
  double *pdVar27;
  int iVar28;
  ulong uVar29;
  double __x;
  uint uVar30;
  float __x_00;
  int *piVar31;
  char *local_510;
  char *local_508;
  undefined4 local_500;
  undefined1 local_4fc;
  char local_4eb [227];
  int aiStack_408 [2];
  undefined8 local_400;
  undefined8 local_3f8 [127];
  
  local_500 = CONCAT31(local_500._1_3_,DAT_004700e0);
  memset((void *)((long)&local_500 + 1),0,0xff);
  if (param_1 == (int *)0x0) {
    iVar10 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00378104;
    iVar10 = -5;
  }
  local_400 = 0;
  local_3f8[0] = 0;
  pcVar13 = (char *)cv::String::allocate((String *)&local_400,0x1f);
  cVar1 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar7 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar6 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar5 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar13 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar13 + 0x18) = uVar6;
  *(undefined2 *)(pcVar13 + 0x1c) = uVar7;
  pcVar13[0x1e] = cVar1;
  *(undefined8 *)pcVar13 = uVar4;
  *(undefined8 *)(pcVar13 + 8) = uVar5;
  cv::error(iVar10,(String *)&local_400,
            "void cvWriteRawData(CvFileStorage*, const void*, int, const char*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc1d);
  cv::String::deallocate((String *)&local_400);
LAB_00378104:
  if (param_1[2] == 0) {
    local_400 = 0;
    local_3f8[0] = 0;
    puVar19 = (undefined8 *)cv::String::allocate((String *)&local_400,0x26);
    uVar7 = DAT_00470f04;
    uVar9 = DAT_00470ef8;
    uVar8 = DAT_00470ef0;
    uVar5 = _LAB_00470ee8;
    uVar4 = _DAT_00470ee0;
    *(undefined4 *)(puVar19 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar19 + 0x24) = uVar7;
    *puVar19 = uVar4;
    puVar19[1] = uVar5;
    puVar19[2] = uVar8;
    puVar19[3] = uVar9;
    cv::error(-2,(String *)&local_400,
              "void cvWriteRawData(CvFileStorage*, const void*, int, const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc1d);
    cv::String::deallocate((String *)&local_400);
  }
  if (param_3 < 0) {
    local_400 = 0;
    local_3f8[0] = 0;
    pcVar13 = (char *)cv::String::allocate((String *)&local_400,0x1b);
    cVar1 = s_Negative_number_of_elements_00470f48[0x1a];
    uVar7 = s_Negative_number_of_elements_00470f48._24_2_;
    uVar5 = s_Negative_number_of_elements_00470f48._8_8_;
    uVar4 = s_Negative_number_of_elements_00470f48._0_8_;
    *(undefined8 *)(pcVar13 + 0x10) = s_Negative_number_of_elements_00470f48._16_8_;
    *(undefined2 *)(pcVar13 + 0x18) = uVar7;
    pcVar13[0x1a] = cVar1;
    *(undefined8 *)pcVar13 = uVar4;
    *(undefined8 *)(pcVar13 + 8) = uVar5;
    cv::error(-0xd3,(String *)&local_400,
              "void cvWriteRawData(CvFileStorage*, const void*, int, const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc20);
    cv::String::deallocate((String *)&local_400);
  }
  iVar10 = 0;
  if (param_4 != (char *)0x0) {
    sVar14 = strlen(param_4);
    iVar10 = (int)sVar14;
    if (iVar10 == 0) {
      iVar10 = 0;
    }
    else {
      local_400 = local_400 & 0xffffffff00000000;
      if (iVar10 < 1) {
        iVar10 = 0;
      }
      else {
        uVar29 = 0;
        iVar26 = 0;
        do {
          uVar30 = (int)param_4[iVar26] - 0x30;
          iVar28 = (int)uVar29;
          if ((uVar30 & 0xff) < 10) {
            if ((byte)((param_4 + iVar26)[1] - 0x30U) < 10) {
              local_510 = (char *)0x0;
              lVar15 = strtol(param_4 + iVar26,&local_510,10);
              uVar30 = (uint)lVar15;
              iVar26 = ((int)local_510 - (int)param_4) + -1;
            }
            if ((int)uVar30 < 1) {
              local_510 = (char *)0x0;
              local_508 = (char *)0x0;
              pcVar13 = (char *)cv::String::allocate((String *)&local_510,0x1f);
              cVar1 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar7 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar6 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar5 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar4 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar13 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar13 + 0x18) = uVar6;
              *(undefined2 *)(pcVar13 + 0x1c) = uVar7;
              pcVar13[0x1e] = cVar1;
              *(undefined8 *)pcVar13 = uVar4;
              *(undefined8 *)(pcVar13 + 8) = uVar5;
              cv::error(-5,(String *)&local_510,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0)
              ;
              cv::String::deallocate((String *)&local_510);
            }
            *(uint *)((long)local_3f8 + (long)iVar28 * 4 + -8) = uVar30;
          }
          else {
            pcVar13 = strchr("ucwsifdr",(int)param_4[iVar26]);
            if (pcVar13 == (char *)0x0) {
              local_510 = pcVar13;
              local_508 = pcVar13;
              pcVar16 = (char *)cv::String::allocate((String *)&local_510,0x1f);
              cVar1 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar7 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar6 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar5 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar4 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar16 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar16 + 0x18) = uVar6;
              *(undefined2 *)(pcVar16 + 0x1c) = uVar7;
              pcVar16[0x1e] = cVar1;
              *(undefined8 *)pcVar16 = uVar4;
              *(undefined8 *)(pcVar16 + 8) = uVar5;
              cv::error(-5,(String *)&local_510,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8)
              ;
              cv::String::deallocate((String *)&local_510);
            }
            uVar25 = -(uVar29 >> 0x1f) & 0xfffffffc00000000 | uVar29 << 2;
            piVar31 = (int *)((long)local_3f8 + (uVar25 - 8));
            if (*(int *)((long)local_3f8 + (uVar25 - 8)) == 0) {
              *(undefined4 *)((long)local_3f8 + (uVar25 - 8)) = 1;
            }
            iVar11 = (int)pcVar13 + -0x472f10;
            *(int *)((long)local_3f8 + (uVar25 - 4)) = iVar11;
            if (iVar28 == 0) {
              uVar29 = 2;
              *(undefined4 *)((long)local_3f8 + uVar25) = 0;
            }
            else if (iVar11 == *(int *)((long)aiStack_408 + uVar25 + 4)) {
              *(int *)((long)aiStack_408 + uVar25) = *(int *)((long)aiStack_408 + uVar25) + *piVar31
              ;
              *piVar31 = 0;
            }
            else {
              uVar30 = iVar28 + 2;
              uVar29 = (ulong)uVar30;
              if ((int)uVar30 < 0x100) {
                lVar15 = (long)(int)uVar30 * 4;
              }
              else {
                local_510 = (char *)0x0;
                local_508 = (char *)0x0;
                pcVar13 = (char *)cv::String::allocate((String *)&local_510,0x20);
                uVar8 = s_Too_long_data_type_specification_00470870._24_8_;
                uVar5 = s_Too_long_data_type_specification_00470870._16_8_;
                uVar4 = s_Too_long_data_type_specification_00470870._8_8_;
                *(undefined8 *)pcVar13 = s_Too_long_data_type_specification_00470870._0_8_;
                *(undefined8 *)(pcVar13 + 8) = uVar4;
                *(undefined8 *)(pcVar13 + 0x10) = uVar5;
                *(undefined8 *)(pcVar13 + 0x18) = uVar8;
                cv::error(-5,(String *)&local_510,"int icvDecodeFormat(const char*, int*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0xbe2);
                cv::String::deallocate((String *)&local_510);
                lVar15 = (long)(int)uVar30 << 2;
              }
              *(undefined4 *)((long)local_3f8 + lVar15 + -8) = 0;
            }
          }
          iVar26 = iVar26 + 1;
        } while (iVar26 < iVar10);
        iVar10 = (int)uVar29 >> 1;
      }
    }
  }
  if (param_3 != 0) {
    if (param_2 == (char *)0x0) {
      local_510 = param_2;
      local_508 = param_2;
      pcVar13 = (char *)cv::String::allocate((String *)&local_510,0x11);
      uVar5 = s_Null_data_pointer_00470f68._8_8_;
      uVar4 = s_Null_data_pointer_00470f68._0_8_;
      pcVar13[0x10] = s_Null_data_pointer_00470f68[0x10];
      *(undefined8 *)pcVar13 = uVar4;
      *(undefined8 *)(pcVar13 + 8) = uVar5;
      cv::error(-0x1b,(String *)&local_510,
                "void cvWriteRawData(CvFileStorage*, const void*, int, const char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc28);
      cv::String::deallocate((String *)&local_510);
    }
    if (iVar10 == 1) {
      local_400 = CONCAT44(local_400._4_4_,(int)local_400 * param_3);
      param_3 = 1;
    }
    iVar26 = 0;
    do {
      piVar31 = (int *)&local_400;
      if (0 < iVar10) {
        do {
          uVar30 = piVar31[1];
          iVar28 = *piVar31;
          iVar11 = (uVar30 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar30 & 7) << 1)) & 3);
          pdVar27 = (double *)(param_2 + (int)((iVar26 + iVar11) - 1U & -iVar11));
          if (0 < iVar28) {
            iVar26 = 0;
            do {
              pcVar13 = (char *)&local_500;
              switch(uVar30) {
              case 0:
                uVar20 = (uint)*(byte *)pdVar27;
                pcVar13 = local_4eb + 2;
                do {
                  cVar1 = (char)uVar20;
                  uVar20 = uVar20 / 10;
                  pcVar13 = pcVar13 + -1;
                  *pcVar13 = cVar1 + '0' + ((char)uVar20 + (char)(uVar20 << 2)) * -2;
                } while (uVar20 != 0);
                goto LAB_00378444;
              case 1:
                bVar2 = *(byte *)pdVar27;
                uVar29 = (long)(char)bVar2 >> 0x3f;
                uVar29 = ((long)(char)bVar2 ^ uVar29) - uVar29;
                pcVar13 = local_4eb + 2;
                do {
                  pcVar16 = pcVar13;
                  cVar1 = (char)uVar29;
                  uVar29 = (uVar29 & 0xffffffff) / 10;
                  pcVar13 = pcVar16 + -1;
                  *pcVar13 = cVar1 + '0' + (char)uVar29 * -10;
                } while ((int)uVar29 != 0);
                if ((char)bVar2 < '\0') {
                  pcVar13 = pcVar16 + -2;
                  pcVar16[-2] = '-';
                }
LAB_00378444:
                local_4eb[2] = 0;
                pdVar27 = (double *)((long)pdVar27 + 1);
                break;
              case 2:
                uVar20 = (uint)*(ushort *)pdVar27;
                pcVar13 = local_4eb + 2;
                local_4eb[2] = 0;
                do {
                  cVar1 = (char)uVar20;
                  uVar20 = uVar20 / 10;
                  pcVar13 = pcVar13 + -1;
                  *pcVar13 = cVar1 + '0' + ((char)uVar20 + (char)(uVar20 << 2)) * -2;
                } while (uVar20 != 0);
                pdVar27 = (double *)((long)pdVar27 + 2);
                break;
              case 3:
                uVar3 = *(ushort *)pdVar27;
                uVar29 = (long)(short)uVar3 >> 0x3f;
                uVar29 = ((long)(short)uVar3 ^ uVar29) - uVar29;
                local_4eb[2] = 0;
                pcVar13 = local_4eb + 2;
                do {
                  pcVar16 = pcVar13;
                  cVar1 = (char)uVar29;
                  uVar29 = (uVar29 & 0xffffffff) / 10;
                  pcVar13 = pcVar16 + -1;
                  *pcVar13 = cVar1 + '0' + (char)uVar29 * -10;
                } while ((int)uVar29 != 0);
                if ((short)uVar3 < 0) {
                  pcVar13 = pcVar16 + -2;
                  pcVar16[-2] = '-';
                  pdVar27 = (double *)((long)pdVar27 + 2);
                }
                else {
                  pdVar27 = (double *)((long)pdVar27 + 2);
                }
                break;
              case 4:
                iVar11 = *(int *)pdVar27;
                uVar29 = (long)iVar11 >> 0x3f;
                local_4eb[2] = 0;
                uVar29 = ((long)iVar11 ^ uVar29) - uVar29;
                pcVar13 = local_4eb + 2;
                do {
                  pcVar16 = pcVar13;
                  cVar1 = (char)uVar29;
                  uVar29 = (uVar29 & 0xffffffff) / 10;
                  pcVar13 = pcVar16 + -1;
                  *pcVar13 = cVar1 + '0' + (char)uVar29 * -10;
                } while ((int)uVar29 != 0);
                if (iVar11 < 0) {
                  pcVar13 = pcVar16 + -2;
                  pcVar16[-2] = '-';
                  pdVar27 = (double *)((long)pdVar27 + 4);
                }
                else {
                  pdVar27 = (double *)((long)pdVar27 + 4);
                }
                break;
              case 5:
                __x_00 = *(float *)pdVar27;
                if (((uint)__x_00 & 0x7f800000) == 0x7f800000) {
                  if (ABS(__x_00) == INFINITY) {
                    pcVar16 = "-.Inf";
                    if (-1 < (int)__x_00) {
                      pcVar16 = ".Inf";
                    }
                    strcpy((char *)&local_500,pcVar16);
                  }
                  else {
                    local_500 = DAT_00470bc8;
                    local_4fc = DAT_00470bcc;
                  }
                }
                else {
                  lVar15 = lrintf(__x_00);
                  if (__x_00 == (float)(int)lVar15) {
                    sprintf((char *)&local_500,"%d.",lVar15);
                  }
                  else {
                    sprintf((char *)&local_500,"%.8e",(double)__x_00,lVar15);
                    pcVar16 = (char *)&local_500;
                    cVar1 = (char)local_500;
                    if (((char)local_500 - 0x2bU & 0xfd) != 0) goto LAB_003786a4;
                    do {
                      pcVar16 = pcVar16 + 1;
                      cVar1 = *pcVar16;
LAB_003786a4:
                    } while (((int)cVar1 - 0x30U & 0xff) < 10);
                    if (cVar1 == 0x2c) {
                      *pcVar16 = '.';
                    }
                  }
                }
                iVar11 = param_1[1];
                pdVar27 = (double *)((long)pdVar27 + 4);
                goto joined_r0x003786cc;
              case 6:
                __x = *pdVar27;
                uVar20 = (uint)((ulong)__x >> 0x20);
                if ((uVar20 & 0x7ff00000) == 0x7ff00000) {
                  uVar20 = uVar20 & 0x7fffffff;
                  if (SUB84(__x,0) != 0) {
                    uVar20 = uVar20 + 1;
                  }
                  if (uVar20 < 0x7ff00001) {
                    pcVar16 = "-.Inf";
                    if (-1 < (long)__x) {
                      pcVar16 = ".Inf";
                    }
                    strcpy((char *)&local_500,pcVar16);
                  }
                  else {
                    local_500 = DAT_00470bc8;
                    local_4fc = DAT_00470bcc;
                  }
                }
                else {
                  lVar15 = lrint(__x);
                  if (__x == (double)(int)lVar15) {
                    sprintf((char *)&local_500,"%d.",lVar15);
                  }
                  else {
                    sprintf((char *)&local_500,"%.16e",__x,lVar15);
                    pcVar16 = (char *)&local_500;
                    cVar1 = (char)local_500;
                    if (((char)local_500 - 0x2bU & 0xfd) != 0) goto LAB_0037861c;
                    do {
                      pcVar16 = pcVar16 + 1;
                      cVar1 = *pcVar16;
LAB_0037861c:
                    } while (((int)cVar1 - 0x30U & 0xff) < 10);
                    if (cVar1 == 0x2c) {
                      *pcVar16 = '.';
                    }
                  }
                }
                pdVar27 = pdVar27 + 1;
                break;
              case 7:
                iVar11 = SUB84(*pdVar27,0);
                uVar29 = (long)iVar11 >> 0x3f;
                local_4eb[2] = 0;
                uVar29 = ((long)iVar11 ^ uVar29) - uVar29;
                pcVar13 = local_4eb + 2;
                do {
                  pcVar16 = pcVar13;
                  cVar1 = (char)uVar29;
                  uVar29 = (uVar29 & 0xffffffff) / 10;
                  pcVar13 = pcVar16 + -1;
                  *pcVar13 = cVar1 + '0' + (char)uVar29 * -10;
                } while ((int)uVar29 != 0);
                if (iVar11 < 0) {
                  pcVar16[-2] = '-';
                  pdVar27 = pdVar27 + 1;
                  pcVar13 = pcVar16 + -2;
                }
                else {
                  pdVar27 = pdVar27 + 1;
                }
                break;
              default:
                goto switchD_00378264_default;
              }
              iVar11 = param_1[1];
joined_r0x003786cc:
              if (iVar11 == 8) {
                sVar14 = strlen(pcVar13);
                iVar11 = (int)sVar14;
                if ((param_1[0x11] & 7U) == 6) {
                  sVar14 = (size_t)iVar11;
                  FUN_00371a64(param_1,0,1,0,0);
                  pvVar18 = *(void **)(param_1 + 0x1e);
                  uVar29 = (long)pvVar18 + sVar14;
                  if (*(ulong *)(param_1 + 0x22) <= uVar29) {
                    iVar21 = (int)pvVar18 - (int)*(long *)(param_1 + 0x20);
                    iVar12 = (int)((long)((*(ulong *)(param_1 + 0x22) - *(long *)(param_1 + 0x20)) *
                                         3) / 2);
                    iVar24 = iVar21 + iVar11;
                    if (iVar21 + iVar11 < iVar12) {
                      iVar24 = iVar12;
                    }
                    __dest = (void *)cv::cvAlloc((long)(iVar24 + 0x100));
                    *(long *)(param_1 + 0x1e) =
                         (long)__dest +
                         (*(long *)(param_1 + 0x1e) - (long)*(void **)(param_1 + 0x20));
                    if (0 < iVar21) {
                      memcpy(__dest,*(void **)(param_1 + 0x20),(long)iVar21);
                    }
                    pvVar18 = (void *)((long)__dest + (long)iVar21);
                    *(void **)(param_1 + 0x20) = __dest;
                    uVar29 = (long)pvVar18 + sVar14;
                    *(long *)(param_1 + 0x22) = (long)__dest + (long)iVar24;
                  }
                  memcpy(pvVar18,pcVar13,sVar14);
                  *(ulong *)(param_1 + 0x1e) = uVar29;
                  FUN_00371a64(param_1,0,2,0,0);
                }
                else {
                  puVar22 = *(undefined1 **)(param_1 + 0x1e);
                  puVar17 = *(undefined1 **)(param_1 + 0x20);
                  param_1[0x11] = 5;
                  iVar24 = iVar11 + ((int)puVar22 - (int)puVar17);
                  if ((param_1[0x24] < iVar24) && (10 < iVar24 - param_1[0x10])) {
LAB_00378720:
                    iVar24 = param_1[0x16];
                    if (puVar17 + iVar24 < puVar22) {
                      puVar22[1] = 0;
                      *puVar22 = 10;
                      FUN_0037127c(param_1,*(undefined8 *)(param_1 + 0x20));
                      puVar17 = *(undefined1 **)(param_1 + 0x20);
                      iVar24 = param_1[0x16];
                      *(undefined1 **)(param_1 + 0x1e) = puVar17;
                    }
                    iVar12 = param_1[0x10];
                    if (iVar12 != iVar24) {
                      if (iVar24 <= iVar12) {
                        memset(puVar17 + iVar24,0x20,(long)(iVar12 - iVar24));
                        puVar17 = *(undefined1 **)(param_1 + 0x20);
                      }
                      param_1[0x16] = iVar12;
                      iVar24 = iVar12;
                    }
                    *(undefined1 **)(param_1 + 0x1e) = puVar17 + iVar24;
                    puVar23 = puVar17 + iVar24;
                  }
                  else {
                    puVar23 = puVar22;
                    if (puVar17 < puVar22) {
                      if (puVar22[-1] == '>') goto LAB_00378720;
                      if (puVar17 + param_1[0x10] < puVar22) {
                        *puVar22 = 0x20;
                        puVar23 = puVar22 + 1;
                      }
                    }
                    else if ((puVar17 + param_1[0x10] < puVar22) && (puVar22[-1] != '>')) {
                      puVar23 = puVar22 + 1;
                      *puVar22 = 0x20;
                    }
                  }
                  pvVar18 = memcpy(puVar23,pcVar13,(long)iVar11);
                  *(long *)(param_1 + 0x1e) = (long)pvVar18 + (long)iVar11;
                }
              }
              else {
                FUN_00374f88(param_1,0,pcVar13);
              }
              iVar26 = iVar26 + 1;
            } while (iVar26 != iVar28);
          }
          piVar31 = piVar31 + 2;
          iVar26 = (int)pdVar27 - (int)param_2;
        } while (piVar31 != (int *)((long)&local_400 + ((ulong)(iVar10 - 1) + 1) * 2 * 4));
      }
      param_3 = param_3 + -1;
    } while (param_3 != 0);
  }
switchD_00378264_default:
  return;
}


==================================================================

### FUNC 00378d5c (412 bytes) name=FUN_00378d5c

void FUN_00378d5c(undefined8 param_1,undefined8 param_2,long param_3)

{
  undefined4 uVar1;
  int iVar2;
  ulong uVar3;
  char *pcVar4;
  long local_2e8;
  char cStack_2e0;
  char cStack_2df;
  char local_2de;
  undefined1 auStack_2d0 [128];
  undefined1 auStack_250 [288];
  undefined1 auStack_130 [8];
  undefined4 local_128;
  undefined4 local_124;
  undefined8 local_120;
  
  local_128 = 0;
  local_124 = 0;
  local_2e8 = param_3;
  cvStartWriteStruct(param_1,param_2,6,"opencv-nd-matrix",0,0);
  uVar1 = cvGetDims(local_2e8,auStack_2d0);
  cvStartWriteStruct(param_1,"sizes",0xd,0,0,0);
  cvWriteRawData(param_1,auStack_2d0,uVar1,&DAT_00470fa8);
  cvEndWriteStruct(param_1);
  uVar3 = cvGetElemType(local_2e8);
  sprintf(&cStack_2e0,"%d%c",(ulong)(((uint)(uVar3 >> 3) & 0x1ff) + 1),(long)"ucwsifdr"[uVar3 & 7]);
  pcVar4 = &cStack_2e0;
  if ((local_2de == '\0') && (cStack_2e0 == '1')) {
    pcVar4 = &cStack_2df;
  }
  cvWriteString(param_1,&DAT_00470fb8,pcVar4,0);
  cvStartWriteStruct(param_1,"data",0xd,0,0,0);
  if ((0 < *(int *)(local_2e8 + 0x20)) && (*(long *)(local_2e8 + 0x18) != 0)) {
    cvInitNArrayIterator(1,&local_2e8,0,auStack_250,auStack_130,0);
    do {
      cvWriteRawData(param_1,local_120,local_128,&cStack_2e0);
      iVar2 = cvNextNArraySlice(auStack_130);
    } while (iVar2 != 0);
  }
  cvEndWriteStruct(param_1);
  cvEndWriteStruct(param_1);
  return;
}


==================================================================

### FUNC 00378ef8 (364 bytes) name=FUN_00378ef8

void FUN_00378ef8(undefined8 param_1,undefined8 param_2,uint *param_3)

{
  long lVar1;
  ulong uVar2;
  long lVar3;
  char *pcVar4;
  long lVar5;
  int iVar6;
  ulong uVar7;
  char local_10;
  char cStack_f;
  char local_e;
  
  cvStartWriteStruct(param_1,param_2,6,"opencv-matrix",0,0);
  cvWriteInt(param_1,"rows",param_3[8]);
  cvWriteInt(param_1,"cols",param_3[9]);
  sprintf(&local_10,"%d%c",(ulong)((*param_3 >> 3 & 0x1ff) + 1),
          (long)"ucwsifdr"[(ulong)*param_3 & 7]);
  pcVar4 = &local_10;
  if ((local_e == '\0') && (local_10 == '1')) {
    pcVar4 = &cStack_f;
  }
  cvWriteString(param_1,&DAT_00470fb8,pcVar4,0);
  cvStartWriteStruct(param_1,"data",0xd,0,0,0);
  uVar2 = cvGetSize(param_3);
  iVar6 = (int)(uVar2 >> 0x20);
  uVar7 = uVar2 & 0xffffffff;
  if (((0 < iVar6) && (0 < (int)uVar2)) && (lVar3 = *(long *)(param_3 + 6), lVar3 != 0)) {
    if ((*param_3 >> 0xe & 1) != 0) {
      uVar7 = (ulong)(uint)(iVar6 * (int)uVar2);
      iVar6 = 1;
    }
    lVar5 = 0;
    while( true ) {
      lVar1 = lVar5 * (int)param_3[1];
      lVar5 = lVar5 + 1;
      cvWriteRawData(param_1,lVar3 + lVar1,uVar7,&local_10);
      if (iVar6 <= (int)lVar5) break;
      lVar3 = *(long *)(param_3 + 6);
    }
  }
  cvEndWriteStruct(param_1);
  cvEndWriteStruct(param_1);
  return;
}


==================================================================

### FUNC 00379064 (828 bytes) name=FUN_00379064

void FUN_00379064(undefined8 param_1,undefined8 param_2,long param_3)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  int iVar9;
  int iVar10;
  String *this;
  int iVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  this = (String *)&local_10;
  if (*(int *)(param_3 + 0x1c) == 1) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)cv::String::allocate(this,0x30);
    uVar7 = s_Images_with_planar_data_layout_a_00471008._40_8_;
    uVar6 = s_Images_with_planar_data_layout_a_00471008._32_8_;
    uVar5 = s_Images_with_planar_data_layout_a_00471008._24_8_;
    uVar4 = s_Images_with_planar_data_layout_a_00471008._16_8_;
    uVar3 = s_Images_with_planar_data_layout_a_00471008._8_8_;
    *(undefined8 *)pcVar8 = s_Images_with_planar_data_layout_a_00471008._0_8_;
    *(undefined8 *)(pcVar8 + 8) = uVar3;
    *(undefined8 *)(pcVar8 + 0x10) = uVar4;
    *(undefined8 *)(pcVar8 + 0x18) = uVar5;
    *(undefined8 *)(pcVar8 + 0x20) = uVar6;
    *(undefined8 *)(pcVar8 + 0x28) = uVar7;
    cv::error(-0xd2,this,"void icvWriteImage(CvFileStorage*, const char*, const void*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf22);
    cv::String::deallocate(this);
  }
  cvStartWriteStruct(param_1,param_2,6,"opencv-image",0,0);
  cvWriteInt(param_1,"width",*(undefined4 *)(param_3 + 0x28));
  cvWriteInt(param_1,"height",*(undefined4 *)(param_3 + 0x2c));
  if (*(int *)(param_3 + 0x20) == 0) {
    cvWriteString(param_1,"origin","top-left",0);
    if (*(int *)(param_3 + 0x1c) != 1) goto LAB_0037910c;
LAB_00379320:
    pcVar8 = "planar";
  }
  else {
    cvWriteString(param_1,"origin","bottom-left",0);
    if (*(int *)(param_3 + 0x1c) == 1) goto LAB_00379320;
LAB_0037910c:
    pcVar8 = "interleaved";
  }
  cvWriteString(param_1,"layout",pcVar8,0);
  if (*(long *)(param_3 + 0x30) != 0) {
    cvStartWriteStruct(param_1,&DAT_00471070,0xe,0,0,0);
    cvWriteInt(param_1,"x",*(undefined4 *)(*(long *)(param_3 + 0x30) + 4));
    cvWriteInt(param_1,&DAT_00452188,*(undefined4 *)(*(long *)(param_3 + 0x30) + 8));
    cvWriteInt(param_1,"width",*(undefined4 *)(*(long *)(param_3 + 0x30) + 0xc));
    cvWriteInt(param_1,"height",*(undefined4 *)(*(long *)(param_3 + 0x30) + 0x10));
    cvWriteInt(param_1,&DAT_00471078,**(undefined4 **)(param_3 + 0x30));
    cvEndWriteStruct(param_1);
  }
  iVar9 = 0x14;
  if (-1 < (int)*(uint *)(param_3 + 0x10)) {
    iVar9 = 0;
  }
  uVar1 = 0x43160520 >> (iVar9 + ((*(uint *)(param_3 + 0x10) & 0xf0) >> 2) & 0x1f);
  sprintf((char *)this,"%d%c",(ulong)*(uint *)(param_3 + 8),(long)"ucwsifdr"[(ulong)uVar1 & 0xf]);
  if ((local_10._2_1_ == '\0') && (local_10._0_1_ == (String)0x31)) {
    this = (String *)((long)&local_10 + 1);
  }
  cvWriteString(param_1,&DAT_00470fb8,this,0);
  iVar9 = *(int *)(param_3 + 0x28);
  iVar11 = *(int *)(param_3 + 0x2c);
  if (iVar9 * *(int *)(param_3 + 8) *
      ((uVar1 >> 3 & 1) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3)) ==
      *(int *)(param_3 + 0x60)) {
    iVar9 = iVar9 * iVar11;
    cvStartWriteStruct(param_1,"data",0xd,0,0,0);
    iVar11 = 1;
  }
  else {
    cvStartWriteStruct(param_1,"data",0xd,0,0,0);
    if (iVar11 < 1) goto LAB_003792d0;
  }
  iVar10 = 0;
  do {
    iVar2 = iVar10 * *(int *)(param_3 + 0x60);
    iVar10 = iVar10 + 1;
    cvWriteRawData(param_1,*(long *)(param_3 + 0x58) + (long)iVar2,iVar9,this);
  } while (iVar10 < iVar11);
LAB_003792d0:
  cvEndWriteStruct(param_1);
  cvEndWriteStruct(param_1);
  return;
}


==================================================================

### FUNC 003793b4 (844 bytes) name=FUN_003793b4

void FUN_003793b4(long param_1,undefined8 param_2,uint *param_3)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long *plVar6;
  undefined8 *puVar7;
  char *pcVar8;
  ulong uVar9;
  ulong uVar10;
  int *piVar11;
  int iVar12;
  int *piVar13;
  int *piVar14;
  int iVar15;
  int local_74;
  undefined8 local_70;
  char local_68;
  char cStack_67;
  char local_66;
  long local_58;
  long local_50;
  uint local_48;
  long local_40 [3];
  undefined8 *local_28;
  undefined8 *local_18;
  
  local_70 = 0;
  local_70 = cvCreateMemStorage(0);
  cvStartWriteStruct(param_1,param_2,6,"opencv-sparse-matrix",0,0);
  local_74 = cvGetDims(param_3,0);
  cvStartWriteStruct(param_1,"sizes",0xd,0,0,0);
  cvWriteRawData(param_1,param_3 + 0xd,local_74,&DAT_00470fa8);
  cvEndWriteStruct(param_1);
  sprintf(&local_68,"%d%c",(ulong)((*param_3 >> 3 & 0x1ff) + 1),
          (long)"ucwsifdr"[(ulong)*param_3 & 7]);
  pcVar8 = &local_68;
  if ((local_66 == '\0') && (local_68 == '1')) {
    pcVar8 = &cStack_67;
  }
  cvWriteString(param_1,&DAT_00470fb8,pcVar8,0);
  cvStartWriteStruct(param_1,"data",0xd,0,0,0);
  lVar4 = cvCreateSeq(7,0x60,8,local_70);
  lVar5 = cvInitSparseMatIterator(param_3,&local_58);
  lVar3 = local_50;
  if (lVar5 != 0) {
    while( true ) {
      do {
        local_50 = lVar3;
        local_40[0] = lVar5 + (int)param_3[0xc];
        cvSeqPush(lVar4,local_40);
        lVar5 = *(long *)(local_50 + 8);
        lVar3 = lVar5;
      } while (lVar5 != 0);
      uVar1 = local_48 + 1;
      uVar10 = (ulong)uVar1;
      local_48 = uVar1;
      if ((int)*(uint *)(local_58 + 0x28) <= (int)uVar1) break;
      uVar9 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar10 << 3;
      plVar6 = (long *)(*(long *)(local_58 + 0x20) + uVar9);
      lVar5 = *(long *)(*(long *)(local_58 + 0x20) + uVar9);
      while (lVar3 = lVar5, lVar5 == 0) {
        uVar2 = (int)uVar10 + 1;
        uVar10 = (ulong)uVar2;
        local_48 = uVar1;
        if (uVar2 == *(uint *)(local_58 + 0x28)) goto LAB_0037957c;
        plVar6 = plVar6 + 1;
        local_48 = uVar2;
        lVar5 = *plVar6;
      }
    }
  }
LAB_0037957c:
  cvSeqSort(lVar4,FUN_00370fb0,&local_74);
  iVar15 = 0;
  cvStartReadSeq(lVar4,local_40,0);
  piVar13 = (int *)0x0;
  if (0 < *(int *)(lVar4 + 0x28)) {
    do {
      puVar7 = local_28 + 1;
      piVar14 = (int *)*local_28;
      local_28 = puVar7;
      if (puVar7 < local_18) {
        if (0 < iVar15) goto LAB_003795d4;
LAB_003796cc:
        iVar12 = 0;
      }
      else {
        cvChangeSeqBlock(local_40,1);
        if (iVar15 < 1) goto LAB_003796cc;
LAB_003795d4:
        if (*piVar14 == *piVar13) {
          iVar12 = 0;
          piVar11 = piVar14;
          do {
            piVar11 = piVar11 + 1;
            piVar13 = piVar13 + 1;
            iVar12 = iVar12 + 1;
          } while (*piVar11 == *piVar13);
        }
        else {
          iVar12 = 0;
        }
        if (iVar12 < local_74 + -1) {
          (**(code **)(param_1 + 0x138))(param_1,0,(iVar12 - local_74) + 1);
        }
      }
      piVar13 = piVar14 + iVar12;
      if (iVar12 < local_74) {
        do {
          iVar12 = iVar12 + 1;
          (**(code **)(param_1 + 0x138))(param_1,0,*piVar13);
          piVar13 = piVar13 + 1;
        } while (iVar12 < local_74);
      }
      iVar15 = iVar15 + 1;
      cvWriteRawData(param_1,(long)piVar14 + ((long)(int)param_3[0xb] - (long)(int)param_3[0xc]),1,
                     &local_68);
      piVar13 = piVar14;
    } while (iVar15 < *(int *)(lVar4 + 0x28));
  }
  cvEndWriteStruct(param_1);
  cvEndWriteStruct(param_1);
  cvReleaseMemStorage(&local_70);
  return;
}


==================================================================

### FUNC 00379700 (4100 bytes) name=FUN_00379700

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00379700(undefined8 param_1,undefined8 param_2,uint *param_3,undefined8 param_4,
                 undefined8 param_5)

{
  String *pSVar1;
  undefined4 uVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  void *pvVar19;
  void *pvVar20;
  char *pcVar21;
  String *pSVar22;
  size_t sVar23;
  undefined4 *puVar24;
  ulong uVar25;
  long lVar26;
  char *pcVar27;
  undefined8 *puVar28;
  uint uVar29;
  undefined4 *puVar30;
  uint uVar31;
  String *pSVar32;
  int iVar33;
  ulong uVar34;
  undefined4 *__dest;
  uint *puVar35;
  int local_400;
  char *local_3f8;
  char *local_3f0;
  char *local_3e8;
  undefined8 local_3e0;
  undefined8 uStack_3d8;
  char *local_3d0;
  char *local_3c8;
  undefined1 auStack_3c0 [24];
  int *local_3a8;
  int *local_398;
  char cStack_380;
  char cStack_37f;
  char local_37e;
  char cStack_300;
  char cStack_2ff;
  char local_2fe;
  char acStack_280 [120];
  String aSStack_208 [4];
  int local_204;
  undefined8 local_200;
  undefined8 local_1f8;
  uint local_1ec;
  
  uVar16 = param_3[0x1a];
  iVar14 = 0;
  uVar2 = *(undefined4 *)(*(long *)(param_3 + 0x1c) + 0x68);
  local_3e0 = param_4;
  uStack_3d8 = param_5;
  pvVar19 = (void *)cv::cvAlloc(-(ulong)(uVar16 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar16 << 2);
  iVar15 = 0;
  cvStartReadSeq(param_3,auStack_3c0,0);
  if (0 < (int)param_3[10]) {
    do {
      while( true ) {
        if (-1 < *local_3a8) {
          *(int *)((long)pvVar19 + (long)iVar14 * 4) = *local_3a8;
          *local_3a8 = iVar14;
          iVar14 = iVar14 + 1;
        }
        local_3a8 = (int *)((long)local_3a8 + (long)(int)param_3[0xb]);
        if (local_3a8 < local_398) break;
        iVar15 = iVar15 + 1;
        cvChangeSeqBlock(auStack_3c0,1);
        if ((int)param_3[10] <= iVar15) goto LAB_003797e4;
      }
      iVar15 = iVar15 + 1;
    } while (iVar15 < (int)param_3[10]);
  }
LAB_003797e4:
  cvStartWriteStruct(param_1,param_2,6,"opencv-graph",0,0);
  if ((*param_3 >> 0xe & 1) == 0) {
    pcVar21 = "";
  }
  else {
    pcVar21 = "oriented";
  }
  cvWriteString(param_1,"flags",pcVar21,1);
  cvWriteInt(param_1,"vertex_count",(ulong)uVar16);
  local_3f0 = (char *)cvAttrValue(&local_3e0,"vertex_dt");
  if (local_3f0 == (char *)0x0) {
    uVar16 = *param_3;
    if ((uVar16 & 0xfff) != 0) {
      uVar29 = param_3[0xb];
LAB_0037a1b4:
      uVar31 = uVar16 & 7;
      uVar16 = (uVar16 >> 3 & 0x1ff) + 1;
      if (uVar16 << (ulong)((uint)(0xfa50L >> (uVar31 << 1)) & 3) != uVar29) {
        local_200 = 0;
        local_1f8 = 0;
        pcVar21 = (char *)cv::String::allocate((String *)&local_200,0x44);
        uVar11 = s_Size_of_sequence_element__elem_s_00471140._40_8_;
        uVar10 = s_Size_of_sequence_element__elem_s_00471140._32_8_;
        uVar9 = s_Size_of_sequence_element__elem_s_00471140._24_8_;
        uVar8 = s_Size_of_sequence_element__elem_s_00471140._16_8_;
        uVar5 = s_Size_of_sequence_element__elem_s_00471140._8_8_;
        uVar4 = s_Size_of_sequence_element__elem_s_00471140._0_8_;
        *(undefined4 *)(pcVar21 + 0x40) = s_Size_of_sequence_element__elem_s_00471140._64_4_;
        uVar13 = s_Size_of_sequence_element__elem_s_00471140._56_8_;
        uVar12 = s_Size_of_sequence_element__elem_s_00471140._48_8_;
        *(undefined8 *)pcVar21 = uVar4;
        *(undefined8 *)(pcVar21 + 8) = uVar5;
        *(undefined8 *)(pcVar21 + 0x10) = uVar8;
        *(undefined8 *)(pcVar21 + 0x18) = uVar9;
        *(undefined8 *)(pcVar21 + 0x20) = uVar10;
        *(undefined8 *)(pcVar21 + 0x28) = uVar11;
        *(undefined8 *)(pcVar21 + 0x30) = uVar12;
        *(undefined8 *)(pcVar21 + 0x38) = uVar13;
        cv::error(-0xd1,(String *)&local_200,
                  "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xffc);
        cv::String::deallocate((String *)&local_200);
        uVar31 = *param_3 & 7;
        uVar16 = (*param_3 >> 3 & 0x1ff) + 1;
      }
      sprintf(&cStack_300,"%d%c",(ulong)uVar16,(long)"ucwsifdr"[(int)uVar31]);
      local_3f0 = &cStack_300;
      if ((local_2fe == '\0') && (cStack_300 == '1')) {
        local_3f0 = &cStack_2ff;
      }
      goto LAB_00379924;
    }
    uVar29 = param_3[0xb];
    if (uVar29 == 1) {
      uVar29 = 1;
      goto LAB_0037a1b4;
    }
    if (0x10 < (int)uVar29) {
      if ((uVar29 - 0x10 & 3) == 0) {
        sprintf(&cStack_300,"%ui",(ulong)(uVar29 - 0x10 >> 2));
        local_3f0 = &cStack_300;
      }
      else {
        sprintf(&cStack_300,"%uu");
        local_3f0 = &cStack_300;
      }
      goto LAB_00379924;
    }
  }
  else {
    iVar14 = FUN_00371534(local_3f0,(String *)&local_200);
    if (iVar14 * 2 < 1) {
      uVar16 = 0x10;
    }
    else {
      uVar16 = 0x10;
      pSVar22 = (String *)((long)&local_200 + 4);
      do {
        pSVar32 = pSVar22 + 8;
        iVar15 = (*(uint *)pSVar22 >> 3 & 0x1ff) + 1 <<
                 (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar22 & 7) << 1)) & 3);
        uVar16 = ((iVar15 + uVar16) - 1 & -iVar15) + iVar15 * *(int *)(pSVar22 + -4);
        pSVar22 = pSVar32;
      } while (pSVar32 != (String *)&local_200 + (ulong)(iVar14 * 2 - 1U >> 1) * 8 + 0xc);
    }
    if (param_3[0xb] != uVar16) {
      local_200 = 0;
      local_1f8 = 0;
      pvVar20 = (void *)cv::String::allocate((String *)&local_200,0x47);
      memcpy(pvVar20,&DAT_004710f8,0x47);
      cv::error(-0xd1,(String *)&local_200,
                "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xff6);
      cv::String::deallocate((String *)&local_200);
    }
LAB_00379924:
    cvWriteString(param_1,"vertex_dt",local_3f0,0);
  }
  cvWriteInt(param_1,"edge_count",uVar2);
  puVar35 = *(uint **)(param_3 + 0x1c);
  pcVar21 = (char *)cvAttrValue(&local_3e0,&LAB_004711a8);
  if (pcVar21 == (char *)0x0) {
    uVar16 = *puVar35;
    if ((uVar16 & 0xfff) == 0) {
      uVar29 = puVar35[0xb];
      if (uVar29 != 1) {
        if ((int)uVar29 < 0x29) {
          pcVar21 = "";
        }
        else if ((uVar29 - 0x28 & 3) == 0) {
          pcVar21 = &cStack_380;
          sprintf(pcVar21,"%ui",(ulong)(uVar29 - 0x28 >> 2));
        }
        else {
          pcVar21 = &cStack_380;
          sprintf(pcVar21,"%uu");
        }
        goto LAB_00379a38;
      }
      uVar29 = 1;
    }
    else {
      uVar29 = puVar35[0xb];
    }
    uVar31 = uVar16 & 7;
    uVar16 = (uVar16 >> 3 & 0x1ff) + 1;
    if (uVar16 << (ulong)((uint)(0xfa50L >> (uVar31 << 1)) & 3) != uVar29) {
      local_200 = 0;
      local_1f8 = 0;
      pcVar21 = (char *)cv::String::allocate((String *)&local_200,0x44);
      uVar11 = s_Size_of_sequence_element__elem_s_00471140._40_8_;
      uVar10 = s_Size_of_sequence_element__elem_s_00471140._32_8_;
      uVar9 = s_Size_of_sequence_element__elem_s_00471140._24_8_;
      uVar8 = s_Size_of_sequence_element__elem_s_00471140._16_8_;
      uVar5 = s_Size_of_sequence_element__elem_s_00471140._8_8_;
      uVar4 = s_Size_of_sequence_element__elem_s_00471140._0_8_;
      *(undefined4 *)(pcVar21 + 0x40) = s_Size_of_sequence_element__elem_s_00471140._64_4_;
      uVar13 = s_Size_of_sequence_element__elem_s_00471140._56_8_;
      uVar12 = s_Size_of_sequence_element__elem_s_00471140._48_8_;
      *(undefined8 *)pcVar21 = uVar4;
      *(undefined8 *)(pcVar21 + 8) = uVar5;
      *(undefined8 *)(pcVar21 + 0x10) = uVar8;
      *(undefined8 *)(pcVar21 + 0x18) = uVar9;
      *(undefined8 *)(pcVar21 + 0x20) = uVar10;
      *(undefined8 *)(pcVar21 + 0x28) = uVar11;
      *(undefined8 *)(pcVar21 + 0x30) = uVar12;
      *(undefined8 *)(pcVar21 + 0x38) = uVar13;
      cv::error(-0xd1,(String *)&local_200,
                "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xffc);
      cv::String::deallocate((String *)&local_200);
      uVar31 = *puVar35 & 7;
      uVar16 = (*puVar35 >> 3 & 0x1ff) + 1;
    }
    sprintf(&cStack_380,"%d%c",(ulong)uVar16,(long)"ucwsifdr"[(int)uVar31]);
    pcVar21 = &cStack_380;
    if ((local_37e == '\0') && (cStack_380 == '1')) {
      pcVar21 = &cStack_37f;
    }
  }
  else {
    iVar14 = FUN_00371534(pcVar21,(String *)&local_200);
    if (iVar14 * 2 < 1) {
      uVar16 = 0x28;
    }
    else {
      uVar16 = 0x28;
      pSVar22 = (String *)((long)&local_200 + 4);
      do {
        pSVar32 = pSVar22 + 8;
        iVar15 = (*(uint *)pSVar22 >> 3 & 0x1ff) + 1 <<
                 (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar22 & 7) << 1)) & 3);
        uVar16 = ((iVar15 + uVar16) - 1 & -iVar15) + iVar15 * *(uint *)(pSVar22 + -4);
        pSVar22 = pSVar32;
      } while (pSVar32 != (String *)&local_200 + (ulong)(iVar14 * 2 - 1U >> 1) * 8 + 0xc);
    }
    if (puVar35[0xb] != uVar16) {
      local_200 = 0;
      local_1f8 = 0;
      pvVar20 = (void *)cv::String::allocate((String *)&local_200,0x47);
      memcpy(pvVar20,&DAT_004710f8,0x47);
      cv::error(-0xd1,(String *)&local_200,
                "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xff6);
      cv::String::deallocate((String *)&local_200);
    }
  }
LAB_00379a38:
  sprintf(acStack_280,"2if%s",pcVar21);
  cvWriteString(param_1,&LAB_004711a8,acStack_280,0);
  pSVar22 = (String *)cvAttrValue(&local_3e0,"header_dt");
  if (pSVar22 == (String *)0x0) {
    uVar16 = param_3[1];
    if ((int)uVar16 < 0x79) goto LAB_00379bd8;
    uVar29 = *param_3;
    if ((uVar29 & 0xffff0000) == 0x42990000) {
      if ((((uVar29 & 0xfff) - 0xc < 2) && (uVar16 == 0x80)) && (param_3[0xb] == 8)) {
        cvStartWriteStruct(param_1,&DAT_00471200,0xe,0,0,0);
        cvWriteInt(param_1,"x",param_3[0x18]);
        cvWriteInt(param_1,&DAT_00452188,param_3[0x19]);
        cvWriteInt(param_1,"width",param_3[0x1a]);
        cvWriteInt(param_1,"height",param_3[0x1b]);
        cvEndWriteStruct(param_1);
        cvWriteInt(param_1,"color",param_3[0x1c]);
        goto LAB_00379bd8;
      }
      if ((((uVar29 & 0x3000) == 0x1000) && (param_3[0xb] == 1)) && ((uVar29 & 0xfff) == 0)) {
        cvStartWriteStruct(param_1,"origin",0xe,0,0,0);
        cvWriteInt(param_1,"x",param_3[0x18]);
        cvWriteInt(param_1,&DAT_00452188,param_3[0x19]);
        cvEndWriteStruct(param_1);
        goto LAB_00379bd8;
      }
    }
    pSVar22 = (String *)&local_200;
    if ((uVar16 - 0x78 & 3) == 0) {
      sprintf((char *)&local_200,"%ui",(ulong)(uVar16 - 0x78 >> 2));
    }
    else {
      sprintf((char *)&local_200,"%uu");
    }
  }
  else {
    sVar23 = strlen((char *)pSVar22);
    iVar14 = (int)sVar23;
    if ((iVar14 == 0) || (local_200 = local_200 & 0xffffffff00000000, iVar14 < 1)) {
LAB_0037a464:
      iVar14 = 0x78;
    }
    else {
      uVar34 = 0;
      iVar15 = 0;
      do {
        uVar16 = (int)(char)pSVar22[iVar15] - 0x30;
        iVar18 = (int)uVar34;
        if ((uVar16 & 0xff) < 10) {
          if ((byte)((char)(pSVar22 + iVar15)[1] - 0x30U) < 10) {
            local_3d0 = (char *)0x0;
            lVar26 = strtol((char *)(pSVar22 + iVar15),&local_3d0,10);
            uVar16 = (uint)lVar26;
            iVar15 = ((int)local_3d0 - (int)pSVar22) + -1;
          }
          if ((int)uVar16 < 1) {
            local_3d0 = (char *)0x0;
            local_3c8 = (char *)0x0;
            pcVar21 = (char *)cv::String::allocate((String *)&local_3d0,0x1f);
            cVar7 = s_Invalid_data_type_specification_00470850[0x1e];
            uVar6 = s_Invalid_data_type_specification_00470850._28_2_;
            uVar2 = s_Invalid_data_type_specification_00470850._24_4_;
            uVar5 = s_Invalid_data_type_specification_00470850._8_8_;
            uVar4 = s_Invalid_data_type_specification_00470850._0_8_;
            *(undefined8 *)(pcVar21 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
            *(undefined4 *)(pcVar21 + 0x18) = uVar2;
            *(undefined2 *)(pcVar21 + 0x1c) = uVar6;
            pcVar21[0x1e] = cVar7;
            *(undefined8 *)pcVar21 = uVar4;
            *(undefined8 *)(pcVar21 + 8) = uVar5;
            cv::error(-5,(String *)&local_3d0,"int icvDecodeFormat(const char*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0);
            cv::String::deallocate((String *)&local_3d0);
          }
          *(uint *)((String *)&local_200 + (long)iVar18 * 4) = uVar16;
        }
        else {
          pcVar21 = strchr("ucwsifdr",(int)(char)pSVar22[iVar15]);
          if (pcVar21 == (char *)0x0) {
            local_3d0 = pcVar21;
            local_3c8 = pcVar21;
            pcVar27 = (char *)cv::String::allocate((String *)&local_3d0,0x1f);
            cVar7 = s_Invalid_data_type_specification_00470850[0x1e];
            uVar6 = s_Invalid_data_type_specification_00470850._28_2_;
            uVar2 = s_Invalid_data_type_specification_00470850._24_4_;
            uVar5 = s_Invalid_data_type_specification_00470850._8_8_;
            uVar4 = s_Invalid_data_type_specification_00470850._0_8_;
            *(undefined8 *)(pcVar27 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
            *(undefined4 *)(pcVar27 + 0x18) = uVar2;
            *(undefined2 *)(pcVar27 + 0x1c) = uVar6;
            pcVar27[0x1e] = cVar7;
            *(undefined8 *)pcVar27 = uVar4;
            *(undefined8 *)(pcVar27 + 8) = uVar5;
            cv::error(-5,(String *)&local_3d0,"int icvDecodeFormat(const char*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8);
            cv::String::deallocate((String *)&local_3d0);
          }
          uVar25 = -(uVar34 >> 0x1f) & 0xfffffffc00000000 | uVar34 << 2;
          pSVar32 = (String *)&local_200 + uVar25;
          if (*(int *)((String *)&local_200 + uVar25) == 0) {
            *(undefined4 *)((String *)&local_200 + uVar25) = 1;
          }
          iVar17 = (int)pcVar21 + -0x472f10;
          *(int *)((long)&local_200 + uVar25 + 4) = iVar17;
          if (iVar18 == 0) {
            uVar34 = 2;
            *(undefined4 *)((String *)&local_200 + uVar25 + 8) = 0;
          }
          else if (iVar17 == *(int *)((long)&local_204 + uVar25)) {
            *(int *)((String *)&local_200 + (uVar25 - 8)) =
                 *(int *)((String *)&local_200 + (uVar25 - 8)) + *(int *)pSVar32;
            *(int *)pSVar32 = 0;
          }
          else {
            uVar16 = iVar18 + 2;
            uVar34 = (ulong)uVar16;
            if (0xff < (int)uVar16) {
              local_3d0 = (char *)0x0;
              local_3c8 = (char *)0x0;
              pcVar21 = (char *)cv::String::allocate((String *)&local_3d0,0x20);
              uVar8 = s_Too_long_data_type_specification_00470870._24_8_;
              uVar5 = s_Too_long_data_type_specification_00470870._16_8_;
              uVar4 = s_Too_long_data_type_specification_00470870._8_8_;
              *(undefined8 *)pcVar21 = s_Too_long_data_type_specification_00470870._0_8_;
              *(undefined8 *)(pcVar21 + 8) = uVar4;
              *(undefined8 *)(pcVar21 + 0x10) = uVar5;
              *(undefined8 *)(pcVar21 + 0x18) = uVar8;
              cv::error(-5,(String *)&local_3d0,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbe2)
              ;
              cv::String::deallocate((String *)&local_3d0);
            }
            *(undefined4 *)((String *)&local_200 + (long)(int)uVar16 * 4) = 0;
          }
        }
        iVar15 = iVar15 + 1;
      } while (iVar15 < iVar14);
      if ((int)uVar34 < 1) goto LAB_0037a464;
      iVar14 = 0x78;
      pSVar32 = (String *)((long)&local_200 + 4);
      do {
        pSVar1 = pSVar32 + 8;
        iVar15 = (*(uint *)pSVar32 >> 3 & 0x1ff) + 1 <<
                 (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar32 & 7) << 1)) & 3);
        iVar14 = ((iVar15 + iVar14) - 1U & -iVar15) + iVar15 * *(uint *)(pSVar32 + -4);
        pSVar32 = pSVar1;
      } while (pSVar1 != (String *)&local_200 + (ulong)((int)uVar34 - 1U >> 1) * 8 + 0xc);
    }
    if ((int)param_3[1] < iVar14) {
      local_200 = 0;
      local_1f8 = 0;
      puVar28 = (undefined8 *)cv::String::allocate((String *)&local_200,0x4a);
      uVar6 = DAT_004711f8;
      uVar13 = DAT_004711e8;
      uVar12 = DAT_004711e0;
      uVar11 = _LAB_004711d8;
      uVar10 = DAT_004711d0;
      uVar9 = _LAB_004711c8;
      uVar8 = DAT_004711c0;
      uVar5 = DAT_004711b8;
      uVar4 = DAT_004711b0;
      puVar28[8] = DAT_004711f0;
      *(undefined2 *)(puVar28 + 9) = uVar6;
      *puVar28 = uVar4;
      puVar28[1] = uVar5;
      puVar28[2] = uVar8;
      puVar28[3] = uVar9;
      puVar28[4] = uVar10;
      puVar28[5] = uVar11;
      puVar28[6] = uVar12;
      puVar28[7] = uVar13;
      cv::error(-0xd1,(String *)&local_200,
                "void icvWriteHeaderData(CvFileStorage*, const CvSeq*, CvAttrList*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xfb6);
      cv::String::deallocate((String *)&local_200);
    }
  }
  cvWriteString(param_1,"header_dt",pSVar22,0);
  cvStartWriteStruct(param_1,"header_user_data",0xd,0,0,0);
  cvWriteRawData(param_1,param_3 + 0x18,1,pSVar22);
  cvEndWriteStruct(param_1);
LAB_00379bd8:
  iVar14 = 0;
  local_400 = 1;
  iVar18 = *(int *)(*(long *)(param_3 + 0x1c) + 0x2c) * 3;
  iVar15 = param_3[0xb] * 3;
  if ((int)(param_3[0xb] * 3) < iVar18) {
    iVar15 = iVar18;
  }
  uVar34 = (ulong)iVar15;
  if (iVar15 < 0x10000) {
    uVar34 = 0x10000;
  }
  puVar24 = (undefined4 *)cv::cvAlloc(uVar34);
  local_3f8 = "vertices";
  local_3e8 = "edges";
  do {
    if (iVar14 == 0) {
      puVar35 = param_3;
      pcVar21 = local_3f0;
      if (local_3f0 != (char *)0x0) goto LAB_00379c4c;
    }
    else {
      puVar35 = *(uint **)(param_3 + 0x1c);
      pcVar21 = acStack_280;
LAB_00379c4c:
      uVar16 = puVar35[0xb];
      iVar15 = FUN_00371534(pcVar21,(String *)&local_200);
      if (iVar15 * 2 < 1) {
        iVar18 = 0;
      }
      else {
        iVar18 = 0;
        pSVar22 = (String *)((long)&local_200 + 4);
        do {
          pSVar32 = pSVar22 + 8;
          iVar17 = (*(uint *)pSVar22 >> 3 & 0x1ff) + 1 <<
                   (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar22 & 7) << 1)) & 3);
          iVar18 = ((iVar17 + iVar18) - 1U & -iVar17) + iVar17 * *(uint *)(pSVar22 + -4);
          pSVar22 = pSVar32;
        } while (pSVar32 != (String *)&local_200 + (ulong)(iVar15 * 2 - 1U >> 1) * 8 + 0xc);
      }
      iVar15 = (local_200._4_4_ >> 3 & 0x1ff) + 1 <<
               (ulong)((uint)(0xfa50L >> ((local_200._4_4_ & 7) << 1)) & 3);
      uVar29 = (iVar18 + iVar15) - 1U & -iVar15;
      iVar15 = 0;
      if (uVar29 != 0) {
        iVar15 = (int)uVar34 / (int)uVar29;
      }
      pcVar27 = local_3f8;
      iVar18 = 4;
      if (((iVar14 == 1) &&
          (iVar17 = FUN_00371534(pcVar21,(String *)&local_200), pcVar27 = local_3e8, iVar18 = 4,
          2 < iVar17)) &&
         (iVar18 = 4,
         7 < (int)((local_1ec >> 3 & 0x1ff) + 1 <<
                  (ulong)((uint)(0xfa50L >> ((local_1ec & 7) << 1)) & 3)))) {
        iVar18 = 8;
      }
      cvStartWriteStruct(param_1,pcVar27,0xd,0,0,0);
      cvStartReadSeq(puVar35,auStack_3c0,0);
      if (0 < (int)puVar35[10]) {
        iVar33 = 0;
        iVar17 = 0;
        __dest = puVar24;
        do {
          while( true ) {
            if (-1 < *local_3a8) {
              if (iVar14 == 0) {
                memcpy(__dest,local_3a8 + 4,(long)(int)uVar29);
              }
              else {
                __dest = (undefined4 *)((long)__dest + 3U & 0xfffffffffffffffc);
                puVar30 = *(undefined4 **)(local_3a8 + 8);
                iVar3 = local_3a8[1];
                *__dest = **(undefined4 **)(local_3a8 + 6);
                __dest[1] = *puVar30;
                __dest[2] = iVar3;
                if (0x28 < (int)uVar16) {
                  memcpy((void *)((long)__dest + (long)iVar18 + 0xb & ~(long)(iVar18 + -1)),
                         local_3a8 + 10,(long)(int)uVar16 - 0x28);
                }
              }
              iVar3 = iVar33 + 1;
              if (iVar3 < iVar15) {
                __dest = (undefined4 *)((long)__dest + (long)(int)uVar29);
                iVar33 = iVar3;
              }
              else {
                iVar33 = 0;
                cvWriteRawData(param_1,puVar24,iVar3,pcVar21);
                __dest = puVar24;
              }
            }
            local_3a8 = (int *)((long)local_3a8 + (long)(int)puVar35[0xb]);
            if (local_3a8 < local_398) break;
            iVar17 = iVar17 + 1;
            cvChangeSeqBlock(auStack_3c0,1);
            if ((int)puVar35[10] <= iVar17) goto LAB_00379e3c;
          }
          iVar17 = iVar17 + 1;
        } while (iVar17 < (int)puVar35[10]);
LAB_00379e3c:
        if (iVar33 != 0) {
          cvWriteRawData(param_1,puVar24,iVar33,pcVar21);
        }
      }
      cvEndWriteStruct(param_1);
      if (local_400 == 2) break;
    }
    iVar14 = iVar14 + 1;
    local_400 = local_400 + 1;
  } while( true );
  iVar14 = 0;
  iVar15 = 0;
  cvEndWriteStruct(param_1);
  cvStartReadSeq(param_3,auStack_3c0,0);
  uVar16 = param_3[10];
  if (0 < (int)uVar16) {
    do {
      while( true ) {
        if (-1 < *local_3a8) {
          lVar26 = (long)iVar14;
          iVar14 = iVar14 + 1;
          *local_3a8 = *(int *)((long)pvVar19 + lVar26 * 4);
        }
        local_3a8 = (int *)((long)local_3a8 + (long)(int)param_3[0xb]);
        if (local_3a8 < local_398) break;
        iVar15 = iVar15 + 1;
        cvChangeSeqBlock(auStack_3c0,1);
        uVar16 = param_3[10];
        if ((int)uVar16 <= iVar15) goto LAB_00379ef0;
      }
      iVar15 = iVar15 + 1;
    } while (iVar15 < (int)uVar16);
  }
LAB_00379ef0:
  cv::cvFree_(puVar24);
  cv::cvFree_(pvVar19);
  return;
}


==================================================================

### FUNC 0037a7a4 (1920 bytes) name=FUN_0037a7a4

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_0037a7a4(undefined8 param_1,undefined8 param_2,uint *param_3,undefined8 param_4,
                 undefined8 param_5,int param_6)

{
  String *pSVar1;
  uint uVar2;
  int iVar3;
  char acVar4 [8];
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined2 uVar13;
  int iVar14;
  char *pcVar15;
  void *__dest;
  size_t sVar16;
  char *pcVar17;
  undefined8 *puVar18;
  int iVar19;
  uint uVar20;
  String *pSVar21;
  uint uVar22;
  long lVar23;
  undefined8 local_310;
  undefined8 uStack_308;
  char local_300 [8];
  char acStack_2f8 [120];
  char cStack_280;
  char cStack_27f;
  char local_27e;
  undefined8 local_200;
  undefined8 local_1f8;
  
  local_310 = param_4;
  uStack_308 = param_5;
  cvStartWriteStruct(param_1,param_2,6,"opencv-sequence",0,0);
  if (-1 < param_6) {
    cvWriteInt(param_1,"level",param_6);
  }
  pcVar15 = (char *)cvAttrValue(&local_310,&DAT_00470fb8);
  if (pcVar15 == (char *)0x0) {
    uVar2 = *param_3;
    uVar20 = uVar2 & 0xfff;
    if ((uVar2 & 0xfff) == 0) {
      uVar22 = param_3[0xb];
      if (uVar22 != 1) {
        acVar4 = local_300;
        if (0 < (int)uVar22) {
          if ((uVar22 & 3) != 0) {
            sprintf(&cStack_280,"%uu");
            pcVar15 = &cStack_280;
            goto LAB_0037ac2c;
          }
          pcVar15 = &cStack_280;
          sprintf(pcVar15,"%ui",(ulong)(uVar22 >> 2));
          uVar2 = *param_3;
          uVar20 = uVar2 & 0xfff;
          acVar4 = local_300;
        }
        goto joined_r0x0037ac3c;
      }
      uVar20 = 1;
    }
    else {
      uVar20 = param_3[0xb];
    }
    uVar22 = uVar2 & 7;
    uVar2 = (uVar2 >> 3 & 0x1ff) + 1;
    if (uVar2 << (ulong)((uint)(0xfa50L >> (uVar22 << 1)) & 3) != uVar20) {
      local_200 = 0;
      local_1f8 = 0;
      pcVar15 = (char *)cv::String::allocate((String *)&local_200,0x44);
      uVar10 = s_Size_of_sequence_element__elem_s_00471140._40_8_;
      uVar9 = s_Size_of_sequence_element__elem_s_00471140._32_8_;
      uVar8 = s_Size_of_sequence_element__elem_s_00471140._24_8_;
      uVar7 = s_Size_of_sequence_element__elem_s_00471140._16_8_;
      uVar6 = s_Size_of_sequence_element__elem_s_00471140._8_8_;
      uVar5 = s_Size_of_sequence_element__elem_s_00471140._0_8_;
      *(undefined4 *)(pcVar15 + 0x40) = s_Size_of_sequence_element__elem_s_00471140._64_4_;
      uVar12 = s_Size_of_sequence_element__elem_s_00471140._56_8_;
      uVar11 = s_Size_of_sequence_element__elem_s_00471140._48_8_;
      *(undefined8 *)pcVar15 = uVar5;
      *(undefined8 *)(pcVar15 + 8) = uVar6;
      *(undefined8 *)(pcVar15 + 0x10) = uVar7;
      *(undefined8 *)(pcVar15 + 0x18) = uVar8;
      *(undefined8 *)(pcVar15 + 0x20) = uVar9;
      *(undefined8 *)(pcVar15 + 0x28) = uVar10;
      *(undefined8 *)(pcVar15 + 0x30) = uVar11;
      *(undefined8 *)(pcVar15 + 0x38) = uVar12;
      cv::error(-0xd1,(String *)&local_200,
                "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xffc);
      cv::String::deallocate((String *)&local_200);
      uVar22 = *param_3 & 7;
      uVar2 = (*param_3 >> 3 & 0x1ff) + 1;
    }
    sprintf(&cStack_280,"%d%c",(ulong)uVar2,(long)"ucwsifdr"[(int)uVar22]);
    pcVar15 = &cStack_280;
    if ((local_27e == '\0') && (cStack_280 == '1')) {
      pcVar15 = &cStack_27f;
    }
LAB_0037ac2c:
    uVar2 = *param_3;
    uVar20 = uVar2 & 0xfff;
    acVar4 = local_300;
  }
  else {
    iVar14 = FUN_00371534(pcVar15,(String *)&local_200);
    if (iVar14 * 2 < 1) {
      iVar19 = 0;
    }
    else {
      iVar19 = 0;
      pSVar21 = (String *)((long)&local_200 + 4);
      do {
        pSVar1 = pSVar21 + 8;
        iVar3 = (*(uint *)pSVar21 >> 3 & 0x1ff) + 1 <<
                (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar21 & 7) << 1)) & 3);
        iVar19 = ((iVar3 + iVar19) - 1U & -iVar3) + iVar3 * *(int *)(pSVar21 + -4);
        pSVar21 = pSVar1;
      } while (pSVar1 != (String *)&local_200 + (ulong)(iVar14 * 2 - 1U >> 1) * 8 + 0xc);
    }
    iVar14 = (local_200._4_4_ >> 3 & 0x1ff) + 1 <<
             (ulong)((uint)(0xfa50L >> ((local_200._4_4_ & 7) << 1)) & 3);
    if (param_3[0xb] == ((iVar19 + iVar14) - 1U & -iVar14)) goto LAB_0037ac2c;
    local_200 = 0;
    local_1f8 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_200,0x47);
    memcpy(__dest,&DAT_004710f8,0x47);
    cv::error(-0xd1,(String *)&local_200,
              "char* icvGetFormat(const CvSeq*, const char*, CvAttrList*, int, char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xff6);
    cv::String::deallocate((String *)&local_200);
    uVar2 = *param_3;
    uVar20 = uVar2 & 0xfff;
    acVar4 = local_300;
  }
joined_r0x0037ac3c:
  local_300 = s_closed_00471258;
  if ((uVar2 >> 0xe & 1) == 0) {
    local_300 = (char  [8])((ulong)acVar4 & 0xffffffffffffff00);
  }
  if ((uVar2 >> 0xf & 1) != 0) {
    sVar16 = strlen(local_300);
    *(undefined4 *)(local_300 + sVar16) = s_hole_00471260._0_4_;
    *(undefined2 *)(acStack_2f8 + (sVar16 - 4)) = s_hole_00471260._4_2_;
  }
  if ((uVar2 & 0x3000) == 0x1000) {
    sVar16 = strlen(local_300);
    *(undefined4 *)(local_300 + sVar16) = s_curve_00471268._0_4_;
    *(undefined2 *)(acStack_2f8 + (sVar16 - 4)) = s_curve_00471268._4_2_;
    acStack_2f8[sVar16 - 2] = s_curve_00471268[6];
  }
  pcVar17 = local_300;
  if ((uVar20 == 0) && (param_3[0xb] != 1)) {
    sVar16 = strlen(pcVar17);
    *(undefined8 *)(pcVar17 + sVar16) = s_untyped_00471270._0_8_;
    acStack_2f8[sVar16] = s_untyped_00471270[8];
  }
  if (local_300[0] != '\0') {
    pcVar17 = local_300 + 1;
  }
  cvWriteString(param_1,"flags",pcVar17,1);
  cvWriteInt(param_1,"count",param_3[10]);
  cvWriteString(param_1,&DAT_00470fb8,pcVar15,0);
  pcVar17 = (char *)cvAttrValue(&local_310,"header_dt");
  if (pcVar17 == (char *)0x0) {
    uVar20 = param_3[1];
    if ((int)uVar20 < 0x61) goto LAB_0037aaac;
    uVar2 = *param_3;
    if ((uVar2 & 0xffff0000) == 0x42990000) {
      if ((((uVar2 & 0xfff) - 0xc < 2) && (uVar20 == 0x80)) && (param_3[0xb] == 8)) {
        cvStartWriteStruct(param_1,&DAT_00471200,0xe,0,0,0);
        cvWriteInt(param_1,"x",param_3[0x18]);
        cvWriteInt(param_1,&DAT_00452188,param_3[0x19]);
        cvWriteInt(param_1,"width",param_3[0x1a]);
        cvWriteInt(param_1,"height",param_3[0x1b]);
        cvEndWriteStruct(param_1);
        cvWriteInt(param_1,"color",param_3[0x1c]);
        goto LAB_0037aaac;
      }
      if ((((uVar2 & 0x3000) == 0x1000) && (param_3[0xb] == 1)) && ((uVar2 & 0xfff) == 0)) {
        cvStartWriteStruct(param_1,"origin",0xe,0,0,0);
        cvWriteInt(param_1,"x",param_3[0x18]);
        cvWriteInt(param_1,&DAT_00452188,param_3[0x19]);
        cvEndWriteStruct(param_1);
        goto LAB_0037aaac;
      }
    }
    if ((uVar20 - 0x60 & 3) == 0) {
      pcVar17 = (char *)&local_200;
      sprintf(pcVar17,"%ui",(ulong)(uVar20 - 0x60 >> 2));
    }
    else {
      pcVar17 = (char *)&local_200;
      sprintf(pcVar17,"%uu");
    }
  }
  else {
    iVar14 = FUN_00371534(pcVar17,(String *)&local_200);
    if (iVar14 * 2 < 1) {
      iVar19 = 0x60;
    }
    else {
      iVar19 = 0x60;
      pSVar21 = (String *)((long)&local_200 + 4);
      do {
        pSVar1 = pSVar21 + 8;
        iVar3 = (*(uint *)pSVar21 >> 3 & 0x1ff) + 1 <<
                (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar21 & 7) << 1)) & 3);
        iVar19 = ((iVar3 + iVar19) - 1U & -iVar3) + iVar3 * *(int *)(pSVar21 + -4);
        pSVar21 = pSVar1;
      } while (pSVar1 != (String *)&local_200 + (ulong)(iVar14 * 2 - 1U >> 1) * 8 + 0xc);
    }
    if ((int)param_3[1] < iVar19) {
      local_200 = 0;
      local_1f8 = 0;
      puVar18 = (undefined8 *)cv::String::allocate((String *)&local_200,0x4a);
      uVar13 = DAT_004711f8;
      uVar12 = DAT_004711e8;
      uVar11 = DAT_004711e0;
      uVar10 = _LAB_004711d8;
      uVar9 = DAT_004711d0;
      uVar8 = _LAB_004711c8;
      uVar7 = DAT_004711c0;
      uVar6 = DAT_004711b8;
      uVar5 = DAT_004711b0;
      puVar18[8] = DAT_004711f0;
      *(undefined2 *)(puVar18 + 9) = uVar13;
      *puVar18 = uVar5;
      puVar18[1] = uVar6;
      puVar18[2] = uVar7;
      puVar18[3] = uVar8;
      puVar18[4] = uVar9;
      puVar18[5] = uVar10;
      puVar18[6] = uVar11;
      puVar18[7] = uVar12;
      cv::error(-0xd1,(String *)&local_200,
                "void icvWriteHeaderData(CvFileStorage*, const CvSeq*, CvAttrList*, int)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xfb6);
      cv::String::deallocate((String *)&local_200);
    }
  }
  cvWriteString(param_1,"header_dt",pcVar17,0);
  cvStartWriteStruct(param_1,"header_user_data",0xd,0,0,0);
  cvWriteRawData(param_1,param_3 + 0x18,1,pcVar17);
  cvEndWriteStruct(param_1);
LAB_0037aaac:
  cvStartWriteStruct(param_1,"data",0xd,0,0,0);
  for (lVar23 = *(long *)(param_3 + 0x16);
      (lVar23 != 0 &&
      (cvWriteRawData(param_1,*(undefined8 *)(lVar23 + 0x18),*(undefined4 *)(lVar23 + 0x14),pcVar15)
      , **(long **)(param_3 + 0x16) != lVar23)); lVar23 = *(long *)(lVar23 + 8)) {
  }
  cvEndWriteStruct(param_1);
  cvEndWriteStruct(param_1);
  return;
}


==================================================================

### FUNC 0037af60 (344 bytes) name=FUN_0037af60

void FUN_0037af60(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5)

{
  int iVar1;
  char *__s1;
  undefined8 local_20;
  undefined8 uStack_18;
  long local_10;
  undefined4 local_8;
  
  local_20 = param_4;
  uStack_18 = param_5;
  __s1 = (char *)cvAttrValue(&local_20,"recursive");
  if ((((__s1 != (char *)0x0) && (iVar1 = strcmp(__s1,"0"), iVar1 != 0)) &&
      (iVar1 = strcmp(__s1,"false"), iVar1 != 0)) &&
     ((iVar1 = strcmp(__s1,"False"), iVar1 != 0 && (iVar1 = strcmp(__s1,"FALSE"), iVar1 != 0)))) {
    cvStartWriteStruct(param_1,param_2,6,"opencv-sequence-tree",0,0);
    cvStartWriteStruct(param_1,"sequences",5,0,0,0);
    cvInitTreeNodeIterator(&local_10,param_3,0x7fffffff);
    while (local_10 != 0) {
      FUN_0037a7a4(param_1,0,local_10,local_20,uStack_18,local_8);
      cvNextTreeNode(&local_10);
    }
    cvEndWriteStruct(param_1);
    cvEndWriteStruct(param_1);
    return;
  }
  FUN_0037a7a4(param_1,param_2,param_3,local_20,uStack_18,0xffffffff);
  return;
}


==================================================================

### FUNC 0037b0b8 (568 bytes) name=cvStartReadRawData

void cvStartReadRawData(int *param_1,uint *param_2,undefined8 *param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  char *pcVar11;
  int iVar12;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar12 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_0037b160;
    iVar12 = -5;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar6 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar5 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar11 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar11 + 0x18) = uVar4;
  *(undefined2 *)(pcVar11 + 0x1c) = uVar5;
  pcVar11[0x1e] = cVar6;
  *(undefined8 *)pcVar11 = uVar2;
  *(undefined8 *)(pcVar11 + 8) = uVar3;
  cv::error(iVar12,(String *)&local_10,
            "void cvStartReadRawData(const CvFileStorage*, const CvFileNode*, CvSeqReader*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc78);
  cv::String::deallocate((String *)&local_10);
LAB_0037b160:
  if ((param_2 == (uint *)0x0) || (param_3 == (undefined8 *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x2a);
    uVar5 = s_Null_pointer_to_source_file_node_004712b8._40_2_;
    uVar8 = s_Null_pointer_to_source_file_node_004712b8._24_8_;
    uVar7 = s_Null_pointer_to_source_file_node_004712b8._16_8_;
    uVar3 = s_Null_pointer_to_source_file_node_004712b8._8_8_;
    uVar2 = s_Null_pointer_to_source_file_node_004712b8._0_8_;
    *(undefined8 *)(pcVar11 + 0x20) = s_Null_pointer_to_source_file_node_004712b8._32_8_;
    *(undefined2 *)(pcVar11 + 0x28) = uVar5;
    *(undefined8 *)pcVar11 = uVar2;
    *(undefined8 *)(pcVar11 + 8) = uVar3;
    *(undefined8 *)(pcVar11 + 0x10) = uVar7;
    *(undefined8 *)(pcVar11 + 0x18) = uVar8;
    cv::error(-0x1b,(String *)&local_10,
              "void cvStartReadRawData(const CvFileStorage*, const CvFileNode*, CvSeqReader*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc7b);
    cv::String::deallocate((String *)&local_10);
    uVar1 = *param_2;
  }
  else {
    uVar1 = *param_2;
  }
  uVar1 = uVar1 & 7;
  if (1 < uVar1 - 1) {
    if (uVar1 == 5) {
      cvStartReadSeq(*(undefined8 *)(param_2 + 4),param_3,0);
    }
    else {
      if (uVar1 == 0) {
        *param_3 = 0;
        param_3[1] = 0;
        param_3[2] = 0;
        param_3[3] = 0;
        param_3[4] = 0;
        param_3[5] = 0;
        param_3[6] = 0;
        param_3[7] = 0;
        return;
      }
      local_10 = 0;
      local_8 = 0;
      pcVar11 = (char *)cv::String::allocate((String *)&local_10,0x38);
      uVar10 = s_The_file_node_should_be_a_numeri_004712e8._40_8_;
      uVar9 = s_The_file_node_should_be_a_numeri_004712e8._32_8_;
      uVar8 = s_The_file_node_should_be_a_numeri_004712e8._24_8_;
      uVar7 = s_The_file_node_should_be_a_numeri_004712e8._16_8_;
      uVar3 = s_The_file_node_should_be_a_numeri_004712e8._8_8_;
      uVar2 = s_The_file_node_should_be_a_numeri_004712e8._0_8_;
      *(undefined8 *)(pcVar11 + 0x30) = s_The_file_node_should_be_a_numeri_004712e8._48_8_;
      *(undefined8 *)pcVar11 = uVar2;
      *(undefined8 *)(pcVar11 + 8) = uVar3;
      *(undefined8 *)(pcVar11 + 0x10) = uVar7;
      *(undefined8 *)(pcVar11 + 0x18) = uVar8;
      *(undefined8 *)(pcVar11 + 0x20) = uVar9;
      *(undefined8 *)(pcVar11 + 0x28) = uVar10;
      cv::error(-5,(String *)&local_10,
                "void cvStartReadRawData(const CvFileStorage*, const CvFileNode*, CvSeqReader*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc8f);
      cv::String::deallocate((String *)&local_10);
    }
    return;
  }
  param_3[3] = param_2;
  param_3[4] = param_2;
  param_3[5] = param_2 + 0x10;
  param_3[1] = 0;
  return;
}


==================================================================

### FUNC 0037b32c (2360 bytes) name=cvReadRawDataSlice

void cvReadRawDataSlice(int *param_1,long param_2,int param_3,long param_4,char *param_5)

{
  uint uVar1;
  float fVar2;
  uint uVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  char *pcVar15;
  size_t sVar16;
  uint *puVar17;
  long lVar18;
  char *pcVar19;
  undefined2 uVar20;
  char cVar21;
  ulong uVar22;
  int iVar23;
  int iVar24;
  uint uVar25;
  ulong uVar26;
  double *pdVar27;
  double *pdVar28;
  double __x;
  String *pSVar29;
  uint uVar30;
  char *local_410;
  undefined8 local_408;
  undefined8 local_400;
  undefined8 local_3f8;
  
  if (param_1 == (int *)0x0) {
    iVar12 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_0037b400;
    iVar12 = -5;
  }
  local_400 = 0;
  local_3f8 = 0;
  pcVar15 = (char *)cv::String::allocate((String *)&local_400,0x1f);
  cVar21 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar20 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar7 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar6 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar5 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar15 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar15 + 0x18) = uVar7;
  *(undefined2 *)(pcVar15 + 0x1c) = uVar20;
  pcVar15[0x1e] = cVar21;
  *(undefined8 *)pcVar15 = uVar5;
  *(undefined8 *)(pcVar15 + 8) = uVar6;
  cv::error(iVar12,(String *)&local_400,
            "void cvReadRawDataSlice(const CvFileStorage*, CvSeqReader*, int, void*, const char*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc9b);
  cv::String::deallocate((String *)&local_400);
LAB_0037b400:
  if ((param_4 == 0) || (param_2 == 0)) {
    local_400 = 0;
    local_3f8 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_400,0x2b);
    cVar21 = s_Null_pointer_to_reader_or_destin_00471328[0x2a];
    uVar20 = s_Null_pointer_to_reader_or_destin_00471328._40_2_;
    uVar9 = s_Null_pointer_to_reader_or_destin_00471328._24_8_;
    uVar8 = s_Null_pointer_to_reader_or_destin_00471328._16_8_;
    uVar6 = s_Null_pointer_to_reader_or_destin_00471328._8_8_;
    uVar5 = s_Null_pointer_to_reader_or_destin_00471328._0_8_;
    *(undefined8 *)(pcVar15 + 0x20) = s_Null_pointer_to_reader_or_destin_00471328._32_8_;
    *(undefined2 *)(pcVar15 + 0x28) = uVar20;
    pcVar15[0x2a] = cVar21;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar8;
    *(undefined8 *)(pcVar15 + 0x18) = uVar9;
    cv::error(-0x1b,(String *)&local_400,
              "void cvReadRawDataSlice(const CvFileStorage*, CvSeqReader*, int, void*, const char*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc9e);
    cv::String::deallocate((String *)&local_400);
  }
  if ((param_3 != 1) && (*(long *)(param_2 + 8) == 0)) {
    local_400 = 0;
    local_3f8 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_400,0x33);
    cVar21 = s_The_readed_sequence_is_a_scalar__00471358[0x32];
    uVar11 = s_The_readed_sequence_is_a_scalar__00471358._40_8_;
    uVar10 = s_The_readed_sequence_is_a_scalar__00471358._32_8_;
    uVar9 = s_The_readed_sequence_is_a_scalar__00471358._24_8_;
    uVar8 = s_The_readed_sequence_is_a_scalar__00471358._16_8_;
    uVar6 = s_The_readed_sequence_is_a_scalar__00471358._8_8_;
    uVar5 = s_The_readed_sequence_is_a_scalar__00471358._0_8_;
    *(undefined2 *)(pcVar15 + 0x30) = s_The_readed_sequence_is_a_scalar__00471358._48_2_;
    pcVar15[0x32] = cVar21;
    *(undefined8 *)pcVar15 = uVar5;
    *(undefined8 *)(pcVar15 + 8) = uVar6;
    *(undefined8 *)(pcVar15 + 0x10) = uVar8;
    *(undefined8 *)(pcVar15 + 0x18) = uVar9;
    *(undefined8 *)(pcVar15 + 0x20) = uVar10;
    *(undefined8 *)(pcVar15 + 0x28) = uVar11;
    cv::error(-0xc9,(String *)&local_400,
              "void cvReadRawDataSlice(const CvFileStorage*, CvSeqReader*, int, void*, const char*)"
              ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xca1);
    cv::String::deallocate((String *)&local_400);
  }
  if (param_5 == (char *)0x0) {
    iVar12 = 0;
  }
  else {
    sVar16 = strlen(param_5);
    iVar12 = (int)sVar16;
    if (iVar12 == 0) {
      iVar12 = 0;
    }
    else {
      local_400 = local_400 & 0xffffffff00000000;
      if (iVar12 < 1) {
        iVar12 = 0;
      }
      else {
        uVar26 = 0;
        iVar23 = 0;
        do {
          uVar30 = (int)param_5[iVar23] - 0x30;
          iVar24 = (int)uVar26;
          if ((uVar30 & 0xff) < 10) {
            if ((byte)((param_5 + iVar23)[1] - 0x30U) < 10) {
              local_410 = (char *)0x0;
              lVar18 = strtol(param_5 + iVar23,&local_410,10);
              uVar30 = (uint)lVar18;
              iVar23 = ((int)local_410 - (int)param_5) + -1;
            }
            if ((int)uVar30 < 1) {
              local_410 = (char *)0x0;
              local_408 = (char *)0x0;
              pcVar15 = (char *)cv::String::allocate((String *)&local_410,0x1f);
              cVar21 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar20 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar7 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar6 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar5 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar15 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar15 + 0x18) = uVar7;
              *(undefined2 *)(pcVar15 + 0x1c) = uVar20;
              pcVar15[0x1e] = cVar21;
              *(undefined8 *)pcVar15 = uVar5;
              *(undefined8 *)(pcVar15 + 8) = uVar6;
              cv::error(-5,(String *)&local_410,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0)
              ;
              cv::String::deallocate((String *)&local_410);
            }
            *(uint *)((String *)&local_400 + (long)iVar24 * 4) = uVar30;
          }
          else {
            pcVar15 = strchr("ucwsifdr",(int)param_5[iVar23]);
            if (pcVar15 == (char *)0x0) {
              local_410 = pcVar15;
              local_408 = pcVar15;
              pcVar19 = (char *)cv::String::allocate((String *)&local_410,0x1f);
              cVar21 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar20 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar7 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar6 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar5 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar19 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar19 + 0x18) = uVar7;
              *(undefined2 *)(pcVar19 + 0x1c) = uVar20;
              pcVar19[0x1e] = cVar21;
              *(undefined8 *)pcVar19 = uVar5;
              *(undefined8 *)(pcVar19 + 8) = uVar6;
              cv::error(-5,(String *)&local_410,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8)
              ;
              cv::String::deallocate((String *)&local_410);
            }
            uVar22 = -(uVar26 >> 0x1f) & 0xfffffffc00000000 | uVar26 << 2;
            pSVar29 = (String *)&local_400 + uVar22;
            if (*(int *)((String *)&local_400 + uVar22) == 0) {
              *(undefined4 *)((String *)&local_400 + uVar22) = 1;
            }
            iVar13 = (int)pcVar15 + -0x472f10;
            *(int *)((long)&local_400 + uVar22 + 4) = iVar13;
            if (iVar24 == 0) {
              uVar26 = 2;
              *(undefined4 *)((String *)&local_400 + uVar22 + 8) = 0;
            }
            else if (iVar13 == *(int *)((long)&local_408 + uVar22 + 4)) {
              *(int *)((String *)&local_400 + (uVar22 - 8)) =
                   *(int *)((String *)&local_400 + (uVar22 - 8)) + *(int *)pSVar29;
              *(int *)pSVar29 = 0;
            }
            else {
              uVar30 = iVar24 + 2;
              uVar26 = (ulong)uVar30;
              if (0xff < (int)uVar30) {
                local_410 = (char *)0x0;
                local_408 = (char *)0x0;
                pcVar15 = (char *)cv::String::allocate((String *)&local_410,0x20);
                uVar8 = s_Too_long_data_type_specification_00470870._24_8_;
                uVar6 = s_Too_long_data_type_specification_00470870._16_8_;
                uVar5 = s_Too_long_data_type_specification_00470870._8_8_;
                *(undefined8 *)pcVar15 = s_Too_long_data_type_specification_00470870._0_8_;
                *(undefined8 *)(pcVar15 + 8) = uVar5;
                *(undefined8 *)(pcVar15 + 0x10) = uVar6;
                *(undefined8 *)(pcVar15 + 0x18) = uVar8;
                cv::error(-5,(String *)&local_410,"int icvDecodeFormat(const char*, int*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0xbe2);
                cv::String::deallocate((String *)&local_410);
              }
              *(undefined4 *)((String *)&local_400 + (long)(int)uVar30 * 4) = 0;
            }
          }
          iVar23 = iVar23 + 1;
        } while (iVar23 < iVar12);
        iVar12 = (int)uVar26 >> 1;
      }
    }
  }
  iVar23 = 0;
  do {
    do {
    } while (iVar12 < 1);
    pSVar29 = (String *)((long)&local_400 + 4);
    uVar30 = 0;
    do {
      uVar1 = *(uint *)pSVar29;
      uVar3 = *(uint *)(pSVar29 + -4);
      iVar24 = (uVar1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3);
      pdVar28 = (double *)(param_4 + (int)((iVar23 + iVar24) - 1U & -iVar24));
      if (0 < (int)uVar3) {
        uVar4 = param_3 - 1;
        uVar25 = 0;
        pdVar27 = pdVar28;
        do {
          puVar17 = *(uint **)(param_2 + 0x18);
          if ((*puVar17 & 7) == 1) {
            fVar2 = (float)puVar17[4];
            uVar20 = SUB42(fVar2,0);
            cVar21 = SUB41(fVar2,0);
            switch(uVar1) {
            case 0:
              if (0xff < (uint)fVar2) {
                cVar21 = -(0 < (int)fVar2);
              }
LAB_0037ba8c:
              pdVar28 = (double *)((long)pdVar27 + 1);
              *(char *)pdVar27 = cVar21;
              puVar17 = *(uint **)(param_2 + 0x18);
              break;
            case 1:
              if ((0xff < (int)fVar2 + 0x80U) && (cVar21 = '\x7f', (int)fVar2 < 1)) {
                cVar21 = -0x80;
              }
              pdVar28 = (double *)((long)pdVar27 + 1);
              *(char *)pdVar27 = cVar21;
              puVar17 = *(uint **)(param_2 + 0x18);
              break;
            case 2:
              if ((uint)fVar2 < 0x10000) {
                pdVar28 = (double *)((long)pdVar27 + 2);
                *(undefined2 *)pdVar27 = uVar20;
              }
              else {
                pdVar28 = (double *)((long)pdVar27 + 2);
                *(ushort *)pdVar27 = -(ushort)(0 < (int)fVar2);
              }
              break;
            case 3:
              if ((0xffff < (int)fVar2 + 0x8000U) && (uVar20 = 0x7fff, (int)fVar2 < 1)) {
                uVar20 = 0x8000;
              }
              pdVar28 = (double *)((long)pdVar27 + 2);
              *(undefined2 *)pdVar27 = uVar20;
              break;
            case 4:
              pdVar28 = (double *)((long)pdVar27 + 4);
              *(float *)pdVar27 = fVar2;
              break;
            case 5:
              pdVar28 = (double *)((long)pdVar27 + 4);
              *(float *)pdVar27 = (float)(int)fVar2;
              break;
            case 6:
              pdVar28 = pdVar27 + 1;
              *pdVar27 = (double)(int)fVar2;
              break;
            case 7:
              pdVar28 = pdVar27 + 1;
              *pdVar27 = (double)(long)(int)fVar2;
              break;
            default:
              goto switchD_0037b968_default;
            }
          }
          else if ((*puVar17 & 7) == 2) {
            __x = *(double *)(puVar17 + 4);
            switch(uVar1) {
            case 0:
              lVar18 = lrint(__x);
              uVar14 = (uint)lVar18;
              if (0xff < uVar14) {
                uVar14 = -(uint)(0 < (int)uVar14);
              }
              pdVar28 = (double *)((long)pdVar27 + 1);
              *(char *)pdVar27 = (char)uVar14;
              puVar17 = *(uint **)(param_2 + 0x18);
              break;
            case 1:
              lVar18 = lrint(__x);
              cVar21 = (char)lVar18;
              if ((0xff < (int)lVar18 + 0x80U) && (cVar21 = '\x7f', (int)lVar18 < 1)) {
                cVar21 = -0x80;
              }
              goto LAB_0037ba8c;
            case 2:
              lVar18 = lrint(__x);
              uVar14 = (uint)lVar18;
              if (0xffff < uVar14) {
                uVar14 = -(uint)(0 < (int)uVar14);
              }
              puVar17 = *(uint **)(param_2 + 0x18);
              pdVar28 = (double *)((long)pdVar27 + 2);
              *(short *)pdVar27 = (short)uVar14;
              break;
            case 3:
              lVar18 = lrint(__x);
              uVar20 = (undefined2)lVar18;
              if ((0xffff < (int)lVar18 + 0x8000U) && (uVar20 = 0x7fff, (int)lVar18 < 1)) {
                uVar20 = 0x8000;
              }
              pdVar28 = (double *)((long)pdVar27 + 2);
              *(undefined2 *)pdVar27 = uVar20;
              puVar17 = *(uint **)(param_2 + 0x18);
              break;
            case 4:
              lVar18 = lrint(__x);
              puVar17 = *(uint **)(param_2 + 0x18);
              pdVar28 = (double *)((long)pdVar27 + 4);
              *(float *)pdVar27 = (float)lVar18;
              break;
            case 5:
              pdVar28 = (double *)((long)pdVar27 + 4);
              *(float *)pdVar27 = (float)__x;
              break;
            case 6:
              pdVar28 = pdVar27 + 1;
              *pdVar27 = __x;
              break;
            case 7:
              lVar18 = lrint(__x);
              puVar17 = *(uint **)(param_2 + 0x18);
              pdVar28 = pdVar27 + 1;
              *pdVar27 = (double)(long)(int)lVar18;
              break;
            default:
              goto switchD_0037b968_default;
            }
          }
          else {
            local_410 = (char *)0x0;
            local_408 = (char *)0x0;
            pcVar15 = (char *)cv::String::allocate((String *)&local_410,0x2e);
            uVar7 = s_The_sequence_element_is_not_a_nu_00471390._40_4_;
            *(undefined8 *)(pcVar15 + 0x20) = s_The_sequence_element_is_not_a_nu_00471390._32_8_;
            *(undefined4 *)(pcVar15 + 0x28) = uVar7;
            *(undefined2 *)(pcVar15 + 0x2c) = s_The_sequence_element_is_not_a_nu_00471390._44_2_;
            uVar8 = s_The_sequence_element_is_not_a_nu_00471390._24_8_;
            uVar6 = s_The_sequence_element_is_not_a_nu_00471390._16_8_;
            uVar5 = s_The_sequence_element_is_not_a_nu_00471390._8_8_;
            *(undefined8 *)pcVar15 = s_The_sequence_element_is_not_a_nu_00471390._0_8_;
            *(undefined8 *)(pcVar15 + 8) = uVar5;
            *(undefined8 *)(pcVar15 + 0x10) = uVar6;
            *(undefined8 *)(pcVar15 + 0x18) = uVar8;
            cv::error(-2,(String *)&local_410,
                      "void cvReadRawDataSlice(const CvFileStorage*, CvSeqReader*, int, void*, const char*)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd13);
            cv::String::deallocate((String *)&local_410);
            puVar17 = *(uint **)(param_2 + 0x18);
            pdVar28 = pdVar27;
          }
          *(uint **)(param_2 + 0x18) = puVar17 + 8;
          if (*(uint **)(param_2 + 0x28) <= puVar17 + 8) {
            cvChangeSeqBlock(param_2,1);
          }
          if (uVar25 == uVar4) {
            if ((uVar3 - 1 != uVar25) || (iVar12 - 1U != uVar30)) {
              local_410 = (char *)0x0;
              local_408 = (char *)0x0;
              pcVar15 = (char *)cv::String::allocate((String *)&local_410,0x3c);
              uVar7 = s_The_sequence_slice_does_not_fit_a_004713c0._56_4_;
              uVar11 = s_The_sequence_slice_does_not_fit_a_004713c0._40_8_;
              uVar10 = s_The_sequence_slice_does_not_fit_a_004713c0._32_8_;
              uVar9 = s_The_sequence_slice_does_not_fit_a_004713c0._24_8_;
              uVar8 = s_The_sequence_slice_does_not_fit_a_004713c0._16_8_;
              uVar6 = s_The_sequence_slice_does_not_fit_a_004713c0._8_8_;
              uVar5 = s_The_sequence_slice_does_not_fit_a_004713c0._0_8_;
              *(undefined8 *)(pcVar15 + 0x30) = s_The_sequence_slice_does_not_fit_a_004713c0._48_8_;
              *(undefined4 *)(pcVar15 + 0x38) = uVar7;
              *(undefined8 *)pcVar15 = uVar5;
              *(undefined8 *)(pcVar15 + 8) = uVar6;
              *(undefined8 *)(pcVar15 + 0x10) = uVar8;
              *(undefined8 *)(pcVar15 + 0x18) = uVar9;
              *(undefined8 *)(pcVar15 + 0x20) = uVar10;
              *(undefined8 *)(pcVar15 + 0x28) = uVar11;
              cv::error(-0xc9,(String *)&local_410,
                        "void cvReadRawDataSlice(const CvFileStorage*, CvSeqReader*, int, void*, const char*)"
                        ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd21
                       );
              cv::String::deallocate((String *)&local_410);
            }
            if (*(long *)(param_2 + 8) == 0) {
              *(long *)(param_2 + 0x18) = *(long *)(param_2 + 0x18) + -0x20;
            }
switchD_0037b968_default:
            return;
          }
          param_3 = param_3 + -1;
          uVar25 = uVar25 + 1;
          pdVar27 = pdVar28;
        } while (uVar25 != uVar3);
      }
      iVar23 = (int)pdVar28 - (int)param_4;
      pSVar29 = pSVar29 + 8;
      uVar30 = uVar30 + 1;
    } while (pSVar29 != (String *)&local_400 + (ulong)(iVar12 - 1U) * 8 + 0xc);
  } while( true );
}


==================================================================

### FUNC 0037bd04 (2636 bytes) name=FUN_0037bd04

long FUN_0037bd04(undefined8 param_1,undefined8 param_2)

{
  int *piVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  bool bVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint *puVar13;
  size_t sVar14;
  char *pcVar15;
  void *__dest;
  long lVar16;
  long lVar17;
  uint *puVar18;
  char *pcVar19;
  long lVar20;
  uint uVar21;
  ulong uVar22;
  int iVar23;
  int iVar24;
  ulong uVar25;
  char *__s;
  uint uVar26;
  int iVar27;
  ulong uVar28;
  uint uVar29;
  uint local_230;
  undefined8 local_220;
  undefined8 uStack_218;
  char *local_210;
  undefined8 local_208;
  undefined8 local_200;
  uint *local_1f8 [63];
  
  puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"width");
  if (puVar13 == (uint *)0x0) {
    local_230 = 0;
LAB_0037bd78:
    puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"height");
    if (puVar13 != (uint *)0x0) goto LAB_0037bd90;
LAB_0037c5fc:
    uVar28 = 0;
LAB_0037bdac:
    puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    if (puVar13 != (uint *)0x0) goto LAB_0037bdc4;
LAB_0037c5d4:
    __s = (char *)0x0;
  }
  else {
    if ((*puVar13 & 7) != 1) {
      local_230 = 0x7fffffff;
      if ((*puVar13 & 7) == 2) {
        lVar16 = lrint(*(double *)(puVar13 + 4));
        local_230 = (uint)lVar16;
      }
      goto LAB_0037bd78;
    }
    local_230 = puVar13[4];
    puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"height");
    if (puVar13 == (uint *)0x0) goto LAB_0037c5fc;
LAB_0037bd90:
    if ((*puVar13 & 7) != 1) {
      uVar28 = 0x7fffffff;
      if ((*puVar13 & 7) == 2) {
        uVar28 = lrint(*(double *)(puVar13 + 4));
        uVar28 = uVar28 & 0xffffffff;
      }
      goto LAB_0037bdac;
    }
    uVar28 = (ulong)puVar13[4];
    puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    if (puVar13 == (uint *)0x0) goto LAB_0037c5d4;
LAB_0037bdc4:
    if ((*puVar13 & 7) == 3) {
      __s = *(char **)(puVar13 + 6);
    }
    else {
      __s = (char *)0x0;
    }
  }
  puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"origin");
  iVar27 = (int)uVar28;
  if (((((puVar13 == (uint *)0x0) || ((*puVar13 & 7) != 3)) || (iVar27 == 0)) ||
      ((local_230 == 0 || (__s == (char *)0x0)))) || (*(long *)(puVar13 + 6) == 0)) {
    local_200 = (uint *)0x0;
    local_1f8[0] = (uint *)0x0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_200,0x2d);
    cVar6 = s_Some_of_essential_image_attribut_00471400[0x2c];
    uVar4 = s_Some_of_essential_image_attribut_00471400._40_4_;
    uVar8 = s_Some_of_essential_image_attribut_00471400._24_8_;
    uVar7 = s_Some_of_essential_image_attribut_00471400._16_8_;
    uVar3 = s_Some_of_essential_image_attribut_00471400._8_8_;
    uVar2 = s_Some_of_essential_image_attribut_00471400._0_8_;
    *(undefined8 *)(pcVar15 + 0x20) = s_Some_of_essential_image_attribut_00471400._32_8_;
    *(undefined4 *)(pcVar15 + 0x28) = uVar4;
    pcVar15[0x2c] = cVar6;
    *(undefined8 *)pcVar15 = uVar2;
    *(undefined8 *)(pcVar15 + 8) = uVar3;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
    cv::error(-2,(String *)&local_200,"void* icvReadImage(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf5d);
    cv::String::deallocate((String *)&local_200);
    if (__s != (char *)0x0) {
      sVar14 = strlen(__s);
      iVar10 = (int)sVar14;
      bVar9 = iVar10 == 0;
      if (!bVar9) goto LAB_0037be2c;
    }
  }
  else {
    sVar14 = strlen(__s);
    iVar10 = (int)sVar14;
    bVar9 = false;
    if (iVar10 != 0) {
LAB_0037be2c:
      local_200 = (uint *)((ulong)local_200 & 0xffffffff00000000);
      if (!bVar9 && -1 < iVar10) {
        uVar25 = 0;
        iVar23 = 0;
        do {
          uVar29 = (int)__s[iVar23] - 0x30;
          iVar24 = (int)uVar25;
          if ((uVar29 & 0xff) < 10) {
            if ((byte)((__s + iVar23)[1] - 0x30U) < 10) {
              local_210 = (char *)0x0;
              lVar16 = strtol(__s + iVar23,&local_210,10);
              uVar29 = (uint)lVar16;
              iVar23 = ((int)local_210 - (int)__s) + -1;
            }
            if ((int)uVar29 < 1) {
              local_210 = (char *)0x0;
              local_208 = (char *)0x0;
              pcVar15 = (char *)cv::String::allocate((String *)&local_210,0x1f);
              cVar6 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar5 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar4 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar3 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar2 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar15 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar15 + 0x18) = uVar4;
              *(undefined2 *)(pcVar15 + 0x1c) = uVar5;
              pcVar15[0x1e] = cVar6;
              *(undefined8 *)pcVar15 = uVar2;
              *(undefined8 *)(pcVar15 + 8) = uVar3;
              cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0)
              ;
              cv::String::deallocate((String *)&local_210);
            }
            *(uint *)((long)local_1f8 + (long)iVar24 * 4 + -8) = uVar29;
          }
          else {
            pcVar15 = strchr("ucwsifdr",(int)__s[iVar23]);
            if (pcVar15 == (char *)0x0) {
              local_210 = pcVar15;
              local_208 = pcVar15;
              pcVar19 = (char *)cv::String::allocate((String *)&local_210,0x1f);
              cVar6 = s_Invalid_data_type_specification_00470850[0x1e];
              uVar5 = s_Invalid_data_type_specification_00470850._28_2_;
              uVar4 = s_Invalid_data_type_specification_00470850._24_4_;
              uVar3 = s_Invalid_data_type_specification_00470850._8_8_;
              uVar2 = s_Invalid_data_type_specification_00470850._0_8_;
              *(undefined8 *)(pcVar19 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
              *(undefined4 *)(pcVar19 + 0x18) = uVar4;
              *(undefined2 *)(pcVar19 + 0x1c) = uVar5;
              pcVar19[0x1e] = cVar6;
              *(undefined8 *)pcVar19 = uVar2;
              *(undefined8 *)(pcVar19 + 8) = uVar3;
              cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8)
              ;
              cv::String::deallocate((String *)&local_210);
            }
            uVar22 = -(uVar25 >> 0x1f) & 0xfffffffc00000000 | uVar25 << 2;
            piVar1 = (int *)((long)local_1f8 + (uVar22 - 8));
            if (*(int *)((long)local_1f8 + (uVar22 - 8)) == 0) {
              *(undefined4 *)((long)local_1f8 + (uVar22 - 8)) = 1;
            }
            iVar11 = (int)pcVar15 + -0x472f10;
            *(int *)((long)local_1f8 + (uVar22 - 4)) = iVar11;
            if (iVar24 == 0) {
              uVar25 = 2;
              *(undefined4 *)((long)local_1f8 + uVar22) = 0;
            }
            else if (iVar11 == *(int *)((long)&local_208 + uVar22 + 4)) {
              *(int *)((long)&local_208 + uVar22) = *(int *)((long)&local_208 + uVar22) + *piVar1;
              *piVar1 = 0;
            }
            else {
              uVar29 = iVar24 + 2;
              uVar25 = (ulong)uVar29;
              if ((int)uVar29 < 0x100) {
                lVar16 = (long)(int)uVar29 * 4;
              }
              else {
                local_210 = (char *)0x0;
                local_208 = (char *)0x0;
                pcVar15 = (char *)cv::String::allocate((String *)&local_210,0x20);
                uVar7 = s_Too_long_data_type_specification_00470870._24_8_;
                uVar3 = s_Too_long_data_type_specification_00470870._16_8_;
                uVar2 = s_Too_long_data_type_specification_00470870._8_8_;
                *(undefined8 *)pcVar15 = s_Too_long_data_type_specification_00470870._0_8_;
                *(undefined8 *)(pcVar15 + 8) = uVar2;
                *(undefined8 *)(pcVar15 + 0x10) = uVar3;
                *(undefined8 *)(pcVar15 + 0x18) = uVar7;
                cv::error(-5,(String *)&local_210,"int icvDecodeFormat(const char*, int*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0xbe2);
                cv::String::deallocate((String *)&local_210);
                lVar16 = (long)(int)uVar29 << 2;
              }
              *(undefined4 *)((long)local_1f8 + lVar16 + -8) = 0;
            }
          }
          iVar23 = iVar23 + 1;
        } while (iVar23 < iVar10);
        if (((int)uVar25 >> 1 == 1) && ((int)local_200 < 5)) goto LAB_0037bf38;
      }
    }
  }
  local_210 = (char *)0x0;
  local_208 = (char *)0x0;
  pcVar15 = (char *)cv::String::allocate((String *)&local_210,0x21);
  uVar8 = s_Too_complex_format_for_the_matri_00470df8._24_8_;
  uVar7 = s_Too_complex_format_for_the_matri_00470df8._16_8_;
  uVar3 = s_Too_complex_format_for_the_matri_00470df8._8_8_;
  uVar2 = s_Too_complex_format_for_the_matri_00470df8._0_8_;
  pcVar15[0x20] = s_Too_complex_format_for_the_matri_00470df8[0x20];
  *(undefined8 *)pcVar15 = uVar2;
  *(undefined8 *)(pcVar15 + 8) = uVar3;
  *(undefined8 *)(pcVar15 + 0x10) = uVar7;
  *(undefined8 *)(pcVar15 + 0x18) = uVar8;
  cv::error(-2,(String *)&local_210,"int icvDecodeSimpleFormat(const char*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc0d);
  cv::String::deallocate((String *)&local_210);
LAB_0037bf38:
  uVar29 = (local_200._4_4_ & 7) + ((int)local_200 + -1) * 8;
  puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"layout");
  if (puVar13 != (uint *)0x0) {
    if ((*puVar13 & 7) == 3) {
      pcVar15 = *(char **)(puVar13 + 6);
    }
    else {
      pcVar15 = (char *)0x0;
    }
    iVar10 = strcmp(pcVar15,"interleaved");
    if (iVar10 != 0) {
      local_200 = (uint *)0x0;
      local_1f8[0] = (uint *)0x0;
      pcVar15 = (char *)cv::String::allocate((String *)&local_200,0x23);
      cVar6 = s_Only_interleaved_images_can_be_r_00471430[0x22];
      uVar8 = s_Only_interleaved_images_can_be_r_00471430._24_8_;
      uVar7 = s_Only_interleaved_images_can_be_r_00471430._16_8_;
      uVar3 = s_Only_interleaved_images_can_be_r_00471430._8_8_;
      uVar2 = s_Only_interleaved_images_can_be_r_00471430._0_8_;
      *(undefined2 *)(pcVar15 + 0x20) = s_Only_interleaved_images_can_be_r_00471430._32_2_;
      pcVar15[0x22] = cVar6;
      *(undefined8 *)pcVar15 = uVar2;
      *(undefined8 *)(pcVar15 + 8) = uVar3;
      *(undefined8 *)(pcVar15 + 0x10) = uVar7;
      *(undefined8 *)(pcVar15 + 0x18) = uVar8;
      cv::error(-2,(String *)&local_200,"void* icvReadImage(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf62);
      cv::String::deallocate((String *)&local_200);
    }
  }
  puVar13 = (uint *)cvGetFileNodeByName(param_1,param_2,"data");
  if (puVar13 == (uint *)0x0) {
    local_200 = puVar13;
    local_1f8[0] = puVar13;
    pcVar15 = (char *)cv::String::allocate((String *)&local_200,0x2b);
    cVar6 = s_The_image_data_is_not_found_in_f_00471458[0x2a];
    uVar5 = s_The_image_data_is_not_found_in_f_00471458._40_2_;
    uVar8 = s_The_image_data_is_not_found_in_f_00471458._24_8_;
    uVar7 = s_The_image_data_is_not_found_in_f_00471458._16_8_;
    uVar3 = s_The_image_data_is_not_found_in_f_00471458._8_8_;
    uVar2 = s_The_image_data_is_not_found_in_f_00471458._0_8_;
    *(undefined8 *)(pcVar15 + 0x20) = s_The_image_data_is_not_found_in_f_00471458._32_8_;
    *(undefined2 *)(pcVar15 + 0x28) = uVar5;
    pcVar15[0x2a] = cVar6;
    *(undefined8 *)pcVar15 = uVar2;
    *(undefined8 *)(pcVar15 + 8) = uVar3;
    *(undefined8 *)(pcVar15 + 0x10) = uVar7;
    *(undefined8 *)(pcVar15 + 0x18) = uVar8;
    cv::error(-2,(String *)&local_200,"void* icvReadImage(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf66);
    cv::String::deallocate((String *)&local_200);
  }
  if ((*puVar13 & 7) < 5) {
    uVar12 = (uint)((*puVar13 & 7) != 0);
  }
  else {
    uVar12 = *(uint *)(*(long *)(puVar13 + 4) + 0x28);
  }
  iVar10 = (uVar29 >> 3 & 0x1ff) + 1;
  uVar26 = local_230 * iVar27 * iVar10;
  if (uVar26 != uVar12) {
    local_200 = (uint *)0x0;
    local_1f8[0] = (uint *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_200,0x3f);
    memcpy(__dest,"The matrix size does not match to the number of stored elements",0x3f);
    cv::error(-0xd1,(String *)&local_200,"void* icvReadImage(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xf6a);
    cv::String::deallocate((String *)&local_200);
  }
  uVar29 = uVar29 & 7;
  if ((uVar29 - 3 < 2) || (uVar12 = 0, uVar29 == 1)) {
    uVar12 = 0x80000000;
  }
  lVar16 = cvCreateImage((ulong)local_230 | uVar28 << 0x20,
                         uVar12 | ((uint)(0x88442211L >> (uVar29 << 2)) & 0xf) << 3,iVar10);
  lVar17 = cvGetFileNodeByName(param_1,param_2,&DAT_00471070);
  if (lVar17 != 0) {
    puVar18 = (uint *)cvGetFileNodeByName(param_1,lVar17,"x");
    if (puVar18 == (uint *)0x0) {
      uVar12 = 0;
    }
    else if ((*puVar18 & 7) == 1) {
      uVar12 = puVar18[4];
    }
    else {
      uVar12 = 0x7fffffff;
      if ((*puVar18 & 7) == 2) {
        lVar20 = lrint(*(double *)(puVar18 + 4));
        uVar12 = (uint)lVar20;
      }
    }
    puVar18 = (uint *)cvGetFileNodeByName(param_1,lVar17,&DAT_00452188);
    if (puVar18 == (uint *)0x0) {
      uVar21 = 0;
    }
    else if ((*puVar18 & 7) == 1) {
      uVar21 = puVar18[4];
    }
    else {
      uVar21 = 0x7fffffff;
      if ((*puVar18 & 7) == 2) {
        lVar20 = lrint(*(double *)(puVar18 + 4));
        uVar21 = (uint)lVar20;
      }
    }
    local_220 = CONCAT44(uVar21,uVar12);
    puVar18 = (uint *)cvGetFileNodeByName(param_1,lVar17,"width");
    if (puVar18 == (uint *)0x0) {
      uVar12 = 0;
    }
    else if ((*puVar18 & 7) == 1) {
      uVar12 = puVar18[4];
    }
    else {
      uVar12 = 0x7fffffff;
      if ((*puVar18 & 7) == 2) {
        lVar20 = lrint(*(double *)(puVar18 + 4));
        uVar12 = (uint)lVar20;
      }
    }
    puVar18 = (uint *)cvGetFileNodeByName(param_1,lVar17,"height");
    if (puVar18 == (uint *)0x0) {
      uVar21 = 0;
    }
    else if ((*puVar18 & 7) == 1) {
      uVar21 = puVar18[4];
    }
    else {
      uVar21 = 0x7fffffff;
      if ((*puVar18 & 7) == 2) {
        lVar20 = lrint(*(double *)(puVar18 + 4));
        uVar21 = (uint)lVar20;
      }
    }
    uStack_218 = CONCAT44(uVar21,uVar12);
    puVar18 = (uint *)cvGetFileNodeByName(param_1,lVar17,&DAT_00471078);
    if (puVar18 == (uint *)0x0) {
      uVar28 = 0;
    }
    else if ((*puVar18 & 7) == 1) {
      uVar28 = (ulong)puVar18[4];
    }
    else {
      uVar28 = 0x7fffffff;
      if ((*puVar18 & 7) == 2) {
        uVar28 = lrint(*(double *)(puVar18 + 4));
        uVar28 = uVar28 & 0xffffffff;
      }
    }
    cvSetImageROI(lVar16,local_220,uStack_218);
    cvSetImageCOI(lVar16,uVar28);
  }
  if ((iVar10 << (ulong)((uint)(0xfa50L >> (uVar29 << 1)) & 3)) * local_230 ==
      *(int *)(lVar16 + 0x60)) {
    iVar27 = 1;
    cvStartReadRawData(param_1,puVar13,(String *)&local_200);
  }
  else {
    uVar26 = iVar10 * local_230;
    cvStartReadRawData(param_1,puVar13,(String *)&local_200);
    if (iVar27 < 1) {
      return lVar16;
    }
  }
  iVar10 = 0;
  do {
    iVar23 = iVar10 * *(int *)(lVar16 + 0x60);
    iVar10 = iVar10 + 1;
    cvReadRawDataSlice(param_1,(String *)&local_200,uVar26,*(long *)(lVar16 + 0x58) + (long)iVar23,
                       __s);
  } while (iVar10 < iVar27);
  return lVar16;
}


==================================================================

### FUNC 0037c7f0 (244 bytes) name=cvReadRawData

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvReadRawData(undefined8 param_1,uint *param_2,long param_3,undefined8 param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  undefined8 *puVar8;
  undefined4 uVar9;
  undefined8 local_40;
  undefined8 local_38;
  
  if ((param_2 == (uint *)0x0) || (param_3 == 0)) {
    local_40 = 0;
    local_38 = 0;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_40,0x36);
    uVar7 = DAT_004714fc;
    uVar6 = DAT_004714f0;
    uVar5 = DAT_004714e8;
    uVar4 = DAT_004714e0;
    uVar3 = DAT_004714d8;
    uVar2 = DAT_004714d0;
    uVar1 = _LAB_004714c8;
    *(undefined4 *)(puVar8 + 6) = DAT_004714f8;
    *(undefined2 *)((long)puVar8 + 0x34) = uVar7;
    *puVar8 = uVar1;
    puVar8[1] = uVar2;
    puVar8[2] = uVar3;
    puVar8[3] = uVar4;
    puVar8[4] = uVar5;
    puVar8[5] = uVar6;
    cv::error(-0x1b,(String *)&local_40,
              "void cvReadRawData(const CvFileStorage*, const CvFileNode*, void*, const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd2f);
    cv::String::deallocate((String *)&local_40);
  }
  cvStartReadRawData(param_1,param_2,(String *)&local_40);
  uVar9 = 1;
  if ((*param_2 & 7) == 5) {
    uVar9 = *(undefined4 *)(*(long *)(param_2 + 4) + 0x28);
  }
  cvReadRawDataSlice(param_1,(String *)&local_40,uVar9,param_3,param_4);
  return;
}


==================================================================

### FUNC 0037c8f8 (2080 bytes) name=FUN_0037c8f8

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

long FUN_0037c8f8(undefined8 param_1,undefined8 param_2)

{
  int iVar1;
  int *piVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined1 uVar10;
  bool bVar11;
  int iVar12;
  uint uVar13;
  uint *puVar14;
  uint *puVar15;
  undefined8 *puVar16;
  size_t sVar17;
  char *pcVar18;
  long lVar19;
  char *pcVar20;
  void *__dest;
  uint uVar21;
  int iVar22;
  ulong uVar23;
  ulong uVar24;
  char *__s;
  uint uVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  char *local_290;
  char *local_288;
  undefined8 local_280 [15];
  int aiStack_208 [2];
  undefined8 local_200;
  uint *local_1f8 [63];
  
  puVar14 = (uint *)cvGetFileNodeByName(param_1,param_2,"sizes");
  puVar15 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
  if (puVar15 == (uint *)0x0) {
    uVar23 = 1;
    __s = (char *)0x0;
LAB_0037d020:
    local_200 = (uint *)0x0;
    local_1f8[0] = (uint *)0x0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_200,0x2e);
    uVar6 = s_Some_of_essential_matrix_attribu_00471500._44_2_;
    uVar5 = s_Some_of_essential_matrix_attribu_00471500._40_4_;
    uVar9 = s_Some_of_essential_matrix_attribu_00471500._24_8_;
    uVar8 = s_Some_of_essential_matrix_attribu_00471500._16_8_;
    uVar4 = s_Some_of_essential_matrix_attribu_00471500._8_8_;
    uVar3 = s_Some_of_essential_matrix_attribu_00471500._0_8_;
    *(undefined8 *)(pcVar18 + 0x20) = s_Some_of_essential_matrix_attribu_00471500._32_8_;
    *(undefined4 *)(pcVar18 + 0x28) = uVar5;
    *(undefined2 *)(pcVar18 + 0x2c) = uVar6;
    *(undefined8 *)pcVar18 = uVar3;
    *(undefined8 *)(pcVar18 + 8) = uVar4;
    *(undefined8 *)(pcVar18 + 0x10) = uVar8;
    *(undefined8 *)(pcVar18 + 0x18) = uVar9;
    cv::error(-2,(String *)&local_200,"void* icvReadMatND(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xe38);
    cv::String::deallocate((String *)&local_200);
  }
  else {
    if ((*puVar15 & 7) != 3) {
      __s = (char *)0x0;
      uVar23 = 1;
      goto LAB_0037d020;
    }
    __s = *(char **)(puVar15 + 6);
    uVar25 = (uint)(__s == (char *)0x0 || puVar14 == (uint *)0x0);
    uVar23 = (ulong)uVar25;
    if (uVar25 != 0) {
      uVar23 = (ulong)(__s == (char *)0x0);
      goto LAB_0037d020;
    }
  }
  if ((*puVar14 & 7) == 5) {
    iVar12 = *(int *)(*(long *)(puVar14 + 4) + 0x28);
    if (0x1f < iVar12 - 1U) goto LAB_0037c9a4;
  }
  else if ((*puVar14 & 7) == 1) {
    iVar12 = 1;
  }
  else {
    iVar12 = -1;
LAB_0037c9a4:
    local_200 = (uint *)0x0;
    local_1f8[0] = (uint *)0x0;
    puVar16 = (undefined8 *)cv::String::allocate((String *)&local_200,0x2d);
    uVar10 = DAT_0047155c;
    uVar5 = DAT_00471558;
    uVar9 = DAT_00471548;
    uVar8 = DAT_00471540;
    uVar4 = _LAB_00471538;
    uVar3 = _LAB_00471530;
    puVar16[4] = DAT_00471550;
    *(undefined4 *)(puVar16 + 5) = uVar5;
    *(undefined1 *)((long)puVar16 + 0x2c) = uVar10;
    *puVar16 = uVar3;
    puVar16[1] = uVar4;
    puVar16[2] = uVar8;
    puVar16[3] = uVar9;
    cv::error(-0xd4,(String *)&local_200,"void* icvReadMatND(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xe3e);
    cv::String::deallocate((String *)&local_200);
  }
  cvReadRawData(param_1,puVar14,local_280,&DAT_00470fa8);
  if (__s == (char *)0x0) {
LAB_0037cae0:
    local_290 = (char *)0x0;
    local_288 = (char *)0x0;
    pcVar18 = (char *)cv::String::allocate((String *)&local_290,0x21);
    uVar9 = s_Too_complex_format_for_the_matri_00470df8._24_8_;
    uVar8 = s_Too_complex_format_for_the_matri_00470df8._16_8_;
    uVar4 = s_Too_complex_format_for_the_matri_00470df8._8_8_;
    uVar3 = s_Too_complex_format_for_the_matri_00470df8._0_8_;
    pcVar18[0x20] = s_Too_complex_format_for_the_matri_00470df8[0x20];
    *(undefined8 *)pcVar18 = uVar3;
    *(undefined8 *)(pcVar18 + 8) = uVar4;
    *(undefined8 *)(pcVar18 + 0x10) = uVar8;
    *(undefined8 *)(pcVar18 + 0x18) = uVar9;
    cv::error(-2,(String *)&local_290,"int icvDecodeSimpleFormat(const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc0d);
    cv::String::deallocate((String *)&local_290);
  }
  else {
    sVar17 = strlen(__s);
    iVar1 = (int)sVar17;
    if (((iVar1 == 0) || ((int)uVar23 != 0)) ||
       (local_200 = (uint *)((ulong)local_200 & 0xffffffff00000000), uVar24 = uVar23, iVar1 < 1))
    goto LAB_0037cae0;
    do {
      iVar22 = (int)uVar23;
      uVar25 = (int)__s[iVar22] - 0x30;
      iVar26 = (int)uVar24;
      if ((uVar25 & 0xff) < 10) {
        if ((byte)((__s + iVar22)[1] - 0x30U) < 10) {
          local_290 = (char *)0x0;
          lVar19 = strtol(__s + iVar22,&local_290,10);
          uVar25 = (uint)lVar19;
          iVar22 = ((int)local_290 - (int)__s) + -1;
        }
        if ((int)uVar25 < 1) {
          local_290 = (char *)0x0;
          local_288 = (char *)0x0;
          pcVar18 = (char *)cv::String::allocate((String *)&local_290,0x1f);
          cVar7 = s_Invalid_data_type_specification_00470850[0x1e];
          uVar6 = s_Invalid_data_type_specification_00470850._28_2_;
          uVar5 = s_Invalid_data_type_specification_00470850._24_4_;
          uVar4 = s_Invalid_data_type_specification_00470850._8_8_;
          uVar3 = s_Invalid_data_type_specification_00470850._0_8_;
          *(undefined8 *)(pcVar18 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
          *(undefined4 *)(pcVar18 + 0x18) = uVar5;
          *(undefined2 *)(pcVar18 + 0x1c) = uVar6;
          pcVar18[0x1e] = cVar7;
          *(undefined8 *)pcVar18 = uVar3;
          *(undefined8 *)(pcVar18 + 8) = uVar4;
          cv::error(-5,(String *)&local_290,"int icvDecodeFormat(const char*, int*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd0);
          cv::String::deallocate((String *)&local_290);
        }
        *(uint *)((long)local_1f8 + (long)iVar26 * 4 + -8) = uVar25;
      }
      else {
        pcVar18 = strchr("ucwsifdr",(int)__s[iVar22]);
        if (pcVar18 == (char *)0x0) {
          local_290 = pcVar18;
          local_288 = pcVar18;
          pcVar20 = (char *)cv::String::allocate((String *)&local_290,0x1f);
          cVar7 = s_Invalid_data_type_specification_00470850[0x1e];
          uVar6 = s_Invalid_data_type_specification_00470850._28_2_;
          uVar5 = s_Invalid_data_type_specification_00470850._24_4_;
          uVar4 = s_Invalid_data_type_specification_00470850._8_8_;
          uVar3 = s_Invalid_data_type_specification_00470850._0_8_;
          *(undefined8 *)(pcVar20 + 0x10) = s_Invalid_data_type_specification_00470850._16_8_;
          *(undefined4 *)(pcVar20 + 0x18) = uVar5;
          *(undefined2 *)(pcVar20 + 0x1c) = uVar6;
          pcVar20[0x1e] = cVar7;
          *(undefined8 *)pcVar20 = uVar3;
          *(undefined8 *)(pcVar20 + 8) = uVar4;
          cv::error(-5,(String *)&local_290,"int icvDecodeFormat(const char*, int*, int)",
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbd8);
          cv::String::deallocate((String *)&local_290);
        }
        uVar23 = -(uVar24 >> 0x1f) & 0xfffffffc00000000 | uVar24 << 2;
        piVar2 = (int *)((long)local_1f8 + (uVar23 - 8));
        if (*(int *)((long)local_1f8 + (uVar23 - 8)) == 0) {
          *(undefined4 *)((long)local_1f8 + (uVar23 - 8)) = 1;
        }
        iVar27 = (int)pcVar18 + -0x472f10;
        *(int *)((long)local_1f8 + (uVar23 - 4)) = iVar27;
        if (iVar26 == 0) {
          uVar24 = 2;
          *(undefined4 *)((long)local_1f8 + uVar23) = 0;
        }
        else if (iVar27 == *(int *)((long)aiStack_208 + uVar23 + 4)) {
          *(int *)((long)aiStack_208 + uVar23) = *(int *)((long)aiStack_208 + uVar23) + *piVar2;
          *piVar2 = 0;
        }
        else {
          uVar25 = iVar26 + 2;
          uVar24 = (ulong)uVar25;
          if ((int)uVar25 < 0x100) {
            lVar19 = (long)(int)uVar25 * 4;
          }
          else {
            local_290 = (char *)0x0;
            local_288 = (char *)0x0;
            pcVar18 = (char *)cv::String::allocate((String *)&local_290,0x20);
            uVar8 = s_Too_long_data_type_specification_00470870._24_8_;
            uVar4 = s_Too_long_data_type_specification_00470870._16_8_;
            uVar3 = s_Too_long_data_type_specification_00470870._8_8_;
            *(undefined8 *)pcVar18 = s_Too_long_data_type_specification_00470870._0_8_;
            *(undefined8 *)(pcVar18 + 8) = uVar3;
            *(undefined8 *)(pcVar18 + 0x10) = uVar4;
            *(undefined8 *)(pcVar18 + 0x18) = uVar8;
            cv::error(-5,(String *)&local_290,"int icvDecodeFormat(const char*, int*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xbe2);
            cv::String::deallocate((String *)&local_290);
            lVar19 = (long)(int)uVar25 << 2;
          }
          *(undefined4 *)((long)local_1f8 + lVar19 + -8) = 0;
        }
      }
      uVar23 = (ulong)(iVar22 + 1U);
    } while ((int)(iVar22 + 1U) < iVar1);
    if (((int)uVar24 >> 1 != 1) || (4 < (int)local_200)) goto LAB_0037cae0;
  }
  uVar25 = (local_200._4_4_ & 7) + ((int)local_200 + -1) * 8;
  puVar14 = (uint *)cvGetFileNodeByName(param_1,param_2,"data");
  if (puVar14 == (uint *)0x0) {
    local_200 = puVar14;
    local_1f8[0] = puVar14;
    pcVar18 = (char *)cv::String::allocate((String *)&local_200,0x2c);
    uVar5 = s_The_matrix_data_is_not_found_in_f_00471560._40_4_;
    uVar9 = s_The_matrix_data_is_not_found_in_f_00471560._24_8_;
    uVar8 = s_The_matrix_data_is_not_found_in_f_00471560._16_8_;
    uVar4 = s_The_matrix_data_is_not_found_in_f_00471560._8_8_;
    uVar3 = s_The_matrix_data_is_not_found_in_f_00471560._0_8_;
    *(undefined8 *)(pcVar18 + 0x20) = s_The_matrix_data_is_not_found_in_f_00471560._32_8_;
    *(undefined4 *)(pcVar18 + 0x28) = uVar5;
    *(undefined8 *)pcVar18 = uVar3;
    *(undefined8 *)(pcVar18 + 8) = uVar4;
    *(undefined8 *)(pcVar18 + 0x10) = uVar8;
    *(undefined8 *)(pcVar18 + 0x18) = uVar9;
    cv::error(-2,(String *)&local_200,"void* icvReadMatND(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xe45);
    cv::String::deallocate((String *)&local_200);
  }
  uVar21 = (uVar25 >> 3 & 0x1ff) + 1;
  if (0 < iVar12) {
    iVar1 = (iVar12 - 4U >> 2) + 1;
    iVar22 = iVar1 * 4;
    if (iVar12 - 1U < 7) {
      iVar22 = 0;
    }
    else {
      if (iVar1 != 1) {
        iVar26 = (int)local_280[0] * (int)local_280[2];
        iVar27 = (int)((ulong)local_280[0] >> 0x20) * (int)((ulong)local_280[2] >> 0x20);
        local_280[0] = CONCAT44(iVar27,iVar26);
        iVar28 = (int)local_280[1] * (int)local_280[3];
        iVar29 = (int)((ulong)local_280[1] >> 0x20) * (int)((ulong)local_280[3] >> 0x20);
        local_280[1] = CONCAT44(iVar29,iVar28);
        if (iVar1 != 2) {
          iVar26 = iVar26 * (int)local_280[4];
          iVar27 = iVar27 * (int)((ulong)local_280[4] >> 0x20);
          local_280[0] = CONCAT44(iVar27,iVar26);
          iVar28 = iVar28 * (int)local_280[5];
          iVar29 = iVar29 * (int)((ulong)local_280[5] >> 0x20);
          local_280[1] = CONCAT44(iVar29,iVar28);
          if (iVar1 != 3) {
            iVar26 = iVar26 * (int)local_280[6];
            iVar27 = iVar27 * (int)((ulong)local_280[6] >> 0x20);
            local_280[0] = CONCAT44(iVar27,iVar26);
            iVar28 = iVar28 * (int)local_280[7];
            iVar29 = iVar29 * (int)((ulong)local_280[7] >> 0x20);
            local_280[1] = CONCAT44(iVar29,iVar28);
            if (iVar1 != 4) {
              iVar26 = iVar26 * (int)local_280[8];
              iVar27 = iVar27 * (int)((ulong)local_280[8] >> 0x20);
              local_280[0] = CONCAT44(iVar27,iVar26);
              iVar28 = iVar28 * (int)local_280[9];
              iVar29 = iVar29 * (int)((ulong)local_280[9] >> 0x20);
              local_280[1] = CONCAT44(iVar29,iVar28);
              if (iVar1 != 5) {
                iVar26 = iVar26 * (int)local_280[10];
                iVar27 = iVar27 * (int)((ulong)local_280[10] >> 0x20);
                local_280[0] = CONCAT44(iVar27,iVar26);
                iVar28 = iVar28 * (int)local_280[0xb];
                iVar29 = iVar29 * (int)((ulong)local_280[0xb] >> 0x20);
                local_280[1] = CONCAT44(iVar29,iVar28);
                if (iVar1 != 6) {
                  iVar26 = iVar26 * (int)local_280[0xc];
                  iVar27 = iVar27 * (int)((ulong)local_280[0xc] >> 0x20);
                  local_280[0] = CONCAT44(iVar27,iVar26);
                  iVar28 = iVar28 * (int)local_280[0xd];
                  iVar29 = iVar29 * (int)((ulong)local_280[0xd] >> 0x20);
                  local_280[1] = CONCAT44(iVar29,iVar28);
                  if (iVar1 != 7) {
                    local_280[0] = CONCAT44(iVar27 * (int)((ulong)local_280[0xe] >> 0x20),
                                            iVar26 * (int)local_280[0xe]);
                    local_280[1] = CONCAT44(iVar29 * aiStack_208[1],iVar28 * aiStack_208[0]);
                  }
                }
              }
            }
          }
        }
      }
      uVar21 = uVar21 * (int)((ulong)local_280[1] >> 0x20) *
                        (int)local_280[1] * (int)((ulong)local_280[0] >> 0x20) * (int)local_280[0];
      if (iVar12 == iVar22) goto LAB_0037cce8;
    }
    uVar21 = uVar21 * *(int *)((long)local_280 + (long)iVar22 * 4);
    if (iVar22 + 1 < iVar12) {
      uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 1) * 4);
      if (iVar22 + 2 < iVar12) {
        uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 2) * 4);
        if (iVar22 + 3 < iVar12) {
          uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 3) * 4);
          if (iVar22 + 4 < iVar12) {
            uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 4) * 4);
            if (iVar22 + 5 < iVar12) {
              uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 5) * 4);
              if (iVar22 + 6 < iVar12) {
                uVar21 = uVar21 * *(int *)((long)local_280 + (long)(iVar22 + 6) * 4);
              }
            }
          }
        }
      }
    }
  }
LAB_0037cce8:
  if ((*puVar14 & 7) < 5) {
    bVar11 = (*puVar14 & 7) != 0;
    uVar13 = (uint)bVar11;
  }
  else {
    uVar13 = *(uint *)(*(long *)(puVar14 + 4) + 0x28);
    bVar11 = 0 < (int)uVar13;
  }
  if (uVar21 == uVar13) {
    if (bVar11) goto LAB_0037cfc0;
  }
  else if (bVar11) {
    local_200 = (uint *)0x0;
    local_1f8[0] = (uint *)0x0;
    __dest = (void *)cv::String::allocate((String *)&local_200,0x3f);
    memcpy(__dest,"The matrix size does not match to the number of stored elements",0x3f);
    cv::error(-0xd1,(String *)&local_200,"void* icvReadMatND(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xe50);
    cv::String::deallocate((String *)&local_200);
LAB_0037cfc0:
    lVar19 = cvCreateMatND(iVar12,local_280,uVar25);
    cvReadRawData(param_1,puVar14,*(undefined8 *)(lVar19 + 0x18),__s);
    return lVar19;
  }
  lVar19 = cvCreateMatNDHeader(iVar12,local_280,uVar25);
  return lVar19;
}


==================================================================

### FUNC 0037d1b8 (896 bytes) name=FUN_0037d1b8

long FUN_0037d1b8(undefined8 param_1,undefined8 param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  uint uVar7;
  uint uVar8;
  uint *puVar9;
  ulong uVar10;
  void *__dest;
  long lVar11;
  char *pcVar12;
  int iVar13;
  ulong uVar14;
  long lVar15;
  uint *local_10;
  uint *local_8;
  
  puVar9 = (uint *)cvGetFileNodeByName(param_1,param_2,"rows");
  if (puVar9 == (uint *)0x0) {
    uVar14 = 0xffffffff;
  }
  else if ((*puVar9 & 7) == 1) {
    uVar14 = (ulong)puVar9[4];
  }
  else {
    uVar14 = 0x7fffffff;
    if ((*puVar9 & 7) == 2) {
      uVar14 = lrint(*(double *)(puVar9 + 4));
      uVar14 = uVar14 & 0xffffffff;
    }
  }
  puVar9 = (uint *)cvGetFileNodeByName(param_1,param_2,"cols");
  iVar13 = (int)uVar14;
  if (puVar9 == (uint *)0x0) {
    uVar8 = 0xffffffff;
    puVar9 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    lVar15 = 0;
    if (puVar9 != (uint *)0x0) {
      uVar8 = 0xffffffff;
      if ((*puVar9 & 7) != 3) goto LAB_0037d488;
      lVar15 = *(long *)(puVar9 + 6);
      uVar8 = 0xffffffff;
    }
  }
  else {
    if ((*puVar9 & 7) == 1) {
      uVar8 = puVar9[4];
    }
    else {
      uVar8 = 0x7fffffff;
      if ((*puVar9 & 7) == 2) {
        lVar15 = lrint(*(double *)(puVar9 + 4));
        uVar8 = (uint)lVar15;
      }
    }
    puVar9 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    if ((puVar9 == (uint *)0x0) || ((*puVar9 & 7) != 3)) {
LAB_0037d488:
      lVar15 = 0;
    }
    else {
      lVar15 = *(long *)(puVar9 + 6);
      if ((lVar15 != 0 && -1 < iVar13) && (-1 < (int)uVar8)) goto LAB_0037d274;
    }
  }
  local_10 = (uint *)0x0;
  local_8 = (uint *)0x0;
  pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x2e);
  uVar6 = s_Some_of_essential_matrix_attribu_00471500._44_2_;
  uVar5 = s_Some_of_essential_matrix_attribu_00471500._40_4_;
  uVar4 = s_Some_of_essential_matrix_attribu_00471500._24_8_;
  uVar3 = s_Some_of_essential_matrix_attribu_00471500._16_8_;
  uVar2 = s_Some_of_essential_matrix_attribu_00471500._8_8_;
  uVar1 = s_Some_of_essential_matrix_attribu_00471500._0_8_;
  *(undefined8 *)(pcVar12 + 0x20) = s_Some_of_essential_matrix_attribu_00471500._32_8_;
  *(undefined4 *)(pcVar12 + 0x28) = uVar5;
  *(undefined2 *)(pcVar12 + 0x2c) = uVar6;
  *(undefined8 *)pcVar12 = uVar1;
  *(undefined8 *)(pcVar12 + 8) = uVar2;
  *(undefined8 *)(pcVar12 + 0x10) = uVar3;
  *(undefined8 *)(pcVar12 + 0x18) = uVar4;
  cv::error(-2,(String *)&local_10,"void* icvReadMat(CvFileStorage*, CvFileNode*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xde3);
  cv::String::deallocate((String *)&local_10);
LAB_0037d274:
  uVar10 = FUN_00375e84(lVar15);
  uVar10 = uVar10 & 0xffffffff;
  puVar9 = (uint *)cvGetFileNodeByName(param_1,param_2,"data");
  if (puVar9 == (uint *)0x0) {
    local_10 = puVar9;
    local_8 = puVar9;
    pcVar12 = (char *)cv::String::allocate((String *)&local_10,0x2c);
    uVar5 = s_The_matrix_data_is_not_found_in_f_00471560._40_4_;
    uVar4 = s_The_matrix_data_is_not_found_in_f_00471560._24_8_;
    uVar3 = s_The_matrix_data_is_not_found_in_f_00471560._16_8_;
    uVar2 = s_The_matrix_data_is_not_found_in_f_00471560._8_8_;
    uVar1 = s_The_matrix_data_is_not_found_in_f_00471560._0_8_;
    *(undefined8 *)(pcVar12 + 0x20) = s_The_matrix_data_is_not_found_in_f_00471560._32_8_;
    *(undefined4 *)(pcVar12 + 0x28) = uVar5;
    *(undefined8 *)pcVar12 = uVar1;
    *(undefined8 *)(pcVar12 + 8) = uVar2;
    *(undefined8 *)(pcVar12 + 0x10) = uVar3;
    *(undefined8 *)(pcVar12 + 0x18) = uVar4;
    cv::error(-2,(String *)&local_10,"void* icvReadMat(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xde9);
    cv::String::deallocate((String *)&local_10);
  }
  if ((*puVar9 & 7) < 5) {
    uVar7 = (uint)((*puVar9 & 7) != 0);
  }
  else {
    uVar7 = *(uint *)(*(long *)(puVar9 + 4) + 0x28);
  }
  if (0 < (int)uVar7) {
    if (iVar13 * uVar8 + ((uint)(uVar10 >> 3) & 0x1ff) * iVar13 * uVar8 != uVar7) {
      local_10 = (uint *)0x0;
      local_8 = (uint *)0x0;
      __dest = (void *)cv::String::allocate((String *)&local_10,0x3f);
      memcpy(__dest,"The matrix size does not match to the number of stored elements",0x3f);
      cv::error(-0xd1,(String *)&local_10,"void* icvReadMat(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xdee);
      cv::String::deallocate((String *)&local_10);
    }
    lVar11 = cvCreateMat(uVar14,uVar8,uVar10);
    cvReadRawData(param_1,puVar9,*(undefined8 *)(lVar11 + 0x18),lVar15);
    return lVar11;
  }
  if (uVar8 != 0 || iVar13 != 0) {
    lVar15 = cvCreateMatHeader(uVar14,uVar8,uVar10);
    return lVar15;
  }
  lVar15 = cvCreateMatHeader(0,1,uVar10);
  return lVar15;
}


==================================================================

### FUNC 0037d574 (1552 bytes) name=FUN_0037d574

undefined8 FUN_0037d574(undefined8 param_1,undefined8 param_2)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  undefined8 uVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  uint *puVar11;
  uint *puVar12;
  long lVar13;
  char *pcVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  long lVar20;
  undefined8 local_2050;
  undefined8 local_2048;
  undefined8 local_2040;
  undefined8 local_2038;
  uint *local_2028;
  uint *local_2018;
  undefined1 auStack_2000 [4096];
  uint local_1000 [1024];
  
  puVar11 = (uint *)cvGetFileNodeByName(param_1,param_2,"sizes");
  puVar12 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
  if (puVar12 == (uint *)0x0) {
    lVar13 = 0;
LAB_0037dacc:
    local_1000[0] = 0;
    local_1000[1] = 0;
    local_1000[2] = 0;
    local_1000[3] = 0;
    pcVar14 = (char *)cv::String::allocate((String *)local_1000,0x2e);
    uVar6 = s_Some_of_essential_matrix_attribu_00471500._44_2_;
    uVar5 = s_Some_of_essential_matrix_attribu_00471500._40_4_;
    uVar4 = s_Some_of_essential_matrix_attribu_00471500._24_8_;
    uVar3 = s_Some_of_essential_matrix_attribu_00471500._16_8_;
    uVar16 = s_Some_of_essential_matrix_attribu_00471500._8_8_;
    uVar15 = s_Some_of_essential_matrix_attribu_00471500._0_8_;
    *(undefined8 *)(pcVar14 + 0x20) = s_Some_of_essential_matrix_attribu_00471500._32_8_;
    *(undefined4 *)(pcVar14 + 0x28) = uVar5;
    *(undefined2 *)(pcVar14 + 0x2c) = uVar6;
    *(undefined8 *)pcVar14 = uVar15;
    *(undefined8 *)(pcVar14 + 8) = uVar16;
    *(undefined8 *)(pcVar14 + 0x10) = uVar3;
    *(undefined8 *)(pcVar14 + 0x18) = uVar4;
    cv::error(-2,(String *)local_1000,"void* icvReadSparseMat(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xed1);
    cv::String::deallocate((String *)local_1000);
    uVar19 = *puVar11 & 7;
    if (uVar19 != 5) goto LAB_0037d618;
LAB_0037db58:
    iVar9 = *(int *)(*(long *)(puVar11 + 4) + 0x28);
    if (iVar9 - 1U < 0x400) goto LAB_0037d688;
  }
  else {
    if ((*puVar12 & 7) != 3) {
      lVar13 = 0;
      goto LAB_0037dacc;
    }
    lVar13 = *(long *)(puVar12 + 6);
    if ((puVar11 == (uint *)0x0) || (lVar13 == 0)) goto LAB_0037dacc;
    uVar19 = *puVar11 & 7;
    if (uVar19 == 5) goto LAB_0037db58;
LAB_0037d618:
    if (uVar19 == 1) {
      iVar9 = 1;
      goto LAB_0037d688;
    }
    iVar9 = -1;
  }
  local_1000[0] = 0;
  local_1000[1] = 0;
  local_1000[2] = 0;
  local_1000[3] = 0;
  pcVar14 = (char *)cv::String::allocate((String *)local_1000,0x30);
  uVar7 = s_Could_not_determine_sparse_matri_00471590._40_8_;
  uVar4 = s_Could_not_determine_sparse_matri_00471590._32_8_;
  uVar3 = s_Could_not_determine_sparse_matri_00471590._24_8_;
  uVar16 = s_Could_not_determine_sparse_matri_00471590._16_8_;
  uVar15 = s_Could_not_determine_sparse_matri_00471590._8_8_;
  *(undefined8 *)pcVar14 = s_Could_not_determine_sparse_matri_00471590._0_8_;
  *(undefined8 *)(pcVar14 + 8) = uVar15;
  *(undefined8 *)(pcVar14 + 0x10) = uVar16;
  *(undefined8 *)(pcVar14 + 0x18) = uVar3;
  *(undefined8 *)(pcVar14 + 0x20) = uVar4;
  *(undefined8 *)(pcVar14 + 0x28) = uVar7;
  cv::error(-0xd4,(String *)local_1000,"void* icvReadSparseMat(CvFileStorage*, CvFileNode*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xed7);
  cv::String::deallocate((String *)local_1000);
LAB_0037d688:
  cvReadRawData(param_1,puVar11,auStack_2000,&DAT_00470fa8);
  iVar10 = FUN_00371534(lVar13,(String *)local_1000);
  if ((iVar10 != 1) || (4 < (int)local_1000[0])) {
    local_2040 = 0;
    local_2038 = 0;
    pcVar14 = (char *)cv::String::allocate((String *)&local_2040,0x21);
    uVar4 = s_Too_complex_format_for_the_matri_00470df8._24_8_;
    uVar3 = s_Too_complex_format_for_the_matri_00470df8._16_8_;
    uVar16 = s_Too_complex_format_for_the_matri_00470df8._8_8_;
    uVar15 = s_Too_complex_format_for_the_matri_00470df8._0_8_;
    pcVar14[0x20] = s_Too_complex_format_for_the_matri_00470df8[0x20];
    *(undefined8 *)pcVar14 = uVar15;
    *(undefined8 *)(pcVar14 + 8) = uVar16;
    *(undefined8 *)(pcVar14 + 0x10) = uVar3;
    *(undefined8 *)(pcVar14 + 0x18) = uVar4;
    cv::error(-2,(String *)&local_2040,"int icvDecodeSimpleFormat(const char*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xc0d);
    cv::String::deallocate((String *)&local_2040);
  }
  uVar19 = (local_1000[1] & 7) + (local_1000[0] + -1) * 8;
  puVar11 = (uint *)cvGetFileNodeByName(param_1,param_2,"data");
  if ((puVar11 == (uint *)0x0) || ((*puVar11 & 7) != 5)) {
    local_1000[0] = 0;
    local_1000[1] = 0;
    local_1000[2] = 0;
    local_1000[3] = 0;
    pcVar14 = (char *)cv::String::allocate((String *)local_1000,0x2c);
    uVar5 = s_The_matrix_data_is_not_found_in_f_00471560._40_4_;
    uVar4 = s_The_matrix_data_is_not_found_in_f_00471560._24_8_;
    uVar3 = s_The_matrix_data_is_not_found_in_f_00471560._16_8_;
    uVar16 = s_The_matrix_data_is_not_found_in_f_00471560._8_8_;
    uVar15 = s_The_matrix_data_is_not_found_in_f_00471560._0_8_;
    *(undefined8 *)(pcVar14 + 0x20) = s_The_matrix_data_is_not_found_in_f_00471560._32_8_;
    *(undefined4 *)(pcVar14 + 0x28) = uVar5;
    *(undefined8 *)pcVar14 = uVar15;
    *(undefined8 *)(pcVar14 + 8) = uVar16;
    *(undefined8 *)(pcVar14 + 0x10) = uVar3;
    *(undefined8 *)(pcVar14 + 0x18) = uVar4;
    cv::error(-2,(String *)local_1000,"void* icvReadSparseMat(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xede);
    cv::String::deallocate((String *)local_1000);
  }
  iVar17 = 0;
  uVar15 = cvCreateSparseMat(iVar9,auStack_2000,uVar19);
  lVar20 = *(long *)(puVar11 + 4);
  iVar10 = (uVar19 >> 3 & 0x1ff) + 1;
  cvStartReadRawData(param_1,puVar11,&local_2040);
  if (0 < *(int *)(lVar20 + 0x28)) {
    do {
      puVar11 = local_2028;
      if ((*local_2028 & 7) == 1) {
        uVar19 = local_2028[4];
        if (0 < iVar17) goto LAB_0037d8b4;
LAB_0037d94c:
        local_1000[0] = uVar19;
        iVar18 = 1;
        if (1 < iVar9) goto LAB_0037d9a4;
LAB_0037d960:
        local_2028 = (uint *)((long)local_2028 + (long)*(int *)(lVar20 + 0x2c));
        if (local_2018 <= local_2028) {
LAB_0037d980:
          cvChangeSeqBlock(&local_2040,1);
        }
      }
      else {
        local_2050 = 0;
        local_2048 = 0;
        pcVar14 = (char *)cv::String::allocate((String *)&local_2050,0x1f);
        uVar5 = s_Sparse_matrix_data_is_corrupted_004715c8._24_4_;
        *(undefined8 *)(pcVar14 + 0x10) = s_Sparse_matrix_data_is_corrupted_004715c8._16_8_;
        cVar8 = s_Sparse_matrix_data_is_corrupted_004715c8[0x1e];
        uVar6 = s_Sparse_matrix_data_is_corrupted_004715c8._28_2_;
        uVar3 = s_Sparse_matrix_data_is_corrupted_004715c8._8_8_;
        uVar16 = s_Sparse_matrix_data_is_corrupted_004715c8._0_8_;
        *(undefined4 *)(pcVar14 + 0x18) = uVar5;
        *(undefined2 *)(pcVar14 + 0x1c) = uVar6;
        pcVar14[0x1e] = cVar8;
        *(undefined8 *)pcVar14 = uVar16;
        *(undefined8 *)(pcVar14 + 8) = uVar3;
        cv::error(-0xd4,(String *)&local_2050,"void* icvReadSparseMat(CvFileStorage*, CvFileNode*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xeed);
        cv::String::deallocate((String *)&local_2050);
        uVar19 = puVar11[4];
        if (iVar17 < 1) goto LAB_0037d94c;
LAB_0037d8b4:
        if ((int)uVar19 < 0) {
          iVar18 = iVar9 + uVar19 + -1;
          if (iVar9 <= iVar18) goto LAB_0037d960;
LAB_0037d9a4:
          iVar2 = (iVar17 + iVar9) - iVar18;
          iVar18 = iVar18 - iVar17;
          do {
            iVar1 = iVar18 + iVar17;
            local_2028 = (uint *)((long)local_2028 + (long)*(int *)(lVar20 + 0x2c));
            if (local_2018 <= local_2028) {
              cvChangeSeqBlock(&local_2040,1);
            }
            puVar11 = local_2028;
            iVar17 = iVar17 + 1;
            if (((*local_2028 & 7) != 1) || (uVar19 = local_2028[4], (int)uVar19 < 0)) {
              local_2050 = 0;
              local_2048 = 0;
              pcVar14 = (char *)cv::String::allocate((String *)&local_2050,0x1f);
              uVar5 = s_Sparse_matrix_data_is_corrupted_004715c8._24_4_;
              uVar3 = s_Sparse_matrix_data_is_corrupted_004715c8._8_8_;
              uVar16 = s_Sparse_matrix_data_is_corrupted_004715c8._0_8_;
              *(undefined8 *)(pcVar14 + 0x10) = s_Sparse_matrix_data_is_corrupted_004715c8._16_8_;
              cVar8 = s_Sparse_matrix_data_is_corrupted_004715c8[0x1e];
              uVar6 = s_Sparse_matrix_data_is_corrupted_004715c8._28_2_;
              *(undefined4 *)(pcVar14 + 0x18) = uVar5;
              *(undefined2 *)(pcVar14 + 0x1c) = uVar6;
              pcVar14[0x1e] = cVar8;
              *(undefined8 *)pcVar14 = uVar16;
              *(undefined8 *)(pcVar14 + 8) = uVar3;
              cv::error(-0xd4,(String *)&local_2050,
                        "void* icvReadSparseMat(CvFileStorage*, CvFileNode*)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xefd)
              ;
              cv::String::deallocate((String *)&local_2050);
              uVar19 = puVar11[4];
            }
            *(uint *)((String *)local_1000 + (long)iVar1 * 4) = uVar19;
          } while (iVar17 != iVar2);
        }
        else {
          *(uint *)((String *)local_1000 + (long)(iVar9 + -1) * 4) = uVar19;
          iVar2 = iVar17;
        }
        iVar17 = iVar2;
        local_2028 = (uint *)((long)local_2028 + (long)*(int *)(lVar20 + 0x2c));
        if (local_2018 <= local_2028) goto LAB_0037d980;
      }
      uVar16 = cvPtrND(uVar15,(String *)local_1000,0,1,0);
      iVar17 = iVar17 + 1 + iVar10;
      cvReadRawDataSlice(param_1,&local_2040,iVar10,uVar16,lVar13);
    } while (iVar17 < *(int *)(lVar20 + 0x28));
  }
  return uVar15;
}


==================================================================

### FUNC 0037dbfc (5136 bytes) name=FUN_0037dbfc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

long FUN_0037dbfc(long param_1,undefined8 param_2)

{
  String *pSVar1;
  uint uVar2;
  uint uVar3;
  char cVar4;
  uint uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined1 uVar13;
  bool bVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  uint *puVar19;
  long lVar20;
  long lVar21;
  long lVar22;
  long *__s;
  void *pvVar23;
  char *pcVar24;
  undefined8 *puVar25;
  String *pSVar26;
  char *pcVar27;
  uint *puVar28;
  uint uVar29;
  ulong uVar30;
  int iVar31;
  undefined4 uVar32;
  int iVar33;
  undefined8 uVar34;
  int iVar36;
  undefined8 uVar37;
  uint uVar39;
  String *local_4f0;
  long local_4d8;
  int local_4c8;
  uint local_4c4;
  long local_4c0;
  ulong local_4b8;
  long local_4b0;
  uint local_4a8;
  uint local_49c;
  char *local_490;
  long local_488;
  long local_480;
  undefined8 local_478;
  int local_400 [4];
  int iStack_3f0;
  uint local_3ec;
  undefined4 uStack_3e8;
  int local_3e0;
  undefined4 uStack_3d8;
  int iStack_3d0;
  undefined4 uStack_3c8;
  int local_3c0;
  undefined4 uStack_3b8;
  int iStack_3b0;
  undefined4 uStack_3a8;
  int local_3a0;
  undefined4 uStack_398;
  int iStack_390;
  undefined4 uStack_388;
  int local_380;
  undefined4 uStack_378;
  int iStack_370;
  undefined4 uStack_368;
  int local_360;
  undefined4 uStack_358;
  int iStack_350;
  undefined4 uStack_348;
  int local_340;
  undefined4 uStack_338;
  int iStack_330;
  undefined4 uStack_328;
  int local_320;
  undefined4 uStack_318;
  int iStack_310;
  undefined4 uStack_308;
  int local_300;
  undefined4 uStack_2f8;
  int iStack_2f0;
  undefined4 uStack_2e8;
  int local_2e0;
  undefined4 uStack_2d8;
  int iStack_2d0;
  undefined4 uStack_2c8;
  int local_2c0;
  undefined4 uStack_2b8;
  int iStack_2b0;
  undefined4 uStack_2a8;
  int local_2a0;
  undefined4 uStack_298;
  int iStack_290;
  undefined4 uStack_288;
  int local_280;
  undefined4 uStack_278;
  int iStack_270;
  undefined4 uStack_268;
  int local_260;
  undefined4 uStack_258;
  int iStack_250;
  undefined4 uStack_248;
  int local_240;
  undefined4 uStack_238;
  int iStack_230;
  undefined4 uStack_228;
  undefined8 local_200;
  undefined8 local_1f8;
  int iVar35;
  int iVar38;
  
  local_490 = (char *)0x0;
  puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"flags");
  if (puVar19 == (uint *)0x0) {
    pcVar27 = (char *)0x0;
LAB_0037dc68:
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"vertex_dt");
    if (puVar19 != (uint *)0x0) goto LAB_0037dc80;
LAB_0037eee4:
    local_4d8 = 0;
LAB_0037dc94:
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,&LAB_004711a8);
    if (puVar19 != (uint *)0x0) goto LAB_0037dcac;
LAB_0037eec0:
    local_4b0 = 0;
LAB_0037dcc4:
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"vertex_count");
    if (puVar19 != (uint *)0x0) goto LAB_0037dcdc;
LAB_0037ee78:
    uVar30 = 0xffffffff;
    bVar14 = true;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"edge_count");
    if (puVar19 != (uint *)0x0) goto LAB_0037dd24;
    local_49c = 0xffffffff;
LAB_0037e9ec:
    local_200 = 0;
    local_1f8 = 0;
    pcVar24 = (char *)cv::String::allocate((String *)&local_200,0x2d);
    cVar4 = s_Some_of_essential_graph_attribut_004715e8[0x2c];
    uVar32 = s_Some_of_essential_graph_attribut_004715e8._40_4_;
    uVar7 = s_Some_of_essential_graph_attribut_004715e8._24_8_;
    uVar6 = s_Some_of_essential_graph_attribut_004715e8._16_8_;
    uVar37 = s_Some_of_essential_graph_attribut_004715e8._8_8_;
    uVar34 = s_Some_of_essential_graph_attribut_004715e8._0_8_;
    *(undefined8 *)(pcVar24 + 0x20) = s_Some_of_essential_graph_attribut_004715e8._32_8_;
    *(undefined4 *)(pcVar24 + 0x28) = uVar32;
    pcVar24[0x2c] = cVar4;
    *(undefined8 *)pcVar24 = uVar34;
    *(undefined8 *)(pcVar24 + 8) = uVar37;
    *(undefined8 *)(pcVar24 + 0x10) = uVar6;
    *(undefined8 *)(pcVar24 + 0x18) = uVar7;
    cv::error(-2,(String *)&local_200,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11ed);
    cv::String::deallocate((String *)&local_200);
    iVar15 = isxdigit((int)*pcVar27);
    if (iVar15 != 0) goto LAB_0037dd70;
LAB_0037ea74:
    pcVar27 = strstr(pcVar27,"oriented");
    if (pcVar27 != (char *)0x0) goto LAB_0037ea88;
LAB_0037de14:
    uVar32 = 0x42981000;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"header_dt");
    if (puVar19 == (uint *)0x0) goto LAB_0037de3c;
LAB_0037eab0:
    if ((*puVar19 & 7) != 3) goto LAB_0037de3c;
    lVar20 = *(long *)(puVar19 + 6);
    lVar21 = cvGetFileNodeByName(param_1,param_2,"header_user_data");
    if ((lVar20 != 0) != (lVar21 != 0)) goto LAB_0037eaf4;
LAB_0037eb70:
    local_4f0 = (String *)&local_200;
    if (lVar20 == 0) goto LAB_0037de64;
    iVar15 = FUN_00371534(lVar20,local_4f0);
    if (iVar15 * 2 < 1) goto LAB_0037de64;
    iVar31 = 0x78;
    puVar19 = (uint *)((long)&local_200 + 4);
    do {
      puVar28 = puVar19 + 2;
      iVar16 = (*puVar19 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((*puVar19 & 7) << 1)) & 3);
      iVar31 = ((iVar16 + iVar31) - 1U & -iVar16) + iVar16 * puVar19[-1];
      puVar19 = puVar28;
    } while (puVar28 != (uint *)((long)local_4f0 + (ulong)(iVar15 * 2 - 1U >> 1) * 8 + 0xc));
    if (local_4d8 == 0) goto LAB_0037ebf4;
LAB_0037de68:
    local_4f0 = (String *)&local_200;
    iVar15 = FUN_00371534(local_4d8,local_4f0);
    if (iVar15 * 2 < 1) {
      iVar16 = 0;
    }
    else {
      iVar16 = 0;
      puVar19 = (uint *)((long)&local_200 + 4);
      do {
        puVar28 = puVar19 + 2;
        iVar18 = (*puVar19 >> 3 & 0x1ff) + 1 <<
                 (ulong)((uint)(0xfa50L >> ((*puVar19 & 7) << 1)) & 3);
        iVar16 = ((iVar18 + iVar16) - 1U & -iVar18) + iVar18 * puVar19[-1];
        puVar19 = puVar28;
      } while (puVar28 != (uint *)((long)local_4f0 + (ulong)(iVar15 * 2 - 1U >> 1) * 8 + 0xc));
    }
    iVar15 = (local_200._4_4_ >> 3 & 0x1ff) + 1 <<
             (ulong)((uint)(0xfa50L >> ((local_200._4_4_ & 7) << 1)) & 3);
    uVar17 = (iVar16 + iVar15) - 1U & -iVar15;
    iVar16 = FUN_00371534(local_4d8,local_4f0);
    if (iVar16 * 2 < 1) {
      iVar15 = 0x10;
    }
    else {
      iVar15 = 0x10;
      puVar19 = (uint *)((long)&local_200 + 4);
      do {
        puVar28 = puVar19 + 2;
        iVar18 = (*puVar19 >> 3 & 0x1ff) + 1 <<
                 (ulong)((uint)(0xfa50L >> ((*puVar19 & 7) << 1)) & 3);
        iVar15 = ((iVar18 + iVar15) - 1U & -iVar18) + iVar18 * puVar19[-1];
        puVar19 = puVar28;
      } while (puVar28 != (uint *)((long)local_4f0 + (ulong)(iVar16 * 2 - 1U >> 1) * 8 + 0xc));
    }
    iVar16 = FUN_00371534(local_4b0,local_400);
    iVar16 = iVar16 * 2;
    if (iVar16 < 1) {
      local_4c4 = 0;
    }
    else {
      uVar5 = iVar16 - 1U >> 1;
      iVar18 = (uVar5 - 4 >> 2) + 1;
      if (iVar16 - 1U < 8) {
        iVar35 = 0;
        local_4c4 = 0;
      }
      else {
        uVar37 = CONCAT17((char)((uint)uStack_3e8 >> 0x18),
                          CONCAT16((char)((uint)uStack_3e8 >> 0x10),
                                   CONCAT15((char)((uint)uStack_3e8 >> 8),
                                            CONCAT14((char)uStack_3e8,iStack_3f0))));
        uVar34 = CONCAT17((char)((uint)local_400[2] >> 0x18),
                          CONCAT16((char)((uint)local_400[2] >> 0x10),
                                   CONCAT15((char)((uint)local_400[2] >> 8),
                                            CONCAT14((char)local_400[2],local_400[0]))));
        if (iVar18 != 1) {
          iVar35 = (int)((ulong)uVar34 >> 0x20) +
                   (int)(CONCAT17((char)((uint)uStack_3d8 >> 0x18),
                                  CONCAT16((char)((uint)uStack_3d8 >> 0x10),
                                           CONCAT15((char)((uint)uStack_3d8 >> 8),
                                                    CONCAT14((char)uStack_3d8,local_3e0)))) >> 0x20)
          ;
          uVar34 = CONCAT44(iVar35,local_400[0] + local_3e0);
          iVar38 = (int)((ulong)uVar37 >> 0x20) +
                   (int)(CONCAT17((char)((uint)uStack_3c8 >> 0x18),
                                  CONCAT16((char)((uint)uStack_3c8 >> 0x10),
                                           CONCAT15((char)((uint)uStack_3c8 >> 8),
                                                    CONCAT14((char)uStack_3c8,iStack_3d0)))) >> 0x20
                        );
          uVar37 = CONCAT44(iVar38,iStack_3f0 + iStack_3d0);
          if (iVar18 != 2) {
            iVar33 = local_400[0] + local_3e0 + local_3c0;
            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_3b8 >> 0x18),
                                             CONCAT16((char)((uint)uStack_3b8 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_3b8 >> 8),
                                                               CONCAT14((char)uStack_3b8,local_3c0))
                                                     )) >> 0x20);
            uVar34 = CONCAT44(iVar35,iVar33);
            iVar36 = iStack_3f0 + iStack_3d0 + iStack_3b0;
            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_3a8 >> 0x18),
                                             CONCAT16((char)((uint)uStack_3a8 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_3a8 >> 8),
                                                               CONCAT14((char)uStack_3a8,iStack_3b0)
                                                              ))) >> 0x20);
            uVar37 = CONCAT44(iVar38,iVar36);
            if (iVar18 != 3) {
              iVar33 = iVar33 + local_3a0;
              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_398 >> 0x18),
                                               CONCAT16((char)((uint)uStack_398 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_398 >> 8),
                                                                 CONCAT14((char)uStack_398,local_3a0
                                                                         )))) >> 0x20);
              uVar34 = CONCAT44(iVar35,iVar33);
              iVar36 = iVar36 + iStack_390;
              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_388 >> 0x18),
                                               CONCAT16((char)((uint)uStack_388 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_388 >> 8),
                                                                 CONCAT14((char)uStack_388,
                                                                          iStack_390)))) >> 0x20);
              uVar37 = CONCAT44(iVar38,iVar36);
              if (iVar18 != 4) {
                iVar33 = iVar33 + local_380;
                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_378 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_378 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_378 >> 8),
                                                                   CONCAT14((char)uStack_378,
                                                                            local_380)))) >> 0x20);
                uVar34 = CONCAT44(iVar35,iVar33);
                iVar36 = iVar36 + iStack_370;
                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_368 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_368 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_368 >> 8),
                                                                   CONCAT14((char)uStack_368,
                                                                            iStack_370)))) >> 0x20);
                uVar37 = CONCAT44(iVar38,iVar36);
                if (iVar18 != 5) {
                  iVar33 = iVar33 + local_360;
                  iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_358 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_358 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_358 >> 8),
                                                                     CONCAT14((char)uStack_358,
                                                                              local_360)))) >> 0x20)
                  ;
                  uVar34 = CONCAT44(iVar35,iVar33);
                  iVar36 = iVar36 + iStack_350;
                  iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_348 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_348 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_348 >> 8),
                                                                     CONCAT14((char)uStack_348,
                                                                              iStack_350)))) >> 0x20
                                         );
                  uVar37 = CONCAT44(iVar38,iVar36);
                  if (iVar18 != 6) {
                    iVar33 = iVar33 + local_340;
                    iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_338 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_338 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_338 >> 8)
                                                                       ,CONCAT14((char)uStack_338,
                                                                                 local_340)))) >>
                                           0x20);
                    uVar34 = CONCAT44(iVar35,iVar33);
                    iVar36 = iVar36 + iStack_330;
                    iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_328 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_328 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_328 >> 8)
                                                                       ,CONCAT14((char)uStack_328,
                                                                                 iStack_330)))) >>
                                           0x20);
                    uVar37 = CONCAT44(iVar38,iVar36);
                    if (iVar18 != 7) {
                      iVar33 = iVar33 + local_320;
                      iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_318 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_318 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_318 >>
                                                                               8),CONCAT14((char)
                                                  uStack_318,local_320)))) >> 0x20);
                      uVar34 = CONCAT44(iVar35,iVar33);
                      iVar36 = iVar36 + iStack_310;
                      iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_308 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_308 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_308 >>
                                                                               8),CONCAT14((char)
                                                  uStack_308,iStack_310)))) >> 0x20);
                      uVar37 = CONCAT44(iVar38,iVar36);
                      if (iVar18 != 8) {
                        iVar33 = iVar33 + local_300;
                        iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2f8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_2f8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_2f8
                                                                                 >> 8),
                                                                           CONCAT14((char)uStack_2f8
                                                                                    ,local_300))))
                                               >> 0x20);
                        uVar34 = CONCAT44(iVar35,iVar33);
                        iVar36 = iVar36 + iStack_2f0;
                        iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2e8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_2e8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_2e8
                                                                                 >> 8),
                                                                           CONCAT14((char)uStack_2e8
                                                                                    ,iStack_2f0))))
                                               >> 0x20);
                        uVar37 = CONCAT44(iVar38,iVar36);
                        if (iVar18 != 9) {
                          iVar33 = iVar33 + local_2e0;
                          iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2d8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_2d8 >> 0x10)
                                                                    ,CONCAT15((char)((uint)
                                                  uStack_2d8 >> 8),
                                                  CONCAT14((char)uStack_2d8,local_2e0)))) >> 0x20);
                          uVar34 = CONCAT44(iVar35,iVar33);
                          iVar36 = iVar36 + iStack_2d0;
                          iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2c8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_2c8 >> 0x10)
                                                                    ,CONCAT15((char)((uint)
                                                  uStack_2c8 >> 8),
                                                  CONCAT14((char)uStack_2c8,iStack_2d0)))) >> 0x20);
                          uVar37 = CONCAT44(iVar38,iVar36);
                          if (iVar18 != 10) {
                            iVar33 = iVar33 + local_2c0;
                            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2b8 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_2b8 >>
                                                                            0x10),
                                                                      CONCAT15((char)((uint)
                                                  uStack_2b8 >> 8),
                                                  CONCAT14((char)uStack_2b8,local_2c0)))) >> 0x20);
                            uVar34 = CONCAT44(iVar35,iVar33);
                            iVar36 = iVar36 + iStack_2b0;
                            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2a8 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_2a8 >>
                                                                            0x10),
                                                                      CONCAT15((char)((uint)
                                                  uStack_2a8 >> 8),
                                                  CONCAT14((char)uStack_2a8,iStack_2b0)))) >> 0x20);
                            uVar37 = CONCAT44(iVar38,iVar36);
                            if (iVar18 != 0xb) {
                              iVar33 = iVar33 + local_2a0;
                              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_298 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_298 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_298 >> 8),
                                                  CONCAT14((char)uStack_298,local_2a0)))) >> 0x20);
                              uVar34 = CONCAT44(iVar35,iVar33);
                              iVar36 = iVar36 + iStack_290;
                              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_288 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_288 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_288 >> 8),
                                                  CONCAT14((char)uStack_288,iStack_290)))) >> 0x20);
                              uVar37 = CONCAT44(iVar38,iVar36);
                              if (iVar18 != 0xc) {
                                iVar33 = iVar33 + local_280;
                                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_278 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_278 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_278 >> 8),
                                                  CONCAT14((char)uStack_278,local_280)))) >> 0x20);
                                uVar34 = CONCAT44(iVar35,iVar33);
                                iVar36 = iVar36 + iStack_270;
                                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_268 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_268 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_268 >> 8),
                                                  CONCAT14((char)uStack_268,iStack_270)))) >> 0x20);
                                uVar37 = CONCAT44(iVar38,iVar36);
                                if (iVar18 != 0xd) {
                                  iVar33 = iVar33 + local_260;
                                  iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_258 >> 0x18),
                                                                   CONCAT16((char)((uint)uStack_258
                                                                                  >> 0x10),
                                                                            CONCAT15((char)((uint)
                                                  uStack_258 >> 8),
                                                  CONCAT14((char)uStack_258,local_260)))) >> 0x20);
                                  uVar34 = CONCAT44(iVar35,iVar33);
                                  iVar36 = iVar36 + iStack_250;
                                  iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_248 >> 0x18),
                                                                   CONCAT16((char)((uint)uStack_248
                                                                                  >> 0x10),
                                                                            CONCAT15((char)((uint)
                                                  uStack_248 >> 8),
                                                  CONCAT14((char)uStack_248,iStack_250)))) >> 0x20);
                                  uVar37 = CONCAT44(iVar38,iVar36);
                                  if (iVar18 != 0xe) {
                                    uVar34 = CONCAT44(iVar35 + (int)(CONCAT17((char)((uint)
                                                  uStack_238 >> 0x18),
                                                  CONCAT16((char)((uint)uStack_238 >> 0x10),
                                                           CONCAT15((char)((uint)uStack_238 >> 8),
                                                                    CONCAT14((char)uStack_238,
                                                                             local_240)))) >> 0x20),
                                                  iVar33 + local_240);
                                    uVar37 = CONCAT44(iVar38 + (int)(CONCAT17((char)((uint)
                                                  uStack_228 >> 0x18),
                                                  CONCAT16((char)((uint)uStack_228 >> 0x10),
                                                           CONCAT15((char)((uint)uStack_228 >> 8),
                                                                    CONCAT14((char)uStack_228,
                                                                             iStack_230)))) >> 0x20)
                                                  ,iVar36 + iStack_230);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        local_4c4 = (int)uVar34 + (int)((ulong)uVar34 >> 0x20) +
                    (int)uVar37 + (int)((ulong)uVar37 >> 0x20);
        iVar35 = iVar18 * 8;
        if (iVar18 * 4 == uVar5 + 1) goto LAB_0037e234;
      }
      local_4c4 = local_4c4 + local_400[iVar35];
      if (iVar35 + 2 < iVar16) {
        local_4c4 = local_4c4 + local_400[iVar35 + 2];
        if (iVar35 + 4 < iVar16) {
          local_4c4 = local_4c4 + local_400[iVar35 + 4];
          if (iVar35 + 6 < iVar16) {
            local_4c4 = local_4c4 + local_400[iVar35 + 6];
            if (iVar35 + 8 < iVar16) {
              local_4c4 = local_4c4 + local_400[iVar35 + 8];
              if (iVar35 + 10 < iVar16) {
                local_4c4 = local_4c4 + local_400[iVar35 + 10];
                if (iVar35 + 0xc < iVar16) {
                  local_4c4 = local_4c4 + local_400[iVar35 + 0xc];
                }
              }
            }
          }
        }
      }
    }
  }
  else {
    if ((*puVar19 & 7) == 3) {
      pcVar27 = *(char **)(puVar19 + 6);
      goto LAB_0037dc68;
    }
    pcVar27 = (char *)0x0;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"vertex_dt");
    if (puVar19 == (uint *)0x0) goto LAB_0037eee4;
LAB_0037dc80:
    if ((*puVar19 & 7) == 3) {
      local_4d8 = *(long *)(puVar19 + 6);
      goto LAB_0037dc94;
    }
    local_4d8 = 0;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,&LAB_004711a8);
    if (puVar19 == (uint *)0x0) goto LAB_0037eec0;
LAB_0037dcac:
    if ((*puVar19 & 7) == 3) {
      local_4b0 = *(long *)(puVar19 + 6);
      goto LAB_0037dcc4;
    }
    local_4b0 = 0;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"vertex_count");
    if (puVar19 == (uint *)0x0) goto LAB_0037ee78;
LAB_0037dcdc:
    if ((*puVar19 & 7) == 1) {
      uVar17 = puVar19[4];
      bVar14 = uVar17 == 0xffffffff;
    }
    else if ((*puVar19 & 7) == 2) {
      lVar20 = lrint(*(double *)(puVar19 + 4));
      uVar17 = (uint)lVar20;
      bVar14 = uVar17 == 0xffffffff;
    }
    else {
      bVar14 = false;
      uVar17 = 0x7fffffff;
    }
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"edge_count");
    if (puVar19 == (uint *)0x0) {
      uVar30 = (ulong)uVar17;
      local_49c = 0xffffffff;
      goto LAB_0037e9ec;
    }
    uVar30 = (ulong)uVar17;
    bVar14 = (bool)(bVar14 | pcVar27 == (char *)0x0);
LAB_0037dd24:
    if ((*puVar19 & 7) == 1) {
      local_49c = puVar19[4];
    }
    else {
      local_49c = 0x7fffffff;
      if ((*puVar19 & 7) == 2) {
        lVar20 = lrint(*(double *)(puVar19 + 4));
        local_49c = (uint)lVar20;
      }
    }
    if (((bVar14) || (local_49c == 0xffffffff)) || (local_4b0 == 0)) goto LAB_0037e9ec;
    iVar15 = isxdigit((int)*pcVar27);
    if (iVar15 == 0) goto LAB_0037ea74;
LAB_0037dd70:
    local_4f0 = (String *)&local_200;
    lVar20 = strtol(pcVar27,&local_490,0x10);
    if ((local_490 == pcVar27) || (((uint)lVar20 & 0xffff0000) != 0x42980000)) {
      local_200 = 0;
      local_1f8 = 0;
      pcVar27 = (char *)cv::String::allocate(local_4f0,0x1e);
      uVar8 = s_The_sequence_flags_are_invalid_00471618._28_2_;
      uVar32 = s_The_sequence_flags_are_invalid_00471618._24_4_;
      uVar37 = s_The_sequence_flags_are_invalid_00471618._8_8_;
      uVar34 = s_The_sequence_flags_are_invalid_00471618._0_8_;
      *(undefined8 *)(pcVar27 + 0x10) = s_The_sequence_flags_are_invalid_00471618._16_8_;
      *(undefined4 *)(pcVar27 + 0x18) = uVar32;
      *(undefined2 *)(pcVar27 + 0x1c) = uVar8;
      *(undefined8 *)pcVar27 = uVar34;
      *(undefined8 *)(pcVar27 + 8) = uVar37;
      cv::error(-2,local_4f0,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11fa);
      cv::String::deallocate(local_4f0);
    }
    if (((uint)lVar20 >> 0xc & 1) == 0) goto LAB_0037de14;
LAB_0037ea88:
    uVar32 = 0x42985000;
    puVar19 = (uint *)cvGetFileNodeByName(param_1,param_2,"header_dt");
    if (puVar19 != (uint *)0x0) goto LAB_0037eab0;
LAB_0037de3c:
    lVar20 = 0;
    lVar21 = cvGetFileNodeByName(param_1,param_2,"header_user_data");
    if (lVar21 != 0) {
LAB_0037eaf4:
      local_4f0 = (String *)&local_200;
      local_200 = 0;
      local_1f8 = 0;
      pcVar27 = (char *)cv::String::allocate(local_4f0,0x4a);
      uVar8 = s_One_of__header_dt__and__header_u_00471638._72_2_;
      uVar12 = s_One_of__header_dt__and__header_u_00471638._56_8_;
      uVar11 = s_One_of__header_dt__and__header_u_00471638._48_8_;
      uVar10 = s_One_of__header_dt__and__header_u_00471638._40_8_;
      uVar9 = s_One_of__header_dt__and__header_u_00471638._32_8_;
      uVar7 = s_One_of__header_dt__and__header_u_00471638._24_8_;
      uVar6 = s_One_of__header_dt__and__header_u_00471638._16_8_;
      uVar37 = s_One_of__header_dt__and__header_u_00471638._8_8_;
      uVar34 = s_One_of__header_dt__and__header_u_00471638._0_8_;
      *(undefined8 *)(pcVar27 + 0x40) = s_One_of__header_dt__and__header_u_00471638._64_8_;
      *(undefined2 *)(pcVar27 + 0x48) = uVar8;
      *(undefined8 *)pcVar27 = uVar34;
      *(undefined8 *)(pcVar27 + 8) = uVar37;
      *(undefined8 *)(pcVar27 + 0x10) = uVar6;
      *(undefined8 *)(pcVar27 + 0x18) = uVar7;
      *(undefined8 *)(pcVar27 + 0x20) = uVar9;
      *(undefined8 *)(pcVar27 + 0x28) = uVar10;
      *(undefined8 *)(pcVar27 + 0x30) = uVar11;
      *(undefined8 *)(pcVar27 + 0x38) = uVar12;
      cv::error(-2,local_4f0,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1209);
      cv::String::deallocate(local_4f0);
      goto LAB_0037eb70;
    }
    lVar20 = 0;
LAB_0037de64:
    iVar31 = 0x78;
    if (local_4d8 != 0) goto LAB_0037de68;
LAB_0037ebf4:
    uVar17 = (uint)local_4d8;
    iVar15 = 0x10;
    local_4c4 = uVar17;
  }
LAB_0037e234:
  local_4f0 = (String *)&local_200;
  iVar16 = FUN_00371534(local_4b0,local_400);
  if (((iVar16 < 2) || (local_400[0] != 2)) ||
     ((local_400[1] != 4 || ((local_400[2] < 1 || (local_400[3] != 5)))))) {
    local_200 = 0;
    local_1f8 = 0;
    pcVar27 = (char *)cv::String::allocate(local_4f0,0x34);
    uVar10 = s_Graph_edges_should_start_with_2_i_00471688._40_8_;
    uVar9 = s_Graph_edges_should_start_with_2_i_00471688._32_8_;
    uVar7 = s_Graph_edges_should_start_with_2_i_00471688._24_8_;
    uVar6 = s_Graph_edges_should_start_with_2_i_00471688._16_8_;
    uVar37 = s_Graph_edges_should_start_with_2_i_00471688._8_8_;
    uVar34 = s_Graph_edges_should_start_with_2_i_00471688._0_8_;
    *(undefined4 *)(pcVar27 + 0x30) = s_Graph_edges_should_start_with_2_i_00471688._48_4_;
    *(undefined8 *)pcVar27 = uVar34;
    *(undefined8 *)(pcVar27 + 8) = uVar37;
    *(undefined8 *)(pcVar27 + 0x10) = uVar6;
    *(undefined8 *)(pcVar27 + 0x18) = uVar7;
    *(undefined8 *)(pcVar27 + 0x20) = uVar9;
    *(undefined8 *)(pcVar27 + 0x28) = uVar10;
    cv::error(-5,local_4f0,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1223);
    cv::String::deallocate(local_4f0);
  }
  if (iVar16 < 3) {
    local_4b8 = 0xfffffffffffffffc;
    local_4c0 = 3;
  }
  else {
    iVar18 = (local_3ec >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((local_3ec & 7) << 1)) & 3);
    local_4b8 = 0xfffffffffffffffc;
    if (7 < iVar18) {
      local_4b8 = 0xfffffffffffffff8;
    }
    local_4c0 = 3;
    if (7 < iVar18) {
      local_4c0 = 7;
    }
  }
  iVar16 = iVar16 * 2;
  if (iVar16 < 1) {
    local_4a8 = 0;
  }
  else {
    uVar5 = iVar16 - 1U >> 1;
    iVar18 = (uVar5 - 4 >> 2) + 1;
    if (iVar16 - 1U < 8) {
      iVar35 = 0;
      local_4a8 = 0;
    }
    else {
      uVar37 = CONCAT17((char)((uint)uStack_3e8 >> 0x18),
                        CONCAT16((char)((uint)uStack_3e8 >> 0x10),
                                 CONCAT15((char)((uint)uStack_3e8 >> 8),
                                          CONCAT14((char)uStack_3e8,iStack_3f0))));
      uVar34 = CONCAT17((char)((uint)local_400[2] >> 0x18),
                        CONCAT16((char)((uint)local_400[2] >> 0x10),
                                 CONCAT15((char)((uint)local_400[2] >> 8),
                                          CONCAT14((char)local_400[2],local_400[0]))));
      if (iVar18 != 1) {
        iVar35 = (int)((ulong)uVar34 >> 0x20) +
                 (int)(CONCAT17((char)((uint)uStack_3d8 >> 0x18),
                                CONCAT16((char)((uint)uStack_3d8 >> 0x10),
                                         CONCAT15((char)((uint)uStack_3d8 >> 8),
                                                  CONCAT14((char)uStack_3d8,local_3e0)))) >> 0x20);
        uVar34 = CONCAT44(iVar35,local_400[0] + local_3e0);
        iVar38 = (int)((ulong)uVar37 >> 0x20) +
                 (int)(CONCAT17((char)((uint)uStack_3c8 >> 0x18),
                                CONCAT16((char)((uint)uStack_3c8 >> 0x10),
                                         CONCAT15((char)((uint)uStack_3c8 >> 8),
                                                  CONCAT14((char)uStack_3c8,iStack_3d0)))) >> 0x20);
        uVar37 = CONCAT44(iVar38,iStack_3f0 + iStack_3d0);
        if (iVar18 != 2) {
          iVar33 = local_400[0] + local_3e0 + local_3c0;
          iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_3b8 >> 0x18),
                                           CONCAT16((char)((uint)uStack_3b8 >> 0x10),
                                                    CONCAT15((char)((uint)uStack_3b8 >> 8),
                                                             CONCAT14((char)uStack_3b8,local_3c0))))
                                 >> 0x20);
          uVar34 = CONCAT44(iVar35,iVar33);
          iVar36 = iStack_3f0 + iStack_3d0 + iStack_3b0;
          iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_3a8 >> 0x18),
                                           CONCAT16((char)((uint)uStack_3a8 >> 0x10),
                                                    CONCAT15((char)((uint)uStack_3a8 >> 8),
                                                             CONCAT14((char)uStack_3a8,iStack_3b0)))
                                          ) >> 0x20);
          uVar37 = CONCAT44(iVar38,iVar36);
          if (iVar18 != 3) {
            iVar33 = iVar33 + local_3a0;
            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_398 >> 0x18),
                                             CONCAT16((char)((uint)uStack_398 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_398 >> 8),
                                                               CONCAT14((char)uStack_398,local_3a0))
                                                     )) >> 0x20);
            uVar34 = CONCAT44(iVar35,iVar33);
            iVar36 = iVar36 + iStack_390;
            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_388 >> 0x18),
                                             CONCAT16((char)((uint)uStack_388 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_388 >> 8),
                                                               CONCAT14((char)uStack_388,iStack_390)
                                                              ))) >> 0x20);
            uVar37 = CONCAT44(iVar38,iVar36);
            if (iVar18 != 4) {
              iVar33 = iVar33 + local_380;
              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_378 >> 0x18),
                                               CONCAT16((char)((uint)uStack_378 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_378 >> 8),
                                                                 CONCAT14((char)uStack_378,local_380
                                                                         )))) >> 0x20);
              uVar34 = CONCAT44(iVar35,iVar33);
              iVar36 = iVar36 + iStack_370;
              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_368 >> 0x18),
                                               CONCAT16((char)((uint)uStack_368 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_368 >> 8),
                                                                 CONCAT14((char)uStack_368,
                                                                          iStack_370)))) >> 0x20);
              uVar37 = CONCAT44(iVar38,iVar36);
              if (iVar18 != 5) {
                iVar33 = iVar33 + local_360;
                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_358 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_358 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_358 >> 8),
                                                                   CONCAT14((char)uStack_358,
                                                                            local_360)))) >> 0x20);
                uVar34 = CONCAT44(iVar35,iVar33);
                iVar36 = iVar36 + iStack_350;
                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_348 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_348 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_348 >> 8),
                                                                   CONCAT14((char)uStack_348,
                                                                            iStack_350)))) >> 0x20);
                uVar37 = CONCAT44(iVar38,iVar36);
                if (iVar18 != 6) {
                  iVar33 = iVar33 + local_340;
                  iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_338 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_338 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_338 >> 8),
                                                                     CONCAT14((char)uStack_338,
                                                                              local_340)))) >> 0x20)
                  ;
                  uVar34 = CONCAT44(iVar35,iVar33);
                  iVar36 = iVar36 + iStack_330;
                  iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_328 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_328 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_328 >> 8),
                                                                     CONCAT14((char)uStack_328,
                                                                              iStack_330)))) >> 0x20
                                         );
                  uVar37 = CONCAT44(iVar38,iVar36);
                  if (iVar18 != 7) {
                    iVar33 = iVar33 + local_320;
                    iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_318 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_318 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_318 >> 8)
                                                                       ,CONCAT14((char)uStack_318,
                                                                                 local_320)))) >>
                                           0x20);
                    uVar34 = CONCAT44(iVar35,iVar33);
                    iVar36 = iVar36 + iStack_310;
                    iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_308 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_308 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_308 >> 8)
                                                                       ,CONCAT14((char)uStack_308,
                                                                                 iStack_310)))) >>
                                           0x20);
                    uVar37 = CONCAT44(iVar38,iVar36);
                    if (iVar18 != 8) {
                      iVar33 = iVar33 + local_300;
                      iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2f8 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_2f8 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_2f8 >>
                                                                               8),CONCAT14((char)
                                                  uStack_2f8,local_300)))) >> 0x20);
                      uVar34 = CONCAT44(iVar35,iVar33);
                      iVar36 = iVar36 + iStack_2f0;
                      iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2e8 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_2e8 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_2e8 >>
                                                                               8),CONCAT14((char)
                                                  uStack_2e8,iStack_2f0)))) >> 0x20);
                      uVar37 = CONCAT44(iVar38,iVar36);
                      if (iVar18 != 9) {
                        iVar33 = iVar33 + local_2e0;
                        iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2d8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_2d8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_2d8
                                                                                 >> 8),
                                                                           CONCAT14((char)uStack_2d8
                                                                                    ,local_2e0))))
                                               >> 0x20);
                        uVar34 = CONCAT44(iVar35,iVar33);
                        iVar36 = iVar36 + iStack_2d0;
                        iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2c8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_2c8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_2c8
                                                                                 >> 8),
                                                                           CONCAT14((char)uStack_2c8
                                                                                    ,iStack_2d0))))
                                               >> 0x20);
                        uVar37 = CONCAT44(iVar38,iVar36);
                        if (iVar18 != 10) {
                          iVar33 = iVar33 + local_2c0;
                          iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_2b8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_2b8 >> 0x10)
                                                                    ,CONCAT15((char)((uint)
                                                  uStack_2b8 >> 8),
                                                  CONCAT14((char)uStack_2b8,local_2c0)))) >> 0x20);
                          uVar34 = CONCAT44(iVar35,iVar33);
                          iVar36 = iVar36 + iStack_2b0;
                          iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_2a8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_2a8 >> 0x10)
                                                                    ,CONCAT15((char)((uint)
                                                  uStack_2a8 >> 8),
                                                  CONCAT14((char)uStack_2a8,iStack_2b0)))) >> 0x20);
                          uVar37 = CONCAT44(iVar38,iVar36);
                          if (iVar18 != 0xb) {
                            iVar33 = iVar33 + local_2a0;
                            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_298 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_298 >>
                                                                            0x10),
                                                                      CONCAT15((char)((uint)
                                                  uStack_298 >> 8),
                                                  CONCAT14((char)uStack_298,local_2a0)))) >> 0x20);
                            uVar34 = CONCAT44(iVar35,iVar33);
                            iVar36 = iVar36 + iStack_290;
                            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_288 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_288 >>
                                                                            0x10),
                                                                      CONCAT15((char)((uint)
                                                  uStack_288 >> 8),
                                                  CONCAT14((char)uStack_288,iStack_290)))) >> 0x20);
                            uVar37 = CONCAT44(iVar38,iVar36);
                            if (iVar18 != 0xc) {
                              iVar33 = iVar33 + local_280;
                              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_278 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_278 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_278 >> 8),
                                                  CONCAT14((char)uStack_278,local_280)))) >> 0x20);
                              uVar34 = CONCAT44(iVar35,iVar33);
                              iVar36 = iVar36 + iStack_270;
                              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_268 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_268 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_268 >> 8),
                                                  CONCAT14((char)uStack_268,iStack_270)))) >> 0x20);
                              uVar37 = CONCAT44(iVar38,iVar36);
                              if (iVar18 != 0xd) {
                                iVar33 = iVar33 + local_260;
                                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_258 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_258 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_258 >> 8),
                                                  CONCAT14((char)uStack_258,local_260)))) >> 0x20);
                                uVar34 = CONCAT44(iVar35,iVar33);
                                iVar36 = iVar36 + iStack_250;
                                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_248 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_248 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_248 >> 8),
                                                  CONCAT14((char)uStack_248,iStack_250)))) >> 0x20);
                                uVar37 = CONCAT44(iVar38,iVar36);
                                if (iVar18 != 0xe) {
                                  uVar34 = CONCAT44(iVar35 + (int)(CONCAT17((char)((uint)uStack_238
                                                                                  >> 0x18),
                                                                            CONCAT16((char)((uint)
                                                  uStack_238 >> 0x10),
                                                  CONCAT15((char)((uint)uStack_238 >> 8),
                                                           CONCAT14((char)uStack_238,local_240))))
                                                  >> 0x20),iVar33 + local_240);
                                  uVar37 = CONCAT44(iVar38 + (int)(CONCAT17((char)((uint)uStack_228
                                                                                  >> 0x18),
                                                                            CONCAT16((char)((uint)
                                                  uStack_228 >> 0x10),
                                                  CONCAT15((char)((uint)uStack_228 >> 8),
                                                           CONCAT14((char)uStack_228,iStack_230))))
                                                  >> 0x20),iVar36 + iStack_230);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      local_4a8 = (int)uVar34 + (int)((ulong)uVar34 >> 0x20) +
                  (int)uVar37 + (int)((ulong)uVar37 >> 0x20);
      iVar35 = iVar18 * 8;
      if (iVar18 * 4 == uVar5 + 1) goto LAB_0037e5ec;
    }
    local_4a8 = local_4a8 + local_400[iVar35];
    if (iVar35 + 2 < iVar16) {
      local_4a8 = local_4a8 + local_400[iVar35 + 2];
      if (iVar35 + 4 < iVar16) {
        local_4a8 = local_4a8 + local_400[iVar35 + 4];
        if (iVar35 + 6 < iVar16) {
          local_4a8 = local_4a8 + local_400[iVar35 + 6];
          if (iVar35 + 8 < iVar16) {
            local_4a8 = local_4a8 + local_400[iVar35 + 8];
            if (iVar35 + 10 < iVar16) {
              local_4a8 = local_4a8 + local_400[iVar35 + 10];
              if (iVar35 + 0xc < iVar16) {
                local_4a8 = local_4a8 + local_400[iVar35 + 0xc];
              }
            }
          }
        }
      }
    }
  }
LAB_0037e5ec:
  cVar4 = *(char *)(local_4b0 + 2);
  if ((cVar4 == 'f') || ((cVar4 == '1' && (*(char *)(local_4b0 + 3) == 'f')))) {
    __s = (long *)(local_4b0 + (ulong)((byte)(cVar4 - 0x30U) < 10) + 3);
  }
  else {
    __s = &local_480;
    lVar22 = strtol((char *)(local_4b0 + 2),&local_490,10);
    sprintf((char *)__s,"%df%s",(ulong)((int)lVar22 - 1),local_490);
  }
  iVar16 = FUN_00371534(__s,local_4f0);
  if (iVar16 * 2 < 1) {
    iVar18 = 0x28;
  }
  else {
    iVar18 = 0x28;
    pSVar26 = (String *)((long)&local_200 + 4);
    do {
      pSVar1 = pSVar26 + 8;
      iVar35 = (*(uint *)pSVar26 >> 3 & 0x1ff) + 1 <<
               (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar26 & 7) << 1)) & 3);
      iVar18 = ((iVar35 + iVar18) - 1U & -iVar35) + iVar35 * *(uint *)(pSVar26 + -4);
      pSVar26 = pSVar1;
    } while (pSVar1 != local_4f0 + (ulong)(iVar16 * 2 - 1U >> 1) * 8 + 0xc);
  }
  iVar16 = FUN_00371534(local_4b0,local_4f0);
  if (iVar16 * 2 < 1) {
    iVar35 = 0;
  }
  else {
    iVar35 = 0;
    pSVar26 = (String *)((long)&local_200 + 4);
    do {
      pSVar1 = pSVar26 + 8;
      iVar38 = (*(uint *)pSVar26 >> 3 & 0x1ff) + 1 <<
               (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar26 & 7) << 1)) & 3);
      iVar35 = ((iVar38 + iVar35) - 1U & -iVar38) + iVar38 * *(uint *)(pSVar26 + -4);
      pSVar26 = pSVar1;
    } while (pSVar1 != local_4f0 + (ulong)(iVar16 * 2 - 1U >> 1) * 8 + 0xc);
  }
  iVar16 = (local_200._4_4_ >> 3 & 0x1ff) + 1 <<
           (ulong)((uint)(0xfa50L >> ((local_200._4_4_ & 7) << 1)) & 3);
  uVar5 = (iVar35 + iVar16) - 1U & -iVar16;
  lVar22 = cvCreateGraph(uVar32,iVar31,iVar15,iVar18,*(undefined8 *)(param_1 + 0x18));
  if (lVar21 != 0) {
    cvReadRawData(param_1,lVar21,lVar22 + 0x78,lVar20);
  }
  iVar31 = uVar17 * 3;
  if (iVar31 < 0x10000) {
    iVar31 = 0x10000;
  }
  if (iVar31 < (int)(uVar5 * 3)) {
    iVar31 = uVar5 * 3;
  }
  puVar19 = (uint *)cv::cvAlloc((long)iVar31);
  uVar39 = (uint)uVar30;
  pvVar23 = (void *)cv::cvAlloc(-(uVar30 >> 0x1f) & 0xfffffff800000000 | uVar30 << 3);
  lVar20 = cvGetFileNodeByName(param_1,param_2,&DAT_004710a8);
  lVar21 = cvGetFileNodeByName(param_1,param_2,"edges");
  if (lVar21 == 0) {
    local_200 = 0;
    local_1f8 = 0;
    pcVar27 = (char *)cv::String::allocate(local_4f0,0xd);
    cVar4 = s_No_edges_data_004716c8[0xc];
    uVar32 = s_No_edges_data_004716c8._8_4_;
    *(undefined8 *)pcVar27 = s_No_edges_data_004716c8._0_8_;
    *(undefined4 *)(pcVar27 + 8) = uVar32;
    pcVar27[0xc] = cVar4;
    cv::error(-5,local_4f0,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1247);
    cv::String::deallocate(local_4f0);
  }
  if ((lVar20 == 0) && (local_4d8 != 0)) {
    local_200 = 0;
    local_1f8 = 0;
    pcVar27 = (char *)cv::String::allocate(local_4f0,0x10);
    uVar34 = s_No_vertices_data_004716d8._8_8_;
    *(undefined8 *)pcVar27 = s_No_vertices_data_004716d8._0_8_;
    *(undefined8 *)(pcVar27 + 8) = uVar34;
    cv::error(-5,local_4f0,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1249);
    cv::String::deallocate(local_4f0);
  }
  uVar29 = uVar17;
  if ((int)uVar17 < 1) {
    uVar29 = 1;
  }
  bVar14 = false;
  local_4c8 = 0;
  if (uVar29 != 0) {
    local_4c8 = iVar31 / (int)uVar29;
  }
  uVar29 = uVar39;
  if (local_4d8 == 0) goto LAB_0037e8a4;
  do {
    cvStartReadRawData(param_1,lVar20,local_4f0);
    uVar29 = (uint)uVar30;
LAB_0037e8a4:
    if (0 < (int)uVar29) {
      lVar20 = 0;
      iVar16 = 0;
      puVar28 = puVar19;
      do {
        if ((iVar16 == 0) && (local_4d8 != 0)) {
          iVar35 = uVar29 - (int)lVar20;
          iVar16 = local_4c8;
          if (iVar35 < local_4c8) {
            iVar16 = iVar35;
          }
          iVar16 = local_4c4 * iVar16;
          cvReadRawDataSlice(param_1,local_4f0,iVar16,puVar19,local_4d8);
          puVar28 = puVar19;
        }
        if (bVar14) {
          uVar2 = puVar28[1];
          uVar3 = *puVar28;
          local_488 = 0;
          if ((uVar2 < uVar39) && (uVar3 < uVar39)) {
            iVar35 = cvGraphAddEdgeByPtr(lVar22,*(undefined8 *)
                                                 ((long)pvVar23 + (long)(int)uVar3 * 8),
                                         *(undefined8 *)((long)pvVar23 + (long)(int)uVar2 * 8),0,
                                         &local_488);
            if (iVar35 != 0) goto LAB_0037e968;
LAB_0037ec9c:
            local_480 = 0;
            local_478 = 0;
            puVar25 = (undefined8 *)cv::String::allocate((String *)&local_480,0x1b);
            uVar8 = DAT_00471738;
            puVar25[2] = DAT_00471730;
            uVar13 = DAT_0047173a;
            uVar37 = DAT_00471728;
            uVar34 = _LAB_00471720;
            *(undefined2 *)(puVar25 + 3) = uVar8;
            *(undefined1 *)((long)puVar25 + 0x1a) = uVar13;
            *puVar25 = uVar34;
            puVar25[1] = uVar37;
            cv::error(-5,(String *)&local_480,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x127c);
            cv::String::deallocate((String *)&local_480);
            *(uint *)(local_488 + 4) = puVar28[2];
          }
          else {
            local_480 = 0;
            local_478 = 0;
            puVar25 = (undefined8 *)cv::String::allocate((String *)&local_480,0x2e);
            uVar8 = _LAB_0047171c;
            uVar32 = _LAB_00471718;
            uVar7 = DAT_00471708;
            uVar6 = DAT_00471700;
            uVar37 = DAT_004716f8;
            uVar34 = DAT_004716f0;
            puVar25[4] = DAT_00471710;
            *(undefined4 *)(puVar25 + 5) = uVar32;
            *(undefined2 *)((long)puVar25 + 0x2c) = uVar8;
            *puVar25 = uVar34;
            puVar25[1] = uVar37;
            puVar25[2] = uVar6;
            puVar25[3] = uVar7;
            cv::error(-0xd3,(String *)&local_480,"void* icvReadGraph(CvFileStorage*, CvFileNode*)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1276);
            cv::String::deallocate((String *)&local_480);
            iVar35 = cvGraphAddEdgeByPtr(lVar22,*(undefined8 *)
                                                 ((long)pvVar23 + (long)(int)uVar3 * 8),
                                         *(undefined8 *)((long)pvVar23 + (long)(int)uVar2 * 8),0,
                                         &local_488);
            if (iVar35 == 0) goto LAB_0037ec9c;
LAB_0037e968:
            *(uint *)(local_488 + 4) = puVar28[2];
          }
          if (0x28 < iVar15) {
            memcpy((void *)(local_488 + 0x28),(void *)((long)puVar28 + local_4c0 + 0xc & local_4b8),
                   (long)iVar15 - 0x28);
          }
        }
        else {
          cvGraphAddVtx(lVar22,0,&local_480);
          *(long *)((long)pvVar23 + lVar20 * 8) = local_480;
          if (local_4d8 != 0) {
            memcpy((void *)(local_480 + 0x10),puVar28,(long)(int)uVar17);
          }
        }
        lVar20 = lVar20 + 1;
        iVar16 = iVar16 + -1;
        puVar28 = (uint *)((long)puVar28 + (long)(int)uVar17);
      } while ((int)lVar20 < (int)uVar29);
    }
    if (bVar14) {
      cv::cvFree_(puVar19);
      cv::cvFree_(pvVar23);
      return lVar22;
    }
    uVar30 = (ulong)local_49c;
    bVar14 = true;
    uVar29 = uVar5;
    if ((int)uVar5 < 1) {
      uVar29 = 1;
    }
    local_4c4 = local_4a8;
    local_4d8 = local_4b0;
    local_4c8 = 0;
    lVar20 = lVar21;
    uVar17 = uVar5;
    iVar15 = iVar18;
    if (uVar29 != 0) {
      local_4c8 = iVar31 / (int)uVar29;
    }
  } while( true );
}


==================================================================

### FUNC 0037f0ac (3568 bytes) name=FUN_0037f0ac

long FUN_0037f0ac(long param_1,undefined8 param_2)

{
  String *pSVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined2 uVar5;
  char cVar6;
  undefined4 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  bool bVar12;
  bool bVar13;
  bool bVar14;
  bool bVar15;
  int iVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  uint *puVar20;
  char *pcVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  ulong uVar25;
  String *pSVar26;
  long lVar27;
  uint uVar28;
  char *pcVar29;
  long lVar30;
  long lVar31;
  uint uVar32;
  int iVar33;
  int iVar35;
  int iVar36;
  undefined8 uVar37;
  char *local_248;
  uint *local_240;
  uint *local_238;
  undefined8 local_200;
  undefined8 local_1f8;
  int iStack_1f0;
  undefined4 uStack_1e8;
  int local_1e0;
  undefined4 uStack_1d8;
  int iStack_1d0;
  undefined4 uStack_1c8;
  int local_1c0;
  undefined4 uStack_1b8;
  int iStack_1b0;
  undefined4 uStack_1a8;
  int local_1a0;
  undefined4 uStack_198;
  int iStack_190;
  undefined4 uStack_188;
  int local_180;
  undefined4 uStack_178;
  int iStack_170;
  undefined4 uStack_168;
  int local_160;
  undefined4 uStack_158;
  int iStack_150;
  undefined4 uStack_148;
  int local_140;
  undefined4 uStack_138;
  int iStack_130;
  undefined4 uStack_128;
  int local_120;
  undefined4 uStack_118;
  int iStack_110;
  undefined4 uStack_108;
  int local_100;
  undefined4 uStack_f8;
  int iStack_f0;
  undefined4 uStack_e8;
  int local_e0;
  undefined4 uStack_d8;
  int iStack_d0;
  undefined4 uStack_c8;
  int local_c0;
  undefined4 uStack_b8;
  int iStack_b0;
  undefined4 uStack_a8;
  int local_a0;
  undefined4 uStack_98;
  int iStack_90;
  undefined4 uStack_88;
  int local_80;
  undefined4 uStack_78;
  int iStack_70;
  undefined4 uStack_68;
  int local_60;
  undefined4 uStack_58;
  int iStack_50;
  undefined4 uStack_48;
  int local_40;
  undefined4 uStack_38;
  int iStack_30;
  undefined4 uStack_28;
  undefined8 uVar34;
  int iVar38;
  
  local_248 = (char *)0x0;
  puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"flags");
  if (puVar20 == (uint *)0x0) {
    pcVar29 = (char *)0x0;
LAB_0037f108:
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"count");
    if (puVar20 != (uint *)0x0) goto LAB_0037f120;
LAB_0037fbf8:
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    lVar27 = 0;
    if (puVar20 == (uint *)0x0) {
LAB_0037fc2c:
      uVar18 = 0xffffffff;
      goto LAB_0037f918;
    }
    uVar18 = 0xffffffff;
    if ((*puVar20 & 7) == 3) {
      lVar27 = *(long *)(puVar20 + 6);
      goto LAB_0037fc2c;
    }
LAB_0037f914:
    lVar27 = 0;
LAB_0037f918:
    local_200 = 0;
    local_1f8 = 0;
    pcVar21 = (char *)cv::String::allocate((String *)&local_200,0x30);
    uVar8 = s_Some_of_essential_sequence_attri_00471740._40_8_;
    uVar4 = s_Some_of_essential_sequence_attri_00471740._32_8_;
    uVar3 = s_Some_of_essential_sequence_attri_00471740._24_8_;
    uVar37 = s_Some_of_essential_sequence_attri_00471740._16_8_;
    uVar34 = s_Some_of_essential_sequence_attri_00471740._8_8_;
    *(undefined8 *)pcVar21 = s_Some_of_essential_sequence_attri_00471740._0_8_;
    *(undefined8 *)(pcVar21 + 8) = uVar34;
    *(undefined8 *)(pcVar21 + 0x10) = uVar37;
    *(undefined8 *)(pcVar21 + 0x18) = uVar3;
    *(undefined8 *)(pcVar21 + 0x20) = uVar4;
    *(undefined8 *)(pcVar21 + 0x28) = uVar8;
    cv::error(-2,(String *)&local_200,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x107c);
    cv::String::deallocate((String *)&local_200);
    if (9 < (byte)(*pcVar29 - 0x30U)) goto LAB_0037f1a4;
LAB_0037f994:
    uVar25 = strtol(pcVar29,&local_248,0x10);
    uVar17 = (uint)uVar25;
    if ((local_248 == pcVar29) || ((uVar17 & 0xffff0000) != 0x42990000)) {
      local_200 = 0;
      local_1f8 = 0;
      pcVar29 = (char *)cv::String::allocate((String *)&local_200,0x1e);
      uVar5 = s_The_sequence_flags_are_invalid_00471618._28_2_;
      uVar7 = s_The_sequence_flags_are_invalid_00471618._24_4_;
      uVar37 = s_The_sequence_flags_are_invalid_00471618._8_8_;
      uVar34 = s_The_sequence_flags_are_invalid_00471618._0_8_;
      *(undefined8 *)(pcVar29 + 0x10) = s_The_sequence_flags_are_invalid_00471618._16_8_;
      *(undefined4 *)(pcVar29 + 0x18) = uVar7;
      *(undefined2 *)(pcVar29 + 0x1c) = uVar5;
      *(undefined8 *)pcVar29 = uVar34;
      *(undefined8 *)(pcVar29 + 8) = uVar37;
      cv::error(-2,(String *)&local_200,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x108d);
      cv::String::deallocate((String *)&local_200);
    }
    if ((uVar17 & 0xe00) == 0x200) {
      uVar28 = 0x42995000;
      uVar19 = 0x42991000;
    }
    else {
      uVar19 = 0x42990000;
      uVar28 = 0x42994000;
    }
    if ((uVar25 & 0x1000) != 0) {
      uVar19 = uVar28;
    }
    uVar17 = uVar19 | uVar17 & 0x8000 | uVar17 & 0x1ff;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"header_dt");
    if (puVar20 != (uint *)0x0) goto LAB_0037f238;
LAB_0037fa74:
    lVar30 = 0;
    bVar12 = false;
  }
  else {
    if ((*puVar20 & 7) == 3) {
      pcVar29 = *(char **)(puVar20 + 6);
      goto LAB_0037f108;
    }
    pcVar29 = (char *)0x0;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"count");
    if (puVar20 == (uint *)0x0) goto LAB_0037fbf8;
LAB_0037f120:
    if ((*puVar20 & 7) == 1) {
      uVar18 = puVar20[4];
    }
    else {
      uVar18 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar27 = lrint(*(double *)(puVar20 + 4));
        uVar18 = (uint)lVar27;
      }
    }
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,&DAT_00470fb8);
    if ((puVar20 == (uint *)0x0) || ((*puVar20 & 7) != 3)) goto LAB_0037f914;
    lVar27 = *(long *)(puVar20 + 6);
    if ((pcVar29 == (char *)0x0 || lVar27 == 0) || (uVar18 == 0xffffffff)) goto LAB_0037f918;
    if ((byte)(*pcVar29 - 0x30U) < 10) goto LAB_0037f994;
LAB_0037f1a4:
    pcVar21 = strstr(pcVar29,"curve");
    if (pcVar21 == (char *)0x0) {
      uVar28 = 0x42998000;
      uVar17 = 0x4299c000;
      uVar19 = 0x42994000;
      uVar32 = 0x42990000;
    }
    else {
      uVar28 = 0x42999000;
      uVar17 = 0x4299d000;
      uVar19 = 0x42995000;
      uVar32 = 0x42991000;
    }
    pcVar21 = strstr(pcVar29,"closed");
    if (pcVar21 == (char *)0x0) {
      uVar19 = uVar32;
      uVar17 = uVar28;
    }
    pcVar21 = strstr(pcVar29,"hole");
    if (pcVar21 == (char *)0x0) {
      uVar17 = uVar19;
    }
    pcVar29 = strstr(pcVar29,"untyped");
    if (pcVar29 == (char *)0x0) {
      uVar19 = FUN_00375e84(lVar27);
      uVar17 = uVar17 | uVar19;
    }
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"header_dt");
    if (puVar20 == (uint *)0x0) goto LAB_0037fa74;
LAB_0037f238:
    if ((*puVar20 & 7) == 3) {
      lVar30 = *(long *)(puVar20 + 6);
      bVar12 = lVar30 != 0;
    }
    else {
      bVar12 = false;
      lVar30 = 0;
    }
  }
  lVar22 = cvGetFileNodeByName(param_1,param_2,"header_user_data");
  bVar13 = lVar22 != 0;
  if (bVar13 != bVar12) {
    local_200 = 0;
    local_1f8 = 0;
    pcVar29 = (char *)cv::String::allocate((String *)&local_200,0x4a);
    uVar5 = s_One_of__header_dt__and__header_u_00471638._72_2_;
    uVar11 = s_One_of__header_dt__and__header_u_00471638._56_8_;
    uVar10 = s_One_of__header_dt__and__header_u_00471638._48_8_;
    uVar9 = s_One_of__header_dt__and__header_u_00471638._40_8_;
    uVar8 = s_One_of__header_dt__and__header_u_00471638._32_8_;
    uVar4 = s_One_of__header_dt__and__header_u_00471638._24_8_;
    uVar3 = s_One_of__header_dt__and__header_u_00471638._16_8_;
    uVar37 = s_One_of__header_dt__and__header_u_00471638._8_8_;
    uVar34 = s_One_of__header_dt__and__header_u_00471638._0_8_;
    *(undefined8 *)(pcVar29 + 0x40) = s_One_of__header_dt__and__header_u_00471638._64_8_;
    *(undefined2 *)(pcVar29 + 0x48) = uVar5;
    *(undefined8 *)pcVar29 = uVar34;
    *(undefined8 *)(pcVar29 + 8) = uVar37;
    *(undefined8 *)(pcVar29 + 0x10) = uVar3;
    *(undefined8 *)(pcVar29 + 0x18) = uVar4;
    *(undefined8 *)(pcVar29 + 0x20) = uVar8;
    *(undefined8 *)(pcVar29 + 0x28) = uVar9;
    *(undefined8 *)(pcVar29 + 0x30) = uVar10;
    *(undefined8 *)(pcVar29 + 0x38) = uVar11;
    cv::error(-2,(String *)&local_200,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x10af);
    cv::String::deallocate((String *)&local_200);
  }
  lVar23 = cvGetFileNodeByName(param_1,param_2,&DAT_00471200);
  lVar24 = cvGetFileNodeByName(param_1,param_2,"origin");
  bVar14 = lVar23 != 0;
  bVar15 = lVar24 != 0;
  if (1 < (byte)(bVar13 + bVar14 + bVar15)) {
    local_200 = 0;
    local_1f8 = 0;
    pcVar29 = (char *)cv::String::allocate((String *)&local_200,0x42);
    uVar9 = s_Only_one_of__header_user_data_____00471798._40_8_;
    uVar8 = s_Only_one_of__header_user_data_____00471798._32_8_;
    uVar4 = s_Only_one_of__header_user_data_____00471798._24_8_;
    uVar3 = s_Only_one_of__header_user_data_____00471798._16_8_;
    uVar37 = s_Only_one_of__header_user_data_____00471798._8_8_;
    uVar34 = s_Only_one_of__header_user_data_____00471798._0_8_;
    *(undefined2 *)(pcVar29 + 0x40) = s_Only_one_of__header_user_data_____00471798._64_2_;
    uVar11 = s_Only_one_of__header_user_data_____00471798._56_8_;
    uVar10 = s_Only_one_of__header_user_data_____00471798._48_8_;
    *(undefined8 *)pcVar29 = uVar34;
    *(undefined8 *)(pcVar29 + 8) = uVar37;
    *(undefined8 *)(pcVar29 + 0x10) = uVar3;
    *(undefined8 *)(pcVar29 + 0x18) = uVar4;
    *(undefined8 *)(pcVar29 + 0x20) = uVar8;
    *(undefined8 *)(pcVar29 + 0x28) = uVar9;
    *(undefined8 *)(pcVar29 + 0x30) = uVar10;
    *(undefined8 *)(pcVar29 + 0x38) = uVar11;
    cv::error(-2,(String *)&local_200,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x10b5);
    cv::String::deallocate((String *)&local_200);
  }
  if (bVar12 == false) {
    lVar31 = 0x80;
    if ((!bVar14) && (lVar31 = 0x60, bVar15)) {
      lVar31 = 0x68;
    }
  }
  else {
    iVar16 = FUN_00371534(lVar30,(String *)&local_200);
    if (iVar16 * 2 < 1) {
      lVar31 = 0x60;
    }
    else {
      iVar33 = 0x60;
      pSVar26 = (String *)((long)&local_200 + 4);
      do {
        pSVar1 = pSVar26 + 8;
        iVar2 = (*(uint *)pSVar26 >> 3 & 0x1ff) + 1 <<
                (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar26 & 7) << 1)) & 3);
        iVar33 = ((iVar2 + iVar33) - 1U & -iVar2) + iVar2 * *(uint *)(pSVar26 + -4);
        pSVar26 = pSVar1;
      } while (pSVar1 != (String *)&local_200 + (ulong)(iVar16 * 2 - 1U >> 1) * 8 + 0xc);
      lVar31 = (long)iVar33;
    }
  }
  iVar16 = FUN_00371534(lVar27,(String *)&local_200);
  if (iVar16 * 2 < 1) {
    iVar33 = 0;
  }
  else {
    iVar33 = 0;
    pSVar26 = (String *)((long)&local_200 + 4);
    do {
      pSVar1 = pSVar26 + 8;
      iVar2 = (*(uint *)pSVar26 >> 3 & 0x1ff) + 1 <<
              (ulong)((uint)(0xfa50L >> ((*(uint *)pSVar26 & 7) << 1)) & 3);
      iVar33 = ((iVar2 + iVar33) - 1U & -iVar2) + iVar2 * *(uint *)(pSVar26 + -4);
      pSVar26 = pSVar1;
    } while (pSVar1 != (String *)&local_200 + (ulong)(iVar16 * 2 - 1U >> 1) * 8 + 0xc);
  }
  iVar16 = (local_200._4_4_ >> 3 & 0x1ff) + 1 <<
           (ulong)((uint)(0xfa50L >> (ulong)((local_200._4_4_ & 7) << 1)) & 3);
  lVar31 = cvCreateSeq(uVar17,lVar31,(long)(int)((iVar33 + iVar16) - 1U & -iVar16),
                       *(undefined8 *)(param_1 + 0x18));
  if (bVar13) {
    cvReadRawData(param_1,lVar22,lVar31 + 0x60,lVar30);
  }
  else if (bVar14) {
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar23,"x");
    if (puVar20 == (uint *)0x0) {
      uVar17 = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      uVar17 = puVar20[4];
    }
    else {
      uVar17 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar30 = lrint(*(double *)(puVar20 + 4));
        uVar17 = (uint)lVar30;
      }
    }
    *(uint *)(lVar31 + 0x60) = uVar17;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar23,&DAT_00452188);
    if (puVar20 == (uint *)0x0) {
      uVar17 = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      uVar17 = puVar20[4];
    }
    else {
      uVar17 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar30 = lrint(*(double *)(puVar20 + 4));
        uVar17 = (uint)lVar30;
      }
    }
    *(uint *)(lVar31 + 100) = uVar17;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar23,"width");
    if (puVar20 == (uint *)0x0) {
      uVar17 = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      uVar17 = puVar20[4];
    }
    else {
      uVar17 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar30 = lrint(*(double *)(puVar20 + 4));
        uVar17 = (uint)lVar30;
      }
    }
    *(uint *)(lVar31 + 0x68) = uVar17;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar23,"height");
    if (puVar20 == (uint *)0x0) {
      uVar17 = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      uVar17 = puVar20[4];
    }
    else {
      uVar17 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar30 = lrint(*(double *)(puVar20 + 4));
        uVar17 = (uint)lVar30;
      }
    }
    *(uint *)(lVar31 + 0x6c) = uVar17;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"color");
    if (puVar20 == (uint *)0x0) {
      *(undefined4 *)(lVar31 + 0x70) = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      *(uint *)(lVar31 + 0x70) = puVar20[4];
    }
    else if ((*puVar20 & 7) == 2) {
      lVar30 = lrint(*(double *)(puVar20 + 4));
      *(int *)(lVar31 + 0x70) = (int)lVar30;
    }
    else {
      *(undefined4 *)(lVar31 + 0x70) = 0x7fffffff;
    }
  }
  else if (bVar15) {
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar24,"x");
    if (puVar20 == (uint *)0x0) {
      uVar17 = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      uVar17 = puVar20[4];
    }
    else {
      uVar17 = 0x7fffffff;
      if ((*puVar20 & 7) == 2) {
        lVar30 = lrint(*(double *)(puVar20 + 4));
        uVar17 = (uint)lVar30;
      }
    }
    *(uint *)(lVar31 + 0x60) = uVar17;
    puVar20 = (uint *)cvGetFileNodeByName(param_1,lVar24,&DAT_00452188);
    if (puVar20 == (uint *)0x0) {
      *(undefined4 *)(lVar31 + 100) = 0;
    }
    else if ((*puVar20 & 7) == 1) {
      *(uint *)(lVar31 + 100) = puVar20[4];
    }
    else if ((*puVar20 & 7) == 2) {
      lVar30 = lrint(*(double *)(puVar20 + 4));
      *(int *)(lVar31 + 100) = (int)lVar30;
    }
    else {
      *(undefined4 *)(lVar31 + 100) = 0x7fffffff;
    }
  }
  cvSeqPushMulti(lVar31,0,uVar18,0);
  iVar16 = FUN_00371534(lVar27,(String *)&local_200);
  iVar16 = iVar16 * 2;
  if (iVar16 < 1) {
    iVar33 = 0;
  }
  else {
    uVar17 = iVar16 - 1U >> 1;
    iVar2 = (uVar17 - 4 >> 2) + 1;
    if (iVar16 - 1U < 8) {
      iVar33 = 0;
      iVar35 = 0;
    }
    else {
      uVar37 = CONCAT17((char)((uint)uStack_1e8 >> 0x18),
                        CONCAT16((char)((uint)uStack_1e8 >> 0x10),
                                 CONCAT15((char)((uint)uStack_1e8 >> 8),
                                          CONCAT14((char)uStack_1e8,iStack_1f0))));
      uVar34 = CONCAT17((char)((ulong)local_1f8 >> 0x18),
                        CONCAT16((char)((ulong)local_1f8 >> 0x10),
                                 CONCAT15((char)((ulong)local_1f8 >> 8),
                                          CONCAT14((char)local_1f8,(int)local_200))));
      if (iVar2 != 1) {
        iVar33 = (int)local_200 + local_1e0;
        iVar35 = (int)((ulong)uVar34 >> 0x20) +
                 (int)(CONCAT17((char)((uint)uStack_1d8 >> 0x18),
                                CONCAT16((char)((uint)uStack_1d8 >> 0x10),
                                         CONCAT15((char)((uint)uStack_1d8 >> 8),
                                                  CONCAT14((char)uStack_1d8,local_1e0)))) >> 0x20);
        uVar34 = CONCAT44(iVar35,iVar33);
        iVar38 = (int)((ulong)uVar37 >> 0x20) +
                 (int)(CONCAT17((char)((uint)uStack_1c8 >> 0x18),
                                CONCAT16((char)((uint)uStack_1c8 >> 0x10),
                                         CONCAT15((char)((uint)uStack_1c8 >> 8),
                                                  CONCAT14((char)uStack_1c8,iStack_1d0)))) >> 0x20);
        uVar37 = CONCAT44(iVar38,iStack_1f0 + iStack_1d0);
        if (iVar2 != 2) {
          iVar33 = iVar33 + local_1c0;
          iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_1b8 >> 0x18),
                                           CONCAT16((char)((uint)uStack_1b8 >> 0x10),
                                                    CONCAT15((char)((uint)uStack_1b8 >> 8),
                                                             CONCAT14((char)uStack_1b8,local_1c0))))
                                 >> 0x20);
          uVar34 = CONCAT44(iVar35,iVar33);
          iVar36 = iStack_1f0 + iStack_1d0 + iStack_1b0;
          iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_1a8 >> 0x18),
                                           CONCAT16((char)((uint)uStack_1a8 >> 0x10),
                                                    CONCAT15((char)((uint)uStack_1a8 >> 8),
                                                             CONCAT14((char)uStack_1a8,iStack_1b0)))
                                          ) >> 0x20);
          uVar37 = CONCAT44(iVar38,iVar36);
          if (iVar2 != 3) {
            iVar33 = iVar33 + local_1a0;
            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_198 >> 0x18),
                                             CONCAT16((char)((uint)uStack_198 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_198 >> 8),
                                                               CONCAT14((char)uStack_198,local_1a0))
                                                     )) >> 0x20);
            uVar34 = CONCAT44(iVar35,iVar33);
            iVar36 = iVar36 + iStack_190;
            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_188 >> 0x18),
                                             CONCAT16((char)((uint)uStack_188 >> 0x10),
                                                      CONCAT15((char)((uint)uStack_188 >> 8),
                                                               CONCAT14((char)uStack_188,iStack_190)
                                                              ))) >> 0x20);
            uVar37 = CONCAT44(iVar38,iVar36);
            if (iVar2 != 4) {
              iVar33 = iVar33 + local_180;
              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_178 >> 0x18),
                                               CONCAT16((char)((uint)uStack_178 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_178 >> 8),
                                                                 CONCAT14((char)uStack_178,local_180
                                                                         )))) >> 0x20);
              uVar34 = CONCAT44(iVar35,iVar33);
              iVar36 = iVar36 + iStack_170;
              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_168 >> 0x18),
                                               CONCAT16((char)((uint)uStack_168 >> 0x10),
                                                        CONCAT15((char)((uint)uStack_168 >> 8),
                                                                 CONCAT14((char)uStack_168,
                                                                          iStack_170)))) >> 0x20);
              uVar37 = CONCAT44(iVar38,iVar36);
              if (iVar2 != 5) {
                iVar33 = iVar33 + local_160;
                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_158 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_158 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_158 >> 8),
                                                                   CONCAT14((char)uStack_158,
                                                                            local_160)))) >> 0x20);
                uVar34 = CONCAT44(iVar35,iVar33);
                iVar36 = iVar36 + iStack_150;
                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_148 >> 0x18),
                                                 CONCAT16((char)((uint)uStack_148 >> 0x10),
                                                          CONCAT15((char)((uint)uStack_148 >> 8),
                                                                   CONCAT14((char)uStack_148,
                                                                            iStack_150)))) >> 0x20);
                uVar37 = CONCAT44(iVar38,iVar36);
                if (iVar2 != 6) {
                  iVar33 = iVar33 + local_140;
                  iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_138 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_138 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_138 >> 8),
                                                                     CONCAT14((char)uStack_138,
                                                                              local_140)))) >> 0x20)
                  ;
                  uVar34 = CONCAT44(iVar35,iVar33);
                  iVar36 = iVar36 + iStack_130;
                  iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_128 >> 0x18),
                                                   CONCAT16((char)((uint)uStack_128 >> 0x10),
                                                            CONCAT15((char)((uint)uStack_128 >> 8),
                                                                     CONCAT14((char)uStack_128,
                                                                              iStack_130)))) >> 0x20
                                         );
                  uVar37 = CONCAT44(iVar38,iVar36);
                  if (iVar2 != 7) {
                    iVar33 = iVar33 + local_120;
                    iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_118 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_118 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_118 >> 8)
                                                                       ,CONCAT14((char)uStack_118,
                                                                                 local_120)))) >>
                                           0x20);
                    uVar34 = CONCAT44(iVar35,iVar33);
                    iVar36 = iVar36 + iStack_110;
                    iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_108 >> 0x18),
                                                     CONCAT16((char)((uint)uStack_108 >> 0x10),
                                                              CONCAT15((char)((uint)uStack_108 >> 8)
                                                                       ,CONCAT14((char)uStack_108,
                                                                                 iStack_110)))) >>
                                           0x20);
                    uVar37 = CONCAT44(iVar38,iVar36);
                    if (iVar2 != 8) {
                      iVar33 = iVar33 + local_100;
                      iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_f8 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_f8 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_f8 >> 8
                                                                               ),CONCAT14((char)
                                                  uStack_f8,local_100)))) >> 0x20);
                      uVar34 = CONCAT44(iVar35,iVar33);
                      iVar36 = iVar36 + iStack_f0;
                      iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_e8 >> 0x18),
                                                       CONCAT16((char)((uint)uStack_e8 >> 0x10),
                                                                CONCAT15((char)((uint)uStack_e8 >> 8
                                                                               ),CONCAT14((char)
                                                  uStack_e8,iStack_f0)))) >> 0x20);
                      uVar37 = CONCAT44(iVar38,iVar36);
                      if (iVar2 != 9) {
                        iVar33 = iVar33 + local_e0;
                        iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_d8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_d8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_d8 >>
                                                                                 8),CONCAT14((char)
                                                  uStack_d8,local_e0)))) >> 0x20);
                        uVar34 = CONCAT44(iVar35,iVar33);
                        iVar36 = iVar36 + iStack_d0;
                        iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_c8 >> 0x18),
                                                         CONCAT16((char)((uint)uStack_c8 >> 0x10),
                                                                  CONCAT15((char)((uint)uStack_c8 >>
                                                                                 8),CONCAT14((char)
                                                  uStack_c8,iStack_d0)))) >> 0x20);
                        uVar37 = CONCAT44(iVar38,iVar36);
                        if (iVar2 != 10) {
                          iVar33 = iVar33 + local_c0;
                          iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_b8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_b8 >> 0x10),
                                                                    CONCAT15((char)((uint)uStack_b8
                                                                                   >> 8),
                                                                             CONCAT14((char)
                                                  uStack_b8,local_c0)))) >> 0x20);
                          uVar34 = CONCAT44(iVar35,iVar33);
                          iVar36 = iVar36 + iStack_b0;
                          iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_a8 >> 0x18),
                                                           CONCAT16((char)((uint)uStack_a8 >> 0x10),
                                                                    CONCAT15((char)((uint)uStack_a8
                                                                                   >> 8),
                                                                             CONCAT14((char)
                                                  uStack_a8,iStack_b0)))) >> 0x20);
                          uVar37 = CONCAT44(iVar38,iVar36);
                          if (iVar2 != 0xb) {
                            iVar33 = iVar33 + local_a0;
                            iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_98 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_98 >> 0x10
                                                                            ),CONCAT15((char)((uint)
                                                  uStack_98 >> 8),CONCAT14((char)uStack_98,local_a0)
                                                  ))) >> 0x20);
                            uVar34 = CONCAT44(iVar35,iVar33);
                            iVar36 = iVar36 + iStack_90;
                            iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_88 >> 0x18),
                                                             CONCAT16((char)((uint)uStack_88 >> 0x10
                                                                            ),CONCAT15((char)((uint)
                                                  uStack_88 >> 8),
                                                  CONCAT14((char)uStack_88,iStack_90)))) >> 0x20);
                            uVar37 = CONCAT44(iVar38,iVar36);
                            if (iVar2 != 0xc) {
                              iVar33 = iVar33 + local_80;
                              iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_78 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_78 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_78 >> 8),CONCAT14((char)uStack_78,local_80)
                                                  ))) >> 0x20);
                              uVar34 = CONCAT44(iVar35,iVar33);
                              iVar36 = iVar36 + iStack_70;
                              iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_68 >> 0x18),
                                                               CONCAT16((char)((uint)uStack_68 >>
                                                                              0x10),
                                                                        CONCAT15((char)((uint)
                                                  uStack_68 >> 8),
                                                  CONCAT14((char)uStack_68,iStack_70)))) >> 0x20);
                              uVar37 = CONCAT44(iVar38,iVar36);
                              if (iVar2 != 0xd) {
                                iVar33 = iVar33 + local_60;
                                iVar35 = iVar35 + (int)(CONCAT17((char)((uint)uStack_58 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_58 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_58 >> 8),CONCAT14((char)uStack_58,local_60)
                                                  ))) >> 0x20);
                                uVar34 = CONCAT44(iVar35,iVar33);
                                iVar36 = iVar36 + iStack_50;
                                iVar38 = iVar38 + (int)(CONCAT17((char)((uint)uStack_48 >> 0x18),
                                                                 CONCAT16((char)((uint)uStack_48 >>
                                                                                0x10),
                                                                          CONCAT15((char)((uint)
                                                  uStack_48 >> 8),
                                                  CONCAT14((char)uStack_48,iStack_50)))) >> 0x20);
                                uVar37 = CONCAT44(iVar38,iVar36);
                                if (iVar2 != 0xe) {
                                  uVar34 = CONCAT44(iVar35 + (int)(CONCAT17((char)((uint)uStack_38
                                                                                  >> 0x18),
                                                                            CONCAT16((char)((uint)
                                                  uStack_38 >> 0x10),
                                                  CONCAT15((char)((uint)uStack_38 >> 8),
                                                           CONCAT14((char)uStack_38,local_40)))) >>
                                                  0x20),iVar33 + local_40);
                                  uVar37 = CONCAT44(iVar38 + (int)(CONCAT17((char)((uint)uStack_28
                                                                                  >> 0x18),
                                                                            CONCAT16((char)((uint)
                                                  uStack_28 >> 0x10),
                                                  CONCAT15((char)((uint)uStack_28 >> 8),
                                                           CONCAT14((char)uStack_28,iStack_30)))) >>
                                                  0x20),iVar36 + iStack_30);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar33 = (int)uVar34 + (int)((ulong)uVar34 >> 0x20) +
               (int)uVar37 + (int)((ulong)uVar37 >> 0x20);
      iVar35 = iVar2 * 8;
      if (uVar17 + 1 == iVar2 * 4) goto LAB_0037f7cc;
    }
    iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)iVar35 * 4);
    if (iVar35 + 2 < iVar16) {
      iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 2) * 4);
      if (iVar35 + 4 < iVar16) {
        iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 4) * 4);
        if (iVar35 + 6 < iVar16) {
          iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 6) * 4);
          if (iVar35 + 8 < iVar16) {
            iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 8) * 4);
            if (iVar35 + 10 < iVar16) {
              iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 10) * 4);
              if (iVar35 + 0xc < iVar16) {
                iVar33 = iVar33 + *(int *)((String *)&local_200 + (long)(iVar35 + 0xc) * 4);
              }
            }
          }
        }
      }
    }
  }
LAB_0037f7cc:
  puVar20 = (uint *)cvGetFileNodeByName(param_1,param_2,"data");
  if (puVar20 == (uint *)0x0) {
    local_240 = puVar20;
    local_238 = puVar20;
    pcVar29 = (char *)cv::String::allocate((String *)&local_240,0x2b);
    cVar6 = s_The_image_data_is_not_found_in_f_00471458[0x2a];
    uVar5 = s_The_image_data_is_not_found_in_f_00471458._40_2_;
    uVar4 = s_The_image_data_is_not_found_in_f_00471458._24_8_;
    uVar3 = s_The_image_data_is_not_found_in_f_00471458._16_8_;
    uVar37 = s_The_image_data_is_not_found_in_f_00471458._8_8_;
    uVar34 = s_The_image_data_is_not_found_in_f_00471458._0_8_;
    *(undefined8 *)(pcVar29 + 0x20) = s_The_image_data_is_not_found_in_f_00471458._32_8_;
    *(undefined2 *)(pcVar29 + 0x28) = uVar5;
    pcVar29[0x2a] = cVar6;
    *(undefined8 *)pcVar29 = uVar34;
    *(undefined8 *)(pcVar29 + 8) = uVar37;
    *(undefined8 *)(pcVar29 + 0x10) = uVar3;
    *(undefined8 *)(pcVar29 + 0x18) = uVar4;
    cv::error(-2,(String *)&local_240,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x10df);
    cv::String::deallocate((String *)&local_240);
  }
  if ((*puVar20 & 7) < 5) {
    uVar17 = (uint)((*puVar20 & 7) != 0);
  }
  else {
    uVar17 = *(uint *)(*(long *)(puVar20 + 4) + 0x28);
  }
  if (iVar33 * uVar18 != uVar17) {
    local_240 = (uint *)0x0;
    local_238 = (uint *)0x0;
    pcVar29 = (char *)cv::String::allocate((String *)&local_240,0x37);
    cVar6 = s_The_number_of_stored_elements_do_004717e0[0x36];
    uVar5 = s_The_number_of_stored_elements_do_004717e0._52_2_;
    uVar9 = s_The_number_of_stored_elements_do_004717e0._40_8_;
    uVar8 = s_The_number_of_stored_elements_do_004717e0._32_8_;
    uVar4 = s_The_number_of_stored_elements_do_004717e0._24_8_;
    uVar3 = s_The_number_of_stored_elements_do_004717e0._16_8_;
    uVar37 = s_The_number_of_stored_elements_do_004717e0._8_8_;
    uVar34 = s_The_number_of_stored_elements_do_004717e0._0_8_;
    *(undefined4 *)(pcVar29 + 0x30) = s_The_number_of_stored_elements_do_004717e0._48_4_;
    *(undefined2 *)(pcVar29 + 0x34) = uVar5;
    pcVar29[0x36] = cVar6;
    *(undefined8 *)pcVar29 = uVar34;
    *(undefined8 *)(pcVar29 + 8) = uVar37;
    *(undefined8 *)(pcVar29 + 0x10) = uVar3;
    *(undefined8 *)(pcVar29 + 0x18) = uVar4;
    *(undefined8 *)(pcVar29 + 0x20) = uVar8;
    *(undefined8 *)(pcVar29 + 0x28) = uVar9;
    cv::error(-2,(String *)&local_240,"void* icvReadSeq(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x10e2);
    cv::String::deallocate((String *)&local_240);
  }
  cvStartReadRawData(param_1,puVar20,(String *)&local_240);
  for (lVar30 = *(long *)(lVar31 + 0x58);
      (lVar30 != 0 &&
      (cvReadRawDataSlice(param_1,(String *)&local_240,iVar33 * *(int *)(lVar30 + 0x14),
                          *(undefined8 *)(lVar30 + 0x18),lVar27),
      **(long **)(lVar31 + 0x58) != lVar30)); lVar30 = *(long *)(lVar30 + 8)) {
  }
  return lVar31;
}


==================================================================

### FUNC 0037ff20 (592 bytes) name=cvWriteFileNode

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWriteFileNode(int *param_1,undefined8 param_2,uint *param_3,int param_4)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined2 uVar6;
  char cVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  char *pcVar10;
  undefined8 *puVar11;
  long lVar12;
  int iVar13;
  int iVar14;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  int *local_28;
  int *local_18;
  
  local_48 = 0;
  if (param_1 == (int *)0x0) {
    iVar14 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_0037ffd8;
    iVar14 = -5;
  }
  local_40 = 0;
  local_38 = 0;
  pcVar10 = (char *)cv::String::allocate((String *)&local_40,0x1f);
  cVar7 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar6 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar5 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
  *(undefined8 *)(pcVar10 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar10 + 0x18) = uVar5;
  *(undefined2 *)(pcVar10 + 0x1c) = uVar6;
  pcVar10[0x1e] = cVar7;
  *(undefined8 *)pcVar10 = uVar3;
  *(undefined8 *)(pcVar10 + 8) = uVar4;
  cv::error(iVar14,(String *)&local_40,
            "void cvWriteFileNode(CvFileStorage*, const char*, const CvFileNode*, int)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd75);
  cv::String::deallocate((String *)&local_40);
LAB_0037ffd8:
  if (param_1[2] == 0) {
    local_40 = 0;
    local_38 = 0;
    puVar11 = (undefined8 *)cv::String::allocate((String *)&local_40,0x26);
    uVar6 = DAT_00470f04;
    uVar9 = DAT_00470ef8;
    uVar8 = DAT_00470ef0;
    uVar4 = _LAB_00470ee8;
    uVar3 = _DAT_00470ee0;
    *(undefined4 *)(puVar11 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar11 + 0x24) = uVar6;
    *puVar11 = uVar3;
    puVar11[1] = uVar4;
    puVar11[2] = uVar8;
    puVar11[3] = uVar9;
    cv::error(-2,(String *)&local_40,
              "void cvWriteFileNode(CvFileStorage*, const char*, const CvFileNode*, int)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xd75);
    cv::String::deallocate((String *)&local_40);
  }
  if (param_3 != (uint *)0x0) {
    uVar1 = *param_3;
    if ((param_4 == 0) || ((uVar1 & 7) < 5)) {
      FUN_00374908(param_1,param_2,param_3);
    }
    else {
      lVar12 = *(long *)(param_3 + 4);
      iVar14 = *(int *)(lVar12 + 0x28);
      iVar2 = *(int *)(lVar12 + 0x2c);
      cvStartReadSeq(lVar12,&local_40,0);
      if (0 < iVar14) {
        iVar13 = 0;
        if ((uVar1 & 7) == 6) {
          do {
            if (-1 < *local_28) {
              FUN_00374908(param_1,*(undefined8 *)(*(long *)(local_28 + 8) + 0x10));
            }
            local_28 = (int *)((long)local_28 + (long)iVar2);
            if (local_18 <= local_28) {
              cvChangeSeqBlock(&local_40,1);
            }
            iVar13 = iVar13 + 1;
          } while (iVar13 != iVar14);
        }
        else {
          do {
            FUN_00374908(param_1,0,local_28);
            local_28 = (int *)((long)local_28 + (long)iVar2);
            if (local_18 <= local_28) {
              cvChangeSeqBlock(&local_40,1);
            }
            iVar13 = iVar13 + 1;
          } while (iVar13 != iVar14);
        }
      }
    }
    cvReleaseFileStorage(&local_48);
  }
  return;
}


==================================================================

### FUNC 00380198 (32 bytes) name=cvGetFileNodeName

undefined8 cvGetFileNodeName(uint *param_1)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (param_1 != (uint *)0x0) {
    if ((*param_1 >> 6 & 1) == 0) {
      return 0;
    }
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 8) + 0x10);
  }
  return uVar1;
}


==================================================================

### FUNC 003801b8 (844 bytes) name=cvRegisterType

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvRegisterType(undefined8 *param_1)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined2 uVar11;
  char cVar12;
  undefined *puVar13;
  int iVar14;
  char *pcVar15;
  size_t sVar16;
  undefined8 *puVar17;
  undefined8 uVar18;
  long lVar19;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((param_1 == (undefined8 *)0x0) || (*(int *)((long)param_1 + 4) != 0x48)) {
    local_10 = 0;
    local_8 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_10,0x11);
    uVar2 = s_Invalid_type_info_00471818._8_8_;
    uVar18 = s_Invalid_type_info_00471818._0_8_;
    pcVar15[0x10] = s_Invalid_type_info_00471818[0x10];
    *(undefined8 *)pcVar15 = uVar18;
    *(undefined8 *)(pcVar15 + 8) = uVar2;
    cv::error(-0xc9,(String *)&local_10,"void cvRegisterType(const CvTypeInfo*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x12d5);
    cv::String::deallocate((String *)&local_10);
  }
  if ((((param_1[4] == 0) || (param_1[5] == 0)) || (param_1[6] == 0)) || (param_1[7] == 0)) {
    local_10 = 0;
    local_8 = 0;
    puVar17 = (undefined8 *)cv::String::allocate((String *)&local_10,0x51);
    uVar10 = DAT_00471878;
    uVar9 = DAT_00471870;
    uVar8 = DAT_00471868;
    uVar7 = DAT_00471860;
    uVar6 = DAT_00471858;
    uVar5 = _LAB_00471850;
    uVar4 = _LAB_00471848;
    uVar3 = _LAB_00471840;
    uVar2 = DAT_00471838;
    uVar18 = _LAB_00471830;
    *(undefined1 *)(puVar17 + 10) = DAT_00471880;
    *puVar17 = uVar18;
    puVar17[1] = uVar2;
    puVar17[2] = uVar3;
    puVar17[3] = uVar4;
    puVar17[4] = uVar5;
    puVar17[5] = uVar6;
    puVar17[6] = uVar7;
    puVar17[7] = uVar8;
    puVar17[8] = uVar9;
    puVar17[9] = uVar10;
    cv::error(-0x1b,(String *)&local_10,"void cvRegisterType(const CvTypeInfo*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x12db);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar15 = (char *)param_1[3];
  if ((0x19 < (((int)*pcVar15 & 0xffffffdfU) - 0x41 & 0xff)) && ((int)*pcVar15 != 0x5f)) {
    local_10 = 0;
    local_8 = 0;
    pcVar15 = (char *)cv::String::allocate((String *)&local_10,0x29);
    cVar12 = s_Type_name_should_start_with_a_le_004718c0[0x28];
    uVar4 = s_Type_name_should_start_with_a_le_004718c0._24_8_;
    uVar3 = s_Type_name_should_start_with_a_le_004718c0._16_8_;
    uVar2 = s_Type_name_should_start_with_a_le_004718c0._8_8_;
    uVar18 = s_Type_name_should_start_with_a_le_004718c0._0_8_;
    *(undefined8 *)(pcVar15 + 0x20) = s_Type_name_should_start_with_a_le_004718c0._32_8_;
    pcVar15[0x28] = cVar12;
    *(undefined8 *)pcVar15 = uVar18;
    *(undefined8 *)(pcVar15 + 8) = uVar2;
    *(undefined8 *)(pcVar15 + 0x10) = uVar3;
    *(undefined8 *)(pcVar15 + 0x18) = uVar4;
    cv::error(-5,(String *)&local_10,"void cvRegisterType(const CvTypeInfo*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x12df);
    cv::String::deallocate((String *)&local_10);
    pcVar15 = (char *)param_1[3];
  }
  sVar16 = strlen(pcVar15);
  iVar14 = (int)sVar16;
  if (0 < iVar14) {
    lVar19 = 0;
    while( true ) {
      bVar1 = pcVar15[lVar19];
      if (((9 < (byte)(bVar1 - 0x30)) && (0x19 < (byte)((bVar1 & 0xdf) + 0xbf))) &&
         ((bVar1 != 0x2d && (bVar1 != 0x5f)))) {
        local_10 = 0;
        local_8 = 0;
        pcVar15 = (char *)cv::String::allocate((String *)&local_10,0x36);
        uVar11 = s_Type_name_should_contain_only_le_00471888._52_2_;
        uVar6 = s_Type_name_should_contain_only_le_00471888._40_8_;
        uVar5 = s_Type_name_should_contain_only_le_00471888._32_8_;
        uVar4 = s_Type_name_should_contain_only_le_00471888._24_8_;
        uVar3 = s_Type_name_should_contain_only_le_00471888._16_8_;
        uVar2 = s_Type_name_should_contain_only_le_00471888._8_8_;
        uVar18 = s_Type_name_should_contain_only_le_00471888._0_8_;
        *(undefined4 *)(pcVar15 + 0x30) = s_Type_name_should_contain_only_le_00471888._48_4_;
        *(undefined2 *)(pcVar15 + 0x34) = uVar11;
        *(undefined8 *)pcVar15 = uVar18;
        *(undefined8 *)(pcVar15 + 8) = uVar2;
        *(undefined8 *)(pcVar15 + 0x10) = uVar3;
        *(undefined8 *)(pcVar15 + 0x18) = uVar4;
        *(undefined8 *)(pcVar15 + 0x20) = uVar5;
        *(undefined8 *)(pcVar15 + 0x28) = uVar6;
        cv::error(-5,(String *)&local_10,"void cvRegisterType(const CvTypeInfo*)",
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x12e8);
        cv::String::deallocate((String *)&local_10);
      }
      lVar19 = lVar19 + 1;
      if (iVar14 <= (int)lVar19) break;
      pcVar15 = (char *)param_1[3];
    }
  }
  puVar17 = (undefined8 *)cv::cvAlloc((long)iVar14 + 0x49);
  uVar18 = param_1[1];
  *puVar17 = *param_1;
  puVar17[1] = uVar18;
  uVar18 = param_1[3];
  puVar17[2] = param_1[2];
  puVar17[3] = uVar18;
  uVar18 = param_1[5];
  puVar17[4] = param_1[4];
  puVar17[5] = uVar18;
  uVar18 = param_1[7];
  puVar17[6] = param_1[6];
  puVar17[7] = uVar18;
  uVar18 = param_1[8];
  puVar17[3] = puVar17 + 9;
  puVar17[8] = uVar18;
  memcpy(puVar17 + 9,(void *)param_1[3],(long)(iVar14 + 1));
  *(undefined4 *)puVar17 = 0;
  puVar13 = PTR_first_00501d40;
  puVar17[1] = 0;
  lVar19 = *(long *)puVar13;
  puVar17[2] = lVar19;
  if (lVar19 == 0) {
    *(undefined8 **)PTR_last_00501bd8 = puVar17;
  }
  else {
    *(undefined8 **)(lVar19 + 8) = puVar17;
  }
  *(undefined8 **)PTR_first_00501d40 = puVar17;
  return;
}


==================================================================

### FUNC 00380554 (92 bytes) name=CvType

/* CvType::CvType(char const*, int (*)(void const*), void (*)(void**), void* (*)(CvFileStorage*,
   CvFileNode*), void (*)(CvFileStorage*, char const*, void const*, CvAttrList), void* (*)(void
   const*)) */

void __thiscall
CvType::CvType(CvType *this,char *param_1,_func_int_void_ptr *param_2,
              _func_void_void_ptr_ptr *param_3,
              _func_void_ptr_CvFileStorage_ptr_CvFileNode_ptr *param_4,
              _func_void_CvFileStorage_ptr_char_ptr_void_ptr_CvAttrList *param_5,
              _func_void_ptr_void_ptr *param_6)

{
  undefined4 local_48;
  undefined4 local_44;
  undefined8 local_40;
  undefined8 local_38;
  char *local_30;
  _func_int_void_ptr *local_28;
  _func_void_void_ptr_ptr *local_20;
  _func_void_ptr_CvFileStorage_ptr_CvFileNode_ptr *local_18;
  _func_void_CvFileStorage_ptr_char_ptr_void_ptr_CvAttrList *local_10;
  _func_void_ptr_void_ptr *local_8;
  
  local_44 = 0x48;
  local_48 = 0;
  local_38 = 0;
  local_40 = 0;
  local_30 = param_1;
  local_28 = param_2;
  local_20 = param_3;
  local_18 = param_4;
  local_10 = param_5;
  local_8 = param_6;
  cvRegisterType(&local_48);
  *(undefined8 *)this = *(undefined8 *)PTR_first_00501d40;
  return;
}


==================================================================

### FUNC 003805b0 (16 bytes) name=cvFirstType

undefined8 cvFirstType(void)

{
  return *(undefined8 *)PTR_first_00501d40;
}


==================================================================

### FUNC 003805c0 (92 bytes) name=cvFindType

long cvFindType(char *param_1)

{
  int iVar1;
  long lVar2;
  
  if (param_1 == (char *)0x0) {
    lVar2 = 0;
  }
  else {
    lVar2 = *(long *)PTR_first_00501d40;
    while ((lVar2 != 0 && (iVar1 = strcmp(*(char **)(lVar2 + 0x18),param_1), iVar1 != 0))) {
      lVar2 = *(long *)(lVar2 + 0x10);
    }
  }
  return lVar2;
}


==================================================================

### FUNC 00380620 (7340 bytes) name=FUN_00380620

byte * FUN_00380620(long param_1,byte *param_2,uint *param_3,ulong param_4,int param_5)

{
  byte bVar1;
  undefined8 uVar2;
  char cVar3;
  bool bVar4;
  uint uVar5;
  undefined8 uVar6;
  size_t sVar7;
  uint *puVar8;
  undefined8 *puVar9;
  char *pcVar10;
  undefined4 uVar11;
  int iVar12;
  long lVar13;
  int iVar14;
  ulong uVar15;
  ulong uVar16;
  uint uVar17;
  ulong uVar18;
  ulong uVar19;
  byte *pbVar20;
  byte bVar21;
  byte bVar22;
  int iVar23;
  int iVar24;
  byte *pbVar25;
  uint uVar26;
  byte *pbVar27;
  double dVar28;
  double dVar29;
  undefined1 auVar30 [16];
  byte *local_1808;
  char acStack_1800 [1024];
  long local_1400;
  long local_13f8;
  
  bVar21 = *param_2;
  uVar5 = (uint)(char)bVar21;
  bVar1 = param_2[1];
  uVar26 = (uint)(char)bVar1;
  param_3[0] = 0;
  param_3[1] = 0;
  param_3[2] = 0;
  param_3[3] = 0;
  local_1808 = (byte *)0x0;
  param_3[4] = 0;
  param_3[5] = 0;
  param_3[6] = 0;
  param_3[7] = 0;
  param_4 = param_4 >> 3;
  bVar22 = 0;
  if (bVar21 == 0x21) {
    if ((bVar1 == 0x5e) || (bVar21 = 0, bVar1 == 0x21)) {
      param_2 = param_2 + 1;
      bVar21 = 0x10;
    }
    pbVar27 = param_2 + 1;
    do {
      pbVar20 = param_2;
      local_1808 = pbVar20 + 1;
      bVar1 = pbVar20[1];
      uVar26 = (uint)(char)bVar1;
      param_2 = local_1808;
    } while (0x20 < bVar1);
    lVar13 = (long)local_1808 - (long)pbVar27;
    iVar24 = (int)lVar13;
    if (iVar24 == 0) {
      sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),"Empty type name");
      cvError(0xffffff2c,"char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
              &local_1400,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
              0x421);
      uVar26 = (uint)(char)*local_1808;
      *local_1808 = (byte)lVar13;
LAB_00381a30:
      if (bVar21 != 0) {
LAB_00381e20:
        lVar13 = cvFindType(pbVar27);
        *(long *)(param_3 + 2) = lVar13;
        if (lVar13 == 0) {
          *param_3 = *param_3 & 0xffffffef;
        }
        bVar22 = 0;
        *local_1808 = (byte)uVar26;
        param_2 = (byte *)FUN_0037220c(param_1,local_1808,param_5);
        uVar5 = (uint)(char)*param_2;
        goto LAB_0038068c;
      }
LAB_00381a34:
      bVar22 = 0;
      *local_1808 = (byte)uVar26;
      param_2 = (byte *)FUN_0037220c(param_1,local_1808,param_5);
      uVar5 = (uint)(char)*param_2;
LAB_003809b0:
      if (bVar21 == 1) goto LAB_00380894;
      if (bVar21 != 2) goto LAB_0038068c;
      goto LAB_003809c0;
    }
    pbVar20[1] = 0;
    bVar22 = bVar21;
    if (iVar24 != 3) {
      if (iVar24 != 5) goto LAB_00381a30;
      if (bVar21 != 0) goto LAB_00381e20;
      iVar24 = memcmp(pbVar27,"float",5);
      if (iVar24 == 0) {
        bVar21 = 2;
        goto LAB_0038097c;
      }
      goto LAB_00381a34;
    }
    if (bVar21 != 0) goto LAB_00381e20;
    iVar24 = memcmp(pbVar27,&DAT_00471900,3);
    if (iVar24 == 0) {
      bVar22 = 1;
      bVar21 = 3;
    }
    else {
      iVar24 = memcmp(pbVar27,&DAT_0046f0a0,3);
      if (iVar24 == 0) {
        bVar21 = 1;
      }
      else {
        iVar24 = memcmp(pbVar27,&DAT_00471908,3);
        if (iVar24 == 0) {
          bVar21 = 5;
        }
        else {
          iVar24 = memcmp(pbVar27,&DAT_00471910,3);
          if (iVar24 != 0) goto LAB_00381a34;
          bVar21 = 6;
        }
      }
    }
LAB_0038097c:
    *local_1808 = bVar1;
    param_2 = (byte *)FUN_0037220c(param_1,local_1808,param_5);
    uVar5 = (uint)(char)*param_2;
    bVar1 = bVar22 & *param_2 != 0x27;
    if (bVar1 == 0) goto LAB_003809b0;
    if (uVar5 == 0x22) {
      bVar4 = false;
      if (bVar21 != 2) goto LAB_00380b04;
      goto LAB_003809c0;
    }
    pbVar27 = param_2;
    bVar22 = bVar1;
    if ((param_4 & 1) == 0) goto LAB_00381a80;
  }
  else {
LAB_0038068c:
    bVar21 = (char)uVar5 - 0x2bU & 0xfd;
    if (((uVar5 - 0x30 & 0xff) < 10) ||
       ((bVar21 == 0 && (((uVar26 - 0x30 & 0xff) < 10 || (uVar26 == 0x2e)))))) {
LAB_00380840:
      local_1808 = param_2 + (bVar21 == 0);
      bVar21 = param_2[bVar21 == 0];
      while ((byte)(bVar21 - 0x30) < 10) {
        local_1808 = local_1808 + 1;
        bVar21 = *local_1808;
      }
      if ((bVar21 != 0x65) && (bVar21 != 0x2e)) {
LAB_00380894:
        lVar13 = strtol((char *)param_2,(char **)&local_1808,0);
        param_3[4] = (uint)lVar13;
        *param_3 = 1;
        goto LAB_003808b8;
      }
LAB_003809c0:
      dVar28 = strtod((char *)param_2,(char **)&local_1808);
      pbVar27 = local_1808;
      dVar29 = dVar28;
      local_1808 = pbVar27;
      if (*local_1808 == 0x2e) {
        *local_1808 = 0x2c;
        dVar29 = strtod((char *)param_2,(char **)&local_1808);
        *pbVar27 = 0x2e;
        if (local_1808 <= pbVar27) {
          dVar29 = dVar28;
          local_1808 = pbVar27;
        }
      }
      if ((param_2 == local_1808) || ((byte)((*local_1808 & 0xdf) + 0xbf) < 0x1a)) {
        bVar21 = *param_2;
        if ((bVar21 - 0x2b & 0xfd) == 0) {
          bVar4 = bVar21 != 0x2d;
          bVar21 = param_2[1];
          uVar5 = 0xfff00000;
          if (bVar4) {
            uVar5 = 0x7ff00000;
          }
          uVar19 = (ulong)uVar5;
          pbVar27 = param_2 + 1;
        }
        else {
          uVar19 = 0x7ff00000;
          pbVar27 = param_2;
        }
        if (bVar21 != 0x2e) {
          sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Bad format of floating-point constant");
          cvError(0xffffff2c,"void icvProcessSpecialDouble(CvFileStorage*, char*, double*, char**)",
                  &local_1400,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                  0x38b);
        }
        iVar24 = toupper((int)(char)pbVar27[1]);
        if (iVar24 == 0x49) {
          iVar24 = toupper((int)(char)pbVar27[2]);
          if ((iVar24 != 0x4e) || (iVar24 = toupper((int)(char)pbVar27[3]), iVar24 != 0x46))
          goto LAB_00380a94;
          dVar29 = (double)(uVar19 << 0x20);
        }
        else if (((iVar24 != 0x4e) || (iVar24 = toupper((int)(char)pbVar27[2]), iVar24 != 0x41)) ||
                (iVar24 = toupper((int)(char)pbVar27[3]), dVar29 = DAT_00382308, iVar24 != 0x4e)) {
LAB_00380a94:
          sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Bad format of floating-point constant");
          cvError(0xffffff2c,"void icvProcessSpecialDouble(CvFileStorage*, char*, double*, char**)",
                  &local_1400,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                  0x394);
          dVar29 = 0.0;
        }
        local_1808 = pbVar27 + 4;
      }
      *param_3 = 2;
      *(double *)(param_3 + 4) = dVar29;
LAB_003808b8:
      if ((local_1808 == (byte *)0x0) || (param_2 == local_1808)) {
        sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),
                "Invalid numeric value (inconsistent explicit type specification?)");
        cvError(0xffffff2c,"char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                &local_1400,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                0x468);
      }
      return local_1808;
    }
    if (uVar5 == 0x2e) {
      if ((((uVar26 & 0xff) - 0x30 & 0xff) < 10) || (((uVar26 & 0xdf) - 0x41 & 0xff) < 0x1a))
      goto LAB_00380840;
    }
    else {
      bVar4 = uVar5 == 0x27;
      if ((uVar5 == 0x22) || (bVar4)) {
LAB_00380b04:
        *param_3 = 3;
        iVar24 = 0;
        if (bVar4) {
          do {
            bVar21 = param_2[1];
            pbVar27 = param_2 + 1;
            if ((((byte)(bVar21 - 0x30) < 10) || ((byte)((bVar21 & 0xdf) + 0xbf) < 0x1a)) ||
               ((0x1f < bVar21 && (bVar21 != 0x27)))) {
              *(byte *)((long)&local_1400 + (long)iVar24) = bVar21;
              iVar24 = iVar24 + 1;
            }
            else if (bVar21 == 0x27) {
              pbVar27 = param_2 + 2;
              if (param_2[2] != 0x27) goto LAB_00380c8c;
              *(undefined1 *)((long)&local_1400 + (long)iVar24) = 0x27;
              iVar24 = iVar24 + 1;
            }
            else {
              sprintf(acStack_1800,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Invalid character");
              cvError(0xffffff2c,
                      "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                      acStack_1800,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x47d);
            }
            param_2 = pbVar27;
          } while (iVar24 < 0x1000);
        }
        else {
          do {
            while( true ) {
              bVar21 = param_2[1];
              pbVar27 = param_2 + 1;
              if ((((byte)(bVar21 - 0x30) < 10) || ((byte)((bVar21 & 0xdf) + 0xbf) < 0x1a)) ||
                 ((bVar21 != 0x22 && bVar21 != 0x5c && (0x1f < bVar21)))) {
                *(byte *)((long)&local_1400 + (long)iVar24) = bVar21;
                iVar24 = iVar24 + 1;
                goto LAB_00380b40;
              }
              if (bVar21 == 0x22) {
                pbVar27 = param_2 + 2;
                goto LAB_00380c8c;
              }
              if (bVar21 != 0x5c) break;
              bVar21 = param_2[2];
              pbVar27 = param_2 + 2;
              if (((bVar21 == 0x27) || (bVar21 == 0x5c)) || (bVar21 == 0x22)) {
                *(byte *)((long)&local_1400 + (long)iVar24) = bVar21;
                iVar24 = iVar24 + 1;
              }
              else if (bVar21 == 0x6e) {
                *(undefined1 *)((long)&local_1400 + (long)iVar24) = 10;
                iVar24 = iVar24 + 1;
              }
              else if (bVar21 == 0x72) {
                *(undefined1 *)((long)&local_1400 + (long)iVar24) = 0xd;
                iVar24 = iVar24 + 1;
              }
              else if (bVar21 == 0x74) {
                *(undefined1 *)((long)&local_1400 + (long)iVar24) = 9;
                iVar24 = iVar24 + 1;
              }
              else {
                if ((char)bVar21 == 0x78) {
                  bVar21 = param_2[5];
                  pbVar20 = param_2 + 3;
                  param_2[5] = 0;
                  iVar23 = 8;
                }
                else {
                  if (7 < ((int)(char)bVar21 - 0x30U & 0xff)) goto LAB_00380b40;
                  bVar21 = param_2[5];
                  param_2[5] = 0;
                  iVar23 = 0x10;
                  pbVar20 = pbVar27;
                }
                lVar13 = strtol((char *)pbVar20,(char **)&local_1808,iVar23);
                param_2[5] = bVar21;
                if (pbVar20 == local_1808) {
                  *(undefined1 *)((long)&local_1400 + (long)iVar24) = 0x78;
                  iVar24 = iVar24 + 1;
                }
                else {
                  *(char *)((long)&local_1400 + (long)iVar24) = (char)lVar13;
                  iVar24 = iVar24 + 1;
                  pbVar27 = local_1808;
                }
              }
LAB_00380b40:
              param_2 = pbVar27;
              if (0xfff < iVar24) goto LAB_00380c48;
            }
            sprintf(acStack_1800,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Invalid character");
            cvError(0xffffff2c,
                    "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                    acStack_1800,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x4a8);
            param_2 = pbVar27;
          } while (iVar24 < 0x1000);
        }
LAB_00380c48:
        sprintf(acStack_1800,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),"Too long string literal");
        cvError(0xffffff2c,"char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                acStack_1800,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                0x4ac);
LAB_00380c8c:
        auVar30 = cvMemStorageAllocString(*(undefined8 *)(param_1 + 0x10),&local_1400,iVar24);
        *(undefined1 (*) [16])(param_3 + 4) = auVar30;
        return pbVar27;
      }
      if ((uVar5 & 0xffffffdf) == 0x5b) {
        param_5 = ((uint)param_4 & 1 ^ 1) + param_5;
        if (uVar5 == 0x7b) {
          uVar5 = 6;
          if (*(long *)(param_3 + 2) != 0) {
            uVar5 = 0x16;
          }
          if (*param_3 != 0) {
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),
                    "Sequence element should not have name (use <_></_>)");
            cvError(0xffffff2c,"void icvFSCreateCollection(CvFileStorage*, int, CvFileNode*)",
                    &local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x199);
          }
          uVar6 = *(undefined8 *)(param_1 + 0x10);
          uVar11 = 0xe;
          uVar26 = 0x7d;
          iVar24 = 6;
          lVar13 = cvCreateSet(0,0x78,0x30,uVar6);
          *(undefined4 *)(lVar13 + 0x6c) = 0x10;
          puVar9 = (undefined8 *)cvMemStorageAlloc(uVar6,0x80);
          *(undefined8 **)(lVar13 + 0x70) = puVar9;
          *puVar9 = 0;
          puVar9[1] = 0;
          puVar9[2] = 0;
          puVar9[3] = 0;
          puVar9[4] = 0;
          puVar9[5] = 0;
          puVar9[6] = 0;
          puVar9[7] = 0;
          puVar9[8] = 0;
          puVar9[9] = 0;
          puVar9[10] = 0;
          puVar9[0xb] = 0;
          puVar9[0xc] = 0;
          puVar9[0xd] = 0;
          puVar9[0xe] = 0;
          puVar9[0xf] = 0;
          *(long *)(param_3 + 4) = lVar13;
          *param_3 = uVar5;
          cvSetSeqBlockSize(lVar13,8);
        }
        else {
          uVar26 = 5;
          if (*(long *)(param_3 + 2) != 0) {
            uVar26 = 0x15;
          }
          uVar6 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
          if ((*param_3 & 7) != 0) {
            cvSeqPush(uVar6,param_3);
          }
          *(undefined8 *)(param_3 + 4) = uVar6;
          uVar11 = 0xd;
          *param_3 = uVar26;
          iVar24 = 5;
          cvSetSeqBlockSize(uVar6,8);
          uVar26 = 0x5d;
          if (uVar5 != 0x5b) {
            uVar26 = 0x7d;
          }
        }
        param_2 = param_2 + 1;
        uVar5 = 1;
        do {
          while( true ) {
            uVar17 = (uint)(char)*param_2;
            while( true ) {
              while (uVar17 == 0x20) {
                param_2 = param_2 + 1;
                uVar17 = (uint)(char)*param_2;
              }
              if (uVar17 == 0x23) {
                if (0x7fffffff < (long)param_2 - *(long *)(param_1 + 0x80)) {
                  if (*(int *)(*(long *)(param_3 + 4) + 0x28) != 0) goto LAB_003811fc;
                  goto joined_r0x0038173c;
                }
                uVar17 = 0;
                *param_2 = 0;
              }
              else if (0x1f < (uVar17 & 0xff)) {
                if ((long)param_2 - *(long *)(param_1 + 0x80) < (long)param_5) {
                  sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                          (ulong)*(uint *)(param_1 + 0x94),"Incorrect indentation");
                  cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0x3c5);
                  uVar17 = (uint)(char)*param_2;
                }
                goto LAB_003811dc;
              }
              if (((uVar17 == 0) || (uVar17 == 10)) || (uVar17 == 0xd)) break;
              if (uVar17 == 9) {
                pcVar10 = "Tabs are prohibited in YAML!";
              }
              else {
                pcVar10 = "Invalid character";
              }
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),pcVar10);
              cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3df);
              uVar17 = (uint)(char)*param_2;
            }
            lVar13 = *(long *)(param_1 + 0x160);
            param_2 = *(byte **)(param_1 + 0x80);
            uVar19 = *(long *)(param_1 + 0x88) - (long)param_2;
            iVar23 = (int)uVar19;
            if (lVar13 != 0) break;
            if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
              lVar13 = *(long *)(param_1 + 0x70);
              if (lVar13 == 0) {
                local_1400 = lVar13;
                local_13f8 = lVar13;
                pcVar10 = (char *)cv::String::allocate((String *)&local_1400,0x19);
                cVar3 = s_The_storage_is_not_opened_00470830[0x18];
                uVar2 = s_The_storage_is_not_opened_00470830._8_8_;
                uVar6 = s_The_storage_is_not_opened_00470830._0_8_;
                *(undefined8 *)(pcVar10 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
                pcVar10[0x18] = cVar3;
                *(undefined8 *)pcVar10 = uVar6;
                *(undefined8 *)(pcVar10 + 8) = uVar2;
                cv::error(-2,(String *)&local_1400,"char* icvGets(CvFileStorage*, char*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0x11d);
                cv::String::deallocate((String *)&local_1400);
                goto LAB_003816c8;
              }
              param_2 = (byte *)gzgets(lVar13,param_2,uVar19 & 0xffffffff);
            }
            else {
              param_2 = (byte *)fgets((char *)param_2,iVar23,*(FILE **)(param_1 + 0x68));
            }
            if (param_2 == (byte *)0x0) goto LAB_003816c8;
LAB_00381024:
            sVar7 = strlen((char *)param_2);
            if ((param_2[(long)(int)sVar7 + -1] != 0xd) && (param_2[(long)(int)sVar7 + -1] != 10)) {
              if (*(long *)(param_1 + 0x160) == 0) {
                if (*(FILE **)(param_1 + 0x68) != (FILE *)0x0) {
                  uVar17 = feof(*(FILE **)(param_1 + 0x68));
                  goto LAB_00381340;
                }
                if (*(long *)(param_1 + 0x70) != 0) {
                  uVar17 = gzeof();
                  goto LAB_00381340;
                }
              }
              else {
                uVar17 = (uint)(*(ulong *)(param_1 + 0x168) <= *(ulong *)(param_1 + 0x170));
LAB_00381340:
                if (uVar17 != 0) goto LAB_00381044;
              }
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),
                      "Too long string or a last string w/o newline");
              cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3d9);
            }
LAB_00381044:
            *(int *)(param_1 + 0x94) = *(int *)(param_1 + 0x94) + 1;
          }
          uVar15 = *(ulong *)(param_1 + 0x170);
          uVar16 = *(ulong *)(param_1 + 0x168);
          uVar19 = uVar15;
          if ((uVar15 < uVar16) && (iVar23 = iVar23 + -1, 0 < iVar23)) {
            bVar21 = *(byte *)(lVar13 + uVar15);
            uVar19 = uVar15 + 1;
            if (bVar21 == 0) goto LAB_003816c0;
            *param_2 = bVar21;
            if (bVar21 == 10) {
              param_2[1] = 0;
              *(ulong *)(param_1 + 0x170) = uVar19;
            }
            else {
              iVar12 = 1;
              do {
                uVar18 = uVar19;
                if ((uVar19 == uVar16) || (iVar23 <= iVar12)) break;
                bVar21 = *(byte *)(lVar13 + uVar19);
                uVar18 = uVar19 + 1;
                if (bVar21 == 0) break;
                param_2[uVar19 - uVar15] = bVar21;
                iVar12 = iVar12 + 1;
                uVar19 = uVar18;
              } while (bVar21 != 10);
              param_2[iVar12] = 0;
              *(ulong *)(param_1 + 0x170) = uVar18;
            }
            goto LAB_00381024;
          }
LAB_003816c0:
          *param_2 = 0;
          *(ulong *)(param_1 + 0x170) = uVar19;
LAB_003816c8:
          param_2 = *(byte **)(param_1 + 0x80);
          param_2[3] = 0;
          *param_2 = 0x2e;
          param_2[2] = 0x2e;
          param_2[1] = 0x2e;
          *(undefined4 *)(param_1 + 0x98) = 1;
          uVar17 = (uint)(char)*param_2;
LAB_003811dc:
          if ((uVar17 & 0xffffffdf) == 0x5d) {
            if (uVar26 != uVar17) {
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"The wrong closing bracket");
              cvError(0xffffff2c,
                      "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                      &local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x4c3);
            }
            param_2 = param_2 + 1;
LAB_00381b24:
            **(uint **)(param_3 + 4) = **(uint **)(param_3 + 4) | uVar5 << 8;
            return param_2;
          }
          if (*(int *)(*(long *)(param_3 + 4) + 0x28) != 0) {
            if (uVar17 != 0x2c) {
LAB_003811fc:
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Missing , between the elements");
              cvError(0xffffff2c,
                      "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                      &local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x4cb);
            }
            param_2 = (byte *)FUN_0037220c(param_1,param_2 + 1,param_5);
            uVar17 = (uint)(char)*param_2;
          }
joined_r0x0038173c:
          if (iVar24 == 6) {
            pbVar27 = param_2 + -1;
            if (uVar17 == 0x2d) {
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Key may not start with \'-\'");
              cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3ef);
            }
            do {
              pbVar20 = pbVar27;
              pbVar27 = pbVar20 + 1;
              bVar21 = *pbVar27;
              if (bVar21 < 0x20) break;
            } while (bVar21 != 0x3a);
            if (bVar21 != 0x3a) {
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Missing \':\'");
              cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3f5);
            }
            do {
              pbVar25 = pbVar27;
              pbVar27 = pbVar25 + -1;
            } while (pbVar25[-1] == 0x20);
            if (param_2 == pbVar25) {
              sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"An empty key");
              cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3fd);
            }
            uVar6 = cvGetHashedKey(param_1,param_2,(int)pbVar25 - (int)param_2,1);
            puVar8 = (uint *)cvGetFileNode(param_1,param_3,uVar6,1);
            uVar6 = FUN_0037220c(param_1,pbVar20 + 2,param_5);
            param_2 = (byte *)FUN_00380620(param_1,uVar6,puVar8,uVar11,param_5);
            uVar17 = *puVar8 | 0x40;
            *puVar8 = uVar17;
          }
          else {
            if (uVar17 == 0x5d) goto LAB_00381b24;
            puVar8 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
            param_2 = (byte *)FUN_00380620(param_1,param_2,puVar8,uVar11,param_5);
            uVar17 = *puVar8;
          }
          uVar5 = uVar5 & (uVar17 & 7) < 5;
        } while( true );
      }
    }
    pbVar27 = param_2;
    if (uVar5 == 0x2d) {
      if ((param_4 & 1) == 0) {
        iVar24 = 0x15;
        iVar23 = 5;
        goto LAB_00380cdc;
      }
    }
    else if ((param_4 & 1) == 0) {
      if (uVar5 == 0x3f) {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                     "Complex keys are not supported",0x4eb);
      }
      else if ((uVar5 == 0x3e) || (uVar5 == 0x7c)) {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                     "Multi-line text literals are not supported",0x4ed);
      }
LAB_00381a80:
      do {
        local_1808 = pbVar27;
        if (*local_1808 < 0x20) goto LAB_00381e5c;
        pbVar27 = local_1808 + 1;
      } while (bVar22 != 0 || *local_1808 != 0x3a);
      bVar4 = false;
      if (param_2 != local_1808) {
        iVar24 = 0x16;
        iVar23 = 6;
        goto LAB_00380cdc;
      }
      goto LAB_00381f6c;
    }
  }
  do {
    local_1808 = pbVar27;
    bVar21 = *local_1808;
    if (bVar21 < 0x20) goto LAB_00381e5c;
  } while (((bVar21 != 0x7d) && (bVar21 != 0x2c)) && (pbVar27 = local_1808 + 1, bVar21 != 0x5d));
  if (param_2 != local_1808) goto LAB_00381e6c;
  bVar4 = bVar21 != 0x3a;
  goto LAB_00381f6c;
LAB_00381e5c:
  if (param_2 != local_1808) goto LAB_00381e6c;
  bVar4 = true;
LAB_00381f6c:
  FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
               "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
               "Invalid character",0x4f9);
  if ((param_4 & 1) == 0) {
    iVar24 = 0x16;
    iVar23 = 6;
    if (!bVar4) {
LAB_00380cdc:
      uVar5 = 1;
      if (*(long *)(param_3 + 2) == 0) {
        iVar24 = iVar23;
      }
      FUN_003718c8(param_1,iVar24,param_3);
      iVar24 = (int)param_2 - (int)*(undefined8 *)(param_1 + 0x80);
      do {
        if (iVar23 == 6) {
          pbVar27 = param_2 + -1;
          if (*param_2 == 0x2d) {
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Key may not start with \'-\'");
            cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3ef);
          }
          do {
            pbVar20 = pbVar27;
            pbVar27 = pbVar20 + 1;
            bVar21 = *pbVar27;
            if (bVar21 < 0x20) break;
          } while (bVar21 != 0x3a);
          if (bVar21 != 0x3a) {
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Missing \':\'");
            cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3f5);
          }
          pbVar20 = pbVar20 + 2;
          do {
            pbVar25 = pbVar27;
            pbVar27 = pbVar25 + -1;
          } while (pbVar25[-1] == 0x20);
          if (param_2 == pbVar25) {
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"An empty key");
            cvError(0xffffff2c,&DAT_00472e70,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3fd);
          }
          uVar6 = cvGetHashedKey(param_1,param_2,(int)pbVar25 - (int)param_2,1);
          puVar8 = (uint *)cvGetFileNode(param_1,param_3,uVar6,1);
        }
        else {
          pbVar20 = param_2 + 1;
          if (*param_2 != 0x2d) {
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),&DAT_00471a58);
            cvError(0xffffff2c,
                    "char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                    &local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x51e);
          }
          puVar8 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
        }
        uVar26 = (uint)(char)*pbVar20;
        while( true ) {
          while( true ) {
            while (uVar26 == 0x20) {
              pbVar20 = pbVar20 + 1;
              uVar26 = (uint)(char)*pbVar20;
            }
            if (uVar26 == 0x23) {
              if (0x7fffffff < (long)pbVar20 - *(long *)(param_1 + 0x80)) goto LAB_003810d0;
              uVar26 = 0;
              *pbVar20 = 0;
            }
            else if (0x1f < (uVar26 & 0xff)) {
              if ((long)pbVar20 - *(long *)(param_1 + 0x80) < (long)(iVar24 + 1)) {
                sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                        (ulong)*(uint *)(param_1 + 0x94),"Incorrect indentation");
                cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3c5)
                ;
              }
              goto LAB_003810d0;
            }
            if (((uVar26 == 0) || (uVar26 == 10)) || (uVar26 == 0xd)) break;
            if (uVar26 == 9) {
              pcVar10 = "Tabs are prohibited in YAML!";
            }
            else {
              pcVar10 = "Invalid character";
            }
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),pcVar10);
            cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3df);
            uVar26 = (uint)(char)*pbVar20;
          }
          lVar13 = *(long *)(param_1 + 0x160);
          pbVar20 = *(byte **)(param_1 + 0x80);
          iVar12 = (int)*(undefined8 *)(param_1 + 0x88) - (int)pbVar20;
          if (lVar13 != 0) break;
          if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
            lVar13 = *(long *)(param_1 + 0x70);
            if (lVar13 == 0) {
              local_1400 = lVar13;
              local_13f8 = lVar13;
              pcVar10 = (char *)cv::String::allocate((String *)&local_1400,0x19);
              cVar3 = s_The_storage_is_not_opened_00470830[0x18];
              uVar2 = s_The_storage_is_not_opened_00470830._8_8_;
              uVar6 = s_The_storage_is_not_opened_00470830._0_8_;
              *(undefined8 *)(pcVar10 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
              pcVar10[0x18] = cVar3;
              *(undefined8 *)pcVar10 = uVar6;
              *(undefined8 *)(pcVar10 + 8) = uVar2;
              cv::error(-2,(String *)&local_1400,"char* icvGets(CvFileStorage*, char*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d)
              ;
              cv::String::deallocate((String *)&local_1400);
              goto LAB_003816fc;
            }
            pbVar20 = (byte *)gzgets(lVar13,pbVar20);
          }
          else {
            pbVar20 = (byte *)fgets((char *)pbVar20,iVar12,*(FILE **)(param_1 + 0x68));
          }
          if (pbVar20 == (byte *)0x0) goto LAB_003816fc;
LAB_00380f64:
          sVar7 = strlen((char *)pbVar20);
          if ((pbVar20[(long)(int)sVar7 + -1] != 0xd) && (pbVar20[(long)(int)sVar7 + -1] != 10)) {
            if (*(long *)(param_1 + 0x160) == 0) {
              if (*(FILE **)(param_1 + 0x68) != (FILE *)0x0) {
                uVar26 = feof(*(FILE **)(param_1 + 0x68));
                goto LAB_003812e4;
              }
              if (*(long *)(param_1 + 0x70) != 0) {
                uVar26 = gzeof();
                goto LAB_003812e4;
              }
            }
            else {
              uVar26 = (uint)(*(ulong *)(param_1 + 0x168) <= *(ulong *)(param_1 + 0x170));
LAB_003812e4:
              if (uVar26 != 0) goto LAB_00380f84;
            }
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Too long string or a last string w/o newline")
            ;
            cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3d9);
          }
LAB_00380f84:
          *(int *)(param_1 + 0x94) = *(int *)(param_1 + 0x94) + 1;
          uVar26 = (uint)(char)*pbVar20;
        }
        uVar15 = *(ulong *)(param_1 + 0x170);
        uVar16 = *(ulong *)(param_1 + 0x168);
        uVar19 = uVar15;
        if ((uVar15 < uVar16) && (iVar12 = iVar12 + -1, 0 < iVar12)) {
          bVar21 = *(byte *)(lVar13 + uVar15);
          uVar19 = uVar15 + 1;
          if (bVar21 != 0) {
            *pbVar20 = bVar21;
            if (bVar21 == 10) {
              pbVar20[1] = 0;
              *(ulong *)(param_1 + 0x170) = uVar19;
            }
            else {
              iVar14 = 1;
              do {
                uVar18 = uVar19;
                if ((uVar19 == uVar16) || (iVar12 <= iVar14)) break;
                bVar21 = *(byte *)(lVar13 + uVar19);
                uVar18 = uVar19 + 1;
                if (bVar21 == 0) break;
                pbVar20[uVar19 - uVar15] = bVar21;
                iVar14 = iVar14 + 1;
                uVar19 = uVar18;
              } while (bVar21 != 10);
              pbVar20[iVar14] = 0;
              *(ulong *)(param_1 + 0x170) = uVar18;
            }
            goto LAB_00380f64;
          }
        }
        *pbVar20 = 0;
        *(ulong *)(param_1 + 0x170) = uVar19;
LAB_003816fc:
        pbVar20 = *(byte **)(param_1 + 0x80);
        pbVar20[3] = 0;
        pbVar20[2] = 0x2e;
        pbVar20[1] = 0x2e;
        *pbVar20 = 0x2e;
        *(undefined4 *)(param_1 + 0x98) = 1;
LAB_003810d0:
        param_2 = (byte *)FUN_00380620(param_1,pbVar20,puVar8,iVar23,iVar24 + 1);
        uVar26 = *puVar8;
        if (iVar23 == 6) {
          uVar26 = uVar26 | 0x40;
          *puVar8 = uVar26;
        }
        uVar17 = (uint)(char)*param_2;
        uVar5 = uVar5 & (uVar26 & 7) < 5;
        while( true ) {
          while( true ) {
            while (uVar17 == 0x20) {
              param_2 = param_2 + 1;
              uVar17 = (uint)(char)*param_2;
            }
            if (uVar17 == 0x23) {
              lVar13 = (long)param_2 - *(long *)(param_1 + 0x80);
              if (0x7fffffff < lVar13) goto LAB_00381498;
              uVar17 = 0;
              *param_2 = 0;
            }
            else if (0x1f < (uVar17 & 0xff)) {
              lVar13 = (long)param_2 - *(long *)(param_1 + 0x80);
              if (lVar13 < 0) {
                sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                        (ulong)*(uint *)(param_1 + 0x94),"Incorrect indentation");
                cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3c5)
                ;
                lVar13 = (long)param_2 - *(long *)(param_1 + 0x80);
              }
              goto LAB_00381488;
            }
            if (((uVar17 == 0) || (uVar17 == 10)) || (uVar17 == 0xd)) break;
            if (uVar17 == 9) {
              pcVar10 = "Tabs are prohibited in YAML!";
            }
            else {
              pcVar10 = "Invalid character";
            }
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),pcVar10);
            cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3df);
            uVar17 = (uint)(char)*param_2;
          }
          lVar13 = *(long *)(param_1 + 0x160);
          param_2 = *(byte **)(param_1 + 0x80);
          iVar12 = (int)*(undefined8 *)(param_1 + 0x88) - (int)param_2;
          if (lVar13 != 0) break;
          if (*(FILE **)(param_1 + 0x68) == (FILE *)0x0) {
            lVar13 = *(long *)(param_1 + 0x70);
            if (lVar13 == 0) {
              local_1400 = lVar13;
              local_13f8 = lVar13;
              pcVar10 = (char *)cv::String::allocate((String *)&local_1400,0x19);
              cVar3 = s_The_storage_is_not_opened_00470830[0x18];
              uVar2 = s_The_storage_is_not_opened_00470830._8_8_;
              uVar6 = s_The_storage_is_not_opened_00470830._0_8_;
              *(undefined8 *)(pcVar10 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
              pcVar10[0x18] = cVar3;
              *(undefined8 *)pcVar10 = uVar6;
              *(undefined8 *)(pcVar10 + 8) = uVar2;
              cv::error(-2,(String *)&local_1400,"char* icvGets(CvFileStorage*, char*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d)
              ;
              cv::String::deallocate((String *)&local_1400);
              goto LAB_00381690;
            }
            param_2 = (byte *)gzgets(lVar13,param_2);
          }
          else {
            param_2 = (byte *)fgets((char *)param_2,iVar12,*(FILE **)(param_1 + 0x68));
          }
          if (param_2 == (byte *)0x0) goto LAB_00381690;
LAB_00381420:
          sVar7 = strlen((char *)param_2);
          if ((param_2[(long)(int)sVar7 + -1] != 0xd) && (param_2[(long)(int)sVar7 + -1] != 10)) {
            if (*(long *)(param_1 + 0x160) == 0) {
              if (*(FILE **)(param_1 + 0x68) != (FILE *)0x0) {
                uVar26 = feof(*(FILE **)(param_1 + 0x68));
                goto LAB_00381530;
              }
              if (*(long *)(param_1 + 0x70) != 0) {
                uVar26 = gzeof();
                goto LAB_00381530;
              }
            }
            else {
              uVar26 = (uint)(*(ulong *)(param_1 + 0x168) <= *(ulong *)(param_1 + 0x170));
LAB_00381530:
              if (uVar26 != 0) goto LAB_00381440;
            }
            sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Too long string or a last string w/o newline")
            ;
            cvError(0xffffff2c,&DAT_00472ad0,&local_1400,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3d9);
          }
LAB_00381440:
          *(int *)(param_1 + 0x94) = *(int *)(param_1 + 0x94) + 1;
          uVar17 = (uint)(char)*param_2;
        }
        uVar15 = *(ulong *)(param_1 + 0x170);
        uVar16 = *(ulong *)(param_1 + 0x168);
        uVar19 = uVar15;
        if ((uVar15 < uVar16) && (iVar12 = iVar12 + -1, 0 < iVar12)) {
          bVar21 = *(byte *)(lVar13 + uVar15);
          uVar19 = uVar15 + 1;
          if (bVar21 != 0) {
            *param_2 = bVar21;
            if (bVar21 == 10) {
              param_2[1] = 0;
              *(ulong *)(param_1 + 0x170) = uVar19;
            }
            else {
              iVar14 = 1;
              do {
                uVar18 = uVar19;
                if ((uVar19 == uVar16) || (iVar12 <= iVar14)) break;
                bVar21 = *(byte *)(lVar13 + uVar19);
                uVar18 = uVar19 + 1;
                if (bVar21 == 0) break;
                param_2[uVar19 - uVar15] = bVar21;
                iVar14 = iVar14 + 1;
                uVar19 = uVar18;
              } while (bVar21 != 10);
              param_2[iVar14] = 0;
              *(ulong *)(param_1 + 0x170) = uVar18;
            }
            goto LAB_00381420;
          }
        }
        *param_2 = 0;
        *(ulong *)(param_1 + 0x170) = uVar19;
LAB_00381690:
        param_2 = *(byte **)(param_1 + 0x80);
        param_2[3] = 0;
        param_2[2] = 0x2e;
        param_2[1] = 0x2e;
        *param_2 = 0x2e;
        *(undefined4 *)(param_1 + 0x98) = 1;
        lVar13 = (long)param_2 - *(long *)(param_1 + 0x80);
LAB_00381488:
        if (iVar24 != lVar13) {
LAB_00381498:
          if (lVar13 < iVar24) break;
          sprintf((char *)&local_1400,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Incorrect indentation");
          cvError(0xffffff2c,"char* icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int)",
                  &local_1400,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                  0x52f);
        }
        iVar12 = memcmp(param_2,&DAT_00471a90,3);
      } while (iVar12 != 0);
      **(uint **)(param_3 + 4) = **(uint **)(param_3 + 4) | uVar5 << 8;
      return param_2;
    }
  }
LAB_00381e6c:
  *param_3 = 3;
  pbVar27 = local_1808;
  do {
    pbVar20 = pbVar27;
    pbVar27 = pbVar20 + -1;
  } while (pbVar20[-1] == 0x20 && param_2 < pbVar20 + -1);
  auVar30 = cvMemStorageAllocString
                      (*(undefined8 *)(param_1 + 0x10),param_2,(int)pbVar20 - (int)param_2);
  *(undefined1 (*) [16])(param_3 + 4) = auVar30;
  return local_1808;
}


==================================================================

### FUNC 00382310 (168 bytes) name=cvUnregisterType

void cvUnregisterType(void)

{
  undefined *puVar1;
  void *pvVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  
  pvVar2 = (void *)cvFindType();
  if (pvVar2 == (void *)0x0) {
    return;
  }
  lVar3 = *(long *)((long)pvVar2 + 8);
  if (lVar3 == 0) {
    lVar4 = *(long *)((long)pvVar2 + 0x10);
    *(long *)PTR_first_00501d40 = lVar4;
    lVar5 = lVar4;
  }
  else {
    *(undefined8 *)(lVar3 + 0x10) = *(undefined8 *)((long)pvVar2 + 0x10);
    lVar4 = *(long *)((long)pvVar2 + 0x10);
    lVar5 = *(long *)PTR_first_00501d40;
  }
  if (lVar4 == 0) {
    *(long *)PTR_last_00501bd8 = lVar3;
  }
  else {
    *(long *)(lVar4 + 8) = lVar3;
  }
  puVar1 = PTR_first_00501d40;
  if ((lVar5 != 0) && (*(long *)PTR_last_00501bd8 != 0)) {
    cv::cvFree_(pvVar2);
    return;
  }
  *(undefined8 *)PTR_last_00501bd8 = 0;
  *(undefined8 *)puVar1 = 0;
  cv::cvFree_(pvVar2);
  return;
}


==================================================================

### FUNC 003823b8 (12 bytes) name=~CvType

/* CvType::~CvType() */

void __thiscall CvType::~CvType(CvType *this)

{
  cvUnregisterType(*(undefined8 *)(*(long *)this + 0x18));
  return;
}


==================================================================

### FUNC 003823c4 (2844 bytes) name=FUN_003823c4

/* WARNING: Restarted to delay deadcode elimination for space: stack */

byte * FUN_003823c4(long param_1,byte *param_2,uint *param_3)

{
  bool bVar1;
  byte *pbVar2;
  bool bVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  uint *puVar7;
  char *pcVar8;
  long lVar9;
  undefined8 *puVar10;
  long lVar11;
  undefined8 uVar12;
  uint uVar13;
  int iVar14;
  undefined8 uVar15;
  byte bVar16;
  byte bVar17;
  int iVar18;
  byte *__src;
  undefined1 auVar19 [16];
  int local_1424;
  byte *local_1420;
  byte *local_1418;
  long local_1410 [128];
  byte local_1010 [4112];
  
  bVar1 = true;
  param_3[0] = 0;
  param_3[1] = 0;
  param_3[2] = 0;
  param_3[3] = 0;
  param_3[4] = 0;
  param_3[5] = 0;
  param_3[6] = 0;
  param_3[7] = 0;
  do {
    bVar17 = *param_2;
    if (((int)(char)bVar17 - 9U & 0xff) < 5 || ((int)(char)bVar17 & 0xffffffdfU) == 0) {
LAB_003825d0:
      param_2 = (byte *)FUN_00372578(param_1,param_2,0);
      bVar17 = *param_2;
      bVar16 = param_2[1];
joined_r0x003825f4:
      bVar3 = bVar17 == 0;
      if ((!bVar3) && (bVar17 != 0x3c)) {
        puVar7 = param_3;
        if (*param_3 != 0) {
          if ((*param_3 & 7) < 5) {
                    /* catch() { ... } // from try @ 00382e30 with catch @ 00382e48 */
            uVar12 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
                    /* try { // try from 00382e58 to 00482e5b has its CatchHandler @ 00382a08 */
                    /* catch() { ... } // from try @ 00382efc with catch @ 00382e5c
                       catch() { ... } // from try @ 00382f58 with catch @ 00382e5c
                       catch() { ... } // from try @ 0038352c with catch @ 00382e5c
                       catch() { ... } // from try @ 00383558 with catch @ 00382e5c */
            if ((*param_3 & 7) != 0) {
              cvSeqPush(uVar12,param_3);
            }
            *(undefined8 *)(param_3 + 4) = uVar12;
            *param_3 = 5;
            cvSetSeqBlockSize(uVar12,8);
          }
          puVar7 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
          puVar7[2] = 0;
          puVar7[3] = 0;
        }
        bVar3 = bVar17 == 0x22;
        if (!bVar3) {
          param_2 = param_2 + -1;
        }
        *puVar7 = 3;
        iVar4 = 0;
        break;
      }
LAB_003825f8:
      local_1420 = (byte *)0x0;
      local_1418 = (byte *)0x0;
      local_1410[0] = 0;
      local_1424 = 0;
      if ((bVar16 == 0x2f) || (bVar3)) goto LAB_00382a08;
    }
    else {
      if (bVar17 != 0x3c) {
        bVar16 = param_2[1];
        goto joined_r0x003825f4;
      }
      bVar16 = param_2[1];
      bVar3 = false;
      if (bVar16 != 0x21) goto LAB_003825f8;
      if (param_2[2] == 0x2d) goto LAB_003825d0;
    }
    local_1424 = 0;
    local_1410[0] = 0;
    local_1418 = (byte *)0x0;
    local_1420 = (byte *)0x0;
    uVar12 = FUN_00382ee0(param_1,param_2,&local_1420,local_1410,&local_1424);
    if (local_1424 == 5) {
      sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),"Directive tags are not allowed here");
      cvError(0xffffff2c,&DAT_00470520,local_1010,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x745);
                    /* try { // try from 00382e30 to 00482e33 has its CatchHandler @ 00382e48 */
    }
    if (local_1424 == 3) {
      sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),&DAT_00471af8);
      cvError(0xffffff2c,&DAT_00470520,local_1010,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x747);
    }
    if ((local_1410[0] == 0) ||
       (pcVar8 = (char *)cvAttrValue(local_1410[0],"type_id"), pcVar8 == (char *)0x0)) {
      uVar6 = 0;
      lVar11 = 0;
LAB_003826b8:
      if (*(int *)(local_1420 + 8) != 1) goto LAB_003826cc;
LAB_00382b64:
      bVar3 = true;
      if (**(char **)(local_1420 + 0x10) != '_') goto LAB_003826cc;
      if ((*param_3 & 7) < 5) {
        lVar9 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
        if ((*param_3 & 7) != 0) {
          cvSeqPush(lVar9,param_3);
        }
        *(long *)(param_3 + 4) = lVar9;
        uVar13 = 5;
        bVar3 = true;
        goto LAB_00382790;
      }
      if ((*param_3 & 7) != 5) {
        pcVar8 = "Map element should have a name";
        goto LAB_00382b10;
      }
LAB_003827a0:
      puVar7 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
      uVar12 = FUN_003833f0(param_1,uVar12,puVar7,uVar6);
      uVar13 = *puVar7;
    }
    else {
      iVar4 = strcmp(pcVar8,"str");
      if (iVar4 != 0) {
        iVar4 = strcmp(pcVar8,"map");
        if (iVar4 == 0) {
          uVar6 = 6;
          lVar11 = 0;
        }
        else {
          iVar4 = strcmp(pcVar8,"seq");
          if (iVar4 == 0) {
            uVar6 = 5;
            lVar11 = 0;
          }
          else {
            lVar11 = cvFindType(pcVar8);
            uVar6 = 0;
            if (lVar11 != 0) {
              uVar6 = 0x10;
            }
          }
        }
        goto LAB_003826b8;
      }
      uVar6 = 3;
      lVar11 = 0;
      if (*(int *)(local_1420 + 8) == 1) goto LAB_00382b64;
LAB_003826cc:
      uVar13 = *param_3 & 7;
      if (uVar13 < 5) {
        if (*param_3 != 0) {
          sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),
                  "Sequence element should not have name (use <_></_>)");
          cvError(0xffffff2c,"void icvFSCreateCollection(CvFileStorage*, int, CvFileNode*)",
                  local_1010,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                  0x199);
        }
        uVar15 = *(undefined8 *)(param_1 + 0x10);
        bVar3 = false;
        lVar9 = cvCreateSet(0,0x78,0x30,uVar15);
        *(undefined4 *)(lVar9 + 0x6c) = 0x10;
        puVar10 = (undefined8 *)cvMemStorageAlloc(uVar15,0x80);
        *(undefined8 **)(lVar9 + 0x70) = puVar10;
        uVar13 = 6;
        *puVar10 = 0;
        puVar10[1] = 0;
        puVar10[2] = 0;
        puVar10[3] = 0;
        puVar10[4] = 0;
        puVar10[5] = 0;
        puVar10[6] = 0;
        puVar10[7] = 0;
        puVar10[8] = 0;
        puVar10[9] = 0;
        puVar10[10] = 0;
        puVar10[0xb] = 0;
        puVar10[0xc] = 0;
        puVar10[0xd] = 0;
                    /* catch() { ... } // from try @ 003827e4 with catch @ 00382788
                       catch() { ... } // from try @ 00382984 with catch @ 00382788
                       catch() { ... } // from try @ 003829fc with catch @ 00382788 */
        puVar10[0xe] = 0;
        puVar10[0xf] = 0;
        *(long *)(param_3 + 4) = lVar9;
LAB_00382790:
        *param_3 = uVar13;
        cvSetSeqBlockSize(lVar9,8);
LAB_0038279c:
        if (bVar3) goto LAB_003827a0;
      }
      else if (uVar13 == 5) {
        bVar3 = false;
        pcVar8 = "Sequence element should not have name (use <_></_>)";
LAB_00382b10:
        sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),pcVar8);
                    /* try { // try from 00382b38 to 00482d0f has its CatchHandler @ 00382db4 */
        cvError(0xffffff2c,&DAT_00470520,local_1010,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x763);
        goto LAB_0038279c;
      }
      puVar7 = (uint *)cvGetFileNode(param_1,param_3,local_1420,1);
      uVar12 = FUN_003833f0(param_1,uVar12,puVar7,uVar6);
                    /* try { // try from 00382aec to 00482aef has its CatchHandler @ 00382a08 */
      uVar13 = *puVar7 | 0x40;
      *puVar7 = uVar13;
    }
                    /* try { // try from 003827e4 to 004827e7 has its CatchHandler @ 00382788 */
    *(long *)(puVar7 + 2) = lVar11;
    bVar1 = (bool)(bVar1 & (uVar13 & 7) < 5);
    param_2 = (byte *)FUN_00382ee0(param_1,uVar12,&local_1418,local_1410,&local_1424);
                    /* try { // try from 00382810 to 00482813 has its CatchHandler @ 00382a00 */
    if ((local_1424 != 2) || (local_1418 != local_1420)) {
      sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),"Mismatched closing tag");
                    /* try { // try from 00382854 to 00482893 has its CatchHandler @ 003829bc */
      cvError(0xffffff2c,&DAT_00470520,local_1010,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x771);
    }
  } while( true );
LAB_003824ec:
  bVar17 = param_2[1];
  __src = param_2 + 1;
  pbVar2 = __src;
  iVar18 = iVar4;
  if (((byte)(bVar17 - 0x30) < 10) || ((byte)((bVar17 & 0xdf) + 0xbf) < 0x1a)) goto LAB_0038255c;
  if (bVar17 == 0x22) {
    if (bVar3) {
      __src = param_2 + 2;
    }
    else {
      __src = param_2 + 2;
      sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),
              "Literal \" is not allowed within a string. Use &quot;");
      cvError(0xffffff2c,&DAT_00470520,local_1410,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7b3);
    }
LAB_003829f4:
                    /* try { // try from 003829fc to 004829ff has its CatchHandler @ 00382788 */
                    /* catch() { ... } // from try @ 00382810 with catch @ 00382a00
                       catch() { ... } // from try @ 00382910 with catch @ 00382a00
                       catch() { ... } // from try @ 003829b4 with catch @ 00382a00 */
    auVar19 = cvMemStorageAllocString(*(undefined8 *)(param_1 + 0x10),local_1010,iVar4);
    *(undefined1 (*) [16])(puVar7 + 4) = auVar19;
    param_2 = __src;
LAB_00382a08:
                    /* catch() { ... } // from try @ 00382aec with catch @ 00382a08
                       catch() { ... } // from try @ 00382dac with catch @ 00382a08
                       catch() { ... } // from try @ 00382e38 with catch @ 00382a08
                       catch() { ... } // from try @ 00382e58 with catch @ 00382a08 */
    if ((*param_3 & 7) != 3) {
      sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),&DAT_00471c10);
      cvError(0xffffff2c,&DAT_00470520,local_1010,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x805);
      if ((bVar1) && (4 < (*param_3 & 7))) {
        **(uint **)(param_3 + 4) = **(uint **)(param_3 + 4) | 0x100;
      }
    }
    return param_2;
  }
  if ((bVar17 < 0x20) || (bVar17 == 0x3c)) {
    if (bVar3) {
                    /* try { // try from 003829b4 to 004829b7 has its CatchHandler @ 00382a00 */
                    /* catch() { ... } // from try @ 00382854 with catch @ 003829bc */
      sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
              (ulong)*(uint *)(param_1 + 0x94),"Closing \" is expected");
      cvError(0xffffff2c,&DAT_00470520,local_1410,
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7ba);
    }
    goto LAB_003829f4;
  }
  if ((!bVar3) && (bVar17 == 0x20)) goto LAB_003829f4;
  if ((bVar17 == 0x3e) || (bVar17 == 0x27)) {
    sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
            (ulong)*(uint *)(param_1 + 0x94),"Literal \' or > are not allowed. Use &apos; or &gt;");
    cvError(0xffffff2c,&DAT_00470520,local_1410,
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7bf);
  }
  else if (bVar17 == 0x26) {
    if (param_2[2] == 0x23) {
      if (param_2[3] == 0x78) {
                    /* try { // try from 00382e38 to 00482e3b has its CatchHandler @ 00382a08 */
        param_2 = param_2 + 4;
        iVar4 = 0x10;
      }
      else {
        param_2 = param_2 + 3;
        iVar4 = 10;
      }
      lVar11 = strtol((char *)param_2,(char **)&local_1418,iVar4);
      if (((0xff < (uint)lVar11) || (local_1418 == (byte *)0x0)) || (*local_1418 != 0x3b)) {
        sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),"Invalid numeric value in the string");
        cvError(0xffffff2c,&DAT_00470520,local_1410,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",1999);
      }
      bVar17 = (byte)lVar11;
      pbVar2 = local_1418;
    }
    else {
      param_2 = param_2 + 2;
      local_1418 = param_2;
      do {
        do {
          local_1418 = local_1418 + 1;
          bVar16 = *local_1418;
        } while ((byte)(bVar16 + 0x9f) < 0x1a);
      } while (((byte)(bVar16 - 0x30) < 10) || ((byte)(bVar16 + 0xbf) < 0x1a));
                    /* try { // try from 00382910 to 00482913 has its CatchHandler @ 00382a00 */
      if (bVar16 != 0x3b) {
        sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),"Invalid character in the symbol entity name");
        cvError(0xffffff2c,&DAT_00470520,local_1410,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7d8);
      }
      pbVar2 = local_1418;
      iVar14 = (int)local_1418 - (int)param_2;
      if (iVar14 == 2) {
        iVar5 = memcmp(param_2,&DAT_00470c30,2);
        if (iVar5 == 0) {
          bVar17 = 0x3c;
        }
        else {
          iVar5 = memcmp(param_2,&DAT_00470c38,2);
          if (iVar5 != 0) goto LAB_00382984;
          bVar17 = 0x3e;
        }
      }
      else if (iVar14 == 3) {
        iVar5 = memcmp(param_2,&DAT_00470c40,3);
        if (iVar5 != 0) goto LAB_00382984;
      }
      else if (iVar14 == 4) {
        iVar5 = memcmp(param_2,&DAT_00470c48,4);
        if (iVar5 == 0) {
          bVar17 = 0x27;
        }
        else {
          iVar5 = memcmp(param_2,&DAT_00470c50,4);
          if (iVar5 != 0) goto LAB_00382984;
                    /* try { // try from 00382dac to 00482df7 has its CatchHandler @ 00382a08 */
          bVar17 = 0x22;
                    /* catch() { ... } // from try @ 00382b38 with catch @ 00382db4 */
        }
      }
      else {
LAB_00382984:
                    /* try { // try from 00382984 to 004829ab has its CatchHandler @ 00382788 */
        memcpy(local_1010 + iVar4,__src,(long)(iVar14 + 2));
        iVar18 = iVar4 + iVar14 + 2;
        bVar17 = bVar16;
      }
    }
  }
LAB_0038255c:
  param_2 = pbVar2;
  iVar4 = iVar18 + 1;
  local_1010[iVar18] = bVar17;
  if (0xfff < iVar4) {
    sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
            (ulong)*(uint *)(param_1 + 0x94),"Too long string literal");
    cvError(0xffffff2c,&DAT_00470520,local_1410,
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7ef);
  }
  goto LAB_003824ec;
}


==================================================================

### FUNC 00382ee0 (1296 bytes) name=FUN_00382ee0

char * FUN_00382ee0(long param_1,char *param_2,long *param_3,undefined8 *param_4,int *param_5)

{
  char cVar1;
  byte bVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  char *pcVar6;
  long *plVar7;
  long lVar8;
  uint uVar9;
  int iVar10;
  long *plVar11;
  int iVar12;
  long lVar13;
  char *pcVar14;
  long lVar15;
  long *plVar16;
  undefined1 auStack_20 [24];
  undefined8 local_8;
  
                    /* try { // try from 00382efc to 00482eff has its CatchHandler @ 00382e5c */
  cVar1 = *param_2;
  if (cVar1 == '\0') {
    FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                 "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                 ,"Preliminary end of the stream",0x81d);
    cVar1 = *param_2;
  }
  if (cVar1 != '<') {
    FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                 "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                 ,"Tag should start with \'<\'",0x820);
  }
  bVar2 = param_2[1];
  uVar9 = (uint)(char)bVar2;
                    /* try { // try from 00382f50 to 00482f53 has its CatchHandler @ 00383548 */
  pcVar6 = param_2 + 1;
  iVar12 = 1;
                    /* try { // try from 00382f58 to 00482fc3 has its CatchHandler @ 00382e5c */
  if (((9 < (byte)(bVar2 - 0x30)) && (0x19 < (byte)((bVar2 & 0xdf) + 0xbf))) && (bVar2 != 0x5f)) {
    if (uVar9 == 0x2f) {
      pcVar6 = param_2 + 2;
      uVar9 = (uint)param_2[2];
      iVar12 = 2;
    }
    else if (uVar9 == 0x3f) {
      pcVar6 = param_2 + 2;
      uVar9 = (uint)param_2[2];
      iVar12 = 4;
    }
    else if (uVar9 == 0x21) {
      uVar9 = (uint)param_2[2];
      pcVar6 = param_2 + 2;
      iVar12 = 5;
    }
    else {
      iVar12 = 0;
      FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                   "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                   ,"Unknown tag type",0x836);
      uVar9 = (uint)param_2[1];
    }
  }
  plVar11 = (long *)0x0;
  plVar16 = (long *)0x0;
  iVar10 = 0;
  lVar13 = 0;
  do {
    if ((0x19 < ((uVar9 & 0xffffffdf) - 0x41 & 0xff)) && (uVar9 != 0x5f)) {
      FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                   "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                   ,"Name should start with a letter or underscore",0x83d);
    }
    pcVar14 = pcVar6 + -1;
    do {
      do {
        pcVar14 = pcVar14 + 1;
        cVar1 = *pcVar14;
      } while ((byte)(cVar1 + 0x9fU) < 0x1a);
    } while ((((byte)(cVar1 - 0x30U) < 10) || ((byte)(cVar1 + 0xbfU) < 0x1a)) ||
            ((cVar1 == '_' || (cVar1 == '-'))));
    lVar4 = cvGetHashedKey(param_1,pcVar6,(int)pcVar14 - (int)pcVar6,1);
    if (lVar13 == 0) {
      if (plVar11 != (long *)0x0) {
        iVar3 = iVar10 << 1;
        iVar10 = iVar10 + 1;
        lVar15 = ((long)iVar3 + 1) * 8;
        goto LAB_00383088;
      }
    }
    else {
      if (iVar12 == 2) {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                     ,"Closing tag should not contain any attributes",0x84b);
      }
      if ((3 < iVar10) || (plVar11 == (long *)0x0)) {
        plVar7 = (long *)cvMemStorageAlloc(*(undefined8 *)(param_1 + 0x10),0x58);
        *plVar7 = 0;
        plVar7[1] = 0;
        plVar5 = plVar7 + 2;
        plVar7[2] = 0;
        plVar7[3] = 0;
        plVar7[4] = 0;
        plVar7[5] = 0;
        plVar7[6] = 0;
        plVar7[7] = 0;
        plVar7[8] = 0;
        plVar7[9] = 0;
        plVar7[10] = 0;
        *plVar7 = (long)plVar5;
        if (plVar11 == (long *)0x0) {
          iVar10 = 1;
          lVar15 = 8;
          lVar8 = 0;
          plVar16 = plVar7;
        }
        else {
          plVar11[1] = (long)plVar7;
          iVar10 = 1;
          lVar15 = 8;
          lVar8 = 0;
        }
      }
      else {
        iVar3 = iVar10 << 1;
        plVar5 = (long *)*plVar11;
        iVar10 = iVar10 + 1;
        lVar8 = (long)iVar3 << 3;
        lVar15 = ((long)iVar3 + 1) * 8;
        plVar7 = plVar11;
      }
      *(undefined8 *)((long)plVar5 + lVar8) = *(undefined8 *)(lVar4 + 0x10);
      plVar11 = plVar7;
      lVar4 = lVar13;
LAB_00383088:
      if ((*pcVar14 != '=') && (pcVar14 = (char *)FUN_00372578(param_1,pcVar14,2), *pcVar14 != '='))
      {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                     ,"Attribute name should be followed by \'=\'",0x865);
      }
      pcVar6 = pcVar14 + 1;
      if ((pcVar14[1] != '\'') && (pcVar14[1] != '\"')) {
                    /* try { // try from 0038324c to 00483407 has its CatchHandler @ 00383530 */
        pcVar6 = (char *)FUN_00372578(param_1,pcVar6,2);
        if ((*pcVar6 != '\'') && (*pcVar6 != '\"')) {
          FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                       "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                       ,"Attribute value should be put into single or double quotes",0x86d);
        }
      }
      pcVar14 = (char *)FUN_003823c4(param_1,pcVar6,auStack_20);
      *(undefined8 *)(*plVar11 + lVar15) = local_8;
    }
    cVar1 = *pcVar14;
                    /* try { // try from 00383118 to 0048311b has its CatchHandler @ 00383530 */
    if (cVar1 == '>') {
LAB_00383130:
      if (iVar12 == 4) {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                     ,"Invalid closing tag for <?xml ...",0x882);
      }
      pcVar14 = pcVar14 + 1;
      goto LAB_0038313c;
    }
    pcVar14 = (char *)FUN_00372578(param_1,pcVar14,2);
    uVar9 = (uint)*pcVar14;
    if (uVar9 == 0x3e) goto LAB_00383130;
    if ((uVar9 == 0x3f) && (iVar12 == 4)) {
      if (pcVar14[1] != '>') {
        FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                     "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                     ,"Invalid closing tag for <?xml ...",0x889);
      }
      pcVar14 = pcVar14 + 2;
      iVar12 = 4;
      goto LAB_0038313c;
    }
    if (((uVar9 == 0x2f) && (pcVar14[1] == '>')) && (iVar12 == 1)) {
      pcVar14 = pcVar14 + 2;
                    /* try { // try from 00383244 to 00483247 has its CatchHandler @ 00383504 */
      iVar12 = 3;
LAB_0038313c:
      *param_3 = lVar4;
      *param_5 = iVar12;
                    /* try { // try from 00383150 to 00483153 has its CatchHandler @ 00383538 */
      *param_4 = plVar16;
                    /* try { // try from 00383158 to 004831f3 has its CatchHandler @ 00383530 */
      return pcVar14;
    }
    lVar13 = lVar4;
    pcVar6 = pcVar14;
    if (4 < ((int)cVar1 - 9U & 0xff) && ((int)cVar1 & 0xffffffdfU) != 0) {
      FUN_00371858(*(undefined8 *)(param_1 + 0x60),*(undefined4 *)(param_1 + 0x94),
                   "char* icvXMLParseTag(CvFileStorage*, char*, CvStringHashNode**, CvAttrList**, int*)"
                   ,"There should be space between attributes",0x895);
      uVar9 = (uint)*pcVar14;
    }
  } while( true );
}


==================================================================

### FUNC 003833f0 (3976 bytes) name=FUN_003833f0

/* WARNING: Restarted to delay deadcode elimination for space: stack */

byte * FUN_003833f0(long param_1,byte *param_2,uint *param_3,uint param_4)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  bool bVar4;
  byte *pbVar5;
  bool bVar6;
  bool bVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  undefined4 uVar11;
  uint *puVar12;
  char *pcVar13;
  long lVar14;
  undefined8 *puVar15;
  long lVar16;
  undefined8 uVar17;
  int iVar18;
  undefined8 uVar19;
  byte bVar20;
  ulong uVar21;
  int iVar22;
  uint uVar23;
  byte *pbVar24;
  double dVar25;
  double dVar26;
  undefined1 auVar27 [16];
  int local_1424;
  byte *local_1420;
  byte *local_1418;
  long local_1410 [128];
  byte local_1010 [4112];
  
  uVar2 = param_4 & 7;
  bVar6 = (param_4 & 7) != 0;
  uVar1 = param_4 & 0x10;
  bVar4 = true;
  param_3[0] = 0;
  param_3[1] = 0;
  param_3[2] = 0;
  param_3[3] = 0;
  param_3[4] = 0;
  param_3[5] = 0;
  param_3[6] = 0;
  param_3[7] = 0;
  bVar7 = true;
LAB_00383494:
  do {
    bVar20 = *param_2;
    iVar9 = (int)(char)bVar20;
    if (((int)(char)bVar20 - 9U & 0xff) < 5 || ((int)(char)bVar20 & 0xffffffdfU) == 0) {
LAB_00383648:
      param_2 = (byte *)FUN_00372578(param_1,param_2,0);
                    /* try { // try from 00383658 to 0048365b has its CatchHandler @ 00383f28 */
                    /* try { // try from 00383660 to 004836b7 has its CatchHandler @ 00383560 */
      uVar23 = (uint)(char)param_2[1];
      uVar8 = (uint)(char)param_2[1];
      iVar9 = (int)(char)*param_2;
      bVar7 = iVar9 == 0;
      if ((bVar7) || (iVar9 == 0x3c)) {
LAB_00383678:
        local_1420 = (byte *)0x0;
        local_1418 = (byte *)0x0;
        local_1410[0] = 0;
        local_1424 = 0;
        if ((uVar23 == 0x2f) || (bVar7)) break;
LAB_003836a4:
        local_1424 = 0;
        local_1410[0] = 0;
        local_1418 = (byte *)0x0;
        local_1420 = (byte *)0x0;
        uVar17 = FUN_00382ee0(param_1,param_2,&local_1420,local_1410,&local_1424);
        if (local_1424 == 5) {
          sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Directive tags are not allowed here");
          cvError(0xffffff2c,&DAT_00470520,local_1010,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x745);
        }
        if (local_1424 == 3) {
          sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),&DAT_00471af8);
                    /* try { // try from 00384114 to 00484117 has its CatchHandler @ 0038450c */
          cvError(0xffffff2c,&DAT_00470520,local_1010,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x747);
        }
                    /* try { // try from 003836f0 to 004836f3 has its CatchHandler @ 00383f58 */
        if ((local_1410[0] == 0) ||
           (pcVar13 = (char *)cvAttrValue(local_1410[0],"type_id"), pcVar13 == (char *)0x0)) {
          uVar11 = 0;
          lVar16 = 0;
LAB_00383738:
          if (*(int *)(local_1420 + 8) != 1) goto LAB_0038374c;
LAB_00383c88:
          bVar7 = true;
                    /* try { // try from 00383c94 to 00483c97 has its CatchHandler @ 00383fc0 */
          if (**(char **)(local_1420 + 0x10) != '_') goto LAB_0038374c;
          if ((*param_3 & 7) < 5) {
                    /* catch() { ... } // from try @ 003837d4 with catch @ 00383fc0
                       catch() { ... } // from try @ 00383c94 with catch @ 00383fc0
                       catch() { ... } // from try @ 00383cf8 with catch @ 00383fc0 */
            lVar14 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
            if ((*param_3 & 7) != 0) {
              cvSeqPush(lVar14,param_3);
            }
            *(long *)(param_3 + 4) = lVar14;
            uVar8 = 5;
            bVar7 = true;
            goto LAB_00383814;
          }
                    /* try { // try from 00383ca8 to 00483cb7 has its CatchHandler @ 00383560 */
          if ((*param_3 & 7) != 5) {
            pcVar13 = "Map element should have a name";
            goto LAB_00383c2c;
          }
LAB_00383824:
          puVar12 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
                    /* try { // try from 00383834 to 00483a2f has its CatchHandler @ 00383fbc */
          uVar17 = FUN_003833f0(param_1,uVar17,puVar12,uVar11);
          uVar8 = *puVar12;
        }
        else {
                    /* try { // try from 003836fc to 00483747 has its CatchHandler @ 00383560 */
          iVar9 = strcmp(pcVar13,"str");
          if (iVar9 != 0) {
            iVar9 = strcmp(pcVar13,"map");
            if (iVar9 == 0) {
              uVar11 = 6;
                    /* try { // try from 0038402c to 0048404b has its CatchHandler @ 00383ffc */
              lVar16 = 0;
            }
            else {
              iVar9 = strcmp(pcVar13,"seq");
              if (iVar9 == 0) {
                uVar11 = 5;
                lVar16 = 0;
              }
              else {
                lVar16 = cvFindType(pcVar13);
                uVar11 = 0;
                if (lVar16 != 0) {
                  uVar11 = 0x10;
                }
              }
            }
            goto LAB_00383738;
          }
          uVar11 = 3;
          lVar16 = 0;
          if (*(int *)(local_1420 + 8) == 1) goto LAB_00383c88;
LAB_0038374c:
          uVar8 = *param_3 & 7;
          if (uVar8 < 5) {
            if (*param_3 != 0) {
              sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),
                      "Sequence element should not have name (use <_></_>)");
              cvError(0xffffff2c,"void icvFSCreateCollection(CvFileStorage*, int, CvFileNode*)",
                      local_1010,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x199);
            }
            uVar19 = *(undefined8 *)(param_1 + 0x10);
            bVar7 = false;
            lVar14 = cvCreateSet(0,0x78,0x30,uVar19);
                    /* try { // try from 003837d4 to 004837d7 has its CatchHandler @ 00383fc0 */
            *(undefined4 *)(lVar14 + 0x6c) = 0x10;
            puVar15 = (undefined8 *)cvMemStorageAlloc(uVar19,0x80);
            *(undefined8 **)(lVar14 + 0x70) = puVar15;
            *puVar15 = 0;
            puVar15[1] = 0;
            puVar15[2] = 0;
            puVar15[3] = 0;
            puVar15[4] = 0;
            puVar15[5] = 0;
            puVar15[6] = 0;
            puVar15[7] = 0;
            puVar15[8] = 0;
            puVar15[9] = 0;
            puVar15[10] = 0;
            puVar15[0xb] = 0;
            puVar15[0xc] = 0;
            puVar15[0xd] = 0;
            puVar15[0xe] = 0;
            puVar15[0xf] = 0;
            *(long *)(param_3 + 4) = lVar14;
            uVar8 = 6;
LAB_00383814:
            *param_3 = uVar8;
            cvSetSeqBlockSize(lVar14,8);
LAB_00383820:
            if (bVar7) goto LAB_00383824;
          }
          else if (uVar8 == 5) {
            bVar7 = false;
            pcVar13 = "Sequence element should not have name (use <_></_>)";
LAB_00383c2c:
            sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),pcVar13);
            cvError(0xffffff2c,&DAT_00470520,local_1010,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x763);
            goto LAB_00383820;
          }
          puVar12 = (uint *)cvGetFileNode(param_1,param_3,local_1420,1);
          uVar17 = FUN_003833f0(param_1,uVar17,puVar12,uVar11);
          uVar8 = *puVar12 | 0x40;
          *puVar12 = uVar8;
        }
        *(long *)(puVar12 + 2) = lVar16;
        bVar4 = (bool)(bVar4 & (uVar8 & 7) < 5);
        param_2 = (byte *)FUN_00382ee0(param_1,uVar17,&local_1418,local_1410,&local_1424);
        if ((local_1424 != 2) || (local_1418 != local_1420)) {
          sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Mismatched closing tag");
          cvError(0xffffff2c,&DAT_00470520,local_1010,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x771);
        }
        bVar7 = true;
        goto LAB_00383494;
      }
    }
    else {
      uVar8 = (uint)(char)param_2[1];
      if (bVar20 == 0x3c) {
        bVar7 = false;
        uVar23 = uVar8;
        if (uVar8 != 0x21) goto LAB_00383678;
        if (param_2[2] == 0x2d) goto LAB_00383648;
        goto LAB_003836a4;
      }
      if (!bVar7) {
        sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),"There should be space between literals");
                    /* try { // try from 00383cf8 to 00483cfb has its CatchHandler @ 00383fc0 */
        cvError(0xffffff2c,&DAT_00470520,local_1010,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x777);
      }
    }
    puVar12 = param_3;
    if (*param_3 != 0) {
      if ((*param_3 & 7) < 5) {
        uVar17 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(param_1 + 0x10));
        if ((*param_3 & 7) != 0) {
          cvSeqPush(uVar17,param_3);
        }
        *(undefined8 *)(param_3 + 4) = uVar17;
        *param_3 = 5;
        cvSetSeqBlockSize(uVar17,8);
      }
      puVar12 = (uint *)cvSeqPush(*(undefined8 *)(param_3 + 4),0);
      puVar12[2] = 0;
      puVar12[3] = 0;
    }
    if (uVar2 == 3) {
LAB_00383540:
                    /* catch() { ... } // from try @ 00382f50 with catch @ 00383548 */
      *puVar12 = 3;
      if (iVar9 == 0x22) {
        bVar7 = true;
      }
      else {
LAB_00383550:
        param_2 = param_2 + -1;
        bVar7 = false;
      }
                    /* try { // try from 00383558 to 0048355b has its CatchHandler @ 00382e5c */
      iVar9 = 0;
      while( true ) {
        bVar20 = param_2[1];
        pbVar24 = param_2 + 1;
        pbVar5 = pbVar24;
        iVar22 = iVar9;
        if (((byte)(bVar20 - 0x30) < 10) || ((byte)((bVar20 & 0xdf) + 0xbf) < 0x1a))
        goto LAB_003835d8;
        if (bVar20 == 0x22) {
          if (!bVar7) {
            sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),
                    "Literal \" is not allowed within a string. Use &quot;");
                    /* try { // try from 00383e10 to 00483e13 has its CatchHandler @ 00383f6c */
            cvError(0xffffff2c,&DAT_00470520,local_1410,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7b3);
          }
          param_2 = param_2 + 2;
          auVar27 = cvMemStorageAllocString(*(undefined8 *)(param_1 + 0x10),local_1010,iVar9);
          *(undefined1 (*) [16])(puVar12 + 4) = auVar27;
          goto joined_r0x00383ac8;
        }
        if ((bVar20 < 0x20) || (bVar20 == 0x3c)) break;
        if ((!bVar7) && (bVar20 == 0x20)) goto LAB_00383b1c;
        if ((bVar20 == 0x3e) || (bVar20 == 0x27)) {
          sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),
                  "Literal \' or > are not allowed. Use &apos; or &gt;");
          cvError(0xffffff2c,&DAT_00470520,local_1410,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7bf);
        }
        else if (bVar20 == 0x26) {
          if (param_2[2] == 0x23) {
            if (param_2[3] == 0x78) {
              param_2 = param_2 + 4;
              iVar9 = 0x10;
                    /* try { // try from 00384188 to 0048418b has its CatchHandler @ 00384514 */
            }
            else {
              param_2 = param_2 + 3;
              iVar9 = 10;
            }
            lVar16 = strtol((char *)param_2,(char **)&local_1418,iVar9);
            if (((0xff < (uint)lVar16) || (local_1418 == (byte *)0x0)) || (*local_1418 != 0x3b)) {
              sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Invalid numeric value in the string");
              cvError(0xffffff2c,&DAT_00470520,local_1410,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",1999);
            }
            bVar20 = (byte)lVar16;
            pbVar5 = local_1418;
          }
          else {
            param_2 = param_2 + 2;
            local_1418 = param_2;
            do {
              do {
                local_1418 = local_1418 + 1;
                bVar3 = *local_1418;
              } while ((byte)(bVar3 + 0x9f) < 0x1a);
            } while (((byte)(bVar3 - 0x30) < 10) || ((byte)(bVar3 + 0xbf) < 0x1a));
            if (bVar3 != 0x3b) {
              sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Invalid character in the symbol entity name"
                     );
              cvError(0xffffff2c,&DAT_00470520,local_1410,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7d8);
            }
            pbVar5 = local_1418;
            iVar18 = (int)local_1418 - (int)param_2;
            if (iVar18 == 2) {
                    /* catch() { ... } // from try @ 0038402c with catch @ 00383ffc
                       catch() { ... } // from try @ 003841fc with catch @ 00383ffc
                       catch() { ... } // from try @ 0038445c with catch @ 00383ffc
                       catch() { ... } // from try @ 00384508 with catch @ 00383ffc */
              iVar10 = memcmp(param_2,&DAT_00470c30,2);
              if (iVar10 == 0) {
                bVar20 = 0x3c;
              }
              else {
                iVar10 = memcmp(param_2,&DAT_00470c38,2);
                if (iVar10 != 0) goto LAB_00383a18;
                bVar20 = 0x3e;
              }
            }
            else if (iVar18 == 3) {
              iVar10 = memcmp(param_2,&DAT_00470c40,3);
                    /* try { // try from 00384080 to 004840a7 has its CatchHandler @ 00384514 */
              if (iVar10 != 0) goto LAB_00383a18;
            }
            else if (iVar18 == 4) {
              iVar10 = memcmp(param_2,&DAT_00470c48,4);
              if (iVar10 == 0) {
                bVar20 = 0x27;
              }
              else {
                iVar10 = memcmp(param_2,&DAT_00470c50,4);
                if (iVar10 != 0) goto LAB_00383a18;
                bVar20 = 0x22;
              }
            }
            else {
LAB_00383a18:
              memcpy(local_1010 + iVar9,pbVar24,(long)(iVar18 + 2));
              iVar22 = iVar9 + iVar18 + 2;
              bVar20 = bVar3;
            }
          }
        }
LAB_003835d8:
        param_2 = pbVar5;
        iVar9 = iVar22 + 1;
        local_1010[iVar22] = bVar20;
        if (0xfff < iVar9) {
          sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                  (ulong)*(uint *)(param_1 + 0x94),"Too long string literal");
                    /* try { // try from 00383618 to 0048361b has its CatchHandler @ 00383560 */
          cvError(0xffffff2c,&DAT_00470520,local_1410,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7ef);
        }
      }
      if (bVar7) {
                    /* try { // try from 00383ad8 to 00483adb has its CatchHandler @ 00383560 */
        sprintf((char *)local_1410,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),"Closing \" is expected");
        cvError(0xffffff2c,&DAT_00470520,local_1410,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x7ba);
      }
LAB_00383b1c:
      auVar27 = cvMemStorageAllocString(*(undefined8 *)(param_1 + 0x10),local_1010,iVar9);
      *(undefined1 (*) [16])(puVar12 + 4) = auVar27;
      param_2 = pbVar24;
    }
    else {
                    /* catch() { ... } // from try @ 00383244 with catch @ 00383504 */
      bVar20 = (char)iVar9 - 0x2bU & 0xfd;
                    /* try { // try from 0038352c to 0048352f has its CatchHandler @ 00382e5c */
                    /* catch() { ... } // from try @ 00383118 with catch @ 00383530
                       catch() { ... } // from try @ 00383158 with catch @ 00383530
                       catch() { ... } // from try @ 0038324c with catch @ 00383530 */
      if ((9 < (iVar9 - 0x30U & 0xff)) &&
         ((bVar20 != 0 || ((9 < (uVar8 - 0x30 & 0xff) && (uVar8 != 0x2e)))))) {
                    /* catch() { ... } // from try @ 00383150 with catch @ 00383538 */
        if (iVar9 != 0x2e) goto LAB_00383540;
                    /* try { // try from 003841fc to 00484247 has its CatchHandler @ 00383ffc */
        if ((((uVar8 & 0xff) - 0x30 & 0xff) < 10) || (((uVar8 & 0xdf) - 0x41 & 0xff) < 0x1a))
        goto LAB_00383a40;
        *puVar12 = 3;
        goto LAB_00383550;
      }
LAB_00383a40:
      local_1418 = param_2 + (bVar20 == 0);
      bVar20 = param_2[bVar20 == 0];
      while ((byte)(bVar20 - 0x30) < 10) {
        local_1418 = local_1418 + 1;
        bVar20 = *local_1418;
      }
      if ((bVar20 == 0x65) || (bVar20 == 0x2e)) {
        dVar25 = strtod((char *)param_2,(char **)&local_1418);
        pbVar24 = local_1418;
        if (*local_1418 == 0x2e) {
          *local_1418 = 0x2c;
          dVar26 = strtod((char *)param_2,(char **)&local_1418);
          *pbVar24 = 0x2e;
          if (pbVar24 < local_1418) {
            dVar25 = dVar26;
            pbVar24 = local_1418;
          }
        }
        local_1418 = pbVar24;
        if ((local_1418 == param_2) || ((byte)((*local_1418 & 0xdf) + 0xbf) < 0x1a)) {
          bVar20 = *param_2;
          if ((bVar20 - 0x2b & 0xfd) == 0) {
            bVar7 = bVar20 != 0x2d;
            bVar20 = param_2[1];
            uVar8 = 0xfff00000;
            if (bVar7) {
              uVar8 = 0x7ff00000;
            }
            uVar21 = (ulong)uVar8;
            pbVar24 = param_2 + 1;
          }
          else {
            uVar21 = 0x7ff00000;
            pbVar24 = param_2;
          }
          if (bVar20 != 0x2e) {
            sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                    (ulong)*(uint *)(param_1 + 0x94),"Bad format of floating-point constant");
                    /* try { // try from 00383ec8 to 00483ecb has its CatchHandler @ 00383560 */
            cvError(0xffffff2c,
                    "void icvProcessSpecialDouble(CvFileStorage*, char*, double*, char**)",
                    local_1010,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp"
                    ,0x38b);
          }
          iVar9 = toupper((int)(char)pbVar24[1]);
          if (iVar9 == 0x49) {
            iVar9 = toupper((int)(char)pbVar24[2]);
            if ((iVar9 != 0x4e) || (iVar9 = toupper((int)(char)pbVar24[3]), iVar9 != 0x46))
            goto LAB_00383f08;
            dVar25 = (double)(uVar21 << 0x20);
          }
          else {
                    /* try { // try from 00383f04 to 00483f07 has its CatchHandler @ 00383f3c */
            if (((iVar9 != 0x4e) || (iVar9 = toupper((int)(char)pbVar24[2]), iVar9 != 0x41)) ||
               (iVar9 = toupper((int)(char)pbVar24[3]), dVar25 = DAT_00384378, iVar9 != 0x4e)) {
LAB_00383f08:
                    /* try { // try from 00383f0c to 00483f0f has its CatchHandler @ 00383560 */
                    /* catch() { ... } // from try @ 00383658 with catch @ 00383f28 */
              sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                      (ulong)*(uint *)(param_1 + 0x94),"Bad format of floating-point constant");
                    /* try { // try from 00383f38 to 00483f3b has its CatchHandler @ 00383560 */
                    /* catch() { ... } // from try @ 00383f04 with catch @ 00383f3c */
                    /* try { // try from 00383f4c to 00483f4f has its CatchHandler @ 00383560 */
              cvError(0xffffff2c,
                      "void icvProcessSpecialDouble(CvFileStorage*, char*, double*, char**)",
                      local_1010,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x394);
              dVar25 = 0.0;
            }
          }
          local_1418 = pbVar24 + 4;
                    /* catch() { ... } // from try @ 003836f0 with catch @ 00383f58 */
        }
        *puVar12 = 2;
                    /* try { // try from 00383f68 to 00483f6b has its CatchHandler @ 00383560 */
        *(double *)(puVar12 + 4) = dVar25;
      }
      else {
        lVar16 = strtol((char *)param_2,(char **)&local_1418,0);
        puVar12[4] = (uint)lVar16;
        *puVar12 = 1;
      }
      bVar7 = param_2 == local_1418;
      param_2 = local_1418;
                    /* catch() { ... } // from try @ 00383e10 with catch @ 00383f6c */
      if (bVar7) {
        sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
                (ulong)*(uint *)(param_1 + 0x94),
                "Invalid numeric value (inconsistent explicit type specification?)");
                    /* try { // try from 00383fac to 00483fb7 has its CatchHandler @ 00383560 */
        cvError(0xffffff2c,&DAT_00470520,local_1010,
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x79c);
        param_2 = local_1418;
                    /* catch() { ... } // from try @ 00383834 with catch @ 00383fbc */
      }
    }
joined_r0x00383ac8:
    bVar7 = bVar6 && uVar2 < 5;
  } while (!bVar6 || uVar2 >= 5);
  uVar23 = *param_3;
  uVar8 = uVar23 & 7;
  if (uVar8 == 0) {
LAB_00384234:
    if (uVar2 < 5) {
      if (!bVar6) goto LAB_00383b60;
    }
    else {
      uVar11 = 6;
                    /* try { // try from 00384250 to 00484253 has its CatchHandler @ 00384514 */
      if (uVar2 != 6) {
        uVar11 = 5;
      }
      FUN_003718c8(param_1,uVar11,param_3);
      uVar23 = *param_3;
      uVar8 = uVar23 & 7;
    }
    if (uVar2 == uVar8) goto LAB_00383b60;
  }
  else {
    if (uVar2 == uVar8) goto LAB_00383b60;
    if (uVar8 < 5) goto LAB_00384234;
    if (!bVar6) goto LAB_00383b60;
  }
  sprintf((char *)local_1010,"%s(%d): %s",*(undefined8 *)(param_1 + 0x60),
          (ulong)*(uint *)(param_1 + 0x94),&DAT_00471c10);
  cvError(0xffffff2c,&DAT_00470520,local_1010,
          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x805);
  uVar23 = *param_3;
  uVar8 = uVar23 & 7;
LAB_00383b60:
  if ((4 < uVar8) && (bVar4)) {
    **(uint **)(param_3 + 4) = **(uint **)(param_3 + 4) | 0x100;
  }
  if ((param_4 & 0x10) != 0) {
    uVar1 = 0x10;
  }
  *param_3 = uVar1 | uVar23;
  return param_2;
}


==================================================================

### FUNC 00384380 (6956 bytes) name=cvOpenFileStorage

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 * cvOpenFileStorage(char *param_1,long param_2,uint param_3,char *param_4)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  bool bVar9;
  undefined1 uVar10;
  int iVar11;
  undefined4 uVar12;
  size_t sVar13;
  char *pcVar14;
  undefined8 uVar15;
  undefined8 *puVar16;
  void *pvVar17;
  void *pvVar18;
  uint *puVar19;
  undefined8 uVar20;
  long lVar21;
  char *pcVar22;
  FILE *pFVar23;
  long lVar24;
  ulong uVar25;
  char cVar26;
  int iVar27;
  ulong uVar28;
  int iVar29;
  ulong uVar30;
  uint uVar31;
  ulong uVar32;
  undefined4 *puVar33;
  undefined4 *puVar34;
  char *pcVar35;
  bool bVar36;
  uint uVar37;
  long lVar38;
  int local_30a4;
  undefined4 *local_30a0;
  long local_3098;
  long local_3090;
  undefined8 local_3088;
  char local_3080 [16];
  long local_3070;
  long local_3068;
  long local_3060;
  long local_3058;
  char acStack_3050 [1024];
  char acStack_2c50 [1024];
  char acStack_2850 [1024];
  char acStack_2450 [1024];
  char acStack_2050 [1024];
  char acStack_1c50 [1024];
  char acStack_1850 [1024];
  char acStack_1450 [1024];
  char acStack_1050 [1024];
  char acStack_c50 [1024];
  long local_850;
  long local_848;
  undefined8 local_450;
  char *local_448;
  undefined2 local_440;
  
  bVar9 = (param_3 & 3) == 2;
  local_30a0 = (undefined4 *)0x0;
  uVar31 = param_3 >> 2 & 1;
  uVar37 = (uint)((param_3 & 3) != 0);
                    /* try { // try from 003843dc to 0048442f has its CatchHandler @ 0038450c */
  if ((param_1 == (char *)0x0) || (*param_1 == '\0')) {
    if (uVar37 == 0) {
      if (uVar31 == 0) {
        pcVar14 = "NULL or empty buffer";
      }
      else {
        pcVar14 = "NULL or empty filename";
      }
                    /* try { // try from 00384738 to 0048473b has its CatchHandler @ 00384c5c */
      local_450 = (char *)0x0;
      local_448 = (char *)0x0;
      sVar13 = strlen(pcVar14);
      pvVar17 = (void *)cv::String::allocate((String *)&local_450,sVar13);
      memcpy(pvVar17,pcVar14,sVar13);
      cv::error(-0x1b,(String *)&local_450,
                "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xa68);
      sVar13 = 0;
      uVar31 = 1;
      cv::String::deallocate((String *)&local_450);
    }
    else {
      sVar13 = 0;
      uVar31 = 1;
    }
LAB_003843f0:
    if (bVar9) {
      local_450 = (char *)0x0;
      local_448 = (char *)0x0;
      pcVar14 = (char *)cv::String::allocate((String *)&local_450,0x44);
      uVar5 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._40_8_;
      uVar4 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._32_8_;
      uVar3 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._24_8_;
      uVar2 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._16_8_;
      uVar20 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._8_8_;
      uVar15 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._0_8_;
                    /* try { // try from 00384448 to 0048444b has its CatchHandler @ 00384514 */
      *(undefined4 *)(pcVar14 + 0x40) = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._64_4_;
      uVar7 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._56_8_;
      uVar6 = s_CV_STORAGE_APPEND_and_CV_STORAGE_00471e38._48_8_;
      *(undefined8 *)pcVar14 = uVar15;
      *(undefined8 *)(pcVar14 + 8) = uVar20;
      *(undefined8 *)(pcVar14 + 0x10) = uVar2;
      *(undefined8 *)(pcVar14 + 0x18) = uVar3;
                    /* try { // try from 0038445c to 0048445f has its CatchHandler @ 00383ffc */
      *(undefined8 *)(pcVar14 + 0x20) = uVar4;
      *(undefined8 *)(pcVar14 + 0x28) = uVar5;
      *(undefined8 *)(pcVar14 + 0x30) = uVar6;
      *(undefined8 *)(pcVar14 + 0x38) = uVar7;
      cv::error(-0xce,(String *)&local_450,
                "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xa6f);
      cv::String::deallocate((String *)&local_450);
    }
  }
  else {
    sVar13 = strlen(param_1);
    if (uVar31 != 0) goto LAB_003843f0;
  }
                    /* try { // try from 00384474 to 00484477 has its CatchHandler @ 0038450c */
  local_30a0 = (undefined4 *)cv::cvAlloc(0x188);
  memset(local_30a0,0,0x188);
  puVar34 = local_30a0;
  uVar15 = cvCreateMemStorage(0x40000);
  puVar33 = local_30a0;
  *(undefined8 *)(puVar34 + 4) = uVar15;
  if (param_2 == 0) {
    param_2 = *(long *)(local_30a0 + 4);
  }
  *(long *)(local_30a0 + 6) = param_2;
  local_30a0[2] = uVar37;
                    /* try { // try from 003844b0 to 004844b3 has its CatchHandler @ 003844c0 */
  *local_30a0 = 0x4c4d4159;
  if (uVar31 == 0) {
    uVar15 = cvMemStorageAlloc(*(undefined8 *)(local_30a0 + 4),sVar13 + 1);
    *(undefined8 *)(puVar33 + 0x18) = uVar15;
    strcpy(*(char **)(local_30a0 + 0x18),param_1);
    puVar34 = local_30a0;
                    /* try { // try from 003848a0 to 004848c7 has its CatchHandler @ 00384c54 */
    pcVar22 = *(char **)(local_30a0 + 0x18);
    pcVar14 = strrchr(pcVar22,0x2e);
    if (((pcVar14 == (char *)0x0) || (pcVar14[1] != 'g')) || (pcVar14[2] != 'z')) {
LAB_003848d0:
      if (puVar34[2] == 0) {
        pcVar14 = "rt";
      }
      else if (bVar9) {
        pcVar14 = "a+t";
      }
      else {
        pcVar14 = "wt";
      }
      pFVar23 = fopen(pcVar22,pcVar14);
      *(FILE **)(puVar34 + 0x1a) = pFVar23;
      if (*(long *)(local_30a0 + 0x1a) != 0) {
        bVar36 = false;
        goto LAB_00384a80;
      }
    }
    else {
      cVar26 = pcVar14[3];
                    /* try { // try from 00385a5c to 00485a5f has its CatchHandler @ 00385a00 */
      if (cVar26 == 0) {
        if (bVar9) {
LAB_00385b40:
          cvReleaseFileStorage(&local_30a0);
          local_450 = (char *)0x0;
          local_448 = (char *)0x0;
          pcVar22 = (char *)cv::String::allocate((String *)&local_450,0x34);
          uVar5 = s_Appending_data_to_compressed_fil_00471e80._40_8_;
          uVar4 = s_Appending_data_to_compressed_fil_00471e80._32_8_;
          uVar3 = s_Appending_data_to_compressed_fil_00471e80._24_8_;
          uVar2 = s_Appending_data_to_compressed_fil_00471e80._16_8_;
          uVar20 = s_Appending_data_to_compressed_fil_00471e80._8_8_;
          uVar15 = s_Appending_data_to_compressed_fil_00471e80._0_8_;
          *(undefined4 *)(pcVar22 + 0x30) = s_Appending_data_to_compressed_fil_00471e80._48_4_;
          *(undefined8 *)pcVar22 = uVar15;
          *(undefined8 *)(pcVar22 + 8) = uVar20;
          *(undefined8 *)(pcVar22 + 0x10) = uVar2;
          *(undefined8 *)(pcVar22 + 0x18) = uVar3;
          *(undefined8 *)(pcVar22 + 0x20) = uVar4;
          *(undefined8 *)(pcVar22 + 0x28) = uVar5;
          cv::error(-0xd5,(String *)&local_450,
                    "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)"
                    ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xa88);
          cv::String::deallocate((String *)&local_450);
          cVar26 = pcVar14[3];
          if (cVar26 != '\0') goto LAB_00385a88;
          pcVar22 = *(char **)(local_30a0 + 0x18);
          puVar34 = local_30a0;
        }
        local_450._2_6_ = (uint6)((ulong)local_450 >> 0x10) & 0xffffffff0000;
        local_450 = (char *)CONCAT62(local_450._2_6_,0x6200);
        cVar26 = '3';
                    /* try { // try from 00385be0 to 00485be3 has its CatchHandler @ 0038602c */
        if (puVar34[2] == 0) {
          local_450 = (char *)CONCAT71(local_450._1_7_,0x72);
        }
        else {
          local_450 = (char *)CONCAT71(local_450._1_7_,0x77);
        }
      }
      else {
        if ((9 < ((int)cVar26 - 0x30U & 0xff)) || (pcVar14[4] != '\0')) goto LAB_003848d0;
        if (bVar9) goto LAB_00385b40;
LAB_00385a88:
        pcVar14[3] = '\0';
        sVar13 = sVar13 - 1;
        pcVar22 = *(char **)(local_30a0 + 0x18);
        local_450._2_6_ = (uint6)((ulong)local_450 >> 0x10) & 0xffffffff0000;
                    /* try { // try from 00385aa8 to 00485aab has its CatchHandler @ 0038607c */
        local_450 = (char *)CONCAT62(local_450._2_6_,0x6200);
        uVar10 = 0x77;
                    /* try { // try from 00385ab8 to 00485b0b has its CatchHandler @ 00385a00 */
        if (local_30a0[2] == 0) {
          uVar10 = 0x72;
        }
        local_450 = (char *)CONCAT71(local_450._1_7_,uVar10);
        puVar34 = local_30a0;
      }
      local_450._0_3_ = CONCAT12(cVar26,(undefined2)local_450);
      uVar15 = gzopen(pcVar22,&local_450);
      *(undefined8 *)(puVar34 + 0x1c) = uVar15;
      if (*(long *)(local_30a0 + 0x1c) != 0) {
        bVar36 = true;
LAB_00384a80:
        *(undefined8 *)(local_30a0 + 0xc) = 0;
        local_30a0[0x10] = 0;
        local_30a0[0x11] = 0;
        local_30a0[0x24] = 0x47;
        if (local_30a0[2] != 0) {
                    /* catch() { ... } // from try @ 00384cd8 with catch @ 00384c98
                       catch() { ... } // from try @ 00384d5c with catch @ 00384c98
                       catch() { ... } // from try @ 00384ff8 with catch @ 00384c98
                       catch() { ... } // from try @ 0038526c with catch @ 00384c98
                       catch() { ... } // from try @ 00385580 with catch @ 00384c98
                       catch() { ... } // from try @ 00385848 with catch @ 00384c98
                       catch() { ... } // from try @ 0038598c with catch @ 00384c98
                       catch() { ... } // from try @ 003859e8 with catch @ 00384c98 */
          if ((param_3 & 0x38) != 0) goto LAB_00384cbc;
          lVar38 = -7;
          if (!bVar36) {
            lVar38 = -4;
          }
          goto LAB_003845a0;
        }
        pcVar22 = *(char **)(local_30a0 + 0x58);
        pcVar14 = local_450;
        goto joined_r0x00384aa0;
      }
    }
  }
  else {
                    /* try { // try from 003844b8 to 004844bb has its CatchHandler @ 0038450c */
    *(undefined8 *)(local_30a0 + 0xc) = 0;
                    /* catch() { ... } // from try @ 003844b0 with catch @ 003844c0 */
    local_30a0[0x10] = 0;
    local_30a0[0x11] = 0;
    local_30a0[0x24] = 0x47;
    if (uVar37 == 0) {
      *(char **)(local_30a0 + 0x58) = param_1;
      *(size_t *)(local_30a0 + 0x5a) = sVar13;
                    /* try { // try from 003847ac to 004847af has its CatchHandler @ 00384c54 */
      bVar36 = false;
      pcVar22 = param_1;
      pcVar14 = local_450;
joined_r0x00384aa0:
      local_450 = pcVar22;
      if (local_450 == (char *)0x0) {
        if (*(FILE **)(local_30a0 + 0x1a) == (FILE *)0x0) {
          if (*(long *)(local_30a0 + 0x1c) == 0) {
            local_448 = local_450;
            pcVar14 = (char *)cv::String::allocate((String *)&local_450,0x19);
            cVar26 = s_The_storage_is_not_opened_00470830[0x18];
            uVar20 = s_The_storage_is_not_opened_00470830._8_8_;
            uVar15 = s_The_storage_is_not_opened_00470830._0_8_;
                    /* try { // try from 003856f0 to 00485737 has its CatchHandler @ 00385990 */
            *(undefined8 *)(pcVar14 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
            pcVar14[0x18] = cVar26;
            *(undefined8 *)pcVar14 = uVar15;
            *(undefined8 *)(pcVar14 + 8) = uVar20;
            cv::error(-2,(String *)&local_450,"char* icvGets(CvFileStorage*, char*, int)",
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d);
            cv::String::deallocate((String *)&local_450);
          }
          else {
            local_450 = pcVar14;
            gzgets(*(long *)(local_30a0 + 0x1c),local_3080,0xe);
          }
        }
        else {
          local_450 = pcVar14;
          fgets(local_3080,0xe,*(FILE **)(local_30a0 + 0x1a));
        }
      }
      else {
        uVar25 = *(ulong *)(local_30a0 + 0x5c);
        uVar30 = *(ulong *)(local_30a0 + 0x5a);
        uVar32 = uVar25;
        if (uVar25 < uVar30) {
          cVar26 = local_450[uVar25];
          uVar32 = uVar25 + 1;
          if (cVar26 != '\0') {
            local_3080[0] = cVar26;
            if (cVar26 == '\n') {
              lVar38 = 1;
            }
            else {
                    /* try { // try from 003847d8 to 00484863 has its CatchHandler @ 00384520 */
              iVar11 = 1;
              uVar28 = uVar32;
              do {
                uVar32 = uVar28;
                if (uVar28 == uVar30) {
                  pcVar22 = local_3080 + iVar11;
                  goto LAB_00385768;
                }
                if (iVar11 == 0xd) {
                  lVar38 = 0xd;
                  goto LAB_00385778;
                }
                cVar26 = local_450[uVar28];
                uVar32 = uVar28 + 1;
                if (cVar26 == '\0') {
                    /* try { // try from 003858b4 to 004858b7 has its CatchHandler @ 003859d0 */
                  pcVar22 = local_3080 + iVar11;
                  goto LAB_00385768;
                }
                local_3080[uVar28 - uVar25] = cVar26;
                iVar11 = iVar11 + 1;
                uVar28 = uVar32;
              } while (cVar26 != '\n');
                    /* try { // try from 003858c0 to 004858c3 has its CatchHandler @ 003858e0 */
              lVar38 = (long)iVar11;
            }
LAB_00385778:
            local_3080[lVar38] = '\0';
            *(ulong *)(local_30a0 + 0x5c) = uVar32;
            local_450 = pcVar14;
            goto LAB_00384ab8;
          }
        }
        pcVar22 = local_3080;
LAB_00385768:
        *pcVar22 = '\0';
        *(ulong *)(local_30a0 + 0x5c) = uVar32;
        local_450 = pcVar14;
      }
LAB_00384ab8:
      puVar34 = local_30a0;
      iVar11 = strncmp(local_3080,"%YAML:",6);
      uVar12 = 0x10;
      if (iVar11 != 0) {
        uVar12 = 8;
      }
      puVar34[1] = uVar12;
      if (bVar36) {
        uVar25 = 0x100000;
        uVar32 = 0x100100;
      }
      else {
        if (uVar31 == 0) {
          fseek(*(FILE **)(puVar34 + 0x1a),0,2);
                    /* try { // try from 003856a0 to 004856a3 has its CatchHandler @ 003858e0 */
          uVar25 = ftell(*(FILE **)(local_30a0 + 0x1a));
          puVar34 = local_30a0;
        }
        else {
          uVar25 = *(ulong *)(puVar34 + 0x5a);
        }
        if (0x100000 < uVar25) {
          uVar25 = 0x100000;
        }
        if (uVar25 < 0x2400) {
          uVar25 = 0x2400;
        }
        uVar32 = uVar25 + 0x100;
      }
      if (*(FILE **)(puVar34 + 0x1a) == (FILE *)0x0) {
                    /* try { // try from 00385668 to 0048566b has its CatchHandler @ 003859d0 */
        puVar33 = puVar34;
        if (*(long *)(puVar34 + 0x1c) != 0) {
          gzrewind();
          puVar33 = local_30a0;
        }
      }
      else {
        rewind(*(FILE **)(puVar34 + 0x1a));
        puVar33 = local_30a0;
      }
      uVar15 = *(undefined8 *)(puVar33 + 4);
      *(undefined8 *)(puVar34 + 0x5c) = 0;
      lVar38 = cvCreateSet(0,0x78,0x20,uVar15);
      *(undefined4 *)(lVar38 + 0x6c) = 0x100;
      pvVar17 = (void *)cvMemStorageAlloc(uVar15,0x800);
      *(void **)(lVar38 + 0x70) = pvVar17;
      memset(pvVar17,0,0x800);
      puVar34 = local_30a0;
      *(long *)(puVar33 + 10) = lVar38;
                    /* try { // try from 00384b78 to 00484ba7 has its CatchHandler @ 00384c54 */
      uVar15 = cvCreateSeq(0,0x60,0x20,*(undefined8 *)(local_30a0 + 4));
      puVar33 = local_30a0;
      *(undefined8 *)(puVar34 + 0xc) = uVar15;
      uVar15 = cv::cvAlloc(uVar32);
      puVar34 = local_30a0;
      *(undefined8 *)(puVar33 + 0x1e) = uVar15;
      *(undefined8 *)(puVar33 + 0x20) = uVar15;
      *(ulong *)(local_30a0 + 0x22) = *(long *)(local_30a0 + 0x20) + uVar25;
      **(undefined1 **)(local_30a0 + 0x1e) = 10;
      *(undefined1 *)(*(long *)(local_30a0 + 0x1e) + 1) = 0;
      if (local_30a0[1] == 8) {
                    /* try { // try from 003854ac to 004854af has its CatchHandler @ 003859b4 */
        local_3098 = 0;
        local_3090 = 0;
        local_3088 = 0;
        local_30a4 = 0;
        pvVar17 = (void *)FUN_00372578(local_30a0,*(undefined8 *)(local_30a0 + 0x20),2);
        iVar11 = memcmp(pvVar17,"<?xml",5);
        if (iVar11 != 0) {
          FUN_00371858(*(undefined8 *)(puVar34 + 0x18),puVar34[0x25],
                       "void icvXMLParse(CvFileStorage*)",
                       "Valid XML should start with \'<?xml ...?>\'",0x8ac);
        }
        pcVar14 = (char *)FUN_00382ee0(puVar34,pvVar17,&local_3098,&local_3088,&local_30a4);
        while ((*pcVar14 != '\0' &&
               (pcVar14 = (char *)FUN_00372578(puVar34,pcVar14,0), *pcVar14 != '\0'))) {
          uVar15 = FUN_00382ee0(puVar34,pcVar14,&local_3098,&local_3088,&local_30a4);
                    /* try { // try from 00385560 to 00485573 has its CatchHandler @ 003859ec */
          if ((local_30a4 != 1) ||
             (iVar11 = strcmp(*(char **)(local_3098 + 0x10),"opencv_storage"), iVar11 != 0)) {
                    /* try { // try from 00385580 to 00485583 has its CatchHandler @ 00384c98 */
                    /* try { // try from 00385590 to 00485593 has its CatchHandler @ 003859b4 */
            sprintf(acStack_3050,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],"<opencv_storage> tag is missing");
                    /* try { // try from 003855a0 to 004855a3 has its CatchHandler @ 003859f4 */
            cvError(0xffffff2c,"void icvXMLParse(CvFileStorage*)",acStack_3050,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x8c9);
          }
                    /* try { // try from 003855bc to 004855bf has its CatchHandler @ 003859ec */
          uVar20 = cvSeqPush(*(undefined8 *)(puVar34 + 0xc),0);
          uVar15 = FUN_003833f0(puVar34,uVar15,uVar20,0);
          uVar15 = FUN_00382ee0(puVar34,uVar15,&local_3090,&local_3088,&local_30a4);
                    /* try { // try from 003855f8 to 004855fb has its CatchHandler @ 003859bc */
                    /* try { // try from 00385600 to 00485603 has its CatchHandler @ 003859ec */
          if ((local_30a4 != 2) || (local_3098 != local_3090)) {
            sprintf(acStack_2c50,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],&LAB_00472080);
            cvError(0xffffff2c,"void icvXMLParse(CvFileStorage*)",acStack_2c50,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x8cf);
          }
          pcVar14 = (char *)FUN_00372578(puVar34,uVar15,0);
        }
      }
      else {
                    /* try { // try from 00384be0 to 00484be3 has its CatchHandler @ 00384c80 */
        pcVar14 = *(char **)(local_30a0 + 0x20);
                    /* try { // try from 00384be8 to 00484beb has its CatchHandler @ 00384c54 */
        bVar9 = true;
                    /* try { // try from 00384bf8 to 00484bfb has its CatchHandler @ 00384520 */
        uVar31 = (uint)*pcVar14;
LAB_00384c10:
                    /* catch() { ... } // from try @ 003848f0 with catch @ 00384c10 */
        while (uVar31 == 0x20) {
          pcVar14 = pcVar14 + 1;
          uVar31 = (uint)*pcVar14;
        }
        if (uVar31 == 0x23) {
          if ((long)pcVar14 - *(long *)(puVar34 + 0x20) < 0x80000000) {
            uVar31 = 0;
            *pcVar14 = '\0';
                    /* try { // try from 00384db8 to 00484e07 has its CatchHandler @ 003859f4 */
            goto LAB_00384c2c;
          }
          uVar37 = 0x23;
LAB_00385188:
          if ((((uVar37 & 0xffffffdf) - 0x41 & 0xff) < 0x1a) || (uVar31 == 0x5f)) {
LAB_00384df4:
            pcVar22 = pcVar14;
            if (!bVar9) {
              sprintf(acStack_1850,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                      (ulong)(uint)puVar34[0x25],&DAT_004720f0);
                    /* try { // try from 00385438 to 0048543b has its CatchHandler @ 003859f4 */
              cvError(0xffffff2c,&DAT_00472b80,acStack_1850,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x560);
              uVar31 = (uint)*pcVar14;
            }
          }
          else {
            pcVar22 = pcVar14;
            if (puVar34[0x26] == 0) {
              sprintf(acStack_1450,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                      (ulong)(uint)puVar34[0x25],"Invalid or unsupported syntax");
              cvError(0xffffff2c,&DAT_00472b80,acStack_1450,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x566);
              uVar31 = (uint)*pcVar14;
              goto LAB_00384c10;
            }
          }
        }
        else {
          if ((uVar31 & 0xff) < 0x20) {
LAB_00384c2c:
            if (((uVar31 == 0) || (uVar31 == 10)) || (uVar31 == 0xd)) {
                    /* try { // try from 00384cd8 to 00484d27 has its CatchHandler @ 00384c98 */
              lVar38 = *(long *)(puVar34 + 0x58);
              pcVar14 = *(char **)(puVar34 + 0x20);
              iVar11 = (int)(*(long *)(puVar34 + 0x22) - (long)pcVar14);
              if (lVar38 == 0) {
                if (*(FILE **)(puVar34 + 0x1a) == (FILE *)0x0) {
                  lVar38 = *(long *)(puVar34 + 0x1c);
                  if (lVar38 == 0) {
                    local_3070 = lVar38;
                    local_3068 = lVar38;
                    pcVar14 = (char *)cv::String::allocate((String *)&local_3070,0x19);
                    cVar26 = s_The_storage_is_not_opened_00470830[0x18];
                    uVar20 = s_The_storage_is_not_opened_00470830._8_8_;
                    uVar15 = s_The_storage_is_not_opened_00470830._0_8_;
                    /* try { // try from 003857b4 to 004857b7 has its CatchHandler @ 003858e0 */
                    *(undefined8 *)(pcVar14 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
                    pcVar14[0x18] = cVar26;
                    *(undefined8 *)pcVar14 = uVar15;
                    *(undefined8 *)(pcVar14 + 8) = uVar20;
                    cv::error(-2,(String *)&local_3070,"char* icvGets(CvFileStorage*, char*, int)",
                              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                              0x11d);
                    cv::String::deallocate((String *)&local_3070);
                    goto LAB_00385158;
                  }
                  pcVar14 = (char *)gzgets(lVar38,pcVar14,
                                           *(long *)(puVar34 + 0x22) - (long)pcVar14 & 0xffffffff);
                }
                else {
                    /* try { // try from 00384f10 to 00484f13 has its CatchHandler @ 003859f4 */
                  pcVar14 = fgets(pcVar14,iVar11,*(FILE **)(puVar34 + 0x1a));
                }
                if (pcVar14 == (char *)0x0) {
LAB_00385158:
                  pcVar14 = *(char **)(puVar34 + 0x20);
                  builtin_strncpy(pcVar14,"...",4);
                  puVar34[0x26] = 1;
                  uVar31 = (uint)*pcVar14;
                  goto LAB_00384dd0;
                }
              }
              else {
                uVar25 = *(ulong *)(puVar34 + 0x5c);
                uVar30 = *(ulong *)(puVar34 + 0x5a);
                uVar32 = uVar25;
                if ((uVar30 <= uVar25) || (iVar11 = iVar11 + -1, iVar11 < 1)) {
LAB_00385150:
                  *pcVar14 = '\0';
                  *(ulong *)(puVar34 + 0x5c) = uVar32;
                  goto LAB_00385158;
                }
                cVar26 = *(char *)(lVar38 + uVar25);
                uVar32 = uVar25 + 1;
                if (cVar26 == '\0') goto LAB_00385150;
                *pcVar14 = cVar26;
                if (cVar26 == '\n') {
                  pcVar14[1] = '\0';
                  *(ulong *)(puVar34 + 0x5c) = uVar32;
                }
                else {
                  iVar29 = 1;
                  do {
                    /* try { // try from 00384d54 to 00484d57 has its CatchHandler @ 003859d8 */
                    uVar28 = uVar32;
                    if ((uVar32 == uVar30) || (iVar11 <= iVar29)) break;
                    cVar26 = *(char *)(lVar38 + uVar32);
                    uVar28 = uVar32 + 1;
                    if (cVar26 == '\0') break;
                    pcVar14[uVar32 - uVar25] = cVar26;
                    iVar29 = iVar29 + 1;
                    uVar32 = uVar28;
                  } while (cVar26 != '\n');
                    /* try { // try from 00384d5c to 00484d83 has its CatchHandler @ 00384c98 */
                  pcVar14[iVar29] = '\0';
                  *(ulong *)(puVar34 + 0x5c) = uVar28;
                }
              }
              sVar13 = strlen(pcVar14);
              if ((pcVar14[(long)(int)sVar13 + -1] != '\r') &&
                 (pcVar14[(long)(int)sVar13 + -1] != '\n')) {
                if (*(long *)(puVar34 + 0x58) == 0) {
                  if (*(FILE **)(puVar34 + 0x1a) != (FILE *)0x0) {
                    uVar31 = feof(*(FILE **)(puVar34 + 0x1a));
                    goto LAB_00384eb8;
                  }
                  if (*(long *)(puVar34 + 0x1c) != 0) {
                    uVar31 = gzeof();
                    goto LAB_00384eb8;
                  }
                }
                else {
                  uVar31 = (uint)(*(ulong *)(puVar34 + 0x5a) <= *(ulong *)(puVar34 + 0x5c));
LAB_00384eb8:
                  if (uVar31 != 0) goto LAB_00384d84;
                }
                sprintf(acStack_2450,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                        (ulong)(uint)puVar34[0x25],"Too long string or a last string w/o newline");
                cvError(0xffffff2c,&DAT_00472ad0,acStack_2450,
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3d9)
                ;
              }
LAB_00384d84:
                    /* try { // try from 00384d88 to 00484da7 has its CatchHandler @ 003859b4 */
              puVar34[0x25] = puVar34[0x25] + 1;
              uVar31 = (uint)*pcVar14;
            }
            else {
              if (uVar31 == 9) {
                pcVar22 = "Tabs are prohibited in YAML!";
              }
              else {
                pcVar22 = "Invalid character";
              }
                    /* try { // try from 00384c50 to 00484c53 has its CatchHandler @ 00384520 */
                    /* catch() { ... } // from try @ 003846d0 with catch @ 00384c54
                       catch() { ... } // from try @ 003847ac with catch @ 00384c54
                       catch() { ... } // from try @ 003848a0 with catch @ 00384c54
                       catch() { ... } // from try @ 003849d4 with catch @ 00384c54
                       catch() { ... } // from try @ 00384b78 with catch @ 00384c54
                       catch() { ... } // from try @ 00384be8 with catch @ 00384c54 */
                    /* catch() { ... } // from try @ 00384738 with catch @ 00384c5c */
              sprintf(acStack_2050,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                      (ulong)(uint)puVar34[0x25],pcVar22);
                    /* catch() { ... } // from try @ 00384be0 with catch @ 00384c80 */
              cvError(0xffffff2c,&DAT_00472ad0,acStack_2050,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3df);
              uVar31 = (uint)*pcVar14;
            }
            goto LAB_00384c10;
          }
          if ((long)pcVar14 - *(long *)(puVar34 + 0x20) < 0) {
            sprintf(acStack_2850,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],"Incorrect indentation");
            cvError(0xffffff2c,&DAT_00472ad0,acStack_2850,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3c5);
            uVar31 = (uint)*pcVar14;
          }
LAB_00384dd0:
          if (uVar31 == 0x25) {
            iVar11 = memcmp(pcVar14,"%YAML:",6);
            if ((iVar11 == 0) && (iVar11 = memcmp(pcVar14,"%YAML:1.",8), iVar11 != 0)) {
              sprintf(acStack_1c50,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                      (ulong)(uint)puVar34[0x25],"Unsupported YAML version (it must be 1.x)");
              cvError(0xffffff2c,&DAT_00472b80,acStack_1c50,
                      "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x550);
            }
            *pcVar14 = '\0';
            uVar31 = 0;
            goto LAB_00384c10;
          }
          if (uVar31 != 0x2d) {
            uVar37 = uVar31 & 0xff;
            if (9 < ((uVar31 & 0xff) - 0x30 & 0xff)) goto LAB_00385188;
            goto LAB_00384df4;
          }
          iVar11 = memcmp(pcVar14,&DAT_004720e8,3);
          if (iVar11 == 0) {
            uVar31 = (uint)pcVar14[3];
            pcVar22 = pcVar14 + 3;
            goto LAB_00384e10;
          }
          pcVar22 = pcVar14;
          if (!bVar9) goto LAB_00384c10;
        }
LAB_00384e10:
                    /* try { // try from 00384e10 to 00484e93 has its CatchHandler @ 003859ec */
        while (uVar31 == 0x20) {
          uVar31 = (uint)pcVar22[1];
          pcVar22 = pcVar22 + 1;
        }
        if (uVar31 == 0x23) {
          if (0x7fffffff < (long)pcVar22 - *(long *)(puVar34 + 0x20)) goto LAB_00385018;
          uVar31 = 0;
                    /* try { // try from 00384ff8 to 00485037 has its CatchHandler @ 00384c98 */
          *pcVar22 = '\0';
        }
        else if (0x1f < (uVar31 & 0xff)) {
          if ((long)pcVar22 - *(long *)(puVar34 + 0x20) < 0) {
            sprintf(acStack_1050,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],"Incorrect indentation");
                    /* try { // try from 00385398 to 0048539b has its CatchHandler @ 003859d0 */
            cvError(0xffffff2c,&DAT_00472ad0,acStack_1050,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3c5);
          }
LAB_00385018:
          iVar11 = memcmp(pcVar22,&DAT_00471a90,3);
          if (iVar11 != 0) goto LAB_003852f0;
          goto LAB_00385030;
        }
        if (((uVar31 != 0) && (uVar31 != 10)) && (uVar31 != 0xd)) {
          if (uVar31 == 9) {
                    /* try { // try from 0038504c to 0048504f has its CatchHandler @ 003859f4 */
            pcVar14 = "Tabs are prohibited in YAML!";
          }
          else {
            pcVar14 = "Invalid character";
          }
          sprintf((char *)&local_850,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                  (ulong)(uint)puVar34[0x25],pcVar14);
          cvError(0xffffff2c,&DAT_00472ad0,&local_850,
                  "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3df);
          uVar31 = (uint)*pcVar22;
          goto LAB_00384e10;
        }
        lVar38 = *(long *)(puVar34 + 0x58);
        pcVar22 = *(char **)(puVar34 + 0x20);
        iVar11 = (int)*(undefined8 *)(puVar34 + 0x22) - (int)pcVar22;
        if (lVar38 == 0) {
          if (*(FILE **)(puVar34 + 0x1a) == (FILE *)0x0) {
            lVar38 = *(long *)(puVar34 + 0x1c);
            if (lVar38 == 0) {
              local_3060 = lVar38;
              local_3058 = lVar38;
                    /* try { // try from 00385830 to 00485833 has its CatchHandler @ 003859d0 */
              pcVar14 = (char *)cv::String::allocate((String *)&local_3060,0x19);
              cVar26 = s_The_storage_is_not_opened_00470830[0x18];
              uVar20 = s_The_storage_is_not_opened_00470830._8_8_;
              uVar15 = s_The_storage_is_not_opened_00470830._0_8_;
                    /* try { // try from 0038583c to 0048583f has its CatchHandler @ 003859f4 */
                    /* try { // try from 00385848 to 0048584b has its CatchHandler @ 00384c98 */
                    /* try { // try from 00385854 to 00485857 has its CatchHandler @ 003859b4 */
                    /* try { // try from 00385860 to 00485863 has its CatchHandler @ 003859d0 */
              *(undefined8 *)(pcVar14 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
              pcVar14[0x18] = cVar26;
              *(undefined8 *)pcVar14 = uVar15;
              *(undefined8 *)(pcVar14 + 8) = uVar20;
              cv::error(-2,(String *)&local_3060,"char* icvGets(CvFileStorage*, char*, int)",
                        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x11d)
              ;
              cv::String::deallocate((String *)&local_3060);
              goto LAB_00385280;
            }
            pcVar22 = (char *)gzgets(lVar38,pcVar22);
          }
          else {
            pcVar22 = fgets(pcVar22,iVar11,*(FILE **)(puVar34 + 0x1a));
          }
          if (pcVar22 == (char *)0x0) goto LAB_00385280;
LAB_00384fac:
          sVar13 = strlen(pcVar22);
          if ((pcVar22[(long)(int)sVar13 + -1] != '\r') && (pcVar22[(long)(int)sVar13 + -1] != '\n')
             ) {
            if (*(long *)(puVar34 + 0x58) == 0) {
              if (*(FILE **)(puVar34 + 0x1a) != (FILE *)0x0) {
                    /* try { // try from 0038526c to 00485283 has its CatchHandler @ 00384c98 */
                uVar31 = feof(*(FILE **)(puVar34 + 0x1a));
                goto LAB_0038506c;
              }
              if (*(long *)(puVar34 + 0x1c) != 0) {
                uVar31 = gzeof();
                goto LAB_0038506c;
              }
            }
            else {
              uVar31 = (uint)(*(ulong *)(puVar34 + 0x5a) <= *(ulong *)(puVar34 + 0x5c));
LAB_0038506c:
              if (uVar31 != 0) goto LAB_00384fcc;
            }
            sprintf(acStack_c50,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],"Too long string or a last string w/o newline");
            cvError(0xffffff2c,&DAT_00472ad0,acStack_c50,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x3d9);
          }
LAB_00384fcc:
          puVar34[0x25] = puVar34[0x25] + 1;
          uVar31 = (uint)*pcVar22;
          goto LAB_00384e10;
        }
        uVar25 = *(ulong *)(puVar34 + 0x5c);
        uVar30 = *(ulong *)(puVar34 + 0x5a);
        uVar32 = uVar25;
        if ((uVar25 < uVar30) && (iVar11 = iVar11 + -1, 0 < iVar11)) {
          cVar26 = *(char *)(lVar38 + uVar25);
          uVar32 = uVar25 + 1;
          if (cVar26 != '\0') {
            *pcVar22 = cVar26;
            if (cVar26 == '\n') {
              pcVar22[1] = '\0';
              *(ulong *)(puVar34 + 0x5c) = uVar32;
            }
            else {
              iVar29 = 1;
              do {
                uVar28 = uVar32;
                if ((uVar32 == uVar30) || (iVar11 <= iVar29)) break;
                cVar26 = *(char *)(lVar38 + uVar32);
                uVar28 = uVar32 + 1;
                    /* try { // try from 00384f84 to 00484f87 has its CatchHandler @ 003859b4 */
                if (cVar26 == '\0') break;
                pcVar22[uVar32 - uVar25] = cVar26;
                iVar29 = iVar29 + 1;
                uVar32 = uVar28;
              } while (cVar26 != '\n');
              pcVar22[iVar29] = '\0';
              *(ulong *)(puVar34 + 0x5c) = uVar28;
            }
            goto LAB_00384fac;
          }
        }
        *pcVar22 = '\0';
        *(ulong *)(puVar34 + 0x5c) = uVar32;
LAB_00385280:
        pcVar22 = *(char **)(puVar34 + 0x20);
        builtin_strncpy(pcVar22,"...",4);
                    /* try { // try from 003852ac to 004852f7 has its CatchHandler @ 003859fc */
        puVar34[0x26] = 1;
        iVar11 = memcmp(pcVar22,&DAT_00471a90,3);
        if (iVar11 != 0) {
LAB_003852f0:
          puVar19 = (uint *)cvSeqPush(*(undefined8 *)(puVar34 + 0xc),0);
          uVar15 = FUN_00380620(puVar34,pcVar22,puVar19,0,0);
          if ((*puVar19 & 7) < 5) {
            sprintf((char *)&local_450,"%s(%d): %s",*(undefined8 *)(puVar34 + 0x18),
                    (ulong)(uint)puVar34[0x25],&DAT_00472150);
            cvError(0xffffff2c,&DAT_00472b80,&local_450,
                    "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x571);
          }
          pcVar22 = (char *)FUN_0037220c(puVar34,uVar15,0);
          if (pcVar22 == (char *)0x0) goto LAB_003852b8;
LAB_00385030:
          if (puVar34[0x26] != 0) goto LAB_003852b8;
          pcVar14 = pcVar22 + 3;
                    /* try { // try from 00385040 to 00485043 has its CatchHandler @ 003859b4 */
          uVar31 = (uint)pcVar22[3];
          bVar9 = false;
          goto LAB_00384c10;
        }
      }
LAB_003852b8:
      cv::cvFree_(*(void **)(local_30a0 + 0x20));
      *(undefined8 *)(local_30a0 + 0x20) = 0;
      *(undefined8 *)(local_30a0 + 0x22) = 0;
      *(undefined8 *)(local_30a0 + 0x1e) = 0;
    }
    else {
      puVar16 = operator_new(0x50);
      *puVar16 = 0;
      puVar16[2] = 0;
      puVar16[3] = 0;
      puVar16[4] = 0;
      puVar16[5] = 0;
                    /* try { // try from 00384508 to 0048450b has its CatchHandler @ 00383ffc */
      puVar16[6] = 0;
                    /* catch() { ... } // from try @ 00384114 with catch @ 0038450c
                       catch() { ... } // from try @ 003843dc with catch @ 0038450c
                       catch() { ... } // from try @ 00384474 with catch @ 0038450c
                       catch() { ... } // from try @ 003844b8 with catch @ 0038450c */
      puVar16[7] = 0;
      puVar16[8] = 0;
                    /* catch() { ... } // from try @ 00384080 with catch @ 00384514
                       catch() { ... } // from try @ 00384188 with catch @ 00384514
                       catch() { ... } // from try @ 00384250 with catch @ 00384514
                       catch() { ... } // from try @ 00384448 with catch @ 00384514 */
      puVar16[9] = 0;
      puVar16[1] = 8;
      pvVar17 = operator_new(0x40);
                    /* catch() { ... } // from try @ 00384598 with catch @ 00384520
                       catch() { ... } // from try @ 003847d8 with catch @ 00384520
                       catch() { ... } // from try @ 003849f4 with catch @ 00384520
                       catch() { ... } // from try @ 00384bf8 with catch @ 00384520
                       catch() { ... } // from try @ 00384c50 with catch @ 00384520 */
      *puVar16 = pvVar17;
      lVar38 = (puVar16[1] - 1 >> 1) * 8;
      pvVar18 = operator_new(0x200);
      *(void **)((long)pvVar17 + lVar38) = pvVar18;
      puVar16[5] = (void *)((long)pvVar17 + lVar38);
      lVar24 = *(long *)((long)pvVar17 + lVar38);
      puVar16[3] = lVar24;
      puVar16[4] = lVar24 + 0x200;
      puVar16[9] = (void *)((long)pvVar17 + lVar38);
      lVar38 = *(long *)((long)pvVar17 + lVar38);
      puVar16[7] = lVar38;
      puVar16[8] = lVar38 + 0x200;
      puVar16[6] = lVar38;
      puVar16[2] = lVar24;
      *(undefined8 **)(local_30a0 + 0x5e) = puVar16;
                    /* try { // try from 00384598 to 0048459b has its CatchHandler @ 00384520 */
      if (((param_3 & 0x38) == 0) && (lVar38 = -4, param_1 != (char *)0x0)) {
LAB_003845a0:
        puVar34 = local_30a0;
        pcVar14 = param_1 + lVar38 + sVar13;
        uVar31 = 0x10;
        if (param_1 <= pcVar14) {
          uVar37 = 8;
          iVar11 = memcmp(pcVar14,&DAT_00471eb8,4);
          uVar31 = uVar37;
          if ((iVar11 != 0) && (iVar11 = memcmp(pcVar14,&DAT_00471ec0,4), iVar11 != 0)) {
                    /* try { // try from 00385b10 to 00485b2f has its CatchHandler @ 0038602c */
            iVar11 = memcmp(pcVar14,&DAT_00471ec8,4);
            uVar31 = 0x10;
            if (iVar11 == 0) {
              uVar31 = uVar37;
            }
          }
        }
      }
      else {
        puVar34 = local_30a0;
        uVar31 = 8;
        if ((param_3 & 0x38) != 0) {
LAB_00384cbc:
          puVar34 = local_30a0;
          uVar31 = param_3 & 0x38;
        }
      }
      puVar34[1] = uVar31;
      if (uVar31 == 8) {
        lVar38 = 0x6400;
        uVar32 = 0x6800;
        if (bVar9) goto LAB_00384840;
        uVar15 = 0x28;
      }
      else {
        lVar38 = 0x4400;
        uVar32 = 0x4800;
        if (bVar9) {
LAB_00384840:
          fseek(*(FILE **)(puVar34 + 0x1a),0,2);
          uVar15 = 4;
          puVar34 = local_30a0;
          if (local_30a0[1] == 8) {
            uVar15 = 0x28;
          }
        }
        else {
          uVar15 = 4;
        }
      }
      uVar15 = cvCreateSeq(0,0x60,uVar15,*(undefined8 *)(puVar34 + 4));
      puVar33 = local_30a0;
      *(undefined8 *)(puVar34 + 0xe) = uVar15;
      local_30a0[3] = 1;
      local_30a0[0x10] = 0;
      local_30a0[0x11] = 0x20;
      uVar15 = cv::cvAlloc(uVar32);
      puVar34 = local_30a0;
      *(undefined8 *)(puVar33 + 0x20) = uVar15;
      *(undefined8 *)(puVar33 + 0x1e) = uVar15;
      *(long *)(local_30a0 + 0x22) = *(long *)(local_30a0 + 0x20) + lVar38;
      if (local_30a0[1] == 8) {
        if (*(FILE **)(local_30a0 + 0x1a) == (FILE *)0x0) {
          uVar15 = cvCreateChildMemStorage(*(undefined8 *)(local_30a0 + 4));
          *(undefined8 *)(puVar34 + 8) = uVar15;
LAB_00384974:
          if (param_4 == (char *)0x0) {
            FUN_0037127c(local_30a0,"<?xml version=\"1.0\"?>\n");
          }
          else {
            iVar11 = strcmp(param_4,"UTF-16");
            if (((iVar11 == 0) || (iVar11 = strcmp(param_4,"utf-16"), iVar11 == 0)) ||
               (iVar11 = strcmp(param_4,"Utf-16"), iVar11 == 0)) {
              cvReleaseFileStorage(&local_30a0);
                    /* catch() { ... } // from try @ 00384d88 with catch @ 003859b4
                       catch() { ... } // from try @ 00384f84 with catch @ 003859b4
                       catch() { ... } // from try @ 00385040 with catch @ 003859b4
                       catch() { ... } // from try @ 003854ac with catch @ 003859b4
                       catch() { ... } // from try @ 00385590 with catch @ 003859b4
                       catch() { ... } // from try @ 00385854 with catch @ 003859b4 */
              local_450 = (char *)0x0;
                    /* catch() { ... } // from try @ 003855f8 with catch @ 003859bc */
              local_448 = (char *)0x0;
              pcVar14 = (char *)cv::String::allocate((String *)&local_450,0x39);
              cVar26 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8[0x38];
              uVar5 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._40_8_;
              uVar4 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._32_8_;
              uVar3 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._24_8_;
              uVar2 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._16_8_;
              uVar20 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._8_8_;
              uVar15 = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._0_8_;
                    /* catch() { ... } // from try @ 00385398 with catch @ 003859d0
                       catch() { ... } // from try @ 00385668 with catch @ 003859d0
                       catch() { ... } // from try @ 00385830 with catch @ 003859d0
                       catch() { ... } // from try @ 00385860 with catch @ 003859d0
                       catch() { ... } // from try @ 003858b4 with catch @ 003859d0 */
                    /* catch() { ... } // from try @ 00384d54 with catch @ 003859d8 */
                    /* try { // try from 003859e8 to 004859eb has its CatchHandler @ 00384c98 */
                    /* catch() { ... } // from try @ 00384e10 with catch @ 003859ec
                       catch() { ... } // from try @ 00385560 with catch @ 003859ec
                       catch() { ... } // from try @ 003855bc with catch @ 003859ec
                       catch() { ... } // from try @ 00385600 with catch @ 003859ec
                       catch() { ... } // from try @ 00385894 with catch @ 003859ec
                       catch() { ... } // from try @ 003858cc with catch @ 003859ec */
                    /* catch() { ... } // from try @ 00384db8 with catch @ 003859f4
                       catch() { ... } // from try @ 00384f10 with catch @ 003859f4
                       catch() { ... } // from try @ 0038504c with catch @ 003859f4
                       catch() { ... } // from try @ 00385438 with catch @ 003859f4
                       catch() { ... } // from try @ 003855a0 with catch @ 003859f4
                       catch() { ... } // from try @ 0038583c with catch @ 003859f4 */
                    /* catch() { ... } // from try @ 003852ac with catch @ 003859fc */
                    /* catch() { ... } // from try @ 00385a5c with catch @ 00385a00
                       catch() { ... } // from try @ 00385ab8 with catch @ 00385a00
                       catch() { ... } // from try @ 00385c0c with catch @ 00385a00
                       catch() { ... } // from try @ 00385f84 with catch @ 00385a00
                       catch() { ... } // from try @ 00386004 with catch @ 00385a00
                       catch() { ... } // from try @ 00386020 with catch @ 00385a00
                       catch() { ... } // from try @ 00386050 with catch @ 00385a00
                       catch() { ... } // from try @ 0038608c with catch @ 00385a00 */
              *(undefined8 *)(pcVar14 + 0x30) = s_UTF_16_XML_encoding_is_not_suppo_00471ee8._48_8_;
              pcVar14[0x38] = cVar26;
              *(undefined8 *)pcVar14 = uVar15;
              *(undefined8 *)(pcVar14 + 8) = uVar20;
              *(undefined8 *)(pcVar14 + 0x10) = uVar2;
              *(undefined8 *)(pcVar14 + 0x18) = uVar3;
              *(undefined8 *)(pcVar14 + 0x20) = uVar4;
              *(undefined8 *)(pcVar14 + 0x28) = uVar5;
              cv::error(-5,(String *)&local_450,
                        "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)"
                        ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xad5
                       );
              cv::String::deallocate((String *)&local_450);
            }
            sVar13 = strlen(param_4);
            if (999 < sVar13) {
                    /* try { // try from 003849d4 to 004849e3 has its CatchHandler @ 00384c54 */
              local_450 = (char *)0x0;
              local_448 = (char *)0x0;
              pcVar14 = (char *)cv::String::allocate((String *)&local_450,0x17);
              cVar26 = s_strlen_encoding__<_1000_00471f28[0x16];
              uVar8 = s_strlen_encoding__<_1000_00471f28._20_2_;
              uVar20 = s_strlen_encoding__<_1000_00471f28._8_8_;
              uVar15 = s_strlen_encoding__<_1000_00471f28._0_8_;
                    /* try { // try from 003849f4 to 004849f7 has its CatchHandler @ 00384520 */
              *(undefined4 *)(pcVar14 + 0x10) = s_strlen_encoding__<_1000_00471f28._16_4_;
              *(undefined2 *)(pcVar14 + 0x14) = uVar8;
              pcVar14[0x16] = cVar26;
              *(undefined8 *)pcVar14 = uVar15;
              *(undefined8 *)(pcVar14 + 8) = uVar20;
              cv::error(-0xd7,(String *)&local_450,
                        "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)"
                        ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xad8
                       );
              cv::String::deallocate((String *)&local_450);
            }
            sprintf((char *)&local_450,"<?xml version=\"1.0\" encoding=\"%s\"?>\n",param_4);
            FUN_0037127c(local_30a0,(String *)&local_450);
          }
          FUN_0037127c(local_30a0,"<opencv_storage>\n");
        }
        else {
          lVar38 = ftell(*(FILE **)(local_30a0 + 0x1a));
          puVar34 = local_30a0;
          uVar15 = cvCreateChildMemStorage(*(undefined8 *)(local_30a0 + 4));
          *(undefined8 *)(puVar34 + 8) = uVar15;
          if (bVar9 <= (lVar38 == 0)) goto LAB_00384974;
          iVar11 = (int)lVar38;
          if (0x400 < iVar11) {
            iVar11 = 0x400;
          }
          iVar29 = -1;
          local_450 = _LAB_00472190;
          local_448 = _LAB_00472198;
          local_440 = _LAB_004721a0;
          iVar1 = iVar11 + -1;
          fseek(*(FILE **)(local_30a0 + 0x1a),(long)-iVar11,2);
          pcVar14 = (char *)cv::cvAlloc((long)(iVar11 + 2));
          lVar21 = ftell(*(FILE **)(local_30a0 + 0x1a));
          lVar38 = *(long *)(local_30a0 + 0x58);
          lVar24 = local_850;
          while (local_850 = lVar24, lVar38 == 0) {
            if (*(FILE **)(local_30a0 + 0x1a) == (FILE *)0x0) {
              local_850 = *(long *)(local_30a0 + 0x1c);
              if (local_850 == 0) {
                local_848 = local_850;
                pcVar22 = (char *)cv::String::allocate((String *)&local_850,0x19);
                cVar26 = s_The_storage_is_not_opened_00470830[0x18];
                uVar20 = s_The_storage_is_not_opened_00470830._8_8_;
                uVar15 = s_The_storage_is_not_opened_00470830._0_8_;
                    /* try { // try from 00385f84 to 00485f87 has its CatchHandler @ 00385a00 */
                *(undefined8 *)(pcVar22 + 0x10) = s_The_storage_is_not_opened_00470830._16_8_;
                pcVar22[0x18] = cVar26;
                *(undefined8 *)pcVar22 = uVar15;
                *(undefined8 *)(pcVar22 + 8) = uVar20;
                cv::error(-2,(String *)&local_850,"char* icvGets(CvFileStorage*, char*, int)",
                          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",
                          0x11d);
                cv::String::deallocate((String *)&local_850);
                goto LAB_00385d98;
              }
              pcVar22 = (char *)gzgets(local_850,pcVar14,iVar11);
              local_850 = lVar24;
            }
            else {
              pcVar22 = fgets(pcVar14,iVar11,*(FILE **)(local_30a0 + 0x1a));
            }
            pcVar35 = pcVar22;
            if (pcVar22 == (char *)0x0) goto LAB_00385d98;
LAB_00385d54:
            while (pcVar22 = strstr(pcVar22,(char *)&local_450), pcVar22 != (char *)0x0) {
              iVar29 = (int)lVar21 + ((int)pcVar22 - (int)pcVar35);
              pcVar22 = pcVar22 + 0x11;
            }
            lVar21 = ftell(*(FILE **)(local_30a0 + 0x1a));
            lVar24 = local_850;
            lVar38 = *(long *)(local_30a0 + 0x58);
          }
          uVar25 = *(ulong *)(local_30a0 + 0x5c);
          uVar30 = *(ulong *)(local_30a0 + 0x5a);
          uVar32 = uVar25;
          if ((uVar25 < uVar30) && (0 < iVar1)) {
            cVar26 = *(char *)(lVar38 + uVar25);
            uVar32 = uVar25 + 1;
            if (cVar26 != '\0') {
              *pcVar14 = cVar26;
              pcVar22 = pcVar14;
              pcVar35 = pcVar14;
              if (cVar26 == '\n') {
                lVar38 = 1;
              }
              else {
                iVar27 = 1;
                uVar28 = uVar32;
                do {
                  uVar32 = uVar28;
                  if (uVar28 == uVar30) {
LAB_00385d30:
                    pcVar14[iVar27] = '\0';
                    *(ulong *)(local_30a0 + 0x5c) = uVar32;
                    if (iVar27 != 0) goto LAB_00385d54;
                    goto LAB_00385d98;
                  }
                  if (iVar27 == iVar1) {
                    pcVar14[iVar1] = '\0';
                    *(ulong *)(local_30a0 + 0x5c) = uVar28;
                    goto LAB_00385d54;
                  }
                  cVar26 = *(char *)(lVar38 + uVar28);
                  uVar32 = uVar28 + 1;
                  if (cVar26 == '\0') goto LAB_00385d30;
                  pcVar14[uVar28 - uVar25] = cVar26;
                  iVar27 = iVar27 + 1;
                  uVar28 = uVar32;
                } while (cVar26 != '\n');
                lVar38 = (long)iVar27;
              }
              pcVar14[lVar38] = '\0';
              *(ulong *)(local_30a0 + 0x5c) = uVar32;
              goto LAB_00385d54;
            }
          }
          *pcVar14 = '\0';
          *(ulong *)(local_30a0 + 0x5c) = uVar32;
LAB_00385d98:
          cv::cvFree_(pcVar14);
          if (iVar29 < 0) {
            cvReleaseFileStorage(&local_30a0);
            local_850 = 0;
            local_848 = 0;
            pcVar14 = (char *)cv::String::allocate((String *)&local_850,0x35);
            cVar26 = s_Could_not_find_<_opencv_storage>_00471f98[0x34];
            uVar5 = s_Could_not_find_<_opencv_storage>_00471f98._40_8_;
            uVar4 = s_Could_not_find_<_opencv_storage>_00471f98._32_8_;
            uVar3 = s_Could_not_find_<_opencv_storage>_00471f98._24_8_;
            uVar2 = s_Could_not_find_<_opencv_storage>_00471f98._16_8_;
            uVar20 = s_Could_not_find_<_opencv_storage>_00471f98._8_8_;
            uVar15 = s_Could_not_find_<_opencv_storage>_00471f98._0_8_;
            *(undefined4 *)(pcVar14 + 0x30) = s_Could_not_find_<_opencv_storage>_00471f98._48_4_;
            pcVar14[0x34] = cVar26;
            *(undefined8 *)pcVar14 = uVar15;
            *(undefined8 *)(pcVar14 + 8) = uVar20;
            *(undefined8 *)(pcVar14 + 0x10) = uVar2;
            *(undefined8 *)(pcVar14 + 0x18) = uVar3;
            *(undefined8 *)(pcVar14 + 0x20) = uVar4;
            *(undefined8 *)(pcVar14 + 0x28) = uVar5;
            cv::error(-2,(String *)&local_850,
                      "CvFileStorage* cvOpenFileStorage(const char*, CvMemStorage*, int, const char*)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0xafe);
            cv::String::deallocate((String *)&local_850);
                    /* try { // try from 00385f3c to 00485f3f has its CatchHandler @ 0038602c */
          }
          puVar34 = local_30a0;
          if (*(FILE **)(local_30a0 + 0x1a) == (FILE *)0x0) {
            if (*(long *)(local_30a0 + 0x1c) != 0) {
              gzclose();
            }
          }
          else {
            fclose(*(FILE **)(local_30a0 + 0x1a));
          }
          puVar33 = local_30a0;
          pcVar14 = *(char **)(local_30a0 + 0x18);
          *(undefined8 *)(puVar34 + 0x1a) = 0;
          *(undefined8 *)(puVar34 + 0x1c) = 0;
          *(undefined8 *)(puVar34 + 0x58) = 0;
                    /* try { // try from 00385dd4 to 00485dd7 has its CatchHandler @ 00386054 */
          *(undefined8 *)(puVar34 + 0x5c) = 0;
          *(undefined1 *)(puVar34 + 0x60) = 0;
          pFVar23 = fopen(pcVar14,"r+t");
          *(FILE **)(puVar33 + 0x1a) = pFVar23;
          fseek(*(FILE **)(local_30a0 + 0x1a),(long)iVar29,0);
          FUN_0037127c(local_30a0," <!-- resumed -->");
          fseek(*(FILE **)(local_30a0 + 0x1a),0,2);
          FUN_0037127c(local_30a0,"\n");
        }
        *(code **)(local_30a0 + 0x4a) = FUN_0037298c;
        *(code **)(local_30a0 + 0x4c) = FUN_00372124;
        *(code **)(local_30a0 + 0x4e) = FUN_00372d90;
        *(code **)(local_30a0 + 0x50) = FUN_003730f4;
        *(code **)(local_30a0 + 0x52) = FUN_003738c4;
        *(code **)(local_30a0 + 0x54) = FUN_00373f78;
        *(code **)(local_30a0 + 0x56) = FUN_00373784;
      }
      else {
        if (bVar9) {
          FUN_0037127c(local_30a0,&DAT_00472000);
        }
        else {
          FUN_0037127c(local_30a0,"%YAML:1.0\n");
        }
        *(code **)(local_30a0 + 0x4a) = FUN_00375c8c;
        *(code **)(local_30a0 + 0x4c) = FUN_00372ba4;
        *(code **)(local_30a0 + 0x4e) = FUN_00375c20;
        *(code **)(local_30a0 + 0x50) = FUN_00375acc;
        *(code **)(local_30a0 + 0x52) = FUN_003756dc;
        *(code **)(local_30a0 + 0x54) = FUN_0037457c;
        *(code **)(local_30a0 + 0x56) = FUN_0037352c;
      }
    }
                    /* try { // try from 003846d0 to 004846f3 has its CatchHandler @ 00384c54 */
    *(undefined1 *)(local_30a0 + 0x60) = 1;
  }
  iVar11 = cvGetErrStatus();
  puVar34 = local_30a0;
  if (iVar11 < 0) {
LAB_00384924:
    cvReleaseFileStorage(&local_30a0);
  }
  else {
    if (*(FILE **)(local_30a0 + 0x1a) == (FILE *)0x0) {
      if (*(long *)(local_30a0 + 0x1c) == 0) {
        if ((*(long *)(local_30a0 + 0x5e) == 0) && (*(long *)(local_30a0 + 0x58) == 0))
        goto LAB_00384924;
                    /* try { // try from 00385b34 to 00485b6f has its CatchHandler @ 00386054 */
        if (local_30a0[2] != 0) {
          return local_30a0;
        }
      }
      else {
        if (local_30a0[2] != 0) {
          return local_30a0;
        }
        gzclose();
      }
    }
    else {
      if (local_30a0[2] != 0) {
        return local_30a0;
      }
                    /* try { // try from 003848f0 to 00484943 has its CatchHandler @ 00384c10 */
      fclose(*(FILE **)(local_30a0 + 0x1a));
    }
    *(undefined8 *)(puVar34 + 0x1a) = 0;
    *(undefined8 *)(puVar34 + 0x1c) = 0;
    *(undefined8 *)(puVar34 + 0x58) = 0;
    *(undefined8 *)(puVar34 + 0x5c) = 0;
    *(undefined1 *)(puVar34 + 0x60) = 0;
    *(undefined1 *)(local_30a0 + 0x60) = 1;
  }
  return local_30a0;
}


==================================================================

### FUNC 00385fe0 (444 bytes) name=open

/* cv::FileStorage::open(cv::String const&, int, cv::String const&) */

undefined8 __thiscall
cv::FileStorage::open(FileStorage *this,String *param_1,int param_2,String *param_3)

{
  long *plVar1;
  bool bVar2;
  char cVar3;
  long *plVar4;
  undefined1 *puVar5;
  long lVar6;
  undefined8 *puVar7;
  undefined1 *puVar8;
  
                    /* try { // try from 00385ff0 to 00485ff3 has its CatchHandler @ 0038602c */
                    /* try { // try from 00386004 to 00486007 has its CatchHandler @ 00385a00 */
  if (*(code **)(*(long *)this + 0x20) == release) {
    plVar4 = *(long **)(this + 8);
                    /* try { // try from 00386010 to 00486013 has its CatchHandler @ 00386054 */
    if (plVar4 != (long *)0x0) {
      plVar1 = plVar4 + 1;
      do {
        lVar6 = *plVar1;
                    /* try { // try from 00386020 to 00486023 has its CatchHandler @ 00385a00 */
        cVar3 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar2) {
          *(int *)plVar1 = (int)lVar6 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
                    /* catch() { ... } // from try @ 00385b10 with catch @ 0038602c
                       catch() { ... } // from try @ 00385be0 with catch @ 0038602c
                       catch() { ... } // from try @ 00385f3c with catch @ 0038602c
                       catch() { ... } // from try @ 00385ff0 with catch @ 0038602c */
      if ((int)lVar6 == 1) {
        (**(code **)(*plVar4 + 0x10))();
      }
    }
    *(undefined8 *)(this + 8) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x30) = *(undefined8 *)(this + 0x28);
    *(undefined4 *)(this + 0x40) = 0;
    puVar5 = *(undefined1 **)param_1;
  }
  else {
    (**(code **)(*(long *)this + 0x20))();
    puVar5 = *(undefined1 **)param_1;
  }
  if (puVar5 == (undefined1 *)0x0) {
                    /* try { // try from 00386154 to 00486157 has its CatchHandler @ 003863ec */
    puVar5 = &DAT_00472008;
  }
                    /* try { // try from 00386050 to 00486053 has its CatchHandler @ 00385a00 */
  puVar8 = (undefined1 *)0x0;
                    /* catch() { ... } // from try @ 00385b34 with catch @ 00386054
                       catch() { ... } // from try @ 00385dd4 with catch @ 00386054
                       catch() { ... } // from try @ 00386010 with catch @ 00386054 */
  if ((*(long *)(param_3 + 8) != 0) &&
     (puVar8 = *(undefined1 **)param_3, puVar8 == (undefined1 *)0x0)) {
    puVar8 = &DAT_00472008;
  }
  lVar6 = cvOpenFileStorage(puVar5,0,param_2,puVar8);
  if (lVar6 == 0) {
    puVar7 = (undefined8 *)0x0;
  }
  else {
    puVar7 = operator_new(0x20);
                    /* catch() { ... } // from try @ 00385aa8 with catch @ 0038607c */
    *(undefined4 *)(puVar7 + 1) = 1;
    puVar7[2] = lVar6;
                    /* try { // try from 0038608c to 0048608f has its CatchHandler @ 00385a00 */
                    /* catch() { ... } // from try @ 00385d3c with catch @ 00386090 */
    *puVar7 = &PTR_FUN_004f7690;
  }
  plVar4 = *(long **)(this + 8);
  *(long *)(this + 0x10) = lVar6;
  *(undefined8 **)(this + 8) = puVar7;
  if (plVar4 != (long *)0x0) {
    plVar1 = plVar4 + 1;
    do {
      lVar6 = *plVar1;
      cVar3 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar2) {
        *(int *)plVar1 = (int)lVar6 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if ((int)lVar6 == 1) {
      (**(code **)(*plVar4 + 0x10))();
    }
  }
                    /* catch() { ... } // from try @ 00386108 with catch @ 003860d0
                       catch() { ... } // from try @ 003862d4 with catch @ 003860d0
                       catch() { ... } // from try @ 003863b4 with catch @ 003860d0 */
  if (*(code **)(*(long *)this + 0x18) == isOpened) {
    if (*(long *)(this + 0x10) == 0) goto LAB_003860e8;
    cVar3 = *(char *)(*(long *)(this + 0x10) + 0x180);
  }
  else {
                    /* try { // try from 00386108 to 0048610b has its CatchHandler @ 003860d0 */
    cVar3 = (**(code **)(*(long *)this + 0x18))(this);
  }
  if (cVar3 != '\0') {
    *(undefined4 *)(this + 0x40) = 6;
                    /* try { // try from 00386124 to 00486127 has its CatchHandler @ 00386390 */
    return 1;
  }
LAB_003860e8:
  *(undefined4 *)(this + 0x40) = 0;
  return 0;
}


==================================================================

### FUNC 0038619c (108 bytes) name=cvTypeOf

long cvTypeOf(long param_1)

{
  int iVar1;
  long lVar2;
  
                    /* try { // try from 003861a8 to 004861ab has its CatchHandler @ 003863b8 */
  if (param_1 != 0) {
                    /* try { // try from 003861b0 to 004861ef has its CatchHandler @ 003863ec */
    for (lVar2 = *(long *)PTR_first_00501d40; lVar2 != 0; lVar2 = *(long *)(lVar2 + 0x10)) {
      iVar1 = (**(code **)(lVar2 + 0x20))(param_1);
      if (iVar1 != 0) {
        return lVar2;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00386208 (384 bytes) name=cvRelease

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvRelease(code *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined1 uVar3;
  char cVar4;
  undefined8 uVar5;
  code *pcVar6;
  char *pcVar7;
  undefined8 *puVar8;
  code *pcVar9;
  code *local_10;
  code *local_8;
  
  if (param_1 == (code *)0x0) {
    local_10 = param_1;
    local_8 = param_1;
    puVar8 = (undefined8 *)cv::String::allocate((String *)&local_10,0x13);
    uVar3 = DAT_004707e2;
    uVar2 = _DAT_004707d8;
    uVar1 = DAT_004707d0;
                    /* try { // try from 003862d4 to 004862f3 has its CatchHandler @ 003860d0 */
                    /* try { // try from 003862fc to 004862ff has its CatchHandler @ 00386390 */
    *(undefined2 *)(puVar8 + 2) = DAT_004707e0;
    *(undefined1 *)((long)puVar8 + 0x12) = uVar3;
    *puVar8 = uVar1;
    puVar8[1] = uVar2;
    cv::error(-0x1b,(String *)&local_10,"void cvRelease(void**)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1342);
    cv::String::deallocate((String *)&local_10);
  }
  if (*(long *)param_1 != 0) {
    pcVar6 = (code *)cvTypeOf();
    if (pcVar6 == (code *)0x0) {
      local_10 = pcVar6;
      local_8 = pcVar6;
      pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x13);
      cVar4 = s_Unknown_object_type_004721a8[0x12];
      uVar2 = s_Unknown_object_type_004721a8._8_8_;
      uVar1 = s_Unknown_object_type_004721a8._0_8_;
      *(undefined2 *)(pcVar7 + 0x10) = s_Unknown_object_type_004721a8._16_2_;
      pcVar7[0x12] = cVar4;
      *(undefined8 *)pcVar7 = uVar1;
      *(undefined8 *)(pcVar7 + 8) = uVar2;
      cv::error(-2,(String *)&local_10,"void cvRelease(void**)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1348);
      cv::String::deallocate((String *)&local_10);
    }
    pcVar9 = *(code **)(pcVar6 + 0x28);
    if (pcVar9 == (code *)0x0) {
      local_10 = pcVar9;
      local_8 = pcVar9;
                    /* try { // try from 00386260 to 00486263 has its CatchHandler @ 00386390 */
      pcVar7 = (char *)cv::String::allocate((String *)&local_10,0x20);
      uVar5 = s_release_function_pointer_is_NULL_004721c0._24_8_;
      uVar2 = s_release_function_pointer_is_NULL_004721c0._16_8_;
      uVar1 = s_release_function_pointer_is_NULL_004721c0._8_8_;
      *(undefined8 *)pcVar7 = s_release_function_pointer_is_NULL_004721c0._0_8_;
      *(undefined8 *)(pcVar7 + 8) = uVar1;
      *(undefined8 *)(pcVar7 + 0x10) = uVar2;
      *(undefined8 *)(pcVar7 + 0x18) = uVar5;
      cv::error(-2,(String *)&local_10,"void cvRelease(void**)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x134a);
      cv::String::deallocate((String *)&local_10);
      pcVar9 = *(code **)(pcVar6 + 0x28);
    }
    (*pcVar9)(param_1);
    *(long *)param_1 = 0;
  }
  return;
}


==================================================================

### FUNC 003863c4 (412 bytes) name=cvClone

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvClone(long param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  undefined2 uVar4;
  undefined4 uVar5;
  long lVar6;
  undefined8 *puVar7;
  char *pcVar8;
  code *pcVar9;
  code *local_10;
  code *local_8;
  
  if (param_1 == 0) {
    local_10 = (code *)param_1;
    local_8 = (code *)param_1;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x16);
    uVar4 = s_NULL_structure_pointer_004721e8._20_2_;
    uVar2 = s_NULL_structure_pointer_004721e8._8_8_;
    uVar1 = s_NULL_structure_pointer_004721e8._0_8_;
                    /* try { // try from 003864c4 to 004864c7 has its CatchHandler @ 003866d0 */
                    /* try { // try from 003864cc to 004864ff has its CatchHandler @ 00386704 */
    *(undefined4 *)(pcVar8 + 0x10) = s_NULL_structure_pointer_004721e8._16_4_;
    *(undefined2 *)(pcVar8 + 0x14) = uVar4;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,"void* cvClone(const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1358);
    cv::String::deallocate((String *)&local_10);
  }
  lVar6 = cvTypeOf(param_1);
  if (lVar6 == 0) {
    local_10 = (code *)lVar6;
    local_8 = (code *)lVar6;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x13);
    cVar3 = s_Unknown_object_type_004721a8[0x12];
    uVar2 = s_Unknown_object_type_004721a8._8_8_;
    uVar1 = s_Unknown_object_type_004721a8._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_Unknown_object_type_004721a8._16_2_;
    pcVar8[0x12] = cVar3;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    cv::error(-2,(String *)&local_10,"void* cvClone(const void*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x135c);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar9 = *(code **)(lVar6 + 0x40);
                    /* catch() { ... } // from try @ 00386154 with catch @ 003863ec
                       catch() { ... } // from try @ 003861b0 with catch @ 003863ec */
  if (pcVar9 != (code *)0x0) {
                    /* catch() { ... } // from try @ 0038642c with catch @ 003863f4
                       catch() { ... } // from try @ 003865e4 with catch @ 003863f4
                       catch() { ... } // from try @ 003866cc with catch @ 003863f4 */
    (*pcVar9)(param_1);
    return;
  }
  local_10 = pcVar9;
  local_8 = pcVar9;
  puVar7 = (undefined8 *)cv::String::allocate((String *)&local_10,0x1e);
  uVar4 = DAT_0047221c;
  uVar5 = DAT_00472218;
  uVar2 = _LAB_00472208;
  uVar1 = DAT_00472200;
                    /* try { // try from 0038642c to 0048642f has its CatchHandler @ 003863f4 */
                    /* try { // try from 00386448 to 0048644b has its CatchHandler @ 003866a8 */
  puVar7[2] = DAT_00472210;
  *(undefined4 *)(puVar7 + 3) = uVar5;
  *(undefined2 *)((long)puVar7 + 0x1c) = uVar4;
  *puVar7 = uVar1;
  puVar7[1] = uVar2;
  cv::error(-2,(String *)&local_10,"void* cvClone(const void*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x135e);
  cv::String::deallocate((String *)&local_10);
                    /* try { // try from 00386478 to 0048647b has its CatchHandler @ 00386704 */
  (**(code **)(lVar6 + 0x40))(param_1);
  return;
}


==================================================================

### FUNC 0038659c (380 bytes) name=cvRead

undefined8 cvRead(int *param_1,uint *param_2,undefined8 *param_3)

{
  undefined8 uVar1;
  undefined4 uVar2;
  undefined2 uVar3;
  char cVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  char *pcVar10;
  long lVar11;
  undefined8 uVar12;
  int iVar13;
  undefined8 local_10;
  undefined8 local_8;
  
  if (param_1 == (int *)0x0) {
    iVar13 = -0x1b;
                    /* catch() { ... } // from try @ 00386740 with catch @ 0038670c
                       catch() { ... } // from try @ 003869cc with catch @ 0038670c
                       catch() { ... } // from try @ 00386aa4 with catch @ 0038670c */
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00386648;
    iVar13 = -5;
  }
  local_10 = 0;
                    /* try { // try from 003865e4 to 00486603 has its CatchHandler @ 003863f4 */
  local_8 = 0;
  pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar4 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar12 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
                    /* try { // try from 0038660c to 0048660f has its CatchHandler @ 003866a8 */
  *(undefined8 *)(pcVar10 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar10 + 0x18) = uVar2;
  *(undefined2 *)(pcVar10 + 0x1c) = uVar3;
  pcVar10[0x1e] = cVar4;
  *(undefined8 *)pcVar10 = uVar12;
  *(undefined8 *)(pcVar10 + 8) = uVar1;
  cv::error(iVar13,(String *)&local_10,"void* cvRead(CvFileStorage*, CvFileNode*, CvAttrList*)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x136a);
  cv::String::deallocate((String *)&local_10);
LAB_00386648:
  if (param_2 == (uint *)0x0) {
    uVar12 = 0;
  }
  else {
    if (((*param_2 >> 4 & 1) == 0) || (lVar11 = *(long *)(param_2 + 2), lVar11 == 0)) {
      local_10 = 0;
      local_8 = 0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_10,0x39);
      uVar9 = s_The_node_does_not_represent_a_us_00472220._48_8_;
      uVar8 = s_The_node_does_not_represent_a_us_00472220._40_8_;
      uVar7 = s_The_node_does_not_represent_a_us_00472220._32_8_;
      uVar6 = s_The_node_does_not_represent_a_us_00472220._24_8_;
      uVar5 = s_The_node_does_not_represent_a_us_00472220._16_8_;
      uVar1 = s_The_node_does_not_represent_a_us_00472220._8_8_;
      uVar12 = s_The_node_does_not_represent_a_us_00472220._0_8_;
                    /* catch() { ... } // from try @ 00386448 with catch @ 003866a8
                       catch() { ... } // from try @ 00386570 with catch @ 003866a8
                       catch() { ... } // from try @ 0038660c with catch @ 003866a8 */
                    /* try { // try from 003866cc to 004866cf has its CatchHandler @ 003863f4 */
                    /* catch() { ... } // from try @ 003864c4 with catch @ 003866d0 */
      pcVar10[0x38] = s_The_node_does_not_represent_a_us_00472220[0x38];
      *(undefined8 *)(pcVar10 + 0x30) = uVar9;
      *(undefined8 *)pcVar10 = uVar12;
      *(undefined8 *)(pcVar10 + 8) = uVar1;
      *(undefined8 *)(pcVar10 + 0x10) = uVar5;
      *(undefined8 *)(pcVar10 + 0x18) = uVar6;
      *(undefined8 *)(pcVar10 + 0x20) = uVar7;
      *(undefined8 *)(pcVar10 + 0x28) = uVar8;
      cv::error(-2,(String *)&local_10,"void* cvRead(CvFileStorage*, CvFileNode*, CvAttrList*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1370);
      cv::String::deallocate((String *)&local_10);
      lVar11 = *(long *)(param_2 + 2);
                    /* catch() { ... } // from try @ 00386478 with catch @ 00386704
                       catch() { ... } // from try @ 003864cc with catch @ 00386704 */
    }
    uVar12 = (**(code **)(lVar11 + 0x30))(param_1,param_2);
    if (param_3 != (undefined8 *)0x0) {
      *param_3 = 0;
      param_3[1] = 0;
    }
  }
  return uVar12;
}


==================================================================

### FUNC 00386740 (728 bytes) name=FUN_00386740

long FUN_00386740(undefined8 param_1,undefined8 param_2)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  ulong uVar9;
  uint uVar10;
  uint *puVar11;
  void *__dest;
  long lVar12;
  char *pcVar13;
  long lVar14;
  uint uVar15;
  long lVar16;
  long lVar17;
  int iVar18;
  long lVar19;
  long lVar20;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  ulong local_28;
  ulong local_18;
  
                    /* try { // try from 00386740 to 00486743 has its CatchHandler @ 0038670c */
                    /* try { // try from 0038675c to 0048675f has its CatchHandler @ 00386ab8 */
  puVar11 = (uint *)cvGetFileNodeByName(param_1,param_2,"sequences");
                    /* try { // try from 0038677c to 0048677f has its CatchHandler @ 00386ab0 */
  if ((puVar11 == (uint *)0x0) || ((*puVar11 & 7) != 5)) {
    local_40 = 0;
    local_38 = 0;
    __dest = (void *)cv::String::allocate((String *)&local_40,0x5a);
    memcpy(__dest,
           "opencv-sequence-tree instance should contain a field \"sequences\" that should be a sequence"
           ,0x5a);
                    /* try { // try from 003867bc to 004867bf has its CatchHandler @ 00386aa8 */
    cv::error(-0xd4,(String *)&local_40,"void* icvReadSeqTree(CvFileStorage*, CvFileNode*)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1101);
    cv::String::deallocate((String *)&local_40);
  }
  lVar20 = *(long *)(puVar11 + 4);
  iVar1 = *(int *)(lVar20 + 0x28);
  cvStartReadSeq(lVar20,(String *)&local_40,0);
  if (iVar1 < 1) {
                    /* try { // try from 00386958 to 0048695b has its CatchHandler @ 00386ab8 */
    return 0;
  }
                    /* try { // try from 00386818 to 0048681b has its CatchHandler @ 00386a34 */
  iVar18 = 0;
  lVar19 = 0;
                    /* try { // try from 00386820 to 00486873 has its CatchHandler @ 00386aa8 */
  lVar17 = 0;
  lVar16 = 0;
  uVar15 = 0;
  do {
    uVar9 = local_28;
    lVar12 = cvRead(param_1,local_28,0);
    puVar11 = (uint *)cvGetFileNodeByName(param_1,uVar9,"level");
    if (puVar11 == (uint *)0x0) {
      uVar10 = 0xffffffff;
LAB_00386990:
      local_50 = 0;
      local_48 = 0;
      pcVar13 = (char *)cv::String::allocate((String *)&local_50,0x38);
      uVar8 = s_All_the_sequence_tree_nodes_shou_004722c0._40_8_;
      uVar7 = s_All_the_sequence_tree_nodes_shou_004722c0._32_8_;
      uVar6 = s_All_the_sequence_tree_nodes_shou_004722c0._24_8_;
      uVar5 = s_All_the_sequence_tree_nodes_shou_004722c0._16_8_;
      uVar4 = s_All_the_sequence_tree_nodes_shou_004722c0._8_8_;
      uVar3 = s_All_the_sequence_tree_nodes_shou_004722c0._0_8_;
                    /* try { // try from 003869cc to 00486a17 has its CatchHandler @ 0038670c */
      *(undefined8 *)(pcVar13 + 0x30) = s_All_the_sequence_tree_nodes_shou_004722c0._48_8_;
      *(undefined8 *)pcVar13 = uVar3;
      *(undefined8 *)(pcVar13 + 8) = uVar4;
      *(undefined8 *)(pcVar13 + 0x10) = uVar5;
      *(undefined8 *)(pcVar13 + 0x18) = uVar6;
      *(undefined8 *)(pcVar13 + 0x20) = uVar7;
      *(undefined8 *)(pcVar13 + 0x28) = uVar8;
      cv::error(-0xd4,(String *)&local_50,"void* icvReadSeqTree(CvFileStorage*, CvFileNode*)",
                "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x110f);
      cv::String::deallocate((String *)&local_50);
    }
    else if ((*puVar11 & 7) == 1) {
      uVar10 = puVar11[4];
joined_r0x0038698c:
      if ((int)uVar10 < 0) goto LAB_00386990;
    }
    else {
      uVar10 = 0x7fffffff;
      if ((*puVar11 & 7) == 2) {
        lVar14 = lrint(*(double *)(puVar11 + 4));
        uVar10 = (uint)lVar14;
        goto joined_r0x0038698c;
      }
    }
    if (lVar17 == 0) {
      lVar17 = lVar12;
    }
                    /* try { // try from 003868e4 to 004868e7 has its CatchHandler @ 00386ab0 */
    if ((int)uVar15 < (int)uVar10) {
      if (lVar16 != 0) {
        *(long *)(lVar16 + 0x20) = lVar12;
      }
      *(undefined8 *)(lVar12 + 8) = 0;
      lVar19 = lVar16;
LAB_00386854:
      *(long *)(lVar12 + 0x18) = lVar19;
      iVar2 = *(int *)(lVar20 + 0x2c);
    }
    else {
      if ((int)uVar10 < (int)uVar15) {
        do {
          uVar15 = uVar15 - 1;
          lVar16 = *(long *)(lVar16 + 0x18);
        } while (uVar15 != uVar10);
        lVar19 = *(long *)(lVar16 + 0x18);
        *(long *)(lVar12 + 8) = lVar16;
        *(long *)(lVar16 + 0x10) = lVar12;
      }
      else {
        *(long *)(lVar12 + 8) = lVar16;
        if (lVar16 == 0) goto LAB_00386854;
        *(long *)(lVar16 + 0x10) = lVar12;
      }
      *(long *)(lVar12 + 0x18) = lVar19;
      iVar2 = *(int *)(lVar20 + 0x2c);
    }
    local_28 = local_28 + (long)iVar2;
    if (local_18 <= local_28) {
      cvChangeSeqBlock((String *)&local_40,1);
    }
    if (iVar18 + 1 == iVar1) {
      s_All_the_sequence_tree_nodes_shou_004722c0[0] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._0_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[1] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[2] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[3] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[4] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[5] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[6] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[7] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._0_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[8] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._8_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[9] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[10] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0xb] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0xc] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0xd] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0xe] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0xf] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._8_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x10] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._16_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[0x11] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x12] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x13] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x14] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x15] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x16] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x17] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._16_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x18] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._24_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[0x19] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1a] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1b] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1c] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1d] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1e] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x1f] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._24_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x20] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._32_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[0x21] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x22] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x23] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x24] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x25] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x26] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x27] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._32_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x28] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._40_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[0x29] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2a] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2b] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2c] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2d] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2e] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x2f] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._40_8_,7);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x30] =
           (char)s_All_the_sequence_tree_nodes_shou_004722c0._48_8_;
      s_All_the_sequence_tree_nodes_shou_004722c0[0x31] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,1);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x32] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,2);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x33] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,3);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x34] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,4);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x35] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,5);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x36] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,6);
      s_All_the_sequence_tree_nodes_shou_004722c0[0x37] =
           SUB81(s_All_the_sequence_tree_nodes_shou_004722c0._48_8_,7);
      return lVar17;
    }
    iVar18 = iVar18 + 1;
    lVar16 = lVar12;
    uVar15 = uVar10;
  } while( true );
}


==================================================================

### FUNC 00386a40 (720 bytes) name=cvWrite

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvWrite(int *param_1,undefined8 param_2,code *param_3,undefined8 param_4,undefined8 param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  char cVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  char *pcVar8;
  code *pcVar9;
  undefined8 *puVar10;
  code *pcVar11;
  int iVar12;
  code *local_10;
  code *local_8;
  
  if (param_1 == (int *)0x0) {
    iVar12 = -0x1b;
  }
  else {
    if (*param_1 == 0x4c4d4159) goto LAB_00386af8;
    iVar12 = -5;
  }
  local_10 = (code *)0x0;
  local_8 = (code *)0x0;
  pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x1f);
  cVar5 = s_Invalid_pointer_to_file_storage_00470e48[0x1e];
  uVar4 = s_Invalid_pointer_to_file_storage_00470e48._28_2_;
  uVar3 = s_Invalid_pointer_to_file_storage_00470e48._24_4_;
  uVar2 = s_Invalid_pointer_to_file_storage_00470e48._8_8_;
  uVar1 = s_Invalid_pointer_to_file_storage_00470e48._0_8_;
                    /* try { // try from 00386aa4 to 00486aa7 has its CatchHandler @ 0038670c */
                    /* catch() { ... } // from try @ 003867bc with catch @ 00386aa8
                       catch() { ... } // from try @ 00386820 with catch @ 00386aa8 */
                    /* catch() { ... } // from try @ 0038677c with catch @ 00386ab0
                       catch() { ... } // from try @ 003868e4 with catch @ 00386ab0
                       catch() { ... } // from try @ 00386a2c with catch @ 00386ab0 */
                    /* catch() { ... } // from try @ 0038675c with catch @ 00386ab8
                       catch() { ... } // from try @ 00386958 with catch @ 00386ab8
                       catch() { ... } // from try @ 00386a20 with catch @ 00386ab8 */
                    /* catch() { ... } // from try @ 00386b0c with catch @ 00386ac0
                       catch() { ... } // from try @ 00386f50 with catch @ 00386ac0
                       catch() { ... } // from try @ 00386fb0 with catch @ 00386ac0
                       catch() { ... } // from try @ 00387070 with catch @ 00386ac0 */
  *(undefined8 *)(pcVar8 + 0x10) = s_Invalid_pointer_to_file_storage_00470e48._16_8_;
  *(undefined4 *)(pcVar8 + 0x18) = uVar3;
  *(undefined2 *)(pcVar8 + 0x1c) = uVar4;
  pcVar8[0x1e] = cVar5;
  *(undefined8 *)pcVar8 = uVar1;
  *(undefined8 *)(pcVar8 + 8) = uVar2;
  cv::error(iVar12,(String *)&local_10,
            "void cvWrite(CvFileStorage*, const char*, const void*, CvAttrList)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1381);
  cv::String::deallocate((String *)&local_10);
LAB_00386af8:
  if (param_1[2] == 0) {
    local_10 = (code *)0x0;
    local_8 = (code *)0x0;
    puVar10 = (undefined8 *)cv::String::allocate((String *)&local_10,0x26);
    uVar4 = DAT_00470f04;
    uVar7 = DAT_00470ef8;
    uVar6 = DAT_00470ef0;
    uVar2 = _LAB_00470ee8;
    uVar1 = _DAT_00470ee0;
                    /* try { // try from 00386b8c to 00486d37 has its CatchHandler @ 00387090 */
    *(undefined4 *)(puVar10 + 4) = DAT_00470f00;
    *(undefined2 *)((long)puVar10 + 0x24) = uVar4;
    *puVar10 = uVar1;
    puVar10[1] = uVar2;
    puVar10[2] = uVar6;
    puVar10[3] = uVar7;
    cv::error(-2,(String *)&local_10,
              "void cvWrite(CvFileStorage*, const char*, const void*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1381);
    cv::String::deallocate((String *)&local_10);
  }
  if (param_3 == (code *)0x0) {
    local_10 = param_3;
    local_8 = param_3;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x22);
    uVar7 = s_Null_pointer_to_the_written_obje_00472300._24_8_;
    uVar6 = s_Null_pointer_to_the_written_obje_00472300._16_8_;
    uVar2 = s_Null_pointer_to_the_written_obje_00472300._8_8_;
    uVar1 = s_Null_pointer_to_the_written_obje_00472300._0_8_;
    *(undefined2 *)(pcVar8 + 0x20) = s_Null_pointer_to_the_written_obje_00472300._32_2_;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    *(undefined8 *)(pcVar8 + 0x10) = uVar6;
    *(undefined8 *)(pcVar8 + 0x18) = uVar7;
    cv::error(-0x1b,(String *)&local_10,
              "void cvWrite(CvFileStorage*, const char*, const void*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1384);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar9 = (code *)cvTypeOf(param_3);
                    /* try { // try from 00386b0c to 00486b0f has its CatchHandler @ 00386ac0 */
  if (pcVar9 == (code *)0x0) {
    local_10 = pcVar9;
    local_8 = pcVar9;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0xe);
    uVar4 = s_Unknown_object_00472328._12_2_;
    uVar3 = s_Unknown_object_00472328._8_4_;
    *(undefined8 *)pcVar8 = s_Unknown_object_00472328._0_8_;
    *(undefined4 *)(pcVar8 + 8) = uVar3;
    *(undefined2 *)(pcVar8 + 0xc) = uVar4;
    cv::error(-5,(String *)&local_10,
              "void cvWrite(CvFileStorage*, const char*, const void*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",5000);
    cv::String::deallocate((String *)&local_10);
  }
  pcVar11 = *(code **)(pcVar9 + 0x38);
  if (pcVar11 == (code *)0x0) {
    local_10 = pcVar11;
    local_8 = pcVar11;
    pcVar8 = (char *)cv::String::allocate((String *)&local_10,0x27);
    cVar5 = s_The_object_does_not_have_write_f_00472338[0x26];
    uVar4 = s_The_object_does_not_have_write_f_00472338._36_2_;
    uVar7 = s_The_object_does_not_have_write_f_00472338._24_8_;
    uVar6 = s_The_object_does_not_have_write_f_00472338._16_8_;
    uVar2 = s_The_object_does_not_have_write_f_00472338._8_8_;
    uVar1 = s_The_object_does_not_have_write_f_00472338._0_8_;
    *(undefined4 *)(pcVar8 + 0x20) = s_The_object_does_not_have_write_f_00472338._32_4_;
    *(undefined2 *)(pcVar8 + 0x24) = uVar4;
    pcVar8[0x26] = cVar5;
    *(undefined8 *)pcVar8 = uVar1;
    *(undefined8 *)(pcVar8 + 8) = uVar2;
    *(undefined8 *)(pcVar8 + 0x10) = uVar6;
    *(undefined8 *)(pcVar8 + 0x18) = uVar7;
    cv::error(-5,(String *)&local_10,
              "void cvWrite(CvFileStorage*, const char*, const void*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x138b);
    cv::String::deallocate((String *)&local_10);
    pcVar11 = *(code **)(pcVar9 + 0x38);
  }
                    /* try { // try from 00386b28 to 00486b2b has its CatchHandler @ 00387098 */
  (*pcVar11)(param_1,param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### FUNC 00386d74 (512 bytes) name=cvSave

void cvSave(char *param_1,char *param_2,char *param_3,long param_4,undefined8 param_5,
           undefined8 param_6)

{
  undefined8 uVar1;
  undefined8 uVar2;
  char cVar3;
  size_t sVar4;
  void *pvVar5;
  char *pcVar6;
  undefined1 *puVar7;
  undefined8 extraout_x1;
  undefined8 extraout_x1_00;
  undefined1 auVar8 [16];
  char *local_28;
  undefined1 *local_20;
  undefined8 local_18;
  char *local_10;
  char *local_8;
  
                    /* try { // try from 00386d88 to 00486d8b has its CatchHandler @ 00387074 */
  local_28 = (char *)0x0;
                    /* try { // try from 00386d90 to 00486df7 has its CatchHandler @ 00387090 */
  if (param_2 == (char *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar6 = (char *)cv::String::allocate((String *)&local_10,0x13);
    cVar3 = s_NULL_object_pointer_00472360[0x12];
    uVar2 = s_NULL_object_pointer_00472360._8_8_;
    uVar1 = s_NULL_object_pointer_00472360._0_8_;
                    /* try { // try from 00386f50 to 00486f53 has its CatchHandler @ 00386ac0 */
    *(undefined2 *)(pcVar6 + 0x10) = s_NULL_object_pointer_00472360._16_2_;
    pcVar6[0x12] = cVar3;
    *(undefined8 *)pcVar6 = uVar1;
    *(undefined8 *)(pcVar6 + 8) = uVar2;
    cv::error(-0x1b,(String *)&local_10,
              "void cvSave(const char*, const void*, const char*, const char*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1399);
    cv::String::deallocate((String *)&local_10);
  }
  auVar8 = cvOpenFileStorage(param_1,0,1,0);
  local_28 = auVar8._0_8_;
  if (local_28 == (char *)0x0) {
    local_10 = local_28;
    local_8 = local_28;
                    /* try { // try from 00386e68 to 00486e6b has its CatchHandler @ 00387088 */
    pvVar5 = (void *)cv::String::allocate((String *)&local_10,0x3f);
    memcpy(pvVar5,"Could not open the file storage. Check the path and permissions",0x3f);
    cv::error(-2,(String *)&local_10,
              "void cvSave(const char*, const void*, const char*, const char*, CvAttrList)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x139d);
    cv::String::deallocate((String *)&local_10);
    auVar8._8_8_ = extraout_x1;
    auVar8._0_8_ = local_28;
  }
  local_28 = auVar8._0_8_;
  if (param_3 == (char *)0x0) {
    local_10 = param_3;
    local_8 = param_3;
    if (param_1 != (char *)0x0) {
      sVar4 = strlen(param_1);
      pvVar5 = (void *)cv::String::allocate((String *)&local_10,sVar4);
                    /* try { // try from 00386edc to 00486edf has its CatchHandler @ 00387098 */
      memcpy(pvVar5,param_1,sVar4);
      auVar8._8_8_ = extraout_x1_00;
      auVar8._0_8_ = local_28;
    }
    local_28 = auVar8._0_8_;
    cv::FileStorage::getDefaultObjectName((FileStorage *)&local_10,auVar8._8_8_);
    cv::String::deallocate((String *)&local_10);
  }
  else {
    local_20 = (undefined1 *)0x0;
    local_18 = 0;
    sVar4 = strlen(param_3);
    pvVar5 = (void *)cv::String::allocate((String *)&local_20,sVar4);
    memcpy(pvVar5,param_3,sVar4);
  }
  if (param_4 != 0) {
    cvWriteComment(local_28,param_4,0);
  }
  puVar7 = local_20;
  if (local_20 == (undefined1 *)0x0) {
    puVar7 = &DAT_00472008;
  }
  cvWrite(local_28,puVar7,param_2,param_5,param_6);
  cvReleaseFileStorage(&local_28);
  cv::String::deallocate((String *)&local_20);
  return;
}


==================================================================

### FUNC 00386fd8 (56 bytes) name=FileStorage

/* cv::FileStorage::FileStorage() */

void __thiscall cv::FileStorage::FileStorage(FileStorage *this)

{
                    /* try { // try from 00386fe0 to 00486fe3 has its CatchHandler @ 00387090 */
  *(undefined **)this = PTR_vtable_00501a10 + 0x10;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
                    /* catch() { ... } // from try @ 00386fa4 with catch @ 00386ff4
                       catch() { ... } // from try @ 00386fd4 with catch @ 00386ff4 */
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined4 *)(this + 0x40) = 0;
  return;
}


==================================================================

### FUNC 00387010 (92 bytes) name=FileStorage

/* cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&) */

void __thiscall
cv::FileStorage::FileStorage(FileStorage *this,String *param_1,int param_2,String *param_3)

{
  *(undefined **)this = PTR_vtable_00501a10 + 0x10;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined4 *)(this + 0x40) = 0;
  open(this,param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 003870bc (260 bytes) name=FileStorage

/* cv::FileStorage::FileStorage(CvFileStorage*, bool) */

void __thiscall cv::FileStorage::FileStorage(FileStorage *this,CvFileStorage *param_1,bool param_2)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  undefined8 *puVar5;
  long *plVar6;
  
  *(undefined **)this = PTR_vtable_00501a10 + 0x10;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  if (param_2) {
    if (param_1 == (CvFileStorage *)0x0) {
      *(undefined8 *)(this + 0x10) = 0;
      *(undefined4 *)(this + 0x40) = 0;
                    /* try { // try from 003871a0 to 004871a3 has its CatchHandler @ 003870b0 */
                    /* catch() { ... } // from try @ 003871c4 with catch @ 003871a4
                       catch() { ... } // from try @ 0038738c with catch @ 003871a4
                       catch() { ... } // from try @ 00387538 with catch @ 003871a4
                       catch() { ... } // from try @ 00387644 with catch @ 003871a4 */
      return;
    }
    puVar5 = operator_new(0x20);
    puVar5[2] = param_1;
    *puVar5 = &PTR_FUN_004f7690;
    *(undefined4 *)(puVar5 + 1) = 1;
    plVar6 = *(long **)(this + 8);
    *(CvFileStorage **)(this + 0x10) = param_1;
    *(undefined8 **)(this + 8) = puVar5;
    plVar1 = plVar6 + 1;
                    /* try { // try from 00387140 to 00487173 has its CatchHandler @ 00387188 */
    if (plVar6 != (long *)0x0) {
      do {
        lVar4 = *plVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)lVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if ((int)lVar4 == 1) {
        (**(code **)(*plVar6 + 0x10))(plVar6);
      }
    }
  }
  else {
    *(CvFileStorage **)(this + 0x10) = param_1;
    if (param_1 == (CvFileStorage *)0x0) {
      *(undefined4 *)(this + 0x40) = 0;
                    /* catch() { ... } // from try @ 00387140 with catch @ 00387188 */
      return;
    }
  }
  *(undefined4 *)(this + 0x40) = 6;
  return;
}


==================================================================

### FUNC 00387210 (708 bytes) name=cvLoad

uint * cvLoad(undefined8 param_1,long param_2,long param_3,undefined8 *param_4)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char cVar6;
  int iVar7;
  CvFileStorage *pCVar8;
  int *piVar9;
  char *pcVar10;
  void *pvVar11;
  size_t sVar12;
  long lVar13;
  uint *puVar14;
  int iVar15;
  int iVar16;
  uint *local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  int *local_70;
  int *local_60;
  FileStorage aFStack_48 [16];
  long local_38;
  
                    /* try { // try from 00387220 to 00487293 has its CatchHandler @ 00387648 */
  local_a0 = (uint *)0x0;
  pCVar8 = (CvFileStorage *)cvOpenFileStorage(param_1,param_2,0);
  cv::FileStorage::FileStorage(aFStack_48,pCVar8,true);
  cVar6 = cv::FileStorage::isOpened(aFStack_48);
  if (cVar6 == '\0') {
LAB_003874cc:
    puVar14 = (uint *)0x0;
    goto LAB_00387350;
  }
  if (param_3 == 0) {
                    /* try { // try from 0038738c to 004873df has its CatchHandler @ 003871a4 */
    iVar7 = 0;
    lVar13 = *(long *)(local_38 + 0x30);
    if (0 < *(int *)(lVar13 + 0x28)) {
      do {
        puVar14 = (uint *)cvGetSeqElem(lVar13,iVar7);
        if ((*puVar14 & 7) != 6) goto LAB_003874cc;
        lVar13 = *(long *)(puVar14 + 4);
        cvStartReadSeq(lVar13,&local_88,0);
        iVar15 = *(int *)(lVar13 + 0x28);
        if (0 < iVar15) {
          piVar9 = local_70;
          if (*local_70 < 0) {
            iVar16 = 0;
            do {
              local_70 = (int *)((long)local_70 + (long)*(int *)(lVar13 + 0x2c));
              if (local_70 < local_60) {
                if (iVar15 <= iVar16 + 1) goto LAB_00387440;
              }
              else {
                cvChangeSeqBlock(&local_88,1);
                iVar15 = *(int *)(lVar13 + 0x28);
                if (iVar15 <= iVar16 + 1) goto LAB_00387440;
              }
                    /* try { // try from 00387400 to 00487403 has its CatchHandler @ 00387648 */
              iVar16 = iVar16 + 1;
              piVar9 = local_70;
              if (-1 < *local_70) break;
            } while( true );
          }
          goto LAB_00387284;
        }
LAB_00387440:
        iVar7 = iVar7 + 1;
        lVar13 = *(long *)(local_38 + 0x30);
      } while (iVar7 < *(int *)(lVar13 + 0x28));
    }
LAB_00387458:
    local_98 = 0;
    local_90 = 0;
    pcVar10 = (char *)cv::String::allocate((String *)&local_98,0x2c);
    uVar5 = s_Could_not_find_the_an_object_in_f_004723b8._40_4_;
    uVar4 = s_Could_not_find_the_an_object_in_f_004723b8._24_8_;
    uVar3 = s_Could_not_find_the_an_object_in_f_004723b8._16_8_;
    uVar2 = s_Could_not_find_the_an_object_in_f_004723b8._8_8_;
    uVar1 = s_Could_not_find_the_an_object_in_f_004723b8._0_8_;
                    /* try { // try from 0038747c to 0048747f has its CatchHandler @ 00387650 */
    *(undefined8 *)(pcVar10 + 0x20) = s_Could_not_find_the_an_object_in_f_004723b8._32_8_;
    *(undefined4 *)(pcVar10 + 0x28) = uVar5;
    *(undefined8 *)pcVar10 = uVar1;
    *(undefined8 *)(pcVar10 + 8) = uVar2;
    *(undefined8 *)(pcVar10 + 0x10) = uVar3;
    *(undefined8 *)(pcVar10 + 0x18) = uVar4;
    cv::error(-0xcc,(String *)&local_98,
              "void* cvLoad(const char*, CvMemStorage*, const char*, const char**)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x13d9);
    cv::String::deallocate((String *)&local_98);
    piVar9 = (int *)0x0;
  }
  else {
    piVar9 = (int *)cvGetFileNodeByName(local_38,0,param_3);
    if (piVar9 == (int *)0x0) goto LAB_00387458;
  }
LAB_00387284:
  pcVar10 = (char *)cvGetFileNodeName(piVar9);
  local_a0 = (uint *)cvRead(local_38,piVar9,0);
                    /* try { // try from 003872b4 to 004872c3 has its CatchHandler @ 00387668 */
  if (((local_a0 != (uint *)0x0) && (param_2 == 0)) && ((*local_a0 & 0xfffe0000) == 0x42980000)) {
    local_88 = 0;
    local_80 = 0;
    pvVar11 = (void *)cv::String::allocate((String *)&local_88,0x4e);
    memcpy(pvVar11,"NULL memory storage is passed - the loaded dynamic structure can not be stored",
           0x4e);
    cv::error(-0x1b,(String *)&local_88,
              "void* cvLoad(const char*, CvMemStorage*, const char*, const char**)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x13e1);
    cv::String::deallocate((String *)&local_88);
  }
  iVar7 = cvGetErrStatus();
  if (iVar7 < 0) {
    cvRelease(&local_a0);
    puVar14 = local_a0;
    if (param_4 == (undefined8 *)0x0) goto LAB_00387350;
  }
  else {
    puVar14 = local_a0;
    if (param_4 == (undefined8 *)0x0) goto LAB_00387350;
    if (pcVar10 != (char *)0x0) {
      sVar12 = strlen(pcVar10);
      pvVar11 = (void *)cv::cvAlloc(sVar12);
      *param_4 = pvVar11;
      sVar12 = strlen(pcVar10);
                    /* try { // try from 00387344 to 00487347 has its CatchHandler @ 00387650 */
      memcpy(pvVar11,pcVar10,sVar12);
      puVar14 = local_a0;
      goto LAB_00387350;
    }
  }
  *param_4 = 0;
  puVar14 = local_a0;
LAB_00387350:
  cv::FileStorage::~FileStorage(aFStack_48);
  return puVar14;
}


==================================================================

### FUNC 00387510 (148 bytes) name=root

/* cv::FileStorage::root(int) const */

long * cv::FileStorage::root(int param_1)

{
  char cVar1;
  long *plVar2;
  long lVar3;
  long *in_x8;
  long lVar4;
  
  plVar2 = (long *)(ulong)(uint)param_1;
  if (*(code **)(*plVar2 + 0x18) == isOpened) {
    lVar4 = plVar2[2];
                    /* try { // try from 00387538 to 0048756b has its CatchHandler @ 003871a4 */
    if ((lVar4 != 0) && (*(char *)(lVar4 + 0x180) != '\0')) {
LAB_0038757c:
      lVar3 = cvGetRootFileNode(lVar4);
      in_x8[1] = lVar3;
      *in_x8 = lVar4;
      return in_x8;
    }
  }
  else {
    cVar1 = (**(code **)(*plVar2 + 0x18))();
                    /* try { // try from 00387574 to 004875b3 has its CatchHandler @ 00387648 */
    if (cVar1 != '\0') {
      lVar4 = plVar2[2];
      goto LAB_0038757c;
    }
  }
  *in_x8 = 0;
  in_x8[1] = 0;
  return in_x8;
}


==================================================================

### FUNC 003875a4 (460 bytes) name=writeRaw

/* cv::FileStorage::writeRaw(cv::String const&, unsigned char const*, unsigned long) */

void __thiscall
cv::FileStorage::writeRaw(FileStorage *this,String *param_1,uchar *param_2,ulong param_3)

{
  bool bVar1;
  byte bVar2;
  uint uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  char cVar6;
  byte *pbVar7;
  char *pcVar8;
  byte *pbVar9;
  ulong uVar10;
  ulong uVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(code **)(*(long *)this + 0x18) == isOpened) {
    if (*(long *)(this + 0x10) == 0) {
      return;
    }
    cVar6 = *(char *)(*(long *)(this + 0x10) + 0x180);
  }
  else {
    cVar6 = (**(code **)(*(long *)this + 0x18))();
                    /* try { // try from 00387604 to 00487607 has its CatchHandler @ 00387614 */
  }
                    /* try { // try from 0038760c to 0048760f has its CatchHandler @ 00387648 */
  if (cVar6 == '\0') {
    s_len___elemSize____0_00472438[0x10] = (char)s_len___elemSize____0_00472438._16_2_;
    s_len___elemSize____0_00472438[0x11] = SUB21(s_len___elemSize____0_00472438._16_2_,1);
    s_len___elemSize____0_00472438[8] = (char)s_len___elemSize____0_00472438._8_8_;
    s_len___elemSize____0_00472438[9] = SUB81(s_len___elemSize____0_00472438._8_8_,1);
    s_len___elemSize____0_00472438[10] = SUB81(s_len___elemSize____0_00472438._8_8_,2);
    s_len___elemSize____0_00472438[0xb] = SUB81(s_len___elemSize____0_00472438._8_8_,3);
    s_len___elemSize____0_00472438[0xc] = SUB81(s_len___elemSize____0_00472438._8_8_,4);
    s_len___elemSize____0_00472438[0xd] = SUB81(s_len___elemSize____0_00472438._8_8_,5);
    s_len___elemSize____0_00472438[0xe] = SUB81(s_len___elemSize____0_00472438._8_8_,6);
    s_len___elemSize____0_00472438[0xf] = SUB81(s_len___elemSize____0_00472438._8_8_,7);
    s_len___elemSize____0_00472438[0] = (char)s_len___elemSize____0_00472438._0_8_;
    s_len___elemSize____0_00472438[1] = SUB81(s_len___elemSize____0_00472438._0_8_,1);
    s_len___elemSize____0_00472438[2] = SUB81(s_len___elemSize____0_00472438._0_8_,2);
    s_len___elemSize____0_00472438[3] = SUB81(s_len___elemSize____0_00472438._0_8_,3);
    s_len___elemSize____0_00472438[4] = SUB81(s_len___elemSize____0_00472438._0_8_,4);
    s_len___elemSize____0_00472438[5] = SUB81(s_len___elemSize____0_00472438._0_8_,5);
    s_len___elemSize____0_00472438[6] = SUB81(s_len___elemSize____0_00472438._0_8_,6);
    s_len___elemSize____0_00472438[7] = SUB81(s_len___elemSize____0_00472438._0_8_,7);
    return;
  }
  pbVar7 = *(byte **)param_1;
                    /* catch() { ... } // from try @ 00387604 with catch @ 00387614 */
  pbVar9 = pbVar7;
  if (pbVar7 == (byte *)0x0) {
    pbVar9 = &DAT_00472008;
  }
  bVar2 = *pbVar9;
  uVar3 = (int)(char)bVar2 - 0x30;
  if ((uVar3 & 0xff) < 10) {
    bVar2 = pbVar9[1];
    uVar10 = (ulong)(int)uVar3;
    uVar11 = uVar10;
    if ((bVar2 != 99) && (bVar2 != 0x75)) goto LAB_00387644;
  }
  else {
    if (((char)bVar2 == 99) || (bVar2 == 0x75)) goto LAB_003876ac;
    uVar10 = 1;
LAB_00387644:
                    /* try { // try from 00387644 to 00487647 has its CatchHandler @ 003871a4 */
                    /* catch() { ... } // from try @ 00387220 with catch @ 00387648
                       catch() { ... } // from try @ 00387400 with catch @ 00387648
                       catch() { ... } // from try @ 00387574 with catch @ 00387648
                       catch() { ... } // from try @ 0038760c with catch @ 00387648 */
    uVar11 = uVar10 << 1;
                    /* catch() { ... } // from try @ 00387344 with catch @ 00387650
                       catch() { ... } // from try @ 0038747c with catch @ 00387650 */
    if ((bVar2 & 0xfb) != 0x73) {
      if ((bVar2 == 0x69) || (bVar2 == 0x66)) {
        uVar11 = uVar10 << 2;
      }
      else {
                    /* catch() { ... } // from try @ 003872b4 with catch @ 00387668 */
        if ((bVar2 == 100) || (uVar11 = 0, bVar2 == 0x72)) {
                    /* catch() { ... } // from try @ 00387794 with catch @ 00387678 */
          uVar11 = uVar10 << 3;
        }
      }
    }
  }
                    /* try { // try from 0038769c to 004876c7 has its CatchHandler @ 00387784 */
  uVar10 = 0;
  if (uVar11 != 0) {
    uVar10 = param_3 / uVar11;
  }
  bVar1 = param_3 != uVar10 * uVar11;
  param_3 = uVar10;
  if (bVar1) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_10,0x13);
    cVar6 = s_len___elemSize____0_00472438[0x12];
    uVar5 = s_len___elemSize____0_00472438._8_8_;
    uVar4 = s_len___elemSize____0_00472438._0_8_;
    *(undefined2 *)(pcVar8 + 0x10) = s_len___elemSize____0_00472438._16_2_;
    pcVar8[0x12] = cVar6;
    *(undefined8 *)pcVar8 = uVar4;
    *(undefined8 *)(pcVar8 + 8) = uVar5;
    error(-0xd7,(String *)&local_10,
          "void cv::FileStorage::writeRaw(const cv::String&, const uchar*, size_t)",
          "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x148e);
    String::deallocate((String *)&local_10);
    pbVar7 = *(byte **)param_1;
  }
LAB_003876ac:
  if (pbVar7 == (byte *)0x0) {
    pbVar7 = &DAT_00472008;
  }
  cvWriteRawData(*(undefined8 *)(this + 0x10),param_2,param_3 & 0xffffffff,pbVar7);
  return;
}


==================================================================

### FUNC 00387784 (156 bytes) name=writeObj

/* cv::FileStorage::writeObj(cv::String const&, void const*) */

void __thiscall cv::FileStorage::writeObj(FileStorage *this,String *param_1,void *param_2)

{
  char cVar1;
  long lVar2;
  undefined1 *puVar3;
  
                    /* catch() { ... } // from try @ 0038769c with catch @ 00387784 */
                    /* try { // try from 00387794 to 004877b3 has its CatchHandler @ 00387678 */
                    /* catch() { ... } // from try @ 00387748 with catch @ 00387798 */
  if (*(code **)(*(long *)this + 0x18) == isOpened) {
    lVar2 = *(long *)(this + 0x10);
    if ((lVar2 != 0) && (*(char *)(lVar2 + 0x180) != '\0')) {
LAB_003877e4:
      puVar3 = (undefined1 *)0x0;
      if ((*(long *)(param_1 + 8) != 0) &&
         (puVar3 = *(undefined1 **)param_1, puVar3 == (undefined1 *)0x0)) {
        puVar3 = &DAT_00472008;
      }
      cvWrite(lVar2,puVar3,param_2,0,0);
      return;
    }
  }
  else {
    cVar1 = (**(code **)(*(long *)this + 0x18))();
    if (cVar1 != '\0') {
      lVar2 = *(long *)(this + 0x10);
      goto LAB_003877e4;
    }
  }
                    /* catch() { ... } // from try @ 00387840 with catch @ 003877c0
                       catch() { ... } // from try @ 00387d9c with catch @ 003877c0
                       catch() { ... } // from try @ 00388154 with catch @ 003877c0 */
  return;
}


==================================================================

### FUNC 00387820 (76 bytes) name=operator[]

/* cv::FileStorage::operator[](cv::String const&) const */

undefined8 * cv::FileStorage::operator[](String *param_1)

{
  undefined8 uVar1;
  undefined8 *in_x1;
  undefined1 *puVar2;
  undefined8 *in_x8;
  undefined8 uVar3;
  
  puVar2 = (undefined1 *)*in_x1;
  uVar3 = *(undefined8 *)(param_1 + 0x10);
  if (puVar2 == (undefined1 *)0x0) {
    puVar2 = &DAT_00472008;
  }
                    /* try { // try from 00387840 to 00487843 has its CatchHandler @ 003877c0 */
  uVar1 = cvGetFileNodeByName(uVar3,0,puVar2);
  in_x8[1] = uVar1;
  *in_x8 = uVar3;
  return in_x8;
}


==================================================================

### FUNC 0038786c (60 bytes) name=operator[]

/* cv::FileStorage::operator[](char const*) const */

undefined8 * cv::FileStorage::operator[](char *param_1)

{
  undefined8 uVar1;
  undefined8 *in_x8;
  undefined8 uVar2;
  
  uVar2 = *(undefined8 *)(param_1 + 0x10);
  uVar1 = cvGetFileNodeByName(uVar2,0);
  in_x8[1] = uVar1;
  *in_x8 = uVar2;
  return in_x8;
}


==================================================================

### FUNC 003878a8 (76 bytes) name=operator[]

/* cv::FileNode::operator[](cv::String const&) const */

undefined8 * cv::FileNode::operator[](String *param_1)

{
  undefined8 uVar1;
  undefined8 *in_x1;
  undefined1 *puVar2;
  undefined8 *in_x8;
  undefined8 uVar3;
  
  puVar2 = (undefined1 *)*in_x1;
  uVar3 = *(undefined8 *)param_1;
  if (puVar2 == (undefined1 *)0x0) {
    puVar2 = &DAT_00472008;
  }
  uVar1 = cvGetFileNodeByName(uVar3,*(undefined8 *)(param_1 + 8),puVar2);
  in_x8[1] = uVar1;
  *in_x8 = uVar3;
  return in_x8;
}


==================================================================

### FUNC 003878f4 (60 bytes) name=operator[]

/* cv::FileNode::operator[](char const*) const */

undefined8 * cv::FileNode::operator[](char *param_1)

{
  undefined8 uVar1;
  undefined8 *in_x8;
  undefined8 uVar2;
  
  uVar2 = *(undefined8 *)param_1;
  uVar1 = cvGetFileNodeByName(uVar2,*(undefined8 *)(param_1 + 8));
  in_x8[1] = uVar1;
  *in_x8 = uVar2;
  return in_x8;
}


==================================================================

### FUNC 00387930 (128 bytes) name=name

/* cv::FileNode::name() const */

void cv::FileNode::name(void)

{
  long in_x0;
  char *__s;
  size_t __n;
  void *__dest;
  String *in_x8;
  
                    /* try { // try from 00387934 to 00487937 has its CatchHandler @ 00388230 */
  if ((*(long *)(in_x0 + 8) != 0) && (__s = (char *)cvGetFileNodeName(), __s != (char *)0x0)) {
    *(undefined8 *)in_x8 = 0;
    *(undefined8 *)(in_x8 + 8) = 0;
    __n = strlen(__s);
    __dest = (void *)String::allocate(in_x8,__n);
    memcpy(__dest,__s,__n);
    return;
  }
  *(undefined8 *)in_x8 = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  return;
}


==================================================================

### FUNC 003879b0 (36 bytes) name=readObj

/* cv::FileNode::readObj() const */

undefined8 __thiscall cv::FileNode::readObj(FileNode *this)

{
  undefined8 uVar1;
  
  if ((*(long *)this != 0) && (*(long *)(this + 8) != 0)) {
                    /* try { // try from 003879c8 to 00487b87 has its CatchHandler @ 003881fc */
    uVar1 = cvRead(*(long *)this,*(long *)(this + 8),0);
    return uVar1;
  }
  return 0;
}


==================================================================

### FUNC 003879d4 (20 bytes) name=FileNodeIterator

/* cv::FileNodeIterator::FileNodeIterator() */

void __thiscall cv::FileNodeIterator::FileNodeIterator(FileNodeIterator *this)

{
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  return;
}


==================================================================

### FUNC 003879e8 (60 bytes) name=FileNodeIterator

/* cv::FileNodeIterator::FileNodeIterator(cv::FileNodeIterator const&) */

void __thiscall
cv::FileNodeIterator::FileNodeIterator(FileNodeIterator *this,FileNodeIterator *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  
  uVar1 = *(undefined8 *)(param_1 + 0x50);
  uVar2 = *(undefined8 *)param_1;
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)this = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0x18) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x28);
  *(undefined8 *)(this + 0x20) = *(undefined8 *)(param_1 + 0x20);
  *(undefined8 *)(this + 0x28) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x38);
  *(undefined8 *)(this + 0x30) = *(undefined8 *)(param_1 + 0x30);
  *(undefined8 *)(this + 0x38) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x48);
  *(undefined8 *)(this + 0x40) = *(undefined8 *)(param_1 + 0x40);
  *(undefined8 *)(this + 0x48) = uVar2;
  *(undefined8 *)(this + 0x50) = uVar1;
  return;
}


==================================================================

### FUNC 00387a24 (100 bytes) name=operator++

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE() */

FileNodeIterator * __thiscall cv::FileNodeIterator::operator++(FileNodeIterator *this)

{
  ulong uVar1;
  long lVar2;
  
  lVar2 = *(long *)(this + 0x50);
  if (lVar2 != 0) {
    if (*(long *)(this + 0x18) != 0) {
      uVar1 = *(long *)(this + 0x28) + (long)*(int *)(*(long *)(this + 0x18) + 0x2c);
      *(ulong *)(this + 0x28) = uVar1;
      if (*(ulong *)(this + 0x38) <= uVar1) {
        cvChangeSeqBlock(this + 0x10,1);
        lVar2 = *(long *)(this + 0x50);
      }
    }
    *(long *)(this + 0x50) = lVar2 + -1;
  }
  return this;
}


==================================================================

### FUNC 00387a88 (56 bytes) name=operator++

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE(int) */

FileNodeIterator * __thiscall cv::FileNodeIterator::operator++(FileNodeIterator *this,int param_1)

{
  FileNodeIterator *in_x8;
  
  FileNodeIterator(in_x8,this);
  operator++(this);
  return in_x8;
}


==================================================================

### FUNC 00387ac0 (548 bytes) name=readRaw

/* cv::FileNodeIterator::readRaw(cv::String const&, unsigned char*, unsigned long) */

FileNodeIterator * __thiscall
cv::FileNodeIterator::readRaw(FileNodeIterator *this,String *param_1,uchar *param_2,ulong param_3)

{
  byte bVar1;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  long lVar5;
  char *pcVar6;
  long lVar7;
  byte *pbVar8;
  ulong uVar9;
  byte *pbVar10;
  long lVar11;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar5 = *(long *)this;
  if (lVar5 == 0) {
    return this;
  }
  if (*(long *)(this + 8) == 0) {
    return this;
  }
  uVar9 = *(ulong *)(this + 0x50);
  if (uVar9 == 0) {
    return this;
  }
  pbVar8 = *(byte **)param_1;
  pbVar10 = pbVar8;
  if (pbVar8 == (byte *)0x0) {
    pbVar10 = &DAT_00472008;
  }
  bVar1 = *pbVar10;
  uVar2 = (int)(char)bVar1 - 0x30;
  if ((uVar2 & 0xff) < 10) {
    bVar1 = pbVar10[1];
    lVar11 = (long)(int)uVar2;
    if ((bVar1 == 99) || (bVar1 == 0x75)) {
      lVar7 = 1;
    }
    else if ((bVar1 & 0xfb) == 0x73) {
      lVar7 = 2;
    }
    else if ((bVar1 == 0x69) || (bVar1 == 0x66)) {
      lVar7 = 4;
    }
    else {
      if ((bVar1 != 100) && (bVar1 != 0x72)) goto LAB_00387b74;
      lVar7 = 8;
    }
    if (lVar11 * lVar7 != 0) goto LAB_00387c40;
  }
  else {
    if ((((((int)(char)bVar1 & 0xffffffefU) == 99) || ((bVar1 & 0xfd) == 0x75)) || (bVar1 == 0x69))
       || (bVar1 == 0x66)) {
      lVar11 = 1;
      goto LAB_00387c40;
    }
    lVar11 = 1;
    if ((bVar1 == 100) || (bVar1 == 0x72)) goto LAB_00387c40;
  }
LAB_00387b74:
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0xd);
  cVar4 = s_elem_size_>_0_00472450[0xc];
  uVar3 = s_elem_size_>_0_00472450._8_4_;
                    /* try { // try from 00387bbc to 00487bbf has its CatchHandler @ 00388220 */
  *(undefined8 *)pcVar6 = s_elem_size_>_0_00472450._0_8_;
                    /* try { // try from 00387bc4 to 00487bff has its CatchHandler @ 003881fc */
  *(undefined4 *)(pcVar6 + 8) = uVar3;
  pcVar6[0xc] = cVar4;
  error(-0xd7,(String *)&local_10,
        "cv::FileNodeIterator& cv::FileNodeIterator::readRaw(const cv::String&, uchar*, size_t)",
        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x153b);
  String::deallocate((String *)&local_10);
  uVar9 = *(ulong *)(this + 0x50);
  lVar5 = *(long *)this;
  pbVar8 = *(byte **)param_1;
LAB_00387c40:
                    /* try { // try from 00387c44 to 00487c47 has its CatchHandler @ 00388210 */
  if (param_3 < uVar9) {
    uVar9 = param_3;
  }
                    /* try { // try from 00387c4c to 00487cc7 has its CatchHandler @ 003881fc */
  if (*(long *)(this + 0x18) == 0) {
    if (pbVar8 == (byte *)0x0) {
      pbVar8 = &DAT_00472008;
    }
    cvReadRawData(lVar5,*(undefined8 *)(this + 8),param_2,pbVar8);
    *(undefined8 *)(this + 0x50) = 0;
    return this;
  }
  if (pbVar8 == (byte *)0x0) {
    pbVar8 = &DAT_00472008;
  }
  cvReadRawDataSlice(lVar5,this + 0x10,uVar9 & 0xffffffff,param_2,pbVar8);
  *(ulong *)(this + 0x50) = *(long *)(this + 0x50) - uVar9 * lVar11;
  return this;
}


==================================================================

### FUNC 00387cf8 (44 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, int) */

void cv::write(FileStorage *param_1,String *param_2,int param_3)

{
  long lVar1;
  
  lVar1 = 0;
  if ((*(long *)(param_2 + 8) != 0) && (lVar1 = *(long *)param_2, lVar1 == 0)) {
    cvWriteInt(*(undefined8 *)(param_1 + 0x10),&DAT_00472008,param_3);
    return;
  }
  cvWriteInt(*(undefined8 *)(param_1 + 0x10),lVar1,param_3);
  return;
}


==================================================================

### FUNC 00387d24 (48 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, float) */

void cv::write(FileStorage *param_1,String *param_2,float param_3)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)0x0;
  if ((*(long *)(param_2 + 8) != 0) &&
     (puVar1 = *(undefined1 **)param_2, puVar1 == (undefined1 *)0x0)) {
    puVar1 = &DAT_00472008;
  }
  cvWriteReal((double)param_3,*(undefined8 *)(param_1 + 0x10),puVar1);
  return;
}


==================================================================

### FUNC 00387d54 (44 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, double) */

void cv::write(FileStorage *param_1,String *param_2,double param_3)

{
  long lVar1;
  
                    /* try { // try from 00387d54 to 00487d57 has its CatchHandler @ 003881e4 */
  lVar1 = 0;
  if ((*(long *)(param_2 + 8) != 0) && (lVar1 = *(long *)param_2, lVar1 == 0)) {
    cvWriteReal(*(undefined8 *)(param_1 + 0x10),&DAT_00472008);
    return;
  }
  cvWriteReal(*(undefined8 *)(param_1 + 0x10),lVar1);
  return;
}


==================================================================

### FUNC 00387d80 (72 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, cv::String const&) */

void cv::write(FileStorage *param_1,String *param_2,String *param_3)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)0x0;
  if ((*(long *)(param_2 + 8) != 0) &&
     (puVar1 = *(undefined1 **)param_2, puVar1 == (undefined1 *)0x0)) {
    puVar1 = &DAT_00472008;
  }
                    /* try { // try from 00387d9c to 00487def has its CatchHandler @ 003877c0 */
  if (*(long *)param_3 != 0) {
    cvWriteString(*(undefined8 *)(param_1 + 0x10),puVar1,*(long *)param_3,0);
    return;
  }
  cvWriteString(*(undefined8 *)(param_1 + 0x10),puVar1,&DAT_00472008,0);
  return;
}


==================================================================

### FUNC 00387dc8 (16 bytes) name=writeScalar

/* cv::writeScalar(cv::FileStorage&, int) */

void cv::writeScalar(FileStorage *param_1,int param_2)

{
  cvWriteInt(*(undefined8 *)(param_1 + 0x10),0,param_2);
  return;
}


==================================================================

### FUNC 00387dd8 (16 bytes) name=writeScalar

/* cv::writeScalar(cv::FileStorage&, float) */

void cv::writeScalar(FileStorage *param_1,float param_2)

{
  cvWriteReal((double)param_2,*(undefined8 *)(param_1 + 0x10),0);
  return;
}


==================================================================

### FUNC 00387de8 (12 bytes) name=writeScalar

/* cv::writeScalar(cv::FileStorage&, double) */

void cv::writeScalar(FileStorage *param_1,double param_2)

{
  cvWriteReal(*(undefined8 *)(param_1 + 0x10),0);
  return;
}


==================================================================

### FUNC 00387df4 (44 bytes) name=writeScalar

/* cv::writeScalar(cv::FileStorage&, cv::String const&) */

void cv::writeScalar(FileStorage *param_1,String *param_2)

{
  if (*(long *)param_2 != 0) {
    cvWriteString(*(undefined8 *)(param_1 + 0x10),0,*(long *)param_2,0);
    return;
  }
  cvWriteString(*(undefined8 *)(param_1 + 0x10),0,&DAT_00472008,0);
  return;
}


==================================================================

### FUNC 00387e20 (220 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, cv::Mat const&) */

void cv::write(FileStorage *param_1,String *param_2,Mat *param_3)

{
  undefined8 uVar1;
  undefined1 *puVar2;
  uint local_120;
  undefined4 local_11c;
  undefined8 local_118;
  undefined4 local_110;
  undefined8 local_108;
  undefined4 local_100;
  undefined4 local_fc;
  
                    /* try { // try from 00387e28 to 00487e2b has its CatchHandler @ 003881e4 */
                    /* try { // try from 00387e38 to 00487e3b has its CatchHandler @ 00388260 */
  if (*(int *)(param_3 + 4) < 3) {
                    /* try { // try from 00387e44 to 00487e63 has its CatchHandler @ 003881fc */
    local_100 = *(undefined4 *)(param_3 + 8);
    local_fc = 1;
    if (*(int *)(param_3 + 4) != 1) {
      local_fc = *(undefined4 *)(param_3 + 0xc);
    }
    local_108 = *(undefined8 *)(param_3 + 0x10);
    local_118 = 0;
    local_110 = 0;
    local_120 = *(uint *)param_3 & 0x4fff | 0x42420000;
    puVar2 = (undefined1 *)0x0;
    local_11c = (undefined4)**(undefined8 **)(param_3 + 0x48);
                    /* try { // try from 00387e98 to 00487e9b has its CatchHandler @ 00388250 */
    uVar1 = *(undefined8 *)(param_1 + 0x10);
    if (*(long *)(param_2 + 8) == 0) goto LAB_00387ea8;
                    /* try { // try from 00387ea0 to 00487ebf has its CatchHandler @ 003881fc */
    puVar2 = *(undefined1 **)param_2;
  }
  else {
    CvMatND::CvMatND((CvMatND *)&local_120,param_3);
    puVar2 = (undefined1 *)0x0;
    uVar1 = *(undefined8 *)(param_1 + 0x10);
    if (*(long *)(param_2 + 8) == 0) goto LAB_00387ea8;
    puVar2 = *(undefined1 **)param_2;
  }
  if (puVar2 == (undefined1 *)0x0) {
    puVar2 = &DAT_00472008;
  }
LAB_00387ea8:
  cvWrite(uVar1,puVar2,&local_120,0,0);
  return;
}


==================================================================

### FUNC 00387efc (220 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, cv::SparseMat const&) */

void cv::write(FileStorage *param_1,String *param_2,SparseMat *param_3)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  long *plVar5;
  undefined1 *puVar6;
  
                    /* try { // try from 00387f04 to 00487f07 has its CatchHandler @ 00388240 */
                    /* try { // try from 00387f0c to 00487f0f has its CatchHandler @ 003881fc */
  lVar4 = cvCreateSparseMat(param_3);
                    /* try { // try from 00387f18 to 00487f1b has its CatchHandler @ 00388260 */
  if (lVar4 == 0) {
    plVar5 = (long *)0x0;
  }
  else {
    plVar5 = operator_new(0x20);
    *plVar5 = (long)&PTR_FUN_004f7660;
    *(undefined4 *)(plVar5 + 1) = 1;
    plVar5[2] = lVar4;
  }
                    /* try { // try from 00387f50 to 00487f53 has its CatchHandler @ 00388128 */
  puVar6 = (undefined1 *)0x0;
  if ((*(long *)(param_2 + 8) != 0) &&
     (puVar6 = *(undefined1 **)param_2, puVar6 == (undefined1 *)0x0)) {
    puVar6 = &DAT_00472008;
  }
                    /* try { // try from 00387f6c to 00487f6f has its CatchHandler @ 00388158 */
  cvWrite(*(undefined8 *)(param_1 + 0x10),puVar6,lVar4,0,0);
  if (plVar5 != (long *)0x0) {
    plVar1 = plVar5 + 1;
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))(plVar5);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 0038800c (192 bytes) name=~WriteStructContext

/* cv::internal::WriteStructContext::~WriteStructContext() */

void __thiscall cv::internal::WriteStructContext::~WriteStructContext(WriteStructContext *this)

{
  char cVar1;
  bool bVar2;
  undefined4 uVar3;
  int *piVar4;
  long lVar5;
  long local_10;
  undefined8 local_8;
  
  cvEndWriteStruct(*(undefined8 *)(*(long *)this + 0x10));
  *(long *)(*(long *)this + 0x30) = *(long *)(*(long *)this + 0x30) + -1;
  lVar5 = *(long *)this;
  if (*(long *)(lVar5 + 0x28) == *(long *)(lVar5 + 0x30)) {
    uVar3 = 6;
  }
  else {
    uVar3 = 6;
    if (*(char *)(*(long *)(lVar5 + 0x30) + -1) != '{') {
      uVar3 = 1;
    }
  }
  *(undefined4 *)(lVar5 + 0x40) = uVar3;
  local_10 = 0;
                    /* try { // try from 00388070 to 00488073 has its CatchHandler @ 00388230 */
  local_8 = 0;
  if ((String *)(lVar5 + 0x18) != (String *)&local_10) {
    String::deallocate((String *)(lVar5 + 0x18));
                    /* try { // try from 00388084 to 00488087 has its CatchHandler @ 0038817c */
    if (local_10 != 0) {
      piVar4 = (int *)(local_10 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(long *)(lVar5 + 0x18) = local_10;
    *(undefined8 *)(lVar5 + 0x20) = local_8;
  }
  String::deallocate((String *)&local_10);
                    /* try { // try from 003880c0 to 004880c3 has its CatchHandler @ 003881fc */
  return;
}


==================================================================

### FUNC 003880e0 (640 bytes) name=read

/* cv::read(cv::FileNode const&, cv::Mat&, cv::Mat const&) */

void cv::read(FileNode *param_1,Mat *param_2,Mat *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  char *pcVar7;
  AutoBuffer *in_x5;
  cv *local_80;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  undefined8 local_60;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  if (*(long *)(param_1 + 8) == 0) {
                    /* try { // try from 00388334 to 00488337 has its CatchHandler @ 003882b0 */
    local_50 = 0;
    local_60 = CONCAT44(local_60._4_4_,0x2010000);
    local_58 = param_2;
    Mat::copyTo(param_3,(_OutputArray *)&local_60);
    return;
  }
  local_80 = (cv *)cvRead(*(undefined8 *)param_1,*(long *)(param_1 + 8),0);
  if (local_80 != (cv *)0x0) {
                    /* try { // try from 00388118 to 0048811b has its CatchHandler @ 003881d4 */
    local_70 = param_2;
                    /* try { // try from 00388120 to 00488123 has its CatchHandler @ 003881cc */
    if ((*(uint *)local_80 & 0xffff0000) == 0x42420000) {
      if ((-1 < *(int *)(local_80 + 0x24)) && (-1 < *(int *)(local_80 + 0x20))) {
                    /* catch() { ... } // from try @ 0038818c with catch @ 003881b4 */
                    /* catch() { ... } // from try @ 003880dc with catch @ 003881cc
                       catch() { ... } // from try @ 00388120 with catch @ 003881cc */
        cvarrToMat(local_80,(void *)0x0,true,false,0,in_x5);
        local_68 = 0;
                    /* catch() { ... } // from try @ 00388118 with catch @ 003881d4 */
        local_64 = 0;
                    /* catch() { ... } // from try @ 00387d54 with catch @ 003881e4
                       catch() { ... } // from try @ 00387e28 with catch @ 003881e4 */
        local_78[0] = 0x2010000;
        Mat::copyTo((Mat *)&local_60,(_OutputArray *)local_78);
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
                    /* catch() { ... } // from try @ 003879c8 with catch @ 003881fc
                       catch() { ... } // from try @ 00387bc4 with catch @ 003881fc
                       catch() { ... } // from try @ 00387c4c with catch @ 003881fc
                       catch() { ... } // from try @ 00387e44 with catch @ 003881fc
                       catch() { ... } // from try @ 00387ea0 with catch @ 003881fc
                       catch() { ... } // from try @ 00387f0c with catch @ 003881fc
                       catch() { ... } // from try @ 003880c0 with catch @ 003881fc */
            iVar6 = *piVar1;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar3) {
              *piVar1 = iVar6 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
                    /* catch() { ... } // from try @ 00387c44 with catch @ 00388210 */
          if (iVar6 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
                    /* catch() { ... } // from try @ 00387bbc with catch @ 00388220 */
                    /* catch() { ... } // from try @ 00387934 with catch @ 00388230
                       catch() { ... } // from try @ 00388070 with catch @ 00388230 */
        if (0 < local_60._4_4_) {
          iVar6 = 0;
          do {
            *local_20 = 0;
                    /* catch() { ... } // from try @ 00387f04 with catch @ 00388240 */
            iVar6 = iVar6 + 1;
            local_20 = local_20 + 1;
          } while (iVar6 < local_60._4_4_);
        }
        goto LAB_00388250;
      }
    }
    else {
                    /* catch() { ... } // from try @ 00387f50 with catch @ 00388128 */
      if ((*(uint *)local_80 & 0xffff0000) == 0x42430000) {
        cvarrToMat(local_80,(void *)0x0,true,false,0,in_x5);
        local_68 = 0;
        local_64 = 0;
        local_78[0] = 0x2010000;
                    /* catch() { ... } // from try @ 00388334 with catch @ 003882b0
                       catch() { ... } // from try @ 003887bc with catch @ 003882b0
                       catch() { ... } // from try @ 00388b50 with catch @ 003882b0 */
        Mat::copyTo((Mat *)&local_60,(_OutputArray *)local_78);
        if (local_28 != 0) {
          piVar1 = (int *)(local_28 + 0x14);
          do {
            iVar6 = *piVar1;
            cVar2 = '\x01';
            bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
            if (bVar3) {
              *piVar1 = iVar6 + -1;
              cVar2 = ExclusiveMonitorsStatus();
            }
          } while (cVar2 != '\0');
          if (iVar6 == 1) {
            Mat::deallocate((Mat *)&local_60);
          }
        }
        if (0 < local_60._4_4_) {
          iVar6 = 0;
          do {
            *local_20 = 0;
            iVar6 = iVar6 + 1;
            local_20 = local_20 + 1;
          } while (iVar6 < local_60._4_4_);
        }
LAB_00388250:
                    /* catch() { ... } // from try @ 00387e98 with catch @ 00388250 */
        local_28 = 0;
        local_38 = 0;
        local_40 = 0;
        local_48 = 0;
        local_50 = 0;
        if (local_18 != auStack_10) {
                    /* catch() { ... } // from try @ 00387e38 with catch @ 00388260
                       catch() { ... } // from try @ 00387f18 with catch @ 00388260 */
          fastFree(local_18);
        }
        cvReleaseMat(&local_80);
        return;
      }
    }
  }
  cvRelease(&local_80);
  local_60 = 0;
  local_58 = (Mat *)0x0;
  pcVar7 = (char *)String::allocate((String *)&local_60,0x12);
  uVar5 = s_Unknown_array_type_0046afa8._8_8_;
  uVar4 = s_Unknown_array_type_0046afa8._0_8_;
                    /* try { // try from 00388154 to 00488157 has its CatchHandler @ 003877c0 */
                    /* catch() { ... } // from try @ 00387f6c with catch @ 00388158 */
  *(undefined2 *)(pcVar7 + 0x10) = s_Unknown_array_type_0046afa8._16_2_;
                    /* catch() { ... } // from try @ 00388084 with catch @ 0038817c */
  *(undefined8 *)pcVar7 = uVar4;
  *(undefined8 *)(pcVar7 + 8) = uVar5;
  error(-5,(String *)&local_60,"void cv::read(const cv::FileNode&, cv::Mat&, const cv::Mat&)",
        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x15ae);
                    /* try { // try from 0038818c to 004881b3 has its CatchHandler @ 003881b4 */
  String::deallocate((String *)&local_60);
  return;
}


==================================================================

### FUNC 003883bc (332 bytes) name=read

/* cv::read(cv::FileNode const&, cv::SparseMat&, cv::SparseMat const&) */

void cv::read(FileNode *param_1,SparseMat *param_2,SparseMat *param_3)

{
  long *plVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  CvSparseMat *this;
  long *plVar8;
  char *pcVar9;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(long *)(param_1 + 8) == 0) {
    SparseMat::copyTo(param_3,param_2);
    return;
  }
  this = (CvSparseMat *)cvRead(*(undefined8 *)param_1,*(long *)(param_1 + 8),0);
  if (this == (CvSparseMat *)0x0) {
    plVar8 = (long *)0x0;
  }
  else {
    plVar8 = operator_new(0x20);
    uVar2 = *(uint *)this;
    *(undefined4 *)(plVar8 + 1) = 1;
    plVar8[2] = (long)this;
    *plVar8 = (long)&PTR_FUN_004f7660;
                    /* try { // try from 00388428 to 0048842b has its CatchHandler @ 00388c14 */
    if ((uVar2 & 0xffff0000) == 0x42440000) goto LAB_00388490;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar9 = (char *)String::allocate((String *)&local_10,0x13);
  cVar3 = s_CV_IS_SPARSE_MAT_m__00472460[0x12];
  uVar7 = s_CV_IS_SPARSE_MAT_m__00472460._8_8_;
  uVar6 = s_CV_IS_SPARSE_MAT_m__00472460._0_8_;
  *(undefined2 *)(pcVar9 + 0x10) = s_CV_IS_SPARSE_MAT_m__00472460._16_2_;
  pcVar9[0x12] = cVar3;
  *(undefined8 *)pcVar9 = uVar6;
  *(undefined8 *)(pcVar9 + 8) = uVar7;
  error(-0xd7,(String *)&local_10,
        "void cv::read(const cv::FileNode&, cv::SparseMat&, const cv::SparseMat&)",
        "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x15ba);
  String::deallocate((String *)&local_10);
LAB_00388490:
  CvSparseMat::copyToSparseMat(this,param_2);
  if (plVar8 != (long *)0x0) {
    plVar1 = plVar8 + 1;
    do {
      lVar5 = *plVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar4) {
        *(int *)plVar1 = (int)lVar5 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
                    /* try { // try from 003884b8 to 00488663 has its CatchHandler @ 00388bf0 */
    if ((int)lVar5 == 1) {
      (**(code **)(*plVar8 + 0x10))(plVar8);
    }
  }
  return;
}


==================================================================

### FUNC 0038854c (20 bytes) name=type

/* cv::FileNode::type() const */

uint __thiscall cv::FileNode::type(FileNode *this)

{
  uint uVar1;
  
  uVar1 = 0;
  if (*(uint **)(this + 8) != (uint *)0x0) {
    uVar1 = **(uint **)(this + 8) & 7;
  }
  return uVar1;
}


==================================================================

### FUNC 00388560 (128 bytes) name=operator[]

/* cv::FileNode::operator[](int) const */

void cv::FileNode::operator[](int param_1)

{
  int iVar1;
  FileNode *this;
  undefined8 uVar2;
  int in_w1;
  undefined8 *in_x8;
  undefined8 uVar3;
  
  this = (FileNode *)(ulong)(uint)param_1;
  iVar1 = type(this);
  if (iVar1 == 5) {
    uVar3 = *(undefined8 *)this;
    uVar2 = cvGetSeqElem(*(undefined8 *)(*(long *)(this + 8) + 0x10));
    *in_x8 = uVar3;
    in_x8[1] = uVar2;
  }
  else {
    if (in_w1 == 0) {
      uVar2 = *(undefined8 *)this;
      in_x8[1] = *(undefined8 *)(this + 8);
      *in_x8 = uVar2;
      return;
    }
    *in_x8 = 0;
    in_x8[1] = 0;
  }
  return;
}


==================================================================

### FUNC 003885e0 (20 bytes) name=isNamed

/* cv::FileNode::isNamed() const */

uint __thiscall cv::FileNode::isNamed(FileNode *this)

{
  uint uVar1;
  
  uVar1 = 0;
  if (*(uint **)(this + 8) != (uint *)0x0) {
    uVar1 = **(uint **)(this + 8) >> 6 & 1;
  }
  return uVar1;
}


==================================================================

### FUNC 003885f4 (108 bytes) name=size

/* cv::FileNode::size() const */

ulong __thiscall cv::FileNode::size(FileNode *this)

{
  int iVar1;
  
  iVar1 = type(this);
  if (iVar1 == 6) {
    return (long)*(int *)(*(long *)(*(long *)(this + 8) + 0x10) + 0x68);
  }
  if (iVar1 != 5) {
    iVar1 = type(this);
    return (ulong)(iVar1 != 0);
  }
  return (long)*(int *)(*(long *)(*(long *)(this + 8) + 0x10) + 0x28);
}


==================================================================

### FUNC 00388660 (132 bytes) name=operator--

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE() */

FileNodeIterator * __thiscall cv::FileNodeIterator::operator--(FileNodeIterator *this)

{
  ulong uVar1;
  ulong uVar2;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uStack_8 = *(undefined8 *)(this + 8);
  local_10 = *(undefined8 *)this;
  uVar2 = *(ulong *)(this + 0x50);
  uVar1 = FileNode::size((FileNode *)&local_10);
                    /* try { // try from 00388688 to 0048868b has its CatchHandler @ 00388c04 */
  if (uVar2 < uVar1) {
                    /* try { // try from 00388690 to 004886e7 has its CatchHandler @ 00388bf0 */
    if (*(long *)(this + 0x18) != 0) {
      uVar1 = *(long *)(this + 0x28) - (long)*(int *)(*(long *)(this + 0x18) + 0x2c);
      *(ulong *)(this + 0x28) = uVar1;
      if (uVar1 < *(ulong *)(this + 0x30)) {
        cvChangeSeqBlock(this + 0x10,0xffffffff);
      }
    }
    *(long *)(this + 0x50) = *(long *)(this + 0x50) + 1;
  }
  return this;
}


==================================================================

### FUNC 003886e4 (56 bytes) name=operator--

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE(int) */

FileNodeIterator * __thiscall cv::FileNodeIterator::operator--(FileNodeIterator *this,int param_1)

{
  FileNodeIterator *in_x8;
  
  FileNodeIterator(in_x8,this);
  operator--(this);
  return in_x8;
}


==================================================================

### FUNC 0038871c (132 bytes) name=operator+=

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE(int) */

FileNodeIterator * __thiscall cv::FileNodeIterator::operator+=(FileNodeIterator *this,int param_1)

{
  ulong uVar1;
  long lVar2;
  undefined8 local_10;
  undefined8 uStack_8;
  
  if (param_1 != 0) {
    if (param_1 < 1) {
      uStack_8 = *(undefined8 *)(this + 8);
      local_10 = *(undefined8 *)this;
                    /* try { // try from 00388774 to 00488777 has its CatchHandler @ 00388b1c */
      uVar1 = FileNode::size((FileNode *)&local_10);
      lVar2 = *(long *)(this + 0x50);
      if ((ulong)(lVar2 - param_1) < uVar1) {
        uVar1 = lVar2 - param_1;
      }
      param_1 = (int)lVar2 - (int)uVar1;
    }
    else {
      lVar2 = *(long *)(this + 0x50);
      if ((int)lVar2 < param_1) {
        param_1 = (int)lVar2;
      }
    }
    *(long *)(this + 0x50) = lVar2 - param_1;
    if (*(long *)(this + 0x18) != 0) {
      cvSetSeqReaderPos(this + 0x10,param_1,1);
    }
  }
  return this;
}


==================================================================

### FUNC 003887a0 (8 bytes) name=operator-=

/* cv::FileNodeIterator::TEMPNAMEPLACEHOLDERVALUE(int) */

void __thiscall cv::FileNodeIterator::operator-=(FileNodeIterator *this,int param_1)

{
  operator+=(this,-param_1);
  return;
}


==================================================================

### FUNC 003887a8 (192 bytes) name=FileNodeIterator

/* cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long) */

void __thiscall
cv::FileNodeIterator::FileNodeIterator
          (FileNodeIterator *this,CvFileStorage *param_1,CvFileNode *param_2,ulong param_3)

{
  uint uVar1;
  undefined8 uVar2;
  CvFileStorage *local_10;
  CvFileNode *local_8;
  
                    /* try { // try from 003887bc to 0048880f has its CatchHandler @ 003882b0 */
  if ((param_1 != (CvFileStorage *)0x0) && (param_2 != (CvFileNode *)0x0)) {
    uVar1 = *(uint *)param_2;
    if ((uVar1 & 7) != 0) {
      *(CvFileStorage **)this = param_1;
      *(CvFileNode **)(this + 8) = param_2;
      if (((uVar1 >> 4 & 1) == 0) && ((uVar1 & 7) - 5 < 2)) {
                    /* try { // try from 00388848 to 0048884b has its CatchHandler @ 00388b1c */
        cvStartReadSeq(*(undefined8 *)(param_2 + 0x10),this + 0x10,uVar1 & 0x10);
        local_10 = param_1;
        local_8 = param_2;
                    /* try { // try from 00388858 to 0048885b has its CatchHandler @ 00388c24 */
        uVar2 = FileNode::size((FileNode *)&local_10);
        *(undefined8 *)(this + 0x50) = uVar2;
      }
      else {
        *(CvFileNode **)(this + 0x28) = param_2;
        *(undefined8 *)(this + 0x18) = 0;
        *(undefined8 *)(this + 0x50) = 1;
      }
      operator+=(this,(int)param_3);
      return;
    }
  }
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  return;
}


==================================================================

### FUNC 00388868 (120 bytes) name=read

/* cv::read(cv::FileNode const&, int&, int) */

void cv::read(FileNode *param_1,int *param_2,int param_3)

{
  int iVar1;
  long lVar2;
  uint *puVar3;
  
  puVar3 = *(uint **)(param_1 + 8);
  if (puVar3 == (uint *)0x0) {
    *param_2 = param_3;
    return;
  }
  if ((*puVar3 & 7) != 1) {
    iVar1 = 0x7fffffff;
    if ((*puVar3 & 7) == 2) {
      lVar2 = lrint(*(double *)(puVar3 + 4));
      iVar1 = (int)lVar2;
    }
    *param_2 = iVar1;
    return;
  }
  *param_2 = puVar3[4];
  return;
}


==================================================================

### FUNC 003888e0 (76 bytes) name=read

/* cv::read(cv::FileNode const&, float&, float) */

void cv::read(FileNode *param_1,float *param_2,float param_3)

{
  uint *puVar1;
  
                    /* try { // try from 003888e0 to 004888e3 has its CatchHandler @ 00388bf0 */
  puVar1 = *(uint **)(param_1 + 8);
  if (puVar1 != (uint *)0x0) {
                    /* try { // try from 003888ec to 004888ef has its CatchHandler @ 00388c24 */
    if ((*puVar1 & 7) == 1) {
      *param_2 = (float)(int)puVar1[4];
      return;
    }
    param_3 = DAT_0038892c;
    if ((*puVar1 & 7) == 2) {
      *param_2 = (float)*(double *)(puVar1 + 4);
      return;
    }
  }
  *param_2 = param_3;
  return;
}


==================================================================

### FUNC 00388930 (796 bytes) name=read

/* cv::read(cv::FileNode const&, std::vector<cv::DMatch, std::allocator<cv::DMatch> >&) */

void cv::read(FileNode *param_1,vector *param_2)

{
  undefined8 uVar1;
  float fVar2;
  ulong uVar3;
  FileNodeIterator *pFVar4;
  undefined8 *puVar5;
  CvFileStorage *pCVar6;
  undefined8 *puVar7;
  CvFileNode *pCVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  ulong uVar13;
  undefined8 *puVar14;
  ulong uVar15;
  undefined8 *puVar16;
  int local_d0;
  int iStack_cc;
  int local_c8;
  float local_c4;
  undefined8 local_c0;
  undefined8 local_b8;
  long local_b0;
  long local_a8;
  long local_88;
  long local_60;
  long local_58;
  long local_50;
  long local_30;
  long local_8;
  
                    /* try { // try from 00388944 to 00488947 has its CatchHandler @ 00388b54 */
                    /* try { // try from 00388960 to 00488963 has its CatchHandler @ 00388b64 */
  if (*(long *)(param_2 + 8) - *(long *)param_2 >> 4 != 0) {
    *(long *)(param_2 + 8) = *(long *)param_2;
  }
  FileNodeIterator::FileNodeIterator
            ((FileNodeIterator *)&local_b0,*(CvFileStorage **)param_1,*(CvFileNode **)(param_1 + 8),
             0);
  pCVar6 = *(CvFileStorage **)param_1;
  pCVar8 = *(CvFileNode **)(param_1 + 8);
  uVar3 = FileNode::size(param_1);
  FileNodeIterator::FileNodeIterator((FileNodeIterator *)&local_58,pCVar6,pCVar8,uVar3);
  fVar2 = DAT_00388c4c;
  do {
    if (local_b0 == local_58) goto LAB_00388ac8;
    while( true ) {
      local_d0 = -1;
      iStack_cc = -1;
      local_c8 = -1;
      local_c4 = fVar2;
      read((FileNode *)&local_c0,&local_d0,0);
      pFVar4 = (FileNodeIterator *)FileNodeIterator::operator++((FileNodeIterator *)&local_b0);
      local_c0 = *(undefined8 *)pFVar4;
      local_b8 = *(undefined8 *)(pFVar4 + 0x28);
      read((FileNode *)&local_c0,&iStack_cc,0);
      pFVar4 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar4);
      local_b8 = *(undefined8 *)(pFVar4 + 0x28);
      local_c0 = *(undefined8 *)pFVar4;
      read((FileNode *)&local_c0,&local_c8,0);
                    /* try { // try from 00388a64 to 00488a67 has its CatchHandler @ 00388c14 */
      pFVar4 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar4);
                    /* try { // try from 00388a78 to 00488a7b has its CatchHandler @ 00388b88 */
      local_c0 = *(undefined8 *)pFVar4;
      local_b8 = *(undefined8 *)(pFVar4 + 0x28);
      read((FileNode *)&local_c0,&local_c4,0.0);
      FileNodeIterator::operator++(pFVar4);
      puVar16 = *(undefined8 **)(param_2 + 0x10);
      puVar9 = *(undefined8 **)(param_2 + 8);
      if (puVar16 == puVar9) break;
      if (puVar9 != (undefined8 *)0x0) {
        *puVar9 = CONCAT44(iStack_cc,local_d0);
        puVar9[1] = CONCAT44(local_c4,local_c8);
      }
                    /* try { // try from 00388ab4 to 00488ab7 has its CatchHandler @ 00388bf0 */
      *(undefined8 **)(param_2 + 8) = puVar9 + 2;
      if (local_b0 == local_58) {
LAB_00388ac8:
                    /* try { // try from 00388ad0 to 00488ad3 has its CatchHandler @ 00388bd8 */
        if (((local_a8 == local_50) && (local_88 == local_30)) && (local_60 == local_8)) {
                    /* try { // try from 00388b0c to 00488b0f has its CatchHandler @ 00388be0 */
                    /* try { // try from 00388b14 to 00488b17 has its CatchHandler @ 00388bd8 */
          return;
        }
      }
    }
    puVar9 = *(undefined8 **)param_2;
                    /* catch() { ... } // from try @ 00388774 with catch @ 00388b1c
                       catch() { ... } // from try @ 00388848 with catch @ 00388b1c */
    lVar10 = (long)puVar16 - (long)puVar9;
    uVar3 = lVar10 >> 4;
    if (uVar3 == 0) {
      uVar13 = 0x10;
LAB_00388c20:
                    /* catch() { ... } // from try @ 00388858 with catch @ 00388c24
                       catch() { ... } // from try @ 003888ec with catch @ 00388c24 */
      puVar5 = operator_new(uVar13);
      puVar14 = puVar5 + 2;
      puVar12 = *(undefined8 **)(param_2 + 8);
      puVar9 = *(undefined8 **)param_2;
    }
    else {
      uVar15 = uVar3 * 2;
      uVar13 = 0xfffffffffffffff0;
      if (((uVar15 < uVar3) || (0xfffffffffffffff < uVar15)) || (uVar13 = uVar3 << 5, uVar15 != 0))
      goto LAB_00388c20;
                    /* try { // try from 00388b50 to 00488b53 has its CatchHandler @ 003882b0 */
                    /* catch() { ... } // from try @ 00388944 with catch @ 00388b54 */
      puVar14 = (undefined8 *)0x10;
      puVar5 = (undefined8 *)0x0;
      puVar12 = puVar16;
    }
    puVar11 = (undefined8 *)((long)puVar5 + lVar10);
    if (puVar11 != (undefined8 *)0x0) {
                    /* catch() { ... } // from try @ 00388960 with catch @ 00388b64 */
      *puVar11 = CONCAT44(iStack_cc,local_d0);
      puVar11[1] = CONCAT44(local_c4,local_c8);
    }
    puVar7 = puVar5;
    puVar11 = puVar9;
    if (puVar16 != puVar9) {
      do {
        if (puVar7 != (undefined8 *)0x0) {
          uVar1 = puVar11[1];
          *puVar7 = *puVar11;
          puVar7[1] = uVar1;
        }
        puVar11 = puVar11 + 2;
                    /* catch() { ... } // from try @ 00388a78 with catch @ 00388b88 */
        puVar7 = puVar7 + 2;
      } while (puVar16 != puVar11);
                    /* try { // try from 00388b98 to 00488bbf has its CatchHandler @ 00388bc0 */
      puVar14 = (undefined8 *)
                ((long)puVar5 + ((long)puVar16 - (long)(puVar9 + 2) & 0xfffffffffffffff0U) + 0x20);
    }
    puVar7 = puVar14;
    puVar11 = puVar16;
    if (puVar16 != puVar12) {
      do {
        if (puVar7 != (undefined8 *)0x0) {
          uVar1 = puVar11[1];
                    /* catch() { ... } // from try @ 00388b98 with catch @ 00388bc0 */
          *puVar7 = *puVar11;
          puVar7[1] = uVar1;
        }
        puVar11 = puVar11 + 2;
        puVar7 = puVar7 + 2;
      } while (puVar12 != puVar11);
                    /* catch() { ... } // from try @ 00388ad0 with catch @ 00388bd8
                       catch() { ... } // from try @ 00388b14 with catch @ 00388bd8 */
                    /* catch() { ... } // from try @ 00388b0c with catch @ 00388be0 */
      puVar14 = (undefined8 *)
                ((long)puVar14 + ((long)puVar12 - (long)(puVar16 + 2) & 0xfffffffffffffff0U) + 0x10)
      ;
    }
    if (puVar9 != (undefined8 *)0x0) {
                    /* catch() { ... } // from try @ 003884b8 with catch @ 00388bf0
                       catch() { ... } // from try @ 00388690 with catch @ 00388bf0
                       catch() { ... } // from try @ 003888e0 with catch @ 00388bf0
                       catch() { ... } // from try @ 00388ab4 with catch @ 00388bf0 */
      operator_delete(puVar9);
                    /* catch() { ... } // from try @ 00388688 with catch @ 00388c04 */
    }
    *(undefined8 **)param_2 = puVar5;
    *(undefined8 **)(param_2 + 8) = puVar14;
                    /* catch() { ... } // from try @ 00388428 with catch @ 00388c14
                       catch() { ... } // from try @ 00388a64 with catch @ 00388c14 */
    *(ulong *)(param_2 + 0x10) = (long)puVar5 + uVar13;
  } while( true );
}


==================================================================

### FUNC 00388c50 (72 bytes) name=read

/* cv::read(cv::FileNode const&, double&, double) */

void cv::read(FileNode *param_1,double *param_2,double param_3)

{
  uint *puVar1;
  
  puVar1 = *(uint **)(param_1 + 8);
  if (puVar1 != (uint *)0x0) {
    if ((*puVar1 & 7) == 1) {
      *param_2 = (double)(int)puVar1[4];
      return;
    }
    param_3 = DAT_00388c98;
    if ((*puVar1 & 7) == 2) {
      *param_2 = *(double *)(puVar1 + 4);
      return;
    }
  }
  *param_2 = param_3;
  return;
}


==================================================================

### FUNC 00388ca0 (240 bytes) name=read

/* cv::read(cv::FileNode const&, cv::String&, cv::String const&) */

void cv::read(FileNode *param_1,String *param_2,String *param_3)

{
  char cVar1;
  bool bVar2;
  size_t __n;
  void *__dest;
  int *piVar3;
  uint *puVar4;
  char *__s;
  long local_10;
  undefined8 local_8;
  
  puVar4 = *(uint **)(param_1 + 8);
  if (puVar4 == (uint *)0x0) {
    local_10 = *(long *)param_3;
    local_8 = *(undefined8 *)(param_3 + 8);
    if (local_10 != 0) {
      piVar3 = (int *)(local_10 + -4);
      do {
                    /* try { // try from 00388d7c to 00488dcf has its CatchHandler @ 00388c70 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  else if ((*puVar4 & 7) == 3) {
    __s = *(char **)(puVar4 + 6);
                    /* try { // try from 00388d24 to 00488d27 has its CatchHandler @ 00388df8 */
    local_10 = 0;
    local_8 = 0;
    if (__s != (char *)0x0) {
      __n = strlen(__s);
      __dest = (void *)String::allocate((String *)&local_10,__n);
      memcpy(__dest,__s,__n);
    }
  }
  else {
    local_10 = 0;
    local_8 = 0;
  }
  String::deallocate(param_2);
  if (local_10 != 0) {
    piVar3 = (int *)(local_10 + -4);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  *(long *)param_2 = local_10;
  *(undefined8 *)(param_2 + 8) = local_8;
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 00388da4 (348 bytes) name=_M_insert_aux

/* std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*,
   std::vector<char, std::allocator<char> > >, char const&) */

void __thiscall
std::vector<char,std::allocator<char>>::_M_insert_aux
          (vector<char,std::allocator<char>> *this,undefined1 *param_2,undefined1 *param_3)

{
  undefined1 uVar1;
  size_t sVar2;
  void *__dest;
  void *__dest_00;
  undefined1 *puVar3;
  long lVar4;
  ulong uVar5;
  ulong uVar6;
  
  puVar3 = *(undefined1 **)(this + 8);
  if (puVar3 != *(undefined1 **)(this + 0x10)) {
    lVar4 = 0;
    if (puVar3 != (undefined1 *)0x0) {
      *puVar3 = puVar3[-1];
      lVar4 = *(long *)(this + 8);
    }
    uVar5 = (lVar4 + -1) - (long)param_2;
    *(long *)(this + 8) = lVar4 + 1;
    uVar1 = *param_3;
                    /* try { // try from 00388df0 to 00488df3 has its CatchHandler @ 00388df8 */
    if (uVar5 != 0) {
      memmove((void *)(lVar4 + 1 + ~uVar5),param_2,uVar5);
    }
    *param_2 = uVar1;
                    /* catch() { ... } // from try @ 00388d24 with catch @ 00388df8
                       catch() { ... } // from try @ 00388df0 with catch @ 00388df8 */
    return;
  }
  uVar5 = (long)puVar3 - *(long *)this;
                    /* try { // try from 00388e30 to 00488e33 has its CatchHandler @ 00388c70 */
  if (uVar5 == 0xffffffffffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_insert_aux");
  }
                    /* catch() { ... } // from try @ 00388eb0 with catch @ 00388e34
                       catch() { ... } // from try @ 0038900c with catch @ 00388e34
                       catch() { ... } // from try @ 003895b4 with catch @ 00388e34
                       catch() { ... } // from try @ 00389920 with catch @ 00388e34
                       catch() { ... } // from try @ 00389960 with catch @ 00388e34
                       catch() { ... } // from try @ 00389994 with catch @ 00388e34 */
  if (uVar5 == 0) {
    uVar6 = 1;
  }
  else {
    uVar6 = uVar5 * 2;
    if (uVar6 < uVar5) {
      uVar6 = 0xffffffffffffffff;
    }
  }
  lVar4 = (long)param_2 - *(long *)this;
  __dest = operator_new(uVar6);
  if ((long)__dest + lVar4 != 0) {
    *(undefined1 *)((long)__dest + lVar4) = *param_3;
  }
  sVar2 = (long)param_2 - (long)*(void **)this;
  if (sVar2 != 0) {
    memmove(__dest,*(void **)this,sVar2);
  }
  __dest_00 = (void *)((long)__dest + sVar2 + 1);
  sVar2 = *(long *)(this + 8) - (long)param_2;
  if (sVar2 != 0) {
    __dest_00 = memmove(__dest_00,param_2,sVar2);
  }
  if (*(void **)this != (void *)0x0) {
    operator_delete(*(void **)this);
  }
  *(void **)this = __dest;
  *(size_t *)(this + 8) = (long)__dest_00 + sVar2;
  *(ulong *)(this + 0x10) = (long)__dest + uVar6;
                    /* try { // try from 00388eb0 to 00488fc3 has its CatchHandler @ 00388e34 */
  return;
}


==================================================================

### FUNC 00388f00 (1216 bytes) name=operator<<

/* cv::TEMPNAMEPLACEHOLDERVALUE(cv::FileStorage&, cv::String const&) */

FileStorage * cv::operator<<(FileStorage *param_1,String *param_2)

{
  uint uVar1;
  bool bVar2;
  char cVar3;
  long lVar4;
  size_t __n;
  void *__dest;
  undefined4 uVar5;
  int *piVar6;
  char *pcVar7;
  undefined8 uVar8;
  undefined1 *puVar9;
  undefined8 uVar10;
  char *pcVar11;
  char cVar12;
  long local_10;
  undefined8 local_8;
  
  pcVar11 = *(char **)param_2;
  if (pcVar11 == (char *)0x0) {
    pcVar11 = "";
  }
  if (*(code **)(*(long *)param_1 + 0x18) == FileStorage::isOpened) {
    if (*(long *)(param_1 + 0x10) == 0) {
      return param_1;
    }
    cVar3 = *(char *)(*(long *)(param_1 + 0x10) + 0x180);
  }
  else {
    cVar3 = (**(code **)(*(long *)param_1 + 0x18))(param_1);
  }
  if (cVar3 == '\0') {
    s_Invalid_fs_state_00472500[8] = (char)s_Invalid_fs_state_00472500._8_8_;
    s_Invalid_fs_state_00472500[9] = SUB81(s_Invalid_fs_state_00472500._8_8_,1);
    s_Invalid_fs_state_00472500[10] = SUB81(s_Invalid_fs_state_00472500._8_8_,2);
    s_Invalid_fs_state_00472500[0xb] = SUB81(s_Invalid_fs_state_00472500._8_8_,3);
    s_Invalid_fs_state_00472500[0xc] = SUB81(s_Invalid_fs_state_00472500._8_8_,4);
    s_Invalid_fs_state_00472500[0xd] = SUB81(s_Invalid_fs_state_00472500._8_8_,5);
    s_Invalid_fs_state_00472500[0xe] = SUB81(s_Invalid_fs_state_00472500._8_8_,6);
    s_Invalid_fs_state_00472500[0xf] = SUB81(s_Invalid_fs_state_00472500._8_8_,7);
    s_Invalid_fs_state_00472500[0] = (char)s_Invalid_fs_state_00472500._0_8_;
    s_Invalid_fs_state_00472500[1] = SUB81(s_Invalid_fs_state_00472500._0_8_,1);
    s_Invalid_fs_state_00472500[2] = SUB81(s_Invalid_fs_state_00472500._0_8_,2);
    s_Invalid_fs_state_00472500[3] = SUB81(s_Invalid_fs_state_00472500._0_8_,3);
    s_Invalid_fs_state_00472500[4] = SUB81(s_Invalid_fs_state_00472500._0_8_,4);
    s_Invalid_fs_state_00472500[5] = SUB81(s_Invalid_fs_state_00472500._0_8_,5);
    s_Invalid_fs_state_00472500[6] = SUB81(s_Invalid_fs_state_00472500._0_8_,6);
    s_Invalid_fs_state_00472500[7] = SUB81(s_Invalid_fs_state_00472500._0_8_,7);
    return param_1;
  }
  cVar3 = *pcVar11;
  uVar1 = (int)cVar3 & 0xffffffdf;
  cVar12 = (char)uVar1;
  if (cVar12 == ']') {
    lVar4 = *(long *)(param_1 + 0x30);
    if (*(long *)(param_1 + 0x28) == lVar4) {
      format("Extra closing \'%c\'",(String *)&local_10,(ulong)(uint)(int)cVar3);
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const cv::String&)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1458);
      String::deallocate((String *)&local_10);
      lVar4 = *(long *)(param_1 + 0x30);
      cVar3 = *pcVar11;
    }
    cVar12 = '[';
    if ((int)cVar3 != 0x5d) {
      cVar12 = '{';
    }
    if (cVar12 != *(char *)(lVar4 + -1)) {
      format("The closing \'%c\' does not match the opening \'%c\'",(String *)&local_10,
             (ulong)(uint)(int)cVar3);
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const cv::String&)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x145b);
      String::deallocate((String *)&local_10);
      lVar4 = *(long *)(param_1 + 0x30);
    }
                    /* try { // try from 00388ffc to 00488fff has its CatchHandler @ 00389910 */
    *(long *)(param_1 + 0x30) = lVar4 + -1;
    if (*(long *)(param_1 + 0x28) == lVar4 + -1) {
      uVar5 = 6;
    }
    else {
                    /* try { // try from 0038900c to 00489043 has its CatchHandler @ 00388e34 */
      uVar5 = 6;
      if (*(char *)(lVar4 + -2) != '{') {
        uVar5 = 1;
      }
    }
    *(undefined4 *)(param_1 + 0x40) = uVar5;
    cvEndWriteStruct(*(undefined8 *)(param_1 + 0x10));
    local_10 = 0;
    local_8 = 0;
    if ((String *)(param_1 + 0x18) != (String *)&local_10) {
      String::deallocate((String *)(param_1 + 0x18));
      if (local_10 != 0) {
        piVar6 = (int *)(local_10 + -4);
        do {
          cVar3 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
          if (bVar2) {
            *piVar6 = *piVar6 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      *(long *)(param_1 + 0x18) = local_10;
      *(undefined8 *)(param_1 + 0x20) = local_8;
    }
  }
  else {
    if (*(uint *)(param_1 + 0x40) == 6) {
      if (0x19 < (uVar1 - 0x41 & 0xff)) {
        format("Incorrect element name %s",(String *)&local_10,pcVar11);
        error(-2,(String *)&local_10,
              "cv::FileStorage& cv::operator<<(cv::FileStorage&, const cv::String&)",
              "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1465);
        String::deallocate((String *)&local_10);
      }
      if (param_2 != (String *)(param_1 + 0x18)) {
        String::deallocate((String *)(param_1 + 0x18));
        uVar8 = 0;
        if (*(long *)param_2 != 0) {
          piVar6 = (int *)(*(long *)param_2 + -4);
          do {
            cVar3 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
            if (bVar2) {
              *piVar6 = *piVar6 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          uVar8 = *(undefined8 *)param_2;
        }
        *(undefined8 *)(param_1 + 0x18) = uVar8;
        *(undefined8 *)(param_1 + 0x20) = *(undefined8 *)(param_2 + 8);
      }
      *(undefined4 *)(param_1 + 0x40) = 5;
      return param_1;
    }
    if ((*(uint *)(param_1 + 0x40) & 3) == 1) {
      if (cVar12 != '[') {
        if (((int)cVar3 == 0x5c) && (((pcVar11[1] & 0xdfU) + 0xa5 & 0xfd) == 0)) {
          local_10 = 0;
          pcVar11 = pcVar11 + 1;
          local_8 = 0;
          if (pcVar11 != (char *)0x0) {
            __n = strlen(pcVar11);
            __dest = (void *)String::allocate((String *)&local_10,__n);
            memcpy(__dest,pcVar11,__n);
          }
        }
        else {
          local_10 = *(long *)param_2;
          local_8 = *(undefined8 *)(param_2 + 8);
          if (local_10 != 0) {
            piVar6 = (int *)(local_10 + -4);
            do {
              cVar3 = '\x01';
              bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
              if (bVar2) {
                *piVar6 = *piVar6 + 1;
                cVar3 = ExclusiveMonitorsStatus();
              }
            } while (cVar3 != '\0');
          }
        }
        write(param_1,(String *)(param_1 + 0x18),(String *)&local_10);
        String::deallocate((String *)&local_10);
        if (*(int *)(param_1 + 0x40) != 5) {
          return param_1;
        }
        *(undefined4 *)(param_1 + 0x40) = 6;
        return param_1;
      }
      pcVar7 = *(char **)(param_1 + 0x30);
      if (pcVar7 == *(char **)(param_1 + 0x38)) {
        std::vector<char,std::allocator<char>>::_M_insert_aux
                  ((vector<char,std::allocator<char>> *)(param_1 + 0x28),pcVar7,pcVar11);
      }
      else {
        lVar4 = 0;
        if (pcVar7 != (char *)0x0) {
          *pcVar7 = cVar3;
          lVar4 = *(long *)(param_1 + 0x30);
        }
                    /* try { // try from 0038911c to 004894af has its CatchHandler @ 0038999c */
        *(long *)(param_1 + 0x30) = lVar4 + 1;
      }
      if (*pcVar11 == '{') {
        uVar5 = 6;
        uVar8 = 0xe;
        uVar10 = 6;
      }
      else {
        uVar8 = 0xd;
        uVar10 = 5;
        uVar5 = 1;
      }
      *(undefined4 *)(param_1 + 0x40) = uVar5;
      cVar3 = pcVar11[1];
      if (cVar3 == ':') {
        cVar3 = pcVar11[2];
        pcVar11 = pcVar11 + 2;
      }
      else {
        pcVar11 = pcVar11 + 1;
        uVar8 = uVar10;
      }
      puVar9 = (undefined1 *)0x0;
      if ((*(long *)(param_1 + 0x20) != 0) &&
         (puVar9 = *(undefined1 **)(param_1 + 0x18), puVar9 == (undefined1 *)0x0)) {
        puVar9 = &DAT_00472008;
      }
      if (cVar3 == '\0') {
        pcVar11 = (char *)0x0;
      }
      cvStartWriteStruct(*(undefined8 *)(param_1 + 0x10),puVar9,uVar8,pcVar11,0,0);
      local_10 = 0;
      local_8 = 0;
      if ((String *)(param_1 + 0x18) != (String *)&local_10) {
        String::deallocate((String *)(param_1 + 0x18));
        if (local_10 != 0) {
          piVar6 = (int *)(local_10 + -4);
          do {
            cVar3 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
            if (bVar2) {
              *piVar6 = *piVar6 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        *(long *)(param_1 + 0x18) = local_10;
        *(undefined8 *)(param_1 + 0x20) = local_8;
      }
    }
    else {
      local_10 = 0;
      local_8 = 0;
      pcVar11 = (char *)String::allocate((String *)&local_10,0x10);
      uVar8 = s_Invalid_fs_state_00472500._8_8_;
      *(undefined8 *)pcVar11 = s_Invalid_fs_state_00472500._0_8_;
      *(undefined8 *)(pcVar11 + 8) = uVar8;
      error(-2,(String *)&local_10,
            "cv::FileStorage& cv::operator<<(cv::FileStorage&, const cv::String&)",
            "/builds/master_pack-android/opencv/modules/core/src/persistence.cpp",0x1483);
    }
  }
  String::deallocate((String *)&local_10);
  return param_1;
}


==================================================================

### FUNC 0038944c (584 bytes) name=WriteStructContext

/* cv::internal::WriteStructContext::WriteStructContext(cv::FileStorage&, cv::String const&, int,
   cv::String const&) */

void __thiscall
cv::internal::WriteStructContext::WriteStructContext
          (WriteStructContext *this,FileStorage *param_1,String *param_2,int param_3,String *param_4
          )

{
  char cVar1;
  bool bVar2;
  size_t sVar3;
  void *__dest;
  void *__dest_00;
  undefined1 *puVar4;
  int *piVar5;
  long lVar6;
  long lVar7;
  undefined1 *puVar8;
  ulong uVar9;
  ulong uVar10;
  long local_10;
  undefined8 local_8;
  
  lVar7 = *(long *)(param_2 + 8);
  puVar4 = (undefined1 *)0x0;
  *(FileStorage **)this = param_1;
  if ((lVar7 != 0) && (puVar4 = *(undefined1 **)param_2, puVar4 == (undefined1 *)0x0)) {
    puVar4 = &DAT_00472008;
  }
  puVar8 = (undefined1 *)0x0;
  if ((*(long *)(param_4 + 8) != 0) &&
     (puVar8 = *(undefined1 **)param_4, puVar8 == (undefined1 *)0x0)) {
                    /* try { // try from 003895b4 to 00489607 has its CatchHandler @ 00388e34 */
    puVar8 = &DAT_00472008;
  }
  cvStartWriteStruct(*(undefined8 *)(param_1 + 0x10),puVar4,param_3,puVar8,0,0);
  lVar7 = *(long *)this;
  local_10 = 0;
  local_8 = 0;
  if ((String *)(lVar7 + 0x18) != (String *)&local_10) {
    String::deallocate((String *)(lVar7 + 0x18));
    if (local_10 != 0) {
      piVar5 = (int *)(local_10 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = *piVar5 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(long *)(lVar7 + 0x18) = local_10;
    *(undefined8 *)(lVar7 + 0x20) = local_8;
  }
  String::deallocate((String *)&local_10);
  if ((param_3 & 7U) == 5) {
    lVar7 = *(long *)this;
    puVar4 = *(undefined1 **)(lVar7 + 0x30);
    puVar8 = *(undefined1 **)(lVar7 + 0x38);
    *(undefined4 *)(lVar7 + 0x40) = 1;
    if (puVar8 != puVar4) {
      lVar6 = 0;
      if (puVar4 != (undefined1 *)0x0) {
        *puVar4 = 0x5b;
        lVar6 = *(long *)(lVar7 + 0x30);
      }
      *(long *)(lVar7 + 0x30) = lVar6 + 1;
      return;
    }
    uVar9 = (long)puVar8 - *(long *)(lVar7 + 0x28);
    if (uVar9 == 0xffffffffffffffff) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f39c("vector::_M_insert_aux");
    }
    uVar10 = 1;
    if ((uVar9 != 0) && (uVar10 = uVar9 * 2, uVar10 < uVar9)) {
      uVar10 = 0xffffffffffffffff;
    }
    __dest = operator_new(uVar10);
    if ((long)__dest + uVar9 != 0) {
      *(undefined1 *)((long)__dest + uVar9) = 0x5b;
    }
    sVar3 = (long)puVar8 - (long)*(void **)(lVar7 + 0x28);
    if (sVar3 != 0) {
      memmove(__dest,*(void **)(lVar7 + 0x28),sVar3);
    }
                    /* try { // try from 0038962c to 0048962f has its CatchHandler @ 003899a4 */
    __dest_00 = (void *)((long)__dest + sVar3 + 1);
    sVar3 = *(long *)(lVar7 + 0x30) - (long)puVar8;
    if (sVar3 != 0) {
      __dest_00 = memmove(__dest_00,puVar8,sVar3);
    }
                    /* try { // try from 0038963c to 0048963f has its CatchHandler @ 00389964 */
    if (*(void **)(lVar7 + 0x28) != (void *)0x0) {
      operator_delete(*(void **)(lVar7 + 0x28));
    }
    *(void **)(lVar7 + 0x28) = __dest;
    *(size_t *)(lVar7 + 0x30) = (long)__dest_00 + sVar3;
    *(ulong *)(lVar7 + 0x38) = (long)__dest + uVar10;
  }
  else {
    lVar7 = *(long *)this;
    *(undefined4 *)(lVar7 + 0x40) = 6;
    local_10 = CONCAT71(local_10._1_7_,0x7b);
    puVar4 = *(undefined1 **)(lVar7 + 0x30);
    if (puVar4 == *(undefined1 **)(lVar7 + 0x38)) {
      std::vector<char,std::allocator<char>>::_M_insert_aux
                ((vector<char,std::allocator<char>> *)(lVar7 + 0x28),puVar4,(String *)&local_10);
    }
    else {
      lVar6 = 0;
      if (puVar4 != (undefined1 *)0x0) {
        *puVar4 = 0x7b;
        lVar6 = *(long *)(lVar7 + 0x30);
      }
      *(long *)(lVar7 + 0x30) = lVar6 + 1;
    }
  }
                    /* try { // try from 0038954c to 0048954f has its CatchHandler @ 00389998 */
  return;
}


==================================================================

### FUNC 003896a8 (284 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, std::vector<cv::KeyPoint,
   std::allocator<cv::KeyPoint> > const&) */

void cv::write(FileStorage *param_1,String *param_2,vector *param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  WriteStructContext aWStack_18 [8];
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  internal::WriteStructContext::WriteStructContext
            (aWStack_18,param_1,param_2,0xd,(String *)&local_10);
  String::deallocate((String *)&local_10);
  lVar3 = *(long *)param_3;
  iVar2 = (int)(*(long *)(param_3 + 8) - lVar3 >> 2) * -0x49249249;
  if (0 < iVar2) {
    lVar4 = 0;
    while( true ) {
      lVar1 = lVar3 + lVar4;
      writeScalar(param_1,*(float *)(lVar3 + lVar4));
      writeScalar(param_1,*(float *)(lVar1 + 4));
      writeScalar(param_1,*(float *)(lVar1 + 8));
      writeScalar(param_1,*(float *)(lVar1 + 0xc));
      writeScalar(param_1,*(float *)(lVar1 + 0x10));
      writeScalar(param_1,*(int *)(lVar1 + 0x14));
                    /* try { // try from 00389790 to 0048979f has its CatchHandler @ 0038999c */
      writeScalar(param_1,*(int *)(lVar1 + 0x18));
      lVar4 = lVar4 + 0x1c;
      if (lVar4 + ((ulong)(iVar2 - 1) + 1) * -0x1c == 0) break;
      lVar3 = *(long *)param_3;
    }
  }
                    /* try { // try from 003897a8 to 004897ab has its CatchHandler @ 003899a4 */
  internal::WriteStructContext::~WriteStructContext(aWStack_18);
  return;
}


==================================================================

### FUNC 00389800 (224 bytes) name=write

/* cv::write(cv::FileStorage&, cv::String const&, std::vector<cv::DMatch, std::allocator<cv::DMatch>
   > const&) */

void cv::write(FileStorage *param_1,String *param_2,vector *param_3)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  WriteStructContext aWStack_18 [8];
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 00389814 to 00489827 has its CatchHandler @ 0038999c */
                    /* try { // try from 00389830 to 00489833 has its CatchHandler @ 00389924 */
  local_10 = 0;
  local_8 = 0;
  internal::WriteStructContext::WriteStructContext
            (aWStack_18,param_1,param_2,0xd,(String *)&local_10);
                    /* try { // try from 00389848 to 0048984b has its CatchHandler @ 003898d0 */
  String::deallocate((String *)&local_10);
  lVar3 = *(long *)param_3;
  iVar2 = (int)(*(long *)(param_3 + 8) - lVar3 >> 4);
  if (0 < iVar2) {
    lVar4 = 0;
    while( true ) {
      lVar1 = lVar3 + lVar4;
      writeScalar(param_1,*(int *)(lVar3 + lVar4));
      writeScalar(param_1,*(int *)(lVar1 + 4));
      writeScalar(param_1,*(int *)(lVar1 + 8));
      writeScalar(param_1,*(float *)(lVar1 + 0xc));
      lVar4 = lVar4 + 0x10;
      if (lVar4 == ((ulong)(iVar2 - 1) + 1) * 0x10) break;
      lVar3 = *(long *)param_3;
    }
  }
  internal::WriteStructContext::~WriteStructContext(aWStack_18);
                    /* catch() { ... } // from try @ 00389848 with catch @ 003898d0 */
  return;
}


==================================================================

### FUNC 0038991c (1300 bytes) name=_M_fill_insert

/* std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint>
   >::_M_fill_insert(__gnu_cxx::__normal_iterator<cv::KeyPoint*, std::vector<cv::KeyPoint,
   std::allocator<cv::KeyPoint> > >, unsigned long, cv::KeyPoint const&) */

void __thiscall
std::vector<cv::KeyPoint,std::allocator<cv::KeyPoint>>::_M_fill_insert
          (vector<cv::KeyPoint,std::allocator<cv::KeyPoint>> *this,undefined4 *param_2,ulong param_3
          ,undefined4 *param_4)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  long lVar10;
  undefined4 *puVar11;
  undefined4 *puVar12;
  long lVar13;
  undefined4 *puVar14;
  ulong uVar15;
  undefined4 *puVar16;
  undefined4 *puVar17;
  undefined4 *puVar18;
  long lVar19;
  ulong uVar20;
  
                    /* try { // try from 00389920 to 00489923 has its CatchHandler @ 00388e34 */
                    /* catch() { ... } // from try @ 00389830 with catch @ 00389924 */
  if (param_3 == 0) {
                    /* try { // try from 00389ab8 to 00489c27 has its CatchHandler @ 0038a0ec */
    return;
  }
  puVar18 = *(undefined4 **)(this + 8);
  if (param_3 <= (ulong)((*(long *)(this + 0x10) - (long)puVar18 >> 2) * 0x6db6db6db6db6db7)) {
                    /* try { // try from 00389960 to 00489963 has its CatchHandler @ 00388e34 */
                    /* catch() { ... } // from try @ 0038963c with catch @ 00389964
                       catch() { ... } // from try @ 003897dc with catch @ 00389964 */
    lVar19 = (long)puVar18 - (long)param_2;
    uVar1 = param_4[5];
    uVar2 = param_4[6];
    uVar3 = *param_4;
    uVar4 = param_4[1];
    uVar5 = param_4[2];
                    /* try { // try from 00389994 to 00489997 has its CatchHandler @ 00388e34 */
    uVar6 = param_4[3];
                    /* catch() { ... } // from try @ 0038954c with catch @ 00389998 */
    uVar7 = param_4[4];
                    /* catch() { ... } // from try @ 0038911c with catch @ 0038999c
                       catch() { ... } // from try @ 00389790 with catch @ 0038999c
                       catch() { ... } // from try @ 00389814 with catch @ 0038999c */
    if (param_3 < (ulong)((lVar19 >> 2) * 0x6db6db6db6db6db7)) {
                    /* catch() { ... } // from try @ 0038962c with catch @ 003899a4
                       catch() { ... } // from try @ 003897a8 with catch @ 003899a4 */
      puVar14 = puVar18 + param_3 * -7;
      puVar12 = puVar18;
      for (puVar11 = puVar14; puVar18 != puVar11; puVar11 = puVar11 + 7) {
        if (puVar12 != (undefined4 *)0x0) {
          uVar8 = puVar11[5];
                    /* catch() { ... } // from try @ 00389fd0 with catch @ 003899c8
                       catch() { ... } // from try @ 0038a0fc with catch @ 003899c8 */
          *puVar12 = *puVar11;
          puVar12[1] = puVar11[1];
          puVar12[2] = puVar11[2];
          puVar12[3] = puVar11[3];
          uVar9 = puVar11[4];
          puVar12[5] = uVar8;
          puVar12[6] = puVar11[6];
          puVar12[4] = uVar9;
        }
        puVar12 = puVar12 + 7;
      }
      *(undefined4 **)(this + 8) = puVar18 + param_3 * 7;
      puVar11 = puVar18;
      puVar12 = puVar14;
      if (0 < ((long)puVar14 - (long)param_2 >> 2) * 0x6db6db6db6db6db7) {
        do {
          puVar16 = puVar11 + -7;
          *puVar16 = puVar12[-7];
          uVar8 = puVar12[-2];
          puVar11[-6] = puVar12[-6];
          puVar11[-5] = puVar12[-5];
          puVar11[-4] = puVar12[-4];
          uVar9 = puVar12[-3];
          puVar11[-2] = uVar8;
          puVar11[-1] = puVar12[-1];
          puVar11[-3] = uVar9;
          puVar11 = puVar16;
          puVar12 = puVar12 + -7;
        } while (puVar16 != (undefined4 *)((long)puVar18 - ((long)puVar14 - (long)param_2)));
      }
      puVar18 = param_2 + param_3 * 7;
      for (; param_2 != puVar18; param_2 = param_2 + 7) {
        *param_2 = uVar3;
        param_2[5] = uVar1;
        param_2[1] = uVar4;
        param_2[6] = uVar2;
        param_2[2] = uVar5;
        param_2[3] = uVar6;
        param_2[4] = uVar7;
      }
      return;
    }
    lVar13 = param_3 + (lVar19 >> 2) * -0x6db6db6db6db6db7;
    puVar11 = puVar18;
    for (lVar10 = lVar13; lVar10 != 0; lVar10 = lVar10 + -1) {
      if (puVar11 != (undefined4 *)0x0) {
        puVar11[5] = uVar1;
        puVar11[6] = uVar2;
        *puVar11 = uVar3;
        puVar11[1] = uVar4;
        puVar11[2] = uVar5;
        puVar11[3] = uVar6;
        puVar11[4] = uVar7;
      }
      puVar11 = puVar11 + 7;
    }
    puVar14 = puVar18 + lVar13 * 7;
    *(undefined4 **)(this + 8) = puVar14;
    puVar12 = puVar14;
    puVar11 = param_2;
    if (puVar18 == param_2) {
      *(long *)(this + 8) = (long)puVar14 + lVar19;
      return;
    }
    do {
      if (puVar12 != (undefined4 *)0x0) {
        uVar8 = puVar11[5];
        *puVar12 = *puVar11;
        puVar12[1] = puVar11[1];
        puVar12[2] = puVar11[2];
        puVar12[3] = puVar11[3];
        uVar9 = puVar11[4];
        puVar12[5] = uVar8;
        puVar12[6] = puVar11[6];
        puVar12[4] = uVar9;
      }
      puVar11 = puVar11 + 7;
      puVar12 = puVar12 + 7;
    } while (puVar18 != puVar11);
    *(long *)(this + 8) = (long)puVar14 + lVar19;
    do {
      *param_2 = uVar3;
      param_2[5] = uVar1;
      param_2[1] = uVar4;
      param_2[6] = uVar2;
      param_2[2] = uVar5;
      puVar11 = param_2 + 7;
      param_2[3] = uVar6;
      param_2[4] = uVar7;
      param_2 = puVar11;
    } while (puVar18 != puVar11);
    return;
  }
  puVar11 = *(undefined4 **)this;
  lVar19 = (long)puVar18 - (long)puVar11 >> 2;
  uVar15 = lVar19 * 0x6db6db6db6db6db7;
  if (lVar19 * -0x6db6db6db6db6db7 + 0x924924924924924U < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar20 = uVar15;
  if (uVar15 < param_3) {
    uVar20 = param_3;
  }
  uVar20 = uVar20 + uVar15;
  if ((uVar15 < uVar20 || uVar15 - uVar20 == 0) && (uVar20 < 0x924924924924925)) {
    lVar19 = (long)param_2 - (long)puVar11;
    if (uVar20 == 0) {
      uVar20 = 0;
      puVar12 = (undefined4 *)0x0;
      goto LAB_00389c58;
    }
    uVar20 = uVar20 * 0x1c;
  }
  else {
    lVar19 = (long)param_2 - (long)puVar11;
    uVar20 = 0xfffffffffffffff0;
  }
                    /* try { // try from 00389c48 to 00489c4b has its CatchHandler @ 0038a100 */
  puVar12 = operator_new(uVar20);
  puVar18 = *(undefined4 **)(this + 8);
                    /* try { // try from 00389c54 to 00489c57 has its CatchHandler @ 0038a0ec */
  puVar11 = *(undefined4 **)this;
LAB_00389c58:
  puVar14 = (undefined4 *)((long)puVar12 + lVar19);
  uVar15 = param_3;
  do {
                    /* try { // try from 00389c60 to 00489c63 has its CatchHandler @ 0038a100 */
    if (puVar14 != (undefined4 *)0x0) {
      uVar1 = param_4[5];
      *puVar14 = *param_4;
      puVar14[1] = param_4[1];
      puVar14[2] = param_4[2];
      puVar14[3] = param_4[3];
      uVar2 = param_4[4];
      puVar14[5] = uVar1;
      puVar14[6] = param_4[6];
      puVar14[4] = uVar2;
    }
    uVar15 = uVar15 - 1;
    puVar14 = puVar14 + 7;
  } while (uVar15 != 0);
  puVar16 = puVar12;
  puVar14 = puVar11;
  if (param_2 != puVar11) {
    do {
      if (puVar16 != (undefined4 *)0x0) {
        uVar1 = puVar14[5];
        *puVar16 = *puVar14;
        puVar16[1] = puVar14[1];
                    /* try { // try from 00389cd0 to 00489e3f has its CatchHandler @ 0038a0ec */
        puVar16[2] = puVar14[2];
        puVar16[3] = puVar14[3];
        uVar2 = puVar14[4];
        puVar16[5] = uVar1;
        puVar16[6] = puVar14[6];
        puVar16[4] = uVar2;
      }
      puVar14 = puVar14 + 7;
      puVar16 = puVar16 + 7;
    } while (param_2 != puVar14);
    puVar16 = puVar12 + ((((ulong)((long)param_2 - (long)(puVar11 + 7)) >> 2) * 0x2db6db6db6db6db7 &
                         0x3fffffffffffffff) + 1) * 7;
  }
  puVar16 = puVar16 + param_3 * 7;
  puVar14 = param_2;
  puVar17 = puVar16;
  if (param_2 != puVar18) {
    do {
      if (puVar17 != (undefined4 *)0x0) {
        uVar1 = puVar14[5];
        *puVar17 = *puVar14;
        puVar17[1] = puVar14[1];
        puVar17[2] = puVar14[2];
        puVar17[3] = puVar14[3];
        uVar2 = puVar14[4];
        puVar17[5] = uVar1;
        puVar17[6] = puVar14[6];
        puVar17[4] = uVar2;
      }
      puVar14 = puVar14 + 7;
      puVar17 = puVar17 + 7;
    } while (puVar14 != puVar18);
    puVar16 = puVar16 + ((((ulong)((long)puVar14 - (long)(param_2 + 7)) >> 2) * 0x2db6db6db6db6db7 &
                         0x3fffffffffffffff) + 1) * 7;
  }
  if (puVar11 != (undefined4 *)0x0) {
    operator_delete(puVar11);
  }
  *(undefined4 **)this = puVar12;
  *(undefined4 **)(this + 8) = puVar16;
  *(ulong *)(this + 0x10) = (long)puVar12 + uVar20;
  return;
}


==================================================================

### FUNC 00389e30 (152 bytes) name=__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>

/* cv::KeyPoint* std::__uninitialized_copy<false>::__uninit_copy<cv::KeyPoint*,
   cv::KeyPoint*>(cv::KeyPoint*, cv::KeyPoint*, cv::KeyPoint*) */

KeyPoint *
std::__uninitialized_copy<false>::__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>
          (KeyPoint *param_1,KeyPoint *param_2,KeyPoint *param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  KeyPoint *pKVar3;
  KeyPoint *pKVar4;
  
  pKVar3 = param_1;
  pKVar4 = param_3;
  if (param_1 != param_2) {
    do {
      if (pKVar4 != (KeyPoint *)0x0) {
        uVar1 = *(undefined4 *)(pKVar3 + 0x14);
        *(undefined4 *)pKVar4 = *(undefined4 *)pKVar3;
        *(undefined4 *)(pKVar4 + 4) = *(undefined4 *)(pKVar3 + 4);
        *(undefined4 *)(pKVar4 + 8) = *(undefined4 *)(pKVar3 + 8);
                    /* try { // try from 00389e60 to 00489e63 has its CatchHandler @ 0038a124 */
        *(undefined4 *)(pKVar4 + 0xc) = *(undefined4 *)(pKVar3 + 0xc);
        uVar2 = *(undefined4 *)(pKVar3 + 0x10);
                    /* try { // try from 00389e6c to 00489e6f has its CatchHandler @ 0038a0ec */
        *(undefined4 *)(pKVar4 + 0x14) = uVar1;
        *(undefined4 *)(pKVar4 + 0x18) = *(undefined4 *)(pKVar3 + 0x18);
                    /* try { // try from 00389e78 to 00489e7b has its CatchHandler @ 0038a124 */
        *(undefined4 *)(pKVar4 + 0x10) = uVar2;
      }
      pKVar3 = pKVar3 + 0x1c;
      pKVar4 = pKVar4 + 0x1c;
    } while (param_2 != pKVar3);
    param_3 = param_3 + ((((ulong)((long)param_2 - (long)(param_1 + 0x1c)) >> 2) *
                          0x2db6db6db6db6db7 & 0x3fffffffffffffff) + 1) * 0x1c;
  }
  return param_3;
}


==================================================================

### FUNC 00389ec8 (968 bytes) name=read

/* cv::read(cv::FileNode const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&) */

void cv::read(FileNode *param_1,vector *param_2)

{
  KeyPoint *pKVar1;
  ulong uVar2;
  FileNodeIterator *pFVar3;
  CvFileStorage *pCVar4;
  CvFileNode *pCVar5;
  long lVar6;
  ulong uVar7;
  KeyPoint *pKVar8;
  KeyPoint *pKVar9;
  KeyPoint *pKVar10;
  long lVar11;
  ulong uVar12;
  undefined8 local_e0;
  undefined8 local_d8;
  float local_d0;
  float local_cc;
  float local_c8;
  float local_c4;
  float local_c0;
  int local_bc;
  int local_b8 [2];
  long local_b0;
  long local_a8;
  long local_88;
  long local_60;
  long local_58;
  long local_50;
  long local_30;
  long local_8;
  
                    /* try { // try from 00389ecc to 00489ecf has its CatchHandler @ 0038a0ec */
  if ((*(long *)(param_2 + 8) - *(long *)param_2 >> 2) * 0x6db6db6db6db6db7 != 0) {
    *(long *)(param_2 + 8) = *(long *)param_2;
  }
  FileNodeIterator::FileNodeIterator
            ((FileNodeIterator *)&local_b0,*(CvFileStorage **)param_1,*(CvFileNode **)(param_1 + 8),
             0);
  pCVar4 = *(CvFileStorage **)param_1;
  pCVar5 = *(CvFileNode **)(param_1 + 8);
  uVar2 = FileNode::size(param_1);
                    /* try { // try from 00389f70 to 00489f73 has its CatchHandler @ 0038a148 */
  FileNodeIterator::FileNodeIterator((FileNodeIterator *)&local_58,pCVar4,pCVar5,uVar2);
  do {
    if (local_58 == local_b0) goto LAB_0038a138;
    while( true ) {
      local_d0 = 0.0;
      local_cc = 0.0;
      local_bc = 0;
      local_c8 = 0.0;
      local_b8[0] = -1;
      local_c4 = -1.0;
      local_c0 = 0.0;
      read((FileNode *)&local_e0,&local_d0,0.0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++((FileNodeIterator *)&local_b0);
                    /* try { // try from 00389fd0 to 0048a023 has its CatchHandler @ 003899c8 */
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
      read((FileNode *)&local_e0,&local_cc,0.0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar3);
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
      read((FileNode *)&local_e0,&local_c8,0.0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar3);
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
      read((FileNode *)&local_e0,&local_c4,0.0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar3);
                    /* try { // try from 0038a058 to 0048a05b has its CatchHandler @ 0038a148 */
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
                    /* try { // try from 0038a070 to 0048a073 has its CatchHandler @ 0038a184 */
      read((FileNode *)&local_e0,&local_c0,0.0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar3);
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
      read((FileNode *)&local_e0,&local_bc,0);
      pFVar3 = (FileNodeIterator *)FileNodeIterator::operator++(pFVar3);
      local_e0 = *(undefined8 *)pFVar3;
      local_d8 = *(undefined8 *)(pFVar3 + 0x28);
      read((FileNode *)&local_e0,local_b8,0);
      FileNodeIterator::operator++(pFVar3);
      pKVar10 = *(KeyPoint **)(param_2 + 8);
      if (pKVar10 == *(KeyPoint **)(param_2 + 0x10)) break;
      if (pKVar10 != (KeyPoint *)0x0) {
                    /* catch() { ... } // from try @ 00389ab8 with catch @ 0038a0ec
                       catch() { ... } // from try @ 00389c54 with catch @ 0038a0ec
                       catch() { ... } // from try @ 00389cd0 with catch @ 0038a0ec
                       catch() { ... } // from try @ 00389e6c with catch @ 0038a0ec
                       catch() { ... } // from try @ 00389ecc with catch @ 0038a0ec */
        *(int *)(pKVar10 + 0x14) = local_bc;
                    /* try { // try from 0038a0fc to 0048a0ff has its CatchHandler @ 003899c8 */
                    /* catch() { ... } // from try @ 00389c48 with catch @ 0038a100
                       catch() { ... } // from try @ 00389c60 with catch @ 0038a100 */
        *(int *)(pKVar10 + 0x18) = local_b8[0];
        *(float *)pKVar10 = local_d0;
        *(float *)(pKVar10 + 8) = local_c8;
        *(float *)(pKVar10 + 0xc) = local_c4;
        *(float *)(pKVar10 + 0x10) = local_c0;
        *(float *)(pKVar10 + 4) = local_cc;
      }
                    /* catch() { ... } // from try @ 00389e60 with catch @ 0038a124
                       catch() { ... } // from try @ 00389e78 with catch @ 0038a124 */
      *(KeyPoint **)(param_2 + 8) = pKVar10 + 0x1c;
      if (local_58 == local_b0) {
LAB_0038a138:
                    /* catch() { ... } // from try @ 00389f70 with catch @ 0038a148
                       catch() { ... } // from try @ 0038a058 with catch @ 0038a148 */
        if (((local_a8 == local_50) && (local_88 == local_30)) && (local_60 == local_8)) {
                    /* catch() { ... } // from try @ 0038a070 with catch @ 0038a184 */
          return;
        }
      }
    }
    pKVar8 = *(KeyPoint **)param_2;
    lVar11 = (long)pKVar10 - (long)pKVar8;
    lVar6 = lVar11 >> 2;
    uVar2 = lVar6 * 0x6db6db6db6db6db7;
    if (uVar2 == 0) {
      uVar12 = 0x1c;
LAB_0038a27c:
      pKVar9 = operator_new(uVar12);
      pKVar8 = *(KeyPoint **)param_2;
    }
    else {
      uVar7 = lVar6 * -0x2492492492492492;
      uVar12 = 0xfffffffffffffff0;
                    /* catch() { ... } // from try @ 0038a208 with catch @ 0038a1c0
                       catch() { ... } // from try @ 0038a84c with catch @ 0038a1c0
                       catch() { ... } // from try @ 0038ab0c with catch @ 0038a1c0
                       catch() { ... } // from try @ 0038ab60 with catch @ 0038a1c0
                       catch() { ... } // from try @ 0038ac8c with catch @ 0038a1c0
                       catch() { ... } // from try @ 0038ad0c with catch @ 0038a1c0 */
      if ((uVar7 <= uVar2 && uVar2 != 0) || (0x924924924924924 < uVar7)) goto LAB_0038a27c;
      uVar12 = lVar6 * 8;
      pKVar9 = (KeyPoint *)0x0;
      if (uVar7 != 0) goto LAB_0038a27c;
    }
    pKVar1 = pKVar9 + lVar11;
    if (pKVar1 != (KeyPoint *)0x0) {
                    /* try { // try from 0038a208 to 0048a2b7 has its CatchHandler @ 0038a1c0 */
      *(float *)(pKVar9 + lVar11) = local_d0;
      *(int *)(pKVar1 + 0x14) = local_bc;
      *(int *)(pKVar1 + 0x18) = local_b8[0];
      *(float *)(pKVar1 + 8) = local_c8;
      *(float *)(pKVar1 + 0xc) = local_c4;
      *(float *)(pKVar1 + 4) = local_cc;
      *(float *)(pKVar1 + 0x10) = local_c0;
    }
    pKVar8 = std::__uninitialized_copy<false>::__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>
                       (pKVar8,pKVar10,pKVar9);
    pKVar10 = std::__uninitialized_copy<false>::__uninit_copy<cv::KeyPoint*,cv::KeyPoint*>
                        (pKVar10,*(KeyPoint **)(param_2 + 8),pKVar8 + 0x1c);
    if (*(void **)param_2 != (void *)0x0) {
      operator_delete(*(void **)param_2);
    }
    *(KeyPoint **)param_2 = pKVar9;
    *(KeyPoint **)(param_2 + 8) = pKVar10;
    *(KeyPoint **)(param_2 + 0x10) = pKVar9 + uVar12;
  } while( true );
}


==================================================================

### FUNC 0038a290 (1740 bytes) name=FUN_0038a290

int FUN_0038a290(int *param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  char *pcVar1;
  int *piVar2;
  int *piVar3;
  int *piVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  double *pdVar13;
  int *piVar14;
  uint uVar15;
  long lVar16;
  double *pdVar17;
  int iVar18;
  double *pdVar19;
  long lVar20;
  uint uVar21;
  ulong uVar22;
  int iVar23;
  long lVar24;
  int iVar25;
  double *pdVar26;
  uint uVar27;
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  double dVar31;
  undefined1 auVar32 [16];
  double dVar33;
  double dVar34;
  double dVar35;
  
  uVar15 = (uint)param_5;
  if (param_2 == 0) {
    iVar10 = (int)uVar15 % 4;
    iVar25 = 0;
    if (iVar10 == 1) {
      dVar31 = *param_3;
      piVar14 = param_1;
      if (0 < param_4 + -3) {
                    /* try { // try from 0038a7e8 to 0048a7eb has its CatchHandler @ 0038acbc */
        uVar22 = -(ulong)((uVar15 & 0x3fffffff) >> 0x1d) & 0xfffffffc00000000 |
                 (ulong)(uVar15 << 2) << 2;
        iVar25 = 0;
        do {
          iVar23 = *piVar14;
          iVar25 = iVar25 + 4;
          piVar2 = (int *)((long)piVar14 +
                          (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2
                          ));
          piVar3 = (int *)((long)piVar14 +
                          (-(ulong)((uVar15 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                          (ulong)(uVar15 * 2) << 2));
          piVar4 = (int *)((long)piVar14 +
                          (-(ulong)(uVar15 * 3 >> 0x1f) & 0xfffffffc00000000 |
                          (ulong)(uVar15 * 3) << 2));
          piVar14 = (int *)((long)piVar14 + uVar22);
          dVar31 = dVar31 + (double)(iVar23 + *piVar2 + *piVar3 + *piVar4);
        } while (iVar25 < param_4 + -3);
        uVar5 = param_4 - 4U >> 2;
        iVar25 = (uVar5 + 1) * 4;
        piVar14 = (int *)((long)param_1 + uVar22 + uVar5 * uVar22);
      }
                    /* try { // try from 0038a84c to 0048a89f has its CatchHandler @ 0038a1c0 */
      iVar23 = iVar25;
      if (iVar25 < param_4) {
        do {
          iVar23 = *piVar14;
          iVar25 = iVar25 + 1;
          piVar14 = (int *)((long)piVar14 +
                           (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                           (param_5 & 0xffffffff) << 2));
          dVar31 = dVar31 + (double)iVar23;
          iVar23 = param_4;
        } while (iVar25 != param_4);
      }
      *param_3 = dVar31;
    }
    else if (iVar10 == 2) {
      dVar33 = *param_3;
      dVar31 = param_3[1];
      iVar23 = iVar25;
      if (0 < param_4) {
        iVar25 = 0;
        piVar14 = param_1;
        do {
          iVar23 = *piVar14;
          iVar25 = iVar25 + 1;
          piVar2 = piVar14 + 1;
          piVar14 = (int *)((long)piVar14 +
                           (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                           (param_5 & 0xffffffff) << 2));
          dVar33 = dVar33 + (double)iVar23;
          dVar31 = dVar31 + (double)*piVar2;
          iVar23 = param_4;
        } while (iVar25 != param_4);
      }
      *param_3 = dVar33;
      param_3[1] = dVar31;
    }
    else {
      iVar23 = 0;
      if (iVar10 == 3) {
        dVar34 = *param_3;
                    /* try { // try from 0038a8e4 to 0048a8e7 has its CatchHandler @ 0038ac5c */
        dVar33 = param_3[1];
        dVar31 = param_3[2];
        if (0 < param_4) {
          iVar25 = 0;
                    /* try { // try from 0038a8f4 to 0048a8f7 has its CatchHandler @ 0038ac90 */
          piVar14 = param_1;
          do {
            iVar23 = *piVar14;
            iVar25 = iVar25 + 1;
            piVar2 = piVar14 + 1;
            piVar3 = piVar14 + 2;
            piVar14 = (int *)((long)piVar14 +
                             (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_5 & 0xffffffff) << 2));
            dVar34 = dVar34 + (double)iVar23;
            dVar33 = dVar33 + (double)*piVar2;
            dVar31 = dVar31 + (double)*piVar3;
            iVar23 = param_4;
          } while (iVar25 != param_4);
        }
        *param_3 = dVar34;
        param_3[1] = dVar33;
        param_3[2] = dVar31;
      }
    }
    if (iVar10 < (int)uVar15) {
      lVar20 = (long)iVar10;
      lVar24 = lVar20;
      pdVar26 = param_3 + lVar20;
      lVar16 = lVar20 + 4;
      while( true ) {
        dVar35 = *pdVar26;
        piVar14 = param_1 + lVar24 + (int)(uVar15 * iVar23);
        dVar34 = pdVar26[1];
        dVar33 = pdVar26[2];
        dVar31 = pdVar26[3];
        iVar25 = iVar23;
        if (iVar23 < param_4) {
          do {
            iVar25 = *piVar14;
            iVar23 = iVar23 + 1;
            piVar2 = piVar14 + 1;
            piVar3 = piVar14 + 2;
            piVar4 = piVar14 + 3;
            piVar14 = (int *)((long)piVar14 +
                             (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_5 & 0xffffffff) << 2));
            dVar35 = dVar35 + (double)iVar25;
            dVar34 = dVar34 + (double)*piVar2;
            dVar33 = dVar33 + (double)*piVar3;
            dVar31 = dVar31 + (double)*piVar4;
            iVar25 = param_4;
          } while (iVar23 != param_4);
        }
        iVar23 = iVar25;
        pdVar26[1] = dVar34;
        *pdVar26 = dVar35;
        pdVar26[3] = dVar31;
        pdVar26[2] = dVar33;
        if (pdVar26 + 4 == param_3 + lVar20 + 4 + (ulong)((uVar15 - 1) - iVar10 >> 2) * 4) break;
        lVar24 = lVar16;
        pdVar26 = pdVar26 + 4;
        lVar16 = lVar16 + 4;
      }
    }
    return param_4;
  }
  if (uVar15 == 1) {
    dVar31 = *param_3;
    if (param_4 < 1) {
      iVar25 = 0;
    }
    else {
      lVar24 = 0;
      iVar25 = 0;
      do {
        if (*(char *)(param_2 + lVar24) != '\0') {
          iVar25 = iVar25 + 1;
          dVar31 = dVar31 + (double)param_1[lVar24];
        }
        lVar24 = lVar24 + 1;
      } while ((int)lVar24 < param_4);
    }
    *param_3 = dVar31;
    return iVar25;
  }
  if (uVar15 == 3) {
    dVar34 = *param_3;
    dVar33 = param_3[1];
    dVar31 = param_3[2];
    if (param_4 < 1) {
      iVar25 = 0;
    }
    else {
      lVar24 = 0;
      iVar25 = 0;
      do {
        pcVar1 = (char *)(param_2 + lVar24);
        lVar24 = lVar24 + 1;
        if (*pcVar1 != '\0') {
          iVar25 = iVar25 + 1;
          dVar34 = dVar34 + (double)*param_1;
          dVar33 = dVar33 + (double)param_1[1];
          dVar31 = dVar31 + (double)param_1[2];
        }
        param_1 = param_1 + 3;
      } while ((int)lVar24 < param_4);
    }
    *param_3 = dVar34;
    param_3[1] = dVar33;
    param_3[2] = dVar31;
    return iVar25;
  }
  if (param_4 < 1) {
    iVar25 = 0;
  }
  else {
    uVar5 = (uVar15 - 4 >> 2) + 1;
    lVar24 = 0;
    iVar10 = uVar5 * 4;
    if ((int)(uVar15 - 3) < 1) {
      iVar10 = 0;
    }
    iVar25 = 0;
    iVar23 = iVar10 + 1;
    uVar12 = uVar15 - iVar10;
    iVar6 = iVar10 + 2;
    lVar16 = (long)iVar10;
    iVar7 = iVar10 + 3;
    pdVar26 = param_3 + lVar16;
    uVar9 = (uint)((ulong)pdVar26 >> 3) & 1;
    if (uVar12 < uVar9) {
      uVar9 = uVar12;
    }
    do {
      if (*(char *)(param_2 + lVar24) != '\0') {
        if (0 < (int)(uVar15 - 3)) {
          pdVar17 = param_3 + 2;
          uVar21 = 0;
          pdVar19 = param_3;
          piVar14 = param_1;
          do {
                    /* try { // try from 0038a3a4 to 0048a74b has its CatchHandler @ 0038acb4 */
            uVar21 = uVar21 + 1;
            dVar31 = *pdVar17;
            dVar33 = pdVar17[1];
            auVar32._0_8_ = (long)*piVar14;
            auVar32._8_8_ = (long)piVar14[1];
            auVar28._0_8_ = (long)piVar14[2];
            auVar28._8_8_ = (long)piVar14[3];
            auVar32 = NEON_scvtf(auVar32,8);
            auVar28 = NEON_scvtf(auVar28,8);
            pdVar19[1] = pdVar19[1] + auVar32._8_8_;
            *pdVar19 = *pdVar19 + auVar32._0_8_;
            pdVar19 = pdVar19 + 4;
            pdVar17[1] = dVar33 + auVar28._8_8_;
            *pdVar17 = dVar31 + auVar28._0_8_;
            pdVar17 = pdVar17 + 4;
            piVar14 = piVar14 + 4;
          } while (uVar21 < uVar5);
        }
        if (iVar10 < (int)uVar15) {
          uVar21 = uVar9;
          if (uVar12 < 5) {
            uVar21 = uVar12;
          }
          iVar18 = iVar10;
          if (uVar21 != 0) {
            *pdVar26 = *pdVar26 + (double)param_1[lVar16];
            iVar18 = iVar23;
            if (((uVar21 != 1) &&
                (param_3[iVar23] = param_3[iVar23] + (double)param_1[iVar23], iVar18 = iVar6,
                uVar21 != 2)) &&
               (param_3[iVar6] = param_3[iVar6] + (double)param_1[iVar6], iVar18 = iVar7,
               uVar21 == 4)) {
              param_3[iVar7] = param_3[iVar7] + (double)param_1[iVar7];
              iVar18 = iVar10 + 4;
            }
            if (uVar21 == uVar12) goto LAB_0038a56c;
          }
          uVar8 = ((uVar12 - uVar21) - 4 >> 2) + 1;
          iVar11 = uVar8 * 4;
          if (2 < (uVar12 - 1) - uVar21) {
            uVar27 = 0;
            pdVar17 = param_3 + (ulong)uVar21 + lVar16;
            piVar14 = param_1 + (ulong)uVar21 + lVar16;
            pdVar19 = pdVar17;
            do {
              pdVar13 = pdVar17 + 1;
              dVar31 = *pdVar17;
              dVar34 = pdVar17[3];
              dVar33 = pdVar17[2];
              uVar27 = uVar27 + 1;
              pdVar17 = pdVar17 + 4;
              auVar30._0_8_ = (long)*piVar14;
              auVar30._8_8_ = (long)piVar14[1];
              auVar29._0_8_ = (long)piVar14[2];
              auVar29._8_8_ = (long)piVar14[3];
              auVar32 = NEON_scvtf(auVar30,8);
              auVar28 = NEON_scvtf(auVar29,8);
              pdVar19[1] = *pdVar13 + auVar32._8_8_;
              *pdVar19 = dVar31 + auVar32._0_8_;
              pdVar19[3] = auVar28._8_8_ + dVar34;
              pdVar19[2] = auVar28._0_8_ + dVar33;
              piVar14 = piVar14 + 4;
              pdVar19 = pdVar19 + 4;
            } while (uVar27 < uVar8);
            iVar18 = iVar18 + iVar11;
            if (iVar11 == uVar12 - uVar21) goto LAB_0038a56c;
          }
          iVar11 = iVar18 + 1;
          param_3[iVar18] = param_3[iVar18] + (double)param_1[iVar18];
          if (iVar11 < (int)uVar15) {
            iVar18 = iVar18 + 2;
            param_3[iVar11] = param_3[iVar11] + (double)param_1[iVar11];
            if (iVar18 < (int)uVar15) {
              param_3[iVar18] = param_3[iVar18] + (double)param_1[iVar18];
            }
          }
        }
LAB_0038a56c:
        iVar25 = iVar25 + 1;
      }
      lVar24 = lVar24 + 1;
      param_1 = (int *)((long)param_1 +
                       (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2));
    } while ((int)lVar24 < param_4);
  }
  return iVar25;
}


==================================================================

### FUNC 0038a95c (1724 bytes) name=FUN_0038a95c

int FUN_0038a95c(float *param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  char *pcVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  uint uVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  double *pdVar13;
  float *pfVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  double *pdVar18;
  int iVar19;
  double *pdVar20;
  ulong uVar21;
  uint uVar22;
  double *pdVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  int iVar27;
  uint uVar28;
  undefined8 uVar29;
  undefined8 uVar30;
  float fVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  
  uVar15 = (uint)param_5;
  if (param_2 == 0) {
                    /* catch() { ... } // from try @ 0038ad34 with catch @ 0038ad70 */
    iVar7 = (int)uVar15 % 4;
    iVar27 = 0;
    if (iVar7 == 1) {
      dVar32 = *param_3;
      pfVar14 = param_1;
      if (0 < param_4 + -3) {
        uVar21 = -(ulong)((uVar15 & 0x3fffffff) >> 0x1d) & 0xfffffffc00000000 |
                 (ulong)(uVar15 << 2) << 2;
        iVar27 = 0;
        do {
          fVar31 = *pfVar14;
          iVar27 = iVar27 + 4;
          pfVar10 = (float *)((long)pfVar14 +
                             (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_5 & 0xffffffff) << 2));
          pfVar11 = (float *)((long)pfVar14 +
                             (-(ulong)((uVar15 & 0x7fffffff) >> 0x1e) & 0xfffffffc00000000 |
                             (ulong)(uVar15 * 2) << 2));
          pfVar12 = (float *)((long)pfVar14 +
                             (-(ulong)(uVar15 * 3 >> 0x1f) & 0xfffffffc00000000 |
                             (ulong)(uVar15 * 3) << 2));
          pfVar14 = (float *)((long)pfVar14 + uVar21);
                    /* try { // try from 0038aed8 to 0048aedb has its CatchHandler @ 0038b478 */
          dVar32 = dVar32 + (double)(fVar31 + *pfVar10 + *pfVar11 + *pfVar12);
        } while (iVar27 < param_4 + -3);
        uVar2 = param_4 - 4U >> 2;
        iVar27 = (uVar2 + 1) * 4;
        pfVar14 = (float *)((long)param_1 + uVar21 + uVar2 * uVar21);
      }
                    /* try { // try from 0038af04 to 0048af87 has its CatchHandler @ 0038ad8c */
      iVar16 = iVar27;
      if (iVar27 < param_4) {
        do {
          fVar31 = *pfVar14;
          iVar27 = iVar27 + 1;
          pfVar14 = (float *)((long)pfVar14 +
                             (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_5 & 0xffffffff) << 2));
          dVar32 = dVar32 + (double)fVar31;
          iVar16 = param_4;
        } while (iVar27 != param_4);
      }
      *param_3 = dVar32;
    }
    else if (iVar7 == 2) {
      dVar33 = *param_3;
      dVar32 = param_3[1];
      iVar16 = iVar27;
      if (0 < param_4) {
        iVar27 = 0;
        pfVar14 = param_1;
        do {
          fVar31 = *pfVar14;
          iVar27 = iVar27 + 1;
          pfVar10 = pfVar14 + 1;
          pfVar14 = (float *)((long)pfVar14 +
                             (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_5 & 0xffffffff) << 2));
          dVar33 = dVar33 + (double)fVar31;
          dVar32 = dVar32 + (double)*pfVar10;
          iVar16 = param_4;
        } while (iVar27 != param_4);
      }
      *param_3 = dVar33;
      param_3[1] = dVar32;
    }
    else {
                    /* try { // try from 0038ad88 to 0048ad8b has its CatchHandler @ 0038ad10 */
      iVar16 = 0;
                    /* catch() { ... } // from try @ 0038adb0 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038af04 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038afcc with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038b288 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038b448 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038b460 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038b474 with catch @ 0038ad8c
                       catch() { ... } // from try @ 0038b49c with catch @ 0038ad8c */
      if (iVar7 == 3) {
        dVar34 = *param_3;
        dVar33 = param_3[1];
        dVar32 = param_3[2];
        if (0 < param_4) {
          iVar27 = 0;
          pfVar14 = param_1;
          do {
            fVar31 = *pfVar14;
            iVar27 = iVar27 + 1;
            pfVar10 = pfVar14 + 1;
                    /* try { // try from 0038afc0 to 0048afc3 has its CatchHandler @ 0038b464 */
            pfVar11 = pfVar14 + 2;
            pfVar14 = (float *)((long)pfVar14 +
                               (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                               (param_5 & 0xffffffff) << 2));
                    /* try { // try from 0038afcc to 0048b01b has its CatchHandler @ 0038ad8c */
            dVar34 = dVar34 + (double)fVar31;
            dVar33 = dVar33 + (double)*pfVar10;
            dVar32 = dVar32 + (double)*pfVar11;
            iVar16 = param_4;
          } while (iVar27 != param_4);
        }
        *param_3 = dVar34;
        param_3[1] = dVar33;
        param_3[2] = dVar32;
      }
    }
    if (iVar7 < (int)uVar15) {
      lVar26 = (long)iVar7;
                    /* try { // try from 0038adb0 to 0048ae07 has its CatchHandler @ 0038ad8c */
      pdVar23 = param_3 + lVar26;
      lVar25 = lVar26 + 4;
      lVar17 = lVar26;
      while( true ) {
        lVar24 = lVar25;
        dVar35 = *pdVar23;
        pfVar14 = param_1 + lVar17 + (int)(uVar15 * iVar16);
        dVar34 = pdVar23[1];
        dVar33 = pdVar23[2];
        dVar32 = pdVar23[3];
        iVar27 = iVar16;
        if (iVar16 < param_4) {
          do {
            fVar31 = *pfVar14;
            iVar16 = iVar16 + 1;
            pfVar10 = pfVar14 + 1;
            pfVar11 = pfVar14 + 2;
            pfVar12 = pfVar14 + 3;
            pfVar14 = (float *)((long)pfVar14 +
                               (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                               (param_5 & 0xffffffff) << 2));
            dVar35 = dVar35 + (double)fVar31;
            dVar34 = dVar34 + (double)*pfVar10;
            dVar33 = dVar33 + (double)*pfVar11;
            dVar32 = dVar32 + (double)*pfVar12;
            iVar27 = param_4;
                    /* try { // try from 0038ae24 to 0048ae4b has its CatchHandler @ 0038b478 */
          } while (iVar16 != param_4);
        }
        iVar16 = iVar27;
        pdVar23[1] = dVar34;
        *pdVar23 = dVar35;
        pdVar23[3] = dVar32;
        pdVar23[2] = dVar33;
        if (pdVar23 + 4 == param_3 + lVar26 + 4 + (ulong)((uVar15 - 1) - iVar7 >> 2) * 4) break;
        pdVar23 = pdVar23 + 4;
        lVar25 = lVar24 + 4;
        lVar17 = lVar24;
                    /* try { // try from 0038ae64 to 0048ae67 has its CatchHandler @ 0038b4a0 */
      }
    }
    return param_4;
  }
  if (uVar15 == 1) {
    dVar32 = *param_3;
    if (param_4 < 1) {
      iVar27 = 0;
    }
    else {
      lVar25 = 0;
                    /* try { // try from 0038ac8c to 0048ac8f has its CatchHandler @ 0038a1c0 */
      iVar27 = 0;
      do {
                    /* catch() { ... } // from try @ 0038a8f4 with catch @ 0038ac90
                       catch() { ... } // from try @ 0038aa94 with catch @ 0038ac90 */
        if (*(char *)(param_2 + lVar25) != '\0') {
          iVar27 = iVar27 + 1;
          dVar32 = dVar32 + (double)param_1[lVar25];
        }
        lVar25 = lVar25 + 1;
      } while ((int)lVar25 < param_4);
    }
                    /* catch() { ... } // from try @ 0038a3a4 with catch @ 0038acb4
                       catch() { ... } // from try @ 0038aa48 with catch @ 0038acb4
                       catch() { ... } // from try @ 0038aacc with catch @ 0038acb4 */
    *param_3 = dVar32;
                    /* catch() { ... } // from try @ 0038a7e8 with catch @ 0038acbc
                       catch() { ... } // from try @ 0038aae8 with catch @ 0038acbc */
    return iVar27;
  }
  if (uVar15 == 3) {
    dVar34 = *param_3;
    dVar33 = param_3[1];
    dVar32 = param_3[2];
    if (param_4 < 1) {
      iVar27 = 0;
    }
    else {
      lVar25 = 0;
      iVar27 = 0;
      do {
        pcVar1 = (char *)(param_2 + lVar25);
        lVar25 = lVar25 + 1;
                    /* catch() { ... } // from try @ 0038ab58 with catch @ 0038acfc */
        if (*pcVar1 != '\0') {
          iVar27 = iVar27 + 1;
                    /* try { // try from 0038ad0c to 0048ad0f has its CatchHandler @ 0038a1c0 */
                    /* catch() { ... } // from try @ 0038ad88 with catch @ 0038ad10 */
          dVar34 = dVar34 + (double)*param_1;
          dVar33 = dVar33 + (double)param_1[1];
          dVar32 = dVar32 + (double)param_1[2];
        }
        param_1 = param_1 + 3;
      } while ((int)lVar25 < param_4);
    }
                    /* try { // try from 0038ad34 to 0048ad37 has its CatchHandler @ 0038ad70 */
    *param_3 = dVar34;
    param_3[1] = dVar33;
    param_3[2] = dVar32;
    return iVar27;
  }
  if (param_4 < 1) {
    iVar27 = 0;
  }
  else {
    uVar2 = (uVar15 - 4 >> 2) + 1;
    lVar25 = 0;
    iVar7 = uVar2 * 4;
    if ((int)(uVar15 - 3) < 1) {
      iVar7 = 0;
    }
    iVar27 = 0;
    iVar16 = iVar7 + 1;
    uVar9 = uVar15 - iVar7;
    iVar3 = iVar7 + 2;
    lVar17 = (long)iVar7;
    iVar4 = iVar7 + 3;
    pdVar23 = param_3 + lVar17;
    uVar6 = (uint)((ulong)pdVar23 >> 3) & 1;
    if (uVar9 < uVar6) {
      uVar6 = uVar9;
    }
    do {
                    /* try { // try from 0038aa48 to 0048aa57 has its CatchHandler @ 0038acb4 */
      if (*(char *)(param_2 + lVar25) != '\0') {
        if (0 < (int)(uVar15 - 3)) {
                    /* try { // try from 0038aa60 to 0048aa63 has its CatchHandler @ 0038ac5c */
          pdVar18 = param_3 + 2;
          uVar22 = 0;
          pdVar20 = param_3;
          pfVar14 = param_1;
          do {
            uVar30 = *(undefined8 *)(pfVar14 + 2);
            uVar29 = *(undefined8 *)pfVar14;
            uVar22 = uVar22 + 1;
            dVar33 = pdVar18[1];
            dVar32 = *pdVar18;
            pdVar20[1] = pdVar20[1] + (double)(float)((ulong)uVar29 >> 0x20);
            *pdVar20 = *pdVar20 + (double)(float)uVar29;
                    /* try { // try from 0038aa94 to 0048aa97 has its CatchHandler @ 0038ac90 */
            pdVar20 = pdVar20 + 4;
            pdVar18[1] = dVar33 + (double)(float)((ulong)uVar30 >> 0x20);
            *pdVar18 = dVar32 + (double)(float)uVar30;
            pdVar18 = pdVar18 + 4;
            pfVar14 = pfVar14 + 4;
          } while (uVar22 < uVar2);
        }
        if (iVar7 < (int)uVar15) {
          uVar22 = uVar6;
          if (uVar9 < 5) {
            uVar22 = uVar9;
          }
          iVar19 = iVar7;
          if (uVar22 != 0) {
                    /* try { // try from 0038aacc to 0048aadf has its CatchHandler @ 0038acb4 */
            *pdVar23 = *pdVar23 + (double)param_1[lVar17];
            iVar19 = iVar16;
                    /* try { // try from 0038aae8 to 0048aaeb has its CatchHandler @ 0038acbc */
                    /* try { // try from 0038ab0c to 0048ab0f has its CatchHandler @ 0038a1c0 */
            if (((uVar22 != 1) &&
                (param_3[iVar16] = param_3[iVar16] + (double)param_1[iVar16], iVar19 = iVar3,
                uVar22 != 2)) &&
               (param_3[iVar3] = param_3[iVar3] + (double)param_1[iVar3], iVar19 = iVar4,
               uVar22 == 4)) {
              param_3[iVar4] = param_3[iVar4] + (double)param_1[iVar4];
              iVar19 = iVar7 + 4;
            }
            if (uVar22 == uVar9) goto LAB_0038ac28;
          }
          uVar5 = ((uVar9 - uVar22) - 4 >> 2) + 1;
          iVar8 = uVar5 * 4;
          if (2 < (uVar9 - 1) - uVar22) {
                    /* try { // try from 0038ab58 to 0048ab5b has its CatchHandler @ 0038acfc */
            uVar28 = 0;
                    /* try { // try from 0038ab60 to 0048ab7f has its CatchHandler @ 0038a1c0 */
            pdVar18 = param_3 + (ulong)uVar22 + lVar17;
            pfVar14 = param_1 + (ulong)uVar22 + lVar17;
            pdVar20 = pdVar18;
            do {
              uVar30 = *(undefined8 *)(pfVar14 + 2);
              uVar29 = *(undefined8 *)pfVar14;
              pdVar13 = pdVar18 + 1;
              dVar32 = *pdVar18;
              dVar34 = pdVar18[3];
              dVar33 = pdVar18[2];
              uVar28 = uVar28 + 1;
              pdVar18 = pdVar18 + 4;
                    /* try { // try from 0038aba4 to 0048aba7 has its CatchHandler @ 0038ac1c */
              pdVar20[1] = *pdVar13 + (double)(float)((ulong)uVar29 >> 0x20);
              *pdVar20 = dVar32 + (double)(float)uVar29;
              pdVar20[3] = (double)(float)((ulong)uVar30 >> 0x20) + dVar34;
              pdVar20[2] = (double)(float)uVar30 + dVar33;
              pfVar14 = pfVar14 + 4;
              pdVar20 = pdVar20 + 4;
            } while (uVar28 < uVar5);
            iVar19 = iVar19 + iVar8;
            if (iVar8 == uVar9 - uVar22) goto LAB_0038ac28;
          }
          iVar8 = iVar19 + 1;
          param_3[iVar19] = param_3[iVar19] + (double)param_1[iVar19];
          if (iVar8 < (int)uVar15) {
            iVar19 = iVar19 + 2;
            param_3[iVar8] = param_3[iVar8] + (double)param_1[iVar8];
            if (iVar19 < (int)uVar15) {
                    /* catch() { ... } // from try @ 0038aba4 with catch @ 0038ac1c */
              param_3[iVar19] = param_3[iVar19] + (double)param_1[iVar19];
            }
          }
        }
LAB_0038ac28:
        iVar27 = iVar27 + 1;
      }
      lVar25 = lVar25 + 1;
      param_1 = (float *)((long)param_1 +
                         (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2)
                         );
    } while ((int)lVar25 < param_4);
  }
  return iVar27;
}


==================================================================

### FUNC 0038b018 (1608 bytes) name=FUN_0038b018

int FUN_0038b018(double *param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  char *pcVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  double *pdVar9;
  double *pdVar10;
  uint uVar11;
  ulong uVar12;
  long lVar13;
  double *pdVar14;
  uint uVar15;
  double *pdVar16;
  double *pdVar17;
  uint uVar18;
  long lVar19;
  long lVar20;
  int iVar21;
  long lVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  int iVar28;
  
  uVar11 = (uint)param_5;
  if (param_2 == 0) {
    iVar8 = (int)uVar11 % 4;
    iVar21 = 0;
    if (iVar8 == 1) {
                    /* catch() { ... } // from try @ 0038b4c8 with catch @ 0038b4f4 */
      dVar24 = *param_3;
      pdVar14 = param_1;
      if (0 < param_4 + -3) {
                    /* catch() { ... } // from try @ 0038b4d0 with catch @ 0038b508 */
        uVar12 = -(ulong)((uVar11 & 0x3fffffff) >> 0x1d) & 0xfffffff800000000 |
                 (ulong)(uVar11 << 2) << 3;
        iVar21 = 0;
        do {
          pdVar10 = (double *)
                    ((long)pdVar14 +
                    (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
          iVar21 = iVar21 + 4;
          dVar23 = *pdVar14;
                    /* catch() { ... } // from try @ 0038b228 with catch @ 0038b528 */
          pdVar16 = (double *)
                    ((long)pdVar14 +
                    (-(ulong)((uVar11 & 0x7fffffff) >> 0x1e) & 0xfffffff800000000 |
                    (ulong)(uVar11 * 2) << 3));
          pdVar17 = (double *)
                    ((long)pdVar14 +
                    (-(ulong)(uVar11 * 3 >> 0x1f) & 0xfffffff800000000 | (ulong)(uVar11 * 3) << 3));
          pdVar14 = (double *)((long)pdVar14 + uVar12);
                    /* catch() { ... } // from try @ 0038b210 with catch @ 0038b53c */
          dVar24 = dVar24 + dVar23 + *pdVar10 + *pdVar16 + *pdVar17;
        } while (iVar21 < param_4 + -3);
                    /* catch() { ... } // from try @ 0038b13c with catch @ 0038b54c */
        uVar2 = param_4 - 4U >> 2;
                    /* catch() { ... } // from try @ 0038b064 with catch @ 0038b554 */
                    /* catch() { ... } // from try @ 0038b580 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038b634 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038b76c with catch @ 0038b55c
                       catch() { ... } // from try @ 0038b83c with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bad8 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bc98 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bcb0 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bcd8 with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bcec with catch @ 0038b55c
                       catch() { ... } // from try @ 0038bd24 with catch @ 0038b55c */
        iVar21 = (uVar2 + 1) * 4;
        pdVar14 = (double *)((long)param_1 + uVar12 + uVar2 * uVar12);
      }
      iVar28 = iVar21;
      if (iVar21 < param_4) {
        do {
          iVar21 = iVar21 + 1;
          dVar23 = *pdVar14;
          pdVar14 = (double *)
                    ((long)pdVar14 +
                    (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
                    /* try { // try from 0038b580 to 0048b5db has its CatchHandler @ 0038b55c */
          dVar24 = dVar24 + dVar23;
          iVar28 = param_4;
        } while (iVar21 != param_4);
      }
      *param_3 = dVar24;
    }
    else if (iVar8 == 2) {
      dVar23 = *param_3;
      dVar24 = param_3[1];
      iVar28 = iVar21;
      if (0 < param_4) {
        iVar21 = 0;
        pdVar14 = param_1;
        do {
          iVar21 = iVar21 + 1;
          dVar25 = *pdVar14;
          pdVar10 = pdVar14 + 1;
          pdVar14 = (double *)
                    ((long)pdVar14 +
                    (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
          dVar23 = dVar23 + dVar25;
          dVar24 = dVar24 + *pdVar10;
          iVar28 = param_4;
        } while (iVar21 != param_4);
      }
      *param_3 = dVar23;
      param_3[1] = dVar24;
    }
    else {
      iVar28 = 0;
      if (iVar8 == 3) {
        dVar25 = *param_3;
        dVar23 = param_3[1];
        dVar24 = param_3[2];
        if (0 < param_4) {
          iVar21 = 0;
          pdVar14 = param_1;
          do {
            iVar21 = iVar21 + 1;
            dVar26 = *pdVar14;
            pdVar10 = pdVar14 + 1;
            pdVar16 = pdVar14 + 2;
            pdVar14 = (double *)
                      ((long)pdVar14 +
                      (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
            dVar25 = dVar25 + dVar26;
            dVar23 = dVar23 + *pdVar10;
            dVar24 = dVar24 + *pdVar16;
            iVar28 = param_4;
                    /* try { // try from 0038b62c to 0048b62f has its CatchHandler @ 0038bcdc */
          } while (iVar21 != param_4);
        }
                    /* try { // try from 0038b634 to 0048b68f has its CatchHandler @ 0038b55c */
        *param_3 = dVar25;
        param_3[1] = dVar23;
        param_3[2] = dVar24;
      }
    }
                    /* try { // try from 0038b408 to 0048b40b has its CatchHandler @ 0038b478 */
    if (iVar8 < (int)uVar11) {
      lVar13 = (long)iVar8;
                    /* try { // try from 0038b418 to 0048b41b has its CatchHandler @ 0038b4cc */
                    /* try { // try from 0038b428 to 0048b42b has its CatchHandler @ 0038b4c4 */
      pdVar14 = param_3 + lVar13;
      lVar20 = lVar13 + 4;
      lVar22 = lVar13;
      while( true ) {
                    /* try { // try from 0038b438 to 0048b43b has its CatchHandler @ 0038b478 */
        lVar19 = lVar20;
        dVar26 = *pdVar14;
                    /* try { // try from 0038b448 to 0048b44b has its CatchHandler @ 0038ad8c */
        pdVar10 = param_1 + lVar22 + (int)(uVar11 * iVar28);
        dVar25 = pdVar14[1];
                    /* catch() { ... } // from try @ 0038b038 with catch @ 0038b450
                       catch() { ... } // from try @ 0038b280 with catch @ 0038b450 */
        dVar23 = pdVar14[2];
        dVar24 = pdVar14[3];
        iVar21 = iVar28;
        if (iVar28 < param_4) {
          do {
            iVar28 = iVar28 + 1;
                    /* try { // try from 0038b460 to 0048b463 has its CatchHandler @ 0038ad8c */
            dVar27 = *pdVar10;
                    /* catch() { ... } // from try @ 0038afc0 with catch @ 0038b464 */
            pdVar16 = pdVar10 + 1;
            pdVar17 = pdVar10 + 2;
            pdVar9 = pdVar10 + 3;
                    /* try { // try from 0038b474 to 0048b477 has its CatchHandler @ 0038ad8c */
            pdVar10 = (double *)
                      ((long)pdVar10 +
                      (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
                    /* catch() { ... } // from try @ 0038ae24 with catch @ 0038b478
                       catch() { ... } // from try @ 0038aed8 with catch @ 0038b478
                       catch() { ... } // from try @ 0038b408 with catch @ 0038b478
                       catch() { ... } // from try @ 0038b438 with catch @ 0038b478 */
            dVar26 = dVar26 + dVar27;
            dVar25 = dVar25 + *pdVar16;
            dVar23 = dVar23 + *pdVar17;
            dVar24 = dVar24 + *pdVar9;
            iVar21 = param_4;
          } while (iVar28 != param_4);
        }
        iVar28 = iVar21;
                    /* try { // try from 0038b49c to 0048b49f has its CatchHandler @ 0038ad8c */
                    /* catch() { ... } // from try @ 0038ae64 with catch @ 0038b4a0 */
        pdVar14[1] = dVar25;
        *pdVar14 = dVar26;
        pdVar14[3] = dVar24;
        pdVar14[2] = dVar23;
        if (pdVar14 + 4 == param_3 + lVar13 + 4 + (ulong)((uVar11 - 1) - iVar8 >> 2) * 4) break;
                    /* catch() { ... } // from try @ 0038b428 with catch @ 0038b4c4 */
        pdVar14 = pdVar14 + 4;
        lVar20 = lVar19 + 4;
        lVar22 = lVar19;
                    /* try { // try from 0038b4c8 to 0048b4cb has its CatchHandler @ 0038b4f4 */
      }
    }
                    /* catch() { ... } // from try @ 0038b418 with catch @ 0038b4cc */
                    /* try { // try from 0038b4d0 to 0048b4d3 has its CatchHandler @ 0038b508 */
                    /* catch() { ... } // from try @ 0038b25c with catch @ 0038b4d4 */
    return param_4;
  }
                    /* try { // try from 0038b038 to 0048b04f has its CatchHandler @ 0038b450 */
  if (uVar11 == 1) {
    dVar24 = *param_3;
    if (param_4 < 1) {
      iVar21 = 0;
    }
    else {
      lVar20 = 0;
      iVar21 = 0;
      do {
        if (*(char *)(param_2 + lVar20) != '\0') {
          iVar21 = iVar21 + 1;
          dVar24 = dVar24 + param_1[lVar20];
        }
        lVar20 = lVar20 + 1;
      } while ((int)lVar20 < param_4);
    }
    *param_3 = dVar24;
    return iVar21;
  }
  if (uVar11 == 3) {
    dVar25 = *param_3;
    dVar23 = param_3[1];
    dVar24 = param_3[2];
    if (param_4 < 1) {
      iVar21 = 0;
    }
    else {
      lVar20 = 0;
      iVar21 = 0;
      do {
        pcVar1 = (char *)(param_2 + lVar20);
        lVar20 = lVar20 + 1;
        if (*pcVar1 != '\0') {
          iVar21 = iVar21 + 1;
          dVar25 = dVar25 + *param_1;
          dVar23 = dVar23 + param_1[1];
          dVar24 = dVar24 + param_1[2];
        }
        param_1 = param_1 + 3;
      } while ((int)lVar20 < param_4);
    }
    *param_3 = dVar25;
    param_3[1] = dVar23;
    param_3[2] = dVar24;
    return iVar21;
  }
  if (param_4 < 1) {
    iVar21 = 0;
  }
  else {
    uVar6 = uVar11 - 4 >> 2;
    uVar2 = uVar6 + 1;
                    /* try { // try from 0038b064 to 0048b067 has its CatchHandler @ 0038b554 */
    uVar5 = uVar2 * 4;
    if ((int)(uVar11 - 3) < 1) {
      uVar5 = 0;
    }
    lVar20 = 0;
    uVar7 = uVar11 - uVar5;
    lVar22 = (long)(int)uVar5;
    pdVar14 = param_3 + lVar22;
    uVar4 = (uint)((ulong)pdVar14 >> 3) & 1;
    iVar21 = 0;
    if (uVar7 < uVar4) {
      uVar4 = uVar7;
    }
    iVar8 = uVar7 - uVar4;
    uVar3 = (iVar8 - 2U >> 1) + 1;
    iVar28 = uVar3 * 2;
    do {
      if (*(char *)(param_2 + lVar20) != '\0') {
        if (0 < (int)(uVar11 - 3)) {
                    /* try { // try from 0038b13c to 0048b13f has its CatchHandler @ 0038b54c */
          if ((param_3 < param_1 + 8 && param_1 < param_3 + 8) || (uVar2 < 4)) {
                    /* try { // try from 0038b280 to 0048b283 has its CatchHandler @ 0038b450 */
            pdVar10 = param_3;
            pdVar16 = param_1 + 1;
            do {
                    /* try { // try from 0038b288 to 0048b28b has its CatchHandler @ 0038ad8c */
              pdVar17 = pdVar16 + 4;
              dVar24 = pdVar16[-1];
              pdVar10[1] = pdVar10[1] + *pdVar16;
              *pdVar10 = *pdVar10 + dVar24;
              dVar24 = pdVar16[1];
              pdVar10[3] = pdVar10[3] + pdVar16[2];
              pdVar10[2] = pdVar10[2] + dVar24;
              pdVar10 = pdVar10 + 4;
              pdVar16 = pdVar17;
            } while (pdVar17 != param_1 + (ulong)uVar6 * 4 + 5);
          }
          else {
            pdVar10 = param_3 + 2;
            uVar18 = 0;
            pdVar16 = param_1;
            pdVar17 = param_3;
            do {
              pdVar9 = pdVar16 + 1;
              dVar27 = *pdVar16;
              uVar18 = uVar18 + 1;
              dVar23 = pdVar10[1];
              dVar24 = *pdVar10;
              dVar26 = pdVar16[3];
              dVar25 = pdVar16[2];
              pdVar16 = pdVar16 + 4;
              pdVar17[1] = pdVar17[1] + *pdVar9;
              *pdVar17 = *pdVar17 + dVar27;
              pdVar17 = pdVar17 + 4;
              pdVar10[1] = dVar23 + dVar26;
              *pdVar10 = dVar24 + dVar25;
              pdVar10 = pdVar10 + 4;
            } while (uVar18 < uVar2);
          }
        }
        if ((int)uVar5 < (int)uVar11) {
          if ((param_1 + lVar22 < param_3 + lVar22 + 2 && pdVar14 < param_1 + lVar22 + 2) ||
             (uVar7 < 8)) {
            lVar13 = 0;
            do {
              *(double *)((long)pdVar14 + lVar13) =
                   *(double *)((long)pdVar14 + lVar13) +
                   *(double *)((long)(param_1 + lVar22) + lVar13);
              lVar13 = lVar13 + 8;
            } while (lVar13 != ((ulong)((uVar11 - 1) - uVar5) + 1) * 8);
          }
          else {
            uVar18 = uVar5;
            if (uVar4 != 0) {
              param_3[lVar22] = param_3[lVar22] + param_1[lVar22];
              uVar18 = uVar5 + 1;
            }
            if (iVar8 != 1) {
              uVar15 = 0;
              pdVar10 = param_3 + (ulong)uVar4 + lVar22;
              pdVar16 = param_3 + (ulong)uVar4 + lVar22;
              pdVar17 = param_1 + (ulong)uVar4 + lVar22;
              do {
                dVar23 = *pdVar17;
                uVar15 = uVar15 + 1;
                dVar24 = *pdVar16;
                    /* try { // try from 0038b210 to 0048b213 has its CatchHandler @ 0038b53c */
                pdVar10[1] = pdVar16[1] + pdVar17[1];
                *pdVar10 = dVar24 + dVar23;
                pdVar10 = pdVar10 + 2;
                pdVar16 = pdVar16 + 2;
                pdVar17 = pdVar17 + 2;
              } while (uVar15 < uVar3);
              uVar18 = uVar18 + iVar28;
              if (iVar28 == iVar8) goto LAB_0038b23c;
            }
                    /* try { // try from 0038b228 to 0048b22b has its CatchHandler @ 0038b528 */
            uVar12 = -(ulong)(uVar18 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar18 << 3;
            *(double *)((long)param_3 + uVar12) =
                 *(double *)((long)param_3 + uVar12) + *(double *)((long)param_1 + uVar12);
          }
        }
LAB_0038b23c:
        iVar21 = iVar21 + 1;
      }
      lVar20 = lVar20 + 1;
      param_1 = (double *)
                ((long)param_1 +
                (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3));
    } while ((int)lVar20 < param_4);
  }
                    /* try { // try from 0038b25c to 0048b25f has its CatchHandler @ 0038b4d4 */
  return iVar21;
}


==================================================================

### FUNC 0038b660 (1000 bytes) name=FUN_0038b660

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint FUN_0038b660(double *param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  double *pdVar7;
  ulong uVar8;
  uint uVar9;
  byte bVar10;
  byte bVar11;
  byte bVar12;
  byte bVar13;
  byte bVar14;
  byte bVar15;
  byte bVar16;
  byte bVar17;
  int iVar18;
  uint uVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  long lVar29;
  long lVar30;
  long lVar31;
  long lVar32;
  long lVar33;
  long lVar34;
  long lVar35;
  long lVar36;
  long lVar37;
  long lVar38;
  long lVar39;
  
  iVar5 = param_2 + -3;
  bVar10 = (byte)_DAT_0038ba50;
  bVar11 = (byte)((ulong)_DAT_0038ba50 >> 8);
  bVar12 = (byte)((ulong)_DAT_0038ba50 >> 0x10);
  bVar13 = (byte)((ulong)_DAT_0038ba50 >> 0x18);
  bVar14 = (byte)_UNK_0038ba58;
  bVar15 = (byte)((ulong)_UNK_0038ba58 >> 8);
  bVar16 = (byte)((ulong)_UNK_0038ba58 >> 0x10);
  bVar17 = (byte)((ulong)_UNK_0038ba58 >> 0x18);
  if (iVar5 < 1) {
    uVar19 = 0;
    uVar1 = uVar19;
    goto LAB_0038b880;
  }
  uVar19 = param_2 - 4U >> 2;
  iVar20 = uVar19 + 1;
  uVar1 = (uVar19 - 3 >> 2) + 1;
  if (param_2 - 4U < 0xc) {
    uVar19 = 0;
    uVar2 = uVar19;
LAB_0038b78c:
    uVar8 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
    uVar1 = uVar2 + 4;
    uVar19 = uVar19 + (uint)(*(double *)((long)param_1 + uVar8) != 0.0) +
                      (uint)(*(double *)((long)param_1 + uVar8 + 8) != 0.0) +
                      (uint)(*(double *)((long)param_1 + uVar8 + 0x10) != 0.0) +
                      (uint)(*(double *)((long)param_1 + uVar8 + 0x18) != 0.0);
    if ((int)uVar1 < iVar5) {
      uVar8 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      uVar2 = uVar2 + 8;
      uVar19 = uVar19 + (uint)(*(double *)((long)param_1 + uVar8) != 0.0) +
                        (uint)(*(double *)((long)param_1 + uVar8 + 8) != 0.0) +
                        (uint)(*(double *)((long)param_1 + uVar8 + 0x10) != 0.0) +
                        (uint)(*(double *)((long)param_1 + uVar8 + 0x18) != 0.0);
                    /* try { // try from 0038b830 to 0048b833 has its CatchHandler @ 0038bd14 */
      if ((int)uVar2 < iVar5) {
        uVar8 = -(ulong)(uVar2 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar2 << 3;
                    /* try { // try from 0038b83c to 0048b88f has its CatchHandler @ 0038b55c */
        uVar19 = uVar19 + (uint)(*(double *)((long)param_1 + uVar8) != 0.0) +
                          (uint)(*(double *)((long)param_1 + uVar8 + 8) != 0.0) +
                          (uint)(*(double *)((long)param_1 + uVar8 + 0x10) != 0.0) +
                          (uint)(*(double *)((long)param_1 + uVar8 + 0x18) != 0.0);
      }
    }
  }
  else {
                    /* try { // try from 0038b694 to 0048b6b3 has its CatchHandler @ 0038bcb4 */
    iVar18 = 0;
    iVar21 = 0;
    iVar22 = 0;
    iVar23 = 0;
    uVar19 = 0;
    pdVar7 = param_1;
    do {
      uVar19 = uVar19 + 1;
                    /* try { // try from 0038b6cc to 0048b6cf has its CatchHandler @ 0038bcf0 */
      lVar28 = -(ulong)(pdVar7[1] == 0.0);
      lVar30 = -(ulong)(pdVar7[5] == 0.0);
      lVar32 = -(ulong)(*pdVar7 == 0.0);
      lVar33 = -(ulong)(pdVar7[4] == 0.0);
      lVar26 = -(ulong)(pdVar7[2] == 0.0);
      lVar27 = -(ulong)(pdVar7[6] == 0.0);
      lVar38 = -(ulong)(pdVar7[8] == 0.0);
      lVar39 = -(ulong)(pdVar7[0xc] == 0.0);
      lVar36 = -(ulong)(pdVar7[9] == 0.0);
      lVar37 = -(ulong)(pdVar7[0xd] == 0.0);
      lVar24 = -(ulong)(pdVar7[3] == 0.0);
      lVar25 = -(ulong)(pdVar7[7] == 0.0);
                    /* try { // try from 0038b740 to 0048b743 has its CatchHandler @ 0038bcb4 */
      lVar34 = -(ulong)(pdVar7[10] == 0.0);
      lVar35 = -(ulong)(pdVar7[0xe] == 0.0);
      lVar29 = -(ulong)(pdVar7[0xb] == 0.0);
      lVar31 = -(ulong)(pdVar7[0xf] == 0.0);
                    /* try { // try from 0038b76c to 0048b7ef has its CatchHandler @ 0038b55c */
      iVar18 = iVar18 + CONCAT13(bVar13 & ~(byte)((ulong)lVar32 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar32 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar32 >> 8),
                                                   bVar10 & ~(byte)lVar32))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar28 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar28 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar28 >> 8),
                                                   bVar10 & ~(byte)lVar28))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar26 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar26 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar26 >> 8),
                                                   bVar10 & ~(byte)lVar26))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar24 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar24 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar24 >> 8),
                                                   bVar10 & ~(byte)lVar24)));
      iVar21 = iVar21 + CONCAT13(bVar17 & ~(byte)((ulong)lVar33 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar33 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar33 >> 8),
                                                   bVar14 & ~(byte)lVar33))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar30 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar30 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar30 >> 8),
                                                   bVar14 & ~(byte)lVar30))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar27 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar27 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar27 >> 8),
                                                   bVar14 & ~(byte)lVar27))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar25 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar25 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar25 >> 8),
                                                   bVar14 & ~(byte)lVar25)));
      iVar22 = iVar22 + CONCAT13(bVar13 & ~(byte)((ulong)lVar38 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar38 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar38 >> 8),
                                                   bVar10 & ~(byte)lVar38))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar36 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar36 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar36 >> 8),
                                                   bVar10 & ~(byte)lVar36))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar34 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar34 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar34 >> 8),
                                                   bVar10 & ~(byte)lVar34))) +
                        CONCAT13(bVar13 & ~(byte)((ulong)lVar29 >> 0x18),
                                 CONCAT12(bVar12 & ~(byte)((ulong)lVar29 >> 0x10),
                                          CONCAT11(bVar11 & ~(byte)((ulong)lVar29 >> 8),
                                                   bVar10 & ~(byte)lVar29)));
      iVar23 = iVar23 + CONCAT13(bVar17 & ~(byte)((ulong)lVar39 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar39 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar39 >> 8),
                                                   bVar14 & ~(byte)lVar39))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar37 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar37 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar37 >> 8),
                                                   bVar14 & ~(byte)lVar37))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar35 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar35 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar35 >> 8),
                                                   bVar14 & ~(byte)lVar35))) +
                        CONCAT13(bVar17 & ~(byte)((ulong)lVar31 >> 0x18),
                                 CONCAT12(bVar16 & ~(byte)((ulong)lVar31 >> 0x10),
                                          CONCAT11(bVar15 & ~(byte)((ulong)lVar31 >> 8),
                                                   bVar14 & ~(byte)lVar31)));
      pdVar7 = pdVar7 + 0x10;
    } while (uVar19 < uVar1);
    uVar19 = iVar18 + iVar21 + iVar22 + iVar23;
    uVar2 = uVar1 * 0x10;
    if (iVar20 != uVar1 * 4) goto LAB_0038b78c;
  }
  uVar1 = iVar20 * 4;
LAB_0038b880:
  if ((int)uVar1 < param_2) {
    uVar6 = param_2 - uVar1;
    pdVar7 = param_1 + (int)uVar1;
                    /* try { // try from 0038b89c to 0048b89f has its CatchHandler @ 0038bca0 */
    uVar2 = (uint)((ulong)pdVar7 >> 3) & 1;
    if (uVar6 < uVar2) {
      uVar2 = uVar6;
    }
    if (uVar6 < 6) {
      uVar2 = uVar6;
    }
    uVar3 = uVar1;
    if (uVar2 != 0) {
                    /* try { // try from 0038b8b4 to 0048b8b7 has its CatchHandler @ 0038bdb8 */
      uVar3 = uVar1 + 1;
      uVar19 = uVar19 + (param_1[(int)uVar1] != 0.0);
      if (uVar2 != 1) {
        uVar3 = uVar1 + 2;
        uVar19 = uVar19 + (pdVar7[1] != 0.0);
        if (uVar2 != 2) {
          uVar3 = uVar1 + 3;
          uVar19 = uVar19 + (pdVar7[2] != 0.0);
          if (uVar2 != 3) {
            uVar3 = uVar1 + 4;
            uVar19 = uVar19 + (pdVar7[3] != 0.0);
            if (uVar2 == 5) {
              uVar3 = uVar1 + 5;
              uVar19 = uVar19 + (pdVar7[4] != 0.0);
            }
          }
        }
      }
      if (uVar2 == uVar6) {
        return uVar19;
      }
    }
    uVar4 = ((uVar6 - uVar2) - 4 >> 2) + 1;
    iVar5 = uVar4 * 4;
    if (2 < (uVar6 - 1) - uVar2) {
      iVar20 = 0;
      iVar18 = 0;
      iVar21 = 0;
      iVar22 = 0;
      uVar9 = 0;
      pdVar7 = param_1 + (ulong)uVar2 + (long)(int)uVar1;
      do {
        uVar9 = uVar9 + 1;
                    /* try { // try from 0038b98c to 0048b98f has its CatchHandler @ 0038bdb0 */
        lVar26 = -(ulong)(*pdVar7 == 0.0);
        lVar27 = -(ulong)(pdVar7[1] == 0.0);
        lVar24 = -(ulong)(pdVar7[2] == 0.0);
        lVar25 = -(ulong)(pdVar7[3] == 0.0);
        iVar20 = iVar20 + CONCAT13(bVar13 & ~(byte)((ulong)lVar26 >> 0x18),
                                   CONCAT12(bVar12 & ~(byte)((ulong)lVar26 >> 0x10),
                                            CONCAT11(bVar11 & ~(byte)((ulong)lVar26 >> 8),
                                                     bVar10 & ~(byte)lVar26)));
        iVar18 = iVar18 + CONCAT13(bVar17 & ~(byte)((ulong)lVar27 >> 0x18),
                                   CONCAT12(bVar16 & ~(byte)((ulong)lVar27 >> 0x10),
                                            CONCAT11(bVar15 & ~(byte)((ulong)lVar27 >> 8),
                                                     bVar14 & ~(byte)lVar27)));
        iVar21 = iVar21 + CONCAT13(bVar13 & ~(byte)((ulong)lVar24 >> 0x18),
                                   CONCAT12(bVar12 & ~(byte)((ulong)lVar24 >> 0x10),
                                            CONCAT11(bVar11 & ~(byte)((ulong)lVar24 >> 8),
                                                     bVar10 & ~(byte)lVar24)));
        iVar22 = iVar22 + CONCAT13(bVar17 & ~(byte)((ulong)lVar25 >> 0x18),
                                   CONCAT12(bVar16 & ~(byte)((ulong)lVar25 >> 0x10),
                                            CONCAT11(bVar15 & ~(byte)((ulong)lVar25 >> 8),
                                                     bVar14 & ~(byte)lVar25)));
        pdVar7 = pdVar7 + 4;
      } while (uVar9 < uVar4);
      uVar3 = uVar3 + iVar5;
      uVar19 = uVar19 + iVar20 + iVar18 + iVar21 + iVar22;
      if (iVar5 == uVar6 - uVar2) {
        return uVar19;
      }
    }
    uVar8 = -(ulong)(uVar3 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar3 << 3;
    uVar19 = uVar19 + (*(double *)((long)param_1 + uVar8) != 0.0);
    if (((int)(uVar3 + 1) < param_2) &&
       (uVar19 = uVar19 + (*(double *)((long)param_1 + uVar8 + 8) != 0.0),
       (int)(uVar3 + 2) < param_2)) {
      uVar19 = uVar19 + (*(double *)((long)param_1 + uVar8 + 0x10) != 0.0);
    }
  }
  return uVar19;
}


==================================================================

### FUNC 0038ba60 (8008 bytes) name=FUN_0038ba60

uint FUN_0038ba60(byte *param_1,long param_2,byte *param_3,byte *param_4,uint param_5,uint param_6)

{
  char *pcVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte bVar18;
  byte bVar19;
  uint3 uVar20;
  uint3 uVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  byte *pbVar26;
  uint uVar27;
  int iVar28;
  byte *pbVar29;
  long lVar30;
  int iVar31;
  long lVar32;
  uint uVar33;
  long lVar34;
  int iVar35;
  long lVar36;
  long lVar37;
  byte *pbVar38;
  long lVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  uint uVar43;
  long lVar44;
  long lVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  long lVar49;
  byte bVar50;
  byte bVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  int iVar55;
  undefined8 uVar56;
  uint uVar57;
  int iVar58;
  int iVar59;
  int iVar60;
  int iVar61;
  uint uVar62;
  int iVar63;
  undefined8 uVar64;
  uint uVar65;
  int iVar66;
  uint uVar67;
  int iVar68;
  uint uVar69;
  int iVar70;
  uint uVar71;
  int iVar72;
  uint uVar73;
  int iVar74;
  undefined8 uVar75;
  long lVar76;
  uint uVar77;
  uint uVar78;
  uint uVar79;
  uint uVar80;
  uint uVar81;
  uint uVar82;
  undefined8 uVar83;
  undefined8 uVar84;
  uint uVar85;
  undefined8 uVar86;
  undefined8 uVar87;
  undefined8 uVar88;
  undefined8 uVar89;
  uint uVar90;
  undefined8 uVar91;
  uint uVar92;
  uint uVar93;
  undefined8 uVar94;
  undefined8 uVar95;
  long lVar96;
  undefined8 uVar97;
  undefined8 uVar98;
  undefined8 uVar99;
  int iVar100;
  uint uVar101;
  int iVar102;
  int iVar103;
  int iVar104;
  int iVar105;
  undefined8 uVar106;
  int iVar107;
  int iVar108;
  undefined8 uVar109;
  int iVar110;
  int iVar111;
  int iVar112;
  int iVar113;
  int iVar114;
  int iVar115;
  int iVar116;
  int iVar117;
  int iVar118;
  int iVar119;
  int iVar120;
  int iVar121;
  int iVar122;
  int iVar123;
  int iVar124;
  int iVar125;
  int iVar126;
  uint uVar127;
  
                    /* try { // try from 0038ba60 to 0048ba63 has its CatchHandler @ 0038bda0 */
                    /* try { // try from 0038ba78 to 0048ba7b has its CatchHandler @ 0038bd8c */
  if (param_2 != 0) {
    if (param_6 == 1) {
      iVar31 = *(int *)param_3;
      iVar28 = *(int *)param_4;
      if ((int)param_5 < 1) {
        uVar33 = 0;
      }
      else {
        lVar32 = 0;
        uVar33 = 0;
        do {
          if (*(char *)(param_2 + lVar32) != '\0') {
            bVar50 = param_1[lVar32];
            uVar33 = uVar33 + 1;
            iVar31 = iVar31 + (uint)bVar50;
            iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
          }
          lVar32 = lVar32 + 1;
        } while ((int)lVar32 < (int)param_5);
      }
      *(int *)param_3 = iVar31;
      *(int *)param_4 = iVar28;
      return uVar33;
    }
    if (param_6 == 3) {
      iVar31 = *(int *)param_3;
      iVar28 = *(int *)(param_3 + 4);
      iVar35 = *(int *)(param_3 + 8);
      iVar53 = *(int *)param_4;
      iVar59 = *(int *)(param_4 + 4);
      iVar54 = *(int *)(param_4 + 8);
      if ((int)param_5 < 1) {
        uVar33 = 0;
      }
      else {
        lVar32 = 0;
        uVar33 = 0;
        do {
          pcVar1 = (char *)(param_2 + lVar32);
          lVar32 = lVar32 + 1;
          if (*pcVar1 != '\0') {
            bVar50 = *param_1;
            uVar33 = uVar33 + 1;
            bVar51 = param_1[1];
            bVar18 = param_1[2];
            iVar31 = iVar31 + (uint)bVar50;
            iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
            iVar59 = iVar59 + (uint)bVar51 * (uint)bVar51;
            iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
            iVar28 = iVar28 + (uint)bVar51;
            iVar35 = iVar35 + (uint)bVar18;
          }
          param_1 = param_1 + 3;
        } while ((int)lVar32 < (int)param_5);
      }
      *(int *)param_3 = iVar31;
      *(int *)(param_3 + 4) = iVar28;
      *(int *)(param_3 + 8) = iVar35;
      *(int *)param_4 = iVar53;
      *(int *)(param_4 + 4) = iVar59;
      *(int *)(param_4 + 8) = iVar54;
      return uVar33;
    }
    if ((int)param_5 < 1) {
      return 0;
    }
                    /* try { // try from 0038baac to 0048baaf has its CatchHandler @ 0038bd38 */
    uVar33 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    lVar37 = (ulong)param_6 * 4;
    lVar32 = 0;
    if (param_6 < uVar33) {
      uVar33 = param_6;
    }
                    /* try { // try from 0038bad0 to 0048bad3 has its CatchHandler @ 0038bca0 */
    pbVar26 = param_1 + param_6;
                    /* try { // try from 0038bad8 to 0048badb has its CatchHandler @ 0038b55c */
    uVar101 = 0;
    lVar39 = (ulong)uVar33 * 4;
    uVar85 = ((param_6 - uVar33) - 0x10 >> 4) + 1;
    iVar31 = uVar85 * 0x10;
    do {
      if (*(char *)(param_2 + lVar32) != '\0') {
        if (0 < (int)param_6) {
          if (((param_6 < 0x13 || param_4 < param_3 + 0x40 && param_3 < param_4 + 0x40) ||
               param_3 < pbVar26 && param_1 < param_3 + lVar37) ||
             (param_4 < pbVar26 && param_1 < param_4 + lVar37)) {
            lVar36 = 0;
            do {
              bVar50 = param_1[lVar36];
              iVar28 = *(int *)(param_4 + lVar36 * 4);
              *(uint *)(param_3 + lVar36 * 4) = *(int *)(param_3 + lVar36 * 4) + (uint)bVar50;
              *(uint *)(param_4 + lVar36 * 4) = iVar28 + (uint)bVar50 * (uint)bVar50;
              lVar36 = lVar36 + 1;
            } while ((int)lVar36 < (int)param_6);
          }
          else {
            uVar27 = uVar33;
            if (uVar33 != 0) {
              bVar50 = *param_1;
              iVar28 = *(int *)param_4;
              *(uint *)param_3 = *(int *)param_3 + (uint)bVar50;
              *(uint *)param_4 = iVar28 + (uint)bVar50 * (uint)bVar50;
              if (uVar33 != 1) {
                bVar50 = param_1[1];
                iVar28 = *(int *)(param_4 + 4);
                *(uint *)(param_3 + 4) = *(int *)(param_3 + 4) + (uint)bVar50;
                *(uint *)(param_4 + 4) = iVar28 + (uint)bVar50 * (uint)bVar50;
                if (uVar33 == 3) {
                  bVar50 = param_1[2];
                  iVar28 = *(int *)(param_4 + 8);
                  *(uint *)(param_3 + 8) = *(int *)(param_3 + 8) + (uint)bVar50;
                  *(uint *)(param_4 + 8) = iVar28 + (uint)bVar50 * (uint)bVar50;
                }
                else {
                  uVar27 = 2;
                }
              }
            }
            if (0xe < (param_6 - 1) - uVar33) {
              uVar43 = 0;
              pbVar29 = param_3 + lVar39;
              pbVar42 = param_4 + lVar39;
              pbVar40 = param_1 + uVar33;
              pbVar38 = param_3 + lVar39;
              pbVar41 = param_4 + lVar39;
              do {
                uVar64 = *(undefined8 *)(pbVar40 + 8);
                uVar56 = *(undefined8 *)pbVar40;
                uVar75 = *(undefined8 *)pbVar29;
                uVar94 = *(undefined8 *)(pbVar41 + 8);
                uVar91 = *(undefined8 *)pbVar41;
                uVar109 = *(undefined8 *)(pbVar29 + 0x18);
                uVar106 = *(undefined8 *)(pbVar29 + 0x10);
                uVar99 = *(undefined8 *)(pbVar29 + 0x28);
                uVar98 = *(undefined8 *)(pbVar29 + 0x20);
                uVar20 = CONCAT12((char)((ulong)uVar56 >> 8),(short)uVar56) & 0xff00ff;
                bVar50 = (byte)((ulong)uVar56 >> 0x28);
                uVar97 = *(undefined8 *)(pbVar29 + 0x38);
                uVar95 = *(undefined8 *)(pbVar29 + 0x30);
                uVar21 = CONCAT12((char)((ulong)uVar64 >> 8),(short)uVar64) & 0xff00ff;
                bVar51 = (byte)((ulong)uVar64 >> 0x28);
                uVar89 = *(undefined8 *)(pbVar41 + 0x18);
                uVar88 = *(undefined8 *)(pbVar41 + 0x10);
                uVar87 = *(undefined8 *)(pbVar41 + 0x28);
                uVar86 = *(undefined8 *)(pbVar41 + 0x20);
                    /* try { // try from 0038bc58 to 0048bc5b has its CatchHandler @ 0038bcb4 */
                uVar81 = uVar20 & 0xffff;
                uVar90 = (uint)(byte)((ulong)uVar56 >> 0x10);
                uVar84 = *(undefined8 *)(pbVar41 + 0x38);
                uVar83 = *(undefined8 *)(pbVar41 + 0x30);
                uVar67 = CONCAT12(bVar50,(ushort)(byte)((ulong)uVar56 >> 0x20)) & 0xffff;
                uVar71 = (uint)(byte)((ulong)uVar56 >> 0x30);
                    /* try { // try from 0038bc68 to 0048bc6b has its CatchHandler @ 0038bd30 */
                uVar77 = uVar21 & 0xffff;
                uVar79 = (uint)(byte)((ulong)uVar64 >> 0x10);
                uVar127 = CONCAT12(bVar51,(ushort)(byte)((ulong)uVar64 >> 0x20)) & 0xffff;
                uVar62 = (uint)(byte)((ulong)uVar64 >> 0x30);
                uVar43 = uVar43 + 1;
                    /* try { // try from 0038bc78 to 0048bc7b has its CatchHandler @ 0038bd28 */
                uVar82 = (uint)(byte)(uVar20 >> 0x10);
                uVar92 = (uint)(byte)((ulong)uVar56 >> 0x18);
                uVar69 = (uint)bVar50;
                uVar73 = (uint)(byte)((ulong)uVar56 >> 0x38);
                    /* try { // try from 0038bc88 to 0048bc8b has its CatchHandler @ 0038bcb4 */
                uVar78 = (uint)(byte)(uVar21 >> 0x10);
                uVar80 = (uint)(byte)((ulong)uVar64 >> 0x18);
                uVar57 = (uint)bVar51;
                uVar65 = (uint)(byte)((ulong)uVar64 >> 0x38);
                    /* try { // try from 0038bc98 to 0048bc9b has its CatchHandler @ 0038b55c */
                *(ulong *)(pbVar38 + 8) =
                     CONCAT44((int)((ulong)*(undefined8 *)(pbVar29 + 8) >> 0x20) + uVar92,
                              (int)*(undefined8 *)(pbVar29 + 8) + uVar90);
                *(ulong *)pbVar38 =
                     CONCAT44((int)((ulong)uVar75 >> 0x20) + uVar82,(int)uVar75 + uVar81);
                pbVar29 = pbVar29 + 0x40;
                    /* catch() { ... } // from try @ 0038b89c with catch @ 0038bca0
                       catch() { ... } // from try @ 0038bad0 with catch @ 0038bca0 */
                pbVar41 = pbVar41 + 0x40;
                    /* try { // try from 0038bcb0 to 0048bcb3 has its CatchHandler @ 0038b55c */
                    /* catch() { ... } // from try @ 0038b694 with catch @ 0038bcb4
                       catch() { ... } // from try @ 0038b740 with catch @ 0038bcb4
                       catch() { ... } // from try @ 0038bc58 with catch @ 0038bcb4
                       catch() { ... } // from try @ 0038bc88 with catch @ 0038bcb4 */
                *(ulong *)(pbVar38 + 0x18) =
                     CONCAT44(uVar73 + (int)((ulong)uVar109 >> 0x20),uVar71 + (int)uVar109);
                *(ulong *)(pbVar38 + 0x10) =
                     CONCAT44(uVar69 + (int)((ulong)uVar106 >> 0x20),uVar67 + (int)uVar106);
                *(ulong *)(pbVar38 + 0x28) =
                     CONCAT44(uVar80 + (int)((ulong)uVar99 >> 0x20),uVar79 + (int)uVar99);
                *(ulong *)(pbVar38 + 0x20) =
                     CONCAT44(uVar78 + (int)((ulong)uVar98 >> 0x20),uVar77 + (int)uVar98);
                *(ulong *)(pbVar38 + 0x38) =
                     CONCAT44(uVar65 + (int)((ulong)uVar97 >> 0x20),uVar62 + (int)uVar97);
                *(ulong *)(pbVar38 + 0x30) =
                     CONCAT44(uVar57 + (int)((ulong)uVar95 >> 0x20),uVar127 + (int)uVar95);
                *(ulong *)(pbVar42 + 8) =
                     CONCAT44((int)((ulong)uVar94 >> 0x20) + uVar92 * uVar92,
                              (int)uVar94 + uVar90 * uVar90);
                *(ulong *)pbVar42 =
                     CONCAT44((int)((ulong)uVar91 >> 0x20) + uVar82 * uVar82,
                              (int)uVar91 + uVar81 * uVar81);
                *(ulong *)(pbVar42 + 0x18) =
                     CONCAT44((int)((ulong)uVar89 >> 0x20) + uVar73 * uVar73,
                              (int)uVar89 + uVar71 * uVar71);
                *(ulong *)(pbVar42 + 0x10) =
                     CONCAT44((int)((ulong)uVar88 >> 0x20) + uVar69 * uVar69,
                              (int)uVar88 + uVar67 * uVar67);
                    /* try { // try from 0038bcd8 to 0048bcdb has its CatchHandler @ 0038b55c */
                    /* catch() { ... } // from try @ 0038b62c with catch @ 0038bcdc */
                *(ulong *)(pbVar42 + 0x28) =
                     CONCAT44((int)((ulong)uVar87 >> 0x20) + uVar80 * uVar80,
                              (int)uVar87 + uVar79 * uVar79);
                *(ulong *)(pbVar42 + 0x20) =
                     CONCAT44((int)((ulong)uVar86 >> 0x20) + uVar78 * uVar78,
                              (int)uVar86 + uVar77 * uVar77);
                *(ulong *)(pbVar42 + 0x38) =
                     CONCAT44((int)((ulong)uVar84 >> 0x20) + uVar65 * uVar65,
                              (int)uVar84 + uVar62 * uVar62);
                *(ulong *)(pbVar42 + 0x30) =
                     CONCAT44((int)((ulong)uVar83 >> 0x20) + uVar57 * uVar57,
                              (int)uVar83 + uVar127 * uVar127);
                pbVar42 = pbVar42 + 0x40;
                pbVar40 = pbVar40 + 0x10;
                pbVar38 = pbVar38 + 0x40;
              } while (uVar43 < uVar85);
                    /* try { // try from 0038bcec to 0048bcef has its CatchHandler @ 0038b55c */
                    /* catch() { ... } // from try @ 0038b6cc with catch @ 0038bcf0 */
              uVar27 = uVar27 + iVar31;
              if (param_6 - uVar33 == iVar31) goto LAB_0038bfc0;
            }
            iVar28 = uVar27 + 1;
            lVar36 = (long)(int)uVar27 * 4;
            bVar50 = param_1[(int)uVar27];
            iVar35 = *(int *)(param_4 + lVar36);
                    /* catch() { ... } // from try @ 0038b830 with catch @ 0038bd14 */
            *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                    /* try { // try from 0038bd24 to 0048bd27 has its CatchHandler @ 0038b55c */
            *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                    /* catch() { ... } // from try @ 0038bc78 with catch @ 0038bd28 */
            if (iVar28 < (int)param_6) {
                    /* try { // try from 0038bd2c to 0048bd2f has its CatchHandler @ 0038bd58 */
                    /* catch() { ... } // from try @ 0038bc68 with catch @ 0038bd30 */
              iVar35 = uVar27 + 2;
                    /* try { // try from 0038bd34 to 0048bd37 has its CatchHandler @ 0038bd6c */
              lVar36 = (long)iVar28 * 4;
                    /* catch() { ... } // from try @ 0038baac with catch @ 0038bd38 */
              bVar50 = param_1[iVar28];
              iVar28 = *(int *)(param_4 + lVar36);
              *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
              *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50;
                    /* catch() { ... } // from try @ 0038bd2c with catch @ 0038bd58 */
              if (iVar35 < (int)param_6) {
                iVar28 = uVar27 + 3;
                lVar36 = (long)iVar35 * 4;
                    /* catch() { ... } // from try @ 0038bd34 with catch @ 0038bd6c */
                bVar50 = param_1[iVar35];
                iVar35 = *(int *)(param_4 + lVar36);
                *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                if (iVar28 < (int)param_6) {
                    /* catch() { ... } // from try @ 0038ba78 with catch @ 0038bd8c */
                  iVar35 = uVar27 + 4;
                  lVar36 = (long)iVar28 * 4;
                  bVar50 = param_1[iVar28];
                    /* catch() { ... } // from try @ 0038ba60 with catch @ 0038bda0 */
                  iVar28 = *(int *)(param_4 + lVar36);
                    /* catch() { ... } // from try @ 0038b98c with catch @ 0038bdb0 */
                  *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                  *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50;
                    /* catch() { ... } // from try @ 0038b8b4 with catch @ 0038bdb8 */
                  if (iVar35 < (int)param_6) {
                    iVar28 = uVar27 + 5;
                    lVar36 = (long)iVar35 * 4;
                    bVar50 = param_1[iVar35];
                    iVar35 = *(int *)(param_4 + lVar36);
                    *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                    *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                    if (iVar28 < (int)param_6) {
                      iVar35 = uVar27 + 6;
                      lVar36 = (long)iVar28 * 4;
                      bVar50 = param_1[iVar28];
                      iVar28 = *(int *)(param_4 + lVar36);
                      *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                      *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50;
                      if (iVar35 < (int)param_6) {
                        iVar28 = uVar27 + 7;
                        lVar36 = (long)iVar35 * 4;
                        bVar50 = param_1[iVar35];
                        iVar35 = *(int *)(param_4 + lVar36);
                        *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                        *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                        if (iVar28 < (int)param_6) {
                          iVar35 = uVar27 + 8;
                          lVar36 = (long)iVar28 * 4;
                          bVar50 = param_1[iVar28];
                          iVar28 = *(int *)(param_4 + lVar36);
                          *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                          *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50;
                          if (iVar35 < (int)param_6) {
                            iVar28 = uVar27 + 9;
                            lVar36 = (long)iVar35 * 4;
                            bVar50 = param_1[iVar35];
                            iVar35 = *(int *)(param_4 + lVar36);
                            *(uint *)(param_3 + lVar36) = *(int *)(param_3 + lVar36) + (uint)bVar50;
                            *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                            if (iVar28 < (int)param_6) {
                              iVar35 = uVar27 + 10;
                              lVar36 = (long)iVar28 * 4;
                              bVar50 = param_1[iVar28];
                              iVar28 = *(int *)(param_4 + lVar36);
                              *(uint *)(param_3 + lVar36) =
                                   *(int *)(param_3 + lVar36) + (uint)bVar50;
                              *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50;
                              if (iVar35 < (int)param_6) {
                                iVar28 = uVar27 + 0xb;
                                lVar36 = (long)iVar35 * 4;
                                bVar50 = param_1[iVar35];
                                iVar35 = *(int *)(param_4 + lVar36);
                                *(uint *)(param_3 + lVar36) =
                                     *(int *)(param_3 + lVar36) + (uint)bVar50;
                                *(uint *)(param_4 + lVar36) = iVar35 + (uint)bVar50 * (uint)bVar50;
                                if (iVar28 < (int)param_6) {
                                  iVar35 = uVar27 + 0xc;
                                  lVar36 = (long)iVar28 * 4;
                                  bVar50 = param_1[iVar28];
                                  iVar28 = *(int *)(param_4 + lVar36);
                                  *(uint *)(param_3 + lVar36) =
                                       *(int *)(param_3 + lVar36) + (uint)bVar50;
                                  *(uint *)(param_4 + lVar36) = iVar28 + (uint)bVar50 * (uint)bVar50
                                  ;
                                  if (iVar35 < (int)param_6) {
                                    iVar28 = uVar27 + 0xd;
                                    lVar36 = (long)iVar35 * 4;
                                    bVar50 = param_1[iVar35];
                                    iVar35 = *(int *)(param_4 + lVar36);
                                    *(uint *)(param_3 + lVar36) =
                                         *(int *)(param_3 + lVar36) + (uint)bVar50;
                                    *(uint *)(param_4 + lVar36) =
                                         iVar35 + (uint)bVar50 * (uint)bVar50;
                                    if (iVar28 < (int)param_6) {
                                      iVar35 = uVar27 + 0xe;
                                      lVar36 = (long)iVar28 * 4;
                                      bVar50 = param_1[iVar28];
                                      iVar28 = *(int *)(param_4 + lVar36);
                                      *(uint *)(param_3 + lVar36) =
                                           *(int *)(param_3 + lVar36) + (uint)bVar50;
                                      *(uint *)(param_4 + lVar36) =
                                           iVar28 + (uint)bVar50 * (uint)bVar50;
                                      if (iVar35 < (int)param_6) {
                                        lVar36 = (long)iVar35 * 4;
                                        bVar50 = param_1[iVar35];
                                        iVar28 = *(int *)(param_4 + lVar36);
                                        *(uint *)(param_3 + lVar36) =
                                             *(int *)(param_3 + lVar36) + (uint)bVar50;
                                        *(uint *)(param_4 + lVar36) =
                                             iVar28 + (uint)bVar50 * (uint)bVar50;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0038bfc0:
        uVar101 = uVar101 + 1;
      }
      lVar32 = lVar32 + 1;
      param_1 = param_1 + (int)param_6;
      pbVar26 = pbVar26 + (int)param_6;
      if ((int)param_5 <= (int)lVar32) {
        return uVar101;
      }
    } while( true );
  }
  iVar31 = (int)param_6 % 4;
  uVar33 = 0;
  if (iVar31 != 1) {
    if (iVar31 != 2) {
      uVar33 = 0;
      if (iVar31 != 3) goto LAB_0038c14c;
      iVar60 = *(int *)param_3;
      iVar59 = *(int *)(param_3 + 4);
      iVar35 = *(int *)(param_3 + 8);
      iVar54 = *(int *)param_4;
      iVar53 = *(int *)(param_4 + 4);
      iVar28 = *(int *)(param_4 + 8);
      if (0 < (int)param_5) {
        uVar33 = (param_5 - 0x10 >> 4) + 1;
        lVar32 = (long)(int)param_6;
        uVar85 = uVar33 * 0x10;
        if (param_5 - 1 < 0xf) {
          uVar85 = 0;
          pbVar26 = param_1;
        }
        else {
          lVar45 = lVar32 * 2;
          uVar101 = 0;
          iVar108 = 0;
          iVar110 = 0;
          iVar113 = 0;
          iVar114 = 0;
          lVar44 = lVar32 * 8;
          lVar76 = NEON_shl(lVar32,4);
          lVar48 = lVar32 * 4;
          lVar39 = lVar32 * 3;
          lVar36 = lVar32 * 5;
          lVar47 = lVar32 * 0xc;
          lVar46 = lVar32 * 10;
          pbVar26 = param_1 + 1;
          lVar30 = lVar76 + lVar32 * -2;
          pbVar29 = param_1 + 2;
          lVar49 = lVar76 - lVar32;
          lVar37 = lVar32 * 7;
          lVar34 = lVar32 * 6;
          lVar22 = lVar32 * 9;
          lVar23 = lVar32 * 0xd;
          lVar25 = lVar32 * 0xb;
          pbVar41 = param_1;
          iVar55 = iVar108;
          iVar61 = iVar110;
          iVar52 = iVar108;
          iVar58 = iVar110;
          iVar100 = iVar108;
          iVar102 = iVar110;
          iVar105 = iVar108;
          iVar107 = iVar110;
          iVar111 = iVar108;
          iVar112 = iVar110;
          iVar115 = iVar113;
          iVar116 = iVar114;
          iVar119 = iVar113;
          iVar120 = iVar114;
          iVar123 = iVar113;
          iVar124 = iVar114;
          iVar63 = iVar113;
          iVar66 = iVar114;
          iVar103 = iVar113;
          iVar104 = iVar114;
          do {
            uVar101 = uVar101 + 1;
            bVar50 = *pbVar41;
            pbVar42 = pbVar41 + lVar32;
            pbVar40 = pbVar41 + lVar45;
            pbVar38 = pbVar41 + lVar39;
            pbVar2 = pbVar41 + lVar48;
            pbVar3 = pbVar41 + lVar36;
            pbVar4 = pbVar41 + lVar34;
            pbVar5 = pbVar41 + lVar37;
            pbVar6 = pbVar41 + lVar44;
            pbVar7 = pbVar41 + lVar22;
            pbVar8 = pbVar41 + lVar46;
            pbVar9 = pbVar41 + lVar25;
            pbVar10 = pbVar41 + lVar47;
            pbVar11 = pbVar41 + lVar23;
            pbVar12 = pbVar41 + lVar30;
            pbVar13 = pbVar41 + lVar49;
            pbVar41 = pbVar41 + lVar76;
            bVar51 = *pbVar26;
            pbVar14 = pbVar26 + lVar32;
            uVar20 = CONCAT12(*pbVar42,CONCAT11(*pbVar42,bVar50)) & 0xff00ff;
            uVar27 = (uint)*pbVar38;
            uVar21 = CONCAT12(*pbVar7,CONCAT11(*pbVar7,*pbVar6)) & 0xff00ff;
            uVar43 = (uint)*pbVar9;
            pbVar42 = pbVar26 + lVar45;
            uVar80 = uVar20 & 0xffff;
            uVar82 = (uint)*pbVar40;
            pbVar40 = pbVar26 + lVar39;
            uVar67 = CONCAT12(*pbVar3,(ushort)*pbVar2) & 0xffff;
            uVar71 = (uint)*pbVar4;
            uVar77 = uVar21 & 0xffff;
            uVar79 = (uint)*pbVar8;
            uVar127 = CONCAT12(*pbVar11,(ushort)*pbVar10) & 0xffff;
            uVar62 = (uint)*pbVar12;
            pbVar38 = pbVar26 + lVar48;
            uVar81 = (uint)(byte)(uVar20 >> 0x10);
            pbVar2 = pbVar26 + lVar36;
            uVar69 = (uint)*pbVar3;
            uVar73 = (uint)*pbVar5;
            pbVar3 = pbVar26 + lVar34;
            uVar78 = (uint)(byte)(uVar21 >> 0x10);
            pbVar4 = pbVar26 + lVar37;
            iVar108 = uVar127 + uVar77 + uVar67 + uVar80 + iVar108;
            uVar57 = (uint)*pbVar11;
            iVar110 = uVar57 + uVar78 + uVar69 + uVar81 + iVar110;
            iVar113 = uVar62 + uVar79 + uVar71 + uVar82 + iVar113;
            uVar65 = (uint)*pbVar13;
            iVar114 = uVar65 + uVar43 + uVar73 + uVar27 + iVar114;
            iVar52 = iVar52 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 +
                     uVar127 * uVar127;
            iVar58 = iVar58 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 + uVar57 * uVar57;
            iVar119 = iVar119 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 +
                      uVar62 * uVar62;
            iVar120 = iVar120 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 +
                      uVar65 * uVar65;
            pbVar5 = pbVar26 + lVar44;
            pbVar6 = pbVar26 + lVar22;
            pbVar7 = pbVar26 + lVar46;
            pbVar8 = pbVar26 + lVar25;
            pbVar9 = pbVar26 + lVar47;
            pbVar10 = pbVar26 + lVar23;
            pbVar11 = pbVar26 + lVar30;
            pbVar12 = pbVar26 + lVar49;
            pbVar26 = pbVar26 + lVar76;
            bVar50 = *pbVar29;
            pbVar13 = pbVar29 + lVar32;
            uVar20 = CONCAT12(*pbVar14,CONCAT11(*pbVar14,bVar51)) & 0xff00ff;
            uVar27 = (uint)*pbVar40;
            uVar21 = CONCAT12(*pbVar6,CONCAT11(*pbVar6,*pbVar5)) & 0xff00ff;
            uVar43 = (uint)*pbVar8;
            pbVar40 = pbVar29 + lVar45;
            uVar80 = uVar20 & 0xffff;
            uVar82 = (uint)*pbVar42;
            pbVar42 = pbVar29 + lVar39;
            uVar67 = CONCAT12(*pbVar2,(ushort)*pbVar38) & 0xffff;
            uVar71 = (uint)*pbVar3;
            uVar77 = uVar21 & 0xffff;
            uVar79 = (uint)*pbVar7;
            uVar127 = CONCAT12(*pbVar10,(ushort)*pbVar9) & 0xffff;
            uVar62 = (uint)*pbVar11;
            pbVar38 = pbVar29 + lVar48;
            uVar81 = (uint)(byte)(uVar20 >> 0x10);
            pbVar3 = pbVar29 + lVar36;
            uVar69 = (uint)*pbVar2;
            uVar73 = (uint)*pbVar4;
            pbVar2 = pbVar29 + lVar34;
                    /* try { // try from 0038d548 to 0048d58f has its CatchHandler @ 0038d650 */
            uVar78 = (uint)(byte)(uVar21 >> 0x10);
            pbVar4 = pbVar29 + lVar37;
            iVar100 = uVar127 + uVar77 + uVar67 + uVar80 + iVar100;
            uVar57 = (uint)*pbVar10;
            iVar102 = uVar57 + uVar78 + uVar69 + uVar81 + iVar102;
            iVar123 = uVar62 + uVar79 + uVar71 + uVar82 + iVar123;
            uVar65 = (uint)*pbVar12;
            iVar124 = uVar65 + uVar43 + uVar73 + uVar27 + iVar124;
            iVar105 = iVar105 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 +
                      uVar127 * uVar127;
            iVar107 = iVar107 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 +
                      uVar57 * uVar57;
            iVar63 = iVar63 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 + uVar62 * uVar62;
            iVar66 = iVar66 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 + uVar65 * uVar65;
            pbVar5 = pbVar29 + lVar44;
            pbVar6 = pbVar29 + lVar22;
            pbVar7 = pbVar29 + lVar46;
            pbVar8 = pbVar29 + lVar25;
            pbVar9 = pbVar29 + lVar47;
            pbVar10 = pbVar29 + lVar23;
                    /* try { // try from 0038d594 to 0048d60f has its CatchHandler @ 0038cd40 */
            pbVar11 = pbVar29 + lVar30;
            pbVar12 = pbVar29 + lVar49;
            pbVar29 = pbVar29 + lVar76;
            uVar20 = CONCAT12(*pbVar13,CONCAT11(*pbVar13,bVar50)) & 0xff00ff;
            uVar27 = (uint)*pbVar42;
            uVar21 = CONCAT12(*pbVar6,CONCAT11(*pbVar6,*pbVar5)) & 0xff00ff;
            uVar43 = (uint)*pbVar8;
            uVar80 = uVar20 & 0xffff;
            uVar82 = (uint)*pbVar40;
            uVar67 = CONCAT12(*pbVar3,(ushort)*pbVar38) & 0xffff;
            uVar71 = (uint)*pbVar2;
            uVar77 = uVar21 & 0xffff;
            uVar79 = (uint)*pbVar7;
            uVar127 = CONCAT12(*pbVar10,(ushort)*pbVar9) & 0xffff;
            uVar62 = (uint)*pbVar11;
            uVar81 = (uint)(byte)(uVar20 >> 0x10);
            uVar69 = (uint)*pbVar3;
            uVar73 = (uint)*pbVar4;
            uVar78 = (uint)(byte)(uVar21 >> 0x10);
            iVar111 = uVar127 + uVar77 + uVar67 + uVar80 + iVar111;
            uVar57 = (uint)*pbVar10;
            iVar112 = uVar57 + uVar78 + uVar69 + uVar81 + iVar112;
            iVar103 = uVar62 + uVar79 + uVar71 + uVar82 + iVar103;
            uVar65 = (uint)*pbVar12;
            iVar104 = uVar65 + uVar43 + uVar73 + uVar27 + iVar104;
            iVar55 = iVar55 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 +
                     uVar127 * uVar127;
            iVar61 = iVar61 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 + uVar57 * uVar57;
            iVar115 = iVar115 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 +
                      uVar62 * uVar62;
            iVar116 = iVar116 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 +
                      uVar65 * uVar65;
          } while (uVar101 < uVar33);
          iVar28 = iVar28 + iVar55 + iVar61 + iVar115 + iVar116;
          iVar35 = iVar35 + iVar111 + iVar112 + iVar103 + iVar104;
          iVar53 = iVar53 + iVar105 + iVar107 + iVar63 + iVar66;
          iVar59 = iVar59 + iVar100 + iVar102 + iVar123 + iVar124;
          iVar54 = iVar54 + iVar52 + iVar58 + iVar119 + iVar120;
          iVar60 = iVar60 + iVar108 + iVar110 + iVar113 + iVar114;
          pbVar26 = param_1 + (ulong)uVar85 * lVar32;
          uVar33 = param_5;
                    /* catch() { ... } // from try @ 0038d548 with catch @ 0038d650 */
          if (param_5 == uVar85) goto LAB_0038d954;
        }
        bVar50 = *pbVar26;
        bVar51 = pbVar26[1];
                    /* try { // try from 0038d660 to 0048d663 has its CatchHandler @ 0038cd40 */
                    /* catch() { ... } // from try @ 0038ce08 with catch @ 0038d664 */
        bVar18 = pbVar26[2];
        iVar60 = iVar60 + (uint)bVar50;
        iVar54 = iVar54 + (uint)bVar50 * (uint)bVar50;
        iVar35 = iVar35 + (uint)bVar18;
                    /* try { // try from 0038d674 to 0048d677 has its CatchHandler @ 0038cd40 */
        iVar59 = iVar59 + (uint)bVar51;
                    /* catch() { ... } // from try @ 0038d0ec with catch @ 0038d678 */
        iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
        iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
        uVar33 = param_5;
        if ((int)(uVar85 + 1) < (int)param_5) {
          bVar18 = pbVar26[lVar32];
          bVar50 = pbVar26[lVar32 + 1];
          bVar51 = pbVar26[lVar32 + 2];
                    /* try { // try from 0038d69c to 0048d69f has its CatchHandler @ 0038cd40 */
          iVar60 = iVar60 + (uint)bVar18;
          iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
          iVar35 = iVar35 + (uint)bVar51;
          iVar59 = iVar59 + (uint)bVar50;
          iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
          iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
          if ((int)(uVar85 + 2) < (int)param_5) {
            bVar18 = pbVar26[lVar32 * 2];
            bVar50 = pbVar26[lVar32 * 2 + 1];
            bVar51 = pbVar26[lVar32 * 2 + 2];
            iVar60 = iVar60 + (uint)bVar18;
            iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
            iVar35 = iVar35 + (uint)bVar51;
            iVar59 = iVar59 + (uint)bVar50;
            iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
            iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
            if ((int)(uVar85 + 3) < (int)param_5) {
              bVar18 = pbVar26[lVar32 * 3];
              bVar50 = pbVar26[lVar32 * 3 + 1];
              bVar51 = pbVar26[lVar32 * 3 + 2];
              iVar60 = iVar60 + (uint)bVar18;
              iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
              iVar35 = iVar35 + (uint)bVar51;
              iVar59 = iVar59 + (uint)bVar50;
              iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
              iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
              if ((int)(uVar85 + 4) < (int)param_5) {
                bVar18 = pbVar26[lVar32 * 4];
                bVar50 = pbVar26[lVar32 * 4 + 1];
                bVar51 = pbVar26[lVar32 * 4 + 2];
                iVar60 = iVar60 + (uint)bVar18;
                iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                iVar35 = iVar35 + (uint)bVar51;
                iVar59 = iVar59 + (uint)bVar50;
                iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                if ((int)(uVar85 + 5) < (int)param_5) {
                  bVar18 = pbVar26[lVar32 * 5];
                  bVar50 = pbVar26[lVar32 * 5 + 1];
                  bVar51 = pbVar26[lVar32 * 5 + 2];
                  iVar60 = iVar60 + (uint)bVar18;
                  iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                  iVar35 = iVar35 + (uint)bVar51;
                  iVar59 = iVar59 + (uint)bVar50;
                  iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                  iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                  if ((int)(uVar85 + 6) < (int)param_5) {
                    bVar18 = pbVar26[lVar32 * 6];
                    bVar50 = pbVar26[lVar32 * 6 + 1];
                    bVar51 = pbVar26[lVar32 * 6 + 2];
                    iVar60 = iVar60 + (uint)bVar18;
                    iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                    iVar35 = iVar35 + (uint)bVar51;
                    iVar59 = iVar59 + (uint)bVar50;
                    iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                    iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                    if ((int)(uVar85 + 7) < (int)param_5) {
                      bVar18 = pbVar26[lVar32 * 7];
                      bVar50 = pbVar26[lVar32 * 7 + 1];
                      bVar51 = pbVar26[lVar32 * 7 + 2];
                      iVar60 = iVar60 + (uint)bVar18;
                      iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                      iVar35 = iVar35 + (uint)bVar51;
                      iVar59 = iVar59 + (uint)bVar50;
                      iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                      iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                      if ((int)(uVar85 + 8) < (int)param_5) {
                        bVar18 = pbVar26[lVar32 * 8];
                        bVar50 = pbVar26[lVar32 * 8 + 1];
                        bVar51 = pbVar26[lVar32 * 8 + 2];
                        iVar60 = iVar60 + (uint)bVar18;
                        iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                        iVar35 = iVar35 + (uint)bVar51;
                        iVar59 = iVar59 + (uint)bVar50;
                        iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                        iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                        if ((int)(uVar85 + 9) < (int)param_5) {
                          bVar18 = pbVar26[lVar32 * 9];
                          bVar50 = pbVar26[lVar32 * 9 + 1];
                          bVar51 = pbVar26[lVar32 * 9 + 2];
                          iVar60 = iVar60 + (uint)bVar18;
                          iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                    /* catch() { ... } // from try @ 0038d874 with catch @ 0038d844
                       catch() { ... } // from try @ 0038dc30 with catch @ 0038d844
                       catch() { ... } // from try @ 0038dcdc with catch @ 0038d844
                       catch() { ... } // from try @ 0038e020 with catch @ 0038d844
                       catch() { ... } // from try @ 0038e08c with catch @ 0038d844
                       catch() { ... } // from try @ 0038e0e8 with catch @ 0038d844 */
                          iVar35 = iVar35 + (uint)bVar51;
                          iVar59 = iVar59 + (uint)bVar50;
                          iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                          iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                          if ((int)(uVar85 + 10) < (int)param_5) {
                            bVar18 = pbVar26[lVar32 * 10];
                            bVar50 = pbVar26[lVar32 * 10 + 1];
                            bVar51 = pbVar26[lVar32 * 10 + 2];
                            iVar60 = iVar60 + (uint)bVar18;
                    /* try { // try from 0038d874 to 0048d897 has its CatchHandler @ 0038d844 */
                            iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                            iVar35 = iVar35 + (uint)bVar51;
                            iVar59 = iVar59 + (uint)bVar50;
                            iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                            iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                            if ((int)(uVar85 + 0xb) < (int)param_5) {
                              bVar18 = pbVar26[lVar32 * 0xb];
                              bVar50 = pbVar26[lVar32 * 0xb + 1];
                              bVar51 = pbVar26[lVar32 * 0xb + 2];
                              iVar60 = iVar60 + (uint)bVar18;
                              iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                              iVar35 = iVar35 + (uint)bVar51;
                              iVar59 = iVar59 + (uint)bVar50;
                              iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                              iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                              if ((int)(uVar85 + 0xc) < (int)param_5) {
                                bVar18 = pbVar26[lVar32 * 0xc];
                    /* try { // try from 0038d8cc to 0048d8cf has its CatchHandler @ 0038e0c4 */
                                bVar50 = pbVar26[lVar32 * 0xc + 1];
                                bVar51 = pbVar26[lVar32 * 0xc + 2];
                                iVar60 = iVar60 + (uint)bVar18;
                                iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                                iVar35 = iVar35 + (uint)bVar51;
                                iVar59 = iVar59 + (uint)bVar50;
                                iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                                iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                                if ((int)(uVar85 + 0xd) < (int)param_5) {
                                  bVar18 = pbVar26[lVar32 * 0xd];
                                  bVar50 = pbVar26[lVar32 * 0xd + 1];
                                  bVar51 = pbVar26[lVar32 * 0xd + 2];
                                  iVar60 = iVar60 + (uint)bVar18;
                    /* try { // try from 0038d910 to 0048d913 has its CatchHandler @ 0038e110 */
                                  iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                                  iVar35 = iVar35 + (uint)bVar51;
                    /* try { // try from 0038d918 to 0048da37 has its CatchHandler @ 0038e0c4 */
                                  iVar59 = iVar59 + (uint)bVar50;
                                  iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                                  iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                                  if ((int)(uVar85 + 0xe) < (int)param_5) {
                                    bVar18 = pbVar26[lVar32 * 0xe];
                                    bVar50 = pbVar26[lVar32 * 0xe + 1];
                                    bVar51 = pbVar26[lVar32 * 0xe + 2];
                                    iVar60 = iVar60 + (uint)bVar18;
                                    iVar54 = iVar54 + (uint)bVar18 * (uint)bVar18;
                                    iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
                                    iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
                                    iVar59 = iVar59 + (uint)bVar50;
                                    iVar35 = iVar35 + (uint)bVar51;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0038d954:
      *(int *)param_3 = iVar60;
      *(int *)(param_3 + 4) = iVar59;
      *(int *)(param_3 + 8) = iVar35;
      *(int *)param_4 = iVar54;
      *(int *)(param_4 + 4) = iVar53;
      *(int *)(param_4 + 8) = iVar28;
      goto LAB_0038c14c;
    }
    iVar59 = *(int *)param_3;
    iVar35 = *(int *)(param_3 + 4);
    iVar53 = *(int *)param_4;
    iVar28 = *(int *)(param_4 + 4);
    if (0 < (int)param_5) {
      uVar33 = (param_5 - 0x10 >> 4) + 1;
      lVar32 = (long)(int)param_6;
      uVar85 = uVar33 * 0x10;
      if (param_5 - 1 < 0xf) {
        uVar85 = 0;
        pbVar26 = param_1;
      }
      else {
        iVar115 = 0;
        iVar116 = 0;
        iVar119 = 0;
        iVar120 = 0;
                    /* try { // try from 0038ce08 to 0048ce0b has its CatchHandler @ 0038d664 */
                    /* try { // try from 0038ce10 to 0048d09b has its CatchHandler @ 0038cd40 */
        pbVar26 = param_1 + 1;
        uVar101 = 0;
        pbVar29 = param_1;
        iVar54 = iVar115;
        iVar60 = iVar116;
        iVar55 = iVar115;
        iVar61 = iVar116;
        iVar52 = iVar115;
        iVar58 = iVar116;
        iVar100 = iVar119;
        iVar102 = iVar120;
        iVar105 = iVar119;
        iVar107 = iVar120;
        iVar111 = iVar119;
        iVar112 = iVar120;
        do {
          bVar50 = *pbVar29;
          uVar101 = uVar101 + 1;
          pbVar41 = pbVar29 + lVar32;
          pbVar42 = pbVar29 + lVar32 * 2;
          pbVar40 = pbVar29 + lVar32 * 3;
          pbVar38 = pbVar29 + lVar32 * 4;
          pbVar2 = pbVar29 + lVar32 * 5;
          pbVar3 = pbVar29 + lVar32 * 6;
          pbVar4 = pbVar29 + lVar32 * 7;
          pbVar5 = pbVar29 + lVar32 * 8;
          pbVar6 = pbVar29 + lVar32 * 9;
          pbVar7 = pbVar29 + lVar32 * 10;
          pbVar8 = pbVar29 + lVar32 * 0xb;
          pbVar9 = pbVar29 + lVar32 * 0xc;
          pbVar10 = pbVar29 + lVar32 * 0xd;
          pbVar11 = pbVar29 + lVar32 * 0xe;
          pbVar12 = pbVar29 + lVar32 * 0xf;
          pbVar29 = pbVar29 + lVar32 * 0x10;
          bVar51 = *pbVar26;
          pbVar13 = pbVar26 + lVar32;
          uVar20 = CONCAT12(*pbVar41,CONCAT11(*pbVar41,bVar50)) & 0xff00ff;
          uVar27 = (uint)*pbVar40;
          uVar21 = CONCAT12(*pbVar6,CONCAT11(*pbVar6,*pbVar5)) & 0xff00ff;
          uVar43 = (uint)*pbVar8;
          pbVar41 = pbVar26 + lVar32 * 2;
          uVar80 = uVar20 & 0xffff;
          uVar82 = (uint)*pbVar42;
          pbVar42 = pbVar26 + lVar32 * 3;
          uVar67 = CONCAT12(*pbVar2,(ushort)*pbVar38) & 0xffff;
          uVar71 = (uint)*pbVar3;
          uVar77 = uVar21 & 0xffff;
          uVar79 = (uint)*pbVar7;
          uVar127 = CONCAT12(*pbVar10,(ushort)*pbVar9) & 0xffff;
          uVar62 = (uint)*pbVar11;
          pbVar40 = pbVar26 + lVar32 * 4;
          uVar81 = (uint)(byte)(uVar20 >> 0x10);
          pbVar38 = pbVar26 + lVar32 * 5;
          uVar69 = (uint)*pbVar2;
          uVar73 = (uint)*pbVar4;
          pbVar2 = pbVar26 + lVar32 * 6;
          uVar78 = (uint)(byte)(uVar21 >> 0x10);
          pbVar3 = pbVar26 + lVar32 * 7;
          pbVar4 = pbVar26 + lVar32 * 8;
          iVar115 = uVar127 + uVar77 + uVar67 + uVar80 + iVar115;
          uVar57 = (uint)*pbVar10;
          iVar116 = uVar57 + uVar78 + uVar69 + uVar81 + iVar116;
          iVar119 = uVar62 + uVar79 + uVar71 + uVar82 + iVar119;
          uVar65 = (uint)*pbVar12;
          iVar120 = uVar65 + uVar43 + uVar73 + uVar27 + iVar120;
          iVar52 = iVar52 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 + uVar127 * uVar127;
          iVar58 = iVar58 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 + uVar57 * uVar57;
          iVar111 = iVar111 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 + uVar62 * uVar62;
          iVar112 = iVar112 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 + uVar65 * uVar65;
          pbVar5 = pbVar26 + lVar32 * 9;
          pbVar6 = pbVar26 + lVar32 * 10;
          pbVar7 = pbVar26 + lVar32 * 0xb;
          pbVar8 = pbVar26 + lVar32 * 0xc;
          pbVar9 = pbVar26 + lVar32 * 0xd;
          pbVar10 = pbVar26 + lVar32 * 0xe;
          pbVar11 = pbVar26 + lVar32 * 0xf;
          pbVar26 = pbVar26 + lVar32 * 0x10;
          uVar20 = CONCAT12(*pbVar13,CONCAT11(*pbVar13,bVar51)) & 0xff00ff;
          uVar27 = (uint)*pbVar42;
          uVar21 = CONCAT12(*pbVar5,CONCAT11(*pbVar5,*pbVar4)) & 0xff00ff;
          uVar43 = (uint)*pbVar7;
          uVar80 = uVar20 & 0xffff;
          uVar82 = (uint)*pbVar41;
          uVar67 = CONCAT12(*pbVar38,(ushort)*pbVar40) & 0xffff;
          uVar71 = (uint)*pbVar2;
          uVar77 = uVar21 & 0xffff;
          uVar79 = (uint)*pbVar6;
          uVar127 = CONCAT12(*pbVar9,(ushort)*pbVar8) & 0xffff;
          uVar62 = (uint)*pbVar10;
          uVar81 = (uint)(byte)(uVar20 >> 0x10);
          uVar69 = (uint)*pbVar38;
          uVar73 = (uint)*pbVar3;
          uVar78 = (uint)(byte)(uVar21 >> 0x10);
          iVar55 = uVar127 + uVar77 + uVar67 + uVar80 + iVar55;
          uVar57 = (uint)*pbVar9;
          iVar61 = uVar57 + uVar78 + uVar69 + uVar81 + iVar61;
          iVar105 = uVar62 + uVar79 + uVar71 + uVar82 + iVar105;
          uVar65 = (uint)*pbVar11;
          iVar107 = uVar65 + uVar43 + uVar73 + uVar27 + iVar107;
          iVar54 = iVar54 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 + uVar127 * uVar127;
          iVar60 = iVar60 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 + uVar57 * uVar57;
          iVar100 = iVar100 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 + uVar62 * uVar62;
          iVar102 = iVar102 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 + uVar65 * uVar65;
        } while (uVar101 < uVar33);
        iVar28 = iVar28 + iVar54 + iVar60 + iVar100 + iVar102;
        iVar35 = iVar35 + iVar55 + iVar61 + iVar105 + iVar107;
        iVar53 = iVar53 + iVar52 + iVar58 + iVar111 + iVar112;
        iVar59 = iVar59 + iVar115 + iVar116 + iVar119 + iVar120;
        pbVar26 = param_1 + (ulong)uVar85 * lVar32;
        uVar33 = param_5;
        if (param_5 == uVar85) goto LAB_0038d284;
      }
      bVar50 = *pbVar26;
      bVar51 = pbVar26[1];
      iVar59 = iVar59 + (uint)bVar50;
      iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
      iVar35 = iVar35 + (uint)bVar51;
      iVar28 = iVar28 + (uint)bVar51 * (uint)bVar51;
      uVar33 = param_5;
      if ((int)(uVar85 + 1) < (int)param_5) {
        bVar51 = pbVar26[lVar32];
        bVar50 = pbVar26[lVar32 + 1];
        iVar59 = iVar59 + (uint)bVar51;
        iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
        iVar35 = iVar35 + (uint)bVar50;
        iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
        if ((int)(uVar85 + 2) < (int)param_5) {
          bVar51 = pbVar26[lVar32 * 2];
          bVar50 = pbVar26[lVar32 * 2 + 1];
          iVar59 = iVar59 + (uint)bVar51;
          iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
          iVar35 = iVar35 + (uint)bVar50;
          iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
          if ((int)(uVar85 + 3) < (int)param_5) {
            bVar51 = pbVar26[lVar32 * 3];
            bVar50 = pbVar26[lVar32 * 3 + 1];
            iVar59 = iVar59 + (uint)bVar51;
            iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
            iVar35 = iVar35 + (uint)bVar50;
            iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
            if ((int)(uVar85 + 4) < (int)param_5) {
              bVar51 = pbVar26[lVar32 * 4];
              bVar50 = pbVar26[lVar32 * 4 + 1];
              iVar59 = iVar59 + (uint)bVar51;
                    /* try { // try from 0038d0ec to 0048d137 has its CatchHandler @ 0038d678 */
              iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
              iVar35 = iVar35 + (uint)bVar50;
              iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
              if ((int)(uVar85 + 5) < (int)param_5) {
                bVar51 = pbVar26[lVar32 * 5];
                bVar50 = pbVar26[lVar32 * 5 + 1];
                iVar59 = iVar59 + (uint)bVar51;
                iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                iVar35 = iVar35 + (uint)bVar50;
                iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                if ((int)(uVar85 + 6) < (int)param_5) {
                  bVar51 = pbVar26[lVar32 * 6];
                  bVar50 = pbVar26[lVar32 * 6 + 1];
                  iVar59 = iVar59 + (uint)bVar51;
                  iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                  iVar35 = iVar35 + (uint)bVar50;
                  iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                  if ((int)(uVar85 + 7) < (int)param_5) {
                    bVar51 = pbVar26[lVar32 * 7];
                    bVar50 = pbVar26[lVar32 * 7 + 1];
                    iVar59 = iVar59 + (uint)bVar51;
                    iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                    /* try { // try from 0038d16c to 0048d37f has its CatchHandler @ 0038cd40 */
                    iVar35 = iVar35 + (uint)bVar50;
                    iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                    if ((int)(uVar85 + 8) < (int)param_5) {
                      bVar51 = pbVar26[lVar32 * 8];
                      bVar50 = pbVar26[lVar32 * 8 + 1];
                      iVar59 = iVar59 + (uint)bVar51;
                      iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                      iVar35 = iVar35 + (uint)bVar50;
                      iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                      if ((int)(uVar85 + 9) < (int)param_5) {
                        bVar51 = pbVar26[lVar32 * 9];
                        bVar50 = pbVar26[lVar32 * 9 + 1];
                        iVar59 = iVar59 + (uint)bVar51;
                        iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                        iVar35 = iVar35 + (uint)bVar50;
                        iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                        if ((int)(uVar85 + 10) < (int)param_5) {
                          bVar51 = pbVar26[lVar32 * 10];
                          bVar50 = pbVar26[lVar32 * 10 + 1];
                          iVar59 = iVar59 + (uint)bVar51;
                          iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                          iVar35 = iVar35 + (uint)bVar50;
                          iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                          if ((int)(uVar85 + 0xb) < (int)param_5) {
                            bVar51 = pbVar26[lVar32 * 0xb];
                            bVar50 = pbVar26[lVar32 * 0xb + 1];
                            iVar59 = iVar59 + (uint)bVar51;
                            iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                            iVar35 = iVar35 + (uint)bVar50;
                            iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                            if ((int)(uVar85 + 0xc) < (int)param_5) {
                              bVar51 = pbVar26[lVar32 * 0xc];
                              bVar50 = pbVar26[lVar32 * 0xc + 1];
                              iVar59 = iVar59 + (uint)bVar51;
                              iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                              iVar35 = iVar35 + (uint)bVar50;
                              iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                              if ((int)(uVar85 + 0xd) < (int)param_5) {
                                bVar51 = pbVar26[lVar32 * 0xd];
                                bVar50 = pbVar26[lVar32 * 0xd + 1];
                                iVar59 = iVar59 + (uint)bVar51;
                                iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                                iVar35 = iVar35 + (uint)bVar50;
                                iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                                if ((int)(uVar85 + 0xe) < (int)param_5) {
                                  bVar51 = pbVar26[lVar32 * 0xe];
                                  bVar50 = pbVar26[lVar32 * 0xe + 1];
                                  iVar59 = iVar59 + (uint)bVar51;
                                  iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                                  iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                                  iVar35 = iVar35 + (uint)bVar50;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_0038d284:
    *(int *)param_3 = iVar59;
    *(int *)(param_3 + 4) = iVar35;
    *(int *)param_4 = iVar53;
    *(int *)(param_4 + 4) = iVar28;
    goto LAB_0038c14c;
  }
  iVar35 = *(int *)param_3;
  iVar28 = *(int *)param_4;
  if (0 < (int)param_5) {
    uVar33 = (param_5 - 0x10 >> 4) + 1;
    lVar32 = (long)(int)param_6;
    uVar85 = uVar33 * 0x10;
    if (param_5 - 1 < 0xf) {
      uVar85 = 0;
      pbVar26 = param_1;
    }
    else {
      iVar55 = 0;
      iVar61 = 0;
      iVar52 = 0;
      iVar58 = 0;
      pbVar26 = param_1 + lVar32 * 10;
      uVar101 = 0;
      pbVar29 = param_1;
      iVar53 = iVar55;
      iVar59 = iVar61;
      iVar54 = iVar52;
      iVar60 = iVar58;
      do {
        bVar50 = *pbVar29;
        uVar101 = uVar101 + 1;
        pbVar41 = pbVar29 + lVar32;
        pbVar42 = pbVar29 + lVar32 * 2;
        pbVar40 = pbVar29 + lVar32 * 3;
        pbVar38 = pbVar29 + lVar32 * 4;
        pbVar2 = pbVar29 + lVar32 * 5;
        pbVar3 = pbVar29 + lVar32 * 6;
        pbVar4 = pbVar26 + lVar32 * -3;
        pbVar5 = pbVar29 + lVar32 * 8;
        pbVar6 = pbVar29 + lVar32 * 9;
        pbVar29 = pbVar29 + lVar32 * 0x10;
        bVar51 = *pbVar26;
        pbVar7 = pbVar26 + lVar32;
        pbVar8 = pbVar26 + lVar32 * 2;
        pbVar9 = pbVar26 + lVar32 * 3;
        pbVar10 = pbVar26 + lVar32 * 4;
        pbVar11 = pbVar26 + lVar32 * 5;
        pbVar26 = pbVar26 + lVar32 * 0x10;
        uVar20 = CONCAT12(*pbVar41,CONCAT11(*pbVar41,bVar50)) & 0xff00ff;
        uVar27 = (uint)*pbVar40;
        uVar21 = CONCAT12(*pbVar6,CONCAT11(*pbVar6,*pbVar5)) & 0xff00ff;
        uVar43 = (uint)*pbVar7;
        uVar80 = uVar20 & 0xffff;
        uVar82 = (uint)*pbVar42;
        uVar67 = CONCAT12(*pbVar2,(ushort)*pbVar38) & 0xffff;
        uVar71 = (uint)*pbVar3;
        uVar77 = uVar21 & 0xffff;
        uVar79 = (uint)bVar51;
        uVar127 = CONCAT12(*pbVar9,(ushort)*pbVar8) & 0xffff;
        uVar62 = (uint)*pbVar10;
        uVar81 = (uint)(byte)(uVar20 >> 0x10);
        uVar69 = (uint)*pbVar2;
        uVar73 = (uint)*pbVar4;
        uVar78 = (uint)(byte)(uVar21 >> 0x10);
        iVar55 = uVar127 + uVar77 + uVar67 + uVar80 + iVar55;
        uVar57 = (uint)*pbVar9;
        iVar61 = uVar57 + uVar78 + uVar69 + uVar81 + iVar61;
        iVar52 = uVar62 + uVar79 + uVar71 + uVar82 + iVar52;
        uVar65 = (uint)*pbVar11;
        iVar58 = uVar65 + uVar43 + uVar73 + uVar27 + iVar58;
        iVar53 = iVar53 + uVar80 * uVar80 + uVar67 * uVar67 + uVar77 * uVar77 + uVar127 * uVar127;
        iVar59 = iVar59 + uVar81 * uVar81 + uVar69 * uVar69 + uVar78 * uVar78 + uVar57 * uVar57;
        iVar54 = iVar54 + uVar82 * uVar82 + uVar71 * uVar71 + uVar79 * uVar79 + uVar62 * uVar62;
        iVar60 = iVar60 + uVar27 * uVar27 + uVar73 * uVar73 + uVar43 * uVar43 + uVar65 * uVar65;
      } while (uVar101 < uVar33);
      iVar28 = iVar28 + iVar53 + iVar59 + iVar54 + iVar60;
      iVar35 = iVar35 + iVar55 + iVar61 + iVar52 + iVar58;
      pbVar26 = param_1 + (ulong)uVar85 * lVar32;
      uVar33 = param_5;
      if (param_5 == uVar85) goto LAB_0038cda8;
    }
    bVar50 = *pbVar26;
    iVar35 = iVar35 + (uint)bVar50;
    iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
    uVar33 = param_5;
    if ((int)(uVar85 + 1) < (int)param_5) {
      bVar50 = pbVar26[lVar32];
      iVar35 = iVar35 + (uint)bVar50;
      iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
      if ((int)(uVar85 + 2) < (int)param_5) {
        bVar50 = pbVar26[lVar32 * 2];
        iVar35 = iVar35 + (uint)bVar50;
        iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
        if ((int)(uVar85 + 3) < (int)param_5) {
          bVar50 = pbVar26[lVar32 * 3];
          iVar35 = iVar35 + (uint)bVar50;
          iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
          if ((int)(uVar85 + 4) < (int)param_5) {
            bVar50 = pbVar26[lVar32 * 4];
            iVar35 = iVar35 + (uint)bVar50;
            iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
            if ((int)(uVar85 + 5) < (int)param_5) {
              bVar50 = pbVar26[lVar32 * 5];
              iVar35 = iVar35 + (uint)bVar50;
              iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
              if ((int)(uVar85 + 6) < (int)param_5) {
                bVar50 = pbVar26[lVar32 * 6];
                iVar35 = iVar35 + (uint)bVar50;
                iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                if ((int)(uVar85 + 7) < (int)param_5) {
                  bVar50 = pbVar26[lVar32 * 7];
                  iVar35 = iVar35 + (uint)bVar50;
                  iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                  if ((int)(uVar85 + 8) < (int)param_5) {
                    bVar50 = pbVar26[lVar32 * 8];
                    iVar35 = iVar35 + (uint)bVar50;
                    iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                    if ((int)(uVar85 + 9) < (int)param_5) {
                      bVar50 = pbVar26[lVar32 * 9];
                      iVar35 = iVar35 + (uint)bVar50;
                      iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                      if ((int)(uVar85 + 10) < (int)param_5) {
                        bVar50 = pbVar26[lVar32 * 10];
                        iVar35 = iVar35 + (uint)bVar50;
                    /* catch() { ... } // from try @ 0038cd68 with catch @ 0038cd40
                       catch() { ... } // from try @ 0038ce10 with catch @ 0038cd40
                       catch() { ... } // from try @ 0038d16c with catch @ 0038cd40
                       catch() { ... } // from try @ 0038d594 with catch @ 0038cd40
                       catch() { ... } // from try @ 0038d660 with catch @ 0038cd40
                       catch() { ... } // from try @ 0038d674 with catch @ 0038cd40
                       catch() { ... } // from try @ 0038d69c with catch @ 0038cd40 */
                        iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                        if ((int)(uVar85 + 0xb) < (int)param_5) {
                          bVar50 = pbVar26[lVar32 * 0xb];
                          iVar35 = iVar35 + (uint)bVar50;
                          iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                          if ((int)(uVar85 + 0xc) < (int)param_5) {
                            bVar50 = pbVar26[lVar32 * 0xc];
                    /* try { // try from 0038cd68 to 0048cdbf has its CatchHandler @ 0038cd40 */
                            iVar35 = iVar35 + (uint)bVar50;
                            iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                            if ((int)(uVar85 + 0xd) < (int)param_5) {
                              bVar50 = pbVar26[lVar32 * 0xd];
                              iVar35 = iVar35 + (uint)bVar50;
                              iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                              if ((int)(uVar85 + 0xe) < (int)param_5) {
                                bVar50 = pbVar26[lVar32 * 0xe];
                                iVar35 = iVar35 + (uint)bVar50;
                                iVar28 = iVar28 + (uint)bVar50 * (uint)bVar50;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0038cda8:
  *(int *)param_3 = iVar35;
  *(int *)param_4 = iVar28;
LAB_0038c14c:
  if (iVar31 < (int)param_6) {
    lVar34 = (long)(int)param_6;
    lVar44 = lVar34 * 2;
    lVar37 = lVar34 * 3;
    lVar48 = lVar34 * 4;
    lVar47 = lVar34 * 0xc;
    lVar30 = (long)iVar31;
    lVar76 = NEON_shl(lVar34,4);
    lVar39 = lVar34 * 5;
    lVar36 = lVar34 * 0xd;
    lVar46 = lVar34 * 10;
    lVar22 = lVar34 * 0xb;
    lVar45 = lVar34 * 8;
    param_1 = param_1 + lVar30;
    lVar32 = lVar34 * 7;
    lVar23 = lVar34 * 9;
    lVar25 = lVar76 + lVar34 * -2;
    lVar96 = NEON_shl(lVar37,1);
    lVar49 = lVar76 - lVar34;
    pbVar26 = param_4 + lVar30 * 4;
    pbVar29 = param_3 + lVar30 * 4;
    do {
      iVar61 = *(int *)pbVar29;
      iVar60 = *(int *)(pbVar29 + 4);
      iVar54 = *(int *)(pbVar29 + 8);
      iVar35 = *(int *)(pbVar29 + 0xc);
      iVar55 = *(int *)pbVar26;
      iVar59 = *(int *)(pbVar26 + 4);
      iVar53 = *(int *)(pbVar26 + 8);
      iVar28 = *(int *)(pbVar26 + 0xc);
      uVar85 = uVar33;
      if ((int)uVar33 < (int)param_5) {
        uVar43 = param_5 - uVar33;
        uVar101 = (uVar43 - 0x10 >> 4) + 1;
        uVar27 = uVar101 * 0x10;
        pbVar41 = param_1;
        uVar85 = param_5;
        if (0xe < (param_5 - 1) - uVar33) {
          iVar68 = 0;
          iVar70 = 0;
          iVar72 = 0;
          iVar74 = 0;
          uVar127 = 0;
          pbVar41 = param_1 + 1;
          pbVar42 = param_1 + 2;
          pbVar40 = param_1 + 3;
          pbVar38 = param_1;
          iVar52 = iVar68;
          iVar58 = iVar70;
          iVar100 = iVar68;
          iVar102 = iVar70;
          iVar105 = iVar68;
          iVar107 = iVar70;
          iVar111 = iVar68;
          iVar112 = iVar70;
          iVar115 = iVar68;
          iVar116 = iVar70;
          iVar119 = iVar68;
          iVar120 = iVar70;
          iVar123 = iVar68;
          iVar124 = iVar70;
          iVar63 = iVar72;
          iVar66 = iVar74;
          iVar103 = iVar72;
          iVar104 = iVar74;
          iVar108 = iVar72;
          iVar110 = iVar74;
          iVar113 = iVar72;
          iVar114 = iVar74;
          iVar117 = iVar72;
          iVar118 = iVar74;
          iVar121 = iVar72;
          iVar122 = iVar74;
          iVar125 = iVar72;
          iVar126 = iVar74;
          do {
            uVar127 = uVar127 + 1;
            bVar50 = *pbVar38;
            pbVar2 = pbVar38 + lVar34;
            pbVar3 = pbVar38 + lVar44;
            pbVar4 = pbVar38 + lVar37;
            pbVar5 = pbVar38 + lVar48;
            pbVar6 = pbVar38 + lVar39;
            pbVar7 = pbVar38 + lVar96;
            pbVar8 = pbVar38 + lVar32;
            pbVar9 = pbVar38 + lVar45;
            pbVar10 = pbVar38 + lVar23;
            pbVar11 = pbVar38 + lVar46;
            pbVar12 = pbVar38 + lVar22;
            pbVar13 = pbVar38 + lVar47;
            pbVar14 = pbVar38 + lVar36;
            pbVar15 = pbVar38 + lVar25;
            pbVar16 = pbVar38 + lVar49;
            pbVar38 = pbVar38 + lVar76;
            bVar51 = *pbVar41;
            pbVar17 = pbVar41 + lVar34;
            uVar20 = CONCAT12(*pbVar2,CONCAT11(*pbVar2,bVar50)) & 0xff00ff;
            uVar57 = (uint)*pbVar4;
            uVar21 = CONCAT12(*pbVar10,CONCAT11(*pbVar10,*pbVar9)) & 0xff00ff;
            uVar62 = (uint)*pbVar12;
            pbVar2 = pbVar41 + lVar44;
            uVar90 = uVar20 & 0xffff;
            uVar93 = (uint)*pbVar3;
            pbVar3 = pbVar41 + lVar37;
            uVar73 = CONCAT12(*pbVar6,(ushort)*pbVar5) & 0xffff;
            uVar78 = (uint)*pbVar7;
            uVar80 = uVar21 & 0xffff;
            uVar82 = (uint)*pbVar11;
            uVar65 = CONCAT12(*pbVar14,(ushort)*pbVar13) & 0xffff;
            uVar69 = (uint)*pbVar15;
            pbVar4 = pbVar41 + lVar48;
            uVar92 = (uint)(byte)(uVar20 >> 0x10);
            pbVar5 = pbVar41 + lVar39;
            uVar77 = (uint)*pbVar6;
            uVar79 = (uint)*pbVar8;
            uVar81 = (uint)(byte)(uVar21 >> 0x10);
            pbVar6 = pbVar41 + lVar96;
            iVar68 = uVar65 + uVar80 + uVar73 + uVar90 + iVar68;
            uVar67 = (uint)*pbVar14;
            iVar70 = uVar67 + uVar81 + uVar77 + uVar92 + iVar70;
            iVar72 = uVar69 + uVar82 + uVar78 + uVar93 + iVar72;
            uVar71 = (uint)*pbVar16;
            iVar74 = uVar71 + uVar62 + uVar79 + uVar57 + iVar74;
            iVar100 = iVar100 + uVar90 * uVar90 + uVar73 * uVar73 + uVar80 * uVar80 +
                      uVar65 * uVar65;
            iVar102 = iVar102 + uVar92 * uVar92 + uVar77 * uVar77 + uVar81 * uVar81 +
                      uVar67 * uVar67;
            iVar103 = iVar103 + uVar93 * uVar93 + uVar78 * uVar78 + uVar82 * uVar82 +
                      uVar69 * uVar69;
            iVar104 = iVar104 + uVar57 * uVar57 + uVar79 * uVar79 + uVar62 * uVar62 +
                      uVar71 * uVar71;
            pbVar7 = pbVar41 + lVar32;
            pbVar8 = pbVar41 + lVar45;
            pbVar9 = pbVar41 + lVar23;
            pbVar10 = pbVar41 + lVar46;
            pbVar11 = pbVar41 + lVar22;
            pbVar12 = pbVar41 + lVar47;
            pbVar13 = pbVar41 + lVar36;
            pbVar14 = pbVar41 + lVar25;
            pbVar15 = pbVar41 + lVar49;
            pbVar41 = pbVar41 + lVar76;
            bVar50 = *pbVar42;
            pbVar16 = pbVar42 + lVar34;
            uVar20 = CONCAT12(*pbVar17,CONCAT11(*pbVar17,bVar51)) & 0xff00ff;
            uVar57 = (uint)*pbVar3;
            uVar21 = CONCAT12(*pbVar9,CONCAT11(*pbVar9,*pbVar8)) & 0xff00ff;
            uVar62 = (uint)*pbVar11;
            pbVar3 = pbVar42 + lVar44;
            uVar90 = uVar20 & 0xffff;
            uVar93 = (uint)*pbVar2;
            pbVar2 = pbVar42 + lVar37;
            uVar73 = CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff;
            uVar78 = (uint)*pbVar6;
            uVar80 = uVar21 & 0xffff;
            uVar82 = (uint)*pbVar10;
            uVar65 = CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff;
            uVar69 = (uint)*pbVar14;
            pbVar4 = pbVar42 + lVar48;
            uVar92 = (uint)(byte)(uVar20 >> 0x10);
            pbVar6 = pbVar42 + lVar39;
            uVar77 = (uint)*pbVar5;
            uVar79 = (uint)*pbVar7;
            uVar81 = (uint)(byte)(uVar21 >> 0x10);
            pbVar5 = pbVar42 + lVar96;
            iVar105 = uVar65 + uVar80 + uVar73 + uVar90 + iVar105;
            uVar67 = (uint)*pbVar13;
            iVar107 = uVar67 + uVar81 + uVar77 + uVar92 + iVar107;
            iVar108 = uVar69 + uVar82 + uVar78 + uVar93 + iVar108;
            uVar71 = (uint)*pbVar15;
            iVar110 = uVar71 + uVar62 + uVar79 + uVar57 + iVar110;
            iVar111 = iVar111 + uVar90 * uVar90 + uVar73 * uVar73 + uVar80 * uVar80 +
                      uVar65 * uVar65;
            iVar112 = iVar112 + uVar92 * uVar92 + uVar77 * uVar77 + uVar81 * uVar81 +
                      uVar67 * uVar67;
            iVar113 = iVar113 + uVar93 * uVar93 + uVar78 * uVar78 + uVar82 * uVar82 +
                      uVar69 * uVar69;
            iVar114 = iVar114 + uVar57 * uVar57 + uVar79 * uVar79 + uVar62 * uVar62 +
                      uVar71 * uVar71;
            pbVar7 = pbVar42 + lVar32;
            pbVar8 = pbVar42 + lVar45;
            pbVar9 = pbVar42 + lVar23;
            pbVar10 = pbVar42 + lVar46;
            pbVar11 = pbVar42 + lVar22;
            pbVar12 = pbVar42 + lVar47;
            pbVar13 = pbVar42 + lVar36;
            pbVar14 = pbVar42 + lVar25;
            pbVar15 = pbVar42 + lVar49;
            pbVar42 = pbVar42 + lVar76;
            bVar51 = *pbVar40;
            pbVar17 = pbVar40 + lVar34;
            uVar20 = CONCAT12(*pbVar16,CONCAT11(*pbVar16,bVar50)) & 0xff00ff;
            uVar57 = (uint)*pbVar2;
            uVar21 = CONCAT12(*pbVar9,CONCAT11(*pbVar9,*pbVar8)) & 0xff00ff;
            uVar62 = (uint)*pbVar11;
            pbVar2 = pbVar40 + lVar44;
            uVar90 = uVar20 & 0xffff;
            uVar93 = (uint)*pbVar3;
            pbVar3 = pbVar40 + lVar37;
            uVar73 = CONCAT12(*pbVar6,(ushort)*pbVar4) & 0xffff;
            uVar78 = (uint)*pbVar5;
            uVar80 = uVar21 & 0xffff;
            uVar82 = (uint)*pbVar10;
            uVar65 = CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff;
            uVar69 = (uint)*pbVar14;
            pbVar4 = pbVar40 + lVar48;
            uVar92 = (uint)(byte)(uVar20 >> 0x10);
            pbVar5 = pbVar40 + lVar39;
            uVar77 = (uint)*pbVar6;
            uVar79 = (uint)*pbVar7;
            uVar81 = (uint)(byte)(uVar21 >> 0x10);
            pbVar6 = pbVar40 + lVar96;
            iVar115 = uVar65 + uVar80 + uVar73 + uVar90 + iVar115;
            uVar67 = (uint)*pbVar13;
            iVar116 = uVar67 + uVar81 + uVar77 + uVar92 + iVar116;
            iVar117 = uVar69 + uVar82 + uVar78 + uVar93 + iVar117;
            uVar71 = (uint)*pbVar15;
            iVar118 = uVar71 + uVar62 + uVar79 + uVar57 + iVar118;
            iVar119 = iVar119 + uVar90 * uVar90 + uVar73 * uVar73 + uVar80 * uVar80 +
                      uVar65 * uVar65;
            iVar120 = iVar120 + uVar92 * uVar92 + uVar77 * uVar77 + uVar81 * uVar81 +
                      uVar67 * uVar67;
            iVar121 = iVar121 + uVar93 * uVar93 + uVar78 * uVar78 + uVar82 * uVar82 +
                      uVar69 * uVar69;
            iVar122 = iVar122 + uVar57 * uVar57 + uVar79 * uVar79 + uVar62 * uVar62 +
                      uVar71 * uVar71;
            pbVar7 = pbVar40 + lVar32;
            pbVar8 = pbVar40 + lVar45;
            pbVar9 = pbVar40 + lVar23;
            pbVar10 = pbVar40 + lVar46;
            pbVar11 = pbVar40 + lVar22;
            pbVar12 = pbVar40 + lVar47;
            pbVar13 = pbVar40 + lVar36;
            pbVar14 = pbVar40 + lVar25;
            pbVar15 = pbVar40 + lVar49;
            pbVar40 = pbVar40 + lVar76;
            uVar20 = CONCAT12(*pbVar17,CONCAT11(*pbVar17,bVar51)) & 0xff00ff;
            uVar57 = (uint)*pbVar3;
            uVar21 = CONCAT12(*pbVar9,CONCAT11(*pbVar9,*pbVar8)) & 0xff00ff;
            uVar62 = (uint)*pbVar11;
            uVar90 = uVar20 & 0xffff;
            uVar93 = (uint)*pbVar2;
            uVar73 = CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff;
            uVar78 = (uint)*pbVar6;
            uVar80 = uVar21 & 0xffff;
            uVar82 = (uint)*pbVar10;
            uVar65 = CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff;
            uVar69 = (uint)*pbVar14;
            uVar92 = (uint)(byte)(uVar20 >> 0x10);
            uVar77 = (uint)*pbVar5;
            uVar79 = (uint)*pbVar7;
            uVar81 = (uint)(byte)(uVar21 >> 0x10);
            iVar123 = uVar65 + uVar80 + uVar73 + uVar90 + iVar123;
            uVar67 = (uint)*pbVar13;
            iVar124 = uVar67 + uVar81 + uVar77 + uVar92 + iVar124;
            iVar125 = uVar69 + uVar82 + uVar78 + uVar93 + iVar125;
            uVar71 = (uint)*pbVar15;
            iVar126 = uVar71 + uVar62 + uVar79 + uVar57 + iVar126;
            iVar52 = iVar52 + uVar90 * uVar90 + uVar73 * uVar73 + uVar80 * uVar80 + uVar65 * uVar65;
            iVar58 = iVar58 + uVar92 * uVar92 + uVar77 * uVar77 + uVar81 * uVar81 + uVar67 * uVar67;
            iVar63 = iVar63 + uVar93 * uVar93 + uVar78 * uVar78 + uVar82 * uVar82 + uVar69 * uVar69;
            iVar66 = iVar66 + uVar57 * uVar57 + uVar79 * uVar79 + uVar62 * uVar62 + uVar71 * uVar71;
          } while (uVar127 < uVar101);
          uVar33 = uVar33 + uVar27;
          pbVar41 = param_1 + (ulong)uVar27 * lVar34;
          iVar28 = iVar28 + iVar52 + iVar58 + iVar63 + iVar66;
          iVar35 = iVar35 + iVar123 + iVar124 + iVar125 + iVar126;
          iVar53 = iVar53 + iVar119 + iVar120 + iVar121 + iVar122;
          iVar59 = iVar59 + iVar111 + iVar112 + iVar113 + iVar114;
          iVar54 = iVar54 + iVar115 + iVar116 + iVar117 + iVar118;
          iVar60 = iVar60 + iVar105 + iVar107 + iVar108 + iVar110;
          iVar55 = iVar55 + iVar100 + iVar102 + iVar103 + iVar104;
          iVar61 = iVar61 + iVar68 + iVar70 + iVar72 + iVar74;
          if (uVar27 == uVar43) goto LAB_0038ca70;
        }
        bVar50 = pbVar41[2];
        bVar51 = *pbVar41;
        bVar18 = pbVar41[1];
        iVar54 = iVar54 + (uint)bVar50;
        bVar19 = pbVar41[3];
        iVar61 = iVar61 + (uint)bVar51;
        iVar53 = iVar53 + (uint)bVar50 * (uint)bVar50;
        iVar60 = iVar60 + (uint)bVar18;
        iVar35 = iVar35 + (uint)bVar19;
        iVar55 = iVar55 + (uint)bVar51 * (uint)bVar51;
        iVar59 = iVar59 + (uint)bVar18 * (uint)bVar18;
        iVar28 = iVar28 + (uint)bVar19 * (uint)bVar19;
        if ((int)(uVar33 + 1) < (int)param_5) {
          bVar19 = pbVar41[lVar34];
          bVar50 = pbVar41[lVar34 + 1];
          bVar51 = pbVar41[lVar34 + 2];
          iVar61 = iVar61 + (uint)bVar19;
          bVar18 = pbVar41[lVar34 + 3];
          iVar60 = iVar60 + (uint)bVar50;
          iVar54 = iVar54 + (uint)bVar51;
          iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
          iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
          iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
          iVar35 = iVar35 + (uint)bVar18;
          lVar24 = lVar34 * 2;
          iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
          if ((int)(uVar33 + 2) < (int)param_5) {
            bVar19 = pbVar41[lVar34 * 2];
            bVar50 = pbVar41[lVar24 + 1];
            bVar51 = pbVar41[lVar24 + 2];
            iVar61 = iVar61 + (uint)bVar19;
            bVar18 = pbVar41[lVar24 + 3];
            iVar60 = iVar60 + (uint)bVar50;
            iVar54 = iVar54 + (uint)bVar51;
            iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
            iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
            iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
            iVar35 = iVar35 + (uint)bVar18;
            lVar24 = lVar34 * 3;
            iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
            if ((int)(uVar33 + 3) < (int)param_5) {
              bVar19 = pbVar41[lVar34 * 3];
              bVar50 = pbVar41[lVar24 + 1];
              bVar51 = pbVar41[lVar24 + 2];
              iVar61 = iVar61 + (uint)bVar19;
              bVar18 = pbVar41[lVar24 + 3];
              iVar60 = iVar60 + (uint)bVar50;
              iVar54 = iVar54 + (uint)bVar51;
              iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
              iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
              iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
              iVar35 = iVar35 + (uint)bVar18;
              lVar24 = lVar34 * 4;
              iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
              if ((int)(uVar33 + 4) < (int)param_5) {
                bVar19 = pbVar41[lVar34 * 4];
                bVar50 = pbVar41[lVar24 + 1];
                bVar51 = pbVar41[lVar24 + 2];
                iVar61 = iVar61 + (uint)bVar19;
                bVar18 = pbVar41[lVar24 + 3];
                iVar60 = iVar60 + (uint)bVar50;
                iVar54 = iVar54 + (uint)bVar51;
                iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                iVar35 = iVar35 + (uint)bVar18;
                lVar24 = lVar34 * 5;
                iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                if ((int)(uVar33 + 5) < (int)param_5) {
                  bVar19 = pbVar41[lVar34 * 5];
                  bVar50 = pbVar41[lVar24 + 1];
                  bVar51 = pbVar41[lVar24 + 2];
                  iVar61 = iVar61 + (uint)bVar19;
                  bVar18 = pbVar41[lVar24 + 3];
                  iVar60 = iVar60 + (uint)bVar50;
                  iVar54 = iVar54 + (uint)bVar51;
                  iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                  iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                  iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                  iVar35 = iVar35 + (uint)bVar18;
                  lVar24 = lVar34 * 6;
                  iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                  if ((int)(uVar33 + 6) < (int)param_5) {
                    bVar19 = pbVar41[lVar34 * 6];
                    bVar50 = pbVar41[lVar24 + 1];
                    bVar51 = pbVar41[lVar24 + 2];
                    iVar61 = iVar61 + (uint)bVar19;
                    bVar18 = pbVar41[lVar24 + 3];
                    iVar60 = iVar60 + (uint)bVar50;
                    iVar54 = iVar54 + (uint)bVar51;
                    iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                    iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                    iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                    iVar35 = iVar35 + (uint)bVar18;
                    lVar24 = lVar34 * 7;
                    iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                    if ((int)(uVar33 + 7) < (int)param_5) {
                      bVar19 = pbVar41[lVar34 * 7];
                      bVar50 = pbVar41[lVar24 + 1];
                      bVar51 = pbVar41[lVar24 + 2];
                      iVar61 = iVar61 + (uint)bVar19;
                      bVar18 = pbVar41[lVar24 + 3];
                      iVar60 = iVar60 + (uint)bVar50;
                      iVar54 = iVar54 + (uint)bVar51;
                      iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                      iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                      iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                      iVar35 = iVar35 + (uint)bVar18;
                      lVar24 = lVar34 * 8;
                      iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                      if ((int)(uVar33 + 8) < (int)param_5) {
                        bVar19 = pbVar41[lVar34 * 8];
                        bVar50 = pbVar41[lVar24 + 1];
                        bVar51 = pbVar41[lVar24 + 2];
                        iVar61 = iVar61 + (uint)bVar19;
                        bVar18 = pbVar41[lVar24 + 3];
                        iVar60 = iVar60 + (uint)bVar50;
                        iVar54 = iVar54 + (uint)bVar51;
                        iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                        iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                        iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                        iVar35 = iVar35 + (uint)bVar18;
                        lVar24 = lVar34 * 9;
                        iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                        if ((int)(uVar33 + 9) < (int)param_5) {
                          bVar19 = pbVar41[lVar34 * 9];
                          bVar50 = pbVar41[lVar24 + 1];
                          bVar51 = pbVar41[lVar24 + 2];
                          iVar61 = iVar61 + (uint)bVar19;
                          bVar18 = pbVar41[lVar24 + 3];
                          iVar60 = iVar60 + (uint)bVar50;
                          iVar54 = iVar54 + (uint)bVar51;
                          iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                          iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                          iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                          iVar35 = iVar35 + (uint)bVar18;
                          lVar24 = lVar34 * 10;
                          iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                          if ((int)(uVar33 + 10) < (int)param_5) {
                            bVar19 = pbVar41[lVar34 * 10];
                            bVar50 = pbVar41[lVar24 + 1];
                            bVar51 = pbVar41[lVar24 + 2];
                            iVar61 = iVar61 + (uint)bVar19;
                            bVar18 = pbVar41[lVar24 + 3];
                            iVar60 = iVar60 + (uint)bVar50;
                            iVar54 = iVar54 + (uint)bVar51;
                            iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                            iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                            iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                            iVar35 = iVar35 + (uint)bVar18;
                            lVar24 = lVar34 * 0xb;
                            iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                            if ((int)(uVar33 + 0xb) < (int)param_5) {
                              bVar19 = pbVar41[lVar34 * 0xb];
                              bVar50 = pbVar41[lVar24 + 1];
                              bVar51 = pbVar41[lVar24 + 2];
                              iVar61 = iVar61 + (uint)bVar19;
                              bVar18 = pbVar41[lVar24 + 3];
                              iVar60 = iVar60 + (uint)bVar50;
                              iVar54 = iVar54 + (uint)bVar51;
                              iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                              iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                              iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                              iVar35 = iVar35 + (uint)bVar18;
                              lVar24 = lVar34 * 0xc;
                              iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                              if ((int)(uVar33 + 0xc) < (int)param_5) {
                                bVar19 = pbVar41[lVar34 * 0xc];
                                bVar50 = pbVar41[lVar24 + 1];
                                bVar51 = pbVar41[lVar24 + 2];
                                iVar61 = iVar61 + (uint)bVar19;
                                bVar18 = pbVar41[lVar24 + 3];
                                iVar60 = iVar60 + (uint)bVar50;
                                iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                                iVar35 = iVar35 + (uint)bVar18;
                                iVar54 = iVar54 + (uint)bVar51;
                                iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                                iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                                iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                                lVar24 = lVar34 * 0xd;
                                if ((int)(uVar33 + 0xd) < (int)param_5) {
                                  bVar19 = pbVar41[lVar34 * 0xd];
                                  bVar50 = pbVar41[lVar24 + 1];
                                  bVar51 = pbVar41[lVar24 + 2];
                                  iVar61 = iVar61 + (uint)bVar19;
                                  bVar18 = pbVar41[lVar24 + 3];
                                  iVar60 = iVar60 + (uint)bVar50;
                                  iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                                  iVar35 = iVar35 + (uint)bVar18;
                                  iVar54 = iVar54 + (uint)bVar51;
                                  iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                                  iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                                  iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                                  lVar24 = lVar34 * 0xe;
                                  if ((int)(uVar33 + 0xe) < (int)param_5) {
                                    bVar19 = pbVar41[lVar34 * 0xe];
                                    bVar50 = pbVar41[lVar24 + 1];
                                    bVar51 = pbVar41[lVar24 + 2];
                                    iVar61 = iVar61 + (uint)bVar19;
                                    bVar18 = pbVar41[lVar24 + 3];
                                    iVar60 = iVar60 + (uint)bVar50;
                                    iVar55 = iVar55 + (uint)bVar19 * (uint)bVar19;
                                    iVar59 = iVar59 + (uint)bVar50 * (uint)bVar50;
                                    iVar53 = iVar53 + (uint)bVar51 * (uint)bVar51;
                                    iVar28 = iVar28 + (uint)bVar18 * (uint)bVar18;
                                    iVar54 = iVar54 + (uint)bVar51;
                                    iVar35 = iVar35 + (uint)bVar18;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0038ca70:
      uVar33 = uVar85;
      *(int *)pbVar29 = iVar61;
      pbVar41 = pbVar29 + 0x10;
      param_1 = param_1 + 4;
      *(int *)(pbVar29 + 0xc) = iVar35;
      *(int *)(pbVar29 + 4) = iVar60;
      *(int *)(pbVar29 + 8) = iVar54;
      *(int *)pbVar26 = iVar55;
      *(int *)(pbVar26 + 4) = iVar59;
      *(int *)(pbVar26 + 8) = iVar53;
      *(int *)(pbVar26 + 0xc) = iVar28;
      pbVar26 = pbVar26 + 0x10;
      pbVar29 = pbVar41;
    } while (pbVar41 != param_3 + (lVar30 + 4 + (ulong)((param_6 - 1) - iVar31 >> 2) * 4) * 4);
  }
  return param_5;
}


==================================================================

### FUNC 0038d9a8 (8008 bytes) name=FUN_0038d9a8

uint FUN_0038d9a8(int *param_1,long param_2,int *param_3,int *param_4,uint param_5,uint param_6)

{
  char *pcVar1;
  char *pcVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char cVar18;
  char cVar19;
  char cVar20;
  char cVar21;
  long lVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  char *pcVar27;
  long lVar28;
  int *piVar29;
  uint uVar30;
  ulong uVar31;
  int *piVar32;
  long lVar33;
  int iVar34;
  long lVar35;
  long lVar36;
  ulong uVar37;
  uint uVar38;
  long lVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  int *piVar43;
  char *pcVar44;
  uint uVar45;
  long lVar46;
  long lVar47;
  long lVar48;
  undefined8 *puVar49;
  long lVar50;
  int *piVar51;
  long lVar52;
  int *piVar53;
  long lVar54;
  int iVar55;
  undefined8 uVar56;
  int iVar57;
  int iVar58;
  int iVar59;
  undefined8 uVar60;
  int iVar61;
  int iVar62;
  int iVar63;
  int iVar64;
  int iVar65;
  int iVar66;
  int iVar67;
  int iVar68;
  int iVar69;
  int iVar70;
  int iVar71;
  int iVar72;
  int iVar73;
  int iVar74;
  undefined8 uVar75;
  long lVar76;
  undefined8 uVar77;
  undefined8 uVar78;
  uint uVar79;
  undefined8 uVar80;
  undefined8 uVar81;
  int iVar82;
  int iVar83;
  int iVar84;
  int iVar85;
  int iVar86;
  undefined8 uVar87;
  int iVar88;
  int iVar89;
  undefined8 uVar90;
  int iVar91;
  int iVar92;
  undefined8 uVar93;
  int iVar94;
  int iVar95;
  undefined8 uVar96;
  int iVar97;
  undefined8 uVar98;
  long lVar99;
  undefined8 uVar100;
  undefined8 uVar101;
  undefined8 uVar102;
  uint uVar103;
  int iVar104;
  int iVar105;
  undefined8 uVar106;
  int iVar107;
  undefined8 uVar108;
  int iVar109;
  int iVar110;
  int iVar111;
  int iVar112;
  int iVar113;
  int iVar114;
  int iVar115;
  int iVar116;
  int iVar117;
  int iVar118;
  int iVar119;
  int iVar120;
  int iVar121;
  int iVar122;
  int iVar123;
  int iVar124;
  int iVar125;
  int iVar126;
  int iVar127;
  int iVar128;
  int iVar129;
  int iVar130;
  int iVar131;
  uint uVar132;
  
  if (param_2 != 0) {
    if (param_6 == 1) {
      iVar34 = *param_3;
      iVar55 = *param_4;
      if ((int)param_5 < 1) {
        uVar38 = 0;
      }
      else {
        lVar35 = 0;
        uVar38 = 0;
        do {
                    /* try { // try from 0038dfa4 to 0048dff7 has its CatchHandler @ 0038e0c4 */
          if (*(char *)(param_2 + lVar35) != '\0') {
            cVar18 = *(char *)((long)param_1 + lVar35);
            uVar38 = uVar38 + 1;
            iVar34 = iVar34 + cVar18;
            iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
          }
          lVar35 = lVar35 + 1;
        } while ((int)lVar35 < (int)param_5);
      }
      *param_3 = iVar34;
      *param_4 = iVar55;
      return uVar38;
    }
    if (param_6 == 3) {
      iVar34 = *param_3;
      iVar55 = param_3[1];
      iVar57 = param_3[2];
      iVar58 = *param_4;
      iVar61 = param_4[1];
      iVar63 = param_4[2];
      if ((int)param_5 < 1) {
        uVar38 = 0;
      }
      else {
        lVar35 = 0;
        uVar38 = 0;
        do {
          pcVar27 = (char *)(param_2 + lVar35);
          lVar35 = lVar35 + 1;
          if (*pcVar27 != '\0') {
            cVar18 = (char)*param_1;
            uVar38 = uVar38 + 1;
            cVar19 = *(char *)((long)param_1 + 1);
            cVar20 = *(char *)((long)param_1 + 2);
            iVar34 = iVar34 + cVar18;
                    /* try { // try from 0038e020 to 0048e023 has its CatchHandler @ 0038d844 */
            iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
            iVar61 = iVar61 + (int)cVar19 * (int)cVar19;
            iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
            iVar55 = iVar55 + cVar19;
            iVar57 = iVar57 + cVar20;
          }
          param_1 = (int *)((long)param_1 + 3);
        } while ((int)lVar35 < (int)param_5);
      }
      *param_3 = iVar34;
      param_3[1] = iVar55;
      param_3[2] = iVar57;
      *param_4 = iVar58;
      param_4[1] = iVar61;
      param_4[2] = iVar63;
      return uVar38;
    }
    if ((int)param_5 < 1) {
      return 0;
    }
    uVar37 = (ulong)param_6;
    uVar38 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    lVar35 = 0;
    if (param_6 < uVar38) {
      uVar38 = param_6;
    }
    piVar29 = (int *)((long)param_1 + uVar37);
    uVar31 = (ulong)uVar38;
    uVar103 = 0;
    uVar79 = ((param_6 - uVar38) - 0x10 >> 4) + 1;
    iVar34 = uVar79 * 0x10;
                    /* try { // try from 0038da5c to 0048daab has its CatchHandler @ 0038e0ec */
    do {
      if (*(char *)(param_2 + lVar35) != '\0') {
        if (0 < (int)param_6) {
          if (((param_6 < 0x13 || param_4 < param_3 + 0x10 && param_3 < param_4 + 0x10) ||
               param_3 < piVar29 && param_1 < param_3 + uVar37) ||
             (param_4 < piVar29 && param_1 < param_4 + uVar37)) {
            lVar36 = 0;
            do {
              cVar18 = *(char *)((long)param_1 + lVar36);
              iVar55 = param_4[lVar36];
              param_3[lVar36] = param_3[lVar36] + (int)cVar18;
              param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
              lVar36 = lVar36 + 1;
            } while ((int)lVar36 < (int)param_6);
          }
          else {
            uVar30 = uVar38;
            if (uVar38 != 0) {
              cVar18 = (char)*param_1;
              iVar55 = *param_4;
              *param_3 = *param_3 + (int)cVar18;
              *param_4 = iVar55 + (int)cVar18 * (int)cVar18;
              if (uVar38 != 1) {
                    /* try { // try from 0038daec to 0048daef has its CatchHandler @ 0038e124 */
                cVar18 = *(char *)((long)param_1 + 1);
                    /* try { // try from 0038daf4 to 0048db4b has its CatchHandler @ 0038e0ec */
                iVar55 = param_4[1];
                param_3[1] = param_3[1] + (int)cVar18;
                param_4[1] = iVar55 + (int)cVar18 * (int)cVar18;
                if (uVar38 == 3) {
                  cVar18 = *(char *)((long)param_1 + 2);
                  iVar55 = param_4[2];
                  param_3[2] = param_3[2] + (int)cVar18;
                  param_4[2] = iVar55 + (int)cVar18 * (int)cVar18;
                }
                else {
                  uVar30 = 2;
                }
              }
            }
            if (0xe < (param_6 - 1) - uVar38) {
              uVar45 = 0;
              piVar32 = param_3 + uVar31;
              piVar43 = param_4 + uVar31;
              puVar49 = (undefined8 *)((long)param_1 + uVar31);
              piVar51 = param_3 + uVar31;
              piVar53 = param_4 + uVar31;
              do {
                uVar60 = puVar49[1];
                uVar56 = *puVar49;
                uVar75 = *(undefined8 *)piVar32;
                uVar96 = *(undefined8 *)(piVar53 + 2);
                uVar93 = *(undefined8 *)piVar53;
                uVar108 = *(undefined8 *)(piVar32 + 6);
                uVar106 = *(undefined8 *)(piVar32 + 4);
                uVar102 = *(undefined8 *)(piVar32 + 10);
                uVar101 = *(undefined8 *)(piVar32 + 8);
                uVar100 = *(undefined8 *)(piVar32 + 0xe);
                uVar98 = *(undefined8 *)(piVar32 + 0xc);
                uVar90 = *(undefined8 *)(piVar53 + 6);
                uVar87 = *(undefined8 *)(piVar53 + 4);
                uVar81 = *(undefined8 *)(piVar53 + 10);
                uVar80 = *(undefined8 *)(piVar53 + 8);
                iVar116 = (int)(short)(char)uVar56;
                iVar118 = (int)(short)(char)((ulong)uVar56 >> 8);
                iVar120 = (int)(short)(char)((ulong)uVar56 >> 0x10);
                iVar122 = (int)(short)(char)((ulong)uVar56 >> 0x18);
                uVar78 = *(undefined8 *)(piVar53 + 0xe);
                uVar77 = *(undefined8 *)(piVar53 + 0xc);
                iVar63 = (int)(short)(char)((ulong)uVar56 >> 0x20);
                iVar65 = (int)(short)(char)((ulong)uVar56 >> 0x28);
                iVar67 = (int)(short)(char)((ulong)uVar56 >> 0x30);
                iVar69 = (int)(short)(char)((ulong)uVar56 >> 0x38);
                iVar110 = (int)(short)(char)uVar60;
                iVar111 = (int)(short)(char)((ulong)uVar60 >> 8);
                iVar112 = (int)(short)(char)((ulong)uVar60 >> 0x10);
                iVar114 = (int)(short)(char)((ulong)uVar60 >> 0x18);
                iVar55 = (int)(short)(char)((ulong)uVar60 >> 0x20);
                iVar57 = (int)(short)(char)((ulong)uVar60 >> 0x28);
                iVar58 = (int)(short)(char)((ulong)uVar60 >> 0x30);
                iVar61 = (int)(short)(char)((ulong)uVar60 >> 0x38);
                    /* try { // try from 0038dbbc to 0048dbbf has its CatchHandler @ 0038e0c4 */
                uVar45 = uVar45 + 1;
                *(ulong *)(piVar51 + 2) =
                     CONCAT44((int)((ulong)*(undefined8 *)(piVar32 + 2) >> 0x20) + iVar122,
                              (int)*(undefined8 *)(piVar32 + 2) + iVar120);
                *(ulong *)piVar51 =
                     CONCAT44((int)((ulong)uVar75 >> 0x20) + iVar118,(int)uVar75 + iVar116);
                piVar32 = piVar32 + 0x10;
                piVar53 = piVar53 + 0x10;
                *(ulong *)(piVar51 + 6) =
                     CONCAT44(iVar69 + (int)((ulong)uVar108 >> 0x20),iVar67 + (int)uVar108);
                *(ulong *)(piVar51 + 4) =
                     CONCAT44(iVar65 + (int)((ulong)uVar106 >> 0x20),iVar63 + (int)uVar106);
                *(ulong *)(piVar51 + 10) =
                     CONCAT44(iVar114 + (int)((ulong)uVar102 >> 0x20),iVar112 + (int)uVar102);
                *(ulong *)(piVar51 + 8) =
                     CONCAT44(iVar111 + (int)((ulong)uVar101 >> 0x20),iVar110 + (int)uVar101);
                *(ulong *)(piVar51 + 0xe) =
                     CONCAT44(iVar61 + (int)((ulong)uVar100 >> 0x20),iVar58 + (int)uVar100);
                *(ulong *)(piVar51 + 0xc) =
                     CONCAT44(iVar57 + (int)((ulong)uVar98 >> 0x20),iVar55 + (int)uVar98);
                *(ulong *)(piVar43 + 2) =
                     CONCAT44((int)((ulong)uVar96 >> 0x20) + iVar122 * iVar122,
                              (int)uVar96 + iVar120 * iVar120);
                *(ulong *)piVar43 =
                     CONCAT44((int)((ulong)uVar93 >> 0x20) + iVar118 * iVar118,
                              (int)uVar93 + iVar116 * iVar116);
                *(ulong *)(piVar43 + 6) =
                     CONCAT44((int)((ulong)uVar90 >> 0x20) + iVar69 * iVar69,
                              (int)uVar90 + iVar67 * iVar67);
                *(ulong *)(piVar43 + 4) =
                     CONCAT44((int)((ulong)uVar87 >> 0x20) + iVar65 * iVar65,
                              (int)uVar87 + iVar63 * iVar63);
                *(ulong *)(piVar43 + 10) =
                     CONCAT44((int)((ulong)uVar81 >> 0x20) + iVar114 * iVar114,
                              (int)uVar81 + iVar112 * iVar112);
                *(ulong *)(piVar43 + 8) =
                     CONCAT44((int)((ulong)uVar80 >> 0x20) + iVar111 * iVar111,
                              (int)uVar80 + iVar110 * iVar110);
                *(ulong *)(piVar43 + 0xe) =
                     CONCAT44((int)((ulong)uVar78 >> 0x20) + iVar61 * iVar61,
                              (int)uVar78 + iVar58 * iVar58);
                *(ulong *)(piVar43 + 0xc) =
                     CONCAT44((int)((ulong)uVar77 >> 0x20) + iVar57 * iVar57,
                              (int)uVar77 + iVar55 * iVar55);
                piVar43 = piVar43 + 0x10;
                puVar49 = puVar49 + 2;
                piVar51 = piVar51 + 0x10;
                    /* try { // try from 0038dc30 to 0048dc33 has its CatchHandler @ 0038d844 */
              } while (uVar45 < uVar79);
              uVar30 = uVar30 + iVar34;
              if (param_6 - uVar38 == iVar34) goto LAB_0038df08;
            }
            lVar36 = (long)(int)uVar30;
            cVar18 = *(char *)((long)param_1 + lVar36);
            iVar55 = param_4[lVar36];
            param_3[lVar36] = param_3[lVar36] + (int)cVar18;
            param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
            if ((int)(uVar30 + 1) < (int)param_6) {
              lVar36 = (long)(int)(uVar30 + 1);
              cVar18 = *(char *)((long)param_1 + lVar36);
              iVar55 = param_4[lVar36];
              param_3[lVar36] = param_3[lVar36] + (int)cVar18;
              param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
              if ((int)(uVar30 + 2) < (int)param_6) {
                lVar36 = (long)(int)(uVar30 + 2);
                cVar18 = *(char *)((long)param_1 + lVar36);
                iVar55 = param_4[lVar36];
                param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                    /* try { // try from 0038dcd0 to 0048dcd3 has its CatchHandler @ 0038e0c4 */
                if ((int)(uVar30 + 3) < (int)param_6) {
                  lVar36 = (long)(int)(uVar30 + 3);
                    /* try { // try from 0038dcdc to 0048dcdf has its CatchHandler @ 0038d844 */
                  cVar18 = *(char *)((long)param_1 + lVar36);
                  iVar55 = param_4[lVar36];
                  param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                  param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                  if ((int)(uVar30 + 4) < (int)param_6) {
                    lVar36 = (long)(int)(uVar30 + 4);
                    cVar18 = *(char *)((long)param_1 + lVar36);
                    iVar55 = param_4[lVar36];
                    param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                    param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                    if ((int)(uVar30 + 5) < (int)param_6) {
                      lVar36 = (long)(int)(uVar30 + 5);
                      cVar18 = *(char *)((long)param_1 + lVar36);
                      iVar55 = param_4[lVar36];
                      param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                      param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                      if ((int)(uVar30 + 6) < (int)param_6) {
                        lVar36 = (long)(int)(uVar30 + 6);
                        cVar18 = *(char *)((long)param_1 + lVar36);
                        iVar55 = param_4[lVar36];
                        param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                        param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                        if ((int)(uVar30 + 7) < (int)param_6) {
                          lVar36 = (long)(int)(uVar30 + 7);
                          cVar18 = *(char *)((long)param_1 + lVar36);
                          iVar55 = param_4[lVar36];
                          param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                          param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                          if ((int)(uVar30 + 8) < (int)param_6) {
                            lVar36 = (long)(int)(uVar30 + 8);
                            cVar18 = *(char *)((long)param_1 + lVar36);
                            iVar55 = param_4[lVar36];
                            param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                            param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                            if ((int)(uVar30 + 9) < (int)param_6) {
                              lVar36 = (long)(int)(uVar30 + 9);
                              cVar18 = *(char *)((long)param_1 + lVar36);
                              iVar55 = param_4[lVar36];
                              param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                              param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                              if ((int)(uVar30 + 10) < (int)param_6) {
                                lVar36 = (long)(int)(uVar30 + 10);
                                cVar18 = *(char *)((long)param_1 + lVar36);
                                iVar55 = param_4[lVar36];
                                param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                                param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                                if ((int)(uVar30 + 0xb) < (int)param_6) {
                                  lVar36 = (long)(int)(uVar30 + 0xb);
                                  cVar18 = *(char *)((long)param_1 + lVar36);
                                  iVar55 = param_4[lVar36];
                                  param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                                  param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                                  if ((int)(uVar30 + 0xc) < (int)param_6) {
                                    lVar36 = (long)(int)(uVar30 + 0xc);
                                    cVar18 = *(char *)((long)param_1 + lVar36);
                                    iVar55 = param_4[lVar36];
                                    param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                                    param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                                    if ((int)(uVar30 + 0xd) < (int)param_6) {
                                      lVar36 = (long)(int)(uVar30 + 0xd);
                                      cVar18 = *(char *)((long)param_1 + lVar36);
                                      iVar55 = param_4[lVar36];
                                      param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                                      param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                                      if ((int)(uVar30 + 0xe) < (int)param_6) {
                                        lVar36 = (long)(int)(uVar30 + 0xe);
                                        cVar18 = *(char *)((long)param_1 + lVar36);
                                        iVar55 = param_4[lVar36];
                                        param_3[lVar36] = param_3[lVar36] + (int)cVar18;
                                        param_4[lVar36] = iVar55 + (int)cVar18 * (int)cVar18;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0038df08:
        uVar103 = uVar103 + 1;
      }
      lVar35 = lVar35 + 1;
      param_1 = (int *)((long)param_1 + (long)(int)param_6);
      piVar29 = (int *)((long)piVar29 + (long)(int)param_6);
      if ((int)param_5 <= (int)lVar35) {
        return uVar103;
      }
    } while( true );
  }
                    /* try { // try from 0038e068 to 0048e06b has its CatchHandler @ 0038e0c4 */
  iVar34 = (int)param_6 % 4;
  uVar38 = 0;
  if (iVar34 != 1) {
    if (iVar34 != 2) {
      uVar38 = 0;
                    /* try { // try from 0038e08c to 0048e08f has its CatchHandler @ 0038d844 */
      if (iVar34 != 3) goto LAB_0038e094;
      iVar65 = *param_3;
      iVar61 = param_3[1];
      iVar57 = param_3[2];
      iVar63 = *param_4;
      iVar58 = param_4[1];
      iVar55 = param_4[2];
      if (0 < (int)param_5) {
        uVar38 = (param_5 - 0x10 >> 4) + 1;
        lVar35 = (long)(int)param_6;
        uVar79 = uVar38 * 0x10;
        if (param_5 - 1 < 0xf) {
          uVar79 = 0;
          piVar29 = param_1;
        }
        else {
          lVar46 = lVar35 * 2;
          uVar103 = 0;
          iVar107 = 0;
          iVar109 = 0;
          iVar113 = 0;
          iVar115 = 0;
          lVar50 = NEON_shl(lVar35,4);
          lVar22 = lVar35 * 3;
          lVar23 = lVar35 * 5;
          lVar47 = lVar35 * 10;
          pcVar27 = (char *)((long)param_1 + 1);
          lVar33 = lVar50 + lVar35 * -2;
          pcVar42 = (char *)((long)param_1 + 2);
          lVar48 = lVar50 - lVar35;
          lVar36 = lVar35 * 7;
          lVar39 = lVar35 * 6;
          lVar24 = lVar35 * 9;
          lVar25 = lVar35 * 0xd;
          lVar28 = lVar35 * 0xb;
          piVar29 = param_1;
          iVar67 = iVar107;
          iVar69 = iVar109;
          iVar110 = iVar107;
          iVar111 = iVar109;
          iVar112 = iVar107;
          iVar114 = iVar109;
          iVar116 = iVar107;
          iVar118 = iVar109;
          iVar120 = iVar107;
          iVar122 = iVar109;
          iVar117 = iVar113;
          iVar119 = iVar115;
          iVar124 = iVar113;
          iVar125 = iVar115;
          iVar128 = iVar113;
          iVar129 = iVar115;
          iVar59 = iVar113;
          iVar62 = iVar115;
          iVar104 = iVar113;
          iVar105 = iVar115;
          do {
            uVar103 = uVar103 + 1;
            iVar121 = *piVar29;
            pcVar44 = (char *)((long)piVar29 + lVar35);
            pcVar41 = (char *)((long)piVar29 + lVar46);
            pcVar40 = (char *)((long)piVar29 + lVar22);
            piVar32 = piVar29 + lVar35;
            pcVar1 = (char *)((long)piVar29 + lVar23);
            pcVar2 = (char *)((long)piVar29 + lVar39);
            pcVar3 = (char *)((long)piVar29 + lVar36);
            piVar53 = piVar29 + lVar35 * 2;
            pcVar4 = (char *)((long)piVar29 + lVar24);
            pcVar5 = (char *)((long)piVar29 + lVar47);
            pcVar6 = (char *)((long)piVar29 + lVar28);
            piVar43 = piVar29 + lVar35 * 3;
            pcVar7 = (char *)((long)piVar29 + lVar25);
            pcVar8 = (char *)((long)piVar29 + lVar33);
            pcVar9 = (char *)((long)piVar29 + lVar48);
            piVar29 = (int *)((long)piVar29 + lVar50);
            cVar18 = *pcVar27;
            pcVar10 = pcVar27 + lVar35;
            pcVar11 = pcVar27 + lVar46;
            iVar73 = (int)(short)(char)iVar121;
            iVar74 = (int)(short)*pcVar44;
            iVar82 = (int)(short)*pcVar41;
            iVar83 = (int)(short)*pcVar40;
            pcVar44 = pcVar27 + lVar22;
            iVar130 = (int)(short)(char)*piVar32;
            iVar131 = (int)(short)*pcVar1;
            iVar64 = (int)(short)*pcVar2;
            iVar66 = (int)(short)*pcVar3;
            iVar68 = (int)(short)(char)*piVar53;
            iVar70 = (int)(short)*pcVar4;
            iVar71 = (int)(short)*pcVar5;
            iVar72 = (int)(short)*pcVar6;
            iVar121 = (int)(short)(char)*piVar43;
            iVar123 = (int)(short)*pcVar7;
            iVar126 = (int)(short)*pcVar8;
            iVar127 = (int)(short)*pcVar9;
            pcVar41 = pcVar27 + lVar35 * 4;
            pcVar40 = pcVar27 + lVar23;
            pcVar1 = pcVar27 + lVar39;
            pcVar2 = pcVar27 + lVar36;
            iVar107 = iVar121 + iVar68 + iVar130 + iVar73 + iVar107;
            iVar109 = iVar123 + iVar70 + iVar131 + iVar74 + iVar109;
            iVar113 = iVar126 + iVar71 + iVar64 + iVar82 + iVar113;
            iVar115 = iVar127 + iVar72 + iVar66 + iVar83 + iVar115;
            iVar110 = iVar110 + iVar73 * iVar73 + iVar130 * iVar130 + iVar68 * iVar68 +
                      iVar121 * iVar121;
            iVar111 = iVar111 + iVar74 * iVar74 + iVar131 * iVar131 + iVar70 * iVar70 +
                      iVar123 * iVar123;
            iVar124 = iVar124 + iVar82 * iVar82 + iVar64 * iVar64 + iVar71 * iVar71 +
                      iVar126 * iVar126;
            iVar125 = iVar125 + iVar83 * iVar83 + iVar66 * iVar66 + iVar72 * iVar72 +
                      iVar127 * iVar127;
            pcVar3 = pcVar27 + lVar35 * 8;
            pcVar4 = pcVar27 + lVar24;
            pcVar5 = pcVar27 + lVar47;
            pcVar6 = pcVar27 + lVar28;
            pcVar7 = pcVar27 + lVar35 * 0xc;
            pcVar8 = pcVar27 + lVar25;
            pcVar9 = pcVar27 + lVar33;
            pcVar12 = pcVar27 + lVar48;
            pcVar27 = pcVar27 + lVar50;
            cVar19 = *pcVar42;
            pcVar13 = pcVar42 + lVar35;
            pcVar14 = pcVar42 + lVar46;
            iVar73 = (int)(short)cVar18;
            iVar74 = (int)(short)*pcVar10;
            iVar82 = (int)(short)*pcVar11;
            iVar83 = (int)(short)*pcVar44;
            pcVar44 = pcVar42 + lVar22;
            iVar130 = (int)(short)*pcVar41;
            iVar131 = (int)(short)*pcVar40;
            iVar64 = (int)(short)*pcVar1;
            iVar66 = (int)(short)*pcVar2;
            iVar68 = (int)(short)*pcVar3;
            iVar70 = (int)(short)*pcVar4;
            iVar71 = (int)(short)*pcVar5;
            iVar72 = (int)(short)*pcVar6;
            iVar121 = (int)(short)*pcVar7;
            iVar123 = (int)(short)*pcVar8;
            iVar126 = (int)(short)*pcVar9;
            iVar127 = (int)(short)*pcVar12;
            pcVar41 = pcVar42 + lVar35 * 4;
            pcVar40 = pcVar42 + lVar23;
            pcVar1 = pcVar42 + lVar39;
            pcVar2 = pcVar42 + lVar36;
            iVar112 = iVar121 + iVar68 + iVar130 + iVar73 + iVar112;
            iVar114 = iVar123 + iVar70 + iVar131 + iVar74 + iVar114;
            iVar128 = iVar126 + iVar71 + iVar64 + iVar82 + iVar128;
            iVar129 = iVar127 + iVar72 + iVar66 + iVar83 + iVar129;
            iVar116 = iVar116 + iVar73 * iVar73 + iVar130 * iVar130 + iVar68 * iVar68 +
                      iVar121 * iVar121;
            iVar118 = iVar118 + iVar74 * iVar74 + iVar131 * iVar131 + iVar70 * iVar70 +
                      iVar123 * iVar123;
            iVar59 = iVar59 + iVar82 * iVar82 + iVar64 * iVar64 + iVar71 * iVar71 +
                     iVar126 * iVar126;
            iVar62 = iVar62 + iVar83 * iVar83 + iVar66 * iVar66 + iVar72 * iVar72 +
                     iVar127 * iVar127;
            pcVar3 = pcVar42 + lVar35 * 8;
            pcVar4 = pcVar42 + lVar24;
            pcVar5 = pcVar42 + lVar47;
            pcVar6 = pcVar42 + lVar28;
            pcVar7 = pcVar42 + lVar35 * 0xc;
            pcVar8 = pcVar42 + lVar25;
            pcVar9 = pcVar42 + lVar33;
            pcVar10 = pcVar42 + lVar48;
            pcVar42 = pcVar42 + lVar50;
            iVar73 = (int)(short)cVar19;
            iVar74 = (int)(short)*pcVar13;
            iVar82 = (int)(short)*pcVar14;
            iVar83 = (int)(short)*pcVar44;
            iVar130 = (int)(short)*pcVar41;
            iVar131 = (int)(short)*pcVar40;
            iVar64 = (int)(short)*pcVar1;
            iVar66 = (int)(short)*pcVar2;
            iVar68 = (int)(short)*pcVar3;
            iVar70 = (int)(short)*pcVar4;
            iVar71 = (int)(short)*pcVar5;
            iVar72 = (int)(short)*pcVar6;
            iVar121 = (int)(short)*pcVar7;
            iVar123 = (int)(short)*pcVar8;
            iVar126 = (int)(short)*pcVar9;
            iVar127 = (int)(short)*pcVar10;
            iVar120 = iVar121 + iVar68 + iVar130 + iVar73 + iVar120;
            iVar122 = iVar123 + iVar70 + iVar131 + iVar74 + iVar122;
            iVar104 = iVar126 + iVar71 + iVar64 + iVar82 + iVar104;
            iVar105 = iVar127 + iVar72 + iVar66 + iVar83 + iVar105;
            iVar67 = iVar67 + iVar73 * iVar73 + iVar130 * iVar130 + iVar68 * iVar68 +
                     iVar121 * iVar121;
            iVar69 = iVar69 + iVar74 * iVar74 + iVar131 * iVar131 + iVar70 * iVar70 +
                     iVar123 * iVar123;
            iVar117 = iVar117 + iVar82 * iVar82 + iVar64 * iVar64 + iVar71 * iVar71 +
                      iVar126 * iVar126;
            iVar119 = iVar119 + iVar83 * iVar83 + iVar66 * iVar66 + iVar72 * iVar72 +
                      iVar127 * iVar127;
          } while (uVar103 < uVar38);
          iVar55 = iVar55 + iVar67 + iVar69 + iVar117 + iVar119;
          iVar57 = iVar57 + iVar120 + iVar122 + iVar104 + iVar105;
          iVar58 = iVar58 + iVar116 + iVar118 + iVar59 + iVar62;
          iVar61 = iVar61 + iVar112 + iVar114 + iVar128 + iVar129;
          iVar63 = iVar63 + iVar110 + iVar111 + iVar124 + iVar125;
          iVar65 = iVar65 + iVar107 + iVar109 + iVar113 + iVar115;
          piVar29 = (int *)((long)param_1 + (ulong)uVar79 * lVar35);
          uVar38 = param_5;
          if (param_5 == uVar79) goto LAB_0038f89c;
        }
        cVar18 = (char)*piVar29;
        cVar19 = *(char *)((long)piVar29 + 1);
        cVar20 = *(char *)((long)piVar29 + 2);
        iVar65 = iVar65 + cVar18;
        iVar63 = iVar63 + (int)cVar18 * (int)cVar18;
        iVar57 = iVar57 + cVar20;
        iVar61 = iVar61 + cVar19;
        iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
        iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
        uVar38 = param_5;
        if ((int)(uVar79 + 1) < (int)param_5) {
          cVar20 = *(char *)((long)piVar29 + lVar35);
          cVar18 = *(char *)((long)piVar29 + lVar35 + 1);
          cVar19 = *(char *)((long)piVar29 + lVar35 + 2);
          iVar65 = iVar65 + cVar20;
          iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
          iVar57 = iVar57 + cVar19;
          iVar61 = iVar61 + cVar18;
          iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
          iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
          if ((int)(uVar79 + 2) < (int)param_5) {
            cVar20 = *(char *)((long)piVar29 + lVar35 * 2);
            cVar18 = *(char *)((long)piVar29 + lVar35 * 2 + 1);
            cVar19 = *(char *)((long)piVar29 + lVar35 * 2 + 2);
            iVar65 = iVar65 + cVar20;
            iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
            iVar57 = iVar57 + cVar19;
            iVar61 = iVar61 + cVar18;
            iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
            iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
            if ((int)(uVar79 + 3) < (int)param_5) {
              cVar20 = *(char *)((long)piVar29 + lVar35 * 3);
              cVar18 = *(char *)((long)piVar29 + lVar35 * 3 + 1);
              cVar19 = *(char *)((long)piVar29 + lVar35 * 3 + 2);
              iVar65 = iVar65 + cVar20;
              iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
              iVar57 = iVar57 + cVar19;
              iVar61 = iVar61 + cVar18;
              iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
              iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
              if ((int)(uVar79 + 4) < (int)param_5) {
                cVar20 = (char)piVar29[lVar35];
                cVar18 = *(char *)((long)piVar29 + lVar35 * 4 + 1);
                cVar19 = *(char *)((long)piVar29 + lVar35 * 4 + 2);
                iVar65 = iVar65 + cVar20;
                iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                iVar57 = iVar57 + cVar19;
                iVar61 = iVar61 + cVar18;
                iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                if ((int)(uVar79 + 5) < (int)param_5) {
                  cVar20 = *(char *)((long)piVar29 + lVar35 * 5);
                  cVar18 = *(char *)((long)piVar29 + lVar35 * 5 + 1);
                  cVar19 = *(char *)((long)piVar29 + lVar35 * 5 + 2);
                  iVar65 = iVar65 + cVar20;
                  iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                  iVar57 = iVar57 + cVar19;
                  iVar61 = iVar61 + cVar18;
                  iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                  iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                  if ((int)(uVar79 + 6) < (int)param_5) {
                    cVar20 = *(char *)((long)piVar29 + lVar35 * 6);
                    cVar18 = *(char *)((long)piVar29 + lVar35 * 6 + 1);
                    cVar19 = *(char *)((long)piVar29 + lVar35 * 6 + 2);
                    iVar65 = iVar65 + cVar20;
                    iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                    iVar57 = iVar57 + cVar19;
                    iVar61 = iVar61 + cVar18;
                    iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                    iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                    if ((int)(uVar79 + 7) < (int)param_5) {
                      cVar20 = *(char *)((long)piVar29 + lVar35 * 7);
                      cVar18 = *(char *)((long)piVar29 + lVar35 * 7 + 1);
                      cVar19 = *(char *)((long)piVar29 + lVar35 * 7 + 2);
                      iVar65 = iVar65 + cVar20;
                      iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                      iVar57 = iVar57 + cVar19;
                      iVar61 = iVar61 + cVar18;
                      iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                      iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                      if ((int)(uVar79 + 8) < (int)param_5) {
                        cVar20 = (char)piVar29[lVar35 * 2];
                        cVar18 = *(char *)((long)piVar29 + lVar35 * 8 + 1);
                        cVar19 = *(char *)((long)piVar29 + lVar35 * 8 + 2);
                        iVar65 = iVar65 + cVar20;
                        iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                        iVar57 = iVar57 + cVar19;
                        iVar61 = iVar61 + cVar18;
                        iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                        iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                        if ((int)(uVar79 + 9) < (int)param_5) {
                          cVar20 = *(char *)((long)piVar29 + lVar35 * 9);
                          cVar18 = *(char *)((long)piVar29 + lVar35 * 9 + 1);
                          cVar19 = *(char *)((long)piVar29 + lVar35 * 9 + 2);
                          iVar65 = iVar65 + cVar20;
                          iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                          iVar57 = iVar57 + cVar19;
                          iVar61 = iVar61 + cVar18;
                          iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                          iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                          if ((int)(uVar79 + 10) < (int)param_5) {
                            cVar20 = *(char *)((long)piVar29 + lVar35 * 10);
                            cVar18 = *(char *)((long)piVar29 + lVar35 * 10 + 1);
                            cVar19 = *(char *)((long)piVar29 + lVar35 * 10 + 2);
                            iVar65 = iVar65 + cVar20;
                            iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                            iVar57 = iVar57 + cVar19;
                            iVar61 = iVar61 + cVar18;
                            iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                            iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                            if ((int)(uVar79 + 0xb) < (int)param_5) {
                              cVar20 = *(char *)((long)piVar29 + lVar35 * 0xb);
                              cVar18 = *(char *)((long)piVar29 + lVar35 * 0xb + 1);
                              cVar19 = *(char *)((long)piVar29 + lVar35 * 0xb + 2);
                              iVar65 = iVar65 + cVar20;
                              iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                              iVar57 = iVar57 + cVar19;
                              iVar61 = iVar61 + cVar18;
                              iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                              iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                              if ((int)(uVar79 + 0xc) < (int)param_5) {
                                cVar20 = (char)piVar29[lVar35 * 3];
                                cVar18 = *(char *)((long)piVar29 + lVar35 * 0xc + 1);
                                cVar19 = *(char *)((long)piVar29 + lVar35 * 0xc + 2);
                                iVar65 = iVar65 + cVar20;
                                iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                                iVar57 = iVar57 + cVar19;
                                iVar61 = iVar61 + cVar18;
                                iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                                iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                                if ((int)(uVar79 + 0xd) < (int)param_5) {
                                  cVar20 = *(char *)((long)piVar29 + lVar35 * 0xd);
                                  cVar18 = *(char *)((long)piVar29 + lVar35 * 0xd + 1);
                                  cVar19 = *(char *)((long)piVar29 + lVar35 * 0xd + 2);
                                  iVar65 = iVar65 + cVar20;
                                  iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                                  iVar57 = iVar57 + cVar19;
                                  iVar61 = iVar61 + cVar18;
                                  iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                                  iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                                  if ((int)(uVar79 + 0xe) < (int)param_5) {
                                    cVar20 = *(char *)((long)piVar29 + lVar35 * 0xe);
                                    cVar18 = *(char *)((long)piVar29 + lVar35 * 0xe + 1);
                                    cVar19 = *(char *)((long)piVar29 + lVar35 * 0xe + 2);
                                    iVar65 = iVar65 + cVar20;
                                    iVar63 = iVar63 + (int)cVar20 * (int)cVar20;
                                    iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
                                    iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
                                    iVar61 = iVar61 + cVar18;
                                    iVar57 = iVar57 + cVar19;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0038f89c:
      *param_3 = iVar65;
      param_3[1] = iVar61;
      param_3[2] = iVar57;
      *param_4 = iVar63;
      param_4[1] = iVar58;
      param_4[2] = iVar55;
      goto LAB_0038e094;
    }
    iVar61 = *param_3;
    iVar57 = param_3[1];
    iVar58 = *param_4;
    iVar55 = param_4[1];
    if (0 < (int)param_5) {
                    /* try { // try from 0038ed20 to 0048ed23 has its CatchHandler @ 0038eac0 */
      uVar38 = (param_5 - 0x10 >> 4) + 1;
      lVar35 = (long)(int)param_6;
      uVar79 = uVar38 * 0x10;
      if (param_5 - 1 < 0xf) {
        uVar79 = 0;
        piVar29 = param_1;
      }
      else {
        iVar117 = 0;
        iVar119 = 0;
        iVar124 = 0;
        iVar125 = 0;
        pcVar27 = (char *)((long)param_1 + 1);
        uVar103 = 0;
        piVar29 = param_1;
        iVar63 = iVar117;
        iVar65 = iVar119;
        iVar67 = iVar117;
        iVar69 = iVar119;
        iVar110 = iVar117;
        iVar111 = iVar119;
        iVar112 = iVar124;
        iVar114 = iVar125;
        iVar116 = iVar124;
        iVar118 = iVar125;
        iVar120 = iVar124;
        iVar122 = iVar125;
        do {
          iVar128 = *piVar29;
          uVar103 = uVar103 + 1;
          pcVar42 = (char *)((long)piVar29 + lVar35);
          pcVar44 = (char *)((long)piVar29 + lVar35 * 2);
          pcVar41 = (char *)((long)piVar29 + lVar35 * 3);
          piVar32 = piVar29 + lVar35;
          pcVar40 = (char *)((long)piVar29 + lVar35 * 5);
          pcVar1 = (char *)((long)piVar29 + lVar35 * 6);
          pcVar2 = (char *)((long)piVar29 + lVar35 * 7);
          piVar53 = piVar29 + lVar35 * 2;
          pcVar3 = (char *)((long)piVar29 + lVar35 * 9);
          pcVar4 = (char *)((long)piVar29 + lVar35 * 10);
          pcVar5 = (char *)((long)piVar29 + lVar35 * 0xb);
          piVar43 = piVar29 + lVar35 * 3;
          pcVar6 = (char *)((long)piVar29 + lVar35 * 0xd);
          pcVar7 = (char *)((long)piVar29 + lVar35 * 0xe);
          pcVar8 = (char *)((long)piVar29 + lVar35 * 0xf);
          piVar29 = piVar29 + lVar35 * 4;
          cVar18 = *pcVar27;
          pcVar9 = pcVar27 + lVar35;
          pcVar10 = pcVar27 + lVar35 * 2;
          iVar126 = (int)(short)(char)iVar128;
          iVar127 = (int)(short)*pcVar42;
          iVar130 = (int)(short)*pcVar44;
          iVar131 = (int)(short)*pcVar41;
          pcVar42 = pcVar27 + lVar35 * 3;
          iVar104 = (int)(short)(char)*piVar32;
          iVar105 = (int)(short)*pcVar40;
          iVar107 = (int)(short)*pcVar1;
          iVar109 = (int)(short)*pcVar2;
          iVar113 = (int)(short)(char)*piVar53;
          iVar115 = (int)(short)*pcVar3;
          iVar121 = (int)(short)*pcVar4;
          iVar123 = (int)(short)*pcVar5;
          iVar128 = (int)(short)(char)*piVar43;
          iVar129 = (int)(short)*pcVar6;
          iVar59 = (int)(short)*pcVar7;
          iVar62 = (int)(short)*pcVar8;
          pcVar44 = pcVar27 + lVar35 * 4;
          pcVar41 = pcVar27 + lVar35 * 5;
          pcVar40 = pcVar27 + lVar35 * 6;
          pcVar1 = pcVar27 + lVar35 * 7;
          pcVar2 = pcVar27 + lVar35 * 8;
          iVar117 = iVar128 + iVar113 + iVar104 + iVar126 + iVar117;
          iVar119 = iVar129 + iVar115 + iVar105 + iVar127 + iVar119;
          iVar124 = iVar59 + iVar121 + iVar107 + iVar130 + iVar124;
          iVar125 = iVar62 + iVar123 + iVar109 + iVar131 + iVar125;
          iVar110 = iVar110 + iVar126 * iVar126 + iVar104 * iVar104 + iVar113 * iVar113 +
                    iVar128 * iVar128;
          iVar111 = iVar111 + iVar127 * iVar127 + iVar105 * iVar105 + iVar115 * iVar115 +
                    iVar129 * iVar129;
          iVar120 = iVar120 + iVar130 * iVar130 + iVar107 * iVar107 + iVar121 * iVar121 +
                    iVar59 * iVar59;
          iVar122 = iVar122 + iVar131 * iVar131 + iVar109 * iVar109 + iVar123 * iVar123 +
                    iVar62 * iVar62;
          pcVar3 = pcVar27 + lVar35 * 9;
          pcVar4 = pcVar27 + lVar35 * 10;
          pcVar5 = pcVar27 + lVar35 * 0xb;
          pcVar6 = pcVar27 + lVar35 * 0xc;
          pcVar7 = pcVar27 + lVar35 * 0xd;
          pcVar8 = pcVar27 + lVar35 * 0xe;
          pcVar11 = pcVar27 + lVar35 * 0xf;
          pcVar27 = pcVar27 + lVar35 * 0x10;
          iVar126 = (int)(short)cVar18;
          iVar127 = (int)(short)*pcVar9;
          iVar130 = (int)(short)*pcVar10;
          iVar131 = (int)(short)*pcVar42;
          iVar104 = (int)(short)*pcVar44;
          iVar105 = (int)(short)*pcVar41;
          iVar107 = (int)(short)*pcVar40;
          iVar109 = (int)(short)*pcVar1;
          iVar113 = (int)(short)*pcVar2;
          iVar115 = (int)(short)*pcVar3;
          iVar121 = (int)(short)*pcVar4;
          iVar123 = (int)(short)*pcVar5;
          iVar128 = (int)(short)*pcVar6;
          iVar129 = (int)(short)*pcVar7;
          iVar59 = (int)(short)*pcVar8;
          iVar62 = (int)(short)*pcVar11;
          iVar67 = iVar128 + iVar113 + iVar104 + iVar126 + iVar67;
          iVar69 = iVar129 + iVar115 + iVar105 + iVar127 + iVar69;
          iVar116 = iVar59 + iVar121 + iVar107 + iVar130 + iVar116;
          iVar118 = iVar62 + iVar123 + iVar109 + iVar131 + iVar118;
          iVar63 = iVar63 + iVar126 * iVar126 + iVar104 * iVar104 + iVar113 * iVar113 +
                   iVar128 * iVar128;
          iVar65 = iVar65 + iVar127 * iVar127 + iVar105 * iVar105 + iVar115 * iVar115 +
                   iVar129 * iVar129;
          iVar112 = iVar112 + iVar130 * iVar130 + iVar107 * iVar107 + iVar121 * iVar121 +
                    iVar59 * iVar59;
          iVar114 = iVar114 + iVar131 * iVar131 + iVar109 * iVar109 + iVar123 * iVar123 +
                    iVar62 * iVar62;
        } while (uVar103 < uVar38);
        iVar55 = iVar55 + iVar63 + iVar65 + iVar112 + iVar114;
        iVar57 = iVar57 + iVar67 + iVar69 + iVar116 + iVar118;
        iVar58 = iVar58 + iVar110 + iVar111 + iVar120 + iVar122;
        iVar61 = iVar61 + iVar117 + iVar119 + iVar124 + iVar125;
        piVar29 = (int *)((long)param_1 + (ulong)uVar79 * lVar35);
        uVar38 = param_5;
        if (param_5 == uVar79) goto LAB_0038f1cc;
      }
      cVar18 = (char)*piVar29;
      cVar19 = *(char *)((long)piVar29 + 1);
      iVar61 = iVar61 + cVar18;
      iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
      iVar57 = iVar57 + cVar19;
      iVar55 = iVar55 + (int)cVar19 * (int)cVar19;
      uVar38 = param_5;
      if ((int)(uVar79 + 1) < (int)param_5) {
        cVar19 = *(char *)((long)piVar29 + lVar35);
        cVar18 = *(char *)((long)piVar29 + lVar35 + 1);
        iVar61 = iVar61 + cVar19;
        iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
        iVar57 = iVar57 + cVar18;
        iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
        if ((int)(uVar79 + 2) < (int)param_5) {
          cVar19 = *(char *)((long)piVar29 + lVar35 * 2);
          cVar18 = *(char *)((long)piVar29 + lVar35 * 2 + 1);
          iVar61 = iVar61 + cVar19;
          iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
          iVar57 = iVar57 + cVar18;
          iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
          if ((int)(uVar79 + 3) < (int)param_5) {
            cVar19 = *(char *)((long)piVar29 + lVar35 * 3);
            cVar18 = *(char *)((long)piVar29 + lVar35 * 3 + 1);
            iVar61 = iVar61 + cVar19;
            iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
            iVar57 = iVar57 + cVar18;
            iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
            if ((int)(uVar79 + 4) < (int)param_5) {
              cVar19 = (char)piVar29[lVar35];
              cVar18 = *(char *)((long)piVar29 + lVar35 * 4 + 1);
              iVar61 = iVar61 + cVar19;
              iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
              iVar57 = iVar57 + cVar18;
              iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
              if ((int)(uVar79 + 5) < (int)param_5) {
                cVar19 = *(char *)((long)piVar29 + lVar35 * 5);
                    /* try { // try from 0038f04c to 0048f04f has its CatchHandler @ 0038ff14 */
                cVar18 = *(char *)((long)piVar29 + lVar35 * 5 + 1);
                iVar61 = iVar61 + cVar19;
                iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                iVar57 = iVar57 + cVar18;
                iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                if ((int)(uVar79 + 6) < (int)param_5) {
                  cVar19 = *(char *)((long)piVar29 + lVar35 * 6);
                    /* try { // try from 0038f078 to 0048f0cb has its CatchHandler @ 0038eac0 */
                  cVar18 = *(char *)((long)piVar29 + lVar35 * 6 + 1);
                  iVar61 = iVar61 + cVar19;
                  iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                  iVar57 = iVar57 + cVar18;
                  iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                  if ((int)(uVar79 + 7) < (int)param_5) {
                    cVar19 = *(char *)((long)piVar29 + lVar35 * 7);
                    cVar18 = *(char *)((long)piVar29 + lVar35 * 7 + 1);
                    iVar61 = iVar61 + cVar19;
                    iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                    iVar57 = iVar57 + cVar18;
                    iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                    if ((int)(uVar79 + 8) < (int)param_5) {
                      cVar19 = (char)piVar29[lVar35 * 2];
                      cVar18 = *(char *)((long)piVar29 + lVar35 * 8 + 1);
                      iVar61 = iVar61 + cVar19;
                      iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                      iVar57 = iVar57 + cVar18;
                      iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                      if ((int)(uVar79 + 9) < (int)param_5) {
                        cVar19 = *(char *)((long)piVar29 + lVar35 * 9);
                        cVar18 = *(char *)((long)piVar29 + lVar35 * 9 + 1);
                        iVar61 = iVar61 + cVar19;
                        iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                        iVar57 = iVar57 + cVar18;
                        iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                        if ((int)(uVar79 + 10) < (int)param_5) {
                          cVar19 = *(char *)((long)piVar29 + lVar35 * 10);
                          cVar18 = *(char *)((long)piVar29 + lVar35 * 10 + 1);
                          iVar61 = iVar61 + cVar19;
                          iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                          iVar57 = iVar57 + cVar18;
                          iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                          if ((int)(uVar79 + 0xb) < (int)param_5) {
                            cVar19 = *(char *)((long)piVar29 + lVar35 * 0xb);
                            cVar18 = *(char *)((long)piVar29 + lVar35 * 0xb + 1);
                            iVar61 = iVar61 + cVar19;
                            iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                            iVar57 = iVar57 + cVar18;
                            iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                            if ((int)(uVar79 + 0xc) < (int)param_5) {
                              cVar19 = (char)piVar29[lVar35 * 3];
                              cVar18 = *(char *)((long)piVar29 + lVar35 * 0xc + 1);
                              iVar61 = iVar61 + cVar19;
                              iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                              iVar57 = iVar57 + cVar18;
                              iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                              if ((int)(uVar79 + 0xd) < (int)param_5) {
                                cVar19 = *(char *)((long)piVar29 + lVar35 * 0xd);
                                cVar18 = *(char *)((long)piVar29 + lVar35 * 0xd + 1);
                                iVar61 = iVar61 + cVar19;
                                iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                                iVar57 = iVar57 + cVar18;
                    /* try { // try from 0038f1a8 to 0048f1ab has its CatchHandler @ 0038ff14 */
                                iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                                if ((int)(uVar79 + 0xe) < (int)param_5) {
                                  cVar19 = *(char *)((long)piVar29 + lVar35 * 0xe);
                                  cVar18 = *(char *)((long)piVar29 + lVar35 * 0xe + 1);
                    /* try { // try from 0038f1b8 to 0048f1bb has its CatchHandler @ 0038eac0 */
                                  iVar61 = iVar61 + cVar19;
                                  iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                                  iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                                  iVar57 = iVar57 + cVar18;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_0038f1cc:
    *param_3 = iVar61;
    param_3[1] = iVar57;
    *param_4 = iVar58;
    param_4[1] = iVar55;
    goto LAB_0038e094;
  }
  iVar57 = *param_3;
  iVar55 = *param_4;
  if (0 < (int)param_5) {
    uVar38 = (param_5 - 0x10 >> 4) + 1;
                    /* try { // try from 0038ea1c to 0048ea1f has its CatchHandler @ 0038e134 */
    lVar35 = (long)(int)param_6;
    uVar79 = uVar38 * 0x10;
                    /* catch() { ... } // from try @ 0038e820 with catch @ 0038ea24 */
    if (param_5 - 1 < 0xf) {
      uVar79 = 0;
      piVar29 = param_1;
    }
    else {
      iVar67 = 0;
      iVar69 = 0;
      iVar110 = 0;
      iVar111 = 0;
      pcVar27 = (char *)((long)param_1 + lVar35 * 10);
      uVar103 = 0;
      piVar29 = param_1;
      iVar58 = iVar67;
      iVar61 = iVar69;
      iVar63 = iVar110;
      iVar65 = iVar111;
      do {
        iVar112 = *piVar29;
        uVar103 = uVar103 + 1;
                    /* try { // try from 0038ea74 to 0048ea77 has its CatchHandler @ 0038e134 */
        pcVar42 = (char *)((long)piVar29 + lVar35);
                    /* catch() { ... } // from try @ 0038e284 with catch @ 0038ea78 */
        pcVar44 = (char *)((long)piVar29 + lVar35 * 2);
        pcVar41 = (char *)((long)piVar29 + lVar35 * 3);
        piVar32 = piVar29 + lVar35;
                    /* catch() { ... } // from try @ 0038e208 with catch @ 0038ea88
                       catch() { ... } // from try @ 0038e28c with catch @ 0038ea88
                       catch() { ... } // from try @ 0038e7c4 with catch @ 0038ea88
                       catch() { ... } // from try @ 0038e828 with catch @ 0038ea88 */
                    /* catch() { ... } // from try @ 0038e460 with catch @ 0038ea90 */
        pcVar40 = (char *)((long)piVar29 + lVar35 * 5);
        pcVar1 = (char *)((long)piVar29 + lVar35 * 6);
        pcVar2 = pcVar27 + lVar35 * -3;
        piVar53 = piVar29 + lVar35 * 2;
                    /* catch() { ... } // from try @ 0038e1d8 with catch @ 0038eab0
                       catch() { ... } // from try @ 0038e608 with catch @ 0038eab0
                       catch() { ... } // from try @ 0038e9ec with catch @ 0038eab0 */
        pcVar3 = (char *)((long)piVar29 + lVar35 * 9);
        piVar29 = piVar29 + lVar35 * 4;
                    /* catch() { ... } // from try @ 0038eb00 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038eb58 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038ed20 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038f078 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038f1b8 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038ff10 with catch @ 0038eac0
                       catch() { ... } // from try @ 0038ff2c with catch @ 0038eac0 */
        cVar18 = *pcVar27;
        pcVar4 = pcVar27 + lVar35;
        pcVar5 = pcVar27 + lVar35 * 2;
        pcVar6 = pcVar27 + lVar35 * 3;
        pcVar7 = pcVar27 + lVar35 * 4;
        pcVar8 = pcVar27 + lVar35 * 5;
        pcVar27 = pcVar27 + lVar35 * 0x10;
                    /* try { // try from 0038eb00 to 0048eb23 has its CatchHandler @ 0038eac0 */
        iVar59 = (int)(short)(char)iVar112;
        iVar62 = (int)(short)*pcVar42;
        iVar104 = (int)(short)*pcVar44;
        iVar105 = (int)(short)*pcVar41;
        iVar120 = (int)(short)(char)*piVar32;
        iVar122 = (int)(short)*pcVar40;
        iVar117 = (int)(short)*pcVar1;
        iVar119 = (int)(short)*pcVar2;
        iVar124 = (int)(short)(char)*piVar53;
        iVar125 = (int)(short)*pcVar3;
        iVar128 = (int)(short)cVar18;
        iVar129 = (int)(short)*pcVar4;
        iVar112 = (int)(short)*pcVar5;
        iVar114 = (int)(short)*pcVar6;
        iVar116 = (int)(short)*pcVar7;
        iVar118 = (int)(short)*pcVar8;
        iVar67 = iVar112 + iVar124 + iVar120 + iVar59 + iVar67;
        iVar69 = iVar114 + iVar125 + iVar122 + iVar62 + iVar69;
        iVar110 = iVar116 + iVar128 + iVar117 + iVar104 + iVar110;
        iVar111 = iVar118 + iVar129 + iVar119 + iVar105 + iVar111;
        iVar58 = iVar58 + iVar59 * iVar59 + iVar120 * iVar120 + iVar124 * iVar124 +
                 iVar112 * iVar112;
        iVar61 = iVar61 + iVar62 * iVar62 + iVar122 * iVar122 + iVar125 * iVar125 +
                 iVar114 * iVar114;
        iVar63 = iVar63 + iVar104 * iVar104 + iVar117 * iVar117 + iVar128 * iVar128 +
                 iVar116 * iVar116;
        iVar65 = iVar65 + iVar105 * iVar105 + iVar119 * iVar119 + iVar129 * iVar129 +
                 iVar118 * iVar118;
      } while (uVar103 < uVar38);
                    /* try { // try from 0038eb50 to 0048eb53 has its CatchHandler @ 0038ff1c */
      iVar55 = iVar55 + iVar58 + iVar61 + iVar63 + iVar65;
      iVar57 = iVar57 + iVar67 + iVar69 + iVar110 + iVar111;
      piVar29 = (int *)((long)param_1 + (ulong)uVar79 * lVar35);
      uVar38 = param_5;
                    /* try { // try from 0038eb58 to 0048ebfb has its CatchHandler @ 0038eac0 */
      if (param_5 == uVar79) goto LAB_0038ecf0;
    }
    cVar18 = (char)*piVar29;
    iVar57 = iVar57 + cVar18;
    iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
    uVar38 = param_5;
    if ((int)(uVar79 + 1) < (int)param_5) {
      cVar18 = *(char *)((long)piVar29 + lVar35);
      iVar57 = iVar57 + cVar18;
      iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
      if ((int)(uVar79 + 2) < (int)param_5) {
        cVar18 = *(char *)((long)piVar29 + lVar35 * 2);
        iVar57 = iVar57 + cVar18;
        iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
        if ((int)(uVar79 + 3) < (int)param_5) {
          cVar18 = *(char *)((long)piVar29 + lVar35 * 3);
          iVar57 = iVar57 + cVar18;
          iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
          if ((int)(uVar79 + 4) < (int)param_5) {
            cVar18 = (char)piVar29[lVar35];
            iVar57 = iVar57 + cVar18;
            iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
            if ((int)(uVar79 + 5) < (int)param_5) {
              cVar18 = *(char *)((long)piVar29 + lVar35 * 5);
              iVar57 = iVar57 + cVar18;
              iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
              if ((int)(uVar79 + 6) < (int)param_5) {
                cVar18 = *(char *)((long)piVar29 + lVar35 * 6);
                iVar57 = iVar57 + cVar18;
                iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                if ((int)(uVar79 + 7) < (int)param_5) {
                  cVar18 = *(char *)((long)piVar29 + lVar35 * 7);
                    /* try { // try from 0038ec24 to 0048ec4b has its CatchHandler @ 0038ff14 */
                  iVar57 = iVar57 + cVar18;
                  iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                  if ((int)(uVar79 + 8) < (int)param_5) {
                    cVar18 = (char)piVar29[lVar35 * 2];
                    iVar57 = iVar57 + cVar18;
                    iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                    if ((int)(uVar79 + 9) < (int)param_5) {
                      cVar18 = *(char *)((long)piVar29 + lVar35 * 9);
                      iVar57 = iVar57 + cVar18;
                      iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                      if ((int)(uVar79 + 10) < (int)param_5) {
                        cVar18 = *(char *)((long)piVar29 + lVar35 * 10);
                        iVar57 = iVar57 + cVar18;
                        iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                        if ((int)(uVar79 + 0xb) < (int)param_5) {
                          cVar18 = *(char *)((long)piVar29 + lVar35 * 0xb);
                          iVar57 = iVar57 + cVar18;
                          iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                          if ((int)(uVar79 + 0xc) < (int)param_5) {
                            cVar18 = (char)piVar29[lVar35 * 3];
                            iVar57 = iVar57 + cVar18;
                            iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                            if ((int)(uVar79 + 0xd) < (int)param_5) {
                              cVar18 = *(char *)((long)piVar29 + lVar35 * 0xd);
                              iVar57 = iVar57 + cVar18;
                              iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                              if ((int)(uVar79 + 0xe) < (int)param_5) {
                                cVar18 = *(char *)((long)piVar29 + lVar35 * 0xe);
                                iVar57 = iVar57 + cVar18;
                                iVar55 = iVar55 + (int)cVar18 * (int)cVar18;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0038ecf0:
                    /* try { // try from 0038ecf0 to 0048ecf3 has its CatchHandler @ 0038fed0 */
  *param_3 = iVar57;
  *param_4 = iVar55;
LAB_0038e094:
                    /* try { // try from 0038e09c to 0048e0bf has its CatchHandler @ 0038e0c4 */
  if (iVar34 < (int)param_6) {
    lVar39 = (long)(int)param_6;
    lVar46 = lVar39 * 2;
    lVar36 = lVar39 * 3;
    lVar52 = lVar39 * 4;
    lVar50 = lVar39 * 0xc;
    lVar33 = (long)iVar34;
                    /* catch() { ... } // from try @ 0038d8cc with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038d918 with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038dbbc with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038dcd0 with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038dfa4 with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038e068 with catch @ 0038e0c4
                       catch() { ... } // from try @ 0038e09c with catch @ 0038e0c4 */
    lVar76 = NEON_shl(lVar39,4);
    lVar22 = lVar39 * 5;
    lVar23 = lVar39 * 0xd;
                    /* try { // try from 0038e0e8 to 0048e0eb has its CatchHandler @ 0038d844 */
    lVar48 = lVar39 * 10;
                    /* catch() { ... } // from try @ 0038da5c with catch @ 0038e0ec
                       catch() { ... } // from try @ 0038daf4 with catch @ 0038e0ec
                       catch() { ... } // from try @ 0038df20 with catch @ 0038e0ec */
    lVar24 = lVar39 * 0xb;
    lVar47 = lVar39 * 8;
    pcVar27 = (char *)((long)param_1 + lVar33);
                    /* catch() { ... } // from try @ 0038d910 with catch @ 0038e110 */
    lVar35 = lVar39 * 7;
                    /* catch() { ... } // from try @ 0038daec with catch @ 0038e124 */
    lVar25 = lVar39 * 9;
    lVar28 = lVar76 + lVar39 * -2;
                    /* catch() { ... } // from try @ 0038e1b0 with catch @ 0038e134
                       catch() { ... } // from try @ 0038e638 with catch @ 0038e134
                       catch() { ... } // from try @ 0038ea1c with catch @ 0038e134
                       catch() { ... } // from try @ 0038ea74 with catch @ 0038e134 */
    lVar99 = NEON_shl(lVar36,1);
    lVar54 = lVar76 - lVar39;
    piVar29 = param_4 + lVar33;
    piVar32 = param_3 + lVar33;
    do {
      iVar69 = *piVar32;
      iVar65 = piVar32[1];
      iVar63 = piVar32[2];
      iVar57 = piVar32[3];
      iVar67 = *piVar29;
      iVar61 = piVar29[1];
      iVar58 = piVar29[2];
      iVar55 = piVar29[3];
      uVar79 = uVar38;
      if ((int)uVar38 < (int)param_5) {
        uVar45 = param_5 - uVar38;
        uVar103 = (uVar45 - 0x10 >> 4) + 1;
        uVar30 = uVar103 * 0x10;
        pcVar42 = pcVar27;
        uVar79 = param_5;
        if (0xe < (param_5 - 1) - uVar38) {
          iVar64 = 0;
          iVar66 = 0;
          iVar68 = 0;
          iVar70 = 0;
          uVar132 = 0;
          pcVar42 = pcVar27 + 1;
                    /* try { // try from 0038e1b0 to 0048e1d3 has its CatchHandler @ 0038e134 */
          pcVar44 = pcVar27 + 2;
          pcVar41 = pcVar27 + 3;
                    /* try { // try from 0038e1d8 to 0048e1fb has its CatchHandler @ 0038eab0 */
          pcVar40 = pcVar27;
          iVar110 = iVar64;
          iVar111 = iVar66;
          iVar112 = iVar64;
          iVar114 = iVar66;
          iVar116 = iVar64;
          iVar118 = iVar66;
          iVar120 = iVar64;
          iVar122 = iVar66;
          iVar117 = iVar64;
          iVar119 = iVar66;
          iVar124 = iVar64;
          iVar125 = iVar66;
          iVar128 = iVar64;
          iVar129 = iVar66;
          iVar59 = iVar68;
          iVar62 = iVar70;
          iVar104 = iVar68;
          iVar105 = iVar70;
          iVar107 = iVar68;
          iVar109 = iVar70;
          iVar113 = iVar68;
          iVar115 = iVar70;
          iVar121 = iVar68;
          iVar123 = iVar70;
          iVar126 = iVar68;
          iVar127 = iVar70;
          iVar130 = iVar68;
          iVar131 = iVar70;
          do {
            uVar132 = uVar132 + 1;
            cVar18 = *pcVar40;
                    /* try { // try from 0038e208 to 0048e233 has its CatchHandler @ 0038ea88 */
            pcVar1 = pcVar40 + lVar39;
            pcVar2 = pcVar40 + lVar46;
            pcVar3 = pcVar40 + lVar36;
            pcVar4 = pcVar40 + lVar52;
            pcVar5 = pcVar40 + lVar22;
            pcVar6 = pcVar40 + lVar99;
            pcVar7 = pcVar40 + lVar35;
            pcVar8 = pcVar40 + lVar47;
            pcVar9 = pcVar40 + lVar25;
            pcVar10 = pcVar40 + lVar48;
            pcVar11 = pcVar40 + lVar24;
            pcVar12 = pcVar40 + lVar50;
                    /* try { // try from 0038e284 to 0048e287 has its CatchHandler @ 0038ea78 */
            pcVar13 = pcVar40 + lVar23;
                    /* try { // try from 0038e28c to 0048e42f has its CatchHandler @ 0038ea88 */
            pcVar14 = pcVar40 + lVar28;
            pcVar15 = pcVar40 + lVar54;
            pcVar40 = pcVar40 + lVar76;
            cVar19 = *pcVar42;
            pcVar16 = pcVar42 + lVar39;
            pcVar17 = pcVar42 + lVar46;
            iVar92 = (int)(short)cVar18;
            iVar94 = (int)(short)*pcVar1;
            iVar95 = (int)(short)*pcVar2;
            iVar97 = (int)(short)*pcVar3;
            pcVar1 = pcVar42 + lVar36;
            iVar82 = (int)(short)*pcVar4;
            iVar83 = (int)(short)*pcVar5;
            iVar84 = (int)(short)*pcVar6;
            iVar85 = (int)(short)*pcVar7;
            iVar86 = (int)(short)*pcVar8;
            iVar88 = (int)(short)*pcVar9;
            iVar89 = (int)(short)*pcVar10;
            iVar91 = (int)(short)*pcVar11;
            iVar71 = (int)(short)*pcVar12;
            iVar72 = (int)(short)*pcVar13;
            iVar73 = (int)(short)*pcVar14;
            iVar74 = (int)(short)*pcVar15;
            pcVar2 = pcVar42 + lVar52;
            pcVar3 = pcVar42 + lVar22;
            pcVar4 = pcVar42 + lVar99;
            iVar64 = iVar71 + iVar86 + iVar82 + iVar92 + iVar64;
            iVar66 = iVar72 + iVar88 + iVar83 + iVar94 + iVar66;
            iVar68 = iVar73 + iVar89 + iVar84 + iVar95 + iVar68;
            iVar70 = iVar74 + iVar91 + iVar85 + iVar97 + iVar70;
            iVar112 = iVar112 + iVar92 * iVar92 + iVar82 * iVar82 + iVar86 * iVar86 +
                      iVar71 * iVar71;
            iVar114 = iVar114 + iVar94 * iVar94 + iVar83 * iVar83 + iVar88 * iVar88 +
                      iVar72 * iVar72;
            iVar104 = iVar104 + iVar95 * iVar95 + iVar84 * iVar84 + iVar89 * iVar89 +
                      iVar73 * iVar73;
            iVar105 = iVar105 + iVar97 * iVar97 + iVar85 * iVar85 + iVar91 * iVar91 +
                      iVar74 * iVar74;
            pcVar5 = pcVar42 + lVar35;
            pcVar6 = pcVar42 + lVar47;
            pcVar7 = pcVar42 + lVar25;
            pcVar8 = pcVar42 + lVar48;
            pcVar9 = pcVar42 + lVar24;
            pcVar10 = pcVar42 + lVar50;
            pcVar11 = pcVar42 + lVar23;
            pcVar12 = pcVar42 + lVar28;
            pcVar13 = pcVar42 + lVar54;
            pcVar42 = pcVar42 + lVar76;
            cVar18 = *pcVar44;
            pcVar14 = pcVar44 + lVar39;
            pcVar15 = pcVar44 + lVar46;
            iVar92 = (int)(short)cVar19;
            iVar94 = (int)(short)*pcVar16;
            iVar95 = (int)(short)*pcVar17;
            iVar97 = (int)(short)*pcVar1;
            pcVar1 = pcVar44 + lVar36;
            iVar82 = (int)(short)*pcVar2;
            iVar83 = (int)(short)*pcVar3;
            iVar84 = (int)(short)*pcVar4;
            iVar85 = (int)(short)*pcVar5;
            iVar86 = (int)(short)*pcVar6;
            iVar88 = (int)(short)*pcVar7;
            iVar89 = (int)(short)*pcVar8;
            iVar91 = (int)(short)*pcVar9;
            iVar71 = (int)(short)*pcVar10;
            iVar72 = (int)(short)*pcVar11;
            iVar73 = (int)(short)*pcVar12;
            iVar74 = (int)(short)*pcVar13;
            pcVar2 = pcVar44 + lVar52;
            pcVar3 = pcVar44 + lVar22;
            pcVar4 = pcVar44 + lVar99;
            iVar116 = iVar71 + iVar86 + iVar82 + iVar92 + iVar116;
            iVar118 = iVar72 + iVar88 + iVar83 + iVar94 + iVar118;
            iVar107 = iVar73 + iVar89 + iVar84 + iVar95 + iVar107;
            iVar109 = iVar74 + iVar91 + iVar85 + iVar97 + iVar109;
            iVar120 = iVar120 + iVar92 * iVar92 + iVar82 * iVar82 + iVar86 * iVar86 +
                      iVar71 * iVar71;
            iVar122 = iVar122 + iVar94 * iVar94 + iVar83 * iVar83 + iVar88 * iVar88 +
                      iVar72 * iVar72;
            iVar113 = iVar113 + iVar95 * iVar95 + iVar84 * iVar84 + iVar89 * iVar89 +
                      iVar73 * iVar73;
            iVar115 = iVar115 + iVar97 * iVar97 + iVar85 * iVar85 + iVar91 * iVar91 +
                      iVar74 * iVar74;
            pcVar5 = pcVar44 + lVar35;
            pcVar6 = pcVar44 + lVar47;
            pcVar7 = pcVar44 + lVar25;
            pcVar8 = pcVar44 + lVar48;
            pcVar9 = pcVar44 + lVar24;
            pcVar10 = pcVar44 + lVar50;
            pcVar11 = pcVar44 + lVar23;
            pcVar12 = pcVar44 + lVar28;
            pcVar13 = pcVar44 + lVar54;
                    /* try { // try from 0038e460 to 0048e55b has its CatchHandler @ 0038ea90 */
            pcVar44 = pcVar44 + lVar76;
            cVar19 = *pcVar41;
            pcVar16 = pcVar41 + lVar39;
            pcVar17 = pcVar41 + lVar46;
            iVar92 = (int)(short)cVar18;
            iVar94 = (int)(short)*pcVar14;
            iVar95 = (int)(short)*pcVar15;
            iVar97 = (int)(short)*pcVar1;
            pcVar1 = pcVar41 + lVar36;
            iVar82 = (int)(short)*pcVar2;
            iVar83 = (int)(short)*pcVar3;
            iVar84 = (int)(short)*pcVar4;
            iVar85 = (int)(short)*pcVar5;
            iVar86 = (int)(short)*pcVar6;
            iVar88 = (int)(short)*pcVar7;
            iVar89 = (int)(short)*pcVar8;
            iVar91 = (int)(short)*pcVar9;
            iVar71 = (int)(short)*pcVar10;
            iVar72 = (int)(short)*pcVar11;
            iVar73 = (int)(short)*pcVar12;
            iVar74 = (int)(short)*pcVar13;
            pcVar2 = pcVar41 + lVar52;
            pcVar3 = pcVar41 + lVar22;
            pcVar4 = pcVar41 + lVar99;
            iVar117 = iVar71 + iVar86 + iVar82 + iVar92 + iVar117;
            iVar119 = iVar72 + iVar88 + iVar83 + iVar94 + iVar119;
            iVar121 = iVar73 + iVar89 + iVar84 + iVar95 + iVar121;
            iVar123 = iVar74 + iVar91 + iVar85 + iVar97 + iVar123;
            iVar124 = iVar124 + iVar92 * iVar92 + iVar82 * iVar82 + iVar86 * iVar86 +
                      iVar71 * iVar71;
            iVar125 = iVar125 + iVar94 * iVar94 + iVar83 * iVar83 + iVar88 * iVar88 +
                      iVar72 * iVar72;
            iVar126 = iVar126 + iVar95 * iVar95 + iVar84 * iVar84 + iVar89 * iVar89 +
                      iVar73 * iVar73;
            iVar127 = iVar127 + iVar97 * iVar97 + iVar85 * iVar85 + iVar91 * iVar91 +
                      iVar74 * iVar74;
            pcVar5 = pcVar41 + lVar35;
            pcVar6 = pcVar41 + lVar47;
            pcVar7 = pcVar41 + lVar25;
            pcVar8 = pcVar41 + lVar48;
            pcVar9 = pcVar41 + lVar24;
            pcVar10 = pcVar41 + lVar50;
            pcVar11 = pcVar41 + lVar23;
            pcVar12 = pcVar41 + lVar28;
            pcVar13 = pcVar41 + lVar54;
            pcVar41 = pcVar41 + lVar76;
            iVar92 = (int)(short)cVar19;
            iVar94 = (int)(short)*pcVar16;
            iVar95 = (int)(short)*pcVar17;
            iVar97 = (int)(short)*pcVar1;
            iVar82 = (int)(short)*pcVar2;
            iVar83 = (int)(short)*pcVar3;
            iVar84 = (int)(short)*pcVar4;
            iVar85 = (int)(short)*pcVar5;
            iVar86 = (int)(short)*pcVar6;
            iVar88 = (int)(short)*pcVar7;
            iVar89 = (int)(short)*pcVar8;
            iVar91 = (int)(short)*pcVar9;
            iVar71 = (int)(short)*pcVar10;
            iVar72 = (int)(short)*pcVar11;
            iVar73 = (int)(short)*pcVar12;
            iVar74 = (int)(short)*pcVar13;
            iVar128 = iVar71 + iVar86 + iVar82 + iVar92 + iVar128;
            iVar129 = iVar72 + iVar88 + iVar83 + iVar94 + iVar129;
            iVar130 = iVar73 + iVar89 + iVar84 + iVar95 + iVar130;
            iVar131 = iVar74 + iVar91 + iVar85 + iVar97 + iVar131;
            iVar110 = iVar110 + iVar92 * iVar92 + iVar82 * iVar82 + iVar86 * iVar86 +
                      iVar71 * iVar71;
            iVar111 = iVar111 + iVar94 * iVar94 + iVar83 * iVar83 + iVar88 * iVar88 +
                      iVar72 * iVar72;
            iVar59 = iVar59 + iVar95 * iVar95 + iVar84 * iVar84 + iVar89 * iVar89 + iVar73 * iVar73;
            iVar62 = iVar62 + iVar97 * iVar97 + iVar85 * iVar85 + iVar91 * iVar91 + iVar74 * iVar74;
          } while (uVar132 < uVar103);
          uVar38 = uVar38 + uVar30;
          pcVar42 = pcVar27 + (ulong)uVar30 * lVar39;
          iVar55 = iVar55 + iVar110 + iVar111 + iVar59 + iVar62;
          iVar57 = iVar57 + iVar128 + iVar129 + iVar130 + iVar131;
          iVar58 = iVar58 + iVar124 + iVar125 + iVar126 + iVar127;
          iVar61 = iVar61 + iVar120 + iVar122 + iVar113 + iVar115;
          iVar63 = iVar63 + iVar117 + iVar119 + iVar121 + iVar123;
          iVar65 = iVar65 + iVar116 + iVar118 + iVar107 + iVar109;
          iVar67 = iVar67 + iVar112 + iVar114 + iVar104 + iVar105;
          iVar69 = iVar69 + iVar64 + iVar66 + iVar68 + iVar70;
          if (uVar30 == uVar45) goto LAB_0038e9b8;
        }
                    /* try { // try from 0038e608 to 0048e60b has its CatchHandler @ 0038eab0 */
        cVar18 = pcVar42[2];
        cVar19 = *pcVar42;
        cVar20 = pcVar42[1];
        iVar63 = iVar63 + cVar18;
        cVar21 = pcVar42[3];
        iVar69 = iVar69 + cVar19;
        iVar58 = iVar58 + (int)cVar18 * (int)cVar18;
        iVar65 = iVar65 + cVar20;
        iVar57 = iVar57 + cVar21;
        iVar67 = iVar67 + (int)cVar19 * (int)cVar19;
        iVar61 = iVar61 + (int)cVar20 * (int)cVar20;
                    /* try { // try from 0038e638 to 0048e697 has its CatchHandler @ 0038e134 */
        iVar55 = iVar55 + (int)cVar21 * (int)cVar21;
        if ((int)(uVar38 + 1) < (int)param_5) {
          cVar21 = pcVar42[lVar39];
          cVar18 = pcVar42[lVar39 + 1];
          cVar19 = pcVar42[lVar39 + 2];
          iVar69 = iVar69 + cVar21;
          cVar20 = pcVar42[lVar39 + 3];
          iVar65 = iVar65 + cVar18;
          iVar63 = iVar63 + cVar19;
          iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
          iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
          iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
          iVar57 = iVar57 + cVar20;
          lVar26 = lVar39 * 2;
          iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
          if ((int)(uVar38 + 2) < (int)param_5) {
            cVar21 = pcVar42[lVar39 * 2];
            cVar18 = pcVar42[lVar26 + 1];
            cVar19 = pcVar42[lVar26 + 2];
            iVar69 = iVar69 + cVar21;
            cVar20 = pcVar42[lVar26 + 3];
            iVar65 = iVar65 + cVar18;
            iVar63 = iVar63 + cVar19;
            iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
            iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
            iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
            iVar57 = iVar57 + cVar20;
            lVar26 = lVar39 * 3;
            iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
            if ((int)(uVar38 + 3) < (int)param_5) {
              cVar21 = pcVar42[lVar39 * 3];
              cVar18 = pcVar42[lVar26 + 1];
              cVar19 = pcVar42[lVar26 + 2];
              iVar69 = iVar69 + cVar21;
              cVar20 = pcVar42[lVar26 + 3];
              iVar65 = iVar65 + cVar18;
              iVar63 = iVar63 + cVar19;
              iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
              iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
              iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
              iVar57 = iVar57 + cVar20;
              lVar26 = lVar39 * 4;
              iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
              if ((int)(uVar38 + 4) < (int)param_5) {
                cVar21 = pcVar42[lVar39 * 4];
                cVar18 = pcVar42[lVar26 + 1];
                cVar19 = pcVar42[lVar26 + 2];
                iVar69 = iVar69 + cVar21;
                cVar20 = pcVar42[lVar26 + 3];
                iVar65 = iVar65 + cVar18;
                iVar63 = iVar63 + cVar19;
                iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                iVar57 = iVar57 + cVar20;
                lVar26 = lVar39 * 5;
                iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                if ((int)(uVar38 + 5) < (int)param_5) {
                  cVar21 = pcVar42[lVar39 * 5];
                  cVar18 = pcVar42[lVar26 + 1];
                  cVar19 = pcVar42[lVar26 + 2];
                  iVar69 = iVar69 + cVar21;
                  cVar20 = pcVar42[lVar26 + 3];
                  iVar65 = iVar65 + cVar18;
                  iVar63 = iVar63 + cVar19;
                  iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                  iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                  iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                  iVar57 = iVar57 + cVar20;
                  lVar26 = lVar39 * 6;
                  iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                  if ((int)(uVar38 + 6) < (int)param_5) {
                    cVar21 = pcVar42[lVar39 * 6];
                    cVar18 = pcVar42[lVar26 + 1];
                    cVar19 = pcVar42[lVar26 + 2];
                    iVar69 = iVar69 + cVar21;
                    cVar20 = pcVar42[lVar26 + 3];
                    iVar65 = iVar65 + cVar18;
                    iVar63 = iVar63 + cVar19;
                    iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                    iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                    iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                    iVar57 = iVar57 + cVar20;
                    lVar26 = lVar39 * 7;
                    iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                    if ((int)(uVar38 + 7) < (int)param_5) {
                    /* try { // try from 0038e7c4 to 0048e7c7 has its CatchHandler @ 0038ea88 */
                      cVar21 = pcVar42[lVar39 * 7];
                      cVar18 = pcVar42[lVar26 + 1];
                      cVar19 = pcVar42[lVar26 + 2];
                      iVar69 = iVar69 + cVar21;
                      cVar20 = pcVar42[lVar26 + 3];
                      iVar65 = iVar65 + cVar18;
                      iVar63 = iVar63 + cVar19;
                      iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                      iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                      iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                      iVar57 = iVar57 + cVar20;
                      lVar26 = lVar39 * 8;
                      iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                      if ((int)(uVar38 + 8) < (int)param_5) {
                        cVar21 = pcVar42[lVar39 * 8];
                        cVar18 = pcVar42[lVar26 + 1];
                        cVar19 = pcVar42[lVar26 + 2];
                        iVar69 = iVar69 + cVar21;
                        cVar20 = pcVar42[lVar26 + 3];
                    /* try { // try from 0038e820 to 0048e823 has its CatchHandler @ 0038ea24 */
                        iVar65 = iVar65 + cVar18;
                        iVar63 = iVar63 + cVar19;
                    /* try { // try from 0038e828 to 0048e82b has its CatchHandler @ 0038ea88 */
                        iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                        iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                        iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                        iVar57 = iVar57 + cVar20;
                        lVar26 = lVar39 * 9;
                        iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                        if ((int)(uVar38 + 9) < (int)param_5) {
                          cVar21 = pcVar42[lVar39 * 9];
                          cVar18 = pcVar42[lVar26 + 1];
                          cVar19 = pcVar42[lVar26 + 2];
                          iVar69 = iVar69 + cVar21;
                          cVar20 = pcVar42[lVar26 + 3];
                          iVar65 = iVar65 + cVar18;
                          iVar63 = iVar63 + cVar19;
                          iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                          iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                          iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                          iVar57 = iVar57 + cVar20;
                          lVar26 = lVar39 * 10;
                          iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                          if ((int)(uVar38 + 10) < (int)param_5) {
                            cVar21 = pcVar42[lVar39 * 10];
                            cVar18 = pcVar42[lVar26 + 1];
                            cVar19 = pcVar42[lVar26 + 2];
                            iVar69 = iVar69 + cVar21;
                            cVar20 = pcVar42[lVar26 + 3];
                            iVar65 = iVar65 + cVar18;
                            iVar63 = iVar63 + cVar19;
                            iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                            iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                            iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                            iVar57 = iVar57 + cVar20;
                            lVar26 = lVar39 * 0xb;
                            iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                            if ((int)(uVar38 + 0xb) < (int)param_5) {
                              cVar21 = pcVar42[lVar39 * 0xb];
                              cVar18 = pcVar42[lVar26 + 1];
                              cVar19 = pcVar42[lVar26 + 2];
                              iVar69 = iVar69 + cVar21;
                              cVar20 = pcVar42[lVar26 + 3];
                              iVar65 = iVar65 + cVar18;
                              iVar63 = iVar63 + cVar19;
                              iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                              iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                              iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                              iVar57 = iVar57 + cVar20;
                              lVar26 = lVar39 * 0xc;
                              iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                              if ((int)(uVar38 + 0xc) < (int)param_5) {
                                cVar21 = pcVar42[lVar39 * 0xc];
                                cVar18 = pcVar42[lVar26 + 1];
                                cVar19 = pcVar42[lVar26 + 2];
                                iVar69 = iVar69 + cVar21;
                                cVar20 = pcVar42[lVar26 + 3];
                                iVar65 = iVar65 + cVar18;
                                iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                                iVar57 = iVar57 + cVar20;
                                iVar63 = iVar63 + cVar19;
                                iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                                iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                                iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                                lVar26 = lVar39 * 0xd;
                                if ((int)(uVar38 + 0xd) < (int)param_5) {
                                  cVar21 = pcVar42[lVar39 * 0xd];
                                  cVar18 = pcVar42[lVar26 + 1];
                                  cVar19 = pcVar42[lVar26 + 2];
                                  iVar69 = iVar69 + cVar21;
                                  cVar20 = pcVar42[lVar26 + 3];
                                  iVar65 = iVar65 + cVar18;
                                  iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                                  iVar57 = iVar57 + cVar20;
                                  iVar63 = iVar63 + cVar19;
                                  iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                                  iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                                  iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                                  lVar26 = lVar39 * 0xe;
                                  if ((int)(uVar38 + 0xe) < (int)param_5) {
                                    cVar21 = pcVar42[lVar39 * 0xe];
                                    cVar18 = pcVar42[lVar26 + 1];
                                    cVar19 = pcVar42[lVar26 + 2];
                                    iVar69 = iVar69 + cVar21;
                                    cVar20 = pcVar42[lVar26 + 3];
                                    iVar65 = iVar65 + cVar18;
                                    iVar67 = iVar67 + (int)cVar21 * (int)cVar21;
                                    iVar61 = iVar61 + (int)cVar18 * (int)cVar18;
                                    iVar58 = iVar58 + (int)cVar19 * (int)cVar19;
                                    iVar55 = iVar55 + (int)cVar20 * (int)cVar20;
                                    iVar63 = iVar63 + cVar19;
                                    iVar57 = iVar57 + cVar20;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_0038e9b8:
      uVar38 = uVar79;
      *piVar32 = iVar69;
      piVar53 = piVar32 + 4;
      pcVar27 = pcVar27 + 4;
      piVar32[3] = iVar57;
      piVar32[1] = iVar65;
      piVar32[2] = iVar63;
      *piVar29 = iVar67;
      piVar29[1] = iVar61;
      piVar29[2] = iVar58;
      piVar29[3] = iVar55;
      piVar29 = piVar29 + 4;
      piVar32 = piVar53;
                    /* try { // try from 0038e9ec to 0048ea07 has its CatchHandler @ 0038eab0 */
    } while (piVar53 != param_3 + lVar33 + 4 + (ulong)((param_6 - 1) - iVar34 >> 2) * 4);
  }
  return param_5;
}


==================================================================

### FUNC 0038f8f0 (2144 bytes) name=FUN_0038f8f0

int FUN_0038f8f0(ushort *param_1,long param_2,double *param_3,double *param_4,int param_5,
                ulong param_6)

{
  char *pcVar1;
  uint uVar2;
  uint uVar3;
  ushort uVar4;
  ushort uVar5;
  ushort uVar6;
  ushort uVar7;
  undefined1 auVar8 [14];
  undefined1 auVar9 [14];
  ushort uVar10;
  ushort uVar11;
  int *piVar12;
  int iVar13;
  ushort *puVar14;
  double *pdVar15;
  uint uVar16;
  uint uVar17;
  double *pdVar18;
  long lVar19;
  int iVar20;
  long lVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  int iVar26;
  ulong uVar27;
  int *piVar28;
  int *piVar29;
  uint uVar30;
  int *piVar31;
  uint uVar32;
  undefined1 auVar34 [16];
  uint uVar35;
  undefined1 auVar37 [16];
  double dVar38;
  double dVar39;
  double dVar40;
  double dVar41;
  double dVar42;
  undefined1 auVar43 [16];
  undefined1 auVar44 [16];
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  double dVar47;
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  double dVar50;
  double dVar51;
  undefined8 uVar52;
  undefined8 uVar53;
  long lVar54;
  ulong uVar33;
  ulong uVar36;
  
  uVar16 = (uint)param_6;
  if (param_2 == 0) {
    iVar23 = (int)uVar16 % 4;
    iVar22 = 0;
    if (iVar23 == 1) {
      iVar20 = *(int *)param_3;
      dVar38 = *param_4;
      if (0 < param_5) {
        iVar24 = 0;
        puVar14 = param_1;
        do {
          uVar4 = *puVar14;
          iVar24 = iVar24 + 1;
          puVar14 = (ushort *)
                    ((long)puVar14 +
                    (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1));
          iVar20 = iVar20 + (uint)uVar4;
                    /* try { // try from 0039000c to 004901a3 has its CatchHandler @ 003904a0 */
          dVar38 = dVar38 + (double)uVar4 * (double)(uint)uVar4;
          iVar22 = param_5;
        } while (iVar24 != param_5);
      }
      *(int *)param_3 = iVar20;
      *param_4 = dVar38;
    }
    else if (iVar23 == 2) {
      iVar20 = *(int *)param_3;
      iVar24 = *(int *)((long)param_3 + 4);
      dVar40 = *param_4;
      dVar38 = param_4[1];
      if (0 < param_5) {
        iVar26 = 0;
        puVar14 = param_1;
        do {
          uVar4 = *puVar14;
          iVar26 = iVar26 + 1;
          uVar5 = puVar14[1];
          iVar20 = iVar20 + (uint)uVar4;
          puVar14 = (ushort *)
                    ((long)puVar14 +
                    (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1));
          iVar24 = iVar24 + (uint)uVar5;
          dVar40 = dVar40 + (double)uVar4 * (double)(uint)uVar4;
          dVar38 = dVar38 + (double)uVar5 * (double)(uint)uVar5;
          iVar22 = param_5;
        } while (iVar26 != param_5);
      }
      *(int *)param_3 = iVar20;
      *(int *)((long)param_3 + 4) = iVar24;
      *param_4 = dVar40;
      param_4[1] = dVar38;
    }
    else {
      iVar22 = 0;
      if (iVar23 == 3) {
        iVar20 = *(int *)param_3;
        iVar24 = *(int *)((long)param_3 + 4);
        iVar26 = *(int *)(param_3 + 1);
        dVar42 = *param_4;
        dVar40 = param_4[1];
        dVar38 = param_4[2];
        if (0 < param_5) {
          iVar25 = 0;
          puVar14 = param_1;
          do {
            uVar4 = *puVar14;
            iVar25 = iVar25 + 1;
            uVar5 = puVar14[1];
            uVar6 = puVar14[2];
            iVar20 = iVar20 + (uint)uVar4;
            iVar24 = iVar24 + (uint)uVar5;
            iVar26 = iVar26 + (uint)uVar6;
            puVar14 = (ushort *)
                      ((long)puVar14 +
                      (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1));
            dVar42 = dVar42 + (double)uVar4 * (double)(uint)uVar4;
            dVar40 = dVar40 + (double)uVar5 * (double)(uint)uVar5;
            dVar38 = dVar38 + (double)uVar6 * (double)(uint)uVar6;
            iVar22 = param_5;
          } while (iVar25 != param_5);
        }
        *(int *)param_3 = iVar20;
        *(int *)((long)param_3 + 4) = iVar24;
        *(int *)(param_3 + 1) = iVar26;
        *param_4 = dVar42;
        param_4[1] = dVar40;
        param_4[2] = dVar38;
      }
    }
    if (iVar23 < (int)uVar16) {
      lVar19 = (long)iVar23;
      param_1 = param_1 + lVar19;
                    /* catch() { ... } // from try @ 0038ecf0 with catch @ 0038fed0
                       catch() { ... } // from try @ 0038fbc0 with catch @ 0038fed0 */
      pdVar15 = param_4 + lVar19;
      piVar28 = (int *)((long)param_3 + lVar19 * 4);
      do {
        iVar20 = *piVar28;
        iVar24 = piVar28[1];
        iVar26 = piVar28[2];
        iVar25 = piVar28[3];
        dVar47 = *pdVar15;
        dVar42 = pdVar15[1];
        dVar40 = pdVar15[2];
        dVar38 = pdVar15[3];
        puVar14 = param_1;
        iVar13 = iVar22;
        if (iVar22 < param_5) {
          do {
            uVar4 = *puVar14;
                    /* try { // try from 0038ff10 to 0048ff13 has its CatchHandler @ 0038eac0 */
            iVar22 = iVar22 + 1;
                    /* catch() { ... } // from try @ 0038ec24 with catch @ 0038ff14
                       catch() { ... } // from try @ 0038f04c with catch @ 0038ff14
                       catch() { ... } // from try @ 0038f1a8 with catch @ 0038ff14
                       catch() { ... } // from try @ 0038f1c8 with catch @ 0038ff14 */
            uVar5 = puVar14[1];
                    /* catch() { ... } // from try @ 0038eb50 with catch @ 0038ff1c */
            uVar6 = puVar14[2];
            iVar20 = iVar20 + (uint)uVar4;
            uVar7 = puVar14[3];
            iVar24 = iVar24 + (uint)uVar5;
                    /* try { // try from 0038ff2c to 0048ff2f has its CatchHandler @ 0038eac0 */
            iVar26 = iVar26 + (uint)uVar6;
            iVar25 = iVar25 + (uint)uVar7;
            puVar14 = (ushort *)
                      ((long)puVar14 +
                      (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1));
                    /* catch() { ... } // from try @ 0038ff78 with catch @ 0038ff50
                       catch() { ... } // from try @ 003901cc with catch @ 0038ff50
                       catch() { ... } // from try @ 00390284 with catch @ 0038ff50
                       catch() { ... } // from try @ 00390458 with catch @ 0038ff50
                       catch() { ... } // from try @ 00390484 with catch @ 0038ff50
                       catch() { ... } // from try @ 0039049c with catch @ 0038ff50
                       catch() { ... } // from try @ 003904c4 with catch @ 0038ff50
                       catch() { ... } // from try @ 003904d8 with catch @ 0038ff50 */
            dVar47 = dVar47 + (double)uVar4 * (double)(uint)uVar4;
            dVar42 = dVar42 + (double)uVar5 * (double)(uint)uVar5;
            dVar40 = dVar40 + (double)uVar6 * (double)(uint)uVar6;
            dVar38 = dVar38 + (double)uVar7 * (double)(uint)uVar7;
            iVar13 = param_5;
          } while (iVar22 != param_5);
        }
        iVar22 = iVar13;
                    /* try { // try from 0038ff78 to 00490007 has its CatchHandler @ 0038ff50 */
        piVar29 = piVar28 + 4;
        param_1 = param_1 + 4;
        *(ulong *)piVar28 = CONCAT44(iVar24,iVar20);
        *(ulong *)(piVar28 + 2) = CONCAT44(iVar25,iVar26);
        *pdVar15 = dVar47;
        pdVar15[1] = dVar42;
        pdVar15[2] = dVar40;
        pdVar15[3] = dVar38;
        pdVar15 = pdVar15 + 4;
        piVar28 = piVar29;
      } while (piVar29 !=
               (int *)((long)param_3 + (lVar19 + 4 + (ulong)((uVar16 - 1) - iVar23 >> 2) * 4) * 4));
    }
    return param_5;
  }
  if (uVar16 == 1) {
    iVar22 = *(int *)param_3;
    dVar38 = *param_4;
    if (param_5 < 1) {
      iVar23 = 0;
    }
    else {
      lVar19 = 0;
      iVar23 = 0;
      do {
        if (*(char *)(param_2 + lVar19) != '\0') {
          uVar4 = param_1[lVar19];
          iVar23 = iVar23 + 1;
          iVar22 = iVar22 + (uint)uVar4;
          dVar38 = dVar38 + (double)uVar4 * (double)(uint)uVar4;
        }
        lVar19 = lVar19 + 1;
      } while ((int)lVar19 < param_5);
    }
    *(int *)param_3 = iVar22;
    *param_4 = dVar38;
    return iVar23;
  }
  if (uVar16 == 3) {
    iVar22 = *(int *)param_3;
    iVar23 = *(int *)((long)param_3 + 4);
    iVar20 = *(int *)(param_3 + 1);
    dVar42 = *param_4;
    dVar40 = param_4[1];
    dVar38 = param_4[2];
    if (param_5 < 1) {
      iVar24 = 0;
    }
    else {
      lVar19 = 0;
      iVar24 = 0;
      do {
        pcVar1 = (char *)(param_2 + lVar19);
        lVar19 = lVar19 + 1;
        if (*pcVar1 != '\0') {
          uVar4 = *param_1;
          iVar24 = iVar24 + 1;
          uVar5 = param_1[1];
          uVar6 = param_1[2];
          iVar22 = iVar22 + (uint)uVar4;
          iVar23 = iVar23 + (uint)uVar5;
          iVar20 = iVar20 + (uint)uVar6;
          dVar42 = dVar42 + (double)uVar4 * (double)(uint)uVar4;
          dVar40 = dVar40 + (double)uVar5 * (double)(uint)uVar5;
          dVar38 = dVar38 + (double)uVar6 * (double)(uint)uVar6;
        }
        param_1 = param_1 + 3;
      } while ((int)lVar19 < param_5);
    }
    *(int *)param_3 = iVar22;
    *(int *)((long)param_3 + 4) = iVar23;
    *(int *)(param_3 + 1) = iVar20;
    *param_4 = dVar42;
    param_4[1] = dVar40;
    param_4[2] = dVar38;
    return iVar24;
  }
  if (param_5 < 1) {
    iVar22 = 0;
  }
  else {
    uVar2 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    uVar3 = uVar16;
    if (uVar2 < uVar16) {
      uVar3 = uVar2;
    }
    lVar19 = 0;
    uVar27 = (ulong)uVar3;
    uVar2 = ((uVar16 - uVar3) - 8 >> 3) + 1;
    piVar28 = (int *)((long)param_3 + uVar27 * 4);
    iVar22 = 0;
    iVar23 = uVar2 * 8;
    lVar54 = NEON_shl(uVar27,1);
    do {
      if (*(char *)(param_2 + lVar19) != '\0') {
        if (0 < (int)uVar16) {
          if (uVar16 < 10 ||
              param_3 < param_4 + (param_6 & 0xffffffff) &&
              param_4 < (double *)((long)param_3 + (param_6 & 0xffffffff) * 4)) {
            lVar21 = 0;
            do {
              uVar4 = param_1[lVar21];
              dVar38 = param_4[lVar21];
              *(uint *)((long)param_3 + lVar21 * 4) =
                   *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
              param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
              lVar21 = lVar21 + 1;
            } while ((int)lVar21 < (int)uVar16);
          }
          else {
            uVar17 = uVar3;
            if (uVar3 != 0) {
              uVar4 = *param_1;
              dVar38 = *param_4;
              *(uint *)param_3 = *(int *)param_3 + (uint)uVar4;
              *param_4 = dVar38 + (double)uVar4 * (double)uVar4;
              if (uVar3 != 1) {
                uVar4 = param_1[1];
                dVar38 = param_4[1];
                *(uint *)((long)param_3 + 4) = *(int *)((long)param_3 + 4) + (uint)uVar4;
                param_4[1] = dVar38 + (double)uVar4 * (double)uVar4;
                if (uVar3 == 3) {
                  uVar4 = param_1[2];
                  dVar38 = param_4[2];
                  *(uint *)(param_3 + 1) = *(int *)(param_3 + 1) + (uint)uVar4;
                  param_4[2] = dVar38 + (double)uVar4 * (double)uVar4;
                }
                else {
                  uVar17 = 2;
                }
              }
            }
            if (6 < (uVar16 - 1) - uVar3) {
              uVar30 = 0;
              pdVar18 = param_4 + uVar27;
              pdVar15 = param_4 + uVar27;
              piVar29 = piVar28;
              piVar31 = piVar28;
              puVar14 = (ushort *)((long)param_1 + lVar54);
              do {
                uVar4 = puVar14[1];
                uVar5 = puVar14[2];
                uVar6 = puVar14[3];
                uVar7 = puVar14[5];
                uVar10 = puVar14[6];
                uVar11 = puVar14[7];
                iVar20 = *piVar29;
                iVar24 = piVar29[1];
                piVar12 = piVar29 + 2;
                iVar26 = piVar29[3];
                dVar51 = pdVar15[1];
                dVar50 = *pdVar15;
                uVar53 = *(undefined8 *)(piVar29 + 6);
                uVar52 = *(undefined8 *)(piVar29 + 4);
                dVar47 = pdVar15[5];
                dVar42 = pdVar15[4];
                uVar35 = (uint)*puVar14;
                uVar36 = CONCAT26(0,CONCAT24(uVar4,uVar35));
                auVar8._8_2_ = uVar5;
                auVar8._0_8_ = uVar36;
                auVar8._10_2_ = 0;
                auVar8._12_2_ = uVar6;
                uVar32 = (uint)puVar14[4];
                uVar33 = CONCAT26(0,CONCAT24(uVar7,uVar32));
                auVar9._8_2_ = uVar10;
                auVar9._0_8_ = uVar33;
                auVar9._10_2_ = 0;
                auVar9._12_2_ = uVar11;
                dVar40 = pdVar15[7];
                dVar38 = pdVar15[6];
                dVar41 = pdVar15[3];
                dVar39 = pdVar15[2];
                uVar30 = uVar30 + 1;
                auVar45._0_8_ = uVar36 & 0xffffffff;
                auVar45._8_2_ = uVar4;
                auVar45._10_6_ = 0;
                auVar43._0_8_ = (long)(int)uVar35;
                auVar43._8_8_ = (long)(int)(uint)uVar4;
                pdVar15 = pdVar15 + 8;
                auVar49._0_8_ = (ulong)auVar8._8_6_ & 0xffffffff;
                auVar49._8_6_ = auVar8._8_6_ >> 0x20;
                auVar49._14_2_ = 0;
                piVar29 = piVar29 + 8;
                auVar37._0_8_ = (long)(int)(uint)uVar5;
                auVar37._8_8_ = (long)(int)(uint)uVar6;
                piVar31[2] = *piVar12 + (uint)uVar5;
                piVar31[3] = iVar26 + (uint)uVar6;
                *piVar31 = iVar20 + uVar35;
                piVar31[1] = iVar24 + (uint)uVar4;
                auVar45 = NEON_scvtf(auVar45,8);
                auVar43 = NEON_scvtf(auVar43,8);
                auVar49 = NEON_scvtf(auVar49,8);
                auVar37 = NEON_scvtf(auVar37,8);
                auVar48._0_8_ = uVar33 & 0xffffffff;
                auVar48._8_2_ = uVar7;
                auVar48._10_6_ = 0;
                auVar46._0_8_ = (long)(int)uVar32;
                auVar46._8_8_ = (long)(int)(uint)uVar7;
                auVar44._0_8_ = (ulong)auVar9._8_6_ & 0xffffffff;
                auVar44._8_6_ = auVar9._8_6_ >> 0x20;
                auVar44._14_2_ = 0;
                auVar48 = NEON_scvtf(auVar48,8);
                auVar34._0_8_ = (long)(int)(uint)uVar10;
                auVar34._8_8_ = (long)(int)(uint)uVar11;
                auVar46 = NEON_scvtf(auVar46,8);
                *(ulong *)(piVar31 + 6) =
                     CONCAT44((uint)uVar11 + (int)((ulong)uVar53 >> 0x20),(uint)uVar10 + (int)uVar53
                             );
                *(ulong *)(piVar31 + 4) =
                     CONCAT44((uint)uVar7 + (int)((ulong)uVar52 >> 0x20),uVar32 + (int)uVar52);
                pdVar18[1] = dVar51 + auVar45._8_8_ * auVar43._8_8_;
                *pdVar18 = dVar50 + auVar45._0_8_ * auVar43._0_8_;
                auVar43 = NEON_scvtf(auVar44,8);
                auVar34 = NEON_scvtf(auVar34,8);
                pdVar18[3] = dVar41 + auVar49._8_8_ * auVar37._8_8_;
                pdVar18[2] = dVar39 + auVar49._0_8_ * auVar37._0_8_;
                pdVar18[5] = dVar47 + auVar48._8_8_ * auVar46._8_8_;
                pdVar18[4] = dVar42 + auVar48._0_8_ * auVar46._0_8_;
                pdVar18[7] = dVar40 + auVar43._8_8_ * auVar34._8_8_;
                pdVar18[6] = dVar38 + auVar43._0_8_ * auVar34._0_8_;
                pdVar18 = pdVar18 + 8;
                piVar31 = piVar31 + 8;
                puVar14 = puVar14 + 8;
              } while (uVar30 < uVar2);
              uVar17 = uVar17 + iVar23;
              if (iVar23 == uVar16 - uVar3) goto LAB_0038fcd4;
            }
            lVar21 = (long)(int)uVar17;
            uVar4 = param_1[lVar21];
            dVar38 = param_4[lVar21];
            *(uint *)((long)param_3 + lVar21 * 4) =
                 *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
            param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
            if ((int)(uVar17 + 1) < (int)uVar16) {
              lVar21 = (long)(int)(uVar17 + 1);
              uVar4 = param_1[lVar21];
              dVar38 = param_4[lVar21];
              *(uint *)((long)param_3 + lVar21 * 4) =
                   *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
              param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
              if ((int)(uVar17 + 2) < (int)uVar16) {
                lVar21 = (long)(int)(uVar17 + 2);
                    /* try { // try from 0038fbc0 to 0048fbc3 has its CatchHandler @ 0038fed0 */
                uVar4 = param_1[lVar21];
                dVar38 = param_4[lVar21];
                *(uint *)((long)param_3 + lVar21 * 4) =
                     *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
                param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
                if ((int)(uVar17 + 3) < (int)uVar16) {
                  lVar21 = (long)(int)(uVar17 + 3);
                  uVar4 = param_1[lVar21];
                  dVar38 = param_4[lVar21];
                  *(uint *)((long)param_3 + lVar21 * 4) =
                       *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
                  param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
                  if ((int)(uVar17 + 4) < (int)uVar16) {
                    lVar21 = (long)(int)(uVar17 + 4);
                    uVar4 = param_1[lVar21];
                    dVar38 = param_4[lVar21];
                    *(uint *)((long)param_3 + lVar21 * 4) =
                         *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
                    param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
                    if ((int)(uVar17 + 5) < (int)uVar16) {
                      lVar21 = (long)(int)(uVar17 + 5);
                      uVar4 = param_1[lVar21];
                      dVar38 = param_4[lVar21];
                      *(uint *)((long)param_3 + lVar21 * 4) =
                           *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
                      param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
                      if ((int)(uVar17 + 6) < (int)uVar16) {
                        lVar21 = (long)(int)(uVar17 + 6);
                        uVar4 = param_1[lVar21];
                        dVar38 = param_4[lVar21];
                        *(uint *)((long)param_3 + lVar21 * 4) =
                             *(int *)((long)param_3 + lVar21 * 4) + (uint)uVar4;
                        param_4[lVar21] = dVar38 + (double)uVar4 * (double)uVar4;
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0038fcd4:
        iVar22 = iVar22 + 1;
      }
      lVar19 = lVar19 + 1;
      param_1 = (ushort *)
                ((long)param_1 +
                (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1));
    } while ((int)lVar19 < param_5);
  }
  return iVar22;
}


==================================================================

### FUNC 00390150 (2008 bytes) name=FUN_00390150

int FUN_00390150(short *param_1,long param_2,double *param_3,double *param_4,int param_5,
                ulong param_6)

{
  short *psVar1;
  char *pcVar2;
  uint uVar3;
  uint uVar4;
  short sVar5;
  short sVar6;
  short sVar7;
  short sVar8;
  short sVar9;
  short sVar10;
  int *piVar11;
  int *piVar12;
  int iVar13;
  short *psVar14;
  double *pdVar15;
  uint uVar16;
  uint uVar17;
  double *pdVar18;
  long lVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  long lVar25;
  int iVar26;
  int *piVar27;
  ulong uVar28;
  int *piVar29;
  uint uVar30;
  int *piVar31;
  double dVar32;
  double dVar33;
  undefined1 auVar34 [16];
  double dVar35;
  double dVar36;
  undefined1 auVar37 [16];
  double dVar38;
  double dVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  double dVar42;
  double dVar43;
  undefined8 uVar44;
  undefined8 uVar45;
  long lVar46;
  
  uVar16 = (uint)param_6;
  if (param_2 == 0) {
    iVar21 = (int)uVar16 % 4;
    iVar20 = 0;
    if (iVar21 == 1) {
      iVar23 = *(int *)param_3;
      dVar32 = *param_4;
      if (0 < param_5) {
        iVar22 = 0;
        psVar14 = param_1;
        do {
          sVar5 = *psVar14;
          iVar22 = iVar22 + 1;
          psVar14 = (short *)((long)psVar14 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 |
                             (param_6 & 0xffffffff) << 1));
          iVar23 = iVar23 + sVar5;
          dVar35 = (double)(int)sVar5;
          dVar32 = dVar32 + dVar35 * dVar35;
          iVar20 = param_5;
        } while (iVar22 != param_5);
      }
      *(int *)param_3 = iVar23;
      *param_4 = dVar32;
    }
    else if (iVar21 == 2) {
      iVar23 = *(int *)param_3;
      iVar22 = *(int *)((long)param_3 + 4);
      dVar35 = *param_4;
      dVar32 = param_4[1];
      if (0 < param_5) {
        iVar26 = 0;
        psVar14 = param_1;
        do {
          sVar5 = *psVar14;
          iVar26 = iVar26 + 1;
          psVar1 = psVar14 + 1;
          iVar23 = iVar23 + sVar5;
          psVar14 = (short *)((long)psVar14 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 |
                             (param_6 & 0xffffffff) << 1));
          dVar33 = (double)(int)sVar5;
          iVar22 = iVar22 + *psVar1;
          dVar43 = (double)(int)*psVar1;
          dVar35 = dVar35 + dVar33 * dVar33;
                    /* try { // try from 00390860 to 00490863 has its CatchHandler @ 003907c0 */
          dVar32 = dVar32 + dVar43 * dVar43;
          iVar20 = param_5;
        } while (iVar26 != param_5);
      }
      *(int *)param_3 = iVar23;
      *(int *)((long)param_3 + 4) = iVar22;
      *param_4 = dVar35;
      param_4[1] = dVar32;
    }
    else {
      iVar20 = 0;
      if (iVar21 == 3) {
        iVar23 = *(int *)param_3;
        iVar22 = *(int *)((long)param_3 + 4);
        iVar26 = *(int *)(param_3 + 1);
        dVar43 = *param_4;
        dVar35 = param_4[1];
        dVar32 = param_4[2];
        if (0 < param_5) {
          iVar24 = 0;
          psVar14 = param_1;
          do {
                    /* try { // try from 003908b4 to 004908b7 has its CatchHandler @ 00390988 */
            iVar24 = iVar24 + 1;
                    /* try { // try from 003908bc to 0049092b has its CatchHandler @ 003907c0 */
            iVar23 = iVar23 + *psVar14;
            dVar38 = (double)(int)*psVar14;
            iVar22 = iVar22 + psVar14[1];
            dVar36 = (double)(int)psVar14[1];
            iVar26 = iVar26 + psVar14[2];
            dVar33 = (double)(int)psVar14[2];
            psVar14 = (short *)((long)psVar14 +
                               (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 |
                               (param_6 & 0xffffffff) << 1));
            dVar43 = dVar43 + dVar38 * dVar38;
            dVar35 = dVar35 + dVar36 * dVar36;
            dVar32 = dVar32 + dVar33 * dVar33;
            iVar20 = param_5;
          } while (iVar24 != param_5);
        }
        *(int *)param_3 = iVar23;
        *(int *)((long)param_3 + 4) = iVar22;
        *(int *)(param_3 + 1) = iVar26;
        *param_4 = dVar43;
        param_4[1] = dVar35;
        param_4[2] = dVar32;
      }
    }
    if (iVar21 < (int)uVar16) {
      lVar19 = (long)iVar21;
      param_1 = param_1 + lVar19;
                    /* try { // try from 003906d8 to 0049072b has its CatchHandler @ 003904e0 */
      pdVar15 = param_4 + lVar19;
      piVar27 = (int *)((long)param_3 + lVar19 * 4);
      do {
        iVar23 = *piVar27;
        iVar22 = piVar27[1];
        iVar26 = piVar27[2];
        iVar24 = piVar27[3];
        dVar33 = *pdVar15;
        dVar43 = pdVar15[1];
        dVar35 = pdVar15[2];
        dVar32 = pdVar15[3];
        psVar14 = param_1;
        iVar13 = iVar20;
        if (iVar20 < param_5) {
          do {
            iVar20 = iVar20 + 1;
            iVar23 = iVar23 + *psVar14;
            psVar1 = psVar14 + 3;
            iVar22 = iVar22 + psVar14[1];
            dVar42 = (double)(int)*psVar14;
            iVar26 = iVar26 + psVar14[2];
            dVar39 = (double)(int)psVar14[1];
            iVar24 = iVar24 + *psVar1;
            dVar38 = (double)(int)psVar14[2];
            psVar14 = (short *)((long)psVar14 +
                               (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 |
                               (param_6 & 0xffffffff) << 1));
            dVar36 = (double)(int)*psVar1;
            dVar33 = dVar33 + dVar42 * dVar42;
                    /* try { // try from 0039074c to 0049074f has its CatchHandler @ 00390780 */
            dVar43 = dVar43 + dVar39 * dVar39;
            dVar35 = dVar35 + dVar38 * dVar38;
            dVar32 = dVar32 + dVar36 * dVar36;
            iVar13 = param_5;
          } while (iVar20 != param_5);
        }
        iVar20 = iVar13;
                    /* try { // try from 00390768 to 0049076b has its CatchHandler @ 003904e0 */
        piVar29 = piVar27 + 4;
                    /* catch() { ... } // from try @ 0039061c with catch @ 00390780
                       catch() { ... } // from try @ 0039074c with catch @ 00390780 */
        param_1 = param_1 + 4;
        *(ulong *)piVar27 = CONCAT44(iVar22,iVar23);
        *(ulong *)(piVar27 + 2) = CONCAT44(iVar24,iVar26);
        *pdVar15 = dVar33;
        pdVar15[1] = dVar43;
        pdVar15[2] = dVar35;
        pdVar15[3] = dVar32;
        pdVar15 = pdVar15 + 4;
        piVar27 = piVar29;
                    /* try { // try from 003907a4 to 004907a7 has its CatchHandler @ 003904e0 */
      } while (piVar29 !=
               (int *)((long)param_3 + (lVar19 + 4 + (ulong)((uVar16 - 1) - iVar21 >> 2) * 4) * 4));
    }
                    /* catch() { ... } // from try @ 00390860 with catch @ 003907c0
                       catch() { ... } // from try @ 003908bc with catch @ 003907c0
                       catch() { ... } // from try @ 00390974 with catch @ 003907c0
                       catch() { ... } // from try @ 00390998 with catch @ 003907c0
                       catch() { ... } // from try @ 003909ac with catch @ 003907c0 */
    return param_5;
  }
  if (uVar16 == 1) {
    iVar20 = *(int *)param_3;
    dVar32 = *param_4;
    if (param_5 < 1) {
      iVar21 = 0;
    }
    else {
      lVar19 = 0;
      iVar21 = 0;
      do {
        if (*(char *)(param_2 + lVar19) != '\0') {
          iVar21 = iVar21 + 1;
          iVar20 = iVar20 + param_1[lVar19];
          dVar35 = (double)(int)param_1[lVar19];
          dVar32 = dVar32 + dVar35 * dVar35;
        }
        lVar19 = lVar19 + 1;
      } while ((int)lVar19 < param_5);
    }
    *(int *)param_3 = iVar20;
    *param_4 = dVar32;
    return iVar21;
  }
  if (uVar16 == 3) {
    iVar20 = *(int *)param_3;
    iVar21 = *(int *)((long)param_3 + 4);
    iVar23 = *(int *)(param_3 + 1);
    dVar43 = *param_4;
    dVar35 = param_4[1];
    dVar32 = param_4[2];
    if (param_5 < 1) {
      iVar22 = 0;
    }
    else {
      lVar19 = 0;
      iVar22 = 0;
      do {
        pcVar2 = (char *)(param_2 + lVar19);
        lVar19 = lVar19 + 1;
        if (*pcVar2 != '\0') {
          iVar22 = iVar22 + 1;
          iVar20 = iVar20 + *param_1;
          dVar38 = (double)(int)*param_1;
          iVar21 = iVar21 + param_1[1];
                    /* try { // try from 0039061c to 0049061f has its CatchHandler @ 00390780 */
          dVar36 = (double)(int)param_1[1];
          iVar23 = iVar23 + param_1[2];
          dVar33 = (double)(int)param_1[2];
          dVar43 = dVar43 + dVar38 * dVar38;
          dVar35 = dVar35 + dVar36 * dVar36;
          dVar32 = dVar32 + dVar33 * dVar33;
        }
        param_1 = param_1 + 3;
      } while ((int)lVar19 < param_5);
    }
    *(int *)param_3 = iVar20;
    *(int *)((long)param_3 + 4) = iVar21;
    *(int *)(param_3 + 1) = iVar23;
    *param_4 = dVar43;
    param_4[1] = dVar35;
    param_4[2] = dVar32;
    return iVar22;
  }
  if (param_5 < 1) {
    iVar20 = 0;
  }
  else {
    uVar4 = -((uint)((ulong)param_3 >> 2) & 3) & 3;
    if (uVar16 < uVar4) {
      uVar4 = uVar16;
    }
    lVar19 = 0;
                    /* try { // try from 003901cc to 0049024f has its CatchHandler @ 0038ff50 */
    uVar28 = (ulong)uVar4;
    uVar3 = ((uVar16 - uVar4) - 8 >> 3) + 1;
    piVar27 = (int *)((long)param_3 + uVar28 * 4);
    iVar20 = 0;
    iVar21 = uVar3 * 8;
    lVar46 = NEON_shl(uVar28,1);
    do {
      if (*(char *)(param_2 + lVar19) != '\0') {
        if (0 < (int)uVar16) {
          if (uVar16 < 10 ||
              param_3 < param_4 + (param_6 & 0xffffffff) &&
              param_4 < (double *)((long)param_3 + (param_6 & 0xffffffff) * 4)) {
            lVar25 = 0;
            do {
              dVar35 = param_4[lVar25];
              dVar32 = (double)(int)param_1[lVar25];
              *(int *)((long)param_3 + lVar25 * 4) =
                   *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
              param_4[lVar25] = dVar35 + dVar32 * dVar32;
              lVar25 = lVar25 + 1;
            } while ((int)lVar25 < (int)uVar16);
          }
          else {
            uVar17 = uVar4;
            if (uVar4 != 0) {
              dVar35 = *param_4;
              dVar32 = (double)(int)*param_1;
              *(int *)param_3 = *(int *)param_3 + (int)*param_1;
              *param_4 = dVar35 + dVar32 * dVar32;
              if (uVar4 != 1) {
                dVar35 = param_4[1];
                dVar32 = (double)(int)param_1[1];
                *(int *)((long)param_3 + 4) = *(int *)((long)param_3 + 4) + (int)param_1[1];
                param_4[1] = dVar35 + dVar32 * dVar32;
                if (uVar4 == 3) {
                  dVar35 = param_4[2];
                  dVar32 = (double)(int)param_1[2];
                    /* try { // try from 0039027c to 0049027f has its CatchHandler @ 003904c8 */
                  *(int *)(param_3 + 1) = *(int *)(param_3 + 1) + (int)param_1[2];
                    /* try { // try from 00390284 to 00490423 has its CatchHandler @ 0038ff50 */
                  param_4[2] = dVar35 + dVar32 * dVar32;
                }
                else {
                  uVar17 = 2;
                }
              }
            }
            if (6 < (uVar16 - 1) - uVar4) {
              uVar30 = 0;
              pdVar18 = param_4 + uVar28;
              pdVar15 = param_4 + uVar28;
              piVar29 = piVar27;
              piVar31 = piVar27;
              psVar14 = (short *)((long)param_1 + lVar46);
              do {
                sVar5 = *psVar14;
                sVar6 = psVar14[1];
                sVar7 = psVar14[4];
                sVar8 = psVar14[5];
                sVar9 = psVar14[6];
                sVar10 = psVar14[7];
                iVar23 = *piVar29;
                iVar22 = piVar29[1];
                piVar11 = piVar29 + 2;
                piVar12 = piVar29 + 3;
                dVar42 = pdVar15[1];
                dVar39 = *pdVar15;
                uVar45 = *(undefined8 *)(piVar29 + 6);
                uVar44 = *(undefined8 *)(piVar29 + 4);
                dVar33 = pdVar15[5];
                dVar43 = pdVar15[4];
                dVar35 = pdVar15[7];
                dVar32 = pdVar15[6];
                dVar38 = pdVar15[3];
                dVar36 = pdVar15[2];
                uVar30 = uVar30 + 1;
                auVar40._0_8_ = (long)(int)sVar5;
                auVar40._8_8_ = (long)(int)sVar6;
                pdVar15 = pdVar15 + 8;
                auVar37._0_8_ = (long)(int)psVar14[2];
                auVar37._8_8_ = (long)(int)psVar14[3];
                piVar29 = piVar29 + 8;
                *(ulong *)(piVar31 + 2) =
                     CONCAT44(*piVar12 + (int)psVar14[3],*piVar11 + (int)psVar14[2]);
                *(ulong *)piVar31 = CONCAT44(iVar22 + sVar6,iVar23 + sVar5);
                auVar40 = NEON_scvtf(auVar40,8);
                auVar41._0_8_ = (long)(int)sVar7;
                auVar41._8_8_ = (long)(int)sVar8;
                auVar34._0_8_ = (long)(int)sVar9;
                auVar34._8_8_ = (long)(int)sVar10;
                auVar37 = NEON_scvtf(auVar37,8);
                *(ulong *)(piVar31 + 6) =
                     CONCAT44((int)sVar10 + (int)((ulong)uVar45 >> 0x20),(int)sVar9 + (int)uVar45);
                *(ulong *)(piVar31 + 4) =
                     CONCAT44((int)sVar8 + (int)((ulong)uVar44 >> 0x20),(int)sVar7 + (int)uVar44);
                pdVar18[1] = dVar42 + auVar40._8_8_ * auVar40._8_8_;
                *pdVar18 = dVar39 + auVar40._0_8_ * auVar40._0_8_;
                auVar40 = NEON_scvtf(auVar41,8);
                auVar34 = NEON_scvtf(auVar34,8);
                pdVar18[3] = dVar38 + auVar37._8_8_ * auVar37._8_8_;
                pdVar18[2] = dVar36 + auVar37._0_8_ * auVar37._0_8_;
                pdVar18[5] = dVar33 + auVar40._8_8_ * auVar40._8_8_;
                pdVar18[4] = dVar43 + auVar40._0_8_ * auVar40._0_8_;
                pdVar18[7] = dVar35 + auVar34._8_8_ * auVar34._8_8_;
                pdVar18[6] = dVar32 + auVar34._0_8_ * auVar34._0_8_;
                pdVar18 = pdVar18 + 8;
                piVar31 = piVar31 + 8;
                psVar14 = psVar14 + 8;
              } while (uVar30 < uVar3);
              uVar17 = uVar17 + iVar21;
              if (iVar21 == uVar16 - uVar4) goto LAB_003904e8;
            }
            lVar25 = (long)(int)uVar17;
            dVar35 = param_4[lVar25];
            dVar32 = (double)(int)param_1[lVar25];
            *(int *)((long)param_3 + lVar25 * 4) =
                 *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
            param_4[lVar25] = dVar35 + dVar32 * dVar32;
            if ((int)(uVar17 + 1) < (int)uVar16) {
              lVar25 = (long)(int)(uVar17 + 1);
              dVar35 = param_4[lVar25];
              dVar32 = (double)(int)param_1[lVar25];
              *(int *)((long)param_3 + lVar25 * 4) =
                   *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
              param_4[lVar25] = dVar35 + dVar32 * dVar32;
              if ((int)(uVar17 + 2) < (int)uVar16) {
                lVar25 = (long)(int)(uVar17 + 2);
                dVar35 = param_4[lVar25];
                dVar32 = (double)(int)param_1[lVar25];
                *(int *)((long)param_3 + lVar25 * 4) =
                     *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
                param_4[lVar25] = dVar35 + dVar32 * dVar32;
                if ((int)(uVar17 + 3) < (int)uVar16) {
                  lVar25 = (long)(int)(uVar17 + 3);
                  dVar35 = param_4[lVar25];
                  dVar32 = (double)(int)param_1[lVar25];
                  *(int *)((long)param_3 + lVar25 * 4) =
                       *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
                  param_4[lVar25] = dVar35 + dVar32 * dVar32;
                  if ((int)(uVar17 + 4) < (int)uVar16) {
                    lVar25 = (long)(int)(uVar17 + 4);
                    /* try { // try from 00390450 to 00490453 has its CatchHandler @ 0039048c */
                    /* try { // try from 00390458 to 0049045b has its CatchHandler @ 0038ff50 */
                    /* try { // try from 00390464 to 00490477 has its CatchHandler @ 003904a0 */
                    dVar35 = param_4[lVar25];
                    dVar32 = (double)(int)param_1[lVar25];
                    *(int *)((long)param_3 + lVar25 * 4) =
                         *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
                    param_4[lVar25] = dVar35 + dVar32 * dVar32;
                    if ((int)(uVar17 + 5) < (int)uVar16) {
                    /* try { // try from 00390484 to 00490487 has its CatchHandler @ 0038ff50 */
                      lVar25 = (long)(int)(uVar17 + 5);
                    /* catch() { ... } // from try @ 00390450 with catch @ 0039048c */
                    /* try { // try from 0039049c to 0049049f has its CatchHandler @ 0038ff50 */
                      dVar35 = param_4[lVar25];
                    /* catch() { ... } // from try @ 0039000c with catch @ 003904a0
                       catch() { ... } // from try @ 00390464 with catch @ 003904a0 */
                      dVar32 = (double)(int)param_1[lVar25];
                      *(int *)((long)param_3 + lVar25 * 4) =
                           *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
                      param_4[lVar25] = dVar35 + dVar32 * dVar32;
                      if ((int)(uVar17 + 6) < (int)uVar16) {
                        lVar25 = (long)(int)(uVar17 + 6);
                    /* try { // try from 003904c4 to 004904c7 has its CatchHandler @ 0038ff50 */
                    /* catch() { ... } // from try @ 0039027c with catch @ 003904c8 */
                        dVar35 = param_4[lVar25];
                        dVar32 = (double)(int)param_1[lVar25];
                    /* try { // try from 003904d8 to 004904db has its CatchHandler @ 0038ff50 */
                        *(int *)((long)param_3 + lVar25 * 4) =
                             *(int *)((long)param_3 + lVar25 * 4) + (int)param_1[lVar25];
                    /* catch() { ... } // from try @ 003906d8 with catch @ 003904e0
                       catch() { ... } // from try @ 00390768 with catch @ 003904e0
                       catch() { ... } // from try @ 003907a4 with catch @ 003904e0 */
                        param_4[lVar25] = dVar35 + dVar32 * dVar32;
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003904e8:
        iVar20 = iVar20 + 1;
      }
      lVar19 = lVar19 + 1;
      param_1 = (short *)((long)param_1 +
                         (-(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1)
                         );
    } while ((int)lVar19 < param_5);
  }
  return iVar20;
}


==================================================================

### FUNC 00390928 (1580 bytes) name=FUN_00390928

int FUN_00390928(int *param_1,long param_2,double *param_3,double *param_4,int param_5,ulong param_6
                )

{
  int *piVar1;
  int *piVar2;
  int *piVar3;
  char *pcVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  double *pdVar9;
  int iVar10;
  int *piVar11;
  double *pdVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  double *pdVar16;
  long lVar17;
  int iVar18;
  uint uVar19;
  double *pdVar20;
  double *pdVar21;
  double dVar22;
  double dVar23;
  undefined1 auVar24 [16];
  double dVar25;
  double dVar26;
  double dVar27;
  undefined1 auVar28 [16];
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  
  uVar13 = (uint)param_6;
  if (param_2 == 0) {
    iVar8 = (int)uVar13 % 4;
    iVar18 = 0;
    if (iVar8 == 1) {
      dVar25 = *param_3;
      dVar22 = *param_4;
      if (0 < param_5) {
        iVar10 = 0;
        piVar11 = param_1;
        do {
          iVar18 = *piVar11;
          iVar10 = iVar10 + 1;
          piVar11 = (int *)((long)piVar11 +
                           (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                           (param_6 & 0xffffffff) << 2));
          dVar32 = (double)iVar18;
          dVar25 = dVar25 + dVar32;
          dVar22 = dVar22 + dVar32 * dVar32;
          iVar18 = param_5;
        } while (iVar10 != param_5);
      }
      *param_3 = dVar25;
      *param_4 = dVar22;
    }
    else if (iVar8 == 2) {
      dVar33 = *param_3;
      dVar32 = param_3[1];
      dVar25 = *param_4;
      dVar22 = param_4[1];
      if (0 < param_5) {
        iVar10 = 0;
        piVar11 = param_1;
        do {
          iVar18 = *piVar11;
          iVar10 = iVar10 + 1;
          piVar1 = piVar11 + 1;
          piVar11 = (int *)((long)piVar11 +
                           (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                           (param_6 & 0xffffffff) << 2));
          dVar35 = (double)iVar18;
          dVar34 = (double)*piVar1;
          dVar33 = dVar33 + dVar35;
          dVar25 = dVar25 + dVar35 * dVar35;
          dVar32 = dVar32 + dVar34;
          dVar22 = dVar22 + dVar34 * dVar34;
          iVar18 = param_5;
        } while (iVar10 != param_5);
      }
      *param_3 = dVar33;
      param_3[1] = dVar32;
      *param_4 = dVar25;
      param_4[1] = dVar22;
    }
    else {
      iVar18 = 0;
      if (iVar8 == 3) {
        dVar35 = *param_3;
        dVar34 = param_3[1];
        dVar33 = param_3[2];
        dVar32 = *param_4;
        dVar25 = param_4[1];
        dVar22 = param_4[2];
        if (0 < param_5) {
          iVar10 = 0;
          piVar11 = param_1;
          do {
            iVar18 = *piVar11;
            iVar10 = iVar10 + 1;
            piVar1 = piVar11 + 1;
            piVar2 = piVar11 + 2;
            piVar11 = (int *)((long)piVar11 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_6 & 0xffffffff) << 2));
            dVar29 = (double)iVar18;
            dVar26 = (double)*piVar1;
            dVar23 = (double)*piVar2;
            dVar35 = dVar35 + dVar29;
            dVar32 = dVar32 + dVar29 * dVar29;
            dVar34 = dVar34 + dVar26;
            dVar25 = dVar25 + dVar26 * dVar26;
            dVar33 = dVar33 + dVar23;
            dVar22 = dVar22 + dVar23 * dVar23;
            iVar18 = param_5;
          } while (iVar10 != param_5);
        }
        *param_3 = dVar35;
        param_3[1] = dVar34;
        param_3[2] = dVar33;
        *param_4 = dVar32;
        param_4[1] = dVar25;
        param_4[2] = dVar22;
      }
    }
    if (iVar8 < (int)uVar13) {
      lVar17 = (long)iVar8;
      param_1 = param_1 + lVar17;
      pdVar12 = param_4 + lVar17;
      pdVar16 = param_3 + lVar17;
      do {
        dVar26 = *pdVar16;
        dVar23 = pdVar16[1];
                    /* try { // try from 00390d30 to 00490d33 has its CatchHandler @ 003909b0 */
        dVar35 = pdVar16[2];
        dVar34 = pdVar16[3];
        dVar33 = *pdVar12;
        dVar32 = pdVar12[1];
        dVar25 = pdVar12[2];
        dVar22 = pdVar12[3];
        piVar11 = param_1;
        iVar10 = iVar18;
        if (iVar18 < param_5) {
          do {
            iVar10 = *piVar11;
            iVar18 = iVar18 + 1;
            piVar1 = piVar11 + 1;
            piVar2 = piVar11 + 2;
            piVar3 = piVar11 + 3;
            piVar11 = (int *)((long)piVar11 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_6 & 0xffffffff) << 2));
            dVar31 = (double)iVar10;
            dVar30 = (double)*piVar1;
            dVar27 = (double)*piVar2;
            dVar29 = (double)*piVar3;
            dVar26 = dVar26 + dVar31;
                    /* try { // try from 00390d7c to 00490d7f has its CatchHandler @ 00391ef0 */
            dVar33 = dVar33 + dVar31 * dVar31;
            dVar23 = dVar23 + dVar30;
                    /* try { // try from 00390d84 to 00490d8f has its CatchHandler @ 003909b0 */
            dVar32 = dVar32 + dVar30 * dVar30;
            dVar35 = dVar35 + dVar27;
            dVar25 = dVar25 + dVar27 * dVar27;
            dVar34 = dVar34 + dVar29;
            dVar22 = dVar22 + dVar29 * dVar29;
            iVar10 = param_5;
          } while (iVar18 != param_5);
        }
        iVar18 = iVar10;
        *pdVar16 = dVar26;
        pdVar20 = pdVar16 + 4;
        pdVar16[1] = dVar23;
        param_1 = param_1 + 4;
        pdVar16[2] = dVar35;
        pdVar16[3] = dVar34;
        *pdVar12 = dVar33;
        pdVar12[1] = dVar32;
        pdVar12[2] = dVar25;
        pdVar12[3] = dVar22;
        pdVar12 = pdVar12 + 4;
        pdVar16 = pdVar20;
      } while (pdVar20 != param_3 + lVar17 + 4 + (ulong)((uVar13 - 1) - iVar8 >> 2) * 4);
    }
    return param_5;
  }
  if (uVar13 == 1) {
    dVar25 = *param_3;
    dVar22 = *param_4;
    if (param_5 < 1) {
      iVar18 = 0;
    }
    else {
      lVar17 = 0;
      iVar18 = 0;
      do {
        if (*(char *)(param_2 + lVar17) != '\0') {
          iVar18 = iVar18 + 1;
          dVar32 = (double)param_1[lVar17];
          dVar22 = dVar22 + dVar32 * dVar32;
          dVar25 = dVar25 + dVar32;
        }
        lVar17 = lVar17 + 1;
      } while ((int)lVar17 < param_5);
    }
    *param_3 = dVar25;
    *param_4 = dVar22;
    return iVar18;
  }
  if (uVar13 == 3) {
                    /* try { // try from 00390c10 to 00490c13 has its CatchHandler @ 003909b0 */
    dVar35 = *param_3;
    dVar34 = param_3[1];
    dVar33 = param_3[2];
    dVar32 = *param_4;
    dVar25 = param_4[1];
    dVar22 = param_4[2];
    if (param_5 < 1) {
      iVar18 = 0;
    }
    else {
      lVar17 = 0;
      iVar18 = 0;
      do {
        pcVar4 = (char *)(param_2 + lVar17);
        lVar17 = lVar17 + 1;
        if (*pcVar4 != '\0') {
          iVar18 = iVar18 + 1;
          dVar29 = (double)*param_1;
          dVar26 = (double)param_1[1];
          dVar23 = (double)param_1[2];
          dVar32 = dVar32 + dVar29 * dVar29;
          dVar25 = dVar25 + dVar26 * dVar26;
          dVar22 = dVar22 + dVar23 * dVar23;
          dVar35 = dVar35 + dVar29;
          dVar34 = dVar34 + dVar26;
                    /* try { // try from 00390c74 to 00490cef has its CatchHandler @ 00391ee8 */
          dVar33 = dVar33 + dVar23;
        }
        param_1 = param_1 + 3;
      } while ((int)lVar17 < param_5);
    }
    *param_3 = dVar35;
    param_3[1] = dVar34;
    param_3[2] = dVar33;
    *param_4 = dVar32;
    param_4[1] = dVar25;
    param_4[2] = dVar22;
    return iVar18;
  }
  if (param_5 < 1) {
    iVar18 = 0;
  }
  else {
    uVar5 = (uint)((ulong)param_3 >> 3) & 1;
                    /* try { // try from 0039096c to 0049096f has its CatchHandler @ 0039099c */
                    /* try { // try from 00390974 to 00490977 has its CatchHandler @ 003907c0 */
    uVar7 = uVar13;
    if (uVar5 < uVar13) {
      uVar7 = uVar5;
    }
                    /* catch() { ... } // from try @ 003908b4 with catch @ 00390988 */
                    /* catch() { ... } // from try @ 0039096c with catch @ 0039099c */
    lVar17 = 0;
    uVar5 = ((uVar13 - uVar7) - 4 >> 2) + 1;
                    /* try { // try from 00390998 to 0049099b has its CatchHandler @ 003907c0 */
                    /* try { // try from 003909ac to 004909af has its CatchHandler @ 003907c0 */
                    /* catch() { ... } // from try @ 00390a18 with catch @ 003909b0
                       catch() { ... } // from try @ 00390c10 with catch @ 003909b0
                       catch() { ... } // from try @ 00390d30 with catch @ 003909b0
                       catch() { ... } // from try @ 00390d84 with catch @ 003909b0
                       catch() { ... } // from try @ 00391588 with catch @ 003909b0
                       catch() { ... } // from try @ 00391dc8 with catch @ 003909b0
                       catch() { ... } // from try @ 00391edc with catch @ 003909b0
                       catch() { ... } // from try @ 00391f00 with catch @ 003909b0 */
    iVar18 = 0;
    iVar8 = uVar5 * 4;
    do {
      if (*(char *)(param_2 + lVar17) != '\0') {
        if (0 < (int)uVar13) {
          if (uVar13 < 7 || param_4 < param_3 + 4 && param_3 < param_4 + 4) {
            lVar15 = 0;
            do {
              dVar25 = param_4[lVar15];
              dVar22 = (double)param_1[lVar15];
                    /* try { // try from 00390b8c to 00490b8f has its CatchHandler @ 00391ee8 */
              param_3[lVar15] = param_3[lVar15] + dVar22;
              param_4[lVar15] = dVar25 + dVar22 * dVar22;
              lVar15 = lVar15 + 1;
            } while ((int)lVar15 < (int)uVar13);
          }
          else {
            if (uVar7 != 0) {
              dVar25 = *param_4;
              dVar22 = (double)*param_1;
              *param_3 = *param_3 + dVar22;
              *param_4 = dVar25 + dVar22 * dVar22;
            }
            uVar14 = (uint)(uVar7 != 0);
            if (2 < (uVar13 - 1) - uVar7) {
                    /* try { // try from 00390a18 to 00490a3b has its CatchHandler @ 003909b0 */
              uVar19 = 0;
              pdVar16 = param_3 + uVar7;
              pdVar20 = param_4 + uVar7;
              pdVar21 = param_3 + uVar7;
              pdVar12 = param_4 + uVar7;
              piVar11 = param_1 + uVar7;
              do {
                pdVar9 = pdVar16 + 1;
                dVar30 = *pdVar16;
                dVar26 = pdVar12[1];
                dVar23 = *pdVar12;
                dVar27 = pdVar16[3];
                dVar29 = pdVar16[2];
                uVar19 = uVar19 + 1;
                auVar28._0_8_ = (long)*piVar11;
                auVar28._8_8_ = (long)piVar11[1];
                auVar24._0_8_ = (long)piVar11[2];
                auVar24._8_8_ = (long)piVar11[3];
                dVar35 = pdVar12[3];
                dVar34 = pdVar12[2];
                pdVar12 = pdVar12 + 4;
                pdVar16 = pdVar16 + 4;
                auVar28 = NEON_scvtf(auVar28,8);
                dVar32 = auVar28._0_8_;
                dVar33 = auVar28._8_8_;
                auVar24 = NEON_scvtf(auVar24,8);
                dVar22 = auVar24._0_8_;
                dVar25 = auVar24._8_8_;
                pdVar21[1] = *pdVar9 + dVar33;
                *pdVar21 = dVar30 + dVar32;
                pdVar21[3] = dVar25 + dVar27;
                pdVar21[2] = dVar22 + dVar29;
                    /* try { // try from 00390a8c to 00490ab7 has its CatchHandler @ 00391ee8 */
                pdVar20[1] = dVar26 + dVar33 * dVar33;
                *pdVar20 = dVar23 + dVar32 * dVar32;
                pdVar20[3] = dVar35 + dVar25 * dVar25;
                pdVar20[2] = dVar34 + dVar22 * dVar22;
                pdVar20 = pdVar20 + 4;
                pdVar21 = pdVar21 + 4;
                piVar11 = piVar11 + 4;
              } while (uVar19 < uVar5);
              uVar14 = uVar14 + iVar8;
              if (iVar8 == uVar13 - uVar7) goto LAB_00390b34;
            }
            iVar10 = uVar14 + 1;
            dVar25 = param_4[(int)uVar14];
            dVar22 = (double)param_1[(int)uVar14];
            param_3[(int)uVar14] = param_3[(int)uVar14] + dVar22;
            param_4[(int)uVar14] = dVar25 + dVar22 * dVar22;
            if (iVar10 < (int)uVar13) {
              iVar6 = uVar14 + 2;
              dVar25 = param_4[iVar10];
              dVar22 = (double)param_1[iVar10];
              param_3[iVar10] = param_3[iVar10] + dVar22;
              param_4[iVar10] = dVar25 + dVar22 * dVar22;
                    /* try { // try from 00390b08 to 00490b0b has its CatchHandler @ 00391f04 */
              if (iVar6 < (int)uVar13) {
                dVar25 = param_4[iVar6];
                dVar22 = (double)param_1[iVar6];
                param_3[iVar6] = param_3[iVar6] + dVar22;
                param_4[iVar6] = dVar25 + dVar22 * dVar22;
              }
            }
          }
        }
LAB_00390b34:
        iVar18 = iVar18 + 1;
      }
      lVar17 = lVar17 + 1;
      param_1 = (int *)((long)param_1 +
                       (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2));
    } while ((int)lVar17 < param_5);
  }
  return iVar18;
}


==================================================================

### FUNC 00390f54 (1572 bytes) name=FUN_00390f54

int FUN_00390f54(float *param_1,long param_2,double *param_3,double *param_4,int param_5,
                ulong param_6)

{
  float *pfVar1;
  float *pfVar2;
  float *pfVar3;
  char *pcVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  double *pdVar9;
  int iVar10;
  float *pfVar11;
  double *pdVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  long lVar16;
  double *pdVar17;
  int iVar18;
  uint uVar19;
  double *pdVar20;
  double *pdVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  float fVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  
  uVar13 = (uint)param_6;
  if (param_2 == 0) {
    iVar8 = (int)uVar13 % 4;
    iVar18 = 0;
    if (iVar8 == 1) {
      dVar24 = *param_3;
      dVar22 = *param_4;
      if (0 < param_5) {
        iVar10 = 0;
        pfVar11 = param_1;
        do {
          fVar27 = *pfVar11;
          iVar10 = iVar10 + 1;
          pfVar11 = (float *)((long)pfVar11 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_6 & 0xffffffff) << 2));
          dVar30 = (double)fVar27;
          dVar24 = dVar24 + dVar30;
          dVar22 = dVar22 + dVar30 * dVar30;
          iVar18 = param_5;
        } while (iVar10 != param_5);
      }
      *param_3 = dVar24;
      *param_4 = dVar22;
    }
    else if (iVar8 == 2) {
      dVar32 = *param_3;
      dVar30 = param_3[1];
      dVar24 = *param_4;
      dVar22 = param_4[1];
      if (0 < param_5) {
        iVar10 = 0;
        pfVar11 = param_1;
        do {
          iVar10 = iVar10 + 1;
          pfVar1 = pfVar11 + 1;
          dVar34 = (double)*pfVar11;
          pfVar11 = (float *)((long)pfVar11 +
                             (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                             (param_6 & 0xffffffff) << 2));
          dVar33 = (double)*pfVar1;
          dVar32 = dVar32 + dVar34;
          dVar24 = dVar24 + dVar34 * dVar34;
          dVar30 = dVar30 + dVar33;
          dVar22 = dVar22 + dVar33 * dVar33;
          iVar18 = param_5;
        } while (iVar10 != param_5);
      }
      *param_3 = dVar32;
      param_3[1] = dVar30;
      *param_4 = dVar24;
      param_4[1] = dVar22;
    }
    else {
      iVar18 = 0;
      if (iVar8 == 3) {
        dVar34 = *param_3;
        dVar33 = param_3[1];
        dVar32 = param_3[2];
        dVar30 = *param_4;
        dVar24 = param_4[1];
        dVar22 = param_4[2];
        if (0 < param_5) {
          iVar10 = 0;
          pfVar11 = param_1;
          do {
            fVar27 = *pfVar11;
            iVar10 = iVar10 + 1;
            pfVar1 = pfVar11 + 1;
            pfVar2 = pfVar11 + 2;
            pfVar11 = (float *)((long)pfVar11 +
                               (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                               (param_6 & 0xffffffff) << 2));
            dVar26 = (double)fVar27;
            dVar25 = (double)*pfVar1;
            dVar23 = (double)*pfVar2;
            dVar34 = dVar34 + dVar26;
            dVar30 = dVar30 + dVar26 * dVar26;
            dVar33 = dVar33 + dVar25;
            dVar24 = dVar24 + dVar25 * dVar25;
            dVar32 = dVar32 + dVar23;
            dVar22 = dVar22 + dVar23 * dVar23;
            iVar18 = param_5;
          } while (iVar10 != param_5);
        }
        *param_3 = dVar34;
        param_3[1] = dVar33;
        param_3[2] = dVar32;
        *param_4 = dVar30;
        param_4[1] = dVar24;
                    /* try { // try from 00391558 to 0049155b has its CatchHandler @ 00391ee8 */
        param_4[2] = dVar22;
      }
    }
    if (iVar8 < (int)uVar13) {
      lVar16 = (long)iVar8;
      param_1 = param_1 + lVar16;
      pdVar12 = param_4 + lVar16;
      pdVar17 = param_3 + lVar16;
      do {
        dVar25 = *pdVar17;
        dVar23 = pdVar17[1];
        dVar34 = pdVar17[2];
        dVar33 = pdVar17[3];
        dVar32 = *pdVar12;
        dVar30 = pdVar12[1];
        dVar24 = pdVar12[2];
        dVar22 = pdVar12[3];
        pfVar11 = param_1;
        iVar10 = iVar18;
        if (iVar18 < param_5) {
          do {
            fVar27 = *pfVar11;
            iVar18 = iVar18 + 1;
            pfVar1 = pfVar11 + 1;
            pfVar2 = pfVar11 + 2;
            pfVar3 = pfVar11 + 3;
            pfVar11 = (float *)((long)pfVar11 +
                               (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 |
                               (param_6 & 0xffffffff) << 2));
            dVar28 = (double)fVar27;
            dVar31 = (double)*pfVar1;
            dVar29 = (double)*pfVar2;
            dVar26 = (double)*pfVar3;
            dVar25 = dVar25 + dVar28;
            dVar32 = dVar32 + dVar28 * dVar28;
            dVar23 = dVar23 + dVar31;
            dVar30 = dVar30 + dVar31 * dVar31;
            dVar34 = dVar34 + dVar29;
            dVar24 = dVar24 + dVar29 * dVar29;
            dVar33 = dVar33 + dVar26;
            dVar22 = dVar22 + dVar26 * dVar26;
            iVar10 = param_5;
          } while (iVar18 != param_5);
        }
        iVar18 = iVar10;
        *pdVar17 = dVar25;
        pdVar20 = pdVar17 + 4;
        pdVar17[1] = dVar23;
        param_1 = param_1 + 4;
        pdVar17[2] = dVar34;
        pdVar17[3] = dVar33;
        *pdVar12 = dVar32;
        pdVar12[1] = dVar30;
        pdVar12[2] = dVar24;
        pdVar12[3] = dVar22;
        pdVar12 = pdVar12 + 4;
        pdVar17 = pdVar20;
      } while (pdVar20 != param_3 + lVar16 + 4 + (ulong)((uVar13 - 1) - iVar8 >> 2) * 4);
    }
    return param_5;
  }
  if (uVar13 == 1) {
    dVar24 = *param_3;
    dVar22 = *param_4;
    if (param_5 < 1) {
      iVar18 = 0;
    }
    else {
      lVar16 = 0;
      iVar18 = 0;
      do {
        if (*(char *)(param_2 + lVar16) != '\0') {
          iVar18 = iVar18 + 1;
          dVar30 = (double)param_1[lVar16];
          dVar22 = dVar22 + dVar30 * dVar30;
          dVar24 = dVar24 + dVar30;
        }
        lVar16 = lVar16 + 1;
      } while ((int)lVar16 < param_5);
    }
    *param_3 = dVar24;
    *param_4 = dVar22;
    return iVar18;
  }
  if (uVar13 == 3) {
    dVar34 = *param_3;
    dVar33 = param_3[1];
    dVar32 = param_3[2];
    dVar30 = *param_4;
    dVar24 = param_4[1];
    dVar22 = param_4[2];
    if (param_5 < 1) {
      iVar18 = 0;
    }
    else {
      lVar16 = 0;
      iVar18 = 0;
      do {
        pcVar4 = (char *)(param_2 + lVar16);
        lVar16 = lVar16 + 1;
        if (*pcVar4 != '\0') {
          iVar18 = iVar18 + 1;
          dVar26 = (double)*param_1;
          dVar25 = (double)param_1[1];
          dVar23 = (double)param_1[2];
          dVar30 = dVar30 + dVar26 * dVar26;
          dVar24 = dVar24 + dVar25 * dVar25;
          dVar22 = dVar22 + dVar23 * dVar23;
          dVar34 = dVar34 + dVar26;
          dVar33 = dVar33 + dVar25;
          dVar32 = dVar32 + dVar23;
        }
        param_1 = param_1 + 3;
      } while ((int)lVar16 < param_5);
    }
    *param_3 = dVar34;
    param_3[1] = dVar33;
    param_3[2] = dVar32;
    *param_4 = dVar30;
    param_4[1] = dVar24;
    param_4[2] = dVar22;
    return iVar18;
  }
  if (param_5 < 1) {
    iVar18 = 0;
  }
  else {
    uVar5 = (uint)((ulong)param_3 >> 3) & 1;
    uVar7 = uVar13;
    if (uVar5 < uVar13) {
      uVar7 = uVar5;
    }
    lVar16 = 0;
    uVar5 = ((uVar13 - uVar7) - 4 >> 2) + 1;
    iVar18 = 0;
    iVar8 = uVar5 * 4;
    do {
      if (*(char *)(param_2 + lVar16) != '\0') {
        if (0 < (int)uVar13) {
          if (uVar13 < 7 || param_4 < param_3 + 4 && param_3 < param_4 + 4) {
            lVar15 = 0;
            do {
              dVar24 = param_4[lVar15];
              dVar22 = (double)param_1[lVar15];
              param_3[lVar15] = param_3[lVar15] + dVar22;
              param_4[lVar15] = dVar24 + dVar22 * dVar22;
              lVar15 = lVar15 + 1;
            } while ((int)lVar15 < (int)uVar13);
          }
          else {
            if (uVar7 != 0) {
              dVar24 = *param_4;
              dVar22 = (double)*param_1;
              *param_3 = *param_3 + dVar22;
              *param_4 = dVar24 + dVar22 * dVar22;
            }
            uVar14 = (uint)(uVar7 != 0);
            if (2 < (uVar13 - 1) - uVar7) {
              uVar19 = 0;
              pdVar17 = param_3 + uVar7;
              pdVar20 = param_4 + uVar7;
              pdVar21 = param_3 + uVar7;
              pdVar12 = param_4 + uVar7;
              pfVar11 = param_1 + uVar7;
              do {
                pdVar9 = pdVar17 + 1;
                dVar26 = *pdVar17;
                dVar34 = pdVar12[1];
                dVar33 = *pdVar12;
                dVar25 = pdVar17[3];
                dVar23 = pdVar17[2];
                uVar19 = uVar19 + 1;
                dVar29 = (double)(float)*(undefined8 *)pfVar11;
                dVar31 = (double)(float)((ulong)*(undefined8 *)pfVar11 >> 0x20);
                dVar22 = (double)(float)*(undefined8 *)(pfVar11 + 2);
                dVar24 = (double)(float)((ulong)*(undefined8 *)(pfVar11 + 2) >> 0x20);
                dVar32 = pdVar12[3];
                dVar30 = pdVar12[2];
                pdVar12 = pdVar12 + 4;
                pdVar17 = pdVar17 + 4;
                pdVar21[1] = *pdVar9 + dVar31;
                *pdVar21 = dVar26 + dVar29;
                pdVar21[3] = dVar24 + dVar25;
                pdVar21[2] = dVar22 + dVar23;
                pdVar20[1] = dVar34 + dVar31 * dVar31;
                *pdVar20 = dVar33 + dVar29 * dVar29;
                pdVar20[3] = dVar32 + dVar24 * dVar24;
                pdVar20[2] = dVar30 + dVar22 * dVar22;
                pdVar20 = pdVar20 + 4;
                pdVar21 = pdVar21 + 4;
                pfVar11 = pfVar11 + 4;
              } while (uVar19 < uVar5);
              uVar14 = uVar14 + iVar8;
              if (iVar8 == uVar13 - uVar7) goto LAB_00391158;
            }
            iVar10 = uVar14 + 1;
                    /* try { // try from 003910d8 to 0049149b has its CatchHandler @ 00391f0c */
            dVar24 = param_4[(int)uVar14];
            dVar22 = (double)param_1[(int)uVar14];
            param_3[(int)uVar14] = param_3[(int)uVar14] + dVar22;
            param_4[(int)uVar14] = dVar24 + dVar22 * dVar22;
            if (iVar10 < (int)uVar13) {
              iVar6 = uVar14 + 2;
              dVar24 = param_4[iVar10];
              dVar22 = (double)param_1[iVar10];
              param_3[iVar10] = param_3[iVar10] + dVar22;
              param_4[iVar10] = dVar24 + dVar22 * dVar22;
              if (iVar6 < (int)uVar13) {
                dVar24 = param_4[iVar6];
                dVar22 = (double)param_1[iVar6];
                param_3[iVar6] = param_3[iVar6] + dVar22;
                param_4[iVar6] = dVar24 + dVar22 * dVar22;
              }
            }
          }
        }
LAB_00391158:
        iVar18 = iVar18 + 1;
      }
      lVar16 = lVar16 + 1;
      param_1 = (float *)((long)param_1 +
                         (-(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2)
                         );
    } while ((int)lVar16 < param_5);
  }
  return iVar18;
}


==================================================================

### FUNC 00391578 (1336 bytes) name=FUN_00391578

int FUN_00391578(double *param_1,long param_2,double *param_3,double *param_4,int param_5,
                ulong param_6)

{
  char *pcVar1;
  uint uVar2;
  long lVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  double *pdVar7;
  double *pdVar8;
  uint uVar9;
  ulong uVar10;
  long lVar11;
  double *pdVar12;
  long lVar13;
  uint uVar14;
  int iVar15;
  ulong uVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  
                    /* try { // try from 00391588 to 0049158b has its CatchHandler @ 003909b0 */
  uVar9 = (uint)param_6;
  if (param_2 == 0) {
    iVar5 = (int)uVar9 % 4;
    iVar15 = 0;
    if (iVar5 == 1) {
      dVar21 = *param_3;
      dVar17 = *param_4;
      if (0 < param_5) {
        iVar6 = 0;
        pdVar8 = param_1;
        do {
          iVar6 = iVar6 + 1;
          dVar25 = *pdVar8;
          pdVar8 = (double *)
                   ((long)pdVar8 +
                   (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
          dVar21 = dVar21 + dVar25;
          dVar17 = dVar17 + dVar25 * dVar25;
          iVar15 = param_5;
        } while (iVar6 != param_5);
      }
      *param_3 = dVar21;
      *param_4 = dVar17;
    }
    else if (iVar5 == 2) {
      dVar26 = *param_3;
      dVar25 = param_3[1];
      dVar21 = *param_4;
      dVar17 = param_4[1];
      if (0 < param_5) {
        iVar6 = 0;
        pdVar8 = param_1;
        do {
          iVar6 = iVar6 + 1;
          dVar28 = *pdVar8;
          dVar27 = pdVar8[1];
          pdVar8 = (double *)
                   ((long)pdVar8 +
                   (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
          dVar26 = dVar26 + dVar28;
          dVar21 = dVar21 + dVar28 * dVar28;
          dVar25 = dVar25 + dVar27;
          dVar17 = dVar17 + dVar27 * dVar27;
          iVar15 = param_5;
        } while (iVar6 != param_5);
      }
      *param_3 = dVar26;
      param_3[1] = dVar25;
      *param_4 = dVar21;
      param_4[1] = dVar17;
    }
    else {
      iVar15 = 0;
      if (iVar5 == 3) {
        dVar28 = *param_3;
        dVar27 = param_3[1];
        dVar26 = param_3[2];
        dVar25 = *param_4;
        dVar21 = param_4[1];
        dVar17 = param_4[2];
        if (0 < param_5) {
          iVar6 = 0;
          pdVar8 = param_1;
          do {
            iVar6 = iVar6 + 1;
            dVar22 = *pdVar8;
            dVar19 = pdVar8[1];
            dVar18 = pdVar8[2];
            pdVar8 = (double *)
                     ((long)pdVar8 +
                     (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
            dVar28 = dVar28 + dVar22;
            dVar25 = dVar25 + dVar22 * dVar22;
            dVar27 = dVar27 + dVar19;
            dVar21 = dVar21 + dVar19 * dVar19;
            dVar26 = dVar26 + dVar18;
            dVar17 = dVar17 + dVar18 * dVar18;
            iVar15 = param_5;
          } while (iVar6 != param_5);
        }
        *param_3 = dVar28;
        param_3[1] = dVar27;
        param_3[2] = dVar26;
        *param_4 = dVar25;
        param_4[1] = dVar21;
        param_4[2] = dVar17;
      }
    }
    if (iVar5 < (int)uVar9) {
      lVar11 = (long)iVar5;
      param_1 = param_1 + lVar11;
      pdVar8 = param_4 + lVar11;
      pdVar12 = param_3 + lVar11;
      do {
        dVar19 = *pdVar12;
        dVar18 = pdVar12[1];
        dVar28 = pdVar12[2];
        dVar27 = pdVar12[3];
        dVar26 = *pdVar8;
        dVar25 = pdVar8[1];
        dVar21 = pdVar8[2];
        dVar17 = pdVar8[3];
        pdVar7 = param_1;
        iVar6 = iVar15;
        if (iVar15 < param_5) {
          do {
            iVar15 = iVar15 + 1;
            dVar24 = *pdVar7;
            dVar23 = pdVar7[1];
            dVar20 = pdVar7[2];
            dVar22 = pdVar7[3];
            pdVar7 = (double *)
                     ((long)pdVar7 +
                     (-(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3));
            dVar19 = dVar19 + dVar24;
            dVar26 = dVar26 + dVar24 * dVar24;
            dVar18 = dVar18 + dVar23;
            dVar25 = dVar25 + dVar23 * dVar23;
            dVar28 = dVar28 + dVar20;
            dVar21 = dVar21 + dVar20 * dVar20;
            dVar27 = dVar27 + dVar22;
            dVar17 = dVar17 + dVar22 * dVar22;
            iVar6 = param_5;
          } while (iVar15 != param_5);
        }
        iVar15 = iVar6;
        *pdVar12 = dVar19;
        pdVar7 = pdVar12 + 4;
        pdVar12[1] = dVar18;
        param_1 = param_1 + 4;
        pdVar12[2] = dVar28;
        pdVar12[3] = dVar27;
        *pdVar8 = dVar26;
        pdVar8[1] = dVar25;
        pdVar8[2] = dVar21;
        pdVar8[3] = dVar17;
        pdVar8 = pdVar8 + 4;
        pdVar12 = pdVar7;
      } while (pdVar7 != param_3 + lVar11 + 4 + (ulong)((uVar9 - 1) - iVar5 >> 2) * 4);
    }
    return param_5;
  }
  if (uVar9 == 1) {
    dVar21 = *param_3;
    dVar17 = *param_4;
    if (param_5 < 1) {
      iVar15 = 0;
    }
    else {
      lVar11 = 0;
      iVar15 = 0;
      do {
                    /* try { // try from 00391768 to 0049176b has its CatchHandler @ 00391f04 */
        if (*(char *)(param_2 + lVar11) != '\0') {
          dVar25 = param_1[lVar11];
          iVar15 = iVar15 + 1;
          dVar17 = dVar17 + dVar25 * dVar25;
          dVar21 = dVar21 + dVar25;
        }
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < param_5);
    }
    *param_3 = dVar21;
    *param_4 = dVar17;
    return iVar15;
  }
  if (uVar9 == 3) {
    dVar28 = *param_3;
    dVar27 = param_3[1];
                    /* try { // try from 003917b8 to 004917bb has its CatchHandler @ 00391ee0 */
    dVar26 = param_3[2];
    dVar25 = *param_4;
    dVar21 = param_4[1];
    dVar17 = param_4[2];
    if (param_5 < 1) {
      iVar15 = 0;
    }
    else {
      lVar11 = 0;
      iVar15 = 0;
      do {
        pcVar1 = (char *)(param_2 + lVar11);
        lVar11 = lVar11 + 1;
        if (*pcVar1 != '\0') {
          dVar22 = *param_1;
          iVar15 = iVar15 + 1;
          dVar19 = param_1[1];
          dVar18 = param_1[2];
          dVar25 = dVar25 + dVar22 * dVar22;
          dVar21 = dVar21 + dVar19 * dVar19;
          dVar17 = dVar17 + dVar18 * dVar18;
          dVar28 = dVar28 + dVar22;
          dVar27 = dVar27 + dVar19;
          dVar26 = dVar26 + dVar18;
        }
                    /* try { // try from 0039180c to 0049180f has its CatchHandler @ 00391e74 */
        param_1 = param_1 + 3;
      } while ((int)lVar11 < param_5);
    }
                    /* try { // try from 00391814 to 004918fb has its CatchHandler @ 00391ee0 */
    *param_3 = dVar28;
    param_3[1] = dVar27;
    param_3[2] = dVar26;
    *param_4 = dVar25;
    param_4[1] = dVar21;
    param_4[2] = dVar17;
    return iVar15;
  }
  if (param_5 < 1) {
    iVar15 = 0;
  }
  else {
    uVar4 = (uint)((ulong)param_3 >> 3) & 1;
    lVar11 = 0;
    uVar16 = -(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3;
    if (uVar9 < uVar4) {
      uVar4 = uVar9;
    }
    pdVar8 = param_1 + 2;
    iVar6 = uVar9 - uVar4;
    uVar2 = (iVar6 - 2U >> 1) + 1;
    iVar15 = 0;
    iVar5 = uVar2 * 2;
    do {
      if (*(char *)(param_2 + lVar11) != '\0') {
        if (0 < (int)uVar9) {
          if (((uVar9 < 6 || param_4 < param_3 + 2 && param_3 < param_4 + 2) ||
               param_3 < pdVar8 && param_1 < param_3 + 2) ||
             (param_4 < pdVar8 && param_1 < param_4 + 2)) {
            lVar13 = 0;
            do {
                    /* try { // try from 00391724 to 00491727 has its CatchHandler @ 00391ee8 */
              dVar21 = param_1[lVar13];
              dVar17 = param_4[lVar13];
              param_3[lVar13] = param_3[lVar13] + dVar21;
              param_4[lVar13] = dVar17 + dVar21 * dVar21;
              lVar13 = lVar13 + 1;
            } while ((int)lVar13 < (int)uVar9);
          }
          else {
            if (uVar4 != 0) {
              dVar21 = *param_1;
              dVar17 = *param_4;
              *param_3 = *param_3 + dVar21;
              *param_4 = dVar17 + dVar21 * dVar21;
            }
            uVar14 = (uint)(uVar4 != 0);
            if (iVar6 != 1) {
              lVar13 = 0;
              uVar14 = 0;
              do {
                lVar3 = lVar13 + (ulong)uVar4 * 8;
                uVar14 = uVar14 + 1;
                pdVar12 = (double *)((long)param_3 + lVar3);
                pdVar7 = (double *)((long)param_4 + lVar3);
                dVar26 = ((double *)((long)param_1 + lVar3))[1];
                dVar25 = *(double *)((long)param_1 + lVar3);
                lVar13 = lVar13 + 0x10;
                dVar21 = pdVar7[1];
                dVar17 = *pdVar7;
                pdVar12[1] = pdVar12[1] + dVar26;
                *pdVar12 = *pdVar12 + dVar25;
                pdVar7[1] = dVar21 + dVar26 * dVar26;
                *pdVar7 = dVar17 + dVar25 * dVar25;
              } while (uVar14 < uVar2);
              uVar14 = iVar5 + (uint)(uVar4 != 0);
              if (iVar5 == iVar6) goto LAB_003916e8;
            }
            uVar10 = -(ulong)(uVar14 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar14 << 3;
            dVar21 = *(double *)((long)param_1 + uVar10);
            dVar17 = *(double *)((long)param_4 + uVar10);
            *(double *)((long)param_3 + uVar10) = *(double *)((long)param_3 + uVar10) + dVar21;
            *(double *)((long)param_4 + uVar10) = dVar17 + dVar21 * dVar21;
          }
        }
LAB_003916e8:
        iVar15 = iVar15 + 1;
      }
      lVar11 = lVar11 + 1;
      param_1 = (double *)((long)param_1 + uVar16);
      pdVar8 = (double *)((long)pdVar8 + uVar16);
    } while ((int)lVar11 < param_5);
  }
  return iVar15;
}


==================================================================

### FUNC 00391ab0 (232 bytes) name=FUN_00391ab0

void FUN_00391ab0(long param_1,long param_2,uint *param_3,uint *param_4,long *param_5,long *param_6,
                 int param_7,long param_8)

{
  long lVar1;
  uint uVar2;
  long lVar3;
  byte bVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  long lVar8;
  uint uVar9;
  long lVar10;
  long lVar11;
  
  uVar7 = *param_3;
  uVar9 = *param_4;
  lVar11 = *param_5;
  lVar10 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar1 = param_8 + 1;
      param_1 = param_1 - param_8;
      do {
        bVar4 = *(byte *)(param_1 + param_8);
        uVar5 = (uint)bVar4;
        uVar6 = uVar5;
        if ((int)uVar7 < (int)(uint)bVar4) {
          uVar6 = uVar7;
        }
        lVar8 = param_8;
        if ((int)uVar7 <= (int)uVar5) {
          lVar8 = lVar11;
        }
        uVar2 = (uint)bVar4;
        if ((int)uVar5 < (int)uVar9) {
          uVar2 = uVar9;
        }
        lVar3 = param_8;
        if ((int)(uint)bVar4 <= (int)uVar9) {
          lVar3 = lVar10;
        }
        param_8 = param_8 + 1;
        lVar10 = lVar3;
        lVar11 = lVar8;
        uVar7 = uVar6;
        uVar9 = uVar2;
      } while (param_8 != lVar1 + (ulong)(param_7 - 1));
      *param_5 = lVar8;
      *param_6 = lVar3;
      *param_3 = uVar6;
      *param_4 = uVar2;
      return;
    }
  }
  else if (0 < param_7) {
    lVar1 = param_8 + 1;
    lVar8 = -param_8;
    do {
      bVar4 = *(byte *)(param_1 + lVar8 + param_8);
      if (*(char *)(param_2 + lVar8 + param_8) != '\0') {
        uVar6 = (uint)bVar4;
        if ((int)(uint)bVar4 < (int)uVar7) {
          lVar11 = param_8;
          uVar7 = uVar6;
        }
        if ((int)uVar9 < (int)uVar6) {
          lVar10 = param_8;
          uVar9 = uVar6;
        }
      }
      param_8 = param_8 + 1;
    } while (param_8 != lVar1 + (ulong)(param_7 - 1));
  }
  *param_5 = lVar11;
  *param_6 = lVar10;
  *param_3 = uVar7;
  *param_4 = uVar9;
  return;
}


==================================================================

### FUNC 00391b98 (232 bytes) name=FUN_00391b98

void FUN_00391b98(long param_1,long param_2,int *param_3,int *param_4,long *param_5,long *param_6,
                 int param_7,long param_8)

{
  long lVar1;
  int iVar2;
  long lVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  long lVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  
  iVar7 = *param_3;
  iVar9 = *param_4;
  lVar11 = *param_5;
  lVar10 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar1 = param_8 + 1;
      param_1 = param_1 - param_8;
      do {
        cVar4 = *(char *)(param_1 + param_8);
        iVar5 = (int)cVar4;
        iVar6 = iVar5;
        if (iVar7 < cVar4) {
          iVar6 = iVar7;
        }
        lVar8 = param_8;
        if (iVar7 <= iVar5) {
          lVar8 = lVar11;
        }
        iVar2 = (int)cVar4;
        if (iVar5 < iVar9) {
          iVar2 = iVar9;
        }
        lVar3 = param_8;
        if (cVar4 <= iVar9) {
          lVar3 = lVar10;
        }
        param_8 = param_8 + 1;
        lVar10 = lVar3;
        lVar11 = lVar8;
        iVar7 = iVar6;
        iVar9 = iVar2;
      } while (param_8 != lVar1 + (ulong)(param_7 - 1));
      *param_5 = lVar8;
      *param_6 = lVar3;
      *param_3 = iVar6;
      *param_4 = iVar2;
      return;
    }
  }
  else if (0 < param_7) {
    lVar1 = param_8 + 1;
    lVar8 = -param_8;
    do {
      cVar4 = *(char *)(param_1 + lVar8 + param_8);
      if (*(char *)(param_2 + lVar8 + param_8) != '\0') {
        iVar6 = (int)cVar4;
        if (cVar4 < iVar7) {
          lVar11 = param_8;
          iVar7 = iVar6;
        }
        if (iVar9 < iVar6) {
          lVar10 = param_8;
          iVar9 = iVar6;
        }
      }
      param_8 = param_8 + 1;
    } while (param_8 != lVar1 + (ulong)(param_7 - 1));
  }
  *param_5 = lVar11;
  *param_6 = lVar10;
  *param_3 = iVar7;
  *param_4 = iVar9;
  return;
}


==================================================================

### FUNC 00391c80 (216 bytes) name=FUN_00391c80

void FUN_00391c80(long param_1,long param_2,uint *param_3,uint *param_4,long *param_5,long *param_6,
                 int param_7,long param_8)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  ushort uVar4;
  long lVar5;
  uint uVar6;
  long lVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  long lVar11;
  long lVar12;
  
  uVar9 = *param_3;
  uVar10 = *param_4;
  lVar12 = *param_5;
  lVar11 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar7 = param_8 + 1;
      lVar5 = param_8 * -2;
      do {
        uVar4 = *(ushort *)(param_1 + lVar5 + param_8 * 2);
        uVar6 = (uint)uVar4;
        uVar8 = uVar6;
        if ((int)uVar9 < (int)(uint)uVar4) {
          uVar8 = uVar9;
        }
        lVar2 = param_8;
        if ((int)uVar9 <= (int)uVar6) {
          lVar2 = lVar12;
        }
        uVar1 = (uint)uVar4;
        if ((int)uVar6 < (int)uVar10) {
          uVar1 = uVar10;
        }
        lVar3 = param_8;
        if ((int)(uint)uVar4 <= (int)uVar10) {
          lVar3 = lVar11;
        }
        param_8 = param_8 + 1;
        lVar11 = lVar3;
        lVar12 = lVar2;
        uVar9 = uVar8;
        uVar10 = uVar1;
      } while (param_8 != lVar7 + (ulong)(param_7 - 1));
      *param_5 = lVar2;
      *param_6 = lVar3;
      *param_3 = uVar8;
      *param_4 = uVar1;
      return;
    }
  }
  else {
    lVar7 = 0;
    if (0 < param_7) {
      do {
        uVar4 = *(ushort *)(param_1 + lVar7 * 2);
        if (*(char *)(param_2 + lVar7) != '\0') {
          uVar8 = (uint)uVar4;
          if ((int)(uint)uVar4 < (int)uVar9) {
            lVar12 = param_8;
            uVar9 = uVar8;
          }
          if ((int)uVar10 < (int)uVar8) {
            lVar11 = param_8;
            uVar10 = uVar8;
          }
        }
        lVar7 = lVar7 + 1;
        param_8 = param_8 + 1;
      } while ((int)lVar7 < param_7);
    }
  }
  *param_5 = lVar12;
  *param_6 = lVar11;
  *param_3 = uVar9;
  *param_4 = uVar10;
  return;
}


==================================================================

### FUNC 00391d58 (216 bytes) name=FUN_00391d58

void FUN_00391d58(long param_1,long param_2,int *param_3,int *param_4,long *param_5,long *param_6,
                 int param_7,long param_8)

{
  int iVar1;
  long lVar2;
  long lVar3;
  short sVar4;
  long lVar5;
  int iVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  long lVar11;
  long lVar12;
  
  iVar9 = *param_3;
  iVar10 = *param_4;
  lVar12 = *param_5;
  lVar11 = *param_6;
  if (param_2 == 0) {
                    /* try { // try from 00391dc8 to 00491e43 has its CatchHandler @ 003909b0 */
    if (0 < param_7) {
      lVar7 = param_8 + 1;
      lVar5 = param_8 * -2;
      do {
        sVar4 = *(short *)(param_1 + lVar5 + param_8 * 2);
        iVar6 = (int)sVar4;
        iVar8 = iVar6;
        if (iVar9 < sVar4) {
          iVar8 = iVar9;
        }
        lVar2 = param_8;
        if (iVar9 <= iVar6) {
          lVar2 = lVar12;
        }
        iVar1 = (int)sVar4;
        if (iVar6 < iVar10) {
          iVar1 = iVar10;
        }
        lVar3 = param_8;
        if (sVar4 <= iVar10) {
          lVar3 = lVar11;
        }
        param_8 = param_8 + 1;
        lVar11 = lVar3;
        lVar12 = lVar2;
        iVar9 = iVar8;
        iVar10 = iVar1;
      } while (param_8 != lVar7 + (ulong)(param_7 - 1));
      *param_5 = lVar2;
      *param_6 = lVar3;
      *param_3 = iVar8;
      *param_4 = iVar1;
      return;
    }
  }
  else {
    lVar7 = 0;
    if (0 < param_7) {
      do {
        sVar4 = *(short *)(param_1 + lVar7 * 2);
        if (*(char *)(param_2 + lVar7) != '\0') {
          iVar8 = (int)sVar4;
          if (sVar4 < iVar9) {
            lVar12 = param_8;
            iVar9 = iVar8;
          }
          if (iVar10 < iVar8) {
            lVar11 = param_8;
            iVar10 = iVar8;
          }
        }
        lVar7 = lVar7 + 1;
        param_8 = param_8 + 1;
      } while ((int)lVar7 < param_7);
    }
  }
                    /* try { // try from 00391db4 to 00491db7 has its CatchHandler @ 00391ee8 */
  *param_5 = lVar12;
  *param_6 = lVar11;
  *param_3 = iVar9;
  *param_4 = iVar10;
  return;
}


==================================================================

### FUNC 00391e30 (216 bytes) name=FUN_00391e30

void FUN_00391e30(long param_1,long param_2,int *param_3,int *param_4,long *param_5,long *param_6,
                 int param_7,long param_8)

{
  int iVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  
  iVar8 = *param_3;
  iVar9 = *param_4;
  lVar11 = *param_5;
  lVar10 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar7 = param_8 + 1;
      lVar6 = param_8 * -4;
      do {
        iVar5 = *(int *)(param_1 + lVar6 + param_8 * 4);
        iVar4 = iVar5;
        if (iVar8 < iVar5) {
          iVar4 = iVar8;
        }
        lVar2 = param_8;
        if (iVar8 <= iVar5) {
          lVar2 = lVar11;
        }
        iVar1 = iVar5;
        if (iVar5 < iVar9) {
          iVar1 = iVar9;
        }
                    /* try { // try from 00391edc to 00491edf has its CatchHandler @ 003909b0 */
        lVar3 = param_8;
        if (iVar5 <= iVar9) {
          lVar3 = lVar10;
        }
                    /* catch() { ... } // from try @ 003917b8 with catch @ 00391ee0
                       catch() { ... } // from try @ 00391814 with catch @ 00391ee0 */
        param_8 = param_8 + 1;
        lVar10 = lVar3;
        lVar11 = lVar2;
        iVar8 = iVar4;
        iVar9 = iVar1;
                    /* catch() { ... } // from try @ 00390a8c with catch @ 00391ee8
                       catch() { ... } // from try @ 00390b8c with catch @ 00391ee8
                       catch() { ... } // from try @ 00390c74 with catch @ 00391ee8
                       catch() { ... } // from try @ 00391558 with catch @ 00391ee8
                       catch() { ... } // from try @ 00391724 with catch @ 00391ee8
                       catch() { ... } // from try @ 00391db4 with catch @ 00391ee8
                       catch() { ... } // from try @ 00391e4c with catch @ 00391ee8 */
                    /* catch() { ... } // from try @ 00390d7c with catch @ 00391ef0 */
      } while (param_8 != lVar7 + (ulong)(param_7 - 1));
      *param_5 = lVar2;
      *param_6 = lVar3;
      *param_3 = iVar4;
                    /* try { // try from 00391f00 to 00491f03 has its CatchHandler @ 003909b0 */
      *param_4 = iVar1;
                    /* catch() { ... } // from try @ 00390b08 with catch @ 00391f04
                       catch() { ... } // from try @ 00390f50 with catch @ 00391f04
                       catch() { ... } // from try @ 00391768 with catch @ 00391f04 */
      return;
    }
  }
  else {
    lVar7 = 0;
                    /* try { // try from 00391e4c to 00491e4f has its CatchHandler @ 00391ee8 */
    if (0 < param_7) {
      do {
        iVar4 = *(int *)(param_1 + lVar7 * 4);
        if (*(char *)(param_2 + lVar7) != '\0') {
          if (iVar4 < iVar8) {
            lVar11 = param_8;
            iVar8 = iVar4;
          }
          if (iVar9 < iVar4) {
                    /* catch() { ... } // from try @ 0039180c with catch @ 00391e74 */
            lVar10 = param_8;
            iVar9 = iVar4;
          }
        }
        lVar7 = lVar7 + 1;
        param_8 = param_8 + 1;
      } while ((int)lVar7 < param_7);
    }
  }
  *param_5 = lVar11;
  *param_6 = lVar10;
  *param_3 = iVar8;
  *param_4 = iVar9;
  return;
}


==================================================================

### FUNC 00391f08 (236 bytes) name=FUN_00391f08

void FUN_00391f08(long param_1,long param_2,float *param_3,float *param_4,long *param_5,
                 long *param_6,int param_7,long param_8)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  
  fVar10 = *param_3;
                    /* catch() { ... } // from try @ 003910d8 with catch @ 00391f0c */
  lVar6 = *param_5;
  fVar9 = *param_4;
  lVar5 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar4 = param_8 + 1;
      lVar3 = param_8 * -4;
      do {
        fVar8 = *(float *)(param_1 + lVar3 + param_8 * 4);
        lVar1 = param_8;
        fVar7 = fVar8;
        if (fVar10 <= fVar8) {
          lVar1 = lVar6;
          fVar7 = fVar10;
        }
        fVar10 = fVar7;
        lVar2 = param_8;
        if (fVar8 <= fVar9) {
          lVar2 = lVar5;
          fVar8 = fVar9;
        }
        fVar9 = fVar8;
        param_8 = param_8 + 1;
        lVar5 = lVar2;
        lVar6 = lVar1;
      } while (param_8 != lVar4 + (ulong)(param_7 - 1));
      *param_5 = lVar1;
      *param_6 = lVar2;
      *param_3 = fVar10;
      *param_4 = fVar9;
      return;
    }
  }
  else {
    lVar4 = 0;
    if (0 < param_7) {
      do {
        fVar7 = *(float *)(param_1 + lVar4 * 4);
        if (*(char *)(param_2 + lVar4) != '\0') {
          if (fVar7 < fVar10) {
                    /* catch() { ... } // from try @ 00391fac with catch @ 00391f40
                       catch() { ... } // from try @ 00392260 with catch @ 00391f40
                       catch() { ... } // from try @ 003924d8 with catch @ 00391f40
                       catch() { ... } // from try @ 00392540 with catch @ 00391f40
                       catch() { ... } // from try @ 00392584 with catch @ 00391f40
                       catch() { ... } // from try @ 0039272c with catch @ 00391f40
                       catch() { ... } // from try @ 00392798 with catch @ 00391f40
                       catch() { ... } // from try @ 003927e8 with catch @ 00391f40 */
            lVar6 = param_8;
            fVar10 = fVar7;
          }
          if (fVar9 < fVar7) {
            lVar5 = param_8;
            fVar9 = fVar7;
          }
        }
        lVar4 = lVar4 + 1;
        param_8 = param_8 + 1;
      } while ((int)lVar4 < param_7);
    }
  }
  *param_5 = lVar6;
  *param_6 = lVar5;
  *param_3 = fVar10;
  *param_4 = fVar9;
  return;
}


==================================================================

### FUNC 00391ff4 (236 bytes) name=FUN_00391ff4

void FUN_00391ff4(long param_1,long param_2,double *param_3,double *param_4,long *param_5,
                 long *param_6,int param_7,long param_8)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  double dVar7;
  double dVar8;
  double dVar9;
  double dVar10;
  
  dVar10 = *param_3;
                    /* try { // try from 00391ff8 to 00491ffb has its CatchHandler @ 003927f4 */
  lVar6 = *param_5;
  dVar9 = *param_4;
  lVar5 = *param_6;
  if (param_2 == 0) {
    if (0 < param_7) {
      lVar4 = param_8 + 1;
      lVar3 = param_8 * -8;
      do {
        dVar8 = *(double *)(param_1 + lVar3 + param_8 * 8);
        lVar1 = param_8;
        dVar7 = dVar8;
        if (dVar10 <= dVar8) {
          lVar1 = lVar6;
          dVar7 = dVar10;
        }
        dVar10 = dVar7;
        lVar2 = param_8;
        if (dVar8 <= dVar9) {
          lVar2 = lVar5;
          dVar8 = dVar9;
        }
        dVar9 = dVar8;
        param_8 = param_8 + 1;
        lVar5 = lVar2;
        lVar6 = lVar1;
      } while (param_8 != lVar4 + (ulong)(param_7 - 1));
      *param_5 = lVar1;
      *param_6 = lVar2;
      *param_3 = dVar10;
      *param_4 = dVar9;
      return;
    }
  }
  else {
    lVar4 = 0;
    if (0 < param_7) {
      do {
        dVar7 = *(double *)(param_1 + lVar4 * 8);
        if (*(char *)(param_2 + lVar4) != '\0') {
          if (dVar7 < dVar10) {
            lVar6 = param_8;
            dVar10 = dVar7;
          }
          if (dVar9 < dVar7) {
            lVar5 = param_8;
            dVar9 = dVar7;
          }
        }
        lVar4 = lVar4 + 1;
                    /* try { // try from 00392044 to 00492047 has its CatchHandler @ 003927fc */
        param_8 = param_8 + 1;
                    /* try { // try from 0039204c to 004920a7 has its CatchHandler @ 003927f4 */
      } while ((int)lVar4 < param_7);
    }
  }
  *param_5 = lVar6;
  *param_6 = lVar5;
  *param_3 = dVar10;
  *param_4 = dVar9;
  return;
}


==================================================================

### FUNC 003920e0 (1868 bytes) name=FUN_003920e0

undefined8 FUN_003920e0(byte *param_1,long param_2,uint *param_3,int param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  ulong uVar10;
  uint uVar11;
  byte *pbVar12;
  uint uVar13;
  uint uVar14;
  ulong uVar15;
  long lVar16;
  undefined1 uVar17;
  undefined1 uVar18;
  undefined1 uVar19;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  uint uVar25;
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  
                    /* try { // try from 003920e0 to 004920e3 has its CatchHandler @ 0039280c */
  uVar25 = *param_3;
  if (param_2 != 0) {
                    /* try { // try from 003920e8 to 00492127 has its CatchHandler @ 003927f4 */
    if (0 < param_4) {
      uVar11 = -(int)param_1;
      lVar16 = 0;
      do {
        if ((*(char *)(param_2 + lVar16) != '\0') && (0 < (int)param_5)) {
          uVar14 = uVar11 & 0xf;
          if (param_5 < (uVar11 & 0xf)) {
            uVar14 = param_5;
          }
          if (param_5 < 0x12) {
            uVar14 = param_5;
          }
          uVar13 = uVar14;
          if (uVar14 != 0) {
            if ((int)uVar25 < (int)(uint)*param_1) {
              uVar25 = (uint)*param_1;
            }
            if (uVar14 != 1) {
              if ((int)uVar25 < (int)(uint)param_1[1]) {
                uVar25 = (uint)param_1[1];
              }
                    /* try { // try from 0039214c to 0049214f has its CatchHandler @ 00392820 */
              if (uVar14 != 2) {
                if ((int)uVar25 < (int)(uint)param_1[2]) {
                  uVar25 = (uint)param_1[2];
                }
                if (uVar14 != 3) {
                  if ((int)uVar25 < (int)(uint)param_1[3]) {
                    uVar25 = (uint)param_1[3];
                  }
                  if (uVar14 != 4) {
                    if ((int)uVar25 < (int)(uint)param_1[4]) {
                      uVar25 = (uint)param_1[4];
                    }
                    if (uVar14 != 5) {
                      if ((int)uVar25 < (int)(uint)param_1[5]) {
                        uVar25 = (uint)param_1[5];
                      }
                      if (uVar14 != 6) {
                        if ((int)uVar25 < (int)(uint)param_1[6]) {
                          uVar25 = (uint)param_1[6];
                        }
                        if (uVar14 == 7) {
                          uVar13 = 7;
                        }
                        else {
                    /* try { // try from 003921c0 to 004921c3 has its CatchHandler @ 003927f4 */
                          if ((int)uVar25 < (int)(uint)param_1[7]) {
                            uVar25 = (uint)param_1[7];
                          }
                          if (uVar14 != 8) {
                            if ((int)uVar25 < (int)(uint)param_1[8]) {
                              uVar25 = (uint)param_1[8];
                            }
                            if (uVar14 != 9) {
                              if ((int)uVar25 < (int)(uint)param_1[9]) {
                                uVar25 = (uint)param_1[9];
                              }
                              if (uVar14 != 10) {
                                if ((int)uVar25 < (int)(uint)param_1[10]) {
                                  uVar25 = (uint)param_1[10];
                                }
                                if (uVar14 != 0xb) {
                                  if ((int)uVar25 < (int)(uint)param_1[0xb]) {
                                    uVar25 = (uint)param_1[0xb];
                                  }
                                  if (uVar14 != 0xc) {
                                    if ((int)uVar25 < (int)(uint)param_1[0xc]) {
                                      uVar25 = (uint)param_1[0xc];
                                    }
                                    if (uVar14 != 0xd) {
                    /* try { // try from 00392234 to 00492237 has its CatchHandler @ 003927ec */
                                      if ((int)uVar25 < (int)(uint)param_1[0xd]) {
                                        uVar25 = (uint)param_1[0xd];
                                      }
                                      if (uVar14 != 0xe) {
                                        if ((int)uVar25 < (int)(uint)param_1[0xe]) {
                                          uVar25 = (uint)param_1[0xe];
                                        }
                                        if (uVar14 != 0xf) {
                    /* try { // try from 00392260 to 004922b3 has its CatchHandler @ 00391f40 */
                                          if ((int)uVar25 < (int)(uint)param_1[0xf]) {
                                            uVar25 = (uint)param_1[0xf];
                                          }
                                          if (uVar14 == 0x11) {
                                            if ((int)uVar25 < (int)(uint)param_1[0x10]) {
                                              uVar25 = (uint)param_1[0x10];
                                            }
                                          }
                                          else {
                                            uVar13 = 0x10;
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (param_5 == uVar14) goto LAB_0039245c;
          }
          uVar1 = ((param_5 - uVar14) - 0x10 >> 4) + 1;
          iVar9 = uVar1 * 0x10;
          if (0xe < (param_5 - 1) - uVar14) {
            auVar26._4_4_ = uVar25;
            auVar26._0_4_ = uVar25;
            auVar26._8_4_ = uVar25;
            auVar26._12_4_ = uVar25;
            uVar25 = 0;
            pbVar12 = param_1 + uVar14;
            do {
              uVar8 = *(undefined8 *)(pbVar12 + 8);
              uVar7 = *(undefined8 *)pbVar12;
              uVar25 = uVar25 + 1;
              uVar17 = (undefined1)((ulong)uVar7 >> 8);
              uVar18 = (undefined1)((ulong)uVar8 >> 8);
              uVar19 = (undefined1)((ulong)uVar8 >> 0x28);
              auVar23._1_3_ = 0;
              auVar23[0] = (byte)((ulong)uVar7 >> 0x20);
              auVar22._6_2_ = 0;
              auVar22._0_6_ =
                   (uint6)CONCAT14(uVar17,(uint)CONCAT12(uVar17,(ushort)(byte)uVar7)) &
                   0xffff0000ffff;
              auVar22[8] = (char)((ulong)uVar7 >> 0x10);
              auVar22._9_3_ = 0;
              auVar22[0xc] = (char)((ulong)uVar7 >> 0x18);
              auVar22._13_3_ = 0;
              auVar20._6_2_ = 0;
              auVar20._0_6_ =
                   (uint6)CONCAT14(uVar18,(uint)CONCAT12(uVar18,(ushort)(byte)uVar8)) &
                   0xffff0000ffff;
              auVar20[8] = (char)((ulong)uVar8 >> 0x10);
              auVar20._9_3_ = 0;
              auVar20[0xc] = (char)((ulong)uVar8 >> 0x18);
              auVar20._13_3_ = 0;
              auVar23[4] = (char)((ulong)uVar7 >> 0x28);
              auVar23._5_3_ = 0;
              auVar23[8] = (char)((ulong)uVar7 >> 0x30);
              auVar23._9_3_ = 0;
              auVar23[0xc] = (char)((ulong)uVar7 >> 0x38);
              auVar23._13_3_ = 0;
                    /* try { // try from 003922d8 to 004923ab has its CatchHandler @ 003927f4 */
              auVar23 = NEON_smax(auVar23,auVar22,4);
              auVar23 = NEON_smax(auVar23,auVar20,4);
              auVar5._6_2_ = 0;
              auVar5._0_6_ = (uint6)CONCAT14(uVar19,(uint)CONCAT12(uVar19,(ushort)(byte)((ulong)
                                                  uVar8 >> 0x20))) & 0xffff0000ffff;
              auVar5[8] = (char)((ulong)uVar8 >> 0x30);
              auVar5._9_3_ = 0;
              auVar5[0xc] = (char)((ulong)uVar8 >> 0x38);
              auVar5._13_3_ = 0;
              auVar23 = NEON_smax(auVar23,auVar5,4);
              auVar26 = NEON_smax(auVar26,auVar23,4);
              pbVar12 = pbVar12 + 0x10;
            } while (uVar25 < uVar1);
            uVar25 = NEON_smaxv(auVar26,4);
            uVar13 = uVar13 + iVar9;
            if (param_5 - uVar14 == iVar9) goto LAB_0039245c;
          }
          if ((int)uVar25 < (int)(uint)param_1[(int)uVar13]) {
            uVar25 = (uint)param_1[(int)uVar13];
          }
          if ((int)(uVar13 + 1) < (int)param_5) {
            if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 1)]) {
              uVar25 = (uint)param_1[(int)(uVar13 + 1)];
            }
            if ((int)(uVar13 + 2) < (int)param_5) {
              if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 2)]) {
                uVar25 = (uint)param_1[(int)(uVar13 + 2)];
              }
              if ((int)(uVar13 + 3) < (int)param_5) {
                if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 3)]) {
                  uVar25 = (uint)param_1[(int)(uVar13 + 3)];
                }
                if ((int)(uVar13 + 4) < (int)param_5) {
                  if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 4)]) {
                    uVar25 = (uint)param_1[(int)(uVar13 + 4)];
                  }
                  if ((int)(uVar13 + 5) < (int)param_5) {
                    if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 5)]) {
                      uVar25 = (uint)param_1[(int)(uVar13 + 5)];
                    }
                    if ((int)(uVar13 + 6) < (int)param_5) {
                      if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 6)]) {
                        uVar25 = (uint)param_1[(int)(uVar13 + 6)];
                      }
                      if ((int)(uVar13 + 7) < (int)param_5) {
                        if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 7)]) {
                          uVar25 = (uint)param_1[(int)(uVar13 + 7)];
                        }
                        if ((int)(uVar13 + 8) < (int)param_5) {
                          if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 8)]) {
                            uVar25 = (uint)param_1[(int)(uVar13 + 8)];
                          }
                          if ((int)(uVar13 + 9) < (int)param_5) {
                            if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 9)]) {
                              uVar25 = (uint)param_1[(int)(uVar13 + 9)];
                            }
                            if ((int)(uVar13 + 10) < (int)param_5) {
                    /* try { // try from 003923fc to 004923ff has its CatchHandler @ 0039279c */
                              if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 10)]) {
                                uVar25 = (uint)param_1[(int)(uVar13 + 10)];
                              }
                    /* try { // try from 00392404 to 0049243b has its CatchHandler @ 003927f4 */
                              if ((int)(uVar13 + 0xb) < (int)param_5) {
                                if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 0xb)]) {
                                  uVar25 = (uint)param_1[(int)(uVar13 + 0xb)];
                                }
                                if ((int)(uVar13 + 0xc) < (int)param_5) {
                                  if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 0xc)]) {
                                    uVar25 = (uint)param_1[(int)(uVar13 + 0xc)];
                                  }
                                  if ((int)(uVar13 + 0xd) < (int)param_5) {
                                    if ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 0xd)]) {
                                      uVar25 = (uint)param_1[(int)(uVar13 + 0xd)];
                                    }
                                    if (((int)(uVar13 + 0xe) < (int)param_5) &&
                                       ((int)uVar25 < (int)(uint)param_1[(int)(uVar13 + 0xe)])) {
                                      uVar25 = (uint)param_1[(int)(uVar13 + 0xe)];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039245c:
        lVar16 = lVar16 + 1;
        param_1 = param_1 + (int)param_5;
        uVar11 = uVar11 - param_5;
      } while ((int)lVar16 < param_4);
    }
    *param_3 = uVar25;
    return 0;
  }
  param_5 = param_4 * param_5;
  uVar11 = 0;
  if ((int)param_5 < 1) goto LAB_003927ec;
                    /* try { // try from 003924ac to 004924af has its CatchHandler @ 003927ec */
  uVar14 = -(int)param_1 & 0xf;
  if (param_5 < uVar14) {
    uVar14 = param_5;
  }
  uVar15 = (ulong)uVar14;
  if ((int)param_5 < 0x12) {
    uVar15 = (ulong)param_5;
LAB_003924c4:
    uVar14 = (uint)uVar15;
    uVar11 = (uint)*param_1;
    uVar10 = uVar15;
    if (uVar14 != 1) {
                    /* try { // try from 003924d8 to 004924db has its CatchHandler @ 00391f40 */
      if (*param_1 < param_1[1]) {
        uVar11 = (uint)param_1[1];
      }
      if (uVar14 != 2) {
        if (uVar11 < param_1[2]) {
          uVar11 = (uint)param_1[2];
        }
        if (uVar14 != 3) {
          if (uVar11 < param_1[3]) {
            uVar11 = (uint)param_1[3];
          }
          if (uVar14 != 4) {
            if (uVar11 < param_1[4]) {
              uVar11 = (uint)param_1[4];
            }
            if (uVar14 != 5) {
                    /* try { // try from 00392520 to 00492523 has its CatchHandler @ 003927f4 */
              if (uVar11 < param_1[5]) {
                uVar11 = (uint)param_1[5];
              }
              if (uVar14 != 6) {
                if (uVar11 < param_1[6]) {
                  uVar11 = (uint)param_1[6];
                }
                    /* try { // try from 00392540 to 00492543 has its CatchHandler @ 00391f40 */
                if (uVar14 != 7) {
                  if (uVar11 < param_1[7]) {
                    uVar11 = (uint)param_1[7];
                  }
                  if (uVar14 != 8) {
                    if (uVar11 < param_1[8]) {
                      uVar11 = (uint)param_1[8];
                    }
                    if (uVar14 != 9) {
                      if (uVar11 < param_1[9]) {
                        uVar11 = (uint)param_1[9];
                      }
                    /* try { // try from 0039257c to 0049257f has its CatchHandler @ 00392788 */
                      if (uVar14 == 10) {
                        uVar10 = 10;
                      }
                      else {
                    /* try { // try from 00392584 to 004925ef has its CatchHandler @ 00391f40 */
                        if (uVar11 < param_1[10]) {
                          uVar11 = (uint)param_1[10];
                        }
                        if (uVar14 != 0xb) {
                          if (uVar11 < param_1[0xb]) {
                            uVar11 = (uint)param_1[0xb];
                          }
                          if (uVar14 != 0xc) {
                            if (uVar11 < param_1[0xc]) {
                              uVar11 = (uint)param_1[0xc];
                            }
                            if (uVar14 != 0xd) {
                              if (uVar11 < param_1[0xd]) {
                                uVar11 = (uint)param_1[0xd];
                              }
                              if (uVar14 != 0xe) {
                                if (uVar11 < param_1[0xe]) {
                                  uVar11 = (uint)param_1[0xe];
                                }
                                if (uVar14 != 0xf) {
                                  if (uVar11 < param_1[0xf]) {
                                    uVar11 = (uint)param_1[0xf];
                                  }
                                  if (uVar14 == 0x11) {
                                    if (uVar11 < param_1[0x10]) {
                                      uVar11 = (uint)param_1[0x10];
                                    }
                                  }
                                  else {
                                    uVar10 = 0x10;
                    /* catch() { ... } // from try @ 0039214c with catch @ 00392820 */
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    iVar9 = (int)uVar10;
    if (uVar14 == param_5) goto LAB_003927ec;
  }
  else {
                    /* catch() { ... } // from try @ 003920e0 with catch @ 0039280c */
    iVar9 = 0;
    if (uVar14 != 0) goto LAB_003924c4;
  }
  iVar3 = param_5 - (int)uVar15;
  uVar14 = (iVar3 - 0x10U >> 4) + 1;
  iVar2 = uVar14 * 0x10;
  if (0xe < (param_5 - 1) - (int)uVar15) {
    auVar27._4_4_ = uVar11;
    auVar27._0_4_ = uVar11;
    auVar27._8_4_ = uVar11;
    auVar27._12_4_ = uVar11;
    uVar11 = 0;
    pbVar12 = param_1 + uVar15;
    do {
      uVar8 = *(undefined8 *)(pbVar12 + 8);
      uVar7 = *(undefined8 *)pbVar12;
      uVar11 = uVar11 + 1;
      uVar17 = (undefined1)((ulong)uVar7 >> 8);
      uVar18 = (undefined1)((ulong)uVar8 >> 8);
      uVar19 = (undefined1)((ulong)uVar8 >> 0x28);
      auVar4._1_3_ = 0;
      auVar4[0] = (byte)((ulong)uVar7 >> 0x20);
      auVar24._6_2_ = 0;
      auVar24._0_6_ =
           (uint6)CONCAT14(uVar17,(uint)CONCAT12(uVar17,(ushort)(byte)uVar7)) & 0xffff0000ffff;
      auVar24[8] = (char)((ulong)uVar7 >> 0x10);
      auVar24._9_3_ = 0;
      auVar24[0xc] = (char)((ulong)uVar7 >> 0x18);
      auVar24._13_3_ = 0;
      auVar21._6_2_ = 0;
      auVar21._0_6_ =
           (uint6)CONCAT14(uVar18,(uint)CONCAT12(uVar18,(ushort)(byte)uVar8)) & 0xffff0000ffff;
      auVar21[8] = (char)((ulong)uVar8 >> 0x10);
      auVar21._9_3_ = 0;
      auVar21[0xc] = (char)((ulong)uVar8 >> 0x18);
      auVar21._13_3_ = 0;
      auVar4[4] = (char)((ulong)uVar7 >> 0x28);
      auVar4._5_3_ = 0;
      auVar4[8] = (char)((ulong)uVar7 >> 0x30);
      auVar4._9_3_ = 0;
      auVar4[0xc] = (char)((ulong)uVar7 >> 0x38);
      auVar4._13_3_ = 0;
      auVar26 = NEON_smax(auVar4,auVar24,4);
      auVar26 = NEON_smax(auVar26,auVar21,4);
      auVar6._6_2_ = 0;
      auVar6._0_6_ = (uint6)CONCAT14(uVar19,(uint)CONCAT12(uVar19,(ushort)(byte)((ulong)uVar8 >>
                                                                                0x20))) &
                     0xffff0000ffff;
      auVar6[8] = (char)((ulong)uVar8 >> 0x30);
      auVar6._9_3_ = 0;
      auVar6[0xc] = (char)((ulong)uVar8 >> 0x38);
      auVar6._13_3_ = 0;
      auVar26 = NEON_smax(auVar26,auVar6,4);
      auVar27 = NEON_smax(auVar27,auVar26,4);
      pbVar12 = pbVar12 + 0x10;
    } while (uVar11 < uVar14);
    uVar11 = NEON_smaxv(auVar27,4);
    iVar9 = iVar9 + iVar2;
    if (iVar2 == iVar3) goto LAB_003927ec;
  }
  iVar2 = iVar9 + 1;
  if ((int)uVar11 < (int)(uint)param_1[iVar9]) {
    uVar11 = (uint)param_1[iVar9];
  }
  if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
    iVar3 = iVar9 + 2;
    if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
      uVar11 = (uint)param_1[iVar2];
    }
    if (param_5 - iVar3 != 0 && iVar3 <= (int)param_5) {
      iVar2 = iVar9 + 3;
      if ((int)uVar11 < (int)(uint)param_1[iVar3]) {
        uVar11 = (uint)param_1[iVar3];
      }
      if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
        iVar3 = iVar9 + 4;
        if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
          uVar11 = (uint)param_1[iVar2];
        }
                    /* try { // try from 003926e8 to 004926f7 has its CatchHandler @ 003927ec */
        if (param_5 - iVar3 != 0 && iVar3 <= (int)param_5) {
          iVar2 = iVar9 + 5;
          if ((int)uVar11 < (int)(uint)param_1[iVar3]) {
            uVar11 = (uint)param_1[iVar3];
          }
          if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
            iVar3 = iVar9 + 6;
            if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
              uVar11 = (uint)param_1[iVar2];
            }
                    /* try { // try from 00392718 to 0049271b has its CatchHandler @ 003927f4 */
            if (param_5 - iVar3 != 0 && iVar3 <= (int)param_5) {
              iVar2 = iVar9 + 7;
                    /* try { // try from 0039272c to 00492753 has its CatchHandler @ 00391f40 */
              if ((int)uVar11 < (int)(uint)param_1[iVar3]) {
                uVar11 = (uint)param_1[iVar3];
              }
              if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
                  uVar11 = (uint)param_1[iVar2];
                }
                if (iVar9 + 8 < (int)param_5) {
                  iVar2 = iVar9 + 9;
                  if ((int)uVar11 < (int)(uint)param_1[iVar9 + 8]) {
                    uVar11 = (uint)param_1[iVar9 + 8];
                  }
                  if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                    iVar3 = iVar9 + 10;
                    if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
                      uVar11 = (uint)param_1[iVar2];
                    }
                    if (param_5 - iVar3 != 0 && iVar3 <= (int)param_5) {
                      iVar2 = iVar9 + 0xb;
                    /* catch() { ... } // from try @ 0039257c with catch @ 00392788 */
                      if ((int)uVar11 < (int)(uint)param_1[iVar3]) {
                        uVar11 = (uint)param_1[iVar3];
                      }
                      if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                    /* try { // try from 00392798 to 0049279b has its CatchHandler @ 00391f40 */
                    /* catch() { ... } // from try @ 003923fc with catch @ 0039279c */
                        iVar3 = iVar9 + 0xc;
                        if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
                          uVar11 = (uint)param_1[iVar2];
                        }
                        if (param_5 - iVar3 != 0 && iVar3 <= (int)param_5) {
                          iVar2 = iVar9 + 0xd;
                          if ((int)uVar11 < (int)(uint)param_1[iVar3]) {
                            uVar11 = (uint)param_1[iVar3];
                          }
                          if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                            iVar9 = iVar9 + 0xe;
                            if ((int)uVar11 < (int)(uint)param_1[iVar2]) {
                              uVar11 = (uint)param_1[iVar2];
                            }
                    /* try { // try from 003927e8 to 004927eb has its CatchHandler @ 00391f40 */
                            if ((param_5 - iVar9 != 0 && iVar9 <= (int)param_5) &&
                               ((int)uVar11 < (int)(uint)param_1[iVar9])) {
                              uVar11 = (uint)param_1[iVar9];
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_003927ec:
                    /* catch() { ... } // from try @ 00391fc8 with catch @ 003927ec
                       catch() { ... } // from try @ 00392234 with catch @ 003927ec
                       catch() { ... } // from try @ 003924ac with catch @ 003927ec
                       catch() { ... } // from try @ 003926e8 with catch @ 003927ec */
                    /* catch() { ... } // from try @ 00391ff8 with catch @ 003927f4
                       catch() { ... } // from try @ 0039204c with catch @ 003927f4
                       catch() { ... } // from try @ 003920e8 with catch @ 003927f4
                       catch() { ... } // from try @ 003921c0 with catch @ 003927f4
                       catch() { ... } // from try @ 003922d8 with catch @ 003927f4
                       catch() { ... } // from try @ 00392404 with catch @ 003927f4
                       catch() { ... } // from try @ 00392520 with catch @ 003927f4
                       catch() { ... } // from try @ 00392718 with catch @ 003927f4 */
  if ((int)uVar25 < (int)uVar11) {
    uVar25 = uVar11;
  }
  *param_3 = uVar25;
                    /* catch() { ... } // from try @ 00392044 with catch @ 003927fc */
  return 0;
}


==================================================================

### FUNC 0039282c (1120 bytes) name=FUN_0039282c

undefined8 FUN_0039282c(ushort *param_1,long param_2,uint *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  ushort uVar2;
  undefined1 auVar3 [16];
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  ushort *puVar8;
  ulong uVar9;
  long lVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  uint uVar15;
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  
  uVar15 = *param_3;
  uVar6 = (uint)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar10 = 0;
                    /* catch() { ... } // from try @ 00392890 with catch @ 00392844
                       catch() { ... } // from try @ 00392a24 with catch @ 00392844
                       catch() { ... } // from try @ 00392ab4 with catch @ 00392844 */
      do {
        if ((*(char *)(param_2 + lVar10) != '\0') && (0 < (int)uVar6)) {
          uVar5 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
          if (uVar6 < uVar5) {
            uVar5 = uVar6;
          }
          if (uVar6 < 10) {
            uVar5 = uVar6;
          }
          if (uVar5 == 0) {
            uVar11 = 0;
          }
          else {
            if ((int)uVar15 < (int)(uint)*param_1) {
              uVar15 = (uint)*param_1;
            }
            if (uVar5 == 1) {
LAB_00392a50:
              uVar11 = (ulong)uVar5;
            }
            else {
                    /* try { // try from 00392890 to 00492893 has its CatchHandler @ 00392844 */
              if ((int)uVar15 < (int)(uint)param_1[1]) {
                uVar15 = (uint)param_1[1];
              }
              if (uVar5 == 2) goto LAB_00392a50;
              if ((int)uVar15 < (int)(uint)param_1[2]) {
                uVar15 = (uint)param_1[2];
              }
              if (uVar5 == 3) goto LAB_00392a50;
              if ((int)uVar15 < (int)(uint)param_1[3]) {
                uVar15 = (uint)param_1[3];
              }
              if (uVar5 == 4) goto LAB_00392a50;
              if ((int)uVar15 < (int)(uint)param_1[4]) {
                uVar15 = (uint)param_1[4];
              }
              if (uVar5 == 5) goto LAB_00392a50;
              if ((int)uVar15 < (int)(uint)param_1[5]) {
                uVar15 = (uint)param_1[5];
              }
              if (uVar5 == 6) goto LAB_00392a50;
              if ((int)uVar15 < (int)(uint)param_1[6]) {
                uVar15 = (uint)param_1[6];
              }
              if (uVar5 == 7) {
                uVar11 = 7;
              }
              else {
                if ((int)uVar15 < (int)(uint)param_1[7]) {
                  uVar15 = (uint)param_1[7];
                }
                if (uVar5 == 9) {
                    /* try { // try from 00392918 to 0049291b has its CatchHandler @ 00392a90 */
                  uVar11 = 9;
                  if ((int)uVar15 < (int)(uint)param_1[8]) {
                    uVar15 = (uint)param_1[8];
                  }
                }
                else {
                  uVar11 = 8;
                }
              }
            }
            if (uVar6 == uVar5) goto LAB_00392a34;
          }
                    /* try { // try from 0039293c to 0049293f has its CatchHandler @ 00392ab8 */
          uVar7 = ((uVar6 - uVar5) - 8 >> 3) + 1;
          iVar4 = uVar7 * 8;
          if (6 < (uVar6 - 1) - uVar5) {
            auVar16._4_4_ = uVar15;
            auVar16._0_4_ = uVar15;
            auVar16._8_4_ = uVar15;
            auVar16._12_4_ = uVar15;
            uVar15 = 0;
            puVar8 = param_1 + uVar5;
            do {
              uVar15 = uVar15 + 1;
              auVar13._2_2_ = 0;
              auVar13._0_2_ = puVar8[4];
              auVar12._2_2_ = 0;
              auVar12._0_2_ = *puVar8;
              auVar12._4_2_ = puVar8[1];
              auVar12._6_2_ = 0;
              auVar12._8_2_ = puVar8[2];
              auVar12._10_2_ = 0;
              auVar12._12_2_ = puVar8[3];
              auVar12._14_2_ = 0;
              auVar13._4_2_ = puVar8[5];
              auVar13._6_2_ = 0;
              auVar13._8_2_ = puVar8[6];
              auVar13._10_2_ = 0;
              auVar13._12_2_ = puVar8[7];
              auVar13._14_2_ = 0;
              auVar13 = NEON_smax(auVar13,auVar12,4);
              auVar16 = NEON_smax(auVar16,auVar13,4);
              puVar8 = puVar8 + 8;
            } while (uVar15 < uVar7);
            uVar15 = NEON_smaxv(auVar16,4);
            uVar11 = (ulong)(uint)((int)uVar11 + iVar4);
            if (uVar6 - uVar5 == iVar4) goto LAB_00392a34;
          }
          uVar9 = -(uVar11 >> 0x1f) & 0xfffffffe00000000 | uVar11 << 1;
          iVar4 = (int)uVar11;
          if ((int)uVar15 < (int)(uint)*(ushort *)((long)param_1 + uVar9)) {
            uVar15 = (uint)*(ushort *)((long)param_1 + uVar9);
          }
          if (iVar4 + 1 < (int)uVar6) {
                    /* try { // try from 003929b0 to 004929b3 has its CatchHandler @ 00392a90 */
            uVar2 = *(ushort *)((long)param_1 + uVar9 + 2);
            if ((int)uVar15 < (int)(uint)uVar2) {
              uVar15 = (uint)uVar2;
            }
            if (iVar4 + 2 < (int)uVar6) {
              uVar2 = *(ushort *)((long)param_1 + uVar9 + 4);
              if ((int)uVar15 < (int)(uint)uVar2) {
                uVar15 = (uint)uVar2;
              }
              if (iVar4 + 3 < (int)uVar6) {
                uVar2 = *(ushort *)((long)param_1 + uVar9 + 6);
                if ((int)uVar15 < (int)(uint)uVar2) {
                  uVar15 = (uint)uVar2;
                }
                if (iVar4 + 4 < (int)uVar6) {
                  uVar2 = *(ushort *)((long)param_1 + uVar9 + 8);
                  if ((int)uVar15 < (int)(uint)uVar2) {
                    uVar15 = (uint)uVar2;
                  }
                  if (iVar4 + 5 < (int)uVar6) {
                    uVar2 = *(ushort *)((long)param_1 + uVar9 + 10);
                    if ((int)uVar15 < (int)(uint)uVar2) {
                      uVar15 = (uint)uVar2;
                    }
                    /* try { // try from 00392a24 to 00492a43 has its CatchHandler @ 00392844 */
                    if ((iVar4 + 6 < (int)uVar6) &&
                       (uVar2 = *(ushort *)((long)param_1 + uVar9 + 0xc),
                       (int)uVar15 < (int)(uint)uVar2)) {
                      uVar15 = (uint)uVar2;
                    }
                  }
                }
              }
            }
          }
        }
LAB_00392a34:
        lVar10 = lVar10 + 1;
        param_1 = (ushort *)
                  ((long)param_1 +
                  (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1));
      } while ((int)lVar10 < param_4);
    }
    *param_3 = uVar15;
                    /* try { // try from 00392a4c to 00492a8b has its CatchHandler @ 00392a90 */
    return 0;
  }
  uVar6 = param_4 * uVar6;
  uVar5 = 0;
  if ((int)uVar6 < 1) goto LAB_00392c54;
  uVar7 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  if (uVar6 < uVar7) {
    uVar7 = uVar6;
  }
                    /* catch() { ... } // from try @ 00392918 with catch @ 00392a90
                       catch() { ... } // from try @ 003929b0 with catch @ 00392a90
                       catch() { ... } // from try @ 00392a4c with catch @ 00392a90 */
  uVar1 = uVar6;
  if (((int)uVar6 < 10) || (uVar11 = 0, uVar1 = uVar7, uVar7 != 0)) {
    uVar7 = uVar1;
    uVar5 = (uint)*param_1;
    if (uVar7 == 1) {
LAB_00392c68:
      uVar11 = (ulong)uVar7;
    }
    else {
      if (*param_1 < param_1[1]) {
        uVar5 = (uint)param_1[1];
      }
                    /* try { // try from 00392ab4 to 00492ab7 has its CatchHandler @ 00392844 */
                    /* catch() { ... } // from try @ 0039293c with catch @ 00392ab8 */
      if (uVar7 == 2) goto LAB_00392c68;
      if (uVar5 < param_1[2]) {
        uVar5 = (uint)param_1[2];
      }
      if (uVar7 == 3) goto LAB_00392c68;
      if (uVar5 < param_1[3]) {
        uVar5 = (uint)param_1[3];
      }
                    /* catch() { ... } // from try @ 00392b24 with catch @ 00392ae0
                       catch() { ... } // from try @ 00392bb8 with catch @ 00392ae0
                       catch() { ... } // from try @ 00392c20 with catch @ 00392ae0 */
      if (uVar7 == 4) goto LAB_00392c68;
      if (uVar5 < param_1[4]) {
        uVar5 = (uint)param_1[4];
      }
      if (uVar7 == 5) goto LAB_00392c68;
      if (uVar5 < param_1[5]) {
        uVar5 = (uint)param_1[5];
      }
      if (uVar7 == 6) goto LAB_00392c68;
      if (uVar5 < param_1[6]) {
        uVar5 = (uint)param_1[6];
      }
      if (uVar7 == 7) goto LAB_00392c68;
                    /* try { // try from 00392b24 to 00492b27 has its CatchHandler @ 00392ae0 */
      if (uVar5 < param_1[7]) {
        uVar5 = (uint)param_1[7];
      }
      if (uVar7 == 9) {
        uVar11 = 9;
        if (uVar5 < param_1[8]) {
          uVar5 = (uint)param_1[8];
        }
      }
      else {
        uVar11 = 8;
      }
    }
                    /* try { // try from 00392b44 to 00492b47 has its CatchHandler @ 00392bfc */
    if (uVar6 == uVar7) goto LAB_00392c54;
  }
  uVar1 = ((uVar6 - uVar7) - 8 >> 3) + 1;
  iVar4 = uVar1 * 8;
  if (6 < (uVar6 - 1) - uVar7) {
    auVar14._4_4_ = uVar5;
    auVar14._0_4_ = uVar5;
    auVar14._8_4_ = uVar5;
    auVar14._12_4_ = uVar5;
    uVar5 = 0;
    puVar8 = param_1 + uVar7;
    do {
      uVar5 = uVar5 + 1;
      auVar3._2_2_ = 0;
      auVar3._0_2_ = puVar8[4];
      auVar17._2_2_ = 0;
      auVar17._0_2_ = *puVar8;
      auVar17._4_2_ = puVar8[1];
      auVar17._6_2_ = 0;
      auVar17._8_2_ = puVar8[2];
      auVar17._10_2_ = 0;
      auVar17._12_2_ = puVar8[3];
      auVar17._14_2_ = 0;
      auVar3._4_2_ = puVar8[5];
      auVar3._6_2_ = 0;
      auVar3._8_2_ = puVar8[6];
      auVar3._10_2_ = 0;
      auVar3._12_2_ = puVar8[7];
      auVar3._14_2_ = 0;
      auVar16 = NEON_smax(auVar3,auVar17,4);
      auVar14 = NEON_smax(auVar14,auVar16,4);
      puVar8 = puVar8 + 8;
    } while (uVar5 < uVar1);
    uVar5 = NEON_smaxv(auVar14,4);
    uVar11 = (ulong)(uint)((int)uVar11 + iVar4);
    if (uVar6 - uVar7 == iVar4) goto LAB_00392c54;
  }
  uVar9 = -(uVar11 >> 0x1f) & 0xfffffffe00000000 | uVar11 << 1;
  iVar4 = (int)uVar11;
                    /* try { // try from 00392bb8 to 00492bdf has its CatchHandler @ 00392ae0 */
  if ((int)uVar5 < (int)(uint)*(ushort *)((long)param_1 + uVar9)) {
    uVar5 = (uint)*(ushort *)((long)param_1 + uVar9);
  }
  if (iVar4 + 1 < (int)uVar6) {
    uVar2 = *(ushort *)((long)param_1 + uVar9 + 2);
    if ((int)uVar5 < (int)(uint)uVar2) {
      uVar5 = (uint)uVar2;
    }
    if (iVar4 + 2 < (int)uVar6) {
      uVar2 = *(ushort *)((long)param_1 + uVar9 + 4);
      if ((int)uVar5 < (int)(uint)uVar2) {
        uVar5 = (uint)uVar2;
      }
                    /* catch() { ... } // from try @ 00392b44 with catch @ 00392bfc */
      if (iVar4 + 3 < (int)uVar6) {
        uVar2 = *(ushort *)((long)param_1 + uVar9 + 6);
        if ((int)uVar5 < (int)(uint)uVar2) {
          uVar5 = (uint)uVar2;
        }
        if (iVar4 + 4 < (int)uVar6) {
          uVar2 = *(ushort *)((long)param_1 + uVar9 + 8);
                    /* try { // try from 00392c20 to 00492c23 has its CatchHandler @ 00392ae0 */
                    /* catch() { ... } // from try @ 00392c58 with catch @ 00392c24
                       catch() { ... } // from try @ 00392fac with catch @ 00392c24
                       catch() { ... } // from try @ 003931d8 with catch @ 00392c24 */
          if ((int)uVar5 < (int)(uint)uVar2) {
            uVar5 = (uint)uVar2;
          }
          if (iVar4 + 5 < (int)uVar6) {
            uVar2 = *(ushort *)((long)param_1 + uVar9 + 10);
            if ((int)uVar5 < (int)(uint)uVar2) {
              uVar5 = (uint)uVar2;
            }
            if ((iVar4 + 6 < (int)uVar6) &&
               (uVar2 = *(ushort *)((long)param_1 + uVar9 + 0xc), (int)uVar5 < (int)(uint)uVar2)) {
              uVar5 = (uint)uVar2;
            }
          }
        }
      }
    }
  }
LAB_00392c54:
                    /* try { // try from 00392c58 to 00492c5b has its CatchHandler @ 00392c24 */
  if ((int)uVar15 < (int)uVar5) {
    uVar15 = uVar5;
  }
  *param_3 = uVar15;
  return 0;
}


==================================================================

### FUNC 00392c8c (872 bytes) name=FUN_00392c8c

undefined8 FUN_00392c8c(uint *param_1,long param_2,int *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint *puVar6;
  ulong uVar7;
  long lVar8;
  int iVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  int iVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  
  iVar13 = *param_3;
  uVar3 = (uint)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar8 = 0;
      do {
                    /* try { // try from 00392e08 to 00492e3b has its CatchHandler @ 003931dc */
        if ((*(char *)(param_2 + lVar8) != '\0') && (0 < (int)uVar3)) {
          uVar5 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
          if (uVar3 < uVar5) {
            uVar5 = uVar3;
          }
          if (uVar3 < 6) {
            uVar5 = uVar3;
          }
          if (uVar5 == 0) {
            uVar10 = 0;
          }
          else {
            uVar1 = (int)*param_1 >> 0x1f;
            iVar9 = (*param_1 ^ uVar1) - uVar1;
            if (iVar13 < iVar9) {
              iVar13 = iVar9;
            }
                    /* try { // try from 00392cc0 to 00492cc3 has its CatchHandler @ 003931dc */
            if (uVar5 == 1) {
LAB_00392e38:
              uVar10 = (ulong)uVar5;
            }
            else {
              uVar1 = (int)param_1[1] >> 0x1f;
              iVar9 = (param_1[1] ^ uVar1) - uVar1;
              if (iVar13 < iVar9) {
                iVar13 = iVar9;
              }
              if (uVar5 == 2) goto LAB_00392e38;
              uVar1 = (int)param_1[2] >> 0x1f;
              iVar9 = (param_1[2] ^ uVar1) - uVar1;
              if (iVar13 < iVar9) {
                iVar13 = iVar9;
              }
              if (uVar5 == 3) goto LAB_00392e38;
              uVar1 = (int)param_1[3] >> 0x1f;
              iVar9 = (param_1[3] ^ uVar1) - uVar1;
              if (iVar13 < iVar9) {
                iVar13 = iVar9;
              }
              if (uVar5 == 5) {
                uVar1 = (int)param_1[4] >> 0x1f;
                iVar9 = (param_1[4] ^ uVar1) - uVar1;
                if (iVar13 < iVar9) {
                  iVar13 = iVar9;
                }
                uVar10 = 5;
              }
              else {
                uVar10 = 4;
              }
            }
            if (uVar3 == uVar5) goto LAB_00392df0;
          }
          uVar1 = ((uVar3 - uVar5) - 4 >> 2) + 1;
          iVar9 = uVar1 * 4;
          if (2 < (uVar3 - 1) - uVar5) {
            auVar14._4_4_ = iVar13;
            auVar14._0_4_ = iVar13;
            auVar14._8_4_ = iVar13;
            auVar14._12_4_ = iVar13;
            uVar4 = 0;
                    /* try { // try from 00392d64 to 00492d67 has its CatchHandler @ 003931ec */
            puVar6 = param_1 + uVar5;
            do {
              uVar4 = uVar4 + 1;
              auVar11._0_4_ = MP_INT_ABS(*puVar6);
              auVar11._4_4_ = MP_INT_ABS(puVar6[1]);
              auVar11._8_4_ = MP_INT_ABS(puVar6[2]);
              auVar11._12_4_ = MP_INT_ABS(puVar6[3]);
              auVar14 = NEON_smax(auVar14,auVar11,4);
              puVar6 = puVar6 + 4;
            } while (uVar4 < uVar1);
            iVar13 = NEON_smaxv(auVar14,4);
            uVar10 = (ulong)(uint)((int)uVar10 + iVar9);
            if (uVar3 - uVar5 == iVar9) goto LAB_00392df0;
          }
          uVar7 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
          uVar5 = (int)*(uint *)((long)param_1 + uVar7) >> 0x1f;
          iVar9 = (*(uint *)((long)param_1 + uVar7) ^ uVar5) - uVar5;
          if (iVar13 < iVar9) {
            iVar13 = iVar9;
          }
          if ((int)uVar10 + 1 < (int)uVar3) {
            uVar5 = *(uint *)((long)param_1 + uVar7 + 4);
            uVar1 = (int)uVar5 >> 0x1f;
            iVar9 = (uVar5 ^ uVar1) - uVar1;
            if (iVar13 < iVar9) {
              iVar13 = iVar9;
            }
            if (((int)uVar10 + 2 < (int)uVar3) &&
               (uVar5 = *(uint *)((long)param_1 + uVar7 + 8), uVar1 = (int)uVar5 >> 0x1f,
               iVar9 = (uVar5 ^ uVar1) - uVar1, iVar13 < iVar9)) {
              iVar13 = iVar9;
            }
          }
        }
LAB_00392df0:
        lVar8 = lVar8 + 1;
        param_1 = (uint *)((long)param_1 +
                          (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2
                          ));
      } while ((int)lVar8 < param_4);
    }
    goto LAB_00392fbc;
  }
  uVar3 = param_4 * uVar3;
  iVar9 = 0;
  if (0 < (int)uVar3) {
    uVar5 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
    if (uVar3 < uVar5) {
      uVar5 = uVar3;
    }
    uVar1 = uVar3;
    if (((int)uVar3 < 6) || (uVar10 = 0, uVar1 = uVar5, uVar5 != 0)) {
      uVar5 = uVar1;
      uVar1 = (int)*param_1 >> 0x1f;
      iVar9 = (*param_1 ^ uVar1) - uVar1;
      if (iVar9 < 0) {
        iVar9 = 0;
      }
                    /* try { // try from 00392e84 to 00492e87 has its CatchHandler @ 0039318c */
      if (uVar5 == 1) {
LAB_00392fd0:
        uVar10 = (ulong)uVar5;
      }
      else {
        uVar1 = (int)param_1[1] >> 0x1f;
                    /* try { // try from 00392e8c to 00492ec7 has its CatchHandler @ 003931dc */
        iVar2 = (param_1[1] ^ uVar1) - uVar1;
        if (iVar9 < iVar2) {
          iVar9 = iVar2;
        }
        if (uVar5 == 2) goto LAB_00392fd0;
        uVar1 = (int)param_1[2] >> 0x1f;
        iVar2 = (param_1[2] ^ uVar1) - uVar1;
        if (iVar9 < iVar2) {
          iVar9 = iVar2;
        }
        if (uVar5 == 3) goto LAB_00392fd0;
        uVar1 = (int)param_1[3] >> 0x1f;
        iVar2 = (param_1[3] ^ uVar1) - uVar1;
        if (iVar9 < iVar2) {
          iVar9 = iVar2;
        }
        if (uVar5 == 5) {
          uVar10 = 5;
          uVar1 = (int)param_1[4] >> 0x1f;
          iVar2 = (param_1[4] ^ uVar1) - uVar1;
          if (iVar9 < iVar2) {
            iVar9 = iVar2;
          }
        }
        else {
          uVar10 = 4;
        }
      }
      if (uVar3 == uVar5) goto LAB_00392fb4;
    }
    uVar1 = ((uVar3 - uVar5) - 4 >> 2) + 1;
    iVar2 = uVar1 * 4;
    if (2 < (uVar3 - 1) - uVar5) {
      auVar12._4_4_ = iVar9;
      auVar12._0_4_ = iVar9;
      auVar12._8_4_ = iVar9;
      auVar12._12_4_ = iVar9;
      uVar4 = 0;
      puVar6 = param_1 + uVar5;
      do {
        uVar4 = uVar4 + 1;
                    /* try { // try from 00392f38 to 00492f3b has its CatchHandler @ 003931e4 */
        auVar15._0_4_ = MP_INT_ABS(*puVar6);
        auVar15._4_4_ = MP_INT_ABS(puVar6[1]);
        auVar15._8_4_ = MP_INT_ABS(puVar6[2]);
        auVar15._12_4_ = MP_INT_ABS(puVar6[3]);
        auVar12 = NEON_smax(auVar12,auVar15,4);
        puVar6 = puVar6 + 4;
      } while (uVar4 < uVar1);
      iVar9 = NEON_smaxv(auVar12,4);
      uVar10 = (ulong)(uint)((int)uVar10 + iVar2);
      if (uVar3 - uVar5 == iVar2) goto LAB_00392fb4;
    }
    uVar7 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
    uVar5 = (int)*(uint *)((long)param_1 + uVar7) >> 0x1f;
    iVar2 = (*(uint *)((long)param_1 + uVar7) ^ uVar5) - uVar5;
    if (iVar9 < iVar2) {
      iVar9 = iVar2;
    }
    if ((int)uVar10 + 1 < (int)uVar3) {
      uVar5 = *(uint *)((long)param_1 + uVar7 + 4);
      uVar1 = (int)uVar5 >> 0x1f;
      iVar2 = (uVar5 ^ uVar1) - uVar1;
      if (iVar9 < iVar2) {
        iVar9 = iVar2;
      }
                    /* try { // try from 00392fac to 00492ffb has its CatchHandler @ 00392c24 */
      if (((int)uVar10 + 2 < (int)uVar3) &&
         (uVar3 = *(uint *)((long)param_1 + uVar7 + 8), uVar5 = (int)uVar3 >> 0x1f,
         iVar2 = (uVar3 ^ uVar5) - uVar5, iVar9 < iVar2)) {
        iVar9 = iVar2;
      }
    }
  }
LAB_00392fb4:
  if (iVar13 < iVar9) {
    iVar13 = iVar9;
  }
LAB_00392fbc:
  *param_3 = iVar13;
  return 0;
}


==================================================================

### FUNC 00392ff4 (176 bytes) name=FUN_00392ff4

undefined8 FUN_00392ff4(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  double dVar5;
  double dVar6;
  double dVar7;
  
  dVar5 = *param_3;
  iVar2 = (int)param_5;
  if (param_2 == 0) {
    dVar6 = 0.0;
    lVar4 = 0;
    dVar7 = dVar6;
    if (0 < param_4 * iVar2) {
      do {
        lVar3 = lVar4 * 8;
        lVar4 = lVar4 + 1;
        dVar6 = ABS(*(double *)(param_1 + lVar3));
        if (dVar6 <= dVar7) {
          dVar6 = dVar7;
        }
        dVar7 = dVar6;
      } while ((int)lVar4 < param_4 * iVar2);
    }
    if (dVar5 < dVar6) {
      dVar5 = dVar6;
    }
  }
  else if (0 < param_4) {
                    /* try { // try from 00393004 to 00493007 has its CatchHandler @ 003931e4 */
    lVar4 = 0;
    do {
                    /* try { // try from 00393010 to 00493013 has its CatchHandler @ 003931ec */
      if ((*(char *)(param_2 + lVar4) != '\0') && (0 < iVar2)) {
                    /* try { // try from 0039301c to 0049317b has its CatchHandler @ 003931dc */
        lVar3 = 0;
        dVar6 = dVar5;
        do {
          lVar1 = lVar3 * 8;
          lVar3 = lVar3 + 1;
          dVar5 = ABS(*(double *)(param_1 + lVar1));
          if (dVar5 <= dVar6) {
            dVar5 = dVar6;
          }
          dVar6 = dVar5;
        } while ((int)lVar3 < iVar2);
      }
      lVar4 = lVar4 + 1;
      param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 | (param_5 & 0xffffffff) << 3
                          );
    } while ((int)lVar4 < param_4);
  }
  *param_3 = dVar5;
  return 0;
}


==================================================================

### FUNC 003930a4 (3264 bytes) name=FUN_003930a4

undefined8
FUN_003930a4(byte *param_1,byte *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  uint uVar1;
  undefined1 auVar2 [16];
  undefined4 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined8 uVar7;
  undefined4 uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined4 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  undefined4 uVar14;
  undefined8 uVar15;
  undefined4 uVar16;
  ulong uVar17;
  int iVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  byte *pbVar23;
  int iVar24;
  uint uVar25;
  ulong uVar26;
  long lVar27;
  uint uVar28;
  byte *pbVar29;
  byte bVar30;
  byte bVar31;
  byte bVar32;
  byte bVar33;
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  undefined1 auVar38 [16];
  int iVar39;
  undefined1 auVar40 [16];
  undefined1 auVar41 [16];
  
  iVar39 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar28 = -(int)param_1;
      lVar27 = 0;
      do {
        if ((*(char *)(param_3 + lVar27) != '\0') && (0 < (int)param_6)) {
          uVar22 = uVar28 & 0xf;
          if (param_6 < (uVar28 & 0xf)) {
            uVar22 = param_6;
          }
          if (param_6 < 0x11) {
            uVar22 = param_6;
          }
          uVar25 = uVar22;
          if (uVar22 != 0) {
            uVar1 = (int)((uint)*param_1 - (uint)*param_2) >> 0x1f;
            iVar24 = ((uint)*param_1 - (uint)*param_2 ^ uVar1) - uVar1;
            if (iVar39 < iVar24) {
              iVar39 = iVar24;
            }
            if (uVar22 != 1) {
              uVar1 = (int)((uint)param_1[1] - (uint)param_2[1]) >> 0x1f;
              iVar24 = ((uint)param_1[1] - (uint)param_2[1] ^ uVar1) - uVar1;
              if (iVar39 < iVar24) {
                iVar39 = iVar24;
              }
              if (uVar22 != 2) {
                uVar1 = (int)((uint)param_1[2] - (uint)param_2[2]) >> 0x1f;
                iVar24 = ((uint)param_1[2] - (uint)param_2[2] ^ uVar1) - uVar1;
                if (iVar39 < iVar24) {
                  iVar39 = iVar24;
                }
                if (uVar22 != 3) {
                  uVar1 = (int)((uint)param_1[3] - (uint)param_2[3]) >> 0x1f;
                  iVar24 = ((uint)param_1[3] - (uint)param_2[3] ^ uVar1) - uVar1;
                  if (iVar39 < iVar24) {
                    iVar39 = iVar24;
                  }
                    /* catch() { ... } // from try @ 00392e84 with catch @ 0039318c */
                  if (uVar22 != 4) {
                    uVar1 = (int)((uint)param_1[4] - (uint)param_2[4]) >> 0x1f;
                    iVar24 = ((uint)param_1[4] - (uint)param_2[4] ^ uVar1) - uVar1;
                    if (iVar39 < iVar24) {
                      iVar39 = iVar24;
                    }
                    if (uVar22 != 5) {
                      uVar1 = (int)((uint)param_1[5] - (uint)param_2[5]) >> 0x1f;
                      iVar24 = ((uint)param_1[5] - (uint)param_2[5] ^ uVar1) - uVar1;
                      if (iVar39 < iVar24) {
                        iVar39 = iVar24;
                      }
                    /* try { // try from 003931d8 to 004931db has its CatchHandler @ 00392c24 */
                    /* catch() { ... } // from try @ 00392cc0 with catch @ 003931dc
                       catch() { ... } // from try @ 00392e08 with catch @ 003931dc
                       catch() { ... } // from try @ 00392e8c with catch @ 003931dc
                       catch() { ... } // from try @ 0039301c with catch @ 003931dc */
                      if (uVar22 != 6) {
                    /* catch() { ... } // from try @ 00392f38 with catch @ 003931e4
                       catch() { ... } // from try @ 00393004 with catch @ 003931e4 */
                        uVar1 = (int)((uint)param_1[6] - (uint)param_2[6]) >> 0x1f;
                    /* catch() { ... } // from try @ 00392d64 with catch @ 003931ec
                       catch() { ... } // from try @ 00393010 with catch @ 003931ec */
                        iVar24 = ((uint)param_1[6] - (uint)param_2[6] ^ uVar1) - uVar1;
                        if (iVar39 < iVar24) {
                          iVar39 = iVar24;
                        }
                        if (uVar22 == 7) {
                          uVar25 = 7;
                        }
                        else {
                          uVar1 = (int)((uint)param_1[7] - (uint)param_2[7]) >> 0x1f;
                    /* catch() { ... } // from try @ 00393240 with catch @ 00393214
                       catch() { ... } // from try @ 0039341c with catch @ 00393214
                       catch() { ... } // from try @ 003934bc with catch @ 00393214 */
                          iVar24 = ((uint)param_1[7] - (uint)param_2[7] ^ uVar1) - uVar1;
                          if (iVar39 < iVar24) {
                            iVar39 = iVar24;
                          }
                          if (uVar22 != 8) {
                            uVar1 = (int)((uint)param_1[8] - (uint)param_2[8]) >> 0x1f;
                    /* try { // try from 00393240 to 00493243 has its CatchHandler @ 00393214 */
                            iVar24 = ((uint)param_1[8] - (uint)param_2[8] ^ uVar1) - uVar1;
                            if (iVar39 < iVar24) {
                              iVar39 = iVar24;
                            }
                            if (uVar22 != 9) {
                    /* try { // try from 0039325c to 0049325f has its CatchHandler @ 003934c0 */
                              uVar1 = (int)((uint)param_1[9] - (uint)param_2[9]) >> 0x1f;
                              iVar24 = ((uint)param_1[9] - (uint)param_2[9] ^ uVar1) - uVar1;
                              if (iVar39 < iVar24) {
                                iVar39 = iVar24;
                              }
                              if (uVar22 != 10) {
                                uVar1 = (int)((uint)param_1[10] - (uint)param_2[10]) >> 0x1f;
                    /* try { // try from 0039328c to 0049328f has its CatchHandler @ 00393478 */
                                iVar24 = ((uint)param_1[10] - (uint)param_2[10] ^ uVar1) - uVar1;
                                if (iVar39 < iVar24) {
                                  iVar39 = iVar24;
                                }
                                if (uVar22 != 0xb) {
                                  uVar1 = (int)((uint)param_1[0xb] - (uint)param_2[0xb]) >> 0x1f;
                                  iVar24 = ((uint)param_1[0xb] - (uint)param_2[0xb] ^ uVar1) - uVar1
                                  ;
                                  if (iVar39 < iVar24) {
                                    iVar39 = iVar24;
                                  }
                                  if (uVar22 != 0xc) {
                    /* try { // try from 003932e8 to 00493337 has its CatchHandler @ 00393478 */
                                    uVar1 = (int)((uint)param_1[0xc] - (uint)param_2[0xc]) >> 0x1f;
                    /* try { // try from 003932e0 to 004932e3 has its CatchHandler @ 003934c8 */
                                    iVar24 = ((uint)param_1[0xc] - (uint)param_2[0xc] ^ uVar1) -
                                             uVar1;
                                    if (iVar39 < iVar24) {
                                      iVar39 = iVar24;
                                    }
                                    if (uVar22 != 0xd) {
                                      uVar1 = (int)((uint)param_1[0xd] - (uint)param_2[0xd]) >> 0x1f
                                      ;
                                      iVar24 = ((uint)param_1[0xd] - (uint)param_2[0xd] ^ uVar1) -
                                               uVar1;
                                      if (iVar39 < iVar24) {
                                        iVar39 = iVar24;
                                      }
                                      if (uVar22 != 0xe) {
                                        uVar1 = (int)((uint)param_1[0xe] - (uint)param_2[0xe]) >>
                                                0x1f;
                                        iVar24 = ((uint)param_1[0xe] - (uint)param_2[0xe] ^ uVar1) -
                                                 uVar1;
                                        if (iVar39 < iVar24) {
                                          iVar39 = iVar24;
                                        }
                                        if (uVar22 == 0x10) {
                                          uVar1 = (int)((uint)param_1[0xf] - (uint)param_2[0xf]) >>
                                                  0x1f;
                                          iVar24 = ((uint)param_1[0xf] - (uint)param_2[0xf] ^ uVar1)
                                                   - uVar1;
                                          if (iVar39 < iVar24) {
                                            iVar39 = iVar24;
                                          }
                                        }
                                        else {
                                          uVar25 = 0xf;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (param_6 == uVar22) goto LAB_003936d4;
          }
          uVar1 = ((param_6 - uVar22) - 0x10 >> 4) + 1;
          iVar24 = uVar1 * 0x10;
          if (0xe < (param_6 - 1) - uVar22) {
            auVar40._4_4_ = iVar39;
            auVar40._0_4_ = iVar39;
            auVar40._8_4_ = iVar39;
            auVar40._12_4_ = iVar39;
            uVar20 = 0;
            pbVar23 = param_2 + uVar22;
            pbVar29 = param_1 + uVar22;
            do {
                    /* try { // try from 003933a8 to 004933ab has its CatchHandler @ 003934c0 */
              uVar7 = *(undefined8 *)(pbVar29 + 8);
              uVar4 = *(undefined8 *)pbVar29;
              uVar20 = uVar20 + 1;
              uVar15 = *(undefined8 *)(pbVar23 + 8);
              uVar12 = *(undefined8 *)pbVar23;
              bVar30 = (byte)((ulong)uVar4 >> 8);
              bVar31 = (byte)((ulong)uVar12 >> 8);
              bVar32 = (byte)((ulong)uVar7 >> 0x28);
              bVar33 = (byte)((ulong)uVar15 >> 0x28);
              uVar3 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x20) -
                                 (uint)(byte)((ulong)uVar12 >> 0x20));
              uVar5 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x28) -
                                 (uint)(byte)((ulong)uVar12 >> 0x28));
              uVar6 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x30) -
                                 (uint)(byte)((ulong)uVar12 >> 0x30));
              uVar8 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x38) -
                                 (uint)(byte)((ulong)uVar12 >> 0x38));
              auVar36._0_4_ =
                   MP_INT_ABS((CONCAT12(bVar30,(ushort)(byte)uVar4) & 0xffff) -
                              (CONCAT12(bVar31,(ushort)(byte)uVar12) & 0xffff));
              auVar36._4_4_ = MP_INT_ABS((uint)bVar30 - (uint)bVar31);
              auVar36._8_4_ =
                   MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x10) -
                              (uint)(byte)((ulong)uVar12 >> 0x10));
              auVar36._12_4_ =
                   MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x18) -
                              (uint)(byte)((ulong)uVar12 >> 0x18));
              auVar34._0_4_ = MP_INT_ABS((uint)(byte)uVar7 - (uint)(byte)uVar15);
              auVar34._4_4_ =
                   MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 8) - (uint)(byte)((ulong)uVar15 >> 8));
              auVar34._8_4_ =
                   MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x10) -
                              (uint)(byte)((ulong)uVar15 >> 0x10));
              auVar34._12_4_ =
                   MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x18) -
                              (uint)(byte)((ulong)uVar15 >> 0x18));
              uVar11 = MP_INT_ABS((CONCAT12(bVar32,(ushort)(byte)((ulong)uVar7 >> 0x20)) & 0xffff) -
                                  (CONCAT12(bVar33,(ushort)(byte)((ulong)uVar15 >> 0x20)) & 0xffff))
              ;
              uVar13 = MP_INT_ABS((uint)bVar32 - (uint)bVar33);
              uVar14 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x30) -
                                  (uint)(byte)((ulong)uVar15 >> 0x30));
              uVar16 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x38) -
                                  (uint)(byte)((ulong)uVar15 >> 0x38));
              auVar37._4_2_ = (short)uVar5;
              auVar37._0_4_ = uVar3;
              auVar37._6_2_ = (short)((uint)uVar5 >> 0x10);
              auVar37._8_2_ = (short)uVar6;
              auVar37._10_2_ = (short)((uint)uVar6 >> 0x10);
              auVar37._12_2_ = (short)uVar8;
              auVar37._14_2_ = (short)((uint)uVar8 >> 0x10);
              auVar37 = NEON_smax(auVar37,auVar36,4);
              auVar37 = NEON_smax(auVar37,auVar34,4);
              auVar9._4_2_ = (short)uVar13;
              auVar9._0_4_ = uVar11;
              auVar9._6_2_ = (short)((uint)uVar13 >> 0x10);
              auVar9._8_2_ = (short)uVar14;
              auVar9._10_2_ = (short)((uint)uVar14 >> 0x10);
              auVar9._12_2_ = (short)uVar16;
              auVar9._14_2_ = (short)((uint)uVar16 >> 0x10);
              auVar37 = NEON_smax(auVar37,auVar9,4);
              auVar40 = NEON_smax(auVar40,auVar37,4);
              pbVar23 = pbVar23 + 0x10;
              pbVar29 = pbVar29 + 0x10;
            } while (uVar20 < uVar1);
            iVar39 = NEON_smaxv(auVar40,4);
            uVar25 = uVar25 + iVar24;
            if (param_6 - uVar22 == iVar24) goto LAB_003936d4;
          }
          iVar24 = uVar25 + 1;
                    /* try { // try from 0039341c to 00493437 has its CatchHandler @ 00393214 */
          uVar22 = (int)((uint)param_1[(int)uVar25] - (uint)param_2[(int)uVar25]) >> 0x1f;
          iVar21 = ((uint)param_1[(int)uVar25] - (uint)param_2[(int)uVar25] ^ uVar22) - uVar22;
          if (iVar39 < iVar21) {
            iVar39 = iVar21;
          }
          if (iVar24 < (int)param_6) {
            iVar21 = uVar25 + 2;
                    /* try { // try from 00393440 to 00493443 has its CatchHandler @ 003934c0 */
            uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >> 0x1f;
            iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) - uVar22;
            if (iVar39 < iVar24) {
              iVar39 = iVar24;
            }
            if (iVar21 < (int)param_6) {
              iVar24 = uVar25 + 3;
                    /* catch() { ... } // from try @ 0039328c with catch @ 00393478
                       catch() { ... } // from try @ 003932e8 with catch @ 00393478 */
              uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
              iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22) - uVar22;
              if (iVar39 < iVar21) {
                iVar39 = iVar21;
              }
              if (iVar24 < (int)param_6) {
                iVar21 = uVar25 + 4;
                    /* catch() { ... } // from try @ 0039325c with catch @ 003934c0
                       catch() { ... } // from try @ 003933a8 with catch @ 003934c0
                       catch() { ... } // from try @ 00393440 with catch @ 003934c0 */
                uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >> 0x1f;
                    /* try { // try from 003934bc to 004934bf has its CatchHandler @ 00393214 */
                iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) - uVar22;
                if (iVar39 < iVar24) {
                  iVar39 = iVar24;
                }
                    /* catch() { ... } // from try @ 003932e0 with catch @ 003934c8 */
                if (iVar21 < (int)param_6) {
                  iVar24 = uVar25 + 5;
                    /* catch() { ... } // from try @ 003934f0 with catch @ 003934dc
                       catch() { ... } // from try @ 0039357c with catch @ 003934dc
                       catch() { ... } // from try @ 00393594 with catch @ 003934dc */
                    /* try { // try from 003934f0 to 00493557 has its CatchHandler @ 003934dc */
                  uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
                  iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22) - uVar22;
                  if (iVar39 < iVar21) {
                    iVar39 = iVar21;
                  }
                  if (iVar24 < (int)param_6) {
                    iVar21 = uVar25 + 6;
                    uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >> 0x1f;
                    iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) - uVar22;
                    if (iVar39 < iVar24) {
                      iVar39 = iVar24;
                    }
                    if (iVar21 < (int)param_6) {
                      iVar24 = uVar25 + 7;
                      uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
                      iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22) - uVar22;
                      if (iVar39 < iVar21) {
                        iVar39 = iVar21;
                      }
                      if (iVar24 < (int)param_6) {
                        iVar21 = uVar25 + 8;
                        uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >> 0x1f;
                    /* try { // try from 00393574 to 00493577 has its CatchHandler @ 00393584 */
                    /* try { // try from 0039357c to 0049357f has its CatchHandler @ 003934dc */
                        iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) - uVar22;
                    /* catch() { ... } // from try @ 00393574 with catch @ 00393584 */
                        if (iVar39 < iVar24) {
                          iVar39 = iVar24;
                        }
                        if (iVar21 < (int)param_6) {
                    /* try { // try from 00393594 to 00493597 has its CatchHandler @ 003934dc */
                          iVar24 = uVar25 + 9;
                    /* catch() { ... } // from try @ 003935b0 with catch @ 00393598
                       catch() { ... } // from try @ 00393604 with catch @ 00393598
                       catch() { ... } // from try @ 00393634 with catch @ 00393598 */
                    /* try { // try from 003935b0 to 004935df has its CatchHandler @ 00393598 */
                          uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
                          iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22) - uVar22
                          ;
                          if (iVar39 < iVar21) {
                            iVar39 = iVar21;
                          }
                          if (iVar24 < (int)param_6) {
                            iVar21 = uVar25 + 10;
                            uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >> 0x1f;
                            iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) -
                                     uVar22;
                            if (iVar39 < iVar24) {
                              iVar39 = iVar24;
                            }
                            if (iVar21 < (int)param_6) {
                              iVar24 = uVar25 + 0xb;
                    /* try { // try from 003935fc to 004935ff has its CatchHandler @ 00393624 */
                              uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
                    /* try { // try from 00393604 to 0049360f has its CatchHandler @ 00393598 */
                              iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22) -
                                       uVar22;
                              if (iVar39 < iVar21) {
                                iVar39 = iVar21;
                              }
                              if (iVar24 < (int)param_6) {
                    /* catch() { ... } // from try @ 003935fc with catch @ 00393624 */
                                iVar21 = uVar25 + 0xc;
                                uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >>
                                         0x1f;
                    /* try { // try from 00393634 to 00493637 has its CatchHandler @ 00393598 */
                    /* catch() { ... } // from try @ 003936a8 with catch @ 00393638
                       catch() { ... } // from try @ 0039373c with catch @ 00393638
                       catch() { ... } // from try @ 00393754 with catch @ 00393638 */
                                iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22) -
                                         uVar22;
                                if (iVar39 < iVar24) {
                                  iVar39 = iVar24;
                                }
                                if (iVar21 < (int)param_6) {
                                  iVar24 = uVar25 + 0xd;
                                  uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >>
                                           0x1f;
                                  iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar22)
                                           - uVar22;
                                  if (iVar39 < iVar21) {
                                    iVar39 = iVar21;
                                  }
                                  if (iVar24 < (int)param_6) {
                                    iVar21 = uVar25 + 0xe;
                                    uVar22 = (int)((uint)param_1[iVar24] - (uint)param_2[iVar24]) >>
                                             0x1f;
                                    iVar24 = ((uint)param_1[iVar24] - (uint)param_2[iVar24] ^ uVar22
                                             ) - uVar22;
                                    if (iVar39 < iVar24) {
                                      iVar39 = iVar24;
                                    }
                    /* try { // try from 003936a8 to 00493717 has its CatchHandler @ 00393638 */
                                    if ((iVar21 < (int)param_6) &&
                                       (uVar22 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]
                                                      ) >> 0x1f,
                                       iVar24 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^
                                                uVar22) - uVar22, iVar39 < iVar24)) {
                                      iVar39 = iVar24;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003936d4:
        lVar27 = lVar27 + 1;
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar28 = uVar28 - param_6;
      } while ((int)lVar27 < param_5);
    }
    *param_4 = iVar39;
    return 0;
  }
  param_6 = param_5 * param_6;
  iVar24 = 0;
  if ((int)param_6 < 1) goto LAB_00393d24;
  uVar28 = -(int)param_1 & 0xf;
  if (param_6 < uVar28) {
    uVar28 = param_6;
  }
  uVar26 = (ulong)uVar28;
                    /* try { // try from 00393734 to 00493737 has its CatchHandler @ 00393744 */
  if ((int)param_6 < 0x11) {
                    /* try { // try from 0039373c to 0049373f has its CatchHandler @ 00393638 */
    uVar26 = (ulong)param_6;
LAB_00393740:
                    /* catch() { ... } // from try @ 00393734 with catch @ 00393744 */
    uVar28 = (int)((uint)*param_1 - (uint)*param_2) >> 0x1f;
                    /* try { // try from 00393754 to 00493757 has its CatchHandler @ 00393638 */
    iVar24 = ((uint)*param_1 - (uint)*param_2 ^ uVar28) - uVar28;
                    /* catch() { ... } // from try @ 003937c0 with catch @ 00393758
                       catch() { ... } // from try @ 00393844 with catch @ 00393758
                       catch() { ... } // from try @ 0039388c with catch @ 00393758 */
    if (iVar24 < 0) {
      iVar24 = 0;
    }
    iVar19 = (int)uVar26;
    uVar17 = uVar26;
    if (iVar19 != 1) {
      uVar28 = (int)((uint)param_1[1] - (uint)param_2[1]) >> 0x1f;
      iVar21 = ((uint)param_1[1] - (uint)param_2[1] ^ uVar28) - uVar28;
      if (iVar24 < iVar21) {
        iVar24 = iVar21;
      }
      if (iVar19 != 2) {
        uVar28 = (int)((uint)param_1[2] - (uint)param_2[2]) >> 0x1f;
        iVar21 = ((uint)param_1[2] - (uint)param_2[2] ^ uVar28) - uVar28;
        if (iVar24 < iVar21) {
          iVar24 = iVar21;
        }
        if (iVar19 != 3) {
                    /* try { // try from 003937c0 to 0049381f has its CatchHandler @ 00393758 */
          uVar28 = (int)((uint)param_1[3] - (uint)param_2[3]) >> 0x1f;
          iVar21 = ((uint)param_1[3] - (uint)param_2[3] ^ uVar28) - uVar28;
          if (iVar24 < iVar21) {
            iVar24 = iVar21;
          }
          if (iVar19 != 4) {
            uVar28 = (int)((uint)param_1[4] - (uint)param_2[4]) >> 0x1f;
            iVar21 = ((uint)param_1[4] - (uint)param_2[4] ^ uVar28) - uVar28;
            if (iVar24 < iVar21) {
              iVar24 = iVar21;
            }
            if (iVar19 != 5) {
              uVar28 = (int)((uint)param_1[5] - (uint)param_2[5]) >> 0x1f;
              iVar21 = ((uint)param_1[5] - (uint)param_2[5] ^ uVar28) - uVar28;
              if (iVar24 < iVar21) {
                iVar24 = iVar21;
              }
              if (iVar19 != 6) {
                uVar28 = (int)((uint)param_1[6] - (uint)param_2[6]) >> 0x1f;
                    /* try { // try from 0039383c to 0049383f has its CatchHandler @ 0039387c */
                    /* try { // try from 00393844 to 00493847 has its CatchHandler @ 00393758 */
                iVar21 = ((uint)param_1[6] - (uint)param_2[6] ^ uVar28) - uVar28;
                if (iVar24 < iVar21) {
                  iVar24 = iVar21;
                }
                if (iVar19 != 7) {
                  uVar28 = (int)((uint)param_1[7] - (uint)param_2[7]) >> 0x1f;
                  iVar21 = ((uint)param_1[7] - (uint)param_2[7] ^ uVar28) - uVar28;
                  if (iVar24 < iVar21) {
                    iVar24 = iVar21;
                  }
                    /* catch() { ... } // from try @ 0039383c with catch @ 0039387c */
                  if (iVar19 != 8) {
                    uVar28 = (int)((uint)param_1[8] - (uint)param_2[8]) >> 0x1f;
                    /* try { // try from 0039388c to 0049388f has its CatchHandler @ 00393758 */
                    /* catch() { ... } // from try @ 003938e0 with catch @ 00393890
                       catch() { ... } // from try @ 00393908 with catch @ 00393890
                       catch() { ... } // from try @ 0039393c with catch @ 00393890 */
                    iVar21 = ((uint)param_1[8] - (uint)param_2[8] ^ uVar28) - uVar28;
                    if (iVar24 < iVar21) {
                      iVar24 = iVar21;
                    }
                    if (iVar19 != 9) {
                      uVar28 = (int)((uint)param_1[9] - (uint)param_2[9]) >> 0x1f;
                      iVar21 = ((uint)param_1[9] - (uint)param_2[9] ^ uVar28) - uVar28;
                      if (iVar24 < iVar21) {
                        iVar24 = iVar21;
                      }
                      if (iVar19 == 10) {
                        uVar17 = 10;
                      }
                      else {
                        uVar28 = (int)((uint)param_1[10] - (uint)param_2[10]) >> 0x1f;
                    /* try { // try from 003938e0 to 004938e3 has its CatchHandler @ 00393890 */
                        iVar21 = ((uint)param_1[10] - (uint)param_2[10] ^ uVar28) - uVar28;
                        if (iVar24 < iVar21) {
                          iVar24 = iVar21;
                        }
                        if (iVar19 != 0xb) {
                    /* try { // try from 00393900 to 00493903 has its CatchHandler @ 0039392c */
                          uVar28 = (int)((uint)param_1[0xb] - (uint)param_2[0xb]) >> 0x1f;
                    /* try { // try from 00393908 to 0049390b has its CatchHandler @ 00393890 */
                          iVar21 = ((uint)param_1[0xb] - (uint)param_2[0xb] ^ uVar28) - uVar28;
                          if (iVar24 < iVar21) {
                            iVar24 = iVar21;
                          }
                          if (iVar19 != 0xc) {
                            uVar28 = (int)((uint)param_1[0xc] - (uint)param_2[0xc]) >> 0x1f;
                    /* catch() { ... } // from try @ 00393900 with catch @ 0039392c */
                            iVar21 = ((uint)param_1[0xc] - (uint)param_2[0xc] ^ uVar28) - uVar28;
                    /* try { // try from 0039393c to 0049393f has its CatchHandler @ 00393890 */
                            if (iVar24 < iVar21) {
                              iVar24 = iVar21;
                            }
                    /* catch() { ... } // from try @ 003939a0 with catch @ 00393940
                       catch() { ... } // from try @ 003939c8 with catch @ 00393940
                       catch() { ... } // from try @ 00393a18 with catch @ 00393940
                       catch() { ... } // from try @ 00393a68 with catch @ 00393940
                       catch() { ... } // from try @ 00393a7c with catch @ 00393940 */
                            if (iVar19 != 0xd) {
                              uVar28 = (int)((uint)param_1[0xd] - (uint)param_2[0xd]) >> 0x1f;
                              iVar21 = ((uint)param_1[0xd] - (uint)param_2[0xd] ^ uVar28) - uVar28;
                              if (iVar24 < iVar21) {
                                iVar24 = iVar21;
                              }
                              if (iVar19 != 0xe) {
                                uVar28 = (int)((uint)param_1[0xe] - (uint)param_2[0xe]) >> 0x1f;
                                iVar21 = ((uint)param_1[0xe] - (uint)param_2[0xe] ^ uVar28) - uVar28
                                ;
                                if (iVar24 < iVar21) {
                                  iVar24 = iVar21;
                                }
                                if (iVar19 == 0x10) {
                    /* try { // try from 003939a0 to 004939a3 has its CatchHandler @ 00393940 */
                                  uVar28 = (int)((uint)param_1[0xf] - (uint)param_2[0xf]) >> 0x1f;
                                  iVar21 = ((uint)param_1[0xf] - (uint)param_2[0xf] ^ uVar28) -
                                           uVar28;
                                  if (iVar24 < iVar21) {
                                    iVar24 = iVar21;
                                  }
                                }
                                else {
                                  uVar17 = 0xf;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    iVar21 = (int)uVar17;
                    /* try { // try from 003939c0 to 004939c3 has its CatchHandler @ 00393a6c */
    if (param_6 - iVar19 == 0) goto LAB_00393d24;
  }
  else {
    iVar21 = 0;
    if (uVar28 != 0) goto LAB_00393740;
  }
  iVar18 = param_6 - (int)uVar26;
                    /* try { // try from 003939c8 to 004939f3 has its CatchHandler @ 00393940 */
  uVar28 = (iVar18 - 0x10U >> 4) + 1;
  iVar19 = uVar28 * 0x10;
  if (0xe < (param_6 - 1) - (int)uVar26) {
    auVar41._4_4_ = iVar24;
    auVar41._0_4_ = iVar24;
    auVar41._8_4_ = iVar24;
    auVar41._12_4_ = iVar24;
    uVar22 = 0;
    pbVar23 = param_2 + uVar26;
    pbVar29 = param_1 + uVar26;
    do {
      uVar7 = *(undefined8 *)(pbVar29 + 8);
      uVar4 = *(undefined8 *)pbVar29;
      uVar22 = uVar22 + 1;
      uVar15 = *(undefined8 *)(pbVar23 + 8);
      uVar12 = *(undefined8 *)pbVar23;
      bVar30 = (byte)((ulong)uVar4 >> 8);
      bVar31 = (byte)((ulong)uVar12 >> 8);
                    /* try { // try from 00393a10 to 00493a13 has its CatchHandler @ 00393a58 */
      bVar32 = (byte)((ulong)uVar7 >> 0x28);
      bVar33 = (byte)((ulong)uVar15 >> 0x28);
                    /* try { // try from 00393a18 to 00493a1b has its CatchHandler @ 00393940 */
      uVar3 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x20) - (uint)(byte)((ulong)uVar12 >> 0x20));
      uVar5 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x28) - (uint)(byte)((ulong)uVar12 >> 0x28));
      uVar6 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x30) - (uint)(byte)((ulong)uVar12 >> 0x30));
      uVar8 = MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x38) - (uint)(byte)((ulong)uVar12 >> 0x38));
      auVar38._0_4_ =
           MP_INT_ABS((CONCAT12(bVar30,(ushort)(byte)uVar4) & 0xffff) -
                      (CONCAT12(bVar31,(ushort)(byte)uVar12) & 0xffff));
      auVar38._4_4_ = MP_INT_ABS((uint)bVar30 - (uint)bVar31);
      auVar38._8_4_ =
           MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x10) - (uint)(byte)((ulong)uVar12 >> 0x10));
      auVar38._12_4_ =
           MP_INT_ABS((uint)(byte)((ulong)uVar4 >> 0x18) - (uint)(byte)((ulong)uVar12 >> 0x18));
      auVar35._0_4_ = MP_INT_ABS((uint)(byte)uVar7 - (uint)(byte)uVar15);
      auVar35._4_4_ = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 8) - (uint)(byte)((ulong)uVar15 >> 8))
      ;
      auVar35._8_4_ =
           MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x10) - (uint)(byte)((ulong)uVar15 >> 0x10));
      auVar35._12_4_ =
           MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x18) - (uint)(byte)((ulong)uVar15 >> 0x18));
      uVar11 = MP_INT_ABS((CONCAT12(bVar32,(ushort)(byte)((ulong)uVar7 >> 0x20)) & 0xffff) -
                          (CONCAT12(bVar33,(ushort)(byte)((ulong)uVar15 >> 0x20)) & 0xffff));
      uVar13 = MP_INT_ABS((uint)bVar32 - (uint)bVar33);
      uVar14 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x30) - (uint)(byte)((ulong)uVar15 >> 0x30));
      uVar16 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x38) - (uint)(byte)((ulong)uVar15 >> 0x38));
      auVar2._4_2_ = (short)uVar5;
      auVar2._0_4_ = uVar3;
      auVar2._6_2_ = (short)((uint)uVar5 >> 0x10);
      auVar2._8_2_ = (short)uVar6;
      auVar2._10_2_ = (short)((uint)uVar6 >> 0x10);
      auVar2._12_2_ = (short)uVar8;
      auVar2._14_2_ = (short)((uint)uVar8 >> 0x10);
      auVar40 = NEON_smax(auVar2,auVar38,4);
      auVar40 = NEON_smax(auVar40,auVar35,4);
      auVar10._4_2_ = (short)uVar13;
      auVar10._0_4_ = uVar11;
      auVar10._6_2_ = (short)((uint)uVar13 >> 0x10);
      auVar10._8_2_ = (short)uVar14;
      auVar10._10_2_ = (short)((uint)uVar14 >> 0x10);
      auVar10._12_2_ = (short)uVar16;
      auVar10._14_2_ = (short)((uint)uVar16 >> 0x10);
      auVar40 = NEON_smax(auVar40,auVar10,4);
      auVar41 = NEON_smax(auVar41,auVar40,4);
      pbVar23 = pbVar23 + 0x10;
      pbVar29 = pbVar29 + 0x10;
    } while (uVar22 < uVar28);
    iVar24 = NEON_smaxv(auVar41,4);
    iVar21 = iVar21 + iVar19;
                    /* catch() { ... } // from try @ 00393a10 with catch @ 00393a58 */
    if (iVar19 == iVar18) goto LAB_00393d24;
  }
  iVar19 = iVar21 + 1;
                    /* try { // try from 00393a68 to 00493a6b has its CatchHandler @ 00393940 */
                    /* catch() { ... } // from try @ 003939c0 with catch @ 00393a6c */
                    /* catch() { ... } // from try @ 00393ae8 with catch @ 00393a80
                       catch() { ... } // from try @ 00393bfc with catch @ 00393a80
                       catch() { ... } // from try @ 00393c70 with catch @ 00393a80 */
  uVar28 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >> 0x1f;
                    /* try { // try from 00393a7c to 00493a7f has its CatchHandler @ 00393940 */
  iVar18 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar28) - uVar28;
  if (iVar24 < iVar18) {
    iVar24 = iVar18;
  }
  if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
    iVar18 = iVar21 + 2;
    uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
    iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
    if (iVar24 < iVar19) {
      iVar24 = iVar19;
    }
    if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
      iVar19 = iVar21 + 3;
      uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
      iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28;
      if (iVar24 < iVar18) {
        iVar24 = iVar18;
      }
                    /* try { // try from 00393ae8 to 00493bd7 has its CatchHandler @ 00393a80 */
      if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
        iVar18 = iVar21 + 4;
        uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
        iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
        if (iVar24 < iVar19) {
          iVar24 = iVar19;
        }
        if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
          iVar19 = iVar21 + 5;
          uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
          iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28;
          if (iVar24 < iVar18) {
            iVar24 = iVar18;
          }
          if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
            iVar18 = iVar21 + 6;
            uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
            iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
            if (iVar24 < iVar19) {
              iVar24 = iVar19;
            }
            if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
              iVar19 = iVar21 + 7;
              uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
              iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28;
              if (iVar24 < iVar18) {
                iVar24 = iVar18;
              }
              if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                iVar18 = iVar21 + 8;
                uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
                iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
                if (iVar24 < iVar19) {
                  iVar24 = iVar19;
                }
                if (iVar18 < (int)param_6) {
                  iVar19 = iVar21 + 9;
                  uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
                    /* try { // try from 00393bf4 to 00493bf7 has its CatchHandler @ 00393c60 */
                    /* try { // try from 00393bfc to 00493c47 has its CatchHandler @ 00393a80 */
                  iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28;
                  if (iVar24 < iVar18) {
                    iVar24 = iVar18;
                  }
                  if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                    iVar18 = iVar21 + 10;
                    uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
                    iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
                    if (iVar24 < iVar19) {
                      iVar24 = iVar19;
                    }
                    if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
                      iVar19 = iVar21 + 0xb;
                    /* catch() { ... } // from try @ 00393bf4 with catch @ 00393c60 */
                      uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
                      iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28;
                      if (iVar24 < iVar18) {
                        iVar24 = iVar18;
                      }
                      if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                    /* catch() { ... } // from try @ 00393ce4 with catch @ 00393c74
                       catch() { ... } // from try @ 00393d38 with catch @ 00393c74
                       catch() { ... } // from try @ 00393e0c with catch @ 00393c74
                       catch() { ... } // from try @ 00393eec with catch @ 00393c74
                       catch() { ... } // from try @ 00394218 with catch @ 00393c74
                       catch() { ... } // from try @ 0039422c with catch @ 00393c74
                       catch() { ... } // from try @ 00394240 with catch @ 00393c74 */
                        iVar18 = iVar21 + 0xc;
                    /* try { // try from 00393c70 to 00493c73 has its CatchHandler @ 00393a80 */
                        uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
                        iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) - uVar28;
                        if (iVar24 < iVar19) {
                          iVar24 = iVar19;
                        }
                        if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
                          iVar19 = iVar21 + 0xd;
                          uVar28 = (int)((uint)param_1[iVar18] - (uint)param_2[iVar18]) >> 0x1f;
                          iVar18 = ((uint)param_1[iVar18] - (uint)param_2[iVar18] ^ uVar28) - uVar28
                          ;
                          if (iVar24 < iVar18) {
                            iVar24 = iVar18;
                          }
                          if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                            iVar21 = iVar21 + 0xe;
                            uVar28 = (int)((uint)param_1[iVar19] - (uint)param_2[iVar19]) >> 0x1f;
                    /* try { // try from 00393ce4 to 00493ce7 has its CatchHandler @ 00393c74 */
                            iVar19 = ((uint)param_1[iVar19] - (uint)param_2[iVar19] ^ uVar28) -
                                     uVar28;
                            if (iVar24 < iVar19) {
                              iVar24 = iVar19;
                            }
                            if ((param_6 - iVar21 != 0 && iVar21 <= (int)param_6) &&
                               (uVar28 = (int)((uint)param_1[iVar21] - (uint)param_2[iVar21]) >>
                                         0x1f,
                               iVar21 = ((uint)param_1[iVar21] - (uint)param_2[iVar21] ^ uVar28) -
                                        uVar28, iVar24 < iVar21)) {
                              iVar24 = iVar21;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00393d24:
  if (iVar39 < iVar24) {
    iVar39 = iVar24;
  }
                    /* try { // try from 00393d30 to 00493d33 has its CatchHandler @ 0039421c */
  *param_4 = iVar39;
  return 0;
}


==================================================================

### FUNC 00393d64 (2728 bytes) name=FUN_00393d64

undefined8 FUN_00393d64(byte *param_1,long param_2,int *param_3,int param_4,uint param_5)

{
  ulong uVar1;
  uint3 uVar2;
  byte *pbVar3;
  uint uVar63;
  int iVar64;
  uint uVar65;
  uint uVar66;
  uint uVar67;
  long lVar68;
  uint uVar69;
  byte bVar70;
  int iVar71;
  int iVar72;
  byte bVar75;
  int iVar73;
  int iVar74;
  int iVar76;
  int iVar77;
  undefined8 uVar78;
  byte bVar80;
  undefined8 uVar79;
  byte bVar81;
  byte bVar82;
  int iVar83;
  int iVar84;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  
  iVar64 = *param_3;
  if (param_2 != 0) {
    if (0 < param_4) {
      uVar63 = -(int)param_1;
      lVar68 = 0;
      do {
        if ((*(char *)(param_2 + lVar68) != '\0') && (0 < (int)param_5)) {
          uVar65 = uVar63 & 0xf;
          if (param_5 < (uVar63 & 0xf)) {
            uVar65 = param_5;
          }
          if (param_5 < 0x12) {
            uVar65 = param_5;
          }
          uVar66 = uVar65;
          if (uVar65 != 0) {
            iVar64 = iVar64 + (uint)*param_1;
                    /* try { // try from 00393e04 to 00493e07 has its CatchHandler @ 00394208 */
                    /* try { // try from 00393e0c to 00493eab has its CatchHandler @ 00393c74 */
            if ((((uVar65 != 1) && (iVar64 = iVar64 + (uint)param_1[1], uVar65 != 2)) &&
                (iVar64 = iVar64 + (uint)param_1[2], uVar65 != 3)) &&
               (((iVar64 = iVar64 + (uint)param_1[3], uVar65 != 4 &&
                 (iVar64 = iVar64 + (uint)param_1[4], uVar65 != 5)) &&
                (iVar64 = iVar64 + (uint)param_1[5], uVar65 != 6)))) {
              iVar64 = iVar64 + (uint)param_1[6];
              if (uVar65 == 7) {
                uVar66 = 7;
              }
              else {
                iVar64 = iVar64 + (uint)param_1[7];
                if (((uVar65 != 8) && (iVar64 = iVar64 + (uint)param_1[8], uVar65 != 9)) &&
                   ((iVar64 = iVar64 + (uint)param_1[9], uVar65 != 10 &&
                    ((((iVar64 = iVar64 + (uint)param_1[10], uVar65 != 0xb &&
                       (iVar64 = iVar64 + (uint)param_1[0xb], uVar65 != 0xc)) &&
                      (iVar64 = iVar64 + (uint)param_1[0xc], uVar65 != 0xd)) &&
                     ((iVar64 = iVar64 + (uint)param_1[0xd], uVar65 != 0xe &&
                      (iVar64 = iVar64 + (uint)param_1[0xe], uVar65 != 0xf)))))))) {
                  iVar64 = iVar64 + (uint)param_1[0xf];
                  if (uVar65 == 0x11) {
                    iVar64 = iVar64 + (uint)param_1[0x10];
                  }
                  else {
                    uVar66 = 0x10;
                  }
                }
              }
            }
            if (param_5 == uVar65) goto LAB_00394068;
          }
          uVar67 = ((param_5 - uVar65) - 0x10 >> 4) + 1;
                    /* try { // try from 00393ee4 to 00493ee7 has its CatchHandler @ 00394230 */
          iVar83 = uVar67 * 0x10;
          if (0xe < (param_5 - 1) - uVar65) {
                    /* try { // try from 00393eec to 004941fb has its CatchHandler @ 00393c74 */
            iVar71 = 0;
            iVar72 = 0;
            iVar73 = 0;
            iVar76 = 0;
            uVar69 = 0;
            pbVar62 = param_1 + uVar65;
            do {
              uVar79 = *(undefined8 *)(pbVar62 + 8);
              uVar78 = *(undefined8 *)pbVar62;
              uVar69 = uVar69 + 1;
              bVar70 = (byte)((ulong)uVar78 >> 8);
              bVar80 = (byte)((ulong)uVar78 >> 0x28);
              bVar75 = (byte)((ulong)uVar79 >> 8);
              bVar81 = (byte)((ulong)uVar79 >> 0x28);
              iVar71 = (CONCAT12(bVar81,(ushort)(byte)((ulong)uVar79 >> 0x20)) & 0xffff) +
                       ((CONCAT12(bVar75,(short)uVar79) & 0xff00ff) & 0xffff) +
                       (CONCAT12(bVar80,(ushort)(byte)((ulong)uVar78 >> 0x20)) & 0xffff) +
                       (CONCAT12(bVar70,(ushort)(byte)uVar78) & 0xffff) + iVar71;
              iVar72 = (uint)bVar81 + (uint)bVar75 + (uint)bVar80 + (uint)bVar70 + iVar72;
              iVar73 = (uint)(byte)((ulong)uVar79 >> 0x30) +
                       (uint)(byte)((ulong)uVar79 >> 0x10) +
                       (uint)(byte)((ulong)uVar78 >> 0x30) +
                       (uint)(byte)((ulong)uVar78 >> 0x10) + iVar73;
              iVar76 = (uint)(byte)((ulong)uVar79 >> 0x38) +
                       (uint)(byte)((ulong)uVar79 >> 0x18) +
                       (uint)(byte)((ulong)uVar78 >> 0x38) +
                       (uint)(byte)((ulong)uVar78 >> 0x18) + iVar76;
              pbVar62 = pbVar62 + 0x10;
            } while (uVar69 < uVar67);
            uVar66 = uVar66 + iVar83;
            iVar64 = iVar64 + iVar71 + iVar72 + iVar73 + iVar76;
            if (param_5 - uVar65 == iVar83) goto LAB_00394068;
          }
          iVar64 = iVar64 + (uint)param_1[(int)uVar66];
          if ((int)(uVar66 + 1) < (int)param_5) {
            iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 1)];
            if ((int)(uVar66 + 2) < (int)param_5) {
              iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 2)];
              if ((int)(uVar66 + 3) < (int)param_5) {
                iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 3)];
                if ((int)(uVar66 + 4) < (int)param_5) {
                  iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 4)];
                  if ((int)(uVar66 + 5) < (int)param_5) {
                    iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 5)];
                    if ((int)(uVar66 + 6) < (int)param_5) {
                      iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 6)];
                      if ((int)(uVar66 + 7) < (int)param_5) {
                        iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 7)];
                        if ((int)(uVar66 + 8) < (int)param_5) {
                          iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 8)];
                          if ((int)(uVar66 + 9) < (int)param_5) {
                            iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 9)];
                            if ((int)(uVar66 + 10) < (int)param_5) {
                              iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 10)];
                              if ((int)(uVar66 + 0xb) < (int)param_5) {
                                iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 0xb)];
                                if ((int)(uVar66 + 0xc) < (int)param_5) {
                                  iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 0xc)];
                                  if ((int)(uVar66 + 0xd) < (int)param_5) {
                                    iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 0xd)];
                                    if ((int)(uVar66 + 0xe) < (int)param_5) {
                                      iVar64 = iVar64 + (uint)param_1[(int)(uVar66 + 0xe)];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00394068:
        lVar68 = lVar68 + 1;
        param_1 = param_1 + (int)param_5;
        uVar63 = uVar63 - param_5;
      } while ((int)lVar68 < param_4);
    }
    *param_3 = iVar64;
    return 0;
  }
  param_4 = param_4 * param_5;
  iVar71 = param_4 + -3;
  iVar83 = 0;
  iVar72 = iVar83;
  if (0 < iVar71) {
    uVar63 = param_4 - 4U >> 2;
    iVar72 = uVar63 + 1;
    uVar63 = (uVar63 - 0xf >> 4) + 1;
    if (param_4 - 4U < 0x3c) {
      iVar73 = 0;
LAB_003941b0:
      iVar76 = iVar73 + 4;
      iVar83 = iVar83 + (uint)param_1[iVar73] + (uint)param_1[(long)iVar73 + 1] +
                        (uint)param_1[(long)iVar73 + 2] + (uint)param_1[(long)iVar73 + 3];
      if (iVar76 < iVar71) {
        iVar84 = iVar73 + 8;
                    /* catch() { ... } // from try @ 00393e04 with catch @ 00394208 */
        iVar83 = iVar83 + (uint)param_1[iVar76] + (uint)param_1[(long)iVar76 + 1] +
                          (uint)param_1[(long)iVar76 + 2] + (uint)param_1[(long)iVar76 + 3];
        if (iVar84 < iVar71) {
                    /* catch() { ... } // from try @ 00393d30 with catch @ 0039421c */
          iVar76 = iVar73 + 0xc;
                    /* try { // try from 00394218 to 0049421b has its CatchHandler @ 00393c74 */
                    /* try { // try from 0039422c to 0049422f has its CatchHandler @ 00393c74 */
                    /* catch() { ... } // from try @ 00393ee4 with catch @ 00394230 */
                    /* try { // try from 00394240 to 00494243 has its CatchHandler @ 00393c74 */
          iVar83 = iVar83 + (uint)param_1[iVar84] + (uint)param_1[(long)iVar84 + 1] +
                            (uint)param_1[(long)iVar84 + 2] + (uint)param_1[(long)iVar84 + 3];
          if (iVar76 < iVar71) {
            iVar84 = iVar73 + 0x10;
            iVar83 = iVar83 + (uint)param_1[iVar76] + (uint)param_1[(long)iVar76 + 1] +
                              (uint)param_1[(long)iVar76 + 2] + (uint)param_1[(long)iVar76 + 3];
            if (iVar84 < iVar71) {
              iVar76 = iVar73 + 0x14;
                    /* catch() { ... } // from try @ 00394338 with catch @ 003942ac
                       catch() { ... } // from try @ 00394394 with catch @ 003942ac
                       catch() { ... } // from try @ 003943e8 with catch @ 003942ac
                       catch() { ... } // from try @ 00394430 with catch @ 003942ac
                       catch() { ... } // from try @ 0039445c with catch @ 003942ac
                       catch() { ... } // from try @ 00394470 with catch @ 003942ac
                       catch() { ... } // from try @ 00394484 with catch @ 003942ac */
              iVar83 = iVar83 + (uint)param_1[iVar84] + (uint)param_1[(long)iVar84 + 1] +
                                (uint)param_1[(long)iVar84 + 2] + (uint)param_1[(long)iVar84 + 3];
              if (iVar76 < iVar71) {
                iVar84 = iVar73 + 0x18;
                iVar83 = iVar83 + (uint)param_1[iVar76] + (uint)param_1[(long)iVar76 + 1] +
                                  (uint)param_1[(long)iVar76 + 2] + (uint)param_1[(long)iVar76 + 3];
                if (iVar84 < iVar71) {
                  iVar76 = iVar73 + 0x1c;
                  iVar83 = iVar83 + (uint)param_1[iVar84] + (uint)param_1[(long)iVar84 + 1] +
                                    (uint)param_1[(long)iVar84 + 2] +
                                    (uint)param_1[(long)iVar84 + 3];
                  if (iVar76 < iVar71) {
                    iVar84 = iVar73 + 0x20;
                    /* try { // try from 00394338 to 0049433b has its CatchHandler @ 003942ac */
                    iVar83 = iVar83 + (uint)param_1[iVar76] + (uint)param_1[(long)iVar76 + 1] +
                                      (uint)param_1[(long)iVar76 + 2] +
                                      (uint)param_1[(long)iVar76 + 3];
                    if (iVar84 < iVar71) {
                      iVar76 = iVar73 + 0x24;
                      iVar83 = iVar83 + (uint)param_1[iVar84] + (uint)param_1[(long)iVar84 + 1] +
                                        (uint)param_1[(long)iVar84 + 2] +
                                        (uint)param_1[(long)iVar84 + 3];
                      if (iVar76 < iVar71) {
                        iVar84 = iVar73 + 0x28;
                    /* try { // try from 0039438c to 0049438f has its CatchHandler @ 00394460 */
                    /* try { // try from 00394394 to 004943c3 has its CatchHandler @ 003942ac */
                        iVar83 = iVar83 + (uint)param_1[iVar76] + (uint)param_1[(long)iVar76 + 1] +
                                          (uint)param_1[(long)iVar76 + 2] +
                                          (uint)param_1[(long)iVar76 + 3];
                        if (iVar84 < iVar71) {
                          iVar76 = iVar73 + 0x2c;
                    /* try { // try from 003943e0 to 004943e3 has its CatchHandler @ 00394474 */
                          iVar83 = iVar83 + (uint)param_1[iVar84] + (uint)param_1[(long)iVar84 + 1]
                                            + (uint)param_1[(long)iVar84 + 2] +
                                            (uint)param_1[(long)iVar84 + 3];
                    /* try { // try from 003943e8 to 0049440b has its CatchHandler @ 003942ac */
                          if (iVar76 < iVar71) {
                            iVar84 = iVar73 + 0x30;
                            iVar83 = iVar83 + (uint)param_1[iVar76] +
                                              (uint)param_1[(long)iVar76 + 1] +
                                              (uint)param_1[(long)iVar76 + 2] +
                                              (uint)param_1[(long)iVar76 + 3];
                            if (iVar84 < iVar71) {
                              iVar76 = iVar73 + 0x34;
                    /* try { // try from 00394428 to 0049442b has its CatchHandler @ 0039444c */
                    /* try { // try from 00394430 to 00494433 has its CatchHandler @ 003942ac */
                    /* catch() { ... } // from try @ 00394428 with catch @ 0039444c */
                              iVar83 = iVar83 + (uint)param_1[iVar84] +
                                                (uint)param_1[(long)iVar84 + 1] +
                                                (uint)param_1[(long)iVar84 + 2] +
                                                (uint)param_1[(long)iVar84 + 3];
                              if (iVar76 < iVar71) {
                                iVar73 = iVar73 + 0x38;
                    /* try { // try from 0039445c to 0049445f has its CatchHandler @ 003942ac */
                    /* catch() { ... } // from try @ 0039438c with catch @ 00394460 */
                    /* try { // try from 00394470 to 00494473 has its CatchHandler @ 003942ac */
                    /* catch() { ... } // from try @ 003943e0 with catch @ 00394474 */
                                iVar83 = iVar83 + (uint)param_1[iVar76] +
                                                  (uint)param_1[(long)iVar76 + 1] +
                                                  (uint)param_1[(long)iVar76 + 2] +
                                                  (uint)param_1[(long)iVar76 + 3];
                    /* try { // try from 00394484 to 00494487 has its CatchHandler @ 003942ac */
                                if (iVar73 < iVar71) {
                    /* catch() { ... } // from try @ 003944c4 with catch @ 00394488
                       catch() { ... } // from try @ 00394570 with catch @ 00394488
                       catch() { ... } // from try @ 003945e4 with catch @ 00394488
                       catch() { ... } // from try @ 00394630 with catch @ 00394488
                       catch() { ... } // from try @ 00394648 with catch @ 00394488
                       catch() { ... } // from try @ 0039465c with catch @ 00394488
                       catch() { ... } // from try @ 00394670 with catch @ 00394488 */
                                  iVar83 = iVar83 + (uint)param_1[iVar73] +
                                                    (uint)param_1[(long)iVar73 + 1] +
                                                    (uint)param_1[(long)iVar73 + 2] +
                                                    (uint)param_1[(long)iVar73 + 3];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    else {
      iVar83 = 0;
      iVar73 = 0;
      iVar76 = 0;
      iVar84 = 0;
      uVar65 = 0;
      pbVar62 = param_1;
      do {
        bVar70 = *pbVar62;
        pbVar3 = pbVar62 + 1;
        pbVar4 = pbVar62 + 2;
        pbVar5 = pbVar62 + 3;
        pbVar6 = pbVar62 + 4;
        pbVar7 = pbVar62 + 5;
        pbVar8 = pbVar62 + 6;
        pbVar9 = pbVar62 + 7;
        pbVar10 = pbVar62 + 8;
        pbVar11 = pbVar62 + 9;
        pbVar12 = pbVar62 + 10;
        pbVar13 = pbVar62 + 0xb;
        pbVar14 = pbVar62 + 0xc;
        pbVar15 = pbVar62 + 0xd;
        pbVar16 = pbVar62 + 0xe;
        pbVar17 = pbVar62 + 0xf;
        pbVar18 = pbVar62 + 0x10;
        pbVar19 = pbVar62 + 0x11;
        pbVar20 = pbVar62 + 0x12;
        pbVar21 = pbVar62 + 0x13;
        pbVar22 = pbVar62 + 0x14;
        pbVar23 = pbVar62 + 0x15;
        pbVar24 = pbVar62 + 0x16;
        pbVar25 = pbVar62 + 0x17;
        pbVar26 = pbVar62 + 0x18;
        pbVar27 = pbVar62 + 0x19;
        pbVar28 = pbVar62 + 0x1a;
        pbVar29 = pbVar62 + 0x1b;
        pbVar30 = pbVar62 + 0x1c;
        pbVar31 = pbVar62 + 0x1d;
        pbVar32 = pbVar62 + 0x1e;
        pbVar33 = pbVar62 + 0x1f;
        pbVar34 = pbVar62 + 0x20;
        pbVar35 = pbVar62 + 0x21;
        pbVar36 = pbVar62 + 0x22;
        pbVar37 = pbVar62 + 0x23;
        bVar75 = pbVar62[0x24];
        bVar80 = pbVar62[0x25];
        bVar81 = pbVar62[0x26];
        bVar82 = pbVar62[0x27];
        pbVar38 = pbVar62 + 0x28;
        pbVar39 = pbVar62 + 0x29;
        pbVar40 = pbVar62 + 0x2a;
        pbVar41 = pbVar62 + 0x2b;
        pbVar42 = pbVar62 + 0x2c;
        pbVar43 = pbVar62 + 0x2d;
        pbVar44 = pbVar62 + 0x2e;
        pbVar45 = pbVar62 + 0x2f;
        pbVar46 = pbVar62 + 0x30;
        pbVar47 = pbVar62 + 0x31;
        pbVar48 = pbVar62 + 0x32;
        pbVar49 = pbVar62 + 0x33;
        pbVar50 = pbVar62 + 0x34;
        pbVar51 = pbVar62 + 0x35;
        pbVar52 = pbVar62 + 0x36;
        pbVar53 = pbVar62 + 0x37;
        pbVar54 = pbVar62 + 0x38;
        pbVar55 = pbVar62 + 0x39;
        pbVar56 = pbVar62 + 0x3a;
        pbVar57 = pbVar62 + 0x3b;
        pbVar58 = pbVar62 + 0x3c;
        pbVar59 = pbVar62 + 0x3d;
        pbVar60 = pbVar62 + 0x3e;
        pbVar61 = pbVar62 + 0x3f;
        pbVar62 = pbVar62 + 0x40;
        uVar65 = uVar65 + 1;
        uVar2 = CONCAT12(*pbVar11,CONCAT11(*pbVar7,*pbVar3));
        iVar83 = (CONCAT12(*pbVar51,(ushort)*pbVar47) & 0xffff) +
                 (CONCAT12(*pbVar50,(ushort)*pbVar46) & 0xffff) +
                 (CONCAT12(*pbVar52,(ushort)*pbVar48) & 0xffff) +
                 (CONCAT12(*pbVar53,(ushort)*pbVar49) & 0xffff) +
                 ((CONCAT12(bVar80,CONCAT11(bVar80,*pbVar35)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar75,CONCAT11(bVar75,*pbVar34)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar81,CONCAT11(bVar81,*pbVar36)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar82,CONCAT11(bVar82,*pbVar37)) & 0xff00ff) & 0xffff) +
                 (CONCAT12(*pbVar23,(ushort)*pbVar19) & 0xffff) +
                 (CONCAT12(*pbVar22,(ushort)*pbVar18) & 0xffff) +
                 (CONCAT12(*pbVar24,(ushort)*pbVar20) & 0xffff) +
                 (CONCAT12(*pbVar25,(ushort)*pbVar21) & 0xffff) +
                 (uVar2 & 0xff) + (CONCAT12(*pbVar6,(ushort)bVar70) & 0xffff) +
                 (CONCAT12(*pbVar8,(ushort)*pbVar4) & 0xffff) +
                 (CONCAT12(*pbVar9,(ushort)*pbVar5) & 0xffff) + iVar83;
        iVar73 = (uint)*pbVar51 + (uint)*pbVar50 + (uint)*pbVar52 + (uint)*pbVar53 +
                 (uint)bVar80 + (uint)bVar75 + (uint)bVar81 + (uint)bVar82 +
                 (uint)*pbVar23 + (uint)*pbVar22 + (uint)*pbVar24 + (uint)*pbVar25 +
                 ((uVar2 & 0xff00) >> 8) + (uint)*pbVar6 + (uint)*pbVar8 + (uint)*pbVar9 + iVar73;
        iVar76 = (uint)*pbVar55 + (uint)*pbVar54 + (uint)*pbVar56 + (uint)*pbVar57 +
                 (uint)*pbVar39 + (uint)*pbVar38 + (uint)*pbVar40 + (uint)*pbVar41 +
                 (uint)*pbVar27 + (uint)*pbVar26 + (uint)*pbVar28 + (uint)*pbVar29 +
                 (uint)*pbVar11 + (CONCAT12(*pbVar14,(ushort)*pbVar10) & 0xffff) + (uint)*pbVar12 +
                 (uint)*pbVar13 + iVar76;
        iVar84 = (uint)*pbVar59 + (uint)*pbVar58 + (uint)*pbVar60 + (uint)*pbVar61 +
                 (uint)*pbVar43 + (uint)*pbVar42 + (uint)*pbVar44 + (uint)*pbVar45 +
                 (uint)*pbVar31 + (uint)*pbVar30 + (uint)*pbVar32 + (uint)*pbVar33 +
                 (uint)*pbVar15 + (uint)*pbVar14 + (uint)*pbVar16 + (uint)*pbVar17 + iVar84;
      } while (uVar65 < uVar63);
      iVar83 = iVar83 + iVar73 + iVar76 + iVar84;
      iVar73 = uVar63 * 0x40;
      if (iVar72 != uVar63 * 0x10) goto LAB_003941b0;
    }
    iVar72 = iVar72 * 4;
  }
  if (iVar72 < param_4) {
    uVar65 = param_4 - iVar72;
                    /* try { // try from 003944c4 to 0049453b has its CatchHandler @ 00394488 */
    uVar63 = -(int)(param_1 + iVar72) & 0xf;
    uVar1 = (ulong)uVar63;
    if (uVar65 < uVar63) {
      uVar1 = (ulong)uVar65;
    }
    if (uVar65 < 0x12) {
      uVar1 = (ulong)uVar65;
    }
    uVar63 = (uint)uVar1;
    iVar71 = iVar72;
    if (uVar63 != 0) {
      iVar71 = iVar72 + 1;
      iVar83 = iVar83 + (uint)param_1[iVar72];
      if (uVar63 != 1) {
        lVar68 = (long)iVar71;
        iVar71 = iVar72 + 2;
        iVar83 = iVar83 + (uint)param_1[lVar68];
        if (uVar63 != 2) {
          lVar68 = (long)iVar71;
          iVar71 = iVar72 + 3;
          iVar83 = iVar83 + (uint)param_1[lVar68];
          if (uVar63 != 3) {
            lVar68 = (long)iVar71;
            iVar71 = iVar72 + 4;
            iVar83 = iVar83 + (uint)param_1[lVar68];
            if (uVar63 != 4) {
              lVar68 = (long)iVar71;
              iVar71 = iVar72 + 5;
              iVar83 = iVar83 + (uint)param_1[lVar68];
              if (uVar63 != 5) {
                lVar68 = (long)iVar71;
                iVar71 = iVar72 + 6;
                iVar83 = iVar83 + (uint)param_1[lVar68];
                if (uVar63 != 6) {
                  lVar68 = (long)iVar71;
                  iVar71 = iVar72 + 7;
                    /* try { // try from 00394568 to 0049456b has its CatchHandler @ 00394660 */
                  iVar83 = iVar83 + (uint)param_1[lVar68];
                  if (uVar63 != 7) {
                    /* try { // try from 00394570 to 004945bf has its CatchHandler @ 00394488 */
                    lVar68 = (long)iVar71;
                    iVar71 = iVar72 + 8;
                    iVar83 = iVar83 + (uint)param_1[lVar68];
                    if (uVar63 != 8) {
                      lVar68 = (long)iVar71;
                      iVar71 = iVar72 + 9;
                      iVar83 = iVar83 + (uint)param_1[lVar68];
                      if (uVar63 != 9) {
                        lVar68 = (long)iVar71;
                        iVar71 = iVar72 + 10;
                        iVar83 = iVar83 + (uint)param_1[lVar68];
                        if (uVar63 != 10) {
                          lVar68 = (long)iVar71;
                          iVar71 = iVar72 + 0xb;
                          iVar83 = iVar83 + (uint)param_1[lVar68];
                          if (uVar63 != 0xb) {
                            lVar68 = (long)iVar71;
                            iVar71 = iVar72 + 0xc;
                            iVar83 = iVar83 + (uint)param_1[lVar68];
                            if (uVar63 != 0xc) {
                              lVar68 = (long)iVar71;
                    /* try { // try from 003945dc to 004945df has its CatchHandler @ 0039464c */
                              iVar71 = iVar72 + 0xd;
                              iVar83 = iVar83 + (uint)param_1[lVar68];
                    /* try { // try from 003945e4 to 0049460b has its CatchHandler @ 00394488 */
                              if (uVar63 != 0xd) {
                                lVar68 = (long)iVar71;
                                iVar71 = iVar72 + 0xe;
                                iVar83 = iVar83 + (uint)param_1[lVar68];
                                if (uVar63 != 0xe) {
                                  lVar68 = (long)iVar71;
                                  iVar71 = iVar72 + 0xf;
                                  iVar83 = iVar83 + (uint)param_1[lVar68];
                                  if (uVar63 != 0xf) {
                                    lVar68 = (long)iVar71;
                                    iVar71 = iVar72 + 0x10;
                                    iVar83 = iVar83 + (uint)param_1[lVar68];
                                    if (uVar63 == 0x11) {
                                      lVar68 = (long)iVar71;
                    /* try { // try from 00394628 to 0049462b has its CatchHandler @ 00394638 */
                                      iVar71 = iVar72 + 0x11;
                                      iVar83 = iVar83 + (uint)param_1[lVar68];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
                    /* try { // try from 00394630 to 00494633 has its CatchHandler @ 00394488 */
      if (uVar63 == uVar65) goto LAB_003947dc;
    }
                    /* catch() { ... } // from try @ 00394628 with catch @ 00394638 */
                    /* try { // try from 00394648 to 0049464b has its CatchHandler @ 00394488 */
                    /* catch() { ... } // from try @ 003945dc with catch @ 0039464c */
    uVar66 = ((uVar65 - uVar63) - 0x10 >> 4) + 1;
    iVar73 = uVar66 * 0x10;
    if (0xe < (uVar65 - 1) - uVar63) {
                    /* try { // try from 0039465c to 0049465f has its CatchHandler @ 00394488 */
      iVar76 = 0;
      iVar84 = 0;
      iVar74 = 0;
      iVar77 = 0;
                    /* catch() { ... } // from try @ 00394568 with catch @ 00394660 */
      uVar67 = 0;
      pbVar62 = param_1 + uVar1 + (long)iVar72;
      do {
        uVar79 = *(undefined8 *)(pbVar62 + 8);
        uVar78 = *(undefined8 *)pbVar62;
                    /* try { // try from 00394670 to 00494673 has its CatchHandler @ 00394488 */
        uVar67 = uVar67 + 1;
                    /* catch() { ... } // from try @ 003947c4 with catch @ 00394674
                       catch() { ... } // from try @ 00394850 with catch @ 00394674
                       catch() { ... } // from try @ 003949a0 with catch @ 00394674
                       catch() { ... } // from try @ 00394a88 with catch @ 00394674
                       catch() { ... } // from try @ 00394a9c with catch @ 00394674 */
        bVar70 = (byte)((ulong)uVar78 >> 8);
        bVar80 = (byte)((ulong)uVar78 >> 0x28);
        bVar75 = (byte)((ulong)uVar79 >> 8);
        bVar81 = (byte)((ulong)uVar79 >> 0x28);
        iVar76 = (CONCAT12(bVar81,(ushort)(byte)((ulong)uVar79 >> 0x20)) & 0xffff) +
                 ((CONCAT12(bVar75,(short)uVar79) & 0xff00ff) & 0xffff) +
                 (CONCAT12(bVar80,(ushort)(byte)((ulong)uVar78 >> 0x20)) & 0xffff) +
                 (CONCAT12(bVar70,(ushort)(byte)uVar78) & 0xffff) + iVar76;
        iVar84 = (uint)bVar81 + (uint)bVar75 + (uint)bVar80 + (uint)bVar70 + iVar84;
        iVar74 = (uint)(byte)((ulong)uVar79 >> 0x30) +
                 (uint)(byte)((ulong)uVar79 >> 0x10) +
                 (uint)(byte)((ulong)uVar78 >> 0x30) + (uint)(byte)((ulong)uVar78 >> 0x10) + iVar74;
        iVar77 = (uint)(byte)((ulong)uVar79 >> 0x38) +
                 (uint)(byte)((ulong)uVar79 >> 0x18) +
                 (uint)(byte)((ulong)uVar78 >> 0x38) + (uint)(byte)((ulong)uVar78 >> 0x18) + iVar77;
        pbVar62 = pbVar62 + 0x10;
      } while (uVar67 < uVar66);
      iVar71 = iVar71 + iVar73;
      iVar83 = iVar83 + iVar76 + iVar84 + iVar74 + iVar77;
      if (iVar73 == uVar65 - uVar63) goto LAB_003947dc;
    }
    iVar83 = iVar83 + (uint)param_1[iVar71];
    if (iVar71 + 1 < param_4) {
      iVar83 = iVar83 + (uint)param_1[iVar71 + 1];
      if (iVar71 + 2 < param_4) {
        iVar83 = iVar83 + (uint)param_1[iVar71 + 2];
        if (iVar71 + 3 < param_4) {
          iVar83 = iVar83 + (uint)param_1[iVar71 + 3];
          if (iVar71 + 4 < param_4) {
            iVar83 = iVar83 + (uint)param_1[iVar71 + 4];
            if (iVar71 + 5 < param_4) {
              iVar83 = iVar83 + (uint)param_1[iVar71 + 5];
              if (iVar71 + 6 < param_4) {
                iVar83 = iVar83 + (uint)param_1[iVar71 + 6];
                if (iVar71 + 7 < param_4) {
                  iVar83 = iVar83 + (uint)param_1[iVar71 + 7];
                  if (iVar71 + 8 < param_4) {
                    iVar83 = iVar83 + (uint)param_1[iVar71 + 8];
                    if (iVar71 + 9 < param_4) {
                      iVar83 = iVar83 + (uint)param_1[iVar71 + 9];
                      if (iVar71 + 10 < param_4) {
                        iVar83 = iVar83 + (uint)param_1[iVar71 + 10];
                        if (iVar71 + 0xb < param_4) {
                          iVar83 = iVar83 + (uint)param_1[iVar71 + 0xb];
                          if (iVar71 + 0xc < param_4) {
                            iVar83 = iVar83 + (uint)param_1[iVar71 + 0xc];
                            if (iVar71 + 0xd < param_4) {
                    /* try { // try from 003947c4 to 0049482b has its CatchHandler @ 00394674 */
                              iVar83 = iVar83 + (uint)param_1[iVar71 + 0xd];
                              if (iVar71 + 0xe < param_4) {
                                iVar83 = iVar83 + (uint)param_1[iVar71 + 0xe];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_003947dc:
  *param_3 = iVar64 + iVar83;
  return 0;
}


==================================================================

### FUNC 0039480c (3724 bytes) name=FUN_0039480c

undefined8
FUN_0039480c(byte *param_1,byte *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  ulong uVar1;
  uint3 uVar2;
  uint3 uVar3;
  byte *pbVar4;
  byte *pbVar63;
  uint uVar122;
  uint uVar123;
  int iVar124;
  int iVar125;
  uint uVar126;
  uint uVar127;
  long lVar128;
  uint uVar129;
  byte bVar130;
  byte bVar131;
  byte bVar134;
  int iVar132;
  byte bVar135;
  int iVar136;
  undefined8 uVar133;
  byte bVar139;
  int iVar137;
  byte bVar140;
  int iVar141;
  undefined8 uVar138;
  byte bVar143;
  int iVar142;
  int iVar144;
  int iVar145;
  int iVar146;
  byte bVar151;
  int iVar147;
  byte bVar152;
  int iVar148;
  int iVar149;
  int iVar150;
  int iVar153;
  int iVar154;
  int iVar155;
  int iVar156;
  int iVar157;
  int iVar158;
  int iVar159;
  int iVar160;
  byte bVar163;
  int iVar161;
  byte bVar164;
  int iVar162;
  int iVar165;
  int iVar166;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  byte bVar173;
  int iVar171;
  int iVar172;
  int iVar174;
  int iVar175;
  int iVar176;
  int iVar177;
  int iVar178;
  int iVar179;
  int iVar180;
  int iVar181;
  int iVar182;
  int iVar183;
  int iVar184;
  int iVar185;
  int iVar186;
  int iVar187;
  int iVar188;
  undefined8 uVar189;
  int iVar190;
  int iVar191;
  undefined8 uVar192;
  int iVar193;
  int iVar194;
  int iVar195;
  int iVar196;
  int iVar197;
  int iVar198;
  int iVar199;
  int iVar200;
  int iVar201;
  int iVar202;
  int iVar203;
  int iVar204;
  int iVar205;
  int iVar206;
  int iVar207;
  int iVar208;
  int iVar209;
  int iVar210;
  int iVar211;
  int iVar212;
  int iVar213;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar64;
  byte *pbVar65;
  byte *pbVar66;
  byte *pbVar67;
  byte *pbVar68;
  byte *pbVar69;
  byte *pbVar70;
  byte *pbVar71;
  byte *pbVar72;
  byte *pbVar73;
  byte *pbVar74;
  byte *pbVar75;
  byte *pbVar76;
  byte *pbVar77;
  byte *pbVar78;
  byte *pbVar79;
  byte *pbVar80;
  byte *pbVar81;
  byte *pbVar82;
  byte *pbVar83;
  byte *pbVar84;
  byte *pbVar85;
  byte *pbVar86;
  byte *pbVar87;
  byte *pbVar88;
  byte *pbVar89;
  byte *pbVar90;
  byte *pbVar91;
  byte *pbVar92;
  byte *pbVar93;
  byte *pbVar94;
  byte *pbVar95;
  byte *pbVar96;
  byte *pbVar97;
  byte *pbVar98;
  byte *pbVar99;
  byte *pbVar100;
  byte *pbVar101;
  byte *pbVar102;
  byte *pbVar103;
  byte *pbVar104;
  byte *pbVar105;
  byte *pbVar106;
  byte *pbVar107;
  byte *pbVar108;
  byte *pbVar109;
  byte *pbVar110;
  byte *pbVar111;
  byte *pbVar112;
  byte *pbVar113;
  byte *pbVar114;
  byte *pbVar115;
  byte *pbVar116;
  byte *pbVar117;
  byte *pbVar118;
  byte *pbVar119;
  byte *pbVar120;
  byte *pbVar121;
  
  iVar124 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar123 = -(int)param_1;
      lVar128 = 0;
      do {
        if ((*(char *)(param_3 + lVar128) != '\0') && (0 < (int)param_6)) {
                    /* try { // try from 00394848 to 0049484b has its CatchHandler @ 00394a78 */
          uVar122 = uVar123 & 0xf;
          if (param_6 < (uVar123 & 0xf)) {
            uVar122 = param_6;
          }
                    /* try { // try from 00394850 to 0049494f has its CatchHandler @ 00394674 */
          if (param_6 < 0x11) {
            uVar122 = param_6;
          }
          uVar126 = uVar122;
          if (uVar122 != 0) {
            uVar127 = (int)((uint)*param_1 - (uint)*param_2) >> 0x1f;
            iVar124 = iVar124 + (((uint)*param_1 - (uint)*param_2 ^ uVar127) - uVar127);
            if ((((uVar122 != 1) &&
                 (uVar127 = (int)((uint)param_1[1] - (uint)param_2[1]) >> 0x1f,
                 iVar124 = iVar124 + (((uint)param_1[1] - (uint)param_2[1] ^ uVar127) - uVar127),
                 uVar122 != 2)) &&
                (uVar127 = (int)((uint)param_1[2] - (uint)param_2[2]) >> 0x1f,
                iVar124 = iVar124 + (((uint)param_1[2] - (uint)param_2[2] ^ uVar127) - uVar127),
                uVar122 != 3)) &&
               (((uVar127 = (int)((uint)param_1[3] - (uint)param_2[3]) >> 0x1f,
                 iVar124 = iVar124 + (((uint)param_1[3] - (uint)param_2[3] ^ uVar127) - uVar127),
                 uVar122 != 4 &&
                 (uVar127 = (int)((uint)param_1[4] - (uint)param_2[4]) >> 0x1f,
                 iVar124 = iVar124 + (((uint)param_1[4] - (uint)param_2[4] ^ uVar127) - uVar127),
                 uVar122 != 5)) &&
                (uVar127 = (int)((uint)param_1[5] - (uint)param_2[5]) >> 0x1f,
                iVar124 = iVar124 + (((uint)param_1[5] - (uint)param_2[5] ^ uVar127) - uVar127),
                uVar122 != 6)))) {
              uVar127 = (int)((uint)param_1[6] - (uint)param_2[6]) >> 0x1f;
              iVar124 = iVar124 + (((uint)param_1[6] - (uint)param_2[6] ^ uVar127) - uVar127);
              if (uVar122 == 7) {
                uVar126 = 7;
              }
              else {
                uVar127 = (int)((uint)param_1[7] - (uint)param_2[7]) >> 0x1f;
                iVar124 = iVar124 + (((uint)param_1[7] - (uint)param_2[7] ^ uVar127) - uVar127);
                    /* try { // try from 00394998 to 0049499b has its CatchHandler @ 00394a8c */
                    /* try { // try from 003949a0 to 00494a5f has its CatchHandler @ 00394674 */
                if (((uVar122 != 8) &&
                    (uVar127 = (int)((uint)param_1[8] - (uint)param_2[8]) >> 0x1f,
                    iVar124 = iVar124 + (((uint)param_1[8] - (uint)param_2[8] ^ uVar127) - uVar127),
                    uVar122 != 9)) &&
                   (((uVar127 = (int)((uint)param_1[9] - (uint)param_2[9]) >> 0x1f,
                     iVar124 = iVar124 + (((uint)param_1[9] - (uint)param_2[9] ^ uVar127) - uVar127)
                     , uVar122 != 10 &&
                     (((uVar127 = (int)((uint)param_1[10] - (uint)param_2[10]) >> 0x1f,
                       iVar124 = iVar124 + (((uint)param_1[10] - (uint)param_2[10] ^ uVar127) -
                                           uVar127), uVar122 != 0xb &&
                       (uVar127 = (int)((uint)param_1[0xb] - (uint)param_2[0xb]) >> 0x1f,
                       iVar124 = iVar124 + (((uint)param_1[0xb] - (uint)param_2[0xb] ^ uVar127) -
                                           uVar127), uVar122 != 0xc)) &&
                      (uVar127 = (int)((uint)param_1[0xc] - (uint)param_2[0xc]) >> 0x1f,
                      iVar124 = iVar124 + (((uint)param_1[0xc] - (uint)param_2[0xc] ^ uVar127) -
                                          uVar127), uVar122 != 0xd)))) &&
                    (uVar127 = (int)((uint)param_1[0xd] - (uint)param_2[0xd]) >> 0x1f,
                    iVar124 = iVar124 + (((uint)param_1[0xd] - (uint)param_2[0xd] ^ uVar127) -
                                        uVar127), uVar122 != 0xe)))) {
                  uVar127 = (int)((uint)param_1[0xe] - (uint)param_2[0xe]) >> 0x1f;
                  iVar124 = iVar124 + (((uint)param_1[0xe] - (uint)param_2[0xe] ^ uVar127) - uVar127
                                      );
                  if (uVar122 == 0x10) {
                    /* catch() { ... } // from try @ 00394848 with catch @ 00394a78 */
                    uVar127 = (int)((uint)param_1[0xf] - (uint)param_2[0xf]) >> 0x1f;
                    /* try { // try from 00394a88 to 00494a8b has its CatchHandler @ 00394674 */
                    /* catch() { ... } // from try @ 00394998 with catch @ 00394a8c */
                    iVar124 = iVar124 + (((uint)param_1[0xf] - (uint)param_2[0xf] ^ uVar127) -
                                        uVar127);
                  }
                  else {
                    uVar126 = 0xf;
                  }
                }
              }
            }
                    /* try { // try from 00394a9c to 00494a9f has its CatchHandler @ 00394674 */
            if (param_6 == uVar122) goto LAB_00394dc8;
          }
          uVar127 = ((param_6 - uVar122) - 0x10 >> 4) + 1;
          iVar125 = uVar127 * 0x10;
          if (0xe < (param_6 - 1) - uVar122) {
            iVar132 = 0;
            iVar136 = 0;
            iVar137 = 0;
            iVar141 = 0;
            uVar129 = 0;
            pbVar121 = param_2 + uVar122;
            pbVar62 = param_1 + uVar122;
            do {
              uVar138 = *(undefined8 *)(pbVar62 + 8);
              uVar133 = *(undefined8 *)pbVar62;
              uVar129 = uVar129 + 1;
              uVar192 = *(undefined8 *)(pbVar121 + 8);
              uVar189 = *(undefined8 *)pbVar121;
              bVar130 = (byte)((ulong)uVar133 >> 8);
              bVar140 = (byte)((ulong)uVar133 >> 0x28);
              bVar131 = (byte)((ulong)uVar189 >> 8);
              bVar139 = (byte)((ulong)uVar189 >> 0x18);
              bVar143 = (byte)((ulong)uVar189 >> 0x28);
              bVar134 = (byte)((ulong)uVar138 >> 8);
              bVar151 = (byte)((ulong)uVar138 >> 0x28);
              bVar135 = (byte)((ulong)uVar192 >> 8);
              bVar152 = (byte)((ulong)uVar192 >> 0x28);
              iVar176 = MP_INT_ABS(((CONCAT12(bVar130,(short)uVar133) & 0xff00ff) & 0xffff) -
                                   (CONCAT12(bVar131,(ushort)(byte)uVar189) & 0xffff));
              iVar179 = MP_INT_ABS((uint)bVar130 - (uint)bVar131);
              iVar182 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x10) -
                                   (CONCAT12(bVar139,(ushort)(byte)((ulong)uVar189 >> 0x10)) &
                                   0xffff));
              iVar185 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x18) - (uint)bVar139);
              iVar157 = MP_INT_ABS((CONCAT12(bVar140,(ushort)(byte)((ulong)uVar133 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar143,(ushort)(byte)((ulong)uVar189 >> 0x20
                                                                             )) & 0xffff));
              iVar159 = MP_INT_ABS((uint)bVar140 - (uint)bVar143);
              iVar161 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x30) -
                                   (uint)(byte)((ulong)uVar189 >> 0x30));
              iVar165 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x38) -
                                   (uint)(byte)((ulong)uVar189 >> 0x38));
              iVar167 = MP_INT_ABS(((CONCAT12(bVar134,(short)uVar138) & 0xff00ff) & 0xffff) -
                                   ((CONCAT12(bVar135,(short)uVar192) & 0xff00ff) & 0xffff));
              iVar169 = MP_INT_ABS((uint)bVar134 - (uint)bVar135);
              iVar171 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x10) -
                                   (uint)(byte)((ulong)uVar192 >> 0x10));
              iVar174 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x18) -
                                   (uint)(byte)((ulong)uVar192 >> 0x18));
              iVar142 = MP_INT_ABS((CONCAT12(bVar151,(ushort)(byte)((ulong)uVar138 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar152,(ushort)(byte)((ulong)uVar192 >> 0x20
                                                                             )) & 0xffff));
              iVar144 = MP_INT_ABS((uint)bVar151 - (uint)bVar152);
              iVar147 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x30) -
                                   (uint)(byte)((ulong)uVar192 >> 0x30));
              iVar153 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x38) -
                                   (uint)(byte)((ulong)uVar192 >> 0x38));
              iVar132 = iVar142 + iVar167 + iVar157 + iVar176 + iVar132;
              iVar136 = iVar144 + iVar169 + iVar159 + iVar179 + iVar136;
              iVar137 = iVar147 + iVar171 + iVar161 + iVar182 + iVar137;
              iVar141 = iVar153 + iVar174 + iVar165 + iVar185 + iVar141;
              pbVar121 = pbVar121 + 0x10;
              pbVar62 = pbVar62 + 0x10;
            } while (uVar129 < uVar127);
            uVar126 = uVar126 + iVar125;
            iVar124 = iVar124 + iVar132 + iVar136 + iVar137 + iVar141;
            if (param_6 - uVar122 == iVar125) goto LAB_00394dc8;
          }
          iVar125 = uVar126 + 1;
                    /* catch() { ... } // from try @ 00394c3c with catch @ 00394b54
                       catch() { ... } // from try @ 00394c64 with catch @ 00394b54
                       catch() { ... } // from try @ 00394c7c with catch @ 00394b54 */
          uVar122 = (int)((uint)param_1[(int)uVar126] - (uint)param_2[(int)uVar126]) >> 0x1f;
          iVar124 = iVar124 + (((uint)param_1[(int)uVar126] - (uint)param_2[(int)uVar126] ^ uVar122)
                              - uVar122);
          if (iVar125 < (int)param_6) {
            iVar132 = uVar126 + 2;
            uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f;
            iVar124 = iVar124 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^ uVar122) -
                                uVar122);
            if (iVar132 < (int)param_6) {
              iVar125 = uVar126 + 3;
              uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132]) >> 0x1f;
              iVar124 = iVar124 + (((uint)param_1[iVar132] - (uint)param_2[iVar132] ^ uVar122) -
                                  uVar122);
              if (iVar125 < (int)param_6) {
                iVar132 = uVar126 + 4;
                uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f;
                iVar124 = iVar124 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^ uVar122) -
                                    uVar122);
                if (iVar132 < (int)param_6) {
                  iVar125 = uVar126 + 5;
                  uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132]) >> 0x1f;
                  iVar124 = iVar124 + (((uint)param_1[iVar132] - (uint)param_2[iVar132] ^ uVar122) -
                                      uVar122);
                  if (iVar125 < (int)param_6) {
                    iVar132 = uVar126 + 6;
                    uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f;
                    /* try { // try from 00394c3c to 00494c3f has its CatchHandler @ 00394b54 */
                    iVar124 = iVar124 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^ uVar122)
                                        - uVar122);
                    if (iVar132 < (int)param_6) {
                      iVar125 = uVar126 + 7;
                    /* try { // try from 00394c5c to 00494c5f has its CatchHandler @ 00394c6c */
                      uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132]) >> 0x1f;
                    /* try { // try from 00394c64 to 00494c67 has its CatchHandler @ 00394b54 */
                    /* catch() { ... } // from try @ 00394c5c with catch @ 00394c6c */
                      iVar124 = iVar124 + (((uint)param_1[iVar132] - (uint)param_2[iVar132] ^
                                           uVar122) - uVar122);
                      if (iVar125 < (int)param_6) {
                        iVar132 = uVar126 + 8;
                    /* try { // try from 00394c7c to 00494c7f has its CatchHandler @ 00394b54 */
                        uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f;
                        iVar124 = iVar124 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^
                                             uVar122) - uVar122);
                        if (iVar132 < (int)param_6) {
                          iVar125 = uVar126 + 9;
                          uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132]) >> 0x1f;
                          iVar124 = iVar124 + (((uint)param_1[iVar132] - (uint)param_2[iVar132] ^
                                               uVar122) - uVar122);
                          if (iVar125 < (int)param_6) {
                            iVar132 = uVar126 + 10;
                    /* catch() { ... } // from try @ 00394d50 with catch @ 00394ccc
                       catch() { ... } // from try @ 00394d78 with catch @ 00394ccc
                       catch() { ... } // from try @ 00394e18 with catch @ 00394ccc
                       catch() { ... } // from try @ 00394eb0 with catch @ 00394ccc
                       catch() { ... } // from try @ 00394ec8 with catch @ 00394ccc
                       catch() { ... } // from try @ 00394edc with catch @ 00394ccc
                       catch() { ... } // from try @ 00394ef0 with catch @ 00394ccc */
                            uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f
                            ;
                            iVar124 = iVar124 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^
                                                 uVar122) - uVar122);
                            if (iVar132 < (int)param_6) {
                              iVar125 = uVar126 + 0xb;
                              uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132]) >>
                                        0x1f;
                              iVar124 = iVar124 + (((uint)param_1[iVar132] - (uint)param_2[iVar132]
                                                   ^ uVar122) - uVar122);
                              if (iVar125 < (int)param_6) {
                                iVar132 = uVar126 + 0xc;
                                uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >>
                                          0x1f;
                                iVar124 = iVar124 + (((uint)param_1[iVar125] -
                                                      (uint)param_2[iVar125] ^ uVar122) - uVar122);
                                if (iVar132 < (int)param_6) {
                                  iVar125 = uVar126 + 0xd;
                    /* try { // try from 00394d50 to 00494d53 has its CatchHandler @ 00394ccc */
                                  uVar122 = (int)((uint)param_1[iVar132] - (uint)param_2[iVar132])
                                            >> 0x1f;
                    /* try { // try from 00394d70 to 00494d73 has its CatchHandler @ 00394eb8 */
                                  iVar124 = iVar124 + (((uint)param_1[iVar132] -
                                                        (uint)param_2[iVar132] ^ uVar122) - uVar122)
                                  ;
                    /* try { // try from 00394d78 to 00494de3 has its CatchHandler @ 00394ccc */
                                  if (iVar125 < (int)param_6) {
                                    iVar132 = uVar126 + 0xe;
                                    uVar122 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125])
                                              >> 0x1f;
                                    iVar124 = iVar124 + (((uint)param_1[iVar125] -
                                                          (uint)param_2[iVar125] ^ uVar122) -
                                                        uVar122);
                                    if (iVar132 < (int)param_6) {
                                      uVar122 = (int)((uint)param_1[iVar132] -
                                                     (uint)param_2[iVar132]) >> 0x1f;
                                      iVar124 = iVar124 + (((uint)param_1[iVar132] -
                                                            (uint)param_2[iVar132] ^ uVar122) -
                                                          uVar122);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00394dc8:
        lVar128 = lVar128 + 1;
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar123 = uVar123 - param_6;
      } while ((int)lVar128 < param_5);
    }
    *param_4 = iVar124;
    return 0;
  }
                    /* try { // try from 00394e10 to 00494e13 has its CatchHandler @ 00394ee0 */
  param_5 = param_5 * param_6;
                    /* try { // try from 00394e18 to 00494e8b has its CatchHandler @ 00394ccc */
  iVar132 = 0;
  iVar125 = iVar132;
  if (0 < param_5 + -3) {
    uVar123 = param_5 - 4U >> 2;
    iVar125 = uVar123 + 1;
    uVar123 = (uVar123 - 0xf >> 4) + 1;
    if (param_5 - 4U < 0x3c) {
      iVar136 = 0;
LAB_00394fbc:
      pbVar121 = param_2 + iVar136;
      pbVar62 = param_1 + iVar136;
      do {
        iVar136 = iVar136 + 4;
                    /* try { // try from 00394ff0 to 0049502b has its CatchHandler @ 00394fb0 */
        uVar122 = (int)((uint)*pbVar62 - (uint)*pbVar121) >> 0x1f;
        uVar123 = (int)((uint)pbVar62[1] - (uint)pbVar121[1]) >> 0x1f;
        uVar126 = (int)((uint)pbVar62[2] - (uint)pbVar121[2]) >> 0x1f;
        uVar127 = (int)((uint)pbVar62[3] - (uint)pbVar121[3]) >> 0x1f;
        iVar132 = iVar132 + (((uint)*pbVar62 - (uint)*pbVar121 ^ uVar122) - uVar122) +
                            (((uint)pbVar62[1] - (uint)pbVar121[1] ^ uVar123) - uVar123) +
                            (((uint)pbVar62[2] - (uint)pbVar121[2] ^ uVar126) - uVar126) +
                            (((uint)pbVar62[3] - (uint)pbVar121[3] ^ uVar127) - uVar127);
                    /* try { // try from 00395048 to 0049504b has its CatchHandler @ 00395058 */
        pbVar121 = pbVar121 + 4;
        pbVar62 = pbVar62 + 4;
      } while (iVar136 < param_5 + -3);
    }
    else {
      iVar132 = 0;
      iVar136 = 0;
      iVar137 = 0;
      iVar141 = 0;
      uVar122 = 0;
      pbVar121 = param_2;
      pbVar62 = param_1;
      do {
        bVar130 = *pbVar62;
        pbVar4 = pbVar62 + 1;
        pbVar5 = pbVar62 + 2;
        pbVar6 = pbVar62 + 3;
        bVar134 = pbVar62[4];
        pbVar7 = pbVar62 + 5;
        pbVar8 = pbVar62 + 6;
        pbVar9 = pbVar62 + 7;
        pbVar10 = pbVar62 + 8;
        pbVar11 = pbVar62 + 9;
        pbVar12 = pbVar62 + 10;
        pbVar13 = pbVar62 + 0xb;
        pbVar14 = pbVar62 + 0xc;
        pbVar15 = pbVar62 + 0xd;
        pbVar16 = pbVar62 + 0xe;
        pbVar17 = pbVar62 + 0xf;
        pbVar18 = pbVar62 + 0x10;
        pbVar19 = pbVar62 + 0x11;
        pbVar20 = pbVar62 + 0x12;
        pbVar21 = pbVar62 + 0x13;
        pbVar22 = pbVar62 + 0x14;
        pbVar23 = pbVar62 + 0x15;
        pbVar24 = pbVar62 + 0x16;
        pbVar25 = pbVar62 + 0x17;
        pbVar26 = pbVar62 + 0x18;
        pbVar27 = pbVar62 + 0x19;
        pbVar28 = pbVar62 + 0x1a;
        pbVar29 = pbVar62 + 0x1b;
        pbVar30 = pbVar62 + 0x1c;
        pbVar31 = pbVar62 + 0x1d;
        pbVar32 = pbVar62 + 0x1e;
        pbVar33 = pbVar62 + 0x1f;
        pbVar34 = pbVar62 + 0x20;
        pbVar35 = pbVar62 + 0x21;
        pbVar36 = pbVar62 + 0x22;
        pbVar37 = pbVar62 + 0x23;
        bVar139 = pbVar62[0x24];
        bVar151 = pbVar62[0x25];
        bVar163 = pbVar62[0x26];
        bVar173 = pbVar62[0x27];
        pbVar38 = pbVar62 + 0x28;
        pbVar39 = pbVar62 + 0x29;
        pbVar40 = pbVar62 + 0x2a;
        pbVar41 = pbVar62 + 0x2b;
        pbVar42 = pbVar62 + 0x2c;
        pbVar43 = pbVar62 + 0x2d;
        pbVar44 = pbVar62 + 0x2e;
        pbVar45 = pbVar62 + 0x2f;
        pbVar46 = pbVar62 + 0x30;
        pbVar47 = pbVar62 + 0x31;
        pbVar48 = pbVar62 + 0x32;
        pbVar49 = pbVar62 + 0x33;
        pbVar50 = pbVar62 + 0x34;
        pbVar51 = pbVar62 + 0x35;
        pbVar52 = pbVar62 + 0x36;
        pbVar53 = pbVar62 + 0x37;
        pbVar54 = pbVar62 + 0x38;
        pbVar55 = pbVar62 + 0x39;
        pbVar56 = pbVar62 + 0x3a;
        pbVar57 = pbVar62 + 0x3b;
        pbVar58 = pbVar62 + 0x3c;
        pbVar59 = pbVar62 + 0x3d;
        pbVar60 = pbVar62 + 0x3e;
        pbVar61 = pbVar62 + 0x3f;
        pbVar62 = pbVar62 + 0x40;
        uVar122 = uVar122 + 1;
        bVar131 = *pbVar121;
        pbVar63 = pbVar121 + 1;
        pbVar64 = pbVar121 + 2;
        pbVar65 = pbVar121 + 3;
        bVar135 = pbVar121[4];
        bVar143 = pbVar121[5];
        pbVar66 = pbVar121 + 6;
        pbVar67 = pbVar121 + 7;
        pbVar68 = pbVar121 + 8;
        pbVar69 = pbVar121 + 9;
        pbVar70 = pbVar121 + 10;
        pbVar71 = pbVar121 + 0xb;
        pbVar72 = pbVar121 + 0xc;
        pbVar73 = pbVar121 + 0xd;
        pbVar74 = pbVar121 + 0xe;
        pbVar75 = pbVar121 + 0xf;
        pbVar76 = pbVar121 + 0x10;
        pbVar77 = pbVar121 + 0x11;
        pbVar78 = pbVar121 + 0x12;
        pbVar79 = pbVar121 + 0x13;
        pbVar80 = pbVar121 + 0x14;
        pbVar81 = pbVar121 + 0x15;
        pbVar82 = pbVar121 + 0x16;
        pbVar83 = pbVar121 + 0x17;
        pbVar84 = pbVar121 + 0x18;
        pbVar85 = pbVar121 + 0x19;
        pbVar86 = pbVar121 + 0x1a;
        pbVar87 = pbVar121 + 0x1b;
        pbVar88 = pbVar121 + 0x1c;
        pbVar89 = pbVar121 + 0x1d;
        pbVar90 = pbVar121 + 0x1e;
        pbVar91 = pbVar121 + 0x1f;
        pbVar92 = pbVar121 + 0x20;
        pbVar93 = pbVar121 + 0x21;
        pbVar94 = pbVar121 + 0x22;
        pbVar95 = pbVar121 + 0x23;
        bVar140 = pbVar121[0x24];
        bVar152 = pbVar121[0x25];
        bVar164 = pbVar121[0x26];
        pbVar96 = pbVar121 + 0x27;
        pbVar97 = pbVar121 + 0x28;
        pbVar98 = pbVar121 + 0x29;
        pbVar99 = pbVar121 + 0x2a;
        pbVar100 = pbVar121 + 0x2b;
        pbVar101 = pbVar121 + 0x2c;
        pbVar102 = pbVar121 + 0x2d;
        pbVar103 = pbVar121 + 0x2e;
        pbVar104 = pbVar121 + 0x2f;
        pbVar105 = pbVar121 + 0x30;
        pbVar106 = pbVar121 + 0x31;
        pbVar107 = pbVar121 + 0x32;
        pbVar108 = pbVar121 + 0x33;
        pbVar109 = pbVar121 + 0x34;
        pbVar110 = pbVar121 + 0x35;
        pbVar111 = pbVar121 + 0x36;
        pbVar112 = pbVar121 + 0x37;
        pbVar113 = pbVar121 + 0x38;
        pbVar114 = pbVar121 + 0x39;
        pbVar115 = pbVar121 + 0x3a;
        pbVar116 = pbVar121 + 0x3b;
        pbVar117 = pbVar121 + 0x3c;
        pbVar118 = pbVar121 + 0x3d;
        pbVar119 = pbVar121 + 0x3e;
        pbVar120 = pbVar121 + 0x3f;
        pbVar121 = pbVar121 + 0x40;
        uVar3 = CONCAT12(*pbVar11,CONCAT11(*pbVar7,*pbVar4));
                    /* try { // try from 00394ea8 to 00494eab has its CatchHandler @ 00394ecc */
                    /* try { // try from 00394eb0 to 00494eb3 has its CatchHandler @ 00394ccc */
                    /* catch() { ... } // from try @ 00394d70 with catch @ 00394eb8 */
        uVar2 = CONCAT12(*pbVar100,CONCAT11(*pbVar96,*pbVar95));
                    /* try { // try from 00394ec8 to 00494ecb has its CatchHandler @ 00394ccc */
                    /* catch() { ... } // from try @ 00394ea8 with catch @ 00394ecc */
                    /* try { // try from 00394edc to 00494edf has its CatchHandler @ 00394ccc */
                    /* catch() { ... } // from try @ 00394e10 with catch @ 00394ee0 */
        iVar177 = MP_INT_ABS(((CONCAT12(bVar134,CONCAT11(bVar134,bVar130)) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar135,CONCAT11(bVar135,bVar131)) & 0xff00ff) & 0xffff));
        iVar180 = MP_INT_ABS((uint)bVar134 - (uint)bVar135);
        iVar183 = MP_INT_ABS((uint)*pbVar10 - (uint)*pbVar68);
        iVar186 = MP_INT_ABS((uint)*pbVar14 - (uint)*pbVar72);
        iVar204 = MP_INT_ABS((uVar3 & 0xff) -
                             ((CONCAT12(bVar143,CONCAT11(bVar143,*pbVar63)) & 0xff00ff) & 0xffff));
        iVar206 = MP_INT_ABS(((uVar3 & 0xff00) >> 8) - (uint)bVar143);
        iVar208 = MP_INT_ABS((uint)*pbVar11 - (uint)*pbVar69);
        iVar210 = MP_INT_ABS((uint)*pbVar15 - (uint)*pbVar73);
                    /* try { // try from 00394ef0 to 00494ef3 has its CatchHandler @ 00394ccc */
                    /* catch() { ... } // from try @ 00394f6c with catch @ 00394ef4
                       catch() { ... } // from try @ 00394f94 with catch @ 00394ef4
                       catch() { ... } // from try @ 00394fac with catch @ 00394ef4 */
        iVar176 = MP_INT_ABS((CONCAT12(*pbVar22,(ushort)*pbVar18) & 0xffff) -
                             (CONCAT12(*pbVar80,(ushort)*pbVar76) & 0xffff));
        iVar185 = MP_INT_ABS((uint)*pbVar22 - (uint)*pbVar80);
        iVar148 = MP_INT_ABS((uint)*pbVar26 - (uint)*pbVar84);
        iVar154 = MP_INT_ABS((uint)*pbVar30 - (uint)*pbVar88);
        iVar188 = MP_INT_ABS((CONCAT12(*pbVar23,(ushort)*pbVar19) & 0xffff) -
                             (CONCAT12(*pbVar81,(ushort)*pbVar77) & 0xffff));
        iVar190 = MP_INT_ABS((uint)*pbVar23 - (uint)*pbVar81);
        iVar191 = MP_INT_ABS((uint)*pbVar27 - (uint)*pbVar85);
        iVar193 = MP_INT_ABS((uint)*pbVar31 - (uint)*pbVar89);
        iVar200 = MP_INT_ABS((CONCAT12(*pbVar8,(ushort)*pbVar5) & 0xffff) -
                             (CONCAT12(*pbVar66,(ushort)*pbVar64) & 0xffff));
        iVar201 = MP_INT_ABS((uint)*pbVar8 - (uint)*pbVar66);
        iVar202 = MP_INT_ABS((CONCAT12(*pbVar16,(ushort)*pbVar12) & 0xffff) -
                             (CONCAT12(*pbVar74,(ushort)*pbVar70) & 0xffff));
        iVar203 = MP_INT_ABS((uint)*pbVar16 - (uint)*pbVar74);
        iVar178 = MP_INT_ABS((CONCAT12(*pbVar24,(ushort)*pbVar20) & 0xffff) -
                             (CONCAT12(*pbVar82,(ushort)*pbVar78) & 0xffff));
        iVar181 = MP_INT_ABS((uint)*pbVar24 - (uint)*pbVar82);
        iVar184 = MP_INT_ABS((uint)*pbVar28 - (uint)*pbVar86);
        iVar187 = MP_INT_ABS((uint)*pbVar32 - (uint)*pbVar90);
        iVar194 = MP_INT_ABS(((CONCAT12(bVar139,CONCAT11(bVar139,*pbVar34)) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar140,CONCAT11(bVar140,*pbVar92)) & 0xff00ff) & 0xffff));
        iVar195 = MP_INT_ABS((uint)bVar139 - (uint)bVar140);
        iVar142 = MP_INT_ABS((uint)*pbVar38 - (uint)*pbVar97);
        iVar144 = MP_INT_ABS((uint)*pbVar42 - (uint)*pbVar101);
        iVar196 = MP_INT_ABS((CONCAT12(*pbVar9,(ushort)*pbVar6) & 0xffff) -
                             (CONCAT12(*pbVar67,(ushort)*pbVar65) & 0xffff));
        iVar197 = MP_INT_ABS((uint)*pbVar9 - (uint)*pbVar67);
        iVar198 = MP_INT_ABS((CONCAT12(*pbVar17,(ushort)*pbVar13) & 0xffff) -
                             (CONCAT12(*pbVar75,(ushort)*pbVar71) & 0xffff));
        iVar199 = MP_INT_ABS((uint)*pbVar17 - (uint)*pbVar75);
        iVar205 = MP_INT_ABS(((CONCAT12(bVar151,CONCAT11(bVar151,*pbVar35)) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar152,CONCAT11(bVar152,*pbVar93)) & 0xff00ff) & 0xffff));
        iVar207 = MP_INT_ABS((uint)bVar151 - (uint)bVar152);
        iVar209 = MP_INT_ABS((uint)*pbVar39 - (uint)*pbVar98);
        iVar211 = MP_INT_ABS((uint)*pbVar43 - (uint)*pbVar102);
        iVar168 = MP_INT_ABS((CONCAT12(*pbVar50,(ushort)*pbVar46) & 0xffff) -
                             (CONCAT12(*pbVar109,(ushort)*pbVar105) & 0xffff));
        iVar170 = MP_INT_ABS((uint)*pbVar50 - (uint)*pbVar109);
        iVar172 = MP_INT_ABS((uint)*pbVar54 - (uint)*pbVar113);
        iVar175 = MP_INT_ABS((uint)*pbVar58 - (uint)*pbVar117);
        iVar179 = MP_INT_ABS(((CONCAT12(bVar163,CONCAT11(bVar163,*pbVar36)) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar164,CONCAT11(bVar164,*pbVar94)) & 0xff00ff) & 0xffff));
        iVar145 = MP_INT_ABS((uint)bVar163 - (uint)bVar164);
        iVar149 = MP_INT_ABS((uint)*pbVar40 - (uint)*pbVar99);
        iVar155 = MP_INT_ABS((uint)*pbVar44 - (uint)*pbVar103);
        iVar212 = MP_INT_ABS((CONCAT12(*pbVar25,(ushort)*pbVar21) & 0xffff) -
                             (CONCAT12(*pbVar83,(ushort)*pbVar79) & 0xffff));
        iVar213 = MP_INT_ABS((uint)*pbVar25 - (uint)*pbVar83);
        iVar147 = MP_INT_ABS((uint)*pbVar29 - (uint)*pbVar87);
        iVar153 = MP_INT_ABS((uint)*pbVar33 - (uint)*pbVar91);
        iVar158 = MP_INT_ABS((CONCAT12(*pbVar51,(ushort)*pbVar47) & 0xffff) -
                             (CONCAT12(*pbVar110,(ushort)*pbVar106) & 0xffff));
        iVar160 = MP_INT_ABS((uint)*pbVar51 - (uint)*pbVar110);
        iVar162 = MP_INT_ABS((uint)*pbVar55 - (uint)*pbVar114);
        iVar166 = MP_INT_ABS((uint)*pbVar59 - (uint)*pbVar118);
                    /* try { // try from 00394f6c to 00494f6f has its CatchHandler @ 00394ef4 */
        iVar157 = MP_INT_ABS(((CONCAT12(bVar173,CONCAT11(bVar173,*pbVar37)) & 0xff00ff) & 0xffff) -
                             (uVar2 & 0xff));
        iVar161 = MP_INT_ABS((uint)bVar173 - ((uVar2 & 0xff00) >> 8));
        iVar167 = MP_INT_ABS((uint)*pbVar41 - (uint)*pbVar100);
        iVar171 = MP_INT_ABS((uint)*pbVar45 - (uint)*pbVar104);
        iVar182 = MP_INT_ABS((CONCAT12(*pbVar52,(ushort)*pbVar48) & 0xffff) -
                             (CONCAT12(*pbVar111,(ushort)*pbVar107) & 0xffff));
        iVar146 = MP_INT_ABS((uint)*pbVar52 - (uint)*pbVar111);
        iVar150 = MP_INT_ABS((uint)*pbVar56 - (uint)*pbVar115);
        iVar156 = MP_INT_ABS((uint)*pbVar60 - (uint)*pbVar119);
                    /* try { // try from 00394f8c to 00494f8f has its CatchHandler @ 00394f9c */
                    /* try { // try from 00394f94 to 00494f97 has its CatchHandler @ 00394ef4 */
        iVar159 = MP_INT_ABS((CONCAT12(*pbVar53,(ushort)*pbVar49) & 0xffff) -
                             (CONCAT12(*pbVar112,(ushort)*pbVar108) & 0xffff));
        iVar165 = MP_INT_ABS((uint)*pbVar53 - (uint)*pbVar112);
        iVar169 = MP_INT_ABS((uint)*pbVar57 - (uint)*pbVar116);
        iVar174 = MP_INT_ABS((uint)*pbVar61 - (uint)*pbVar120);
                    /* catch() { ... } // from try @ 00394f8c with catch @ 00394f9c */
        iVar132 = iVar168 + iVar158 + iVar182 + iVar159 +
                  iVar194 + iVar205 + iVar179 + iVar157 +
                  iVar176 + iVar188 + iVar178 + iVar212 +
                  iVar177 + iVar204 + iVar200 + iVar196 + iVar132;
        iVar136 = iVar170 + iVar160 + iVar146 + iVar165 +
                  iVar195 + iVar207 + iVar145 + iVar161 +
                  iVar185 + iVar190 + iVar181 + iVar213 +
                  iVar180 + iVar206 + iVar201 + iVar197 + iVar136;
        iVar137 = iVar172 + iVar162 + iVar150 + iVar169 +
                  iVar142 + iVar209 + iVar149 + iVar167 +
                  iVar148 + iVar191 + iVar184 + iVar147 +
                  iVar183 + iVar208 + iVar202 + iVar198 + iVar137;
        iVar141 = iVar175 + iVar166 + iVar156 + iVar174 +
                  iVar144 + iVar211 + iVar155 + iVar171 +
                  iVar154 + iVar193 + iVar187 + iVar153 +
                  iVar186 + iVar210 + iVar203 + iVar199 + iVar141;
      } while (uVar122 < uVar123);
      iVar132 = iVar132 + iVar136 + iVar137 + iVar141;
                    /* try { // try from 00394fac to 00494faf has its CatchHandler @ 00394ef4 */
                    /* catch() { ... } // from try @ 00394ff0 with catch @ 00394fb0
                       catch() { ... } // from try @ 00395050 with catch @ 00394fb0
                       catch() { ... } // from try @ 00395068 with catch @ 00394fb0 */
      iVar136 = uVar123 * 0x40;
      if (uVar123 * 0x10 != iVar125) goto LAB_00394fbc;
    }
    iVar125 = iVar125 * 4;
  }
                    /* try { // try from 00395050 to 00495053 has its CatchHandler @ 00394fb0 */
  if (iVar125 < param_5) {
                    /* catch() { ... } // from try @ 00395048 with catch @ 00395058 */
    lVar128 = (long)iVar125;
    uVar122 = param_5 - iVar125;
                    /* try { // try from 00395068 to 0049506b has its CatchHandler @ 00394fb0 */
    uVar123 = -(int)(param_1 + lVar128) & 0xf;
                    /* catch() { ... } // from try @ 003950f0 with catch @ 0039506c
                       catch() { ... } // from try @ 00395118 with catch @ 0039506c
                       catch() { ... } // from try @ 00395130 with catch @ 0039506c */
    uVar1 = (ulong)uVar123;
    if (uVar122 < uVar123) {
      uVar1 = (ulong)uVar122;
    }
    if (uVar122 < 0x11) {
      uVar1 = (ulong)uVar122;
    }
    uVar123 = (uint)uVar1;
    if (uVar123 != 0) {
      iVar136 = iVar125 + 1;
      uVar126 = (uint)param_1[lVar128] - (uint)param_2[lVar128];
      uVar127 = (int)uVar126 >> 0x1f;
      iVar132 = iVar132 + ((uVar126 ^ uVar127) - uVar127);
      if (uVar123 != 1) {
        iVar137 = iVar125 + 2;
        uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
        iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar126) - uVar126);
        iVar136 = iVar137;
        if (uVar123 != 2) {
          iVar136 = iVar125 + 3;
          uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                    /* try { // try from 003950f0 to 004950f3 has its CatchHandler @ 0039506c */
          iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar126) - uVar126
                              );
          if (uVar123 != 3) {
            iVar137 = iVar125 + 4;
                    /* try { // try from 00395110 to 00495113 has its CatchHandler @ 00395120 */
            uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                    /* try { // try from 00395118 to 0049511b has its CatchHandler @ 0039506c */
                    /* catch() { ... } // from try @ 00395110 with catch @ 00395120 */
            iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar126) -
                                uVar126);
            iVar136 = iVar137;
            if (uVar123 != 4) {
                    /* try { // try from 00395130 to 00495133 has its CatchHandler @ 0039506c */
                    /* catch() { ... } // from try @ 0039514c with catch @ 00395134
                       catch() { ... } // from try @ 003951ec with catch @ 00395134
                       catch() { ... } // from try @ 00395204 with catch @ 00395134 */
              iVar136 = iVar125 + 5;
              uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                    /* try { // try from 0039514c to 004951c7 has its CatchHandler @ 00395134 */
              iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar126) -
                                  uVar126);
              if (uVar123 != 5) {
                iVar137 = iVar125 + 6;
                uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar126) -
                                    uVar126);
                iVar136 = iVar137;
                if (uVar123 != 6) {
                  iVar136 = iVar125 + 7;
                  uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                  iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar126) -
                                      uVar126);
                  if (uVar123 != 7) {
                    iVar137 = iVar125 + 8;
                    uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                    iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar126)
                                        - uVar126);
                    iVar136 = iVar137;
                    if (uVar123 != 8) {
                    /* try { // try from 003951e4 to 004951e7 has its CatchHandler @ 003951f4 */
                      iVar136 = iVar125 + 9;
                    /* try { // try from 003951ec to 004951ef has its CatchHandler @ 00395134 */
                      uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                    /* catch() { ... } // from try @ 003951e4 with catch @ 003951f4 */
                      iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^
                                           uVar126) - uVar126);
                    /* try { // try from 00395204 to 00495207 has its CatchHandler @ 00395134 */
                      if (uVar123 != 9) {
                        iVar137 = iVar125 + 10;
                    /* catch() { ... } // from try @ 00395230 with catch @ 00395208
                       catch() { ... } // from try @ 00395300 with catch @ 00395208
                       catch() { ... } // from try @ 00395348 with catch @ 00395208
                       catch() { ... } // from try @ 003955a4 with catch @ 00395208
                       catch() { ... } // from try @ 0039568c with catch @ 00395208
                       catch() { ... } // from try @ 003956a0 with catch @ 00395208
                       catch() { ... } // from try @ 003956b4 with catch @ 00395208 */
                        uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                        iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^
                                             uVar126) - uVar126);
                        iVar136 = iVar137;
                    /* try { // try from 00395230 to 004952df has its CatchHandler @ 00395208 */
                        if (uVar123 != 10) {
                          iVar136 = iVar125 + 0xb;
                          uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                          iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^
                                               uVar126) - uVar126);
                          if (uVar123 != 0xb) {
                            iVar137 = iVar125 + 0xc;
                            uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f
                            ;
                            iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^
                                                 uVar126) - uVar126);
                            iVar136 = iVar137;
                            if (uVar123 != 0xc) {
                              iVar136 = iVar125 + 0xd;
                              uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >>
                                        0x1f;
                              iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137]
                                                   ^ uVar126) - uVar126);
                              if (uVar123 != 0xd) {
                                iVar137 = iVar125 + 0xe;
                                uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >>
                                          0x1f;
                                iVar132 = iVar132 + (((uint)param_1[iVar136] -
                                                      (uint)param_2[iVar136] ^ uVar126) - uVar126);
                                iVar136 = iVar137;
                                if (uVar123 != 0xe) {
                                  iVar136 = iVar125 + 0xf;
                    /* try { // try from 003952f8 to 004952fb has its CatchHandler @ 0039567c */
                                  uVar126 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137])
                                            >> 0x1f;
                    /* try { // try from 00395300 to 00495327 has its CatchHandler @ 00395208 */
                                  iVar132 = iVar132 + (((uint)param_1[iVar137] -
                                                        (uint)param_2[iVar137] ^ uVar126) - uVar126)
                                  ;
                                  if (uVar123 == 0x10) {
                                    uVar126 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136])
                                              >> 0x1f;
                                    iVar132 = iVar132 + (((uint)param_1[iVar136] -
                                                          (uint)param_2[iVar136] ^ uVar126) -
                                                        uVar126);
                                    iVar136 = iVar125 + 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar125 = iVar136;
      if (uVar123 == uVar122) goto LAB_00395668;
    }
                    /* try { // try from 00395340 to 00495343 has its CatchHandler @ 00395690 */
                    /* try { // try from 00395348 to 00495553 has its CatchHandler @ 00395208 */
    uVar126 = ((uVar122 - uVar123) - 0x10 >> 4) + 1;
    iVar136 = uVar126 * 0x10;
    if (0xe < (uVar122 - 1) - uVar123) {
      iVar137 = 0;
      iVar141 = 0;
      iVar142 = 0;
      iVar144 = 0;
      uVar127 = 0;
      pbVar121 = param_1 + uVar1 + lVar128;
      pbVar62 = param_2 + uVar1 + lVar128;
      do {
        uVar138 = *(undefined8 *)(pbVar121 + 8);
        uVar133 = *(undefined8 *)pbVar121;
        uVar127 = uVar127 + 1;
        uVar192 = *(undefined8 *)(pbVar62 + 8);
        uVar189 = *(undefined8 *)pbVar62;
        bVar130 = (byte)((ulong)uVar133 >> 8);
        bVar139 = (byte)((ulong)uVar133 >> 0x28);
        bVar131 = (byte)((ulong)uVar189 >> 8);
        bVar140 = (byte)((ulong)uVar189 >> 0x28);
        bVar134 = (byte)((ulong)uVar138 >> 8);
        bVar143 = (byte)((ulong)uVar138 >> 0x28);
        bVar135 = (byte)((ulong)uVar192 >> 8);
        bVar151 = (byte)((ulong)uVar192 >> 0x28);
        iVar182 = MP_INT_ABS(((CONCAT12(bVar130,(short)uVar133) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar131,(short)uVar189) & 0xff00ff) & 0xffff));
        iVar185 = MP_INT_ABS((uint)bVar130 - (uint)bVar131);
        iVar145 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x10) -
                             (uint)(byte)((ulong)uVar189 >> 0x10));
        iVar146 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x18) -
                             (uint)(byte)((ulong)uVar189 >> 0x18));
        iVar161 = MP_INT_ABS((CONCAT12(bVar139,(ushort)(byte)((ulong)uVar133 >> 0x20)) & 0xffff) -
                             (CONCAT12(bVar140,(ushort)(byte)((ulong)uVar189 >> 0x20)) & 0xffff));
        iVar165 = MP_INT_ABS((uint)bVar139 - (uint)bVar140);
        iVar167 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x30) -
                             (uint)(byte)((ulong)uVar189 >> 0x30));
        iVar169 = MP_INT_ABS((uint)(byte)((ulong)uVar133 >> 0x38) -
                             (uint)(byte)((ulong)uVar189 >> 0x38));
        iVar171 = MP_INT_ABS(((CONCAT12(bVar134,(short)uVar138) & 0xff00ff) & 0xffff) -
                             ((CONCAT12(bVar135,(short)uVar192) & 0xff00ff) & 0xffff));
        iVar174 = MP_INT_ABS((uint)bVar134 - (uint)bVar135);
        iVar176 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x10) -
                             (uint)(byte)((ulong)uVar192 >> 0x10));
        iVar179 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x18) -
                             (uint)(byte)((ulong)uVar192 >> 0x18));
        iVar147 = MP_INT_ABS((CONCAT12(bVar143,(ushort)(byte)((ulong)uVar138 >> 0x20)) & 0xffff) -
                             (CONCAT12(bVar151,(ushort)(byte)((ulong)uVar192 >> 0x20)) & 0xffff));
        iVar153 = MP_INT_ABS((uint)bVar143 - (uint)bVar151);
        iVar157 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x30) -
                             (uint)(byte)((ulong)uVar192 >> 0x30));
        iVar159 = MP_INT_ABS((uint)(byte)((ulong)uVar138 >> 0x38) -
                             (uint)(byte)((ulong)uVar192 >> 0x38));
        iVar137 = iVar147 + iVar171 + iVar161 + iVar182 + iVar137;
        iVar141 = iVar153 + iVar174 + iVar165 + iVar185 + iVar141;
        iVar142 = iVar157 + iVar176 + iVar167 + iVar145 + iVar142;
        iVar144 = iVar159 + iVar179 + iVar169 + iVar146 + iVar144;
        pbVar121 = pbVar121 + 0x10;
        pbVar62 = pbVar62 + 0x10;
      } while (uVar127 < uVar126);
      iVar125 = iVar125 + iVar136;
      iVar132 = iVar132 + iVar137 + iVar141 + iVar142 + iVar144;
      if (iVar136 == uVar122 - uVar123) goto LAB_00395668;
    }
    iVar136 = iVar125 + 1;
    uVar123 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >> 0x1f;
    iVar132 = iVar132 + (((uint)param_1[iVar125] - (uint)param_2[iVar125] ^ uVar123) - uVar123);
    if (iVar136 < param_5) {
      iVar137 = iVar125 + 2;
      uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
      iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar123) - uVar123);
      if (iVar137 < param_5) {
        iVar136 = iVar125 + 3;
        uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
        iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar123) - uVar123);
        if (iVar136 < param_5) {
          iVar137 = iVar125 + 4;
          uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
          iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar123) - uVar123
                              );
          if (iVar137 < param_5) {
            iVar136 = iVar125 + 5;
            uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
            iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar123) -
                                uVar123);
            if (iVar136 < param_5) {
              iVar137 = iVar125 + 6;
              uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
              iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar123) -
                                  uVar123);
              if (iVar137 < param_5) {
                iVar136 = iVar125 + 7;
                uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar123) -
                                    uVar123);
                if (iVar136 < param_5) {
                  iVar137 = iVar125 + 8;
                  uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                  iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^ uVar123) -
                                      uVar123);
                  if (iVar137 < param_5) {
                    iVar136 = iVar125 + 9;
                    uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                    iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^ uVar123)
                                        - uVar123);
                    if (iVar136 < param_5) {
                      iVar137 = iVar125 + 10;
                      uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                      iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^
                                           uVar123) - uVar123);
                      if (iVar137 < param_5) {
                    /* try { // try from 0039559c to 0049559f has its CatchHandler @ 003956a4 */
                        iVar136 = iVar125 + 0xb;
                    /* try { // try from 003955a4 to 00495653 has its CatchHandler @ 00395208 */
                        uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f;
                        iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^
                                             uVar123) - uVar123);
                        if (iVar136 < param_5) {
                          iVar137 = iVar125 + 0xc;
                          uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >> 0x1f;
                          iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136] ^
                                               uVar123) - uVar123);
                          if (iVar137 < param_5) {
                            iVar136 = iVar125 + 0xd;
                            uVar123 = (int)((uint)param_1[iVar137] - (uint)param_2[iVar137]) >> 0x1f
                            ;
                            iVar132 = iVar132 + (((uint)param_1[iVar137] - (uint)param_2[iVar137] ^
                                                 uVar123) - uVar123);
                            if (iVar136 < param_5) {
                              iVar125 = iVar125 + 0xe;
                              uVar123 = (int)((uint)param_1[iVar136] - (uint)param_2[iVar136]) >>
                                        0x1f;
                              iVar132 = iVar132 + (((uint)param_1[iVar136] - (uint)param_2[iVar136]
                                                   ^ uVar123) - uVar123);
                              if (iVar125 < param_5) {
                                uVar123 = (int)((uint)param_1[iVar125] - (uint)param_2[iVar125]) >>
                                          0x1f;
                                iVar132 = iVar132 + (((uint)param_1[iVar125] -
                                                      (uint)param_2[iVar125] ^ uVar123) - uVar123);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00395668:
  *param_4 = iVar124 + iVar132;
  return 0;
}


==================================================================

### FUNC 00395698 (2060 bytes) name=FUN_00395698

undefined8 FUN_00395698(byte *param_1,long param_2,int *param_3,int param_4,uint param_5)

{
  ulong uVar1;
  uint3 uVar2;
  uint3 uVar3;
  uint3 uVar4;
  byte *pbVar5;
  uint uVar56;
  uint uVar57;
  int iVar58;
  long lVar59;
  uint uVar60;
  ushort uVar61;
  ushort uVar62;
  ushort uVar63;
  byte bVar64;
  byte bVar66;
  int iVar65;
  byte bVar69;
  int iVar67;
  int iVar68;
  byte bVar72;
  int iVar70;
  int iVar71;
  byte bVar75;
  int iVar73;
  int iVar74;
  uint uVar76;
  uint uVar77;
  uint uVar78;
  byte bVar80;
  undefined8 uVar79;
  byte bVar82;
  undefined8 uVar81;
  byte bVar83;
  byte bVar84;
  byte bVar85;
  byte bVar87;
  uint uVar86;
  byte bVar88;
  byte bVar90;
  uint uVar89;
  byte bVar92;
  uint uVar91;
  uint uVar93;
  uint uVar94;
  uint uVar95;
  uint uVar96;
  int iVar97;
  uint uVar98;
  uint uVar99;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  
  iVar58 = *param_3;
                    /* try { // try from 003956a0 to 004956a3 has its CatchHandler @ 00395208 */
  if (param_2 != 0) {
                    /* catch() { ... } // from try @ 0039559c with catch @ 003956a4 */
    if (0 < param_4) {
      uVar57 = -(int)param_1;
                    /* try { // try from 003956b4 to 004956b7 has its CatchHandler @ 00395208 */
                    /* catch() { ... } // from try @ 0039578c with catch @ 003956b8
                       catch() { ... } // from try @ 003957b4 with catch @ 003956b8
                       catch() { ... } // from try @ 00395808 with catch @ 003956b8 */
      lVar59 = 0;
      do {
        if ((*(char *)(param_2 + lVar59) != '\0') && (0 < (int)param_5)) {
          uVar56 = uVar57 & 0xf;
          if (param_5 < (uVar57 & 0xf)) {
            uVar56 = param_5;
          }
          if (param_5 < 0x12) {
            uVar56 = param_5;
          }
          uVar60 = uVar56;
          if (uVar56 != 0) {
            iVar58 = iVar58 + (uint)*param_1 * (uint)*param_1;
            if ((((uVar56 != 1) &&
                 (iVar58 = iVar58 + (uint)param_1[1] * (uint)param_1[1], uVar56 != 2)) &&
                (iVar58 = iVar58 + (uint)param_1[2] * (uint)param_1[2], uVar56 != 3)) &&
               (((iVar58 = iVar58 + (uint)param_1[3] * (uint)param_1[3], uVar56 != 4 &&
                 (iVar58 = iVar58 + (uint)param_1[4] * (uint)param_1[4], uVar56 != 5)) &&
                (iVar58 = iVar58 + (uint)param_1[5] * (uint)param_1[5], uVar56 != 6)))) {
              iVar58 = iVar58 + (uint)param_1[6] * (uint)param_1[6];
              if (uVar56 == 7) {
                uVar60 = 7;
              }
              else {
                iVar58 = iVar58 + (uint)param_1[7] * (uint)param_1[7];
                    /* try { // try from 0039578c to 0049578f has its CatchHandler @ 003956b8 */
                    /* try { // try from 003957ac to 004957af has its CatchHandler @ 003957f8 */
                    /* try { // try from 003957b4 to 004957b7 has its CatchHandler @ 003956b8 */
                if (((uVar56 != 8) &&
                    (iVar58 = iVar58 + (uint)param_1[8] * (uint)param_1[8], uVar56 != 9)) &&
                   ((iVar58 = iVar58 + (uint)param_1[9] * (uint)param_1[9], uVar56 != 10 &&
                    ((((iVar58 = iVar58 + (uint)param_1[10] * (uint)param_1[10], uVar56 != 0xb &&
                       (iVar58 = iVar58 + (uint)param_1[0xb] * (uint)param_1[0xb], uVar56 != 0xc))
                      && (iVar58 = iVar58 + (uint)param_1[0xc] * (uint)param_1[0xc], uVar56 != 0xd))
                     && ((iVar58 = iVar58 + (uint)param_1[0xd] * (uint)param_1[0xd], uVar56 != 0xe
                         && (iVar58 = iVar58 + (uint)param_1[0xe] * (uint)param_1[0xe],
                            uVar56 != 0xf)))))))) {
                  iVar58 = iVar58 + (uint)param_1[0xf] * (uint)param_1[0xf];
                  if (uVar56 == 0x11) {
                    iVar58 = iVar58 + (uint)param_1[0x10] * (uint)param_1[0x10];
                  }
                  else {
                    uVar60 = 0x10;
                  }
                }
              }
            }
                    /* catch() { ... } // from try @ 003957ac with catch @ 003957f8 */
            if (param_5 == uVar56) goto LAB_0039599c;
          }
                    /* try { // try from 00395808 to 0049580b has its CatchHandler @ 003956b8 */
                    /* catch() { ... } // from try @ 003958a4 with catch @ 0039580c
                       catch() { ... } // from try @ 003958cc with catch @ 0039580c
                       catch() { ... } // from try @ 003958e4 with catch @ 0039580c */
          uVar77 = ((param_5 - uVar56) - 0x10 >> 4) + 1;
          iVar97 = uVar77 * 0x10;
          if (0xe < (param_5 - 1) - uVar56) {
            iVar65 = 0;
            iVar67 = 0;
            iVar70 = 0;
            iVar73 = 0;
            uVar94 = 0;
            pbVar55 = param_1 + uVar56;
            do {
              uVar81 = *(undefined8 *)(pbVar55 + 8);
              uVar79 = *(undefined8 *)pbVar55;
              uVar94 = uVar94 + 1;
              bVar64 = (byte)((ulong)uVar79 >> 8);
              bVar69 = (byte)((ulong)uVar79 >> 0x28);
              bVar66 = (byte)((ulong)uVar81 >> 8);
              bVar72 = (byte)((ulong)uVar81 >> 0x28);
              uVar93 = CONCAT12(bVar64,(ushort)(byte)uVar79) & 0xffff;
              uVar96 = (uint)(byte)((ulong)uVar79 >> 0x10);
              uVar78 = (uint)CONCAT12(bVar69,(ushort)(byte)((ulong)uVar79 >> 0x20));
              uVar61 = (ushort)(byte)((ulong)uVar79 >> 0x30);
              uVar62 = (ushort)(byte)((ulong)uVar79 >> 0x38);
              uVar86 = (CONCAT12(bVar66,(short)uVar81) & 0xff00ff) & 0xffff;
              uVar89 = (uint)(byte)((ulong)uVar81 >> 0x10);
              uVar91 = (uint)(byte)((ulong)uVar81 >> 0x18);
              uVar76 = CONCAT12(bVar72,(ushort)(byte)((ulong)uVar81 >> 0x20)) & 0xffff;
              uVar98 = (uint)(byte)((ulong)uVar81 >> 0x30);
              uVar95 = (uint)(byte)((ulong)uVar79 >> 0x18);
              uVar99 = (uint)(byte)((ulong)uVar81 >> 0x38);
              iVar65 = iVar65 + uVar93 * uVar93 + (uVar78 & 0xffff) * (uVar78 & 0xffff) +
                       uVar86 * uVar86 + uVar76 * uVar76;
              iVar67 = iVar67 + (uint)bVar64 * (uint)bVar64 +
                       (uint)(ushort)bVar69 * (uint)(ushort)bVar69 + (uint)bVar66 * (uint)bVar66 +
                       (uint)bVar72 * (uint)bVar72;
              iVar70 = iVar70 + uVar96 * uVar96 + (uint)uVar61 * (uint)uVar61 + uVar89 * uVar89 +
                       uVar98 * uVar98;
              iVar73 = iVar73 + uVar95 * uVar95 + (uint)uVar62 * (uint)uVar62 + uVar91 * uVar91 +
                       uVar99 * uVar99;
              pbVar55 = pbVar55 + 0x10;
            } while (uVar94 < uVar77);
            uVar60 = uVar60 + iVar97;
            iVar58 = iVar58 + iVar65 + iVar67 + iVar70 + iVar73;
            if (param_5 - uVar56 == iVar97) goto LAB_0039599c;
          }
          iVar58 = iVar58 + (uint)param_1[(int)uVar60] * (uint)param_1[(int)uVar60];
          if ((int)(uVar60 + 1) < (int)param_5) {
            iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 1)] * (uint)param_1[(int)(uVar60 + 1)];
            if ((int)(uVar60 + 2) < (int)param_5) {
                    /* try { // try from 003958a4 to 004958a7 has its CatchHandler @ 0039580c */
              iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 2)] * (uint)param_1[(int)(uVar60 + 2)];
              if ((int)(uVar60 + 3) < (int)param_5) {
                    /* try { // try from 003958c4 to 004958c7 has its CatchHandler @ 003958d4 */
                iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 3)] *
                                  (uint)param_1[(int)(uVar60 + 3)];
                if ((int)(uVar60 + 4) < (int)param_5) {
                    /* try { // try from 003958cc to 004958cf has its CatchHandler @ 0039580c */
                    /* catch() { ... } // from try @ 003958c4 with catch @ 003958d4 */
                  iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 4)] *
                                    (uint)param_1[(int)(uVar60 + 4)];
                  if ((int)(uVar60 + 5) < (int)param_5) {
                    /* try { // try from 003958e4 to 004958e7 has its CatchHandler @ 0039580c */
                    /* catch() { ... } // from try @ 00395980 with catch @ 003958e8
                       catch() { ... } // from try @ 003959a8 with catch @ 003958e8
                       catch() { ... } // from try @ 003959c4 with catch @ 003958e8 */
                    iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 5)] *
                                      (uint)param_1[(int)(uVar60 + 5)];
                    if ((int)(uVar60 + 6) < (int)param_5) {
                      iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 6)] *
                                        (uint)param_1[(int)(uVar60 + 6)];
                      if ((int)(uVar60 + 7) < (int)param_5) {
                        iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 7)] *
                                          (uint)param_1[(int)(uVar60 + 7)];
                        if ((int)(uVar60 + 8) < (int)param_5) {
                          iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 8)] *
                                            (uint)param_1[(int)(uVar60 + 8)];
                          if ((int)(uVar60 + 9) < (int)param_5) {
                            iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 9)] *
                                              (uint)param_1[(int)(uVar60 + 9)];
                            if ((int)(uVar60 + 10) < (int)param_5) {
                              iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 10)] *
                                                (uint)param_1[(int)(uVar60 + 10)];
                              if ((int)(uVar60 + 0xb) < (int)param_5) {
                                iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 0xb)] *
                                                  (uint)param_1[(int)(uVar60 + 0xb)];
                                if ((int)(uVar60 + 0xc) < (int)param_5) {
                                  iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 0xc)] *
                                                    (uint)param_1[(int)(uVar60 + 0xc)];
                                  if ((int)(uVar60 + 0xd) < (int)param_5) {
                    /* try { // try from 00395980 to 00495983 has its CatchHandler @ 003958e8 */
                                    iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 0xd)] *
                                                      (uint)param_1[(int)(uVar60 + 0xd)];
                                    if ((int)(uVar60 + 0xe) < (int)param_5) {
                                      iVar58 = iVar58 + (uint)param_1[(int)(uVar60 + 0xe)] *
                                                        (uint)param_1[(int)(uVar60 + 0xe)];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039599c:
        lVar59 = lVar59 + 1;
                    /* try { // try from 003959a0 to 004959a3 has its CatchHandler @ 003959b4 */
        param_1 = param_1 + (int)param_5;
                    /* try { // try from 003959a8 to 004959ab has its CatchHandler @ 003958e8 */
        uVar57 = uVar57 - param_5;
      } while ((int)lVar59 < param_4);
    }
                    /* catch() { ... } // from try @ 003959a0 with catch @ 003959b4 */
    *param_3 = iVar58;
    return 0;
  }
  param_4 = param_4 * param_5;
  iVar97 = 0;
  iVar65 = iVar97;
  if (0 < param_4 + -3) {
    uVar57 = param_4 - 4U >> 2;
    iVar65 = uVar57 + 1;
    uVar57 = (uVar57 - 0xf >> 4) + 1;
    if (param_4 - 4U < 0x3c) {
      iVar67 = 0;
LAB_00395b10:
      pbVar55 = param_1 + iVar67;
      do {
        iVar67 = iVar67 + 4;
        iVar97 = iVar97 + (uint)pbVar55[1] * (uint)pbVar55[1] + (uint)*pbVar55 * (uint)*pbVar55 +
                          (uint)pbVar55[2] * (uint)pbVar55[2] + (uint)pbVar55[3] * (uint)pbVar55[3];
        pbVar55 = pbVar55 + 4;
      } while (iVar67 < param_4 + -3);
    }
    else {
      iVar97 = 0;
      iVar67 = 0;
      iVar70 = 0;
      iVar73 = 0;
      uVar56 = 0;
      pbVar55 = param_1;
      do {
        bVar64 = *pbVar55;
        pbVar5 = pbVar55 + 1;
        pbVar6 = pbVar55 + 2;
        pbVar7 = pbVar55 + 3;
        bVar66 = pbVar55[4];
        pbVar8 = pbVar55 + 5;
        bVar83 = pbVar55[6];
        bVar87 = pbVar55[7];
        pbVar9 = pbVar55 + 8;
        pbVar10 = pbVar55 + 9;
        pbVar11 = pbVar55 + 10;
        pbVar12 = pbVar55 + 0xb;
        pbVar13 = pbVar55 + 0xc;
        pbVar14 = pbVar55 + 0xd;
        pbVar15 = pbVar55 + 0xe;
        pbVar16 = pbVar55 + 0xf;
        pbVar17 = pbVar55 + 0x10;
        pbVar18 = pbVar55 + 0x11;
        pbVar19 = pbVar55 + 0x12;
        pbVar20 = pbVar55 + 0x13;
        bVar69 = pbVar55[0x14];
        bVar80 = pbVar55[0x15];
        bVar84 = pbVar55[0x16];
        bVar88 = pbVar55[0x17];
        pbVar21 = pbVar55 + 0x18;
        pbVar22 = pbVar55 + 0x19;
        pbVar23 = pbVar55 + 0x1a;
        pbVar24 = pbVar55 + 0x1b;
        pbVar25 = pbVar55 + 0x1c;
        pbVar26 = pbVar55 + 0x1d;
        pbVar27 = pbVar55 + 0x1e;
        pbVar28 = pbVar55 + 0x1f;
        pbVar29 = pbVar55 + 0x20;
        pbVar30 = pbVar55 + 0x21;
        pbVar31 = pbVar55 + 0x22;
        pbVar32 = pbVar55 + 0x23;
        bVar72 = pbVar55[0x24];
        pbVar33 = pbVar55 + 0x25;
        pbVar34 = pbVar55 + 0x26;
        bVar90 = pbVar55[0x27];
        pbVar35 = pbVar55 + 0x28;
        pbVar36 = pbVar55 + 0x29;
        pbVar37 = pbVar55 + 0x2a;
        pbVar38 = pbVar55 + 0x2b;
        pbVar39 = pbVar55 + 0x2c;
        pbVar40 = pbVar55 + 0x2d;
        pbVar41 = pbVar55 + 0x2e;
        pbVar42 = pbVar55 + 0x2f;
        pbVar43 = pbVar55 + 0x30;
        pbVar44 = pbVar55 + 0x31;
        pbVar45 = pbVar55 + 0x32;
        pbVar46 = pbVar55 + 0x33;
        bVar75 = pbVar55[0x34];
        bVar82 = pbVar55[0x35];
        bVar85 = pbVar55[0x36];
        bVar92 = pbVar55[0x37];
        pbVar47 = pbVar55 + 0x38;
        pbVar48 = pbVar55 + 0x39;
        pbVar49 = pbVar55 + 0x3a;
        pbVar50 = pbVar55 + 0x3b;
        pbVar51 = pbVar55 + 0x3c;
        pbVar52 = pbVar55 + 0x3d;
        pbVar53 = pbVar55 + 0x3e;
        pbVar54 = pbVar55 + 0x3f;
        pbVar55 = pbVar55 + 0x40;
        uVar56 = uVar56 + 1;
                    /* try { // try from 00395a2c to 00495a2f has its CatchHandler @ 003959c8 */
        uVar2 = CONCAT12(*pbVar8,CONCAT11(*pbVar8,*pbVar5)) & 0xff00ff;
                    /* try { // try from 00395a4c to 00495a4f has its CatchHandler @ 00395c70 */
        uVar3 = CONCAT12(*pbVar33,CONCAT11(*pbVar33,*pbVar30)) & 0xff00ff;
                    /* try { // try from 00395a54 to 00495b7f has its CatchHandler @ 003959c8 */
        uVar61 = (ushort)(byte)(uVar2 >> 0x10);
        uVar99 = CONCAT12(bVar66,(ushort)bVar64) & 0xffff;
        uVar77 = CONCAT12(bVar80,(ushort)*pbVar18) & 0xffff;
        uVar62 = (ushort)(byte)(uVar3 >> 0x10);
        uVar91 = CONCAT12(bVar83,(ushort)*pbVar6) & 0xffff;
        uVar4 = CONCAT12(*pbVar34,CONCAT11(*pbVar34,*pbVar31)) & 0xff00ff;
        uVar86 = (CONCAT12(bVar72,CONCAT11(bVar72,*pbVar29)) & 0xff00ff) & 0xffff;
        uVar89 = CONCAT12(bVar87,(ushort)*pbVar7) & 0xffff;
        uVar60 = CONCAT12(bVar82,(ushort)*pbVar44) & 0xffff;
        uVar63 = (ushort)(byte)(uVar4 >> 0x10);
        uVar76 = CONCAT12(bVar75,(ushort)*pbVar43) & 0xffff;
        uVar78 = CONCAT12(bVar85,(ushort)*pbVar45) & 0xffff;
        uVar98 = (CONCAT12(bVar90,CONCAT11(bVar90,*pbVar32)) & 0xff00ff) & 0xffff;
        uVar94 = CONCAT12(bVar92,(ushort)*pbVar46) & 0xffff;
        iVar97 = uVar60 * uVar60 + uVar76 * uVar76 + uVar78 * uVar78 + uVar94 * uVar94 +
                 (uVar3 & 0xffff) * (uVar3 & 0xffff) + uVar86 * uVar86 +
                 (uVar4 & 0xffff) * (uVar4 & 0xffff) + uVar98 * uVar98 +
                 uVar77 * uVar77 +
                 (CONCAT12(bVar69,(ushort)*pbVar17) & 0xffff) *
                 (CONCAT12(bVar69,(ushort)*pbVar17) & 0xffff) +
                 (CONCAT12(bVar84,(ushort)*pbVar19) & 0xffff) *
                 (CONCAT12(bVar84,(ushort)*pbVar19) & 0xffff) +
                 (CONCAT12(bVar88,(ushort)*pbVar20) & 0xffff) *
                 (CONCAT12(bVar88,(ushort)*pbVar20) & 0xffff) +
                 (uVar2 & 0xffff) * (uVar2 & 0xffff) + uVar99 * uVar99 + uVar91 * uVar91 +
                 uVar89 * uVar89 + iVar97;
        iVar67 = (uint)bVar82 * (uint)bVar82 + (uint)bVar75 * (uint)bVar75 +
                 (uint)bVar85 * (uint)bVar85 + (uint)bVar92 * (uint)bVar92 +
                 (uint)uVar62 * (uint)uVar62 + (uint)bVar72 * (uint)bVar72 +
                 (uint)uVar63 * (uint)uVar63 + (uint)bVar90 * (uint)bVar90 +
                 (uint)bVar80 * (uint)bVar80 + (uint)(ushort)bVar69 * (uint)(ushort)bVar69 +
                 (uint)(ushort)bVar84 * (uint)(ushort)bVar84 +
                 (uint)(ushort)bVar88 * (uint)(ushort)bVar88 +
                 (uint)uVar61 * (uint)uVar61 + (uint)bVar66 * (uint)bVar66 +
                 (uint)bVar83 * (uint)bVar83 + (uint)bVar87 * (uint)bVar87 + iVar67;
        iVar70 = (uint)*pbVar48 * (uint)*pbVar48 + (uint)*pbVar47 * (uint)*pbVar47 +
                 (uint)*pbVar49 * (uint)*pbVar49 + (uint)*pbVar50 * (uint)*pbVar50 +
                 (uint)(ushort)*pbVar36 * (uint)(ushort)*pbVar36 + (uint)*pbVar35 * (uint)*pbVar35 +
                 (uint)(ushort)*pbVar37 * (uint)(ushort)*pbVar37 + (uint)*pbVar38 * (uint)*pbVar38 +
                 (uint)*pbVar22 * (uint)*pbVar22 + (uint)(ushort)*pbVar21 * (uint)(ushort)*pbVar21 +
                 (uint)(ushort)*pbVar23 * (uint)(ushort)*pbVar23 +
                 (uint)(ushort)*pbVar24 * (uint)(ushort)*pbVar24 +
                 (uint)(ushort)*pbVar10 * (uint)(ushort)*pbVar10 + (uint)*pbVar9 * (uint)*pbVar9 +
                 (uint)*pbVar11 * (uint)*pbVar11 + (uint)*pbVar12 * (uint)*pbVar12 + iVar70;
        iVar73 = (uint)*pbVar52 * (uint)*pbVar52 + (uint)*pbVar51 * (uint)*pbVar51 +
                 (uint)*pbVar53 * (uint)*pbVar53 + (uint)*pbVar54 * (uint)*pbVar54 +
                 (uint)*pbVar40 * (uint)*pbVar40 + (uint)*pbVar39 * (uint)*pbVar39 +
                 (uint)(ushort)*pbVar41 * (uint)(ushort)*pbVar41 + (uint)*pbVar42 * (uint)*pbVar42 +
                 (uint)*pbVar26 * (uint)*pbVar26 + (uint)(ushort)*pbVar25 * (uint)(ushort)*pbVar25 +
                 (uint)(ushort)*pbVar27 * (uint)(ushort)*pbVar27 +
                 (uint)(ushort)*pbVar28 * (uint)(ushort)*pbVar28 +
                 (uint)*pbVar14 * (uint)*pbVar14 + (uint)*pbVar13 * (uint)*pbVar13 +
                 (uint)*pbVar15 * (uint)*pbVar15 + (uint)*pbVar16 * (uint)*pbVar16 + iVar73;
      } while (uVar56 < uVar57);
      iVar97 = iVar97 + iVar67 + iVar70 + iVar73;
      iVar67 = uVar57 * 0x40;
      if (iVar65 != uVar57 * 0x10) goto LAB_00395b10;
    }
    iVar65 = iVar65 * 4;
  }
  if (iVar65 < param_4) {
    uVar56 = param_4 - iVar65;
    uVar57 = -(int)(param_1 + iVar65) & 0xf;
    uVar1 = (ulong)uVar57;
    if (uVar56 < uVar57) {
      uVar1 = (ulong)uVar56;
    }
    if (uVar56 < 0x12) {
      uVar1 = (ulong)uVar56;
    }
    uVar57 = (uint)uVar1;
    iVar67 = iVar65;
    if (uVar57 != 0) {
      iVar67 = iVar65 + 1;
      uVar60 = (uint)param_1[iVar65];
      iVar97 = iVar97 + uVar60 * uVar60;
      if (uVar57 != 1) {
        lVar59 = (long)iVar67;
        iVar67 = iVar65 + 2;
                    /* try { // try from 00395b9c to 00495b9f has its CatchHandler @ 00395c84 */
        iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
        if (uVar57 != 2) {
                    /* try { // try from 00395ba4 to 00495c3b has its CatchHandler @ 003959c8 */
          lVar59 = (long)iVar67;
          iVar67 = iVar65 + 3;
          iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
          if (uVar57 != 3) {
            lVar59 = (long)iVar67;
            iVar67 = iVar65 + 4;
            iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
            if (uVar57 != 4) {
              lVar59 = (long)iVar67;
              iVar67 = iVar65 + 5;
              iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
              if (uVar57 != 5) {
                lVar59 = (long)iVar67;
                iVar67 = iVar65 + 6;
                iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                if (uVar57 != 6) {
                  lVar59 = (long)iVar67;
                  iVar67 = iVar65 + 7;
                  iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                  if (uVar57 != 7) {
                    lVar59 = (long)iVar67;
                    iVar67 = iVar65 + 8;
                    iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                    if (uVar57 != 8) {
                      lVar59 = (long)iVar67;
                      iVar67 = iVar65 + 9;
                      iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                      if (uVar57 != 9) {
                        lVar59 = (long)iVar67;
                        iVar67 = iVar65 + 10;
                        iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                        if (uVar57 != 10) {
                          lVar59 = (long)iVar67;
                          iVar67 = iVar65 + 0xb;
                          iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                          if (uVar57 != 0xb) {
                    /* try { // try from 00395c58 to 00495c5b has its CatchHandler @ 00395c98 */
                            lVar59 = (long)iVar67;
                            iVar67 = iVar65 + 0xc;
                    /* try { // try from 00395c64 to 00495c67 has its CatchHandler @ 003959c8 */
                            iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                            if (uVar57 != 0xc) {
                              lVar59 = (long)iVar67;
                    /* catch() { ... } // from try @ 00395a4c with catch @ 00395c70 */
                              iVar67 = iVar65 + 0xd;
                              iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                              if (uVar57 != 0xd) {
                    /* try { // try from 00395c80 to 00495c83 has its CatchHandler @ 003959c8 */
                                lVar59 = (long)iVar67;
                    /* catch() { ... } // from try @ 00395b9c with catch @ 00395c84 */
                                iVar67 = iVar65 + 0xe;
                                iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                                if (uVar57 != 0xe) {
                    /* try { // try from 00395c94 to 00495c97 has its CatchHandler @ 003959c8 */
                                  lVar59 = (long)iVar67;
                    /* catch() { ... } // from try @ 00395c58 with catch @ 00395c98 */
                                  iVar67 = iVar65 + 0xf;
                                  iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                                  if (uVar57 != 0xf) {
                    /* try { // try from 00395ca8 to 00495cab has its CatchHandler @ 003959c8 */
                                    lVar59 = (long)iVar67;
                    /* catch() { ... } // from try @ 00395ce0 with catch @ 00395cac
                       catch() { ... } // from try @ 00395dc0 with catch @ 00395cac
                       catch() { ... } // from try @ 00395e08 with catch @ 00395cac */
                                    iVar67 = iVar65 + 0x10;
                                    iVar97 = iVar97 + (uint)param_1[lVar59] * (uint)param_1[lVar59];
                                    if (uVar57 == 0x11) {
                                      lVar59 = (long)iVar67;
                                      iVar67 = iVar65 + 0x11;
                                      iVar97 = iVar97 + (uint)param_1[lVar59] *
                                                        (uint)param_1[lVar59];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (uVar57 == uVar56) goto LAB_00395e74;
    }
                    /* try { // try from 00395ce0 to 00495d9b has its CatchHandler @ 00395cac */
    uVar60 = ((uVar56 - uVar57) - 0x10 >> 4) + 1;
    iVar70 = uVar60 * 0x10;
    if (0xe < (uVar56 - 1) - uVar57) {
      iVar73 = 0;
      iVar68 = 0;
      iVar71 = 0;
      iVar74 = 0;
      uVar77 = 0;
      pbVar55 = param_1 + uVar1 + (long)iVar65;
      do {
        uVar81 = *(undefined8 *)(pbVar55 + 8);
        uVar79 = *(undefined8 *)pbVar55;
        uVar77 = uVar77 + 1;
        bVar64 = (byte)((ulong)uVar79 >> 8);
        bVar69 = (byte)((ulong)uVar79 >> 0x28);
        bVar66 = (byte)((ulong)uVar81 >> 8);
        bVar72 = (byte)((ulong)uVar81 >> 0x28);
        uVar91 = CONCAT12(bVar64,(ushort)(byte)uVar79) & 0xffff;
        uVar93 = (uint)(byte)((ulong)uVar79 >> 0x10);
        uVar94 = (uint)CONCAT12(bVar69,(ushort)(byte)((ulong)uVar79 >> 0x20));
        uVar61 = (ushort)(byte)((ulong)uVar79 >> 0x30);
        uVar62 = (ushort)(byte)((ulong)uVar79 >> 0x38);
        uVar99 = (CONCAT12(bVar66,(short)uVar81) & 0xff00ff) & 0xffff;
        uVar86 = (uint)(byte)((ulong)uVar81 >> 0x10);
        uVar89 = (uint)(byte)((ulong)uVar81 >> 0x18);
        uVar78 = CONCAT12(bVar72,(ushort)(byte)((ulong)uVar81 >> 0x20)) & 0xffff;
        uVar76 = (uint)(byte)((ulong)uVar81 >> 0x30);
        uVar96 = (uint)(byte)((ulong)uVar79 >> 0x18);
        uVar98 = (uint)(byte)((ulong)uVar81 >> 0x38);
        iVar73 = iVar73 + uVar91 * uVar91 + (uVar94 & 0xffff) * (uVar94 & 0xffff) + uVar99 * uVar99
                 + uVar78 * uVar78;
        iVar68 = iVar68 + (uint)bVar64 * (uint)bVar64 + (uint)(ushort)bVar69 * (uint)(ushort)bVar69
                 + (uint)bVar66 * (uint)bVar66 + (uint)bVar72 * (uint)bVar72;
        iVar71 = iVar71 + uVar93 * uVar93 + (uint)uVar61 * (uint)uVar61 + uVar86 * uVar86 +
                 uVar76 * uVar76;
        iVar74 = iVar74 + uVar96 * uVar96 + (uint)uVar62 * (uint)uVar62 + uVar89 * uVar89 +
                 uVar98 * uVar98;
        pbVar55 = pbVar55 + 0x10;
      } while (uVar77 < uVar60);
      iVar67 = iVar67 + iVar70;
      iVar97 = iVar97 + iVar73 + iVar68 + iVar71 + iVar74;
      if (iVar70 == uVar56 - uVar57) goto LAB_00395e74;
    }
    iVar97 = iVar97 + (uint)param_1[iVar67] * (uint)param_1[iVar67];
    if (iVar67 + 1 < param_4) {
      iVar97 = iVar97 + (uint)param_1[iVar67 + 1] * (uint)param_1[iVar67 + 1];
      if (iVar67 + 2 < param_4) {
        iVar97 = iVar97 + (uint)param_1[iVar67 + 2] * (uint)param_1[iVar67 + 2];
        if (iVar67 + 3 < param_4) {
          iVar97 = iVar97 + (uint)param_1[iVar67 + 3] * (uint)param_1[iVar67 + 3];
          if (iVar67 + 4 < param_4) {
            iVar97 = iVar97 + (uint)param_1[iVar67 + 4] * (uint)param_1[iVar67 + 4];
            if (iVar67 + 5 < param_4) {
                    /* try { // try from 00395db8 to 00495dbb has its CatchHandler @ 00395df8 */
                    /* try { // try from 00395dc0 to 00495dd3 has its CatchHandler @ 00395cac */
              iVar97 = iVar97 + (uint)param_1[iVar67 + 5] * (uint)param_1[iVar67 + 5];
              if (iVar67 + 6 < param_4) {
                iVar97 = iVar97 + (uint)param_1[iVar67 + 6] * (uint)param_1[iVar67 + 6];
                if (iVar67 + 7 < param_4) {
                  iVar97 = iVar97 + (uint)param_1[iVar67 + 7] * (uint)param_1[iVar67 + 7];
                  if (iVar67 + 8 < param_4) {
                    /* catch() { ... } // from try @ 00395db8 with catch @ 00395df8 */
                    iVar97 = iVar97 + (uint)param_1[iVar67 + 8] * (uint)param_1[iVar67 + 8];
                    if (iVar67 + 9 < param_4) {
                    /* try { // try from 00395e08 to 00495e0b has its CatchHandler @ 00395cac */
                    /* catch() { ... } // from try @ 00395f2c with catch @ 00395e0c
                       catch() { ... } // from try @ 00395f54 with catch @ 00395e0c
                       catch() { ... } // from try @ 0039620c with catch @ 00395e0c
                       catch() { ... } // from try @ 00396250 with catch @ 00395e0c
                       catch() { ... } // from try @ 00396284 with catch @ 00395e0c */
                      iVar97 = iVar97 + (uint)param_1[iVar67 + 9] * (uint)param_1[iVar67 + 9];
                      if (iVar67 + 10 < param_4) {
                        iVar97 = iVar97 + (uint)param_1[iVar67 + 10] * (uint)param_1[iVar67 + 10];
                        if (iVar67 + 0xb < param_4) {
                          iVar97 = iVar97 + (uint)param_1[iVar67 + 0xb] *
                                            (uint)param_1[iVar67 + 0xb];
                          if (iVar67 + 0xc < param_4) {
                            iVar97 = iVar97 + (uint)param_1[iVar67 + 0xc] *
                                              (uint)param_1[iVar67 + 0xc];
                            if (iVar67 + 0xd < param_4) {
                              iVar97 = iVar97 + (uint)param_1[iVar67 + 0xd] *
                                                (uint)param_1[iVar67 + 0xd];
                              if (iVar67 + 0xe < param_4) {
                                iVar97 = iVar97 + (uint)param_1[iVar67 + 0xe] *
                                                  (uint)param_1[iVar67 + 0xe];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00395e74:
  *param_3 = iVar58 + iVar97;
  return 0;
}


==================================================================

### FUNC 00395ea4 (2868 bytes) name=FUN_00395ea4

undefined8
FUN_00395ea4(byte *param_1,byte *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  ulong uVar1;
  uint3 uVar2;
  uint3 uVar3;
  byte *pbVar4;
  byte *pbVar65;
  uint uVar125;
  uint uVar126;
  int iVar127;
  uint uVar128;
  int iVar129;
  uint uVar130;
  long lVar131;
  uint uVar132;
  byte bVar133;
  byte bVar134;
  int iVar135;
  int iVar136;
  byte bVar138;
  int iVar137;
  int iVar139;
  int iVar140;
  undefined8 uVar141;
  int iVar142;
  int iVar143;
  byte bVar145;
  byte bVar146;
  undefined8 uVar144;
  int iVar147;
  byte bVar148;
  byte bVar149;
  int iVar150;
  int iVar151;
  byte bVar153;
  byte bVar154;
  int iVar152;
  int iVar155;
  int iVar156;
  undefined8 uVar157;
  int iVar158;
  int iVar159;
  undefined8 uVar160;
  int iVar161;
  int iVar162;
  int iVar163;
  int iVar164;
  int iVar165;
  int iVar166;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  int iVar172;
  int iVar173;
  int iVar174;
  int iVar175;
  int iVar176;
  int iVar177;
  int iVar178;
  int iVar179;
  int iVar180;
  int iVar181;
  int iVar182;
  int iVar183;
  int iVar184;
  int iVar185;
  int iVar186;
  int iVar187;
  int iVar188;
  int iVar189;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar63;
  byte *pbVar64;
  byte *pbVar66;
  byte *pbVar67;
  byte *pbVar68;
  byte *pbVar69;
  byte *pbVar70;
  byte *pbVar71;
  byte *pbVar72;
  byte *pbVar73;
  byte *pbVar74;
  byte *pbVar75;
  byte *pbVar76;
  byte *pbVar77;
  byte *pbVar78;
  byte *pbVar79;
  byte *pbVar80;
  byte *pbVar81;
  byte *pbVar82;
  byte *pbVar83;
  byte *pbVar84;
  byte *pbVar85;
  byte *pbVar86;
  byte *pbVar87;
  byte *pbVar88;
  byte *pbVar89;
  byte *pbVar90;
  byte *pbVar91;
  byte *pbVar92;
  byte *pbVar93;
  byte *pbVar94;
  byte *pbVar95;
  byte *pbVar96;
  byte *pbVar97;
  byte *pbVar98;
  byte *pbVar99;
  byte *pbVar100;
  byte *pbVar101;
  byte *pbVar102;
  byte *pbVar103;
  byte *pbVar104;
  byte *pbVar105;
  byte *pbVar106;
  byte *pbVar107;
  byte *pbVar108;
  byte *pbVar109;
  byte *pbVar110;
  byte *pbVar111;
  byte *pbVar112;
  byte *pbVar113;
  byte *pbVar114;
  byte *pbVar115;
  byte *pbVar116;
  byte *pbVar117;
  byte *pbVar118;
  byte *pbVar119;
  byte *pbVar120;
  byte *pbVar121;
  byte *pbVar122;
  byte *pbVar123;
  byte *pbVar124;
  
  iVar127 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar126 = -(int)param_1;
      lVar131 = 0;
      do {
        if ((*(char *)(param_3 + lVar131) != '\0') && (0 < (int)param_6)) {
          uVar125 = uVar126 & 0xf;
          if (param_6 < (uVar126 & 0xf)) {
            uVar125 = param_6;
          }
          if (param_6 < 0x11) {
            uVar125 = param_6;
          }
          uVar128 = uVar125;
          if (uVar125 != 0) {
            iVar127 = iVar127 + ((uint)*param_1 - (uint)*param_2) *
                                ((uint)*param_1 - (uint)*param_2);
                    /* try { // try from 00395f2c to 00495f2f has its CatchHandler @ 00395e0c */
                    /* try { // try from 00395f4c to 00495f4f has its CatchHandler @ 00396274 */
                    /* try { // try from 00395f54 to 004961bb has its CatchHandler @ 00395e0c */
            if ((((uVar125 != 1) &&
                 (iVar127 = iVar127 + ((uint)param_1[1] - (uint)param_2[1]) *
                                      ((uint)param_1[1] - (uint)param_2[1]), uVar125 != 2)) &&
                (iVar127 = iVar127 + ((uint)param_1[2] - (uint)param_2[2]) *
                                     ((uint)param_1[2] - (uint)param_2[2]), uVar125 != 3)) &&
               (((iVar127 = iVar127 + ((uint)param_1[3] - (uint)param_2[3]) *
                                      ((uint)param_1[3] - (uint)param_2[3]), uVar125 != 4 &&
                 (iVar127 = iVar127 + ((uint)param_1[4] - (uint)param_2[4]) *
                                      ((uint)param_1[4] - (uint)param_2[4]), uVar125 != 5)) &&
                (iVar127 = iVar127 + ((uint)param_1[5] - (uint)param_2[5]) *
                                     ((uint)param_1[5] - (uint)param_2[5]), uVar125 != 6)))) {
              iVar127 = iVar127 + ((uint)param_1[6] - (uint)param_2[6]) *
                                  ((uint)param_1[6] - (uint)param_2[6]);
              if (uVar125 == 7) {
                uVar128 = 7;
              }
              else {
                iVar127 = iVar127 + ((uint)param_1[7] - (uint)param_2[7]) *
                                    ((uint)param_1[7] - (uint)param_2[7]);
                if (((uVar125 != 8) &&
                    (iVar127 = iVar127 + ((uint)param_1[8] - (uint)param_2[8]) *
                                         ((uint)param_1[8] - (uint)param_2[8]), uVar125 != 9)) &&
                   (((iVar127 = iVar127 + ((uint)param_1[9] - (uint)param_2[9]) *
                                          ((uint)param_1[9] - (uint)param_2[9]), uVar125 != 10 &&
                     (((iVar127 = iVar127 + ((uint)param_1[10] - (uint)param_2[10]) *
                                            ((uint)param_1[10] - (uint)param_2[10]), uVar125 != 0xb
                       && (iVar127 = iVar127 + ((uint)param_1[0xb] - (uint)param_2[0xb]) *
                                               ((uint)param_1[0xb] - (uint)param_2[0xb]),
                          uVar125 != 0xc)) &&
                      (iVar127 = iVar127 + ((uint)param_1[0xc] - (uint)param_2[0xc]) *
                                           ((uint)param_1[0xc] - (uint)param_2[0xc]), uVar125 != 0xd
                      )))) && (iVar127 = iVar127 + ((uint)param_1[0xd] - (uint)param_2[0xd]) *
                                                   ((uint)param_1[0xd] - (uint)param_2[0xd]),
                              uVar125 != 0xe)))) {
                  iVar127 = iVar127 + ((uint)param_1[0xe] - (uint)param_2[0xe]) *
                                      ((uint)param_1[0xe] - (uint)param_2[0xe]);
                  if (uVar125 == 0x10) {
                    iVar127 = iVar127 + ((uint)param_1[0xf] - (uint)param_2[0xf]) *
                                        ((uint)param_1[0xf] - (uint)param_2[0xf]);
                  }
                  else {
                    uVar128 = 0xf;
                  }
                }
              }
            }
            if (param_6 == uVar125) goto LAB_003962dc;
          }
          uVar130 = ((param_6 - uVar125) - 0x10 >> 4) + 1;
          iVar129 = uVar130 * 0x10;
          if (0xe < (param_6 - 1) - uVar125) {
            iVar135 = 0;
            iVar136 = 0;
            iVar137 = 0;
            iVar139 = 0;
            uVar132 = 0;
            pbVar124 = param_2 + uVar125;
            pbVar64 = param_1 + uVar125;
            do {
              uVar144 = *(undefined8 *)(pbVar64 + 8);
              uVar141 = *(undefined8 *)pbVar64;
              uVar132 = uVar132 + 1;
              uVar160 = *(undefined8 *)(pbVar124 + 8);
              uVar157 = *(undefined8 *)pbVar124;
              bVar133 = (byte)((ulong)uVar141 >> 8);
              bVar145 = (byte)((ulong)uVar141 >> 0x28);
              bVar134 = (byte)((ulong)uVar157 >> 8);
              bVar146 = (byte)((ulong)uVar157 >> 0x28);
              bVar148 = (byte)((ulong)uVar144 >> 0x28);
              bVar138 = (byte)((ulong)uVar160 >> 8);
              bVar149 = (byte)((ulong)uVar160 >> 0x28);
              iVar162 = ((CONCAT12(bVar133,(short)uVar141) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar134,(short)uVar157) & 0xff00ff) & 0xffff);
              iVar163 = (uint)bVar133 - (uint)bVar134;
              iVar164 = (uint)(byte)((ulong)uVar141 >> 0x10) - (uint)(byte)((ulong)uVar157 >> 0x10);
              iVar165 = (uint)(byte)((ulong)uVar141 >> 0x18) - (uint)(byte)((ulong)uVar157 >> 0x18);
              iVar150 = (CONCAT12(bVar145,(ushort)(byte)((ulong)uVar141 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar146,(ushort)(byte)((ulong)uVar157 >> 0x20)) & 0xffff);
              iVar151 = (uint)bVar145 - (uint)bVar146;
              iVar152 = (uint)(byte)((ulong)uVar141 >> 0x30) - (uint)(byte)((ulong)uVar157 >> 0x30);
              iVar155 = (uint)(byte)((ulong)uVar141 >> 0x38) - (uint)(byte)((ulong)uVar157 >> 0x38);
              iVar156 = (uint)(byte)uVar144 -
                        ((CONCAT12(bVar138,(short)uVar160) & 0xff00ff) & 0xffff);
              iVar158 = (uint)(byte)((ulong)uVar144 >> 8) - (uint)bVar138;
              iVar159 = (uint)(byte)((ulong)uVar144 >> 0x10) - (uint)(byte)((ulong)uVar160 >> 0x10);
              iVar161 = (uint)(byte)((ulong)uVar144 >> 0x18) - (uint)(byte)((ulong)uVar160 >> 0x18);
              iVar140 = (CONCAT12(bVar148,(ushort)(byte)((ulong)uVar144 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar149,(ushort)(byte)((ulong)uVar160 >> 0x20)) & 0xffff);
              iVar142 = (uint)bVar148 - (uint)bVar149;
              iVar143 = (uint)(byte)((ulong)uVar144 >> 0x30) - (uint)(byte)((ulong)uVar160 >> 0x30);
              iVar147 = (uint)(byte)((ulong)uVar144 >> 0x38) - (uint)(byte)((ulong)uVar160 >> 0x38);
              iVar135 = iVar135 + iVar162 * iVar162 + iVar150 * iVar150 + iVar156 * iVar156 +
                        iVar140 * iVar140;
              iVar136 = iVar136 + iVar163 * iVar163 + iVar151 * iVar151 + iVar158 * iVar158 +
                        iVar142 * iVar142;
              iVar137 = iVar137 + iVar164 * iVar164 + iVar152 * iVar152 + iVar159 * iVar159 +
                        iVar143 * iVar143;
              iVar139 = iVar139 + iVar165 * iVar165 + iVar155 * iVar155 + iVar161 * iVar161 +
                        iVar147 * iVar147;
              pbVar124 = pbVar124 + 0x10;
              pbVar64 = pbVar64 + 0x10;
            } while (uVar132 < uVar130);
            uVar128 = uVar128 + iVar129;
            iVar127 = iVar127 + iVar135 + iVar136 + iVar137 + iVar139;
            if (param_6 - uVar125 == iVar129) goto LAB_003962dc;
          }
          iVar129 = uVar128 + 1;
          iVar127 = iVar127 + ((uint)param_1[(int)uVar128] - (uint)param_2[(int)uVar128]) *
                              ((uint)param_1[(int)uVar128] - (uint)param_2[(int)uVar128]);
          if (iVar129 < (int)param_6) {
            iVar135 = uVar128 + 2;
            iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                                ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
            if (iVar135 < (int)param_6) {
              iVar129 = uVar128 + 3;
              iVar127 = iVar127 + ((uint)param_1[iVar135] - (uint)param_2[iVar135]) *
                                  ((uint)param_1[iVar135] - (uint)param_2[iVar135]);
              if (iVar129 < (int)param_6) {
                iVar135 = uVar128 + 4;
                iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                                    ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
                if (iVar135 < (int)param_6) {
                  iVar129 = uVar128 + 5;
                  iVar127 = iVar127 + ((uint)param_1[iVar135] - (uint)param_2[iVar135]) *
                                      ((uint)param_1[iVar135] - (uint)param_2[iVar135]);
                  if (iVar129 < (int)param_6) {
                    iVar135 = uVar128 + 6;
                    iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                                        ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
                    if (iVar135 < (int)param_6) {
                      iVar129 = uVar128 + 7;
                      iVar127 = iVar127 + ((uint)param_1[iVar135] - (uint)param_2[iVar135]) *
                                          ((uint)param_1[iVar135] - (uint)param_2[iVar135]);
                      if (iVar129 < (int)param_6) {
                        iVar135 = uVar128 + 8;
                        iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                                            ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
                    /* try { // try from 00396204 to 00496207 has its CatchHandler @ 00396240 */
                        if (iVar135 < (int)param_6) {
                    /* try { // try from 0039620c to 00496237 has its CatchHandler @ 00395e0c */
                          iVar129 = uVar128 + 9;
                          iVar127 = iVar127 + ((uint)param_1[iVar135] - (uint)param_2[iVar135]) *
                                              ((uint)param_1[iVar135] - (uint)param_2[iVar135]);
                          if (iVar129 < (int)param_6) {
                            iVar135 = uVar128 + 10;
                    /* catch() { ... } // from try @ 00396204 with catch @ 00396240 */
                            iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                                                ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
                            if (iVar135 < (int)param_6) {
                              iVar129 = uVar128 + 0xb;
                    /* try { // try from 00396250 to 0049626b has its CatchHandler @ 00395e0c */
                              iVar127 = iVar127 + ((uint)param_1[iVar135] - (uint)param_2[iVar135])
                                                  * ((uint)param_1[iVar135] - (uint)param_2[iVar135]
                                                    );
                              if (iVar129 < (int)param_6) {
                                iVar135 = uVar128 + 0xc;
                    /* catch() { ... } // from try @ 00395f4c with catch @ 00396274 */
                                iVar127 = iVar127 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]
                                                    ) * ((uint)param_1[iVar129] -
                                                        (uint)param_2[iVar129]);
                    /* try { // try from 00396284 to 00496287 has its CatchHandler @ 00395e0c */
                                if (iVar135 < (int)param_6) {
                                  iVar129 = uVar128 + 0xd;
                    /* catch() { ... } // from try @ 00396388 with catch @ 00396298
                       catch() { ... } // from try @ 003963b0 with catch @ 00396298
                       catch() { ... } // from try @ 003963f4 with catch @ 00396298
                       catch() { ... } // from try @ 00396444 with catch @ 00396298
                       catch() { ... } // from try @ 00396458 with catch @ 00396298 */
                                  iVar127 = iVar127 + ((uint)param_1[iVar135] -
                                                      (uint)param_2[iVar135]) *
                                                      ((uint)param_1[iVar135] -
                                                      (uint)param_2[iVar135]);
                                  if (iVar129 < (int)param_6) {
                                    iVar135 = uVar128 + 0xe;
                                    iVar127 = iVar127 + ((uint)param_1[iVar129] -
                                                        (uint)param_2[iVar129]) *
                                                        ((uint)param_1[iVar129] -
                                                        (uint)param_2[iVar129]);
                                    if (iVar135 < (int)param_6) {
                                      iVar127 = iVar127 + ((uint)param_1[iVar135] -
                                                          (uint)param_2[iVar135]) *
                                                          ((uint)param_1[iVar135] -
                                                          (uint)param_2[iVar135]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003962dc:
        lVar131 = lVar131 + 1;
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar126 = uVar126 - param_6;
      } while ((int)lVar131 < param_5);
    }
    *param_4 = iVar127;
    return 0;
  }
  param_5 = param_5 * param_6;
  iVar135 = 0;
  iVar129 = iVar135;
  if (0 < param_5 + -3) {
    uVar126 = param_5 - 4U >> 2;
    iVar129 = uVar126 + 1;
    uVar126 = (uVar126 - 0xf >> 4) + 1;
    if (param_5 - 4U < 0x3c) {
      iVar136 = 0;
LAB_003964ac:
      pbVar124 = param_2 + iVar136;
      pbVar64 = param_1 + iVar136;
      do {
        iVar136 = iVar136 + 4;
        iVar135 = iVar135 + ((uint)pbVar64[1] - (uint)pbVar124[1]) *
                            ((uint)pbVar64[1] - (uint)pbVar124[1]) +
                            ((uint)*pbVar64 - (uint)*pbVar124) * ((uint)*pbVar64 - (uint)*pbVar124)
                            + ((uint)pbVar64[2] - (uint)pbVar124[2]) *
                              ((uint)pbVar64[2] - (uint)pbVar124[2]) +
                            ((uint)pbVar64[3] - (uint)pbVar124[3]) *
                            ((uint)pbVar64[3] - (uint)pbVar124[3]);
        pbVar124 = pbVar124 + 4;
        pbVar64 = pbVar64 + 4;
      } while (iVar136 < param_5 + -3);
    }
    else {
      iVar135 = 0;
      iVar136 = 0;
      iVar137 = 0;
      iVar139 = 0;
      uVar125 = 0;
      pbVar124 = param_2;
      pbVar64 = param_1;
      do {
        bVar133 = *pbVar64;
        pbVar4 = pbVar64 + 1;
        pbVar5 = pbVar64 + 2;
        pbVar6 = pbVar64 + 3;
        pbVar7 = pbVar64 + 4;
        pbVar8 = pbVar64 + 5;
        pbVar9 = pbVar64 + 6;
        pbVar10 = pbVar64 + 7;
        pbVar11 = pbVar64 + 8;
        pbVar12 = pbVar64 + 9;
        pbVar13 = pbVar64 + 10;
        pbVar14 = pbVar64 + 0xb;
        pbVar15 = pbVar64 + 0xc;
        pbVar16 = pbVar64 + 0xd;
        pbVar17 = pbVar64 + 0xe;
        pbVar18 = pbVar64 + 0xf;
        pbVar19 = pbVar64 + 0x10;
        pbVar20 = pbVar64 + 0x11;
        pbVar21 = pbVar64 + 0x12;
        pbVar22 = pbVar64 + 0x13;
        pbVar23 = pbVar64 + 0x14;
        pbVar24 = pbVar64 + 0x15;
        pbVar25 = pbVar64 + 0x16;
        pbVar26 = pbVar64 + 0x17;
        pbVar27 = pbVar64 + 0x18;
        pbVar28 = pbVar64 + 0x19;
        pbVar29 = pbVar64 + 0x1a;
        pbVar30 = pbVar64 + 0x1b;
        pbVar31 = pbVar64 + 0x1c;
        pbVar32 = pbVar64 + 0x1d;
        pbVar33 = pbVar64 + 0x1e;
        pbVar34 = pbVar64 + 0x1f;
        pbVar35 = pbVar64 + 0x20;
        pbVar36 = pbVar64 + 0x21;
        pbVar37 = pbVar64 + 0x22;
        pbVar38 = pbVar64 + 0x23;
        pbVar39 = pbVar64 + 0x24;
        bVar145 = pbVar64[0x25];
        bVar148 = pbVar64[0x26];
        bVar153 = pbVar64[0x27];
        pbVar40 = pbVar64 + 0x28;
        pbVar41 = pbVar64 + 0x29;
        pbVar42 = pbVar64 + 0x2a;
        pbVar43 = pbVar64 + 0x2b;
        pbVar44 = pbVar64 + 0x2c;
        pbVar45 = pbVar64 + 0x2d;
        pbVar46 = pbVar64 + 0x2e;
        pbVar47 = pbVar64 + 0x2f;
        pbVar48 = pbVar64 + 0x30;
        pbVar49 = pbVar64 + 0x31;
        pbVar50 = pbVar64 + 0x32;
        pbVar51 = pbVar64 + 0x33;
        pbVar52 = pbVar64 + 0x34;
        pbVar53 = pbVar64 + 0x35;
        pbVar54 = pbVar64 + 0x36;
        pbVar55 = pbVar64 + 0x37;
        pbVar56 = pbVar64 + 0x38;
        pbVar57 = pbVar64 + 0x39;
        pbVar58 = pbVar64 + 0x3a;
        pbVar59 = pbVar64 + 0x3b;
        pbVar60 = pbVar64 + 0x3c;
        pbVar61 = pbVar64 + 0x3d;
        pbVar62 = pbVar64 + 0x3e;
        pbVar63 = pbVar64 + 0x3f;
        pbVar64 = pbVar64 + 0x40;
        uVar125 = uVar125 + 1;
        bVar134 = *pbVar124;
        pbVar65 = pbVar124 + 1;
        pbVar66 = pbVar124 + 2;
        pbVar67 = pbVar124 + 3;
        pbVar68 = pbVar124 + 4;
        pbVar69 = pbVar124 + 5;
        pbVar70 = pbVar124 + 6;
        pbVar71 = pbVar124 + 7;
        pbVar72 = pbVar124 + 8;
        pbVar73 = pbVar124 + 9;
        pbVar74 = pbVar124 + 10;
        pbVar75 = pbVar124 + 0xb;
        pbVar76 = pbVar124 + 0xc;
        pbVar77 = pbVar124 + 0xd;
        pbVar78 = pbVar124 + 0xe;
        pbVar79 = pbVar124 + 0xf;
        pbVar80 = pbVar124 + 0x10;
        pbVar81 = pbVar124 + 0x11;
        pbVar82 = pbVar124 + 0x12;
        pbVar83 = pbVar124 + 0x13;
        pbVar84 = pbVar124 + 0x14;
        pbVar85 = pbVar124 + 0x15;
        pbVar86 = pbVar124 + 0x16;
        pbVar87 = pbVar124 + 0x17;
        pbVar88 = pbVar124 + 0x18;
        pbVar89 = pbVar124 + 0x19;
        pbVar90 = pbVar124 + 0x1a;
        pbVar91 = pbVar124 + 0x1b;
        pbVar92 = pbVar124 + 0x1c;
        pbVar93 = pbVar124 + 0x1d;
        pbVar94 = pbVar124 + 0x1e;
        pbVar95 = pbVar124 + 0x1f;
        pbVar96 = pbVar124 + 0x20;
        pbVar97 = pbVar124 + 0x21;
        pbVar98 = pbVar124 + 0x22;
        pbVar99 = pbVar124 + 0x23;
        bVar138 = pbVar124[0x24];
        bVar146 = pbVar124[0x25];
        bVar149 = pbVar124[0x26];
        bVar154 = pbVar124[0x27];
        pbVar100 = pbVar124 + 0x28;
        pbVar101 = pbVar124 + 0x29;
        pbVar102 = pbVar124 + 0x2a;
        pbVar103 = pbVar124 + 0x2b;
        pbVar104 = pbVar124 + 0x2c;
        pbVar105 = pbVar124 + 0x2d;
        pbVar106 = pbVar124 + 0x2e;
        pbVar107 = pbVar124 + 0x2f;
        pbVar108 = pbVar124 + 0x30;
        pbVar109 = pbVar124 + 0x31;
        pbVar110 = pbVar124 + 0x32;
        pbVar111 = pbVar124 + 0x33;
        pbVar112 = pbVar124 + 0x34;
        pbVar113 = pbVar124 + 0x35;
        pbVar114 = pbVar124 + 0x36;
        pbVar115 = pbVar124 + 0x37;
        pbVar116 = pbVar124 + 0x38;
        pbVar117 = pbVar124 + 0x39;
        pbVar118 = pbVar124 + 0x3a;
        pbVar119 = pbVar124 + 0x3b;
        pbVar120 = pbVar124 + 0x3c;
        pbVar121 = pbVar124 + 0x3d;
        pbVar122 = pbVar124 + 0x3e;
        pbVar123 = pbVar124 + 0x3f;
        pbVar124 = pbVar124 + 0x40;
        uVar2 = CONCAT12(*pbVar12,CONCAT11(*pbVar8,*pbVar4));
                    /* try { // try from 00396388 to 0049638b has its CatchHandler @ 00396298 */
                    /* try { // try from 003963a8 to 004963ab has its CatchHandler @ 00396448 */
                    /* try { // try from 003963b0 to 004963cf has its CatchHandler @ 00396298 */
        iVar158 = (uVar2 & 0xff) - (CONCAT12(*pbVar69,(ushort)*pbVar65) & 0xffff);
        iVar161 = ((uVar2 & 0xff00) >> 8) - (uint)*pbVar69;
        iVar162 = (uint)*pbVar12 - (CONCAT12(*pbVar77,(ushort)*pbVar73) & 0xffff);
        iVar163 = (uint)*pbVar16 - (uint)*pbVar77;
        uVar3 = CONCAT12(*pbVar14,CONCAT11(*pbVar10,*pbVar6));
        iVar178 = (CONCAT12(*pbVar7,(ushort)bVar133) & 0xffff) -
                  (CONCAT12(*pbVar68,(ushort)bVar134) & 0xffff);
        iVar180 = (uint)*pbVar7 - (uint)*pbVar68;
        iVar182 = (CONCAT12(*pbVar15,(ushort)*pbVar11) & 0xffff) -
                  (CONCAT12(*pbVar76,(ushort)*pbVar72) & 0xffff);
        iVar184 = (uint)*pbVar15 - (uint)*pbVar76;
        uVar2 = CONCAT12(*pbVar75,CONCAT11(*pbVar71,*pbVar67));
        iVar140 = (CONCAT12(*pbVar24,(ushort)*pbVar20) & 0xffff) -
                  (CONCAT12(*pbVar85,(ushort)*pbVar81) & 0xffff);
        iVar142 = (uint)*pbVar24 - (uint)*pbVar85;
                    /* try { // try from 003963ec to 004963ef has its CatchHandler @ 00396434 */
        iVar176 = (CONCAT12(*pbVar23,(ushort)*pbVar19) & 0xffff) -
                  (CONCAT12(*pbVar84,(ushort)*pbVar80) & 0xffff);
        iVar177 = (uint)*pbVar23 - (uint)*pbVar84;
        iVar188 = (CONCAT12(*pbVar9,(ushort)*pbVar5) & 0xffff) -
                  (CONCAT12(*pbVar70,(ushort)*pbVar66) & 0xffff);
        iVar189 = (uint)*pbVar9 - (uint)*pbVar70;
        iVar151 = (CONCAT12(*pbVar17,(ushort)*pbVar13) & 0xffff) -
                  (CONCAT12(*pbVar78,(ushort)*pbVar74) & 0xffff);
        iVar152 = (uint)*pbVar17 - (uint)*pbVar78;
                    /* try { // try from 003963f4 to 004963f7 has its CatchHandler @ 00396298 */
        iVar140 = iVar140 * iVar140;
        iVar142 = iVar142 * iVar142;
        iVar143 = ((uint)*pbVar28 - (uint)*pbVar89) * ((uint)*pbVar28 - (uint)*pbVar89);
        iVar147 = ((uint)*pbVar32 - (uint)*pbVar93) * ((uint)*pbVar32 - (uint)*pbVar93);
        iVar159 = ((CONCAT12(bVar145,CONCAT11(bVar145,*pbVar36)) & 0xff00ff) & 0xffff) -
                  ((CONCAT12(bVar146,CONCAT11(bVar146,*pbVar97)) & 0xff00ff) & 0xffff);
        iVar155 = (CONCAT12(*pbVar53,(ushort)*pbVar49) & 0xffff) -
                  (CONCAT12(*pbVar113,(ushort)*pbVar109) & 0xffff);
        iVar156 = (uint)*pbVar53 - (uint)*pbVar113;
        iVar179 = (CONCAT12(*pbVar39,(ushort)*pbVar35) & 0xffff) -
                  ((CONCAT12(bVar138,CONCAT11(bVar138,*pbVar96)) & 0xff00ff) & 0xffff);
        iVar181 = (uint)*pbVar39 - (uint)bVar138;
        iVar183 = (CONCAT12(*pbVar44,(ushort)*pbVar40) & 0xffff) - (uint)*pbVar100;
        iVar185 = (uint)*pbVar44 - (uint)*pbVar104;
        iVar173 = (CONCAT12(*pbVar25,(ushort)*pbVar21) & 0xffff) -
                  (CONCAT12(*pbVar86,(ushort)*pbVar82) & 0xffff);
        iVar174 = (uint)*pbVar25 - (uint)*pbVar86;
                    /* catch() { ... } // from try @ 003963ec with catch @ 00396434 */
        iVar186 = (uVar3 & 0xff) - (uVar2 & 0xff);
        iVar187 = ((uVar3 & 0xff00) >> 8) - ((uVar2 & 0xff00) >> 8);
        iVar150 = (uint)*pbVar14 - (uint)*pbVar75;
        iVar175 = ((CONCAT12(bVar148,CONCAT11(bVar148,*pbVar37)) & 0xff00ff) & 0xffff) -
                  ((CONCAT12(bVar149,CONCAT11(bVar149,*pbVar98)) & 0xff00ff) & 0xffff);
                    /* try { // try from 00396444 to 00496447 has its CatchHandler @ 00396298 */
                    /* catch() { ... } // from try @ 003963a8 with catch @ 00396448 */
        iVar169 = (CONCAT12(*pbVar52,(ushort)*pbVar48) & 0xffff) -
                  (CONCAT12(*pbVar112,(ushort)*pbVar108) & 0xffff);
        iVar170 = (uint)*pbVar52 - (uint)*pbVar112;
        iVar171 = (CONCAT12(*pbVar26,(ushort)*pbVar22) & 0xffff) -
                  (CONCAT12(*pbVar87,(ushort)*pbVar83) & 0xffff);
        iVar172 = (uint)*pbVar26 - (uint)*pbVar87;
                    /* try { // try from 00396458 to 0049645b has its CatchHandler @ 00396298 */
                    /* catch() { ... } // from try @ 00396604 with catch @ 0039645c
                       catch() { ... } // from try @ 003966a4 with catch @ 0039645c
                       catch() { ... } // from try @ 003967cc with catch @ 0039645c
                       catch() { ... } // from try @ 00396878 with catch @ 0039645c
                       catch() { ... } // from try @ 003968ac with catch @ 0039645c */
        iVar166 = (CONCAT12(*pbVar54,(ushort)*pbVar50) & 0xffff) -
                  (CONCAT12(*pbVar114,(ushort)*pbVar110) & 0xffff);
        iVar167 = (uint)*pbVar54 - (uint)*pbVar114;
        iVar168 = ((CONCAT12(bVar153,CONCAT11(bVar153,*pbVar38)) & 0xff00ff) & 0xffff) -
                  ((CONCAT12(bVar154,CONCAT11(bVar154,*pbVar99)) & 0xff00ff) & 0xffff);
        iVar164 = (CONCAT12(*pbVar55,(ushort)*pbVar51) & 0xffff) -
                  (CONCAT12(*pbVar115,(ushort)*pbVar111) & 0xffff);
        iVar165 = (uint)*pbVar55 - (uint)*pbVar115;
        iVar135 = iVar155 * iVar155 + iVar169 * iVar169 + iVar166 * iVar166 + iVar164 * iVar164 +
                  iVar159 * iVar159 + iVar179 * iVar179 + iVar175 * iVar175 + iVar168 * iVar168 +
                  iVar140 + iVar176 * iVar176 + iVar173 * iVar173 + iVar171 * iVar171 +
                  iVar158 * iVar158 + iVar178 * iVar178 + iVar188 * iVar188 + iVar186 * iVar186 +
                  iVar135;
        iVar136 = iVar156 * iVar156 + iVar170 * iVar170 + iVar167 * iVar167 + iVar165 * iVar165 +
                  ((uint)bVar145 - (uint)bVar146) * ((uint)bVar145 - (uint)bVar146) +
                  iVar181 * iVar181 +
                  ((uint)bVar148 - (uint)bVar149) * ((uint)bVar148 - (uint)bVar149) +
                  ((uint)bVar153 - (uint)bVar154) * ((uint)bVar153 - (uint)bVar154) +
                  (int)(CONCAT17((char)((uint)iVar142 >> 0x18),
                                 CONCAT16((char)((uint)iVar142 >> 0x10),
                                          CONCAT15((char)((uint)iVar142 >> 8),
                                                   CONCAT14((char)iVar142,iVar140)))) >> 0x20) +
                  iVar177 * iVar177 + iVar174 * iVar174 + iVar172 * iVar172 +
                  iVar161 * iVar161 + iVar180 * iVar180 + iVar189 * iVar189 + iVar187 * iVar187 +
                  iVar136;
        iVar137 = ((uint)*pbVar57 - (uint)*pbVar117) * ((uint)*pbVar57 - (uint)*pbVar117) +
                  ((uint)*pbVar56 - (uint)*pbVar116) * ((uint)*pbVar56 - (uint)*pbVar116) +
                  ((uint)*pbVar58 - (uint)*pbVar118) * ((uint)*pbVar58 - (uint)*pbVar118) +
                  ((uint)*pbVar59 - (uint)*pbVar119) * ((uint)*pbVar59 - (uint)*pbVar119) +
                  ((uint)*pbVar41 - (uint)*pbVar101) * ((uint)*pbVar41 - (uint)*pbVar101) +
                  iVar183 * iVar183 +
                  ((uint)*pbVar42 - (uint)*pbVar102) * ((uint)*pbVar42 - (uint)*pbVar102) +
                  ((uint)*pbVar43 - (uint)*pbVar103) * ((uint)*pbVar43 - (uint)*pbVar103) +
                  iVar143 + ((uint)*pbVar27 - (uint)*pbVar88) * ((uint)*pbVar27 - (uint)*pbVar88) +
                  ((uint)*pbVar29 - (uint)*pbVar90) * ((uint)*pbVar29 - (uint)*pbVar90) +
                  ((uint)*pbVar30 - (uint)*pbVar91) * ((uint)*pbVar30 - (uint)*pbVar91) +
                  iVar162 * iVar162 + iVar182 * iVar182 + iVar151 * iVar151 + iVar150 * iVar150 +
                  iVar137;
        iVar139 = ((uint)*pbVar61 - (uint)*pbVar121) * ((uint)*pbVar61 - (uint)*pbVar121) +
                  ((uint)*pbVar60 - (uint)*pbVar120) * ((uint)*pbVar60 - (uint)*pbVar120) +
                  ((uint)*pbVar62 - (uint)*pbVar122) * ((uint)*pbVar62 - (uint)*pbVar122) +
                  ((uint)*pbVar63 - (uint)*pbVar123) * ((uint)*pbVar63 - (uint)*pbVar123) +
                  ((uint)*pbVar45 - (uint)*pbVar105) * ((uint)*pbVar45 - (uint)*pbVar105) +
                  iVar185 * iVar185 +
                  ((uint)*pbVar46 - (uint)*pbVar106) * ((uint)*pbVar46 - (uint)*pbVar106) +
                  ((uint)*pbVar47 - (uint)*pbVar107) * ((uint)*pbVar47 - (uint)*pbVar107) +
                  (int)(CONCAT17((char)((uint)iVar147 >> 0x18),
                                 CONCAT16((char)((uint)iVar147 >> 0x10),
                                          CONCAT15((char)((uint)iVar147 >> 8),
                                                   CONCAT14((char)iVar147,iVar143)))) >> 0x20) +
                  ((uint)*pbVar31 - (uint)*pbVar92) * ((uint)*pbVar31 - (uint)*pbVar92) +
                  ((uint)*pbVar33 - (uint)*pbVar94) * ((uint)*pbVar33 - (uint)*pbVar94) +
                  ((uint)*pbVar34 - (uint)*pbVar95) * ((uint)*pbVar34 - (uint)*pbVar95) +
                  iVar163 * iVar163 + iVar184 * iVar184 + iVar152 * iVar152 +
                  ((uint)*pbVar18 - (uint)*pbVar79) * ((uint)*pbVar18 - (uint)*pbVar79) + iVar139;
      } while (uVar125 < uVar126);
      iVar135 = iVar135 + iVar136 + iVar137 + iVar139;
      iVar136 = uVar126 * 0x40;
      if (uVar126 * 0x10 != iVar129) goto LAB_003964ac;
    }
    iVar129 = iVar129 * 4;
  }
  if (iVar129 < param_5) {
    lVar131 = (long)iVar129;
    uVar125 = param_5 - iVar129;
    uVar126 = -(int)(param_1 + lVar131) & 0xf;
    uVar1 = (ulong)uVar126;
    if (uVar125 < uVar126) {
      uVar1 = (ulong)uVar125;
    }
    if (uVar125 < 0x11) {
      uVar1 = (ulong)uVar125;
    }
    uVar126 = (uint)uVar1;
    if (uVar126 != 0) {
      iVar136 = iVar129 + 1;
      iVar137 = (uint)param_1[lVar131] - (uint)param_2[lVar131];
      iVar135 = iVar135 + iVar137 * iVar137;
      if (uVar126 != 1) {
        iVar137 = iVar129 + 2;
        iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                            ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
        iVar136 = iVar137;
        if (uVar126 != 2) {
          iVar136 = iVar129 + 3;
          iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                              ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
          if (uVar126 != 3) {
            iVar137 = iVar129 + 4;
            iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
            iVar136 = iVar137;
            if (uVar126 != 4) {
              iVar136 = iVar129 + 5;
              iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                  ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
              if (uVar126 != 5) {
                iVar137 = iVar129 + 6;
                iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                    ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                iVar136 = iVar137;
                if (uVar126 != 6) {
                    /* try { // try from 00396604 to 0049667f has its CatchHandler @ 0039645c */
                  iVar136 = iVar129 + 7;
                  iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                      ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                  if (uVar126 != 7) {
                    iVar137 = iVar129 + 8;
                    iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                        ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                    iVar136 = iVar137;
                    if (uVar126 != 8) {
                      iVar136 = iVar129 + 9;
                      iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                          ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                      if (uVar126 != 9) {
                        iVar137 = iVar129 + 10;
                        iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                            ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                        iVar136 = iVar137;
                        if (uVar126 != 10) {
                          iVar136 = iVar129 + 0xb;
                          iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                              ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                    /* try { // try from 0039669c to 0049669f has its CatchHandler @ 00396868 */
                          if (uVar126 != 0xb) {
                    /* try { // try from 003966a4 to 0049677b has its CatchHandler @ 0039645c */
                            iVar137 = iVar129 + 0xc;
                            iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                                ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                            iVar136 = iVar137;
                            if (uVar126 != 0xc) {
                              iVar136 = iVar129 + 0xd;
                              iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137])
                                                  * ((uint)param_1[iVar137] - (uint)param_2[iVar137]
                                                    );
                              if (uVar126 != 0xd) {
                                iVar137 = iVar129 + 0xe;
                                iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]
                                                    ) * ((uint)param_1[iVar136] -
                                                        (uint)param_2[iVar136]);
                                iVar136 = iVar137;
                                if (uVar126 != 0xe) {
                                  iVar136 = iVar129 + 0xf;
                                  iVar135 = iVar135 + ((uint)param_1[iVar137] -
                                                      (uint)param_2[iVar137]) *
                                                      ((uint)param_1[iVar137] -
                                                      (uint)param_2[iVar137]);
                                  if (uVar126 == 0x10) {
                                    iVar135 = iVar135 + ((uint)param_1[iVar136] -
                                                        (uint)param_2[iVar136]) *
                                                        ((uint)param_1[iVar136] -
                                                        (uint)param_2[iVar136]);
                                    iVar136 = iVar129 + 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar129 = iVar136;
      if (uVar126 == uVar125) goto LAB_003969a8;
    }
    uVar128 = ((uVar125 - uVar126) - 0x10 >> 4) + 1;
    iVar136 = uVar128 * 0x10;
    if (0xe < (uVar125 - 1) - uVar126) {
      iVar137 = 0;
      iVar139 = 0;
      iVar140 = 0;
      iVar142 = 0;
      uVar130 = 0;
      pbVar124 = param_1 + uVar1 + lVar131;
      pbVar64 = param_2 + uVar1 + lVar131;
      do {
        uVar144 = *(undefined8 *)(pbVar124 + 8);
        uVar141 = *(undefined8 *)pbVar124;
        uVar130 = uVar130 + 1;
        uVar160 = *(undefined8 *)(pbVar64 + 8);
        uVar157 = *(undefined8 *)pbVar64;
        bVar133 = (byte)((ulong)uVar141 >> 8);
        bVar145 = (byte)((ulong)uVar141 >> 0x28);
        bVar134 = (byte)((ulong)uVar157 >> 8);
        bVar146 = (byte)((ulong)uVar157 >> 0x28);
        bVar148 = (byte)((ulong)uVar144 >> 0x28);
        bVar138 = (byte)((ulong)uVar160 >> 8);
        bVar149 = (byte)((ulong)uVar160 >> 0x28);
        iVar164 = ((CONCAT12(bVar133,(short)uVar141) & 0xff00ff) & 0xffff) -
                  ((CONCAT12(bVar134,(short)uVar157) & 0xff00ff) & 0xffff);
        iVar165 = (uint)bVar133 - (uint)bVar134;
        iVar166 = (uint)(byte)((ulong)uVar141 >> 0x10) - (uint)(byte)((ulong)uVar157 >> 0x10);
        iVar167 = (uint)(byte)((ulong)uVar141 >> 0x18) - (uint)(byte)((ulong)uVar157 >> 0x18);
        iVar152 = (CONCAT12(bVar145,(ushort)(byte)((ulong)uVar141 >> 0x20)) & 0xffff) -
                  (CONCAT12(bVar146,(ushort)(byte)((ulong)uVar157 >> 0x20)) & 0xffff);
        iVar155 = (uint)bVar145 - (uint)bVar146;
        iVar156 = (uint)(byte)((ulong)uVar141 >> 0x30) - (uint)(byte)((ulong)uVar157 >> 0x30);
        iVar158 = (uint)(byte)((ulong)uVar141 >> 0x38) - (uint)(byte)((ulong)uVar157 >> 0x38);
        iVar159 = (uint)(byte)uVar144 - ((CONCAT12(bVar138,(short)uVar160) & 0xff00ff) & 0xffff);
        iVar161 = (uint)(byte)((ulong)uVar144 >> 8) - (uint)bVar138;
        iVar162 = (uint)(byte)((ulong)uVar144 >> 0x10) - (uint)(byte)((ulong)uVar160 >> 0x10);
        iVar163 = (uint)(byte)((ulong)uVar144 >> 0x18) - (uint)(byte)((ulong)uVar160 >> 0x18);
        iVar143 = (CONCAT12(bVar148,(ushort)(byte)((ulong)uVar144 >> 0x20)) & 0xffff) -
                  (CONCAT12(bVar149,(ushort)(byte)((ulong)uVar160 >> 0x20)) & 0xffff);
        iVar147 = (uint)bVar148 - (uint)bVar149;
        iVar150 = (uint)(byte)((ulong)uVar144 >> 0x30) - (uint)(byte)((ulong)uVar160 >> 0x30);
        iVar151 = (uint)(byte)((ulong)uVar144 >> 0x38) - (uint)(byte)((ulong)uVar160 >> 0x38);
        iVar137 = iVar137 + iVar164 * iVar164 + iVar152 * iVar152 + iVar159 * iVar159 +
                  iVar143 * iVar143;
        iVar139 = iVar139 + iVar165 * iVar165 + iVar155 * iVar155 + iVar161 * iVar161 +
                  iVar147 * iVar147;
        iVar140 = iVar140 + iVar166 * iVar166 + iVar156 * iVar156 + iVar162 * iVar162 +
                  iVar150 * iVar150;
        iVar142 = iVar142 + iVar167 * iVar167 + iVar158 * iVar158 + iVar163 * iVar163 +
                  iVar151 * iVar151;
        pbVar124 = pbVar124 + 0x10;
        pbVar64 = pbVar64 + 0x10;
      } while (uVar130 < uVar128);
                    /* try { // try from 003967c4 to 004967c7 has its CatchHandler @ 0039689c */
      iVar129 = iVar129 + iVar136;
                    /* try { // try from 003967cc to 00496853 has its CatchHandler @ 0039645c */
      iVar135 = iVar135 + iVar137 + iVar139 + iVar140 + iVar142;
      if (iVar136 == uVar125 - uVar126) goto LAB_003969a8;
    }
    iVar136 = iVar129 + 1;
    iVar135 = iVar135 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]) *
                        ((uint)param_1[iVar129] - (uint)param_2[iVar129]);
    if (iVar136 < param_5) {
      iVar137 = iVar129 + 2;
      iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                          ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
      if (iVar137 < param_5) {
        iVar136 = iVar129 + 3;
        iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                            ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
        if (iVar136 < param_5) {
          iVar137 = iVar129 + 4;
          iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                              ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
          if (iVar137 < param_5) {
            iVar136 = iVar129 + 5;
                    /* catch() { ... } // from try @ 0039669c with catch @ 00396868 */
            iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
            if (iVar136 < param_5) {
                    /* try { // try from 00396878 to 00496893 has its CatchHandler @ 0039645c */
              iVar137 = iVar129 + 6;
              iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                  ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
              if (iVar137 < param_5) {
                iVar136 = iVar129 + 7;
                    /* catch() { ... } // from try @ 003967c4 with catch @ 0039689c */
                    /* try { // try from 003968ac to 004968af has its CatchHandler @ 0039645c */
                iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                    ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                if (iVar136 < param_5) {
                  iVar137 = iVar129 + 8;
                    /* catch() { ... } // from try @ 003969ec with catch @ 003968c0
                       catch() { ... } // from try @ 00396a14 with catch @ 003968c0
                       catch() { ... } // from try @ 00396a58 with catch @ 003968c0
                       catch() { ... } // from try @ 00396aac with catch @ 003968c0
                       catch() { ... } // from try @ 00396ac0 with catch @ 003968c0 */
                  iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                      ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                  if (iVar137 < param_5) {
                    iVar136 = iVar129 + 9;
                    iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                        ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                    if (iVar136 < param_5) {
                      iVar137 = iVar129 + 10;
                      iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                          ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                      if (iVar137 < param_5) {
                        iVar136 = iVar129 + 0xb;
                        iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                            ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                        if (iVar136 < param_5) {
                          iVar137 = iVar129 + 0xc;
                          iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136]) *
                                              ((uint)param_1[iVar136] - (uint)param_2[iVar136]);
                          if (iVar137 < param_5) {
                            iVar136 = iVar129 + 0xd;
                            iVar135 = iVar135 + ((uint)param_1[iVar137] - (uint)param_2[iVar137]) *
                                                ((uint)param_1[iVar137] - (uint)param_2[iVar137]);
                            if (iVar136 < param_5) {
                              iVar129 = iVar129 + 0xe;
                              iVar135 = iVar135 + ((uint)param_1[iVar136] - (uint)param_2[iVar136])
                                                  * ((uint)param_1[iVar136] - (uint)param_2[iVar136]
                                                    );
                              if (iVar129 < param_5) {
                                iVar135 = iVar135 + ((uint)param_1[iVar129] - (uint)param_2[iVar129]
                                                    ) * ((uint)param_1[iVar129] -
                                                        (uint)param_2[iVar129]);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_003969a8:
  *param_4 = iVar127 + iVar135;
  return 0;
}


==================================================================

### FUNC 003969d8 (2964 bytes) name=FUN_003969d8

undefined8 FUN_003969d8(char *param_1,long param_2,int *param_3,int param_4,uint param_5)

{
  uint uVar1;
  int iVar2;
  undefined1 auVar3 [16];
  int iVar4;
  ulong uVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  char *pcVar9;
  uint uVar10;
  int iVar11;
  ulong uVar12;
  long lVar13;
  uint uVar14;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  int iVar38;
  undefined1 auVar39 [16];
  undefined1 auVar40 [16];
  
  iVar38 = *param_3;
  if (param_2 != 0) {
    if (0 < param_4) {
                    /* try { // try from 003969ec to 004969ef has its CatchHandler @ 003968c0 */
      uVar14 = -(int)param_1;
      lVar13 = 0;
      do {
        if ((*(char *)(param_2 + lVar13) != '\0') && (0 < (int)param_5)) {
                    /* try { // try from 00396a0c to 00496a0f has its CatchHandler @ 00396ab0 */
                    /* try { // try from 00396a14 to 00496a33 has its CatchHandler @ 003968c0 */
          uVar8 = uVar14 & 0xf;
          if (param_5 < (uVar14 & 0xf)) {
            uVar8 = param_5;
          }
          if (param_5 < 0x12) {
            uVar8 = param_5;
          }
          uVar10 = uVar8;
          if (uVar8 != 0) {
            if (iVar38 < (int)ABS((double)(int)*param_1)) {
              iVar38 = (int)ABS((double)(int)*param_1);
            }
            if (uVar8 != 1) {
                    /* try { // try from 00396a50 to 00496a53 has its CatchHandler @ 00396a9c */
                    /* try { // try from 00396a58 to 00496a5b has its CatchHandler @ 003968c0 */
              if (iVar38 < (int)ABS((double)(int)param_1[1])) {
                iVar38 = (int)ABS((double)(int)param_1[1]);
              }
              if (uVar8 != 2) {
                if (iVar38 < (int)ABS((double)(int)param_1[2])) {
                  iVar38 = (int)ABS((double)(int)param_1[2]);
                }
                if (uVar8 != 3) {
                  if (iVar38 < (int)ABS((double)(int)param_1[3])) {
                    iVar38 = (int)ABS((double)(int)param_1[3]);
                  }
                    /* catch() { ... } // from try @ 00396a50 with catch @ 00396a9c */
                  if (uVar8 != 4) {
                    /* try { // try from 00396aac to 00496aaf has its CatchHandler @ 003968c0 */
                    /* catch() { ... } // from try @ 00396a0c with catch @ 00396ab0 */
                    if (iVar38 < (int)ABS((double)(int)param_1[4])) {
                      iVar38 = (int)ABS((double)(int)param_1[4]);
                    }
                    /* try { // try from 00396ac0 to 00496ac3 has its CatchHandler @ 003968c0 */
                    if (uVar8 != 5) {
                    /* catch() { ... } // from try @ 00396d44 with catch @ 00396ac4
                       catch() { ... } // from try @ 00396d6c with catch @ 00396ac4
                       catch() { ... } // from try @ 00396e70 with catch @ 00396ac4
                       catch() { ... } // from try @ 00397088 with catch @ 00396ac4
                       catch() { ... } // from try @ 003970b0 with catch @ 00396ac4
                       catch() { ... } // from try @ 00397174 with catch @ 00396ac4
                       catch() { ... } // from try @ 00397188 with catch @ 00396ac4 */
                      if (iVar38 < (int)ABS((double)(int)param_1[5])) {
                        iVar38 = (int)ABS((double)(int)param_1[5]);
                      }
                      if (uVar8 != 6) {
                        if (iVar38 < (int)ABS((double)(int)param_1[6])) {
                          iVar38 = (int)ABS((double)(int)param_1[6]);
                        }
                        if (uVar8 == 7) {
                          uVar10 = 7;
                        }
                        else {
                          if (iVar38 < (int)ABS((double)(int)param_1[7])) {
                            iVar38 = (int)ABS((double)(int)param_1[7]);
                          }
                          if (uVar8 != 8) {
                            if (iVar38 < (int)ABS((double)(int)param_1[8])) {
                              iVar38 = (int)ABS((double)(int)param_1[8]);
                            }
                            if (uVar8 != 9) {
                              if (iVar38 < (int)ABS((double)(int)param_1[9])) {
                                iVar38 = (int)ABS((double)(int)param_1[9]);
                              }
                              if (uVar8 != 10) {
                                if (iVar38 < (int)ABS((double)(int)param_1[10])) {
                                  iVar38 = (int)ABS((double)(int)param_1[10]);
                                }
                                if (uVar8 != 0xb) {
                                  if (iVar38 < (int)ABS((double)(int)param_1[0xb])) {
                                    iVar38 = (int)ABS((double)(int)param_1[0xb]);
                                  }
                                  if (uVar8 != 0xc) {
                                    if (iVar38 < (int)ABS((double)(int)param_1[0xc])) {
                                      iVar38 = (int)ABS((double)(int)param_1[0xc]);
                                    }
                                    if (uVar8 != 0xd) {
                                      if (iVar38 < (int)ABS((double)(int)param_1[0xd])) {
                                        iVar38 = (int)ABS((double)(int)param_1[0xd]);
                                      }
                                      if (uVar8 != 0xe) {
                                        if (iVar38 < (int)ABS((double)(int)param_1[0xe])) {
                                          iVar38 = (int)ABS((double)(int)param_1[0xe]);
                                        }
                                        if (uVar8 != 0xf) {
                                          if (iVar38 < (int)ABS((double)(int)param_1[0xf])) {
                                            iVar38 = (int)ABS((double)(int)param_1[0xf]);
                                          }
                                          if (uVar8 == 0x11) {
                                            if (iVar38 < (int)ABS((double)(int)param_1[0x10])) {
                                              iVar38 = (int)ABS((double)(int)param_1[0x10]);
                                            }
                                          }
                                          else {
                                            uVar10 = 0x10;
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (param_5 == uVar8) goto LAB_00396f74;
          }
          uVar1 = ((param_5 - uVar8) - 0x10 >> 4) + 1;
          iVar7 = uVar1 * 0x10;
          if (0xe < (param_5 - 1) - uVar8) {
            auVar39._4_4_ = iVar38;
            auVar39._0_4_ = iVar38;
            auVar39._8_4_ = iVar38;
            auVar39._12_4_ = iVar38;
            uVar6 = 0;
            pcVar9 = param_1 + uVar8;
            do {
              uVar6 = uVar6 + 1;
              auVar30._0_8_ = (long)(int)(short)*pcVar9;
              auVar30._8_8_ = (long)(int)(short)pcVar9[1];
              auVar33._0_8_ = (long)(int)(short)pcVar9[4];
              auVar33._8_8_ = (long)(int)(short)pcVar9[5];
              auVar19._0_8_ = (long)(int)(short)pcVar9[6];
              auVar19._8_8_ = (long)(int)(short)pcVar9[7];
              auVar26._0_8_ = (long)(int)(short)pcVar9[2];
              auVar26._8_8_ = (long)(int)(short)pcVar9[3];
              auVar25._0_8_ = (long)(int)(short)pcVar9[8];
              auVar25._8_8_ = (long)(int)(short)pcVar9[9];
              auVar31 = NEON_scvtf(auVar30,8);
              auVar34 = NEON_scvtf(auVar33,8);
              auVar16 = NEON_scvtf(auVar19,8);
              auVar21._0_8_ = (long)(int)(short)pcVar9[10];
              auVar21._8_8_ = (long)(int)(short)pcVar9[0xb];
              auVar20 = NEON_scvtf(auVar26,8);
              auVar35._4_4_ = (int)(long)ABS(auVar31._8_8_);
              auVar35._0_4_ = (int)(long)ABS(auVar31._0_8_);
              auVar35._8_4_ = (int)(long)ABS(auVar20._0_8_);
              auVar35._12_4_ = (int)(long)ABS(auVar20._8_8_);
              auVar26 = NEON_scvtf(auVar25,8);
              auVar31._0_8_ = (long)(int)(short)pcVar9[0xc];
              auVar31._8_8_ = (long)(int)(short)pcVar9[0xd];
              auVar20._4_4_ = (int)(long)ABS(auVar34._8_8_);
              auVar20._0_4_ = (int)(long)ABS(auVar34._0_8_);
              auVar20._8_4_ = (int)(long)ABS(auVar16._0_8_);
              auVar20._12_4_ = (int)(long)ABS(auVar16._8_8_);
              auVar19 = NEON_smax(auVar20,auVar35,4);
              auVar20 = NEON_scvtf(auVar21,8);
              auVar16._0_8_ = (long)(int)(short)pcVar9[0xe];
              auVar16._8_8_ = (long)(int)(short)pcVar9[0xf];
              auVar27._4_4_ = (int)(long)ABS(auVar26._8_8_);
              auVar27._0_4_ = (int)(long)ABS(auVar26._0_8_);
              auVar27._8_4_ = (int)(long)ABS(auVar20._0_8_);
              auVar27._12_4_ = (int)(long)ABS(auVar20._8_8_);
              auVar21 = NEON_scvtf(auVar31,8);
              auVar19 = NEON_smax(auVar19,auVar27,4);
              auVar20 = NEON_scvtf(auVar16,8);
              auVar34._4_4_ = (int)(long)ABS(auVar21._8_8_);
              auVar34._0_4_ = (int)(long)ABS(auVar21._0_8_);
              auVar34._8_4_ = (int)(long)ABS(auVar20._0_8_);
              auVar34._12_4_ = (int)(long)ABS(auVar20._8_8_);
                    /* try { // try from 00396d44 to 00496d47 has its CatchHandler @ 00396ac4 */
              auVar20 = NEON_smax(auVar19,auVar34,4);
              auVar39 = NEON_smax(auVar39,auVar20,4);
              pcVar9 = pcVar9 + 0x10;
            } while (uVar6 < uVar1);
            iVar38 = NEON_smaxv(auVar39,4);
            uVar10 = uVar10 + iVar7;
            if (param_5 - uVar8 == iVar7) goto LAB_00396f74;
          }
                    /* try { // try from 00396d64 to 00496d67 has its CatchHandler @ 00397178 */
                    /* try { // try from 00396d6c to 00496e4b has its CatchHandler @ 00396ac4 */
          if (iVar38 < (int)ABS((double)(int)param_1[(int)uVar10])) {
            iVar38 = (int)ABS((double)(int)param_1[(int)uVar10]);
          }
          if ((int)(uVar10 + 1) < (int)param_5) {
            if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 1)])) {
              iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 1)]);
            }
            if ((int)(uVar10 + 2) < (int)param_5) {
              if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 2)])) {
                iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 2)]);
              }
              if ((int)(uVar10 + 3) < (int)param_5) {
                if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 3)])) {
                  iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 3)]);
                }
                if ((int)(uVar10 + 4) < (int)param_5) {
                  if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 4)])) {
                    iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 4)]);
                  }
                  if ((int)(uVar10 + 5) < (int)param_5) {
                    if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 5)])) {
                      iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 5)]);
                    }
                    if ((int)(uVar10 + 6) < (int)param_5) {
                      if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 6)])) {
                        iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 6)]);
                      }
                      if ((int)(uVar10 + 7) < (int)param_5) {
                    /* try { // try from 00396e68 to 00496e6b has its CatchHandler @ 00397164 */
                    /* try { // try from 00396e70 to 00497037 has its CatchHandler @ 00396ac4 */
                        if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 7)])) {
                          iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 7)]);
                        }
                        if ((int)(uVar10 + 8) < (int)param_5) {
                          if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 8)])) {
                            iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 8)]);
                          }
                          if ((int)(uVar10 + 9) < (int)param_5) {
                            if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 9)])) {
                              iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 9)]);
                            }
                            if ((int)(uVar10 + 10) < (int)param_5) {
                              if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 10)])) {
                                iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 10)]);
                              }
                              if ((int)(uVar10 + 0xb) < (int)param_5) {
                                if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 0xb)])) {
                                  iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 0xb)]);
                                }
                                if ((int)(uVar10 + 0xc) < (int)param_5) {
                                  if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 0xc)]))
                                  {
                                    iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 0xc)]);
                                  }
                                  if ((int)(uVar10 + 0xd) < (int)param_5) {
                                    if (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 0xd)])
                                       ) {
                                      iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 0xd)]);
                                    }
                                    if (((int)(uVar10 + 0xe) < (int)param_5) &&
                                       (iVar38 < (int)ABS((double)(int)param_1[(int)(uVar10 + 0xe)])
                                       )) {
                                      iVar38 = (int)ABS((double)(int)param_1[(int)(uVar10 + 0xe)]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00396f74:
        lVar13 = lVar13 + 1;
        param_1 = param_1 + (int)param_5;
        uVar14 = uVar14 - param_5;
      } while ((int)lVar13 < param_4);
    }
    *param_3 = iVar38;
    return 0;
  }
  param_5 = param_4 * param_5;
  iVar7 = 0;
  if ((int)param_5 < 1) goto LAB_0039752c;
  uVar14 = -(int)param_1 & 0xf;
  if (param_5 < uVar14) {
    uVar14 = param_5;
  }
  uVar12 = (ulong)uVar14;
  if ((int)param_5 < 0x12) {
    uVar12 = (ulong)param_5;
LAB_00396fdc:
    iVar7 = (int)ABS((double)(int)*param_1);
    if (iVar7 < 0) {
      iVar7 = 0;
    }
    iVar11 = (int)uVar12;
    uVar5 = uVar12;
    if (iVar11 != 1) {
      if (iVar7 < (int)ABS((double)(int)param_1[1])) {
        iVar7 = (int)ABS((double)(int)param_1[1]);
      }
      if (iVar11 != 2) {
        if (iVar7 < (int)ABS((double)(int)param_1[2])) {
          iVar7 = (int)ABS((double)(int)param_1[2]);
        }
        if (iVar11 != 3) {
          if (iVar7 < (int)ABS((double)(int)param_1[3])) {
            iVar7 = (int)ABS((double)(int)param_1[3]);
          }
          if (iVar11 != 4) {
            if (iVar7 < (int)ABS((double)(int)param_1[4])) {
              iVar7 = (int)ABS((double)(int)param_1[4]);
            }
            if (iVar11 != 5) {
                    /* try { // try from 00397080 to 00497083 has its CatchHandler @ 003970a0 */
                    /* try { // try from 00397088 to 0049708b has its CatchHandler @ 00396ac4 */
              if (iVar7 < (int)ABS((double)(int)param_1[5])) {
                iVar7 = (int)ABS((double)(int)param_1[5]);
              }
              if (iVar11 != 6) {
                    /* catch() { ... } // from try @ 00397080 with catch @ 003970a0 */
                    /* try { // try from 003970b0 to 0049715b has its CatchHandler @ 00396ac4 */
                if (iVar7 < (int)ABS((double)(int)param_1[6])) {
                  iVar7 = (int)ABS((double)(int)param_1[6]);
                }
                if (iVar11 != 7) {
                  if (iVar7 < (int)ABS((double)(int)param_1[7])) {
                    iVar7 = (int)ABS((double)(int)param_1[7]);
                  }
                  if (iVar11 != 8) {
                    if (iVar7 < (int)ABS((double)(int)param_1[8])) {
                      iVar7 = (int)ABS((double)(int)param_1[8]);
                    }
                    if (iVar11 != 9) {
                      if (iVar7 < (int)ABS((double)(int)param_1[9])) {
                        iVar7 = (int)ABS((double)(int)param_1[9]);
                      }
                      if (iVar11 == 10) {
                        uVar5 = 10;
                      }
                      else {
                        if (iVar7 < (int)ABS((double)(int)param_1[10])) {
                          iVar7 = (int)ABS((double)(int)param_1[10]);
                        }
                        if (iVar11 != 0xb) {
                          if (iVar7 < (int)ABS((double)(int)param_1[0xb])) {
                            iVar7 = (int)ABS((double)(int)param_1[0xb]);
                          }
                          if (iVar11 != 0xc) {
                    /* catch() { ... } // from try @ 00396e68 with catch @ 00397164 */
                            if (iVar7 < (int)ABS((double)(int)param_1[0xc])) {
                              iVar7 = (int)ABS((double)(int)param_1[0xc]);
                            }
                    /* try { // try from 00397174 to 00497177 has its CatchHandler @ 00396ac4 */
                    /* catch() { ... } // from try @ 00396d64 with catch @ 00397178 */
                            if (iVar11 != 0xd) {
                    /* try { // try from 00397188 to 0049718b has its CatchHandler @ 00396ac4 */
                              if (iVar7 < (int)ABS((double)(int)param_1[0xd])) {
                                iVar7 = (int)ABS((double)(int)param_1[0xd]);
                              }
                              if (iVar11 != 0xe) {
                    /* catch() { ... } // from try @ 00397458 with catch @ 003971a4
                       catch() { ... } // from try @ 003974a4 with catch @ 003971a4
                       catch() { ... } // from try @ 00397558 with catch @ 003971a4
                       catch() { ... } // from try @ 003975b4 with catch @ 003971a4
                       catch() { ... } // from try @ 003975c8 with catch @ 003971a4 */
                                if (iVar7 < (int)ABS((double)(int)param_1[0xe])) {
                                  iVar7 = (int)ABS((double)(int)param_1[0xe]);
                                }
                                if (iVar11 != 0xf) {
                                  if (iVar7 < (int)ABS((double)(int)param_1[0xf])) {
                                    iVar7 = (int)ABS((double)(int)param_1[0xf]);
                                  }
                                  if (iVar11 == 0x11) {
                                    if (iVar7 < (int)ABS((double)(int)param_1[0x10])) {
                                      iVar7 = (int)ABS((double)(int)param_1[0x10]);
                                    }
                                  }
                                  else {
                                    uVar5 = 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    iVar4 = (int)uVar5;
    if (param_5 - iVar11 == 0) goto LAB_0039752c;
  }
  else {
    iVar4 = 0;
    if (uVar14 != 0) goto LAB_00396fdc;
  }
  iVar2 = param_5 - (int)uVar12;
  uVar14 = (iVar2 - 0x10U >> 4) + 1;
  iVar11 = uVar14 * 0x10;
  if (0xe < (param_5 - 1) - (int)uVar12) {
    auVar40._4_4_ = iVar7;
    auVar40._0_4_ = iVar7;
    auVar40._8_4_ = iVar7;
    auVar40._12_4_ = iVar7;
    uVar8 = 0;
    pcVar9 = param_1 + uVar12;
    do {
      uVar8 = uVar8 + 1;
      auVar32._0_8_ = (long)(int)(short)*pcVar9;
      auVar32._8_8_ = (long)(int)(short)pcVar9[1];
      auVar36._0_8_ = (long)(int)(short)pcVar9[4];
      auVar36._8_8_ = (long)(int)(short)pcVar9[5];
      auVar17._0_8_ = (long)(int)(short)pcVar9[6];
      auVar17._8_8_ = (long)(int)(short)pcVar9[7];
      auVar22._0_8_ = (long)(int)(short)pcVar9[2];
      auVar22._8_8_ = (long)(int)(short)pcVar9[3];
      auVar28._0_8_ = (long)(int)(short)pcVar9[8];
      auVar28._8_8_ = (long)(int)(short)pcVar9[9];
      auVar16 = NEON_scvtf(auVar32,8);
      auVar19 = NEON_scvtf(auVar36,8);
      auVar39 = NEON_scvtf(auVar17,8);
      auVar18._0_8_ = (long)(int)(short)pcVar9[10];
      auVar18._8_8_ = (long)(int)(short)pcVar9[0xb];
      auVar20 = NEON_scvtf(auVar22,8);
      auVar37._4_4_ = (int)(long)ABS(auVar16._8_8_);
      auVar37._0_4_ = (int)(long)ABS(auVar16._0_8_);
      auVar37._8_4_ = (int)(long)ABS(auVar20._0_8_);
      auVar37._12_4_ = (int)(long)ABS(auVar20._8_8_);
      auVar16 = NEON_scvtf(auVar28,8);
      auVar23._0_8_ = (long)(int)(short)pcVar9[0xc];
      auVar23._8_8_ = (long)(int)(short)pcVar9[0xd];
      auVar3._4_4_ = (int)(long)ABS(auVar19._8_8_);
      auVar3._0_4_ = (int)(long)ABS(auVar19._0_8_);
      auVar3._8_4_ = (int)(long)ABS(auVar39._0_8_);
      auVar3._12_4_ = (int)(long)ABS(auVar39._8_8_);
      auVar20 = NEON_smax(auVar3,auVar37,4);
      auVar39 = NEON_scvtf(auVar18,8);
      auVar15._0_8_ = (long)(int)(short)pcVar9[0xe];
      auVar15._8_8_ = (long)(int)(short)pcVar9[0xf];
      auVar29._4_4_ = (int)(long)ABS(auVar16._8_8_);
      auVar29._0_4_ = (int)(long)ABS(auVar16._0_8_);
      auVar29._8_4_ = (int)(long)ABS(auVar39._0_8_);
      auVar29._12_4_ = (int)(long)ABS(auVar39._8_8_);
      auVar16 = NEON_scvtf(auVar23,8);
      auVar20 = NEON_smax(auVar20,auVar29,4);
      auVar39 = NEON_scvtf(auVar15,8);
      auVar24._4_4_ = (int)(long)ABS(auVar16._8_8_);
      auVar24._0_4_ = (int)(long)ABS(auVar16._0_8_);
      auVar24._8_4_ = (int)(long)ABS(auVar39._0_8_);
      auVar24._12_4_ = (int)(long)ABS(auVar39._8_8_);
      auVar39 = NEON_smax(auVar20,auVar24,4);
      auVar40 = NEON_smax(auVar40,auVar39,4);
      pcVar9 = pcVar9 + 0x10;
    } while (uVar8 < uVar14);
    iVar7 = NEON_smaxv(auVar40,4);
    iVar4 = iVar4 + iVar11;
    if (iVar11 == iVar2) goto LAB_0039752c;
  }
  iVar11 = iVar4 + 1;
  if (iVar7 < (int)ABS((double)(int)param_1[iVar4])) {
    iVar7 = (int)ABS((double)(int)param_1[iVar4]);
  }
  if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
    iVar2 = iVar4 + 2;
    if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
      iVar7 = (int)ABS((double)(int)param_1[iVar11]);
    }
    if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
      iVar11 = iVar4 + 3;
      if (iVar7 < (int)ABS((double)(int)param_1[iVar2])) {
        iVar7 = (int)ABS((double)(int)param_1[iVar2]);
      }
      if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
        iVar2 = iVar4 + 4;
        if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
          iVar7 = (int)ABS((double)(int)param_1[iVar11]);
        }
        if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
          iVar11 = iVar4 + 5;
          if (iVar7 < (int)ABS((double)(int)param_1[iVar2])) {
            iVar7 = (int)ABS((double)(int)param_1[iVar2]);
          }
          if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
            iVar2 = iVar4 + 6;
            if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
              iVar7 = (int)ABS((double)(int)param_1[iVar11]);
            }
            if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
              iVar11 = iVar4 + 7;
              if (iVar7 < (int)ABS((double)(int)param_1[iVar2])) {
                iVar7 = (int)ABS((double)(int)param_1[iVar2]);
              }
              if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
                if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
                  iVar7 = (int)ABS((double)(int)param_1[iVar11]);
                }
                if (iVar4 + 8 < (int)param_5) {
                  iVar11 = iVar4 + 9;
                  if (iVar7 < (int)ABS((double)(int)param_1[iVar4 + 8])) {
                    iVar7 = (int)ABS((double)(int)param_1[iVar4 + 8]);
                  }
                    /* try { // try from 00397458 to 0049745b has its CatchHandler @ 003971a4 */
                  if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
                    iVar2 = iVar4 + 10;
                    if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
                      iVar7 = (int)ABS((double)(int)param_1[iVar11]);
                    }
                    if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                      iVar11 = iVar4 + 0xb;
                    /* try { // try from 0039749c to 0049749f has its CatchHandler @ 003975b8 */
                      if (iVar7 < (int)ABS((double)(int)param_1[iVar2])) {
                        iVar7 = (int)ABS((double)(int)param_1[iVar2]);
                      }
                    /* try { // try from 003974a4 to 00497533 has its CatchHandler @ 003971a4 */
                      if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
                        iVar2 = iVar4 + 0xc;
                        if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
                          iVar7 = (int)ABS((double)(int)param_1[iVar11]);
                        }
                        if (param_5 - iVar2 != 0 && iVar2 <= (int)param_5) {
                          iVar11 = iVar4 + 0xd;
                          if (iVar7 < (int)ABS((double)(int)param_1[iVar2])) {
                            iVar7 = (int)ABS((double)(int)param_1[iVar2]);
                          }
                          if (param_5 - iVar11 != 0 && iVar11 <= (int)param_5) {
                            iVar4 = iVar4 + 0xe;
                            if (iVar7 < (int)ABS((double)(int)param_1[iVar11])) {
                              iVar7 = (int)ABS((double)(int)param_1[iVar11]);
                            }
                            if ((param_5 - iVar4 != 0 && iVar4 <= (int)param_5) &&
                               (iVar7 < (int)ABS((double)(int)param_1[iVar4]))) {
                              iVar7 = (int)ABS((double)(int)param_1[iVar4]);
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0039752c:
  if (iVar38 < iVar7) {
    iVar38 = iVar7;
  }
  *param_3 = iVar38;
  return 0;
}


==================================================================

### FUNC 0039756c (3264 bytes) name=FUN_0039756c

undefined8
FUN_0039756c(char *param_1,char *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  uint uVar1;
  undefined1 auVar2 [16];
  undefined4 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined8 uVar7;
  undefined4 uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined4 uVar11;
  undefined8 uVar12;
  undefined4 uVar13;
  undefined4 uVar14;
  undefined8 uVar15;
  undefined4 uVar16;
  ulong uVar17;
  int iVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  char *pcVar23;
  int iVar24;
  uint uVar25;
  ulong uVar26;
  long lVar27;
  uint uVar28;
  char *pcVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  int iVar35;
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  
  iVar35 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar28 = -(int)param_1;
      lVar27 = 0;
      do {
        if ((*(char *)(param_3 + lVar27) != '\0') && (0 < (int)param_6)) {
                    /* catch() { ... } // from try @ 00397550 with catch @ 003975a4 */
          uVar22 = uVar28 & 0xf;
          if (param_6 < (uVar28 & 0xf)) {
            uVar22 = param_6;
          }
          if (param_6 < 0x11) {
            uVar22 = param_6;
          }
                    /* try { // try from 003975b4 to 004975b7 has its CatchHandler @ 003971a4 */
          uVar25 = uVar22;
          if (uVar22 != 0) {
                    /* catch() { ... } // from try @ 0039749c with catch @ 003975b8 */
            uVar1 = (int)*param_1 - (int)*param_2 >> 0x1f;
                    /* try { // try from 003975c8 to 004975cb has its CatchHandler @ 003971a4 */
                    /* catch() { ... } // from try @ 003979c0 with catch @ 003975cc
                       catch() { ... } // from try @ 00397b10 with catch @ 003975cc
                       catch() { ... } // from try @ 00397b80 with catch @ 003975cc
                       catch() { ... } // from try @ 00397d3c with catch @ 003975cc
                       catch() { ... } // from try @ 00397d9c with catch @ 003975cc
                       catch() { ... } // from try @ 00397e9c with catch @ 003975cc
                       catch() { ... } // from try @ 00398128 with catch @ 003975cc
                       catch() { ... } // from try @ 0039813c with catch @ 003975cc
                       catch() { ... } // from try @ 00398150 with catch @ 003975cc */
            iVar24 = ((int)*param_1 - (int)*param_2 ^ uVar1) - uVar1;
            if (iVar35 < iVar24) {
              iVar35 = iVar24;
            }
            if (uVar22 != 1) {
              uVar1 = (int)param_1[1] - (int)param_2[1] >> 0x1f;
              iVar24 = ((int)param_1[1] - (int)param_2[1] ^ uVar1) - uVar1;
              if (iVar35 < iVar24) {
                iVar35 = iVar24;
              }
              if (uVar22 != 2) {
                uVar1 = (int)param_1[2] - (int)param_2[2] >> 0x1f;
                iVar24 = ((int)param_1[2] - (int)param_2[2] ^ uVar1) - uVar1;
                if (iVar35 < iVar24) {
                  iVar35 = iVar24;
                }
                if (uVar22 != 3) {
                  uVar1 = (int)param_1[3] - (int)param_2[3] >> 0x1f;
                  iVar24 = ((int)param_1[3] - (int)param_2[3] ^ uVar1) - uVar1;
                  if (iVar35 < iVar24) {
                    iVar35 = iVar24;
                  }
                  if (uVar22 != 4) {
                    uVar1 = (int)param_1[4] - (int)param_2[4] >> 0x1f;
                    iVar24 = ((int)param_1[4] - (int)param_2[4] ^ uVar1) - uVar1;
                    if (iVar35 < iVar24) {
                      iVar35 = iVar24;
                    }
                    if (uVar22 != 5) {
                      uVar1 = (int)param_1[5] - (int)param_2[5] >> 0x1f;
                      iVar24 = ((int)param_1[5] - (int)param_2[5] ^ uVar1) - uVar1;
                      if (iVar35 < iVar24) {
                        iVar35 = iVar24;
                      }
                      if (uVar22 != 6) {
                        uVar1 = (int)param_1[6] - (int)param_2[6] >> 0x1f;
                        iVar24 = ((int)param_1[6] - (int)param_2[6] ^ uVar1) - uVar1;
                        if (iVar35 < iVar24) {
                          iVar35 = iVar24;
                        }
                        if (uVar22 == 7) {
                          uVar25 = 7;
                        }
                        else {
                          uVar1 = (int)param_1[7] - (int)param_2[7] >> 0x1f;
                          iVar24 = ((int)param_1[7] - (int)param_2[7] ^ uVar1) - uVar1;
                          if (iVar35 < iVar24) {
                            iVar35 = iVar24;
                          }
                          if (uVar22 != 8) {
                            uVar1 = (int)param_1[8] - (int)param_2[8] >> 0x1f;
                            iVar24 = ((int)param_1[8] - (int)param_2[8] ^ uVar1) - uVar1;
                            if (iVar35 < iVar24) {
                              iVar35 = iVar24;
                            }
                            if (uVar22 != 9) {
                              uVar1 = (int)param_1[9] - (int)param_2[9] >> 0x1f;
                              iVar24 = ((int)param_1[9] - (int)param_2[9] ^ uVar1) - uVar1;
                              if (iVar35 < iVar24) {
                                iVar35 = iVar24;
                              }
                              if (uVar22 != 10) {
                                uVar1 = (int)param_1[10] - (int)param_2[10] >> 0x1f;
                                iVar24 = ((int)param_1[10] - (int)param_2[10] ^ uVar1) - uVar1;
                                if (iVar35 < iVar24) {
                                  iVar35 = iVar24;
                                }
                                if (uVar22 != 0xb) {
                                  uVar1 = (int)param_1[0xb] - (int)param_2[0xb] >> 0x1f;
                                  iVar24 = ((int)param_1[0xb] - (int)param_2[0xb] ^ uVar1) - uVar1;
                                  if (iVar35 < iVar24) {
                                    iVar35 = iVar24;
                                  }
                                  if (uVar22 != 0xc) {
                                    uVar1 = (int)param_1[0xc] - (int)param_2[0xc] >> 0x1f;
                                    iVar24 = ((int)param_1[0xc] - (int)param_2[0xc] ^ uVar1) - uVar1
                                    ;
                                    if (iVar35 < iVar24) {
                                      iVar35 = iVar24;
                                    }
                                    if (uVar22 != 0xd) {
                                      uVar1 = (int)param_1[0xd] - (int)param_2[0xd] >> 0x1f;
                                      iVar24 = ((int)param_1[0xd] - (int)param_2[0xd] ^ uVar1) -
                                               uVar1;
                                      if (iVar35 < iVar24) {
                                        iVar35 = iVar24;
                                      }
                                      if (uVar22 != 0xe) {
                                        uVar1 = (int)param_1[0xe] - (int)param_2[0xe] >> 0x1f;
                                        iVar24 = ((int)param_1[0xe] - (int)param_2[0xe] ^ uVar1) -
                                                 uVar1;
                                        if (iVar35 < iVar24) {
                                          iVar35 = iVar24;
                                        }
                                        if (uVar22 == 0x10) {
                                          uVar1 = (int)param_1[0xf] - (int)param_2[0xf] >> 0x1f;
                                          iVar24 = ((int)param_1[0xf] - (int)param_2[0xf] ^ uVar1) -
                                                   uVar1;
                                          if (iVar35 < iVar24) {
                                            iVar35 = iVar24;
                                          }
                                        }
                                        else {
                                          uVar25 = 0xf;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (param_6 == uVar22) goto LAB_00397b9c;
          }
          uVar1 = ((param_6 - uVar22) - 0x10 >> 4) + 1;
          iVar24 = uVar1 * 0x10;
          if (0xe < (param_6 - 1) - uVar22) {
            auVar36._4_4_ = iVar35;
            auVar36._0_4_ = iVar35;
            auVar36._8_4_ = iVar35;
            auVar36._12_4_ = iVar35;
            uVar20 = 0;
            pcVar23 = param_2 + uVar22;
            pcVar29 = param_1 + uVar22;
            do {
              uVar7 = *(undefined8 *)(pcVar29 + 8);
              uVar4 = *(undefined8 *)pcVar29;
              uVar20 = uVar20 + 1;
              uVar15 = *(undefined8 *)(pcVar23 + 8);
              uVar12 = *(undefined8 *)pcVar23;
              uVar3 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x20) -
                                 (int)(short)(char)((ulong)uVar12 >> 0x20));
              uVar5 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x28) -
                                 (int)(short)(char)((ulong)uVar12 >> 0x28));
              uVar6 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x30) -
                                 (int)(short)(char)((ulong)uVar12 >> 0x30));
              uVar8 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x38) -
                                 (int)(short)(char)((ulong)uVar12 >> 0x38));
              auVar32._0_4_ = MP_INT_ABS((int)(short)(char)uVar4 - (int)(short)(char)uVar12);
              auVar32._4_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 8) -
                              (int)(short)(char)((ulong)uVar12 >> 8));
              auVar32._8_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x10) -
                              (int)(short)(char)((ulong)uVar12 >> 0x10));
              auVar32._12_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x18) -
                              (int)(short)(char)((ulong)uVar12 >> 0x18));
              auVar30._0_4_ = MP_INT_ABS((int)(short)(char)uVar7 - (int)(short)(char)uVar15);
              auVar30._4_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 8) -
                              (int)(short)(char)((ulong)uVar15 >> 8));
              auVar30._8_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x10) -
                              (int)(short)(char)((ulong)uVar15 >> 0x10));
              auVar30._12_4_ =
                   MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x18) -
                              (int)(short)(char)((ulong)uVar15 >> 0x18));
              uVar11 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x20) -
                                  (int)(short)(char)((ulong)uVar15 >> 0x20));
              uVar13 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x28) -
                                  (int)(short)(char)((ulong)uVar15 >> 0x28));
              uVar14 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x30) -
                                  (int)(short)(char)((ulong)uVar15 >> 0x30));
              uVar16 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x38) -
                                  (int)(short)(char)((ulong)uVar15 >> 0x38));
              auVar33._4_2_ = (short)uVar5;
              auVar33._0_4_ = uVar3;
              auVar33._6_2_ = (short)((uint)uVar5 >> 0x10);
              auVar33._8_2_ = (short)uVar6;
              auVar33._10_2_ = (short)((uint)uVar6 >> 0x10);
              auVar33._12_2_ = (short)uVar8;
              auVar33._14_2_ = (short)((uint)uVar8 >> 0x10);
              auVar33 = NEON_smax(auVar33,auVar32,4);
              auVar33 = NEON_smax(auVar33,auVar30,4);
              auVar9._4_2_ = (short)uVar13;
              auVar9._0_4_ = uVar11;
              auVar9._6_2_ = (short)((uint)uVar13 >> 0x10);
              auVar9._8_2_ = (short)uVar14;
              auVar9._10_2_ = (short)((uint)uVar14 >> 0x10);
              auVar9._12_2_ = (short)uVar16;
              auVar9._14_2_ = (short)((uint)uVar16 >> 0x10);
              auVar33 = NEON_smax(auVar33,auVar9,4);
              auVar36 = NEON_smax(auVar36,auVar33,4);
              pcVar23 = pcVar23 + 0x10;
              pcVar29 = pcVar29 + 0x10;
            } while (uVar20 < uVar1);
            iVar35 = NEON_smaxv(auVar36,4);
            uVar25 = uVar25 + iVar24;
            if (param_6 - uVar22 == iVar24) goto LAB_00397b9c;
          }
          iVar24 = uVar25 + 1;
          uVar22 = (int)param_1[(int)uVar25] - (int)param_2[(int)uVar25] >> 0x1f;
          iVar21 = ((int)param_1[(int)uVar25] - (int)param_2[(int)uVar25] ^ uVar22) - uVar22;
          if (iVar35 < iVar21) {
            iVar35 = iVar21;
          }
          if (iVar24 < (int)param_6) {
            iVar21 = uVar25 + 2;
            uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
            iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) - uVar22;
            if (iVar35 < iVar24) {
              iVar35 = iVar24;
            }
            if (iVar21 < (int)param_6) {
              iVar24 = uVar25 + 3;
              uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
              iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) - uVar22;
              if (iVar35 < iVar21) {
                iVar35 = iVar21;
              }
              if (iVar24 < (int)param_6) {
                iVar21 = uVar25 + 4;
                uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) - uVar22;
                if (iVar35 < iVar24) {
                  iVar35 = iVar24;
                }
                if (iVar21 < (int)param_6) {
                  iVar24 = uVar25 + 5;
                  uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
                  iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) - uVar22;
                  if (iVar35 < iVar21) {
                    iVar35 = iVar21;
                  }
                    /* try { // try from 003979c0 to 00497ac7 has its CatchHandler @ 003975cc */
                  if (iVar24 < (int)param_6) {
                    iVar21 = uVar25 + 6;
                    uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                    iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) - uVar22;
                    if (iVar35 < iVar24) {
                      iVar35 = iVar24;
                    }
                    if (iVar21 < (int)param_6) {
                      iVar24 = uVar25 + 7;
                      uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
                      iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) - uVar22;
                      if (iVar35 < iVar21) {
                        iVar35 = iVar21;
                      }
                      if (iVar24 < (int)param_6) {
                        iVar21 = uVar25 + 8;
                        uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                        iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) - uVar22;
                        if (iVar35 < iVar24) {
                          iVar35 = iVar24;
                        }
                        if (iVar21 < (int)param_6) {
                          iVar24 = uVar25 + 9;
                          uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
                          iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) - uVar22;
                          if (iVar35 < iVar21) {
                            iVar35 = iVar21;
                          }
                          if (iVar24 < (int)param_6) {
                            iVar21 = uVar25 + 10;
                            uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                            iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) - uVar22
                            ;
                            if (iVar35 < iVar24) {
                              iVar35 = iVar24;
                            }
                            if (iVar21 < (int)param_6) {
                              iVar24 = uVar25 + 0xb;
                              uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
                              iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) -
                                       uVar22;
                              if (iVar35 < iVar21) {
                                iVar35 = iVar21;
                              }
                              if (iVar24 < (int)param_6) {
                                iVar21 = uVar25 + 0xc;
                    /* try { // try from 00397b08 to 00497b0b has its CatchHandler @ 00398140 */
                                uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                                iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22) -
                                         uVar22;
                                if (iVar35 < iVar24) {
                                  iVar35 = iVar24;
                                }
                    /* try { // try from 00397b10 to 00497b2f has its CatchHandler @ 003975cc */
                                if (iVar21 < (int)param_6) {
                                  iVar24 = uVar25 + 0xd;
                                  uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
                                  iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar22) -
                                           uVar22;
                                  if (iVar35 < iVar21) {
                                    iVar35 = iVar21;
                                  }
                                  if (iVar24 < (int)param_6) {
                                    iVar21 = uVar25 + 0xe;
                                    uVar22 = (int)param_1[iVar24] - (int)param_2[iVar24] >> 0x1f;
                                    iVar24 = ((int)param_1[iVar24] - (int)param_2[iVar24] ^ uVar22)
                                             - uVar22;
                                    if (iVar35 < iVar24) {
                                      iVar35 = iVar24;
                                    }
                    /* try { // try from 00397b78 to 00497b7b has its CatchHandler @ 00398118 */
                    /* try { // try from 00397b80 to 00497cfb has its CatchHandler @ 003975cc */
                                    if ((iVar21 < (int)param_6) &&
                                       (uVar22 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f
                                       , iVar24 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^
                                                  uVar22) - uVar22, iVar35 < iVar24)) {
                                      iVar35 = iVar24;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00397b9c:
        lVar27 = lVar27 + 1;
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar28 = uVar28 - param_6;
      } while ((int)lVar27 < param_5);
    }
    *param_4 = iVar35;
    return 0;
  }
  param_6 = param_5 * param_6;
  iVar24 = 0;
  if ((int)param_6 < 1) goto LAB_003981ec;
  uVar28 = -(int)param_1 & 0xf;
  if (param_6 < uVar28) {
    uVar28 = param_6;
  }
  uVar26 = (ulong)uVar28;
  if ((int)param_6 < 0x11) {
    uVar26 = (ulong)param_6;
LAB_00397c08:
    uVar28 = (int)*param_1 - (int)*param_2 >> 0x1f;
    iVar24 = ((int)*param_1 - (int)*param_2 ^ uVar28) - uVar28;
    if (iVar24 < 0) {
      iVar24 = 0;
    }
    iVar19 = (int)uVar26;
    uVar17 = uVar26;
    if (iVar19 != 1) {
      uVar28 = (int)param_1[1] - (int)param_2[1] >> 0x1f;
      iVar21 = ((int)param_1[1] - (int)param_2[1] ^ uVar28) - uVar28;
      if (iVar24 < iVar21) {
        iVar24 = iVar21;
      }
      if (iVar19 != 2) {
        uVar28 = (int)param_1[2] - (int)param_2[2] >> 0x1f;
        iVar21 = ((int)param_1[2] - (int)param_2[2] ^ uVar28) - uVar28;
        if (iVar24 < iVar21) {
          iVar24 = iVar21;
        }
        if (iVar19 != 3) {
          uVar28 = (int)param_1[3] - (int)param_2[3] >> 0x1f;
          iVar21 = ((int)param_1[3] - (int)param_2[3] ^ uVar28) - uVar28;
          if (iVar24 < iVar21) {
            iVar24 = iVar21;
          }
          if (iVar19 != 4) {
            uVar28 = (int)param_1[4] - (int)param_2[4] >> 0x1f;
            iVar21 = ((int)param_1[4] - (int)param_2[4] ^ uVar28) - uVar28;
            if (iVar24 < iVar21) {
              iVar24 = iVar21;
            }
            if (iVar19 != 5) {
              uVar28 = (int)param_1[5] - (int)param_2[5] >> 0x1f;
              iVar21 = ((int)param_1[5] - (int)param_2[5] ^ uVar28) - uVar28;
              if (iVar24 < iVar21) {
                iVar24 = iVar21;
              }
              if (iVar19 != 6) {
                uVar28 = (int)param_1[6] - (int)param_2[6] >> 0x1f;
                iVar21 = ((int)param_1[6] - (int)param_2[6] ^ uVar28) - uVar28;
                if (iVar24 < iVar21) {
                  iVar24 = iVar21;
                }
                if (iVar19 != 7) {
                  uVar28 = (int)param_1[7] - (int)param_2[7] >> 0x1f;
                    /* try { // try from 00397d34 to 00497d37 has its CatchHandler @ 0039812c */
                  iVar21 = ((int)param_1[7] - (int)param_2[7] ^ uVar28) - uVar28;
                    /* try { // try from 00397d3c to 00497d5b has its CatchHandler @ 003975cc */
                  if (iVar24 < iVar21) {
                    iVar24 = iVar21;
                  }
                  if (iVar19 != 8) {
                    uVar28 = (int)param_1[8] - (int)param_2[8] >> 0x1f;
                    iVar21 = ((int)param_1[8] - (int)param_2[8] ^ uVar28) - uVar28;
                    if (iVar24 < iVar21) {
                      iVar24 = iVar21;
                    }
                    if (iVar19 != 9) {
                      uVar28 = (int)param_1[9] - (int)param_2[9] >> 0x1f;
                      iVar21 = ((int)param_1[9] - (int)param_2[9] ^ uVar28) - uVar28;
                      if (iVar24 < iVar21) {
                        iVar24 = iVar21;
                      }
                    /* try { // try from 00397d94 to 00497d97 has its CatchHandler @ 00397e8c */
                      if (iVar19 == 10) {
                        uVar17 = 10;
                      }
                      else {
                    /* try { // try from 00397d9c to 00497e73 has its CatchHandler @ 003975cc */
                        uVar28 = (int)param_1[10] - (int)param_2[10] >> 0x1f;
                        iVar21 = ((int)param_1[10] - (int)param_2[10] ^ uVar28) - uVar28;
                        if (iVar24 < iVar21) {
                          iVar24 = iVar21;
                        }
                        if (iVar19 != 0xb) {
                          uVar28 = (int)param_1[0xb] - (int)param_2[0xb] >> 0x1f;
                          iVar21 = ((int)param_1[0xb] - (int)param_2[0xb] ^ uVar28) - uVar28;
                          if (iVar24 < iVar21) {
                            iVar24 = iVar21;
                          }
                          if (iVar19 != 0xc) {
                            uVar28 = (int)param_1[0xc] - (int)param_2[0xc] >> 0x1f;
                            iVar21 = ((int)param_1[0xc] - (int)param_2[0xc] ^ uVar28) - uVar28;
                            if (iVar24 < iVar21) {
                              iVar24 = iVar21;
                            }
                            if (iVar19 != 0xd) {
                              uVar28 = (int)param_1[0xd] - (int)param_2[0xd] >> 0x1f;
                              iVar21 = ((int)param_1[0xd] - (int)param_2[0xd] ^ uVar28) - uVar28;
                              if (iVar24 < iVar21) {
                                iVar24 = iVar21;
                              }
                              if (iVar19 != 0xe) {
                                uVar28 = (int)param_1[0xe] - (int)param_2[0xe] >> 0x1f;
                                iVar21 = ((int)param_1[0xe] - (int)param_2[0xe] ^ uVar28) - uVar28;
                                if (iVar24 < iVar21) {
                                  iVar24 = iVar21;
                                }
                                if (iVar19 == 0x10) {
                                  uVar28 = (int)param_1[0xf] - (int)param_2[0xf] >> 0x1f;
                                  iVar21 = ((int)param_1[0xf] - (int)param_2[0xf] ^ uVar28) - uVar28
                                  ;
                                  if (iVar24 < iVar21) {
                                    iVar24 = iVar21;
                                  }
                                }
                                else {
                                  uVar17 = 0xf;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    iVar21 = (int)uVar17;
    if (param_6 - iVar19 == 0) goto LAB_003981ec;
  }
  else {
    iVar21 = 0;
    if (uVar28 != 0) goto LAB_00397c08;
  }
                    /* catch() { ... } // from try @ 00397d94 with catch @ 00397e8c */
  iVar18 = param_6 - (int)uVar26;
                    /* try { // try from 00397e9c to 0049810f has its CatchHandler @ 003975cc */
  uVar28 = (iVar18 - 0x10U >> 4) + 1;
  iVar19 = uVar28 * 0x10;
  if (0xe < (param_6 - 1) - (int)uVar26) {
    auVar37._4_4_ = iVar24;
    auVar37._0_4_ = iVar24;
    auVar37._8_4_ = iVar24;
    auVar37._12_4_ = iVar24;
    uVar22 = 0;
    pcVar23 = param_2 + uVar26;
    pcVar29 = param_1 + uVar26;
    do {
      uVar7 = *(undefined8 *)(pcVar29 + 8);
      uVar4 = *(undefined8 *)pcVar29;
      uVar22 = uVar22 + 1;
      uVar15 = *(undefined8 *)(pcVar23 + 8);
      uVar12 = *(undefined8 *)pcVar23;
      uVar3 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x20) -
                         (int)(short)(char)((ulong)uVar12 >> 0x20));
      uVar5 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x28) -
                         (int)(short)(char)((ulong)uVar12 >> 0x28));
      uVar6 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x30) -
                         (int)(short)(char)((ulong)uVar12 >> 0x30));
      uVar8 = MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x38) -
                         (int)(short)(char)((ulong)uVar12 >> 0x38));
      auVar34._0_4_ = MP_INT_ABS((int)(short)(char)uVar4 - (int)(short)(char)uVar12);
      auVar34._4_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 8) - (int)(short)(char)((ulong)uVar12 >> 8)
                     );
      auVar34._8_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x10) -
                      (int)(short)(char)((ulong)uVar12 >> 0x10));
      auVar34._12_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar4 >> 0x18) -
                      (int)(short)(char)((ulong)uVar12 >> 0x18));
      auVar31._0_4_ = MP_INT_ABS((int)(short)(char)uVar7 - (int)(short)(char)uVar15);
      auVar31._4_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 8) - (int)(short)(char)((ulong)uVar15 >> 8)
                     );
      auVar31._8_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x10) -
                      (int)(short)(char)((ulong)uVar15 >> 0x10));
      auVar31._12_4_ =
           MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x18) -
                      (int)(short)(char)((ulong)uVar15 >> 0x18));
      uVar11 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x20) -
                          (int)(short)(char)((ulong)uVar15 >> 0x20));
      uVar13 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x28) -
                          (int)(short)(char)((ulong)uVar15 >> 0x28));
      uVar14 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x30) -
                          (int)(short)(char)((ulong)uVar15 >> 0x30));
      uVar16 = MP_INT_ABS((int)(short)(char)((ulong)uVar7 >> 0x38) -
                          (int)(short)(char)((ulong)uVar15 >> 0x38));
      auVar2._4_2_ = (short)uVar5;
      auVar2._0_4_ = uVar3;
      auVar2._6_2_ = (short)((uint)uVar5 >> 0x10);
      auVar2._8_2_ = (short)uVar6;
      auVar2._10_2_ = (short)((uint)uVar6 >> 0x10);
      auVar2._12_2_ = (short)uVar8;
      auVar2._14_2_ = (short)((uint)uVar8 >> 0x10);
      auVar36 = NEON_smax(auVar2,auVar34,4);
      auVar36 = NEON_smax(auVar36,auVar31,4);
      auVar10._4_2_ = (short)uVar13;
      auVar10._0_4_ = uVar11;
      auVar10._6_2_ = (short)((uint)uVar13 >> 0x10);
      auVar10._8_2_ = (short)uVar14;
      auVar10._10_2_ = (short)((uint)uVar14 >> 0x10);
      auVar10._12_2_ = (short)uVar16;
      auVar10._14_2_ = (short)((uint)uVar16 >> 0x10);
      auVar36 = NEON_smax(auVar36,auVar10,4);
      auVar37 = NEON_smax(auVar37,auVar36,4);
      pcVar23 = pcVar23 + 0x10;
      pcVar29 = pcVar29 + 0x10;
    } while (uVar22 < uVar28);
    iVar24 = NEON_smaxv(auVar37,4);
    iVar21 = iVar21 + iVar19;
    if (iVar19 == iVar18) goto LAB_003981ec;
  }
  iVar19 = iVar21 + 1;
  uVar28 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f;
  iVar18 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar28) - uVar28;
  if (iVar24 < iVar18) {
    iVar24 = iVar18;
  }
  if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
    iVar18 = iVar21 + 2;
    uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
    iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
    if (iVar24 < iVar19) {
      iVar24 = iVar19;
    }
    if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
      iVar19 = iVar21 + 3;
      uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
      iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
      if (iVar24 < iVar18) {
        iVar24 = iVar18;
      }
      if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
        iVar18 = iVar21 + 4;
        uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
        iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
        if (iVar24 < iVar19) {
          iVar24 = iVar19;
        }
        if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
          iVar19 = iVar21 + 5;
          uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
          iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
          if (iVar24 < iVar18) {
            iVar24 = iVar18;
          }
          if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
            iVar18 = iVar21 + 6;
            uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
            iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
            if (iVar24 < iVar19) {
              iVar24 = iVar19;
            }
            if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
              iVar19 = iVar21 + 7;
              uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
              iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
              if (iVar24 < iVar18) {
                iVar24 = iVar18;
              }
              if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                iVar18 = iVar21 + 8;
                uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
                iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
                if (iVar24 < iVar19) {
                  iVar24 = iVar19;
                }
                if (iVar18 < (int)param_6) {
                  iVar19 = iVar21 + 9;
                  uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
                  iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
                  if (iVar24 < iVar18) {
                    iVar24 = iVar18;
                  }
                  if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                    iVar18 = iVar21 + 10;
                    uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
                    iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
                    if (iVar24 < iVar19) {
                      iVar24 = iVar19;
                    }
                    if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
                      iVar19 = iVar21 + 0xb;
                    /* catch() { ... } // from try @ 00397b78 with catch @ 00398118 */
                    /* try { // try from 00398128 to 0049812b has its CatchHandler @ 003975cc */
                      uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
                      iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
                    /* catch() { ... } // from try @ 00397d34 with catch @ 0039812c */
                      if (iVar24 < iVar18) {
                        iVar24 = iVar18;
                      }
                      if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                    /* try { // try from 0039813c to 0049813f has its CatchHandler @ 003975cc */
                        iVar18 = iVar21 + 0xc;
                    /* catch() { ... } // from try @ 00397b08 with catch @ 00398140 */
                        uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
                    /* try { // try from 00398150 to 0049830b has its CatchHandler @ 003975cc */
                        iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28;
                        if (iVar24 < iVar19) {
                          iVar24 = iVar19;
                        }
                        if (param_6 - iVar18 != 0 && iVar18 <= (int)param_6) {
                          iVar19 = iVar21 + 0xd;
                          uVar28 = (int)param_1[iVar18] - (int)param_2[iVar18] >> 0x1f;
                          iVar18 = ((int)param_1[iVar18] - (int)param_2[iVar18] ^ uVar28) - uVar28;
                          if (iVar24 < iVar18) {
                            iVar24 = iVar18;
                          }
                          if (param_6 - iVar19 != 0 && iVar19 <= (int)param_6) {
                            iVar21 = iVar21 + 0xe;
                            uVar28 = (int)param_1[iVar19] - (int)param_2[iVar19] >> 0x1f;
                            iVar19 = ((int)param_1[iVar19] - (int)param_2[iVar19] ^ uVar28) - uVar28
                            ;
                            if (iVar24 < iVar19) {
                              iVar24 = iVar19;
                            }
                            if ((param_6 - iVar21 != 0 && iVar21 <= (int)param_6) &&
                               (uVar28 = (int)param_1[iVar21] - (int)param_2[iVar21] >> 0x1f,
                               iVar21 = ((int)param_1[iVar21] - (int)param_2[iVar21] ^ uVar28) -
                                        uVar28, iVar24 < iVar21)) {
                              iVar24 = iVar21;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_003981ec:
  if (iVar35 < iVar24) {
    iVar35 = iVar24;
  }
  *param_4 = iVar35;
  return 0;
}


==================================================================

### FUNC 0039822c (3816 bytes) name=FUN_0039822c

undefined8 FUN_0039822c(char *param_1,long param_2,int *param_3,int param_4,uint param_5)

{
  ulong uVar1;
  char *pcVar2;
  uint uVar64;
  uint uVar65;
  int iVar66;
  uint uVar67;
  uint uVar68;
  long lVar69;
  uint uVar70;
  int iVar71;
  undefined1 auVar72 [16];
  undefined1 auVar73 [16];
  undefined1 auVar74 [16];
  int iVar75;
  int iVar77;
  int iVar78;
  int iVar79;
  undefined1 auVar76 [16];
  undefined1 auVar80 [16];
  undefined1 auVar81 [16];
  undefined1 auVar82 [16];
  undefined1 auVar83 [16];
  int iVar87;
  int iVar88;
  undefined1 auVar84 [16];
  undefined1 auVar85 [16];
  undefined1 auVar86 [16];
  int iVar89;
  undefined1 auVar90 [16];
  undefined1 auVar91 [16];
  undefined1 auVar92 [16];
  undefined1 auVar93 [16];
  undefined1 auVar94 [16];
  undefined1 auVar95 [16];
  undefined1 auVar96 [16];
  undefined1 auVar97 [16];
  undefined1 auVar98 [16];
  undefined1 auVar99 [16];
  undefined1 auVar100 [16];
  undefined1 auVar101 [16];
  undefined1 auVar102 [16];
  undefined1 auVar103 [16];
  undefined1 auVar104 [16];
  undefined1 auVar105 [16];
  undefined1 auVar106 [16];
  undefined1 auVar107 [16];
  char cVar108;
  char cVar109;
  char cVar110;
  undefined1 auVar111 [16];
  undefined1 auVar112 [16];
  undefined1 auVar113 [16];
  undefined1 auVar114 [16];
  undefined1 auVar115 [16];
  undefined1 auVar116 [16];
  undefined1 auVar117 [16];
  undefined1 auVar118 [16];
  undefined1 auVar119 [16];
  undefined1 auVar120 [16];
  undefined1 auVar121 [16];
  undefined1 auVar122 [16];
  undefined1 auVar123 [16];
  undefined1 auVar124 [16];
  undefined1 auVar125 [16];
  undefined1 auVar126 [16];
  undefined1 auVar127 [16];
  undefined1 auVar128 [16];
  undefined1 auVar129 [16];
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char *pcVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  char *pcVar22;
  char *pcVar23;
  char *pcVar24;
  char *pcVar25;
  char *pcVar26;
  char *pcVar27;
  char *pcVar28;
  char *pcVar29;
  char *pcVar30;
  char *pcVar31;
  char *pcVar32;
  char *pcVar33;
  char *pcVar34;
  char *pcVar35;
  char *pcVar36;
  char *pcVar37;
  char *pcVar38;
  char *pcVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  char *pcVar43;
  char *pcVar44;
  char *pcVar45;
  char *pcVar46;
  char *pcVar47;
  char *pcVar48;
  char *pcVar49;
  char *pcVar50;
  char *pcVar51;
  char *pcVar52;
  char *pcVar53;
  char *pcVar54;
  char *pcVar55;
  char *pcVar56;
  char *pcVar57;
  char *pcVar58;
  char *pcVar59;
  char *pcVar60;
  char *pcVar61;
  char *pcVar62;
  char *pcVar63;
  
  iVar66 = *param_3;
  if (param_2 != 0) {
    if (0 < param_4) {
      uVar65 = -(int)param_1;
      lVar69 = 0;
      do {
        if ((*(char *)(param_2 + lVar69) != '\0') && (0 < (int)param_5)) {
          uVar64 = uVar65 & 0xf;
          if (param_5 < (uVar65 & 0xf)) {
            uVar64 = param_5;
          }
          if (param_5 < 0x12) {
            uVar64 = param_5;
          }
          uVar67 = uVar64;
          if (uVar64 != 0) {
            iVar66 = iVar66 + (int)ABS((double)(int)*param_1);
            if ((((uVar64 != 1) &&
                 (iVar66 = iVar66 + (int)ABS((double)(int)param_1[1]), uVar64 != 2)) &&
                (iVar66 = iVar66 + (int)ABS((double)(int)param_1[2]), uVar64 != 3)) &&
               (((iVar66 = iVar66 + (int)ABS((double)(int)param_1[3]), uVar64 != 4 &&
                 (iVar66 = iVar66 + (int)ABS((double)(int)param_1[4]), uVar64 != 5)) &&
                (iVar66 = iVar66 + (int)ABS((double)(int)param_1[5]), uVar64 != 6)))) {
                    /* catch() { ... } // from try @ 00398570 with catch @ 00398324
                       catch() { ... } // from try @ 003985bc with catch @ 00398324
                       catch() { ... } // from try @ 0039862c with catch @ 00398324
                       catch() { ... } // from try @ 003986b0 with catch @ 00398324
                       catch() { ... } // from try @ 003986c4 with catch @ 00398324 */
              iVar66 = iVar66 + (int)ABS((double)(int)param_1[6]);
              if (uVar64 == 7) {
                uVar67 = 7;
              }
              else {
                iVar66 = iVar66 + (int)ABS((double)(int)param_1[7]);
                if (((uVar64 != 8) &&
                    (iVar66 = iVar66 + (int)ABS((double)(int)param_1[8]), uVar64 != 9)) &&
                   ((iVar66 = iVar66 + (int)ABS((double)(int)param_1[9]), uVar64 != 10 &&
                    ((((iVar66 = iVar66 + (int)ABS((double)(int)param_1[10]), uVar64 != 0xb &&
                       (iVar66 = iVar66 + (int)ABS((double)(int)param_1[0xb]), uVar64 != 0xc)) &&
                      (iVar66 = iVar66 + (int)ABS((double)(int)param_1[0xc]), uVar64 != 0xd)) &&
                     ((iVar66 = iVar66 + (int)ABS((double)(int)param_1[0xd]), uVar64 != 0xe &&
                      (iVar66 = iVar66 + (int)ABS((double)(int)param_1[0xe]), uVar64 != 0xf))))))))
                {
                  iVar66 = iVar66 + (int)ABS((double)(int)param_1[0xf]);
                  if (uVar64 == 0x11) {
                    iVar66 = iVar66 + (int)ABS((double)(int)param_1[0x10]);
                  }
                  else {
                    uVar67 = 0x10;
                  }
                }
              }
            }
            if (param_5 == uVar64) goto LAB_00398750;
          }
          uVar68 = ((param_5 - uVar64) - 0x10 >> 4) + 1;
          iVar71 = uVar68 * 0x10;
          if (0xe < (param_5 - 1) - uVar64) {
            iVar75 = 0;
            iVar77 = 0;
            iVar78 = 0;
            iVar79 = 0;
            uVar70 = 0;
            pcVar63 = param_1 + uVar64;
            do {
              uVar70 = uVar70 + 1;
              auVar84._0_8_ = (long)(int)(short)*pcVar63;
              auVar84._8_8_ = (long)(int)(short)pcVar63[1];
              auVar80._0_8_ = (long)(int)(short)pcVar63[2];
              auVar80._8_8_ = (long)(int)(short)pcVar63[3];
              auVar85._0_8_ = (long)(int)(short)pcVar63[4];
              auVar85._8_8_ = (long)(int)(short)pcVar63[5];
              auVar73._0_8_ = (long)(int)(short)pcVar63[6];
              auVar73._8_8_ = (long)(int)(short)pcVar63[7];
              auVar95 = NEON_scvtf(auVar84,8);
              auVar84 = NEON_scvtf(auVar80,8);
              auVar85 = NEON_scvtf(auVar85,8);
              auVar90._0_8_ = (long)(int)(short)pcVar63[8];
              auVar90._8_8_ = (long)(int)(short)pcVar63[9];
              auVar73 = NEON_scvtf(auVar73,8);
              auVar74._0_8_ = (long)(int)(short)pcVar63[10];
              auVar74._8_8_ = (long)(int)(short)pcVar63[0xb];
              auVar90 = NEON_scvtf(auVar90,8);
              auVar86._0_8_ = (long)(int)(short)pcVar63[0xc];
              auVar86._8_8_ = (long)(int)(short)pcVar63[0xd];
              auVar74 = NEON_scvtf(auVar74,8);
              auVar72._0_8_ = (long)(int)(short)pcVar63[0xe];
              auVar72._8_8_ = (long)(int)(short)pcVar63[0xf];
              auVar80 = NEON_scvtf(auVar86,8);
              auVar72 = NEON_scvtf(auVar72,8);
              iVar75 = (int)(long)ABS(auVar80._0_8_) +
                       (int)(long)ABS(auVar90._0_8_) +
                       (int)(long)ABS(auVar85._0_8_) + (int)(long)ABS(auVar95._0_8_) + iVar75;
              iVar77 = (int)(long)ABS(auVar80._8_8_) +
                       (int)(long)ABS(auVar90._8_8_) +
                       (int)(long)ABS(auVar85._8_8_) + (int)(long)ABS(auVar95._8_8_) + iVar77;
              iVar78 = (int)(long)ABS(auVar72._0_8_) +
                       (int)(long)ABS(auVar74._0_8_) +
                       (int)(long)ABS(auVar73._0_8_) + (int)(long)ABS(auVar84._0_8_) + iVar78;
              iVar79 = (int)(long)ABS(auVar72._8_8_) +
                       (int)(long)ABS(auVar74._8_8_) +
                       (int)(long)ABS(auVar73._8_8_) + (int)(long)ABS(auVar84._8_8_) + iVar79;
              pcVar63 = pcVar63 + 0x10;
            } while (uVar70 < uVar68);
            uVar67 = uVar67 + iVar71;
                    /* try { // try from 00398570 to 00498573 has its CatchHandler @ 00398324 */
            iVar66 = iVar66 + iVar75 + iVar77 + iVar78 + iVar79;
            if (param_5 - uVar64 == iVar71) goto LAB_00398750;
          }
          iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)uVar67]);
          if ((int)(uVar67 + 1) < (int)param_5) {
                    /* try { // try from 003985b4 to 004985b7 has its CatchHandler @ 003986a0 */
            iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 1)]);
            if ((int)(uVar67 + 2) < (int)param_5) {
                    /* try { // try from 003985bc to 004985db has its CatchHandler @ 00398324 */
              iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 2)]);
              if ((int)(uVar67 + 3) < (int)param_5) {
                iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 3)]);
                if ((int)(uVar67 + 4) < (int)param_5) {
                  iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 4)]);
                  if ((int)(uVar67 + 5) < (int)param_5) {
                    /* try { // try from 00398624 to 00498627 has its CatchHandler @ 003986b4 */
                    /* try { // try from 0039862c to 0049862f has its CatchHandler @ 00398324 */
                    iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 5)]);
                    if ((int)(uVar67 + 6) < (int)param_5) {
                      iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 6)]);
                      if ((int)(uVar67 + 7) < (int)param_5) {
                        iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 7)]);
                        if ((int)(uVar67 + 8) < (int)param_5) {
                          iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 8)]);
                          if ((int)(uVar67 + 9) < (int)param_5) {
                    /* catch() { ... } // from try @ 003985b4 with catch @ 003986a0 */
                    /* try { // try from 003986b0 to 004986b3 has its CatchHandler @ 00398324 */
                    /* catch() { ... } // from try @ 00398624 with catch @ 003986b4 */
                            iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 9)]);
                            if ((int)(uVar67 + 10) < (int)param_5) {
                    /* try { // try from 003986c4 to 004986c7 has its CatchHandler @ 00398324 */
                    /* catch() { ... } // from try @ 003986ec with catch @ 003986c8
                       catch() { ... } // from try @ 0039873c with catch @ 003986c8
                       catch() { ... } // from try @ 00398754 with catch @ 003986c8 */
                              iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 10)]);
                              if ((int)(uVar67 + 0xb) < (int)param_5) {
                    /* try { // try from 003986ec to 00498717 has its CatchHandler @ 003986c8 */
                                iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 0xb)]
                                                          );
                                if ((int)(uVar67 + 0xc) < (int)param_5) {
                                  iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 0xc
                                                                                       )]);
                                  if ((int)(uVar67 + 0xd) < (int)param_5) {
                    /* try { // try from 00398734 to 00498737 has its CatchHandler @ 00398744 */
                                    iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 + 
                                                  0xd)]);
                                    if ((int)(uVar67 + 0xe) < (int)param_5) {
                    /* try { // try from 0039873c to 0049873f has its CatchHandler @ 003986c8 */
                    /* catch() { ... } // from try @ 00398734 with catch @ 00398744 */
                                      iVar66 = iVar66 + (int)ABS((double)(int)param_1[(int)(uVar67 +
                                                                                           0xe)]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_00398750:
        lVar69 = lVar69 + 1;
                    /* try { // try from 00398754 to 00498757 has its CatchHandler @ 003986c8 */
        param_1 = param_1 + (int)param_5;
                    /* catch() { ... } // from try @ 003987b0 with catch @ 00398758
                       catch() { ... } // from try @ 00398804 with catch @ 00398758
                       catch() { ... } // from try @ 003989f4 with catch @ 00398758
                       catch() { ... } // from try @ 00398a5c with catch @ 00398758
                       catch() { ... } // from try @ 00398ab8 with catch @ 00398758
                       catch() { ... } // from try @ 00398acc with catch @ 00398758
                       catch() { ... } // from try @ 00398ae0 with catch @ 00398758 */
        uVar65 = uVar65 - param_5;
      } while ((int)lVar69 < param_4);
    }
    *param_3 = iVar66;
    return 0;
  }
  param_4 = param_4 * param_5;
  iVar71 = 0;
  iVar75 = iVar71;
  if (0 < param_4 + -3) {
    uVar65 = param_4 - 4U >> 2;
                    /* try { // try from 003987b0 to 004987b3 has its CatchHandler @ 00398758 */
    iVar75 = uVar65 + 1;
    uVar65 = (uVar65 - 0xf >> 4) + 1;
    if (param_4 - 4U < 0x3c) {
      iVar77 = 0;
LAB_00398b34:
                    /* try { // try from 00398b34 to 00498b37 has its CatchHandler @ 00398ae4 */
      pcVar63 = param_1 + iVar77;
      do {
        iVar77 = iVar77 + 4;
                    /* try { // try from 00398b80 to 00498b83 has its CatchHandler @ 00398eb4 */
                    /* try { // try from 00398b88 to 00498e47 has its CatchHandler @ 00398ae4 */
        iVar71 = iVar71 + (int)ABS((double)(int)*pcVar63) + (int)ABS((double)(byte)pcVar63[1]) +
                          (int)ABS((double)(byte)pcVar63[2]) + (int)ABS((double)(byte)pcVar63[3]);
        pcVar63 = pcVar63 + 4;
      } while (iVar77 < param_4 + -3);
    }
    else {
      iVar71 = 0;
      iVar77 = 0;
      iVar78 = 0;
      iVar79 = 0;
      uVar64 = 0;
      pcVar63 = param_1;
      do {
        cVar108 = *pcVar63;
        pcVar2 = pcVar63 + 1;
        pcVar3 = pcVar63 + 2;
        pcVar4 = pcVar63 + 3;
        pcVar5 = pcVar63 + 4;
        pcVar6 = pcVar63 + 5;
        pcVar7 = pcVar63 + 6;
        pcVar8 = pcVar63 + 7;
        pcVar9 = pcVar63 + 8;
        pcVar10 = pcVar63 + 9;
        pcVar11 = pcVar63 + 10;
        pcVar12 = pcVar63 + 0xb;
        pcVar13 = pcVar63 + 0xc;
        pcVar14 = pcVar63 + 0xd;
        pcVar15 = pcVar63 + 0xe;
        pcVar16 = pcVar63 + 0xf;
        pcVar17 = pcVar63 + 0x10;
        pcVar18 = pcVar63 + 0x11;
        pcVar19 = pcVar63 + 0x12;
        pcVar20 = pcVar63 + 0x13;
        pcVar21 = pcVar63 + 0x14;
        pcVar22 = pcVar63 + 0x15;
        pcVar23 = pcVar63 + 0x16;
        pcVar24 = pcVar63 + 0x17;
        pcVar25 = pcVar63 + 0x18;
        pcVar26 = pcVar63 + 0x19;
        pcVar27 = pcVar63 + 0x1a;
        pcVar28 = pcVar63 + 0x1b;
        pcVar29 = pcVar63 + 0x1c;
        pcVar30 = pcVar63 + 0x1d;
        pcVar31 = pcVar63 + 0x1e;
        pcVar32 = pcVar63 + 0x1f;
        pcVar33 = pcVar63 + 0x20;
        pcVar34 = pcVar63 + 0x21;
        pcVar35 = pcVar63 + 0x22;
        pcVar36 = pcVar63 + 0x23;
        cVar109 = pcVar63[0x24];
        pcVar37 = pcVar63 + 0x25;
        pcVar38 = pcVar63 + 0x26;
        pcVar39 = pcVar63 + 0x27;
        pcVar40 = pcVar63 + 0x28;
        pcVar41 = pcVar63 + 0x29;
        pcVar42 = pcVar63 + 0x2a;
        pcVar43 = pcVar63 + 0x2b;
        cVar110 = pcVar63[0x2c];
        pcVar44 = pcVar63 + 0x2d;
        pcVar45 = pcVar63 + 0x2e;
        pcVar46 = pcVar63 + 0x2f;
        pcVar47 = pcVar63 + 0x30;
        pcVar48 = pcVar63 + 0x31;
        pcVar49 = pcVar63 + 0x32;
        pcVar50 = pcVar63 + 0x33;
        pcVar51 = pcVar63 + 0x34;
        pcVar52 = pcVar63 + 0x35;
        pcVar53 = pcVar63 + 0x36;
        pcVar54 = pcVar63 + 0x37;
        pcVar55 = pcVar63 + 0x38;
        pcVar56 = pcVar63 + 0x39;
        pcVar57 = pcVar63 + 0x3a;
        pcVar58 = pcVar63 + 0x3b;
        pcVar59 = pcVar63 + 0x3c;
        pcVar60 = pcVar63 + 0x3d;
        pcVar61 = pcVar63 + 0x3e;
        pcVar62 = pcVar63 + 0x3f;
        pcVar63 = pcVar63 + 0x40;
        uVar64 = uVar64 + 1;
                    /* try { // try from 003987fc to 004987ff has its CatchHandler @ 00398abc */
                    /* try { // try from 00398804 to 004989b3 has its CatchHandler @ 00398758 */
        auVar111._0_8_ = (long)(int)(short)*pcVar2;
        auVar111._8_8_ = (long)(int)(short)*pcVar6;
        auVar97._0_8_ = (long)(int)(short)*pcVar9;
        auVar97._8_8_ = (long)(int)(short)*pcVar13;
        auVar117._0_8_ = (long)(int)(short)cVar108;
        auVar117._8_8_ = (long)(int)(short)*pcVar5;
        auVar112._0_8_ = (long)(int)(short)*pcVar10;
        auVar112._8_8_ = (long)(int)(short)*pcVar14;
        auVar118 = NEON_scvtf(auVar111,8);
        auVar111 = NEON_scvtf(auVar97,8);
        auVar122._0_8_ = (long)(int)(short)*pcVar3;
        auVar122._8_8_ = (long)(int)(short)*pcVar7;
        auVar121 = NEON_scvtf(auVar117,8);
        auVar117 = NEON_scvtf(auVar112,8);
        auVar107._0_8_ = (long)(int)(short)*pcVar11;
        auVar107._8_8_ = (long)(int)(short)*pcVar15;
        auVar114._0_8_ = (long)(int)(short)*pcVar18;
        auVar114._8_8_ = (long)(int)(short)*pcVar22;
        auVar91._0_8_ = (long)(int)(short)*pcVar26;
        auVar91._8_8_ = (long)(int)(short)*pcVar30;
        auVar125 = NEON_scvtf(auVar122,8);
        auVar112 = NEON_scvtf(auVar107,8);
        auVar119._0_8_ = (long)(int)(short)*pcVar17;
        auVar119._8_8_ = (long)(int)(short)*pcVar21;
        auVar96._0_8_ = (long)(int)(short)*pcVar25;
        auVar96._8_8_ = (long)(int)(short)*pcVar29;
        auVar90 = NEON_scvtf(auVar91,8);
        auVar113._0_8_ = (long)(int)(short)*pcVar12;
        auVar113._8_8_ = (long)(int)(short)*pcVar16;
        auVar122 = NEON_scvtf(auVar119,8);
        auVar129._0_8_ = (long)(int)(short)*pcVar19;
        auVar129._8_8_ = (long)(int)(short)*pcVar23;
        auVar128._0_8_ = (long)(int)(short)*pcVar4;
        auVar128._8_8_ = (long)(int)(short)*pcVar8;
        auVar100._0_8_ = (long)(int)(short)*pcVar27;
        auVar100._8_8_ = (long)(int)(short)*pcVar31;
        auVar119 = NEON_scvtf(auVar114,8);
        iVar87 = CONCAT13((short)*pcVar40 >> 0xf,(int3)(short)*pcVar40);
        auVar98._0_8_ = (long)iVar87;
        auVar98._8_8_ =
             (long)(int)(CONCAT17((short)cVar110 >> 0xf,
                                  CONCAT16((short)cVar110 >> 0xf,
                                           CONCAT15(cVar110 >> 7,CONCAT14(cVar110,iVar87)))) >> 0x20
                        );
        auVar96 = NEON_scvtf(auVar96,8);
        auVar127._0_8_ = (long)(int)(short)*pcVar34;
        auVar127._8_8_ = (long)(int)(short)*pcVar37;
        iVar87 = CONCAT13((short)*pcVar33 >> 0xf,(int3)(short)*pcVar33);
        auVar123._0_8_ = (long)iVar87;
        auVar123._8_8_ =
             (long)(int)(CONCAT17((short)cVar109 >> 0xf,
                                  CONCAT16((short)cVar109 >> 0xf,
                                           CONCAT15(cVar109 >> 7,CONCAT14(cVar109,iVar87)))) >> 0x20
                        );
        auVar97 = NEON_scvtf(auVar113,8);
        auVar113 = NEON_scvtf(auVar129,8);
        auVar129 = NEON_scvtf(auVar128,8);
        auVar92._0_8_ = (long)(int)(short)*pcVar41;
        auVar92._8_8_ = (long)(int)(short)*pcVar44;
        auVar100 = NEON_scvtf(auVar100,8);
        auVar91 = NEON_scvtf(auVar98,8);
        auVar126._0_8_ = (long)(int)(short)*pcVar20;
        auVar126._8_8_ = (long)(int)(short)*pcVar24;
        auVar123 = NEON_scvtf(auVar123,8);
        auVar114 = NEON_scvtf(auVar127,8);
        auVar106._0_8_ = (long)(int)(short)*pcVar28;
        auVar106._8_8_ = (long)(int)(short)*pcVar32;
        auVar115._0_8_ = (long)(int)(short)*pcVar35;
        auVar115._8_8_ = (long)(int)(short)*pcVar38;
        auVar102._0_8_ = (long)(int)(short)*pcVar42;
        auVar102._8_8_ = (long)(int)(short)*pcVar45;
        auVar84 = NEON_scvtf(auVar92,8);
        auVar124._0_8_ = (long)(int)(short)*pcVar47;
        auVar124._8_8_ = (long)(int)(short)*pcVar51;
        auVar101._0_8_ = (long)(int)(short)*pcVar55;
        auVar101._8_8_ = (long)(int)(short)*pcVar59;
        auVar127 = NEON_scvtf(auVar126,8);
                    /* try { // try from 003989ec to 004989ef has its CatchHandler @ 00398aa8 */
        auVar120._0_8_ = (long)(int)(short)*pcVar48;
        auVar120._8_8_ = (long)(int)(short)*pcVar52;
                    /* try { // try from 003989f4 to 00498a1b has its CatchHandler @ 00398758 */
        auVar98 = NEON_scvtf(auVar102,8);
        auVar105._0_8_ = (long)(int)(short)*pcVar56;
        auVar105._8_8_ = (long)(int)(short)*pcVar60;
        auVar74 = NEON_scvtf(auVar115,8);
        auVar102 = NEON_scvtf(auVar124,8);
        auVar92 = NEON_scvtf(auVar101,8);
        auVar116._0_8_ = (long)(int)(short)*pcVar36;
        auVar116._8_8_ = (long)(int)(short)*pcVar39;
        auVar101 = NEON_scvtf(auVar106,8);
        auVar76._0_8_ = (long)(int)(short)*pcVar57;
        auVar76._8_8_ = (long)(int)(short)*pcVar61;
        auVar85 = NEON_scvtf(auVar105,8);
                    /* try { // try from 00398a54 to 00498a57 has its CatchHandler @ 00398ad0 */
                    /* try { // try from 00398a5c to 00498a83 has its CatchHandler @ 00398758 */
        auVar81._0_8_ = (long)(int)(short)*pcVar43;
        auVar81._8_8_ = (long)(int)(short)*pcVar46;
        auVar103._0_8_ = (long)(int)(short)*pcVar49;
        auVar103._8_8_ = (long)(int)(short)*pcVar53;
        auVar106 = NEON_scvtf(auVar120,8);
        auVar107 = NEON_scvtf(auVar116,8);
        auVar105 = NEON_scvtf(auVar103,8);
                    /* catch() { ... } // from try @ 003989ec with catch @ 00398aa8 */
        auVar104._0_8_ = (long)(int)(short)*pcVar50;
        auVar104._8_8_ = (long)(int)(short)*pcVar54;
        auVar80 = NEON_scvtf(auVar81,8);
                    /* try { // try from 00398ab8 to 00498abb has its CatchHandler @ 00398758 */
                    /* catch() { ... } // from try @ 003987fc with catch @ 00398abc */
        auVar73 = NEON_scvtf(auVar76,8);
                    /* try { // try from 00398acc to 00498acf has its CatchHandler @ 00398758 */
                    /* catch() { ... } // from try @ 00398a54 with catch @ 00398ad0 */
        auVar95._0_8_ = (long)(int)(short)*pcVar58;
        auVar95._8_8_ = (long)(int)(short)*pcVar62;
                    /* try { // try from 00398ae0 to 00498ae3 has its CatchHandler @ 00398758 */
                    /* catch() { ... } // from try @ 00398b34 with catch @ 00398ae4
                       catch() { ... } // from try @ 00398b88 with catch @ 00398ae4
                       catch() { ... } // from try @ 00398e90 with catch @ 00398ae4
                       catch() { ... } // from try @ 00398eb0 with catch @ 00398ae4
                       catch() { ... } // from try @ 00398ec4 with catch @ 00398ae4 */
        auVar86 = NEON_scvtf(auVar104,8);
        auVar72 = NEON_scvtf(auVar95,8);
        iVar71 = (int)(long)ABS(auVar102._0_8_) + (int)(long)ABS(auVar106._0_8_) +
                 (int)(long)ABS(auVar105._0_8_) + (int)(long)ABS(auVar86._0_8_) +
                 (int)(long)ABS(auVar123._0_8_) + (int)(long)ABS(auVar114._0_8_) +
                 (int)(long)ABS(auVar74._0_8_) + (int)(long)ABS(auVar107._0_8_) +
                 (int)(long)ABS(auVar122._0_8_) + (int)(long)ABS(auVar119._0_8_) +
                 (int)(long)ABS(auVar113._0_8_) + (int)(long)ABS(auVar127._0_8_) +
                 (int)(long)ABS(auVar121._0_8_) + (int)(long)ABS(auVar118._0_8_) +
                 (int)(long)ABS(auVar125._0_8_) + (int)(long)ABS(auVar129._0_8_) + iVar71;
        iVar77 = (int)(long)ABS(auVar102._8_8_) + (int)(long)ABS(auVar106._8_8_) +
                 (int)(long)ABS(auVar105._8_8_) + (int)(long)ABS(auVar86._8_8_) +
                 (int)(long)ABS(auVar123._8_8_) + (int)(long)ABS(auVar114._8_8_) +
                 (int)(long)ABS(auVar74._8_8_) + (int)(long)ABS(auVar107._8_8_) +
                 (int)(long)ABS(auVar122._8_8_) + (int)(long)ABS(auVar119._8_8_) +
                 (int)(long)ABS(auVar113._8_8_) + (int)(long)ABS(auVar127._8_8_) +
                 (int)(long)ABS(auVar121._8_8_) + (int)(long)ABS(auVar118._8_8_) +
                 (int)(long)ABS(auVar125._8_8_) + (int)(long)ABS(auVar129._8_8_) + iVar77;
        iVar78 = (int)(long)ABS(auVar92._0_8_) + (int)(long)ABS(auVar85._0_8_) +
                 (int)(long)ABS(auVar73._0_8_) + (int)(long)ABS(auVar72._0_8_) +
                 (int)(long)ABS(auVar91._0_8_) + (int)(long)ABS(auVar84._0_8_) +
                 (int)(long)ABS(auVar98._0_8_) + (int)(long)ABS(auVar80._0_8_) +
                 (int)(long)ABS(auVar96._0_8_) + (int)(long)ABS(auVar90._0_8_) +
                 (int)(long)ABS(auVar100._0_8_) + (int)(long)ABS(auVar101._0_8_) +
                 (int)(long)ABS(auVar111._0_8_) + (int)(long)ABS(auVar117._0_8_) +
                 (int)(long)ABS(auVar112._0_8_) + (int)(long)ABS(auVar97._0_8_) + iVar78;
        iVar79 = (int)(long)ABS(auVar92._8_8_) + (int)(long)ABS(auVar85._8_8_) +
                 (int)(long)ABS(auVar73._8_8_) + (int)(long)ABS(auVar72._8_8_) +
                 (int)(long)ABS(auVar91._8_8_) + (int)(long)ABS(auVar84._8_8_) +
                 (int)(long)ABS(auVar98._8_8_) + (int)(long)ABS(auVar80._8_8_) +
                 (int)(long)ABS(auVar96._8_8_) + (int)(long)ABS(auVar90._8_8_) +
                 (int)(long)ABS(auVar100._8_8_) + (int)(long)ABS(auVar101._8_8_) +
                 (int)(long)ABS(auVar111._8_8_) + (int)(long)ABS(auVar117._8_8_) +
                 (int)(long)ABS(auVar112._8_8_) + (int)(long)ABS(auVar97._8_8_) + iVar79;
      } while (uVar64 < uVar65);
      iVar71 = iVar71 + iVar77 + iVar78 + iVar79;
      iVar77 = uVar65 * 0x40;
      if (iVar75 != uVar65 * 0x10) goto LAB_00398b34;
    }
    iVar75 = iVar75 * 4;
  }
  if (iVar75 < param_4) {
    uVar64 = param_4 - iVar75;
    uVar65 = -(int)(param_1 + iVar75) & 0xf;
    uVar1 = (ulong)uVar65;
    if (uVar64 < uVar65) {
      uVar1 = (ulong)uVar64;
    }
    if (uVar64 < 0x12) {
      uVar1 = (ulong)uVar64;
    }
    uVar65 = (uint)uVar1;
    iVar77 = iVar75;
    if (uVar65 != 0) {
      iVar77 = iVar75 + 1;
      iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar75]);
      if (uVar65 != 1) {
        lVar69 = (long)iVar77;
        iVar77 = iVar75 + 2;
        iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
        if (uVar65 != 2) {
          lVar69 = (long)iVar77;
          iVar77 = iVar75 + 3;
          iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
          if (uVar65 != 3) {
            lVar69 = (long)iVar77;
            iVar77 = iVar75 + 4;
            iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
            if (uVar65 != 4) {
              lVar69 = (long)iVar77;
              iVar77 = iVar75 + 5;
              iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
              if (uVar65 != 5) {
                lVar69 = (long)iVar77;
                iVar77 = iVar75 + 6;
                iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                if (uVar65 != 6) {
                  lVar69 = (long)iVar77;
                  iVar77 = iVar75 + 7;
                  iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                  if (uVar65 != 7) {
                    lVar69 = (long)iVar77;
                    iVar77 = iVar75 + 8;
                    iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                    if (uVar65 != 8) {
                      lVar69 = (long)iVar77;
                      iVar77 = iVar75 + 9;
                      iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                      if (uVar65 != 9) {
                        lVar69 = (long)iVar77;
                        iVar77 = iVar75 + 10;
                        iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                        if (uVar65 != 10) {
                          lVar69 = (long)iVar77;
                          iVar77 = iVar75 + 0xb;
                          iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                          if (uVar65 != 0xb) {
                            lVar69 = (long)iVar77;
                            iVar77 = iVar75 + 0xc;
                            iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                            if (uVar65 != 0xc) {
                              lVar69 = (long)iVar77;
                              iVar77 = iVar75 + 0xd;
                              iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                              if (uVar65 != 0xd) {
                                lVar69 = (long)iVar77;
                                iVar77 = iVar75 + 0xe;
                                iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                                if (uVar65 != 0xe) {
                                  lVar69 = (long)iVar77;
                                  iVar77 = iVar75 + 0xf;
                                  iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                                  if (uVar65 != 0xf) {
                                    lVar69 = (long)iVar77;
                                    iVar77 = iVar75 + 0x10;
                                    iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                                    if (uVar65 == 0x11) {
                                      lVar69 = (long)iVar77;
                                      iVar77 = iVar75 + 0x11;
                                      iVar71 = iVar71 + (int)ABS((double)(int)param_1[lVar69]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (uVar65 == uVar64) goto LAB_003990e4;
    }
    uVar67 = ((uVar64 - uVar65) - 0x10 >> 4) + 1;
    iVar78 = uVar67 * 0x10;
    if (0xe < (uVar64 - 1) - uVar65) {
      iVar79 = 0;
      iVar87 = 0;
      iVar88 = 0;
      iVar89 = 0;
      uVar68 = 0;
      pcVar63 = param_1 + uVar1 + (long)iVar75;
      do {
        uVar68 = uVar68 + 1;
        auVar99._0_8_ = (long)(int)(short)*pcVar63;
        auVar99._8_8_ = (long)(int)(short)pcVar63[1];
        auVar82._0_8_ = (long)(int)(short)pcVar63[2];
        auVar82._8_8_ = (long)(int)(short)pcVar63[3];
        auVar93._0_8_ = (long)(int)(short)pcVar63[4];
        auVar93._8_8_ = (long)(int)(short)pcVar63[5];
        auVar121._0_8_ = (long)(int)(short)pcVar63[6];
        auVar121._8_8_ = (long)(int)(short)pcVar63[7];
        auVar90 = NEON_scvtf(auVar99,8);
        auVar84 = NEON_scvtf(auVar82,8);
        auVar85 = NEON_scvtf(auVar93,8);
        auVar94._0_8_ = (long)(int)(short)pcVar63[8];
        auVar94._8_8_ = (long)(int)(short)pcVar63[9];
        auVar73 = NEON_scvtf(auVar121,8);
                    /* try { // try from 00398e88 to 00498e8b has its CatchHandler @ 00398ea0 */
        auVar125._0_8_ = (long)(int)(short)pcVar63[10];
        auVar125._8_8_ = (long)(int)(short)pcVar63[0xb];
                    /* try { // try from 00398e90 to 00498e93 has its CatchHandler @ 00398ae4 */
                    /* catch() { ... } // from try @ 00398e88 with catch @ 00398ea0 */
        auVar86 = NEON_scvtf(auVar94,8);
        auVar83._0_8_ = (long)(int)(short)pcVar63[0xc];
        auVar83._8_8_ = (long)(int)(short)pcVar63[0xd];
        auVar74 = NEON_scvtf(auVar125,8);
                    /* try { // try from 00398eb0 to 00498eb3 has its CatchHandler @ 00398ae4 */
        auVar118._0_8_ = (long)(int)(short)pcVar63[0xe];
        auVar118._8_8_ = (long)(int)(short)pcVar63[0xf];
                    /* catch() { ... } // from try @ 00398b80 with catch @ 00398eb4 */
                    /* try { // try from 00398ec4 to 00498ec7 has its CatchHandler @ 00398ae4 */
                    /* catch() { ... } // from try @ 00398f1c with catch @ 00398ec8
                       catch() { ... } // from try @ 00398f70 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399000 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399088 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399158 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399490 with catch @ 00398ec8
                       catch() { ... } // from try @ 003994dc with catch @ 00398ec8
                       catch() { ... } // from try @ 003994f0 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399504 with catch @ 00398ec8
                       catch() { ... } // from try @ 00399518 with catch @ 00398ec8
                       catch() { ... } // from try @ 0039952c with catch @ 00398ec8 */
        auVar80 = NEON_scvtf(auVar83,8);
        auVar72 = NEON_scvtf(auVar118,8);
        iVar79 = (int)(long)ABS(auVar80._0_8_) +
                 (int)(long)ABS(auVar86._0_8_) +
                 (int)(long)ABS(auVar85._0_8_) + (int)(long)ABS(auVar90._0_8_) + iVar79;
        iVar87 = (int)(long)ABS(auVar80._8_8_) +
                 (int)(long)ABS(auVar86._8_8_) +
                 (int)(long)ABS(auVar85._8_8_) + (int)(long)ABS(auVar90._8_8_) + iVar87;
        iVar88 = (int)(long)ABS(auVar72._0_8_) +
                 (int)(long)ABS(auVar74._0_8_) +
                 (int)(long)ABS(auVar73._0_8_) + (int)(long)ABS(auVar84._0_8_) + iVar88;
        iVar89 = (int)(long)ABS(auVar72._8_8_) +
                 (int)(long)ABS(auVar74._8_8_) +
                 (int)(long)ABS(auVar73._8_8_) + (int)(long)ABS(auVar84._8_8_) + iVar89;
        pcVar63 = pcVar63 + 0x10;
      } while (uVar68 < uVar67);
      iVar77 = iVar77 + iVar78;
      iVar71 = iVar71 + iVar79 + iVar87 + iVar88 + iVar89;
      if (iVar78 == uVar64 - uVar65) goto LAB_003990e4;
    }
                    /* try { // try from 00398f1c to 00498f1f has its CatchHandler @ 00398ec8 */
    iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77]);
    if (iVar77 + 1 < param_4) {
      iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 1]);
      if (iVar77 + 2 < param_4) {
                    /* try { // try from 00398f68 to 00498f6b has its CatchHandler @ 003994f4 */
        iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 2]);
        if (iVar77 + 3 < param_4) {
                    /* try { // try from 00398f70 to 00498faf has its CatchHandler @ 00398ec8 */
          iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 3]);
          if (iVar77 + 4 < param_4) {
            iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 4]);
            if (iVar77 + 5 < param_4) {
              iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 5]);
              if (iVar77 + 6 < param_4) {
                iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 6]);
                if (iVar77 + 7 < param_4) {
                    /* try { // try from 00398ff8 to 00498ffb has its CatchHandler @ 003994e0 */
                    /* try { // try from 00399000 to 00499037 has its CatchHandler @ 00398ec8 */
                  iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 7]);
                  if (iVar77 + 8 < param_4) {
                    iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 8]);
                    if (iVar77 + 9 < param_4) {
                      iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 9]);
                      if (iVar77 + 10 < param_4) {
                        iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 10]);
                        if (iVar77 + 0xb < param_4) {
                    /* try { // try from 00399080 to 00499083 has its CatchHandler @ 0039951c */
                    /* try { // try from 00399088 to 004990ff has its CatchHandler @ 00398ec8 */
                          iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 0xb]);
                          if (iVar77 + 0xc < param_4) {
                            iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 0xc]);
                            if (iVar77 + 0xd < param_4) {
                              iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 0xd]);
                              if (iVar77 + 0xe < param_4) {
                                iVar71 = iVar71 + (int)ABS((double)(int)param_1[iVar77 + 0xe]);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_003990e4:
  *param_3 = iVar66 + iVar71;
  return 0;
}


==================================================================

### FUNC 00399114 (3724 bytes) name=FUN_00399114

undefined8
FUN_00399114(char *param_1,char *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  ulong uVar1;
  char *pcVar2;
  char *pcVar66;
  uint uVar130;
  uint uVar131;
  int iVar132;
  int iVar133;
  uint uVar134;
  uint uVar135;
  long lVar136;
  uint uVar137;
  char cVar138;
  char cVar139;
  int iVar140;
  int iVar142;
  undefined8 uVar141;
  int iVar143;
  int iVar145;
  undefined8 uVar144;
  int iVar146;
  int iVar147;
  int iVar148;
  int iVar149;
  int iVar150;
  int iVar151;
  int iVar152;
  int iVar153;
  int iVar154;
  int iVar155;
  int iVar156;
  int iVar157;
  int iVar158;
  int iVar159;
  int iVar160;
  int iVar161;
  int iVar162;
  int iVar163;
  int iVar164;
  int iVar165;
  int iVar166;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  int iVar172;
  int iVar173;
  int iVar174;
  int iVar175;
  int iVar176;
  int iVar177;
  int iVar178;
  int iVar179;
  int iVar180;
  int iVar181;
  int iVar182;
  int iVar183;
  int iVar184;
  int iVar185;
  int iVar186;
  undefined8 uVar187;
  int iVar188;
  int iVar189;
  undefined8 uVar190;
  int iVar191;
  int iVar192;
  int iVar193;
  int iVar194;
  int iVar195;
  int iVar196;
  int iVar197;
  int iVar198;
  int iVar199;
  int iVar200;
  int iVar201;
  int iVar202;
  int iVar203;
  int iVar204;
  int iVar205;
  int iVar206;
  int iVar207;
  int iVar208;
  int iVar209;
  int iVar210;
  int iVar211;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char *pcVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  char *pcVar22;
  char *pcVar23;
  char *pcVar24;
  char *pcVar25;
  char *pcVar26;
  char *pcVar27;
  char *pcVar28;
  char *pcVar29;
  char *pcVar30;
  char *pcVar31;
  char *pcVar32;
  char *pcVar33;
  char *pcVar34;
  char *pcVar35;
  char *pcVar36;
  char *pcVar37;
  char *pcVar38;
  char *pcVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  char *pcVar43;
  char *pcVar44;
  char *pcVar45;
  char *pcVar46;
  char *pcVar47;
  char *pcVar48;
  char *pcVar49;
  char *pcVar50;
  char *pcVar51;
  char *pcVar52;
  char *pcVar53;
  char *pcVar54;
  char *pcVar55;
  char *pcVar56;
  char *pcVar57;
  char *pcVar58;
  char *pcVar59;
  char *pcVar60;
  char *pcVar61;
  char *pcVar62;
  char *pcVar63;
  char *pcVar64;
  char *pcVar65;
  char *pcVar67;
  char *pcVar68;
  char *pcVar69;
  char *pcVar70;
  char *pcVar71;
  char *pcVar72;
  char *pcVar73;
  char *pcVar74;
  char *pcVar75;
  char *pcVar76;
  char *pcVar77;
  char *pcVar78;
  char *pcVar79;
  char *pcVar80;
  char *pcVar81;
  char *pcVar82;
  char *pcVar83;
  char *pcVar84;
  char *pcVar85;
  char *pcVar86;
  char *pcVar87;
  char *pcVar88;
  char *pcVar89;
  char *pcVar90;
  char *pcVar91;
  char *pcVar92;
  char *pcVar93;
  char *pcVar94;
  char *pcVar95;
  char *pcVar96;
  char *pcVar97;
  char *pcVar98;
  char *pcVar99;
  char *pcVar100;
  char *pcVar101;
  char *pcVar102;
  char *pcVar103;
  char *pcVar104;
  char *pcVar105;
  char *pcVar106;
  char *pcVar107;
  char *pcVar108;
  char *pcVar109;
  char *pcVar110;
  char *pcVar111;
  char *pcVar112;
  char *pcVar113;
  char *pcVar114;
  char *pcVar115;
  char *pcVar116;
  char *pcVar117;
  char *pcVar118;
  char *pcVar119;
  char *pcVar120;
  char *pcVar121;
  char *pcVar122;
  char *pcVar123;
  char *pcVar124;
  char *pcVar125;
  char *pcVar126;
  char *pcVar127;
  char *pcVar128;
  char *pcVar129;
  
  iVar132 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar131 = -(int)param_1;
      lVar136 = 0;
      do {
        if ((*(char *)(param_3 + lVar136) != '\0') && (0 < (int)param_6)) {
                    /* try { // try from 00399150 to 00499153 has its CatchHandler @ 00399508 */
          uVar130 = uVar131 & 0xf;
          if (param_6 < (uVar131 & 0xf)) {
            uVar130 = param_6;
          }
                    /* try { // try from 00399158 to 0049946b has its CatchHandler @ 00398ec8 */
          if (param_6 < 0x11) {
            uVar130 = param_6;
          }
          uVar134 = uVar130;
          if (uVar130 != 0) {
            uVar135 = (int)*param_1 - (int)*param_2 >> 0x1f;
            iVar132 = iVar132 + (((int)*param_1 - (int)*param_2 ^ uVar135) - uVar135);
            if ((((uVar130 != 1) &&
                 (uVar135 = (int)param_1[1] - (int)param_2[1] >> 0x1f,
                 iVar132 = iVar132 + (((int)param_1[1] - (int)param_2[1] ^ uVar135) - uVar135),
                 uVar130 != 2)) &&
                (uVar135 = (int)param_1[2] - (int)param_2[2] >> 0x1f,
                iVar132 = iVar132 + (((int)param_1[2] - (int)param_2[2] ^ uVar135) - uVar135),
                uVar130 != 3)) &&
               (((uVar135 = (int)param_1[3] - (int)param_2[3] >> 0x1f,
                 iVar132 = iVar132 + (((int)param_1[3] - (int)param_2[3] ^ uVar135) - uVar135),
                 uVar130 != 4 &&
                 (uVar135 = (int)param_1[4] - (int)param_2[4] >> 0x1f,
                 iVar132 = iVar132 + (((int)param_1[4] - (int)param_2[4] ^ uVar135) - uVar135),
                 uVar130 != 5)) &&
                (uVar135 = (int)param_1[5] - (int)param_2[5] >> 0x1f,
                iVar132 = iVar132 + (((int)param_1[5] - (int)param_2[5] ^ uVar135) - uVar135),
                uVar130 != 6)))) {
              uVar135 = (int)param_1[6] - (int)param_2[6] >> 0x1f;
              iVar132 = iVar132 + (((int)param_1[6] - (int)param_2[6] ^ uVar135) - uVar135);
              if (uVar130 == 7) {
                uVar134 = 7;
              }
              else {
                uVar135 = (int)param_1[7] - (int)param_2[7] >> 0x1f;
                iVar132 = iVar132 + (((int)param_1[7] - (int)param_2[7] ^ uVar135) - uVar135);
                if (((uVar130 != 8) &&
                    (uVar135 = (int)param_1[8] - (int)param_2[8] >> 0x1f,
                    iVar132 = iVar132 + (((int)param_1[8] - (int)param_2[8] ^ uVar135) - uVar135),
                    uVar130 != 9)) &&
                   (((uVar135 = (int)param_1[9] - (int)param_2[9] >> 0x1f,
                     iVar132 = iVar132 + (((int)param_1[9] - (int)param_2[9] ^ uVar135) - uVar135),
                     uVar130 != 10 &&
                     (((uVar135 = (int)param_1[10] - (int)param_2[10] >> 0x1f,
                       iVar132 = iVar132 + (((int)param_1[10] - (int)param_2[10] ^ uVar135) -
                                           uVar135), uVar130 != 0xb &&
                       (uVar135 = (int)param_1[0xb] - (int)param_2[0xb] >> 0x1f,
                       iVar132 = iVar132 + (((int)param_1[0xb] - (int)param_2[0xb] ^ uVar135) -
                                           uVar135), uVar130 != 0xc)) &&
                      (uVar135 = (int)param_1[0xc] - (int)param_2[0xc] >> 0x1f,
                      iVar132 = iVar132 + (((int)param_1[0xc] - (int)param_2[0xc] ^ uVar135) -
                                          uVar135), uVar130 != 0xd)))) &&
                    (uVar135 = (int)param_1[0xd] - (int)param_2[0xd] >> 0x1f,
                    iVar132 = iVar132 + (((int)param_1[0xd] - (int)param_2[0xd] ^ uVar135) - uVar135
                                        ), uVar130 != 0xe)))) {
                  uVar135 = (int)param_1[0xe] - (int)param_2[0xe] >> 0x1f;
                  iVar132 = iVar132 + (((int)param_1[0xe] - (int)param_2[0xe] ^ uVar135) - uVar135);
                  if (uVar130 == 0x10) {
                    uVar135 = (int)param_1[0xf] - (int)param_2[0xf] >> 0x1f;
                    iVar132 = iVar132 + (((int)param_1[0xf] - (int)param_2[0xf] ^ uVar135) - uVar135
                                        );
                  }
                  else {
                    uVar134 = 0xf;
                  }
                }
              }
            }
            if (param_6 == uVar130) goto LAB_003996d0;
          }
          uVar135 = ((param_6 - uVar130) - 0x10 >> 4) + 1;
          iVar133 = uVar135 * 0x10;
          if (0xe < (param_6 - 1) - uVar130) {
            iVar140 = 0;
            iVar142 = 0;
            iVar143 = 0;
            iVar145 = 0;
            uVar137 = 0;
            pcVar129 = param_2 + uVar130;
            pcVar65 = param_1 + uVar130;
            do {
              uVar144 = *(undefined8 *)(pcVar65 + 8);
              uVar141 = *(undefined8 *)pcVar65;
              uVar137 = uVar137 + 1;
              uVar190 = *(undefined8 *)(pcVar129 + 8);
              uVar187 = *(undefined8 *)pcVar129;
              iVar174 = MP_INT_ABS((int)(short)(char)uVar141 - (int)(short)(char)uVar187);
              iVar177 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 8) -
                                   (int)(short)(char)((ulong)uVar187 >> 8));
              iVar180 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x10) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x10));
              iVar183 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x18) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x18));
              iVar158 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x20) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x20));
              iVar160 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x28) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x28));
              iVar162 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x30) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x30));
              iVar164 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x38) -
                                   (int)(short)(char)((ulong)uVar187 >> 0x38));
              iVar166 = MP_INT_ABS((int)(short)(char)uVar144 - (int)(short)(char)uVar190);
              iVar168 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 8) -
                                   (int)(short)(char)((ulong)uVar190 >> 8));
              iVar170 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x10) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x10));
              iVar172 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x18) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x18));
              iVar146 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x20) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x20));
              iVar147 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x28) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x28));
              iVar150 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x30) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x30));
              iVar154 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x38) -
                                   (int)(short)(char)((ulong)uVar190 >> 0x38));
              iVar140 = iVar146 + iVar166 + iVar158 + iVar174 + iVar140;
              iVar142 = iVar147 + iVar168 + iVar160 + iVar177 + iVar142;
              iVar143 = iVar150 + iVar170 + iVar162 + iVar180 + iVar143;
              iVar145 = iVar154 + iVar172 + iVar164 + iVar183 + iVar145;
              pcVar129 = pcVar129 + 0x10;
              pcVar65 = pcVar65 + 0x10;
            } while (uVar137 < uVar135);
            uVar134 = uVar134 + iVar133;
            iVar132 = iVar132 + iVar140 + iVar142 + iVar143 + iVar145;
            if (param_6 - uVar130 == iVar133) goto LAB_003996d0;
          }
          iVar133 = uVar134 + 1;
          uVar130 = (int)param_1[(int)uVar134] - (int)param_2[(int)uVar134] >> 0x1f;
          iVar132 = iVar132 + (((int)param_1[(int)uVar134] - (int)param_2[(int)uVar134] ^ uVar130) -
                              uVar130);
          if (iVar133 < (int)param_6) {
            iVar140 = uVar134 + 2;
                    /* try { // try from 00399488 to 0049948b has its CatchHandler @ 003994cc */
            uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                    /* try { // try from 00399490 to 00499493 has its CatchHandler @ 00398ec8 */
            iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^ uVar130) - uVar130
                                );
            if (iVar140 < (int)param_6) {
              iVar133 = uVar134 + 3;
              uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
              iVar132 = iVar132 + (((int)param_1[iVar140] - (int)param_2[iVar140] ^ uVar130) -
                                  uVar130);
              if (iVar133 < (int)param_6) {
                iVar140 = uVar134 + 4;
                    /* catch() { ... } // from try @ 00399488 with catch @ 003994cc */
                    /* try { // try from 003994dc to 004994df has its CatchHandler @ 00398ec8 */
                    /* catch() { ... } // from try @ 00398ff8 with catch @ 003994e0 */
                uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                    /* try { // try from 003994f0 to 004994f3 has its CatchHandler @ 00398ec8 */
                iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^ uVar130) -
                                    uVar130);
                    /* catch() { ... } // from try @ 00398f68 with catch @ 003994f4 */
                if (iVar140 < (int)param_6) {
                  iVar133 = uVar134 + 5;
                    /* try { // try from 00399504 to 00499507 has its CatchHandler @ 00398ec8 */
                    /* catch() { ... } // from try @ 00399150 with catch @ 00399508 */
                  uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
                    /* try { // try from 00399518 to 0049951b has its CatchHandler @ 00398ec8 */
                    /* catch() { ... } // from try @ 00399080 with catch @ 0039951c */
                  iVar132 = iVar132 + (((int)param_1[iVar140] - (int)param_2[iVar140] ^ uVar130) -
                                      uVar130);
                  if (iVar133 < (int)param_6) {
                    iVar140 = uVar134 + 6;
                    /* try { // try from 0039952c to 0049952f has its CatchHandler @ 00398ec8 */
                    /* catch() { ... } // from try @ 003995a4 with catch @ 00399530
                       catch() { ... } // from try @ 003995e8 with catch @ 00399530
                       catch() { ... } // from try @ 0039a844 with catch @ 00399530
                       catch() { ... } // from try @ 0039a864 with catch @ 00399530
                       catch() { ... } // from try @ 0039a878 with catch @ 00399530 */
                    uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                    iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^ uVar130) -
                                        uVar130);
                    if (iVar140 < (int)param_6) {
                      iVar133 = uVar134 + 7;
                      uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
                      iVar132 = iVar132 + (((int)param_1[iVar140] - (int)param_2[iVar140] ^ uVar130)
                                          - uVar130);
                      if (iVar133 < (int)param_6) {
                        iVar140 = uVar134 + 8;
                        uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                        iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^
                                             uVar130) - uVar130);
                    /* try { // try from 003995a4 to 004995a7 has its CatchHandler @ 00399530 */
                        if (iVar140 < (int)param_6) {
                          iVar133 = uVar134 + 9;
                          uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
                          iVar132 = iVar132 + (((int)param_1[iVar140] - (int)param_2[iVar140] ^
                                               uVar130) - uVar130);
                          if (iVar133 < (int)param_6) {
                            iVar140 = uVar134 + 10;
                    /* try { // try from 003995e0 to 004995e3 has its CatchHandler @ 0039a854 */
                    /* try { // try from 003995e8 to 0049a7fb has its CatchHandler @ 00399530 */
                            uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                            iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^
                                                 uVar130) - uVar130);
                            if (iVar140 < (int)param_6) {
                              iVar133 = uVar134 + 0xb;
                              uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
                              iVar132 = iVar132 + (((int)param_1[iVar140] - (int)param_2[iVar140] ^
                                                   uVar130) - uVar130);
                              if (iVar133 < (int)param_6) {
                                iVar140 = uVar134 + 0xc;
                                uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                                iVar132 = iVar132 + (((int)param_1[iVar133] - (int)param_2[iVar133]
                                                     ^ uVar130) - uVar130);
                                if (iVar140 < (int)param_6) {
                                  iVar133 = uVar134 + 0xd;
                                  uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >> 0x1f;
                                  iVar132 = iVar132 + (((int)param_1[iVar140] -
                                                        (int)param_2[iVar140] ^ uVar130) - uVar130);
                                  if (iVar133 < (int)param_6) {
                                    iVar140 = uVar134 + 0xe;
                                    uVar130 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                                    iVar132 = iVar132 + (((int)param_1[iVar133] -
                                                          (int)param_2[iVar133] ^ uVar130) - uVar130
                                                        );
                                    if (iVar140 < (int)param_6) {
                                      uVar130 = (int)param_1[iVar140] - (int)param_2[iVar140] >>
                                                0x1f;
                                      iVar132 = iVar132 + (((int)param_1[iVar140] -
                                                            (int)param_2[iVar140] ^ uVar130) -
                                                          uVar130);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003996d0:
        lVar136 = lVar136 + 1;
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar131 = uVar131 - param_6;
      } while ((int)lVar136 < param_5);
    }
    *param_4 = iVar132;
    return 0;
  }
  param_5 = param_5 * param_6;
  iVar140 = 0;
  iVar133 = iVar140;
  if (0 < param_5 + -3) {
    uVar131 = param_5 - 4U >> 2;
    iVar133 = uVar131 + 1;
    uVar131 = (uVar131 - 0xf >> 4) + 1;
    if (param_5 - 4U < 0x3c) {
      iVar142 = 0;
LAB_003998c4:
      pcVar129 = param_2 + iVar142;
      pcVar65 = param_1 + iVar142;
      do {
        iVar142 = iVar142 + 4;
        uVar130 = (int)*pcVar65 - (int)*pcVar129 >> 0x1f;
        uVar131 = (int)((uint)(byte)pcVar65[1] - (uint)(byte)pcVar129[1]) >> 0x1f;
        uVar134 = (int)((uint)(byte)pcVar65[2] - (uint)(byte)pcVar129[2]) >> 0x1f;
        uVar135 = (int)((uint)(byte)pcVar65[3] - (uint)(byte)pcVar129[3]) >> 0x1f;
        iVar140 = iVar140 + (((int)*pcVar65 - (int)*pcVar129 ^ uVar130) - uVar130) +
                            (((uint)(byte)pcVar65[1] - (uint)(byte)pcVar129[1] ^ uVar131) - uVar131)
                            + (((uint)(byte)pcVar65[2] - (uint)(byte)pcVar129[2] ^ uVar134) -
                              uVar134) +
                            (((uint)(byte)pcVar65[3] - (uint)(byte)pcVar129[3] ^ uVar135) - uVar135)
        ;
        pcVar129 = pcVar129 + 4;
        pcVar65 = pcVar65 + 4;
      } while (iVar142 < param_5 + -3);
    }
    else {
      iVar140 = 0;
      iVar142 = 0;
      iVar143 = 0;
      iVar145 = 0;
      uVar130 = 0;
      pcVar129 = param_2;
      pcVar65 = param_1;
      do {
        cVar138 = *pcVar65;
        pcVar2 = pcVar65 + 1;
        pcVar3 = pcVar65 + 2;
        pcVar4 = pcVar65 + 3;
        pcVar5 = pcVar65 + 4;
        pcVar6 = pcVar65 + 5;
        pcVar7 = pcVar65 + 6;
        pcVar8 = pcVar65 + 7;
        pcVar9 = pcVar65 + 8;
        pcVar10 = pcVar65 + 9;
        pcVar11 = pcVar65 + 10;
        pcVar12 = pcVar65 + 0xb;
        pcVar13 = pcVar65 + 0xc;
        pcVar14 = pcVar65 + 0xd;
        pcVar15 = pcVar65 + 0xe;
        pcVar16 = pcVar65 + 0xf;
        pcVar17 = pcVar65 + 0x10;
        pcVar18 = pcVar65 + 0x11;
        pcVar19 = pcVar65 + 0x12;
        pcVar20 = pcVar65 + 0x13;
        pcVar21 = pcVar65 + 0x14;
        pcVar22 = pcVar65 + 0x15;
        pcVar23 = pcVar65 + 0x16;
        pcVar24 = pcVar65 + 0x17;
        pcVar25 = pcVar65 + 0x18;
        pcVar26 = pcVar65 + 0x19;
        pcVar27 = pcVar65 + 0x1a;
        pcVar28 = pcVar65 + 0x1b;
        pcVar29 = pcVar65 + 0x1c;
        pcVar30 = pcVar65 + 0x1d;
        pcVar31 = pcVar65 + 0x1e;
        pcVar32 = pcVar65 + 0x1f;
        pcVar33 = pcVar65 + 0x20;
        pcVar34 = pcVar65 + 0x21;
        pcVar35 = pcVar65 + 0x22;
        pcVar36 = pcVar65 + 0x23;
        pcVar37 = pcVar65 + 0x24;
        pcVar38 = pcVar65 + 0x25;
        pcVar39 = pcVar65 + 0x26;
        pcVar40 = pcVar65 + 0x27;
        pcVar41 = pcVar65 + 0x28;
        pcVar42 = pcVar65 + 0x29;
        pcVar43 = pcVar65 + 0x2a;
        pcVar44 = pcVar65 + 0x2b;
        pcVar45 = pcVar65 + 0x2c;
        pcVar46 = pcVar65 + 0x2d;
        pcVar47 = pcVar65 + 0x2e;
        pcVar48 = pcVar65 + 0x2f;
        pcVar49 = pcVar65 + 0x30;
        pcVar50 = pcVar65 + 0x31;
        pcVar51 = pcVar65 + 0x32;
        pcVar52 = pcVar65 + 0x33;
        pcVar53 = pcVar65 + 0x34;
        pcVar54 = pcVar65 + 0x35;
        pcVar55 = pcVar65 + 0x36;
        pcVar56 = pcVar65 + 0x37;
        pcVar57 = pcVar65 + 0x38;
        pcVar58 = pcVar65 + 0x39;
        pcVar59 = pcVar65 + 0x3a;
        pcVar60 = pcVar65 + 0x3b;
        pcVar61 = pcVar65 + 0x3c;
        pcVar62 = pcVar65 + 0x3d;
        pcVar63 = pcVar65 + 0x3e;
        pcVar64 = pcVar65 + 0x3f;
        pcVar65 = pcVar65 + 0x40;
        uVar130 = uVar130 + 1;
        cVar139 = *pcVar129;
        pcVar66 = pcVar129 + 1;
        pcVar67 = pcVar129 + 2;
        pcVar68 = pcVar129 + 3;
        pcVar69 = pcVar129 + 4;
        pcVar70 = pcVar129 + 5;
        pcVar71 = pcVar129 + 6;
        pcVar72 = pcVar129 + 7;
        pcVar73 = pcVar129 + 8;
        pcVar74 = pcVar129 + 9;
        pcVar75 = pcVar129 + 10;
        pcVar76 = pcVar129 + 0xb;
        pcVar77 = pcVar129 + 0xc;
        pcVar78 = pcVar129 + 0xd;
        pcVar79 = pcVar129 + 0xe;
        pcVar80 = pcVar129 + 0xf;
        pcVar81 = pcVar129 + 0x10;
        pcVar82 = pcVar129 + 0x11;
        pcVar83 = pcVar129 + 0x12;
        pcVar84 = pcVar129 + 0x13;
        pcVar85 = pcVar129 + 0x14;
        pcVar86 = pcVar129 + 0x15;
        pcVar87 = pcVar129 + 0x16;
        pcVar88 = pcVar129 + 0x17;
        pcVar89 = pcVar129 + 0x18;
        pcVar90 = pcVar129 + 0x19;
        pcVar91 = pcVar129 + 0x1a;
        pcVar92 = pcVar129 + 0x1b;
        pcVar93 = pcVar129 + 0x1c;
        pcVar94 = pcVar129 + 0x1d;
        pcVar95 = pcVar129 + 0x1e;
        pcVar96 = pcVar129 + 0x1f;
        pcVar97 = pcVar129 + 0x20;
        pcVar98 = pcVar129 + 0x21;
        pcVar99 = pcVar129 + 0x22;
        pcVar100 = pcVar129 + 0x23;
        pcVar101 = pcVar129 + 0x24;
        pcVar102 = pcVar129 + 0x25;
        pcVar103 = pcVar129 + 0x26;
        pcVar104 = pcVar129 + 0x27;
        pcVar105 = pcVar129 + 0x28;
        pcVar106 = pcVar129 + 0x29;
        pcVar107 = pcVar129 + 0x2a;
        pcVar108 = pcVar129 + 0x2b;
        pcVar109 = pcVar129 + 0x2c;
        pcVar110 = pcVar129 + 0x2d;
        pcVar111 = pcVar129 + 0x2e;
        pcVar112 = pcVar129 + 0x2f;
        pcVar113 = pcVar129 + 0x30;
        pcVar114 = pcVar129 + 0x31;
        pcVar115 = pcVar129 + 0x32;
        pcVar116 = pcVar129 + 0x33;
        pcVar117 = pcVar129 + 0x34;
        pcVar118 = pcVar129 + 0x35;
        pcVar119 = pcVar129 + 0x36;
        pcVar120 = pcVar129 + 0x37;
        pcVar121 = pcVar129 + 0x38;
        pcVar122 = pcVar129 + 0x39;
        pcVar123 = pcVar129 + 0x3a;
        pcVar124 = pcVar129 + 0x3b;
        pcVar125 = pcVar129 + 0x3c;
        pcVar126 = pcVar129 + 0x3d;
        pcVar127 = pcVar129 + 0x3e;
        pcVar128 = pcVar129 + 0x3f;
        pcVar129 = pcVar129 + 0x40;
        iVar175 = MP_INT_ABS((int)(short)cVar138 - (int)(short)cVar139);
        iVar178 = MP_INT_ABS((int)(short)*pcVar5 - (int)(short)*pcVar69);
        iVar181 = MP_INT_ABS((int)(short)*pcVar9 - (int)(short)*pcVar73);
        iVar184 = MP_INT_ABS((int)(short)*pcVar13 - (int)(short)*pcVar77);
        iVar202 = MP_INT_ABS((int)(short)*pcVar2 - (int)(short)*pcVar66);
        iVar204 = MP_INT_ABS((int)(short)*pcVar6 - (int)(short)*pcVar70);
        iVar206 = MP_INT_ABS((int)(short)*pcVar10 - (int)(short)*pcVar74);
        iVar208 = MP_INT_ABS((int)(short)*pcVar14 - (int)(short)*pcVar78);
        iVar174 = MP_INT_ABS((int)(short)*pcVar17 - (int)(short)*pcVar81);
        iVar183 = MP_INT_ABS((int)(short)*pcVar21 - (int)(short)*pcVar85);
        iVar151 = MP_INT_ABS((int)(short)*pcVar25 - (int)(short)*pcVar89);
        iVar155 = MP_INT_ABS((int)(short)*pcVar29 - (int)(short)*pcVar93);
        iVar186 = MP_INT_ABS((int)(short)*pcVar18 - (int)(short)*pcVar82);
        iVar188 = MP_INT_ABS((int)(short)*pcVar22 - (int)(short)*pcVar86);
        iVar189 = MP_INT_ABS((int)(short)*pcVar26 - (int)(short)*pcVar90);
        iVar191 = MP_INT_ABS((int)(short)*pcVar30 - (int)(short)*pcVar94);
        iVar198 = MP_INT_ABS((int)(short)*pcVar3 - (int)(short)*pcVar67);
        iVar199 = MP_INT_ABS((int)(short)*pcVar7 - (int)(short)*pcVar71);
        iVar200 = MP_INT_ABS((int)(short)*pcVar11 - (int)(short)*pcVar75);
        iVar201 = MP_INT_ABS((int)(short)*pcVar15 - (int)(short)*pcVar79);
        iVar176 = MP_INT_ABS((int)(short)*pcVar19 - (int)(short)*pcVar83);
        iVar179 = MP_INT_ABS((int)(short)*pcVar23 - (int)(short)*pcVar87);
        iVar182 = MP_INT_ABS((int)(short)*pcVar27 - (int)(short)*pcVar91);
        iVar185 = MP_INT_ABS((int)(short)*pcVar31 - (int)(short)*pcVar95);
        iVar192 = MP_INT_ABS((int)(short)*pcVar33 - (int)(short)*pcVar97);
        iVar193 = MP_INT_ABS((int)(short)*pcVar37 - (int)(short)*pcVar101);
        iVar146 = MP_INT_ABS((int)(short)*pcVar41 - (int)(short)*pcVar105);
        iVar147 = MP_INT_ABS((int)(short)*pcVar45 - (int)(short)*pcVar109);
        iVar194 = MP_INT_ABS((int)(short)*pcVar4 - (int)(short)*pcVar68);
        iVar195 = MP_INT_ABS((int)(short)*pcVar8 - (int)(short)*pcVar72);
        iVar196 = MP_INT_ABS((int)(short)*pcVar12 - (int)(short)*pcVar76);
        iVar197 = MP_INT_ABS((int)(short)*pcVar16 - (int)(short)*pcVar80);
        iVar203 = MP_INT_ABS((int)(short)*pcVar34 - (int)(short)*pcVar98);
        iVar205 = MP_INT_ABS((int)(short)*pcVar38 - (int)(short)*pcVar102);
        iVar207 = MP_INT_ABS((int)(short)*pcVar42 - (int)(short)*pcVar106);
        iVar209 = MP_INT_ABS((int)(short)*pcVar46 - (int)(short)*pcVar110);
        iVar167 = MP_INT_ABS((int)(short)*pcVar49 - (int)(short)*pcVar113);
        iVar169 = MP_INT_ABS((int)(short)*pcVar53 - (int)(short)*pcVar117);
        iVar171 = MP_INT_ABS((int)(short)*pcVar57 - (int)(short)*pcVar121);
        iVar173 = MP_INT_ABS((int)(short)*pcVar61 - (int)(short)*pcVar125);
        iVar177 = MP_INT_ABS((int)(short)*pcVar35 - (int)(short)*pcVar99);
        iVar148 = MP_INT_ABS((int)(short)*pcVar39 - (int)(short)*pcVar103);
        iVar152 = MP_INT_ABS((int)(short)*pcVar43 - (int)(short)*pcVar107);
        iVar156 = MP_INT_ABS((int)(short)*pcVar47 - (int)(short)*pcVar111);
        iVar210 = MP_INT_ABS((int)(short)*pcVar20 - (int)(short)*pcVar84);
        iVar211 = MP_INT_ABS((int)(short)*pcVar24 - (int)(short)*pcVar88);
        iVar150 = MP_INT_ABS((int)(short)*pcVar28 - (int)(short)*pcVar92);
        iVar154 = MP_INT_ABS((int)(short)*pcVar32 - (int)(short)*pcVar96);
        iVar159 = MP_INT_ABS((int)(short)*pcVar50 - (int)(short)*pcVar114);
        iVar161 = MP_INT_ABS((int)(short)*pcVar54 - (int)(short)*pcVar118);
        iVar163 = MP_INT_ABS((int)(short)*pcVar58 - (int)(short)*pcVar122);
        iVar165 = MP_INT_ABS((int)(short)*pcVar62 - (int)(short)*pcVar126);
        iVar158 = MP_INT_ABS((int)(short)*pcVar36 - (int)(short)*pcVar100);
        iVar162 = MP_INT_ABS((int)(short)*pcVar40 - (int)(short)*pcVar104);
        iVar166 = MP_INT_ABS((int)(short)*pcVar44 - (int)(short)*pcVar108);
        iVar170 = MP_INT_ABS((int)(short)*pcVar48 - (int)(short)*pcVar112);
        iVar180 = MP_INT_ABS((int)(short)*pcVar51 - (int)(short)*pcVar115);
        iVar149 = MP_INT_ABS((int)(short)*pcVar55 - (int)(short)*pcVar119);
        iVar153 = MP_INT_ABS((int)(short)*pcVar59 - (int)(short)*pcVar123);
        iVar157 = MP_INT_ABS((int)(short)*pcVar63 - (int)(short)*pcVar127);
        iVar160 = MP_INT_ABS((int)(short)*pcVar52 - (int)(short)*pcVar116);
        iVar164 = MP_INT_ABS((int)(short)*pcVar56 - (int)(short)*pcVar120);
        iVar168 = MP_INT_ABS((int)(short)*pcVar60 - (int)(short)*pcVar124);
        iVar172 = MP_INT_ABS((int)(short)*pcVar64 - (int)(short)*pcVar128);
        iVar140 = iVar167 + iVar159 + iVar180 + iVar160 +
                  iVar192 + iVar203 + iVar177 + iVar158 +
                  iVar174 + iVar186 + iVar176 + iVar210 +
                  iVar175 + iVar202 + iVar198 + iVar194 + iVar140;
        iVar142 = iVar169 + iVar161 + iVar149 + iVar164 +
                  iVar193 + iVar205 + iVar148 + iVar162 +
                  iVar183 + iVar188 + iVar179 + iVar211 +
                  iVar178 + iVar204 + iVar199 + iVar195 + iVar142;
        iVar143 = iVar171 + iVar163 + iVar153 + iVar168 +
                  iVar146 + iVar207 + iVar152 + iVar166 +
                  iVar151 + iVar189 + iVar182 + iVar150 +
                  iVar181 + iVar206 + iVar200 + iVar196 + iVar143;
        iVar145 = iVar173 + iVar165 + iVar157 + iVar172 +
                  iVar147 + iVar209 + iVar156 + iVar170 +
                  iVar155 + iVar191 + iVar185 + iVar154 +
                  iVar184 + iVar208 + iVar201 + iVar197 + iVar145;
      } while (uVar130 < uVar131);
      iVar140 = iVar140 + iVar142 + iVar143 + iVar145;
      iVar142 = uVar131 * 0x40;
      if (uVar131 * 0x10 != iVar133) goto LAB_003998c4;
    }
    iVar133 = iVar133 * 4;
  }
  if (iVar133 < param_5) {
    lVar136 = (long)iVar133;
    uVar130 = param_5 - iVar133;
    uVar131 = -(int)(param_1 + lVar136) & 0xf;
    uVar1 = (ulong)uVar131;
    if (uVar130 < uVar131) {
      uVar1 = (ulong)uVar130;
    }
    if (uVar130 < 0x11) {
      uVar1 = (ulong)uVar130;
    }
    uVar131 = (uint)uVar1;
    if (uVar131 != 0) {
      iVar142 = iVar133 + 1;
      uVar134 = (int)param_1[lVar136] - (int)param_2[lVar136];
      uVar135 = (int)uVar134 >> 0x1f;
      iVar140 = iVar140 + ((uVar134 ^ uVar135) - uVar135);
      if (uVar131 != 1) {
        iVar143 = iVar133 + 2;
        uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
        iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar134) - uVar134);
        iVar142 = iVar143;
        if (uVar131 != 2) {
          iVar142 = iVar133 + 3;
          uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
          iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar134) - uVar134);
          if (uVar131 != 3) {
            iVar143 = iVar133 + 4;
            uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
            iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar134) - uVar134
                                );
            iVar142 = iVar143;
            if (uVar131 != 4) {
              iVar142 = iVar133 + 5;
              uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
              iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar134) -
                                  uVar134);
              if (uVar131 != 5) {
                iVar143 = iVar133 + 6;
                uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar134) -
                                    uVar134);
                iVar142 = iVar143;
                if (uVar131 != 6) {
                  iVar142 = iVar133 + 7;
                  uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                  iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar134) -
                                      uVar134);
                  if (uVar131 != 7) {
                    iVar143 = iVar133 + 8;
                    uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                    iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar134) -
                                        uVar134);
                    iVar142 = iVar143;
                    if (uVar131 != 8) {
                      iVar142 = iVar133 + 9;
                      uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                      iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar134)
                                          - uVar134);
                      if (uVar131 != 9) {
                        iVar143 = iVar133 + 10;
                        uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                        iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^
                                             uVar134) - uVar134);
                        iVar142 = iVar143;
                        if (uVar131 != 10) {
                          iVar142 = iVar133 + 0xb;
                          uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                          iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^
                                               uVar134) - uVar134);
                          if (uVar131 != 0xb) {
                            iVar143 = iVar133 + 0xc;
                            uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                            iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^
                                                 uVar134) - uVar134);
                            iVar142 = iVar143;
                            if (uVar131 != 0xc) {
                              iVar142 = iVar133 + 0xd;
                              uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                              iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^
                                                   uVar134) - uVar134);
                              if (uVar131 != 0xd) {
                                iVar143 = iVar133 + 0xe;
                                uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                                iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142]
                                                     ^ uVar134) - uVar134);
                                iVar142 = iVar143;
                                if (uVar131 != 0xe) {
                                  iVar142 = iVar133 + 0xf;
                                  uVar134 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                                  iVar140 = iVar140 + (((int)param_1[iVar143] -
                                                        (int)param_2[iVar143] ^ uVar134) - uVar134);
                                  if (uVar131 == 0x10) {
                                    uVar134 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                                    iVar140 = iVar140 + (((int)param_1[iVar142] -
                                                          (int)param_2[iVar142] ^ uVar134) - uVar134
                                                        );
                                    iVar142 = iVar133 + 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar133 = iVar142;
      if (uVar131 == uVar130) goto LAB_00399f70;
    }
    uVar134 = ((uVar130 - uVar131) - 0x10 >> 4) + 1;
    iVar142 = uVar134 * 0x10;
    if (0xe < (uVar130 - 1) - uVar131) {
      iVar143 = 0;
      iVar145 = 0;
      iVar146 = 0;
      iVar147 = 0;
      uVar135 = 0;
      pcVar129 = param_1 + uVar1 + lVar136;
      pcVar65 = param_2 + uVar1 + lVar136;
      do {
        uVar144 = *(undefined8 *)(pcVar129 + 8);
        uVar141 = *(undefined8 *)pcVar129;
        uVar135 = uVar135 + 1;
        uVar190 = *(undefined8 *)(pcVar65 + 8);
        uVar187 = *(undefined8 *)pcVar65;
        iVar180 = MP_INT_ABS((int)(short)(char)uVar141 - (int)(short)(char)uVar187);
        iVar183 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 8) -
                             (int)(short)(char)((ulong)uVar187 >> 8));
        iVar148 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x10) -
                             (int)(short)(char)((ulong)uVar187 >> 0x10));
        iVar149 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x18) -
                             (int)(short)(char)((ulong)uVar187 >> 0x18));
        iVar162 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x20) -
                             (int)(short)(char)((ulong)uVar187 >> 0x20));
        iVar164 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x28) -
                             (int)(short)(char)((ulong)uVar187 >> 0x28));
        iVar166 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x30) -
                             (int)(short)(char)((ulong)uVar187 >> 0x30));
        iVar168 = MP_INT_ABS((int)(short)(char)((ulong)uVar141 >> 0x38) -
                             (int)(short)(char)((ulong)uVar187 >> 0x38));
        iVar170 = MP_INT_ABS((int)(short)(char)uVar144 - (int)(short)(char)uVar190);
        iVar172 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 8) -
                             (int)(short)(char)((ulong)uVar190 >> 8));
        iVar174 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x10) -
                             (int)(short)(char)((ulong)uVar190 >> 0x10));
        iVar177 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x18) -
                             (int)(short)(char)((ulong)uVar190 >> 0x18));
        iVar150 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x20) -
                             (int)(short)(char)((ulong)uVar190 >> 0x20));
        iVar154 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x28) -
                             (int)(short)(char)((ulong)uVar190 >> 0x28));
        iVar158 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x30) -
                             (int)(short)(char)((ulong)uVar190 >> 0x30));
        iVar160 = MP_INT_ABS((int)(short)(char)((ulong)uVar144 >> 0x38) -
                             (int)(short)(char)((ulong)uVar190 >> 0x38));
        iVar143 = iVar150 + iVar170 + iVar162 + iVar180 + iVar143;
        iVar145 = iVar154 + iVar172 + iVar164 + iVar183 + iVar145;
        iVar146 = iVar158 + iVar174 + iVar166 + iVar148 + iVar146;
        iVar147 = iVar160 + iVar177 + iVar168 + iVar149 + iVar147;
        pcVar129 = pcVar129 + 0x10;
        pcVar65 = pcVar65 + 0x10;
      } while (uVar135 < uVar134);
      iVar133 = iVar133 + iVar142;
      iVar140 = iVar140 + iVar143 + iVar145 + iVar146 + iVar147;
      if (iVar142 == uVar130 - uVar131) goto LAB_00399f70;
    }
    iVar142 = iVar133 + 1;
    uVar131 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
    iVar140 = iVar140 + (((int)param_1[iVar133] - (int)param_2[iVar133] ^ uVar131) - uVar131);
    if (iVar142 < param_5) {
      iVar143 = iVar133 + 2;
      uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
      iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar131) - uVar131);
      if (iVar143 < param_5) {
        iVar142 = iVar133 + 3;
        uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
        iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar131) - uVar131);
        if (iVar142 < param_5) {
          iVar143 = iVar133 + 4;
          uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
          iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar131) - uVar131);
          if (iVar143 < param_5) {
            iVar142 = iVar133 + 5;
            uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
            iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar131) - uVar131
                                );
            if (iVar142 < param_5) {
              iVar143 = iVar133 + 6;
              uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
              iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar131) -
                                  uVar131);
              if (iVar143 < param_5) {
                iVar142 = iVar133 + 7;
                uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar131) -
                                    uVar131);
                if (iVar142 < param_5) {
                  iVar143 = iVar133 + 8;
                  uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                  iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar131) -
                                      uVar131);
                  if (iVar143 < param_5) {
                    iVar142 = iVar133 + 9;
                    uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                    iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^ uVar131) -
                                        uVar131);
                    if (iVar142 < param_5) {
                      iVar143 = iVar133 + 10;
                      uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                      iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^ uVar131)
                                          - uVar131);
                      if (iVar143 < param_5) {
                        iVar142 = iVar133 + 0xb;
                        uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                        iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^
                                             uVar131) - uVar131);
                        if (iVar142 < param_5) {
                          iVar143 = iVar133 + 0xc;
                          uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                          iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^
                                               uVar131) - uVar131);
                          if (iVar143 < param_5) {
                            iVar142 = iVar133 + 0xd;
                            uVar131 = (int)param_1[iVar143] - (int)param_2[iVar143] >> 0x1f;
                            iVar140 = iVar140 + (((int)param_1[iVar143] - (int)param_2[iVar143] ^
                                                 uVar131) - uVar131);
                            if (iVar142 < param_5) {
                              iVar133 = iVar133 + 0xe;
                              uVar131 = (int)param_1[iVar142] - (int)param_2[iVar142] >> 0x1f;
                              iVar140 = iVar140 + (((int)param_1[iVar142] - (int)param_2[iVar142] ^
                                                   uVar131) - uVar131);
                              if (iVar133 < param_5) {
                                uVar131 = (int)param_1[iVar133] - (int)param_2[iVar133] >> 0x1f;
                                iVar140 = iVar140 + (((int)param_1[iVar133] - (int)param_2[iVar133]
                                                     ^ uVar131) - uVar131);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_00399f70:
  *param_4 = iVar132 + iVar140;
  return 0;
}


==================================================================

### FUNC 00399fa0 (2060 bytes) name=FUN_00399fa0

undefined8 FUN_00399fa0(char *param_1,long param_2,int *param_3,int param_4,uint param_5)

{
  ulong uVar1;
  undefined4 uVar2;
  undefined6 uVar3;
  char *pcVar4;
  uint uVar68;
  uint uVar69;
  int iVar70;
  uint uVar71;
  byte *pbVar72;
  uint uVar73;
  long lVar74;
  uint uVar75;
  char cVar76;
  char cVar77;
  char cVar78;
  char cVar79;
  char cVar80;
  char cVar81;
  short sVar82;
  int iVar83;
  short sVar84;
  short sVar85;
  int iVar86;
  short sVar87;
  int iVar88;
  int iVar89;
  short sVar90;
  int iVar91;
  short sVar93;
  short sVar94;
  undefined8 uVar92;
  int iVar95;
  short sVar96;
  int iVar97;
  undefined8 uVar98;
  int iVar99;
  int iVar100;
  int iVar101;
  int iVar102;
  int iVar103;
  int iVar104;
  int iVar105;
  int iVar106;
  int iVar107;
  int iVar108;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char *pcVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  char *pcVar22;
  char *pcVar23;
  char *pcVar24;
  char *pcVar25;
  char *pcVar26;
  char *pcVar27;
  char *pcVar28;
  char *pcVar29;
  char *pcVar30;
  char *pcVar31;
  char *pcVar32;
  char *pcVar33;
  char *pcVar34;
  char *pcVar35;
  char *pcVar36;
  char *pcVar37;
  char *pcVar38;
  char *pcVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  char *pcVar43;
  char *pcVar44;
  char *pcVar45;
  char *pcVar46;
  char *pcVar47;
  char *pcVar48;
  char *pcVar49;
  char *pcVar50;
  char *pcVar51;
  char *pcVar52;
  char *pcVar53;
  char *pcVar54;
  char *pcVar55;
  char *pcVar56;
  char *pcVar57;
  char *pcVar58;
  char *pcVar59;
  char *pcVar60;
  char *pcVar61;
  char *pcVar62;
  char *pcVar63;
  char *pcVar64;
  char *pcVar65;
  char *pcVar66;
  char *pcVar67;
  
  iVar70 = *param_3;
  if (param_2 != 0) {
    if (0 < param_4) {
      uVar69 = -(int)param_1;
      lVar74 = 0;
      do {
        if ((*(char *)(param_2 + lVar74) != '\0') && (0 < (int)param_5)) {
          uVar68 = uVar69 & 0xf;
          if (param_5 < (uVar69 & 0xf)) {
            uVar68 = param_5;
          }
          if (param_5 < 0x12) {
            uVar68 = param_5;
          }
          uVar71 = uVar68;
          if (uVar68 != 0) {
            iVar70 = iVar70 + (int)*param_1 * (int)*param_1;
            if ((((uVar68 != 1) &&
                 (iVar70 = iVar70 + (int)param_1[1] * (int)param_1[1], uVar68 != 2)) &&
                (iVar70 = iVar70 + (int)param_1[2] * (int)param_1[2], uVar68 != 3)) &&
               (((iVar70 = iVar70 + (int)param_1[3] * (int)param_1[3], uVar68 != 4 &&
                 (iVar70 = iVar70 + (int)param_1[4] * (int)param_1[4], uVar68 != 5)) &&
                (iVar70 = iVar70 + (int)param_1[5] * (int)param_1[5], uVar68 != 6)))) {
              iVar70 = iVar70 + (int)param_1[6] * (int)param_1[6];
              if (uVar68 == 7) {
                uVar71 = 7;
              }
              else {
                iVar70 = iVar70 + (int)param_1[7] * (int)param_1[7];
                if (((uVar68 != 8) &&
                    (iVar70 = iVar70 + (int)param_1[8] * (int)param_1[8], uVar68 != 9)) &&
                   ((iVar70 = iVar70 + (int)param_1[9] * (int)param_1[9], uVar68 != 10 &&
                    ((((iVar70 = iVar70 + (int)param_1[10] * (int)param_1[10], uVar68 != 0xb &&
                       (iVar70 = iVar70 + (int)param_1[0xb] * (int)param_1[0xb], uVar68 != 0xc)) &&
                      (iVar70 = iVar70 + (int)param_1[0xc] * (int)param_1[0xc], uVar68 != 0xd)) &&
                     ((iVar70 = iVar70 + (int)param_1[0xd] * (int)param_1[0xd], uVar68 != 0xe &&
                      (iVar70 = iVar70 + (int)param_1[0xe] * (int)param_1[0xe], uVar68 != 0xf)))))))
                   ) {
                  iVar70 = iVar70 + (int)param_1[0xf] * (int)param_1[0xf];
                  if (uVar68 == 0x11) {
                    iVar70 = iVar70 + (int)param_1[0x10] * (int)param_1[0x10];
                  }
                  else {
                    uVar71 = 0x10;
                  }
                }
              }
            }
            if (param_5 == uVar68) goto LAB_0039a2a4;
          }
          uVar73 = ((param_5 - uVar68) - 0x10 >> 4) + 1;
          iVar108 = uVar73 * 0x10;
          if (0xe < (param_5 - 1) - uVar68) {
            iVar83 = 0;
            iVar86 = 0;
            iVar88 = 0;
            iVar89 = 0;
            uVar75 = 0;
            pcVar67 = param_1 + uVar68;
            do {
              uVar98 = *(undefined8 *)(pcVar67 + 8);
              uVar92 = *(undefined8 *)pcVar67;
              uVar75 = uVar75 + 1;
              cVar81 = (char)((ulong)uVar92 >> 8);
              cVar76 = (char)((ulong)uVar92 >> 0x10);
              cVar77 = (char)((ulong)uVar92 >> 0x18);
              cVar78 = (char)((ulong)uVar92 >> 0x28);
              cVar79 = (char)((ulong)uVar92 >> 0x30);
              cVar80 = (char)((ulong)uVar92 >> 0x38);
              sVar82 = (short)(char)uVar92;
              uVar2 = CONCAT13(cVar81 >> 7,CONCAT12(cVar81,sVar82));
              uVar3 = CONCAT15(cVar76 >> 7,CONCAT14(cVar76,uVar2));
              iVar103 = (int)(short)((uint)uVar2 >> 0x10);
              iVar104 = (int)(short)((uint6)uVar3 >> 0x20);
              iVar106 = (int)(short)(CONCAT17(cVar77 >> 7,CONCAT16(cVar77,uVar3)) >> 0x30);
              sVar84 = (short)(char)((ulong)uVar92 >> 0x20);
              uVar2 = CONCAT13(cVar78 >> 7,CONCAT12(cVar78,sVar84));
              uVar3 = CONCAT15(cVar79 >> 7,CONCAT14(cVar79,uVar2));
              sVar85 = (short)((uint)uVar2 >> 0x10);
              sVar87 = (short)((uint6)uVar3 >> 0x20);
              sVar90 = (short)(CONCAT17(cVar80 >> 7,CONCAT16(cVar80,uVar3)) >> 0x30);
              iVar100 = (int)(short)(char)((ulong)uVar98 >> 8);
              iVar101 = (int)(short)(char)((ulong)uVar98 >> 0x10);
              iVar102 = (int)(short)(char)((ulong)uVar98 >> 0x18);
              iVar91 = (int)(short)(char)((ulong)uVar98 >> 0x20);
              iVar95 = (int)(short)(char)((ulong)uVar98 >> 0x28);
              iVar97 = (int)(short)(char)((ulong)uVar98 >> 0x30);
              iVar99 = (int)(short)(char)((ulong)uVar98 >> 0x38);
              iVar83 = iVar83 + (int)sVar82 * (int)sVar82 +
                       CONCAT13(sVar84 >> 0xf,(int3)sVar84) * CONCAT13(sVar84 >> 0xf,(int3)sVar84) +
                       (int)(short)(char)uVar98 * (int)(short)(char)uVar98 + iVar91 * iVar91;
              iVar86 = iVar86 + iVar103 * iVar103 +
                       CONCAT13(sVar85 >> 0xf,(int3)sVar85) * CONCAT13(sVar85 >> 0xf,(int3)sVar85) +
                       iVar100 * iVar100 + iVar95 * iVar95;
              iVar88 = iVar88 + iVar104 * iVar104 +
                       CONCAT13(sVar87 >> 0xf,(int3)sVar87) * CONCAT13(sVar87 >> 0xf,(int3)sVar87) +
                       iVar101 * iVar101 + iVar97 * iVar97;
              iVar89 = iVar89 + iVar106 * iVar106 +
                       CONCAT13(sVar90 >> 0xf,(int3)sVar90) * CONCAT13(sVar90 >> 0xf,(int3)sVar90) +
                       iVar102 * iVar102 + iVar99 * iVar99;
              pcVar67 = pcVar67 + 0x10;
            } while (uVar75 < uVar73);
            uVar71 = uVar71 + iVar108;
            iVar70 = iVar70 + iVar83 + iVar86 + iVar88 + iVar89;
            if (param_5 - uVar68 == iVar108) goto LAB_0039a2a4;
          }
          iVar70 = iVar70 + (int)param_1[(int)uVar71] * (int)param_1[(int)uVar71];
          if ((int)(uVar71 + 1) < (int)param_5) {
            iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 1)] * (int)param_1[(int)(uVar71 + 1)];
            if ((int)(uVar71 + 2) < (int)param_5) {
              iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 2)] * (int)param_1[(int)(uVar71 + 2)];
              if ((int)(uVar71 + 3) < (int)param_5) {
                iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 3)] * (int)param_1[(int)(uVar71 + 3)];
                if ((int)(uVar71 + 4) < (int)param_5) {
                  iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 4)] *
                                    (int)param_1[(int)(uVar71 + 4)];
                  if ((int)(uVar71 + 5) < (int)param_5) {
                    iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 5)] *
                                      (int)param_1[(int)(uVar71 + 5)];
                    if ((int)(uVar71 + 6) < (int)param_5) {
                      iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 6)] *
                                        (int)param_1[(int)(uVar71 + 6)];
                      if ((int)(uVar71 + 7) < (int)param_5) {
                        iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 7)] *
                                          (int)param_1[(int)(uVar71 + 7)];
                        if ((int)(uVar71 + 8) < (int)param_5) {
                          iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 8)] *
                                            (int)param_1[(int)(uVar71 + 8)];
                          if ((int)(uVar71 + 9) < (int)param_5) {
                            iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 9)] *
                                              (int)param_1[(int)(uVar71 + 9)];
                            if ((int)(uVar71 + 10) < (int)param_5) {
                              iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 10)] *
                                                (int)param_1[(int)(uVar71 + 10)];
                              if ((int)(uVar71 + 0xb) < (int)param_5) {
                                iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 0xb)] *
                                                  (int)param_1[(int)(uVar71 + 0xb)];
                                if ((int)(uVar71 + 0xc) < (int)param_5) {
                                  iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 0xc)] *
                                                    (int)param_1[(int)(uVar71 + 0xc)];
                                  if ((int)(uVar71 + 0xd) < (int)param_5) {
                                    iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 0xd)] *
                                                      (int)param_1[(int)(uVar71 + 0xd)];
                                    if ((int)(uVar71 + 0xe) < (int)param_5) {
                                      iVar70 = iVar70 + (int)param_1[(int)(uVar71 + 0xe)] *
                                                        (int)param_1[(int)(uVar71 + 0xe)];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039a2a4:
        lVar74 = lVar74 + 1;
        param_1 = param_1 + (int)param_5;
        uVar69 = uVar69 - param_5;
      } while ((int)lVar74 < param_4);
    }
    *param_3 = iVar70;
    return 0;
  }
  param_4 = param_4 * param_5;
  iVar108 = 0;
  iVar83 = iVar108;
  if (0 < param_4 + -3) {
    uVar69 = param_4 - 4U >> 2;
    iVar83 = uVar69 + 1;
    uVar69 = (uVar69 - 0xf >> 4) + 1;
    if (param_4 - 4U < 0x3c) {
      iVar86 = 0;
LAB_0039a418:
      pbVar72 = (byte *)(param_1 + iVar86);
      do {
        iVar86 = iVar86 + 4;
        iVar108 = iVar108 + (int)(char)pbVar72[1] * (int)(char)pbVar72[1] +
                            (uint)*pbVar72 * (uint)*pbVar72 + (uint)pbVar72[2] * (uint)pbVar72[2] +
                            (uint)pbVar72[3] * (uint)pbVar72[3];
        pbVar72 = pbVar72 + 4;
      } while (iVar86 < param_4 + -3);
    }
    else {
      iVar108 = 0;
      iVar86 = 0;
      iVar88 = 0;
      iVar89 = 0;
      uVar68 = 0;
      pcVar67 = param_1;
      do {
        cVar81 = *pcVar67;
        pcVar4 = pcVar67 + 1;
        pcVar5 = pcVar67 + 2;
        pcVar6 = pcVar67 + 3;
        pcVar7 = pcVar67 + 4;
        pcVar8 = pcVar67 + 5;
        pcVar9 = pcVar67 + 6;
        pcVar10 = pcVar67 + 7;
        pcVar11 = pcVar67 + 8;
        pcVar12 = pcVar67 + 9;
        pcVar13 = pcVar67 + 10;
        pcVar14 = pcVar67 + 0xb;
        pcVar15 = pcVar67 + 0xc;
        pcVar16 = pcVar67 + 0xd;
        pcVar17 = pcVar67 + 0xe;
        pcVar18 = pcVar67 + 0xf;
        pcVar19 = pcVar67 + 0x10;
        pcVar20 = pcVar67 + 0x11;
        pcVar21 = pcVar67 + 0x12;
        pcVar22 = pcVar67 + 0x13;
        pcVar23 = pcVar67 + 0x14;
        pcVar24 = pcVar67 + 0x15;
        pcVar25 = pcVar67 + 0x16;
        pcVar26 = pcVar67 + 0x17;
        pcVar27 = pcVar67 + 0x18;
        pcVar28 = pcVar67 + 0x19;
        pcVar29 = pcVar67 + 0x1a;
        pcVar30 = pcVar67 + 0x1b;
        pcVar31 = pcVar67 + 0x1c;
        pcVar32 = pcVar67 + 0x1d;
        pcVar33 = pcVar67 + 0x1e;
        pcVar34 = pcVar67 + 0x1f;
        pcVar35 = pcVar67 + 0x20;
        pcVar36 = pcVar67 + 0x21;
        pcVar37 = pcVar67 + 0x22;
        pcVar38 = pcVar67 + 0x23;
        pcVar39 = pcVar67 + 0x24;
        pcVar40 = pcVar67 + 0x25;
        pcVar41 = pcVar67 + 0x26;
        pcVar42 = pcVar67 + 0x27;
        pcVar43 = pcVar67 + 0x28;
        pcVar44 = pcVar67 + 0x29;
        pcVar45 = pcVar67 + 0x2a;
        pcVar46 = pcVar67 + 0x2b;
        pcVar47 = pcVar67 + 0x2c;
        pcVar48 = pcVar67 + 0x2d;
        pcVar49 = pcVar67 + 0x2e;
        pcVar50 = pcVar67 + 0x2f;
        pcVar51 = pcVar67 + 0x30;
        pcVar52 = pcVar67 + 0x31;
        pcVar53 = pcVar67 + 0x32;
        pcVar54 = pcVar67 + 0x33;
        pcVar55 = pcVar67 + 0x34;
        pcVar56 = pcVar67 + 0x35;
        pcVar57 = pcVar67 + 0x36;
        pcVar58 = pcVar67 + 0x37;
        pcVar59 = pcVar67 + 0x38;
        pcVar60 = pcVar67 + 0x39;
        pcVar61 = pcVar67 + 0x3a;
        pcVar62 = pcVar67 + 0x3b;
        pcVar63 = pcVar67 + 0x3c;
        pcVar64 = pcVar67 + 0x3d;
        pcVar65 = pcVar67 + 0x3e;
        pcVar66 = pcVar67 + 0x3f;
        pcVar67 = pcVar67 + 0x40;
        uVar68 = uVar68 + 1;
        sVar90 = (short)*pcVar4;
        sVar93 = (short)*pcVar8;
        sVar94 = (short)*pcVar12;
        sVar96 = (short)*pcVar16;
        sVar82 = (short)*pcVar36;
        sVar84 = (short)*pcVar40;
        sVar85 = (short)*pcVar44;
        sVar87 = (short)*pcVar48;
        iVar108 = (int)(short)*pcVar52 * (int)(short)*pcVar52 +
                  (int)(short)*pcVar51 * (int)(short)*pcVar51 +
                  (int)(short)*pcVar53 * (int)(short)*pcVar53 +
                  (int)(short)*pcVar54 * (int)(short)*pcVar54 +
                  CONCAT13(sVar82 >> 0xf,(int3)sVar82) * CONCAT13(sVar82 >> 0xf,(int3)sVar82) +
                  (int)(short)*pcVar35 * (int)(short)*pcVar35 +
                  (int)(short)*pcVar37 * (int)(short)*pcVar37 +
                  (int)(short)*pcVar38 * (int)(short)*pcVar38 +
                  (int)(short)*pcVar20 * (int)(short)*pcVar20 +
                  (int)(short)*pcVar19 * (int)(short)*pcVar19 +
                  (int)(short)*pcVar21 * (int)(short)*pcVar21 +
                  (int)(short)*pcVar22 * (int)(short)*pcVar22 +
                  CONCAT13(sVar90 >> 0xf,(int3)sVar90) * CONCAT13(sVar90 >> 0xf,(int3)sVar90) +
                  (int)(short)cVar81 * (int)(short)cVar81 +
                  (int)(short)*pcVar5 * (int)(short)*pcVar5 +
                  (int)(short)*pcVar6 * (int)(short)*pcVar6 + iVar108;
        iVar86 = (int)(short)*pcVar56 * (int)(short)*pcVar56 +
                 (int)(short)*pcVar55 * (int)(short)*pcVar55 +
                 (int)(short)*pcVar57 * (int)(short)*pcVar57 +
                 (int)(short)*pcVar58 * (int)(short)*pcVar58 +
                 CONCAT13(sVar84 >> 0xf,(int3)sVar84) * CONCAT13(sVar84 >> 0xf,(int3)sVar84) +
                 (int)(short)*pcVar39 * (int)(short)*pcVar39 +
                 (int)(short)*pcVar41 * (int)(short)*pcVar41 +
                 (int)(short)*pcVar42 * (int)(short)*pcVar42 +
                 (int)(short)*pcVar24 * (int)(short)*pcVar24 +
                 (int)(short)*pcVar23 * (int)(short)*pcVar23 +
                 (int)(short)*pcVar25 * (int)(short)*pcVar25 +
                 (int)(short)*pcVar26 * (int)(short)*pcVar26 +
                 CONCAT13(sVar93 >> 0xf,(int3)sVar93) * CONCAT13(sVar93 >> 0xf,(int3)sVar93) +
                 (int)(short)*pcVar7 * (int)(short)*pcVar7 +
                 (int)(short)*pcVar9 * (int)(short)*pcVar9 +
                 (int)(short)*pcVar10 * (int)(short)*pcVar10 + iVar86;
        iVar88 = (int)(short)*pcVar60 * (int)(short)*pcVar60 +
                 (int)(short)*pcVar59 * (int)(short)*pcVar59 +
                 (int)(short)*pcVar61 * (int)(short)*pcVar61 +
                 (int)(short)*pcVar62 * (int)(short)*pcVar62 +
                 CONCAT13(sVar85 >> 0xf,(int3)sVar85) * CONCAT13(sVar85 >> 0xf,(int3)sVar85) +
                 (int)(short)*pcVar43 * (int)(short)*pcVar43 +
                 (int)(short)*pcVar45 * (int)(short)*pcVar45 +
                 (int)(short)*pcVar46 * (int)(short)*pcVar46 +
                 (int)(short)*pcVar28 * (int)(short)*pcVar28 +
                 (int)(short)*pcVar27 * (int)(short)*pcVar27 +
                 (int)(short)*pcVar29 * (int)(short)*pcVar29 +
                 (int)(short)*pcVar30 * (int)(short)*pcVar30 +
                 CONCAT13(sVar94 >> 0xf,(int3)sVar94) * CONCAT13(sVar94 >> 0xf,(int3)sVar94) +
                 (int)(short)*pcVar11 * (int)(short)*pcVar11 +
                 (int)(short)*pcVar13 * (int)(short)*pcVar13 +
                 (int)(short)*pcVar14 * (int)(short)*pcVar14 + iVar88;
        iVar89 = (int)(short)*pcVar64 * (int)(short)*pcVar64 +
                 (int)(short)*pcVar63 * (int)(short)*pcVar63 +
                 (int)(short)*pcVar65 * (int)(short)*pcVar65 +
                 (int)(short)*pcVar66 * (int)(short)*pcVar66 +
                 CONCAT13(sVar87 >> 0xf,(int3)sVar87) * CONCAT13(sVar87 >> 0xf,(int3)sVar87) +
                 (int)(short)*pcVar47 * (int)(short)*pcVar47 +
                 (int)(short)*pcVar49 * (int)(short)*pcVar49 +
                 (int)(short)*pcVar50 * (int)(short)*pcVar50 +
                 (int)(short)*pcVar32 * (int)(short)*pcVar32 +
                 (int)(short)*pcVar31 * (int)(short)*pcVar31 +
                 (int)(short)*pcVar33 * (int)(short)*pcVar33 +
                 (int)(short)*pcVar34 * (int)(short)*pcVar34 +
                 CONCAT13(sVar96 >> 0xf,(int3)sVar96) * CONCAT13(sVar96 >> 0xf,(int3)sVar96) +
                 (int)(short)*pcVar15 * (int)(short)*pcVar15 +
                 (int)(short)*pcVar17 * (int)(short)*pcVar17 +
                 (int)(short)*pcVar18 * (int)(short)*pcVar18 + iVar89;
      } while (uVar68 < uVar69);
      iVar108 = iVar108 + iVar86 + iVar88 + iVar89;
      iVar86 = uVar69 * 0x40;
      if (iVar83 != uVar69 * 0x10) goto LAB_0039a418;
    }
    iVar83 = iVar83 * 4;
  }
  if (iVar83 < param_4) {
    uVar68 = param_4 - iVar83;
    uVar69 = -(int)(param_1 + iVar83) & 0xf;
    uVar1 = (ulong)uVar69;
    if (uVar68 < uVar69) {
      uVar1 = (ulong)uVar68;
    }
    if (uVar68 < 0x12) {
      uVar1 = (ulong)uVar68;
    }
    uVar69 = (uint)uVar1;
    iVar86 = iVar83;
    if (uVar69 != 0) {
      iVar86 = iVar83 + 1;
      iVar88 = (int)param_1[iVar83];
      iVar108 = iVar108 + iVar88 * iVar88;
      if (uVar69 != 1) {
        lVar74 = (long)iVar86;
        iVar86 = iVar83 + 2;
        iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
        if (uVar69 != 2) {
          lVar74 = (long)iVar86;
          iVar86 = iVar83 + 3;
          iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
          if (uVar69 != 3) {
            lVar74 = (long)iVar86;
            iVar86 = iVar83 + 4;
            iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
            if (uVar69 != 4) {
              lVar74 = (long)iVar86;
              iVar86 = iVar83 + 5;
              iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
              if (uVar69 != 5) {
                lVar74 = (long)iVar86;
                iVar86 = iVar83 + 6;
                iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                if (uVar69 != 6) {
                  lVar74 = (long)iVar86;
                  iVar86 = iVar83 + 7;
                  iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                  if (uVar69 != 7) {
                    lVar74 = (long)iVar86;
                    iVar86 = iVar83 + 8;
                    iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                    if (uVar69 != 8) {
                      lVar74 = (long)iVar86;
                      iVar86 = iVar83 + 9;
                      iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                      if (uVar69 != 9) {
                        lVar74 = (long)iVar86;
                        iVar86 = iVar83 + 10;
                        iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                        if (uVar69 != 10) {
                          lVar74 = (long)iVar86;
                          iVar86 = iVar83 + 0xb;
                          iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                          if (uVar69 != 0xb) {
                            lVar74 = (long)iVar86;
                            iVar86 = iVar83 + 0xc;
                            iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                            if (uVar69 != 0xc) {
                              lVar74 = (long)iVar86;
                              iVar86 = iVar83 + 0xd;
                              iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                              if (uVar69 != 0xd) {
                                lVar74 = (long)iVar86;
                                iVar86 = iVar83 + 0xe;
                                iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                                if (uVar69 != 0xe) {
                                  lVar74 = (long)iVar86;
                                  iVar86 = iVar83 + 0xf;
                                  iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                                  if (uVar69 != 0xf) {
                                    lVar74 = (long)iVar86;
                                    iVar86 = iVar83 + 0x10;
                                    iVar108 = iVar108 + (int)param_1[lVar74] * (int)param_1[lVar74];
                                    if (uVar69 == 0x11) {
                                      lVar74 = (long)iVar86;
                                      iVar86 = iVar83 + 0x11;
                                      iVar108 = iVar108 + (int)param_1[lVar74] *
                                                          (int)param_1[lVar74];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (uVar69 == uVar68) goto LAB_0039a77c;
    }
    uVar71 = ((uVar68 - uVar69) - 0x10 >> 4) + 1;
    iVar88 = uVar71 * 0x10;
    if (0xe < (uVar68 - 1) - uVar69) {
      iVar89 = 0;
      iVar91 = 0;
      iVar95 = 0;
      iVar97 = 0;
      uVar73 = 0;
      pcVar67 = param_1 + uVar1 + (long)iVar83;
      do {
        uVar98 = *(undefined8 *)(pcVar67 + 8);
        uVar92 = *(undefined8 *)pcVar67;
        uVar73 = uVar73 + 1;
        cVar81 = (char)((ulong)uVar92 >> 8);
        cVar76 = (char)((ulong)uVar92 >> 0x10);
        cVar77 = (char)((ulong)uVar92 >> 0x18);
        cVar78 = (char)((ulong)uVar92 >> 0x28);
        cVar79 = (char)((ulong)uVar92 >> 0x30);
        cVar80 = (char)((ulong)uVar92 >> 0x38);
        sVar82 = (short)(char)uVar92;
        uVar2 = CONCAT13(cVar81 >> 7,CONCAT12(cVar81,sVar82));
        uVar3 = CONCAT15(cVar76 >> 7,CONCAT14(cVar76,uVar2));
        iVar106 = (int)(short)((uint)uVar2 >> 0x10);
        iVar105 = (int)(short)((uint6)uVar3 >> 0x20);
        iVar107 = (int)(short)(CONCAT17(cVar77 >> 7,CONCAT16(cVar77,uVar3)) >> 0x30);
        sVar84 = (short)(char)((ulong)uVar92 >> 0x20);
        uVar2 = CONCAT13(cVar78 >> 7,CONCAT12(cVar78,sVar84));
        uVar3 = CONCAT15(cVar79 >> 7,CONCAT14(cVar79,uVar2));
        sVar85 = (short)((uint)uVar2 >> 0x10);
        sVar87 = (short)((uint6)uVar3 >> 0x20);
        sVar90 = (short)(CONCAT17(cVar80 >> 7,CONCAT16(cVar80,uVar3)) >> 0x30);
        iVar102 = (int)(short)(char)((ulong)uVar98 >> 8);
        iVar103 = (int)(short)(char)((ulong)uVar98 >> 0x10);
        iVar104 = (int)(short)(char)((ulong)uVar98 >> 0x18);
        iVar83 = (int)(short)(char)((ulong)uVar98 >> 0x20);
        iVar99 = (int)(short)(char)((ulong)uVar98 >> 0x28);
        iVar100 = (int)(short)(char)((ulong)uVar98 >> 0x30);
        iVar101 = (int)(short)(char)((ulong)uVar98 >> 0x38);
        iVar89 = iVar89 + (int)sVar82 * (int)sVar82 +
                 CONCAT13(sVar84 >> 0xf,(int3)sVar84) * CONCAT13(sVar84 >> 0xf,(int3)sVar84) +
                 (int)(short)(char)uVar98 * (int)(short)(char)uVar98 + iVar83 * iVar83;
        iVar91 = iVar91 + iVar106 * iVar106 +
                 CONCAT13(sVar85 >> 0xf,(int3)sVar85) * CONCAT13(sVar85 >> 0xf,(int3)sVar85) +
                 iVar102 * iVar102 + iVar99 * iVar99;
        iVar95 = iVar95 + iVar105 * iVar105 +
                 CONCAT13(sVar87 >> 0xf,(int3)sVar87) * CONCAT13(sVar87 >> 0xf,(int3)sVar87) +
                 iVar103 * iVar103 + iVar100 * iVar100;
        iVar97 = iVar97 + iVar107 * iVar107 +
                 CONCAT13(sVar90 >> 0xf,(int3)sVar90) * CONCAT13(sVar90 >> 0xf,(int3)sVar90) +
                 iVar104 * iVar104 + iVar101 * iVar101;
        pcVar67 = pcVar67 + 0x10;
      } while (uVar73 < uVar71);
      iVar86 = iVar86 + iVar88;
      iVar108 = iVar108 + iVar89 + iVar91 + iVar95 + iVar97;
      if (iVar88 == uVar68 - uVar69) goto LAB_0039a77c;
    }
    iVar108 = iVar108 + (int)param_1[iVar86] * (int)param_1[iVar86];
    if (iVar86 + 1 < param_4) {
      iVar108 = iVar108 + (int)param_1[iVar86 + 1] * (int)param_1[iVar86 + 1];
      if (iVar86 + 2 < param_4) {
        iVar108 = iVar108 + (int)param_1[iVar86 + 2] * (int)param_1[iVar86 + 2];
        if (iVar86 + 3 < param_4) {
          iVar108 = iVar108 + (int)param_1[iVar86 + 3] * (int)param_1[iVar86 + 3];
          if (iVar86 + 4 < param_4) {
            iVar108 = iVar108 + (int)param_1[iVar86 + 4] * (int)param_1[iVar86 + 4];
            if (iVar86 + 5 < param_4) {
              iVar108 = iVar108 + (int)param_1[iVar86 + 5] * (int)param_1[iVar86 + 5];
              if (iVar86 + 6 < param_4) {
                iVar108 = iVar108 + (int)param_1[iVar86 + 6] * (int)param_1[iVar86 + 6];
                if (iVar86 + 7 < param_4) {
                  iVar108 = iVar108 + (int)param_1[iVar86 + 7] * (int)param_1[iVar86 + 7];
                  if (iVar86 + 8 < param_4) {
                    iVar108 = iVar108 + (int)param_1[iVar86 + 8] * (int)param_1[iVar86 + 8];
                    if (iVar86 + 9 < param_4) {
                      iVar108 = iVar108 + (int)param_1[iVar86 + 9] * (int)param_1[iVar86 + 9];
                      if (iVar86 + 10 < param_4) {
                        iVar108 = iVar108 + (int)param_1[iVar86 + 10] * (int)param_1[iVar86 + 10];
                        if (iVar86 + 0xb < param_4) {
                          iVar108 = iVar108 + (int)param_1[iVar86 + 0xb] *
                                              (int)param_1[iVar86 + 0xb];
                          if (iVar86 + 0xc < param_4) {
                            iVar108 = iVar108 + (int)param_1[iVar86 + 0xc] *
                                                (int)param_1[iVar86 + 0xc];
                            if (iVar86 + 0xd < param_4) {
                              iVar108 = iVar108 + (int)param_1[iVar86 + 0xd] *
                                                  (int)param_1[iVar86 + 0xd];
                              if (iVar86 + 0xe < param_4) {
                                iVar108 = iVar108 + (int)param_1[iVar86 + 0xe] *
                                                    (int)param_1[iVar86 + 0xe];
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0039a77c:
  *param_3 = iVar70 + iVar108;
  return 0;
}


==================================================================

### FUNC 0039a7ac (2868 bytes) name=FUN_0039a7ac

undefined8
FUN_0039a7ac(char *param_1,char *param_2,long param_3,int *param_4,int param_5,uint param_6)

{
  ulong uVar1;
  short sVar2;
  undefined4 uVar3;
  undefined6 uVar4;
  char *pcVar5;
  char *pcVar69;
  uint uVar133;
  uint uVar134;
  int iVar135;
  uint uVar136;
  int iVar137;
  uint uVar138;
  long lVar139;
  byte *pbVar140;
  byte *pbVar141;
  uint uVar142;
  char cVar143;
  char cVar144;
  char cVar145;
  int iVar146;
  int iVar147;
  int iVar148;
  int iVar149;
  int iVar150;
  undefined8 uVar151;
  int iVar152;
  int iVar153;
  undefined8 uVar154;
  int iVar155;
  int iVar156;
  int iVar157;
  int iVar158;
  int iVar159;
  int iVar160;
  undefined8 uVar161;
  int iVar162;
  int iVar163;
  undefined8 uVar164;
  int iVar165;
  int iVar166;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char *pcVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  char *pcVar22;
  char *pcVar23;
  char *pcVar24;
  char *pcVar25;
  char *pcVar26;
  char *pcVar27;
  char *pcVar28;
  char *pcVar29;
  char *pcVar30;
  char *pcVar31;
  char *pcVar32;
  char *pcVar33;
  char *pcVar34;
  char *pcVar35;
  char *pcVar36;
  char *pcVar37;
  char *pcVar38;
  char *pcVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  char *pcVar43;
  char *pcVar44;
  char *pcVar45;
  char *pcVar46;
  char *pcVar47;
  char *pcVar48;
  char *pcVar49;
  char *pcVar50;
  char *pcVar51;
  char *pcVar52;
  char *pcVar53;
  char *pcVar54;
  char *pcVar55;
  char *pcVar56;
  char *pcVar57;
  char *pcVar58;
  char *pcVar59;
  char *pcVar60;
  char *pcVar61;
  char *pcVar62;
  char *pcVar63;
  char *pcVar64;
  char *pcVar65;
  char *pcVar66;
  char *pcVar67;
  char *pcVar68;
  char *pcVar70;
  char *pcVar71;
  char *pcVar72;
  char *pcVar73;
  char *pcVar74;
  char *pcVar75;
  char *pcVar76;
  char *pcVar77;
  char *pcVar78;
  char *pcVar79;
  char *pcVar80;
  char *pcVar81;
  char *pcVar82;
  char *pcVar83;
  char *pcVar84;
  char *pcVar85;
  char *pcVar86;
  char *pcVar87;
  char *pcVar88;
  char *pcVar89;
  char *pcVar90;
  char *pcVar91;
  char *pcVar92;
  char *pcVar93;
  char *pcVar94;
  char *pcVar95;
  char *pcVar96;
  char *pcVar97;
  char *pcVar98;
  char *pcVar99;
  char *pcVar100;
  char *pcVar101;
  char *pcVar102;
  char *pcVar103;
  char *pcVar104;
  char *pcVar105;
  char *pcVar106;
  char *pcVar107;
  char *pcVar108;
  char *pcVar109;
  char *pcVar110;
  char *pcVar111;
  char *pcVar112;
  char *pcVar113;
  char *pcVar114;
  char *pcVar115;
  char *pcVar116;
  char *pcVar117;
  char *pcVar118;
  char *pcVar119;
  char *pcVar120;
  char *pcVar121;
  char *pcVar122;
  char *pcVar123;
  char *pcVar124;
  char *pcVar125;
  char *pcVar126;
  char *pcVar127;
  char *pcVar128;
  char *pcVar129;
  char *pcVar130;
  char *pcVar131;
  char *pcVar132;
  
  iVar135 = *param_4;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar134 = -(int)param_1;
      lVar139 = 0;
      do {
        if ((*(char *)(param_3 + lVar139) != '\0') && (0 < (int)param_6)) {
          uVar133 = uVar134 & 0xf;
          if (param_6 < (uVar134 & 0xf)) {
            uVar133 = param_6;
          }
          if (param_6 < 0x11) {
            uVar133 = param_6;
          }
          uVar136 = uVar133;
          if (uVar133 != 0) {
            iVar135 = iVar135 + ((int)*param_1 - (int)*param_2) * ((int)*param_1 - (int)*param_2);
                    /* try { // try from 0039a83c to 0049a83f has its CatchHandler @ 0039a868 */
                    /* try { // try from 0039a844 to 0049a847 has its CatchHandler @ 00399530 */
                    /* catch() { ... } // from try @ 003995e0 with catch @ 0039a854 */
                    /* try { // try from 0039a864 to 0049a867 has its CatchHandler @ 00399530 */
                    /* catch() { ... } // from try @ 0039a83c with catch @ 0039a868 */
                    /* try { // try from 0039a878 to 0049a87b has its CatchHandler @ 00399530 */
                    /* catch() { ... } // from try @ 0039a8e8 with catch @ 0039a87c
                       catch() { ... } // from try @ 0039a92c with catch @ 0039a87c
                       catch() { ... } // from try @ 0039ab80 with catch @ 0039a87c
                       catch() { ... } // from try @ 0039abe8 with catch @ 0039a87c
                       catch() { ... } // from try @ 0039acdc with catch @ 0039a87c
                       catch() { ... } // from try @ 0039acf0 with catch @ 0039a87c
                       catch() { ... } // from try @ 0039ad10 with catch @ 0039a87c */
            if ((((uVar133 != 1) &&
                 (iVar135 = iVar135 + ((int)param_1[1] - (int)param_2[1]) *
                                      ((int)param_1[1] - (int)param_2[1]), uVar133 != 2)) &&
                (iVar135 = iVar135 + ((int)param_1[2] - (int)param_2[2]) *
                                     ((int)param_1[2] - (int)param_2[2]), uVar133 != 3)) &&
               (((iVar135 = iVar135 + ((int)param_1[3] - (int)param_2[3]) *
                                      ((int)param_1[3] - (int)param_2[3]), uVar133 != 4 &&
                 (iVar135 = iVar135 + ((int)param_1[4] - (int)param_2[4]) *
                                      ((int)param_1[4] - (int)param_2[4]), uVar133 != 5)) &&
                (iVar135 = iVar135 + ((int)param_1[5] - (int)param_2[5]) *
                                     ((int)param_1[5] - (int)param_2[5]), uVar133 != 6)))) {
              iVar135 = iVar135 + ((int)param_1[6] - (int)param_2[6]) *
                                  ((int)param_1[6] - (int)param_2[6]);
              if (uVar133 == 7) {
                uVar136 = 7;
              }
              else {
                iVar135 = iVar135 + ((int)param_1[7] - (int)param_2[7]) *
                                    ((int)param_1[7] - (int)param_2[7]);
                    /* try { // try from 0039a8e8 to 0049a8eb has its CatchHandler @ 0039a87c */
                    /* try { // try from 0039a924 to 0049a927 has its CatchHandler @ 0039ad00 */
                    /* try { // try from 0039a92c to 0049ab3f has its CatchHandler @ 0039a87c */
                if (((uVar133 != 8) &&
                    (iVar135 = iVar135 + ((int)param_1[8] - (int)param_2[8]) *
                                         ((int)param_1[8] - (int)param_2[8]), uVar133 != 9)) &&
                   (((iVar135 = iVar135 + ((int)param_1[9] - (int)param_2[9]) *
                                          ((int)param_1[9] - (int)param_2[9]), uVar133 != 10 &&
                     (((iVar135 = iVar135 + ((int)param_1[10] - (int)param_2[10]) *
                                            ((int)param_1[10] - (int)param_2[10]), uVar133 != 0xb &&
                       (iVar135 = iVar135 + ((int)param_1[0xb] - (int)param_2[0xb]) *
                                            ((int)param_1[0xb] - (int)param_2[0xb]), uVar133 != 0xc)
                       ) && (iVar135 = iVar135 + ((int)param_1[0xc] - (int)param_2[0xc]) *
                                                 ((int)param_1[0xc] - (int)param_2[0xc]),
                            uVar133 != 0xd)))) &&
                    (iVar135 = iVar135 + ((int)param_1[0xd] - (int)param_2[0xd]) *
                                         ((int)param_1[0xd] - (int)param_2[0xd]), uVar133 != 0xe))))
                {
                  iVar135 = iVar135 + ((int)param_1[0xe] - (int)param_2[0xe]) *
                                      ((int)param_1[0xe] - (int)param_2[0xe]);
                  if (uVar133 == 0x10) {
                    iVar135 = iVar135 + ((int)param_1[0xf] - (int)param_2[0xf]) *
                                        ((int)param_1[0xf] - (int)param_2[0xf]);
                  }
                  else {
                    uVar136 = 0xf;
                  }
                }
              }
            }
            if (param_6 == uVar133) goto LAB_0039abe4;
          }
          uVar138 = ((param_6 - uVar133) - 0x10 >> 4) + 1;
          iVar137 = uVar138 * 0x10;
          if (0xe < (param_6 - 1) - uVar133) {
            iVar146 = 0;
            iVar147 = 0;
            iVar148 = 0;
            iVar149 = 0;
            uVar142 = 0;
            pcVar132 = param_2 + uVar133;
            pcVar68 = param_1 + uVar133;
            do {
              uVar154 = *(undefined8 *)(pcVar68 + 8);
              uVar151 = *(undefined8 *)pcVar68;
              uVar142 = uVar142 + 1;
              uVar164 = *(undefined8 *)(pcVar132 + 8);
              uVar161 = *(undefined8 *)pcVar132;
              cVar144 = (char)((ulong)uVar154 >> 0x28);
              cVar145 = (char)((ulong)uVar154 >> 0x30);
              cVar143 = (char)((ulong)uVar154 >> 0x38);
              iVar166 = (int)(short)(char)uVar151 - (int)(short)(char)uVar161;
              iVar167 = (int)(short)(char)((ulong)uVar151 >> 8) -
                        (int)(short)(char)((ulong)uVar161 >> 8);
              iVar168 = (int)(short)(char)((ulong)uVar151 >> 0x10) -
                        (int)(short)(char)((ulong)uVar161 >> 0x10);
              iVar170 = (int)(short)(char)((ulong)uVar151 >> 0x18) -
                        (int)(short)(char)((ulong)uVar161 >> 0x18);
              iVar156 = (int)(short)(char)((ulong)uVar151 >> 0x20) -
                        (int)(short)(char)((ulong)uVar161 >> 0x20);
              iVar157 = (int)(short)(char)((ulong)uVar151 >> 0x28) -
                        (int)(short)(char)((ulong)uVar161 >> 0x28);
              iVar158 = (int)(short)(char)((ulong)uVar151 >> 0x30) -
                        (int)(short)(char)((ulong)uVar161 >> 0x30);
              iVar159 = (int)(short)(char)((ulong)uVar151 >> 0x38) -
                        (int)(short)(char)((ulong)uVar161 >> 0x38);
              iVar160 = (int)(short)(char)uVar154 - (int)(short)(char)uVar164;
              iVar162 = (int)(short)(char)((ulong)uVar154 >> 8) -
                        (int)(short)(char)((ulong)uVar164 >> 8);
              iVar163 = (int)(short)(char)((ulong)uVar154 >> 0x10) -
                        (int)(short)(char)((ulong)uVar164 >> 0x10);
              iVar165 = (int)(short)(char)((ulong)uVar154 >> 0x18) -
                        (int)(short)(char)((ulong)uVar164 >> 0x18);
              sVar2 = (short)(char)((ulong)uVar154 >> 0x20);
              uVar3 = CONCAT13(cVar144 >> 7,CONCAT12(cVar144,sVar2));
              uVar4 = CONCAT15(cVar145 >> 7,CONCAT14(cVar145,uVar3));
              iVar150 = (int)sVar2 - (int)(short)(char)((ulong)uVar164 >> 0x20);
              iVar152 = (int)(short)((uint)uVar3 >> 0x10) -
                        (int)(short)(char)((ulong)uVar164 >> 0x28);
              iVar153 = (int)(short)((uint6)uVar4 >> 0x20) -
                        (int)(short)(char)((ulong)uVar164 >> 0x30);
              iVar155 = (int)(short)(CONCAT17(cVar143 >> 7,CONCAT16(cVar143,uVar4)) >> 0x30) -
                        (int)(short)(char)((ulong)uVar164 >> 0x38);
              iVar146 = iVar146 + iVar166 * iVar166 + iVar156 * iVar156 + iVar160 * iVar160 +
                        iVar150 * iVar150;
              iVar147 = iVar147 + iVar167 * iVar167 + iVar157 * iVar157 + iVar162 * iVar162 +
                        iVar152 * iVar152;
              iVar148 = iVar148 + iVar168 * iVar168 + iVar158 * iVar158 + iVar163 * iVar163 +
                        iVar153 * iVar153;
              iVar149 = iVar149 + iVar170 * iVar170 + iVar159 * iVar159 + iVar165 * iVar165 +
                        iVar155 * iVar155;
              pcVar132 = pcVar132 + 0x10;
              pcVar68 = pcVar68 + 0x10;
            } while (uVar142 < uVar138);
            uVar136 = uVar136 + iVar137;
            iVar135 = iVar135 + iVar146 + iVar147 + iVar148 + iVar149;
            if (param_6 - uVar133 == iVar137) goto LAB_0039abe4;
          }
          iVar137 = uVar136 + 1;
          iVar135 = iVar135 + ((int)param_1[(int)uVar136] - (int)param_2[(int)uVar136]) *
                              ((int)param_1[(int)uVar136] - (int)param_2[(int)uVar136]);
          if (iVar137 < (int)param_6) {
            iVar146 = uVar136 + 2;
            iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                                ((int)param_1[iVar137] - (int)param_2[iVar137]);
            if (iVar146 < (int)param_6) {
              iVar137 = uVar136 + 3;
              iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]) *
                                  ((int)param_1[iVar146] - (int)param_2[iVar146]);
              if (iVar137 < (int)param_6) {
                iVar146 = uVar136 + 4;
                iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                                    ((int)param_1[iVar137] - (int)param_2[iVar137]);
                if (iVar146 < (int)param_6) {
                  iVar137 = uVar136 + 5;
                  iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]) *
                                      ((int)param_1[iVar146] - (int)param_2[iVar146]);
                  if (iVar137 < (int)param_6) {
                    iVar146 = uVar136 + 6;
                    iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                                        ((int)param_1[iVar137] - (int)param_2[iVar137]);
                    if (iVar146 < (int)param_6) {
                      iVar137 = uVar136 + 7;
                      iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]) *
                                          ((int)param_1[iVar146] - (int)param_2[iVar146]);
                      if (iVar137 < (int)param_6) {
                        iVar146 = uVar136 + 8;
                        iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                                            ((int)param_1[iVar137] - (int)param_2[iVar137]);
                        if (iVar146 < (int)param_6) {
                          iVar137 = uVar136 + 9;
                          iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]) *
                                              ((int)param_1[iVar146] - (int)param_2[iVar146]);
                          if (iVar137 < (int)param_6) {
                            iVar146 = uVar136 + 10;
                            iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                                                ((int)param_1[iVar137] - (int)param_2[iVar137]);
                            if (iVar146 < (int)param_6) {
                              iVar137 = uVar136 + 0xb;
                              iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]) *
                                                  ((int)param_1[iVar146] - (int)param_2[iVar146]);
                              if (iVar137 < (int)param_6) {
                                iVar146 = uVar136 + 0xc;
                    /* try { // try from 0039ab78 to 0049ab7b has its CatchHandler @ 0039ace0 */
                    /* try { // try from 0039ab80 to 0049ab9f has its CatchHandler @ 0039a87c */
                                iVar135 = iVar135 + ((int)param_1[iVar137] - (int)param_2[iVar137])
                                                    * ((int)param_1[iVar137] - (int)param_2[iVar137]
                                                      );
                                if (iVar146 < (int)param_6) {
                                  iVar137 = uVar136 + 0xd;
                                  iVar135 = iVar135 + ((int)param_1[iVar146] - (int)param_2[iVar146]
                                                      ) * ((int)param_1[iVar146] -
                                                          (int)param_2[iVar146]);
                                  if (iVar137 < (int)param_6) {
                                    iVar146 = uVar136 + 0xe;
                                    iVar135 = iVar135 + ((int)param_1[iVar137] -
                                                        (int)param_2[iVar137]) *
                                                        ((int)param_1[iVar137] -
                                                        (int)param_2[iVar137]);
                                    if (iVar146 < (int)param_6) {
                    /* try { // try from 0039abe0 to 0049abe3 has its CatchHandler @ 0039accc */
                                      iVar135 = iVar135 + ((int)param_1[iVar146] -
                                                          (int)param_2[iVar146]) *
                                                          ((int)param_1[iVar146] -
                                                          (int)param_2[iVar146]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039abe4:
        lVar139 = lVar139 + 1;
                    /* try { // try from 0039abe8 to 0049acb3 has its CatchHandler @ 0039a87c */
        param_1 = param_1 + (int)param_6;
        param_2 = param_2 + (int)param_6;
        uVar134 = uVar134 - param_6;
      } while ((int)lVar139 < param_5);
    }
    *param_4 = iVar135;
    return 0;
  }
  param_5 = param_5 * param_6;
  iVar146 = 0;
  iVar137 = iVar146;
  if (0 < param_5 + -3) {
    uVar134 = param_5 - 4U >> 2;
    iVar137 = uVar134 + 1;
    uVar134 = (uVar134 - 0xf >> 4) + 1;
    if (param_5 - 4U < 0x3c) {
      iVar147 = 0;
LAB_0039adb4:
      pbVar140 = (byte *)(param_2 + iVar147);
      pbVar141 = (byte *)(param_1 + iVar147);
      do {
        iVar147 = iVar147 + 4;
        iVar146 = iVar146 + ((int)(char)pbVar141[1] - (int)(char)pbVar140[1]) *
                            ((int)(char)pbVar141[1] - (int)(char)pbVar140[1]) +
                            ((uint)*pbVar141 - (uint)*pbVar140) *
                            ((uint)*pbVar141 - (uint)*pbVar140) +
                            ((uint)pbVar141[2] - (uint)pbVar140[2]) *
                            ((uint)pbVar141[2] - (uint)pbVar140[2]) +
                            ((uint)pbVar141[3] - (uint)pbVar140[3]) *
                            ((uint)pbVar141[3] - (uint)pbVar140[3]);
        pbVar140 = pbVar140 + 4;
        pbVar141 = pbVar141 + 4;
      } while (iVar147 < param_5 + -3);
    }
    else {
      iVar146 = 0;
      iVar147 = 0;
      iVar148 = 0;
      iVar149 = 0;
      uVar133 = 0;
      pcVar132 = param_2;
      pcVar68 = param_1;
      do {
        cVar144 = *pcVar68;
        pcVar5 = pcVar68 + 1;
        pcVar6 = pcVar68 + 2;
        pcVar7 = pcVar68 + 3;
        pcVar8 = pcVar68 + 4;
        pcVar9 = pcVar68 + 5;
        pcVar10 = pcVar68 + 6;
        pcVar11 = pcVar68 + 7;
        pcVar12 = pcVar68 + 8;
        pcVar13 = pcVar68 + 9;
        pcVar14 = pcVar68 + 10;
        pcVar15 = pcVar68 + 0xb;
        pcVar16 = pcVar68 + 0xc;
        pcVar17 = pcVar68 + 0xd;
        pcVar18 = pcVar68 + 0xe;
        pcVar19 = pcVar68 + 0xf;
        pcVar20 = pcVar68 + 0x10;
        pcVar21 = pcVar68 + 0x11;
        pcVar22 = pcVar68 + 0x12;
        pcVar23 = pcVar68 + 0x13;
        pcVar24 = pcVar68 + 0x14;
        pcVar25 = pcVar68 + 0x15;
        pcVar26 = pcVar68 + 0x16;
        pcVar27 = pcVar68 + 0x17;
        pcVar28 = pcVar68 + 0x18;
        pcVar29 = pcVar68 + 0x19;
        pcVar30 = pcVar68 + 0x1a;
        pcVar31 = pcVar68 + 0x1b;
        pcVar32 = pcVar68 + 0x1c;
        pcVar33 = pcVar68 + 0x1d;
        pcVar34 = pcVar68 + 0x1e;
        pcVar35 = pcVar68 + 0x1f;
        pcVar36 = pcVar68 + 0x20;
        pcVar37 = pcVar68 + 0x21;
        pcVar38 = pcVar68 + 0x22;
        pcVar39 = pcVar68 + 0x23;
        pcVar40 = pcVar68 + 0x24;
        pcVar41 = pcVar68 + 0x25;
        pcVar42 = pcVar68 + 0x26;
        pcVar43 = pcVar68 + 0x27;
        pcVar44 = pcVar68 + 0x28;
        pcVar45 = pcVar68 + 0x29;
        pcVar46 = pcVar68 + 0x2a;
        pcVar47 = pcVar68 + 0x2b;
        pcVar48 = pcVar68 + 0x2c;
        pcVar49 = pcVar68 + 0x2d;
        pcVar50 = pcVar68 + 0x2e;
        pcVar51 = pcVar68 + 0x2f;
        pcVar52 = pcVar68 + 0x30;
        pcVar53 = pcVar68 + 0x31;
        pcVar54 = pcVar68 + 0x32;
        pcVar55 = pcVar68 + 0x33;
        pcVar56 = pcVar68 + 0x34;
        pcVar57 = pcVar68 + 0x35;
        pcVar58 = pcVar68 + 0x36;
        pcVar59 = pcVar68 + 0x37;
        pcVar60 = pcVar68 + 0x38;
        pcVar61 = pcVar68 + 0x39;
        pcVar62 = pcVar68 + 0x3a;
        pcVar63 = pcVar68 + 0x3b;
        pcVar64 = pcVar68 + 0x3c;
        pcVar65 = pcVar68 + 0x3d;
        pcVar66 = pcVar68 + 0x3e;
        pcVar67 = pcVar68 + 0x3f;
        pcVar68 = pcVar68 + 0x40;
        uVar133 = uVar133 + 1;
        cVar145 = *pcVar132;
        pcVar69 = pcVar132 + 1;
        pcVar70 = pcVar132 + 2;
        pcVar71 = pcVar132 + 3;
        pcVar72 = pcVar132 + 4;
        pcVar73 = pcVar132 + 5;
        pcVar74 = pcVar132 + 6;
        pcVar75 = pcVar132 + 7;
        pcVar76 = pcVar132 + 8;
        pcVar77 = pcVar132 + 9;
        pcVar78 = pcVar132 + 10;
        pcVar79 = pcVar132 + 0xb;
        pcVar80 = pcVar132 + 0xc;
        pcVar81 = pcVar132 + 0xd;
        pcVar82 = pcVar132 + 0xe;
        pcVar83 = pcVar132 + 0xf;
        pcVar84 = pcVar132 + 0x10;
        pcVar85 = pcVar132 + 0x11;
        pcVar86 = pcVar132 + 0x12;
        pcVar87 = pcVar132 + 0x13;
        pcVar88 = pcVar132 + 0x14;
        pcVar89 = pcVar132 + 0x15;
        pcVar90 = pcVar132 + 0x16;
        pcVar91 = pcVar132 + 0x17;
        pcVar92 = pcVar132 + 0x18;
        pcVar93 = pcVar132 + 0x19;
        pcVar94 = pcVar132 + 0x1a;
        pcVar95 = pcVar132 + 0x1b;
        pcVar96 = pcVar132 + 0x1c;
        pcVar97 = pcVar132 + 0x1d;
        pcVar98 = pcVar132 + 0x1e;
        pcVar99 = pcVar132 + 0x1f;
        pcVar100 = pcVar132 + 0x20;
        pcVar101 = pcVar132 + 0x21;
        pcVar102 = pcVar132 + 0x22;
        pcVar103 = pcVar132 + 0x23;
        pcVar104 = pcVar132 + 0x24;
        pcVar105 = pcVar132 + 0x25;
        pcVar106 = pcVar132 + 0x26;
        pcVar107 = pcVar132 + 0x27;
        pcVar108 = pcVar132 + 0x28;
        pcVar109 = pcVar132 + 0x29;
        pcVar110 = pcVar132 + 0x2a;
        pcVar111 = pcVar132 + 0x2b;
        pcVar112 = pcVar132 + 0x2c;
        pcVar113 = pcVar132 + 0x2d;
        pcVar114 = pcVar132 + 0x2e;
        pcVar115 = pcVar132 + 0x2f;
        pcVar116 = pcVar132 + 0x30;
        pcVar117 = pcVar132 + 0x31;
        pcVar118 = pcVar132 + 0x32;
        pcVar119 = pcVar132 + 0x33;
        pcVar120 = pcVar132 + 0x34;
        pcVar121 = pcVar132 + 0x35;
        pcVar122 = pcVar132 + 0x36;
        pcVar123 = pcVar132 + 0x37;
        pcVar124 = pcVar132 + 0x38;
        pcVar125 = pcVar132 + 0x39;
        pcVar126 = pcVar132 + 0x3a;
        pcVar127 = pcVar132 + 0x3b;
        pcVar128 = pcVar132 + 0x3c;
        pcVar129 = pcVar132 + 0x3d;
        pcVar130 = pcVar132 + 0x3e;
        pcVar131 = pcVar132 + 0x3f;
        pcVar132 = pcVar132 + 0x40;
                    /* catch() { ... } // from try @ 0039abe0 with catch @ 0039accc */
                    /* try { // try from 0039acdc to 0049acdf has its CatchHandler @ 0039a87c */
                    /* catch() { ... } // from try @ 0039ab78 with catch @ 0039ace0 */
        uVar3 = CONCAT13(*pcVar25 >> 7,CONCAT12(*pcVar25,(short)*pcVar21));
        uVar4 = CONCAT15(*pcVar29 >> 7,CONCAT14(*pcVar29,uVar3));
        iVar150 = (int)(short)*pcVar21 - (int)(short)*pcVar85;
        iVar152 = (int)(short)((uint)uVar3 >> 0x10) - (int)(short)*pcVar89;
        iVar153 = (int)(short)((uint6)uVar4 >> 0x20) - (int)(short)*pcVar93;
        iVar155 = (int)(short)(CONCAT17(*pcVar33 >> 7,CONCAT16(*pcVar33,uVar4)) >> 0x30) -
                  (int)(short)*pcVar97;
                    /* try { // try from 0039acf0 to 0049acf3 has its CatchHandler @ 0039a87c */
        iVar150 = iVar150 * iVar150;
        iVar152 = iVar152 * iVar152;
        iVar153 = iVar153 * iVar153;
        iVar155 = iVar155 * iVar155;
                    /* catch() { ... } // from try @ 0039a924 with catch @ 0039ad00 */
                    /* try { // try from 0039ad10 to 0049ad13 has its CatchHandler @ 0039a87c */
        iVar146 = ((int)(short)*pcVar53 - (int)(short)*pcVar117) *
                  ((int)(short)*pcVar53 - (int)(short)*pcVar117) +
                  ((int)(short)*pcVar52 - (int)(short)*pcVar116) *
                  ((int)(short)*pcVar52 - (int)(short)*pcVar116) +
                  ((int)(short)*pcVar54 - (int)(short)*pcVar118) *
                  ((int)(short)*pcVar54 - (int)(short)*pcVar118) +
                  ((int)(short)*pcVar55 - (int)(short)*pcVar119) *
                  ((int)(short)*pcVar55 - (int)(short)*pcVar119) +
                  ((int)(short)*pcVar37 - (int)(short)*pcVar101) *
                  ((int)(short)*pcVar37 - (int)(short)*pcVar101) +
                  ((int)(short)*pcVar36 - (int)(short)*pcVar100) *
                  ((int)(short)*pcVar36 - (int)(short)*pcVar100) +
                  ((int)(short)*pcVar38 - (int)(short)*pcVar102) *
                  ((int)(short)*pcVar38 - (int)(short)*pcVar102) +
                  ((int)(short)*pcVar39 - (int)(short)*pcVar103) *
                  ((int)(short)*pcVar39 - (int)(short)*pcVar103) +
                  iVar150 + ((int)(short)*pcVar20 - (int)(short)*pcVar84) *
                            ((int)(short)*pcVar20 - (int)(short)*pcVar84) +
                  ((int)(short)*pcVar22 - (int)(short)*pcVar86) *
                  ((int)(short)*pcVar22 - (int)(short)*pcVar86) +
                  ((int)(short)*pcVar23 - (int)(short)*pcVar87) *
                  ((int)(short)*pcVar23 - (int)(short)*pcVar87) +
                  ((int)(short)*pcVar5 - (int)(short)*pcVar69) *
                  ((int)(short)*pcVar5 - (int)(short)*pcVar69) +
                  ((int)(short)cVar144 - (int)(short)cVar145) *
                  ((int)(short)cVar144 - (int)(short)cVar145) +
                  ((int)(short)*pcVar6 - (int)(short)*pcVar70) *
                  ((int)(short)*pcVar6 - (int)(short)*pcVar70) +
                  ((int)(short)*pcVar7 - (int)(short)*pcVar71) *
                  ((int)(short)*pcVar7 - (int)(short)*pcVar71) + iVar146;
        iVar147 = ((int)(short)*pcVar57 - (int)(short)*pcVar121) *
                  ((int)(short)*pcVar57 - (int)(short)*pcVar121) +
                  ((int)(short)*pcVar56 - (int)(short)*pcVar120) *
                  ((int)(short)*pcVar56 - (int)(short)*pcVar120) +
                  ((int)(short)*pcVar58 - (int)(short)*pcVar122) *
                  ((int)(short)*pcVar58 - (int)(short)*pcVar122) +
                  ((int)(short)*pcVar59 - (int)(short)*pcVar123) *
                  ((int)(short)*pcVar59 - (int)(short)*pcVar123) +
                  ((int)(short)*pcVar41 - (int)(short)*pcVar105) *
                  ((int)(short)*pcVar41 - (int)(short)*pcVar105) +
                  ((int)(short)*pcVar40 - (int)(short)*pcVar104) *
                  ((int)(short)*pcVar40 - (int)(short)*pcVar104) +
                  ((int)(short)*pcVar42 - (int)(short)*pcVar106) *
                  ((int)(short)*pcVar42 - (int)(short)*pcVar106) +
                  ((int)(short)*pcVar43 - (int)(short)*pcVar107) *
                  ((int)(short)*pcVar43 - (int)(short)*pcVar107) +
                  (int)(CONCAT17((char)((uint)iVar152 >> 0x18),
                                 CONCAT16((char)((uint)iVar152 >> 0x10),
                                          CONCAT15((char)((uint)iVar152 >> 8),
                                                   CONCAT14((char)iVar152,iVar150)))) >> 0x20) +
                  ((int)(short)*pcVar24 - (int)(short)*pcVar88) *
                  ((int)(short)*pcVar24 - (int)(short)*pcVar88) +
                  ((int)(short)*pcVar26 - (int)(short)*pcVar90) *
                  ((int)(short)*pcVar26 - (int)(short)*pcVar90) +
                  ((int)(short)*pcVar27 - (int)(short)*pcVar91) *
                  ((int)(short)*pcVar27 - (int)(short)*pcVar91) +
                  ((int)(short)*pcVar9 - (int)(short)*pcVar73) *
                  ((int)(short)*pcVar9 - (int)(short)*pcVar73) +
                  ((int)(short)*pcVar8 - (int)(short)*pcVar72) *
                  ((int)(short)*pcVar8 - (int)(short)*pcVar72) +
                  ((int)(short)*pcVar10 - (int)(short)*pcVar74) *
                  ((int)(short)*pcVar10 - (int)(short)*pcVar74) +
                  ((int)(short)*pcVar11 - (int)(short)*pcVar75) *
                  ((int)(short)*pcVar11 - (int)(short)*pcVar75) + iVar147;
        iVar148 = ((int)(short)*pcVar61 - (int)(short)*pcVar125) *
                  ((int)(short)*pcVar61 - (int)(short)*pcVar125) +
                  ((int)(short)*pcVar60 - (int)(short)*pcVar124) *
                  ((int)(short)*pcVar60 - (int)(short)*pcVar124) +
                  ((int)(short)*pcVar62 - (int)(short)*pcVar126) *
                  ((int)(short)*pcVar62 - (int)(short)*pcVar126) +
                  ((int)(short)*pcVar63 - (int)(short)*pcVar127) *
                  ((int)(short)*pcVar63 - (int)(short)*pcVar127) +
                  ((int)(short)*pcVar45 - (int)(short)*pcVar109) *
                  ((int)(short)*pcVar45 - (int)(short)*pcVar109) +
                  ((int)(short)*pcVar44 - (int)(short)*pcVar108) *
                  ((int)(short)*pcVar44 - (int)(short)*pcVar108) +
                  ((int)(short)*pcVar46 - (int)(short)*pcVar110) *
                  ((int)(short)*pcVar46 - (int)(short)*pcVar110) +
                  ((int)(short)*pcVar47 - (int)(short)*pcVar111) *
                  ((int)(short)*pcVar47 - (int)(short)*pcVar111) +
                  iVar153 + ((int)(short)*pcVar28 - (int)(short)*pcVar92) *
                            ((int)(short)*pcVar28 - (int)(short)*pcVar92) +
                  ((int)(short)*pcVar30 - (int)(short)*pcVar94) *
                  ((int)(short)*pcVar30 - (int)(short)*pcVar94) +
                  ((int)(short)*pcVar31 - (int)(short)*pcVar95) *
                  ((int)(short)*pcVar31 - (int)(short)*pcVar95) +
                  ((int)(short)*pcVar13 - (int)(short)*pcVar77) *
                  ((int)(short)*pcVar13 - (int)(short)*pcVar77) +
                  ((int)(short)*pcVar12 - (int)(short)*pcVar76) *
                  ((int)(short)*pcVar12 - (int)(short)*pcVar76) +
                  ((int)(short)*pcVar14 - (int)(short)*pcVar78) *
                  ((int)(short)*pcVar14 - (int)(short)*pcVar78) +
                  ((int)(short)*pcVar15 - (int)(short)*pcVar79) *
                  ((int)(short)*pcVar15 - (int)(short)*pcVar79) + iVar148;
        iVar149 = ((int)(short)*pcVar65 - (int)(short)*pcVar129) *
                  ((int)(short)*pcVar65 - (int)(short)*pcVar129) +
                  ((int)(short)*pcVar64 - (int)(short)*pcVar128) *
                  ((int)(short)*pcVar64 - (int)(short)*pcVar128) +
                  ((int)(short)*pcVar66 - (int)(short)*pcVar130) *
                  ((int)(short)*pcVar66 - (int)(short)*pcVar130) +
                  ((int)(short)*pcVar67 - (int)(short)*pcVar131) *
                  ((int)(short)*pcVar67 - (int)(short)*pcVar131) +
                  ((int)(short)*pcVar49 - (int)(short)*pcVar113) *
                  ((int)(short)*pcVar49 - (int)(short)*pcVar113) +
                  ((int)(short)*pcVar48 - (int)(short)*pcVar112) *
                  ((int)(short)*pcVar48 - (int)(short)*pcVar112) +
                  ((int)(short)*pcVar50 - (int)(short)*pcVar114) *
                  ((int)(short)*pcVar50 - (int)(short)*pcVar114) +
                  ((int)(short)*pcVar51 - (int)(short)*pcVar115) *
                  ((int)(short)*pcVar51 - (int)(short)*pcVar115) +
                  (int)(CONCAT17((char)((uint)iVar155 >> 0x18),
                                 CONCAT16((char)((uint)iVar155 >> 0x10),
                                          CONCAT15((char)((uint)iVar155 >> 8),
                                                   CONCAT14((char)iVar155,iVar153)))) >> 0x20) +
                  ((int)(short)*pcVar32 - (int)(short)*pcVar96) *
                  ((int)(short)*pcVar32 - (int)(short)*pcVar96) +
                  ((int)(short)*pcVar34 - (int)(short)*pcVar98) *
                  ((int)(short)*pcVar34 - (int)(short)*pcVar98) +
                  ((int)(short)*pcVar35 - (int)(short)*pcVar99) *
                  ((int)(short)*pcVar35 - (int)(short)*pcVar99) +
                  ((int)(short)*pcVar17 - (int)(short)*pcVar81) *
                  ((int)(short)*pcVar17 - (int)(short)*pcVar81) +
                  ((int)(short)*pcVar16 - (int)(short)*pcVar80) *
                  ((int)(short)*pcVar16 - (int)(short)*pcVar80) +
                  ((int)(short)*pcVar18 - (int)(short)*pcVar82) *
                  ((int)(short)*pcVar18 - (int)(short)*pcVar82) +
                  ((int)(short)*pcVar19 - (int)(short)*pcVar83) *
                  ((int)(short)*pcVar19 - (int)(short)*pcVar83) + iVar149;
      } while (uVar133 < uVar134);
      iVar146 = iVar146 + iVar147 + iVar148 + iVar149;
      iVar147 = uVar134 * 0x40;
      if (uVar134 * 0x10 != iVar137) goto LAB_0039adb4;
    }
                    /* catch() { ... } // from try @ 0039ae94 with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b244 with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b294 with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b3c4 with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b3dc with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b3f0 with catch @ 0039ae18
                       catch() { ... } // from try @ 0039b404 with catch @ 0039ae18 */
    iVar137 = iVar137 * 4;
  }
  if (iVar137 < param_5) {
    lVar139 = (long)iVar137;
    uVar133 = param_5 - iVar137;
    uVar134 = -(int)(param_1 + lVar139) & 0xf;
    uVar1 = (ulong)uVar134;
    if (uVar133 < uVar134) {
      uVar1 = (ulong)uVar133;
    }
    if (uVar133 < 0x11) {
      uVar1 = (ulong)uVar133;
    }
    uVar134 = (uint)uVar1;
    if (uVar134 != 0) {
      iVar147 = iVar137 + 1;
      iVar148 = (int)param_1[lVar139] - (int)param_2[lVar139];
      iVar146 = iVar146 + iVar148 * iVar148;
      if (uVar134 != 1) {
        iVar148 = iVar137 + 2;
        iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                            ((int)param_1[iVar147] - (int)param_2[iVar147]);
        iVar147 = iVar148;
        if (uVar134 != 2) {
          iVar147 = iVar137 + 3;
                    /* try { // try from 0039ae94 to 0049b21f has its CatchHandler @ 0039ae18 */
          iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                              ((int)param_1[iVar148] - (int)param_2[iVar148]);
          if (uVar134 != 3) {
            iVar148 = iVar137 + 4;
            iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                ((int)param_1[iVar147] - (int)param_2[iVar147]);
            iVar147 = iVar148;
            if (uVar134 != 4) {
              iVar147 = iVar137 + 5;
              iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                  ((int)param_1[iVar148] - (int)param_2[iVar148]);
              if (uVar134 != 5) {
                iVar148 = iVar137 + 6;
                iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                    ((int)param_1[iVar147] - (int)param_2[iVar147]);
                iVar147 = iVar148;
                if (uVar134 != 6) {
                  iVar147 = iVar137 + 7;
                  iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                      ((int)param_1[iVar148] - (int)param_2[iVar148]);
                  if (uVar134 != 7) {
                    iVar148 = iVar137 + 8;
                    iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                        ((int)param_1[iVar147] - (int)param_2[iVar147]);
                    iVar147 = iVar148;
                    if (uVar134 != 8) {
                      iVar147 = iVar137 + 9;
                      iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                          ((int)param_1[iVar148] - (int)param_2[iVar148]);
                      if (uVar134 != 9) {
                        iVar148 = iVar137 + 10;
                        iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                            ((int)param_1[iVar147] - (int)param_2[iVar147]);
                        iVar147 = iVar148;
                        if (uVar134 != 10) {
                          iVar147 = iVar137 + 0xb;
                          iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                              ((int)param_1[iVar148] - (int)param_2[iVar148]);
                          if (uVar134 != 0xb) {
                            iVar148 = iVar137 + 0xc;
                            iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                                ((int)param_1[iVar147] - (int)param_2[iVar147]);
                            iVar147 = iVar148;
                            if (uVar134 != 0xc) {
                              iVar147 = iVar137 + 0xd;
                              iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                                  ((int)param_1[iVar148] - (int)param_2[iVar148]);
                              if (uVar134 != 0xd) {
                                iVar148 = iVar137 + 0xe;
                                iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147])
                                                    * ((int)param_1[iVar147] - (int)param_2[iVar147]
                                                      );
                                iVar147 = iVar148;
                                if (uVar134 != 0xe) {
                                  iVar147 = iVar137 + 0xf;
                                  iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]
                                                      ) * ((int)param_1[iVar148] -
                                                          (int)param_2[iVar148]);
                                  if (uVar134 == 0x10) {
                                    iVar146 = iVar146 + ((int)param_1[iVar147] -
                                                        (int)param_2[iVar147]) *
                                                        ((int)param_1[iVar147] -
                                                        (int)param_2[iVar147]);
                                    iVar147 = iVar137 + 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar137 = iVar147;
      if (uVar134 == uVar133) goto LAB_0039b2b0;
    }
    uVar136 = ((uVar133 - uVar134) - 0x10 >> 4) + 1;
    iVar147 = uVar136 * 0x10;
    if (0xe < (uVar133 - 1) - uVar134) {
      iVar148 = 0;
      iVar149 = 0;
      iVar150 = 0;
      iVar152 = 0;
      uVar138 = 0;
      pcVar132 = param_1 + uVar1 + lVar139;
      pcVar68 = param_2 + uVar1 + lVar139;
      do {
        uVar154 = *(undefined8 *)(pcVar132 + 8);
        uVar151 = *(undefined8 *)pcVar132;
        uVar138 = uVar138 + 1;
        uVar164 = *(undefined8 *)(pcVar68 + 8);
        uVar161 = *(undefined8 *)pcVar68;
        cVar144 = (char)((ulong)uVar154 >> 0x28);
        cVar145 = (char)((ulong)uVar154 >> 0x30);
        cVar143 = (char)((ulong)uVar154 >> 0x38);
        iVar168 = (int)(short)(char)uVar151 - (int)(short)(char)uVar161;
        iVar170 = (int)(short)(char)((ulong)uVar151 >> 8) - (int)(short)(char)((ulong)uVar161 >> 8);
        iVar169 = (int)(short)(char)((ulong)uVar151 >> 0x10) -
                  (int)(short)(char)((ulong)uVar161 >> 0x10);
        iVar171 = (int)(short)(char)((ulong)uVar151 >> 0x18) -
                  (int)(short)(char)((ulong)uVar161 >> 0x18);
        iVar158 = (int)(short)(char)((ulong)uVar151 >> 0x20) -
                  (int)(short)(char)((ulong)uVar161 >> 0x20);
        iVar159 = (int)(short)(char)((ulong)uVar151 >> 0x28) -
                  (int)(short)(char)((ulong)uVar161 >> 0x28);
        iVar160 = (int)(short)(char)((ulong)uVar151 >> 0x30) -
                  (int)(short)(char)((ulong)uVar161 >> 0x30);
        iVar162 = (int)(short)(char)((ulong)uVar151 >> 0x38) -
                  (int)(short)(char)((ulong)uVar161 >> 0x38);
        iVar163 = (int)(short)(char)uVar154 - (int)(short)(char)uVar164;
        iVar165 = (int)(short)(char)((ulong)uVar154 >> 8) - (int)(short)(char)((ulong)uVar164 >> 8);
        iVar166 = (int)(short)(char)((ulong)uVar154 >> 0x10) -
                  (int)(short)(char)((ulong)uVar164 >> 0x10);
        iVar167 = (int)(short)(char)((ulong)uVar154 >> 0x18) -
                  (int)(short)(char)((ulong)uVar164 >> 0x18);
        sVar2 = (short)(char)((ulong)uVar154 >> 0x20);
        uVar3 = CONCAT13(cVar144 >> 7,CONCAT12(cVar144,sVar2));
        uVar4 = CONCAT15(cVar145 >> 7,CONCAT14(cVar145,uVar3));
        iVar153 = (int)sVar2 - (int)(short)(char)((ulong)uVar164 >> 0x20);
        iVar155 = (int)(short)((uint)uVar3 >> 0x10) - (int)(short)(char)((ulong)uVar164 >> 0x28);
        iVar156 = (int)(short)((uint6)uVar4 >> 0x20) - (int)(short)(char)((ulong)uVar164 >> 0x30);
        iVar157 = (int)(short)(CONCAT17(cVar143 >> 7,CONCAT16(cVar143,uVar4)) >> 0x30) -
                  (int)(short)(char)((ulong)uVar164 >> 0x38);
        iVar148 = iVar148 + iVar168 * iVar168 + iVar158 * iVar158 + iVar163 * iVar163 +
                  iVar153 * iVar153;
        iVar149 = iVar149 + iVar170 * iVar170 + iVar159 * iVar159 + iVar165 * iVar165 +
                  iVar155 * iVar155;
        iVar150 = iVar150 + iVar169 * iVar169 + iVar160 * iVar160 + iVar166 * iVar166 +
                  iVar156 * iVar156;
        iVar152 = iVar152 + iVar171 * iVar171 + iVar162 * iVar162 + iVar167 * iVar167 +
                  iVar157 * iVar157;
        pcVar132 = pcVar132 + 0x10;
        pcVar68 = pcVar68 + 0x10;
      } while (uVar138 < uVar136);
      iVar137 = iVar137 + iVar147;
      iVar146 = iVar146 + iVar148 + iVar149 + iVar150 + iVar152;
      if (iVar147 == uVar133 - uVar134) goto LAB_0039b2b0;
    }
    iVar147 = iVar137 + 1;
    iVar146 = iVar146 + ((int)param_1[iVar137] - (int)param_2[iVar137]) *
                        ((int)param_1[iVar137] - (int)param_2[iVar137]);
    if (iVar147 < param_5) {
      iVar148 = iVar137 + 2;
      iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                          ((int)param_1[iVar147] - (int)param_2[iVar147]);
      if (iVar148 < param_5) {
        iVar147 = iVar137 + 3;
        iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                            ((int)param_1[iVar148] - (int)param_2[iVar148]);
        if (iVar147 < param_5) {
          iVar148 = iVar137 + 4;
          iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                              ((int)param_1[iVar147] - (int)param_2[iVar147]);
          if (iVar148 < param_5) {
            iVar147 = iVar137 + 5;
            iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                ((int)param_1[iVar148] - (int)param_2[iVar148]);
            if (iVar147 < param_5) {
              iVar148 = iVar137 + 6;
              iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                  ((int)param_1[iVar147] - (int)param_2[iVar147]);
              if (iVar148 < param_5) {
                iVar147 = iVar137 + 7;
                iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                    ((int)param_1[iVar148] - (int)param_2[iVar148]);
                if (iVar147 < param_5) {
                  iVar148 = iVar137 + 8;
                  iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                      ((int)param_1[iVar147] - (int)param_2[iVar147]);
                  if (iVar148 < param_5) {
                    iVar147 = iVar137 + 9;
                    iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                        ((int)param_1[iVar148] - (int)param_2[iVar148]);
                    if (iVar147 < param_5) {
                      iVar148 = iVar137 + 10;
                      iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                          ((int)param_1[iVar147] - (int)param_2[iVar147]);
                      if (iVar148 < param_5) {
                        iVar147 = iVar137 + 0xb;
                        iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                            ((int)param_1[iVar148] - (int)param_2[iVar148]);
                        if (iVar147 < param_5) {
                          iVar148 = iVar137 + 0xc;
                    /* try { // try from 0039b23c to 0049b23f has its CatchHandler @ 0039b3e0 */
                    /* try { // try from 0039b244 to 0049b26f has its CatchHandler @ 0039ae18 */
                          iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                              ((int)param_1[iVar147] - (int)param_2[iVar147]);
                          if (iVar148 < param_5) {
                            iVar147 = iVar137 + 0xd;
                            iVar146 = iVar146 + ((int)param_1[iVar148] - (int)param_2[iVar148]) *
                                                ((int)param_1[iVar148] - (int)param_2[iVar148]);
                            if (iVar147 < param_5) {
                              iVar137 = iVar137 + 0xe;
                    /* try { // try from 0039b28c to 0049b28f has its CatchHandler @ 0039b3f4 */
                    /* try { // try from 0039b294 to 0049b39f has its CatchHandler @ 0039ae18 */
                              iVar146 = iVar146 + ((int)param_1[iVar147] - (int)param_2[iVar147]) *
                                                  ((int)param_1[iVar147] - (int)param_2[iVar147]);
                              if (iVar137 < param_5) {
                                iVar146 = iVar146 + ((int)param_1[iVar137] - (int)param_2[iVar137])
                                                    * ((int)param_1[iVar137] - (int)param_2[iVar137]
                                                      );
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LAB_0039b2b0:
  *param_4 = iVar135 + iVar146;
  return 0;
}


==================================================================

### FUNC 0039b2e0 (1764 bytes) name=FUN_0039b2e0

undefined8
FUN_0039b2e0(ushort *param_1,ushort *param_2,long param_3,int *param_4,int param_5,ulong param_6)

{
  undefined1 auVar1 [16];
  uint uVar2;
  uint uVar3;
  uint uVar4;
  ushort *puVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  long lVar9;
  ushort *puVar10;
  int iVar11;
  ulong uVar12;
  int iVar13;
  ulong uVar14;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined4 uVar18;
  undefined4 uVar19;
  undefined4 uVar20;
  undefined4 uVar21;
  int iVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined8 uVar25;
  undefined8 uVar26;
  
  iVar22 = *param_4;
  uVar3 = (uint)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar14 = -(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < (int)uVar3)) {
          uVar7 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
          if (uVar3 < uVar7) {
            uVar7 = uVar3;
          }
          if (uVar3 < 9) {
            uVar7 = uVar3;
          }
          if (uVar7 == 0) {
            uVar12 = 0;
          }
          else {
            uVar2 = (int)((uint)*param_1 - (uint)*param_2) >> 0x1f;
            iVar11 = ((uint)*param_1 - (uint)*param_2 ^ uVar2) - uVar2;
            if (iVar22 < iVar11) {
              iVar22 = iVar11;
            }
            if (uVar7 == 1) {
LAB_0039b648:
              uVar12 = (ulong)uVar7;
            }
            else {
              uVar2 = (int)((uint)param_1[1] - (uint)param_2[1]) >> 0x1f;
              iVar11 = ((uint)param_1[1] - (uint)param_2[1] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 2) goto LAB_0039b648;
              uVar2 = (int)((uint)param_1[2] - (uint)param_2[2]) >> 0x1f;
              iVar11 = ((uint)param_1[2] - (uint)param_2[2] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 3) goto LAB_0039b648;
                    /* try { // try from 0039b3bc to 0049b3bf has its CatchHandler @ 0039b3cc */
              uVar2 = (int)((uint)param_1[3] - (uint)param_2[3]) >> 0x1f;
              iVar11 = ((uint)param_1[3] - (uint)param_2[3] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
                    /* try { // try from 0039b3c4 to 0049b3c7 has its CatchHandler @ 0039ae18 */
              if (uVar7 == 4) goto LAB_0039b648;
                    /* catch() { ... } // from try @ 0039b3bc with catch @ 0039b3cc */
              uVar2 = (int)((uint)param_1[4] - (uint)param_2[4]) >> 0x1f;
                    /* try { // try from 0039b3dc to 0049b3df has its CatchHandler @ 0039ae18 */
                    /* catch() { ... } // from try @ 0039b23c with catch @ 0039b3e0 */
              iVar11 = ((uint)param_1[4] - (uint)param_2[4] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
                    /* try { // try from 0039b3f0 to 0049b3f3 has its CatchHandler @ 0039ae18 */
              if (uVar7 == 5) goto LAB_0039b648;
                    /* catch() { ... } // from try @ 0039b28c with catch @ 0039b3f4 */
              uVar2 = (int)((uint)param_1[5] - (uint)param_2[5]) >> 0x1f;
                    /* try { // try from 0039b404 to 0049b407 has its CatchHandler @ 0039ae18 */
                    /* catch() { ... } // from try @ 0039b458 with catch @ 0039b408
                       catch() { ... } // from try @ 0039b480 with catch @ 0039b408
                       catch() { ... } // from try @ 0039b4f0 with catch @ 0039b408
                       catch() { ... } // from try @ 0039b508 with catch @ 0039b408
                       catch() { ... } // from try @ 0039b51c with catch @ 0039b408 */
              iVar11 = ((uint)param_1[5] - (uint)param_2[5] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 6) goto LAB_0039b648;
              uVar2 = (int)((uint)param_1[6] - (uint)param_2[6]) >> 0x1f;
              iVar11 = ((uint)param_1[6] - (uint)param_2[6] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 8) {
                uVar12 = 8;
                uVar2 = (int)((uint)param_1[7] - (uint)param_2[7]) >> 0x1f;
                    /* try { // try from 0039b458 to 0049b45b has its CatchHandler @ 0039b408 */
                iVar11 = ((uint)param_1[7] - (uint)param_2[7] ^ uVar2) - uVar2;
                if (iVar22 < iVar11) {
                  iVar22 = iVar11;
                }
              }
              else {
                uVar12 = 7;
              }
            }
            if (uVar3 == uVar7) goto LAB_0039b628;
          }
                    /* try { // try from 0039b478 to 0049b47b has its CatchHandler @ 0039b50c */
                    /* try { // try from 0039b480 to 0049b4cb has its CatchHandler @ 0039b408 */
          uVar2 = ((uVar3 - uVar7) - 8 >> 3) + 1;
          iVar11 = uVar2 * 8;
          if (6 < (uVar3 - 1) - uVar7) {
            auVar23._4_4_ = iVar22;
            auVar23._0_4_ = iVar22;
            auVar23._8_4_ = iVar22;
            auVar23._12_4_ = iVar22;
            uVar4 = 0;
            puVar5 = param_2 + uVar7;
            puVar10 = param_1 + uVar7;
            do {
              uVar4 = uVar4 + 1;
              uVar26 = *(undefined8 *)(puVar5 + 4);
              uVar25 = *(undefined8 *)puVar5;
              uVar18 = MP_INT_ABS((uint)puVar10[4] - (uint)(ushort)uVar26);
              uVar19 = MP_INT_ABS((uint)puVar10[5] - (uint)(ushort)((ulong)uVar26 >> 0x10));
              uVar20 = MP_INT_ABS((uint)puVar10[6] - (uint)(ushort)((ulong)uVar26 >> 0x20));
              uVar21 = MP_INT_ABS((uint)puVar10[7] - (uint)(ushort)((ulong)uVar26 >> 0x30));
              auVar15._0_4_ = MP_INT_ABS((uint)*puVar10 - (uint)(ushort)uVar25);
              auVar15._4_4_ = MP_INT_ABS((uint)puVar10[1] - (uint)(ushort)((ulong)uVar25 >> 0x10));
              auVar15._8_4_ = MP_INT_ABS((uint)puVar10[2] - (uint)(ushort)((ulong)uVar25 >> 0x20));
              auVar15._12_4_ = MP_INT_ABS((uint)puVar10[3] - (uint)(ushort)((ulong)uVar25 >> 0x30));
              auVar16._4_4_ = uVar19;
              auVar16._0_4_ = uVar18;
              auVar16._8_4_ = uVar20;
              auVar16._12_4_ = uVar21;
              auVar16 = NEON_smax(auVar16,auVar15,4);
              auVar23 = NEON_smax(auVar23,auVar16,4);
              puVar5 = puVar5 + 8;
              puVar10 = puVar10 + 8;
            } while (uVar4 < uVar2);
            iVar22 = NEON_smaxv(auVar23,4);
            uVar12 = (ulong)(uint)((int)uVar12 + iVar11);
            if (uVar3 - uVar7 == iVar11) goto LAB_0039b628;
          }
          uVar6 = -(uVar12 >> 0x1f) & 0xfffffffe00000000 | uVar12 << 1;
          iVar11 = (int)uVar12;
                    /* try { // try from 0039b4e8 to 0049b4eb has its CatchHandler @ 0039b4f8 */
                    /* try { // try from 0039b4f0 to 0049b4f3 has its CatchHandler @ 0039b408 */
          uVar7 = (uint)*(ushort *)((long)param_1 + uVar6) -
                  (uint)*(ushort *)((long)param_2 + uVar6);
          uVar2 = (int)uVar7 >> 0x1f;
                    /* catch() { ... } // from try @ 0039b4e8 with catch @ 0039b4f8 */
          iVar13 = (uVar7 ^ uVar2) - uVar2;
                    /* try { // try from 0039b508 to 0049b50b has its CatchHandler @ 0039b408 */
          if (iVar22 < iVar13) {
            iVar22 = iVar13;
          }
                    /* catch() { ... } // from try @ 0039b478 with catch @ 0039b50c */
          if (iVar11 + 1 < (int)uVar3) {
                    /* try { // try from 0039b51c to 0049b51f has its CatchHandler @ 0039b408 */
                    /* catch() { ... } // from try @ 0039b5b4 with catch @ 0039b520
                       catch() { ... } // from try @ 0039b5dc with catch @ 0039b520
                       catch() { ... } // from try @ 0039b684 with catch @ 0039b520 */
            uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 2) -
                    (uint)*(ushort *)((long)param_2 + uVar6 + 2);
            uVar2 = (int)uVar7 >> 0x1f;
            iVar13 = (uVar7 ^ uVar2) - uVar2;
            if (iVar22 < iVar13) {
              iVar22 = iVar13;
            }
            if (iVar11 + 2 < (int)uVar3) {
              uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 4) -
                      (uint)*(ushort *)((long)param_2 + uVar6 + 4);
              uVar2 = (int)uVar7 >> 0x1f;
              iVar13 = (uVar7 ^ uVar2) - uVar2;
              if (iVar22 < iVar13) {
                iVar22 = iVar13;
              }
              if (iVar11 + 3 < (int)uVar3) {
                uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 6) -
                        (uint)*(ushort *)((long)param_2 + uVar6 + 6);
                uVar2 = (int)uVar7 >> 0x1f;
                iVar13 = (uVar7 ^ uVar2) - uVar2;
                if (iVar22 < iVar13) {
                  iVar22 = iVar13;
                }
                if (iVar11 + 4 < (int)uVar3) {
                    /* try { // try from 0039b5b4 to 0049b5b7 has its CatchHandler @ 0039b520 */
                  uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 8) -
                          (uint)*(ushort *)((long)param_2 + uVar6 + 8);
                  uVar2 = (int)uVar7 >> 0x1f;
                  iVar13 = (uVar7 ^ uVar2) - uVar2;
                  if (iVar22 < iVar13) {
                    iVar22 = iVar13;
                  }
                  if (iVar11 + 5 < (int)uVar3) {
                    /* try { // try from 0039b5d4 to 0049b5d7 has its CatchHandler @ 0039b674 */
                    /* try { // try from 0039b5dc to 0049b5f3 has its CatchHandler @ 0039b520 */
                    uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 10) -
                            (uint)*(ushort *)((long)param_2 + uVar6 + 10);
                    uVar2 = (int)uVar7 >> 0x1f;
                    iVar13 = (uVar7 ^ uVar2) - uVar2;
                    if (iVar22 < iVar13) {
                      iVar22 = iVar13;
                    }
                    if ((iVar11 + 6 < (int)uVar3) &&
                       (uVar7 = (uint)*(ushort *)((long)param_1 + uVar6 + 0xc) -
                                (uint)*(ushort *)((long)param_2 + uVar6 + 0xc),
                       uVar2 = (int)uVar7 >> 0x1f, iVar11 = (uVar7 ^ uVar2) - uVar2, iVar22 < iVar11
                       )) {
                      iVar22 = iVar11;
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039b628:
        lVar9 = lVar9 + 1;
        param_1 = (ushort *)((long)param_1 + uVar14);
        param_2 = (ushort *)((long)param_2 + uVar14);
      } while ((int)lVar9 < param_5);
    }
    *param_4 = iVar22;
    return 0;
  }
  uVar3 = param_5 * uVar3;
  iVar11 = 0;
  if ((int)uVar3 < 1) goto LAB_0039b98c;
                    /* catch() { ... } // from try @ 0039b5d4 with catch @ 0039b674 */
  uVar7 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  if (uVar3 < uVar7) {
    uVar7 = uVar3;
  }
  uVar14 = (ulong)uVar7;
                    /* try { // try from 0039b684 to 0049b687 has its CatchHandler @ 0039b520 */
  if ((int)uVar3 < 9) {
                    /* catch() { ... } // from try @ 0039b698 with catch @ 0039b688
                       catch() { ... } // from try @ 0039b71c with catch @ 0039b688
                       catch() { ... } // from try @ 0039b734 with catch @ 0039b688 */
    uVar14 = (ulong)uVar3;
LAB_0039b68c:
    uVar7 = (int)((uint)*param_1 - (uint)*param_2) >> 0x1f;
                    /* try { // try from 0039b698 to 0049b6f7 has its CatchHandler @ 0039b688 */
    iVar11 = ((uint)*param_1 - (uint)*param_2 ^ uVar7) - uVar7;
    if (iVar11 < 0) {
      iVar11 = 0;
    }
    uVar7 = (uint)uVar14;
    uVar12 = uVar14;
    if (uVar7 != 1) {
      uVar2 = (int)((uint)param_1[1] - (uint)param_2[1]) >> 0x1f;
      iVar13 = ((uint)param_1[1] - (uint)param_2[1] ^ uVar2) - uVar2;
      if (iVar11 < iVar13) {
        iVar11 = iVar13;
      }
      if (uVar7 != 2) {
        uVar2 = (int)((uint)param_1[2] - (uint)param_2[2]) >> 0x1f;
        iVar13 = ((uint)param_1[2] - (uint)param_2[2] ^ uVar2) - uVar2;
        if (iVar11 < iVar13) {
          iVar11 = iVar13;
        }
        if (uVar7 != 3) {
                    /* try { // try from 0039b71c to 0049b71f has its CatchHandler @ 0039b688 */
          uVar2 = (int)((uint)param_1[3] - (uint)param_2[3]) >> 0x1f;
                    /* try { // try from 0039b714 to 0049b717 has its CatchHandler @ 0039b724 */
          iVar13 = ((uint)param_1[3] - (uint)param_2[3] ^ uVar2) - uVar2;
          if (iVar11 < iVar13) {
            iVar11 = iVar13;
          }
                    /* catch() { ... } // from try @ 0039b714 with catch @ 0039b724 */
          if (uVar7 != 4) {
                    /* try { // try from 0039b734 to 0049b737 has its CatchHandler @ 0039b688 */
            uVar2 = (int)((uint)param_1[4] - (uint)param_2[4]) >> 0x1f;
            iVar13 = ((uint)param_1[4] - (uint)param_2[4] ^ uVar2) - uVar2;
            if (iVar11 < iVar13) {
              iVar11 = iVar13;
            }
            if (uVar7 != 5) {
                    /* catch() { ... } // from try @ 0039b7b4 with catch @ 0039b75c
                       catch() { ... } // from try @ 0039b82c with catch @ 0039b75c
                       catch() { ... } // from try @ 0039b844 with catch @ 0039b75c */
              uVar2 = (int)((uint)param_1[5] - (uint)param_2[5]) >> 0x1f;
              iVar13 = ((uint)param_1[5] - (uint)param_2[5] ^ uVar2) - uVar2;
              if (iVar11 < iVar13) {
                iVar11 = iVar13;
              }
              if (uVar7 != 6) {
                uVar2 = (int)((uint)param_1[6] - (uint)param_2[6]) >> 0x1f;
                iVar13 = ((uint)param_1[6] - (uint)param_2[6] ^ uVar2) - uVar2;
                if (iVar11 < iVar13) {
                  iVar11 = iVar13;
                }
                if (uVar7 == 8) {
                  uVar2 = (int)((uint)param_1[7] - (uint)param_2[7]) >> 0x1f;
                    /* try { // try from 0039b7b4 to 0049b807 has its CatchHandler @ 0039b75c */
                  iVar13 = ((uint)param_1[7] - (uint)param_2[7] ^ uVar2) - uVar2;
                  if (iVar11 < iVar13) {
                    iVar11 = iVar13;
                  }
                }
                else {
                  uVar12 = 7;
                }
              }
            }
          }
        }
      }
    }
    if (uVar3 == uVar7) goto LAB_0039b98c;
  }
  else {
                    /* try { // try from 0039b9ac to 0049b9af has its CatchHandler @ 0039b9e4 */
    uVar12 = 0;
    if (uVar7 != 0) goto LAB_0039b68c;
  }
  iVar8 = uVar3 - (int)uVar14;
  uVar7 = (iVar8 - 8U >> 3) + 1;
  iVar13 = uVar7 * 8;
  if (6 < (uVar3 - 1) - (int)uVar14) {
    auVar24._4_4_ = iVar11;
    auVar24._0_4_ = iVar11;
    auVar24._8_4_ = iVar11;
    auVar24._12_4_ = iVar11;
    uVar2 = 0;
    puVar5 = param_1 + uVar14;
    puVar10 = param_2 + uVar14;
    do {
      uVar2 = uVar2 + 1;
      uVar26 = *(undefined8 *)(puVar10 + 4);
      uVar25 = *(undefined8 *)puVar10;
      uVar18 = MP_INT_ABS((uint)puVar5[4] - (uint)(ushort)uVar26);
      uVar19 = MP_INT_ABS((uint)puVar5[5] - (uint)(ushort)((ulong)uVar26 >> 0x10));
      uVar20 = MP_INT_ABS((uint)puVar5[6] - (uint)(ushort)((ulong)uVar26 >> 0x20));
      uVar21 = MP_INT_ABS((uint)puVar5[7] - (uint)(ushort)((ulong)uVar26 >> 0x30));
                    /* try { // try from 0039b824 to 0049b827 has its CatchHandler @ 0039b834 */
      auVar17._0_4_ = MP_INT_ABS((uint)*puVar5 - (uint)(ushort)uVar25);
      auVar17._4_4_ = MP_INT_ABS((uint)puVar5[1] - (uint)(ushort)((ulong)uVar25 >> 0x10));
      auVar17._8_4_ = MP_INT_ABS((uint)puVar5[2] - (uint)(ushort)((ulong)uVar25 >> 0x20));
      auVar17._12_4_ = MP_INT_ABS((uint)puVar5[3] - (uint)(ushort)((ulong)uVar25 >> 0x30));
      auVar1._4_4_ = uVar19;
      auVar1._0_4_ = uVar18;
      auVar1._8_4_ = uVar20;
      auVar1._12_4_ = uVar21;
      auVar23 = NEON_smax(auVar1,auVar17,4);
                    /* try { // try from 0039b82c to 0049b82f has its CatchHandler @ 0039b75c */
      auVar24 = NEON_smax(auVar24,auVar23,4);
      puVar5 = puVar5 + 8;
      puVar10 = puVar10 + 8;
    } while (uVar2 < uVar7);
                    /* catch() { ... } // from try @ 0039b824 with catch @ 0039b834 */
    iVar11 = NEON_smaxv(auVar24,4);
    uVar12 = (ulong)(uint)((int)uVar12 + iVar13);
                    /* try { // try from 0039b844 to 0049b847 has its CatchHandler @ 0039b75c */
    if (iVar13 == iVar8) goto LAB_0039b98c;
  }
                    /* catch() { ... } // from try @ 0039b860 with catch @ 0039b848
                       catch() { ... } // from try @ 0039b8b8 with catch @ 0039b848
                       catch() { ... } // from try @ 0039b8ec with catch @ 0039b848 */
  uVar14 = -(uVar12 >> 0x1f) & 0xfffffffe00000000 | uVar12 << 1;
  iVar13 = (int)uVar12;
  uVar7 = (uint)*(ushort *)((long)param_1 + uVar14) - (uint)*(ushort *)((long)param_2 + uVar14);
  uVar2 = (int)uVar7 >> 0x1f;
                    /* try { // try from 0039b860 to 0049b893 has its CatchHandler @ 0039b848 */
  iVar8 = (uVar7 ^ uVar2) - uVar2;
  if (iVar11 < iVar8) {
    iVar11 = iVar8;
  }
  if (iVar13 + 1 < (int)uVar3) {
    uVar7 = (uint)*(ushort *)((long)param_1 + uVar14 + 2) -
            (uint)*(ushort *)((long)param_2 + uVar14 + 2);
    uVar2 = (int)uVar7 >> 0x1f;
    iVar8 = (uVar7 ^ uVar2) - uVar2;
    if (iVar11 < iVar8) {
      iVar11 = iVar8;
    }
    if (iVar13 + 2 < (int)uVar3) {
                    /* try { // try from 0039b8b0 to 0049b8b3 has its CatchHandler @ 0039b8dc */
                    /* try { // try from 0039b8b8 to 0049b8cb has its CatchHandler @ 0039b848 */
      uVar7 = (uint)*(ushort *)((long)param_1 + uVar14 + 4) -
              (uint)*(ushort *)((long)param_2 + uVar14 + 4);
      uVar2 = (int)uVar7 >> 0x1f;
      iVar8 = (uVar7 ^ uVar2) - uVar2;
      if (iVar11 < iVar8) {
        iVar11 = iVar8;
      }
      if (iVar13 + 3 < (int)uVar3) {
                    /* catch() { ... } // from try @ 0039b8b0 with catch @ 0039b8dc */
        uVar7 = (uint)*(ushort *)((long)param_1 + uVar14 + 6) -
                (uint)*(ushort *)((long)param_2 + uVar14 + 6);
        uVar2 = (int)uVar7 >> 0x1f;
                    /* try { // try from 0039b8ec to 0049b8ef has its CatchHandler @ 0039b848 */
                    /* catch() { ... } // from try @ 0039b98c with catch @ 0039b8f0
                       catch() { ... } // from try @ 0039b9b4 with catch @ 0039b8f0
                       catch() { ... } // from try @ 0039b9f4 with catch @ 0039b8f0 */
        iVar8 = (uVar7 ^ uVar2) - uVar2;
        if (iVar11 < iVar8) {
          iVar11 = iVar8;
        }
        if (iVar13 + 4 < (int)uVar3) {
          uVar7 = (uint)*(ushort *)((long)param_1 + uVar14 + 8) -
                  (uint)*(ushort *)((long)param_2 + uVar14 + 8);
          uVar2 = (int)uVar7 >> 0x1f;
          iVar8 = (uVar7 ^ uVar2) - uVar2;
          if (iVar11 < iVar8) {
            iVar11 = iVar8;
          }
          if (iVar13 + 5 < (int)uVar3) {
            uVar7 = (uint)*(ushort *)((long)param_1 + uVar14 + 10) -
                    (uint)*(ushort *)((long)param_2 + uVar14 + 10);
            uVar2 = (int)uVar7 >> 0x1f;
            iVar8 = (uVar7 ^ uVar2) - uVar2;
            if (iVar11 < iVar8) {
              iVar11 = iVar8;
            }
            if ((iVar13 + 6 < (int)uVar3) &&
               (uVar3 = (uint)*(ushort *)((long)param_1 + uVar14 + 0xc) -
                        (uint)*(ushort *)((long)param_2 + uVar14 + 0xc), uVar7 = (int)uVar3 >> 0x1f,
               iVar13 = (uVar3 ^ uVar7) - uVar7, iVar11 < iVar13)) {
              iVar11 = iVar13;
            }
          }
        }
      }
    }
  }
LAB_0039b98c:
                    /* try { // try from 0039b98c to 0049b98f has its CatchHandler @ 0039b8f0 */
  if (iVar22 < iVar11) {
    iVar22 = iVar11;
  }
  *param_4 = iVar22;
  return 0;
}


==================================================================

### FUNC 0039b9c4 name=FUN_0039b9c4 DECOMPILE FAILED

### FUNC 0039bff4 name=FUN_0039bff4 DECOMPILE FAILED

### FUNC 0039cb98 (292 bytes) name=FUN_0039cb98

undefined8 FUN_0039cb98(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  ushort uVar1;
  uint uVar2;
  ushort *puVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  ushort *puVar4;
  
  dVar8 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
                    /* try { // try from 0039cbac to 0049cbaf has its CatchHandler @ 0039cbbc */
      lVar7 = 0;
      do {
                    /* try { // try from 0039cbb4 to 0049cbb7 has its CatchHandler @ 0039cb0c */
                    /* catch() { ... } // from try @ 0039cbac with catch @ 0039cbbc */
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            uVar1 = *(ushort *)(param_1 + lVar6 * 2);
            lVar6 = lVar6 + 1;
                    /* try { // try from 0039cbcc to 0049cbcf has its CatchHandler @ 0039cb0c */
                    /* catch() { ... } // from try @ 0039cd70 with catch @ 0039cbd0
                       catch() { ... } // from try @ 0039ceec with catch @ 0039cbd0
                       catch() { ... } // from try @ 0039cf6c with catch @ 0039cbd0
                       catch() { ... } // from try @ 0039cfa0 with catch @ 0039cbd0
                       catch() { ... } // from try @ 0039cfb4 with catch @ 0039cbd0 */
            dVar8 = dVar8 + (double)uVar1 * (double)uVar1;
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                            (param_5 & 0xffffffff) << 1);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar8;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar9 = 0.0;
    iVar5 = 0;
  }
  else {
    dVar9 = 0.0;
    uVar2 = param_4 - 4U >> 2;
    puVar3 = (ushort *)(param_1 + 2);
    do {
      puVar4 = puVar3 + 4;
      dVar9 = dVar9 + (double)*puVar3 * (double)*puVar3 + (double)puVar3[-1] * (double)puVar3[-1] +
                      (double)puVar3[1] * (double)puVar3[1] + (double)puVar3[2] * (double)puVar3[2];
      puVar3 = puVar4;
    } while (puVar4 != (ushort *)(param_1 + (ulong)uVar2 * 8 + 10));
    iVar5 = (uVar2 + 1) * 4;
  }
  if (iVar5 < param_4) {
    puVar3 = (ushort *)(param_1 + (long)iVar5 * 2);
    do {
      puVar4 = puVar3 + 1;
      dVar9 = dVar9 + (double)*puVar3 * (double)*puVar3;
      puVar3 = puVar4;
    } while (puVar4 != (ushort *)
                       (param_1 + ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 2));
  }
  *param_3 = dVar8 + dVar9;
  return 0;
}


==================================================================

### FUNC 0039ccbc (356 bytes) name=FUN_0039ccbc

undefined8
FUN_0039ccbc(ushort *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  long lVar1;
  ushort *puVar2;
  uint uVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ushort *puVar7;
  long lVar8;
  ushort *puVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar5 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1;
      lVar8 = 0;
      do {
        if ((*(char *)(param_3 + lVar8) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            puVar7 = param_1 + lVar6;
            lVar1 = lVar6 * 2;
            lVar6 = lVar6 + 1;
            dVar11 = (double)(int)((uint)*puVar7 - (uint)*(ushort *)(param_2 + lVar1));
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar6 < iVar5);
        }
        lVar8 = lVar8 + 1;
        param_1 = (ushort *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar8 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar5;
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar11 = 0.0;
    uVar3 = param_5 - 4U >> 2;
    puVar7 = (ushort *)(param_2 + 2);
    puVar9 = param_1;
    do {
      puVar2 = puVar7 + 4;
                    /* try { // try from 0039cd70 to 0049ceab has its CatchHandler @ 0039cbd0 */
      dVar11 = dVar11 + (double)(int)((uint)puVar9[1] - (uint)*puVar7) *
                        (double)(int)((uint)puVar9[1] - (uint)*puVar7) +
                        (double)(int)((uint)*puVar9 - (uint)puVar7[-1]) *
                        (double)(int)((uint)*puVar9 - (uint)puVar7[-1]) +
                        (double)(int)((uint)puVar9[2] - (uint)puVar7[1]) *
                        (double)(int)((uint)puVar9[2] - (uint)puVar7[1]) +
                        (double)(int)((uint)puVar9[3] - (uint)puVar7[2]) *
                        (double)(int)((uint)puVar9[3] - (uint)puVar7[2]);
      puVar7 = puVar2;
      puVar9 = puVar9 + 4;
    } while (puVar2 != (ushort *)(param_2 + (ulong)uVar3 * 8 + 10));
    uVar10 = (ulong)((uVar3 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar4 = -(uVar10 >> 0x1f) & 0xfffffffe00000000 | uVar10 << 1;
    lVar8 = 0;
    do {
      lVar6 = lVar8 + uVar4;
      puVar7 = (ushort *)(param_2 + uVar4 + lVar8);
      lVar8 = lVar8 + 2;
      dVar12 = (double)(int)((uint)*(ushort *)((long)param_1 + lVar6) - (uint)*puVar7);
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar8 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 2);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 0039ce20 (1672 bytes) name=FUN_0039ce20

undefined8 FUN_0039ce20(short *param_1,long param_2,int *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  undefined1 auVar2 [16];
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  short *psVar7;
  ulong uVar8;
  uint uVar9;
  long lVar10;
  ulong uVar11;
  int iVar12;
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  int iVar24;
  undefined1 auVar25 [16];
  undefined1 auVar26 [16];
  
  iVar24 = *param_3;
  uVar4 = (uint)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar10 = 0;
      do {
        if ((*(char *)(param_2 + lVar10) != '\0') && (0 < (int)uVar4)) {
          uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
          if (uVar4 < uVar9) {
            uVar9 = uVar4;
          }
          if (uVar4 < 10) {
            uVar9 = uVar4;
          }
          if (uVar9 == 0) {
            uVar11 = 0;
          }
          else {
            if (iVar24 < (int)ABS((double)(int)*param_1)) {
              iVar24 = (int)ABS((double)(int)*param_1);
            }
            if (uVar9 == 1) {
LAB_0039d154:
              uVar11 = (ulong)uVar9;
            }
            else {
              if (iVar24 < (int)ABS((double)(int)param_1[1])) {
                iVar24 = (int)ABS((double)(int)param_1[1]);
              }
              if (uVar9 == 2) goto LAB_0039d154;
              if (iVar24 < (int)ABS((double)(int)param_1[2])) {
                iVar24 = (int)ABS((double)(int)param_1[2]);
              }
              if (uVar9 == 3) goto LAB_0039d154;
              if (iVar24 < (int)ABS((double)(int)param_1[3])) {
                iVar24 = (int)ABS((double)(int)param_1[3]);
              }
                    /* try { // try from 0039cee4 to 0049cee7 has its CatchHandler @ 0039cfa4 */
              if (uVar9 == 4) goto LAB_0039d154;
                    /* try { // try from 0039ceec to 0049cf4f has its CatchHandler @ 0039cbd0 */
              if (iVar24 < (int)ABS((double)(int)param_1[4])) {
                iVar24 = (int)ABS((double)(int)param_1[4]);
              }
              if (uVar9 == 5) goto LAB_0039d154;
              if (iVar24 < (int)ABS((double)(int)param_1[5])) {
                iVar24 = (int)ABS((double)(int)param_1[5]);
              }
              if (uVar9 == 6) goto LAB_0039d154;
              if (iVar24 < (int)ABS((double)(int)param_1[6])) {
                iVar24 = (int)ABS((double)(int)param_1[6]);
              }
              if (uVar9 == 7) {
                uVar11 = 7;
              }
              else {
                if (iVar24 < (int)ABS((double)(int)param_1[7])) {
                  iVar24 = (int)ABS((double)(int)param_1[7]);
                }
                    /* try { // try from 0039cf64 to 0049cf67 has its CatchHandler @ 0039cf90 */
                if (uVar9 == 9) {
                    /* try { // try from 0039cf6c to 0049cf6f has its CatchHandler @ 0039cbd0 */
                  uVar11 = 9;
                  if (iVar24 < (int)ABS((double)(int)param_1[8])) {
                    iVar24 = (int)ABS((double)(int)param_1[8]);
                  }
                }
                else {
                  uVar11 = 8;
                }
              }
            }
            if (uVar4 == uVar9) goto LAB_0039d138;
          }
                    /* catch() { ... } // from try @ 0039cf64 with catch @ 0039cf90 */
                    /* try { // try from 0039cfa0 to 0049cfa3 has its CatchHandler @ 0039cbd0 */
                    /* catch() { ... } // from try @ 0039cee4 with catch @ 0039cfa4 */
          uVar1 = ((uVar4 - uVar9) - 8 >> 3) + 1;
          iVar6 = uVar1 * 8;
          if (6 < (uVar4 - 1) - uVar9) {
            auVar25._4_4_ = iVar24;
            auVar25._0_4_ = iVar24;
            auVar25._8_4_ = iVar24;
            auVar25._12_4_ = iVar24;
                    /* try { // try from 0039cfb4 to 0049cfb7 has its CatchHandler @ 0039cbd0 */
            uVar5 = 0;
                    /* catch() { ... } // from try @ 0039d014 with catch @ 0039cfb8
                       catch() { ... } // from try @ 0039d060 with catch @ 0039cfb8
                       catch() { ... } // from try @ 0039d384 with catch @ 0039cfb8
                       catch() { ... } // from try @ 0039d39c with catch @ 0039cfb8
                       catch() { ... } // from try @ 0039d3b0 with catch @ 0039cfb8 */
            psVar7 = param_1 + uVar9;
            do {
              uVar5 = uVar5 + 1;
              auVar19._0_8_ = (long)(int)*psVar7;
              auVar19._8_8_ = (long)(int)psVar7[1];
              auVar21._0_8_ = (long)(int)psVar7[4];
              auVar21._8_8_ = (long)(int)psVar7[5];
              auVar23._0_8_ = (long)(int)psVar7[2];
              auVar23._8_8_ = (long)(int)psVar7[3];
              auVar13._0_8_ = (long)(int)psVar7[6];
              auVar13._8_8_ = (long)(int)psVar7[7];
              auVar19 = NEON_scvtf(auVar19,8);
              auVar21 = NEON_scvtf(auVar21,8);
              auVar15 = NEON_scvtf(auVar23,8);
              auVar13 = NEON_scvtf(auVar13,8);
                    /* try { // try from 0039d014 to 0049d017 has its CatchHandler @ 0039cfb8 */
              auVar16._4_4_ = (int)(long)ABS(auVar19._8_8_);
              auVar16._0_4_ = (int)(long)ABS(auVar19._0_8_);
              auVar16._8_4_ = (int)(long)ABS(auVar15._0_8_);
              auVar16._12_4_ = (int)(long)ABS(auVar15._8_8_);
              auVar15._4_4_ = (int)(long)ABS(auVar21._8_8_);
              auVar15._0_4_ = (int)(long)ABS(auVar21._0_8_);
              auVar15._8_4_ = (int)(long)ABS(auVar13._0_8_);
              auVar15._12_4_ = (int)(long)ABS(auVar13._8_8_);
              auVar15 = NEON_smax(auVar15,auVar16,4);
              auVar25 = NEON_smax(auVar25,auVar15,4);
              psVar7 = psVar7 + 8;
            } while (uVar5 < uVar1);
            iVar24 = NEON_smaxv(auVar25,4);
            uVar11 = (ulong)(uint)((int)uVar11 + iVar6);
            if (uVar4 - uVar9 == iVar6) goto LAB_0039d138;
          }
          uVar8 = -(uVar11 >> 0x1f) & 0xfffffffe00000000 | uVar11 << 1;
          iVar6 = (int)uVar11;
                    /* try { // try from 0039d058 to 0049d05b has its CatchHandler @ 0039d3a0 */
          if (iVar24 < (int)ABS((double)(int)*(short *)((long)param_1 + uVar8))) {
            iVar24 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8));
          }
                    /* try { // try from 0039d060 to 0049d343 has its CatchHandler @ 0039cfb8 */
          if (iVar6 + 1 < (int)uVar4) {
            iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 2));
            if (iVar24 < iVar12) {
              iVar24 = iVar12;
            }
            if (iVar6 + 2 < (int)uVar4) {
              iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 4));
              if (iVar24 < iVar12) {
                iVar24 = iVar12;
              }
              if (iVar6 + 3 < (int)uVar4) {
                iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 6));
                if (iVar24 < iVar12) {
                  iVar24 = iVar12;
                }
                if (iVar6 + 4 < (int)uVar4) {
                  iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 8));
                  if (iVar24 < iVar12) {
                    iVar24 = iVar12;
                  }
                  if (iVar6 + 5 < (int)uVar4) {
                    iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 10));
                    if (iVar24 < iVar12) {
                      iVar24 = iVar12;
                    }
                    if ((iVar6 + 6 < (int)uVar4) &&
                       (iVar6 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 0xc)),
                       iVar24 < iVar6)) {
                      iVar24 = iVar6;
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039d138:
        lVar10 = lVar10 + 1;
        param_1 = (short *)((long)param_1 +
                           (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                           (param_5 & 0xffffffff) << 1));
      } while ((int)lVar10 < param_4);
    }
    *param_3 = iVar24;
    return 0;
  }
  uVar4 = param_4 * uVar4;
  iVar6 = 0;
  if ((int)uVar4 < 1) goto LAB_0039d470;
  uVar9 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  if (uVar4 < uVar9) {
    uVar9 = uVar4;
  }
  uVar1 = uVar4;
  if (((int)uVar4 < 10) || (uVar11 = 0, uVar1 = uVar9, uVar9 != 0)) {
    uVar9 = uVar1;
    iVar6 = (int)ABS((double)(int)*param_1);
    if (iVar6 < 0) {
      iVar6 = 0;
    }
    if (uVar9 == 1) {
LAB_0039d484:
      uVar11 = (ulong)uVar9;
    }
    else {
      if (iVar6 < (int)ABS((double)(int)param_1[1])) {
        iVar6 = (int)ABS((double)(int)param_1[1]);
      }
      if (uVar9 == 2) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[2])) {
        iVar6 = (int)ABS((double)(int)param_1[2]);
      }
      if (uVar9 == 3) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[3])) {
        iVar6 = (int)ABS((double)(int)param_1[3]);
      }
      if (uVar9 == 4) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[4])) {
        iVar6 = (int)ABS((double)(int)param_1[4]);
      }
      if (uVar9 == 5) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[5])) {
        iVar6 = (int)ABS((double)(int)param_1[5]);
      }
      if (uVar9 == 6) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[6])) {
        iVar6 = (int)ABS((double)(int)param_1[6]);
      }
      if (uVar9 == 7) goto LAB_0039d484;
      if (iVar6 < (int)ABS((double)(int)param_1[7])) {
        iVar6 = (int)ABS((double)(int)param_1[7]);
      }
      if (uVar9 == 9) {
        uVar11 = 9;
        if (iVar6 < (int)ABS((double)(int)param_1[8])) {
          iVar6 = (int)ABS((double)(int)param_1[8]);
        }
      }
      else {
        uVar11 = 8;
      }
    }
    if (uVar4 == uVar9) goto LAB_0039d470;
  }
  uVar1 = ((uVar4 - uVar9) - 8 >> 3) + 1;
  iVar12 = uVar1 * 8;
  if (6 < (uVar4 - 1) - uVar9) {
    auVar26._4_4_ = iVar6;
    auVar26._0_4_ = iVar6;
    auVar26._8_4_ = iVar6;
    auVar26._12_4_ = iVar6;
    uVar5 = 0;
    psVar7 = param_1 + uVar9;
    do {
      uVar5 = uVar5 + 1;
      auVar20._0_8_ = (long)(int)*psVar7;
      auVar20._8_8_ = (long)(int)psVar7[1];
      auVar22._0_8_ = (long)(int)psVar7[4];
      auVar22._8_8_ = (long)(int)psVar7[5];
      auVar17._0_8_ = (long)(int)psVar7[2];
      auVar17._8_8_ = (long)(int)psVar7[3];
      auVar14._0_8_ = (long)(int)psVar7[6];
      auVar14._8_8_ = (long)(int)psVar7[7];
      auVar13 = NEON_scvtf(auVar20,8);
      auVar23 = NEON_scvtf(auVar22,8);
      auVar15 = NEON_scvtf(auVar17,8);
      auVar25 = NEON_scvtf(auVar14,8);
      auVar18._4_4_ = (int)(long)ABS(auVar13._8_8_);
      auVar18._0_4_ = (int)(long)ABS(auVar13._0_8_);
      auVar18._8_4_ = (int)(long)ABS(auVar15._0_8_);
      auVar18._12_4_ = (int)(long)ABS(auVar15._8_8_);
      auVar2._4_4_ = (int)(long)ABS(auVar23._8_8_);
      auVar2._0_4_ = (int)(long)ABS(auVar23._0_8_);
      auVar2._8_4_ = (int)(long)ABS(auVar25._0_8_);
      auVar2._12_4_ = (int)(long)ABS(auVar25._8_8_);
      auVar25 = NEON_smax(auVar2,auVar18,4);
      auVar26 = NEON_smax(auVar26,auVar25,4);
      psVar7 = psVar7 + 8;
    } while (uVar5 < uVar1);
    iVar6 = NEON_smaxv(auVar26,4);
    uVar11 = (ulong)(uint)((int)uVar11 + iVar12);
    if (iVar12 == uVar4 - uVar9) goto LAB_0039d470;
  }
  uVar8 = -(uVar11 >> 0x1f) & 0xfffffffe00000000 | uVar11 << 1;
  iVar12 = (int)uVar11;
                    /* try { // try from 0039d37c to 0049d37f has its CatchHandler @ 0039d38c */
                    /* try { // try from 0039d384 to 0049d387 has its CatchHandler @ 0039cfb8 */
                    /* catch() { ... } // from try @ 0039d37c with catch @ 0039d38c */
  if (iVar6 < (int)ABS((double)(int)*(short *)((long)param_1 + uVar8))) {
    iVar6 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8));
  }
                    /* try { // try from 0039d39c to 0049d39f has its CatchHandler @ 0039cfb8 */
  if (iVar12 + 1 < (int)uVar4) {
                    /* catch() { ... } // from try @ 0039d058 with catch @ 0039d3a0 */
                    /* try { // try from 0039d3b0 to 0049d3b3 has its CatchHandler @ 0039cfb8 */
                    /* catch() { ... } // from try @ 0039d420 with catch @ 0039d3b4
                       catch() { ... } // from try @ 0039d448 with catch @ 0039d3b4
                       catch() { ... } // from try @ 0039d460 with catch @ 0039d3b4 */
    iVar3 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 2));
    if (iVar6 < iVar3) {
      iVar6 = iVar3;
    }
    if (iVar12 + 2 < (int)uVar4) {
      iVar3 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 4));
      if (iVar6 < iVar3) {
        iVar6 = iVar3;
      }
      if (iVar12 + 3 < (int)uVar4) {
        iVar3 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 6));
        if (iVar6 < iVar3) {
          iVar6 = iVar3;
        }
        if (iVar12 + 4 < (int)uVar4) {
                    /* try { // try from 0039d420 to 0049d423 has its CatchHandler @ 0039d3b4 */
          iVar3 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 8));
          if (iVar6 < iVar3) {
            iVar6 = iVar3;
          }
          if (iVar12 + 5 < (int)uVar4) {
                    /* try { // try from 0039d440 to 0049d443 has its CatchHandler @ 0039d450 */
            iVar3 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 10));
                    /* try { // try from 0039d448 to 0049d44b has its CatchHandler @ 0039d3b4 */
            if (iVar6 < iVar3) {
              iVar6 = iVar3;
            }
                    /* catch() { ... } // from try @ 0039d440 with catch @ 0039d450 */
                    /* try { // try from 0039d460 to 0049d463 has its CatchHandler @ 0039d3b4 */
                    /* catch() { ... } // from try @ 0039d4e0 with catch @ 0039d464
                       catch() { ... } // from try @ 0039d508 with catch @ 0039d464
                       catch() { ... } // from try @ 0039d580 with catch @ 0039d464
                       catch() { ... } // from try @ 0039d5a8 with catch @ 0039d464
                       catch() { ... } // from try @ 0039d5bc with catch @ 0039d464 */
            if ((iVar12 + 6 < (int)uVar4) &&
               (iVar12 = (int)ABS((double)(int)*(short *)((long)param_1 + uVar8 + 0xc)),
               iVar6 < iVar12)) {
              iVar6 = iVar12;
            }
          }
        }
      }
    }
  }
LAB_0039d470:
  if (iVar24 < iVar6) {
    iVar24 = iVar6;
  }
  *param_3 = iVar24;
  return 0;
}


==================================================================

### FUNC 0039d4a8 (1764 bytes) name=FUN_0039d4a8

undefined8
FUN_0039d4a8(short *param_1,short *param_2,long param_3,int *param_4,int param_5,ulong param_6)

{
  undefined1 auVar1 [16];
  uint uVar2;
  uint uVar3;
  uint uVar4;
  short *psVar5;
  ulong uVar6;
  uint uVar7;
  int iVar8;
  long lVar9;
  short *psVar10;
  int iVar11;
  ulong uVar12;
  int iVar13;
  ulong uVar14;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  undefined4 uVar18;
  undefined4 uVar19;
  undefined4 uVar20;
  undefined4 uVar21;
  int iVar22;
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined8 uVar25;
  undefined8 uVar26;
  
  iVar22 = *param_4;
  uVar3 = (uint)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar14 = -(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < (int)uVar3)) {
          uVar7 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
                    /* try { // try from 0039d4e0 to 0049d4e3 has its CatchHandler @ 0039d464 */
          if (uVar3 < uVar7) {
            uVar7 = uVar3;
          }
          if (uVar3 < 9) {
            uVar7 = uVar3;
          }
          if (uVar7 == 0) {
            uVar12 = 0;
          }
          else {
            uVar2 = (int)*param_1 - (int)*param_2 >> 0x1f;
                    /* try { // try from 0039d500 to 0049d503 has its CatchHandler @ 0039d5ac */
                    /* try { // try from 0039d508 to 0049d527 has its CatchHandler @ 0039d464 */
            iVar11 = ((int)*param_1 - (int)*param_2 ^ uVar2) - uVar2;
            if (iVar22 < iVar11) {
              iVar22 = iVar11;
            }
            if (uVar7 == 1) {
LAB_0039d810:
              uVar12 = (ulong)uVar7;
            }
            else {
              uVar2 = (int)param_1[1] - (int)param_2[1] >> 0x1f;
              iVar11 = ((int)param_1[1] - (int)param_2[1] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 2) goto LAB_0039d810;
              uVar2 = (int)param_1[2] - (int)param_2[2] >> 0x1f;
              iVar11 = ((int)param_1[2] - (int)param_2[2] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 3) goto LAB_0039d810;
              uVar2 = (int)param_1[3] - (int)param_2[3] >> 0x1f;
                    /* try { // try from 0039d578 to 0049d57b has its CatchHandler @ 0039d598 */
                    /* try { // try from 0039d580 to 0049d583 has its CatchHandler @ 0039d464 */
              iVar11 = ((int)param_1[3] - (int)param_2[3] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 4) goto LAB_0039d810;
                    /* catch() { ... } // from try @ 0039d578 with catch @ 0039d598 */
                    /* catch() { ... } // from try @ 0039d500 with catch @ 0039d5ac */
              uVar2 = (int)param_1[4] - (int)param_2[4] >> 0x1f;
                    /* try { // try from 0039d5a8 to 0049d5ab has its CatchHandler @ 0039d464 */
              iVar11 = ((int)param_1[4] - (int)param_2[4] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 5) goto LAB_0039d810;
                    /* try { // try from 0039d5bc to 0049d5bf has its CatchHandler @ 0039d464 */
                    /* catch() { ... } // from try @ 0039d61c with catch @ 0039d5c0
                       catch() { ... } // from try @ 0039d644 with catch @ 0039d5c0
                       catch() { ... } // from try @ 0039d688 with catch @ 0039d5c0
                       catch() { ... } // from try @ 0039d6bc with catch @ 0039d5c0
                       catch() { ... } // from try @ 0039d6d0 with catch @ 0039d5c0 */
              uVar2 = (int)param_1[5] - (int)param_2[5] >> 0x1f;
              iVar11 = ((int)param_1[5] - (int)param_2[5] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 6) goto LAB_0039d810;
              uVar2 = (int)param_1[6] - (int)param_2[6] >> 0x1f;
              iVar11 = ((int)param_1[6] - (int)param_2[6] ^ uVar2) - uVar2;
              if (iVar22 < iVar11) {
                iVar22 = iVar11;
              }
              if (uVar7 == 8) {
                uVar12 = 8;
                uVar2 = (int)param_1[7] - (int)param_2[7] >> 0x1f;
                    /* try { // try from 0039d61c to 0049d61f has its CatchHandler @ 0039d5c0 */
                iVar11 = ((int)param_1[7] - (int)param_2[7] ^ uVar2) - uVar2;
                if (iVar22 < iVar11) {
                  iVar22 = iVar11;
                }
              }
              else {
                uVar12 = 7;
              }
            }
            if (uVar3 == uVar7) goto LAB_0039d7f0;
          }
                    /* try { // try from 0039d63c to 0049d63f has its CatchHandler @ 0039d6c0 */
                    /* try { // try from 0039d644 to 0049d663 has its CatchHandler @ 0039d5c0 */
          uVar2 = ((uVar3 - uVar7) - 8 >> 3) + 1;
          iVar11 = uVar2 * 8;
          if (6 < (uVar3 - 1) - uVar7) {
            auVar23._4_4_ = iVar22;
            auVar23._0_4_ = iVar22;
            auVar23._8_4_ = iVar22;
            auVar23._12_4_ = iVar22;
            uVar4 = 0;
            psVar5 = param_2 + uVar7;
            psVar10 = param_1 + uVar7;
            do {
              uVar4 = uVar4 + 1;
              uVar26 = *(undefined8 *)(psVar5 + 4);
              uVar25 = *(undefined8 *)psVar5;
                    /* try { // try from 0039d680 to 0049d683 has its CatchHandler @ 0039d6ac */
              uVar18 = MP_INT_ABS((int)psVar10[4] - (int)(short)uVar26);
              uVar19 = MP_INT_ABS((int)psVar10[5] - (int)(short)((ulong)uVar26 >> 0x10));
              uVar20 = MP_INT_ABS((int)psVar10[6] - (int)(short)((ulong)uVar26 >> 0x20));
              uVar21 = MP_INT_ABS((int)psVar10[7] - (int)(short)((ulong)uVar26 >> 0x30));
                    /* try { // try from 0039d688 to 0049d68b has its CatchHandler @ 0039d5c0 */
              auVar15._0_4_ = MP_INT_ABS((int)*psVar10 - (int)(short)uVar25);
              auVar15._4_4_ = MP_INT_ABS((int)psVar10[1] - (int)(short)((ulong)uVar25 >> 0x10));
              auVar15._8_4_ = MP_INT_ABS((int)psVar10[2] - (int)(short)((ulong)uVar25 >> 0x20));
              auVar15._12_4_ = MP_INT_ABS((int)psVar10[3] - (int)(short)((ulong)uVar25 >> 0x30));
              auVar16._4_4_ = uVar19;
              auVar16._0_4_ = uVar18;
              auVar16._8_4_ = uVar20;
              auVar16._12_4_ = uVar21;
              auVar16 = NEON_smax(auVar16,auVar15,4);
              auVar23 = NEON_smax(auVar23,auVar16,4);
              psVar5 = psVar5 + 8;
              psVar10 = psVar10 + 8;
            } while (uVar4 < uVar2);
            iVar22 = NEON_smaxv(auVar23,4);
            uVar12 = (ulong)(uint)((int)uVar12 + iVar11);
            if (uVar3 - uVar7 == iVar11) goto LAB_0039d7f0;
          }
                    /* catch() { ... } // from try @ 0039d680 with catch @ 0039d6ac */
          uVar6 = -(uVar12 >> 0x1f) & 0xfffffffe00000000 | uVar12 << 1;
          iVar11 = (int)uVar12;
                    /* try { // try from 0039d6bc to 0049d6bf has its CatchHandler @ 0039d5c0 */
          uVar7 = (int)*(short *)((long)param_1 + uVar6) - (int)*(short *)((long)param_2 + uVar6);
          uVar2 = (int)uVar7 >> 0x1f;
                    /* catch() { ... } // from try @ 0039d63c with catch @ 0039d6c0 */
          iVar13 = (uVar7 ^ uVar2) - uVar2;
                    /* try { // try from 0039d6d0 to 0049d6d3 has its CatchHandler @ 0039d5c0 */
          if (iVar22 < iVar13) {
            iVar22 = iVar13;
          }
                    /* catch() { ... } // from try @ 0039d7a0 with catch @ 0039d6d4
                       catch() { ... } // from try @ 0039d7ec with catch @ 0039d6d4
                       catch() { ... } // from try @ 0039d804 with catch @ 0039d6d4 */
          if (iVar11 + 1 < (int)uVar3) {
            uVar7 = (int)*(short *)((long)param_1 + uVar6 + 2) -
                    (int)*(short *)((long)param_2 + uVar6 + 2);
            uVar2 = (int)uVar7 >> 0x1f;
            iVar13 = (uVar7 ^ uVar2) - uVar2;
            if (iVar22 < iVar13) {
              iVar22 = iVar13;
            }
            if (iVar11 + 2 < (int)uVar3) {
              uVar7 = (int)*(short *)((long)param_1 + uVar6 + 4) -
                      (int)*(short *)((long)param_2 + uVar6 + 4);
              uVar2 = (int)uVar7 >> 0x1f;
              iVar13 = (uVar7 ^ uVar2) - uVar2;
              if (iVar22 < iVar13) {
                iVar22 = iVar13;
              }
              if (iVar11 + 3 < (int)uVar3) {
                uVar7 = (int)*(short *)((long)param_1 + uVar6 + 6) -
                        (int)*(short *)((long)param_2 + uVar6 + 6);
                uVar2 = (int)uVar7 >> 0x1f;
                iVar13 = (uVar7 ^ uVar2) - uVar2;
                if (iVar22 < iVar13) {
                  iVar22 = iVar13;
                }
                if (iVar11 + 4 < (int)uVar3) {
                  uVar7 = (int)*(short *)((long)param_1 + uVar6 + 8) -
                          (int)*(short *)((long)param_2 + uVar6 + 8);
                  uVar2 = (int)uVar7 >> 0x1f;
                  iVar13 = (uVar7 ^ uVar2) - uVar2;
                  if (iVar22 < iVar13) {
                    iVar22 = iVar13;
                  }
                  if (iVar11 + 5 < (int)uVar3) {
                    /* try { // try from 0039d7a0 to 0049d7a3 has its CatchHandler @ 0039d6d4 */
                    uVar7 = (int)*(short *)((long)param_1 + uVar6 + 10) -
                            (int)*(short *)((long)param_2 + uVar6 + 10);
                    uVar2 = (int)uVar7 >> 0x1f;
                    iVar13 = (uVar7 ^ uVar2) - uVar2;
                    if (iVar22 < iVar13) {
                      iVar22 = iVar13;
                    }
                    /* try { // try from 0039d7e4 to 0049d7e7 has its CatchHandler @ 0039d7f4 */
                    /* try { // try from 0039d7ec to 0049d7ef has its CatchHandler @ 0039d6d4 */
                    if ((iVar11 + 6 < (int)uVar3) &&
                       (uVar7 = (int)*(short *)((long)param_1 + uVar6 + 0xc) -
                                (int)*(short *)((long)param_2 + uVar6 + 0xc),
                       uVar2 = (int)uVar7 >> 0x1f, iVar11 = (uVar7 ^ uVar2) - uVar2, iVar22 < iVar11
                       )) {
                      iVar22 = iVar11;
                    }
                  }
                }
              }
            }
          }
        }
LAB_0039d7f0:
        lVar9 = lVar9 + 1;
                    /* catch() { ... } // from try @ 0039d7e4 with catch @ 0039d7f4 */
        param_1 = (short *)((long)param_1 + uVar14);
        param_2 = (short *)((long)param_2 + uVar14);
      } while ((int)lVar9 < param_5);
    }
                    /* try { // try from 0039d804 to 0049d807 has its CatchHandler @ 0039d6d4 */
    *param_4 = iVar22;
                    /* catch() { ... } // from try @ 0039d838 with catch @ 0039d808
                       catch() { ... } // from try @ 0039d8ec with catch @ 0039d808
                       catch() { ... } // from try @ 0039d904 with catch @ 0039d808 */
    return 0;
  }
  uVar3 = param_5 * uVar3;
  iVar11 = 0;
  if ((int)uVar3 < 1) goto LAB_0039db54;
                    /* try { // try from 0039d838 to 0049d8ab has its CatchHandler @ 0039d808 */
  uVar7 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
  if (uVar3 < uVar7) {
    uVar7 = uVar3;
  }
  uVar14 = (ulong)uVar7;
  if ((int)uVar3 < 9) {
    uVar14 = (ulong)uVar3;
LAB_0039d854:
    uVar7 = (int)*param_1 - (int)*param_2 >> 0x1f;
    iVar11 = ((int)*param_1 - (int)*param_2 ^ uVar7) - uVar7;
    if (iVar11 < 0) {
      iVar11 = 0;
    }
    uVar7 = (uint)uVar14;
    uVar12 = uVar14;
    if (uVar7 != 1) {
      uVar2 = (int)param_1[1] - (int)param_2[1] >> 0x1f;
      iVar13 = ((int)param_1[1] - (int)param_2[1] ^ uVar2) - uVar2;
      if (iVar11 < iVar13) {
        iVar11 = iVar13;
      }
      if (uVar7 != 2) {
        uVar2 = (int)param_1[2] - (int)param_2[2] >> 0x1f;
        iVar13 = ((int)param_1[2] - (int)param_2[2] ^ uVar2) - uVar2;
        if (iVar11 < iVar13) {
          iVar11 = iVar13;
        }
        if (uVar7 != 3) {
                    /* try { // try from 0039d8e4 to 0049d8e7 has its CatchHandler @ 0039d8f4 */
          uVar2 = (int)param_1[3] - (int)param_2[3] >> 0x1f;
          iVar13 = ((int)param_1[3] - (int)param_2[3] ^ uVar2) - uVar2;
          if (iVar11 < iVar13) {
            iVar11 = iVar13;
          }
                    /* try { // try from 0039d8ec to 0049d8ef has its CatchHandler @ 0039d808 */
          if (uVar7 != 4) {
                    /* catch() { ... } // from try @ 0039d8e4 with catch @ 0039d8f4 */
            uVar2 = (int)param_1[4] - (int)param_2[4] >> 0x1f;
                    /* try { // try from 0039d904 to 0049d907 has its CatchHandler @ 0039d808 */
                    /* catch() { ... } // from try @ 0039d9d0 with catch @ 0039d908
                       catch() { ... } // from try @ 0039d9f8 with catch @ 0039d908
                       catch() { ... } // from try @ 0039da10 with catch @ 0039d908 */
            iVar13 = ((int)param_1[4] - (int)param_2[4] ^ uVar2) - uVar2;
            if (iVar11 < iVar13) {
              iVar11 = iVar13;
            }
            if (uVar7 != 5) {
              uVar2 = (int)param_1[5] - (int)param_2[5] >> 0x1f;
              iVar13 = ((int)param_1[5] - (int)param_2[5] ^ uVar2) - uVar2;
              if (iVar11 < iVar13) {
                iVar11 = iVar13;
              }
              if (uVar7 != 6) {
                uVar2 = (int)param_1[6] - (int)param_2[6] >> 0x1f;
                iVar13 = ((int)param_1[6] - (int)param_2[6] ^ uVar2) - uVar2;
                if (iVar11 < iVar13) {
                  iVar11 = iVar13;
                }
                if (uVar7 == 8) {
                  uVar2 = (int)param_1[7] - (int)param_2[7] >> 0x1f;
                  iVar13 = ((int)param_1[7] - (int)param_2[7] ^ uVar2) - uVar2;
                  if (iVar11 < iVar13) {
                    iVar11 = iVar13;
                  }
                }
                else {
                  uVar12 = 7;
                }
              }
            }
          }
        }
      }
    }
    if (uVar3 == uVar7) goto LAB_0039db54;
  }
  else {
    uVar12 = 0;
    if (uVar7 != 0) goto LAB_0039d854;
  }
  iVar8 = uVar3 - (int)uVar14;
  uVar7 = (iVar8 - 8U >> 3) + 1;
  iVar13 = uVar7 * 8;
  if (6 < (uVar3 - 1) - (int)uVar14) {
    auVar24._4_4_ = iVar11;
    auVar24._0_4_ = iVar11;
    auVar24._8_4_ = iVar11;
    auVar24._12_4_ = iVar11;
    uVar2 = 0;
    psVar5 = param_1 + uVar14;
    psVar10 = param_2 + uVar14;
    do {
                    /* try { // try from 0039d9d0 to 0049d9d3 has its CatchHandler @ 0039d908 */
      uVar2 = uVar2 + 1;
      uVar26 = *(undefined8 *)(psVar10 + 4);
      uVar25 = *(undefined8 *)psVar10;
      uVar18 = MP_INT_ABS((int)psVar5[4] - (int)(short)uVar26);
      uVar19 = MP_INT_ABS((int)psVar5[5] - (int)(short)((ulong)uVar26 >> 0x10));
      uVar20 = MP_INT_ABS((int)psVar5[6] - (int)(short)((ulong)uVar26 >> 0x20));
      uVar21 = MP_INT_ABS((int)psVar5[7] - (int)(short)((ulong)uVar26 >> 0x30));
      auVar17._0_4_ = MP_INT_ABS((int)*psVar5 - (int)(short)uVar25);
      auVar17._4_4_ = MP_INT_ABS((int)psVar5[1] - (int)(short)((ulong)uVar25 >> 0x10));
      auVar17._8_4_ = MP_INT_ABS((int)psVar5[2] - (int)(short)((ulong)uVar25 >> 0x20));
      auVar17._12_4_ = MP_INT_ABS((int)psVar5[3] - (int)(short)((ulong)uVar25 >> 0x30));
      auVar1._4_4_ = uVar19;
      auVar1._0_4_ = uVar18;
      auVar1._8_4_ = uVar20;
      auVar1._12_4_ = uVar21;
                    /* try { // try from 0039d9f0 to 0049d9f3 has its CatchHandler @ 0039da00 */
      auVar23 = NEON_smax(auVar1,auVar17,4);
      auVar24 = NEON_smax(auVar24,auVar23,4);
                    /* try { // try from 0039d9f8 to 0049d9fb has its CatchHandler @ 0039d908 */
      psVar5 = psVar5 + 8;
      psVar10 = psVar10 + 8;
    } while (uVar2 < uVar7);
    iVar11 = NEON_smaxv(auVar24,4);
                    /* catch() { ... } // from try @ 0039d9f0 with catch @ 0039da00 */
    uVar12 = (ulong)(uint)((int)uVar12 + iVar13);
    if (iVar13 == iVar8) goto LAB_0039db54;
  }
                    /* try { // try from 0039da10 to 0049da13 has its CatchHandler @ 0039d908 */
  uVar14 = -(uVar12 >> 0x1f) & 0xfffffffe00000000 | uVar12 << 1;
  iVar13 = (int)uVar12;
  uVar7 = (int)*(short *)((long)param_1 + uVar14) - (int)*(short *)((long)param_2 + uVar14);
  uVar2 = (int)uVar7 >> 0x1f;
  iVar8 = (uVar7 ^ uVar2) - uVar2;
  if (iVar11 < iVar8) {
    iVar11 = iVar8;
  }
  if (iVar13 + 1 < (int)uVar3) {
    uVar7 = (int)*(short *)((long)param_1 + uVar14 + 2) -
            (int)*(short *)((long)param_2 + uVar14 + 2);
    uVar2 = (int)uVar7 >> 0x1f;
    iVar8 = (uVar7 ^ uVar2) - uVar2;
    if (iVar11 < iVar8) {
      iVar11 = iVar8;
    }
    if (iVar13 + 2 < (int)uVar3) {
      uVar7 = (int)*(short *)((long)param_1 + uVar14 + 4) -
              (int)*(short *)((long)param_2 + uVar14 + 4);
      uVar2 = (int)uVar7 >> 0x1f;
      iVar8 = (uVar7 ^ uVar2) - uVar2;
      if (iVar11 < iVar8) {
        iVar11 = iVar8;
      }
      if (iVar13 + 3 < (int)uVar3) {
        uVar7 = (int)*(short *)((long)param_1 + uVar14 + 6) -
                (int)*(short *)((long)param_2 + uVar14 + 6);
        uVar2 = (int)uVar7 >> 0x1f;
        iVar8 = (uVar7 ^ uVar2) - uVar2;
        if (iVar11 < iVar8) {
          iVar11 = iVar8;
        }
        if (iVar13 + 4 < (int)uVar3) {
          uVar7 = (int)*(short *)((long)param_1 + uVar14 + 8) -
                  (int)*(short *)((long)param_2 + uVar14 + 8);
          uVar2 = (int)uVar7 >> 0x1f;
          iVar8 = (uVar7 ^ uVar2) - uVar2;
          if (iVar11 < iVar8) {
            iVar11 = iVar8;
          }
          if (iVar13 + 5 < (int)uVar3) {
            uVar7 = (int)*(short *)((long)param_1 + uVar14 + 10) -
                    (int)*(short *)((long)param_2 + uVar14 + 10);
            uVar2 = (int)uVar7 >> 0x1f;
            iVar8 = (uVar7 ^ uVar2) - uVar2;
            if (iVar11 < iVar8) {
              iVar11 = iVar8;
            }
            if ((iVar13 + 6 < (int)uVar3) &&
               (uVar3 = (int)*(short *)((long)param_1 + uVar14 + 0xc) -
                        (int)*(short *)((long)param_2 + uVar14 + 0xc), uVar7 = (int)uVar3 >> 0x1f,
               iVar13 = (uVar3 ^ uVar7) - uVar7, iVar11 < iVar13)) {
              iVar11 = iVar13;
            }
          }
        }
      }
    }
  }
LAB_0039db54:
  if (iVar22 < iVar11) {
    iVar22 = iVar11;
  }
  *param_4 = iVar22;
  return 0;
}


==================================================================

### FUNC 0039db8c (2800 bytes) name=FUN_0039db8c

undefined8 FUN_0039db8c(short *param_1,long param_2,int *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  short *psVar4;
  uint uVar35;
  short *psVar36;
  ulong uVar37;
  int iVar38;
  long lVar39;
  int iVar40;
  uint uVar41;
  ulong uVar42;
  uint uVar43;
  uint uVar44;
  undefined1 auVar45 [16];
  undefined1 auVar46 [16];
  undefined1 auVar47 [16];
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  int iVar52;
  int iVar53;
  int iVar54;
  int iVar55;
  undefined1 auVar56 [16];
  undefined1 auVar57 [16];
  undefined1 auVar58 [16];
  undefined1 auVar59 [16];
  undefined1 auVar60 [16];
  undefined1 auVar61 [16];
  undefined1 auVar62 [16];
  undefined1 auVar63 [16];
  undefined1 auVar64 [16];
  undefined1 auVar65 [16];
  undefined1 auVar66 [16];
  undefined1 auVar67 [16];
  undefined1 auVar68 [16];
  int iVar69;
  undefined1 auVar70 [16];
  undefined1 auVar71 [16];
  undefined1 auVar72 [16];
  undefined1 auVar73 [16];
  short sVar74;
  short *psVar5;
  short *psVar6;
  short *psVar7;
  short *psVar8;
  short *psVar9;
  short *psVar10;
  short *psVar11;
  short *psVar12;
  short *psVar13;
  short *psVar14;
  short *psVar15;
  short *psVar16;
  short *psVar17;
  short *psVar18;
  short *psVar19;
  short *psVar20;
  short *psVar21;
  short *psVar22;
  short *psVar23;
  short *psVar24;
  short *psVar25;
  short *psVar26;
  short *psVar27;
  short *psVar28;
  short *psVar29;
  short *psVar30;
  short *psVar31;
  short *psVar32;
  short *psVar33;
  short *psVar34;
  
  iVar38 = *param_3;
  uVar44 = (uint)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar39 = 0;
      do {
        if ((*(char *)(param_2 + lVar39) != '\0') && (0 < (int)uVar44)) {
          uVar3 = -((uint)((ulong)param_1 >> 1) & 7) & 7;
          if (uVar44 < uVar3) {
            uVar3 = uVar44;
          }
          if (uVar44 < 10) {
            uVar3 = uVar44;
          }
          if (uVar3 == 0) {
            uVar42 = 0;
          }
          else {
            iVar38 = iVar38 + (int)ABS((double)(int)*param_1);
            if ((((uVar3 == 1) || (iVar38 = iVar38 + (int)ABS((double)(int)param_1[1]), uVar3 == 2))
                || (iVar38 = iVar38 + (int)ABS((double)(int)param_1[2]), uVar3 == 3)) ||
               (((iVar38 = iVar38 + (int)ABS((double)(int)param_1[3]), uVar3 == 4 ||
                 (iVar38 = iVar38 + (int)ABS((double)(int)param_1[4]), uVar3 == 5)) ||
                (iVar38 = iVar38 + (int)ABS((double)(int)param_1[5]), uVar3 == 6)))) {
              uVar42 = (ulong)uVar3;
            }
            else {
              iVar38 = iVar38 + (int)ABS((double)(int)param_1[6]);
              if (uVar3 == 7) {
                uVar42 = 7;
              }
              else {
                iVar38 = iVar38 + (int)ABS((double)(int)param_1[7]);
                if (uVar3 == 9) {
                  uVar42 = 9;
                  iVar38 = iVar38 + (int)ABS((double)(int)param_1[8]);
                }
                else {
                  uVar42 = 8;
                }
              }
            }
            if (uVar44 == uVar3) goto LAB_0039de6c;
          }
          uVar1 = ((uVar44 - uVar3) - 8 >> 3) + 1;
          iVar40 = uVar1 * 8;
          if (6 < (uVar44 - 1) - uVar3) {
            iVar52 = 0;
            iVar53 = 0;
            iVar54 = 0;
            iVar55 = 0;
            uVar43 = 0;
            psVar36 = param_1 + uVar3;
            do {
              uVar43 = uVar43 + 1;
              auVar59._0_8_ = (long)(int)*psVar36;
              auVar59._8_8_ = (long)(int)psVar36[1];
              auVar48._0_8_ = (long)(int)psVar36[2];
              auVar48._8_8_ = (long)(int)psVar36[3];
              auVar49._0_8_ = (long)(int)psVar36[4];
              auVar49._8_8_ = (long)(int)psVar36[5];
              auVar45._0_8_ = (long)(int)psVar36[6];
              auVar45._8_8_ = (long)(int)psVar36[7];
              auVar59 = NEON_scvtf(auVar59,8);
              auVar48 = NEON_scvtf(auVar48,8);
              auVar45 = NEON_scvtf(auVar45,8);
              auVar49 = NEON_scvtf(auVar49,8);
              iVar52 = (int)(long)ABS(auVar49._0_8_) + (int)(long)ABS(auVar59._0_8_) + iVar52;
              iVar53 = (int)(long)ABS(auVar49._8_8_) + (int)(long)ABS(auVar59._8_8_) + iVar53;
              iVar54 = (int)(long)ABS(auVar45._0_8_) + (int)(long)ABS(auVar48._0_8_) + iVar54;
              iVar55 = (int)(long)ABS(auVar45._8_8_) + (int)(long)ABS(auVar48._8_8_) + iVar55;
              psVar36 = psVar36 + 8;
            } while (uVar43 < uVar1);
            uVar42 = (ulong)(uint)((int)uVar42 + iVar40);
            iVar38 = iVar38 + iVar52 + iVar53 + iVar54 + iVar55;
            if (uVar44 - uVar3 == iVar40) goto LAB_0039de6c;
          }
          uVar37 = -(uVar42 >> 0x1f) & 0xfffffffe00000000 | uVar42 << 1;
          iVar40 = (int)uVar42;
          iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37));
          if (iVar40 + 1 < (int)uVar44) {
            iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 2));
            if (((iVar40 + 2 < (int)uVar44) &&
                (iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 4)),
                iVar40 + 3 < (int)uVar44)) &&
               ((iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 6)),
                iVar40 + 4 < (int)uVar44 &&
                ((iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 8)),
                 iVar40 + 5 < (int)uVar44 &&
                 (iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 10)),
                 iVar40 + 6 < (int)uVar44)))))) {
              iVar38 = iVar38 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 0xc));
            }
          }
        }
LAB_0039de6c:
        lVar39 = lVar39 + 1;
        param_1 = (short *)((long)param_1 +
                           (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                           (param_5 & 0xffffffff) << 1));
      } while ((int)lVar39 < param_4);
    }
    *param_3 = iVar38;
    return 0;
  }
  param_4 = param_4 * uVar44;
  iVar40 = param_4 + -3;
  uVar44 = 0;
  uVar3 = uVar44;
  if (0 < iVar40) {
    uVar3 = param_4 - 4U >> 2;
    iVar52 = uVar3 + 1;
    uVar3 = (uVar3 - 7 >> 3) + 1;
    if (param_4 - 4U < 0x1c) {
      uVar42 = 0;
LAB_0039e0ac:
      uVar37 = -(uVar42 >> 0x1f) & 0xfffffffe00000000 | uVar42 << 1;
      iVar53 = (int)uVar42;
      uVar3 = iVar53 + 4;
      uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar37)) +
                        (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 2)) +
                        (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 4)) +
                        (int)ABS((double)(int)*(short *)((long)param_1 + uVar37 + 6));
      if ((int)uVar3 < iVar40) {
        uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
        uVar3 = iVar53 + 8;
        uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                          (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                          (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                          (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
        if ((int)uVar3 < iVar40) {
          uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
          uVar3 = iVar53 + 0xc;
          uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                            (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                            (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                            (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
          if ((int)uVar3 < iVar40) {
            uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
            uVar3 = iVar53 + 0x10;
            uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                              (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                              (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                              (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
            if ((int)uVar3 < iVar40) {
              uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
              uVar3 = iVar53 + 0x14;
              uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                                (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                                (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                                (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
              if ((int)uVar3 < iVar40) {
                    /* catch() { ... } // from try @ 0039e3c4 with catch @ 0039e2a0
                       catch() { ... } // from try @ 0039f180 with catch @ 0039e2a0
                       catch() { ... } // from try @ 0039f2a8 with catch @ 0039e2a0 */
                uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
                uVar3 = iVar53 + 0x18;
                uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                                  (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                                  (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                                  (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
                if ((int)uVar3 < iVar40) {
                  uVar42 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar3 << 1;
                  uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42)) +
                                    (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2)) +
                                    (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)) +
                                    (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6));
                }
              }
            }
          }
        }
      }
    }
    else {
      iVar53 = 0;
      iVar54 = 0;
      iVar55 = 0;
      iVar69 = 0;
      uVar44 = 0;
      psVar36 = param_1;
      do {
        sVar74 = *psVar36;
        psVar4 = psVar36 + 1;
        psVar5 = psVar36 + 2;
        psVar6 = psVar36 + 3;
        psVar7 = psVar36 + 4;
        psVar8 = psVar36 + 5;
        psVar9 = psVar36 + 6;
        psVar10 = psVar36 + 7;
        psVar11 = psVar36 + 8;
        psVar12 = psVar36 + 9;
        psVar13 = psVar36 + 10;
        psVar14 = psVar36 + 0xb;
        psVar15 = psVar36 + 0xc;
        psVar16 = psVar36 + 0xd;
        psVar17 = psVar36 + 0xe;
        psVar18 = psVar36 + 0xf;
        psVar19 = psVar36 + 0x10;
        psVar20 = psVar36 + 0x11;
        psVar21 = psVar36 + 0x12;
        psVar22 = psVar36 + 0x13;
        psVar23 = psVar36 + 0x14;
        psVar24 = psVar36 + 0x15;
        psVar25 = psVar36 + 0x16;
        psVar26 = psVar36 + 0x17;
        psVar27 = psVar36 + 0x18;
        psVar28 = psVar36 + 0x19;
        psVar29 = psVar36 + 0x1a;
        psVar30 = psVar36 + 0x1b;
        psVar31 = psVar36 + 0x1c;
        psVar32 = psVar36 + 0x1d;
        psVar33 = psVar36 + 0x1e;
        psVar34 = psVar36 + 0x1f;
        psVar36 = psVar36 + 0x20;
        uVar44 = uVar44 + 1;
        auVar72._0_8_ = (long)(int)sVar74;
        auVar72._8_8_ = (long)(int)*psVar7;
        auVar66._0_8_ = (long)(int)*psVar11;
        auVar66._8_8_ = (long)(int)*psVar15;
        auVar70._0_8_ = (long)(int)*psVar4;
        auVar70._8_8_ = (long)(int)*psVar8;
        auVar63._0_8_ = (long)(int)*psVar12;
        auVar63._8_8_ = (long)(int)*psVar16;
        auVar72 = NEON_scvtf(auVar72,8);
        auVar66 = NEON_scvtf(auVar66,8);
        auVar70 = NEON_scvtf(auVar70,8);
        auVar73._0_8_ = (long)(int)*psVar5;
        auVar73._8_8_ = (long)(int)*psVar9;
        auVar67._0_8_ = (long)(int)*psVar19;
        auVar67._8_8_ = (long)(int)*psVar23;
        auVar61._0_8_ = (long)(int)*psVar13;
        auVar61._8_8_ = (long)(int)*psVar17;
        auVar63 = NEON_scvtf(auVar63,8);
        auVar56._0_8_ = (long)(int)*psVar27;
        auVar56._8_8_ = (long)(int)*psVar31;
        auVar71._0_8_ = (long)(int)*psVar20;
        auVar71._8_8_ = (long)(int)*psVar24;
        auVar64._0_8_ = (long)(int)*psVar28;
        auVar64._8_8_ = (long)(int)*psVar32;
        auVar73 = NEON_scvtf(auVar73,8);
        auVar65._0_8_ = (long)(int)*psVar14;
        auVar65._8_8_ = (long)(int)*psVar18;
        auVar61 = NEON_scvtf(auVar61,8);
        auVar67 = NEON_scvtf(auVar67,8);
        auVar56 = NEON_scvtf(auVar56,8);
        auVar71 = NEON_scvtf(auVar71,8);
        auVar49 = NEON_scvtf(auVar64,8);
        auVar68._0_8_ = (long)(int)*psVar21;
        auVar68._8_8_ = (long)(int)*psVar25;
        auVar50._0_8_ = (long)(int)*psVar29;
        auVar50._8_8_ = (long)(int)*psVar33;
        auVar59 = NEON_scvtf(auVar65,8);
        auVar57._8_4_ = (int)*psVar10;
        auVar57._0_8_ = (long)(int)*psVar6;
        auVar57._12_4_ = (int)*psVar10 >> 0x1f;
        auVar64 = NEON_scvtf(auVar57,8);
        auVar65 = NEON_scvtf(auVar68,8);
        auVar48 = NEON_scvtf(auVar50,8);
        auVar62._0_8_ = (long)(int)*psVar22;
        auVar62._8_8_ = (long)(int)*psVar26;
        auVar46._0_8_ = (long)(int)*psVar30;
        auVar46._8_8_ = (long)(int)*psVar34;
        auVar57 = NEON_scvtf(auVar62,8);
        auVar45 = NEON_scvtf(auVar46,8);
        iVar53 = (int)(long)ABS(auVar67._0_8_) + (int)(long)ABS(auVar71._0_8_) +
                 (int)(long)ABS(auVar65._0_8_) + (int)(long)ABS(auVar57._0_8_) +
                 (int)(long)ABS(auVar72._0_8_) + (int)(long)ABS(auVar70._0_8_) +
                 (int)(long)ABS(auVar73._0_8_) + (int)(long)ABS(auVar64._0_8_) + iVar53;
        iVar54 = (int)(long)ABS(auVar67._8_8_) + (int)(long)ABS(auVar71._8_8_) +
                 (int)(long)ABS(auVar65._8_8_) + (int)(long)ABS(auVar57._8_8_) +
                 (int)(long)ABS(auVar72._8_8_) + (int)(long)ABS(auVar70._8_8_) +
                 (int)(long)ABS(auVar73._8_8_) + (int)(long)ABS(auVar64._8_8_) + iVar54;
        iVar55 = (int)(long)ABS(auVar56._0_8_) + (int)(long)ABS(auVar49._0_8_) +
                 (int)(long)ABS(auVar48._0_8_) + (int)(long)ABS(auVar45._0_8_) +
                 (int)(long)ABS(auVar66._0_8_) + (int)(long)ABS(auVar63._0_8_) +
                 (int)(long)ABS(auVar61._0_8_) + (int)(long)ABS(auVar59._0_8_) + iVar55;
        iVar69 = (int)(long)ABS(auVar56._8_8_) + (int)(long)ABS(auVar49._8_8_) +
                 (int)(long)ABS(auVar48._8_8_) + (int)(long)ABS(auVar45._8_8_) +
                 (int)(long)ABS(auVar66._8_8_) + (int)(long)ABS(auVar63._8_8_) +
                 (int)(long)ABS(auVar61._8_8_) + (int)(long)ABS(auVar59._8_8_) + iVar69;
      } while (uVar44 < uVar3);
      uVar44 = iVar53 + iVar54 + iVar55 + iVar69;
      uVar42 = (ulong)(uVar3 * 0x20);
      if (uVar3 * 8 != iVar52) goto LAB_0039e0ac;
    }
    uVar3 = iVar52 * 4;
  }
  if ((int)uVar3 < param_4) {
    uVar43 = param_4 - uVar3;
    psVar36 = param_1 + (int)uVar3;
    uVar1 = -((uint)((ulong)psVar36 >> 1) & 7) & 7;
    uVar42 = (ulong)uVar1;
    if (uVar43 < uVar1) {
      uVar42 = (ulong)uVar43;
    }
    if (uVar43 < 10) {
      uVar42 = (ulong)uVar43;
    }
    uVar35 = (uint)uVar42;
    uVar1 = uVar3;
    if (uVar35 != 0) {
      uVar1 = uVar3 + 1;
      uVar44 = uVar44 + (int)ABS((double)(int)*psVar36);
      if (uVar35 != 1) {
        uVar1 = uVar3 + 2;
                    /* try { // try from 0039e3c4 to 0049f12f has its CatchHandler @ 0039e2a0 */
        uVar44 = uVar44 + (int)ABS((double)(int)psVar36[1]);
        if (uVar35 != 2) {
          uVar1 = uVar3 + 3;
          uVar44 = uVar44 + (int)ABS((double)(int)psVar36[2]);
          if (uVar35 != 3) {
            uVar1 = uVar3 + 4;
            uVar44 = uVar44 + (int)ABS((double)(int)psVar36[3]);
            if (uVar35 != 4) {
              uVar1 = uVar3 + 5;
              uVar44 = uVar44 + (int)ABS((double)(int)psVar36[4]);
              if (uVar35 != 5) {
                uVar1 = uVar3 + 6;
                uVar44 = uVar44 + (int)ABS((double)(int)psVar36[5]);
                if (uVar35 != 6) {
                  uVar1 = uVar3 + 7;
                  uVar44 = uVar44 + (int)ABS((double)(int)psVar36[6]);
                  if (uVar35 != 7) {
                    uVar1 = uVar3 + 8;
                    uVar44 = uVar44 + (int)ABS((double)(int)psVar36[7]);
                    if (uVar35 == 9) {
                      uVar1 = uVar3 + 9;
                      uVar44 = uVar44 + (int)ABS((double)(int)psVar36[8]);
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (uVar35 == uVar43) goto LAB_0039e64c;
    }
    uVar2 = ((uVar43 - uVar35) - 8 >> 3) + 1;
    iVar40 = uVar2 * 8;
    if (6 < (uVar43 - 1) - uVar35) {
      iVar52 = 0;
      iVar53 = 0;
      iVar54 = 0;
      iVar55 = 0;
      uVar41 = 0;
      psVar36 = param_1 + uVar42 + (long)(int)uVar3;
      do {
        uVar41 = uVar41 + 1;
        auVar60._0_8_ = (long)(int)*psVar36;
        auVar60._8_8_ = (long)(int)psVar36[1];
        auVar51._0_8_ = (long)(int)psVar36[2];
        auVar51._8_8_ = (long)(int)psVar36[3];
        auVar58._0_8_ = (long)(int)psVar36[4];
        auVar58._8_8_ = (long)(int)psVar36[5];
        auVar47._0_8_ = (long)(int)psVar36[6];
        auVar47._8_8_ = (long)(int)psVar36[7];
        auVar59 = NEON_scvtf(auVar60,8);
        auVar48 = NEON_scvtf(auVar51,8);
        auVar45 = NEON_scvtf(auVar47,8);
        auVar49 = NEON_scvtf(auVar58,8);
        iVar52 = (int)(long)ABS(auVar49._0_8_) + (int)(long)ABS(auVar59._0_8_) + iVar52;
        iVar53 = (int)(long)ABS(auVar49._8_8_) + (int)(long)ABS(auVar59._8_8_) + iVar53;
        iVar54 = (int)(long)ABS(auVar45._0_8_) + (int)(long)ABS(auVar48._0_8_) + iVar54;
        iVar55 = (int)(long)ABS(auVar45._8_8_) + (int)(long)ABS(auVar48._8_8_) + iVar55;
        psVar36 = psVar36 + 8;
      } while (uVar41 < uVar2);
      uVar1 = uVar1 + iVar40;
      uVar44 = uVar44 + iVar52 + iVar53 + iVar54 + iVar55;
      if (iVar40 == uVar43 - uVar35) goto LAB_0039e64c;
    }
    uVar42 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffe00000000 | (ulong)uVar1 << 1;
    uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42));
    if ((int)(uVar1 + 1) < param_4) {
      uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 2));
      if (((((int)(uVar1 + 2) < param_4) &&
           (uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 4)),
           (int)(uVar1 + 3) < param_4)) &&
          (uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 6)),
          (int)(uVar1 + 4) < param_4)) &&
         ((uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 8)),
          (int)(uVar1 + 5) < param_4 &&
          (uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 10)),
          (int)(uVar1 + 6) < param_4)))) {
        uVar44 = uVar44 + (int)ABS((double)(int)*(short *)((long)param_1 + uVar42 + 0xc));
      }
    }
  }
LAB_0039e64c:
  *param_3 = iVar38 + uVar44;
  return 0;
}


==================================================================

### FUNC 0039e67c name=FUN_0039e67c DECOMPILE FAILED

### FUNC 0039f220 (288 bytes) name=FUN_0039f220

undefined8 FUN_0039f220(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  long lVar1;
  uint uVar2;
  short *psVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  short *psVar4;
  
  dVar9 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar1 = lVar6 * 2;
            lVar6 = lVar6 + 1;
            dVar8 = (double)(int)*(short *)(param_1 + lVar1);
            dVar9 = dVar9 + dVar8 * dVar8;
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 |
                            (param_5 & 0xffffffff) << 1);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar9;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar8 = 0.0;
    iVar5 = 0;
  }
  else {
    dVar8 = 0.0;
    uVar2 = param_4 - 4U >> 2;
                    /* catch() { ... } // from try @ 0039f178 with catch @ 0039f298 */
    psVar3 = (short *)(param_1 + 2);
    do {
                    /* try { // try from 0039f2a8 to 0049f2ab has its CatchHandler @ 0039e2a0 */
      psVar4 = psVar3 + 4;
      dVar8 = dVar8 + (double)(int)*psVar3 * (double)(int)*psVar3 +
                      (double)(int)psVar3[-1] * (double)(int)psVar3[-1] +
                      (double)(int)psVar3[1] * (double)(int)psVar3[1] +
                      (double)(int)psVar3[2] * (double)(int)psVar3[2];
      psVar3 = psVar4;
    } while (psVar4 != (short *)(param_1 + (ulong)uVar2 * 8 + 10));
    iVar5 = (uVar2 + 1) * 4;
  }
  if (iVar5 < param_4) {
    psVar3 = (short *)(param_1 + (long)iVar5 * 2);
    do {
      psVar4 = psVar3 + 1;
      dVar8 = dVar8 + (double)(int)*psVar3 * (double)(int)*psVar3;
      psVar3 = psVar4;
    } while (psVar4 != (short *)(param_1 +
                                ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 2));
  }
  *param_3 = dVar9 + dVar8;
  return 0;
}


==================================================================

### FUNC 0039f340 (356 bytes) name=FUN_0039f340

undefined8
FUN_0039f340(short *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  long lVar1;
  short *psVar2;
  uint uVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  short *psVar7;
  long lVar8;
  short *psVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar5 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffe00000000 | (param_6 & 0xffffffff) << 1;
      lVar8 = 0;
      do {
        if ((*(char *)(param_3 + lVar8) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            psVar7 = param_1 + lVar6;
            lVar1 = lVar6 * 2;
            lVar6 = lVar6 + 1;
            dVar11 = (double)((int)*psVar7 - (int)*(short *)(param_2 + lVar1));
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar6 < iVar5);
        }
        lVar8 = lVar8 + 1;
        param_1 = (short *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar8 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar5;
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar11 = 0.0;
    uVar3 = param_5 - 4U >> 2;
    psVar7 = (short *)(param_2 + 2);
    psVar9 = param_1;
    do {
      psVar2 = psVar7 + 4;
      dVar11 = dVar11 + (double)((int)psVar9[1] - (int)*psVar7) *
                        (double)((int)psVar9[1] - (int)*psVar7) +
                        (double)((int)*psVar9 - (int)psVar7[-1]) *
                        (double)((int)*psVar9 - (int)psVar7[-1]) +
                        (double)((int)psVar9[2] - (int)psVar7[1]) *
                        (double)((int)psVar9[2] - (int)psVar7[1]) +
                        (double)((int)psVar9[3] - (int)psVar7[2]) *
                        (double)((int)psVar9[3] - (int)psVar7[2]);
      psVar7 = psVar2;
      psVar9 = psVar9 + 4;
    } while (psVar2 != (short *)(param_2 + (ulong)uVar3 * 8 + 10));
    uVar10 = (ulong)((uVar3 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar4 = -(uVar10 >> 0x1f) & 0xfffffffe00000000 | uVar10 << 1;
    lVar8 = 0;
    do {
      lVar6 = lVar8 + uVar4;
      psVar7 = (short *)(param_2 + uVar4 + lVar8);
      lVar8 = lVar8 + 2;
      dVar12 = (double)((int)*(short *)((long)param_1 + lVar6) - (int)*psVar7);
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar8 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 2);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 0039f4a4 (1100 bytes) name=FUN_0039f4a4

undefined8
FUN_0039f4a4(int *param_1,int *param_2,long param_3,int *param_4,int param_5,ulong param_6)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  ulong uVar11;
  int *piVar12;
  long lVar13;
  ulong uVar14;
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  int iVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  
  iVar17 = *param_4;
  uVar4 = (uint)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar14 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar13 = 0;
      do {
        if ((*(char *)(param_3 + lVar13) != '\0') && (0 < (int)uVar4)) {
          uVar9 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
          if (uVar4 < uVar9) {
            uVar9 = uVar4;
          }
          if (uVar4 < 6) {
            uVar9 = uVar4;
          }
          if (uVar9 == 0) {
            uVar11 = 0;
          }
          else {
            uVar6 = *param_1 - *param_2 >> 0x1f;
            iVar5 = (*param_1 - *param_2 ^ uVar6) - uVar6;
            if (iVar17 < iVar5) {
              iVar17 = iVar5;
            }
            if (uVar9 == 1) {
LAB_0039f6c4:
              uVar11 = (ulong)uVar9;
            }
            else {
              uVar6 = param_1[1] - param_2[1] >> 0x1f;
              iVar5 = (param_1[1] - param_2[1] ^ uVar6) - uVar6;
              if (iVar17 < iVar5) {
                iVar17 = iVar5;
              }
              if (uVar9 == 2) goto LAB_0039f6c4;
              uVar6 = param_1[2] - param_2[2] >> 0x1f;
              iVar5 = (param_1[2] - param_2[2] ^ uVar6) - uVar6;
              if (iVar17 < iVar5) {
                iVar17 = iVar5;
              }
              if (uVar9 == 3) goto LAB_0039f6c4;
              uVar6 = param_1[3] - param_2[3] >> 0x1f;
              iVar5 = (param_1[3] - param_2[3] ^ uVar6) - uVar6;
              if (iVar17 < iVar5) {
                iVar17 = iVar5;
              }
              if (uVar9 == 5) {
                uVar6 = param_1[4] - param_2[4] >> 0x1f;
                iVar5 = (param_1[4] - param_2[4] ^ uVar6) - uVar6;
                if (iVar17 < iVar5) {
                  iVar17 = iVar5;
                }
                uVar11 = 5;
              }
              else {
                uVar11 = 4;
              }
            }
            if (uVar4 == uVar9) goto LAB_0039f678;
          }
          uVar6 = ((uVar4 - uVar9) - 4 >> 2) + 1;
          iVar5 = uVar6 * 4;
          if (2 < (uVar4 - 1) - uVar9) {
            auVar18._4_4_ = iVar17;
            auVar18._0_4_ = iVar17;
            auVar18._8_4_ = iVar17;
            auVar18._12_4_ = iVar17;
            uVar8 = 0;
            piVar7 = param_2 + uVar9;
            piVar12 = param_1 + uVar9;
            do {
              uVar8 = uVar8 + 1;
              iVar17 = *piVar12;
              iVar3 = piVar12[1];
              iVar1 = piVar12[2];
              iVar2 = piVar12[3];
              iVar20 = (int)*(undefined8 *)piVar7;
              iVar22 = (int)((ulong)*(undefined8 *)piVar7 >> 0x20);
              iVar21 = (int)*(undefined8 *)(piVar7 + 2);
              iVar23 = (int)((ulong)*(undefined8 *)(piVar7 + 2) >> 0x20);
              auVar15._0_4_ = (iVar17 - iVar20) + (iVar20 - iVar17) * 2 * (uint)(iVar17 < iVar20);
              auVar15._4_4_ = (iVar3 - iVar22) + (iVar22 - iVar3) * 2 * (uint)(iVar3 < iVar22);
              auVar15._8_4_ =
                   (iVar1 - iVar21) +
                   (int)(CONCAT44(iVar23 - iVar2,iVar21 - iVar1) >> 0x1e) * 2 *
                   (uint)(iVar1 < iVar21);
              auVar15._12_4_ = (iVar2 - iVar23) + (iVar23 - iVar2) * 2 * (uint)(iVar2 < iVar23);
              auVar18 = NEON_smax(auVar18,auVar15,4);
              piVar7 = piVar7 + 4;
              piVar12 = piVar12 + 4;
            } while (uVar8 < uVar6);
            iVar17 = NEON_smaxv(auVar18,4);
            uVar11 = (ulong)(uint)((int)uVar11 + iVar5);
            if (uVar4 - uVar9 == iVar5) goto LAB_0039f678;
          }
          uVar10 = -(uVar11 >> 0x1f) & 0xfffffffc00000000 | uVar11 << 2;
          uVar9 = *(int *)((long)param_1 + uVar10) - *(int *)((long)param_2 + uVar10);
          uVar6 = (int)uVar9 >> 0x1f;
          iVar5 = (uVar9 ^ uVar6) - uVar6;
          if (iVar17 < iVar5) {
            iVar17 = iVar5;
          }
          if ((int)uVar11 + 1 < (int)uVar4) {
            uVar9 = *(int *)((long)param_1 + uVar10 + 4) - *(int *)((long)param_2 + uVar10 + 4);
            uVar6 = (int)uVar9 >> 0x1f;
            iVar5 = (uVar9 ^ uVar6) - uVar6;
            if (iVar17 < iVar5) {
              iVar17 = iVar5;
            }
            if (((int)uVar11 + 2 < (int)uVar4) &&
               (uVar9 = *(int *)((long)param_1 + uVar10 + 8) - *(int *)((long)param_2 + uVar10 + 8),
               uVar6 = (int)uVar9 >> 0x1f, iVar5 = (uVar9 ^ uVar6) - uVar6, iVar17 < iVar5)) {
              iVar17 = iVar5;
            }
          }
        }
LAB_0039f678:
        lVar13 = lVar13 + 1;
        param_1 = (int *)((long)param_1 + uVar14);
        param_2 = (int *)((long)param_2 + uVar14);
      } while ((int)lVar13 < param_5);
    }
    goto LAB_0039f8b8;
  }
  uVar4 = param_5 * uVar4;
  iVar5 = 0;
  if (0 < (int)uVar4) {
    uVar9 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
    if (uVar4 < uVar9) {
      uVar9 = uVar4;
    }
    uVar14 = (ulong)uVar9;
    if ((int)uVar4 < 6) {
      uVar14 = (ulong)uVar4;
LAB_0039f6f8:
      uVar9 = *param_1 - *param_2 >> 0x1f;
      iVar5 = (*param_1 - *param_2 ^ uVar9) - uVar9;
      if (iVar5 < 0) {
        iVar5 = 0;
      }
      uVar9 = (uint)uVar14;
      uVar11 = uVar14;
      if (uVar9 != 1) {
        uVar6 = param_1[1] - param_2[1] >> 0x1f;
        iVar3 = (param_1[1] - param_2[1] ^ uVar6) - uVar6;
        if (iVar5 < iVar3) {
          iVar5 = iVar3;
        }
        if (uVar9 != 2) {
          uVar6 = param_1[2] - param_2[2] >> 0x1f;
          iVar3 = (param_1[2] - param_2[2] ^ uVar6) - uVar6;
          if (iVar5 < iVar3) {
            iVar5 = iVar3;
          }
          if (uVar9 != 3) {
            uVar6 = param_1[3] - param_2[3] >> 0x1f;
            iVar3 = (param_1[3] - param_2[3] ^ uVar6) - uVar6;
            if (iVar5 < iVar3) {
              iVar5 = iVar3;
            }
            if (uVar9 == 5) {
              uVar6 = param_1[4] - param_2[4] >> 0x1f;
              iVar3 = (param_1[4] - param_2[4] ^ uVar6) - uVar6;
              if (iVar5 < iVar3) {
                iVar5 = iVar3;
              }
            }
            else {
              uVar11 = 4;
            }
          }
        }
      }
      if (uVar4 == uVar9) goto LAB_0039f8b0;
    }
    else {
      uVar11 = 0;
      if (uVar9 != 0) goto LAB_0039f6f8;
    }
    iVar1 = uVar4 - (int)uVar14;
    uVar9 = (iVar1 - 4U >> 2) + 1;
    iVar3 = uVar9 * 4;
    if (2 < (uVar4 - 1) - (int)uVar14) {
      auVar16._4_4_ = iVar5;
      auVar16._0_4_ = iVar5;
      auVar16._8_4_ = iVar5;
      auVar16._12_4_ = iVar5;
      uVar6 = 0;
      piVar7 = param_2 + uVar14;
      piVar12 = param_1 + uVar14;
      do {
        uVar6 = uVar6 + 1;
        iVar5 = *piVar12;
        iVar2 = piVar12[1];
        iVar20 = piVar12[2];
        iVar22 = piVar12[3];
        iVar21 = (int)*(undefined8 *)piVar7;
        iVar23 = (int)((ulong)*(undefined8 *)piVar7 >> 0x20);
        iVar24 = (int)*(undefined8 *)(piVar7 + 2);
        iVar25 = (int)((ulong)*(undefined8 *)(piVar7 + 2) >> 0x20);
        auVar19._0_4_ = (iVar5 - iVar21) + (iVar21 - iVar5) * 2 * (uint)(iVar5 < iVar21);
        auVar19._4_4_ = (iVar2 - iVar23) + (iVar23 - iVar2) * 2 * (uint)(iVar2 < iVar23);
        auVar19._8_4_ =
             (iVar20 - iVar24) +
             (int)(CONCAT44(iVar25 - iVar22,iVar24 - iVar20) >> 0x1e) * 2 * (uint)(iVar20 < iVar24);
        auVar19._12_4_ = (iVar22 - iVar25) + (iVar25 - iVar22) * 2 * (uint)(iVar22 < iVar25);
        auVar16 = NEON_smax(auVar16,auVar19,4);
        piVar7 = piVar7 + 4;
        piVar12 = piVar12 + 4;
      } while (uVar6 < uVar9);
      iVar5 = NEON_smaxv(auVar16,4);
      uVar11 = (ulong)(uint)((int)uVar11 + iVar3);
      if (iVar3 == iVar1) goto LAB_0039f8b0;
    }
    uVar14 = -(uVar11 >> 0x1f) & 0xfffffffc00000000 | uVar11 << 2;
    uVar9 = *(int *)((long)param_1 + uVar14) - *(int *)((long)param_2 + uVar14);
    uVar6 = (int)uVar9 >> 0x1f;
    iVar3 = (uVar9 ^ uVar6) - uVar6;
    if (iVar5 < iVar3) {
      iVar5 = iVar3;
    }
    if ((int)uVar11 + 1 < (int)uVar4) {
      uVar9 = *(int *)((long)param_1 + uVar14 + 4) - *(int *)((long)param_2 + uVar14 + 4);
      uVar6 = (int)uVar9 >> 0x1f;
      iVar3 = (uVar9 ^ uVar6) - uVar6;
      if (iVar5 < iVar3) {
        iVar5 = iVar3;
      }
      if (((int)uVar11 + 2 < (int)uVar4) &&
         (uVar4 = *(int *)((long)param_1 + uVar14 + 8) - *(int *)((long)param_2 + uVar14 + 8),
         uVar9 = (int)uVar4 >> 0x1f, iVar3 = (uVar4 ^ uVar9) - uVar9, iVar5 < iVar3)) {
        iVar5 = iVar3;
      }
    }
  }
LAB_0039f8b0:
  if (iVar17 < iVar5) {
    iVar17 = iVar5;
  }
LAB_0039f8b8:
  *param_4 = iVar17;
  return 0;
}


==================================================================

### FUNC 0039f8f0 (332 bytes) name=FUN_0039f8f0

undefined8 FUN_0039f8f0(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint *puVar6;
  int iVar8;
  long lVar9;
  long lVar10;
  double dVar11;
  double dVar12;
  uint *puVar7;
  
  dVar11 = *param_3;
  iVar8 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar10 = 0;
      do {
        if ((*(char *)(param_2 + lVar10) != '\0') && (0 < iVar8)) {
          lVar9 = 0;
          do {
            uVar1 = *(uint *)(param_1 + lVar9 * 4);
            lVar9 = lVar9 + 1;
            uVar2 = (int)uVar1 >> 0x1f;
            dVar11 = dVar11 + (double)(int)((uVar1 ^ uVar2) - uVar2);
          } while ((int)lVar9 < iVar8);
        }
        lVar10 = lVar10 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2);
      } while ((int)lVar10 < param_4);
    }
    *param_3 = dVar11;
    return 0;
  }
  param_4 = param_4 * iVar8;
  if (param_4 < 4) {
    dVar12 = 0.0;
    iVar8 = 0;
  }
  else {
    dVar12 = 0.0;
    uVar1 = param_4 - 4U >> 2;
    puVar6 = (uint *)(param_1 + 4);
    do {
      puVar7 = puVar6 + 4;
      uVar2 = (int)puVar6[-1] >> 0x1f;
      uVar3 = (int)*puVar6 >> 0x1f;
      uVar4 = (int)puVar6[1] >> 0x1f;
      uVar5 = (int)puVar6[2] >> 0x1f;
      dVar12 = dVar12 + (double)(int)((puVar6[-1] ^ uVar2) - uVar2) +
                        (double)(int)((*puVar6 ^ uVar3) - uVar3) +
                        (double)(int)((puVar6[1] ^ uVar4) - uVar4) +
                        (double)(int)((puVar6[2] ^ uVar5) - uVar5);
      puVar6 = puVar7;
    } while (puVar7 != (uint *)(param_1 + (ulong)uVar1 * 0x10 + 0x14));
    iVar8 = (uVar1 + 1) * 4;
  }
  if (iVar8 < param_4) {
    puVar6 = (uint *)(param_1 + (long)iVar8 * 4);
    do {
      puVar7 = puVar6 + 1;
      uVar1 = (int)*puVar6 >> 0x1f;
      dVar12 = dVar12 + (double)(int)((*puVar6 ^ uVar1) - uVar1);
      puVar6 = puVar7;
    } while (puVar7 != (uint *)(param_1 +
                               ((long)iVar8 + 1 + (ulong)(uint)((param_4 + -1) - iVar8)) * 4));
  }
  *param_3 = dVar11 + dVar12;
  return 0;
}


==================================================================

### FUNC 0039fa3c (384 bytes) name=FUN_0039fa3c

undefined8
FUN_0039fa3c(int *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  long lVar1;
  int *piVar2;
  uint uVar3;
  uint uVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  int *piVar8;
  long lVar9;
  int *piVar10;
  ulong uVar11;
  double dVar12;
  double dVar13;
  
  dVar12 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar11 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            lVar1 = lVar7 * 4;
            piVar8 = param_1 + lVar7;
            lVar7 = lVar7 + 1;
            uVar3 = *piVar8 - *(int *)(param_2 + lVar1);
            uVar4 = (int)uVar3 >> 0x1f;
            dVar12 = dVar12 + (double)(int)((uVar3 ^ uVar4) - uVar4);
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (int *)((long)param_1 + uVar11);
        param_2 = param_2 + uVar11;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar12;
    return 0;
  }
  param_5 = param_5 * iVar6;
  if (param_5 < 4) {
    dVar13 = 0.0;
    uVar11 = 0;
  }
  else {
    dVar13 = 0.0;
    uVar3 = param_5 - 4U >> 2;
    piVar8 = (int *)(param_2 + 4);
    piVar10 = param_1;
    do {
      piVar2 = piVar8 + 4;
      dVar13 = dVar13 + ABS((double)(*piVar10 - piVar8[-1])) + ABS((double)(piVar10[1] - *piVar8)) +
                        ABS((double)(piVar10[2] - piVar8[1])) +
                        ABS((double)(piVar10[3] - piVar8[2]));
      piVar8 = piVar2;
      piVar10 = piVar10 + 4;
    } while (piVar2 != (int *)(param_2 + (ulong)uVar3 * 0x10 + 0x14));
    uVar11 = (ulong)((uVar3 + 1) * 4);
  }
  if ((int)uVar11 < param_5) {
    uVar5 = -(uVar11 >> 0x1f) & 0xfffffffc00000000 | uVar11 << 2;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
      piVar8 = (int *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 4;
      dVar13 = dVar13 + ABS((double)(*(int *)((long)param_1 + lVar7) - *piVar8));
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar11) + 1) * 4);
  }
  *param_4 = dVar12 + dVar13;
  return 0;
}


==================================================================

### FUNC 0039fbbc (288 bytes) name=FUN_0039fbbc

undefined8 FUN_0039fbbc(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  long lVar1;
  uint uVar2;
  int *piVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  int *piVar4;
  
  dVar9 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar1 = lVar6 * 4;
            lVar6 = lVar6 + 1;
            dVar8 = (double)*(int *)(param_1 + lVar1);
            dVar9 = dVar9 + dVar8 * dVar8;
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar9;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar8 = 0.0;
    iVar5 = 0;
  }
  else {
    dVar8 = 0.0;
    uVar2 = param_4 - 4U >> 2;
    piVar3 = (int *)(param_1 + 4);
    do {
      piVar4 = piVar3 + 4;
      dVar8 = dVar8 + (double)*piVar3 * (double)*piVar3 + (double)piVar3[-1] * (double)piVar3[-1] +
                      (double)piVar3[1] * (double)piVar3[1] + (double)piVar3[2] * (double)piVar3[2];
      piVar3 = piVar4;
    } while (piVar4 != (int *)(param_1 + (ulong)uVar2 * 0x10 + 0x14));
    iVar5 = (uVar2 + 1) * 4;
  }
  if (iVar5 < param_4) {
    piVar3 = (int *)(param_1 + (long)iVar5 * 4);
    do {
      piVar4 = piVar3 + 1;
      dVar8 = dVar8 + (double)*piVar3 * (double)*piVar3;
      piVar3 = piVar4;
    } while (piVar4 != (int *)(param_1 +
                              ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 4));
  }
  *param_3 = dVar9 + dVar8;
  return 0;
}


==================================================================

### FUNC 0039fcdc (356 bytes) name=FUN_0039fcdc

undefined8
FUN_0039fcdc(int *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  long lVar1;
  int *piVar2;
  uint uVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  int *piVar7;
  long lVar8;
  int *piVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar5 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar8 = 0;
      do {
        if ((*(char *)(param_3 + lVar8) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            piVar7 = param_1 + lVar6;
            lVar1 = lVar6 * 4;
            lVar6 = lVar6 + 1;
            dVar11 = (double)(*piVar7 - *(int *)(param_2 + lVar1));
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar6 < iVar5);
        }
        lVar8 = lVar8 + 1;
        param_1 = (int *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar8 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar5;
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar11 = 0.0;
    uVar3 = param_5 - 4U >> 2;
    piVar7 = (int *)(param_2 + 4);
    piVar9 = param_1;
    do {
      piVar2 = piVar7 + 4;
      dVar11 = dVar11 + (double)(piVar9[1] - *piVar7) * (double)(piVar9[1] - *piVar7) +
                        (double)(*piVar9 - piVar7[-1]) * (double)(*piVar9 - piVar7[-1]) +
                        (double)(piVar9[2] - piVar7[1]) * (double)(piVar9[2] - piVar7[1]) +
                        (double)(piVar9[3] - piVar7[2]) * (double)(piVar9[3] - piVar7[2]);
      piVar7 = piVar2;
      piVar9 = piVar9 + 4;
    } while (piVar2 != (int *)(param_2 + (ulong)uVar3 * 0x10 + 0x14));
    uVar10 = (ulong)((uVar3 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar4 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
    lVar8 = 0;
    do {
      lVar6 = lVar8 + uVar4;
      piVar7 = (int *)(param_2 + uVar4 + lVar8);
      lVar8 = lVar8 + 4;
      dVar12 = (double)(*(int *)((long)param_1 + lVar6) - *piVar7);
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar8 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 4);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 0039fe40 (188 bytes) name=FUN_0039fe40

undefined8
FUN_0039fe40(long param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  long lVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  double dVar7;
  double dVar8;
  double dVar9;
  
  dVar7 = *param_4;
  iVar3 = (int)param_6;
  if (param_3 == 0) {
    dVar8 = 0.0;
    lVar5 = 0;
    dVar9 = dVar8;
    if (0 < param_5 * iVar3) {
      do {
        lVar4 = lVar5 * 8;
        lVar1 = lVar5 * 8;
        lVar5 = lVar5 + 1;
        dVar8 = ABS(*(double *)(param_1 + lVar4) - *(double *)(param_2 + lVar1));
        if (dVar8 <= dVar9) {
          dVar8 = dVar9;
        }
        dVar9 = dVar8;
      } while ((int)lVar5 < param_5 * iVar3);
    }
    if (dVar7 < dVar8) {
      dVar7 = dVar8;
    }
  }
  else if (0 < param_5) {
    uVar6 = -(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3;
    lVar5 = 0;
    do {
      if ((*(char *)(param_3 + lVar5) != '\0') && (0 < iVar3)) {
        lVar4 = 0;
        dVar8 = dVar7;
        do {
          lVar1 = lVar4 * 8;
          lVar2 = lVar4 * 8;
          lVar4 = lVar4 + 1;
          dVar7 = ABS(*(double *)(param_1 + lVar1) - *(double *)(param_2 + lVar2));
          if (dVar7 <= dVar8) {
            dVar7 = dVar8;
          }
          dVar8 = dVar7;
        } while ((int)lVar4 < iVar3);
      }
      lVar5 = lVar5 + 1;
      param_1 = param_1 + uVar6;
      param_2 = param_2 + uVar6;
    } while ((int)lVar5 < param_5);
  }
  *param_4 = dVar7;
  return 0;
}


==================================================================

### FUNC 0039fefc (288 bytes) name=FUN_0039fefc

undefined8 FUN_0039fefc(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  long lVar2;
  double *pdVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  double *pdVar4;
  
  dVar8 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar2 = lVar6 * 8;
            lVar6 = lVar6 + 1;
            dVar8 = dVar8 + ABS(*(double *)(param_1 + lVar2));
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 |
                            (param_5 & 0xffffffff) << 3);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar8;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar9 = 0.0;
    iVar5 = 0;
  }
  else {
    uVar1 = param_4 - 4U >> 2;
    dVar9 = 0.0;
    pdVar3 = (double *)(param_1 + 8);
    do {
      pdVar4 = pdVar3 + 4;
      dVar9 = dVar9 + ABS(pdVar3[-1]) + ABS(*pdVar3) + ABS(pdVar3[1]) + ABS(pdVar3[2]);
      pdVar3 = pdVar4;
    } while (pdVar4 != (double *)(param_1 + (ulong)uVar1 * 0x20 + 0x28));
    iVar5 = (uVar1 + 1) * 4;
  }
  if (iVar5 < param_4) {
    pdVar3 = (double *)(param_1 + (long)iVar5 * 8);
    do {
      pdVar4 = pdVar3 + 1;
      dVar9 = dVar9 + ABS(*pdVar3);
      pdVar3 = pdVar4;
    } while (pdVar4 != (double *)
                       (param_1 + ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 8));
  }
  *param_3 = dVar8 + dVar9;
  return 0;
}


==================================================================

### FUNC 003a001c (332 bytes) name=FUN_003a001c

undefined8
FUN_003a001c(double *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  double *pdVar1;
  uint uVar2;
  long lVar3;
  double *pdVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  double *pdVar8;
  long lVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  
  dVar11 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            pdVar4 = param_1 + lVar7;
            lVar3 = lVar7 * 8;
            lVar7 = lVar7 + 1;
            dVar11 = dVar11 + ABS(*pdVar4 - *(double *)(param_2 + lVar3));
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (double *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar11;
    return 0;
  }
  param_5 = param_5 * iVar6;
  if (param_5 < 4) {
    dVar12 = 0.0;
    uVar10 = 0;
  }
  else {
    uVar2 = param_5 - 4U >> 2;
    dVar12 = 0.0;
    pdVar4 = (double *)(param_2 + 8);
    pdVar8 = param_1;
    do {
      pdVar1 = pdVar4 + 4;
      dVar12 = dVar12 + ABS(*pdVar8 - pdVar4[-1]) + ABS(pdVar8[1] - *pdVar4) +
                        ABS(pdVar8[2] - pdVar4[1]) + ABS(pdVar8[3] - pdVar4[2]);
      pdVar4 = pdVar1;
      pdVar8 = pdVar8 + 4;
    } while (pdVar1 != (double *)(param_2 + (ulong)uVar2 * 0x20 + 0x28));
    uVar10 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar5 = -(uVar10 >> 0x1f) & 0xfffffff800000000 | uVar10 << 3;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
      pdVar4 = (double *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 8;
      dVar12 = dVar12 + ABS(*(double *)((long)param_1 + lVar7) - *pdVar4);
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 8);
  }
  *param_4 = dVar11 + dVar12;
  return 0;
}


==================================================================

### FUNC 003a0168 (268 bytes) name=FUN_003a0168

undefined8 FUN_003a0168(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  double *pdVar2;
  int iVar4;
  long lVar5;
  long lVar6;
  double dVar7;
  double dVar8;
  double *pdVar3;
  
  dVar8 = *param_3;
  iVar4 = (int)param_5;
  if (param_2 != 0) {
                    /* catch() { ... } // from try @ 003a0298 with catch @ 003a0170
                       catch() { ... } // from try @ 003a106c with catch @ 003a0170
                       catch() { ... } // from try @ 003a1194 with catch @ 003a0170 */
    if (0 < param_4) {
      lVar6 = 0;
      do {
        if ((*(char *)(param_2 + lVar6) != '\0') && (0 < iVar4)) {
          lVar5 = 0;
          do {
            dVar7 = *(double *)(param_1 + lVar5 * 8);
            lVar5 = lVar5 + 1;
            dVar8 = dVar8 + dVar7 * dVar7;
          } while ((int)lVar5 < iVar4);
        }
        lVar6 = lVar6 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffff800000000 |
                            (param_5 & 0xffffffff) << 3);
      } while ((int)lVar6 < param_4);
    }
    *param_3 = dVar8;
    return 0;
  }
  param_4 = param_4 * iVar4;
  if (param_4 < 4) {
    dVar7 = 0.0;
    iVar4 = 0;
  }
  else {
    uVar1 = param_4 - 4U >> 2;
    dVar7 = 0.0;
    pdVar2 = (double *)(param_1 + 8);
    do {
      pdVar3 = pdVar2 + 4;
      dVar7 = dVar7 + *pdVar2 * *pdVar2 + pdVar2[-1] * pdVar2[-1] + pdVar2[1] * pdVar2[1] +
                      pdVar2[2] * pdVar2[2];
      pdVar2 = pdVar3;
    } while (pdVar3 != (double *)(param_1 + (ulong)uVar1 * 0x20 + 0x28));
    iVar4 = (uVar1 + 1) * 4;
  }
  if (iVar4 < param_4) {
    pdVar2 = (double *)(param_1 + (long)iVar4 * 8);
    do {
      pdVar3 = pdVar2 + 1;
      dVar7 = dVar7 + *pdVar2 * *pdVar2;
      pdVar2 = pdVar3;
    } while (pdVar3 != (double *)
                       (param_1 + ((long)iVar4 + 1 + (ulong)(uint)((param_4 + -1) - iVar4)) * 8));
  }
  *param_3 = dVar8 + dVar7;
  return 0;
}


==================================================================

### FUNC 003a0274 (336 bytes) name=FUN_003a0274

undefined8
FUN_003a0274(double *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  double *pdVar1;
  uint uVar2;
  long lVar3;
  double *pdVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  double *pdVar8;
  long lVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffff800000000 | (param_6 & 0xffffffff) << 3;
      lVar9 = 0;
      do {
                    /* try { // try from 003a0298 to 004a101b has its CatchHandler @ 003a0170 */
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            pdVar4 = param_1 + lVar7;
            lVar3 = lVar7 * 8;
            lVar7 = lVar7 + 1;
            dVar11 = *pdVar4 - *(double *)(param_2 + lVar3);
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (double *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar6;
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    uVar2 = param_5 - 4U >> 2;
    dVar11 = 0.0;
    pdVar4 = (double *)(param_2 + 8);
    pdVar8 = param_1;
    do {
      pdVar1 = pdVar4 + 4;
      dVar11 = dVar11 + (pdVar8[1] - *pdVar4) * (pdVar8[1] - *pdVar4) +
                        (*pdVar8 - pdVar4[-1]) * (*pdVar8 - pdVar4[-1]) +
                        (pdVar8[2] - pdVar4[1]) * (pdVar8[2] - pdVar4[1]) +
                        (pdVar8[3] - pdVar4[2]) * (pdVar8[3] - pdVar4[2]);
      pdVar4 = pdVar1;
      pdVar8 = pdVar8 + 4;
    } while (pdVar1 != (double *)(param_2 + (ulong)uVar2 * 0x20 + 0x28));
    uVar10 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar5 = -(uVar10 >> 0x1f) & 0xfffffff800000000 | uVar10 << 3;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
      pdVar4 = (double *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 8;
      dVar12 = *(double *)((long)param_1 + lVar7) - *pdVar4;
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 8);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 003a03c4 (1120 bytes) name=FUN_003a03c4

int FUN_003a03c4(float *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  float *pfVar8;
  int iVar15;
  float *pfVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  ulong uVar20;
  uint3 uVar21;
  int iVar22;
  undefined8 uVar23;
  uint3 uVar24;
  undefined8 uVar25;
  int iVar26;
  uint uVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  undefined1 uVar31;
  undefined1 uVar32;
  undefined1 uVar33;
  undefined1 uVar34;
  undefined1 uVar35;
  undefined1 uVar36;
  undefined1 uVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  undefined1 uVar41;
  undefined1 uVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  undefined1 uVar45;
  undefined1 uVar46;
  float fVar47;
  float fVar48;
  float fVar49;
  float fVar50;
  float fVar51;
  float fVar52;
  float fVar53;
  float fVar54;
  float fVar55;
  int iStack_c;
  int iStack_4;
  float *pfVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  float *pfVar13;
  float *pfVar14;
  
  uVar27 = param_2 & 0xfffffff8;
  uVar31 = 0;
  uVar32 = 0;
  uVar33 = 0;
  uVar34 = 0;
  uVar35 = 0;
  uVar36 = 0;
  uVar37 = 0;
  uVar38 = 0;
  uVar39 = 0;
  uVar40 = 0;
  uVar41 = 0;
  uVar42 = 0;
  uVar43 = 0;
  uVar44 = 0;
  uVar45 = 0;
  uVar46 = 0;
  iVar15 = 0;
  if (0 < (int)uVar27) {
    do {
      iVar4 = uVar27 - iVar15;
      if (0x200000 < iVar4) {
        iVar4 = 0x200000;
      }
      if (0 < iVar4) {
        iVar18 = 0;
        do {
          iVar5 = iVar4 - iVar18;
          if (0x8000 < iVar5) {
            iVar5 = 0x8000;
          }
          if (iVar5 < 8) {
            uVar23 = 0;
            uVar25 = 0;
          }
          else {
            uVar23 = 0;
            uVar25 = 0;
            pfVar16 = param_1 + 4;
            do {
              pfVar8 = pfVar16 + 8;
              uVar21 = CONCAT12(-((float)((ulong)*(undefined8 *)(pfVar16 + -4) >> 0x20) == 0.0),
                                (ushort)(-((float)*(undefined8 *)(pfVar16 + -4) == 0.0) & 1)) &
                       0x1ffff;
              uVar24 = CONCAT12(-((float)((ulong)*(undefined8 *)pfVar16 >> 0x20) == 0.0),
                                (ushort)(-((float)*(undefined8 *)pfVar16 == 0.0) & 1)) & 0x1ffff;
              uVar23 = CONCAT26((short)((ulong)uVar23 >> 0x30) +
                                (ushort)(-((float)((ulong)*(undefined8 *)(pfVar16 + -2) >> 0x20) ==
                                          0.0) & 1),
                                CONCAT24((short)((ulong)uVar23 >> 0x20) +
                                         (ushort)(-((float)*(undefined8 *)(pfVar16 + -2) == 0.0) & 1
                                                 ),
                                         CONCAT22((short)((ulong)uVar23 >> 0x10) +
                                                  (ushort)(byte)(uVar21 >> 0x10),
                                                  (short)uVar23 + (short)uVar21)));
              uVar25 = CONCAT26((short)((ulong)uVar25 >> 0x30) +
                                (ushort)(-((float)((ulong)*(undefined8 *)(pfVar16 + 2) >> 0x20) ==
                                          0.0) & 1),
                                CONCAT24((short)((ulong)uVar25 >> 0x20) +
                                         (ushort)(-((float)*(undefined8 *)(pfVar16 + 2) == 0.0) & 1)
                                         ,CONCAT22((short)((ulong)uVar25 >> 0x10) +
                                                   (ushort)(byte)(uVar24 >> 0x10),
                                                   (short)uVar25 + (short)uVar24)));
              pfVar16 = pfVar8;
            } while (pfVar8 != param_1 + (ulong)(iVar5 - 8U >> 3) * 8 + 0xc);
          }
          iVar18 = iVar18 + iVar5;
          param_1 = param_1 + iVar5;
          iVar5 = CONCAT13(uVar34,CONCAT12(uVar33,CONCAT11(uVar32,uVar31))) +
                  (uint)(ushort)uVar23 + (uint)(ushort)uVar25;
          uVar31 = (undefined1)iVar5;
          uVar32 = (undefined1)((uint)iVar5 >> 8);
          uVar33 = (undefined1)((uint)iVar5 >> 0x10);
          uVar34 = (undefined1)((uint)iVar5 >> 0x18);
          iVar5 = CONCAT13(uVar38,CONCAT12(uVar37,CONCAT11(uVar36,uVar35))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x10) + (uint)(ushort)((ulong)uVar25 >> 0x10);
          uVar35 = (undefined1)iVar5;
          uVar36 = (undefined1)((uint)iVar5 >> 8);
          uVar37 = (undefined1)((uint)iVar5 >> 0x10);
          uVar38 = (undefined1)((uint)iVar5 >> 0x18);
          iVar5 = CONCAT13(uVar42,CONCAT12(uVar41,CONCAT11(uVar40,uVar39))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x20) + (uint)(ushort)((ulong)uVar25 >> 0x20);
          uVar39 = (undefined1)iVar5;
          uVar40 = (undefined1)((uint)iVar5 >> 8);
          uVar41 = (undefined1)((uint)iVar5 >> 0x10);
          uVar42 = (undefined1)((uint)iVar5 >> 0x18);
          iVar5 = CONCAT13(uVar46,CONCAT12(uVar45,CONCAT11(uVar44,uVar43))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x30) + (uint)(ushort)((ulong)uVar25 >> 0x30);
          uVar43 = (undefined1)iVar5;
          uVar44 = (undefined1)((uint)iVar5 >> 8);
          uVar45 = (undefined1)((uint)iVar5 >> 0x10);
          uVar46 = (undefined1)((uint)iVar5 >> 0x18);
        } while (iVar18 < iVar4);
      }
      iVar15 = iVar15 + iVar4;
    } while (iVar15 < (int)uVar27);
  }
  iVar18 = param_2 - iVar15;
  iVar4 = iVar18 + -3;
  iVar7 = CONCAT13(uVar42,CONCAT12(uVar41,CONCAT11(uVar40,uVar39)));
  iVar5 = CONCAT13(uVar34,CONCAT12(uVar33,CONCAT11(uVar32,uVar31)));
  iStack_c = (int)(CONCAT17(uVar38,CONCAT16(uVar37,CONCAT15(uVar36,CONCAT14(uVar35,iVar5)))) >> 0x20
                  );
  iStack_4 = (int)(CONCAT17(uVar46,CONCAT16(uVar45,CONCAT15(uVar44,CONCAT14(uVar43,iVar7)))) >> 0x20
                  );
  if (iVar4 < 1) {
    uVar27 = 0;
    uVar1 = uVar27;
  }
  else {
    uVar27 = iVar18 - 4U >> 2;
    iVar22 = uVar27 + 1;
    uVar1 = (uVar27 - 3 >> 2) + 1;
    if (iVar18 - 4U < 0xc) {
      uVar27 = 0;
      uVar2 = uVar27;
LAB_003a057c:
      uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      uVar1 = uVar2 + 4;
      uVar27 = uVar27 + (uint)(*(float *)((long)param_1 + uVar20) != 0.0) +
                        (uint)(*(float *)((long)param_1 + uVar20 + 4) != 0.0) +
                        (uint)(*(float *)((long)param_1 + uVar20 + 8) != 0.0) +
                        (uint)(*(float *)((long)param_1 + uVar20 + 0xc) != 0.0);
      if ((int)uVar1 < iVar4) {
        uVar20 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
        uVar2 = uVar2 + 8;
        uVar27 = uVar27 + (uint)(*(float *)((long)param_1 + uVar20) != 0.0) +
                          (uint)(*(float *)((long)param_1 + uVar20 + 4) != 0.0) +
                          (uint)(*(float *)((long)param_1 + uVar20 + 8) != 0.0) +
                          (uint)(*(float *)((long)param_1 + uVar20 + 0xc) != 0.0);
        if ((int)uVar2 < iVar4) {
          uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
          uVar27 = uVar27 + (uint)(*(float *)((long)param_1 + uVar20) != 0.0) +
                            (uint)(*(float *)((long)param_1 + uVar20 + 4) != 0.0) +
                            (uint)(*(float *)((long)param_1 + uVar20 + 8) != 0.0) +
                            (uint)(*(float *)((long)param_1 + uVar20 + 0xc) != 0.0);
        }
      }
    }
    else {
      iVar26 = 0;
      iVar28 = 0;
      iVar29 = 0;
      iVar30 = 0;
      uVar27 = 0;
      pfVar16 = param_1;
      do {
        fVar47 = *pfVar16;
        pfVar8 = pfVar16 + 1;
        pfVar9 = pfVar16 + 2;
        pfVar10 = pfVar16 + 3;
        fVar48 = pfVar16[4];
        fVar50 = pfVar16[5];
        fVar52 = pfVar16[6];
        fVar54 = pfVar16[7];
        pfVar11 = pfVar16 + 8;
        pfVar12 = pfVar16 + 9;
        pfVar13 = pfVar16 + 10;
        pfVar14 = pfVar16 + 0xb;
        fVar49 = pfVar16[0xc];
        fVar51 = pfVar16[0xd];
        fVar53 = pfVar16[0xe];
        fVar55 = pfVar16[0xf];
        pfVar16 = pfVar16 + 0x10;
        uVar27 = uVar27 + 1;
        iVar26 = iVar26 + (uint)(~-(fVar47 == 0.0) & 1) + (uint)(~-(*pfVar8 == 0.0) & 1) +
                          (uint)(~-(*pfVar9 == 0.0) & 1) + (uint)(~-(*pfVar10 == 0.0) & 1);
        iVar28 = iVar28 + (uint)(~-((float)(CONCAT17((char)((uint)fVar48 >> 0x18),
                                                     CONCAT16((char)((uint)fVar48 >> 0x10),
                                                              CONCAT15((char)((uint)fVar48 >> 8),
                                                                       CONCAT14(SUB41(fVar48,0),
                                                                                fVar47)))) >> 0x20)
                                   == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar50 >> 0x18),
                                                     CONCAT16((char)((uint)fVar50 >> 0x10),
                                                              CONCAT15((char)((uint)fVar50 >> 8),
                                                                       CONCAT14(SUB41(fVar50,0),
                                                                                *pfVar8)))) >> 0x20)
                                   == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar52 >> 0x18),
                                                     CONCAT16((char)((uint)fVar52 >> 0x10),
                                                              CONCAT15((char)((uint)fVar52 >> 8),
                                                                       CONCAT14(SUB41(fVar52,0),
                                                                                *pfVar9)))) >> 0x20)
                                   == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar54 >> 0x18),
                                                     CONCAT16((char)((uint)fVar54 >> 0x10),
                                                              CONCAT15((char)((uint)fVar54 >> 8),
                                                                       CONCAT14(SUB41(fVar54,0),
                                                                                *pfVar10)))) >> 0x20
                                           ) == 0.0) & 1);
        iVar29 = iVar29 + (uint)(~-(*pfVar11 == 0.0) & 1) + (uint)(~-(*pfVar12 == 0.0) & 1) +
                          (uint)(~-(*pfVar13 == 0.0) & 1) + (uint)(~-(*pfVar14 == 0.0) & 1);
        iVar30 = iVar30 + (uint)(~-((float)(CONCAT17((char)((uint)fVar49 >> 0x18),
                                                     CONCAT16((char)((uint)fVar49 >> 0x10),
                                                              CONCAT15((char)((uint)fVar49 >> 8),
                                                                       CONCAT14(SUB41(fVar49,0),
                                                                                *pfVar11)))) >> 0x20
                                           ) == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar51 >> 0x18),
                                                     CONCAT16((char)((uint)fVar51 >> 0x10),
                                                              CONCAT15((char)((uint)fVar51 >> 8),
                                                                       CONCAT14(SUB41(fVar51,0),
                                                                                *pfVar12)))) >> 0x20
                                           ) == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar53 >> 0x18),
                                                     CONCAT16((char)((uint)fVar53 >> 0x10),
                                                              CONCAT15((char)((uint)fVar53 >> 8),
                                                                       CONCAT14(SUB41(fVar53,0),
                                                                                *pfVar13)))) >> 0x20
                                           ) == 0.0) & 1) +
                          (uint)(~-((float)(CONCAT17((char)((uint)fVar55 >> 0x18),
                                                     CONCAT16((char)((uint)fVar55 >> 0x10),
                                                              CONCAT15((char)((uint)fVar55 >> 8),
                                                                       CONCAT14(SUB41(fVar55,0),
                                                                                *pfVar14)))) >> 0x20
                                           ) == 0.0) & 1);
      } while (uVar27 < uVar1);
      uVar27 = iVar26 + iVar28 + iVar29 + iVar30;
      uVar2 = uVar1 * 0x10;
      if (uVar1 * 4 != iVar22) goto LAB_003a057c;
    }
    uVar1 = iVar22 * 4;
  }
  if ((int)uVar1 < iVar18) {
    uVar6 = iVar18 - uVar1;
    pfVar16 = param_1 + (int)uVar1;
    uVar2 = -((uint)((ulong)pfVar16 >> 2) & 3) & 3;
    uVar20 = (ulong)uVar2;
    if (uVar6 < uVar2) {
      uVar20 = (ulong)uVar6;
    }
    if (uVar6 < 6) {
      uVar20 = (ulong)uVar6;
    }
    uVar17 = (uint)uVar20;
    uVar2 = uVar1;
    if (uVar17 != 0) {
      uVar2 = uVar1 + 1;
      uVar27 = uVar27 + (*pfVar16 != 0.0);
      if (uVar17 != 1) {
        uVar2 = uVar1 + 2;
        uVar27 = uVar27 + (pfVar16[1] != 0.0);
        if (uVar17 != 2) {
          uVar2 = uVar1 + 3;
          uVar27 = uVar27 + (pfVar16[2] != 0.0);
          if (uVar17 != 3) {
            uVar2 = uVar1 + 4;
            uVar27 = uVar27 + (pfVar16[3] != 0.0);
            if (uVar17 == 5) {
              uVar2 = uVar1 + 5;
              uVar27 = uVar27 + (pfVar16[4] != 0.0);
            }
          }
        }
      }
      if (uVar17 == uVar6) goto LAB_003a07ec;
    }
    uVar3 = ((uVar6 - uVar17) - 4 >> 2) + 1;
    iVar4 = uVar3 * 4;
    if (2 < (uVar6 - 1) - uVar17) {
      iVar22 = 0;
      iVar26 = 0;
      iVar28 = 0;
      iVar29 = 0;
      uVar19 = 0;
      pfVar16 = param_1 + uVar20 + (long)(int)uVar1;
      do {
        uVar19 = uVar19 + 1;
        iVar22 = iVar22 + (uint)(~-((float)*(undefined8 *)pfVar16 == 0.0) & 1);
        iVar26 = iVar26 + (uint)(~-((float)((ulong)*(undefined8 *)pfVar16 >> 0x20) == 0.0) & 1);
        iVar28 = iVar28 + (uint)(~-((float)*(undefined8 *)(pfVar16 + 2) == 0.0) & 1);
        iVar29 = iVar29 + (uint)(~-((float)((ulong)*(undefined8 *)(pfVar16 + 2) >> 0x20) == 0.0) & 1
                                );
        pfVar16 = pfVar16 + 4;
      } while (uVar19 < uVar3);
      uVar2 = uVar2 + iVar4;
      uVar27 = uVar27 + iVar22 + iVar26 + iVar28 + iVar29;
      if (iVar4 == uVar6 - uVar17) goto LAB_003a07ec;
    }
    uVar20 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    uVar27 = uVar27 + (*(float *)((long)param_1 + uVar20) != 0.0);
    if (((int)(uVar2 + 1) < iVar18) &&
       (uVar27 = uVar27 + (*(float *)((long)param_1 + uVar20 + 4) != 0.0), (int)(uVar2 + 2) < iVar18
       )) {
      uVar27 = uVar27 + (*(float *)((long)param_1 + uVar20 + 8) != 0.0);
    }
  }
LAB_003a07ec:
  return (iVar15 - (iStack_c + iVar5 + iVar7 + iStack_4)) + uVar27;
}


==================================================================

### FUNC 003a0824 name=FUN_003a0824 DECOMPILE FAILED

### FUNC 003a0e24 (1600 bytes) name=FUN_003a0e24

int FUN_003a0e24(undefined8 *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  undefined8 *puVar5;
  uint uVar6;
  int iVar7;
  long lVar8;
  int iVar9;
  byte bVar10;
  char cVar11;
  char cVar20;
  uint7 uVar12;
  char cVar15;
  char cVar16;
  char cVar17;
  char cVar18;
  char cVar19;
  undefined8 uVar13;
  ulong uVar14;
  char cVar21;
  byte bVar22;
  char cVar23;
  char cVar28;
  char cVar33;
  uint7 uVar24;
  byte bVar27;
  char cVar29;
  char cVar30;
  char cVar31;
  char cVar32;
  undefined8 uVar25;
  byte bVar34;
  ulong uVar26;
  char cVar35;
  int iVar36;
  int iVar37;
  int iVar38;
  int iVar39;
  ulong uVar40;
  ulong uVar41;
  undefined1 uVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  undefined1 uVar45;
  undefined1 uVar46;
  undefined1 uVar47;
  undefined1 uVar48;
  undefined1 uVar49;
  undefined1 uVar50;
  undefined1 uVar51;
  undefined1 uVar52;
  undefined1 uVar53;
  undefined1 uVar54;
  undefined1 uVar55;
  undefined1 uVar56;
  undefined1 uVar57;
  int local_10;
  int iStack_c;
  int iStack_8;
  int iStack_4;
  
  uVar4 = param_2 & 0xfffffff0;
  if ((int)uVar4 < 1) {
    uVar13 = 0;
    uVar25 = 0;
    iVar9 = 0;
  }
  else {
    uVar42 = 0;
    uVar43 = 0;
    uVar44 = 0;
    uVar45 = 0;
    uVar46 = 0;
    uVar47 = 0;
    uVar48 = 0;
    uVar49 = 0;
    uVar50 = 0;
    uVar51 = 0;
    uVar52 = 0;
    uVar53 = 0;
    uVar54 = 0;
    uVar55 = 0;
    uVar56 = 0;
    uVar57 = 0;
    iVar9 = 0;
    puVar5 = param_1;
    do {
      iVar3 = uVar4 - iVar9;
      if (0x3c00 < iVar3) {
        iVar3 = 0x3c00;
      }
      if (0 < iVar3) {
        iVar7 = 0;
        do {
          iVar36 = iVar3 - iVar7;
          if (0xf0 < iVar36) {
            iVar36 = 0xf0;
          }
          iVar37 = iVar36 + -0xf;
          if (iVar37 < 1) {
            uVar14 = 0;
            uVar26 = 0;
          }
          else {
            uVar25 = puVar5[1];
            uVar13 = *puVar5;
            bVar10 = -((char)uVar13 == '\0');
            bVar22 = -((char)uVar25 == '\0');
            bVar27 = -((char)((ulong)uVar25 >> 8) == '\0');
            bVar34 = -((char)((ulong)uVar25 >> 0x38) == '\0');
            uVar14 = CONCAT17(-((char)((ulong)uVar13 >> 0x38) == '\0'),
                              CONCAT16(-((char)((ulong)uVar13 >> 0x30) == '\0'),
                                       CONCAT15(-((char)((ulong)uVar13 >> 0x28) == '\0'),
                                                CONCAT14(-((char)((ulong)uVar13 >> 0x20) == '\0'),
                                                         CONCAT13(-((char)((ulong)uVar13 >> 0x18) ==
                                                                   '\0'),CONCAT12(-((char)((ulong)
                                                  uVar13 >> 0x10) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar13 >> 8) == '\0'),
                                                           bVar10))))))) & 0x101010101010101;
            uVar26 = CONCAT17(bVar34,CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                              CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                       CONCAT14(-((char)((ulong)uVar25 >> 0x20) ==
                                                                 '\0'),CONCAT13(-((char)((ulong)
                                                  uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(bVar27,bVar22))))))) &
                     0x101010101010101;
            if (0x10 < iVar37) {
              uVar25 = puVar5[3];
              uVar13 = puVar5[2];
              uVar40 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) == '\0'),
                                                       CONCAT11(-((char)((ulong)uVar13 >> 0x30) ==
                                                                 '\0'),-((char)((ulong)uVar13 >>
                                                                               0x28) == '\0'))) <<
                                      0x28) >> 0x20),
                                CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                         CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar13 >> 8) == '\0'),
                                                           -((char)uVar13 == '\0'))))) &
                       0xffffffff01010101;
              uVar40 = CONCAT17((char)(uVar40 >> 0x38),
                                CONCAT16((char)(uVar40 >> 0x30),
                                         CONCAT15((char)(uVar40 >> 0x28),
                                                  CONCAT14(-((char)((ulong)uVar13 >> 0x20) == '\0'),
                                                           (int)uVar40)))) & 0x1010101ffffffff;
              uVar41 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                         CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                  CONCAT14(-((char)((ulong)uVar25 >> 0x20) == '\0'),
                                                           CONCAT13(-((char)((ulong)uVar25 >> 0x18)
                                                                     == '\0'),
                                                                    CONCAT12(-((char)((ulong)uVar25
                                                                                     >> 0x10) ==
                                                                              '\0'),CONCAT11(-((char
                                                  )((ulong)uVar25 >> 8) == '\0'),
                                                  -((char)uVar25 == '\0')))))))) & 0x101010101010101
              ;
              cVar11 = (bVar10 & 1) + (char)uVar40;
              cVar15 = (char)(uVar14 >> 8) + (char)(uVar40 >> 8);
              cVar16 = (char)(uVar14 >> 0x10) + (char)(uVar40 >> 0x10);
              cVar17 = (char)(uVar14 >> 0x18) + (char)(uVar40 >> 0x18);
              cVar18 = (char)(uVar14 >> 0x20) + (char)(uVar40 >> 0x20);
              cVar19 = (char)(uVar14 >> 0x28) + (char)(uVar40 >> 0x28);
              cVar20 = (char)(uVar14 >> 0x30) + (char)(uVar40 >> 0x30);
              cVar21 = (char)(uVar14 >> 0x38) + (char)(uVar40 >> 0x38);
              uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,CONCAT13(
                                                  cVar17,CONCAT12(cVar16,CONCAT11(cVar15,cVar11)))))
                                               ));
              cVar23 = (bVar22 & 1) + (char)uVar41;
              cVar28 = (bVar27 & 1) + (char)(uVar41 >> 8);
              cVar29 = (char)(uVar26 >> 0x10) + (char)(uVar41 >> 0x10);
              cVar30 = (char)(uVar26 >> 0x18) + (char)(uVar41 >> 0x18);
              cVar31 = (char)(uVar26 >> 0x20) + (char)(uVar41 >> 0x20);
              cVar32 = (char)(uVar26 >> 0x28) + (char)(uVar41 >> 0x28);
              cVar33 = (char)(uVar26 >> 0x30) + (char)(uVar41 >> 0x30);
              cVar35 = (bVar34 & 1) + (char)(uVar41 >> 0x38);
              uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,CONCAT13(
                                                  cVar30,CONCAT12(cVar29,CONCAT11(cVar28,cVar23)))))
                                               ));
              if (0x20 < iVar37) {
                uVar25 = puVar5[5];
                uVar13 = puVar5[4];
                uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) == '\0'),
                                                         CONCAT11(-((char)((ulong)uVar13 >> 0x30) ==
                                                                   '\0'),-((char)((ulong)uVar13 >>
                                                                                 0x28) == '\0'))) <<
                                        0x28) >> 0x20),
                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0'),
                                                    CONCAT11(-((char)((ulong)uVar13 >> 8) == '\0'),
                                                             -((char)uVar13 == '\0'))))) &
                         0xffffffff01010101;
                uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                  CONCAT16((char)(uVar14 >> 0x30),
                                           CONCAT15((char)(uVar14 >> 0x28),
                                                    CONCAT14(-((char)((ulong)uVar13 >> 0x20) == '\0'
                                                              ),(int)uVar14)))) & 0x1010101ffffffff;
                uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                  CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                           CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                    CONCAT14(-((char)((ulong)uVar25 >> 0x20) == '\0'
                                                              ),CONCAT13(-((char)((ulong)uVar25 >>
                                                                                 0x18) == '\0'),
                                                                         CONCAT12(-((char)((ulong)
                                                  uVar25 >> 0x10) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar25 >> 8) == '\0'),
                                                           -((char)uVar25 == '\0')))))))) &
                         0x101010101010101;
                cVar11 = cVar11 + (char)uVar14;
                cVar15 = cVar15 + (char)(uVar14 >> 8);
                cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,CONCAT13(
                                                  cVar17,CONCAT12(cVar16,CONCAT11(cVar15,cVar11)))))
                                                 ));
                cVar23 = cVar23 + (char)uVar26;
                cVar28 = cVar28 + (char)(uVar26 >> 8);
                cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,CONCAT13(
                                                  cVar30,CONCAT12(cVar29,CONCAT11(cVar28,cVar23)))))
                                                 ));
                if (0x30 < iVar37) {
                  uVar25 = puVar5[7];
                  uVar13 = puVar5[6];
                  uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar13 >> 0x30)
                                                                     == '\0'),
                                                                    -((char)((ulong)uVar13 >> 0x28)
                                                                     == '\0'))) << 0x28) >> 0x20),
                                    CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                             CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0'),
                                                      CONCAT11(-((char)((ulong)uVar13 >> 8) == '\0')
                                                               ,-((char)uVar13 == '\0'))))) &
                           0xffffffff01010101;
                  uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                    CONCAT16((char)(uVar14 >> 0x30),
                                             CONCAT15((char)(uVar14 >> 0x28),
                                                      CONCAT14(-((char)((ulong)uVar13 >> 0x20) ==
                                                                '\0'),(int)uVar14)))) &
                           0x1010101ffffffff;
                  uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                    CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                             CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                      CONCAT14(-((char)((ulong)uVar25 >> 0x20) ==
                                                                '\0'),CONCAT13(-((char)((ulong)
                                                  uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar25 >> 8) ==
                                                                     '\0'),-((char)uVar25 == '\0')))
                                                  ))))) & 0x101010101010101;
                  cVar11 = cVar11 + (char)uVar14;
                  cVar15 = cVar15 + (char)(uVar14 >> 8);
                  cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                  cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                  cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                  cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                  cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                  cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                  uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,CONCAT13(
                                                  cVar17,CONCAT12(cVar16,CONCAT11(cVar15,cVar11)))))
                                                  ));
                  cVar23 = cVar23 + (char)uVar26;
                  cVar28 = cVar28 + (char)(uVar26 >> 8);
                  cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                  cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                  cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                  cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                  cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                  cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                  uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,CONCAT13(
                                                  cVar30,CONCAT12(cVar29,CONCAT11(cVar28,cVar23)))))
                                                  ));
                  if (0x40 < iVar37) {
                    uVar25 = puVar5[9];
                    uVar13 = puVar5[8];
                    uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) == '\0'
                                                              ),CONCAT11(-((char)((ulong)uVar13 >>
                                                                                 0x30) == '\0'),
                                                                         -((char)((ulong)uVar13 >>
                                                                                 0x28) == '\0'))) <<
                                            0x28) >> 0x20),
                                      CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                               CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0'),
                                                        CONCAT11(-((char)((ulong)uVar13 >> 8) ==
                                                                  '\0'),-((char)uVar13 == '\0')))))
                             & 0xffffffff01010101;
                    uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                      CONCAT16((char)(uVar14 >> 0x30),
                                               CONCAT15((char)(uVar14 >> 0x28),
                                                        CONCAT14(-((char)((ulong)uVar13 >> 0x20) ==
                                                                  '\0'),(int)uVar14)))) &
                             0x1010101ffffffff;
                    uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                      CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                               CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                        CONCAT14(-((char)((ulong)uVar25 >> 0x20) ==
                                                                  '\0'),CONCAT13(-((char)((ulong)
                                                  uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar25 >> 8) ==
                                                                     '\0'),-((char)uVar25 == '\0')))
                                                  ))))) & 0x101010101010101;
                    cVar11 = cVar11 + (char)uVar14;
                    cVar15 = cVar15 + (char)(uVar14 >> 8);
                    cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                    cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                    cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                    cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                    cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                    cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                    uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,
                                                  CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(cVar15,
                                                  cVar11)))))));
                    cVar23 = cVar23 + (char)uVar26;
                    cVar28 = cVar28 + (char)(uVar26 >> 8);
                    cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                    cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                    cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                    cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                    cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                    cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                    uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,
                                                  CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(cVar28,
                                                  cVar23)))))));
                    if (0x50 < iVar37) {
                      uVar25 = puVar5[0xb];
                      uVar13 = puVar5[10];
                      uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) ==
                                                                '\0'),CONCAT11(-((char)((ulong)
                                                  uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                              ) >> 0x20),
                                        CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                 CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0'),
                                                          CONCAT11(-((char)((ulong)uVar13 >> 8) ==
                                                                    '\0'),-((char)uVar13 == '\0'))))
                                       ) & 0xffffffff01010101;
                      uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                        CONCAT16((char)(uVar14 >> 0x30),
                                                 CONCAT15((char)(uVar14 >> 0x28),
                                                          CONCAT14(-((char)((ulong)uVar13 >> 0x20)
                                                                    == '\0'),(int)uVar14)))) &
                               0x1010101ffffffff;
                      uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                        CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                 CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                                          CONCAT14(-((char)((ulong)uVar25 >> 0x20)
                                                                    == '\0'),
                                                                   CONCAT13(-((char)((ulong)uVar25
                                                                                    >> 0x18) == '\0'
                                                                             ),CONCAT12(-((char)((
                                                  ulong)uVar25 >> 0x10) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar25 >> 8) == '\0'),
                                                           -((char)uVar25 == '\0')))))))) &
                               0x101010101010101;
                      cVar11 = cVar11 + (char)uVar14;
                      cVar15 = cVar15 + (char)(uVar14 >> 8);
                      cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                      cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                      cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                      cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                      cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                      cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                      uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,
                                                  CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(cVar15,
                                                  cVar11)))))));
                      cVar23 = cVar23 + (char)uVar26;
                      cVar28 = cVar28 + (char)(uVar26 >> 8);
                      cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                      cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                      cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                      cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                      cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                      cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                      uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,
                                                  CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(cVar28,
                                                  cVar23)))))));
                      if (0x60 < iVar37) {
                        uVar25 = puVar5[0xd];
                        uVar13 = puVar5[0xc];
                        uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38) ==
                                                                  '\0'),CONCAT11(-((char)((ulong)
                                                  uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                                ) >> 0x20),
                                          CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                   CONCAT12(-((char)((ulong)uVar13 >> 0x10) == '\0')
                                                            ,CONCAT11(-((char)((ulong)uVar13 >> 8)
                                                                       == '\0'),
                                                                      -((char)uVar13 == '\0'))))) &
                                 0xffffffff01010101;
                        uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                          CONCAT16((char)(uVar14 >> 0x30),
                                                   CONCAT15((char)(uVar14 >> 0x28),
                                                            CONCAT14(-((char)((ulong)uVar13 >> 0x20)
                                                                      == '\0'),(int)uVar14)))) &
                                 0x1010101ffffffff;
                        uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                          CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                   CONCAT15(-((char)((ulong)uVar25 >> 0x28) == '\0')
                                                            ,CONCAT14(-((char)((ulong)uVar25 >> 0x20
                                                                              ) == '\0'),
                                                                      CONCAT13(-((char)((ulong)
                                                  uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar25 >> 8) ==
                                                                     '\0'),-((char)uVar25 == '\0')))
                                                  ))))) & 0x101010101010101;
                        cVar11 = cVar11 + (char)uVar14;
                        cVar15 = cVar15 + (char)(uVar14 >> 8);
                        cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                        cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                        cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                        cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                        cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                        cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                        uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,
                                                  CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(cVar15,
                                                  cVar11)))))));
                        cVar23 = cVar23 + (char)uVar26;
                        cVar28 = cVar28 + (char)(uVar26 >> 8);
                        cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                        cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                        cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                        cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                        cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                        cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                        uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,
                                                  CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(cVar28,
                                                  cVar23)))))));
                        if (0x70 < iVar37) {
                          uVar25 = puVar5[0xf];
                          uVar13 = puVar5[0xe];
                          uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38)
                                                                    == '\0'),
                                                                   CONCAT11(-((char)((ulong)uVar13
                                                                                    >> 0x30) == '\0'
                                                                             ),-((char)((ulong)
                                                  uVar13 >> 0x28) == '\0'))) << 0x28) >> 0x20),
                                            CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                     CONCAT12(-((char)((ulong)uVar13 >> 0x10) ==
                                                               '\0'),CONCAT11(-((char)((ulong)uVar13
                                                                                      >> 8) == '\0')
                                                                              ,-((char)uVar13 ==
                                                                                '\0'))))) &
                                   0xffffffff01010101;
                          uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                            CONCAT16((char)(uVar14 >> 0x30),
                                                     CONCAT15((char)(uVar14 >> 0x28),
                                                              CONCAT14(-((char)((ulong)uVar13 >>
                                                                               0x20) == '\0'),
                                                                       (int)uVar14)))) &
                                   0x1010101ffffffff;
                          uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                            CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                     CONCAT15(-((char)((ulong)uVar25 >> 0x28) ==
                                                               '\0'),CONCAT14(-((char)((ulong)uVar25
                                                                                      >> 0x20) ==
                                                                               '\0'),CONCAT13(-((
                                                  char)((ulong)uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar25 >> 8) ==
                                                                     '\0'),-((char)uVar25 == '\0')))
                                                  ))))) & 0x101010101010101;
                          cVar11 = cVar11 + (char)uVar14;
                          cVar15 = cVar15 + (char)(uVar14 >> 8);
                          cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                          cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                          cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                          cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                          cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                          cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                          uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18,
                                                  CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(cVar15,
                                                  cVar11)))))));
                          cVar23 = cVar23 + (char)uVar26;
                          cVar28 = cVar28 + (char)(uVar26 >> 8);
                          cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                          cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                          cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                          cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                          cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                          cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                          uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31,
                                                  CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(cVar28,
                                                  cVar23)))))));
                          if (0x80 < iVar37) {
                            uVar25 = puVar5[0x11];
                            uVar13 = puVar5[0x10];
                            uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >> 0x38)
                                                                      == '\0'),
                                                                     CONCAT11(-((char)((ulong)uVar13
                                                                                      >> 0x30) ==
                                                                               '\0'),-((char)((ulong
                                                  )uVar13 >> 0x28) == '\0'))) << 0x28) >> 0x20),
                                              CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                       CONCAT12(-((char)((ulong)uVar13 >> 0x10) ==
                                                                 '\0'),CONCAT11(-((char)((ulong)
                                                  uVar13 >> 8) == '\0'),-((char)uVar13 == '\0')))))
                                     & 0xffffffff01010101;
                            uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                              CONCAT16((char)(uVar14 >> 0x30),
                                                       CONCAT15((char)(uVar14 >> 0x28),
                                                                CONCAT14(-((char)((ulong)uVar13 >>
                                                                                 0x20) == '\0'),
                                                                         (int)uVar14)))) &
                                     0x1010101ffffffff;
                            uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                              CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                       CONCAT15(-((char)((ulong)uVar25 >> 0x28) ==
                                                                 '\0'),CONCAT14(-((char)((ulong)
                                                  uVar25 >> 0x20) == '\0'),
                                                  CONCAT13(-((char)((ulong)uVar25 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar25 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar25
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar25 == '\0')
                                                                            ))))))) &
                                     0x101010101010101;
                            cVar11 = cVar11 + (char)uVar14;
                            cVar15 = cVar15 + (char)(uVar14 >> 8);
                            cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                            cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                            cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                            cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                            cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                            cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                            uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(cVar18
                                                  ,CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(cVar15,
                                                  cVar11)))))));
                            cVar23 = cVar23 + (char)uVar26;
                            cVar28 = cVar28 + (char)(uVar26 >> 8);
                            cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                            cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                            cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                            cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                            cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                            cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                            uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(cVar31
                                                  ,CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(cVar28,
                                                  cVar23)))))));
                            if (0x90 < iVar37) {
                              uVar25 = puVar5[0x13];
                              uVar13 = puVar5[0x12];
                              uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >>
                                                                               0x38) == '\0'),
                                                                       CONCAT11(-((char)((ulong)
                                                  uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                                  ) >> 0x20),
                                                CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                         CONCAT12(-((char)((ulong)uVar13 >> 0x10) ==
                                                                   '\0'),CONCAT11(-((char)((ulong)
                                                  uVar13 >> 8) == '\0'),-((char)uVar13 == '\0')))))
                                       & 0xffffffff01010101;
                              uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                CONCAT16((char)(uVar14 >> 0x30),
                                                         CONCAT15((char)(uVar14 >> 0x28),
                                                                  CONCAT14(-((char)((ulong)uVar13 >>
                                                                                   0x20) == '\0'),
                                                                           (int)uVar14)))) &
                                       0x1010101ffffffff;
                              uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                         CONCAT15(-((char)((ulong)uVar25 >> 0x28) ==
                                                                   '\0'),CONCAT14(-((char)((ulong)
                                                  uVar25 >> 0x20) == '\0'),
                                                  CONCAT13(-((char)((ulong)uVar25 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar25 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar25
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar25 == '\0')
                                                                            ))))))) &
                                       0x101010101010101;
                              cVar11 = cVar11 + (char)uVar14;
                              cVar15 = cVar15 + (char)(uVar14 >> 8);
                              cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                              cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                              cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                              cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                              cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                              cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                              uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(
                                                  cVar18,CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(
                                                  cVar15,cVar11)))))));
                              cVar23 = cVar23 + (char)uVar26;
                              cVar28 = cVar28 + (char)(uVar26 >> 8);
                              cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                              cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                              cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                              cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                              cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                              cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                              uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(
                                                  cVar31,CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(
                                                  cVar28,cVar23)))))));
                              if (0xa0 < iVar37) {
                                uVar25 = puVar5[0x15];
                                uVar13 = puVar5[0x14];
                                uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >>
                                                                                 0x38) == '\0'),
                                                                         CONCAT11(-((char)((ulong)
                                                  uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                                  ) >> 0x20),
                                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar13
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar13 == '\0')
                                                                            )))) &
                                         0xffffffff01010101;
                                uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                  CONCAT16((char)(uVar14 >> 0x30),
                                                           CONCAT15((char)(uVar14 >> 0x28),
                                                                    CONCAT14(-((char)((ulong)uVar13
                                                                                     >> 0x20) ==
                                                                              '\0'),(int)uVar14))))
                                         & 0x1010101ffffffff;
                                uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                  CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'),
                                                           CONCAT15(-((char)((ulong)uVar25 >> 0x28)
                                                                     == '\0'),
                                                                    CONCAT14(-((char)((ulong)uVar25
                                                                                     >> 0x20) ==
                                                                              '\0'),CONCAT13(-((char
                                                  )((ulong)uVar25 >> 0x18) == '\0'),
                                                  CONCAT12(-((char)((ulong)uVar25 >> 0x10) == '\0'),
                                                           CONCAT11(-((char)((ulong)uVar25 >> 8) ==
                                                                     '\0'),-((char)uVar25 == '\0')))
                                                  ))))) & 0x101010101010101;
                                cVar11 = cVar11 + (char)uVar14;
                                cVar15 = cVar15 + (char)(uVar14 >> 8);
                                cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                                cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                                cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                                cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                                cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                                cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                                uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(
                                                  cVar18,CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(
                                                  cVar15,cVar11)))))));
                                cVar23 = cVar23 + (char)uVar26;
                                cVar28 = cVar28 + (char)(uVar26 >> 8);
                                cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                                cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                                cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                                cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                                cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                                cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                                uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(
                                                  cVar31,CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(
                                                  cVar28,cVar23)))))));
                                if (0xb0 < iVar37) {
                                  uVar25 = puVar5[0x17];
                                  uVar13 = puVar5[0x16];
                                  uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13 >>
                                                                                   0x38) == '\0'),
                                                                           CONCAT11(-((char)((ulong)
                                                  uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                                  ) >> 0x20),
                                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar13
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar13 == '\0')
                                                                            )))) &
                                           0xffffffff01010101;
                                  uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                    CONCAT16((char)(uVar14 >> 0x30),
                                                             CONCAT15((char)(uVar14 >> 0x28),
                                                                      CONCAT14(-((char)((ulong)
                                                  uVar13 >> 0x20) == '\0'),(int)uVar14)))) &
                                           0x1010101ffffffff;
                                  uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                    CONCAT16(-((char)((ulong)uVar25 >> 0x30) == '\0'
                                                              ),CONCAT15(-((char)((ulong)uVar25 >>
                                                                                 0x28) == '\0'),
                                                                         CONCAT14(-((char)((ulong)
                                                  uVar25 >> 0x20) == '\0'),
                                                  CONCAT13(-((char)((ulong)uVar25 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar25 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar25
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar25 == '\0')
                                                                            ))))))) &
                                           0x101010101010101;
                                  cVar11 = cVar11 + (char)uVar14;
                                  cVar15 = cVar15 + (char)(uVar14 >> 8);
                                  cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                                  cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                                  cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                                  cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                                  cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                                  cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                                  uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,CONCAT14(
                                                  cVar18,CONCAT13(cVar17,CONCAT12(cVar16,CONCAT11(
                                                  cVar15,cVar11)))))));
                                  cVar23 = cVar23 + (char)uVar26;
                                  cVar28 = cVar28 + (char)(uVar26 >> 8);
                                  cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                                  cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                                  cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                                  cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                                  cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                                  cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                                  uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,CONCAT14(
                                                  cVar31,CONCAT13(cVar30,CONCAT12(cVar29,CONCAT11(
                                                  cVar28,cVar23)))))));
                                  if (0xc0 < iVar37) {
                                    uVar25 = puVar5[0x19];
                                    uVar13 = puVar5[0x18];
                                    uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)uVar13
                                                                                     >> 0x38) ==
                                                                              '\0'),CONCAT11(-((char
                                                  )((ulong)uVar13 >> 0x30) == '\0'),
                                                  -((char)((ulong)uVar13 >> 0x28) == '\0'))) << 0x28
                                                  ) >> 0x20),
                                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar13
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar13 == '\0')
                                                                            )))) &
                                             0xffffffff01010101;
                                    uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                      CONCAT16((char)(uVar14 >> 0x30),
                                                               CONCAT15((char)(uVar14 >> 0x28),
                                                                        CONCAT14(-((char)((ulong)
                                                  uVar13 >> 0x20) == '\0'),(int)uVar14)))) &
                                             0x1010101ffffffff;
                                    uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                      CONCAT16(-((char)((ulong)uVar25 >> 0x30) ==
                                                                '\0'),CONCAT15(-((char)((ulong)
                                                  uVar25 >> 0x28) == '\0'),
                                                  CONCAT14(-((char)((ulong)uVar25 >> 0x20) == '\0'),
                                                           CONCAT13(-((char)((ulong)uVar25 >> 0x18)
                                                                     == '\0'),
                                                                    CONCAT12(-((char)((ulong)uVar25
                                                                                     >> 0x10) ==
                                                                              '\0'),CONCAT11(-((char
                                                  )((ulong)uVar25 >> 8) == '\0'),
                                                  -((char)uVar25 == '\0')))))))) & 0x101010101010101
                                    ;
                                    cVar11 = cVar11 + (char)uVar14;
                                    cVar15 = cVar15 + (char)(uVar14 >> 8);
                                    cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                                    cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                                    cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                                    cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                                    cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                                    cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                                    uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,
                                                  CONCAT14(cVar18,CONCAT13(cVar17,CONCAT12(cVar16,
                                                  CONCAT11(cVar15,cVar11)))))));
                                    cVar23 = cVar23 + (char)uVar26;
                                    cVar28 = cVar28 + (char)(uVar26 >> 8);
                                    cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                                    cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                                    cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                                    cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                                    cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                                    cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                                    uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,
                                                  CONCAT14(cVar31,CONCAT13(cVar30,CONCAT12(cVar29,
                                                  CONCAT11(cVar28,cVar23)))))));
                                    if (0xd0 < iVar37) {
                                      uVar25 = puVar5[0x1b];
                                      uVar13 = puVar5[0x1a];
                                      uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)
                                                  uVar13 >> 0x38) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar13 >> 0x30) == '\0'),
                                                           -((char)((ulong)uVar13 >> 0x28) == '\0'))
                                                  ) << 0x28) >> 0x20),
                                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar13
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar13 == '\0')
                                                                            )))) &
                                               0xffffffff01010101;
                                      uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                        CONCAT16((char)(uVar14 >> 0x30),
                                                                 CONCAT15((char)(uVar14 >> 0x28),
                                                                          CONCAT14(-((char)((ulong)
                                                  uVar13 >> 0x20) == '\0'),(int)uVar14)))) &
                                               0x1010101ffffffff;
                                      uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                        CONCAT16(-((char)((ulong)uVar25 >> 0x30) ==
                                                                  '\0'),CONCAT15(-((char)((ulong)
                                                  uVar25 >> 0x28) == '\0'),
                                                  CONCAT14(-((char)((ulong)uVar25 >> 0x20) == '\0'),
                                                           CONCAT13(-((char)((ulong)uVar25 >> 0x18)
                                                                     == '\0'),
                                                                    CONCAT12(-((char)((ulong)uVar25
                                                                                     >> 0x10) ==
                                                                              '\0'),CONCAT11(-((char
                                                  )((ulong)uVar25 >> 8) == '\0'),
                                                  -((char)uVar25 == '\0')))))))) & 0x101010101010101
                                      ;
                                      cVar11 = cVar11 + (char)uVar14;
                                      cVar15 = cVar15 + (char)(uVar14 >> 8);
                                      cVar16 = cVar16 + (char)(uVar14 >> 0x10);
                                      cVar17 = cVar17 + (char)(uVar14 >> 0x18);
                                      cVar18 = cVar18 + (char)(uVar14 >> 0x20);
                                      cVar19 = cVar19 + (char)(uVar14 >> 0x28);
                                      cVar20 = cVar20 + (char)(uVar14 >> 0x30);
                                      cVar21 = cVar21 + (char)(uVar14 >> 0x38);
                                      uVar14 = CONCAT17(cVar21,CONCAT16(cVar20,CONCAT15(cVar19,
                                                  CONCAT14(cVar18,CONCAT13(cVar17,CONCAT12(cVar16,
                                                  CONCAT11(cVar15,cVar11)))))));
                                      cVar23 = cVar23 + (char)uVar26;
                                      cVar28 = cVar28 + (char)(uVar26 >> 8);
                                      cVar29 = cVar29 + (char)(uVar26 >> 0x10);
                                      cVar30 = cVar30 + (char)(uVar26 >> 0x18);
                                      cVar31 = cVar31 + (char)(uVar26 >> 0x20);
                                      cVar32 = cVar32 + (char)(uVar26 >> 0x28);
                                      cVar33 = cVar33 + (char)(uVar26 >> 0x30);
                                      cVar35 = cVar35 + (char)(uVar26 >> 0x38);
                                      uVar26 = CONCAT17(cVar35,CONCAT16(cVar33,CONCAT15(cVar32,
                                                  CONCAT14(cVar31,CONCAT13(cVar30,CONCAT12(cVar29,
                                                  CONCAT11(cVar28,cVar23)))))));
                                      if (iVar37 == 0xe1) {
                                        uVar25 = puVar5[0x1d];
                                        uVar13 = puVar5[0x1c];
                                        uVar14 = CONCAT44((int)(((ulong)CONCAT12(-((char)((ulong)
                                                  uVar13 >> 0x38) == '\0'),
                                                  CONCAT11(-((char)((ulong)uVar13 >> 0x30) == '\0'),
                                                           -((char)((ulong)uVar13 >> 0x28) == '\0'))
                                                  ) << 0x28) >> 0x20),
                                                  CONCAT13(-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar13 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar13
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar13 == '\0')
                                                                            )))) &
                                                 0xffffffff01010101;
                                        uVar14 = CONCAT17((char)(uVar14 >> 0x38),
                                                          CONCAT16((char)(uVar14 >> 0x30),
                                                                   CONCAT15((char)(uVar14 >> 0x28),
                                                                            CONCAT14(-((char)((ulong
                                                  )uVar13 >> 0x20) == '\0'),(int)uVar14)))) &
                                                 0x1010101ffffffff;
                                        uVar26 = CONCAT17(-((char)((ulong)uVar25 >> 0x38) == '\0'),
                                                          CONCAT16(-((char)((ulong)uVar25 >> 0x30)
                                                                    == '\0'),
                                                                   CONCAT15(-((char)((ulong)uVar25
                                                                                    >> 0x28) == '\0'
                                                                             ),CONCAT14(-((char)((
                                                  ulong)uVar25 >> 0x20) == '\0'),
                                                  CONCAT13(-((char)((ulong)uVar25 >> 0x18) == '\0'),
                                                           CONCAT12(-((char)((ulong)uVar25 >> 0x10)
                                                                     == '\0'),
                                                                    CONCAT11(-((char)((ulong)uVar25
                                                                                     >> 8) == '\0'),
                                                                             -((char)uVar25 == '\0')
                                                                            ))))))) &
                                                 0x101010101010101;
                                        uVar14 = CONCAT17(cVar21 + (char)(uVar14 >> 0x38),
                                                          CONCAT16(cVar20 + (char)(uVar14 >> 0x30),
                                                                   CONCAT15(cVar19 + (char)(uVar14 
                                                  >> 0x28),CONCAT14(cVar18 + (char)(uVar14 >> 0x20),
                                                                    CONCAT13(cVar17 + (char)(uVar14 
                                                  >> 0x18),CONCAT12(cVar16 + (char)(uVar14 >> 0x10),
                                                                    CONCAT11(cVar15 + (char)(uVar14 
                                                  >> 8),cVar11 + (char)uVar14)))))));
                                        uVar26 = CONCAT17(cVar35 + (char)(uVar26 >> 0x38),
                                                          CONCAT16(cVar33 + (char)(uVar26 >> 0x30),
                                                                   CONCAT15(cVar32 + (char)(uVar26 
                                                  >> 0x28),CONCAT14(cVar31 + (char)(uVar26 >> 0x20),
                                                                    CONCAT13(cVar30 + (char)(uVar26 
                                                  >> 0x18),CONCAT12(cVar29 + (char)(uVar26 >> 0x10),
                                                                    CONCAT11(cVar28 + (char)(uVar26 
                                                  >> 8),cVar23 + (char)uVar26)))))));
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          bVar10 = (byte)(uVar14 >> 8);
          bVar27 = (byte)(uVar14 >> 0x28);
          iVar7 = iVar7 + iVar36;
          bVar22 = (byte)(uVar26 >> 8);
          bVar34 = (byte)(uVar26 >> 0x28);
          puVar5 = (undefined8 *)((long)puVar5 + (long)iVar36);
          iVar36 = CONCAT13(uVar45,CONCAT12(uVar44,CONCAT11(uVar43,uVar42))) +
                   ((CONCAT12(bVar10,(short)uVar14) & 0xff00ff) & 0xffff) +
                   (CONCAT12(bVar27,(ushort)(byte)(uVar14 >> 0x20)) & 0xffff) +
                   ((CONCAT12(bVar22,(short)uVar26) & 0xff00ff) & 0xffff) +
                   (CONCAT12(bVar34,(ushort)(byte)(uVar26 >> 0x20)) & 0xffff);
          uVar42 = (undefined1)iVar36;
          uVar43 = (undefined1)((uint)iVar36 >> 8);
          uVar44 = (undefined1)((uint)iVar36 >> 0x10);
          uVar45 = (undefined1)((uint)iVar36 >> 0x18);
          iVar36 = CONCAT13(uVar49,CONCAT12(uVar48,CONCAT11(uVar47,uVar46))) +
                   (uint)bVar10 + (uint)bVar27 + (uint)bVar22 + (uint)bVar34;
          uVar46 = (undefined1)iVar36;
          uVar47 = (undefined1)((uint)iVar36 >> 8);
          uVar48 = (undefined1)((uint)iVar36 >> 0x10);
          uVar49 = (undefined1)((uint)iVar36 >> 0x18);
          iVar36 = CONCAT13(uVar53,CONCAT12(uVar52,CONCAT11(uVar51,uVar50))) +
                   (uint)(byte)(uVar14 >> 0x10) + (uint)(byte)(uVar14 >> 0x30) +
                   (uint)(byte)(uVar26 >> 0x10) + (uint)(byte)(uVar26 >> 0x30);
          uVar50 = (undefined1)iVar36;
          uVar51 = (undefined1)((uint)iVar36 >> 8);
          uVar52 = (undefined1)((uint)iVar36 >> 0x10);
          uVar53 = (undefined1)((uint)iVar36 >> 0x18);
          iVar36 = CONCAT13(uVar57,CONCAT12(uVar56,CONCAT11(uVar55,uVar54))) +
                   (uint)(byte)(uVar14 >> 0x18) + (uint)(byte)(uVar14 >> 0x38) +
                   (uint)(byte)(uVar26 >> 0x18) + (uint)(byte)(uVar26 >> 0x38);
          uVar54 = (undefined1)iVar36;
          uVar55 = (undefined1)((uint)iVar36 >> 8);
          uVar56 = (undefined1)((uint)iVar36 >> 0x10);
          uVar57 = (undefined1)((uint)iVar36 >> 0x18);
        } while (iVar7 < iVar3);
      }
      iVar9 = iVar9 + iVar3;
    } while (iVar9 < (int)uVar4);
    uVar25 = CONCAT17(uVar57,CONCAT16(uVar56,CONCAT15(uVar55,CONCAT14(uVar54,CONCAT13(uVar53,
                                                  CONCAT12(uVar52,CONCAT11(uVar51,uVar50)))))));
    uVar13 = CONCAT17(uVar49,CONCAT16(uVar48,CONCAT15(uVar47,CONCAT14(uVar46,CONCAT13(uVar45,
                                                  CONCAT12(uVar44,CONCAT11(uVar43,uVar42)))))));
  }
                    /* try { // try from 003a1064 to 004a1067 has its CatchHandler @ 003a1184 */
                    /* try { // try from 003a106c to 004a106f has its CatchHandler @ 003a0170 */
  local_10 = (int)uVar13;
  iStack_c = (int)((ulong)uVar13 >> 0x20);
  iStack_8 = (int)uVar25;
  iStack_4 = (int)((ulong)uVar25 >> 0x20);
  iVar3 = iVar9 - (iStack_c + local_10 + iStack_8 + iStack_4);
  if (iVar9 < (int)param_2) {
    lVar8 = (long)iVar9;
    uVar2 = param_2 - iVar9;
    uVar4 = -((int)param_1 + iVar9) & 0xf;
    uVar14 = (ulong)uVar4;
    if (uVar2 < uVar4) {
      uVar14 = (ulong)uVar2;
    }
    if (uVar2 < 0x12) {
      uVar14 = (ulong)uVar2;
    }
    uVar4 = (uint)uVar14;
    if (uVar4 != 0) {
      if (*(char *)((long)param_1 + lVar8) != '\0') {
        iVar3 = iVar3 + 1;
      }
      iVar7 = iVar9 + 1;
      if (uVar4 != 1) {
        if (*(char *)((long)param_1 + (long)(iVar9 + 1)) != '\0') {
          iVar3 = iVar3 + 1;
        }
        iVar7 = iVar9 + 2;
        if (uVar4 != 2) {
          if (*(char *)((long)param_1 + (long)(iVar9 + 2)) != '\0') {
            iVar3 = iVar3 + 1;
          }
          iVar7 = iVar9 + 3;
          if (uVar4 != 3) {
            if (*(char *)((long)param_1 + (long)(iVar9 + 3)) != '\0') {
              iVar3 = iVar3 + 1;
            }
            iVar7 = iVar9 + 4;
            if (uVar4 != 4) {
              if (*(char *)((long)param_1 + (long)(iVar9 + 4)) != '\0') {
                iVar3 = iVar3 + 1;
              }
              iVar7 = iVar9 + 5;
              if (uVar4 != 5) {
                if (*(char *)((long)param_1 + (long)(iVar9 + 5)) != '\0') {
                  iVar3 = iVar3 + 1;
                }
                iVar7 = iVar9 + 6;
                if (uVar4 != 6) {
                  if (*(char *)((long)param_1 + (long)(iVar9 + 6)) != '\0') {
                    iVar3 = iVar3 + 1;
                  }
                  iVar7 = iVar9 + 7;
                  if (uVar4 != 7) {
                    if (*(char *)((long)param_1 + (long)(iVar9 + 7)) != '\0') {
                      iVar3 = iVar3 + 1;
                    }
                    iVar7 = iVar9 + 8;
                    if (uVar4 != 8) {
                    /* catch() { ... } // from try @ 003a1064 with catch @ 003a1184 */
                      if (*(char *)((long)param_1 + (long)(iVar9 + 8)) != '\0') {
                        iVar3 = iVar3 + 1;
                      }
                      iVar7 = iVar9 + 9;
                      if (uVar4 != 9) {
                    /* try { // try from 003a1194 to 004a1197 has its CatchHandler @ 003a0170 */
                        if (*(char *)((long)param_1 + (long)(iVar9 + 9)) != '\0') {
                          iVar3 = iVar3 + 1;
                        }
                        iVar7 = iVar9 + 10;
                        if (uVar4 != 10) {
                          if (*(char *)((long)param_1 + (long)(iVar9 + 10)) != '\0') {
                            iVar3 = iVar3 + 1;
                          }
                          iVar7 = iVar9 + 0xb;
                          if (uVar4 != 0xb) {
                            if (*(char *)((long)param_1 + (long)(iVar9 + 0xb)) != '\0') {
                              iVar3 = iVar3 + 1;
                            }
                            iVar7 = iVar9 + 0xc;
                            if (uVar4 != 0xc) {
                              if (*(char *)((long)param_1 + (long)(iVar9 + 0xc)) != '\0') {
                                iVar3 = iVar3 + 1;
                              }
                              iVar7 = iVar9 + 0xd;
                              if (uVar4 != 0xd) {
                                if (*(char *)((long)param_1 + (long)(iVar9 + 0xd)) != '\0') {
                                  iVar3 = iVar3 + 1;
                                }
                                iVar7 = iVar9 + 0xe;
                                if (uVar4 != 0xe) {
                                  if (*(char *)((long)param_1 + (long)(iVar9 + 0xe)) != '\0') {
                                    iVar3 = iVar3 + 1;
                                  }
                                  iVar7 = iVar9 + 0xf;
                                  if (uVar4 != 0xf) {
                                    if (*(char *)((long)param_1 + (long)(iVar9 + 0xf)) != '\0') {
                                      iVar3 = iVar3 + 1;
                                    }
                                    iVar7 = iVar9 + 0x10;
                                    if ((uVar4 == 0x11) &&
                                       (iVar7 = iVar9 + 0x11,
                                       *(char *)((long)param_1 + (long)(iVar9 + 0x10)) != '\0')) {
                                      iVar3 = iVar3 + 1;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar9 = iVar7;
      if (uVar4 == uVar2) {
        return iVar3;
      }
    }
    uVar1 = ((uVar2 - uVar4) - 0x10 >> 4) + 1;
    iVar7 = uVar1 * 0x10;
    if (0xe < (uVar2 - 1) - uVar4) {
      iVar36 = 0;
      iVar37 = 0;
      iVar38 = 0;
      iVar39 = 0;
      uVar6 = 0;
      puVar5 = (undefined8 *)((long)param_1 + lVar8 + uVar14);
      do {
        uVar25 = puVar5[1];
        uVar13 = *puVar5;
        uVar6 = uVar6 + 1;
        uVar12 = CONCAT16(~-((char)((ulong)uVar13 >> 0x30) == '\0'),
                          CONCAT15(~-((char)((ulong)uVar13 >> 0x28) == '\0'),
                                   CONCAT14(~-((char)((ulong)uVar13 >> 0x20) == '\0'),
                                            CONCAT13(~-((char)((ulong)uVar13 >> 0x18) == '\0'),
                                                     CONCAT12(~-((char)((ulong)uVar13 >> 0x10) ==
                                                                '\0'),CONCAT11(~-((char)((ulong)
                                                  uVar13 >> 8) == '\0'),~-((char)uVar13 == '\0')))))
                                  )) & 0x1010101010101;
        uVar24 = CONCAT16(~-((char)((ulong)uVar25 >> 0x30) == '\0'),
                          CONCAT15(~-((char)((ulong)uVar25 >> 0x28) == '\0'),
                                   CONCAT14(~-((char)((ulong)uVar25 >> 0x20) == '\0'),
                                            CONCAT13(~-((char)((ulong)uVar25 >> 0x18) == '\0'),
                                                     CONCAT12(~-((char)((ulong)uVar25 >> 0x10) ==
                                                                '\0'),CONCAT11(~-((char)((ulong)
                                                  uVar25 >> 8) == '\0'),~-((char)uVar25 == '\0')))))
                                  )) & 0x1010101010101;
        bVar10 = (byte)(uVar12 >> 8);
        bVar27 = (byte)(uVar12 >> 0x28);
        bVar22 = (byte)(uVar24 >> 8);
        bVar34 = (byte)(uVar24 >> 0x28);
        iVar36 = (CONCAT12(bVar34,(ushort)(byte)(uVar24 >> 0x20)) & 0xffff) +
                 (CONCAT12(bVar22,(ushort)(byte)uVar24) & 0xffff) +
                 (CONCAT12(bVar27,(ushort)(byte)(uVar12 >> 0x20)) & 0xffff) +
                 (CONCAT12(bVar10,(ushort)(byte)uVar12) & 0xffff) + iVar36;
        iVar37 = (uint)bVar34 + (uint)bVar22 + (uint)bVar27 + (uint)bVar10 + iVar37;
        iVar38 = (uint)(byte)(uVar24 >> 0x30) +
                 (uint)(byte)(uVar24 >> 0x10) +
                 (uint)(byte)(uVar12 >> 0x30) + (uint)(byte)(uVar12 >> 0x10) + iVar38;
        iVar39 = (uint)(~-((char)((ulong)uVar25 >> 0x38) == '\0') & 1) +
                 (uint)(byte)(uVar24 >> 0x18) +
                 (uint)(~-((char)((ulong)uVar13 >> 0x38) == '\0') & 1) +
                 (uint)(byte)(uVar12 >> 0x18) + iVar39;
        puVar5 = puVar5 + 2;
      } while (uVar6 < uVar1);
      iVar9 = iVar9 + iVar7;
      iVar3 = iVar3 + iVar36 + iVar37 + iVar38 + iVar39;
      if (uVar2 - uVar4 == iVar7) {
        return iVar3;
      }
    }
    if (*(char *)((long)param_1 + (long)iVar9) != '\0') {
      iVar3 = iVar3 + 1;
    }
    if (iVar9 + 1 < (int)param_2) {
      if (*(char *)((long)param_1 + (long)(iVar9 + 1)) != '\0') {
        iVar3 = iVar3 + 1;
      }
      if (iVar9 + 2 < (int)param_2) {
        if (*(char *)((long)param_1 + (long)(iVar9 + 2)) != '\0') {
          iVar3 = iVar3 + 1;
        }
        if (iVar9 + 3 < (int)param_2) {
          if (*(char *)((long)param_1 + (long)(iVar9 + 3)) != '\0') {
            iVar3 = iVar3 + 1;
          }
          if (iVar9 + 4 < (int)param_2) {
            if (*(char *)((long)param_1 + (long)(iVar9 + 4)) != '\0') {
              iVar3 = iVar3 + 1;
            }
            if (iVar9 + 5 < (int)param_2) {
              if (*(char *)((long)param_1 + (long)(iVar9 + 5)) != '\0') {
                iVar3 = iVar3 + 1;
              }
              if (iVar9 + 6 < (int)param_2) {
                if (*(char *)((long)param_1 + (long)(iVar9 + 6)) != '\0') {
                  iVar3 = iVar3 + 1;
                }
                if (iVar9 + 7 < (int)param_2) {
                  if (*(char *)((long)param_1 + (long)(iVar9 + 7)) != '\0') {
                    iVar3 = iVar3 + 1;
                  }
                  if (iVar9 + 8 < (int)param_2) {
                    if (*(char *)((long)param_1 + (long)(iVar9 + 8)) != '\0') {
                      iVar3 = iVar3 + 1;
                    }
                    if (iVar9 + 9 < (int)param_2) {
                      if (*(char *)((long)param_1 + (long)(iVar9 + 9)) != '\0') {
                        iVar3 = iVar3 + 1;
                      }
                      if (iVar9 + 10 < (int)param_2) {
                        if (*(char *)((long)param_1 + (long)(iVar9 + 10)) != '\0') {
                          iVar3 = iVar3 + 1;
                        }
                        if (iVar9 + 0xb < (int)param_2) {
                          if (*(char *)((long)param_1 + (long)(iVar9 + 0xb)) != '\0') {
                            iVar3 = iVar3 + 1;
                          }
                          if (iVar9 + 0xc < (int)param_2) {
                            if (*(char *)((long)param_1 + (long)(iVar9 + 0xc)) != '\0') {
                              iVar3 = iVar3 + 1;
                            }
                            if (iVar9 + 0xd < (int)param_2) {
                              if (*(char *)((long)param_1 + (long)(iVar9 + 0xd)) != '\0') {
                                iVar3 = iVar3 + 1;
                              }
                              if ((iVar9 + 0xe < (int)param_2) &&
                                 (*(char *)((long)param_1 + (long)(iVar9 + 0xe)) != '\0')) {
                                iVar3 = iVar3 + 1;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return iVar3;
}


==================================================================

### FUNC 003a1464 (1052 bytes) name=FUN_003a1464

int FUN_003a1464(int *param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  int iVar13;
  int *piVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  ulong uVar18;
  int iVar19;
  uint uVar20;
  uint3 uVar21;
  int iVar22;
  undefined8 uVar23;
  uint3 uVar24;
  undefined8 uVar25;
  int iVar26;
  uint uVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  undefined1 uVar31;
  undefined1 uVar32;
  undefined1 uVar33;
  undefined1 uVar34;
  undefined1 uVar35;
  undefined1 uVar36;
  undefined1 uVar37;
  undefined1 uVar38;
  undefined1 uVar39;
  undefined1 uVar40;
  undefined1 uVar41;
  undefined1 uVar42;
  undefined1 uVar43;
  undefined1 uVar44;
  undefined1 uVar45;
  undefined1 uVar46;
  int iVar47;
  int iVar48;
  int iVar49;
  int iVar50;
  int iVar51;
  int iVar52;
  int iVar53;
  int iVar54;
  int iVar55;
  int iStack_c;
  int iStack_4;
  int *piVar7;
  int *piVar8;
  int *piVar9;
  int *piVar10;
  int *piVar11;
  int *piVar12;
  
  uVar27 = param_2 & 0xfffffff8;
  uVar31 = 0;
  uVar32 = 0;
  uVar33 = 0;
  uVar34 = 0;
  uVar35 = 0;
  uVar36 = 0;
  uVar37 = 0;
  uVar38 = 0;
  uVar39 = 0;
  uVar40 = 0;
  uVar41 = 0;
  uVar42 = 0;
  uVar43 = 0;
  uVar44 = 0;
  uVar45 = 0;
  uVar46 = 0;
  iVar13 = 0;
  if (0 < (int)uVar27) {
    do {
      iVar3 = uVar27 - iVar13;
      if (0x200000 < iVar3) {
        iVar3 = 0x200000;
      }
      if (0 < iVar3) {
        iVar19 = 0;
        do {
          iVar4 = iVar3 - iVar19;
          if (0x8000 < iVar4) {
            iVar4 = 0x8000;
          }
          if (iVar4 < 8) {
            uVar23 = 0;
            uVar25 = 0;
          }
          else {
            uVar23 = 0;
            uVar25 = 0;
            piVar14 = param_1 + 4;
            do {
              piVar6 = piVar14 + 8;
              uVar21 = CONCAT12(-((int)((ulong)*(undefined8 *)(piVar14 + -4) >> 0x20) == 0),
                                (ushort)(-((int)*(undefined8 *)(piVar14 + -4) == 0) & 1)) & 0x1ffff;
              uVar24 = CONCAT12(-((int)((ulong)*(undefined8 *)piVar14 >> 0x20) == 0),
                                (ushort)(-((int)*(undefined8 *)piVar14 == 0) & 1)) & 0x1ffff;
              uVar23 = CONCAT26((short)((ulong)uVar23 >> 0x30) +
                                (ushort)(-((int)((ulong)*(undefined8 *)(piVar14 + -2) >> 0x20) == 0)
                                        & 1),
                                CONCAT24((short)((ulong)uVar23 >> 0x20) +
                                         (ushort)(-((int)*(undefined8 *)(piVar14 + -2) == 0) & 1),
                                         CONCAT22((short)((ulong)uVar23 >> 0x10) +
                                                  (ushort)(byte)(uVar21 >> 0x10),
                                                  (short)uVar23 + (short)uVar21)));
              uVar25 = CONCAT26((short)((ulong)uVar25 >> 0x30) +
                                (ushort)(-((int)((ulong)*(undefined8 *)(piVar14 + 2) >> 0x20) == 0)
                                        & 1),
                                CONCAT24((short)((ulong)uVar25 >> 0x20) +
                                         (ushort)(-((int)*(undefined8 *)(piVar14 + 2) == 0) & 1),
                                         CONCAT22((short)((ulong)uVar25 >> 0x10) +
                                                  (ushort)(byte)(uVar24 >> 0x10),
                                                  (short)uVar25 + (short)uVar24)));
              piVar14 = piVar6;
            } while (piVar6 != param_1 + (ulong)(iVar4 - 8U >> 3) * 8 + 0xc);
          }
          iVar19 = iVar19 + iVar4;
          param_1 = param_1 + iVar4;
          iVar4 = CONCAT13(uVar34,CONCAT12(uVar33,CONCAT11(uVar32,uVar31))) +
                  (uint)(ushort)uVar23 + (uint)(ushort)uVar25;
          uVar31 = (undefined1)iVar4;
          uVar32 = (undefined1)((uint)iVar4 >> 8);
          uVar33 = (undefined1)((uint)iVar4 >> 0x10);
          uVar34 = (undefined1)((uint)iVar4 >> 0x18);
          iVar4 = CONCAT13(uVar38,CONCAT12(uVar37,CONCAT11(uVar36,uVar35))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x10) + (uint)(ushort)((ulong)uVar25 >> 0x10);
          uVar35 = (undefined1)iVar4;
          uVar36 = (undefined1)((uint)iVar4 >> 8);
          uVar37 = (undefined1)((uint)iVar4 >> 0x10);
          uVar38 = (undefined1)((uint)iVar4 >> 0x18);
          iVar4 = CONCAT13(uVar42,CONCAT12(uVar41,CONCAT11(uVar40,uVar39))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x20) + (uint)(ushort)((ulong)uVar25 >> 0x20);
          uVar39 = (undefined1)iVar4;
          uVar40 = (undefined1)((uint)iVar4 >> 8);
          uVar41 = (undefined1)((uint)iVar4 >> 0x10);
          uVar42 = (undefined1)((uint)iVar4 >> 0x18);
          iVar4 = CONCAT13(uVar46,CONCAT12(uVar45,CONCAT11(uVar44,uVar43))) +
                  (uint)(ushort)((ulong)uVar23 >> 0x30) + (uint)(ushort)((ulong)uVar25 >> 0x30);
          uVar43 = (undefined1)iVar4;
          uVar44 = (undefined1)((uint)iVar4 >> 8);
          uVar45 = (undefined1)((uint)iVar4 >> 0x10);
          uVar46 = (undefined1)((uint)iVar4 >> 0x18);
        } while (iVar19 < iVar3);
      }
      iVar13 = iVar13 + iVar3;
    } while (iVar13 < (int)uVar27);
  }
  iVar19 = param_2 - iVar13;
  iVar3 = iVar19 + -3;
  iVar5 = CONCAT13(uVar42,CONCAT12(uVar41,CONCAT11(uVar40,uVar39)));
  iVar4 = CONCAT13(uVar34,CONCAT12(uVar33,CONCAT11(uVar32,uVar31)));
  iStack_c = (int)(CONCAT17(uVar38,CONCAT16(uVar37,CONCAT15(uVar36,CONCAT14(uVar35,iVar4)))) >> 0x20
                  );
  iStack_4 = (int)(CONCAT17(uVar46,CONCAT16(uVar45,CONCAT15(uVar44,CONCAT14(uVar43,iVar5)))) >> 0x20
                  );
  if (iVar3 < 1) {
    uVar27 = 0;
    uVar15 = uVar27;
  }
  else {
    uVar27 = iVar19 - 4U >> 2;
    iVar22 = uVar27 + 1;
    uVar15 = (uVar27 - 3 >> 2) + 1;
    if (iVar19 - 4U < 0xc) {
      uVar27 = 0;
      uVar1 = uVar27;
LAB_003a161c:
      uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
      uVar15 = uVar1 + 4;
      uVar17 = (uint)(*(int *)((long)param_1 + uVar18) != 0);
      if (*(int *)((long)param_1 + uVar18 + 4) != 0) {
        uVar17 = uVar17 + 1;
      }
      if (*(int *)((long)param_1 + uVar18 + 8) != 0) {
        uVar17 = uVar17 + 1;
      }
      if (*(int *)((long)param_1 + uVar18 + 0xc) != 0) {
        uVar17 = uVar17 + 1;
      }
      uVar27 = uVar27 + uVar17;
      if ((int)uVar15 < iVar3) {
        uVar18 = -(ulong)(uVar15 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar15 << 2;
        uVar1 = uVar1 + 8;
        uVar15 = (uint)(*(int *)((long)param_1 + uVar18) != 0);
        if (*(int *)((long)param_1 + uVar18 + 4) != 0) {
          uVar15 = uVar15 + 1;
        }
        if (*(int *)((long)param_1 + uVar18 + 8) != 0) {
          uVar15 = uVar15 + 1;
        }
        if (*(int *)((long)param_1 + uVar18 + 0xc) != 0) {
          uVar15 = uVar15 + 1;
        }
        uVar27 = uVar27 + uVar15;
        if ((int)uVar1 < iVar3) {
          uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
          uVar15 = (uint)(*(int *)((long)param_1 + uVar18) != 0);
          if (*(int *)((long)param_1 + uVar18 + 4) != 0) {
            uVar15 = uVar15 + 1;
          }
          if (*(int *)((long)param_1 + uVar18 + 8) != 0) {
            uVar15 = uVar15 + 1;
          }
          if (*(int *)((long)param_1 + uVar18 + 0xc) != 0) {
            uVar15 = uVar15 + 1;
          }
          uVar27 = uVar27 + uVar15;
        }
      }
    }
    else {
      iVar26 = 0;
      iVar28 = 0;
      iVar29 = 0;
      iVar30 = 0;
      uVar27 = 0;
      piVar14 = param_1;
      do {
        iVar47 = *piVar14;
        piVar6 = piVar14 + 1;
        piVar7 = piVar14 + 2;
        piVar8 = piVar14 + 3;
        iVar48 = piVar14[4];
        iVar50 = piVar14[5];
        iVar52 = piVar14[6];
        iVar54 = piVar14[7];
        piVar9 = piVar14 + 8;
        piVar10 = piVar14 + 9;
        piVar11 = piVar14 + 10;
        piVar12 = piVar14 + 0xb;
        iVar49 = piVar14[0xc];
        iVar51 = piVar14[0xd];
        iVar53 = piVar14[0xe];
        iVar55 = piVar14[0xf];
        piVar14 = piVar14 + 0x10;
        uVar27 = uVar27 + 1;
        iVar26 = iVar26 + (uint)(~-(iVar47 == 0) & 1) + (uint)(~-(*piVar6 == 0) & 1) +
                          (uint)(~-(*piVar7 == 0) & 1) + (uint)(~-(*piVar8 == 0) & 1);
        iVar28 = iVar28 + (uint)(~-((int)(CONCAT17((char)((uint)iVar48 >> 0x18),
                                                   CONCAT16((char)((uint)iVar48 >> 0x10),
                                                            CONCAT15((char)((uint)iVar48 >> 8),
                                                                     CONCAT14((char)iVar48,iVar47)))
                                                  ) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar50 >> 0x18),
                                                   CONCAT16((char)((uint)iVar50 >> 0x10),
                                                            CONCAT15((char)((uint)iVar50 >> 8),
                                                                     CONCAT14((char)iVar50,*piVar6))
                                                           )) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar52 >> 0x18),
                                                   CONCAT16((char)((uint)iVar52 >> 0x10),
                                                            CONCAT15((char)((uint)iVar52 >> 8),
                                                                     CONCAT14((char)iVar52,*piVar7))
                                                           )) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar54 >> 0x18),
                                                   CONCAT16((char)((uint)iVar54 >> 0x10),
                                                            CONCAT15((char)((uint)iVar54 >> 8),
                                                                     CONCAT14((char)iVar54,*piVar8))
                                                           )) >> 0x20) == 0) & 1);
        iVar29 = iVar29 + (uint)(~-(*piVar9 == 0) & 1) + (uint)(~-(*piVar10 == 0) & 1) +
                          (uint)(~-(*piVar11 == 0) & 1) + (uint)(~-(*piVar12 == 0) & 1);
        iVar30 = iVar30 + (uint)(~-((int)(CONCAT17((char)((uint)iVar49 >> 0x18),
                                                   CONCAT16((char)((uint)iVar49 >> 0x10),
                                                            CONCAT15((char)((uint)iVar49 >> 8),
                                                                     CONCAT14((char)iVar49,*piVar9))
                                                           )) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar51 >> 0x18),
                                                   CONCAT16((char)((uint)iVar51 >> 0x10),
                                                            CONCAT15((char)((uint)iVar51 >> 8),
                                                                     CONCAT14((char)iVar51,*piVar10)
                                                                    ))) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar53 >> 0x18),
                                                   CONCAT16((char)((uint)iVar53 >> 0x10),
                                                            CONCAT15((char)((uint)iVar53 >> 8),
                                                                     CONCAT14((char)iVar53,*piVar11)
                                                                    ))) >> 0x20) == 0) & 1) +
                          (uint)(~-((int)(CONCAT17((char)((uint)iVar55 >> 0x18),
                                                   CONCAT16((char)((uint)iVar55 >> 0x10),
                                                            CONCAT15((char)((uint)iVar55 >> 8),
                                                                     CONCAT14((char)iVar55,*piVar12)
                                                                    ))) >> 0x20) == 0) & 1);
      } while (uVar27 < uVar15);
      uVar27 = iVar26 + iVar28 + iVar29 + iVar30;
      uVar1 = uVar15 * 0x10;
      if (uVar15 * 4 != iVar22) goto LAB_003a161c;
    }
    uVar15 = iVar22 * 4;
  }
  if ((int)uVar15 < iVar19) {
    uVar17 = iVar19 - uVar15;
    piVar14 = param_1 + (int)uVar15;
    uVar1 = -((uint)((ulong)piVar14 >> 2) & 3) & 3;
    uVar18 = (ulong)uVar1;
    if (uVar17 < uVar1) {
      uVar18 = (ulong)uVar17;
    }
    if (uVar17 < 6) {
      uVar18 = (ulong)uVar17;
    }
    uVar16 = (uint)uVar18;
    uVar1 = uVar15;
    if (uVar16 != 0) {
      uVar1 = uVar15 + 1;
      if (*piVar14 != 0) {
        uVar27 = uVar27 + 1;
      }
      if (uVar16 != 1) {
        uVar1 = uVar15 + 2;
        if (piVar14[1] != 0) {
          uVar27 = uVar27 + 1;
        }
        if (uVar16 != 2) {
          uVar1 = uVar15 + 3;
          if (piVar14[2] != 0) {
            uVar27 = uVar27 + 1;
          }
          if (uVar16 != 3) {
            uVar1 = uVar15 + 4;
            if (piVar14[3] != 0) {
              uVar27 = uVar27 + 1;
            }
            if ((uVar16 == 5) && (uVar1 = uVar15 + 5, piVar14[4] != 0)) {
              uVar27 = uVar27 + 1;
            }
          }
        }
      }
      if (uVar16 == uVar17) goto LAB_003a1848;
    }
    uVar2 = ((uVar17 - uVar16) - 4 >> 2) + 1;
    iVar3 = uVar2 * 4;
    if (2 < (uVar17 - 1) - uVar16) {
      iVar22 = 0;
      iVar26 = 0;
      iVar28 = 0;
      iVar29 = 0;
      uVar20 = 0;
      piVar14 = param_1 + uVar18 + (long)(int)uVar15;
      do {
        uVar20 = uVar20 + 1;
        iVar22 = iVar22 + (uint)(~-((int)*(undefined8 *)piVar14 == 0) & 1);
        iVar26 = iVar26 + (uint)(~-((int)((ulong)*(undefined8 *)piVar14 >> 0x20) == 0) & 1);
        iVar28 = iVar28 + (uint)(~-((int)*(undefined8 *)(piVar14 + 2) == 0) & 1);
        iVar29 = iVar29 + (uint)(~-((int)((ulong)*(undefined8 *)(piVar14 + 2) >> 0x20) == 0) & 1);
        piVar14 = piVar14 + 4;
      } while (uVar20 < uVar2);
      uVar1 = uVar1 + iVar3;
      uVar27 = uVar27 + iVar22 + iVar26 + iVar28 + iVar29;
      if (iVar3 == uVar17 - uVar16) goto LAB_003a1848;
    }
    uVar18 = -(ulong)(uVar1 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar1 << 2;
    if (*(int *)((long)param_1 + uVar18) != 0) {
      uVar27 = uVar27 + 1;
    }
    if ((int)(uVar1 + 1) < iVar19) {
      if (*(int *)((long)param_1 + uVar18 + 4) != 0) {
        uVar27 = uVar27 + 1;
      }
      if (((int)(uVar1 + 2) < iVar19) && (*(int *)((long)param_1 + uVar18 + 8) != 0)) {
        uVar27 = uVar27 + 1;
      }
    }
  }
LAB_003a1848:
  return (iVar13 - (iStack_c + iVar4 + iVar5 + iStack_4)) + uVar27;
}


==================================================================

### FUNC 003a1880 (16 bytes) name=FUN_003a1880

void FUN_003a1880(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f76c0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 003a1890 (44 bytes) name=FUN_003a1890

void FUN_003a1890(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f76c0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003a18bc (252 bytes) name=FUN_003a18bc

void FUN_003a18bc(undefined8 param_1,long param_2,long param_3,int param_4,undefined4 param_5,
                 undefined4 *param_6,long param_7)

{
  long lVar1;
  undefined4 uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  
  if (param_7 == 0) {
    if (0 < param_4) {
      puVar4 = param_6;
      do {
        uVar2 = FUN_003cd884(param_1,param_2,param_5);
        puVar5 = puVar4 + 1;
        *puVar4 = uVar2;
        param_2 = param_2 + param_3;
        puVar4 = puVar5;
      } while (puVar5 != param_6 + (ulong)(param_4 - 1) + 1);
      return;
    }
  }
  else if (0 < param_4) {
    lVar1 = (ulong)(param_4 - 1) + 1;
    lVar3 = 0;
    do {
      while (*(char *)(param_7 + lVar3) != '\0') {
        uVar2 = FUN_003cd884(param_1,param_2,param_5);
        param_6[lVar3] = uVar2;
        lVar3 = lVar3 + 1;
        param_2 = param_2 + param_3;
        if (lVar3 == lVar1) {
          return;
        }
      }
      param_6[lVar3] = 0x7fffffff;
      lVar3 = lVar3 + 1;
      param_2 = param_2 + param_3;
    } while (lVar3 != lVar1);
  }
  return;
}


==================================================================

### FUNC 003a19b8 (260 bytes) name=FUN_003a19b8

void FUN_003a19b8(undefined8 param_1,long param_2,long param_3,int param_4,undefined4 param_5,
                 undefined4 *param_6,long param_7)

{
  long lVar1;
  undefined4 uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  
  if (param_7 == 0) {
    if (0 < param_4) {
      puVar4 = param_6;
      do {
        uVar2 = FUN_003cdc00(param_1,param_2,param_5,2);
        puVar5 = puVar4 + 1;
        *puVar4 = uVar2;
        param_2 = param_2 + param_3;
        puVar4 = puVar5;
      } while (puVar5 != param_6 + (ulong)(param_4 - 1) + 1);
      return;
    }
  }
  else if (0 < param_4) {
    lVar1 = (ulong)(param_4 - 1) + 1;
    lVar3 = 0;
    do {
      while (*(char *)(param_7 + lVar3) != '\0') {
        uVar2 = FUN_003cdc00(param_1,param_2,param_5,2);
        param_6[lVar3] = uVar2;
        lVar3 = lVar3 + 1;
        param_2 = param_2 + param_3;
        if (lVar3 == lVar1) {
          return;
        }
      }
      param_6[lVar3] = 0x7fffffff;
      lVar3 = lVar3 + 1;
      param_2 = param_2 + param_3;
    } while (lVar3 != lVar1);
  }
  return;
}


==================================================================

### FUNC 003a1abc (10472 bytes) name=FUN_003a1abc

int FUN_003a1abc(byte *param_1,long param_2,byte *param_3,int param_4,int param_5)

{
  char *pcVar1;
  byte *pbVar2;
  byte *pbVar3;
  byte *pbVar4;
  byte *pbVar5;
  byte *pbVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  uint uVar53;
  uint uVar54;
  uint uVar55;
  byte bVar56;
  byte bVar57;
  byte bVar58;
  byte bVar59;
  byte bVar60;
  byte bVar61;
  uint uVar62;
  uint3 uVar63;
  uint3 uVar64;
  uint uVar65;
  byte *pbVar66;
  byte *pbVar67;
  byte *pbVar68;
  int iVar69;
  long lVar70;
  long lVar71;
  long lVar72;
  byte *pbVar73;
  long lVar74;
  long lVar75;
  int iVar76;
  int iVar77;
  byte *pbVar78;
  long lVar79;
  long lVar80;
  long lVar81;
  long lVar82;
  long lVar83;
  long lVar84;
  long lVar85;
  long lVar86;
  long lVar87;
  byte *pbVar88;
  long lVar89;
  long lVar90;
  long lVar91;
  long lVar92;
  byte bVar93;
  byte bVar94;
  byte bVar95;
  byte bVar96;
  int iVar97;
  int iVar98;
  int iVar99;
  undefined8 uVar100;
  undefined8 uVar101;
  uint uVar102;
  undefined8 uVar103;
  undefined8 uVar104;
  undefined8 uVar105;
  undefined8 uVar106;
  int iVar107;
  int iVar108;
  int iVar109;
  int iVar110;
  undefined8 uVar111;
  undefined8 uVar112;
  int iVar113;
  uint uVar114;
  int iVar115;
  int iVar116;
  int iVar117;
  int iVar118;
  uint uVar119;
  int iVar120;
  int iVar121;
  int iVar122;
  int iVar123;
  long lVar124;
  int iVar125;
  int iVar126;
  undefined8 uVar127;
  int iVar128;
  long lVar129;
  int iVar130;
  int local_10 [4];
  
  if (param_2 != 0) {
    if (param_5 == 1) {
      iVar76 = *(int *)param_3;
      if (param_4 < 1) {
        iVar77 = 0;
      }
      else {
        lVar75 = 0;
        iVar77 = 0;
        do {
          if (*(char *)(param_2 + lVar75) != '\0') {
            iVar77 = iVar77 + 1;
            iVar76 = iVar76 + (uint)param_1[lVar75];
          }
          lVar75 = lVar75 + 1;
        } while ((int)lVar75 < param_4);
      }
      *(int *)param_3 = iVar76;
      return iVar77;
    }
    if (param_5 == 3) {
      iVar76 = *(int *)param_3;
      iVar77 = *(int *)(param_3 + 4);
      iVar69 = *(int *)(param_3 + 8);
      if (param_4 < 1) {
        iVar98 = 0;
      }
      else {
        lVar75 = 0;
        iVar98 = 0;
        do {
          pcVar1 = (char *)(param_2 + lVar75);
          lVar75 = lVar75 + 1;
          if (*pcVar1 != '\0') {
            iVar98 = iVar98 + 1;
            iVar76 = iVar76 + (uint)*param_1;
            iVar77 = iVar77 + (uint)param_1[1];
            iVar69 = iVar69 + (uint)param_1[2];
          }
          param_1 = param_1 + 3;
        } while ((int)lVar75 < param_4);
      }
      *(int *)param_3 = iVar76;
      *(int *)(param_3 + 4) = iVar77;
      *(int *)(param_3 + 8) = iVar69;
      return iVar98;
    }
    if (param_4 < 1) {
      return 0;
    }
    uVar119 = param_5 - 4;
    iVar98 = param_5 + -3;
    lVar75 = 0;
    uVar102 = uVar119 >> 2;
    uVar53 = uVar102 + 1;
    uVar114 = (uVar102 - 3 >> 2) + 1;
    iVar77 = uVar114 * 0x10;
    iVar76 = 0;
    iVar69 = uVar53 * 4;
    if (uVar119 < 0xc) {
      iVar77 = 0;
    }
    if (iVar98 < 1) {
      iVar69 = 0;
    }
    lVar90 = (long)iVar69;
    lVar129 = NEON_shl((ulong)uVar53,2);
    uVar62 = param_5 - iVar69;
    lVar70 = (long)iVar77;
    lVar85 = lVar70 * 4;
    lVar71 = (long)(iVar77 + 4);
    lVar83 = lVar71 * 4;
    lVar72 = (long)(iVar77 + 8);
    iVar97 = iVar69 + 1;
    lVar81 = lVar72 * 4;
    iVar99 = iVar69 + 2;
    pbVar78 = param_3 + lVar90 * 4;
    uVar54 = -((uint)((ulong)pbVar78 >> 2) & 3) & 3;
    uVar55 = uVar62;
    if (uVar54 < uVar62) {
      uVar55 = uVar54;
    }
    uVar54 = ((uVar62 - uVar55) - 0x10 >> 4) + 1;
    iVar130 = uVar54 * 0x10;
    do {
      if (*(char *)(param_2 + lVar75) != '\0') {
        if (0 < iVar98) {
          if ((param_3 < param_1 + lVar129 && param_1 < param_3 + (ulong)uVar53 * 0x10) ||
             (uVar53 < 4)) {
            pbVar88 = param_1 + 1;
            pbVar73 = param_3;
            do {
              pbVar67 = pbVar88 + 4;
              bVar93 = pbVar88[-1];
              *(uint *)(pbVar73 + 4) = (uint)*pbVar88 + *(int *)(pbVar73 + 4);
              *(uint *)pbVar73 = *(int *)pbVar73 + (uint)bVar93;
              bVar93 = pbVar88[1];
              *(uint *)(pbVar73 + 0xc) = (uint)pbVar88[2] + *(int *)(pbVar73 + 0xc);
              *(uint *)(pbVar73 + 8) = *(int *)(pbVar73 + 8) + (uint)bVar93;
              pbVar88 = pbVar67;
              pbVar73 = pbVar73 + 0x10;
            } while (pbVar67 != param_1 + (ulong)uVar102 * 4 + 5);
          }
          else {
            if (0xb < uVar119) {
              pbVar88 = param_3 + 0x10;
              pbVar73 = param_3 + 0x20;
              pbVar67 = param_3 + 0x30;
              uVar65 = 0;
              pbVar66 = param_1;
              pbVar68 = param_3;
              do {
                uVar100 = *(undefined8 *)(pbVar66 + 8);
                uVar101 = *(undefined8 *)pbVar66;
                uVar65 = uVar65 + 1;
                uVar112 = *(undefined8 *)(pbVar88 + 8);
                uVar111 = *(undefined8 *)pbVar88;
                uVar106 = *(undefined8 *)(pbVar73 + 8);
                uVar105 = *(undefined8 *)pbVar73;
                uVar104 = *(undefined8 *)(pbVar67 + 8);
                uVar103 = *(undefined8 *)pbVar67;
                uVar63 = CONCAT12((char)((ulong)uVar101 >> 8),(short)uVar101) & 0xff00ff;
                bVar93 = (byte)((ulong)uVar101 >> 0x28);
                uVar64 = CONCAT12((char)((ulong)uVar100 >> 8),(short)uVar100) & 0xff00ff;
                bVar94 = (byte)((ulong)uVar100 >> 0x28);
                *(ulong *)(pbVar68 + 8) =
                     CONCAT44((int)((ulong)*(undefined8 *)(pbVar68 + 8) >> 0x20) +
                              (uint)(byte)((ulong)uVar101 >> 0x18),
                              (int)*(undefined8 *)(pbVar68 + 8) +
                              (uint)(byte)((ulong)uVar101 >> 0x10));
                *(ulong *)pbVar68 =
                     CONCAT44((int)((ulong)*(undefined8 *)pbVar68 >> 0x20) +
                              (uint)(byte)(uVar63 >> 0x10),
                              (int)*(undefined8 *)pbVar68 + (uVar63 & 0xffff));
                pbVar68 = pbVar68 + 0x40;
                *(ulong *)(pbVar88 + 8) =
                     CONCAT44((int)((ulong)uVar112 >> 0x20) + (uint)(byte)((ulong)uVar101 >> 0x38),
                              (int)uVar112 + (uint)(byte)((ulong)uVar101 >> 0x30));
                *(ulong *)pbVar88 =
                     CONCAT44((int)((ulong)uVar111 >> 0x20) + (uint)bVar93,
                              (int)uVar111 +
                              (CONCAT12(bVar93,(ushort)(byte)((ulong)uVar101 >> 0x20)) & 0xffff));
                pbVar88 = pbVar88 + 0x40;
                *(ulong *)(pbVar73 + 8) =
                     CONCAT44((int)((ulong)uVar106 >> 0x20) + (uint)(byte)((ulong)uVar100 >> 0x18),
                              (int)uVar106 + (uint)(byte)((ulong)uVar100 >> 0x10));
                *(ulong *)pbVar73 =
                     CONCAT44((int)((ulong)uVar105 >> 0x20) + (uint)(byte)(uVar64 >> 0x10),
                              (int)uVar105 + (uVar64 & 0xffff));
                pbVar73 = pbVar73 + 0x40;
                *(ulong *)(pbVar67 + 8) =
                     CONCAT44((int)((ulong)uVar104 >> 0x20) + (uint)(byte)((ulong)uVar100 >> 0x38),
                              (int)uVar104 + (uint)(byte)((ulong)uVar100 >> 0x30));
                *(ulong *)pbVar67 =
                     CONCAT44((int)((ulong)uVar103 >> 0x20) + (uint)bVar94,
                              (int)uVar103 +
                              (CONCAT12(bVar94,(ushort)(byte)((ulong)uVar100 >> 0x20)) & 0xffff));
                pbVar67 = pbVar67 + 0x40;
                pbVar66 = pbVar66 + 0x10;
              } while (uVar65 < uVar114);
              if (uVar53 == uVar114 * 4) goto LAB_003a1fd0;
            }
            bVar93 = param_1[lVar70 + 1];
            *(uint *)(param_3 + lVar85) = *(int *)(param_3 + lVar85) + (uint)param_1[lVar70];
            *(uint *)(param_3 + lVar85 + 4) = (uint)bVar93 + *(int *)(param_3 + lVar85 + 4);
            bVar93 = param_1[lVar70 + 3];
            *(uint *)(param_3 + lVar85 + 8) =
                 *(int *)(param_3 + lVar85 + 8) + (uint)param_1[lVar70 + 2];
            *(uint *)(param_3 + lVar85 + 0xc) = (uint)bVar93 + *(int *)(param_3 + lVar85 + 0xc);
            if (iVar77 + 4 < iVar98) {
              bVar93 = param_1[lVar71 + 1];
              *(uint *)(param_3 + lVar83) = *(int *)(param_3 + lVar83) + (uint)param_1[lVar71];
              *(uint *)(param_3 + lVar83 + 4) = (uint)bVar93 + *(int *)(param_3 + lVar83 + 4);
                    /* catch() { ... } // from try @ 003a4be8 with catch @ 003a1f40 */
              bVar93 = param_1[lVar71 + 3];
              *(uint *)(param_3 + lVar83 + 8) =
                   *(int *)(param_3 + lVar83 + 8) + (uint)param_1[lVar71 + 2];
              *(uint *)(param_3 + lVar83 + 0xc) = (uint)bVar93 + *(int *)(param_3 + lVar83 + 0xc);
              if (iVar77 + 8 < iVar98) {
                bVar93 = param_1[lVar72 + 1];
                *(uint *)(param_3 + lVar81) = *(int *)(param_3 + lVar81) + (uint)param_1[lVar72];
                *(uint *)(param_3 + lVar81 + 4) = (uint)bVar93 + *(int *)(param_3 + lVar81 + 4);
                    /* try { // try from 003a1fa0 to 004a1fc3 has its CatchHandler @ 003a4bc8 */
                bVar93 = param_1[lVar72 + 3];
                *(uint *)(param_3 + lVar81 + 8) =
                     *(int *)(param_3 + lVar81 + 8) + (uint)param_1[lVar72 + 2];
                *(uint *)(param_3 + lVar81 + 0xc) = (uint)bVar93 + *(int *)(param_3 + lVar81 + 0xc);
              }
            }
          }
        }
LAB_003a1fd0:
        if (iVar69 < param_5) {
          pbVar88 = param_1 + lVar90;
          if ((pbVar78 < param_1 + lVar90 + (ulong)uVar62 &&
               pbVar88 < param_3 + (lVar90 + (ulong)uVar62) * 4) || (uVar62 < 0x13)) {
            lVar74 = 0;
            do {
              *(uint *)(pbVar78 + lVar74 * 4) =
                   *(int *)(pbVar78 + lVar74 * 4) + (uint)pbVar88[lVar74];
              lVar74 = lVar74 + 1;
            } while (lVar74 != (ulong)(uint)((param_5 + -1) - iVar69) + 1);
            iVar76 = iVar76 + 1;
            goto LAB_003a2340;
          }
          iVar107 = iVar69;
          if (((uVar55 != 0) &&
              (*(uint *)pbVar78 = *(int *)pbVar78 + (uint)*pbVar88, iVar107 = iVar97, uVar55 != 1))
             && (*(uint *)(param_3 + (long)iVar97 * 4) =
                      *(int *)(param_3 + (long)iVar97 * 4) + (uint)param_1[iVar97], iVar107 = iVar99
                , uVar55 == 3)) {
            *(uint *)(param_3 + (long)iVar99 * 4) =
                 *(int *)(param_3 + (long)iVar99 * 4) + (uint)param_1[iVar99];
            iVar107 = iVar69 + 3;
          }
          if (0xe < (uVar62 - 1) - uVar55) {
            uVar65 = 0;
            pbVar88 = param_3 + (lVar90 + (ulong)uVar55) * 4;
            pbVar73 = param_3 + lVar90 * 4 + (ulong)uVar55 * 4;
            pbVar67 = param_1 + lVar90 + (ulong)uVar55;
            do {
              uVar103 = *(undefined8 *)pbVar88;
              uVar65 = uVar65 + 1;
              uVar111 = *(undefined8 *)(pbVar88 + 0x28);
              uVar106 = *(undefined8 *)(pbVar88 + 0x20);
              uVar100 = *(undefined8 *)(pbVar67 + 8);
              uVar101 = *(undefined8 *)pbVar67;
              uVar63 = CONCAT12((char)((ulong)uVar101 >> 8),(short)uVar101) & 0xff00ff;
              bVar93 = (byte)((ulong)uVar101 >> 0x28);
              uVar64 = CONCAT12((char)((ulong)uVar100 >> 8),(short)uVar100) & 0xff00ff;
              bVar94 = (byte)((ulong)uVar100 >> 0x28);
              uVar127 = *(undefined8 *)(pbVar88 + 0x18);
              uVar112 = *(undefined8 *)(pbVar88 + 0x10);
              uVar105 = *(undefined8 *)(pbVar88 + 0x38);
              uVar104 = *(undefined8 *)(pbVar88 + 0x30);
                    /* try { // try from 003a20e8 to 004a20eb has its CatchHandler @ 003a4c4c */
              *(ulong *)(pbVar73 + 8) =
                   CONCAT44((int)((ulong)*(undefined8 *)(pbVar88 + 8) >> 0x20) +
                            (uint)(byte)((ulong)uVar101 >> 0x18),
                            (int)*(undefined8 *)(pbVar88 + 8) + (uint)(byte)((ulong)uVar101 >> 0x10)
                           );
              *(ulong *)pbVar73 =
                   CONCAT44((int)((ulong)uVar103 >> 0x20) + (uint)(byte)(uVar63 >> 0x10),
                            (int)uVar103 + (uVar63 & 0xffff));
              *(ulong *)(pbVar73 + 0x18) =
                   CONCAT44((uint)(byte)((ulong)uVar101 >> 0x38) + (int)((ulong)uVar127 >> 0x20),
                            (uint)(byte)((ulong)uVar101 >> 0x30) + (int)uVar127);
              *(ulong *)(pbVar73 + 0x10) =
                   CONCAT44((uint)bVar93 + (int)((ulong)uVar112 >> 0x20),
                            (CONCAT12(bVar93,(ushort)(byte)((ulong)uVar101 >> 0x20)) & 0xffff) +
                            (int)uVar112);
              *(ulong *)(pbVar73 + 0x28) =
                   CONCAT44((uint)(byte)((ulong)uVar100 >> 0x18) + (int)((ulong)uVar111 >> 0x20),
                            (uint)(byte)((ulong)uVar100 >> 0x10) + (int)uVar111);
              *(ulong *)(pbVar73 + 0x20) =
                   CONCAT44((uint)(byte)(uVar64 >> 0x10) + (int)((ulong)uVar106 >> 0x20),
                            (uVar64 & 0xffff) + (int)uVar106);
              *(ulong *)(pbVar73 + 0x38) =
                   CONCAT44((uint)(byte)((ulong)uVar100 >> 0x38) + (int)((ulong)uVar105 >> 0x20),
                            (uint)(byte)((ulong)uVar100 >> 0x30) + (int)uVar105);
              *(ulong *)(pbVar73 + 0x30) =
                   CONCAT44((uint)bVar94 + (int)((ulong)uVar104 >> 0x20),
                            (CONCAT12(bVar94,(ushort)(byte)((ulong)uVar100 >> 0x20)) & 0xffff) +
                            (int)uVar104);
              pbVar88 = pbVar88 + 0x40;
              pbVar73 = pbVar73 + 0x40;
              pbVar67 = pbVar67 + 0x10;
            } while (uVar65 < uVar54);
            iVar107 = iVar107 + iVar130;
            if (uVar62 - uVar55 == iVar130) goto LAB_003a233c;
          }
          iVar108 = iVar107 + 1;
          lVar74 = (long)iVar107 * 4;
                    /* try { // try from 003a2144 to 004a2147 has its CatchHandler @ 003a4c00 */
          *(uint *)(param_3 + lVar74) = *(int *)(param_3 + lVar74) + (uint)param_1[iVar107];
                    /* try { // try from 003a214c to 004a21c7 has its CatchHandler @ 003a4c4c */
          if (iVar108 < param_5) {
            iVar118 = iVar107 + 2;
            lVar74 = (long)iVar108 * 4;
            *(uint *)(param_3 + lVar74) = *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
            if (iVar118 < param_5) {
              iVar108 = iVar107 + 3;
              lVar74 = (long)iVar118 * 4;
              *(uint *)(param_3 + lVar74) = *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
              if (iVar108 < param_5) {
                iVar118 = iVar107 + 4;
                lVar74 = (long)iVar108 * 4;
                *(uint *)(param_3 + lVar74) = *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                if (iVar118 < param_5) {
                  iVar108 = iVar107 + 5;
                  lVar74 = (long)iVar118 * 4;
                  *(uint *)(param_3 + lVar74) = *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
                  if (iVar108 < param_5) {
                    iVar118 = iVar107 + 6;
                    lVar74 = (long)iVar108 * 4;
                    *(uint *)(param_3 + lVar74) =
                         *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                    if (iVar118 < param_5) {
                    /* try { // try from 003a2208 to 004a220b has its CatchHandler @ 003a4c88 */
                      iVar108 = iVar107 + 7;
                      lVar74 = (long)iVar118 * 4;
                      *(uint *)(param_3 + lVar74) =
                           *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
                      if (iVar108 < param_5) {
                        iVar118 = iVar107 + 8;
                        lVar74 = (long)iVar108 * 4;
                    /* try { // try from 003a2238 to 004a223b has its CatchHandler @ 003a4c5c */
                    /* try { // try from 003a2240 to 004a2243 has its CatchHandler @ 003a4c88 */
                        *(uint *)(param_3 + lVar74) =
                             *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                        if (iVar118 < param_5) {
                          iVar108 = iVar107 + 9;
                          lVar74 = (long)iVar118 * 4;
                          *(uint *)(param_3 + lVar74) =
                               *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
                          if (iVar108 < param_5) {
                            iVar118 = iVar107 + 10;
                            lVar74 = (long)iVar108 * 4;
                            *(uint *)(param_3 + lVar74) =
                                 *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                            if (iVar118 < param_5) {
                              iVar108 = iVar107 + 0xb;
                              lVar74 = (long)iVar118 * 4;
                              *(uint *)(param_3 + lVar74) =
                                   *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
                              if (iVar108 < param_5) {
                                iVar118 = iVar107 + 0xc;
                                lVar74 = (long)iVar108 * 4;
                                *(uint *)(param_3 + lVar74) =
                                     *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                                if (iVar118 < param_5) {
                                  iVar108 = iVar107 + 0xd;
                                  lVar74 = (long)iVar118 * 4;
                                  *(uint *)(param_3 + lVar74) =
                                       *(int *)(param_3 + lVar74) + (uint)param_1[iVar118];
                                  if (iVar108 < param_5) {
                                    iVar107 = iVar107 + 0xe;
                                    lVar74 = (long)iVar108 * 4;
                                    *(uint *)(param_3 + lVar74) =
                                         *(int *)(param_3 + lVar74) + (uint)param_1[iVar108];
                                    if (iVar107 < param_5) {
                                      lVar74 = (long)iVar107 * 4;
                                      *(uint *)(param_3 + lVar74) =
                                           *(int *)(param_3 + lVar74) + (uint)param_1[iVar107];
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003a233c:
                    /* try { // try from 003a233c to 004a233f has its CatchHandler @ 003a4c54 */
        iVar76 = iVar76 + 1;
      }
LAB_003a2340:
      lVar75 = lVar75 + 1;
      param_1 = param_1 + param_5;
      if (param_4 <= (int)lVar75) {
        return iVar76;
      }
    } while( true );
  }
  if (param_5 - 1U < 2) {
LAB_003a4184:
    if (param_4 < 0x10) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      iVar77 = 0;
    }
    else {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      uVar53 = param_4 - 0x10U >> 4;
      pbVar78 = param_1;
      do {
        pbVar88 = pbVar78 + 0x10;
        uVar100 = *(undefined8 *)(pbVar78 + 8);
        uVar101 = *(undefined8 *)pbVar78;
        bVar93 = (byte)((ulong)uVar101 >> 8);
        bVar95 = (byte)((ulong)uVar101 >> 0x28);
        bVar94 = (byte)((ulong)uVar100 >> 8);
        bVar96 = (byte)((ulong)uVar100 >> 0x28);
        local_10[0] = local_10[0] + ((CONCAT12(bVar93,(short)uVar101) & 0xff00ff) & 0xffff) +
                      (CONCAT12(bVar95,(ushort)(byte)((ulong)uVar101 >> 0x20)) & 0xffff) +
                      ((CONCAT12(bVar94,(short)uVar100) & 0xff00ff) & 0xffff) +
                      (CONCAT12(bVar96,(ushort)(byte)((ulong)uVar100 >> 0x20)) & 0xffff);
        local_10[1] = local_10[1] + (uint)bVar93 + (uint)bVar95 + (uint)bVar94 + (uint)bVar96;
        local_10[2] = local_10[2] + (uint)(byte)((ulong)uVar101 >> 0x10) +
                      (uint)(byte)((ulong)uVar101 >> 0x30) + (uint)(byte)((ulong)uVar100 >> 0x10) +
                      (uint)(byte)((ulong)uVar100 >> 0x30);
        local_10[3] = local_10[3] + (uint)(byte)((ulong)uVar101 >> 0x18) +
                      (uint)(byte)((ulong)uVar101 >> 0x38) + (uint)(byte)((ulong)uVar100 >> 0x18) +
                      (uint)(byte)((ulong)uVar100 >> 0x38);
        pbVar78 = pbVar88;
      } while (pbVar88 != param_1 + ((ulong)uVar53 + 1) * 0x10);
      iVar77 = (uVar53 + 1) * 0x10;
    }
    if (iVar77 < param_4 + -7) {
      uVar53 = (uint)((param_4 + -8) - iVar77) >> 3;
      pbVar78 = param_1 + iVar77;
      do {
        pbVar88 = pbVar78 + 8;
        uVar101 = *(undefined8 *)pbVar78;
        bVar93 = (byte)((ulong)uVar101 >> 8);
        bVar94 = (byte)((ulong)uVar101 >> 0x28);
        local_10[0] = local_10[0] + ((CONCAT12(bVar93,(short)uVar101) & 0xff00ff) & 0xffff) +
                      (CONCAT12(bVar94,(ushort)(byte)((ulong)uVar101 >> 0x20)) & 0xffff);
        local_10[1] = local_10[1] + (uint)bVar93 + (uint)bVar94;
        local_10[2] = local_10[2] + (uint)(byte)((ulong)uVar101 >> 0x10) +
                      (uint)(byte)((ulong)uVar101 >> 0x30);
        local_10[3] = local_10[3] + (uint)(byte)((ulong)uVar101 >> 0x18) +
                      (uint)(byte)((ulong)uVar101 >> 0x38);
        pbVar78 = pbVar88;
      } while (pbVar88 != param_1 + (long)iVar77 + 8 + (ulong)uVar53 * 8);
      iVar77 = iVar77 + 8 + uVar53 * 8;
    }
    if (param_5 < 1) {
      do {
                    /* WARNING: Do nothing block with infinite loop */
      } while( true );
    }
    if (param_5 == 1) {
      iVar69 = *(int *)param_3;
      iVar76 = 0;
      do {
        lVar75 = (long)iVar76;
        iVar76 = iVar76 + 1;
        iVar69 = iVar69 + local_10[lVar75];
      } while (iVar76 != 4);
      *(int *)param_3 = iVar69;
    }
    else if (param_5 == 2) {
      iVar98 = *(int *)(param_3 + 4);
      iVar76 = 0;
      iVar69 = *(int *)param_3;
      do {
        lVar75 = (long)iVar76;
        iVar97 = iVar76 + 1;
        iVar76 = iVar76 + 2;
        iVar69 = iVar69 + local_10[lVar75];
        iVar98 = iVar98 + local_10[iVar97];
      } while (iVar76 != 4);
      *(int *)param_3 = iVar69;
      *(int *)(param_3 + 4) = iVar98;
    }
    else if (param_5 == 3) {
      iVar98 = *(int *)(param_3 + 8);
      iVar97 = 0;
      iVar69 = *(int *)(param_3 + 4);
      iVar76 = *(int *)param_3;
      while( true ) {
        iVar76 = iVar76 + local_10[iVar97];
        iVar69 = iVar69 + local_10[iVar97 + 1];
        iVar98 = iVar98 + local_10[iVar97 + 2];
        if (iVar97 != 0) break;
        iVar97 = 3;
      }
      *(int *)param_3 = iVar76;
      *(int *)(param_3 + 4) = iVar69;
      *(int *)(param_3 + 8) = iVar98;
    }
    else {
      *(int *)(param_3 + 4) = local_10[1] + *(int *)(param_3 + 4);
      *(int *)(param_3 + 8) = local_10[2] + *(int *)(param_3 + 8);
      *(int *)param_3 = *(int *)param_3 + local_10[0];
      *(int *)(param_3 + 0xc) = local_10[3] + *(int *)(param_3 + 0xc);
    }
    iVar76 = 0;
    if (param_5 != 0) {
      iVar76 = iVar77 / param_5;
    }
    lVar75 = (long)(param_5 * iVar76);
  }
  else {
    iVar76 = 0;
    lVar75 = 0;
    if (param_5 == 4) goto LAB_003a4184;
  }
  pbVar78 = param_1 + lVar75;
  iVar77 = param_5 % 4;
  if (iVar77 != 1) {
    iVar98 = iVar76;
    if (iVar77 != 2) {
      if (iVar77 != 3) goto LAB_003a253c;
      iVar97 = *(int *)param_3;
      iVar69 = *(int *)(param_3 + 4);
      iVar99 = *(int *)(param_3 + 8);
      if (iVar76 < param_4) {
        uVar114 = param_4 - iVar76;
        lVar70 = (long)param_5;
        uVar53 = (uVar114 - 0x10 >> 4) + 1;
        uVar102 = uVar53 * 0x10;
        if (0xe < (uint)((param_4 + -1) - iVar76)) {
          pbVar88 = param_1 + lVar75 + 2;
          iVar109 = 0;
          iVar110 = 0;
          iVar121 = 0;
          iVar122 = 0;
          lVar84 = lVar70 * 2;
          lVar89 = lVar70 * 4;
          lVar72 = lVar70 * 3;
          lVar81 = lVar70 * 5;
          uVar119 = 0;
          lVar80 = lVar70 * 0x10;
          lVar82 = lVar70 * 8;
          lVar87 = lVar70 * 0xc;
          lVar86 = lVar70 * 10;
          pbVar73 = param_1 + lVar75 + 1;
          lVar83 = lVar70 * 0xe;
          lVar74 = lVar70 * 6;
          lVar75 = lVar70 * 7;
          lVar85 = lVar70 * 9;
          lVar90 = lVar70 * 0xd;
          lVar129 = lVar70 * 0xb;
          lVar71 = lVar70 * 0xf;
          pbVar67 = pbVar78;
          iVar98 = iVar109;
          iVar130 = iVar110;
          iVar107 = iVar109;
          iVar108 = iVar110;
          iVar118 = iVar121;
          iVar120 = iVar122;
          iVar123 = iVar121;
          iVar125 = iVar122;
          do {
            uVar119 = uVar119 + 1;
            bVar93 = *pbVar67;
            pbVar68 = pbVar67 + lVar70;
            pbVar66 = pbVar67 + lVar84;
            pbVar2 = pbVar67 + lVar72;
            pbVar3 = pbVar67 + lVar89;
            pbVar4 = pbVar67 + lVar81;
            pbVar5 = pbVar67 + lVar74;
            pbVar6 = pbVar67 + lVar75;
            pbVar7 = pbVar67 + lVar82;
            pbVar8 = pbVar67 + lVar85;
            pbVar9 = pbVar67 + lVar86;
            pbVar10 = pbVar67 + lVar129;
            pbVar11 = pbVar67 + lVar87;
            pbVar12 = pbVar67 + lVar90;
            pbVar13 = pbVar67 + lVar83;
            pbVar14 = pbVar67 + lVar71;
            pbVar67 = pbVar67 + lVar80;
            bVar94 = *pbVar73;
            pbVar15 = pbVar73 + lVar70;
            uVar63 = CONCAT12(*pbVar68,CONCAT11(*pbVar68,bVar93)) & 0xff00ff;
            uVar64 = CONCAT12(*pbVar8,CONCAT11(*pbVar8,*pbVar7)) & 0xff00ff;
            pbVar68 = pbVar73 + lVar84;
            pbVar7 = pbVar73 + lVar72;
            pbVar8 = pbVar73 + lVar89;
            pbVar16 = pbVar73 + lVar81;
            pbVar17 = pbVar73 + lVar74;
            pbVar18 = pbVar73 + lVar75;
            pbVar19 = pbVar73 + lVar82;
            iVar109 = (CONCAT12(*pbVar12,(ushort)*pbVar11) & 0xffff) +
                      (uVar64 & 0xffff) +
                      (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) + (uVar63 & 0xffff) + iVar109;
            iVar110 = (uint)*pbVar12 +
                      (uint)(byte)(uVar64 >> 0x10) +
                      (uint)*pbVar4 + (uint)(byte)(uVar63 >> 0x10) + iVar110;
            iVar121 = (uint)*pbVar13 + (uint)*pbVar9 + (uint)*pbVar5 + (uint)*pbVar66 + iVar121;
            iVar122 = (uint)*pbVar14 + (uint)*pbVar10 + (uint)*pbVar6 + (uint)*pbVar2 + iVar122;
            pbVar66 = pbVar73 + lVar85;
            pbVar2 = pbVar73 + lVar86;
            pbVar3 = pbVar73 + lVar129;
            pbVar4 = pbVar73 + lVar87;
            pbVar5 = pbVar73 + lVar90;
            pbVar6 = pbVar73 + lVar83;
            pbVar9 = pbVar73 + lVar71;
            pbVar73 = pbVar73 + lVar80;
            bVar93 = *pbVar88;
            pbVar10 = pbVar88 + lVar70;
            uVar63 = CONCAT12(*pbVar15,CONCAT11(*pbVar15,bVar94)) & 0xff00ff;
            uVar64 = CONCAT12(*pbVar66,CONCAT11(*pbVar66,*pbVar19)) & 0xff00ff;
            pbVar66 = pbVar88 + lVar84;
            pbVar11 = pbVar88 + lVar72;
            pbVar12 = pbVar88 + lVar89;
            pbVar13 = pbVar88 + lVar81;
            pbVar14 = pbVar88 + lVar74;
            pbVar15 = pbVar88 + lVar75;
            pbVar19 = pbVar88 + lVar82;
            iVar107 = (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) +
                      (uVar64 & 0xffff) +
                      (CONCAT12(*pbVar16,(ushort)*pbVar8) & 0xffff) + (uVar63 & 0xffff) + iVar107;
            iVar108 = (uint)*pbVar5 +
                      (uint)(byte)(uVar64 >> 0x10) +
                      (uint)*pbVar16 + (uint)(byte)(uVar63 >> 0x10) + iVar108;
            iVar123 = (uint)*pbVar6 + (uint)*pbVar2 + (uint)*pbVar17 + (uint)*pbVar68 + iVar123;
            iVar125 = (uint)*pbVar9 + (uint)*pbVar3 + (uint)*pbVar18 + (uint)*pbVar7 + iVar125;
            pbVar68 = pbVar88 + lVar85;
            pbVar2 = pbVar88 + lVar86;
            pbVar3 = pbVar88 + lVar129;
            pbVar4 = pbVar88 + lVar87;
            pbVar5 = pbVar88 + lVar90;
            pbVar6 = pbVar88 + lVar83;
            pbVar7 = pbVar88 + lVar71;
            pbVar88 = pbVar88 + lVar80;
            uVar63 = CONCAT12(*pbVar10,CONCAT11(*pbVar10,bVar93)) & 0xff00ff;
            uVar64 = CONCAT12(*pbVar68,CONCAT11(*pbVar68,*pbVar19)) & 0xff00ff;
            iVar98 = (CONCAT12(*pbVar5,(ushort)*pbVar4) & 0xffff) +
                     (uVar64 & 0xffff) +
                     (CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff) + (uVar63 & 0xffff) + iVar98;
            iVar130 = (uint)*pbVar5 +
                      (uint)(byte)(uVar64 >> 0x10) +
                      (uint)*pbVar13 + (uint)(byte)(uVar63 >> 0x10) + iVar130;
            iVar118 = (uint)*pbVar6 + (uint)*pbVar2 + (uint)*pbVar14 + (uint)*pbVar66 + iVar118;
            iVar120 = (uint)*pbVar7 + (uint)*pbVar3 + (uint)*pbVar15 + (uint)*pbVar11 + iVar120;
          } while (uVar119 < uVar53);
          iVar76 = iVar76 + uVar102;
          pbVar78 = pbVar78 + (ulong)uVar102 * lVar70;
          iVar69 = iVar69 + iVar107 + iVar108 + iVar123 + iVar125;
          iVar97 = iVar97 + iVar109 + iVar110 + iVar121 + iVar122;
          iVar99 = iVar99 + iVar98 + iVar130 + iVar118 + iVar120;
          iVar98 = param_4;
                    /* try { // try from 003a3f24 to 004a3f27 has its CatchHandler @ 003a4c4c */
          if (uVar114 == uVar102) goto LAB_003a4174;
        }
        iVar97 = iVar97 + (uint)*pbVar78;
        iVar69 = iVar69 + (uint)pbVar78[1];
        iVar99 = iVar99 + (uint)pbVar78[2];
        iVar98 = param_4;
        if (iVar76 + 1 < param_4) {
          iVar97 = iVar97 + (uint)pbVar78[lVar70];
          iVar69 = iVar69 + (uint)pbVar78[lVar70 + 1];
          iVar99 = iVar99 + (uint)pbVar78[lVar70 + 2];
          if (iVar76 + 2 < param_4) {
            iVar97 = iVar97 + (uint)pbVar78[lVar70 * 2];
            iVar69 = iVar69 + (uint)pbVar78[lVar70 * 2 + 1];
                    /* try { // try from 003a3f98 to 004a3f9b has its CatchHandler @ 003a4c54 */
            iVar99 = iVar99 + (uint)pbVar78[lVar70 * 2 + 2];
            if (iVar76 + 3 < param_4) {
              iVar97 = iVar97 + (uint)pbVar78[lVar70 * 3];
              iVar69 = iVar69 + (uint)pbVar78[lVar70 * 3 + 1];
              iVar99 = iVar99 + (uint)pbVar78[lVar70 * 3 + 2];
              if (iVar76 + 4 < param_4) {
                iVar97 = iVar97 + (uint)pbVar78[lVar70 * 4];
                iVar69 = iVar69 + (uint)pbVar78[lVar70 * 4 + 1];
                iVar99 = iVar99 + (uint)pbVar78[lVar70 * 4 + 2];
                if (iVar76 + 5 < param_4) {
                  iVar97 = iVar97 + (uint)pbVar78[lVar70 * 5];
                  iVar69 = iVar69 + (uint)pbVar78[lVar70 * 5 + 1];
                  iVar99 = iVar99 + (uint)pbVar78[lVar70 * 5 + 2];
                  if (iVar76 + 6 < param_4) {
                    /* try { // try from 003a401c to 004a4717 has its CatchHandler @ 003a4bc8 */
                    iVar97 = iVar97 + (uint)pbVar78[lVar70 * 6];
                    iVar69 = iVar69 + (uint)pbVar78[lVar70 * 6 + 1];
                    iVar99 = iVar99 + (uint)pbVar78[lVar70 * 6 + 2];
                    if (iVar76 + 7 < param_4) {
                      iVar97 = iVar97 + (uint)pbVar78[lVar70 * 7];
                      iVar69 = iVar69 + (uint)pbVar78[lVar70 * 7 + 1];
                      iVar99 = iVar99 + (uint)pbVar78[lVar70 * 7 + 2];
                      if (iVar76 + 8 < param_4) {
                        iVar97 = iVar97 + (uint)pbVar78[lVar70 * 8];
                        iVar69 = iVar69 + (uint)pbVar78[lVar70 * 8 + 1];
                        iVar99 = iVar99 + (uint)pbVar78[lVar70 * 8 + 2];
                        if (iVar76 + 9 < param_4) {
                          iVar97 = iVar97 + (uint)pbVar78[lVar70 * 9];
                          iVar69 = iVar69 + (uint)pbVar78[lVar70 * 9 + 1];
                          iVar99 = iVar99 + (uint)pbVar78[lVar70 * 9 + 2];
                          if (iVar76 + 10 < param_4) {
                            iVar97 = iVar97 + (uint)pbVar78[lVar70 * 10];
                            iVar69 = iVar69 + (uint)pbVar78[lVar70 * 10 + 1];
                            iVar99 = iVar99 + (uint)pbVar78[lVar70 * 10 + 2];
                            if (iVar76 + 0xb < param_4) {
                              iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xb];
                              iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xb + 1];
                              iVar99 = iVar99 + (uint)pbVar78[lVar70 * 0xb + 2];
                              if (iVar76 + 0xc < param_4) {
                                iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xc];
                                iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xc + 1];
                                iVar99 = iVar99 + (uint)pbVar78[lVar70 * 0xc + 2];
                                if (iVar76 + 0xd < param_4) {
                                  iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xd];
                                  iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xd + 1];
                                  iVar99 = iVar99 + (uint)pbVar78[lVar70 * 0xd + 2];
                                  if (iVar76 + 0xe < param_4) {
                                    iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xe];
                                    iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xe + 1];
                                    iVar99 = iVar99 + (uint)pbVar78[lVar70 * 0xe + 2];
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_003a4174:
      *(int *)param_3 = iVar97;
      *(int *)(param_3 + 4) = iVar69;
      *(int *)(param_3 + 8) = iVar99;
      goto LAB_003a253c;
    }
    iVar97 = *(int *)param_3;
    iVar69 = *(int *)(param_3 + 4);
    if (iVar76 < param_4) {
      uVar102 = param_4 - iVar76;
      lVar70 = (long)param_5;
      uVar53 = (uVar102 - 0x10 >> 4) + 1;
      uVar114 = uVar53 * 0x10;
      if (0xe < (uint)((param_4 + -1) - iVar76)) {
        iVar108 = 0;
        iVar118 = 0;
        iVar120 = 0;
        iVar123 = 0;
        pbVar88 = param_1 + lVar75 + 1;
        uVar119 = 0;
        pbVar73 = pbVar78;
        iVar98 = iVar108;
        iVar99 = iVar118;
        iVar130 = iVar120;
        iVar107 = iVar123;
        do {
          bVar93 = *pbVar73;
          uVar119 = uVar119 + 1;
          pbVar67 = pbVar73 + lVar70;
          pbVar68 = pbVar73 + lVar70 * 2;
          pbVar66 = pbVar73 + lVar70 * 3;
          pbVar2 = pbVar73 + lVar70 * 4;
          pbVar3 = pbVar73 + lVar70 * 5;
          pbVar4 = pbVar73 + lVar70 * 6;
          pbVar5 = pbVar73 + lVar70 * 7;
          pbVar6 = pbVar73 + lVar70 * 8;
          pbVar7 = pbVar73 + lVar70 * 9;
          pbVar8 = pbVar73 + lVar70 * 10;
          pbVar9 = pbVar73 + lVar70 * 0xb;
          pbVar10 = pbVar73 + lVar70 * 0xc;
          pbVar11 = pbVar73 + lVar70 * 0xd;
          pbVar12 = pbVar73 + lVar70 * 0xe;
          pbVar13 = pbVar73 + lVar70 * 0xf;
          pbVar73 = pbVar73 + lVar70 * 0x10;
          bVar94 = *pbVar88;
          pbVar14 = pbVar88 + lVar70;
          uVar63 = CONCAT12(*pbVar67,CONCAT11(*pbVar67,bVar93)) & 0xff00ff;
          uVar64 = CONCAT12(*pbVar7,CONCAT11(*pbVar7,*pbVar6)) & 0xff00ff;
          pbVar67 = pbVar88 + lVar70 * 2;
          pbVar6 = pbVar88 + lVar70 * 3;
          pbVar7 = pbVar88 + lVar70 * 4;
          pbVar15 = pbVar88 + lVar70 * 5;
          pbVar16 = pbVar88 + lVar70 * 6;
          pbVar17 = pbVar88 + lVar70 * 7;
          pbVar18 = pbVar88 + lVar70 * 8;
          iVar108 = (CONCAT12(*pbVar11,(ushort)*pbVar10) & 0xffff) +
                    (uVar64 & 0xffff) +
                    (CONCAT12(*pbVar3,(ushort)*pbVar2) & 0xffff) + (uVar63 & 0xffff) + iVar108;
          iVar118 = (uint)*pbVar11 +
                    (uint)(byte)(uVar64 >> 0x10) +
                    (uint)*pbVar3 + (uint)(byte)(uVar63 >> 0x10) + iVar118;
          iVar120 = (uint)*pbVar12 + (uint)*pbVar8 + (uint)*pbVar4 + (uint)*pbVar68 + iVar120;
          iVar123 = (uint)*pbVar13 + (uint)*pbVar9 + (uint)*pbVar5 + (uint)*pbVar66 + iVar123;
          pbVar68 = pbVar88 + lVar70 * 9;
          pbVar66 = pbVar88 + lVar70 * 10;
          pbVar2 = pbVar88 + lVar70 * 0xb;
          pbVar3 = pbVar88 + lVar70 * 0xc;
          pbVar4 = pbVar88 + lVar70 * 0xd;
          pbVar5 = pbVar88 + lVar70 * 0xe;
          pbVar8 = pbVar88 + lVar70 * 0xf;
          pbVar88 = pbVar88 + lVar70 * 0x10;
          uVar63 = CONCAT12(*pbVar14,CONCAT11(*pbVar14,bVar94)) & 0xff00ff;
          uVar64 = CONCAT12(*pbVar68,CONCAT11(*pbVar68,*pbVar18)) & 0xff00ff;
          iVar98 = (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) +
                   (uVar64 & 0xffff) +
                   (CONCAT12(*pbVar15,(ushort)*pbVar7) & 0xffff) + (uVar63 & 0xffff) + iVar98;
          iVar99 = (uint)*pbVar4 +
                   (uint)(byte)(uVar64 >> 0x10) +
                   (uint)*pbVar15 + (uint)(byte)(uVar63 >> 0x10) + iVar99;
          iVar130 = (uint)*pbVar5 + (uint)*pbVar66 + (uint)*pbVar16 + (uint)*pbVar67 + iVar130;
          iVar107 = (uint)*pbVar8 + (uint)*pbVar2 + (uint)*pbVar17 + (uint)*pbVar6 + iVar107;
        } while (uVar119 < uVar53);
        pbVar78 = pbVar78 + (ulong)uVar114 * lVar70;
        iVar76 = iVar76 + uVar114;
        iVar69 = iVar69 + iVar98 + iVar99 + iVar130 + iVar107;
        iVar97 = iVar97 + iVar108 + iVar118 + iVar120 + iVar123;
        iVar98 = param_4;
        if (uVar102 == uVar114) goto LAB_003a3bc8;
      }
      iVar97 = iVar97 + (uint)*pbVar78;
      iVar69 = iVar69 + (uint)pbVar78[1];
      iVar98 = param_4;
      if (iVar76 + 1 < param_4) {
        iVar97 = iVar97 + (uint)pbVar78[lVar70];
        iVar69 = iVar69 + (uint)pbVar78[lVar70 + 1];
        if (iVar76 + 2 < param_4) {
          iVar97 = iVar97 + (uint)pbVar78[lVar70 * 2];
          iVar69 = iVar69 + (uint)pbVar78[lVar70 * 2 + 1];
          if (iVar76 + 3 < param_4) {
            iVar97 = iVar97 + (uint)pbVar78[lVar70 * 3];
            iVar69 = iVar69 + (uint)pbVar78[lVar70 * 3 + 1];
            if (iVar76 + 4 < param_4) {
              iVar97 = iVar97 + (uint)pbVar78[lVar70 * 4];
              iVar69 = iVar69 + (uint)pbVar78[lVar70 * 4 + 1];
              if (iVar76 + 5 < param_4) {
                iVar97 = iVar97 + (uint)pbVar78[lVar70 * 5];
                iVar69 = iVar69 + (uint)pbVar78[lVar70 * 5 + 1];
                if (iVar76 + 6 < param_4) {
                  iVar97 = iVar97 + (uint)pbVar78[lVar70 * 6];
                  iVar69 = iVar69 + (uint)pbVar78[lVar70 * 6 + 1];
                  if (iVar76 + 7 < param_4) {
                    iVar97 = iVar97 + (uint)pbVar78[lVar70 * 7];
                    iVar69 = iVar69 + (uint)pbVar78[lVar70 * 7 + 1];
                    if (iVar76 + 8 < param_4) {
                      iVar97 = iVar97 + (uint)pbVar78[lVar70 * 8];
                      iVar69 = iVar69 + (uint)pbVar78[lVar70 * 8 + 1];
                      if (iVar76 + 9 < param_4) {
                        iVar97 = iVar97 + (uint)pbVar78[lVar70 * 9];
                        iVar69 = iVar69 + (uint)pbVar78[lVar70 * 9 + 1];
                        if (iVar76 + 10 < param_4) {
                          iVar97 = iVar97 + (uint)pbVar78[lVar70 * 10];
                          iVar69 = iVar69 + (uint)pbVar78[lVar70 * 10 + 1];
                          if (iVar76 + 0xb < param_4) {
                            iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xb];
                            iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xb + 1];
                            if (iVar76 + 0xc < param_4) {
                              iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xc];
                              iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xc + 1];
                              if (iVar76 + 0xd < param_4) {
                                iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xd];
                                iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xd + 1];
                                if (iVar76 + 0xe < param_4) {
                                  iVar97 = iVar97 + (uint)pbVar78[lVar70 * 0xe];
                                  iVar69 = iVar69 + (uint)pbVar78[lVar70 * 0xe + 1];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003a3bc8:
    *(int *)param_3 = iVar97;
    *(int *)(param_3 + 4) = iVar69;
    goto LAB_003a253c;
  }
  iVar98 = param_4 + -3;
  iVar69 = *(int *)param_3;
  if (iVar76 < iVar98) {
    uVar114 = (param_4 + -4) - iVar76;
    lVar70 = (long)param_5;
    lVar71 = (long)(param_5 << 2);
    uVar102 = uVar114 >> 2;
    uVar53 = (uVar102 - 0xf >> 4) + 1;
    pbVar88 = pbVar78;
    iVar97 = iVar76;
    if (uVar114 < 0x3c) {
LAB_003a3164:
      iVar69 = iVar69 + (uint)*pbVar88 + (uint)pbVar88[lVar70] + (uint)pbVar88[lVar70 * 2] +
                        (uint)pbVar88[lVar70 * 3];
      if ((((iVar97 + 4 < iVar98) &&
           (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 4] + (uint)pbVar88[lVar70 * 5] +
                              (uint)pbVar88[lVar70 * 6] + (uint)pbVar88[lVar70 * 7],
           iVar97 + 8 < iVar98)) &&
          ((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 8] + (uint)pbVar88[lVar70 * 9] +
                              (uint)pbVar88[lVar70 * 10] + (uint)pbVar88[lVar70 * 0xb],
           iVar97 + 0xc < iVar98 &&
           ((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0xc] + (uint)pbVar88[lVar70 * 0xd] +
                               (uint)pbVar88[lVar70 * 0xe] + (uint)pbVar88[lVar70 * 0xf],
            iVar97 + 0x10 < iVar98 &&
            (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x10] + (uint)pbVar88[lVar70 * 0x11] +
                               (uint)pbVar88[lVar70 * 0x12] + (uint)pbVar88[lVar70 * 0x13],
            iVar97 + 0x14 < iVar98)))))) &&
         ((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x14] + (uint)pbVar88[lVar70 * 0x15] +
                             (uint)pbVar88[lVar70 * 0x16] + (uint)pbVar88[lVar70 * 0x17],
          iVar97 + 0x18 < iVar98 &&
          ((((((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x18] + (uint)pbVar88[lVar70 * 0x19] +
                                  (uint)pbVar88[lVar70 * 0x1a] + (uint)pbVar88[lVar70 * 0x1b],
               iVar97 + 0x1c < iVar98 &&
               (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x1c] + (uint)pbVar88[lVar70 * 0x1d] +
                                  (uint)pbVar88[lVar70 * 0x1e] + (uint)pbVar88[lVar70 * 0x1f],
               iVar97 + 0x20 < iVar98)) &&
              (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x20] + (uint)pbVar88[lVar70 * 0x21] +
                                 (uint)pbVar88[lVar70 * 0x22] + (uint)pbVar88[lVar70 * 0x23],
              iVar97 + 0x24 < iVar98)) &&
             ((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x24] + (uint)pbVar88[lVar70 * 0x25] +
                                 (uint)pbVar88[lVar70 * 0x26] + (uint)pbVar88[lVar70 * 0x27],
              iVar97 + 0x28 < iVar98 &&
              (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x28] + (uint)pbVar88[lVar70 * 0x29] +
                                 (uint)pbVar88[lVar70 * 0x2a] + (uint)pbVar88[lVar70 * 0x2b],
              iVar97 + 0x2c < iVar98)))) &&
            (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x2c] + (uint)pbVar88[lVar70 * 0x2d] +
                               (uint)pbVar88[lVar70 * 0x2e] + (uint)pbVar88[lVar70 * 0x2f],
            iVar97 + 0x30 < iVar98)) &&
           ((iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x30] + (uint)pbVar88[lVar70 * 0x31] +
                               (uint)pbVar88[lVar70 * 0x32] + (uint)pbVar88[lVar70 * 0x33],
            iVar97 + 0x34 < iVar98 &&
            (iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x34] + (uint)pbVar88[lVar70 * 0x35] +
                               (uint)pbVar88[lVar70 * 0x36] + (uint)pbVar88[lVar70 * 0x37],
            iVar97 + 0x38 < iVar98)))))))) {
        iVar69 = iVar69 + (uint)pbVar88[lVar70 * 0x38] + (uint)pbVar88[lVar70 * 0x39] +
                          (uint)pbVar88[lVar70 * 0x3a] + (uint)pbVar88[lVar70 * 0x3b];
      }
    }
    else {
      lVar80 = lVar71 * 2;
      lVar72 = lVar70 + lVar75 + lVar70;
      pbVar88 = param_1 + lVar75 + lVar70;
      lVar89 = lVar71 * 4;
      lVar81 = lVar71 * 3;
      lVar91 = NEON_shl(lVar71,4);
      lVar83 = lVar71 * 5;
      pbVar73 = param_1 + lVar72;
      pbVar67 = param_1 + lVar70 + lVar72;
      iVar97 = 0;
      iVar99 = 0;
      iVar130 = 0;
      iVar107 = 0;
      lVar82 = lVar71 * 8;
      lVar87 = lVar71 * 0xc;
      lVar86 = lVar71 * 10;
      lVar74 = lVar71 * 6;
      uVar114 = 0;
      lVar75 = lVar71 * 7;
      lVar72 = lVar71 * 9;
      lVar129 = lVar91 + lVar71 * -2;
      lVar85 = lVar71 * 0xd;
      lVar84 = lVar91 - lVar71;
      lVar90 = lVar71 * 0xb;
      pbVar68 = pbVar78;
      do {
        uVar114 = uVar114 + 1;
        bVar93 = *pbVar68;
        bVar56 = pbVar68[lVar71];
        pbVar66 = pbVar68 + lVar80;
        pbVar2 = pbVar68 + lVar81;
        pbVar3 = pbVar68 + lVar89;
        pbVar4 = pbVar68 + lVar83;
        pbVar5 = pbVar68 + lVar74;
        pbVar6 = pbVar68 + lVar75;
        pbVar7 = pbVar68 + lVar82;
        bVar57 = pbVar68[lVar72];
        pbVar8 = pbVar68 + lVar86;
        pbVar9 = pbVar68 + lVar90;
        pbVar10 = pbVar68 + lVar87;
        pbVar11 = pbVar68 + lVar85;
        pbVar12 = pbVar68 + lVar129;
        pbVar13 = pbVar68 + lVar84;
        pbVar68 = pbVar68 + lVar91;
        bVar94 = *pbVar88;
        bVar58 = pbVar88[lVar71];
        pbVar14 = pbVar88 + lVar80;
        pbVar15 = pbVar88 + lVar81;
        pbVar16 = pbVar88 + lVar89;
        pbVar17 = pbVar88 + lVar83;
        pbVar18 = pbVar88 + lVar74;
        pbVar19 = pbVar88 + lVar75;
        pbVar20 = pbVar88 + lVar82;
        bVar59 = pbVar88[lVar72];
        pbVar21 = pbVar88 + lVar86;
        pbVar22 = pbVar88 + lVar90;
        pbVar23 = pbVar88 + lVar87;
        pbVar24 = pbVar88 + lVar85;
        pbVar25 = pbVar88 + lVar129;
        pbVar26 = pbVar88 + lVar84;
        pbVar88 = pbVar88 + lVar91;
        bVar95 = *pbVar73;
        bVar60 = pbVar73[lVar71];
        pbVar27 = pbVar73 + lVar80;
        pbVar28 = pbVar73 + lVar81;
        pbVar29 = pbVar73 + lVar89;
        pbVar30 = pbVar73 + lVar83;
        pbVar31 = pbVar73 + lVar74;
        pbVar32 = pbVar73 + lVar75;
        pbVar33 = pbVar73 + lVar82;
        pbVar34 = pbVar73 + lVar72;
        pbVar35 = pbVar73 + lVar86;
        pbVar36 = pbVar73 + lVar90;
        pbVar37 = pbVar73 + lVar87;
        pbVar38 = pbVar73 + lVar85;
        pbVar39 = pbVar73 + lVar129;
        pbVar40 = pbVar73 + lVar84;
        pbVar73 = pbVar73 + lVar91;
        bVar96 = *pbVar67;
        bVar61 = pbVar67[lVar71];
        uVar63 = CONCAT12(*pbVar34,CONCAT11(*pbVar34,*pbVar33)) & 0xff00ff;
        pbVar33 = pbVar67 + lVar80;
        pbVar34 = pbVar67 + lVar81;
        pbVar41 = pbVar67 + lVar89;
        pbVar42 = pbVar67 + lVar83;
        pbVar43 = pbVar67 + lVar74;
        pbVar44 = pbVar67 + lVar75;
        pbVar45 = pbVar67 + lVar82;
        pbVar46 = pbVar67 + lVar72;
        pbVar47 = pbVar67 + lVar86;
        pbVar48 = pbVar67 + lVar90;
        pbVar49 = pbVar67 + lVar87;
        pbVar50 = pbVar67 + lVar85;
        pbVar51 = pbVar67 + lVar129;
        pbVar52 = pbVar67 + lVar84;
        pbVar67 = pbVar67 + lVar91;
        uVar64 = CONCAT12(*pbVar46,CONCAT11(*pbVar46,*pbVar45)) & 0xff00ff;
        iVar97 = (CONCAT12(*pbVar24,(ushort)*pbVar23) & 0xffff) +
                 (CONCAT12(*pbVar11,(ushort)*pbVar10) & 0xffff) +
                 (CONCAT12(*pbVar38,(ushort)*pbVar37) & 0xffff) +
                 (CONCAT12(*pbVar50,(ushort)*pbVar49) & 0xffff) +
                 ((CONCAT12(bVar59,CONCAT11(bVar59,*pbVar20)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar57,CONCAT11(bVar57,*pbVar7)) & 0xff00ff) & 0xffff) +
                 (uVar63 & 0xffff) + (uVar64 & 0xffff) +
                 (CONCAT12(*pbVar17,(ushort)*pbVar16) & 0xffff) +
                 (CONCAT12(*pbVar4,(ushort)*pbVar3) & 0xffff) +
                 (CONCAT12(*pbVar30,(ushort)*pbVar29) & 0xffff) +
                 (CONCAT12(*pbVar42,(ushort)*pbVar41) & 0xffff) +
                 ((CONCAT12(bVar58,CONCAT11(bVar58,bVar94)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar56,CONCAT11(bVar56,bVar93)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar60,CONCAT11(bVar60,bVar95)) & 0xff00ff) & 0xffff) +
                 ((CONCAT12(bVar61,CONCAT11(bVar61,bVar96)) & 0xff00ff) & 0xffff) + iVar97;
        iVar99 = (uint)*pbVar24 + (uint)*pbVar11 + (uint)*pbVar38 + (uint)*pbVar50 +
                 (uint)bVar59 + (uint)bVar57 + (uint)(byte)(uVar63 >> 0x10) +
                 (uint)(byte)(uVar64 >> 0x10) +
                 (uint)*pbVar17 + (uint)*pbVar4 + (uint)*pbVar30 + (uint)*pbVar42 +
                 (uint)bVar58 + (uint)bVar56 + (uint)bVar60 + (uint)bVar61 + iVar99;
        iVar130 = (uint)*pbVar25 + (uint)*pbVar12 + (uint)*pbVar39 + (uint)*pbVar51 +
                  (uint)*pbVar21 + (uint)*pbVar8 + (uint)*pbVar35 + (uint)*pbVar47 +
                  (uint)*pbVar18 + (uint)*pbVar5 + (uint)*pbVar31 + (uint)*pbVar43 +
                  (uint)*pbVar14 + (uint)*pbVar66 + (uint)*pbVar27 + (uint)*pbVar33 + iVar130;
        iVar107 = (uint)*pbVar26 + (uint)*pbVar13 + (uint)*pbVar40 + (uint)*pbVar52 +
                  (uint)*pbVar22 + (uint)*pbVar9 + (uint)*pbVar36 + (uint)*pbVar48 +
                  (uint)*pbVar19 + (uint)*pbVar6 + (uint)*pbVar32 + (uint)*pbVar44 +
                  (uint)*pbVar15 + (uint)*pbVar2 + (uint)*pbVar28 + (uint)*pbVar34 + iVar107;
      } while (uVar114 < uVar53);
      iVar69 = iVar69 + iVar97 + iVar99 + iVar130 + iVar107;
      pbVar88 = pbVar78 + (ulong)(uVar53 * 0x10) * lVar71;
      iVar97 = iVar76 + uVar53 * 0x40;
      if (uVar102 + 1 != uVar53 * 0x10) goto LAB_003a3164;
    }
    iVar76 = iVar76 + 4 + uVar102 * 4;
    pbVar78 = pbVar78 + lVar71 + (ulong)uVar102 * lVar71;
  }
  iVar98 = iVar76;
  if (iVar76 < param_4) {
    uVar102 = param_4 - iVar76;
    uVar53 = (uVar102 - 0x10 >> 4) + 1;
    lVar75 = (long)param_5;
    uVar114 = uVar53 * 0x10;
    if (0xe < (uint)((param_4 + -1) - iVar76)) {
      iVar98 = 0;
      iVar97 = 0;
      iVar99 = 0;
      iVar130 = 0;
      uVar119 = 0;
      pbVar88 = pbVar78 + lVar75 * 10;
      pbVar73 = pbVar78;
      do {
        bVar93 = *pbVar73;
        uVar119 = uVar119 + 1;
        pbVar67 = pbVar73 + lVar75;
        pbVar68 = pbVar73 + lVar75 * 2;
        pbVar66 = pbVar73 + lVar75 * 3;
        pbVar2 = pbVar73 + lVar75 * 4;
        pbVar3 = pbVar73 + lVar75 * 5;
        pbVar4 = pbVar73 + lVar75 * 6;
        pbVar5 = pbVar88 + lVar75 * -3;
        pbVar6 = pbVar73 + lVar75 * 8;
        pbVar7 = pbVar73 + lVar75 * 9;
        pbVar73 = pbVar73 + lVar75 * 0x10;
        bVar94 = *pbVar88;
        pbVar8 = pbVar88 + lVar75;
        pbVar9 = pbVar88 + lVar75 * 2;
        pbVar10 = pbVar88 + lVar75 * 3;
        pbVar11 = pbVar88 + lVar75 * 4;
        pbVar12 = pbVar88 + lVar75 * 5;
        pbVar88 = pbVar88 + lVar75 * 0x10;
        uVar63 = CONCAT12(*pbVar67,CONCAT11(*pbVar67,bVar93)) & 0xff00ff;
        uVar64 = CONCAT12(*pbVar7,CONCAT11(*pbVar7,*pbVar6)) & 0xff00ff;
        iVar98 = (CONCAT12(*pbVar10,(ushort)*pbVar9) & 0xffff) +
                 (uVar64 & 0xffff) +
                 (CONCAT12(*pbVar3,(ushort)*pbVar2) & 0xffff) + (uVar63 & 0xffff) + iVar98;
        iVar97 = (uint)*pbVar10 +
                 (uint)(byte)(uVar64 >> 0x10) +
                 (uint)*pbVar3 + (uint)(byte)(uVar63 >> 0x10) + iVar97;
        iVar99 = (uint)*pbVar11 + (uint)bVar94 + (uint)*pbVar4 + (uint)*pbVar68 + iVar99;
        iVar130 = (uint)*pbVar12 + (uint)*pbVar8 + (uint)*pbVar5 + (uint)*pbVar66 + iVar130;
      } while (uVar119 < uVar53);
      iVar76 = iVar76 + uVar114;
      pbVar78 = pbVar78 + (ulong)uVar114 * lVar75;
      iVar69 = iVar69 + iVar98 + iVar97 + iVar99 + iVar130;
      iVar98 = param_4;
      if (uVar102 == uVar114) goto LAB_003a3794;
    }
    iVar69 = iVar69 + (uint)*pbVar78;
    iVar98 = param_4;
    if (((((iVar76 + 1 < param_4) && (iVar69 = iVar69 + (uint)pbVar78[lVar75], iVar76 + 2 < param_4)
          ) && (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 2], iVar76 + 3 < param_4)) &&
        (((iVar69 = iVar69 + (uint)pbVar78[lVar75 * 3], iVar76 + 4 < param_4 &&
          (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 4], iVar76 + 5 < param_4)) &&
         ((iVar69 = iVar69 + (uint)pbVar78[lVar75 * 5], iVar76 + 6 < param_4 &&
          ((iVar69 = iVar69 + (uint)pbVar78[lVar75 * 6], iVar76 + 7 < param_4 &&
           (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 7], iVar76 + 8 < param_4)))))))) &&
       ((iVar69 = iVar69 + (uint)pbVar78[lVar75 * 8], iVar76 + 9 < param_4 &&
        (((iVar69 = iVar69 + (uint)pbVar78[lVar75 * 9], iVar76 + 10 < param_4 &&
          (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 10], iVar76 + 0xb < param_4)) &&
         (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 0xb], iVar76 + 0xc < param_4)))))) {
      iVar69 = iVar69 + (uint)pbVar78[lVar75 * 0xc];
      if ((iVar76 + 0xd < param_4) &&
         (iVar69 = iVar69 + (uint)pbVar78[lVar75 * 0xd], iVar76 + 0xe < param_4)) {
        iVar69 = iVar69 + (uint)pbVar78[lVar75 * 0xe];
      }
    }
  }
LAB_003a3794:
  *(int *)param_3 = iVar69;
LAB_003a253c:
  if (param_5 <= iVar77) {
    return param_4;
  }
  lVar74 = (long)param_5;
  lVar82 = lVar74 * 2;
  lVar80 = lVar74 * 8;
  lVar70 = lVar74 * 3;
  lVar87 = lVar74 * 4;
  lVar71 = lVar74 * 5;
  lVar86 = lVar74 * 0xc;
  lVar124 = NEON_shl(lVar74,4);
  lVar129 = (long)iVar77;
  lVar84 = lVar74 * 10;
  lVar75 = lVar74 * 7;
  lVar91 = lVar74 * 6;
  lVar72 = lVar74 * 9;
  lVar92 = lVar124 + lVar74 * -2;
  lVar89 = lVar124 - lVar74;
  lVar81 = lVar74 * 0xd;
  lVar83 = lVar74 * 0xb;
  pbVar78 = param_3 + lVar129 * 4;
  lVar85 = lVar129;
  lVar90 = lVar129 + 4;
  do {
    iVar97 = *(int *)pbVar78;
    iVar76 = *(int *)(pbVar78 + 4);
    iVar99 = *(int *)(pbVar78 + 8);
    iVar69 = *(int *)(pbVar78 + 0xc);
    lVar79 = (long)(param_5 * iVar98);
    pbVar88 = param_1 + lVar79 + lVar85;
    iVar130 = iVar98;
    if (iVar98 < param_4) {
      uVar114 = param_4 - iVar98;
      uVar53 = (uVar114 - 0x10 >> 4) + 1;
      uVar102 = uVar53 * 0x10;
      iVar130 = param_4;
      if (0xe < (uint)((param_4 + -1) - iVar98)) {
        iVar113 = 0;
        iVar115 = 0;
        iVar116 = 0;
        iVar117 = 0;
        uVar119 = 0;
        pbVar73 = param_1 + lVar79 + lVar85 + 2;
        pbVar67 = param_1 + lVar79 + lVar85 + 1;
        pbVar68 = param_1 + lVar79 + lVar85 + 3;
        pbVar66 = pbVar88;
        iVar107 = iVar113;
        iVar108 = iVar115;
        iVar118 = iVar113;
        iVar120 = iVar115;
        iVar123 = iVar113;
        iVar125 = iVar115;
        iVar109 = iVar116;
        iVar110 = iVar117;
        iVar121 = iVar116;
        iVar122 = iVar117;
        iVar126 = iVar116;
        iVar128 = iVar117;
        do {
          uVar119 = uVar119 + 1;
          bVar93 = *pbVar66;
          pbVar2 = pbVar66 + lVar74;
          pbVar3 = pbVar66 + lVar82;
          pbVar4 = pbVar66 + lVar70;
          pbVar5 = pbVar66 + lVar87;
          pbVar6 = pbVar66 + lVar71;
          pbVar7 = pbVar66 + lVar91;
          pbVar8 = pbVar66 + lVar75;
          pbVar9 = pbVar66 + lVar80;
          bVar95 = pbVar66[lVar72];
          pbVar10 = pbVar66 + lVar84;
          pbVar11 = pbVar66 + lVar83;
          pbVar12 = pbVar66 + lVar86;
          pbVar13 = pbVar66 + lVar81;
          pbVar14 = pbVar66 + lVar92;
          pbVar15 = pbVar66 + lVar89;
          pbVar66 = pbVar66 + lVar124;
          bVar94 = *pbVar67;
          pbVar16 = pbVar67 + lVar74;
          pbVar17 = pbVar67 + lVar82;
          pbVar18 = pbVar67 + lVar70;
          pbVar19 = pbVar67 + lVar87;
          pbVar20 = pbVar67 + lVar71;
          pbVar21 = pbVar67 + lVar91;
          pbVar22 = pbVar67 + lVar75;
          iVar113 = (CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff) +
                    ((CONCAT12(bVar95,CONCAT11(bVar95,*pbVar9)) & 0xff00ff) & 0xffff) +
                    (CONCAT12(*pbVar6,(ushort)*pbVar5) & 0xffff) +
                    (CONCAT12(*pbVar2,(ushort)bVar93) & 0xffff) + iVar113;
          iVar115 = (uint)*pbVar13 + (uint)bVar95 + (uint)*pbVar6 + (uint)*pbVar2 + iVar115;
          iVar116 = (uint)*pbVar14 + (uint)*pbVar10 + (uint)*pbVar7 + (uint)*pbVar3 + iVar116;
          iVar117 = (uint)*pbVar15 + (uint)*pbVar11 + (uint)*pbVar8 + (uint)*pbVar4 + iVar117;
                    /* try { // try from 003a27a8 to 004a35db has its CatchHandler @ 003a4c88 */
          pbVar2 = pbVar67 + lVar80;
          bVar95 = pbVar67[lVar72];
          pbVar3 = pbVar67 + lVar84;
          pbVar4 = pbVar67 + lVar83;
          pbVar5 = pbVar67 + lVar86;
          pbVar6 = pbVar67 + lVar81;
          pbVar7 = pbVar67 + lVar92;
          pbVar8 = pbVar67 + lVar89;
          pbVar67 = pbVar67 + lVar124;
          bVar93 = *pbVar73;
          pbVar9 = pbVar73 + lVar74;
          pbVar10 = pbVar73 + lVar82;
          pbVar11 = pbVar73 + lVar70;
          pbVar12 = pbVar73 + lVar87;
          pbVar13 = pbVar73 + lVar71;
          pbVar14 = pbVar73 + lVar91;
          pbVar15 = pbVar73 + lVar75;
          iVar118 = (CONCAT12(*pbVar6,(ushort)*pbVar5) & 0xffff) +
                    ((CONCAT12(bVar95,CONCAT11(bVar95,*pbVar2)) & 0xff00ff) & 0xffff) +
                    (CONCAT12(*pbVar20,(ushort)*pbVar19) & 0xffff) +
                    (CONCAT12(*pbVar16,(ushort)bVar94) & 0xffff) + iVar118;
          iVar120 = (uint)*pbVar6 + (uint)bVar95 + (uint)*pbVar20 + (uint)*pbVar16 + iVar120;
          iVar121 = (uint)*pbVar7 + (uint)*pbVar3 + (uint)*pbVar21 + (uint)*pbVar17 + iVar121;
          iVar122 = (uint)*pbVar8 + (uint)*pbVar4 + (uint)*pbVar22 + (uint)*pbVar18 + iVar122;
          pbVar2 = pbVar73 + lVar80;
          bVar95 = pbVar73[lVar72];
          pbVar3 = pbVar73 + lVar84;
          pbVar4 = pbVar73 + lVar83;
          pbVar5 = pbVar73 + lVar86;
          pbVar6 = pbVar73 + lVar81;
          pbVar7 = pbVar73 + lVar92;
          pbVar8 = pbVar73 + lVar89;
          pbVar73 = pbVar73 + lVar124;
          bVar94 = *pbVar68;
          pbVar16 = pbVar68 + lVar74;
          pbVar17 = pbVar68 + lVar82;
          pbVar18 = pbVar68 + lVar70;
          pbVar19 = pbVar68 + lVar87;
          pbVar20 = pbVar68 + lVar71;
          pbVar21 = pbVar68 + lVar91;
          pbVar22 = pbVar68 + lVar75;
          iVar123 = (CONCAT12(*pbVar6,(ushort)*pbVar5) & 0xffff) +
                    ((CONCAT12(bVar95,CONCAT11(bVar95,*pbVar2)) & 0xff00ff) & 0xffff) +
                    (CONCAT12(*pbVar13,(ushort)*pbVar12) & 0xffff) +
                    (CONCAT12(*pbVar9,(ushort)bVar93) & 0xffff) + iVar123;
          iVar125 = (uint)*pbVar6 + (uint)bVar95 + (uint)*pbVar13 + (uint)*pbVar9 + iVar125;
          iVar126 = (uint)*pbVar7 + (uint)*pbVar3 + (uint)*pbVar14 + (uint)*pbVar10 + iVar126;
          iVar128 = (uint)*pbVar8 + (uint)*pbVar4 + (uint)*pbVar15 + (uint)*pbVar11 + iVar128;
          pbVar2 = pbVar68 + lVar80;
          bVar93 = pbVar68[lVar72];
          pbVar3 = pbVar68 + lVar84;
          pbVar4 = pbVar68 + lVar83;
          pbVar5 = pbVar68 + lVar86;
          pbVar6 = pbVar68 + lVar81;
          pbVar7 = pbVar68 + lVar92;
          pbVar8 = pbVar68 + lVar89;
          pbVar68 = pbVar68 + lVar124;
          iVar107 = (CONCAT12(*pbVar6,(ushort)*pbVar5) & 0xffff) +
                    ((CONCAT12(bVar93,CONCAT11(bVar93,*pbVar2)) & 0xff00ff) & 0xffff) +
                    (CONCAT12(*pbVar20,(ushort)*pbVar19) & 0xffff) +
                    (CONCAT12(*pbVar16,(ushort)bVar94) & 0xffff) + iVar107;
          iVar108 = (uint)*pbVar6 + (uint)bVar93 + (uint)*pbVar20 + (uint)*pbVar16 + iVar108;
          iVar109 = (uint)*pbVar7 + (uint)*pbVar3 + (uint)*pbVar21 + (uint)*pbVar17 + iVar109;
          iVar110 = (uint)*pbVar8 + (uint)*pbVar4 + (uint)*pbVar22 + (uint)*pbVar18 + iVar110;
        } while (uVar119 < uVar53);
        iVar98 = iVar98 + uVar102;
        pbVar88 = pbVar88 + (ulong)uVar102 * lVar74;
        iVar76 = iVar76 + iVar118 + iVar120 + iVar121 + iVar122;
        iVar69 = iVar69 + iVar107 + iVar108 + iVar109 + iVar110;
        iVar97 = iVar97 + iVar113 + iVar115 + iVar116 + iVar117;
        iVar99 = iVar99 + iVar123 + iVar125 + iVar126 + iVar128;
        if (uVar114 == uVar102) goto LAB_003a2d1c;
      }
      iVar76 = iVar76 + (uint)pbVar88[1];
      iVar99 = iVar99 + (uint)pbVar88[2];
      iVar69 = iVar69 + (uint)pbVar88[3];
      iVar97 = iVar97 + (uint)*pbVar88;
      if (iVar98 + 1 < param_4) {
        iVar99 = iVar99 + (uint)pbVar88[lVar74 + 2];
        lVar85 = lVar74 * 2;
        iVar69 = iVar69 + (uint)pbVar88[lVar74 + 3];
        iVar97 = iVar97 + (uint)pbVar88[lVar74];
        iVar76 = iVar76 + (uint)pbVar88[lVar74 + 1];
        if (iVar98 + 2 < param_4) {
          iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
          lVar79 = lVar74 * 3;
          iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
          iVar97 = iVar97 + (uint)pbVar88[lVar74 * 2];
          iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
          if (iVar98 + 3 < param_4) {
            iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
            lVar85 = lVar74 * 4;
            iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
            iVar97 = iVar97 + (uint)pbVar88[lVar74 * 3];
            iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
            if (iVar98 + 4 < param_4) {
              iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
              lVar79 = lVar74 * 5;
              iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
              iVar97 = iVar97 + (uint)pbVar88[lVar74 * 4];
              iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
              if (iVar98 + 5 < param_4) {
                iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
                lVar85 = lVar74 * 6;
                iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
                iVar97 = iVar97 + (uint)pbVar88[lVar74 * 5];
                iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
                if (iVar98 + 6 < param_4) {
                  iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
                  lVar79 = lVar74 * 7;
                  iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
                  iVar97 = iVar97 + (uint)pbVar88[lVar74 * 6];
                  iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
                  if (iVar98 + 7 < param_4) {
                    iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
                    lVar85 = lVar74 * 8;
                    iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
                    iVar97 = iVar97 + (uint)pbVar88[lVar74 * 7];
                    iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
                    if (iVar98 + 8 < param_4) {
                      iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
                      lVar79 = lVar74 * 9;
                      iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
                      iVar97 = iVar97 + (uint)pbVar88[lVar74 * 8];
                      iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
                      if (iVar98 + 9 < param_4) {
                        iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
                        lVar85 = lVar74 * 10;
                        iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
                        iVar97 = iVar97 + (uint)pbVar88[lVar74 * 9];
                        iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
                        if (iVar98 + 10 < param_4) {
                          iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
                          lVar79 = lVar74 * 0xb;
                          iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
                          iVar97 = iVar97 + (uint)pbVar88[lVar74 * 10];
                          iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
                          if (iVar98 + 0xb < param_4) {
                            iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
                            lVar85 = lVar74 * 0xc;
                            iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
                            iVar97 = iVar97 + (uint)pbVar88[lVar74 * 0xb];
                            iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
                            if (iVar98 + 0xc < param_4) {
                              iVar97 = iVar97 + (uint)pbVar88[lVar74 * 0xc];
                              iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
                              lVar79 = lVar74 * 0xd;
                              iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
                              iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
                              if (iVar98 + 0xd < param_4) {
                                iVar97 = iVar97 + (uint)pbVar88[lVar74 * 0xd];
                                iVar76 = iVar76 + (uint)pbVar88[lVar79 + 1];
                                iVar99 = iVar99 + (uint)pbVar88[lVar79 + 2];
                                lVar85 = lVar74 * 0xe;
                                iVar69 = iVar69 + (uint)pbVar88[lVar79 + 3];
                                if (iVar98 + 0xe < param_4) {
                                  iVar97 = iVar97 + (uint)pbVar88[lVar74 * 0xe];
                                  iVar76 = iVar76 + (uint)pbVar88[lVar85 + 1];
                                  iVar99 = iVar99 + (uint)pbVar88[lVar85 + 2];
                                  iVar69 = iVar69 + (uint)pbVar88[lVar85 + 3];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003a2d1c:
    iVar98 = iVar130;
    *(ulong *)(pbVar78 + 8) = CONCAT44(iVar69,iVar99);
    *(ulong *)pbVar78 = CONCAT44(iVar76,iVar97);
    if (lVar90 == lVar129 + 4 + (ulong)((param_5 - 1U) - iVar77 >> 2) * 4) {
      return param_4;
    }
    pbVar78 = pbVar78 + 0x10;
    lVar85 = lVar90;
    lVar90 = lVar90 + 4;
  } while( true );
}


==================================================================

### FUNC 003a43a4 (10536 bytes) name=FUN_003a43a4

int FUN_003a43a4(int *param_1,long param_2,int *param_3,int param_4,int param_5)

{
  char *pcVar1;
  char *pcVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  char *pcVar12;
  char *pcVar13;
  char *pcVar14;
  char *pcVar15;
  char *pcVar16;
  char *pcVar17;
  char *pcVar18;
  char *pcVar19;
  char *pcVar20;
  char *pcVar21;
  char *pcVar22;
  char *pcVar23;
  char *pcVar24;
  char *pcVar25;
  char *pcVar26;
  char *pcVar27;
  char *pcVar28;
  char *pcVar29;
  char *pcVar30;
  char *pcVar31;
  char *pcVar32;
  char *pcVar33;
  char *pcVar34;
  char *pcVar35;
  char *pcVar36;
  char *pcVar37;
  char *pcVar38;
  char *pcVar39;
  char *pcVar40;
  char *pcVar41;
  char *pcVar42;
  char *pcVar43;
  char *pcVar44;
  char *pcVar45;
  char *pcVar46;
  char *pcVar47;
  char *pcVar48;
  char *pcVar49;
  char *pcVar50;
  char *pcVar51;
  char *pcVar52;
  char *pcVar53;
  char *pcVar54;
  char *pcVar55;
  char *pcVar56;
  char *pcVar57;
  char *pcVar58;
  char *pcVar59;
  char *pcVar60;
  uint uVar61;
  uint uVar62;
  uint uVar63;
  char cVar64;
  char cVar65;
  char cVar66;
  byte bVar67;
  char cVar68;
  uint uVar69;
  uint uVar70;
  char *pcVar71;
  int *piVar72;
  undefined8 *puVar73;
  char *pcVar75;
  int *piVar76;
  long lVar77;
  long lVar78;
  char *pcVar79;
  int iVar80;
  long lVar81;
  long lVar82;
  long lVar83;
  int *piVar84;
  long lVar85;
  int iVar86;
  int iVar87;
  long lVar88;
  long lVar89;
  char *pcVar90;
  long lVar91;
  long lVar92;
  int *piVar93;
  long lVar94;
  long lVar95;
  long lVar96;
  long lVar97;
  char *pcVar98;
  long lVar99;
  int *piVar100;
  long lVar101;
  int *piVar102;
  long lVar103;
  long lVar104;
  int iVar105;
  int iVar106;
  int iVar107;
  undefined8 uVar108;
  undefined8 uVar109;
  uint uVar110;
  undefined8 uVar111;
  undefined8 uVar112;
  undefined8 uVar113;
  undefined8 uVar114;
  int iVar115;
  int iVar116;
  int iVar117;
  int iVar118;
  undefined8 uVar119;
  undefined8 uVar120;
  int iVar121;
  uint uVar122;
  int iVar123;
  int iVar124;
  int iVar125;
  int iVar126;
  uint uVar127;
  int iVar128;
  int iVar129;
  int iVar130;
  int iVar131;
  long lVar132;
  int iVar133;
  int iVar134;
  undefined8 uVar135;
  int iVar136;
  long lVar137;
  int iVar138;
  int local_10 [4];
  undefined8 *puVar74;
  
  if (param_2 != 0) {
    if (param_5 == 1) {
      iVar86 = *param_3;
      if (param_4 < 1) {
        iVar87 = 0;
      }
      else {
        lVar85 = 0;
        iVar87 = 0;
        do {
                    /* try { // try from 003a4d34 to 004a4d53 has its CatchHandler @ 003a6150 */
          if (*(char *)(param_2 + lVar85) != '\0') {
            iVar87 = iVar87 + 1;
            iVar86 = iVar86 + *(char *)((long)param_1 + lVar85);
          }
          lVar85 = lVar85 + 1;
        } while ((int)lVar85 < param_4);
      }
      *param_3 = iVar86;
      return iVar87;
    }
    if (param_5 == 3) {
      iVar86 = *param_3;
      iVar87 = param_3[1];
      iVar80 = param_3[2];
      if (param_4 < 1) {
        iVar106 = 0;
      }
      else {
        lVar85 = 0;
        iVar106 = 0;
        do {
          pcVar98 = (char *)(param_2 + lVar85);
          lVar85 = lVar85 + 1;
          if (*pcVar98 != '\0') {
            iVar106 = iVar106 + 1;
                    /* try { // try from 003a4d98 to 004a4d9b has its CatchHandler @ 003a61b4 */
            iVar86 = iVar86 + (char)*param_1;
            iVar87 = iVar87 + *(char *)((long)param_1 + 1);
            iVar80 = iVar80 + *(char *)((long)param_1 + 2);
          }
          param_1 = (int *)((long)param_1 + 3);
        } while ((int)lVar85 < param_4);
      }
      *param_3 = iVar86;
      param_3[1] = iVar87;
      param_3[2] = iVar80;
      return iVar106;
    }
    if (param_4 < 1) {
      return 0;
    }
    uVar127 = param_5 - 4;
    iVar106 = param_5 + -3;
    lVar85 = 0;
    uVar110 = uVar127 >> 2;
    uVar61 = uVar110 + 1;
    uVar122 = (uVar110 - 3 >> 2) + 1;
    iVar87 = uVar122 * 0x10;
    iVar86 = 0;
    iVar80 = uVar61 * 4;
    if (uVar127 < 0xc) {
      iVar87 = 0;
    }
    if (iVar106 < 1) {
      iVar80 = 0;
    }
    lVar101 = (long)iVar80;
    lVar137 = NEON_shl((ulong)uVar61,2);
    uVar69 = param_5 - iVar80;
    lVar81 = (long)iVar87;
    lVar82 = (long)(iVar87 + 4);
    lVar83 = (long)(iVar87 + 8);
    iVar105 = iVar80 + 1;
    iVar107 = iVar80 + 2;
    piVar72 = param_3 + lVar101;
    uVar62 = -((uint)((ulong)piVar72 >> 2) & 3) & 3;
    uVar63 = uVar69;
    if (uVar62 < uVar69) {
      uVar63 = uVar62;
    }
    uVar62 = ((uVar69 - uVar63) - 0x10 >> 4) + 1;
    iVar138 = uVar62 * 0x10;
    do {
      if (*(char *)(param_2 + lVar85) != '\0') {
        if (0 < iVar106) {
          if ((param_3 < (int *)((long)param_1 + lVar137) && param_1 < param_3 + (ulong)uVar61 * 4)
             || (uVar61 < 4)) {
                    /* catch() { ... } // from try @ 003a2208 with catch @ 003a4c88
                       catch() { ... } // from try @ 003a2240 with catch @ 003a4c88
                       catch() { ... } // from try @ 003a27a8 with catch @ 003a4c88 */
            pcVar98 = (char *)((long)param_1 + 1);
            piVar93 = param_3;
            do {
              pcVar71 = pcVar98 + 4;
              bVar67 = pcVar98[-1];
              piVar93[1] = (int)*pcVar98 + piVar93[1];
              *piVar93 = *piVar93 + (uint)bVar67;
              bVar67 = pcVar98[1];
              piVar93[3] = (uint)(byte)pcVar98[2] + piVar93[3];
              piVar93[2] = piVar93[2] + (uint)bVar67;
              pcVar98 = pcVar71;
              piVar93 = piVar93 + 4;
                    /* catch() { ... } // from try @ 003a4d10 with catch @ 003a4cd8
                       catch() { ... } // from try @ 003a5390 with catch @ 003a4cd8
                       catch() { ... } // from try @ 003a6138 with catch @ 003a4cd8
                       catch() { ... } // from try @ 003a6174 with catch @ 003a4cd8 */
            } while (pcVar71 != (char *)((long)param_1 + (ulong)uVar110 * 4 + 5));
          }
          else {
            if (0xb < uVar127) {
              piVar93 = param_3 + 4;
              piVar84 = param_3 + 8;
              piVar76 = param_3 + 0xc;
              uVar70 = 0;
              piVar100 = param_1;
              piVar102 = param_3;
              do {
                uVar108 = *(undefined8 *)(piVar100 + 2);
                uVar109 = *(undefined8 *)piVar100;
                uVar70 = uVar70 + 1;
                uVar120 = *(undefined8 *)(piVar93 + 2);
                uVar119 = *(undefined8 *)piVar93;
                uVar114 = *(undefined8 *)(piVar84 + 2);
                uVar113 = *(undefined8 *)piVar84;
                    /* try { // try from 003a4724 to 004a4727 has its CatchHandler @ 003a4c4c */
                uVar112 = *(undefined8 *)(piVar76 + 2);
                uVar111 = *(undefined8 *)piVar76;
                    /* try { // try from 003a4744 to 004a4747 has its CatchHandler @ 003a4c54 */
                    /* try { // try from 003a4750 to 004a4753 has its CatchHandler @ 003a4c4c */
                *(ulong *)(piVar102 + 2) =
                     CONCAT44((int)((ulong)*(undefined8 *)(piVar102 + 2) >> 0x20) +
                              (int)(short)(char)((ulong)uVar109 >> 0x18),
                              (int)*(undefined8 *)(piVar102 + 2) +
                              (int)(short)(char)((ulong)uVar109 >> 0x10));
                *(ulong *)piVar102 =
                     CONCAT44((int)((ulong)*(undefined8 *)piVar102 >> 0x20) +
                              (int)(short)(char)((ulong)uVar109 >> 8),
                              (int)*(undefined8 *)piVar102 + (int)(short)(char)uVar109);
                piVar102 = piVar102 + 0x10;
                *(ulong *)(piVar93 + 2) =
                     CONCAT44((int)((ulong)uVar120 >> 0x20) +
                              (int)(short)(char)((ulong)uVar109 >> 0x38),
                              (int)uVar120 + (int)(short)(char)((ulong)uVar109 >> 0x30));
                *(ulong *)piVar93 =
                     CONCAT44((int)((ulong)uVar119 >> 0x20) +
                              (int)(short)(char)((ulong)uVar109 >> 0x28),
                              (int)uVar119 + (int)(short)(char)((ulong)uVar109 >> 0x20));
                piVar93 = piVar93 + 0x10;
                *(ulong *)(piVar84 + 2) =
                     CONCAT44((int)((ulong)uVar114 >> 0x20) +
                              (int)(short)(char)((ulong)uVar108 >> 0x18),
                              (int)uVar114 + (int)(short)(char)((ulong)uVar108 >> 0x10));
                *(ulong *)piVar84 =
                     CONCAT44((int)((ulong)uVar113 >> 0x20) +
                              (int)(short)(char)((ulong)uVar108 >> 8),
                              (int)uVar113 + (int)(short)(char)uVar108);
                piVar84 = piVar84 + 0x10;
                *(ulong *)(piVar76 + 2) =
                     CONCAT44((int)((ulong)uVar112 >> 0x20) +
                              (int)(short)(char)((ulong)uVar108 >> 0x38),
                              (int)uVar112 + (int)(short)(char)((ulong)uVar108 >> 0x30));
                *(ulong *)piVar76 =
                     CONCAT44((int)((ulong)uVar111 >> 0x20) +
                              (int)(short)(char)((ulong)uVar108 >> 0x28),
                              (int)uVar111 + (int)(short)(char)((ulong)uVar108 >> 0x20));
                piVar76 = piVar76 + 0x10;
                piVar100 = piVar100 + 4;
              } while (uVar70 < uVar122);
              if (uVar61 == uVar122 * 4) goto LAB_003a48b8;
            }
            cVar68 = *(char *)((long)param_1 + lVar81 + 1);
            param_3[lVar81] = param_3[lVar81] + (int)*(char *)((long)param_1 + lVar81);
            param_3[lVar81 + 1] = (int)cVar68 + param_3[lVar81 + 1];
            cVar68 = *(char *)((long)param_1 + lVar81 + 3);
            param_3[lVar81 + 2] = param_3[lVar81 + 2] + (int)*(char *)((long)param_1 + lVar81 + 2);
            param_3[lVar81 + 3] = (int)cVar68 + param_3[lVar81 + 3];
            if (iVar87 + 4 < iVar106) {
              cVar68 = *(char *)((long)param_1 + lVar82 + 1);
              param_3[lVar82] = param_3[lVar82] + (int)*(char *)((long)param_1 + lVar82);
              param_3[lVar82 + 1] = (int)cVar68 + param_3[lVar82 + 1];
              cVar68 = *(char *)((long)param_1 + lVar82 + 3);
              param_3[lVar82 + 2] = param_3[lVar82 + 2] + (int)*(char *)((long)param_1 + lVar82 + 2)
              ;
              param_3[lVar82 + 3] = (int)cVar68 + param_3[lVar82 + 3];
              if (iVar87 + 8 < iVar106) {
                cVar68 = *(char *)((long)param_1 + lVar83 + 1);
                param_3[lVar83] = param_3[lVar83] + (int)*(char *)((long)param_1 + lVar83);
                param_3[lVar83 + 1] = (int)cVar68 + param_3[lVar83 + 1];
                    /* try { // try from 003a488c to 004a488f has its CatchHandler @ 003a4bc8 */
                cVar68 = *(char *)((long)param_1 + lVar83 + 3);
                param_3[lVar83 + 2] =
                     param_3[lVar83 + 2] + (int)*(char *)((long)param_1 + lVar83 + 2);
                param_3[lVar83 + 3] = (int)cVar68 + param_3[lVar83 + 3];
              }
            }
          }
        }
LAB_003a48b8:
        if (iVar80 < param_5) {
          piVar93 = (int *)((long)param_1 + lVar101);
          if ((piVar72 < (int *)((long)param_1 + lVar101 + (ulong)uVar69) &&
               piVar93 < param_3 + lVar101 + (ulong)uVar69) || (uVar69 < 0x13)) {
            lVar77 = 0;
            do {
              piVar72[lVar77] = piVar72[lVar77] + (int)*(char *)((long)piVar93 + lVar77);
              lVar77 = lVar77 + 1;
            } while (lVar77 != (ulong)(uint)((param_5 + -1) - iVar80) + 1);
            iVar86 = iVar86 + 1;
            goto LAB_003a4c28;
          }
          iVar115 = iVar80;
          if (((uVar63 != 0) &&
              (*piVar72 = *piVar72 + (int)(char)*piVar93, iVar115 = iVar105, uVar63 != 1)) &&
             (param_3[iVar105] = param_3[iVar105] + (int)*(char *)((long)param_1 + (long)iVar105),
             iVar115 = iVar107, uVar63 == 3)) {
            param_3[iVar107] = param_3[iVar107] + (int)*(char *)((long)param_1 + (long)iVar107);
            iVar115 = iVar80 + 3;
          }
          if (0xe < (uVar69 - 1) - uVar63) {
            uVar70 = 0;
            piVar93 = param_3 + lVar101 + (ulong)uVar63;
            piVar84 = param_3 + (ulong)uVar63 + lVar101;
            puVar73 = (undefined8 *)((long)param_1 + lVar101 + (ulong)uVar63);
            do {
              uVar111 = *(undefined8 *)piVar93;
              uVar70 = uVar70 + 1;
              uVar119 = *(undefined8 *)(piVar93 + 10);
              uVar114 = *(undefined8 *)(piVar93 + 8);
              uVar108 = puVar73[1];
              uVar109 = *puVar73;
              uVar135 = *(undefined8 *)(piVar93 + 6);
              uVar120 = *(undefined8 *)(piVar93 + 4);
              uVar113 = *(undefined8 *)(piVar93 + 0xe);
              uVar112 = *(undefined8 *)(piVar93 + 0xc);
              *(ulong *)(piVar84 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar93 + 2) >> 0x20) +
                            (int)(short)(char)((ulong)uVar109 >> 0x18),
                            (int)*(undefined8 *)(piVar93 + 2) +
                            (int)(short)(char)((ulong)uVar109 >> 0x10));
              *(ulong *)piVar84 =
                   CONCAT44((int)((ulong)uVar111 >> 0x20) + (int)(short)(char)((ulong)uVar109 >> 8),
                            (int)uVar111 + (int)(short)(char)uVar109);
              *(ulong *)(piVar84 + 6) =
                   CONCAT44((int)(short)(char)((ulong)uVar109 >> 0x38) +
                            (int)((ulong)uVar135 >> 0x20),
                            (int)(short)(char)((ulong)uVar109 >> 0x30) + (int)uVar135);
              *(ulong *)(piVar84 + 4) =
                   CONCAT44((int)(short)(char)((ulong)uVar109 >> 0x28) +
                            (int)((ulong)uVar120 >> 0x20),
                            (int)(short)(char)((ulong)uVar109 >> 0x20) + (int)uVar120);
              *(ulong *)(piVar84 + 10) =
                   CONCAT44((int)(short)(char)((ulong)uVar108 >> 0x18) +
                            (int)((ulong)uVar119 >> 0x20),
                            (int)(short)(char)((ulong)uVar108 >> 0x10) + (int)uVar119);
              *(ulong *)(piVar84 + 8) =
                   CONCAT44((int)(short)(char)((ulong)uVar108 >> 8) + (int)((ulong)uVar114 >> 0x20),
                            (int)(short)(char)uVar108 + (int)uVar114);
              *(ulong *)(piVar84 + 0xe) =
                   CONCAT44((int)(short)(char)((ulong)uVar108 >> 0x38) +
                            (int)((ulong)uVar113 >> 0x20),
                            (int)(short)(char)((ulong)uVar108 >> 0x30) + (int)uVar113);
              *(ulong *)(piVar84 + 0xc) =
                   CONCAT44((int)(short)(char)((ulong)uVar108 >> 0x28) +
                            (int)((ulong)uVar112 >> 0x20),
                            (int)(short)(char)((ulong)uVar108 >> 0x20) + (int)uVar112);
              piVar93 = piVar93 + 0x10;
              piVar84 = piVar84 + 0x10;
              puVar73 = puVar73 + 2;
            } while (uVar70 < uVar62);
            iVar115 = iVar115 + iVar138;
            if (uVar69 - uVar63 == iVar138) goto LAB_003a4c24;
          }
          lVar77 = (long)iVar115;
          param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
          if (iVar115 + 1 < param_5) {
            lVar77 = (long)(iVar115 + 1);
            param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
            if (iVar115 + 2 < param_5) {
              lVar77 = (long)(iVar115 + 2);
              param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
              if (iVar115 + 3 < param_5) {
                lVar77 = (long)(iVar115 + 3);
                param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                if (iVar115 + 4 < param_5) {
                  lVar77 = (long)(iVar115 + 4);
                  param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                  if (iVar115 + 5 < param_5) {
                    lVar77 = (long)(iVar115 + 5);
                    param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                    if (iVar115 + 6 < param_5) {
                      lVar77 = (long)(iVar115 + 6);
                      param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                      if (iVar115 + 7 < param_5) {
                        lVar77 = (long)(iVar115 + 7);
                        param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                        if (iVar115 + 8 < param_5) {
                          lVar77 = (long)(iVar115 + 8);
                          param_3[lVar77] = param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77)
                          ;
                          if (iVar115 + 9 < param_5) {
                            lVar77 = (long)(iVar115 + 9);
                            param_3[lVar77] =
                                 param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                            if (iVar115 + 10 < param_5) {
                              lVar77 = (long)(iVar115 + 10);
                              param_3[lVar77] =
                                   param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                              if (iVar115 + 0xb < param_5) {
                                lVar77 = (long)(iVar115 + 0xb);
                                param_3[lVar77] =
                                     param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                                if (iVar115 + 0xc < param_5) {
                                  lVar77 = (long)(iVar115 + 0xc);
                    /* catch() { ... } // from try @ 003a1fa0 with catch @ 003a4bc8
                       catch() { ... } // from try @ 003a401c with catch @ 003a4bc8
                       catch() { ... } // from try @ 003a488c with catch @ 003a4bc8 */
                                  param_3[lVar77] =
                                       param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                                  if (iVar115 + 0xd < param_5) {
                    /* try { // try from 003a4be8 to 004a4beb has its CatchHandler @ 003a1f40 */
                                    lVar77 = (long)(iVar115 + 0xd);
                    /* catch() { ... } // from try @ 003a2144 with catch @ 003a4c00 */
                                    param_3[lVar77] =
                                         param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                                    if (iVar115 + 0xe < param_5) {
                                      lVar77 = (long)(iVar115 + 0xe);
                                      param_3[lVar77] =
                                           param_3[lVar77] + (int)*(char *)((long)param_1 + lVar77);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003a4c24:
        iVar86 = iVar86 + 1;
      }
LAB_003a4c28:
      lVar85 = lVar85 + 1;
      param_1 = (int *)((long)param_1 + (long)param_5);
      if (param_4 <= (int)lVar85) {
        return iVar86;
      }
    } while( true );
  }
  if (param_5 - 1U < 2) {
LAB_003a6ab8:
    if (param_4 < 0x10) {
                    /* try { // try from 003a6cc0 to 004a6cc3 has its CatchHandler @ 003a7210 */
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      iVar87 = 0;
    }
    else {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      uVar61 = param_4 - 0x10U >> 4;
      piVar72 = param_1;
      do {
        piVar93 = piVar72 + 4;
        uVar108 = *(undefined8 *)(piVar72 + 2);
        uVar109 = *(undefined8 *)piVar72;
        local_10[0] = local_10[0] + (short)(char)uVar109 +
                      (int)(short)(char)((ulong)uVar109 >> 0x20) + (int)(short)(char)uVar108 +
                      (int)(short)(char)((ulong)uVar108 >> 0x20);
        local_10[1] = local_10[1] + (short)(char)((ulong)uVar109 >> 8) +
                      (int)(short)(char)((ulong)uVar109 >> 0x28) +
                      (int)(short)(char)((ulong)uVar108 >> 8) +
                      (int)(short)(char)((ulong)uVar108 >> 0x28);
        local_10[2] = local_10[2] + (short)(char)((ulong)uVar109 >> 0x10) +
                      (int)(short)(char)((ulong)uVar109 >> 0x30) +
                      (int)(short)(char)((ulong)uVar108 >> 0x10) +
                      (int)(short)(char)((ulong)uVar108 >> 0x30);
        local_10[3] = local_10[3] + (short)(char)((ulong)uVar109 >> 0x18) +
                      (int)(short)(char)((ulong)uVar109 >> 0x38) +
                      (int)(short)(char)((ulong)uVar108 >> 0x18) +
                      (int)(short)(char)((ulong)uVar108 >> 0x38);
        piVar72 = piVar93;
      } while (piVar93 != param_1 + ((ulong)uVar61 + 1) * 4);
      iVar87 = (uVar61 + 1) * 0x10;
    }
    if (iVar87 < param_4 + -7) {
      uVar61 = (uint)((param_4 + -8) - iVar87) >> 3;
      puVar73 = (undefined8 *)((long)param_1 + (long)iVar87);
      do {
        puVar74 = puVar73 + 1;
        uVar109 = *puVar73;
        local_10[0] = local_10[0] + (short)(char)uVar109 +
                      (int)(short)(char)((ulong)uVar109 >> 0x20);
        local_10[1] = local_10[1] + (short)(char)((ulong)uVar109 >> 8) +
                      (int)(short)(char)((ulong)uVar109 >> 0x28);
        local_10[2] = local_10[2] + (short)(char)((ulong)uVar109 >> 0x10) +
                      (int)(short)(char)((ulong)uVar109 >> 0x30);
        local_10[3] = local_10[3] + (short)(char)((ulong)uVar109 >> 0x18) +
                      (int)(short)(char)((ulong)uVar109 >> 0x38);
        puVar73 = puVar74;
      } while (puVar74 != (undefined8 *)((long)param_1 + (long)iVar87 + 8 + (ulong)uVar61 * 8));
      iVar87 = iVar87 + 8 + uVar61 * 8;
    }
    if (param_5 < 1) {
      do {
                    /* WARNING: Do nothing block with infinite loop */
      } while( true );
    }
    if (param_5 == 1) {
      iVar80 = *param_3;
      iVar86 = 0;
      do {
        lVar85 = (long)iVar86;
        iVar86 = iVar86 + 1;
        iVar80 = iVar80 + local_10[lVar85];
      } while (iVar86 != 4);
      *param_3 = iVar80;
    }
    else if (param_5 == 2) {
      iVar106 = param_3[1];
      iVar86 = 0;
      iVar80 = *param_3;
      do {
        lVar85 = (long)iVar86;
        iVar105 = iVar86 + 1;
        iVar86 = iVar86 + 2;
        iVar80 = iVar80 + local_10[lVar85];
        iVar106 = iVar106 + local_10[iVar105];
      } while (iVar86 != 4);
      *param_3 = iVar80;
                    /* try { // try from 003a6cb8 to 004a6cbb has its CatchHandler @ 003a7194 */
      param_3[1] = iVar106;
    }
    else if (param_5 == 3) {
      iVar106 = param_3[2];
      iVar105 = 0;
      iVar80 = param_3[1];
      iVar86 = *param_3;
      while( true ) {
        iVar86 = iVar86 + local_10[iVar105];
        iVar80 = iVar80 + local_10[iVar105 + 1];
        iVar106 = iVar106 + local_10[iVar105 + 2];
        if (iVar105 != 0) break;
        iVar105 = 3;
      }
      *param_3 = iVar86;
      param_3[1] = iVar80;
      param_3[2] = iVar106;
    }
    else {
      param_3[1] = local_10[1] + param_3[1];
      param_3[2] = local_10[2] + param_3[2];
      *param_3 = *param_3 + local_10[0];
      param_3[3] = local_10[3] + param_3[3];
    }
    iVar86 = 0;
    if (param_5 != 0) {
      iVar86 = iVar87 / param_5;
    }
    lVar85 = (long)(param_5 * iVar86);
  }
  else {
                    /* try { // try from 003a4de8 to 004a4deb has its CatchHandler @ 003a61a4 */
    iVar86 = 0;
    lVar85 = 0;
                    /* try { // try from 003a4df0 to 004a4e1f has its CatchHandler @ 003a61b4 */
    if (param_5 == 4) goto LAB_003a6ab8;
  }
  pcVar98 = (char *)((long)param_1 + lVar85);
  iVar87 = param_5 % 4;
  if (iVar87 != 1) {
    iVar106 = iVar86;
    if (iVar87 != 2) {
      if (iVar87 != 3) goto LAB_003a4e24;
      iVar105 = *param_3;
      iVar80 = param_3[1];
      iVar107 = param_3[2];
      if (iVar86 < param_4) {
        uVar122 = param_4 - iVar86;
        lVar81 = (long)param_5;
        uVar61 = (uVar122 - 0x10 >> 4) + 1;
        uVar110 = uVar61 * 0x10;
        if (0xe < (uint)((param_4 + -1) - iVar86)) {
          pcVar71 = (char *)((long)param_1 + lVar85 + 2);
          iVar117 = 0;
          iVar118 = 0;
          iVar129 = 0;
          iVar130 = 0;
          lVar95 = lVar81 * 2;
          lVar99 = lVar81 * 4;
          lVar83 = lVar81 * 3;
          lVar101 = lVar81 * 5;
          uVar127 = 0;
          lVar92 = lVar81 * 0x10;
          lVar94 = lVar81 * 8;
          lVar97 = lVar81 * 0xc;
          lVar96 = lVar81 * 10;
          pcVar90 = (char *)((long)param_1 + lVar85 + 1);
          lVar137 = lVar81 * 0xe;
          lVar88 = lVar81 * 6;
          lVar85 = lVar81 * 7;
          lVar77 = lVar81 * 9;
          lVar89 = lVar81 * 0xd;
          lVar78 = lVar81 * 0xb;
          lVar82 = lVar81 * 0xf;
          pcVar79 = pcVar98;
          iVar106 = iVar117;
          iVar138 = iVar118;
          iVar115 = iVar117;
          iVar116 = iVar118;
          iVar126 = iVar129;
          iVar128 = iVar130;
          iVar131 = iVar129;
          iVar133 = iVar130;
          do {
            uVar127 = uVar127 + 1;
            cVar68 = *pcVar79;
            pcVar75 = pcVar79 + lVar81;
            pcVar1 = pcVar79 + lVar95;
            pcVar2 = pcVar79 + lVar83;
            pcVar3 = pcVar79 + lVar99;
            pcVar4 = pcVar79 + lVar101;
            pcVar5 = pcVar79 + lVar88;
            pcVar6 = pcVar79 + lVar85;
            pcVar7 = pcVar79 + lVar94;
            pcVar8 = pcVar79 + lVar77;
            pcVar9 = pcVar79 + lVar96;
            pcVar10 = pcVar79 + lVar78;
            pcVar11 = pcVar79 + lVar97;
            pcVar12 = pcVar79 + lVar89;
            pcVar13 = pcVar79 + lVar137;
            pcVar14 = pcVar79 + lVar82;
            pcVar79 = pcVar79 + lVar92;
            cVar64 = *pcVar90;
            pcVar15 = pcVar90 + lVar81;
            pcVar16 = pcVar90 + lVar95;
            pcVar17 = pcVar90 + lVar83;
            pcVar18 = pcVar90 + lVar99;
            pcVar19 = pcVar90 + lVar101;
            pcVar20 = pcVar90 + lVar88;
            pcVar21 = pcVar90 + lVar85;
            pcVar22 = pcVar90 + lVar94;
            iVar117 = (int)(short)*pcVar11 +
                      (int)(short)*pcVar7 + (int)(short)*pcVar3 + (short)cVar68 + iVar117;
            iVar118 = (int)(short)*pcVar12 +
                      (int)(short)*pcVar8 + (int)(short)*pcVar4 + (short)*pcVar75 + iVar118;
            iVar129 = (int)(short)*pcVar13 +
                      (int)(short)*pcVar9 + (int)(short)*pcVar5 + (short)*pcVar1 + iVar129;
            iVar130 = (int)(short)*pcVar14 +
                      (int)(short)*pcVar10 + (int)(short)*pcVar6 + (short)*pcVar2 + iVar130;
            pcVar75 = pcVar90 + lVar77;
            pcVar1 = pcVar90 + lVar96;
            pcVar2 = pcVar90 + lVar78;
            pcVar3 = pcVar90 + lVar97;
            pcVar4 = pcVar90 + lVar89;
            pcVar5 = pcVar90 + lVar137;
            pcVar6 = pcVar90 + lVar82;
            pcVar90 = pcVar90 + lVar92;
                    /* try { // try from 003a672c to 004a6c7b has its CatchHandler @ 003a7210 */
            cVar68 = *pcVar71;
            pcVar7 = pcVar71 + lVar81;
            pcVar8 = pcVar71 + lVar95;
            pcVar9 = pcVar71 + lVar83;
            pcVar10 = pcVar71 + lVar99;
            pcVar11 = pcVar71 + lVar101;
            pcVar12 = pcVar71 + lVar88;
            pcVar13 = pcVar71 + lVar85;
            pcVar14 = pcVar71 + lVar94;
            iVar115 = (int)(short)*pcVar3 +
                      (int)(short)*pcVar22 + (int)(short)*pcVar18 + (short)cVar64 + iVar115;
            iVar116 = (int)(short)*pcVar4 +
                      (int)(short)*pcVar75 + (int)(short)*pcVar19 + (short)*pcVar15 + iVar116;
            iVar131 = (int)(short)*pcVar5 +
                      (int)(short)*pcVar1 + (int)(short)*pcVar20 + (short)*pcVar16 + iVar131;
            iVar133 = (int)(short)*pcVar6 +
                      (int)(short)*pcVar2 + (int)(short)*pcVar21 + (short)*pcVar17 + iVar133;
            pcVar75 = pcVar71 + lVar77;
            pcVar1 = pcVar71 + lVar96;
            pcVar2 = pcVar71 + lVar78;
            pcVar3 = pcVar71 + lVar97;
            pcVar4 = pcVar71 + lVar89;
            pcVar5 = pcVar71 + lVar137;
            pcVar6 = pcVar71 + lVar82;
            pcVar71 = pcVar71 + lVar92;
            iVar106 = (int)(short)*pcVar3 +
                      (int)(short)*pcVar14 + (int)(short)*pcVar10 + (short)cVar68 + iVar106;
            iVar138 = (int)(short)*pcVar4 +
                      (int)(short)*pcVar75 + (int)(short)*pcVar11 + (short)*pcVar7 + iVar138;
            iVar126 = (int)(short)*pcVar5 +
                      (int)(short)*pcVar1 + (int)(short)*pcVar12 + (short)*pcVar8 + iVar126;
            iVar128 = (int)(short)*pcVar6 +
                      (int)(short)*pcVar2 + (int)(short)*pcVar13 + (short)*pcVar9 + iVar128;
          } while (uVar127 < uVar61);
          iVar86 = iVar86 + uVar110;
          pcVar98 = pcVar98 + (ulong)uVar110 * lVar81;
          iVar80 = iVar80 + iVar115 + iVar116 + iVar131 + iVar133;
          iVar105 = iVar105 + iVar117 + iVar118 + iVar129 + iVar130;
          iVar107 = iVar107 + iVar106 + iVar138 + iVar126 + iVar128;
          iVar106 = param_4;
          if (uVar122 == uVar110) goto LAB_003a6aa8;
        }
        iVar105 = iVar105 + *pcVar98;
        iVar80 = iVar80 + pcVar98[1];
        iVar107 = iVar107 + pcVar98[2];
        iVar106 = param_4;
        if (iVar86 + 1 < param_4) {
          iVar105 = iVar105 + pcVar98[lVar81];
          iVar80 = iVar80 + pcVar98[lVar81 + 1];
          iVar107 = iVar107 + pcVar98[lVar81 + 2];
          if (iVar86 + 2 < param_4) {
            iVar105 = iVar105 + pcVar98[lVar81 * 2];
            iVar80 = iVar80 + pcVar98[lVar81 * 2 + 1];
            iVar107 = iVar107 + pcVar98[lVar81 * 2 + 2];
            if (iVar86 + 3 < param_4) {
              iVar105 = iVar105 + pcVar98[lVar81 * 3];
              iVar80 = iVar80 + pcVar98[lVar81 * 3 + 1];
              iVar107 = iVar107 + pcVar98[lVar81 * 3 + 2];
              if (iVar86 + 4 < param_4) {
                iVar105 = iVar105 + pcVar98[lVar81 * 4];
                iVar80 = iVar80 + pcVar98[lVar81 * 4 + 1];
                iVar107 = iVar107 + pcVar98[lVar81 * 4 + 2];
                if (iVar86 + 5 < param_4) {
                  iVar105 = iVar105 + pcVar98[lVar81 * 5];
                  iVar80 = iVar80 + pcVar98[lVar81 * 5 + 1];
                  iVar107 = iVar107 + pcVar98[lVar81 * 5 + 2];
                  if (iVar86 + 6 < param_4) {
                    iVar105 = iVar105 + pcVar98[lVar81 * 6];
                    iVar80 = iVar80 + pcVar98[lVar81 * 6 + 1];
                    iVar107 = iVar107 + pcVar98[lVar81 * 6 + 2];
                    if (iVar86 + 7 < param_4) {
                      iVar105 = iVar105 + pcVar98[lVar81 * 7];
                      iVar80 = iVar80 + pcVar98[lVar81 * 7 + 1];
                      iVar107 = iVar107 + pcVar98[lVar81 * 7 + 2];
                      if (iVar86 + 8 < param_4) {
                        iVar105 = iVar105 + pcVar98[lVar81 * 8];
                        iVar80 = iVar80 + pcVar98[lVar81 * 8 + 1];
                        iVar107 = iVar107 + pcVar98[lVar81 * 8 + 2];
                        if (iVar86 + 9 < param_4) {
                          iVar105 = iVar105 + pcVar98[lVar81 * 9];
                          iVar80 = iVar80 + pcVar98[lVar81 * 9 + 1];
                          iVar107 = iVar107 + pcVar98[lVar81 * 9 + 2];
                          if (iVar86 + 10 < param_4) {
                            iVar105 = iVar105 + pcVar98[lVar81 * 10];
                            iVar80 = iVar80 + pcVar98[lVar81 * 10 + 1];
                            iVar107 = iVar107 + pcVar98[lVar81 * 10 + 2];
                            if (iVar86 + 0xb < param_4) {
                              iVar105 = iVar105 + pcVar98[lVar81 * 0xb];
                              iVar80 = iVar80 + pcVar98[lVar81 * 0xb + 1];
                              iVar107 = iVar107 + pcVar98[lVar81 * 0xb + 2];
                              if (iVar86 + 0xc < param_4) {
                                iVar105 = iVar105 + pcVar98[lVar81 * 0xc];
                                iVar80 = iVar80 + pcVar98[lVar81 * 0xc + 1];
                                iVar107 = iVar107 + pcVar98[lVar81 * 0xc + 2];
                                if (iVar86 + 0xd < param_4) {
                                  iVar105 = iVar105 + pcVar98[lVar81 * 0xd];
                                  iVar80 = iVar80 + pcVar98[lVar81 * 0xd + 1];
                                  iVar107 = iVar107 + pcVar98[lVar81 * 0xd + 2];
                                  if (iVar86 + 0xe < param_4) {
                                    iVar105 = iVar105 + pcVar98[lVar81 * 0xe];
                                    iVar80 = iVar80 + pcVar98[lVar81 * 0xe + 1];
                                    iVar107 = iVar107 + pcVar98[lVar81 * 0xe + 2];
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_003a6aa8:
      *param_3 = iVar105;
      param_3[1] = iVar80;
      param_3[2] = iVar107;
      goto LAB_003a4e24;
    }
    iVar105 = *param_3;
    iVar80 = param_3[1];
    if (iVar86 < param_4) {
      uVar110 = param_4 - iVar86;
      lVar81 = (long)param_5;
      uVar61 = (uVar110 - 0x10 >> 4) + 1;
      uVar122 = uVar61 * 0x10;
      if (0xe < (uint)((param_4 + -1) - iVar86)) {
        iVar116 = 0;
        iVar126 = 0;
        iVar128 = 0;
        iVar131 = 0;
                    /* try { // try from 003a6124 to 004a6127 has its CatchHandler @ 003a61b4 */
                    /* try { // try from 003a6138 to 004a613b has its CatchHandler @ 003a4cd8 */
                    /* try { // try from 003a6148 to 004a614b has its CatchHandler @ 003a6150 */
                    /* catch() { ... } // from try @ 003a4d34 with catch @ 003a6150
                       catch() { ... } // from try @ 003a5364 with catch @ 003a6150
                       catch() { ... } // from try @ 003a5898 with catch @ 003a6150
                       catch() { ... } // from try @ 003a6148 with catch @ 003a6150 */
        pcVar71 = (char *)((long)param_1 + lVar85 + 1);
        uVar127 = 0;
                    /* try { // try from 003a6174 to 004a6177 has its CatchHandler @ 003a4cd8 */
                    /* catch() { ... } // from try @ 003a4e7c with catch @ 003a6178 */
        pcVar90 = pcVar98;
        iVar106 = iVar116;
        iVar107 = iVar126;
        iVar138 = iVar128;
        iVar115 = iVar131;
        do {
          cVar68 = *pcVar90;
          uVar127 = uVar127 + 1;
          pcVar79 = pcVar90 + lVar81;
          pcVar75 = pcVar90 + lVar81 * 2;
          pcVar1 = pcVar90 + lVar81 * 3;
                    /* catch() { ... } // from try @ 003a4de8 with catch @ 003a61a4 */
          pcVar2 = pcVar90 + lVar81 * 4;
          pcVar3 = pcVar90 + lVar81 * 5;
                    /* catch() { ... } // from try @ 003a4d98 with catch @ 003a61b4
                       catch() { ... } // from try @ 003a4df0 with catch @ 003a61b4
                       catch() { ... } // from try @ 003a4e84 with catch @ 003a61b4
                       catch() { ... } // from try @ 003a588c with catch @ 003a61b4
                       catch() { ... } // from try @ 003a6124 with catch @ 003a61b4 */
          pcVar4 = pcVar90 + lVar81 * 6;
                    /* catch() { ... } // from try @ 003a6200 with catch @ 003a61c0
                       catch() { ... } // from try @ 003a6e6c with catch @ 003a61c0
                       catch() { ... } // from try @ 003a70d4 with catch @ 003a61c0
                       catch() { ... } // from try @ 003a7178 with catch @ 003a61c0 */
          pcVar5 = pcVar90 + lVar81 * 7;
          pcVar6 = pcVar90 + lVar81 * 8;
          pcVar7 = pcVar90 + lVar81 * 9;
          pcVar8 = pcVar90 + lVar81 * 10;
          pcVar9 = pcVar90 + lVar81 * 0xb;
          pcVar10 = pcVar90 + lVar81 * 0xc;
          pcVar11 = pcVar90 + lVar81 * 0xd;
          pcVar12 = pcVar90 + lVar81 * 0xe;
                    /* try { // try from 003a6200 to 004a622b has its CatchHandler @ 003a61c0 */
          pcVar13 = pcVar90 + lVar81 * 0xf;
          pcVar90 = pcVar90 + lVar81 * 0x10;
          cVar64 = *pcVar71;
          pcVar14 = pcVar71 + lVar81;
          pcVar15 = pcVar71 + lVar81 * 2;
          pcVar16 = pcVar71 + lVar81 * 3;
          pcVar17 = pcVar71 + lVar81 * 4;
          pcVar18 = pcVar71 + lVar81 * 5;
          pcVar19 = pcVar71 + lVar81 * 6;
          pcVar20 = pcVar71 + lVar81 * 7;
          pcVar21 = pcVar71 + lVar81 * 8;
          iVar116 = (int)(short)*pcVar10 +
                    (int)(short)*pcVar6 + (int)(short)*pcVar2 + (short)cVar68 + iVar116;
          iVar126 = (int)(short)*pcVar11 +
                    (int)(short)*pcVar7 + (int)(short)*pcVar3 + (short)*pcVar79 + iVar126;
          iVar128 = (int)(short)*pcVar12 +
                    (int)(short)*pcVar8 + (int)(short)*pcVar4 + (short)*pcVar75 + iVar128;
          iVar131 = (int)(short)*pcVar13 +
                    (int)(short)*pcVar9 + (int)(short)*pcVar5 + (short)*pcVar1 + iVar131;
          pcVar79 = pcVar71 + lVar81 * 9;
          pcVar75 = pcVar71 + lVar81 * 10;
          pcVar1 = pcVar71 + lVar81 * 0xb;
          pcVar2 = pcVar71 + lVar81 * 0xc;
          pcVar3 = pcVar71 + lVar81 * 0xd;
          pcVar4 = pcVar71 + lVar81 * 0xe;
          pcVar5 = pcVar71 + lVar81 * 0xf;
          pcVar71 = pcVar71 + lVar81 * 0x10;
          iVar106 = (int)(short)*pcVar2 +
                    (int)(short)*pcVar21 + (int)(short)*pcVar17 + (short)cVar64 + iVar106;
          iVar107 = (int)(short)*pcVar3 +
                    (int)(short)*pcVar79 + (int)(short)*pcVar18 + (short)*pcVar14 + iVar107;
          iVar138 = (int)(short)*pcVar4 +
                    (int)(short)*pcVar75 + (int)(short)*pcVar19 + (short)*pcVar15 + iVar138;
          iVar115 = (int)(short)*pcVar5 +
                    (int)(short)*pcVar1 + (int)(short)*pcVar20 + (short)*pcVar16 + iVar115;
        } while (uVar127 < uVar61);
        pcVar98 = pcVar98 + (ulong)uVar122 * lVar81;
        iVar86 = iVar86 + uVar122;
        iVar80 = iVar80 + iVar106 + iVar107 + iVar138 + iVar115;
        iVar105 = iVar105 + iVar116 + iVar126 + iVar128 + iVar131;
        iVar106 = param_4;
        if (uVar110 == uVar122) goto LAB_003a64fc;
      }
                    /* try { // try from 003a6338 to 004a633b has its CatchHandler @ 003a71c8 */
      iVar105 = iVar105 + *pcVar98;
      iVar80 = iVar80 + pcVar98[1];
      iVar106 = param_4;
      if (iVar86 + 1 < param_4) {
        iVar105 = iVar105 + pcVar98[lVar81];
        iVar80 = iVar80 + pcVar98[lVar81 + 1];
        if (iVar86 + 2 < param_4) {
          iVar105 = iVar105 + pcVar98[lVar81 * 2];
                    /* try { // try from 003a637c to 004a637f has its CatchHandler @ 003a7114 */
          iVar80 = iVar80 + pcVar98[lVar81 * 2 + 1];
                    /* try { // try from 003a6384 to 004a63cf has its CatchHandler @ 003a71c8 */
          if (iVar86 + 3 < param_4) {
            iVar105 = iVar105 + pcVar98[lVar81 * 3];
            iVar80 = iVar80 + pcVar98[lVar81 * 3 + 1];
            if (iVar86 + 4 < param_4) {
              iVar105 = iVar105 + pcVar98[lVar81 * 4];
              iVar80 = iVar80 + pcVar98[lVar81 * 4 + 1];
              if (iVar86 + 5 < param_4) {
                iVar105 = iVar105 + pcVar98[lVar81 * 5];
                iVar80 = iVar80 + pcVar98[lVar81 * 5 + 1];
                if (iVar86 + 6 < param_4) {
                  iVar105 = iVar105 + pcVar98[lVar81 * 6];
                  iVar80 = iVar80 + pcVar98[lVar81 * 6 + 1];
                  if (iVar86 + 7 < param_4) {
                    iVar105 = iVar105 + pcVar98[lVar81 * 7];
                    iVar80 = iVar80 + pcVar98[lVar81 * 7 + 1];
                    if (iVar86 + 8 < param_4) {
                      iVar105 = iVar105 + pcVar98[lVar81 * 8];
                      iVar80 = iVar80 + pcVar98[lVar81 * 8 + 1];
                      if (iVar86 + 9 < param_4) {
                        iVar105 = iVar105 + pcVar98[lVar81 * 9];
                        iVar80 = iVar80 + pcVar98[lVar81 * 9 + 1];
                        if (iVar86 + 10 < param_4) {
                          iVar105 = iVar105 + pcVar98[lVar81 * 10];
                          iVar80 = iVar80 + pcVar98[lVar81 * 10 + 1];
                          if (iVar86 + 0xb < param_4) {
                            iVar105 = iVar105 + pcVar98[lVar81 * 0xb];
                            iVar80 = iVar80 + pcVar98[lVar81 * 0xb + 1];
                            if (iVar86 + 0xc < param_4) {
                              iVar105 = iVar105 + pcVar98[lVar81 * 0xc];
                              iVar80 = iVar80 + pcVar98[lVar81 * 0xc + 1];
                              if (iVar86 + 0xd < param_4) {
                                iVar105 = iVar105 + pcVar98[lVar81 * 0xd];
                                iVar80 = iVar80 + pcVar98[lVar81 * 0xd + 1];
                                if (iVar86 + 0xe < param_4) {
                                  iVar105 = iVar105 + pcVar98[lVar81 * 0xe];
                                  iVar80 = iVar80 + pcVar98[lVar81 * 0xe + 1];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003a64fc:
    *param_3 = iVar105;
    param_3[1] = iVar80;
    goto LAB_003a4e24;
  }
  iVar106 = param_4 + -3;
  iVar80 = *param_3;
  if (iVar86 < iVar106) {
    uVar122 = (param_4 + -4) - iVar86;
    lVar81 = (long)param_5;
    lVar82 = (long)(param_5 << 2);
    uVar110 = uVar122 >> 2;
    uVar61 = (uVar110 - 0xf >> 4) + 1;
    pcVar71 = pcVar98;
    iVar105 = iVar86;
    if (uVar122 < 0x3c) {
LAB_003a5a98:
      iVar80 = iVar80 + (int)*pcVar71 + (int)pcVar71[lVar81] + (int)pcVar71[lVar81 * 2] +
                        (int)pcVar71[lVar81 * 3];
      if ((((iVar105 + 4 < iVar106) &&
           (iVar80 = iVar80 + (int)pcVar71[lVar81 * 4] + (int)pcVar71[lVar81 * 5] +
                              (int)pcVar71[lVar81 * 6] + (int)pcVar71[lVar81 * 7],
           iVar105 + 8 < iVar106)) &&
          ((iVar80 = iVar80 + (int)pcVar71[lVar81 * 8] + (int)pcVar71[lVar81 * 9] +
                              (int)pcVar71[lVar81 * 10] + (int)pcVar71[lVar81 * 0xb],
           iVar105 + 0xc < iVar106 &&
           ((iVar80 = iVar80 + (int)pcVar71[lVar81 * 0xc] + (int)pcVar71[lVar81 * 0xd] +
                               (int)pcVar71[lVar81 * 0xe] + (int)pcVar71[lVar81 * 0xf],
            iVar105 + 0x10 < iVar106 &&
            (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x10] + (int)pcVar71[lVar81 * 0x11] +
                               (int)pcVar71[lVar81 * 0x12] + (int)pcVar71[lVar81 * 0x13],
            iVar105 + 0x14 < iVar106)))))) &&
         ((iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x14] + (int)pcVar71[lVar81 * 0x15] +
                             (int)pcVar71[lVar81 * 0x16] + (int)pcVar71[lVar81 * 0x17],
          iVar105 + 0x18 < iVar106 &&
          ((((((iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x18] + (int)pcVar71[lVar81 * 0x19] +
                                  (int)pcVar71[lVar81 * 0x1a] + (int)pcVar71[lVar81 * 0x1b],
               iVar105 + 0x1c < iVar106 &&
               (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x1c] + (int)pcVar71[lVar81 * 0x1d] +
                                  (int)pcVar71[lVar81 * 0x1e] + (int)pcVar71[lVar81 * 0x1f],
               iVar105 + 0x20 < iVar106)) &&
              (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x20] + (int)pcVar71[lVar81 * 0x21] +
                                 (int)pcVar71[lVar81 * 0x22] + (int)pcVar71[lVar81 * 0x23],
              iVar105 + 0x24 < iVar106)) &&
             ((iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x24] + (int)pcVar71[lVar81 * 0x25] +
                                 (int)pcVar71[lVar81 * 0x26] + (int)pcVar71[lVar81 * 0x27],
              iVar105 + 0x28 < iVar106 &&
              (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x28] + (int)pcVar71[lVar81 * 0x29] +
                                 (int)pcVar71[lVar81 * 0x2a] + (int)pcVar71[lVar81 * 0x2b],
              iVar105 + 0x2c < iVar106)))) &&
            (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x2c] + (int)pcVar71[lVar81 * 0x2d] +
                               (int)pcVar71[lVar81 * 0x2e] + (int)pcVar71[lVar81 * 0x2f],
            iVar105 + 0x30 < iVar106)) &&
           ((iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x30] + (int)pcVar71[lVar81 * 0x31] +
                               (int)pcVar71[lVar81 * 0x32] + (int)pcVar71[lVar81 * 0x33],
            iVar105 + 0x34 < iVar106 &&
            (iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x34] + (int)pcVar71[lVar81 * 0x35] +
                               (int)pcVar71[lVar81 * 0x36] + (int)pcVar71[lVar81 * 0x37],
            iVar105 + 0x38 < iVar106)))))))) {
        iVar80 = iVar80 + (int)pcVar71[lVar81 * 0x38] + (int)pcVar71[lVar81 * 0x39] +
                          (int)pcVar71[lVar81 * 0x3a] + (int)pcVar71[lVar81 * 0x3b];
      }
    }
    else {
      lVar92 = lVar82 * 2;
      lVar83 = lVar81 + lVar85 + lVar81;
      pcVar71 = (char *)((long)param_1 + lVar85 + lVar81);
      lVar99 = lVar82 * 4;
      lVar101 = lVar82 * 3;
      lVar103 = NEON_shl(lVar82,4);
      lVar137 = lVar82 * 5;
      pcVar90 = (char *)((long)param_1 + lVar83);
      pcVar79 = (char *)((long)param_1 + lVar81 + lVar83);
      iVar105 = 0;
      iVar107 = 0;
      iVar138 = 0;
      iVar115 = 0;
      lVar94 = lVar82 * 8;
      lVar97 = lVar82 * 0xc;
      lVar96 = lVar82 * 10;
      lVar88 = lVar82 * 6;
      uVar122 = 0;
      lVar85 = lVar82 * 7;
      lVar83 = lVar82 * 9;
      lVar78 = lVar103 + lVar82 * -2;
      lVar77 = lVar82 * 0xd;
      lVar95 = lVar103 - lVar82;
      lVar89 = lVar82 * 0xb;
      pcVar75 = pcVar98;
      do {
        uVar122 = uVar122 + 1;
        cVar68 = *pcVar75;
        pcVar1 = pcVar75 + lVar82;
        pcVar2 = pcVar75 + lVar92;
        pcVar3 = pcVar75 + lVar101;
        pcVar4 = pcVar75 + lVar99;
        pcVar5 = pcVar75 + lVar137;
        pcVar6 = pcVar75 + lVar88;
        pcVar7 = pcVar75 + lVar85;
        pcVar8 = pcVar75 + lVar94;
        pcVar9 = pcVar75 + lVar83;
        pcVar10 = pcVar75 + lVar96;
        pcVar11 = pcVar75 + lVar89;
        pcVar12 = pcVar75 + lVar97;
        pcVar13 = pcVar75 + lVar77;
        pcVar14 = pcVar75 + lVar78;
        pcVar15 = pcVar75 + lVar95;
        pcVar75 = pcVar75 + lVar103;
        cVar64 = *pcVar71;
        pcVar16 = pcVar71 + lVar82;
        pcVar17 = pcVar71 + lVar92;
        pcVar18 = pcVar71 + lVar101;
        pcVar19 = pcVar71 + lVar99;
        pcVar20 = pcVar71 + lVar137;
        pcVar21 = pcVar71 + lVar88;
        pcVar22 = pcVar71 + lVar85;
        pcVar23 = pcVar71 + lVar94;
        pcVar24 = pcVar71 + lVar83;
        pcVar25 = pcVar71 + lVar96;
                    /* try { // try from 003a588c to 004a588f has its CatchHandler @ 003a61b4 */
        pcVar26 = pcVar71 + lVar89;
        pcVar27 = pcVar71 + lVar97;
                    /* try { // try from 003a5898 to 004a589b has its CatchHandler @ 003a6150 */
        pcVar28 = pcVar71 + lVar77;
        pcVar29 = pcVar71 + lVar78;
        pcVar30 = pcVar71 + lVar95;
        pcVar71 = pcVar71 + lVar103;
        cVar65 = *pcVar90;
        pcVar31 = pcVar90 + lVar82;
        pcVar32 = pcVar90 + lVar92;
        pcVar33 = pcVar90 + lVar101;
        pcVar34 = pcVar90 + lVar99;
        pcVar35 = pcVar90 + lVar137;
        pcVar36 = pcVar90 + lVar88;
        pcVar37 = pcVar90 + lVar85;
        pcVar38 = pcVar90 + lVar94;
        pcVar39 = pcVar90 + lVar83;
        pcVar40 = pcVar90 + lVar96;
        pcVar41 = pcVar90 + lVar89;
        pcVar42 = pcVar90 + lVar97;
        pcVar43 = pcVar90 + lVar77;
        pcVar44 = pcVar90 + lVar78;
        pcVar45 = pcVar90 + lVar95;
        pcVar90 = pcVar90 + lVar103;
        cVar66 = *pcVar79;
        pcVar46 = pcVar79 + lVar82;
        pcVar47 = pcVar79 + lVar92;
        pcVar48 = pcVar79 + lVar101;
        pcVar49 = pcVar79 + lVar99;
        pcVar50 = pcVar79 + lVar137;
        pcVar51 = pcVar79 + lVar88;
        pcVar52 = pcVar79 + lVar85;
        pcVar53 = pcVar79 + lVar94;
        pcVar54 = pcVar79 + lVar83;
        pcVar55 = pcVar79 + lVar96;
        pcVar56 = pcVar79 + lVar89;
        pcVar57 = pcVar79 + lVar97;
        pcVar58 = pcVar79 + lVar77;
        pcVar59 = pcVar79 + lVar78;
        pcVar60 = pcVar79 + lVar95;
        pcVar79 = pcVar79 + lVar103;
        iVar105 = (int)(short)*pcVar27 + (int)(short)*pcVar12 + (int)(short)*pcVar42 +
                  (int)(short)*pcVar57 +
                  (int)(short)*pcVar23 + (int)(short)*pcVar8 + (int)(short)*pcVar38 +
                  (int)(short)*pcVar53 +
                  (int)(short)*pcVar19 + (int)(short)*pcVar4 + (int)(short)*pcVar34 +
                  (int)(short)*pcVar49 +
                  (int)(short)cVar64 + (int)(short)cVar68 + (int)(short)cVar65 + (int)(short)cVar66
                  + iVar105;
        iVar107 = (int)(short)*pcVar28 + (int)(short)*pcVar13 + (int)(short)*pcVar43 +
                  (int)(short)*pcVar58 +
                  (int)(short)*pcVar24 + (int)(short)*pcVar9 + (int)(short)*pcVar39 +
                  (int)(short)*pcVar54 +
                  (int)(short)*pcVar20 + (int)(short)*pcVar5 + (int)(short)*pcVar35 +
                  (int)(short)*pcVar50 +
                  (int)(short)*pcVar16 + (int)(short)*pcVar1 + (int)(short)*pcVar31 +
                  (int)(short)*pcVar46 + iVar107;
        iVar138 = (int)(short)*pcVar29 + (int)(short)*pcVar14 + (int)(short)*pcVar44 +
                  (int)(short)*pcVar59 +
                  (int)(short)*pcVar25 + (int)(short)*pcVar10 + (int)(short)*pcVar40 +
                  (int)(short)*pcVar55 +
                  (int)(short)*pcVar21 + (int)(short)*pcVar6 + (int)(short)*pcVar36 +
                  (int)(short)*pcVar51 +
                  (int)(short)*pcVar17 + (int)(short)*pcVar2 + (int)(short)*pcVar32 +
                  (int)(short)*pcVar47 + iVar138;
        iVar115 = (int)(short)*pcVar30 + (int)(short)*pcVar15 + (int)(short)*pcVar45 +
                  (int)(short)*pcVar60 +
                  (int)(short)*pcVar26 + (int)(short)*pcVar11 + (int)(short)*pcVar41 +
                  (int)(short)*pcVar56 +
                  (int)(short)*pcVar22 + (int)(short)*pcVar7 + (int)(short)*pcVar37 +
                  (int)(short)*pcVar52 +
                  (int)(short)*pcVar18 + (int)(short)*pcVar3 + (int)(short)*pcVar33 +
                  (int)(short)*pcVar48 + iVar115;
      } while (uVar122 < uVar61);
      iVar80 = iVar80 + iVar105 + iVar107 + iVar138 + iVar115;
      pcVar71 = pcVar98 + (ulong)(uVar61 * 0x10) * lVar82;
      iVar105 = iVar86 + uVar61 * 0x40;
      if (uVar110 + 1 != uVar61 * 0x10) goto LAB_003a5a98;
    }
    iVar86 = iVar86 + 4 + uVar110 * 4;
    pcVar98 = pcVar98 + lVar82 + (ulong)uVar110 * lVar82;
  }
  iVar106 = iVar86;
  if (iVar86 < param_4) {
    uVar110 = param_4 - iVar86;
    uVar61 = (uVar110 - 0x10 >> 4) + 1;
    lVar85 = (long)param_5;
    uVar122 = uVar61 * 0x10;
    if (0xe < (uint)((param_4 + -1) - iVar86)) {
      iVar106 = 0;
      iVar105 = 0;
      iVar107 = 0;
      iVar138 = 0;
      uVar127 = 0;
      pcVar71 = pcVar98 + lVar85 * 10;
      pcVar90 = pcVar98;
      do {
        cVar68 = *pcVar90;
        uVar127 = uVar127 + 1;
        pcVar79 = pcVar90 + lVar85;
        pcVar75 = pcVar90 + lVar85 * 2;
        pcVar1 = pcVar90 + lVar85 * 3;
        pcVar2 = pcVar90 + lVar85 * 4;
        pcVar3 = pcVar90 + lVar85 * 5;
        pcVar4 = pcVar90 + lVar85 * 6;
        pcVar5 = pcVar71 + lVar85 * -3;
        pcVar6 = pcVar90 + lVar85 * 8;
        pcVar7 = pcVar90 + lVar85 * 9;
        pcVar90 = pcVar90 + lVar85 * 0x10;
        cVar64 = *pcVar71;
        pcVar8 = pcVar71 + lVar85;
        pcVar9 = pcVar71 + lVar85 * 2;
        pcVar10 = pcVar71 + lVar85 * 3;
        pcVar11 = pcVar71 + lVar85 * 4;
        pcVar12 = pcVar71 + lVar85 * 5;
        pcVar71 = pcVar71 + lVar85 * 0x10;
        iVar106 = (int)(short)*pcVar9 +
                  (int)(short)*pcVar6 + (int)(short)*pcVar2 + (short)cVar68 + iVar106;
        iVar105 = (int)(short)*pcVar10 +
                  (int)(short)*pcVar7 + (int)(short)*pcVar3 + (short)*pcVar79 + iVar105;
        iVar107 = (int)(short)*pcVar11 +
                  (int)(short)cVar64 + (int)(short)*pcVar4 + (short)*pcVar75 + iVar107;
        iVar138 = (int)(short)*pcVar12 +
                  (int)(short)*pcVar8 + (int)(short)*pcVar5 + (short)*pcVar1 + iVar138;
      } while (uVar127 < uVar61);
      iVar86 = iVar86 + uVar122;
      pcVar98 = pcVar98 + (ulong)uVar122 * lVar85;
      iVar80 = iVar80 + iVar106 + iVar105 + iVar107 + iVar138;
      iVar106 = param_4;
      if (uVar110 == uVar122) goto LAB_003a60c8;
    }
    iVar80 = iVar80 + *pcVar98;
    iVar106 = param_4;
    if (((((iVar86 + 1 < param_4) && (iVar80 = iVar80 + pcVar98[lVar85], iVar86 + 2 < param_4)) &&
         (iVar80 = iVar80 + pcVar98[lVar85 * 2], iVar86 + 3 < param_4)) &&
        (((iVar80 = iVar80 + pcVar98[lVar85 * 3], iVar86 + 4 < param_4 &&
          (iVar80 = iVar80 + pcVar98[lVar85 * 4], iVar86 + 5 < param_4)) &&
         ((iVar80 = iVar80 + pcVar98[lVar85 * 5], iVar86 + 6 < param_4 &&
          ((iVar80 = iVar80 + pcVar98[lVar85 * 6], iVar86 + 7 < param_4 &&
           (iVar80 = iVar80 + pcVar98[lVar85 * 7], iVar86 + 8 < param_4)))))))) &&
       ((iVar80 = iVar80 + pcVar98[lVar85 * 8], iVar86 + 9 < param_4 &&
        (((iVar80 = iVar80 + pcVar98[lVar85 * 9], iVar86 + 10 < param_4 &&
          (iVar80 = iVar80 + pcVar98[lVar85 * 10], iVar86 + 0xb < param_4)) &&
         (iVar80 = iVar80 + pcVar98[lVar85 * 0xb], iVar86 + 0xc < param_4)))))) {
      iVar80 = iVar80 + pcVar98[lVar85 * 0xc];
      if ((iVar86 + 0xd < param_4) &&
         (iVar80 = iVar80 + pcVar98[lVar85 * 0xd], iVar86 + 0xe < param_4)) {
        iVar80 = iVar80 + pcVar98[lVar85 * 0xe];
      }
    }
  }
LAB_003a60c8:
  *param_3 = iVar80;
LAB_003a4e24:
  if (param_5 <= iVar87) {
                    /* catch() { ... } // from try @ 003a20e8 with catch @ 003a4c4c
                       catch() { ... } // from try @ 003a214c with catch @ 003a4c4c
                       catch() { ... } // from try @ 003a3f24 with catch @ 003a4c4c
                       catch() { ... } // from try @ 003a4724 with catch @ 003a4c4c
                       catch() { ... } // from try @ 003a4750 with catch @ 003a4c4c */
                    /* catch() { ... } // from try @ 003a233c with catch @ 003a4c54
                       catch() { ... } // from try @ 003a3f98 with catch @ 003a4c54
                       catch() { ... } // from try @ 003a4744 with catch @ 003a4c54 */
                    /* catch() { ... } // from try @ 003a2238 with catch @ 003a4c5c */
    return param_4;
  }
  lVar88 = (long)param_5;
  lVar94 = lVar88 * 2;
  lVar92 = lVar88 * 8;
  lVar81 = lVar88 * 3;
  lVar97 = lVar88 * 4;
  lVar82 = lVar88 * 5;
  lVar96 = lVar88 * 0xc;
  lVar132 = NEON_shl(lVar88,4);
  lVar78 = (long)iVar87;
  lVar95 = lVar88 * 10;
                    /* try { // try from 003a4e7c to 004a4e7f has its CatchHandler @ 003a6178 */
                    /* try { // try from 003a4e84 to 004a52f3 has its CatchHandler @ 003a61b4 */
  lVar85 = lVar88 * 7;
  lVar103 = lVar88 * 6;
  lVar83 = lVar88 * 9;
  lVar104 = lVar132 + lVar88 * -2;
  lVar99 = lVar132 - lVar88;
  lVar101 = lVar88 * 0xd;
  lVar137 = lVar88 * 0xb;
  piVar72 = param_3 + lVar78;
  lVar77 = lVar78;
  lVar89 = lVar78 + 4;
  do {
    iVar107 = *piVar72;
    iVar86 = piVar72[1];
    iVar105 = piVar72[2];
    iVar80 = piVar72[3];
    lVar91 = (long)(param_5 * iVar106);
    pcVar98 = (char *)((long)param_1 + lVar91 + lVar77);
    iVar138 = iVar106;
    if (iVar106 < param_4) {
      uVar122 = param_4 - iVar106;
      uVar61 = (uVar122 - 0x10 >> 4) + 1;
      uVar110 = uVar61 * 0x10;
      iVar138 = param_4;
      if (0xe < (uint)((param_4 + -1) - iVar106)) {
        iVar121 = 0;
        iVar123 = 0;
        iVar124 = 0;
        iVar125 = 0;
        uVar127 = 0;
        pcVar71 = (char *)((long)param_1 + lVar91 + lVar77 + 2);
        pcVar90 = (char *)((long)param_1 + lVar91 + lVar77 + 1);
        pcVar79 = (char *)((long)param_1 + lVar91 + lVar77 + 3);
        pcVar75 = pcVar98;
        iVar115 = iVar121;
        iVar116 = iVar123;
        iVar126 = iVar121;
        iVar128 = iVar123;
        iVar131 = iVar121;
        iVar133 = iVar123;
        iVar117 = iVar124;
        iVar118 = iVar125;
        iVar129 = iVar124;
        iVar130 = iVar125;
        iVar134 = iVar124;
        iVar136 = iVar125;
        do {
          uVar127 = uVar127 + 1;
          cVar68 = *pcVar75;
          pcVar1 = pcVar75 + lVar88;
          pcVar2 = pcVar75 + lVar94;
          pcVar3 = pcVar75 + lVar81;
          pcVar4 = pcVar75 + lVar97;
          pcVar5 = pcVar75 + lVar82;
          pcVar6 = pcVar75 + lVar103;
          pcVar7 = pcVar75 + lVar85;
          pcVar8 = pcVar75 + lVar92;
          pcVar9 = pcVar75 + lVar83;
          pcVar10 = pcVar75 + lVar95;
          pcVar11 = pcVar75 + lVar137;
          pcVar12 = pcVar75 + lVar96;
          pcVar13 = pcVar75 + lVar101;
          pcVar14 = pcVar75 + lVar104;
          pcVar15 = pcVar75 + lVar99;
          pcVar75 = pcVar75 + lVar132;
          cVar64 = *pcVar90;
          pcVar16 = pcVar90 + lVar88;
          pcVar17 = pcVar90 + lVar94;
          pcVar18 = pcVar90 + lVar81;
          pcVar19 = pcVar90 + lVar97;
          pcVar20 = pcVar90 + lVar82;
          pcVar21 = pcVar90 + lVar103;
          pcVar22 = pcVar90 + lVar85;
          iVar121 = (int)(short)*pcVar12 +
                    (int)(short)*pcVar8 + (int)(short)*pcVar4 + (short)cVar68 + iVar121;
          iVar123 = (int)(short)*pcVar13 +
                    (int)(short)*pcVar9 + (int)(short)*pcVar5 + (short)*pcVar1 + iVar123;
          iVar124 = (int)(short)*pcVar14 +
                    (int)(short)*pcVar10 + (int)(short)*pcVar6 + (short)*pcVar2 + iVar124;
          iVar125 = (int)(short)*pcVar15 +
                    (int)(short)*pcVar11 + (int)(short)*pcVar7 + (short)*pcVar3 + iVar125;
          pcVar1 = pcVar90 + lVar92;
          pcVar2 = pcVar90 + lVar83;
          pcVar3 = pcVar90 + lVar95;
          pcVar4 = pcVar90 + lVar137;
          pcVar5 = pcVar90 + lVar96;
          pcVar6 = pcVar90 + lVar101;
          pcVar7 = pcVar90 + lVar104;
          pcVar8 = pcVar90 + lVar99;
          pcVar90 = pcVar90 + lVar132;
          cVar68 = *pcVar71;
          pcVar9 = pcVar71 + lVar88;
          pcVar10 = pcVar71 + lVar94;
          pcVar11 = pcVar71 + lVar81;
          pcVar12 = pcVar71 + lVar97;
          pcVar13 = pcVar71 + lVar82;
          pcVar14 = pcVar71 + lVar103;
          pcVar15 = pcVar71 + lVar85;
          iVar126 = (int)(short)*pcVar5 +
                    (int)(short)*pcVar1 + (int)(short)*pcVar19 + (short)cVar64 + iVar126;
          iVar128 = (int)(short)*pcVar6 +
                    (int)(short)*pcVar2 + (int)(short)*pcVar20 + (short)*pcVar16 + iVar128;
          iVar129 = (int)(short)*pcVar7 +
                    (int)(short)*pcVar3 + (int)(short)*pcVar21 + (short)*pcVar17 + iVar129;
          iVar130 = (int)(short)*pcVar8 +
                    (int)(short)*pcVar4 + (int)(short)*pcVar22 + (short)*pcVar18 + iVar130;
          pcVar1 = pcVar71 + lVar92;
          pcVar2 = pcVar71 + lVar83;
          pcVar3 = pcVar71 + lVar95;
          pcVar4 = pcVar71 + lVar137;
          pcVar5 = pcVar71 + lVar96;
          pcVar6 = pcVar71 + lVar101;
          pcVar7 = pcVar71 + lVar104;
          pcVar8 = pcVar71 + lVar99;
          pcVar71 = pcVar71 + lVar132;
          cVar64 = *pcVar79;
          pcVar16 = pcVar79 + lVar88;
          pcVar17 = pcVar79 + lVar94;
          pcVar18 = pcVar79 + lVar81;
          pcVar19 = pcVar79 + lVar97;
          pcVar20 = pcVar79 + lVar82;
          pcVar21 = pcVar79 + lVar103;
          pcVar22 = pcVar79 + lVar85;
          iVar131 = (int)(short)*pcVar5 +
                    (int)(short)*pcVar1 + (int)(short)*pcVar12 + (short)cVar68 + iVar131;
          iVar133 = (int)(short)*pcVar6 +
                    (int)(short)*pcVar2 + (int)(short)*pcVar13 + (short)*pcVar9 + iVar133;
          iVar134 = (int)(short)*pcVar7 +
                    (int)(short)*pcVar3 + (int)(short)*pcVar14 + (short)*pcVar10 + iVar134;
          iVar136 = (int)(short)*pcVar8 +
                    (int)(short)*pcVar4 + (int)(short)*pcVar15 + (short)*pcVar11 + iVar136;
          pcVar1 = pcVar79 + lVar92;
          pcVar2 = pcVar79 + lVar83;
          pcVar3 = pcVar79 + lVar95;
          pcVar4 = pcVar79 + lVar137;
          pcVar5 = pcVar79 + lVar96;
          pcVar6 = pcVar79 + lVar101;
          pcVar7 = pcVar79 + lVar104;
          pcVar8 = pcVar79 + lVar99;
          pcVar79 = pcVar79 + lVar132;
          iVar115 = (int)(short)*pcVar5 +
                    (int)(short)*pcVar1 + (int)(short)*pcVar19 + (short)cVar64 + iVar115;
          iVar116 = (int)(short)*pcVar6 +
                    (int)(short)*pcVar2 + (int)(short)*pcVar20 + (short)*pcVar16 + iVar116;
          iVar117 = (int)(short)*pcVar7 +
                    (int)(short)*pcVar3 + (int)(short)*pcVar21 + (short)*pcVar17 + iVar117;
          iVar118 = (int)(short)*pcVar8 +
                    (int)(short)*pcVar4 + (int)(short)*pcVar22 + (short)*pcVar18 + iVar118;
        } while (uVar127 < uVar61);
        iVar106 = iVar106 + uVar110;
        pcVar98 = pcVar98 + (ulong)uVar110 * lVar88;
        iVar86 = iVar86 + iVar126 + iVar128 + iVar129 + iVar130;
        iVar80 = iVar80 + iVar115 + iVar116 + iVar117 + iVar118;
        iVar105 = iVar105 + iVar131 + iVar133 + iVar134 + iVar136;
        iVar107 = iVar107 + iVar121 + iVar123 + iVar124 + iVar125;
        if (uVar110 == uVar122) goto LAB_003a5650;
      }
      iVar86 = iVar86 + pcVar98[1];
      iVar107 = iVar107 + *pcVar98;
      iVar105 = iVar105 + pcVar98[2];
      iVar80 = iVar80 + pcVar98[3];
      if (iVar106 + 1 < param_4) {
        iVar105 = iVar105 + pcVar98[lVar88 + 2];
        iVar80 = iVar80 + pcVar98[lVar88 + 3];
        lVar77 = lVar88 * 2;
        iVar107 = iVar107 + pcVar98[lVar88];
        iVar86 = iVar86 + pcVar98[lVar88 + 1];
        if (iVar106 + 2 < param_4) {
                    /* try { // try from 003a5364 to 004a5367 has its CatchHandler @ 003a6150 */
          iVar105 = iVar105 + pcVar98[lVar77 + 2];
          iVar80 = iVar80 + pcVar98[lVar77 + 3];
          lVar91 = lVar88 * 3;
          iVar107 = iVar107 + pcVar98[lVar88 * 2];
          iVar86 = iVar86 + pcVar98[lVar77 + 1];
          if (iVar106 + 3 < param_4) {
                    /* try { // try from 003a5390 to 004a53e3 has its CatchHandler @ 003a4cd8 */
            iVar105 = iVar105 + pcVar98[lVar91 + 2];
            iVar80 = iVar80 + pcVar98[lVar91 + 3];
            lVar77 = lVar88 * 4;
            iVar107 = iVar107 + pcVar98[lVar88 * 3];
            iVar86 = iVar86 + pcVar98[lVar91 + 1];
            if (iVar106 + 4 < param_4) {
              iVar105 = iVar105 + pcVar98[lVar77 + 2];
              iVar80 = iVar80 + pcVar98[lVar77 + 3];
              lVar91 = lVar88 * 5;
              iVar107 = iVar107 + pcVar98[lVar88 * 4];
              iVar86 = iVar86 + pcVar98[lVar77 + 1];
              if (iVar106 + 5 < param_4) {
                iVar105 = iVar105 + pcVar98[lVar91 + 2];
                iVar80 = iVar80 + pcVar98[lVar91 + 3];
                lVar77 = lVar88 * 6;
                iVar107 = iVar107 + pcVar98[lVar88 * 5];
                iVar86 = iVar86 + pcVar98[lVar91 + 1];
                if (iVar106 + 6 < param_4) {
                  iVar105 = iVar105 + pcVar98[lVar77 + 2];
                  iVar80 = iVar80 + pcVar98[lVar77 + 3];
                  lVar91 = lVar88 * 7;
                  iVar107 = iVar107 + pcVar98[lVar88 * 6];
                  iVar86 = iVar86 + pcVar98[lVar77 + 1];
                  if (iVar106 + 7 < param_4) {
                    iVar105 = iVar105 + pcVar98[lVar91 + 2];
                    iVar80 = iVar80 + pcVar98[lVar91 + 3];
                    lVar77 = lVar88 * 8;
                    iVar107 = iVar107 + pcVar98[lVar88 * 7];
                    iVar86 = iVar86 + pcVar98[lVar91 + 1];
                    if (iVar106 + 8 < param_4) {
                      iVar105 = iVar105 + pcVar98[lVar77 + 2];
                      iVar80 = iVar80 + pcVar98[lVar77 + 3];
                      lVar91 = lVar88 * 9;
                      iVar107 = iVar107 + pcVar98[lVar88 * 8];
                      iVar86 = iVar86 + pcVar98[lVar77 + 1];
                      if (iVar106 + 9 < param_4) {
                        iVar105 = iVar105 + pcVar98[lVar91 + 2];
                        iVar80 = iVar80 + pcVar98[lVar91 + 3];
                        lVar77 = lVar88 * 10;
                        iVar107 = iVar107 + pcVar98[lVar88 * 9];
                        iVar86 = iVar86 + pcVar98[lVar91 + 1];
                        if (iVar106 + 10 < param_4) {
                          iVar105 = iVar105 + pcVar98[lVar77 + 2];
                          iVar80 = iVar80 + pcVar98[lVar77 + 3];
                          lVar91 = lVar88 * 0xb;
                          iVar107 = iVar107 + pcVar98[lVar88 * 10];
                          iVar86 = iVar86 + pcVar98[lVar77 + 1];
                          if (iVar106 + 0xb < param_4) {
                            iVar105 = iVar105 + pcVar98[lVar91 + 2];
                            iVar80 = iVar80 + pcVar98[lVar91 + 3];
                            lVar77 = lVar88 * 0xc;
                            iVar107 = iVar107 + pcVar98[lVar88 * 0xb];
                            iVar86 = iVar86 + pcVar98[lVar91 + 1];
                            if (iVar106 + 0xc < param_4) {
                              iVar107 = iVar107 + pcVar98[lVar88 * 0xc];
                              iVar86 = iVar86 + pcVar98[lVar77 + 1];
                              iVar105 = iVar105 + pcVar98[lVar77 + 2];
                              lVar91 = lVar88 * 0xd;
                              iVar80 = iVar80 + pcVar98[lVar77 + 3];
                              if (iVar106 + 0xd < param_4) {
                                iVar107 = iVar107 + pcVar98[lVar88 * 0xd];
                                iVar86 = iVar86 + pcVar98[lVar91 + 1];
                                iVar105 = iVar105 + pcVar98[lVar91 + 2];
                                lVar77 = lVar88 * 0xe;
                                iVar80 = iVar80 + pcVar98[lVar91 + 3];
                                if (iVar106 + 0xe < param_4) {
                                  iVar107 = iVar107 + pcVar98[lVar88 * 0xe];
                                  iVar86 = iVar86 + pcVar98[lVar77 + 1];
                                  iVar105 = iVar105 + pcVar98[lVar77 + 2];
                                  iVar80 = iVar80 + pcVar98[lVar77 + 3];
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003a5650:
    iVar106 = iVar138;
    *(ulong *)(piVar72 + 2) = CONCAT44(iVar80,iVar105);
    *(ulong *)piVar72 = CONCAT44(iVar86,iVar107);
    if (lVar89 == lVar78 + 4 + (ulong)((param_5 - 1U) - iVar87 >> 2) * 4) {
      return param_4;
    }
    piVar72 = piVar72 + 4;
    lVar77 = lVar89;
    lVar89 = lVar89 + 4;
  } while( true );
}


==================================================================

### FUNC 003a6ccc (6028 bytes) name=FUN_003a6ccc

int FUN_003a6ccc(ushort *param_1,long param_2,int *param_3,int param_4,ulong param_5)

{
  char *pcVar1;
  ushort *puVar2;
  ushort *puVar3;
  ushort *puVar4;
  ushort *puVar5;
  ushort *puVar6;
  ushort *puVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  ushort *puVar11;
  ushort *puVar12;
  ushort *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  ushort *puVar16;
  ushort *puVar17;
  ushort *puVar18;
  ushort *puVar19;
  ushort *puVar20;
  ushort *puVar21;
  ushort *puVar22;
  ushort *puVar23;
  ushort *puVar24;
  ushort *puVar25;
  ushort *puVar26;
  ushort *puVar27;
  ushort *puVar28;
  ushort *puVar29;
  uint uVar30;
  uint uVar31;
  ushort uVar32;
  uint uVar33;
  int *piVar34;
  ushort *puVar35;
  ushort *puVar36;
  ulong uVar37;
  int *piVar38;
  int iVar39;
  long lVar40;
  int *piVar41;
  ushort *puVar42;
  long lVar43;
  int iVar44;
  int iVar45;
  int iVar46;
  ulong uVar47;
  uint uVar48;
  long lVar49;
  ushort *puVar50;
  uint uVar51;
  ushort *puVar52;
  int *piVar53;
  uint uVar54;
  uint uVar55;
  int iVar56;
  int iVar57;
  int iVar58;
  int iVar59;
  int iVar60;
  int iVar61;
  undefined8 uVar62;
  int iVar63;
  int iVar64;
  int iVar65;
  undefined8 uVar66;
  int iVar68;
  undefined8 uVar67;
  int iVar69;
  undefined8 uVar70;
  int iVar71;
  int iVar72;
  int iVar73;
  int iVar74;
  int iVar75;
  int iVar76;
  ushort uVar77;
  ushort uVar78;
  long lVar79;
  undefined8 uVar80;
  int iVar81;
  int iVar82;
  int iVar83;
  ushort uVar84;
  long lVar85;
  long lVar86;
  long lVar87;
  long lVar88;
  long lVar89;
  long lVar90;
  long lVar91;
  int local_10 [4];
  
  iVar39 = (int)param_5;
  if (param_2 != 0) {
    if (iVar39 == 1) {
      iVar39 = *param_3;
      if (param_4 < 1) {
        iVar45 = 0;
      }
      else {
        lVar43 = 0;
        iVar45 = 0;
        do {
          if (*(char *)(param_2 + lVar43) != '\0') {
            iVar45 = iVar45 + 1;
            iVar39 = iVar39 + (uint)param_1[lVar43];
          }
          lVar43 = lVar43 + 1;
        } while ((int)lVar43 < param_4);
      }
      *param_3 = iVar39;
      return iVar45;
    }
    if (iVar39 == 3) {
      iVar39 = *param_3;
      iVar45 = param_3[1];
      iVar44 = param_3[2];
      if (param_4 < 1) {
        iVar46 = 0;
      }
      else {
        lVar43 = 0;
        iVar46 = 0;
        do {
          pcVar1 = (char *)(param_2 + lVar43);
          lVar43 = lVar43 + 1;
                    /* catch() { ... } // from try @ 003a7310 with catch @ 003a72d4
                       catch() { ... } // from try @ 003a7670 with catch @ 003a72d4
                       catch() { ... } // from try @ 003a7780 with catch @ 003a72d4 */
          if (*pcVar1 != '\0') {
            iVar46 = iVar46 + 1;
            iVar39 = iVar39 + (uint)*param_1;
            iVar45 = iVar45 + (uint)param_1[1];
            iVar44 = iVar44 + (uint)param_1[2];
          }
          param_1 = param_1 + 3;
        } while ((int)lVar43 < param_4);
      }
      *param_3 = iVar39;
      param_3[1] = iVar45;
      param_3[2] = iVar44;
      return iVar46;
                    /* try { // try from 003a7310 to 004a7313 has its CatchHandler @ 003a72d4 */
    }
    if (param_4 < 1) {
      return 0;
    }
    uVar33 = iVar39 - 4;
    lVar43 = 0;
    iVar44 = 0;
    iVar45 = (uVar33 >> 2) + 1;
    iVar57 = iVar45 * 4;
    uVar30 = ((uVar33 >> 2) - 1 >> 1) + 1;
    iVar46 = uVar30 * 8;
    if (uVar33 < 4) {
      iVar46 = 0;
    }
    lVar49 = (long)iVar46;
    if (iVar39 + -3 < 1) {
      iVar57 = 0;
    }
    iVar46 = iVar57 + 1;
    iVar73 = iVar57 + 2;
    lVar40 = (long)iVar57;
                    /* try { // try from 003a6db0 to 004a6db3 has its CatchHandler @ 003a71c8 */
    lVar90 = NEON_shl(lVar40,1);
    iVar59 = iVar57 + 3;
    iVar60 = iVar57 + 4;
    lVar89 = NEON_shl((long)iVar46,1);
    piVar38 = param_3 + lVar40;
    lVar88 = NEON_shl((long)iVar73,1);
    iVar56 = iVar57 + 5;
    uVar55 = -((uint)((ulong)piVar38 >> 2) & 3) & 3;
    lVar87 = NEON_shl((long)iVar59,1);
    iVar58 = iVar57 + 6;
    iVar72 = iVar57 + 7;
                    /* try { // try from 003a6e3c to 004a6e3f has its CatchHandler @ 003a71d0 */
    lVar86 = NEON_shl((long)iVar60,1);
    uVar54 = iVar39 - iVar57;
                    /* try { // try from 003a6e6c to 004a6ecb has its CatchHandler @ 003a61c0 */
    if (uVar54 < uVar55) {
      uVar55 = uVar54;
    }
    lVar85 = NEON_shl((long)iVar56,1);
    lVar79 = NEON_shl((long)iVar58,1);
    lVar91 = NEON_shl((long)iVar72,1);
    do {
      if (*(char *)(param_2 + lVar43) != '\0') {
        if (0 < iVar39 + -3) {
          if (3 < uVar33) {
            piVar41 = param_3 + 4;
            uVar48 = 0;
            puVar50 = param_1;
            piVar53 = param_3;
            do {
              uVar62 = *(undefined8 *)(puVar50 + 4);
              uVar67 = *(undefined8 *)puVar50;
              uVar48 = uVar48 + 1;
              uVar70 = *(undefined8 *)(piVar41 + 2);
              uVar66 = *(undefined8 *)piVar41;
              *(ulong *)(piVar53 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar53 + 2) >> 0x20) +
                            (uint)(ushort)((ulong)uVar67 >> 0x30),
                            (int)*(undefined8 *)(piVar53 + 2) +
                            (uint)(ushort)((ulong)uVar67 >> 0x20));
              *(ulong *)piVar53 =
                   CONCAT44((int)((ulong)*(undefined8 *)piVar53 >> 0x20) +
                            (uint)(ushort)((ulong)uVar67 >> 0x10),
                            (int)*(undefined8 *)piVar53 + ((uint)uVar67 & 0xffff));
              piVar53 = piVar53 + 8;
              *(ulong *)(piVar41 + 2) =
                   CONCAT44((int)((ulong)uVar70 >> 0x20) + (uint)(ushort)((ulong)uVar62 >> 0x30),
                            (int)uVar70 + (uint)(ushort)((ulong)uVar62 >> 0x20));
              *(ulong *)piVar41 =
                   CONCAT44((int)((ulong)uVar66 >> 0x20) + (uint)(ushort)((ulong)uVar62 >> 0x10),
                            (int)uVar66 + ((uint)uVar62 & 0xffff));
              piVar41 = piVar41 + 8;
              puVar50 = puVar50 + 8;
            } while (uVar48 < uVar30);
            if (iVar45 == uVar30 * 2) goto LAB_003a6f94;
          }
          uVar32 = param_1[lVar49 + 1];
          param_3[lVar49] = param_3[lVar49] + (uint)param_1[lVar49];
          param_3[lVar49 + 1] = (uint)uVar32 + param_3[lVar49 + 1];
          uVar32 = param_1[lVar49 + 3];
          param_3[lVar49 + 2] = param_3[lVar49 + 2] + (uint)param_1[lVar49 + 2];
          param_3[lVar49 + 3] = (uint)uVar32 + param_3[lVar49 + 3];
        }
LAB_003a6f94:
        if (iVar57 < iVar39) {
          uVar48 = uVar55;
          if (uVar54 < 9) {
            uVar48 = uVar54;
          }
          iVar74 = iVar57;
          if (uVar48 != 0) {
            *piVar38 = *piVar38 + (uint)*(ushort *)((long)param_1 + lVar90);
            iVar74 = iVar46;
                    /* try { // try from 003a6fcc to 004a6fcf has its CatchHandler @ 003a71d0 */
            if (((((uVar48 != 1) &&
                  (param_3[iVar46] = param_3[iVar46] + (uint)*(ushort *)((long)param_1 + lVar89),
                  iVar74 = iVar73, uVar48 != 2)) &&
                 (param_3[iVar73] = param_3[iVar73] + (uint)*(ushort *)((long)param_1 + lVar88),
                 iVar74 = iVar59, uVar48 != 3)) &&
                ((param_3[iVar59] = param_3[iVar59] + (uint)*(ushort *)((long)param_1 + lVar87),
                 iVar74 = iVar60, uVar48 != 4 &&
                 (param_3[iVar60] = param_3[iVar60] + (uint)*(ushort *)((long)param_1 + lVar86),
                 iVar74 = iVar56, uVar48 != 5)))) &&
               ((param_3[iVar56] = param_3[iVar56] + (uint)*(ushort *)((long)param_1 + lVar85),
                iVar74 = iVar58, uVar48 != 6 &&
                (param_3[iVar58] = param_3[iVar58] + (uint)*(ushort *)((long)param_1 + lVar79),
                iVar74 = iVar72, uVar48 == 8)))) {
              param_3[iVar72] = param_3[iVar72] + (uint)*(ushort *)((long)param_1 + lVar91);
              iVar74 = iVar57 + 8;
            }
            if (uVar54 == uVar48) goto LAB_003a7224;
          }
          uVar31 = ((uVar54 - uVar48) - 8 >> 3) + 1;
          iVar64 = uVar31 * 8;
          if (6 < (uVar54 - 1) - uVar48) {
                    /* try { // try from 003a70c0 to 004a70c3 has its CatchHandler @ 003a71c8 */
            uVar51 = 0;
            piVar41 = param_3 + lVar40 + (ulong)uVar48;
                    /* try { // try from 003a70d4 to 004a70d7 has its CatchHandler @ 003a61c0 */
            puVar50 = param_1 + lVar40 + (ulong)uVar48;
            piVar53 = piVar41;
            do {
              uVar62 = *(undefined8 *)(puVar50 + 4);
              uVar67 = *(undefined8 *)puVar50;
              piVar34 = piVar41 + 2;
              uVar66 = *(undefined8 *)piVar41;
              uVar80 = *(undefined8 *)(piVar41 + 6);
              uVar70 = *(undefined8 *)(piVar41 + 4);
              uVar51 = uVar51 + 1;
              piVar41 = piVar41 + 8;
                    /* try { // try from 003a7100 to 004a7103 has its CatchHandler @ 003a71d0 */
                    /* try { // try from 003a710c to 004a710f has its CatchHandler @ 003a71c8 */
                    /* catch() { ... } // from try @ 003a637c with catch @ 003a7114 */
              *(ulong *)(piVar53 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)piVar34 >> 0x20) +
                            (uint)(ushort)((ulong)uVar67 >> 0x30),
                            (int)*(undefined8 *)piVar34 + (uint)(ushort)((ulong)uVar67 >> 0x20));
              *(ulong *)piVar53 =
                   CONCAT44((int)((ulong)uVar66 >> 0x20) + (uint)(ushort)((ulong)uVar67 >> 0x10),
                            (int)uVar66 + ((uint)uVar67 & 0xffff));
              *(ulong *)(piVar53 + 6) =
                   CONCAT44((uint)(ushort)((ulong)uVar62 >> 0x30) + (int)((ulong)uVar80 >> 0x20),
                            (uint)(ushort)((ulong)uVar62 >> 0x20) + (int)uVar80);
              *(ulong *)(piVar53 + 4) =
                   CONCAT44((uint)(ushort)((ulong)uVar62 >> 0x10) + (int)((ulong)uVar70 >> 0x20),
                            ((uint)uVar62 & 0xffff) + (int)uVar70);
              puVar50 = puVar50 + 8;
              piVar53 = piVar53 + 8;
            } while (uVar51 < uVar31);
            iVar74 = iVar74 + iVar64;
            if (uVar54 - uVar48 == iVar64) goto LAB_003a7224;
          }
          iVar64 = iVar74 + 1;
          param_3[iVar74] = param_3[iVar74] + (uint)param_1[iVar74];
          if (iVar64 < iVar39) {
            iVar81 = iVar74 + 2;
            param_3[iVar64] = param_3[iVar64] + (uint)param_1[iVar64];
                    /* try { // try from 003a7178 to 004a717b has its CatchHandler @ 003a61c0 */
            if (iVar81 < iVar39) {
              iVar64 = iVar74 + 3;
                    /* catch() { ... } // from try @ 003a6cb8 with catch @ 003a7194 */
              param_3[iVar81] = param_3[iVar81] + (uint)param_1[iVar81];
              if (iVar64 < iVar39) {
                iVar81 = iVar74 + 4;
                param_3[iVar64] = param_3[iVar64] + (uint)param_1[iVar64];
                if (iVar81 < iVar39) {
                    /* catch() { ... } // from try @ 003a6338 with catch @ 003a71c8
                       catch() { ... } // from try @ 003a6384 with catch @ 003a71c8
                       catch() { ... } // from try @ 003a6db0 with catch @ 003a71c8
                       catch() { ... } // from try @ 003a70c0 with catch @ 003a71c8
                       catch() { ... } // from try @ 003a710c with catch @ 003a71c8 */
                  iVar64 = iVar74 + 5;
                    /* catch() { ... } // from try @ 003a6e3c with catch @ 003a71d0
                       catch() { ... } // from try @ 003a6fcc with catch @ 003a71d0
                       catch() { ... } // from try @ 003a7100 with catch @ 003a71d0 */
                  param_3[iVar81] = param_3[iVar81] + (uint)param_1[iVar81];
                  if (iVar64 < iVar39) {
                    iVar74 = iVar74 + 6;
                    param_3[iVar64] = param_3[iVar64] + (uint)param_1[iVar64];
                    if (iVar74 < iVar39) {
                    /* catch() { ... } // from try @ 003a672c with catch @ 003a7210
                       catch() { ... } // from try @ 003a6cc0 with catch @ 003a7210 */
                      param_3[iVar74] = param_3[iVar74] + (uint)param_1[iVar74];
                    }
                  }
                }
              }
            }
          }
        }
LAB_003a7224:
        iVar44 = iVar44 + 1;
      }
      lVar43 = lVar43 + 1;
      param_1 = (ushort *)
                ((long)param_1 +
                (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1));
      if (param_4 <= (int)lVar43) {
        return iVar44;
      }
    } while( true );
  }
  if (iVar39 - 1U < 2) {
LAB_003a825c:
    if (param_4 < 8) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      iVar44 = 0;
    }
    else {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      uVar30 = param_4 - 8U >> 3;
      puVar50 = param_1;
      do {
        puVar35 = puVar50 + 8;
        uVar62 = *(undefined8 *)(puVar50 + 4);
        uVar67 = *(undefined8 *)puVar50;
        local_10[0] = local_10[0] + ((uint)uVar67 & 0xffff) + ((uint)uVar62 & 0xffff);
        local_10[1] = local_10[1] + (uint)(ushort)((ulong)uVar67 >> 0x10) +
                      (uint)(ushort)((ulong)uVar62 >> 0x10);
        local_10[2] = local_10[2] + (uint)(ushort)((ulong)uVar67 >> 0x20) +
                      (uint)(ushort)((ulong)uVar62 >> 0x20);
        local_10[3] = local_10[3] + (uint)(ushort)((ulong)uVar67 >> 0x30) +
                      (uint)(ushort)((ulong)uVar62 >> 0x30);
        puVar50 = puVar35;
      } while (puVar35 != param_1 + ((ulong)uVar30 + 1) * 8);
      iVar44 = (uVar30 + 1) * 8;
    }
    if (iVar44 < param_4 + -3) {
      uVar30 = (uint)((param_4 + -4) - iVar44) >> 2;
      puVar50 = param_1 + iVar44;
      do {
        puVar35 = puVar50 + 4;
        uVar67 = *(undefined8 *)puVar50;
        local_10[0] = local_10[0] + ((uint)uVar67 & 0xffff);
        local_10[1] = local_10[1] + (uint)(ushort)((ulong)uVar67 >> 0x10);
        local_10[2] = local_10[2] + (uint)(ushort)((ulong)uVar67 >> 0x20);
        local_10[3] = local_10[3] + (uint)(ushort)((ulong)uVar67 >> 0x30);
        puVar50 = puVar35;
      } while (puVar35 != param_1 + (long)iVar44 + 4 + (ulong)uVar30 * 4);
      iVar44 = iVar44 + 4 + uVar30 * 4;
    }
    if (iVar39 < 1) {
      do {
                    /* WARNING: Do nothing block with infinite loop */
      } while( true );
    }
    if (iVar39 == 1) {
      iVar46 = *param_3;
      iVar45 = 0;
      do {
        lVar43 = (long)iVar45;
        iVar45 = iVar45 + 1;
        iVar46 = iVar46 + local_10[lVar43];
      } while (iVar45 != 4);
      *param_3 = iVar46;
    }
    else if (iVar39 == 2) {
      iVar57 = param_3[1];
      iVar45 = 0;
      iVar46 = *param_3;
      do {
        lVar43 = (long)iVar45;
        iVar73 = iVar45 + 1;
        iVar45 = iVar45 + 2;
        iVar46 = iVar46 + local_10[lVar43];
        iVar57 = iVar57 + local_10[iVar73];
      } while (iVar45 != 4);
      *param_3 = iVar46;
      param_3[1] = iVar57;
    }
    else if (iVar39 == 3) {
      iVar57 = param_3[2];
      iVar73 = 0;
      iVar46 = param_3[1];
      iVar45 = *param_3;
      while( true ) {
        iVar45 = iVar45 + local_10[iVar73];
        iVar46 = iVar46 + local_10[iVar73 + 1];
        iVar57 = iVar57 + local_10[iVar73 + 2];
        if (iVar73 != 0) break;
        iVar73 = 3;
      }
      *param_3 = iVar45;
      param_3[1] = iVar46;
      param_3[2] = iVar57;
    }
    else {
      param_3[1] = local_10[1] + param_3[1];
      param_3[2] = local_10[2] + param_3[2];
      *param_3 = *param_3 + local_10[0];
      param_3[3] = local_10[3] + param_3[3];
    }
    iVar45 = 0;
    if (iVar39 != 0) {
      iVar45 = iVar44 / iVar39;
    }
    uVar37 = -(ulong)((uint)(iVar39 * iVar45) >> 0x1f) & 0xfffffffe00000000 |
             (ulong)(uint)(iVar39 * iVar45) << 1;
  }
  else {
    iVar45 = 0;
    uVar37 = 0;
    if (iVar39 == 4) goto LAB_003a825c;
  }
  puVar50 = (ushort *)((long)param_1 + uVar37);
  iVar44 = iVar39 % 4;
  if (iVar44 != 1) {
    iVar57 = iVar45;
    if (iVar44 != 2) {
      if (iVar44 != 3) goto LAB_003a73ac;
      iVar59 = *param_3;
      iVar73 = param_3[1];
      iVar46 = param_3[2];
      if (iVar45 < param_4) {
        uVar55 = param_4 - iVar45;
        lVar43 = (long)iVar39;
        uVar30 = (uVar55 - 8 >> 3) + 1;
        uVar33 = uVar30 * 8;
        if (6 < (uint)((param_4 + -1) - iVar45)) {
          iVar61 = 0;
          iVar63 = 0;
          iVar75 = 0;
          iVar76 = 0;
          puVar35 = (ushort *)((long)param_1 + uVar37 + 2);
          puVar36 = (ushort *)((long)param_1 + uVar37 + 4);
          uVar54 = 0;
          puVar42 = puVar50;
          iVar57 = iVar61;
          iVar60 = iVar63;
          iVar56 = iVar61;
          iVar58 = iVar63;
          iVar72 = iVar75;
          iVar74 = iVar76;
          iVar64 = iVar75;
          iVar81 = iVar76;
          do {
            uVar32 = *puVar42;
            uVar54 = uVar54 + 1;
            puVar52 = puVar42 + lVar43;
            uVar77 = *puVar35;
            puVar2 = puVar42 + lVar43 * 2;
            puVar3 = puVar42 + lVar43 * 3;
            puVar4 = puVar42 + lVar43 * 4;
            puVar5 = puVar42 + lVar43 * 5;
            puVar6 = puVar42 + lVar43 * 6;
            puVar7 = puVar42 + lVar43 * 7;
            puVar42 = puVar42 + lVar43 * 8;
            puVar8 = puVar35 + lVar43;
            puVar9 = puVar35 + lVar43 * 2;
            puVar10 = puVar35 + lVar43 * 3;
            puVar11 = puVar35 + lVar43 * 4;
            puVar12 = puVar35 + lVar43 * 5;
            iVar61 = (uint)*puVar4 + (uint)uVar32 + iVar61;
            iVar63 = (uint)*puVar5 + (uint)*puVar52 + iVar63;
            iVar75 = (uint)*puVar6 + (uint)*puVar2 + iVar75;
            iVar76 = (uint)*puVar7 + (uint)*puVar3 + iVar76;
            puVar52 = puVar35 + lVar43 * 6;
            puVar2 = puVar35 + lVar43 * 7;
            puVar35 = puVar35 + lVar43 * 8;
            uVar32 = *puVar36;
            puVar3 = puVar36 + lVar43;
            puVar4 = puVar36 + lVar43 * 2;
            puVar5 = puVar36 + lVar43 * 3;
            puVar6 = puVar36 + lVar43 * 4;
            iVar56 = (uint)*puVar11 + (uint)uVar77 + iVar56;
            iVar58 = (uint)*puVar12 + (uint)*puVar8 + iVar58;
            iVar64 = (uint)*puVar52 + (uint)*puVar9 + iVar64;
            iVar81 = (uint)*puVar2 + (uint)*puVar10 + iVar81;
            puVar52 = puVar36 + lVar43 * 5;
            puVar2 = puVar36 + lVar43 * 6;
            puVar7 = puVar36 + lVar43 * 7;
            puVar36 = puVar36 + lVar43 * 8;
            iVar57 = (uint)*puVar6 + (uint)uVar32 + iVar57;
            iVar60 = (uint)*puVar52 + (uint)*puVar3 + iVar60;
            iVar72 = (uint)*puVar2 + (uint)*puVar4 + iVar72;
            iVar74 = (uint)*puVar7 + (uint)*puVar5 + iVar74;
          } while (uVar54 < uVar30);
          puVar50 = (ushort *)((long)puVar50 + (ulong)uVar33 * lVar43 * 2);
          iVar45 = iVar45 + uVar33;
          iVar46 = iVar46 + iVar57 + iVar60 + iVar72 + iVar74;
          iVar73 = iVar73 + iVar56 + iVar58 + iVar64 + iVar81;
          iVar59 = iVar59 + iVar61 + iVar63 + iVar75 + iVar76;
          iVar57 = param_4;
          if (uVar55 == uVar33) goto LAB_003a824c;
        }
        iVar59 = iVar59 + (uint)*puVar50;
        iVar73 = iVar73 + (uint)puVar50[1];
        iVar46 = iVar46 + (uint)puVar50[2];
        iVar57 = param_4;
        if (iVar45 + 1 < param_4) {
          iVar59 = iVar59 + (uint)puVar50[lVar43];
          iVar73 = iVar73 + (uint)puVar50[lVar43 + 1];
          iVar46 = iVar46 + (uint)puVar50[lVar43 + 2];
          if (iVar45 + 2 < param_4) {
            iVar59 = iVar59 + (uint)puVar50[lVar43 * 2];
            iVar73 = iVar73 + (uint)puVar50[lVar43 * 2 + 1];
            iVar46 = iVar46 + (uint)puVar50[lVar43 * 2 + 2];
            if (iVar45 + 3 < param_4) {
              iVar59 = iVar59 + (uint)puVar50[lVar43 * 3];
              iVar73 = iVar73 + (uint)puVar50[lVar43 * 3 + 1];
              iVar46 = iVar46 + (uint)puVar50[lVar43 * 3 + 2];
              if (iVar45 + 4 < param_4) {
                iVar59 = iVar59 + (uint)puVar50[lVar43 * 4];
                iVar73 = iVar73 + (uint)puVar50[lVar43 * 4 + 1];
                iVar46 = iVar46 + (uint)puVar50[lVar43 * 4 + 2];
                if (iVar45 + 5 < param_4) {
                  iVar59 = iVar59 + (uint)puVar50[lVar43 * 5];
                  iVar73 = iVar73 + (uint)puVar50[lVar43 * 5 + 1];
                  iVar46 = iVar46 + (uint)puVar50[lVar43 * 5 + 2];
                  if (iVar45 + 6 < param_4) {
                    iVar59 = iVar59 + (uint)puVar50[lVar43 * 6];
                    iVar73 = iVar73 + (uint)puVar50[lVar43 * 6 + 1];
                    iVar46 = iVar46 + (uint)puVar50[lVar43 * 6 + 2];
                  }
                }
              }
            }
          }
        }
      }
LAB_003a824c:
      *param_3 = iVar59;
      param_3[1] = iVar73;
      param_3[2] = iVar46;
      goto LAB_003a73ac;
    }
    iVar73 = *param_3;
    iVar46 = param_3[1];
    if (iVar45 < param_4) {
      uVar55 = param_4 - iVar45;
      lVar43 = (long)iVar39;
      uVar30 = (uVar55 - 8 >> 3) + 1;
      uVar33 = uVar30 * 8;
      if (6 < (uint)((param_4 + -1) - iVar45)) {
        iVar58 = 0;
        iVar72 = 0;
        iVar74 = 0;
        iVar64 = 0;
                    /* try { // try from 003a7d68 to 004a7d6b has its CatchHandler @ 003a7e98 */
        puVar35 = (ushort *)((long)param_1 + uVar37 + 2);
        uVar54 = 0;
        puVar36 = puVar50;
        iVar57 = iVar58;
        iVar59 = iVar72;
        iVar60 = iVar74;
        iVar56 = iVar64;
        do {
          uVar32 = *puVar36;
          uVar54 = uVar54 + 1;
          puVar42 = puVar36 + lVar43;
          uVar77 = *puVar35;
          puVar52 = puVar36 + lVar43 * 2;
          puVar2 = puVar36 + lVar43 * 3;
          puVar3 = puVar36 + lVar43 * 4;
          puVar4 = puVar36 + lVar43 * 5;
          puVar5 = puVar36 + lVar43 * 6;
          puVar6 = puVar36 + lVar43 * 7;
                    /* try { // try from 003a7ddc to 004a7dfb has its CatchHandler @ 003a7bec */
          puVar36 = puVar36 + lVar43 * 8;
          puVar7 = puVar35 + lVar43;
          puVar8 = puVar35 + lVar43 * 2;
                    /* try { // try from 003a7e04 to 004a7e07 has its CatchHandler @ 003a7e98 */
          puVar9 = puVar35 + lVar43 * 3;
          puVar10 = puVar35 + lVar43 * 4;
          puVar11 = puVar35 + lVar43 * 5;
          iVar58 = (uint)*puVar3 + (uint)uVar32 + iVar58;
          iVar72 = (uint)*puVar4 + (uint)*puVar42 + iVar72;
          iVar74 = (uint)*puVar5 + (uint)*puVar52 + iVar74;
          iVar64 = (uint)*puVar6 + (uint)*puVar2 + iVar64;
          puVar42 = puVar35 + lVar43 * 6;
          puVar52 = puVar35 + lVar43 * 7;
          puVar35 = puVar35 + lVar43 * 8;
          iVar57 = (uint)*puVar10 + (uint)uVar77 + iVar57;
          iVar59 = (uint)*puVar11 + (uint)*puVar7 + iVar59;
          iVar60 = (uint)*puVar42 + (uint)*puVar8 + iVar60;
          iVar56 = (uint)*puVar52 + (uint)*puVar9 + iVar56;
        } while (uVar54 < uVar30);
        puVar50 = (ushort *)((long)puVar50 + (ulong)uVar33 * lVar43 * 2);
        iVar45 = iVar45 + uVar33;
        iVar46 = iVar46 + iVar57 + iVar59 + iVar60 + iVar56;
        iVar73 = iVar73 + iVar58 + iVar72 + iVar74 + iVar64;
        iVar57 = param_4;
        if (uVar55 == uVar33) goto LAB_003a7f58;
      }
      iVar73 = iVar73 + (uint)*puVar50;
                    /* catch() { ... } // from try @ 003a7c3c with catch @ 003a7e98
                       catch() { ... } // from try @ 003a7d68 with catch @ 003a7e98
                       catch() { ... } // from try @ 003a7e04 with catch @ 003a7e98 */
      iVar46 = iVar46 + (uint)puVar50[1];
      iVar57 = param_4;
      if (iVar45 + 1 < param_4) {
        iVar73 = iVar73 + (uint)puVar50[lVar43];
                    /* try { // try from 003a7ebc to 004a7ebf has its CatchHandler @ 003a7bec */
        iVar46 = iVar46 + (uint)puVar50[lVar43 + 1];
                    /* catch() { ... } // from try @ 003a7cb0 with catch @ 003a7ec0 */
        if (iVar45 + 2 < param_4) {
          iVar73 = iVar73 + (uint)puVar50[lVar43 * 2];
          iVar46 = iVar46 + (uint)puVar50[lVar43 * 2 + 1];
          if (iVar45 + 3 < param_4) {
                    /* catch() { ... } // from try @ 003a7c6c with catch @ 003a7ef0
                       catch() { ... } // from try @ 003a7cb8 with catch @ 003a7ef0 */
            iVar73 = iVar73 + (uint)puVar50[lVar43 * 3];
            iVar46 = iVar46 + (uint)puVar50[lVar43 * 3 + 1];
            if (iVar45 + 4 < param_4) {
              iVar73 = iVar73 + (uint)puVar50[lVar43 * 4];
              iVar46 = iVar46 + (uint)puVar50[lVar43 * 4 + 1];
              if (iVar45 + 5 < param_4) {
                iVar73 = iVar73 + (uint)puVar50[lVar43 * 5];
                iVar46 = iVar46 + (uint)puVar50[lVar43 * 5 + 1];
                if (iVar45 + 6 < param_4) {
                  iVar73 = iVar73 + (uint)puVar50[lVar43 * 6];
                  iVar46 = iVar46 + (uint)puVar50[lVar43 * 6 + 1];
                }
              }
            }
          }
        }
      }
    }
LAB_003a7f58:
    *param_3 = iVar73;
    param_3[1] = iVar46;
    goto LAB_003a73ac;
  }
                    /* catch() { ... } // from try @ 003a7430 with catch @ 003a77d8 */
  iVar57 = param_4 + -3;
  iVar46 = *param_3;
  if (iVar45 < iVar57) {
                    /* catch() { ... } // from try @ 003a73f4 with catch @ 003a77e8
                       catch() { ... } // from try @ 003a7438 with catch @ 003a77e8
                       catch() { ... } // from try @ 003a7514 with catch @ 003a77e8 */
                    /* catch() { ... } // from try @ 003a7828 with catch @ 003a77f0
                       catch() { ... } // from try @ 003a7a9c with catch @ 003a77f0
                       catch() { ... } // from try @ 003a7bd0 with catch @ 003a77f0 */
    uVar55 = (param_4 + -4) - iVar45;
    uVar33 = uVar55 >> 2;
    lVar40 = (long)(iVar39 << 2);
    uVar30 = (uVar33 - 7 >> 3) + 1;
    uVar47 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    lVar43 = (long)(iVar39 << 1);
    lVar49 = lVar40 * 2;
                    /* try { // try from 003a7828 to 004a782b has its CatchHandler @ 003a77f0 */
    puVar35 = puVar50;
    iVar73 = iVar45;
    if (uVar55 < 0x1c) {
LAB_003a7a08:
                    /* try { // try from 003a7a28 to 004a7a2b has its CatchHandler @ 003a7be4 */
      iVar46 = iVar46 + (uint)*puVar35 + (uint)*(ushort *)((long)puVar35 + uVar47) +
                        (uint)puVar35[uVar47] + (uint)*(ushort *)((long)puVar35 + uVar47 * 3);
                    /* try { // try from 003a7a9c to 004a7abb has its CatchHandler @ 003a77f0 */
                    /* try { // try from 003a7ac4 to 004a7ac7 has its CatchHandler @ 003a7be4 */
                    /* try { // try from 003a7ad0 to 004a7ad3 has its CatchHandler @ 003a7bdc */
                    /* catch() { ... } // from try @ 003a78e0 with catch @ 003a7b64 */
      if (((iVar73 + 4 < iVar57) &&
          (iVar46 = iVar46 + (uint)puVar35[uVar47 * 2] +
                             (uint)*(ushort *)((long)puVar35 + uVar47 * 5) +
                             (uint)puVar35[uVar47 * 3] +
                             (uint)*(ushort *)((long)puVar35 + uVar47 * 7), iVar73 + 8 < iVar57)) &&
         ((iVar46 = iVar46 + (uint)puVar35[uVar47 * 4] +
                             (uint)*(ushort *)((long)puVar35 + uVar47 * 9) +
                             (uint)puVar35[uVar47 * 5] +
                             (uint)*(ushort *)((long)puVar35 + uVar47 * 0xb), iVar73 + 0xc < iVar57
          && (((iVar46 = iVar46 + (uint)puVar35[uVar47 * 6] +
                                  (uint)*(ushort *)((long)puVar35 + uVar47 * 0xd) +
                                  (uint)puVar35[uVar47 * 7] +
                                  (uint)*(ushort *)((long)puVar35 + uVar47 * 0xf),
               iVar73 + 0x10 < iVar57 &&
               (iVar46 = iVar46 + (uint)puVar35[uVar47 * 8] +
                                  (uint)*(ushort *)((long)puVar35 + uVar47 * 0x11) +
                                  (uint)puVar35[uVar47 * 9] +
                                  (uint)*(ushort *)((long)puVar35 + uVar47 * 0x13),
               iVar73 + 0x14 < iVar57)) &&
              (iVar46 = iVar46 + (uint)puVar35[uVar47 * 10] +
                                 (uint)*(ushort *)((long)puVar35 + uVar47 * 0x15) +
                                 (uint)puVar35[uVar47 * 0xb] +
                                 (uint)*(ushort *)((long)puVar35 + uVar47 * 0x17),
              iVar73 + 0x18 < iVar57)))))) {
        iVar46 = iVar46 + (uint)puVar35[uVar47 * 0xc] +
                          (uint)*(ushort *)((long)puVar35 + uVar47 * 0x19) +
                          (uint)puVar35[uVar47 * 0xd] +
                          (uint)*(ushort *)((long)puVar35 + uVar47 * 0x1b);
      }
    }
    else {
      lVar86 = lVar43 + uVar37 + lVar43;
      iVar73 = 0;
      iVar59 = 0;
      iVar60 = 0;
      iVar56 = 0;
                    /* try { // try from 003a7844 to 004a7847 has its CatchHandler @ 003a7be4 */
      puVar35 = (ushort *)((long)param_1 + uVar37 + lVar43);
      puVar36 = (ushort *)((long)param_1 + lVar86);
                    /* try { // try from 003a7864 to 004a7867 has its CatchHandler @ 003a7bdc */
      puVar42 = (ushort *)((long)param_1 + lVar43 + lVar86);
      uVar55 = 0;
      puVar52 = puVar50;
      do {
        uVar32 = *puVar52;
        uVar55 = uVar55 + 1;
        puVar2 = puVar52 + lVar40;
                    /* try { // try from 003a7894 to 004a7897 has its CatchHandler @ 003a7bd4 */
        uVar84 = *puVar35;
        puVar3 = puVar52 + lVar40 * 2;
        puVar4 = puVar52 + lVar40 * 3;
        puVar5 = puVar52 + lVar40 * 4;
        puVar6 = puVar52 + lVar40 * 5;
        puVar7 = puVar52 + lVar40 * 6;
        puVar8 = puVar52 + lVar40 * 7;
        puVar52 = puVar52 + lVar40 * 8;
        puVar9 = puVar35 + lVar40;
        puVar10 = puVar35 + lVar40 * 2;
                    /* try { // try from 003a78e0 to 004a78e3 has its CatchHandler @ 003a7b64 */
        puVar11 = puVar35 + lVar40 * 3;
                    /* try { // try from 003a78e8 to 004a7943 has its CatchHandler @ 003a7bd4 */
        puVar12 = puVar35 + lVar40 * 4;
        puVar13 = puVar35 + lVar40 * 5;
        puVar14 = puVar35 + lVar40 * 6;
        puVar15 = puVar35 + lVar40 * 7;
        puVar35 = puVar35 + lVar40 * 8;
        uVar77 = *puVar36;
        puVar16 = puVar36 + lVar40;
        uVar78 = *puVar42;
        puVar17 = puVar36 + lVar40 * 2;
        puVar18 = puVar36 + lVar40 * 3;
        puVar19 = puVar36 + lVar40 * 4;
        puVar20 = puVar36 + lVar40 * 5;
        puVar21 = puVar36 + lVar40 * 6;
        puVar22 = puVar36 + lVar40 * 7;
        puVar36 = puVar36 + lVar40 * 8;
        puVar23 = puVar42 + lVar40;
        puVar24 = puVar42 + lVar40 * 2;
        puVar25 = puVar42 + lVar40 * 3;
        puVar26 = puVar42 + lVar40 * 4;
        puVar27 = puVar42 + lVar40 * 5;
        puVar28 = puVar42 + lVar40 * 6;
        puVar29 = puVar42 + lVar40 * 7;
                    /* try { // try from 003a79b4 to 004a79b7 has its CatchHandler @ 003a7bdc */
        puVar42 = puVar42 + lVar40 * 8;
        iVar73 = (uint)*puVar12 + (uint)*puVar5 + (uint)*puVar19 + (uint)*puVar26 +
                 (uint)uVar84 + (uint)uVar32 + (uint)uVar77 + (uint)uVar78 + iVar73;
        iVar59 = (uint)*puVar13 + (uint)*puVar6 + (uint)*puVar20 + (uint)*puVar27 +
                 (uint)*puVar9 + (uint)*puVar2 + (uint)*puVar16 + (uint)*puVar23 + iVar59;
        iVar60 = (uint)*puVar14 + (uint)*puVar7 + (uint)*puVar21 + (uint)*puVar28 +
                 (uint)*puVar10 + (uint)*puVar3 + (uint)*puVar17 + (uint)*puVar24 + iVar60;
        iVar56 = (uint)*puVar15 + (uint)*puVar8 + (uint)*puVar22 + (uint)*puVar29 +
                 (uint)*puVar11 + (uint)*puVar4 + (uint)*puVar18 + (uint)*puVar25 + iVar56;
      } while (uVar55 < uVar30);
      iVar46 = iVar46 + iVar73 + iVar59 + iVar60 + iVar56;
      puVar35 = (ushort *)((long)puVar50 + (ulong)(uVar30 * 8) * lVar49);
      iVar73 = iVar45 + uVar30 * 0x20;
      if (uVar33 + 1 != uVar30 * 8) goto LAB_003a7a08;
    }
    iVar45 = iVar45 + 4 + uVar33 * 4;
    puVar50 = (ushort *)((long)puVar50 + lVar49 + (ulong)uVar33 * lVar49);
  }
  iVar57 = iVar45;
  if (iVar45 < param_4) {
    uVar55 = param_4 - iVar45;
    lVar43 = (long)iVar39;
    uVar30 = (uVar55 - 8 >> 3) + 1;
                    /* try { // try from 003a7bd0 to 004a7bd3 has its CatchHandler @ 003a77f0 */
                    /* catch() { ... } // from try @ 003a7894 with catch @ 003a7bd4
                       catch() { ... } // from try @ 003a78e8 with catch @ 003a7bd4 */
    uVar33 = uVar30 * 8;
    if (6 < (uint)((param_4 + -1) - iVar45)) {
                    /* catch() { ... } // from try @ 003a7864 with catch @ 003a7bdc
                       catch() { ... } // from try @ 003a79b4 with catch @ 003a7bdc
                       catch() { ... } // from try @ 003a7ad0 with catch @ 003a7bdc */
      iVar57 = 0;
      iVar73 = 0;
      iVar59 = 0;
      iVar60 = 0;
                    /* catch() { ... } // from try @ 003a7844 with catch @ 003a7be4
                       catch() { ... } // from try @ 003a7a28 with catch @ 003a7be4
                       catch() { ... } // from try @ 003a7ac4 with catch @ 003a7be4 */
                    /* catch() { ... } // from try @ 003a7c20 with catch @ 003a7bec
                       catch() { ... } // from try @ 003a7ddc with catch @ 003a7bec
                       catch() { ... } // from try @ 003a7ebc with catch @ 003a7bec */
      puVar35 = puVar50 + lVar43;
      uVar54 = 0;
      do {
        uVar32 = *puVar35;
        uVar54 = uVar54 + 1;
        puVar36 = puVar35 + -lVar43;
        puVar42 = puVar35 + lVar43;
        puVar52 = puVar35 + lVar43 * 2;
                    /* try { // try from 003a7c20 to 004a7c23 has its CatchHandler @ 003a7bec */
        puVar2 = puVar35 + lVar43 * 3;
        puVar3 = puVar35 + lVar43 * 4;
        puVar4 = puVar35 + lVar43 * 5;
                    /* try { // try from 003a7c3c to 004a7c3f has its CatchHandler @ 003a7e98 */
        puVar5 = puVar35 + lVar43 * 6;
        puVar35 = puVar35 + lVar43 * 8;
        iVar57 = (uint)*puVar2 + (uint)*puVar36 + iVar57;
        iVar73 = (uint)*puVar3 + (uint)uVar32 + iVar73;
        iVar59 = (uint)*puVar4 + (uint)*puVar42 + iVar59;
        iVar60 = (uint)*puVar5 + (uint)*puVar52 + iVar60;
      } while (uVar54 < uVar30);
                    /* try { // try from 003a7c6c to 004a7c6f has its CatchHandler @ 003a7ef0 */
      iVar45 = iVar45 + uVar33;
      puVar50 = (ushort *)((long)puVar50 + (ulong)uVar33 * lVar43 * 2);
      iVar46 = iVar46 + iVar57 + iVar73 + iVar59 + iVar60;
      iVar57 = param_4;
      if (uVar33 == uVar55) goto LAB_003a7d20;
    }
    iVar46 = iVar46 + (uint)*puVar50;
    iVar57 = param_4;
                    /* try { // try from 003a7cb0 to 004a7cb3 has its CatchHandler @ 003a7ec0 */
                    /* try { // try from 003a7cb8 to 004a7cf7 has its CatchHandler @ 003a7ef0 */
    if (((iVar45 + 1 < param_4) && (iVar46 = iVar46 + (uint)puVar50[lVar43], iVar45 + 2 < param_4))
       && ((iVar46 = iVar46 + (uint)puVar50[lVar43 * 2], iVar45 + 3 < param_4 &&
           (iVar46 = iVar46 + (uint)puVar50[lVar43 * 3], iVar45 + 4 < param_4)))) {
      iVar46 = iVar46 + (uint)puVar50[lVar43 * 4];
      if ((iVar45 + 5 < param_4) &&
         (iVar46 = iVar46 + (uint)puVar50[lVar43 * 5], iVar45 + 6 < param_4)) {
        iVar46 = iVar46 + (uint)puVar50[lVar43 * 6];
      }
    }
  }
LAB_003a7d20:
  *param_3 = iVar46;
LAB_003a73ac:
  if (iVar39 <= iVar44) {
    return param_4;
  }
  lVar86 = (long)iVar39;
  lVar40 = (long)iVar44;
                    /* try { // try from 003a73f4 to 004a73f7 has its CatchHandler @ 003a77e8 */
  piVar38 = param_3 + lVar40;
  lVar43 = lVar40;
  lVar49 = lVar40 + 4;
  do {
    iVar59 = *piVar38;
    iVar73 = piVar38[1];
    iVar46 = piVar38[2];
    iVar45 = piVar38[3];
    lVar87 = (long)(iVar39 * iVar57);
    puVar50 = param_1 + lVar87 + lVar43;
    iVar60 = iVar57;
    if (iVar57 < param_4) {
                    /* try { // try from 003a7430 to 004a7433 has its CatchHandler @ 003a77d8 */
      uVar55 = param_4 - iVar57;
                    /* try { // try from 003a7438 to 004a74cb has its CatchHandler @ 003a77e8 */
      uVar30 = (uVar55 - 8 >> 3) + 1;
      uVar33 = uVar30 * 8;
      iVar60 = param_4;
      if (6 < (uint)((param_4 + -1) - iVar57)) {
        iVar65 = 0;
        iVar68 = 0;
        iVar69 = 0;
        iVar71 = 0;
        puVar35 = param_1 + lVar87 + lVar43 + 3;
        puVar36 = param_1 + lVar87 + lVar43 + 2;
        puVar42 = param_1 + lVar87 + lVar43 + 1;
        uVar54 = 0;
        puVar52 = puVar50;
        iVar56 = iVar65;
        iVar58 = iVar68;
        iVar72 = iVar65;
        iVar74 = iVar68;
        iVar64 = iVar65;
        iVar81 = iVar68;
        iVar61 = iVar69;
        iVar63 = iVar71;
        iVar75 = iVar69;
        iVar76 = iVar71;
        iVar82 = iVar69;
        iVar83 = iVar71;
        do {
          uVar32 = *puVar52;
          uVar54 = uVar54 + 1;
          puVar2 = puVar52 + lVar86;
          uVar77 = *puVar42;
          puVar3 = puVar52 + lVar86 * 2;
          puVar4 = puVar52 + lVar86 * 3;
          puVar5 = puVar52 + lVar86 * 4;
          puVar6 = puVar52 + lVar86 * 5;
          puVar7 = puVar52 + lVar86 * 6;
          puVar8 = puVar52 + lVar86 * 7;
          puVar52 = puVar52 + lVar86 * 8;
          puVar9 = puVar42 + lVar86;
          puVar10 = puVar42 + lVar86 * 2;
                    /* try { // try from 003a750c to 004a750f has its CatchHandler @ 003a77a8 */
                    /* try { // try from 003a7514 to 004a7517 has its CatchHandler @ 003a77e8 */
          puVar11 = puVar42 + lVar86 * 3;
          puVar12 = puVar42 + lVar86 * 4;
          puVar13 = puVar42 + lVar86 * 5;
          iVar65 = (uint)*puVar5 + (uint)uVar32 + iVar65;
          iVar68 = (uint)*puVar6 + (uint)*puVar2 + iVar68;
          iVar69 = (uint)*puVar7 + (uint)*puVar3 + iVar69;
          iVar71 = (uint)*puVar8 + (uint)*puVar4 + iVar71;
          puVar2 = puVar42 + lVar86 * 6;
          puVar3 = puVar42 + lVar86 * 7;
          puVar42 = puVar42 + lVar86 * 8;
          uVar32 = *puVar36;
          puVar4 = puVar36 + lVar86;
          uVar84 = *puVar35;
          puVar5 = puVar36 + lVar86 * 2;
          puVar6 = puVar36 + lVar86 * 3;
          iVar64 = (uint)*puVar12 + (uint)uVar77 + iVar64;
          iVar81 = (uint)*puVar13 + (uint)*puVar9 + iVar81;
          iVar82 = (uint)*puVar2 + (uint)*puVar10 + iVar82;
          iVar83 = (uint)*puVar3 + (uint)*puVar11 + iVar83;
          puVar2 = puVar36 + lVar86 * 4;
          puVar3 = puVar36 + lVar86 * 5;
                    /* try { // try from 003a7588 to 004a758b has its CatchHandler @ 003a7784 */
          puVar7 = puVar36 + lVar86 * 6;
          puVar8 = puVar36 + lVar86 * 7;
          puVar36 = puVar36 + lVar86 * 8;
          puVar9 = puVar35 + lVar86;
          puVar10 = puVar35 + lVar86 * 2;
          puVar11 = puVar35 + lVar86 * 3;
          puVar12 = puVar35 + lVar86 * 4;
          puVar13 = puVar35 + lVar86 * 5;
          iVar72 = (uint)*puVar2 + (uint)uVar32 + iVar72;
          iVar74 = (uint)*puVar3 + (uint)*puVar4 + iVar74;
          iVar75 = (uint)*puVar7 + (uint)*puVar5 + iVar75;
          iVar76 = (uint)*puVar8 + (uint)*puVar6 + iVar76;
          puVar2 = puVar35 + lVar86 * 6;
          puVar3 = puVar35 + lVar86 * 7;
          puVar35 = puVar35 + lVar86 * 8;
                    /* try { // try from 003a75fc to 004a75ff has its CatchHandler @ 003a775c */
          iVar56 = (uint)*puVar12 + (uint)uVar84 + iVar56;
          iVar58 = (uint)*puVar13 + (uint)*puVar9 + iVar58;
          iVar61 = (uint)*puVar2 + (uint)*puVar10 + iVar61;
          iVar63 = (uint)*puVar3 + (uint)*puVar11 + iVar63;
        } while (uVar54 < uVar30);
        puVar50 = (ushort *)((long)puVar50 + (ulong)uVar33 * lVar86 * 2);
        iVar57 = iVar57 + uVar33;
        iVar45 = iVar45 + iVar56 + iVar58 + iVar61 + iVar63;
        iVar46 = iVar46 + iVar72 + iVar74 + iVar75 + iVar76;
        iVar73 = iVar73 + iVar64 + iVar81 + iVar82 + iVar83;
        iVar59 = iVar59 + iVar65 + iVar68 + iVar69 + iVar71;
        if (uVar33 == uVar55) goto LAB_003a779c;
      }
      iVar59 = iVar59 + (uint)*puVar50;
                    /* try { // try from 003a7670 to 004a7693 has its CatchHandler @ 003a72d4 */
      iVar73 = iVar73 + (uint)puVar50[1];
      iVar46 = iVar46 + (uint)puVar50[2];
      iVar45 = iVar45 + (uint)puVar50[3];
      if (iVar57 + 1 < param_4) {
        iVar59 = iVar59 + (uint)puVar50[lVar86];
                    /* try { // try from 003a769c to 004a769f has its CatchHandler @ 003a775c */
        iVar73 = iVar73 + (uint)puVar50[lVar86 + 1];
                    /* try { // try from 003a76a8 to 004a76bf has its CatchHandler @ 003a7784 */
        iVar46 = iVar46 + (uint)puVar50[lVar86 + 2];
        iVar45 = iVar45 + (uint)puVar50[lVar86 + 3];
        if (iVar57 + 2 < param_4) {
          iVar59 = iVar59 + (uint)puVar50[lVar86 * 2];
          iVar73 = iVar73 + (uint)puVar50[lVar86 * 2 + 1];
          iVar46 = iVar46 + (uint)puVar50[lVar86 * 2 + 2];
          iVar45 = iVar45 + (uint)puVar50[lVar86 * 2 + 3];
          if (iVar57 + 3 < param_4) {
            iVar59 = iVar59 + (uint)puVar50[lVar86 * 3];
            iVar73 = iVar73 + (uint)puVar50[lVar86 * 3 + 1];
            iVar46 = iVar46 + (uint)puVar50[lVar86 * 3 + 2];
            iVar45 = iVar45 + (uint)puVar50[lVar86 * 3 + 3];
            if (iVar57 + 4 < param_4) {
              iVar59 = iVar59 + (uint)puVar50[lVar86 * 4];
              iVar73 = iVar73 + (uint)puVar50[lVar86 * 4 + 1];
              iVar46 = iVar46 + (uint)puVar50[lVar86 * 4 + 2];
              iVar45 = iVar45 + (uint)puVar50[lVar86 * 4 + 3];
              if (iVar57 + 5 < param_4) {
                    /* catch() { ... } // from try @ 003a732c with catch @ 003a775c
                       catch() { ... } // from try @ 003a75fc with catch @ 003a775c
                       catch() { ... } // from try @ 003a769c with catch @ 003a775c */
                iVar59 = iVar59 + (uint)puVar50[lVar86 * 5];
                iVar73 = iVar73 + (uint)puVar50[lVar86 * 5 + 1];
                iVar46 = iVar46 + (uint)puVar50[lVar86 * 5 + 2];
                iVar45 = iVar45 + (uint)puVar50[lVar86 * 5 + 3];
                if (iVar57 + 6 < param_4) {
                    /* try { // try from 003a7780 to 004a7783 has its CatchHandler @ 003a72d4 */
                    /* catch() { ... } // from try @ 003a7588 with catch @ 003a7784
                       catch() { ... } // from try @ 003a76a8 with catch @ 003a7784 */
                  iVar59 = iVar59 + (uint)puVar50[lVar86 * 6];
                  iVar73 = iVar73 + (uint)puVar50[lVar86 * 6 + 1];
                  iVar46 = iVar46 + (uint)puVar50[lVar86 * 6 + 2];
                  iVar45 = iVar45 + (uint)puVar50[lVar86 * 6 + 3];
                }
              }
            }
          }
        }
      }
    }
LAB_003a779c:
    iVar57 = iVar60;
                    /* catch() { ... } // from try @ 003a750c with catch @ 003a77a8 */
    *(ulong *)(piVar38 + 2) = CONCAT44(iVar45,iVar46);
    *(ulong *)piVar38 = CONCAT44(iVar73,iVar59);
    if (lVar49 == lVar40 + 4 + (ulong)((iVar39 - 1U) - iVar44 >> 2) * 4) {
      return param_4;
    }
    piVar38 = piVar38 + 4;
    lVar43 = lVar49;
    lVar49 = lVar49 + 4;
  } while( true );
}


==================================================================

### FUNC 003a8458 (6016 bytes) name=FUN_003a8458

int FUN_003a8458(short *param_1,long param_2,int *param_3,int param_4,ulong param_5)

{
  char *pcVar1;
  short *psVar2;
  short *psVar3;
  short *psVar4;
  short *psVar5;
  short *psVar6;
  short *psVar7;
  short *psVar8;
  short *psVar9;
  short *psVar10;
  short *psVar11;
  short *psVar12;
  short *psVar13;
  short *psVar14;
  short *psVar15;
  short *psVar16;
  short *psVar17;
  short *psVar18;
  short *psVar19;
  short *psVar20;
  short *psVar21;
  short *psVar22;
  short *psVar23;
  short *psVar24;
  short *psVar25;
  short *psVar26;
  short *psVar27;
  short *psVar28;
  short *psVar29;
  uint uVar30;
  uint uVar31;
  short sVar32;
  uint uVar33;
  int *piVar34;
  short *psVar35;
  short *psVar36;
  ulong uVar37;
  int *piVar38;
  int iVar39;
  long lVar40;
  int *piVar41;
  short *psVar42;
  long lVar43;
  int iVar44;
  int iVar45;
  int iVar46;
  ulong uVar47;
  uint uVar48;
  long lVar49;
  short *psVar50;
  uint uVar51;
  short *psVar52;
  int *piVar53;
  uint uVar54;
  uint uVar55;
  int iVar56;
  int iVar57;
  int iVar58;
  int iVar59;
  int iVar60;
  int iVar61;
  undefined8 uVar62;
  int iVar63;
  int iVar64;
  int iVar65;
  undefined8 uVar66;
  int iVar68;
  undefined8 uVar67;
  int iVar69;
  undefined8 uVar70;
  int iVar71;
  int iVar72;
  int iVar73;
  int iVar74;
  int iVar75;
  int iVar76;
  short sVar77;
  short sVar78;
  long lVar79;
  undefined8 uVar80;
  int iVar81;
  int iVar82;
  int iVar83;
  short sVar84;
  long lVar85;
  long lVar86;
  long lVar87;
  long lVar88;
  long lVar89;
  long lVar90;
  long lVar91;
  int local_10 [4];
  
  iVar39 = (int)param_5;
  if (param_2 != 0) {
    if (iVar39 == 1) {
      iVar39 = *param_3;
      if (param_4 < 1) {
        iVar45 = 0;
      }
      else {
        lVar43 = 0;
        iVar45 = 0;
        do {
          if (*(char *)(param_2 + lVar43) != '\0') {
            iVar45 = iVar45 + 1;
            iVar39 = iVar39 + param_1[lVar43];
          }
          lVar43 = lVar43 + 1;
        } while ((int)lVar43 < param_4);
      }
      *param_3 = iVar39;
      return iVar45;
    }
    if (iVar39 == 3) {
      iVar39 = *param_3;
      iVar45 = param_3[1];
      iVar44 = param_3[2];
      if (param_4 < 1) {
        iVar46 = 0;
      }
      else {
        lVar43 = 0;
        iVar46 = 0;
        do {
          pcVar1 = (char *)(param_2 + lVar43);
          lVar43 = lVar43 + 1;
          if (*pcVar1 != '\0') {
            iVar46 = iVar46 + 1;
            iVar39 = iVar39 + *param_1;
            iVar45 = iVar45 + param_1[1];
            iVar44 = iVar44 + param_1[2];
          }
          param_1 = param_1 + 3;
        } while ((int)lVar43 < param_4);
      }
      *param_3 = iVar39;
      param_3[1] = iVar45;
      param_3[2] = iVar44;
      return iVar46;
    }
    if (param_4 < 1) {
      return 0;
    }
    uVar33 = iVar39 - 4;
    lVar43 = 0;
    iVar44 = 0;
    iVar45 = (uVar33 >> 2) + 1;
    iVar57 = iVar45 * 4;
    uVar30 = ((uVar33 >> 2) - 1 >> 1) + 1;
    iVar46 = uVar30 * 8;
    if (uVar33 < 4) {
      iVar46 = 0;
    }
    lVar49 = (long)iVar46;
    if (iVar39 + -3 < 1) {
      iVar57 = 0;
    }
    iVar46 = iVar57 + 1;
    iVar73 = iVar57 + 2;
    lVar40 = (long)iVar57;
    lVar90 = NEON_shl(lVar40,1);
    iVar59 = iVar57 + 3;
    iVar60 = iVar57 + 4;
    lVar89 = NEON_shl((long)iVar46,1);
    piVar38 = param_3 + lVar40;
    lVar88 = NEON_shl((long)iVar73,1);
    iVar56 = iVar57 + 5;
    uVar55 = -((uint)((ulong)piVar38 >> 2) & 3) & 3;
    lVar87 = NEON_shl((long)iVar59,1);
    iVar58 = iVar57 + 6;
    iVar72 = iVar57 + 7;
    lVar86 = NEON_shl((long)iVar60,1);
    uVar54 = iVar39 - iVar57;
    if (uVar54 < uVar55) {
      uVar55 = uVar54;
    }
    lVar85 = NEON_shl((long)iVar56,1);
    lVar79 = NEON_shl((long)iVar58,1);
    lVar91 = NEON_shl((long)iVar72,1);
    do {
      if (*(char *)(param_2 + lVar43) != '\0') {
        if (0 < iVar39 + -3) {
          if (3 < uVar33) {
            piVar41 = param_3 + 4;
            uVar48 = 0;
            psVar50 = param_1;
            piVar53 = param_3;
            do {
              uVar62 = *(undefined8 *)(psVar50 + 4);
              uVar67 = *(undefined8 *)psVar50;
              uVar48 = uVar48 + 1;
              uVar70 = *(undefined8 *)(piVar41 + 2);
              uVar66 = *(undefined8 *)piVar41;
              *(ulong *)(piVar53 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)(piVar53 + 2) >> 0x20) +
                            (int)(short)((ulong)uVar67 >> 0x30),
                            (int)*(undefined8 *)(piVar53 + 2) + (int)(short)((ulong)uVar67 >> 0x20))
              ;
              *(ulong *)piVar53 =
                   CONCAT44((int)((ulong)*(undefined8 *)piVar53 >> 0x20) +
                            (int)(short)((ulong)uVar67 >> 0x10),
                            (int)*(undefined8 *)piVar53 + (int)(short)uVar67);
              piVar53 = piVar53 + 8;
              *(ulong *)(piVar41 + 2) =
                   CONCAT44((int)((ulong)uVar70 >> 0x20) + (int)(short)((ulong)uVar62 >> 0x30),
                            (int)uVar70 + (int)(short)((ulong)uVar62 >> 0x20));
              *(ulong *)piVar41 =
                   CONCAT44((int)((ulong)uVar66 >> 0x20) + (int)(short)((ulong)uVar62 >> 0x10),
                            (int)uVar66 + (int)(short)uVar62);
              piVar41 = piVar41 + 8;
              psVar50 = psVar50 + 8;
            } while (uVar48 < uVar30);
            if (iVar45 == uVar30 * 2) goto LAB_003a8720;
          }
          sVar32 = param_1[lVar49 + 1];
          param_3[lVar49] = param_3[lVar49] + (int)param_1[lVar49];
          param_3[lVar49 + 1] = (int)sVar32 + param_3[lVar49 + 1];
          sVar32 = param_1[lVar49 + 3];
          param_3[lVar49 + 2] = param_3[lVar49 + 2] + (int)param_1[lVar49 + 2];
          param_3[lVar49 + 3] = (int)sVar32 + param_3[lVar49 + 3];
        }
LAB_003a8720:
        if (iVar57 < iVar39) {
          uVar48 = uVar55;
          if (uVar54 < 9) {
            uVar48 = uVar54;
          }
          iVar74 = iVar57;
          if (uVar48 != 0) {
            *piVar38 = *piVar38 + (int)*(short *)((long)param_1 + lVar90);
            iVar74 = iVar46;
            if (((((uVar48 != 1) &&
                  (param_3[iVar46] = param_3[iVar46] + (int)*(short *)((long)param_1 + lVar89),
                  iVar74 = iVar73, uVar48 != 2)) &&
                 (param_3[iVar73] = param_3[iVar73] + (int)*(short *)((long)param_1 + lVar88),
                 iVar74 = iVar59, uVar48 != 3)) &&
                ((param_3[iVar59] = param_3[iVar59] + (int)*(short *)((long)param_1 + lVar87),
                 iVar74 = iVar60, uVar48 != 4 &&
                 (param_3[iVar60] = param_3[iVar60] + (int)*(short *)((long)param_1 + lVar86),
                 iVar74 = iVar56, uVar48 != 5)))) &&
               ((param_3[iVar56] = param_3[iVar56] + (int)*(short *)((long)param_1 + lVar85),
                iVar74 = iVar58, uVar48 != 6 &&
                (param_3[iVar58] = param_3[iVar58] + (int)*(short *)((long)param_1 + lVar79),
                iVar74 = iVar72, uVar48 == 8)))) {
              param_3[iVar72] = param_3[iVar72] + (int)*(short *)((long)param_1 + lVar91);
              iVar74 = iVar57 + 8;
            }
            if (uVar54 == uVar48) goto LAB_003a89b0;
          }
          uVar31 = ((uVar54 - uVar48) - 8 >> 3) + 1;
          iVar64 = uVar31 * 8;
          if (6 < (uVar54 - 1) - uVar48) {
            uVar51 = 0;
            piVar41 = param_3 + lVar40 + (ulong)uVar48;
            psVar50 = param_1 + lVar40 + (ulong)uVar48;
            piVar53 = piVar41;
            do {
              uVar62 = *(undefined8 *)(psVar50 + 4);
              uVar67 = *(undefined8 *)psVar50;
              piVar34 = piVar41 + 2;
              uVar66 = *(undefined8 *)piVar41;
              uVar80 = *(undefined8 *)(piVar41 + 6);
              uVar70 = *(undefined8 *)(piVar41 + 4);
              uVar51 = uVar51 + 1;
              piVar41 = piVar41 + 8;
              *(ulong *)(piVar53 + 2) =
                   CONCAT44((int)((ulong)*(undefined8 *)piVar34 >> 0x20) +
                            (int)(short)((ulong)uVar67 >> 0x30),
                            (int)*(undefined8 *)piVar34 + (int)(short)((ulong)uVar67 >> 0x20));
              *(ulong *)piVar53 =
                   CONCAT44((int)((ulong)uVar66 >> 0x20) + (int)(short)((ulong)uVar67 >> 0x10),
                            (int)uVar66 + (int)(short)uVar67);
              *(ulong *)(piVar53 + 6) =
                   CONCAT44((int)(short)((ulong)uVar62 >> 0x30) + (int)((ulong)uVar80 >> 0x20),
                            (int)(short)((ulong)uVar62 >> 0x20) + (int)uVar80);
              *(ulong *)(piVar53 + 4) =
                   CONCAT44((int)(short)((ulong)uVar62 >> 0x10) + (int)((ulong)uVar70 >> 0x20),
                            (int)(short)uVar62 + (int)uVar70);
              psVar50 = psVar50 + 8;
              piVar53 = piVar53 + 8;
            } while (uVar51 < uVar31);
            iVar74 = iVar74 + iVar64;
            if (uVar54 - uVar48 == iVar64) goto LAB_003a89b0;
          }
          iVar64 = iVar74 + 1;
          param_3[iVar74] = param_3[iVar74] + (int)param_1[iVar74];
          if (iVar64 < iVar39) {
            iVar81 = iVar74 + 2;
            param_3[iVar64] = param_3[iVar64] + (int)param_1[iVar64];
            if (iVar81 < iVar39) {
              iVar64 = iVar74 + 3;
              param_3[iVar81] = param_3[iVar81] + (int)param_1[iVar81];
              if (iVar64 < iVar39) {
                iVar81 = iVar74 + 4;
                param_3[iVar64] = param_3[iVar64] + (int)param_1[iVar64];
                if (iVar81 < iVar39) {
                  iVar64 = iVar74 + 5;
                  param_3[iVar81] = param_3[iVar81] + (int)param_1[iVar81];
                  if (iVar64 < iVar39) {
                    iVar74 = iVar74 + 6;
                    param_3[iVar64] = param_3[iVar64] + (int)param_1[iVar64];
                    if (iVar74 < iVar39) {
                      param_3[iVar74] = param_3[iVar74] + (int)param_1[iVar74];
                    }
                  }
                }
              }
            }
          }
        }
LAB_003a89b0:
        iVar44 = iVar44 + 1;
      }
      lVar43 = lVar43 + 1;
      param_1 = (short *)((long)param_1 +
                         (-(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1)
                         );
      if (param_4 <= (int)lVar43) {
        return iVar44;
      }
    } while( true );
  }
  if (iVar39 - 1U < 2) {
LAB_003a99e8:
    if (param_4 < 8) {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      iVar44 = 0;
    }
    else {
      local_10[0] = 0;
      local_10[1] = 0;
      local_10[2] = 0;
      local_10[3] = 0;
      uVar30 = param_4 - 8U >> 3;
      psVar50 = param_1;
      do {
        psVar35 = psVar50 + 8;
        uVar62 = *(undefined8 *)(psVar50 + 4);
        uVar67 = *(undefined8 *)psVar50;
        local_10[0] = local_10[0] + (short)uVar67 + (int)(short)uVar62;
        local_10[1] = local_10[1] + (short)((ulong)uVar67 >> 0x10) +
                      (int)(short)((ulong)uVar62 >> 0x10);
        local_10[2] = local_10[2] + (short)((ulong)uVar67 >> 0x20) +
                      (int)(short)((ulong)uVar62 >> 0x20);
        local_10[3] = local_10[3] + (short)((ulong)uVar67 >> 0x30) +
                      (int)(short)((ulong)uVar62 >> 0x30);
        psVar50 = psVar35;
      } while (psVar35 != param_1 + ((ulong)uVar30 + 1) * 8);
      iVar44 = (uVar30 + 1) * 8;
    }
    if (iVar44 < param_4 + -3) {
      uVar30 = (uint)((param_4 + -4) - iVar44) >> 2;
      psVar50 = param_1 + iVar44;
      do {
        psVar35 = psVar50 + 4;
        uVar67 = *(undefined8 *)psVar50;
        local_10[0] = local_10[0] + (short)uVar67;
        local_10[1] = local_10[1] + (short)((ulong)uVar67 >> 0x10);
        local_10[2] = local_10[2] + (short)((ulong)uVar67 >> 0x20);
        local_10[3] = local_10[3] + (short)((ulong)uVar67 >> 0x30);
        psVar50 = psVar35;
      } while (psVar35 != param_1 + (long)iVar44 + 4 + (ulong)uVar30 * 4);
      iVar44 = iVar44 + 4 + uVar30 * 4;
    }
                    /* try { // try from 003a9a74 to 004a9a77 has its CatchHandler @ 003a9fd4 */
    if (iVar39 < 1) {
      do {
                    /* WARNING: Do nothing block with infinite loop */
                    /* try { // try from 003a9af4 to 004a9af7 has its CatchHandler @ 003aa014 */
      } while( true );
    }
    if (iVar39 == 1) {
      iVar46 = *param_3;
      iVar45 = 0;
      do {
        lVar43 = (long)iVar45;
        iVar45 = iVar45 + 1;
        iVar46 = iVar46 + local_10[lVar43];
      } while (iVar45 != 4);
      *param_3 = iVar46;
    }
    else if (iVar39 == 2) {
      iVar57 = param_3[1];
      iVar45 = 0;
      iVar46 = *param_3;
      do {
        lVar43 = (long)iVar45;
        iVar73 = iVar45 + 1;
        iVar45 = iVar45 + 2;
        iVar46 = iVar46 + local_10[lVar43];
        iVar57 = iVar57 + local_10[iVar73];
      } while (iVar45 != 4);
      *param_3 = iVar46;
      param_3[1] = iVar57;
    }
    else if (iVar39 == 3) {
      iVar57 = param_3[2];
      iVar73 = 0;
      iVar46 = param_3[1];
      iVar45 = *param_3;
      while( true ) {
        iVar45 = iVar45 + local_10[iVar73];
        iVar46 = iVar46 + local_10[iVar73 + 1];
        iVar57 = iVar57 + local_10[iVar73 + 2];
        if (iVar73 != 0) break;
        iVar73 = 3;
      }
      *param_3 = iVar45;
      param_3[1] = iVar46;
      param_3[2] = iVar57;
    }
    else {
                    /* try { // try from 003a9ab0 to 004a9ab3 has its CatchHandler @ 003aa014 */
      param_3[1] = local_10[1] + param_3[1];
      param_3[2] = local_10[2] + param_3[2];
      *param_3 = *param_3 + local_10[0];
      param_3[3] = local_10[3] + param_3[3];
    }
    iVar45 = 0;
    if (iVar39 != 0) {
      iVar45 = iVar44 / iVar39;
    }
    uVar37 = -(ulong)((uint)(iVar39 * iVar45) >> 0x1f) & 0xfffffffe00000000 |
             (ulong)(uint)(iVar39 * iVar45) << 1;
  }
  else {
    iVar45 = 0;
    uVar37 = 0;
    if (iVar39 == 4) goto LAB_003a99e8;
  }
  psVar50 = (short *)((long)param_1 + uVar37);
  iVar44 = iVar39 % 4;
  if (iVar44 != 1) {
    iVar57 = iVar45;
    if (iVar44 != 2) {
      if (iVar44 != 3) goto LAB_003a8b38;
      iVar59 = *param_3;
      iVar73 = param_3[1];
      iVar46 = param_3[2];
      if (iVar45 < param_4) {
        uVar55 = param_4 - iVar45;
                    /* try { // try from 003a9714 to 004a971f has its CatchHandler @ 003a9598 */
        lVar43 = (long)iVar39;
        uVar30 = (uVar55 - 8 >> 3) + 1;
                    /* try { // try from 003a9728 to 004a972b has its CatchHandler @ 003a974c */
        uVar33 = uVar30 * 8;
        if (6 < (uint)((param_4 + -1) - iVar45)) {
          iVar61 = 0;
          iVar63 = 0;
          iVar75 = 0;
          iVar76 = 0;
                    /* try { // try from 003a9734 to 004a9737 has its CatchHandler @ 003a9774 */
                    /* catch() { ... } // from try @ 003a9694 with catch @ 003a974c
                       catch() { ... } // from try @ 003a9728 with catch @ 003a974c */
          psVar35 = (short *)((long)param_1 + uVar37 + 2);
          psVar36 = (short *)((long)param_1 + uVar37 + 4);
          uVar54 = 0;
                    /* try { // try from 003a9770 to 004a9773 has its CatchHandler @ 003a9598 */
                    /* catch() { ... } // from try @ 003a961c with catch @ 003a9774
                       catch() { ... } // from try @ 003a9734 with catch @ 003a9774 */
          psVar42 = psVar50;
          iVar57 = iVar61;
          iVar60 = iVar63;
          iVar56 = iVar61;
          iVar58 = iVar63;
          iVar72 = iVar75;
          iVar74 = iVar76;
          iVar64 = iVar75;
          iVar81 = iVar76;
          do {
            sVar32 = *psVar42;
            uVar54 = uVar54 + 1;
            psVar52 = psVar42 + lVar43;
            sVar77 = *psVar35;
            psVar2 = psVar42 + lVar43 * 2;
            psVar3 = psVar42 + lVar43 * 3;
            psVar4 = psVar42 + lVar43 * 4;
            psVar5 = psVar42 + lVar43 * 5;
                    /* catch() { ... } // from try @ 003a97cc with catch @ 003a97ac
                       catch() { ... } // from try @ 003a9c18 with catch @ 003a97ac
                       catch() { ... } // from try @ 003a9fd0 with catch @ 003a97ac */
            psVar6 = psVar42 + lVar43 * 6;
            psVar7 = psVar42 + lVar43 * 7;
            psVar42 = psVar42 + lVar43 * 8;
            psVar8 = psVar35 + lVar43;
                    /* try { // try from 003a97cc to 004a97eb has its CatchHandler @ 003a97ac */
            psVar9 = psVar35 + lVar43 * 2;
            psVar10 = psVar35 + lVar43 * 3;
            psVar11 = psVar35 + lVar43 * 4;
            psVar12 = psVar35 + lVar43 * 5;
            iVar61 = (int)*psVar4 + sVar32 + iVar61;
            iVar63 = (int)*psVar5 + *psVar52 + iVar63;
            iVar75 = (int)*psVar6 + *psVar2 + iVar75;
            iVar76 = (int)*psVar7 + *psVar3 + iVar76;
            psVar52 = psVar35 + lVar43 * 6;
            psVar2 = psVar35 + lVar43 * 7;
            psVar35 = psVar35 + lVar43 * 8;
            sVar32 = *psVar36;
            psVar3 = psVar36 + lVar43;
            psVar4 = psVar36 + lVar43 * 2;
            psVar5 = psVar36 + lVar43 * 3;
            psVar6 = psVar36 + lVar43 * 4;
            iVar56 = (int)*psVar11 + sVar77 + iVar56;
            iVar58 = (int)*psVar12 + *psVar8 + iVar58;
            iVar64 = (int)*psVar52 + *psVar9 + iVar64;
            iVar81 = (int)*psVar2 + *psVar10 + iVar81;
            psVar52 = psVar36 + lVar43 * 5;
            psVar2 = psVar36 + lVar43 * 6;
                    /* try { // try from 003a9864 to 004a9867 has its CatchHandler @ 003aa014 */
            psVar7 = psVar36 + lVar43 * 7;
            psVar36 = psVar36 + lVar43 * 8;
            iVar57 = (int)*psVar6 + sVar32 + iVar57;
            iVar60 = (int)*psVar52 + *psVar3 + iVar60;
            iVar72 = (int)*psVar2 + *psVar4 + iVar72;
            iVar74 = (int)*psVar7 + *psVar5 + iVar74;
          } while (uVar54 < uVar30);
          psVar50 = (short *)((long)psVar50 + (ulong)uVar33 * lVar43 * 2);
          iVar45 = iVar45 + uVar33;
                    /* try { // try from 003a98b8 to 004a98bb has its CatchHandler @ 003aa004 */
          iVar46 = iVar46 + iVar57 + iVar60 + iVar72 + iVar74;
                    /* try { // try from 003a98c0 to 004a990f has its CatchHandler @ 003aa014 */
          iVar73 = iVar73 + iVar56 + iVar58 + iVar64 + iVar81;
          iVar59 = iVar59 + iVar61 + iVar63 + iVar75 + iVar76;
          iVar57 = param_4;
          if (uVar55 == uVar33) goto LAB_003a99d8;
        }
        iVar59 = iVar59 + *psVar50;
        iVar73 = iVar73 + psVar50[1];
        iVar46 = iVar46 + psVar50[2];
        iVar57 = param_4;
        if (iVar45 + 1 < param_4) {
          iVar59 = iVar59 + psVar50[lVar43];
          iVar73 = iVar73 + psVar50[lVar43 + 1];
          iVar46 = iVar46 + psVar50[lVar43 + 2];
          if (iVar45 + 2 < param_4) {
            iVar59 = iVar59 + psVar50[lVar43 * 2];
            iVar73 = iVar73 + psVar50[lVar43 * 2 + 1];
            iVar46 = iVar46 + psVar50[lVar43 * 2 + 2];
            if (iVar45 + 3 < param_4) {
              iVar59 = iVar59 + psVar50[lVar43 * 3];
              iVar73 = iVar73 + psVar50[lVar43 * 3 + 1];
              iVar46 = iVar46 + psVar50[lVar43 * 3 + 2];
              if (iVar45 + 4 < param_4) {
                iVar59 = iVar59 + psVar50[lVar43 * 4];
                iVar73 = iVar73 + psVar50[lVar43 * 4 + 1];
                iVar46 = iVar46 + psVar50[lVar43 * 4 + 2];
                if (iVar45 + 5 < param_4) {
                    /* try { // try from 003a999c to 004a99bb has its CatchHandler @ 003a9fe0 */
                  iVar59 = iVar59 + psVar50[lVar43 * 5];
                  iVar73 = iVar73 + psVar50[lVar43 * 5 + 1];
                  iVar46 = iVar46 + psVar50[lVar43 * 5 + 2];
                  if (iVar45 + 6 < param_4) {
                    iVar59 = iVar59 + psVar50[lVar43 * 6];
                    iVar73 = iVar73 + psVar50[lVar43 * 6 + 1];
                    iVar46 = iVar46 + psVar50[lVar43 * 6 + 2];
                  }
                }
              }
            }
          }
        }
      }
LAB_003a99d8:
      *param_3 = iVar59;
      param_3[1] = iVar73;
      param_3[2] = iVar46;
      goto LAB_003a8b38;
    }
    iVar73 = *param_3;
    iVar46 = param_3[1];
    if (iVar45 < param_4) {
      uVar55 = param_4 - iVar45;
      lVar43 = (long)iVar39;
      uVar30 = (uVar55 - 8 >> 3) + 1;
      uVar33 = uVar30 * 8;
      if (6 < (uint)((param_4 + -1) - iVar45)) {
        iVar58 = 0;
        iVar72 = 0;
        iVar74 = 0;
        iVar64 = 0;
        psVar35 = (short *)((long)param_1 + uVar37 + 2);
        uVar54 = 0;
        psVar36 = psVar50;
        iVar57 = iVar58;
        iVar59 = iVar72;
        iVar60 = iVar74;
        iVar56 = iVar64;
        do {
          sVar32 = *psVar36;
          uVar54 = uVar54 + 1;
          psVar42 = psVar36 + lVar43;
          sVar77 = *psVar35;
          psVar52 = psVar36 + lVar43 * 2;
          psVar2 = psVar36 + lVar43 * 3;
          psVar3 = psVar36 + lVar43 * 4;
          psVar4 = psVar36 + lVar43 * 5;
          psVar5 = psVar36 + lVar43 * 6;
          psVar6 = psVar36 + lVar43 * 7;
          psVar36 = psVar36 + lVar43 * 8;
          psVar7 = psVar35 + lVar43;
          psVar8 = psVar35 + lVar43 * 2;
          psVar9 = psVar35 + lVar43 * 3;
                    /* catch() { ... } // from try @ 003a9714 with catch @ 003a9598
                       catch() { ... } // from try @ 003a9770 with catch @ 003a9598 */
          psVar10 = psVar35 + lVar43 * 4;
          psVar11 = psVar35 + lVar43 * 5;
          iVar58 = (int)*psVar3 + sVar32 + iVar58;
          iVar72 = (int)*psVar4 + *psVar42 + iVar72;
          iVar74 = (int)*psVar5 + *psVar52 + iVar74;
          iVar64 = (int)*psVar6 + *psVar2 + iVar64;
          psVar42 = psVar35 + lVar43 * 6;
          psVar52 = psVar35 + lVar43 * 7;
          psVar35 = psVar35 + lVar43 * 8;
          iVar57 = (int)*psVar10 + sVar77 + iVar57;
          iVar59 = (int)*psVar11 + *psVar7 + iVar59;
          iVar60 = (int)*psVar42 + *psVar8 + iVar60;
          iVar56 = (int)*psVar52 + *psVar9 + iVar56;
        } while (uVar54 < uVar30);
        psVar50 = (short *)((long)psVar50 + (ulong)uVar33 * lVar43 * 2);
        iVar45 = iVar45 + uVar33;
        iVar46 = iVar46 + iVar57 + iVar59 + iVar60 + iVar56;
        iVar73 = iVar73 + iVar58 + iVar72 + iVar74 + iVar64;
        iVar57 = param_4;
        if (uVar55 == uVar33) goto LAB_003a96e4;
      }
                    /* try { // try from 003a961c to 004a961f has its CatchHandler @ 003a9774 */
      iVar73 = iVar73 + *psVar50;
      iVar46 = iVar46 + psVar50[1];
      iVar57 = param_4;
      if (iVar45 + 1 < param_4) {
        iVar73 = iVar73 + psVar50[lVar43];
        iVar46 = iVar46 + psVar50[lVar43 + 1];
        if (iVar45 + 2 < param_4) {
          iVar73 = iVar73 + psVar50[lVar43 * 2];
          iVar46 = iVar46 + psVar50[lVar43 * 2 + 1];
          if (iVar45 + 3 < param_4) {
            iVar73 = iVar73 + psVar50[lVar43 * 3];
            iVar46 = iVar46 + psVar50[lVar43 * 3 + 1];
            if (iVar45 + 4 < param_4) {
                    /* try { // try from 003a9694 to 004a9697 has its CatchHandler @ 003a974c */
              iVar73 = iVar73 + psVar50[lVar43 * 4];
              iVar46 = iVar46 + psVar50[lVar43 * 4 + 1];
              if (iVar45 + 5 < param_4) {
                iVar73 = iVar73 + psVar50[lVar43 * 5];
                iVar46 = iVar46 + psVar50[lVar43 * 5 + 1];
                if (iVar45 + 6 < param_4) {
                  iVar73 = iVar73 + psVar50[lVar43 * 6];
                  iVar46 = iVar46 + psVar50[lVar43 * 6 + 1];
                }
              }
            }
          }
        }
      }
    }
LAB_003a96e4:
    *param_3 = iVar73;
    param_3[1] = iVar46;
    goto LAB_003a8b38;
  }
  iVar57 = param_4 + -3;
  iVar46 = *param_3;
  if (iVar45 < iVar57) {
    uVar55 = (param_4 + -4) - iVar45;
    uVar33 = uVar55 >> 2;
    lVar40 = (long)(iVar39 << 2);
    uVar30 = (uVar33 - 7 >> 3) + 1;
    uVar47 = -(param_5 >> 0x1f & 1) & 0xfffffffe00000000 | (param_5 & 0xffffffff) << 1;
    lVar43 = (long)(iVar39 << 1);
    lVar49 = lVar40 * 2;
    psVar35 = psVar50;
    iVar73 = iVar45;
    if (uVar55 < 0x1c) {
LAB_003a9194:
      iVar46 = iVar46 + (int)*psVar35 + (int)*(short *)((long)psVar35 + uVar47) +
                        (int)psVar35[uVar47] + (int)*(short *)((long)psVar35 + uVar47 * 3);
      if (((iVar73 + 4 < iVar57) &&
          (iVar46 = iVar46 + (int)psVar35[uVar47 * 2] + (int)*(short *)((long)psVar35 + uVar47 * 5)
                             + (int)psVar35[uVar47 * 3] +
                             (int)*(short *)((long)psVar35 + uVar47 * 7), iVar73 + 8 < iVar57)) &&
         ((iVar46 = iVar46 + (int)psVar35[uVar47 * 4] + (int)*(short *)((long)psVar35 + uVar47 * 9)
                             + (int)psVar35[uVar47 * 5] +
                             (int)*(short *)((long)psVar35 + uVar47 * 0xb), iVar73 + 0xc < iVar57 &&
          (((iVar46 = iVar46 + (int)psVar35[uVar47 * 6] +
                               (int)*(short *)((long)psVar35 + uVar47 * 0xd) +
                               (int)psVar35[uVar47 * 7] +
                               (int)*(short *)((long)psVar35 + uVar47 * 0xf), iVar73 + 0x10 < iVar57
            && (iVar46 = iVar46 + (int)psVar35[uVar47 * 8] +
                                  (int)*(short *)((long)psVar35 + uVar47 * 0x11) +
                                  (int)psVar35[uVar47 * 9] +
                                  (int)*(short *)((long)psVar35 + uVar47 * 0x13),
               iVar73 + 0x14 < iVar57)) &&
           (iVar46 = iVar46 + (int)psVar35[uVar47 * 10] +
                              (int)*(short *)((long)psVar35 + uVar47 * 0x15) +
                              (int)psVar35[uVar47 * 0xb] +
                              (int)*(short *)((long)psVar35 + uVar47 * 0x17), iVar73 + 0x18 < iVar57
           )))))) {
        iVar46 = iVar46 + (int)psVar35[uVar47 * 0xc] +
                          (int)*(short *)((long)psVar35 + uVar47 * 0x19) +
                          (int)psVar35[uVar47 * 0xd] +
                          (int)*(short *)((long)psVar35 + uVar47 * 0x1b);
      }
    }
    else {
      lVar86 = lVar43 + uVar37 + lVar43;
      iVar73 = 0;
      iVar59 = 0;
      iVar60 = 0;
      iVar56 = 0;
      psVar35 = (short *)((long)param_1 + uVar37 + lVar43);
      psVar36 = (short *)((long)param_1 + lVar86);
      psVar42 = (short *)((long)param_1 + lVar43 + lVar86);
      uVar55 = 0;
      psVar52 = psVar50;
      do {
        sVar32 = *psVar52;
        uVar55 = uVar55 + 1;
        psVar2 = psVar52 + lVar40;
        sVar84 = *psVar35;
        psVar3 = psVar52 + lVar40 * 2;
        psVar4 = psVar52 + lVar40 * 3;
        psVar5 = psVar52 + lVar40 * 4;
        psVar6 = psVar52 + lVar40 * 5;
        psVar7 = psVar52 + lVar40 * 6;
        psVar8 = psVar52 + lVar40 * 7;
        psVar52 = psVar52 + lVar40 * 8;
        psVar9 = psVar35 + lVar40;
        psVar10 = psVar35 + lVar40 * 2;
        psVar11 = psVar35 + lVar40 * 3;
        psVar12 = psVar35 + lVar40 * 4;
        psVar13 = psVar35 + lVar40 * 5;
        psVar14 = psVar35 + lVar40 * 6;
        psVar15 = psVar35 + lVar40 * 7;
        psVar35 = psVar35 + lVar40 * 8;
        sVar77 = *psVar36;
        psVar16 = psVar36 + lVar40;
        sVar78 = *psVar42;
        psVar17 = psVar36 + lVar40 * 2;
        psVar18 = psVar36 + lVar40 * 3;
        psVar19 = psVar36 + lVar40 * 4;
        psVar20 = psVar36 + lVar40 * 5;
        psVar21 = psVar36 + lVar40 * 6;
        psVar22 = psVar36 + lVar40 * 7;
        psVar36 = psVar36 + lVar40 * 8;
        psVar23 = psVar42 + lVar40;
        psVar24 = psVar42 + lVar40 * 2;
        psVar25 = psVar42 + lVar40 * 3;
        psVar26 = psVar42 + lVar40 * 4;
        psVar27 = psVar42 + lVar40 * 5;
        psVar28 = psVar42 + lVar40 * 6;
        psVar29 = psVar42 + lVar40 * 7;
        psVar42 = psVar42 + lVar40 * 8;
        iVar73 = (int)*psVar12 + (int)*psVar5 + (int)*psVar19 + (int)*psVar26 +
                 (int)sVar84 + (int)sVar32 + (int)sVar77 + (int)sVar78 + iVar73;
        iVar59 = (int)*psVar13 + (int)*psVar6 + (int)*psVar20 + (int)*psVar27 +
                 (int)*psVar9 + (int)*psVar2 + (int)*psVar16 + (int)*psVar23 + iVar59;
        iVar60 = (int)*psVar14 + (int)*psVar7 + (int)*psVar21 + (int)*psVar28 +
                 (int)*psVar10 + (int)*psVar3 + (int)*psVar17 + (int)*psVar24 + iVar60;
        iVar56 = (int)*psVar15 + (int)*psVar8 + (int)*psVar22 + (int)*psVar29 +
                 (int)*psVar11 + (int)*psVar4 + (int)*psVar18 + (int)*psVar25 + iVar56;
      } while (uVar55 < uVar30);
      iVar46 = iVar46 + iVar73 + iVar59 + iVar60 + iVar56;
      psVar35 = (short *)((long)psVar50 + (ulong)(uVar30 * 8) * lVar49);
      iVar73 = iVar45 + uVar30 * 0x20;
      if (uVar33 + 1 != uVar30 * 8) goto LAB_003a9194;
    }
    iVar45 = iVar45 + 4 + uVar33 * 4;
    psVar50 = (short *)((long)psVar50 + lVar49 + (ulong)uVar33 * lVar49);
  }
  iVar57 = iVar45;
  if (iVar45 < param_4) {
    uVar55 = param_4 - iVar45;
    lVar43 = (long)iVar39;
    uVar30 = (uVar55 - 8 >> 3) + 1;
    uVar33 = uVar30 * 8;
    if (6 < (uint)((param_4 + -1) - iVar45)) {
      iVar57 = 0;
      iVar73 = 0;
      iVar59 = 0;
      iVar60 = 0;
      psVar35 = psVar50 + lVar43;
      uVar54 = 0;
      do {
        sVar32 = *psVar35;
        uVar54 = uVar54 + 1;
        psVar36 = psVar35 + -lVar43;
        psVar42 = psVar35 + lVar43;
        psVar52 = psVar35 + lVar43 * 2;
        psVar2 = psVar35 + lVar43 * 3;
        psVar3 = psVar35 + lVar43 * 4;
        psVar4 = psVar35 + lVar43 * 5;
        psVar5 = psVar35 + lVar43 * 6;
        psVar35 = psVar35 + lVar43 * 8;
        iVar57 = (int)*psVar2 + *psVar36 + iVar57;
        iVar73 = (int)*psVar3 + sVar32 + iVar73;
        iVar59 = (int)*psVar4 + *psVar42 + iVar59;
        iVar60 = (int)*psVar5 + *psVar52 + iVar60;
      } while (uVar54 < uVar30);
      iVar45 = iVar45 + uVar33;
      psVar50 = (short *)((long)psVar50 + (ulong)uVar33 * lVar43 * 2);
      iVar46 = iVar46 + iVar57 + iVar73 + iVar59 + iVar60;
      iVar57 = param_4;
      if (uVar33 == uVar55) goto LAB_003a94ac;
    }
    iVar46 = iVar46 + *psVar50;
    iVar57 = param_4;
    if (((iVar45 + 1 < param_4) && (iVar46 = iVar46 + psVar50[lVar43], iVar45 + 2 < param_4)) &&
       ((iVar46 = iVar46 + psVar50[lVar43 * 2], iVar45 + 3 < param_4 &&
        (iVar46 = iVar46 + psVar50[lVar43 * 3], iVar45 + 4 < param_4)))) {
      iVar46 = iVar46 + psVar50[lVar43 * 4];
      if ((iVar45 + 5 < param_4) && (iVar46 = iVar46 + psVar50[lVar43 * 5], iVar45 + 6 < param_4)) {
        iVar46 = iVar46 + psVar50[lVar43 * 6];
      }
    }
  }
LAB_003a94ac:
  *param_3 = iVar46;
LAB_003a8b38:
  if (iVar39 <= iVar44) {
    return param_4;
  }
  lVar86 = (long)iVar39;
  lVar40 = (long)iVar44;
  piVar38 = param_3 + lVar40;
  lVar43 = lVar40;
  lVar49 = lVar40 + 4;
  do {
    iVar59 = *piVar38;
    iVar73 = piVar38[1];
    iVar46 = piVar38[2];
    iVar45 = piVar38[3];
    lVar87 = (long)(iVar39 * iVar57);
    psVar50 = param_1 + lVar87 + lVar43;
    iVar60 = iVar57;
    if (iVar57 < param_4) {
      uVar55 = param_4 - iVar57;
      uVar30 = (uVar55 - 8 >> 3) + 1;
      uVar33 = uVar30 * 8;
      iVar60 = param_4;
      if (6 < (uint)((param_4 + -1) - iVar57)) {
        iVar65 = 0;
        iVar68 = 0;
        iVar69 = 0;
        iVar71 = 0;
        psVar35 = param_1 + lVar87 + lVar43 + 3;
        psVar36 = param_1 + lVar87 + lVar43 + 2;
        psVar42 = param_1 + lVar87 + lVar43 + 1;
        uVar54 = 0;
        psVar52 = psVar50;
        iVar56 = iVar65;
        iVar58 = iVar68;
        iVar72 = iVar65;
        iVar74 = iVar68;
        iVar64 = iVar65;
        iVar81 = iVar68;
        iVar61 = iVar69;
        iVar63 = iVar71;
        iVar75 = iVar69;
        iVar76 = iVar71;
        iVar82 = iVar69;
        iVar83 = iVar71;
        do {
          sVar32 = *psVar52;
          uVar54 = uVar54 + 1;
          psVar2 = psVar52 + lVar86;
          sVar77 = *psVar42;
          psVar3 = psVar52 + lVar86 * 2;
          psVar4 = psVar52 + lVar86 * 3;
          psVar5 = psVar52 + lVar86 * 4;
          psVar6 = psVar52 + lVar86 * 5;
          psVar7 = psVar52 + lVar86 * 6;
          psVar8 = psVar52 + lVar86 * 7;
          psVar52 = psVar52 + lVar86 * 8;
          psVar9 = psVar42 + lVar86;
          psVar10 = psVar42 + lVar86 * 2;
          psVar11 = psVar42 + lVar86 * 3;
          psVar12 = psVar42 + lVar86 * 4;
          psVar13 = psVar42 + lVar86 * 5;
          iVar65 = (int)*psVar5 + sVar32 + iVar65;
          iVar68 = (int)*psVar6 + *psVar2 + iVar68;
          iVar69 = (int)*psVar7 + *psVar3 + iVar69;
          iVar71 = (int)*psVar8 + *psVar4 + iVar71;
          psVar2 = psVar42 + lVar86 * 6;
          psVar3 = psVar42 + lVar86 * 7;
          psVar42 = psVar42 + lVar86 * 8;
          sVar32 = *psVar36;
          psVar4 = psVar36 + lVar86;
          sVar84 = *psVar35;
          psVar5 = psVar36 + lVar86 * 2;
          psVar6 = psVar36 + lVar86 * 3;
          iVar64 = (int)*psVar12 + sVar77 + iVar64;
          iVar81 = (int)*psVar13 + *psVar9 + iVar81;
          iVar82 = (int)*psVar2 + *psVar10 + iVar82;
          iVar83 = (int)*psVar3 + *psVar11 + iVar83;
          psVar2 = psVar36 + lVar86 * 4;
          psVar3 = psVar36 + lVar86 * 5;
          psVar7 = psVar36 + lVar86 * 6;
          psVar8 = psVar36 + lVar86 * 7;
          psVar36 = psVar36 + lVar86 * 8;
          psVar9 = psVar35 + lVar86;
          psVar10 = psVar35 + lVar86 * 2;
          psVar11 = psVar35 + lVar86 * 3;
          psVar12 = psVar35 + lVar86 * 4;
          psVar13 = psVar35 + lVar86 * 5;
          iVar72 = (int)*psVar2 + sVar32 + iVar72;
          iVar74 = (int)*psVar3 + *psVar4 + iVar74;
          iVar75 = (int)*psVar7 + *psVar5 + iVar75;
          iVar76 = (int)*psVar8 + *psVar6 + iVar76;
          psVar2 = psVar35 + lVar86 * 6;
          psVar3 = psVar35 + lVar86 * 7;
          psVar35 = psVar35 + lVar86 * 8;
          iVar56 = (int)*psVar12 + sVar84 + iVar56;
          iVar58 = (int)*psVar13 + *psVar9 + iVar58;
          iVar61 = (int)*psVar2 + *psVar10 + iVar61;
          iVar63 = (int)*psVar3 + *psVar11 + iVar63;
        } while (uVar54 < uVar30);
        psVar50 = (short *)((long)psVar50 + (ulong)uVar33 * lVar86 * 2);
        iVar57 = iVar57 + uVar33;
        iVar45 = iVar45 + iVar56 + iVar58 + iVar61 + iVar63;
        iVar46 = iVar46 + iVar72 + iVar74 + iVar75 + iVar76;
        iVar73 = iVar73 + iVar64 + iVar81 + iVar82 + iVar83;
        iVar59 = iVar59 + iVar65 + iVar68 + iVar69 + iVar71;
        if (uVar33 == uVar55) goto LAB_003a8f28;
      }
      iVar59 = iVar59 + *psVar50;
      iVar73 = iVar73 + psVar50[1];
      iVar46 = iVar46 + psVar50[2];
      iVar45 = iVar45 + psVar50[3];
      if (iVar57 + 1 < param_4) {
        iVar59 = iVar59 + psVar50[lVar86];
        iVar73 = iVar73 + psVar50[lVar86 + 1];
        iVar46 = iVar46 + psVar50[lVar86 + 2];
        iVar45 = iVar45 + psVar50[lVar86 + 3];
        if (iVar57 + 2 < param_4) {
          iVar59 = iVar59 + psVar50[lVar86 * 2];
          iVar73 = iVar73 + psVar50[lVar86 * 2 + 1];
          iVar46 = iVar46 + psVar50[lVar86 * 2 + 2];
          iVar45 = iVar45 + psVar50[lVar86 * 2 + 3];
          if (iVar57 + 3 < param_4) {
            iVar59 = iVar59 + psVar50[lVar86 * 3];
            iVar73 = iVar73 + psVar50[lVar86 * 3 + 1];
            iVar46 = iVar46 + psVar50[lVar86 * 3 + 2];
            iVar45 = iVar45 + psVar50[lVar86 * 3 + 3];
            if (iVar57 + 4 < param_4) {
              iVar59 = iVar59 + psVar50[lVar86 * 4];
              iVar73 = iVar73 + psVar50[lVar86 * 4 + 1];
              iVar46 = iVar46 + psVar50[lVar86 * 4 + 2];
              iVar45 = iVar45 + psVar50[lVar86 * 4 + 3];
              if (iVar57 + 5 < param_4) {
                iVar59 = iVar59 + psVar50[lVar86 * 5];
                iVar73 = iVar73 + psVar50[lVar86 * 5 + 1];
                iVar46 = iVar46 + psVar50[lVar86 * 5 + 2];
                iVar45 = iVar45 + psVar50[lVar86 * 5 + 3];
                if (iVar57 + 6 < param_4) {
                  iVar59 = iVar59 + psVar50[lVar86 * 6];
                  iVar73 = iVar73 + psVar50[lVar86 * 6 + 1];
                  iVar46 = iVar46 + psVar50[lVar86 * 6 + 2];
                  iVar45 = iVar45 + psVar50[lVar86 * 6 + 3];
                }
              }
            }
          }
        }
      }
    }
LAB_003a8f28:
    iVar57 = iVar60;
    *(ulong *)(piVar38 + 2) = CONCAT44(iVar45,iVar46);
    *(ulong *)piVar38 = CONCAT44(iVar73,iVar59);
    if (lVar49 == lVar40 + 4 + (ulong)((iVar39 - 1U) - iVar44 >> 2) * 4) {
      return param_4;
    }
    piVar38 = piVar38 + 4;
    lVar43 = lVar49;
    lVar49 = lVar49 + 4;
  } while( true );
}


==================================================================

### FUNC 003a9bd8 (356 bytes) name=FUN_003a9bd8

undefined8
FUN_003a9bd8(float *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  float *pfVar1;
  uint uVar2;
  long lVar3;
  float *pfVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  float *pfVar8;
  long lVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            pfVar4 = param_1 + lVar7;
            lVar3 = lVar7 * 4;
            lVar7 = lVar7 + 1;
                    /* try { // try from 003a9c18 to 004a9d23 has its CatchHandler @ 003a97ac */
            dVar11 = (double)(*pfVar4 - *(float *)(param_2 + lVar3));
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (float *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar6;
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar11 = 0.0;
    uVar2 = param_5 - 4U >> 2;
    pfVar4 = (float *)(param_2 + 4);
    pfVar8 = param_1;
    do {
      pfVar1 = pfVar4 + 4;
      dVar11 = dVar11 + (double)(pfVar8[1] - *pfVar4) * (double)(pfVar8[1] - *pfVar4) +
                        (double)(*pfVar8 - pfVar4[-1]) * (double)(*pfVar8 - pfVar4[-1]) +
                        (double)(pfVar8[2] - pfVar4[1]) * (double)(pfVar8[2] - pfVar4[1]) +
                        (double)(pfVar8[3] - pfVar4[2]) * (double)(pfVar8[3] - pfVar4[2]);
      pfVar4 = pfVar1;
      pfVar8 = pfVar8 + 4;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar10 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar5 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
      pfVar4 = (float *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 4;
      dVar12 = (double)(*(float *)((long)param_1 + lVar7) - *pfVar4);
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 4);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 003a9d3c (372 bytes) name=FUN_003a9d3c

undefined8
FUN_003a9d3c(float *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  float *pfVar1;
  uint uVar2;
  long lVar3;
  float *pfVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  float *pfVar8;
  long lVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  
  dVar11 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            pfVar4 = param_1 + lVar7;
            lVar3 = lVar7 * 4;
            lVar7 = lVar7 + 1;
            dVar11 = dVar11 + (double)ABS(*pfVar4 - *(float *)(param_2 + lVar3));
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (float *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar11;
    return 0;
  }
  param_5 = param_5 * iVar6;
  if (param_5 < 4) {
    dVar12 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar12 = 0.0;
    uVar2 = param_5 - 4U >> 2;
    pfVar4 = (float *)(param_2 + 4);
    pfVar8 = param_1;
    do {
      pfVar1 = pfVar4 + 4;
                    /* try { // try from 003a9de4 to 004a9de7 has its CatchHandler @ 003aa014 */
      dVar12 = dVar12 + ABS((double)(*pfVar8 - pfVar4[-1])) + ABS((double)(pfVar8[1] - *pfVar4)) +
                        ABS((double)(pfVar8[2] - pfVar4[1])) + ABS((double)(pfVar8[3] - pfVar4[2]));
      pfVar4 = pfVar1;
      pfVar8 = pfVar8 + 4;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar10 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar5 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
                    /* try { // try from 003a9e74 to 004a9e93 has its CatchHandler @ 003a9f78 */
      pfVar4 = (float *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 4;
      dVar12 = dVar12 + ABS((double)(*(float *)((long)param_1 + lVar7) - *pfVar4));
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 4);
  }
  *param_4 = dVar11 + dVar12;
  return 0;
}


==================================================================

### FUNC 003a9eb0 (308 bytes) name=FUN_003a9eb0

undefined8 FUN_003a9eb0(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  float *pfVar4;
  
  dVar8 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar2 = lVar6 * 4;
            lVar6 = lVar6 + 1;
            dVar8 = dVar8 + (double)ABS(*(float *)(param_1 + lVar2));
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar8;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
                    /* catch() { ... } // from try @ 003a9f50 with catch @ 003a9fdc
                       catch() { ... } // from try @ 003a9f70 with catch @ 003a9fdc */
    dVar9 = 0.0;
    iVar5 = 0;
                    /* catch() { ... } // from try @ 003a999c with catch @ 003a9fe0 */
  }
  else {
    dVar9 = 0.0;
    uVar1 = param_4 - 4U >> 2;
    pfVar3 = (float *)(param_1 + 4);
    do {
      pfVar4 = pfVar3 + 4;
                    /* try { // try from 003a9f50 to 004a9f53 has its CatchHandler @ 003a9fdc */
                    /* try { // try from 003a9f5c to 004a9f5f has its CatchHandler @ 003a9fd4 */
                    /* try { // try from 003a9f70 to 004a9f73 has its CatchHandler @ 003a9fdc */
                    /* catch() { ... } // from try @ 003a9e74 with catch @ 003a9f78 */
      dVar9 = dVar9 + (double)ABS(pfVar3[-1]) + (double)ABS(*pfVar3) + (double)ABS(pfVar3[1]) +
                      (double)ABS(pfVar3[2]);
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 + (ulong)uVar1 * 0x10 + 0x14));
    iVar5 = (uVar1 + 1) * 4;
  }
  if (iVar5 < param_4) {
    pfVar3 = (float *)(param_1 + (long)iVar5 * 4);
    do {
      pfVar4 = pfVar3 + 1;
      dVar9 = dVar9 + (double)ABS(*pfVar3);
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 +
                                ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 4));
  }
                    /* try { // try from 003a9fd0 to 004a9fd3 has its CatchHandler @ 003a97ac */
                    /* catch() { ... } // from try @ 003a9a74 with catch @ 003a9fd4
                       catch() { ... } // from try @ 003a9f5c with catch @ 003a9fd4 */
  *param_3 = dVar8 + dVar9;
  return 0;
}


==================================================================

### FUNC 003a9fe4 (288 bytes) name=FUN_003a9fe4

undefined8 FUN_003a9fe4(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  float *pfVar4;
  
  dVar9 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
                    /* catch() { ... } // from try @ 003a98b8 with catch @ 003aa004 */
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar2 = lVar6 * 4;
                    /* catch() { ... } // from try @ 003a9864 with catch @ 003aa014
                       catch() { ... } // from try @ 003a98c0 with catch @ 003aa014
                       catch() { ... } // from try @ 003a9ab0 with catch @ 003aa014
                       catch() { ... } // from try @ 003a9af4 with catch @ 003aa014
                       catch() { ... } // from try @ 003a9de4 with catch @ 003aa014 */
            lVar6 = lVar6 + 1;
                    /* catch() { ... } // from try @ 003a9aec with catch @ 003aa01c */
            dVar8 = (double)*(float *)(param_1 + lVar2);
            dVar9 = dVar9 + dVar8 * dVar8;
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2);
                    /* catch() { ... } // from try @ 003aa070 with catch @ 003aa030
                       catch() { ... } // from try @ 003aa608 with catch @ 003aa030
                       catch() { ... } // from try @ 003aabf8 with catch @ 003aa030
                       catch() { ... } // from try @ 003aacd8 with catch @ 003aa030 */
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar9;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar8 = 0.0;
    iVar5 = 0;
  }
  else {
    dVar8 = 0.0;
    uVar1 = param_4 - 4U >> 2;
    pfVar3 = (float *)(param_1 + 4);
    do {
                    /* try { // try from 003aa070 to 004aa08f has its CatchHandler @ 003aa030 */
      pfVar4 = pfVar3 + 4;
                    /* try { // try from 003aa094 to 004aa0b3 has its CatchHandler @ 003aacec */
      dVar8 = dVar8 + (double)*pfVar3 * (double)*pfVar3 + (double)pfVar3[-1] * (double)pfVar3[-1] +
                      (double)pfVar3[1] * (double)pfVar3[1] + (double)pfVar3[2] * (double)pfVar3[2];
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 + (ulong)uVar1 * 0x10 + 0x14));
    iVar5 = (uVar1 + 1) * 4;
  }
                    /* try { // try from 003aa0b8 to 004aa0d7 has its CatchHandler @ 003aad54 */
  if (iVar5 < param_4) {
    pfVar3 = (float *)(param_1 + (long)iVar5 * 4);
    do {
      pfVar4 = pfVar3 + 1;
                    /* try { // try from 003aa0dc to 004aa0fb has its CatchHandler @ 003aad4c */
      dVar8 = dVar8 + (double)*pfVar3 * (double)*pfVar3;
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 +
                                ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 4));
  }
  *param_3 = dVar9 + dVar8;
  return 0;
}


==================================================================

### FUNC 003aa104 (188 bytes) name=FUN_003aa104

undefined8
FUN_003aa104(long param_1,long param_2,long param_3,float *param_4,int param_5,ulong param_6)

{
  long lVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  
  fVar7 = *param_4;
  iVar3 = (int)param_6;
  if (param_3 == 0) {
    fVar8 = 0.0;
    lVar5 = 0;
    fVar9 = fVar8;
    if (0 < param_5 * iVar3) {
      do {
        lVar4 = lVar5 * 4;
        lVar1 = lVar5 * 4;
        lVar5 = lVar5 + 1;
                    /* try { // try from 003aa194 to 004aa197 has its CatchHandler @ 003aad44 */
        fVar8 = ABS(*(float *)(param_1 + lVar4) - *(float *)(param_2 + lVar1));
        if (fVar8 <= fVar9) {
          fVar8 = fVar9;
        }
        fVar9 = fVar8;
      } while ((int)lVar5 < param_5 * iVar3);
    }
    if (fVar7 < fVar8) {
      fVar7 = fVar8;
    }
  }
  else if (0 < param_5) {
    uVar6 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
    lVar5 = 0;
    do {
      if ((*(char *)(param_3 + lVar5) != '\0') && (0 < iVar3)) {
        lVar4 = 0;
        fVar8 = fVar7;
        do {
          lVar1 = lVar4 * 4;
          lVar2 = lVar4 * 4;
          lVar4 = lVar4 + 1;
          fVar7 = ABS(*(float *)(param_1 + lVar1) - *(float *)(param_2 + lVar2));
          if (fVar7 <= fVar8) {
            fVar7 = fVar8;
          }
          fVar8 = fVar7;
        } while ((int)lVar4 < iVar3);
      }
      lVar5 = lVar5 + 1;
      param_1 = param_1 + uVar6;
      param_2 = param_2 + uVar6;
    } while ((int)lVar5 < param_5);
  }
  *param_4 = fVar7;
  return 0;
}


==================================================================

### FUNC 003aa1c0 (624 bytes) name=FUN_003aa1c0

void FUN_003aa1c0(byte *param_1,long param_2,long param_3,int param_4,int param_5,long param_6,
                 long param_7)

{
  byte *pbVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  byte *pbVar6;
  long lVar7;
  byte *pbVar8;
  byte *pbVar9;
  long lVar10;
  float fVar11;
  float fVar12;
  
  fVar12 = DAT_003aa430;
                    /* try { // try from 003aa1cc to 004aa1cf has its CatchHandler @ 003aad3c */
  if (param_7 == 0) {
    if (0 < param_4) {
                    /* try { // try from 003aa314 to 004aa317 has its CatchHandler @ 003aad2c */
      uVar3 = param_5 - 4U >> 2;
                    /* try { // try from 003aa31c to 004aa363 has its CatchHandler @ 003aad3c */
      iVar2 = (uVar3 + 1) * 4;
      pbVar6 = (byte *)(param_2 + 1);
      if (param_5 + -3 < 1) {
        iVar2 = 0;
      }
      lVar10 = 0;
      do {
        fVar12 = 0.0;
        if (0 < param_5 + -3) {
          pbVar8 = pbVar6;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
                    /* try { // try from 003aa388 to 004aa38b has its CatchHandler @ 003aad24 */
                    /* try { // try from 003aa3a8 to 004aa3ab has its CatchHandler @ 003aacf4 */
                    /* try { // try from 003aa3b0 to 004aa3b3 has its CatchHandler @ 003aad24 */
            fVar12 = fVar12 + ABS((float)(int)((uint)*pbVar9 - (uint)pbVar8[-1])) +
                              ABS((float)(int)((uint)pbVar9[1] - (uint)*pbVar8)) +
                              ABS((float)(int)((uint)pbVar9[2] - (uint)pbVar8[1])) +
                              ABS((float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]));
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar6 + (ulong)uVar3 * 4 + 4);
        }
        if (iVar2 < param_5) {
          lVar7 = 0;
          do {
            lVar4 = lVar7 + iVar2;
            lVar5 = lVar7 + (long)iVar2 + -1;
            lVar7 = lVar7 + 1;
            fVar12 = fVar12 + ABS((float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]));
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar2) + 1);
        }
        *(float *)(param_6 + lVar10 * 4) = fVar12;
        lVar10 = lVar10 + 1;
        pbVar6 = pbVar6 + param_3;
      } while ((int)lVar10 < param_4);
                    /* try { // try from 003aa424 to 004aa427 has its CatchHandler @ 003aad3c */
      return;
    }
  }
  else if (0 < param_4) {
    uVar3 = param_5 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    pbVar6 = (byte *)(param_2 + 1);
    if (param_5 + -3 < 1) {
      iVar2 = 0;
    }
    lVar10 = 0;
    do {
      fVar11 = fVar12;
      if (*(char *)(param_7 + lVar10) != '\0') {
                    /* try { // try from 003aa228 to 004aa22b has its CatchHandler @ 003aacdc */
        fVar11 = 0.0;
                    /* try { // try from 003aa230 to 004aa25b has its CatchHandler @ 003aad3c */
        if (0 < param_5 + -3) {
          pbVar8 = pbVar6;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
                    /* try { // try from 003aa288 to 004aa28b has its CatchHandler @ 003aac40 */
                    /* try { // try from 003aa290 to 004aa2c3 has its CatchHandler @ 003aad3c */
            fVar11 = fVar11 + ABS((float)(int)((uint)*pbVar9 - (uint)pbVar8[-1])) +
                              ABS((float)(int)((uint)pbVar9[1] - (uint)*pbVar8)) +
                              ABS((float)(int)((uint)pbVar9[2] - (uint)pbVar8[1])) +
                              ABS((float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]));
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar6 + (ulong)uVar3 * 4 + 4);
        }
        if (iVar2 < param_5) {
          lVar7 = 0;
          do {
            lVar4 = lVar7 + iVar2;
            lVar5 = lVar7 + (long)iVar2 + -1;
            lVar7 = lVar7 + 1;
            fVar11 = fVar11 + ABS((float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]));
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar2) + 1);
        }
      }
      *(float *)(param_6 + lVar10 * 4) = fVar11;
      lVar10 = lVar10 + 1;
      pbVar6 = pbVar6 + param_3;
    } while ((int)lVar10 < param_4);
  }
  return;
}


==================================================================

### FUNC 003aa434 (528 bytes) name=FUN_003aa434

void FUN_003aa434(float *param_1,long param_2,ulong param_3,int param_4,int param_5,long param_6,
                 long param_7)

{
  float *pfVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  float *pfVar6;
  float *pfVar7;
  long lVar8;
  float *pfVar9;
  long lVar10;
  ulong uVar11;
  float fVar12;
  float fVar13;
  
  fVar13 = DAT_003aa644;
  if (param_7 == 0) {
    if (0 < param_4) {
      uVar3 = param_5 - 4U >> 2;
      uVar2 = (uVar3 + 1) * 4;
      pfVar6 = (float *)(param_2 + 4);
      if (param_5 + -3 < 1) {
        uVar2 = 0;
      }
      uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      lVar10 = 0;
      do {
                    /* try { // try from 003aa594 to 004aa597 has its CatchHandler @ 003aacec */
        fVar13 = 0.0;
        if (0 < param_5 + -3) {
          pfVar7 = pfVar6;
          pfVar9 = param_1;
          do {
            pfVar1 = pfVar7 + 4;
            fVar13 = fVar13 + ABS(*pfVar9 - pfVar7[-1]) + ABS(pfVar9[1] - *pfVar7) +
                              ABS(pfVar9[2] - pfVar7[1]) + ABS(pfVar9[3] - pfVar7[2]);
            pfVar7 = pfVar1;
            pfVar9 = pfVar9 + 4;
          } while (pfVar1 != pfVar6 + (ulong)uVar3 * 4 + 4);
        }
        if ((int)uVar2 < param_5) {
                    /* try { // try from 003aa608 to 004aa69b has its CatchHandler @ 003aa030 */
          lVar8 = 0;
          do {
            lVar4 = lVar8 + uVar11;
            lVar5 = lVar8 + (uVar11 - 4);
            lVar8 = lVar8 + 4;
            fVar13 = fVar13 + ABS(*(float *)((long)param_1 + lVar4) -
                                  *(float *)((long)pfVar6 + lVar5));
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar2) + 1) * 4);
        }
        *(float *)(param_6 + lVar10 * 4) = fVar13;
        lVar10 = lVar10 + 1;
        pfVar6 = pfVar6 + (param_3 >> 2);
      } while ((int)lVar10 < param_4);
      return;
    }
  }
  else if (0 < param_4) {
    uVar3 = param_5 - 4U >> 2;
    uVar2 = (uVar3 + 1) * 4;
    if (param_5 + -3 < 1) {
      uVar2 = 0;
    }
    pfVar6 = (float *)(param_2 + 4);
    uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    lVar10 = 0;
    do {
      fVar12 = fVar13;
      if (*(char *)(param_7 + lVar10) != '\0') {
        fVar12 = 0.0;
        if (0 < param_5 + -3) {
                    /* try { // try from 003aa4ac to 004aa4af has its CatchHandler @ 003aad4c */
          pfVar7 = pfVar6;
          pfVar9 = param_1;
          do {
            pfVar1 = pfVar7 + 4;
            fVar12 = fVar12 + ABS(*pfVar9 - pfVar7[-1]) + ABS(pfVar9[1] - *pfVar7) +
                              ABS(pfVar9[2] - pfVar7[1]) + ABS(pfVar9[3] - pfVar7[2]);
            pfVar7 = pfVar1;
            pfVar9 = pfVar9 + 4;
          } while (pfVar1 != pfVar6 + (ulong)uVar3 * 4 + 4);
        }
        if ((int)uVar2 < param_5) {
          lVar8 = 0;
          do {
            lVar4 = lVar8 + uVar11;
            lVar5 = lVar8 + (uVar11 - 4);
                    /* try { // try from 003aa520 to 004aa523 has its CatchHandler @ 003aad54 */
            lVar8 = lVar8 + 4;
            fVar12 = fVar12 + ABS(*(float *)((long)param_1 + lVar4) -
                                  *(float *)((long)pfVar6 + lVar5));
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar2) + 1) * 4);
        }
      }
      *(float *)(param_6 + lVar10 * 4) = fVar12;
      lVar10 = lVar10 + 1;
      pfVar6 = pfVar6 + (param_3 >> 2);
    } while ((int)lVar10 < param_4);
  }
  return;
}


==================================================================

### FUNC 003aa648 (616 bytes) name=FUN_003aa648

void FUN_003aa648(long param_1,int *param_2)

{
  long lVar1;
  int iVar2;
  ulong uVar3;
  int *piVar4;
  long lVar5;
  int iVar6;
  long lVar7;
  int iVar8;
  int *piVar9;
  long lVar10;
  long lVar11;
  int iVar12;
  long lVar13;
  long lVar14;
  ulong uVar15;
  long lVar16;
  int iVar17;
  int aiStack_420 [264];
  
  lVar13 = *(long *)(param_1 + 0x10);
  piVar4 = aiStack_420;
  uVar15 = (ulong)*(int *)(lVar13 + 8);
  if (uVar15 < 0x109) {
    iVar17 = *param_2;
    if (iVar17 < param_2[1]) goto LAB_003aa6c0;
  }
  else {
    uVar3 = uVar15 << 2;
    if (0x1fc0000000000000 < uVar15) {
      uVar3 = 0xffffffffffffffff;
    }
    piVar4 = operator_new__(uVar3);
    iVar17 = *param_2;
                    /* try { // try from 003aa6a4 to 004aa6a7 has its CatchHandler @ 003aacec */
                    /* try { // try from 003aa6b0 to 004aa6b3 has its CatchHandler @ 003aad54 */
    if (iVar17 < param_2[1]) {
      lVar13 = *(long *)(param_1 + 0x10);
                    /* try { // try from 003aa6bc to 004aa6bf has its CatchHandler @ 003aad4c */
LAB_003aa6c0:
      lVar16 = (long)iVar17;
      do {
                    /* try { // try from 003aa6c8 to 004aa6cb has its CatchHandler @ 003aad3c */
        piVar9 = piVar4;
        if (*(int *)(param_1 + 0x30) < 1) {
          piVar9 = (int *)(*(long *)(*(long *)(param_1 + 0x18) + 0x10) +
                          lVar16 * **(long **)(*(long *)(param_1 + 0x18) + 0x48));
        }
        lVar10 = *(long *)(*(long *)(param_1 + 0x28) + 0x10);
        if (lVar10 != 0) {
          lVar10 = lVar10 + lVar16 * **(long **)(*(long *)(param_1 + 0x28) + 0x48);
        }
        (**(code **)(param_1 + 0x38))
                  (*(long *)(*(long *)(param_1 + 8) + 0x10) +
                   lVar16 * **(long **)(*(long *)(param_1 + 8) + 0x48),
                   *(undefined8 *)(lVar13 + 0x10),*(undefined8 *)(lVar13 + 0x50),
                   *(undefined4 *)(lVar13 + 8),*(undefined4 *)(lVar13 + 0xc),piVar9,lVar10);
        iVar8 = *(int *)(param_1 + 0x30);
        if (0 < iVar8) {
          lVar10 = *(long *)(param_1 + 0x10);
          iVar6 = *(int *)(lVar10 + 8);
          lVar14 = *(long *)(*(long *)(param_1 + 0x20) + 0x10) +
                   lVar16 * **(long **)(*(long *)(param_1 + 0x20) + 0x48);
          lVar13 = *(long *)(*(long *)(param_1 + 0x18) + 0x10) +
                   lVar16 * **(long **)(*(long *)(param_1 + 0x18) + 0x48);
          if (0 < iVar6) {
            iVar12 = 0;
            piVar9 = piVar4;
            do {
              iVar2 = *piVar9;
              if (iVar2 < *(int *)(lVar13 + (long)iVar8 * 4 + -4)) {
                iVar8 = iVar8 + -2;
                if (iVar8 < 0) {
                  lVar11 = (long)iVar8;
                }
                else {
                  lVar11 = (long)iVar8;
                  lVar5 = lVar11 * 4;
                  if (iVar2 < *(int *)(lVar13 + lVar5)) {
                    lVar1 = lVar14 + lVar5;
                    lVar7 = 0;
                    do {
                      iVar8 = iVar8 + -1;
                      *(undefined4 *)(lVar1 + lVar7 + 4) = *(undefined4 *)(lVar1 + lVar7);
                      *(undefined4 *)(lVar13 + lVar5 + lVar7 + 4) =
                           *(undefined4 *)(lVar13 + lVar5 + lVar7);
                      if (iVar8 == -1) {
                        lVar11 = -1;
                        break;
                      }
                      lVar11 = lVar11 + -1;
                      lVar7 = lVar7 + -4;
                    } while (iVar2 < *(int *)(lVar13 + lVar11 * 4));
                  }
                }
                lVar11 = (lVar11 + 1) * 4;
                *(int *)(lVar14 + lVar11) = *(int *)(param_1 + 0x34) + iVar12;
                *(int *)(lVar13 + lVar11) = iVar2;
                iVar6 = *(int *)(lVar10 + 8);
              }
              iVar12 = iVar12 + 1;
              piVar9 = piVar9 + 1;
              if (iVar6 <= iVar12) break;
              iVar8 = *(int *)(param_1 + 0x30);
            } while( true );
          }
        }
        iVar17 = iVar17 + 1;
        lVar16 = lVar16 + 1;
        if (param_2[1] <= iVar17) break;
        lVar13 = *(long *)(param_1 + 0x10);
      } while( true );
    }
    if ((piVar4 != aiStack_420) && (piVar4 != (int *)0x0)) {
      operator_delete__(piVar4);
    }
  }
  return;
}


==================================================================

### FUNC 003aa8d0 (592 bytes) name=FUN_003aa8d0

void FUN_003aa8d0(byte *param_1,long param_2,long param_3,int param_4,int param_5,long param_6,
                 long param_7)

{
  byte *pbVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  byte *pbVar6;
  long lVar7;
  byte *pbVar8;
  byte *pbVar9;
  long lVar10;
  float fVar11;
  float fVar12;
  
  fVar12 = DAT_003aab20;
  if (param_7 == 0) {
    if (0 < param_4) {
      uVar3 = param_5 - 4U >> 2;
      iVar2 = (uVar3 + 1) * 4;
      pbVar6 = (byte *)(param_2 + 1);
      if (param_5 + -3 < 1) {
        iVar2 = 0;
      }
      lVar10 = 0;
      do {
        fVar12 = 0.0;
        if (0 < param_5 + -3) {
          pbVar8 = pbVar6;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
            fVar12 = fVar12 + (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) *
                              (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) +
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) *
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) +
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) *
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) +
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]) *
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]);
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar6 + (ulong)uVar3 * 4 + 4);
        }
        if (iVar2 < param_5) {
          lVar7 = 0;
          do {
            lVar4 = lVar7 + iVar2;
            lVar5 = lVar7 + (long)iVar2 + -1;
            lVar7 = lVar7 + 1;
            fVar12 = fVar12 + (float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]) *
                              (float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]);
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar2) + 1);
        }
        *(float *)(param_6 + lVar10 * 4) = fVar12;
        lVar10 = lVar10 + 1;
        pbVar6 = pbVar6 + param_3;
      } while ((int)lVar10 < param_4);
      return;
    }
  }
  else if (0 < param_4) {
    uVar3 = param_5 - 4U >> 2;
    iVar2 = (uVar3 + 1) * 4;
    pbVar6 = (byte *)(param_2 + 1);
    if (param_5 + -3 < 1) {
      iVar2 = 0;
    }
    lVar10 = 0;
    do {
      fVar11 = fVar12;
      if (*(char *)(param_7 + lVar10) != '\0') {
        fVar11 = 0.0;
        if (0 < param_5 + -3) {
          pbVar8 = pbVar6;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
            fVar11 = fVar11 + (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) *
                              (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) +
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) *
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) +
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) *
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) +
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]) *
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]);
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar6 + (ulong)uVar3 * 4 + 4);
        }
        if (iVar2 < param_5) {
          lVar7 = 0;
          do {
            lVar4 = lVar7 + iVar2;
            lVar5 = lVar7 + (long)iVar2 + -1;
            lVar7 = lVar7 + 1;
            fVar11 = fVar11 + (float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]) *
                              (float)(int)((uint)param_1[lVar4] - (uint)pbVar6[lVar5]);
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar2) + 1);
        }
      }
      *(float *)(param_6 + lVar10 * 4) = fVar11;
      lVar10 = lVar10 + 1;
      pbVar6 = pbVar6 + param_3;
    } while ((int)lVar10 < param_4);
  }
  return;
}


==================================================================

### FUNC 003aab24 (536 bytes) name=FUN_003aab24

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003aab24(float *param_1,long param_2,ulong param_3,int param_4,int param_5,long param_6,
                 long param_7)

{
  float *pfVar1;
  uint uVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  float *pfVar6;
  float *pfVar7;
  long lVar8;
  float *pfVar9;
  long lVar10;
  ulong uVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  
  fVar14 = _LAB_003aad3c;
  if (param_7 == 0) {
                    /* catch() { ... } // from try @ 003aa288 with catch @ 003aac40 */
    if (0 < param_4) {
      uVar3 = param_5 - 4U >> 2;
      uVar2 = (uVar3 + 1) * 4;
      pfVar6 = (float *)(param_2 + 4);
      if (param_5 + -3 < 1) {
        uVar2 = 0;
      }
      uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
      lVar10 = 0;
      do {
        fVar14 = 0.0;
        if (0 < param_5 + -3) {
          pfVar7 = pfVar6;
          pfVar9 = param_1;
          do {
            pfVar1 = pfVar7 + 4;
                    /* try { // try from 003aacd8 to 004aacdb has its CatchHandler @ 003aa030 */
                    /* catch() { ... } // from try @ 003aa228 with catch @ 003aacdc */
                    /* catch() { ... } // from try @ 003aa094 with catch @ 003aacec
                       catch() { ... } // from try @ 003aa594 with catch @ 003aacec
                       catch() { ... } // from try @ 003aa6a4 with catch @ 003aacec
                       catch() { ... } // from try @ 003aac08 with catch @ 003aacec */
            fVar14 = fVar14 + (pfVar9[1] - *pfVar7) * (pfVar9[1] - *pfVar7) +
                              (*pfVar9 - pfVar7[-1]) * (*pfVar9 - pfVar7[-1]) +
                              (pfVar9[2] - pfVar7[1]) * (pfVar9[2] - pfVar7[1]) +
                              (pfVar9[3] - pfVar7[2]) * (pfVar9[3] - pfVar7[2]);
            pfVar7 = pfVar1;
            pfVar9 = pfVar9 + 4;
                    /* catch() { ... } // from try @ 003aa3a8 with catch @ 003aacf4 */
          } while (pfVar1 != pfVar6 + (ulong)uVar3 * 4 + 4);
        }
        if ((int)uVar2 < param_5) {
          lVar8 = 0;
          do {
            lVar4 = lVar8 + uVar11;
            lVar5 = lVar8 + (uVar11 - 4);
            lVar8 = lVar8 + 4;
            fVar13 = *(float *)((long)param_1 + lVar4) - *(float *)((long)pfVar6 + lVar5);
            fVar14 = fVar14 + fVar13 * fVar13;
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar2) + 1) * 4);
        }
                    /* catch() { ... } // from try @ 003aa388 with catch @ 003aad24
                       catch() { ... } // from try @ 003aa3b0 with catch @ 003aad24 */
        *(float *)(param_6 + lVar10 * 4) = fVar14;
        lVar10 = lVar10 + 1;
                    /* catch() { ... } // from try @ 003aa314 with catch @ 003aad2c */
        pfVar6 = pfVar6 + (param_3 >> 2);
      } while ((int)lVar10 < param_4);
      return;
    }
  }
  else if (0 < param_4) {
    uVar3 = param_5 - 4U >> 2;
    uVar2 = (uVar3 + 1) * 4;
    if (param_5 + -3 < 1) {
      uVar2 = 0;
    }
    pfVar6 = (float *)(param_2 + 4);
    uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
    lVar10 = 0;
    do {
      fVar13 = fVar14;
      if (*(char *)(param_7 + lVar10) != '\0') {
        fVar13 = 0.0;
        if (0 < param_5 + -3) {
          pfVar7 = pfVar6;
          pfVar9 = param_1;
          do {
            pfVar1 = pfVar7 + 4;
            fVar13 = fVar13 + (pfVar9[1] - *pfVar7) * (pfVar9[1] - *pfVar7) +
                              (*pfVar9 - pfVar7[-1]) * (*pfVar9 - pfVar7[-1]) +
                              (pfVar9[2] - pfVar7[1]) * (pfVar9[2] - pfVar7[1]) +
                              (pfVar9[3] - pfVar7[2]) * (pfVar9[3] - pfVar7[2]);
            pfVar7 = pfVar1;
            pfVar9 = pfVar9 + 4;
                    /* try { // try from 003aabf8 to 004aabfb has its CatchHandler @ 003aa030 */
          } while (pfVar1 != pfVar6 + (ulong)uVar3 * 4 + 4);
        }
        if ((int)uVar2 < param_5) {
                    /* try { // try from 003aac08 to 004aac0b has its CatchHandler @ 003aacec */
          lVar8 = 0;
          do {
            lVar4 = lVar8 + uVar11;
            lVar5 = lVar8 + (uVar11 - 4);
            lVar8 = lVar8 + 4;
                    /* try { // try from 003aac18 to 004aac1b has its CatchHandler @ 003aad54 */
            fVar12 = *(float *)((long)param_1 + lVar4) - *(float *)((long)pfVar6 + lVar5);
            fVar13 = fVar13 + fVar12 * fVar12;
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar2) + 1) * 4);
        }
      }
                    /* try { // try from 003aac28 to 004aac2b has its CatchHandler @ 003aad4c */
      *(float *)(param_6 + lVar10 * 4) = fVar13;
      lVar10 = lVar10 + 1;
      pfVar6 = pfVar6 + (param_3 >> 2);
                    /* try { // try from 003aac38 to 004aac3b has its CatchHandler @ 003aad3c */
    } while ((int)lVar10 < param_4);
  }
  return;
}


==================================================================

### FUNC 003aad40 (3620 bytes) name=FUN_003aad40

void FUN_003aad40(byte *param_1,byte *param_2,long param_3,int param_4,int param_5,int *param_6,
                 long param_7)

{
  int iVar1;
  uint uVar2;
  int *piVar3;
  ulong uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  uint3 uVar8;
  byte *pbVar9;
  byte *pbVar68;
  int *piVar127;
  int iVar128;
  uint uVar129;
  long lVar130;
  uint uVar131;
  long lVar132;
  byte bVar133;
  byte bVar134;
  int iVar135;
  int iVar136;
  int iVar137;
  int iVar138;
  int iVar139;
  byte bVar142;
  byte bVar143;
  int iVar140;
  int iVar141;
  int iVar144;
  int iVar145;
  byte bVar147;
  byte bVar148;
  undefined8 uVar146;
  byte bVar150;
  byte bVar151;
  undefined8 uVar149;
  int iVar152;
  int iVar153;
  byte bVar154;
  byte bVar155;
  byte bVar156;
  byte bVar157;
  byte bVar158;
  int iVar159;
  int iVar161;
  undefined8 uVar160;
  undefined8 uVar162;
  int iVar163;
  int iVar164;
  int iVar165;
  int iVar166;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  int iVar172;
  int iVar173;
  int iVar174;
  int iVar175;
  int iVar176;
  int iVar177;
  int iVar178;
  int iVar179;
  int iVar180;
  int iVar181;
  int iVar182;
  int iVar183;
  int iVar184;
  int iVar185;
  int iVar186;
  int iVar187;
  int iVar188;
  byte *pbVar10;
  byte *pbVar11;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar63;
  byte *pbVar64;
  byte *pbVar65;
  byte *pbVar66;
  byte *pbVar67;
  byte *pbVar69;
  byte *pbVar70;
  byte *pbVar71;
  byte *pbVar72;
  byte *pbVar73;
  byte *pbVar74;
  byte *pbVar75;
  byte *pbVar76;
  byte *pbVar77;
  byte *pbVar78;
  byte *pbVar79;
  byte *pbVar80;
  byte *pbVar81;
  byte *pbVar82;
  byte *pbVar83;
  byte *pbVar84;
  byte *pbVar85;
  byte *pbVar86;
  byte *pbVar87;
  byte *pbVar88;
  byte *pbVar89;
  byte *pbVar90;
  byte *pbVar91;
  byte *pbVar92;
  byte *pbVar93;
  byte *pbVar94;
  byte *pbVar95;
  byte *pbVar96;
  byte *pbVar97;
  byte *pbVar98;
  byte *pbVar99;
  byte *pbVar100;
  byte *pbVar101;
  byte *pbVar102;
  byte *pbVar103;
  byte *pbVar104;
  byte *pbVar105;
  byte *pbVar106;
  byte *pbVar107;
  byte *pbVar108;
  byte *pbVar109;
  byte *pbVar110;
  byte *pbVar111;
  byte *pbVar112;
  byte *pbVar113;
  byte *pbVar114;
  byte *pbVar115;
  byte *pbVar116;
  byte *pbVar117;
  byte *pbVar118;
  byte *pbVar119;
  byte *pbVar120;
  byte *pbVar121;
  byte *pbVar122;
  byte *pbVar123;
  byte *pbVar124;
  byte *pbVar125;
  byte *pbVar126;
  
                    /* catch() { ... } // from try @ 003aa194 with catch @ 003aad44 */
                    /* catch() { ... } // from try @ 003aa0dc with catch @ 003aad4c
                       catch() { ... } // from try @ 003aa4ac with catch @ 003aad4c
                       catch() { ... } // from try @ 003aa6bc with catch @ 003aad4c
                       catch() { ... } // from try @ 003aac28 with catch @ 003aad4c */
                    /* catch() { ... } // from try @ 003aa0b8 with catch @ 003aad54
                       catch() { ... } // from try @ 003aa520 with catch @ 003aad54
                       catch() { ... } // from try @ 003aa6b0 with catch @ 003aad54
                       catch() { ... } // from try @ 003aac18 with catch @ 003aad54 */
  if (param_7 == 0) {
    if (0 < param_4) {
      uVar129 = param_5 - 4U >> 2;
      iVar180 = param_5 + -3;
      uVar6 = (uVar129 - 0xf >> 4) + 1;
      iVar1 = uVar129 + 1;
      piVar3 = param_6 + (ulong)(param_4 - 1) + 1;
      iVar5 = iVar1 * 4;
      lVar132 = 0;
      pbVar126 = param_2;
      if (iVar180 < 1) goto LAB_003abb3c;
LAB_003ab4b4:
      piVar127 = param_6;
      iVar128 = iVar5;
      if (param_5 - 4U < 0x3c) {
        iVar182 = 0;
        iVar181 = 0;
      }
      else {
        iVar183 = 0;
        iVar139 = 0;
        iVar181 = 0;
        iVar182 = 0;
        uVar129 = 0;
        pbVar67 = pbVar126;
        pbVar11 = param_1;
        do {
          bVar133 = *pbVar11;
          pbVar27 = pbVar11 + 1;
          pbVar26 = pbVar11 + 2;
          pbVar24 = pbVar11 + 3;
          bVar142 = pbVar11[4];
          bVar148 = pbVar11[5];
          pbVar23 = pbVar11 + 6;
          pbVar22 = pbVar11 + 7;
          pbVar21 = pbVar11 + 8;
          pbVar17 = pbVar11 + 9;
          pbVar16 = pbVar11 + 10;
          pbVar14 = pbVar11 + 0xb;
          pbVar12 = pbVar11 + 0xc;
          pbVar10 = pbVar11 + 0xd;
          pbVar9 = pbVar11 + 0xe;
          pbVar25 = pbVar11 + 0xf;
          pbVar66 = pbVar11 + 0x10;
          pbVar65 = pbVar11 + 0x11;
          pbVar64 = pbVar11 + 0x12;
          pbVar63 = pbVar11 + 0x13;
          pbVar62 = pbVar11 + 0x14;
          pbVar61 = pbVar11 + 0x15;
          pbVar60 = pbVar11 + 0x16;
          pbVar59 = pbVar11 + 0x17;
          pbVar58 = pbVar11 + 0x18;
          pbVar57 = pbVar11 + 0x19;
          pbVar50 = pbVar11 + 0x1a;
          pbVar56 = pbVar11 + 0x1b;
          pbVar55 = pbVar11 + 0x1c;
          pbVar54 = pbVar11 + 0x1d;
          pbVar53 = pbVar11 + 0x1e;
          pbVar52 = pbVar11 + 0x1f;
          pbVar51 = pbVar11 + 0x20;
          pbVar49 = pbVar11 + 0x21;
          pbVar48 = pbVar11 + 0x22;
          pbVar47 = pbVar11 + 0x23;
          bVar143 = pbVar11[0x24];
          bVar151 = pbVar11[0x25];
          bVar155 = pbVar11[0x26];
          bVar157 = pbVar11[0x27];
          pbVar46 = pbVar11 + 0x28;
          pbVar45 = pbVar11 + 0x29;
          pbVar44 = pbVar11 + 0x2a;
          pbVar43 = pbVar11 + 0x2b;
          pbVar42 = pbVar11 + 0x2c;
          pbVar41 = pbVar11 + 0x2d;
          pbVar40 = pbVar11 + 0x2e;
          pbVar39 = pbVar11 + 0x2f;
          pbVar37 = pbVar11 + 0x30;
          pbVar36 = pbVar11 + 0x31;
          pbVar35 = pbVar11 + 0x32;
          pbVar34 = pbVar11 + 0x33;
          pbVar33 = pbVar11 + 0x34;
          pbVar32 = pbVar11 + 0x35;
          pbVar31 = pbVar11 + 0x36;
          pbVar30 = pbVar11 + 0x37;
          pbVar29 = pbVar11 + 0x38;
          pbVar28 = pbVar11 + 0x39;
          pbVar20 = pbVar11 + 0x3a;
          pbVar19 = pbVar11 + 0x3b;
          pbVar15 = pbVar11 + 0x3c;
          pbVar13 = pbVar11 + 0x3d;
          pbVar38 = pbVar11 + 0x3e;
          pbVar18 = pbVar11 + 0x3f;
          pbVar11 = pbVar11 + 0x40;
          uVar129 = uVar129 + 1;
          bVar134 = *pbVar67;
          pbVar125 = pbVar67 + 1;
          pbVar111 = pbVar67 + 2;
          pbVar118 = pbVar67 + 3;
          pbVar116 = pbVar67 + 4;
          bVar150 = pbVar67[5];
          pbVar115 = pbVar67 + 6;
          pbVar114 = pbVar67 + 7;
          pbVar113 = pbVar67 + 8;
          pbVar112 = pbVar67 + 9;
          pbVar68 = pbVar67 + 10;
          pbVar110 = pbVar67 + 0xb;
          pbVar117 = pbVar67 + 0xc;
          pbVar108 = pbVar67 + 0xd;
          pbVar107 = pbVar67 + 0xe;
          pbVar106 = pbVar67 + 0xf;
          pbVar105 = pbVar67 + 0x10;
          pbVar104 = pbVar67 + 0x11;
          pbVar103 = pbVar67 + 0x12;
          pbVar102 = pbVar67 + 0x13;
          pbVar101 = pbVar67 + 0x14;
          pbVar100 = pbVar67 + 0x15;
          pbVar99 = pbVar67 + 0x16;
          pbVar98 = pbVar67 + 0x17;
          pbVar97 = pbVar67 + 0x18;
          pbVar96 = pbVar67 + 0x19;
          pbVar119 = pbVar67 + 0x1a;
          pbVar89 = pbVar67 + 0x1b;
          pbVar95 = pbVar67 + 0x1c;
          pbVar94 = pbVar67 + 0x1d;
          pbVar109 = pbVar67 + 0x1e;
          pbVar93 = pbVar67 + 0x1f;
          pbVar92 = pbVar67 + 0x20;
          pbVar91 = pbVar67 + 0x21;
          pbVar90 = pbVar67 + 0x22;
          pbVar88 = pbVar67 + 0x23;
          bVar147 = pbVar67[0x24];
          bVar154 = pbVar67[0x25];
          bVar156 = pbVar67[0x26];
          bVar158 = pbVar67[0x27];
          pbVar87 = pbVar67 + 0x28;
          pbVar86 = pbVar67 + 0x29;
          pbVar85 = pbVar67 + 0x2a;
          pbVar84 = pbVar67 + 0x2b;
          pbVar83 = pbVar67 + 0x2c;
          pbVar82 = pbVar67 + 0x2d;
          pbVar81 = pbVar67 + 0x2e;
          pbVar80 = pbVar67 + 0x2f;
          pbVar79 = pbVar67 + 0x30;
          pbVar78 = pbVar67 + 0x31;
          pbVar77 = pbVar67 + 0x32;
          pbVar76 = pbVar67 + 0x33;
          pbVar75 = pbVar67 + 0x34;
          pbVar74 = pbVar67 + 0x35;
          pbVar73 = pbVar67 + 0x36;
          pbVar72 = pbVar67 + 0x37;
          pbVar71 = pbVar67 + 0x38;
          pbVar70 = pbVar67 + 0x39;
          pbVar69 = pbVar67 + 0x3a;
          pbVar120 = pbVar67 + 0x3b;
          pbVar121 = pbVar67 + 0x3c;
          pbVar122 = pbVar67 + 0x3d;
          pbVar123 = pbVar67 + 0x3e;
          pbVar124 = pbVar67 + 0x3f;
          pbVar67 = pbVar67 + 0x40;
                    /* try { // try from 003ab500 to 004ab503 has its CatchHandler @ 003abcf4 */
                    /* try { // try from 003ab508 to 004ab50b has its CatchHandler @ 003abd94 */
          iVar141 = ((CONCAT12(bVar148,CONCAT11(bVar148,*pbVar27)) & 0xff00ff) & 0xffff) -
                    ((CONCAT12(bVar150,CONCAT11(bVar150,*pbVar125)) & 0xff00ff) & 0xffff);
          iVar163 = (CONCAT12(*pbVar61,(ushort)*pbVar65) & 0xffff) -
                    (CONCAT12(*pbVar100,(ushort)*pbVar104) & 0xffff);
          iVar164 = (uint)*pbVar61 - (uint)*pbVar100;
          iVar179 = ((CONCAT12(bVar142,CONCAT11(bVar142,bVar133)) & 0xff00ff) & 0xffff) -
                    (CONCAT12(*pbVar116,(ushort)bVar134) & 0xffff);
          iVar184 = (uint)bVar142 - (uint)*pbVar116;
          iVar187 = (uint)*pbVar21 - (CONCAT12(*pbVar117,(ushort)*pbVar113) & 0xffff);
          iVar188 = (uint)*pbVar12 - (uint)*pbVar117;
          iVar177 = (CONCAT12(*pbVar62,(ushort)*pbVar66) & 0xffff) -
                    (CONCAT12(*pbVar101,(ushort)*pbVar105) & 0xffff);
          iVar178 = (uint)*pbVar62 - (uint)*pbVar101;
          iVar145 = ((CONCAT12(bVar151,CONCAT11(bVar151,*pbVar49)) & 0xff00ff) & 0xffff) -
                    ((CONCAT12(bVar154,CONCAT11(bVar154,*pbVar91)) & 0xff00ff) & 0xffff);
                    /* try { // try from 003ab57c to 004ab57f has its CatchHandler @ 003abda4 */
          iVar185 = (CONCAT12(*pbVar23,(ushort)*pbVar26) & 0xffff) -
                    (CONCAT12(*pbVar115,(ushort)*pbVar111) & 0xffff);
          iVar186 = (uint)*pbVar23 - (uint)*pbVar115;
          iVar140 = (CONCAT12(*pbVar9,(ushort)*pbVar16) & 0xffff) -
                    (CONCAT12(*pbVar107,(ushort)*pbVar68) & 0xffff);
          iVar144 = (uint)*pbVar9 - (uint)*pbVar107;
          iVar152 = (CONCAT12(*pbVar32,(ushort)*pbVar36) & 0xffff) -
                    (CONCAT12(*pbVar74,(ushort)*pbVar78) & 0xffff);
          iVar153 = (uint)*pbVar32 - (uint)*pbVar74;
          iVar135 = ((CONCAT12(bVar143,CONCAT11(bVar143,*pbVar51)) & 0xff00ff) & 0xffff) -
                    ((CONCAT12(bVar147,CONCAT11(bVar147,*pbVar92)) & 0xff00ff) & 0xffff);
          iVar159 = (CONCAT12(*pbVar60,(ushort)*pbVar64) & 0xffff) -
                    (CONCAT12(*pbVar99,(ushort)*pbVar103) & 0xffff);
          iVar161 = (uint)*pbVar60 - (uint)*pbVar99;
          iVar175 = (CONCAT12(*pbVar22,(ushort)*pbVar24) & 0xffff) -
                    (CONCAT12(*pbVar114,(ushort)*pbVar118) & 0xffff);
          iVar176 = (uint)*pbVar22 - (uint)*pbVar114;
          iVar137 = (CONCAT12(*pbVar25,(ushort)*pbVar14) & 0xffff) -
                    (CONCAT12(*pbVar106,(ushort)*pbVar110) & 0xffff);
          iVar138 = (uint)*pbVar25 - (uint)*pbVar106;
          iVar171 = ((CONCAT12(bVar155,CONCAT11(bVar155,*pbVar48)) & 0xff00ff) & 0xffff) -
                    ((CONCAT12(bVar156,CONCAT11(bVar156,*pbVar90)) & 0xff00ff) & 0xffff);
          iVar170 = (CONCAT12(*pbVar33,(ushort)*pbVar37) & 0xffff) -
                    (CONCAT12(*pbVar75,(ushort)*pbVar79) & 0xffff);
          iVar172 = (uint)*pbVar33 - (uint)*pbVar75;
          iVar173 = (CONCAT12(*pbVar59,(ushort)*pbVar63) & 0xffff) -
                    (CONCAT12(*pbVar98,(ushort)*pbVar102) & 0xffff);
          iVar174 = (uint)*pbVar59 - (uint)*pbVar98;
          iVar145 = iVar145 * iVar145 + iVar135 * iVar135 + iVar171 * iVar171;
          iVar171 = ((uint)bVar151 - (uint)bVar154) * ((uint)bVar151 - (uint)bVar154) +
                    ((uint)bVar143 - (uint)bVar147) * ((uint)bVar143 - (uint)bVar147) +
                    ((uint)bVar155 - (uint)bVar156) * ((uint)bVar155 - (uint)bVar156);
          iVar135 = ((uint)*pbVar45 - (uint)*pbVar86) * ((uint)*pbVar45 - (uint)*pbVar86) +
                    ((uint)*pbVar46 - (uint)*pbVar87) * ((uint)*pbVar46 - (uint)*pbVar87) +
                    ((uint)*pbVar44 - (uint)*pbVar85) * ((uint)*pbVar44 - (uint)*pbVar85);
          iVar136 = ((uint)*pbVar41 - (uint)*pbVar82) * ((uint)*pbVar41 - (uint)*pbVar82) +
                    ((uint)*pbVar42 - (uint)*pbVar83) * ((uint)*pbVar42 - (uint)*pbVar83) +
                    ((uint)*pbVar40 - (uint)*pbVar81) * ((uint)*pbVar40 - (uint)*pbVar81);
          iVar167 = (CONCAT12(*pbVar31,(ushort)*pbVar35) & 0xffff) -
                    (CONCAT12(*pbVar73,(ushort)*pbVar77) & 0xffff);
          iVar168 = (uint)*pbVar31 - (uint)*pbVar73;
          iVar169 = ((CONCAT12(bVar157,CONCAT11(bVar157,*pbVar47)) & 0xff00ff) & 0xffff) -
                    ((CONCAT12(bVar158,CONCAT11(bVar158,*pbVar88)) & 0xff00ff) & 0xffff);
          iVar165 = (CONCAT12(*pbVar30,(ushort)*pbVar34) & 0xffff) -
                    (CONCAT12(*pbVar72,(ushort)*pbVar76) & 0xffff);
          iVar166 = (uint)*pbVar30 - (uint)*pbVar72;
                    /* try { // try from 003ab5f0 to 004ab5f3 has its CatchHandler @ 003abdac */
          iVar183 = iVar152 * iVar152 + iVar170 * iVar170 + iVar167 * iVar167 + iVar165 * iVar165 +
                    iVar145 + iVar169 * iVar169 +
                    iVar163 * iVar163 + iVar177 * iVar177 + iVar159 * iVar159 + iVar173 * iVar173 +
                    iVar141 * iVar141 + iVar179 * iVar179 + iVar185 * iVar185 + iVar175 * iVar175 +
                    iVar183;
          iVar139 = iVar153 * iVar153 + iVar172 * iVar172 + iVar168 * iVar168 + iVar166 * iVar166 +
                    (int)(CONCAT17((char)((uint)iVar171 >> 0x18),
                                   CONCAT16((char)((uint)iVar171 >> 0x10),
                                            CONCAT15((char)((uint)iVar171 >> 8),
                                                     CONCAT14((char)iVar171,iVar145)))) >> 0x20) +
                    ((uint)bVar157 - (uint)bVar158) * ((uint)bVar157 - (uint)bVar158) +
                    iVar164 * iVar164 + iVar178 * iVar178 + iVar161 * iVar161 + iVar174 * iVar174 +
                    ((uint)bVar148 - (uint)bVar150) * ((uint)bVar148 - (uint)bVar150) +
                    iVar184 * iVar184 + iVar186 * iVar186 + iVar176 * iVar176 + iVar139;
          iVar181 = ((uint)*pbVar28 - (uint)*pbVar70) * ((uint)*pbVar28 - (uint)*pbVar70) +
                    ((uint)*pbVar29 - (uint)*pbVar71) * ((uint)*pbVar29 - (uint)*pbVar71) +
                    ((uint)*pbVar20 - (uint)*pbVar69) * ((uint)*pbVar20 - (uint)*pbVar69) +
                    ((uint)*pbVar19 - (uint)*pbVar120) * ((uint)*pbVar19 - (uint)*pbVar120) +
                    iVar135 + ((uint)*pbVar43 - (uint)*pbVar84) * ((uint)*pbVar43 - (uint)*pbVar84)
                    + ((uint)*pbVar57 - (uint)*pbVar96) * ((uint)*pbVar57 - (uint)*pbVar96) +
                      ((uint)*pbVar58 - (uint)*pbVar97) * ((uint)*pbVar58 - (uint)*pbVar97) +
                      ((uint)*pbVar50 - (uint)*pbVar119) * ((uint)*pbVar50 - (uint)*pbVar119) +
                      ((uint)*pbVar56 - (uint)*pbVar89) * ((uint)*pbVar56 - (uint)*pbVar89) +
                      ((uint)*pbVar17 - (uint)*pbVar112) * ((uint)*pbVar17 - (uint)*pbVar112) +
                      iVar187 * iVar187 + iVar140 * iVar140 + iVar137 * iVar137 + iVar181;
          iVar182 = ((uint)*pbVar13 - (uint)*pbVar122) * ((uint)*pbVar13 - (uint)*pbVar122) +
                    ((uint)*pbVar15 - (uint)*pbVar121) * ((uint)*pbVar15 - (uint)*pbVar121) +
                    ((uint)*pbVar38 - (uint)*pbVar123) * ((uint)*pbVar38 - (uint)*pbVar123) +
                    ((uint)*pbVar18 - (uint)*pbVar124) * ((uint)*pbVar18 - (uint)*pbVar124) +
                    (int)(CONCAT17((char)((uint)iVar136 >> 0x18),
                                   CONCAT16((char)((uint)iVar136 >> 0x10),
                                            CONCAT15((char)((uint)iVar136 >> 8),
                                                     CONCAT14((char)iVar136,iVar135)))) >> 0x20) +
                    ((uint)*pbVar39 - (uint)*pbVar80) * ((uint)*pbVar39 - (uint)*pbVar80) +
                    ((uint)*pbVar54 - (uint)*pbVar94) * ((uint)*pbVar54 - (uint)*pbVar94) +
                    ((uint)*pbVar55 - (uint)*pbVar95) * ((uint)*pbVar55 - (uint)*pbVar95) +
                    ((uint)*pbVar53 - (uint)*pbVar109) * ((uint)*pbVar53 - (uint)*pbVar109) +
                    ((uint)*pbVar52 - (uint)*pbVar93) * ((uint)*pbVar52 - (uint)*pbVar93) +
                    ((uint)*pbVar10 - (uint)*pbVar108) * ((uint)*pbVar10 - (uint)*pbVar108) +
                    iVar188 * iVar188 + iVar144 * iVar144 + iVar138 * iVar138 + iVar182;
        } while (uVar129 < uVar6);
        iVar182 = iVar183 + iVar139 + iVar181 + iVar182;
        iVar181 = uVar6 * 0x40;
        if (uVar6 * 0x10 == iVar1) goto LAB_003ab684;
      }
      pbVar67 = pbVar126 + iVar181;
      pbVar11 = param_1 + iVar181;
      do {
        iVar181 = iVar181 + 4;
                    /* try { // try from 003ab664 to 004ab667 has its CatchHandler @ 003abe24 */
        iVar182 = iVar182 + ((uint)pbVar11[1] - (uint)pbVar67[1]) *
                            ((uint)pbVar11[1] - (uint)pbVar67[1]) +
                            ((uint)*pbVar11 - (uint)*pbVar67) * ((uint)*pbVar11 - (uint)*pbVar67) +
                            ((uint)pbVar11[2] - (uint)pbVar67[2]) *
                            ((uint)pbVar11[2] - (uint)pbVar67[2]) +
                            ((uint)pbVar11[3] - (uint)pbVar67[3]) *
                            ((uint)pbVar11[3] - (uint)pbVar67[3]);
        pbVar67 = pbVar67 + 4;
        pbVar11 = pbVar11 + 4;
      } while (iVar181 < iVar180);
LAB_003ab684:
      do {
        if (iVar128 < param_5) {
          lVar130 = (long)iVar128;
          uVar7 = param_5 - iVar128;
          uVar129 = -((int)param_1 + iVar128) & 0xf;
          uVar4 = (ulong)uVar129;
          if (uVar7 < uVar129) {
            uVar4 = (ulong)uVar7;
          }
          if (uVar7 < 0x11) {
            uVar4 = (ulong)uVar7;
          }
          uVar129 = (uint)uVar4;
          if (uVar129 != 0) {
            iVar181 = iVar128 + 1;
            iVar182 = iVar182 + ((uint)param_1[lVar130] - (uint)pbVar126[lVar130]) *
                                ((uint)param_1[lVar130] - (uint)pbVar126[lVar130]);
            if (uVar129 != 1) {
                    /* try { // try from 003ab6d8 to 004ab6db has its CatchHandler @ 003abd9c */
              iVar183 = iVar128 + 2;
              iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                  ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
              iVar181 = iVar183;
              if (uVar129 != 2) {
                iVar181 = iVar128 + 3;
                iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                    ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                if (uVar129 != 3) {
                  iVar183 = iVar128 + 4;
                  iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                      ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                  iVar181 = iVar183;
                  if (uVar129 != 4) {
                    iVar181 = iVar128 + 5;
                    iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                        ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                    /* try { // try from 003ab74c to 004ab74f has its CatchHandler @ 003abccc */
                    if (uVar129 != 5) {
                      iVar183 = iVar128 + 6;
                      iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                          ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                      iVar181 = iVar183;
                      if (uVar129 != 6) {
                        iVar181 = iVar128 + 7;
                        iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                            ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                        if (uVar129 != 7) {
                          iVar183 = iVar128 + 8;
                          iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                              ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                          iVar181 = iVar183;
                          if (uVar129 != 8) {
                            iVar181 = iVar128 + 9;
                    /* try { // try from 003ab7c0 to 004ab7c3 has its CatchHandler @ 003ab120 */
                            iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                                ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                            if (uVar129 != 9) {
                              iVar183 = iVar128 + 10;
                              iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181])
                                                  * ((uint)param_1[iVar181] -
                                                    (uint)pbVar126[iVar181]);
                              iVar181 = iVar183;
                              if (uVar129 != 10) {
                                iVar181 = iVar128 + 0xb;
                                iVar182 = iVar182 + ((uint)param_1[iVar183] -
                                                    (uint)pbVar126[iVar183]) *
                                                    ((uint)param_1[iVar183] -
                                                    (uint)pbVar126[iVar183]);
                                if (uVar129 != 0xb) {
                                  iVar183 = iVar128 + 0xc;
                                  iVar182 = iVar182 + ((uint)param_1[iVar181] -
                                                      (uint)pbVar126[iVar181]) *
                                                      ((uint)param_1[iVar181] -
                                                      (uint)pbVar126[iVar181]);
                                  iVar181 = iVar183;
                                  if (uVar129 != 0xc) {
                                    iVar181 = iVar128 + 0xd;
                                    iVar182 = iVar182 + ((uint)param_1[iVar183] -
                                                        (uint)pbVar126[iVar183]) *
                                                        ((uint)param_1[iVar183] -
                                                        (uint)pbVar126[iVar183]);
                                    if (uVar129 != 0xd) {
                                      iVar183 = iVar128 + 0xe;
                                      iVar182 = iVar182 + ((uint)param_1[iVar181] -
                                                          (uint)pbVar126[iVar181]) *
                                                          ((uint)param_1[iVar181] -
                                                          (uint)pbVar126[iVar181]);
                                      iVar181 = iVar183;
                                      if (uVar129 != 0xe) {
                                        iVar181 = iVar128 + 0xf;
                    /* try { // try from 003ab888 to 004ab92f has its CatchHandler @ 003abe00 */
                                        iVar182 = iVar182 + ((uint)param_1[iVar183] -
                                                            (uint)pbVar126[iVar183]) *
                                                            ((uint)param_1[iVar183] -
                                                            (uint)pbVar126[iVar183]);
                                        if (uVar129 == 0x10) {
                                          iVar182 = iVar182 + ((uint)param_1[iVar181] -
                                                              (uint)pbVar126[iVar181]) *
                                                              ((uint)param_1[iVar181] -
                                                              (uint)pbVar126[iVar181]);
                                          iVar181 = iVar128 + 0x10;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            iVar128 = iVar181;
            if (uVar129 == uVar7) goto LAB_003abb20;
          }
          uVar2 = ((uVar7 - uVar129) - 0x10 >> 4) + 1;
          iVar181 = uVar2 * 0x10;
          if (0xe < (uVar7 - 1) - uVar129) {
            iVar183 = 0;
            iVar139 = 0;
            iVar141 = 0;
            iVar145 = 0;
            uVar131 = 0;
            pbVar67 = param_1 + uVar4 + lVar130;
            pbVar11 = param_2 + lVar130 + lVar132 + uVar4;
            do {
              uVar149 = *(undefined8 *)(pbVar67 + 8);
              uVar146 = *(undefined8 *)pbVar67;
              uVar131 = uVar131 + 1;
              uVar162 = *(undefined8 *)(pbVar11 + 8);
              uVar160 = *(undefined8 *)pbVar11;
              bVar143 = (byte)((ulong)uVar146 >> 0x28);
              bVar133 = (byte)((ulong)uVar160 >> 8);
              bVar147 = (byte)((ulong)uVar160 >> 0x28);
              bVar134 = (byte)((ulong)uVar149 >> 8);
              bVar148 = (byte)((ulong)uVar149 >> 0x28);
              bVar142 = (byte)((ulong)uVar162 >> 8);
              bVar150 = (byte)((ulong)uVar162 >> 0x28);
              iVar164 = (uint)(byte)uVar146 -
                        ((CONCAT12(bVar133,(short)uVar160) & 0xff00ff) & 0xffff);
              iVar165 = (uint)(byte)((ulong)uVar146 >> 8) - (uint)bVar133;
              iVar166 = (uint)(byte)((ulong)uVar146 >> 0x10) - (uint)(byte)((ulong)uVar160 >> 0x10);
              iVar167 = (uint)(byte)((ulong)uVar146 >> 0x18) - (uint)(byte)((ulong)uVar160 >> 0x18);
              iVar171 = (CONCAT12(bVar143,(ushort)(byte)((ulong)uVar146 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar147,(ushort)(byte)((ulong)uVar160 >> 0x20)) & 0xffff);
              iVar135 = (uint)bVar143 - (uint)bVar147;
              iVar136 = (uint)(byte)((ulong)uVar146 >> 0x30) - (uint)(byte)((ulong)uVar160 >> 0x30);
              iVar137 = (uint)(byte)((ulong)uVar146 >> 0x38) - (uint)(byte)((ulong)uVar160 >> 0x38);
              iVar153 = ((CONCAT12(bVar134,(short)uVar149) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar142,(short)uVar162) & 0xff00ff) & 0xffff);
              iVar159 = (uint)bVar134 - (uint)bVar142;
              iVar161 = (uint)(byte)((ulong)uVar149 >> 0x10) - (uint)(byte)((ulong)uVar162 >> 0x10);
              iVar163 = (uint)(byte)((ulong)uVar149 >> 0x18) - (uint)(byte)((ulong)uVar162 >> 0x18);
              iVar138 = (CONCAT12(bVar148,(ushort)(byte)((ulong)uVar149 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar150,(ushort)(byte)((ulong)uVar162 >> 0x20)) & 0xffff);
              iVar140 = (uint)bVar148 - (uint)bVar150;
              iVar144 = (uint)(byte)((ulong)uVar149 >> 0x30) - (uint)(byte)((ulong)uVar162 >> 0x30);
              iVar152 = (uint)(byte)((ulong)uVar149 >> 0x38) - (uint)(byte)((ulong)uVar162 >> 0x38);
              iVar183 = iVar183 + iVar164 * iVar164 + iVar171 * iVar171 + iVar153 * iVar153 +
                        iVar138 * iVar138;
              iVar139 = iVar139 + iVar165 * iVar165 + iVar135 * iVar135 + iVar159 * iVar159 +
                        iVar140 * iVar140;
              iVar141 = iVar141 + iVar166 * iVar166 + iVar136 * iVar136 + iVar161 * iVar161 +
                        iVar144 * iVar144;
              iVar145 = iVar145 + iVar167 * iVar167 + iVar137 * iVar137 + iVar163 * iVar163 +
                        iVar152 * iVar152;
              pbVar67 = pbVar67 + 0x10;
              pbVar11 = pbVar11 + 0x10;
            } while (uVar131 < uVar2);
            iVar128 = iVar128 + iVar181;
            iVar182 = iVar182 + iVar183 + iVar139 + iVar141 + iVar145;
            if (iVar181 == uVar7 - uVar129) goto LAB_003abb20;
          }
          iVar181 = iVar128 + 1;
          iVar182 = iVar182 + ((uint)param_1[iVar128] - (uint)pbVar126[iVar128]) *
                              ((uint)param_1[iVar128] - (uint)pbVar126[iVar128]);
          if (iVar181 < param_5) {
            iVar183 = iVar128 + 2;
            iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
            if (iVar183 < param_5) {
              iVar181 = iVar128 + 3;
              iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                  ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
              if (iVar181 < param_5) {
                iVar183 = iVar128 + 4;
                iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                    ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                if (iVar183 < param_5) {
                    /* try { // try from 003ab9d0 to 004ab9d3 has its CatchHandler @ 003abd94 */
                  iVar181 = iVar128 + 5;
                    /* try { // try from 003ab9dc to 004ab9df has its CatchHandler @ 003ab120 */
                  iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                      ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                    /* try { // try from 003ab9e8 to 004ab9eb has its CatchHandler @ 003abe24 */
                  if (iVar181 < param_5) {
                    iVar183 = iVar128 + 6;
                    /* try { // try from 003ab9f4 to 004ab9f7 has its CatchHandler @ 003abdac */
                    /* try { // try from 003aba00 to 004aba03 has its CatchHandler @ 003abda4 */
                    iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                        ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                    if (iVar183 < param_5) {
                      iVar181 = iVar128 + 7;
                    /* try { // try from 003aba0c to 004aba0f has its CatchHandler @ 003abccc */
                    /* try { // try from 003aba18 to 004aba1b has its CatchHandler @ 003abd9c */
                    /* try { // try from 003aba24 to 004aba27 has its CatchHandler @ 003abd94 */
                      iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                          ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                      if (iVar181 < param_5) {
                    /* try { // try from 003aba30 to 004aba33 has its CatchHandler @ 003abdb4 */
                        iVar183 = iVar128 + 8;
                    /* try { // try from 003aba44 to 004aba47 has its CatchHandler @ 003abda4 */
                        iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                            ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                        if (iVar183 < param_5) {
                          iVar181 = iVar128 + 9;
                          iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]) *
                                              ((uint)param_1[iVar183] - (uint)pbVar126[iVar183]);
                          if (iVar181 < param_5) {
                            iVar183 = iVar128 + 10;
                            iVar182 = iVar182 + ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]) *
                                                ((uint)param_1[iVar181] - (uint)pbVar126[iVar181]);
                            if (iVar183 < param_5) {
                              iVar181 = iVar128 + 0xb;
                              iVar182 = iVar182 + ((uint)param_1[iVar183] - (uint)pbVar126[iVar183])
                                                  * ((uint)param_1[iVar183] -
                                                    (uint)pbVar126[iVar183]);
                              if (iVar181 < param_5) {
                                iVar183 = iVar128 + 0xc;
                    /* try { // try from 003abac0 to 004abb67 has its CatchHandler @ 003abddc */
                                iVar182 = iVar182 + ((uint)param_1[iVar181] -
                                                    (uint)pbVar126[iVar181]) *
                                                    ((uint)param_1[iVar181] -
                                                    (uint)pbVar126[iVar181]);
                                if (iVar183 < param_5) {
                                  iVar181 = iVar128 + 0xd;
                                  iVar182 = iVar182 + ((uint)param_1[iVar183] -
                                                      (uint)pbVar126[iVar183]) *
                                                      ((uint)param_1[iVar183] -
                                                      (uint)pbVar126[iVar183]);
                                  if (iVar181 < param_5) {
                                    iVar128 = iVar128 + 0xe;
                                    iVar182 = iVar182 + ((uint)param_1[iVar181] -
                                                        (uint)pbVar126[iVar181]) *
                                                        ((uint)param_1[iVar181] -
                                                        (uint)pbVar126[iVar181]);
                                    if (iVar128 < param_5) {
                                      iVar182 = iVar182 + ((uint)param_1[iVar128] -
                                                          (uint)pbVar126[iVar128]) *
                                                          ((uint)param_1[iVar128] -
                                                          (uint)pbVar126[iVar128]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003abb20:
        param_6 = piVar127 + 1;
        *piVar127 = iVar182;
        pbVar126 = pbVar126 + param_3;
        if (param_6 == piVar3) {
          return;
        }
        lVar132 = (long)pbVar126 - (long)param_2;
        if (0 < iVar180) goto LAB_003ab4b4;
LAB_003abb3c:
        iVar182 = 0;
        piVar127 = param_6;
        iVar128 = 0;
      } while( true );
    }
  }
  else if (0 < param_4) {
    uVar6 = param_5 - 4U >> 2;
    iVar1 = uVar6 + 1;
    uVar6 = (uVar6 - 0xf >> 4) + 1;
    lVar132 = 0;
    iVar5 = iVar1 * 4;
    do {
      iVar180 = 0x7fffffff;
      if (*(char *)(param_7 + lVar132) != '\0') {
        if (param_5 + -3 < 1) {
          iVar180 = 0;
          iVar128 = 0;
        }
        else {
          iVar128 = iVar5;
          if (param_5 - 4U < 0x3c) {
            iVar180 = 0;
            iVar181 = 0;
          }
          else {
            iVar180 = 0;
            iVar181 = 0;
            iVar182 = 0;
            iVar183 = 0;
            uVar129 = 0;
            pbVar126 = param_2;
            pbVar67 = param_1;
            do {
              bVar133 = *pbVar67;
              pbVar9 = pbVar67 + 1;
              pbVar10 = pbVar67 + 2;
              pbVar11 = pbVar67 + 3;
              pbVar12 = pbVar67 + 4;
              bVar147 = pbVar67[5];
              pbVar13 = pbVar67 + 6;
              pbVar14 = pbVar67 + 7;
              pbVar15 = pbVar67 + 8;
              pbVar16 = pbVar67 + 9;
              pbVar17 = pbVar67 + 10;
              pbVar18 = pbVar67 + 0xb;
              pbVar19 = pbVar67 + 0xc;
              pbVar20 = pbVar67 + 0xd;
              pbVar21 = pbVar67 + 0xe;
              pbVar22 = pbVar67 + 0xf;
              pbVar23 = pbVar67 + 0x10;
              pbVar24 = pbVar67 + 0x11;
              pbVar25 = pbVar67 + 0x12;
              pbVar26 = pbVar67 + 0x13;
              pbVar27 = pbVar67 + 0x14;
              pbVar28 = pbVar67 + 0x15;
              pbVar29 = pbVar67 + 0x16;
              pbVar30 = pbVar67 + 0x17;
              pbVar31 = pbVar67 + 0x18;
              pbVar32 = pbVar67 + 0x19;
              pbVar33 = pbVar67 + 0x1a;
              pbVar34 = pbVar67 + 0x1b;
              pbVar35 = pbVar67 + 0x1c;
              pbVar36 = pbVar67 + 0x1d;
              pbVar37 = pbVar67 + 0x1e;
              pbVar38 = pbVar67 + 0x1f;
              pbVar39 = pbVar67 + 0x20;
              pbVar40 = pbVar67 + 0x21;
              pbVar41 = pbVar67 + 0x22;
              pbVar42 = pbVar67 + 0x23;
              bVar142 = pbVar67[0x24];
              bVar150 = pbVar67[0x25];
              bVar154 = pbVar67[0x26];
              bVar156 = pbVar67[0x27];
              pbVar43 = pbVar67 + 0x28;
              pbVar44 = pbVar67 + 0x29;
              pbVar45 = pbVar67 + 0x2a;
              pbVar46 = pbVar67 + 0x2b;
              pbVar47 = pbVar67 + 0x2c;
              pbVar48 = pbVar67 + 0x2d;
              pbVar49 = pbVar67 + 0x2e;
              pbVar50 = pbVar67 + 0x2f;
              pbVar51 = pbVar67 + 0x30;
              pbVar52 = pbVar67 + 0x31;
              pbVar53 = pbVar67 + 0x32;
              pbVar54 = pbVar67 + 0x33;
              pbVar55 = pbVar67 + 0x34;
              pbVar56 = pbVar67 + 0x35;
              pbVar57 = pbVar67 + 0x36;
              pbVar58 = pbVar67 + 0x37;
              pbVar59 = pbVar67 + 0x38;
              pbVar60 = pbVar67 + 0x39;
              pbVar61 = pbVar67 + 0x3a;
              pbVar62 = pbVar67 + 0x3b;
              pbVar63 = pbVar67 + 0x3c;
              pbVar64 = pbVar67 + 0x3d;
              pbVar65 = pbVar67 + 0x3e;
              pbVar66 = pbVar67 + 0x3f;
              pbVar67 = pbVar67 + 0x40;
                    /* catch() { ... } // from try @ 003aae18 with catch @ 003aadcc
                       catch() { ... } // from try @ 003aaeac with catch @ 003aadcc
                       catch() { ... } // from try @ 003aaf70 with catch @ 003aadcc
                       catch() { ... } // from try @ 003ab0e8 with catch @ 003aadcc
                       catch() { ... } // from try @ 003ab110 with catch @ 003aadcc */
              uVar129 = uVar129 + 1;
              bVar134 = *pbVar126;
              pbVar68 = pbVar126 + 1;
              pbVar69 = pbVar126 + 2;
              pbVar70 = pbVar126 + 3;
              pbVar71 = pbVar126 + 4;
              bVar148 = pbVar126[5];
              pbVar72 = pbVar126 + 6;
              pbVar73 = pbVar126 + 7;
              pbVar74 = pbVar126 + 8;
              pbVar75 = pbVar126 + 9;
              pbVar76 = pbVar126 + 10;
              pbVar77 = pbVar126 + 0xb;
              pbVar78 = pbVar126 + 0xc;
              pbVar79 = pbVar126 + 0xd;
              pbVar80 = pbVar126 + 0xe;
              pbVar81 = pbVar126 + 0xf;
              pbVar82 = pbVar126 + 0x10;
              pbVar83 = pbVar126 + 0x11;
              pbVar84 = pbVar126 + 0x12;
              pbVar85 = pbVar126 + 0x13;
              pbVar86 = pbVar126 + 0x14;
              pbVar87 = pbVar126 + 0x15;
              pbVar88 = pbVar126 + 0x16;
              pbVar89 = pbVar126 + 0x17;
              pbVar90 = pbVar126 + 0x18;
              pbVar91 = pbVar126 + 0x19;
              pbVar92 = pbVar126 + 0x1a;
              pbVar93 = pbVar126 + 0x1b;
              pbVar94 = pbVar126 + 0x1c;
              pbVar95 = pbVar126 + 0x1d;
              pbVar96 = pbVar126 + 0x1e;
              pbVar97 = pbVar126 + 0x1f;
              pbVar98 = pbVar126 + 0x20;
              pbVar99 = pbVar126 + 0x21;
              pbVar100 = pbVar126 + 0x22;
              pbVar101 = pbVar126 + 0x23;
              bVar143 = pbVar126[0x24];
              bVar151 = pbVar126[0x25];
              bVar155 = pbVar126[0x26];
              bVar157 = pbVar126[0x27];
              pbVar102 = pbVar126 + 0x28;
              pbVar103 = pbVar126 + 0x29;
              pbVar104 = pbVar126 + 0x2a;
              pbVar105 = pbVar126 + 0x2b;
              pbVar106 = pbVar126 + 0x2c;
              pbVar107 = pbVar126 + 0x2d;
              pbVar108 = pbVar126 + 0x2e;
              pbVar109 = pbVar126 + 0x2f;
              pbVar110 = pbVar126 + 0x30;
              pbVar111 = pbVar126 + 0x31;
              pbVar112 = pbVar126 + 0x32;
              pbVar113 = pbVar126 + 0x33;
              pbVar114 = pbVar126 + 0x34;
              pbVar115 = pbVar126 + 0x35;
              pbVar116 = pbVar126 + 0x36;
              pbVar117 = pbVar126 + 0x37;
              pbVar118 = pbVar126 + 0x38;
              pbVar119 = pbVar126 + 0x39;
              pbVar120 = pbVar126 + 0x3a;
              pbVar121 = pbVar126 + 0x3b;
              pbVar122 = pbVar126 + 0x3c;
              pbVar123 = pbVar126 + 0x3d;
              pbVar124 = pbVar126 + 0x3e;
              pbVar125 = pbVar126 + 0x3f;
              pbVar126 = pbVar126 + 0x40;
                    /* try { // try from 003aae18 to 004aae1b has its CatchHandler @ 003aadcc */
              uVar8 = CONCAT12(*pbVar76,CONCAT11(*pbVar72,*pbVar69));
              iVar139 = ((CONCAT12(bVar147,CONCAT11(bVar147,*pbVar9)) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar148,CONCAT11(bVar148,*pbVar68)) & 0xff00ff) & 0xffff);
                    /* try { // try from 003aae34 to 004aae37 has its CatchHandler @ 003ab0ec */
              iVar152 = (CONCAT12(*pbVar28,(ushort)*pbVar24) & 0xffff) -
                        (CONCAT12(*pbVar87,(ushort)*pbVar83) & 0xffff);
              iVar153 = (uint)*pbVar28 - (uint)*pbVar87;
              iVar135 = (CONCAT12(*pbVar12,(ushort)bVar133) & 0xffff) -
                        (CONCAT12(*pbVar71,(ushort)bVar134) & 0xffff);
              iVar137 = (uint)*pbVar12 - (uint)*pbVar71;
              iVar140 = (CONCAT12(*pbVar19,(ushort)*pbVar15) & 0xffff) -
                        (CONCAT12(*pbVar78,(ushort)*pbVar74) & 0xffff);
              iVar144 = (uint)*pbVar19 - (uint)*pbVar78;
              iVar141 = ((CONCAT12(bVar150,CONCAT11(bVar150,*pbVar40)) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar151,CONCAT11(bVar151,*pbVar99)) & 0xff00ff) & 0xffff);
              iVar136 = (CONCAT12(*pbVar56,(ushort)*pbVar52) & 0xffff) -
                        (CONCAT12(*pbVar115,(ushort)*pbVar111) & 0xffff);
              iVar138 = (uint)*pbVar56 - (uint)*pbVar115;
              iVar174 = (CONCAT12(*pbVar27,(ushort)*pbVar23) & 0xffff) -
                        (CONCAT12(*pbVar86,(ushort)*pbVar82) & 0xffff);
              iVar175 = (uint)*pbVar27 - (uint)*pbVar86;
              iVar187 = (CONCAT12(*pbVar13,(ushort)*pbVar10) & 0xffff) - (uVar8 & 0xff);
              iVar188 = (uint)*pbVar13 - ((uVar8 & 0xff00) >> 8);
              iVar145 = (CONCAT12(*pbVar21,(ushort)*pbVar17) & 0xffff) - (uint)*pbVar76;
              iVar171 = (uint)*pbVar21 - (uint)*pbVar80;
              iVar184 = ((CONCAT12(bVar142,CONCAT11(bVar142,*pbVar39)) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar143,CONCAT11(bVar143,*pbVar98)) & 0xff00ff) & 0xffff);
              iVar176 = (CONCAT12(*pbVar14,(ushort)*pbVar11) & 0xffff) -
                        (CONCAT12(*pbVar73,(ushort)*pbVar70) & 0xffff);
              iVar177 = (uint)*pbVar14 - (uint)*pbVar73;
              iVar178 = (CONCAT12(*pbVar22,(ushort)*pbVar18) & 0xffff) -
                        (CONCAT12(*pbVar81,(ushort)*pbVar77) & 0xffff);
              iVar179 = (uint)*pbVar22 - (uint)*pbVar81;
              iVar170 = (CONCAT12(*pbVar29,(ushort)*pbVar25) & 0xffff) -
                        (CONCAT12(*pbVar88,(ushort)*pbVar84) & 0xffff);
              iVar172 = (uint)*pbVar29 - (uint)*pbVar88;
              iVar173 = ((CONCAT12(bVar154,CONCAT11(bVar154,*pbVar41)) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar155,CONCAT11(bVar155,*pbVar100)) & 0xff00ff) & 0xffff);
                    /* try { // try from 003aaeac to 004aaf2f has its CatchHandler @ 003aadcc */
              iVar166 = (CONCAT12(*pbVar55,(ushort)*pbVar51) & 0xffff) -
                        (CONCAT12(*pbVar114,(ushort)*pbVar110) & 0xffff);
              iVar167 = (uint)*pbVar55 - (uint)*pbVar114;
              iVar168 = (CONCAT12(*pbVar30,(ushort)*pbVar26) & 0xffff) -
                        (CONCAT12(*pbVar89,(ushort)*pbVar85) & 0xffff);
              iVar169 = (uint)*pbVar30 - (uint)*pbVar89;
              iVar163 = (CONCAT12(*pbVar57,(ushort)*pbVar53) & 0xffff) -
                        (CONCAT12(*pbVar116,(ushort)*pbVar112) & 0xffff);
              iVar164 = (uint)*pbVar57 - (uint)*pbVar116;
              iVar165 = ((CONCAT12(bVar156,CONCAT11(bVar156,*pbVar42)) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar157,CONCAT11(bVar157,*pbVar101)) & 0xff00ff) & 0xffff);
              iVar159 = (CONCAT12(*pbVar58,(ushort)*pbVar54) & 0xffff) -
                        (CONCAT12(*pbVar117,(ushort)*pbVar113) & 0xffff);
              iVar161 = (uint)*pbVar58 - (uint)*pbVar117;
              iVar180 = iVar136 * iVar136 + iVar166 * iVar166 + iVar163 * iVar163 +
                        iVar159 * iVar159 +
                        iVar141 * iVar141 + iVar184 * iVar184 + iVar173 * iVar173 +
                        iVar165 * iVar165 +
                        iVar152 * iVar152 + iVar174 * iVar174 + iVar170 * iVar170 +
                        iVar168 * iVar168 +
                        iVar139 * iVar139 + iVar135 * iVar135 + iVar187 * iVar187 +
                        iVar176 * iVar176 + iVar180;
              iVar181 = iVar138 * iVar138 + iVar167 * iVar167 + iVar164 * iVar164 +
                        iVar161 * iVar161 +
                        ((uint)bVar150 - (uint)bVar151) * ((uint)bVar150 - (uint)bVar151) +
                        ((uint)bVar142 - (uint)bVar143) * ((uint)bVar142 - (uint)bVar143) +
                        ((uint)bVar154 - (uint)bVar155) * ((uint)bVar154 - (uint)bVar155) +
                        ((uint)bVar156 - (uint)bVar157) * ((uint)bVar156 - (uint)bVar157) +
                        iVar153 * iVar153 + iVar175 * iVar175 + iVar172 * iVar172 +
                        iVar169 * iVar169 +
                        ((uint)bVar147 - (uint)bVar148) * ((uint)bVar147 - (uint)bVar148) +
                        iVar137 * iVar137 + iVar188 * iVar188 + iVar177 * iVar177 + iVar181;
              iVar182 = ((uint)*pbVar60 - (uint)*pbVar119) * ((uint)*pbVar60 - (uint)*pbVar119) +
                        ((uint)*pbVar59 - (uint)*pbVar118) * ((uint)*pbVar59 - (uint)*pbVar118) +
                        ((uint)*pbVar61 - (uint)*pbVar120) * ((uint)*pbVar61 - (uint)*pbVar120) +
                        ((uint)*pbVar62 - (uint)*pbVar121) * ((uint)*pbVar62 - (uint)*pbVar121) +
                        ((uint)*pbVar44 - (uint)*pbVar103) * ((uint)*pbVar44 - (uint)*pbVar103) +
                        ((uint)*pbVar43 - (uint)*pbVar102) * ((uint)*pbVar43 - (uint)*pbVar102) +
                        ((uint)*pbVar45 - (uint)*pbVar104) * ((uint)*pbVar45 - (uint)*pbVar104) +
                        ((uint)*pbVar46 - (uint)*pbVar105) * ((uint)*pbVar46 - (uint)*pbVar105) +
                        ((uint)*pbVar32 - (uint)*pbVar91) * ((uint)*pbVar32 - (uint)*pbVar91) +
                        ((uint)*pbVar31 - (uint)*pbVar90) * ((uint)*pbVar31 - (uint)*pbVar90) +
                        ((uint)*pbVar33 - (uint)*pbVar92) * ((uint)*pbVar33 - (uint)*pbVar92) +
                        ((uint)*pbVar34 - (uint)*pbVar93) * ((uint)*pbVar34 - (uint)*pbVar93) +
                        ((uint)*pbVar16 - (uint)*pbVar75) * ((uint)*pbVar16 - (uint)*pbVar75) +
                        iVar140 * iVar140 + iVar145 * iVar145 + iVar178 * iVar178 + iVar182;
              iVar183 = ((uint)*pbVar64 - (uint)*pbVar123) * ((uint)*pbVar64 - (uint)*pbVar123) +
                        ((uint)*pbVar63 - (uint)*pbVar122) * ((uint)*pbVar63 - (uint)*pbVar122) +
                        ((uint)*pbVar65 - (uint)*pbVar124) * ((uint)*pbVar65 - (uint)*pbVar124) +
                        ((uint)*pbVar66 - (uint)*pbVar125) * ((uint)*pbVar66 - (uint)*pbVar125) +
                        ((uint)*pbVar48 - (uint)*pbVar107) * ((uint)*pbVar48 - (uint)*pbVar107) +
                        ((uint)*pbVar47 - (uint)*pbVar106) * ((uint)*pbVar47 - (uint)*pbVar106) +
                        ((uint)*pbVar49 - (uint)*pbVar108) * ((uint)*pbVar49 - (uint)*pbVar108) +
                        ((uint)*pbVar50 - (uint)*pbVar109) * ((uint)*pbVar50 - (uint)*pbVar109) +
                        ((uint)*pbVar36 - (uint)*pbVar95) * ((uint)*pbVar36 - (uint)*pbVar95) +
                        ((uint)*pbVar35 - (uint)*pbVar94) * ((uint)*pbVar35 - (uint)*pbVar94) +
                        ((uint)*pbVar37 - (uint)*pbVar96) * ((uint)*pbVar37 - (uint)*pbVar96) +
                        ((uint)*pbVar38 - (uint)*pbVar97) * ((uint)*pbVar38 - (uint)*pbVar97) +
                        ((uint)*pbVar20 - (uint)*pbVar79) * ((uint)*pbVar20 - (uint)*pbVar79) +
                        iVar144 * iVar144 + iVar171 * iVar171 + iVar179 * iVar179 + iVar183;
            } while (uVar129 < uVar6);
            iVar180 = iVar180 + iVar181 + iVar182 + iVar183;
            iVar181 = uVar6 * 0x40;
            if (iVar1 == uVar6 * 0x10) goto LAB_003aaf7c;
          }
          pbVar126 = param_2 + iVar181;
          pbVar67 = param_1 + iVar181;
          do {
            iVar181 = iVar181 + 4;
                    /* try { // try from 003aaf68 to 004aaf6b has its CatchHandler @ 003ab0d8 */
                    /* try { // try from 003aaf70 to 004aaf73 has its CatchHandler @ 003aadcc */
            iVar180 = iVar180 + ((uint)pbVar67[1] - (uint)pbVar126[1]) *
                                ((uint)pbVar67[1] - (uint)pbVar126[1]) +
                                ((uint)*pbVar67 - (uint)*pbVar126) *
                                ((uint)*pbVar67 - (uint)*pbVar126) +
                                ((uint)pbVar67[2] - (uint)pbVar126[2]) *
                                ((uint)pbVar67[2] - (uint)pbVar126[2]) +
                                ((uint)pbVar67[3] - (uint)pbVar126[3]) *
                                ((uint)pbVar67[3] - (uint)pbVar126[3]);
            pbVar126 = pbVar126 + 4;
            pbVar67 = pbVar67 + 4;
          } while (iVar181 < param_5 + -3);
        }
LAB_003aaf7c:
        if (iVar128 < param_5) {
          uVar7 = param_5 - iVar128;
          uVar129 = -((int)param_1 + iVar128) & 0xf;
          uVar4 = (ulong)uVar129;
          if (uVar7 < uVar129) {
            uVar4 = (ulong)uVar7;
          }
          if (uVar7 < 0x11) {
            uVar4 = (ulong)uVar7;
          }
          uVar129 = (uint)uVar4;
          iVar181 = iVar128;
          if (uVar129 != 0) {
            iVar181 = iVar128 + 1;
            iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
            if (uVar129 != 1) {
              iVar182 = iVar128 + 2;
              iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181]) *
                                  ((uint)param_1[iVar181] - (uint)param_2[iVar181]);
              iVar181 = iVar182;
              if (uVar129 != 2) {
                iVar181 = iVar128 + 3;
                iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                    ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                if (uVar129 != 3) {
                  iVar182 = iVar128 + 4;
                  iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181]) *
                                      ((uint)param_1[iVar181] - (uint)param_2[iVar181]);
                  iVar181 = iVar182;
                  if (uVar129 != 4) {
                    iVar181 = iVar128 + 5;
                    iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                        ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                    if (uVar129 != 5) {
                      iVar182 = iVar128 + 6;
                      iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181]) *
                                          ((uint)param_1[iVar181] - (uint)param_2[iVar181]);
                      iVar181 = iVar182;
                      if (uVar129 != 6) {
                        iVar181 = iVar128 + 7;
                        iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                            ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                        if (uVar129 != 7) {
                          iVar182 = iVar128 + 8;
                          iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181]) *
                                              ((uint)param_1[iVar181] - (uint)param_2[iVar181]);
                          iVar181 = iVar182;
                          if (uVar129 != 8) {
                            iVar181 = iVar128 + 9;
                            iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                                ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                            if (uVar129 != 9) {
                              iVar182 = iVar128 + 10;
                    /* catch() { ... } // from try @ 003aaf68 with catch @ 003ab0d8 */
                              iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181])
                                                  * ((uint)param_1[iVar181] - (uint)param_2[iVar181]
                                                    );
                              iVar181 = iVar182;
                              if (uVar129 != 10) {
                    /* catch() { ... } // from try @ 003aae34 with catch @ 003ab0ec */
                                iVar181 = iVar128 + 0xb;
                    /* try { // try from 003ab0e8 to 004ab0eb has its CatchHandler @ 003aadcc */
                                iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]
                                                    ) * ((uint)param_1[iVar182] -
                                                        (uint)param_2[iVar182]);
                                if (uVar129 != 0xb) {
                    /* try { // try from 003ab110 to 004ab113 has its CatchHandler @ 003aadcc */
                                  iVar182 = iVar128 + 0xc;
                    /* catch() { ... } // from try @ 003ab16c with catch @ 003ab120
                       catch() { ... } // from try @ 003ab7c0 with catch @ 003ab120
                       catch() { ... } // from try @ 003ab9dc with catch @ 003ab120
                       catch() { ... } // from try @ 003abcf0 with catch @ 003ab120 */
                                  iVar180 = iVar180 + ((uint)param_1[iVar181] -
                                                      (uint)param_2[iVar181]) *
                                                      ((uint)param_1[iVar181] -
                                                      (uint)param_2[iVar181]);
                                  iVar181 = iVar182;
                                  if (uVar129 != 0xc) {
                                    iVar181 = iVar128 + 0xd;
                                    iVar180 = iVar180 + ((uint)param_1[iVar182] -
                                                        (uint)param_2[iVar182]) *
                                                        ((uint)param_1[iVar182] -
                                                        (uint)param_2[iVar182]);
                                    if (uVar129 != 0xd) {
                                      iVar182 = iVar128 + 0xe;
                                      iVar180 = iVar180 + ((uint)param_1[iVar181] -
                                                          (uint)param_2[iVar181]) *
                                                          ((uint)param_1[iVar181] -
                                                          (uint)param_2[iVar181]);
                                      iVar181 = iVar182;
                                      if (uVar129 != 0xe) {
                    /* try { // try from 003ab16c to 004ab16f has its CatchHandler @ 003ab120 */
                                        iVar181 = iVar128 + 0xf;
                                        iVar180 = iVar180 + ((uint)param_1[iVar182] -
                                                            (uint)param_2[iVar182]) *
                                                            ((uint)param_1[iVar182] -
                                                            (uint)param_2[iVar182]);
                                        if (uVar129 == 0x10) {
                    /* try { // try from 003ab18c to 004ab18f has its CatchHandler @ 003abccc */
                                          iVar180 = iVar180 + ((uint)param_1[iVar181] -
                                                              (uint)param_2[iVar181]) *
                                                              ((uint)param_1[iVar181] -
                                                              (uint)param_2[iVar181]);
                                          iVar181 = iVar128 + 0x10;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (uVar7 == uVar129) goto LAB_003ab418;
          }
                    /* try { // try from 003ab1ac to 004ab1af has its CatchHandler @ 003abd9c */
          uVar2 = ((uVar7 - uVar129) - 0x10 >> 4) + 1;
          iVar182 = uVar2 * 0x10;
          if (0xe < (uVar7 - 1) - uVar129) {
            iVar183 = 0;
            iVar139 = 0;
            iVar141 = 0;
            iVar145 = 0;
            uVar131 = 0;
            pbVar126 = param_2 + uVar4 + (long)iVar128;
            pbVar67 = param_1 + (long)iVar128 + uVar4;
            do {
              uVar149 = *(undefined8 *)(pbVar67 + 8);
              uVar146 = *(undefined8 *)pbVar67;
              uVar131 = uVar131 + 1;
              uVar162 = *(undefined8 *)(pbVar126 + 8);
              uVar160 = *(undefined8 *)pbVar126;
              bVar143 = (byte)((ulong)uVar146 >> 0x28);
              bVar133 = (byte)((ulong)uVar160 >> 8);
              bVar147 = (byte)((ulong)uVar160 >> 0x28);
              bVar134 = (byte)((ulong)uVar149 >> 8);
              bVar148 = (byte)((ulong)uVar149 >> 0x28);
              bVar142 = (byte)((ulong)uVar162 >> 8);
              bVar150 = (byte)((ulong)uVar162 >> 0x28);
              iVar163 = (uint)(byte)uVar146 -
                        ((CONCAT12(bVar133,(short)uVar160) & 0xff00ff) & 0xffff);
              iVar164 = (uint)(byte)((ulong)uVar146 >> 8) - (uint)bVar133;
              iVar165 = (uint)(byte)((ulong)uVar146 >> 0x10) - (uint)(byte)((ulong)uVar160 >> 0x10);
              iVar166 = (uint)(byte)((ulong)uVar146 >> 0x18) - (uint)(byte)((ulong)uVar160 >> 0x18);
                    /* try { // try from 003ab20c to 004ab20f has its CatchHandler @ 003abdac */
              iVar128 = (CONCAT12(bVar143,(ushort)(byte)((ulong)uVar146 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar147,(ushort)(byte)((ulong)uVar160 >> 0x20)) & 0xffff);
              iVar171 = (uint)bVar143 - (uint)bVar147;
              iVar135 = (uint)(byte)((ulong)uVar146 >> 0x30) - (uint)(byte)((ulong)uVar160 >> 0x30);
              iVar136 = (uint)(byte)((ulong)uVar146 >> 0x38) - (uint)(byte)((ulong)uVar160 >> 0x38);
              iVar152 = ((CONCAT12(bVar134,(short)uVar149) & 0xff00ff) & 0xffff) -
                        ((CONCAT12(bVar142,(short)uVar162) & 0xff00ff) & 0xffff);
              iVar153 = (uint)bVar134 - (uint)bVar142;
              iVar159 = (uint)(byte)((ulong)uVar149 >> 0x10) - (uint)(byte)((ulong)uVar162 >> 0x10);
              iVar161 = (uint)(byte)((ulong)uVar149 >> 0x18) - (uint)(byte)((ulong)uVar162 >> 0x18);
              iVar137 = (CONCAT12(bVar148,(ushort)(byte)((ulong)uVar149 >> 0x20)) & 0xffff) -
                        (CONCAT12(bVar150,(ushort)(byte)((ulong)uVar162 >> 0x20)) & 0xffff);
              iVar138 = (uint)bVar148 - (uint)bVar150;
              iVar140 = (uint)(byte)((ulong)uVar149 >> 0x30) - (uint)(byte)((ulong)uVar162 >> 0x30);
              iVar144 = (uint)(byte)((ulong)uVar149 >> 0x38) - (uint)(byte)((ulong)uVar162 >> 0x38);
              iVar183 = iVar183 + iVar163 * iVar163 + iVar128 * iVar128 + iVar152 * iVar152 +
                        iVar137 * iVar137;
              iVar139 = iVar139 + iVar164 * iVar164 + iVar171 * iVar171 + iVar153 * iVar153 +
                        iVar138 * iVar138;
              iVar141 = iVar141 + iVar165 * iVar165 + iVar135 * iVar135 + iVar159 * iVar159 +
                        iVar140 * iVar140;
              iVar145 = iVar145 + iVar166 * iVar166 + iVar136 * iVar136 + iVar161 * iVar161 +
                        iVar144 * iVar144;
              pbVar126 = pbVar126 + 0x10;
              pbVar67 = pbVar67 + 0x10;
            } while (uVar131 < uVar2);
            iVar181 = iVar181 + iVar182;
            iVar180 = iVar180 + iVar183 + iVar139 + iVar141 + iVar145;
            if (uVar7 - uVar129 == iVar182) goto LAB_003ab418;
          }
          iVar128 = iVar181 + 1;
          iVar180 = iVar180 + ((uint)param_1[iVar181] - (uint)param_2[iVar181]) *
                              ((uint)param_1[iVar181] - (uint)param_2[iVar181]);
          if (iVar128 < param_5) {
            iVar182 = iVar181 + 2;
            iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
            if (iVar182 < param_5) {
              iVar128 = iVar181 + 3;
              iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                  ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
              if (iVar128 < param_5) {
                iVar182 = iVar181 + 4;
                iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                    ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
                if (iVar182 < param_5) {
                  iVar128 = iVar181 + 5;
                    /* try { // try from 003ab2d0 to 004ab2d3 has its CatchHandler @ 003abd94 */
                  iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                      ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                  if (iVar128 < param_5) {
                    iVar182 = iVar181 + 6;
                    iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                        ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
                    if (iVar182 < param_5) {
                      iVar128 = iVar181 + 7;
                      iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                          ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                      if (iVar128 < param_5) {
                        iVar182 = iVar181 + 8;
                        iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                            ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
                        if (iVar182 < param_5) {
                          iVar128 = iVar181 + 9;
                          iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182]) *
                                              ((uint)param_1[iVar182] - (uint)param_2[iVar182]);
                          if (iVar128 < param_5) {
                            iVar182 = iVar181 + 10;
                    /* try { // try from 003ab374 to 004ab377 has its CatchHandler @ 003abdb4 */
                            iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]) *
                                                ((uint)param_1[iVar128] - (uint)param_2[iVar128]);
                            if (iVar182 < param_5) {
                              iVar128 = iVar181 + 0xb;
                              iVar180 = iVar180 + ((uint)param_1[iVar182] - (uint)param_2[iVar182])
                                                  * ((uint)param_1[iVar182] - (uint)param_2[iVar182]
                                                    );
                              if (iVar128 < param_5) {
                                iVar182 = iVar181 + 0xc;
                                iVar180 = iVar180 + ((uint)param_1[iVar128] - (uint)param_2[iVar128]
                                                    ) * ((uint)param_1[iVar128] -
                                                        (uint)param_2[iVar128]);
                                if (iVar182 < param_5) {
                                  iVar128 = iVar181 + 0xd;
                                  iVar180 = iVar180 + ((uint)param_1[iVar182] -
                                                      (uint)param_2[iVar182]) *
                                                      ((uint)param_1[iVar182] -
                                                      (uint)param_2[iVar182]);
                                  if (iVar128 < param_5) {
                                    iVar181 = iVar181 + 0xe;
                                    iVar180 = iVar180 + ((uint)param_1[iVar128] -
                                                        (uint)param_2[iVar128]) *
                                                        ((uint)param_1[iVar128] -
                                                        (uint)param_2[iVar128]);
                                    if (iVar181 < param_5) {
                                      iVar180 = iVar180 + ((uint)param_1[iVar181] -
                                                          (uint)param_2[iVar181]) *
                                                          ((uint)param_1[iVar181] -
                                                          (uint)param_2[iVar181]);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_003ab418:
                    /* try { // try from 003ab418 to 004ab4bf has its CatchHandler @ 003abd94 */
      param_6[lVar132] = iVar180;
      lVar132 = lVar132 + 1;
      param_2 = param_2 + param_3;
    } while (lVar132 != (ulong)(param_4 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003abb64 (4576 bytes) name=FUN_003abb64

void FUN_003abb64(undefined1 *param_1,undefined1 *param_2,long param_3,int param_4,int param_5,
                 int *param_6,long param_7)

{
  int iVar1;
  uint uVar2;
  int *piVar3;
  ulong uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint3 uVar9;
  uint3 uVar10;
  byte *pbVar11;
  byte *pbVar68;
  int iVar127;
  int *piVar128;
  uint uVar129;
  undefined8 *puVar130;
  undefined8 *puVar131;
  long lVar132;
  uint uVar133;
  long lVar134;
  undefined1 uVar135;
  undefined1 uVar136;
  byte bVar138;
  byte bVar139;
  int iVar137;
  int iVar140;
  int iVar141;
  byte bVar144;
  byte bVar145;
  int iVar142;
  int iVar143;
  int iVar146;
  int iVar147;
  int iVar148;
  undefined8 uVar149;
  int iVar150;
  int iVar151;
  byte bVar153;
  byte bVar154;
  undefined8 uVar152;
  int iVar155;
  byte bVar157;
  int iVar156;
  int iVar158;
  byte bVar160;
  byte bVar161;
  int iVar159;
  int iVar162;
  byte bVar164;
  int iVar163;
  int iVar165;
  byte bVar166;
  byte bVar167;
  byte bVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  int iVar172;
  int iVar173;
  int iVar174;
  int iVar176;
  int iVar177;
  undefined8 uVar175;
  int iVar178;
  int iVar179;
  int iVar181;
  int iVar182;
  undefined8 uVar180;
  int iVar183;
  int iVar184;
  int iVar185;
  int iVar186;
  int iVar187;
  int iVar188;
  int iVar189;
  int iVar190;
  int iVar191;
  int iVar192;
  int iVar193;
  int iVar194;
  int iVar195;
  int iVar196;
  int iVar197;
  int iVar198;
  int iVar199;
  int iVar200;
  int iVar201;
  int iVar202;
  int iVar203;
  int iVar204;
  int iVar205;
  int iVar206;
  int iVar207;
  int iVar208;
  int iVar209;
  int iVar210;
  int iVar211;
  int iVar212;
  int iVar213;
  int iVar214;
  int iVar215;
  int iVar216;
  int iVar217;
  int iVar218;
  int iVar219;
  int iVar220;
  int iVar221;
  undefined1 *puVar12;
  undefined1 *puVar13;
  byte *pbVar14;
  byte *pbVar15;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  undefined1 *puVar39;
  undefined1 *puVar40;
  undefined1 *puVar41;
  undefined1 *puVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  byte *pbVar46;
  byte *pbVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar63;
  byte *pbVar64;
  byte *pbVar65;
  byte *pbVar66;
  undefined1 *puVar67;
  undefined1 *puVar69;
  undefined1 *puVar70;
  byte *pbVar71;
  undefined1 *puVar72;
  undefined1 *puVar73;
  byte *pbVar74;
  byte *pbVar75;
  byte *pbVar76;
  byte *pbVar77;
  byte *pbVar78;
  byte *pbVar79;
  byte *pbVar80;
  byte *pbVar81;
  byte *pbVar82;
  byte *pbVar83;
  byte *pbVar84;
  byte *pbVar85;
  byte *pbVar86;
  byte *pbVar87;
  byte *pbVar88;
  byte *pbVar89;
  byte *pbVar90;
  byte *pbVar91;
  byte *pbVar92;
  byte *pbVar93;
  byte *pbVar94;
  byte *pbVar95;
  byte *pbVar96;
  byte *pbVar97;
  undefined1 *puVar98;
  undefined1 *puVar99;
  undefined1 *puVar100;
  undefined1 *puVar101;
  byte *pbVar102;
  byte *pbVar103;
  byte *pbVar104;
  byte *pbVar105;
  byte *pbVar106;
  byte *pbVar107;
  byte *pbVar108;
  byte *pbVar109;
  byte *pbVar110;
  byte *pbVar111;
  byte *pbVar112;
  byte *pbVar113;
  byte *pbVar114;
  byte *pbVar115;
  byte *pbVar116;
  byte *pbVar117;
  byte *pbVar118;
  byte *pbVar119;
  byte *pbVar120;
  byte *pbVar121;
  byte *pbVar122;
  byte *pbVar123;
  byte *pbVar124;
  byte *pbVar125;
  undefined1 *puVar126;
  
  if (param_7 == 0) {
    if (0 < param_4) {
      uVar129 = param_5 - 4U >> 2;
      iVar218 = param_5 + -3;
      uVar6 = (uVar129 - 0xf >> 4) + 1;
      iVar1 = uVar129 + 1;
      piVar3 = param_6 + (ulong)(param_4 - 1) + 1;
      iVar5 = iVar1 * 4;
      lVar134 = 0;
      puVar126 = param_2;
      if (iVar218 < 1) goto LAB_003acd1c;
LAB_003ac4bc:
      piVar128 = param_6;
      iVar127 = iVar5;
      if (param_5 - 4U < 0x3c) {
        iVar220 = 0;
        iVar219 = 0;
      }
      else {
        iVar221 = 0;
        iVar141 = 0;
        iVar219 = 0;
        iVar220 = 0;
        uVar129 = 0;
        puVar67 = puVar126;
        puVar12 = param_1;
        do {
          uVar135 = *puVar12;
          pbVar16 = puVar12 + 1;
          pbVar14 = puVar12 + 2;
          puVar13 = puVar12 + 3;
          bVar138 = puVar12[4];
          pbVar71 = puVar12 + 5;
          pbVar120 = puVar12 + 6;
          bVar166 = puVar12[7];
          pbVar66 = puVar12 + 8;
          pbVar65 = puVar12 + 9;
          pbVar64 = puVar12 + 10;
          pbVar63 = puVar12 + 0xb;
          pbVar62 = puVar12 + 0xc;
          pbVar61 = puVar12 + 0xd;
          pbVar60 = puVar12 + 0xe;
          pbVar59 = puVar12 + 0xf;
          pbVar58 = puVar12 + 0x10;
          pbVar57 = puVar12 + 0x11;
          pbVar56 = puVar12 + 0x12;
          pbVar55 = puVar12 + 0x13;
          pbVar54 = puVar12 + 0x14;
          pbVar53 = puVar12 + 0x15;
          pbVar52 = puVar12 + 0x16;
          pbVar51 = puVar12 + 0x17;
          pbVar50 = puVar12 + 0x18;
          pbVar49 = puVar12 + 0x19;
          pbVar48 = puVar12 + 0x1a;
          pbVar46 = puVar12 + 0x1b;
          pbVar47 = puVar12 + 0x1c;
          pbVar45 = puVar12 + 0x1d;
          pbVar44 = puVar12 + 0x1e;
          pbVar43 = puVar12 + 0x1f;
          puVar39 = puVar12 + 0x20;
          puVar40 = puVar12 + 0x21;
          puVar41 = puVar12 + 0x22;
          puVar42 = puVar12 + 0x23;
          bVar144 = puVar12[0x24];
          bVar154 = puVar12[0x25];
          bVar161 = puVar12[0x26];
          bVar167 = puVar12[0x27];
          pbVar24 = puVar12 + 0x28;
          pbVar36 = puVar12 + 0x29;
          pbVar35 = puVar12 + 0x2a;
          pbVar33 = puVar12 + 0x2b;
          pbVar32 = puVar12 + 0x2c;
          pbVar31 = puVar12 + 0x2d;
          pbVar30 = puVar12 + 0x2e;
          pbVar29 = puVar12 + 0x2f;
          pbVar28 = puVar12 + 0x30;
          pbVar27 = puVar12 + 0x31;
          pbVar26 = puVar12 + 0x32;
          pbVar25 = puVar12 + 0x33;
          pbVar34 = puVar12 + 0x34;
          pbVar23 = puVar12 + 0x35;
          pbVar22 = puVar12 + 0x36;
          pbVar21 = puVar12 + 0x37;
          pbVar20 = puVar12 + 0x38;
          pbVar19 = puVar12 + 0x39;
          pbVar18 = puVar12 + 0x3a;
          pbVar17 = puVar12 + 0x3b;
          pbVar15 = puVar12 + 0x3c;
          pbVar11 = puVar12 + 0x3d;
          pbVar37 = puVar12 + 0x3e;
          pbVar38 = puVar12 + 0x3f;
          puVar12 = puVar12 + 0x40;
          uVar129 = uVar129 + 1;
          uVar136 = *puVar67;
          puVar69 = puVar67 + 1;
          puVar70 = puVar67 + 2;
          puVar72 = puVar67 + 3;
          bVar139 = puVar67[4];
          bVar153 = puVar67[5];
          bVar160 = puVar67[6];
          puVar73 = puVar67 + 7;
          pbVar121 = puVar67 + 8;
          pbVar114 = puVar67 + 9;
          pbVar119 = puVar67 + 10;
          pbVar125 = puVar67 + 0xb;
          pbVar117 = puVar67 + 0xc;
          pbVar116 = puVar67 + 0xd;
          pbVar115 = puVar67 + 0xe;
          pbVar68 = puVar67 + 0xf;
          pbVar113 = puVar67 + 0x10;
          pbVar118 = puVar67 + 0x11;
          pbVar111 = puVar67 + 0x12;
          pbVar110 = puVar67 + 0x13;
          pbVar109 = puVar67 + 0x14;
          pbVar108 = puVar67 + 0x15;
          pbVar107 = puVar67 + 0x16;
          pbVar106 = puVar67 + 0x17;
          pbVar105 = puVar67 + 0x18;
          pbVar104 = puVar67 + 0x19;
          pbVar103 = puVar67 + 0x1a;
          pbVar102 = puVar67 + 0x1b;
          pbVar97 = puVar67 + 0x1c;
          pbVar95 = puVar67 + 0x1d;
          pbVar122 = puVar67 + 0x1e;
          pbVar124 = puVar67 + 0x1f;
          puVar98 = puVar67 + 0x20;
          puVar100 = puVar67 + 0x21;
          puVar101 = puVar67 + 0x22;
          puVar99 = puVar67 + 0x23;
          bVar145 = puVar67[0x24];
          bVar157 = puVar67[0x25];
          bVar164 = puVar67[0x26];
          bVar168 = puVar67[0x27];
          pbVar96 = puVar67 + 0x28;
          pbVar94 = puVar67 + 0x29;
          pbVar93 = puVar67 + 0x2a;
          pbVar92 = puVar67 + 0x2b;
          pbVar91 = puVar67 + 0x2c;
          pbVar90 = puVar67 + 0x2d;
          pbVar89 = puVar67 + 0x2e;
          pbVar88 = puVar67 + 0x2f;
          pbVar87 = puVar67 + 0x30;
          pbVar86 = puVar67 + 0x31;
          pbVar85 = puVar67 + 0x32;
          pbVar84 = puVar67 + 0x33;
          pbVar83 = puVar67 + 0x34;
          pbVar82 = puVar67 + 0x35;
          pbVar81 = puVar67 + 0x36;
          pbVar80 = puVar67 + 0x37;
          pbVar79 = puVar67 + 0x38;
          pbVar78 = puVar67 + 0x39;
          pbVar77 = puVar67 + 0x3a;
          pbVar76 = puVar67 + 0x3b;
          pbVar75 = puVar67 + 0x3c;
          pbVar74 = puVar67 + 0x3d;
          pbVar123 = puVar67 + 0x3e;
          pbVar112 = puVar67 + 0x3f;
          puVar67 = puVar67 + 0x40;
          uVar9 = CONCAT12(*pbVar125,CONCAT11(*puVar73,*puVar72));
          iVar188 = MP_INT_ABS(((CONCAT12(bVar138,CONCAT11(bVar138,uVar135)) & 0xff00ff) & 0xffff) -
                               ((CONCAT12(bVar139,CONCAT11(bVar139,uVar136)) & 0xff00ff) & 0xffff));
          iVar190 = MP_INT_ABS((uint)bVar138 - (uint)bVar139);
          iVar192 = MP_INT_ABS((uint)*pbVar66 - (uint)*pbVar121);
          iVar194 = MP_INT_ABS((uint)*pbVar62 - (uint)*pbVar117);
          iVar202 = MP_INT_ABS((CONCAT12(*pbVar71,(ushort)*pbVar16) & 0xffff) -
                               ((CONCAT12(bVar153,CONCAT11(bVar153,*puVar69)) & 0xff00ff) & 0xffff))
          ;
          iVar204 = MP_INT_ABS((uint)*pbVar71 - (uint)bVar153);
          iVar158 = MP_INT_ABS((CONCAT12(*pbVar61,(ushort)*pbVar65) & 0xffff) - (uint)*pbVar114);
          iVar162 = MP_INT_ABS((uint)*pbVar61 - (uint)*pbVar116);
          iVar146 = MP_INT_ABS((CONCAT12(*pbVar54,(ushort)*pbVar58) & 0xffff) -
                               (CONCAT12(*pbVar109,(ushort)*pbVar113) & 0xffff));
          iVar170 = MP_INT_ABS((uint)*pbVar54 - (uint)*pbVar109);
          iVar172 = MP_INT_ABS((uint)*pbVar50 - (uint)*pbVar105);
          iVar174 = MP_INT_ABS((uint)*pbVar47 - (uint)*pbVar97);
          iVar206 = MP_INT_ABS((CONCAT12(*pbVar120,(ushort)*pbVar14) & 0xffff) -
                               ((CONCAT12(bVar160,CONCAT11(bVar160,*puVar70)) & 0xff00ff) & 0xffff))
          ;
          iVar207 = MP_INT_ABS((uint)*pbVar120 - (uint)bVar160);
          iVar208 = MP_INT_ABS((CONCAT12(*pbVar60,(ushort)*pbVar64) & 0xffff) - (uint)*pbVar119);
          iVar209 = MP_INT_ABS((uint)*pbVar60 - (uint)*pbVar115);
          iVar214 = MP_INT_ABS((CONCAT12(*pbVar53,(ushort)*pbVar57) & 0xffff) -
                               (CONCAT12(*pbVar108,(ushort)*pbVar118) & 0xffff));
          iVar215 = MP_INT_ABS((uint)*pbVar53 - (uint)*pbVar108);
          iVar216 = MP_INT_ABS((uint)*pbVar49 - (uint)*pbVar104);
          iVar217 = MP_INT_ABS((uint)*pbVar45 - (uint)*pbVar95);
          iVar200 = MP_INT_ABS(((CONCAT12(bVar144,CONCAT11(bVar144,*puVar39)) & 0xff00ff) & 0xffff)
                               - ((CONCAT12(bVar145,CONCAT11(bVar145,*puVar98)) & 0xff00ff) & 0xffff
                                 ));
          iVar201 = MP_INT_ABS((uint)bVar144 - (uint)bVar145);
          iVar155 = MP_INT_ABS((uint)*pbVar24 - (uint)*pbVar96);
          iVar156 = MP_INT_ABS((uint)*pbVar32 - (uint)*pbVar91);
          iVar196 = MP_INT_ABS(((CONCAT12(bVar154,CONCAT11(bVar154,*puVar40)) & 0xff00ff) & 0xffff)
                               - ((CONCAT12(bVar157,CONCAT11(bVar157,*puVar100)) & 0xff00ff) &
                                 0xffff));
          iVar198 = MP_INT_ABS((uint)bVar154 - (uint)bVar157);
          iVar8 = MP_INT_ABS((uint)*pbVar36 - (uint)*pbVar94);
          iVar150 = MP_INT_ABS((uint)*pbVar31 - (uint)*pbVar90);
          iVar203 = MP_INT_ABS(((CONCAT12(bVar166,CONCAT11(bVar166,*puVar13)) & 0xff00ff) & 0xffff)
                               - (uVar9 & 0xff));
          iVar205 = MP_INT_ABS((uint)bVar166 - ((uVar9 & 0xff00) >> 8));
          iVar159 = MP_INT_ABS((uint)*pbVar63 - (uint)*pbVar125);
          iVar163 = MP_INT_ABS((uint)*pbVar59 - (uint)*pbVar68);
          iVar210 = MP_INT_ABS((CONCAT12(*pbVar52,(ushort)*pbVar56) & 0xffff) -
                               (CONCAT12(*pbVar107,(ushort)*pbVar111) & 0xffff));
          iVar211 = MP_INT_ABS((uint)*pbVar52 - (uint)*pbVar107);
          iVar212 = MP_INT_ABS((uint)*pbVar48 - (uint)*pbVar103);
          iVar213 = MP_INT_ABS((uint)*pbVar44 - (uint)*pbVar122);
          iVar165 = MP_INT_ABS((CONCAT12(*pbVar51,(ushort)*pbVar55) & 0xffff) -
                               (CONCAT12(*pbVar106,(ushort)*pbVar110) & 0xffff));
          iVar137 = MP_INT_ABS((uint)*pbVar51 - (uint)*pbVar106);
          iVar140 = MP_INT_ABS((uint)*pbVar46 - (uint)*pbVar102);
          iVar142 = MP_INT_ABS((uint)*pbVar43 - (uint)*pbVar124);
          iVar184 = MP_INT_ABS((CONCAT12(*pbVar34,(ushort)*pbVar28) & 0xffff) -
                               (CONCAT12(*pbVar83,(ushort)*pbVar87) & 0xffff));
          iVar185 = MP_INT_ABS((uint)*pbVar34 - (uint)*pbVar83);
          iVar186 = MP_INT_ABS((uint)*pbVar20 - (uint)*pbVar79);
          iVar187 = MP_INT_ABS((uint)*pbVar15 - (uint)*pbVar75);
          iVar189 = MP_INT_ABS(((CONCAT12(bVar161,CONCAT11(bVar161,*puVar41)) & 0xff00ff) & 0xffff)
                               - ((CONCAT12(bVar164,CONCAT11(bVar164,*puVar101)) & 0xff00ff) &
                                 0xffff));
          iVar191 = MP_INT_ABS((uint)bVar161 - (uint)bVar164);
          iVar193 = MP_INT_ABS((uint)*pbVar35 - (uint)*pbVar93);
          iVar195 = MP_INT_ABS((uint)*pbVar30 - (uint)*pbVar89);
          iVar182 = MP_INT_ABS((CONCAT12(*pbVar23,(ushort)*pbVar27) & 0xffff) -
                               (CONCAT12(*pbVar82,(ushort)*pbVar86) & 0xffff));
          iVar183 = MP_INT_ABS((uint)*pbVar23 - (uint)*pbVar82);
          iVar143 = MP_INT_ABS((uint)*pbVar19 - (uint)*pbVar78);
          iVar147 = MP_INT_ABS((uint)*pbVar11 - (uint)*pbVar74);
          iVar197 = MP_INT_ABS(((CONCAT12(bVar167,CONCAT11(bVar167,*puVar42)) & 0xff00ff) & 0xffff)
                               - ((CONCAT12(bVar168,CONCAT11(bVar168,*puVar99)) & 0xff00ff) & 0xffff
                                 ));
          iVar199 = MP_INT_ABS((uint)bVar167 - (uint)bVar168);
          iVar148 = MP_INT_ABS((uint)*pbVar33 - (uint)*pbVar92);
          iVar151 = MP_INT_ABS((uint)*pbVar29 - (uint)*pbVar88);
          iVar177 = MP_INT_ABS((CONCAT12(*pbVar22,(ushort)*pbVar26) & 0xffff) -
                               (CONCAT12(*pbVar81,(ushort)*pbVar85) & 0xffff));
          iVar178 = MP_INT_ABS((uint)*pbVar22 - (uint)*pbVar81);
          iVar179 = MP_INT_ABS((uint)*pbVar18 - (uint)*pbVar77);
          iVar181 = MP_INT_ABS((uint)*pbVar37 - (uint)*pbVar123);
          iVar169 = MP_INT_ABS((CONCAT12(*pbVar21,(ushort)*pbVar25) & 0xffff) -
                               (CONCAT12(*pbVar80,(ushort)*pbVar84) & 0xffff));
          iVar171 = MP_INT_ABS((uint)*pbVar21 - (uint)*pbVar80);
          iVar173 = MP_INT_ABS((uint)*pbVar17 - (uint)*pbVar76);
          iVar176 = MP_INT_ABS((uint)*pbVar38 - (uint)*pbVar112);
          iVar221 = iVar184 + iVar182 + iVar177 + iVar169 +
                    iVar200 + iVar196 + iVar189 + iVar197 +
                    iVar146 + iVar214 + iVar210 + iVar165 +
                    iVar188 + iVar202 + iVar206 + iVar203 + iVar221;
          iVar141 = iVar185 + iVar183 + iVar178 + iVar171 +
                    iVar201 + iVar198 + iVar191 + iVar199 +
                    iVar170 + iVar215 + iVar211 + iVar137 +
                    iVar190 + iVar204 + iVar207 + iVar205 + iVar141;
          iVar219 = iVar186 + iVar143 + iVar179 + iVar173 +
                    iVar155 + iVar8 + iVar193 + iVar148 +
                    iVar172 + iVar216 + iVar212 + iVar140 +
                    iVar192 + iVar158 + iVar208 + iVar159 + iVar219;
          iVar220 = iVar187 + iVar147 + iVar181 + iVar176 +
                    iVar156 + iVar150 + iVar195 + iVar151 +
                    iVar174 + iVar217 + iVar213 + iVar142 +
                    iVar194 + iVar162 + iVar209 + iVar163 + iVar220;
        } while (uVar129 < uVar6);
        iVar220 = iVar221 + iVar141 + iVar219 + iVar220;
        iVar219 = uVar6 * 0x40;
        if (uVar6 * 0x10 == iVar1) goto LAB_003ac6e0;
      }
      pbVar34 = puVar126 + iVar219;
      pbVar11 = param_1 + iVar219;
      do {
        iVar219 = iVar219 + 4;
        uVar7 = (int)((uint)*pbVar11 - (uint)*pbVar34) >> 0x1f;
        uVar129 = (int)((uint)pbVar11[1] - (uint)pbVar34[1]) >> 0x1f;
        uVar2 = (int)((uint)pbVar11[2] - (uint)pbVar34[2]) >> 0x1f;
        uVar133 = (int)((uint)pbVar11[3] - (uint)pbVar34[3]) >> 0x1f;
        iVar220 = iVar220 + (((uint)*pbVar11 - (uint)*pbVar34 ^ uVar7) - uVar7) +
                            (((uint)pbVar11[1] - (uint)pbVar34[1] ^ uVar129) - uVar129) +
                            (((uint)pbVar11[2] - (uint)pbVar34[2] ^ uVar2) - uVar2) +
                            (((uint)pbVar11[3] - (uint)pbVar34[3] ^ uVar133) - uVar133);
        pbVar34 = pbVar34 + 4;
        pbVar11 = pbVar11 + 4;
      } while (iVar219 < iVar218);
LAB_003ac6e0:
      do {
        if (iVar127 < param_5) {
          lVar132 = (long)iVar127;
          uVar7 = param_5 - iVar127;
          uVar129 = -((int)param_1 + iVar127) & 0xf;
          uVar4 = (ulong)uVar129;
          if (uVar7 < uVar129) {
            uVar4 = (ulong)uVar7;
          }
          if (uVar7 < 0x11) {
            uVar4 = (ulong)uVar7;
          }
          uVar129 = (uint)uVar4;
          if (uVar129 != 0) {
            iVar219 = iVar127 + 1;
            uVar2 = (int)((uint)(byte)param_1[lVar132] - (uint)(byte)puVar126[lVar132]) >> 0x1f;
            iVar220 = iVar220 + (((uint)(byte)param_1[lVar132] - (uint)(byte)puVar126[lVar132] ^
                                 uVar2) - uVar2);
            if (uVar129 != 1) {
              iVar221 = iVar127 + 2;
              uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >> 0x1f;
              iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219] ^
                                   uVar2) - uVar2);
              iVar219 = iVar221;
              if (uVar129 != 2) {
                iVar219 = iVar127 + 3;
                uVar2 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221]) >> 0x1f;
                iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221] ^
                                     uVar2) - uVar2);
                if (uVar129 != 3) {
                  iVar221 = iVar127 + 4;
                  uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >>
                          0x1f;
                  iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]
                                       ^ uVar2) - uVar2);
                  iVar219 = iVar221;
                  if (uVar129 != 4) {
                    iVar219 = iVar127 + 5;
                    uVar2 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221]) >>
                            0x1f;
                    iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                          (uint)(byte)puVar126[iVar221] ^ uVar2) - uVar2);
                    if (uVar129 != 5) {
                      iVar221 = iVar127 + 6;
                      uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >>
                              0x1f;
                      iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                            (uint)(byte)puVar126[iVar219] ^ uVar2) - uVar2);
                      iVar219 = iVar221;
                      if (uVar129 != 6) {
                        iVar219 = iVar127 + 7;
                        uVar2 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221])
                                >> 0x1f;
                        iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                              (uint)(byte)puVar126[iVar221] ^ uVar2) - uVar2);
                        if (uVar129 != 7) {
                          iVar221 = iVar127 + 8;
                          uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]
                                       ) >> 0x1f;
                          iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                (uint)(byte)puVar126[iVar219] ^ uVar2) - uVar2);
                          iVar219 = iVar221;
                          if (uVar129 != 8) {
                            iVar219 = iVar127 + 9;
                            uVar2 = (int)((uint)(byte)param_1[iVar221] -
                                         (uint)(byte)puVar126[iVar221]) >> 0x1f;
                            iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                  (uint)(byte)puVar126[iVar221] ^ uVar2) - uVar2);
                            if (uVar129 != 9) {
                              iVar221 = iVar127 + 10;
                              uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                           (uint)(byte)puVar126[iVar219]) >> 0x1f;
                              iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                    (uint)(byte)puVar126[iVar219] ^ uVar2) - uVar2);
                              iVar219 = iVar221;
                              if (uVar129 != 10) {
                                iVar219 = iVar127 + 0xb;
                                uVar2 = (int)((uint)(byte)param_1[iVar221] -
                                             (uint)(byte)puVar126[iVar221]) >> 0x1f;
                                iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                      (uint)(byte)puVar126[iVar221] ^ uVar2) - uVar2
                                                    );
                                if (uVar129 != 0xb) {
                                  iVar221 = iVar127 + 0xc;
                                  uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                               (uint)(byte)puVar126[iVar219]) >> 0x1f;
                                  iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                        (uint)(byte)puVar126[iVar219] ^ uVar2) -
                                                      uVar2);
                                  iVar219 = iVar221;
                                  if (uVar129 != 0xc) {
                                    iVar219 = iVar127 + 0xd;
                                    uVar2 = (int)((uint)(byte)param_1[iVar221] -
                                                 (uint)(byte)puVar126[iVar221]) >> 0x1f;
                                    iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                          (uint)(byte)puVar126[iVar221] ^ uVar2) -
                                                        uVar2);
                                    if (uVar129 != 0xd) {
                                      iVar221 = iVar127 + 0xe;
                                      uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                                   (uint)(byte)puVar126[iVar219]) >> 0x1f;
                                      iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                            (uint)(byte)puVar126[iVar219] ^ uVar2) -
                                                          uVar2);
                                      iVar219 = iVar221;
                                      if (uVar129 != 0xe) {
                                        iVar219 = iVar127 + 0xf;
                                        uVar2 = (int)((uint)(byte)param_1[iVar221] -
                                                     (uint)(byte)puVar126[iVar221]) >> 0x1f;
                                        iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                              (uint)(byte)puVar126[iVar221] ^ uVar2)
                                                            - uVar2);
                                        if (uVar129 == 0x10) {
                                          uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                                       (uint)(byte)puVar126[iVar219]) >> 0x1f;
                                          iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                                (uint)(byte)puVar126[iVar219] ^
                                                               uVar2) - uVar2);
                                          iVar219 = iVar127 + 0x10;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            iVar127 = iVar219;
            if (uVar129 == uVar7) goto LAB_003acd00;
          }
          uVar2 = ((uVar7 - uVar129) - 0x10 >> 4) + 1;
          iVar219 = uVar2 * 0x10;
          if (0xe < (uVar7 - 1) - uVar129) {
            iVar221 = 0;
            iVar141 = 0;
            iVar143 = 0;
            iVar147 = 0;
            uVar133 = 0;
            puVar130 = (undefined8 *)(param_1 + uVar4 + lVar132);
            puVar131 = (undefined8 *)(param_2 + lVar132 + lVar134 + uVar4);
            do {
              uVar152 = puVar130[1];
              uVar149 = *puVar130;
              uVar133 = uVar133 + 1;
              uVar180 = puVar131[1];
              uVar175 = *puVar131;
              bVar138 = (byte)((ulong)uVar149 >> 8);
              bVar154 = (byte)((ulong)uVar149 >> 0x28);
              bVar139 = (byte)((ulong)uVar175 >> 8);
              bVar153 = (byte)((ulong)uVar175 >> 0x18);
              bVar157 = (byte)((ulong)uVar175 >> 0x28);
              bVar144 = (byte)((ulong)uVar152 >> 8);
              bVar160 = (byte)((ulong)uVar152 >> 0x28);
              bVar145 = (byte)((ulong)uVar180 >> 8);
              bVar161 = (byte)((ulong)uVar180 >> 0x28);
              iVar140 = MP_INT_ABS(((CONCAT12(bVar138,(short)uVar149) & 0xff00ff) & 0xffff) -
                                   (CONCAT12(bVar139,(ushort)(byte)uVar175) & 0xffff));
              iVar142 = MP_INT_ABS((uint)bVar138 - (uint)bVar139);
              iVar146 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x10) -
                                   (CONCAT12(bVar153,(ushort)(byte)((ulong)uVar175 >> 0x10)) &
                                   0xffff));
              iVar169 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x18) - (uint)bVar153);
              iVar158 = MP_INT_ABS((CONCAT12(bVar154,(ushort)(byte)((ulong)uVar149 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar157,(ushort)(byte)((ulong)uVar175 >> 0x20
                                                                             )) & 0xffff));
              iVar159 = MP_INT_ABS((uint)bVar154 - (uint)bVar157);
              iVar162 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x30) -
                                   (uint)(byte)((ulong)uVar175 >> 0x30));
              iVar163 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x38) -
                                   (uint)(byte)((ulong)uVar175 >> 0x38));
              iVar165 = MP_INT_ABS(((CONCAT12(bVar144,(short)uVar152) & 0xff00ff) & 0xffff) -
                                   ((CONCAT12(bVar145,(short)uVar180) & 0xff00ff) & 0xffff));
              iVar137 = MP_INT_ABS((uint)bVar144 - (uint)bVar145);
              iVar8 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x10) -
                                 (uint)(byte)((ulong)uVar180 >> 0x10));
              iVar148 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x18) -
                                   (uint)(byte)((ulong)uVar180 >> 0x18));
              iVar150 = MP_INT_ABS((CONCAT12(bVar160,(ushort)(byte)((ulong)uVar152 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar161,(ushort)(byte)((ulong)uVar180 >> 0x20
                                                                             )) & 0xffff));
              iVar151 = MP_INT_ABS((uint)bVar160 - (uint)bVar161);
              iVar155 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x30) -
                                   (uint)(byte)((ulong)uVar180 >> 0x30));
              iVar156 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x38) -
                                   (uint)(byte)((ulong)uVar180 >> 0x38));
              iVar221 = iVar150 + iVar165 + iVar158 + iVar140 + iVar221;
              iVar141 = iVar151 + iVar137 + iVar159 + iVar142 + iVar141;
              iVar143 = iVar155 + iVar8 + iVar162 + iVar146 + iVar143;
              iVar147 = iVar156 + iVar148 + iVar163 + iVar169 + iVar147;
              puVar130 = puVar130 + 2;
              puVar131 = puVar131 + 2;
            } while (uVar133 < uVar2);
            iVar127 = iVar127 + iVar219;
            iVar220 = iVar220 + iVar221 + iVar141 + iVar143 + iVar147;
            if (iVar219 == uVar7 - uVar129) goto LAB_003acd00;
          }
          iVar219 = iVar127 + 1;
          uVar129 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)puVar126[iVar127]) >> 0x1f;
          iVar220 = iVar220 + (((uint)(byte)param_1[iVar127] - (uint)(byte)puVar126[iVar127] ^
                               uVar129) - uVar129);
          if (iVar219 < param_5) {
            iVar221 = iVar127 + 2;
            uVar129 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >> 0x1f;
            iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219] ^
                                 uVar129) - uVar129);
            if (iVar221 < param_5) {
              iVar219 = iVar127 + 3;
              uVar129 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221]) >> 0x1f;
              iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221] ^
                                   uVar129) - uVar129);
              if (iVar219 < param_5) {
                iVar221 = iVar127 + 4;
                uVar129 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >>
                          0x1f;
                iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219] ^
                                     uVar129) - uVar129);
                if (iVar221 < param_5) {
                  iVar219 = iVar127 + 5;
                  uVar129 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221]) >>
                            0x1f;
                  iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221]
                                       ^ uVar129) - uVar129);
                  if (iVar219 < param_5) {
                    iVar221 = iVar127 + 6;
                    uVar129 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]) >>
                              0x1f;
                    iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                          (uint)(byte)puVar126[iVar219] ^ uVar129) - uVar129);
                    if (iVar221 < param_5) {
                      iVar219 = iVar127 + 7;
                      uVar129 = (int)((uint)(byte)param_1[iVar221] - (uint)(byte)puVar126[iVar221])
                                >> 0x1f;
                      iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                            (uint)(byte)puVar126[iVar221] ^ uVar129) - uVar129);
                      if (iVar219 < param_5) {
                        iVar221 = iVar127 + 8;
                        uVar129 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)puVar126[iVar219]
                                       ) >> 0x1f;
                        iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                              (uint)(byte)puVar126[iVar219] ^ uVar129) - uVar129);
                        if (iVar221 < param_5) {
                          iVar219 = iVar127 + 9;
                          uVar129 = (int)((uint)(byte)param_1[iVar221] -
                                         (uint)(byte)puVar126[iVar221]) >> 0x1f;
                          iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                (uint)(byte)puVar126[iVar221] ^ uVar129) - uVar129);
                          if (iVar219 < param_5) {
                            iVar221 = iVar127 + 10;
                            uVar129 = (int)((uint)(byte)param_1[iVar219] -
                                           (uint)(byte)puVar126[iVar219]) >> 0x1f;
                            iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                  (uint)(byte)puVar126[iVar219] ^ uVar129) - uVar129
                                                );
                            if (iVar221 < param_5) {
                              iVar219 = iVar127 + 0xb;
                              uVar129 = (int)((uint)(byte)param_1[iVar221] -
                                             (uint)(byte)puVar126[iVar221]) >> 0x1f;
                              iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                    (uint)(byte)puVar126[iVar221] ^ uVar129) -
                                                  uVar129);
                              if (iVar219 < param_5) {
                                iVar221 = iVar127 + 0xc;
                                uVar129 = (int)((uint)(byte)param_1[iVar219] -
                                               (uint)(byte)puVar126[iVar219]) >> 0x1f;
                                iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                      (uint)(byte)puVar126[iVar219] ^ uVar129) -
                                                    uVar129);
                                if (iVar221 < param_5) {
                                  iVar219 = iVar127 + 0xd;
                                  uVar129 = (int)((uint)(byte)param_1[iVar221] -
                                                 (uint)(byte)puVar126[iVar221]) >> 0x1f;
                                  iVar220 = iVar220 + (((uint)(byte)param_1[iVar221] -
                                                        (uint)(byte)puVar126[iVar221] ^ uVar129) -
                                                      uVar129);
                                  if (iVar219 < param_5) {
                                    iVar127 = iVar127 + 0xe;
                                    uVar129 = (int)((uint)(byte)param_1[iVar219] -
                                                   (uint)(byte)puVar126[iVar219]) >> 0x1f;
                                    iVar220 = iVar220 + (((uint)(byte)param_1[iVar219] -
                                                          (uint)(byte)puVar126[iVar219] ^ uVar129) -
                                                        uVar129);
                                    if (iVar127 < param_5) {
                                      uVar129 = (int)((uint)(byte)param_1[iVar127] -
                                                     (uint)(byte)puVar126[iVar127]) >> 0x1f;
                                      iVar220 = iVar220 + (((uint)(byte)param_1[iVar127] -
                                                            (uint)(byte)puVar126[iVar127] ^ uVar129)
                                                          - uVar129);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
LAB_003acd00:
        param_6 = piVar128 + 1;
        *piVar128 = iVar220;
        puVar126 = puVar126 + param_3;
        if (param_6 == piVar3) {
          return;
        }
        lVar134 = (long)puVar126 - (long)param_2;
        if (0 < iVar218) goto LAB_003ac4bc;
LAB_003acd1c:
        iVar220 = 0;
        piVar128 = param_6;
        iVar127 = 0;
      } while( true );
    }
  }
  else if (0 < param_4) {
    uVar6 = param_5 - 4U >> 2;
    iVar1 = uVar6 + 1;
    uVar6 = (uVar6 - 0xf >> 4) + 1;
    lVar134 = 0;
    iVar5 = iVar1 * 4;
    do {
      iVar218 = 0x7fffffff;
      if (*(char *)(param_7 + lVar134) != '\0') {
        if (param_5 + -3 < 1) {
          iVar218 = 0;
          iVar127 = 0;
        }
        else {
          iVar127 = iVar5;
          if (param_5 - 4U < 0x3c) {
            iVar218 = 0;
            iVar219 = 0;
          }
          else {
            iVar218 = 0;
            iVar219 = 0;
            iVar220 = 0;
            iVar221 = 0;
            uVar129 = 0;
            puVar126 = param_2;
            puVar67 = param_1;
            do {
              uVar135 = *puVar67;
              pbVar11 = puVar67 + 1;
              puVar12 = puVar67 + 2;
              puVar13 = puVar67 + 3;
              bVar138 = puVar67[4];
              pbVar14 = puVar67 + 5;
              bVar157 = puVar67[6];
              bVar164 = puVar67[7];
              pbVar15 = puVar67 + 8;
              pbVar16 = puVar67 + 9;
              pbVar17 = puVar67 + 10;
              pbVar18 = puVar67 + 0xb;
              pbVar19 = puVar67 + 0xc;
              pbVar20 = puVar67 + 0xd;
              pbVar21 = puVar67 + 0xe;
              pbVar22 = puVar67 + 0xf;
              pbVar23 = puVar67 + 0x10;
              pbVar24 = puVar67 + 0x11;
              pbVar25 = puVar67 + 0x12;
              pbVar26 = puVar67 + 0x13;
              pbVar27 = puVar67 + 0x14;
              pbVar28 = puVar67 + 0x15;
              pbVar29 = puVar67 + 0x16;
              pbVar30 = puVar67 + 0x17;
              pbVar31 = puVar67 + 0x18;
              pbVar32 = puVar67 + 0x19;
              pbVar33 = puVar67 + 0x1a;
              pbVar34 = puVar67 + 0x1b;
              pbVar35 = puVar67 + 0x1c;
              pbVar36 = puVar67 + 0x1d;
              pbVar37 = puVar67 + 0x1e;
              pbVar38 = puVar67 + 0x1f;
              puVar39 = puVar67 + 0x20;
              puVar40 = puVar67 + 0x21;
              puVar41 = puVar67 + 0x22;
              puVar42 = puVar67 + 0x23;
              bVar144 = puVar67[0x24];
              bVar153 = puVar67[0x25];
              bVar160 = puVar67[0x26];
              bVar166 = puVar67[0x27];
              pbVar43 = puVar67 + 0x28;
              pbVar44 = puVar67 + 0x29;
              pbVar45 = puVar67 + 0x2a;
              pbVar46 = puVar67 + 0x2b;
              pbVar47 = puVar67 + 0x2c;
              pbVar48 = puVar67 + 0x2d;
              pbVar49 = puVar67 + 0x2e;
              pbVar50 = puVar67 + 0x2f;
              pbVar51 = puVar67 + 0x30;
              pbVar52 = puVar67 + 0x31;
              pbVar53 = puVar67 + 0x32;
              pbVar54 = puVar67 + 0x33;
              pbVar55 = puVar67 + 0x34;
              pbVar56 = puVar67 + 0x35;
              pbVar57 = puVar67 + 0x36;
              pbVar58 = puVar67 + 0x37;
              pbVar59 = puVar67 + 0x38;
              pbVar60 = puVar67 + 0x39;
              pbVar61 = puVar67 + 0x3a;
              pbVar62 = puVar67 + 0x3b;
              pbVar63 = puVar67 + 0x3c;
              pbVar64 = puVar67 + 0x3d;
              pbVar65 = puVar67 + 0x3e;
              pbVar66 = puVar67 + 0x3f;
              puVar67 = puVar67 + 0x40;
              uVar129 = uVar129 + 1;
                    /* try { // try from 003abc08 to 004abc0b has its CatchHandler @ 003abd94 */
              uVar136 = *puVar126;
              pbVar68 = puVar126 + 1;
              puVar69 = puVar126 + 2;
              puVar70 = puVar126 + 3;
              bVar139 = puVar126[4];
              pbVar71 = puVar126 + 5;
              puVar72 = puVar126 + 6;
              puVar73 = puVar126 + 7;
              pbVar74 = puVar126 + 8;
              pbVar75 = puVar126 + 9;
              pbVar76 = puVar126 + 10;
              pbVar77 = puVar126 + 0xb;
              pbVar78 = puVar126 + 0xc;
              pbVar79 = puVar126 + 0xd;
              pbVar80 = puVar126 + 0xe;
              pbVar81 = puVar126 + 0xf;
              pbVar82 = puVar126 + 0x10;
              pbVar83 = puVar126 + 0x11;
              pbVar84 = puVar126 + 0x12;
              pbVar85 = puVar126 + 0x13;
              pbVar86 = puVar126 + 0x14;
              pbVar87 = puVar126 + 0x15;
              pbVar88 = puVar126 + 0x16;
              pbVar89 = puVar126 + 0x17;
              pbVar90 = puVar126 + 0x18;
              pbVar91 = puVar126 + 0x19;
              pbVar92 = puVar126 + 0x1a;
              pbVar93 = puVar126 + 0x1b;
              pbVar94 = puVar126 + 0x1c;
              pbVar95 = puVar126 + 0x1d;
              pbVar96 = puVar126 + 0x1e;
              pbVar97 = puVar126 + 0x1f;
              puVar98 = puVar126 + 0x20;
              puVar99 = puVar126 + 0x21;
              puVar100 = puVar126 + 0x22;
              puVar101 = puVar126 + 0x23;
              bVar145 = puVar126[0x24];
              bVar154 = puVar126[0x25];
              bVar161 = puVar126[0x26];
              bVar167 = puVar126[0x27];
              pbVar102 = puVar126 + 0x28;
              pbVar103 = puVar126 + 0x29;
              pbVar104 = puVar126 + 0x2a;
              pbVar105 = puVar126 + 0x2b;
              pbVar106 = puVar126 + 0x2c;
              pbVar107 = puVar126 + 0x2d;
              pbVar108 = puVar126 + 0x2e;
              pbVar109 = puVar126 + 0x2f;
              pbVar110 = puVar126 + 0x30;
              pbVar111 = puVar126 + 0x31;
              pbVar112 = puVar126 + 0x32;
              pbVar113 = puVar126 + 0x33;
              pbVar114 = puVar126 + 0x34;
              pbVar115 = puVar126 + 0x35;
              pbVar116 = puVar126 + 0x36;
              pbVar117 = puVar126 + 0x37;
              pbVar118 = puVar126 + 0x38;
              pbVar119 = puVar126 + 0x39;
              pbVar120 = puVar126 + 0x3a;
              pbVar121 = puVar126 + 0x3b;
              pbVar122 = puVar126 + 0x3c;
              pbVar123 = puVar126 + 0x3d;
              pbVar124 = puVar126 + 0x3e;
              pbVar125 = puVar126 + 0x3f;
              puVar126 = puVar126 + 0x40;
              uVar9 = CONCAT12(*pbVar76,CONCAT11(*puVar72,*puVar69));
              uVar10 = CONCAT12(*pbVar77,CONCAT11(*puVar73,*puVar70));
                    /* try { // try from 003abc7c to 004abc7f has its CatchHandler @ 003abddc */
                    /* try { // try from 003abc88 to 004abc8b has its CatchHandler @ 003abe00 */
              iVar183 = MP_INT_ABS(((CONCAT12(bVar138,CONCAT11(bVar138,uVar135)) & 0xff00ff) &
                                   0xffff) - ((CONCAT12(bVar139,CONCAT11(bVar139,uVar136)) &
                                              0xff00ff) & 0xffff));
              iVar186 = MP_INT_ABS((uint)bVar138 - (uint)bVar139);
              iVar141 = MP_INT_ABS((uint)*pbVar15 - (uint)*pbVar74);
              iVar8 = MP_INT_ABS((uint)*pbVar19 - (uint)*pbVar78);
                    /* try { // try from 003abc94 to 004abca3 has its CatchHandler @ 003abd94 */
              iVar199 = MP_INT_ABS((CONCAT12(*pbVar14,(ushort)*pbVar11) & 0xffff) -
                                   (CONCAT12(*pbVar71,(ushort)*pbVar68) & 0xffff));
              iVar200 = MP_INT_ABS((uint)*pbVar14 - (uint)*pbVar71);
              iVar201 = MP_INT_ABS((CONCAT12(*pbVar20,(ushort)*pbVar16) & 0xffff) -
                                   (CONCAT12(*pbVar79,(ushort)*pbVar75) & 0xffff));
              iVar202 = MP_INT_ABS((uint)*pbVar20 - (uint)*pbVar79);
              iVar195 = MP_INT_ABS(((CONCAT12(bVar157,CONCAT11(bVar157,*puVar12)) & 0xff00ff) &
                                   0xffff) - (uVar9 & 0xff));
              iVar196 = MP_INT_ABS((uint)bVar157 - ((uVar9 & 0xff00) >> 8));
              iVar197 = MP_INT_ABS((uint)*pbVar17 - (uint)*pbVar76);
              iVar198 = MP_INT_ABS((uint)*pbVar21 - (uint)*pbVar80);
              iVar173 = MP_INT_ABS((CONCAT12(*pbVar27,(ushort)*pbVar23) & 0xffff) -
                                   (CONCAT12(*pbVar86,(ushort)*pbVar82) & 0xffff));
              iVar176 = MP_INT_ABS((uint)*pbVar27 - (uint)*pbVar86);
              iVar178 = MP_INT_ABS((uint)*pbVar31 - (uint)*pbVar90);
              iVar181 = MP_INT_ABS((uint)*pbVar35 - (uint)*pbVar94);
              iVar215 = MP_INT_ABS((CONCAT12(*pbVar28,(ushort)*pbVar24) & 0xffff) -
                                   (CONCAT12(*pbVar87,(ushort)*pbVar83) & 0xffff));
              iVar216 = MP_INT_ABS((uint)*pbVar28 - (uint)*pbVar87);
              iVar163 = MP_INT_ABS((uint)*pbVar32 - (uint)*pbVar91);
              iVar165 = MP_INT_ABS((uint)*pbVar36 - (uint)*pbVar95);
              iVar189 = MP_INT_ABS(((CONCAT12(bVar144,CONCAT11(bVar144,*puVar39)) & 0xff00ff) &
                                   0xffff) - ((CONCAT12(bVar145,CONCAT11(bVar145,*puVar98)) &
                                              0xff00ff) & 0xffff));
              iVar190 = MP_INT_ABS((uint)bVar144 - (uint)bVar145);
              iVar151 = MP_INT_ABS((uint)*pbVar43 - (uint)*pbVar102);
              iVar155 = MP_INT_ABS((uint)*pbVar47 - (uint)*pbVar106);
                    /* catch() { ... } // from try @ 003ab18c with catch @ 003abccc
                       catch() { ... } // from try @ 003ab74c with catch @ 003abccc
                       catch() { ... } // from try @ 003aba0c with catch @ 003abccc */
              iVar184 = MP_INT_ABS(((CONCAT12(bVar153,CONCAT11(bVar153,*puVar40)) & 0xff00ff) &
                                   0xffff) - ((CONCAT12(bVar154,CONCAT11(bVar154,*puVar99)) &
                                              0xff00ff) & 0xffff));
              iVar187 = MP_INT_ABS((uint)bVar153 - (uint)bVar154);
              iVar143 = MP_INT_ABS((uint)*pbVar44 - (uint)*pbVar103);
              iVar148 = MP_INT_ABS((uint)*pbVar48 - (uint)*pbVar107);
              iVar191 = MP_INT_ABS(((CONCAT12(bVar164,CONCAT11(bVar164,*puVar13)) & 0xff00ff) &
                                   0xffff) - (uVar10 & 0xff));
              iVar193 = MP_INT_ABS((uint)bVar164 - ((uVar10 & 0xff00) >> 8));
              iVar156 = MP_INT_ABS((uint)*pbVar18 - (uint)*pbVar77);
              iVar159 = MP_INT_ABS((uint)*pbVar22 - (uint)*pbVar81);
              iVar211 = MP_INT_ABS((CONCAT12(*pbVar29,(ushort)*pbVar25) & 0xffff) -
                                   (CONCAT12(*pbVar88,(ushort)*pbVar84) & 0xffff));
              iVar212 = MP_INT_ABS((uint)*pbVar29 - (uint)*pbVar88);
              iVar213 = MP_INT_ABS((uint)*pbVar33 - (uint)*pbVar92);
              iVar214 = MP_INT_ABS((uint)*pbVar37 - (uint)*pbVar96);
                    /* try { // try from 003abcf0 to 004abcf3 has its CatchHandler @ 003ab120 */
                    /* catch() { ... } // from try @ 003ab500 with catch @ 003abcf4 */
              iVar169 = MP_INT_ABS((CONCAT12(*pbVar55,(ushort)*pbVar51) & 0xffff) -
                                   (CONCAT12(*pbVar114,(ushort)*pbVar110) & 0xffff));
              iVar170 = MP_INT_ABS((uint)*pbVar55 - (uint)*pbVar114);
              iVar171 = MP_INT_ABS((uint)*pbVar59 - (uint)*pbVar118);
              iVar172 = MP_INT_ABS((uint)*pbVar63 - (uint)*pbVar122);
              iVar207 = MP_INT_ABS((CONCAT12(*pbVar30,(ushort)*pbVar26) & 0xffff) -
                                   (CONCAT12(*pbVar89,(ushort)*pbVar85) & 0xffff));
              iVar208 = MP_INT_ABS((uint)*pbVar30 - (uint)*pbVar89);
              iVar209 = MP_INT_ABS((uint)*pbVar34 - (uint)*pbVar93);
              iVar210 = MP_INT_ABS((uint)*pbVar38 - (uint)*pbVar97);
              iVar174 = MP_INT_ABS(((CONCAT12(bVar160,CONCAT11(bVar160,*puVar41)) & 0xff00ff) &
                                   0xffff) - ((CONCAT12(bVar161,CONCAT11(bVar161,*puVar100)) &
                                              0xff00ff) & 0xffff));
              iVar177 = MP_INT_ABS((uint)bVar160 - (uint)bVar161);
              iVar179 = MP_INT_ABS((uint)*pbVar45 - (uint)*pbVar104);
              iVar182 = MP_INT_ABS((uint)*pbVar49 - (uint)*pbVar108);
              iVar203 = MP_INT_ABS((CONCAT12(*pbVar56,(ushort)*pbVar52) & 0xffff) -
                                   (CONCAT12(*pbVar115,(ushort)*pbVar111) & 0xffff));
              iVar204 = MP_INT_ABS((uint)*pbVar56 - (uint)*pbVar115);
              iVar205 = MP_INT_ABS((uint)*pbVar60 - (uint)*pbVar119);
              iVar206 = MP_INT_ABS((uint)*pbVar64 - (uint)*pbVar123);
              iVar192 = MP_INT_ABS(((CONCAT12(bVar166,CONCAT11(bVar166,*puVar42)) & 0xff00ff) &
                                   0xffff) - ((CONCAT12(bVar167,CONCAT11(bVar167,*puVar101)) &
                                              0xff00ff) & 0xffff));
              iVar194 = MP_INT_ABS((uint)bVar166 - (uint)bVar167);
              iVar158 = MP_INT_ABS((uint)*pbVar46 - (uint)*pbVar105);
              iVar162 = MP_INT_ABS((uint)*pbVar50 - (uint)*pbVar109);
              iVar185 = MP_INT_ABS((CONCAT12(*pbVar57,(ushort)*pbVar53) & 0xffff) -
                                   (CONCAT12(*pbVar116,(ushort)*pbVar112) & 0xffff));
              iVar188 = MP_INT_ABS((uint)*pbVar57 - (uint)*pbVar116);
              iVar147 = MP_INT_ABS((uint)*pbVar61 - (uint)*pbVar120);
              iVar150 = MP_INT_ABS((uint)*pbVar65 - (uint)*pbVar124);
              iVar137 = MP_INT_ABS((CONCAT12(*pbVar58,(ushort)*pbVar54) & 0xffff) -
                                   (CONCAT12(*pbVar117,(ushort)*pbVar113) & 0xffff));
              iVar140 = MP_INT_ABS((uint)*pbVar58 - (uint)*pbVar117);
              iVar142 = MP_INT_ABS((uint)*pbVar62 - (uint)*pbVar121);
              iVar146 = MP_INT_ABS((uint)*pbVar66 - (uint)*pbVar125);
              iVar218 = iVar169 + iVar203 + iVar185 + iVar137 +
                        iVar189 + iVar184 + iVar174 + iVar192 +
                        iVar173 + iVar215 + iVar211 + iVar207 +
                        iVar183 + iVar199 + iVar195 + iVar191 + iVar218;
              iVar219 = iVar170 + iVar204 + iVar188 + iVar140 +
                        iVar190 + iVar187 + iVar177 + iVar194 +
                        iVar176 + iVar216 + iVar212 + iVar208 +
                        iVar186 + iVar200 + iVar196 + iVar193 + iVar219;
              iVar220 = iVar171 + iVar205 + iVar147 + iVar142 +
                        iVar151 + iVar143 + iVar179 + iVar158 +
                        iVar178 + iVar163 + iVar213 + iVar209 +
                        iVar141 + iVar201 + iVar197 + iVar156 + iVar220;
              iVar221 = iVar172 + iVar206 + iVar150 + iVar146 +
                        iVar155 + iVar148 + iVar182 + iVar162 +
                        iVar181 + iVar165 + iVar214 + iVar210 +
                        iVar8 + iVar202 + iVar198 + iVar159 + iVar221;
            } while (uVar129 < uVar6);
            iVar218 = iVar218 + iVar219 + iVar220 + iVar221;
            iVar219 = uVar6 * 0x40;
            if (iVar1 == uVar6 * 0x10) goto LAB_003abdfc;
          }
          pbVar34 = param_2 + iVar219;
          pbVar11 = param_1 + iVar219;
          do {
            iVar219 = iVar219 + 4;
                    /* catch() { ... } // from try @ 003ab2d0 with catch @ 003abd94
                       catch() { ... } // from try @ 003ab418 with catch @ 003abd94
                       catch() { ... } // from try @ 003ab508 with catch @ 003abd94
                       catch() { ... } // from try @ 003ab9d0 with catch @ 003abd94
                       catch() { ... } // from try @ 003aba24 with catch @ 003abd94
                       catch() { ... } // from try @ 003abc08 with catch @ 003abd94
                       catch() { ... } // from try @ 003abc94 with catch @ 003abd94 */
                    /* catch() { ... } // from try @ 003ab1ac with catch @ 003abd9c
                       catch() { ... } // from try @ 003ab6d8 with catch @ 003abd9c
                       catch() { ... } // from try @ 003aba18 with catch @ 003abd9c */
                    /* catch() { ... } // from try @ 003ab57c with catch @ 003abda4
                       catch() { ... } // from try @ 003aba00 with catch @ 003abda4
                       catch() { ... } // from try @ 003aba44 with catch @ 003abda4 */
                    /* catch() { ... } // from try @ 003ab20c with catch @ 003abdac
                       catch() { ... } // from try @ 003ab5f0 with catch @ 003abdac
                       catch() { ... } // from try @ 003ab9f4 with catch @ 003abdac */
            uVar7 = (int)((uint)*pbVar11 - (uint)*pbVar34) >> 0x1f;
                    /* catch() { ... } // from try @ 003ab374 with catch @ 003abdb4
                       catch() { ... } // from try @ 003aba30 with catch @ 003abdb4 */
            uVar129 = (int)((uint)pbVar11[1] - (uint)pbVar34[1]) >> 0x1f;
            uVar2 = (int)((uint)pbVar11[2] - (uint)pbVar34[2]) >> 0x1f;
                    /* catch() { ... } // from try @ 003abac0 with catch @ 003abddc
                       catch() { ... } // from try @ 003abc7c with catch @ 003abddc */
            uVar133 = (int)((uint)pbVar11[3] - (uint)pbVar34[3]) >> 0x1f;
            iVar218 = iVar218 + (((uint)*pbVar11 - (uint)*pbVar34 ^ uVar7) - uVar7) +
                                (((uint)pbVar11[1] - (uint)pbVar34[1] ^ uVar129) - uVar129) +
                                (((uint)pbVar11[2] - (uint)pbVar34[2] ^ uVar2) - uVar2) +
                                (((uint)pbVar11[3] - (uint)pbVar34[3] ^ uVar133) - uVar133);
            pbVar34 = pbVar34 + 4;
            pbVar11 = pbVar11 + 4;
          } while (iVar219 < param_5 + -3);
        }
LAB_003abdfc:
                    /* catch() { ... } // from try @ 003ab888 with catch @ 003abe00
                       catch() { ... } // from try @ 003abc88 with catch @ 003abe00 */
        if (iVar127 < param_5) {
          uVar7 = param_5 - iVar127;
          uVar129 = -((int)param_1 + iVar127) & 0xf;
          uVar4 = (ulong)uVar129;
          if (uVar7 < uVar129) {
            uVar4 = (ulong)uVar7;
          }
                    /* catch() { ... } // from try @ 003ab664 with catch @ 003abe24
                       catch() { ... } // from try @ 003ab9e8 with catch @ 003abe24 */
          if (uVar7 < 0x11) {
            uVar4 = (ulong)uVar7;
          }
          uVar129 = (uint)uVar4;
          iVar219 = iVar127;
          if (uVar129 != 0) {
            iVar219 = iVar127 + 1;
            uVar2 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127]) >> 0x1f;
            iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127] ^
                                 uVar2) - uVar2);
            if (uVar129 != 1) {
              iVar220 = iVar127 + 2;
              uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219]) >> 0x1f;
              iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219] ^
                                   uVar2) - uVar2);
              iVar219 = iVar220;
              if (uVar129 != 2) {
                iVar219 = iVar127 + 3;
                uVar2 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220]) >> 0x1f;
                iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220] ^
                                     uVar2) - uVar2);
                if (uVar129 != 3) {
                  iVar220 = iVar127 + 4;
                  uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219]) >> 0x1f
                  ;
                  iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219]
                                       ^ uVar2) - uVar2);
                  iVar219 = iVar220;
                  if (uVar129 != 4) {
                    iVar219 = iVar127 + 5;
                    uVar2 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220]) >>
                            0x1f;
                    iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                          (uint)(byte)param_2[iVar220] ^ uVar2) - uVar2);
                    if (uVar129 != 5) {
                      iVar220 = iVar127 + 6;
                      uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219]) >>
                              0x1f;
                      iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                            (uint)(byte)param_2[iVar219] ^ uVar2) - uVar2);
                      iVar219 = iVar220;
                      if (uVar129 != 6) {
                        iVar219 = iVar127 + 7;
                        uVar2 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220])
                                >> 0x1f;
                        iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                              (uint)(byte)param_2[iVar220] ^ uVar2) - uVar2);
                        if (uVar129 != 7) {
                          iVar220 = iVar127 + 8;
                          uVar2 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219])
                                  >> 0x1f;
                          iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                (uint)(byte)param_2[iVar219] ^ uVar2) - uVar2);
                          iVar219 = iVar220;
                          if (uVar129 != 8) {
                            iVar219 = iVar127 + 9;
                            uVar2 = (int)((uint)(byte)param_1[iVar220] -
                                         (uint)(byte)param_2[iVar220]) >> 0x1f;
                            iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                  (uint)(byte)param_2[iVar220] ^ uVar2) - uVar2);
                            if (uVar129 != 9) {
                              iVar220 = iVar127 + 10;
                              uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                           (uint)(byte)param_2[iVar219]) >> 0x1f;
                              iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                    (uint)(byte)param_2[iVar219] ^ uVar2) - uVar2);
                              iVar219 = iVar220;
                              if (uVar129 != 10) {
                                iVar219 = iVar127 + 0xb;
                                uVar2 = (int)((uint)(byte)param_1[iVar220] -
                                             (uint)(byte)param_2[iVar220]) >> 0x1f;
                                iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                      (uint)(byte)param_2[iVar220] ^ uVar2) - uVar2)
                                ;
                                if (uVar129 != 0xb) {
                                  iVar220 = iVar127 + 0xc;
                                  uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                               (uint)(byte)param_2[iVar219]) >> 0x1f;
                                  iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                        (uint)(byte)param_2[iVar219] ^ uVar2) -
                                                      uVar2);
                                  iVar219 = iVar220;
                                  if (uVar129 != 0xc) {
                                    iVar219 = iVar127 + 0xd;
                                    uVar2 = (int)((uint)(byte)param_1[iVar220] -
                                                 (uint)(byte)param_2[iVar220]) >> 0x1f;
                                    iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                          (uint)(byte)param_2[iVar220] ^ uVar2) -
                                                        uVar2);
                                    if (uVar129 != 0xd) {
                                      iVar220 = iVar127 + 0xe;
                                      uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                                   (uint)(byte)param_2[iVar219]) >> 0x1f;
                                      iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                            (uint)(byte)param_2[iVar219] ^ uVar2) -
                                                          uVar2);
                                      iVar219 = iVar220;
                                      if (uVar129 != 0xe) {
                                        iVar219 = iVar127 + 0xf;
                                        uVar2 = (int)((uint)(byte)param_1[iVar220] -
                                                     (uint)(byte)param_2[iVar220]) >> 0x1f;
                                        iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                              (uint)(byte)param_2[iVar220] ^ uVar2)
                                                            - uVar2);
                                        if (uVar129 == 0x10) {
                                          uVar2 = (int)((uint)(byte)param_1[iVar219] -
                                                       (uint)(byte)param_2[iVar219]) >> 0x1f;
                                          iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                                (uint)(byte)param_2[iVar219] ^ uVar2
                                                               ) - uVar2);
                                          iVar219 = iVar127 + 0x10;
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            if (uVar7 == uVar129) goto LAB_003ac41c;
          }
          uVar2 = ((uVar7 - uVar129) - 0x10 >> 4) + 1;
          iVar220 = uVar2 * 0x10;
          if (0xe < (uVar7 - 1) - uVar129) {
            iVar221 = 0;
            iVar141 = 0;
            iVar143 = 0;
            iVar147 = 0;
            uVar133 = 0;
            puVar130 = (undefined8 *)(param_2 + uVar4 + (long)iVar127);
            puVar131 = (undefined8 *)(param_1 + (long)iVar127 + uVar4);
            do {
              uVar152 = puVar131[1];
              uVar149 = *puVar131;
              uVar133 = uVar133 + 1;
              uVar180 = puVar130[1];
              uVar175 = *puVar130;
              bVar138 = (byte)((ulong)uVar149 >> 8);
              bVar154 = (byte)((ulong)uVar149 >> 0x28);
              bVar139 = (byte)((ulong)uVar175 >> 8);
              bVar153 = (byte)((ulong)uVar175 >> 0x18);
              bVar157 = (byte)((ulong)uVar175 >> 0x28);
              bVar144 = (byte)((ulong)uVar152 >> 8);
              bVar160 = (byte)((ulong)uVar152 >> 0x28);
              bVar145 = (byte)((ulong)uVar180 >> 8);
              bVar161 = (byte)((ulong)uVar180 >> 0x28);
              iVar137 = MP_INT_ABS(((CONCAT12(bVar138,(short)uVar149) & 0xff00ff) & 0xffff) -
                                   (CONCAT12(bVar139,(ushort)(byte)uVar175) & 0xffff));
              iVar140 = MP_INT_ABS((uint)bVar138 - (uint)bVar139);
              iVar142 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x10) -
                                   (CONCAT12(bVar153,(ushort)(byte)((ulong)uVar175 >> 0x10)) &
                                   0xffff));
              iVar146 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x18) - (uint)bVar153);
              iVar156 = MP_INT_ABS((CONCAT12(bVar154,(ushort)(byte)((ulong)uVar149 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar157,(ushort)(byte)((ulong)uVar175 >> 0x20
                                                                             )) & 0xffff));
              iVar158 = MP_INT_ABS((uint)bVar154 - (uint)bVar157);
              iVar159 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x30) -
                                   (uint)(byte)((ulong)uVar175 >> 0x30));
              iVar162 = MP_INT_ABS((uint)(byte)((ulong)uVar149 >> 0x38) -
                                   (uint)(byte)((ulong)uVar175 >> 0x38));
              iVar163 = MP_INT_ABS(((CONCAT12(bVar144,(short)uVar152) & 0xff00ff) & 0xffff) -
                                   ((CONCAT12(bVar145,(short)uVar180) & 0xff00ff) & 0xffff));
              iVar165 = MP_INT_ABS((uint)bVar144 - (uint)bVar145);
              iVar127 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x10) -
                                   (uint)(byte)((ulong)uVar180 >> 0x10));
              iVar8 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x18) -
                                 (uint)(byte)((ulong)uVar180 >> 0x18));
              iVar148 = MP_INT_ABS((CONCAT12(bVar160,(ushort)(byte)((ulong)uVar152 >> 0x20)) &
                                   0xffff) - (CONCAT12(bVar161,(ushort)(byte)((ulong)uVar180 >> 0x20
                                                                             )) & 0xffff));
              iVar150 = MP_INT_ABS((uint)bVar160 - (uint)bVar161);
              iVar151 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x30) -
                                   (uint)(byte)((ulong)uVar180 >> 0x30));
              iVar155 = MP_INT_ABS((uint)(byte)((ulong)uVar152 >> 0x38) -
                                   (uint)(byte)((ulong)uVar180 >> 0x38));
              iVar221 = iVar148 + iVar163 + iVar156 + iVar137 + iVar221;
              iVar141 = iVar150 + iVar165 + iVar158 + iVar140 + iVar141;
              iVar143 = iVar151 + iVar127 + iVar159 + iVar142 + iVar143;
              iVar147 = iVar155 + iVar8 + iVar162 + iVar146 + iVar147;
              puVar130 = puVar130 + 2;
              puVar131 = puVar131 + 2;
            } while (uVar133 < uVar2);
            iVar219 = iVar219 + iVar220;
            iVar218 = iVar218 + iVar221 + iVar141 + iVar143 + iVar147;
            if (uVar7 - uVar129 == iVar220) goto LAB_003ac41c;
          }
          iVar127 = iVar219 + 1;
          uVar129 = (int)((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219]) >> 0x1f;
          iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] - (uint)(byte)param_2[iVar219] ^
                               uVar129) - uVar129);
          if (iVar127 < param_5) {
            iVar220 = iVar219 + 2;
            uVar129 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127]) >> 0x1f;
            iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127] ^
                                 uVar129) - uVar129);
            if (iVar220 < param_5) {
              iVar127 = iVar219 + 3;
              uVar129 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220]) >> 0x1f;
              iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220] ^
                                   uVar129) - uVar129);
              if (iVar127 < param_5) {
                iVar220 = iVar219 + 4;
                uVar129 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127]) >> 0x1f
                ;
                iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127] ^
                                     uVar129) - uVar129);
                if (iVar220 < param_5) {
                  iVar127 = iVar219 + 5;
                  uVar129 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220]) >>
                            0x1f;
                  iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220]
                                       ^ uVar129) - uVar129);
                  if (iVar127 < param_5) {
                    iVar220 = iVar219 + 6;
                    uVar129 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127]) >>
                              0x1f;
                    iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] -
                                          (uint)(byte)param_2[iVar127] ^ uVar129) - uVar129);
                    if (iVar220 < param_5) {
                      iVar127 = iVar219 + 7;
                      uVar129 = (int)((uint)(byte)param_1[iVar220] - (uint)(byte)param_2[iVar220])
                                >> 0x1f;
                      iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                            (uint)(byte)param_2[iVar220] ^ uVar129) - uVar129);
                      if (iVar127 < param_5) {
                        iVar220 = iVar219 + 8;
                        uVar129 = (int)((uint)(byte)param_1[iVar127] - (uint)(byte)param_2[iVar127])
                                  >> 0x1f;
                        iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] -
                                              (uint)(byte)param_2[iVar127] ^ uVar129) - uVar129);
                        if (iVar220 < param_5) {
                          iVar127 = iVar219 + 9;
                          uVar129 = (int)((uint)(byte)param_1[iVar220] -
                                         (uint)(byte)param_2[iVar220]) >> 0x1f;
                          iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                (uint)(byte)param_2[iVar220] ^ uVar129) - uVar129);
                          if (iVar127 < param_5) {
                            iVar220 = iVar219 + 10;
                            uVar129 = (int)((uint)(byte)param_1[iVar127] -
                                           (uint)(byte)param_2[iVar127]) >> 0x1f;
                            iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] -
                                                  (uint)(byte)param_2[iVar127] ^ uVar129) - uVar129)
                            ;
                            if (iVar220 < param_5) {
                              iVar127 = iVar219 + 0xb;
                              uVar129 = (int)((uint)(byte)param_1[iVar220] -
                                             (uint)(byte)param_2[iVar220]) >> 0x1f;
                              iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                    (uint)(byte)param_2[iVar220] ^ uVar129) -
                                                  uVar129);
                              if (iVar127 < param_5) {
                                iVar220 = iVar219 + 0xc;
                                uVar129 = (int)((uint)(byte)param_1[iVar127] -
                                               (uint)(byte)param_2[iVar127]) >> 0x1f;
                                iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] -
                                                      (uint)(byte)param_2[iVar127] ^ uVar129) -
                                                    uVar129);
                                if (iVar220 < param_5) {
                                  iVar127 = iVar219 + 0xd;
                                  uVar129 = (int)((uint)(byte)param_1[iVar220] -
                                                 (uint)(byte)param_2[iVar220]) >> 0x1f;
                                  iVar218 = iVar218 + (((uint)(byte)param_1[iVar220] -
                                                        (uint)(byte)param_2[iVar220] ^ uVar129) -
                                                      uVar129);
                                  if (iVar127 < param_5) {
                                    iVar219 = iVar219 + 0xe;
                                    uVar129 = (int)((uint)(byte)param_1[iVar127] -
                                                   (uint)(byte)param_2[iVar127]) >> 0x1f;
                                    iVar218 = iVar218 + (((uint)(byte)param_1[iVar127] -
                                                          (uint)(byte)param_2[iVar127] ^ uVar129) -
                                                        uVar129);
                                    if (iVar219 < param_5) {
                                      uVar129 = (int)((uint)(byte)param_1[iVar219] -
                                                     (uint)(byte)param_2[iVar219]) >> 0x1f;
                                      iVar218 = iVar218 + (((uint)(byte)param_1[iVar219] -
                                                            (uint)(byte)param_2[iVar219] ^ uVar129)
                                                          - uVar129);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_003ac41c:
      param_6[lVar134] = iVar218;
      lVar134 = lVar134 + 1;
      param_2 = param_2 + param_3;
    } while (lVar134 != (ulong)(param_4 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003acd44 (736 bytes) name=FUN_003acd44

void FUN_003acd44(byte *param_1,long param_2,long param_3,int param_4,int param_5,float *param_6,
                 char *param_7)

{
  byte *pbVar1;
  char *pcVar2;
  int iVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  byte *pbVar8;
  byte *pbVar9;
  byte *pbVar10;
  float *pfVar11;
  float *pfVar12;
  float fVar13;
  float fVar14;
  float __x;
  
  fVar14 = DAT_003ad024;
  if (param_7 == (char *)0x0) {
    if (0 < param_4) {
      uVar4 = param_5 - 4U >> 2;
      iVar3 = (uVar4 + 1) * 4;
      if (param_5 + -3 < 1) {
        iVar3 = 0;
      }
      pbVar10 = (byte *)(param_2 + 1);
      pfVar11 = param_6;
      do {
        fVar14 = 0.0;
        if (0 < param_5 + -3) {
          pbVar8 = pbVar10;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
            fVar14 = fVar14 + (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) *
                              (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) +
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) *
                              (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) +
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) *
                              (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) +
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]) *
                              (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]);
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar10 + (ulong)uVar4 * 4 + 4);
        }
        if (iVar3 < param_5) {
          lVar7 = 0;
          do {
            lVar5 = lVar7 + iVar3;
            lVar6 = lVar7 + (long)iVar3 + -1;
            lVar7 = lVar7 + 1;
            fVar14 = fVar14 + (float)(int)((uint)param_1[lVar5] - (uint)pbVar10[lVar6]) *
                              (float)(int)((uint)param_1[lVar5] - (uint)pbVar10[lVar6]);
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar3) + 1);
        }
        fVar13 = SQRT(fVar14);
        if (NAN(fVar13)) {
          fVar13 = sqrtf(fVar14);
        }
        pfVar12 = pfVar11 + 1;
        *pfVar11 = fVar13;
        pbVar10 = pbVar10 + param_3;
        pfVar11 = pfVar12;
      } while (pfVar12 != param_6 + (ulong)(param_4 - 1) + 1);
    }
  }
  else if (0 < param_4) {
    uVar4 = param_5 - 4U >> 2;
    iVar3 = (uVar4 + 1) * 4;
    if (param_5 + -3 < 1) {
      iVar3 = 0;
    }
    pbVar10 = (byte *)(param_2 + 1);
    pcVar2 = param_7 + (ulong)(param_4 - 1) + 1;
    do {
      fVar13 = fVar14;
      if (*param_7 != '\0') {
        __x = 0.0;
        if (0 < param_5 + -3) {
          pbVar8 = pbVar10;
          pbVar9 = param_1;
          do {
            pbVar1 = pbVar8 + 4;
            __x = __x + (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) *
                        (float)(int)((uint)pbVar9[1] - (uint)*pbVar8) +
                        (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) *
                        (float)(int)((uint)*pbVar9 - (uint)pbVar8[-1]) +
                        (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) *
                        (float)(int)((uint)pbVar9[2] - (uint)pbVar8[1]) +
                        (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]) *
                        (float)(int)((uint)pbVar9[3] - (uint)pbVar8[2]);
            pbVar8 = pbVar1;
            pbVar9 = pbVar9 + 4;
          } while (pbVar1 != pbVar10 + (ulong)uVar4 * 4 + 4);
        }
        if (iVar3 < param_5) {
          lVar7 = 0;
          do {
            lVar5 = lVar7 + iVar3;
            lVar6 = lVar7 + (long)iVar3 + -1;
            lVar7 = lVar7 + 1;
            __x = __x + (float)(int)((uint)param_1[lVar5] - (uint)pbVar10[lVar6]) *
                        (float)(int)((uint)param_1[lVar5] - (uint)pbVar10[lVar6]);
          } while (lVar7 != (ulong)(uint)((param_5 + -1) - iVar3) + 1);
        }
        fVar13 = SQRT(__x);
        if (NAN(fVar13)) {
          fVar13 = sqrtf(__x);
        }
      }
      param_7 = param_7 + 1;
      pbVar10 = pbVar10 + param_3;
      *param_6 = fVar13;
      param_6 = param_6 + 1;
    } while (param_7 != pcVar2);
  }
  return;
}


==================================================================

### FUNC 003ad028 (176 bytes) name=FUN_003ad028

undefined8 FUN_003ad028(long param_1,long param_2,float *param_3,int param_4,ulong param_5)

{
  long lVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  
  fVar5 = *param_3;
  iVar2 = (int)param_5;
  if (param_2 == 0) {
    fVar6 = 0.0;
    lVar4 = 0;
    fVar7 = fVar6;
    if (0 < param_4 * iVar2) {
      do {
        lVar3 = lVar4 * 4;
        lVar4 = lVar4 + 1;
        fVar6 = ABS(*(float *)(param_1 + lVar3));
        if (fVar6 <= fVar7) {
          fVar6 = fVar7;
        }
        fVar7 = fVar6;
      } while ((int)lVar4 < param_4 * iVar2);
    }
    if (fVar5 < fVar6) {
      fVar5 = fVar6;
    }
  }
  else if (0 < param_4) {
    lVar4 = 0;
    do {
      if ((*(char *)(param_2 + lVar4) != '\0') && (0 < iVar2)) {
        lVar3 = 0;
        fVar6 = fVar5;
        do {
          lVar1 = lVar3 * 4;
          lVar3 = lVar3 + 1;
          fVar5 = ABS(*(float *)(param_1 + lVar1));
          if (fVar5 <= fVar6) {
            fVar5 = fVar6;
          }
          fVar6 = fVar5;
        } while ((int)lVar3 < iVar2);
      }
      lVar4 = lVar4 + 1;
      param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 | (param_5 & 0xffffffff) << 2
                          );
    } while ((int)lVar4 < param_4);
  }
  *param_3 = fVar5;
  return 0;
}


==================================================================

### FUNC 003ad0d8 (712 bytes) name=FUN_003ad0d8

void FUN_003ad0d8(float *param_1,long param_2,ulong param_3,int param_4,int param_5,float *param_6,
                 char *param_7)

{
  float *pfVar1;
  char *pcVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  float *pfVar7;
  long lVar8;
  float *pfVar9;
  float *pfVar10;
  float *pfVar11;
  ulong uVar12;
  float fVar13;
  float fVar14;
  float __x;
  
  fVar13 = DAT_003ad3a0;
  if (param_7 == (char *)0x0) {
    if (0 < param_4) {
      uVar4 = param_5 - 4U >> 2;
      uVar3 = (uVar4 + 1) * 4;
      if (param_5 + -3 < 1) {
        uVar3 = 0;
      }
      uVar12 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
      pfVar11 = (float *)(param_2 + 4);
      pfVar7 = param_6;
      do {
        fVar13 = 0.0;
        if (0 < param_5 + -3) {
          pfVar9 = pfVar11;
          pfVar10 = param_1;
          do {
            pfVar1 = pfVar9 + 4;
            fVar13 = fVar13 + (pfVar10[1] - *pfVar9) * (pfVar10[1] - *pfVar9) +
                              (*pfVar10 - pfVar9[-1]) * (*pfVar10 - pfVar9[-1]) +
                              (pfVar10[2] - pfVar9[1]) * (pfVar10[2] - pfVar9[1]) +
                              (pfVar10[3] - pfVar9[2]) * (pfVar10[3] - pfVar9[2]);
            pfVar9 = pfVar1;
            pfVar10 = pfVar10 + 4;
          } while (pfVar1 != pfVar11 + (ulong)uVar4 * 4 + 4);
        }
        if ((int)uVar3 < param_5) {
          lVar8 = 0;
          do {
            lVar5 = lVar8 + uVar12;
            lVar6 = lVar8 + (uVar12 - 4);
            lVar8 = lVar8 + 4;
            fVar14 = *(float *)((long)param_1 + lVar5) - *(float *)((long)pfVar11 + lVar6);
            fVar13 = fVar13 + fVar14 * fVar14;
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar3) + 1) * 4);
        }
        fVar14 = SQRT(fVar13);
        if (NAN(fVar14)) {
          fVar14 = sqrtf(fVar13);
        }
        pfVar9 = pfVar7 + 1;
        *pfVar7 = fVar14;
        pfVar11 = pfVar11 + (param_3 >> 2);
        pfVar7 = pfVar9;
      } while (pfVar9 != param_6 + (ulong)(param_4 - 1) + 1);
    }
  }
  else if (0 < param_4) {
    uVar4 = param_5 - 4U >> 2;
    uVar3 = (uVar4 + 1) * 4;
    if (param_5 + -3 < 1) {
      uVar3 = 0;
    }
    uVar12 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
    pfVar11 = (float *)(param_2 + 4);
    pcVar2 = param_7 + (ulong)(param_4 - 1) + 1;
    do {
      fVar14 = fVar13;
      if (*param_7 != '\0') {
        __x = 0.0;
        if (0 < param_5 + -3) {
          pfVar7 = pfVar11;
          pfVar9 = param_1;
          do {
            pfVar10 = pfVar7 + 4;
            __x = __x + (pfVar9[1] - *pfVar7) * (pfVar9[1] - *pfVar7) +
                        (*pfVar9 - pfVar7[-1]) * (*pfVar9 - pfVar7[-1]) +
                        (pfVar9[2] - pfVar7[1]) * (pfVar9[2] - pfVar7[1]) +
                        (pfVar9[3] - pfVar7[2]) * (pfVar9[3] - pfVar7[2]);
            pfVar7 = pfVar10;
            pfVar9 = pfVar9 + 4;
          } while (pfVar10 != pfVar11 + (ulong)uVar4 * 4 + 4);
        }
        if ((int)uVar3 < param_5) {
          lVar8 = 0;
          do {
            lVar5 = lVar8 + uVar12;
            lVar6 = lVar8 + (uVar12 - 4);
            lVar8 = lVar8 + 4;
            fVar14 = *(float *)((long)param_1 + lVar5) - *(float *)((long)pfVar11 + lVar6);
            __x = __x + fVar14 * fVar14;
          } while (lVar8 != ((ulong)((param_5 + -1) - uVar3) + 1) * 4);
        }
        fVar14 = SQRT(__x);
        if (NAN(fVar14)) {
          fVar14 = sqrtf(__x);
        }
      }
      param_7 = param_7 + 1;
      pfVar11 = pfVar11 + (param_3 >> 2);
      *param_6 = fVar14;
      param_6 = param_6 + 1;
    } while (param_7 != pcVar2);
  }
  return;
}


==================================================================

### FUNC 003ad3a4 (1256 bytes) name=sum

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::sum(cv::_InputArray const&) */

void __thiscall cv::sum(cv *this,_InputArray *param_1)

{
  uint uVar1;
  int *piVar2;
  uint uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  uint uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  int iVar10;
  code *pcVar11;
  long lVar12;
  char *pcVar13;
  undefined4 *puVar14;
  Mat *pMVar15;
  undefined8 *in_x8;
  undefined8 *puVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  long lVar21;
  ulong local_508;
  Mat *local_500;
  uchar *local_4e8;
  Mat *local_4e0;
  undefined8 uStack_4d8;
  NAryMatIterator aNStack_4d0 [32];
  ulong local_4b0;
  int local_4a8;
  uint local_490;
  int local_48c;
  undefined4 local_488;
  undefined4 local_484;
  undefined8 local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  undefined4 *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  undefined8 *local_430;
  long local_428;
  undefined8 auStack_420 [132];
  
  iVar10 = _InputArray::kind((_InputArray *)this);
  if (iVar10 == 0x10000) {
    pMVar15 = *(Mat **)(this + 8);
    local_450 = &local_488;
    local_448 = &local_440;
    local_490 = *(uint *)pMVar15;
    local_48c = *(int *)(pMVar15 + 4);
    local_488 = *(undefined4 *)(pMVar15 + 8);
    local_484 = *(undefined4 *)(pMVar15 + 0xc);
    local_480 = *(undefined8 *)(pMVar15 + 0x10);
    local_478 = *(undefined8 *)(pMVar15 + 0x18);
    local_470 = *(undefined8 *)(pMVar15 + 0x20);
    local_468 = *(undefined8 *)(pMVar15 + 0x28);
    local_460 = *(undefined8 *)(pMVar15 + 0x30);
    local_458 = *(long *)(pMVar15 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar2 = (int *)(local_458 + 0x14);
      do {
        cVar5 = '\x01';
        bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
        if (bVar6) {
          *piVar2 = *piVar2 + 1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
    }
    if (2 < *(int *)(pMVar15 + 4)) {
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar15);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  local_500 = (Mat *)&local_490;
  uVar7 = local_490 >> 3 & 0x1ff;
  uVar3 = local_490 & 7;
  uVar1 = uVar7 + 1;
  pcVar11 = (code *)(&PTR_FUN_004f7720)[(int)uVar3];
  if ((4 < uVar1) || (pcVar11 == (code *)0x0)) {
    local_430 = (undefined8 *)0x0;
    local_428 = 0;
    pcVar13 = (char *)String::allocate((String *)&local_430,0x14);
    uVar9 = s_cn_<__4_&&_func____0_00473460._8_8_;
    uVar8 = s_cn_<__4_&&_func____0_00473460._0_8_;
    *(undefined4 *)(pcVar13 + 0x10) = s_cn_<__4_&&_func____0_00473460._16_4_;
    *(undefined8 *)pcVar13 = uVar8;
    *(undefined8 *)(pcVar13 + 8) = uVar9;
    error(-0xd7,(String *)&local_430,"cv::Scalar cv::sum(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x4b3);
    String::deallocate((String *)&local_430);
  }
  uStack_4d8 = 0;
  local_4e0 = local_500;
  NAryMatIterator::NAryMatIterator(aNStack_4d0,&local_4e0,&local_4e8,-1);
  in_x8[1] = 0;
  *in_x8 = 0;
  local_430 = auStack_420;
  in_x8[3] = 0;
  in_x8[2] = 0;
  local_428 = 0x108;
  if (uVar3 < 4) {
    iVar10 = 0x800000;
    if (1 < uVar3) {
      iVar10 = 0x8000;
    }
    iVar17 = iVar10;
    if (local_4a8 < iVar10) {
      iVar17 = local_4a8;
    }
    if (0x108 < uVar1) {
      local_430 = operator_new__((long)(int)uVar1 << 2);
    }
    puVar16 = local_430;
    local_428 = (long)(int)uVar1;
    memset(local_430,0,((long)(int)uVar7 + 1) * 4);
    if (local_48c < 1) {
      lVar21 = 0;
    }
    else {
      lVar21 = local_448[(long)local_48c + -1];
    }
  }
  else {
    lVar21 = 0;
    iVar10 = 0;
    puVar16 = in_x8;
    iVar17 = local_4a8;
  }
  local_508 = 0;
  iVar20 = 0;
  if (local_4b0 != 0) {
    do {
      if (0 < local_4a8) {
        iVar19 = 0;
        iVar18 = 0;
        do {
          iVar4 = iVar19 + local_4a8;
          if (iVar17 < iVar19 + local_4a8) {
            iVar4 = iVar17;
          }
          (*pcVar11)(local_4e8,0,puVar16,iVar4,uVar1);
          iVar20 = iVar20 + iVar4;
          if ((uVar3 < 4) &&
             ((iVar10 <= iVar20 + iVar17 ||
              ((local_4b0 <= local_508 + 1 && (local_4a8 <= iVar18 + iVar4)))))) {
            lVar12 = 0;
            do {
              in_x8[lVar12] = (double)in_x8[lVar12] + (double)*(int *)((long)puVar16 + lVar12 * 4);
              *(undefined4 *)((long)puVar16 + lVar12 * 4) = 0;
              lVar12 = lVar12 + 1;
            } while ((int)lVar12 < (int)uVar1);
            iVar20 = 0;
          }
          iVar18 = iVar18 + iVar17;
          iVar19 = iVar19 - iVar17;
          local_4e8 = local_4e8 + iVar4 * lVar21;
        } while (iVar18 < local_4a8);
      }
      local_508 = local_508 + 1;
      NAryMatIterator::operator++(aNStack_4d0);
    } while (local_508 < local_4b0);
  }
  if ((local_430 != auStack_420) && (local_430 != (undefined8 *)0x0)) {
    operator_delete__(local_430);
  }
  if (local_458 != 0) {
    piVar2 = (int *)(local_458 + 0x14);
    do {
      iVar10 = *piVar2;
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar6) {
        *piVar2 = iVar10 + -1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
    if (iVar10 == 1) {
      Mat::deallocate(local_500);
    }
  }
  local_458 = 0;
  local_480 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  if (0 < local_48c) {
    iVar10 = 0;
    puVar14 = local_450;
    do {
      iVar10 = iVar10 + 1;
      *puVar14 = 0;
      puVar14 = puVar14 + 1;
    } while (iVar10 < local_48c);
  }
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  return;
}


==================================================================

### FUNC 003ad8e8 (744 bytes) name=countNonZero

/* cv::countNonZero(cv::_InputArray const&) */

int cv::countNonZero(_InputArray *param_1)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined2 uVar5;
  undefined1 uVar6;
  int iVar7;
  int iVar8;
  ulong uVar9;
  undefined4 *puVar10;
  char *pcVar11;
  Mat *pMVar12;
  undefined8 *puVar13;
  code *pcVar14;
  uchar *local_c8;
  code *local_c0;
  code *local_b8;
  String *local_b0;
  undefined8 uStack_a8;
  NAryMatIterator aNStack_a0 [32];
  ulong local_80;
  undefined4 local_78;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar9 = _InputArray::type(param_1,-1);
  if ((uVar9 >> 3 & 0x1ff) != 0) {
    local_60 = 0;
    local_58 = 0;
    puVar10 = (undefined4 *)String::allocate((String *)&local_60,7);
    uVar6 = DAT_004734be;
    uVar5 = DAT_004734bc;
    *puVar10 = DAT_004734b8;
    *(undefined2 *)(puVar10 + 1) = uVar5;
    *(undefined1 *)((long)puVar10 + 6) = uVar6;
    error(-0xd7,(String *)&local_60,"int cv::countNonZero(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x511);
    String::deallocate((String *)&local_60);
  }
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar12 = *(Mat **)(param_1 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar2 = *(uint *)pMVar12;
    local_50 = *(undefined8 *)(pMVar12 + 0x10);
    local_60 = *(ulong *)pMVar12;
    local_58 = *(undefined8 *)(pMVar12 + 8);
    local_48 = *(undefined8 *)(pMVar12 + 0x18);
    local_40 = *(undefined8 *)(pMVar12 + 0x20);
    local_38 = *(undefined8 *)(pMVar12 + 0x28);
    local_30 = *(undefined8 *)(pMVar12 + 0x30);
    local_28 = *(long *)(pMVar12 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
    }
    if (*(int *)(pMVar12 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar12 + 0x48);
      local_8 = (*(undefined8 **)(pMVar12 + 0x48))[1];
                    /* catch() { ... } // from try @ 003adb8c with catch @ 003adb50
                       catch() { ... } // from try @ 003ae0d0 with catch @ 003adb50
                       catch() { ... } // from try @ 003ae514 with catch @ 003adb50
                       catch() { ... } // from try @ 003ae624 with catch @ 003adb50 */
      pcVar14 = (code *)(&PTR_FUN_004f76e0)[(int)((uint)local_60 & 7)];
      goto joined_r0x003adb5c;
    }
    local_60 = (ulong)uVar2;
    Mat::copySize((Mat *)&local_60,pMVar12);
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  pcVar14 = (code *)(&PTR_FUN_004f76e0)[(int)((uint)local_60 & 7)];
joined_r0x003adb5c:
  if (pcVar14 == (code *)0x0) {
    local_c0 = pcVar14;
    local_b8 = pcVar14;
    pcVar11 = (char *)String::allocate((String *)&local_c0,9);
    cVar3 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
                    /* try { // try from 003adb8c to 004adbab has its CatchHandler @ 003adb50 */
    *(undefined8 *)pcVar11 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar11[8] = cVar3;
    error(-0xd7,(String *)&local_c0,"int cv::countNonZero(cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x53d);
    String::deallocate((String *)&local_c0);
  }
  uStack_a8 = 0;
  local_b0 = (String *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_a0,(Mat **)&local_b0,&local_c8,-1);
  iVar7 = 0;
  for (uVar9 = 0; uVar9 < local_80; uVar9 = uVar9 + 1) {
    iVar8 = (*pcVar14)(local_c8,local_78);
    iVar7 = iVar7 + iVar8;
    NAryMatIterator::operator++(aNStack_a0);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar8 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar8 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar8 = 0;
    puVar13 = local_20;
    do {
      *(undefined4 *)puVar13 = 0;
      iVar8 = iVar8 + 1;
      puVar13 = (undefined8 *)((long)puVar13 + 4);
    } while (iVar8 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  return iVar7;
}


==================================================================

### FUNC 003adc20 (2352 bytes) name=mean

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::mean(cv::_InputArray const&, cv::_InputArray const&) */

double * __thiscall cv::mean(cv *this,_InputArray *param_1,_InputArray *param_2)

{
  uint uVar1;
  uint uVar2;
  int *piVar3;
  int *piVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  char cVar8;
  bool bVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  code *pcVar17;
  long lVar18;
  char *pcVar19;
  double *pdVar20;
  long lVar21;
  long lVar22;
  long lVar23;
  double *pdVar24;
  int *piVar25;
  undefined4 *puVar26;
  Mat *pMVar27;
  uint uVar28;
  long lVar29;
  double *pdVar30;
  double *in_x8;
  uint uVar31;
  int iVar32;
  int iVar33;
  ulong uVar34;
  double *pdVar35;
  uint uVar36;
  double dVar37;
  undefined1 auVar38 [16];
  undefined1 auVar39 [16];
  double dVar40;
  ulong local_5b8;
  Mat *local_5b0;
  Mat *local_5a8;
  undefined8 local_588;
  undefined8 local_580;
  uchar *local_578;
  long local_570;
  Mat *local_568;
  Mat *local_560;
  undefined8 local_558;
  double local_550 [4];
  NAryMatIterator aNStack_530 [32];
  ulong local_510;
  uint local_508;
  uint local_4f0;
  int local_4ec;
  undefined4 local_4e8;
  undefined4 local_4e4;
  undefined8 local_4e0;
  undefined8 local_4d8;
  undefined8 local_4d0;
  undefined8 local_4c8;
  undefined8 local_4c0;
  long local_4b8;
  undefined4 *local_4b0;
  undefined8 *local_4a8;
  undefined8 local_4a0;
  undefined8 local_498;
  uint local_490;
  int local_48c;
  int local_488;
  int local_484;
  long local_480;
  undefined8 local_478;
  undefined8 local_470;
  undefined8 local_468;
  undefined8 local_460;
  long local_458;
  int *local_450;
  undefined8 *local_448;
  undefined8 local_440;
  undefined8 local_438;
  double *local_430;
  long local_428;
  double adStack_420 [132];
  
                    /* try { // try from 003adc20 to 004adc4b has its CatchHandler @ 003ae690 */
  iVar14 = _InputArray::kind((_InputArray *)this);
  if (iVar14 == 0x10000) {
    pMVar27 = *(Mat **)(this + 8);
    local_4b0 = &local_4e8;
    local_4a8 = &local_4a0;
    local_4f0 = *(uint *)pMVar27;
                    /* try { // try from 003ae400 to 004ae403 has its CatchHandler @ 003ae698 */
    local_4ec = *(int *)(pMVar27 + 4);
    local_4e8 = *(undefined4 *)(pMVar27 + 8);
                    /* try { // try from 003ae408 to 004ae40b has its CatchHandler @ 003ae6a0 */
    local_4e4 = *(undefined4 *)(pMVar27 + 0xc);
    local_4e0 = *(undefined8 *)(pMVar27 + 0x10);
    local_4d8 = *(undefined8 *)(pMVar27 + 0x18);
    local_4d0 = *(undefined8 *)(pMVar27 + 0x20);
    local_4c8 = *(undefined8 *)(pMVar27 + 0x28);
    local_4c0 = *(undefined8 *)(pMVar27 + 0x30);
    local_4b8 = *(long *)(pMVar27 + 0x38);
                    /* try { // try from 003ae42c to 004ae42f has its CatchHandler @ 003ae704 */
    local_498 = 0;
    local_4a0 = 0;
    if (local_4b8 != 0) {
      piVar25 = (int *)(local_4b8 + 0x14);
      do {
        cVar8 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar9) {
          *piVar25 = *piVar25 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (2 < *(int *)(pMVar27 + 4)) {
      local_4ec = 0;
      Mat::copySize((Mat *)&local_4f0,pMVar27);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  local_5a8 = (Mat *)&local_4f0;
                    /* try { // try from 003adc84 to 004adc87 has its CatchHandler @ 003ae5f4 */
  iVar14 = _InputArray::kind(param_1);
                    /* try { // try from 003adc8c to 004adc8f has its CatchHandler @ 003ae690 */
  if (iVar14 == 0x10000) {
    pMVar27 = *(Mat **)(param_1 + 8);
    local_450 = &local_488;
    local_448 = &local_440;
    local_490 = *(uint *)pMVar27;
    local_48c = *(int *)(pMVar27 + 4);
    local_488 = *(int *)(pMVar27 + 8);
    local_484 = *(int *)(pMVar27 + 0xc);
    local_480 = *(long *)(pMVar27 + 0x10);
    local_478 = *(undefined8 *)(pMVar27 + 0x18);
    local_470 = *(undefined8 *)(pMVar27 + 0x20);
                    /* try { // try from 003ae35c to 004ae35f has its CatchHandler @ 003ae628 */
    local_468 = *(undefined8 *)(pMVar27 + 0x28);
    local_460 = *(undefined8 *)(pMVar27 + 0x30);
    local_458 = *(long *)(pMVar27 + 0x38);
    local_438 = 0;
    local_440 = 0;
    if (local_458 != 0) {
      piVar25 = (int *)(local_458 + 0x14);
      do {
        cVar8 = '\x01';
        bVar9 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar9) {
          *piVar25 = *piVar25 + 1;
          cVar8 = ExclusiveMonitorsStatus();
        }
      } while (cVar8 != '\0');
    }
    if (2 < *(int *)(pMVar27 + 4)) {
                    /* try { // try from 003ae514 to 004ae517 has its CatchHandler @ 003adb50 */
      local_48c = 0;
      Mat::copySize((Mat *)&local_490,pMVar27);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_5b0 = (Mat *)&local_490;
  if (local_480 != 0) {
    if (local_48c < 3) {
      lVar22 = (long)local_484 * (long)local_488;
    }
    else {
      lVar22 = 1;
      lVar18 = 0;
      do {
        piVar25 = local_450 + lVar18;
        lVar18 = lVar18 + 1;
        lVar22 = lVar22 * *piVar25;
      } while ((int)lVar18 < local_48c);
    }
                    /* try { // try from 003adcd4 to 004add57 has its CatchHandler @ 003ae698 */
    if ((lVar22 != 0) && ((local_490 & 0xfff) != 0)) {
      local_588 = 0;
      local_580 = 0;
      pcVar19 = (char *)String::allocate((String *)&local_588,0x24);
      uVar13 = s_mask_empty______mask_type______C_004734c0._24_8_;
      uVar12 = s_mask_empty______mask_type______C_004734c0._16_8_;
      uVar11 = s_mask_empty______mask_type______C_004734c0._8_8_;
      uVar10 = s_mask_empty______mask_type______C_004734c0._0_8_;
      *(undefined4 *)(pcVar19 + 0x20) = s_mask_empty______mask_type______C_004734c0._32_4_;
      *(undefined8 *)pcVar19 = uVar10;
      *(undefined8 *)(pcVar19 + 8) = uVar11;
      *(undefined8 *)(pcVar19 + 0x10) = uVar12;
      *(undefined8 *)(pcVar19 + 0x18) = uVar13;
      error(-0xd7,(String *)&local_588,"cv::Scalar cv::mean(cv::InputArray, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x54d);
      String::deallocate((String *)&local_588);
                    /* try { // try from 003ae504 to 004ae507 has its CatchHandler @ 003ae628 */
    }
  }
  uVar7 = local_4f0 >> 3 & 0x1ff;
  uVar5 = local_4f0 & 7;
  uVar1 = uVar7 + 1;
  pcVar17 = (code *)(&PTR_FUN_004f7720)[(int)uVar5];
  if ((4 < uVar1) || (pcVar17 == (code *)0x0)) {
    local_430 = (double *)0x0;
    local_428 = 0;
    pcVar19 = (char *)String::allocate((String *)&local_430,0x14);
    uVar11 = s_cn_<__4_&&_func____0_00473460._8_8_;
    uVar10 = s_cn_<__4_&&_func____0_00473460._0_8_;
    *(undefined4 *)(pcVar19 + 0x10) = s_cn_<__4_&&_func____0_00473460._16_4_;
    *(undefined8 *)pcVar19 = uVar10;
    *(undefined8 *)(pcVar19 + 8) = uVar11;
    error(-0xd7,(String *)&local_430,"cv::Scalar cv::mean(cv::InputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x5ab);
    String::deallocate((String *)&local_430);
  }
  local_568 = local_5a8;
  local_558 = 0;
  local_560 = local_5b0;
  NAryMatIterator::NAryMatIterator(aNStack_530,&local_568,&local_578,-1);
  local_550[1] = 0.0;
  local_550[0] = 0.0;
  local_430 = adStack_420;
  local_550[3] = 0.0;
  local_550[2] = 0.0;
  local_428 = 0x108;
  if (uVar5 < 4) {
    uVar15 = 0x800000;
    if (1 < uVar5) {
      uVar15 = 0x8000;
    }
    uVar31 = uVar15;
    if ((int)local_508 < (int)uVar15) {
      uVar31 = local_508;
    }
    if (0x108 < uVar1) {
      local_430 = operator_new__((long)(int)uVar1 << 2);
    }
    pdVar35 = local_430;
    local_428 = (long)(int)uVar1;
    memset(local_430,0,((long)(int)uVar7 + 1) * 4);
    if (local_4ec < 1) {
      lVar18 = 0;
    }
    else {
      lVar18 = local_4a8[(long)local_4ec + -1];
    }
  }
  else {
    uVar15 = (uint)(uVar5 < 4);
    lVar18 = 0;
    pdVar35 = local_550;
    uVar31 = local_508;
  }
  uVar2 = (uVar7 - 3 >> 2) + 1;
  local_5b8 = 0;
  uVar36 = uVar2 * 4;
  uVar34 = 0;
                    /* try { // try from 003adef8 to 004adf37 has its CatchHandler @ 003ae6a0 */
  iVar14 = 0;
  uVar6 = uVar36;
  if (uVar7 < 3) {
    uVar6 = 0;
  }
  lVar22 = (long)(int)uVar6;
  lVar23 = (long)(int)(uVar6 + 1);
  lVar29 = (long)(int)(uVar6 + 2);
  piVar25 = (int *)((long)pdVar35 + lVar22 * 4);
  piVar3 = (int *)((long)pdVar35 + lVar23 * 4);
  piVar4 = (int *)((long)pdVar35 + lVar29 * 4);
  if (local_510 != 0) {
    do {
      if (0 < (int)local_508) {
        iVar33 = 0;
        iVar32 = 0;
        do {
          uVar7 = uVar31;
          if ((int)(iVar33 + local_508) < (int)uVar31) {
            uVar7 = iVar33 + local_508;
          }
          iVar16 = (*pcVar17)(local_578,local_570,pdVar35,uVar7,uVar1);
          uVar34 = uVar34 + (long)iVar16;
                    /* try { // try from 003adfa8 to 004adfab has its CatchHandler @ 003ae6e8 */
          iVar14 = iVar14 + iVar16;
          if ((uVar5 < 4) &&
             (((int)uVar15 <= (int)(iVar14 + uVar31) ||
              ((local_510 <= local_5b8 + 1 && ((int)local_508 <= (int)(iVar32 + uVar7))))))) {
            if (uVar1 < 5 ||
                local_550 < (double *)((long)pdVar35 + (ulong)uVar1 * 4) &&
                pdVar35 < local_550 + uVar1) {
              lVar21 = 0;
              do {
                local_550[lVar21] = local_550[lVar21] + (double)*(int *)((long)pdVar35 + lVar21 * 4)
                ;
                *(int *)((long)pdVar35 + lVar21 * 4) = 0;
                lVar21 = lVar21 + 1;
              } while ((int)lVar21 < (int)uVar1);
            }
            else {
              pdVar20 = local_550 + 2;
              uVar28 = 0;
              pdVar24 = local_550;
              pdVar30 = pdVar35;
              do {
                uVar28 = uVar28 + 1;
                dVar40 = pdVar20[1];
                dVar37 = *pdVar20;
                auVar39._0_8_ = (long)*(int *)pdVar30;
                auVar39._8_8_ = (long)*(int *)((long)pdVar30 + 4);
                    /* try { // try from 003ae01c to 004ae01f has its CatchHandler @ 003ae704 */
                auVar38._0_8_ = (long)*(int *)(pdVar30 + 1);
                auVar38._8_8_ = (long)*(int *)((long)pdVar30 + 0xc);
                auVar39 = NEON_scvtf(auVar39,8);
                auVar38 = NEON_scvtf(auVar38,8);
                pdVar24[1] = pdVar24[1] + auVar39._8_8_;
                *pdVar24 = *pdVar24 + auVar39._0_8_;
                pdVar24 = pdVar24 + 4;
                pdVar20[1] = auVar38._8_8_ + dVar40;
                *pdVar20 = auVar38._0_8_ + dVar37;
                pdVar20 = pdVar20 + 4;
                pdVar30[1] = 0.0;
                *pdVar30 = 0.0;
                pdVar30 = pdVar30 + 2;
              } while (uVar28 < uVar2);
              if (uVar1 != uVar36) {
                local_550[lVar22] = local_550[lVar22] + (double)*piVar25;
                *piVar25 = 0;
                if ((int)(uVar6 + 1) < (int)uVar1) {
                    /* try { // try from 003ae0a4 to 004ae0a7 has its CatchHandler @ 003ae690 */
                  local_550[lVar23] = local_550[lVar23] + (double)*piVar3;
                  *piVar3 = 0;
                  if ((int)(uVar6 + 2) < (int)uVar1) {
                    local_550[lVar29] = local_550[lVar29] + (double)*piVar4;
                    *piVar4 = 0;
                  }
                }
              }
            }
                    /* try { // try from 003ae0d0 to 004ae123 has its CatchHandler @ 003adb50 */
            iVar14 = 0;
          }
          local_578 = local_578 + (int)uVar7 * lVar18;
          if (local_570 != 0) {
            local_570 = local_570 + (int)uVar7;
          }
          iVar32 = iVar32 + uVar31;
          iVar33 = iVar33 - uVar31;
        } while (iVar32 < (int)local_508);
      }
      local_5b8 = local_5b8 + 1;
      NAryMatIterator::operator++(aNStack_530);
    } while (local_5b8 < local_510);
  }
  dVar37 = 0.0;
  if (uVar34 != 0) {
    dVar37 = 1.0 / (double)uVar34;
  }
  in_x8[1] = dVar37 * local_550[1];
  *in_x8 = dVar37 * local_550[0];
  in_x8[3] = dVar37 * local_550[3];
  in_x8[2] = dVar37 * local_550[2];
  if ((local_430 != adStack_420) && (local_430 != (double *)0x0)) {
    operator_delete__(local_430);
  }
  if (local_458 != 0) {
    piVar25 = (int *)(local_458 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar9) {
        *piVar25 = iVar14 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate(local_5b0);
    }
  }
  local_458 = 0;
  local_480 = 0;
  local_468 = 0;
  local_470 = 0;
  local_478 = 0;
  if (0 < local_48c) {
    iVar14 = 0;
    piVar25 = local_450;
    do {
      iVar14 = iVar14 + 1;
      *piVar25 = 0;
      piVar25 = piVar25 + 1;
    } while (iVar14 < local_48c);
  }
  if (local_448 != &local_440) {
    fastFree(local_448);
  }
  if (local_4b8 != 0) {
    piVar25 = (int *)(local_4b8 + 0x14);
    do {
      iVar14 = *piVar25;
      cVar8 = '\x01';
      bVar9 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar9) {
        *piVar25 = iVar14 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar14 == 1) {
      Mat::deallocate(local_5a8);
    }
  }
  local_4b8 = 0;
  local_4e0 = 0;
  local_4c8 = 0;
                    /* try { // try from 003ae258 to 004ae25b has its CatchHandler @ 003ae704 */
  local_4d0 = 0;
  local_4d8 = 0;
  if (0 < local_4ec) {
                    /* try { // try from 003ae264 to 004ae267 has its CatchHandler @ 003ae6e8 */
    iVar14 = 0;
    puVar26 = local_4b0;
    do {
                    /* try { // try from 003ae270 to 004ae273 has its CatchHandler @ 003ae690 */
      iVar14 = iVar14 + 1;
      *puVar26 = 0;
      puVar26 = puVar26 + 1;
    } while (iVar14 < local_4ec);
  }
                    /* try { // try from 003ae294 to 004ae2bb has its CatchHandler @ 003ae698 */
  if (local_4a8 != &local_4a0) {
    fastFree(local_4a8);
  }
  return in_x8;
}


==================================================================

### FUNC 003ae5e4 (4516 bytes) name=meanStdDev

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::meanStdDev(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&,
   cv::_InputArray const&) */

void cv::meanStdDev(_InputArray *param_1,_OutputArray *param_2,_OutputArray *param_3,
                   _InputArray *param_4)

{
  uint uVar1;
  uint uVar2;
  double *pdVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  bool bVar7;
  bool bVar8;
  double *pdVar9;
  uint uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined2 uVar15;
  char cVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  uint uVar20;
  long lVar21;
  code *pcVar22;
  double *pdVar23;
  double *pdVar24;
  ulong uVar25;
  void *__dest;
  int *piVar26;
  long lVar27;
  char *pcVar28;
  double *pdVar29;
  undefined4 *puVar30;
  undefined8 *puVar31;
  Mat *pMVar32;
  uint uVar33;
  uint uVar34;
  double *pdVar35;
  ulong uVar36;
  double *pdVar37;
  int *piVar38;
  int *piVar39;
  uint uVar40;
  int iVar41;
  long lVar42;
  int *piVar43;
  int iVar44;
  int iVar45;
  ulong uVar46;
  int iVar47;
  int iVar48;
  double dVar49;
  undefined1 auVar50 [16];
  undefined1 auVar51 [16];
  double dVar52;
  undefined1 auVar53 [16];
  undefined1 auVar54 [16];
  double dVar55;
  int local_6a4;
  ulong local_678;
  Mat *local_638;
  Mat *local_630;
  uchar *local_600;
  long local_5f8;
  undefined8 local_5f0;
  undefined8 local_5e8;
  Mat *local_5e0;
  Mat *local_5d8;
  undefined8 local_5d0;
  undefined8 local_5c8;
  Mat *local_5c0;
  undefined4 local_5b8;
  undefined4 local_5b4;
  NAryMatIterator aNStack_5b0 [32];
  ulong local_590;
  int local_588;
  uint local_570;
  int local_56c;
  undefined4 local_568;
  undefined4 local_564;
  undefined8 local_560;
  undefined8 local_558;
  undefined8 local_550;
  undefined8 local_548;
  undefined8 local_540;
  long local_538;
  undefined4 *local_530;
  undefined8 *local_528;
  undefined8 local_520;
  undefined8 local_518;
  uint local_510;
  int local_50c;
  int local_508;
  int local_504;
  long local_500;
  undefined8 local_4f8;
  undefined8 local_4f0;
  undefined8 local_4e8;
  undefined8 local_4e0;
  long local_4d8;
  int *local_4d0;
  undefined8 *local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  double *local_4a0;
  undefined8 local_498;
  undefined8 local_490;
  undefined8 local_488;
  undefined8 local_480;
  long local_478;
  undefined8 *local_470;
  undefined8 *local_468;
  undefined8 local_460;
  undefined8 local_458;
  double *local_450;
  long local_448;
  double adStack_440 [136];
  
                    /* catch() { ... } // from try @ 003adc84 with catch @ 003ae5f4 */
                    /* try { // try from 003ae624 to 004ae627 has its CatchHandler @ 003adb50 */
  iVar17 = _InputArray::kind(param_1);
                    /* catch() { ... } // from try @ 003ae35c with catch @ 003ae628
                       catch() { ... } // from try @ 003ae504 with catch @ 003ae628 */
  if (iVar17 == 0x10000) {
    pMVar32 = *(Mat **)(param_1 + 8);
    local_530 = &local_568;
    local_528 = &local_520;
    local_570 = *(uint *)pMVar32;
    local_56c = *(int *)(pMVar32 + 4);
    local_568 = *(undefined4 *)(pMVar32 + 8);
    local_564 = *(undefined4 *)(pMVar32 + 0xc);
    local_560 = *(undefined8 *)(pMVar32 + 0x10);
    local_558 = *(undefined8 *)(pMVar32 + 0x18);
    local_550 = *(undefined8 *)(pMVar32 + 0x20);
    local_548 = *(undefined8 *)(pMVar32 + 0x28);
    local_540 = *(undefined8 *)(pMVar32 + 0x30);
    local_538 = *(long *)(pMVar32 + 0x38);
    local_518 = 0;
    local_520 = 0;
    if (local_538 != 0) {
      piVar26 = (int *)(local_538 + 0x14);
      do {
        cVar16 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar7) {
          *piVar26 = *piVar26 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_56c = 0;
      Mat::copySize((Mat *)&local_570,pMVar32);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_630 = (Mat *)&local_570;
  iVar17 = _InputArray::kind(param_4);
  if (iVar17 == 0x10000) {
    pMVar32 = *(Mat **)(param_4 + 8);
    local_4d0 = &local_508;
    local_4c8 = &local_4c0;
    local_510 = *(uint *)pMVar32;
    local_50c = *(int *)(pMVar32 + 4);
    local_508 = *(int *)(pMVar32 + 8);
    local_504 = *(int *)(pMVar32 + 0xc);
    local_500 = *(long *)(pMVar32 + 0x10);
    local_4f8 = *(undefined8 *)(pMVar32 + 0x18);
    local_4f0 = *(undefined8 *)(pMVar32 + 0x20);
    local_4e8 = *(undefined8 *)(pMVar32 + 0x28);
    local_4e0 = *(undefined8 *)(pMVar32 + 0x30);
    local_4d8 = *(long *)(pMVar32 + 0x38);
    local_4b8 = 0;
    local_4c0 = 0;
    if (local_4d8 != 0) {
      piVar26 = (int *)(local_4d8 + 0x14);
      do {
        cVar16 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar26,0x10);
        if (bVar7) {
          *piVar26 = *piVar26 + 1;
          cVar16 = ExclusiveMonitorsStatus();
        }
      } while (cVar16 != '\0');
    }
    if (2 < *(int *)(pMVar32 + 4)) {
      local_50c = 0;
      Mat::copySize((Mat *)&local_510,pMVar32);
    }
  }
  else {
                    /* catch() { ... } // from try @ 003ae484 with catch @ 003ae66c */
    _InputArray::getMat_((int)param_4);
  }
  local_638 = (Mat *)&local_510;
  if (local_500 != 0) {
    if (local_50c < 3) {
                    /* catch() { ... } // from try @ 003adbdc with catch @ 003ae690
                       catch() { ... } // from try @ 003adc20 with catch @ 003ae690
                       catch() { ... } // from try @ 003adc8c with catch @ 003ae690
                       catch() { ... } // from try @ 003ae0a4 with catch @ 003ae690
                       catch() { ... } // from try @ 003ae270 with catch @ 003ae690 */
      lVar21 = (long)local_504 * (long)local_508;
    }
    else {
      lVar42 = 0;
      lVar21 = 1;
      do {
        piVar26 = local_4d0 + lVar42;
        lVar42 = lVar42 + 1;
        lVar21 = lVar21 * *piVar26;
      } while ((int)lVar42 < local_50c);
    }
                    /* catch() { ... } // from try @ 003adcd4 with catch @ 003ae698
                       catch() { ... } // from try @ 003ae294 with catch @ 003ae698
                       catch() { ... } // from try @ 003ae400 with catch @ 003ae698
                       catch() { ... } // from try @ 003ae5d0 with catch @ 003ae698 */
                    /* catch() { ... } // from try @ 003adef8 with catch @ 003ae6a0
                       catch() { ... } // from try @ 003ae408 with catch @ 003ae6a0 */
    if ((lVar21 != 0) && ((local_510 & 0xfff) != 0)) {
      local_5c8 = 0;
      local_5c0 = (Mat *)0x0;
      pcVar28 = (char *)String::allocate((String *)&local_5c8,0x26);
      uVar15 = s_mask_empty______mask_type______C_004734e8._36_2_;
      uVar14 = s_mask_empty______mask_type______C_004734e8._24_8_;
      uVar13 = s_mask_empty______mask_type______C_004734e8._16_8_;
      uVar12 = s_mask_empty______mask_type______C_004734e8._8_8_;
      uVar11 = s_mask_empty______mask_type______C_004734e8._0_8_;
      *(undefined4 *)(pcVar28 + 0x20) = s_mask_empty______mask_type______C_004734e8._32_4_;
      *(undefined2 *)(pcVar28 + 0x24) = uVar15;
      *(undefined8 *)pcVar28 = uVar11;
      *(undefined8 *)(pcVar28 + 8) = uVar12;
      *(undefined8 *)(pcVar28 + 0x10) = uVar13;
      *(undefined8 *)(pcVar28 + 0x18) = uVar14;
      error(-0xd7,(String *)&local_5c8,
            "void cv::meanStdDev(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x65b);
      String::deallocate((String *)&local_5c8);
    }
  }
  uVar4 = local_570 & 7;
  uVar10 = local_570 >> 3 & 0x1ff;
  uVar1 = uVar10 + 1;
  uVar46 = (ulong)uVar1;
  pcVar22 = (code *)(&PTR_FUN_004f7860)[(int)uVar4];
  if (pcVar22 == (code *)0x0) {
    local_4b0 = pcVar22;
    local_4a8 = pcVar22;
    pcVar28 = (char *)String::allocate((String *)&local_4b0,9);
    cVar16 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar28 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar28[8] = cVar16;
    error(-0xd7,(String *)&local_4b0,
          "void cv::meanStdDev(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x6d2);
    String::deallocate((String *)&local_4b0);
  }
                    /* catch() { ... } // from try @ 003adfa8 with catch @ 003ae6e8
                       catch() { ... } // from try @ 003ae264 with catch @ 003ae6e8 */
                    /* catch() { ... } // from try @ 003adc18 with catch @ 003ae6f0 */
  local_5e0 = local_630;
                    /* catch() { ... } // from try @ 003ae01c with catch @ 003ae704
                       catch() { ... } // from try @ 003ae258 with catch @ 003ae704
                       catch() { ... } // from try @ 003ae42c with catch @ 003ae704
                       catch() { ... } // from try @ 003ae48c with catch @ 003ae704 */
  local_5d0 = 0;
  local_5d8 = local_638;
  NAryMatIterator::NAryMatIterator(aNStack_5b0,&local_5e0,&local_600,-1);
                    /* catch() { ... } // from try @ 003ae760 with catch @ 003ae720
                       catch() { ... } // from try @ 003aef30 with catch @ 003ae720
                       catch() { ... } // from try @ 003aef8c with catch @ 003ae720
                       catch() { ... } // from try @ 003af10c with catch @ 003ae720 */
  pdVar23 = adStack_440;
  local_450 = pdVar23;
  lVar42 = (long)(int)(uVar1 * 4);
  local_448 = 0x88;
  if (uVar1 == 0x22 || uVar1 * 4 < 0x88) {
    local_448 = lVar42;
  }
  else {
    pdVar23 = operator_new__(lVar42 << 3);
                    /* try { // try from 003ae760 to 004ae763 has its CatchHandler @ 003ae720 */
  }
  pdVar3 = pdVar23 + uVar46;
                    /* try { // try from 003ae77c to 004ae77f has its CatchHandler @ 003af1c0 */
  lVar21 = (long)(int)uVar10 + 1;
  if ((pdVar3 < pdVar23 + 2) || (uVar1 < 0x10)) {
    lVar27 = 0;
    do {
      pdVar3[lVar27] = 0.0;
      pdVar23[lVar27] = 0.0;
      lVar27 = lVar27 + 1;
    } while ((int)lVar27 < (int)uVar1);
  }
  else {
    uVar34 = (uint)((ulong)pdVar3 >> 3) & 1;
    uVar5 = uVar1;
    if (uVar34 < uVar1) {
      uVar5 = uVar34;
    }
    if (uVar5 != 0) {
      *pdVar3 = 0.0;
      *pdVar23 = 0.0;
    }
    uVar34 = ((uVar1 - uVar5) - 2 >> 1) + 1;
    uVar40 = 0;
    iVar17 = uVar34 * 2;
    pdVar24 = pdVar23 + uVar5;
    pdVar37 = pdVar23 + lVar21 + (ulong)uVar5;
    do {
      pdVar37[1] = 0.0;
      *pdVar37 = 0.0;
      uVar40 = uVar40 + 1;
      pdVar24[1] = 0.0;
      *pdVar24 = 0.0;
      pdVar24 = pdVar24 + 2;
      pdVar37 = pdVar37 + 2;
    } while (uVar40 < uVar34);
    uVar34 = (uint)(uVar5 != 0) + iVar17;
    if (uVar1 - uVar5 != iVar17) {
      uVar25 = -(ulong)(uVar34 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar34 << 3;
      *(undefined8 *)((long)pdVar3 + uVar25) = 0;
      *(undefined8 *)((long)pdVar23 + uVar25) = 0;
    }
  }
  iVar17 = local_588;
  pdVar24 = pdVar3;
  if (uVar4 < 4) {
                    /* try { // try from 003ae834 to 004ae837 has its CatchHandler @ 003af110 */
    lVar27 = (long)(int)uVar10 + 2;
    if (0x8000 < local_588) {
      iVar17 = 0x8000;
    }
    pdVar37 = pdVar3 + uVar46;
    if (uVar4 < 2) {
      pdVar24 = (double *)((long)pdVar37 + lVar42);
    }
    if ((pdVar23 + lVar27 * 2 + -2 < pdVar24 + 2 && pdVar24 < pdVar23 + lVar27 * 2) || (uVar1 < 0xd)
       ) {
      lVar27 = 0;
      do {
        *(int *)((long)pdVar24 + lVar27 * 4) = 0;
        *(int *)((long)pdVar37 + lVar27 * 4) = 0;
        lVar27 = lVar27 + 1;
      } while ((int)lVar27 < (int)uVar1);
    }
    else {
      uVar5 = -((uint)((ulong)pdVar24 >> 2) & 3) & 3;
      uVar25 = (ulong)uVar5;
      if (uVar1 < uVar5) {
        uVar25 = uVar46;
      }
      iVar18 = (int)uVar25;
      uVar36 = uVar25;
      if (iVar18 != 0) {
        *(int *)pdVar24 = 0;
        *(int *)(pdVar3 + uVar46) = 0;
        if (iVar18 != 1) {
          *(int *)((long)pdVar24 + 4) = 0;
          *(int *)((long)pdVar37 + 4) = 0;
          if (iVar18 == 3) {
            *(int *)(pdVar24 + 1) = 0;
            *(int *)(pdVar37 + 1) = 0;
          }
          else {
            uVar36 = 2;
          }
        }
      }
      uVar5 = ((uVar1 - iVar18) - 4 >> 2) + 1;
      uVar34 = 0;
      iVar41 = uVar5 * 4;
      piVar26 = (int *)((long)pdVar24 + uVar25 * 4);
      piVar43 = (int *)((long)pdVar23 + (lVar42 + uVar25) * 4);
      do {
        piVar26[2] = 0;
        piVar26[3] = 0;
        piVar26[0] = 0;
        piVar26[1] = 0;
        uVar34 = uVar34 + 1;
        piVar43[2] = 0;
        piVar43[3] = 0;
        piVar43[0] = 0;
        piVar43[1] = 0;
        piVar26 = piVar26 + 4;
        piVar43 = piVar43 + 4;
      } while (uVar34 < uVar5);
      uVar5 = (int)uVar36 + iVar41;
      if (uVar1 - iVar18 != iVar41) {
        uVar25 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
        *(undefined4 *)((long)pdVar24 + uVar25) = 0;
        *(undefined4 *)((long)pdVar37 + uVar25) = 0;
        if ((int)(uVar5 + 1) < (int)uVar1) {
          *(undefined4 *)((long)pdVar24 + uVar25 + 4) = 0;
          *(undefined4 *)((long)pdVar37 + uVar25 + 4) = 0;
          if ((int)(uVar5 + 2) < (int)uVar1) {
            *(undefined4 *)((long)pdVar24 + uVar25 + 8) = 0;
            *(undefined4 *)((long)pdVar37 + uVar25 + 8) = 0;
          }
        }
      }
    }
    if (local_56c < 1) {
      local_6a4 = 0x8000;
      lVar27 = 0;
    }
    else {
      local_6a4 = 0x8000;
      lVar27 = local_528[(long)local_56c + -1];
    }
  }
  else {
    lVar27 = 0;
    local_6a4 = 0;
    pdVar37 = pdVar23;
  }
  uVar5 = (uint)((ulong)pdVar23 >> 3) & 1;
                    /* try { // try from 003ae91c to 004ae97f has its CatchHandler @ 003af1b8 */
  if (uVar1 < uVar5) {
    uVar5 = uVar1;
  }
  uVar34 = (uint)((ulong)(pdVar23 + lVar21) >> 3) & 1;
  if (uVar1 < uVar34) {
    uVar34 = uVar1;
  }
  uVar40 = ((uVar1 - uVar5) - 4 >> 2) + 1;
  iVar47 = uVar40 * 4;
                    /* try { // try from 003ae9b8 to 004ae9bb has its CatchHandler @ 003af16c */
                    /* try { // try from 003ae9c0 to 004ae9c3 has its CatchHandler @ 003af1b8 */
  uVar2 = ((uVar1 - uVar34) - 4 >> 2) + 1;
  piVar26 = (int *)((long)pdVar24 + (ulong)uVar34 * 4);
  local_678 = 0;
  piVar43 = (int *)((long)pdVar37 + (ulong)uVar5 * 4);
  iVar48 = uVar2 * 4;
  iVar18 = 0;
  iVar41 = 0;
  local_450 = pdVar23;
  local_448 = lVar42;
  if (local_590 != 0) {
    do {
                    /* try { // try from 003aea34 to 004aea37 has its CatchHandler @ 003af224 */
      if (0 < local_588) {
        iVar45 = 0;
        iVar44 = 0;
        do {
          iVar6 = iVar17;
          if (iVar45 + local_588 < iVar17) {
            iVar6 = iVar45 + local_588;
          }
          iVar19 = (*pcVar22)(local_600,local_5f8,pdVar37,pdVar24,iVar6,uVar46);
          iVar18 = iVar18 + iVar19;
          iVar41 = iVar41 + iVar19;
                    /* try { // try from 003aeaa8 to 004aeb07 has its CatchHandler @ 003af110 */
          if ((uVar4 < 4) &&
             ((local_6a4 <= iVar18 + iVar17 ||
              ((local_590 <= local_678 + 1 && (local_588 <= iVar44 + iVar6)))))) {
            if (uVar1 < 8 ||
                pdVar23 < (double *)((long)pdVar37 + uVar46 * 4) && pdVar37 < pdVar23 + uVar46) {
              lVar42 = 0;
              do {
                pdVar23[lVar42] = pdVar23[lVar42] + (double)*(int *)((long)pdVar37 + lVar42 * 4);
                *(int *)((long)pdVar37 + lVar42 * 4) = 0;
                lVar42 = lVar42 + 1;
                    /* try { // try from 003af02c to 004af02f has its CatchHandler @ 003af224 */
              } while ((int)lVar42 < (int)uVar1);
            }
            else {
              if (uVar5 != 0) {
                *pdVar23 = *pdVar23 + (double)*(int *)pdVar37;
                *(int *)pdVar37 = 0;
              }
              uVar20 = (uint)(uVar5 != 0);
              if (2 < uVar10 - uVar5) {
                uVar33 = 0;
                pdVar29 = pdVar23 + uVar5;
                pdVar35 = pdVar23 + uVar5;
                piVar38 = piVar43;
                piVar39 = piVar43;
                do {
                  pdVar9 = pdVar29 + 1;
                  dVar55 = *pdVar29;
                  dVar49 = pdVar29[3];
                  dVar52 = pdVar29[2];
                  uVar33 = uVar33 + 1;
                  pdVar29 = pdVar29 + 4;
                  auVar53._0_8_ = (long)*piVar38;
                  auVar53._8_8_ = (long)piVar38[1];
                  auVar50._0_8_ = (long)piVar38[2];
                  auVar50._8_8_ = (long)piVar38[3];
                  auVar53 = NEON_scvtf(auVar53,8);
                  auVar50 = NEON_scvtf(auVar50,8);
                  pdVar35[1] = *pdVar9 + auVar53._8_8_;
                  *pdVar35 = dVar55 + auVar53._0_8_;
                  pdVar35[3] = auVar50._8_8_ + dVar49;
                  pdVar35[2] = auVar50._0_8_ + dVar52;
                  piVar39[2] = 0;
                  piVar39[3] = 0;
                  piVar39[0] = 0;
                  piVar39[1] = 0;
                  pdVar35 = pdVar35 + 4;
                  piVar38 = piVar38 + 4;
                  piVar39 = piVar39 + 4;
                    /* try { // try from 003aeb68 to 004aeb6b has its CatchHandler @ 003af140 */
                } while (uVar33 < uVar40);
                uVar20 = uVar20 + iVar47;
                if (uVar1 - uVar5 == iVar47) goto LAB_003aec04;
              }
              lVar42 = (long)(int)uVar20;
                    /* try { // try from 003aeb9c to 004aeb9f has its CatchHandler @ 003af118 */
              pdVar23[lVar42] = pdVar23[lVar42] + (double)*(int *)((long)pdVar37 + lVar42 * 4);
              *(int *)((long)pdVar37 + lVar42 * 4) = 0;
              if ((int)(uVar20 + 1) < (int)uVar1) {
                lVar42 = (long)(int)(uVar20 + 1);
                pdVar23[lVar42] = pdVar23[lVar42] + (double)*(int *)((long)pdVar37 + lVar42 * 4);
                *(int *)((long)pdVar37 + lVar42 * 4) = 0;
                if ((int)(uVar20 + 2) < (int)uVar1) {
                  lVar42 = (long)(int)(uVar20 + 2);
                  pdVar23[lVar42] = pdVar23[lVar42] + (double)*(int *)((long)pdVar37 + lVar42 * 4);
                  *(int *)((long)pdVar37 + lVar42 * 4) = 0;
                }
              }
            }
LAB_003aec04:
            if (uVar4 < 2) {
                    /* try { // try from 003aec10 to 004aec13 has its CatchHandler @ 003af0a4 */
              if (uVar1 < 8 ||
                  pdVar23 + lVar21 < (double *)((long)pdVar24 + uVar46 * 4) &&
                  pdVar24 < pdVar23 + uVar46 + lVar21) {
                lVar42 = 0;
                do {
                  pdVar3[lVar42] = pdVar3[lVar42] + (double)*(int *)((long)pdVar24 + lVar42 * 4);
                  *(int *)((long)pdVar24 + lVar42 * 4) = 0;
                  lVar42 = lVar42 + 1;
                } while ((int)lVar42 < (int)uVar1);
              }
              else {
                if (uVar34 != 0) {
                  *pdVar3 = *pdVar3 + (double)*(int *)pdVar24;
                  *(int *)pdVar24 = 0;
                }
                uVar20 = (uint)(uVar34 != 0);
                if (2 < uVar10 - uVar34) {
                  uVar33 = 0;
                  pdVar29 = pdVar23 + (ulong)uVar34 + lVar21;
                  pdVar35 = pdVar23 + (ulong)uVar34 + lVar21;
                  piVar38 = piVar26;
                  piVar39 = piVar26;
                  do {
                    pdVar9 = pdVar29 + 1;
                    dVar55 = *pdVar29;
                    dVar49 = pdVar29[3];
                    dVar52 = pdVar29[2];
                    uVar33 = uVar33 + 1;
                    pdVar29 = pdVar29 + 4;
                    auVar54._0_8_ = (long)*piVar39;
                    auVar54._8_8_ = (long)piVar39[1];
                    /* try { // try from 003aec84 to 004aec87 has its CatchHandler @ 003af1d8 */
                    auVar51._0_8_ = (long)piVar39[2];
                    auVar51._8_8_ = (long)piVar39[3];
                    auVar53 = NEON_scvtf(auVar54,8);
                    auVar50 = NEON_scvtf(auVar51,8);
                    pdVar35[1] = *pdVar9 + auVar53._8_8_;
                    *pdVar35 = dVar55 + auVar53._0_8_;
                    pdVar35[3] = auVar50._8_8_ + dVar49;
                    pdVar35[2] = auVar50._0_8_ + dVar52;
                    piVar38[2] = 0;
                    piVar38[3] = 0;
                    piVar38[0] = 0;
                    piVar38[1] = 0;
                    pdVar35 = pdVar35 + 4;
                    piVar38 = piVar38 + 4;
                    piVar39 = piVar39 + 4;
                  } while (uVar33 < uVar2);
                  uVar20 = uVar20 + iVar48;
                  if (iVar48 == uVar1 - uVar34) goto LAB_003aed50;
                }
                lVar42 = (long)(int)uVar20;
                pdVar3[lVar42] = pdVar3[lVar42] + (double)*(int *)((long)pdVar24 + lVar42 * 4);
                *(int *)((long)pdVar24 + lVar42 * 4) = 0;
                if ((int)(uVar20 + 1) < (int)uVar1) {
                    /* try { // try from 003aecf8 to 004aecfb has its CatchHandler @ 003af21c */
                  lVar42 = (long)(int)(uVar20 + 1);
                  pdVar3[lVar42] = pdVar3[lVar42] + (double)*(int *)((long)pdVar24 + lVar42 * 4);
                  *(int *)((long)pdVar24 + lVar42 * 4) = 0;
                  if ((int)(uVar20 + 2) < (int)uVar1) {
                    lVar42 = (long)(int)(uVar20 + 2);
                    pdVar3[lVar42] = pdVar3[lVar42] + (double)*(int *)((long)pdVar24 + lVar42 * 4);
                    *(int *)((long)pdVar24 + lVar42 * 4) = 0;
                  }
                }
              }
            }
LAB_003aed50:
            iVar18 = 0;
          }
          local_600 = local_600 + iVar6 * lVar27;
                    /* try { // try from 003aed6c to 004aed93 has its CatchHandler @ 003af110 */
          if (local_5f8 != 0) {
            local_5f8 = local_5f8 + iVar6;
          }
          iVar44 = iVar44 + iVar17;
          iVar45 = iVar45 - iVar17;
        } while (iVar44 < local_588);
      }
      local_678 = local_678 + 1;
      NAryMatIterator::operator++(aNStack_5b0);
    } while (local_678 < local_590);
  }
  dVar55 = 0.0;
  if (iVar41 != 0) {
                    /* try { // try from 003aedcc to 004aedcf has its CatchHandler @ 003af1c8 */
    dVar55 = 1.0 / (double)iVar41;
  }
                    /* try { // try from 003aedd4 to 004aedd7 has its CatchHandler @ 003af110 */
  lVar42 = 0;
  do {
    while( true ) {
      dVar52 = dVar55 * pdVar23[lVar42];
      pdVar23[lVar42] = dVar52;
      dVar52 = dVar55 * pdVar3[lVar42] - dVar52 * dVar52;
      if (0.0 <= dVar52) break;
      dVar49 = 0.0;
LAB_003aede8:
      pdVar3[lVar42] = dVar49;
      lVar42 = lVar42 + 1;
      if ((int)uVar1 <= (int)lVar42) goto LAB_003aee4c;
    }
    dVar49 = SQRT(dVar52);
    if (!NAN(dVar49)) goto LAB_003aede8;
    dVar52 = ::sqrt(dVar52);
    pdVar3[lVar42] = dVar52;
    lVar42 = lVar42 + 1;
                    /* try { // try from 003aee48 to 004aee4b has its CatchHandler @ 003af164 */
  } while ((int)lVar42 < (int)uVar1);
LAB_003aee4c:
  bVar7 = false;
  do {
    local_5c0 = *(Mat **)(param_2 + 8);
    local_5b8 = *(undefined4 *)(param_2 + 0x10);
    local_5b4 = *(undefined4 *)(param_2 + 0x14);
    local_5c8 = CONCAT44(local_5c8._4_4_,*(undefined4 *)param_2);
    cVar16 = _OutputArray::needed((_OutputArray *)&local_5c8);
    if (cVar16 != '\0') {
      cVar16 = _OutputArray::fixedSize((_OutputArray *)&local_5c8);
      if (cVar16 == '\0') {
        _OutputArray::create((_OutputArray *)&local_5c8,uVar1,1,6,-1,true,0);
      }
                    /* try { // try from 003af084 to 004af087 has its CatchHandler @ 003af21c */
      iVar17 = _InputArray::kind((_InputArray *)&local_5c8);
      if (iVar17 == 0x10000) {
        uVar4 = *(uint *)local_5c0;
        local_4b0 = *(code **)local_5c0;
        local_4a0 = *(double **)(local_5c0 + 0x10);
        local_4a8 = *(code **)(local_5c0 + 8);
        local_498 = *(undefined8 *)(local_5c0 + 0x18);
        local_490 = *(undefined8 *)(local_5c0 + 0x20);
        local_488 = *(undefined8 *)(local_5c0 + 0x28);
        local_480 = *(undefined8 *)(local_5c0 + 0x30);
        local_478 = *(long *)(local_5c0 + 0x38);
        local_470 = &local_4a8;
        local_468 = &local_460;
        local_458 = 0;
        local_460 = 0;
        if (local_478 != 0) {
          piVar26 = (int *)(local_478 + 0x14);
          do {
            cVar16 = '\x01';
            bVar8 = (bool)ExclusiveMonitorPass(piVar26,0x10);
            if (bVar8) {
              *piVar26 = *piVar26 + 1;
              cVar16 = ExclusiveMonitorsStatus();
            }
          } while (cVar16 != '\0');
        }
        if (*(int *)(local_5c0 + 4) < 3) {
          local_460 = **(undefined8 **)(local_5c0 + 0x48);
          local_458 = (*(undefined8 **)(local_5c0 + 0x48))[1];
        }
        else {
          local_4b0 = (code *)(ulong)uVar4;
          Mat::copySize((Mat *)&local_4b0,local_5c0);
        }
      }
      else {
                    /* try { // try from 003af090 to 004af093 has its CatchHandler @ 003af1d8 */
                    /* try { // try from 003af09c to 004af09f has its CatchHandler @ 003af0a4 */
        _InputArray::getMat_((int)(_OutputArray *)&local_5c8);
      }
                    /* catch() { ... } // from try @ 003aec10 with catch @ 003af0a4
                       catch() { ... } // from try @ 003af09c with catch @ 003af0a4 */
      if (local_4b0._4_4_ < 3) {
        iVar17 = local_4a8._4_4_ * (int)local_4a8;
        if (((uint)local_4b0 & 0xfff) == 6) goto LAB_003af464;
LAB_003af0e0:
        local_5f0 = 0;
        local_5e8 = 0;
        __dest = (void *)String::allocate((String *)&local_5f0,0x5b);
        memcpy(__dest,&DAT_00473510,0x5b);
                    /* try { // try from 003af10c to 004af10f has its CatchHandler @ 003ae720 */
                    /* catch() { ... } // from try @ 003ae834 with catch @ 003af110
                       catch() { ... } // from try @ 003aeaa8 with catch @ 003af110
                       catch() { ... } // from try @ 003aed6c with catch @ 003af110
                       catch() { ... } // from try @ 003aedd4 with catch @ 003af110
                       catch() { ... } // from try @ 003aef80 with catch @ 003af110
                       catch() { ... } // from try @ 003aefb0 with catch @ 003af110
                       catch() { ... } // from try @ 003af008 with catch @ 003af110
                       catch() { ... } // from try @ 003af06c with catch @ 003af110 */
                    /* catch() { ... } // from try @ 003aeb9c with catch @ 003af118 */
        error(-0xd7,(String *)&local_5f0,
              "void cv::meanStdDev(cv::InputArray, cv::OutputArray, cv::OutputArray, cv::InputArray)"
              ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x720);
        String::deallocate((String *)&local_5f0);
      }
      else {
        lVar42 = 0;
        iVar17 = 1;
        do {
          lVar27 = lVar42 * 4;
          lVar42 = lVar42 + 1;
          iVar17 = iVar17 * *(int *)((long)local_470 + lVar27);
        } while ((int)lVar42 < local_4b0._4_4_);
        if (((uint)local_4b0 & 0xfff) != 6) goto LAB_003af0e0;
LAB_003af464:
        if ((((uint)local_4b0 >> 0xe & 1) == 0) ||
           (((local_4a8._4_4_ != 1 && ((int)local_4a8 != 1)) || (iVar17 < (int)uVar1))))
        goto LAB_003af0e0;
      }
                    /* catch() { ... } // from try @ 003aeb68 with catch @ 003af140 */
      if ((local_4a0 < pdVar23 + 2 && pdVar23 < local_4a0 + 2) || (uVar1 < 0xe)) {
        lVar42 = 0;
        do {
          local_4a0[lVar42] = pdVar23[lVar42];
          lVar42 = lVar42 + 1;
        } while ((int)lVar42 < (int)uVar1);
      }
      else {
        uVar4 = (uint)((ulong)pdVar23 >> 3) & 1;
        if (uVar1 < uVar4) {
          uVar4 = uVar1;
        }
        if (uVar4 != 0) {
                    /* catch() { ... } // from try @ 003aee48 with catch @ 003af164
                       catch() { ... } // from try @ 003aefa4 with catch @ 003af164
                       catch() { ... } // from try @ 003aefd0 with catch @ 003af164 */
                    /* catch() { ... } // from try @ 003ae9b8 with catch @ 003af16c */
          *local_4a0 = *pdVar23;
        }
        uVar5 = ((uVar1 - uVar4) - 2 >> 1) + 1;
        uVar34 = 0;
        iVar18 = uVar5 * 2;
        pdVar24 = pdVar23 + uVar4;
        pdVar37 = local_4a0 + uVar4;
        do {
          dVar55 = *pdVar24;
          uVar34 = uVar34 + 1;
          pdVar37[1] = pdVar24[1];
          *pdVar37 = dVar55;
          pdVar24 = pdVar24 + 2;
          pdVar37 = pdVar37 + 2;
        } while (uVar34 < uVar5);
        uVar5 = iVar18 + (uint)(uVar4 != 0);
        if (iVar18 != uVar1 - uVar4) {
          uVar46 = -(ulong)(uVar5 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar5 << 3;
                    /* catch() { ... } // from try @ 003ae91c with catch @ 003af1b8
                       catch() { ... } // from try @ 003ae9c0 with catch @ 003af1b8 */
          *(undefined8 *)((long)local_4a0 + uVar46) = *(undefined8 *)((long)pdVar23 + uVar46);
        }
      }
                    /* catch() { ... } // from try @ 003ae77c with catch @ 003af1c0
                       catch() { ... } // from try @ 003aeebc with catch @ 003af1c0
                       catch() { ... } // from try @ 003aef98 with catch @ 003af1c0 */
      if ((int)uVar1 < iVar17) {
                    /* catch() { ... } // from try @ 003aedcc with catch @ 003af1c8 */
                    /* catch() { ... } // from try @ 003aec84 with catch @ 003af1d8
                       catch() { ... } // from try @ 003af090 with catch @ 003af1d8 */
        memset(local_4a0 + lVar21,0,((ulong)((iVar17 - uVar10) - 2) + 1) * 8);
      }
      if (local_478 != 0) {
        piVar26 = (int *)(local_478 + 0x14);
        do {
          iVar17 = *piVar26;
          cVar16 = '\x01';
          bVar8 = (bool)ExclusiveMonitorPass(piVar26,0x10);
          if (bVar8) {
            *piVar26 = iVar17 + -1;
            cVar16 = ExclusiveMonitorsStatus();
          }
        } while (cVar16 != '\0');
        if (iVar17 == 1) {
          Mat::deallocate((Mat *)&local_4b0);
        }
      }
      local_478 = 0;
      local_4a0 = (double *)0x0;
                    /* catch() { ... } // from try @ 003aecf8 with catch @ 003af21c
                       catch() { ... } // from try @ 003af084 with catch @ 003af21c */
      local_488 = 0;
                    /* catch() { ... } // from try @ 003aea34 with catch @ 003af224
                       catch() { ... } // from try @ 003aefbc with catch @ 003af224
                       catch() { ... } // from try @ 003af02c with catch @ 003af224 */
      local_490 = 0;
      local_498 = 0;
      if (0 < local_4b0._4_4_) {
        iVar17 = 0;
        puVar31 = local_470;
        do {
          *(undefined4 *)puVar31 = 0;
          iVar17 = iVar17 + 1;
          puVar31 = (undefined8 *)((long)puVar31 + 4);
        } while (iVar17 < local_4b0._4_4_);
      }
      if (local_468 != &local_460) {
        fastFree(local_468);
      }
    }
    if (bVar7) {
      if ((local_450 != adStack_440) && (local_450 != (double *)0x0)) {
                    /* try { // try from 003aeebc to 004aeebf has its CatchHandler @ 003af1c0 */
        operator_delete__(local_450);
      }
      if (local_4d8 != 0) {
        piVar26 = (int *)(local_4d8 + 0x14);
        do {
          iVar17 = *piVar26;
          cVar16 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar26,0x10);
          if (bVar7) {
            *piVar26 = iVar17 + -1;
            cVar16 = ExclusiveMonitorsStatus();
          }
        } while (cVar16 != '\0');
        if (iVar17 == 1) {
          Mat::deallocate(local_638);
        }
      }
      local_4d8 = 0;
      local_500 = 0;
      local_4e8 = 0;
      local_4f0 = 0;
      local_4f8 = 0;
      if (0 < local_50c) {
        iVar17 = 0;
        piVar26 = local_4d0;
        do {
          iVar17 = iVar17 + 1;
          *piVar26 = 0;
          piVar26 = piVar26 + 1;
        } while (iVar17 < local_50c);
      }
                    /* try { // try from 003aef30 to 004aef33 has its CatchHandler @ 003ae720 */
      if (local_4c8 != &local_4c0) {
        fastFree(local_4c8);
      }
      if (local_538 != 0) {
        piVar26 = (int *)(local_538 + 0x14);
        do {
          iVar17 = *piVar26;
          cVar16 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar26,0x10);
          if (bVar7) {
            *piVar26 = iVar17 + -1;
            cVar16 = ExclusiveMonitorsStatus();
          }
        } while (cVar16 != '\0');
        if (iVar17 == 1) {
          Mat::deallocate(local_630);
        }
      }
      local_538 = 0;
                    /* try { // try from 003aef80 to 004aef83 has its CatchHandler @ 003af110 */
      local_560 = 0;
      local_548 = 0;
                    /* try { // try from 003aef8c to 004aef8f has its CatchHandler @ 003ae720 */
      local_550 = 0;
      local_558 = 0;
      if (0 < local_56c) {
                    /* try { // try from 003aef98 to 004aef9b has its CatchHandler @ 003af1c0 */
        iVar17 = 0;
        puVar30 = local_530;
        do {
                    /* try { // try from 003aefa4 to 004aefa7 has its CatchHandler @ 003af164 */
          iVar17 = iVar17 + 1;
          *puVar30 = 0;
                    /* try { // try from 003aefb0 to 004aefb3 has its CatchHandler @ 003af110 */
          puVar30 = puVar30 + 1;
        } while (iVar17 < local_56c);
      }
                    /* try { // try from 003aefbc to 004aefbf has its CatchHandler @ 003af224 */
      if (local_528 != &local_520) {
        fastFree(local_528);
      }
                    /* try { // try from 003aefd0 to 004aefd3 has its CatchHandler @ 003af164 */
      return;
    }
    bVar7 = true;
    param_2 = param_3;
    pdVar23 = pdVar3;
  } while( true );
}


==================================================================

### FUNC 003af858 (1996 bytes) name=minMaxIdx

/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::minMaxIdx(cv::_InputArray const&, double*, double*, int*, int*, cv::_InputArray const&) */

void cv::minMaxIdx(_InputArray *param_1,double *param_2,double *param_3,int *param_4,int *param_5,
                  _InputArray *param_6)

{
  int *piVar1;
  uint uVar2;
  uint uVar3;
  bool bVar4;
  ulong uVar5;
  char cVar6;
  int iVar7;
  ulong uVar8;
  void *__dest;
  ulong uVar9;
  char *pcVar10;
  ulong uVar11;
  undefined8 *puVar12;
  undefined4 *puVar13;
  Mat *pMVar14;
  long lVar15;
  code *pcVar16;
  double *pdVar17;
  double *pdVar18;
  int local_168;
  int local_164;
  float local_160;
  float local_15c;
  long local_158;
  long local_150;
  double local_148;
  double local_140;
  code *local_138;
  code *local_130;
  uchar *local_128;
  undefined8 local_120;
  Mat *local_118;
  Mat *local_110;
  undefined8 local_108;
  NAryMatIterator aNStack_100 [32];
  ulong local_e0;
  int local_d8;
  undefined4 local_c0;
  uint local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar8 = _InputArray::type(param_1,-1);
  uVar2 = (uint)uVar8 & 7;
  if ((uVar8 >> 3 & 0x1ff) == 0) {
    cVar6 = _InputArray::empty(param_6);
    if ((cVar6 == '\0') && (iVar7 = _InputArray::type(param_6,-1), iVar7 != 0)) goto LAB_003af8cc;
LAB_003af920:
    iVar7 = _InputArray::kind(param_1);
    if (iVar7 != 0x10000) goto LAB_003af930;
LAB_003afd50:
    pMVar14 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar14;
    local_bc = *(uint *)(pMVar14 + 4);
    local_b8 = *(undefined4 *)(pMVar14 + 8);
    local_b4 = *(undefined4 *)(pMVar14 + 0xc);
    local_b0 = *(undefined8 *)(pMVar14 + 0x10);
    local_a8 = *(undefined8 *)(pMVar14 + 0x18);
    local_a0 = *(undefined8 *)(pMVar14 + 0x20);
    local_98 = *(undefined8 *)(pMVar14 + 0x28);
    local_90 = *(undefined8 *)(pMVar14 + 0x30);
    local_88 = *(long *)(pMVar14 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        cVar6 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar14 + 0x48);
      local_68 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar14);
    }
  }
  else {
    cVar6 = _InputArray::empty(param_6);
    if ((cVar6 == '\0') || ((param_4 != (int *)0x0 || (param_5 != (int *)0x0)))) {
LAB_003af8cc:
      local_60 = 0;
      local_58 = 0;
      __dest = (void *)String::allocate((String *)&local_60,0x68);
      memcpy(__dest,
             "(cn == 1 && (_mask.empty() || _mask.type() == CV_8U)) || (cn > 1 && _mask.empty() && !minIdx && !maxIdx)"
             ,0x68);
      error(-0xd7,(String *)&local_60,
            "void cv::minMaxIdx(cv::InputArray, double*, double*, int*, int*, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x890);
      String::deallocate((String *)&local_60);
      goto LAB_003af920;
    }
    iVar7 = _InputArray::kind(param_1);
    if (iVar7 == 0x10000) goto LAB_003afd50;
LAB_003af930:
    _InputArray::getMat_((int)param_1);
  }
  iVar7 = _InputArray::kind(param_6);
  if (iVar7 == 0x10000) {
    pMVar14 = *(Mat **)(param_6 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar3 = *(uint *)pMVar14;
    local_50 = *(undefined8 *)(pMVar14 + 0x10);
    local_60 = *(ulong *)pMVar14;
    local_58 = *(undefined8 *)(pMVar14 + 8);
    local_48 = *(undefined8 *)(pMVar14 + 0x18);
    local_40 = *(undefined8 *)(pMVar14 + 0x20);
    local_38 = *(undefined8 *)(pMVar14 + 0x28);
    local_30 = *(undefined8 *)(pMVar14 + 0x30);
    local_28 = *(long *)(pMVar14 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        cVar6 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = *piVar1 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (2 < *(int *)(pMVar14 + 4)) {
      local_60 = (ulong)uVar3;
      Mat::copySize((Mat *)&local_60,pMVar14);
      goto LAB_003af970;
    }
    local_10 = **(undefined8 **)(pMVar14 + 0x48);
    local_8 = (*(undefined8 **)(pMVar14 + 0x48))[1];
    pcVar16 = (code *)(&PTR_FUN_004f7820)[(int)uVar2];
  }
  else {
    _InputArray::getMat_((int)param_6);
LAB_003af970:
    pcVar16 = (code *)(&PTR_FUN_004f7820)[(int)uVar2];
  }
  if (pcVar16 == (code *)0x0) {
    local_138 = pcVar16;
    local_130 = pcVar16;
    pcVar10 = (char *)String::allocate((String *)&local_138,9);
    cVar6 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar10 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar10[8] = cVar6;
    error(-0xd7,(String *)&local_138,
          "void cv::minMaxIdx(cv::InputArray, double*, double*, int*, int*, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x8f7);
    String::deallocate((String *)&local_138);
  }
  local_108 = 0;
  local_118 = (Mat *)&local_c0;
  local_110 = (Mat *)&local_60;
  NAryMatIterator::NAryMatIterator(aNStack_100,&local_118,&local_128,-1);
  local_168 = 0x7fffffff;
  local_164 = -0x80000000;
  local_158 = 0;
  local_150 = 0;
  local_d8 = (((uint)(uVar8 >> 3) & 0x1ff) + 1) * local_d8;
  local_160 = DAT_003b009c;
  local_15c = DAT_003b00a0;
  local_148 = DAT_003b00a8;
  local_140 = DAT_003b00b0;
  pdVar17 = (double *)&local_160;
  pdVar18 = (double *)&local_15c;
  if ((uVar2 != 5) && (pdVar17 = &local_148, pdVar18 = &local_140, uVar2 != 6)) {
    pdVar17 = (double *)&local_168;
    pdVar18 = (double *)&local_164;
  }
  if (local_e0 != 0) {
    uVar8 = 0;
    lVar15 = 1;
    do {
      (*pcVar16)(local_128,local_120,pdVar17,pdVar18,&local_158,&local_150,local_d8,lVar15);
      uVar8 = uVar8 + 1;
      NAryMatIterator::operator++(aNStack_100);
      lVar15 = lVar15 + local_d8;
    } while (uVar8 < local_e0);
    if (local_158 != 0) {
      lVar15 = local_158;
      if (uVar2 == 5) {
        local_148 = (double)local_160;
        local_140 = (double)local_15c;
      }
      else if (uVar2 < 5) {
        local_148 = (double)local_168;
        local_140 = (double)local_164;
      }
      goto LAB_003afb18;
    }
  }
  lVar15 = 0;
  local_140 = 0.0;
  local_148 = 0.0;
LAB_003afb18:
  if (param_2 != (double *)0x0) {
    *param_2 = local_148;
  }
  if (param_3 != (double *)0x0) {
    *param_3 = local_140;
  }
  if (param_4 != (int *)0x0) {
    if (lVar15 == 0) {
      if (0 < (int)local_bc) {
        lVar15 = (ulong)(local_bc - 1) + 1;
        memset((void *)((long)param_4 +
                       (-(ulong)(local_bc >> 0x1f) & 0xfffffffc00000000 | (ulong)local_bc << 2) +
                       lVar15 * -4),0xff,lVar15 * 4);
      }
    }
    else {
      uVar2 = local_bc - 1;
      if (-1 < (int)uVar2) {
        uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        uVar9 = 0;
        uVar8 = lVar15 - 1;
        do {
          iVar7 = *(int *)((long)local_80 + uVar9 + uVar11);
          uVar5 = 0;
          if ((long)iVar7 != 0) {
            uVar5 = uVar8 / (ulong)(long)iVar7;
          }
          *(int *)((long)param_4 + uVar9 + uVar11) = (int)uVar8 - (int)uVar5 * iVar7;
          uVar9 = uVar9 - 4;
          uVar8 = uVar5;
        } while (uVar9 != ((ulong)uVar2 << 2 ^ 0xfffffffffffffffc));
      }
    }
  }
  if (param_5 != (int *)0x0) {
    if (local_150 == 0) {
      if (0 < (int)local_bc) {
        lVar15 = (ulong)(local_bc - 1) + 1;
        memset((void *)((long)param_5 +
                       (-(ulong)(local_bc >> 0x1f) & 0xfffffffc00000000 | (ulong)local_bc << 2) +
                       lVar15 * -4),0xff,lVar15 * 4);
      }
    }
    else {
      uVar2 = local_bc - 1;
      if (-1 < (int)uVar2) {
        uVar11 = -(ulong)(uVar2 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar2 << 2;
        uVar9 = 0;
        uVar8 = local_150 - 1;
        do {
          iVar7 = *(int *)((long)local_80 + uVar9 + uVar11);
          uVar5 = 0;
          if ((long)iVar7 != 0) {
            uVar5 = uVar8 / (ulong)(long)iVar7;
          }
          *(int *)((long)param_5 + uVar9 + uVar11) = (int)uVar8 - (int)uVar5 * iVar7;
          uVar9 = uVar9 - 4;
          uVar8 = uVar5;
        } while (uVar9 != ((ulong)uVar2 << 2 ^ 0xfffffffffffffffc));
      }
    }
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar6 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar7 = 0;
    puVar12 = local_20;
    do {
      *(undefined4 *)puVar12 = 0;
      iVar7 = iVar7 + 1;
      puVar12 = (undefined8 *)((long)puVar12 + 4);
    } while (iVar7 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar7 = *piVar1;
      cVar6 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar7 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar7 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < (int)local_bc) {
    iVar7 = 0;
    puVar13 = local_80;
    do {
      *puVar13 = 0;
      iVar7 = iVar7 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar7 < (int)local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 003b00b8 (232 bytes) name=minMaxLoc

/* cv::minMaxLoc(cv::_InputArray const&, double*, double*, cv::Point_<int>*, cv::Point_<int>*,
   cv::_InputArray const&) */

void cv::minMaxLoc(_InputArray *param_1,double *param_2,double *param_3,Point_ *param_4,
                  Point_ *param_5,_InputArray *param_6)

{
  undefined4 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar3 = _InputArray::dims(param_1,-1);
  if (2 < iVar3) {
    local_10 = 0;
    local_8 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_10,0x10);
    uVar2 = s__depth____CV_8U____depth____CV_3_0045f8c8._72_8_;
    *(undefined8 *)pcVar4 = s__depth____CV_8U____depth____CV_3_0045f8c8._64_8_;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,
          "void cv::minMaxLoc(cv::InputArray, double*, double*, cv::Point*, cv::Point*, cv::InputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0x922);
    String::deallocate((String *)&local_10);
  }
  minMaxIdx(param_1,param_2,param_3,(int *)param_4,(int *)param_5,param_6);
  if (param_4 != (Point_ *)0x0) {
    uVar1 = *(undefined4 *)param_4;
    *(undefined4 *)param_4 = *(undefined4 *)(param_4 + 4);
    *(undefined4 *)(param_4 + 4) = uVar1;
  }
  if (param_5 != (Point_ *)0x0) {
    uVar1 = *(undefined4 *)param_5;
    *(undefined4 *)param_5 = *(undefined4 *)(param_5 + 4);
    *(undefined4 *)(param_5 + 4) = uVar1;
  }
  return;
}


==================================================================

### FUNC 003b01b4 (16 bytes) name=operator()

/* cv::Hamming::TEMPNAMEPLACEHOLDERVALUE(unsigned char const*, unsigned char const*, int) const */

void __thiscall cv::Hamming::operator()(Hamming *this,uchar *param_1,uchar *param_2,int param_3)

{
  FUN_003cd884(param_1,param_2,param_3);
  return;
}


==================================================================

### FUNC 003b01d0 (5992 bytes) name=batchDistance

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::batchDistance(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int,
   cv::_OutputArray const&, int, int, cv::_InputArray const&, int, bool) */

void cv::batchDistance(_InputArray *param_1,_InputArray *param_2,_OutputArray *param_3,int param_4,
                      _OutputArray *param_5,int param_6,int param_7,_InputArray *param_8,int param_9
                      ,bool param_10)

{
  uint uVar1;
  int iVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  long *plVar14;
  bool bVar15;
  bool bVar16;
  char cVar17;
  int iVar18;
  char *pcVar19;
  long lVar20;
  long lVar21;
  int *piVar22;
  uint *puVar23;
  float *pfVar24;
  Mat *pMVar25;
  int iVar26;
  undefined **ppuVar27;
  undefined **ppuVar28;
  ulong uVar29;
  uint uVar30;
  float fVar31;
  undefined1 auVar32 [16];
  undefined8 local_318;
  Mat *local_310;
  undefined4 local_308;
  undefined4 local_304;
  undefined8 local_300;
  Mat *local_2f8;
  undefined4 local_2f0;
  undefined4 local_2ec;
  undefined8 local_2e8;
  Mat *local_2e0;
  undefined4 local_2d8;
  undefined4 local_2d4;
  undefined8 local_2d0;
  Mat *local_2c8;
  undefined4 local_2c0;
  undefined4 local_2bc;
  undefined4 local_2b8 [2];
  Mat *local_2b0;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined8 local_2a0;
  undefined8 uStack_298;
  undefined **local_290;
  Mat *pMStack_288;
  undefined8 local_280;
  undefined8 uStack_278;
  undefined8 local_270;
  long lStack_268;
  int *local_260;
  long *local_258;
  long local_250 [2];
  undefined8 local_240;
  undefined8 uStack_238;
  Mat *local_230;
  Mat *local_228;
  Mat *local_220;
  Mat *local_218;
  undefined8 local_210;
  code *local_208;
  int *local_200;
  long *local_1f8;
  long local_1f0 [2];
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined **local_1d0;
  Mat *pMStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  int *local_1a0;
  long *local_198;
  long local_190;
  long lStack_188;
  uint local_180;
  int local_17c;
  uint local_178;
  int local_174;
  undefined8 local_170;
  undefined8 local_168;
  undefined8 local_160;
  undefined8 local_158;
  undefined8 local_150;
  long local_148;
  uint *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 local_128;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  undefined8 local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined4 local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  uint local_60;
  int local_5c;
  int local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  int *local_20;
  long *local_18;
  long local_10;
  long local_8;
  
  uVar29 = (ulong)(uint)param_4;
  iVar18 = _InputArray::kind(param_1);
  if (iVar18 == 0x10000) {
    pMVar25 = *(Mat **)(param_1 + 8);
    local_140 = &local_178;
    local_138 = &local_130;
    local_180 = *(uint *)pMVar25;
    local_17c = *(int *)(pMVar25 + 4);
    local_178 = *(uint *)(pMVar25 + 8);
    local_174 = *(int *)(pMVar25 + 0xc);
    local_170 = *(undefined8 *)(pMVar25 + 0x10);
    local_168 = *(undefined8 *)(pMVar25 + 0x18);
    local_160 = *(undefined8 *)(pMVar25 + 0x20);
    local_158 = *(undefined8 *)(pMVar25 + 0x28);
    local_150 = *(undefined8 *)(pMVar25 + 0x30);
    local_148 = *(long *)(pMVar25 + 0x38);
    local_128 = 0;
    local_130 = 0;
    if (local_148 != 0) {
      piVar22 = (int *)(local_148 + 0x14);
      do {
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = *piVar22 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar25 + 4) < 3) {
      local_130 = **(undefined8 **)(pMVar25 + 0x48);
      local_128 = (*(undefined8 **)(pMVar25 + 0x48))[1];
    }
    else {
      local_17c = 0;
      Mat::copySize((Mat *)&local_180,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  iVar18 = _InputArray::kind(param_2);
  if (iVar18 == 0x10000) {
    pMVar25 = *(Mat **)(param_2 + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar25;
    local_11c = *(int *)(pMVar25 + 4);
    local_118 = *(int *)(pMVar25 + 8);
    local_114 = *(int *)(pMVar25 + 0xc);
    local_110 = *(undefined8 *)(pMVar25 + 0x10);
    local_108 = *(undefined8 *)(pMVar25 + 0x18);
    local_100 = *(undefined8 *)(pMVar25 + 0x20);
    local_f8 = *(undefined8 *)(pMVar25 + 0x28);
    local_f0 = *(undefined8 *)(pMVar25 + 0x30);
    local_e8 = *(long *)(pMVar25 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar22 = (int *)(local_e8 + 0x14);
      do {
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = *piVar22 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar25 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar25 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar25 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  iVar18 = _InputArray::kind(param_8);
  if (iVar18 == 0x10000) {
    pMVar25 = *(Mat **)(param_8 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(undefined4 *)pMVar25;
    local_bc = *(int *)(pMVar25 + 4);
    local_b8 = *(int *)(pMVar25 + 8);
    local_b4 = *(int *)(pMVar25 + 0xc);
    local_b0 = *(long *)(pMVar25 + 0x10);
    local_a8 = *(undefined8 *)(pMVar25 + 0x18);
    local_a0 = *(undefined8 *)(pMVar25 + 0x20);
    local_98 = *(undefined8 *)(pMVar25 + 0x28);
    local_90 = *(undefined8 *)(pMVar25 + 0x30);
    local_88 = *(long *)(pMVar25 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar22 = (int *)(local_88 + 0x14);
      do {
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = *piVar22 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (2 < *(int *)(pMVar25 + 4)) {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar25);
      goto LAB_003b0284;
    }
    local_70 = **(undefined8 **)(pMVar25 + 0x48);
    uVar30 = local_180 & 0xfff;
    local_68 = (*(undefined8 **)(pMVar25 + 0x48))[1];
    if (uVar30 == (local_120 & 0xfff)) goto LAB_003b1278;
LAB_003b029c:
    local_318 = 0;
    local_310 = (Mat *)0x0;
    pcVar19 = (char *)String::allocate((String *)&local_318,0x52);
    uVar13 = s_type____src2_type______src1_cols_004735e0._72_8_;
    uVar12 = s_type____src2_type______src1_cols_004735e0._64_8_;
    uVar11 = s_type____src2_type______src1_cols_004735e0._56_8_;
    uVar10 = s_type____src2_type______src1_cols_004735e0._48_8_;
    uVar9 = s_type____src2_type______src1_cols_004735e0._40_8_;
    uVar8 = s_type____src2_type______src1_cols_004735e0._32_8_;
    uVar7 = s_type____src2_type______src1_cols_004735e0._24_8_;
    uVar6 = s_type____src2_type______src1_cols_004735e0._16_8_;
    uVar5 = s_type____src2_type______src1_cols_004735e0._8_8_;
    uVar4 = s_type____src2_type______src1_cols_004735e0._0_8_;
    *(undefined2 *)(pcVar19 + 0x50) = s_type____src2_type______src1_cols_004735e0._80_2_;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    *(undefined8 *)(pcVar19 + 0x10) = uVar6;
    *(undefined8 *)(pcVar19 + 0x18) = uVar7;
    *(undefined8 *)(pcVar19 + 0x20) = uVar8;
    *(undefined8 *)(pcVar19 + 0x28) = uVar9;
    *(undefined8 *)(pcVar19 + 0x30) = uVar10;
    *(undefined8 *)(pcVar19 + 0x38) = uVar11;
    *(undefined8 *)(pcVar19 + 0x40) = uVar12;
    *(undefined8 *)(pcVar19 + 0x48) = uVar13;
    error(-0xd7,(String *)&local_318,
          "void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)"
          ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xe47);
    String::deallocate((String *)&local_318);
  }
  else {
    _InputArray::getMat_((int)param_8);
LAB_003b0284:
    uVar30 = local_180 & 0xfff;
    if (uVar30 != (local_120 & 0xfff)) goto LAB_003b029c;
LAB_003b1278:
    if ((local_174 != local_114) || ((uVar30 != 0 && (uVar30 != 5)))) goto LAB_003b029c;
  }
  cVar17 = _OutputArray::needed(param_5);
  if (0 < param_7 != (bool)cVar17) {
    local_300 = 0;
    local_2f8 = (Mat *)0x0;
    pcVar19 = (char *)String::allocate((String *)&local_300,0x19);
    cVar17 = s__nidx_needed_______K_>_0__00473638[0x18];
    uVar5 = s__nidx_needed_______K_>_0__00473638._8_8_;
    uVar4 = s__nidx_needed_______K_>_0__00473638._0_8_;
    *(undefined8 *)(pcVar19 + 0x10) = s__nidx_needed_______K_>_0__00473638._16_8_;
    pcVar19[0x18] = cVar17;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    error(-0xd7,(String *)&local_300,
          "void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)"
          ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xe48);
    String::deallocate((String *)&local_300);
  }
  if (param_4 == -1) {
    if (param_6 - 6U < 2) {
      if (uVar30 != 0) {
        uVar29 = 4;
        bVar15 = true;
        goto LAB_003b03d0;
      }
      uVar29 = 4;
      bVar15 = true;
      bVar16 = false;
    }
    else {
      uVar29 = 5;
      bVar15 = false;
      bVar16 = true;
    }
  }
  else {
    bVar15 = param_4 == 4;
    bVar16 = param_4 == 5;
    if ((!bVar15 || uVar30 != 0) && (!bVar16)) {
LAB_003b03d0:
      local_2e8 = 0;
      local_2e0 = (Mat *)0x0;
      pcVar19 = (char *)String::allocate((String *)&local_2e8,0x35);
      cVar17 = s__type____CV_8U____dtype____CV_32_00473658[0x34];
      uVar9 = s__type____CV_8U____dtype____CV_32_00473658._40_8_;
      uVar8 = s__type____CV_8U____dtype____CV_32_00473658._32_8_;
      uVar7 = s__type____CV_8U____dtype____CV_32_00473658._24_8_;
      uVar6 = s__type____CV_8U____dtype____CV_32_00473658._16_8_;
      uVar5 = s__type____CV_8U____dtype____CV_32_00473658._8_8_;
      uVar4 = s__type____CV_8U____dtype____CV_32_00473658._0_8_;
      *(undefined4 *)(pcVar19 + 0x30) = s__type____CV_8U____dtype____CV_32_00473658._48_4_;
      pcVar19[0x34] = cVar17;
      *(undefined8 *)pcVar19 = uVar4;
      *(undefined8 *)(pcVar19 + 8) = uVar5;
      *(undefined8 *)(pcVar19 + 0x10) = uVar6;
      *(undefined8 *)(pcVar19 + 0x18) = uVar7;
      *(undefined8 *)(pcVar19 + 0x20) = uVar8;
      *(undefined8 *)(pcVar19 + 0x28) = uVar9;
      error(-0xd7,(String *)&local_2e8,
            "void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)"
            ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xe4e);
      String::deallocate((String *)&local_2e8);
      bVar16 = false;
    }
  }
  if (local_118 < param_7) {
    param_7 = local_118;
  }
  iVar18 = local_118;
  if (0 < param_7) {
    iVar18 = param_7;
  }
  iVar26 = (int)uVar29;
  _OutputArray::create(param_3,local_178,iVar18,iVar26,-1,false,0);
  iVar18 = _InputArray::kind((_InputArray *)param_3);
  if (iVar18 == 0x10000) {
    pMVar25 = *(Mat **)(param_3 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar25;
    local_5c = *(int *)(pMVar25 + 4);
    local_58 = *(int *)(pMVar25 + 8);
    local_54 = *(int *)(pMVar25 + 0xc);
    local_50 = *(long *)(pMVar25 + 0x10);
    local_48 = *(undefined8 *)(pMVar25 + 0x18);
    local_40 = *(undefined8 *)(pMVar25 + 0x20);
    local_38 = *(undefined8 *)(pMVar25 + 0x28);
    local_30 = *(undefined8 *)(pMVar25 + 0x30);
    local_28 = *(long *)(pMVar25 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar22 = (int *)(local_28 + 0x14);
      do {
        cVar17 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = *piVar22 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar25 + 4) < 3) {
      local_10 = **(long **)(pMVar25 + 0x48);
      local_8 = (*(long **)(pMVar25 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar25);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_260 = (int *)&uStack_298;
  local_258 = local_250;
  local_250[1] = 0;
  local_250[0] = 0;
  local_290 = (undefined **)0x0;
  pMStack_288 = (Mat *)0x0;
  uStack_298 = _UNK_003b1af8;
  local_2a0 = _DAT_003b1af0;
  local_280 = 0;
  uStack_278 = 0;
  local_270 = 0;
  lStack_268 = 0;
  cVar17 = _OutputArray::needed(param_5);
  if (cVar17 != '\0') {
    local_1e0 = (undefined **)CONCAT44(*local_20,local_20[1]);
    _OutputArray::create(param_5,(Mat *)&local_1e0,4,0xffffffff,0,0);
    iVar18 = _InputArray::kind((_InputArray *)param_5);
    if (iVar18 == 0x10000) {
      pMVar25 = *(Mat **)(param_5 + 8);
      local_1a0 = (int *)&uStack_1d8;
                    /* catch() { ... } // from try @ 003b17b4 with catch @ 003b1770
                       catch() { ... } // from try @ 003b1f64 with catch @ 003b1770
                       catch() { ... } // from try @ 003b31dc with catch @ 003b1770
                       catch() { ... } // from try @ 003b3a58 with catch @ 003b1770 */
      local_198 = &local_190;
      uVar1 = *(uint *)pMVar25;
      local_1d0 = *(undefined ***)(pMVar25 + 0x10);
      local_1e0 = *(undefined ***)pMVar25;
      uStack_1d8 = *(Mat **)(pMVar25 + 8);
      pMStack_1c8 = *(Mat **)(pMVar25 + 0x18);
      local_1c0 = *(undefined8 *)(pMVar25 + 0x20);
      uStack_1b8 = *(undefined8 *)(pMVar25 + 0x28);
                    /* try { // try from 003b17b4 to 004b17d3 has its CatchHandler @ 003b1770 */
      local_1b0 = *(undefined8 *)(pMVar25 + 0x30);
      lStack_1a8 = *(long *)(pMVar25 + 0x38);
      lStack_188 = 0;
      local_190 = 0;
      if (lStack_1a8 != 0) {
                    /* try { // try from 003b17d8 to 004b17f7 has its CatchHandler @ 003b3ca0 */
        piVar22 = (int *)(lStack_1a8 + 0x14);
        do {
          cVar17 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
          if (bVar3) {
            *piVar22 = *piVar22 + 1;
            cVar17 = ExclusiveMonitorsStatus();
          }
        } while (cVar17 != '\0');
      }
      if (*(int *)(pMVar25 + 4) < 3) {
        local_190 = **(long **)(pMVar25 + 0x48);
        lStack_188 = (*(long **)(pMVar25 + 0x48))[1];
      }
      else {
        local_1e0 = (undefined **)(ulong)uVar1;
        Mat::copySize((Mat *)&local_1e0,pMVar25);
      }
    }
    else {
      _InputArray::getMat_((int)param_5);
    }
    if (lStack_1a8 != 0) {
      piVar22 = (int *)(lStack_1a8 + 0x14);
      do {
        cVar17 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = *piVar22 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (lStack_268 != 0) {
      piVar22 = (int *)(lStack_268 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_2a0);
      }
    }
    plVar14 = local_198;
    lStack_268 = 0;
    local_290 = (undefined **)0x0;
    uStack_278 = 0;
    local_280 = 0;
    pMStack_288 = (Mat *)0x0;
    if (local_2a0._4_4_ < 1) {
LAB_003b1378:
      if (2 < local_1e0._4_4_) goto LAB_003b1384;
      uStack_298 = uStack_1d8;
      local_2a0 = local_1e0;
      *local_258 = *local_198;
      local_258[1] = plVar14[1];
    }
    else {
      iVar18 = 0;
      piVar22 = local_260;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_2a0._4_4_);
      if (local_2a0._4_4_ < 3) goto LAB_003b1378;
LAB_003b1384:
      local_2a0 = (undefined **)CONCAT44(local_2a0._4_4_,(uint)local_1e0);
      Mat::copySize((Mat *)&local_2a0,(Mat *)&local_1e0);
    }
    uStack_278 = uStack_1b8;
    local_280 = local_1c0;
    lStack_268 = lStack_1a8;
    local_270 = local_1b0;
    pMStack_288 = pMStack_1c8;
    local_290 = local_1d0;
    if (lStack_1a8 != 0) {
      piVar22 = (int *)(lStack_1a8 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar3) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
                    /* try { // try from 003b182c to 004b182f has its CatchHandler @ 003b3c7c */
      }
    }
    lStack_1a8 = 0;
    local_1d0 = (undefined **)0x0;
    uStack_1b8 = 0;
    local_1c0 = 0;
    pMStack_1c8 = (Mat *)0x0;
    if (0 < local_1e0._4_4_) {
      iVar18 = 0;
      piVar22 = local_1a0;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_1e0._4_4_);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
  }
  if ((0 < param_7) && (param_9 == 0)) {
    local_1e0 = (undefined **)DAT_003b1ae0;
    if (iVar26 != 4) {
      local_1e0 = (undefined **)DAT_003b1ae8;
    }
    uStack_1d8 = (Mat *)local_1e0;
    local_1d0 = local_1e0;
    pMStack_1c8 = (Mat *)local_1e0;
    Mat::operator=((Mat *)&local_60,(Scalar_ *)&local_1e0);
    auVar32 = NEON_fmov(0xbff0000000000000,8);
    uStack_1d8 = auVar32._8_8_;
    local_1e0 = auVar32._0_8_;
    local_1d0 = local_1e0;
    pMStack_1c8 = uStack_1d8;
    Mat::operator=((Mat *)&local_2a0,(Scalar_ *)&local_1e0);
  }
  if (!param_10) {
    if (uVar30 == 0) {
      if ((!bVar15) || (param_6 != 2)) {
        if ((!bVar16) || (param_6 != 2)) {
          if ((!bVar15) || (param_6 != 5)) {
            if (bVar16) {
              if (param_6 != 5) {
                if (param_6 != 4) goto LAB_003b1904;
                local_208 = FUN_003acd44;
                    /* try { // try from 003b1900 to 004b1903 has its CatchHandler @ 003b3c14 */
              }
              else {
                local_208 = FUN_003aa8d0;
              }
            }
            else {
LAB_003b1904:
                    /* try { // try from 003b1908 to 004b190b has its CatchHandler @ 003b3c7c */
              if (bVar15) {
                if (param_6 == 6) {
                  local_208 = FUN_003a18bc;
                }
                else {
                  if (param_6 != 7) goto LAB_003b0c00;
                  local_208 = FUN_003a19b8;
                }
              }
              else {
LAB_003b0c00:
                format("The combination of type=%d, dtype=%d and normType=%d is not supported",
                       (String *)local_2b8,(ulong)uVar30,uVar29,(ulong)(uint)param_6);
                error(-0xd2,(String *)local_2b8,
                      "void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xea8);
                String::deallocate((String *)local_2b8);
                local_208 = (code *)0x0;
              }
            }
          }
          else {
            local_208 = FUN_003aad40;
          }
        }
        else {
          local_208 = FUN_003aa1c0;
        }
      }
      else {
        local_208 = FUN_003abb64;
      }
    }
    else {
      if ((!bVar16) || (uVar30 != 5)) goto LAB_003b0c00;
      if (param_6 == 2) {
        local_208 = FUN_003aa434;
      }
      else if (param_6 == 5) {
        local_208 = FUN_003aab24;
      }
      else {
        if (param_6 != 4) goto LAB_003b0c00;
        local_208 = FUN_003ad0d8;
      }
    }
    local_1e0 = (undefined **)((ulong)local_178 << 0x20);
    local_240 = &PTR_FUN_004f76c0;
    local_210 = CONCAT44(param_9,param_7);
    uStack_238 = (Mat *)&local_180;
    local_230 = (Mat *)&local_120;
    local_228 = (Mat *)&local_60;
    local_220 = (Mat *)&local_2a0;
    local_218 = (Mat *)&local_c0;
    parallel_for_((Range *)&local_1e0,(ParallelLoopBody *)&local_240,-1.0);
    local_240 = &PTR_FUN_004f76c0;
    ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_240);
    if (lStack_268 != 0) {
      piVar22 = (int *)(lStack_268 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_2a0);
      }
    }
    lStack_268 = 0;
    local_290 = (undefined **)0x0;
    uStack_278 = 0;
    local_280 = 0;
    pMStack_288 = (Mat *)0x0;
    if (0 < local_2a0._4_4_) {
      iVar18 = 0;
      piVar22 = local_260;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_2a0._4_4_);
    }
    if (local_258 != local_250) {
      fastFree(local_258);
    }
    if (local_28 != 0) {
      piVar22 = (int *)(local_28 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar18 = 0;
      piVar22 = local_20;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_5c);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (local_88 != 0) {
      piVar22 = (int *)(local_88 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = 0;
    local_98 = 0;
    local_a0 = 0;
    local_a8 = 0;
    if (0 < local_bc) {
      iVar18 = 0;
      piVar22 = local_80;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_bc);
    }
    if (local_78 != &local_70) {
      fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar22 = (int *)(local_e8 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_120);
      }
    }
    local_e8 = 0;
    local_110 = 0;
    local_f8 = 0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_11c) {
      iVar18 = 0;
      piVar22 = local_e0;
      do {
        *piVar22 = 0;
        iVar18 = iVar18 + 1;
        piVar22 = piVar22 + 1;
      } while (iVar18 < local_11c);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
    if (local_148 != 0) {
      piVar22 = (int *)(local_148 + 0x14);
      do {
        iVar18 = *piVar22;
        cVar17 = '\x01';
        bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
        if (bVar15) {
          *piVar22 = iVar18 + -1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
      if (iVar18 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    if (0 < local_17c) {
      iVar18 = 0;
      puVar23 = local_140;
      do {
        *puVar23 = 0;
        iVar18 = iVar18 + 1;
        puVar23 = puVar23 + 1;
      } while (iVar18 < local_17c);
    }
    goto LAB_003b0b90;
  }
  if ((param_7 != 1) || (param_9 != 0)) {
LAB_003b059c:
    local_2d0 = 0;
    local_2c8 = (Mat *)0x0;
    pcVar19 = (char *)String::allocate((String *)&local_2d0,0x25);
    cVar17 = s_K____1____update____0____mask_em_00473690[0x24];
    uVar7 = s_K____1____update____0____mask_em_00473690._24_8_;
    uVar6 = s_K____1____update____0____mask_em_00473690._16_8_;
    uVar5 = s_K____1____update____0____mask_em_00473690._8_8_;
    uVar4 = s_K____1____update____0____mask_em_00473690._0_8_;
    *(undefined4 *)(pcVar19 + 0x20) = s_K____1____update____0____mask_em_00473690._32_4_;
    pcVar19[0x24] = cVar17;
    *(undefined8 *)pcVar19 = uVar4;
    *(undefined8 *)(pcVar19 + 8) = uVar5;
    *(undefined8 *)(pcVar19 + 0x10) = uVar6;
    *(undefined8 *)(pcVar19 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_2d0,
          "void cv::batchDistance(cv::InputArray, cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray, int, bool)"
          ,"/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xe62);
    String::deallocate((String *)&local_2d0);
  }
  else if (local_b0 != 0) {
    if (local_bc < 3) {
                    /* try { // try from 003b1880 to 004b1883 has its CatchHandler @ 003b3c8c */
      lVar21 = (long)local_b4 * (long)local_b8;
    }
    else {
      lVar20 = 0;
      lVar21 = 1;
      do {
        piVar22 = local_80 + lVar20;
        lVar20 = lVar20 + 1;
        lVar21 = lVar21 * *piVar22;
      } while ((int)lVar20 < local_bc);
    }
                    /* try { // try from 003b1888 to 004b18d3 has its CatchHandler @ 003b3c7c */
    if (lVar21 != 0) goto LAB_003b059c;
  }
  local_198 = &local_190;
  local_1f8 = local_1f0;
  local_200 = (int *)&uStack_238;
  local_1a0 = (int *)&uStack_1d8;
  local_230 = (Mat *)0x0;
  uStack_238 = _UNK_003b1af8;
  local_240 = _DAT_003b1af0;
  local_228 = (Mat *)0x0;
  uStack_1d8 = _UNK_003b1af8;
  local_1e0 = _DAT_003b1af0;
  local_220 = (Mat *)0x0;
  local_218 = (Mat *)0x0;
  local_210 = 0;
  local_208 = (code *)0x0;
  local_1d0 = (undefined **)0x0;
  local_1f0[1] = 0;
  local_1f0[0] = 0;
  pMStack_1c8 = (Mat *)0x0;
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  lStack_188 = 0;
  local_190 = 0;
  local_308 = 0;
  local_304 = 0;
  local_318 = CONCAT44(local_318._4_4_,0x1010000);
  local_2f0 = 0;
  local_2ec = 0;
  local_300 = CONCAT44(local_300._4_4_,0x1010000);
  local_2d8 = 0;
  local_2d4 = 0;
  local_2e8 = CONCAT44(local_2e8._4_4_,0x2010000);
  local_2c0 = 0;
  local_2bc = 0;
  local_2d0 = CONCAT44(local_2d0._4_4_,0x2010000);
  local_2a8 = 0;
  local_2a4 = 0;
  local_2b8[0] = 0x1010000;
  local_310 = (Mat *)&local_120;
  local_2f8 = (Mat *)&local_180;
  local_2e0 = (Mat *)&local_240;
  local_2c8 = (Mat *)&local_1e0;
  local_2b0 = (Mat *)&local_c0;
  batchDistance((_InputArray *)&local_318,(_InputArray *)&local_300,(_OutputArray *)&local_2e8,
                iVar26,(_OutputArray *)&local_2d0,param_6,param_7,(_InputArray *)local_2b8,0,false);
  if (iVar26 == 4) {
    if (0 < (int)uStack_238) {
      lVar21 = 0;
      pMVar25 = local_230;
      ppuVar28 = local_1d0;
      do {
        iVar18 = (int)lVar21;
        if ((((uint)local_1e0 >> 0xe & 1) == 0) && (*local_1a0 != 1)) {
          if (local_1a0[1] == 1) {
            lVar20 = lVar21 * *local_198;
          }
          else {
            iVar26 = 0;
            if (uStack_1d8._4_4_ != 0) {
              iVar26 = iVar18 / uStack_1d8._4_4_;
            }
            lVar20 = (long)iVar26 * *local_198 + (long)(iVar18 - uStack_1d8._4_4_ * iVar26) * 4;
          }
          iVar26 = *(int *)((long)local_1d0 + lVar20);
          if (((uint)local_240 >> 0xe & 1) != 0) goto LAB_003b1720;
LAB_003b1610:
          if (*local_200 == 1) goto LAB_003b1720;
          if (local_200[1] == 1) {
            lVar20 = lVar21 * *local_1f8;
          }
          else {
            iVar2 = 0;
            if (uStack_238._4_4_ != 0) {
              iVar2 = iVar18 / uStack_238._4_4_;
            }
            lVar20 = (long)iVar2 * *local_1f8 + (long)(iVar18 - uStack_238._4_4_ * iVar2) * 4;
          }
          fVar31 = *(float *)((long)local_230 + lVar20);
          if ((local_60 >> 0xe & 1) == 0) goto LAB_003b1654;
LAB_003b1730:
          pfVar24 = (float *)(local_50 + (long)iVar26 * 4);
        }
        else {
          iVar26 = *(int *)ppuVar28;
          if (((uint)local_240 >> 0xe & 1) == 0) goto LAB_003b1610;
LAB_003b1720:
          fVar31 = *(float *)pMVar25;
          if ((local_60 >> 0xe & 1) != 0) goto LAB_003b1730;
LAB_003b1654:
          if (*local_20 == 1) goto LAB_003b1730;
          if (local_20[1] == 1) {
            pfVar24 = (float *)(local_50 + (long)iVar26 * *local_18);
          }
          else {
            iVar2 = 0;
            if (local_54 != 0) {
              iVar2 = iVar26 / local_54;
            }
            pfVar24 = (float *)(local_50 +
                               (long)iVar2 * *local_18 + (long)(iVar26 - local_54 * iVar2) * 4);
          }
        }
        if ((int)fVar31 < (int)*pfVar24) {
          *pfVar24 = fVar31;
          if ((((uint)local_2a0 >> 0xe & 1) == 0) && (*local_260 != 1)) {
            if (local_260[1] == 1) {
              ppuVar27 = (undefined **)((long)local_290 + (long)iVar26 * *local_258);
            }
            else {
              iVar2 = 0;
              if (uStack_298._4_4_ != 0) {
                iVar2 = iVar26 / uStack_298._4_4_;
              }
              ppuVar27 = (undefined **)
                         ((long)local_290 +
                         (long)iVar2 * *local_258 + (long)(iVar26 - uStack_298._4_4_ * iVar2) * 4);
            }
          }
          else {
            ppuVar27 = (undefined **)((long)local_290 + (long)iVar26 * 4);
          }
          *(int *)ppuVar27 = param_9 + iVar18;
        }
        pMVar25 = (Mat *)((long)pMVar25 + 4);
        lVar21 = lVar21 + 1;
        ppuVar28 = (undefined **)((long)ppuVar28 + 4);
      } while (iVar18 + 1 < (int)uStack_238);
    }
  }
  else if (0 < (int)uStack_238) {
    lVar21 = 0;
    pMVar25 = local_230;
    ppuVar28 = local_1d0;
    do {
      iVar18 = (int)lVar21;
      if ((((uint)local_1e0 >> 0xe & 1) == 0) && (*local_1a0 != 1)) {
        if (local_1a0[1] == 1) {
          lVar20 = lVar21 * *local_198;
        }
        else {
          iVar26 = 0;
          if (uStack_1d8._4_4_ != 0) {
            iVar26 = iVar18 / uStack_1d8._4_4_;
          }
          lVar20 = (long)iVar26 * *local_198 + (long)(iVar18 - uStack_1d8._4_4_ * iVar26) * 4;
        }
        iVar26 = *(int *)((long)local_1d0 + lVar20);
        if (((uint)local_240 >> 0xe & 1) != 0) goto LAB_003b08b8;
LAB_003b07a8:
        if (*local_200 == 1) goto LAB_003b08b8;
        if (local_200[1] == 1) {
          lVar20 = lVar21 * *local_1f8;
        }
        else {
          iVar2 = 0;
          if (uStack_238._4_4_ != 0) {
            iVar2 = iVar18 / uStack_238._4_4_;
          }
          lVar20 = (long)iVar2 * *local_1f8 + (long)(iVar18 - uStack_238._4_4_ * iVar2) * 4;
        }
        fVar31 = *(float *)((long)local_230 + lVar20);
        if ((local_60 >> 0xe & 1) == 0) goto LAB_003b07ec;
LAB_003b08c8:
        pfVar24 = (float *)(local_50 + (long)iVar26 * 4);
      }
      else {
        iVar26 = *(int *)ppuVar28;
        if (((uint)local_240 >> 0xe & 1) == 0) goto LAB_003b07a8;
LAB_003b08b8:
        fVar31 = *(float *)pMVar25;
        if ((local_60 >> 0xe & 1) != 0) goto LAB_003b08c8;
LAB_003b07ec:
        if (*local_20 == 1) goto LAB_003b08c8;
        if (local_20[1] == 1) {
          pfVar24 = (float *)(local_50 + (long)iVar26 * *local_18);
        }
        else {
          iVar2 = 0;
          if (local_54 != 0) {
            iVar2 = iVar26 / local_54;
          }
          pfVar24 = (float *)(local_50 +
                             (long)iVar2 * *local_18 + (long)(iVar26 - local_54 * iVar2) * 4);
        }
      }
      if (fVar31 < *pfVar24) {
        *pfVar24 = fVar31;
        if ((((uint)local_2a0 >> 0xe & 1) == 0) && (*local_260 != 1)) {
          if (local_260[1] == 1) {
            ppuVar27 = (undefined **)((long)local_290 + (long)iVar26 * *local_258);
          }
          else {
            iVar2 = 0;
            if (uStack_298._4_4_ != 0) {
              iVar2 = iVar26 / uStack_298._4_4_;
            }
            ppuVar27 = (undefined **)
                       ((long)local_290 +
                       (long)iVar2 * *local_258 + (long)(iVar26 - uStack_298._4_4_ * iVar2) * 4);
          }
        }
        else {
          ppuVar27 = (undefined **)((long)local_290 + (long)iVar26 * 4);
        }
        *(int *)ppuVar27 = param_9 + iVar18;
      }
      pMVar25 = (Mat *)((long)pMVar25 + 4);
      lVar21 = lVar21 + 1;
      ppuVar28 = (undefined **)((long)ppuVar28 + 4);
    } while (iVar18 + 1 < (int)uStack_238);
  }
  if (lStack_1a8 != 0) {
    piVar22 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
  local_1d0 = (undefined **)0x0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  pMStack_1c8 = (Mat *)0x0;
  if (0 < local_1e0._4_4_) {
    iVar18 = 0;
    piVar22 = local_1a0;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_1e0._4_4_);
  }
  if (local_198 != &local_190) {
    fastFree(local_198);
  }
  if (local_208 != (code *)0x0) {
    piVar22 = (int *)((long)local_208 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_240);
    }
  }
  local_208 = (code *)0x0;
  local_230 = (Mat *)0x0;
  local_218 = (Mat *)0x0;
  local_220 = (Mat *)0x0;
  local_228 = (Mat *)0x0;
  if (0 < local_240._4_4_) {
    iVar18 = 0;
    piVar22 = local_200;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_240._4_4_);
  }
  if (local_1f8 != local_1f0) {
    fastFree(local_1f8);
  }
  if (lStack_268 != 0) {
    piVar22 = (int *)(lStack_268 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_2a0);
    }
  }
  lStack_268 = 0;
  local_290 = (undefined **)0x0;
  uStack_278 = 0;
  local_280 = 0;
  pMStack_288 = (Mat *)0x0;
  if (0 < local_2a0._4_4_) {
    iVar18 = 0;
    piVar22 = local_260;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_2a0._4_4_);
  }
  if (local_258 != local_250) {
    fastFree(local_258);
  }
  if (local_28 != 0) {
    piVar22 = (int *)(local_28 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar18 = 0;
    piVar22 = local_20;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_5c);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar22 = (int *)(local_88 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar18 = 0;
    piVar22 = local_80;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar22 = (int *)(local_e8 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_120);
    }
  }
  local_e8 = 0;
  local_110 = 0;
  local_f8 = 0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar18 = 0;
    piVar22 = local_e0;
    do {
      *piVar22 = 0;
      iVar18 = iVar18 + 1;
      piVar22 = piVar22 + 1;
    } while (iVar18 < local_11c);
  }
  if (local_d8 != &local_d0) {
    fastFree(local_d8);
  }
  if (local_148 != 0) {
    piVar22 = (int *)(local_148 + 0x14);
    do {
      iVar18 = *piVar22;
      cVar17 = '\x01';
      bVar15 = (bool)ExclusiveMonitorPass(piVar22,0x10);
      if (bVar15) {
        *piVar22 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate((Mat *)&local_180);
    }
  }
  if (0 < local_17c) {
    iVar18 = 0;
    puVar23 = local_140;
    do {
      *puVar23 = 0;
      iVar18 = iVar18 + 1;
      puVar23 = puVar23 + 1;
    } while (iVar18 < local_17c);
  }
LAB_003b0b90:
  local_148 = 0;
  local_158 = 0;
  local_160 = 0;
  local_168 = 0;
  local_170 = 0;
  if (local_138 != &local_130) {
    fastFree(local_138);
  }
  return;
}


==================================================================

### FUNC 003b1b00 (1328 bytes) name=findNonZero

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::findNonZero(cv::_InputArray const&, cv::_OutputArray const&) */

void cv::findNonZero(_InputArray *param_1,_OutputArray *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined1 uVar6;
  int iVar7;
  int iVar8;
  undefined8 *puVar9;
  char *pcVar10;
  uint *puVar11;
  long lVar12;
  int *piVar13;
  Mat *pMVar14;
  undefined4 *puVar15;
  undefined4 *puVar16;
  Mat **ppMVar17;
  long lVar18;
  long lVar19;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  long *local_78;
  long local_70;
  long local_68;
  uint local_60;
  int local_5c;
  Mat *local_58;
  undefined4 *local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  Mat **local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar7 = _InputArray::kind(param_1);
  if (iVar7 == 0x10000) {
    pMVar14 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar14;
    local_bc = *(int *)(pMVar14 + 4);
    local_b8 = *(int *)(pMVar14 + 8);
    local_b4 = *(int *)(pMVar14 + 0xc);
    local_b0 = *(long *)(pMVar14 + 0x10);
    local_a8 = *(undefined8 *)(pMVar14 + 0x18);
    local_a0 = *(undefined8 *)(pMVar14 + 0x20);
    local_98 = *(undefined8 *)(pMVar14 + 0x28);
    local_90 = *(undefined8 *)(pMVar14 + 0x30);
                    /* try { // try from 003b1f38 to 004b1f3b has its CatchHandler @ 003b3ca0 */
    local_88 = *(long *)(pMVar14 + 0x38);
                    /* try { // try from 003b1f64 to 004b1fb7 has its CatchHandler @ 003b1770 */
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar13 = (int *)(local_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar3) {
          *piVar13 = *piVar13 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar14 + 4) < 3) {
      local_70 = **(long **)(pMVar14 + 0x48);
      local_68 = (*(long **)(pMVar14 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar14);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if ((local_c0 & 0xfff) != 0) {
    local_e0 = 0;
    local_d8 = 0;
    puVar9 = (undefined8 *)String::allocate((String *)&local_e0,0x15);
    uVar6 = DAT_0045fcd4;
    uVar5 = _LAB_0045fcc8;
    uVar4 = DAT_0045fcc0;
    *(undefined4 *)(puVar9 + 2) = DAT_0045fcd0;
    *(undefined1 *)((long)puVar9 + 0x14) = uVar6;
    *puVar9 = uVar4;
    puVar9[1] = uVar5;
    error(-0xd7,(String *)&local_e0,"void cv::findNonZero(cv::InputArray, cv::OutputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xeb2);
    String::deallocate((String *)&local_e0);
  }
  local_50 = (undefined4 *)0x0;
  local_60 = 0x1010000;
  local_58 = (Mat *)&local_c0;
  iVar7 = countNonZero((_InputArray *)&local_60);
  if (iVar7 == 0) {
    _OutputArray::release(param_2);
    piVar13 = local_80;
    if (local_88 != 0) {
      piVar1 = (int *)(local_88 + 0x14);
      do {
        iVar7 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar7 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_c0);
        piVar13 = local_80;
      }
    }
    local_80 = piVar13;
    if (0 < local_bc) {
      iVar7 = 0;
      do {
        *piVar13 = 0;
        iVar7 = iVar7 + 1;
        piVar13 = piVar13 + 1;
      } while (iVar7 < local_bc);
    }
  }
  else {
    iVar8 = _InputArray::kind((_InputArray *)param_2);
    if ((iVar8 == 0x10000) &&
       (puVar11 = (uint *)_OutputArray::getMatRef(param_2,-1), (*puVar11 >> 0xe & 1) == 0)) {
      _OutputArray::release(param_2);
    }
    _OutputArray::create(param_2,iVar7,1,0xc,-1,false,0);
    iVar7 = _InputArray::kind((_InputArray *)param_2);
    if (iVar7 == 0x10000) {
      pMVar14 = *(Mat **)(param_2 + 8);
      local_20 = &local_58;
      local_18 = &local_10;
      local_60 = *(uint *)pMVar14;
      local_50 = *(undefined4 **)(pMVar14 + 0x10);
      local_5c = *(int *)(pMVar14 + 4);
      local_58 = *(Mat **)(pMVar14 + 8);
      local_48 = *(undefined8 *)(pMVar14 + 0x18);
      local_40 = *(undefined8 *)(pMVar14 + 0x20);
      local_38 = *(undefined8 *)(pMVar14 + 0x28);
                    /* try { // try from 003b1e3c to 004b1e3f has its CatchHandler @ 003b3c84 */
      local_30 = *(undefined8 *)(pMVar14 + 0x30);
      local_28 = *(long *)(pMVar14 + 0x38);
      local_8 = 0;
      local_10 = 0;
      if (local_28 != 0) {
        piVar13 = (int *)(local_28 + 0x14);
        do {
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar3) {
            *piVar13 = *piVar13 + 1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (*(int *)(pMVar14 + 4) < 3) {
        local_10 = **(undefined8 **)(pMVar14 + 0x48);
        local_8 = (*(undefined8 **)(pMVar14 + 0x48))[1];
      }
      else {
        local_5c = 0;
        Mat::copySize((Mat *)&local_60,pMVar14);
      }
    }
    else {
      _InputArray::getMat_((int)param_2);
    }
    if ((local_60 >> 0xe & 1) == 0) {
                    /* try { // try from 003b1eb0 to 004b1eb3 has its CatchHandler @ 003b3c74 */
      local_d0 = 0;
      local_c8 = 0;
      pcVar10 = (char *)String::allocate((String *)&local_d0,0x12);
      uVar5 = s_idx_isContinuous___00473700._8_8_;
      uVar4 = s_idx_isContinuous___00473700._0_8_;
      *(undefined2 *)(pcVar10 + 0x10) = s_idx_isContinuous___00473700._16_2_;
      *(undefined8 *)pcVar10 = uVar4;
      *(undefined8 *)(pcVar10 + 8) = uVar5;
      error(-0xd7,(String *)&local_d0,"void cv::findNonZero(cv::InputArray, cv::OutputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xebd);
      String::deallocate((String *)&local_d0);
    }
    if (0 < local_b8) {
      iVar7 = 0;
      lVar19 = *local_78;
      puVar16 = local_50;
      lVar18 = local_b0;
      do {
        if (0 < local_b4) {
          lVar12 = 0;
          puVar15 = puVar16;
          do {
                    /* try { // try from 003b1ce4 to 004b1d57 has its CatchHandler @ 003b3c24 */
            puVar16 = puVar15;
            if (*(char *)(lVar18 + lVar12) != '\0') {
              *puVar15 = (int)lVar12;
              puVar16 = puVar15 + 2;
              puVar15[1] = iVar7;
            }
            lVar12 = lVar12 + 1;
            puVar15 = puVar16;
          } while ((int)lVar12 < local_b4);
        }
        iVar7 = iVar7 + 1;
        lVar18 = lVar18 + lVar19;
      } while (iVar7 != local_b8);
    }
    if (local_28 != 0) {
      piVar13 = (int *)(local_28 + 0x14);
      do {
        iVar7 = *piVar13;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar3) {
          *piVar13 = iVar7 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = (undefined4 *)0x0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar7 = 0;
      ppMVar17 = local_20;
      do {
        *(undefined4 *)ppMVar17 = 0;
        iVar7 = iVar7 + 1;
        ppMVar17 = (Mat **)((long)ppMVar17 + 4);
      } while (iVar7 < local_5c);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (local_88 != 0) {
      piVar13 = (int *)(local_88 + 0x14);
      do {
        iVar7 = *piVar13;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar13,0x10);
        if (bVar3) {
          *piVar13 = iVar7 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
                    /* try { // try from 003b1dc8 to 004b1dcb has its CatchHandler @ 003b3ca8 */
    if (0 < local_bc) {
      iVar7 = 0;
      piVar13 = local_80;
      do {
        *piVar13 = 0;
        iVar7 = iVar7 + 1;
        piVar13 = piVar13 + 1;
      } while (iVar7 < local_bc);
    }
  }
  local_88 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  local_b0 = 0;
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  return;
}


==================================================================

### FUNC 003b20a4 (464 bytes) name=cvSum

undefined1  [16] cvSum(cv *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  char *pcVar7;
  AutoBuffer *in_x5;
  undefined1 auVar8 [16];
  undefined4 local_98 [2];
  Mat *local_90;
  undefined4 local_88;
  undefined4 local_84;
  ulong local_80 [4];
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,in_x5);
  local_88 = 0;
  local_84 = 0;
  local_98[0] = 0x1010000;
  local_90 = (Mat *)&local_60;
  cv::sum((cv *)local_98,(_InputArray *)0x1010000);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_60._4_4_) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if ((((param_1 != (cv *)0x0) && (*(int *)param_1 == 0x90)) && (*(long *)(param_1 + 0x58) != 0)) &&
     (iVar6 = cvGetImageCOI(param_1), iVar6 != 0)) {
    if (3 < iVar6 - 1U) {
      local_60 = 0;
      local_58 = 0;
      pcVar7 = (char *)cv::String::allocate((String *)&local_60,0x13);
      cVar2 = s_0_<_coi_&&_coi_<__4_00473718[0x12];
      uVar5 = s_0_<_coi_&&_coi_<__4_00473718._8_8_;
      uVar4 = s_0_<_coi_&&_coi_<__4_00473718._0_8_;
      *(undefined2 *)(pcVar7 + 0x10) = s_0_<_coi_&&_coi_<__4_00473718._16_2_;
      pcVar7[0x12] = cVar2;
      *(undefined8 *)pcVar7 = uVar4;
      *(undefined8 *)(pcVar7 + 8) = uVar5;
      cv::error(-0xd7,(String *)&local_60,"CvScalar cvSum(const CvArr*)",
                "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xed9);
      cv::String::deallocate((String *)&local_60);
    }
    local_80[0] = local_80[(int)(iVar6 - 1U)];
  }
  auVar8._8_8_ = 0;
  auVar8._0_8_ = local_80[0];
                    /* try { // try from 003b21a0 to 004b21a3 has its CatchHandler @ 003b3c74 */
  return auVar8;
}


==================================================================

### FUNC 003b22ac (276 bytes) name=cvCountNonZero

undefined4 cvCountNonZero(cv *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined4 uVar4;
  int iVar5;
  AutoBuffer *in_x5;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
                    /* try { // try from 003b22c8 to 004b22cb has its CatchHandler @ 003b3cd8 */
                    /* try { // try from 003b22d0 to 004b22d3 has its CatchHandler @ 003b3ca8 */
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,in_x5);
  if ((local_60 >> 3 & 0x1ff) != 0) {
    local_68 = 0;
    local_64 = 0;
    local_78[0] = 0x2010000;
    local_70 = (Mat *)&local_60;
    cv::extractImageCOI(param_1,(_OutputArray *)local_78,-1);
  }
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x1010000;
  local_70 = (Mat *)&local_60;
  uVar4 = cv::countNonZero((_InputArray *)local_78);
                    /* try { // try from 003b232c to 004b234b has its CatchHandler @ 003b3c24 */
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar5 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar5 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar5 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar5 = 0;
    do {
      *local_20 = 0;
      iVar5 = iVar5 + 1;
      local_20 = local_20 + 1;
    } while (iVar5 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return uVar4;
}


==================================================================

### FUNC 003b23e8 (744 bytes) name=cvAvg

undefined1  [16] cvAvg(cv *param_1,cv *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  _InputArray *p_Var7;
  char *pcVar8;
  _InputArray *p_Var9;
  AutoBuffer *in_x5;
  undefined1 auVar10 [16];
  undefined8 local_120;
  undefined8 local_118;
  undefined4 local_110 [2];
  Mat *local_108;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8 [2];
  Mat *local_f0;
  undefined4 local_e8;
  undefined4 local_e4;
  ulong local_e0 [4];
  Mat aMStack_c0 [4];
  int local_bc;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  long local_88;
  undefined4 *local_80;
  undefined1 *local_78;
  undefined1 auStack_70 [16];
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  p_Var9 = (_InputArray *)0x1;
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,in_x5);
  if (param_2 == (cv *)0x0) {
    local_e8 = 0;
    local_e4 = 0;
    local_f8[0] = 0x1010000;
    local_f0 = aMStack_c0;
    p_Var7 = (_InputArray *)cv::noArray();
    cv::mean((cv *)local_f8,p_Var7,p_Var9);
  }
  else {
    local_110[0] = 0x1010000;
    local_100 = 0;
    local_fc = 0;
    local_108 = aMStack_c0;
    cv::cvarrToMat(param_2,(void *)0x0,true,false,0,(AutoBuffer *)0x1010000);
    local_e8 = 0;
    local_e4 = 0;
    local_f8[0] = 0x1010000;
    local_f0 = (Mat *)&local_60;
    cv::mean((cv *)local_110,(_InputArray *)local_f8,(_InputArray *)0x1010000);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar6 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar6 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
                    /* try { // try from 003b249c to 004b249f has its CatchHandler @ 003b3cb0 */
      if (iVar6 == 1) {
        cv::Mat::deallocate((Mat *)&local_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    uStack_48 = 0;
    if (0 < local_60._4_4_) {
      iVar6 = 0;
      do {
        *local_20 = 0;
        iVar6 = iVar6 + 1;
        local_20 = local_20 + 1;
      } while (iVar6 < local_60._4_4_);
    }
    if (local_18 != auStack_10) {
      cv::fastFree(local_18);
    }
  }
  if ((((param_1 != (cv *)0x0) && (*(int *)param_1 == 0x90)) && (*(long *)(param_1 + 0x58) != 0)) &&
     (iVar6 = cvGetImageCOI(param_1), iVar6 != 0)) {
    if (3 < iVar6 - 1U) {
      local_120 = 0;
                    /* try { // try from 003b2678 to 004b267b has its CatchHandler @ 003b3c24 */
      local_118 = 0;
      pcVar8 = (char *)cv::String::allocate((String *)&local_120,0x13);
      cVar2 = s_0_<_coi_&&_coi_<__4_00473718[0x12];
      uVar5 = s_0_<_coi_&&_coi_<__4_00473718._8_8_;
      uVar4 = s_0_<_coi_&&_coi_<__4_00473718._0_8_;
      *(undefined2 *)(pcVar8 + 0x10) = s_0_<_coi_&&_coi_<__4_00473718._16_2_;
      pcVar8[0x12] = cVar2;
      *(undefined8 *)pcVar8 = uVar4;
      *(undefined8 *)(pcVar8 + 8) = uVar5;
      cv::error(-0xd7,(String *)&local_120,"CvScalar cvAvg(const void*, const void*)",
                "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xef3);
      cv::String::deallocate((String *)&local_120);
    }
    local_e0[0] = local_e0[(int)(iVar6 - 1U)];
    local_e0[1] = 0;
    local_e0[2] = 0;
    local_e0[3] = 0;
  }
  local_60 = local_e0[0];
  local_58 = local_e0[1];
  local_50 = local_e0[2];
  uStack_48 = local_e0[3];
  if (local_88 != 0) {
    piVar1 = (int *)(local_88 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate(aMStack_c0);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    do {
      *local_80 = 0;
      iVar6 = iVar6 + 1;
      local_80 = local_80 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
  auVar10._8_8_ = 0;
  auVar10._0_8_ = local_60;
  return auVar10;
}


==================================================================

### FUNC 003b2750 (1268 bytes) name=cvAvgSdv

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvAvgSdv(cv *param_1,undefined8 *param_2,undefined8 *param_3,cv *param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 *puVar7;
  int iVar8;
  char *pcVar9;
  AutoBuffer *pAVar10;
  undefined4 local_1a8 [2];
  Mat *local_1a0;
  undefined4 local_198;
  undefined4 local_194;
  undefined4 local_190 [2];
  undefined8 *local_188;
  undefined4 local_180;
  undefined4 local_17c;
  undefined8 local_178;
  undefined8 *local_170;
  undefined4 local_168;
  undefined4 local_164;
  undefined8 local_160 [2];
  undefined8 local_150;
  undefined8 uStack_148;
  undefined8 local_140 [4];
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  AutoBuffer *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  uint local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  AutoBuffer *pAVar11;
  
  local_140[1] = 0;
  local_140[0] = 0;
  local_100 = 0;
  pAVar10 = (AutoBuffer *)&local_150;
  local_160[1] = 0;
  local_160[0] = 0;
  local_d8 = &local_d0;
  local_e0 = (AutoBuffer *)&uStack_118;
  local_110 = 0;
  local_140[3] = 0;
  local_140[2] = 0;
  uStack_c8 = 0;
  local_d0 = 0;
  uStack_108 = 0;
  uStack_148 = 0;
  local_150 = 0;
  uStack_f8 = 0;
  local_f0 = 0;
  lStack_e8 = 0;
  uStack_118 = _UNK_003b2cd8;
  local_120 = _DAT_003b2cd0;
  if (param_4 == (cv *)0x0) goto LAB_003b2948;
  cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar10);
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  puVar7 = local_78;
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
                    /* try { // try from 003b2858 to 004b285b has its CatchHandler @ 003b3a5c */
  uStack_108 = 0;
  if (local_120._4_4_ < 1) {
LAB_003b288c:
    if (2 < (int)local_bc) goto LAB_003b2898;
    uStack_118 = local_b8;
    local_120 = CONCAT44(local_bc,local_c0);
    *local_d8 = *local_78;
    local_d8[1] = puVar7[1];
  }
  else {
    iVar8 = 0;
    pAVar11 = local_e0;
    do {
      pAVar10 = pAVar11 + 4;
      *(undefined4 *)pAVar11 = 0;
      iVar8 = iVar8 + 1;
      pAVar11 = pAVar10;
    } while (iVar8 < local_120._4_4_);
    if (local_120._4_4_ < 3) goto LAB_003b288c;
LAB_003b2898:
    local_120 = CONCAT44(local_120._4_4_,local_c0);
    cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_c0);
  }
  uStack_f8 = uStack_98;
  local_100 = local_a0;
  lStack_e8 = lStack_88;
  local_f0 = local_90;
  uStack_108 = uStack_a8;
  local_110 = local_b0;
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < (int)local_bc) {
    iVar8 = 0;
    do {
      *local_80 = 0;
      iVar8 = iVar8 + 1;
      pAVar10 = (AutoBuffer *)(ulong)local_bc;
      local_80 = local_80 + 1;
    } while (iVar8 < (int)local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
LAB_003b2948:
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,pAVar10);
  local_198 = 0;
  local_194 = 0;
  local_1a8[0] = 0x1010000;
  local_190[0] = 0xc2020006;
  local_180 = 1;
  local_17c = 4;
  local_178 = CONCAT44(local_178._4_4_,0xc2020006);
  local_168 = 1;
  local_164 = 4;
  local_b0 = 0;
  local_c0 = 0x1010000;
  local_1a0 = aMStack_60;
  local_188 = local_160;
  local_170 = local_140;
  local_b8 = (Mat *)&local_120;
  cv::meanStdDev((_InputArray *)local_1a8,(_OutputArray *)local_190,(_OutputArray *)&local_178,
                 (_InputArray *)&local_c0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
                    /* try { // try from 003b2a38 to 004b2a3b has its CatchHandler @ 003b3974 */
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if ((((param_1 != (cv *)0x0) && (*(int *)param_1 == 0x90)) && (*(long *)(param_1 + 0x58) != 0)) &&
     (iVar8 = cvGetImageCOI(param_1), iVar8 != 0)) {
    uVar4 = iVar8 - 1;
    if (3 < uVar4) {
                    /* try { // try from 003b2be4 to 004b2be7 has its CatchHandler @ 003b3a84 */
      local_178 = 0;
      local_170 = (undefined8 *)0x0;
      pcVar9 = (char *)cv::String::allocate((String *)&local_178,0x13);
      cVar2 = s_0_<_coi_&&_coi_<__4_00473718[0x12];
      uVar6 = s_0_<_coi_&&_coi_<__4_00473718._8_8_;
      uVar5 = s_0_<_coi_&&_coi_<__4_00473718._0_8_;
      *(undefined2 *)(pcVar9 + 0x10) = s_0_<_coi_&&_coi_<__4_00473718._16_2_;
      pcVar9[0x12] = cVar2;
      *(undefined8 *)pcVar9 = uVar5;
      *(undefined8 *)(pcVar9 + 8) = uVar6;
      cv::error(-0xd7,(String *)&local_178,
                "void cvAvgSdv(const CvArr*, CvScalar*, CvScalar*, const void*)",
                "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xf0b);
      cv::String::deallocate((String *)&local_178);
    }
    local_160[0] = local_160[(int)uVar4];
    local_140[0] = local_140[(int)uVar4];
    local_160[1] = 0;
    local_150 = 0;
    uStack_148 = 0;
    local_140[1] = 0;
    local_140[2] = 0;
    local_140[3] = 0;
  }
  if (param_2 != (undefined8 *)0x0) {
    *param_2 = local_160[0];
    param_2[1] = local_160[1];
    param_2[2] = local_150;
    param_2[3] = uStack_148;
  }
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = local_140[0];
    param_3[1] = local_140[1];
    param_3[2] = local_140[2];
    param_3[3] = local_140[3];
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar8 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar8 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
                    /* try { // try from 003b2aac to 004b2aaf has its CatchHandler @ 003b3c0c */
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar8 = 0;
    pAVar10 = local_e0;
    do {
      *(undefined4 *)pAVar10 = 0;
      iVar8 = iVar8 + 1;
      pAVar10 = pAVar10 + 4;
    } while (iVar8 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
                    /* try { // try from 003b2b20 to 004b2b23 has its CatchHandler @ 003b3c24 */
  return;
}


==================================================================

### FUNC 003b2ce0 (988 bytes) name=cvMinMaxLoc

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void cvMinMaxLoc(cv *param_1,double *param_2,double *param_3,Point_ *param_4,Point_ *param_5,
                cv *param_6)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 *puVar4;
  AutoBuffer *pAVar5;
  int iVar6;
  undefined8 *puVar7;
  undefined4 local_138 [2];
  Mat *local_130;
  undefined4 local_128;
  undefined4 local_124;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  pAVar5 = (AutoBuffer *)&DAT_003b3140;
  local_d8 = &local_d0;
  uStack_118 = _UNK_003b3148;
  local_120 = _DAT_003b3140;
                    /* try { // try from 003b2d18 to 004b2e0b has its CatchHandler @ 003b3c7c */
  local_e0 = &uStack_118;
  uStack_c8 = 0;
  local_d0 = 0;
  local_110 = 0;
  uStack_108 = 0;
  local_100 = 0;
  uStack_f8 = 0;
  local_f0 = 0;
  lStack_e8 = 0;
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,(AutoBuffer *)&DAT_003b3140);
  if (param_6 == (cv *)0x0) goto LAB_003b2ef8;
  cv::cvarrToMat(param_6,(void *)0x0,true,false,0,pAVar5);
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
                    /* try { // try from 003b30a0 to 004b30df has its CatchHandler @ 003b3c24 */
    }
  }
  puVar4 = local_78;
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (local_120._4_4_ < 1) {
LAB_003b2e1c:
    if (2 < local_bc) goto LAB_003b3070;
    uStack_118 = local_b8;
    local_120 = CONCAT44(local_bc,local_c0);
    *local_d8 = *local_78;
                    /* try { // try from 003b2e4c to 004b2e4f has its CatchHandler @ 003b3c2c */
    local_d8[1] = puVar4[1];
  }
  else {
    iVar6 = 0;
    puVar7 = local_e0;
    do {
      *(undefined4 *)puVar7 = 0;
      iVar6 = iVar6 + 1;
      puVar7 = (undefined8 *)((long)puVar7 + 4);
    } while (iVar6 < local_120._4_4_);
    if (local_120._4_4_ < 3) goto LAB_003b2e1c;
LAB_003b3070:
    local_120 = CONCAT44(local_120._4_4_,local_c0);
    cv::Mat::copySize((Mat *)&local_120,(Mat *)&local_c0);
  }
                    /* try { // try from 003b2e54 to 004b2e67 has its CatchHandler @ 003b3c24 */
                    /* try { // try from 003b2e70 to 004b2e7f has its CatchHandler @ 003b3c2c */
  uStack_f8 = uStack_98;
  local_100 = local_a0;
  lStack_e8 = lStack_88;
  local_f0 = local_90;
  uStack_108 = uStack_a8;
  local_110 = local_b0;
  if (lStack_88 != 0) {
    piVar1 = (int *)(lStack_88 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_c0);
    }
  }
  lStack_88 = 0;
  local_b0 = 0;
  uStack_98 = 0;
  local_a0 = 0;
  uStack_a8 = 0;
  if (0 < local_bc) {
    iVar6 = 0;
    do {
      *local_80 = 0;
      iVar6 = iVar6 + 1;
      local_80 = local_80 + 1;
    } while (iVar6 < local_bc);
  }
  if (local_78 != auStack_70) {
    cv::fastFree(local_78);
  }
LAB_003b2ef8:
  if ((local_60 >> 3 & 0x1ff) != 0) {
    local_b0 = 0;
    local_c0 = 0x2010000;
    local_b8 = (Mat *)&local_60;
    cv::extractImageCOI(param_1,(_OutputArray *)&local_c0,-1);
  }
  local_128 = 0;
  local_124 = 0;
  local_138[0] = 0x1010000;
  local_b0 = 0;
  local_c0 = 0x1010000;
  local_130 = (Mat *)&local_60;
  local_b8 = (Mat *)&local_120;
  cv::minMaxLoc((_InputArray *)local_138,param_2,param_3,param_4,param_5,(_InputArray *)&local_c0);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar6 = 0;
    do {
      *local_20 = 0;
      iVar6 = iVar6 + 1;
      local_20 = local_20 + 1;
    } while (iVar6 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_120._4_4_) {
    iVar6 = 0;
    puVar4 = local_e0;
    do {
      *(undefined4 *)puVar4 = 0;
      iVar6 = iVar6 + 1;
      puVar4 = (undefined8 *)((long)puVar4 + 4);
    } while (iVar6 < local_120._4_4_);
  }
  if (local_d8 != &local_d0) {
    cv::fastFree(local_d8);
  }
  return;
}


==================================================================

### FUNC 003b3150 (288 bytes) name=FUN_003b3150

undefined8 FUN_003b3150(long param_1,long param_2,double *param_3,int param_4,ulong param_5)

{
  uint uVar1;
  long lVar2;
  float *pfVar3;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  double dVar9;
  float *pfVar4;
  
  dVar9 = *param_3;
  iVar5 = (int)param_5;
  if (param_2 != 0) {
    if (0 < param_4) {
      lVar7 = 0;
      do {
                    /* try { // try from 003b3168 to 004b316b has its CatchHandler @ 003b3c50 */
                    /* try { // try from 003b3170 to 004b3173 has its CatchHandler @ 003b3ca8 */
        if ((*(char *)(param_2 + lVar7) != '\0') && (0 < iVar5)) {
          lVar6 = 0;
          do {
            lVar2 = lVar6 * 4;
            lVar6 = lVar6 + 1;
            dVar8 = (double)*(float *)(param_1 + lVar2);
            dVar9 = dVar9 + dVar8 * dVar8;
          } while ((int)lVar6 < iVar5);
        }
        lVar7 = lVar7 + 1;
        param_1 = param_1 + (-(param_5 >> 0x1f & 1) & 0xfffffffc00000000 |
                            (param_5 & 0xffffffff) << 2);
      } while ((int)lVar7 < param_4);
    }
    *param_3 = dVar9;
    return 0;
  }
  param_4 = param_4 * iVar5;
  if (param_4 < 4) {
    dVar8 = 0.0;
    iVar5 = 0;
  }
  else {
    dVar8 = 0.0;
    uVar1 = param_4 - 4U >> 2;
    pfVar3 = (float *)(param_1 + 4);
    do {
                    /* try { // try from 003b31dc to 004b31df has its CatchHandler @ 003b1770 */
      pfVar4 = pfVar3 + 4;
                    /* try { // try from 003b31ec to 004b31ef has its CatchHandler @ 003b3ca0 */
                    /* try { // try from 003b31fc to 004b31ff has its CatchHandler @ 003b3c84 */
      dVar8 = dVar8 + (double)*pfVar3 * (double)*pfVar3 + (double)pfVar3[-1] * (double)pfVar3[-1] +
                      (double)pfVar3[1] * (double)pfVar3[1] + (double)pfVar3[2] * (double)pfVar3[2];
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 + (ulong)uVar1 * 0x10 + 0x14));
    iVar5 = (uVar1 + 1) * 4;
  }
                    /* try { // try from 003b3220 to 004b322b has its CatchHandler @ 003b3c24 */
  if (iVar5 < param_4) {
                    /* try { // try from 003b3238 to 004b323b has its CatchHandler @ 003b3bd4 */
    pfVar3 = (float *)(param_1 + (long)iVar5 * 4);
    do {
      pfVar4 = pfVar3 + 1;
                    /* try { // try from 003b3248 to 004b324b has its CatchHandler @ 003b3a5c */
      dVar8 = dVar8 + (double)*pfVar3 * (double)*pfVar3;
      pfVar3 = pfVar4;
    } while (pfVar4 != (float *)(param_1 +
                                ((long)iVar5 + 1 + (ulong)(uint)((param_4 + -1) - iVar5)) * 4));
  }
  *param_3 = dVar9 + dVar8;
  return 0;
}


==================================================================

### FUNC 003b3270 (3576 bytes) name=norm

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::norm(cv::_InputArray const&, int, cv::_InputArray const&) */

undefined1  [16] cv::norm(_InputArray *param_1,int param_2,_InputArray *param_3)

{
  bool bVar1;
  bool bVar2;
  long lVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  char cVar9;
  uint uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  int iVar15;
  double dVar16;
  int iVar17;
  int iVar18;
  void *__dest;
  long lVar19;
  _InputArray *p_Var20;
  char *pcVar21;
  long lVar22;
  undefined8 *puVar23;
  int *piVar24;
  ulong uVar25;
  float *pfVar26;
  ulong uVar28;
  ulong uVar29;
  uint uVar30;
  undefined4 uVar31;
  int iVar32;
  Mat *pMVar33;
  float fVar34;
  double dVar35;
  undefined1 auVar36 [16];
  float fVar37;
  double *pdVar38;
  uint uVar39;
  Mat *local_1b0;
  Mat *local_1a8;
  int local_184;
  double local_180;
  undefined8 local_178;
  undefined8 local_170;
  Mat *local_168;
  Mat *local_160;
  undefined4 local_158;
  undefined4 local_154;
  uchar *local_150;
  Mat *local_148;
  undefined4 local_140;
  undefined4 local_13c;
  Mat *local_138;
  Mat *local_130;
  undefined8 local_128;
  undefined8 local_120;
  undefined8 uStack_118;
  undefined8 local_110;
  undefined8 local_108;
  ulong local_100;
  ulong local_f8;
  undefined8 local_f0;
  long local_e8;
  undefined8 *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 uStack_c8;
  uint local_c0;
  int local_bc;
  int local_b8;
  int local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  int *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  float *pfVar27;
  
  uVar5 = param_2 & 7;
                    /* try { // try from 003b3290 to 004b3293 has its CatchHandler @ 003b3c24 */
                    /* try { // try from 003b329c to 004b329f has its CatchHandler @ 003b3974 */
  bVar1 = uVar5 - 4 < 2;
                    /* try { // try from 003b32a8 to 004b32ab has its CatchHandler @ 003b3c0c */
                    /* try { // try from 003b32b4 to 004b32b7 has its CatchHandler @ 003b3c24 */
  if (((!bVar1) && (1 < uVar5 - 1)) &&
     ((1 < uVar5 - 6 || (iVar17 = _InputArray::type(param_1,-1), iVar17 != 0)))) {
    local_60 = 0;
    local_58 = 0;
    __dest = (void *)String::allocate((String *)&local_60,0xb1);
    memcpy(__dest,
           "normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR || ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && _src.type() == CV_8U)"
           ,0xb1);
    error(-0xd7,(String *)&local_60,"double cv::norm(cv::InputArray, int, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xa3d);
    String::deallocate((String *)&local_60);
  }
  iVar17 = _InputArray::kind(param_1);
  if (iVar17 == 0x10000) {
    pMVar33 = *(Mat **)(param_1 + 8);
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar33;
    local_bc = *(int *)(pMVar33 + 4);
    local_b8 = *(int *)(pMVar33 + 8);
    local_b4 = *(int *)(pMVar33 + 0xc);
    local_b0 = *(long *)(pMVar33 + 0x10);
    local_a8 = *(undefined8 *)(pMVar33 + 0x18);
    local_a0 = *(undefined8 *)(pMVar33 + 0x20);
    local_98 = *(undefined8 *)(pMVar33 + 0x28);
    local_90 = *(undefined8 *)(pMVar33 + 0x30);
    local_88 = *(long *)(pMVar33 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar24 = (int *)(local_88 + 0x14);
      do {
        cVar9 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar2) {
          *piVar24 = *piVar24 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (*(int *)(pMVar33 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar33 + 0x48);
      local_68 = (*(undefined8 **)(pMVar33 + 0x48))[1];
    }
    else {
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_1a8 = (Mat *)&local_c0;
  iVar17 = _InputArray::kind(param_3);
  if (iVar17 == 0x10000) {
    pMVar33 = *(Mat **)(param_3 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    uVar4 = *(uint *)pMVar33;
    local_50 = *(long *)(pMVar33 + 0x10);
                    /* catch() { ... } // from try @ 003b2be4 with catch @ 003b3a84 */
    local_60 = *(ulong *)pMVar33;
    local_58 = *(undefined8 *)(pMVar33 + 8);
    local_48 = *(undefined8 *)(pMVar33 + 0x18);
    local_40 = *(undefined8 *)(pMVar33 + 0x20);
    local_38 = *(undefined8 *)(pMVar33 + 0x28);
    local_30 = *(undefined8 *)(pMVar33 + 0x30);
    local_28 = *(long *)(pMVar33 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar24 = (int *)(local_28 + 0x14);
      do {
        cVar9 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar24,0x10);
        if (bVar2) {
          *piVar24 = *piVar24 + 1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (*(int *)(pMVar33 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar33 + 0x48);
      local_8 = (*(undefined8 **)(pMVar33 + 0x48))[1];
    }
    else {
      local_60 = (ulong)uVar4;
      Mat::copySize((Mat *)&local_60,pMVar33);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_1b0 = (Mat *)&local_60;
  uVar6 = local_c0 & 7;
  uVar4 = (local_c0 >> 3 & 0x1ff) + 1;
  uVar29 = local_60;
  if ((local_c0 >> 0xe & 1) == 0) goto joined_r0x003b35f0;
  if (local_50 == 0) {
joined_r0x003b33d4:
    if (local_bc < 3) {
      uVar25 = (long)local_b4 * (long)local_b8 * (long)(int)uVar4;
      uVar28 = (ulong)(int)uVar25;
      if (uVar28 == uVar25) goto LAB_003b3d80;
    }
    else {
      lVar22 = 0;
      lVar19 = 1;
      do {
        piVar24 = local_80 + lVar22;
        lVar22 = lVar22 + 1;
        lVar19 = lVar19 * *piVar24;
      } while ((int)lVar22 < local_bc);
      uVar25 = lVar19 * (int)uVar4;
      uVar28 = (ulong)(int)uVar25;
      if (uVar28 == uVar25) {
LAB_003b3d80:
        if (uVar6 == 5) {
          if (uVar5 == 4) {
                    /* catch() { ... } // from try @ 003b3dc4 with catch @ 003b409c
                       catch() { ... } // from try @ 003b3e20 with catch @ 003b409c */
            local_120 = 0.0;
            FUN_003b3150(local_b0,0,&local_120,uVar28,1);
            dVar35 = SQRT(local_120);
            dVar16 = local_180;
            if (NAN(dVar35)) {
              dVar35 = ::sqrt(local_120);
              dVar16 = local_180;
            }
            goto LAB_003b3840;
          }
          if (uVar5 == 5) {
            local_120 = 0.0;
            FUN_003b3150(local_b0,0,&local_120,uVar28,1);
            dVar35 = local_120;
            dVar16 = local_180;
            goto LAB_003b3840;
          }
          iVar17 = (int)uVar28;
          dVar16 = local_180;
          if (uVar5 == 2) {
                    /* try { // try from 003b3fa0 to 004b3fa3 has its CatchHandler @ 003b4120 */
            if (iVar17 < 4) {
              dVar35 = 0.0;
              iVar18 = 0;
            }
            else {
              dVar35 = 0.0;
              uVar5 = iVar17 - 4U >> 2;
              pfVar26 = (float *)(local_b0 + 4);
              do {
                pfVar27 = pfVar26 + 4;
                    /* try { // try from 003b3fcc to 004b401f has its CatchHandler @ 003b3d20 */
                dVar35 = dVar35 + (double)ABS(pfVar26[-1]) + (double)ABS(*pfVar26) +
                                  (double)ABS(pfVar26[1]) + (double)ABS(pfVar26[2]);
                pfVar26 = pfVar27;
              } while (pfVar27 != (float *)(local_b0 + (ulong)uVar5 * 0x10 + 0x14));
              iVar18 = (uVar5 + 1) * 4;
            }
            if (iVar18 < (int)uVar25) {
              pfVar26 = (float *)(local_b0 + (long)iVar18 * 4);
              do {
                pfVar27 = pfVar26 + 1;
                    /* try { // try from 003b403c to 004b403f has its CatchHandler @ 003b4104 */
                    /* try { // try from 003b4048 to 004b404b has its CatchHandler @ 003b4120 */
                dVar35 = dVar35 + (double)ABS(*pfVar26);
                pfVar26 = pfVar27;
              } while (pfVar27 !=
                       (float *)(local_b0 +
                                ((long)iVar18 + 1 + (ulong)(uint)((iVar17 + -1) - iVar18)) * 4));
            }
            dVar35 = dVar35 + 0.0;
            goto LAB_003b3840;
          }
          if (uVar5 == 1) {
            if (0 < iVar17) {
              fVar34 = 0.0;
              lVar22 = 0;
              do {
                fVar37 = ABS(*(float *)(local_b0 + lVar22 * 4));
                if (fVar37 <= fVar34) {
                  fVar37 = fVar34;
                }
                fVar34 = fVar37;
                lVar22 = lVar22 + 1;
              } while ((int)lVar22 < (int)uVar25);
              if (0.0 < fVar34) {
                dVar35 = (double)fVar34;
                goto LAB_003b3840;
              }
            }
            dVar35 = 0.0;
            goto LAB_003b3840;
          }
        }
        else if (uVar6 == 0) {
                    /* try { // try from 003b3d94 to 004b3d97 has its CatchHandler @ 003b4104 */
          if (uVar5 == 6) {
            iVar17 = FUN_003cd760(local_b0,uVar28 & 0xffffffff);
          }
          else {
            if (uVar5 != 7) goto joined_r0x003b35f0;
            iVar17 = FUN_003cd9f4(local_b0,uVar28 & 0xffffffff,2);
          }
          dVar35 = (double)iVar17;
          dVar16 = local_180;
          goto LAB_003b3840;
        }
      }
    }
joined_r0x003b35f0:
    if (local_50 != 0) {
                    /* try { // try from 003b3420 to 004b3423 has its CatchHandler @ 003b3c24 */
      if (local_60._4_4_ < 3) goto LAB_003b3978;
LAB_003b3424:
      lVar19 = 0;
                    /* try { // try from 003b342c to 004b34bb has its CatchHandler @ 003b3a5c */
      lVar22 = 1;
      do {
        lVar3 = lVar19 * 4;
        lVar19 = lVar19 + 1;
        lVar22 = lVar22 * *(int *)((long)local_20 + lVar3);
      } while ((int)lVar19 < local_60._4_4_);
      goto LAB_003b3444;
    }
joined_r0x003b3600:
                    /* try { // try from 003b35f8 to 004b35fb has its CatchHandler @ 003b3bf8 */
                    /* try { // try from 003b3600 to 004b3603 has its CatchHandler @ 003b3c24 */
    if (uVar5 - 6 < 2) {
                    /* catch() { ... } // from try @ 003b3168 with catch @ 003b3c50 */
      local_60 = uVar29;
      if (local_50 != 0) {
        local_60._4_4_ = (int)(uVar29 >> 0x20);
        bVar1 = 2 < local_60._4_4_;
        iVar17 = local_60._4_4_;
        if (bVar1) goto LAB_003b346c;
LAB_003b3dc4:
                    /* try { // try from 003b3dc4 to 004b3dc7 has its CatchHandler @ 003b409c */
        lVar22 = (long)local_58._4_4_ * (long)(int)local_58;
LAB_003b348c:
        if (lVar22 != 0) {
          local_110 = 0;
          local_108 = 0;
          local_d8 = &local_d0;
          local_e0 = &uStack_118;
          local_158 = 0;
          uStack_118 = _LAB_003b4128;
          local_120 = _DAT_003b4120;
          local_168 = (Mat *)CONCAT44(local_168._4_4_,0x1010000);
          local_150 = (uchar *)CONCAT44(local_150._4_4_,0x1010000);
                    /* try { // try from 003b34d8 to 004b34db has its CatchHandler @ 003b3c24 */
          local_100 = 0;
          local_f8 = 0;
          local_f0 = 0;
          local_e8 = 0;
          uStack_c8 = 0;
          local_d0 = 0;
          local_148 = local_1b0;
          local_154 = 0;
          local_160 = local_1a8;
          local_140 = 0;
          local_13c = 0;
          local_128 = 0;
          local_138._0_4_ = 0x2010000;
          local_130 = (Mat *)&local_120;
          p_Var20 = (_InputArray *)noArray();
                    /* try { // try from 003b352c to 004b352f has its CatchHandler @ 003b3c60 */
                    /* try { // try from 003b3534 to 004b35a3 has its CatchHandler @ 003b3c24 */
          bitwise_and((_InputArray *)&local_168,(_InputArray *)&local_150,(_OutputArray *)&local_138
                      ,p_Var20);
          local_128 = 0;
          local_138 = (Mat *)CONCAT44(local_138._4_4_,0x1010000);
          local_130 = (Mat *)&local_120;
          p_Var20 = (_InputArray *)noArray();
          dVar35 = (double)norm((_InputArray *)&local_138,uVar5,p_Var20);
          if (local_e8 != 0) {
            piVar24 = (int *)(local_e8 + 0x14);
            do {
              iVar17 = *piVar24;
              cVar9 = '\x01';
              bVar1 = (bool)ExclusiveMonitorPass(piVar24,0x10);
              if (bVar1) {
                *piVar24 = iVar17 + -1;
                cVar9 = ExclusiveMonitorsStatus();
              }
            } while (cVar9 != '\0');
            if (iVar17 == 1) {
              Mat::deallocate((Mat *)&local_120);
            }
          }
          local_e8 = 0;
          local_f8 = 0;
          local_100 = 0;
          local_110 = 0;
          local_108 = 0;
          if (0 < local_120._4_4_) {
            iVar17 = 0;
            puVar23 = local_e0;
            do {
              *(undefined4 *)puVar23 = 0;
              iVar17 = iVar17 + 1;
              puVar23 = (undefined8 *)((long)puVar23 + 4);
            } while (iVar17 < local_120._4_4_);
          }
          dVar16 = local_180;
          if (local_d8 != &local_d0) {
            fastFree(local_d8);
            dVar16 = local_180;
          }
          goto LAB_003b3840;
        }
      }
                    /* catch() { ... } // from try @ 003b3d58 with catch @ 003b3d20
                       catch() { ... } // from try @ 003b3fcc with catch @ 003b3d20
                       catch() { ... } // from try @ 003b4100 with catch @ 003b3d20 */
      local_130 = (Mat *)0x0;
      local_138 = local_1a8;
      uVar31 = 2;
      if (uVar5 == 6) {
        uVar31 = 1;
      }
      NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_120,&local_138,&local_150,-1);
      uVar25 = local_f8;
      iVar17 = 0;
                    /* try { // try from 003b3d74 to 004b3d77 has its CatchHandler @ 003b4120 */
      for (uVar29 = 0; uVar29 < local_100; uVar29 = uVar29 + 1) {
        iVar18 = FUN_003cd9f4(local_150,uVar25 & 0xffffffff,uVar31);
                    /* try { // try from 003b3d58 to 004b3d5b has its CatchHandler @ 003b3d20 */
        iVar17 = iVar17 + iVar18;
        NAryMatIterator::operator++((NAryMatIterator *)&local_120);
      }
      dVar35 = (double)iVar17;
      dVar16 = local_180;
      goto LAB_003b3840;
    }
  }
  else {
    if (2 < local_60._4_4_) {
      lVar19 = 1;
      lVar22 = 0;
      do {
        lVar3 = lVar22 * 4;
                    /* catch() { ... } // from try @ 003b1eb0 with catch @ 003b3c74
                       catch() { ... } // from try @ 003b21a0 with catch @ 003b3c74
                       catch() { ... } // from try @ 003b2cbc with catch @ 003b3c74 */
        lVar22 = lVar22 + 1;
                    /* catch() { ... } // from try @ 003b182c with catch @ 003b3c7c
                       catch() { ... } // from try @ 003b1888 with catch @ 003b3c7c
                       catch() { ... } // from try @ 003b1908 with catch @ 003b3c7c
                       catch() { ... } // from try @ 003b2d18 with catch @ 003b3c7c
                       catch() { ... } // from try @ 003b37a8 with catch @ 003b3c7c */
        lVar19 = lVar19 * *(int *)((long)local_20 + lVar3);
      } while ((int)lVar22 < local_60._4_4_);
                    /* catch() { ... } // from try @ 003b1a94 with catch @ 003b3c84
                       catch() { ... } // from try @ 003b1e3c with catch @ 003b3c84
                       catch() { ... } // from try @ 003b2cb0 with catch @ 003b3c84
                       catch() { ... } // from try @ 003b31fc with catch @ 003b3c84 */
      if (lVar19 == 0) goto joined_r0x003b33d4;
      goto LAB_003b3424;
    }
    if ((long)local_58._4_4_ * (long)(int)local_58 == 0) goto joined_r0x003b33d4;
LAB_003b3978:
    lVar22 = (long)local_58._4_4_ * (long)(int)local_58;
LAB_003b3444:
    if (lVar22 == 0) goto joined_r0x003b3600;
    if ((local_60 & 0xfff) != 0) {
      local_178 = 0;
      local_170 = 0;
      pcVar21 = (char *)String::allocate((String *)&local_178,0x24);
      uVar14 = s_mask_empty______mask_type______C_004734c0._24_8_;
      uVar13 = s_mask_empty______mask_type______C_004734c0._16_8_;
      uVar12 = s_mask_empty______mask_type______C_004734c0._8_8_;
      uVar11 = s_mask_empty______mask_type______C_004734c0._0_8_;
                    /* catch() { ... } // from try @ 003b35f8 with catch @ 003b3bf8 */
                    /* catch() { ... } // from try @ 003b2aac with catch @ 003b3c0c
                       catch() { ... } // from try @ 003b32a8 with catch @ 003b3c0c */
                    /* catch() { ... } // from try @ 003b1900 with catch @ 003b3c14 */
      *(undefined4 *)(pcVar21 + 0x20) = s_mask_empty______mask_type______C_004734c0._32_4_;
                    /* catch() { ... } // from try @ 003b1ce4 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b232c with catch @ 003b3c24
                       catch() { ... } // from try @ 003b2678 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b2b20 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b2c58 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b2e54 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b30a0 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b3220 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b3290 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b32b4 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b3420 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b34d8 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b3534 with catch @ 003b3c24
                       catch() { ... } // from try @ 003b3600 with catch @ 003b3c24 */
      *(undefined8 *)pcVar21 = uVar11;
      *(undefined8 *)(pcVar21 + 8) = uVar12;
                    /* catch() { ... } // from try @ 003b2510 with catch @ 003b3c2c
                       catch() { ... } // from try @ 003b2e4c with catch @ 003b3c2c
                       catch() { ... } // from try @ 003b2e70 with catch @ 003b3c2c */
      *(undefined8 *)(pcVar21 + 0x10) = uVar13;
      *(undefined8 *)(pcVar21 + 0x18) = uVar14;
      error(-0xd7,(String *)&local_178,"double cv::norm(cv::InputArray, int, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xb22);
      String::deallocate((String *)&local_178);
      uVar29 = local_60;
      goto joined_r0x003b3600;
    }
    if (uVar5 - 6 < 2) {
      bVar1 = local_60._4_4_ < 3;
      iVar17 = local_60._4_4_;
      if (bVar1) goto LAB_003b3dc4;
LAB_003b346c:
      lVar19 = 0;
      lVar22 = 1;
      do {
        lVar3 = lVar19 * 4;
        lVar19 = lVar19 + 1;
        lVar22 = lVar22 * *(int *)((long)local_20 + lVar3);
      } while ((int)lVar19 < iVar17);
      goto LAB_003b348c;
    }
  }
  local_60 = uVar29;
  pMVar33 = (Mat *)(&PTR_FUN_004f78a0)[(ulong)(uint)((int)uVar5 >> 1) * 8 + (long)(int)uVar6];
  if (pMVar33 == (Mat *)0x0) {
    local_168 = pMVar33;
    local_160 = pMVar33;
                    /* try { // try from 003b3e18 to 004b3e1b has its CatchHandler @ 003b410c */
    pcVar21 = (char *)String::allocate((String *)&local_168,9);
    cVar9 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
                    /* try { // try from 003b3e20 to 004b3eb7 has its CatchHandler @ 003b409c */
    *(undefined8 *)pcVar21 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar21[8] = cVar9;
    error(-0xd7,(String *)&local_168,"double cv::norm(cv::InputArray, int, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xb3d);
    String::deallocate((String *)&local_168);
  }
  pdVar38 = &local_180;
  local_138 = local_1a8;
                    /* try { // try from 003b3650 to 004b3653 has its CatchHandler @ 003b3a5c */
  local_128 = 0;
  local_130 = local_1b0;
  local_180 = 0.0;
  NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_120,&local_138,&local_150,-1);
  uVar10 = (uint)local_f8;
  if ((uVar5 != 2) || (3 < uVar6)) {
    bVar2 = true;
    if (bVar1 && uVar6 < 2) goto LAB_003b36a0;
    lVar22 = 0;
    uVar39 = 0;
    bVar1 = false;
    uVar30 = uVar10;
  }
  else {
    bVar2 = uVar6 < 2;
LAB_003b36a0:
    pdVar38 = (double *)&local_184;
    if ((!bVar2) || (uVar5 != 2)) {
      uVar39 = 0;
      if (uVar4 != 0) {
        uVar39 = 0x8000 / uVar4;
      }
      uVar30 = uVar39;
      if ((int)uVar10 < (int)uVar39) {
        uVar30 = uVar10;
      }
    }
    else {
      uVar39 = 0;
      if (uVar4 != 0) {
        uVar39 = 0x800000 / uVar4;
      }
      uVar30 = uVar39;
      if ((int)uVar10 < (int)uVar39) {
        uVar30 = uVar10;
      }
    }
    if (local_bc < 1) {
      bVar1 = true;
      lVar22 = 0;
    }
    else {
      bVar1 = true;
      lVar22 = local_78[(long)local_bc + -1];
    }
  }
  local_184 = 0;
  iVar17 = 0;
  uVar29 = 0;
  if (local_100 != 0) {
    do {
      if ((int)uVar10 < 1) {
LAB_003b37fc:
        NAryMatIterator::operator++((NAryMatIterator *)&local_120);
      }
      else {
        if (bVar1) {
          iVar32 = 0;
          iVar18 = 0;
          do {
            uVar7 = uVar30;
            if ((int)(iVar32 + uVar10) < (int)uVar30) {
              uVar7 = iVar32 + uVar10;
            }
            (*(code *)pMVar33)(local_150,local_148,pdVar38,uVar7,uVar4);
            iVar15 = local_184;
            iVar17 = iVar17 + uVar7;
            if (((int)uVar39 <= (int)(iVar17 + uVar30)) ||
               ((local_100 <= uVar29 + 1 && ((int)uVar10 <= (int)(iVar18 + uVar7))))) {
              iVar17 = 0;
                    /* try { // try from 003b37a8 to 004b38ef has its CatchHandler @ 003b3c7c */
              local_184 = 0;
              local_180 = local_180 + (double)iVar15;
            }
            local_150 = local_150 + (int)uVar7 * lVar22;
            if (local_148 != (Mat *)0x0) {
              local_148 = local_148 + (int)uVar7;
            }
            iVar18 = iVar18 + uVar30;
            iVar32 = iVar32 + -uVar30;
          } while (iVar18 < (int)uVar10);
          goto LAB_003b37fc;
        }
        iVar18 = 0;
        uVar7 = uVar30;
        do {
          uVar8 = uVar30;
          if ((int)(iVar18 + uVar10) < (int)uVar30) {
            uVar8 = iVar18 + uVar10;
          }
          (*(code *)pMVar33)(local_150,local_148,pdVar38,uVar8,uVar4);
          iVar17 = iVar17 + uVar8;
          local_150 = local_150 + (int)uVar8 * lVar22;
          if (local_148 != (Mat *)0x0) {
            local_148 = local_148 + (int)uVar8;
          }
          iVar18 = iVar18 + -uVar30;
          bVar2 = (int)uVar7 < (int)uVar10;
          uVar7 = uVar7 + uVar30;
        } while (bVar2);
                    /* try { // try from 003b3a58 to 004b3a5b has its CatchHandler @ 003b1770 */
                    /* catch() { ... } // from try @ 003b2858 with catch @ 003b3a5c
                       catch() { ... } // from try @ 003b3248 with catch @ 003b3a5c
                       catch() { ... } // from try @ 003b33d0 with catch @ 003b3a5c
                       catch() { ... } // from try @ 003b342c with catch @ 003b3a5c
                       catch() { ... } // from try @ 003b3650 with catch @ 003b3a5c */
        NAryMatIterator::operator++((NAryMatIterator *)&local_120);
      }
      uVar29 = uVar29 + 1;
    } while (uVar29 < local_100);
  }
  dVar35 = local_180;
  dVar16 = local_180;
  if (uVar5 == 1) {
                    /* catch() { ... } // from try @ 003b17d8 with catch @ 003b3ca0
                       catch() { ... } // from try @ 003b1f38 with catch @ 003b3ca0
                       catch() { ... } // from try @ 003b2c98 with catch @ 003b3ca0
                       catch() { ... } // from try @ 003b31ec with catch @ 003b3ca0 */
    if (uVar6 != 6) {
                    /* catch() { ... } // from try @ 003b1dc8 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b2274 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b22d0 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b2ca4 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b2cc8 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b3110 with catch @ 003b3ca8
                       catch() { ... } // from try @ 003b3170 with catch @ 003b3ca8 */
      if (uVar6 == 5) {
        dVar35 = (double)local_180._0_4_;
        dVar16 = (double)local_180._0_4_;
      }
      else {
                    /* catch() { ... } // from try @ 003b249c with catch @ 003b3cb0 */
        dVar35 = (double)(int)local_180._0_4_;
        dVar16 = (double)(int)local_180._0_4_;
      }
    }
  }
  else if ((uVar5 == 4) && (dVar35 = SQRT(local_180), dVar16 = dVar35, NAN(dVar35))) {
    dVar35 = ::sqrt(local_180);
    dVar16 = dVar35;
  }
LAB_003b3840:
  local_180 = dVar16;
  if (local_28 != 0) {
    piVar24 = (int *)(local_28 + 0x14);
    do {
      iVar17 = *piVar24;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar1) {
        *piVar24 = iVar17 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate(local_1b0);
                    /* catch() { ... } // from try @ 003b3238 with catch @ 003b3bd4
                       catch() { ... } // from try @ 003b3414 with catch @ 003b3bd4 */
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar17 = 0;
    puVar23 = local_20;
    do {
      iVar17 = iVar17 + 1;
      *(undefined4 *)puVar23 = 0;
      puVar23 = (undefined8 *)((long)puVar23 + 4);
    } while (iVar17 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar24 = (int *)(local_88 + 0x14);
    do {
      iVar17 = *piVar24;
      cVar9 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar24,0x10);
      if (bVar1) {
        *piVar24 = iVar17 + -1;
        cVar9 = ExclusiveMonitorsStatus();
      }
    } while (cVar9 != '\0');
    if (iVar17 == 1) {
      Mat::deallocate(local_1a8);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar17 = 0;
    piVar24 = local_80;
    do {
      iVar17 = iVar17 + 1;
      *piVar24 = 0;
      piVar24 = piVar24 + 1;
    } while (iVar17 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  auVar36._8_8_ = 0;
  auVar36._0_8_ = dVar35;
                    /* catch() { ... } // from try @ 003b2a38 with catch @ 003b3974
                       catch() { ... } // from try @ 003b329c with catch @ 003b3974 */
  return auVar36;
}


==================================================================

### FUNC 003b4130 (356 bytes) name=FUN_003b4130

undefined8
FUN_003b4130(float *param_1,long param_2,long param_3,double *param_4,int param_5,ulong param_6)

{
  float *pfVar1;
  uint uVar2;
  long lVar3;
  float *pfVar4;
  ulong uVar5;
  int iVar6;
  long lVar7;
  float *pfVar8;
  long lVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  
  dVar13 = *param_4;
  iVar6 = (int)param_6;
  if (param_3 != 0) {
    if (0 < param_5) {
      uVar10 = -(param_6 >> 0x1f & 1) & 0xfffffffc00000000 | (param_6 & 0xffffffff) << 2;
      lVar9 = 0;
      do {
        if ((*(char *)(param_3 + lVar9) != '\0') && (0 < iVar6)) {
          lVar7 = 0;
          do {
            pfVar4 = param_1 + lVar7;
            lVar3 = lVar7 * 4;
            lVar7 = lVar7 + 1;
                    /* try { // try from 003b416c to 004b418b has its CatchHandler @ 003b4128 */
            dVar11 = (double)(*pfVar4 - *(float *)(param_2 + lVar3));
            dVar13 = dVar13 + dVar11 * dVar11;
          } while ((int)lVar7 < iVar6);
        }
        lVar9 = lVar9 + 1;
        param_1 = (float *)((long)param_1 + uVar10);
        param_2 = param_2 + uVar10;
      } while ((int)lVar9 < param_5);
    }
    *param_4 = dVar13;
    return 0;
  }
  param_5 = param_5 * iVar6;
                    /* try { // try from 003b41a4 to 004b41df has its CatchHandler @ 003b51fc */
  if (param_5 < 4) {
    dVar11 = 0.0;
    uVar10 = 0;
  }
  else {
    dVar11 = 0.0;
    uVar2 = param_5 - 4U >> 2;
    pfVar4 = (float *)(param_2 + 4);
    pfVar8 = param_1;
    do {
      pfVar1 = pfVar4 + 4;
                    /* try { // try from 003b4218 to 004b421b has its CatchHandler @ 003b51ec */
                    /* try { // try from 003b4220 to 004b4307 has its CatchHandler @ 003b51fc */
      dVar11 = dVar11 + (double)(pfVar8[1] - *pfVar4) * (double)(pfVar8[1] - *pfVar4) +
                        (double)(*pfVar8 - pfVar4[-1]) * (double)(*pfVar8 - pfVar4[-1]) +
                        (double)(pfVar8[2] - pfVar4[1]) * (double)(pfVar8[2] - pfVar4[1]) +
                        (double)(pfVar8[3] - pfVar4[2]) * (double)(pfVar8[3] - pfVar4[2]);
      pfVar4 = pfVar1;
      pfVar8 = pfVar8 + 4;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar10 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar10 < param_5) {
    uVar5 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
    lVar9 = 0;
    do {
      lVar7 = lVar9 + uVar5;
      pfVar4 = (float *)(param_2 + uVar5 + lVar9);
      lVar9 = lVar9 + 4;
      dVar12 = (double)(*(float *)((long)param_1 + lVar7) - *pfVar4);
      dVar11 = dVar11 + dVar12 * dVar12;
    } while (lVar9 != ((ulong)(uint)((param_5 + -1) - (int)uVar10) + 1) * 4);
  }
  *param_4 = dVar13 + dVar11;
  return 0;
}


==================================================================

### FUNC 003b42a0 (4312 bytes) name=norm

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::norm(cv::_InputArray const&, cv::_InputArray const&, int, cv::_InputArray const&) */

undefined1  [16]
cv::norm(_InputArray *param_1,_InputArray *param_2,int param_3,_InputArray *param_4)

{
  bool bVar1;
  bool bVar2;
  long lVar3;
  float *pfVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  uint uVar14;
  ulong uVar15;
  uint uVar16;
  char cVar17;
  int iVar18;
  int iVar19;
  undefined8 *puVar20;
  void *__dest;
  long lVar21;
  char *pcVar22;
  _InputArray *p_Var23;
  undefined4 *puVar24;
  int *piVar25;
  long lVar26;
  float *pfVar27;
  float *pfVar28;
  int iVar29;
  int iVar30;
  undefined4 uVar31;
  int iVar32;
  int iVar33;
  Mat *pMVar34;
  double *pdVar35;
  double dVar36;
  undefined1 auVar37 [16];
  float fVar38;
  float fVar39;
  double dVar40;
  ulong uVar41;
  Mat *local_228;
  Mat *local_220;
  Mat *local_218;
  uint local_1fc;
  double local_1f8;
  undefined8 local_1f0;
  undefined8 local_1e8;
  undefined8 local_1e0;
  undefined8 local_1d8;
  Mat *local_1d0;
  Mat *local_1c8;
  undefined4 local_1c0;
  undefined4 local_1bc;
  uchar *local_1b8;
  Mat *local_1b0;
  long local_1a8;
  Mat *local_1a0;
  Mat *local_198;
  Mat *local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  undefined8 uStack_178;
  undefined8 local_170;
  undefined8 local_168;
  ulong local_160;
  ulong local_158;
  undefined8 local_150;
  long local_148;
  undefined8 *local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  int local_118;
  int local_114;
  float *local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  int *local_e0;
  undefined8 *local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  uint local_c0;
  int local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  long local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  long local_88;
  undefined4 *local_80;
  undefined8 *local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  undefined8 *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  cVar17 = _InputArray::sameSize(param_1,param_2);
  if (cVar17 == '\0') {
LAB_003b42ec:
    local_60 = 0;
    local_58 = 0;
    puVar20 = (undefined8 *)String::allocate((String *)&local_60,0x35);
    uVar13 = DAT_004738c8;
    uVar12 = _DAT_004738c0;
    uVar11 = DAT_004738b8;
    uVar10 = DAT_004738b0;
    uVar9 = DAT_004738a8;
    uVar8 = DAT_004738a0;
    *(undefined4 *)(puVar20 + 6) = DAT_004738d0;
    *(undefined1 *)((long)puVar20 + 0x34) = DAT_004738d4;
    *puVar20 = uVar8;
    puVar20[1] = uVar9;
    puVar20[2] = uVar10;
    puVar20[3] = uVar11;
    puVar20[4] = uVar12;
    puVar20[5] = uVar13;
    error(-0xd7,(String *)&local_60,
          "double cv::norm(cv::InputArray, cv::InputArray, int, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xbb5);
    String::deallocate((String *)&local_60);
  }
  else {
    iVar18 = _InputArray::type(param_1,-1);
    iVar19 = _InputArray::type(param_2,-1);
    if (iVar18 != iVar19) goto LAB_003b42ec;
  }
  if (((uint)param_3 >> 3 & 1) != 0) {
    dVar40 = (double)norm(param_1,param_2,param_3 & 0xfffffff7,param_4);
    dVar36 = (double)norm(param_2,param_3,param_4);
    dVar40 = dVar40 / (dVar36 + DAT_003b5460);
    goto LAB_003b47d8;
  }
  iVar18 = _InputArray::kind(param_1);
  if (iVar18 == 0x10000) {
    pMVar34 = *(Mat **)(param_1 + 8);
                    /* try { // try from 003b46f4 to 004b46f7 has its CatchHandler @ 003b51cc */
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar34;
    local_11c = *(int *)(pMVar34 + 4);
    local_118 = *(int *)(pMVar34 + 8);
    local_114 = *(int *)(pMVar34 + 0xc);
    local_110 = *(float **)(pMVar34 + 0x10);
    local_108 = *(undefined8 *)(pMVar34 + 0x18);
    local_100 = *(undefined8 *)(pMVar34 + 0x20);
    local_f8 = *(undefined8 *)(pMVar34 + 0x28);
    local_f0 = *(undefined8 *)(pMVar34 + 0x30);
    local_e8 = *(long *)(pMVar34 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar25 = (int *)(local_e8 + 0x14);
      do {
                    /* try { // try from 003b4768 to 004b476b has its CatchHandler @ 003b51d4 */
        cVar17 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar1) {
          *piVar25 = *piVar25 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_d0 = **(undefined8 **)(pMVar34 + 0x48);
      local_c8 = (*(undefined8 **)(pMVar34 + 0x48))[1];
    }
    else {
                    /* try { // try from 003b4fbc to 004b4fbf has its CatchHandler @ 003b50c4 */
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_228 = (Mat *)&local_120;
  iVar18 = _InputArray::kind(param_2);
  if (iVar18 == 0x10000) {
    pMVar34 = *(Mat **)(param_2 + 8);
                    /* try { // try from 003b4938 to 004b4ac7 has its CatchHandler @ 003b5204 */
    local_80 = &local_b8;
    local_78 = &local_70;
    local_c0 = *(uint *)pMVar34;
    local_bc = *(int *)(pMVar34 + 4);
    local_b8 = *(undefined4 *)(pMVar34 + 8);
    local_b4 = *(undefined4 *)(pMVar34 + 0xc);
    local_b0 = *(long *)(pMVar34 + 0x10);
    local_a8 = *(undefined8 *)(pMVar34 + 0x18);
    local_a0 = *(undefined8 *)(pMVar34 + 0x20);
    local_98 = *(undefined8 *)(pMVar34 + 0x28);
    local_90 = *(undefined8 *)(pMVar34 + 0x30);
    local_88 = *(long *)(pMVar34 + 0x38);
    local_68 = 0;
    local_70 = 0;
    if (local_88 != 0) {
      piVar25 = (int *)(local_88 + 0x14);
      do {
        cVar17 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar1) {
          *piVar25 = *piVar25 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_70 = **(undefined8 **)(pMVar34 + 0x48);
      local_68 = (*(undefined8 **)(pMVar34 + 0x48))[1];
    }
    else {
                    /* try { // try from 003b4f94 to 004b4f97 has its CatchHandler @ 003b4128 */
      local_bc = 0;
      Mat::copySize((Mat *)&local_c0,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_2);
  }
  local_218 = (Mat *)&local_c0;
  iVar18 = _InputArray::kind(param_4);
  if (iVar18 == 0x10000) {
    pMVar34 = *(Mat **)(param_4 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
                    /* try { // try from 003b4894 to 004b48e7 has its CatchHandler @ 003b4128 */
    uVar5 = *(uint *)pMVar34;
    local_50 = *(long *)(pMVar34 + 0x10);
    local_60 = *(ulong *)pMVar34;
    local_58 = *(undefined8 *)(pMVar34 + 8);
    local_48 = *(undefined8 *)(pMVar34 + 0x18);
    local_40 = *(undefined8 *)(pMVar34 + 0x20);
    local_38 = *(undefined8 *)(pMVar34 + 0x28);
    local_30 = *(undefined8 *)(pMVar34 + 0x30);
    local_28 = *(long *)(pMVar34 + 0x38);
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar25 = (int *)(local_28 + 0x14);
      do {
        cVar17 = '\x01';
        bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar1) {
          *piVar25 = *piVar25 + 1;
          cVar17 = ExclusiveMonitorsStatus();
        }
      } while (cVar17 != '\0');
    }
    if (*(int *)(pMVar34 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar34 + 0x48);
      local_8 = (*(undefined8 **)(pMVar34 + 0x48))[1];
    }
    else {
                    /* try { // try from 003b4fa4 to 004b4fb3 has its CatchHandler @ 003b5204 */
      local_60 = (ulong)uVar5;
      Mat::copySize((Mat *)&local_60,pMVar34);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  uVar16 = local_120;
  local_220 = (Mat *)&local_60;
  uVar5 = param_3 & 7;
  bVar1 = uVar5 - 4 < 2;
  if (((!bVar1) && (1 < uVar5 - 1)) && ((1 < uVar5 - 6 || ((local_120 & 0xfff) != 0)))) {
    local_1f0 = 0;
    local_1e8 = 0;
    __dest = (void *)String::allocate((String *)&local_1f0,0xb1);
    memcpy(__dest,
           "normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR || ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && src1.type() == CV_8U)"
           ,0xb1);
    error(-0xd7,(String *)&local_1f0,
          "double cv::norm(cv::InputArray, cv::InputArray, int, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xc33);
    String::deallocate((String *)&local_1f0);
  }
  if (((local_120 >> 0xe & 1) == 0) || ((local_c0 >> 0xe & 1) == 0)) {
LAB_003b453c:
    if (local_50 == 0) {
LAB_003b45cc:
      if (uVar5 - 6 < 2) {
        if (local_50 != 0) {
          if (2 < local_60._4_4_) goto LAB_003b5038;
LAB_003b4dcc:
          lVar26 = (long)local_58._4_4_ * (long)(int)local_58;
LAB_003b4dd8:
                    /* try { // try from 003b4dd8 to 004b4ddb has its CatchHandler @ 003b51e4 */
          if (lVar26 != 0) {
            local_170 = 0;
            local_168 = 0;
            local_138 = &local_130;
            local_140 = &uStack_178;
            local_160 = 0;
            uStack_178 = _UNK_003b5478;
            local_180 = _DAT_003b5470;
            local_158 = 0;
            local_150 = 0;
            local_148 = 0;
                    /* try { // try from 003b4e2c to 004b4e2f has its CatchHandler @ 003b51bc */
            uStack_128 = 0;
            local_130 = 0;
                    /* try { // try from 003b4e34 to 004b4e37 has its CatchHandler @ 003b51e4 */
            local_1d0._0_4_ = 0x1010000;
            local_1b8._0_4_ = 0x1010000;
            local_1b0 = local_218;
            local_1c0 = 0;
            local_1bc = 0;
            local_1c8 = local_228;
            local_1a8 = 0;
            local_190 = (Mat *)0x0;
            local_1a0._0_4_ = 0x2010000;
            local_198 = (Mat *)&local_180;
            p_Var23 = (_InputArray *)noArray();
            bitwise_xor((_InputArray *)&local_1d0,(_InputArray *)&local_1b8,
                        (_OutputArray *)&local_1a0,p_Var23);
            local_1d0 = (Mat *)CONCAT44(local_1d0._4_4_,0x1010000);
            local_1b8 = (uchar *)CONCAT44(local_1b8._4_4_,0x1010000);
            local_1b0 = local_220;
            local_1c0 = 0;
            local_1bc = 0;
                    /* try { // try from 003b4eb0 to 004b4eb3 has its CatchHandler @ 003b50c4 */
            local_1a8 = 0;
            local_190 = (Mat *)0x0;
            local_1a0._0_4_ = 0x2010000;
            local_1c8 = (Mat *)&local_180;
            local_198 = (Mat *)&local_180;
            p_Var23 = (_InputArray *)noArray();
                    /* try { // try from 003b4ed0 to 004b4ed3 has its CatchHandler @ 003b51d4 */
            bitwise_and((_InputArray *)&local_1d0,(_InputArray *)&local_1b8,
                        (_OutputArray *)&local_1a0,p_Var23);
            local_190 = (Mat *)0x0;
            local_1a0 = (Mat *)CONCAT44(local_1a0._4_4_,0x1010000);
            local_198 = (Mat *)&local_180;
            p_Var23 = (_InputArray *)noArray();
            dVar40 = (double)norm((_InputArray *)&local_1a0,uVar5,p_Var23);
            if (local_148 != 0) {
              piVar25 = (int *)(local_148 + 0x14);
              do {
                iVar18 = *piVar25;
                cVar17 = '\x01';
                bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
                if (bVar1) {
                  *piVar25 = iVar18 + -1;
                  cVar17 = ExclusiveMonitorsStatus();
                }
                    /* try { // try from 003b4f24 to 004b4f27 has its CatchHandler @ 003b51a8 */
              } while (cVar17 != '\0');
                    /* try { // try from 003b4f2c to 004b4f2f has its CatchHandler @ 003b51d4 */
              if (iVar18 == 1) {
                Mat::deallocate((Mat *)&local_180);
                    /* try { // try from 003b52bc to 004b52bf has its CatchHandler @ 003b6888 */
              }
            }
            local_148 = 0;
            local_170 = 0;
            local_158 = 0;
            local_160 = 0;
            local_168 = 0;
            if (0 < local_180._4_4_) {
              iVar18 = 0;
              puVar20 = local_140;
              do {
                *(undefined4 *)puVar20 = 0;
                iVar18 = iVar18 + 1;
                puVar20 = (undefined8 *)((long)puVar20 + 4);
              } while (iVar18 < local_180._4_4_);
            }
            dVar36 = local_1f8;
            if (local_138 != &local_130) {
              fastFree(local_138);
              dVar36 = local_1f8;
            }
            goto LAB_003b4b80;
          }
        }
        local_1a0 = local_228;
        local_190 = (Mat *)0x0;
        uVar31 = 2;
        if (uVar5 == 6) {
          uVar31 = 1;
        }
        local_198 = local_218;
        NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_180,&local_1a0,&local_1b8,-1);
        uVar15 = local_158;
        iVar18 = 0;
        for (uVar41 = 0; uVar41 < local_160; uVar41 = uVar41 + 1) {
                    /* catch() { ... } // from try @ 003b4eb0 with catch @ 003b50c4
                       catch() { ... } // from try @ 003b4fbc with catch @ 003b50c4 */
          iVar19 = FUN_003cdc00(local_1b8,local_1b0,uVar15 & 0xffffffff,uVar31);
          iVar18 = iVar18 + iVar19;
          NAryMatIterator::operator++((NAryMatIterator *)&local_180);
        }
        dVar40 = (double)iVar18;
        dVar36 = local_1f8;
        goto LAB_003b4b80;
      }
    }
    else {
      if (local_60._4_4_ < 3) goto LAB_003b454c;
LAB_003b4834:
      lVar26 = 0;
      lVar21 = 1;
      do {
        lVar3 = lVar26 * 4;
        lVar26 = lVar26 + 1;
        lVar21 = lVar21 * *(int *)((long)local_20 + lVar3);
                    /* try { // try from 003b4850 to 004b4853 has its CatchHandler @ 003b51e4 */
      } while ((int)lVar26 < local_60._4_4_);
LAB_003b4558:
      if (lVar21 == 0) goto LAB_003b45cc;
      if ((local_60 & 0xfff) != 0) {
        local_1e0 = 0;
        local_1d8 = 0;
        pcVar22 = (char *)String::allocate((String *)&local_1e0,0x24);
        uVar11 = s_mask_empty______mask_type______C_004734c0._24_8_;
        uVar10 = s_mask_empty______mask_type______C_004734c0._16_8_;
        uVar9 = s_mask_empty______mask_type______C_004734c0._8_8_;
        uVar8 = s_mask_empty______mask_type______C_004734c0._0_8_;
        *(undefined4 *)(pcVar22 + 0x20) = s_mask_empty______mask_type______C_004734c0._32_4_;
                    /* try { // try from 003b45b4 to 004b467b has its CatchHandler @ 003b5204 */
        *(undefined8 *)pcVar22 = uVar8;
        *(undefined8 *)(pcVar22 + 8) = uVar9;
        *(undefined8 *)(pcVar22 + 0x10) = uVar10;
        *(undefined8 *)(pcVar22 + 0x18) = uVar11;
        error(-0xd7,(String *)&local_1e0,
              "double cv::norm(cv::InputArray, cv::InputArray, int, cv::InputArray)",
              "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xd05);
        String::deallocate((String *)&local_1e0);
        goto LAB_003b45cc;
      }
      if (uVar5 - 6 < 2) {
        if (local_60._4_4_ < 3) goto LAB_003b4dcc;
LAB_003b5038:
        lVar21 = 0;
        lVar26 = 1;
        do {
          lVar3 = lVar21 * 4;
                    /* try { // try from 003b5048 to 004b504b has its CatchHandler @ 003b5198 */
          lVar21 = lVar21 + 1;
                    /* try { // try from 003b5050 to 004b5053 has its CatchHandler @ 003b5204 */
          lVar26 = lVar26 * *(int *)((long)local_20 + lVar3);
        } while ((int)lVar21 < local_60._4_4_);
        goto LAB_003b4dd8;
      }
    }
    uVar6 = uVar16 & 7;
    pMVar34 = (Mat *)(&PTR_FUN_004f7760)[(ulong)(uint)((int)uVar5 >> 1) * 8 + (long)(int)uVar6];
    if (pMVar34 == (Mat *)0x0) {
      local_1d0 = pMVar34;
      local_1c8 = pMVar34;
      pcVar22 = (char *)String::allocate((String *)&local_1d0,9);
      cVar17 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
      *(undefined8 *)pcVar22 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
      pcVar22[8] = cVar17;
      error(-0xd7,(String *)&local_1d0,
            "double cv::norm(cv::InputArray, cv::InputArray, int, cv::InputArray)",
            "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xd21);
      String::deallocate((String *)&local_1d0);
    }
    pdVar35 = &local_1f8;
    local_1a0 = local_228;
    local_198 = local_218;
    uStack_188 = 0;
    local_190 = local_220;
    local_1f8 = 0.0;
    NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_180,&local_1a0,&local_1b8,-1);
    iVar18 = (int)local_158;
    if ((uVar5 != 2) || (3 < uVar6)) {
      bVar2 = true;
      if (bVar1 && uVar6 < 2) goto LAB_003b4688;
      lVar26 = 0;
      iVar19 = 0;
      bVar1 = false;
      iVar29 = iVar18;
    }
    else {
      bVar2 = uVar6 < 2;
LAB_003b4688:
      pdVar35 = (double *)&local_1fc;
      if ((!bVar2) || (iVar19 = 0x800000, uVar5 != 2)) {
        iVar19 = 0x8000;
        iVar29 = 0x8000;
        if (iVar18 < 0x8000) {
          iVar29 = iVar18;
        }
      }
      else {
        iVar29 = 0x800000;
        if (iVar18 < 0x800000) {
          iVar29 = iVar18;
        }
      }
      if (local_11c < 1) {
        bVar1 = true;
                    /* try { // try from 003b4ff4 to 004b4ff7 has its CatchHandler @ 003b5204 */
        lVar26 = 0;
      }
      else {
        bVar1 = true;
        lVar26 = local_d8[(long)local_11c + -1];
      }
    }
    local_1fc = 0;
    iVar30 = 0;
    uVar41 = 0;
    if (local_160 != 0) {
      do {
        if (iVar18 < 1) {
LAB_003b4b3c:
          NAryMatIterator::operator++((NAryMatIterator *)&local_180);
        }
        else {
          if (bVar1) {
            iVar33 = 0;
            iVar32 = 0;
            do {
              iVar7 = iVar29;
              if (iVar33 + iVar18 < iVar29) {
                iVar7 = iVar33 + iVar18;
              }
              (*(code *)pMVar34)();
              uVar14 = local_1fc;
              iVar30 = iVar30 + iVar7;
              if ((iVar19 <= iVar30 + iVar29) ||
                 ((local_160 <= uVar41 + 1 && (iVar18 <= iVar32 + iVar7)))) {
                    /* try { // try from 003b4ad0 to 004b4ad3 has its CatchHandler @ 003b51cc */
                iVar30 = 0;
                    /* try { // try from 003b4adc to 004b4adf has its CatchHandler @ 003b51e4 */
                local_1fc = 0;
                local_1f8 = local_1f8 + (double)uVar14;
              }
              lVar21 = iVar7 * lVar26;
              local_1b8 = local_1b8 + lVar21;
              local_1b0 = local_1b0 + lVar21;
              if (local_1a8 != 0) {
                local_1a8 = local_1a8 + iVar7;
              }
              iVar32 = iVar32 + iVar29;
              iVar33 = iVar33 + -iVar29;
            } while (iVar32 < iVar18);
            goto LAB_003b4b3c;
          }
          iVar32 = 0;
                    /* try { // try from 003b4d08 to 004b4d0b has its CatchHandler @ 003b51fc */
          iVar33 = iVar29;
          do {
                    /* try { // try from 003b4d1c to 004b4d1f has its CatchHandler @ 003b51d4 */
            iVar7 = iVar29;
            if (iVar32 + iVar18 < iVar29) {
              iVar7 = iVar32 + iVar18;
            }
            (*(code *)pMVar34)(local_1b8,local_1b0,local_1a8,pdVar35,iVar7,(uVar16 >> 3 & 0x1ff) + 1
                              );
                    /* try { // try from 003b4d28 to 004b4d2b has its CatchHandler @ 003b51dc */
                    /* try { // try from 003b4d34 to 004b4d3f has its CatchHandler @ 003b51fc */
            iVar30 = iVar30 + iVar7;
            lVar21 = iVar7 * lVar26;
            local_1b8 = local_1b8 + lVar21;
            local_1b0 = local_1b0 + lVar21;
            if (local_1a8 != 0) {
              local_1a8 = local_1a8 + iVar7;
            }
            iVar32 = iVar32 + -iVar29;
                    /* try { // try from 003b4d70 to 004b4dbb has its CatchHandler @ 003b5204 */
            bVar2 = iVar33 < iVar18;
            iVar33 = iVar33 + iVar29;
          } while (bVar2);
          NAryMatIterator::operator++((NAryMatIterator *)&local_180);
        }
        uVar41 = uVar41 + 1;
      } while (uVar41 < local_160);
    }
    dVar40 = local_1f8;
    dVar36 = local_1f8;
    if (uVar5 == 1) {
      if (uVar6 != 6) {
        if (uVar6 == 5) {
          dVar40 = (double)local_1f8._0_4_;
          dVar36 = (double)local_1f8._0_4_;
        }
        else {
          dVar40 = (double)((ulong)local_1f8 & 0xffffffff);
          dVar36 = (double)((ulong)local_1f8 & 0xffffffff);
        }
      }
    }
    else {
                    /* try { // try from 003b5194 to 004b5197 has its CatchHandler @ 003b4128 */
                    /* catch() { ... } // from try @ 003b5048 with catch @ 003b5198 */
      if ((uVar5 == 4) && (dVar40 = SQRT(local_1f8), dVar36 = dVar40, NAN(dVar40))) {
        dVar40 = ::sqrt(local_1f8);
        dVar36 = dVar40;
      }
    }
  }
  else {
    if (local_50 != 0) {
      if (2 < local_60._4_4_) {
        lVar21 = 1;
        lVar26 = 0;
        do {
          lVar3 = lVar26 * 4;
          lVar26 = lVar26 + 1;
          lVar21 = lVar21 * *(int *)((long)local_20 + lVar3);
        } while ((int)lVar26 < local_60._4_4_);
        if (lVar21 == 0) goto LAB_003b44bc;
        goto LAB_003b4834;
      }
      if ((long)local_58._4_4_ * (long)(int)local_58 == 0) goto LAB_003b44bc;
LAB_003b454c:
      lVar21 = (long)local_58._4_4_ * (long)(int)local_58;
      goto LAB_003b4558;
    }
LAB_003b44bc:
    if (local_11c < 3) {
      lVar21 = (long)local_114 * (long)local_118;
    }
    else {
      lVar26 = 0;
      lVar21 = 1;
      do {
        piVar25 = local_e0 + lVar26;
        lVar26 = lVar26 + 1;
        lVar21 = lVar21 * *piVar25;
      } while ((int)lVar26 < local_11c);
    }
    lVar21 = lVar21 + ((ulong)(local_120 >> 3) & 0x1ff) * lVar21;
    iVar18 = (int)lVar21;
    lVar26 = (long)iVar18;
    if ((lVar26 != lVar21) || ((local_120 & 7) != 5)) goto LAB_003b453c;
    if (uVar5 == 4) {
                    /* catch() { ... } // from try @ 003b4e2c with catch @ 003b51bc */
      local_180 = 0.0;
      FUN_003b4130(local_110,local_b0,0,&local_180,lVar26,1);
                    /* catch() { ... } // from try @ 003b46f4 with catch @ 003b51cc
                       catch() { ... } // from try @ 003b4ad0 with catch @ 003b51cc */
      dVar40 = SQRT(local_180);
                    /* catch() { ... } // from try @ 003b4768 with catch @ 003b51d4
                       catch() { ... } // from try @ 003b4d1c with catch @ 003b51d4
                       catch() { ... } // from try @ 003b4ed0 with catch @ 003b51d4
                       catch() { ... } // from try @ 003b4f2c with catch @ 003b51d4 */
      dVar36 = local_1f8;
      if (NAN(dVar40)) {
                    /* catch() { ... } // from try @ 003b47dc with catch @ 003b51dc
                       catch() { ... } // from try @ 003b4d28 with catch @ 003b51dc */
        dVar40 = ::sqrt(local_180);
        dVar36 = local_1f8;
                    /* catch() { ... } // from try @ 003b4850 with catch @ 003b51e4
                       catch() { ... } // from try @ 003b4adc with catch @ 003b51e4
                       catch() { ... } // from try @ 003b4dd8 with catch @ 003b51e4
                       catch() { ... } // from try @ 003b4e34 with catch @ 003b51e4 */
      }
    }
    else if (uVar5 == 5) {
      local_180 = 0.0;
      FUN_003b4130(local_110,local_b0,0,&local_180,lVar26,1);
      dVar40 = local_180;
      dVar36 = local_1f8;
    }
    else {
      dVar36 = local_1f8;
      if (uVar5 == 2) {
        if (iVar18 < 4) {
          dVar40 = 0.0;
          uVar5 = 0;
        }
        else {
          dVar40 = 0.0;
          uVar5 = iVar18 - 4U >> 2;
          pfVar27 = (float *)(local_b0 + 4);
          pfVar28 = local_110;
          do {
            pfVar4 = pfVar27 + 4;
                    /* try { // try from 003b5394 to 004b5397 has its CatchHandler @ 003b67cc */
                    /* try { // try from 003b539c to 004b53d7 has its CatchHandler @ 003b6888 */
            dVar40 = dVar40 + ABS((double)(*pfVar28 - pfVar27[-1])) +
                              ABS((double)(pfVar28[1] - *pfVar27)) +
                              ABS((double)(pfVar28[2] - pfVar27[1])) +
                              ABS((double)(pfVar28[3] - pfVar27[2]));
            pfVar27 = pfVar4;
            pfVar28 = pfVar28 + 4;
          } while (pfVar4 != (float *)(local_b0 + (ulong)uVar5 * 0x10 + 0x14));
          uVar5 = (uVar5 + 1) * 4;
        }
        if ((int)uVar5 < iVar18) {
          uVar41 = -(ulong)(uVar5 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar5 << 2;
          lVar26 = 0;
          do {
            lVar21 = lVar26 + uVar41;
            pfVar27 = (float *)(local_b0 + uVar41 + lVar26);
            lVar26 = lVar26 + 4;
                    /* try { // try from 003b5418 to 004b541b has its CatchHandler @ 003b6890 */
            dVar40 = dVar40 + ABS((double)(*(float *)((long)local_110 + lVar21) - *pfVar27));
                    /* try { // try from 003b5420 to 004b5527 has its CatchHandler @ 003b6888 */
          } while (lVar26 != ((ulong)((iVar18 + -1) - uVar5) + 1) * 4);
        }
        dVar40 = dVar40 + 0.0;
      }
      else {
        if (uVar5 != 1) goto LAB_003b453c;
        if (0 < iVar18) {
          fVar38 = 0.0;
          lVar26 = 0;
          do {
                    /* try { // try from 003b52f8 to 004b52fb has its CatchHandler @ 003b67bc */
                    /* try { // try from 003b5300 to 004b535b has its CatchHandler @ 003b6888 */
            fVar39 = ABS(local_110[lVar26] - *(float *)(local_b0 + lVar26 * 4));
            if (fVar39 <= fVar38) {
              fVar39 = fVar38;
            }
            fVar38 = fVar39;
            lVar26 = lVar26 + 1;
          } while ((int)lVar26 < iVar18);
          if (0.0 < fVar38) {
            dVar40 = (double)fVar38;
            goto LAB_003b4b80;
          }
        }
        dVar40 = 0.0;
      }
    }
  }
LAB_003b4b80:
  local_1f8 = dVar36;
  if (local_28 != 0) {
    piVar25 = (int *)(local_28 + 0x14);
    do {
      iVar18 = *piVar25;
      cVar17 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar1) {
        *piVar25 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate(local_220);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar18 = 0;
    puVar20 = local_20;
    do {
      iVar18 = iVar18 + 1;
      *(undefined4 *)puVar20 = 0;
      puVar20 = (undefined8 *)((long)puVar20 + 4);
    } while (iVar18 < local_60._4_4_);
  }
  if (local_18 != &local_10) {
    fastFree(local_18);
  }
  if (local_88 != 0) {
    piVar25 = (int *)(local_88 + 0x14);
    do {
      iVar18 = *piVar25;
      cVar17 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar1) {
        *piVar25 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate(local_218);
    }
  }
  local_88 = 0;
  local_b0 = 0;
  local_98 = 0;
  local_a0 = 0;
  local_a8 = 0;
  if (0 < local_bc) {
    iVar18 = 0;
    puVar24 = local_80;
    do {
      iVar18 = iVar18 + 1;
      *puVar24 = 0;
      puVar24 = puVar24 + 1;
    } while (iVar18 < local_bc);
  }
  if (local_78 != &local_70) {
    fastFree(local_78);
  }
  if (local_e8 != 0) {
    piVar25 = (int *)(local_e8 + 0x14);
    do {
      iVar18 = *piVar25;
      cVar17 = '\x01';
      bVar1 = (bool)ExclusiveMonitorPass(piVar25,0x10);
      if (bVar1) {
        *piVar25 = iVar18 + -1;
        cVar17 = ExclusiveMonitorsStatus();
      }
    } while (cVar17 != '\0');
    if (iVar18 == 1) {
      Mat::deallocate(local_228);
    }
  }
  local_e8 = 0;
  local_f8 = 0;
  local_110 = (float *)0x0;
  local_100 = 0;
  local_108 = 0;
  if (0 < local_11c) {
    iVar18 = 0;
    piVar25 = local_e0;
    do {
      iVar18 = iVar18 + 1;
      *piVar25 = 0;
      piVar25 = piVar25 + 1;
    } while (iVar18 < local_11c);
  }
  if (local_d8 != &local_d0) {
                    /* try { // try from 003b4cfc to 004b4cff has its CatchHandler @ 003b5204 */
    fastFree(local_d8);
  }
LAB_003b47d8:
  auVar37._8_8_ = 0;
  auVar37._0_8_ = dVar40;
                    /* try { // try from 003b47dc to 004b47df has its CatchHandler @ 003b51dc */
  return auVar37;
}


==================================================================

### FUNC 003b5480 (276 bytes) name=PSNR

/* cv::PSNR(cv::_InputArray const&, cv::_InputArray const&) */

undefined1  [16] cv::PSNR(_InputArray *param_1,_InputArray *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  int iVar4;
  char *pcVar5;
  _InputArray *p_Var6;
  long lVar7;
  double dVar8;
  undefined1 auVar9 [16];
  double dVar10;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar4 = _InputArray::depth(param_1,-1);
  if (iVar4 != 0) {
    local_10 = 0;
    local_8 = 0;
    pcVar5 = (char *)String::allocate((String *)&local_10,0x16);
    uVar3 = s__src1_depth______CV_8U_004738d8._20_2_;
    uVar2 = s__src1_depth______CV_8U_004738d8._8_8_;
    uVar1 = s__src1_depth______CV_8U_004738d8._0_8_;
    *(undefined4 *)(pcVar5 + 0x10) = s__src1_depth______CV_8U_004738d8._16_4_;
    *(undefined2 *)(pcVar5 + 0x14) = uVar3;
    *(undefined8 *)pcVar5 = uVar1;
    *(undefined8 *)(pcVar5 + 8) = uVar2;
    error(-0xd7,(String *)&local_10,"double cv::PSNR(cv::InputArray, cv::InputArray)",
          "/builds/master_pack-android/opencv/modules/core/src/stat.cpp",0xecb);
    String::deallocate((String *)&local_10);
  }
  p_Var6 = (_InputArray *)noArray();
  dVar8 = (double)norm(param_1,param_2,5,p_Var6);
  lVar7 = _InputArray::total(param_1,-1);
  iVar4 = _InputArray::channels(param_1,-1);
  dVar8 = dVar8 / (double)(ulong)(iVar4 * lVar7);
  dVar10 = SQRT(dVar8);
  if (NAN(dVar10)) {
    dVar10 = ::sqrt(dVar8);
  }
  dVar8 = log10(DAT_003b55b0 / (dVar10 + DAT_003b55a8));
  auVar9._0_8_ = dVar8 * 20.0;
  auVar9._8_8_ = 0;
  return auVar9;
}


==================================================================

### FUNC 003b55c0 (1984 bytes) name=cvNorm

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined1  [16] cvNorm(cv *param_1,cv *param_2,int param_3,cv *param_4)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  _InputArray *p_Var5;
  Mat **ppMVar6;
  undefined8 *puVar7;
  AutoBuffer *pAVar8;
  undefined8 *puVar9;
  cv *this;
  undefined4 uVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  undefined4 local_270 [2];
  Mat *local_268;
  undefined4 local_260;
  undefined4 local_25c;
  undefined4 local_258 [2];
  Mat *local_250;
  undefined4 local_248;
  undefined4 local_244;
  undefined4 local_240 [2];
  Mat *local_238;
  undefined4 local_230;
  undefined4 local_22c;
  undefined4 local_228 [2];
  Mat *local_220;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210 [2];
  Mat *local_208;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined4 local_1f8 [2];
  Mat *local_1f0;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined8 local_1e0;
  undefined8 uStack_1d8;
  undefined8 local_1d0;
  undefined8 uStack_1c8;
  undefined8 local_1c0;
  undefined8 uStack_1b8;
  undefined8 local_1b0;
  long lStack_1a8;
  undefined8 *local_1a0;
  AutoBuffer *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Mat *pMStack_178;
  undefined8 local_170;
  undefined8 uStack_168;
  undefined8 local_160;
  undefined8 uStack_158;
  undefined8 local_150;
  long lStack_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  undefined4 local_120;
  int local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined8 local_110;
  undefined8 uStack_108;
  undefined8 local_100;
  undefined8 uStack_f8;
  undefined8 local_f0;
  long lStack_e8;
  AutoBuffer *local_e0;
  undefined8 *local_d8;
  undefined8 auStack_d0 [2];
  undefined4 local_c0;
  int local_bc;
  Mat *local_b8;
  undefined8 local_b0;
  undefined8 uStack_a8;
  undefined8 local_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  long lStack_88;
  AutoBuffer *local_80;
  undefined8 *local_78;
  undefined8 auStack_70 [2];
  uint local_60;
  int local_5c;
  Mat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  pAVar8 = (AutoBuffer *)&local_190;
  local_138 = &local_130;
  uStack_188 = 0;
  local_190 = 0;
  local_1a0 = &uStack_1d8;
  uStack_128 = 0;
  local_130 = 0;
  local_140 = &pMStack_178;
  uStack_1d8 = _UNK_003b5e68;
  local_1e0 = _DAT_003b5e60;
  local_1d0 = 0;
  pMStack_178 = _UNK_003b5e68;
  local_180 = _DAT_003b5e60;
  uStack_1c8 = 0;
                    /* try { // try from 003b5618 to 004b561b has its CatchHandler @ 003b6970 */
  local_1c0 = 0;
  uStack_1b8 = 0;
  local_1b0 = 0;
  lStack_1a8 = 0;
  local_170 = 0;
  uStack_168 = 0;
  local_160 = 0;
  uStack_158 = 0;
  local_150 = 0;
  lStack_148 = 0;
  this = param_2;
  if (param_1 == (cv *)0x0) {
    this = (cv *)0x0;
    param_1 = param_2;
  }
  local_198 = pAVar8;
  cv::cvarrToMat(param_1,(void *)0x0,true,true,0,pAVar8);
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = *piVar1 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
                    /* try { // try from 003b56ac to 004b5747 has its CatchHandler @ 003b6948 */
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  puVar7 = local_d8;
  lStack_1a8 = 0;
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if ((int)local_1e0._4_4_ < 1) {
LAB_003b5710:
    if (2 < local_11c) goto LAB_003b571c;
                    /* try { // try from 003b5b90 to 004b5b93 has its CatchHandler @ 003b6880 */
    uStack_1d8 = (Mat *)CONCAT44(local_114,local_118);
    local_1e0 = CONCAT44(local_11c,local_120);
    *(undefined8 *)local_198 = *local_d8;
    *(undefined8 *)(local_198 + 8) = puVar7[1];
  }
  else {
    iVar4 = 0;
    puVar9 = local_1a0;
    do {
      *(undefined4 *)puVar9 = 0;
      iVar4 = iVar4 + 1;
      pAVar8 = (AutoBuffer *)(ulong)local_1e0._4_4_;
      puVar9 = (undefined8 *)((long)puVar9 + 4);
    } while (iVar4 < (int)local_1e0._4_4_);
    if ((int)local_1e0._4_4_ < 3) goto LAB_003b5710;
LAB_003b571c:
    local_1e0 = CONCAT44(local_1e0._4_4_,local_120);
    cv::Mat::copySize((Mat *)&local_1e0,(Mat *)&local_120);
  }
  uStack_1b8 = uStack_f8;
  local_1c0 = local_100;
  lStack_1a8 = lStack_e8;
  local_1b0 = local_f0;
  uStack_1c8 = uStack_108;
  local_1d0 = local_110;
  if (lStack_e8 != 0) {
    piVar1 = (int *)(lStack_e8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_120);
    }
  }
  lStack_e8 = 0;
  local_110 = 0;
  uStack_f8 = 0;
  local_100 = 0;
  uStack_108 = 0;
  if (0 < local_11c) {
    iVar4 = 0;
    do {
      pAVar8 = local_e0 + 4;
      *(undefined4 *)local_e0 = 0;
      iVar4 = iVar4 + 1;
      local_e0 = pAVar8;
    } while (iVar4 < local_11c);
  }
                    /* try { // try from 003b57bc to 004b57bf has its CatchHandler @ 003b675c */
  if (local_d8 != auStack_d0) {
    cv::fastFree(local_d8);
  }
  if (param_4 != (cv *)0x0) {
    cv::cvarrToMat(param_4,(void *)0x0,true,false,0,pAVar8);
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (lStack_148 != 0) {
      piVar1 = (int *)(lStack_148 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate((Mat *)&local_180);
      }
    }
    puVar7 = local_78;
    lStack_148 = 0;
    local_170 = 0;
    uStack_158 = 0;
    local_160 = 0;
    uStack_168 = 0;
    if ((int)local_180._4_4_ < 1) {
LAB_003b587c:
      if (2 < local_bc) goto LAB_003b5bb8;
      pMStack_178 = local_b8;
      local_180 = CONCAT44(local_bc,local_c0);
      *local_138 = *local_78;
      local_138[1] = puVar7[1];
    }
    else {
      iVar4 = 0;
      ppMVar6 = local_140;
      do {
        *(undefined4 *)ppMVar6 = 0;
        iVar4 = iVar4 + 1;
        pAVar8 = (AutoBuffer *)(ulong)local_180._4_4_;
        ppMVar6 = (Mat **)((long)ppMVar6 + 4);
      } while (iVar4 < (int)local_180._4_4_);
      if ((int)local_180._4_4_ < 3) goto LAB_003b587c;
LAB_003b5bb8:
      local_180 = CONCAT44(local_180._4_4_,local_c0);
      cv::Mat::copySize((Mat *)&local_180,(Mat *)&local_c0);
    }
                    /* try { // try from 003b58d4 to 004b58d7 has its CatchHandler @ 003b6888 */
    uStack_158 = uStack_98;
    local_160 = local_a0;
    lStack_148 = lStack_88;
    local_150 = local_90;
    uStack_168 = uStack_a8;
    local_170 = local_b0;
    if (lStack_88 != 0) {
      piVar1 = (int *)(lStack_88 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      if (iVar4 == 1) {
        cv::Mat::deallocate((Mat *)&local_c0);
      }
    }
    lStack_88 = 0;
    local_b0 = 0;
    uStack_98 = 0;
    local_a0 = 0;
    uStack_a8 = 0;
    if (0 < local_bc) {
      iVar4 = 0;
      do {
        pAVar8 = local_80 + 4;
        *(undefined4 *)local_80 = 0;
        iVar4 = iVar4 + 1;
        local_80 = pAVar8;
      } while (iVar4 < local_bc);
    }
    if (local_78 != auStack_70) {
      cv::fastFree(local_78);
    }
  }
  if ((((param_1 != (cv *)0x0) && (((uint)local_1e0 >> 3 & 0x1ff) != 0)) &&
      (*(int *)param_1 == 0x90)) &&
     ((*(long *)(param_1 + 0x58) != 0 && (iVar4 = cvGetImageCOI(param_1), 0 < iVar4)))) {
    local_50 = 0;
    local_60 = 0x2010000;
    local_58 = (Mat *)&local_1e0;
    cv::extractImageCOI(param_1,(_OutputArray *)&local_60,-1);
  }
  uVar10 = SUB84(param_4,0);
  if (this == (cv *)0x0) {
    if (param_4 == (cv *)0x0) {
                    /* try { // try from 003b5d58 to 004b5dab has its CatchHandler @ 003b5240 */
      local_270[0] = 0x1010000;
      local_268 = (Mat *)&local_1e0;
      local_260 = uVar10;
      local_25c = uVar10;
      p_Var5 = (_InputArray *)cv::noArray();
      uVar11 = cv::norm((_InputArray *)local_270,param_3,p_Var5);
    }
    else {
                    /* try { // try from 003b5c2c to 004b5c2f has its CatchHandler @ 003b6940 */
      local_248 = 0;
      local_244 = 0;
      local_258[0] = 0x1010000;
      local_50 = 0;
      local_60 = 0x1010000;
      local_250 = (Mat *)&local_1e0;
      local_58 = (Mat *)&local_180;
      uVar11 = cv::norm((_InputArray *)local_258,param_3,(_InputArray *)&local_60);
    }
    goto LAB_003b5a7c;
  }
  cv::cvarrToMat(this,(void *)0x0,true,true,0,pAVar8);
                    /* try { // try from 003b5ca0 to 004b5ca3 has its CatchHandler @ 003b6938 */
  if ((((local_60 >> 3 & 0x1ff) == 0) || (*(int *)this != 0x90)) ||
     ((*(long *)(this + 0x58) == 0 || (iVar4 = cvGetImageCOI(this), iVar4 < 1)))) {
    if (param_4 == (cv *)0x0) goto LAB_003b5ce0;
LAB_003b59b4:
    local_200 = 0;
    local_1fc = 0;
    local_210[0] = 0x1010000;
    local_1e8 = 0;
    local_1e4 = 0;
    local_1f8[0] = 0x1010000;
    local_b0 = 0;
    local_c0 = 0x1010000;
    local_208 = (Mat *)&local_1e0;
    local_1f0 = (Mat *)&local_60;
    local_b8 = (Mat *)&local_180;
    uVar11 = cv::norm((_InputArray *)local_210,(_InputArray *)local_1f8,param_3,
                      (_InputArray *)&local_c0);
  }
  else {
    local_b0 = 0;
    local_c0 = 0x2010000;
    local_b8 = (Mat *)&local_60;
    cv::extractImageCOI(this,(_OutputArray *)&local_c0,-1);
    if (param_4 != (cv *)0x0) goto LAB_003b59b4;
LAB_003b5ce0:
    local_240[0] = 0x1010000;
    local_228[0] = 0x1010000;
    local_238 = (Mat *)&local_1e0;
    local_230 = uVar10;
    local_22c = uVar10;
    local_220 = (Mat *)&local_60;
    local_218 = uVar10;
    local_214 = uVar10;
    p_Var5 = (_InputArray *)cv::noArray();
                    /* try { // try from 003b5d14 to 004b5d17 has its CatchHandler @ 003b67dc */
    uVar11 = cv::norm((_InputArray *)local_240,(_InputArray *)local_228,param_3,p_Var5);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
LAB_003b5a7c:
                    /* try { // try from 003b5a80 to 004b5a83 has its CatchHandler @ 003b6880 */
  if (lStack_148 != 0) {
    piVar1 = (int *)(lStack_148 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_180);
    }
  }
  lStack_148 = 0;
  local_170 = 0;
  uStack_158 = 0;
  local_160 = 0;
  uStack_168 = 0;
  if (0 < (int)local_180._4_4_) {
    iVar4 = 0;
    ppMVar6 = local_140;
    do {
      *(undefined4 *)ppMVar6 = 0;
      iVar4 = iVar4 + 1;
      ppMVar6 = (Mat **)((long)ppMVar6 + 4);
    } while (iVar4 < (int)local_180._4_4_);
  }
  if (local_138 != &local_130) {
    cv::fastFree(local_138);
  }
  if (lStack_1a8 != 0) {
    piVar1 = (int *)(lStack_1a8 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate((Mat *)&local_1e0);
    }
  }
  lStack_1a8 = 0;
                    /* try { // try from 003b5b1c to 004b5b1f has its CatchHandler @ 003b6800 */
  local_1d0 = 0;
  uStack_1b8 = 0;
  local_1c0 = 0;
  uStack_1c8 = 0;
  if (0 < (int)local_1e0._4_4_) {
    iVar4 = 0;
    puVar7 = local_1a0;
    do {
      *(undefined4 *)puVar7 = 0;
      iVar4 = iVar4 + 1;
      puVar7 = (undefined8 *)((long)puVar7 + 4);
    } while (iVar4 < (int)local_1e0._4_4_);
  }
  if (local_198 != (AutoBuffer *)&local_190) {
    cv::fastFree(local_198);
  }
  auVar12._8_8_ = 0;
  auVar12._0_8_ = uVar11;
  return auVar12;
}


==================================================================

### FUNC 003b5e70 (72 bytes) name=allocate

/* cv::String::allocate(unsigned long) */

undefined8 __thiscall cv::String::allocate(String *this,ulong param_1)

{
  undefined4 *puVar1;
  
  puVar1 = (undefined4 *)fastMalloc((param_1 + 4 & 0xfffffffffffffffc) + 4);
  *puVar1 = 1;
  *(ulong *)(this + 8) = param_1;
  *(undefined4 **)this = puVar1 + 1;
  *(undefined1 *)((long)(puVar1 + 1) + param_1) = 0;
  return *(undefined8 *)this;
}


==================================================================

### FUNC 003b5eb8 (52 bytes) name=deallocate

/* cv::String::deallocate() */

void __thiscall cv::String::deallocate(String *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  
  lVar5 = *(long *)this;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)this = 0;
  if (lVar5 != 0) {
    piVar4 = (int *)(lVar5 + -4);
    do {
      iVar1 = *piVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar3) {
        *piVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar1 == 1) {
      fastFree(piVar4);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 003b5eec (24 bytes) name=what

/* cv::Exception::what() const */

undefined1 * __thiscall cv::Exception::what(Exception *this)

{
  if (*(undefined1 **)(this + 8) != (undefined1 *)0x0) {
    return *(undefined1 **)(this + 8);
  }
  return &DAT_00472008;
}


==================================================================

### FUNC 003b5f04 (80 bytes) name=~Exception

/* cv::Exception::~Exception() */

void __thiscall cv::Exception::~Exception(Exception *this)

{
                    /* try { // try from 003b5f08 to 004b5f0b has its CatchHandler @ 003b6888 */
  *(undefined **)this = PTR_vtable_00501a20 + 0x10;
  String::deallocate((String *)(this + 0x40));
  String::deallocate((String *)(this + 0x30));
  String::deallocate((String *)(this + 0x20));
  String::deallocate((String *)(this + 8));
  std::exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 003b5fbc (32 bytes) name=~Exception

/* cv::Exception::~Exception() */

void __thiscall cv::Exception::~Exception(Exception *this)

{
  ~Exception(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003b5fdc (76 bytes) name=FUN_003b5fdc

undefined8 * FUN_003b5fdc(void)

{
  undefined8 *puVar1;
  
  puVar1 = operator_new(0x20);
  *puVar1 = 0xffffffff;
  *(undefined4 *)(puVar1 + 1) = 0;
  cv::ocl::Queue::Queue((Queue *)(puVar1 + 2));
  *(undefined4 *)(puVar1 + 3) = 0xffffffff;
  *(undefined4 *)((long)puVar1 + 0x1c) = 0xffffffff;
  return puVar1;
}


==================================================================

### FUNC 003b603c (52 bytes) name=FUN_003b603c

void FUN_003b603c(undefined8 param_1,void *param_2)

{
  if (param_2 != (void *)0x0) {
    cv::ocl::Queue::~Queue((Queue *)((long)param_2 + 0x10));
    operator_delete(param_2);
    return;
  }
  return;
}


==================================================================

### FUNC 003b6070 (64 bytes) name=Exception

/* cv::Exception::Exception() */

void __thiscall cv::Exception::Exception(Exception *this)

{
  *(undefined **)this = PTR_vtable_00501a20 + 0x10;
                    /* try { // try from 003b6084 to 004b60bb has its CatchHandler @ 003b6920 */
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined4 *)(this + 0x50) = 0;
  return;
}


==================================================================

### FUNC 003b60b0 (20 bytes) name=checkHardwareSupport

/* cv::checkHardwareSupport(int) */

undefined1 cv::checkHardwareSupport(int param_1)

{
  return PTR_DAT_005093f8[(long)param_1 + 4];
}


==================================================================

### FUNC 003b60c4 (12 bytes) name=useOptimized

/* cv::useOptimized() */

undefined1 cv::useOptimized(void)

{
  return DAT_005093f0;
}


==================================================================

### FUNC 003b60d0 (52 bytes) name=getTickCount

/* cv::getTickCount() */

long cv::getTickCount(void)

{
  timespec local_10;
  
  clock_gettime(1,&local_10);
  return local_10.tv_nsec + local_10.tv_sec * 1000000000;
}


==================================================================

### FUNC 003b6108 (8 bytes) name=getTickFrequency

/* cv::getTickFrequency() */

undefined1  [16] cv::getTickFrequency(void)

{
  undefined1 auVar1 [16];
  
  auVar1._8_8_ = 0;
  auVar1._0_8_ = DAT_003b6110;
  return auVar1;
}


==================================================================

### FUNC 003b6118 (4 bytes) name=getCPUTickCount

/* cv::getCPUTickCount() */

void cv::getCPUTickCount(void)

{
  (*(code *)PTR_getTickCount_004fff48)();
  return;
}


==================================================================

### FUNC 003b611c (156 bytes) name=getBuildInformation

/* cv::getBuildInformation() */

undefined8 * cv::getBuildInformation(void)

{
  int iVar1;
  void *__dest;
  ulong uVar2;
  
  uVar2 = DAT_00532a48 & 1;
                    /* try { // try from 003b6158 to 004b615b has its CatchHandler @ 003b68a0 */
  if (((DAT_00532a48 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00532a48), iVar1 != 0)) {
    DAT_00532cb0 = uVar2;
    DAT_00532cb8 = uVar2;
    __dest = (void *)String::allocate((String *)&DAT_00532cb0,0x1a5d);
    memcpy(__dest,&DAT_00473b60,0x1a5d);
    __cxa_guard_release(&DAT_00532a48);
    __cxa_atexit(PTR__String_005018a0,&DAT_00532cb0,&DAT_00502000);
    return &DAT_00532cb0;
  }
  return &DAT_00532cb0;
}


==================================================================

### FUNC 003b61cc (556 bytes) name=format

/* cv::format(char const*, ...) */

String * cv::format(char *param_1,...)

{
  int iVar1;
  int iVar2;
  char *pcVar3;
  void *__dest;
  undefined8 in_x1;
  ulong uVar4;
  undefined8 in_x2;
  undefined8 in_x3;
  undefined8 in_x4;
  undefined8 in_x5;
  undefined8 in_x6;
  undefined8 in_x7;
  String *in_x8;
  int iVar5;
  ulong uVar6;
  undefined8 in_d0;
  undefined8 in_d1;
  undefined8 in_d2;
  undefined8 in_d3;
  undefined8 in_d4;
  undefined8 in_d5;
  undefined8 in_d6;
  undefined8 in_d7;
  undefined1 *local_510;
  undefined1 *puStack_508;
  undefined1 *local_500;
  undefined8 uStack_4f8;
  char *local_4d0;
  ulong local_4c8;
  char local_4c0 [1024];
  undefined8 local_c0;
  undefined8 local_b0;
  undefined8 local_a0;
  undefined8 local_90;
  undefined8 local_80;
  undefined8 local_70;
  undefined8 local_60;
  undefined8 local_50;
  undefined1 auStack_40 [8];
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003b61cc to 004b61cf has its CatchHandler @ 003b6920 */
  local_4c8 = 0x400;
                    /* try { // try from 003b6260 to 004b6263 has its CatchHandler @ 003b6930 */
  pcVar3 = local_4c0;
  uVar6 = local_4c8;
  local_c0 = in_d0;
  local_b0 = in_d1;
  local_a0 = in_d2;
  local_90 = in_d3;
  local_80 = in_d4;
  local_70 = in_d5;
  local_60 = in_d6;
  local_50 = in_d7;
  local_38 = in_x1;
  local_30 = in_x2;
  local_28 = in_x3;
  local_20 = in_x4;
  local_18 = in_x5;
  local_10 = in_x6;
  local_8 = in_x7;
  while( true ) {
    local_4c8 = uVar6;
    local_4d0 = pcVar3;
    uStack_4f8 = 0xffffff80ffffffc8;
    iVar5 = (int)local_4c8;
    local_510 = (undefined1 *)register0x00000008;
    puStack_508 = (undefined1 *)register0x00000008;
    local_500 = auStack_40;
    iVar2 = vsnprintf(local_4d0,(long)iVar5,param_1,&local_510);
    if ((iVar2 < iVar5) && (-1 < iVar2)) break;
                    /* try { // try from 003b62d4 to 004b62d7 has its CatchHandler @ 003b6928 */
    iVar1 = iVar2 + 1;
    if (iVar2 + 1 < iVar5 * 2) {
      iVar1 = iVar5 * 2;
    }
    uVar6 = (ulong)iVar1;
    pcVar3 = local_4d0;
    if (local_4c8 < uVar6) {
      pcVar3 = local_4c0;
      if (0x400 < uVar6) {
        pcVar3 = operator_new__(uVar6);
      }
      if (local_4d0 == pcVar3) goto LAB_003b633c;
      if (local_4c8 == 0) goto LAB_003b633c;
      uVar4 = 0;
      do {
        pcVar3[uVar4] = local_4d0[uVar4];
        uVar4 = uVar4 + 1;
      } while (uVar4 != local_4c8);
      pcVar3[local_4c8] = '\0';
      while (local_4c8 = local_4c8 + 1, uVar6 != local_4c8) {
LAB_003b633c:
        pcVar3[local_4c8] = '\0';
                    /* try { // try from 003b6348 to 004b634b has its CatchHandler @ 003b67fc */
      }
      if ((local_4d0 != local_4c0) && (local_4d0 != (char *)0x0)) {
        operator_delete__(local_4d0);
      }
    }
  }
  *(undefined8 *)in_x8 = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  if (iVar2 != 0) {
    __dest = (void *)String::allocate(in_x8,(long)iVar2);
    memcpy(__dest,local_4d0,(long)iVar2);
  }
  if ((local_4d0 != local_4c0) && (local_4d0 != (char *)0x0)) {
    operator_delete__(local_4d0);
  }
  return in_x8;
}


==================================================================

### FUNC 003b6418 (312 bytes) name=formatMessage

/* cv::Exception::formatMessage() */

void __thiscall cv::Exception::formatMessage(Exception *this)

{
  String *this_00;
  char cVar1;
  bool bVar2;
  int *piVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  undefined1 *puVar6;
  long local_10;
  undefined8 local_8;
  
  this_00 = (String *)(this + 8);
  puVar4 = *(undefined1 **)(this + 0x40);
  if (*(long *)(this + 0x38) == 0) {
    if (puVar4 == (undefined1 *)0x0) {
      puVar4 = &DAT_00472008;
    }
    puVar5 = *(undefined1 **)(this + 0x20);
    if (puVar5 == (undefined1 *)0x0) {
      puVar5 = &DAT_00472008;
    }
    format("%s:%d: error: (%d) %s\n",(String *)&local_10,puVar4,(ulong)*(uint *)(this + 0x50),
           (ulong)*(uint *)(this + 0x18),puVar5);
    if (this_00 == (String *)&local_10) goto LAB_003b64a4;
    String::deallocate(this_00);
    if (local_10 != 0) {
      piVar3 = (int *)(local_10 + -4);
      do {
                    /* try { // try from 003b6508 to 004b652b has its CatchHandler @ 003b6948 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  else {
    if (puVar4 == (undefined1 *)0x0) {
      puVar4 = &DAT_00472008;
    }
    puVar5 = *(undefined1 **)(this + 0x20);
    if (puVar5 == (undefined1 *)0x0) {
                    /* try { // try from 003b6538 to 004b653b has its CatchHandler @ 003b67fc */
      puVar5 = &DAT_00472008;
    }
    puVar6 = *(undefined1 **)(this + 0x30);
                    /* try { // try from 003b6450 to 004b6453 has its CatchHandler @ 003b6880 */
    if (puVar6 == (undefined1 *)0x0) {
                    /* try { // try from 003b6544 to 004b6547 has its CatchHandler @ 003b6928 */
      puVar6 = &DAT_00472008;
    }
                    /* try { // try from 003b645c to 004b645f has its CatchHandler @ 003b6938 */
    format("%s:%d: error: (%d) %s in function %s\n",(String *)&local_10,puVar4,
           (ulong)*(uint *)(this + 0x50),(ulong)*(uint *)(this + 0x18),puVar5,puVar6);
                    /* try { // try from 003b6468 to 004b646b has its CatchHandler @ 003b6940 */
    if (this_00 == (String *)&local_10) goto LAB_003b64a4;
                    /* try { // try from 003b6474 to 004b6477 has its CatchHandler @ 003b67dc */
    String::deallocate(this_00);
    if (local_10 != 0) {
      piVar3 = (int *)(local_10 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  *(long *)(this + 8) = local_10;
                    /* try { // try from 003b649c to 004b649f has its CatchHandler @ 003b6948 */
  *(undefined8 *)(this + 0x10) = local_8;
LAB_003b64a4:
  String::deallocate((String *)&local_10);
                    /* try { // try from 003b64b0 to 004b64b3 has its CatchHandler @ 003b675c */
  return;
}


==================================================================

### FUNC 003b6578 (224 bytes) name=Exception

/* cv::Exception::Exception(int, cv::String const&, cv::String const&, cv::String const&, int) */

void __thiscall
cv::Exception::Exception
          (Exception *this,int param_1,String *param_2,String *param_3,String *param_4,int param_5)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  int *piVar4;
  
  *(undefined **)this = PTR_vtable_00501a20 + 0x10;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  lVar3 = *(long *)param_2;
  *(long *)(this + 0x20) = lVar3;
  *(int *)(this + 0x18) = param_1;
  *(undefined8 *)(this + 0x28) = *(undefined8 *)(param_2 + 8);
  if (lVar3 != 0) {
    piVar4 = (int *)(lVar3 + -4);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = *piVar4 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  lVar3 = *(long *)param_3;
  *(long *)(this + 0x30) = lVar3;
  *(undefined8 *)(this + 0x38) = *(undefined8 *)(param_3 + 8);
  if (lVar3 != 0) {
    piVar4 = (int *)(lVar3 + -4);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = *piVar4 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  lVar3 = *(long *)param_4;
  *(long *)(this + 0x40) = lVar3;
  *(undefined8 *)(this + 0x48) = *(undefined8 *)(param_4 + 8);
  if (lVar3 != 0) {
    piVar4 = (int *)(lVar3 + -4);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = *piVar4 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  *(int *)(this + 0x50) = param_5;
  formatMessage(this);
  return;
}


==================================================================

### FUNC 003b668c (948 bytes) name=tempfile

/* cv::tempfile(char const*) */

void __thiscall cv::tempfile(cv *this,char *param_1)

{
  char cVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int __fd;
  char *pcVar5;
  size_t sVar6;
  void *pvVar7;
  int *piVar8;
  String *in_x8;
  char *local_68;
  size_t local_60;
  char *local_58;
  size_t local_50;
  char *local_48;
  size_t local_40;
  void *local_38;
  size_t local_30;
  char local_28 [8];
  char acStack_20 [8];
  char local_18 [8];
  char acStack_10 [8];
  char local_8 [4];
  char local_4;
  
  local_68 = (char *)0x0;
  local_60 = 0;
  pcVar5 = getenv("OPENCV_TEMP_PATH");
  local_8[0] = s__data_local_tmp___opencv_temp_XX_00475620[0x20];
  local_8[1] = s__data_local_tmp___opencv_temp_XX_00475620[0x21];
  local_8[2] = s__data_local_tmp___opencv_temp_XX_00475620[0x22];
  local_8[3] = s__data_local_tmp___opencv_temp_XX_00475620[0x23];
  local_4 = s__data_local_tmp___opencv_temp_XX_00475620[0x24];
  local_28[0] = s__data_local_tmp___opencv_temp_XX_00475620[0];
  local_28[1] = s__data_local_tmp___opencv_temp_XX_00475620[1];
  local_28[2] = s__data_local_tmp___opencv_temp_XX_00475620[2];
  local_28[3] = s__data_local_tmp___opencv_temp_XX_00475620[3];
  local_28[4] = s__data_local_tmp___opencv_temp_XX_00475620[4];
  local_28[5] = s__data_local_tmp___opencv_temp_XX_00475620[5];
  local_28[6] = s__data_local_tmp___opencv_temp_XX_00475620[6];
  local_28[7] = s__data_local_tmp___opencv_temp_XX_00475620[7];
  acStack_20[0] = s__data_local_tmp___opencv_temp_XX_00475620[8];
  acStack_20[1] = s__data_local_tmp___opencv_temp_XX_00475620[9];
  acStack_20[2] = s__data_local_tmp___opencv_temp_XX_00475620[10];
  acStack_20[3] = s__data_local_tmp___opencv_temp_XX_00475620[0xb];
  acStack_20[4] = s__data_local_tmp___opencv_temp_XX_00475620[0xc];
  acStack_20[5] = s__data_local_tmp___opencv_temp_XX_00475620[0xd];
  acStack_20[6] = s__data_local_tmp___opencv_temp_XX_00475620[0xe];
  acStack_20[7] = s__data_local_tmp___opencv_temp_XX_00475620[0xf];
  local_18[0] = s__data_local_tmp___opencv_temp_XX_00475620[0x10];
  local_18[1] = s__data_local_tmp___opencv_temp_XX_00475620[0x11];
  local_18[2] = s__data_local_tmp___opencv_temp_XX_00475620[0x12];
  local_18[3] = s__data_local_tmp___opencv_temp_XX_00475620[0x13];
  local_18[4] = s__data_local_tmp___opencv_temp_XX_00475620[0x14];
  local_18[5] = s__data_local_tmp___opencv_temp_XX_00475620[0x15];
  local_18[6] = s__data_local_tmp___opencv_temp_XX_00475620[0x16];
  local_18[7] = s__data_local_tmp___opencv_temp_XX_00475620[0x17];
  acStack_10[0] = s__data_local_tmp___opencv_temp_XX_00475620[0x18];
  acStack_10[1] = s__data_local_tmp___opencv_temp_XX_00475620[0x19];
  acStack_10[2] = s__data_local_tmp___opencv_temp_XX_00475620[0x1a];
  acStack_10[3] = s__data_local_tmp___opencv_temp_XX_00475620[0x1b];
  acStack_10[4] = s__data_local_tmp___opencv_temp_XX_00475620[0x1c];
  acStack_10[5] = s__data_local_tmp___opencv_temp_XX_00475620[0x1d];
  acStack_10[6] = s__data_local_tmp___opencv_temp_XX_00475620[0x1e];
  acStack_10[7] = s__data_local_tmp___opencv_temp_XX_00475620[0x1f];
  if ((pcVar5 == (char *)0x0) || (*pcVar5 == '\0')) {
    String::deallocate((String *)&local_68);
    sVar6 = strlen(local_28);
    pvVar7 = (void *)String::allocate((String *)&local_68,sVar6);
    memcpy(pvVar7,local_28,sVar6);
  }
  else {
    String::deallocate((String *)&local_68);
    sVar6 = strlen(pcVar5);
    pvVar7 = (void *)String::allocate((String *)&local_68,sVar6);
    memcpy(pvVar7,pcVar5,sVar6);
                    /* catch() { ... } // from try @ 003b5a80 with catch @ 003b6880
                       catch() { ... } // from try @ 003b5b90 with catch @ 003b6880
                       catch() { ... } // from try @ 003b6450 with catch @ 003b6880 */
    if ((local_68[local_60 - 1] != '\\') && (local_68[local_60 - 1] != '/')) {
                    /* catch() { ... } // from try @ 003b52bc with catch @ 003b6888
                       catch() { ... } // from try @ 003b5300 with catch @ 003b6888
                       catch() { ... } // from try @ 003b539c with catch @ 003b6888
                       catch() { ... } // from try @ 003b5420 with catch @ 003b6888
                       catch() { ... } // from try @ 003b58d4 with catch @ 003b6888
                       catch() { ... } // from try @ 003b5df0 with catch @ 003b6888
                       catch() { ... } // from try @ 003b5e30 with catch @ 003b6888
                       catch() { ... } // from try @ 003b5f08 with catch @ 003b6888 */
                    /* catch() { ... } // from try @ 003b5418 with catch @ 003b6890 */
      local_58 = (char *)0x0;
      local_50 = 0;
      String::allocate((String *)&local_58,local_60 + 1);
                    /* catch() { ... } // from try @ 003b6158 with catch @ 003b68a0 */
      memcpy(local_58,local_68,local_60);
      local_58[local_60] = DAT_00475618;
      String::deallocate((String *)&local_68);
      if (local_58 != (char *)0x0) {
        piVar8 = (int *)(local_58 + -4);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
          if (bVar2) {
            *piVar8 = *piVar8 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      local_68 = local_58;
      local_60 = local_50;
      String::deallocate((String *)&local_58);
    }
    local_48 = (char *)0x0;
    local_40 = 0;
    String::allocate((String *)&local_48,local_60 + 0x14);
                    /* catch() { ... } // from try @ 003b6084 with catch @ 003b6920
                       catch() { ... } // from try @ 003b61cc with catch @ 003b6920
                       catch() { ... } // from try @ 003b655c with catch @ 003b6920 */
    memcpy(local_48,local_68,local_60);
    uVar4 = s__data_local_tmp___opencv_temp_XX_00475620._24_8_;
    uVar3 = s__data_local_tmp___opencv_temp_XX_00475620._16_8_;
                    /* catch() { ... } // from try @ 003b62d4 with catch @ 003b6928
                       catch() { ... } // from try @ 003b6544 with catch @ 003b6928 */
                    /* catch() { ... } // from try @ 003b6260 with catch @ 003b6930
                       catch() { ... } // from try @ 003b6550 with catch @ 003b6930 */
                    /* catch() { ... } // from try @ 003b5ca0 with catch @ 003b6938
                       catch() { ... } // from try @ 003b645c with catch @ 003b6938 */
    pcVar5 = local_48 + local_60;
                    /* catch() { ... } // from try @ 003b5c2c with catch @ 003b6940
                       catch() { ... } // from try @ 003b6468 with catch @ 003b6940 */
                    /* catch() { ... } // from try @ 003b56ac with catch @ 003b6948
                       catch() { ... } // from try @ 003b649c with catch @ 003b6948
                       catch() { ... } // from try @ 003b6508 with catch @ 003b6948 */
    *(undefined4 *)(pcVar5 + 0x10) = s__data_local_tmp___opencv_temp_XX_00475620._32_4_;
    *(undefined8 *)pcVar5 = uVar3;
    *(undefined8 *)(pcVar5 + 8) = uVar4;
    String::deallocate((String *)&local_68);
    if (local_48 != (char *)0x0) {
      piVar8 = (int *)(local_48 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    local_68 = local_48;
    local_60 = local_40;
    String::deallocate((String *)&local_48);
  }
  pcVar5 = local_68;
  if (local_68 == (char *)0x0) {
    pcVar5 = "";
  }
  __fd = mkstemp(pcVar5);
  if (__fd == -1) {
    *(undefined8 *)in_x8 = 0;
    *(undefined8 *)(in_x8 + 8) = 0;
    String::deallocate((String *)&local_68);
    return;
  }
  close(__fd);
  pcVar5 = local_68;
  if (local_68 == (char *)0x0) {
    pcVar5 = "";
  }
  remove(pcVar5);
  if (this == (cv *)0x0) {
    *(char **)in_x8 = local_68;
    *(size_t *)(in_x8 + 8) = local_60;
    if (local_68 != (char *)0x0) {
      piVar8 = (int *)(local_68 + -4);
      do {
                    /* try { // try from 003b6a34 to 004b6a37 has its CatchHandler @ 003b6c34 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar8,0x10);
        if (bVar2) {
          *piVar8 = *piVar8 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  else {
    if (*this == (cv)0x2e) {
      *(undefined8 *)in_x8 = 0;
      *(undefined8 *)(in_x8 + 8) = 0;
      sVar6 = strlen((char *)this);
                    /* catch() { ... } // from try @ 003b69e8 with catch @ 003b69b0
                       catch() { ... } // from try @ 003b6bcc with catch @ 003b69b0
                       catch() { ... } // from try @ 003b6c78 with catch @ 003b69b0 */
      String::allocate(in_x8,sVar6 + local_60);
      memcpy(*(void **)in_x8,local_68,local_60);
      memcpy((void *)(*(long *)in_x8 + local_60),this,sVar6);
                    /* try { // try from 003b69e8 to 004b69eb has its CatchHandler @ 003b69b0 */
      String::deallocate((String *)&local_68);
                    /* try { // try from 003b6a04 to 004b6a07 has its CatchHandler @ 003b6c7c */
      return;
    }
                    /* catch() { ... } // from try @ 003b57bc with catch @ 003b675c
                       catch() { ... } // from try @ 003b64b0 with catch @ 003b675c */
    local_38 = (void *)0x0;
    local_30 = 0;
    String::allocate((String *)&local_38,local_60 + 1);
    memcpy(local_38,local_68,local_60);
    *(char *)((long)local_38 + local_60) = s_Invalid_closing_tag_for_<_xml____00471d40[0x20];
    *(undefined8 *)in_x8 = 0;
    *(undefined8 *)(in_x8 + 8) = 0;
    sVar6 = strlen((char *)this);
                    /* try { // try from 003b67b8 to 004b67bb has its CatchHandler @ 003b5240 */
                    /* catch() { ... } // from try @ 003b52f8 with catch @ 003b67bc */
    String::allocate(in_x8,sVar6 + local_30);
                    /* catch() { ... } // from try @ 003b5394 with catch @ 003b67cc */
    memcpy(*(void **)in_x8,local_38,local_30);
                    /* catch() { ... } // from try @ 003b5d14 with catch @ 003b67dc
                       catch() { ... } // from try @ 003b6474 with catch @ 003b67dc */
    memcpy((void *)(*(long *)in_x8 + local_30),this,sVar6);
    String::deallocate((String *)&local_38);
  }
  String::deallocate((String *)&local_68);
                    /* catch() { ... } // from try @ 003b6348 with catch @ 003b67fc
                       catch() { ... } // from try @ 003b6538 with catch @ 003b67fc */
                    /* catch() { ... } // from try @ 003b5b1c with catch @ 003b6800 */
  return;
}


==================================================================

### FUNC 003b6ad4 (20 bytes) name=setBreakOnError

/* cv::setBreakOnError(bool) */

undefined1 cv::setBreakOnError(bool param_1)

{
  undefined1 uVar1;
  
  uVar1 = DAT_00532a44;
  DAT_00532a44 = param_1;
  return uVar1;
}


==================================================================

### FUNC 003b6ae8 (40 bytes) name=redirectError

/* cv::redirectError(int (*)(int, char const*, char const*, char const*, int, void*), void*, void**)
    */

undefined8
cv::redirectError(_func_int_int_char_ptr_char_ptr_char_ptr_int_void_ptr *param_1,void *param_2,
                 void **param_3)

{
  undefined8 uVar1;
  
  if (param_3 != (void **)0x0) {
    *param_3 = DAT_00532a68;
  }
  DAT_00532a68 = param_2;
  uVar1 = DAT_00532a78;
  DAT_00532a78 = param_1;
  return uVar1;
}


==================================================================

### FUNC 003b6b10 (20 bytes) name=cvCheckHardwareSupport

undefined1 cvCheckHardwareSupport(int param_1)

{
  return PTR_DAT_005093f8[(long)param_1 + 4];
}


==================================================================

### FUNC 003b6b24 (4 bytes) name=cvGetTickCount

void cv::cvGetTickCount(void)

{
  (*(code *)PTR_getTickCount_004fff48)();
  return;
}


==================================================================

### FUNC 003b6b28 (32 bytes) name=cvGetTickFrequency

undefined1  [16] cvGetTickFrequency(void)

{
  double dVar1;
  undefined1 auVar2 [16];
  
  dVar1 = (double)cv::getTickFrequency();
  auVar2._0_8_ = dVar1 * DAT_003b6b48;
  auVar2._8_8_ = 0;
  return auVar2;
}


==================================================================

### FUNC 003b6b50 (4 bytes) name=cvRedirectError

void cv::cvRedirectError(_func_int_int_char_ptr_char_ptr_char_ptr_int_void_ptr *param_1,
                        void *param_2,void **param_3)

{
  (*(code *)PTR_redirectError_00500cd0)();
  return;
}


==================================================================

### FUNC 003b6b54 (8 bytes) name=cvNulDevReport

undefined8 cvNulDevReport(void)

{
                    /* try { // try from 003b6b58 to 004b6b5b has its CatchHandler @ 003b6c7c */
  return 0;
}


==================================================================

### FUNC 003b6b5c (8 bytes) name=cvStdErrReport

undefined8 cvStdErrReport(void)

{
  return 0;
}


==================================================================

### FUNC 003b6b64 (8 bytes) name=cvGuiBoxReport

undefined8 cvGuiBoxReport(void)

{
  return 0;
}


==================================================================

### FUNC 003b6b6c (8 bytes) name=cvGetErrInfo

undefined8 cvGetErrInfo(void)

{
  return 0;
}


==================================================================

### FUNC 003b6b74 (496 bytes) name=cvErrorStr

char * cvErrorStr(uint param_1)

{
  char *pcVar1;
  char *pcVar2;
  
                    /* try { // try from 003b6bcc to 004b6bf3 has its CatchHandler @ 003b69b0 */
  switch(param_1) {
  case 0:
    pcVar1 = "No Error";
    break;
  case 0xffffff25:
    pcVar1 = "OpenGL API call";
    break;
  case 0xffffff26:
    pcVar1 = "No OpenGL support";
    break;
  case 0xffffff27:
                    /* catch() { ... } // from try @ 003b6a88 with catch @ 003b6c84 */
    pcVar1 = "Gpu API call";
    break;
  case 0xffffff28:
                    /* try { // try from 003b6c78 to 004b6c7b has its CatchHandler @ 003b69b0 */
    pcVar1 = "No CUDA support";
                    /* catch() { ... } // from try @ 003b6a04 with catch @ 003b6c7c
                       catch() { ... } // from try @ 003b6b58 with catch @ 003b6c7c
                       catch() { ... } // from try @ 003b6bfc with catch @ 003b6c7c */
    break;
  case 0xffffff29:
    pcVar1 = "Assertion failed";
    break;
  case 0xffffff2a:
    pcVar1 = "Memory block has been corrupted";
    break;
  case 0xffffff2b:
    pcVar1 = "The function/feature is not implemented";
    break;
  case 0xffffff2c:
    pcVar1 = "Parsing error";
    break;
  case 0xffffff2d:
    pcVar1 = "One of arguments\' values is out of range";
    break;
  case 0xffffff2e:
    pcVar1 = "Unsupported format or combination of formats";
                    /* catch() { ... } // from try @ 003b6a34 with catch @ 003b6c34
                       catch() { ... } // from try @ 003b6a90 with catch @ 003b6c34 */
    break;
  case 0xffffff2f:
    pcVar1 = "Sizes of input arguments do not match";
    break;
  case 0xffffff30:
    pcVar1 = "Bad type of mask argument";
    break;
  case 0xffffff31:
    pcVar1 = "Bad parameter of type CvPoint";
    break;
  case 0xffffff32:
                    /* try { // try from 003b6bfc to 004b6bff has its CatchHandler @ 003b6c7c */
    pcVar1 = "Bad flag (parameter or structure field)";
    break;
  case 0xffffff33:
    pcVar1 = "Formats of input arguments do not match";
    break;
  case 0xffffff34:
    pcVar1 = "Requested object was not found";
    break;
  case 0xffffff35:
    pcVar1 = "Inplace operation is not supported";
    break;
  case 0xffffff36:
    pcVar1 = "Division by zero occured";
    break;
  case 0xffffff37:
    pcVar1 = "Incorrect size of input array";
    break;
  default:
    if ((int)param_1 < 0) {
      pcVar2 = "error";
    }
    else {
      pcVar2 = "status";
    }
    pcVar1 = &DAT_00532bb0;
    sprintf(&DAT_00532bb0,"Unknown %s code %d",pcVar2,(ulong)param_1);
    break;
  case 0xffffffe5:
    pcVar1 = "Null pointer";
    break;
  case 0xffffffe8:
    pcVar1 = "Input COI is not supported";
    break;
  case 0xffffffef:
    pcVar1 = "Input image depth is not supported by function";
    break;
  case 0xfffffff1:
    pcVar1 = "Bad number of channels";
    break;
  case 0xfffffff3:
    pcVar1 = "Image step is wrong";
    break;
  case 0xfffffff8:
    pcVar1 = "Autotrace call";
    break;
  case 0xfffffff9:
    pcVar1 = "Iterations do not converge";
    break;
  case 0xfffffffb:
    pcVar1 = "Bad argument";
    break;
  case 0xfffffffc:
    pcVar1 = "Insufficient memory";
    break;
  case 0xfffffffd:
    pcVar1 = "Internal error";
    break;
  case 0xfffffffe:
    pcVar1 = "Unspecified error";
    break;
  case 0xffffffff:
                    /* catch() { ... } // from try @ 003b6da4 with catch @ 003b6d50
                       catch() { ... } // from try @ 003b7c00 with catch @ 003b6d50
                       catch() { ... } // from try @ 003b7e24 with catch @ 003b6d50
                       catch() { ... } // from try @ 003b814c with catch @ 003b6d50 */
    pcVar1 = "Backtrace";
  }
  return pcVar1;
}


==================================================================

### FUNC 003b6d64 (560 bytes) name=error

/* cv::error(cv::Exception const&) */

void cv::error(Exception *param_1)

{
  FILE *__stream;
  char cVar1;
  bool bVar2;
  code *pcVar3;
  long *plVar4;
  undefined8 uVar5;
  undefined1 *puVar6;
  undefined1 *puVar7;
  long lVar8;
  int *piVar9;
  undefined1 *puVar10;
  long lVar11;
  char acStack_10000 [65536];
  
  if (DAT_00532a78 == (code *)0x0) {
    uVar5 = cvErrorStr(*(undefined4 *)(param_1 + 0x18));
    puVar6 = *(undefined1 **)(param_1 + 0x20);
    if (puVar6 == (undefined1 *)0x0) {
      puVar6 = &DAT_00472008;
    }
    if (*(long *)(param_1 + 0x38) == 0) {
      puVar7 = &LAB_004759f0;
    }
    else {
      puVar7 = *(undefined1 **)(param_1 + 0x30);
      if (puVar7 == (undefined1 *)0x0) {
        puVar7 = &DAT_00472008;
      }
    }
    puVar10 = *(undefined1 **)(param_1 + 0x40);
    if (puVar10 == (undefined1 *)0x0) {
      puVar10 = &DAT_00472008;
    }
    sprintf(acStack_10000,"OpenCV Error: %s (%s) in %s, file %s, line %d",uVar5,puVar6,puVar7,
            puVar10,(ulong)*(uint *)(param_1 + 0x50));
    __stream = (FILE *)(PTR___sF_00501a80 + 0x130);
    fprintf(__stream,"%s\n",acStack_10000);
    fflush(__stream);
    __android_log_print(6,"cv::error()","%s",acStack_10000);
    goto LAB_003b6db0;
  }
  puVar6 = *(undefined1 **)(param_1 + 0x30);
  if (puVar6 == (undefined1 *)0x0) {
                    /* try { // try from 003b6eb0 to 004b6eb3 has its CatchHandler @ 003b8214 */
    puVar7 = *(undefined1 **)(param_1 + 0x20);
                    /* try { // try from 003b6eb8 to 004b6ebb has its CatchHandler @ 003b8248 */
    puVar6 = &DAT_00472008;
    if (puVar7 != (undefined1 *)0x0) goto LAB_003b6d98;
LAB_003b6ec0:
    puVar10 = *(undefined1 **)(param_1 + 0x40);
    puVar7 = &DAT_00472008;
  }
  else {
    puVar7 = *(undefined1 **)(param_1 + 0x20);
    if (puVar7 == (undefined1 *)0x0) goto LAB_003b6ec0;
LAB_003b6d98:
    puVar10 = *(undefined1 **)(param_1 + 0x40);
  }
  if (puVar10 == (undefined1 *)0x0) {
    puVar10 = &DAT_00472008;
  }
                    /* try { // try from 003b6da4 to 004b6da7 has its CatchHandler @ 003b6d50 */
  (*DAT_00532a78)(*(undefined4 *)(param_1 + 0x18),puVar6,puVar7,puVar10,
                  *(undefined4 *)(param_1 + 0x50),DAT_00532a68);
LAB_003b6db0:
  if (DAT_00532a44 == '\0') {
    plVar4 = (long *)__cxa_allocate_exception(0x58);
    lVar8 = *(long *)(param_1 + 8);
    lVar11 = *(long *)(param_1 + 0x10);
    *plVar4 = (long)(PTR_vtable_00501a20 + 0x10);
    plVar4[1] = lVar8;
    plVar4[2] = lVar11;
    if (lVar8 != 0) {
      piVar9 = (int *)(lVar8 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    lVar8 = *(long *)(param_1 + 0x20);
    lVar11 = *(long *)(param_1 + 0x28);
    *(undefined4 *)(plVar4 + 3) = *(undefined4 *)(param_1 + 0x18);
    plVar4[4] = lVar8;
    plVar4[5] = lVar11;
    if (lVar8 != 0) {
      piVar9 = (int *)(lVar8 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    lVar8 = *(long *)(param_1 + 0x30);
    lVar11 = *(long *)(param_1 + 0x38);
    plVar4[6] = lVar8;
    plVar4[7] = lVar11;
    if (lVar8 != 0) {
      piVar9 = (int *)(lVar8 + -4);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    lVar8 = *(long *)(param_1 + 0x40);
    lVar11 = *(long *)(param_1 + 0x48);
    plVar4[8] = lVar8;
    plVar4[9] = lVar11;
    if (lVar8 != 0) {
      piVar9 = (int *)(lVar8 + -4);
      do {
                    /* try { // try from 003b6e80 to 004b6e83 has its CatchHandler @ 003b8248 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar9,0x10);
        if (bVar2) {
          *piVar9 = *piVar9 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    *(undefined4 *)(plVar4 + 10) = *(undefined4 *)(param_1 + 0x50);
                    /* WARNING: Subroutine does not return */
    __cxa_throw(plVar4,PTR_typeinfo_005019d8,PTR__Exception_005019d0);
  }
                    /* try { // try from 003b6dc0 to 004b6dc3 has its CatchHandler @ 003b8268 */
  uRam0000000000000000 = 0;
                    /* WARNING: Does not return */
  pcVar3 = (code *)SoftwareBreakpoint(1000,0x3b6dc8);
  (*pcVar3)();
}


==================================================================

### FUNC 003b6f94 (236 bytes) name=error

/* cv::error(int, cv::String const&, char const*, char const*, int) */

void cv::error(int param_1,String *param_2,char *param_3,char *param_4,int param_5)

{
  size_t sVar1;
  void *pvVar2;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  Exception aEStack_58 [88];
  
  local_78 = 0;
  local_70 = 0;
  if (param_3 != (char *)0x0) {
                    /* try { // try from 003b6fd0 to 004b7163 has its CatchHandler @ 003b8250 */
    sVar1 = strlen(param_3);
    pvVar2 = (void *)String::allocate((String *)&local_78,sVar1);
    memcpy(pvVar2,param_3,sVar1);
  }
  local_68 = 0;
  local_60 = 0;
  if (param_4 != (char *)0x0) {
    sVar1 = strlen(param_4);
    pvVar2 = (void *)String::allocate((String *)&local_68,sVar1);
    memcpy(pvVar2,param_4,sVar1);
  }
  Exception::Exception(aEStack_58,param_1,param_2,(String *)&local_78,(String *)&local_68,param_5);
  error(aEStack_58);
  Exception::~Exception(aEStack_58);
  String::deallocate((String *)&local_68);
  String::deallocate((String *)&local_78);
  return;
}


==================================================================

### FUNC 003b70b8 (160 bytes) name=FUN_003b70b8

void FUN_003b70b8(void)

{
  undefined4 uVar1;
  int iVar2;
  char *pcVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar2 = pthread_key_create(&DAT_00532a40,FUN_003b74b4);
  if (iVar2 == 0) {
    return;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar3 = (char *)cv::String::allocate((String *)&local_10,0xc);
  uVar1 = s_errcode____0_00475a50._8_4_;
  *(undefined8 *)pcVar3 = s_errcode____0_00475a50._0_8_;
  *(undefined4 *)(pcVar3 + 8) = uVar1;
  cv::error(-0xd7,(String *)&local_10,"void cv::makeKey()",
            "/builds/master_pack-android/opencv/modules/core/src/system.cpp",0x415);
  cv::String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003b716c (8 bytes) name=cvGetErrMode

undefined8 cvGetErrMode(void)

{
  return 0;
}


==================================================================

### FUNC 003b7174 (8 bytes) name=cvSetErrMode

undefined8 cvSetErrMode(void)

{
  return 0;
}


==================================================================

### FUNC 003b717c (8 bytes) name=cvGetErrStatus

undefined8 cvGetErrStatus(void)

{
  return 0;
}


==================================================================

### FUNC 003b7184 (4 bytes) name=cvSetErrStatus

void cvSetErrStatus(void)

{
  return;
}


==================================================================

### FUNC 003b7188 (296 bytes) name=cvError

void cvError(int param_1,char *param_2,char *param_3,char *param_4,int param_5)

{
  size_t sVar1;
  void *pvVar2;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  Exception aEStack_58 [88];
  
                    /* try { // try from 003b7190 to 004b7193 has its CatchHandler @ 003b80bc */
                    /* try { // try from 003b7198 to 004b7447 has its CatchHandler @ 003b8250 */
  local_88 = 0;
  local_80 = 0;
  if (param_3 != (char *)0x0) {
    sVar1 = strlen(param_3);
    pvVar2 = (void *)cv::String::allocate((String *)&local_88,sVar1);
    memcpy(pvVar2,param_3,sVar1);
  }
  local_78 = 0;
  local_70 = 0;
  if (param_2 != (char *)0x0) {
    sVar1 = strlen(param_2);
    pvVar2 = (void *)cv::String::allocate((String *)&local_78,sVar1);
    memcpy(pvVar2,param_2,sVar1);
  }
  local_68 = 0;
  local_60 = 0;
  if (param_4 != (char *)0x0) {
    sVar1 = strlen(param_4);
    pvVar2 = (void *)cv::String::allocate((String *)&local_68,sVar1);
    memcpy(pvVar2,param_4,sVar1);
  }
  cv::Exception::Exception
            (aEStack_58,param_1,(String *)&local_88,(String *)&local_78,(String *)&local_68,param_5)
  ;
  cv::error(aEStack_58);
  cv::Exception::~Exception(aEStack_58);
  cv::String::deallocate((String *)&local_68);
  cv::String::deallocate((String *)&local_78);
  cv::String::deallocate((String *)&local_88);
  return;
}


==================================================================

### FUNC 003b72f8 (32 bytes) name=cvErrorFromIppStatus

long cvErrorFromIppStatus(int param_1)

{
  long lVar1;
  
  lVar1 = 0xfffffffe;
  if (param_1 + 0x71U < 0x71) {
    lVar1 = (long)*(short *)(&DAT_00475b10 + (ulong)(param_1 + 0x71U) * 2);
  }
  return lVar1;
}


==================================================================

### FUNC 003b7318 (100 bytes) name=Mutex

/* cv::Mutex::Mutex() */

void __thiscall cv::Mutex::Mutex(Mutex *this)

{
  pthread_mutex_t *__mutex;
  pthread_mutexattr_t apStack_8 [2];
  
  __mutex = operator_new(0x2c);
  pthread_mutexattr_init(apStack_8);
  pthread_mutexattr_settype(apStack_8,1);
  pthread_mutex_init(__mutex,apStack_8);
  pthread_mutexattr_destroy(apStack_8);
  __mutex[1].__data.__lock = 1;
  *(pthread_mutex_t **)this = __mutex;
  return;
}


==================================================================

### FUNC 003b7390 (84 bytes) name=~Mutex

/* cv::Mutex::~Mutex() */

void __thiscall cv::Mutex::~Mutex(Mutex *this)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  pthread_mutex_t *__mutex;
  
  piVar1 = (int *)(*(long *)this + 0x28);
  do {
    iVar2 = *piVar1;
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar4) {
      *piVar1 = iVar2 + -1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  if ((iVar2 == 1) && (__mutex = *(pthread_mutex_t **)this, __mutex != (pthread_mutex_t *)0x0)) {
    pthread_mutex_destroy(__mutex);
    operator_delete(__mutex);
    return;
  }
  return;
}


==================================================================

### FUNC 003b73e4 (32 bytes) name=Mutex

/* cv::Mutex::Mutex(cv::Mutex const&) */

void __thiscall cv::Mutex::Mutex(Mutex *this,Mutex *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  
  lVar4 = *(long *)param_1;
  *(long *)this = lVar4;
  piVar1 = (int *)(lVar4 + 0x28);
  do {
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar3) {
      *piVar1 = *piVar1 + 1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  return;
}


==================================================================

### FUNC 003b7404 (160 bytes) name=operator=

/* cv::Mutex::TEMPNAMEPLACEHOLDERVALUE(cv::Mutex const&) */

Mutex * __thiscall cv::Mutex::operator=(Mutex *this,Mutex *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  pthread_mutex_t *__mutex;
  
  piVar1 = (int *)(*(long *)param_1 + 0x28);
  do {
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar4) {
      *piVar1 = *piVar1 + 1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  piVar1 = (int *)(*(long *)this + 0x28);
  do {
    iVar2 = *piVar1;
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar4) {
      *piVar1 = iVar2 + -1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  if ((iVar2 == 1) && (__mutex = *(pthread_mutex_t **)this, __mutex != (pthread_mutex_t *)0x0)) {
                    /* try { // try from 003b7474 to 004b7477 has its CatchHandler @ 003b8150 */
    pthread_mutex_destroy(__mutex);
                    /* try { // try from 003b747c to 004b767f has its CatchHandler @ 003b8250 */
    operator_delete(__mutex);
    *(undefined8 *)this = *(undefined8 *)param_1;
    return this;
  }
  *(undefined8 *)this = *(undefined8 *)param_1;
  return this;
}


==================================================================

### FUNC 003b74a4 (8 bytes) name=lock

/* cv::Mutex::lock() */

int __thiscall cv::Mutex::lock(Mutex *this)

{
  int iVar1;
  
  iVar1 = pthread_mutex_lock(*(pthread_mutex_t **)this);
  return iVar1;
}


==================================================================

### FUNC 003b74ac (8 bytes) name=unlock

/* cv::Mutex::unlock() */

int __thiscall cv::Mutex::unlock(Mutex *this)

{
  int iVar1;
  
  iVar1 = pthread_mutex_unlock(*(pthread_mutex_t **)this);
  return iVar1;
}


==================================================================

### FUNC 003b74b4 (396 bytes) name=FUN_003b74b4

void FUN_003b74b4(long *param_1)

{
  undefined8 *puVar1;
  int iVar2;
  long *plVar3;
  Mutex *this;
  void *pvVar4;
  long lVar5;
  long lVar6;
  void *pvVar7;
  int iVar8;
  
  if (param_1 == (long *)0x0) {
    return;
  }
  pvVar4 = (void *)*param_1;
  lVar5 = param_1[1] - (long)pvVar4;
  if (0 < (int)(lVar5 >> 3)) {
    lVar6 = 0;
    iVar8 = 0;
    do {
      pvVar7 = *(void **)((long)pvVar4 + lVar6);
      puVar1 = (undefined8 *)((long)pvVar4 + lVar6);
      if (pvVar7 != (void *)0x0) {
        this = DAT_00532a38;
        if ((DAT_00532b90 & 1) == 0) {
          iVar2 = __cxa_guard_acquire(&DAT_00532b90);
          if (iVar2 == 0) {
            pvVar7 = (void *)*puVar1;
            this = DAT_00532a38;
          }
          else {
            this = operator_new(0x20);
            cv::Mutex::Mutex(this);
            *(undefined8 *)(this + 8) = 0;
            *(undefined8 *)(this + 0x10) = 0;
            *(undefined8 *)(this + 0x18) = 0;
            DAT_00532a38 = this;
            __cxa_guard_release(&DAT_00532b90);
            pvVar7 = (void *)*puVar1;
          }
        }
        cv::Mutex::lock(this);
        plVar3 = *(long **)(*(long *)(this + 8) + lVar6);
        if (plVar3 != (long *)0x0) {
          if (*(code **)(*plVar3 + 0x18) == FUN_003b603c) {
            if (pvVar7 != (void *)0x0) {
              cv::ocl::Queue::~Queue((Queue *)((long)pvVar7 + 0x10));
              operator_delete(pvVar7);
            }
          }
          else {
            (**(code **)(*plVar3 + 0x18))(plVar3,pvVar7);
          }
        }
        cv::Mutex::unlock(this);
        *puVar1 = 0;
        pvVar4 = (void *)*param_1;
        lVar5 = param_1[1] - (long)pvVar4;
      }
      iVar8 = iVar8 + 1;
      lVar6 = lVar6 + 8;
    } while (iVar8 < (int)(lVar5 >> 3));
  }
  param_1[1] = (long)pvVar4;
  if (pvVar4 != (void *)0x0) {
    operator_delete(pvVar4);
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003b7698 (36 bytes) name=trylock

/* cv::Mutex::trylock() */

bool __thiscall cv::Mutex::trylock(Mutex *this)

{
  int iVar1;
  
  iVar1 = pthread_mutex_trylock(*(pthread_mutex_t **)this);
                    /* try { // try from 003b76b8 to 004b76bb has its CatchHandler @ 003b81c4 */
  return iVar1 == 0;
}


==================================================================

### FUNC 003b76bc (460 bytes) name=TLSDataContainer

/* cv::TLSDataContainer::TLSDataContainer() */

void __thiscall cv::TLSDataContainer::TLSDataContainer(TLSDataContainer *this)

{
  undefined *puVar1;
  int iVar2;
  Mutex *this_00;
  ulong uVar3;
  void *__dest;
  ulong uVar4;
  size_t sVar5;
  undefined8 *__src;
  long lVar6;
  void *__dest_00;
  ulong uVar7;
  
  uVar4 = DAT_00532b90;
                    /* try { // try from 003b76c0 to 004b776f has its CatchHandler @ 003b8250 */
  puVar1 = PTR_vtable_00501c08 + 0x10;
  *(undefined4 *)(this + 8) = 0xffffffff;
  *(undefined **)this = puVar1;
  this_00 = DAT_00532a38;
  if (((uVar4 & 1) == 0) &&
     (iVar2 = __cxa_guard_acquire(&DAT_00532b90), this_00 = DAT_00532a38, iVar2 != 0)) {
    this_00 = operator_new(0x20);
    Mutex::Mutex(this_00);
    *(undefined8 *)(this_00 + 8) = 0;
    *(undefined8 *)(this_00 + 0x10) = 0;
    *(undefined8 *)(this_00 + 0x18) = 0;
    DAT_00532a38 = this_00;
                    /* try { // try from 003b77b0 to 004b77b3 has its CatchHandler @ 003b81b4 */
    __cxa_guard_release(&DAT_00532b90);
  }
  Mutex::lock(this_00);
  __src = *(undefined8 **)(this_00 + 0x10);
  if (__src != *(undefined8 **)(this_00 + 0x18)) {
    lVar6 = 0;
    if (__src != (undefined8 *)0x0) {
      *__src = this;
      lVar6 = *(long *)(this_00 + 0x10);
    }
    lVar6 = lVar6 + 8;
    *(long *)(this_00 + 0x10) = lVar6;
    __dest_00 = *(void **)(this_00 + 8);
    goto LAB_003b7744;
  }
                    /* try { // try from 003b77b8 to 004b783f has its CatchHandler @ 003b8250 */
  lVar6 = (long)__src - *(long *)(this_00 + 8);
  uVar4 = lVar6 >> 3;
  if (uVar4 == 0) {
    uVar7 = 8;
LAB_003b77cc:
    __dest_00 = operator_new(uVar7);
  }
  else {
    uVar3 = uVar4 * 2;
    uVar7 = 0xfffffffffffffff8;
    if ((uVar3 < uVar4) || (0x1fffffffffffffff < uVar3)) goto LAB_003b77cc;
    uVar7 = uVar4 << 4;
    __dest_00 = (void *)0x0;
    if (uVar3 != 0) goto LAB_003b77cc;
  }
  if ((long)__dest_00 + lVar6 != 0) {
    *(TLSDataContainer **)((long)__dest_00 + lVar6) = this;
  }
  sVar5 = (long)__src - (long)*(void **)(this_00 + 8);
  if ((long)sVar5 >> 3 != 0) {
    memmove(__dest_00,*(void **)(this_00 + 8),sVar5);
  }
  __dest = (void *)((long)__dest_00 + sVar5 + 8);
  sVar5 = *(long *)(this_00 + 0x10) - (long)__src;
  if ((long)sVar5 >> 3 != 0) {
                    /* try { // try from 003b7860 to 004b7863 has its CatchHandler @ 003b8224 */
    __dest = memmove(__dest,__src,sVar5);
  }
  lVar6 = (long)__dest + sVar5;
  if (*(void **)(this_00 + 8) != (void *)0x0) {
    operator_delete(*(void **)(this_00 + 8));
  }
  *(void **)(this_00 + 8) = __dest_00;
  *(long *)(this_00 + 0x10) = lVar6;
  *(ulong *)(this_00 + 0x18) = (long)__dest_00 + uVar7;
LAB_003b7744:
  Mutex::unlock(this_00);
  *(int *)(this + 8) = (int)(lVar6 - (long)__dest_00 >> 3) + -1;
  return;
}


==================================================================

### FUNC 003b78c4 (332 bytes) name=~TLSDataContainer

/* cv::TLSDataContainer::~TLSDataContainer() */

void __thiscall cv::TLSDataContainer::~TLSDataContainer(TLSDataContainer *this)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int iVar5;
  char *pcVar6;
  Mutex *this_00;
  ulong uVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar7 = DAT_00532b90;
                    /* try { // try from 003b78d4 to 004b78d7 has its CatchHandler @ 003b8250 */
  *(undefined **)this = PTR_vtable_00501c08 + 0x10;
  this_00 = DAT_00532a38;
  if (((uVar7 & 1) == 0) &&
     (iVar5 = __cxa_guard_acquire(&DAT_00532b90), this_00 = DAT_00532a38, iVar5 != 0)) {
    this_00 = operator_new(0x20);
                    /* try { // try from 003b79bc to 004b79bf has its CatchHandler @ 003b8260 */
    Mutex::Mutex(this_00);
    *(undefined8 *)(this_00 + 8) = 0;
    *(undefined8 *)(this_00 + 0x10) = 0;
    *(undefined8 *)(this_00 + 0x18) = 0;
    DAT_00532a38 = this_00;
    __cxa_guard_release(&DAT_00532b90);
  }
  uVar1 = *(uint *)(this + 8);
  Mutex::lock(this_00);
  uVar7 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
  if (this == *(TLSDataContainer **)(*(long *)(this_00 + 8) + uVar7)) {
    *(undefined8 *)(*(long *)(this_00 + 8) + uVar7) = 0;
    Mutex::unlock(this_00);
    return;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x20);
  uVar4 = s_tlsContainers__id_____pContainer_00475aa0._24_8_;
  uVar3 = s_tlsContainers__id_____pContainer_00475aa0._16_8_;
  uVar2 = s_tlsContainers__id_____pContainer_00475aa0._8_8_;
                    /* try { // try from 003b7948 to 004b794b has its CatchHandler @ 003b81d4 */
  *(undefined8 *)pcVar6 = s_tlsContainers__id_____pContainer_00475aa0._0_8_;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd7,(String *)&local_10,
        "void cv::TLSContainerStorage::releaseKey(int, cv::TLSDataContainer*)",
        "/builds/master_pack-android/opencv/modules/core/src/system.cpp",0x43d);
  String::deallocate((String *)&local_10);
  *(undefined8 *)(*(long *)(this_00 + 8) + uVar7) = 0;
  Mutex::unlock(this_00);
  return;
}


==================================================================

### FUNC 003b7a58 (16 bytes) name=FUN_003b7a58

void FUN_003b7a58(TLSDataContainer *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7970;
  cv::TLSDataContainer::~TLSDataContainer(param_1);
  return;
}


==================================================================

### FUNC 003b7a68 (44 bytes) name=FUN_003b7a68

void FUN_003b7a68(TLSDataContainer *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7970;
  cv::TLSDataContainer::~TLSDataContainer(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003b7a94 (32 bytes) name=~TLSDataContainer

/* cv::TLSDataContainer::~TLSDataContainer() */

void __thiscall cv::TLSDataContainer::~TLSDataContainer(TLSDataContainer *this)

{
  ~TLSDataContainer(this);
                    /* try { // try from 003b7aa4 to 004b7aa7 has its CatchHandler @ 003b8258 */
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003b7ab4 (800 bytes) name=getData

/* cv::TLSDataContainer::getData() const */

undefined8 * __thiscall cv::TLSDataContainer::getData(TLSDataContainer *this)

{
  void *__dest;
  int iVar1;
  undefined1 uVar2;
  pthread_key_t __key;
  long *__pointer;
  undefined8 *puVar3;
  ulong uVar4;
  void *__dest_00;
  long lVar5;
  ulong uVar6;
  void *pvVar7;
  size_t sVar8;
  ulong uVar9;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(int *)(this + 8) < 0) {
    local_10 = 0;
    local_8 = 0;
    puVar3 = (undefined8 *)String::allocate((String *)&local_10,9);
    uVar2 = DAT_00475ad0;
                    /* try { // try from 003b7c00 to 004b7c03 has its CatchHandler @ 003b6d50 */
    *puVar3 = DAT_00475ac8;
    *(undefined1 *)(puVar3 + 1) = uVar2;
    error(-0xd7,(String *)&local_10,"void* cv::TLSDataContainer::getData() const",
          "/builds/master_pack-android/opencv/modules/core/src/system.cpp",0x469);
    String::deallocate((String *)&local_10);
  }
  pthread_once((pthread_once_t *)&DAT_00532b98,FUN_003b70b8);
  __pointer = pthread_getspecific(DAT_00532a40);
  if (__pointer == (long *)0x0) {
    __pointer = operator_new(0x18);
    *__pointer = 0;
    __pointer[1] = 0;
    __pointer[2] = 0;
    pvVar7 = operator_new(0x80);
    if ((void *)*__pointer != (void *)0x0) {
      operator_delete((void *)*__pointer);
    }
    __key = DAT_00532a40;
    *__pointer = (long)pvVar7;
    __pointer[1] = (long)pvVar7;
    __pointer[2] = (long)pvVar7 + 0x80;
    pthread_setspecific(__key,__pointer);
  }
                    /* try { // try from 003b7b18 to 004b7b1b has its CatchHandler @ 003b8160 */
  if ((*(int *)(this + 8) < (int)(__pointer[1] - *__pointer >> 3)) &&
     (puVar3 = *(undefined8 **)(*__pointer + (long)*(int *)(this + 8) * 8),
     puVar3 != (undefined8 *)0x0)) {
    return puVar3;
  }
  if (*(code **)(*(long *)this + 0x10) == FUN_003b5fdc) {
    puVar3 = operator_new(0x20);
    *puVar3 = 0xffffffff;
    *(undefined4 *)(puVar3 + 1) = 0;
    ocl::Queue::Queue((Queue *)(puVar3 + 2));
    *(undefined4 *)(puVar3 + 3) = 0xffffffff;
    *(undefined4 *)((long)puVar3 + 0x1c) = 0xffffffff;
  }
  else {
    puVar3 = (undefined8 *)(**(code **)(*(long *)this + 0x10))(this);
  }
  lVar5 = *__pointer;
  pvVar7 = (void *)__pointer[1];
  iVar1 = *(int *)(this + 8);
  uVar6 = (long)pvVar7 - lVar5 >> 3;
  if (iVar1 < (int)uVar6) {
LAB_003b7b80:
    *(undefined8 **)(lVar5 + (long)iVar1 * 8) = puVar3;
                    /* try { // try from 003b7b8c to 004b7b8f has its CatchHandler @ 003b8268 */
    return puVar3;
  }
  uVar4 = (ulong)(iVar1 + 1);
  if (uVar4 <= uVar6) {
    if (uVar4 < uVar6) {
      __pointer[1] = lVar5 + uVar4 * 8;
      *(undefined8 **)(lVar5 + (long)iVar1 * 8) = puVar3;
      return puVar3;
    }
    goto LAB_003b7b80;
  }
  uVar4 = uVar4 - uVar6;
  if (uVar4 == 0) goto LAB_003b7b80;
  if (uVar4 <= (ulong)(__pointer[2] - (long)pvVar7 >> 3)) {
    memset(pvVar7,0,uVar4 * 8);
    __pointer[1] = __pointer[1] + uVar4 * 8;
    *(undefined8 **)(*__pointer + (long)iVar1 * 8) = puVar3;
    return puVar3;
  }
  if (0x1fffffffffffffff - uVar6 < uVar4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("vector::_M_fill_insert");
  }
  uVar9 = uVar4;
  if (uVar4 < uVar6) {
    uVar9 = uVar6;
  }
  uVar9 = uVar9 + uVar6;
  if ((uVar9 < uVar6) || (0x1fffffffffffffff < uVar9)) {
    uVar9 = 0x1fffffffffffffff;
  }
  else if (uVar9 == 0) {
    __dest_00 = (void *)0x0;
    uVar9 = 0;
    goto LAB_003b7d28;
  }
  uVar9 = uVar9 << 3;
  __dest_00 = operator_new(uVar9);
LAB_003b7d28:
  memset((void *)((long)__dest_00 + ((long)pvVar7 - lVar5)),0,uVar4 * 8);
  sVar8 = (long)pvVar7 - *__pointer;
  if ((long)sVar8 >> 3 != 0) {
                    /* try { // try from 003b7dc0 to 004b7de7 has its CatchHandler @ 003b8250 */
    memmove(__dest_00,(void *)*__pointer,sVar8);
  }
  __dest = (void *)((long)__dest_00 + uVar4 * 8 + sVar8);
  sVar8 = __pointer[1] - (long)pvVar7;
  if ((long)sVar8 >> 3 != 0) {
    memmove(__dest,pvVar7,sVar8);
  }
  if ((void *)*__pointer != (void *)0x0) {
    operator_delete((void *)*__pointer);
  }
  *__pointer = (long)__dest_00;
  __pointer[1] = (long)__dest + sVar8;
  __pointer[2] = (long)__dest_00 + uVar9;
  *(undefined8 **)((long)__dest_00 + (long)iVar1 * 8) = puVar3;
  return puVar3;
}


==================================================================

### FUNC 003b7e20 (384 bytes) name=FUN_003b7e20

void FUN_003b7e20(long *param_1)

{
  undefined8 *puVar1;
  int iVar2;
  long *plVar3;
  Mutex *this;
  void *pvVar4;
  long lVar5;
  long lVar6;
  void *pvVar7;
  int iVar8;
  
                    /* try { // try from 003b7e24 to 004b7e27 has its CatchHandler @ 003b6d50 */
                    /* try { // try from 003b7e30 to 004b7e33 has its CatchHandler @ 003b8268 */
                    /* try { // try from 003b7e3c to 004b7e3f has its CatchHandler @ 003b8160 */
  pvVar4 = (void *)*param_1;
                    /* try { // try from 003b7e48 to 004b7e4b has its CatchHandler @ 003b8258 */
  lVar5 = param_1[1] - (long)pvVar4;
                    /* try { // try from 003b7e54 to 004b7e57 has its CatchHandler @ 003b8248 */
  if (0 < (int)(lVar5 >> 3)) {
    lVar6 = 0;
                    /* try { // try from 003b7e60 to 004b7e63 has its CatchHandler @ 003b8260 */
    iVar8 = 0;
                    /* try { // try from 003b7e6c to 004b7e6f has its CatchHandler @ 003b8190 */
    do {
      pvVar7 = *(void **)((long)pvVar4 + lVar6);
      puVar1 = (undefined8 *)((long)pvVar4 + lVar6);
      if (pvVar7 != (void *)0x0) {
        this = DAT_00532a38;
        if ((DAT_00532b90 & 1) == 0) {
          iVar2 = __cxa_guard_acquire(&DAT_00532b90);
          if (iVar2 == 0) {
            pvVar7 = (void *)*puVar1;
            this = DAT_00532a38;
          }
          else {
            this = operator_new(0x20);
            cv::Mutex::Mutex(this);
            *(undefined8 *)(this + 8) = 0;
            *(undefined8 *)(this + 0x10) = 0;
            *(undefined8 *)(this + 0x18) = 0;
            DAT_00532a38 = this;
            __cxa_guard_release(&DAT_00532b90);
            pvVar7 = (void *)*puVar1;
          }
        }
        cv::Mutex::lock(this);
                    /* try { // try from 003b7e88 to 004b807b has its CatchHandler @ 003b8250 */
        plVar3 = *(long **)(*(long *)(this + 8) + lVar6);
        if (plVar3 != (long *)0x0) {
          if (*(code **)(*plVar3 + 0x18) == FUN_003b603c) {
            if (pvVar7 != (void *)0x0) {
              cv::ocl::Queue::~Queue((Queue *)((long)pvVar7 + 0x10));
              operator_delete(pvVar7);
            }
          }
          else {
            (**(code **)(*plVar3 + 0x18))(plVar3,pvVar7);
          }
        }
        cv::Mutex::unlock(this);
        *puVar1 = 0;
        pvVar4 = (void *)*param_1;
        lVar5 = param_1[1] - (long)pvVar4;
      }
      iVar8 = iVar8 + 1;
      lVar6 = lVar6 + 8;
    } while (iVar8 < (int)(lVar5 >> 3));
  }
  param_1[1] = (long)pvVar4;
  if (pvVar4 == (void *)0x0) {
    return;
  }
  operator_delete(pvVar4);
  return;
}


==================================================================

### FUNC 003b7ff8 (124 bytes) name=FUN_003b7ff8

TLSDataContainer * FUN_003b7ff8(void)

{
  int iVar1;
  TLSDataContainer *this;
  
  if (((DAT_00532ba0 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00532ba0), iVar1 != 0)) {
    this = operator_new(0x10);
    cv::TLSDataContainer::TLSDataContainer(this);
    *(undefined ***)this = &PTR_FUN_004f7970;
    DAT_00532a50 = this;
    __cxa_guard_release(&DAT_00532ba0);
    return this;
  }
  return DAT_00532a50;
}


==================================================================

### FUNC 003b809c (36 bytes) name=setIppStatus

/* cv::ipp::setIppStatus(int, char const*, char const*, int) */

void cv::ipp::setIppStatus(int param_1,char *param_2,char *param_3,int param_4)

{
  DAT_00532b9c = param_1;
  DAT_00532a70 = param_2;
  DAT_00532a58 = param_3;
  DAT_00532cc0 = param_4;
                    /* catch() { ... } // from try @ 003b7190 with catch @ 003b80bc */
  return;
}


==================================================================

### FUNC 003b80c0 (12 bytes) name=getIppStatus

/* cv::ipp::getIppStatus() */

undefined4 cv::ipp::getIppStatus(void)

{
  return DAT_00532b9c;
}


==================================================================

### FUNC 003b80cc (144 bytes) name=getIppErrorLocation

/* cv::ipp::getIppErrorLocation() */

void __thiscall cv::ipp::getIppErrorLocation(ipp *this)

{
  undefined1 *puVar1;
  
  puVar1 = DAT_00532a58;
  if (DAT_00532a58 == (undefined1 *)0x0) {
    puVar1 = &DAT_00472008;
  }
  if (DAT_00532a70 == 0) {
    format("%s:%d %s",puVar1,(ulong)DAT_00532cc0,&DAT_00472008);
                    /* try { // try from 003b814c to 004b814f has its CatchHandler @ 003b6d50 */
                    /* catch() { ... } // from try @ 003b7474 with catch @ 003b8150 */
    return;
  }
  format("%s:%d %s",puVar1,(ulong)DAT_00532cc0);
  return;
}


==================================================================

### FUNC 003b815c (8 bytes) name=useIPP

/* cv::ipp::useIPP() */

undefined8 cv::ipp::useIPP(void)

{
                    /* catch() { ... } // from try @ 003b7b18 with catch @ 003b8160
                       catch() { ... } // from try @ 003b7e3c with catch @ 003b8160 */
  return 0;
}


==================================================================

### FUNC 003b8164 (140 bytes) name=setUseIPP

/* cv::ipp::setUseIPP(bool) */

void cv::ipp::setUseIPP(bool param_1)

{
  int iVar1;
  long lVar2;
  TLSDataContainer *this;
  
                    /* catch() { ... } // from try @ 003b7df4 with catch @ 003b8168
                       catch() { ... } // from try @ 003b7e78 with catch @ 003b8168 */
  if (((DAT_00532ba0 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00532ba0), iVar1 != 0)) {
    this = operator_new(0x10);
                    /* catch() { ... } // from try @ 003b77b0 with catch @ 003b81b4 */
    TLSDataContainer::TLSDataContainer(this);
                    /* catch() { ... } // from try @ 003b76b8 with catch @ 003b81c4 */
    *(undefined ***)this = &PTR_FUN_004f7970;
    DAT_00532a50 = this;
    __cxa_guard_release(&DAT_00532ba0);
                    /* catch() { ... } // from try @ 003b7948 with catch @ 003b81d4
                       catch() { ... } // from try @ 003b7e18 with catch @ 003b81d4 */
    lVar2 = TLSDataContainer::getData(this);
    *(undefined4 *)(lVar2 + 0x1c) = 0;
    return;
  }
  lVar2 = TLSDataContainer::getData(DAT_00532a50);
  *(undefined4 *)(lVar2 + 0x1c) = 0;
                    /* catch() { ... } // from try @ 003b7e04 with catch @ 003b8190
                       catch() { ... } // from try @ 003b7e6c with catch @ 003b8190 */
  return;
}


==================================================================

### FUNC 003b8218 (88 bytes) name=setUseOptimized

/* cv::setUseOptimized(bool) */

void cv::setUseOptimized(bool param_1)

{
                    /* catch() { ... } // from try @ 003b7860 with catch @ 003b8224 */
  if (param_1) {
                    /* catch() { ... } // from try @ 003b6dc0 with catch @ 003b8268
                       catch() { ... } // from try @ 003b7b8c with catch @ 003b8268
                       catch() { ... } // from try @ 003b7e30 with catch @ 003b8268 */
    PTR_DAT_005093f8 = (undefined *)&DAT_00532cc8;
  }
  else {
    PTR_DAT_005093f8 = (undefined *)&DAT_00532a88;
  }
  DAT_00532a81 = *(undefined1 *)((long)PTR_DAT_005093f8 + 7);
  DAT_005093f0 = param_1;
                    /* catch() { ... } // from try @ 003b6e80 with catch @ 003b8248
                       catch() { ... } // from try @ 003b6eb8 with catch @ 003b8248
                       catch() { ... } // from try @ 003b7a30 with catch @ 003b8248
                       catch() { ... } // from try @ 003b7e54 with catch @ 003b8248 */
                    /* catch() { ... } // from try @ 003b6fd0 with catch @ 003b8250
                       catch() { ... } // from try @ 003b7198 with catch @ 003b8250
                       catch() { ... } // from try @ 003b747c with catch @ 003b8250
                       catch() { ... } // from try @ 003b76c0 with catch @ 003b8250
                       catch() { ... } // from try @ 003b77b8 with catch @ 003b8250
                       catch() { ... } // from try @ 003b78d4 with catch @ 003b8250
                       catch() { ... } // from try @ 003b7dc0 with catch @ 003b8250
                       catch() { ... } // from try @ 003b7e88 with catch @ 003b8250 */
  ipp::setUseIPP(param_1);
                    /* catch() { ... } // from try @ 003b7aa4 with catch @ 003b8258
                       catch() { ... } // from try @ 003b7e48 with catch @ 003b8258 */
                    /* catch() { ... } // from try @ 003b79bc with catch @ 003b8260
                       catch() { ... } // from try @ 003b7e60 with catch @ 003b8260 */
  ocl::setUseOpenCL(param_1);
  return;
}


==================================================================

### FUNC 003b8270 (48 bytes) name=cvUseOptimized

undefined1 cvUseOptimized(int param_1)

{
  undefined1 uVar1;
  
  uVar1 = DAT_005093f0;
  cv::setUseOptimized(param_1 != 0);
  return uVar1;
}


==================================================================

### FUNC 003b82a0 (64 bytes) name=FUN_003b82a0

void FUN_003b82a0(void)

{
  Mutex *this;
  Mutex *pMVar1;
  
  this = (Mutex *)&DAT_00532ec0;
  do {
    pMVar1 = this + -8;
    cv::Mutex::~Mutex(this);
    this = pMVar1;
  } while (pMVar1 != (Mutex *)0x532dc8);
  return;
}


==================================================================

### FUNC 003b82e0 (48 bytes) name=UMatData

/* cv::UMatData::UMatData(cv::MatAllocator const*) */

void __thiscall cv::UMatData::UMatData(UMatData *this,MatAllocator *param_1)

{
  *(undefined4 *)(this + 0x14) = 0;
  *(MatAllocator **)(this + 8) = param_1;
  *(MatAllocator **)this = param_1;
  *(undefined4 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined4 *)(this + 0x48) = 0;
  return;
}


==================================================================

### FUNC 003b8310 (4 bytes) name=~UMatData

/* cv::UMatData::~UMatData() */

void __thiscall cv::UMatData::~UMatData(UMatData *this)

{
  return;
}


==================================================================

### FUNC 003b8314 (60 bytes) name=lock

/* cv::UMatData::lock() */

void __thiscall cv::UMatData::lock(UMatData *this)

{
  Mutex::lock((Mutex *)(&DAT_00532dd0 + ((ulong)this % 0x1f) * 8));
  return;
}


==================================================================

### FUNC 003b8350 (60 bytes) name=unlock

/* cv::UMatData::unlock() */

void __thiscall cv::UMatData::unlock(UMatData *this)

{
  Mutex::unlock((Mutex *)(&DAT_00532dd0 + ((ulong)this % 0x1f) * 8));
  return;
}


==================================================================

### FUNC 003b838c (4 bytes) name=getStdAllocator

/* cv::UMat::getStdAllocator() */

void cv::UMat::getStdAllocator(void)

{
  (*(code *)PTR_getStdAllocator_005001b8)();
  return;
}


==================================================================

### FUNC 003b8390 (244 bytes) name=swap

/* cv::swap(cv::UMat&, cv::UMat&) */

void cv::swap(UMat *param_1,UMat *param_2)

{
  undefined4 uVar1;
  undefined8 uVar2;
  UMat *pUVar3;
  UMat *pUVar4;
  
  uVar1 = *(undefined4 *)param_1;
  *(undefined4 *)param_1 = *(undefined4 *)param_2;
  *(undefined4 *)param_2 = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 4);
  *(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_2 + 4);
  *(undefined4 *)(param_2 + 4) = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 8);
  *(undefined4 *)(param_1 + 8) = *(undefined4 *)(param_2 + 8);
  *(undefined4 *)(param_2 + 8) = uVar1;
  uVar1 = *(undefined4 *)(param_1 + 0xc);
  *(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
  *(undefined4 *)(param_2 + 0xc) = uVar1;
  uVar2 = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
  *(undefined8 *)(param_2 + 0x10) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x20);
  *(undefined8 *)(param_1 + 0x20) = *(undefined8 *)(param_2 + 0x20);
  *(undefined8 *)(param_2 + 0x20) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x28);
  *(undefined8 *)(param_1 + 0x28) = *(undefined8 *)(param_2 + 0x28);
  *(undefined8 *)(param_2 + 0x28) = uVar2;
  uVar2 = *(undefined8 *)(param_1 + 0x30);
  *(undefined8 *)(param_1 + 0x30) = *(undefined8 *)(param_2 + 0x30);
  *(undefined8 *)(param_2 + 0x30) = uVar2;
  pUVar3 = *(UMat **)(param_1 + 0x38);
  *(undefined8 *)(param_1 + 0x38) = *(undefined8 *)(param_2 + 0x38);
  *(UMat **)(param_2 + 0x38) = pUVar3;
  uVar2 = *(undefined8 *)(param_1 + 0x40);
  *(undefined8 *)(param_1 + 0x40) = *(undefined8 *)(param_2 + 0x40);
  *(undefined8 *)(param_2 + 0x40) = uVar2;
  pUVar4 = *(UMat **)(param_1 + 0x38);
  uVar2 = *(undefined8 *)(param_1 + 0x48);
  *(undefined8 *)(param_1 + 0x48) = *(undefined8 *)(param_2 + 0x48);
  *(undefined8 *)(param_2 + 0x48) = uVar2;
  if (pUVar4 == param_2 + 0x40) {
    *(UMat **)(param_1 + 0x38) = param_1 + 0x40;
    *(UMat **)(param_1 + 0x30) = param_1 + 8;
    pUVar3 = *(UMat **)(param_2 + 0x38);
  }
  if (pUVar3 != param_1 + 0x40) {
    return;
  }
  *(UMat **)(param_2 + 0x38) = param_2 + 0x40;
  *(UMat **)(param_2 + 0x30) = param_2 + 8;
  return;
}


==================================================================

### FUNC 003b8484 (332 bytes) name=copySize

/* cv::UMat::copySize(cv::UMat const&) */

void __thiscall cv::UMat::copySize(UMat *this,UMat *param_1)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  long lVar7;
  char *pcVar8;
  int iVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  ulong uVar14;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar1 = *(uint *)(param_1 + 4);
  if (0x20 < uVar1) {
    local_10 = 0;
    local_8 = 0;
    pcVar8 = (char *)String::allocate((String *)&local_10,0x21);
    uVar6 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar5 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar4 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar3 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar8[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar8 = uVar3;
    *(undefined8 *)(pcVar8 + 8) = uVar4;
    *(undefined8 *)(pcVar8 + 0x10) = uVar5;
    *(undefined8 *)(pcVar8 + 0x18) = uVar6;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x81);
    String::deallocate((String *)&local_10);
  }
  if (uVar1 != *(uint *)(this + 4)) {
    if (*(UMat **)(this + 0x38) != this + 0x40) {
      fastFree(*(UMat **)(this + 0x38));
      *(UMat **)(this + 0x38) = this + 0x40;
      *(UMat **)(this + 0x30) = this + 8;
    }
    if (2 < (int)uVar1) {
      uVar14 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar1 << 3;
      lVar10 = fastMalloc(uVar14 + (long)(int)(uVar1 + 1) * 4);
      *(long *)(this + 0x38) = lVar10;
      lVar10 = lVar10 + uVar14 + 4;
      *(long *)(this + 0x30) = lVar10;
      *(uint *)(lVar10 + -4) = uVar1;
      *(undefined4 *)(this + 0xc) = 0xffffffff;
      *(undefined4 *)(this + 8) = 0xffffffff;
    }
  }
  *(uint *)(this + 4) = uVar1;
  if (0 < (int)uVar1) {
    lVar13 = *(long *)(this + 0x38);
    lVar10 = 0;
    lVar12 = *(long *)(param_1 + 0x38);
    lVar11 = *(long *)(this + 0x30);
    lVar7 = *(long *)(param_1 + 0x30);
    do {
      iVar9 = (int)lVar10;
      *(undefined4 *)(lVar11 + lVar10 * 4) = *(undefined4 *)(lVar7 + lVar10 * 4);
      iVar2 = *(int *)(this + 4);
      *(undefined8 *)(lVar13 + lVar10 * 8) = *(undefined8 *)(lVar12 + lVar10 * 8);
      lVar10 = lVar10 + 1;
    } while (iVar9 + 1 < iVar2);
  }
  return;
}


==================================================================

### FUNC 003b85e4 (56 bytes) name=deallocate

/* cv::UMat::deallocate() */

void __thiscall cv::UMat::deallocate(UMat *this)

{
  long *plVar1;
  
  plVar1 = *(long **)(*(long *)(this + 0x20) + 8);
  (**(code **)(*plVar1 + 0x20))(plVar1,*(long *)(this + 0x20));
  *(undefined8 *)(this + 0x20) = 0;
  return;
}


==================================================================

### FUNC 003b861c (140 bytes) name=~UMat

/* cv::UMat::~UMat() */

void __thiscall cv::UMat::~UMat(UMat *this)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 *puVar5;
  
  if (*(long *)(this + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      deallocate(this);
    }
  }
  if (0 < *(int *)(this + 4)) {
    iVar4 = 0;
    puVar5 = *(undefined4 **)(this + 0x30);
    do {
      *puVar5 = 0;
      iVar4 = iVar4 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar4 < *(int *)(this + 4));
  }
  *(undefined8 *)(this + 0x20) = 0;
  if (*(UMat **)(this + 0x38) != this + 0x40) {
    fastFree(*(UMat **)(this + 0x38));
    return;
  }
  return;
}


==================================================================

### FUNC 003b86b0 (1320 bytes) name=getUMat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::Mat::getUMat(int, cv::UMatUsageFlags) const */

uint * cv::Mat::getUMat(uint *param_1,uint *param_2,undefined4 param_3,undefined4 param_4)

{
  ulong *puVar1;
  uint *puVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined2 uVar9;
  long lVar10;
  long *plVar11;
  long lVar12;
  long lVar13;
  undefined4 *puVar14;
  int *piVar15;
  char *pcVar16;
  long *plVar17;
  uint uVar18;
  uint uVar19;
  int iVar20;
  long lVar21;
  uint uVar22;
  uint uVar23;
  long lVar24;
  ulong uVar25;
  long lVar26;
  int iVar27;
  long lVar28;
  long lVar29;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar5 = _DAT_003b8c10;
  puVar2 = param_1 + 0x10;
  *(undefined8 *)(param_1 + 2) = _UNK_003b8c18;
  *(undefined8 *)param_1 = uVar5;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  *(uint **)(param_1 + 0xc) = param_1 + 2;
  *(uint **)(param_1 + 0xe) = puVar2;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  puVar2[0] = 0;
  puVar2[1] = 0;
  if (*(long *)(param_2 + 4) == 0) {
    return param_1;
  }
  lVar10 = *(long *)(param_2 + 0xe);
  if (lVar10 == 0) {
    plVar11 = *(long **)(param_2 + 0xc);
    plVar17 = (long *)getStdAllocator();
    if (plVar11 == (long *)0x0) {
      plVar11 = plVar17;
    }
    lVar10 = (**(code **)(*plVar11 + 0x10))
                       (plVar11,param_2[1],*(undefined8 *)(param_2 + 0x10),*param_2 & 0xfff,
                        *(undefined8 *)(param_2 + 4),*(undefined8 *)(param_2 + 0x12),param_3,param_4
                       );
    *(undefined4 *)(lVar10 + 0x14) = 1;
  }
  plVar11 = (long *)UMat::getStdAllocator();
  (**(code **)(*plVar11 + 0x18))(plVar11,lVar10,param_3,param_4);
  uVar23 = param_2[1];
  *param_1 = *param_2;
  lVar28 = *(long *)(param_2 + 0x10);
  lVar29 = *(long *)(param_2 + 0x12);
  if (0x20 < uVar23) {
    local_10 = 0;
    local_8 = 0;
    pcVar16 = (char *)String::allocate((String *)&local_10,0x21);
    uVar8 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar7 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar6 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar5 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar16[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar16 = uVar5;
    *(undefined8 *)(pcVar16 + 8) = uVar6;
    *(undefined8 *)(pcVar16 + 0x10) = uVar7;
    *(undefined8 *)(pcVar16 + 0x18) = uVar8;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x81);
    String::deallocate((String *)&local_10);
  }
  if (uVar23 != param_1[1]) {
    if (puVar2 != *(uint **)(param_1 + 0xe)) {
      fastFree(*(uint **)(param_1 + 0xe));
      *(uint **)(param_1 + 0xe) = puVar2;
      *(uint **)(param_1 + 0xc) = param_1 + 2;
    }
    if (2 < (int)uVar23) {
      uVar25 = -(ulong)(uVar23 >> 0x1f) & 0xfffffff800000000 | (ulong)uVar23 << 3;
      lVar12 = fastMalloc(uVar25 + (long)(int)(uVar23 + 1) * 4);
      *(long *)(param_1 + 0xe) = lVar12;
      lVar12 = lVar12 + uVar25 + 4;
      *(long *)(param_1 + 0xc) = lVar12;
      *(uint *)(lVar12 + -4) = uVar23;
      param_1[3] = 0xffffffff;
      param_1[2] = 0xffffffff;
    }
  }
  param_1[1] = uVar23;
  if (lVar28 == 0) {
    uVar22 = *param_1;
LAB_003b8914:
    iVar27 = uVar23 - 1;
    if (((int)uVar23 < 1) || (piVar15 = *(int **)(param_1 + 0xc), 1 < *piVar15)) {
      uVar18 = 0;
    }
    else {
LAB_003b8930:
      uVar19 = 0;
      do {
        piVar15 = piVar15 + 1;
        uVar19 = uVar19 + 1;
        uVar18 = uVar23;
        if (uVar19 == uVar23) break;
        uVar18 = uVar19;
      } while (*piVar15 < 2);
    }
    if (iVar27 <= (int)uVar18) {
LAB_003b89c4:
      *param_1 = uVar22 | 0x4000;
      goto LAB_003b89cc;
    }
    lVar28 = *(long *)(param_1 + 0xe);
    piVar15 = *(int **)(param_1 + 0xc);
  }
  else {
    uVar22 = *param_1;
    uVar18 = uVar23 - 1;
    lVar12 = (long)(int)((uVar22 >> 3 & 0x1ff) + 1 <<
                        (ulong)((uint)(0xfa50L >> ((uVar22 & 7) << 1)) & 3));
    if (-1 < (int)uVar18) {
      if (lVar29 == 0) {
        lVar29 = (long)(int)uVar18 << 2;
        do {
          iVar27 = *(int *)(lVar28 + lVar29);
          if (iVar27 < 0) {
            local_20 = 0;
            local_18 = 0;
            puVar14 = (undefined4 *)String::allocate((String *)&local_20,6);
            uVar9 = DAT_0046acbc;
            *puVar14 = DAT_0046acb8;
            *(undefined2 *)(puVar14 + 1) = uVar9;
            error(-0xd7,(String *)&local_20,
                  "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x9c);
            String::deallocate((String *)&local_20);
          }
          *(int *)(*(long *)(param_1 + 0xc) + lVar29) = iVar27;
          lVar29 = lVar29 + -4;
        } while (lVar29 != ((long)(int)uVar18 - (ulong)uVar18) * 4 + -4);
      }
      else {
        lVar24 = (long)(int)uVar18 << 2;
        lVar26 = (long)(int)uVar18 << 3;
        uVar22 = uVar18;
        do {
          iVar27 = *(int *)(lVar28 + lVar24);
          if (iVar27 < 0) {
            local_20 = 0;
            local_18 = 0;
            puVar14 = (undefined4 *)String::allocate((String *)&local_20,6);
            uVar9 = DAT_0046acbc;
            *puVar14 = DAT_0046acb8;
            *(undefined2 *)(puVar14 + 1) = uVar9;
            error(-0xd7,(String *)&local_20,
                  "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x9c);
            String::deallocate((String *)&local_20);
          }
          lVar21 = *(long *)(param_1 + 0xe);
          *(int *)(*(long *)(param_1 + 0xc) + lVar24) = iVar27;
          lVar13 = lVar12;
          if ((int)uVar22 < (int)uVar18) {
            lVar13 = *(long *)(lVar29 + lVar26);
          }
          uVar22 = uVar22 - 1;
          *(long *)(lVar21 + lVar26) = lVar13;
          lVar24 = lVar24 + -4;
          lVar26 = lVar26 + -8;
        } while (uVar22 != 0xffffffff);
      }
      uVar22 = *param_1;
    }
    if (uVar23 != 1) {
      uVar23 = param_1[1];
      goto LAB_003b8914;
    }
    piVar15 = *(int **)(param_1 + 0xc);
    uVar23 = 2;
    param_1[3] = 1;
    param_1[1] = 2;
    lVar28 = *(long *)(param_1 + 0xe);
    iVar20 = *piVar15;
    *(long *)(lVar28 + 8) = lVar12;
    iVar27 = 1;
    if (iVar20 < 2) goto LAB_003b8930;
    uVar23 = 2;
    uVar18 = 0;
  }
  iVar20 = uVar23 - 2;
  lVar29 = (long)iVar20 * 8;
  if (*(ulong *)(lVar28 + lVar29) <=
      (ulong)((long)piVar15[iVar27] * *(long *)(lVar28 + (long)iVar27 * 8))) {
    piVar15 = piVar15 + iVar20;
    plVar11 = (long *)(lVar28 + lVar29);
    do {
      if (iVar20 <= (int)uVar18) goto LAB_003b89c4;
      iVar27 = *piVar15;
      lVar28 = *plVar11;
      iVar20 = iVar20 + -1;
      puVar1 = (ulong *)(plVar11 + -1);
      piVar15 = piVar15 + -1;
      plVar11 = plVar11 + -1;
    } while (*puVar1 <= (ulong)(iVar27 * lVar28));
  }
  *param_1 = uVar22 & 0xffffbfff;
LAB_003b89cc:
  if ((int)uVar23 < 3) {
    lVar28 = *(long *)(param_2 + 4) - *(long *)(param_2 + 6);
  }
  else {
    lVar28 = *(long *)(param_2 + 4);
    lVar29 = *(long *)(param_2 + 6);
    param_1[3] = 0xffffffff;
    param_1[2] = 0xffffffff;
    lVar28 = lVar28 - lVar29;
  }
  *(long *)(param_1 + 10) = lVar28;
  *(long *)(param_1 + 8) = lVar10;
  piVar15 = (int *)(lVar10 + 0x10);
  do {
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar15,0x10);
    if (bVar4) {
      *piVar15 = *piVar15 + 1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  return param_1;
}


==================================================================

### FUNC 003b8c20 (1740 bytes) name=create

/* cv::UMat::create(int, int const*, int, cv::UMatUsageFlags) */

void __thiscall
cv::UMat::create(UMat *this,uint param_1,int *param_2,uint param_3,undefined4 param_5)

{
  ulong *puVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined2 uVar8;
  int iVar9;
  uint uVar10;
  long lVar11;
  undefined4 *puVar12;
  long *plVar13;
  char *pcVar14;
  uint uVar15;
  long lVar16;
  int *piVar17;
  int *piVar18;
  int iVar19;
  int *piVar20;
  long lVar21;
  long lVar22;
  long *plVar23;
  ulong uVar24;
  long lVar25;
  long lVar26;
  long local_20;
  long local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  *(undefined4 *)(this + 0x18) = param_5;
  if ((0x20 < param_1) || (param_2 == (int *)0x0)) {
    local_10 = 0;
    local_8 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_10,0x23);
    cVar2 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90[0x22];
    uVar7 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._24_8_;
    uVar6 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._16_8_;
    uVar5 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._8_8_;
    uVar4 = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._0_8_;
    *(undefined2 *)(pcVar14 + 0x20) = s_0_<__d_&&_d_<__CV_MAX_DIM_&&__si_0046ac90._32_2_;
    pcVar14[0x22] = cVar2;
    *(undefined8 *)pcVar14 = uVar4;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    *(undefined8 *)(pcVar14 + 0x10) = uVar6;
    *(undefined8 *)(pcVar14 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_10,
          "void cv::UMat::create(int, const int*, int, cv::UMatUsageFlags)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0xef);
    String::deallocate((String *)&local_10);
  }
  param_3 = param_3 & 0xfff;
  if (*(long *)(this + 0x20) != 0) {
    if (((*(uint *)(this + 4) == param_1) || ((param_1 == 1 && ((int)*(uint *)(this + 4) < 3)))) &&
       ((*(uint *)this & 0xfff) == param_3)) {
      if (param_1 == 2) {
        iVar9 = *param_2;
        if ((*(int *)(this + 8) == iVar9) && (*(int *)(this + 0xc) == param_2[1])) {
          return;
        }
      }
      else {
        if ((int)param_1 < 1) {
          if (param_1 == 0) {
            piVar18 = *(int **)(this + 0x30);
LAB_003b8ec0:
            if (piVar18[1] == 1) {
              return;
            }
          }
          goto LAB_003b8ca8;
        }
        iVar9 = *param_2;
      }
      piVar18 = *(int **)(this + 0x30);
      if (*piVar18 == iVar9) {
        uVar15 = 0;
        piVar17 = param_2;
        piVar20 = piVar18;
        do {
          piVar20 = piVar20 + 1;
          piVar17 = piVar17 + 1;
          uVar15 = uVar15 + 1;
          if ((int)param_1 <= (int)uVar15) {
            if (param_1 == uVar15) {
              if (param_1 != 1) {
                return;
              }
              goto LAB_003b8ec0;
            }
            break;
          }
        } while (*piVar20 == *piVar17);
      }
    }
LAB_003b8ca8:
    piVar18 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      iVar9 = *piVar18;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar3) {
        *piVar18 = iVar9 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar9 == 1) {
      deallocate(this);
    }
  }
  uVar15 = *(uint *)(this + 4);
  if (0 < (int)uVar15) {
    iVar9 = 0;
    puVar12 = *(undefined4 **)(this + 0x30);
    do {
      *puVar12 = 0;
      iVar9 = iVar9 + 1;
      uVar15 = *(uint *)(this + 4);
      puVar12 = puVar12 + 1;
    } while (iVar9 < (int)uVar15);
  }
  *(undefined8 *)(this + 0x20) = 0;
  if (param_1 == 0) {
    return;
  }
  *(uint *)this = param_3 | 0x42ff0000;
  if (0x20 < param_1) {
    local_10 = 0;
    local_8 = 0;
    pcVar14 = (char *)String::allocate((String *)&local_10,0x21);
    uVar7 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._24_8_;
    uVar6 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._16_8_;
    uVar5 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._8_8_;
    uVar4 = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68._0_8_;
    pcVar14[0x20] = s_0_<___dims_&&__dims_<__CV_MAX_DI_0046ac68[0x20];
    *(undefined8 *)pcVar14 = uVar4;
    *(undefined8 *)(pcVar14 + 8) = uVar5;
    *(undefined8 *)(pcVar14 + 0x10) = uVar6;
    *(undefined8 *)(pcVar14 + 0x18) = uVar7;
    error(-0xd7,(String *)&local_10,
          "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x81);
    String::deallocate((String *)&local_10);
    uVar15 = *(uint *)(this + 4);
  }
  if (param_1 == uVar15) {
LAB_003b8d60:
    *(uint *)(this + 4) = param_1;
    if (param_2 == (int *)0x0) {
LAB_003b8f4c:
      *(undefined8 *)(this + 0x28) = 0;
      if (2 < (int)param_1) goto LAB_003b8f58;
    }
    else {
LAB_003b8d68:
      uVar15 = param_1 - 1;
      lVar11 = (long)(int)((*(uint *)this >> 3 & 0x1ff) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3));
      if (-1 < (int)uVar15) {
        lVar21 = (long)(int)uVar15;
        lVar25 = lVar21 << 2;
        lVar22 = lVar21 << 3;
        lVar26 = lVar11;
        do {
          iVar9 = *(int *)((long)param_2 + lVar25);
          if (iVar9 < 0) {
            local_10 = 0;
            local_8 = 0;
            puVar12 = (undefined4 *)String::allocate((String *)&local_10,6);
            uVar8 = DAT_0046acbc;
            *puVar12 = DAT_0046acb8;
            *(undefined2 *)(puVar12 + 1) = uVar8;
            error(-0xd7,(String *)&local_10,
                  "void cv::setSize(cv::UMat&, int, const int*, const size_t*, bool)",
                  "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x9c);
            String::deallocate((String *)&local_10);
          }
          lVar16 = *(long *)(this + 0x38);
          *(int *)(*(long *)(this + 0x30) + lVar25) = iVar9;
          lVar25 = lVar25 + -4;
          *(long *)(lVar16 + lVar22) = lVar26;
          lVar22 = lVar22 + -8;
          lVar26 = iVar9 * lVar26;
        } while (lVar22 != (lVar21 - (ulong)uVar15) * 8 + -8);
      }
      if (param_1 != 1) {
        param_1 = *(uint *)(this + 4);
        goto LAB_003b8f4c;
      }
      *(undefined4 *)(this + 0xc) = 1;
      param_1 = 2;
      *(undefined4 *)(this + 4) = 2;
      *(long *)(*(long *)(this + 0x38) + 8) = lVar11;
      *(undefined8 *)(this + 0x28) = 0;
    }
    lVar11 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
  }
  else {
    if (*(UMat **)(this + 0x38) != this + 0x40) {
      fastFree(*(UMat **)(this + 0x38));
      *(UMat **)(this + 0x38) = this + 0x40;
      *(UMat **)(this + 0x30) = this + 8;
    }
    if ((int)param_1 < 3) goto LAB_003b8d60;
    uVar24 = -(ulong)(param_1 >> 0x1f) & 0xfffffff800000000 | (ulong)param_1 << 3;
    lVar11 = fastMalloc(uVar24 + (long)(int)(param_1 + 1) * 4);
    *(long *)(this + 0x38) = lVar11;
    lVar11 = lVar11 + uVar24 + 4;
    *(long *)(this + 0x30) = lVar11;
    *(uint *)(lVar11 + -4) = param_1;
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
    *(uint *)(this + 4) = param_1;
    if (param_2 != (int *)0x0) goto LAB_003b8d68;
    *(undefined8 *)(this + 0x28) = 0;
LAB_003b8f58:
    lVar26 = 0;
    lVar11 = 1;
    do {
      lVar21 = lVar26 * 4;
      lVar26 = lVar26 + 1;
      lVar11 = lVar11 * *(int *)(*(long *)(this + 0x30) + lVar21);
    } while ((int)lVar26 < (int)param_1);
  }
  if (lVar11 == 0) {
    uVar15 = *(uint *)this;
    iVar9 = param_1 - 1;
  }
  else {
    plVar23 = *(long **)(this + 0x10);
    plVar13 = (long *)getStdAllocator();
    if (plVar23 == (long *)0x0) {
      plVar23 = plVar13;
    }
    lVar11 = (**(code **)(*plVar23 + 0x10))
                       (plVar23,*(undefined4 *)(this + 4),*(undefined8 *)(this + 0x30),param_3,0,
                        *(undefined8 *)(this + 0x38),0,*(undefined4 *)(this + 0x18));
    *(long *)(this + 0x20) = lVar11;
    if (lVar11 == 0) {
      local_20 = lVar11;
      local_18 = lVar11;
      puVar12 = (undefined4 *)String::allocate((String *)&local_20,6);
      uVar8 = DAT_0046acc4;
      *puVar12 = DAT_0046acc0;
      *(undefined2 *)(puVar12 + 1) = uVar8;
      error(-0xd7,(String *)&local_20,
            "void cv::UMat::create(int, const int*, int, cv::UMatUsageFlags)",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x10c);
      String::deallocate((String *)&local_20);
    }
    uVar15 = *(uint *)this;
    param_1 = *(uint *)(this + 4);
    iVar9 = param_1 - 1;
    if (*(long *)(*(long *)(this + 0x38) + (long)iVar9 * 8) !=
        (long)(int)((uVar15 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar15 & 7) << 1)) & 3)
                   )) {
      local_10 = 0;
      local_8 = 0;
      pcVar14 = (char *)String::allocate((String *)&local_10,0x2b);
      cVar2 = s_step_dims_1______size_t_CV_ELEM__0046acc8[0x2a];
      uVar8 = s_step_dims_1______size_t_CV_ELEM__0046acc8._40_2_;
      uVar7 = s_step_dims_1______size_t_CV_ELEM__0046acc8._24_8_;
      uVar6 = s_step_dims_1______size_t_CV_ELEM__0046acc8._16_8_;
      uVar5 = s_step_dims_1______size_t_CV_ELEM__0046acc8._8_8_;
      uVar4 = s_step_dims_1______size_t_CV_ELEM__0046acc8._0_8_;
      *(undefined8 *)(pcVar14 + 0x20) = s_step_dims_1______size_t_CV_ELEM__0046acc8._32_8_;
      *(undefined2 *)(pcVar14 + 0x28) = uVar8;
      pcVar14[0x2a] = cVar2;
      *(undefined8 *)pcVar14 = uVar4;
      *(undefined8 *)(pcVar14 + 8) = uVar5;
      *(undefined8 *)(pcVar14 + 0x10) = uVar6;
      *(undefined8 *)(pcVar14 + 0x18) = uVar7;
      error(-0xd7,(String *)&local_10,
            "void cv::UMat::create(int, const int*, int, cv::UMatUsageFlags)",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x114);
      String::deallocate((String *)&local_10);
      param_1 = *(uint *)(this + 4);
      uVar15 = *(uint *)this;
      iVar9 = param_1 - 1;
    }
  }
  if (((int)param_1 < 1) || (piVar18 = *(int **)(this + 0x30), 1 < *piVar18)) {
    uVar10 = 0;
  }
  else {
    uVar10 = 0;
    do {
      piVar18 = piVar18 + 1;
      uVar10 = uVar10 + 1;
      if (uVar10 == param_1) break;
    } while (*piVar18 < 2);
  }
  if ((int)uVar10 < iVar9) {
    lVar26 = *(long *)(this + 0x38);
    iVar19 = param_1 - 2;
    lVar11 = (long)iVar19 * 8;
    if (*(ulong *)(lVar26 + lVar11) <=
        (ulong)((long)*(int *)(*(long *)(this + 0x30) + (long)iVar9 * 4) *
               *(long *)(lVar26 + (long)iVar9 * 8))) {
      plVar23 = (long *)(lVar26 + lVar11);
      piVar18 = (int *)(*(long *)(this + 0x30) + (long)iVar19 * 4);
      do {
        if (iVar19 <= (int)uVar10) goto LAB_003b902c;
        iVar9 = *piVar18;
        lVar11 = *plVar23;
        iVar19 = iVar19 + -1;
        puVar1 = (ulong *)(plVar23 + -1);
        plVar23 = plVar23 + -1;
        piVar18 = piVar18 + -1;
      } while (*puVar1 <= (ulong)(iVar9 * lVar11));
    }
    *(uint *)this = uVar15 & 0xffffbfff;
  }
  else {
LAB_003b902c:
    *(uint *)this = uVar15 | 0x4000;
  }
  if (2 < (int)param_1) {
    *(undefined4 *)(this + 0xc) = 0xffffffff;
    *(undefined4 *)(this + 8) = 0xffffffff;
  }
  if (*(long *)(this + 0x20) != 0) {
    piVar18 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar18,0x10);
      if (bVar3) {
        *piVar18 = *piVar18 + 1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  return;
}


==================================================================

### FUNC 003b941c (768 bytes) name=UMat

/* cv::UMat::UMat(cv::UMat const&, cv::Rect_<int> const&) */

void __thiscall cv::UMat::UMat(UMat *this,UMat *param_1,Rect_ *param_2)

{
  int *piVar1;
  undefined4 uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined2 uVar8;
  uint uVar9;
  uint uVar10;
  undefined8 uVar11;
  void *__dest;
  undefined8 *puVar12;
  char *pcVar13;
  int iVar14;
  undefined4 *puVar15;
  long lVar16;
  undefined8 *puVar17;
  int iVar18;
  long *plVar19;
  long lVar20;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar11 = *(undefined8 *)(param_1 + 0x20);
  uVar10 = *(uint *)param_1;
  iVar18 = *(int *)(param_2 + 0xc);
  iVar14 = *(int *)(param_2 + 8);
  uVar2 = *(undefined4 *)(param_1 + 0x18);
  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 0x20) = uVar11;
  lVar16 = *(long *)(param_1 + 0x28);
  plVar19 = *(long **)(param_1 + 0x38);
  iVar4 = *(int *)(param_2 + 4);
  *(undefined4 *)(this + 4) = 2;
  lVar20 = *plVar19;
  iVar3 = *(int *)(param_1 + 4);
  *(uint *)this = uVar10;
  lVar16 = lVar16 + iVar4 * lVar20;
  *(int *)(this + 8) = iVar18;
  *(int *)(this + 0xc) = iVar14;
  *(undefined4 *)(this + 0x18) = uVar2;
  *(long *)(this + 0x28) = lVar16;
  *(UMat **)(this + 0x30) = this + 8;
  *(UMat **)(this + 0x38) = this + 0x40;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  if (2 < iVar3) {
    local_10 = 0;
    local_8 = 0;
    pcVar13 = (char *)String::allocate((String *)&local_10,0xb);
    cVar6 = s_m_dims_<__2_0046acf8[10];
    uVar8 = s_m_dims_<__2_0046acf8._8_2_;
    *(undefined8 *)pcVar13 = s_m_dims_<__2_0046acf8._0_8_;
    *(undefined2 *)(pcVar13 + 8) = uVar8;
    pcVar13[10] = cVar6;
    error(-0xd7,(String *)&local_10,"cv::UMat::UMat(const cv::UMat&, const Rect&)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x164);
    String::deallocate((String *)&local_10);
    uVar10 = *(uint *)this;
    iVar14 = *(int *)(param_2 + 8);
    iVar18 = *(int *)(param_2 + 0xc);
    lVar16 = *(long *)(this + 0x28);
  }
  iVar3 = *(int *)(param_1 + 0xc);
  iVar4 = *(int *)param_2;
  uVar9 = 0xffffbfff;
  if (iVar3 <= iVar14) {
    uVar9 = 0xffffffff;
  }
  uVar9 = uVar9 & uVar10;
  uVar10 = 0x4000;
  if (iVar18 != 1) {
    uVar10 = 0;
  }
  *(uint *)this = uVar10 | uVar9;
  iVar5 = ((uVar9 & 0xff8) >> 3) + 1 << (ulong)((uint)(0xfa50L >> ((uVar9 & 7) << 1)) & 3);
  *(long *)(this + 0x28) = lVar16 + (long)iVar5 * (long)iVar4;
  if (((((iVar14 < 0) || (iVar4 < 0)) || (iVar3 < iVar4 + iVar14)) ||
      ((iVar18 < 0 || (*(int *)(param_2 + 4) < 0)))) ||
     (*(int *)(param_1 + 8) < *(int *)(param_2 + 4) + iVar18)) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)String::allocate((String *)&local_10,0x7c);
    memcpy(__dest,
           "0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows"
           ,0x7c);
    error(-0xd7,(String *)&local_10,"cv::UMat::UMat(const cv::UMat&, const Rect&)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x16b);
    String::deallocate((String *)&local_10);
  }
  if (*(long *)(this + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = *piVar1 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  if ((*(int *)(param_2 + 8) < *(int *)(param_1 + 0xc)) ||
     (*(int *)(param_2 + 0xc) < *(int *)(param_1 + 8))) {
    puVar17 = *(undefined8 **)(param_1 + 0x38);
    *(uint *)this = *(uint *)this | 0x8000;
    puVar12 = *(undefined8 **)(this + 0x38);
    iVar18 = *(int *)(this + 8);
    *puVar12 = *puVar17;
    puVar12[1] = (long)iVar5;
    uVar11 = s_m_dims_<__2_0046acf8._0_8_;
    uVar8 = s_m_dims_<__2_0046acf8._8_2_;
  }
  else {
    puVar12 = *(undefined8 **)(this + 0x38);
    iVar18 = *(int *)(this + 8);
    *puVar12 = **(undefined8 **)(param_1 + 0x38);
    puVar12[1] = (long)iVar5;
    uVar11 = s_m_dims_<__2_0046acf8._0_8_;
    uVar8 = s_m_dims_<__2_0046acf8._8_2_;
  }
  if (0 < iVar18) {
    s_m_dims_<__2_0046acf8[0] = (char)uVar11;
    s_m_dims_<__2_0046acf8[1] = SUB81(uVar11,1);
    s_m_dims_<__2_0046acf8[2] = SUB81(uVar11,2);
    s_m_dims_<__2_0046acf8[3] = SUB81(uVar11,3);
    s_m_dims_<__2_0046acf8[4] = SUB81(uVar11,4);
    s_m_dims_<__2_0046acf8[5] = SUB81(uVar11,5);
    s_m_dims_<__2_0046acf8[6] = SUB81(uVar11,6);
    s_m_dims_<__2_0046acf8[7] = SUB81(uVar11,7);
    s_m_dims_<__2_0046acf8[8] = (char)uVar8;
    s_m_dims_<__2_0046acf8[9] = SUB21(uVar8,1);
    if (0 < *(int *)(this + 0xc)) {
      return;
    }
  }
  s_m_dims_<__2_0046acf8._0_8_ = uVar11;
  s_m_dims_<__2_0046acf8._8_2_ = uVar8;
  if (*(long *)(this + 0x20) != 0) {
    piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      iVar18 = *piVar1;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar7) {
        *piVar1 = iVar18 + -1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    if (iVar18 == 1) {
      deallocate(this);
    }
  }
  if (0 < *(int *)(this + 4)) {
    iVar18 = 0;
    puVar15 = *(undefined4 **)(this + 0x30);
    do {
      *puVar15 = 0;
      iVar18 = iVar18 + 1;
      puVar15 = puVar15 + 1;
    } while (iVar18 < *(int *)(this + 4));
  }
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined4 *)(this + 0xc) = 0;
  *(undefined4 *)(this + 8) = 0;
  return;
}


==================================================================

### FUNC 003b9748 (1148 bytes) name=UMat

/* cv::UMat::UMat(cv::UMat const&, cv::Range const*) */

void __thiscall cv::UMat::UMat(UMat *this,UMat *param_1,Range *param_2)

{
  ulong *puVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined2 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  int iVar16;
  char *pcVar17;
  int *piVar18;
  long *plVar19;
  undefined8 uVar20;
  undefined8 *puVar21;
  undefined4 *puVar22;
  undefined8 *puVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  Range *pRVar27;
  long lVar28;
  Range *local_10;
  Range *local_8;
  
  *(undefined8 *)this = DAT_003b9bf0;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(UMat **)(this + 0x30) = this + 8;
  *(UMat **)(this + 0x38) = this + 0x40;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  iVar2 = *(int *)(param_1 + 4);
  if (param_2 == (Range *)0x0) {
    local_10 = param_2;
    local_8 = param_2;
    pcVar17 = (char *)String::allocate((String *)&local_10,6);
    uVar8 = s_ranges_0046ad88._4_2_;
                    /* try { // try from 003b9b70 to 004b9b7f has its CatchHandler @ 003b9e1c */
    *(undefined4 *)pcVar17 = s_ranges_0046ad88._0_4_;
    *(undefined2 *)(pcVar17 + 4) = uVar8;
    error(-0xd7,(String *)&local_10,"cv::UMat::UMat(const cv::UMat&, const cv::Range*)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x180);
    String::deallocate((String *)&local_10);
  }
  if (iVar2 < 1) {
    if (this == param_1) goto LAB_003b99f4;
LAB_003b98ac:
    if (*(long *)(param_1 + 0x20) != 0) {
      piVar18 = (int *)(*(long *)(param_1 + 0x20) + 0x10);
      do {
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar7) {
          *piVar18 = *piVar18 + 1;
          cVar6 = ExclusiveMonitorsStatus();
        }
      } while (cVar6 != '\0');
    }
    if (*(long *)(this + 0x20) != 0) {
      piVar18 = (int *)(*(long *)(this + 0x20) + 0x10);
      do {
        iVar16 = *piVar18;
                    /* try { // try from 003b98d8 to 004b98db has its CatchHandler @ 003b9e8c */
        cVar6 = '\x01';
        bVar7 = (bool)ExclusiveMonitorPass(piVar18,0x10);
        if (bVar7) {
          *piVar18 = iVar16 + -1;
          cVar6 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 003b98e0 to 004b9907 has its CatchHandler @ 003b9810 */
      } while (cVar6 != '\0');
      if (iVar16 == 1) {
        deallocate(this);
      }
    }
    if (*(int *)(this + 4) < 1) {
      *(undefined4 *)this = *(undefined4 *)param_1;
      *(undefined8 *)(this + 0x20) = 0;
LAB_003b9928:
      iVar16 = *(int *)(param_1 + 4);
      if (2 < iVar16) goto LAB_003b9934;
      puVar23 = *(undefined8 **)(param_1 + 0x38);
      puVar21 = *(undefined8 **)(this + 0x38);
      uVar4 = *(undefined4 *)(param_1 + 8);
      *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
      *(int *)(this + 4) = iVar16;
      *(undefined4 *)(this + 8) = uVar4;
      *puVar21 = *puVar23;
      puVar21[1] = puVar23[1];
    }
    else {
      iVar16 = 0;
      puVar22 = *(undefined4 **)(this + 0x30);
      do {
        *puVar22 = 0;
        iVar16 = iVar16 + 1;
                    /* try { // try from 003b990c to 004b9927 has its CatchHandler @ 003b9e84 */
        puVar22 = puVar22 + 1;
      } while (iVar16 < *(int *)(this + 4));
      uVar4 = *(undefined4 *)param_1;
      *(undefined8 *)(this + 0x20) = 0;
      *(undefined4 *)this = uVar4;
      if (*(int *)(this + 4) < 3) goto LAB_003b9928;
LAB_003b9934:
      copySize(this,param_1);
    }
                    /* try { // try from 003b9948 to 004b996b has its CatchHandler @ 003b9e7c */
    *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
    if (*(int *)(this + 0x18) == 0) {
      *(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18);
    }
    uVar20 = *(undefined8 *)(param_1 + 0x20);
    *(undefined8 *)(this + 0x28) = *(undefined8 *)(param_1 + 0x28);
    *(undefined8 *)(this + 0x20) = uVar20;
    if (iVar2 < 1) goto LAB_003b99f4;
  }
  else {
    lVar28 = 0;
    pRVar27 = param_2;
    do {
      iVar16 = *(int *)pRVar27;
      iVar3 = *(int *)(pRVar27 + 4);
                    /* catch() { ... } // from try @ 003b983c with catch @ 003b9810
                       catch() { ... } // from try @ 003b98a8 with catch @ 003b9810
                       catch() { ... } // from try @ 003b98e0 with catch @ 003b9810
                       catch() { ... } // from try @ 003b9af0 with catch @ 003b9810
                       catch() { ... } // from try @ 003b9df0 with catch @ 003b9810
                       catch() { ... } // from try @ 003b9e18 with catch @ 003b9810 */
      if (((iVar16 != -0x80000000) || (iVar3 != 0x7fffffff)) &&
         ((iVar16 < 0 ||
          ((iVar3 <= iVar16 || (*(int *)(*(long *)(param_1 + 0x30) + lVar28) < iVar3)))))) {
        local_10 = (Range *)0x0;
        local_8 = (Range *)0x0;
                    /* try { // try from 003b983c to 004b985f has its CatchHandler @ 003b9810 */
        pcVar17 = (char *)String::allocate((String *)&local_10,0x4c);
        uVar4 = s_r____Range__all_______0_<__r_sta_0046ad90._72_4_;
        uVar15 = s_r____Range__all_______0_<__r_sta_0046ad90._56_8_;
        uVar14 = s_r____Range__all_______0_<__r_sta_0046ad90._48_8_;
        uVar13 = s_r____Range__all_______0_<__r_sta_0046ad90._40_8_;
        uVar12 = s_r____Range__all_______0_<__r_sta_0046ad90._32_8_;
        uVar11 = s_r____Range__all_______0_<__r_sta_0046ad90._24_8_;
        uVar10 = s_r____Range__all_______0_<__r_sta_0046ad90._16_8_;
        uVar9 = s_r____Range__all_______0_<__r_sta_0046ad90._8_8_;
        uVar20 = s_r____Range__all_______0_<__r_sta_0046ad90._0_8_;
        *(undefined8 *)(pcVar17 + 0x40) = s_r____Range__all_______0_<__r_sta_0046ad90._64_8_;
        *(undefined4 *)(pcVar17 + 0x48) = uVar4;
                    /* try { // try from 003b9870 to 004b9873 has its CatchHandler @ 003b9ea0 */
        *(undefined8 *)pcVar17 = uVar20;
        *(undefined8 *)(pcVar17 + 8) = uVar9;
        *(undefined8 *)(pcVar17 + 0x10) = uVar10;
        *(undefined8 *)(pcVar17 + 0x18) = uVar11;
        *(undefined8 *)(pcVar17 + 0x20) = uVar12;
        *(undefined8 *)(pcVar17 + 0x28) = uVar13;
                    /* try { // try from 003b9884 to 004b9887 has its CatchHandler @ 003b9e9c */
        *(undefined8 *)(pcVar17 + 0x30) = uVar14;
        *(undefined8 *)(pcVar17 + 0x38) = uVar15;
        error(-0xd7,(String *)&local_10,"cv::UMat::UMat(const cv::UMat&, const cv::Range*)",
              "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x184);
        String::deallocate((String *)&local_10);
      }
      lVar28 = lVar28 + 4;
      pRVar27 = pRVar27 + 8;
    } while (lVar28 != ((ulong)(iVar2 - 1) + 1) * 4);
                    /* try { // try from 003b98a8 to 004b98ab has its CatchHandler @ 003b9810 */
    if (this != param_1) goto LAB_003b98ac;
  }
  lVar28 = 0;
  iVar16 = 0;
  do {
    iVar3 = *(int *)param_2;
    iVar5 = *(int *)(param_2 + 4);
                    /* try { // try from 003b9998 to 004b99d3 has its CatchHandler @ 003b9e1c */
    if (((iVar3 != -0x80000000) || (iVar5 != 0x7fffffff)) &&
       ((iVar5 != *(int *)(*(long *)(this + 0x30) + lVar28) || (iVar3 != 0)))) {
      lVar26 = *(long *)(this + 0x38);
      lVar24 = *(long *)(this + 0x28);
      *(int *)(*(long *)(this + 0x30) + lVar28) = iVar5 - iVar3;
      *(long *)(this + 0x28) = lVar24 + (long)iVar3 * *(long *)(lVar26 + lVar28 * 2);
      *(uint *)this = *(uint *)this | 0x8000;
    }
    iVar16 = iVar16 + 1;
    param_2 = param_2 + 8;
    lVar28 = lVar28 + 4;
  } while (iVar16 < iVar2);
LAB_003b99f4:
  iVar2 = *(int *)(this + 4);
  if ((iVar2 < 1) || (piVar18 = *(int **)(this + 0x30), 1 < *piVar18)) {
    iVar16 = 0;
  }
  else {
    iVar16 = 0;
    do {
      piVar18 = piVar18 + 1;
      iVar16 = iVar16 + 1;
      if (iVar16 == iVar2) break;
    } while (*piVar18 < 2);
  }
  iVar3 = iVar2 + -1;
  if (iVar16 < iVar3) {
    lVar24 = *(long *)(this + 0x38);
    lVar26 = (long)iVar3 * 8;
                    /* try { // try from 003b9a50 to 004b9a53 has its CatchHandler @ 003b9e7c */
    lVar28 = (long)iVar3 * 4;
    lVar25 = lVar26 + -8;
    if (*(ulong *)(lVar24 + lVar25) <=
        (ulong)((long)*(int *)(*(long *)(this + 0x30) + lVar28) * *(long *)(lVar24 + lVar26))) {
      plVar19 = (long *)(lVar24 + lVar25);
      piVar18 = (int *)(*(long *)(this + 0x30) + lVar28 + -4);
      do {
        if (plVar19 ==
            (long *)(lVar24 + ((long)(iVar2 + -2) - (ulong)(uint)((iVar2 + -2) - iVar16)) * 8))
        goto LAB_003b9ab8;
        iVar3 = *piVar18;
        lVar28 = *plVar19;
        puVar1 = (ulong *)(plVar19 + -1);
        plVar19 = plVar19 + -1;
        piVar18 = piVar18 + -1;
      } while (*puVar1 <= (ulong)(iVar3 * lVar28));
    }
                    /* try { // try from 003b9af0 to 004b9b43 has its CatchHandler @ 003b9810 */
    *(uint *)this = *(uint *)this & 0xffffbfff;
  }
  else {
LAB_003b9ab8:
    *(uint *)this = *(uint *)this | 0x4000;
  }
                    /* try { // try from 003b9ac4 to 004b9ac7 has its CatchHandler @ 003b9e84 */
  return;
}


==================================================================

### FUNC 003b9c00 (1828 bytes) name=UMat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::UMat(cv::UMat const&, cv::Range const&, cv::Range const&) */

void __thiscall cv::UMat::UMat(UMat *this,UMat *param_1,Range *param_2,Range *param_3)

{
  int *piVar1;
  undefined4 uVar2;
  char cVar3;
  bool bVar4;
  undefined2 uVar5;
  int iVar6;
  ulong uVar7;
  undefined8 uVar8;
  char *pcVar9;
  void *pvVar10;
  uint uVar11;
  uint uVar12;
  undefined8 *puVar13;
  undefined4 *puVar14;
  undefined8 *puVar15;
  ulong uVar16;
  Range *pRVar17;
  int iVar18;
  long lVar19;
  undefined4 local_4a0;
  int local_49c;
  undefined4 local_498;
  undefined4 local_494;
  undefined8 local_490;
  undefined4 local_488;
  long local_480;
  undefined8 local_478;
  undefined8 *local_468;
  Range *local_450;
  long local_448;
  undefined8 local_440 [136];
  
  *(undefined8 *)this = DAT_003ba390;
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  iVar18 = *(int *)(param_1 + 4);
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(UMat **)(this + 0x30) = this + 8;
  *(UMat **)(this + 0x38) = this + 0x40;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x40) = 0;
  if (iVar18 < 2) {
    local_450 = (Range *)0x0;
    local_448 = 0;
    pcVar9 = (char *)String::allocate((String *)&local_450,0xb);
    cVar3 = s_m_dims_>__2_0046ade0[10];
    uVar5 = s_m_dims_>__2_0046ade0._8_2_;
    *(undefined8 *)pcVar9 = s_m_dims_>__2_0046ade0._0_8_;
    *(undefined2 *)(pcVar9 + 8) = uVar5;
    pcVar9[10] = cVar3;
    error(-0xd7,(String *)&local_450,
          "cv::UMat::UMat(const cv::UMat&, const cv::Range&, const cv::Range&)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x137);
    String::deallocate((String *)&local_450);
    iVar18 = *(int *)(param_1 + 4);
  }
  if (iVar18 < 3) {
    if (this != param_1) {
                    /* try { // try from 003b9ef8 to 004b9f3b has its CatchHandler @ 003b9ea8 */
      if (*(long *)(param_1 + 0x20) != 0) {
        piVar1 = (int *)(*(long *)(param_1 + 0x20) + 0x10);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = *piVar1 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (*(long *)(this + 0x20) != 0) {
        piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
        do {
          iVar18 = *piVar1;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar4) {
            *piVar1 = iVar18 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        if (iVar18 == 1) {
          deallocate(this);
        }
      }
      if (*(int *)(this + 4) < 1) {
        *(undefined4 *)this = *(undefined4 *)param_1;
        *(undefined8 *)(this + 0x20) = 0;
LAB_003b9f7c:
        iVar18 = *(int *)(param_1 + 4);
        if (2 < iVar18) goto LAB_003ba0d4;
        puVar15 = *(undefined8 **)(param_1 + 0x38);
        puVar13 = *(undefined8 **)(this + 0x38);
        uVar2 = *(undefined4 *)(param_1 + 8);
        *(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
        *(int *)(this + 4) = iVar18;
                    /* try { // try from 003b9fa0 to 004b9fc3 has its CatchHandler @ 003bad30 */
        *(undefined4 *)(this + 8) = uVar2;
        *puVar13 = *puVar15;
        puVar13[1] = puVar15[1];
      }
      else {
        iVar18 = 0;
        puVar14 = *(undefined4 **)(this + 0x30);
        do {
          *puVar14 = 0;
          iVar18 = iVar18 + 1;
          puVar14 = puVar14 + 1;
        } while (iVar18 < *(int *)(this + 4));
                    /* try { // try from 003b9f68 to 004b9f6b has its CatchHandler @ 003bb3e8 */
        uVar2 = *(undefined4 *)param_1;
                    /* try { // try from 003b9f70 to 004b9f9b has its CatchHandler @ 003b9ea8 */
        *(undefined8 *)(this + 0x20) = 0;
        *(undefined4 *)this = uVar2;
        if (*(int *)(this + 4) < 3) goto LAB_003b9f7c;
LAB_003ba0d4:
        copySize(this,param_1);
      }
      *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
      if (*(int *)(this + 0x18) == 0) {
        *(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18);
      }
      uVar8 = *(undefined8 *)(param_1 + 0x20);
      *(undefined8 *)(this + 0x28) = *(undefined8 *)(param_1 + 0x28);
      *(undefined8 *)(this + 0x20) = uVar8;
    }
    iVar18 = *(int *)param_2;
    if (iVar18 == -0x80000000) {
      if (*(int *)(param_2 + 4) != 0x7fffffff) goto LAB_003ba100;
    }
    else {
      if (iVar18 == 0) {
        iVar6 = *(int *)(param_2 + 4);
        if (*(int *)(this + 8) == iVar6) goto LAB_003ba004;
      }
      else {
        if (iVar18 < 0) goto LAB_003ba100;
        iVar6 = *(int *)(param_2 + 4);
      }
                    /* try { // try from 003ba0f8 to 004ba11b has its CatchHandler @ 003baf54 */
      if ((iVar6 < iVar18) || (*(int *)(param_1 + 8) < iVar6)) {
LAB_003ba100:
        local_450 = (Range *)0x0;
        local_448 = 0;
        pvVar10 = (void *)String::allocate((String *)&local_450,0x53);
        memcpy(pvVar10,
               "0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows"
               ,0x53);
        error(-0xd7,(String *)&local_450,
              "cv::UMat::UMat(const cv::UMat&, const cv::Range&, const cv::Range&)",
              "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x146);
        String::deallocate((String *)&local_450);
        iVar18 = *(int *)param_2;
        iVar6 = *(int *)(param_2 + 4);
      }
                    /* try { // try from 003ba160 to 004ba163 has its CatchHandler @ 003bb26c */
      *(int *)(this + 8) = iVar6 - iVar18;
      *(long *)(this + 0x28) = *(long *)(this + 0x28) + (long)iVar18 * *(long *)(this + 0x40);
      *(uint *)this = *(uint *)this | 0x8000;
    }
LAB_003ba004:
    iVar18 = *(int *)param_3;
    if (iVar18 == -0x80000000) {
      if (*(int *)(param_3 + 4) != 0x7fffffff) goto LAB_003ba27c;
    }
    else {
      if (iVar18 == 0) {
        iVar6 = *(int *)(param_3 + 4);
        if (*(int *)(this + 0xc) == iVar6) goto LAB_003ba02c;
      }
      else {
        if (iVar18 < 0) goto LAB_003ba27c;
        iVar6 = *(int *)(param_3 + 4);
      }
      if ((iVar6 < iVar18) || (*(int *)(param_1 + 0xc) < iVar6)) {
LAB_003ba27c:
        local_450 = (Range *)0x0;
        local_448 = 0;
        pvVar10 = (void *)String::allocate((String *)&local_450,0x53);
        memcpy(pvVar10,
               "0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols"
               ,0x53);
        error(-0xd7,(String *)&local_450,
              "cv::UMat::UMat(const cv::UMat&, const cv::Range&, const cv::Range&)",
              "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x14e);
        String::deallocate((String *)&local_450);
        iVar18 = *(int *)param_3;
        iVar6 = *(int *)(param_3 + 4);
      }
      *(int *)(this + 0xc) = iVar6 - iVar18;
      if (*(int *)(this + 4) < 1) {
        lVar19 = 0;
      }
      else {
        lVar19 = (long)iVar18 *
                 *(long *)(*(long *)(this + 0x38) + (long)*(int *)(this + 4) * 8 + -8);
      }
      uVar12 = 0xffffbfff;
      if (*(int *)(param_1 + 0xc) <= iVar6 - iVar18) {
        uVar12 = 0xffffffff;
      }
      *(long *)(this + 0x28) = *(long *)(this + 0x28) + lVar19;
      *(uint *)this = uVar12 & *(uint *)this | 0x8000;
    }
LAB_003ba02c:
                    /* try { // try from 003ba02c to 004ba02f has its CatchHandler @ 003bb344 */
    if (*(int *)(this + 8) == 1) {
      *(uint *)this = *(uint *)this | 0x4000;
    }
    else if (*(int *)(this + 8) < 1) goto LAB_003ba04c;
    if (0 < *(int *)(this + 0xc)) {
      return;
    }
LAB_003ba04c:
    if (*(long *)(this + 0x20) != 0) {
      piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
      do {
        iVar18 = *piVar1;
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar4) {
          *piVar1 = iVar18 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      if (iVar18 == 1) {
        deallocate(this);
      }
    }
                    /* try { // try from 003ba078 to 004ba07b has its CatchHandler @ 003bb334 */
                    /* try { // try from 003ba080 to 004ba0f3 has its CatchHandler @ 003bb344 */
    if (0 < *(int *)(this + 4)) {
      iVar18 = 0;
      puVar14 = *(undefined4 **)(this + 0x30);
      do {
        *puVar14 = 0;
        iVar18 = iVar18 + 1;
        puVar14 = puVar14 + 1;
      } while (iVar18 < *(int *)(this + 4));
    }
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined4 *)(this + 0xc) = 0;
    *(undefined4 *)(this + 8) = 0;
    return;
  }
  lVar19 = (long)iVar18;
  puVar13 = local_440;
  do {
    puVar15 = puVar13 + 2;
    puVar13[1] = 0;
    *puVar13 = 0;
    puVar13 = puVar15;
  } while (puVar15 != (undefined8 *)&stack0x00000000);
  local_450 = (Range *)local_440;
  local_448 = 0x88;
  if (iVar18 < 0x89) {
    local_440[0] = *(undefined8 *)param_2;
    local_440[1] = *(undefined8 *)param_3;
    if (iVar18 == 3) goto LAB_003b9d3c;
LAB_003b9d74:
    uVar11 = (iVar18 - 4U >> 1) + 1;
    iVar6 = uVar11 * 2;
    uVar12 = 0;
    pRVar17 = local_450;
    do {
      *(undefined8 *)(pRVar17 + 0x18) = _UNK_003ba3a8;
      *(undefined8 *)(pRVar17 + 0x10) = _DAT_003ba3a0;
      uVar12 = uVar12 + 1;
      pRVar17 = pRVar17 + 0x10;
    } while (uVar12 < uVar11);
    uVar7 = (ulong)(iVar6 + 2);
                    /* try { // try from 003b9d9c to 004b9d9f has its CatchHandler @ 003b9e84 */
    if (iVar6 == iVar18 + -2) goto LAB_003b9db8;
LAB_003b9da0:
    uVar7 = -(uVar7 >> 0x1f) & 0xfffffff800000000 | uVar7 << 3;
                    /* try { // try from 003b9da8 to 004b9dab has its CatchHandler @ 003b9e7c */
    *(undefined4 *)(local_450 + uVar7) = 0x80000000;
    *(undefined4 *)(local_450 + uVar7 + 4) = 0x7fffffff;
  }
  else {
    local_450 = operator_new__(lVar19 << 3);
    uVar16 = 0;
    uVar7 = (lVar19 - 2U >> 1) + 1;
    pRVar17 = local_450;
    do {
      *(undefined8 *)(pRVar17 + 8) = 0;
      *(undefined8 *)pRVar17 = 0;
      uVar16 = uVar16 + 1;
      pRVar17 = pRVar17 + 0x10;
    } while (uVar16 < uVar7);
    if (lVar19 != uVar7 * 2) {
      *(undefined4 *)(local_450 + uVar7 * 0x10) = 0;
      *(undefined4 *)(local_450 + uVar7 * 0x10 + 4) = 0;
    }
    iVar18 = *(int *)(param_1 + 4);
    *(undefined8 *)local_450 = *(undefined8 *)param_2;
    *(undefined8 *)(local_450 + 8) = *(undefined8 *)param_3;
    if (2 < iVar18) {
      if (iVar18 != 3) goto LAB_003b9d74;
LAB_003b9d3c:
      uVar7 = 2;
      goto LAB_003b9da0;
    }
  }
LAB_003b9db8:
  local_448 = lVar19;
                    /* try { // try from 003b9dc8 to 004b9dcb has its CatchHandler @ 003b9e18 */
  UMat((UMat *)&local_4a0,param_1,local_450);
  if (local_480 != 0) {
    piVar1 = (int *)(local_480 + 0x10);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (*(long *)(this + 0x20) != 0) {
                    /* try { // try from 003b9df0 to 004b9df3 has its CatchHandler @ 003b9810 */
    piVar1 = (int *)(*(long *)(this + 0x20) + 0x10);
    do {
      iVar18 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar18 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 003b9e00 to 004b9e03 has its CatchHandler @ 003b9e84 */
    } while (cVar3 != '\0');
    if (iVar18 == 1) {
      deallocate(this);
    }
  }
                    /* try { // try from 003b9e10 to 004b9e13 has its CatchHandler @ 003b9e7c */
  if (*(int *)(this + 4) < 1) {
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined4 *)this = local_4a0;
LAB_003b9e48:
    if (local_49c < 3) {
      puVar13 = *(undefined8 **)(this + 0x38);
      *(int *)(this + 4) = local_49c;
      *(undefined4 *)(this + 8) = local_498;
      uVar8 = *local_468;
      *(undefined4 *)(this + 0xc) = local_494;
      *puVar13 = uVar8;
                    /* catch() { ... } // from try @ 003b9948 with catch @ 003b9e7c
                       catch() { ... } // from try @ 003b9a50 with catch @ 003b9e7c
                       catch() { ... } // from try @ 003b9da8 with catch @ 003b9e7c
                       catch() { ... } // from try @ 003b9e10 with catch @ 003b9e7c */
      puVar13[1] = local_468[1];
      goto LAB_003b9e80;
    }
  }
  else {
                    /* catch() { ... } // from try @ 003b9dc8 with catch @ 003b9e18
                       try { // try from 003b9e18 to 004b9e1b has its CatchHandler @ 003b9810 */
                    /* catch() { ... } // from try @ 003b9998 with catch @ 003b9e1c
                       catch() { ... } // from try @ 003b9b70 with catch @ 003b9e1c */
    iVar18 = 0;
    puVar14 = *(undefined4 **)(this + 0x30);
    do {
      *puVar14 = 0;
      iVar18 = iVar18 + 1;
      puVar14 = puVar14 + 1;
    } while (iVar18 < *(int *)(this + 4));
    *(undefined8 *)(this + 0x20) = 0;
    *(undefined4 *)this = local_4a0;
    if (*(int *)(this + 4) < 3) goto LAB_003b9e48;
  }
  copySize(this,(UMat *)&local_4a0);
LAB_003b9e80:
                    /* catch() { ... } // from try @ 003b990c with catch @ 003b9e84
                       catch() { ... } // from try @ 003b9ac4 with catch @ 003b9e84
                       catch() { ... } // from try @ 003b9d9c with catch @ 003b9e84
                       catch() { ... } // from try @ 003b9e00 with catch @ 003b9e84 */
  *(undefined8 *)(this + 0x10) = local_490;
                    /* catch() { ... } // from try @ 003b98d8 with catch @ 003b9e8c */
  if (*(int *)(this + 0x18) == 0) {
    *(undefined4 *)(this + 0x18) = local_488;
  }
                    /* catch() { ... } // from try @ 003b9884 with catch @ 003b9e9c */
                    /* catch() { ... } // from try @ 003b9870 with catch @ 003b9ea0 */
  *(long *)(this + 0x20) = local_480;
                    /* catch() { ... } // from try @ 003b9ef8 with catch @ 003b9ea8
                       catch() { ... } // from try @ 003b9f70 with catch @ 003b9ea8
                       catch() { ... } // from try @ 003bac84 with catch @ 003b9ea8
                       catch() { ... } // from try @ 003badc4 with catch @ 003b9ea8
                       catch() { ... } // from try @ 003bb3f8 with catch @ 003b9ea8
                       catch() { ... } // from try @ 003bb418 with catch @ 003b9ea8 */
  *(undefined8 *)(this + 0x28) = local_478;
  ~UMat((UMat *)&local_4a0);
  if ((local_450 != (Range *)local_440) && (local_450 != (Range *)0x0)) {
    operator_delete__(local_450);
  }
  return;
}


==================================================================

### FUNC 003ba3b0 (580 bytes) name=diag

/* cv::UMat::diag(int) const */

void cv::UMat::diag(int param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  char cVar6;
  bool bVar7;
  undefined1 uVar8;
  uint uVar9;
  UMat *pUVar10;
  undefined8 *puVar11;
  long lVar12;
  long lVar13;
  int in_w1;
  long *plVar14;
  int iVar15;
  long *plVar16;
  int *piVar17;
  undefined8 uVar18;
  UMat *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  pUVar10 = (UMat *)(ulong)(uint)param_1;
  iVar15 = *(int *)(pUVar10 + 4);
  if (2 < iVar15) {
    local_10 = 0;
    local_8 = 0;
    puVar11 = (undefined8 *)String::allocate((String *)&local_10,9);
    uVar8 = LAB_0046aea8;
    *puVar11 = DAT_0046aea0;
    *(undefined1 *)(puVar11 + 1) = uVar8;
    error(-0xd7,(String *)&local_10,"cv::UMat cv::UMat::diag(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x196);
    String::deallocate((String *)&local_10);
    iVar15 = *(int *)(pUVar10 + 4);
  }
  uVar1 = *(undefined4 *)pUVar10;
  uVar2 = *(undefined4 *)(pUVar10 + 8);
  uVar3 = *(undefined4 *)(pUVar10 + 0xc);
  uVar18 = *(undefined8 *)(pUVar10 + 0x10);
  uVar4 = *(undefined4 *)(pUVar10 + 0x18);
  lVar12 = *(long *)(pUVar10 + 0x20);
  *(undefined8 *)(in_x8 + 0x28) = *(undefined8 *)(pUVar10 + 0x28);
  *(undefined4 *)in_x8 = uVar1;
  *(int *)(in_x8 + 4) = iVar15;
  *(undefined4 *)(in_x8 + 8) = uVar2;
  *(undefined4 *)(in_x8 + 0xc) = uVar3;
  *(undefined8 *)(in_x8 + 0x10) = uVar18;
  *(undefined4 *)(in_x8 + 0x18) = uVar4;
  *(long *)(in_x8 + 0x20) = lVar12;
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  if (lVar12 != 0) {
    piVar17 = (int *)(lVar12 + 0x10);
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(piVar17,0x10);
      if (bVar7) {
        *piVar17 = *piVar17 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  iVar15 = *(int *)(pUVar10 + 4);
  if (iVar15 < 3) {
    plVar14 = *(long **)(pUVar10 + 0x38);
    plVar16 = *(long **)(in_x8 + 0x38);
    *plVar16 = *plVar14;
    plVar16[1] = plVar14[1];
  }
  else {
    *(undefined4 *)(in_x8 + 4) = 0;
    copySize(in_x8,pUVar10);
    iVar15 = *(int *)(pUVar10 + 4);
    plVar16 = *(long **)(in_x8 + 0x38);
  }
  if (iVar15 < 1) {
    lVar12 = 0;
  }
  else {
    lVar12 = *(long *)(*(long *)(pUVar10 + 0x38) + (long)iVar15 * 8 + -8);
  }
  if (in_w1 < 0) {
    iVar5 = *(int *)(pUVar10 + 8);
    iVar15 = *(int *)(pUVar10 + 0xc);
    *(long *)(in_x8 + 0x28) = *(long *)(in_x8 + 0x28) - (long)in_w1 * **(long **)(pUVar10 + 0x38);
    if (in_w1 + iVar5 < iVar15) {
      iVar15 = in_w1 + iVar5;
    }
  }
  else {
    iVar15 = *(int *)(pUVar10 + 8);
    if (*(int *)(pUVar10 + 0xc) - in_w1 < *(int *)(pUVar10 + 8)) {
      iVar15 = *(int *)(pUVar10 + 0xc) - in_w1;
    }
    *(long *)(in_x8 + 0x28) = *(long *)(in_x8 + 0x28) + lVar12 * in_w1;
  }
  piVar17 = *(int **)(in_x8 + 0x30);
  *(int *)(in_x8 + 8) = iVar15;
  lVar13 = *plVar16;
  if (iVar15 < 2) {
    lVar12 = 0;
  }
  *piVar17 = iVar15;
  *(undefined4 *)(in_x8 + 0xc) = 1;
  piVar17[1] = 1;
  *plVar16 = lVar12 + lVar13;
  if (*(int *)(in_x8 + 8) < 2) {
    uVar9 = *(uint *)in_x8 | 0x4000;
  }
  else {
    uVar9 = *(uint *)in_x8 & 0xffffbfff;
  }
  piVar17 = *(int **)(pUVar10 + 0x30);
  *(uint *)in_x8 = uVar9;
  if ((piVar17[1] != 1) || (*piVar17 != 1)) {
    *(uint *)in_x8 = uVar9 | 0x8000;
  }
  return;
}


==================================================================

### FUNC 003ba608 (356 bytes) name=locateROI

/* cv::UMat::locateROI(cv::Size_<int>&, cv::Point_<int>&) const */

void __thiscall cv::UMat::locateROI(UMat *this,Size_ *param_1,Point_ *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  long lVar6;
  char *pcVar7;
  ulong *puVar8;
  ulong uVar9;
  ulong uVar10;
  int iVar11;
  ulong uVar12;
  int iVar13;
  long lVar14;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar13 = *(int *)(this + 4);
  if (iVar13 < 3) {
    puVar8 = *(ulong **)(this + 0x38);
    uVar10 = *puVar8;
    if (uVar10 != 0) goto joined_r0x003ba748;
  }
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x18);
  uVar5 = s_dims_<__2_&&_step[0]_>_0_0046afc0._8_8_;
  uVar4 = s_dims_<__2_&&_step[0]_>_0_0046afc0._0_8_;
  *(undefined8 *)(pcVar7 + 0x10) = s_dims_<__2_&&_step[0]_>_0_0046afc0._16_8_;
  *(undefined8 *)pcVar7 = uVar4;
  *(undefined8 *)(pcVar7 + 8) = uVar5;
  error(-0xd7,(String *)&local_10,"void cv::UMat::locateROI(cv::Size&, cv::Point&) const",
        "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x1b8);
  String::deallocate((String *)&local_10);
  iVar13 = *(int *)(this + 4);
  puVar8 = *(ulong **)(this + 0x38);
  uVar10 = *puVar8;
joined_r0x003ba748:
  if (iVar13 < 1) {
    uVar12 = 0;
    uVar9 = *(ulong *)(this + 0x28);
    lVar6 = *(long *)(*(long *)(this + 0x20) + 0x28);
  }
  else {
    uVar9 = *(ulong *)(this + 0x28);
    uVar12 = puVar8[(long)iVar13 + -1];
    lVar6 = *(long *)(*(long *)(this + 0x20) + 0x28);
  }
  if (uVar9 == 0) {
    iVar11 = 0;
    iVar13 = iVar11;
  }
  else {
    iVar13 = 0;
    if (uVar10 != 0) {
      iVar13 = (int)(uVar9 / uVar10);
    }
    iVar11 = 0;
    if (uVar12 != 0) {
      iVar11 = (int)((uVar9 - (long)iVar13 * uVar10) / uVar12);
    }
  }
  iVar3 = *(int *)(this + 8);
  iVar1 = iVar11 + *(int *)(this + 0xc);
  lVar14 = *(long *)(this + 0x40);
  *(int *)param_2 = iVar11;
  *(int *)(param_2 + 4) = iVar13;
  iVar11 = 0;
  if (uVar10 != 0) {
    iVar11 = (int)((lVar6 - (long)iVar1 * uVar12) / uVar10);
  }
  iVar2 = iVar11 + 1;
  if (iVar11 + 1 < iVar13 + iVar3) {
    iVar2 = iVar13 + iVar3;
  }
  *(int *)(param_1 + 4) = iVar2;
  iVar13 = 0;
  if (uVar12 != 0) {
    iVar13 = (int)((ulong)(lVar6 - (iVar2 + -1) * lVar14) / uVar12);
  }
  if (iVar1 <= iVar13) {
    iVar1 = iVar13;
  }
  *(int *)param_1 = iVar1;
  return;
}


==================================================================

### FUNC 003ba780 (508 bytes) name=adjustROI

/* cv::UMat::adjustROI(int, int, int, int) */

UMat * __thiscall cv::UMat::adjustROI(UMat *this,int param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char *pcVar7;
  long *plVar8;
  int *piVar9;
  long lVar10;
  int local_18;
  int local_14;
  int local_10 [2];
  undefined8 local_8;
  
  iVar3 = *(int *)(this + 4);
  if ((2 < iVar3) || (**(long **)(this + 0x38) == 0)) {
    local_10[0] = 0;
    local_10[1] = 0;
    local_8 = 0;
    pcVar7 = (char *)String::allocate((String *)local_10,0x18);
    uVar6 = s_dims_<__2_&&_step[0]_>_0_0046afc0._8_8_;
    uVar5 = s_dims_<__2_&&_step[0]_>_0_0046afc0._0_8_;
    *(undefined8 *)(pcVar7 + 0x10) = s_dims_<__2_&&_step[0]_>_0_0046afc0._16_8_;
    *(undefined8 *)pcVar7 = uVar5;
    *(undefined8 *)(pcVar7 + 8) = uVar6;
    error(-0xd7,(String *)local_10,"cv::UMat& cv::UMat::adjustROI(int, int, int, int)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x1ce);
    String::deallocate((String *)local_10);
    iVar3 = *(int *)(this + 4);
  }
  if (iVar3 < 1) {
    lVar10 = 0;
  }
  else {
    lVar10 = *(long *)(*(long *)(this + 0x38) + (long)iVar3 * 8 + -8);
  }
  local_10[0] = 0;
  local_10[1] = 0;
  local_14 = 0;
  local_18 = 0;
  locateROI(this,(Size_ *)&local_18,(Point_ *)local_10);
  iVar3 = local_10[1] - param_1;
  if (iVar3 < 0) {
    iVar3 = 0;
  }
  iVar1 = local_10[1] + *(int *)(this + 8) + param_2;
  if (local_14 < iVar1) {
    iVar1 = local_14;
  }
  iVar4 = local_10[0] - param_3;
  if (iVar4 < 0) {
    iVar4 = 0;
  }
  iVar2 = local_10[0] + *(int *)(this + 0xc) + param_4;
  piVar9 = *(int **)(this + 0x30);
  if (local_18 < iVar2) {
    iVar2 = local_18;
  }
  *(long *)(this + 0x28) =
       *(long *)(this + 0x28) + (long)(iVar3 - local_10[1]) * *(long *)(this + 0x40) +
       lVar10 * (iVar4 - local_10[0]);
  *(int *)(this + 8) = iVar1 - iVar3;
  *(int *)(this + 0xc) = iVar2 - iVar4;
  *piVar9 = iVar1 - iVar3;
  plVar8 = *(long **)(this + 0x38);
  piVar9[1] = *(int *)(this + 0xc);
  if ((lVar10 * *(int *)(this + 0xc) - *plVar8 != 0) && (*(int *)(this + 8) != 1)) {
    *(uint *)this = *(uint *)this & 0xffffbfff;
    return this;
  }
  *(uint *)this = *(uint *)this | 0x4000;
  return this;
}


==================================================================

### FUNC 003ba990 (1152 bytes) name=reshape

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::reshape(int, int) const */

void cv::UMat::reshape(int param_1,int param_2)

{
  uint uVar1;
  int *piVar2;
  undefined4 uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  char cVar7;
  bool bVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined2 uVar14;
  undefined1 uVar15;
  UMat *pUVar16;
  long lVar17;
  undefined8 *puVar18;
  void *__dest;
  char *pcVar19;
  undefined8 uVar20;
  undefined8 *puVar21;
  uint in_w2;
  long lVar22;
  long lVar23;
  undefined8 uVar24;
  UMat *in_x8;
  int iVar25;
  undefined8 uVar26;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  pUVar16 = (UMat *)(ulong)(uint)param_1;
  uVar24 = *(undefined8 *)(pUVar16 + 0x10);
  uVar3 = *(undefined4 *)(pUVar16 + 0x18);
  lVar17 = *(long *)(pUVar16 + 0x20);
  iVar25 = (*(uint *)pUVar16 >> 3 & 0x1ff) + 1;
  uVar26 = *(undefined8 *)(pUVar16 + 8);
  uVar20 = *(undefined8 *)(pUVar16 + 0x28);
  *(undefined8 *)in_x8 = *(undefined8 *)pUVar16;
  *(undefined8 *)(in_x8 + 8) = uVar26;
  *(undefined8 *)(in_x8 + 0x10) = uVar24;
  *(undefined4 *)(in_x8 + 0x18) = uVar3;
  *(long *)(in_x8 + 0x20) = lVar17;
  *(undefined8 *)(in_x8 + 0x28) = uVar20;
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  if (lVar17 != 0) {
    piVar2 = (int *)(lVar17 + 0x10);
    do {
      cVar7 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar8) {
        *piVar2 = *piVar2 + 1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
  }
  if (*(int *)(pUVar16 + 4) < 3) {
    puVar21 = *(undefined8 **)(pUVar16 + 0x38);
    puVar18 = *(undefined8 **)(in_x8 + 0x38);
    *puVar18 = *puVar21;
    puVar18[1] = puVar21[1];
  }
  else {
    *(undefined4 *)(in_x8 + 4) = 0;
    copySize(in_x8,pUVar16);
    if (2 < *(int *)(pUVar16 + 4)) {
      if ((in_w2 == 0) && (param_2 != 0)) {
        lVar17 = (long)(*(int *)(pUVar16 + 4) + -1);
        lVar22 = lVar17 * 4;
                    /* try { // try from 003bac54 to 004bac57 has its CatchHandler @ 003bad30 */
        iVar5 = iVar25 * *(int *)(*(long *)(pUVar16 + 0x30) + lVar22);
        iVar6 = 0;
        if (param_2 != 0) {
          iVar6 = iVar5 / param_2;
        }
        if (iVar5 - iVar6 * param_2 == 0) {
          uVar4 = *(uint *)in_x8;
          lVar23 = *(long *)(in_x8 + 0x30);
          uVar1 = (param_2 + -1) * 8;
          *(uint *)in_x8 = uVar4 & 0xfffff007 | uVar1;
          iVar5 = 0;
          if (param_2 != 0) {
            iVar5 = (iVar25 * *(int *)(lVar23 + lVar22)) / param_2;
          }
          *(long *)(*(long *)(in_x8 + 0x38) + lVar17 * 8) =
               (long)(int)(((uVar1 & 0xff8) >> 3) + 1 <<
                          (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3));
          *(int *)(lVar23 + lVar22) = iVar5;
          return;
        }
      }
      local_50 = 0;
      local_48 = 0;
      puVar18 = (undefined8 *)String::allocate((String *)&local_50,9);
      uVar15 = LAB_0046aea8;
                    /* try { // try from 003bac84 to 004bace3 has its CatchHandler @ 003b9ea8 */
      *puVar18 = DAT_0046aea0;
      *(undefined1 *)(puVar18 + 1) = uVar15;
      error(-0xd7,(String *)&local_50,"cv::UMat cv::UMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x1ec);
      String::deallocate((String *)&local_50);
    }
  }
  if (param_2 == 0) {
    param_2 = iVar25;
  }
  iVar25 = iVar25 * *(int *)(pUVar16 + 0xc);
  if (iVar25 < param_2) {
joined_r0x003bab68:
    if (in_w2 == 0) {
      in_w2 = 0;
      if (param_2 != 0) {
        in_w2 = (iVar25 * *(int *)(pUVar16 + 8)) / param_2;
      }
      goto LAB_003baa70;
    }
  }
  else {
    iVar5 = 0;
    if (param_2 != 0) {
      iVar5 = iVar25 / param_2;
    }
    if (iVar25 - iVar5 * param_2 != 0) goto joined_r0x003bab68;
LAB_003baa70:
    if (in_w2 == 0) goto LAB_003baa74;
  }
  if (*(uint *)(pUVar16 + 8) != in_w2) {
    uVar1 = iVar25 * *(uint *)(pUVar16 + 8);
    if ((*(uint *)pUVar16 >> 0xe & 1) == 0) {
      local_40 = 0;
      local_38 = 0;
      puVar18 = (undefined8 *)String::allocate((String *)&local_40,0x48);
      uVar11 = DAT_00462218;
      uVar10 = DAT_00462210;
      uVar9 = DAT_00462208;
      uVar26 = DAT_00462200;
      uVar24 = DAT_004621f8;
      uVar20 = DAT_004621f0;
                    /* try { // try from 003badc4 to 004bae93 has its CatchHandler @ 003b9ea8 */
      puVar18[8] = s_changed_00462230._0_8_;
      uVar13 = _DAT_00462228;
      uVar12 = DAT_00462220;
      *puVar18 = uVar20;
      puVar18[1] = uVar24;
      puVar18[2] = uVar26;
      puVar18[3] = uVar9;
      puVar18[4] = uVar10;
      puVar18[5] = uVar11;
      puVar18[6] = uVar12;
      puVar18[7] = uVar13;
      error(-0xd,(String *)&local_40,"cv::UMat cv::UMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x1fb);
      String::deallocate((String *)&local_40);
    }
    if (uVar1 < in_w2) {
                    /* catch() { ... } // from try @ 003b9fa0 with catch @ 003bad30
                       catch() { ... } // from try @ 003bac54 with catch @ 003bad30
                       catch() { ... } // from try @ 003bb220 with catch @ 003bad30
                       catch() { ... } // from try @ 003bb40c with catch @ 003bad30 */
      local_30 = 0;
      local_28 = 0;
      pcVar19 = (char *)String::allocate((String *)&local_30,0x16);
      uVar14 = s_Bad_new_number_of_rows_00462240._20_2_;
      uVar24 = s_Bad_new_number_of_rows_00462240._8_8_;
      uVar20 = s_Bad_new_number_of_rows_00462240._0_8_;
      *(undefined4 *)(pcVar19 + 0x10) = s_Bad_new_number_of_rows_00462240._16_4_;
      *(undefined2 *)(pcVar19 + 0x14) = uVar14;
      *(undefined8 *)pcVar19 = uVar20;
      *(undefined8 *)(pcVar19 + 8) = uVar24;
      error(-0xd3,(String *)&local_30,"cv::UMat cv::UMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x1fe);
      String::deallocate((String *)&local_30);
    }
    iVar25 = 0;
    if (in_w2 != 0) {
      iVar25 = (int)uVar1 / (int)in_w2;
    }
    if (iVar25 * in_w2 != uVar1) {
      local_20 = 0;
      local_18 = 0;
      __dest = (void *)String::allocate((String *)&local_20,0x4e);
      memcpy(__dest,&DAT_00461f80,0x4e);
                    /* try { // try from 003babd0 to 004babd3 has its CatchHandler @ 003bb344 */
      error(-5,(String *)&local_20,"cv::UMat cv::UMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x204);
      String::deallocate((String *)&local_20);
    }
    *(uint *)(in_x8 + 8) = in_w2;
    **(long **)(in_x8 + 0x38) = (long)iVar25 * (0x88442211UL >> ((*(uint *)pUVar16 & 7) << 2) & 0xf)
    ;
  }
LAB_003baa74:
  iVar5 = 0;
  if (param_2 != 0) {
    iVar5 = iVar25 / param_2;
  }
  if (iVar5 * param_2 != iVar25) {
    local_10 = 0;
    local_8 = 0;
    puVar18 = (undefined8 *)String::allocate((String *)&local_10,0x3e);
    uVar14 = DAT_00462294;
    uVar3 = DAT_00462290;
    uVar11 = DAT_00462280;
    uVar10 = DAT_00462278;
    uVar9 = DAT_00462270;
    uVar26 = _LAB_00462268;
    uVar24 = DAT_00462260;
    uVar20 = DAT_00462258;
    puVar18[6] = DAT_00462288;
    *(undefined4 *)(puVar18 + 7) = uVar3;
    *(undefined2 *)((long)puVar18 + 0x3c) = uVar14;
    *puVar18 = uVar20;
    puVar18[1] = uVar24;
    puVar18[2] = uVar26;
    puVar18[3] = uVar9;
    puVar18[4] = uVar10;
    puVar18[5] = uVar11;
    error(-0xf,(String *)&local_10,"cv::UMat cv::UMat::reshape(int, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x20e);
    String::deallocate((String *)&local_10);
  }
  uVar4 = *(uint *)in_x8;
  *(int *)(in_x8 + 0xc) = iVar5;
  uVar1 = (param_2 + -1) * 8;
  *(uint *)in_x8 = uVar4 & 0xfffff007 | uVar1;
  *(long *)(*(long *)(in_x8 + 0x38) + 8) =
       (long)(int)(((uVar1 & 0xff8) >> 3) + 1 << (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3))
  ;
                    /* try { // try from 003bab4c to 004bab4f has its CatchHandler @ 003baf54 */
  return;
}


==================================================================

### FUNC 003bae74 (284 bytes) name=checkVector

/* cv::UMat::checkVector(int, int, bool) const */

ulong __thiscall cv::UMat::checkVector(UMat *this,int param_1,int param_2,bool param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  int *piVar7;
  
  uVar1 = *(uint *)this;
  if (((param_2 != (uVar1 & 7)) && (0 < param_2)) || (((uVar1 & 0x4000) == 0 && (param_3)))) {
    return 0xffffffff;
  }
  if (*(int *)(this + 4) == 2) {
    iVar2 = *(int *)(this + 8);
    iVar3 = *(int *)(this + 0xc);
    if (((iVar2 == 1) || (iVar3 == 1)) && (iVar5 = (uVar1 >> 3 & 0x1ff) + 1, param_1 == iVar5)) {
      lVar6 = (long)iVar3 * (long)iVar2;
    }
    else {
                    /* catch() { ... } // from try @ 003ba0f8 with catch @ 003baf54
                       catch() { ... } // from try @ 003bab4c with catch @ 003baf54
                       catch() { ... } // from try @ 003bb080 with catch @ 003baf54
                       catch() { ... } // from try @ 003bb32c with catch @ 003baf54 */
      uVar4 = 0xffffffff;
      if ((param_1 != iVar3) || ((uVar1 >> 3 & 0x1ff) != 0)) goto LAB_003baf0c;
      iVar5 = 1;
      lVar6 = (long)param_1 * (long)iVar2;
    }
  }
  else {
    uVar4 = 0xffffffff;
    if ((*(int *)(this + 4) != 3) || ((uVar1 >> 3 & 0x1ff) != 0)) goto LAB_003baf0c;
    piVar7 = *(int **)(this + 0x30);
    if ((piVar7[2] != param_1) || ((*piVar7 != 1 && (piVar7[1] != 1)))) goto LAB_003baf0c;
    if (((uVar1 & 0x4000) == 0) &&
       (*(long *)(*(long *)(this + 0x38) + 8) !=
        (long)piVar7[2] * *(long *)(*(long *)(this + 0x38) + 0x10))) {
      return 0xffffffff;
    }
    iVar5 = 1;
    lVar6 = (long)*piVar7 * (long)piVar7[1] * (long)piVar7[2];
  }
  uVar4 = 0;
  if ((long)param_1 != 0) {
    uVar4 = (ulong)(iVar5 * lVar6) / (ulong)(long)param_1;
  }
LAB_003baf0c:
  return uVar4 & 0xffffffff;
}


==================================================================

### FUNC 003baf90 (208 bytes) name=reshape

/* cv::UMat::reshape(int, int, int const*) const */

void cv::UMat::reshape(int param_1,int param_2,int *param_3)

{
  long in_x3;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  if (*(int *)((ulong)(uint)param_1 + 4) == (int)param_3) {
    if (in_x3 == 0) {
      reshape(param_1,param_2);
      return;
    }
    if (*(int *)((ulong)(uint)param_1 + 4) == 2) {
      reshape(param_1,param_2);
      return;
    }
  }
  local_10 = 0;
  local_8 = 0;
  String::allocate((String *)&local_10,0);
  error(-0xd5,(String *)&local_10,"cv::UMat cv::UMat::reshape(int, int, const int*) const",
        "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x238);
  String::deallocate((String *)&local_10);
  in_x8[1] = 0;
  in_x8[2] = 0;
  *in_x8 = 0x42ff0000;
  in_x8[3] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  in_x8[6] = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined4 **)(in_x8 + 0xc) = in_x8 + 2;
  *(undefined4 **)(in_x8 + 0xe) = in_x8 + 0x10;
  *(undefined8 *)(in_x8 + 0x12) = 0;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  return;
}


==================================================================

### FUNC 003bb080 (688 bytes) name=getMat

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::getMat(int) const */

void cv::UMat::getMat(int param_1)

{
  int *piVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  uint *puVar8;
  undefined8 *puVar9;
  char *pcVar10;
  uint in_w1;
  long lVar11;
  int iVar12;
  Mat *in_x8;
  undefined8 local_60;
  undefined8 local_58;
  long local_50;
  long local_48;
  long local_40;
  long local_38;
  undefined8 local_30;
  long local_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
                    /* try { // try from 003bb080 to 004bb083 has its CatchHandler @ 003baf54 */
  puVar8 = (uint *)(ulong)(uint)param_1;
  lVar11 = *(long *)(puVar8 + 8);
  if (lVar11 == 0) {
    *(undefined8 *)(in_x8 + 0x10) = 0;
    uVar6 = _UNK_003bb378;
    uVar5 = _DAT_003bb370;
    *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
    *(undefined8 *)(in_x8 + 0x18) = 0;
    *(undefined8 *)(in_x8 + 0x20) = 0;
    *(undefined8 *)(in_x8 + 0x28) = 0;
    *(undefined8 *)(in_x8 + 8) = uVar6;
    *(undefined8 *)in_x8 = uVar5;
    *(undefined8 *)(in_x8 + 0x30) = 0;
    *(undefined8 *)(in_x8 + 0x38) = 0;
    *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
    *(undefined8 *)(in_x8 + 0x58) = 0;
    *(undefined8 *)(in_x8 + 0x50) = 0;
    return;
  }
  (**(code **)(**(long **)(lVar11 + 8) + 0x28))(*(long **)(lVar11 + 8),lVar11,in_w1 | 0x1000000);
  lVar11 = *(long *)(*(long *)(puVar8 + 8) + 0x18);
  if (lVar11 == 0) {
    local_60 = lVar11;
    local_58 = lVar11;
    pcVar10 = (char *)String::allocate((String *)&local_60,0xc);
    uVar7 = s_u_>data____0_00476b40._8_4_;
                    /* catch() { ... } // from try @ 003ba3a4 with catch @ 003bb308
                       catch() { ... } // from try @ 003bb24c with catch @ 003bb308 */
    *(undefined8 *)pcVar10 = s_u_>data____0_00476b40._0_8_;
    *(undefined4 *)(pcVar10 + 8) = uVar7;
    error(-0xd7,(String *)&local_60,"cv::Mat cv::UMat::getMat(int) const",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x243);
    String::deallocate((String *)&local_60);
    lVar11 = *(long *)(*(long *)(puVar8 + 8) + 0x18);
                    /* try { // try from 003bb32c to 004bb32f has its CatchHandler @ 003baf54 */
  }
  Mat::Mat((Mat *)&local_60,puVar8[1],*(int **)(puVar8 + 0xc),*puVar8 & 0xfff,
           (void *)(lVar11 + *(long *)(puVar8 + 10)),*(ulong **)(puVar8 + 0xe));
  local_28 = *(long *)(puVar8 + 8);
  piVar1 = (int *)(local_28 + 0x14);
  local_48 = *(long *)(local_28 + 0x18);
  uVar2 = *puVar8;
  local_50 = local_48 + *(long *)(puVar8 + 10);
  local_40 = local_48 + *(long *)(local_28 + 0x28);
  local_60 = CONCAT44(local_60._4_4_,uVar2);
  do {
    cVar3 = '\x01';
    bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
    if (bVar4) {
      *piVar1 = *piVar1 + 1;
      cVar3 = ExclusiveMonitorsStatus();
    }
  } while (cVar3 != '\0');
  *(uint *)in_x8 = uVar2;
  *(undefined4 *)(in_x8 + 8) = (undefined4)local_58;
  *(undefined4 *)(in_x8 + 0xc) = local_58._4_4_;
  *(long *)(in_x8 + 0x10) = local_50;
  *(long *)(in_x8 + 0x18) = local_48;
  *(long *)(in_x8 + 0x20) = local_40;
  *(long *)(in_x8 + 0x28) = local_40;
  *(int *)(in_x8 + 4) = local_60._4_4_;
  *(undefined8 *)(in_x8 + 0x30) = local_30;
  *(long *)(in_x8 + 0x38) = local_28;
  *(Mat **)(in_x8 + 0x40) = in_x8 + 8;
  *(Mat **)(in_x8 + 0x48) = in_x8 + 0x50;
  *(undefined8 *)(in_x8 + 0x58) = 0;
  *(undefined8 *)(in_x8 + 0x50) = 0;
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  local_38 = local_40;
  if (local_60._4_4_ < 3) {
    puVar9 = *(undefined8 **)(in_x8 + 0x48);
    *puVar9 = *local_18;
    puVar9[1] = local_18[1];
  }
  else {
    *(undefined4 *)(in_x8 + 4) = 0;
                    /* catch() { ... } // from try @ 003ba160 with catch @ 003bb26c */
    Mat::copySize(in_x8,(Mat *)&local_60);
  }
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar12 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    if (iVar12 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
                    /* try { // try from 003bb20c to 004bb20f has its CatchHandler @ 003bb344 */
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
                    /* try { // try from 003bb220 to 004bb223 has its CatchHandler @ 003bad30 */
  if (0 < local_60._4_4_) {
    iVar12 = 0;
    do {
      *local_20 = 0;
      iVar12 = iVar12 + 1;
      local_20 = local_20 + 1;
    } while (iVar12 < local_60._4_4_);
  }
                    /* try { // try from 003bb24c to 004bb24f has its CatchHandler @ 003bb308 */
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 003bb380 (208 bytes) name=handle

/* cv::UMat::handle(int) const */

undefined8 __thiscall cv::UMat::handle(UMat *this,int param_1)

{
  char *pcVar1;
  undefined8 uVar2;
  long lVar3;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar3 = *(long *)(this + 0x20);
  if (lVar3 == 0) {
    uVar2 = 0;
  }
  else {
    if ((*(uint *)(lVar3 + 0x30) >> 2 & 1) != 0) {
      if (*(int *)(lVar3 + 0x14) != 0) {
        local_10 = 0;
        local_8 = 0;
        pcVar1 = (char *)String::allocate((String *)&local_10,0x10);
        uVar2 = s_u_>refcount____0_0046e790._8_8_;
        *(undefined8 *)pcVar1 = s_u_>refcount____0_0046e790._0_8_;
        *(undefined8 *)(pcVar1 + 8) = uVar2;
                    /* catch() { ... } // from try @ 003b9f68 with catch @ 003bb3e8 */
        error(-0xd7,(String *)&local_10,"void* cv::UMat::handle(int) const",
              "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x256);
                    /* try { // try from 003bb3f8 to 004bb3fb has its CatchHandler @ 003b9ea8 */
        String::deallocate((String *)&local_10);
        lVar3 = *(long *)(this + 0x20);
      }
                    /* try { // try from 003bb400 to 004bb403 has its CatchHandler @ 003bb344 */
                    /* try { // try from 003bb40c to 004bb40f has its CatchHandler @ 003bad30 */
      (**(code **)(**(long **)(lVar3 + 8) + 0x30))(*(long **)(lVar3 + 8));
      lVar3 = *(long *)(this + 0x20);
    }
                    /* try { // try from 003bb418 to 004bb42f has its CatchHandler @ 003b9ea8 */
    if (((uint)param_1 >> 0x19 & 1) != 0) {
      *(uint *)(lVar3 + 0x30) = *(uint *)(lVar3 + 0x30) | 2;
    }
    uVar2 = *(undefined8 *)(lVar3 + 0x38);
  }
  return uVar2;
}


==================================================================

### FUNC 003bb464 (56 bytes) name=ndoffset

/* cv::UMat::ndoffset(unsigned long*) const */

void __thiscall cv::UMat::ndoffset(UMat *this,ulong *param_1)

{
  int iVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  long lVar6;
  
  iVar1 = *(int *)(this + 4);
                    /* catch() { ... } // from try @ 003bb488 with catch @ 003bb468
                       catch() { ... } // from try @ 003bb51c with catch @ 003bb468
                       catch() { ... } // from try @ 003bb690 with catch @ 003bb468
                       catch() { ... } // from try @ 003bb8b0 with catch @ 003bb468
                       catch() { ... } // from try @ 003bb8f8 with catch @ 003bb468
                       catch() { ... } // from try @ 003bb914 with catch @ 003bb468 */
  uVar4 = *(ulong *)(this + 0x28);
  if (0 < iVar1) {
    lVar6 = *(long *)(this + 0x38);
    lVar3 = 0;
    do {
      uVar5 = *(ulong *)(lVar6 + lVar3 * 8);
      uVar2 = 0;
      if (uVar5 != 0) {
        uVar2 = uVar4 / uVar5;
      }
      param_1[lVar3] = uVar2;
                    /* try { // try from 003bb488 to 004bb4d3 has its CatchHandler @ 003bb468 */
      lVar3 = lVar3 + 1;
      uVar4 = uVar4 - uVar2 * uVar5;
    } while ((int)lVar3 < iVar1);
  }
  return;
}


==================================================================

### FUNC 003bb4a0 (412 bytes) name=convertTo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::convertTo(cv::_OutputArray const&, int, double, double) const */

void __thiscall
cv::UMat::convertTo(UMat *this,_OutputArray *param_1,int param_2,double param_3,double param_4)

{
  int *piVar1;
  uint uVar2;
  bool bVar3;
  bool bVar4;
  char cVar5;
  uint uVar6;
  int iVar7;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  bVar3 = _LAB_003bb668 <= ABS(param_3 - 1.0);
  bVar4 = _LAB_003bb668 <= ABS(param_4);
  uVar2 = *(uint *)this;
  if (param_2 < 0) {
    cVar5 = _OutputArray::fixedType(param_1);
    if (cVar5 == '\0') {
      uVar6 = uVar2 & 0xfff;
    }
    else {
      uVar6 = _InputArray::type((_InputArray *)param_1,-1);
    }
  }
  else {
    uVar6 = (param_2 & 7U) + (uVar2 >> 3 & 0x1ff) * 8;
  }
  if (((uVar2 & 7) != (uVar6 & 7)) || (bVar3 || bVar4)) {
    getMat((int)this);
    Mat::convertTo(aMStack_60,param_1,uVar6,param_3,param_4);
                    /* try { // try from 003bb560 to 004bb587 has its CatchHandler @ 003bb8fc */
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar7 = *piVar1;
        cVar5 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar7 + -1;
          cVar5 = ExclusiveMonitorsStatus();
        }
      } while (cVar5 != '\0');
      if (iVar7 == 1) {
        Mat::deallocate(aMStack_60);
      }
    }
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar7 = 0;
      do {
        *local_20 = 0;
        iVar7 = iVar7 + 1;
                    /* try { // try from 003bb5b0 to 004bb5e7 has its CatchHandler @ 003bb8b8 */
        local_20 = local_20 + 1;
      } while (iVar7 < local_5c);
    }
    if (local_18 != auStack_10) {
      fastFree(local_18);
      return;
    }
  }
  else {
    copyTo(this,param_1);
  }
                    /* try { // try from 003bb514 to 004bb517 has its CatchHandler @ 003bb904 */
                    /* try { // try from 003bb51c to 004bb543 has its CatchHandler @ 003bb468 */
  return;
}


==================================================================

### FUNC 003bb670 (1580 bytes) name=copyTo

/* cv::UMat::copyTo(cv::_OutputArray const&) const */

void __thiscall cv::UMat::copyTo(UMat *this,_OutputArray *param_1)

{
  ulong uVar1;
  ulong uVar2;
  int iVar3;
  uint uVar4;
  bool bVar5;
  undefined8 uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  char cVar9;
  int iVar10;
  ulong uVar11;
  char *pcVar12;
  long lVar13;
  long lVar14;
  undefined8 *puVar15;
  int *piVar16;
  Mat *pMVar17;
  long lVar18;
  undefined8 uVar19;
  long *plVar20;
  code *pcVar21;
  UMat aUStack_350 [32];
  long local_330;
  long local_328;
  undefined8 local_318;
  long local_300 [4];
  long local_2e0;
  long lStack_2d8;
  long local_2d0;
  long lStack_2c8;
  long local_2c0;
  long lStack_2b8;
  long local_2b0;
  long lStack_2a8;
  long local_2a0;
  long lStack_298;
  long local_290;
  long lStack_288;
  long local_280;
  long lStack_278;
  long local_270;
  long lStack_268;
  long local_260;
  long lStack_258;
  long local_250;
  long lStack_248;
  long local_240;
  long lStack_238;
  long local_230;
  long lStack_228;
  long local_220;
  long lStack_218;
  long local_210;
  long lStack_208;
  ulong auStack_200 [32];
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  long local_c8;
  undefined8 *local_c0;
  undefined8 *local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  
                    /* try { // try from 003bb690 to 004bb6e3 has its CatchHandler @ 003bb468 */
  uVar11 = _InputArray::type((_InputArray *)param_1,-1);
  cVar9 = _OutputArray::fixedType(param_1);
  if (cVar9 != '\0') {
    if ((uint)uVar11 != (*(uint *)this & 0xfff)) {
      if (((uint)((uVar11 & 0xffffffff) >> 3) & 0x1ff) + 1 != (*(uint *)this >> 3 & 0x1ff) + 1) {
        local_100 = 0;
        local_f8 = 0;
        pcVar12 = (char *)String::allocate((String *)&local_100,0x1e);
        uVar8 = s_channels______CV_MAT_CN_dtype__00463e20._28_2_;
        uVar7 = s_channels______CV_MAT_CN_dtype__00463e20._24_4_;
        uVar6 = s_channels______CV_MAT_CN_dtype__00463e20._8_8_;
        uVar19 = s_channels______CV_MAT_CN_dtype__00463e20._0_8_;
                    /* try { // try from 003bb708 to 004bb717 has its CatchHandler @ 003bb8b8 */
        *(undefined8 *)(pcVar12 + 0x10) = s_channels______CV_MAT_CN_dtype__00463e20._16_8_;
        *(undefined4 *)(pcVar12 + 0x18) = uVar7;
        *(undefined2 *)(pcVar12 + 0x1c) = uVar8;
        *(undefined8 *)pcVar12 = uVar19;
        *(undefined8 *)(pcVar12 + 8) = uVar6;
        error(-0xd7,(String *)&local_100,"void cv::UMat::copyTo(cv::OutputArray) const",
              "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x271);
        String::deallocate((String *)&local_100);
      }
      convertTo(this,param_1,(uint)uVar11,1.0,0.0);
      return;
    }
  }
  if (*(long *)(this + 0x20) == 0) {
LAB_003bbac0:
    _OutputArray::release(param_1);
    return;
  }
  iVar10 = *(int *)(this + 4);
  if (iVar10 < 3) {
    lVar18 = (long)*(int *)(this + 0xc) * (long)*(int *)(this + 8);
  }
  else {
    lVar14 = 0;
    lVar18 = 1;
    do {
      lVar13 = lVar14 * 4;
      lVar14 = lVar14 + 1;
      lVar18 = lVar18 * *(int *)(*(long *)(this + 0x30) + lVar13);
    } while ((int)lVar14 < iVar10);
  }
  if (lVar18 == 0) goto LAB_003bbac0;
  if (iVar10 < 1) {
    lVar18 = 0;
    if (iVar10 != 0) goto LAB_003bb7d4;
  }
  else {
    lVar18 = *(long *)(*(long *)(this + 0x38) + (long)iVar10 * 8 + -8);
LAB_003bb7d4:
    uVar11 = (ulong)iVar10;
    lVar14 = (uVar11 - 4 >> 2) + 1;
    puVar15 = *(undefined8 **)(this + 0x30);
    lVar13 = lVar14 * 4;
    if (uVar11 - 1 < 3) {
      lVar13 = 0;
    }
    else {
      local_300[1] = (long)(int)((ulong)*puVar15 >> 0x20);
      local_300[0] = (long)(int)*puVar15;
      local_300[3] = (long)(int)((ulong)puVar15[1] >> 0x20);
      local_300[2] = (long)(int)puVar15[1];
      if (lVar14 != 1) {
        lStack_2d8 = (long)(int)((ulong)puVar15[2] >> 0x20);
        local_2e0 = (long)(int)puVar15[2];
        lStack_2c8 = (long)(int)((ulong)puVar15[3] >> 0x20);
        local_2d0 = (long)(int)puVar15[3];
        if (lVar14 != 2) {
          lStack_2b8 = (long)(int)((ulong)puVar15[4] >> 0x20);
          local_2c0 = (long)(int)puVar15[4];
          lStack_2a8 = (long)(int)((ulong)puVar15[5] >> 0x20);
          local_2b0 = (long)(int)puVar15[5];
          if (lVar14 != 3) {
            lStack_298 = (long)(int)((ulong)puVar15[6] >> 0x20);
            local_2a0 = (long)(int)puVar15[6];
            lStack_288 = (long)(int)((ulong)puVar15[7] >> 0x20);
            local_290 = (long)(int)puVar15[7];
                    /* try { // try from 003bb88c to 004bb89f has its CatchHandler @ 003bb8fc */
            if (lVar14 != 4) {
              lStack_278 = (long)(int)((ulong)puVar15[8] >> 0x20);
              local_280 = (long)(int)puVar15[8];
                    /* try { // try from 003bb8b0 to 004bb8b3 has its CatchHandler @ 003bb468 */
              lStack_268 = (long)(int)((ulong)puVar15[9] >> 0x20);
              local_270 = (long)(int)puVar15[9];
              if (lVar14 != 5) {
                    /* catch() { ... } // from try @ 003bb5b0 with catch @ 003bb8b8
                       catch() { ... } // from try @ 003bb708 with catch @ 003bb8b8 */
                lStack_258 = (long)(int)((ulong)puVar15[10] >> 0x20);
                local_260 = (long)(int)puVar15[10];
                lStack_248 = (long)(int)((ulong)puVar15[0xb] >> 0x20);
                local_250 = (long)(int)puVar15[0xb];
                if (lVar14 != 6) {
                    /* try { // try from 003bb8f8 to 004bb8fb has its CatchHandler @ 003bb468 */
                    /* catch() { ... } // from try @ 003bb560 with catch @ 003bb8fc
                       catch() { ... } // from try @ 003bb664 with catch @ 003bb8fc
                       catch() { ... } // from try @ 003bb88c with catch @ 003bb8fc */
                  lStack_238 = (long)(int)((ulong)puVar15[0xc] >> 0x20);
                  local_240 = (long)(int)puVar15[0xc];
                  lStack_228 = (long)(int)((ulong)puVar15[0xd] >> 0x20);
                  local_230 = (long)(int)puVar15[0xd];
                    /* catch() { ... } // from try @ 003bb514 with catch @ 003bb904 */
                  if (lVar14 != 7) {
                    /* try { // try from 003bb914 to 004bb917 has its CatchHandler @ 003bb468 */
                    /* catch() { ... } // from try @ 003bb938 with catch @ 003bb918
                       catch() { ... } // from try @ 003bb9cc with catch @ 003bb918
                       catch() { ... } // from try @ 003bbb40 with catch @ 003bb918
                       catch() { ... } // from try @ 003bbd60 with catch @ 003bb918
                       catch() { ... } // from try @ 003bbda8 with catch @ 003bb918
                       catch() { ... } // from try @ 003bbdc4 with catch @ 003bb918 */
                    lStack_218 = (long)(int)((ulong)puVar15[0xe] >> 0x20);
                    local_220 = (long)(int)puVar15[0xe];
                    lStack_208 = (long)(int)((ulong)puVar15[0xf] >> 0x20);
                    local_210 = (long)(int)puVar15[0xf];
                  }
                }
              }
            }
          }
        }
      }
      if (lVar13 - uVar11 == 0) goto LAB_003bb960;
    }
    uVar1 = lVar13 + 1;
                    /* try { // try from 003bb938 to 004bb983 has its CatchHandler @ 003bb918 */
    local_300[lVar13] = (long)*(int *)((long)puVar15 + lVar13 * 4);
    if (uVar1 < uVar11) {
      uVar2 = lVar13 + 2;
      local_300[uVar1] = (long)*(int *)((long)puVar15 + uVar1 * 4);
      if (uVar2 < uVar11) {
        local_300[uVar2] = (long)*(int *)((long)puVar15 + uVar2 * 4);
      }
    }
  }
LAB_003bb960:
  local_300[iVar10 + -1] = lVar18 * local_300[iVar10 + -1];
  ndoffset(this,auStack_200);
  iVar3 = *(int *)(this + 4);
  uVar4 = *(uint *)this;
  iVar10 = iVar3 + -1;
  piVar16 = *(int **)(this + 0x30);
  auStack_200[iVar10] = lVar18 * auStack_200[iVar10];
  _OutputArray::create(param_1,iVar3,piVar16,uVar4 & 0xfff,-1,false,0);
  iVar10 = _InputArray::kind((_InputArray *)param_1);
  if (iVar10 == 0xa0000) {
                    /* try { // try from 003bbbb8 to 004bbbc7 has its CatchHandler @ 003bbd68 */
    _InputArray::getUMat((int)param_1);
    if ((*(long *)(this + 0x20) != local_330) || (local_328 != *(long *)(this + 0x28))) {
      if (*(long *)(*(long *)(this + 0x20) + 8) != *(long *)(local_330 + 8)) {
        ~UMat(aUStack_350);
        goto LAB_003bb9c4;
      }
      ndoffset(aUStack_350,&local_100);
      lVar14 = *(long *)(this + 0x20);
      iVar10 = *(int *)(this + 4);
      plVar20 = *(long **)(lVar14 + 8);
      iVar3 = iVar10 + -1;
      uVar19 = *(undefined8 *)(this + 0x38);
      pcVar21 = *(code **)(*plVar20 + 0x48);
      (&local_100)[iVar3] = lVar18 * (&local_100)[iVar3];
      (*pcVar21)(plVar20,lVar14,local_330,iVar10,local_300,auStack_200,uVar19,&local_100,local_318,0
                );
    }
    ~UMat(aUStack_350);
  }
  else {
LAB_003bb9c4:
                    /* try { // try from 003bb9c4 to 004bb9c7 has its CatchHandler @ 003bbdb4 */
    iVar10 = _InputArray::kind((_InputArray *)param_1);
                    /* try { // try from 003bb9cc to 004bb9f3 has its CatchHandler @ 003bb918 */
    if (iVar10 == 0x10000) {
      pMVar17 = *(Mat **)(param_1 + 8);
      local_c0 = &local_f8;
      local_b8 = &local_b0;
      uVar4 = *(uint *)pMVar17;
      local_f0 = *(undefined8 *)(pMVar17 + 0x10);
      local_100 = *(ulong *)pMVar17;
                    /* try { // try from 003bbb14 to 004bbb17 has its CatchHandler @ 003bbdac */
      local_f8 = *(undefined8 *)(pMVar17 + 8);
      local_e8 = *(undefined8 *)(pMVar17 + 0x18);
      local_e0 = *(undefined8 *)(pMVar17 + 0x20);
      local_d8 = *(undefined8 *)(pMVar17 + 0x28);
                    /* try { // try from 003bbb40 to 004bbb93 has its CatchHandler @ 003bb918 */
      local_d0 = *(undefined8 *)(pMVar17 + 0x30);
      local_c8 = *(long *)(pMVar17 + 0x38);
      local_a8 = 0;
      local_b0 = 0;
      if (local_c8 != 0) {
        piVar16 = (int *)(local_c8 + 0x14);
        do {
          cVar9 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar16,0x10);
          if (bVar5) {
            *piVar16 = *piVar16 + 1;
            cVar9 = ExclusiveMonitorsStatus();
          }
        } while (cVar9 != '\0');
      }
      if (*(int *)(pMVar17 + 4) < 3) {
        local_b0 = **(undefined8 **)(pMVar17 + 0x48);
        local_a8 = (*(undefined8 **)(pMVar17 + 0x48))[1];
      }
      else {
        local_100 = (ulong)uVar4;
        Mat::copySize((Mat *)&local_100,pMVar17);
      }
    }
    else {
      _InputArray::getMat_((int)param_1);
    }
    plVar20 = *(long **)(*(long *)(this + 0x20) + 8);
                    /* try { // try from 003bba10 to 004bba37 has its CatchHandler @ 003bbdac */
    (**(code **)(*plVar20 + 0x38))
              (plVar20,*(long *)(this + 0x20),local_f0,*(undefined4 *)(this + 4),local_300,
               auStack_200,*(undefined8 *)(this + 0x38),local_b8);
    if (local_c8 != 0) {
      piVar16 = (int *)(local_c8 + 0x14);
      do {
        iVar10 = *piVar16;
        cVar9 = '\x01';
        bVar5 = (bool)ExclusiveMonitorPass(piVar16,0x10);
        if (bVar5) {
          *piVar16 = iVar10 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
      if (iVar10 == 1) {
        Mat::deallocate((Mat *)&local_100);
      }
    }
    local_c8 = 0;
    local_f0 = 0;
    local_d8 = 0;
    local_e0 = 0;
    local_e8 = 0;
    if (0 < local_100._4_4_) {
                    /* try { // try from 003bba60 to 004bba97 has its CatchHandler @ 003bbd68 */
      iVar10 = 0;
      puVar15 = local_c0;
      do {
        *(undefined4 *)puVar15 = 0;
        iVar10 = iVar10 + 1;
        puVar15 = (undefined8 *)((long)puVar15 + 4);
      } while (iVar10 < local_100._4_4_);
    }
    if (local_b8 != &local_b0) {
      fastFree(local_b8);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 003bbcec (256 bytes) name=copyTo

/* cv::UMat::copyTo(cv::_OutputArray const&, cv::_InputArray const&) const */

void __thiscall cv::UMat::copyTo(UMat *this,_OutputArray *param_1,_InputArray *param_2)

{
  int *piVar1;
  bool bVar2;
  char cVar3;
  int iVar4;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cVar3 = _InputArray::empty(param_2);
  if (cVar3 == '\0') {
    getMat((int)this);
                    /* try { // try from 003bbd3c to 004bbd4f has its CatchHandler @ 003bbdac */
    Mat::copyTo(aMStack_60,param_1,param_2);
    if (local_28 != 0) {
      piVar1 = (int *)(local_28 + 0x14);
      do {
        iVar4 = *piVar1;
        cVar3 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar2) {
          *piVar1 = iVar4 + -1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
                    /* try { // try from 003bbd60 to 004bbd63 has its CatchHandler @ 003bb918 */
      if (iVar4 == 1) {
        Mat::deallocate(aMStack_60);
      }
    }
                    /* catch() { ... } // from try @ 003bba60 with catch @ 003bbd68
                       catch() { ... } // from try @ 003bbbb8 with catch @ 003bbd68 */
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar4 = 0;
      do {
        *local_20 = 0;
        iVar4 = iVar4 + 1;
        local_20 = local_20 + 1;
      } while (iVar4 < local_5c);
    }
                    /* try { // try from 003bbda8 to 004bbdab has its CatchHandler @ 003bb918 */
                    /* catch() { ... } // from try @ 003bba10 with catch @ 003bbdac
                       catch() { ... } // from try @ 003bbb14 with catch @ 003bbdac
                       catch() { ... } // from try @ 003bbd3c with catch @ 003bbdac */
    if (local_18 != auStack_10) {
      fastFree(local_18);
    }
                    /* catch() { ... } // from try @ 003bb9c4 with catch @ 003bbdb4 */
    return;
  }
                    /* try { // try from 003bbdc4 to 004bbdc7 has its CatchHandler @ 003bb918 */
                    /* catch() { ... } // from try @ 003bbe08 with catch @ 003bbdc8
                       catch() { ... } // from try @ 003bbecc with catch @ 003bbdc8
                       catch() { ... } // from try @ 003bc08c with catch @ 003bbdc8
                       catch() { ... } // from try @ 003bc860 with catch @ 003bbdc8
                       catch() { ... } // from try @ 003bc9cc with catch @ 003bbdc8
                       catch() { ... } // from try @ 003bcaa8 with catch @ 003bbdc8 */
  copyTo(this,param_1);
  return;
}


==================================================================

### FUNC 003bbe14 (232 bytes) name=setTo

/* cv::UMat::setTo(cv::_InputArray const&, cv::_InputArray const&) */

UMat * __thiscall cv::UMat::setTo(UMat *this,_InputArray *param_1,_InputArray *param_2)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  _InputArray::empty(param_2);
  getMat((int)this);
  Mat::setTo(aMStack_60,param_1,param_2);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
                    /* try { // try from 003bbec4 to 004bbec7 has its CatchHandler @ 003bca98 */
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
                    /* try { // try from 003bbecc to 004bbef7 has its CatchHandler @ 003bbdc8 */
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  return this;
}


==================================================================

### FUNC 003bbf24 (80 bytes) name=operator=

/* cv::UMat::TEMPNAMEPLACEHOLDERVALUE(cv::Scalar_<double> const&) */

UMat * __thiscall cv::UMat::operator=(UMat *this,Scalar_ *param_1)

{
  _InputArray *p_Var1;
  undefined4 local_18 [2];
  Scalar_ *local_10;
  undefined4 local_8;
  undefined4 local_4;
  
  local_18[0] = 0xc1020006;
  local_8 = 1;
  local_4 = 4;
  local_10 = param_1;
  p_Var1 = (_InputArray *)noArray();
  setTo(this,(_InputArray *)local_18,p_Var1);
  return this;
}


==================================================================

### FUNC 003bbf74 (444 bytes) name=diag

/* cv::UMat::diag(cv::UMat const&) */

void __thiscall cv::UMat::diag(UMat *this,UMat *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined2 uVar3;
  char *pcVar4;
  int iVar5;
  int iVar6;
  UMat *in_x8;
  undefined4 local_80 [2];
  UMat *local_78;
  undefined4 local_70;
  undefined4 local_6c;
  int local_68;
  int local_64;
  String *local_60;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  
                    /* try { // try from 003bbf78 to 004bbfcb has its CatchHandler @ 003bca78 */
  iVar5 = *(int *)(this + 0xc);
  iVar6 = *(int *)(this + 8);
  if ((iVar5 != 1) && (iVar6 != 1)) {
    local_50 = 0;
    local_48 = 0;
    pcVar4 = (char *)String::allocate((String *)&local_50,0x1a);
    uVar3 = s_d_cols____1____d_rows____1_0046bff0._24_2_;
    uVar2 = s_d_cols____1____d_rows____1_0046bff0._8_8_;
    uVar1 = s_d_cols____1____d_rows____1_0046bff0._0_8_;
    *(undefined8 *)(pcVar4 + 0x10) = s_d_cols____1____d_rows____1_0046bff0._16_8_;
    *(undefined2 *)(pcVar4 + 0x18) = uVar3;
    *(undefined8 *)pcVar4 = uVar1;
    *(undefined8 *)(pcVar4 + 8) = uVar2;
    error(-0xd7,(String *)&local_50,"static cv::UMat cv::UMat::diag(const cv::UMat&)",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x218);
    String::deallocate((String *)&local_50);
    iVar6 = *(int *)(this + 8);
    iVar5 = *(int *)(this + 0xc);
  }
  local_68 = iVar5 + iVar6 + -1;
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  *(undefined4 *)(in_x8 + 4) = 0;
  *(undefined4 *)in_x8 = 0x42ff0000;
  *(undefined4 *)(in_x8 + 8) = 0;
  *(undefined4 *)(in_x8 + 0xc) = 0;
  *(undefined4 *)(in_x8 + 0x18) = 0;
                    /* try { // try from 003bc05c to 004bc05f has its CatchHandler @ 003bca90 */
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_64 = local_68;
                    /* try { // try from 003bc08c to 004bc0eb has its CatchHandler @ 003bbdc8 */
  create();
  operator=(in_x8,(Scalar_ *)&local_50);
  diag((int)in_x8);
  local_60 = (String *)&local_50;
  if (*(int *)(this + 0xc) == 1) {
    local_58 = 0;
    local_54 = 0;
    local_68 = 0x20a0000;
                    /* try { // try from 003bc124 to 004bc127 has its CatchHandler @ 003bca90 */
    copyTo(this,(_OutputArray *)&local_68);
  }
  else {
    local_80[0] = 0x10a0000;
    local_70 = 0;
    local_6c = 0;
    local_58 = 0;
    local_54 = 0;
    local_68 = 0x20a0000;
    local_78 = this;
    transpose((_InputArray *)local_80,(_OutputArray *)&local_68);
  }
  ~UMat((UMat *)&local_50);
  return;
}


==================================================================

### FUNC 003bc170 (140 bytes) name=t

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::t() const */

void cv::UMat::t(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 *in_x8;
  undefined4 local_30 [4];
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [4];
  undefined4 local_8;
  undefined4 local_4;
  
  uVar2 = _UNK_003bc218;
                    /* try { // try from 003bc170 to 004bc17f has its CatchHandler @ 003bca78 */
  uVar1 = _DAT_003bc210;
  in_x8[7] = in_x8 + 8;
  in_x8[2] = 0;
  in_x8[1] = uVar2;
  *in_x8 = uVar1;
  *(undefined4 *)(in_x8 + 3) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = in_x8 + 1;
  in_x8[9] = 0;
  in_x8[8] = 0;
  local_30[0] = 0x10a0000;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_18[0] = 0x20a0000;
  transpose((_InputArray *)local_30,(_OutputArray *)local_18);
  return;
}


==================================================================

### FUNC 003bc220 (144 bytes) name=inv

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::inv(int) const */

void cv::UMat::inv(int param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int in_w1;
  undefined8 *in_x8;
  undefined4 local_30 [2];
  ulong local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [4];
  undefined4 local_8;
  undefined4 local_4;
  
  uVar2 = _UNK_003bc2d8;
  uVar1 = _DAT_003bc2d0;
  local_28 = (ulong)(uint)param_1;
  in_x8[7] = in_x8 + 8;
  in_x8[2] = 0;
  in_x8[1] = uVar2;
  *in_x8 = uVar1;
  *(undefined4 *)(in_x8 + 3) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = in_x8 + 1;
  in_x8[9] = 0;
  in_x8[8] = 0;
  local_30[0] = 0x10a0000;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
  local_4 = 0;
  local_18[0] = 0x20a0000;
  invert((_InputArray *)local_30,(_OutputArray *)local_18,in_w1);
  return;
}


==================================================================

### FUNC 003bc2e0 (144 bytes) name=mul

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::mul(cv::_InputArray const&, double) const */

void cv::UMat::mul(_InputArray *param_1,double param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  _InputArray *in_x1;
  undefined8 *in_x8;
  undefined4 local_30 [2];
  _InputArray *local_28;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18 [4];
  undefined4 local_8;
  undefined4 local_4;
  
  uVar2 = _UNK_003bc398;
  uVar1 = _DAT_003bc390;
  in_x8[7] = in_x8 + 8;
  in_x8[2] = 0;
  in_x8[1] = uVar2;
  *in_x8 = uVar1;
  *(undefined4 *)(in_x8 + 3) = 0;
  in_x8[4] = 0;
  in_x8[5] = 0;
  in_x8[6] = in_x8 + 1;
  in_x8[9] = 0;
  in_x8[8] = 0;
  local_30[0] = 0x10a0000;
  local_20 = 0;
  local_1c = 0;
  local_8 = 0;
                    /* try { // try from 003bc34c to 004bc6b7 has its CatchHandler @ 003bc96c */
  local_4 = 0;
  local_18[0] = 0x20a0000;
  local_28 = param_1;
  multiply((_InputArray *)local_30,in_x1,(_OutputArray *)local_18,param_2,-1);
  return;
}


==================================================================

### FUNC 003bc3a0 (396 bytes) name=dot

/* cv::UMat::dot(cv::_InputArray const&) const */

undefined1  [16] __thiscall cv::UMat::dot(UMat *this,_InputArray *param_1)

{
  int *piVar1;
  bool bVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined2 uVar7;
  char cVar8;
  uint uVar9;
  char *pcVar10;
  int iVar11;
  undefined1 auVar12 [16];
  undefined8 local_60;
  UMat *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  local_50 = 0;
  local_60 = CONCAT44(local_60._4_4_,0x10a0000);
  local_58 = this;
  cVar8 = _InputArray::sameSize(param_1,(_InputArray *)&local_60);
  if ((cVar8 == '\0') || (uVar9 = _InputArray::type(param_1,-1), uVar9 != (*(uint *)this & 0xfff)))
  {
    local_60 = 0;
    local_58 = (UMat *)0x0;
    pcVar10 = (char *)String::allocate((String *)&local_60,0x27);
    cVar8 = s_m_sameSize__this_____m_type______00476b50[0x26];
    uVar7 = s_m_sameSize__this_____m_type______00476b50._36_2_;
    uVar6 = s_m_sameSize__this_____m_type______00476b50._24_8_;
    uVar5 = s_m_sameSize__this_____m_type______00476b50._16_8_;
    uVar4 = s_m_sameSize__this_____m_type______00476b50._8_8_;
    uVar3 = s_m_sameSize__this_____m_type______00476b50._0_8_;
    *(undefined4 *)(pcVar10 + 0x20) = s_m_sameSize__this_____m_type______00476b50._32_4_;
    *(undefined2 *)(pcVar10 + 0x24) = uVar7;
    pcVar10[0x26] = cVar8;
    *(undefined8 *)pcVar10 = uVar3;
    *(undefined8 *)(pcVar10 + 8) = uVar4;
    *(undefined8 *)(pcVar10 + 0x10) = uVar5;
    *(undefined8 *)(pcVar10 + 0x18) = uVar6;
    error(-0xd7,(String *)&local_60,"double cv::UMat::dot(cv::InputArray) const",
          "/builds/master_pack-android/opencv/modules/core/src/umatrix.cpp",0x38d);
    String::deallocate((String *)&local_60);
  }
  getMat((int)this);
  auVar12 = Mat::dot((Mat *)&local_60,param_1);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar11 = *piVar1;
      cVar8 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar2) {
        *piVar1 = iVar11 + -1;
        cVar8 = ExclusiveMonitorsStatus();
      }
    } while (cVar8 != '\0');
    if (iVar11 == 1) {
      Mat::deallocate((Mat *)&local_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_60._4_4_) {
    iVar11 = 0;
    do {
      *local_20 = 0;
      iVar11 = iVar11 + 1;
      local_20 = local_20 + 1;
    } while (iVar11 < local_60._4_4_);
  }
  if (local_18 != auStack_10) {
    fastFree(local_18);
  }
  return auVar12;
}


==================================================================

### FUNC 003bc570 (152 bytes) name=zeros

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::zeros(int, int, int) */

void __thiscall cv::UMat::zeros(UMat *this,int param_1,int param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  UMat *in_x8;
  undefined8 uStack_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar2 = _UNK_003bc618;
  uVar1 = _DAT_003bc610;
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  *(undefined8 *)(in_x8 + 8) = uVar2;
  *(undefined8 *)in_x8 = uVar1;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  uStack_18 = 0;
  uStack_20 = 0;
  *(undefined4 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  uStack_8 = 0;
  local_10 = 0;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  create();
  operator=(in_x8,(Scalar_ *)&uStack_20);
  return;
}


==================================================================

### FUNC 003bc620 (160 bytes) name=zeros

/* cv::UMat::zeros(cv::Size_<int>, int) */

UMat * __thiscall cv::UMat::zeros(UMat *param_1,UMat *this,uint param_3)

{
  undefined4 local_28;
  undefined4 local_24;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_24 = *(undefined4 *)this;
  local_28 = *(undefined4 *)(this + 4);
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)param_1 = 0x42ff0000;
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined4 *)(param_1 + 0x18) = 0;
  *(UMat **)(param_1 + 0x30) = param_1 + 8;
  *(UMat **)(param_1 + 0x38) = param_1 + 0x40;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x48) = 0;
  *(undefined8 *)(param_1 + 0x40) = 0;
  local_20 = 0;
  local_18 = 0;
  local_10 = 0;
  local_8 = 0;
  create(param_1,2,&local_28,param_3 & 0xfff);
  operator=(param_1,(Scalar_ *)&local_20);
  return param_1;
}


==================================================================

### FUNC 003bc6c0 (148 bytes) name=zeros

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::zeros(int, int const*, int) */

void __thiscall cv::UMat::zeros(UMat *this,int param_1,int *param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  UMat *in_x8;
  undefined8 uStack_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar2 = _UNK_003bc768;
  uVar1 = _DAT_003bc760;
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  *(undefined8 *)(in_x8 + 8) = uVar2;
  *(undefined8 *)in_x8 = uVar1;
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  uStack_18 = 0;
  uStack_20 = 0;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined4 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  uStack_8 = 0;
  local_10 = 0;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  create();
  operator=(in_x8,(Scalar_ *)&uStack_20);
  return;
}


==================================================================

### FUNC 003bc770 (164 bytes) name=ones

/* cv::UMat::ones(cv::Size_<int>, int) */

UMat * __thiscall cv::UMat::ones(UMat *param_1,UMat *this,uint param_3)

{
  undefined4 local_28;
  undefined4 local_24;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_24 = *(undefined4 *)this;
  local_28 = *(undefined4 *)(this + 4);
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined4 *)(param_1 + 0x18) = 0;
  *(UMat **)(param_1 + 0x30) = param_1 + 8;
  *(UMat **)(param_1 + 0x38) = param_1 + 0x40;
  *(undefined4 *)param_1 = 0x42ff0000;
  local_18 = 0;
  *(undefined8 *)(param_1 + 0x10) = 0;
  local_10 = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  local_8 = 0;
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x48) = 0;
  *(undefined8 *)(param_1 + 0x40) = 0;
  local_20 = 0x3ff0000000000000;
  create(param_1,2,&local_28,param_3 & 0xfff);
  operator=(param_1,(Scalar_ *)&local_20);
  return param_1;
}


==================================================================

### FUNC 003bc814 (48 bytes) name=ones

/* cv::UMat::ones(int, int, int) */

void __thiscall cv::UMat::ones(UMat *this,int param_1,int param_2,int param_3)

{
  int local_8;
  undefined4 local_4;
  
  local_4 = SUB84(this,0);
  local_8 = param_1;
  ones((UMat *)&local_8,param_2,param_2,param_3);
  return;
}


==================================================================

### FUNC 003bc850 (156 bytes) name=ones

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::UMat::ones(int, int const*, int) */

void __thiscall cv::UMat::ones(UMat *this,int param_1,int *param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  UMat *in_x8;
  undefined8 uStack_20;
  undefined8 uStack_18;
  undefined8 local_10;
  undefined8 uStack_8;
  
  uVar2 = _UNK_003bc908;
  uVar1 = _DAT_003bc900;
  uStack_18 = _UNK_003bc8f8;
  uStack_20 = _DAT_003bc8f0;
                    /* try { // try from 003bc860 to 004bc967 has its CatchHandler @ 003bbdc8 */
  *(UMat **)(in_x8 + 0x30) = in_x8 + 8;
  *(UMat **)(in_x8 + 0x38) = in_x8 + 0x40;
  *(undefined8 *)(in_x8 + 0x10) = 0;
  *(undefined4 *)(in_x8 + 0x18) = 0;
  *(undefined8 *)(in_x8 + 8) = uVar2;
  *(undefined8 *)in_x8 = uVar1;
  *(undefined8 *)(in_x8 + 0x20) = 0;
  *(undefined8 *)(in_x8 + 0x28) = 0;
  *(undefined8 *)(in_x8 + 0x48) = 0;
  *(undefined8 *)(in_x8 + 0x40) = 0;
  uStack_8 = 0;
  local_10 = 0;
  create();
  operator=(in_x8,(Scalar_ *)&uStack_20);
  return;
}


==================================================================

### FUNC 003bc910 (200 bytes) name=eye

/* cv::UMat::eye(cv::Size_<int>, int) */

UMat * __thiscall cv::UMat::eye(UMat *param_1,UMat *this,uint param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 local_38 [2];
  UMat *local_30;
  undefined4 local_28;
  undefined4 local_24;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar1 = *(undefined4 *)this;
  uVar2 = *(undefined4 *)(this + 4);
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)param_1 = 0x42ff0000;
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined4 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
                    /* catch() { ... } // from try @ 003bc34c with catch @ 003bc96c
                       catch() { ... } // from try @ 003bc9e4 with catch @ 003bc96c */
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(UMat **)(param_1 + 0x30) = param_1 + 8;
  *(UMat **)(param_1 + 0x38) = param_1 + 0x40;
  *(undefined8 *)(param_1 + 0x48) = 0;
  *(undefined8 *)(param_1 + 0x40) = 0;
  local_20 = CONCAT44(uVar1,uVar2);
  create(param_1,2,(Scalar_ *)&local_20,param_3 & 0xfff);
  local_28 = 0;
  local_24 = 0;
  local_18 = 0;
  local_38[0] = 0x30a0000;
  local_10 = 0;
  local_8 = 0;
  local_20 = 0x3ff0000000000000;
  local_30 = param_1;
  setIdentity((_InputOutputArray *)local_38,(Scalar_ *)&local_20);
                    /* try { // try from 003bc9cc to 004bc9cf has its CatchHandler @ 003bbdc8 */
  return param_1;
}


==================================================================

### FUNC 003bc9ec (48 bytes) name=eye

/* cv::UMat::eye(int, int, int) */

void __thiscall cv::UMat::eye(UMat *this,int param_1,int param_2,int param_3)

{
  int local_8;
  undefined4 local_4;
  
  local_4 = SUB84(this,0);
  local_8 = param_1;
                    /* try { // try from 003bca08 to 004bca0b has its CatchHandler @ 003bca90 */
  eye((UMat *)&local_8,param_2,param_2,param_3);
  return;
}


==================================================================

### FUNC 003bca1c (712 bytes) name=FUN_003bca1c

void FUN_003bca1c(int param_1,int param_2,uint param_3,Mat *param_4)

{
  long lVar1;
  int *piVar2;
  uint uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  undefined8 *puVar7;
  int iVar8;
  ulong uVar9;
  long lVar10;
  undefined4 *puVar11;
  long lVar12;
  int local_60;
  int local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined8 local_30;
  long lStack_28;
  undefined4 *local_20;
  undefined8 *local_18;
  undefined8 auStack_10 [2];
  
  param_1 = param_1 * param_2;
                    /* try { // try from 003bca2c to 004bca2f has its CatchHandler @ 003bca78 */
  iVar8 = *(int *)(param_4 + 4);
  if (*(long *)(param_4 + 0x10) == 0) {
LAB_003bca68:
                    /* try { // try from 003bca68 to 004bca6b has its CatchHandler @ 003bca80 */
                    /* try { // try from 003bca70 to 004bca73 has its CatchHandler @ 003bca78 */
    if (iVar8 < 3) {
      iVar6 = *(int *)(param_4 + 8);
LAB_003bcc7c:
      if (((iVar6 == 1) && (param_1 == *(int *)(param_4 + 0xc))) &&
         ((uVar9 = (ulong)*(uint *)param_4, (param_3 & 0xfff) == (*(uint *)param_4 & 0xfff) &&
          (*(long *)(param_4 + 0x10) != 0)))) goto LAB_003bca98;
    }
LAB_003bca74:
                    /* catch() { ... } // from try @ 003bbf78 with catch @ 003bca78
                       catch() { ... } // from try @ 003bc170 with catch @ 003bca78
                       catch() { ... } // from try @ 003bca2c with catch @ 003bca78
                       catch() { ... } // from try @ 003bca70 with catch @ 003bca78 */
                    /* catch() { ... } // from try @ 003bca68 with catch @ 003bca80 */
    local_60 = 1;
    local_5c = param_1;
                    /* catch() { ... } // from try @ 003bbf18 with catch @ 003bca90
                       catch() { ... } // from try @ 003bc05c with catch @ 003bca90
                       catch() { ... } // from try @ 003bc124 with catch @ 003bca90
                       catch() { ... } // from try @ 003bca08 with catch @ 003bca90 */
    cv::Mat::create(param_4,2,&local_60,param_3 & 0xfff);
    uVar9 = (ulong)*(uint *)param_4;
  }
  else {
    if (2 < iVar8) {
      lVar10 = 0;
      lVar12 = 1;
      do {
        lVar1 = lVar10 * 4;
        lVar10 = lVar10 + 1;
        lVar12 = lVar12 * *(int *)(*(long *)(param_4 + 0x40) + lVar1);
      } while ((int)lVar10 < iVar8);
      if (lVar12 != 0) goto LAB_003bca58;
      goto LAB_003bca74;
    }
    iVar6 = *(int *)(param_4 + 8);
    if ((long)*(int *)(param_4 + 0xc) * (long)iVar6 == 0) goto LAB_003bcc7c;
LAB_003bca58:
    uVar3 = *(uint *)param_4;
    uVar9 = (ulong)uVar3;
    if (((param_3 != (uVar3 & 0xfff)) || ((uVar3 >> 0xe & 1) == 0)) ||
       ((*(int **)(param_4 + 0x40))[1] * **(int **)(param_4 + 0x40) < param_1)) goto LAB_003bca68;
  }
LAB_003bca98:
                    /* catch() { ... } // from try @ 003bbec4 with catch @ 003bca98 */
                    /* try { // try from 003bcaa8 to 004bcaab has its CatchHandler @ 003bbdc8 */
  cv::Mat::reshape((int)param_4,((uint)(uVar9 >> 3) & 0x1ff) + 1);
  if (lStack_28 != 0) {
    piVar2 = (int *)(lStack_28 + 0x14);
    do {
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = *piVar2 + 1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
  }
  if (*(long *)(param_4 + 0x38) != 0) {
    piVar2 = (int *)(*(long *)(param_4 + 0x38) + 0x14);
    do {
      iVar8 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate(param_4);
    }
  }
  *(undefined8 *)(param_4 + 0x38) = 0;
  *(undefined8 *)(param_4 + 0x10) = 0;
  *(undefined8 *)(param_4 + 0x28) = 0;
  *(undefined8 *)(param_4 + 0x20) = 0;
  *(undefined8 *)(param_4 + 0x18) = 0;
  if (*(int *)(param_4 + 4) < 1) {
                    /* try { // try from 003bccd4 to 004bcd27 has its CatchHandler @ 003bcb10 */
    *(int *)param_4 = local_60;
LAB_003bcb3c:
                    /* try { // try from 003bcb40 to 004bcb5f has its CatchHandler @ 003bcb10 */
    if (local_5c < 3) {
      *(int *)(param_4 + 4) = local_5c;
      puVar7 = *(undefined8 **)(param_4 + 0x48);
      *(undefined4 *)(param_4 + 8) = local_58;
      *(undefined4 *)(param_4 + 0xc) = local_54;
      *puVar7 = *local_18;
      puVar7[1] = local_18[1];
      goto LAB_003bcb74;
    }
  }
  else {
                    /* catch() { ... } // from try @ 003bcb40 with catch @ 003bcb10
                       catch() { ... } // from try @ 003bccd4 with catch @ 003bcb10
                       catch() { ... } // from try @ 003bd214 with catch @ 003bcb10
                       catch() { ... } // from try @ 003bd2e4 with catch @ 003bcb10 */
    iVar8 = 0;
    puVar11 = *(undefined4 **)(param_4 + 0x40);
    do {
      *puVar11 = 0;
      iVar8 = iVar8 + 1;
      puVar11 = puVar11 + 1;
    } while (iVar8 < *(int *)(param_4 + 4));
    *(int *)param_4 = local_60;
    if (*(int *)(param_4 + 4) < 3) goto LAB_003bcb3c;
  }
  cv::Mat::copySize(param_4,(Mat *)&local_60);
LAB_003bcb74:
  *(undefined8 *)(param_4 + 0x18) = uStack_48;
  *(undefined8 *)(param_4 + 0x10) = local_50;
  *(undefined8 *)(param_4 + 0x28) = uStack_38;
  *(undefined8 *)(param_4 + 0x20) = local_40;
  *(long *)(param_4 + 0x38) = lStack_28;
  *(undefined8 *)(param_4 + 0x30) = local_30;
  if (lStack_28 != 0) {
    piVar2 = (int *)(lStack_28 + 0x14);
    do {
      iVar8 = *piVar2;
      cVar4 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar2,0x10);
      if (bVar5) {
        *piVar2 = iVar8 + -1;
        cVar4 = ExclusiveMonitorsStatus();
      }
    } while (cVar4 != '\0');
    if (iVar8 == 1) {
      cv::Mat::deallocate((Mat *)&local_60);
    }
  }
                    /* try { // try from 003bcbd4 to 004bcc27 has its CatchHandler @ 003bd31c */
  lStack_28 = 0;
  local_50 = 0;
  uStack_38 = 0;
  local_40 = 0;
  uStack_48 = 0;
  if (0 < local_5c) {
    iVar8 = 0;
    do {
      *local_20 = 0;
      iVar8 = iVar8 + 1;
      local_20 = local_20 + 1;
    } while (iVar8 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 003bcd6c (640 bytes) name=GpuMat

/* cv::cuda::GpuMat::GpuMat(cv::cuda::GpuMat const&, cv::Range, cv::Range) */

void __thiscall
cv::cuda::GpuMat::GpuMat(GpuMat *this,undefined4 *param_1,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  void *pvVar6;
  int *piVar7;
  long lVar8;
  int iVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  uint uVar12;
  undefined8 uVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar1 = *param_1;
  iVar9 = (int)param_3;
  lVar8 = *(long *)(param_1 + 4);
  uVar13 = *(undefined8 *)(param_1 + 8);
  lVar5 = *(long *)(param_1 + 6);
  uVar11 = *(undefined8 *)(param_1 + 10);
  uVar10 = *(undefined8 *)(param_1 + 0xc);
  *(undefined8 *)(this + 0x38) = *(undefined8 *)(param_1 + 0xe);
  *(undefined4 *)this = uVar1;
  *(long *)(this + 0x10) = lVar8;
  *(undefined8 *)(this + 0x20) = uVar13;
  *(long *)(this + 0x18) = lVar5;
  *(undefined8 *)(this + 0x28) = uVar11;
  *(undefined8 *)(this + 0x30) = uVar10;
  iVar14 = (int)((ulong)param_3 >> 0x20);
  iVar15 = (int)param_4;
  iVar16 = (int)((ulong)param_4 >> 0x20);
  if ((iVar9 == -0x80000000) && (iVar14 == 0x7fffffff)) {
    iVar14 = param_1[1];
    *(int *)(this + 4) = iVar14;
    if (iVar15 != -0x80000000) goto LAB_003bce7c;
LAB_003bcf68:
    if (iVar16 != 0x7fffffff) goto LAB_003bce7c;
    *(undefined4 *)(this + 8) = param_1[2];
    if (iVar14 == 1) goto LAB_003bcf3c;
LAB_003bcf84:
    piVar7 = *(int **)(this + 0x20);
    if (piVar7 != (int *)0x0) {
LAB_003bcf8c:
      do {
        cVar3 = '\x01';
        bVar4 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar4) {
          *piVar7 = *piVar7 + 1;
          cVar3 = ExclusiveMonitorsStatus();
        }
      } while (cVar3 != '\0');
      iVar14 = *(int *)(this + 4);
    }
    if (iVar14 < 1) goto LAB_003bcfcc;
  }
  else {
    if ((iVar9 < 0) || ((iVar14 < iVar9 || ((int)param_1[1] < iVar14)))) {
      local_10 = 0;
      local_8 = 0;
      pvVar6 = (void *)String::allocate((String *)&local_10,0x53);
      memcpy(pvVar6,
             "0 <= rowRange_.start && rowRange_.start <= rowRange_.end && rowRange_.end <= m.rows",
             0x53);
                    /* try { // try from 003bce38 to 004bce3b has its CatchHandler @ 003bd2c0 */
      error(-0xd7,(String *)&local_10,
            "cv::cuda::GpuMat::GpuMat(const cv::cuda::GpuMat&, cv::Range, cv::Range)",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0x72);
      String::deallocate((String *)&local_10);
                    /* try { // try from 003bce50 to 004bce53 has its CatchHandler @ 003bd2f8 */
      lVar5 = *(long *)(this + 0x18);
      lVar8 = *(long *)(this + 0x10);
    }
    iVar14 = iVar14 - iVar9;
    *(int *)(this + 4) = iVar14;
    lVar5 = lVar5 + lVar8 * iVar9;
    *(long *)(this + 0x18) = lVar5;
    if (iVar15 == -0x80000000) goto LAB_003bcf68;
LAB_003bce7c:
    if (((iVar15 < 0) || (iVar16 < iVar15)) || ((int)param_1[2] < iVar16)) {
      local_10 = 0;
      local_8 = 0;
      pvVar6 = (void *)String::allocate((String *)&local_10,0x53);
      memcpy(pvVar6,&LAB_00476e40,0x53);
                    /* try { // try from 003bcec4 to 004bd0bf has its CatchHandler @ 003bd2c0 */
      error(-0xd7,(String *)&local_10,
            "cv::cuda::GpuMat::GpuMat(const cv::cuda::GpuMat&, cv::Range, cv::Range)",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0x7e);
      String::deallocate((String *)&local_10);
      lVar5 = *(long *)(this + 0x18);
      iVar14 = *(int *)(this + 4);
    }
    uVar2 = *(uint *)this;
    *(int *)(this + 8) = iVar16 - iVar15;
    uVar12 = 0xffffbfff;
    if ((int)param_1[2] <= iVar16 - iVar15) {
      uVar12 = 0xffffffff;
    }
    *(long *)(this + 0x18) =
         lVar5 + (long)(int)((uVar2 >> 3 & 0x1ff) + 1 <<
                            (ulong)((uint)(0xfa50L >> ((uVar2 & 7) << 1)) & 3)) * (long)iVar15;
    *(uint *)this = uVar12 & uVar2;
    if (iVar14 != 1) goto LAB_003bcf84;
LAB_003bcf3c:
    piVar7 = *(int **)(this + 0x20);
    *(uint *)this = *(uint *)this | 0x4000;
    if (piVar7 != (int *)0x0) goto LAB_003bcf8c;
  }
  if (0 < *(int *)(this + 8)) {
    return;
  }
LAB_003bcfcc:
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 4) = 0;
  return;
}


==================================================================

### FUNC 003bd014 (384 bytes) name=GpuMat

/* cv::cuda::GpuMat::GpuMat(cv::cuda::GpuMat const&, cv::Rect_<int>) */

void __thiscall cv::cuda::GpuMat::GpuMat(GpuMat *this,uint *param_1,int *param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  char cVar7;
  bool bVar8;
  void *__dest;
  uint uVar9;
  int *piVar10;
  undefined8 uVar11;
  long lVar12;
  long lVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar1 = param_3[2];
  uVar2 = *param_1;
  iVar3 = param_3[3];
  *(int *)(this + 8) = iVar1;
  uVar4 = param_3[1];
  uVar5 = param_1[2];
  iVar6 = *param_3;
  lVar12 = *(long *)(param_1 + 4);
  uVar9 = 0xffffbfff;
  if ((int)uVar5 <= iVar1) {
    uVar9 = 0xffffffff;
  }
  uVar9 = uVar9 & uVar2;
  lVar13 = *(long *)(param_1 + 6);
  piVar10 = *(int **)(param_1 + 8);
  uVar15 = *(undefined8 *)(param_1 + 10);
  uVar14 = *(undefined8 *)(param_1 + 0xc);
  uVar11 = *(undefined8 *)(param_1 + 0xe);
  *(int *)(this + 4) = iVar3;
  *(long *)(this + 0x10) = lVar12;
  *(int **)(this + 0x20) = piVar10;
  *(undefined8 *)(this + 0x28) = uVar15;
  *(undefined8 *)(this + 0x30) = uVar14;
  *(undefined8 *)(this + 0x38) = uVar11;
  *(uint *)this = uVar9;
  *(long *)(this + 0x18) =
       lVar13 + (int)uVar4 * lVar12 +
                (long)(int)((uVar9 >> 3 & 0x1ff) + 1 <<
                           (ulong)((uint)(0xfa50L >> ((uVar9 & 7) << 1)) & 3)) * (long)iVar6;
  if ((((iVar1 < 0) || (iVar6 < 0)) || (iVar3 < 0)) ||
     ((((uint)(iVar1 + iVar6 <= (int)uVar5) & ~uVar4 >> 0x1f) == 0 ||
      ((int)param_1[1] < (int)(iVar3 + uVar4))))) {
    local_10 = 0;
    local_8 = 0;
    __dest = (void *)String::allocate((String *)&local_10,0x7c);
    memcpy(__dest,
           "0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows"
           ,0x7c);
    error(-0xd7,(String *)&local_10,"cv::cuda::GpuMat::GpuMat(const cv::cuda::GpuMat&, cv::Rect)",
          "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0x98);
    String::deallocate((String *)&local_10);
    piVar10 = *(int **)(this + 0x20);
  }
  if (piVar10 != (int *)0x0) {
    do {
      cVar7 = '\x01';
      bVar8 = (bool)ExclusiveMonitorPass(piVar10,0x10);
      if (bVar8) {
        *piVar10 = *piVar10 + 1;
        cVar7 = ExclusiveMonitorsStatus();
      }
    } while (cVar7 != '\0');
  }
  if ((0 < *(int *)(this + 4)) && (0 < *(int *)(this + 8))) {
    return;
  }
  *(undefined4 *)(this + 8) = 0;
  *(undefined4 *)(this + 4) = 0;
  return;
}


==================================================================

### FUNC 003bd1a8 (188 bytes) name=locateROI

/* cv::cuda::GpuMat::locateROI(cv::Size_<int>&, cv::Point_<int>&) const */

void __thiscall cv::cuda::GpuMat::locateROI(GpuMat *this,Size_ *param_1,Point_ *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  int iVar5;
  long lVar6;
  ulong uVar7;
  int iVar8;
  ulong uVar9;
  
  iVar3 = (*(uint *)this >> 3 & 0x1ff) + 1 <<
          (ulong)((uint)(0xfa50L >> ((*(uint *)this & 7) << 1)) & 3);
  uVar4 = *(long *)(this + 0x18) - *(long *)(this + 0x28);
  lVar6 = *(long *)(this + 0x30) - *(long *)(this + 0x28);
  uVar9 = (ulong)iVar3;
  if (uVar4 == 0) {
    uVar7 = *(ulong *)(this + 0x10);
    iVar5 = 0;
    iVar8 = iVar5;
  }
  else {
    uVar7 = *(ulong *)(this + 0x10);
    iVar8 = 0;
    if (uVar7 != 0) {
      iVar8 = (int)(uVar4 / uVar7);
    }
                    /* try { // try from 003bd254 to 004bd257 has its CatchHandler @ 003bd2e8 */
    iVar5 = 0;
                    /* try { // try from 003bd25c to 004bd26b has its CatchHandler @ 003bd2c0 */
    if (uVar9 != 0) {
      iVar5 = (int)((uVar4 - (long)iVar8 * uVar7) / uVar9);
    }
  }
  iVar2 = *(int *)(this + 4);
  iVar1 = iVar5 + *(int *)(this + 8);
  *(int *)param_2 = iVar5;
  *(int *)(param_2 + 4) = iVar8;
  iVar5 = 0;
  if (uVar7 != 0) {
    iVar5 = (int)((ulong)(lVar6 - (long)iVar1 * (long)iVar3) / uVar7);
  }
                    /* try { // try from 003bd214 to 004bd217 has its CatchHandler @ 003bcb10 */
  iVar3 = iVar5 + 1;
  if (iVar5 + 1 < iVar8 + iVar2) {
    iVar3 = iVar8 + iVar2;
  }
  *(int *)(param_1 + 4) = iVar3;
  iVar8 = 0;
  if (uVar9 != 0) {
    iVar8 = (int)((lVar6 - (long)(iVar3 + -1) * uVar7) / uVar9);
  }
                    /* try { // try from 003bd234 to 004bd237 has its CatchHandler @ 003bd2c0 */
  if (iVar1 <= iVar8) {
    iVar1 = iVar8;
  }
  *(int *)param_1 = iVar1;
  return;
}


==================================================================

### FUNC 003bd264 (308 bytes) name=adjustROI

/* cv::cuda::GpuMat::adjustROI(int, int, int, int) */

GpuMat * __thiscall
cv::cuda::GpuMat::adjustROI(GpuMat *this,int param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int local_10;
  int local_c;
  int local_8;
  int local_4;
  
  local_10 = 0;
  local_c = 0;
  local_8 = 0;
  local_4 = 0;
  locateROI(this,(Size_ *)&local_10,(Point_ *)&local_8);
  uVar3 = *(uint *)this;
                    /* catch() { ... } // from try @ 003bcca8 with catch @ 003bd2c0
                       catch() { ... } // from try @ 003bce38 with catch @ 003bd2c0
                       catch() { ... } // from try @ 003bcec4 with catch @ 003bd2c0
                       catch() { ... } // from try @ 003bd234 with catch @ 003bd2c0
                       catch() { ... } // from try @ 003bd25c with catch @ 003bd2c0 */
  iVar5 = local_4 - param_1;
  iVar1 = local_4 + *(int *)(this + 4) + param_2;
  if (iVar5 < 0) {
    iVar5 = 0;
  }
                    /* try { // try from 003bd2e4 to 004bd2e7 has its CatchHandler @ 003bcb10 */
                    /* catch() { ... } // from try @ 003bd254 with catch @ 003bd2e8 */
  if (local_c < iVar1) {
    iVar1 = local_c;
  }
  iVar6 = local_8 - param_3;
                    /* catch() { ... } // from try @ 003bce50 with catch @ 003bd2f8 */
  iVar2 = local_8 + *(int *)(this + 8) + param_4;
  if (iVar6 < 0) {
    iVar6 = 0;
  }
  iVar4 = (uVar3 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar3 & 7) << 1)) & 3);
  if (local_10 < iVar2) {
    iVar2 = local_10;
  }
                    /* catch() { ... } // from try @ 003bcbd4 with catch @ 003bd31c */
  *(int *)(this + 4) = iVar1 - iVar5;
  *(long *)(this + 0x18) =
       *(long *)(this + 0x18) +
       (long)(iVar5 - local_4) * *(long *)(this + 0x10) + (long)iVar4 * (long)(iVar6 - local_8);
  *(int *)(this + 8) = iVar2 - iVar6;
  if ((*(long *)(this + 0x10) != (long)iVar4 * (long)(iVar2 - iVar6)) && (iVar1 - iVar5 != 1)) {
    *(uint *)this = uVar3 & 0xffffbfff;
                    /* catch() { ... } // from try @ 003bd388 with catch @ 003bd360
                       catch() { ... } // from try @ 003bd3ec with catch @ 003bd360
                       catch() { ... } // from try @ 003bd524 with catch @ 003bd360
                       catch() { ... } // from try @ 003bd678 with catch @ 003bd360
                       catch() { ... } // from try @ 003bd68c with catch @ 003bd360 */
    return this;
  }
  *(uint *)this = uVar3 | 0x4000;
                    /* try { // try from 003bd388 to 004bd3ab has its CatchHandler @ 003bd360 */
  return this;
}


==================================================================

### FUNC 003bd398 (136 bytes) name=syncOutput

/* cv::cuda::syncOutput(cv::cuda::GpuMat const&, cv::_OutputArray const&, cv::cuda::Stream&) */

void cv::cuda::syncOutput(GpuMat *param_1,_OutputArray *param_2,Stream *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bd3e4 to 004bd3e7 has its CatchHandler @ 003bd67c */
                    /* try { // try from 003bd3ec to 004bd40f has its CatchHandler @ 003bd360 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bd434 (8 bytes) name=defaultAllocator

/* cv::cuda::GpuMat::defaultAllocator() */

undefined8 cv::cuda::GpuMat::defaultAllocator(void)

{
  return 0;
}


==================================================================

### FUNC 003bd43c (220 bytes) name=GpuMat

/* cv::cuda::GpuMat::GpuMat(int, int, int, void*, unsigned long) */

void __thiscall
cv::cuda::GpuMat::GpuMat
          (GpuMat *this,int param_1,int param_2,int param_3,void *param_4,ulong param_5)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  uint uVar4;
  long lVar5;
  long lVar6;
  
  *(int *)(this + 4) = param_1;
  *(uint *)this = (param_3 & 0xfffU) + 0x42ff0000;
  *(int *)(this + 8) = param_2;
  *(ulong *)(this + 0x10) = param_5;
  *(void **)(this + 0x18) = param_4;
  *(void **)(this + 0x28) = param_4;
  *(void **)(this + 0x30) = param_4;
  *(undefined8 *)(this + 0x20) = 0;
  uVar3 = defaultAllocator();
  *(undefined8 *)(this + 0x38) = uVar3;
  uVar1 = *(uint *)this;
  lVar6 = *(long *)(this + 0x10);
  lVar5 = (long)(int)((uVar1 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar1 & 7) << 1)) & 3)
                     ) * (long)*(int *)(this + 8);
  if (lVar6 == 0) {
    *(long *)(this + 0x10) = lVar5;
    *(uint *)this = uVar1 | 0x4000;
    iVar2 = *(int *)(this + 4);
    lVar6 = lVar5;
  }
  else {
    iVar2 = *(int *)(this + 4);
    if (iVar2 == 1) {
      *(long *)(this + 0x10) = lVar5;
      uVar4 = 0x4000;
      lVar6 = lVar5;
    }
    else {
      uVar4 = 0x4000;
      if (lVar5 - lVar6 != 0) {
        uVar4 = 0;
      }
    }
    *(uint *)this = uVar4 | uVar1;
  }
  *(long *)(this + 0x30) = *(long *)(this + 0x30) + lVar5 + (iVar2 + -1) * lVar6;
  return;
}


==================================================================

### FUNC 003bd518 (228 bytes) name=GpuMat

/* cv::cuda::GpuMat::GpuMat(cv::Size_<int>, int, void*, unsigned long) */

void __thiscall
cv::cuda::GpuMat::GpuMat
          (GpuMat *this,undefined4 *param_2,uint param_3,undefined8 param_4,undefined8 param_5)

{
  undefined4 uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  uint uVar5;
  long lVar6;
  long lVar7;
  
                    /* try { // try from 003bd524 to 004bd64f has its CatchHandler @ 003bd360 */
  uVar1 = param_2[1];
  *(undefined4 *)(this + 8) = *param_2;
  *(uint *)this = (param_3 & 0xfff) + 0x42ff0000;
  *(undefined4 *)(this + 4) = uVar1;
  *(undefined8 *)(this + 0x10) = param_5;
  *(undefined8 *)(this + 0x18) = param_4;
  *(undefined8 *)(this + 0x28) = param_4;
  *(undefined8 *)(this + 0x30) = param_4;
  *(undefined8 *)(this + 0x20) = 0;
  uVar4 = defaultAllocator();
  *(undefined8 *)(this + 0x38) = uVar4;
  uVar2 = *(uint *)this;
  lVar7 = *(long *)(this + 0x10);
  lVar6 = (long)(int)((uVar2 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar2 & 7) << 1)) & 3)
                     ) * (long)*(int *)(this + 8);
  if (lVar7 == 0) {
    *(long *)(this + 0x10) = lVar6;
    *(uint *)this = uVar2 | 0x4000;
    iVar3 = *(int *)(this + 4);
    lVar7 = lVar6;
  }
  else {
    iVar3 = *(int *)(this + 4);
    if (iVar3 == 1) {
      *(long *)(this + 0x10) = lVar6;
      uVar5 = 0x4000;
      lVar7 = lVar6;
    }
    else {
      uVar5 = 0x4000;
      if (lVar6 - lVar7 != 0) {
        uVar5 = 0;
      }
    }
    *(uint *)this = uVar5 | uVar2;
  }
  *(long *)(this + 0x30) = *(long *)(this + 0x30) + lVar6 + (iVar3 + -1) * lVar7;
  return;
}


==================================================================

### FUNC 003bd5fc (136 bytes) name=setDefaultAllocator

/* cv::cuda::GpuMat::setDefaultAllocator(cv::cuda::GpuMat::Allocator*) */

void cv::cuda::GpuMat::setDefaultAllocator(Allocator *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
                    /* catch() { ... } // from try @ 003bd42c with catch @ 003bd654 */
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
                    /* try { // try from 003bd678 to 004bd67b has its CatchHandler @ 003bd360 */
                    /* catch() { ... } // from try @ 003bd3e4 with catch @ 003bd67c */
  return;
}


==================================================================

### FUNC 003bd698 (136 bytes) name=create

/* cv::cuda::GpuMat::create(int, int, int) */

void cv::cuda::GpuMat::create(int param_1,int param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 003bdfdc with catch @ 003bd6b0
                       catch() { ... } // from try @ 003be220 with catch @ 003bd6b0 */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bd734 (964 bytes) name=ensureSizeIsEnough

/* cv::cuda::ensureSizeIsEnough(int, int, int, cv::_OutputArray const&) */

void cv::cuda::ensureSizeIsEnough(int param_1,int param_2,int param_3,_OutputArray *param_4)

{
  long lVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  Mat *this;
  uint *puVar10;
  long lVar11;
  int iVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  ulong uVar16;
  int local_8;
  int local_4;
  
  iVar9 = _InputArray::kind((_InputArray *)param_4);
  if (iVar9 == 0x80000) {
    puVar10 = (uint *)_OutputArray::getHostMemRef(param_4);
    lVar15 = *(long *)(puVar10 + 6);
    if (((lVar15 != 0) && (uVar4 = *puVar10, param_3 == (uVar4 & 0xfff))) &&
       (lVar15 == *(long *)(puVar10 + 10))) {
      uVar5 = puVar10[2];
      iVar9 = (uVar4 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3);
      uVar16 = *(ulong *)(puVar10 + 4);
      iVar12 = 0;
      if (uVar16 != 0) {
        iVar12 = (int)((ulong)((*(long *)(puVar10 + 0xc) - lVar15) - (long)iVar9 * (long)(int)uVar5)
                      / uVar16);
      }
      uVar4 = iVar12 + 1U;
      if ((int)(iVar12 + 1U) < (int)puVar10[1]) {
        uVar4 = puVar10[1];
      }
      uVar7 = 0;
      if ((long)iVar9 != 0) {
        uVar7 = (uint)(((*(long *)(puVar10 + 0xc) - lVar15) - (long)(int)(uVar4 - 1) * uVar16) /
                      (ulong)(long)iVar9);
      }
      if ((int)uVar5 <= (int)uVar7) {
        uVar5 = uVar7;
      }
      if ((param_2 <= (int)uVar5) && (param_1 <= (int)uVar4)) {
LAB_003bd96c:
        puVar10[2] = param_2;
        puVar10[1] = param_1;
        return;
      }
    }
    HostMem::create((int)puVar10,param_1,param_2);
    return;
  }
  if (iVar9 == 0x90000) {
    puVar10 = (uint *)_OutputArray::getGpuMatRef(param_4);
    lVar15 = *(long *)(puVar10 + 6);
    if (((lVar15 != 0) && (uVar4 = *puVar10, param_3 == (uVar4 & 0xfff))) &&
       (lVar15 == *(long *)(puVar10 + 10))) {
      uVar5 = puVar10[2];
      iVar9 = (uVar4 >> 3 & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> ((uVar4 & 7) << 1)) & 3);
      uVar16 = *(ulong *)(puVar10 + 4);
                    /* try { // try from 003bd9c0 to 004bd9c3 has its CatchHandler @ 003be22c */
                    /* try { // try from 003bd9c8 to 004bdb97 has its CatchHandler @ 003be2b4 */
      iVar12 = 0;
      if (uVar16 != 0) {
        iVar12 = (int)((ulong)((*(long *)(puVar10 + 0xc) - lVar15) - (long)iVar9 * (long)(int)uVar5)
                      / uVar16);
      }
      uVar4 = iVar12 + 1U;
      if ((int)(iVar12 + 1U) < (int)puVar10[1]) {
        uVar4 = puVar10[1];
      }
      uVar7 = 0;
      if ((long)iVar9 != 0) {
        uVar7 = (uint)(((*(long *)(puVar10 + 0xc) - lVar15) - (long)(int)(uVar4 - 1) * uVar16) /
                      (ulong)(long)iVar9);
      }
      if ((int)uVar5 <= (int)uVar7) {
        uVar5 = uVar7;
      }
      if ((param_2 <= (int)uVar5) && (param_1 <= (int)uVar4)) goto LAB_003bd96c;
    }
    GpuMat::create((int)puVar10,param_1,param_2);
    return;
  }
                    /* try { // try from 003bd76c to 004bd76f has its CatchHandler @ 003be224 */
  if (iVar9 != 0x10000) {
    _OutputArray::create(param_4,param_1,param_2,param_3,-1,false,0);
    return;
  }
  this = (Mat *)_OutputArray::getMatRef(param_4,-1);
  lVar15 = *(long *)(this + 0x10);
  local_8 = param_1;
  local_4 = param_2;
  if (lVar15 == 0) {
    iVar9 = *(int *)(this + 4);
LAB_003bd7fc:
    if (2 < iVar9) goto LAB_003bd8d4;
    iVar12 = *(int *)(this + 8);
  }
  else {
    iVar9 = *(int *)(this + 4);
    if (2 < iVar9) {
      lVar14 = 0;
                    /* try { // try from 003bd7cc to 004bd977 has its CatchHandler @ 003be2b4 */
      lVar11 = 1;
      do {
        lVar1 = lVar14 * 4;
        lVar14 = lVar14 + 1;
        lVar11 = lVar11 * *(int *)(*(long *)(this + 0x40) + lVar1);
      } while ((int)lVar14 < iVar9);
      if (lVar11 == 0) goto LAB_003bd8d4;
LAB_003bd7e8:
      if ((param_3 == (*(uint *)this & 0xfff)) && (lVar15 == *(long *)(this + 0x18))) {
        if (iVar9 < 1) {
          uVar16 = 0;
        }
        else {
          uVar16 = *(ulong *)(*(long *)(this + 0x48) + (long)iVar9 * 8 + -8);
        }
        iVar12 = *(int *)(this + 0xc);
        uVar13 = *(ulong *)(this + 0x50);
        iVar6 = *(int *)(this + 8);
        iVar8 = 0;
        if (uVar13 != 0) {
          iVar8 = (int)(((*(long *)(this + 0x20) - lVar15) - uVar16 * (long)iVar12) / uVar13);
        }
        iVar2 = iVar8 + 1;
        if (iVar8 + 1 < iVar6) {
          iVar2 = iVar6;
        }
        iVar8 = 0;
        if (uVar16 != 0) {
          iVar8 = (int)(((*(long *)(this + 0x20) - lVar15) - (long)(iVar2 + -1) * uVar13) / uVar16);
        }
        iVar3 = iVar12;
        if (iVar12 <= iVar8) {
          iVar3 = iVar8;
        }
        if ((param_2 <= iVar3) && (param_1 <= iVar2)) {
          *(int *)(this + 0xc) = param_2;
          *(int *)(this + 8) = param_1;
          return;
        }
        if ((param_1 == iVar6 && iVar9 < 3) && (param_2 == iVar12)) {
          return;
        }
        Mat::create(this,2,&local_8,param_3);
        return;
      }
      goto LAB_003bd7fc;
    }
    iVar12 = *(int *)(this + 8);
    if ((long)*(int *)(this + 0xc) * (long)iVar12 != 0) goto LAB_003bd7e8;
  }
  if ((((param_1 == iVar12) && (param_2 == *(int *)(this + 0xc))) &&
      ((param_3 & 0xfffU) == (*(uint *)this & 0xfff))) && (lVar15 != 0)) {
    return;
  }
LAB_003bd8d4:
  Mat::create(this,2,&local_8,param_3 & 0xfff);
  return;
}


==================================================================

### FUNC 003bdaf8 (4 bytes) name=release

/* cv::cuda::GpuMat::release() */

void cv::cuda::GpuMat::release(void)

{
  return;
}


==================================================================

### FUNC 003bdafc (784 bytes) name=reshape

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::cuda::GpuMat::reshape(int, int) const */

void cv::cuda::GpuMat::reshape(int param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined2 uVar11;
  undefined4 uVar12;
  uint *puVar13;
  int *piVar14;
  undefined8 *puVar15;
  void *__dest;
  char *pcVar16;
  uint in_w2;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  uint *in_x8;
  int iVar21;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  puVar13 = (uint *)(ulong)(uint)param_1;
  uVar1 = *puVar13;
  uVar2 = puVar13[1];
  uVar3 = puVar13[2];
  uVar20 = *(undefined8 *)(puVar13 + 4);
  uVar19 = *(undefined8 *)(puVar13 + 6);
  uVar18 = *(undefined8 *)(puVar13 + 10);
  piVar14 = *(int **)(puVar13 + 8);
  uVar17 = *(undefined8 *)(puVar13 + 0xc);
  *(undefined8 *)(in_x8 + 0xe) = *(undefined8 *)(puVar13 + 0xe);
  *in_x8 = uVar1;
  in_x8[1] = uVar2;
  in_x8[2] = uVar3;
  *(undefined8 *)(in_x8 + 4) = uVar20;
  *(undefined8 *)(in_x8 + 6) = uVar19;
  *(int **)(in_x8 + 8) = piVar14;
  *(undefined8 *)(in_x8 + 10) = uVar18;
  *(undefined8 *)(in_x8 + 0xc) = uVar17;
  if (piVar14 != (int *)0x0) {
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar6) {
        *piVar14 = *piVar14 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  iVar21 = (*puVar13 >> 3 & 0x1ff) + 1;
  if (param_2 == 0) {
    param_2 = iVar21;
  }
  iVar21 = iVar21 * puVar13[2];
  if (iVar21 < param_2) {
LAB_003bdc70:
    if (in_w2 == 0) {
      in_w2 = 0;
      if (param_2 != 0) {
        in_w2 = (int)(iVar21 * puVar13[1]) / param_2;
      }
      goto joined_r0x003bdc80;
    }
  }
  else {
    iVar4 = 0;
    if (param_2 != 0) {
      iVar4 = iVar21 / param_2;
    }
    if (iVar21 - iVar4 * param_2 != 0) goto LAB_003bdc70;
joined_r0x003bdc80:
    if (in_w2 == 0) goto LAB_003bdbb0;
  }
  if (puVar13[1] != in_w2) {
    uVar1 = iVar21 * puVar13[1];
    if ((*puVar13 >> 0xe & 1) == 0) {
      local_40 = 0;
      local_38 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_40,0x48);
      uVar8 = DAT_00462218;
      uVar7 = DAT_00462210;
      uVar20 = DAT_00462208;
      uVar19 = DAT_00462200;
      uVar18 = DAT_004621f8;
      uVar17 = DAT_004621f0;
                    /* try { // try from 003bdde0 to 004bdde3 has its CatchHandler @ 003be24c */
      puVar15[8] = s_changed_00462230._0_8_;
      uVar10 = _DAT_00462228;
      uVar9 = DAT_00462220;
                    /* try { // try from 003bdde8 to 004bde57 has its CatchHandler @ 003be2b4 */
      *puVar15 = uVar17;
      puVar15[1] = uVar18;
      puVar15[2] = uVar19;
      puVar15[3] = uVar20;
      puVar15[4] = uVar7;
      puVar15[5] = uVar8;
      puVar15[6] = uVar9;
      puVar15[7] = uVar10;
      error(-0xd,(String *)&local_40,"cv::cuda::GpuMat cv::cuda::GpuMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0xb3);
      String::deallocate((String *)&local_40);
    }
    if (uVar1 < in_w2) {
      local_30 = 0;
      local_28 = 0;
      pcVar16 = (char *)String::allocate((String *)&local_30,0x16);
      uVar11 = s_Bad_new_number_of_rows_00462240._20_2_;
      uVar18 = s_Bad_new_number_of_rows_00462240._8_8_;
      uVar17 = s_Bad_new_number_of_rows_00462240._0_8_;
                    /* try { // try from 003bdd54 to 004bdd97 has its CatchHandler @ 003be2b4 */
      *(undefined4 *)(pcVar16 + 0x10) = s_Bad_new_number_of_rows_00462240._16_4_;
      *(undefined2 *)(pcVar16 + 0x14) = uVar11;
      *(undefined8 *)pcVar16 = uVar17;
      *(undefined8 *)(pcVar16 + 8) = uVar18;
      error(-0xd3,(String *)&local_30,"cv::cuda::GpuMat cv::cuda::GpuMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0xb6);
      String::deallocate((String *)&local_30);
    }
    iVar21 = 0;
    if (in_w2 != 0) {
      iVar21 = (int)uVar1 / (int)in_w2;
    }
    if (iVar21 * in_w2 != uVar1) {
                    /* try { // try from 003bdcb0 to 004bdcb3 has its CatchHandler @ 003be188 */
      local_20 = 0;
      local_18 = 0;
      __dest = (void *)String::allocate((String *)&local_20,0x4e);
      memcpy(__dest,&DAT_00461f80,0x4e);
      error(-5,(String *)&local_20,"cv::cuda::GpuMat cv::cuda::GpuMat::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0xbb);
      String::deallocate((String *)&local_20);
    }
    in_x8[1] = in_w2;
    *(ulong *)(in_x8 + 4) = (long)iVar21 * (0x88442211UL >> ((*puVar13 & 7) << 2) & 0xf);
  }
LAB_003bdbb0:
  uVar1 = 0;
  if (param_2 != 0) {
    uVar1 = iVar21 / param_2;
  }
  if (uVar1 * param_2 != iVar21) {
    local_10 = 0;
    local_8 = 0;
    puVar15 = (undefined8 *)String::allocate((String *)&local_10,0x3e);
    uVar11 = DAT_00462294;
    uVar12 = DAT_00462290;
    uVar8 = DAT_00462280;
    uVar7 = DAT_00462278;
    uVar20 = DAT_00462270;
    uVar19 = _LAB_00462268;
    uVar18 = DAT_00462260;
    uVar17 = DAT_00462258;
                    /* try { // try from 003bdbe0 to 004bdbe3 has its CatchHandler @ 003be23c */
                    /* try { // try from 003bdbe8 to 004bdc0f has its CatchHandler @ 003be2b4 */
    puVar15[6] = DAT_00462288;
    *(undefined4 *)(puVar15 + 7) = uVar12;
    *(undefined2 *)((long)puVar15 + 0x3c) = uVar11;
    *puVar15 = uVar17;
    puVar15[1] = uVar18;
    puVar15[2] = uVar19;
    puVar15[3] = uVar20;
    puVar15[4] = uVar7;
    puVar15[5] = uVar8;
    error(-0xf,(String *)&local_10,"cv::cuda::GpuMat cv::cuda::GpuMat::reshape(int, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/cuda_gpu_mat.cpp",0xc4);
    String::deallocate((String *)&local_10);
  }
  in_x8[2] = uVar1;
  *in_x8 = *in_x8 & 0xfffff007 | (param_2 + -1) * 8;
  return;
}


==================================================================

### FUNC 003bde60 (184 bytes) name=getInputMat

/* cv::cuda::getInputMat(cv::_InputArray const&, cv::cuda::Stream&) */

void cv::cuda::getInputMat(_InputArray *param_1,Stream *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  char *pcVar6;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar5 = GpuMat::defaultAllocator();
  local_10 = 0;
  *(undefined8 *)(in_x8 + 0xe) = uVar5;
  *in_x8 = 0;
  in_x8[1] = 0;
  in_x8[2] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar4 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar5 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bdec8 to 004bdecb has its CatchHandler @ 003be25c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar4;
  *(undefined8 *)pcVar6 = uVar5;
  *(undefined8 *)(pcVar6 + 8) = uVar1;
  *(undefined8 *)(pcVar6 + 0x10) = uVar2;
  *(undefined8 *)(pcVar6 + 0x18) = uVar3;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bdf40 (184 bytes) name=getOutputMat

/* cv::cuda::getOutputMat(cv::_OutputArray const&, int, int, int, cv::cuda::Stream&) */

void cv::cuda::getOutputMat
               (_OutputArray *param_1,int param_2,int param_3,int param_4,Stream *param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  undefined8 uVar5;
  char *pcVar6;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar5 = GpuMat::defaultAllocator();
  local_10 = 0;
  *(undefined8 *)(in_x8 + 0xe) = uVar5;
  *in_x8 = 0;
  in_x8[1] = 0;
  in_x8[2] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar4 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar5 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bdfb0 to 004bdfb3 has its CatchHandler @ 003be264 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar4;
  *(undefined8 *)pcVar6 = uVar5;
  *(undefined8 *)(pcVar6 + 8) = uVar1;
  *(undefined8 *)(pcVar6 + 0x10) = uVar2;
  *(undefined8 *)(pcVar6 + 0x18) = uVar3;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
                    /* try { // try from 003bdfdc to 004be02f has its CatchHandler @ 003bd6b0 */
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be020 (940 bytes) name=createContinuous

/* cv::cuda::createContinuous(int, int, int, cv::_OutputArray const&) */

void cv::cuda::createContinuous(int param_1,int param_2,int param_3,_OutputArray *param_4)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 uVar5;
  uint *puVar6;
  uint local_40;
  uint local_3c;
  uint local_38;
  undefined8 local_30;
  undefined8 local_28;
  int *local_20;
  undefined8 local_18;
  undefined8 local_10;
  uint local_8;
  undefined4 uStack_4;
  
  iVar4 = _InputArray::kind((_InputArray *)param_4);
  if (iVar4 == 0x80000) {
                    /* catch() { ... } // from try @ 003bd9c0 with catch @ 003be22c */
    puVar6 = (uint *)_OutputArray::getHostMemRef(param_4);
                    /* catch() { ... } // from try @ 003bdbe0 with catch @ 003be23c */
                    /* catch() { ... } // from try @ 003bdde0 with catch @ 003be24c */
                    /* try { // try from 003be394 to 004be3cb has its CatchHandler @ 003be5c8 */
    if ((((*(long *)(puVar6 + 6) == 0) || (uVar1 = *puVar6, param_3 != (uVar1 & 0xfff))) ||
        ((uVar1 >> 0xe & 1) == 0)) || ((int)(puVar6[1] * puVar6[2]) < param_1 * param_2)) {
                    /* catch() { ... } // from try @ 003bdec8 with catch @ 003be25c
                       catch() { ... } // from try @ 003be12c with catch @ 003be25c */
      HostMem::create((int)puVar6,1,param_1 * param_2);
                    /* catch() { ... } // from try @ 003bdfb0 with catch @ 003be264
                       catch() { ... } // from try @ 003be144 with catch @ 003be264 */
      uVar1 = *puVar6;
    }
                    /* catch() { ... } // from try @ 003be0a8 with catch @ 003be26c
                       catch() { ... } // from try @ 003be0dc with catch @ 003be26c */
    HostMem::reshape((int)puVar6,(uVar1 >> 3 & 0x1ff) + 1);
                    /* catch() { ... } // from try @ 003be0b8 with catch @ 003be290
                       catch() { ... } // from try @ 003be0e8 with catch @ 003be290 */
                    /* catch() { ... } // from try @ 003bd7cc with catch @ 003be2b4
                       catch() { ... } // from try @ 003bd9c8 with catch @ 003be2b4
                       catch() { ... } // from try @ 003bdbe8 with catch @ 003be2b4
                       catch() { ... } // from try @ 003bdd54 with catch @ 003be2b4
                       catch() { ... } // from try @ 003bdde8 with catch @ 003be2b4
                       catch() { ... } // from try @ 003be0c4 with catch @ 003be2b4
                       catch() { ... } // from try @ 003be150 with catch @ 003be2b4 */
    if (local_20 != (int *)0x0) {
      do {
                    /* catch() { ... } // from try @ 003be2fc with catch @ 003be2d0
                       catch() { ... } // from try @ 003be4b0 with catch @ 003be2d0
                       catch() { ... } // from try @ 003be590 with catch @ 003be2d0 */
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(local_20,0x10);
        if (bVar3) {
          *local_20 = *local_20 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    *puVar6 = local_40;
                    /* try { // try from 003be2fc to 004be2ff has its CatchHandler @ 003be2d0 */
    puVar6[1] = local_3c;
                    /* try { // try from 003be318 to 004be31b has its CatchHandler @ 003be56c */
    puVar6[2] = local_38;
    *(undefined8 *)(puVar6 + 4) = local_30;
    *(undefined8 *)(puVar6 + 6) = local_28;
    *(undefined8 *)(puVar6 + 10) = local_18;
                    /* try { // try from 003be348 to 004be34b has its CatchHandler @ 003be5c8 */
    *(undefined8 *)(puVar6 + 0xc) = local_10;
    *(int **)(puVar6 + 8) = local_20;
    puVar6[0xe] = local_8;
    HostMem::release();
    HostMem::release();
                    /* try { // try from 003be38c to 004be38f has its CatchHandler @ 003be594 */
    return;
  }
  if (iVar4 == 0x90000) {
                    /* try { // try from 003be0c4 to 004be0c7 has its CatchHandler @ 003be2b4 */
    puVar6 = (uint *)_OutputArray::getGpuMatRef(param_4);
                    /* try { // try from 003be0d0 to 004be0d3 has its CatchHandler @ 003be188 */
                    /* try { // try from 003be0dc to 004be0df has its CatchHandler @ 003be26c */
                    /* try { // try from 003be0e8 to 004be0eb has its CatchHandler @ 003be290 */
    if (((*(long *)(puVar6 + 6) == 0) || (uVar1 = *puVar6, param_3 != (uVar1 & 0xfff))) ||
       (((uVar1 >> 0xe & 1) == 0 || ((int)(puVar6[1] * puVar6[2]) < param_1 * param_2)))) {
      GpuMat::create((int)puVar6,1,param_1 * param_2);
      uVar1 = *puVar6;
    }
    GpuMat::reshape((int)puVar6,(uVar1 >> 3 & 0x1ff) + 1);
                    /* try { // try from 003be12c to 004be12f has its CatchHandler @ 003be25c */
                    /* try { // try from 003be138 to 004be13b has its CatchHandler @ 003be224 */
                    /* try { // try from 003be144 to 004be147 has its CatchHandler @ 003be264 */
                    /* try { // try from 003be150 to 004be15f has its CatchHandler @ 003be2b4 */
    if (local_20 != (int *)0x0) {
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(local_20,0x10);
        if (bVar3) {
          *local_20 = *local_20 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
                    /* catch() { ... } // from try @ 003bdcb0 with catch @ 003be188
                       catch() { ... } // from try @ 003be0d0 with catch @ 003be188 */
    *puVar6 = local_40;
    puVar6[1] = local_3c;
    puVar6[2] = local_38;
    *(undefined8 *)(puVar6 + 4) = local_30;
    *(undefined8 *)(puVar6 + 6) = local_28;
    *(undefined8 *)(puVar6 + 10) = local_18;
    *(undefined8 *)(puVar6 + 0xc) = local_10;
    *(int **)(puVar6 + 8) = local_20;
    *(ulong *)(puVar6 + 0xe) = CONCAT44(uStack_4,local_8);
    GpuMat::release();
    GpuMat::release();
                    /* try { // try from 003be220 to 004be223 has its CatchHandler @ 003bd6b0 */
                    /* catch() { ... } // from try @ 003bd76c with catch @ 003be224
                       catch() { ... } // from try @ 003bdf3c with catch @ 003be224
                       catch() { ... } // from try @ 003be138 with catch @ 003be224 */
    return;
  }
  if (iVar4 == 0x10000) {
    uVar5 = _OutputArray::getMatRef(param_4,-1);
                    /* try { // try from 003be0a8 to 004be0ab has its CatchHandler @ 003be26c */
    FUN_003bca1c(param_1,param_2,param_3,uVar5);
                    /* try { // try from 003be0b8 to 004be0bb has its CatchHandler @ 003be290 */
    return;
  }
  _OutputArray::create(param_4,param_1,param_2,param_3,-1,false,0);
  return;
}


==================================================================

### FUNC 003be3f4 (136 bytes) name=upload

/* cv::cuda::GpuMat::upload(cv::_InputArray const&) */

void cv::cuda::GpuMat::upload(_InputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be43c to 004be43f has its CatchHandler @ 003be56c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be490 (136 bytes) name=upload

/* cv::cuda::GpuMat::upload(cv::_InputArray const&, cv::cuda::Stream&) */

void cv::cuda::GpuMat::upload(_InputArray *param_1,Stream *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
                    /* try { // try from 003be4b0 to 004be4cb has its CatchHandler @ 003be2d0 */
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be4d4 to 004be4d7 has its CatchHandler @ 003be56c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be52c (136 bytes) name=download

/* cv::cuda::GpuMat::download(cv::_OutputArray const&) const */

void cv::cuda::GpuMat::download(_OutputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* catch() { ... } // from try @ 003be318 with catch @ 003be56c
                       catch() { ... } // from try @ 003be43c with catch @ 003be56c
                       catch() { ... } // from try @ 003be4d4 with catch @ 003be56c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
                    /* try { // try from 003be590 to 004be593 has its CatchHandler @ 003be2d0 */
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
                    /* catch() { ... } // from try @ 003be38c with catch @ 003be594 */
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be5c8 (136 bytes) name=download

/* cv::cuda::GpuMat::download(cv::_OutputArray const&, cv::cuda::Stream&) const */

void cv::cuda::GpuMat::download(_OutputArray *param_1,Stream *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 003be348 with catch @ 003be5c8
                       catch() { ... } // from try @ 003be394 with catch @ 003be5c8 */
                    /* catch() { ... } // from try @ 003be5fc with catch @ 003be5d0
                       catch() { ... } // from try @ 003be7b0 with catch @ 003be5d0
                       catch() { ... } // from try @ 003be890 with catch @ 003be5d0 */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be5fc to 004be5ff has its CatchHandler @ 003be5d0 */
                    /* try { // try from 003be618 to 004be61b has its CatchHandler @ 003be86c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
                    /* try { // try from 003be648 to 004be64b has its CatchHandler @ 003be8c8 */
  return;
}


==================================================================

### FUNC 003be664 (136 bytes) name=copyTo

/* cv::cuda::GpuMat::copyTo(cv::_OutputArray const&) const */

void cv::cuda::GpuMat::copyTo(_OutputArray *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be68c to 004be68f has its CatchHandler @ 003be894 */
                    /* try { // try from 003be694 to 004be6cb has its CatchHandler @ 003be8c8 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be700 (136 bytes) name=copyTo

/* cv::cuda::GpuMat::copyTo(cv::_OutputArray const&, cv::cuda::Stream&) const */

void cv::cuda::GpuMat::copyTo(_OutputArray *param_1,Stream *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be73c to 004be73f has its CatchHandler @ 003be86c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be79c (136 bytes) name=copyTo

/* cv::cuda::GpuMat::copyTo(cv::_OutputArray const&, cv::_InputArray const&, cv::cuda::Stream&)
   const */

void cv::cuda::GpuMat::copyTo(_OutputArray *param_1,_InputArray *param_2,Stream *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003be7b0 to 004be7cb has its CatchHandler @ 003be5d0 */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be7d4 to 004be7d7 has its CatchHandler @ 003be86c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003be838 (144 bytes) name=setTo

/* cv::cuda::GpuMat::setTo(cv::Scalar_<double>, cv::cuda::Stream&) */

undefined8 cv::cuda::GpuMat::setTo(undefined8 param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* catch() { ... } // from try @ 003be618 with catch @ 003be86c
                       catch() { ... } // from try @ 003be73c with catch @ 003be86c
                       catch() { ... } // from try @ 003be7d4 with catch @ 003be86c */
                    /* try { // try from 003be890 to 004be893 has its CatchHandler @ 003be5d0 */
                    /* catch() { ... } // from try @ 003be68c with catch @ 003be894 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return param_1;
}


==================================================================

### FUNC 003be8dc (144 bytes) name=setTo

/* cv::cuda::GpuMat::setTo(cv::Scalar_<double>, cv::_InputArray const&, cv::cuda::Stream&) */

undefined8 cv::cuda::GpuMat::setTo(undefined8 param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003be904 to 004be907 has its CatchHandler @ 003be8d0 */
                    /* try { // try from 003be920 to 004be923 has its CatchHandler @ 003beb7c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
                    /* try { // try from 003be950 to 004be953 has its CatchHandler @ 003bebd8 */
  String::deallocate((String *)&local_10);
  return param_1;
}


==================================================================

### FUNC 003be980 (136 bytes) name=convertTo

/* cv::cuda::GpuMat::convertTo(cv::_OutputArray const&, int, cv::cuda::Stream&) const */

void cv::cuda::GpuMat::convertTo(_OutputArray *param_1,int param_2,Stream *param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003be994 to 004be997 has its CatchHandler @ 003beba4 */
  local_10 = 0;
                    /* try { // try from 003be99c to 004be9d7 has its CatchHandler @ 003bebd8 */
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bea1c (136 bytes) name=convertTo

/* cv::cuda::GpuMat::convertTo(cv::_OutputArray const&, int, double, double, cv::cuda::Stream&)
   const */

void cv::cuda::GpuMat::convertTo
               (_OutputArray *param_1,int param_2,double param_3,double param_4,Stream *param_5)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bea48 to 004bea4b has its CatchHandler @ 003beb7c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003beab8 (140 bytes) name=getAllocator

/* cv::cuda::HostMem::getAllocator(cv::cuda::HostMem::AllocType) */

undefined8 cv::cuda::HostMem::getAllocator(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003beabc to 004beadb has its CatchHandler @ 003be8d0 */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003beae4 to 004beae7 has its CatchHandler @ 003beb7c */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return 0;
}


==================================================================

### FUNC 003beb58 (136 bytes) name=create

/* cv::cuda::HostMem::create(int, int, int) */

void cv::cuda::HostMem::create(int param_1,int param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* catch() { ... } // from try @ 003be920 with catch @ 003beb7c
                       catch() { ... } // from try @ 003bea48 with catch @ 003beb7c
                       catch() { ... } // from try @ 003beae4 with catch @ 003beb7c */
                    /* try { // try from 003beba0 to 004beba3 has its CatchHandler @ 003be8d0 */
                    /* catch() { ... } // from try @ 003be994 with catch @ 003beba4 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
                    /* catch() { ... } // from try @ 003be950 with catch @ 003bebd8
                       catch() { ... } // from try @ 003be99c with catch @ 003bebd8 */
  return;
}


==================================================================

### FUNC 003bebf4 (4 bytes) name=release

/* cv::cuda::HostMem::release() */

void cv::cuda::HostMem::release(void)

{
  return;
}


==================================================================

### FUNC 003bebf8 (784 bytes) name=reshape

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* cv::cuda::HostMem::reshape(int, int) const */

void cv::cuda::HostMem::reshape(int param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  char cVar5;
  bool bVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined2 uVar11;
  undefined4 uVar12;
  uint *puVar13;
  int *piVar14;
  undefined8 *puVar15;
  void *__dest;
  char *pcVar16;
  uint in_w2;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  uint *in_x8;
  int iVar21;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  puVar13 = (uint *)(ulong)(uint)param_1;
  uVar1 = *puVar13;
                    /* try { // try from 003bec1c to 004bec1f has its CatchHandler @ 003bebe0 */
  uVar2 = puVar13[1];
  uVar3 = puVar13[2];
  uVar20 = *(undefined8 *)(puVar13 + 4);
  uVar19 = *(undefined8 *)(puVar13 + 6);
  uVar18 = *(undefined8 *)(puVar13 + 10);
  piVar14 = *(int **)(puVar13 + 8);
  uVar17 = *(undefined8 *)(puVar13 + 0xc);
  in_x8[0xe] = puVar13[0xe];
  *in_x8 = uVar1;
                    /* try { // try from 003bec48 to 004bec4b has its CatchHandler @ 003bece4 */
  in_x8[1] = uVar2;
  in_x8[2] = uVar3;
  *(undefined8 *)(in_x8 + 4) = uVar20;
  *(undefined8 *)(in_x8 + 6) = uVar19;
  *(int **)(in_x8 + 8) = piVar14;
  *(undefined8 *)(in_x8 + 10) = uVar18;
  *(undefined8 *)(in_x8 + 0xc) = uVar17;
  if (piVar14 != (int *)0x0) {
    do {
      cVar5 = '\x01';
      bVar6 = (bool)ExclusiveMonitorPass(piVar14,0x10);
      if (bVar6) {
        *piVar14 = *piVar14 + 1;
        cVar5 = ExclusiveMonitorsStatus();
      }
    } while (cVar5 != '\0');
  }
  iVar21 = (*puVar13 >> 3 & 0x1ff) + 1;
  if (param_2 == 0) {
    param_2 = iVar21;
  }
  iVar21 = iVar21 * puVar13[2];
  if (iVar21 < param_2) {
LAB_003bed6c:
    if (in_w2 == 0) {
      in_w2 = 0;
      if (param_2 != 0) {
        in_w2 = (int)(iVar21 * puVar13[1]) / param_2;
      }
      goto joined_r0x003bed7c;
    }
  }
  else {
    iVar4 = 0;
    if (param_2 != 0) {
      iVar4 = iVar21 / param_2;
    }
    if (iVar21 - iVar4 * param_2 != 0) goto LAB_003bed6c;
joined_r0x003bed7c:
    if (in_w2 == 0) goto LAB_003becac;
  }
  if (puVar13[1] != in_w2) {
                    /* try { // try from 003bed8c to 004bed8f has its CatchHandler @ 003bf870 */
    uVar1 = iVar21 * puVar13[1];
    if ((*puVar13 >> 0xe & 1) == 0) {
      local_40 = 0;
      local_38 = 0;
      puVar15 = (undefined8 *)String::allocate((String *)&local_40,0x48);
      uVar8 = DAT_00462218;
      uVar7 = DAT_00462210;
      uVar20 = DAT_00462208;
      uVar19 = DAT_00462200;
      uVar18 = DAT_004621f8;
      uVar17 = DAT_004621f0;
      puVar15[8] = s_changed_00462230._0_8_;
      uVar10 = _DAT_00462228;
      uVar9 = DAT_00462220;
      *puVar15 = uVar17;
      puVar15[1] = uVar18;
      puVar15[2] = uVar19;
      puVar15[3] = uVar20;
      puVar15[4] = uVar7;
      puVar15[5] = uVar8;
      puVar15[6] = uVar9;
      puVar15[7] = uVar10;
      error(-0xd,(String *)&local_40,"cv::cuda::HostMem cv::cuda::HostMem::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_host_mem.cpp",0x105);
      String::deallocate((String *)&local_40);
    }
    if (uVar1 < in_w2) {
      local_30 = 0;
      local_28 = 0;
      pcVar16 = (char *)String::allocate((String *)&local_30,0x16);
      uVar11 = s_Bad_new_number_of_rows_00462240._20_2_;
      uVar18 = s_Bad_new_number_of_rows_00462240._8_8_;
      uVar17 = s_Bad_new_number_of_rows_00462240._0_8_;
                    /* try { // try from 003bee6c to 004bee6f has its CatchHandler @ 003bf8a8 */
                    /* try { // try from 003bee74 to 004bf26b has its CatchHandler @ 003bf870 */
      *(undefined4 *)(pcVar16 + 0x10) = s_Bad_new_number_of_rows_00462240._16_4_;
      *(undefined2 *)(pcVar16 + 0x14) = uVar11;
      *(undefined8 *)pcVar16 = uVar17;
      *(undefined8 *)(pcVar16 + 8) = uVar18;
      error(-0xd3,(String *)&local_30,"cv::cuda::HostMem cv::cuda::HostMem::reshape(int, int) const"
            ,"/builds/master_pack-android/opencv/modules/core/src/cuda_host_mem.cpp",0x108);
      String::deallocate((String *)&local_30);
    }
    iVar21 = 0;
    if (in_w2 != 0) {
      iVar21 = (int)uVar1 / (int)in_w2;
    }
    if (iVar21 * in_w2 != uVar1) {
      local_20 = 0;
      local_18 = 0;
      __dest = (void *)String::allocate((String *)&local_20,0x4e);
                    /* try { // try from 003bedd0 to 004bedd3 has its CatchHandler @ 003bf83c */
      memcpy(__dest,&DAT_00461f80,0x4e);
                    /* try { // try from 003bedd8 to 004bee3f has its CatchHandler @ 003bf870 */
      error(-5,(String *)&local_20,"cv::cuda::HostMem cv::cuda::HostMem::reshape(int, int) const",
            "/builds/master_pack-android/opencv/modules/core/src/cuda_host_mem.cpp",0x10d);
      String::deallocate((String *)&local_20);
    }
    in_x8[1] = in_w2;
    *(ulong *)(in_x8 + 4) = (long)iVar21 * (0x88442211UL >> ((*puVar13 & 7) << 2) & 0xf);
  }
LAB_003becac:
  uVar1 = 0;
  if (param_2 != 0) {
    uVar1 = iVar21 / param_2;
  }
  if (uVar1 * param_2 != iVar21) {
                    /* try { // try from 003becc0 to 004becdf has its CatchHandler @ 003bebe0 */
    local_10 = 0;
    local_8 = 0;
    puVar15 = (undefined8 *)String::allocate((String *)&local_10,0x3e);
    uVar11 = DAT_00462294;
    uVar12 = DAT_00462290;
    uVar8 = DAT_00462280;
    uVar7 = DAT_00462278;
    uVar20 = DAT_00462270;
    uVar19 = _LAB_00462268;
    uVar18 = DAT_00462260;
    uVar17 = DAT_00462258;
                    /* catch() { ... } // from try @ 003bec48 with catch @ 003bece4 */
                    /* try { // try from 003bed08 to 004bed0b has its CatchHandler @ 003bebe0 */
    puVar15[6] = DAT_00462288;
    *(undefined4 *)(puVar15 + 7) = uVar12;
    *(undefined2 *)((long)puVar15 + 0x3c) = uVar11;
                    /* catch() { ... } // from try @ 003bed44 with catch @ 003bed20
                       catch() { ... } // from try @ 003bf294 with catch @ 003bed20
                       catch() { ... } // from try @ 003bf6f4 with catch @ 003bed20
                       catch() { ... } // from try @ 003bf86c with catch @ 003bed20 */
    *puVar15 = uVar17;
    puVar15[1] = uVar18;
    puVar15[2] = uVar19;
    puVar15[3] = uVar20;
    puVar15[4] = uVar7;
    puVar15[5] = uVar8;
    error(-0xf,(String *)&local_10,"cv::cuda::HostMem cv::cuda::HostMem::reshape(int, int) const",
          "/builds/master_pack-android/opencv/modules/core/src/cuda_host_mem.cpp",0x116);
    String::deallocate((String *)&local_10);
  }
  in_x8[2] = uVar1;
                    /* try { // try from 003bed44 to 004bed63 has its CatchHandler @ 003bed20 */
  *in_x8 = *in_x8 & 0xfffff007 | (param_2 + -1) * 8;
  return;
}


==================================================================

### FUNC 003bef5c (184 bytes) name=createGpuMatHeader

/* cv::cuda::HostMem::createGpuMatHeader() const */

void __thiscall cv::cuda::HostMem::createGpuMatHeader(HostMem *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined4 uVar4;
  char *pcVar5;
  undefined8 uVar6;
  undefined4 *in_x8;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar5 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar4 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar6 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar5 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar5 + 0x28) = uVar4;
  *(undefined8 *)pcVar5 = uVar6;
  *(undefined8 *)(pcVar5 + 8) = uVar1;
  *(undefined8 *)(pcVar5 + 0x10) = uVar2;
  *(undefined8 *)(pcVar5 + 0x18) = uVar3;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  uVar6 = GpuMat::defaultAllocator();
  *in_x8 = 0;
  *(undefined8 *)(in_x8 + 0xe) = uVar6;
  in_x8[1] = 0;
  in_x8[2] = 0;
  *(undefined8 *)(in_x8 + 4) = 0;
  *(undefined8 *)(in_x8 + 6) = 0;
  *(undefined8 *)(in_x8 + 8) = 0;
  *(undefined8 *)(in_x8 + 10) = 0;
  *(undefined8 *)(in_x8 + 0xc) = 0;
  return;
}


==================================================================

### FUNC 003bf028 (136 bytes) name=registerPageLocked

/* cv::cuda::registerPageLocked(cv::Mat&) */

void cv::cuda::registerPageLocked(Mat *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf0c4 (4 bytes) name=unregisterPageLocked

/* cv::cuda::unregisterPageLocked(cv::Mat&) */

void cv::cuda::unregisterPageLocked(Mat *param_1)

{
  return;
}


==================================================================

### FUNC 003bf0c8 (80 bytes) name=~Stream

/* cv::cuda::Stream::~Stream() */

void __thiscall cv::cuda::Stream::~Stream(Stream *this)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  long *plVar5;
  
  plVar5 = *(long **)this;
  if (plVar5 != (long *)0x0) {
    plVar1 = plVar5 + 1;
    do {
      lVar4 = *plVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
      if (bVar3) {
        *(int *)plVar1 = (int)lVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if ((int)lVar4 == 1) {
      (**(code **)(*plVar5 + 0x10))();
      return;
    }
  }
  return;
}


==================================================================

### FUNC 003bf118 (148 bytes) name=Stream

/* cv::cuda::Stream::Stream() */

void __thiscall cv::cuda::Stream::Stream(Stream *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf1fc (140 bytes) name=queryIfComplete

/* cv::cuda::Stream::queryIfComplete() const */

undefined8 cv::cuda::Stream::queryIfComplete(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return 0;
}


==================================================================

### FUNC 003bf29c (136 bytes) name=waitForCompletion

/* cv::cuda::Stream::waitForCompletion() */

void cv::cuda::Stream::waitForCompletion(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf338 (136 bytes) name=waitEvent

/* cv::cuda::Stream::waitEvent(cv::cuda::Event const&) */

void cv::cuda::Stream::waitEvent(Event *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf3d4 (136 bytes) name=enqueueHostCallback

/* cv::cuda::Stream::enqueueHostCallback(void (*)(int, void*), void*) */

void cv::cuda::Stream::enqueueHostCallback(_func_void_int_void_ptr *param_1,void *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf470 (228 bytes) name=Null

/* cv::cuda::Stream::Null() */

undefined * cv::cuda::Stream::Null(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  int iVar6;
  char *pcVar7;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar7 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar7 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar7 + 0x28) = uVar5;
  *(undefined8 *)pcVar7 = uVar1;
  *(undefined8 *)(pcVar7 + 8) = uVar2;
  *(undefined8 *)(pcVar7 + 0x10) = uVar3;
  *(undefined8 *)(pcVar7 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  if (((DAT_00532ec8 & 1) == 0) && (iVar6 = __cxa_guard_acquire(&DAT_00532ec8), iVar6 != 0)) {
    Stream((Stream *)&DAT_00532ed0);
    __cxa_guard_release(&DAT_00532ec8);
    __cxa_atexit(PTR__Stream_005018b0,&DAT_00532ed0,&DAT_00502000);
    return &DAT_00532ed0;
  }
  return &DAT_00532ed0;
}


==================================================================

### FUNC 003bf57c (12 bytes) name=operator.cast.to.function.pointer

/* cv::cuda::Stream::operator void (cv::cuda::Stream::*)() const() const */

_func_void * __thiscall cv::cuda::Stream::operator_cast_to_function_pointer(Stream *this)

{
  return (_func_void *)0x0;
}


==================================================================

### FUNC 003bf588 (136 bytes) name=setBufferPoolUsage

/* cv::cuda::setBufferPoolUsage(bool) */

void cv::cuda::setBufferPoolUsage(bool param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
                    /* try { // try from 003bf5e0 to 004bf6e3 has its CatchHandler @ 003bf870 */
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf624 (136 bytes) name=setBufferPoolConfig

/* cv::cuda::setBufferPoolConfig(int, unsigned long, int) */

void cv::cuda::setBufferPoolConfig(int param_1,ulong param_2,int param_3)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf6c0 (148 bytes) name=Event

/* cv::cuda::Event::Event(cv::cuda::Event::CreateFlags) */

void __thiscall cv::cuda::Event::Event(Event *this)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  *(undefined8 *)this = 0;
  *(undefined8 *)(this + 8) = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bf6f4 to 004bf6f7 has its CatchHandler @ 003bed20 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf7a4 (136 bytes) name=record

/* cv::cuda::Event::record(cv::cuda::Stream&) */

void cv::cuda::Event::record(Stream *param_1)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf840 (140 bytes) name=queryIfComplete

/* cv::cuda::Event::queryIfComplete() const */

undefined8 cv::cuda::Event::queryIfComplete(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bf86c to 004bf86f has its CatchHandler @ 003bed20 */
                    /* catch() { ... } // from try @ 003bed8c with catch @ 003bf870
                       catch() { ... } // from try @ 003bedd8 with catch @ 003bf870
                       catch() { ... } // from try @ 003bee74 with catch @ 003bf870
                       catch() { ... } // from try @ 003bf5e0 with catch @ 003bf870 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
                    /* catch() { ... } // from try @ 003bee6c with catch @ 003bf8a8 */
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return 0;
}


==================================================================

### FUNC 003bf8e0 (136 bytes) name=waitForCompletion

/* cv::cuda::Event::waitForCompletion() */

void cv::cuda::Event::waitForCompletion(void)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 003bf920 with catch @ 003bf8f0
                       catch() { ... } // from try @ 003c014c with catch @ 003bf8f0
                       catch() { ... } // from try @ 003c0364 with catch @ 003bf8f0
                       catch() { ... } // from try @ 003c0434 with catch @ 003bf8f0 */
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bf920 to 004bf93f has its CatchHandler @ 003bf8f0 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
                    /* try { // try from 003bf948 to 004bf97b has its CatchHandler @ 003c0458 */
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return;
}


==================================================================

### FUNC 003bf97c (140 bytes) name=elapsedTime

/* cv::cuda::Event::elapsedTime(cv::cuda::Event const&, cv::cuda::Event const&) */

undefined1  [16] cv::cuda::Event::elapsedTime(Event *param_1,Event *param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  char *pcVar6;
  undefined8 local_10;
  undefined8 local_8;
  
  local_10 = 0;
  local_8 = 0;
  pcVar6 = (char *)String::allocate((String *)&local_10,0x2c);
  uVar5 = s_The_library_is_compiled_without_C_00476e98._40_4_;
  uVar4 = s_The_library_is_compiled_without_C_00476e98._24_8_;
  uVar3 = s_The_library_is_compiled_without_C_00476e98._16_8_;
  uVar2 = s_The_library_is_compiled_without_C_00476e98._8_8_;
  uVar1 = s_The_library_is_compiled_without_C_00476e98._0_8_;
                    /* try { // try from 003bf9cc to 004bf9cf has its CatchHandler @ 003c0438 */
  *(undefined8 *)(pcVar6 + 0x20) = s_The_library_is_compiled_without_C_00476e98._32_8_;
                    /* try { // try from 003bf9d4 to 004bfa07 has its CatchHandler @ 003c0458 */
  *(undefined4 *)(pcVar6 + 0x28) = uVar5;
  *(undefined8 *)pcVar6 = uVar1;
  *(undefined8 *)(pcVar6 + 8) = uVar2;
  *(undefined8 *)(pcVar6 + 0x10) = uVar3;
  *(undefined8 *)(pcVar6 + 0x18) = uVar4;
  error(-0xd8,(String *)&local_10,"void throw_no_cuda()",
        "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/private.cuda.hpp",0x61
       );
  String::deallocate((String *)&local_10);
  return ZEXT816(0);
}


==================================================================

### FUNC 003bfa1c (176 bytes) name=FUN_003bfa1c

void FUN_003bfa1c(long param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  long lVar13;
  long lVar14;
  float fVar15;
  float fVar16;
  
  iVar1 = *param_2;
  iVar2 = param_2[1];
  if (iVar1 < iVar2) {
    lVar14 = *(long *)(param_1 + 0x10);
    lVar11 = *(long *)(param_1 + 0x28) * 4;
    lVar13 = *(long *)(param_1 + 0x30);
    lVar8 = (long)iVar1 * 4;
    lVar12 = *(long *)(param_1 + 0x18);
                    /* try { // try from 003bfa50 to 004bfa53 has its CatchHandler @ 003c0448 */
    lVar10 = *(long *)(param_1 + 8);
                    /* try { // try from 003bfa58 to 004bfaaf has its CatchHandler @ 003c0458 */
    iVar3 = *(int *)(param_1 + 0x20);
    lVar7 = lVar14 + iVar1 * lVar11;
    lVar9 = 0;
    do {
      fVar16 = 0.0;
      if (0 < iVar3) {
        lVar6 = 0;
        do {
          lVar4 = lVar6 * 4;
          lVar5 = lVar6 * 4;
          lVar6 = lVar6 + 1;
          fVar15 = *(float *)(lVar7 + lVar4) - *(float *)(lVar14 + lVar13 * 4 + lVar5);
          fVar16 = fVar16 + fVar15 * fVar15;
        } while ((int)lVar6 < iVar3);
      }
      fVar15 = *(float *)(lVar12 + lVar8 + lVar9);
      if (fVar16 <= fVar15) {
        fVar15 = fVar16;
      }
      *(float *)(lVar10 + lVar8 + lVar9) = fVar15;
      lVar9 = lVar9 + 4;
      lVar7 = lVar7 + lVar11;
    } while (lVar9 != ((ulong)(uint)((iVar2 + -1) - iVar1) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003bfad0 (272 bytes) name=FUN_003bfad0

void FUN_003bfad0(long param_1,int *param_2)

{
  long lVar1;
  long lVar2;
  long lVar3;
  int iVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  double dVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  int iVar12;
  int iVar13;
  long lVar14;
  long lVar15;
  long lVar16;
  float fVar17;
  float fVar18;
  double dVar19;
  double dVar20;
  
  dVar8 = DAT_003bfbe0;
  iVar12 = *param_2;
  lVar15 = *(long *)(param_1 + 0x20);
  iVar4 = *(int *)(lVar15 + 8);
  iVar5 = *(int *)(lVar15 + 0xc);
  if (iVar12 < param_2[1]) {
    lVar10 = (long)iVar12;
                    /* try { // try from 003bfb04 to 004bfb07 has its CatchHandler @ 003c0460 */
    lVar1 = (ulong)(uint)((param_2[1] + -1) - iVar12) + 1;
    lVar2 = *(long *)(param_1 + 8) + lVar10 * 8;
    lVar14 = 0;
    lVar16 = **(long **)(*(long *)(param_1 + 0x18) + 0x48);
    lVar3 = *(long *)(param_1 + 0x10) + lVar10 * 4;
    lVar10 = *(long *)(*(long *)(param_1 + 0x18) + 0x10) + lVar16 * lVar10;
    do {
      while (0 < iVar4) {
        iVar12 = 0;
        lVar11 = *(long *)(lVar15 + 0x10);
        iVar13 = 0;
        dVar20 = dVar8;
        do {
          if (iVar5 < 1) {
            dVar19 = 0.0;
          }
          else {
            fVar18 = 0.0;
            lVar9 = 0;
            do {
              lVar6 = lVar9 * 4;
              lVar7 = lVar9 * 4;
              lVar9 = lVar9 + 1;
              fVar17 = *(float *)(lVar10 + lVar6) - *(float *)(lVar11 + lVar7);
              fVar18 = fVar18 + fVar17 * fVar17;
            } while ((int)lVar9 < iVar5);
            dVar19 = (double)fVar18;
          }
          if (dVar19 < dVar20) {
            dVar20 = dVar19;
            iVar13 = iVar12;
          }
          iVar12 = iVar12 + 1;
          lVar11 = lVar11 + **(long **)(lVar15 + 0x48);
        } while (iVar12 != iVar4);
        *(double *)(lVar2 + lVar14 * 8) = dVar20;
        lVar10 = lVar10 + lVar16;
        *(int *)(lVar3 + lVar14 * 4) = iVar13;
        lVar14 = lVar14 + 1;
        if (lVar14 == lVar1) {
          return;
        }
      }
      lVar10 = lVar10 + lVar16;
      *(double *)(lVar2 + lVar14 * 8) = dVar8;
      *(undefined4 *)(lVar3 + lVar14 * 4) = 0;
      lVar14 = lVar14 + 1;
    } while (lVar14 != lVar1);
  }
  return;
}


==================================================================

### FUNC 003bfbe8 (16 bytes) name=FUN_003bfbe8

void FUN_003bfbe8(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f79a0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 003bfbf8 (44 bytes) name=FUN_003bfbf8

void FUN_003bfbf8(ParallelLoopBody *param_1)

{
                    /* try { // try from 003bfc08 to 004bfc0b has its CatchHandler @ 003c03c4 */
  *(undefined ***)param_1 = &PTR_FUN_004f79a0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003bfc24 (16 bytes) name=FUN_003bfc24

void FUN_003bfc24(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f79d0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  return;
}


==================================================================

### FUNC 003bfc34 (44 bytes) name=FUN_003bfc34

void FUN_003bfc34(ParallelLoopBody *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f79d0;
  cv::ParallelLoopBody::~ParallelLoopBody(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003bfc60 (10024 bytes) name=kmeans

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::kmeans(cv::_InputArray const&, int, cv::_InputOutputArray const&, cv::TermCriteria, int, int,
   cv::_OutputArray const&) */

undefined1  [16] __thiscall
cv::kmeans(cv *this,uint param_2,_OutputArray *param_3_00,ulong param_3,double param_5,int param_6,
          uint param_7,_OutputArray *param_8)

{
  ulong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  undefined1 auVar6 [16];
  undefined1 auVar7 [16];
  double dVar8;
  undefined8 uVar9;
  float fVar10;
  undefined1 auVar11 [16];
  float fVar12;
  undefined8 uVar13;
  float fVar14;
  float fVar15;
  undefined1 auVar16 [12];
  double dVar17;
  undefined4 uVar18;
  undefined2 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  long lVar22;
  bool bVar23;
  char cVar24;
  int iVar25;
  uint uVar26;
  uint uVar27;
  int iVar28;
  void *__dest;
  ulong uVar29;
  ulong *puVar30;
  float *pfVar31;
  ulong uVar32;
  char *pcVar33;
  long lVar34;
  float *pfVar35;
  undefined8 *puVar36;
  undefined4 *puVar37;
  float *pfVar38;
  ulong uVar39;
  ulong uVar40;
  ulong uVar41;
  undefined8 *puVar42;
  float *pfVar43;
  Mat **ppMVar44;
  uint *puVar45;
  ulong uVar46;
  Mat *pMVar47;
  long lVar48;
  float *pfVar49;
  long lVar50;
  uint uVar51;
  int *piVar52;
  long lVar53;
  float *pfVar54;
  uint uVar55;
  int iVar56;
  long lVar57;
  long lVar58;
  int *piVar59;
  ulong uVar60;
  uint uVar61;
  uint uVar62;
  float *pfVar63;
  Mat *pMVar64;
  ulong uVar65;
  uint uVar66;
  uint uVar67;
  ulong uVar68;
  undefined8 *puVar69;
  uint uVar70;
  int iVar71;
  ulong uVar72;
  long lVar73;
  undefined1 uVar74;
  undefined1 uVar75;
  undefined1 uVar77;
  undefined1 uVar78;
  undefined1 uVar79;
  undefined1 uVar80;
  undefined1 uVar81;
  undefined1 uVar82;
  undefined1 uVar83;
  undefined1 uVar84;
  undefined1 uVar85;
  undefined1 uVar86;
  undefined1 uVar87;
  undefined1 uVar88;
  undefined1 uVar89;
  undefined1 uVar90;
  undefined1 auVar76 [16];
  undefined1 uVar91;
  undefined1 uVar92;
  undefined1 uVar93;
  undefined1 uVar94;
  undefined1 uVar95;
  undefined1 uVar96;
  undefined1 uVar97;
  undefined1 uVar98;
  undefined1 uVar99;
  undefined1 uVar100;
  float fVar101;
  float fVar102;
  int iVar103;
  undefined1 auVar104 [16];
  undefined1 auVar105 [16];
  undefined1 auVar106 [16];
  undefined1 auVar107 [16];
  undefined1 auVar108 [16];
  double dVar109;
  double dVar110;
  double dVar111;
  double dVar112;
  double dVar113;
  double dVar114;
  undefined1 local_570;
  undefined1 uStack_56f;
  undefined1 uStack_56e;
  undefined1 uStack_56d;
  undefined1 uStack_56c;
  undefined1 uStack_56b;
  undefined1 uStack_56a;
  undefined1 uStack_569;
  float local_550;
  float fStack_54c;
  float fStack_548;
  float fStack_544;
  float local_540;
  float fStack_53c;
  float fStack_538;
  float fStack_534;
  int local_524;
  int *local_518;
  uint local_508;
  int local_504;
  Mat *local_4f8;
  int local_4e4;
  Mat *local_4e0;
  float *local_4c8;
  float *local_4b0;
  int *local_4a8;
  int *local_498;
  int local_490;
  int local_48c;
  uint local_3d0;
  int iStack_3cc;
  uint local_3b8 [3];
  uint local_3ac;
  uint local_3a8;
  uint local_3a4;
  uint local_3a0;
  uint local_39c;
  int local_398;
  uint local_394;
  int local_390;
  uint local_38c;
  undefined8 local_388;
  undefined8 local_380;
  undefined8 local_378;
  undefined8 local_370;
  undefined8 local_368;
  undefined8 local_360;
  undefined8 local_358;
  undefined8 local_350;
  undefined8 local_348;
  undefined8 local_340;
  long local_338 [2];
  undefined **local_328;
  long local_320;
  long local_318;
  Mat *local_310;
  Mat *local_308;
  undefined8 local_300;
  undefined8 uStack_2f8;
  long local_2f0;
  undefined8 local_2e8;
  undefined8 local_2e0;
  undefined8 local_2d8;
  undefined8 local_2d0;
  long local_2c8;
  undefined8 *local_2c0;
  undefined8 *local_2b8;
  undefined8 local_2b0;
  undefined8 uStack_2a8;
  undefined8 local_2a0;
  Mat *pMStack_298;
  float *local_290;
  undefined8 local_288;
  undefined8 local_280;
  undefined8 local_278;
  undefined8 local_270;
  long local_268;
  Mat **local_260;
  long *local_258;
  long local_250 [2];
  undefined8 local_240;
  Mat *pMStack_238;
  long local_230;
  undefined8 local_228;
  undefined8 local_220;
  undefined8 local_218;
  undefined8 local_210;
  long local_208;
  Mat **local_200;
  long *local_1f8;
  long local_1f0 [2];
  undefined8 local_1e0;
  Mat *pMStack_1d8;
  float *local_1d0;
  undefined8 local_1c8;
  undefined8 local_1c0;
  undefined8 local_1b8;
  undefined8 local_1b0;
  long local_1a8;
  Mat **local_1a0;
  undefined8 *local_198;
  undefined8 local_190;
  undefined8 uStack_188;
  undefined8 local_180;
  Mat *pMStack_178;
  float *local_170;
  float *pfStack_168;
  undefined8 local_160;
  ulong local_158;
  long local_150;
  long local_148;
  Mat **local_140;
  undefined8 *local_138;
  undefined8 local_130;
  undefined8 uStack_128;
  uint local_120;
  int local_11c;
  uint local_118;
  uint local_114;
  float *local_110;
  undefined8 local_108;
  undefined8 local_100;
  undefined8 local_f8;
  undefined8 local_f0;
  long local_e8;
  uint *local_e0;
  ulong *local_d8;
  ulong local_d0;
  ulong local_c8;
  uint local_c0;
  int local_bc;
  uint local_b8;
  uint local_b4;
  float *local_b0;
  float *local_a8;
  long local_a0;
  float *local_98;
  undefined8 local_90;
  long local_88;
  uint *local_80;
  ulong *local_78;
  ulong local_70 [2];
  uint local_60;
  int local_5c;
  uint local_58;
  int local_54;
  long local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  long local_28;
  uint *local_20;
  undefined8 *local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  iVar25 = _InputArray::kind((_InputArray *)this);
  if (iVar25 == 0x10000) {
    pMVar47 = *(Mat **)(this + 8);
    local_e0 = &local_118;
    local_d8 = &local_d0;
    local_120 = *(uint *)pMVar47;
    local_11c = *(int *)(pMVar47 + 4);
    local_118 = *(uint *)(pMVar47 + 8);
                    /* try { // try from 003c284c to 004c29f7 has its CatchHandler @ 003c3148 */
    local_114 = *(uint *)(pMVar47 + 0xc);
    local_110 = *(float **)(pMVar47 + 0x10);
    local_108 = *(undefined8 *)(pMVar47 + 0x18);
    local_100 = *(undefined8 *)(pMVar47 + 0x20);
    local_f8 = *(undefined8 *)(pMVar47 + 0x28);
    local_f0 = *(undefined8 *)(pMVar47 + 0x30);
    local_e8 = *(long *)(pMVar47 + 0x38);
    local_c8 = 0;
    local_d0 = 0;
    if (local_e8 != 0) {
      piVar59 = (int *)(local_e8 + 0x14);
      do {
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = *piVar59 + 1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
    }
    if (*(int *)(pMVar47 + 4) < 3) {
      local_d0 = **(ulong **)(pMVar47 + 0x48);
      local_c8 = (*(ulong **)(pMVar47 + 0x48))[1];
    }
    else {
      local_11c = 0;
      Mat::copySize((Mat *)&local_120,pMVar47);
    }
  }
  else {
    _InputArray::getMat_((int)this);
  }
  local_4f8 = (Mat *)&local_120;
  local_508 = local_118;
  uVar61 = local_120 >> 3 & 0x1ff;
  if ((local_118 == 1) && (uVar61 != 0)) {
    uVar67 = 1;
    local_508 = local_114;
    uVar66 = uVar67;
  }
  else {
    uVar67 = local_114;
    uVar66 = 0;
  }
  uVar2 = local_120 & 7;
  if (param_6 < 1) {
    param_6 = 1;
  }
  uVar67 = uVar67 + uVar61 * uVar67;
  if (((2 < local_11c) || (uVar2 != 5)) || ((int)param_2 < 1)) {
    local_388 = 0;
    local_380 = 0;
    pcVar33 = (char *)String::allocate((String *)&local_388,0x2a);
    uVar19 = s_data0_dims_<__2_&&_type____CV_32_004770a0._40_2_;
    uVar21 = s_data0_dims_<__2_&&_type____CV_32_004770a0._24_8_;
    uVar20 = s_data0_dims_<__2_&&_type____CV_32_004770a0._16_8_;
    uVar13 = s_data0_dims_<__2_&&_type____CV_32_004770a0._8_8_;
    uVar9 = s_data0_dims_<__2_&&_type____CV_32_004770a0._0_8_;
                    /* try { // try from 003c2798 to 004c279b has its CatchHandler @ 003c2750 */
                    /* try { // try from 003c27b4 to 004c27b7 has its CatchHandler @ 003c3050 */
    *(undefined8 *)(pcVar33 + 0x20) = s_data0_dims_<__2_&&_type____CV_32_004770a0._32_8_;
    *(undefined2 *)(pcVar33 + 0x28) = uVar19;
    *(undefined8 *)pcVar33 = uVar9;
    *(undefined8 *)(pcVar33 + 8) = uVar13;
    *(undefined8 *)(pcVar33 + 0x10) = uVar20;
    *(undefined8 *)(pcVar33 + 0x18) = uVar21;
    error(-0xd7,(String *)&local_388,
          "double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/kmeans.cpp",0xe6);
    String::deallocate((String *)&local_388);
  }
  if ((int)local_508 < (int)param_2) {
    local_378 = 0;
    local_370 = 0;
    puVar37 = (undefined4 *)String::allocate((String *)&local_378,6);
    uVar19 = DAT_00477114;
                    /* try { // try from 003c2738 to 004c273b has its CatchHandler @ 003c24c0 */
                    /* try { // try from 003c2744 to 004c2747 has its CatchHandler @ 003c25bc */
                    /* catch() { ... } // from try @ 003c2798 with catch @ 003c2750
                       catch() { ... } // from try @ 003c2eb0 with catch @ 003c2750
                       catch() { ... } // from try @ 003c3074 with catch @ 003c2750 */
    *puVar37 = DAT_00477110;
    *(undefined2 *)(puVar37 + 1) = uVar19;
    error(-0xd7,(String *)&local_378,
          "double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)"
          ,"/builds/master_pack-android/opencv/modules/core/src/kmeans.cpp",0xe7);
    String::deallocate((String *)&local_378);
  }
  uVar65 = (ulong)(int)uVar67;
  local_b0 = local_110;
  uVar29 = local_d0;
  if (uVar66 != 0) {
    uVar29 = uVar65 << 2;
  }
  uVar68 = uVar65 * 4;
  local_c0 = 0x42ff0005;
  local_bc = 2;
  local_80 = &local_b8;
  local_78 = local_70;
  local_b8 = local_508;
  local_a0 = 0;
  local_98 = (float *)0x0;
  local_90 = 0;
  local_88 = 0;
  local_70[1] = 0;
  local_70[0] = 0;
  local_b4 = uVar67;
  local_a8 = local_b0;
  if (uVar29 == 0) {
                    /* catch() { ... } // from try @ 003c1970 with catch @ 003c26f4
                       catch() { ... } // from try @ 003c2198 with catch @ 003c26f4
                       catch() { ... } // from try @ 003c2260 with catch @ 003c26f4
                       catch() { ... } // from try @ 003c2708 with catch @ 003c26f4 */
    local_c0 = 0x42ff4005;
    local_a0 = 0;
  }
  else {
    if (local_508 == 1) {
      local_c0 = 0x42ff4005;
    }
    else {
      if ((uVar29 & 3) != 0) {
        local_338[0] = 0;
        local_338[1] = 0;
        pcVar33 = (char *)String::allocate((String *)local_338,0x1f);
        cVar24 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
        uVar19 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
        uVar18 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
        uVar13 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
        uVar9 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
        *(undefined8 *)(pcVar33 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
        *(undefined4 *)(pcVar33 + 0x18) = uVar18;
        *(undefined2 *)(pcVar33 + 0x1c) = uVar19;
        pcVar33[0x1e] = cVar24;
        *(undefined8 *)pcVar33 = uVar9;
        *(undefined8 *)(pcVar33 + 8) = uVar13;
        error(-0xd,(String *)local_338,"cv::Mat::Mat(int, int, int, void*, size_t)",
              "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",
              0x19d);
        String::deallocate((String *)local_338);
      }
      if (uVar29 != uVar68) {
        local_a0 = uVar68 - uVar29;
        uVar68 = uVar29;
        goto LAB_003bfdf8;
      }
      local_c0 = local_c0 | 0x4000;
    }
    local_a0 = 0;
  }
LAB_003bfdf8:
  *local_78 = uVar68;
  local_98 = (float *)((long)local_a8 + (long)(int)local_b8 * uVar68);
  local_78[1] = 4;
  local_a0 = (long)local_98 + local_a0;
  _OutputArray::create(param_3_00,local_508,1,4,-1,true,0);
  local_2b8 = &local_2b0;
  local_2c0 = &uStack_2f8;
  uStack_2a8 = 0;
  local_2b0 = 0;
  uStack_2f8 = _UNK_003c2918;
  local_300 = _DAT_003c2910;
  local_2f0 = 0;
  local_2e8 = 0;
  local_2e0 = 0;
  local_2d8 = 0;
  local_2d0 = 0;
  local_2c8 = 0;
  iVar25 = _InputArray::kind((_InputArray *)param_3_00);
  if (iVar25 == 0x10000) {
    pMVar47 = *(Mat **)(param_3_00 + 8);
    local_20 = &local_58;
    local_18 = &local_10;
    local_60 = *(uint *)pMVar47;
    local_5c = *(int *)(pMVar47 + 4);
    local_58 = *(uint *)(pMVar47 + 8);
    local_54 = *(int *)(pMVar47 + 0xc);
    local_50 = *(long *)(pMVar47 + 0x10);
    local_48 = *(undefined8 *)(pMVar47 + 0x18);
    local_40 = *(undefined8 *)(pMVar47 + 0x20);
                    /* catch() { ... } // from try @ 003c1a44 with catch @ 003c2598 */
    local_38 = *(undefined8 *)(pMVar47 + 0x28);
    local_30 = *(undefined8 *)(pMVar47 + 0x30);
    local_28 = *(long *)(pMVar47 + 0x38);
                    /* try { // try from 003c25b4 to 004c25b7 has its CatchHandler @ 003c25bc */
                    /* catch() { ... } // from try @ 003c19e8 with catch @ 003c25bc
                       catch() { ... } // from try @ 003c1a4c with catch @ 003c25bc
                       catch() { ... } // from try @ 003c2114 with catch @ 003c25bc
                       catch() { ... } // from try @ 003c25b4 with catch @ 003c25bc
                       catch() { ... } // from try @ 003c2744 with catch @ 003c25bc */
    local_8 = 0;
    local_10 = 0;
    if (local_28 != 0) {
      piVar59 = (int *)(local_28 + 0x14);
      do {
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = *piVar59 + 1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
    }
    if (*(int *)(pMVar47 + 4) < 3) {
      local_10 = **(undefined8 **)(pMVar47 + 0x48);
      local_8 = (*(undefined8 **)(pMVar47 + 0x48))[1];
    }
    else {
      local_5c = 0;
      Mat::copySize((Mat *)&local_60,pMVar47);
    }
  }
  else {
    _InputArray::getMat_((int)param_3_00);
  }
  local_4e0 = (Mat *)&local_60;
  if ((param_7 & 1) != 0) {
    if (((local_54 != 1) && (local_58 != 1)) ||
       ((local_508 != local_54 * local_58 ||
        (((local_60 & 0xfff) != 4 || ((local_60 >> 0xe & 1) == 0)))))) {
      local_368 = 0;
      local_360 = 0;
      __dest = (void *)String::allocate((String *)&local_368,0x98);
      memcpy(__dest,&DAT_00477118,0x98);
      error(-0xd7,(String *)&local_368,
            "double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)"
            ,"/builds/master_pack-android/opencv/modules/core/src/kmeans.cpp",0xf3);
      String::deallocate((String *)&local_368);
    }
    local_170 = (float *)0x0;
    local_180 = (undefined **)CONCAT44(local_180._4_4_,0x2010000);
    pMStack_178 = (Mat *)&local_300;
    Mat::copyTo(local_4e0,(_OutputArray *)&local_180);
    goto LAB_003bff50;
  }
  if ((local_54 == 1) || (local_58 == 1)) {
                    /* try { // try from 003c24d4 to 004c24d7 has its CatchHandler @ 003c24c0 */
    if ((local_508 == local_54 * local_58) &&
       (((local_60 & 0xfff) == 4 && ((local_60 >> 0xe & 1) != 0)))) {
      uVar61 = 4;
    }
    else if ((2 < local_5c) ||
            ((((local_54 != 1 || (local_508 != local_58)) || ((local_60 & 0xfff) != 4)) ||
             (uVar61 = 4, local_50 == 0)))) goto LAB_003c2440;
  }
  else {
LAB_003c2440:
    local_3b8[0] = local_508;
    local_3b8[1] = 1;
    Mat::create(local_4e0,2,(int *)local_3b8,4);
    uVar61 = local_60 & 0xfff;
  }
  if (((2 < local_300._4_4_) || (*local_20 != (uint)uStack_2f8)) ||
     ((local_20[1] != uStack_2f8._4_4_ ||
      ((((uint)local_300 & 0xfff) != uVar61 || (local_2f0 == 0)))))) {
    local_3b8[2] = *local_20;
    local_3ac = local_20[1];
    Mat::create((Mat *)&local_300,2,(int *)(local_3b8 + 2),uVar61);
                    /* catch() { ... } // from try @ 003c1ac4 with catch @ 003c24c0
                       catch() { ... } // from try @ 003c2090 with catch @ 003c24c0
                       catch() { ... } // from try @ 003c24d4 with catch @ 003c24c0
                       catch() { ... } // from try @ 003c2738 with catch @ 003c24c0 */
  }
LAB_003bff50:
  lVar22 = local_2f0;
  local_258 = local_250;
  local_260 = &pMStack_298;
  pMStack_298 = _UNK_003c2918;
  local_2a0 = _DAT_003c2910;
  local_290 = (float *)0x0;
  local_288 = 0;
  local_280 = 0;
  local_278 = 0;
  local_250[1] = 0;
  local_250[0] = 0;
  local_270 = 0;
  local_268 = 0;
  local_3a8 = param_2;
  local_3a4 = uVar67;
                    /* try { // try from 003bffb0 to 004bffb3 has its CatchHandler @ 003c0470 */
  Mat::create((Mat *)&local_2a0,2,(int *)&local_3a8,uVar2);
  pMStack_238 = _UNK_003c2918;
  local_240 = _DAT_003c2910;
  local_1f8 = local_1f0;
  local_200 = &pMStack_238;
  local_230 = 0;
  local_228 = 0;
  local_220 = 0;
  local_1f0[1] = 0;
  local_1f0[0] = 0;
  local_218 = 0;
  local_210 = 0;
  local_208 = 0;
  local_3a0 = param_2;
  local_39c = uVar67;
  Mat::create((Mat *)&local_240,2,(int *)&local_3a0,uVar2);
  pMStack_1d8 = _UNK_003c2918;
  local_1e0 = _DAT_003c2910;
  local_198 = &local_190;
                    /* try { // try from 003c0024 to 004c0027 has its CatchHandler @ 003c03c4 */
  local_1a0 = &pMStack_1d8;
  local_1d0 = (float *)0x0;
  local_1c8 = 0;
  local_1c0 = 0;
  uStack_188 = 0;
  local_190 = 0;
  local_1b8 = 0;
  local_1b0 = 0;
  local_1a8 = 0;
  local_398 = 1;
  local_394 = uVar67;
  Mat::create((Mat *)&local_1e0,2,&local_398,uVar2);
  uVar29 = (ulong)(int)param_2;
  local_518 = (int *)0x0;
  if (uVar29 != 0) {
    if (0x3fffffffffffffff < uVar29) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
                    /* catch() { ... } // from try @ 003c0510 with catch @ 003c04e0
                       catch() { ... } // from try @ 003c07d4 with catch @ 003c04e0
                       catch() { ... } // from try @ 003c0894 with catch @ 003c04e0 */
    local_518 = operator_new(uVar29 << 2);
    memset(local_518,0,uVar29 << 2);
  }
  if (uVar65 == 0) {
    pfVar49 = (float *)0x0;
    local_4c8 = (float *)0x0;
  }
  else {
    if (0x1fffffffffffffff < uVar65) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f0e4();
    }
    local_4c8 = operator_new(uVar65 * 8);
    pfVar49 = local_4c8 + uVar65 * 2;
    pfVar31 = local_4c8;
    uVar68 = uVar65;
    do {
      if (pfVar31 != (float *)0x0) {
        *pfVar31 = 0.0;
        pfVar31[1] = 0.0;
      }
      uVar68 = uVar68 - 1;
      pfVar31 = pfVar31 + 2;
    } while (uVar68 != 0);
  }
                    /* try { // try from 003c0098 to 004c009b has its CatchHandler @ 003c0468 */
  puVar30 = (ulong *)theRNG();
  local_3d0 = (uint)param_3;
  if ((local_3d0 >> 1 & 1) == 0) {
    uVar74 = (undefined1)DAT_003c28f8;
    uVar77 = (undefined1)((ulong)DAT_003c28f8 >> 8);
    uVar79 = (undefined1)((ulong)DAT_003c28f8 >> 0x10);
    uVar81 = (undefined1)((ulong)DAT_003c28f8 >> 0x18);
    uVar83 = (undefined1)((ulong)DAT_003c28f8 >> 0x20);
    uVar85 = (undefined1)((ulong)DAT_003c28f8 >> 0x28);
    uVar87 = (undefined1)((ulong)DAT_003c28f8 >> 0x30);
    uVar89 = (undefined1)((ulong)DAT_003c28f8 >> 0x38);
  }
  else if (param_5 < 0.0) {
    uVar74 = 0;
    uVar77 = 0;
    uVar79 = 0;
    uVar81 = 0;
    uVar83 = 0;
    uVar85 = 0;
    uVar87 = 0;
    uVar89 = 0;
  }
  else {
    param_5 = param_5 * param_5;
    uVar74 = SUB81(param_5,0);
    uVar77 = (undefined1)((ulong)param_5 >> 8);
    uVar79 = (undefined1)((ulong)param_5 >> 0x10);
    uVar81 = (undefined1)((ulong)param_5 >> 0x18);
    uVar83 = (undefined1)((ulong)param_5 >> 0x20);
    uVar85 = (undefined1)((ulong)param_5 >> 0x28);
    uVar87 = (undefined1)((ulong)param_5 >> 0x30);
    uVar89 = (undefined1)((ulong)param_5 >> 0x38);
  }
  iStack_3cc = (int)(param_3 >> 0x20);
  if ((param_3 & 1) != 0) {
    local_180 = (undefined **)CONCAT44(local_180._4_4_,2);
  }
  local_48c = param_6;
  if (param_2 == 1) {
    local_48c = 1;
  }
  if (0 < (int)uVar67) {
                    /* try { // try from 003c0120 to 004c0123 has its CatchHandler @ 003c0458 */
    if ((local_b0 < local_4c8 + uVar65 * 2 && local_4c8 < local_b0 + uVar65) || (uVar67 < 7)) {
      lVar53 = 0;
      pfVar31 = local_4c8;
      do {
        fVar102 = local_b0[lVar53];
        lVar53 = lVar53 + 1;
        *pfVar31 = fVar102;
                    /* try { // try from 003c07d4 to 004c07f7 has its CatchHandler @ 003c04e0 */
        pfVar31[1] = fVar102;
        pfVar31 = pfVar31 + 2;
      } while ((int)lVar53 < (int)uVar67);
    }
    else {
                    /* try { // try from 003c014c to 004c019f has its CatchHandler @ 003bf8f0 */
      uVar66 = 0;
      uVar61 = (uVar67 - 4 >> 2) + 1;
      uVar2 = uVar61 * 4;
      pfVar31 = local_b0;
      pfVar35 = local_4c8;
      do {
        uVar66 = uVar66 + 1;
        fVar102 = (float)*(undefined8 *)pfVar31;
        fVar101 = (float)((ulong)*(undefined8 *)pfVar31 >> 0x20);
        fVar10 = (float)*(undefined8 *)(pfVar31 + 2);
        fVar12 = (float)((ulong)*(undefined8 *)(pfVar31 + 2) >> 0x20);
        *pfVar35 = fVar102;
        pfVar35[1] = fVar102;
        pfVar35[2] = fVar101;
        pfVar35[3] = fVar101;
        pfVar35[4] = fVar10;
        pfVar35[5] = fVar10;
        pfVar35[6] = fVar12;
        pfVar35[7] = fVar12;
        pfVar35 = pfVar35 + 8;
        pfVar31 = pfVar31 + 4;
      } while (uVar66 < uVar61);
      if (uVar2 != uVar67) {
        lVar53 = (long)(int)uVar2;
        fVar102 = local_b0[lVar53];
        local_4c8[lVar53 * 2] = fVar102;
        local_4c8[lVar53 * 2 + 1] = fVar102;
        if ((int)(uVar2 + 1) < (int)uVar67) {
          lVar53 = (long)(int)(uVar2 + 1);
          fVar102 = local_b0[lVar53];
          local_4c8[lVar53 * 2] = fVar102;
          local_4c8[lVar53 * 2 + 1] = fVar102;
          if ((int)(uVar2 + 2) < (int)uVar67) {
            lVar53 = (long)(int)(uVar2 + 2);
            fVar102 = local_b0[lVar53];
            local_4c8[lVar53 * 2] = fVar102;
            local_4c8[lVar53 * 2 + 1] = fVar102;
          }
        }
      }
    }
  }
  if (1 < (int)local_508) {
    uVar61 = 1;
    uVar66 = (uVar67 - 4 >> 2) + 1;
    uVar65 = *local_78;
    uVar3 = uVar66 * 4;
    uVar2 = uVar3;
    if (uVar67 - 1 < 3) {
      uVar2 = 0;
    }
    iVar25 = uVar2 + 1;
    iVar28 = uVar2 + 2;
    pfVar31 = local_4c8 + (long)(int)uVar2 * 2;
    pfVar35 = local_4c8 + (long)iVar25 * 2;
    pfVar43 = local_4c8 + (long)iVar28 * 2;
    pfVar38 = local_b0;
    do {
      pfVar38 = (float *)((long)pfVar38 + uVar65);
      if (0 < (int)uVar67) {
        if ((local_4c8 < pfVar38 + uVar67 && pfVar38 < local_4c8 + (ulong)uVar67 * 2) ||
           (uVar67 < 4)) {
          lVar53 = 0;
          pfVar54 = local_4c8;
          do {
            fVar102 = pfVar38[lVar53];
            uVar75 = SUB41(fVar102,0);
            uVar78 = (undefined1)((uint)fVar102 >> 8);
            uVar80 = (undefined1)((uint)fVar102 >> 0x10);
                    /* try { // try from 003c0800 to 004c0803 has its CatchHandler @ 003c0898 */
            fVar101 = fVar102;
            if (*pfVar54 <= fVar102) {
                    /* try { // try from 003c080c to 004c0823 has its CatchHandler @ 003c08a0 */
              fVar101 = *pfVar54;
            }
            fVar10 = pfVar54[1];
            *pfVar54 = fVar101;
            uVar82 = (char)((uint)fVar102 >> 0x18);
            if (fVar102 <= fVar10) {
              uVar75 = SUB41(fVar10,0);
              uVar78 = (undefined1)((uint)fVar10 >> 8);
              uVar80 = (undefined1)((uint)fVar10 >> 0x10);
              uVar82 = (char)((uint)fVar10 >> 0x18);
            }
            lVar53 = lVar53 + 1;
                    /* catch() { ... } // from try @ 003c05fc with catch @ 003c0830
                       catch() { ... } // from try @ 003c0678 with catch @ 003c0830 */
            pfVar54[1] = (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
            pfVar54 = pfVar54 + 2;
          } while ((int)lVar53 < (int)uVar67);
        }
        else {
          if (2 < uVar67 - 1) {
            uVar55 = 0;
            pfVar54 = local_4c8;
            pfVar63 = pfVar38;
            do {
              fVar12 = pfVar54[1];
              fVar102 = pfVar54[2];
              fVar101 = pfVar54[3];
              uVar90 = SUB41(fVar101,0);
              uVar91 = (undefined1)((uint)fVar101 >> 8);
              uVar92 = (undefined1)((uint)fVar101 >> 0x10);
              uVar93 = (undefined1)((uint)fVar101 >> 0x18);
              fVar101 = pfVar54[4];
              fVar14 = pfVar54[5];
              uVar94 = (undefined1)((uint)fVar14 >> 8);
              uVar95 = (undefined1)((uint)fVar14 >> 0x10);
              uVar96 = (undefined1)((uint)fVar14 >> 0x18);
              fVar10 = pfVar54[6];
              fVar15 = pfVar54[7];
              uVar97 = SUB41(fVar15,0);
              uVar98 = (undefined1)((uint)fVar15 >> 8);
              uVar99 = (undefined1)((uint)fVar15 >> 0x10);
              uVar100 = (undefined1)((uint)fVar15 >> 0x18);
              uVar55 = uVar55 + 1;
              uVar9 = *(undefined8 *)(pfVar63 + 2);
              uVar75 = (undefined1)((ulong)uVar9 >> 8);
              uVar78 = (undefined1)((ulong)uVar9 >> 0x10);
              uVar80 = (undefined1)((ulong)uVar9 >> 0x18);
              uVar82 = (undefined1)((ulong)uVar9 >> 0x20);
              uVar84 = (undefined1)((ulong)uVar9 >> 0x28);
              uVar86 = (undefined1)((ulong)uVar9 >> 0x30);
              uVar88 = (undefined1)((ulong)uVar9 >> 0x38);
              uVar13 = CONCAT17((char)((uint)fVar102 >> 0x18),
                                CONCAT16((char)((uint)fVar102 >> 0x10),
                                         CONCAT15((char)((uint)fVar102 >> 8),
                                                  CONCAT14(SUB41(fVar102,0),*pfVar54))));
              auVar16[8] = SUB41(fVar101,0);
              auVar16._0_8_ = uVar13;
              auVar16[9] = (char)((uint)fVar101 >> 8);
              auVar16[10] = (char)((uint)fVar101 >> 0x10);
              auVar16[0xb] = (char)((uint)fVar101 >> 0x18);
              auVar108[0xc] = SUB41(fVar10,0);
              auVar108._0_12_ = auVar16;
              auVar108[0xd] = (char)((uint)fVar10 >> 8);
              auVar108[0xe] = (char)((uint)fVar10 >> 0x10);
              auVar108[0xf] = (char)((uint)fVar10 >> 0x18);
              auVar105[4] = uVar90;
              auVar105._0_4_ = fVar12;
              auVar105[5] = uVar91;
              auVar105[6] = uVar92;
              auVar105[7] = uVar93;
              auVar105[8] = SUB41(fVar14,0);
              auVar11[4] = uVar90;
              auVar11._0_4_ = fVar12;
              auVar11[5] = uVar91;
              auVar11[6] = uVar92;
              auVar11[7] = uVar93;
              auVar11[8] = SUB41(fVar14,0);
              fVar102 = (float)*(undefined8 *)pfVar63;
              fVar101 = (float)((ulong)*(undefined8 *)pfVar63 >> 0x20);
              fVar10 = (float)((ulong)uVar9 >> 0x20);
              auVar107._12_4_ = -(uint)(fVar10 < auVar108._12_4_);
              auVar107._8_4_ = -(uint)((float)uVar9 < auVar16._8_4_);
              auVar104._4_4_ =
                   -(uint)((float)(CONCAT17(uVar93,CONCAT16(uVar92,CONCAT15(uVar91,CONCAT14(uVar90,
                                                  fVar12)))) >> 0x20) < fVar101);
              auVar104._0_4_ = -(uint)(fVar12 < fVar102);
              auVar104._12_4_ =
                   -(uint)((float)(CONCAT17(uVar100,CONCAT16(uVar99,CONCAT15(uVar98,CONCAT14(uVar97,
                                                  fVar14)))) >> 0x20) < fVar10);
              auVar104._8_4_ = -(uint)(fVar14 < (float)uVar9);
              auVar107._4_4_ = -(uint)(fVar101 < (float)((ulong)uVar13 >> 0x20));
              auVar107._0_4_ = -(uint)(fVar102 < *pfVar54);
              auVar6[9] = uVar75;
              auVar6._0_9_ = *(unkbyte9 *)pfVar63;
              auVar6[10] = uVar78;
              auVar6[0xb] = uVar80;
              auVar6[0xc] = uVar82;
              auVar6[0xd] = uVar84;
              auVar6[0xe] = uVar86;
              auVar6[0xf] = uVar88;
              auVar108 = auVar108 ^ (auVar108 ^ auVar6) & auVar107;
              auVar7[9] = uVar75;
              auVar7._0_9_ = *(unkbyte9 *)pfVar63;
              auVar7[10] = uVar78;
              auVar7[0xb] = uVar80;
              auVar7[0xc] = uVar82;
              auVar7[0xd] = uVar84;
              auVar7[0xe] = uVar86;
              auVar7[0xf] = uVar88;
              auVar11[9] = uVar94;
              auVar11[10] = uVar95;
              auVar11[0xb] = uVar96;
              auVar11[0xc] = uVar97;
              auVar11[0xd] = uVar98;
              auVar11[0xe] = uVar99;
              auVar11[0xf] = uVar100;
              auVar105[9] = uVar94;
              auVar105[10] = uVar95;
              auVar105[0xb] = uVar96;
              auVar105[0xc] = uVar97;
              auVar105[0xd] = uVar98;
              auVar105[0xe] = uVar99;
              auVar105[0xf] = uVar100;
              auVar105 = auVar105 ^ (auVar11 ^ auVar7) & auVar104;
              local_550 = auVar108._0_4_;
              fStack_54c = auVar108._4_4_;
              fStack_548 = auVar108._8_4_;
              fStack_544 = auVar108._12_4_;
              local_540 = auVar105._0_4_;
              fStack_53c = auVar105._4_4_;
              fStack_538 = auVar105._8_4_;
              fStack_534 = auVar105._12_4_;
              *pfVar54 = local_550;
              pfVar54[1] = local_540;
              pfVar54[2] = fStack_54c;
              pfVar54[3] = fStack_53c;
              pfVar54[4] = fStack_548;
              pfVar54[5] = fStack_538;
              pfVar54[6] = fStack_544;
              pfVar54[7] = fStack_534;
              pfVar54 = pfVar54 + 8;
              pfVar63 = pfVar63 + 4;
            } while (uVar55 < uVar66);
            if (uVar3 == uVar67) goto LAB_003c03a8;
          }
          fVar102 = pfVar38[(int)uVar2];
          uVar75 = SUB41(fVar102,0);
          uVar78 = (undefined1)((uint)fVar102 >> 8);
          uVar80 = (undefined1)((uint)fVar102 >> 0x10);
          fVar101 = fVar102;
          if (*pfVar31 <= fVar102) {
            fVar101 = *pfVar31;
          }
          fVar10 = pfVar31[1];
          *pfVar31 = fVar101;
          uVar82 = (char)((uint)fVar102 >> 0x18);
          if (fVar102 <= fVar10) {
            uVar75 = SUB41(fVar10,0);
            uVar78 = (undefined1)((uint)fVar10 >> 8);
            uVar80 = (undefined1)((uint)fVar10 >> 0x10);
            uVar82 = (char)((uint)fVar10 >> 0x18);
          }
          pfVar31[1] = (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
          if (iVar25 < (int)uVar67) {
                    /* try { // try from 003c033c to 004c033f has its CatchHandler @ 003c0458 */
            fVar102 = pfVar38[iVar25];
            uVar75 = SUB41(fVar102,0);
            uVar78 = (undefined1)((uint)fVar102 >> 8);
            uVar80 = (undefined1)((uint)fVar102 >> 0x10);
            fVar101 = fVar102;
                    /* try { // try from 003c0348 to 004c034b has its CatchHandler @ 003c03c4 */
            if (*pfVar35 <= fVar102) {
              fVar101 = *pfVar35;
            }
                    /* try { // try from 003c0354 to 004c0357 has its CatchHandler @ 003c0468 */
            fVar10 = pfVar35[1];
            *pfVar35 = fVar101;
            uVar82 = (char)((uint)fVar102 >> 0x18);
            if (fVar102 <= fVar10) {
                    /* try { // try from 003c0364 to 004c0367 has its CatchHandler @ 003bf8f0 */
              uVar75 = SUB41(fVar10,0);
              uVar78 = (undefined1)((uint)fVar10 >> 8);
              uVar80 = (undefined1)((uint)fVar10 >> 0x10);
              uVar82 = (char)((uint)fVar10 >> 0x18);
            }
            pfVar35[1] = (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
            if (iVar28 < (int)uVar67) {
              fVar102 = pfVar38[iVar28];
              uVar75 = SUB41(fVar102,0);
              uVar78 = (undefined1)((uint)fVar102 >> 8);
              uVar80 = (undefined1)((uint)fVar102 >> 0x10);
              fVar101 = fVar102;
              if (*pfVar43 <= fVar102) {
                fVar101 = *pfVar43;
              }
              fVar10 = pfVar43[1];
              *pfVar43 = fVar101;
              uVar82 = (char)((uint)fVar102 >> 0x18);
              if (fVar102 <= fVar10) {
                uVar75 = SUB41(fVar10,0);
                uVar78 = (undefined1)((uint)fVar10 >> 8);
                uVar80 = (undefined1)((uint)fVar10 >> 0x10);
                uVar82 = (char)((uint)fVar10 >> 0x18);
              }
              pfVar43[1] = (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
            }
          }
        }
      }
LAB_003c03a8:
      uVar61 = uVar61 + 1;
    } while (uVar61 != local_508);
  }
  dVar17 = DAT_003c2900;
  local_4e4 = uVar67 - 1;
  uVar2 = uVar67 - 4 >> 2;
  uVar61 = uVar2 + 1;
                    /* try { // try from 003c0894 to 004c0897 has its CatchHandler @ 003c04e0 */
  uVar65 = (long)pfVar49 - (long)local_4c8 >> 3;
                    /* catch() { ... } // from try @ 003c052c with catch @ 003c0898
                       catch() { ... } // from try @ 003c0760 with catch @ 003c0898
                       catch() { ... } // from try @ 003c0800 with catch @ 003c0898 */
  uVar66 = uVar61 * 4;
                    /* catch() { ... } // from try @ 003c06ec with catch @ 003c08a0
                       catch() { ... } // from try @ 003c080c with catch @ 003c08a0 */
                    /* catch() { ... } // from try @ 003c0670 with catch @ 003c08a8 */
  if ((int)(uVar67 - 3) < 1) {
    uVar66 = 0;
  }
  uVar68 = NEON_shl(uVar29,2);
                    /* catch() { ... } // from try @ 003c08f0 with catch @ 003c08bc
                       catch() { ... } // from try @ 003c0bac with catch @ 003c08bc
                       catch() { ... } // from try @ 003c0c68 with catch @ 003c08bc */
  uVar3 = uVar66 + 1;
  uVar4 = uVar67 - uVar66;
  cVar24 = (char)((int)uVar66 >> 0x1f);
                    /* try { // try from 003c08f0 to 004c08f3 has its CatchHandler @ 003c08bc */
  lVar53 = NEON_shl(CONCAT17(cVar24,CONCAT16(cVar24,CONCAT15(cVar24,(int5)(int)uVar66))),2);
                    /* try { // try from 003c090c to 004c090f has its CatchHandler @ 003c0c6c */
  uVar55 = uVar66 + 2;
  uVar39 = -(ulong)(uVar3 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar3 << 2;
  dVar112 = 0.0;
  uVar40 = -(ulong)(uVar55 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar55 << 2;
  local_490 = 0;
  dVar113 = DAT_003c2900;
LAB_003c096c:
  local_504 = 0;
  dVar110 = dVar17;
  do {
    swap((Mat *)&local_2a0,(Mat *)&local_240);
    pfVar31 = local_b0;
    uVar62 = local_b4;
    uVar26 = local_b8;
    fVar102 = DAT_003c2928;
    if ((local_504 == 0) && (0 < local_490 || (param_7 & 1) != 1)) {
      if ((param_7 & 2) == 0) {
        if (0 < (int)param_2) {
          lVar58 = 0;
                    /* try { // try from 003c09e0 to 004c0a07 has its CatchHandler @ 003c0c04 */
          do {
            lVar57 = *local_258;
            if (uVar65 != 0) {
              uVar32 = *puVar30;
              uVar41 = 0;
              pfVar31 = local_4c8;
              do {
                uVar32 = (uVar32 >> 0x20) + (uVar32 & 0xffffffff) * 0xf83f630a;
                *(float *)((long)local_290 + uVar41 * 4 + lVar58 * lVar57) =
                     *pfVar31 +
                     (pfVar31[1] - *pfVar31) *
                     ((float)(uVar32 & 0xffffffff) * fVar102 * ((1.0 / (float)uVar65) * 2.0 + 1.0) -
                     1.0 / (float)uVar65);
                    /* try { // try from 003c0a48 to 004c0a4b has its CatchHandler @ 003c0c7c */
                uVar41 = uVar41 + 1;
                pfVar31 = pfVar31 + 2;
                    /* try { // try from 003c0a50 to 004c0a53 has its CatchHandler @ 003c0c04 */
              } while (uVar41 != uVar65);
              *puVar30 = uVar32;
            }
            lVar58 = lVar58 + 1;
          } while ((int)lVar58 < (int)param_2);
        }
      }
      else {
        local_4a8 = (int *)0x0;
        uVar41 = local_70[0] >> 2;
        if (uVar29 != 0) {
          if (0x3fffffffffffffff < uVar29) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f0e4();
          }
                    /* try { // try from 003c21c8 to 004c2227 has its CatchHandler @ 003c1900 */
          local_4a8 = operator_new(uVar68);
          memset(local_4a8,0,uVar68);
        }
        local_4b0 = (float *)0x0;
        uVar32 = (ulong)(int)(uVar26 * 3);
        if (uVar32 != 0) {
          if (0x3fffffffffffffff < uVar32) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f0e4();
          }
                    /* try { // try from 003c2198 to 004c219b has its CatchHandler @ 003c26f4 */
          local_4b0 = operator_new(uVar32 << 2);
          memset(local_4b0,0,uVar32 << 2);
        }
        pfVar49 = local_4b0 + (int)uVar26;
        uVar32 = (*puVar30 >> 0x20) + (*puVar30 & 0xffffffff) * 0xf83f630a;
        pMVar47 = (Mat *)(local_4b0 + (long)(int)uVar26 * 2);
        *puVar30 = uVar32;
        uVar51 = 0;
        if (uVar26 != 0) {
          uVar51 = (uint)uVar32 / uVar26;
        }
        local_570 = SUB81(pfVar49,0);
        uStack_56f = (undefined1)((ulong)pfVar49 >> 8);
        uStack_56e = (undefined1)((ulong)pfVar49 >> 0x10);
        uStack_56d = (undefined1)((ulong)pfVar49 >> 0x18);
        uStack_56c = (undefined1)((ulong)pfVar49 >> 0x20);
        uStack_56b = (undefined1)((ulong)pfVar49 >> 0x28);
        uStack_56a = (undefined1)((ulong)pfVar49 >> 0x30);
        uStack_569 = (undefined1)((ulong)pfVar49 >> 0x38);
        iVar25 = (uint)uVar32 - uVar51 * uVar26;
        *local_4a8 = iVar25;
        if ((int)uVar26 < 1) {
          dVar109 = 0.0;
        }
        else {
          dVar109 = 0.0;
          lVar58 = 0;
          pfVar49 = pfVar31;
          do {
            if ((int)uVar62 < 1) {
              uVar75 = 0;
              uVar78 = 0;
              uVar80 = 0;
              uVar82 = 0;
              uVar84 = 0;
              uVar86 = 0;
              uVar88 = 0;
              uVar90 = 0;
              fVar102 = 0.0;
            }
            else {
              lVar57 = 0;
              fVar102 = 0.0;
              do {
                pfVar35 = pfVar49 + lVar57;
                lVar50 = lVar57 * 4;
                lVar57 = lVar57 + 1;
                fVar101 = *pfVar35 - *(float *)((long)pfVar31 + lVar50 + (long)iVar25 * uVar41 * 4);
                fVar102 = fVar102 + fVar101 * fVar101;
              } while ((int)lVar57 < (int)uVar62);
              dVar111 = (double)fVar102;
              uVar75 = SUB81(dVar111,0);
              uVar78 = (undefined1)((ulong)dVar111 >> 8);
              uVar80 = (undefined1)((ulong)dVar111 >> 0x10);
              uVar82 = (undefined1)((ulong)dVar111 >> 0x18);
              uVar84 = (undefined1)((ulong)dVar111 >> 0x20);
              uVar86 = (undefined1)((ulong)dVar111 >> 0x28);
              uVar88 = (undefined1)((ulong)dVar111 >> 0x30);
              uVar90 = (undefined1)((ulong)dVar111 >> 0x38);
            }
            pfVar49 = pfVar49 + uVar41;
            dVar109 = dVar109 + (double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(
                                                  uVar84,CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(
                                                  uVar78,uVar75)))))));
            local_4b0[lVar58] = fVar102;
            lVar58 = lVar58 + 1;
          } while ((int)lVar58 < (int)uVar26);
        }
        dVar111 = DAT_003c2920;
        if (1 < (int)param_2) {
          local_498 = local_4a8;
          pfVar49 = local_4b0;
LAB_003c1dac:
          local_524 = -1;
          iVar25 = 3;
          pMVar64 = pMVar47;
          dVar114 = dVar17;
          do {
            uVar32 = (uVar32 >> 0x20) + (uVar32 & 0xffffffff) * 0xf83f630a;
            uVar46 = (uVar32 >> 0x20) + (uVar32 & 0xffffffff) * 0xf83f630a;
            *puVar30 = uVar46;
            if ((int)(uVar26 - 1) < 1) {
LAB_003c1f0c:
              local_150 = 0;
              iVar28 = 0;
            }
            else {
              dVar8 = (double)(uVar46 & 0xffffffff | uVar32 << 0x20) * dVar111 * dVar109 -
                      (double)*pfVar49;
              uVar75 = SUB81(dVar8,0);
              uVar78 = (undefined1)((ulong)dVar8 >> 8);
              uVar80 = (undefined1)((ulong)dVar8 >> 0x10);
              uVar82 = (undefined1)((ulong)dVar8 >> 0x18);
              uVar84 = (undefined1)((ulong)dVar8 >> 0x20);
              uVar86 = (undefined1)((ulong)dVar8 >> 0x28);
              uVar88 = (undefined1)((ulong)dVar8 >> 0x30);
              uVar90 = (undefined1)((ulong)dVar8 >> 0x38);
              lVar58 = 1;
              if (dVar8 <= 0.0) goto LAB_003c1f0c;
              do {
                local_150 = lVar58;
                iVar28 = (int)local_150;
                if ((int)(uVar26 - 1) <= iVar28) {
                  local_150 = (long)iVar28 * uVar41;
                  goto LAB_003c1e64;
                }
                dVar8 = (double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(uVar84,
                                                  CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,
                                                  uVar75))))))) - (double)pfVar49[local_150];
                uVar75 = SUB81(dVar8,0);
                uVar78 = (undefined1)((ulong)dVar8 >> 8);
                uVar80 = (undefined1)((ulong)dVar8 >> 0x10);
                uVar82 = (undefined1)((ulong)dVar8 >> 0x18);
                uVar84 = (undefined1)((ulong)dVar8 >> 0x20);
                uVar86 = (undefined1)((ulong)dVar8 >> 0x28);
                uVar88 = (undefined1)((ulong)dVar8 >> 0x30);
                uVar90 = (undefined1)((ulong)dVar8 >> 0x38);
                lVar58 = local_150 + 1;
              } while (0.0 < dVar8);
              local_150 = local_150 * uVar41;
            }
LAB_003c1e64:
            local_170 = pfVar31;
            local_328 = (undefined **)((ulong)uVar26 << 0x20);
            local_180 = &PTR_FUN_004f79a0;
            local_160 = CONCAT44(local_160._4_4_,uVar62);
            pMStack_178 = pMVar64;
            pfStack_168 = pfVar49;
            local_158 = uVar41;
            parallel_for_((Range *)&local_328,(ParallelLoopBody *)&local_180,-1.0);
            local_180 = &PTR_FUN_004f79a0;
            ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_180);
            uVar75 = 0;
            uVar78 = 0;
            uVar80 = 0;
            uVar82 = 0;
            uVar84 = 0;
            uVar86 = 0;
            uVar88 = 0;
            uVar90 = 0;
            if (0 < (int)uVar26) {
              lVar58 = 0;
              do {
                lVar57 = lVar58 * 4;
                lVar58 = lVar58 + 1;
                dVar8 = (double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(uVar84,
                                                  CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,
                                                  uVar75))))))) +
                        (double)*(float *)(pMVar64 + lVar57);
                uVar75 = SUB81(dVar8,0);
                uVar78 = (undefined1)((ulong)dVar8 >> 8);
                uVar80 = (undefined1)((ulong)dVar8 >> 0x10);
                uVar82 = (undefined1)((ulong)dVar8 >> 0x18);
                uVar84 = (undefined1)((ulong)dVar8 >> 0x20);
                uVar86 = (undefined1)((ulong)dVar8 >> 0x28);
                uVar88 = (undefined1)((ulong)dVar8 >> 0x30);
                uVar90 = (undefined1)((ulong)dVar8 >> 0x38);
              } while ((int)lVar58 < (int)uVar26);
            }
            bVar23 = false;
            if (!NAN((double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(uVar84,
                                                  CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,
                                                  uVar75)))))))) && !NAN(dVar114)) {
              bVar23 = (double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(uVar84,
                                                  CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,
                                                  uVar75))))))) < dVar114;
            }
            pMVar47 = pMVar64;
            if (bVar23) {
              pMVar47 = (Mat *)CONCAT17(uStack_569,
                                        CONCAT16(uStack_56a,
                                                 CONCAT15(uStack_56b,
                                                          CONCAT14(uStack_56c,
                                                                   CONCAT13(uStack_56d,
                                                                            CONCAT12(uStack_56e,
                                                                                     CONCAT11(
                                                  uStack_56f,local_570)))))));
              dVar114 = (double)CONCAT17(uVar90,CONCAT16(uVar88,CONCAT15(uVar86,CONCAT14(uVar84,
                                                  CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,
                                                  uVar75)))))));
              local_570 = SUB81(pMVar64,0);
              uStack_56f = (undefined1)((ulong)pMVar64 >> 8);
              uStack_56e = (undefined1)((ulong)pMVar64 >> 0x10);
              uStack_56d = (undefined1)((ulong)pMVar64 >> 0x18);
              uStack_56c = (undefined1)((ulong)pMVar64 >> 0x20);
              uStack_56b = (undefined1)((ulong)pMVar64 >> 0x28);
              uStack_56a = (undefined1)((ulong)pMVar64 >> 0x30);
              uStack_569 = (undefined1)((ulong)pMVar64 >> 0x38);
              local_524 = iVar28;
            }
            iVar25 = iVar25 + -1;
            if (iVar25 == 0) goto LAB_003c1f18;
            uVar32 = *puVar30;
            pMVar64 = pMVar47;
          } while( true );
        }
        if (0 < (int)param_2) {
LAB_003c1f7c:
          lVar58 = 0;
          lVar57 = *local_258;
          pfVar49 = local_290;
          do {
                    /* try { // try from 003c2090 to 004c2093 has its CatchHandler @ 003c24c0 */
            while (lVar50 = (long)local_4a8[lVar58] * uVar41 * 4, (int)uVar62 < 1) {
LAB_003c2070:
              lVar58 = lVar58 + 1;
              pfVar49 = (float *)((long)pfVar49 + lVar57);
              if ((int)param_2 <= (int)lVar58) goto LAB_003c2118;
            }
            pfVar35 = (float *)((long)pfVar31 + lVar50);
            if (((float *)((long)pfVar31 + lVar50 + 0x10) <= pfVar49 || pfVar49 + 4 <= pfVar35) &&
               (0xb < uVar62)) {
              uVar26 = -((uint)((ulong)pfVar35 >> 2) & 3) & 3;
              uVar51 = uVar62;
              if (uVar26 < uVar62) {
                uVar51 = uVar26;
              }
              uVar26 = uVar51;
              if ((uVar51 != 0) && (*pfVar49 = *(float *)((long)pfVar31 + lVar50), uVar51 != 1)) {
                pfVar49[1] = pfVar35[1];
                if (uVar51 == 3) {
                  pfVar49[2] = pfVar35[2];
                }
                else {
                  uVar26 = 2;
                }
              }
              uVar70 = ((uVar62 - uVar51) - 4 >> 2) + 1;
              uVar27 = 0;
              iVar25 = uVar70 * 4;
              puVar36 = (undefined8 *)((long)pfVar31 + (ulong)uVar51 * 4 + lVar50);
              pfVar43 = pfVar49 + uVar51;
              do {
                uVar9 = *puVar36;
                uVar27 = uVar27 + 1;
                *(undefined8 *)(pfVar43 + 2) = puVar36[1];
                *(undefined8 *)pfVar43 = uVar9;
                puVar36 = puVar36 + 2;
                pfVar43 = pfVar43 + 4;
              } while (uVar27 < uVar70);
              uVar26 = iVar25 + uVar26;
              if (uVar62 - uVar51 != iVar25) {
                uVar32 = -(ulong)(uVar26 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar26 << 2;
                *(undefined4 *)((long)pfVar49 + uVar32) =
                     *(undefined4 *)((long)pfVar31 + lVar50 + uVar32);
                if (((int)(uVar26 + 1) < (int)uVar62) &&
                   (*(undefined4 *)((long)pfVar49 + uVar32 + 4) =
                         *(undefined4 *)((long)pfVar31 + lVar50 + uVar32 + 4),
                   (int)(uVar26 + 2) < (int)uVar62)) {
                  *(undefined4 *)((long)pfVar49 + uVar32 + 8) =
                       *(undefined4 *)((long)pfVar35 + uVar32 + 8);
                }
              }
              goto LAB_003c2070;
            }
            lVar50 = 0;
            do {
              pfVar49[lVar50] = pfVar35[lVar50];
              lVar50 = lVar50 + 1;
            } while ((int)lVar50 < (int)uVar62);
            lVar58 = lVar58 + 1;
            pfVar49 = (float *)((long)pfVar49 + lVar57);
                    /* try { // try from 003c2114 to 004c2117 has its CatchHandler @ 003c25bc */
          } while ((int)lVar58 < (int)param_2);
        }
LAB_003c2118:
        if (local_4b0 != (float *)0x0) {
          operator_delete(local_4b0);
        }
        operator_delete(local_4a8);
      }
    }
    else {
                    /* catch() { ... } // from try @ 003c09e0 with catch @ 003c0c04
                       catch() { ... } // from try @ 003c0a50 with catch @ 003c0c04 */
      if ((local_504 == 0 && local_490 == 0) && (((param_7 & 1) != 0 && (0 < (int)local_508)))) {
        lVar58 = 0;
        do {
          while (*(uint *)(lVar22 + lVar58 * 4) < param_2) {
            lVar58 = lVar58 + 1;
            if ((int)local_508 <= (int)lVar58) goto LAB_003c0cc4;
          }
                    /* try { // try from 003c0c68 to 004c0c6b has its CatchHandler @ 003c08bc */
                    /* catch() { ... } // from try @ 003c090c with catch @ 003c0c6c
                       catch() { ... } // from try @ 003c0b38 with catch @ 003c0c6c
                       catch() { ... } // from try @ 003c0bd4 with catch @ 003c0c6c */
          local_358 = 0;
          local_350 = 0;
                    /* catch() { ... } // from try @ 003c0ac4 with catch @ 003c0c74
                       catch() { ... } // from try @ 003c0be0 with catch @ 003c0c74 */
          pcVar33 = (char *)String::allocate((String *)&local_358,0x21);
          uVar21 = s__unsigned_labels_i__<_(unsigned)_004771b8._24_8_;
          uVar20 = s__unsigned_labels_i__<_(unsigned)_004771b8._16_8_;
          uVar13 = s__unsigned_labels_i__<_(unsigned)_004771b8._8_8_;
          uVar9 = s__unsigned_labels_i__<_(unsigned)_004771b8._0_8_;
                    /* catch() { ... } // from try @ 003c0a48 with catch @ 003c0c7c */
          pcVar33[0x20] = s__unsigned_labels_i__<_(unsigned)_004771b8[0x20];
          *(undefined8 *)pcVar33 = uVar9;
          *(undefined8 *)(pcVar33 + 8) = uVar13;
          *(undefined8 *)(pcVar33 + 0x10) = uVar20;
          *(undefined8 *)(pcVar33 + 0x18) = uVar21;
          error(-0xd7,(String *)&local_358,
                "double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)"
                ,"/builds/master_pack-android/opencv/modules/core/src/kmeans.cpp",0x13f);
          String::deallocate((String *)&local_358);
          lVar58 = lVar58 + 1;
        } while ((int)lVar58 < (int)local_508);
      }
LAB_003c0cc4:
      pMStack_178 = (Mat *)0x0;
      local_180 = (undefined **)0x0;
      pfStack_168 = (float *)0x0;
      local_170 = (float *)0x0;
      Mat::operator=((Mat *)&local_2a0,(Scalar_ *)&local_180);
      if (0 < (int)param_2) {
        memset(local_518,0,((ulong)(param_2 - 1) + 1) * 4);
      }
      if (0 < (int)local_508) {
        lVar58 = 0;
                    /* catch() { ... } // from try @ 003c0d70 with catch @ 003c0d1c
                       catch() { ... } // from try @ 003c0de8 with catch @ 003c0d1c
                       catch() { ... } // from try @ 003c0e20 with catch @ 003c0d1c
                       catch() { ... } // from try @ 003c1514 with catch @ 003c0d1c
                       catch() { ... } // from try @ 003c163c with catch @ 003c0d1c */
        lVar57 = *local_258;
        uVar41 = *local_78;
        pfVar31 = local_b0;
        do {
          lVar73 = (long)*(int *)(lVar22 + lVar58 * 4);
          lVar50 = lVar73 * lVar57;
          pfVar49 = (float *)((long)local_290 + lVar50);
                    /* try { // try from 003c0d70 to 004c0d93 has its CatchHandler @ 003c0d1c */
          if (0 < (int)(uVar67 - 3)) {
            if ((pfVar31 < (float *)((long)local_290 + lVar50 + 0x40) && pfVar49 < pfVar31 + 0x10)
               || (uVar61 < 3)) {
              pfVar35 = pfVar49;
              pfVar43 = pfVar31 + 1;
              do {
                pfVar38 = pfVar43 + 4;
                fVar102 = pfVar43[-1];
                pfVar35[1] = pfVar35[1] + *pfVar43;
                *pfVar35 = *pfVar35 + fVar102;
                fVar102 = pfVar43[1];
                pfVar35[3] = pfVar35[3] + pfVar43[2];
                pfVar35[2] = pfVar35[2] + fVar102;
                pfVar35 = pfVar35 + 4;
                pfVar43 = pfVar38;
              } while (pfVar38 != pfVar31 + (ulong)uVar2 * 4 + 5);
            }
            else {
                    /* try { // try from 003c0da4 to 004c0da7 has its CatchHandler @ 003c1714 */
              uVar26 = 0;
              pfVar35 = pfVar49;
              pfVar43 = pfVar31;
              pfVar38 = pfVar49;
              do {
                uVar9 = *(undefined8 *)pfVar38;
                uVar26 = uVar26 + 1;
                uVar13 = *(undefined8 *)pfVar43;
                    /* try { // try from 003c0dbc to 004c0dbf has its CatchHandler @ 003c1690 */
                fVar102 = (float)((ulong)uVar9 >> 0x20) + (float)((ulong)uVar13 >> 0x20);
                fVar101 = (float)((ulong)*(undefined8 *)(pfVar38 + 2) >> 0x20) +
                          (float)((ulong)*(undefined8 *)(pfVar43 + 2) >> 0x20);
                *(ulong *)(pfVar35 + 2) =
                     CONCAT17((char)((uint)fVar101 >> 0x18),
                              CONCAT16((char)((uint)fVar101 >> 0x10),
                                       CONCAT15((char)((uint)fVar101 >> 8),
                                                CONCAT14(SUB41(fVar101,0),
                                                         (float)*(undefined8 *)(pfVar38 + 2) +
                                                         (float)*(undefined8 *)(pfVar43 + 2)))));
                *(ulong *)pfVar35 =
                     CONCAT17((char)((uint)fVar102 >> 0x18),
                              CONCAT16((char)((uint)fVar102 >> 0x10),
                                       CONCAT15((char)((uint)fVar102 >> 8),
                                                CONCAT14(SUB41(fVar102,0),
                                                         (float)uVar9 + (float)uVar13))));
                pfVar35 = pfVar35 + 4;
                pfVar43 = pfVar43 + 4;
                pfVar38 = pfVar38 + 4;
              } while (uVar26 < uVar61);
            }
          }
          if ((int)uVar66 < (int)uVar67) {
            lVar48 = (long)pfVar31 + (lVar53 - (long)local_b0);
                    /* try { // try from 003c0de8 to 004c0deb has its CatchHandler @ 003c0d1c */
            uVar32 = (long)local_290 + lVar50 + lVar53;
            if (((ulong)((long)local_b0 + lVar48) <
                 (ulong)((long)local_290 + lVar50 + lVar53 + 0x10) &&
                 uVar32 < (ulong)((long)pfVar31 + lVar53 + 0x10)) || (uVar4 < 8)) {
              lVar50 = 0;
              do {
                    /* catch() { ... } // from try @ 003c0da4 with catch @ 003c1714 */
                *(float *)((long)pfVar49 + lVar50 + lVar53) =
                     *(float *)((long)pfVar49 + lVar50 + lVar53) +
                     *(float *)((long)pfVar31 + lVar50 + lVar53);
                lVar50 = lVar50 + 4;
              } while (lVar50 != ((ulong)(local_4e4 - uVar66) + 1) * 4);
            }
            else {
                    /* try { // try from 003c0e18 to 004c0e1b has its CatchHandler @ 003c162c */
              uVar26 = -((uint)(uVar32 >> 2) & 3) & 3;
                    /* try { // try from 003c0e20 to 004c0e4b has its CatchHandler @ 003c0d1c */
              if (uVar4 < uVar26) {
                uVar26 = uVar4;
              }
              uVar62 = uVar66;
                    /* try { // try from 003c0e50 to 004c0e73 has its CatchHandler @ 003c18a4 */
              if (((uVar26 != 0) &&
                  (*(float *)((long)pfVar49 + lVar53) =
                        *(float *)((long)pfVar49 + lVar53) + *(float *)((long)pfVar31 + lVar53),
                  uVar62 = uVar3, uVar26 != 1)) &&
                 (*(float *)((long)pfVar49 + uVar39) =
                       *(float *)((long)pfVar49 + uVar39) + *(float *)((long)pfVar31 + uVar39),
                 uVar62 = uVar55, uVar26 == 3)) {
                *(float *)((long)pfVar49 + uVar40) =
                     *(float *)((long)pfVar49 + uVar40) + *(float *)((long)pfVar31 + uVar40);
                uVar62 = uVar66 + 3;
              }
              lVar34 = (ulong)uVar26 * 4;
              uVar70 = 0;
                    /* try { // try from 003c0e94 to 004c0eb7 has its CatchHandler @ 003c17cc */
              uVar51 = ((uVar4 - uVar26) - 4 >> 2) + 1;
              iVar25 = uVar51 * 4;
              puVar36 = (undefined8 *)((long)local_b0 + lVar34 + lVar48);
              puVar42 = (undefined8 *)((long)local_290 + lVar34 + lVar50 + lVar53);
              puVar69 = (undefined8 *)
                        ((long)local_290 + lVar50 + ((ulong)uVar26 + (long)(int)uVar66) * 4);
              do {
                uVar13 = *puVar36;
                uVar70 = uVar70 + 1;
                uVar9 = *puVar69;
                fVar102 = (float)((ulong)uVar9 >> 0x20) + (float)((ulong)uVar13 >> 0x20);
                fVar101 = (float)((ulong)puVar69[1] >> 0x20) + (float)((ulong)puVar36[1] >> 0x20);
                puVar42[1] = CONCAT17((char)((uint)fVar101 >> 0x18),
                                      CONCAT16((char)((uint)fVar101 >> 0x10),
                                               CONCAT15((char)((uint)fVar101 >> 8),
                                                        CONCAT14(SUB41(fVar101,0),
                                                                 (float)puVar69[1] +
                                                                 (float)puVar36[1]))));
                *puVar42 = CONCAT17((char)((uint)fVar102 >> 0x18),
                                    CONCAT16((char)((uint)fVar102 >> 0x10),
                                             CONCAT15((char)((uint)fVar102 >> 8),
                                                      CONCAT14(SUB41(fVar102,0),
                                                               (float)uVar9 + (float)uVar13))));
                puVar36 = puVar36 + 2;
                puVar42 = puVar42 + 2;
                puVar69 = puVar69 + 2;
              } while (uVar70 < uVar51);
              uVar62 = iVar25 + uVar62;
              if (iVar25 != uVar4 - uVar26) {
                uVar32 = -(ulong)(uVar62 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar62 << 2;
                    /* try { // try from 003c0ef0 to 004c0ef3 has its CatchHandler @ 003c18f4 */
                *(float *)((long)pfVar49 + uVar32) =
                     *(float *)((long)pfVar49 + uVar32) + *(float *)((long)pfVar31 + uVar32);
                if ((int)(uVar62 + 1) < (int)uVar67) {
                  lVar50 = uVar32 + 4;
                  *(float *)((long)pfVar49 + lVar50) =
                       *(float *)((long)pfVar49 + lVar50) + *(float *)((long)pfVar31 + lVar50);
                  if ((int)(uVar62 + 2) < (int)uVar67) {
                    lVar50 = uVar32 + 8;
                    *(float *)((long)pfVar49 + lVar50) =
                         *(float *)((long)pfVar49 + lVar50) + *(float *)((long)pfVar31 + lVar50);
                  }
                }
              }
            }
          }
          lVar58 = lVar58 + 1;
          pfVar31 = (float *)((long)pfVar31 + uVar41);
          local_518[lVar73] = local_518[lVar73] + 1;
        } while ((int)lVar58 < (int)local_508);
      }
      if (local_504 != 0) {
        dVar110 = 0.0;
      }
      if (0 < (int)param_2) {
        lVar58 = 0;
        uVar26 = -((uint)((ulong)local_1d0 >> 2) & 3) & 3;
        lVar57 = *local_258;
        if (uVar67 < uVar26) {
          uVar26 = uVar67;
        }
        uVar41 = (ulong)uVar26;
        uVar62 = ((uVar67 - uVar26) - 4 >> 2) + 1;
        iVar25 = uVar62 * 4;
        lVar50 = 0;
        pfVar31 = local_290;
        do {
          iVar28 = (int)lVar58;
          if (local_518[lVar58] == 0) {
            if (param_2 == 1) {
              lVar73 = 0;
              iVar103 = *local_518;
              iVar56 = 0;
              piVar59 = local_518;
            }
            else {
              lVar48 = 1;
              iVar103 = *local_518;
              iVar56 = 0;
              piVar52 = local_518;
              do {
                piVar52 = piVar52 + 1;
                lVar73 = (long)iVar56;
                piVar59 = local_518 + lVar73;
                if (iVar103 < *piVar52) {
                  iVar103 = *piVar52;
                  piVar59 = piVar52;
                  lVar73 = lVar48;
                  iVar56 = (int)lVar48;
                }
                lVar48 = lVar48 + 1;
              } while ((int)lVar48 < (int)param_2);
              lVar73 = lVar73 * lVar57;
            }
            pfVar49 = (float *)((long)local_290 + lVar73);
            fVar102 = 1.0 / (float)iVar103;
            if ((int)uVar67 < 1) {
LAB_003c117c:
              if (0 < (int)local_508) goto LAB_003c1184;
LAB_003c17dc:
              uVar32 = *local_78;
                    /* try { // try from 003c17e0 to 004c17e3 has its CatchHandler @ 003c17cc */
              lVar34 = -4;
              lVar48 = -1;
            }
            else {
              if (((float *)((long)local_290 + lVar73 + 0x10) <= local_1d0 ||
                   local_1d0 + 4 <= pfVar49) && (9 < uVar67)) {
                uVar32 = uVar41;
                if ((uVar26 != 0) && (*local_1d0 = *pfVar49 * fVar102, uVar26 != 1)) {
                  local_1d0[1] = pfVar49[1] * fVar102;
                  if (uVar26 == 3) {
                    local_1d0[2] = pfVar49[2] * fVar102;
                  }
                  else {
                    uVar32 = 2;
                  }
                }
                if (2 < local_4e4 - uVar26) {
                  uVar51 = 0;
                  puVar36 = (undefined8 *)((long)local_290 + lVar73 + uVar41 * 4);
                  pfVar35 = local_1d0 + uVar41;
                  do {
                    uVar9 = *puVar36;
                    uVar51 = uVar51 + 1;
                    fVar101 = (float)((ulong)uVar9 >> 0x20) * fVar102;
                    fVar10 = (float)((ulong)puVar36[1] >> 0x20) * fVar102;
                    *(ulong *)(pfVar35 + 2) =
                         CONCAT17((char)((uint)fVar10 >> 0x18),
                                  CONCAT16((char)((uint)fVar10 >> 0x10),
                                           CONCAT15((char)((uint)fVar10 >> 8),
                                                    CONCAT14(SUB41(fVar10,0),
                                                             (float)puVar36[1] * fVar102))));
                    *(ulong *)pfVar35 =
                         CONCAT17((char)((uint)fVar101 >> 0x18),
                                  CONCAT16((char)((uint)fVar101 >> 0x10),
                                           CONCAT15((char)((uint)fVar101 >> 8),
                                                    CONCAT14(SUB41(fVar101,0),(float)uVar9 * fVar102
                                                            ))));
                    puVar36 = puVar36 + 2;
                    pfVar35 = pfVar35 + 4;
                  } while (uVar51 < uVar62);
                  uVar32 = (ulong)(uint)((int)uVar32 + iVar25);
                  if (iVar25 == uVar67 - uVar26) goto LAB_003c117c;
                }
                uVar46 = -(uVar32 >> 0x1f) & 0xfffffffc00000000 | uVar32 << 2;
                *(float *)((long)local_1d0 + uVar46) = *(float *)((long)pfVar49 + uVar46) * fVar102;
                if (((int)uVar32 + 1 < (int)uVar67) &&
                   (*(float *)((long)local_1d0 + uVar46 + 4) =
                         *(float *)((long)pfVar49 + uVar46 + 4) * fVar102,
                   (int)uVar32 + 2 < (int)uVar67)) {
                  *(float *)((long)local_1d0 + uVar46 + 8) =
                       *(float *)((long)pfVar49 + uVar46 + 8) * fVar102;
                }
                goto LAB_003c117c;
              }
              lVar48 = 0;
              do {
                local_1d0[lVar48] = pfVar49[lVar48] * fVar102;
                lVar48 = lVar48 + 1;
                    /* catch() { ... } // from try @ 003c0e94 with catch @ 003c17cc
                       catch() { ... } // from try @ 003c140c with catch @ 003c17cc
                       catch() { ... } // from try @ 003c155c with catch @ 003c17cc
                       catch() { ... } // from try @ 003c17e0 with catch @ 003c17cc */
              } while ((int)lVar48 < (int)uVar67);
              if ((int)local_508 < 1) goto LAB_003c17dc;
LAB_003c1184:
              auVar106 = ZEXT816(0);
              uVar32 = *local_78;
              uVar46 = 0;
              pfVar35 = local_b0;
              uVar72 = 0xffffffff;
              do {
                while( true ) {
                  iVar71 = (int)uVar72;
                  uVar60 = uVar46 & 0xffffffff;
                  if (*(int *)(lVar22 + uVar46 * 4) == iVar56) break;
LAB_003c119c:
                  uVar46 = uVar46 + 1;
                  pfVar35 = (float *)((long)pfVar35 + uVar32);
                  if ((int)local_508 <= (int)uVar46) goto LAB_003c120c;
                }
                if ((int)uVar67 < 1) {
                  dVar109 = 0.0;
                }
                else {
                  fVar102 = 0.0;
                  lVar48 = 0;
                  do {
                    pfVar43 = pfVar35 + lVar48;
                    pfVar38 = local_1d0 + lVar48;
                    lVar48 = lVar48 + 1;
                    fVar102 = fVar102 + (*pfVar43 - *pfVar38) * (*pfVar43 - *pfVar38);
                  } while ((int)lVar48 < (int)uVar67);
                  dVar109 = (double)fVar102;
                }
                if (dVar109 < auVar106._0_8_) goto LAB_003c119c;
                uVar1 = uVar46 + 1;
                iVar71 = (int)uVar46;
                pfVar35 = (float *)((long)pfVar35 + uVar32);
                auVar106._8_8_ = 0;
                auVar106._0_8_ = dVar109;
                uVar46 = uVar1;
                uVar72 = uVar60;
              } while ((int)uVar1 < (int)local_508);
LAB_003c120c:
              lVar48 = (long)iVar71;
              lVar34 = lVar48 << 2;
            }
            *piVar59 = iVar103 + -1;
            lVar48 = uVar32 * lVar48;
            local_518[lVar58] = local_518[lVar58] + 1;
            *(int *)(lVar22 + lVar34) = iVar28;
            if (0 < (int)uVar67) {
              pfVar35 = (float *)((long)local_b0 + lVar48 + 0x10);
              pfVar43 = (float *)((long)local_b0 + lVar48);
              if (((uVar67 < 7 || lVar50 < lVar73 + 0x10 && lVar73 < lVar50 + 0x10) ||
                   pfVar31 < pfVar35 && pfVar43 < pfVar31 + 4) ||
                 (pfVar49 < pfVar35 && pfVar43 < (float *)((long)local_290 + lVar73 + 0x10))) {
                lVar73 = 0;
                do {
                  pfVar49[lVar73] = pfVar49[lVar73] - pfVar43[lVar73];
                  pfVar31[lVar73] = pfVar31[lVar73] + pfVar43[lVar73];
                  lVar73 = lVar73 + 1;
                } while ((int)lVar73 < (int)uVar67);
              }
              else {
                    /* try { // try from 003c12b0 to 004c135f has its CatchHandler @ 003c1694 */
                uVar51 = -((uint)((ulong)pfVar49 >> 2) & 3) & 3;
                if (uVar67 < uVar51) {
                  uVar51 = uVar67;
                }
                if (uVar51 == 0) {
LAB_003c172c:
                  uVar32 = (ulong)uVar51;
                }
                else {
                  *pfVar49 = *pfVar49 - *(float *)((long)local_b0 + lVar48);
                  *pfVar31 = *pfVar31 + *(float *)((long)local_b0 + lVar48);
                  if (uVar51 == 1) goto LAB_003c172c;
                  pfVar49[1] = pfVar49[1] - *(float *)((long)local_b0 + lVar48 + 4);
                  pfVar31[1] = pfVar31[1] + *(float *)((long)local_b0 + lVar48 + 4);
                  if (uVar51 == 3) {
                    uVar32 = 3;
                    pfVar49[2] = pfVar49[2] - *(float *)((long)local_b0 + lVar48 + 8);
                    pfVar31[2] = pfVar31[2] + *(float *)((long)local_b0 + lVar48 + 8);
                  }
                  else {
                    uVar32 = 2;
                  }
                }
                uVar70 = ((uVar67 - uVar51) - 4 >> 2) + 1;
                iVar103 = uVar70 * 4;
                if (2 < local_4e4 - uVar51) {
                  lVar5 = (ulong)uVar51 * 4;
                  lVar34 = 0;
                  uVar27 = 0;
                  do {
                    puVar36 = (undefined8 *)((long)local_290 + lVar34 + lVar5 + lVar73);
                    puVar42 = (undefined8 *)((long)local_b0 + lVar34 + lVar48 + lVar5);
                    uVar27 = uVar27 + 1;
                    uVar9 = *puVar42;
                    puVar69 = (undefined8 *)((long)local_290 + lVar34 + lVar50 + lVar5);
                    lVar34 = lVar34 + 0x10;
                    fVar102 = (float)((ulong)*puVar36 >> 0x20) - (float)((ulong)uVar9 >> 0x20);
                    fVar101 = (float)((ulong)puVar36[1] >> 0x20) -
                              (float)((ulong)puVar42[1] >> 0x20);
                    puVar36[1] = CONCAT17((char)((uint)fVar101 >> 0x18),
                                          CONCAT16((char)((uint)fVar101 >> 0x10),
                                                   CONCAT15((char)((uint)fVar101 >> 8),
                                                            CONCAT14(SUB41(fVar101,0),
                                                                     (float)puVar36[1] -
                                                                     (float)puVar42[1]))));
                    *puVar36 = CONCAT17((char)((uint)fVar102 >> 0x18),
                                        CONCAT16((char)((uint)fVar102 >> 0x10),
                                                 CONCAT15((char)((uint)fVar102 >> 8),
                                                          CONCAT14(SUB41(fVar102,0),
                                                                   (float)*puVar36 - (float)uVar9)))
                                       );
                    uVar9 = *puVar42;
                    fVar102 = (float)((ulong)*puVar69 >> 0x20) + (float)((ulong)uVar9 >> 0x20);
                    fVar101 = (float)((ulong)puVar69[1] >> 0x20) +
                              (float)((ulong)puVar42[1] >> 0x20);
                    puVar69[1] = CONCAT17((char)((uint)fVar101 >> 0x18),
                                          CONCAT16((char)((uint)fVar101 >> 0x10),
                                                   CONCAT15((char)((uint)fVar101 >> 8),
                                                            CONCAT14(SUB41(fVar101,0),
                                                                     (float)puVar69[1] +
                                                                     (float)puVar42[1]))));
                    *puVar69 = CONCAT17((char)((uint)fVar102 >> 0x18),
                                        CONCAT16((char)((uint)fVar102 >> 0x10),
                                                 CONCAT15((char)((uint)fVar102 >> 8),
                                                          CONCAT14(SUB41(fVar102,0),
                                                                   (float)*puVar69 + (float)uVar9)))
                                       );
                  } while (uVar27 < uVar70);
                  uVar32 = (ulong)(uint)((int)uVar32 + iVar103);
                  if (iVar103 == uVar67 - uVar51) goto joined_r0x003c1490;
                }
                uVar46 = -(uVar32 >> 0x1f) & 0xfffffffc00000000 | uVar32 << 2;
                *(float *)((long)pfVar49 + uVar46) =
                     *(float *)((long)pfVar49 + uVar46) -
                     *(float *)((long)local_b0 + uVar46 + lVar48);
                    /* try { // try from 003c140c to 004c140f has its CatchHandler @ 003c17cc */
                *(float *)((long)local_290 + uVar46 + lVar50) =
                     *(float *)((long)local_290 + uVar46 + lVar50) +
                     *(float *)((long)local_b0 + uVar46 + lVar48);
                if ((int)uVar32 + 1 < (int)uVar67) {
                  lVar73 = uVar46 + 4;
                  *(float *)((long)pfVar49 + lVar73) =
                       *(float *)((long)pfVar49 + lVar73) -
                       *(float *)((long)local_b0 + lVar48 + lVar73);
                  *(float *)((long)local_290 + lVar50 + lVar73) =
                       *(float *)((long)local_290 + lVar50 + lVar73) +
                       *(float *)((long)local_b0 + lVar48 + lVar73);
                  if ((int)uVar32 + 2 < (int)uVar67) {
                    lVar73 = uVar46 + 8;
                    *(float *)((long)pfVar49 + lVar73) =
                         *(float *)((long)pfVar49 + lVar73) -
                         *(float *)((long)local_b0 + lVar48 + lVar73);
                    *(float *)((long)local_290 + lVar50 + lVar73) =
                         *(float *)((long)local_290 + lVar50 + lVar73) +
                         *(float *)((long)local_b0 + lVar48 + lVar73);
                  }
                }
              }
            }
          }
joined_r0x003c1490:
                    /* try { // try from 003c1490 to 004c1493 has its CatchHandler @ 003c18a4 */
          lVar50 = lVar50 + lVar57;
          pfVar31 = (float *)((long)pfVar31 + lVar57);
          lVar58 = lVar58 + 1;
          if ((int)param_2 <= iVar28 + 1) {
            uVar41 = 0;
            lVar58 = 0;
            iVar25 = *local_518;
            pfVar31 = local_290;
            if (iVar25 == 0) goto LAB_003c1670;
LAB_003c14bc:
            fVar102 = 1.0 / (float)iVar25;
            uVar75 = SUB41(fVar102,0);
            uVar78 = (undefined1)((uint)fVar102 >> 8);
            uVar80 = (undefined1)((uint)fVar102 >> 0x10);
            uVar82 = (undefined1)((uint)fVar102 >> 0x18);
            pfVar49 = local_290;
            if ((int)uVar67 < 1) goto LAB_003c16d0;
LAB_003c14d0:
            uVar26 = -((uint)((ulong)pfVar31 >> 2) & 3) & 3;
            if (uVar67 < uVar26) {
              uVar26 = uVar67;
            }
            if (uVar67 < 5) {
              uVar26 = uVar67;
            }
            if (uVar26 == 0) {
              uVar32 = 0;
            }
            else {
              *pfVar31 = *pfVar31 * (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)))
              ;
                    /* try { // try from 003c1514 to 004c1553 has its CatchHandler @ 003c0d1c */
              if ((uVar26 == 1) ||
                 (pfVar31[1] = pfVar31[1] *
                               (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75))),
                 uVar26 == 2)) {
                uVar32 = (ulong)uVar26;
              }
              else {
                pfVar31[2] = pfVar31[2] *
                             (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
                if (uVar26 == 4) {
                  uVar32 = 4;
                  pfVar31[3] = pfVar31[3] *
                               (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
                }
                else {
                  uVar32 = 3;
                }
              }
              if (uVar26 == uVar67) goto LAB_003c15e8;
            }
                    /* try { // try from 003c155c to 004c155f has its CatchHandler @ 003c17cc */
            uVar62 = ((uVar67 - uVar26) - 4 >> 2) + 1;
            iVar25 = uVar62 * 4;
            if (2 < local_4e4 - uVar26) {
                    /* try { // try from 003c1568 to 004c156b has its CatchHandler @ 003c18a4 */
              fVar102 = (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
              puVar36 = (undefined8 *)((long)pfVar49 + lVar58 + (ulong)uVar26 * 4);
              uVar51 = 0;
              puVar42 = puVar36;
              do {
                uVar9 = *puVar42;
                uVar51 = uVar51 + 1;
                fVar101 = (float)((ulong)uVar9 >> 0x20) * fVar102;
                fVar10 = (float)((ulong)puVar42[1] >> 0x20) * fVar102;
                puVar36[1] = CONCAT17((char)((uint)fVar10 >> 0x18),
                                      CONCAT16((char)((uint)fVar10 >> 0x10),
                                               CONCAT15((char)((uint)fVar10 >> 8),
                                                        CONCAT14(SUB41(fVar10,0),
                                                                 (float)puVar42[1] * fVar102))));
                *puVar36 = CONCAT17((char)((uint)fVar101 >> 0x18),
                                    CONCAT16((char)((uint)fVar101 >> 0x10),
                                             CONCAT15((char)((uint)fVar101 >> 8),
                                                      CONCAT14(SUB41(fVar101,0),
                                                               (float)uVar9 * fVar102))));
                puVar36 = puVar36 + 2;
                puVar42 = puVar42 + 2;
              } while (uVar51 < uVar62);
              uVar32 = (ulong)(uint)((int)uVar32 + iVar25);
              if (iVar25 == uVar67 - uVar26) goto LAB_003c15e8;
            }
            uVar46 = -(uVar32 >> 0x1f) & 0xfffffffc00000000 | uVar32 << 2;
            *(float *)((long)pfVar31 + uVar46) =
                 *(float *)((long)pfVar31 + uVar46) *
                 (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
            if (((int)uVar32 + 1 < (int)uVar67) &&
               (*(float *)((long)pfVar31 + uVar46 + 4) =
                     *(float *)((long)pfVar31 + uVar46 + 4) *
                     (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75))),
               (int)uVar32 + 2 < (int)uVar67)) {
              *(float *)((long)pfVar31 + uVar46 + 8) =
                   *(float *)((long)pfVar31 + uVar46 + 8) *
                   (float)CONCAT13(uVar82,CONCAT12(uVar80,CONCAT11(uVar78,uVar75)));
            }
LAB_003c15e8:
            if (local_504 == 0) goto LAB_003c163c;
            lVar58 = 0;
            dVar109 = 0.0;
            do {
              pfVar49 = pfVar31 + lVar58;
              lVar57 = lVar58 * 4;
              lVar58 = lVar58 + 1;
              dVar111 = (double)(*pfVar49 - *(float *)(local_230 + uVar41 * *local_1f8 + lVar57));
              dVar109 = dVar109 + dVar111 * dVar111;
              dVar111 = dVar110;
            } while ((int)lVar58 < (int)uVar67);
            do {
                    /* catch() { ... } // from try @ 003c0e18 with catch @ 003c162c */
              dVar110 = dVar109;
              if (dVar109 <= dVar111) {
                dVar110 = dVar111;
              }
LAB_003c163c:
              do {
                    /* try { // try from 003c163c to 004c164f has its CatchHandler @ 003c0d1c */
                if (uVar41 == param_2 - 1) goto LAB_003c0a64;
                uVar41 = uVar41 + 1;
                lVar58 = uVar41 * *local_258;
                iVar25 = local_518[uVar41];
                pfVar31 = (float *)((long)local_290 + lVar58);
                if (iVar25 != 0) goto LAB_003c14bc;
LAB_003c1670:
                    /* try { // try from 003c1670 to 004c1673 has its CatchHandler @ 003c18fc */
                pfVar49 = local_290;
                local_348 = 0;
                local_340 = 0;
                pcVar33 = (char *)String::allocate((String *)&local_348,0x10);
                uVar9 = s_counters_k_____0_004771e0._8_8_;
                    /* catch() { ... } // from try @ 003c0dbc with catch @ 003c1690 */
                    /* catch() { ... } // from try @ 003c12b0 with catch @ 003c1694
                       catch() { ... } // from try @ 003c18e4 with catch @ 003c1694 */
                *(undefined8 *)pcVar33 = s_counters_k_____0_004771e0._0_8_;
                *(undefined8 *)(pcVar33 + 8) = uVar9;
                error(-0xd7,(String *)&local_348,
                      "double cv::kmeans(cv::InputArray, int, cv::InputOutputArray, cv::TermCriteria, int, int, cv::OutputArray)"
                      ,"/builds/master_pack-android/opencv/modules/core/src/kmeans.cpp",0x19b);
                String::deallocate((String *)&local_348);
                fVar102 = 1.0 / (float)local_518[uVar41];
                uVar75 = SUB41(fVar102,0);
                uVar78 = (undefined1)((uint)fVar102 >> 8);
                uVar80 = (undefined1)((uint)fVar102 >> 0x10);
                uVar82 = (undefined1)((uint)fVar102 >> 0x18);
                if (0 < (int)uVar67) goto LAB_003c14d0;
LAB_003c16d0:
                dVar109 = 0.0;
                dVar111 = dVar110;
              } while (local_504 == 0);
            } while( true );
          }
        } while( true );
      }
    }
LAB_003c0a64:
    local_504 = local_504 + 1;
    iVar25 = iStack_3cc;
    if (iStack_3cc < 2) {
      iVar25 = 2;
    }
    if ((local_504 == iVar25) ||
       (dVar110 <=
        (double)CONCAT17(uVar89,CONCAT16(uVar87,CONCAT15(uVar85,CONCAT14(uVar83,CONCAT13(uVar81,
                                                  CONCAT12(uVar79,CONCAT11(uVar77,uVar74)))))))))
    goto code_r0x003c1868;
    local_138 = &local_130;
    local_170 = (float *)0x0;
    pMStack_178 = _UNK_003c2918;
    local_180 = _DAT_003c2910;
    uStack_128 = 0;
    local_130 = 0;
                    /* try { // try from 003c0ac4 to 004c0ac7 has its CatchHandler @ 003c0c74 */
    local_390 = 1;
    pfStack_168 = (float *)0x0;
    local_160 = 0;
    local_158 = 0;
    local_150 = 0;
    local_148 = 0;
    local_38c = local_508;
    local_140 = &pMStack_178;
    Mat::create((Mat *)&local_180,2,&local_390,6);
    pfVar31 = local_170;
    local_318 = lVar22;
    local_338[0] = (ulong)local_508 << 0x20;
                    /* try { // try from 003c0b38 to 004c0b3b has its CatchHandler @ 003c0c6c */
    local_328 = &PTR_FUN_004f79d0;
    local_320 = (long)local_170;
    local_310 = (Mat *)&local_c0;
    local_308 = (Mat *)&local_2a0;
    parallel_for_((Range *)local_338,(ParallelLoopBody *)&local_328,-1.0);
    local_328 = &PTR_FUN_004f79d0;
    ParallelLoopBody::~ParallelLoopBody((ParallelLoopBody *)&local_328);
    dVar112 = 0.0;
    if (0 < (int)local_508) {
      lVar58 = 0;
      do {
        lVar57 = lVar58 * 8;
        lVar58 = lVar58 + 1;
        dVar112 = dVar112 + *(double *)((long)pfVar31 + lVar57);
      } while ((int)lVar58 < (int)local_508);
    }
    if (local_148 != 0) {
      piVar59 = (int *)(local_148 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_180);
      }
    }
    local_148 = 0;
                    /* try { // try from 003c0bac to 004c0bcb has its CatchHandler @ 003c08bc */
    local_170 = (float *)0x0;
    local_158 = 0;
    local_160 = 0;
    pfStack_168 = (float *)0x0;
    if (0 < local_180._4_4_) {
      iVar25 = 0;
      ppMVar44 = local_140;
      do {
        *(undefined4 *)ppMVar44 = 0;
        iVar25 = iVar25 + 1;
                    /* try { // try from 003c0bd4 to 004c0bd7 has its CatchHandler @ 003c0c6c */
        ppMVar44 = (Mat **)((long)ppMVar44 + 4);
      } while (iVar25 < local_180._4_4_);
    }
                    /* try { // try from 003c0be0 to 004c0bf7 has its CatchHandler @ 003c0c74 */
    if (local_138 != &local_130) {
      fastFree(local_138);
    }
  } while( true );
LAB_003c1f18:
  local_498[1] = local_524;
  if (local_498 == local_4a8 + (param_2 - 2)) goto LAB_003c1f7c;
  pfVar35 = (float *)CONCAT17(uStack_569,
                              CONCAT16(uStack_56a,
                                       CONCAT15(uStack_56b,
                                                CONCAT14(uStack_56c,
                                                         CONCAT13(uStack_56d,
                                                                  CONCAT12(uStack_56e,
                                                                           CONCAT11(uStack_56f,
                                                                                    local_570)))))))
  ;
  local_498 = local_498 + 1;
  local_570 = SUB81(pfVar49,0);
  uStack_56f = (undefined1)((ulong)pfVar49 >> 8);
  uStack_56e = (undefined1)((ulong)pfVar49 >> 0x10);
  uStack_56d = (undefined1)((ulong)pfVar49 >> 0x18);
  uStack_56c = (undefined1)((ulong)pfVar49 >> 0x20);
  uStack_56b = (undefined1)((ulong)pfVar49 >> 0x28);
  uStack_56a = (undefined1)((ulong)pfVar49 >> 0x30);
  uStack_569 = (undefined1)((ulong)pfVar49 >> 0x38);
  uVar32 = *puVar30;
  pfVar49 = pfVar35;
  dVar109 = dVar114;
  goto LAB_003c1dac;
code_r0x003c1868:
  if (dVar112 < dVar113) {
    cVar24 = _OutputArray::needed(param_8);
    if (cVar24 != '\0') {
                    /* try { // try from 003c2308 to 004c230b has its CatchHandler @ 003c1900 */
      Mat::copyTo((Mat *)&local_2a0,param_8);
    }
    local_180 = (undefined **)CONCAT44(local_180._4_4_,0x2010000);
    local_170 = (float *)0x0;
    pMStack_178 = local_4e0;
    Mat::copyTo((Mat *)&local_300,(_OutputArray *)&local_180);
    dVar113 = dVar112;
  }
  local_490 = local_490 + 1;
  if (local_490 == local_48c) {
    if (local_4c8 != (float *)0x0) {
      operator_delete(local_4c8);
    }
    if (local_518 != (int *)0x0) {
      operator_delete(local_518);
    }
                    /* catch() { ... } // from try @ 003c0e50 with catch @ 003c18a4
                       catch() { ... } // from try @ 003c1490 with catch @ 003c18a4
                       catch() { ... } // from try @ 003c1568 with catch @ 003c18a4
                       catch() { ... } // from try @ 003c18b8 with catch @ 003c18a4 */
    if (local_1a8 != 0) {
      piVar59 = (int *)(local_1a8 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 003c18b8 to 004c18bb has its CatchHandler @ 003c18a4 */
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_1e0);
      }
    }
    local_1a8 = 0;
    local_1d0 = (float *)0x0;
    local_1b8 = 0;
    local_1c0 = 0;
    local_1c8 = 0;
                    /* try { // try from 003c18e4 to 004c18e7 has its CatchHandler @ 003c1694 */
    if (0 < local_1e0._4_4_) {
      iVar25 = 0;
      ppMVar44 = local_1a0;
      do {
                    /* catch() { ... } // from try @ 003c0ef0 with catch @ 003c18f4 */
        *(undefined4 *)ppMVar44 = 0;
        iVar25 = iVar25 + 1;
                    /* catch() { ... } // from try @ 003c1670 with catch @ 003c18fc */
                    /* catch() { ... } // from try @ 003c1948 with catch @ 003c1900
                       catch() { ... } // from try @ 003c21c8 with catch @ 003c1900
                       catch() { ... } // from try @ 003c2308 with catch @ 003c1900
                       catch() { ... } // from try @ 003c23fc with catch @ 003c1900 */
        ppMVar44 = (Mat **)((long)ppMVar44 + 4);
      } while (iVar25 < local_1e0._4_4_);
    }
    if (local_198 != &local_190) {
      fastFree(local_198);
    }
    if (local_208 != 0) {
      piVar59 = (int *)(local_208 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_240);
      }
    }
                    /* try { // try from 003c1948 to 004c196b has its CatchHandler @ 003c1900 */
    local_208 = 0;
    local_230 = 0;
    local_218 = 0;
    local_220 = 0;
    local_228 = 0;
    if (0 < local_240._4_4_) {
                    /* try { // try from 003c1970 to 004c1993 has its CatchHandler @ 003c26f4 */
      iVar25 = 0;
      ppMVar44 = local_200;
      do {
        *(undefined4 *)ppMVar44 = 0;
        iVar25 = iVar25 + 1;
        ppMVar44 = (Mat **)((long)ppMVar44 + 4);
      } while (iVar25 < local_240._4_4_);
    }
    if (local_1f8 != local_1f0) {
      fastFree(local_1f8);
    }
    if (local_268 != 0) {
      piVar59 = (int *)(local_268 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_2a0);
      }
    }
    local_268 = 0;
    local_290 = (float *)0x0;
    local_278 = 0;
    local_280 = 0;
                    /* try { // try from 003c19e8 to 004c19eb has its CatchHandler @ 003c25bc */
    local_288 = 0;
    if (0 < local_2a0._4_4_) {
      iVar25 = 0;
      ppMVar44 = local_260;
      do {
        *(undefined4 *)ppMVar44 = 0;
        iVar25 = iVar25 + 1;
        ppMVar44 = (Mat **)((long)ppMVar44 + 4);
      } while (iVar25 < local_2a0._4_4_);
    }
    if (local_258 != local_250) {
      fastFree(local_258);
    }
    if (local_28 != 0) {
      piVar59 = (int *)(local_28 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
                    /* try { // try from 003c1a44 to 004c1a47 has its CatchHandler @ 003c2598 */
      if (iVar25 == 1) {
        Mat::deallocate(local_4e0);
      }
    }
                    /* try { // try from 003c1a4c to 004c1abf has its CatchHandler @ 003c25bc */
    local_28 = 0;
    local_50 = 0;
    local_38 = 0;
    local_40 = 0;
    local_48 = 0;
    if (0 < local_5c) {
      iVar25 = 0;
      puVar45 = local_20;
      do {
        *puVar45 = 0;
        iVar25 = iVar25 + 1;
        puVar45 = puVar45 + 1;
      } while (iVar25 < local_5c);
    }
    if (local_18 != &local_10) {
      fastFree(local_18);
    }
    if (local_2c8 != 0) {
      piVar59 = (int *)(local_2c8 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
                    /* try { // try from 003c1ac4 to 004c1ae7 has its CatchHandler @ 003c24c0 */
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_300);
      }
    }
    local_2c8 = 0;
    local_2f0 = 0;
    local_2d8 = 0;
    local_2e0 = 0;
    local_2e8 = 0;
    if (0 < local_300._4_4_) {
      iVar25 = 0;
      puVar36 = local_2c0;
      do {
        *(undefined4 *)puVar36 = 0;
        iVar25 = iVar25 + 1;
        puVar36 = (undefined8 *)((long)puVar36 + 4);
      } while (iVar25 < local_300._4_4_);
    }
    if (local_2b8 != &local_2b0) {
      fastFree(local_2b8);
    }
                    /* try { // try from 003c1b2c to 004c1b2f has its CatchHandler @ 003c23e8 */
    if (local_88 != 0) {
      piVar59 = (int *)(local_88 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate((Mat *)&local_c0);
      }
    }
    local_88 = 0;
    local_b0 = (float *)0x0;
    local_98 = (float *)0x0;
    local_a0 = 0;
    local_a8 = (float *)0x0;
    if (0 < local_bc) {
      iVar25 = 0;
      puVar45 = local_80;
      do {
        *puVar45 = 0;
        iVar25 = iVar25 + 1;
        puVar45 = puVar45 + 1;
      } while (iVar25 < local_bc);
    }
    if (local_78 != local_70) {
      fastFree(local_78);
    }
    if (local_e8 != 0) {
      piVar59 = (int *)(local_e8 + 0x14);
      do {
        iVar25 = *piVar59;
        cVar24 = '\x01';
        bVar23 = (bool)ExclusiveMonitorPass(piVar59,0x10);
        if (bVar23) {
          *piVar59 = iVar25 + -1;
          cVar24 = ExclusiveMonitorsStatus();
        }
      } while (cVar24 != '\0');
      if (iVar25 == 1) {
        Mat::deallocate(local_4f8);
      }
    }
    local_e8 = 0;
    local_f8 = 0;
    local_110 = (float *)0x0;
    local_100 = 0;
    local_108 = 0;
    if (0 < local_11c) {
      iVar25 = 0;
      puVar45 = local_e0;
      do {
                    /* try { // try from 003c1c00 to 004c1fe3 has its CatchHandler @ 003c2268 */
        *puVar45 = 0;
        iVar25 = iVar25 + 1;
        puVar45 = puVar45 + 1;
      } while (iVar25 < local_11c);
    }
    if (local_d8 != &local_d0) {
      fastFree(local_d8);
    }
    auVar76._8_8_ = 0;
    auVar76._0_8_ = dVar113;
    return auVar76;
  }
  goto LAB_003c096c;
}


==================================================================

### FUNC 003c2930 (332 bytes) name=FUN_003c2930

void FUN_003c2930(long param_1,int param_2,ulong *param_3,float *param_4)

{
  float *pfVar1;
  uint uVar2;
  float *pfVar3;
  float *pfVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  int iVar9;
  
  uVar5 = *param_3;
  if (param_2 < 4) {
    iVar9 = 0;
  }
  else {
    uVar2 = param_2 - 4U >> 2;
    pfVar3 = param_4;
    pfVar4 = (float *)(param_1 + 4);
    do {
      uVar5 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
      pfVar1 = pfVar4 + 4;
      uVar6 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
      uVar7 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
      pfVar4[-1] = pfVar3[1] + *pfVar3 * (float)(int)uVar5;
      uVar5 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      *pfVar4 = pfVar3[3] + pfVar3[2] * (float)(int)uVar6;
      pfVar4[1] = pfVar3[5] + pfVar3[4] * (float)(int)uVar7;
      pfVar4[2] = pfVar3[7] + pfVar3[6] * (float)(int)uVar5;
      pfVar3 = pfVar3 + 8;
      pfVar4 = pfVar1;
    } while (pfVar1 != (float *)(param_1 + (ulong)uVar2 * 0x10 + 0x14));
    iVar9 = (uVar2 + 1) * 4;
  }
  if (iVar9 < param_2) {
    lVar8 = (long)iVar9;
    pfVar3 = (float *)(param_1 + lVar8 * 4);
    pfVar4 = param_4 + lVar8 * 2;
    do {
                    /* try { // try from 003c2a38 to 004c2a3b has its CatchHandler @ 003c30c4 */
                    /* try { // try from 003c2a40 to 004c2c67 has its CatchHandler @ 003c3148 */
      pfVar1 = pfVar4 + 2;
      uVar5 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
      *pfVar3 = pfVar4[1] + *pfVar4 * (float)(int)uVar5;
      pfVar3 = pfVar3 + 1;
      pfVar4 = pfVar1;
    } while (pfVar1 != param_4 + (lVar8 + 1 + (ulong)(uint)((param_2 + -1) - iVar9)) * 2);
  }
  *param_3 = uVar5;
  return;
}


==================================================================

### FUNC 003c2a7c (360 bytes) name=FUN_003c2a7c

void FUN_003c2a7c(long param_1,int param_2,ulong *param_3,double *param_4)

{
  double *pdVar1;
  uint uVar2;
  double *pdVar3;
  ulong uVar4;
  int iVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  double *pdVar9;
  long lVar10;
  double dVar11;
  double dVar12;
  
  uVar4 = *param_3;
  if (param_2 < 4) {
    iVar5 = 0;
  }
  else {
    uVar2 = param_2 - 4U >> 2;
    pdVar3 = param_4;
    pdVar9 = (double *)(param_1 + 8);
    do {
      pdVar1 = pdVar9 + 4;
      uVar6 = (uVar4 >> 0x20) + (uVar4 & 0xffffffff) * 0xf83f630a;
      uVar7 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
      dVar12 = pdVar3[2];
      dVar11 = pdVar3[3];
      uVar8 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      uVar4 = (uVar8 >> 0x20) + (uVar8 & 0xffffffff) * 0xf83f630a;
      pdVar9[-1] = pdVar3[1] + *pdVar3 * (double)(long)(uVar6 >> 0x20 | uVar6 << 0x20);
      *pdVar9 = dVar11 + dVar12 * (double)(long)(uVar7 >> 0x20 | uVar7 << 0x20);
      dVar12 = pdVar3[4];
      dVar11 = pdVar3[5];
      pdVar9[2] = pdVar3[7] + pdVar3[6] * (double)(long)(uVar4 >> 0x20 | uVar4 << 0x20);
      pdVar9[1] = dVar11 + dVar12 * (double)(long)(uVar8 >> 0x20 | uVar8 << 0x20);
      pdVar3 = pdVar3 + 8;
      pdVar9 = pdVar1;
    } while (pdVar1 != (double *)(param_1 + (ulong)uVar2 * 0x20 + 0x28));
    iVar5 = (uVar2 + 1) * 4;
  }
  if (iVar5 < param_2) {
    lVar10 = (long)iVar5;
    pdVar3 = (double *)(param_1 + lVar10 * 8);
    pdVar9 = param_4 + lVar10 * 2;
    do {
      pdVar1 = pdVar9 + 2;
      uVar4 = (uVar4 >> 0x20) + (uVar4 & 0xffffffff) * 0xf83f630a;
      *pdVar3 = pdVar9[1] + *pdVar9 * (double)(long)(uVar4 >> 0x20 | uVar4 << 0x20);
      pdVar3 = pdVar3 + 1;
      pdVar9 = pdVar1;
    } while (pdVar1 != param_4 + (lVar10 + 1 + (ulong)(uint)((param_2 + -1) - iVar5)) * 2);
  }
  *param_3 = uVar4;
  return;
}


==================================================================

### FUNC 003c2be4 (652 bytes) name=FUN_003c2be4

void FUN_003c2be4(long param_1,int param_2,ulong *param_3,uint *param_4,char param_5)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint *puVar4;
  int iVar5;
  uint uVar6;
  ulong uVar7;
  long lVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  ulong uVar11;
  
  uVar7 = *param_3;
  if (param_5 == '\0') {
    iVar5 = 0;
    if (3 < param_2) {
      uVar3 = param_2 - 4U >> 2;
      puVar4 = param_4;
      puVar9 = (undefined1 *)(param_1 + 1);
      do {
        uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
                    /* try { // try from 003c2d9c to 004c2d9f has its CatchHandler @ 003c3078 */
        uVar1 = (*puVar4 & (uint)uVar7) + puVar4[1];
        uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
        uVar2 = (puVar4[2] & (uint)uVar7) + puVar4[3];
        if (0xff < uVar1) {
          uVar1 = -(uint)(0 < (int)uVar1);
        }
        puVar9[-1] = (char)uVar1;
        uVar11 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
        if (0xff < uVar2) {
          uVar2 = -(uint)(0 < (int)uVar2);
        }
        *puVar9 = (char)uVar2;
                    /* try { // try from 003c2e10 to 004c2e13 has its CatchHandler @ 003c30bc */
        uVar7 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
        uVar1 = (puVar4[4] & (uint)uVar11) + puVar4[5];
        uVar2 = (puVar4[6] & (uint)uVar7) + puVar4[7];
        puVar10 = puVar9 + 4;
        if (0xff < uVar1) {
          uVar1 = -(uint)(0 < (int)uVar1);
        }
        if (0xff < uVar2) {
          uVar2 = -(uint)(0 < (int)uVar2);
        }
        puVar9[1] = (char)uVar1;
        puVar9[2] = (char)uVar2;
        puVar4 = puVar4 + 8;
        puVar9 = puVar10;
      } while (puVar10 != (undefined1 *)(param_1 + (ulong)uVar3 * 4 + 5));
      iVar5 = (uVar3 + 1) * 4;
    }
  }
  else if (param_2 < 4) {
    iVar5 = 0;
  }
  else {
    uVar3 = param_2 - 4U >> 2;
    puVar4 = param_4;
    puVar9 = (undefined1 *)(param_1 + 1);
    do {
      puVar10 = puVar9 + 4;
      uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      uVar6 = (uint)uVar7;
      uVar1 = (*puVar4 & uVar6) + puVar4[1];
      uVar2 = (puVar4[2] & (int)uVar6 >> 8) + puVar4[3];
      if (0xff < uVar1) {
        uVar1 = -(uint)(0 < (int)uVar1);
      }
      puVar9[-1] = (char)uVar1;
      if (0xff < uVar2) {
        uVar2 = -(uint)(0 < (int)uVar2);
      }
      *puVar9 = (char)uVar2;
      uVar1 = (puVar4[4] & (int)uVar6 >> 0x10) + puVar4[5];
      uVar2 = (puVar4[6] & (int)uVar6 >> 0x18) + puVar4[7];
      if (0xff < uVar1) {
        uVar1 = -(uint)(0 < (int)uVar1);
      }
                    /* try { // try from 003c2cb0 to 004c2cb3 has its CatchHandler @ 003c30f0 */
      if (0xff < uVar2) {
        uVar2 = -(uint)(0 < (int)uVar2);
      }
                    /* try { // try from 003c2cb8 to 004c2d2b has its CatchHandler @ 003c3148 */
      puVar9[1] = (char)uVar1;
      puVar9[2] = (char)uVar2;
      puVar4 = puVar4 + 8;
      puVar9 = puVar10;
    } while (puVar10 != (undefined1 *)(param_1 + (ulong)uVar3 * 4 + 5));
    iVar5 = (uVar3 + 1) * 4;
  }
  if (iVar5 < param_2) {
    lVar8 = (long)iVar5;
    puVar4 = param_4 + lVar8 * 2;
    puVar9 = (undefined1 *)(param_1 + lVar8);
    do {
      uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      uVar3 = (*puVar4 & (uint)uVar7) + puVar4[1];
      if (0xff < uVar3) {
        uVar3 = -(uint)(0 < (int)uVar3);
      }
      puVar10 = puVar9 + 1;
      *puVar9 = (char)uVar3;
      puVar4 = puVar4 + 2;
      puVar9 = puVar10;
    } while (puVar10 != (undefined1 *)(param_1 + lVar8 + 1 + (ulong)(uint)((param_2 + -1) - iVar5)))
    ;
  }
  *param_3 = uVar7;
  return;
}


==================================================================

### FUNC 003c2e70 (636 bytes) name=FUN_003c2e70

void FUN_003c2e70(undefined1 *param_1,int param_2,ulong *param_3,int *param_4)

{
  uint *puVar1;
  ulong uVar2;
  uint uVar3;
  uint uVar4;
  undefined1 *puVar5;
  int iVar6;
  int *piVar7;
  ulong uVar8;
  int iVar9;
  uint *puVar10;
  ulong uVar11;
  int iVar12;
  
  uVar8 = *param_3;
                    /* try { // try from 003c2e84 to 004c2e87 has its CatchHandler @ 003c3050 */
  if (param_2 + -3 < 1) {
    iVar12 = 0;
  }
  else {
    iVar12 = 0;
    uVar11 = uVar8 & 0xffffffff;
    piVar7 = param_4;
    puVar5 = param_1;
    do {
                    /* try { // try from 003c2eb0 to 004c2f03 has its CatchHandler @ 003c2750 */
      uVar11 = (uVar8 >> 0x20) + uVar11 * 0xf83f630a;
      uVar8 = (uVar11 & 0xffffffff) * 0xf83f630a + (uVar11 >> 0x20);
      iVar6 = (int)((uVar11 & 0xffffffff) * (ulong)(uint)piVar7[1] >> 0x20);
      iVar9 = (int)((uVar8 & 0xffffffff) * (ulong)(uint)piVar7[6] >> 0x20);
      uVar2 = (uVar8 & 0xffffffff) * 0xf83f630a + (uVar8 >> 0x20);
                    /* try { // try from 003c2f2c to 004c2f2f has its CatchHandler @ 003c3100 */
                    /* try { // try from 003c2f3c to 004c2f3f has its CatchHandler @ 003c3124 */
      uVar3 = (piVar7[4] + (int)uVar11) -
              (((uint)((int)uVar11 - iVar6) >> (ulong)(*(byte *)(piVar7 + 2) & 0x1f)) + iVar6 >>
              (ulong)(piVar7[3] & 0x1f)) * *piVar7;
                    /* try { // try from 003c2f48 to 004c2f4b has its CatchHandler @ 003c3100 */
      uVar4 = (piVar7[9] + (int)uVar8) -
              (((uint)((int)uVar8 - iVar9) >> (ulong)(piVar7[7] & 0x1f)) + iVar9 >>
              (ulong)(piVar7[8] & 0x1f)) * piVar7[5];
                    /* try { // try from 003c2f54 to 004c2f57 has its CatchHandler @ 003c3124 */
      if (0xff < uVar3) {
        uVar3 = -(uint)(0 < (int)uVar3);
      }
      *puVar5 = (char)uVar3;
      if (0xff < uVar4) {
        uVar4 = -(uint)(0 < (int)uVar4);
      }
      puVar5[1] = (char)uVar4;
      iVar12 = iVar12 + 4;
      uVar8 = (uVar2 & 0xffffffff) * 0xf83f630a + (uVar2 >> 0x20);
      uVar11 = uVar8 & 0xffffffff;
      iVar6 = (int)((uVar2 & 0xffffffff) * (ulong)(uint)piVar7[0xb] >> 0x20);
      iVar9 = (int)(uVar11 * (uint)piVar7[0x10] >> 0x20);
      uVar3 = (piVar7[0xe] + (int)uVar2) -
              (((uint)((int)uVar2 - iVar6) >> (ulong)(piVar7[0xc] & 0x1f)) + iVar6 >>
              (ulong)(*(byte *)(piVar7 + 0xd) & 0x1f)) * piVar7[10];
                    /* try { // try from 003c2ff4 to 004c2ff7 has its CatchHandler @ 003c3148 */
      uVar4 = (piVar7[0x13] + (int)uVar8) -
              (((uint)((int)uVar8 - iVar9) >> (ulong)(*(byte *)(piVar7 + 0x11) & 0x1f)) + iVar9 >>
              (ulong)(piVar7[0x12] & 0x1f)) * piVar7[0xf];
                    /* try { // try from 003c3000 to 004c3003 has its CatchHandler @ 003c3050 */
      if (0xff < uVar3) {
        uVar3 = -(uint)(0 < (int)uVar3);
      }
                    /* try { // try from 003c300c to 004c300f has its CatchHandler @ 003c3078 */
      if (0xff < uVar4) {
        uVar4 = -(uint)(0 < (int)uVar4);
      }
      puVar5[2] = (char)uVar3;
                    /* try { // try from 003c3018 to 004c301b has its CatchHandler @ 003c30bc */
      puVar5[3] = (char)uVar4;
      piVar7 = piVar7 + 0x14;
      puVar5 = puVar5 + 4;
    } while (iVar12 < param_2 + -3);
                    /* try { // try from 003c3024 to 004c3033 has its CatchHandler @ 003c3148 */
    iVar12 = (param_2 - 4U & 0xfffffffc) + 4;
  }
  if (iVar12 < param_2) {
                    /* catch() { ... } // from try @ 003c27b4 with catch @ 003c3050
                       catch() { ... } // from try @ 003c2e84 with catch @ 003c3050
                       catch() { ... } // from try @ 003c3000 with catch @ 003c3050 */
    uVar11 = uVar8 & 0xffffffff;
    puVar5 = param_1 + iVar12;
    puVar10 = (uint *)(param_4 + (long)iVar12 * 5 + 1);
    do {
                    /* try { // try from 003c3074 to 004c3077 has its CatchHandler @ 003c2750 */
                    /* catch() { ... } // from try @ 003c2d9c with catch @ 003c3078
                       catch() { ... } // from try @ 003c300c with catch @ 003c3078 */
      puVar1 = puVar10 + 5;
      uVar8 = (uVar8 >> 0x20) + uVar11 * 0xf83f630a;
      uVar11 = uVar8 & 0xffffffff;
      iVar6 = (int)(uVar11 * *puVar10 >> 0x20);
      uVar3 = (puVar10[3] + (int)uVar8) -
              (((uint)((int)uVar8 - iVar6) >> (ulong)(puVar10[1] & 0x1f)) + iVar6 >>
              (ulong)(puVar10[2] & 0x1f)) * puVar10[-1];
                    /* catch() { ... } // from try @ 003c2e10 with catch @ 003c30bc
                       catch() { ... } // from try @ 003c3018 with catch @ 003c30bc */
      if (0xff < uVar3) {
        uVar3 = -(uint)(0 < (int)uVar3);
      }
                    /* catch() { ... } // from try @ 003c2a38 with catch @ 003c30c4 */
      *puVar5 = (char)uVar3;
      puVar5 = puVar5 + 1;
      puVar10 = puVar1;
    } while (puVar1 != (uint *)(param_4 +
                               ((ulong)(uint)((param_2 + -1) - iVar12) + (long)iVar12) * 5 + 6));
  }
  *param_3 = uVar8;
  return;
}


==================================================================

### FUNC 003c30ec (748 bytes) name=FUN_003c30ec

void FUN_003c30ec(long param_1,int param_2,ulong *param_3,uint *param_4,char param_5)

{
  int iVar1;
  uint uVar2;
  uint *puVar3;
  int iVar4;
  uint uVar5;
  ulong uVar6;
  undefined1 *puVar7;
  undefined1 *puVar8;
  long lVar9;
  undefined1 uVar10;
  undefined1 uVar11;
  undefined1 uVar12;
  
                    /* catch() { ... } // from try @ 003c2cb0 with catch @ 003c30f0 */
  uVar6 = *param_3;
  if (param_5 == '\0') {
    iVar4 = 0;
    if (3 < param_2) {
      uVar2 = param_2 - 4U >> 2;
      puVar3 = param_4;
      puVar7 = (undefined1 *)(param_1 + 3);
      do {
        uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
        iVar4 = (*puVar3 & (uint)uVar6) + puVar3[1];
        uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
        iVar1 = (puVar3[2] & (uint)uVar6) + puVar3[3];
        uVar11 = 0x80;
        uVar12 = 0x7f;
        uVar10 = (char)iVar4;
        if ((0xff < iVar4 + 0x80U) && (uVar10 = uVar12, iVar4 < 1)) {
          uVar10 = uVar11;
        }
        puVar7[-3] = uVar10;
        uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
        uVar10 = (char)iVar1;
        if ((0xff < iVar1 + 0x80U) && (uVar10 = uVar12, iVar1 < 1)) {
          uVar10 = uVar11;
        }
        puVar7[-2] = uVar10;
        iVar4 = (puVar3[4] & (uint)uVar6) + puVar3[5];
        uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
        iVar1 = (puVar3[6] & (uint)uVar6) + puVar3[7];
        uVar10 = (char)iVar4;
        if ((0xff < iVar4 + 0x80U) && (uVar10 = uVar12, iVar4 < 1)) {
          uVar10 = uVar11;
        }
        puVar7[-1] = uVar10;
        uVar10 = (char)iVar1;
        if ((0xff < iVar1 + 0x80U) && (uVar10 = uVar12, iVar1 < 1)) {
          uVar10 = uVar11;
        }
        puVar8 = puVar7 + 4;
        *puVar7 = uVar10;
        puVar3 = puVar3 + 8;
        puVar7 = puVar8;
      } while (puVar8 != (undefined1 *)(param_1 + (ulong)uVar2 * 4 + 7));
      iVar4 = (uVar2 + 1) * 4;
    }
  }
  else if (param_2 < 4) {
    iVar4 = 0;
  }
  else {
                    /* catch() { ... } // from try @ 003c2f2c with catch @ 003c3100
                       catch() { ... } // from try @ 003c2f48 with catch @ 003c3100 */
    uVar2 = param_2 - 4U >> 2;
    puVar3 = param_4;
    puVar7 = (undefined1 *)(param_1 + 3);
    do {
                    /* catch() { ... } // from try @ 003c2f3c with catch @ 003c3124
                       catch() { ... } // from try @ 003c2f54 with catch @ 003c3124 */
      uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
      uVar5 = (uint)uVar6;
                    /* catch() { ... } // from try @ 003c284c with catch @ 003c3148
                       catch() { ... } // from try @ 003c2a40 with catch @ 003c3148
                       catch() { ... } // from try @ 003c2cb8 with catch @ 003c3148
                       catch() { ... } // from try @ 003c2ff4 with catch @ 003c3148
                       catch() { ... } // from try @ 003c3024 with catch @ 003c3148 */
      iVar4 = (*puVar3 & uVar5) + puVar3[1];
      iVar1 = (puVar3[2] & (int)uVar5 >> 8) + puVar3[3];
      uVar11 = 0x80;
      uVar12 = 0x7f;
      uVar10 = (char)iVar4;
      if ((0xff < iVar4 + 0x80U) && (uVar10 = uVar12, iVar4 < 1)) {
        uVar10 = uVar11;
      }
      puVar7[-3] = uVar10;
      uVar10 = (char)iVar1;
      if ((0xff < iVar1 + 0x80U) && (uVar10 = uVar12, iVar1 < 1)) {
        uVar10 = uVar11;
      }
      puVar7[-2] = uVar10;
      iVar4 = (puVar3[4] & (int)uVar5 >> 0x10) + puVar3[5];
      iVar1 = (puVar3[6] & (int)uVar5 >> 0x18) + puVar3[7];
      uVar10 = (char)iVar4;
      if ((0xff < iVar4 + 0x80U) && (uVar10 = uVar12, iVar4 < 1)) {
        uVar10 = uVar11;
      }
      puVar7[-1] = uVar10;
      puVar3 = puVar3 + 8;
      uVar10 = (char)iVar1;
      if ((0xff < iVar1 + 0x80U) && (uVar10 = uVar12, iVar1 < 1)) {
        uVar10 = uVar11;
      }
      puVar8 = puVar7 + 4;
      *puVar7 = uVar10;
      puVar7 = puVar8;
    } while (puVar8 != (undefined1 *)(param_1 + (ulong)uVar2 * 4 + 7));
    iVar4 = (uVar2 + 1) * 4;
  }
  if (iVar4 < param_2) {
    lVar9 = (long)iVar4;
    puVar3 = param_4 + lVar9 * 2;
    puVar7 = (undefined1 *)(param_1 + lVar9);
    do {
      uVar6 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
      iVar1 = (*puVar3 & (uint)uVar6) + puVar3[1];
      uVar10 = (undefined1)iVar1;
      if ((0xff < iVar1 + 0x80U) && (uVar10 = 0x7f, iVar1 < 1)) {
        uVar10 = 0x80;
      }
      puVar8 = puVar7 + 1;
      *puVar7 = uVar10;
      puVar3 = puVar3 + 2;
      puVar7 = puVar8;
    } while (puVar8 != (undefined1 *)(param_1 + lVar9 + 1 + (ulong)(uint)((param_2 + -1) - iVar4)));
  }
  *param_3 = uVar6;
  return;
}


==================================================================

### FUNC 003c33d8 (700 bytes) name=FUN_003c33d8

void FUN_003c33d8(undefined1 *param_1,int param_2,ulong *param_3,int *param_4)

{
  uint *puVar1;
  ulong uVar2;
  ulong uVar3;
  undefined1 *puVar4;
  int iVar5;
  int *piVar6;
  uint *puVar7;
  int iVar8;
  undefined1 uVar9;
  ulong uVar10;
  ulong uVar11;
  int iVar12;
  undefined1 uVar13;
  undefined1 uVar14;
  
  uVar10 = *param_3;
  if (param_2 + -3 < 1) {
    iVar12 = 0;
  }
  else {
    iVar12 = 0;
    uVar11 = uVar10 & 0xffffffff;
    piVar6 = param_4;
    puVar4 = param_1;
    do {
      uVar10 = (uVar10 >> 0x20) + uVar11 * 0xf83f630a;
      uVar2 = (uVar10 & 0xffffffff) * 0xf83f630a + (uVar10 >> 0x20);
      iVar5 = (int)((uVar10 & 0xffffffff) * (ulong)(uint)piVar6[1] >> 0x20);
      uVar3 = (uVar2 & 0xffffffff) * 0xf83f630a + (uVar2 >> 0x20);
      iVar8 = (int)((uVar2 & 0xffffffff) * (ulong)(uint)piVar6[6] >> 0x20);
      iVar5 = (piVar6[4] + (int)uVar10) -
              (((uint)((int)uVar10 - iVar5) >> (ulong)(piVar6[2] & 0x1f)) + iVar5 >>
              (ulong)(*(byte *)(piVar6 + 3) & 0x1f)) * *piVar6;
      uVar10 = (uVar3 & 0xffffffff) * 0xf83f630a + (uVar3 >> 0x20);
      iVar12 = iVar12 + 4;
      uVar11 = uVar10 & 0xffffffff;
      iVar8 = (piVar6[9] + (int)uVar2) -
              (((uint)((int)uVar2 - iVar8) >> (ulong)(*(byte *)(piVar6 + 7) & 0x1f)) + iVar8 >>
              (ulong)(piVar6[8] & 0x1f)) * piVar6[5];
      uVar13 = 0x80;
      uVar14 = 0x7f;
      uVar9 = (char)iVar5;
      if ((0xff < iVar5 + 0x80U) && (uVar9 = uVar14, iVar5 < 1)) {
        uVar9 = uVar13;
      }
      *puVar4 = uVar9;
      uVar9 = (char)iVar8;
      if ((0xff < iVar8 + 0x80U) && (uVar9 = uVar14, iVar8 < 1)) {
        uVar9 = uVar13;
      }
      puVar4[1] = uVar9;
      iVar8 = (int)(uVar11 * (uint)piVar6[0x10] >> 0x20);
      iVar5 = (int)((uVar3 & 0xffffffff) * (ulong)(uint)piVar6[0xb] >> 0x20);
      iVar5 = (piVar6[0xe] + (int)uVar3) -
              (((uint)((int)uVar3 - iVar5) >> (ulong)(piVar6[0xc] & 0x1f)) + iVar5 >>
              (ulong)(piVar6[0xd] & 0x1f)) * piVar6[10];
      iVar8 = (piVar6[0x13] + (int)uVar10) -
              (((uint)((int)uVar10 - iVar8) >> (ulong)(piVar6[0x11] & 0x1f)) + iVar8 >>
              (ulong)(piVar6[0x12] & 0x1f)) * piVar6[0xf];
      uVar9 = (char)iVar5;
      if ((0xff < iVar5 + 0x80U) && (uVar9 = uVar14, iVar5 < 1)) {
        uVar9 = uVar13;
      }
      puVar4[2] = uVar9;
      uVar9 = (char)iVar8;
      if ((0xff < iVar8 + 0x80U) && (uVar9 = uVar14, iVar8 < 1)) {
        uVar9 = uVar13;
      }
      puVar4[3] = uVar9;
      puVar4 = puVar4 + 4;
      piVar6 = piVar6 + 0x14;
    } while (iVar12 < param_2 + -3);
    iVar12 = (param_2 - 4U & 0xfffffffc) + 4;
  }
  if (iVar12 < param_2) {
    uVar11 = uVar10 & 0xffffffff;
    puVar4 = param_1 + iVar12;
    puVar7 = (uint *)(param_4 + (long)iVar12 * 5 + 1);
    do {
      puVar1 = puVar7 + 5;
      uVar10 = (uVar10 >> 0x20) + uVar11 * 0xf83f630a;
      uVar11 = uVar10 & 0xffffffff;
      iVar5 = (int)(uVar11 * *puVar7 >> 0x20);
      iVar5 = (puVar7[3] + (int)uVar10) -
              (((uint)((int)uVar10 - iVar5) >> (ulong)(puVar7[1] & 0x1f)) + iVar5 >>
              (ulong)(puVar7[2] & 0x1f)) * puVar7[-1];
      uVar9 = (undefined1)iVar5;
      if ((0xff < iVar5 + 0x80U) && (uVar9 = 0x7f, iVar5 < 1)) {
        uVar9 = 0x80;
      }
      *puVar4 = uVar9;
      puVar4 = puVar4 + 1;
      puVar7 = puVar1;
    } while (puVar1 != (uint *)(param_4 +
                               ((ulong)(uint)((param_2 + -1) - iVar12) + (long)iVar12) * 5 + 6));
  }
  *param_3 = uVar10;
  return;
}


==================================================================

### FUNC 003c3694 (684 bytes) name=FUN_003c3694

void FUN_003c3694(long param_1,int param_2,ulong *param_3,uint *param_4,char param_5)

{
  undefined2 *puVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined2 *puVar7;
  int iVar8;
  uint *puVar9;
  uint uVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  
  uVar11 = *param_3;
  if (param_5 == '\0') {
    iVar8 = 0;
    if (3 < param_2) {
      uVar6 = param_2 - 4U >> 2;
      puVar9 = param_4;
      puVar7 = (undefined2 *)(param_1 + 2);
      do {
        uVar11 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
        uVar13 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
        uVar3 = (*puVar9 & (uint)uVar11) + puVar9[1];
        uVar11 = (uVar13 >> 0x20) + (uVar13 & 0xffffffff) * 0xf83f630a;
        uVar4 = (puVar9[2] & (uint)uVar13) + puVar9[3];
        if (0xffff < uVar3) {
          uVar3 = -(uint)(0 < (int)uVar3);
        }
        uVar10 = (puVar9[4] & (uint)uVar11) + puVar9[5];
        uVar11 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
        if (0xffff < uVar4) {
          uVar4 = -(uint)(0 < (int)uVar4);
        }
        uVar5 = (puVar9[6] & (uint)uVar11) + puVar9[7];
        puVar7[-1] = (short)uVar3;
        *puVar7 = (short)uVar4;
        if (0xffff < uVar10) {
          uVar10 = -(uint)(0 < (int)uVar10);
        }
        puVar1 = puVar7 + 4;
        puVar7[1] = (short)uVar10;
        puVar9 = puVar9 + 8;
        if (0xffff < uVar5) {
          uVar5 = -(uint)(0 < (int)uVar5);
        }
        puVar7[2] = (short)uVar5;
        puVar7 = puVar1;
      } while (puVar1 != (undefined2 *)(param_1 + (ulong)uVar6 * 8 + 10));
      iVar8 = (uVar6 + 1) * 4;
    }
  }
  else if (param_2 < 4) {
    iVar8 = 0;
  }
  else {
    uVar6 = param_2 - 4U >> 2;
    puVar9 = param_4;
    puVar7 = (undefined2 *)(param_1 + 2);
    do {
      puVar1 = puVar7 + 4;
      uVar11 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
      uVar10 = (uint)uVar11;
      uVar3 = (*puVar9 & uVar10) + puVar9[1];
      uVar4 = (puVar9[2] & (int)uVar10 >> 8) + puVar9[3];
      if (0xffff < uVar3) {
        uVar3 = -(uint)(0 < (int)uVar3);
      }
      uVar5 = (puVar9[4] & (int)uVar10 >> 0x10) + puVar9[5];
      if (0xffff < uVar4) {
        uVar4 = -(uint)(0 < (int)uVar4);
      }
      uVar10 = (puVar9[6] & (int)uVar10 >> 0x18) + puVar9[7];
      puVar7[-1] = (short)uVar3;
      if (0xffff < uVar5) {
        uVar5 = -(uint)(0 < (int)uVar5);
      }
      if (0xffff < uVar10) {
        uVar10 = -(uint)(0 < (int)uVar10);
      }
      *puVar7 = (short)uVar4;
      puVar7[1] = (short)uVar5;
      puVar7[2] = (short)uVar10;
      puVar9 = puVar9 + 8;
      puVar7 = puVar1;
    } while (puVar1 != (undefined2 *)(param_1 + (ulong)uVar6 * 8 + 10));
    iVar8 = (uVar6 + 1) * 4;
  }
  if (iVar8 < param_2) {
    lVar12 = (long)iVar8;
    puVar7 = (undefined2 *)(param_1 + lVar12 * 2);
    puVar9 = param_4 + lVar12 * 2;
    do {
      puVar2 = puVar9 + 2;
      uVar11 = (uVar11 >> 0x20) + (uVar11 & 0xffffffff) * 0xf83f630a;
      uVar6 = (*puVar9 & (uint)uVar11) + puVar9[1];
      if (0xffff < uVar6) {
        uVar6 = -(uint)(0 < (int)uVar6);
      }
      *puVar7 = (short)uVar6;
      puVar7 = puVar7 + 1;
      puVar9 = puVar2;
    } while (puVar2 != param_4 + (lVar12 + 1 + (ulong)(uint)((param_2 + -1) - iVar8)) * 2);
  }
  *param_3 = uVar11;
  return;
}


==================================================================

### FUNC 003c3940 (668 bytes) name=FUN_003c3940

void FUN_003c3940(undefined2 *param_1,int param_2,ulong *param_3,int *param_4)

{
  uint *puVar1;
  ulong uVar2;
  ulong uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  undefined2 *puVar9;
  int iVar10;
  int *piVar11;
  ulong uVar12;
  int iVar13;
  uint *puVar14;
  int iVar15;
  int iVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  
  uVar12 = *param_3;
  if (param_2 < 4) {
    iVar13 = 0;
  }
  else {
    uVar4 = param_2 - 4U >> 2;
    lVar19 = 0;
    uVar18 = uVar12 & 0xffffffff;
    piVar11 = param_4;
    puVar9 = param_1;
    do {
      uVar17 = (uVar12 >> 0x20) + uVar18 * 0xf83f630a;
      uVar2 = (uVar17 & 0xffffffff) * 0xf83f630a + (uVar17 >> 0x20);
      uVar3 = (uVar2 & 0xffffffff) * 0xf83f630a + (uVar2 >> 0x20);
      iVar15 = (int)((uVar17 & 0xffffffff) * (ulong)(uint)piVar11[1] >> 0x20);
      uVar12 = (uVar3 & 0xffffffff) * 0xf83f630a + (uVar3 >> 0x20);
      iVar10 = (int)((uVar2 & 0xffffffff) * (ulong)(uint)piVar11[6] >> 0x20);
      uVar18 = uVar12 & 0xffffffff;
      iVar13 = (int)((uVar3 & 0xffffffff) * (ulong)(uint)piVar11[0xb] >> 0x20);
      iVar16 = (int)(uVar18 * (uint)piVar11[0x10] >> 0x20);
      uVar5 = (piVar11[4] + (int)uVar17) -
              (((uint)((int)uVar17 - iVar15) >> (ulong)(piVar11[2] & 0x1f)) + iVar15 >>
              (ulong)(piVar11[3] & 0x1f)) * *piVar11;
      uVar6 = (piVar11[9] + (int)uVar2) -
              (((uint)((int)uVar2 - iVar10) >> (ulong)(*(byte *)(piVar11 + 7) & 0x1f)) + iVar10 >>
              (ulong)(*(byte *)(piVar11 + 8) & 0x1f)) * piVar11[5];
      uVar7 = (piVar11[0xe] + (int)uVar3) -
              (((uint)((int)uVar3 - iVar13) >> (ulong)(piVar11[0xc] & 0x1f)) + iVar13 >>
              (ulong)(piVar11[0xd] & 0x1f)) * piVar11[10];
      if (0xffff < uVar5) {
        uVar5 = -(uint)(0 < (int)uVar5);
      }
      uVar8 = (piVar11[0x13] + (int)uVar12) -
              (((uint)((int)uVar12 - iVar16) >> (ulong)(*(byte *)(piVar11 + 0x11) & 0x1f)) + iVar16
              >> (ulong)(piVar11[0x12] & 0x1f)) * piVar11[0xf];
      if (0xffff < uVar6) {
        uVar6 = -(uint)(0 < (int)uVar6);
      }
      lVar19 = lVar19 + 8;
      if (0xffff < uVar7) {
        uVar7 = -(uint)(0 < (int)uVar7);
      }
      if (0xffff < uVar8) {
        uVar8 = -(uint)(0 < (int)uVar8);
      }
      *puVar9 = (short)uVar5;
      puVar9[1] = (short)uVar6;
      puVar9[2] = (short)uVar7;
      puVar9[3] = (short)uVar8;
      piVar11 = piVar11 + 0x14;
      puVar9 = puVar9 + 4;
    } while (lVar19 != ((ulong)uVar4 + 1) * 8);
    iVar13 = (uVar4 + 1) * 4;
  }
  if (iVar13 < param_2) {
    uVar18 = uVar12 & 0xffffffff;
    puVar9 = param_1 + iVar13;
    puVar14 = (uint *)(param_4 + (long)iVar13 * 5 + 1);
    do {
      puVar1 = puVar14 + 5;
      uVar12 = (uVar12 >> 0x20) + uVar18 * 0xf83f630a;
      uVar18 = uVar12 & 0xffffffff;
      iVar10 = (int)(uVar18 * *puVar14 >> 0x20);
      uVar4 = (puVar14[3] + (int)uVar12) -
              (((uint)((int)uVar12 - iVar10) >> (ulong)(puVar14[1] & 0x1f)) + iVar10 >>
              (ulong)(puVar14[2] & 0x1f)) * puVar14[-1];
      if (0xffff < uVar4) {
        uVar4 = -(uint)(0 < (int)uVar4);
      }
      *puVar9 = (short)uVar4;
      puVar9 = puVar9 + 1;
      puVar14 = puVar1;
    } while (puVar1 != (uint *)(param_4 +
                               ((ulong)(uint)((param_2 + -1) - iVar13) + (long)iVar13) * 5 + 6));
  }
  *param_3 = uVar12;
  return;
}


==================================================================

### FUNC 003c3bdc (776 bytes) name=FUN_003c3bdc

void FUN_003c3bdc(long param_1,int param_2,ulong *param_3,uint *param_4,char param_5)

{
  uint *puVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  undefined2 *puVar6;
  int iVar7;
  uint *puVar8;
  uint uVar9;
  ulong uVar10;
  undefined2 *puVar11;
  long lVar12;
  undefined2 uVar13;
  undefined2 uVar14;
  undefined2 uVar15;
  
  uVar10 = *param_3;
  if (param_5 == '\0') {
    iVar7 = 0;
    if (3 < param_2) {
      uVar5 = param_2 - 4U >> 2;
      puVar8 = param_4;
      puVar6 = (undefined2 *)(param_1 + 6);
      do {
        uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        iVar7 = (*puVar8 & (uint)uVar10) + puVar8[1];
        uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        iVar2 = (puVar8[2] & (uint)uVar10) + puVar8[3];
        uVar14 = 0x8000;
        uVar15 = 0x7fff;
        uVar13 = (short)iVar7;
        if ((0xffff < iVar7 + 0x8000U) && (uVar13 = uVar15, iVar7 < 1)) {
          uVar13 = uVar14;
        }
        puVar6[-3] = uVar13;
        uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        uVar13 = (short)iVar2;
        if ((0xffff < iVar2 + 0x8000U) && (uVar13 = uVar15, iVar2 < 1)) {
          uVar13 = uVar14;
        }
        uVar9 = puVar8[6];
        iVar7 = (puVar8[4] & (uint)uVar10) + puVar8[5];
        uVar3 = puVar8[7];
        puVar6[-2] = uVar13;
        uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        puVar8 = puVar8 + 8;
        iVar2 = (uVar9 & (uint)uVar10) + uVar3;
        uVar13 = (short)iVar7;
        if ((0xffff < iVar7 + 0x8000U) && (uVar13 = uVar15, iVar7 < 1)) {
          uVar13 = uVar14;
        }
        puVar6[-1] = uVar13;
        uVar13 = (short)iVar2;
        if ((0xffff < iVar2 + 0x8000U) && (uVar13 = uVar15, iVar2 < 1)) {
          uVar13 = uVar14;
        }
        puVar11 = puVar6 + 4;
        *puVar6 = uVar13;
        puVar6 = puVar11;
      } while (puVar11 != (undefined2 *)(param_1 + (ulong)uVar5 * 8 + 0xe));
      iVar7 = (uVar5 + 1) * 4;
    }
  }
  else if (param_2 < 4) {
    iVar7 = 0;
  }
  else {
    uVar5 = param_2 - 4U >> 2;
    puVar8 = param_4;
    puVar6 = (undefined2 *)(param_1 + 6);
    do {
      uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
      uVar9 = (uint)uVar10;
      iVar7 = (*puVar8 & uVar9) + puVar8[1];
      iVar2 = (puVar8[2] & (int)uVar9 >> 8) + puVar8[3];
      uVar14 = 0x8000;
      uVar15 = 0x7fff;
      uVar13 = (short)iVar7;
      if ((0xffff < iVar7 + 0x8000U) && (uVar13 = uVar15, iVar7 < 1)) {
        uVar13 = uVar14;
      }
      puVar6[-3] = uVar13;
      uVar13 = (short)iVar2;
      if ((0xffff < iVar2 + 0x8000U) && (uVar13 = uVar15, iVar2 < 1)) {
        uVar13 = uVar14;
      }
      uVar3 = puVar8[6];
      iVar7 = (puVar8[4] & (int)uVar9 >> 0x10) + puVar8[5];
      uVar4 = puVar8[7];
      puVar6[-2] = uVar13;
      iVar2 = (uVar3 & (int)uVar9 >> 0x18) + uVar4;
      uVar13 = (short)iVar7;
      if ((0xffff < iVar7 + 0x8000U) && (uVar13 = uVar15, iVar7 < 1)) {
        uVar13 = uVar14;
      }
      puVar6[-1] = uVar13;
      puVar8 = puVar8 + 8;
      uVar13 = (short)iVar2;
      if ((0xffff < iVar2 + 0x8000U) && (uVar13 = uVar15, iVar2 < 1)) {
        uVar13 = uVar14;
      }
      puVar11 = puVar6 + 4;
      *puVar6 = uVar13;
      puVar6 = puVar11;
    } while (puVar11 != (undefined2 *)(param_1 + (ulong)uVar5 * 8 + 0xe));
    iVar7 = (uVar5 + 1) * 4;
  }
  if (iVar7 < param_2) {
    lVar12 = (long)iVar7;
    puVar6 = (undefined2 *)(param_1 + lVar12 * 2);
    puVar8 = param_4 + lVar12 * 2;
    do {
      puVar1 = puVar8 + 2;
      uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
      iVar2 = (*puVar8 & (uint)uVar10) + puVar8[1];
      uVar13 = (undefined2)iVar2;
      if ((0xffff < iVar2 + 0x8000U) && (uVar13 = 0x7fff, iVar2 < 1)) {
        uVar13 = 0x8000;
      }
      *puVar6 = uVar13;
      puVar6 = puVar6 + 1;
      puVar8 = puVar1;
    } while (puVar1 != param_4 + (lVar12 + 1 + (ulong)(uint)((param_2 + -1) - iVar7)) * 2);
  }
  *param_3 = uVar10;
  return;
}


==================================================================

### FUNC 003c3ee4 (728 bytes) name=FUN_003c3ee4

void FUN_003c3ee4(undefined2 *param_1,int param_2,ulong *param_3,int *param_4)

{
  uint *puVar1;
  ulong uVar2;
  ulong uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  undefined2 *puVar9;
  int iVar10;
  int *piVar11;
  uint *puVar12;
  int iVar13;
  undefined2 uVar14;
  int iVar15;
  ulong uVar16;
  ulong uVar17;
  ulong uVar18;
  long lVar19;
  undefined2 uVar20;
  undefined2 uVar21;
  
  uVar16 = *param_3;
  if (param_2 < 4) {
    iVar15 = 0;
  }
  else {
    uVar8 = param_2 - 4U >> 2;
    lVar19 = 0;
    uVar18 = uVar16 & 0xffffffff;
    piVar11 = param_4;
    puVar9 = param_1;
    do {
      uVar17 = (uVar16 >> 0x20) + uVar18 * 0xf83f630a;
      lVar19 = lVar19 + 8;
      uVar2 = (uVar17 & 0xffffffff) * 0xf83f630a + (uVar17 >> 0x20);
      iVar15 = (int)((uVar17 & 0xffffffff) * (ulong)(uint)piVar11[1] >> 0x20);
      uVar3 = (uVar2 & 0xffffffff) * 0xf83f630a + (uVar2 >> 0x20);
      iVar10 = (int)((uVar2 & 0xffffffff) * (ulong)(uint)piVar11[6] >> 0x20);
      uVar16 = (uVar3 & 0xffffffff) * 0xf83f630a + (uVar3 >> 0x20);
      uVar18 = uVar16 & 0xffffffff;
      iVar15 = (piVar11[4] + (int)uVar17) -
               (((uint)((int)uVar17 - iVar15) >> (ulong)(piVar11[2] & 0x1f)) + iVar15 >>
               (ulong)(*(byte *)(piVar11 + 3) & 0x1f)) * *piVar11;
      iVar10 = (piVar11[9] + (int)uVar2) -
               (((uint)((int)uVar2 - iVar10) >> (ulong)(*(byte *)(piVar11 + 7) & 0x1f)) + iVar10 >>
               (ulong)(*(byte *)(piVar11 + 8) & 0x1f)) * piVar11[5];
      uVar20 = 0x8000;
      uVar21 = 0x7fff;
      uVar14 = (short)iVar15;
      if ((0xffff < iVar15 + 0x8000U) && (uVar14 = uVar21, iVar15 < 1)) {
        uVar14 = uVar20;
      }
      *puVar9 = uVar14;
      uVar14 = (short)iVar10;
      if ((0xffff < iVar10 + 0x8000U) && (uVar14 = uVar21, iVar10 < 1)) {
        uVar14 = uVar20;
      }
      uVar4 = piVar11[0xb];
      uVar5 = piVar11[0x10];
      uVar6 = piVar11[0xc];
      uVar7 = piVar11[0x11];
      iVar15 = piVar11[0xe];
      puVar9[1] = uVar14;
      iVar13 = (int)(uVar18 * uVar5 >> 0x20);
      iVar10 = (int)((uVar3 & 0xffffffff) * (ulong)uVar4 >> 0x20);
      iVar15 = (iVar15 + (int)uVar3) -
               (((uint)((int)uVar3 - iVar10) >> (ulong)(uVar6 & 0x1f)) + iVar10 >>
               (ulong)(piVar11[0xd] & 0x1f)) * piVar11[10];
      iVar10 = (piVar11[0x13] + (int)uVar16) -
               (((uint)((int)uVar16 - iVar13) >> (ulong)(uVar7 & 0x1f)) + iVar13 >>
               (ulong)(piVar11[0x12] & 0x1f)) * piVar11[0xf];
      uVar14 = (short)iVar15;
      if ((0xffff < iVar15 + 0x8000U) && (uVar14 = uVar21, iVar15 < 1)) {
        uVar14 = uVar20;
      }
      puVar9[2] = uVar14;
      uVar14 = (short)iVar10;
      if ((0xffff < iVar10 + 0x8000U) && (uVar14 = uVar21, iVar10 < 1)) {
        uVar14 = uVar20;
      }
      puVar9[3] = uVar14;
      puVar9 = puVar9 + 4;
      piVar11 = piVar11 + 0x14;
    } while (lVar19 != ((ulong)uVar8 + 1) * 8);
    iVar15 = (uVar8 + 1) * 4;
  }
  if (iVar15 < param_2) {
    uVar18 = uVar16 & 0xffffffff;
    puVar9 = param_1 + iVar15;
    puVar12 = (uint *)(param_4 + (long)iVar15 * 5 + 1);
    do {
      puVar1 = puVar12 + 5;
      uVar16 = (uVar16 >> 0x20) + uVar18 * 0xf83f630a;
      uVar18 = uVar16 & 0xffffffff;
      iVar10 = (int)(uVar18 * *puVar12 >> 0x20);
      iVar10 = (puVar12[3] + (int)uVar16) -
               (((uint)((int)uVar16 - iVar10) >> (ulong)(puVar12[1] & 0x1f)) + iVar10 >>
               (ulong)(puVar12[2] & 0x1f)) * puVar12[-1];
      uVar14 = (undefined2)iVar10;
      if ((0xffff < iVar10 + 0x8000U) && (uVar14 = 0x7fff, iVar10 < 1)) {
        uVar14 = 0x8000;
      }
      *puVar9 = uVar14;
      puVar9 = puVar9 + 1;
      puVar12 = puVar1;
    } while (puVar1 != (uint *)(param_4 +
                               ((ulong)(uint)((param_2 + -1) - iVar15) + (long)iVar15) * 5 + 6));
  }
  *param_3 = uVar16;
  return;
}


==================================================================

### FUNC 003c41bc (508 bytes) name=FUN_003c41bc

void FUN_003c41bc(long param_1,int param_2,ulong *param_3,uint *param_4,char param_5)

{
  int *piVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  int *piVar6;
  uint *puVar7;
  int iVar8;
  uint uVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  
  uVar10 = *param_3;
  if (param_5 == '\0') {
    iVar8 = 0;
    if (3 < param_2) {
      uVar5 = param_2 - 4U >> 2;
      puVar7 = param_4;
      piVar6 = (int *)(param_1 + 4);
      do {
        uVar12 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        piVar1 = piVar6 + 4;
        uVar3 = puVar7[2];
        uVar10 = (uVar12 >> 0x20) + (uVar12 & 0xffffffff) * 0xf83f630a;
        uVar4 = puVar7[3];
        piVar6[-1] = (*puVar7 & (uint)uVar12) + puVar7[1];
        *piVar6 = (uVar3 & (uint)uVar10) + uVar4;
        uVar12 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
        uVar3 = puVar7[6];
        uVar10 = (uVar12 >> 0x20) + (uVar12 & 0xffffffff) * 0xf83f630a;
        uVar4 = puVar7[7];
        piVar6[1] = (puVar7[4] & (uint)uVar12) + puVar7[5];
        piVar6[2] = (uVar3 & (uint)uVar10) + uVar4;
        puVar7 = puVar7 + 8;
        piVar6 = piVar1;
      } while (piVar1 != (int *)(param_1 + (ulong)uVar5 * 0x10 + 0x14));
      iVar8 = (uVar5 + 1) * 4;
    }
  }
  else if (param_2 < 4) {
    iVar8 = 0;
  }
  else {
    uVar5 = param_2 - 4U >> 2;
    puVar7 = param_4;
    piVar6 = (int *)(param_1 + 4);
    do {
      uVar3 = *puVar7;
      piVar1 = piVar6 + 4;
      uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
      uVar9 = (uint)uVar10;
      uVar4 = puVar7[1];
      *piVar6 = (puVar7[2] & (int)uVar9 >> 8) + puVar7[3];
      piVar6[-1] = (uVar3 & uVar9) + uVar4;
      uVar3 = puVar7[4];
      uVar4 = puVar7[5];
      piVar6[2] = (puVar7[6] & (int)uVar9 >> 0x18) + puVar7[7];
      piVar6[1] = (uVar3 & (int)uVar9 >> 0x10) + uVar4;
      puVar7 = puVar7 + 8;
      piVar6 = piVar1;
    } while (piVar1 != (int *)(param_1 + (ulong)uVar5 * 0x10 + 0x14));
    iVar8 = (uVar5 + 1) * 4;
  }
  if (iVar8 < param_2) {
    lVar11 = (long)iVar8;
    piVar6 = (int *)(param_1 + lVar11 * 4);
    puVar7 = param_4 + lVar11 * 2;
    do {
      puVar2 = puVar7 + 2;
      uVar10 = (uVar10 >> 0x20) + (uVar10 & 0xffffffff) * 0xf83f630a;
      *piVar6 = (*puVar7 & (uint)uVar10) + puVar7[1];
      piVar6 = piVar6 + 1;
      puVar7 = puVar2;
    } while (puVar2 != param_4 + (lVar11 + 1 + (ulong)(uint)((param_2 + -1) - iVar8)) * 2);
  }
  *param_3 = uVar10;
  return;
}


==================================================================

### FUNC 003c43b8 (576 bytes) name=FUN_003c43b8

void FUN_003c43b8(int *param_1,int param_2,ulong *param_3,int *param_4)

{
  uint *puVar1;
  ulong uVar2;
  uint uVar3;
  byte bVar4;
  uint uVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  ulong uVar9;
  int iVar10;
  uint *puVar11;
  int iVar12;
  ulong uVar13;
  int *piVar14;
  long lVar15;
  
  uVar9 = *param_3;
  if (param_2 < 4) {
    iVar8 = 0;
  }
  else {
    uVar5 = param_2 - 4U >> 2;
    lVar15 = 0;
    uVar13 = uVar9 & 0xffffffff;
    piVar6 = param_4;
    piVar14 = param_1;
    do {
      uVar13 = (uVar9 >> 0x20) + uVar13 * 0xf83f630a;
      iVar8 = piVar6[9];
      uVar9 = (uVar13 & 0xffffffff) * 0xf83f630a + (uVar13 >> 0x20);
      iVar10 = (int)((uVar13 & 0xffffffff) * (ulong)(uint)piVar6[1] >> 0x20);
      uVar2 = (uVar9 & 0xffffffff) * 0xf83f630a + (uVar9 >> 0x20);
      iVar12 = (int)((uVar9 & 0xffffffff) * (ulong)(uint)piVar6[6] >> 0x20);
      bVar4 = *(byte *)(piVar6 + 7);
      uVar3 = piVar6[8];
      iVar7 = piVar6[5];
      *piVar14 = (piVar6[4] + (int)uVar13) -
                 (((uint)((int)uVar13 - iVar10) >> (ulong)(piVar6[2] & 0x1f)) + iVar10 >>
                 (ulong)(piVar6[3] & 0x1f)) * *piVar6;
      piVar14[1] = (iVar8 + (int)uVar9) -
                   (((uint)((int)uVar9 - iVar12) >> (ulong)(bVar4 & 0x1f)) + iVar12 >>
                   (ulong)(uVar3 & 0x1f)) * iVar7;
      lVar15 = lVar15 + 0x10;
      uVar9 = (uVar2 & 0xffffffff) * 0xf83f630a + (uVar2 >> 0x20);
      uVar3 = piVar6[0x11];
      uVar13 = uVar9 & 0xffffffff;
      iVar8 = piVar6[0x13];
      iVar10 = (int)((uVar2 & 0xffffffff) * (ulong)(uint)piVar6[0xb] >> 0x20);
      iVar7 = piVar6[0xf];
      iVar12 = (int)(uVar13 * (uint)piVar6[0x10] >> 0x20);
      bVar4 = *(byte *)(piVar6 + 0x12);
      piVar14[2] = (piVar6[0xe] + (int)uVar2) -
                   (((uint)((int)uVar2 - iVar10) >> (ulong)(*(byte *)(piVar6 + 0xc) & 0x1f)) +
                    iVar10 >> (ulong)(*(byte *)(piVar6 + 0xd) & 0x1f)) * piVar6[10];
      piVar14[3] = (iVar8 + (int)uVar9) -
                   (((uint)((int)uVar9 - iVar12) >> (ulong)(uVar3 & 0x1f)) + iVar12 >>
                   (ulong)(bVar4 & 0x1f)) * iVar7;
      piVar6 = piVar6 + 0x14;
      piVar14 = piVar14 + 4;
    } while (lVar15 != ((ulong)uVar5 + 1) * 0x10);
    iVar8 = (uVar5 + 1) * 4;
  }
  if (iVar8 < param_2) {
    uVar13 = uVar9 & 0xffffffff;
    piVar6 = param_1 + iVar8;
    puVar11 = (uint *)(param_4 + (long)iVar8 * 5 + 1);
    do {
      puVar1 = puVar11 + 5;
      uVar9 = (uVar9 >> 0x20) + uVar13 * 0xf83f630a;
      uVar13 = uVar9 & 0xffffffff;
      iVar7 = (int)(uVar13 * *puVar11 >> 0x20);
      *piVar6 = (puVar11[3] + (int)uVar9) -
                (((uint)((int)uVar9 - iVar7) >> (ulong)(puVar11[1] & 0x1f)) + iVar7 >>
                (ulong)(puVar11[2] & 0x1f)) * puVar11[-1];
      piVar6 = piVar6 + 1;
      puVar11 = puVar1;
    } while (puVar1 != (uint *)(param_4 +
                               ((ulong)(uint)((param_2 + -1) - iVar8) + (long)iVar8) * 5 + 6));
  }
  *param_3 = uVar9;
  return;
}


==================================================================

### FUNC 003c45f8 (1036 bytes) name=FUN_003c45f8

void FUN_003c45f8(float *param_1,float *param_2,uint param_3,ulong param_4,float *param_5,
                 float *param_6,char param_7)

{
  uint uVar1;
  int iVar2;
  float *pfVar3;
  uint uVar4;
  float *pfVar5;
  uint uVar6;
  long lVar7;
  ulong uVar8;
  long lVar9;
  ulong uVar10;
  ulong uVar11;
  float *pfVar12;
  uint uVar13;
  uint uVar14;
  float fVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  float fVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  undefined8 uVar22;
  
  uVar4 = (uint)param_4;
  if (param_7 == '\0') {
    if (uVar4 == 1) {
      fVar18 = *param_5;
      fVar15 = *param_6;
      if (0 < (int)param_3) {
        if ((param_2 < param_1 + 4 && param_1 < param_2 + 4) || (param_3 < 9)) {
          lVar9 = 0;
          do {
            param_2[lVar9] = fVar18 + param_1[lVar9] * fVar15;
            lVar9 = lVar9 + 1;
          } while ((int)lVar9 < (int)param_3);
        }
        else {
          uVar4 = -((uint)((ulong)param_1 >> 2) & 3) & 3;
          uVar13 = param_3;
          if (uVar4 < param_3) {
            uVar13 = uVar4;
          }
          uVar4 = uVar13;
          if ((uVar13 != 0) && (*param_2 = fVar18 + *param_1 * fVar15, uVar13 != 1)) {
            param_2[1] = fVar18 + param_1[1] * fVar15;
            if (uVar13 == 3) {
              param_2[2] = fVar18 + param_1[2] * fVar15;
            }
            else {
              uVar4 = 2;
            }
          }
          uVar1 = ((param_3 - uVar13) - 4 >> 2) + 1;
          uVar6 = 0;
          iVar2 = uVar1 * 4;
          pfVar5 = param_1 + uVar13;
          pfVar12 = param_2 + uVar13;
          do {
            uVar16 = *(undefined8 *)pfVar5;
            uVar6 = uVar6 + 1;
            *(ulong *)(pfVar12 + 2) =
                 CONCAT44(fVar18 + fVar15 * (float)((ulong)*(undefined8 *)(pfVar5 + 2) >> 0x20),
                          fVar18 + fVar15 * (float)*(undefined8 *)(pfVar5 + 2));
            *(ulong *)pfVar12 =
                 CONCAT44(fVar18 + fVar15 * (float)((ulong)uVar16 >> 0x20),
                          fVar18 + fVar15 * (float)uVar16);
            pfVar5 = pfVar5 + 4;
            pfVar12 = pfVar12 + 4;
          } while (uVar6 < uVar1);
          uVar4 = uVar4 + iVar2;
          if (iVar2 != param_3 - uVar13) {
            uVar11 = -(ulong)(uVar4 >> 0x1f) & 0xfffffffc00000000 | (ulong)uVar4 << 2;
            *(float *)((long)param_2 + uVar11) =
                 fVar18 + *(float *)((long)param_1 + uVar11) * fVar15;
            if (((int)(uVar4 + 1) < (int)param_3) &&
               (*(float *)((long)param_2 + uVar11 + 4) =
                     fVar18 + *(float *)((long)param_1 + uVar11 + 4) * fVar15,
               (int)(uVar4 + 2) < (int)param_3)) {
              *(float *)((long)param_2 + uVar11 + 8) =
                   fVar18 + *(float *)((long)param_1 + uVar11 + 8) * fVar15;
              return;
            }
          }
        }
      }
    }
    else if (0 < (int)param_3) {
      uVar11 = -(param_4 >> 0x1f & 1) & 0xfffffffc00000000 | (param_4 & 0xffffffff) << 2;
      uVar13 = -((uint)((ulong)param_6 >> 2) & 3) & 3;
      pfVar5 = param_2 + 4;
      if (uVar4 < uVar13) {
        uVar13 = uVar4;
      }
      uVar1 = ((uVar4 - uVar13) - 4 >> 2) + 1;
      iVar2 = uVar1 * 4;
      uVar6 = 0;
      do {
        if (0 < (int)uVar4) {
          if ((uVar4 < 7 ||
               (param_1 < pfVar5 && param_2 < param_1 + 4 ||
               param_5 < pfVar5 && param_2 < param_5 + 4)) ||
             (param_6 < pfVar5 && param_2 < param_6 + 4)) {
            lVar9 = 0;
            do {
              param_2[lVar9] = param_5[lVar9] + param_6[lVar9] * param_1[lVar9];
              lVar9 = lVar9 + 1;
            } while ((int)lVar9 < (int)uVar4);
          }
          else {
            if ((uVar13 == 0) || (*param_2 = *param_5 + *param_6 * *param_1, uVar13 == 1)) {
              uVar10 = (ulong)uVar13;
            }
            else {
              param_2[1] = param_5[1] + param_6[1] * param_1[1];
              if (uVar13 == 3) {
                param_2[2] = param_5[2] + param_6[2] * param_1[2];
                uVar10 = 3;
              }
              else {
                uVar10 = 2;
              }
            }
            if (2 < (uVar4 - 1) - uVar13) {
              lVar9 = 0;
              uVar14 = 0;
              do {
                lVar7 = lVar9 + (ulong)uVar13 * 4;
                uVar14 = uVar14 + 1;
                uVar22 = ((undefined8 *)((long)param_1 + lVar7))[1];
                uVar21 = *(undefined8 *)((long)param_1 + lVar7);
                uVar17 = ((undefined8 *)((long)param_5 + lVar7))[1];
                uVar16 = *(undefined8 *)((long)param_5 + lVar7);
                lVar9 = lVar9 + 0x10;
                uVar20 = ((undefined8 *)((long)param_6 + lVar7))[1];
                uVar19 = *(undefined8 *)((long)param_6 + lVar7);
                ((undefined8 *)((long)param_2 + lVar7))[1] =
                     CONCAT44((float)((ulong)uVar17 >> 0x20) +
                              (float)((ulong)uVar22 >> 0x20) * (float)((ulong)uVar20 >> 0x20),
                              (float)uVar17 + (float)uVar22 * (float)uVar20);
                *(undefined8 *)((long)param_2 + lVar7) =
                     CONCAT44((float)((ulong)uVar16 >> 0x20) +
                              (float)((ulong)uVar21 >> 0x20) * (float)((ulong)uVar19 >> 0x20),
                              (float)uVar16 + (float)uVar21 * (float)uVar19);
              } while (uVar14 < uVar1);
              uVar10 = (ulong)(uint)((int)uVar10 + iVar2);
              if (uVar4 - uVar13 == iVar2) goto LAB_003c47e8;
            }
            uVar8 = -(uVar10 >> 0x1f) & 0xfffffffc00000000 | uVar10 << 2;
            *(float *)((long)param_2 + uVar8) =
                 *(float *)((long)param_5 + uVar8) +
                 *(float *)((long)param_6 + uVar8) * *(float *)((long)param_1 + uVar8);
            if ((int)uVar10 + 1 < (int)uVar4) {
              lVar9 = uVar8 + 4;
              *(float *)((long)param_2 + lVar9) =
                   *(float *)((long)param_5 + lVar9) +
                   *(float *)((long)param_6 + lVar9) * *(float *)((long)param_1 + lVar9);
              if ((int)uVar10 + 2 < (int)uVar4) {
                lVar9 = uVar8 + 8;
                *(float *)((long)param_2 + lVar9) =
                     *(float *)((long)param_5 + lVar9) +
                     *(float *)((long)param_6 + lVar9) * *(float *)((long)param_1 + lVar9);
              }
            }
          }
        }
LAB_003c47e8:
        uVar6 = uVar6 + 1;
        param_1 = (float *)((long)param_1 + uVar11);
        param_2 = (float *)((long)param_2 + uVar11);
        pfVar5 = (float *)((long)pfVar5 + uVar11);
      } while (uVar6 != param_3);
    }
  }
  else if (0 < (int)param_3) {
    uVar11 = -(param_4 >> 0x1f & 1) & 0xfffffffc00000000 | (param_4 & 0xffffffff) << 2;
    uVar13 = 0;
    do {
      if (0 < (int)uVar4) {
        lVar9 = 0;
        pfVar5 = param_6;
        do {
          fVar15 = param_5[lVar9];
          lVar7 = 0;
          do {
            pfVar12 = param_1 + lVar7;
            pfVar3 = pfVar5 + lVar7;
            lVar7 = lVar7 + 1;
            fVar15 = fVar15 + *pfVar3 * *pfVar12;
          } while ((int)lVar7 < (int)uVar4);
          param_2[lVar9] = fVar15;
          lVar9 = lVar9 + 1;
          pfVar5 = (float *)((long)pfVar5 + uVar11);
        } while ((int)lVar9 < (int)uVar4);
      }
      uVar13 = uVar13 + 1;
      param_1 = (float *)((long)param_1 + uVar11);
      param_2 = (float *)((long)param_2 + uVar11);
    } while (uVar13 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c4a04 (1132 bytes) name=FUN_003c4a04

void FUN_003c4a04(float *param_1,double *param_2,uint param_3,uint param_4,double *param_5,
                 double *param_6,char param_7)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  double *pdVar5;
  double *pdVar6;
  float *pfVar7;
  double *pdVar8;
  uint uVar9;
  long lVar10;
  uint uVar11;
  long lVar12;
  double *pdVar13;
  uint uVar14;
  double *pdVar15;
  uint uVar16;
  double *pdVar17;
  ulong uVar18;
  undefined8 *puVar19;
  undefined8 uVar20;
  undefined8 uVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      dVar23 = *param_5;
      dVar22 = *param_6;
      if (0 < (int)param_3) {
        uVar14 = (uint)((ulong)param_2 >> 3) & 1;
        if (param_3 < uVar14) {
          uVar14 = param_3;
        }
        uVar1 = param_3;
        if (((int)param_3 < 6) || (uVar9 = 0, uVar1 = uVar14, uVar14 != 0)) {
          uVar14 = uVar1;
          *param_2 = dVar23 + (double)*param_1 * dVar22;
          uVar9 = uVar14;
          if ((uVar14 != 1) &&
             ((param_2[1] = dVar23 + (double)param_1[1] * dVar22, uVar14 != 2 &&
              (param_2[2] = dVar23 + (double)param_1[2] * dVar22, uVar14 != 3)))) {
            param_2[3] = dVar23 + (double)param_1[3] * dVar22;
            if (uVar14 == 5) {
              param_2[4] = dVar23 + (double)param_1[4] * dVar22;
            }
            else {
              uVar9 = 4;
            }
          }
          if (param_3 == uVar14) {
            return;
          }
        }
        uVar1 = ((param_3 - uVar14) - 4 >> 2) + 1;
        iVar4 = uVar1 * 4;
        if (2 < (param_3 - 1) - uVar14) {
          uVar11 = 0;
          pfVar7 = param_1 + uVar14;
          pdVar8 = param_2 + uVar14;
          do {
            uVar21 = *(undefined8 *)(pfVar7 + 2);
            uVar20 = *(undefined8 *)pfVar7;
            uVar11 = uVar11 + 1;
            pdVar8[1] = dVar23 + dVar22 * (double)(float)((ulong)uVar20 >> 0x20);
            *pdVar8 = dVar23 + dVar22 * (double)(float)uVar20;
            pdVar8[3] = dVar23 + dVar22 * (double)(float)((ulong)uVar21 >> 0x20);
            pdVar8[2] = dVar23 + dVar22 * (double)(float)uVar21;
            pfVar7 = pfVar7 + 4;
            pdVar8 = pdVar8 + 4;
          } while (uVar11 < uVar1);
          uVar9 = uVar9 + iVar4;
          if (iVar4 == param_3 - uVar14) {
            return;
          }
        }
        iVar4 = uVar9 + 1;
        param_2[(int)uVar9] = dVar23 + (double)param_1[(int)uVar9] * dVar22;
        if (iVar4 < (int)param_3) {
          iVar2 = uVar9 + 2;
          param_2[iVar4] = dVar23 + (double)param_1[iVar4] * dVar22;
          if (iVar2 < (int)param_3) {
            param_2[iVar2] = dVar23 + (double)param_1[iVar2] * dVar22;
            return;
          }
        }
      }
    }
    else if (0 < (int)param_3) {
      uVar14 = (uint)((ulong)param_6 >> 3) & 1;
      if (param_4 < uVar14) {
        uVar14 = param_4;
      }
      uVar18 = (ulong)uVar14;
      uVar1 = ((param_4 - uVar14) - 4 >> 2) + 1;
      pdVar8 = param_2 + 4;
      lVar12 = NEON_shl(uVar18,2);
      iVar4 = uVar1 * 4;
      uVar9 = 0;
      do {
        if (0 < (int)param_4) {
          if ((param_5 < pdVar8 && param_2 < param_5 + 4 ||
               param_6 < pdVar8 && param_2 < param_6 + 4) || (param_4 < 8)) {
            lVar10 = 0;
            do {
              param_2[lVar10] = param_5[lVar10] + param_6[lVar10] * (double)param_1[lVar10];
              lVar10 = lVar10 + 1;
            } while ((int)lVar10 < (int)param_4);
          }
          else {
            if (uVar14 != 0) {
              *param_2 = *param_5 + *param_6 * (double)*param_1;
            }
            uVar11 = (uint)(uVar14 != 0);
            if (2 < (param_4 - 1) - uVar14) {
              uVar16 = 0;
              pdVar13 = param_6 + uVar18;
              pdVar15 = param_5 + uVar18;
              pdVar17 = param_2 + uVar18;
              puVar19 = (undefined8 *)((long)param_1 + lVar12);
              do {
                uVar21 = puVar19[1];
                uVar20 = *puVar19;
                pdVar5 = pdVar15 + 1;
                dVar24 = *pdVar15;
                pdVar6 = pdVar13 + 1;
                dVar27 = *pdVar13;
                dVar23 = pdVar15[3];
                dVar22 = pdVar15[2];
                uVar16 = uVar16 + 1;
                dVar26 = pdVar13[3];
                dVar25 = pdVar13[2];
                pdVar13 = pdVar13 + 4;
                pdVar15 = pdVar15 + 4;
                pdVar17[1] = *pdVar5 + (double)(float)((ulong)uVar20 >> 0x20) * *pdVar6;
                *pdVar17 = dVar24 + (double)(float)uVar20 * dVar27;
                pdVar17[3] = dVar23 + (double)(float)((ulong)uVar21 >> 0x20) * dVar26;
                pdVar17[2] = dVar22 + (double)(float)uVar21 * dVar25;
                pdVar17 = pdVar17 + 4;
                puVar19 = puVar19 + 2;
              } while (uVar16 < uVar1);
              uVar11 = uVar11 + iVar4;
              if (param_4 - uVar14 == iVar4) goto LAB_003c4c30;
            }
            iVar2 = uVar11 + 1;
            param_2[(int)uVar11] =
                 param_5[(int)uVar11] + param_6[(int)uVar11] * (double)param_1[(int)uVar11];
            if (iVar2 < (int)param_4) {
              iVar3 = uVar11 + 2;
              param_2[iVar2] = param_5[iVar2] + param_6[iVar2] * (double)param_1[iVar2];
              if (iVar3 < (int)param_4) {
                param_2[iVar3] = param_5[iVar3] + param_6[iVar3] * (double)param_1[iVar3];
              }
            }
          }
        }
LAB_003c4c30:
        uVar9 = uVar9 + 1;
        param_1 = param_1 + (int)param_4;
        param_2 = param_2 + (int)param_4;
        pdVar8 = pdVar8 + (int)param_4;
      } while (uVar9 != param_3);
    }
  }
  else if (0 < (int)param_3) {
    uVar14 = 0;
    do {
      if (0 < (int)param_4) {
        lVar12 = 0;
        pdVar8 = param_6;
        do {
          dVar22 = param_5[lVar12];
          lVar10 = 0;
          do {
            pfVar7 = param_1 + lVar10;
            pdVar13 = pdVar8 + lVar10;
            lVar10 = lVar10 + 1;
            dVar22 = dVar22 + *pdVar13 * (double)*pfVar7;
          } while ((int)lVar10 < (int)param_4);
          param_2[lVar12] = dVar22;
          lVar12 = lVar12 + 1;
          pdVar8 = pdVar8 + (int)param_4;
        } while ((int)lVar12 < (int)param_4);
      }
      uVar14 = uVar14 + 1;
      param_1 = param_1 + (int)param_4;
      param_2 = param_2 + (int)param_4;
    } while (uVar14 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c4e70 (388 bytes) name=FUN_003c4e70

void FUN_003c4e70(long param_1,long param_2,int param_3,uint param_4,float *param_5,float *param_6,
                 char param_7)

{
  long lVar1;
  float *pfVar2;
  long lVar3;
  float *pfVar4;
  long lVar5;
  ulong uVar6;
  int iVar7;
  float fVar8;
  float fVar9;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      fVar8 = *param_5;
      fVar9 = *param_6;
      if (0 < param_3) {
        lVar5 = 0;
        do {
          lVar3 = lrintf(fVar8 + *(float *)(param_1 + lVar5 * 4) * fVar9);
          *(int *)(param_2 + lVar5 * 4) = (int)lVar3;
          lVar5 = lVar5 + 1;
        } while (lVar5 != (ulong)(param_3 - 1) + 1);
      }
    }
    else if (0 < param_3) {
      uVar6 = -(ulong)(param_4 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_4 << 2;
      iVar7 = 0;
      do {
        if (0 < (int)param_4) {
          lVar5 = 0;
          do {
            lVar3 = lrintf(param_5[lVar5] + param_6[lVar5] * *(float *)(param_1 + lVar5 * 4));
            *(int *)(param_2 + lVar5 * 4) = (int)lVar3;
            lVar5 = lVar5 + 1;
          } while (lVar5 != (ulong)(param_4 - 1) + 1);
        }
        iVar7 = iVar7 + 1;
        param_1 = param_1 + uVar6;
        param_2 = param_2 + uVar6;
      } while (iVar7 != param_3);
    }
  }
  else if (0 < param_3) {
    uVar6 = -(ulong)(param_4 >> 0x1f) & 0xfffffffc00000000 | (ulong)param_4 << 2;
    iVar7 = 0;
    do {
      if (0 < (int)param_4) {
        lVar5 = 0;
        pfVar4 = param_6;
        do {
          fVar8 = param_5[lVar5];
          lVar3 = 0;
          do {
            lVar1 = lVar3 * 4;
            pfVar2 = pfVar4 + lVar3;
            lVar3 = lVar3 + 1;
            fVar8 = fVar8 + *pfVar2 * *(float *)(param_1 + lVar1);
          } while ((int)lVar3 < (int)param_4);
          lVar3 = lrintf(fVar8);
          *(int *)(param_2 + lVar5 * 4) = (int)lVar3;
          lVar5 = lVar5 + 1;
          pfVar4 = (float *)((long)pfVar4 + uVar6);
        } while (lVar5 != (ulong)(param_4 - 1) + 1);
      }
      iVar7 = iVar7 + 1;
      param_1 = param_1 + uVar6;
      param_2 = param_2 + uVar6;
    } while (iVar7 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c4ff4 (568 bytes) name=FUN_003c4ff4

void FUN_003c4ff4(long param_1,long param_2,int param_3,int param_4,float *param_5,float *param_6,
                 char param_7)

{
  long lVar1;
  float *pfVar2;
  long lVar3;
  undefined2 uVar4;
  long lVar5;
  float *pfVar6;
  long lVar7;
  float fVar8;
  float fVar9;
  int iVar10;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      fVar8 = *param_5;
      fVar9 = *param_6;
      if (0 < param_3) {
        lVar3 = 0;
        do {
          lVar7 = lrintf(fVar8 + *(float *)(param_1 + lVar3 * 4) * fVar9);
          uVar4 = (undefined2)lVar7;
          if ((0xffff < (int)lVar7 + 0x8000U) && (uVar4 = 0x7fff, (int)lVar7 < 1)) {
            uVar4 = 0x8000;
          }
          *(undefined2 *)(param_2 + lVar3 * 2) = uVar4;
          lVar3 = lVar3 + 1;
        } while (lVar3 != (ulong)(param_3 - 1) + 1);
      }
    }
    else if (0 < param_3) {
      iVar10 = 0;
      do {
        if (0 < param_4) {
          lVar3 = 0;
          do {
            lVar7 = lrintf(param_5[lVar3] + param_6[lVar3] * *(float *)(param_1 + lVar3 * 4));
            uVar4 = (undefined2)lVar7;
            if ((0xffff < (int)lVar7 + 0x8000U) && (uVar4 = 0x7fff, (int)lVar7 < 1)) {
              uVar4 = 0x8000;
            }
            *(undefined2 *)(param_2 + lVar3 * 2) = uVar4;
            lVar3 = lVar3 + 1;
          } while (lVar3 != (ulong)(param_4 - 1) + 1);
        }
        param_1 = param_1 + (long)param_4 * 4;
        iVar10 = iVar10 + 1;
        param_2 = param_2 + (long)param_4 * 2;
      } while (iVar10 != param_3);
    }
  }
  else if (0 < param_3) {
    lVar3 = (long)param_4;
    iVar10 = 0;
    do {
      if (0 < param_4) {
        lVar7 = 0;
        pfVar6 = param_6;
        do {
          fVar8 = param_5[lVar7];
          lVar5 = 0;
          do {
            lVar1 = lVar5 * 4;
            pfVar2 = pfVar6 + lVar5;
            lVar5 = lVar5 + 1;
            fVar8 = fVar8 + *pfVar2 * *(float *)(param_1 + lVar1);
          } while ((int)lVar5 < param_4);
          lVar5 = lrintf(fVar8);
          uVar4 = (undefined2)lVar5;
          if ((0xffff < (int)lVar5 + 0x8000U) && (uVar4 = 0x7fff, (int)lVar5 < 1)) {
            uVar4 = 0x8000;
          }
          *(undefined2 *)(param_2 + lVar7 * 2) = uVar4;
          lVar7 = lVar7 + 1;
          pfVar6 = pfVar6 + lVar3;
        } while (lVar7 != (ulong)(param_4 - 1) + 1);
      }
      param_1 = param_1 + lVar3 * 4;
      iVar10 = iVar10 + 1;
      param_2 = param_2 + lVar3 * 2;
    } while (iVar10 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c522c (516 bytes) name=FUN_003c522c

void FUN_003c522c(long param_1,long param_2,int param_3,int param_4,float *param_5,float *param_6,
                 char param_7)

{
  long lVar1;
  float *pfVar2;
  uint uVar3;
  long lVar4;
  short sVar5;
  long lVar6;
  float *pfVar7;
  long lVar8;
  float fVar9;
  int iVar10;
  float fVar11;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      fVar9 = *param_5;
      fVar11 = *param_6;
      if (0 < param_3) {
        lVar4 = 0;
        do {
          lVar8 = lrintf(fVar9 + *(float *)(param_1 + lVar4 * 4) * fVar11);
          sVar5 = (short)lVar8;
          if (0xffff < (uint)lVar8) {
            sVar5 = -(ushort)(0 < (int)(uint)lVar8);
          }
          *(short *)(param_2 + lVar4 * 2) = sVar5;
          lVar4 = lVar4 + 1;
        } while (lVar4 != (ulong)(param_3 - 1) + 1);
      }
    }
    else if (0 < param_3) {
      iVar10 = 0;
      do {
        if (0 < param_4) {
          lVar4 = 0;
          do {
            lVar8 = lrintf(param_5[lVar4] + param_6[lVar4] * *(float *)(param_1 + lVar4 * 4));
            sVar5 = (short)lVar8;
            if (0xffff < (uint)lVar8) {
              sVar5 = -(ushort)(0 < (int)(uint)lVar8);
            }
            *(short *)(param_2 + lVar4 * 2) = sVar5;
            lVar4 = lVar4 + 1;
          } while (lVar4 != (ulong)(param_4 - 1) + 1);
        }
        iVar10 = iVar10 + 1;
        param_2 = param_2 + (long)param_4 * 2;
        param_1 = param_1 + (long)param_4 * 4;
      } while (iVar10 != param_3);
    }
  }
  else if (0 < param_3) {
    lVar4 = (long)param_4;
    iVar10 = 0;
    do {
      if (0 < param_4) {
        lVar8 = 0;
        pfVar7 = param_6;
        do {
          fVar9 = param_5[lVar8];
          lVar6 = 0;
          do {
            lVar1 = lVar6 * 4;
            pfVar2 = pfVar7 + lVar6;
            lVar6 = lVar6 + 1;
            fVar9 = fVar9 + *pfVar2 * *(float *)(param_1 + lVar1);
          } while ((int)lVar6 < param_4);
          lVar6 = lrintf(fVar9);
          uVar3 = (uint)lVar6;
          if (0xffff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          *(short *)(param_2 + lVar8 * 2) = (short)uVar3;
          lVar8 = lVar8 + 1;
          pfVar7 = pfVar7 + lVar4;
        } while (lVar8 != (ulong)(param_4 - 1) + 1);
      }
      param_1 = param_1 + lVar4 * 4;
      iVar10 = iVar10 + 1;
      param_2 = param_2 + lVar4 * 2;
    } while (iVar10 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c5430 (532 bytes) name=FUN_003c5430

void FUN_003c5430(long param_1,long param_2,int param_3,int param_4,float *param_5,float *param_6,
                 char param_7)

{
  long lVar1;
  float *pfVar2;
  long lVar3;
  undefined1 uVar4;
  long lVar5;
  float *pfVar6;
  long lVar7;
  float fVar8;
  int iVar9;
  float fVar10;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      fVar8 = *param_5;
      fVar10 = *param_6;
      if (0 < param_3) {
        lVar3 = 0;
        do {
          lVar7 = lrintf(fVar8 + *(float *)(param_1 + lVar3 * 4) * fVar10);
          uVar4 = (undefined1)lVar7;
          if ((0xff < (int)lVar7 + 0x80U) && (uVar4 = 0x7f, (int)lVar7 < 1)) {
            uVar4 = 0x80;
          }
          *(undefined1 *)(param_2 + lVar3) = uVar4;
          lVar3 = lVar3 + 1;
        } while (lVar3 != (ulong)(param_3 - 1) + 1);
      }
    }
    else if (0 < param_3) {
      lVar3 = NEON_shl((long)param_4,2);
      iVar9 = 0;
      do {
        if (0 < param_4) {
          lVar7 = 0;
          do {
            lVar5 = lrintf(param_5[lVar7] + param_6[lVar7] * *(float *)(param_1 + lVar7 * 4));
            uVar4 = (undefined1)lVar5;
            if ((0xff < (int)lVar5 + 0x80U) && (uVar4 = 0x7f, (int)lVar5 < 1)) {
              uVar4 = 0x80;
            }
            *(undefined1 *)(param_2 + lVar7) = uVar4;
            lVar7 = lVar7 + 1;
          } while (lVar7 != (ulong)(param_4 - 1) + 1);
        }
        iVar9 = iVar9 + 1;
        param_1 = param_1 + lVar3;
        param_2 = param_2 + param_4;
      } while (iVar9 != param_3);
    }
  }
  else if (0 < param_3) {
    lVar3 = (long)param_4;
    iVar9 = 0;
    do {
      if (0 < param_4) {
        lVar7 = 0;
        pfVar6 = param_6;
        do {
          fVar8 = param_5[lVar7];
          lVar5 = 0;
          do {
            lVar1 = lVar5 * 4;
            pfVar2 = pfVar6 + lVar5;
            lVar5 = lVar5 + 1;
            fVar8 = fVar8 + *pfVar2 * *(float *)(param_1 + lVar1);
          } while ((int)lVar5 < param_4);
          lVar5 = lrintf(fVar8);
          uVar4 = (undefined1)lVar5;
          if ((0xff < (int)lVar5 + 0x80U) && (uVar4 = 0x7f, (int)lVar5 < 1)) {
            uVar4 = 0x80;
          }
          *(undefined1 *)(param_2 + lVar7) = uVar4;
          lVar7 = lVar7 + 1;
          pfVar6 = pfVar6 + lVar3;
        } while (lVar7 != (ulong)(param_4 - 1) + 1);
      }
      param_1 = param_1 + lVar3 * 4;
      iVar9 = iVar9 + 1;
      param_2 = param_2 + lVar3;
    } while (iVar9 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c5644 (476 bytes) name=FUN_003c5644

void FUN_003c5644(long param_1,long param_2,int param_3,int param_4,float *param_5,float *param_6,
                 char param_7)

{
  long lVar1;
  float *pfVar2;
  uint uVar3;
  long lVar4;
  char cVar5;
  long lVar6;
  float *pfVar7;
  int iVar8;
  long lVar9;
  float fVar10;
  float fVar11;
  
  if (param_7 == '\0') {
    if (param_4 == 1) {
      fVar10 = *param_5;
      fVar11 = *param_6;
      if (0 < param_3) {
        lVar4 = 0;
        do {
          lVar9 = lrintf(fVar10 + *(float *)(param_1 + lVar4 * 4) * fVar11);
          cVar5 = (char)lVar9;
          if (0xff < (uint)lVar9) {
            cVar5 = -(0 < (int)(uint)lVar9);
          }
          *(char *)(param_2 + lVar4) = cVar5;
          lVar4 = lVar4 + 1;
        } while (lVar4 != (ulong)(param_3 - 1) + 1);
      }
    }
    else if (0 < param_3) {
      iVar8 = 0;
      do {
        if (0 < param_4) {
          lVar4 = 0;
          do {
            lVar9 = lrintf(param_5[lVar4] + param_6[lVar4] * *(float *)(param_1 + lVar4 * 4));
            cVar5 = (char)lVar9;
            if (0xff < (uint)lVar9) {
              cVar5 = -(0 < (int)(uint)lVar9);
            }
            *(char *)(param_2 + lVar4) = cVar5;
            lVar4 = lVar4 + 1;
          } while (lVar4 != (ulong)(param_4 - 1) + 1);
        }
        iVar8 = iVar8 + 1;
        param_1 = param_1 + (long)param_4 * 4;
        param_2 = param_2 + param_4;
      } while (iVar8 != param_3);
    }
  }
  else if (0 < param_3) {
    lVar4 = (long)param_4;
    iVar8 = 0;
    do {
      if (0 < param_4) {
        lVar9 = 0;
        pfVar7 = param_6;
        do {
          fVar10 = param_5[lVar9];
          lVar6 = 0;
          do {
            lVar1 = lVar6 * 4;
            pfVar2 = pfVar7 + lVar6;
            lVar6 = lVar6 + 1;
            fVar10 = fVar10 + *pfVar2 * *(float *)(param_1 + lVar1);
          } while ((int)lVar6 < param_4);
          lVar6 = lrintf(fVar10);
          uVar3 = (uint)lVar6;
          if (0xff < uVar3) {
            uVar3 = -(uint)(0 < (int)uVar3);
          }
          *(char *)(param_2 + lVar9) = (char)uVar3;
          lVar9 = lVar9 + 1;
          pfVar7 = pfVar7 + lVar4;
        } while (lVar9 != (ulong)(param_4 - 1) + 1);
      }
      iVar8 = iVar8 + 1;
      param_1 = param_1 + lVar4 * 4;
      param_2 = param_2 + lVar4;
    } while (iVar8 != param_3);
  }
  return;
}


==================================================================

### FUNC 003c5820 (456 bytes) name=FUN_003c5820

void FUN_003c5820(uint *param_1,ulong *param_2)

{
  long lVar1;
  undefined1 uVar2;
  uint uVar3;
  undefined4 uVar4;
  undefined2 uVar5;
  ulong uVar6;
  char *pcVar7;
  uint uVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  uint uVar15;
  uint uVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar15 = param_1[2];
    uVar12 = param_1[3];
    uVar16 = uVar12 * uVar15;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c5950:
      lVar9 = *(long *)(param_1 + 4);
      lVar10 = *(long *)(param_1 + 0x14);
      if ((int)uVar15 < 1) {
        return;
      }
      lVar14 = 0;
      lVar13 = lVar9;
      while( true ) {
        lVar11 = 0;
        lVar13 = lVar13 + lVar14 * **(long **)(param_1 + 0x12);
        if (0 < (int)uVar12) {
          do {
            uVar6 = (*param_2 >> 0x20) + (*param_2 & 0xffffffff) * 0xf83f630a;
            *param_2 = uVar6;
            uVar3 = 0;
            uVar8 = (uint)uVar6;
            if (uVar16 != 0) {
              uVar3 = uVar8 / uVar16;
            }
            uVar2 = *(undefined1 *)(lVar13 + lVar11);
            uVar8 = uVar8 - uVar3 * uVar16;
            uVar3 = 0;
            if (uVar12 != 0) {
              uVar3 = uVar8 / uVar12;
            }
            lVar1 = (int)uVar3 * lVar10 + (long)(int)(uVar8 - uVar3 * uVar12);
            *(undefined1 *)(lVar13 + lVar11) = *(undefined1 *)(lVar9 + lVar1);
            lVar11 = lVar11 + 1;
            *(undefined1 *)(lVar9 + lVar1) = uVar2;
          } while ((int)lVar11 < (int)uVar12);
        }
        lVar14 = lVar14 + 1;
        if ((int)uVar15 <= (int)lVar14) break;
        lVar13 = *(long *)(param_1 + 4);
      }
      return;
    }
  }
  else {
    uVar16 = 1;
    lVar9 = 0;
    do {
      lVar10 = lVar9 * 4;
      lVar9 = lVar9 + 1;
      uVar16 = uVar16 * *(int *)(*(long *)(param_1 + 0x10) + lVar10);
    } while ((int)lVar9 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar7 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar5 = s__arr_dims_<__2_004774e0._12_2_;
      uVar4 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar7 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar7 + 8) = uVar4;
      *(undefined2 *)(pcVar7 + 0xc) = uVar5;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = unsigned char]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar15 = param_1[2];
      uVar12 = param_1[3];
      goto LAB_003c5950;
    }
  }
  lVar10 = *(long *)(param_1 + 4);
  lVar9 = 0;
  if (uVar16 != 0) {
    do {
      uVar6 = (*param_2 >> 0x20) + (*param_2 & 0xffffffff) * 0xf83f630a;
      *param_2 = uVar6;
      uVar15 = 0;
      uVar12 = (uint)uVar6;
      if (uVar16 != 0) {
        uVar15 = uVar12 / uVar16;
      }
      uVar6 = (ulong)(uVar12 - uVar15 * uVar16);
      uVar2 = *(undefined1 *)(lVar10 + uVar6);
      *(undefined1 *)(lVar10 + uVar6) = *(undefined1 *)(lVar10 + lVar9);
      *(undefined1 *)(lVar10 + lVar9) = uVar2;
      lVar9 = lVar9 + 1;
    } while ((uint)lVar9 < uVar16);
  }
  return;
}


==================================================================

### FUNC 003c59fc (476 bytes) name=FUN_003c59fc

void FUN_003c59fc(uint *param_1,ulong *param_2)

{
  long lVar1;
  long lVar2;
  undefined2 uVar3;
  uint uVar4;
  uint uVar5;
  undefined4 uVar6;
  ulong uVar7;
  char *pcVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  uint uVar13;
  uint uVar14;
  long *plVar15;
  uint uVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar14 = param_1[2];
    uVar13 = param_1[3];
    uVar16 = uVar13 * uVar14;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c5b30:
      lVar11 = *(long *)(param_1 + 4);
      lVar10 = *(long *)(param_1 + 0x14);
      if ((int)uVar14 < 1) {
        return;
      }
      plVar15 = *(long **)(param_1 + 0x12);
      lVar9 = 0;
      do {
        if (0 < (int)uVar13) {
          uVar7 = *param_2;
          lVar12 = 0;
          lVar2 = lVar11 + lVar9 * *plVar15;
          do {
            uVar3 = *(undefined2 *)(lVar2 + lVar12 * 2);
            uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
            uVar4 = 0;
            if (uVar16 != 0) {
              uVar4 = (uint)uVar7 / uVar16;
            }
            uVar4 = (uint)uVar7 - uVar4 * uVar16;
            uVar5 = 0;
            if (uVar13 != 0) {
              uVar5 = uVar4 / uVar13;
            }
            lVar1 = (int)uVar5 * lVar10 + (long)(int)(uVar4 - uVar5 * uVar13) * 2;
            *(undefined2 *)(lVar2 + lVar12 * 2) = *(undefined2 *)(lVar11 + lVar1);
            lVar12 = lVar12 + 1;
            *(undefined2 *)(lVar11 + lVar1) = uVar3;
          } while ((int)lVar12 < (int)uVar13);
          *param_2 = uVar7;
        }
        lVar9 = lVar9 + 1;
      } while ((int)lVar9 < (int)uVar14);
      return;
    }
  }
  else {
    lVar11 = 0;
    uVar16 = 1;
    do {
      lVar10 = lVar11 * 4;
      lVar11 = lVar11 + 1;
      uVar16 = uVar16 * *(int *)(*(long *)(param_1 + 0x10) + lVar10);
    } while ((int)lVar11 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar8 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar3 = s__arr_dims_<__2_004774e0._12_2_;
      uVar6 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar8 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar8 + 8) = uVar6;
      *(undefined2 *)(pcVar8 + 0xc) = uVar3;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = short unsigned int]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar14 = param_1[2];
      uVar13 = param_1[3];
      goto LAB_003c5b30;
    }
  }
  lVar11 = *(long *)(param_1 + 4);
  if (uVar16 != 0) {
    uVar7 = *param_2;
    lVar10 = 0;
    do {
      uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      uVar14 = 0;
      if (uVar16 != 0) {
        uVar14 = (uint)uVar7 / uVar16;
      }
      lVar9 = (ulong)((uint)uVar7 - uVar14 * uVar16) * 2;
      uVar3 = *(undefined2 *)(lVar11 + lVar9);
      *(undefined2 *)(lVar11 + lVar9) = *(undefined2 *)(lVar11 + lVar10 * 2);
      *(undefined2 *)(lVar11 + lVar10 * 2) = uVar3;
      lVar10 = lVar10 + 1;
    } while ((uint)lVar10 < uVar16);
    *param_2 = uVar7;
  }
  return;
}


==================================================================

### FUNC 003c5bec (476 bytes) name=FUN_003c5bec

void FUN_003c5bec(uint *param_1,ulong *param_2)

{
  long lVar1;
  long lVar2;
  undefined4 uVar3;
  uint uVar4;
  uint uVar5;
  undefined2 uVar6;
  ulong uVar7;
  char *pcVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  uint uVar13;
  uint uVar14;
  long *plVar15;
  uint uVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar14 = param_1[2];
    uVar13 = param_1[3];
    uVar16 = uVar13 * uVar14;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c5d20:
      lVar11 = *(long *)(param_1 + 4);
      lVar10 = *(long *)(param_1 + 0x14);
      if ((int)uVar14 < 1) {
        return;
      }
      plVar15 = *(long **)(param_1 + 0x12);
      lVar9 = 0;
      do {
        if (0 < (int)uVar13) {
          uVar7 = *param_2;
          lVar12 = 0;
          lVar2 = lVar11 + lVar9 * *plVar15;
          do {
            uVar3 = *(undefined4 *)(lVar2 + lVar12 * 4);
            uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
            uVar4 = 0;
            if (uVar16 != 0) {
              uVar4 = (uint)uVar7 / uVar16;
            }
            uVar4 = (uint)uVar7 - uVar4 * uVar16;
            uVar5 = 0;
            if (uVar13 != 0) {
              uVar5 = uVar4 / uVar13;
            }
            lVar1 = (int)uVar5 * lVar10 + (long)(int)(uVar4 - uVar5 * uVar13) * 4;
            *(undefined4 *)(lVar2 + lVar12 * 4) = *(undefined4 *)(lVar11 + lVar1);
            lVar12 = lVar12 + 1;
            *(undefined4 *)(lVar11 + lVar1) = uVar3;
          } while ((int)lVar12 < (int)uVar13);
          *param_2 = uVar7;
        }
        lVar9 = lVar9 + 1;
      } while ((int)lVar9 < (int)uVar14);
      return;
    }
  }
  else {
    lVar11 = 0;
    uVar16 = 1;
    do {
      lVar10 = lVar11 * 4;
      lVar11 = lVar11 + 1;
      uVar16 = uVar16 * *(int *)(*(long *)(param_1 + 0x10) + lVar10);
    } while ((int)lVar11 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar8 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar6 = s__arr_dims_<__2_004774e0._12_2_;
      uVar3 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar8 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar8 + 8) = uVar3;
      *(undefined2 *)(pcVar8 + 0xc) = uVar6;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = int]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar14 = param_1[2];
      uVar13 = param_1[3];
      goto LAB_003c5d20;
    }
  }
  lVar11 = *(long *)(param_1 + 4);
  if (uVar16 != 0) {
    uVar7 = *param_2;
    lVar10 = 0;
    do {
      uVar7 = (uVar7 >> 0x20) + (uVar7 & 0xffffffff) * 0xf83f630a;
      uVar14 = 0;
      if (uVar16 != 0) {
        uVar14 = (uint)uVar7 / uVar16;
      }
      lVar9 = (ulong)((uint)uVar7 - uVar14 * uVar16) * 4;
      uVar3 = *(undefined4 *)(lVar11 + lVar9);
      *(undefined4 *)(lVar11 + lVar9) = *(undefined4 *)(lVar11 + lVar10 * 4);
      *(undefined4 *)(lVar11 + lVar10 * 4) = uVar3;
      lVar10 = lVar10 + 1;
    } while ((uint)lVar10 < uVar16);
    *param_2 = uVar7;
  }
  return;
}


==================================================================

### FUNC 003c5ddc (556 bytes) name=FUN_003c5ddc

void FUN_003c5ddc(uint *param_1,ulong *param_2)

{
  undefined2 *puVar1;
  long lVar2;
  undefined1 uVar3;
  undefined1 uVar4;
  undefined1 uVar5;
  uint uVar6;
  undefined4 uVar7;
  undefined2 uVar8;
  char *pcVar9;
  long lVar10;
  uint uVar11;
  undefined2 *puVar12;
  ulong uVar13;
  long lVar14;
  long lVar15;
  uint uVar16;
  undefined2 *puVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  uint uVar21;
  uint uVar22;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar21 = param_1[2];
    uVar11 = param_1[3];
    uVar22 = uVar11 * uVar21;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c5f3c:
      lVar10 = *(long *)(param_1 + 4);
      lVar19 = *(long *)(param_1 + 0x14);
      if ((int)uVar21 < 1) {
        return;
      }
      lVar20 = 0;
      lVar18 = lVar10;
      while( true ) {
        lVar15 = **(long **)(param_1 + 0x12);
        if (0 < (int)uVar11) {
          puVar17 = (undefined2 *)(lVar18 + lVar20 * lVar15);
          do {
            puVar12 = (undefined2 *)((long)puVar17 + 3);
            uVar13 = (*param_2 >> 0x20) + (*param_2 & 0xffffffff) * 0xf83f630a;
            *param_2 = uVar13;
            uVar6 = 0;
            uVar16 = (uint)uVar13;
            if (uVar22 != 0) {
              uVar6 = uVar16 / uVar22;
            }
            uVar3 = *(undefined1 *)puVar17;
            uVar4 = *(undefined1 *)((long)puVar17 + 1);
            uVar5 = *(undefined1 *)(puVar17 + 1);
            uVar16 = uVar16 - uVar6 * uVar22;
            uVar6 = 0;
            if (uVar11 != 0) {
              uVar6 = uVar16 / uVar11;
            }
            lVar14 = (int)uVar6 * lVar19 + (long)(int)(uVar16 - uVar6 * uVar11) * 3;
            lVar2 = lVar10 + lVar14;
            *puVar17 = *(undefined2 *)(lVar10 + lVar14);
            *(undefined1 *)(puVar17 + 1) = *(undefined1 *)(lVar2 + 2);
            *(undefined1 *)(lVar10 + lVar14) = uVar3;
            *(undefined1 *)(lVar2 + 1) = uVar4;
            *(undefined1 *)(lVar2 + 2) = uVar5;
            puVar17 = puVar12;
          } while (puVar12 != (undefined2 *)(lVar18 + (ulong)(uVar11 - 1) * 3 + 3 + lVar20 * lVar15)
                  );
        }
        lVar20 = lVar20 + 1;
        if ((int)uVar21 <= (int)lVar20) break;
        lVar18 = *(long *)(param_1 + 4);
      }
      return;
    }
  }
  else {
    uVar22 = 1;
    lVar10 = 0;
    do {
      lVar19 = lVar10 * 4;
      lVar10 = lVar10 + 1;
      uVar22 = uVar22 * *(int *)(*(long *)(param_1 + 0x10) + lVar19);
    } while ((int)lVar10 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar9 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar8 = s__arr_dims_<__2_004774e0._12_2_;
      uVar7 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar9 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar9 + 8) = uVar7;
      *(undefined2 *)(pcVar9 + 0xc) = uVar8;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<unsigned char, 3>]"
                ,"/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar21 = param_1[2];
      uVar11 = param_1[3];
      goto LAB_003c5f3c;
    }
  }
  puVar17 = *(undefined2 **)(param_1 + 4);
  if (uVar22 != 0) {
    puVar12 = puVar17;
    do {
      puVar1 = (undefined2 *)((long)puVar12 + 3);
      uVar13 = (*param_2 >> 0x20) + (*param_2 & 0xffffffff) * 0xf83f630a;
      *param_2 = uVar13;
      uVar21 = 0;
      uVar11 = (uint)uVar13;
      if (uVar22 != 0) {
        uVar21 = uVar11 / uVar22;
      }
      lVar10 = (ulong)(uVar11 - uVar21 * uVar22) * 3;
      uVar5 = *(undefined1 *)((long)puVar17 + lVar10);
      uVar3 = *(undefined1 *)((long)puVar17 + lVar10 + 2);
      uVar4 = *(undefined1 *)((long)puVar17 + lVar10 + 1);
      *(undefined2 *)((long)puVar17 + lVar10) = *puVar12;
      *(undefined1 *)((long)puVar17 + lVar10 + 2) = *(undefined1 *)(puVar12 + 1);
      *(undefined1 *)puVar12 = uVar5;
      *(undefined1 *)((long)puVar12 + 1) = uVar4;
      *(undefined1 *)(puVar12 + 1) = uVar3;
      puVar12 = puVar1;
    } while (puVar1 != (undefined2 *)((long)puVar17 + ((ulong)(uVar22 - 1) + 1) * 3));
  }
  return;
}


==================================================================

### FUNC 003c601c (564 bytes) name=FUN_003c601c

void FUN_003c601c(uint *param_1,ulong *param_2)

{
  undefined4 *puVar1;
  long lVar2;
  undefined4 uVar3;
  undefined2 uVar4;
  undefined2 uVar5;
  undefined2 uVar6;
  uint uVar7;
  uint uVar8;
  long lVar9;
  char *pcVar10;
  long lVar11;
  undefined4 *puVar12;
  ulong uVar13;
  long lVar14;
  undefined4 *puVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  uint uVar19;
  long *plVar20;
  uint uVar21;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar19 = param_1[2];
    uVar16 = param_1[3];
    uVar21 = uVar16 * uVar19;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c617c:
      lVar9 = *(long *)(param_1 + 4);
      lVar17 = *(long *)(param_1 + 0x14);
      if ((int)uVar19 < 1) {
        return;
      }
      plVar20 = *(long **)(param_1 + 0x12);
      lVar18 = 0;
      do {
        lVar14 = *plVar20;
        if (0 < (int)uVar16) {
          uVar13 = *param_2;
          puVar15 = (undefined4 *)(lVar9 + lVar18 * lVar14);
          do {
            uVar4 = *(undefined2 *)puVar15;
            puVar12 = (undefined4 *)((long)puVar15 + 6);
            uVar13 = (uVar13 >> 0x20) + (uVar13 & 0xffffffff) * 0xf83f630a;
            uVar5 = *(undefined2 *)((long)puVar15 + 2);
            uVar7 = 0;
            if (uVar21 != 0) {
              uVar7 = (uint)uVar13 / uVar21;
            }
            *param_2 = uVar13;
            uVar6 = *(undefined2 *)(puVar15 + 1);
            uVar7 = (uint)uVar13 - uVar7 * uVar21;
            uVar8 = 0;
            if (uVar16 != 0) {
              uVar8 = uVar7 / uVar16;
            }
            lVar11 = (int)uVar8 * lVar17 + (long)(int)(uVar7 - uVar8 * uVar16) * 6;
            lVar2 = lVar9 + lVar11;
            *puVar15 = *(undefined4 *)(lVar9 + lVar11);
            *(undefined2 *)(puVar15 + 1) = *(undefined2 *)(lVar2 + 4);
            *(undefined2 *)(lVar9 + lVar11) = uVar4;
            *(undefined2 *)(lVar2 + 2) = uVar5;
            *(undefined2 *)(lVar2 + 4) = uVar6;
            puVar15 = puVar12;
          } while (puVar12 != (undefined4 *)(lVar9 + (ulong)(uVar16 - 1) * 6 + 6 + lVar18 * lVar14))
          ;
        }
        lVar18 = lVar18 + 1;
      } while ((int)lVar18 < (int)uVar19);
      return;
    }
  }
  else {
    lVar9 = 0;
    uVar21 = 1;
    do {
      lVar17 = lVar9 * 4;
      lVar9 = lVar9 + 1;
      uVar21 = uVar21 * *(int *)(*(long *)(param_1 + 0x10) + lVar17);
    } while ((int)lVar9 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar4 = s__arr_dims_<__2_004774e0._12_2_;
      uVar3 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar10 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar10 + 8) = uVar3;
      *(undefined2 *)(pcVar10 + 0xc) = uVar4;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<short unsigned int, 3>]"
                ,"/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar19 = param_1[2];
      uVar16 = param_1[3];
      goto LAB_003c617c;
    }
  }
  puVar15 = *(undefined4 **)(param_1 + 4);
  if (uVar21 != 0) {
    uVar13 = *param_2;
    puVar12 = puVar15;
    do {
      uVar3 = *puVar12;
      puVar1 = (undefined4 *)((long)puVar12 + 6);
      uVar13 = (uVar13 >> 0x20) + (uVar13 & 0xffffffff) * 0xf83f630a;
      *param_2 = uVar13;
      uVar19 = 0;
      if (uVar21 != 0) {
        uVar19 = (uint)uVar13 / uVar21;
      }
      lVar9 = (ulong)((uint)uVar13 - uVar19 * uVar21) * 6;
      uVar6 = *(undefined2 *)((long)puVar15 + lVar9);
      uVar4 = *(undefined2 *)((long)puVar15 + lVar9 + 4);
      uVar5 = *(undefined2 *)((long)puVar15 + lVar9 + 2);
      *(undefined4 *)((long)puVar15 + lVar9) = uVar3;
      *(undefined2 *)((long)puVar15 + lVar9 + 4) = *(undefined2 *)(puVar12 + 1);
      *(undefined2 *)puVar12 = uVar6;
      *(undefined2 *)((long)puVar12 + 2) = uVar5;
      *(undefined2 *)(puVar12 + 1) = uVar4;
      puVar12 = puVar1;
    } while (puVar1 != (undefined4 *)((long)puVar15 + ((ulong)(uVar21 - 1) + 1) * 6));
  }
  return;
}


==================================================================

### FUNC 003c6264 (520 bytes) name=FUN_003c6264

void FUN_003c6264(uint *param_1,ulong *param_2)

{
  long lVar1;
  undefined8 *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  uint uVar5;
  uint uVar6;
  undefined2 uVar7;
  ulong uVar8;
  char *pcVar9;
  ulong uVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  long lVar13;
  undefined8 uVar14;
  long lVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  uint uVar19;
  long *plVar20;
  uint uVar21;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar19 = param_1[2];
    uVar16 = param_1[3];
    uVar21 = uVar16 * uVar19;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c63ac:
      lVar15 = *(long *)(param_1 + 4);
      lVar17 = *(long *)(param_1 + 0x14);
      if ((int)uVar19 < 1) {
        return;
      }
      plVar20 = *(long **)(param_1 + 0x12);
      lVar18 = 0;
      do {
        lVar13 = *plVar20;
        if (0 < (int)uVar16) {
          uVar8 = *param_2;
          puVar12 = (undefined8 *)(lVar15 + lVar18 * lVar13);
          do {
            uVar3 = *(undefined4 *)puVar12;
            uVar8 = (uVar8 >> 0x20) + (uVar8 & 0xffffffff) * 0xf83f630a;
            uVar4 = *(undefined4 *)((long)puVar12 + 4);
            *param_2 = uVar8;
            uVar5 = 0;
            if (uVar21 != 0) {
              uVar5 = (uint)uVar8 / uVar21;
            }
            uVar5 = (uint)uVar8 - uVar5 * uVar21;
            uVar6 = 0;
            if (uVar16 != 0) {
              uVar6 = uVar5 / uVar16;
            }
            lVar1 = (int)uVar6 * lVar17 + (long)(int)(uVar5 - uVar6 * uVar16) * 8;
            puVar11 = puVar12 + 1;
            *puVar12 = *(undefined8 *)(lVar15 + lVar1);
            *(undefined4 *)(lVar15 + lVar1) = uVar3;
            *(undefined4 *)(lVar15 + lVar1 + 4) = uVar4;
            puVar12 = puVar11;
          } while (puVar11 != (undefined8 *)(lVar15 + (ulong)(uVar16 - 1) * 8 + 8 + lVar18 * lVar13)
                  );
        }
        lVar18 = lVar18 + 1;
      } while ((int)lVar18 < (int)uVar19);
      return;
    }
  }
  else {
    lVar15 = 0;
    uVar21 = 1;
    do {
      lVar17 = lVar15 * 4;
      lVar15 = lVar15 + 1;
      uVar21 = uVar21 * *(int *)(*(long *)(param_1 + 0x10) + lVar17);
    } while ((int)lVar15 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar9 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar7 = s__arr_dims_<__2_004774e0._12_2_;
      uVar3 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar9 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar9 + 8) = uVar3;
      *(undefined2 *)(pcVar9 + 0xc) = uVar7;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<int, 2>]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar19 = param_1[2];
      uVar16 = param_1[3];
      goto LAB_003c63ac;
    }
  }
  puVar12 = *(undefined8 **)(param_1 + 4);
  if (uVar21 != 0) {
    uVar8 = *param_2;
    puVar11 = puVar12;
    do {
      uVar14 = *puVar11;
      puVar2 = puVar11 + 1;
      uVar8 = (uVar8 >> 0x20) + (uVar8 & 0xffffffff) * 0xf83f630a;
      *param_2 = uVar8;
      uVar19 = 0;
      if (uVar21 != 0) {
        uVar19 = (uint)uVar8 / uVar21;
      }
      uVar10 = (ulong)((uint)uVar8 - uVar19 * uVar21);
      uVar4 = *(undefined4 *)(puVar12 + uVar10);
      uVar3 = *(undefined4 *)((long)puVar12 + uVar10 * 8 + 4);
      puVar12[uVar10] = uVar14;
      *(undefined4 *)puVar11 = uVar4;
      *(undefined4 *)((long)puVar11 + 4) = uVar3;
      puVar11 = puVar2;
    } while (puVar2 != puVar12 + (ulong)(uVar21 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003c6480 (564 bytes) name=FUN_003c6480

void FUN_003c6480(uint *param_1,ulong *param_2)

{
  undefined8 *puVar1;
  long lVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  uint uVar6;
  uint uVar7;
  undefined2 uVar8;
  long lVar9;
  char *pcVar10;
  long lVar11;
  undefined8 *puVar12;
  ulong uVar13;
  long lVar14;
  undefined8 *puVar15;
  uint uVar16;
  undefined8 uVar17;
  long lVar18;
  long lVar19;
  uint uVar20;
  long *plVar21;
  uint uVar22;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar20 = param_1[2];
    uVar16 = param_1[3];
    uVar22 = uVar16 * uVar20;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c65e0:
      lVar9 = *(long *)(param_1 + 4);
      lVar18 = *(long *)(param_1 + 0x14);
      if ((int)uVar20 < 1) {
        return;
      }
      plVar21 = *(long **)(param_1 + 0x12);
      lVar19 = 0;
      do {
        lVar14 = *plVar21;
        if (0 < (int)uVar16) {
          uVar13 = *param_2;
          puVar15 = (undefined8 *)(lVar9 + lVar19 * lVar14);
          do {
            uVar3 = *(undefined4 *)puVar15;
            puVar12 = (undefined8 *)((long)puVar15 + 0xc);
            uVar13 = (uVar13 >> 0x20) + (uVar13 & 0xffffffff) * 0xf83f630a;
            uVar4 = *(undefined4 *)((long)puVar15 + 4);
            uVar6 = 0;
            if (uVar22 != 0) {
              uVar6 = (uint)uVar13 / uVar22;
            }
            *param_2 = uVar13;
            uVar5 = *(undefined4 *)(puVar15 + 1);
            uVar6 = (uint)uVar13 - uVar6 * uVar22;
            uVar7 = 0;
            if (uVar16 != 0) {
              uVar7 = uVar6 / uVar16;
            }
            lVar11 = (int)uVar7 * lVar18 + (long)(int)(uVar6 - uVar7 * uVar16) * 0xc;
            lVar2 = lVar9 + lVar11;
            *puVar15 = *(undefined8 *)(lVar9 + lVar11);
            *(undefined4 *)(puVar15 + 1) = *(undefined4 *)(lVar2 + 8);
            *(undefined4 *)(lVar9 + lVar11) = uVar3;
            *(undefined4 *)(lVar2 + 4) = uVar4;
            *(undefined4 *)(lVar2 + 8) = uVar5;
            puVar15 = puVar12;
          } while (puVar12 !=
                   (undefined8 *)(lVar9 + (ulong)(uVar16 - 1) * 0xc + 0xc + lVar19 * lVar14));
        }
        lVar19 = lVar19 + 1;
      } while ((int)lVar19 < (int)uVar20);
      return;
    }
  }
  else {
    lVar9 = 0;
    uVar22 = 1;
    do {
      lVar18 = lVar9 * 4;
      lVar9 = lVar9 + 1;
      uVar22 = uVar22 * *(int *)(*(long *)(param_1 + 0x10) + lVar18);
    } while ((int)lVar9 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar10 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar8 = s__arr_dims_<__2_004774e0._12_2_;
      uVar3 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar10 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar10 + 8) = uVar3;
      *(undefined2 *)(pcVar10 + 0xc) = uVar8;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<int, 3>]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar20 = param_1[2];
      uVar16 = param_1[3];
      goto LAB_003c65e0;
    }
  }
  puVar15 = *(undefined8 **)(param_1 + 4);
  if (uVar22 != 0) {
    uVar13 = *param_2;
    puVar12 = puVar15;
    do {
      uVar17 = *puVar12;
      puVar1 = (undefined8 *)((long)puVar12 + 0xc);
      uVar13 = (uVar13 >> 0x20) + (uVar13 & 0xffffffff) * 0xf83f630a;
      *param_2 = uVar13;
      uVar20 = 0;
      if (uVar22 != 0) {
        uVar20 = (uint)uVar13 / uVar22;
      }
      lVar9 = (ulong)((uint)uVar13 - uVar20 * uVar22) * 0xc;
      uVar5 = *(undefined4 *)((long)puVar15 + lVar9);
      uVar3 = *(undefined4 *)((long)puVar15 + lVar9 + 8);
      uVar4 = *(undefined4 *)((long)puVar15 + lVar9 + 4);
      *(undefined8 *)((long)puVar15 + lVar9) = uVar17;
      *(undefined4 *)((long)puVar15 + lVar9 + 8) = *(undefined4 *)(puVar12 + 1);
      *(undefined4 *)puVar12 = uVar5;
      *(undefined4 *)((long)puVar12 + 4) = uVar4;
      *(undefined4 *)(puVar12 + 1) = uVar3;
      puVar12 = puVar1;
    } while (puVar1 != (undefined8 *)((long)puVar15 + ((ulong)(uVar22 - 1) + 1) * 0xc));
  }
  return;
}


==================================================================

### FUNC 003c66c8 (556 bytes) name=FUN_003c66c8

void FUN_003c66c8(uint *param_1,ulong *param_2)

{
  long lVar1;
  undefined8 *puVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  uint uVar9;
  uint uVar10;
  undefined2 uVar11;
  undefined8 *puVar12;
  char *pcVar13;
  ulong uVar14;
  long lVar15;
  ulong uVar16;
  undefined8 *puVar17;
  long lVar18;
  undefined8 *puVar19;
  uint uVar20;
  long lVar21;
  long lVar22;
  uint uVar23;
  long *plVar24;
  uint uVar25;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar23 = param_1[2];
    uVar20 = param_1[3];
    uVar25 = uVar20 * uVar23;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c6824:
      lVar15 = *(long *)(param_1 + 4);
      lVar21 = *(long *)(param_1 + 0x14);
      if ((int)uVar23 < 1) {
        return;
      }
      plVar24 = *(long **)(param_1 + 0x12);
      lVar22 = 0;
      do {
        lVar18 = *plVar24;
        if (0 < (int)uVar20) {
          uVar14 = *param_2;
          puVar17 = (undefined8 *)(lVar15 + lVar22 * lVar18);
          do {
            uVar5 = *(undefined4 *)puVar17;
            uVar14 = (uVar14 >> 0x20) + (uVar14 & 0xffffffff) * 0xf83f630a;
            uVar6 = *(undefined4 *)((long)puVar17 + 4);
            *param_2 = uVar14;
            uVar9 = 0;
            if (uVar25 != 0) {
              uVar9 = (uint)uVar14 / uVar25;
            }
            uVar7 = *(undefined4 *)(puVar17 + 1);
            uVar8 = *(undefined4 *)((long)puVar17 + 0xc);
            uVar9 = (uint)uVar14 - uVar9 * uVar25;
            uVar10 = 0;
            if (uVar20 != 0) {
              uVar10 = uVar9 / uVar20;
            }
            lVar1 = (int)uVar10 * lVar21 + (long)(int)(uVar9 - uVar10 * uVar20) * 0x10;
            puVar12 = (undefined8 *)(lVar15 + lVar1);
            uVar3 = puVar12[1];
            puVar19 = puVar17 + 2;
            *puVar17 = *puVar12;
            puVar17[1] = uVar3;
            *(undefined4 *)(lVar15 + lVar1) = uVar5;
            *(undefined4 *)((long)puVar12 + 4) = uVar6;
            *(undefined4 *)(puVar12 + 1) = uVar7;
            *(undefined4 *)((long)puVar12 + 0xc) = uVar8;
            puVar17 = puVar19;
          } while (puVar19 !=
                   (undefined8 *)(lVar15 + (ulong)(uVar20 - 1) * 0x10 + 0x10 + lVar22 * lVar18));
        }
        lVar22 = lVar22 + 1;
      } while ((int)lVar22 < (int)uVar23);
      return;
    }
  }
  else {
    lVar15 = 0;
    uVar25 = 1;
    do {
      lVar21 = lVar15 * 4;
      lVar15 = lVar15 + 1;
      uVar25 = uVar25 * *(int *)(*(long *)(param_1 + 0x10) + lVar21);
    } while ((int)lVar15 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar13 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar11 = s__arr_dims_<__2_004774e0._12_2_;
      uVar5 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar13 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar13 + 8) = uVar5;
      *(undefined2 *)(pcVar13 + 0xc) = uVar11;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<int, 4>]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar23 = param_1[2];
      uVar20 = param_1[3];
      goto LAB_003c6824;
    }
  }
  puVar17 = *(undefined8 **)(param_1 + 4);
  if (uVar25 != 0) {
    uVar14 = *param_2;
    puVar12 = puVar17;
    do {
      uVar3 = *puVar12;
      uVar4 = puVar12[1];
      uVar14 = (uVar14 >> 0x20) + (uVar14 & 0xffffffff) * 0xf83f630a;
      puVar19 = puVar12 + 2;
      *param_2 = uVar14;
      uVar23 = 0;
      if (uVar25 != 0) {
        uVar23 = (uint)uVar14 / uVar25;
      }
      uVar16 = (ulong)((uint)uVar14 - uVar23 * uVar25);
      puVar2 = puVar17 + uVar16 * 2;
      uVar8 = *(undefined4 *)(puVar17 + uVar16 * 2);
      uVar5 = *(undefined4 *)((long)puVar2 + 4);
      uVar6 = *(undefined4 *)(puVar2 + 1);
      uVar7 = *(undefined4 *)((long)puVar2 + 0xc);
      *puVar2 = uVar3;
      puVar2[1] = uVar4;
      *(undefined4 *)puVar12 = uVar8;
      *(undefined4 *)((long)puVar12 + 4) = uVar5;
      *(undefined4 *)(puVar12 + 1) = uVar6;
      *(undefined4 *)((long)puVar12 + 0xc) = uVar7;
      puVar12 = puVar19;
    } while (puVar19 != puVar17 + ((ulong)(uVar25 - 1) + 1) * 2);
  }
  return;
}


==================================================================

### FUNC 003c6908 (620 bytes) name=FUN_003c6908

void FUN_003c6908(uint *param_1,ulong *param_2)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  uint uVar11;
  uint uVar12;
  undefined2 uVar13;
  undefined8 *puVar14;
  char *pcVar15;
  long lVar16;
  ulong uVar17;
  long lVar18;
  ulong uVar19;
  long lVar20;
  undefined8 *puVar21;
  uint uVar22;
  long lVar23;
  long lVar24;
  uint uVar25;
  uint uVar26;
  long *plVar27;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar25 = param_1[2];
    uVar22 = param_1[3];
    uVar26 = uVar22 * uVar25;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c6a84:
      lVar18 = *(long *)(param_1 + 4);
      lVar23 = *(long *)(param_1 + 0x14);
      if ((int)uVar25 < 1) {
        return;
      }
      plVar27 = *(long **)(param_1 + 0x12);
      lVar24 = 0;
      do {
        lVar16 = *plVar27;
        if (0 < (int)uVar22) {
          uVar19 = *param_2;
          puVar21 = (undefined8 *)(lVar18 + lVar24 * lVar16);
          do {
            uVar5 = *(undefined4 *)puVar21;
            uVar19 = (uVar19 >> 0x20) + (uVar19 & 0xffffffff) * 0xf83f630a;
            uVar6 = *(undefined4 *)((long)puVar21 + 4);
            *param_2 = uVar19;
            uVar11 = 0;
            if (uVar26 != 0) {
              uVar11 = (uint)uVar19 / uVar26;
            }
            uVar7 = *(undefined4 *)(puVar21 + 1);
            uVar8 = *(undefined4 *)((long)puVar21 + 0xc);
            uVar9 = *(undefined4 *)(puVar21 + 2);
            uVar10 = *(undefined4 *)((long)puVar21 + 0x14);
            uVar11 = (uint)uVar19 - uVar11 * uVar26;
            uVar12 = 0;
            if (uVar22 != 0) {
              uVar12 = uVar11 / uVar22;
            }
            lVar20 = (int)uVar12 * lVar23 + (long)(int)(uVar11 - uVar12 * uVar22) * 0x18;
            puVar2 = (undefined8 *)(lVar18 + lVar20);
            uVar3 = puVar2[1];
            *puVar21 = *puVar2;
            puVar21[1] = uVar3;
            puVar14 = puVar21 + 3;
            puVar21[2] = puVar2[2];
            *(undefined4 *)(lVar18 + lVar20) = uVar5;
            *(undefined4 *)((long)puVar2 + 4) = uVar6;
            *(undefined4 *)(puVar2 + 1) = uVar7;
            *(undefined4 *)((long)puVar2 + 0xc) = uVar8;
            *(undefined4 *)(puVar2 + 2) = uVar9;
            *(undefined4 *)((long)puVar2 + 0x14) = uVar10;
            puVar21 = puVar14;
          } while (puVar14 !=
                   (undefined8 *)(lVar18 + (ulong)(uVar22 - 1) * 0x18 + 0x18 + lVar24 * lVar16));
        }
        lVar24 = lVar24 + 1;
      } while ((int)lVar24 < (int)uVar25);
      return;
    }
  }
  else {
    lVar18 = 0;
    uVar26 = 1;
    do {
      lVar23 = lVar18 * 4;
      lVar18 = lVar18 + 1;
      uVar26 = uVar26 * *(int *)(*(long *)(param_1 + 0x10) + lVar23);
    } while ((int)lVar18 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar15 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar13 = s__arr_dims_<__2_004774e0._12_2_;
      uVar5 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar15 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar15 + 8) = uVar5;
      *(undefined2 *)(pcVar15 + 0xc) = uVar13;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<int, 6>]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar25 = param_1[2];
      uVar22 = param_1[3];
      goto LAB_003c6a84;
    }
  }
  puVar21 = *(undefined8 **)(param_1 + 4);
  if (uVar26 != 0) {
    uVar19 = *param_2;
    puVar14 = puVar21;
    do {
      uVar3 = *puVar14;
      uVar4 = puVar14[1];
      uVar19 = (uVar19 >> 0x20) + (uVar19 & 0xffffffff) * 0xf83f630a;
      puVar2 = puVar14 + 3;
      *param_2 = uVar19;
      uVar25 = 0;
      if (uVar26 != 0) {
        uVar25 = (uint)uVar19 / uVar26;
      }
      uVar17 = (ulong)((uint)uVar19 - uVar25 * uVar26);
      puVar1 = puVar21 + uVar17 * 3;
      uVar10 = *(undefined4 *)(puVar21 + uVar17 * 3);
      uVar5 = *(undefined4 *)((long)puVar1 + 4);
      uVar6 = *(undefined4 *)(puVar1 + 1);
      uVar7 = *(undefined4 *)((long)puVar1 + 0xc);
      *puVar1 = uVar3;
      puVar1[1] = uVar4;
      uVar8 = *(undefined4 *)(puVar1 + 2);
      uVar9 = *(undefined4 *)((long)puVar1 + 0x14);
      puVar1[2] = puVar14[2];
      *(undefined4 *)puVar14 = uVar10;
      *(undefined4 *)((long)puVar14 + 4) = uVar5;
      *(undefined4 *)(puVar14 + 1) = uVar6;
      *(undefined4 *)((long)puVar14 + 0xc) = uVar7;
      *(undefined4 *)(puVar14 + 2) = uVar8;
      *(undefined4 *)((long)puVar14 + 0x14) = uVar9;
      puVar14 = puVar2;
    } while (puVar2 != puVar21 + ((ulong)(uVar26 - 1) + 1) * 3);
  }
  return;
}


==================================================================

### FUNC 003c6b88 (652 bytes) name=FUN_003c6b88

void FUN_003c6b88(uint *param_1,ulong *param_2)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  undefined4 uVar11;
  undefined4 uVar12;
  uint uVar13;
  uint uVar14;
  undefined2 uVar15;
  undefined8 *puVar16;
  char *pcVar17;
  long lVar18;
  long lVar19;
  ulong uVar20;
  ulong uVar21;
  long lVar22;
  undefined8 *puVar23;
  uint uVar24;
  long lVar25;
  uint uVar26;
  long lVar27;
  uint uVar28;
  long *plVar29;
  undefined8 local_10;
  undefined8 local_8;
  
  if ((int)param_1[1] < 3) {
    uVar28 = param_1[2];
    uVar24 = param_1[3];
    uVar26 = uVar24 * uVar28;
    if ((*param_1 >> 0xe & 1) == 0) {
LAB_003c6d14:
      lVar19 = *(long *)(param_1 + 4);
      lVar25 = *(long *)(param_1 + 0x14);
      if ((int)uVar28 < 1) {
        return;
      }
      plVar29 = *(long **)(param_1 + 0x12);
      lVar27 = 0;
      do {
        lVar18 = *plVar29;
        if (0 < (int)uVar24) {
          uVar20 = *param_2;
          puVar23 = (undefined8 *)(lVar19 + lVar27 * lVar18);
          do {
            uVar5 = *(undefined4 *)puVar23;
            puVar16 = puVar23 + 4;
            uVar20 = (uVar20 >> 0x20) + (uVar20 & 0xffffffff) * 0xf83f630a;
            uVar6 = *(undefined4 *)((long)puVar23 + 4);
            uVar13 = 0;
            if (uVar26 != 0) {
              uVar13 = (uint)uVar20 / uVar26;
            }
            *param_2 = uVar20;
            uVar7 = *(undefined4 *)(puVar23 + 1);
            uVar8 = *(undefined4 *)((long)puVar23 + 0xc);
            uVar9 = *(undefined4 *)(puVar23 + 2);
            uVar10 = *(undefined4 *)((long)puVar23 + 0x14);
            uVar11 = *(undefined4 *)(puVar23 + 3);
            uVar12 = *(undefined4 *)((long)puVar23 + 0x1c);
            uVar13 = (uint)uVar20 - uVar13 * uVar26;
            uVar14 = 0;
            if (uVar24 != 0) {
              uVar14 = uVar13 / uVar24;
            }
            lVar22 = (int)uVar14 * lVar25 + (long)(int)(uVar13 - uVar14 * uVar24) * 0x20;
            puVar2 = (undefined8 *)(lVar19 + lVar22);
            uVar3 = puVar2[1];
            *puVar23 = *puVar2;
            puVar23[1] = uVar3;
            uVar3 = puVar2[3];
            puVar23[2] = puVar2[2];
            puVar23[3] = uVar3;
            *(undefined4 *)(lVar19 + lVar22) = uVar5;
            *(undefined4 *)((long)puVar2 + 4) = uVar6;
            *(undefined4 *)(puVar2 + 1) = uVar7;
            *(undefined4 *)((long)puVar2 + 0xc) = uVar8;
            *(undefined4 *)(puVar2 + 2) = uVar9;
            *(undefined4 *)((long)puVar2 + 0x14) = uVar10;
            *(undefined4 *)(puVar2 + 3) = uVar11;
            *(undefined4 *)((long)puVar2 + 0x1c) = uVar12;
            puVar23 = puVar16;
          } while (puVar16 !=
                   (undefined8 *)(lVar19 + (ulong)(uVar24 - 1) * 0x20 + 0x20 + lVar27 * lVar18));
        }
        lVar27 = lVar27 + 1;
      } while ((int)lVar27 < (int)uVar28);
      return;
    }
  }
  else {
    lVar19 = 0;
    uVar26 = 1;
    do {
      lVar25 = lVar19 * 4;
      lVar19 = lVar19 + 1;
      uVar26 = uVar26 * *(int *)(*(long *)(param_1 + 0x10) + lVar25);
    } while ((int)lVar19 < (int)param_1[1]);
    if ((*param_1 >> 0xe & 1) == 0) {
      local_10 = 0;
      local_8 = 0;
      pcVar17 = (char *)cv::String::allocate((String *)&local_10,0xe);
      uVar15 = s__arr_dims_<__2_004774e0._12_2_;
      uVar5 = s__arr_dims_<__2_004774e0._8_4_;
      *(undefined8 *)pcVar17 = s__arr_dims_<__2_004774e0._0_8_;
      *(undefined4 *)(pcVar17 + 8) = uVar5;
      *(undefined2 *)(pcVar17 + 0xc) = uVar15;
      cv::error(-0xd7,(String *)&local_10,
                "void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = cv::Vec<int, 8>]",
                "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x2fd);
      cv::String::deallocate((String *)&local_10);
      uVar28 = param_1[2];
      uVar24 = param_1[3];
      goto LAB_003c6d14;
    }
  }
  puVar23 = *(undefined8 **)(param_1 + 4);
  if (uVar26 != 0) {
    uVar20 = *param_2;
    puVar16 = puVar23;
    do {
      uVar3 = *puVar16;
      uVar4 = puVar16[1];
      uVar20 = (uVar20 >> 0x20) + (uVar20 & 0xffffffff) * 0xf83f630a;
      puVar2 = puVar16 + 4;
      *param_2 = uVar20;
      uVar28 = 0;
      if (uVar26 != 0) {
        uVar28 = (uint)uVar20 / uVar26;
      }
      uVar21 = (ulong)((uint)uVar20 - uVar28 * uVar26);
      puVar1 = puVar23 + uVar21 * 4;
      uVar12 = *(undefined4 *)(puVar23 + uVar21 * 4);
      uVar5 = *(undefined4 *)((long)puVar1 + 4);
      uVar6 = *(undefined4 *)(puVar1 + 1);
      uVar7 = *(undefined4 *)((long)puVar1 + 0xc);
      *puVar1 = uVar3;
      puVar1[1] = uVar4;
      uVar8 = *(undefined4 *)(puVar1 + 2);
      uVar3 = puVar16[3];
      uVar9 = *(undefined4 *)((long)puVar1 + 0x14);
      uVar10 = *(undefined4 *)(puVar1 + 3);
      uVar11 = *(undefined4 *)((long)puVar1 + 0x1c);
      puVar1[2] = puVar16[2];
      puVar1[3] = uVar3;
      *(undefined4 *)puVar16 = uVar12;
      *(undefined4 *)((long)puVar16 + 4) = uVar5;
      *(undefined4 *)(puVar16 + 1) = uVar6;
      *(undefined4 *)((long)puVar16 + 0xc) = uVar7;
      *(undefined4 *)(puVar16 + 2) = uVar8;
      *(undefined4 *)((long)puVar16 + 0x14) = uVar9;
      *(undefined4 *)(puVar16 + 3) = uVar10;
      *(undefined4 *)((long)puVar16 + 0x1c) = uVar11;
      puVar16 = puVar2;
    } while (puVar2 != puVar23 + ((ulong)(uVar26 - 1) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003c6e28 (476 bytes) name=Mat

/* cv::Mat::Mat(cv::Size_<int>, int, void*, unsigned long) */

void __thiscall cv::Mat::Mat(Mat *this,int *param_2,ulong param_3,long param_4,ulong param_5)

{
  int iVar1;
  int iVar2;
  ulong uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined4 uVar6;
  undefined2 uVar7;
  char cVar8;
  int iVar9;
  char *pcVar10;
  uint uVar11;
  ulong uVar12;
  uint uVar13;
  long lVar14;
  Mat *pMVar15;
  ulong uVar16;
  undefined8 local_10;
  undefined8 local_8;
  
  uVar11 = (uint)param_3 & 7;
  uVar13 = ((uint)param_3 & 0xfff) + 0x42ff0000;
  iVar1 = *param_2;
  iVar9 = param_2[1];
  pMVar15 = this + 0x50;
  *(undefined4 *)(this + 4) = 2;
  *(int *)(this + 0xc) = iVar1;
  iVar2 = ((uint)(param_3 >> 3) & 0x1ff) + 1 << (ulong)((uint)(0xfa50L >> (uVar11 << 1)) & 3);
  *(uint *)this = uVar13;
  *(int *)(this + 8) = iVar9;
  *(long *)(this + 0x10) = param_4;
  *(long *)(this + 0x18) = param_4;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x28) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(Mat **)(this + 0x40) = this + 8;
  *(Mat **)(this + 0x48) = pMVar15;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  uVar16 = (long)iVar2 * (long)iVar1;
  if (param_5 == 0) {
    *(uint *)this = uVar13 | 0x4000;
    lVar14 = 0;
    goto LAB_003c6f08;
  }
  uVar12 = 0x88442211UL >> (uVar11 << 2) & 0xf;
  if (iVar9 == 1) {
    uVar3 = 0;
    if (uVar12 != 0) {
      uVar3 = uVar16 / uVar12;
    }
    param_5 = uVar16;
    if (uVar16 - uVar3 * uVar12 != 0) goto LAB_003c6f54;
LAB_003c6ff4:
    lVar14 = 0;
    uVar11 = 0x4000;
  }
  else {
    uVar3 = 0;
    if (uVar12 != 0) {
      uVar3 = param_5 / uVar12;
    }
    if (param_5 != uVar3 * uVar12) {
LAB_003c6f54:
      local_10 = 0;
      local_8 = 0;
      pcVar10 = (char *)String::allocate((String *)&local_10,0x1f);
      cVar8 = s_Step_must_be_a_multiple_of_esz1_00467cf0[0x1e];
      uVar7 = s_Step_must_be_a_multiple_of_esz1_00467cf0._28_2_;
      uVar6 = s_Step_must_be_a_multiple_of_esz1_00467cf0._24_4_;
      uVar5 = s_Step_must_be_a_multiple_of_esz1_00467cf0._8_8_;
      uVar4 = s_Step_must_be_a_multiple_of_esz1_00467cf0._0_8_;
      *(undefined8 *)(pcVar10 + 0x10) = s_Step_must_be_a_multiple_of_esz1_00467cf0._16_8_;
      *(undefined4 *)(pcVar10 + 0x18) = uVar6;
      *(undefined2 *)(pcVar10 + 0x1c) = uVar7;
      pcVar10[0x1e] = cVar8;
      *(undefined8 *)pcVar10 = uVar4;
      *(undefined8 *)(pcVar10 + 8) = uVar5;
      error(-0xd,(String *)&local_10,"cv::Mat::Mat(cv::Size, int, void*, size_t)",
            "/builds/master_pack-android/opencv/modules/core/include/opencv2/core/mat.inl.hpp",0x1bc
           );
      String::deallocate((String *)&local_10);
      uVar13 = *(uint *)this;
      pMVar15 = *(Mat **)(this + 0x48);
      param_4 = *(long *)(this + 0x18);
      iVar9 = *(int *)(this + 8);
    }
    if (param_5 == uVar16) goto LAB_003c6ff4;
    lVar14 = uVar16 - param_5;
    uVar11 = 0;
    uVar16 = param_5;
  }
  *(uint *)this = uVar13 | uVar11;
LAB_003c6f08:
  *(ulong *)pMVar15 = uVar16;
  *(long *)(pMVar15 + 8) = (long)iVar2;
  param_4 = param_4 + (long)iVar9 * uVar16;
  *(long *)(this + 0x28) = param_4;
  *(long *)(this + 0x20) = param_4 + lVar14;
  return;
}


==================================================================

### FUNC 003c7018 (684 bytes) name=gaussian

/* cv::RNG::gaussian(double) */

undefined1  [16] __thiscall cv::RNG::gaussian(RNG *this,double param_1)

{
  uint uVar1;
  ulong uVar2;
  double dVar3;
  uint uVar4;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  long lVar8;
  float fVar9;
  double dVar10;
  double dVar11;
  double dVar12;
  undefined1 auVar13 [16];
  float fVar14;
  float fVar15;
  double dVar16;
  double dVar17;
  float fVar18;
  
  dVar3 = DAT_003c72f0;
  dVar12 = DAT_003c72e8;
  dVar17 = DAT_003c72e0;
  uVar5 = *(ulong *)this;
  fVar9 = DAT_003c72f8;
  if (DAT_005332e0 == '\0') {
    DAT_00532ee0 = 0x76ad2212;
    DAT_005332f0 = DAT_003c72d0;
    DAT_005330e0 = 0x3f800000;
    DAT_005334ec = DAT_003c72d4;
    DAT_005332dc = DAT_003c72d8;
    DAT_00532ee4 = 0;
    lVar7 = 0;
    dVar11 = DAT_003c72c8;
    do {
      dVar10 = ::exp(dVar11 * dVar11 * -0.5);
      dVar10 = ::log(dVar17 / dVar11 + dVar10);
      dVar16 = SQRT(dVar10 * -2.0);
      if (NAN(dVar16)) {
        dVar16 = ::sqrt(dVar10 * -2.0);
      }
      *(int *)((long)&DAT_005330dc + lVar7) = (int)((dVar16 / dVar11) * dVar12);
      dVar11 = ::exp(dVar16 * dVar16 * -0.5);
      lVar8 = lVar7 + -4;
      *(float *)((long)&DAT_005332d8 + lVar7) = (float)dVar11;
      *(float *)((long)&DAT_005334e8 + lVar7) = (float)(dVar16 * dVar3);
      lVar7 = lVar8;
      dVar11 = dVar16;
    } while (lVar8 != -0x1f8);
    DAT_005332e0 = '\x01';
    fVar9 = DAT_003c72f8;
  }
  do {
    dVar17 = DAT_003c7300;
    fVar18 = DAT_003c72fc;
    fVar14 = DAT_003c72f8;
    uVar4 = (uint)uVar5;
    uVar2 = uVar5 & 0x7f;
    uVar1 = uVar4 & 0x7f;
    fVar15 = (float)(int)uVar4 * (float)(&DAT_005332f0)[(int)uVar1];
    uVar5 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
    if ((uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f) < (uint)(&DAT_00532ee0)[(int)uVar1])
    goto LAB_003c71ec;
    if (uVar2 == 0) goto LAB_003c7230;
    uVar2 = uVar5 & 0xffffffff;
    fVar18 = (float)(&DAT_005330e0)[(int)uVar1];
    fVar14 = (float)(&DAT_005330e0)[(int)(uVar1 - 1)];
    dVar17 = (double)fVar15;
    uVar5 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
    dVar12 = ::exp(dVar17 * dVar17 * -0.5);
  } while (dVar12 <= (double)(fVar18 + (fVar14 - fVar18) * (float)uVar2 * fVar9));
LAB_003c71f0:
  *(ulong *)this = uVar5;
  auVar13._0_8_ = param_1 * dVar17;
  auVar13._8_8_ = 0;
  return auVar13;
LAB_003c7230:
  do {
    uVar2 = uVar5 & 0xffffffff;
    uVar6 = (uVar5 >> 0x20) + (uVar5 & 0xffffffff) * 0xf83f630a;
    uVar5 = (uVar6 >> 0x20) + (uVar6 & 0xffffffff) * 0xf83f630a;
    fVar9 = logf(fVar18 + fVar14 * (float)uVar2);
    fVar15 = (float)((double)-fVar9 * dVar17);
    fVar9 = logf(fVar18 + fVar14 * (float)(uVar6 & 0xffffffff));
  } while (-fVar9 + -fVar9 < fVar15 * fVar15);
  if ((int)uVar4 < 1) {
    dVar17 = (double)(DAT_003c7308 - fVar15);
  }
  else {
    fVar15 = fVar15 + DAT_003c730c;
LAB_003c71ec:
    dVar17 = (double)fVar15;
  }
  goto LAB_003c71f0;
}


==================================================================

### FUNC 003c7310 (9364 bytes) name=fill

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
/* cv::RNG::fill(cv::_InputOutputArray const&, int, cv::_InputArray const&, cv::_InputArray const&,
   bool) */

void __thiscall
cv::RNG::fill(RNG *this,_InputOutputArray *param_1,int param_2,_InputArray *param_3,
             _InputArray *param_4,bool param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int *piVar5;
  long lVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  char cVar10;
  float fVar11;
  float fVar12;
  double dVar13;
  double dVar14;
  float fVar15;
  float fVar16;
  undefined4 uVar17;
  undefined2 uVar18;
  undefined8 uVar19;
  bool bVar20;
  bool bVar21;
  bool bVar22;
  int iVar23;
  int iVar24;
  uint uVar25;
  void *pvVar26;
  ulong uVar27;
  ulong uVar28;
  char *pcVar29;
  uint uVar30;
  int iVar31;
  long lVar32;
  uint *puVar33;
  undefined4 *puVar34;
  undefined8 *puVar35;
  Mat *pMVar36;
  undefined1 *puVar37;
  undefined8 *puVar38;
  uint uVar39;
  uint uVar40;
  uint *puVar41;
  uint uVar42;
  long lVar43;
  uint uVar44;
  uint uVar45;
  double *pdVar46;
  ulong uVar47;
  double *pdVar48;
  double *pdVar49;
  double *pdVar50;
  double *pdVar51;
  double *pdVar52;
  long lVar53;
  double dVar54;
  double dVar55;
  double dVar56;
  undefined8 uVar57;
  undefined1 uVar58;
  undefined1 uVar59;
  undefined1 uVar60;
  undefined1 uVar61;
  undefined1 uVar62;
  undefined1 uVar63;
  undefined1 uVar64;
  undefined1 uVar65;
  undefined1 uVar66;
  undefined1 uVar67;
  undefined1 uVar68;
  undefined1 uVar69;
  undefined1 uVar70;
  undefined1 uVar71;
  undefined1 uVar72;
  undefined1 uVar73;
  undefined1 uVar74;
  undefined1 uVar75;
  undefined1 uVar76;
  undefined1 uVar77;
  undefined1 uVar78;
  undefined1 uVar79;
  float fVar80;
  double dVar81;
  undefined1 auVar82 [16];
  undefined1 auVar83 [16];
  float fVar84;
  undefined1 uVar85;
  double dVar86;
  undefined1 auVar87 [16];
  double dVar88;
  undefined1 auVar89 [16];
  double dVar90;
  double dVar91;
  double dVar92;
  float fVar93;
  double dVar94;
  uint uStack_b2c;
  Mat *local_ae8;
  Mat *local_ae0;
  uint local_ac8;
  long local_ac0;
  code *local_aa8;
  undefined1 *local_aa0;
  code *local_a90;
  byte local_a88;
  bool local_a84;
  Mat *local_a80;
  ulong local_a68;
  uchar *local_a58;
  undefined8 local_a50;
  undefined8 local_a48;
  undefined8 local_a40;
  undefined8 local_a38;
  code *local_a30;
  code *local_a28;
  code *local_a20;
  code *local_a18;
  Mat *local_a10;
  undefined8 uStack_a08;
  uint local_a00;
  uint local_9fc;
  Mat *local_9f8;
  undefined4 local_9f0;
  undefined4 local_9ec;
  ulong local_9e0;
  uint local_9d8;
  uint local_9c0;
  int local_9bc;
  undefined4 local_9b8;
  undefined4 local_9b4;
  undefined8 local_9b0;
  undefined8 local_9a8;
  undefined8 local_9a0;
  undefined8 local_998;
  undefined8 local_990;
  long local_988;
  undefined4 *local_980;
  undefined8 *local_978;
  undefined8 local_970;
  undefined8 local_968;
  uint local_960;
  int local_95c;
  uint local_958;
  int local_954;
  double *local_950;
  undefined8 local_948;
  undefined8 local_940;
  undefined8 local_938;
  undefined8 local_930;
  long local_928;
  uint *local_920;
  undefined8 *local_918;
  undefined8 local_910;
  undefined8 local_908;
  uint local_900;
  int local_8fc;
  uint local_8f8;
  uint local_8f4;
  double *local_8f0;
  undefined8 local_8e8;
  undefined8 local_8e0;
  undefined8 local_8d8;
  undefined8 local_8d0;
  long local_8c8;
  uint *local_8c0;
  undefined8 *local_8b8;
  undefined8 local_8b0;
  undefined8 local_8a8;
  double *local_8a0;
  ulong local_898;
  double adStack_890 [136];
  undefined1 *local_450;
  ulong local_448;
  undefined1 auStack_440 [56];
  undefined1 *local_408;
  undefined1 auStack_400 [1024];
  
  iVar23 = _InputArray::kind((_InputArray *)param_1);
  if (iVar23 == 0x10000) {
    pMVar36 = *(Mat **)(param_1 + 8);
    local_980 = &local_9b8;
    local_978 = &local_970;
    local_9c0 = *(uint *)pMVar36;
    local_9bc = *(int *)(pMVar36 + 4);
    local_9b8 = *(undefined4 *)(pMVar36 + 8);
    local_9b4 = *(undefined4 *)(pMVar36 + 0xc);
    local_9b0 = *(undefined8 *)(pMVar36 + 0x10);
    local_9a8 = *(undefined8 *)(pMVar36 + 0x18);
    local_9a0 = *(undefined8 *)(pMVar36 + 0x20);
    local_998 = *(undefined8 *)(pMVar36 + 0x28);
    local_990 = *(undefined8 *)(pMVar36 + 0x30);
    local_988 = *(long *)(pMVar36 + 0x38);
    local_968 = 0;
    local_970 = 0;
    if (local_988 != 0) {
      piVar5 = (int *)(local_988 + 0x14);
      do {
        cVar10 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar21) {
          *piVar5 = *piVar5 + 1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
    }
    if (2 < *(int *)(pMVar36 + 4)) {
      local_9bc = 0;
      Mat::copySize((Mat *)&local_9c0,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  local_a80 = (Mat *)&local_9c0;
  iVar23 = _InputArray::kind(param_3);
  if (iVar23 == 0x10000) {
    pMVar36 = *(Mat **)(param_3 + 8);
    local_920 = &local_958;
    local_918 = &local_910;
    local_960 = *(uint *)pMVar36;
    local_95c = *(int *)(pMVar36 + 4);
    local_958 = *(uint *)(pMVar36 + 8);
    local_954 = *(int *)(pMVar36 + 0xc);
    local_950 = *(double **)(pMVar36 + 0x10);
    local_948 = *(undefined8 *)(pMVar36 + 0x18);
    local_940 = *(undefined8 *)(pMVar36 + 0x20);
    local_938 = *(undefined8 *)(pMVar36 + 0x28);
    local_930 = *(undefined8 *)(pMVar36 + 0x30);
    local_928 = *(long *)(pMVar36 + 0x38);
    local_908 = 0;
    local_910 = 0;
    if (local_928 != 0) {
      piVar5 = (int *)(local_928 + 0x14);
      do {
        cVar10 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar21) {
          *piVar5 = *piVar5 + 1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
    }
    if (2 < *(int *)(pMVar36 + 4)) {
      local_95c = 0;
      Mat::copySize((Mat *)&local_960,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_3);
  }
  local_ae8 = (Mat *)&local_960;
  iVar23 = _InputArray::kind(param_4);
  if (iVar23 == 0x10000) {
    pMVar36 = *(Mat **)(param_4 + 8);
    local_8c0 = &local_8f8;
    local_8b8 = &local_8b0;
    local_900 = *(uint *)pMVar36;
    local_8fc = *(int *)(pMVar36 + 4);
    local_8f8 = *(uint *)(pMVar36 + 8);
    local_8f4 = *(uint *)(pMVar36 + 0xc);
    local_8f0 = *(double **)(pMVar36 + 0x10);
    local_8e8 = *(undefined8 *)(pMVar36 + 0x18);
    local_8e0 = *(undefined8 *)(pMVar36 + 0x20);
    local_8d8 = *(undefined8 *)(pMVar36 + 0x28);
    local_8d0 = *(undefined8 *)(pMVar36 + 0x30);
    local_8c8 = *(long *)(pMVar36 + 0x38);
    local_8a8 = 0;
    local_8b0 = 0;
    if (local_8c8 != 0) {
      piVar5 = (int *)(local_8c8 + 0x14);
      do {
        cVar10 = '\x01';
        bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar21) {
          *piVar5 = *piVar5 + 1;
          cVar10 = ExclusiveMonitorsStatus();
        }
      } while (cVar10 != '\0');
    }
    if (2 < *(int *)(pMVar36 + 4)) {
      local_8fc = 0;
      Mat::copySize((Mat *)&local_900,pMVar36);
    }
  }
  else {
    _InputArray::getMat_((int)param_4);
  }
  uVar30 = local_9c0;
  local_ae0 = (Mat *)&local_900;
  local_8a0 = adStack_890;
  uVar8 = local_9c0 >> 3 & 0x1ff;
  local_898 = 0x88;
  uVar1 = uVar8 + 1;
  uVar7 = local_9c0 & 7;
  if ((((local_960 >> 3 & 0x1ff) != 0) || ((local_958 != 1 && (local_954 != 1)))) ||
     (((local_958 + local_954) - 1 != uVar1 &&
      ((local_958 + local_954 != 2 &&
       ((((local_920[1] != 1 || (*local_920 != 4)) || ((local_960 & 0xfff) != 6)) || (4 < uVar1)))))
      ))) {
    local_a50 = 0;
    local_a48 = 0;
    pvVar26 = (void *)String::allocate((String *)&local_a50,0xdf);
    memcpy(pvVar26,
           "_param1.channels() == 1 && (_param1.rows == 1 || _param1.cols == 1) && (_param1.rows + _param1.cols - 1 == cn || _param1.rows + _param1.cols - 1 == 1 || (_param1.size() == Size(1, 4) && _param1.type() == CV_64F && cn <= 4))"
           ,0xdf);
    error(-0xd7,(String *)&local_a50,
          "void cv::RNG::fill(cv::InputOutputArray, int, cv::InputArray, cv::InputArray, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x1ed);
    String::deallocate((String *)&local_a50);
  }
  if (((local_900 >> 3 & 0x1ff) != 0) ||
     ((((local_8f8 != 1 && (local_8f4 != 1)) ||
       ((((local_8f8 + local_8f4) - 1 != uVar1 && (local_8f8 + local_8f4 != 2)) &&
        ((((local_920[1] != 1 || (*local_920 != 4)) || ((local_960 & 0xfff) != 6)) || (4 < uVar1))))
       )) && (((local_8f8 != uVar1 || (param_2 != 1)) || (uVar1 != local_8f4)))))) {
    local_a40 = 0;
    local_a38 = 0;
    pvVar26 = (void *)String::allocate((String *)&local_a40,0x127);
    memcpy(pvVar26,&DAT_00477610,0x127);
    error(-0xd7,(String *)&local_a40,
          "void cv::RNG::fill(cv::InputOutputArray, int, cv::InputArray, cv::InputArray, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x1f2);
    String::deallocate((String *)&local_a40);
  }
  if (local_95c < 3) {
    uVar45 = local_954 * local_958;
  }
  else {
    uVar45 = 1;
    lVar32 = 0;
    do {
      puVar33 = local_920 + lVar32;
      lVar32 = lVar32 + 1;
      uVar45 = uVar45 * *puVar33;
    } while ((int)lVar32 < local_95c);
  }
  if (local_8fc < 3) {
    uVar25 = local_8f4 * local_8f8;
  }
  else {
    uVar25 = 1;
    lVar32 = 0;
    do {
      puVar33 = local_8c0 + lVar32;
      lVar32 = lVar32 + 1;
      uVar25 = uVar25 * *puVar33;
    } while ((int)lVar32 < local_8fc);
  }
  if (param_2 != 0) {
    if (param_2 != 1) {
      local_450 = (undefined1 *)0x0;
      local_448 = 0;
      pcVar29 = (char *)String::allocate((String *)&local_450,0x19);
      cVar10 = s_Unknown_distribution_type_00477748[0x18];
      uVar19 = s_Unknown_distribution_type_00477748._8_8_;
      uVar57 = s_Unknown_distribution_type_00477748._0_8_;
      *(undefined8 *)(pcVar29 + 0x10) = s_Unknown_distribution_type_00477748._16_8_;
      pcVar29[0x18] = cVar10;
      *(undefined8 *)pcVar29 = uVar57;
      *(undefined8 *)(pcVar29 + 8) = uVar19;
      error(-5,(String *)&local_450,
            "void cv::RNG::fill(cv::InputOutputArray, int, cv::InputArray, cv::InputArray, bool)",
            "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x292);
      String::deallocate((String *)&local_450);
      pdVar46 = (double *)0x0;
      local_a84 = false;
      local_a90 = (code *)0x0;
      local_aa8 = (code *)0x0;
      local_a88 = 1;
      pdVar48 = pdVar46;
      pdVar49 = pdVar46;
      pdVar50 = pdVar46;
      pdVar51 = pdVar46;
      pdVar52 = pdVar46;
      goto LAB_003c77dc;
    }
    if ((int)uVar25 < (int)uVar1) {
      uVar25 = uVar1;
    }
    uVar30 = uVar45;
    if ((int)uVar45 < (int)uVar1) {
      uVar30 = uVar1;
    }
    uVar47 = (ulong)(int)(uVar25 + uVar30);
    pdVar49 = local_8a0;
    if (local_898 < uVar47) {
      if (local_8a0 != adStack_890) {
        if (local_8a0 != (double *)0x0) {
          operator_delete__(local_8a0);
        }
        local_8a0 = adStack_890;
        local_898 = 0x88;
      }
      if (uVar47 < 0x89) {
        pdVar49 = adStack_890;
        uVar47 = local_898;
      }
      else {
        local_8a0 = operator_new__(uVar47 << 3);
        pdVar49 = local_8a0;
      }
    }
    local_898 = uVar47;
    iVar23 = 8;
    if (uVar7 != 6) {
      iVar23 = 4;
    }
    uVar30 = 6;
    if (uVar7 != 6) {
      uVar30 = 5;
    }
    if (((local_960 >> 0xe & 1) == 0) || (pdVar52 = local_950, uVar30 != (local_960 & 0xfff))) {
      local_9fc = *local_920;
      local_a00 = local_920[1];
      Mat::Mat((Mat *)&local_450,(_OutputArray *)&local_a00,uVar30,pdVar49,0);
      local_a00 = 0x2010000;
      local_9f0 = 0;
      local_9ec = 0;
      local_9f8 = (Mat *)&local_450;
      Mat::convertTo(local_ae8,(_OutputArray *)&local_a00,uVar30,1.0,0.0);
      Mat::release((Mat *)&local_450);
      pdVar52 = pdVar49;
      if (local_408 != auStack_400) {
        fastFree(local_408);
      }
    }
    if ((int)uVar45 < (int)uVar1) {
      iVar9 = uVar45 * iVar23;
      iVar24 = uVar1 * iVar23;
      if (iVar9 < iVar24) {
        lVar32 = (long)iVar9;
        uVar25 = iVar24 - iVar9;
        if (((double *)((long)pdVar52 + lVar32) < pdVar52 + 2 && 0 < lVar32 + 0x10) ||
           (uVar25 < 0x16)) {
          pdVar51 = pdVar52;
          do {
            *(undefined1 *)((long)pdVar51 + lVar32) = *(undefined1 *)pdVar51;
            pdVar51 = (double *)((long)pdVar51 + 1);
          } while (pdVar51 != (double *)((long)pdVar52 + (ulong)(uint)((iVar24 + -1) - iVar9) + 1));
        }
        else {
          uVar39 = -(int)pdVar52 & 0xf;
          if (uVar25 < uVar39) {
            uVar39 = uVar25;
          }
          iVar31 = iVar9;
          if (uVar39 != 0) {
            *(undefined1 *)((long)pdVar52 + lVar32) = *(undefined1 *)pdVar52;
            iVar31 = iVar9 + 1;
            if (uVar39 != 1) {
              *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 1)) =
                   *(undefined1 *)((long)pdVar52 + 1);
              iVar31 = iVar9 + 2;
              if (uVar39 != 2) {
                *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 2)) =
                     *(undefined1 *)((long)pdVar52 + 2);
                iVar31 = iVar9 + 3;
                if (uVar39 != 3) {
                  *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 3)) =
                       *(undefined1 *)((long)pdVar52 + 3);
                  iVar31 = iVar9 + 4;
                  if (uVar39 != 4) {
                    *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 4)) =
                         *(undefined1 *)((long)pdVar52 + 4);
                    iVar31 = iVar9 + 5;
                    if (uVar39 != 5) {
                      *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 5)) =
                           *(undefined1 *)((long)pdVar52 + 5);
                      iVar31 = iVar9 + 6;
                      if (uVar39 != 6) {
                        *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 6)) =
                             *(undefined1 *)((long)pdVar52 + 6);
                        iVar31 = iVar9 + 7;
                        if (uVar39 != 7) {
                          *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 7)) =
                               *(undefined1 *)((long)pdVar52 + 7);
                          iVar31 = iVar9 + 8;
                          if (uVar39 != 8) {
                            *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 8)) =
                                 *(undefined1 *)(pdVar52 + 1);
                            iVar31 = iVar9 + 9;
                            if (uVar39 != 9) {
                              *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 9)) =
                                   *(undefined1 *)((long)pdVar52 + 9);
                              iVar31 = iVar9 + 10;
                              if (uVar39 != 10) {
                                *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 10)) =
                                     *(undefined1 *)((long)pdVar52 + 10);
                                iVar31 = iVar9 + 0xb;
                                if (uVar39 != 0xb) {
                                  *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 0xb)) =
                                       *(undefined1 *)((long)pdVar52 + 0xb);
                                  iVar31 = iVar9 + 0xc;
                                  if (uVar39 != 0xc) {
                                    *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 0xc)) =
                                         *(undefined1 *)((long)pdVar52 + 0xc);
                                    iVar31 = iVar9 + 0xd;
                                    if (uVar39 != 0xd) {
                                      *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 0xd)) =
                                           *(undefined1 *)((long)pdVar52 + 0xd);
                                      iVar31 = iVar9 + 0xe;
                                      if (uVar39 == 0xf) {
                                        *(undefined1 *)((long)pdVar52 + (long)(iVar9 + 0xe)) =
                                             *(undefined1 *)((long)pdVar52 + 0xe);
                                        iVar31 = iVar9 + 0xf;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar2 = ((uVar25 - uVar39) - 0x10 >> 4) + 1;
          iVar4 = uVar2 * 0x10;
          if (0xe < (uVar25 - 1) - uVar39) {
            uVar44 = 0;
            puVar35 = (undefined8 *)((long)pdVar52 + (ulong)uVar39);
            puVar38 = (undefined8 *)((long)pdVar52 + (ulong)uVar39 + lVar32);
            do {
              uVar57 = *puVar35;
              uVar44 = uVar44 + 1;
              puVar38[1] = puVar35[1];
              *puVar38 = uVar57;
              puVar35 = puVar35 + 2;
              puVar38 = puVar38 + 2;
            } while (uVar44 < uVar2);
            iVar31 = iVar31 + iVar4;
            if (iVar4 == uVar25 - uVar39) goto LAB_003c76d4;
          }
          iVar4 = iVar31 + 1;
          *(undefined1 *)((long)pdVar52 + (long)iVar31) =
               *(undefined1 *)((long)pdVar52 + (long)(iVar31 - iVar9));
          if (iVar4 < iVar24) {
            iVar3 = iVar31 + 2;
            *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                 *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
            if (iVar3 < iVar24) {
              iVar4 = iVar31 + 3;
              *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                   *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
              if (iVar4 < iVar24) {
                iVar3 = iVar31 + 4;
                *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                     *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                if (iVar3 < iVar24) {
                  iVar4 = iVar31 + 5;
                  *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                       *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
                  if (iVar4 < iVar24) {
                    iVar3 = iVar31 + 6;
                    *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                         *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                    if (iVar3 < iVar24) {
                      iVar4 = iVar31 + 7;
                      *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                           *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
                      if (iVar4 < iVar24) {
                        iVar3 = iVar31 + 8;
                        *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                             *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                        if (iVar3 < iVar24) {
                          iVar4 = iVar31 + 9;
                          *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                               *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
                          if (iVar4 < iVar24) {
                            iVar3 = iVar31 + 10;
                            *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                                 *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                            if (iVar3 < iVar24) {
                              iVar4 = iVar31 + 0xb;
                              *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                                   *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
                              if (iVar4 < iVar24) {
                                iVar3 = iVar31 + 0xc;
                                *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                                     *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                                if (iVar3 < iVar24) {
                                  iVar4 = iVar31 + 0xd;
                                  *(undefined1 *)((long)pdVar52 + (long)iVar3) =
                                       *(undefined1 *)((long)pdVar52 + (long)(iVar3 - iVar9));
                                  if (iVar4 < iVar24) {
                                    iVar31 = iVar31 + 0xe;
                                    *(undefined1 *)((long)pdVar52 + (long)iVar4) =
                                         *(undefined1 *)((long)pdVar52 + (long)(iVar4 - iVar9));
                                    if (iVar31 < iVar24) {
                                      *(undefined1 *)((long)pdVar52 + (long)iVar31) =
                                           *(undefined1 *)((long)pdVar52 + (long)(iVar31 - iVar9));
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003c76d4:
    if (((local_900 >> 0xe & 1) == 0) || (pdVar51 = local_8f0, uVar30 != (local_900 & 0xfff))) {
      pdVar51 = pdVar49 + (int)uVar1;
      local_9fc = *local_8c0;
      local_a00 = local_8c0[1];
      Mat::Mat((Mat *)&local_450,(_OutputArray *)&local_a00,uVar30,pdVar51,0);
      local_a00 = 0x2010000;
      local_9f0 = 0;
      local_9ec = 0;
      local_9f8 = (Mat *)&local_450;
      Mat::convertTo(local_ae0,(_OutputArray *)&local_a00,uVar30,1.0,0.0);
      Mat::release((Mat *)&local_450);
      if (local_408 != auStack_400) {
        fastFree(local_408);
      }
    }
    if ((int)uVar45 < (int)uVar1) {
      iVar9 = uVar45 * iVar23;
      iVar23 = uVar1 * iVar23;
      if (iVar9 < iVar23) {
        lVar32 = (long)iVar9;
        uVar30 = iVar23 - iVar9;
        if (((double *)((long)pdVar51 + lVar32) < pdVar51 + 2 && 0 < lVar32 + 0x10) ||
           (uVar30 < 0x16)) {
          pdVar49 = pdVar51;
          do {
            *(undefined1 *)((long)pdVar49 + lVar32) = *(undefined1 *)pdVar49;
            pdVar49 = (double *)((long)pdVar49 + 1);
          } while (pdVar49 != (double *)((long)pdVar51 + (ulong)(uint)((iVar23 + -1) - iVar9) + 1));
        }
        else {
          uVar45 = -(int)pdVar51 & 0xf;
          if (uVar30 < uVar45) {
            uVar45 = uVar30;
          }
          iVar24 = iVar9;
          if (uVar45 != 0) {
            *(undefined1 *)((long)pdVar51 + lVar32) = *(undefined1 *)pdVar51;
            iVar24 = iVar9 + 1;
            if (uVar45 != 1) {
              *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 1)) =
                   *(undefined1 *)((long)pdVar51 + 1);
              iVar24 = iVar9 + 2;
              if (uVar45 != 2) {
                *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 2)) =
                     *(undefined1 *)((long)pdVar51 + 2);
                iVar24 = iVar9 + 3;
                if (uVar45 != 3) {
                  *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 3)) =
                       *(undefined1 *)((long)pdVar51 + 3);
                  iVar24 = iVar9 + 4;
                  if (uVar45 != 4) {
                    *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 4)) =
                         *(undefined1 *)((long)pdVar51 + 4);
                    iVar24 = iVar9 + 5;
                    if (uVar45 != 5) {
                      *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 5)) =
                           *(undefined1 *)((long)pdVar51 + 5);
                      iVar24 = iVar9 + 6;
                      if (uVar45 != 6) {
                        *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 6)) =
                             *(undefined1 *)((long)pdVar51 + 6);
                        iVar24 = iVar9 + 7;
                        if (uVar45 != 7) {
                          *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 7)) =
                               *(undefined1 *)((long)pdVar51 + 7);
                          iVar24 = iVar9 + 8;
                          if (uVar45 != 8) {
                            *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 8)) =
                                 *(undefined1 *)(pdVar51 + 1);
                            iVar24 = iVar9 + 9;
                            if (uVar45 != 9) {
                              *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 9)) =
                                   *(undefined1 *)((long)pdVar51 + 9);
                              iVar24 = iVar9 + 10;
                              if (uVar45 != 10) {
                                *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 10)) =
                                     *(undefined1 *)((long)pdVar51 + 10);
                                iVar24 = iVar9 + 0xb;
                                if (uVar45 != 0xb) {
                                  *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 0xb)) =
                                       *(undefined1 *)((long)pdVar51 + 0xb);
                                  iVar24 = iVar9 + 0xc;
                                  if (uVar45 != 0xc) {
                                    *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 0xc)) =
                                         *(undefined1 *)((long)pdVar51 + 0xc);
                                    iVar24 = iVar9 + 0xd;
                                    if (uVar45 != 0xd) {
                                      *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 0xd)) =
                                           *(undefined1 *)((long)pdVar51 + 0xd);
                                      iVar24 = iVar9 + 0xe;
                                      if (uVar45 == 0xf) {
                                        *(undefined1 *)((long)pdVar51 + (long)(iVar9 + 0xe)) =
                                             *(undefined1 *)((long)pdVar51 + 0xe);
                                        iVar24 = iVar9 + 0xf;
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          uVar25 = ((uVar30 - uVar45) - 0x10 >> 4) + 1;
          iVar31 = uVar25 * 0x10;
          if (0xe < (uVar30 - 1) - uVar45) {
            uVar39 = 0;
            puVar35 = (undefined8 *)((long)pdVar51 + (ulong)uVar45);
            puVar38 = (undefined8 *)((long)pdVar51 + (ulong)uVar45 + lVar32);
            do {
              uVar57 = *puVar35;
              uVar39 = uVar39 + 1;
              puVar38[1] = puVar35[1];
              *puVar38 = uVar57;
              puVar35 = puVar35 + 2;
              puVar38 = puVar38 + 2;
            } while (uVar39 < uVar25);
            iVar24 = iVar24 + iVar31;
            if (iVar31 == uVar30 - uVar45) goto LAB_003c7794;
          }
          iVar31 = iVar24 + 1;
          *(undefined1 *)((long)pdVar51 + (long)iVar24) =
               *(undefined1 *)((long)pdVar51 + (long)(iVar24 - iVar9));
          if (iVar31 < iVar23) {
            iVar4 = iVar24 + 2;
            *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                 *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
            if (iVar4 < iVar23) {
              iVar31 = iVar24 + 3;
              *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                   *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
              if (iVar31 < iVar23) {
                iVar4 = iVar24 + 4;
                *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                     *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                if (iVar4 < iVar23) {
                  iVar31 = iVar24 + 5;
                  *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                       *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
                  if (iVar31 < iVar23) {
                    iVar4 = iVar24 + 6;
                    *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                         *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                    if (iVar4 < iVar23) {
                      iVar31 = iVar24 + 7;
                      *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                           *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
                      if (iVar31 < iVar23) {
                        iVar4 = iVar24 + 8;
                        *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                             *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                        if (iVar4 < iVar23) {
                          iVar31 = iVar24 + 9;
                          *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                               *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
                          if (iVar31 < iVar23) {
                            iVar4 = iVar24 + 10;
                            *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                                 *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                            if (iVar4 < iVar23) {
                              iVar31 = iVar24 + 0xb;
                              *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                                   *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
                              if (iVar31 < iVar23) {
                                iVar4 = iVar24 + 0xc;
                                *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                                     *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                                if (iVar4 < iVar23) {
                                  iVar31 = iVar24 + 0xd;
                                  *(undefined1 *)((long)pdVar51 + (long)iVar4) =
                                       *(undefined1 *)((long)pdVar51 + (long)(iVar4 - iVar9));
                                  if (iVar31 < iVar23) {
                                    iVar24 = iVar24 + 0xe;
                                    *(undefined1 *)((long)pdVar51 + (long)iVar31) =
                                         *(undefined1 *)((long)pdVar51 + (long)(iVar31 - iVar9));
                                    if (iVar24 < iVar23) {
                                      *(undefined1 *)((long)pdVar51 + (long)iVar24) =
                                           *(undefined1 *)((long)pdVar51 + (long)(iVar24 - iVar9));
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
LAB_003c7794:
    local_a84 = local_8f8 == uVar1 && uVar1 == local_8f4;
    local_a90 = (code *)(&PTR_FUN_004f7a70)[(int)uVar7];
    if (local_a90 == (code *)0x0) {
      local_a20 = local_a90;
      local_a18 = local_a90;
      pcVar29 = (char *)String::allocate((String *)&local_a20,0xe);
      uVar18 = s_scaleFunc____0_00477738._12_2_;
      uVar17 = s_scaleFunc____0_00477738._8_4_;
      *(undefined8 *)pcVar29 = s_scaleFunc____0_00477738._0_8_;
      *(undefined4 *)(pcVar29 + 8) = uVar17;
      *(undefined2 *)(pcVar29 + 0xc) = uVar18;
      error(-0xd7,(String *)&local_a20,
            "void cv::RNG::fill(cv::InputOutputArray, int, cv::InputArray, cv::InputArray, bool)",
            "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x28f);
      String::deallocate((String *)&local_a20);
    }
    pdVar46 = (double *)0x0;
    local_a88 = 1;
    local_aa8 = (code *)0x0;
    pdVar48 = (double *)0x0;
    pdVar49 = (double *)0x0;
    pdVar50 = (double *)0x0;
    goto LAB_003c77dc;
  }
  uVar47 = (ulong)(int)(uVar45 + uVar1 * 8 + uVar25);
  pdVar49 = local_8a0;
  if (local_898 < uVar47) {
    if (local_8a0 != adStack_890) {
      if (local_8a0 != (double *)0x0) {
        operator_delete__(local_8a0);
      }
      local_8a0 = adStack_890;
      local_898 = 0x88;
    }
    if (uVar47 < 0x89) {
      pdVar49 = adStack_890;
      uVar47 = local_898;
    }
    else {
      uVar27 = uVar47 << 3;
      if (0xfe0000000000000 < uVar47) {
        uVar27 = 0xffffffffffffffff;
      }
      local_8a0 = operator_new__(uVar27);
      pdVar49 = local_8a0;
    }
  }
  local_898 = uVar47;
  pdVar51 = local_8f0;
  if ((((local_960 >> 0xe & 1) == 0) || ((local_960 & 0xfff) != 6)) ||
     (pdVar46 = local_950, uVar45 != uVar1)) {
    local_9fc = *local_920;
    local_a00 = local_920[1];
    Mat::Mat((Mat *)&local_450,(_OutputArray *)&local_a00,6,pdVar49,0);
    local_9f0 = 0;
    local_9ec = 0;
    local_a00 = 0x2010000;
    local_9f8 = (Mat *)&local_450;
    Mat::convertTo(local_ae8,(_OutputArray *)&local_a00,6,1.0,0.0);
    if ((int)uVar45 < (int)uVar1) {
      lVar32 = (long)(int)uVar45;
      uVar39 = (uVar8 - uVar45) + 1;
      if ((pdVar49 + lVar32 < pdVar49 + 2 && 0 < (lVar32 + 2) * 8) || (uVar39 < 0xe)) {
        lVar53 = 0;
        do {
          *(undefined8 *)((long)pdVar49 + lVar53 + lVar32 * 8) =
               *(undefined8 *)((long)pdVar49 + lVar53);
          lVar53 = lVar53 + 8;
        } while (lVar53 != ((ulong)(uVar8 - uVar45) + 1) * 8);
      }
      else {
        uVar2 = (uint)((ulong)pdVar49 >> 3) & 1;
        if (uVar39 < uVar2) {
          uVar2 = uVar39;
        }
        uVar44 = uVar45;
        if (uVar2 != 0) {
          pdVar49[lVar32] = *pdVar49;
          uVar44 = uVar45 + 1;
        }
        uVar40 = ((uVar39 - uVar2) - 2 >> 1) + 1;
        uVar42 = 0;
        iVar23 = uVar40 * 2;
        pdVar46 = pdVar49 + uVar2;
        pdVar50 = pdVar49 + lVar32 + 2 + ((ulong)uVar2 - 2);
        do {
          dVar56 = *pdVar46;
          uVar42 = uVar42 + 1;
          pdVar50[1] = pdVar46[1];
          *pdVar50 = dVar56;
          pdVar46 = pdVar46 + 2;
          pdVar50 = pdVar50 + 2;
        } while (uVar42 < uVar40);
        iVar9 = iVar23 + uVar44;
        if (iVar23 != uVar39 - uVar2) {
          pdVar49[iVar9] = pdVar49[(int)(iVar9 - uVar45)];
        }
      }
    }
    Mat::release((Mat *)&local_450);
    pdVar46 = pdVar49;
    if (local_408 != auStack_400) {
      fastFree(local_408);
    }
  }
  if ((((local_900 >> 0xe & 1) == 0) || (uVar25 != uVar1)) || ((local_900 & 0xfff) != 6)) {
    lVar32 = (ulong)uVar1 * 8;
    local_9fc = *local_8c0;
    local_a00 = local_8c0[1];
    pdVar51 = pdVar49 + uVar1;
    Mat::Mat((Mat *)&local_450,(_OutputArray *)&local_a00,6,pdVar51,0);
    local_9f0 = 0;
    local_9ec = 0;
    local_a00 = 0x2010000;
    local_9f8 = (Mat *)&local_450;
    Mat::convertTo(local_ae0,(_OutputArray *)&local_a00,6,1.0,0.0);
    if ((int)uVar25 < (int)uVar1) {
      lVar43 = (long)(int)uVar25;
      lVar53 = (long)(int)uVar8 + 1;
      lVar6 = lVar53 + lVar43;
      uVar45 = (uVar8 - uVar25) + 1;
      if ((lVar6 * 8 < lVar32 + 0x10 && lVar32 < ((long)(int)uVar8 + 3 + lVar43) * 8) ||
         (uVar45 < 0xe)) {
        lVar32 = 0;
        do {
          *(undefined8 *)((long)pdVar51 + lVar32 + lVar43 * 8) =
               *(undefined8 *)((long)pdVar51 + lVar32);
          lVar32 = lVar32 + 8;
        } while (lVar32 != ((ulong)(uVar8 - uVar25) + 1) * 8);
      }
      else {
        uVar39 = (uint)((ulong)pdVar51 >> 3) & 1;
        if (uVar45 < uVar39) {
          uVar39 = uVar45;
        }
        uVar2 = uVar25;
        if (uVar39 != 0) {
          pdVar51[lVar43] = *pdVar51;
          uVar2 = uVar25 + 1;
        }
        uVar44 = ((uVar45 - uVar39) - 2 >> 1) + 1;
        uVar40 = 0;
        iVar23 = uVar44 * 2;
        pdVar50 = pdVar49 + (ulong)uVar39 + lVar53;
        pdVar48 = pdVar49 + (ulong)uVar39 + lVar6;
        do {
          dVar56 = *pdVar50;
          uVar40 = uVar40 + 1;
          pdVar48[1] = pdVar50[1];
          *pdVar48 = dVar56;
          pdVar50 = pdVar50 + 2;
          pdVar48 = pdVar48 + 2;
        } while (uVar40 < uVar44);
        iVar9 = iVar23 + uVar2;
        if (iVar23 != uVar45 - uVar39) {
          pdVar51[iVar9] = pdVar51[(int)(iVar9 - uVar25)];
        }
      }
    }
    Mat::release((Mat *)&local_450);
    if (local_408 != auStack_400) {
      fastFree(local_408);
    }
  }
  if (uVar7 < 5) {
    uVar85 = (undefined1)((ulong)DAT_003c9970 >> 0x38);
    pdVar49 = pdVar49 + (int)(uVar1 * 2);
    local_a88 = 1;
    lVar32 = 0;
    lVar53 = 1;
    pdVar50 = pdVar49;
    do {
      dVar56 = *(double *)((long)pdVar51 + lVar32);
      dVar81 = *(double *)((long)pdVar46 + lVar32);
      uVar58 = SUB81(dVar56,0);
      uVar60 = (undefined1)((ulong)dVar56 >> 8);
      uVar63 = (undefined1)((ulong)dVar56 >> 0x10);
      uVar66 = (undefined1)((ulong)dVar56 >> 0x18);
      uVar69 = (undefined1)((ulong)dVar56 >> 0x20);
      uVar72 = (undefined1)((ulong)dVar56 >> 0x28);
      uVar75 = (undefined1)((ulong)dVar56 >> 0x30);
      uVar78 = (undefined1)((ulong)dVar56 >> 0x38);
      if (dVar81 <= dVar56) {
        uVar58 = SUB81(dVar81,0);
        uVar60 = (undefined1)((ulong)dVar81 >> 8);
        uVar63 = (undefined1)((ulong)dVar81 >> 0x10);
        uVar66 = (undefined1)((ulong)dVar81 >> 0x18);
        uVar69 = (undefined1)((ulong)dVar81 >> 0x20);
        uVar72 = (undefined1)((ulong)dVar81 >> 0x28);
        uVar75 = (undefined1)((ulong)dVar81 >> 0x30);
        uVar78 = (undefined1)((ulong)dVar81 >> 0x38);
      }
      if (dVar56 <= dVar81) {
        dVar56 = dVar81;
      }
      if (param_5) {
        uVar61 = (undefined1)((ulong)DAT_003c9970 >> 8);
        uVar64 = (undefined1)((ulong)DAT_003c9970 >> 0x10);
        uVar67 = (undefined1)((ulong)DAT_003c9970 >> 0x18);
        uVar70 = (undefined1)((ulong)DAT_003c9970 >> 0x20);
        uVar73 = (undefined1)((ulong)DAT_003c9970 >> 0x28);
        uVar76 = (undefined1)((ulong)DAT_003c9970 >> 0x30);
        uVar59 = (undefined1)DAT_003c9960;
        uVar62 = (undefined1)((ulong)DAT_003c9960 >> 8);
        uVar65 = (undefined1)((ulong)DAT_003c9960 >> 0x10);
        uVar68 = (undefined1)((ulong)DAT_003c9960 >> 0x18);
        uVar71 = (undefined1)((ulong)DAT_003c9960 >> 0x20);
        uVar74 = (undefined1)((ulong)DAT_003c9960 >> 0x28);
        uVar77 = (undefined1)((ulong)DAT_003c9960 >> 0x30);
        uVar79 = (undefined1)((ulong)DAT_003c9960 >> 0x38);
        if ((uVar30 & 5) == 0) {
          dVar81 = 0.0;
          uVar45 = 0;
LAB_003c9248:
          bVar20 = false;
          bVar22 = false;
          bVar21 = NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))));
          if (!NAN(dVar81) && !bVar21) {
            bVar20 = dVar81 < (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(
                                                  uVar69,CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(
                                                  uVar60,uVar58)))))));
            bVar22 = dVar81 == (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(
                                                  uVar69,CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(
                                                  uVar60,uVar58)))))));
          }
          if (bVar22 || bVar20 != (NAN(dVar81) || bVar21)) {
LAB_003c9250:
            iVar23 = (int)(double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58)))))));
            dVar81 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58)))))));
            dVar55 = (double)iVar23;
            bVar20 = false;
            bVar22 = false;
            bVar21 = NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))));
            if (!bVar21 && !NAN(dVar55)) {
              bVar20 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))) < dVar55;
              bVar22 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))) == dVar55;
            }
            uVar45 = iVar23 + (uint)(!bVar22 && bVar20 == (bVar21 || NAN(dVar55)));
          }
          if (uVar7 == 0) {
            iVar23 = 0x100;
            uVar59 = (char)DAT_003c9958;
            uVar62 = (char)((ulong)DAT_003c9958 >> 8);
            uVar65 = (char)((ulong)DAT_003c9958 >> 0x10);
            uVar68 = (char)((ulong)DAT_003c9958 >> 0x18);
            uVar71 = (char)((ulong)DAT_003c9958 >> 0x20);
            uVar74 = (char)((ulong)DAT_003c9958 >> 0x28);
            uVar77 = (char)((ulong)DAT_003c9958 >> 0x30);
            uVar79 = (char)((ulong)DAT_003c9958 >> 0x38);
          }
          else if (uVar7 == 2) {
            iVar23 = 0x10000;
            uVar59 = (char)DAT_003c9950;
            uVar62 = (char)((ulong)DAT_003c9950 >> 8);
            uVar65 = (char)((ulong)DAT_003c9950 >> 0x10);
            uVar68 = (char)((ulong)DAT_003c9950 >> 0x18);
            uVar71 = (char)((ulong)DAT_003c9950 >> 0x20);
            uVar74 = (char)((ulong)DAT_003c9950 >> 0x28);
            uVar77 = (char)((ulong)DAT_003c9950 >> 0x30);
            uVar79 = (char)((ulong)DAT_003c9950 >> 0x38);
          }
          else if (uVar7 == 1) {
            iVar23 = 0x80;
          }
          else if (uVar7 == 3) {
            iVar23 = 0x8000;
            uVar59 = (char)DAT_003c9970;
            uVar62 = uVar61;
            uVar65 = uVar64;
            uVar68 = uVar67;
            uVar71 = uVar70;
            uVar74 = uVar73;
            uVar77 = uVar76;
            uVar79 = uVar85;
          }
          else {
            iVar23 = 0x7fffffff;
            uVar59 = SUB81(DAT_003c9968,0);
            uVar62 = (char)((ulong)DAT_003c9968 >> 8);
            uVar65 = (char)((ulong)DAT_003c9968 >> 0x10);
            uVar68 = (char)((ulong)DAT_003c9968 >> 0x18);
            uVar71 = (char)((ulong)DAT_003c9968 >> 0x20);
            uVar74 = (char)((ulong)DAT_003c9968 >> 0x28);
            uVar77 = (char)((ulong)DAT_003c9968 >> 0x30);
            uVar79 = (char)((ulong)DAT_003c9968 >> 0x38);
          }
        }
        else if (uVar7 == 1) {
          bVar21 = false;
          if (!NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                  ))) && !NAN(DAT_003c9978)) {
            bVar21 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))) < DAT_003c9978;
          }
          if (!bVar21) goto LAB_003c9250;
          iVar23 = 0x80;
          uVar45 = 0xffffff80;
          dVar81 = DAT_003c9978;
        }
        else {
          if (uVar7 != 3) {
            uVar45 = 0x80000000;
            dVar81 = DAT_003c9948;
            goto LAB_003c9248;
          }
          bVar21 = false;
          if (!NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                  ))) && !NAN(DAT_003c9980)) {
            bVar21 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))) < DAT_003c9980;
          }
          if (!bVar21) goto LAB_003c9250;
          iVar23 = 0x8000;
          uVar45 = 0xffff8000;
          uVar59 = (char)DAT_003c9970;
          uVar62 = uVar61;
          uVar65 = uVar64;
          uVar68 = uVar67;
          uVar71 = uVar70;
          uVar74 = uVar73;
          uVar77 = uVar76;
          uVar79 = uVar85;
          dVar81 = DAT_003c9980;
        }
        bVar21 = false;
        if (!NAN((double)CONCAT17(uVar79,CONCAT16(uVar77,CONCAT15(uVar74,CONCAT14(uVar71,CONCAT13(
                                                  uVar68,CONCAT12(uVar65,CONCAT11(uVar62,uVar59)))))
                                                 ))) && !NAN(dVar56)) {
          bVar21 = (double)CONCAT17(uVar79,CONCAT16(uVar77,CONCAT15(uVar74,CONCAT14(uVar71,CONCAT13(
                                                  uVar68,CONCAT12(uVar65,CONCAT11(uVar62,uVar59)))))
                                                  )) < dVar56;
        }
        if (!bVar21) {
          uVar59 = SUB81(dVar56,0);
          uVar62 = (undefined1)((ulong)dVar56 >> 8);
          uVar65 = (undefined1)((ulong)dVar56 >> 0x10);
          uVar68 = (undefined1)((ulong)dVar56 >> 0x18);
          uVar71 = (undefined1)((ulong)dVar56 >> 0x20);
          uVar74 = (undefined1)((ulong)dVar56 >> 0x28);
          uVar77 = (undefined1)((ulong)dVar56 >> 0x30);
          uVar79 = (undefined1)((ulong)dVar56 >> 0x38);
          iVar23 = (int)dVar56 - (uint)(dVar56 < (double)(int)dVar56);
        }
        dVar56 = (double)CONCAT17(uVar79,CONCAT16(uVar77,CONCAT15(uVar74,CONCAT14(uVar71,CONCAT13(
                                                  uVar68,CONCAT12(uVar65,CONCAT11(uVar62,uVar59)))))
                                                 ));
        uVar58 = SUB81(dVar81,0);
        uVar60 = (undefined1)((ulong)dVar81 >> 8);
        uVar63 = (undefined1)((ulong)dVar81 >> 0x10);
        uVar66 = (undefined1)((ulong)dVar81 >> 0x18);
        uVar69 = (undefined1)((ulong)dVar81 >> 0x20);
        uVar72 = (undefined1)((ulong)dVar81 >> 0x28);
        uVar75 = (undefined1)((ulong)dVar81 >> 0x30);
        uVar78 = (undefined1)((ulong)dVar81 >> 0x38);
      }
      else {
        iVar23 = (int)(double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58)))))));
        dVar81 = (double)iVar23;
        bVar20 = false;
        bVar22 = false;
        bVar21 = NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58))))))));
        if (!bVar21 && !NAN(dVar81)) {
          bVar20 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                  )) < dVar81;
          bVar22 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                  )) == dVar81;
        }
        uVar45 = iVar23 + (uint)(!bVar22 && bVar20 == (bVar21 || NAN(dVar81)));
        iVar23 = (int)dVar56 - (uint)(dVar56 < (double)(int)dVar56);
      }
      dVar56 = dVar56 - (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,
                                                  CONCAT13(uVar66,CONCAT12(uVar63,CONCAT11(uVar60,
                                                  uVar58)))))));
      uVar25 = (iVar23 - uVar45) - 1;
      *(uint *)((long)pdVar50 + 4) = uVar45;
      *(uint *)pdVar50 = uVar25;
      if (((DAT_003c99b0 < dVar56) || ((uVar25 & iVar23 - uVar45) != 0)) || ((int)lVar53 == 0)) {
        lVar53 = 0;
        if (DAT_003c9968 < dVar56) {
          uVar25 = 0x7fffffff;
        }
        *(uint *)pdVar50 = uVar25;
        bVar21 = false;
        if (!NAN((double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                 ))) && !NAN(DAT_003c99b8)) {
          bVar21 = (double)CONCAT17(uVar78,CONCAT16(uVar75,CONCAT15(uVar72,CONCAT14(uVar69,CONCAT13(
                                                  uVar66,CONCAT12(uVar63,CONCAT11(uVar60,uVar58)))))
                                                  )) < DAT_003c99b8;
        }
        if (bVar21) {
          *(uint *)((long)pdVar50 + 4) = 0xc0000000;
          lVar53 = 0;
        }
      }
      else {
        lVar53 = 1;
        local_a88 = local_a88 & (int)uVar25 < 0x100;
      }
      lVar32 = lVar32 + 8;
      pdVar50 = pdVar50 + 1;
    } while (lVar32 != ((long)(int)uVar8 + 1) * 8);
    pdVar46 = (double *)0x0;
    if ((int)lVar53 == 0) {
      puVar33 = (uint *)((long)pdVar49 + 4);
      pdVar46 = pdVar49 + (int)uVar1;
      puVar41 = (uint *)((long)pdVar46 + 4);
      do {
        puVar41[3] = *puVar33;
        uVar30 = puVar33[-1] + 1;
        uVar47 = (ulong)uVar30;
        puVar41[-1] = uVar30;
        if (uVar30 < 2) {
          uVar30 = 0;
          iVar23 = 0;
          if (uVar47 != 0) {
            iVar23 = (int)((1 - uVar47 << 0x20) / uVar47);
          }
          *puVar41 = iVar23 + 1;
LAB_003c8fac:
          uVar25 = 0;
        }
        else {
          uVar45 = 0;
          do {
            uVar25 = uVar45;
            uVar45 = uVar25 + 1;
            uVar27 = 1L << ((ulong)uVar45 & 0x3f);
          } while (uVar27 < uVar47);
          iVar23 = 0;
          if (uVar47 != 0) {
            iVar23 = (int)((uVar27 - uVar47 << 0x20) / uVar47);
          }
          *puVar41 = iVar23 + 1;
          uVar30 = 1;
          if (uVar45 == 1) goto LAB_003c8fac;
          uVar30 = 1;
          if ((int)uVar25 < 0) {
            uVar25 = 0;
          }
        }
        puVar33 = puVar33 + 2;
        puVar41[1] = uVar30;
        puVar41[2] = uVar25;
        puVar41 = puVar41 + 5;
      } while (puVar33 != (uint *)((long)pdVar49 + (long)(int)uVar8 * 8 + 0xc));
    }
    pdVar48 = (double *)0x0;
    pdVar50 = (double *)0x0;
    local_aa8 = (code *)(&PTR_FUN_004f79f0)[lVar53 * 8 + (long)(int)uVar7];
  }
  else {
    if (uVar7 == 6) {
      dVar56 = DAT_003c9990;
      if (!param_5) goto LAB_003c8dac;
LAB_003c8db8:
      pdVar50 = pdVar49 + (int)(uVar1 * 2);
      uVar85 = (undefined1)((ulong)DAT_003c99a0 >> 8);
      uVar58 = (undefined1)((ulong)DAT_003c99a0 >> 0x10);
      uVar60 = (undefined1)((ulong)DAT_003c99a0 >> 0x18);
      uVar63 = (undefined1)((ulong)DAT_003c99a0 >> 0x20);
      uVar66 = (undefined1)((ulong)DAT_003c99a0 >> 0x28);
      uVar69 = (undefined1)((ulong)DAT_003c99a0 >> 0x30);
      uVar72 = (undefined1)((ulong)DAT_003c99a0 >> 0x38);
      if ((uVar1 < 5 ||
           pdVar50 < pdVar46 + uVar1 &&
           pdVar46 < pdVar49 + (long)(int)(uVar1 * 2 + -2) + 2 + (ulong)uVar1 * 2) ||
         (pdVar50 < pdVar51 + uVar1 &&
          pdVar51 < pdVar49 + (long)(int)(uVar1 * 2 + -2) + 2 + (ulong)uVar1 * 2)) {
        lVar32 = 0;
        pdVar49 = pdVar50;
        do {
          dVar81 = *(double *)((long)pdVar51 + lVar32) - *(double *)((long)pdVar46 + lVar32);
          uVar75 = SUB81(dVar81,0);
          uVar78 = (char)((ulong)dVar81 >> 8);
          uVar59 = (char)((ulong)dVar81 >> 0x10);
          uVar62 = (char)((ulong)dVar81 >> 0x18);
          uVar65 = (char)((ulong)dVar81 >> 0x20);
          uVar68 = (char)((ulong)dVar81 >> 0x28);
          uVar71 = (char)((ulong)dVar81 >> 0x30);
          uVar74 = (char)((ulong)dVar81 >> 0x38);
          if (DAT_003c99a0 <= dVar81) {
            uVar75 = SUB81(DAT_003c99a0,0);
            uVar78 = uVar85;
            uVar59 = uVar58;
            uVar62 = uVar60;
            uVar65 = uVar63;
            uVar68 = uVar66;
            uVar71 = uVar69;
            uVar74 = uVar72;
          }
          *pdVar49 = dVar56 * (double)CONCAT17(uVar74,CONCAT16(uVar71,CONCAT15(uVar68,CONCAT14(
                                                  uVar65,CONCAT13(uVar62,CONCAT12(uVar59,CONCAT11(
                                                  uVar78,uVar75)))))));
          pdVar48 = (double *)((long)pdVar51 + lVar32);
          pdVar52 = (double *)((long)pdVar46 + lVar32);
          lVar32 = lVar32 + 8;
          pdVar49[1] = (*pdVar48 + *pdVar52) * 0.5;
          pdVar49 = pdVar49 + 2;
        } while (lVar32 != ((long)(int)uVar8 + 1) * 8);
      }
      else {
        auVar87 = NEON_fmov(0x3fe0000000000000,8);
        uVar30 = (uVar8 - 1 >> 1) + 1;
        auVar89._8_8_ = _UNK_003c99c8;
        auVar89._0_8_ = _DAT_003c99c0;
        uVar45 = 0;
        uVar25 = uVar30 * 2;
        pdVar49 = pdVar51;
        pdVar48 = pdVar46;
        pdVar52 = pdVar50;
        do {
          dVar13 = *pdVar49;
          dVar14 = pdVar49[1];
          dVar55 = pdVar48[1];
          dVar81 = *pdVar48;
          uVar45 = uVar45 + 1;
          dVar54 = dVar13 - dVar81;
          dVar94 = dVar14 - dVar55;
          auVar82._0_8_ = -(ulong)(dVar54 < _DAT_003c99c0);
          auVar82._8_8_ = -(ulong)(dVar94 < _UNK_003c99c8);
          auVar83[8] = SUB81(dVar94,0);
          auVar83._0_8_ = dVar54;
          auVar83[9] = (char)((ulong)dVar94 >> 8);
          auVar83[10] = (char)((ulong)dVar94 >> 0x10);
          auVar83[0xb] = (char)((ulong)dVar94 >> 0x18);
          auVar83[0xc] = (char)((ulong)dVar94 >> 0x20);
          auVar83[0xd] = (char)((ulong)dVar94 >> 0x28);
          auVar83[0xe] = (char)((ulong)dVar94 >> 0x30);
          auVar83[0xf] = (char)((ulong)dVar94 >> 0x38);
          auVar83 = auVar89 ^ (auVar89 ^ auVar83) & auVar82;
          *pdVar52 = dVar56 * auVar83._0_8_;
          pdVar52[1] = (dVar81 + dVar13) * auVar87._0_8_;
          pdVar52[2] = dVar56 * auVar83._8_8_;
          pdVar52[3] = (dVar55 + dVar14) * auVar87._8_8_;
          pdVar52 = pdVar52 + 4;
          pdVar49 = pdVar49 + 2;
          pdVar48 = pdVar48 + 2;
        } while (uVar45 < uVar30);
        if (uVar1 != uVar25) {
          lVar32 = (long)(int)uVar25;
          dVar81 = pdVar51[lVar32] - pdVar46[lVar32];
          uVar75 = SUB81(dVar81,0);
          uVar78 = (char)((ulong)dVar81 >> 8);
          uVar59 = (char)((ulong)dVar81 >> 0x10);
          uVar62 = (char)((ulong)dVar81 >> 0x18);
          uVar65 = (char)((ulong)dVar81 >> 0x20);
          uVar68 = (char)((ulong)dVar81 >> 0x28);
          uVar71 = (char)((ulong)dVar81 >> 0x30);
          uVar74 = (char)((ulong)dVar81 >> 0x38);
          if (DAT_003c99a0 <= dVar81) {
            uVar75 = SUB81(DAT_003c99a0,0);
            uVar78 = uVar85;
            uVar59 = uVar58;
            uVar62 = uVar60;
            uVar65 = uVar63;
            uVar68 = uVar66;
            uVar71 = uVar69;
            uVar74 = uVar72;
          }
          pdVar50[lVar32 * 2] =
               dVar56 * (double)CONCAT17(uVar74,CONCAT16(uVar71,CONCAT15(uVar68,CONCAT14(uVar65,
                                                  CONCAT13(uVar62,CONCAT12(uVar59,CONCAT11(uVar78,
                                                  uVar75)))))));
          (pdVar50 + lVar32 * 2)[1] = (pdVar51[lVar32] + pdVar46[lVar32]) * 0.5;
        }
      }
      pdVar48 = (double *)0x0;
    }
    else {
      dVar56 = DAT_003c9988;
      dVar81 = DAT_003c9998;
      if (!param_5) {
LAB_003c8dac:
        dVar81 = DAT_003c99a0;
      }
      if (uVar7 != 5) goto LAB_003c8db8;
      uVar30 = (uVar8 - 3 >> 2) + 1;
      pdVar48 = pdVar49 + (int)(uVar1 * 2);
      uVar45 = uVar30 * 4;
      uVar47 = (ulong)uVar45;
      if (uVar8 < 3) {
        uVar47 = 0;
LAB_003c9104:
        uVar27 = -(uVar47 >> 0x1f) & 0xfffffff800000000 | uVar47 << 3;
        dVar55 = *(double *)((long)pdVar51 + uVar27);
        dVar54 = *(double *)((long)pdVar46 + uVar27);
        dVar94 = dVar55 - dVar54;
        if (dVar81 <= dVar94) {
          dVar94 = dVar81;
        }
        *(float *)((long)pdVar48 + uVar27) = (float)(dVar56 * dVar94);
        ((float *)((long)pdVar48 + uVar27))[1] = (float)((dVar55 + dVar54) * 0.5);
        if ((int)uVar47 + 1 < (int)uVar1) {
          lVar32 = uVar27 + 8;
          dVar55 = *(double *)((long)pdVar51 + lVar32);
          dVar54 = *(double *)((long)pdVar46 + lVar32);
          dVar94 = dVar55 - dVar54;
          if (dVar81 <= dVar94) {
            dVar94 = dVar81;
          }
          *(float *)((long)pdVar48 + lVar32) = (float)(dVar56 * dVar94);
          ((float *)((long)pdVar48 + lVar32))[1] = (float)((dVar55 + dVar54) * 0.5);
          if ((int)uVar47 + 2 < (int)uVar1) {
            lVar32 = uVar27 + 0x10;
            dVar55 = *(double *)((long)pdVar51 + lVar32);
            dVar54 = *(double *)((long)pdVar46 + lVar32);
            dVar94 = dVar55 - dVar54;
            if (dVar81 <= dVar94) {
              dVar94 = dVar81;
            }
            *(float *)((long)pdVar48 + lVar32) = (float)(dVar56 * dVar94);
            ((float *)((long)pdVar48 + lVar32))[1] = (float)((dVar55 + dVar54) * 0.5);
          }
        }
      }
      else {
        auVar89 = NEON_fmov(0x3fe0000000000000,8);
        uVar25 = 0;
        pdVar49 = pdVar51;
        pdVar50 = pdVar46;
        pdVar52 = pdVar48;
        do {
          uVar25 = uVar25 + 1;
          dVar92 = pdVar50[3];
          dVar91 = pdVar50[2];
          dVar86 = *pdVar49 - *pdVar50;
          dVar88 = pdVar49[1] - pdVar50[1];
          dVar13 = pdVar49[3];
          dVar94 = pdVar49[2];
          dVar14 = dVar94 - dVar91;
          dVar90 = dVar13 - dVar92;
          dVar55 = (*pdVar49 + *pdVar50) * auVar89._0_8_;
          dVar54 = (pdVar49[1] + pdVar50[1]) * auVar89._8_8_;
          auVar87[8] = SUB81(dVar54,0);
          auVar87._0_8_ = dVar55;
          auVar87[9] = (char)((ulong)dVar54 >> 8);
          auVar87[10] = (char)((ulong)dVar54 >> 0x10);
          auVar87[0xb] = (char)((ulong)dVar54 >> 0x18);
          auVar87[0xc] = (char)((ulong)dVar54 >> 0x20);
          auVar87[0xd] = (char)((ulong)dVar54 >> 0x28);
          auVar87[0xe] = (char)((ulong)dVar54 >> 0x30);
          auVar87[0xf] = (char)((ulong)dVar54 >> 0x38);
          fVar11 = (float)dVar55;
          fVar12 = (float)auVar87._8_8_;
          uStack_b2c = (uint)(CONCAT17((char)((uint)fVar12 >> 0x18),
                                       CONCAT16((char)((uint)fVar12 >> 0x10),
                                                CONCAT15((char)((uint)fVar12 >> 8),
                                                         CONCAT14(SUB41(fVar12,0),fVar11)))) >> 0x20
                             );
          *(float *)pdVar52 =
               (float)(dVar56 * (double)((ulong)dVar81 ^
                                        ((ulong)dVar81 ^ (ulong)dVar86) & -(ulong)(dVar86 < dVar81))
                      );
          *(float *)((long)pdVar52 + 4) = fVar11;
          *(float *)(pdVar52 + 1) =
               (float)(dVar56 * (double)((ulong)dVar81 ^
                                        ((ulong)dVar81 ^ (ulong)dVar88) & -(ulong)(dVar88 < dVar81))
                      );
          *(uint *)((long)pdVar52 + 0xc) = uStack_b2c;
          *(float *)(pdVar52 + 2) =
               (float)(dVar56 * (double)((ulong)dVar81 ^
                                        ((ulong)dVar81 ^ (ulong)dVar14) & -(ulong)(dVar14 < dVar81))
                      );
          *(float *)((long)pdVar52 + 0x14) = (float)((dVar94 + dVar91) * auVar89._0_8_);
          *(float *)(pdVar52 + 3) =
               (float)(dVar56 * (double)((ulong)dVar81 ^
                                        ((ulong)dVar81 ^ (ulong)dVar90) & -(ulong)(dVar90 < dVar81))
                      );
          *(float *)((long)pdVar52 + 0x1c) = (float)((dVar13 + dVar92) * auVar89._8_8_);
          pdVar52 = pdVar52 + 4;
          pdVar49 = pdVar49 + 4;
          pdVar50 = pdVar50 + 4;
        } while (uVar25 < uVar30);
        if (uVar45 != uVar1) goto LAB_003c9104;
      }
      pdVar50 = (double *)0x0;
    }
    local_a88 = 1;
    pdVar46 = (double *)0x0;
    pdVar49 = (double *)0x0;
    local_aa8 = (code *)(&PTR_FUN_004f79f0)[(int)uVar7];
  }
  if (local_aa8 == (code *)0x0) {
    local_a30 = local_aa8;
    local_a28 = local_aa8;
    pcVar29 = (char *)String::allocate((String *)&local_a30,9);
    cVar10 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar29 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar29[8] = cVar10;
    error(-0xd7,(String *)&local_a30,
          "void cv::RNG::fill(cv::InputOutputArray, int, cv::InputArray, cv::InputArray, bool)",
          "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x269);
    String::deallocate((String *)&local_a30);
  }
  pdVar51 = (double *)0x0;
  local_a84 = false;
  pdVar52 = (double *)0x0;
  local_a90 = (code *)0x0;
LAB_003c77dc:
  uStack_a08 = 0;
  local_a10 = local_a80;
  NAryMatIterator::NAryMatIterator((NAryMatIterator *)&local_a00,&local_a10,&local_a58,-1);
  uVar7 = 0;
  if (uVar1 != 0) {
    uVar7 = (uVar8 + 0x400) / uVar1;
  }
  if ((int)local_9d8 < (int)uVar7) {
    uVar7 = local_9d8;
  }
  if (local_9bc < 1) {
    local_ac0 = 0;
  }
  else {
    local_ac0 = local_978[(long)local_9bc + -1];
  }
  local_450 = auStack_440;
  local_448 = 0x88;
  if (param_2 == 0) {
    iVar23 = uVar1 * uVar7;
    uVar47 = (ulong)(iVar23 * 4);
    if (0x88 < uVar47) {
      uVar27 = uVar47 << 3;
      if (0xfe0000000000000 < uVar47) {
        uVar27 = 0xffffffffffffffff;
      }
      local_450 = operator_new__(uVar27);
    }
    if (pdVar49 == (double *)0x0) {
      if (pdVar48 == (double *)0x0) {
        if (0 < iVar23) {
          puVar37 = local_450;
          uVar30 = uVar1;
          do {
            lVar32 = 0;
            do {
              puVar35 = (undefined8 *)((long)pdVar50 + lVar32);
              puVar38 = (undefined8 *)(puVar37 + lVar32);
              lVar32 = lVar32 + 0x10;
              uVar57 = puVar35[1];
              *puVar38 = *puVar35;
              puVar38[1] = uVar57;
            } while (lVar32 != ((long)(int)uVar8 + 1) * 0x10);
            puVar37 = puVar37 + (long)(int)uVar1 * 0x10;
            bVar21 = (int)uVar30 < iVar23;
            uVar30 = uVar30 + uVar1;
          } while (bVar21);
        }
      }
      else if (0 < iVar23) {
        puVar37 = local_450;
        uVar30 = uVar1;
        do {
          lVar32 = 0;
          do {
            *(undefined8 *)(puVar37 + lVar32) = *(undefined8 *)((long)pdVar48 + lVar32);
            lVar32 = lVar32 + 8;
          } while (lVar32 != ((long)(int)uVar8 + 1) * 8);
          puVar37 = puVar37 + (long)(int)uVar1 * 8;
          bVar21 = (int)uVar30 < iVar23;
          uVar30 = uVar30 + uVar1;
        } while (bVar21);
      }
    }
    else if (pdVar46 == (double *)0x0) {
      if (0 < iVar23) {
        puVar37 = local_450;
        uVar30 = uVar1;
        do {
          lVar32 = 0;
          do {
            *(undefined8 *)(puVar37 + lVar32) = *(undefined8 *)((long)pdVar49 + lVar32);
            lVar32 = lVar32 + 8;
          } while (lVar32 != ((long)(int)uVar8 + 1) * 8);
          puVar37 = puVar37 + (long)(int)uVar1 * 8;
          bVar21 = (int)uVar30 < iVar23;
          uVar30 = uVar30 + uVar1;
        } while (bVar21);
      }
    }
    else if (0 < iVar23) {
      puVar37 = local_450;
      uVar30 = uVar1;
      do {
        lVar32 = 0;
        do {
          puVar35 = (undefined8 *)((long)pdVar46 + lVar32);
          puVar38 = (undefined8 *)(puVar37 + lVar32);
          lVar32 = lVar32 + 0x14;
          uVar57 = puVar35[1];
          *puVar38 = *puVar35;
          puVar38[1] = uVar57;
          *(undefined4 *)(puVar38 + 2) = *(undefined4 *)(puVar35 + 2);
        } while (lVar32 != ((long)(int)uVar8 + 1) * 0x14);
        puVar37 = puVar37 + (long)(int)uVar1 * 0x14;
        bVar21 = (int)uVar30 < iVar23;
        uVar30 = uVar30 + uVar1;
      } while (bVar21);
    }
    puVar37 = (undefined1 *)0x0;
    local_aa0 = local_450;
    local_448 = uVar47;
  }
  else {
    uVar47 = (ulong)((int)(uVar1 * uVar7 + 1) / 2);
    if (0x88 < uVar47) {
      uVar27 = uVar47 << 3;
      if (0xfe0000000000000 < uVar47) {
        uVar27 = 0xffffffffffffffff;
      }
      local_450 = operator_new__(uVar27);
    }
    local_aa0 = (undefined1 *)0x0;
    puVar37 = local_450;
    local_448 = uVar47;
  }
  fVar12 = DAT_003c99fc;
  fVar11 = DAT_003c99f8;
  local_a68 = 0;
  if (local_9e0 != 0) {
    do {
      if (0 < (int)local_9d8) {
        iVar23 = 0;
        local_ac8 = uVar7;
        do {
          dVar81 = DAT_003c99f0;
          dVar56 = DAT_003c99e8;
          uVar8 = uVar7;
          if ((int)(iVar23 + local_9d8) < (int)uVar7) {
            uVar8 = iVar23 + local_9d8;
          }
          if (param_2 == 0) {
            (*local_aa8)(local_a58,uVar1 * uVar8,this,local_aa0,local_a88);
          }
          else {
            iVar9 = uVar1 * uVar8;
            uVar47 = *(ulong *)this;
            if (DAT_005332e0 == '\0') {
              DAT_00532ee0 = 0x76ad2212;
              DAT_005332f0 = DAT_003c99d0;
              DAT_005330e0 = 0x3f800000;
              DAT_005334ec = DAT_003c99d4;
              DAT_005332dc = DAT_003c99d8;
              DAT_00532ee4 = 0;
              lVar32 = 0;
              dVar55 = DAT_003c99a8;
              do {
                dVar54 = ::exp(dVar55 * dVar55 * -0.5);
                dVar54 = ::log(DAT_003c99e0 / dVar55 + dVar54);
                dVar94 = SQRT(dVar54 * -2.0);
                if (NAN(dVar94)) {
                  dVar94 = ::sqrt(dVar54 * -2.0);
                }
                *(int *)((long)&DAT_005330dc + lVar32) = (int)((dVar94 / dVar55) * dVar56);
                dVar55 = ::exp(dVar94 * dVar94 * -0.5);
                lVar53 = lVar32 + -4;
                *(float *)((long)&DAT_005332d8 + lVar32) = (float)dVar55;
                *(float *)((long)&DAT_005334e8 + lVar32) = (float)(dVar94 * dVar81);
                lVar32 = lVar53;
                dVar55 = dVar94;
              } while (lVar53 != -0x1f8);
              DAT_005332e0 = '\x01';
            }
            fVar16 = DAT_003c9a0c;
            fVar15 = DAT_003c9a08;
            if (0 < iVar9) {
              lVar32 = 0;
LAB_003c7b94:
              do {
                while( true ) {
                  uVar45 = (uint)uVar47;
                  uVar27 = uVar47 & 0x7f;
                  uVar30 = uVar45 & 0x7f;
                  fVar80 = (float)(&DAT_005332f0)[(int)uVar30];
                  uVar47 = (uVar47 >> 0x20) + (uVar47 & 0xffffffff) * 0xf83f630a;
                  if ((uint)(&DAT_00532ee0)[(int)uVar30] <=
                      (uVar45 ^ (int)uVar45 >> 0x1f) - ((int)uVar45 >> 0x1f)) break;
LAB_003c7be0:
                  *(float *)(puVar37 + lVar32 * 4) = (float)(int)uVar45 * fVar80;
joined_r0x003c80cc:
                  iVar24 = (int)lVar32;
                  lVar32 = lVar32 + 1;
                  if (iVar9 <= iVar24 + 1) goto LAB_003c7bf0;
                }
                if (uVar27 != 0) {
                  uVar27 = uVar47 & 0xffffffff;
                  fVar84 = (float)(&DAT_005330e0)[(int)uVar30];
                  fVar93 = (float)(&DAT_005330e0)[(int)(uVar30 - 1)];
                  dVar56 = (double)((float)(int)uVar45 * fVar80);
                  uVar47 = (uVar47 >> 0x20) + (uVar47 & 0xffffffff) * 0xf83f630a;
                  dVar56 = ::exp(dVar56 * dVar56 * -0.5);
                  if ((double)(fVar84 + (fVar93 - fVar84) * (float)uVar27 * fVar11) < dVar56)
                  goto LAB_003c7be0;
                  goto LAB_003c7b94;
                }
                do {
                  uVar27 = uVar47 & 0xffffffff;
                  uVar28 = (uVar47 >> 0x20) + (uVar47 & 0xffffffff) * 0xf83f630a;
                  uVar47 = (uVar28 >> 0x20) + (uVar28 & 0xffffffff) * 0xf83f630a;
                  fVar80 = logf(fVar12 + fVar11 * (float)uVar27);
                  fVar84 = (float)((double)-fVar80 * DAT_003c9a00);
                  fVar80 = logf((float)(uVar28 & 0xffffffff) * fVar11 + fVar12);
                } while (-fVar80 + -fVar80 < fVar84 * fVar84);
                if ((int)uVar45 < 1) {
                  *(float *)(puVar37 + lVar32 * 4) = fVar16 - fVar84;
                  goto joined_r0x003c80cc;
                }
                *(float *)(puVar37 + lVar32 * 4) = fVar84 + fVar15;
                lVar32 = lVar32 + 1;
              } while ((int)lVar32 < iVar9);
            }
LAB_003c7bf0:
            *(ulong *)this = uVar47;
            (*local_a90)(puVar37,local_a58,uVar8,uVar1,pdVar52,pdVar51,local_a84);
          }
          iVar23 = iVar23 - uVar7;
          local_a58 = local_a58 + (int)uVar8 * local_ac0;
          bVar21 = (int)local_ac8 < (int)local_9d8;
          local_ac8 = local_ac8 + uVar7;
        } while (bVar21);
      }
      local_a68 = local_a68 + 1;
      NAryMatIterator::operator++((NAryMatIterator *)&local_a00);
    } while (local_a68 < local_9e0);
  }
  if ((local_450 != auStack_440) && (local_450 != (undefined1 *)0x0)) {
    operator_delete__(local_450);
  }
  if ((local_8a0 != adStack_890) && (local_8a0 != (double *)0x0)) {
    operator_delete__(local_8a0);
  }
  if (local_8c8 != 0) {
    piVar5 = (int *)(local_8c8 + 0x14);
    do {
      iVar23 = *piVar5;
      cVar10 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar21) {
        *piVar5 = iVar23 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_ae0);
    }
  }
  local_8c8 = 0;
  local_8f0 = (double *)0x0;
  local_8d8 = 0;
  local_8e0 = 0;
  local_8e8 = 0;
  if (0 < local_8fc) {
    iVar23 = 0;
    puVar33 = local_8c0;
    do {
      iVar23 = iVar23 + 1;
      *puVar33 = 0;
      puVar33 = puVar33 + 1;
    } while (iVar23 < local_8fc);
  }
  if (local_8b8 != &local_8b0) {
    fastFree(local_8b8);
  }
  if (local_928 != 0) {
    piVar5 = (int *)(local_928 + 0x14);
    do {
      iVar23 = *piVar5;
      cVar10 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar21) {
        *piVar5 = iVar23 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_ae8);
    }
  }
  local_928 = 0;
  local_950 = (double *)0x0;
  local_938 = 0;
  local_940 = 0;
  local_948 = 0;
  if (0 < local_95c) {
    iVar23 = 0;
    puVar33 = local_920;
    do {
      iVar23 = iVar23 + 1;
      *puVar33 = 0;
      puVar33 = puVar33 + 1;
    } while (iVar23 < local_95c);
  }
  if (local_918 != &local_910) {
    fastFree(local_918);
  }
  if (local_988 != 0) {
    piVar5 = (int *)(local_988 + 0x14);
    do {
      iVar23 = *piVar5;
      cVar10 = '\x01';
      bVar21 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar21) {
        *piVar5 = iVar23 + -1;
        cVar10 = ExclusiveMonitorsStatus();
      }
    } while (cVar10 != '\0');
    if (iVar23 == 1) {
      Mat::deallocate(local_a80);
    }
  }
  local_988 = 0;
  local_9b0 = 0;
  local_998 = 0;
  local_9a0 = 0;
  local_9a8 = 0;
  if (0 < local_9bc) {
    iVar23 = 0;
    puVar34 = local_980;
    do {
      iVar23 = iVar23 + 1;
      *puVar34 = 0;
      puVar34 = puVar34 + 1;
    } while (iVar23 < local_9bc);
  }
  if (local_978 != &local_970) {
    fastFree(local_978);
  }
  return;
}


==================================================================

### FUNC 003c9a10 (28 bytes) name=theRNG

/* cv::theRNG() */

void cv::theRNG(void)

{
  TLSDataContainer *this;
  
  this = (TLSDataContainer *)FUN_003b7ff8();
  TLSDataContainer::getData(this);
  return;
}


==================================================================

### FUNC 003c9a2c (56 bytes) name=randu

/* cv::randu(cv::_InputOutputArray const&, cv::_InputArray const&, cv::_InputArray const&) */

void cv::randu(_InputOutputArray *param_1,_InputArray *param_2,_InputArray *param_3)

{
  RNG *this;
  
  this = (RNG *)theRNG();
  RNG::fill(this,param_1,0,param_2,param_3,false);
  return;
}


==================================================================

### FUNC 003c9a64 (56 bytes) name=randn

/* cv::randn(cv::_InputOutputArray const&, cv::_InputArray const&, cv::_InputArray const&) */

void cv::randn(_InputOutputArray *param_1,_InputArray *param_2,_InputArray *param_3)

{
  RNG *this;
  
  this = (RNG *)theRNG();
  RNG::fill(this,param_1,1,param_2,param_3,false);
  return;
}


==================================================================

### FUNC 003c9a9c (748 bytes) name=randShuffle

/* cv::randShuffle(cv::_InputOutputArray const&, double, cv::RNG*) */

void cv::randShuffle(_InputOutputArray *param_1,double param_2,RNG *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  ulong uVar7;
  char *pcVar8;
  undefined4 *puVar9;
  Mat *pMVar10;
  code *pcVar11;
  undefined8 local_188;
  undefined8 local_180;
  code *local_178;
  code *local_170;
  undefined4 local_168;
  int local_164;
  undefined4 local_160;
  undefined4 local_15c;
  undefined8 local_158;
  undefined8 local_150;
  undefined8 local_148;
  undefined8 local_140;
  undefined8 local_138;
  long local_130;
  undefined4 *local_128;
  undefined8 *local_120;
  undefined8 local_118;
  undefined8 local_110;
  undefined8 local_108 [33];
  
  memcpy(local_108,&DAT_00509400,0x108);
  iVar6 = _InputArray::kind((_InputArray *)param_1);
  if (iVar6 == 0x10000) {
    pMVar10 = *(Mat **)(param_1 + 8);
    local_128 = &local_160;
    local_120 = &local_118;
    local_168 = *(undefined4 *)pMVar10;
    local_164 = *(int *)(pMVar10 + 4);
    local_160 = *(undefined4 *)(pMVar10 + 8);
    local_15c = *(undefined4 *)(pMVar10 + 0xc);
    local_158 = *(undefined8 *)(pMVar10 + 0x10);
    local_150 = *(undefined8 *)(pMVar10 + 0x18);
    local_148 = *(undefined8 *)(pMVar10 + 0x20);
    local_140 = *(undefined8 *)(pMVar10 + 0x28);
    local_138 = *(undefined8 *)(pMVar10 + 0x30);
    local_130 = *(long *)(pMVar10 + 0x38);
    local_110 = 0;
    local_118 = 0;
    if (local_130 != 0) {
      piVar1 = (int *)(local_130 + 0x14);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (*(int *)(pMVar10 + 4) < 3) {
      local_118 = **(undefined8 **)(pMVar10 + 0x48);
      local_110 = (*(undefined8 **)(pMVar10 + 0x48))[1];
    }
    else {
      local_164 = 0;
      Mat::copySize((Mat *)&local_168,pMVar10);
    }
  }
  else {
    _InputArray::getMat_((int)param_1);
  }
  if (param_3 == (RNG *)0x0) {
    param_3 = (RNG *)theRNG();
  }
  if (local_164 < 1) {
LAB_003c9d60:
    uVar7 = 0;
  }
  else {
    uVar7 = local_120[(long)local_164 + -1];
    if (0x20 < uVar7) {
      local_188 = 0;
      local_180 = 0;
      pcVar8 = (char *)String::allocate((String *)&local_188,0x14);
      uVar5 = s_dst_elemSize___<__32_00477768._8_8_;
      uVar4 = s_dst_elemSize___<__32_00477768._0_8_;
      *(undefined4 *)(pcVar8 + 0x10) = s_dst_elemSize___<__32_00477768._16_4_;
      *(undefined8 *)pcVar8 = uVar4;
      *(undefined8 *)(pcVar8 + 8) = uVar5;
      error(-0xd7,(String *)&local_188,
            "void cv::randShuffle(cv::InputOutputArray, double, cv::RNG*)",
            "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x32d);
      String::deallocate((String *)&local_188);
      if (0 < local_164) {
        pcVar11 = (code *)local_108[local_120[(long)local_164 + -1]];
        goto joined_r0x003c9c40;
      }
      goto LAB_003c9d60;
    }
  }
  pcVar11 = (code *)local_108[uVar7];
joined_r0x003c9c40:
  if (pcVar11 == (code *)0x0) {
    local_178 = pcVar11;
    local_170 = pcVar11;
    pcVar8 = (char *)String::allocate((String *)&local_178,9);
    cVar2 = s_src_dims_<__2_&&_src_channels()___0046bcc0[0x30];
    *(undefined8 *)pcVar8 = s_src_dims_<__2_&&_src_channels()___0046bcc0._40_8_;
    pcVar8[8] = cVar2;
    error(-0xd7,(String *)&local_178,"void cv::randShuffle(cv::InputOutputArray, double, cv::RNG*)",
          "/builds/master_pack-android/opencv/modules/core/src/rand.cpp",0x32f);
    String::deallocate((String *)&local_178);
  }
  (*pcVar11)(param_2,(Mat *)&local_168,param_3);
  if (local_130 != 0) {
    piVar1 = (int *)(local_130 + 0x14);
    do {
      iVar6 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar6 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar6 == 1) {
      Mat::deallocate((Mat *)&local_168);
    }
  }
  local_130 = 0;
  local_158 = 0;
  local_140 = 0;
  local_148 = 0;
  local_150 = 0;
  if (0 < local_164) {
    iVar6 = 0;
    puVar9 = local_128;
    do {
      *puVar9 = 0;
      iVar6 = iVar6 + 1;
      puVar9 = puVar9 + 1;
    } while (iVar6 < local_164);
  }
  if (local_120 != &local_118) {
    fastFree(local_120);
  }
  return;
}


==================================================================

### FUNC 003c9dd4 (420 bytes) name=cvRandArr

void cvRandArr(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
              undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8,
              RNG *param_9,cv *param_10,int param_11,undefined8 param_12,undefined8 param_13,
              AutoBuffer *param_14)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined4 local_e8 [2];
  Mat *local_e0;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_d0 [2];
  undefined8 *local_c8;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8 [2];
  undefined8 *local_b0;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined8 uStack_a0;
  undefined8 uStack_98;
  undefined8 local_90;
  undefined8 uStack_88;
  undefined8 uStack_80;
  undefined8 uStack_78;
  undefined8 local_70;
  undefined8 uStack_68;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_10,(void *)0x0,true,false,0,param_14);
  if (param_9 == (RNG *)0x0) {
    param_9 = (RNG *)cv::theRNG();
  }
  local_c8 = &uStack_a0;
  local_b0 = &uStack_80;
  local_d8 = 0;
  local_d4 = 0;
  local_e8[0] = 0x3010000;
  local_d0[0] = 0xc1020006;
  local_c0 = 1;
  local_bc = 4;
  local_b8[0] = 0xc1020006;
  local_a8 = 1;
  local_a4 = 4;
  local_e0 = aMStack_60;
  uStack_a0 = param_1;
  uStack_98 = param_2;
  local_90 = param_3;
  uStack_88 = param_4;
  uStack_80 = param_5;
  uStack_78 = param_6;
  local_70 = param_7;
  uStack_68 = param_8;
  cv::RNG::fill(param_9,(_InputOutputArray *)local_e8,(uint)(param_11 == 1),(_InputArray *)local_d0,
                (_InputArray *)local_b8,false);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 003c9fa0 (252 bytes) name=cvRandShuffle

void cvRandShuffle(double param_1,cv *param_2,RNG *param_3)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  AutoBuffer *in_x5;
  undefined4 local_78 [2];
  Mat *local_70;
  undefined4 local_68;
  undefined4 local_64;
  Mat aMStack_60 [4];
  int local_5c;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  long local_28;
  undefined4 *local_20;
  undefined1 *local_18;
  undefined1 auStack_10 [16];
  
  cv::cvarrToMat(param_2,(void *)0x0,true,false,0,in_x5);
  if (param_3 == (RNG *)0x0) {
    param_3 = (RNG *)cv::theRNG();
  }
  local_68 = 0;
  local_64 = 0;
  local_78[0] = 0x3010000;
  local_70 = aMStack_60;
  cv::randShuffle((_InputOutputArray *)local_78,param_1,param_3);
  if (local_28 != 0) {
    piVar1 = (int *)(local_28 + 0x14);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar4 == 1) {
      cv::Mat::deallocate(aMStack_60);
    }
  }
  local_28 = 0;
  local_50 = 0;
  local_38 = 0;
  local_40 = 0;
  local_48 = 0;
  if (0 < local_5c) {
    iVar4 = 0;
    do {
      *local_20 = 0;
      iVar4 = iVar4 + 1;
      local_20 = local_20 + 1;
    } while (iVar4 < local_5c);
  }
  if (local_18 != auStack_10) {
    cv::fastFree(local_18);
  }
  return;
}


==================================================================

### FUNC 003ca0c4 (56 bytes) name=seed

/* cv::RNG_MT19937::seed(unsigned int) */

void __thiscall cv::RNG_MT19937::seed(RNG_MT19937 *this,uint param_1)

{
  int iVar1;
  RNG_MT19937 *pRVar2;
  
  iVar1 = 1;
  *(uint *)this = param_1;
  pRVar2 = this;
  do {
    pRVar2 = pRVar2 + 4;
    param_1 = iVar1 + (param_1 ^ param_1 >> 0x1e) * 0x6c078965;
    iVar1 = iVar1 + 1;
    *(uint *)pRVar2 = param_1;
  } while (iVar1 != 0x270);
  *(undefined4 *)(this + 0x9c0) = 0x270;
  return;
}


==================================================================

### FUNC 003ca0fc (4 bytes) name=RNG_MT19937

/* cv::RNG_MT19937::RNG_MT19937(unsigned int) */

void __thiscall cv::RNG_MT19937::RNG_MT19937(RNG_MT19937 *this,uint param_1)

{
  (*(code *)PTR_seed_00500fc8)(this,param_1);
  return;
}


==================================================================

### FUNC 003ca100 (8 bytes) name=RNG_MT19937

/* cv::RNG_MT19937::RNG_MT19937() */

void __thiscall cv::RNG_MT19937::RNG_MT19937(RNG_MT19937 *this)

{
  seed(this,0x1571);
  return;
}


==================================================================

### FUNC 003ca108 (256 bytes) name=next

/* cv::RNG_MT19937::next() */

uint __thiscall cv::RNG_MT19937::next(RNG_MT19937 *this)

{
  RNG_MT19937 *pRVar1;
  uint uVar2;
  int iVar3;
  RNG_MT19937 *pRVar4;
  int iVar5;
  uint uVar6;
  
  iVar3 = *(int *)(this + 0x9c0);
  if (iVar3 < 0x270) {
    iVar5 = iVar3 + 1;
    uVar6 = *(uint *)(this + (long)iVar3 * 4);
  }
  else {
    uVar6 = *(uint *)this;
    pRVar4 = this + 4;
    do {
      uVar2 = uVar6 & 0x80000000;
      uVar6 = *(uint *)pRVar4;
      pRVar1 = pRVar4 + 4;
      *(uint *)(pRVar4 + -4) =
           *(uint *)(pRVar4 + 0x630) ^ (uVar6 & 0x7fffffff | uVar2) >> 1 ^
           *(uint *)(&LAB_004774d0 + (ulong)(uVar6 & 1) * 4);
      pRVar4 = pRVar1;
    } while (pRVar1 != this + 0x390);
    uVar6 = *(uint *)(this + 0x38c);
    pRVar4 = this + 0x390;
    do {
      uVar2 = uVar6 & 0x80000000;
      uVar6 = *(uint *)pRVar4;
      pRVar1 = pRVar4 + 4;
      *(uint *)(pRVar4 + -4) =
           *(uint *)(pRVar4 + -0x390) ^ (uVar6 & 0x7fffffff | uVar2) >> 1 ^
           *(uint *)(&LAB_004774d0 + (ulong)(uVar6 & 1) * 4);
      pRVar4 = pRVar1;
    } while (pRVar1 != this + 0x9c0);
    iVar5 = 1;
    uVar6 = *(uint *)this;
    *(uint *)(this + 0x9bc) =
         *(uint *)(this + 0x630) ^ (uVar6 & 0x7fffffff | *(uint *)(this + 0x9bc) & 0x80000000) >> 1
         ^ *(uint *)(&LAB_004774d0 + (ulong)(uVar6 & 1) * 4);
  }
  uVar6 = uVar6 ^ uVar6 >> 0xb;
  *(int *)(this + 0x9c0) = iVar5;
  uVar6 = (uVar6 & 0x13a58ad) << 7 ^ uVar6;
  uVar6 = (uVar6 & 0x1df8c) << 0xf ^ uVar6;
  return uVar6 ^ uVar6 >> 0x12;
}


==================================================================

### FUNC 003ca208 (4 bytes) name=operator.cast.to.unsigned_int

/* cv::RNG_MT19937::operator unsigned int() */

uint __thiscall cv::RNG_MT19937::operator_cast_to_unsigned_int(RNG_MT19937 *this)

{
  uint uVar1;
  
  uVar1 = (*(code *)PTR_next_005000c8)((int)this);
  return uVar1;
}


==================================================================

### FUNC 003ca20c (4 bytes) name=operator.cast.to.int

/* cv::RNG_MT19937::operator int() */

int __thiscall cv::RNG_MT19937::operator_cast_to_int(RNG_MT19937 *this)

{
  int iVar1;
  
  iVar1 = (*(code *)PTR_next_005000c8)((int)this);
  return iVar1;
}


==================================================================

### FUNC 003ca210 (36 bytes) name=operator.cast.to.float

/* cv::RNG_MT19937::operator float() */

float __thiscall cv::RNG_MT19937::operator_cast_to_float(RNG_MT19937 *this)

{
  uint uVar1;
  
  uVar1 = next(this);
  return (float)uVar1 * DAT_003ca234;
}


==================================================================

### FUNC 003ca238 (80 bytes) name=operator.cast.to.double

/* cv::RNG_MT19937::operator double() */

double __thiscall cv::RNG_MT19937::operator_cast_to_double(RNG_MT19937 *this)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar1 = next(this);
  uVar2 = next(this);
  return ((double)(uVar2 >> 6 & 0x3ffffff) + DAT_003ca288 * (double)((uVar1 & 0xffffffff) >> 5)) *
         DAT_003ca290;
}


==================================================================

### FUNC 003ca298 (56 bytes) name=uniform

/* cv::RNG_MT19937::uniform(int, int) */

int __thiscall cv::RNG_MT19937::uniform(RNG_MT19937 *this,int param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  
  uVar3 = next(this);
  uVar1 = param_2 - param_1;
  uVar2 = 0;
  if (uVar1 != 0) {
    uVar2 = uVar3 / uVar1;
  }
  return (uVar3 - uVar2 * uVar1) + param_1;
}


==================================================================

### FUNC 003ca2d0 (52 bytes) name=uniform

/* cv::RNG_MT19937::uniform(float, float) */

float __thiscall cv::RNG_MT19937::uniform(RNG_MT19937 *this,float param_1,float param_2)

{
  float fVar1;
  
  fVar1 = operator_cast_to_float(this);
  return param_1 + (param_2 - param_1) * fVar1;
}


==================================================================

### FUNC 003ca304 (52 bytes) name=uniform

/* cv::RNG_MT19937::uniform(double, double) */

double __thiscall cv::RNG_MT19937::uniform(RNG_MT19937 *this,double param_1,double param_2)

{
  double dVar1;
  
  dVar1 = operator_cast_to_double(this);
  return param_1 + (param_2 - param_1) * dVar1;
}


==================================================================

### FUNC 003ca338 (40 bytes) name=operator()

/* cv::RNG_MT19937::TEMPNAMEPLACEHOLDERVALUE(unsigned int) */

int __thiscall cv::RNG_MT19937::operator()(RNG_MT19937 *this,uint param_1)

{
  uint uVar1;
  uint uVar2;
  
  uVar2 = next(this);
  uVar1 = 0;
  if (param_1 != 0) {
    uVar1 = uVar2 / param_1;
  }
  return uVar2 - uVar1 * param_1;
}


==================================================================

### FUNC 003ca360 (4 bytes) name=operator()

/* cv::RNG_MT19937::TEMPNAMEPLACEHOLDERVALUE() */

void __thiscall cv::RNG_MT19937::operator()(RNG_MT19937 *this)

{
  (*(code *)PTR_next_005000c8)();
  return;
}


==================================================================

### FUNC 003ca370 (524 bytes) name=FUN_003ca370

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003ca370(float *param_1,undefined8 *param_2,float *param_3,int param_4,char param_5)

{
  uint uVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 uVar11;
  undefined8 uVar12;
  undefined8 uVar13;
  undefined8 uVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  undefined8 uVar19;
  undefined8 uVar20;
  long lVar21;
  undefined8 *puVar22;
  ulong uVar24;
  long lVar25;
  float *pfVar26;
  ulong uVar27;
  float *pfVar28;
  float fVar29;
  float fVar32;
  float fVar33;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  float fVar42;
  float fVar43;
  float fVar45;
  float fVar46;
  undefined1 auVar44 [16];
  float fVar47;
  undefined1 auVar48 [16];
  undefined1 auVar49 [16];
  undefined1 auVar50 [16];
  float fVar51;
  undefined8 *puVar23;
  
  uVar20 = _UNK_003ca5f8;
  uVar19 = _DAT_003ca5f0;
  uVar18 = _UNK_003ca5e8;
  uVar17 = _DAT_003ca5e0;
  uVar16 = _UNK_003ca5d8;
  uVar15 = _DAT_003ca5d0;
  uVar14 = _UNK_003ca5c8;
  uVar13 = _DAT_003ca5c0;
  uVar12 = _UNK_003ca5b8;
  uVar11 = _DAT_003ca5b0;
  uVar10 = _UNK_003ca5a8;
  uVar9 = _DAT_003ca5a0;
  uVar8 = _UNK_003ca598;
  uVar7 = _DAT_003ca590;
  uVar6 = _UNK_003ca588;
  uVar5 = _DAT_003ca580;
  fVar51 = 1.0;
  if (param_5 == '\0') {
    fVar51 = DAT_003ca57c;
  }
  if (param_4 < 4) {
    uVar24 = 0;
  }
  else {
    uVar1 = param_4 - 4U >> 2;
    puVar22 = param_2;
    pfVar26 = param_3;
    pfVar28 = param_1;
    do {
      puVar23 = puVar22 + 2;
      fVar41 = (float)puVar22[1];
      fVar42 = (float)((ulong)puVar22[1] >> 0x20);
      fVar39 = (float)*puVar22;
      fVar40 = (float)((ulong)*puVar22 >> 0x20);
      fVar2 = *pfVar28;
      fVar3 = pfVar28[1];
      fVar4 = pfVar28[3];
      auVar30._0_4_ = ABS(fVar39);
      auVar30._4_4_ = ABS(fVar40);
      auVar30._8_4_ = ABS(fVar41);
      auVar30._12_4_ = ABS(fVar42);
      fVar35 = ABS(fVar2);
      fVar36 = ABS(fVar3);
      fVar37 = ABS(pfVar28[2]);
      fVar38 = ABS(fVar4);
      auVar48._4_4_ = fVar36;
      auVar48._0_4_ = fVar35;
      auVar48._8_4_ = fVar37;
      auVar48._12_4_ = fVar38;
      auVar48 = NEON_fmax(auVar30,auVar48,4);
      auVar44._4_4_ = fVar36;
      auVar44._0_4_ = fVar35;
      auVar44._8_4_ = fVar37;
      auVar44._12_4_ = fVar38;
      auVar44 = NEON_fmin(auVar30,auVar44,4);
      auVar31._0_4_ = auVar48._0_4_ + (float)uVar5;
      auVar31._4_4_ = auVar48._4_4_ + (float)((ulong)uVar5 >> 0x20);
      auVar31._8_4_ = auVar48._8_4_ + (float)uVar6;
      auVar31._12_4_ = auVar48._12_4_ + (float)((ulong)uVar6 >> 0x20);
      auVar50 = NEON_frecpe(auVar31,4);
      auVar48 = NEON_frecps(auVar31,auVar50,4);
      auVar49._0_4_ = auVar50._0_4_ * auVar48._0_4_;
      auVar49._4_4_ = auVar50._4_4_ * auVar48._4_4_;
      auVar49._8_4_ = auVar50._8_4_ * auVar48._8_4_;
      auVar49._12_4_ = auVar50._12_4_ * auVar48._12_4_;
      auVar48 = NEON_frecps(auVar31,auVar49,4);
      fVar29 = auVar44._0_4_ * auVar49._0_4_ * auVar48._0_4_;
      fVar32 = auVar44._4_4_ * auVar49._4_4_ * auVar48._4_4_;
      fVar33 = auVar44._8_4_ * auVar49._8_4_ * auVar48._8_4_;
      fVar34 = auVar44._12_4_ * auVar49._12_4_ * auVar48._12_4_;
      fVar43 = fVar29 * fVar29;
      fVar45 = fVar32 * fVar32;
      fVar46 = fVar33 * fVar33;
      fVar47 = fVar34 * fVar34;
      fVar29 = fVar29 * ((float)uVar13 +
                        fVar43 * ((float)uVar11 + fVar43 * ((float)uVar9 + fVar43 * (float)uVar7)));
      fVar32 = fVar32 * ((float)((ulong)uVar13 >> 0x20) +
                        fVar45 * ((float)((ulong)uVar11 >> 0x20) +
                                 fVar45 * ((float)((ulong)uVar9 >> 0x20) +
                                          fVar45 * (float)((ulong)uVar7 >> 0x20))));
      fVar33 = fVar33 * ((float)uVar14 +
                        fVar46 * ((float)uVar12 + fVar46 * ((float)uVar10 + fVar46 * (float)uVar8)))
      ;
      fVar34 = fVar34 * ((float)((ulong)uVar14 >> 0x20) +
                        fVar47 * ((float)((ulong)uVar12 >> 0x20) +
                                 fVar47 * ((float)((ulong)uVar10 >> 0x20) +
                                          fVar47 * (float)((ulong)uVar8 >> 0x20))));
      fVar29 = (float)((uint)fVar29 ^
                      ((uint)fVar29 ^ (uint)((float)uVar15 - fVar29)) &
                      ~-(uint)(fVar35 <= auVar30._0_4_));
      fVar32 = (float)((uint)fVar32 ^
                      ((uint)fVar32 ^ (uint)((float)((ulong)uVar15 >> 0x20) - fVar32)) &
                      ~-(uint)(fVar36 <= auVar30._4_4_));
      fVar33 = (float)((uint)fVar33 ^
                      ((uint)fVar33 ^ (uint)((float)uVar16 - fVar33)) &
                      ~-(uint)(fVar37 <= auVar30._8_4_));
      fVar34 = (float)((uint)fVar34 ^
                      ((uint)fVar34 ^ (uint)((float)((ulong)uVar16 >> 0x20) - fVar34)) &
                      ~-(uint)(fVar38 <= auVar30._12_4_));
      fVar29 = (float)((uint)fVar29 ^
                      ((uint)fVar29 ^ (uint)((float)uVar17 - fVar29)) & -(uint)(fVar39 < 0.0));
      fVar32 = (float)((uint)fVar32 ^
                      ((uint)fVar32 ^ (uint)((float)((ulong)uVar17 >> 0x20) - fVar32)) &
                      -(uint)(fVar40 < 0.0));
      fVar33 = (float)((uint)fVar33 ^
                      ((uint)fVar33 ^ (uint)((float)uVar18 - fVar33)) & -(uint)(fVar41 < 0.0));
      fVar34 = (float)((uint)fVar34 ^
                      ((uint)fVar34 ^ (uint)((float)((ulong)uVar18 >> 0x20) - fVar34)) &
                      -(uint)(fVar42 < 0.0));
      pfVar26[2] = fVar51 * (float)((uint)fVar33 ^
                                   ((uint)fVar33 ^ (uint)((float)uVar20 - fVar33)) &
                                   -(uint)(pfVar28[2] < 0.0));
      pfVar26[3] = fVar51 * (float)((uint)fVar34 ^
                                   ((uint)fVar34 ^ (uint)((float)((ulong)uVar20 >> 0x20) - fVar34))
                                   & -(uint)(fVar4 < 0.0));
      *pfVar26 = fVar51 * (float)((uint)fVar29 ^
                                 ((uint)fVar29 ^ (uint)((float)uVar19 - fVar29)) &
                                 -(uint)(fVar2 < 0.0));
      pfVar26[1] = fVar51 * (float)((uint)fVar32 ^
                                   ((uint)fVar32 ^ (uint)((float)((ulong)uVar19 >> 0x20) - fVar32))
                                   & -(uint)(fVar3 < 0.0));
      puVar22 = puVar23;
      pfVar26 = pfVar26 + 4;
      pfVar28 = pfVar28 + 4;
    } while (puVar23 != param_2 + ((ulong)uVar1 + 1) * 2);
    uVar24 = (ulong)((uVar1 + 1) * 4);
  }
  fVar35 = DAT_003ca61c;
  fVar34 = DAT_003ca618;
  fVar33 = DAT_003ca614;
  fVar32 = DAT_003ca610;
  fVar29 = DAT_003ca60c;
  fVar4 = DAT_003ca608;
  fVar3 = DAT_003ca604;
  fVar2 = DAT_003ca600;
  if ((int)uVar24 < param_4) {
    uVar27 = -(uVar24 >> 0x1f) & 0xfffffffc00000000 | uVar24 << 2;
    lVar25 = ((ulong)(uint)((param_4 + -1) - (int)uVar24) + 1) * 4;
    lVar21 = 0;
    do {
      while( true ) {
        fVar39 = *(float *)((long)param_2 + lVar21 + uVar27);
        fVar38 = *(float *)((long)param_1 + lVar21 + uVar27);
        fVar36 = ABS(fVar39);
        fVar37 = ABS(fVar38);
        if (fVar37 <= fVar36) break;
        fVar36 = fVar36 / (fVar37 + fVar2);
        fVar37 = fVar36 * fVar36;
        fVar37 = fVar33 - fVar36 * (fVar32 + fVar37 * (fVar29 + fVar37 * (fVar4 + fVar3 * fVar37)));
        if (0.0 <= fVar39) goto LAB_003ca4f4;
LAB_003ca54c:
        fVar37 = fVar34 - fVar37;
        if (0.0 <= fVar38) goto LAB_003ca4fc;
LAB_003ca558:
        *(float *)((long)param_3 + lVar21 + uVar27) = (fVar35 - fVar37) * fVar51;
        lVar21 = lVar21 + 4;
        if (lVar21 == lVar25) {
          return;
        }
      }
      fVar37 = fVar37 / (fVar36 + fVar2);
      fVar36 = fVar37 * fVar37;
      fVar37 = (fVar32 + fVar36 * (fVar29 + fVar36 * (fVar4 + fVar3 * fVar36))) * fVar37;
      if (fVar39 < 0.0) goto LAB_003ca54c;
LAB_003ca4f4:
      if (fVar38 < 0.0) goto LAB_003ca558;
LAB_003ca4fc:
      *(float *)((long)param_3 + lVar21 + uVar27) = fVar37 * fVar51;
      lVar21 = lVar21 + 4;
    } while (lVar21 != lVar25);
  }
  return;
}


==================================================================

### FUNC 003ca620 (348 bytes) name=FUN_003ca620

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003ca620(long param_1,long param_2,long param_3,int param_4)

{
  uint uVar1;
  float *pfVar2;
  float *pfVar3;
  float *pfVar4;
  float *pfVar5;
  float *pfVar6;
  float *pfVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  undefined8 *puVar10;
  ulong uVar11;
  undefined8 *puVar12;
  float *pfVar13;
  float *pfVar14;
  long lVar15;
  ulong uVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  undefined1 auVar26 [16];
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 auVar29 [16];
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  
  uVar9 = _UNK_003ca788;
  uVar8 = _DAT_003ca780;
  if (param_4 < 8) {
    uVar16 = 0;
  }
  else {
    uVar1 = param_4 - 8U >> 3;
    pfVar13 = (float *)(param_2 + 0x10);
    puVar12 = (undefined8 *)(param_3 + 0x10);
    puVar10 = (undefined8 *)(param_1 + 0x10);
    do {
      fVar20 = (float)puVar10[1];
      fVar21 = (float)((ulong)puVar10[1] >> 0x20);
      fVar18 = (float)*puVar10;
      fVar19 = (float)((ulong)*puVar10 >> 0x20);
      pfVar14 = pfVar13 + -4;
      fVar17 = *pfVar13;
      pfVar2 = pfVar13 + 1;
      pfVar3 = pfVar13 + 2;
      pfVar4 = pfVar13 + 3;
      fVar25 = (float)puVar10[-1];
      fVar24 = (float)((ulong)puVar10[-1] >> 0x20);
      fVar22 = (float)puVar10[-2];
      fVar23 = (float)((ulong)puVar10[-2] >> 0x20);
      pfVar5 = pfVar13 + -3;
      pfVar6 = pfVar13 + -2;
      pfVar7 = pfVar13 + -1;
      puVar10 = puVar10 + 4;
      pfVar13 = pfVar13 + 8;
      fVar17 = fVar18 * fVar18 + fVar17 * fVar17;
      fVar18 = fVar19 * fVar19 + *pfVar2 * *pfVar2;
      fVar19 = fVar20 * fVar20 + *pfVar3 * *pfVar3;
      fVar20 = fVar21 * fVar21 + *pfVar4 * *pfVar4;
      fVar21 = fVar22 * fVar22 + *pfVar14 * *pfVar14;
      fVar22 = fVar23 * fVar23 + *pfVar5 * *pfVar5;
      fVar23 = fVar25 * fVar25 + *pfVar6 * *pfVar6;
      fVar25 = fVar24 * fVar24 + *pfVar7 * *pfVar7;
      auVar27._4_4_ = fVar18;
      auVar27._0_4_ = fVar17;
      auVar27._8_4_ = fVar19;
      auVar27._12_4_ = fVar20;
      auVar29._8_8_ = uVar9;
      auVar29._0_8_ = uVar8;
      auVar34 = NEON_fmax(auVar27,auVar29,4);
      auVar29 = NEON_frsqrte(auVar34,4);
      auVar31._4_4_ = fVar22;
      auVar31._0_4_ = fVar21;
      auVar31._8_4_ = fVar23;
      auVar31._12_4_ = fVar25;
      auVar33._8_8_ = uVar9;
      auVar33._0_8_ = uVar8;
      auVar35 = NEON_fmax(auVar31,auVar33,4);
      auVar33 = NEON_frsqrte(auVar35,4);
      auVar26._0_4_ = auVar34._0_4_ * auVar29._0_4_;
      auVar26._4_4_ = auVar34._4_4_ * auVar29._4_4_;
      auVar26._8_4_ = auVar34._8_4_ * auVar29._8_4_;
      auVar26._12_4_ = auVar34._12_4_ * auVar29._12_4_;
      auVar27 = NEON_frsqrts(auVar26,auVar29,4);
      auVar30._0_4_ = auVar35._0_4_ * auVar33._0_4_;
      auVar30._4_4_ = auVar35._4_4_ * auVar33._4_4_;
      auVar30._8_4_ = auVar35._8_4_ * auVar33._8_4_;
      auVar30._12_4_ = auVar35._12_4_ * auVar33._12_4_;
      auVar31 = NEON_frsqrts(auVar30,auVar33,4);
      auVar32._0_4_ = auVar33._0_4_ * auVar31._0_4_;
      auVar32._4_4_ = auVar33._4_4_ * auVar31._4_4_;
      auVar32._8_4_ = auVar33._8_4_ * auVar31._8_4_;
      auVar32._12_4_ = auVar33._12_4_ * auVar31._12_4_;
      auVar28._0_4_ = auVar29._0_4_ * auVar27._0_4_;
      auVar28._4_4_ = auVar29._4_4_ * auVar27._4_4_;
      auVar28._8_4_ = auVar29._8_4_ * auVar27._8_4_;
      auVar28._12_4_ = auVar29._12_4_ * auVar27._12_4_;
      auVar36._0_4_ = auVar35._0_4_ * auVar32._0_4_;
      auVar36._4_4_ = auVar35._4_4_ * auVar32._4_4_;
      auVar36._8_4_ = auVar35._8_4_ * auVar32._8_4_;
      auVar36._12_4_ = auVar35._12_4_ * auVar32._12_4_;
      auVar31 = NEON_frsqrts(auVar36,auVar32,4);
      auVar35._0_4_ = auVar34._0_4_ * auVar28._0_4_;
      auVar35._4_4_ = auVar34._4_4_ * auVar28._4_4_;
      auVar35._8_4_ = auVar34._8_4_ * auVar28._8_4_;
      auVar35._12_4_ = auVar34._12_4_ * auVar28._12_4_;
      auVar27 = NEON_frsqrts(auVar35,auVar28,4);
      puVar12[-1] = CONCAT44(fVar25 * auVar32._12_4_ * auVar31._12_4_,
                             fVar23 * auVar32._8_4_ * auVar31._8_4_);
      puVar12[-2] = CONCAT44(fVar22 * auVar32._4_4_ * auVar31._4_4_,
                             fVar21 * auVar32._0_4_ * auVar31._0_4_);
      puVar12[1] = CONCAT44(fVar20 * auVar28._12_4_ * auVar27._12_4_,
                            fVar19 * auVar28._8_4_ * auVar27._8_4_);
      *puVar12 = CONCAT44(fVar18 * auVar28._4_4_ * auVar27._4_4_,
                          fVar17 * auVar28._0_4_ * auVar27._0_4_);
      puVar12 = puVar12 + 4;
    } while (puVar10 != (undefined8 *)(param_1 + (ulong)uVar1 * 0x20 + 0x30));
    uVar16 = (ulong)((uVar1 + 1) * 8);
  }
  if ((int)uVar16 < param_4) {
    uVar11 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
    lVar15 = 0;
    do {
      fVar18 = *(float *)(param_2 + uVar11 + lVar15);
      fVar17 = *(float *)(param_1 + uVar11 + lVar15);
      fVar17 = fVar18 * fVar18 + fVar17 * fVar17;
      fVar18 = SQRT(fVar17);
      if (NAN(fVar18)) {
        fVar18 = sqrtf(fVar17);
      }
      *(float *)(param_3 + uVar11 + lVar15) = fVar18;
      lVar15 = lVar15 + 4;
    } while (lVar15 != ((ulong)(uint)((param_4 + -1) - (int)uVar16) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003ca790 (124 bytes) name=FUN_003ca790

void FUN_003ca790(long param_1,long param_2,long param_3,int param_4)

{
  long lVar1;
  double dVar2;
  double dVar3;
  
  if (0 < param_4) {
    lVar1 = 0;
    do {
      dVar3 = *(double *)(param_2 + lVar1 * 8);
      dVar2 = *(double *)(param_1 + lVar1 * 8);
      dVar2 = dVar3 * dVar3 + dVar2 * dVar2;
      dVar3 = SQRT(dVar2);
      if (NAN(dVar3)) {
        dVar3 = sqrt(dVar2);
      }
      *(double *)(param_3 + lVar1 * 8) = dVar3;
      lVar1 = lVar1 + 1;
    } while (lVar1 != (ulong)(param_4 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003ca80c (288 bytes) name=FUN_003ca80c

void FUN_003ca80c(long param_1,long param_2,int param_3)

{
  uint uVar1;
  undefined1 (*pauVar2) [16];
  ulong uVar3;
  float *pfVar4;
  long lVar5;
  ulong uVar6;
  float fVar7;
  undefined1 auVar8 [16];
  float __x;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  undefined1 auVar12 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  
  if (param_3 < 8) {
    uVar6 = 0;
  }
  else {
    uVar1 = param_3 - 8U >> 3;
    pauVar2 = (undefined1 (*) [16])(param_1 + 0x10);
    pfVar4 = (float *)(param_2 + 0x10);
    do {
      auVar15 = *pauVar2;
      auVar9 = NEON_frsqrte(auVar15,4);
      auVar14 = pauVar2[-1];
      auVar13 = NEON_frsqrte(auVar14,4);
      pauVar2 = pauVar2 + 2;
      auVar8._0_4_ = auVar15._0_4_ * auVar9._0_4_;
      auVar8._4_4_ = auVar15._4_4_ * auVar9._4_4_;
      auVar8._8_4_ = auVar15._8_4_ * auVar9._8_4_;
      auVar8._12_4_ = auVar15._12_4_ * auVar9._12_4_;
      auVar8 = NEON_frsqrts(auVar8,auVar9,4);
      auVar10._0_4_ = auVar14._0_4_ * auVar13._0_4_;
      auVar10._4_4_ = auVar14._4_4_ * auVar13._4_4_;
      auVar10._8_4_ = auVar14._8_4_ * auVar13._8_4_;
      auVar10._12_4_ = auVar14._12_4_ * auVar13._12_4_;
      auVar11 = NEON_frsqrts(auVar10,auVar13,4);
      auVar12._0_4_ = auVar13._0_4_ * auVar11._0_4_;
      auVar12._4_4_ = auVar13._4_4_ * auVar11._4_4_;
      auVar12._8_4_ = auVar13._8_4_ * auVar11._8_4_;
      auVar12._12_4_ = auVar13._12_4_ * auVar11._12_4_;
      auVar11._0_4_ = auVar9._0_4_ * auVar8._0_4_;
      auVar11._4_4_ = auVar9._4_4_ * auVar8._4_4_;
      auVar11._8_4_ = auVar9._8_4_ * auVar8._8_4_;
      auVar11._12_4_ = auVar9._12_4_ * auVar8._12_4_;
      auVar9._0_4_ = auVar14._0_4_ * auVar12._0_4_;
      auVar9._4_4_ = auVar14._4_4_ * auVar12._4_4_;
      auVar9._8_4_ = auVar14._8_4_ * auVar12._8_4_;
      auVar9._12_4_ = auVar14._12_4_ * auVar12._12_4_;
      auVar8 = NEON_frsqrts(auVar9,auVar12,4);
      auVar14._0_4_ = auVar15._0_4_ * auVar11._0_4_;
      auVar14._4_4_ = auVar15._4_4_ * auVar11._4_4_;
      auVar14._8_4_ = auVar15._8_4_ * auVar11._8_4_;
      auVar14._12_4_ = auVar15._12_4_ * auVar11._12_4_;
      auVar15 = NEON_frsqrts(auVar14,auVar11,4);
      pfVar4[-2] = auVar12._8_4_ * auVar8._8_4_;
      pfVar4[-1] = auVar12._12_4_ * auVar8._12_4_;
      pfVar4[-4] = auVar12._0_4_ * auVar8._0_4_;
      pfVar4[-3] = auVar12._4_4_ * auVar8._4_4_;
      pfVar4[2] = auVar11._8_4_ * auVar15._8_4_;
      pfVar4[3] = auVar11._12_4_ * auVar15._12_4_;
      *pfVar4 = auVar11._0_4_ * auVar15._0_4_;
      pfVar4[1] = auVar11._4_4_ * auVar15._4_4_;
      pfVar4 = pfVar4 + 8;
    } while (pauVar2 != (undefined1 (*) [16])(param_1 + (ulong)uVar1 * 0x20 + 0x30));
    uVar6 = (ulong)((uVar1 + 1) * 8);
  }
  if ((int)uVar6 < param_3) {
    uVar3 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
    lVar5 = 0;
    do {
      __x = *(float *)(param_1 + uVar3 + lVar5);
      fVar7 = SQRT(__x);
      if (NAN(fVar7)) {
        fVar7 = sqrtf(__x);
      }
      *(float *)(param_2 + uVar3 + lVar5) = 1.0 / fVar7;
      lVar5 = lVar5 + 4;
    } while (lVar5 != ((ulong)(uint)((param_3 + -1) - (int)uVar6) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003ca92c (124 bytes) name=FUN_003ca92c

void FUN_003ca92c(long param_1,long param_2,int param_3)

{
  long lVar1;
  double dVar2;
  double __x;
  
  if (0 < param_3) {
    lVar1 = 0;
    do {
      __x = *(double *)(param_1 + lVar1 * 8);
      dVar2 = SQRT(__x);
      if (NAN(dVar2)) {
        dVar2 = sqrt(__x);
      }
      *(double *)(param_2 + lVar1 * 8) = 1.0 / dVar2;
      lVar1 = lVar1 + 1;
    } while (lVar1 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003ca9b0 (296 bytes) name=FUN_003ca9b0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003ca9b0(long param_1,long param_2,int param_3)

{
  uint uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined1 (*pauVar5) [12];
  undefined8 uVar6;
  undefined8 uVar7;
  undefined1 (*pauVar8) [12];
  ulong uVar9;
  float *pfVar10;
  long lVar11;
  ulong uVar12;
  float fVar13;
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  float fVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  undefined1 auVar24 [16];
  undefined1 auVar25 [16];
  
  uVar7 = _UNK_003caae8;
  uVar6 = _DAT_003caae0;
  if (param_3 < 8) {
    uVar12 = 0;
  }
  else {
    uVar1 = param_3 - 8U >> 3;
    pfVar10 = (float *)(param_2 + 0x10);
    pauVar8 = (undefined1 (*) [12])(param_1 + 0x10);
    do {
      uVar3 = *(undefined8 *)(*pauVar8 + 8);
      fVar13 = (float)((ulong)uVar3 >> 0x20);
      uVar2 = *(undefined8 *)*pauVar8;
      pauVar5 = pauVar8 + 2;
      fVar17 = (float)((ulong)*(undefined8 *)(pauVar8[-1] + 4) >> 0x20);
      uVar4 = *(undefined8 *)*(undefined1 (*) [12])(pauVar8[-2] + 8);
      auVar15._12_4_ = fVar13;
      auVar15._0_12_ = *pauVar8;
      auVar18._8_8_ = uVar7;
      auVar18._0_8_ = uVar6;
      auVar23 = NEON_fmax(auVar15,auVar18,4);
      auVar18 = NEON_frsqrte(auVar23,4);
      auVar20._12_4_ = fVar17;
      auVar20._0_12_ = *(undefined1 (*) [12])(pauVar8[-2] + 8);
      auVar22._8_8_ = uVar7;
      auVar22._0_8_ = uVar6;
      auVar24 = NEON_fmax(auVar20,auVar22,4);
      auVar22 = NEON_frsqrte(auVar24,4);
      auVar14._0_4_ = auVar23._0_4_ * auVar18._0_4_;
      auVar14._4_4_ = auVar23._4_4_ * auVar18._4_4_;
      auVar14._8_4_ = auVar23._8_4_ * auVar18._8_4_;
      auVar14._12_4_ = auVar23._12_4_ * auVar18._12_4_;
      auVar15 = NEON_frsqrts(auVar14,auVar18,4);
      auVar19._0_4_ = auVar24._0_4_ * auVar22._0_4_;
      auVar19._4_4_ = auVar24._4_4_ * auVar22._4_4_;
      auVar19._8_4_ = auVar24._8_4_ * auVar22._8_4_;
      auVar19._12_4_ = auVar24._12_4_ * auVar22._12_4_;
      auVar20 = NEON_frsqrts(auVar19,auVar22,4);
      auVar21._0_4_ = auVar22._0_4_ * auVar20._0_4_;
      auVar21._4_4_ = auVar22._4_4_ * auVar20._4_4_;
      auVar21._8_4_ = auVar22._8_4_ * auVar20._8_4_;
      auVar21._12_4_ = auVar22._12_4_ * auVar20._12_4_;
      auVar16._0_4_ = auVar18._0_4_ * auVar15._0_4_;
      auVar16._4_4_ = auVar18._4_4_ * auVar15._4_4_;
      auVar16._8_4_ = auVar18._8_4_ * auVar15._8_4_;
      auVar16._12_4_ = auVar18._12_4_ * auVar15._12_4_;
      auVar25._0_4_ = auVar24._0_4_ * auVar21._0_4_;
      auVar25._4_4_ = auVar24._4_4_ * auVar21._4_4_;
      auVar25._8_4_ = auVar24._8_4_ * auVar21._8_4_;
      auVar25._12_4_ = auVar24._12_4_ * auVar21._12_4_;
      auVar20 = NEON_frsqrts(auVar25,auVar21,4);
      auVar24._0_4_ = auVar23._0_4_ * auVar16._0_4_;
      auVar24._4_4_ = auVar23._4_4_ * auVar16._4_4_;
      auVar24._8_4_ = auVar23._8_4_ * auVar16._8_4_;
      auVar24._12_4_ = auVar23._12_4_ * auVar16._12_4_;
      auVar15 = NEON_frsqrts(auVar24,auVar16,4);
      pfVar10[-2] = (float)*(undefined8 *)(pauVar8[-1] + 4) * auVar21._8_4_ * auVar20._8_4_;
      pfVar10[-1] = fVar17 * auVar21._12_4_ * auVar20._12_4_;
      pfVar10[-4] = (float)uVar4 * auVar21._0_4_ * auVar20._0_4_;
      pfVar10[-3] = (float)((ulong)uVar4 >> 0x20) * auVar21._4_4_ * auVar20._4_4_;
      pfVar10[2] = (float)uVar3 * auVar16._8_4_ * auVar15._8_4_;
      pfVar10[3] = fVar13 * auVar16._12_4_ * auVar15._12_4_;
      *pfVar10 = (float)uVar2 * auVar16._0_4_ * auVar15._0_4_;
      pfVar10[1] = (float)((ulong)uVar2 >> 0x20) * auVar16._4_4_ * auVar15._4_4_;
      pfVar10 = pfVar10 + 8;
      pauVar8 = (undefined1 (*) [12])(*pauVar5 + 8);
    } while ((undefined1 (*) [12])(*pauVar5 + 8) !=
             (undefined1 (*) [12])(param_1 + (ulong)uVar1 * 0x20 + 0x30));
    uVar12 = (ulong)((uVar1 + 1) * 8);
  }
  if ((int)uVar12 < param_3) {
    uVar9 = -(uVar12 >> 0x1f) & 0xfffffffc00000000 | uVar12 << 2;
    lVar11 = 0;
    do {
      fVar17 = *(float *)(param_1 + uVar9 + lVar11);
      fVar13 = SQRT(fVar17);
      if (NAN(fVar13)) {
        fVar13 = sqrtf(fVar17);
      }
      *(float *)(param_2 + uVar9 + lVar11) = fVar13;
      lVar11 = lVar11 + 4;
    } while (lVar11 != ((ulong)(uint)((param_3 + -1) - (int)uVar12) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003caaf0 (108 bytes) name=FUN_003caaf0

void FUN_003caaf0(long param_1,long param_2,int param_3)

{
  long lVar1;
  double dVar2;
  double __x;
  
  if (0 < param_3) {
    lVar1 = 0;
    do {
      __x = *(double *)(param_1 + lVar1 * 8);
      dVar2 = SQRT(__x);
      if (NAN(dVar2)) {
        dVar2 = sqrt(__x);
      }
      *(double *)(param_2 + lVar1 * 8) = dVar2;
      lVar1 = lVar1 + 1;
    } while (lVar1 != (ulong)(param_3 - 1) + 1);
  }
  return;
}


==================================================================

### FUNC 003cab60 (1208 bytes) name=FUN_003cab60

void FUN_003cab60(float *param_1,long param_2,int param_3)

{
  float *pfVar1;
  int iVar2;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  uint uVar8;
  double dVar9;
  double dVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  uint uVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  long lVar20;
  ulong uVar21;
  uint uVar22;
  ulong uVar23;
  float *pfVar24;
  float *pfVar25;
  uint uVar26;
  uint uVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  double dVar37;
  double dVar38;
  double local_18;
  int iVar3;
  
  dVar14 = DAT_003cb058;
  dVar13 = DAT_003cb050;
  dVar12 = DAT_003cb048;
  dVar11 = DAT_003cb040;
  dVar10 = DAT_003cb038;
  dVar9 = DAT_003cb018;
  if (param_3 < 4) {
    uVar23 = 0;
  }
  else {
    uVar8 = param_3 - 4U >> 2;
    pfVar24 = (float *)(param_2 + 4);
    pfVar25 = param_1;
    do {
      fVar4 = *pfVar25;
      fVar5 = pfVar25[1];
      fVar6 = pfVar25[2];
      fVar7 = pfVar25[3];
      if (((uint)fVar4 >> 0x17 & 0xff) < 0x8a) {
        dVar28 = (double)fVar4 * DAT_003cb030;
LAB_003cabf0:
        if (0x89 < ((uint)fVar5 >> 0x17 & 0xff)) goto LAB_003cae10;
LAB_003cac00:
        local_18 = (double)fVar5 * DAT_003cb030;
LAB_003cac14:
        if (0x89 < ((uint)fVar6 >> 0x17 & 0xff)) goto LAB_003cae2c;
LAB_003cac24:
        dVar34 = (double)fVar6 * DAT_003cb030;
LAB_003cac34:
        if (0x89 < ((uint)fVar7 >> 0x17 & 0xff)) goto LAB_003cae44;
LAB_003cac44:
        dVar32 = (double)fVar7 * DAT_003cb030;
      }
      else {
        dVar28 = DAT_003cb020;
        if ((int)fVar4 < 0) goto LAB_003cabf0;
        dVar28 = dVar9;
        if (((uint)fVar5 >> 0x17 & 0xff) < 0x8a) goto LAB_003cac00;
LAB_003cae10:
        if ((int)fVar5 < 0) {
          local_18 = DAT_003cb020;
          goto LAB_003cac14;
        }
        local_18 = DAT_003cb018;
                    /* catch() { ... } // from try @ 003cb300 with catch @ 003cae18 */
        if (((uint)fVar6 >> 0x17 & 0xff) < 0x8a) goto LAB_003cac24;
LAB_003cae2c:
        dVar34 = DAT_003cb020;
        if ((int)fVar6 < 0) goto LAB_003cac34;
        dVar34 = DAT_003cb018;
        if (((uint)fVar7 >> 0x17 & 0xff) < 0x8a) goto LAB_003cac44;
LAB_003cae44:
        dVar32 = DAT_003cb020;
        if (-1 < (int)fVar7) {
          dVar32 = DAT_003cb018;
        }
      }
      lVar17 = lrint(dVar28);
      lVar18 = lrint(local_18);
      lVar19 = lrint(dVar34);
      lVar20 = lrint(dVar32);
      uVar27 = (uint)lVar17;
      uVar22 = (uint)lVar18;
      uVar16 = ((int)uVar27 >> 6) + 0x7f;
      uVar26 = (uint)lVar19;
      uVar15 = (uint)lVar20;
      dVar33 = (dVar28 - (double)(int)uVar27) * dVar10;
      dVar35 = (local_18 - (double)(int)uVar22) * dVar10;
      dVar34 = (dVar34 - (double)(int)uVar26) * dVar10;
      dVar28 = (dVar32 - (double)(int)uVar15) * dVar10;
      iVar2 = (int)uVar22 >> 6;
      iVar3 = (int)uVar26 >> 6;
      if ((uVar16 & 0xffffff00) == 0) {
        dVar32 = (double)(float)(uVar16 * 0x800000);
LAB_003cacd0:
        if ((iVar2 + 0x7fU & 0xffffff00) != 0) goto LAB_003cae7c;
LAB_003cace0:
        dVar31 = (double)(float)((iVar2 + 0x7f) * 0x800000);
LAB_003cacec:
        if ((iVar3 + 0x7fU & 0xffffff00) == 0) goto LAB_003cacfc;
LAB_003cae98:
        dVar30 = 0.0;
        if (-1 < iVar3 + 0x7f) {
          dVar30 = DAT_003cb028;
        }
      }
      else {
        dVar32 = 0.0;
        if ((int)uVar16 < 0) goto LAB_003cacd0;
        dVar32 = DAT_003cb028;
        if ((iVar2 + 0x7fU & 0xffffff00) == 0) goto LAB_003cace0;
LAB_003cae7c:
        dVar31 = 0.0;
        if (iVar2 + 0x7f < 0) goto LAB_003cacec;
        dVar31 = DAT_003cb028;
        if ((iVar3 + 0x7fU & 0xffffff00) != 0) goto LAB_003cae98;
LAB_003cacfc:
        dVar30 = (double)(float)((iVar3 + 0x7f) * 0x800000);
      }
      uVar16 = ((int)uVar15 >> 6) + 0x7f;
      if ((uVar16 & 0xffffff00) == 0) {
        dVar29 = (double)(float)(uVar16 * 0x800000);
      }
      else {
        dVar29 = 0.0;
        if (-1 < (int)uVar16) {
          dVar29 = DAT_003cb028;
        }
      }
      pfVar1 = pfVar24 + 4;
      pfVar25 = pfVar25 + 4;
      dVar38 = *(double *)(&DAT_00477930 + (long)(int)(uVar22 & 0x3f) * 8);
      dVar37 = *(double *)(&DAT_00477930 + (long)(int)(uVar15 & 0x3f) * 8);
      dVar36 = *(double *)(&DAT_00477930 + (long)(int)(uVar26 & 0x3f) * 8);
      pfVar24[-1] = (float)(dVar32 * *(double *)(&DAT_00477930 + (long)(int)(uVar27 & 0x3f) * 8) *
                           (dVar14 + dVar33 * (dVar13 + dVar33 * (dVar12 + dVar33 * (dVar33 + dVar11
                                                                                    )))));
      *pfVar24 = (float)(dVar31 * dVar38 *
                        (dVar14 + dVar35 * (dVar13 + dVar35 * (dVar12 + dVar35 * (dVar35 + dVar11)))
                        ));
      pfVar24[1] = (float)(dVar30 * dVar36 *
                          (dVar14 + dVar34 * (dVar13 + dVar34 * (dVar12 + dVar34 * (dVar34 + dVar11)
                                                                ))));
      pfVar24[2] = (float)(dVar29 * dVar37 *
                          (dVar14 + dVar28 * (dVar13 + dVar28 * (dVar12 + dVar28 * (dVar28 + dVar11)
                                                                ))));
      pfVar24 = pfVar1;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar8 * 0x10 + 0x14));
    uVar23 = (ulong)((uVar8 + 1) * 4);
  }
  dVar32 = DAT_003cb058;
  dVar34 = DAT_003cb050;
  dVar28 = DAT_003cb048;
  dVar14 = DAT_003cb040;
  dVar13 = DAT_003cb038;
  dVar12 = DAT_003cb030;
  dVar11 = DAT_003cb028;
  dVar10 = DAT_003cb020;
  dVar9 = DAT_003cb018;
  if ((int)uVar23 < param_3) {
    uVar21 = -(uVar23 >> 0x1f) & 0xfffffffc00000000 | uVar23 << 2;
    lVar17 = 0;
    do {
      fVar4 = *(float *)((long)param_1 + lVar17 + uVar21);
      if (((uint)fVar4 >> 0x17 & 0xff) < 0x8a) {
        dVar33 = (double)fVar4 * dVar12;
      }
      else {
        dVar33 = dVar10;
        if (-1 < (int)fVar4) {
          dVar33 = dVar9;
        }
      }
      lVar18 = lrint(dVar33);
      uVar16 = (uint)lVar18;
      uVar8 = ((int)uVar16 >> 6) + 0x7f;
      if ((uVar8 & 0xffffff00) == 0) {
        dVar35 = (double)(float)(uVar8 * 0x800000);
      }
      else {
        dVar35 = dVar11;
        if ((int)uVar8 < 0) {
          dVar35 = 0.0;
        }
      }
      dVar33 = (dVar33 - (double)(int)uVar16) * dVar13;
      *(float *)(param_2 + uVar21 + lVar17) =
           (float)(dVar35 * *(double *)(&DAT_00477930 + (long)(int)(uVar16 & 0x3f) * 8) *
                  (dVar32 + dVar33 * (dVar34 + dVar33 * (dVar28 + dVar33 * (dVar33 + dVar14)))));
      lVar17 = lVar17 + 4;
    } while (lVar17 != ((ulong)(uint)((param_3 + -1) - (int)uVar23) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003cb060 (1220 bytes) name=FUN_003cb060

void FUN_003cb060(double *param_1,long param_2,int param_3)

{
  double *pdVar1;
  int iVar2;
  double dVar4;
  double dVar5;
  double dVar6;
  double dVar7;
  double dVar8;
  double dVar9;
  double dVar10;
  double dVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  long lVar15;
  long lVar16;
  long lVar17;
  long lVar18;
  ulong uVar19;
  double dVar20;
  double dVar21;
  uint uVar22;
  uint uVar23;
  ulong uVar24;
  double *pdVar25;
  double *pdVar26;
  uint uVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  double dVar31;
  double dVar32;
  double dVar33;
  double dVar34;
  double dVar35;
  double dVar36;
  int iVar3;
  
  dVar11 = DAT_003cb578;
  dVar10 = DAT_003cb570;
  dVar9 = DAT_003cb568;
  dVar8 = DAT_003cb560;
  dVar7 = DAT_003cb558;
  dVar6 = DAT_003cb550;
  dVar5 = DAT_003cb548;
  dVar4 = DAT_003cb528;
  if (param_3 < 4) {
    uVar24 = 0;
  }
  else {
    uVar14 = param_3 - 4U >> 2;
    pdVar25 = (double *)(param_2 + 8);
    pdVar26 = param_1;
    do {
                    /* catch() { ... } // from try @ 003cb294 with catch @ 003cb2e0 */
      uVar13 = (uint)((long)*pdVar26 >> 0x34);
      uVar12 = (uint)((long)pdVar26[1] >> 0x34);
      uVar22 = (uint)((long)pdVar26[2] >> 0x34);
      uVar23 = (uint)((long)pdVar26[3] >> 0x34);
      if ((uVar13 & 0x7ff) < 0x40a) {
        dVar28 = *pdVar26 * DAT_003cb540;
LAB_003cb0f4:
        if (0x409 < (uVar12 & 0x7ff)) goto LAB_003cb310;
LAB_003cb108:
        dVar30 = pdVar26[1] * DAT_003cb540;
LAB_003cb110:
        if (0x409 < (uVar22 & 0x7ff)) goto LAB_003cb32c;
LAB_003cb124:
        dVar31 = pdVar26[2] * DAT_003cb540;
LAB_003cb12c:
        if (0x409 < (uVar23 & 0x7ff)) goto LAB_003cb348;
LAB_003cb140:
        dVar20 = pdVar26[3] * DAT_003cb540;
      }
      else {
        dVar28 = DAT_003cb530;
        if ((int)uVar13 < 0) goto LAB_003cb0f4;
                    /* try { // try from 003cb300 to 004cb303 has its CatchHandler @ 003cae18 */
        dVar28 = dVar4;
        if ((uVar12 & 0x7ff) < 0x40a) goto LAB_003cb108;
LAB_003cb310:
        dVar30 = DAT_003cb530;
        if ((int)uVar12 < 0) goto LAB_003cb110;
        dVar30 = DAT_003cb528;
        if ((uVar22 & 0x7ff) < 0x40a) goto LAB_003cb124;
LAB_003cb32c:
        dVar31 = DAT_003cb530;
        if ((int)uVar22 < 0) goto LAB_003cb12c;
                    /* catch() { ... } // from try @ 003cb974 with catch @ 003cb344 */
        dVar31 = DAT_003cb528;
        if ((uVar23 & 0x7ff) < 0x40a) goto LAB_003cb140;
LAB_003cb348:
        dVar20 = DAT_003cb530;
        if (-1 < (int)uVar23) {
          dVar20 = DAT_003cb528;
        }
      }
      lVar15 = lrint(dVar28);
      lVar16 = lrint(dVar30);
      lVar17 = lrint(dVar31);
      lVar18 = lrint(dVar20);
      uVar23 = (uint)lVar15;
      uVar22 = (uint)lVar16;
      uVar13 = ((int)uVar23 >> 6) + 0x3ff;
      uVar27 = (uint)lVar17;
      uVar12 = (uint)lVar18;
      dVar29 = (dVar28 - (double)(int)uVar23) * dVar5;
      dVar28 = (dVar30 - (double)(int)uVar22) * dVar5;
      dVar30 = (dVar31 - (double)(int)uVar27) * dVar5;
      dVar31 = (dVar20 - (double)(int)uVar12) * dVar5;
      iVar2 = (int)uVar22 >> 6;
      iVar3 = (int)uVar27 >> 6;
      if ((uVar13 & 0xfffff800) == 0) {
        dVar20 = (double)((ulong)uVar13 << 0x34);
LAB_003cb1d4:
        if ((iVar2 + 0x3ffU & 0xfffff800) != 0) goto LAB_003cb380;
LAB_003cb1e4:
        dVar21 = (double)((ulong)(iVar2 + 0x3ff) << 0x34);
LAB_003cb1ec:
        if ((iVar3 + 0x3ffU & 0xfffff800) == 0) goto LAB_003cb1fc;
LAB_003cb39c:
        dVar32 = 0.0;
        if (-1 < iVar3 + 0x3ff) {
          dVar32 = DAT_003cb538;
        }
      }
      else {
        dVar20 = 0.0;
        if ((int)uVar13 < 0) goto LAB_003cb1d4;
        dVar20 = DAT_003cb538;
        if ((iVar2 + 0x3ffU & 0xfffff800) == 0) goto LAB_003cb1e4;
LAB_003cb380:
        dVar21 = 0.0;
        if (iVar2 + 0x3ff < 0) goto LAB_003cb1ec;
        dVar21 = DAT_003cb538;
        if ((iVar3 + 0x3ffU & 0xfffff800) != 0) goto LAB_003cb39c;
LAB_003cb1fc:
        dVar32 = (double)((ulong)(iVar3 + 0x3ff) << 0x34);
      }
      uVar13 = ((int)uVar12 >> 6) + 0x3ff;
      if ((uVar13 & 0xfffff800) == 0) {
        dVar33 = (double)((ulong)uVar13 << 0x34);
      }
      else {
        dVar33 = 0.0;
        if (-1 < (int)uVar13) {
          dVar33 = DAT_003cb538;
        }
      }
      pdVar1 = pdVar25 + 4;
      dVar36 = *(double *)(&DAT_00477930 + (long)(int)(uVar23 & 0x3f) * 8);
      pdVar26 = pdVar26 + 4;
      dVar35 = *(double *)(&DAT_00477930 + (long)(int)(uVar12 & 0x3f) * 8);
      dVar34 = *(double *)(&DAT_00477930 + (long)(int)(uVar27 & 0x3f) * 8);
                    /* try { // try from 003cb294 to 004cb297 has its CatchHandler @ 003cb2e0 */
      *pdVar25 = dVar21 * *(double *)(&DAT_00477930 + (long)(int)(uVar22 & 0x3f) * 8) *
                 (dVar11 + dVar28 * (dVar10 + dVar28 * (dVar9 + dVar28 * (dVar8 + dVar28 * (dVar7 + 
                                                  dVar6 * dVar28)))));
      pdVar25[-1] = dVar20 * dVar36 *
                    (dVar11 + dVar29 * (dVar10 + dVar29 * (dVar9 + dVar29 * (dVar8 + dVar29 * (dVar7
                                                                                              + 
                                                  dVar6 * dVar29)))));
      pdVar25[2] = dVar33 * dVar35 *
                   (dVar11 + dVar31 * (dVar10 + dVar31 * (dVar9 + dVar31 * (dVar8 + dVar31 * (dVar7 
                                                  + dVar6 * dVar31)))));
      pdVar25[1] = dVar32 * dVar34 *
                   (dVar11 + dVar30 * (dVar10 + dVar30 * (dVar9 + dVar30 * (dVar8 + dVar30 * (dVar7 
                                                  + dVar6 * dVar30)))));
      pdVar25 = pdVar1;
    } while (pdVar1 != (double *)(param_2 + (ulong)uVar14 * 0x20 + 0x28));
    uVar24 = (ulong)((uVar14 + 1) * 4);
  }
  dVar31 = DAT_003cb578;
  dVar30 = DAT_003cb570;
  dVar28 = DAT_003cb568;
  dVar11 = DAT_003cb560;
  dVar10 = DAT_003cb558;
  dVar9 = DAT_003cb550;
  dVar8 = DAT_003cb548;
  dVar7 = DAT_003cb540;
  dVar6 = DAT_003cb538;
  dVar5 = DAT_003cb530;
  dVar4 = DAT_003cb528;
  if ((int)uVar24 < param_3) {
    uVar19 = -(uVar24 >> 0x1f) & 0xfffffff800000000 | uVar24 << 3;
    lVar15 = 0;
                    /* try { // try from 003cb404 to 004cb407 has its CatchHandler @ 003cb958 */
    do {
      dVar20 = *(double *)((long)param_1 + lVar15 + uVar19);
      uVar14 = (uint)((long)dVar20 >> 0x34);
      if ((uVar14 & 0x7ff) < 0x40a) {
        dVar20 = dVar20 * dVar7;
      }
      else {
        dVar20 = dVar5;
        if (-1 < (int)uVar14) {
          dVar20 = dVar4;
        }
      }
      lVar16 = lrint(dVar20);
      uVar13 = (uint)lVar16;
      uVar14 = ((int)uVar13 >> 6) + 0x3ff;
      dVar29 = (double)((ulong)uVar14 << 0x34);
      if (((uVar14 & 0xfffff800) != 0) && (dVar29 = dVar6, (int)uVar14 < 0)) {
        dVar29 = 0.0;
      }
      dVar20 = (dVar20 - (double)(int)uVar13) * dVar8;
      *(double *)(param_2 + uVar19 + lVar15) =
           dVar29 * *(double *)(&DAT_00477930 + (long)(int)(uVar13 & 0x3f) * 8) *
           (dVar31 + dVar20 * (dVar30 + dVar20 * (dVar28 + dVar20 * (dVar11 + dVar20 * (dVar10 + 
                                                  dVar9 * dVar20)))));
      lVar15 = lVar15 + 8;
    } while (lVar15 != ((ulong)(uint)((param_3 + -1) - (int)uVar24) + 1) * 8);
  }
  return;
}


==================================================================

### FUNC 003cb580 (744 bytes) name=FUN_003cb580

void FUN_003cb580(uint *param_1,long param_2,int param_3)

{
  float *pfVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  double dVar11;
  double dVar12;
  float fVar13;
  ulong uVar14;
  long lVar15;
  ulong uVar16;
  float *pfVar17;
  uint *puVar18;
  float fVar19;
  double dVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  
  dVar12 = DAT_003cb870;
  dVar11 = DAT_003cb868;
  if (param_3 < 4) {
    uVar16 = 0;
  }
  else {
    uVar10 = param_3 - 4U >> 2;
    pfVar17 = (float *)(param_2 + 4);
    puVar18 = param_1;
    do {
      uVar6 = *puVar18;
      uVar7 = puVar18[1];
      uVar8 = puVar18[2];
      uVar9 = puVar18[3];
      uVar2 = (int)uVar6 >> 0xe & 0x1fe;
      uVar3 = (int)uVar7 >> 0xe & 0x1fe;
      uVar4 = (int)uVar8 >> 0xe & 0x1fe;
      uVar5 = (int)uVar9 >> 0xe & 0x1fe;
      pfVar1 = pfVar17 + 4;
      puVar18 = puVar18 + 4;
      dVar23 = (double)*(float *)(&DAT_00477b40 + (long)(int)(uint)(uVar2 == 0x1fe) * 4) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar2 + 1) * 8) *
               ((double)(float)(uVar6 & 0x7fff | 0x3f800000) - 1.0);
      dVar22 = (double)*(float *)(&DAT_00477b40 + (long)(int)(uint)(uVar3 == 0x1fe) * 4) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar3 + 1) * 8) *
               ((double)(float)(uVar7 & 0x7fff | 0x3f800000) - 1.0);
      dVar21 = (double)*(float *)(&DAT_00477b40 + (long)(int)(uint)(uVar4 == 0x1fe) * 4) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar4 + 1) * 8) *
               ((double)(float)(uVar8 & 0x7fff | 0x3f800000) - 1.0);
      dVar20 = (double)*(float *)(&DAT_00477b40 + (long)(int)(uint)(uVar5 == 0x1fe) * 4) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar5 + 1) * 8) *
               ((double)(float)(uVar9 & 0x7fff | 0x3f800000) - 1.0);
      dVar26 = *(double *)(&LAB_00477b50 + (long)(int)uVar3 * 8);
      dVar25 = *(double *)(&LAB_00477b50 + (long)(int)uVar4 * 8);
      dVar24 = *(double *)(&LAB_00477b50 + (long)(int)uVar5 * 8);
      pfVar17[-1] = (float)(*(double *)(&LAB_00477b50 + (long)(int)uVar2 * 8) +
                            dVar11 * (double)(int)((uVar6 >> 0x17 & 0xff) - 0x7f) +
                           dVar23 * (dVar23 * (dVar12 * dVar23 + -0.5) + 1.0));
      *pfVar17 = (float)(dVar26 + dVar11 * (double)(int)((uVar7 >> 0x17 & 0xff) - 0x7f) +
                        dVar22 * (dVar22 * (dVar12 * dVar22 + -0.5) + 1.0));
      pfVar17[1] = (float)(dVar25 + dVar11 * (double)(int)((uVar8 >> 0x17 & 0xff) - 0x7f) +
                          dVar21 * (dVar21 * (dVar12 * dVar21 + -0.5) + 1.0));
      pfVar17[2] = (float)(dVar24 + dVar11 * (double)(int)((uVar9 >> 0x17 & 0xff) - 0x7f) +
                          dVar20 * (dVar20 * (dVar12 * dVar20 + -0.5) + 1.0));
      pfVar17 = pfVar1;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar10 * 0x10 + 0x14));
    uVar16 = (ulong)((uVar10 + 1) * 4);
  }
  fVar13 = DAT_003cb878;
  dVar11 = DAT_003cb868;
  if ((int)uVar16 < param_3) {
    uVar14 = -(uVar16 >> 0x1f) & 0xfffffffc00000000 | uVar16 << 2;
    lVar15 = 0;
    do {
      uVar2 = *(uint *)((long)param_1 + lVar15 + uVar14);
      uVar10 = (int)uVar2 >> 0xe & 0x1fe;
      fVar19 = (float)(((double)(float)(uVar2 & 0x7fff | 0x3f800000) - 1.0) *
                      *(double *)(&LAB_00477b50 + (long)(int)(uVar10 + 1) * 8)) +
               *(float *)(&DAT_00477b40 + (long)(int)(uint)(uVar10 == 0x1fe) * 4);
      *(float *)(param_2 + uVar14 + lVar15) =
           (float)((double)((fVar19 * (fVar13 * fVar19 + -0.5) + 1.0) * fVar19) +
                  *(double *)(&LAB_00477b50 + (long)(int)uVar10 * 8) +
                  dVar11 * (double)(int)((uVar2 >> 0x17 & 0xff) - 0x7f));
      lVar15 = lVar15 + 4;
    } while (lVar15 != ((ulong)(uint)((param_3 + -1) - (int)uVar16) + 1) * 4);
  }
  return;
}


==================================================================

### FUNC 003cb880 (920 bytes) name=FUN_003cb880

void FUN_003cb880(ulong *param_1,long param_2,int param_3)

{
  uint *puVar1;
  double *pdVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  ulong uVar10;
  double dVar11;
  double dVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  ulong *puVar16;
  ulong *puVar17;
  double *pdVar18;
  long lVar19;
  int iVar20;
  double dVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  double dVar26;
  double dVar27;
  double dVar28;
  double dVar29;
  double dVar30;
  
  dVar15 = DAT_003cbc38;
  dVar14 = DAT_003cbc30;
  dVar13 = DAT_003cbc28;
  dVar12 = DAT_003cbc20;
  dVar11 = DAT_003cbc18;
  if (param_3 < 4) {
    iVar20 = 0;
  }
  else {
    uVar9 = param_3 - 4U >> 2;
    puVar16 = param_1;
    pdVar18 = (double *)(param_2 + 8);
    do {
      puVar1 = (uint *)((long)puVar16 + 4);
      uVar6 = *(uint *)((long)puVar16 + 0xc);
      uVar3 = (int)*puVar1 >> 0xb & 0x1fe;
      uVar4 = (int)uVar6 >> 0xb & 0x1fe;
                    /* catch() { ... } // from try @ 003cb404 with catch @ 003cb958 */
                    /* try { // try from 003cb974 to 004cb977 has its CatchHandler @ 003cb344 */
                    /* catch() { ... } // from try @ 003cbf74 with catch @ 003cb978 */
      dVar30 = *(double *)(&DAT_00477b30 + (long)(int)(uint)(uVar3 == 0x1fe) * 8) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar3 + 1) * 8) *
               ((double)(*puVar16 & 0xfffffffffff | 0x3ff0000000000000) - 1.0);
      uVar7 = *(uint *)((long)puVar16 + 0x14);
      dVar29 = *(double *)(&DAT_00477b30 + (long)(int)(uint)(uVar4 == 0x1fe) * 8) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar4 + 1) * 8) *
               ((double)(puVar16[1] & 0xfffffffffff | 0x3ff0000000000000) - 1.0);
      uVar8 = *(uint *)((long)puVar16 + 0x1c);
      uVar10 = puVar16[3];
      puVar17 = puVar16 + 2;
      dVar22 = *(double *)(&LAB_00477b50 + (long)(int)uVar4 * 8);
      dVar24 = dVar30 * dVar30;
      dVar23 = dVar29 * dVar29;
      uVar4 = (int)uVar7 >> 0xb & 0x1fe;
      uVar5 = (int)uVar8 >> 0xb & 0x1fe;
      pdVar2 = pdVar18 + 4;
                    /* try { // try from 003cba38 to 004cba3b has its CatchHandler @ 003cbf58 */
      dVar26 = *(double *)(&LAB_00477b50 + (long)(int)uVar4 * 8);
      puVar16 = puVar16 + 4;
      dVar25 = *(double *)(&LAB_00477b50 + (long)(int)uVar5 * 8);
      dVar27 = *(double *)(&LAB_00477b50 + (long)(int)(uVar5 + 1) * 8);
      dVar21 = *(double *)(&DAT_00477b30 + (long)(int)(uint)(uVar4 == 0x1fe) * 8) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar4 + 1) * 8) *
               ((double)(*puVar17 & 0xfffffffffff | 0x3ff0000000000000) - 1.0);
      dVar28 = dVar21 * dVar21;
      pdVar18[-1] = *(double *)(&LAB_00477b50 + (long)(int)uVar3 * 8) +
                    dVar11 * (double)(int)((*puVar1 >> 0x14 & 0x7ff) - 0x3ff) +
                    (dVar24 * (dVar15 + dVar24 * (dVar14 + dVar13 * dVar24)) + 1.0) * dVar30 +
                    dVar24 * (dVar24 * (dVar24 * (dVar12 + dVar24 * -0.125) + -0.25) + -0.5);
      *pdVar18 = dVar22 + dVar11 * (double)(int)((uVar6 >> 0x14 & 0x7ff) - 0x3ff) +
                 (dVar23 * (dVar15 + dVar23 * (dVar14 + dVar13 * dVar23)) + 1.0) * dVar29 +
                 dVar23 * (dVar23 * (dVar23 * (dVar12 + dVar23 * -0.125) + -0.25) + -0.5);
      dVar22 = *(double *)(&DAT_00477b30 + (long)(int)(uint)(uVar5 == 0x1fe) * 8) +
               dVar27 * ((double)(uVar10 & 0xfffffffffff | 0x3ff0000000000000) - 1.0);
      dVar23 = dVar22 * dVar22;
      pdVar18[1] = dVar26 + dVar11 * (double)(int)((uVar7 >> 0x14 & 0x7ff) - 0x3ff) +
                   (dVar28 * (dVar15 + dVar28 * (dVar14 + dVar13 * dVar28)) + 1.0) * dVar21 +
                   dVar28 * (dVar28 * (dVar28 * (dVar12 + dVar28 * -0.125) + -0.25) + -0.5);
      pdVar18[2] = dVar25 + dVar11 * (double)(int)((uVar8 >> 0x14 & 0x7ff) - 0x3ff) +
                   (dVar23 * (dVar15 + dVar23 * (dVar14 + dVar13 * dVar23)) + 1.0) * dVar22 +
                   dVar23 * (dVar23 * (dVar23 * (dVar12 + dVar23 * -0.125) + -0.25) + -0.5);
      pdVar18 = pdVar2;
    } while (pdVar2 != (double *)(param_2 + (ulong)uVar9 * 0x20 + 0x28));
    iVar20 = (uVar9 + 1) * 4;
  }
  dVar15 = DAT_003cbc38;
  dVar14 = DAT_003cbc30;
  dVar13 = DAT_003cbc28;
  dVar12 = DAT_003cbc20;
  dVar11 = DAT_003cbc18;
  if (iVar20 < param_3) {
    lVar19 = (long)iVar20;
    puVar16 = param_1 + lVar19;
    pdVar18 = (double *)(param_2 + lVar19 * 8);
    do {
      puVar17 = puVar16 + 1;
      uVar9 = (int)*(uint *)((long)puVar16 + 4) >> 0xb & 0x1fe;
      dVar22 = *(double *)(&DAT_00477b30 + (long)(int)(uint)(uVar9 == 0x1fe) * 8) +
               *(double *)(&LAB_00477b50 + (long)(int)(uVar9 + 1) * 8) *
               ((double)(*puVar16 & 0xfffffffffff | 0x3ff0000000000000) - 1.0);
      dVar21 = dVar22 * dVar22;
      *pdVar18 = *(double *)(&LAB_00477b50 + (long)(int)uVar9 * 8) +
                 dVar11 * (double)(int)((*(uint *)((long)puVar16 + 4) >> 0x14 & 0x7ff) - 0x3ff) +
                 (dVar21 * (dVar15 + dVar21 * (dVar14 + dVar13 * dVar21)) + 1.0) * dVar22 +
                 dVar21 * (dVar21 * (dVar21 * (dVar12 + dVar21 * -0.125) + -0.25) + -0.5);
      puVar16 = puVar17;
      pdVar18 = pdVar18 + 1;
    } while (puVar17 != param_1 + lVar19 + 1 + (ulong)(uint)((param_3 + -1) - iVar20));
  }
  return;
}


==================================================================

### FUNC 003cbc40 (3004 bytes) name=FUN_003cbc40

int FUN_003cbc40(float *param_1,ulong param_2,int param_3,float *param_4,ulong param_5,uint param_6)

{
  long lVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulong uVar5;
  float fVar6;
  float *pfVar7;
  long lVar8;
  float *pfVar9;
  float *pfVar10;
  long lVar11;
  long lVar12;
  float *pfVar13;
  long lVar14;
  long lVar15;
  float *pfVar16;
  long lVar17;
  float *pfVar18;
  int iVar19;
  long lVar20;
  long lVar21;
  uint uVar22;
  long lVar23;
  ulong uVar24;
  uint uVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  uint uVar29;
  int iVar30;
  uint uVar31;
  long lVar32;
  long lVar33;
  float *pfVar34;
  uint uVar35;
  float fVar36;
  float fVar37;
  undefined8 uVar38;
  undefined8 uVar39;
  float fVar40;
  undefined8 uVar41;
  int iVar42;
  float fVar43;
  int iVar44;
  int iVar45;
  float fVar46;
  float *pfVar47;
  long lVar48;
  long lVar49;
  float *pfVar50;
  long lVar51;
  uint uVar52;
  long local_30;
  long local_28;
  int local_14;
  
  fVar37 = DAT_003cc7fc;
  param_5 = param_5 >> 2;
  param_2 = param_2 >> 2;
  if (param_3 < 1) {
    local_14 = 1;
    if (param_4 != (float *)0x0) {
LAB_003cc5f4:
      uVar52 = param_3 - 1;
      if (-1 < (int)uVar52) {
        lVar27 = (long)(int)uVar52;
        lVar28 = param_2 + 1;
        lVar48 = lVar27 * lVar28 + 1;
        param_4 = (float *)((long)param_4 + lVar27 * param_5 * 4);
        pfVar18 = (float *)((long)param_1 + lVar28 * 4 * lVar27);
        pfVar50 = param_1 + lVar48;
        uVar24 = 0xffffffff;
        do {
          if (0 < (int)param_6) {
            pfVar47 = param_4;
            do {
              fVar37 = *pfVar47;
              pfVar9 = pfVar50;
              pfVar10 = pfVar47;
              if ((int)(uVar52 - (int)uVar24) < param_3) {
                do {
                  pfVar13 = pfVar9 + 1;
                  fVar37 = fVar37 - pfVar10[param_5] * *pfVar9;
                  pfVar9 = pfVar13;
                  pfVar10 = pfVar10 + param_5;
                } while (pfVar13 != param_1 + lVar48 + 1 + uVar24);
              }
              pfVar10 = pfVar47 + 1;
              *pfVar47 = fVar37 * *pfVar18;
              pfVar47 = pfVar10;
            } while (pfVar10 != param_4 + (ulong)(param_6 - 1) + 1);
          }
          uVar22 = (int)uVar24 + 1;
          uVar24 = (ulong)uVar22;
          pfVar18 = pfVar18 + -lVar28;
          param_4 = param_4 + -param_5;
          pfVar50 = pfVar50 + ~param_2;
          lVar48 = lVar48 + ~param_2;
        } while (uVar22 != uVar52);
      }
    }
  }
  else {
    uVar52 = param_3 - 2;
    lVar48 = 0;
    uVar22 = param_3 - 1;
    lVar49 = NEON_shl(param_2 + 1,2);
    iVar19 = 0;
    local_28 = 0;
    local_30 = 0;
    lVar27 = 0;
    lVar28 = 0;
    lVar32 = 0;
    lVar23 = lVar49 + -4;
    pfVar50 = (float *)((long)param_1 + lVar49);
    local_14 = 1;
    iVar44 = 1;
    pfVar18 = param_4;
    pfVar47 = param_1;
    lVar51 = lVar23;
    if (param_3 < 2) goto LAB_003cc5bc;
LAB_003cbd00:
    fVar43 = *(float *)((long)param_1 + local_28);
    lVar1 = lVar32 + 1;
    lVar12 = lVar27 + param_2;
    lVar11 = lVar1;
    fVar46 = fVar43;
    iVar30 = iVar44;
    iVar45 = iVar19;
    do {
      lVar20 = lVar32 + lVar12;
      fVar36 = ABS(fVar46);
      fVar40 = ABS(param_1[lVar20]);
      lVar33 = lVar12;
      lVar14 = lVar11;
      iVar42 = iVar30;
      if (fVar40 <= fVar36) {
        lVar33 = (long)iVar45 * param_2;
        lVar14 = (long)iVar45;
        iVar42 = iVar45;
      }
      iVar45 = iVar42;
      iVar30 = iVar30 + 1;
      lVar11 = lVar11 + 1;
      lVar12 = lVar12 + param_2;
      fVar6 = param_1[lVar20];
      if (fVar40 <= fVar36) {
        fVar40 = fVar36;
        fVar6 = fVar46;
      }
      fVar46 = fVar6;
    } while (iVar30 != param_3);
    if (fVar37 <= fVar40) {
      if (iVar19 != iVar45) {
        iVar30 = (int)lVar32;
        if (iVar30 < param_3) {
          lVar12 = lVar33 + lVar32;
          uVar25 = param_3 - iVar30;
          if ((local_28 < (lVar32 + 4 + lVar33) * 4 && lVar12 * 4 < local_28 + 0x10) || (uVar25 < 9)
             ) {
            pfVar10 = (float *)((long)param_1 + local_28);
            do {
              fVar46 = *pfVar10;
              *pfVar10 = pfVar10[lVar33 - lVar27];
              pfVar10[lVar33 - lVar27] = fVar46;
              pfVar10 = pfVar10 + 1;
            } while (pfVar10 != param_1 + lVar48 + 1 + (ulong)uVar22);
          }
          else {
            uVar24 = (long)param_1 + local_28;
            uVar31 = -((uint)(uVar24 >> 2) & 3) & 3;
            if (uVar25 < uVar31) {
              uVar31 = uVar25;
            }
            uVar5 = (ulong)uVar31;
            if (uVar31 != 0) {
              *(float *)((long)param_1 + local_28) = param_1[lVar12];
              param_1[lVar12] = fVar43;
              iVar19 = iVar44;
              if (uVar31 != 1) {
                fVar46 = *(float *)(uVar24 + 4);
                *(float *)(uVar24 + 4) = param_1[lVar33 + lVar1];
                param_1[lVar33 + lVar1] = fVar46;
                iVar19 = iVar30 + 2;
                if (uVar31 == 3) {
                  lVar11 = lVar33 + lVar32 + 2;
                  fVar46 = *(float *)(uVar24 + 8);
                  *(float *)(uVar24 + 8) = param_1[lVar11];
                  param_1[lVar11] = fVar46;
                  iVar19 = iVar30 + 3;
                }
              }
            }
            lVar11 = 0;
            uVar35 = ((uVar25 - uVar31) - 4 >> 2) + 1;
            uVar29 = 0;
            iVar30 = uVar35 * 4;
            do {
              puVar2 = (undefined8 *)((long)param_1 + lVar11 + (lVar32 + uVar5 + lVar33) * 4);
              puVar3 = (undefined8 *)((long)param_1 + lVar11 + (uVar5 + lVar48) * 4);
              uVar29 = uVar29 + 1;
              uVar41 = *puVar2;
              puVar4 = (undefined8 *)((long)param_1 + lVar11 + (lVar12 + uVar5) * 4);
              uVar39 = puVar3[1];
              uVar38 = *puVar3;
              lVar11 = lVar11 + 0x10;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar41;
              puVar4[1] = uVar39;
              *puVar4 = uVar38;
            } while (uVar29 < uVar35);
            iVar19 = iVar19 + iVar30;
            if (uVar25 - uVar31 != iVar30) {
              iVar30 = iVar19 + 1;
              lVar12 = iVar19 + lVar33;
              lVar11 = lVar27 + iVar19;
              fVar46 = param_1[lVar11];
              param_1[lVar11] = param_1[lVar12];
              param_1[lVar12] = fVar46;
              if (iVar30 < param_3) {
                iVar19 = iVar19 + 2;
                lVar12 = iVar30 + lVar33;
                lVar11 = lVar27 + iVar30;
                fVar46 = param_1[lVar11];
                param_1[lVar11] = param_1[lVar12];
                param_1[lVar12] = fVar46;
                if (iVar19 < param_3) {
                  lVar33 = iVar19 + lVar33;
                  lVar12 = lVar27 + iVar19;
                  fVar46 = param_1[lVar12];
                    /* catch() { ... } // from try @ 003cba38 with catch @ 003cbf58 */
                  param_1[lVar12] = param_1[lVar33];
                  param_1[lVar33] = fVar46;
                }
              }
            }
          }
        }
        if ((param_4 != (float *)0x0) && (0 < (int)param_6)) {
                    /* try { // try from 003cbf74 to 004cbf77 has its CatchHandler @ 003cb978 */
          lVar14 = lVar14 * param_5;
                    /* catch() { ... } // from try @ 003cc7e4 with catch @ 003cbf78 */
          lVar12 = lVar14 + 4;
          lVar11 = lVar12 * 4;
          if (((lVar11 - local_30 == 0 || lVar11 < local_30) || local_30 + 0x10 <= lVar11 + -0x10)
             && (8 < param_6)) {
            uVar25 = -((uint)((ulong)pfVar18 >> 2) & 3) & 3;
            uVar31 = param_6;
            if (uVar25 < param_6) {
              uVar31 = uVar25;
            }
            uVar25 = uVar31;
            if (uVar31 != 0) {
              fVar46 = *pfVar18;
              *pfVar18 = param_4[lVar14];
              param_4[lVar14] = fVar46;
              if (uVar31 != 1) {
                fVar46 = pfVar18[1];
                pfVar18[1] = param_4[lVar14 + 1];
                param_4[lVar14 + 1] = fVar46;
                if (uVar31 == 3) {
                  fVar46 = pfVar18[2];
                  pfVar18[2] = param_4[lVar14 + 2];
                  param_4[lVar14 + 2] = fVar46;
                }
                else {
                    /* catch() { ... } // from try @ 003cc038 with catch @ 003cc7c8 */
                  uVar25 = 2;
                }
              }
            }
            lVar12 = 0;
            uVar35 = ((param_6 - uVar31) - 4 >> 2) + 1;
            uVar29 = 0;
                    /* try { // try from 003cc038 to 004cc03b has its CatchHandler @ 003cc7c8 */
            iVar19 = uVar35 * 4;
            do {
              puVar2 = (undefined8 *)((long)param_4 + lVar12 + (lVar14 + (ulong)uVar31) * 4);
              puVar3 = (undefined8 *)((long)param_4 + lVar12 + (lVar28 + (ulong)uVar31) * 4);
              uVar29 = uVar29 + 1;
              lVar12 = lVar12 + 0x10;
              uVar41 = *puVar2;
              uVar39 = puVar3[1];
              uVar38 = *puVar3;
              puVar3[1] = puVar2[1];
              *puVar3 = uVar41;
              puVar2[1] = uVar39;
              *puVar2 = uVar38;
            } while (uVar29 < uVar35);
            iVar30 = uVar25 + iVar19;
            if (param_6 - uVar31 != iVar19) {
              iVar19 = iVar30 + 1;
              lVar12 = iVar30 + lVar14;
              lVar11 = lVar28 + iVar30;
              fVar46 = param_4[lVar11];
              param_4[lVar11] = param_4[lVar12];
              param_4[lVar12] = fVar46;
              if (iVar19 < (int)param_6) {
                iVar30 = iVar30 + 2;
                lVar12 = iVar19 + lVar14;
                lVar11 = lVar28 + iVar19;
                fVar46 = param_4[lVar11];
                param_4[lVar11] = param_4[lVar12];
                param_4[lVar12] = fVar46;
                if (iVar30 < (int)param_6) {
                  lVar14 = iVar30 + lVar14;
                  lVar12 = lVar28 + iVar30;
                  fVar46 = param_4[lVar12];
                  param_4[lVar12] = param_4[lVar14];
                  param_4[lVar14] = fVar46;
                }
              }
            }
          }
          else {
            lVar11 = 0;
            do {
              fVar46 = pfVar18[lVar11];
              pfVar18[lVar11] = param_4[lVar12 + lVar11 + -4];
              param_4[lVar12 + lVar11 + -4] = fVar46;
              lVar11 = lVar11 + 1;
            } while ((int)lVar11 < (int)param_6);
          }
        }
        local_14 = -local_14;
      }
      fVar46 = -1.0 / *pfVar47;
      lVar12 = lVar27;
      lVar11 = lVar28;
      lVar33 = lVar32;
      lVar27 = lVar27 + param_2;
      lVar32 = lVar1;
      pfVar10 = pfVar47;
      iVar19 = iVar44;
      do {
        lVar1 = local_30 + param_5 * 4;
        lVar28 = lVar11 + param_5;
        iVar30 = (int)lVar33;
        lVar14 = 0;
        pfVar47 = (float *)((long)param_4 + lVar1);
        pfVar13 = pfVar50;
        lVar15 = -param_2;
        lVar17 = lVar28;
        lVar20 = lVar1;
        lVar21 = lVar27;
        pfVar9 = pfVar50;
        iVar44 = iVar19;
        lVar26 = lVar48;
        do {
          lVar26 = lVar26 + param_2;
          fVar43 = fVar46 * *(float *)((long)param_1 + lVar14 + local_28 + lVar23);
          if ((lVar51 + 4 + lVar14 < local_28 + 0x14 && local_28 + 4 < lVar51 + 0x14 + lVar14) ||
             (uVar22 < 8)) {
            pfVar7 = pfVar9;
            do {
              pfVar16 = pfVar7 + 1;
              *pfVar7 = *pfVar7 + pfVar7[lVar15] * fVar43;
              pfVar7 = pfVar16;
            } while (pfVar16 !=
                     (float *)((long)param_1 + (lVar27 + (ulong)uVar52 + lVar33) * 4 + 8 + lVar14));
          }
          else {
            uVar25 = -((uint)((ulong)pfVar9 >> 2) & 3) & 3;
            if (uVar22 < uVar25) {
              uVar25 = uVar22;
            }
            iVar45 = iVar19;
            if (uVar25 != 0) {
              *pfVar13 = *pfVar13 + *(float *)((long)param_1 + local_28 + 4) * fVar43;
              iVar45 = iVar30 + 2;
              if (uVar25 != 1) {
                pfVar13[1] = pfVar13[1] + *(float *)((long)param_1 + local_28 + 8) * fVar43;
                iVar45 = iVar30 + 3;
                if (uVar25 == 3) {
                  pfVar13[2] = pfVar13[2] + *(float *)((long)param_1 + local_28 + 0xc) * fVar43;
                  iVar45 = iVar30 + 4;
                }
              }
            }
            uVar31 = ((uVar22 - uVar25) - 4 >> 2) + 1;
            iVar42 = uVar31 * 4;
            if (2 < ((param_3 - iVar30) + -2) - uVar25) {
              uVar35 = 0;
              pfVar7 = param_1 + lVar26 + 1 + (ulong)uVar25;
              pfVar16 = param_1 + lVar26 + 1 + (ulong)uVar25;
              pfVar34 = param_1 + lVar48 + 1 + (ulong)uVar25;
              do {
                uVar39 = *(undefined8 *)pfVar34;
                uVar35 = uVar35 + 1;
                uVar38 = *(undefined8 *)pfVar16;
                *(ulong *)(pfVar7 + 2) =
                     CONCAT44((float)((ulong)*(undefined8 *)(pfVar16 + 2) >> 0x20) +
                              fVar43 * (float)((ulong)*(undefined8 *)(pfVar34 + 2) >> 0x20),
                              (float)*(undefined8 *)(pfVar16 + 2) +
                              fVar43 * (float)*(undefined8 *)(pfVar34 + 2));
                *(ulong *)pfVar7 =
                     CONCAT44((float)((ulong)uVar38 >> 0x20) +
                              fVar43 * (float)((ulong)uVar39 >> 0x20),
                              (float)uVar38 + fVar43 * (float)uVar39);
                pfVar7 = pfVar7 + 4;
                pfVar16 = pfVar16 + 4;
                pfVar34 = pfVar34 + 4;
              } while (uVar35 < uVar31);
              iVar45 = iVar45 + iVar42;
              if (iVar42 == uVar22 - uVar25) goto LAB_003cc388;
            }
            iVar42 = iVar45 + 1;
            lVar8 = iVar45 + lVar21;
            param_1[lVar8] = param_1[lVar8] + param_1[iVar45 + lVar12] * fVar43;
            if (iVar42 < param_3) {
              iVar45 = iVar45 + 2;
              lVar8 = iVar42 + lVar21;
              param_1[lVar8] = param_1[lVar8] + param_1[lVar12 + iVar42] * fVar43;
              if (iVar45 < param_3) {
                lVar8 = iVar45 + lVar21;
                param_1[lVar8] = param_1[lVar8] + param_1[iVar45 + lVar12] * fVar43;
              }
            }
          }
LAB_003cc388:
          if ((param_4 != (float *)0x0) && (0 < (int)param_6)) {
            if ((local_30 < lVar20 + 0x10 && lVar20 < local_30 + 0x10) || (param_6 < 8)) {
              lVar8 = 0;
              do {
                pfVar47[lVar8] = pfVar47[lVar8] + pfVar18[lVar8] * fVar43;
                lVar8 = lVar8 + 1;
              } while ((int)lVar8 < (int)param_6);
            }
            else {
              uVar25 = -((uint)((ulong)pfVar47 >> 2) & 3) & 3;
              if (param_6 < uVar25) {
                uVar25 = param_6;
              }
              uVar31 = uVar25;
              if ((uVar25 != 0) && (*pfVar47 = *pfVar47 + *pfVar18 * fVar43, uVar25 != 1)) {
                pfVar47[1] = pfVar47[1] + pfVar18[1] * fVar43;
                if (uVar25 == 3) {
                  pfVar47[2] = pfVar47[2] + pfVar18[2] * fVar43;
                }
                else {
                  uVar31 = 2;
                }
              }
              uVar35 = ((param_6 - uVar25) - 4 >> 2) + 1;
              uVar29 = 0;
              iVar45 = uVar35 * 4;
              pfVar7 = param_4 + lVar11 + (ulong)uVar25;
              pfVar16 = param_4 + (ulong)uVar25 + lVar17;
              pfVar34 = param_4 + (ulong)uVar25 + lVar17;
              do {
                uVar39 = *(undefined8 *)pfVar7;
                uVar29 = uVar29 + 1;
                uVar38 = *(undefined8 *)pfVar34;
                *(ulong *)(pfVar16 + 2) =
                     CONCAT44((float)((ulong)*(undefined8 *)(pfVar34 + 2) >> 0x20) +
                              fVar43 * (float)((ulong)*(undefined8 *)(pfVar7 + 2) >> 0x20),
                              (float)*(undefined8 *)(pfVar34 + 2) +
                              fVar43 * (float)*(undefined8 *)(pfVar7 + 2));
                *(ulong *)pfVar16 =
                     CONCAT44((float)((ulong)uVar38 >> 0x20) +
                              fVar43 * (float)((ulong)uVar39 >> 0x20),
                              (float)uVar38 + fVar43 * (float)uVar39);
                pfVar7 = pfVar7 + 4;
                pfVar16 = pfVar16 + 4;
                pfVar34 = pfVar34 + 4;
              } while (uVar29 < uVar35);
              iVar42 = iVar45 + uVar31;
              if (iVar45 != param_6 - uVar25) {
                iVar45 = iVar42 + 1;
                lVar8 = iVar42 + lVar17;
                param_4[lVar8] = param_4[lVar8] + param_4[lVar11 + iVar42] * fVar43;
                if (iVar45 < (int)param_6) {
                  iVar42 = iVar42 + 2;
                  lVar8 = iVar45 + lVar17;
                  param_4[lVar8] = param_4[lVar8] + param_4[lVar11 + iVar45] * fVar43;
                  if (iVar42 < (int)param_6) {
                    lVar8 = iVar42 + lVar17;
                    param_4[lVar8] = param_4[lVar8] + param_4[lVar11 + iVar42] * fVar43;
                  }
                }
              }
            }
          }
          iVar44 = iVar44 + 1;
          lVar14 = lVar14 + lVar23;
          pfVar47 = pfVar47 + param_5;
          lVar20 = lVar20 + param_5 * 4;
          lVar17 = lVar17 + param_5;
          pfVar9 = (float *)((long)pfVar9 + lVar23);
          lVar15 = lVar15 - param_2;
          pfVar13 = (float *)((long)pfVar13 + lVar23);
          lVar21 = lVar21 + param_2;
        } while (iVar44 != param_3);
        pfVar18 = pfVar18 + param_5;
        pfVar50 = (float *)((long)pfVar50 + lVar49);
        uVar22 = uVar22 - 1;
        uVar52 = uVar52 - 1;
        lVar51 = lVar51 + lVar49;
        local_28 = local_28 + lVar49;
        lVar48 = lVar48 + param_2 + 1;
        pfVar47 = (float *)((long)pfVar10 + lVar49);
        *pfVar10 = -fVar46;
        iVar44 = iVar19 + 1;
        local_30 = lVar1;
        if (iVar44 < param_3) goto LAB_003cbd00;
LAB_003cc5bc:
        if (ABS(*(float *)((long)param_1 + local_28)) < fVar37) break;
        fVar46 = -1.0 / *pfVar47;
        if (iVar44 == param_3) {
          *pfVar47 = -fVar46;
          if (param_4 == (float *)0x0) {
            return local_14;
          }
          goto LAB_003cc5f4;
        }
        lVar12 = lVar27;
        lVar11 = lVar28;
        lVar33 = lVar32;
        lVar27 = lVar27 + param_2;
        lVar32 = lVar32 + 1;
        pfVar10 = pfVar47;
        iVar19 = iVar44;
      } while( true );
    }
    local_14 = 0;
  }
  return local_14;
}


==================================================================

### FUNC 003cc800 (2272 bytes) name=FUN_003cc800

int FUN_003cc800(double *param_1,ulong param_2,uint param_3,double *param_4,ulong param_5,
                uint param_6)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  int iVar4;
  long lVar5;
  double *pdVar6;
  uint uVar7;
  ulong uVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  double dVar13;
  double *pdVar14;
  double *pdVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  double *pdVar19;
  long lVar20;
  uint uVar21;
  double *pdVar22;
  long lVar23;
  long lVar24;
  long lVar25;
  long lVar26;
  long lVar27;
  long lVar28;
  uint uVar29;
  double *pdVar30;
  uint uVar31;
  double dVar32;
  undefined8 uVar33;
  double dVar34;
  undefined8 uVar35;
  double dVar36;
  undefined8 uVar37;
  double dVar38;
  long lVar39;
  double dVar40;
  uint uVar41;
  uint uVar42;
  long lVar43;
  double *pdVar44;
  long lVar45;
  uint uVar46;
  long lVar47;
  int iVar48;
  long local_20;
  uint local_14;
  
  dVar34 = DAT_003cd0e0;
  param_5 = param_5 >> 3;
  param_2 = param_2 >> 3;
  if ((int)param_3 < 1) {
    iVar48 = 1;
    if (param_4 != (double *)0x0) {
LAB_003ccef8:
      uVar41 = param_3 - 1;
      if (-1 < (int)uVar41) {
        lVar26 = (long)(int)uVar41;
        lVar25 = param_2 + 1;
        lVar5 = lVar25 * lVar26 + 1;
        uVar8 = 0xffffffff;
        param_4 = (double *)((long)param_4 + lVar26 * param_5 * 8);
        pdVar44 = (double *)((long)param_1 + lVar25 * 8 * lVar26);
        pdVar22 = param_1 + lVar5;
        do {
          if (0 < (int)param_6) {
            pdVar15 = param_4;
            do {
              dVar34 = *pdVar15;
              pdVar6 = pdVar22;
              pdVar19 = pdVar15;
              if ((int)(uVar41 - (int)uVar8) < (int)param_3) {
                do {
                  pdVar14 = pdVar6 + 1;
                  dVar34 = dVar34 - pdVar19[param_5] * *pdVar6;
                  pdVar6 = pdVar14;
                  pdVar19 = pdVar19 + param_5;
                } while (pdVar14 != param_1 + lVar5 + 1 + uVar8);
              }
              pdVar19 = pdVar15 + 1;
              *pdVar15 = dVar34 * *pdVar44;
              pdVar15 = pdVar19;
            } while (param_4 + (ulong)(param_6 - 1) + 1 != pdVar19);
          }
          uVar46 = (int)uVar8 + 1;
          uVar8 = (ulong)uVar46;
          pdVar44 = pdVar44 + -lVar25;
          param_4 = param_4 + -param_5;
          pdVar22 = pdVar22 + ~param_2;
          lVar5 = lVar5 + ~param_2;
        } while (uVar46 != uVar41);
      }
    }
  }
  else {
    uVar46 = param_3 - 2;
    lVar28 = 0;
    uVar42 = 0;
    lVar47 = NEON_shl(param_2 + 1,3);
    local_20 = 0;
    uVar21 = param_3 - 1;
    lVar26 = 0;
    lVar24 = 0;
    lVar45 = 0;
    lVar43 = 0;
    lVar25 = (long)param_1 + lVar47 + param_2 * -8;
    lVar5 = 0;
    iVar48 = 1;
    uVar41 = 1;
    pdVar22 = param_4;
    pdVar44 = param_1;
    local_14 = param_3;
    if ((int)param_3 < 2) goto LAB_003ccec0;
LAB_003cc8e8:
    dVar40 = *(double *)((long)param_1 + lVar26);
    lVar10 = lVar28 + param_2;
    lVar9 = lVar24 + 1;
    dVar13 = dVar40;
    uVar7 = uVar41;
    uVar16 = uVar42;
    do {
      dVar38 = *(double *)((long)param_1 + (lVar10 * 8 - lVar45));
      dVar32 = ABS(dVar13);
      dVar36 = ABS(dVar38);
      lVar27 = lVar10;
      lVar18 = lVar9;
      uVar31 = uVar7;
      if (dVar36 <= dVar32) {
        lVar27 = (long)(int)uVar16 * param_2;
        lVar18 = (long)(int)uVar16;
        uVar31 = uVar16;
      }
      uVar16 = uVar31;
      uVar7 = uVar7 + 1;
      lVar9 = lVar9 + 1;
      lVar10 = lVar10 + param_2;
      if (dVar36 <= dVar32) {
        dVar36 = dVar32;
        dVar38 = dVar13;
      }
      dVar13 = dVar38;
    } while (uVar7 != param_3);
    if (dVar34 <= dVar36) {
      if (uVar42 != uVar16) {
        if ((int)lVar24 < (int)param_3) {
          lVar10 = lVar27 + lVar24;
          if ((lVar26 < (lVar24 + 2 + lVar27) * 8 && lVar10 * 8 < lVar26 + 0x10) || (local_14 < 9))
          {
            pdVar15 = (double *)((long)param_1 + lVar26);
            do {
              dVar13 = *pdVar15;
              *pdVar15 = pdVar15[lVar27 - lVar28];
              pdVar15[lVar27 - lVar28] = dVar13;
              pdVar15 = pdVar15 + 1;
            } while (pdVar15 != param_1 + lVar43 + 1 + (ulong)uVar21);
          }
          else {
            uVar7 = (uint)((ulong)((long)param_1 + lVar26) >> 3) & 1;
            if (local_14 < uVar7) {
              uVar7 = local_14;
            }
            if (uVar7 != 0) {
              *(double *)((long)param_1 + lVar26) = param_1[lVar10];
              param_1[lVar10] = dVar40;
              uVar42 = uVar41;
            }
            uVar8 = (ulong)uVar7;
            lVar9 = 0;
            uVar16 = ((local_14 - uVar7) - 2 >> 1) + 1;
            uVar31 = 0;
            iVar4 = uVar16 * 2;
            lVar39 = NEON_shl(uVar8 + lVar43,3);
            do {
              puVar1 = (undefined8 *)((long)param_1 + lVar9 + (lVar24 + uVar8 + lVar27) * 8);
              puVar2 = (undefined8 *)((long)param_1 + lVar9 + lVar39);
              uVar31 = uVar31 + 1;
              uVar37 = *puVar1;
              puVar3 = (undefined8 *)((long)param_1 + lVar9 + (lVar10 + uVar8) * 8);
              uVar35 = puVar2[1];
              uVar33 = *puVar2;
              lVar9 = lVar9 + 0x10;
              puVar2[1] = puVar1[1];
              *puVar2 = uVar37;
              puVar3[1] = uVar35;
              *puVar3 = uVar33;
            } while (uVar31 < uVar16);
            if (local_14 - uVar7 != iVar4) {
              lVar10 = (long)(int)(uVar42 + iVar4);
              lVar27 = lVar10 + lVar27;
              lVar10 = lVar10 + lVar28;
              dVar13 = param_1[lVar10];
              param_1[lVar10] = param_1[lVar27];
              param_1[lVar27] = dVar13;
            }
          }
        }
        if ((param_4 != (double *)0x0) && (0 < (int)param_6)) {
          lVar18 = lVar18 * param_5;
          lVar10 = lVar18 + 2;
          lVar9 = lVar10 * 8;
          if (((lVar9 - local_20 == 0 || lVar9 < local_20) || local_20 + 0x10 <= lVar9 + -0x10) &&
             (8 < param_6)) {
            uVar7 = (uint)((ulong)pdVar22 >> 3) & 1;
            uVar42 = param_6;
            if (uVar7 < param_6) {
              uVar42 = uVar7;
            }
            if (uVar42 != 0) {
              dVar13 = *pdVar22;
              *pdVar22 = param_4[lVar18];
              param_4[lVar18] = dVar13;
            }
            lVar10 = 0;
            uVar7 = ((param_6 - uVar42) - 2 >> 1) + 1;
            uVar16 = 0;
            iVar4 = uVar7 * 2;
            do {
              puVar1 = (undefined8 *)((long)param_4 + lVar10 + (lVar18 + (ulong)uVar42) * 8);
              puVar2 = (undefined8 *)((long)param_4 + lVar10 + (lVar5 + (ulong)uVar42) * 8);
              uVar16 = uVar16 + 1;
              lVar10 = lVar10 + 0x10;
              uVar37 = *puVar1;
              uVar35 = puVar2[1];
              uVar33 = *puVar2;
              puVar2[1] = puVar1[1];
              *puVar2 = uVar37;
              puVar1[1] = uVar35;
              *puVar1 = uVar33;
            } while (uVar16 < uVar7);
            if (param_6 - uVar42 != iVar4) {
              lVar10 = (long)(int)((uint)(uVar42 != 0) + iVar4);
              lVar18 = lVar10 + lVar18;
              lVar10 = lVar5 + lVar10;
              dVar13 = param_4[lVar10];
              param_4[lVar10] = param_4[lVar18];
              param_4[lVar18] = dVar13;
            }
          }
          else {
            lVar9 = 0;
            do {
              dVar13 = pdVar22[lVar9];
              pdVar22[lVar9] = param_4[lVar10 + lVar9 + -2];
              param_4[lVar10 + lVar9 + -2] = dVar13;
              lVar9 = lVar9 + 1;
            } while ((int)lVar9 < (int)param_6);
          }
        }
        iVar48 = -iVar48;
      }
      dVar13 = -1.0 / *pdVar44;
      lVar10 = lVar5;
      lVar9 = lVar24;
      lVar27 = lVar26;
      lVar18 = lVar28;
      uVar42 = uVar41;
      lVar24 = lVar24 + 1;
      lVar28 = lVar28 + param_2;
      pdVar15 = pdVar44;
      do {
        lVar39 = local_20 + param_5 * 8;
        lVar5 = lVar10 + param_5;
        lVar26 = lVar47 + lVar27;
        pdVar44 = (double *)((long)param_4 + lVar39);
        pdVar19 = (double *)((long)param_1 + lVar26);
        lVar20 = -param_2;
        lVar23 = lVar5;
        uVar41 = uVar42;
        lVar17 = lVar43;
        do {
          lVar17 = lVar17 + param_2;
          dVar40 = dVar13 * *(double *)((long)param_1 + lVar17 * 8 + lVar45 + lVar9 * 8);
          if ((lVar27 + 8 < (0x10 - (long)param_1) + (long)pdVar19 &&
               (long)pdVar19 - (long)param_1 < lVar27 + 0x18) || (uVar21 < 7)) {
            pdVar6 = pdVar19;
            do {
              pdVar14 = pdVar6 + 1;
              *pdVar6 = *pdVar6 + pdVar6[lVar20] * dVar40;
              pdVar6 = pdVar14;
            } while (pdVar14 != pdVar19 + (ulong)uVar46 + 1);
          }
          else {
            uVar7 = (uint)((ulong)pdVar19 >> 3) & 1;
            if (uVar21 < uVar7) {
              uVar7 = uVar21;
            }
            uVar16 = uVar42;
            if (uVar7 != 0) {
              *(double *)(lVar25 + lVar17 * 8) =
                   *(double *)(lVar25 + lVar17 * 8) +
                   *(double *)((long)param_1 + lVar27 + 8) * dVar40;
              uVar16 = (int)lVar9 + 2;
            }
            uVar31 = ((uVar21 - uVar7) - 2 >> 1) + 1;
            iVar4 = uVar31 * 2;
            if (local_14 - uVar7 != 2) {
              uVar29 = 0;
              pdVar6 = param_1 + lVar17 + 1 + (ulong)uVar7;
              pdVar14 = param_1 + lVar17 + 1 + (ulong)uVar7;
              pdVar30 = param_1 + lVar43 + 1 + (ulong)uVar7;
              do {
                dVar38 = *pdVar30;
                uVar29 = uVar29 + 1;
                dVar36 = *pdVar6;
                pdVar14[1] = pdVar6[1] + dVar40 * pdVar30[1];
                *pdVar14 = dVar36 + dVar40 * dVar38;
                pdVar6 = pdVar6 + 2;
                pdVar14 = pdVar14 + 2;
                pdVar30 = pdVar30 + 2;
              } while (uVar29 < uVar31);
              uVar16 = uVar16 + iVar4;
              if (iVar4 == uVar21 - uVar7) goto LAB_003ccd48;
            }
            lVar12 = (long)(int)uVar16 + (lVar17 - lVar9);
            param_1[lVar12] = param_1[lVar12] + param_1[(int)uVar16 + lVar18] * dVar40;
          }
LAB_003ccd48:
          if ((param_4 != (double *)0x0) && (0 < (int)param_6)) {
            if ((local_20 < (0x10 - (long)param_4) + (long)pdVar44 &&
                 (long)pdVar44 - (long)param_4 < local_20 + 0x10) || (param_6 < 7)) {
              lVar12 = 0;
              do {
                pdVar44[lVar12] = pdVar44[lVar12] + pdVar22[lVar12] * dVar40;
                lVar12 = lVar12 + 1;
              } while ((int)lVar12 < (int)param_6);
            }
            else {
              uVar7 = (uint)((ulong)pdVar44 >> 3) & 1;
              if (param_6 < uVar7) {
                uVar7 = param_6;
              }
              if (uVar7 != 0) {
                *pdVar44 = *pdVar44 + *pdVar22 * dVar40;
              }
              uVar16 = ((param_6 - uVar7) - 2 >> 1) + 1;
              uVar31 = 0;
              iVar4 = uVar16 * 2;
              pdVar6 = param_4 + lVar10 + (ulong)uVar7;
              pdVar14 = param_4 + lVar23 + (ulong)uVar7;
              pdVar30 = param_4 + lVar23 + (ulong)uVar7;
              do {
                dVar38 = *pdVar6;
                uVar31 = uVar31 + 1;
                dVar36 = *pdVar30;
                pdVar14[1] = pdVar30[1] + dVar40 * pdVar6[1];
                *pdVar14 = dVar36 + dVar40 * dVar38;
                pdVar6 = pdVar6 + 2;
                pdVar14 = pdVar14 + 2;
                pdVar30 = pdVar30 + 2;
              } while (uVar31 < uVar16);
              if (iVar4 != param_6 - uVar7) {
                lVar11 = (long)(int)(iVar4 + (uint)(uVar7 != 0));
                lVar12 = lVar23 + lVar11;
                param_4[lVar12] = param_4[lVar12] + param_4[lVar10 + lVar11] * dVar40;
              }
            }
          }
          uVar41 = uVar41 + 1;
          pdVar44 = pdVar44 + param_5;
          lVar20 = lVar20 - param_2;
          lVar23 = lVar23 + param_5;
          pdVar19 = (double *)((long)pdVar19 + lVar47 + -8);
        } while (uVar41 != param_3);
        pdVar22 = pdVar22 + param_5;
        lVar43 = lVar43 + param_2 + 1;
        uVar21 = uVar21 - 1;
        uVar46 = uVar46 - 1;
        uVar41 = uVar42 + 1;
        local_14 = local_14 - 1;
        lVar45 = lVar45 + -8;
        pdVar44 = (double *)((long)pdVar15 + lVar47);
        *pdVar15 = -dVar13;
        lVar25 = lVar25 + lVar47 + param_2 * -8 + -8;
        local_20 = lVar39;
        if ((int)uVar41 < (int)param_3) goto LAB_003cc8e8;
LAB_003ccec0:
        if (ABS(*(double *)((long)param_1 + lVar26)) < dVar34) break;
        dVar13 = -1.0 / *pdVar44;
        if (uVar41 == param_3) {
          *pdVar44 = -dVar13;
          if (param_4 == (double *)0x0) {
            return iVar48;
          }
          goto LAB_003ccef8;
        }
        lVar10 = lVar5;
        lVar9 = lVar24;
        lVar27 = lVar26;
        lVar18 = lVar28;
        uVar42 = uVar41;
        lVar24 = lVar24 + 1;
        lVar28 = lVar28 + param_2;
        pdVar15 = pdVar44;
      } while( true );
    }
    iVar48 = 0;
  }
  return iVar48;
}


==================================================================

### FUNC 003cd0e8 (864 bytes) name=FUN_003cd0e8

undefined8
FUN_003cd0e8(float *param_1,ulong param_2,int param_3,float *param_4,ulong param_5,int param_6)

{
  float *pfVar1;
  float *pfVar2;
  double dVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  float *pfVar7;
  int iVar8;
  float *pfVar9;
  float *pfVar10;
  float *pfVar11;
  float *pfVar12;
  long lVar13;
  float *pfVar14;
  int iVar15;
  double __x;
  float fVar16;
  double dVar17;
  float fVar18;
  float fVar19;
  
  dVar3 = DAT_003cd448;
  param_2 = param_2 >> 2;
  param_5 = param_5 >> 2;
  if (param_3 < 1) {
    if (param_4 == (float *)0x0) {
      return 1;
    }
  }
  else {
    lVar13 = param_2 + 1;
    iVar15 = 0;
    pfVar12 = param_1;
    pfVar9 = param_1;
    pfVar14 = param_1;
    do {
      if (iVar15 < 1) {
        __x = (double)*pfVar9;
      }
      else {
        iVar8 = 1;
        *pfVar14 = *pfVar14 * *param_1;
        pfVar7 = param_1;
        pfVar10 = param_1;
        pfVar11 = pfVar12;
        if (iVar15 != 1) {
          do {
            pfVar11 = pfVar11 + 1;
            pfVar10 = pfVar10 + param_2;
            fVar16 = *pfVar11;
            if (0 < iVar8) {
              lVar5 = 0;
              do {
                pfVar1 = pfVar12 + lVar5;
                pfVar2 = pfVar10 + lVar5;
                lVar5 = lVar5 + 1;
                fVar16 = fVar16 - *pfVar1 * *pfVar2;
              } while ((int)lVar5 < iVar8);
            }
            pfVar7 = pfVar7 + lVar13;
            iVar8 = iVar8 + 1;
            *pfVar11 = fVar16 * *pfVar7;
          } while (iVar8 != iVar15);
        }
        lVar5 = 0;
        __x = (double)*pfVar9;
        do {
          pfVar7 = pfVar12 + lVar5;
          lVar5 = lVar5 + 1;
          __x = __x - (double)*pfVar7 * (double)*pfVar7;
        } while ((int)lVar5 < iVar15);
      }
      if (__x < dVar3) {
        return 0;
      }
      dVar17 = SQRT(__x);
      if (NAN(dVar17)) {
        dVar17 = sqrt(__x);
      }
      iVar15 = iVar15 + 1;
      pfVar14 = pfVar14 + param_2;
      pfVar12 = pfVar12 + param_2;
      *pfVar9 = (float)(1.0 / dVar17);
      pfVar9 = pfVar9 + lVar13;
    } while (iVar15 != param_3);
    if (param_4 == (float *)0x0) {
      return 1;
    }
    lVar5 = 0;
    iVar15 = 0;
    pfVar14 = param_1;
    pfVar12 = param_1;
    do {
      pfVar9 = param_4;
      if (0 < param_6) {
        do {
          fVar16 = pfVar9[lVar5];
          if (0 < iVar15) {
            lVar6 = 0;
            pfVar7 = pfVar9;
            do {
              pfVar10 = pfVar12 + lVar6;
              lVar6 = lVar6 + 1;
              fVar18 = *pfVar7;
              pfVar7 = pfVar7 + param_5;
              fVar16 = fVar16 - *pfVar10 * fVar18;
            } while ((int)lVar6 < iVar15);
          }
          pfVar9[lVar5] = fVar16 * *pfVar14;
          pfVar9 = pfVar9 + 1;
        } while (pfVar9 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar15 = iVar15 + 1;
      pfVar14 = pfVar14 + lVar13;
      lVar5 = lVar5 + param_5;
      pfVar12 = pfVar12 + param_2;
    } while (iVar15 != param_3);
  }
  iVar15 = param_3 + -1;
  if (-1 < iVar15) {
    lVar13 = (long)iVar15;
    lVar5 = lVar13 * param_5 * 4;
    pfVar14 = (float *)((long)param_1 + (param_2 + 1) * 4 * lVar13);
    param_4 = (float *)((long)param_4 + lVar5);
    param_1 = param_1 + lVar13 + ((long)param_3 + -1) * param_2;
    lVar5 = ((long)param_3 * 4 + -4) * param_5 - lVar5;
    iVar8 = iVar15;
    do {
      if (0 < param_6) {
        pfVar12 = param_4;
        do {
          fVar16 = *pfVar12;
          if (iVar8 < iVar15) {
            pfVar9 = (float *)((long)pfVar12 + lVar5);
            pfVar7 = param_1;
            iVar4 = iVar15;
            do {
              fVar18 = *pfVar7;
              iVar4 = iVar4 + -1;
              fVar19 = *pfVar9;
              pfVar7 = pfVar7 + -param_2;
              pfVar9 = pfVar9 + -param_5;
              fVar16 = fVar16 - fVar18 * fVar19;
            } while (iVar4 != iVar8);
          }
          pfVar9 = pfVar12 + 1;
          *pfVar12 = fVar16 * *pfVar14;
          pfVar12 = pfVar9;
        } while (pfVar9 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar8 = iVar8 + -1;
      pfVar14 = pfVar14 + -(param_2 + 1);
      param_4 = param_4 + -param_5;
      param_1 = param_1 + -1;
      lVar5 = lVar5 + param_5 * 4;
    } while (iVar8 != -1);
  }
  return 1;
}


==================================================================

### FUNC 003cd450 (776 bytes) name=FUN_003cd450

undefined8
FUN_003cd450(double *param_1,ulong param_2,int param_3,double *param_4,ulong param_5,int param_6)

{
  double *pdVar1;
  double *pdVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  double *pdVar6;
  int iVar7;
  double *pdVar8;
  double *pdVar9;
  double *pdVar10;
  double *pdVar11;
  long lVar12;
  double *pdVar13;
  int iVar14;
  double dVar15;
  double dVar16;
  double dVar17;
  
  dVar16 = DAT_003cd758;
  param_2 = param_2 >> 3;
  param_5 = param_5 >> 3;
  if (param_3 < 1) {
    if (param_4 == (double *)0x0) {
      return 1;
    }
  }
  else {
    lVar12 = param_2 + 1;
    iVar14 = 0;
    pdVar11 = param_1;
    pdVar8 = param_1;
    pdVar13 = param_1;
    do {
      if (iVar14 < 1) {
        dVar15 = *pdVar8;
      }
      else {
        iVar7 = 1;
        *pdVar13 = *pdVar13 * *param_1;
        pdVar6 = param_1;
        pdVar9 = param_1;
        pdVar10 = pdVar11;
        if (iVar14 != 1) {
          do {
            pdVar10 = pdVar10 + 1;
            pdVar9 = pdVar9 + param_2;
            dVar15 = *pdVar10;
            if (0 < iVar7) {
              lVar4 = 0;
              do {
                pdVar1 = pdVar11 + lVar4;
                pdVar2 = pdVar9 + lVar4;
                lVar4 = lVar4 + 1;
                dVar15 = dVar15 - *pdVar2 * *pdVar1;
              } while ((int)lVar4 < iVar7);
            }
            pdVar6 = pdVar6 + lVar12;
            iVar7 = iVar7 + 1;
            *pdVar10 = dVar15 * *pdVar6;
          } while (iVar7 != iVar14);
        }
        dVar15 = *pdVar8;
        lVar4 = 0;
        do {
          pdVar6 = pdVar11 + lVar4;
          lVar4 = lVar4 + 1;
          dVar15 = dVar15 - *pdVar6 * *pdVar6;
        } while ((int)lVar4 < iVar14);
      }
      if (dVar15 < dVar16) {
        return 0;
      }
      dVar17 = SQRT(dVar15);
      if (NAN(dVar17)) {
        dVar17 = sqrt(dVar15);
      }
      iVar14 = iVar14 + 1;
      pdVar13 = pdVar13 + param_2;
      pdVar11 = pdVar11 + param_2;
      *pdVar8 = 1.0 / dVar17;
      pdVar8 = pdVar8 + lVar12;
    } while (iVar14 != param_3);
    if (param_4 == (double *)0x0) {
      return 1;
    }
    lVar4 = 0;
    iVar14 = 0;
    pdVar13 = param_1;
    pdVar11 = param_1;
    do {
      pdVar8 = param_4;
      if (0 < param_6) {
        do {
          dVar16 = pdVar8[lVar4];
          if (0 < iVar14) {
            lVar5 = 0;
            pdVar6 = pdVar8;
            do {
              pdVar9 = pdVar11 + lVar5;
              lVar5 = lVar5 + 1;
              dVar15 = *pdVar6;
              pdVar6 = pdVar6 + param_5;
              dVar16 = dVar16 - dVar15 * *pdVar9;
            } while ((int)lVar5 < iVar14);
          }
          pdVar8[lVar4] = dVar16 * *pdVar13;
          pdVar8 = pdVar8 + 1;
        } while (pdVar8 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar14 = iVar14 + 1;
      pdVar13 = pdVar13 + lVar12;
      lVar4 = lVar4 + param_5;
      pdVar11 = pdVar11 + param_2;
    } while (iVar14 != param_3);
  }
  iVar14 = param_3 + -1;
  if (-1 < iVar14) {
    lVar12 = (long)iVar14;
                    /* catch() { ... } // from try @ 003cdc58 with catch @ 003cd624 */
    lVar4 = lVar12 * param_5 * 8;
    pdVar13 = (double *)((long)param_1 + (param_2 + 1) * 8 * lVar12);
    param_4 = (double *)((long)param_4 + lVar4);
    param_1 = param_1 + lVar12 + ((long)param_3 + -1) * param_2;
    lVar4 = ((long)param_3 * 8 + -8) * param_5 - lVar4;
    iVar7 = iVar14;
    do {
      if (0 < param_6) {
        pdVar11 = param_4;
        do {
          dVar16 = *pdVar11;
          if (iVar7 < iVar14) {
            pdVar8 = (double *)((long)pdVar11 + lVar4);
            pdVar6 = param_1;
            iVar3 = iVar14;
            do {
              iVar3 = iVar3 + -1;
              dVar17 = *pdVar6;
              dVar15 = *pdVar8;
              pdVar6 = pdVar6 + -param_2;
              pdVar8 = pdVar8 + -param_5;
              dVar16 = dVar16 - dVar15 * dVar17;
            } while (iVar3 != iVar7);
          }
          pdVar8 = pdVar11 + 1;
          *pdVar11 = dVar16 * *pdVar13;
          pdVar11 = pdVar8;
        } while (pdVar8 != param_4 + (ulong)(param_6 - 1) + 1);
      }
      iVar7 = iVar7 + -1;
      pdVar13 = pdVar13 + -(param_2 + 1);
      param_4 = param_4 + -param_5;
      param_1 = param_1 + -1;
      lVar4 = lVar4 + param_5 * 8;
                    /* try { // try from 003cd6e0 to 004cd6e3 has its CatchHandler @ 003cdc3c */
    } while (iVar7 != -1);
  }
  return 1;
}


==================================================================

### FUNC 003cd760 (292 bytes) name=FUN_003cd760

int FUN_003cd760(undefined8 *param_1,int param_2)

{
  uint uVar1;
  undefined8 uVar2;
  byte bVar3;
  undefined8 uVar4;
  undefined8 *puVar5;
  byte *pbVar7;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  undefined8 *puVar6;
  byte *pbVar8;
  
  if (param_2 < 0x10) {
    iVar10 = 0;
    iVar11 = 0;
    iVar12 = 0;
    iVar13 = 0;
    iVar9 = 0;
  }
  else {
    iVar10 = 0;
    iVar11 = 0;
    iVar12 = 0;
    iVar13 = 0;
    uVar1 = param_2 - 0x10U >> 4;
    puVar5 = param_1;
    do {
      puVar6 = puVar5 + 2;
      uVar4 = puVar5[1];
      uVar2 = *puVar5;
      bVar3 = POPCOUNT((char)((ulong)uVar2 >> 0x10)) + POPCOUNT((char)((ulong)uVar2 >> 0x18));
      iVar10 = iVar10 + (CONCAT12(bVar3,(ushort)(byte)POPCOUNT((char)uVar2) +
                                        (ushort)(byte)POPCOUNT((char)((ulong)uVar2 >> 8))) & 0xffff)
                        + (uint)bVar3;
      iVar11 = iVar11 + (uint)(byte)(POPCOUNT((char)((ulong)uVar2 >> 0x20)) +
                                    POPCOUNT((char)((ulong)uVar2 >> 0x28))) +
                        (uint)(byte)(POPCOUNT((char)((ulong)uVar2 >> 0x30)) +
                                    POPCOUNT((char)((ulong)uVar2 >> 0x38)));
      iVar12 = iVar12 + (uint)(byte)(POPCOUNT((char)uVar4) + POPCOUNT((char)((ulong)uVar4 >> 8))) +
                        (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x10)) +
                                    POPCOUNT((char)((ulong)uVar4 >> 0x18)));
      iVar13 = iVar13 + (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x20)) +
                                    POPCOUNT((char)((ulong)uVar4 >> 0x28))) +
                        (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x30)) +
                                    POPCOUNT((char)((ulong)uVar4 >> 0x38)));
      puVar5 = puVar6;
    } while (puVar6 != param_1 + ((ulong)uVar1 + 1) * 2);
    iVar9 = (uVar1 + 1) * 0x10;
  }
  iVar10 = iVar10 + iVar11 + iVar12 + iVar13;
  if (iVar9 < param_2 + -3) {
    uVar1 = (uint)((param_2 + -4) - iVar9) >> 2;
    pbVar8 = (byte *)((long)param_1 + (long)iVar9);
    do {
      pbVar7 = pbVar8 + 4;
      iVar10 = iVar10 + (uint)(byte)(&DAT_00478b50)[*pbVar8] +
                        (uint)(byte)(&DAT_00478b50)[pbVar8[1]] +
                        (uint)(byte)(&DAT_00478b50)[pbVar8[2]] +
                        (uint)(byte)(&DAT_00478b50)[pbVar8[3]];
      pbVar8 = pbVar7;
    } while (pbVar7 != (byte *)((long)param_1 + (long)iVar9 + 4 + (ulong)uVar1 * 4));
    iVar9 = iVar9 + 4 + uVar1 * 4;
  }
  if (iVar9 < param_2) {
    pbVar8 = (byte *)((long)param_1 + (long)iVar9);
    do {
      pbVar7 = pbVar8 + 1;
      iVar10 = iVar10 + (uint)(byte)(&DAT_00478b50)[*pbVar8];
      pbVar8 = pbVar7;
    } while (pbVar7 != (byte *)((long)param_1 +
                               (long)iVar9 + 1 + (ulong)(uint)((param_2 + -1) - iVar9)));
  }
  return iVar10;
}


==================================================================

### FUNC 003cd884 (368 bytes) name=FUN_003cd884

int FUN_003cd884(long param_1,long param_2,int param_3)

{
  byte *pbVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  uint uVar4;
  undefined8 uVar5;
  byte bVar6;
  undefined8 uVar7;
  long lVar8;
  byte *pbVar9;
  byte *pbVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  undefined8 uVar16;
  undefined8 uVar17;
  
  iVar12 = 0;
  iVar13 = 0;
  iVar14 = 0;
  iVar15 = 0;
  if (param_3 + -0xf < 1) {
    iVar11 = 0;
  }
  else {
    lVar8 = 0;
    do {
      puVar2 = (undefined8 *)(param_1 + lVar8);
      puVar3 = (undefined8 *)(param_2 + lVar8);
      lVar8 = lVar8 + 0x10;
      uVar17 = puVar2[1];
      uVar16 = *puVar2;
      uVar7 = puVar3[1];
      uVar5 = *puVar3;
      bVar6 = POPCOUNT((byte)((ulong)uVar5 >> 0x10) ^ (byte)((ulong)uVar16 >> 0x10)) +
              POPCOUNT((byte)((ulong)uVar5 >> 0x18) ^ (byte)((ulong)uVar16 >> 0x18));
      iVar12 = iVar12 + (CONCAT12(bVar6,(ushort)(byte)POPCOUNT((byte)uVar5 ^ (byte)uVar16) +
                                        (ushort)(byte)POPCOUNT((byte)((ulong)uVar5 >> 8) ^
                                                               (byte)((ulong)uVar16 >> 8))) & 0xffff
                        ) + (uint)bVar6;
      iVar13 = iVar13 + (uint)(byte)(POPCOUNT((byte)((ulong)uVar5 >> 0x20) ^
                                              (byte)((ulong)uVar16 >> 0x20)) +
                                    POPCOUNT((byte)((ulong)uVar5 >> 0x28) ^
                                             (byte)((ulong)uVar16 >> 0x28))) +
                        (uint)(byte)(POPCOUNT((byte)((ulong)uVar5 >> 0x30) ^
                                              (byte)((ulong)uVar16 >> 0x30)) +
                                    POPCOUNT((byte)((ulong)uVar5 >> 0x38) ^
                                             (byte)((ulong)uVar16 >> 0x38)));
      iVar14 = iVar14 + (uint)(byte)(POPCOUNT((byte)uVar7 ^ (byte)uVar17) +
                                    POPCOUNT((byte)((ulong)uVar7 >> 8) ^ (byte)((ulong)uVar17 >> 8))
                                    ) +
                        (uint)(byte)(POPCOUNT((byte)((ulong)uVar7 >> 0x10) ^
                                              (byte)((ulong)uVar17 >> 0x10)) +
                                    POPCOUNT((byte)((ulong)uVar7 >> 0x18) ^
                                             (byte)((ulong)uVar17 >> 0x18)));
      iVar15 = iVar15 + (uint)(byte)(POPCOUNT((byte)((ulong)uVar7 >> 0x20) ^
                                              (byte)((ulong)uVar17 >> 0x20)) +
                                    POPCOUNT((byte)((ulong)uVar7 >> 0x28) ^
                                             (byte)((ulong)uVar17 >> 0x28))) +
                        (uint)(byte)(POPCOUNT((byte)((ulong)uVar7 >> 0x30) ^
                                              (byte)((ulong)uVar17 >> 0x30)) +
                                    POPCOUNT((byte)((ulong)uVar7 >> 0x38) ^
                                             (byte)((ulong)uVar17 >> 0x38)));
    } while ((int)lVar8 < param_3 + -0xf);
    iVar11 = (param_3 - 0x10U & 0xfffffff0) + 0x10;
  }
  iVar12 = iVar12 + iVar13 + iVar14 + iVar15;
  if (iVar11 < param_3 + -3) {
    lVar8 = (long)iVar11;
    uVar4 = (uint)((param_3 + -4) - iVar11) >> 2;
    pbVar9 = (byte *)(param_1 + lVar8);
    pbVar10 = (byte *)(param_2 + lVar8);
    do {
      pbVar1 = pbVar9 + 4;
      iVar12 = iVar12 + (uint)(byte)(&DAT_00478b50)[*pbVar10 ^ *pbVar9] +
                        (uint)(byte)(&DAT_00478b50)[pbVar10[1] ^ pbVar9[1]] +
                        (uint)(byte)(&DAT_00478b50)[pbVar10[2] ^ pbVar9[2]] +
                        (uint)(byte)(&DAT_00478b50)[pbVar10[3] ^ pbVar9[3]];
      pbVar9 = pbVar1;
      pbVar10 = pbVar10 + 4;
    } while (pbVar1 != (byte *)(param_1 + lVar8 + 4 + (ulong)uVar4 * 4));
    iVar11 = iVar11 + 4 + uVar4 * 4;
  }
  if (iVar11 < param_3) {
    lVar8 = 0;
    do {
      pbVar9 = (byte *)(param_2 + iVar11 + lVar8);
      pbVar10 = (byte *)(param_1 + iVar11 + lVar8);
      lVar8 = lVar8 + 1;
      iVar12 = iVar12 + (uint)(byte)(&DAT_00478b50)[*pbVar9 ^ *pbVar10];
    } while (lVar8 != (ulong)(uint)((param_3 + -1) - iVar11) + 1);
  }
  return iVar12;
}


==================================================================

### FUNC 003cd9f4 (524 bytes) name=FUN_003cd9f4

int FUN_003cd9f4(undefined8 *param_1,int param_2,int param_3)

{
  uint uVar1;
  undefined8 uVar2;
  byte bVar3;
  undefined8 uVar4;
  byte *pbVar5;
  undefined8 *puVar7;
  undefined *puVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  byte *pbVar6;
  undefined8 *puVar8;
  
  if (param_3 == 1) {
    if (param_2 < 0x10) {
      iVar11 = 0;
      iVar12 = 0;
      iVar13 = 0;
      iVar14 = 0;
      iVar10 = 0;
    }
    else {
      iVar11 = 0;
      iVar12 = 0;
      iVar13 = 0;
      iVar14 = 0;
      uVar1 = param_2 - 0x10U >> 4;
      puVar7 = param_1;
      do {
        puVar8 = puVar7 + 2;
        uVar4 = puVar7[1];
        uVar2 = *puVar7;
        bVar3 = POPCOUNT((char)((ulong)uVar2 >> 0x10)) + POPCOUNT((char)((ulong)uVar2 >> 0x18));
        iVar11 = iVar11 + (CONCAT12(bVar3,(ushort)(byte)POPCOUNT((char)uVar2) +
                                          (ushort)(byte)POPCOUNT((char)((ulong)uVar2 >> 8))) &
                          0xffff) + (uint)bVar3;
        iVar12 = iVar12 + (uint)(byte)(POPCOUNT((char)((ulong)uVar2 >> 0x20)) +
                                      POPCOUNT((char)((ulong)uVar2 >> 0x28))) +
                          (uint)(byte)(POPCOUNT((char)((ulong)uVar2 >> 0x30)) +
                                      POPCOUNT((char)((ulong)uVar2 >> 0x38)));
        iVar13 = iVar13 + (uint)(byte)(POPCOUNT((char)uVar4) + POPCOUNT((char)((ulong)uVar4 >> 8)))
                          + (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x10)) +
                                        POPCOUNT((char)((ulong)uVar4 >> 0x18)));
        iVar14 = iVar14 + (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x20)) +
                                      POPCOUNT((char)((ulong)uVar4 >> 0x28))) +
                          (uint)(byte)(POPCOUNT((char)((ulong)uVar4 >> 0x30)) +
                                      POPCOUNT((char)((ulong)uVar4 >> 0x38)));
        puVar7 = puVar8;
      } while (puVar8 != param_1 + ((ulong)uVar1 + 1) * 2);
      iVar10 = (uVar1 + 1) * 0x10;
    }
    iVar11 = iVar11 + iVar12 + iVar13 + iVar14;
    if (iVar10 < param_2 + -3) {
      uVar1 = (uint)((param_2 + -4) - iVar10) >> 2;
      pbVar6 = (byte *)((long)param_1 + (long)iVar10);
      do {
        pbVar5 = pbVar6 + 4;
        iVar11 = iVar11 + (uint)(byte)(&DAT_00478b50)[*pbVar6] +
                          (uint)(byte)(&DAT_00478b50)[pbVar6[1]] +
                          (uint)(byte)(&DAT_00478b50)[pbVar6[2]] +
                          (uint)(byte)(&DAT_00478b50)[pbVar6[3]];
        pbVar6 = pbVar5;
      } while (pbVar5 != (byte *)((long)param_1 + (long)iVar10 + 4 + (ulong)uVar1 * 4));
      iVar10 = iVar10 + 4 + uVar1 * 4;
    }
    if (iVar10 < param_2) {
      pbVar6 = (byte *)((long)param_1 + (long)iVar10);
      do {
        pbVar5 = pbVar6 + 1;
        iVar11 = iVar11 + (uint)(byte)(&DAT_00478b50)[*pbVar6];
        pbVar6 = pbVar5;
      } while (pbVar5 != (byte *)((long)param_1 +
                                 (long)iVar10 + 1 + (ulong)(uint)((param_2 + -1) - iVar10)));
    }
  }
  else {
    if (param_3 == 2) {
      puVar9 = &DAT_00478c50;
    }
    else {
      if (param_3 != 4) {
        return -1;
      }
      puVar9 = &DAT_00478d50;
    }
    if (param_2 < 4) {
      iVar11 = 0;
      iVar10 = 0;
    }
    else {
      uVar1 = param_2 - 4U >> 2;
      iVar11 = 0;
      pbVar6 = (byte *)((long)param_1 + 1);
      do {
        pbVar5 = pbVar6 + 4;
        iVar11 = iVar11 + (uint)(byte)puVar9[pbVar6[-1]] + (uint)(byte)puVar9[*pbVar6] +
                          (uint)(byte)puVar9[pbVar6[1]] + (uint)(byte)puVar9[pbVar6[2]];
        pbVar6 = pbVar5;
      } while (pbVar5 != (byte *)((long)param_1 + (ulong)uVar1 * 4 + 5));
      iVar10 = (uVar1 + 1) * 4;
    }
    if (iVar10 < param_2) {
      pbVar6 = (byte *)((long)param_1 + (long)iVar10);
      do {
        pbVar5 = pbVar6 + 1;
        iVar11 = iVar11 + (uint)(byte)puVar9[*pbVar6];
        pbVar6 = pbVar5;
      } while (pbVar5 != (byte *)((long)param_1 +
                                 (long)iVar10 + 1 + (ulong)(uint)((param_2 + -1) - iVar10)));
    }
  }
  return iVar11;
}


==================================================================

### FUNC 003cdc00 (672 bytes) name=FUN_003cdc00

int FUN_003cdc00(byte *param_1,long param_2,int param_3,int param_4)

{
  byte *pbVar1;
  undefined8 *puVar2;
  uint uVar3;
  undefined8 uVar4;
  byte bVar5;
  undefined8 uVar6;
  long lVar7;
  long lVar8;
  byte *pbVar9;
  byte *pbVar10;
  undefined *puVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  
  if (param_4 == 1) {
    iVar13 = 0;
    iVar14 = 0;
    iVar15 = 0;
    iVar16 = 0;
    if (param_3 + -0xf < 1) {
      iVar12 = 0;
    }
    else {
      lVar8 = 0;
      do {
        pbVar9 = param_1 + lVar8;
        puVar2 = (undefined8 *)(param_2 + lVar8);
        lVar8 = lVar8 + 0x10;
        uVar18 = *(undefined8 *)(pbVar9 + 8);
        uVar17 = *(undefined8 *)pbVar9;
        uVar6 = puVar2[1];
        uVar4 = *puVar2;
        bVar5 = POPCOUNT((byte)((ulong)uVar4 >> 0x10) ^ (byte)((ulong)uVar17 >> 0x10)) +
                POPCOUNT((byte)((ulong)uVar4 >> 0x18) ^ (byte)((ulong)uVar17 >> 0x18));
        iVar13 = iVar13 + (CONCAT12(bVar5,(ushort)(byte)POPCOUNT((byte)uVar4 ^ (byte)uVar17) +
                                          (ushort)(byte)POPCOUNT((byte)((ulong)uVar4 >> 8) ^
                                                                 (byte)((ulong)uVar17 >> 8))) &
                          0xffff) + (uint)bVar5;
        iVar14 = iVar14 + (uint)(byte)(POPCOUNT((byte)((ulong)uVar4 >> 0x20) ^
                                                (byte)((ulong)uVar17 >> 0x20)) +
                                      POPCOUNT((byte)((ulong)uVar4 >> 0x28) ^
                                               (byte)((ulong)uVar17 >> 0x28))) +
                          (uint)(byte)(POPCOUNT((byte)((ulong)uVar4 >> 0x30) ^
                                                (byte)((ulong)uVar17 >> 0x30)) +
                                      POPCOUNT((byte)((ulong)uVar4 >> 0x38) ^
                                               (byte)((ulong)uVar17 >> 0x38)));
        iVar15 = iVar15 + (uint)(byte)(POPCOUNT((byte)uVar6 ^ (byte)uVar18) +
                                      POPCOUNT((byte)((ulong)uVar6 >> 8) ^
                                               (byte)((ulong)uVar18 >> 8))) +
                          (uint)(byte)(POPCOUNT((byte)((ulong)uVar6 >> 0x10) ^
                                                (byte)((ulong)uVar18 >> 0x10)) +
                                      POPCOUNT((byte)((ulong)uVar6 >> 0x18) ^
                                               (byte)((ulong)uVar18 >> 0x18)));
        iVar16 = iVar16 + (uint)(byte)(POPCOUNT((byte)((ulong)uVar6 >> 0x20) ^
                                                (byte)((ulong)uVar18 >> 0x20)) +
                                      POPCOUNT((byte)((ulong)uVar6 >> 0x28) ^
                                               (byte)((ulong)uVar18 >> 0x28))) +
                          (uint)(byte)(POPCOUNT((byte)((ulong)uVar6 >> 0x30) ^
                                                (byte)((ulong)uVar18 >> 0x30)) +
                                      POPCOUNT((byte)((ulong)uVar6 >> 0x38) ^
                                               (byte)((ulong)uVar18 >> 0x38)));
      } while ((int)lVar8 < param_3 + -0xf);
      iVar12 = (param_3 - 0x10U & 0xfffffff0) + 0x10;
    }
    iVar13 = iVar13 + iVar14 + iVar15 + iVar16;
    if (iVar12 < param_3 + -3) {
      lVar8 = (long)iVar12;
      uVar3 = (uint)((param_3 + -4) - iVar12) >> 2;
      pbVar9 = param_1 + lVar8;
      pbVar10 = (byte *)(param_2 + lVar8);
      do {
        pbVar1 = pbVar9 + 4;
        iVar13 = iVar13 + (uint)(byte)(&DAT_00478b50)[*pbVar10 ^ *pbVar9] +
                          (uint)(byte)(&DAT_00478b50)[pbVar10[1] ^ pbVar9[1]] +
                          (uint)(byte)(&DAT_00478b50)[pbVar10[2] ^ pbVar9[2]] +
                          (uint)(byte)(&DAT_00478b50)[pbVar10[3] ^ pbVar9[3]];
        pbVar9 = pbVar1;
        pbVar10 = pbVar10 + 4;
      } while (pbVar1 != param_1 + lVar8 + 4 + (ulong)uVar3 * 4);
      iVar12 = iVar12 + 4 + uVar3 * 4;
    }
    if (iVar12 < param_3) {
      lVar8 = 0;
      do {
        pbVar9 = (byte *)(param_2 + iVar12 + lVar8);
        lVar7 = lVar8 + iVar12;
        lVar8 = lVar8 + 1;
        iVar13 = iVar13 + (uint)(byte)(&DAT_00478b50)[*pbVar9 ^ param_1[lVar7]];
      } while (lVar8 != (ulong)(uint)((param_3 + -1) - iVar12) + 1);
    }
  }
  else {
    if (param_4 == 2) {
      puVar11 = &DAT_00478c50;
    }
    else {
      if (param_4 != 4) {
        return -1;
      }
      puVar11 = &DAT_00478d50;
    }
    if (param_3 < 4) {
      iVar13 = 0;
      iVar14 = 0;
    }
    else {
      uVar3 = param_3 - 4U >> 2;
                    /* catch() { ... } // from try @ 003cd6e0 with catch @ 003cdc3c */
      iVar13 = 0;
      pbVar9 = (byte *)(param_2 + 1);
      pbVar10 = param_1;
      do {
        pbVar1 = pbVar9 + 4;
                    /* try { // try from 003cdc58 to 004cdc5b has its CatchHandler @ 003cd624 */
                    /* catch() { ... } // from try @ 003ce31c with catch @ 003cdc5c */
        iVar13 = iVar13 + (uint)(byte)puVar11[pbVar9[-1] ^ *pbVar10] +
                          (uint)(byte)puVar11[*pbVar9 ^ pbVar10[1]] +
                          (uint)(byte)puVar11[pbVar9[1] ^ pbVar10[2]] +
                          (uint)(byte)puVar11[pbVar9[2] ^ pbVar10[3]];
        pbVar9 = pbVar1;
        pbVar10 = pbVar10 + 4;
      } while (pbVar1 != (byte *)(param_2 + (ulong)uVar3 * 4 + 5));
      iVar14 = (uVar3 + 1) * 4;
    }
    if (iVar14 < param_3) {
      lVar8 = 0;
      do {
        pbVar9 = (byte *)(param_2 + iVar14 + lVar8);
        lVar7 = lVar8 + iVar14;
        lVar8 = lVar8 + 1;
        iVar13 = iVar13 + (uint)(byte)puVar11[*pbVar9 ^ param_1[lVar7]];
      } while (lVar8 != (ulong)(uint)((param_3 + -1) - iVar14) + 1);
    }
  }
  return iVar13;
}


==================================================================

### FUNC 003cdea0 (216 bytes) name=FUN_003cdea0

float FUN_003cdea0(float *param_1,long param_2,int param_3)

{
  float *pfVar1;
  uint uVar2;
  long lVar3;
  long lVar4;
  float *pfVar5;
  ulong uVar6;
  float *pfVar7;
  ulong uVar8;
  float fVar9;
  float fVar10;
  
  if (param_3 < 4) {
    fVar9 = 0.0;
    uVar6 = 0;
  }
  else {
    fVar9 = 0.0;
    uVar2 = param_3 - 4U >> 2;
    pfVar5 = (float *)(param_2 + 4);
    pfVar7 = param_1;
    do {
      pfVar1 = pfVar5 + 4;
      fVar9 = fVar9 + (pfVar7[1] - *pfVar5) * (pfVar7[1] - *pfVar5) +
                      (*pfVar7 - pfVar5[-1]) * (*pfVar7 - pfVar5[-1]) +
                      (pfVar7[2] - pfVar5[1]) * (pfVar7[2] - pfVar5[1]) +
                      (pfVar7[3] - pfVar5[2]) * (pfVar7[3] - pfVar5[2]);
      pfVar5 = pfVar1;
      pfVar7 = pfVar7 + 4;
    } while (pfVar1 != (float *)(param_2 + (ulong)uVar2 * 0x10 + 0x14));
    uVar6 = (ulong)((uVar2 + 1) * 4);
  }
  if ((int)uVar6 < param_3) {
    uVar8 = -(uVar6 >> 0x1f) & 0xfffffffc00000000 | uVar6 << 2;
    lVar4 = 0;
    do {
      lVar3 = lVar4 + uVar8;
      pfVar5 = (float *)(param_2 + uVar8 + lVar4);
      lVar4 = lVar4 + 4;
      fVar10 = *(float *)((long)param_1 + lVar3) - *pfVar5;
      fVar9 = fVar9 + fVar10 * fVar10;
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar6) + 1) * 4);
  }
  return fVar9;
}


==================================================================

### FUNC 003cdf78 (196 bytes) name=FUN_003cdf78

float FUN_003cdf78(undefined8 *param_1,undefined8 *param_2,int param_3)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined8 *puVar5;
  ulong uVar7;
  undefined8 *puVar8;
  ulong uVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  undefined8 *puVar6;
  
  if (param_3 < 4) {
    fVar10 = 0.0;
    fVar11 = 0.0;
    fVar12 = 0.0;
    fVar13 = 0.0;
    uVar7 = 0;
  }
  else {
    fVar10 = 0.0;
    fVar11 = 0.0;
    fVar12 = 0.0;
    fVar13 = 0.0;
    uVar1 = param_3 - 4U >> 2;
    puVar5 = param_1;
    puVar8 = param_2;
    do {
      puVar6 = puVar5 + 2;
      fVar10 = fVar10 + ABS((float)*puVar5 - (float)*puVar8);
      fVar11 = fVar11 + ABS((float)((ulong)*puVar5 >> 0x20) - (float)((ulong)*puVar8 >> 0x20));
      fVar12 = fVar12 + ABS((float)puVar5[1] - (float)puVar8[1]);
      fVar13 = fVar13 + ABS((float)((ulong)puVar5[1] >> 0x20) - (float)((ulong)puVar8[1] >> 0x20));
      puVar5 = puVar6;
      puVar8 = puVar8 + 2;
    } while (puVar6 != param_1 + ((ulong)uVar1 + 1) * 2);
    uVar7 = (ulong)((uVar1 + 1) * 4);
  }
  fVar13 = fVar10 + fVar11 + fVar12 + fVar13;
  if ((int)uVar7 < param_3) {
    uVar9 = -(uVar7 >> 0x1f) & 0xfffffffc00000000 | uVar7 << 2;
    lVar4 = 0;
    do {
      lVar2 = lVar4 + uVar9;
      lVar3 = lVar4 + uVar9;
      lVar4 = lVar4 + 4;
      fVar13 = fVar13 + ABS(*(float *)((long)param_1 + lVar2) - *(float *)((long)param_2 + lVar3));
    } while (lVar4 != ((ulong)(uint)((param_3 + -1) - (int)uVar7) + 1) * 4);
  }
  return fVar13;
}


==================================================================

### FUNC 003ce03c (2348 bytes) name=FUN_003ce03c

int FUN_003ce03c(long param_1,long param_2,int param_3)

{
  unkbyte9 *pVar1;
  undefined1 (*pauVar2) [16];
  ulong uVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  uint3 uVar13;
  uint3 uVar14;
  byte *pbVar15;
  byte *pbVar76;
  uint uVar137;
  long lVar138;
  undefined8 *puVar139;
  uint uVar140;
  uint uVar141;
  undefined8 *puVar142;
  int iVar143;
  undefined1 uVar144;
  byte bVar145;
  int iVar146;
  int iVar147;
  byte bVar149;
  int iVar150;
  int iVar151;
  int iVar152;
  int iVar153;
  byte bVar154;
  undefined1 auVar148 [16];
  int iVar155;
  int iVar156;
  int iVar157;
  byte bVar158;
  byte bVar159;
  int iVar160;
  int iVar161;
  int iVar162;
  int iVar163;
  byte bVar166;
  int iVar164;
  int iVar165;
  int iVar167;
  int iVar168;
  int iVar169;
  int iVar170;
  int iVar171;
  int iVar172;
  int iVar173;
  int iVar174;
  byte bVar178;
  int iVar175;
  int iVar176;
  int iVar177;
  int iVar179;
  int iVar180;
  int iVar181;
  int iVar182;
  int iVar183;
  int iVar184;
  int iVar185;
  undefined8 uVar186;
  undefined8 uVar187;
  int iVar188;
  int iVar189;
  int iVar190;
  int iVar191;
  int iVar192;
  int iVar193;
  int iVar194;
  int iVar195;
  int iVar196;
  int iVar197;
  int iVar198;
  int iVar199;
  int iVar200;
  int iVar201;
  int iVar202;
  int iVar203;
  int iVar204;
  int iVar205;
  int iVar206;
  int iVar207;
  int iVar208;
  int iVar209;
  int iVar210;
  int iVar211;
  int iVar212;
  int iVar213;
  int iVar214;
  int iVar215;
  int iVar216;
  int iVar217;
  int iVar218;
  byte *pbVar16;
  byte *pbVar17;
  byte *pbVar18;
  byte *pbVar19;
  byte *pbVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  byte *pbVar24;
  byte *pbVar25;
  byte *pbVar26;
  byte *pbVar27;
  byte *pbVar28;
  byte *pbVar29;
  byte *pbVar30;
  byte *pbVar31;
  byte *pbVar32;
  byte *pbVar33;
  byte *pbVar34;
  byte *pbVar35;
  byte *pbVar36;
  byte *pbVar37;
  byte *pbVar38;
  byte *pbVar39;
  byte *pbVar40;
  byte *pbVar41;
  byte *pbVar42;
  byte *pbVar43;
  byte *pbVar44;
  byte *pbVar45;
  undefined1 *puVar46;
  undefined1 *puVar47;
  byte *pbVar48;
  byte *pbVar49;
  byte *pbVar50;
  byte *pbVar51;
  byte *pbVar52;
  byte *pbVar53;
  byte *pbVar54;
  byte *pbVar55;
  byte *pbVar56;
  byte *pbVar57;
  byte *pbVar58;
  byte *pbVar59;
  byte *pbVar60;
  byte *pbVar61;
  byte *pbVar62;
  byte *pbVar63;
  byte *pbVar64;
  byte *pbVar65;
  byte *pbVar66;
  byte *pbVar67;
  byte *pbVar68;
  byte *pbVar69;
  byte *pbVar70;
  byte *pbVar71;
  byte *pbVar72;
  byte *pbVar73;
  byte *pbVar74;
  undefined1 *puVar75;
  byte *pbVar77;
  byte *pbVar78;
  byte *pbVar79;
  byte *pbVar80;
  byte *pbVar81;
  byte *pbVar82;
  byte *pbVar83;
  byte *pbVar84;
  byte *pbVar85;
  byte *pbVar86;
  byte *pbVar87;
  byte *pbVar88;
  byte *pbVar89;
  byte *pbVar90;
  byte *pbVar91;
  byte *pbVar92;
  byte *pbVar93;
  byte *pbVar94;
  byte *pbVar95;
  byte *pbVar96;
  byte *pbVar97;
  byte *pbVar98;
  byte *pbVar99;
  byte *pbVar100;
  byte *pbVar101;
  byte *pbVar102;
  byte *pbVar103;
  byte *pbVar104;
  byte *pbVar105;
  byte *pbVar106;
  byte *pbVar107;
  byte *pbVar108;
  byte *pbVar109;
  byte *pbVar110;
  byte *pbVar111;
  byte *pbVar112;
  byte *pbVar113;
  byte *pbVar114;
  byte *pbVar115;
  byte *pbVar116;
  byte *pbVar117;
  byte *pbVar118;
  byte *pbVar119;
  byte *pbVar120;
  byte *pbVar121;
  byte *pbVar122;
  byte *pbVar123;
  byte *pbVar124;
  byte *pbVar125;
  byte *pbVar126;
  byte *pbVar127;
  byte *pbVar128;
  byte *pbVar129;
  byte *pbVar130;
  byte *pbVar131;
  byte *pbVar132;
  byte *pbVar133;
  byte *pbVar134;
  byte *pbVar135;
  byte *pbVar136;
  
  iVar169 = 0;
  iVar172 = 0;
  iVar175 = 0;
  iVar179 = 0;
  if (param_3 + -0xf < 1) {
                    /* try { // try from 003ce960 to 004ce963 has its CatchHandler @ 003ce360 */
    iVar143 = 0;
                    /* catch() { ... } // from try @ 003cf384 with catch @ 003ce964 */
  }
  else {
    lVar138 = 0;
    do {
      pVar1 = (unkbyte9 *)(param_2 + lVar138);
      pauVar2 = (undefined1 (*) [16])(param_1 + lVar138);
      lVar138 = lVar138 + 0x10;
      uVar7 = *(undefined8 *)((long)pVar1 + 8);
      auVar148[9] = (char)((ulong)uVar7 >> 8);
      auVar148._0_9_ = *pVar1;
      auVar148[10] = (char)((ulong)uVar7 >> 0x10);
      auVar148[0xb] = (char)((ulong)uVar7 >> 0x18);
      auVar148[0xc] = (char)((ulong)uVar7 >> 0x20);
      auVar148[0xd] = (char)((ulong)uVar7 >> 0x28);
      auVar148[0xe] = (char)((ulong)uVar7 >> 0x30);
      auVar148[0xf] = (char)((ulong)uVar7 >> 0x38);
      auVar148 = NEON_uabd(*pauVar2,auVar148,1);
      iVar169 = iVar169 + (CONCAT12(auVar148[1],(ushort)auVar148[0]) & 0xffff) +
                          (CONCAT12(auVar148[9],(ushort)auVar148[8]) & 0xffff) +
                (CONCAT12(auVar148[5],(ushort)auVar148[4]) & 0xffff) + (uint)auVar148[0xc];
      iVar172 = iVar172 + (uint)auVar148[1] + (uint)auVar148[9] +
                (uint)auVar148[5] + (uint)auVar148[0xd];
      iVar175 = iVar175 + (uint)auVar148[2] + (uint)auVar148[10] +
                (uint)auVar148[6] + (uint)auVar148[0xe];
      iVar179 = iVar179 + (uint)auVar148[3] + (uint)auVar148[0xb] +
                (uint)auVar148[7] + (uint)auVar148[0xf];
    } while ((int)lVar138 < param_3 + -0xf);
    iVar143 = (param_3 - 0x10U & 0xfffffff0) + 0x10;
  }
  iVar179 = iVar172 + iVar169 + iVar175 + iVar179;
  if (param_3 + -3 <= iVar143) goto LAB_003ce328;
  uVar141 = (param_3 + -4) - iVar143;
  uVar4 = uVar141 >> 2;
  uVar137 = (uVar4 - 0xf >> 4) + 1;
  iVar169 = iVar143;
  if (uVar141 < 0x3c) {
LAB_003ce290:
    pbVar136 = (byte *)(param_2 + iVar169);
    pbVar73 = (byte *)(param_1 + iVar169);
    do {
      iVar169 = iVar169 + 4;
      uVar141 = (int)((uint)*pbVar73 - (uint)*pbVar136) >> 0x1f;
      uVar137 = (int)((uint)pbVar73[1] - (uint)pbVar136[1]) >> 0x1f;
      uVar140 = (int)((uint)pbVar73[2] - (uint)pbVar136[2]) >> 0x1f;
                    /* catch() { ... } // from try @ 003ce268 with catch @ 003ce2fc */
      uVar12 = (int)((uint)pbVar73[3] - (uint)pbVar136[3]) >> 0x1f;
      iVar179 = iVar179 + (((uint)*pbVar73 - (uint)*pbVar136 ^ uVar141) - uVar141) +
                          (((uint)pbVar73[1] - (uint)pbVar136[1] ^ uVar137) - uVar137) +
                          (((uint)pbVar73[2] - (uint)pbVar136[2] ^ uVar140) - uVar140) +
                          (((uint)pbVar73[3] - (uint)pbVar136[3] ^ uVar12) - uVar12);
                    /* try { // try from 003ce31c to 004ce31f has its CatchHandler @ 003cdc5c */
      pbVar136 = pbVar136 + 4;
      pbVar73 = pbVar73 + 4;
    } while (iVar169 < param_3 + -3);
  }
  else {
    iVar169 = 0;
    iVar172 = 0;
    iVar175 = 0;
    iVar212 = 0;
    puVar75 = (undefined1 *)(param_1 + iVar143);
    uVar141 = 0;
    pbVar136 = (byte *)(param_2 + iVar143);
    do {
      uVar144 = *puVar75;
      pbVar15 = puVar75 + 1;
      pbVar16 = puVar75 + 2;
      pbVar17 = puVar75 + 3;
      bVar149 = puVar75[4];
      pbVar18 = puVar75 + 5;
      pbVar19 = puVar75 + 6;
      pbVar20 = puVar75 + 7;
      pbVar21 = puVar75 + 8;
      pbVar22 = puVar75 + 9;
      pbVar23 = puVar75 + 10;
      pbVar24 = puVar75 + 0xb;
      pbVar25 = puVar75 + 0xc;
      pbVar26 = puVar75 + 0xd;
      pbVar27 = puVar75 + 0xe;
      pbVar28 = puVar75 + 0xf;
      pbVar29 = puVar75 + 0x10;
      pbVar30 = puVar75 + 0x11;
      pbVar31 = puVar75 + 0x12;
      pbVar32 = puVar75 + 0x13;
      pbVar33 = puVar75 + 0x14;
      pbVar34 = puVar75 + 0x15;
      pbVar35 = puVar75 + 0x16;
      pbVar36 = puVar75 + 0x17;
      pbVar37 = puVar75 + 0x18;
      pbVar38 = puVar75 + 0x19;
      pbVar39 = puVar75 + 0x1a;
      pbVar40 = puVar75 + 0x1b;
      pbVar41 = puVar75 + 0x1c;
      pbVar42 = puVar75 + 0x1d;
      pbVar43 = puVar75 + 0x1e;
      pbVar44 = puVar75 + 0x1f;
      pbVar45 = puVar75 + 0x20;
      puVar46 = puVar75 + 0x21;
      puVar47 = puVar75 + 0x22;
      pbVar48 = puVar75 + 0x23;
      pbVar49 = puVar75 + 0x24;
      bVar158 = puVar75[0x25];
      bVar166 = puVar75[0x26];
      pbVar50 = puVar75 + 0x27;
      pbVar51 = puVar75 + 0x28;
      pbVar52 = puVar75 + 0x29;
      pbVar53 = puVar75 + 0x2a;
      pbVar54 = puVar75 + 0x2b;
      pbVar55 = puVar75 + 0x2c;
      pbVar56 = puVar75 + 0x2d;
      pbVar57 = puVar75 + 0x2e;
      pbVar58 = puVar75 + 0x2f;
      pbVar59 = puVar75 + 0x30;
      pbVar60 = puVar75 + 0x31;
      pbVar61 = puVar75 + 0x32;
      pbVar62 = puVar75 + 0x33;
      pbVar63 = puVar75 + 0x34;
      pbVar64 = puVar75 + 0x35;
      pbVar65 = puVar75 + 0x36;
      pbVar66 = puVar75 + 0x37;
      pbVar67 = puVar75 + 0x38;
      pbVar68 = puVar75 + 0x39;
      pbVar69 = puVar75 + 0x3a;
      pbVar70 = puVar75 + 0x3b;
      pbVar71 = puVar75 + 0x3c;
      pbVar72 = puVar75 + 0x3d;
      pbVar73 = puVar75 + 0x3e;
      pbVar74 = puVar75 + 0x3f;
      puVar75 = puVar75 + 0x40;
      uVar141 = uVar141 + 1;
      bVar145 = *pbVar136;
      pbVar76 = pbVar136 + 1;
      pbVar77 = pbVar136 + 2;
      pbVar78 = pbVar136 + 3;
      pbVar79 = pbVar136 + 4;
      pbVar80 = pbVar136 + 5;
      pbVar81 = pbVar136 + 6;
      pbVar82 = pbVar136 + 7;
      pbVar83 = pbVar136 + 8;
      pbVar84 = pbVar136 + 9;
      pbVar85 = pbVar136 + 10;
      pbVar86 = pbVar136 + 0xb;
      pbVar87 = pbVar136 + 0xc;
      pbVar88 = pbVar136 + 0xd;
      pbVar89 = pbVar136 + 0xe;
      pbVar90 = pbVar136 + 0xf;
      pbVar91 = pbVar136 + 0x10;
      pbVar92 = pbVar136 + 0x11;
      pbVar93 = pbVar136 + 0x12;
      pbVar94 = pbVar136 + 0x13;
      pbVar95 = pbVar136 + 0x14;
      pbVar96 = pbVar136 + 0x15;
      pbVar97 = pbVar136 + 0x16;
      pbVar98 = pbVar136 + 0x17;
      pbVar99 = pbVar136 + 0x18;
      pbVar100 = pbVar136 + 0x19;
      pbVar101 = pbVar136 + 0x1a;
      pbVar102 = pbVar136 + 0x1b;
      pbVar103 = pbVar136 + 0x1c;
      pbVar104 = pbVar136 + 0x1d;
      pbVar105 = pbVar136 + 0x1e;
      pbVar106 = pbVar136 + 0x1f;
      pbVar107 = pbVar136 + 0x20;
      pbVar108 = pbVar136 + 0x21;
      pbVar109 = pbVar136 + 0x22;
      pbVar110 = pbVar136 + 0x23;
      bVar154 = pbVar136[0x24];
      bVar159 = pbVar136[0x25];
      pbVar111 = pbVar136 + 0x26;
      bVar178 = pbVar136[0x27];
      pbVar112 = pbVar136 + 0x28;
      pbVar113 = pbVar136 + 0x29;
      pbVar114 = pbVar136 + 0x2a;
      pbVar115 = pbVar136 + 0x2b;
      pbVar116 = pbVar136 + 0x2c;
      pbVar117 = pbVar136 + 0x2d;
      pbVar118 = pbVar136 + 0x2e;
      pbVar119 = pbVar136 + 0x2f;
      pbVar120 = pbVar136 + 0x30;
      pbVar121 = pbVar136 + 0x31;
      pbVar122 = pbVar136 + 0x32;
      pbVar123 = pbVar136 + 0x33;
      pbVar124 = pbVar136 + 0x34;
      pbVar125 = pbVar136 + 0x35;
      pbVar126 = pbVar136 + 0x36;
      pbVar127 = pbVar136 + 0x37;
      pbVar128 = pbVar136 + 0x38;
      pbVar129 = pbVar136 + 0x39;
      pbVar130 = pbVar136 + 0x3a;
      pbVar131 = pbVar136 + 0x3b;
      pbVar132 = pbVar136 + 0x3c;
      pbVar133 = pbVar136 + 0x3d;
      pbVar134 = pbVar136 + 0x3e;
      pbVar135 = pbVar136 + 0x3f;
      pbVar136 = pbVar136 + 0x40;
      uVar13 = CONCAT12(*pbVar114,CONCAT11(*pbVar111,*pbVar109));
      uVar14 = CONCAT12(*pbVar86,CONCAT11(*pbVar82,*pbVar78));
      iVar210 = MP_INT_ABS(((CONCAT12(bVar149,CONCAT11(bVar149,uVar144)) & 0xff00ff) & 0xffff) -
                           (CONCAT12(*pbVar79,(ushort)bVar145) & 0xffff));
      iVar211 = MP_INT_ABS((uint)bVar149 - (uint)*pbVar79);
      iVar174 = MP_INT_ABS((uint)*pbVar21 - (CONCAT12(*pbVar87,(ushort)*pbVar83) & 0xffff));
      iVar177 = MP_INT_ABS((uint)*pbVar25 - (uint)*pbVar87);
      iVar202 = MP_INT_ABS((CONCAT12(*pbVar18,(ushort)*pbVar15) & 0xffff) -
                           (CONCAT12(*pbVar80,(ushort)*pbVar76) & 0xffff));
      iVar204 = MP_INT_ABS((uint)*pbVar18 - (uint)*pbVar80);
      iVar206 = MP_INT_ABS((CONCAT12(*pbVar26,(ushort)*pbVar22) & 0xffff) -
                           (CONCAT12(*pbVar88,(ushort)*pbVar84) & 0xffff));
      iVar208 = MP_INT_ABS((uint)*pbVar26 - (uint)*pbVar88);
      iVar190 = MP_INT_ABS((CONCAT12(*pbVar33,(ushort)*pbVar29) & 0xffff) -
                           (CONCAT12(*pbVar95,(ushort)*pbVar91) & 0xffff));
      iVar192 = MP_INT_ABS((uint)*pbVar33 - (uint)*pbVar95);
      iVar163 = MP_INT_ABS((uint)*pbVar37 - (uint)*pbVar99);
      iVar168 = MP_INT_ABS((uint)*pbVar41 - (uint)*pbVar103);
      iVar194 = MP_INT_ABS((CONCAT12(*pbVar19,(ushort)*pbVar16) & 0xffff) -
                           (CONCAT12(*pbVar81,(ushort)*pbVar77) & 0xffff));
      iVar196 = MP_INT_ABS((uint)*pbVar19 - (uint)*pbVar81);
      iVar198 = MP_INT_ABS((CONCAT12(*pbVar27,(ushort)*pbVar23) & 0xffff) - (uint)*pbVar85);
      iVar200 = MP_INT_ABS((uint)*pbVar27 - (uint)*pbVar89);
      iVar188 = MP_INT_ABS((CONCAT12(*pbVar34,(ushort)*pbVar30) & 0xffff) -
                           (CONCAT12(*pbVar96,(ushort)*pbVar92) & 0xffff));
      iVar189 = MP_INT_ABS((uint)*pbVar34 - (uint)*pbVar96);
      iVar10 = MP_INT_ABS((uint)*pbVar38 - (uint)*pbVar100);
      iVar161 = MP_INT_ABS((uint)*pbVar42 - (uint)*pbVar104);
      iVar191 = MP_INT_ABS((CONCAT12(*pbVar49,(ushort)*pbVar45) & 0xffff) -
                           ((CONCAT12(bVar154,CONCAT11(bVar154,*pbVar107)) & 0xff00ff) & 0xffff));
      iVar193 = MP_INT_ABS((uint)*pbVar49 - (uint)bVar154);
      iVar165 = MP_INT_ABS((uint)*pbVar51 - (uint)*pbVar112);
      iVar171 = MP_INT_ABS((uint)*pbVar55 - (uint)*pbVar116);
      iVar203 = MP_INT_ABS(((CONCAT12(bVar158,CONCAT11(bVar158,*puVar46)) & 0xff00ff) & 0xffff) -
                           ((CONCAT12(bVar159,CONCAT11(bVar159,*pbVar108)) & 0xff00ff) & 0xffff));
      iVar205 = MP_INT_ABS((uint)bVar158 - (uint)bVar159);
      iVar207 = MP_INT_ABS((uint)*pbVar52 - (uint)*pbVar113);
      iVar209 = MP_INT_ABS((uint)*pbVar56 - (uint)*pbVar117);
      iVar217 = MP_INT_ABS((CONCAT12(*pbVar20,(ushort)*pbVar17) & 0xffff) - (uVar14 & 0xff));
      iVar218 = MP_INT_ABS((uint)*pbVar20 - ((uVar14 & 0xff00) >> 8));
      iVar185 = MP_INT_ABS((CONCAT12(*pbVar28,(ushort)*pbVar24) & 0xffff) - (uint)*pbVar86);
      iVar11 = MP_INT_ABS((uint)*pbVar28 - (uint)*pbVar90);
      iVar215 = MP_INT_ABS((CONCAT12(*pbVar35,(ushort)*pbVar31) & 0xffff) -
                           (CONCAT12(*pbVar97,(ushort)*pbVar93) & 0xffff));
      iVar216 = MP_INT_ABS((uint)*pbVar35 - (uint)*pbVar97);
      iVar183 = MP_INT_ABS((uint)*pbVar39 - (uint)*pbVar101);
      iVar184 = MP_INT_ABS((uint)*pbVar43 - (uint)*pbVar105);
      iVar195 = MP_INT_ABS(((CONCAT12(bVar166,CONCAT11(bVar166,*puVar47)) & 0xff00ff) & 0xffff) -
                           (uVar13 & 0xff));
      iVar197 = MP_INT_ABS((uint)bVar166 - ((uVar13 & 0xff00) >> 8));
      iVar199 = MP_INT_ABS((uint)*pbVar53 - (uint)*pbVar114);
      iVar201 = MP_INT_ABS((uint)*pbVar57 - (uint)*pbVar118);
      iVar170 = MP_INT_ABS((uint)*pbVar59 - (CONCAT12(*pbVar124,(ushort)*pbVar120) & 0xffff));
      iVar173 = MP_INT_ABS((uint)*pbVar63 - (uint)*pbVar124);
      iVar176 = MP_INT_ABS((uint)*pbVar67 - (uint)*pbVar128);
      iVar180 = MP_INT_ABS((uint)*pbVar71 - (uint)*pbVar132);
      iVar213 = MP_INT_ABS((CONCAT12(*pbVar36,(ushort)*pbVar32) & 0xffff) -
                           (CONCAT12(*pbVar98,(ushort)*pbVar94) & 0xffff));
      iVar214 = MP_INT_ABS((uint)*pbVar36 - (uint)*pbVar98);
      iVar181 = MP_INT_ABS((uint)*pbVar40 - (uint)*pbVar102);
      iVar182 = MP_INT_ABS((uint)*pbVar44 - (uint)*pbVar106);
      iVar160 = MP_INT_ABS((CONCAT12(*pbVar64,(ushort)*pbVar60) & 0xffff) -
                           (CONCAT12(*pbVar125,(ushort)*pbVar121) & 0xffff));
      iVar162 = MP_INT_ABS((uint)*pbVar64 - (uint)*pbVar125);
      iVar164 = MP_INT_ABS((uint)*pbVar68 - (uint)*pbVar129);
      iVar167 = MP_INT_ABS((uint)*pbVar72 - (uint)*pbVar133);
      iVar146 = MP_INT_ABS((CONCAT12(*pbVar50,(ushort)*pbVar48) & 0xffff) -
                           ((CONCAT12(bVar178,CONCAT11(bVar178,*pbVar110)) & 0xff00ff) & 0xffff));
      iVar150 = MP_INT_ABS((uint)*pbVar50 - (uint)bVar178);
      iVar152 = MP_INT_ABS((CONCAT12(*pbVar58,(ushort)*pbVar54) & 0xffff) - (uint)*pbVar115);
      iVar155 = MP_INT_ABS((uint)*pbVar58 - (uint)*pbVar119);
      iVar157 = MP_INT_ABS((CONCAT12(*pbVar65,(ushort)*pbVar61) & 0xffff) -
                           (CONCAT12(*pbVar126,(ushort)*pbVar122) & 0xffff));
      iVar5 = MP_INT_ABS((uint)*pbVar65 - (uint)*pbVar126);
      iVar6 = MP_INT_ABS((uint)*pbVar69 - (uint)*pbVar130);
      iVar9 = MP_INT_ABS((uint)*pbVar73 - (uint)*pbVar134);
      iVar147 = MP_INT_ABS((CONCAT12(*pbVar66,(ushort)*pbVar62) & 0xffff) -
                           (CONCAT12(*pbVar127,(ushort)*pbVar123) & 0xffff));
      iVar151 = MP_INT_ABS((uint)*pbVar66 - (uint)*pbVar127);
      iVar153 = MP_INT_ABS((uint)*pbVar70 - (uint)*pbVar131);
      iVar156 = MP_INT_ABS((uint)*pbVar74 - (uint)*pbVar135);
                    /* try { // try from 003ce268 to 004ce26b has its CatchHandler @ 003ce2fc */
      iVar169 = iVar170 + iVar160 + iVar157 + iVar147 +
                iVar191 + iVar203 + iVar195 + iVar146 +
                iVar190 + iVar188 + iVar215 + iVar213 +
                iVar210 + iVar202 + iVar194 + iVar217 + iVar169;
      iVar172 = iVar173 + iVar162 + iVar5 + iVar151 +
                iVar193 + iVar205 + iVar197 + iVar150 +
                iVar192 + iVar189 + iVar216 + iVar214 +
                iVar211 + iVar204 + iVar196 + iVar218 + iVar172;
      iVar175 = iVar176 + iVar164 + iVar6 + iVar153 +
                iVar165 + iVar207 + iVar199 + iVar152 +
                iVar163 + iVar10 + iVar183 + iVar181 +
                iVar174 + iVar206 + iVar198 + iVar185 + iVar175;
      iVar212 = iVar180 + iVar167 + iVar9 + iVar156 +
                iVar171 + iVar209 + iVar201 + iVar155 +
                iVar168 + iVar161 + iVar184 + iVar182 +
                iVar177 + iVar208 + iVar200 + iVar11 + iVar212;
    } while (uVar141 < uVar137);
    iVar179 = iVar179 + iVar169 + iVar172 + iVar175 + iVar212;
    iVar169 = iVar143 + uVar137 * 0x40;
    if (uVar137 * 0x10 != uVar4 + 1) goto LAB_003ce290;
  }
  iVar143 = iVar143 + 4 + uVar4 * 4;
LAB_003ce328:
  if (iVar143 < param_3) {
    lVar138 = (long)iVar143;
    uVar4 = param_3 - iVar143;
    uVar137 = -((int)param_1 + iVar143) & 0xf;
    uVar3 = (ulong)uVar137;
    if (uVar4 < uVar137) {
      uVar3 = (ulong)uVar4;
    }
    if (uVar4 < 0x11) {
      uVar3 = (ulong)uVar4;
    }
    uVar137 = (uint)uVar3;
    if (uVar137 != 0) {
                    /* catch() { ... } // from try @ 003ce960 with catch @ 003ce360 */
      iVar169 = iVar143 + 1;
      uVar141 = (uint)*(byte *)(param_1 + lVar138) - (uint)*(byte *)(param_2 + lVar138);
      uVar140 = (int)uVar141 >> 0x1f;
      iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
      if (uVar137 != 1) {
        iVar172 = iVar143 + 2;
        uVar141 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
        uVar140 = (int)uVar141 >> 0x1f;
        iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
        iVar169 = iVar172;
        if (uVar137 != 2) {
          iVar169 = iVar143 + 3;
          uVar141 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
          uVar140 = (int)uVar141 >> 0x1f;
          iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
          if (uVar137 != 3) {
            iVar172 = iVar143 + 4;
            uVar141 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
            uVar140 = (int)uVar141 >> 0x1f;
            iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
            iVar169 = iVar172;
            if (uVar137 != 4) {
              iVar169 = iVar143 + 5;
              uVar141 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
              uVar140 = (int)uVar141 >> 0x1f;
                    /* try { // try from 003ce41c to 004ce41f has its CatchHandler @ 003ce944 */
              iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
              if (uVar137 != 5) {
                iVar172 = iVar143 + 6;
                uVar141 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
                uVar140 = (int)uVar141 >> 0x1f;
                iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                iVar169 = iVar172;
                if (uVar137 != 6) {
                  iVar169 = iVar143 + 7;
                  uVar141 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
                  uVar140 = (int)uVar141 >> 0x1f;
                  iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                  if (uVar137 != 7) {
                    iVar172 = iVar143 + 8;
                    uVar141 = (uint)*(byte *)(param_1 + iVar169) -
                              (uint)*(byte *)(param_2 + iVar169);
                    uVar140 = (int)uVar141 >> 0x1f;
                    iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                    iVar169 = iVar172;
                    if (uVar137 != 8) {
                      iVar169 = iVar143 + 9;
                      uVar141 = (uint)*(byte *)(param_1 + iVar172) -
                                (uint)*(byte *)(param_2 + iVar172);
                      uVar140 = (int)uVar141 >> 0x1f;
                      iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                      if (uVar137 != 9) {
                        iVar172 = iVar143 + 10;
                        uVar141 = (uint)*(byte *)(param_1 + iVar169) -
                                  (uint)*(byte *)(param_2 + iVar169);
                        uVar140 = (int)uVar141 >> 0x1f;
                        iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                        iVar169 = iVar172;
                        if (uVar137 != 10) {
                          iVar169 = iVar143 + 0xb;
                          uVar141 = (uint)*(byte *)(param_1 + iVar172) -
                                    (uint)*(byte *)(param_2 + iVar172);
                          uVar140 = (int)uVar141 >> 0x1f;
                          iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                          if (uVar137 != 0xb) {
                            iVar172 = iVar143 + 0xc;
                            uVar141 = (uint)*(byte *)(param_1 + iVar169) -
                                      (uint)*(byte *)(param_2 + iVar169);
                            uVar140 = (int)uVar141 >> 0x1f;
                            iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                            iVar169 = iVar172;
                            if (uVar137 != 0xc) {
                              iVar169 = iVar143 + 0xd;
                              uVar141 = (uint)*(byte *)(param_1 + iVar172) -
                                        (uint)*(byte *)(param_2 + iVar172);
                              uVar140 = (int)uVar141 >> 0x1f;
                              iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                              if (uVar137 != 0xd) {
                                iVar172 = iVar143 + 0xe;
                                uVar141 = (uint)*(byte *)(param_1 + iVar169) -
                                          (uint)*(byte *)(param_2 + iVar169);
                                uVar140 = (int)uVar141 >> 0x1f;
                                iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                                iVar169 = iVar172;
                                if (uVar137 != 0xe) {
                                  iVar169 = iVar143 + 0xf;
                                  uVar141 = (uint)*(byte *)(param_1 + iVar172) -
                                            (uint)*(byte *)(param_2 + iVar172);
                                  uVar140 = (int)uVar141 >> 0x1f;
                                  iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                                  if (uVar137 == 0x10) {
                                    uVar141 = (uint)*(byte *)(param_1 + iVar169) -
                                              (uint)*(byte *)(param_2 + iVar169);
                                    uVar140 = (int)uVar141 >> 0x1f;
                                    iVar179 = iVar179 + ((uVar141 ^ uVar140) - uVar140);
                                    iVar169 = iVar143 + 0x10;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      iVar143 = iVar169;
      if (uVar137 == uVar4) {
        return iVar179;
      }
    }
    uVar141 = ((uVar4 - uVar137) - 0x10 >> 4) + 1;
    iVar169 = uVar141 * 0x10;
    if (0xe < (uVar4 - 1) - uVar137) {
      iVar172 = 0;
      iVar175 = 0;
      iVar212 = 0;
      iVar157 = 0;
      uVar140 = 0;
      puVar139 = (undefined8 *)(param_1 + uVar3 + lVar138);
      puVar142 = (undefined8 *)(param_2 + uVar3 + lVar138);
      do {
        uVar8 = puVar139[1];
        uVar7 = *puVar139;
        uVar140 = uVar140 + 1;
        uVar187 = puVar142[1];
        uVar186 = *puVar142;
        bVar145 = (byte)((ulong)uVar7 >> 8);
        bVar158 = (byte)((ulong)uVar7 >> 0x28);
        bVar149 = (byte)((ulong)uVar186 >> 8);
        bVar159 = (byte)((ulong)uVar186 >> 0x28);
        bVar166 = (byte)((ulong)uVar8 >> 0x28);
        bVar154 = (byte)((ulong)uVar187 >> 8);
        bVar178 = (byte)((ulong)uVar187 >> 0x28);
        iVar182 = MP_INT_ABS((CONCAT12(bVar145,(ushort)(byte)uVar7) & 0xffff) -
                             ((CONCAT12(bVar149,(short)uVar186) & 0xff00ff) & 0xffff));
        iVar183 = MP_INT_ABS((uint)bVar145 - (uint)bVar149);
        iVar184 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x10) -
                             (uint)(byte)((ulong)uVar186 >> 0x10));
        iVar185 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x18) -
                             (uint)(byte)((ulong)uVar186 >> 0x18));
        iVar161 = MP_INT_ABS((CONCAT12(bVar158,(ushort)(byte)((ulong)uVar7 >> 0x20)) & 0xffff) -
                             (CONCAT12(bVar159,(ushort)(byte)((ulong)uVar186 >> 0x20)) & 0xffff));
        iVar163 = MP_INT_ABS((uint)bVar158 - (uint)bVar159);
        iVar165 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x30) -
                             (uint)(byte)((ulong)uVar186 >> 0x30));
        iVar168 = MP_INT_ABS((uint)(byte)((ulong)uVar7 >> 0x38) -
                             (uint)(byte)((ulong)uVar186 >> 0x38));
        iVar171 = MP_INT_ABS((uint)(byte)uVar8 -
                             ((CONCAT12(bVar154,(short)uVar187) & 0xff00ff) & 0xffff));
        iVar174 = MP_INT_ABS((uint)(byte)((ulong)uVar8 >> 8) - (uint)bVar154);
        iVar177 = MP_INT_ABS((uint)(byte)((ulong)uVar8 >> 0x10) -
                             (uint)(byte)((ulong)uVar187 >> 0x10));
        iVar181 = MP_INT_ABS((uint)(byte)((ulong)uVar8 >> 0x18) -
                             (uint)(byte)((ulong)uVar187 >> 0x18));
        iVar5 = MP_INT_ABS((CONCAT12(bVar166,(ushort)(byte)((ulong)uVar8 >> 0x20)) & 0xffff) -
                           (CONCAT12(bVar178,(ushort)(byte)((ulong)uVar187 >> 0x20)) & 0xffff));
        iVar6 = MP_INT_ABS((uint)bVar166 - (uint)bVar178);
        iVar9 = MP_INT_ABS((uint)(byte)((ulong)uVar8 >> 0x30) - (uint)(byte)((ulong)uVar187 >> 0x30)
                          );
        iVar10 = MP_INT_ABS((uint)(byte)((ulong)uVar8 >> 0x38) -
                            (uint)(byte)((ulong)uVar187 >> 0x38));
        iVar172 = iVar5 + iVar171 + iVar161 + iVar182 + iVar172;
        iVar175 = iVar6 + iVar174 + iVar163 + iVar183 + iVar175;
        iVar212 = iVar9 + iVar177 + iVar165 + iVar184 + iVar212;
        iVar157 = iVar10 + iVar181 + iVar168 + iVar185 + iVar157;
        puVar139 = puVar139 + 2;
        puVar142 = puVar142 + 2;
      } while (uVar140 < uVar141);
      iVar143 = iVar143 + iVar169;
      iVar179 = iVar179 + iVar172 + iVar175 + iVar212 + iVar157;
      if (iVar169 == uVar4 - uVar137) {
        return iVar179;
      }
    }
    iVar169 = iVar143 + 1;
    uVar137 = (uint)*(byte *)(param_1 + iVar143) - (uint)*(byte *)(param_2 + iVar143);
    uVar4 = (int)uVar137 >> 0x1f;
    iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
    if (iVar169 < param_3) {
      iVar172 = iVar143 + 2;
      uVar137 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
      uVar4 = (int)uVar137 >> 0x1f;
      iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
      if (iVar172 < param_3) {
        iVar169 = iVar143 + 3;
        uVar137 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
        uVar4 = (int)uVar137 >> 0x1f;
        iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
        if (iVar169 < param_3) {
          iVar172 = iVar143 + 4;
          uVar137 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
          uVar4 = (int)uVar137 >> 0x1f;
          iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
          if (iVar172 < param_3) {
            iVar169 = iVar143 + 5;
            uVar137 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
            uVar4 = (int)uVar137 >> 0x1f;
            iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
            if (iVar169 < param_3) {
              iVar172 = iVar143 + 6;
              uVar137 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
              uVar4 = (int)uVar137 >> 0x1f;
              iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
              if (iVar172 < param_3) {
                iVar169 = iVar143 + 7;
                uVar137 = (uint)*(byte *)(param_1 + iVar172) - (uint)*(byte *)(param_2 + iVar172);
                uVar4 = (int)uVar137 >> 0x1f;
                iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                if (iVar169 < param_3) {
                  iVar172 = iVar143 + 8;
                  uVar137 = (uint)*(byte *)(param_1 + iVar169) - (uint)*(byte *)(param_2 + iVar169);
                  uVar4 = (int)uVar137 >> 0x1f;
                  iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                  if (iVar172 < param_3) {
                    iVar169 = iVar143 + 9;
                    uVar137 = (uint)*(byte *)(param_1 + iVar172) -
                              (uint)*(byte *)(param_2 + iVar172);
                    uVar4 = (int)uVar137 >> 0x1f;
                    iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                    if (iVar169 < param_3) {
                      iVar172 = iVar143 + 10;
                      uVar137 = (uint)*(byte *)(param_1 + iVar169) -
                                (uint)*(byte *)(param_2 + iVar169);
                      uVar4 = (int)uVar137 >> 0x1f;
                      iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                      if (iVar172 < param_3) {
                        iVar169 = iVar143 + 0xb;
                        uVar137 = (uint)*(byte *)(param_1 + iVar172) -
                                  (uint)*(byte *)(param_2 + iVar172);
                        uVar4 = (int)uVar137 >> 0x1f;
                        iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                        if (iVar169 < param_3) {
                          iVar172 = iVar143 + 0xc;
                          uVar137 = (uint)*(byte *)(param_1 + iVar169) -
                                    (uint)*(byte *)(param_2 + iVar169);
                          uVar4 = (int)uVar137 >> 0x1f;
                          iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                          if (iVar172 < param_3) {
                            iVar169 = iVar143 + 0xd;
                            uVar137 = (uint)*(byte *)(param_1 + iVar172) -
                                      (uint)*(byte *)(param_2 + iVar172);
                            uVar4 = (int)uVar137 >> 0x1f;
                            iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                            if (iVar169 < param_3) {
                              iVar143 = iVar143 + 0xe;
                              uVar137 = (uint)*(byte *)(param_1 + iVar169) -
                                        (uint)*(byte *)(param_2 + iVar169);
                              uVar4 = (int)uVar137 >> 0x1f;
                              iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                              if (iVar143 < param_3) {
                                uVar137 = (uint)*(byte *)(param_1 + iVar143) -
                                          (uint)*(byte *)(param_2 + iVar143);
                                uVar4 = (int)uVar137 >> 0x1f;
                                iVar179 = iVar179 + ((uVar137 ^ uVar4) - uVar4);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
                    /* catch() { ... } // from try @ 003ce41c with catch @ 003ce944 */
  return iVar179;
}


==================================================================

### FUNC 003ce968 (100 bytes) name=__do_upcast

/* __cxxabiv1::__class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const */

bool __thiscall
__cxxabiv1::__class_type_info::__do_upcast
          (__class_type_info *this,__class_type_info *param_1,void **param_2)

{
  bool bVar1;
  void *local_18;
  uint local_10;
  undefined4 local_c;
  undefined8 local_8;
  
  local_18 = (void *)0x0;
  local_10 = 0;
  local_c = 0x10;
  local_8 = 0;
  (**(code **)(*(long *)this + 0x30))(this,param_1,*param_2,&local_18);
  bVar1 = (local_10 & 6) == 6;
  if (bVar1) {
    *param_2 = local_18;
  }
  return bVar1;
}


==================================================================

### FUNC 003ce9cc (16 bytes) name=__do_find_public_src

/* __cxxabiv1::__class_type_info::__do_find_public_src(long, void const*,
   __cxxabiv1::__class_type_info const*, void const*) const */

undefined4 __thiscall
__cxxabiv1::__class_type_info::__do_find_public_src
          (__class_type_info *this,long param_1,void *param_2,__class_type_info *param_3,
          void *param_4)

{
  undefined4 uVar1;
  
  uVar1 = 6;
  if (param_4 != param_2) {
    uVar1 = 1;
  }
  return uVar1;
}


==================================================================

### FUNC 003ce9dc (20 bytes) name=~__class_type_info

/* __cxxabiv1::__class_type_info::~__class_type_info() */

void __thiscall __cxxabiv1::__class_type_info::~__class_type_info(__class_type_info *this)

{
  *(undefined **)this = PTR_vtable_00501fa8 + 0x10;
  FUN_003d067c();
  return;
}


==================================================================

### FUNC 003ce9f0 (36 bytes) name=~__class_type_info

/* __cxxabiv1::__class_type_info::~__class_type_info() */

void __thiscall __cxxabiv1::__class_type_info::~__class_type_info(__class_type_info *this)

{
  ~__class_type_info(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003cea14 (104 bytes) name=__do_upcast

/* __cxxabiv1::__class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void const*,
   __cxxabiv1::__class_type_info::__upcast_result&) const */

undefined8 __thiscall
__cxxabiv1::__class_type_info::__do_upcast
          (__class_type_info *this,__class_type_info *param_1,void *param_2,__upcast_result *param_3
          )

{
  int iVar1;
  char *__s1;
  
  __s1 = *(char **)(this + 8);
  if (__s1 != *(char **)(param_1 + 8)) {
                    /* try { // try from 003cea30 to 004cea33 has its CatchHandler @ 003cf368 */
    if (*__s1 != '*') {
      iVar1 = strcmp(__s1,*(char **)(param_1 + 8));
      if (iVar1 == 0) goto LAB_003cea5c;
    }
    return 0;
  }
LAB_003cea5c:
  *(void **)param_3 = param_2;
  *(undefined8 *)(param_3 + 0x10) = 0x10;
  *(undefined4 *)(param_3 + 8) = 6;
  return 1;
}


==================================================================

### FUNC 003cea7c (184 bytes) name=__do_catch

/* __cxxabiv1::__class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const */

undefined1 __thiscall
__cxxabiv1::__class_type_info::__do_catch
          (__class_type_info *this,type_info *param_1,void **param_2,uint param_3)

{
  undefined1 uVar1;
  int iVar2;
  char *__s1;
  
  __s1 = *(char **)(this + 8);
  if (__s1 == *(char **)(param_1 + 8)) {
    return 1;
  }
  if ((*__s1 != '*') && (iVar2 = strcmp(__s1,*(char **)(param_1 + 8)), iVar2 == 0)) {
    return 1;
  }
  if (3 < param_3) {
    return 0;
  }
  uVar1 = (**(code **)(*(long *)param_1 + 0x28))(param_1,this,param_2);
  return uVar1;
}


==================================================================

### FUNC 003ceb34 (248 bytes) name=__do_dyncast

/* __cxxabiv1::__class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind,
   __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void
   const*, __cxxabiv1::__class_type_info::__dyncast_result&) const */

undefined8 __thiscall
__cxxabiv1::__class_type_info::__do_dyncast
          (__class_type_info *this,undefined8 param_2,undefined4 param_3,long param_4,long param_5,
          long param_6,long param_7,long *param_8)

{
  int iVar1;
  char *__s2;
  char *__s1;
  
  __s1 = *(char **)(this + 8);
  if (param_5 == param_7) {
    if (__s1 == *(char **)(param_6 + 8)) {
LAB_003cec08:
      *(undefined4 *)((long)param_8 + 0xc) = param_3;
      return 0;
    }
    if (*__s1 == '*') {
      if (__s1 != *(char **)(param_4 + 8)) {
        return 0;
      }
      goto LAB_003cebe8;
    }
    iVar1 = strcmp(__s1,*(char **)(param_6 + 8));
    if (iVar1 == 0) goto LAB_003cec08;
    __s2 = *(char **)(param_4 + 8);
    if (__s1 == __s2) goto LAB_003cebe8;
  }
  else {
    __s2 = *(char **)(param_4 + 8);
    if (__s1 == __s2) goto LAB_003cebe8;
    if (*__s1 == '*') {
      return 0;
    }
  }
  iVar1 = strcmp(__s1,__s2);
  if (iVar1 != 0) {
    return 0;
  }
LAB_003cebe8:
  *param_8 = param_5;
  *(undefined4 *)(param_8 + 1) = param_3;
  *(undefined4 *)(param_8 + 2) = 1;
  return 0;
}


==================================================================

### FUNC 003cec2c (4 bytes) name=operator.delete

/* operator delete(void*) */

void operator_delete(void *param_1)

{
  (*(code *)PTR_free_004ffab8)();
  return;
}


==================================================================

### FUNC 003cec30 (4 bytes) name=operator.delete[]

/* operator delete[](void*) */

void operator_delete__(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 003cec34 (12 bytes) name=FUN_003cec34

char * FUN_003cec34(void)

{
  return "__gnu_cxx::__concurrence_lock_error";
}


==================================================================

### FUNC 003cec40 (12 bytes) name=FUN_003cec40

char * FUN_003cec40(void)

{
  return "__gnu_cxx::__concurrence_unlock_error";
}


==================================================================

### FUNC 003cec4c (16 bytes) name=FUN_003cec4c

void FUN_003cec4c(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7ac0;
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 003cec5c (16 bytes) name=FUN_003cec5c

void FUN_003cec5c(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7af0;
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 003cec6c (48 bytes) name=FUN_003cec6c

void FUN_003cec6c(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7ac0;
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003cec9c (48 bytes) name=FUN_003cec9c

void FUN_003cec9c(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f7af0;
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ceccc (48 bytes) name=FUN_003ceccc

void FUN_003ceccc(void)

{
  undefined8 *puVar1;
  
  puVar1 = (undefined8 *)__cxa_allocate_exception(8);
  *puVar1 = &PTR_FUN_004f7ac0;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar1,&PTR_PTR_004fca80,FUN_003cec4c);
}


==================================================================

### FUNC 003cecfc (48 bytes) name=FUN_003cecfc

void FUN_003cecfc(void)

{
  undefined8 *puVar1;
  
  puVar1 = (undefined8 *)__cxa_allocate_exception(8);
  *puVar1 = &PTR_FUN_004f7af0;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(puVar1,&PTR_PTR_004fca98,FUN_003cec5c);
}


==================================================================

### FUNC 003ced2c (244 bytes) name=__cxa_allocate_exception

undefined8 * __cxa_allocate_exception(long param_1)

{
  uint uVar1;
  int iVar2;
  undefined8 *puVar3;
  ulong uVar4;
  long extraout_x1;
  ulong uVar5;
  
  puVar3 = malloc(param_1 + 0x80U);
  if (puVar3 != (undefined8 *)0x0) {
LAB_003ced50:
    *puVar3 = 0;
    puVar3[1] = 0;
    puVar3[2] = 0;
    puVar3[3] = 0;
    puVar3[4] = 0;
    puVar3[5] = 0;
    puVar3[6] = 0;
    puVar3[7] = 0;
    puVar3[8] = 0;
    puVar3[9] = 0;
    puVar3[10] = 0;
    puVar3[0xb] = 0;
    puVar3[0xc] = 0;
    puVar3[0xd] = 0;
    puVar3[0xe] = 0;
    puVar3[0xf] = 0;
    return puVar3 + 0x10;
  }
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    iVar2 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00535100);
    if (iVar2 != 0) {
      FUN_003ceccc();
LAB_003cee1c:
                    /* WARNING: Subroutine does not return */
      __cxa_call_unexpected();
    }
  }
  if (param_1 + 0x80U < 0x401) {
    uVar5 = 0;
    uVar4 = DAT_00545130;
    do {
      if ((uVar4 & 1) == 0) {
        DAT_00545130 = 1L << (uVar5 & 0x3f) | DAT_00545130;
        puVar3 = (undefined8 *)(&DAT_00535130 + uVar5 * 0x400);
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003ced50;
        iVar2 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00535100);
        if (iVar2 == 0) goto LAB_003ced50;
        FUN_003cecfc();
        if (extraout_x1 != -1) {
                    /* WARNING: Subroutine does not return */
          _Unwind_Resume();
        }
        goto LAB_003cee1c;
      }
      uVar1 = (int)uVar5 + 1;
      uVar5 = (ulong)uVar1;
      uVar4 = uVar4 >> 1;
    } while (uVar1 != 0x40);
  }
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003cee24 (204 bytes) name=__cxa_free_exception

void __cxa_free_exception(undefined *param_1)

{
  int iVar1;
  long extraout_x1;
  long lVar2;
  long extraout_x1_00;
  
  if ((param_1 < &DAT_00535130) || ((undefined *)0x54512f < param_1)) {
    free(param_1 + -0x80);
    return;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    DAT_00545130 = DAT_00545130 &
                   (1L << ((ulong)(param_1 + -0x535130) >> 10 & 0x3f) ^ 0xffffffffffffffffU);
    return;
  }
  iVar1 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00535100);
  if (iVar1 == 0) {
    DAT_00545130 = DAT_00545130 &
                   (1L << ((ulong)(param_1 + -0x535130) >> 10 & 0x3f) ^ 0xffffffffffffffffU);
    iVar1 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00535100);
    if (iVar1 == 0) {
      return;
    }
    FUN_003cecfc();
    lVar2 = extraout_x1;
  }
  else {
    FUN_003ceccc();
    lVar2 = extraout_x1_00;
  }
  if (lVar2 != -1) {
                    /* WARNING: Subroutine does not return */
    _Unwind_Resume();
  }
                    /* WARNING: Subroutine does not return */
  __cxa_call_unexpected();
}


==================================================================

### FUNC 003ceef0 (228 bytes) name=__cxa_allocate_dependent_exception

undefined8 * __cxa_allocate_dependent_exception(void)

{
  uint uVar1;
  int iVar2;
  undefined8 *puVar3;
  ulong uVar4;
  ulong uVar5;
  long extraout_x1;
  
  puVar3 = malloc(0x70);
  if (puVar3 == (undefined8 *)0x0) {
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      iVar2 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00535100);
      if (iVar2 != 0) goto LAB_003cefc0;
    }
    uVar4 = 0;
    uVar5 = DAT_005334f0;
    while ((uVar5 & 1) != 0) {
      uVar1 = (int)uVar4 + 1;
      uVar4 = (ulong)uVar1;
      uVar5 = uVar5 >> 1;
      if (uVar1 == 0x40) {
                    /* WARNING: Subroutine does not return */
        std::terminate();
      }
    }
    DAT_005334f0 = 1L << (uVar4 & 0x3f) | DAT_005334f0;
    puVar3 = (undefined8 *)(&DAT_00533500 + uVar4 * 0x70);
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      iVar2 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00535100);
      if (iVar2 != 0) {
        FUN_003cecfc();
LAB_003cefc0:
        FUN_003ceccc();
        if (extraout_x1 != -1) {
                    /* WARNING: Subroutine does not return */
          _Unwind_Resume();
        }
                    /* WARNING: Subroutine does not return */
        __cxa_call_unexpected();
      }
    }
  }
  *puVar3 = 0;
  puVar3[1] = 0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  puVar3[4] = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  puVar3[0xb] = 0;
  puVar3[0xc] = 0;
  puVar3[0xd] = 0;
  return puVar3;
}


==================================================================

### FUNC 003cefd8 (224 bytes) name=__cxa_free_dependent_exception

void __cxa_free_dependent_exception(undefined *param_1)

{
  int iVar1;
  long extraout_x1;
  long lVar2;
  long extraout_x1_00;
  ulong uVar3;
  
  if ((param_1 < &DAT_00533500) || ((undefined *)0x5350ff < param_1)) {
    free(param_1);
    return;
  }
  uVar3 = (ulong)((int)param_1 - 0x533500U >> 4) / 7;
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    DAT_005334f0 = DAT_005334f0 & (1L << (uVar3 & 0x3f) ^ 0xffffffffffffffffU);
    return;
  }
  iVar1 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00535100);
  if (iVar1 == 0) {
    DAT_005334f0 = DAT_005334f0 & (1L << (uVar3 & 0x3f) ^ 0xffffffffffffffffU);
    iVar1 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00535100);
    if (iVar1 == 0) {
      return;
    }
    FUN_003cecfc();
    lVar2 = extraout_x1;
  }
  else {
    FUN_003ceccc();
    lVar2 = extraout_x1_00;
  }
  if (lVar2 != -1) {
                    /* WARNING: Subroutine does not return */
    _Unwind_Resume();
  }
                    /* WARNING: Subroutine does not return */
  __cxa_call_unexpected();
}


==================================================================

### FUNC 003cf0b8 (8 bytes) name=__cxa_get_exception_ptr

undefined8 __cxa_get_exception_ptr(long param_1)

{
  return *(undefined8 *)(param_1 + -8);
}


==================================================================

### FUNC 003cf0c0 (160 bytes) name=__cxa_begin_catch

long __cxa_begin_catch(long *param_1)

{
  int iVar1;
  long lVar2;
  long *plVar3;
  long *plVar4;
  long *plVar5;
  
  plVar3 = (long *)__cxa_get_globals();
  plVar5 = (long *)*plVar3;
  plVar4 = param_1 + -10;
  if (*param_1 + 0xb8b1aabcbcd4d500U < 2) {
    iVar1 = (int)param_1[-5];
    if (iVar1 < 0) {
      iVar1 = -iVar1;
    }
    lVar2 = plVar3[1];
    *(int *)(param_1 + -5) = iVar1 + 1;
    *(int *)(plVar3 + 1) = (int)lVar2 + -1;
    if (plVar5 != plVar4) {
      param_1[-6] = (long)plVar5;
      *plVar3 = (long)plVar4;
    }
    return param_1[-1];
  }
  if (plVar5 == (long *)0x0) {
    *plVar3 = (long)plVar4;
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003cf160 (156 bytes) name=__cxa_end_catch

void __cxa_end_catch(void)

{
  long *plVar1;
  long lVar2;
  int iVar3;
  
  plVar1 = (long *)__cxa_get_globals_fast();
  lVar2 = *plVar1;
  if (lVar2 != 0) {
    if (1 < *(long *)(lVar2 + 0x50) + 0xb8b1aabcbcd4d500U) {
      *plVar1 = 0;
      _Unwind_DeleteException(lVar2 + 0x50);
      return;
    }
    iVar3 = *(int *)(lVar2 + 0x28);
    if (iVar3 < 0) {
      iVar3 = iVar3 + 1;
      if (iVar3 == 0) {
        *plVar1 = *(long *)(lVar2 + 0x20);
        *(undefined4 *)(lVar2 + 0x28) = 0;
        return;
      }
    }
    else {
      iVar3 = iVar3 + -1;
      if (iVar3 == 0) {
        *plVar1 = *(long *)(lVar2 + 0x20);
        _Unwind_DeleteException(lVar2 + 0x50);
        return;
      }
      if (iVar3 == -1) {
                    /* WARNING: Subroutine does not return */
        std::terminate();
      }
    }
    *(int *)(lVar2 + 0x28) = iVar3;
  }
  return;
}


==================================================================

### FUNC 003cf1fc (32 bytes) name=uncaught_exception

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::uncaught_exception() */

bool std::uncaught_exception(void)

{
  long lVar1;
  
  lVar1 = __cxa_get_globals();
  return *(int *)(lVar1 + 8) != 0;
}


==================================================================

### FUNC 003cf21c (4 bytes) name=~exception

/* std::exception::~exception() */

void __thiscall std::exception::~exception(exception *this)

{
  return;
}


==================================================================

### FUNC 003cf220 (20 bytes) name=~bad_exception

/* std::bad_exception::~bad_exception() */

void __thiscall std::bad_exception::~bad_exception(bad_exception *this)

{
  *(undefined **)this = PTR_vtable_00501b18 + 0x10;
  exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 003cf234 (12 bytes) name=what

/* std::exception::what() const */

char * std::exception::what(void)

{
  return "std::exception";
}


==================================================================

### FUNC 003cf240 (12 bytes) name=what

/* std::bad_exception::what() const */

char * std::bad_exception::what(void)

{
  return "std::bad_exception";
}


==================================================================

### FUNC 003cf24c (36 bytes) name=~exception

/* std::exception::~exception() */

void __thiscall std::exception::~exception(exception *this)

{
  ~exception(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003cf270 (36 bytes) name=~bad_exception

/* std::bad_exception::~bad_exception() */

void __thiscall std::bad_exception::~bad_exception(bad_exception *this)

{
  ~bad_exception(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003cf294 (4 bytes) name=~__forced_unwind

/* __cxxabiv1::__forced_unwind::~__forced_unwind() */

void __thiscall __cxxabiv1::__forced_unwind::~__forced_unwind(__forced_unwind *this)

{
  return;
}


==================================================================

### FUNC 003cf298 (36 bytes) name=~__forced_unwind

/* __cxxabiv1::__forced_unwind::~__forced_unwind() */

void __thiscall __cxxabiv1::__forced_unwind::~__forced_unwind(__forced_unwind *this)

{
  ~__forced_unwind(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003cf2bc (4 bytes) name=~__foreign_exception

/* __cxxabiv1::__foreign_exception::~__foreign_exception() */

void __thiscall __cxxabiv1::__foreign_exception::~__foreign_exception(__foreign_exception *this)

{
  return;
}


==================================================================

### FUNC 003cf2c0 (36 bytes) name=~__foreign_exception

/* __cxxabiv1::__foreign_exception::~__foreign_exception() */

void __thiscall __cxxabiv1::__foreign_exception::~__foreign_exception(__foreign_exception *this)

{
  ~__foreign_exception(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003cf2e4 (28 bytes) name=FUN_003cf2e4

pthread_key_t * FUN_003cf2e4(pthread_key_t *param_1)

{
  code *pcVar1;
  uint uVar2;
  
  if (param_1 == (pthread_key_t *)0x0) {
                    /* WARNING: Does not return */
    pcVar1 = (code *)SoftwareBreakpoint(1000,0x3cf300);
    (*pcVar1)();
  }
  if ((char)param_1[1] == '\0') {
    return param_1;
  }
  uVar2 = pthread_key_delete(*param_1);
  return (pthread_key_t *)(ulong)uVar2;
}


==================================================================

### FUNC 003cf300 (76 bytes) name=FUN_003cf300

void FUN_003cf300(long *param_1)

{
  long lVar1;
  long lVar2;
  
  if (param_1 == (long *)0x0) {
    return;
  }
  lVar1 = *param_1;
  while (lVar1 != 0) {
    lVar2 = *(long *)(lVar1 + 0x20);
    _Unwind_DeleteException(lVar1 + 0x50);
    lVar1 = lVar2;
  }
  free(param_1);
  return;
}


==================================================================

### FUNC 003cf34c (56 bytes) name=__cxa_get_globals_fast

undefined * __cxa_get_globals_fast(void)

{
  undefined *puVar1;
  
  if (DAT_0054513c == '\0') {
                    /* catch() { ... } // from try @ 003cea30 with catch @ 003cf368 */
    return &DAT_00545140;
  }
  puVar1 = pthread_getspecific(DAT_00545138);
  return puVar1;
}


==================================================================

### FUNC 003cf394 (116 bytes) name=__cxa_get_globals

undefined8 * __cxa_get_globals(void)

{
  int iVar1;
  undefined8 *__pointer;
  
  if (DAT_0054513c == '\0') {
    __pointer = (undefined8 *)&DAT_00545140;
  }
  else {
    __pointer = pthread_getspecific(DAT_00545138);
    if (__pointer == (undefined8 *)0x0) {
      __pointer = malloc(0x10);
      if ((__pointer == (undefined8 *)0x0) ||
         (iVar1 = pthread_setspecific(DAT_00545138,__pointer), iVar1 != 0)) {
                    /* WARNING: Subroutine does not return */
        std::terminate();
      }
      *__pointer = 0;
      *(undefined4 *)(__pointer + 1) = 0;
    }
  }
  return __pointer;
}


==================================================================

### FUNC 003cf418 (64 bytes) name=FUN_003cf418

void FUN_003cf418(byte *param_1,ulong *param_2)

{
  uint uVar1;
  byte bVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar5 = 0;
  uVar4 = 0;
  do {
    bVar2 = *param_1;
    uVar3 = uVar4 & 0x3f;
    uVar1 = (int)uVar4 + 7;
    uVar4 = (ulong)uVar1;
    uVar5 = uVar5 | ((ulong)bVar2 & 0x7f) << uVar3;
    param_1 = param_1 + 1;
  } while ((char)bVar2 < '\0');
  if ((uVar1 < 0x40) && ((bVar2 >> 6 & 1) != 0)) {
    uVar5 = -1L << (uVar4 & 0x3f) | uVar5;
  }
                    /* try { // try from 003cf450 to 004cf453 has its CatchHandler @ 003cfd5c */
  *param_2 = uVar5;
  return;
}


==================================================================

### FUNC 003cf458 (272 bytes) name=FUN_003cf458

ulong * FUN_003cf458(byte param_1,ulong *param_2,ulong *param_3,ulong *param_4)

{
  ulong uVar1;
  ulong uVar2;
  ulong *puVar3;
  ulong *puVar4;
  ulong uVar5;
  ulong local_8;
  
  if (param_1 != 0x50) {
    switch(param_1 & 0xf) {
    case 0:
    case 4:
    case 0xc:
      puVar4 = param_3 + 1;
      local_8 = *param_3;
      break;
    case 1:
      local_8 = 0;
      uVar5 = 0;
      puVar3 = param_3;
      do {
        puVar4 = (ulong *)((long)puVar3 + 1);
        uVar2 = *puVar3;
        uVar1 = uVar5 & 0x3f;
        uVar5 = (ulong)((int)uVar5 + 7);
        local_8 = local_8 | ((ulong)(byte)uVar2 & 0x7f) << uVar1;
        puVar3 = puVar4;
      } while ((char)(byte)uVar2 < '\0');
      break;
    case 2:
      puVar4 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong)(ushort)*param_3;
      break;
    case 3:
      puVar4 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong)(uint)*param_3;
      break;
    default:
                    /* WARNING: Subroutine does not return */
      abort();
    case 9:
      puVar4 = (ulong *)FUN_003cf418(param_3,&local_8);
      break;
    case 10:
      puVar4 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong)(short)*param_3;
      break;
    case 0xb:
      puVar4 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong)(int)(uint)*param_3;
    }
    if (local_8 != 0) {
      if ((param_1 & 0x70) != 0x10) {
        param_3 = param_2;
      }
      local_8 = local_8 + (long)param_3;
      if ((char)param_1 < '\0') {
        local_8 = *(ulong *)local_8;
      }
    }
    *param_4 = local_8;
    return puVar4;
  }
  puVar4 = (ulong *)((long)param_3 + 7U & 0xfffffffffffffff8);
  *param_4 = *puVar4;
  return puVar4 + 1;
}


==================================================================

### FUNC 003cf568 (124 bytes) name=FUN_003cf568

undefined8 FUN_003cf568(byte param_1,undefined8 param_2)

{
  byte bVar1;
  undefined8 uVar2;
  
  if (param_1 == 0xff) {
    return 0;
  }
  bVar1 = param_1 & 0x70;
  if (bVar1 == 0x20) {
    uVar2 = _Unwind_GetTextRelBase(param_2);
    return uVar2;
  }
  if (bVar1 < 0x21) {
    if ((param_1 & 0x70) == 0) {
      return 0;
    }
    if (bVar1 == 0x10) {
      return 0;
    }
  }
  else {
    if (bVar1 == 0x40) {
      uVar2 = _Unwind_GetRegionStart(param_2);
      return uVar2;
    }
    if (bVar1 == 0x50) {
      return 0;
    }
    if (bVar1 == 0x30) {
      uVar2 = _Unwind_GetDataRelBase(param_2);
      return uVar2;
    }
  }
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 003cf5e4 (268 bytes) name=FUN_003cf5e4

void FUN_003cf5e4(long param_1,char *param_2,undefined8 *param_3)

{
  byte bVar1;
  char cVar2;
  ulong uVar3;
  undefined8 uVar4;
  char *pcVar5;
  byte *pbVar6;
  byte *pbVar7;
  ulong uVar8;
  ulong uVar9;
  
  if (param_1 == 0) {
    uVar4 = 0;
  }
  else {
    uVar4 = _Unwind_GetRegionStart();
  }
  *param_3 = uVar4;
  cVar2 = *param_2;
  if (cVar2 == -1) {
    param_3[1] = uVar4;
    pbVar6 = (byte *)(param_2 + 2);
    cVar2 = param_2[1];
    *(char *)(param_3 + 5) = cVar2;
  }
  else {
    uVar4 = FUN_003cf568(cVar2,param_1);
    pcVar5 = (char *)FUN_003cf458(cVar2,uVar4,param_2 + 1,param_3 + 1);
    pbVar6 = (byte *)(pcVar5 + 1);
    cVar2 = *pcVar5;
    *(char *)(param_3 + 5) = cVar2;
  }
  if (cVar2 == -1) {
    param_3[3] = 0;
  }
  else {
    uVar9 = 0;
    uVar8 = 0;
    pbVar7 = pbVar6;
    do {
      pbVar6 = pbVar7 + 1;
      bVar1 = *pbVar7;
      uVar3 = uVar8 & 0x3f;
      uVar8 = (ulong)((int)uVar8 + 7);
      uVar9 = uVar9 | ((ulong)bVar1 & 0x7f) << uVar3;
      pbVar7 = pbVar6;
    } while ((char)bVar1 < '\0');
    param_3[3] = pbVar6 + uVar9;
  }
  uVar9 = 0;
  *(byte *)((long)param_3 + 0x29) = *pbVar6;
  uVar8 = 0;
  pbVar6 = pbVar6 + 1;
  do {
    pbVar7 = pbVar6 + 1;
    bVar1 = *pbVar6;
    uVar3 = uVar8 & 0x3f;
    uVar8 = (ulong)((int)uVar8 + 7);
    uVar9 = uVar9 | ((ulong)bVar1 & 0x7f) << uVar3;
    pbVar6 = pbVar7;
  } while ((char)bVar1 < '\0');
  param_3[4] = pbVar7 + uVar9;
  return;
}


==================================================================

### FUNC 003cf6f0 (320 bytes) name=FUN_003cf6f0

char FUN_003cf6f0(long param_1,long *param_2,long *param_3,ulong param_4)

{
  byte bVar1;
  ulong uVar2;
  long *plVar3;
  char cVar4;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  byte *pbVar8;
  long *local_8;
  byte *pbVar9;
  
  pbVar8 = (byte *)(*(long *)(param_1 + 0x18) + ~param_4);
  do {
    uVar6 = 0;
    uVar5 = 0;
    pbVar9 = pbVar8;
    do {
      pbVar8 = pbVar9 + 1;
      bVar1 = *pbVar9;
      uVar2 = uVar5 & 0x3f;
      uVar5 = (ulong)((int)uVar5 + 7);
      uVar6 = uVar6 | ((ulong)bVar1 & 0x7f) << uVar2;
      pbVar9 = pbVar8;
    } while ((char)bVar1 < '\0');
    if (uVar6 == 0) {
      return '\0';
    }
    bVar1 = *(byte *)(param_1 + 0x28);
    if (bVar1 == 0xff) {
      lVar7 = 0;
    }
    else {
      switch(bVar1 & 7) {
      case 0:
      case 4:
        lVar7 = uVar6 * -8;
        break;
      default:
                    /* WARNING: Subroutine does not return */
        abort();
      case 2:
        lVar7 = uVar6 * -2;
        break;
      case 3:
        lVar7 = uVar6 * -4;
      }
    }
    FUN_003cf458(bVar1,*(undefined8 *)(param_1 + 0x10),*(long *)(param_1 + 0x18) + lVar7,&local_8);
    plVar3 = local_8;
    local_8 = param_3;
    cVar4 = (**(code **)(*param_2 + 0x10))(param_2);
    if (cVar4 != '\0') {
      local_8 = (long *)*local_8;
    }
    cVar4 = (**(code **)(*plVar3 + 0x20))(plVar3,param_2,&local_8,1);
  } while (cVar4 == '\0');
  return cVar4;
}


==================================================================

### FUNC 003cf830 (1336 bytes) name=__gxx_personality_v0

undefined8
__gxx_personality_v0(int param_1,uint param_2,long param_3,ulong *param_4,undefined8 param_5)

{
  bool bVar1;
  bool bVar2;
  ulong *puVar3;
  undefined1 uVar4;
  byte bVar5;
  char cVar6;
  int iVar7;
  ulong uVar8;
  byte *pbVar9;
  undefined8 uVar10;
  byte *pbVar11;
  long lVar12;
  long *plVar13;
  undefined8 *puVar14;
  long lVar15;
  ulong uVar16;
  ulong uVar17;
  int iVar18;
  _func_void *p_Var19;
  undefined8 uVar20;
  undefined8 *puVar21;
  ulong uVar22;
  undefined1 auStack_120 [16];
  undefined8 uStack_110;
  long *local_70;
  ulong *local_68;
  ulong local_60;
  int local_4c;
  int local_48;
  undefined4 uStack_44;
  long local_40;
  ulong *local_38;
  long local_30;
  long local_28;
  undefined8 local_20;
  long local_18;
  byte *local_10;
  byte local_8;
  undefined1 local_7;
  
  local_4c = 0;
  if (param_1 != 1) {
    return 3;
  }
  bVar1 = 1 < param_3 + 0xb8b1aabcbcd4d500U;
  if ((param_2 == 6) <= bVar1) {
    local_60 = _Unwind_GetLanguageSpecificData(param_5);
    if (local_60 == 0) {
      return 8;
    }
    pbVar9 = (byte *)FUN_003cf5e4(param_5,local_60,&local_30);
    local_20 = FUN_003cf568(local_8,param_5);
    lVar12 = _Unwind_GetIPInfo(param_5,&local_4c);
    uVar22 = lVar12 - (ulong)(local_4c == 0);
    if (pbVar9 < local_10) {
      do {
        uVar4 = local_7;
        uVar20 = FUN_003cf568(local_7,0);
        uVar20 = FUN_003cf458(uVar4,uVar20,pbVar9,&local_48);
        uVar4 = local_7;
        uVar10 = FUN_003cf568(local_7,0);
        uVar20 = FUN_003cf458(uVar4,uVar10,uVar20,&local_40);
        uVar4 = local_7;
        uVar10 = FUN_003cf568(local_7,0);
        pbVar11 = (byte *)FUN_003cf458(uVar4,uVar10,uVar20,&local_38);
        uVar16 = 0;
        uVar8 = 0;
        do {
          pbVar9 = pbVar11 + 1;
          bVar5 = *pbVar11;
          uVar17 = uVar8 & 0x3f;
          uVar8 = (ulong)((int)uVar8 + 7);
          uVar16 = uVar16 | ((ulong)bVar5 & 0x7f) << uVar17;
          pbVar11 = pbVar9;
        } while ((char)bVar5 < '\0');
        uVar8 = CONCAT44(uStack_44,local_48) + local_30;
        if (uVar22 < uVar8) break;
        if (uVar22 < uVar8 + local_40) {
          if (local_38 == (ulong *)0x0) {
            return 8;
          }
          uVar22 = (long)local_38 + local_28;
          if (uVar16 == 0) {
            if (uVar22 == 0) {
              return 8;
            }
          }
          else {
            if (uVar22 == 0) {
              return 8;
            }
            pbVar9 = local_10 + (uVar16 - 1);
            if (pbVar9 != (byte *)0x0) {
              if ((param_2 >> 3 & 1) == 0) {
                if (bVar1) {
                  local_68 = (ulong *)0x0;
                    /* catch() { ... } // from try @ 003cf450 with catch @ 003cfd5c */
                  local_70 = (long *)PTR_typeinfo_00501ca8;
                }
                else {
                  local_68 = param_4 + 4;
                  if ((*param_4 & 1) != 0) {
                    local_68 = (ulong *)param_4[-10];
                  }
                  local_70 = (long *)local_68[-0xe];
                }
              }
              else {
                local_68 = (ulong *)0x0;
                local_70 = (long *)PTR_typeinfo_00501bd0;
              }
              bVar2 = false;
              goto LAB_003cfb88;
            }
          }
          iVar7 = 2;
          goto LAB_003cfa94;
        }
      } while (pbVar9 < local_10);
    }
    uVar22 = 0;
    iVar7 = 1;
LAB_003cfa94:
    local_68 = (ulong *)0x0;
    pbVar9 = (byte *)0x0;
    iVar18 = 0;
    goto LAB_003cfaa0;
  }
  local_60 = param_4[-3];
  uVar22 = param_4[-2];
  iVar18 = *(int *)((long)param_4 + -0x24);
  if (uVar22 == 0) {
    if ((param_2 >> 3 & 1) != 0) {
                    /* WARNING: Subroutine does not return */
      std::terminate();
    }
LAB_003cf8c8:
    FUN_00419d60(param_4);
  }
  if ((param_2 >> 3 & 1) == 0) {
LAB_003cf934:
    if (iVar18 < 0) {
      FUN_003cf5e4(param_5,local_60,&local_30);
      local_20 = FUN_003cf568(local_8,param_5);
      uVar8 = FUN_003cf568(local_8,param_5);
      param_4[-2] = uVar8;
    }
    goto LAB_003cf8d8;
  }
  goto LAB_003cf8d4;
LAB_003cfb88:
  lVar12 = FUN_003cf418(pbVar9,&local_48);
  FUN_003cf418(lVar12,&local_40);
  uVar8 = CONCAT44(uStack_44,local_48);
  if (uVar8 == 0) {
    bVar2 = true;
  }
  else if ((long)uVar8 < 1) {
    if (bVar1 < (local_70 != (long *)0x0 && (param_2 & 8) == 0)) {
      bVar5 = FUN_003cf6f0(&local_30,local_70,local_68);
      bVar5 = bVar5 ^ 1;
    }
    else {
      uVar17 = 0;
      uVar16 = 0;
      pbVar11 = (byte *)(local_18 + ~uVar8);
      do {
        bVar5 = *pbVar11;
        uVar8 = uVar16 & 0x3f;
        uVar16 = (ulong)((int)uVar16 + 7);
        uVar17 = uVar17 | ((ulong)bVar5 & 0x7f) << uVar8;
        pbVar11 = pbVar11 + 1;
      } while ((char)bVar5 < '\0');
      bVar5 = uVar17 == 0;
    }
    if (bVar5 != 0) {
LAB_003cfcec:
      iVar7 = 3;
      iVar18 = local_48;
      goto LAB_003cfaa0;
    }
  }
  else {
    if (local_8 == 0xff) {
      lVar15 = 0;
    }
    else {
      switch(local_8 & 7) {
      case 0:
      case 4:
        lVar15 = uVar8 * -8;
        break;
      default:
                    /* WARNING: Subroutine does not return */
        abort();
      case 2:
        lVar15 = uVar8 * -2;
        break;
      case 3:
        lVar15 = uVar8 * -4;
      }
    }
    FUN_003cf458(local_8,local_20,local_18 + lVar15,&local_38);
    puVar3 = local_38;
    if (local_38 == (ulong *)0x0) goto LAB_003cfcec;
    if (local_70 != (long *)0x0) {
      local_38 = local_68;
      cVar6 = (**(code **)(*local_70 + 0x10))(local_70);
      if (cVar6 != '\0') {
        local_38 = (ulong *)*local_38;
      }
      cVar6 = (**(code **)(*puVar3 + 0x20))(puVar3,local_70,&local_38,1);
      if (cVar6 != '\0') {
        local_68 = local_38;
        goto LAB_003cfcec;
      }
    }
  }
  if (local_40 == 0) goto LAB_003cfd40;
  pbVar9 = (byte *)(lVar12 + local_40);
  goto LAB_003cfb88;
LAB_003cfd40:
  if (!bVar2) {
    return 8;
  }
  iVar7 = 2;
  iVar18 = 0;
LAB_003cfaa0:
  if ((param_2 & 1) != 0) {
    if (iVar7 == 2) {
      return 8;
    }
    if (!bVar1) {
      param_4[-3] = local_60;
      *(int *)((long)param_4 + -0x24) = iVar18;
      param_4[-4] = (ulong)pbVar9;
      param_4[-1] = (ulong)local_68;
      param_4[-2] = uVar22;
      return 6;
    }
    return 6;
  }
  if (((param_2 >> 3 & 1) == 0) && (!bVar1)) {
    if (iVar7 == 1) goto LAB_003cf8c8;
    goto LAB_003cf934;
  }
  if (iVar7 == 1) {
                    /* WARNING: Subroutine does not return */
    std::terminate();
  }
LAB_003cf8d4:
  if (iVar18 < 0) {
    lVar12 = std::unexpected();
    __cxa_begin_catch();
    uStack_110 = *(undefined8 *)(lVar12 + -0x10);
    uVar20 = *(undefined8 *)(lVar12 + -0x18);
    iVar18 = *(int *)(lVar12 + -0x24);
    p_Var19 = *(_func_void **)(lVar12 + -0x38);
    __cxxabiv1::__unexpected(*(_func_void **)(lVar12 + -0x40));
    __cxa_begin_catch();
    plVar13 = (long *)__cxa_get_globals_fast();
    puVar14 = (undefined8 *)*plVar13;
    puVar21 = puVar14 + 0xe;
    if ((puVar14[10] & 1) != 0) {
      puVar21 = (undefined8 *)*puVar14;
    }
    FUN_003cf5e4(0,uVar20,auStack_120);
    cVar6 = FUN_003cf6f0(auStack_120,puVar21[-0xe],puVar21,(long)iVar18);
    if (cVar6 != '\0') {
      uVar20 = __cxa_rethrow();
      __cxa_end_catch();
      __cxa_end_catch();
                    /* WARNING: Subroutine does not return */
      _Unwind_Resume(uVar20);
    }
    cVar6 = FUN_003cf6f0(auStack_120,PTR_typeinfo_00501ef8,0,(long)iVar18);
    if (cVar6 != '\0') {
      plVar13 = (long *)__cxa_allocate_exception(8);
      *plVar13 = (long)(PTR_vtable_00501b18 + 0x10);
                    /* WARNING: Subroutine does not return */
      __cxa_throw(plVar13,PTR_typeinfo_00501ef8,PTR__bad_exception_00501a70);
    }
                    /* WARNING: Subroutine does not return */
    __cxxabiv1::__terminate(p_Var19);
  }
LAB_003cf8d8:
  _Unwind_SetGR(param_5,0,param_4);
  _Unwind_SetGR(param_5,1,(long)iVar18);
  _Unwind_SetIP(param_5,uVar22);
  return 7;
}


==================================================================

### FUNC 003cfd6c (240 bytes) name=__cxa_call_unexpected

void __cxa_call_unexpected(long param_1)

{
  int iVar1;
  char cVar2;
  long *plVar3;
  undefined8 *puVar4;
  _func_void *p_Var5;
  undefined8 uVar6;
  undefined8 *puVar7;
  undefined1 auStack_30 [16];
  undefined8 local_20;
  
                    /* try { // try from 003cfd78 to 004cfd7b has its CatchHandler @ 003cf388 */
  __cxa_begin_catch();
  local_20 = *(undefined8 *)(param_1 + -0x10);
  uVar6 = *(undefined8 *)(param_1 + -0x18);
  iVar1 = *(int *)(param_1 + -0x24);
  p_Var5 = *(_func_void **)(param_1 + -0x38);
  __cxxabiv1::__unexpected(*(_func_void **)(param_1 + -0x40));
  __cxa_begin_catch();
  plVar3 = (long *)__cxa_get_globals_fast();
  puVar4 = (undefined8 *)*plVar3;
  puVar7 = puVar4 + 0xe;
  if ((puVar4[10] & 1) != 0) {
    puVar7 = (undefined8 *)*puVar4;
  }
  FUN_003cf5e4(0,uVar6,auStack_30);
  cVar2 = FUN_003cf6f0(auStack_30,puVar7[-0xe],puVar7,(long)iVar1);
  if (cVar2 != '\0') {
    uVar6 = __cxa_rethrow();
    __cxa_end_catch();
    __cxa_end_catch();
                    /* WARNING: Subroutine does not return */
    _Unwind_Resume(uVar6);
  }
  cVar2 = FUN_003cf6f0(auStack_30,PTR_typeinfo_00501ef8,0,(long)iVar1);
  if (cVar2 != '\0') {
    plVar3 = (long *)__cxa_allocate_exception(8);
    *plVar3 = (long)(PTR_vtable_00501b18 + 0x10);
                    /* WARNING: Subroutine does not return */
    __cxa_throw(plVar3,PTR_typeinfo_00501ef8,PTR__bad_exception_00501a70);
  }
                    /* WARNING: Subroutine does not return */
  __cxxabiv1::__terminate(p_Var5);
}


==================================================================

### FUNC 003cfe5c (16 bytes) name=__terminate

/* __cxxabiv1::__terminate(void (*)()) */

void __cxxabiv1::__terminate(_func_void *param_1)

{
  (*param_1)();
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 003cfe98 (28 bytes) name=set_terminate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::set_terminate(void (*)()) */

undefined8 std::set_terminate(_func_void *param_1)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  undefined8 uVar4;
  
  puVar3 = PTR___terminate_handler_005018d0;
  do {
    uVar4 = *(undefined8 *)puVar3;
    cVar1 = '\x01';
    bVar2 = (bool)ExclusiveMonitorPass(puVar3,0x10);
    if (bVar2) {
      *(_func_void **)puVar3 = param_1;
      cVar1 = ExclusiveMonitorsStatus();
    }
  } while (cVar1 != '\0');
  return uVar4;
}


==================================================================

### FUNC 003cfeb4 (16 bytes) name=get_terminate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::get_terminate() */

undefined8 std::get_terminate(void)

{
  return *(undefined8 *)PTR___terminate_handler_005018d0;
}


==================================================================

### FUNC 003cfec4 (16 bytes) name=terminate

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::terminate() */

void std::terminate(void)

{
  _func_void *p_Var1;
  
  p_Var1 = (_func_void *)get_terminate();
                    /* WARNING: Subroutine does not return */
  __cxxabiv1::__terminate(p_Var1);
}


==================================================================

### FUNC 003cfed4 (16 bytes) name=__unexpected

/* __cxxabiv1::__unexpected(void (*)()) */

void __cxxabiv1::__unexpected(_func_void *param_1)

{
  (*param_1)();
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003cfee4 (28 bytes) name=set_unexpected

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::set_unexpected(void (*)()) */

undefined8 std::set_unexpected(_func_void *param_1)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  undefined8 uVar4;
  
  puVar3 = PTR___unexpected_handler_00501c88;
  do {
    uVar4 = *(undefined8 *)puVar3;
    cVar1 = '\x01';
    bVar2 = (bool)ExclusiveMonitorPass(puVar3,0x10);
    if (bVar2) {
      *(_func_void **)puVar3 = param_1;
      cVar1 = ExclusiveMonitorsStatus();
    }
  } while (cVar1 != '\0');
  return uVar4;
}


==================================================================

### FUNC 003cff00 (16 bytes) name=get_unexpected

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::get_unexpected() */

undefined8 std::get_unexpected(void)

{
  return *(undefined8 *)PTR___unexpected_handler_00501c88;
}


==================================================================

### FUNC 003cff10 (16 bytes) name=unexpected

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::unexpected() */

void std::unexpected(void)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  uint uVar4;
  _func_void *p_Var5;
  int *piVar6;
  long extraout_x1;
  
  p_Var5 = (_func_void *)get_unexpected();
  uVar4 = __cxxabiv1::__unexpected(p_Var5);
  if (1 < uVar4) {
                    /* WARNING: Subroutine does not return */
    __cxxabiv1::__terminate(*(_func_void **)(extraout_x1 + -0x38));
  }
  piVar6 = (int *)(extraout_x1 + -0x60);
  do {
    iVar1 = *piVar6;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
    if (bVar3) {
      *piVar6 = iVar1 + -1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if (iVar1 + -1 == 0) {
    if (*(code **)(extraout_x1 + -0x48) != (code *)0x0) {
      (**(code **)(extraout_x1 + -0x48))(extraout_x1 + 0x20);
    }
    __cxa_free_exception(extraout_x1 + 0x20);
    return;
  }
  return;
}


==================================================================

### FUNC 003cff20 (100 bytes) name=FUN_003cff20

void FUN_003cff20(uint param_1,long param_2)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  
  if (1 < param_1) {
                    /* WARNING: Subroutine does not return */
    __cxxabiv1::__terminate(*(_func_void **)(param_2 + -0x38));
  }
  piVar4 = (int *)(param_2 + -0x60);
  do {
    iVar1 = *piVar4;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
    if (bVar3) {
      *piVar4 = iVar1 + -1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if (iVar1 + -1 == 0) {
    if (*(code **)(param_2 + -0x48) != (code *)0x0) {
      (**(code **)(param_2 + -0x48))(param_2 + 0x20);
    }
    __cxa_free_exception(param_2 + 0x20);
    return;
  }
  return;
}


==================================================================

### FUNC 003cff84 (140 bytes) name=__cxa_throw

void __cxa_throw(long param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  undefined8 uVar2;
  
  lVar1 = __cxa_get_globals();
  *(int *)(lVar1 + 8) = *(int *)(lVar1 + 8) + 1;
  *(undefined8 *)(param_1 + -0x68) = param_3;
  *(undefined8 *)(param_1 + -0x70) = param_2;
  *(undefined4 *)(param_1 + -0x80) = 1;
  uVar2 = std::get_unexpected();
  *(undefined8 *)(param_1 + -0x60) = uVar2;
  uVar2 = std::get_terminate();
  *(undefined8 *)(param_1 + -0x58) = uVar2;
  *(undefined8 *)(param_1 + -0x20) = 0x474e5543432b2b00;
  *(code **)(param_1 + -0x18) = FUN_003cff20;
  _Unwind_RaiseException(param_1 + -0x20);
  __cxa_begin_catch(param_1 + -0x20);
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003d0010 (112 bytes) name=__cxa_rethrow

void __cxa_rethrow(void)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = (long *)__cxa_get_globals();
  lVar2 = *plVar1;
  *(int *)(plVar1 + 1) = (int)plVar1[1] + 1;
  if (lVar2 != 0) {
    if (*(long *)(lVar2 + 0x50) + 0xb8b1aabcbcd4d500U < 2) {
      *(int *)(lVar2 + 0x28) = -*(int *)(lVar2 + 0x28);
    }
    else {
      *plVar1 = 0;
    }
    _Unwind_Resume_or_Rethrow(lVar2 + 0x50);
    __cxa_begin_catch(lVar2 + 0x50);
  }
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003d0080 (348 bytes) name=__cxa_guard_acquire

undefined8 __cxa_guard_acquire(uint *param_1)

{
  uint uVar1;
  uint uVar2;
  char cVar3;
  bool bVar4;
  undefined8 uVar5;
  long *plVar6;
  
  if (PTR___google_potentially_blocking_region_begin_00501d90 != (undefined *)0x0) {
    __google_potentially_blocking_region_begin();
  }
  if ((char)*param_1 == '\0') {
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
LAB_003d00dc:
      uVar1 = *param_1;
      if (uVar1 == 0) goto code_r0x003d00e8;
      goto LAB_003d00f0;
    }
    if ((char)*param_1 == '\0') {
      if (*(char *)((long)param_1 + 1) != '\0') {
        plVar6 = (long *)__cxa_allocate_exception(8);
        *plVar6 = (long)(PTR_vtable_00501fe0 + 0x10);
                    /* WARNING: Subroutine does not return */
        __cxa_throw(plVar6,PTR_typeinfo_00501900,PTR__recursive_init_error_00501eb0);
      }
      uVar5 = 1;
      *(undefined1 *)((long)param_1 + 1) = 1;
      goto LAB_003d0108;
    }
  }
LAB_003d0104:
  uVar5 = 0;
LAB_003d0108:
  if (PTR___google_potentially_blocking_region_end_00501ae0 != (undefined *)0x0) {
    __google_potentially_blocking_region_end();
  }
  return uVar5;
code_r0x003d00e8:
  cVar3 = '\x01';
  bVar4 = (bool)ExclusiveMonitorPass(param_1,0x10);
  if (bVar4) {
    *param_1 = 0x100;
    cVar3 = ExclusiveMonitorsStatus();
  }
  if (cVar3 == '\0') {
LAB_003d00f0:
    if (uVar1 == 0) {
      uVar5 = 1;
      goto LAB_003d0108;
    }
    if (uVar1 != 1) {
      if (uVar1 == 0x100) {
        do {
          uVar2 = *param_1;
          if (uVar2 != 0x100) break;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(param_1,0x10);
          if (bVar4) {
            *param_1 = 0x10100;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        uVar1 = 0x10100;
        if (uVar2 != 0x100) {
          if (uVar2 == 1) goto LAB_003d0104;
          if (uVar2 == 0) goto LAB_003d00dc;
        }
      }
      syscall(0x62,param_1,0,(ulong)uVar1,0);
      goto LAB_003d00dc;
    }
    goto LAB_003d0104;
  }
  goto LAB_003d00dc;
}


==================================================================

### FUNC 003d01f8 (100 bytes) name=__cxa_guard_abort

void __cxa_guard_abort(uint *param_1)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    *(undefined1 *)((long)param_1 + 1) = 0;
    return;
  }
  do {
    uVar1 = *param_1;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(param_1,0x10);
    if (bVar3) {
      *param_1 = 0;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if ((uVar1 & 0x10000) != 0) {
    syscall(0x62,param_1,1,0x7fffffff);
    return;
  }
  return;
}


==================================================================

### FUNC 003d026c (112 bytes) name=__cxa_guard_release

void __cxa_guard_release(uint *param_1)

{
  uint uVar1;
  char cVar2;
  bool bVar3;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    *(undefined1 *)((long)param_1 + 1) = 0;
    *(undefined1 *)param_1 = 1;
    return;
  }
  do {
    uVar1 = *param_1;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(param_1,0x10);
    if (bVar3) {
      *param_1 = 1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if ((uVar1 & 0x10000) != 0) {
    syscall(0x62,param_1,1,0x7fffffff);
    return;
  }
  return;
}


==================================================================

### FUNC 003d02ec (20 bytes) name=~recursive_init_error

/* __gnu_cxx::recursive_init_error::~recursive_init_error() */

void __thiscall __gnu_cxx::recursive_init_error::~recursive_init_error(recursive_init_error *this)

{
  *(undefined **)this = PTR_vtable_00501fe0 + 0x10;
  std::exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 003d0300 (36 bytes) name=~recursive_init_error

/* __gnu_cxx::recursive_init_error::~recursive_init_error() */

void __thiscall __gnu_cxx::recursive_init_error::~recursive_init_error(recursive_init_error *this)

{
  ~recursive_init_error(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003d0324 (112 bytes) name=operator.new

/* operator new(unsigned long) */

void * operator_new(ulong param_1)

{
  void *pvVar1;
  code *pcVar2;
  long *plVar3;
  
  if (param_1 == 0) {
    param_1 = 1;
  }
  pvVar1 = malloc(param_1);
  while( true ) {
    if (pvVar1 != (void *)0x0) {
      return pvVar1;
    }
    pcVar2 = (code *)std::get_new_handler();
    if (pcVar2 == (code *)0x0) break;
    (*pcVar2)();
    pvVar1 = malloc(param_1);
  }
  plVar3 = (long *)__cxa_allocate_exception(8);
  *plVar3 = (long)(PTR_vtable_00501dd0 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar3,PTR_typeinfo_00501950,PTR__bad_alloc_005019e0);
}


==================================================================

### FUNC 003d0394 (20 bytes) name=operator.new[]

/* operator new[](unsigned long) */

void * operator_new__(ulong param_1)

{
  void *pvVar1;
  
  pvVar1 = operator_new(param_1);
  return pvVar1;
}


==================================================================

### FUNC 003d03b8 (32 bytes) name=__cxa_pure_virtual

void __cxa_pure_virtual(void)

{
  write(2,"pure virtual method called\n",0x1b);
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003d03d8 (32 bytes) name=__cxa_deleted_virtual

void __cxa_deleted_virtual(void)

{
  write(2,"deleted virtual method called\n",0x1e);
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 003d03f8 (20 bytes) name=~__si_class_type_info

/* __cxxabiv1::__si_class_type_info::~__si_class_type_info() */

void __thiscall __cxxabiv1::__si_class_type_info::~__si_class_type_info(__si_class_type_info *this)

{
  *(undefined **)this = PTR_vtable_00501e60 + 0x10;
  __class_type_info::~__class_type_info((__class_type_info *)this);
  return;
}


==================================================================

### FUNC 003d040c (36 bytes) name=~__si_class_type_info

/* __cxxabiv1::__si_class_type_info::~__si_class_type_info() */

void __thiscall __cxxabiv1::__si_class_type_info::~__si_class_type_info(__si_class_type_info *this)

{
  ~__si_class_type_info(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003d0430 (344 bytes) name=__do_dyncast

/* __cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind,
   __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void
   const*, __cxxabiv1::__class_type_info::__dyncast_result&) const */

undefined1 __thiscall
__cxxabiv1::__si_class_type_info::__do_dyncast
          (__si_class_type_info *this,long param_1,undefined8 param_3,long param_4,long param_5,
          long param_6,long param_7,long *param_8)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  undefined4 uVar4;
  char *__s1;
  
  __s1 = *(char **)(this + 8);
  if (__s1 == *(char **)(param_4 + 8)) {
LAB_003d04d4:
    *param_8 = param_5;
    *(int *)(param_8 + 1) = (int)param_3;
    if (-1 < param_1) {
      uVar4 = 6;
      if (param_7 != param_5 + param_1) {
        uVar4 = 1;
      }
      *(undefined4 *)(param_8 + 2) = uVar4;
      return 0;
    }
    uVar2 = 0;
    if (param_1 == -2) {
      *(undefined4 *)(param_8 + 2) = 1;
    }
  }
  else {
    cVar1 = *__s1;
    if (cVar1 != '*') {
      iVar3 = strcmp(__s1,*(char **)(param_4 + 8));
      if (iVar3 == 0) goto LAB_003d04d4;
    }
    if (param_5 == param_7) {
      if (__s1 == *(char **)(param_6 + 8)) {
LAB_003d0570:
        *(int *)((long)param_8 + 0xc) = (int)param_3;
                    /* try { // try from 003d0584 to 004d0587 has its CatchHandler @ 003d0ebc */
        return 0;
      }
      if (cVar1 != '*') {
        iVar3 = strcmp(__s1,*(char **)(param_6 + 8));
        if (iVar3 == 0) goto LAB_003d0570;
      }
    }
                    /* catch() { ... } // from try @ 003d0ed8 with catch @ 003d04b8 */
    uVar2 = (**(code **)(**(long **)(this + 0x10) + 0x38))
                      (*(long **)(this + 0x10),param_1,param_3,param_4,param_5,param_6,param_7);
  }
  return uVar2;
}


==================================================================

### FUNC 003d0588 (148 bytes) name=__do_find_public_src

/* __cxxabiv1::__si_class_type_info::__do_find_public_src(long, void const*,
   __cxxabiv1::__class_type_info const*, void const*) const */

undefined4 __thiscall
__cxxabiv1::__si_class_type_info::__do_find_public_src
          (__si_class_type_info *this,long param_1,void *param_2,__class_type_info *param_3,
          void *param_4)

{
  undefined4 uVar1;
  int iVar2;
  char *__s1;
  
  if (param_4 == param_2) {
    __s1 = *(char **)(this + 8);
    if (__s1 == *(char **)(param_3 + 8)) {
      return 6;
    }
    if ((*__s1 != '*') && (iVar2 = strcmp(__s1,*(char **)(param_3 + 8)), iVar2 == 0)) {
      return 6;
    }
  }
  uVar1 = (**(code **)(**(long **)(this + 0x10) + 0x40))
                    (*(long **)(this + 0x10),param_1,param_2,param_3,param_4);
  return uVar1;
}


==================================================================

### FUNC 003d061c (96 bytes) name=__do_upcast

/* __cxxabiv1::__si_class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void const*,
   __cxxabiv1::__class_type_info::__upcast_result&) const */

char __thiscall
__cxxabiv1::__si_class_type_info::__do_upcast
          (__si_class_type_info *this,__class_type_info *param_1,void *param_2,
          __upcast_result *param_3)

{
  char cVar1;
  
  cVar1 = __class_type_info::__do_upcast((__class_type_info *)this,param_1,param_2,param_3);
  if (cVar1 == '\0') {
    cVar1 = (**(code **)(**(long **)(this + 0x10) + 0x30))
                      (*(long **)(this + 0x10),param_1,param_2,param_3);
  }
  return cVar1;
}


==================================================================

### FUNC 003d067c (4 bytes) name=FUN_003d067c

void FUN_003d067c(void)

{
  return;
}


==================================================================

### FUNC 003d0680 (8 bytes) name=FUN_003d0680

undefined8 FUN_003d0680(void)

{
  return 0;
}


==================================================================

### FUNC 003d0688 (8 bytes) name=FUN_003d0688

undefined8 FUN_003d0688(void)

{
  return 0;
}


==================================================================

### FUNC 003d0690 (8 bytes) name=FUN_003d0690

undefined8 FUN_003d0690(void)

{
  return 0;
}


==================================================================

### FUNC 003d0698 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 003d069c (80 bytes) name=FUN_003d069c

bool FUN_003d069c(long param_1,long param_2)

{
  int iVar1;
  char *__s1;
  
  __s1 = *(char **)(param_1 + 8);
  if (__s1 == *(char **)(param_2 + 8)) {
    return true;
  }
  if (*__s1 != '*') {
    iVar1 = strcmp(__s1,*(char **)(param_2 + 8));
    return iVar1 == 0;
  }
  return false;
}


==================================================================

### FUNC 003d06ec (20 bytes) name=~__vmi_class_type_info

/* __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() */

void __thiscall
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(__vmi_class_type_info *this)

{
  *(undefined **)this = PTR_vtable_00501ff0 + 0x10;
  __class_type_info::~__class_type_info((__class_type_info *)this);
  return;
}


==================================================================

### FUNC 003d0700 (36 bytes) name=~__vmi_class_type_info

/* __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() */

void __thiscall
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(__vmi_class_type_info *this)

{
  ~__vmi_class_type_info(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 003d0724 (268 bytes) name=__do_find_public_src

/* __cxxabiv1::__vmi_class_type_info::__do_find_public_src(long, void const*,
   __cxxabiv1::__class_type_info const*, void const*) const */

uint __thiscall
__cxxabiv1::__vmi_class_type_info::__do_find_public_src
          (__vmi_class_type_info *this,long param_1,void *param_2,__class_type_info *param_3,
          void *param_4)

{
  bool bVar1;
  uint uVar2;
  int iVar3;
  ulong uVar4;
  char *__s1;
  long lVar5;
  __vmi_class_type_info *p_Var6;
  ulong uVar7;
  ulong uVar8;
  
  if (param_2 == param_4) {
    __s1 = *(char **)(this + 8);
    if (__s1 == *(char **)(param_3 + 8)) {
      return 6;
    }
    if ((*__s1 != '*') && (iVar3 = strcmp(__s1,*(char **)(param_3 + 8)), iVar3 == 0)) {
      return 6;
    }
  }
  uVar8 = (ulong)*(uint *)(this + 0x14);
  uVar7 = 1;
  p_Var6 = this + uVar8 * 0x10;
  if (uVar8 != 0) {
    do {
      uVar4 = *(ulong *)(p_Var6 + 0x10);
      lVar5 = (long)uVar4 >> 8;
      if ((((uint)uVar4 >> 1 & 1) != 0) && (((uVar4 & 1) == 0 || (param_1 != -3)))) {
        if ((uVar4 & 1) != 0) {
          lVar5 = *(long *)(*(long *)param_2 + lVar5);
        }
        uVar2 = (**(code **)(**(long **)(p_Var6 + 8) + 0x40))
                          (*(long **)(p_Var6 + 8),param_1,(long)param_2 + lVar5,param_3,param_4);
        if (3 < (int)uVar2) {
          return uVar2 | (uint)(uVar4 & 1);
        }
      }
      bVar1 = uVar7 != uVar8;
      p_Var6 = p_Var6 + -0x10;
      uVar7 = uVar7 + 1;
    } while (bVar1);
  }
  return 1;
}


==================================================================

### FUNC 003d0830 (1464 bytes) name=__do_dyncast

/* __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind,
   __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void
   const*, __cxxabiv1::__class_type_info::__dyncast_result&) const */

char __thiscall
__cxxabiv1::__vmi_class_type_info::__do_dyncast
          (__vmi_class_type_info *this,long param_1,uint param_3,long *param_4,long *param_5,
          long param_6,long *param_7,long *param_8)

{
  byte bVar1;
  bool bVar2;
  byte bVar3;
  char cVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  ulong uVar8;
  uint uVar9;
  undefined4 uVar10;
  char *__s2;
  long lVar11;
  ulong uVar12;
  char *__s1;
  ulong uVar13;
  char cVar14;
  ulong uVar15;
  __vmi_class_type_info *p_Var16;
  long local_18;
  uint local_10;
  uint local_c;
  uint local_8;
  uint local_4;
  
  if ((*(uint *)((long)param_8 + 0x14) >> 4 & 1) != 0) {
    *(undefined4 *)((long)param_8 + 0x14) = *(undefined4 *)(this + 0x10);
  }
  __s1 = *(char **)(this + 8);
  if (param_5 == param_7) {
    if (__s1 == *(char **)(param_6 + 8)) {
LAB_003d0b68:
      *(uint *)((long)param_8 + 0xc) = param_3;
      return '\0';
    }
    if (*__s1 == '*') {
      if (__s1 != (char *)param_4[1]) goto LAB_003d08bc;
      goto LAB_003d0bf0;
    }
    iVar5 = strcmp(__s1,*(char **)(param_6 + 8));
    if (iVar5 == 0) goto LAB_003d0b68;
    __s2 = (char *)param_4[1];
    if (__s1 == __s2) goto LAB_003d0bf0;
  }
  else {
    __s2 = (char *)param_4[1];
    if (__s2 == __s1) goto LAB_003d0bf0;
    if (*__s1 == '*') goto LAB_003d08bc;
  }
  iVar5 = strcmp(__s1,__s2);
  if (iVar5 != 0) {
LAB_003d08bc:
    cVar14 = '\0';
    bVar3 = 0;
    uVar12 = (long)param_7 - param_1;
    if (param_1 < 0) {
      uVar12 = 0;
    }
    bVar2 = true;
    do {
      uVar15 = 0;
      uVar13 = (ulong)*(uint *)(this + 0x14);
      p_Var16 = this + uVar13 * 0x10;
      if (uVar13 != 0) {
        do {
          local_4 = *(uint *)((long)param_8 + 0x14);
          uVar8 = *(ulong *)(p_Var16 + 0x10);
          local_18 = 0;
          local_10 = 0;
          lVar11 = (long)uVar8 >> 8;
          local_c = 0;
          local_8 = 0;
          uVar9 = param_3;
          if ((uVar8 & 1) != 0) {
            lVar11 = *(long *)(*param_5 + lVar11);
            uVar9 = param_3 | 1;
          }
          if ((uVar12 == 0) || (uVar12 < (ulong)((long)param_5 + lVar11) != bVar2)) {
            if (((uint)uVar8 >> 1 & 1) == 0) {
              if ((param_1 == -2) && ((local_4 & 3) == 0)) goto LAB_003d09d8;
              uVar9 = uVar9 & 0xfffffffd;
            }
            cVar4 = (**(code **)(**(long **)(p_Var16 + 8) + 0x38))
                              (*(long **)(p_Var16 + 8),param_1,uVar9,param_4,(long)param_5 + lVar11,
                               param_6,param_7,&local_18);
            uVar7 = local_8;
            uVar9 = local_c | *(uint *)((long)param_8 + 0xc);
            *(uint *)((long)param_8 + 0xc) = uVar9;
            if ((local_8 & 0xfffffffb) == 2) {
              *param_8 = local_18;
              *(uint *)(param_8 + 1) = local_10;
              *(uint *)(param_8 + 2) = local_8;
              return cVar4;
            }
            lVar11 = *param_8;
            if (cVar14 == '\0') {
              if (lVar11 == 0) {
                *param_8 = local_18;
                *(uint *)(param_8 + 1) = local_10;
                cVar14 = cVar4;
                if (((uVar9 != 0) && (local_18 != 0)) && ((*(uint *)(this + 0x10) & 1) == 0)) {
                  return cVar4;
                }
              }
              else {
LAB_003d09bc:
                if (lVar11 == local_18) {
                  *(uint *)(param_8 + 1) = *(uint *)(param_8 + 1) | local_10;
                }
                else if ((cVar4 != '\0') || (local_18 != 0)) goto LAB_003d0a30;
              }
            }
            else {
              if (lVar11 != 0) goto LAB_003d09bc;
              if (local_18 == 0) goto LAB_003d09d0;
LAB_003d0a30:
              uVar6 = *(uint *)(param_8 + 2);
              if (((int)uVar9 < 4) ||
                 (((uVar9 & 1) != 0 && ((*(uint *)((long)param_8 + 0x14) >> 1 & 1) != 0)))) {
                if (0 < (int)uVar6) {
LAB_003d0a58:
                  if (0 < (int)uVar7) {
LAB_003d0a60:
                    uVar9 = uVar6 ^ uVar7;
                    local_8 = uVar7;
                    goto joined_r0x003d0aec;
                  }
                  if ((3 < (int)uVar6) &&
                     (((uVar6 & 1) == 0 || ((*(uint *)(this + 0x10) >> 1 & 1) == 0)))) {
                    if (3 < (int)(uVar6 ^ 1)) {
                      uVar9 = uVar6 & 2;
                      goto LAB_003d0a78;
                    }
                    goto LAB_003d0afc;
                  }
                  if (param_1 < 0) {
                    if (param_1 == -2) goto LAB_003d0b20;
                    uVar7 = (**(code **)(*param_4 + 0x40))(param_4,param_1,local_18,param_6,param_7)
                    ;
                    goto LAB_003d0a60;
                  }
                  if (param_7 != (long *)(local_18 + param_1)) {
                    uVar7 = uVar6 ^ 1;
                    goto LAB_003d0b24;
                  }
                  local_8 = uVar6 & 6;
                  if (3 < (int)(uVar6 ^ 6)) goto LAB_003d0da0;
LAB_003d0af4:
                  if (3 < (int)local_8) {
                    *param_8 = 0;
                    *(undefined4 *)(param_8 + 2) = 2;
                    return '\x01';
                  }
                  goto LAB_003d0afc;
                }
                if (((int)local_8 < 4) ||
                   (((local_8 & 1) != 0 && ((*(uint *)(this + 0x10) >> 1 & 1) != 0)))) {
                  if (param_1 < 0) {
                    if (param_1 != -2) {
                      uVar6 = (**(code **)(*param_4 + 0x40))(param_4,param_1,lVar11,param_6,param_7)
                      ;
                      goto LAB_003d0a58;
                    }
                    if ((int)local_8 < 1) goto LAB_003d0b00;
LAB_003d0c88:
                    uVar6 = 1;
                    goto LAB_003d0a60;
                  }
                  if (param_7 == (long *)(lVar11 + param_1)) {
                    uVar6 = 6;
                    if (0 < (int)local_8) goto LAB_003d0a60;
                    goto LAB_003d0a74;
                  }
                  if (0 < (int)local_8) goto LAB_003d0c88;
                  if (param_7 != (long *)(local_18 + param_1)) {
                    uVar6 = 1;
                    uVar7 = 0;
                    goto LAB_003d0b24;
                  }
LAB_003d0da0:
                  local_8 = 0;
                  uVar9 = 2;
                }
                else {
                  uVar6 = 1;
                  if ((int)(local_8 ^ 1) < 4) goto LAB_003d0af0;
LAB_003d0aac:
                  uVar9 = local_8 & 2;
                }
                *param_8 = local_18;
                cVar14 = '\0';
                *(uint *)(param_8 + 1) = local_10;
                uVar6 = local_8;
LAB_003d0a78:
                *(uint *)(param_8 + 2) = uVar6;
                if (uVar9 != 0) {
                  return '\0';
                }
                if ((uVar6 & 1) == 0) {
                  return '\0';
                }
                uVar9 = *(uint *)((long)param_8 + 0xc);
              }
              else {
                if (uVar6 == 0) {
                  if (local_8 != 0) {
                    uVar6 = 1;
LAB_003d0adc:
                    uVar9 = uVar6 ^ local_8;
joined_r0x003d0aec:
                    if (3 < (int)uVar9) {
                      if (3 < (int)local_8) goto LAB_003d0aac;
LAB_003d0a74:
                      uVar9 = uVar6 & 2;
                      goto LAB_003d0a78;
                    }
LAB_003d0af0:
                    local_8 = uVar6 & local_8;
                    goto LAB_003d0af4;
                  }
                }
                else {
                  if (local_8 != 0) goto LAB_003d0adc;
LAB_003d0b20:
                  uVar7 = uVar6 ^ 1;
LAB_003d0b24:
                  uVar9 = uVar6 & 2;
                  if (3 < (int)uVar7) goto LAB_003d0a78;
LAB_003d0afc:
                  uVar9 = *(uint *)((long)param_8 + 0xc);
                }
LAB_003d0b00:
                *param_8 = 0;
                *(undefined4 *)(param_8 + 2) = 1;
                cVar14 = '\x01';
              }
            }
LAB_003d09d0:
            if (uVar9 == 4) {
              return cVar14;
            }
          }
          else {
            bVar3 = 1;
          }
LAB_003d09d8:
          uVar15 = uVar15 + 1;
          p_Var16 = p_Var16 + -0x10;
        } while (uVar13 != uVar15);
      }
      bVar1 = bVar3 & bVar2;
      bVar3 = 1;
      bVar2 = false;
      if (bVar1 == 0) {
        return cVar14;
      }
    } while( true );
  }
LAB_003d0bf0:
  *param_8 = (long)param_5;
  *(uint *)(param_8 + 1) = param_3;
  if (-1 < param_1) {
    uVar10 = 6;
    if (param_7 != (long *)((long)param_5 + param_1)) {
      uVar10 = 1;
    }
    *(undefined4 *)(param_8 + 2) = uVar10;
    return '\0';
  }
  if (param_1 == -2) {
    *(undefined4 *)(param_8 + 2) = 1;
  }
  return '\0';
}


==================================================================

### FUNC 003d0de8 (576 bytes) name=__do_upcast

/* __cxxabiv1::__vmi_class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void const*,
   __cxxabiv1::__class_type_info::__upcast_result&) const */

char __thiscall
__cxxabiv1::__vmi_class_type_info::__do_upcast
          (__vmi_class_type_info *this,__class_type_info *param_1,void *param_2,
          __upcast_result *param_3)

{
  uint uVar1;
  char cVar2;
  int iVar3;
  char *__s1;
  ulong uVar4;
  long lVar5;
  __vmi_class_type_info *p_Var6;
  uint uVar7;
  ulong uVar8;
  ulong uVar9;
  long local_18;
  uint local_10;
  uint local_c;
  long local_8;
  
  cVar2 = __class_type_info::__do_upcast((__class_type_info *)this,param_1,param_2,param_3);
  if (cVar2 == '\0') {
    uVar7 = *(uint *)(param_3 + 0xc);
    if ((uVar7 >> 4 & 1) != 0) {
      uVar7 = *(uint *)(this + 0x10);
    }
    uVar9 = 0;
    uVar8 = (ulong)*(uint *)(this + 0x14);
    p_Var6 = this + uVar8 * 0x10;
    if (uVar8 != 0) {
      do {
        uVar4 = *(ulong *)(p_Var6 + 0x10);
        local_18 = 0;
        local_10 = 0;
        local_8 = 0;
        if (((uVar4 >> 1 & 1) != 0) || ((uVar7 & 1) != 0)) {
          if (param_2 == (void *)0x0) {
            lVar5 = 0;
          }
          else {
            lVar5 = (long)uVar4 >> 8;
            if ((uVar4 & 1) != 0) {
              lVar5 = *(long *)(*(long *)param_2 + lVar5);
            }
            lVar5 = (long)param_2 + lVar5;
          }
          local_c = uVar7;
          cVar2 = (**(code **)(**(long **)(p_Var6 + 8) + 0x30))
                            (*(long **)(p_Var6 + 8),param_1,lVar5,&local_18);
          if (cVar2 != '\0') {
                    /* catch() { ... } // from try @ 003d0584 with catch @ 003d0ebc */
            if (((uVar4 & 1) != 0) && (local_8 == 0x10)) {
              local_8 = *(long *)(p_Var6 + 8);
            }
            if (((uVar4 >> 1 & 1) == 0) && (3 < (int)local_10)) {
                    /* try { // try from 003d0ed8 to 004d0edb has its CatchHandler @ 003d04b8 */
              local_10 = local_10 & 0xfffffffd;
                    /* catch() { ... } // from try @ 003d18cc with catch @ 003d0edc */
            }
            lVar5 = *(long *)(param_3 + 0x10);
            if (lVar5 == 0) {
              *(long *)param_3 = local_18;
              *(ulong *)(param_3 + 8) = CONCAT44(local_c,local_10);
              uVar1 = *(uint *)(param_3 + 8);
              *(long *)(param_3 + 0x10) = local_8;
              if ((int)uVar1 < 4) {
                return cVar2;
              }
              if ((uVar1 >> 1 & 1) == 0) {
                if ((uVar1 & 1) == 0) {
                  return cVar2;
                }
                uVar1 = *(uint *)(this + 0x10) >> 1;
              }
              else {
                uVar1 = *(uint *)(this + 0x10);
              }
              if ((uVar1 & 1) == 0) {
                return cVar2;
              }
            }
            else {
              if (*(long *)param_3 != local_18) {
                *(undefined8 *)param_3 = 0;
                *(undefined4 *)(param_3 + 8) = 2;
                return cVar2;
              }
              if (*(long *)param_3 == 0) {
                if ((local_8 == 0x10) || (lVar5 == 0x10)) {
LAB_003d0fc8:
                  *(undefined4 *)(param_3 + 8) = 2;
                  return cVar2;
                }
                __s1 = *(char **)(local_8 + 8);
                    /* try { // try from 003d0fa4 to 004d0fa7 has its CatchHandler @ 003d18b0 */
                if ((__s1 != *(char **)(lVar5 + 8)) &&
                   ((*__s1 == '*' || (iVar3 = strcmp(__s1,*(char **)(lVar5 + 8)), iVar3 != 0))))
                goto LAB_003d0fc8;
              }
              *(uint *)(param_3 + 8) = *(uint *)(param_3 + 8) | local_10;
            }
          }
        }
        uVar9 = uVar9 + 1;
        p_Var6 = p_Var6 + -0x10;
      } while (uVar8 != uVar9);
    }
    cVar2 = *(int *)(param_3 + 8) != 0;
  }
  return cVar2;
}


==================================================================

### FUNC 003d1028 (8 bytes) name=FUN_003d1028

undefined4 FUN_003d1028(undefined8 param_1,undefined4 param_2)

{
  return param_2;
}


==================================================================

### FUNC 003d1030 (68 bytes) name=FUN_003d1030

void FUN_003d1030(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fcdb0;
  FUN_0041a634(param_1 + 2);
  if ((*(char *)(param_1 + 3) != '\0') && ((void *)param_1[6] != (void *)0x0)) {
    operator_delete__((void *)param_1[6]);
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003d1088 (64 bytes) name=FUN_003d1088

void FUN_003d1088(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fce10;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501fd8 + 0x10);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003d10ec (44 bytes) name=FUN_003d10ec

long FUN_003d10ec(undefined8 param_1,void *param_2,long param_3,undefined8 param_4,void *param_5)

{
  memcpy(param_5,param_2,param_3 - (long)param_2);
  return param_3;
}


==================================================================

### FUNC 003d1118 (44 bytes) name=FUN_003d1118

long FUN_003d1118(undefined8 param_1,void *param_2,long param_3,void *param_4)

{
  memcpy(param_4,param_2,param_3 - (long)param_2);
  return param_3;
}


==================================================================

### FUNC 003d1144 (64 bytes) name=FUN_003d1144

void FUN_003d1144(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fce10;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501fd8 + 0x10);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003d11a8 (76 bytes) name=FUN_003d11a8

void FUN_003d11a8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fcdb0;
  FUN_0041a634(param_1 + 2);
  if ((*(char *)(param_1 + 3) != '\0') && ((void *)param_1[6] != (void *)0x0)) {
    operator_delete__((void *)param_1[6]);
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d1208 (72 bytes) name=FUN_003d1208

void FUN_003d1208(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fce10;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501fd8 + 0x10);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d1274 (72 bytes) name=FUN_003d1274

void FUN_003d1274(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fce10;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501fd8 + 0x10);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d12e0 (356 bytes) name=FUN_003d12e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003d12e0(long *param_1)

{
  char cVar1;
  char cVar2;
  int iVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  long lVar6;
  long lVar7;
  char local_101;
  undefined8 uStack_100;
  undefined8 auStack_f8 [31];
  
  puVar4 = &uStack_100;
  lVar6 = _DAT_003d1450;
  lVar7 = _UNK_003d1458;
  do {
    cVar1 = (char)lVar6;
    cVar2 = (char)lVar7;
    lVar6 = lVar6 + _DAT_003d1460;
    lVar7 = lVar7 + _UNK_003d1468;
    puVar5 = puVar4 + 2;
    puVar4[1] = CONCAT17(cVar2 + (char)_UNK_003d14d8,
                         CONCAT16(cVar1 + (char)_DAT_003d14d0,
                                  CONCAT15(cVar2 + (char)_UNK_003d14c8,
                                           CONCAT14(cVar1 + (char)_DAT_003d14c0,
                                                    CONCAT13(cVar2 + (char)_UNK_003d14b8,
                                                             CONCAT12(cVar1 + (char)_DAT_003d14b0,
                                                                      CONCAT11(cVar2 + (char)
                                                  _UNK_003d14a8,cVar1 + (char)_DAT_003d14a0)))))));
    *puVar4 = CONCAT17(cVar2 + (char)_UNK_003d1498,
                       CONCAT16(cVar1 + (char)_DAT_003d1490,
                                CONCAT15(cVar2 + (char)_UNK_003d1488,
                                         CONCAT14(cVar1 + (char)_DAT_003d1480,
                                                  CONCAT13(cVar2 + (char)_UNK_003d1478,
                                                           CONCAT12(cVar1 + (char)_DAT_003d1470,
                                                                    CONCAT11(cVar2,cVar1)))))));
    puVar4 = puVar5;
  } while (puVar5 != (undefined8 *)&stack0x00000000);
  (**(code **)(*param_1 + 0x48))
            (param_1,&uStack_100,&stack0x00000000,0,(void *)((long)param_1 + 0x139));
  *(undefined1 *)((long)param_1 + 0x239) = 1;
  iVar3 = memcmp(&uStack_100,(void *)((long)param_1 + 0x139),0x100);
  if ((iVar3 == 0) &&
     ((**(code **)(*param_1 + 0x48))(param_1,&uStack_100,(long)&uStack_100 + 1,1,&local_101),
     local_101 != '\x01')) {
    return;
  }
  *(undefined1 *)((long)param_1 + 0x239) = 2;
  return;
}


==================================================================

### FUNC 003d14e0 (288 bytes) name=FUN_003d14e0

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_003d14e0(long *param_1)

{
  char cVar1;
  char cVar2;
  int iVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  long lVar6;
  long lVar7;
  undefined8 auStack_100 [32];
  
  puVar4 = auStack_100;
  lVar6 = _DAT_003d1600;
  lVar7 = _UNK_003d1608;
  do {
    cVar1 = (char)lVar6;
    cVar2 = (char)lVar7;
    lVar6 = lVar6 + _DAT_003d1610;
    lVar7 = lVar7 + _UNK_003d1618;
    puVar5 = puVar4 + 2;
    puVar4[1] = CONCAT17(cVar2 + (char)_UNK_003d1688,
                         CONCAT16(cVar1 + (char)_DAT_003d1680,
                                  CONCAT15(cVar2 + (char)_UNK_003d1678,
                                           CONCAT14(cVar1 + (char)_DAT_003d1670,
                                                    CONCAT13(cVar2 + (char)_UNK_003d1668,
                                                             CONCAT12(cVar1 + (char)_DAT_003d1660,
                                                                      CONCAT11(cVar2 + (char)
                                                  _UNK_003d1658,cVar1 + (char)_DAT_003d1650)))))));
    *puVar4 = CONCAT17(cVar2 + (char)_UNK_003d1648,
                       CONCAT16(cVar1 + (char)_DAT_003d1640,
                                CONCAT15(cVar2 + (char)_UNK_003d1638,
                                         CONCAT14(cVar1 + (char)_DAT_003d1630,
                                                  CONCAT13(cVar2 + (char)_UNK_003d1628,
                                                           CONCAT12(cVar1 + (char)_DAT_003d1620,
                                                                    CONCAT11(cVar2,cVar1)))))));
    puVar4 = puVar5;
  } while (puVar5 != (undefined8 *)&stack0x00000000);
  (**(code **)(*param_1 + 0x38))
            (param_1,auStack_100,&stack0x00000000,(void *)((long)param_1 + 0x39));
  *(undefined1 *)(param_1 + 7) = 1;
  iVar3 = memcmp(auStack_100,(void *)((long)param_1 + 0x39),0x100);
  if (iVar3 != 0) {
    *(undefined1 *)(param_1 + 7) = 2;
  }
  return;
}


==================================================================

### FUNC 003d1690 (68 bytes) name=FUN_003d1690

void FUN_003d1690(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fce10;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  *(undefined1 *)(param_1 + 3) = 0;
  FUN_003d20ec(param_1);
  return;
}


==================================================================

### FUNC 003d16f8 (84 bytes) name=FUN_003d16f8

void FUN_003d16f8(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 local_8;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fce10;
  local_8 = param_2;
  uVar1 = FUN_0041a63c(&local_8);
  *(undefined1 *)(param_1 + 3) = 0;
  param_1[2] = uVar1;
  FUN_003d20ec(param_1);
  return;
}


==================================================================

### FUNC 003d174c (184 bytes) name=FUN_003d174c

void FUN_003d174c(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 uVar2;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fce10;
  uVar2 = FUN_003ed450();
  param_1[2] = uVar2;
  *(undefined1 *)(param_1 + 3) = 0;
  FUN_003d20ec(param_1);
  *param_1 = &PTR_FUN_004fce90;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    FUN_003d20ec(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 003d183c (20 bytes) name=FUN_003d183c

long FUN_003d183c(void)

{
  return *(long *)PTR__ctype__00501e78 + 1;
}


==================================================================

### FUNC 003d1850 (152 bytes) name=FUN_003d1850

void FUN_003d1850(long *param_1,undefined8 param_2,long param_3,byte param_4,long param_5)

{
  undefined *puVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_5 != 0);
  puVar1 = PTR_DAT_00501f28;
  param_1[4] = 0;
  *(byte *)(param_1 + 3) = param_4 & param_3 != 0;
  *param_1 = (long)(puVar1 + 0x10);
  param_1[5] = 0;
  if (param_3 == 0) {
    param_3 = *(long *)PTR__ctype__00501e78 + 1;
  }
  param_1[6] = param_3;
  memset((void *)((long)param_1 + 0x39),0,0x100);
                    /* catch() { ... } // from try @ 003d0fa4 with catch @ 003d18b0 */
  *(undefined1 *)(param_1 + 7) = 0;
  memset((void *)((long)param_1 + 0x139),0,0x100);
  *(undefined1 *)((long)param_1 + 0x239) = 0;
                    /* try { // try from 003d18cc to 004d18cf has its CatchHandler @ 003d0edc */
  return;
}


==================================================================

### FUNC 003d18e8 (152 bytes) name=FUN_003d18e8

void FUN_003d18e8(long *param_1,long param_2,byte param_3,long param_4)

{
  undefined *puVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  puVar1 = PTR_DAT_00501f28;
  param_1[4] = 0;
  *(byte *)(param_1 + 3) = param_3 & param_2 != 0;
  *param_1 = (long)(puVar1 + 0x10);
  param_1[5] = 0;
  if (param_2 == 0) {
    param_2 = *(long *)PTR__ctype__00501e78 + 1;
  }
  param_1[6] = param_2;
  memset((void *)((long)param_1 + 0x39),0,0x100);
  *(undefined1 *)(param_1 + 7) = 0;
  memset((void *)((long)param_1 + 0x139),0,0x100);
  *(undefined1 *)((long)param_1 + 0x239) = 0;
  return;
}


==================================================================

### FUNC 003d1980 (36 bytes) name=FUN_003d1980

byte FUN_003d1980(long param_1,byte param_2)

{
  if ((*(byte *)(*(long *)(param_1 + 0x30) + (ulong)param_2) >> 1 & 1) != 0) {
    param_2 = param_2 - 0x20;
  }
  return param_2;
}


==================================================================

### FUNC 003d19a4 (88 bytes) name=FUN_003d19a4

undefined1 * FUN_003d19a4(long *param_1,undefined1 *param_2,undefined1 *param_3)

{
  undefined1 uVar1;
  undefined1 *puVar2;
  
  if (param_2 < param_3) {
    do {
      uVar1 = (**(code **)(*param_1 + 0x10))(param_1,*param_2);
      puVar2 = param_2 + 1;
      *param_2 = uVar1;
      param_2 = puVar2;
    } while (puVar2 != param_3);
  }
  return param_3;
}


==================================================================

### FUNC 003d19fc (36 bytes) name=FUN_003d19fc

byte FUN_003d19fc(long param_1,byte param_2)

{
  if ((*(byte *)(*(long *)(param_1 + 0x30) + (ulong)param_2) & 1) != 0) {
    param_2 = param_2 + 0x20;
  }
  return param_2;
}


==================================================================

### FUNC 003d1a20 (88 bytes) name=FUN_003d1a20

undefined1 * FUN_003d1a20(long *param_1,undefined1 *param_2,undefined1 *param_3)

{
  undefined1 uVar1;
  undefined1 *puVar2;
  
  if (param_2 < param_3) {
    do {
      uVar1 = (**(code **)(*param_1 + 0x20))(param_1,*param_2);
      puVar2 = param_2 + 1;
      *param_2 = uVar1;
      param_2 = puVar2;
    } while (puVar2 != param_3);
  }
  return param_3;
}


==================================================================

### FUNC 003d1a78 (16 bytes) name=FUN_003d1a78

void FUN_003d1a78(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fcf30;
  FUN_003d1030();
  return;
}


==================================================================

### FUNC 003d1a88 (48 bytes) name=FUN_003d1a88

void FUN_003d1a88(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fcf30;
  FUN_003d1030();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d1ab8 (152 bytes) name=FUN_003d1ab8

void FUN_003d1ab8(undefined8 *param_1,char *param_2,undefined8 param_3)

{
  int iVar1;
  
  FUN_003d18e8(param_1,0,0,param_3);
  *param_1 = &PTR_FUN_004fcf30;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 003d1b64 (244 bytes) name=FUN_003d1b64

wctype_t FUN_003d1b64(undefined8 param_1,byte param_2)

{
  wctype_t wVar1;
  
  if (param_2 == 8) {
    wVar1 = wctype("space");
    return wVar1;
  }
  if (param_2 < 9) {
    if (param_2 == 3) {
      wVar1 = wctype("alpha");
      return wVar1;
    }
    if (param_2 < 4) {
      if (param_2 == 1) {
        wVar1 = wctype("upper");
        return wVar1;
      }
      if (param_2 == 2) {
        wVar1 = wctype("lower");
        return wVar1;
      }
    }
    else {
      if (param_2 == 4) {
        wVar1 = wctype("digit");
        return wVar1;
      }
      if (param_2 == 7) {
        wVar1 = wctype("alnum");
        return wVar1;
      }
    }
  }
  else {
    if (param_2 == 0x20) {
      wVar1 = wctype("cntrl");
      return wVar1;
    }
    if (param_2 < 0x21) {
      if (param_2 == 0x10) {
        wVar1 = wctype("punct");
        return wVar1;
      }
      if (param_2 == 0x17) {
        wVar1 = wctype("graph");
        return wVar1;
      }
    }
    else {
      if (param_2 == 0x44) {
        wVar1 = wctype("xdigit");
        return wVar1;
      }
      if (param_2 == 0x97) {
        wVar1 = wctype("print");
        return wVar1;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 003d1c58 (8 bytes) name=FUN_003d1c58

wint_t FUN_003d1c58(undefined8 param_1,wint_t param_2)

{
  wint_t wVar1;
  
  wVar1 = towupper(param_2);
  return wVar1;
}


==================================================================

### FUNC 003d1c60 (104 bytes) name=FUN_003d1c60

wint_t * FUN_003d1c60(undefined8 param_1,wint_t *param_2,wint_t *param_3)

{
  wint_t *pwVar1;
  wint_t wVar2;
  wint_t *pwVar3;
  wint_t *pwVar4;
  
  if (param_2 < param_3) {
    pwVar1 = param_2 + 1;
    pwVar4 = param_2;
    do {
      pwVar3 = pwVar1;
      wVar2 = towupper(*pwVar4);
      *pwVar4 = wVar2;
      pwVar1 = pwVar3 + 1;
      pwVar4 = pwVar3;
    } while (pwVar3 != (wint_t *)
                       ((long)param_2 +
                       ((long)param_3 + (3 - (long)(param_2 + 1)) & 0xfffffffffffffffcU) + 4));
  }
  return param_3;
}


==================================================================

### FUNC 003d1cc8 (8 bytes) name=FUN_003d1cc8

wint_t FUN_003d1cc8(undefined8 param_1,wint_t param_2)

{
  wint_t wVar1;
  
  wVar1 = towlower(param_2);
  return wVar1;
}


==================================================================

### FUNC 003d1cd0 (104 bytes) name=FUN_003d1cd0

wint_t * FUN_003d1cd0(undefined8 param_1,wint_t *param_2,wint_t *param_3)

{
  wint_t *pwVar1;
  wint_t wVar2;
  wint_t *pwVar3;
  wint_t *pwVar4;
  
  if (param_2 < param_3) {
    pwVar1 = param_2 + 1;
    pwVar4 = param_2;
    do {
      pwVar3 = pwVar1;
      wVar2 = towlower(*pwVar4);
      *pwVar4 = wVar2;
      pwVar1 = pwVar3 + 1;
      pwVar4 = pwVar3;
    } while (pwVar3 != (wint_t *)
                       ((long)param_2 +
                       ((long)param_3 + (3 - (long)(param_2 + 1)) & 0xfffffffffffffffcU) + 4));
  }
  return param_3;
}


==================================================================

### FUNC 003d1d38 (136 bytes) name=FUN_003d1d38

undefined8 FUN_003d1d38(long param_1,byte param_2,wint_t param_3)

{
  byte bVar1;
  int iVar2;
  byte *pbVar3;
  wctype_t *pwVar4;
  
  pbVar3 = (byte *)(param_1 + 0x49c);
  pwVar4 = (wctype_t *)(param_1 + 0x4b0);
  while ((bVar1 = *pbVar3, pbVar3 = pbVar3 + 1, (param_2 & bVar1) == 0 ||
         (iVar2 = iswctype(param_3,*pwVar4), iVar2 == 0))) {
    pwVar4 = pwVar4 + 1;
    if (pbVar3 == (byte *)(param_1 + 0x4ac)) {
      return 0;
    }
  }
  return 1;
}


==================================================================

### FUNC 003d1dc0 (184 bytes) name=FUN_003d1dc0

ulong FUN_003d1dc0(long param_1,ulong param_2,ulong param_3,long param_4)

{
  int iVar1;
  wctype_t __desc;
  wctype_t *pwVar2;
  long lVar3;
  byte bVar4;
  byte *pbVar5;
  
  if (param_2 < param_3) {
    lVar3 = 0;
    do {
      bVar4 = 0;
      pwVar2 = (wctype_t *)(param_1 + 0x4b0);
      pbVar5 = (byte *)(param_1 + 0x49c);
      do {
        __desc = *pwVar2;
        pwVar2 = pwVar2 + 1;
        iVar1 = iswctype(*(wint_t *)(param_2 + lVar3 * 4),__desc);
        if (iVar1 != 0) {
          bVar4 = *pbVar5 | bVar4;
        }
        pbVar5 = pbVar5 + 1;
      } while (pwVar2 != (wctype_t *)(param_1 + 0x530));
      *(byte *)(param_4 + lVar3) = bVar4;
      lVar3 = lVar3 + 1;
    } while (lVar3 != (~param_2 + param_3 >> 2) + 1);
  }
  return param_3;
}


==================================================================

### FUNC 003d1e78 (124 bytes) name=FUN_003d1e78

undefined4 * FUN_003d1e78(long *param_1,undefined1 param_2,undefined4 *param_3,undefined4 *param_4)

{
  char cVar1;
  
  if (param_3 < param_4) {
    while (cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3), cVar1 == '\0') {
      param_3 = param_3 + 1;
      if (param_4 <= param_3) {
        return param_3;
      }
    }
  }
  return param_3;
}


==================================================================

### FUNC 003d1ef4 (124 bytes) name=FUN_003d1ef4

undefined4 * FUN_003d1ef4(long *param_1,undefined1 param_2,undefined4 *param_3,undefined4 *param_4)

{
  char cVar1;
  
  if (param_3 < param_4) {
    while (cVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,*param_3), cVar1 != '\0') {
      param_3 = param_3 + 1;
      if (param_4 <= param_3) {
        return param_3;
      }
    }
  }
  return param_3;
}


==================================================================

### FUNC 003d1f70 (12 bytes) name=FUN_003d1f70

undefined4 FUN_003d1f70(long param_1,byte param_2)

{
  return *(undefined4 *)(param_1 + (ulong)param_2 * 4 + 0x9c);
}


==================================================================

### FUNC 003d1f7c (52 bytes) name=FUN_003d1f7c

ulong FUN_003d1f7c(long param_1,ulong param_2,ulong param_3,long param_4)

{
  long lVar1;
  
  lVar1 = 0;
  if (param_2 < param_3) {
    do {
      *(undefined4 *)(param_4 + lVar1 * 4) =
           *(undefined4 *)(param_1 + (ulong)*(byte *)(param_2 + lVar1) * 4 + 0x9c);
      lVar1 = lVar1 + 1;
    } while (lVar1 != param_3 - param_2);
  }
  return param_3;
}


==================================================================

### FUNC 003d1fb0 (84 bytes) name=FUN_003d1fb0

uint FUN_003d1fb0(long param_1,uint param_2,byte param_3)

{
  uint uVar1;
  uint uVar2;
  
  if ((param_2 < 0x80) && (*(char *)(param_1 + 0x18) != '\0')) {
    return (uint)*(byte *)(param_1 + (ulong)param_2 + 0x19);
  }
  uVar1 = wctob(param_2);
  uVar2 = uVar1 & 0xff;
  if (uVar1 == 0xffffffff) {
    uVar2 = (uint)param_3;
  }
  return uVar2;
}


==================================================================

### FUNC 003d2004 (232 bytes) name=FUN_003d2004

ulong FUN_003d2004(long param_1,ulong param_2,ulong param_3,undefined1 param_4,long param_5)

{
  undefined1 uVar1;
  uint __c;
  int iVar2;
  long lVar3;
  
  if (*(char *)(param_1 + 0x18) == '\0') {
    if (param_2 < param_3) {
      lVar3 = 0;
      do {
        iVar2 = wctob(*(wint_t *)(param_2 + lVar3 * 4));
        uVar1 = (char)iVar2;
        if (iVar2 == -1) {
          uVar1 = param_4;
        }
        *(undefined1 *)(param_5 + lVar3) = uVar1;
        lVar3 = lVar3 + 1;
      } while (lVar3 != (~param_2 + param_3 >> 2) + 1);
    }
  }
  else if (param_2 < param_3) {
    lVar3 = 0;
    do {
      __c = *(uint *)(param_2 + lVar3 * 4);
      if (__c < 0x80) {
        *(undefined1 *)(param_5 + lVar3) = *(undefined1 *)(param_1 + (ulong)__c + 0x19);
      }
      else {
        iVar2 = wctob(__c);
        uVar1 = (char)iVar2;
        if (iVar2 == -1) {
          uVar1 = param_4;
        }
        *(undefined1 *)(param_5 + lVar3) = uVar1;
      }
      lVar3 = lVar3 + 1;
    } while (lVar3 != (~param_2 + param_3 >> 2) + 1);
  }
  return param_3;
}


==================================================================

### FUNC 003d20ec (184 bytes) name=FUN_003d20ec

void FUN_003d20ec(long param_1)

{
  long lVar1;
  undefined1 uVar2;
  int iVar3;
  wint_t wVar4;
  undefined8 uVar5;
  long lVar6;
  wint_t *pwVar7;
  
  lVar6 = 0;
  do {
    iVar3 = wctob((wint_t)lVar6);
    lVar1 = param_1 + lVar6;
    lVar6 = lVar6 + 1;
    if (iVar3 == -1) {
      *(undefined1 *)(param_1 + 0x18) = 0;
      goto LAB_003d2130;
    }
    *(char *)(lVar1 + 0x19) = (char)iVar3;
  } while (lVar6 != 0x80);
  *(undefined1 *)(param_1 + 0x18) = 1;
LAB_003d2130:
  lVar6 = 0;
  pwVar7 = (wint_t *)(param_1 + 0x9c);
  do {
    iVar3 = (int)lVar6;
    lVar6 = lVar6 + 1;
    wVar4 = btowc(iVar3);
    *pwVar7 = wVar4;
    pwVar7 = pwVar7 + 1;
  } while (lVar6 != 0x100);
  lVar6 = 0;
  do {
    uVar2 = (undefined1)(1 << (ulong)((uint)lVar6 & 0x1f));
    *(undefined1 *)(param_1 + lVar6 + 0x49c) = uVar2;
    uVar5 = FUN_003d1b64(param_1,uVar2);
    lVar1 = lVar6 * 8;
    lVar6 = lVar6 + 1;
    *(undefined8 *)(param_1 + lVar1 + 0x4b0) = uVar5;
  } while (lVar6 != 0x10);
  return;
}


==================================================================

### FUNC 003d21a4 (16 bytes) name=FUN_003d21a4

void FUN_003d21a4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7b60;
  FUN_003d381c();
  return;
}


==================================================================

### FUNC 003d21b4 (16 bytes) name=FUN_003d21b4

void FUN_003d21b4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7b80;
  FUN_003d381c();
  return;
}


==================================================================

### FUNC 003d21c4 (48 bytes) name=FUN_003d21c4

void FUN_003d21c4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7b60;
  FUN_003d381c();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d21f4 (48 bytes) name=FUN_003d21f4

void FUN_003d21f4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7b80;
  FUN_003d381c();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d2224 (20 bytes) name=FUN_003d2224

long FUN_003d2224(long param_1)

{
  if ((*(uint *)(param_1 + 0x20) & 5) != 0) {
    param_1 = 0;
  }
  return param_1;
}


==================================================================

### FUNC 003d2238 (20 bytes) name=FUN_003d2238

bool FUN_003d2238(long param_1)

{
  return (*(uint *)(param_1 + 0x20) & 5) != 0;
}


==================================================================

### FUNC 003d224c (8 bytes) name=FUN_003d224c

undefined4 FUN_003d224c(long param_1)

{
  return *(undefined4 *)(param_1 + 0x20);
}


==================================================================

### FUNC 003d2254 (60 bytes) name=FUN_003d2254

void FUN_003d2254(long param_1,uint param_2)

{
  uint uVar1;
  
  uVar1 = param_2 | 1;
  if (*(long *)(param_1 + 0xe8) != 0) {
    uVar1 = param_2;
  }
  *(uint *)(param_1 + 0x20) = uVar1;
  if ((uVar1 & *(uint *)(param_1 + 0x1c)) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2290 (68 bytes) name=FUN_003d2290

void FUN_003d2290(long param_1,uint param_2)

{
  uint uVar1;
  
  param_2 = param_2 | *(uint *)(param_1 + 0x20);
  uVar1 = param_2 | 1;
  if (*(long *)(param_1 + 0xe8) != 0) {
    uVar1 = param_2;
  }
  *(uint *)(param_1 + 0x20) = uVar1;
  if ((uVar1 & *(uint *)(param_1 + 0x1c)) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d22d4 (44 bytes) name=FUN_003d22d4

ulong FUN_003d22d4(ulong param_1,uint param_2)

{
  long lVar1;
  
  *(uint *)(param_1 + 0x20) = *(uint *)(param_1 + 0x20) | param_2;
  if ((param_2 & *(uint *)(param_1 + 0x1c)) == 0) {
    return param_1;
  }
  lVar1 = __cxa_rethrow();
  return (ulong)(*(int *)(lVar1 + 0x20) == 0);
}


==================================================================

### FUNC 003d2300 (16 bytes) name=FUN_003d2300

bool FUN_003d2300(long param_1)

{
  return *(int *)(param_1 + 0x20) == 0;
}


==================================================================

### FUNC 003d2310 (12 bytes) name=FUN_003d2310

uint FUN_003d2310(long param_1)

{
  return *(uint *)(param_1 + 0x20) >> 1 & 1;
}


==================================================================

### FUNC 003d231c (20 bytes) name=FUN_003d231c

bool FUN_003d231c(long param_1)

{
  return (*(uint *)(param_1 + 0x20) & 5) != 0;
}


==================================================================

### FUNC 003d2330 (12 bytes) name=FUN_003d2330

uint FUN_003d2330(long param_1)

{
  return *(uint *)(param_1 + 0x20) & 1;
}


==================================================================

### FUNC 003d233c (8 bytes) name=FUN_003d233c

undefined4 FUN_003d233c(long param_1)

{
  return *(undefined4 *)(param_1 + 0x1c);
}


==================================================================

### FUNC 003d2344 (64 bytes) name=FUN_003d2344

void FUN_003d2344(long param_1,uint param_2)

{
  uint uVar1;
  
  *(uint *)(param_1 + 0x1c) = param_2;
  uVar1 = *(uint *)(param_1 + 0x20);
  if (*(long *)(param_1 + 0xe8) == 0) {
    uVar1 = uVar1 | 1;
    *(uint *)(param_1 + 0x20) = uVar1;
  }
  if ((uVar1 & param_2) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2384 (260 bytes) name=FUN_003d2384

void FUN_003d2384(undefined8 *param_1,long param_2)

{
  undefined8 *puVar1;
  char cVar2;
  undefined8 uVar3;
  
  FUN_003d347c();
  param_1[0x1b] = 0;
  *param_1 = &PTR_FUN_004f7b60;
  puVar1 = param_1 + 0x1a;
  *(undefined1 *)(param_1 + 0x1c) = 0;
  *(undefined1 *)((long)param_1 + 0xe1) = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  FUN_003d429c(param_1);
  cVar2 = FUN_003e0700(puVar1);
  if (cVar2 == '\0') {
    param_1[0x1e] = 0;
    cVar2 = FUN_003e08b0(puVar1);
  }
  else {
    uVar3 = FUN_003de994(puVar1);
    param_1[0x1e] = uVar3;
    cVar2 = FUN_003e08b0(puVar1);
  }
  if (cVar2 == '\0') {
    param_1[0x1f] = 0;
    cVar2 = FUN_003e091c(puVar1);
  }
  else {
    uVar3 = FUN_003df7c4(puVar1);
    param_1[0x1f] = uVar3;
    cVar2 = FUN_003e091c(puVar1);
  }
  if (cVar2 == '\0') {
    param_1[0x20] = 0;
  }
  else {
    uVar3 = FUN_003df82c(puVar1);
    param_1[0x20] = uVar3;
  }
  *(undefined1 *)(param_1 + 0x1c) = 0;
  param_1[0x1d] = param_2;
  *(undefined1 *)((long)param_1 + 0xe1) = 0;
  param_1[0x1b] = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  *(uint *)(param_1 + 4) = (uint)(param_2 == 0);
  return;
}


==================================================================

### FUNC 003d249c (8 bytes) name=FUN_003d249c

undefined8 FUN_003d249c(long param_1)

{
  return *(undefined8 *)(param_1 + 0xd8);
}


==================================================================

### FUNC 003d24a4 (16 bytes) name=FUN_003d24a4

undefined8 FUN_003d24a4(long param_1,undefined8 param_2)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0xd8);
  *(undefined8 *)(param_1 + 0xd8) = param_2;
  return uVar1;
}


==================================================================

### FUNC 003d24b4 (8 bytes) name=FUN_003d24b4

undefined8 FUN_003d24b4(long param_1)

{
  return *(undefined8 *)(param_1 + 0xe8);
}


==================================================================

### FUNC 003d24bc (64 bytes) name=FUN_003d24bc

undefined8 FUN_003d24bc(long param_1,long param_2)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0xe8);
  *(uint *)(param_1 + 0x20) = (uint)(param_2 == 0);
  *(long *)(param_1 + 0xe8) = param_2;
  if (((uint)(param_2 == 0) & *(uint *)(param_1 + 0x1c)) == 0) {
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d24fc (124 bytes) name=FUN_003d24fc

undefined1 FUN_003d24fc(long param_1)

{
  undefined1 uVar1;
  long *plVar2;
  
  if (*(char *)(param_1 + 0xe1) != '\0') {
    return *(undefined1 *)(param_1 + 0xe0);
  }
  plVar2 = *(long **)(param_1 + 0xf0);
  if (plVar2 != (long *)0x0) {
    if ((char)plVar2[7] == '\0') {
      FUN_003d14e0(plVar2);
      uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,0x20);
    }
    else {
      uVar1 = *(undefined1 *)((long)plVar2 + 0x59);
    }
    *(undefined1 *)(param_1 + 0xe0) = uVar1;
    *(undefined1 *)(param_1 + 0xe1) = 1;
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d2578 (144 bytes) name=FUN_003d2578

undefined1 FUN_003d2578(long param_1,undefined1 param_2)

{
  undefined1 uVar1;
  long *plVar2;
  
  if (*(char *)(param_1 + 0xe1) != '\0') {
    uVar1 = *(undefined1 *)(param_1 + 0xe0);
    *(undefined1 *)(param_1 + 0xe0) = param_2;
    return uVar1;
  }
  plVar2 = *(long **)(param_1 + 0xf0);
  if (plVar2 != (long *)0x0) {
    if ((char)plVar2[7] == '\0') {
      FUN_003d14e0(plVar2);
      uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,0x20);
    }
    else {
      uVar1 = *(undefined1 *)((long)plVar2 + 0x59);
    }
    *(undefined1 *)(param_1 + 0xe0) = param_2;
    *(undefined1 *)(param_1 + 0xe1) = 1;
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d2608 (116 bytes) name=FUN_003d2608

char FUN_003d2608(long param_1,byte param_2,char param_3)

{
  char cVar1;
  char cVar2;
  long *plVar3;
  
  plVar3 = *(long **)(param_1 + 0xf0);
  if (plVar3 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar1 = *(char *)((long)plVar3 + (long)(int)(uint)param_2 + 0x139);
  if (cVar1 == '\0') {
    cVar2 = (**(code **)(*plVar3 + 0x40))(plVar3,param_2,param_3);
    cVar1 = param_3;
    if (param_3 != cVar2) {
      *(char *)((long)plVar3 + (long)(int)(uint)param_2 + 0x139) = cVar2;
      return cVar2;
    }
  }
  return cVar1;
}


==================================================================

### FUNC 003d267c (100 bytes) name=FUN_003d267c

undefined1 FUN_003d267c(long param_1,byte param_2)

{
  undefined1 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)(param_1 + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  if ((char)plVar2[7] != '\0') {
    return *(undefined1 *)((long)plVar2 + (long)(int)(uint)param_2 + 0x39);
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,param_2);
  return uVar1;
}


==================================================================

### FUNC 003d26e0 (72 bytes) name=FUN_003d26e0

void FUN_003d26e0(undefined8 *param_1)

{
  FUN_003d347c();
  param_1[0x1b] = 0;
  *(undefined1 *)(param_1 + 0x1c) = 0;
  *param_1 = &PTR_FUN_004f7b60;
  *(undefined1 *)((long)param_1 + 0xe1) = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  return;
}


==================================================================

### FUNC 003d2728 (212 bytes) name=FUN_003d2728

void FUN_003d2728(long param_1,long param_2)

{
  long lVar1;
  char cVar2;
  undefined8 uVar3;
  
  lVar1 = param_1 + 0xd0;
  FUN_003d429c();
  cVar2 = FUN_003e0700(lVar1);
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0xf0) = 0;
    cVar2 = FUN_003e08b0(lVar1);
  }
  else {
    uVar3 = FUN_003de994(lVar1);
    *(undefined8 *)(param_1 + 0xf0) = uVar3;
    cVar2 = FUN_003e08b0(lVar1);
  }
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0xf8) = 0;
    cVar2 = FUN_003e091c(lVar1);
  }
  else {
    uVar3 = FUN_003df7c4(lVar1);
    *(undefined8 *)(param_1 + 0xf8) = uVar3;
    cVar2 = FUN_003e091c(lVar1);
  }
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0x100) = 0;
  }
  else {
    uVar3 = FUN_003df82c(lVar1);
    *(undefined8 *)(param_1 + 0x100) = uVar3;
  }
  *(undefined1 *)(param_1 + 0xe0) = 0;
  *(long *)(param_1 + 0xe8) = param_2;
  *(undefined1 *)(param_1 + 0xe1) = 0;
  *(undefined8 *)(param_1 + 0xd8) = 0;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *(uint *)(param_1 + 0x20) = (uint)(param_2 == 0);
  return;
}


==================================================================

### FUNC 003d27fc (172 bytes) name=FUN_003d27fc

void FUN_003d27fc(long param_1,undefined8 param_2)

{
  char cVar1;
  undefined8 uVar2;
  
  cVar1 = FUN_003e0700(param_2);
  if (cVar1 == '\0') {
    *(undefined8 *)(param_1 + 0xf0) = 0;
    cVar1 = FUN_003e08b0(param_2);
  }
  else {
    uVar2 = FUN_003de994(param_2);
    *(undefined8 *)(param_1 + 0xf0) = uVar2;
    cVar1 = FUN_003e08b0(param_2);
  }
  if (cVar1 == '\0') {
    *(undefined8 *)(param_1 + 0xf8) = 0;
    cVar1 = FUN_003e091c(param_2);
  }
  else {
    uVar2 = FUN_003df7c4(param_2);
    *(undefined8 *)(param_1 + 0xf8) = uVar2;
    cVar1 = FUN_003e091c(param_2);
  }
  if (cVar1 != '\0') {
    uVar2 = FUN_003df82c(param_2);
    *(undefined8 *)(param_1 + 0x100) = uVar2;
    return;
  }
  *(undefined8 *)(param_1 + 0x100) = 0;
  return;
}


==================================================================

### FUNC 003d28a8 (172 bytes) name=FUN_003d28a8

undefined8 FUN_003d28a8(undefined8 param_1,long param_2,undefined8 param_3)

{
  long *plVar1;
  undefined1 auStack_8 [8];
  
  FUN_003ece1c(param_1,param_2 + 0xd0);
  FUN_003d42ec(auStack_8,param_2,param_3);
  FUN_003ed708(auStack_8);
  FUN_003d27fc(param_2,param_3);
  plVar1 = *(long **)(param_2 + 0xe8);
  if (plVar1 != (long *)0x0) {
    FUN_003ece1c(auStack_8,plVar1 + 7);
    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);
    FUN_003ed668(plVar1 + 7,param_3);
    FUN_003ed708(auStack_8);
  }
  return param_1;
}


==================================================================

### FUNC 003d2978 (600 bytes) name=FUN_003d2978

long FUN_003d2978(long param_1,long param_2)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  undefined4 uVar4;
  uint uVar5;
  char cVar6;
  bool bVar7;
  undefined1 uVar8;
  void *pvVar9;
  undefined8 *puVar10;
  undefined8 *puVar11;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  long *plVar17;
  long lVar18;
  undefined1 auStack_8 [8];
  undefined8 *puVar12;
  
  if (param_1 != param_2) {
    uVar2 = *(uint *)(param_2 + 0xc0);
    if ((int)uVar2 < 9) {
      puVar13 = (undefined8 *)(param_1 + 0x40);
    }
    else {
      puVar13 = operator_new__(-(ulong)(uVar2 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar2 << 4);
      iVar3 = *(int *)(param_2 + 0xc0);
      lVar18 = 0;
      puVar11 = puVar13;
      if ((long)iVar3 != 0) {
        do {
          lVar18 = lVar18 + 1;
          *puVar11 = 0;
          puVar11[1] = 0;
          puVar11 = puVar11 + 2;
        } while (iVar3 != lVar18);
      }
    }
    lVar18 = *(long *)(param_2 + 0x28);
    if (lVar18 != 0) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar18 + 0x14) = *(int *)(lVar18 + 0x14) + 1;
      }
      else {
        piVar1 = (int *)(lVar18 + 0x14);
        do {
          cVar6 = '\x01';
          bVar7 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar7) {
            *piVar1 = *piVar1 + 1;
            cVar6 = ExclusiveMonitorsStatus();
          }
        } while (cVar6 != '\0');
      }
    }
    FUN_003d3730(param_1,0);
    pvVar9 = *(void **)(param_1 + 200);
    if (pvVar9 != (void *)(param_1 + 0x40)) {
      if (pvVar9 != (void *)0x0) {
        operator_delete__(pvVar9);
      }
      *(undefined8 *)(param_1 + 200) = 0;
    }
    FUN_003d3798(param_1);
    iVar3 = *(int *)(param_2 + 0xc0);
    *(long *)(param_1 + 0x28) = lVar18;
    if (0 < iVar3) {
      puVar10 = *(undefined8 **)(param_2 + 200);
      puVar11 = puVar10;
      puVar14 = puVar13;
      do {
        puVar12 = puVar11 + 2;
        uVar15 = puVar11[1];
        *puVar14 = *puVar11;
        puVar14[1] = uVar15;
        puVar11 = puVar12;
        puVar14 = puVar14 + 2;
      } while (puVar12 != puVar10 + ((ulong)(iVar3 - 1) + 1) * 2);
    }
    uVar4 = *(undefined4 *)(param_2 + 0x18);
    *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
    uVar15 = *(undefined8 *)(param_2 + 0xd8);
    uVar16 = *(undefined8 *)(param_2 + 8);
    cVar6 = *(char *)(param_2 + 0xe1);
    *(undefined8 **)(param_1 + 200) = puVar13;
    *(int *)(param_1 + 0xc0) = iVar3;
    *(undefined4 *)(param_1 + 0x18) = uVar4;
    *(undefined8 *)(param_1 + 8) = uVar16;
    *(undefined8 *)(param_1 + 0xd8) = uVar15;
    if (cVar6 == '\0') {
      plVar17 = *(long **)(param_2 + 0xf0);
      if (plVar17 == (long *)0x0) goto LAB_003d2bc0;
      if ((char)plVar17[7] == '\0') {
        FUN_003d14e0(plVar17);
        uVar8 = (**(code **)(*plVar17 + 0x30))(plVar17,0x20);
      }
      else {
        uVar8 = *(undefined1 *)((long)plVar17 + 0x59);
      }
      *(undefined1 *)(param_2 + 0xe0) = uVar8;
      *(undefined1 *)(param_2 + 0xe1) = 1;
    }
    else {
      uVar8 = *(undefined1 *)(param_2 + 0xe0);
    }
    if (*(char *)(param_1 + 0xe1) == '\0') {
      plVar17 = *(long **)(param_1 + 0xf0);
      if (plVar17 == (long *)0x0) {
LAB_003d2bc0:
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar17[7] == '\0') {
        FUN_003d14e0(plVar17);
        (**(code **)(*plVar17 + 0x30))(plVar17,0x20);
      }
      *(undefined1 *)(param_1 + 0xe1) = 1;
    }
    *(undefined1 *)(param_1 + 0xe0) = uVar8;
    FUN_003ece1c(auStack_8,param_2 + 0xd0);
    FUN_003ed668(param_1 + 0xd0,auStack_8);
    FUN_003ed708(auStack_8);
    FUN_003d27fc(param_1,param_1 + 0xd0);
    FUN_003d3730(param_1,2);
    uVar2 = *(uint *)(param_2 + 0x1c);
    *(uint *)(param_1 + 0x1c) = uVar2;
    uVar5 = *(uint *)(param_1 + 0x20);
    if (*(long *)(param_1 + 0xe8) == 0) {
      uVar5 = uVar5 | 1;
      *(uint *)(param_1 + 0x20) = uVar5;
    }
    if ((uVar5 & uVar2) != 0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_ios::clear");
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d2bd0 (20 bytes) name=FUN_003d2bd0

long FUN_003d2bd0(long param_1)

{
  if ((*(uint *)(param_1 + 0x20) & 5) != 0) {
    param_1 = 0;
  }
  return param_1;
}


==================================================================

### FUNC 003d2be4 (20 bytes) name=FUN_003d2be4

bool FUN_003d2be4(long param_1)

{
  return (*(uint *)(param_1 + 0x20) & 5) != 0;
}


==================================================================

### FUNC 003d2bf8 (8 bytes) name=FUN_003d2bf8

undefined4 FUN_003d2bf8(long param_1)

{
  return *(undefined4 *)(param_1 + 0x20);
}


==================================================================

### FUNC 003d2c00 (60 bytes) name=FUN_003d2c00

void FUN_003d2c00(long param_1,uint param_2)

{
  uint uVar1;
  
  uVar1 = param_2 | 1;
  if (*(long *)(param_1 + 0xe8) != 0) {
    uVar1 = param_2;
  }
  *(uint *)(param_1 + 0x20) = uVar1;
  if ((uVar1 & *(uint *)(param_1 + 0x1c)) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2c3c (68 bytes) name=FUN_003d2c3c

void FUN_003d2c3c(long param_1,uint param_2)

{
  uint uVar1;
  
  param_2 = param_2 | *(uint *)(param_1 + 0x20);
  uVar1 = param_2 | 1;
  if (*(long *)(param_1 + 0xe8) != 0) {
    uVar1 = param_2;
  }
  *(uint *)(param_1 + 0x20) = uVar1;
  if ((uVar1 & *(uint *)(param_1 + 0x1c)) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2c80 (44 bytes) name=FUN_003d2c80

ulong FUN_003d2c80(ulong param_1,uint param_2)

{
  long lVar1;
  
  *(uint *)(param_1 + 0x20) = *(uint *)(param_1 + 0x20) | param_2;
  if ((param_2 & *(uint *)(param_1 + 0x1c)) == 0) {
    return param_1;
  }
  lVar1 = __cxa_rethrow();
  return (ulong)(*(int *)(lVar1 + 0x20) == 0);
}


==================================================================

### FUNC 003d2cac (16 bytes) name=FUN_003d2cac

bool FUN_003d2cac(long param_1)

{
  return *(int *)(param_1 + 0x20) == 0;
}


==================================================================

### FUNC 003d2cbc (12 bytes) name=FUN_003d2cbc

uint FUN_003d2cbc(long param_1)

{
  return *(uint *)(param_1 + 0x20) >> 1 & 1;
}


==================================================================

### FUNC 003d2cc8 (20 bytes) name=FUN_003d2cc8

bool FUN_003d2cc8(long param_1)

{
  return (*(uint *)(param_1 + 0x20) & 5) != 0;
}


==================================================================

### FUNC 003d2cdc (12 bytes) name=FUN_003d2cdc

uint FUN_003d2cdc(long param_1)

{
  return *(uint *)(param_1 + 0x20) & 1;
}


==================================================================

### FUNC 003d2ce8 (8 bytes) name=FUN_003d2ce8

undefined4 FUN_003d2ce8(long param_1)

{
  return *(undefined4 *)(param_1 + 0x1c);
}


==================================================================

### FUNC 003d2cf0 (64 bytes) name=FUN_003d2cf0

void FUN_003d2cf0(long param_1,uint param_2)

{
  uint uVar1;
  
  *(uint *)(param_1 + 0x1c) = param_2;
  uVar1 = *(uint *)(param_1 + 0x20);
  if (*(long *)(param_1 + 0xe8) == 0) {
    uVar1 = uVar1 | 1;
    *(uint *)(param_1 + 0x20) = uVar1;
  }
  if ((uVar1 & param_2) == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2d30 (260 bytes) name=FUN_003d2d30

void FUN_003d2d30(undefined8 *param_1,long param_2)

{
  undefined8 *puVar1;
  char cVar2;
  undefined8 uVar3;
  
  FUN_003d347c();
  param_1[0x1b] = 0;
  *param_1 = &PTR_FUN_004f7b80;
  puVar1 = param_1 + 0x1a;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *(undefined1 *)((long)param_1 + 0xe4) = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  FUN_003d429c(param_1);
  cVar2 = FUN_00402fb0(puVar1);
  if (cVar2 == '\0') {
    param_1[0x1e] = 0;
    cVar2 = FUN_00403160(puVar1);
  }
  else {
    uVar3 = FUN_00401028(puVar1);
    param_1[0x1e] = uVar3;
    cVar2 = FUN_00403160(puVar1);
  }
  if (cVar2 == '\0') {
    param_1[0x1f] = 0;
    cVar2 = FUN_004031cc(puVar1);
  }
  else {
    uVar3 = FUN_00401d3c(puVar1);
    param_1[0x1f] = uVar3;
    cVar2 = FUN_004031cc(puVar1);
  }
  if (cVar2 == '\0') {
    param_1[0x20] = 0;
  }
  else {
    uVar3 = FUN_00401da4(puVar1);
    param_1[0x20] = uVar3;
  }
  param_1[0x1d] = param_2;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *(undefined1 *)((long)param_1 + 0xe4) = 0;
  param_1[0x1b] = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  *(uint *)(param_1 + 4) = (uint)(param_2 == 0);
  return;
}


==================================================================

### FUNC 003d2e48 (8 bytes) name=FUN_003d2e48

undefined8 FUN_003d2e48(long param_1)

{
  return *(undefined8 *)(param_1 + 0xd8);
}


==================================================================

### FUNC 003d2e50 (16 bytes) name=FUN_003d2e50

undefined8 FUN_003d2e50(long param_1,undefined8 param_2)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0xd8);
  *(undefined8 *)(param_1 + 0xd8) = param_2;
  return uVar1;
}


==================================================================

### FUNC 003d2e60 (8 bytes) name=FUN_003d2e60

undefined8 FUN_003d2e60(long param_1)

{
  return *(undefined8 *)(param_1 + 0xe8);
}


==================================================================

### FUNC 003d2e68 (64 bytes) name=FUN_003d2e68

undefined8 FUN_003d2e68(long param_1,long param_2)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0xe8);
  *(uint *)(param_1 + 0x20) = (uint)(param_2 == 0);
  *(long *)(param_1 + 0xe8) = param_2;
  if (((uint)(param_2 == 0) & *(uint *)(param_1 + 0x1c)) == 0) {
    return uVar1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f928("basic_ios::clear");
}


==================================================================

### FUNC 003d2ea8 (92 bytes) name=FUN_003d2ea8

ulong FUN_003d2ea8(long param_1)

{
  long *plVar1;
  ulong uVar2;
  
  if (*(char *)(param_1 + 0xe4) != '\0') {
    return (ulong)*(uint *)(param_1 + 0xe0);
  }
  plVar1 = *(long **)(param_1 + 0xf0);
  if (plVar1 != (long *)0x0) {
    uVar2 = (**(code **)(*plVar1 + 0x50))(plVar1,0x20);
    *(int *)(param_1 + 0xe0) = (int)uVar2;
    *(undefined1 *)(param_1 + 0xe4) = 1;
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d2f04 (100 bytes) name=FUN_003d2f04

ulong FUN_003d2f04(long param_1,undefined4 param_2)

{
  uint uVar1;
  long *plVar2;
  ulong uVar3;
  
  if (*(char *)(param_1 + 0xe4) != '\0') {
    uVar1 = *(uint *)(param_1 + 0xe0);
    *(undefined4 *)(param_1 + 0xe0) = param_2;
    return (ulong)uVar1;
  }
  plVar2 = *(long **)(param_1 + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar3 = (**(code **)(*plVar2 + 0x50))(plVar2,0x20);
    *(undefined4 *)(param_1 + 0xe0) = param_2;
    *(undefined1 *)(param_1 + 0xe4) = 1;
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d2f68 (44 bytes) name=FUN_003d2f68

void FUN_003d2f68(long param_1,undefined8 param_2,undefined1 param_3)

{
  if (*(long **)(param_1 + 0xf0) != (long *)0x0) {
    (**(code **)(**(long **)(param_1 + 0xf0) + 0x60))();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118(0,param_2,param_3);
}


==================================================================

### FUNC 003d2f94 (44 bytes) name=FUN_003d2f94

void FUN_003d2f94(long param_1,undefined1 param_2)

{
  if (*(long **)(param_1 + 0xf0) != (long *)0x0) {
    (**(code **)(**(long **)(param_1 + 0xf0) + 0x50))();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118(0,param_2);
}


==================================================================

### FUNC 003d2fc0 (72 bytes) name=FUN_003d2fc0

void FUN_003d2fc0(undefined8 *param_1)

{
  FUN_003d347c();
  param_1[0x1b] = 0;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *param_1 = &PTR_FUN_004f7b80;
  *(undefined1 *)((long)param_1 + 0xe4) = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  return;
}


==================================================================

### FUNC 003d3008 (212 bytes) name=FUN_003d3008

void FUN_003d3008(long param_1,long param_2)

{
  long lVar1;
  char cVar2;
  undefined8 uVar3;
  
  lVar1 = param_1 + 0xd0;
  FUN_003d429c();
  cVar2 = FUN_00402fb0(lVar1);
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0xf0) = 0;
    cVar2 = FUN_00403160(lVar1);
  }
  else {
    uVar3 = FUN_00401028(lVar1);
    *(undefined8 *)(param_1 + 0xf0) = uVar3;
    cVar2 = FUN_00403160(lVar1);
  }
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0xf8) = 0;
    cVar2 = FUN_004031cc(lVar1);
  }
  else {
    uVar3 = FUN_00401d3c(lVar1);
    *(undefined8 *)(param_1 + 0xf8) = uVar3;
    cVar2 = FUN_004031cc(lVar1);
  }
  if (cVar2 == '\0') {
    *(undefined8 *)(param_1 + 0x100) = 0;
  }
  else {
    uVar3 = FUN_00401da4(lVar1);
    *(undefined8 *)(param_1 + 0x100) = uVar3;
  }
  *(long *)(param_1 + 0xe8) = param_2;
  *(undefined4 *)(param_1 + 0xe0) = 0;
  *(undefined1 *)(param_1 + 0xe4) = 0;
  *(undefined8 *)(param_1 + 0xd8) = 0;
  *(undefined4 *)(param_1 + 0x1c) = 0;
  *(uint *)(param_1 + 0x20) = (uint)(param_2 == 0);
  return;
}


==================================================================

### FUNC 003d30dc (172 bytes) name=FUN_003d30dc

void FUN_003d30dc(long param_1,undefined8 param_2)

{
  char cVar1;
  undefined8 uVar2;
  
  cVar1 = FUN_00402fb0(param_2);
  if (cVar1 == '\0') {
    *(undefined8 *)(param_1 + 0xf0) = 0;
    cVar1 = FUN_00403160(param_2);
  }
  else {
    uVar2 = FUN_00401028(param_2);
    *(undefined8 *)(param_1 + 0xf0) = uVar2;
    cVar1 = FUN_00403160(param_2);
  }
  if (cVar1 == '\0') {
    *(undefined8 *)(param_1 + 0xf8) = 0;
    cVar1 = FUN_004031cc(param_2);
  }
  else {
    uVar2 = FUN_00401d3c(param_2);
    *(undefined8 *)(param_1 + 0xf8) = uVar2;
    cVar1 = FUN_004031cc(param_2);
  }
  if (cVar1 != '\0') {
    uVar2 = FUN_00401da4(param_2);
    *(undefined8 *)(param_1 + 0x100) = uVar2;
    return;
  }
  *(undefined8 *)(param_1 + 0x100) = 0;
  return;
}


==================================================================

### FUNC 003d3188 (172 bytes) name=FUN_003d3188

undefined8 FUN_003d3188(undefined8 param_1,long param_2,undefined8 param_3)

{
  long *plVar1;
  undefined1 auStack_8 [8];
  
  FUN_003ece1c(param_1,param_2 + 0xd0);
  FUN_003d42ec(auStack_8,param_2,param_3);
  FUN_003ed708(auStack_8);
  FUN_003d30dc(param_2,param_3);
  plVar1 = *(long **)(param_2 + 0xe8);
  if (plVar1 != (long *)0x0) {
    FUN_003ece1c(auStack_8,plVar1 + 7);
    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);
    FUN_003ed668(plVar1 + 7,param_3);
    FUN_003ed708(auStack_8);
  }
  return param_1;
}


==================================================================

### FUNC 003d3258 (548 bytes) name=FUN_003d3258

long FUN_003d3258(long param_1,long param_2)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  char cVar5;
  bool bVar6;
  undefined4 uVar7;
  void *pvVar8;
  undefined8 *puVar9;
  undefined8 *puVar10;
  long *plVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 uVar15;
  undefined8 uVar16;
  long lVar17;
  undefined1 auStack_8 [8];
  undefined8 *puVar11;
  
  if (param_1 != param_2) {
    uVar2 = *(uint *)(param_2 + 0xc0);
    if ((int)uVar2 < 9) {
      puVar13 = (undefined8 *)(param_1 + 0x40);
    }
    else {
      puVar13 = operator_new__(-(ulong)(uVar2 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar2 << 4);
      iVar3 = *(int *)(param_2 + 0xc0);
      lVar17 = 0;
      puVar10 = puVar13;
      if ((long)iVar3 != 0) {
        do {
          lVar17 = lVar17 + 1;
          *puVar10 = 0;
          puVar10[1] = 0;
          puVar10 = puVar10 + 2;
        } while (iVar3 != lVar17);
      }
    }
    lVar17 = *(long *)(param_2 + 0x28);
    if (lVar17 != 0) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar17 + 0x14) = *(int *)(lVar17 + 0x14) + 1;
      }
      else {
        piVar1 = (int *)(lVar17 + 0x14);
        do {
          cVar5 = '\x01';
          bVar6 = (bool)ExclusiveMonitorPass(piVar1,0x10);
          if (bVar6) {
            *piVar1 = *piVar1 + 1;
            cVar5 = ExclusiveMonitorsStatus();
          }
        } while (cVar5 != '\0');
      }
    }
    FUN_003d3730(param_1,0);
    pvVar8 = *(void **)(param_1 + 200);
    if ((void *)(param_1 + 0x40) != pvVar8) {
      if (pvVar8 != (void *)0x0) {
        operator_delete__(pvVar8);
      }
      *(undefined8 *)(param_1 + 200) = 0;
    }
    FUN_003d3798(param_1);
    iVar3 = *(int *)(param_2 + 0xc0);
    *(long *)(param_1 + 0x28) = lVar17;
    if (0 < iVar3) {
      puVar9 = *(undefined8 **)(param_2 + 200);
      puVar10 = puVar9;
      puVar14 = puVar13;
      do {
        puVar11 = puVar10 + 2;
        uVar15 = puVar10[1];
        *puVar14 = *puVar10;
        puVar14[1] = uVar15;
        puVar10 = puVar11;
        puVar14 = puVar14 + 2;
      } while (puVar11 != puVar9 + ((ulong)(iVar3 - 1) + 1) * 2);
    }
    uVar7 = *(undefined4 *)(param_2 + 0x18);
    *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
    uVar15 = *(undefined8 *)(param_2 + 0xd8);
    uVar16 = *(undefined8 *)(param_2 + 8);
    cVar5 = *(char *)(param_2 + 0xe4);
    *(undefined8 **)(param_1 + 200) = puVar13;
    *(int *)(param_1 + 0xc0) = iVar3;
    *(undefined4 *)(param_1 + 0x18) = uVar7;
    *(undefined8 *)(param_1 + 8) = uVar16;
    *(undefined8 *)(param_1 + 0xd8) = uVar15;
    if (cVar5 == '\0') {
      plVar12 = *(long **)(param_2 + 0xf0);
      if (plVar12 == (long *)0x0) goto LAB_003d346c;
      uVar7 = (**(code **)(*plVar12 + 0x50))(plVar12,0x20);
      *(undefined4 *)(param_2 + 0xe0) = uVar7;
      *(undefined1 *)(param_2 + 0xe4) = 1;
    }
    else {
      uVar7 = *(undefined4 *)(param_2 + 0xe0);
    }
    if (*(char *)(param_1 + 0xe4) == '\0') {
      plVar12 = *(long **)(param_1 + 0xf0);
      if (plVar12 == (long *)0x0) {
LAB_003d346c:
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      (**(code **)(*plVar12 + 0x50))(plVar12,0x20);
      *(undefined1 *)(param_1 + 0xe4) = 1;
    }
    *(undefined4 *)(param_1 + 0xe0) = uVar7;
    FUN_003ece1c(auStack_8,param_2 + 0xd0);
    FUN_003ed668(param_1 + 0xd0,auStack_8);
    FUN_003ed708(auStack_8);
    FUN_003d30dc(param_1,param_1 + 0xd0);
    FUN_003d3730(param_1,2);
    uVar2 = *(uint *)(param_2 + 0x1c);
    *(uint *)(param_1 + 0x1c) = uVar2;
    uVar4 = *(uint *)(param_1 + 0x20);
    if (*(long *)(param_1 + 0xe8) == 0) {
      uVar4 = uVar4 | 1;
      *(uint *)(param_1 + 0x20) = uVar4;
    }
    if ((uVar4 & uVar2) != 0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_ios::clear");
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d347c (136 bytes) name=FUN_003d347c

void FUN_003d347c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7ba0;
  param_1[1] = 0;
  param_1[2] = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((long)param_1 + 0x1c) = 0;
  *(undefined4 *)(param_1 + 4) = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  *(undefined4 *)(param_1 + 0x18) = 8;
  param_1[0x19] = param_1 + 8;
  FUN_003ef168(param_1 + 0x1a);
  return;
}


==================================================================

### FUNC 003d3504 (64 bytes) name=FUN_003d3504

int FUN_003d3504(void)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar1 = DAT_00546184 + 4;
    DAT_00546184 = DAT_00546184 + 1;
    return iVar1;
  }
  do {
    iVar1 = DAT_00546184;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(0x546184,0x10);
    if (bVar3) {
      cVar2 = ExclusiveMonitorsStatus();
      DAT_00546184 = DAT_00546184 + 1;
    }
  } while (cVar2 != '\0');
  return iVar1 + 4;
}


==================================================================

### FUNC 003d3544 (76 bytes) name=FUN_003d3544

void FUN_003d3544(long param_1,undefined8 param_2,undefined4 param_3)

{
  undefined8 *puVar1;
  
  puVar1 = operator_new(0x18);
  *puVar1 = *(undefined8 *)(param_1 + 0x28);
  puVar1[1] = param_2;
  *(undefined4 *)(puVar1 + 2) = param_3;
  *(undefined4 *)((long)puVar1 + 0x14) = 0;
  *(undefined8 **)(param_1 + 0x28) = puVar1;
  return;
}


==================================================================

### FUNC 003d3590 (312 bytes) name=FUN_003d3590

undefined8 * FUN_003d3590(long param_1,int param_2,char param_3)

{
  undefined8 uVar1;
  int iVar2;
  uint uVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  undefined8 *puVar6;
  undefined8 *puVar8;
  long lVar9;
  int iVar10;
  undefined8 *puVar7;
  
  if (param_2 < 8) {
    iVar10 = 8;
    puVar4 = (undefined8 *)(param_1 + 0x40);
  }
  else {
    if (param_2 == 0x7fffffff) {
      uVar3 = *(uint *)(param_1 + 0x20) | 1;
      *(uint *)(param_1 + 0x20) = uVar3;
      if ((uVar3 & *(uint *)(param_1 + 0x1c)) != 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f928("ios_base::_M_grow_words is not valid");
      }
      if (param_3 == '\0') {
        *(undefined8 *)(param_1 + 0x30) = 0;
      }
      else {
        *(undefined8 *)(param_1 + 0x38) = 0;
      }
      return (undefined8 *)(param_1 + 0x30);
    }
    iVar10 = param_2 + 1;
    lVar9 = (long)iVar10;
    puVar4 = operator_new__(lVar9 << 4);
    puVar5 = puVar4;
    do {
      *puVar5 = 0;
      lVar9 = lVar9 + -1;
      puVar5[1] = 0;
      puVar5 = puVar5 + 2;
    } while (lVar9 != 0);
    iVar2 = *(int *)(param_1 + 0xc0);
    if (iVar2 < 1) {
      puVar5 = *(undefined8 **)(param_1 + 200);
    }
    else {
      puVar5 = *(undefined8 **)(param_1 + 200);
      puVar6 = puVar5;
      puVar8 = puVar4;
      do {
        puVar7 = puVar6 + 2;
        uVar1 = puVar6[1];
        *puVar8 = *puVar6;
        puVar8[1] = uVar1;
        puVar6 = puVar7;
        puVar8 = puVar8 + 2;
      } while (puVar7 != puVar5 + ((ulong)(iVar2 - 1) + 1) * 2);
    }
    if ((puVar5 != (undefined8 *)0x0) && ((undefined8 *)(param_1 + 0x40) != puVar5)) {
      operator_delete__(puVar5);
    }
  }
  *(undefined8 **)(param_1 + 200) = puVar4;
  *(int *)(param_1 + 0xc0) = iVar10;
  return puVar4 + (long)param_2 * 2;
}


==================================================================

### FUNC 003d3730 (76 bytes) name=FUN_003d3730

void FUN_003d3730(long param_1,undefined4 param_2)

{
  long *plVar1;
  
  for (plVar1 = *(long **)(param_1 + 0x28); plVar1 != (long *)0x0; plVar1 = (long *)*plVar1) {
    (*(code *)plVar1[1])(param_2,param_1,*(undefined4 *)(plVar1 + 2));
  }
  return;
}


==================================================================

### FUNC 003d3798 (132 bytes) name=FUN_003d3798

void FUN_003d3798(long param_1)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  undefined8 *puVar4;
  undefined8 *puVar5;
  int iVar6;
  
  puVar4 = *(undefined8 **)(param_1 + 0x28);
  if (puVar4 != (undefined8 *)0x0) {
    piVar3 = (int *)((long)puVar4 + 0x14);
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003d380c;
    do {
      do {
        iVar6 = *piVar3;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = iVar6 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
        puVar5 = puVar4;
      } while (cVar1 != '\0');
      while( true ) {
        if (iVar6 != 0) goto LAB_003d37dc;
        puVar4 = (undefined8 *)*puVar5;
        operator_delete(puVar5);
        if (puVar4 == (undefined8 *)0x0) goto LAB_003d37dc;
        piVar3 = (int *)((long)puVar4 + 0x14);
        if (PTR_pthread_create_00501cc8 != (undefined *)0x0) break;
LAB_003d380c:
        iVar6 = *(int *)((long)puVar4 + 0x14);
        *(int *)((long)puVar4 + 0x14) = iVar6 + -1;
        puVar5 = puVar4;
      }
    } while( true );
  }
LAB_003d37dc:
  *(undefined8 *)(param_1 + 0x28) = 0;
  return;
}


==================================================================

### FUNC 003d381c (88 bytes) name=FUN_003d381c

void FUN_003d381c(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  *param_1 = &PTR_FUN_004f7ba0;
  FUN_003d3730(param_1,0);
  FUN_003d3798(param_1);
  puVar1 = (undefined8 *)param_1[0x19];
  if (puVar1 != param_1 + 8) {
    if (puVar1 != (undefined8 *)0x0) {
      operator_delete__(puVar1);
    }
    param_1[0x19] = 0;
  }
  FUN_003ed708(param_1 + 0x1a);
  return;
}


==================================================================

### FUNC 003d3874 (96 bytes) name=FUN_003d3874

void FUN_003d3874(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  *param_1 = &PTR_FUN_004f7ba0;
  FUN_003d3730(param_1,0);
  FUN_003d3798(param_1);
  puVar1 = (undefined8 *)param_1[0x19];
  if (puVar1 != param_1 + 8) {
    if (puVar1 != (undefined8 *)0x0) {
      operator_delete__(puVar1);
    }
    param_1[0x19] = 0;
  }
  FUN_003ed708(param_1 + 0x1a);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d38d4 (1424 bytes) name=FUN_003d38d4

void FUN_003d38d4(void)

{
  undefined *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  uint uVar5;
  char cVar6;
  bool bVar7;
  undefined *puVar8;
  undefined *puVar9;
  undefined *puVar10;
  int iVar11;
  
  puVar4 = PTR_DAT_005018c0;
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar11 = *(int *)PTR_DAT_005018c0;
    *(int *)PTR_DAT_005018c0 = iVar11 + 1;
  }
  else {
    do {
      iVar11 = *(int *)puVar4;
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(puVar4,0x10);
      if (bVar7) {
        *(int *)puVar4 = iVar11 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
  }
  puVar3 = PTR_DAT_00501f48;
  puVar4 = PTR_DAT_00501ba0;
  if (iVar11 != 0) {
    return;
  }
  puVar1 = PTR_DAT_00501ba0 + 0x38;
  puVar2 = PTR_DAT_00501bb0 + 0x10;
  *(undefined8 *)(PTR_DAT_00501ba0 + 8) = 0;
  *(undefined **)puVar4 = puVar2;
  *(undefined8 *)(puVar4 + 0x10) = 0;
  *(undefined8 *)(puVar4 + 0x18) = 0;
  *(undefined8 *)(puVar4 + 0x20) = 0;
  *(undefined8 *)(puVar4 + 0x28) = 0;
  *(undefined8 *)(puVar4 + 0x30) = 0;
  *puVar3 = 1;
  FUN_003ef168(puVar1);
  puVar9 = PTR___sF_00501a80;
  puVar8 = PTR_DAT_005018b8;
  puVar3 = PTR_DAT_005018b8 + 0x38;
  *(undefined4 *)(puVar4 + 0x48) = 0xffffffff;
  puVar1 = PTR_DAT_00501d30;
  *(undefined **)puVar8 = puVar2;
  *(undefined8 *)(puVar8 + 8) = 0;
  puVar1 = puVar1 + 0x10;
  *(undefined8 *)(puVar8 + 0x10) = 0;
  *(undefined8 *)(puVar8 + 0x18) = 0;
  *(undefined8 *)(puVar8 + 0x20) = 0;
  *(undefined8 *)(puVar8 + 0x28) = 0;
  *(undefined8 *)(puVar8 + 0x30) = 0;
  *(undefined **)(puVar4 + 0x40) = puVar9 + 0x98;
  *(undefined **)puVar4 = puVar1;
  FUN_003ef168(puVar3);
  puVar10 = PTR_DAT_00501e70;
  puVar3 = PTR_DAT_00501e70 + 0x38;
  *(undefined **)PTR_DAT_00501e70 = puVar2;
  *(undefined8 *)(puVar10 + 8) = 0;
  *(undefined8 *)(puVar10 + 0x10) = 0;
  *(undefined8 *)(puVar10 + 0x18) = 0;
  *(undefined8 *)(puVar10 + 0x20) = 0;
  *(undefined8 *)(puVar10 + 0x28) = 0;
  *(undefined8 *)(puVar10 + 0x30) = 0;
  *(undefined **)puVar8 = puVar1;
  *(undefined **)(puVar8 + 0x40) = puVar9;
  *(undefined4 *)(puVar8 + 0x48) = 0xffffffff;
  FUN_003ef168(puVar3);
  puVar2 = PTR_DAT_00501a38;
  *(undefined **)(puVar10 + 0x40) = puVar9 + 0x130;
  *(undefined **)puVar10 = puVar1;
  *(undefined4 *)(puVar10 + 0x48) = 0xffffffff;
  FUN_003d347c(puVar2 + 8);
  puVar1 = PTR_DAT_00501e90;
  puVar3 = PTR_DAT_00501e90 + 0x18;
  *(undefined8 *)(puVar2 + 0xe0) = 0;
  puVar2[0xe8] = 0;
  puVar2[0xe9] = 0;
  *(undefined8 *)(puVar2 + 0xf0) = 0;
  *(undefined8 *)(puVar2 + 0xf8) = 0;
  *(undefined8 *)(puVar2 + 0x100) = 0;
  *(undefined8 *)(puVar2 + 0x108) = 0;
  *(undefined **)(puVar2 + 8) = puVar1 + 0x40;
  *(undefined **)puVar2 = puVar3;
  FUN_003d2728(puVar2 + 8,puVar4);
  puVar1 = PTR_DAT_00501e20;
  puVar4 = PTR_DAT_00501e20 + 0x10;
  FUN_003d347c(puVar4);
  puVar3 = PTR_DAT_005018b8;
  *(undefined8 *)(puVar1 + 0xe8) = 0;
  puVar2 = PTR_DAT_00501e38;
  puVar1[0xf0] = 0;
  puVar1[0xf1] = 0;
  *(undefined8 *)(puVar1 + 0xf8) = 0;
  *(undefined8 *)(puVar1 + 0x100) = 0;
  *(undefined8 *)(puVar1 + 0x108) = 0;
  *(undefined8 *)(puVar1 + 0x110) = 0;
  *(undefined **)(puVar1 + 0x10) = puVar2 + 0x40;
  *(undefined **)puVar1 = puVar2 + 0x18;
  *(undefined8 *)(puVar1 + 8) = 0;
  FUN_003d2728(puVar4,puVar3);
  puVar1 = PTR_DAT_00501c50;
  puVar4 = PTR_DAT_00501c50 + 8;
  FUN_003d347c(puVar4);
  puVar8 = PTR_DAT_00501e90;
  puVar2 = PTR_DAT_00501e70;
  puVar3 = PTR_DAT_00501e90 + 0x18;
  *(undefined8 *)(puVar1 + 0xe0) = 0;
  puVar1[0xe8] = 0;
  puVar1[0xe9] = 0;
  *(undefined8 *)(puVar1 + 0xf0) = 0;
  *(undefined8 *)(puVar1 + 0xf8) = 0;
  *(undefined8 *)(puVar1 + 0x100) = 0;
  *(undefined8 *)(puVar1 + 0x108) = 0;
  *(undefined **)(puVar1 + 8) = puVar8 + 0x40;
  *(undefined **)puVar1 = puVar3;
  FUN_003d2728(puVar4,puVar2);
  puVar1 = PTR_DAT_00501d50;
  puVar4 = PTR_DAT_00501d50 + 8;
  FUN_003d347c(puVar4);
  puVar8 = PTR_DAT_00501e90;
  puVar2 = PTR_DAT_00501e70;
  puVar3 = PTR_DAT_00501e90 + 0x18;
  *(undefined8 *)(puVar1 + 0xe0) = 0;
  puVar1[0xe8] = 0;
  puVar1[0xe9] = 0;
  *(undefined8 *)(puVar1 + 0xf0) = 0;
  *(undefined8 *)(puVar1 + 0xf8) = 0;
  *(undefined8 *)(puVar1 + 0x100) = 0;
  *(undefined8 *)(puVar1 + 0x108) = 0;
  *(undefined **)(puVar1 + 8) = puVar8 + 0x40;
  *(undefined **)puVar1 = puVar3;
  FUN_003d2728(puVar4,puVar2);
  puVar1 = PTR_DAT_00501c50;
  puVar2 = PTR_DAT_00501a68;
  puVar3 = PTR_DAT_00501a38;
  uVar5 = *(uint *)(PTR_DAT_00501c50 + 0x20);
  puVar4 = PTR_DAT_00501c78 + 0x10;
  *(undefined **)(PTR_DAT_00501e20 + 0xe8) = PTR_DAT_00501a38;
  *(uint *)(puVar1 + 0x20) = uVar5 | 0x2000;
  *(undefined **)(puVar1 + 0xe0) = puVar3;
  *(undefined **)puVar2 = puVar4;
  *(undefined8 *)(puVar2 + 8) = 0;
  *(undefined8 *)(puVar2 + 0x10) = 0;
  *(undefined8 *)(puVar2 + 0x18) = 0;
  *(undefined8 *)(puVar2 + 0x20) = 0;
  *(undefined8 *)(puVar2 + 0x28) = 0;
  *(undefined8 *)(puVar2 + 0x30) = 0;
  FUN_003ef168(puVar2 + 0x38);
  puVar10 = PTR_DAT_00501b10;
  puVar8 = PTR___sF_00501a80;
  puVar3 = PTR_DAT_00501b10 + 0x38;
  *(undefined4 *)(puVar2 + 0x48) = 0xffffffff;
  puVar1 = PTR_DAT_00501ac8;
  *(undefined **)puVar10 = puVar4;
  *(undefined8 *)(puVar10 + 8) = 0;
  puVar1 = puVar1 + 0x10;
  *(undefined8 *)(puVar10 + 0x10) = 0;
  *(undefined8 *)(puVar10 + 0x18) = 0;
  *(undefined8 *)(puVar10 + 0x20) = 0;
  *(undefined8 *)(puVar10 + 0x28) = 0;
  *(undefined8 *)(puVar10 + 0x30) = 0;
  *(undefined **)(puVar2 + 0x40) = puVar8 + 0x98;
  *(undefined **)puVar2 = puVar1;
  FUN_003ef168(puVar3);
  puVar9 = PTR_DAT_00501ad8;
  puVar3 = PTR_DAT_00501ad8 + 0x38;
  *(undefined **)PTR_DAT_00501ad8 = puVar4;
  *(undefined8 *)(puVar9 + 8) = 0;
  *(undefined8 *)(puVar9 + 0x10) = 0;
  *(undefined8 *)(puVar9 + 0x18) = 0;
  *(undefined8 *)(puVar9 + 0x20) = 0;
  *(undefined8 *)(puVar9 + 0x28) = 0;
  *(undefined8 *)(puVar9 + 0x30) = 0;
  *(undefined **)puVar10 = puVar1;
  *(undefined **)(puVar10 + 0x40) = puVar8;
  *(undefined4 *)(puVar10 + 0x48) = 0xffffffff;
  FUN_003ef168(puVar3);
  puVar10 = PTR_DAT_00501de8;
  *(undefined **)(puVar9 + 0x40) = puVar8 + 0x130;
  *(undefined **)puVar9 = puVar1;
  *(undefined4 *)(puVar9 + 0x48) = 0xffffffff;
  FUN_003d347c(puVar10 + 8);
  puVar3 = PTR_DAT_00501b90;
  puVar4 = PTR_DAT_00501b90 + 0x18;
  *(undefined8 *)(puVar10 + 0xe0) = 0;
  *(undefined4 *)(puVar10 + 0xe8) = 0;
  puVar10[0xec] = 0;
  *(undefined8 *)(puVar10 + 0xf0) = 0;
  *(undefined8 *)(puVar10 + 0xf8) = 0;
  *(undefined8 *)(puVar10 + 0x100) = 0;
  *(undefined8 *)(puVar10 + 0x108) = 0;
  *(undefined **)(puVar10 + 8) = puVar3 + 0x40;
  *(undefined **)puVar10 = puVar4;
  FUN_003d3008(puVar10 + 8,puVar2);
  puVar2 = PTR_DAT_00501fc0;
  puVar4 = PTR_DAT_00501fc0 + 0x10;
  FUN_003d347c(puVar4);
  puVar1 = PTR_DAT_00501b10;
  *(undefined8 *)(puVar2 + 0xe8) = 0;
  puVar3 = PTR_DAT_005019c0;
  *(undefined4 *)(puVar2 + 0xf0) = 0;
  puVar2[0xf4] = 0;
  *(undefined8 *)(puVar2 + 0xf8) = 0;
  *(undefined8 *)(puVar2 + 0x100) = 0;
  *(undefined8 *)(puVar2 + 0x108) = 0;
  *(undefined8 *)(puVar2 + 0x110) = 0;
  *(undefined **)(puVar2 + 0x10) = puVar3 + 0x40;
  *(undefined **)puVar2 = puVar3 + 0x18;
  *(undefined8 *)(puVar2 + 8) = 0;
  FUN_003d3008(puVar4,puVar1);
  puVar8 = PTR_DAT_00501ee0;
  puVar4 = PTR_DAT_00501ee0 + 8;
  FUN_003d347c(puVar4);
  puVar2 = PTR_DAT_00501b90;
  puVar1 = PTR_DAT_00501ad8;
  puVar3 = PTR_DAT_00501b90 + 0x18;
  *(undefined8 *)(puVar8 + 0xe0) = 0;
  *(undefined4 *)(puVar8 + 0xe8) = 0;
  puVar8[0xec] = 0;
  *(undefined8 *)(puVar8 + 0xf0) = 0;
  *(undefined8 *)(puVar8 + 0xf8) = 0;
  *(undefined8 *)(puVar8 + 0x100) = 0;
  *(undefined8 *)(puVar8 + 0x108) = 0;
  *(undefined **)(puVar8 + 8) = puVar2 + 0x40;
  *(undefined **)puVar8 = puVar3;
  FUN_003d3008(puVar4,puVar1);
  puVar8 = PTR_DAT_00501d08;
  puVar4 = PTR_DAT_00501d08 + 8;
  FUN_003d347c(puVar4);
  puVar2 = PTR_DAT_00501b90;
  puVar1 = PTR_DAT_00501ad8;
  puVar3 = PTR_DAT_00501b90 + 0x18;
  *(undefined8 *)(puVar8 + 0xe0) = 0;
  *(undefined4 *)(puVar8 + 0xe8) = 0;
  puVar8[0xec] = 0;
  *(undefined8 *)(puVar8 + 0xf0) = 0;
  *(undefined8 *)(puVar8 + 0xf8) = 0;
  *(undefined8 *)(puVar8 + 0x100) = 0;
  *(undefined8 *)(puVar8 + 0x108) = 0;
  *(undefined **)(puVar8 + 8) = puVar2 + 0x40;
  *(undefined **)puVar8 = puVar3;
  FUN_003d3008(puVar4,puVar1);
  puVar1 = PTR_DAT_00501ee0;
  puVar4 = PTR_DAT_00501de8;
  puVar3 = PTR_pthread_create_00501cc8;
  uVar5 = *(uint *)(PTR_DAT_00501ee0 + 0x20);
  *(undefined **)(PTR_DAT_00501fc0 + 0xe8) = PTR_DAT_00501de8;
  *(undefined **)(puVar1 + 0xe0) = puVar4;
  *(uint *)(puVar1 + 0x20) = uVar5 | 0x2000;
  puVar4 = PTR_DAT_005018c0;
  if (puVar3 != (undefined *)0x0) {
    do {
      cVar6 = '\x01';
      bVar7 = (bool)ExclusiveMonitorPass(puVar4,0x10);
      if (bVar7) {
        *(int *)puVar4 = *(int *)puVar4 + 1;
        cVar6 = ExclusiveMonitorsStatus();
      }
    } while (cVar6 != '\0');
    return;
  }
  *(int *)PTR_DAT_005018c0 = *(int *)PTR_DAT_005018c0 + 1;
  return;
}


==================================================================

### FUNC 003d3fac (160 bytes) name=FUN_003d3fac

void FUN_003d3fac(void)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  undefined *puVar4;
  
  puVar4 = PTR_DAT_005018c0;
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar1 = *(int *)PTR_DAT_005018c0;
    *(int *)PTR_DAT_005018c0 = iVar1 + -1;
  }
  else {
    do {
      iVar1 = *(int *)puVar4;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(puVar4,0x10);
      if (bVar3) {
        *(int *)puVar4 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (iVar1 == 2) {
    FUN_003f0db8(PTR_DAT_00501a38);
    FUN_003f0db8(PTR_DAT_00501c50);
    FUN_003f0db8(PTR_DAT_00501d50);
    FUN_003f34dc(PTR_DAT_00501de8);
    FUN_003f34dc(PTR_DAT_00501ee0);
    FUN_003f34dc(PTR_DAT_00501d08);
    return;
  }
  return;
}


==================================================================

### FUNC 003d4058 (560 bytes) name=FUN_003d4058

byte FUN_003d4058(byte param_1)

{
  undefined *puVar1;
  byte bVar2;
  undefined *puVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = PTR_DAT_00501f48;
  bVar2 = *PTR_DAT_00501f48;
  if (bVar2 <= param_1) {
    return bVar2;
  }
  FUN_003d38d4(auStack_8);
  *puVar1 = param_1;
  puVar1 = PTR_DAT_00501bb0 + 0x10;
  puVar3 = PTR_DAT_00501ba0 + 0x38;
  *(undefined **)PTR_DAT_00501ba0 = puVar1;
  FUN_003ed708(puVar3);
  puVar3 = PTR_DAT_005018b8 + 0x38;
  *(undefined **)PTR_DAT_005018b8 = puVar1;
  FUN_003ed708(puVar3);
  puVar3 = PTR_DAT_00501e70 + 0x38;
  *(undefined **)PTR_DAT_00501e70 = puVar1;
  FUN_003ed708(puVar3);
  puVar1 = PTR_DAT_00501c78 + 0x10;
  puVar3 = PTR_DAT_00501a68 + 0x38;
  *(undefined **)PTR_DAT_00501a68 = puVar1;
  FUN_003ed708(puVar3);
  puVar3 = PTR_DAT_00501b10 + 0x38;
  *(undefined **)PTR_DAT_00501b10 = puVar1;
  FUN_003ed708(puVar3);
  puVar3 = PTR_DAT_00501ad8 + 0x38;
  *(undefined **)PTR_DAT_00501ad8 = puVar1;
  FUN_003ed708(puVar3);
  FUN_0041b10c(PTR_DAT_00501918,PTR___sF_00501a80 + 0x98,0x10,0x400);
  FUN_0041b10c(PTR_DAT_00501b48,PTR___sF_00501a80,8,0x400);
  FUN_0041b10c(PTR_DAT_00501a28,PTR___sF_00501a80 + 0x130,0x10,0x400);
  FUN_003d24bc(PTR_DAT_00501a38 + 8,PTR_DAT_00501918);
  FUN_003d24bc(PTR_DAT_00501e20 + 0x10,PTR_DAT_00501b48);
  FUN_003d24bc(PTR_DAT_00501c50 + 8,PTR_DAT_00501a28);
  FUN_003d24bc(PTR_DAT_00501d50 + 8,PTR_DAT_00501a28);
  FUN_0041b360(PTR_DAT_00501b30,PTR___sF_00501a80 + 0x98,0x10,0x400);
  FUN_0041b360(PTR_DAT_00501d18,PTR___sF_00501a80,8,0x400);
  FUN_0041b360(PTR_DAT_00501fb0,PTR___sF_00501a80 + 0x130,0x10,0x400);
  FUN_003d2e68(PTR_DAT_00501de8 + 8,PTR_DAT_00501b30);
  FUN_003d2e68(PTR_DAT_00501fc0 + 0x10,PTR_DAT_00501d18);
  FUN_003d2e68(PTR_DAT_00501ee0 + 8,PTR_DAT_00501fb0);
  FUN_003d2e68(PTR_DAT_00501d08 + 8,PTR_DAT_00501fb0);
  FUN_003d3fac(auStack_8);
  return bVar2;
}


==================================================================

### FUNC 003d429c (80 bytes) name=FUN_003d429c

void FUN_003d429c(long param_1)

{
  undefined1 auStack_8 [8];
  
  *(undefined8 *)(param_1 + 8) = 6;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined4 *)(param_1 + 0x18) = 0x1002;
  FUN_003ef168(auStack_8);
  FUN_003ed668(param_1 + 0xd0,auStack_8);
  FUN_003ed708(auStack_8);
  return;
}


==================================================================

### FUNC 003d42ec (92 bytes) name=FUN_003d42ec

undefined8 FUN_003d42ec(undefined8 param_1,long param_2,undefined8 param_3)

{
  FUN_003ece1c(param_1,param_2 + 0xd0);
  FUN_003ed668(param_2 + 0xd0,param_3);
  FUN_003d3730(param_2,1);
  return param_1;
}


==================================================================

### FUNC 003d4348 (44 bytes) name=FUN_003d4348

void FUN_003d4348(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7bd8;
  param_1[1] = 0;
  param_1[2] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 2);
  return;
}


==================================================================

### FUNC 003d4374 (16 bytes) name=FUN_003d4374

void FUN_003d4374(long *param_1)

{
  FUN_003d4348((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003d4384 (72 bytes) name=FUN_003d4384

void FUN_003d4384(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7bd8;
  param_1[1] = 0;
  param_1[2] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 2);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d43cc (16 bytes) name=FUN_003d43cc

void FUN_003d43cc(long *param_1)

{
  FUN_003d4384((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003d43dc (44 bytes) name=FUN_003d43dc

void FUN_003d43dc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7c38;
  param_1[1] = 0;
  param_1[2] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 2);
  return;
}


==================================================================

### FUNC 003d4408 (16 bytes) name=FUN_003d4408

void FUN_003d4408(long *param_1)

{
  FUN_003d43dc((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003d4418 (72 bytes) name=FUN_003d4418

void FUN_003d4418(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7c38;
  param_1[1] = 0;
  param_1[2] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 2);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003d4460 (16 bytes) name=FUN_003d4460

void FUN_003d4460(long *param_1)

{
  FUN_003d4418((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003d4470 (44 bytes) name=FUN_003d4470

void FUN_003d4470(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),param_3);
  return;
}


==================================================================

### FUNC 003d449c (120 bytes) name=FUN_003d449c

void FUN_003d449c(undefined8 *param_1,undefined8 param_2)

{
  FUN_003d347c(param_1 + 2);
  param_1[0x1d] = 0;
  *(undefined1 *)(param_1 + 0x1e) = 0;
  *(undefined1 *)((long)param_1 + 0xf1) = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  *param_1 = &PTR_FUN_004f7bd8;
  param_1[1] = 0;
  param_1[2] = &PTR_FUN_004f7c00;
  FUN_003d2728(param_1 + 2,param_2);
  return;
}


==================================================================

### FUNC 003d4538 (24 bytes) name=FUN_003d4538

void FUN_003d4538(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  return;
}


==================================================================

### FUNC 003d4550 (20 bytes) name=FUN_003d4550

void FUN_003d4550(undefined8 param_1,code *param_2)

{
  (*param_2)();
  return;
}


==================================================================

### FUNC 003d4564 (48 bytes) name=FUN_003d4564

long * FUN_003d4564(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003d4594 (48 bytes) name=FUN_003d4594

long * FUN_003d4594(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003d45c4 (8 bytes) name=FUN_003d45c4

undefined8 FUN_003d45c4(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 003d45cc (148 bytes) name=FUN_003d45cc

void FUN_003d45cc(long *param_1,undefined8 param_2,undefined8 param_3)

{
  undefined1 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  if ((char)plVar2[7] != '\0') {
    FUN_003da498(param_1,param_2,param_3,*(undefined1 *)((long)plVar2 + 0x43));
    return;
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,10);
  FUN_003da498(param_1,param_2,param_3,uVar1);
  return;
}


==================================================================

### FUNC 003d4660 (44 bytes) name=FUN_003d4660

void FUN_003d4660(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  return;
}


==================================================================

### FUNC 003d468c (116 bytes) name=FUN_003d468c

void FUN_003d468c(undefined8 *param_1)

{
  FUN_003d347c(param_1 + 2);
  param_1[0x1d] = 0;
  *(undefined1 *)(param_1 + 0x1e) = 0;
  *(undefined1 *)((long)param_1 + 0xf1) = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  *param_1 = &PTR_FUN_004f7bd8;
  param_1[1] = 0;
  param_1[2] = &PTR_FUN_004f7c00;
  FUN_003d2728(param_1 + 2,0);
  return;
}


==================================================================

### FUNC 003d4724 (412 bytes) name=FUN_003d4724

void FUN_003d4724(undefined1 *param_1,long *param_2,char param_3)

{
  int iVar1;
  uint uVar2;
  ulong uVar3;
  byte *pbVar4;
  uint uVar5;
  byte *pbVar6;
  long lVar7;
  long *plVar8;
  long lVar9;
  
  lVar7 = *(long *)(*param_2 + -0x18);
  *param_1 = 0;
  lVar7 = (long)param_2 + lVar7;
  uVar2 = *(uint *)(lVar7 + 0x20);
  if (uVar2 == 0) {
    if (*(long *)(lVar7 + 0xd8) == 0) {
      if (param_3 != '\0') goto LAB_003d477c;
LAB_003d47b8:
      if ((*(uint *)(lVar7 + 0x18) >> 0xc & 1) != 0) {
        plVar8 = *(long **)(lVar7 + 0xe8);
        if ((byte *)plVar8[2] < (byte *)plVar8[3]) {
          lVar9 = *(long *)(lVar7 + 0xf0);
          uVar3 = (ulong)*(byte *)plVar8[2];
          if (lVar9 == 0) {
LAB_003d48bc:
                    /* WARNING: Subroutine does not return */
            FUN_0040f118();
          }
        }
        else {
          uVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
          lVar7 = (long)param_2 + *(long *)(*param_2 + -0x18);
          lVar9 = *(long *)(lVar7 + 0xf0);
          if (lVar9 == 0) goto LAB_003d48bc;
          if ((int)uVar3 == -1) {
LAB_003d4858:
            uVar2 = *(uint *)(lVar7 + 0x20);
            uVar5 = 2;
            goto LAB_003d4798;
          }
        }
        if ((*(byte *)(*(long *)(lVar9 + 0x30) + (uVar3 & 0xff)) >> 3 & 1) != 0) {
          do {
            pbVar4 = (byte *)plVar8[3];
            if (pbVar4 <= (byte *)plVar8[2]) {
              iVar1 = (**(code **)(*plVar8 + 0x50))(plVar8);
              if (iVar1 != -1) {
                pbVar6 = (byte *)plVar8[2];
                pbVar4 = (byte *)plVar8[3];
                goto LAB_003d4808;
              }
LAB_003d484c:
              lVar7 = (long)param_2 + *(long *)(*param_2 + -0x18);
              goto LAB_003d4858;
            }
            pbVar6 = (byte *)plVar8[2] + 1;
            plVar8[2] = (long)pbVar6;
LAB_003d4808:
            if (pbVar6 < pbVar4) {
              uVar2 = (uint)*pbVar6;
            }
            else {
              uVar2 = (**(code **)(*plVar8 + 0x48))(plVar8);
              if (uVar2 == 0xffffffff) goto LAB_003d484c;
            }
          } while ((*(byte *)(*(long *)(lVar9 + 0x30) + (ulong)(byte)uVar2) >> 3 & 1) != 0);
          lVar7 = (long)param_2 + *(long *)(*param_2 + -0x18);
        }
      }
    }
    else {
      FUN_003f0db8();
      lVar7 = (long)param_2 + *(long *)(*param_2 + -0x18);
      if (param_3 == '\0') goto LAB_003d47b8;
    }
    uVar2 = *(uint *)(lVar7 + 0x20);
    if (uVar2 == 0) {
LAB_003d477c:
      *param_1 = 1;
      return;
    }
  }
  uVar5 = 0;
LAB_003d4798:
  FUN_003d2254(lVar7,uVar5 | 4 | uVar2);
  return;
}


==================================================================

### FUNC 003d48c0 (252 bytes) name=FUN_003d48c0

long * FUN_003d48c0(long *param_1,undefined2 *param_2)

{
  long lVar1;
  long *plVar2;
  char local_10 [4];
  uint local_c;
  long local_8;
  
  FUN_003d4724(local_10,param_1,0);
  if (local_10[0] != '\0') {
    local_c = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_c,&local_8)
    ;
    if (local_8 < -0x8000) {
      *param_2 = 0x8000;
    }
    else {
      if (local_8 < 0x8000) {
        *param_2 = (short)local_8;
        if (local_c == 0) {
          return param_1;
        }
        goto LAB_003d497c;
      }
      *param_2 = 0x7fff;
    }
    local_c = local_c | 4;
    if (local_c != 0) {
LAB_003d497c:
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_c | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d4a48 (228 bytes) name=FUN_003d4a48

long * FUN_003d4a48(long *param_1,undefined4 *param_2)

{
  long lVar1;
  long *plVar2;
  undefined4 uVar3;
  char local_10 [4];
  uint local_c;
  long local_8;
  
  FUN_003d4724(local_10,param_1,0);
  if (local_10[0] != '\0') {
    local_c = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_c,&local_8)
    ;
    uVar3 = 0x80000000;
    if ((local_8 < -0x80000000) || (uVar3 = 0x7fffffff, 0x7fffffff < local_8)) {
      *param_2 = uVar3;
      local_c = local_c | 4;
    }
    else {
      *param_2 = (int)local_8;
    }
    if (local_c != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_c | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d4bb8 (188 bytes) name=FUN_003d4bb8

long * FUN_003d4bb8(long *param_1,long param_2)

{
  uint uVar1;
  long lVar2;
  char local_8 [7];
  char local_1;
  
  FUN_003d4724(local_8,param_1,0);
  if ((param_2 == 0) || (local_8[0] == '\0')) {
    if (param_2 != 0) {
      return param_1;
    }
    uVar1 = 4;
  }
  else {
    lVar2 = FUN_003fd410(*(undefined8 *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),param_2
                         ,&local_1);
    if (lVar2 == 0) {
      uVar1 = 6;
      if (local_1 == '\0') {
        uVar1 = 4;
      }
    }
    else {
      if (local_1 == '\0') {
        return param_1;
      }
      uVar1 = 2;
    }
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,uVar1 | *(uint *)(lVar2 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d4cf8 (212 bytes) name=FUN_003d4cf8

ulong FUN_003d4cf8(long *param_1)

{
  long lVar1;
  uint uVar2;
  ulong uVar3;
  byte *pbVar4;
  long *plVar5;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] == '\0') {
    uVar2 = 4;
    if (param_1[1] == 0) {
LAB_003d4d8c:
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uVar2 | *(uint *)(lVar1 + 0x20));
      return 0xffffffff;
    }
    uVar3 = 0xffffffff;
  }
  else {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar5[2];
    if (pbVar4 < (byte *)plVar5[3]) {
      uVar3 = (ulong)*pbVar4;
      plVar5[2] = (long)(pbVar4 + 1);
    }
    else {
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5);
      if ((int)uVar3 == -1) {
        uVar2 = 6;
        if (param_1[1] != 0) {
          uVar2 = 2;
        }
        goto LAB_003d4d8c;
      }
    }
    param_1[1] = 1;
  }
  return uVar3;
}


==================================================================

### FUNC 003d4e4c (204 bytes) name=FUN_003d4e4c

long * FUN_003d4e4c(long *param_1,undefined1 *param_2)

{
  long lVar1;
  uint uVar2;
  long *plVar3;
  byte *pbVar4;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar3[2];
    if (pbVar4 < (byte *)plVar3[3]) {
      uVar2 = (uint)*pbVar4;
      plVar3[2] = (long)(pbVar4 + 1);
    }
    else {
      uVar2 = (**(code **)(*plVar3 + 0x50))();
      if (uVar2 == 0xffffffff) {
        uVar2 = 6;
        if (param_1[1] != 0) {
          uVar2 = 2;
        }
        goto LAB_003d4ebc;
      }
    }
    param_1[1] = 1;
    *param_2 = (char)uVar2;
  }
  if (param_1[1] != 0) {
    return param_1;
  }
  uVar2 = 4;
LAB_003d4ebc:
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,uVar2 | *(uint *)(lVar1 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d4f9c (392 bytes) name=FUN_003d4f9c

long * FUN_003d4f9c(long *param_1,undefined1 *param_2,long param_3,uint param_4)

{
  long lVar1;
  uint uVar2;
  int iVar3;
  byte *pbVar4;
  uint uVar5;
  byte *pbVar6;
  long *plVar7;
  undefined1 *puVar8;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] == '\0') {
    uVar5 = 0;
  }
  else {
    plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar7[2];
    if ((byte *)plVar7[3] <= pbVar4) goto LAB_003d5058;
LAB_003d4ffc:
    uVar2 = (uint)*pbVar4;
LAB_003d5000:
    puVar8 = param_2;
    if (uVar2 != 0xffffffff && uVar2 != (param_4 & 0xff)) {
      do {
        param_2 = puVar8;
        if (param_3 <= param_1[1] + 1) break;
        param_2 = puVar8 + 1;
        *puVar8 = (char)uVar2;
        pbVar4 = (byte *)plVar7[2];
        pbVar6 = (byte *)plVar7[3];
        param_1[1] = param_1[1] + 1;
        if (pbVar4 < pbVar6) {
          pbVar4 = pbVar4 + 1;
          plVar7[2] = (long)pbVar4;
        }
        else {
          iVar3 = (**(code **)(*plVar7 + 0x50))(plVar7);
          uVar2 = 0xffffffff;
          if (iVar3 == -1) goto LAB_003d5000;
          pbVar4 = (byte *)plVar7[2];
          pbVar6 = (byte *)plVar7[3];
        }
        if (pbVar4 < pbVar6) goto LAB_003d4ffc;
LAB_003d5058:
        uVar2 = (**(code **)(*plVar7 + 0x48))(plVar7);
        puVar8 = param_2;
        if (uVar2 == 0xffffffff || uVar2 == (param_4 & 0xff)) break;
      } while( true );
    }
    uVar5 = 0;
    if (uVar2 == 0xffffffff) {
      uVar5 = 2;
    }
  }
  if (0 < param_3) {
    *param_2 = 0;
  }
  if (param_1[1] == 0) {
    uVar5 = uVar5 | 4;
  }
  else if (uVar5 == 0) {
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,uVar5 | *(uint *)(lVar1 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d51ac (148 bytes) name=FUN_003d51ac

void FUN_003d51ac(long *param_1,undefined8 param_2,undefined8 param_3)

{
  undefined1 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  if ((char)plVar2[7] != '\0') {
    FUN_003d4f9c(param_1,param_2,param_3,*(undefined1 *)((long)plVar2 + 0x43));
    return;
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,10);
  FUN_003d4f9c(param_1,param_2,param_3,uVar1);
  return;
}


==================================================================

### FUNC 003d5240 (508 bytes) name=FUN_003d5240

long * FUN_003d5240(long *param_1,long *param_2,byte param_3)

{
  long lVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  uint uVar6;
  byte *pbVar7;
  long *plVar8;
  uint uVar9;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] == '\0') goto LAB_003d5384;
  plVar8 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  uVar3 = (uint)param_3;
  if ((byte *)plVar8[2] < (byte *)plVar8[3]) {
    bVar2 = *(byte *)plVar8[2];
    uVar9 = (uint)bVar2;
    uVar6 = (uint)bVar2;
    if (uVar3 == uVar9) goto LAB_003d5384;
LAB_003d52ac:
    do {
      while( true ) {
        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {
          *(undefined1 *)param_2[5] = (char)uVar6;
          param_2[5] = param_2[5] + 1;
        }
        else {
          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);
          if (iVar4 == -1) goto LAB_003d530c;
        }
        pbVar5 = (byte *)plVar8[2];
        pbVar7 = (byte *)plVar8[3];
        param_1[1] = param_1[1] + 1;
        if (pbVar5 < pbVar7) {
          pbVar5 = pbVar5 + 1;
          plVar8[2] = (long)pbVar5;
        }
        else {
          iVar4 = (**(code **)(*plVar8 + 0x50))(plVar8);
          if (iVar4 == -1) goto LAB_003d5314;
          pbVar5 = (byte *)plVar8[2];
          pbVar7 = (byte *)plVar8[3];
        }
        if (pbVar7 <= pbVar5) break;
        uVar9 = (uint)*pbVar5;
        uVar6 = uVar9;
        if (uVar3 == uVar9) goto LAB_003d530c;
      }
      uVar9 = (**(code **)(*plVar8 + 0x48))(plVar8);
      uVar6 = uVar9 & 0xff;
    } while (uVar3 != uVar9 && uVar9 != 0xffffffff);
  }
  else {
    uVar9 = (**(code **)(*plVar8 + 0x48))(plVar8);
    uVar6 = uVar9 & 0xff;
    if ((uVar9 != 0xffffffff) && (uVar3 != uVar9)) goto LAB_003d52ac;
  }
LAB_003d530c:
  if (uVar9 == 0xffffffff) {
LAB_003d5314:
    uVar3 = 6;
    if (param_1[1] != 0) {
      uVar3 = 2;
    }
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,uVar3 | *(uint *)(lVar1 + 0x20));
    return param_1;
  }
LAB_003d5384:
  if (param_1[1] != 0) {
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return param_1;
}


==================================================================

### FUNC 003d54bc (140 bytes) name=FUN_003d54bc

void FUN_003d54bc(long *param_1,undefined8 param_2)

{
  undefined1 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  if ((char)plVar2[7] != '\0') {
    FUN_003d5240(param_1,param_2,*(undefined1 *)((long)plVar2 + 0x43));
    return;
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,10);
  FUN_003d5240(param_1,param_2,uVar1);
  return;
}


==================================================================

### FUNC 003d5548 (172 bytes) name=FUN_003d5548

long * FUN_003d5548(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((ulong)plVar3[2] < (ulong)plVar3[3]) {
      plVar3[2] = plVar3[2] + 1;
    }
    else {
      iVar2 = (**(code **)(*plVar3 + 0x50))();
      if (iVar2 == -1) {
        lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 2);
        return param_1;
      }
    }
    param_1[1] = 1;
  }
  return param_1;
}


==================================================================

### FUNC 003d5678 (172 bytes) name=FUN_003d5678

uint FUN_003d5678(long *param_1)

{
  long lVar1;
  long *plVar2;
  uint uVar3;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] == '\0') {
    uVar3 = 0xffffffff;
  }
  else {
    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar2[2] < (byte *)plVar2[3]) {
      uVar3 = (uint)*(byte *)plVar2[2];
    }
    else {
      uVar3 = (**(code **)(*plVar2 + 0x48))();
      if (uVar3 == 0xffffffff) {
        lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 2);
        return 0xffffffff;
      }
    }
  }
  return uVar3;
}


==================================================================

### FUNC 003d57a4 (176 bytes) name=FUN_003d57a4

long * FUN_003d57a4(long *param_1,undefined8 param_2,long param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    lVar1 = (**(code **)(*plVar2 + 0x40))(plVar2,param_2,param_3);
    param_1[1] = lVar1;
                    /* catch() { ... } // from try @ 003d5cc4 with catch @ 003d581c */
    if (param_3 != lVar1) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 6);
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d58d8 (264 bytes) name=FUN_003d58d8

long FUN_003d58d8(long *param_1,undefined8 param_2,long param_3)

{
  long *plVar1;
  long lVar2;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    lVar2 = plVar1[3] - plVar1[2];
    if (lVar2 == 0) {
      lVar2 = (**(code **)(*plVar1 + 0x38))();
    }
    if (0 < lVar2) {
      if (param_3 < lVar2) {
        lVar2 = param_3;
      }
      plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
      lVar2 = (**(code **)(*plVar1 + 0x40))(plVar1,param_2,lVar2);
      param_1[1] = lVar2;
      return lVar2;
    }
    if (lVar2 == -1) {
      lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 2);
      return param_1[1];
    }
  }
  return param_1[1];
}


==================================================================

### FUNC 003d5a68 (220 bytes) name=FUN_003d5a68

long * FUN_003d5a68(long *param_1,char param_2)

{
  int iVar1;
  long *plVar2;
  long lVar3;
  ulong uVar4;
  char local_8 [8];
  
  param_1[1] = 0;
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) & 0xfffffffd);
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar3 + 0xe8);
    if (plVar2 != (long *)0x0) {
      uVar4 = plVar2[2];
      if (((ulong)plVar2[1] < uVar4) && (*(char *)(uVar4 - 1) == param_2)) {
        plVar2[2] = uVar4 - 1;
        return param_1;
      }
      iVar1 = (**(code **)(*plVar2 + 0x58))(plVar2,param_2);
      if (iVar1 != -1) {
        return param_1;
      }
      lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
    }
    FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
  }
  return param_1;
}


==================================================================

### FUNC 003d5bc8 (204 bytes) name=FUN_003d5bc8

long * FUN_003d5bc8(long *param_1)

{
  int iVar1;
  long *plVar2;
  long lVar3;
  char local_8 [8];
  
  param_1[1] = 0;
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) & 0xfffffffd);
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar3 + 0xe8);
    if (plVar2 == (long *)0x0) {
LAB_003d5c70:
      FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
      return param_1;
    }
    if ((ulong)plVar2[1] < (ulong)plVar2[2]) {
      plVar2[2] = plVar2[2] - 1;
    }
    else {
      iVar1 = (**(code **)(*plVar2 + 0x58))(plVar2,0xffffffff);
                    /* try { // try from 003d5c5c to 004d5c5f has its CatchHandler @ 003d5ca4 */
      if (iVar1 == -1) {
        lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
        goto LAB_003d5c70;
      }
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d5d18 (160 bytes) name=FUN_003d5d18

undefined8 FUN_003d5d18(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  char local_8 [8];
  
  FUN_003d4724(local_8,param_1,1);
  if ((local_8[0] != '\0') &&
     (plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8), plVar3 != (long *)0x0
     )) {
    iVar2 = (**(code **)(*plVar3 + 0x30))();
    if (iVar2 != -1) {
      return 0;
    }
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
    return 0xffffffff;
  }
  return 0xffffffff;
}


==================================================================

### FUNC 003d5e40 (220 bytes) name=FUN_003d5e40

undefined1  [16] FUN_003d5e40(long *param_1)

{
  undefined8 uVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  char local_8 [8];
  
  FUN_003d4724(local_8,param_1,1);
  if ((local_8[0] == '\0') ||
     ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) != 0)) {
    uVar2 = 0;
    uVar10 = 0;
    uVar9 = 0;
    uVar8 = 0;
    uVar7 = 0;
    uVar6 = 0;
    uVar4 = 0;
    uVar3 = 0;
    uVar1 = 0xffffffffffffffff;
  }
  else {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    auVar11 = (**(code **)(*plVar5 + 0x20))(plVar5,0,1,8);
    uVar2 = auVar11._8_8_;
    uVar1 = auVar11._0_8_;
    uVar4 = uVar2 >> 8 & 0xff;
    uVar6 = uVar2 >> 0x10 & 0xff;
    uVar3 = uVar2 & 0xff;
    uVar7 = uVar2 >> 0x18 & 0xff;
    uVar8 = uVar2 >> 0x20 & 0xff;
    uVar9 = uVar2 >> 0x28 & 0xff;
    uVar10 = uVar2 >> 0x30 & 0xff;
    uVar2 = uVar2 >> 0x38;
  }
  auVar11._8_8_ =
       uVar3 | uVar4 << 8 | uVar6 << 0x10 | uVar7 << 0x18 | uVar8 << 0x20 | uVar9 << 0x28 |
       uVar10 << 0x30 | uVar2 << 0x38;
  auVar11._0_8_ = uVar1;
  return auVar11;
}


==================================================================

### FUNC 003d5fa0 (216 bytes) name=FUN_003d5fa0

long * FUN_003d5fa0(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) & 0xfffffffd);
  FUN_003d4724(local_8,param_1,1);
  if (((local_8[0] != '\0') &&
      ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0)) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x28))(plVar2,param_2,param_3,8), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003d60fc (216 bytes) name=FUN_003d60fc

long * FUN_003d60fc(long *param_1,undefined8 param_2,undefined4 param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) & 0xfffffffd);
  FUN_003d4724(local_8,param_1,1);
  if (((local_8[0] != '\0') &&
      ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0)) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x20))(plVar2,param_2,param_3,8), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003d6258 (8 bytes) name=FUN_003d6258

undefined1 FUN_003d6258(undefined1 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 003d6260 (280 bytes) name=FUN_003d6260

long * FUN_003d6260(long *param_1)

{
  int iVar1;
  long lVar2;
  byte *pbVar3;
  ulong uVar4;
  byte *pbVar5;
  long *plVar6;
  undefined1 auStack_8 [8];
  
  FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
  lVar2 = FUN_003de994(auStack_8);
  FUN_003ed708(auStack_8);
  plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  pbVar3 = (byte *)plVar6[2];
                    /* try { // try from 003d62c0 to 004d62c3 has its CatchHandler @ 003d631c */
  if ((byte *)plVar6[3] <= pbVar3) goto LAB_003d630c;
  do {
    uVar4 = (ulong)*pbVar3;
    while( true ) {
      if ((*(byte *)(*(long *)(lVar2 + 0x30) + (uVar4 & 0xff)) >> 3 & 1) == 0) {
        return param_1;
      }
      pbVar5 = (byte *)plVar6[3];
      if ((byte *)plVar6[2] < pbVar5) {
        pbVar3 = (byte *)plVar6[2] + 1;
        plVar6[2] = (long)pbVar3;
      }
      else {
        iVar1 = (**(code **)(*plVar6 + 0x50))(plVar6);
        if (iVar1 == -1) goto LAB_003d6324;
        pbVar3 = (byte *)plVar6[2];
        pbVar5 = (byte *)plVar6[3];
      }
      if (pbVar3 < pbVar5) break;
LAB_003d630c:
      uVar4 = (**(code **)(*plVar6 + 0x48))(plVar6);
                    /* catch() { ... } // from try @ 003d62c0 with catch @ 003d631c */
      if ((int)uVar4 == -1) {
LAB_003d6324:
        lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003d633c to 004d633f has its CatchHandler @ 003d5d08 */
        FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 2);
        return param_1;
      }
    }
  } while( true );
}


==================================================================

### FUNC 003d638c (172 bytes) name=FUN_003d638c

long * FUN_003d638c(long *param_1,undefined1 *param_2)

{
  long lVar1;
  uint uVar2;
  long *plVar3;
  byte *pbVar4;
  char local_8 [8];
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar3[2];
    if (pbVar4 < (byte *)plVar3[3]) {
      uVar2 = (uint)*pbVar4;
      plVar3[2] = (long)(pbVar4 + 1);
    }
    else {
      uVar2 = (**(code **)(*plVar3 + 0x50))();
      if (uVar2 == 0xffffffff) {
        lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 6);
        return param_1;
      }
    }
    *param_2 = (char)uVar2;
  }
  return param_1;
}


==================================================================

### FUNC 003d64bc (4 bytes) name=thunk_FUN_003d638c

long * thunk_FUN_003d638c(long *param_1,undefined1 *param_2)

{
  long lVar1;
  uint uVar2;
  long *plVar3;
  byte *pbVar4;
  char acStack_8 [8];
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar3[2];
    if (pbVar4 < (byte *)plVar3[3]) {
      uVar2 = (uint)*pbVar4;
      plVar3[2] = (long)(pbVar4 + 1);
    }
    else {
      uVar2 = (**(code **)(*plVar3 + 0x50))();
      if (uVar2 == 0xffffffff) {
        lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 6);
        return param_1;
      }
    }
    *param_2 = (char)uVar2;
  }
  return param_1;
}


==================================================================

### FUNC 003d64c0 (4 bytes) name=thunk_FUN_003d638c

long * thunk_FUN_003d638c(long *param_1,undefined1 *param_2)

{
  long lVar1;
  uint uVar2;
  long *plVar3;
  byte *pbVar4;
  char acStack_8 [8];
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    pbVar4 = (byte *)plVar3[2];
    if (pbVar4 < (byte *)plVar3[3]) {
      uVar2 = (uint)*pbVar4;
      plVar3[2] = (long)(pbVar4 + 1);
    }
    else {
      uVar2 = (**(code **)(*plVar3 + 0x50))();
      if (uVar2 == 0xffffffff) {
        lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 6);
        return param_1;
      }
    }
    *param_2 = (char)uVar2;
  }
  return param_1;
}


==================================================================

### FUNC 003d64c4 (4 bytes) name=thunk_FUN_003daacc

long * thunk_FUN_003daacc(long *param_1,undefined1 *param_2)

{
  byte *pbVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  ulong uVar6;
  byte *pbVar7;
  void *__src;
  byte *pbVar8;
  long lVar9;
  long lVar10;
  size_t __n;
  long *plVar11;
  undefined1 *__dest;
  long lVar12;
  long lVar13;
  char acStack_10 [8];
  undefined1 auStack_8 [8];
  
  FUN_003d4724(acStack_10,param_1,0);
  if (acStack_10[0] == '\0') {
    lVar13 = *param_1;
    uVar3 = 4;
  }
  else {
    lVar13 = *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
    if (lVar13 < 1) {
      lVar13 = 0x7fffffffffffffff;
    }
    FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    lVar5 = FUN_003de994(auStack_8);
    FUN_003ed708(auStack_8);
    plVar11 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar11[2] < (byte *)plVar11[3]) {
      uVar6 = (ulong)*(byte *)plVar11[2];
    }
    else {
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
    }
    lVar12 = 0;
LAB_003dab70:
    uVar3 = (uint)uVar6;
    __dest = param_2;
    if (lVar12 < lVar13 + -1) {
      while( true ) {
        uVar3 = (uint)uVar6;
        param_2 = __dest;
        if (uVar3 == 0xffffffff) goto LAB_003dac9c;
        lVar10 = *(long *)(lVar5 + 0x30);
        if ((*(byte *)(lVar10 + (uVar6 & 0xff)) >> 3 & 1) != 0) goto LAB_003dab94;
        __src = (void *)plVar11[2];
        lVar9 = (lVar13 - lVar12) + -1;
        if (plVar11[3] - (long)__src < lVar9) {
          lVar9 = plVar11[3] - (long)__src;
        }
        if (lVar9 < 2) {
          *__dest = (char)uVar6;
          param_2 = __dest + 1;
          lVar12 = lVar12 + 1;
          pbVar8 = (byte *)plVar11[3];
          if ((byte *)plVar11[2] < pbVar8) {
            pbVar7 = (byte *)plVar11[2] + 1;
            plVar11[2] = (long)pbVar7;
          }
          else {
            iVar4 = (**(code **)(*plVar11 + 0x50))(plVar11);
            uVar6 = 0xffffffff;
            if (iVar4 == -1) goto LAB_003dab70;
            pbVar7 = (byte *)plVar11[2];
            pbVar8 = (byte *)plVar11[3];
          }
          if (pbVar7 < pbVar8) {
            uVar6 = (ulong)*pbVar7;
          }
          else {
            uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
          }
          goto LAB_003dab70;
        }
        pbVar8 = (byte *)((long)__src + 1);
        pbVar7 = (byte *)((long)__src + lVar9);
        if (pbVar8 < pbVar7) {
          bVar2 = *(byte *)(lVar10 + (ulong)*(byte *)((long)__src + 1));
          while (((bVar2 >> 3 & 1) == 0 && (pbVar1 = pbVar8 + 1, pbVar8 = pbVar7, pbVar1 != pbVar7))
                ) {
            bVar2 = *(byte *)(lVar10 + (ulong)*pbVar1);
            pbVar8 = pbVar1;
          }
        }
        __n = (long)pbVar8 - (long)__src;
        param_2 = __dest + __n;
        lVar12 = lVar12 + __n;
        memcpy(__dest,__src,__n);
        lVar10 = plVar11[2];
        uVar6 = lVar10 + __n;
        plVar11[2] = uVar6;
        if ((ulong)plVar11[3] <= uVar6) break;
        bVar2 = *(byte *)(lVar10 + __n);
        uVar6 = (ulong)bVar2;
        uVar3 = (uint)bVar2;
        __dest = param_2;
        if (lVar13 + -1 <= lVar12) goto LAB_003dac9c;
      }
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
      goto LAB_003dab70;
    }
LAB_003dac9c:
    if (uVar3 == 0xffffffff) {
      *param_2 = 0;
      lVar13 = *param_1;
      uVar3 = 6;
      if (lVar12 != 0) {
        uVar3 = 2;
      }
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
    }
    else {
LAB_003dab94:
      *param_2 = 0;
      lVar13 = *param_1;
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
      if (lVar12 != 0) {
        return param_1;
      }
      uVar3 = 4;
    }
  }
  lVar13 = (long)param_1 + *(long *)(lVar13 + -0x18);
  FUN_003d2254(lVar13,uVar3 | *(uint *)(lVar13 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d64c8 (4 bytes) name=thunk_FUN_003daacc

long * thunk_FUN_003daacc(long *param_1,undefined1 *param_2)

{
  byte *pbVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  ulong uVar6;
  byte *pbVar7;
  void *__src;
  byte *pbVar8;
  long lVar9;
  long lVar10;
  size_t __n;
  long *plVar11;
  undefined1 *__dest;
  long lVar12;
  long lVar13;
  char acStack_10 [8];
  undefined1 auStack_8 [8];
  
  FUN_003d4724(acStack_10,param_1,0);
  if (acStack_10[0] == '\0') {
    lVar13 = *param_1;
    uVar3 = 4;
  }
  else {
    lVar13 = *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
    if (lVar13 < 1) {
      lVar13 = 0x7fffffffffffffff;
    }
    FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    lVar5 = FUN_003de994(auStack_8);
    FUN_003ed708(auStack_8);
    plVar11 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar11[2] < (byte *)plVar11[3]) {
      uVar6 = (ulong)*(byte *)plVar11[2];
    }
    else {
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
    }
    lVar12 = 0;
LAB_003dab70:
    uVar3 = (uint)uVar6;
    __dest = param_2;
    if (lVar12 < lVar13 + -1) {
      while( true ) {
        uVar3 = (uint)uVar6;
        param_2 = __dest;
        if (uVar3 == 0xffffffff) goto LAB_003dac9c;
        lVar10 = *(long *)(lVar5 + 0x30);
        if ((*(byte *)(lVar10 + (uVar6 & 0xff)) >> 3 & 1) != 0) goto LAB_003dab94;
        __src = (void *)plVar11[2];
        lVar9 = (lVar13 - lVar12) + -1;
        if (plVar11[3] - (long)__src < lVar9) {
          lVar9 = plVar11[3] - (long)__src;
        }
        if (lVar9 < 2) {
          *__dest = (char)uVar6;
          param_2 = __dest + 1;
          lVar12 = lVar12 + 1;
          pbVar8 = (byte *)plVar11[3];
          if ((byte *)plVar11[2] < pbVar8) {
            pbVar7 = (byte *)plVar11[2] + 1;
            plVar11[2] = (long)pbVar7;
          }
          else {
            iVar4 = (**(code **)(*plVar11 + 0x50))(plVar11);
            uVar6 = 0xffffffff;
            if (iVar4 == -1) goto LAB_003dab70;
            pbVar7 = (byte *)plVar11[2];
            pbVar8 = (byte *)plVar11[3];
          }
          if (pbVar7 < pbVar8) {
            uVar6 = (ulong)*pbVar7;
          }
          else {
            uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
          }
          goto LAB_003dab70;
        }
        pbVar8 = (byte *)((long)__src + 1);
        pbVar7 = (byte *)((long)__src + lVar9);
        if (pbVar8 < pbVar7) {
          bVar2 = *(byte *)(lVar10 + (ulong)*(byte *)((long)__src + 1));
          while (((bVar2 >> 3 & 1) == 0 && (pbVar1 = pbVar8 + 1, pbVar8 = pbVar7, pbVar1 != pbVar7))
                ) {
            bVar2 = *(byte *)(lVar10 + (ulong)*pbVar1);
            pbVar8 = pbVar1;
          }
        }
        __n = (long)pbVar8 - (long)__src;
        param_2 = __dest + __n;
        lVar12 = lVar12 + __n;
        memcpy(__dest,__src,__n);
        lVar10 = plVar11[2];
        uVar6 = lVar10 + __n;
        plVar11[2] = uVar6;
        if ((ulong)plVar11[3] <= uVar6) break;
        bVar2 = *(byte *)(lVar10 + __n);
        uVar6 = (ulong)bVar2;
        uVar3 = (uint)bVar2;
        __dest = param_2;
        if (lVar13 + -1 <= lVar12) goto LAB_003dac9c;
      }
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
      goto LAB_003dab70;
    }
LAB_003dac9c:
    if (uVar3 == 0xffffffff) {
      *param_2 = 0;
      lVar13 = *param_1;
      uVar3 = 6;
      if (lVar12 != 0) {
        uVar3 = 2;
      }
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
    }
    else {
LAB_003dab94:
      *param_2 = 0;
      lVar13 = *param_1;
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
      if (lVar12 != 0) {
        return param_1;
      }
      uVar3 = 4;
    }
  }
  lVar13 = (long)param_1 + *(long *)(lVar13 + -0x18);
  FUN_003d2254(lVar13,uVar3 | *(uint *)(lVar13 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d64cc (148 bytes) name=FUN_003d64cc

long * FUN_003d64cc(long *param_1,undefined1 param_2)

{
  long lVar1;
  long *plVar2;
  
  lVar1 = *(long *)(*param_1 + -0x18);
  if (*(char *)((long)param_1 + lVar1 + 0xe1) != '\0') {
    *(undefined1 *)((long)param_1 + lVar1 + 0xe0) = param_2;
    return param_1;
  }
  plVar2 = *(long **)((long)param_1 + lVar1 + 0xf0);
  if (plVar2 != (long *)0x0) {
    if ((char)plVar2[7] == '\0') {
      FUN_003d14e0(plVar2);
      (**(code **)(*plVar2 + 0x30))(plVar2,0x20);
    }
    *(undefined1 *)((long)param_1 + lVar1 + 0xe0) = param_2;
    *(undefined1 *)((long)param_1 + lVar1 + 0xe1) = 1;
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d6560 (28 bytes) name=FUN_003d6560

void FUN_003d6560(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) | param_2;
  return;
}


==================================================================

### FUNC 003d657c (28 bytes) name=FUN_003d657c

void FUN_003d657c(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & (param_2 ^ 0xffffffff);
  return;
}


==================================================================

### FUNC 003d6598 (120 bytes) name=FUN_003d6598

void FUN_003d6598(long *param_1,int param_2)

{
  long lVar1;
  uint uVar2;
  
  lVar1 = *(long *)(*param_1 + -0x18);
  if (param_2 == 8) {
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 0x40;
    return;
  }
  if (param_2 != 10) {
    uVar2 = 8;
    if (param_2 != 0x10) {
      uVar2 = 0;
    }
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         uVar2 | *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5;
    return;
  }
  *(uint *)((long)param_1 + lVar1 + 0x18) = *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 2
  ;
  return;
}


==================================================================

### FUNC 003d6610 (24 bytes) name=FUN_003d6610

void FUN_003d6610(long *param_1,int param_2)

{
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 8) = (long)param_2;
  return;
}


==================================================================

### FUNC 003d6628 (24 bytes) name=FUN_003d6628

void FUN_003d6628(long *param_1,int param_2)

{
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10) = (long)param_2;
  return;
}


==================================================================

### FUNC 003d6640 (176 bytes) name=FUN_003d6640

long * FUN_003d6640(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x20))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6774 (4 bytes) name=thunk_FUN_003d6640

long * thunk_FUN_003d6640(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x20))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6778 (176 bytes) name=FUN_003d6778

long * FUN_003d6778(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x28))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d68ac (4 bytes) name=thunk_FUN_003d6778

long * thunk_FUN_003d6778(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x28))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d68b0 (176 bytes) name=FUN_003d68b0

long * FUN_003d68b0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d69e4 (4 bytes) name=thunk_FUN_003d68b0

long * thunk_FUN_003d68b0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d69e8 (176 bytes) name=FUN_003d69e8

long * FUN_003d69e8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x30))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6b1c (4 bytes) name=thunk_FUN_003d69e8

long * thunk_FUN_003d69e8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x30))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6b20 (176 bytes) name=FUN_003d6b20

long * FUN_003d6b20(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x10))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6c54 (4 bytes) name=thunk_FUN_003d6b20

long * thunk_FUN_003d6b20(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x10))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6c58 (176 bytes) name=FUN_003d6c58

long * FUN_003d6c58(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x38))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6d8c (4 bytes) name=thunk_FUN_003d6c58

long * thunk_FUN_003d6c58(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x38))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6d90 (176 bytes) name=FUN_003d6d90

long * FUN_003d6d90(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x40))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6ec4 (4 bytes) name=thunk_FUN_003d6d90

long * thunk_FUN_003d6d90(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x40))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6ec8 (176 bytes) name=FUN_003d6ec8

long * FUN_003d6ec8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x48))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d6ffc (4 bytes) name=thunk_FUN_003d6ec8

long * thunk_FUN_003d6ec8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x48))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7000 (176 bytes) name=FUN_003d7000

long * FUN_003d7000(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x50))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7134 (4 bytes) name=thunk_FUN_003d7000

long * thunk_FUN_003d7000(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x50))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7138 (176 bytes) name=FUN_003d7138

long * FUN_003d7138(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x58))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d726c (4 bytes) name=thunk_FUN_003d7138

long * thunk_FUN_003d7138(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x58))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7270 (176 bytes) name=FUN_003d7270

long * FUN_003d7270(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d4724(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x60))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d73a4 (4 bytes) name=thunk_FUN_003d7270

long * thunk_FUN_003d7270(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d4724(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x60))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d73a8 (44 bytes) name=FUN_003d73a8

void FUN_003d73a8(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),param_3);
  return;
}


==================================================================

### FUNC 003d73d4 (120 bytes) name=FUN_003d73d4

void FUN_003d73d4(undefined8 *param_1,undefined8 param_2)

{
                    /* catch() { ... } // from try @ 003d6c48 with catch @ 003d73ec */
  FUN_003d347c(param_1 + 2);
  param_1[0x1d] = 0;
  *(undefined4 *)(param_1 + 0x1e) = 0;
  *(undefined1 *)((long)param_1 + 0xf4) = 0;
                    /* try { // try from 003d740c to 004d740f has its CatchHandler @ 003d6380 */
  param_1[0x1f] = 0;
                    /* catch() { ... } // from try @ 003d64a4 with catch @ 003d7410 */
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  *param_1 = &PTR_FUN_004f7c38;
  param_1[1] = 0;
  param_1[2] = &PTR_FUN_004f7c60;
  FUN_003d3008(param_1 + 2,param_2);
  return;
}


==================================================================

### FUNC 003d7470 (24 bytes) name=FUN_003d7470

void FUN_003d7470(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
                    /* catch() { ... } // from try @ 003d8434 with catch @ 003d7474 */
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  return;
}


==================================================================

### FUNC 003d7488 (20 bytes) name=FUN_003d7488

void FUN_003d7488(undefined8 param_1,code *param_2)

{
  (*param_2)();
  return;
}


==================================================================

### FUNC 003d749c (48 bytes) name=FUN_003d749c

long * FUN_003d749c(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003d74cc (48 bytes) name=FUN_003d74cc

long * FUN_003d74cc(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003d74fc (8 bytes) name=FUN_003d74fc

undefined8 FUN_003d74fc(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 003d7504 (92 bytes) name=FUN_003d7504

void FUN_003d7504(long *param_1,undefined8 param_2,undefined8 param_3)

{
  undefined4 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar1 = (**(code **)(*plVar2 + 0x50))(plVar2,10);
    FUN_003db554(param_1,param_2,param_3,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d7560 (44 bytes) name=FUN_003d7560

void FUN_003d7560(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  return;
}


==================================================================

### FUNC 003d758c (116 bytes) name=FUN_003d758c

void FUN_003d758c(undefined8 *param_1)

{
                    /* try { // try from 003d7594 to 004d7c3f has its CatchHandler @ 003d8440 */
  FUN_003d347c(param_1 + 2);
  param_1[0x1d] = 0;
  *(undefined4 *)(param_1 + 0x1e) = 0;
  *(undefined1 *)((long)param_1 + 0xf4) = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  *param_1 = &PTR_FUN_004f7c38;
  param_1[1] = 0;
  param_1[2] = &PTR_FUN_004f7c60;
  FUN_003d3008(param_1 + 2,0);
  return;
}


==================================================================

### FUNC 003d7624 (408 bytes) name=FUN_003d7624

void FUN_003d7624(undefined1 *param_1,long *param_2,char param_3)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  int *piVar4;
  long lVar5;
  uint uVar6;
  long *plVar7;
  long *plVar8;
  
  lVar5 = *(long *)(*param_2 + -0x18);
  *param_1 = 0;
  lVar5 = (long)param_2 + lVar5;
  uVar6 = *(uint *)(lVar5 + 0x20);
  if (uVar6 == 0) {
    if (*(long *)(lVar5 + 0xd8) == 0) {
      if (param_3 != '\0') goto LAB_003d767c;
LAB_003d76b8:
      if ((*(uint *)(lVar5 + 0x18) >> 0xc & 1) != 0) {
        plVar7 = *(long **)(lVar5 + 0xe8);
        if ((int *)plVar7[2] < (int *)plVar7[3]) {
          iVar2 = *(int *)plVar7[2];
        }
        else {
          iVar2 = (**(code **)(*plVar7 + 0x48))(plVar7);
          lVar5 = (long)param_2 + *(long *)(*param_2 + -0x18);
        }
        plVar8 = *(long **)(lVar5 + 0xf0);
        if (plVar8 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f118();
        }
        if (iVar2 != -1) {
          do {
            cVar1 = (**(code **)(*plVar8 + 0x10))(plVar8,8);
            if (cVar1 == '\0') {
              lVar5 = (long)param_2 + *(long *)(*param_2 + -0x18);
              goto LAB_003d7674;
            }
            piVar4 = (int *)plVar7[2];
            if (piVar4 < (int *)plVar7[3]) {
              iVar2 = *piVar4;
              plVar7[2] = (long)(piVar4 + 1);
            }
            else {
              iVar2 = (**(code **)(*plVar7 + 0x50))(plVar7);
            }
            if (iVar2 == -1) break;
            if ((int *)plVar7[2] < (int *)plVar7[3]) {
              iVar2 = *(int *)plVar7[2];
            }
            else {
              iVar2 = (**(code **)(*plVar7 + 0x48))(plVar7);
            }
          } while (iVar2 != -1);
          lVar5 = (long)param_2 + *(long *)(*param_2 + -0x18);
        }
        uVar6 = *(uint *)(lVar5 + 0x20);
        uVar3 = 2;
        goto LAB_003d7698;
      }
    }
    else {
      FUN_003f34dc();
      lVar5 = (long)param_2 + *(long *)(*param_2 + -0x18);
      if (param_3 == '\0') goto LAB_003d76b8;
    }
LAB_003d7674:
    uVar6 = *(uint *)(lVar5 + 0x20);
    if (uVar6 == 0) {
LAB_003d767c:
      *param_1 = 1;
      return;
    }
  }
  uVar3 = 0;
LAB_003d7698:
  FUN_003d2c00(lVar5,uVar3 | 4 | uVar6);
  return;
}


==================================================================

### FUNC 003d77bc (252 bytes) name=FUN_003d77bc

long * FUN_003d77bc(long *param_1,undefined2 *param_2)

{
  long lVar1;
  long *plVar2;
  char local_10 [4];
  uint local_c;
  long local_8;
  
  FUN_003d7624(local_10,param_1,0);
  if (local_10[0] != '\0') {
    local_c = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_c,&local_8)
    ;
    if (local_8 < -0x8000) {
      *param_2 = 0x8000;
    }
    else {
      if (local_8 < 0x8000) {
        *param_2 = (short)local_8;
        if (local_c == 0) {
          return param_1;
        }
        goto LAB_003d7878;
      }
      *param_2 = 0x7fff;
    }
    local_c = local_c | 4;
    if (local_c != 0) {
LAB_003d7878:
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_c | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7944 (228 bytes) name=FUN_003d7944

long * FUN_003d7944(long *param_1,undefined4 *param_2)

{
  long lVar1;
  long *plVar2;
  undefined4 uVar3;
  char local_10 [4];
  uint local_c;
  long local_8;
  
  FUN_003d7624(local_10,param_1,0);
  if (local_10[0] != '\0') {
    local_c = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_c,&local_8)
    ;
    uVar3 = 0x80000000;
    if ((local_8 < -0x80000000) || (uVar3 = 0x7fffffff, 0x7fffffff < local_8)) {
      *param_2 = uVar3;
      local_c = local_c | 4;
    }
    else {
      *param_2 = (int)local_8;
    }
    if (local_c != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_c | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d7ab4 (188 bytes) name=FUN_003d7ab4

long * FUN_003d7ab4(long *param_1,long param_2)

{
  uint uVar1;
  long lVar2;
  char local_8 [7];
  char local_1;
  
  FUN_003d7624(local_8,param_1,0);
  if ((param_2 == 0) || (local_8[0] == '\0')) {
    if (param_2 != 0) {
      return param_1;
    }
    uVar1 = 4;
  }
  else {
    lVar2 = FUN_003fd5a8(*(undefined8 *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),param_2
                         ,&local_1);
    if (lVar2 == 0) {
      uVar1 = 6;
      if (local_1 == '\0') {
        uVar1 = 4;
      }
    }
    else {
      if (local_1 == '\0') {
        return param_1;
      }
      uVar1 = 2;
    }
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,uVar1 | *(uint *)(lVar2 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d7bf4 (228 bytes) name=FUN_003d7bf4

ulong FUN_003d7bf4(long *param_1)

{
  long lVar1;
  uint uVar2;
  ulong uVar3;
  uint *puVar4;
  long *plVar5;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
    uVar2 = 4;
    if (param_1[1] != 0) {
      return 0xffffffff;
    }
  }
  else {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    puVar4 = (uint *)plVar5[2];
    if (puVar4 < (uint *)plVar5[3]) {
      uVar3 = (ulong)*puVar4;
      plVar5[2] = (long)(puVar4 + 1);
    }
    else {
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5);
    }
    if ((int)uVar3 != -1) {
                    /* try { // try from 003d7c98 to 004d7d37 has its CatchHandler @ 003d8414 */
      param_1[1] = 1;
      return uVar3;
    }
    uVar2 = 6;
    if (param_1[1] != 0) {
      uVar2 = 2;
    }
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,uVar2 | *(uint *)(lVar1 + 0x20));
  return 0xffffffff;
}


==================================================================

### FUNC 003d7d5c (252 bytes) name=FUN_003d7d5c

long * FUN_003d7d5c(long *param_1,int *param_2)

{
  long lVar1;
  int iVar2;
  uint uVar3;
  long *plVar4;
  int *piVar5;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
    if (param_1[1] == 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
      return param_1;
    }
  }
  else {
    plVar4 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar5 = (int *)plVar4[2];
    if (piVar5 < (int *)plVar4[3]) {
      iVar2 = *piVar5;
      plVar4[2] = (long)(piVar5 + 1);
    }
    else {
      iVar2 = (**(code **)(*plVar4 + 0x50))();
    }
    if (iVar2 == -1) {
      uVar3 = 6;
      if (param_1[1] != 0) {
        uVar3 = 2;
      }
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uVar3 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
    param_1[1] = 1;
    *param_2 = iVar2;
  }
  return param_1;
}


==================================================================

### FUNC 003d7ee0 (388 bytes) name=FUN_003d7ee0

long * FUN_003d7ee0(long *param_1,int *param_2,long param_3,int param_4)

{
  int iVar1;
  int *piVar2;
  uint uVar3;
  int *piVar4;
  long lVar5;
  int *piVar6;
  long *plVar7;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
    lVar5 = param_1[1];
    uVar3 = 0;
  }
  else {
    plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar2 = (int *)plVar7[2];
    if ((int *)plVar7[3] <= piVar2) goto LAB_003d7fa4;
LAB_003d7f40:
    iVar1 = *piVar2;
    while (lVar5 = param_1[1], piVar2 = param_2, iVar1 != -1 && param_4 != iVar1) {
      while( true ) {
        param_2 = piVar2;
        if (param_3 <= lVar5 + 1) goto LAB_003d7fd4;
        piVar4 = (int *)plVar7[2];
        piVar6 = (int *)plVar7[3];
        param_2 = piVar2 + 1;
        *piVar2 = iVar1;
        param_1[1] = lVar5 + 1;
        if (piVar4 < piVar6) {
          iVar1 = *piVar4;
          plVar7[2] = (long)(piVar4 + 1);
        }
        else {
          iVar1 = (**(code **)(*plVar7 + 0x50))(plVar7);
        }
        if (iVar1 == -1) break;
        piVar2 = (int *)plVar7[2];
        if (piVar2 < (int *)plVar7[3]) goto LAB_003d7f40;
LAB_003d7fa4:
        iVar1 = (**(code **)(*plVar7 + 0x48))(plVar7);
        lVar5 = param_1[1];
        piVar2 = param_2;
        if (iVar1 == -1 || param_4 == iVar1) goto LAB_003d7fd4;
      }
    }
LAB_003d7fd4:
    uVar3 = 2;
    if (iVar1 != -1) {
      uVar3 = 0;
    }
  }
  if (0 < param_3) {
    *param_2 = 0;
  }
  if (lVar5 == 0) {
    uVar3 = uVar3 | 4;
  }
  else if (uVar3 == 0) {
    return param_1;
  }
  lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar5,uVar3 | *(uint *)(lVar5 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d80e4 (92 bytes) name=FUN_003d80e4

void FUN_003d80e4(long *param_1,undefined8 param_2,undefined8 param_3)

{
  undefined4 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar1 = (**(code **)(*plVar2 + 0x50))(plVar2,10);
    FUN_003d7ee0(param_1,param_2,param_3,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d8140 (360 bytes) name=FUN_003d8140

long * FUN_003d8140(long *param_1,long *param_2,int param_3)

{
  long lVar1;
  int iVar2;
  uint uVar3;
  int *piVar4;
  int *piVar5;
  long *plVar6;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar4 = (int *)plVar6[2];
    if ((int *)plVar6[3] <= piVar4) goto LAB_003d8200;
LAB_003d8198:
    iVar2 = *piVar4;
    if (iVar2 != -1) {
      do {
        if (iVar2 == param_3) break;
        piVar4 = (int *)param_2[5];
        if (piVar4 < (int *)param_2[6]) {
          *piVar4 = iVar2;
          param_2[5] = (long)(piVar4 + 1);
        }
        else {
          iVar2 = (**(code **)(*param_2 + 0x68))(param_2);
          if (iVar2 == -1) goto LAB_003d8224;
        }
        piVar5 = (int *)plVar6[2];
        piVar4 = (int *)plVar6[3];
        param_1[1] = param_1[1] + 1;
        if (piVar5 < piVar4) {
          iVar2 = *piVar5;
          plVar6[2] = (long)(piVar5 + 1);
        }
        else {
          iVar2 = (**(code **)(*plVar6 + 0x50))(plVar6);
        }
        if (iVar2 != -1) {
          piVar4 = (int *)plVar6[2];
          if (piVar4 < (int *)plVar6[3]) goto LAB_003d8198;
LAB_003d8200:
          iVar2 = (**(code **)(*plVar6 + 0x48))(plVar6);
        }
        if (iVar2 == -1) break;
      } while( true );
    }
    if (iVar2 == -1) {
      uVar3 = 6;
      if (param_1[1] != 0) {
        uVar3 = 2;
      }
      goto LAB_003d8230;
    }
  }
LAB_003d8224:
  if (param_1[1] != 0) {
    return param_1;
  }
  uVar3 = 4;
LAB_003d8230:
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,uVar3 | *(uint *)(lVar1 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d832c (84 bytes) name=FUN_003d832c

void FUN_003d832c(long *param_1,undefined8 param_2)

{
  undefined4 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar1 = (**(code **)(*plVar2 + 0x50))(plVar2,10);
    FUN_003d8140(param_1,param_2,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d8380 (180 bytes) name=FUN_003d8380

long * FUN_003d8380(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  int *piVar4;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar4 = (int *)plVar3[2];
    if (piVar4 < (int *)plVar3[3]) {
      iVar2 = *piVar4;
      plVar3[2] = (long)(piVar4 + 1);
    }
    else {
      iVar2 = (**(code **)(*plVar3 + 0x50))();
    }
    if (iVar2 == -1) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 2);
                    /* catch() { ... } // from try @ 003d7c98 with catch @ 003d8414 */
      return param_1;
    }
    param_1[1] = 1;
  }
  return param_1;
}


==================================================================

### FUNC 003d84b8 (172 bytes) name=FUN_003d84b8

int FUN_003d84b8(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  char local_8 [8];
  
  iVar2 = -1;
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((int *)plVar3[2] < (int *)plVar3[3]) {
      iVar2 = *(int *)plVar3[2];
    }
    else {
      iVar2 = (**(code **)(*plVar3 + 0x48))();
    }
    if (iVar2 == -1) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 2);
      return -1;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 003d85ec (176 bytes) name=FUN_003d85ec

long * FUN_003d85ec(long *param_1,undefined8 param_2,long param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
                    /* try { // try from 003d860c to 004d860f has its CatchHandler @ 003d973c */
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    lVar1 = (**(code **)(*plVar2 + 0x40))(plVar2,param_2,param_3);
    param_1[1] = lVar1;
    if (param_3 != lVar1) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 6);
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d8720 (268 bytes) name=FUN_003d8720

long FUN_003d8720(long *param_1,undefined8 param_2,long param_3)

{
  long *plVar1;
  long lVar2;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    lVar2 = plVar1[3] - plVar1[2] >> 2;
    if (lVar2 == 0) {
      lVar2 = (**(code **)(*plVar1 + 0x38))();
    }
    if (0 < lVar2) {
      if (param_3 < lVar2) {
        lVar2 = param_3;
      }
      plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
      lVar2 = (**(code **)(*plVar1 + 0x40))(plVar1,param_2,lVar2);
      param_1[1] = lVar2;
      return lVar2;
    }
    if (lVar2 == -1) {
      lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 2);
      return param_1[1];
    }
  }
  return param_1[1];
}


==================================================================

### FUNC 003d88b4 (232 bytes) name=FUN_003d88b4

long * FUN_003d88b4(long *param_1,int param_2)

{
  long *plVar1;
  long lVar2;
  ulong uVar3;
  char local_8 [8];
  
  param_1[1] = 0;
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) & 0xfffffffd);
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
    return param_1;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  plVar1 = *(long **)(lVar2 + 0xe8);
  if (plVar1 != (long *)0x0) {
    uVar3 = plVar1[2];
    if (((ulong)plVar1[1] < uVar3) && (param_2 == *(int *)(uVar3 - 4))) {
      plVar1[2] = uVar3 - 4;
    }
    else {
      param_2 = (**(code **)(*plVar1 + 0x58))(plVar1,param_2);
    }
    if (param_2 != -1) {
      return param_1;
    }
    lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  }
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003d8a20 (216 bytes) name=FUN_003d8a20

long * FUN_003d8a20(long *param_1)

{
  int iVar1;
  long *plVar2;
  long lVar3;
  ulong uVar4;
  char local_8 [8];
  
  param_1[1] = 0;
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) & 0xfffffffd);
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
    return param_1;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  plVar2 = *(long **)(lVar3 + 0xe8);
  if (plVar2 != (long *)0x0) {
    uVar4 = plVar2[2];
    if ((ulong)plVar2[1] < uVar4) {
      iVar1 = *(int *)(uVar4 - 4);
      plVar2[2] = uVar4 - 4;
    }
    else {
      iVar1 = (**(code **)(*plVar2 + 0x58))(plVar2,0xffffffff);
    }
    if (iVar1 != -1) {
      return param_1;
    }
    lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  }
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003d8b7c (160 bytes) name=FUN_003d8b7c

undefined8 FUN_003d8b7c(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  char local_8 [8];
  
  FUN_003d7624(local_8,param_1,1);
  if ((local_8[0] != '\0') &&
     (plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8), plVar3 != (long *)0x0
     )) {
    iVar2 = (**(code **)(*plVar3 + 0x30))();
    if (iVar2 != -1) {
      return 0;
    }
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 1);
    return 0xffffffff;
  }
  return 0xffffffff;
}


==================================================================

### FUNC 003d8ca4 (220 bytes) name=FUN_003d8ca4

undefined1  [16] FUN_003d8ca4(long *param_1)

{
  undefined8 uVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  char local_8 [8];
  
  FUN_003d7624(local_8,param_1,1);
  if ((local_8[0] == '\0') ||
     ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) != 0)) {
    uVar2 = 0;
    uVar10 = 0;
    uVar9 = 0;
    uVar8 = 0;
    uVar7 = 0;
    uVar6 = 0;
    uVar4 = 0;
    uVar3 = 0;
    uVar1 = 0xffffffffffffffff;
  }
  else {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    auVar11 = (**(code **)(*plVar5 + 0x20))(plVar5,0,1,8);
    uVar2 = auVar11._8_8_;
    uVar1 = auVar11._0_8_;
    uVar4 = uVar2 >> 8 & 0xff;
    uVar6 = uVar2 >> 0x10 & 0xff;
    uVar3 = uVar2 & 0xff;
    uVar7 = uVar2 >> 0x18 & 0xff;
    uVar8 = uVar2 >> 0x20 & 0xff;
    uVar9 = uVar2 >> 0x28 & 0xff;
    uVar10 = uVar2 >> 0x30 & 0xff;
    uVar2 = uVar2 >> 0x38;
  }
  auVar11._8_8_ =
       uVar3 | uVar4 << 8 | uVar6 << 0x10 | uVar7 << 0x18 | uVar8 << 0x20 | uVar9 << 0x28 |
       uVar10 << 0x30 | uVar2 << 0x38;
  auVar11._0_8_ = uVar1;
  return auVar11;
}


==================================================================

### FUNC 003d8e04 (216 bytes) name=FUN_003d8e04

long * FUN_003d8e04(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) & 0xfffffffd);
  FUN_003d7624(local_8,param_1,1);
                    /* try { // try from 003d8e54 to 004d8e57 has its CatchHandler @ 003d973c */
  if (((local_8[0] != '\0') &&
      ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0)) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x28))(plVar2,param_2,param_3,8), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003d8f60 (216 bytes) name=FUN_003d8f60

long * FUN_003d8f60(long *param_1,undefined8 param_2,undefined4 param_3)

{
  long lVar1;
  long *plVar2;
  char local_8 [8];
  
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) & 0xfffffffd);
  FUN_003d7624(local_8,param_1,1);
  if (((local_8[0] != '\0') &&
      ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0)) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x20))(plVar2,param_2,param_3,8), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003d90bc (8 bytes) name=FUN_003d90bc

undefined1 FUN_003d90bc(undefined1 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 003d90c4 (304 bytes) name=FUN_003d90c4

long * FUN_003d90c4(long *param_1)

{
  long lVar1;
  char cVar2;
  int iVar3;
  long *plVar4;
  int *piVar5;
  long *plVar6;
  undefined1 auStack_8 [8];
  
  FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
  plVar4 = (long *)FUN_00401028(auStack_8);
  FUN_003ed708(auStack_8);
  plVar6 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  piVar5 = (int *)plVar6[2];
  if ((int *)plVar6[3] <= piVar5) goto LAB_003d9194;
  while (*piVar5 != -1) {
    while( true ) {
      cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,8);
      if (cVar2 == '\0') {
        return param_1;
      }
      piVar5 = (int *)plVar6[2];
      if (piVar5 < (int *)plVar6[3]) {
        iVar3 = *piVar5;
        plVar6[2] = (long)(piVar5 + 1);
      }
      else {
        iVar3 = (**(code **)(*plVar6 + 0x50))(plVar6);
      }
      if (iVar3 == -1) goto LAB_003d91b0;
      piVar5 = (int *)plVar6[2];
      if (piVar5 < (int *)plVar6[3]) break;
LAB_003d9194:
      iVar3 = (**(code **)(*plVar6 + 0x48))(plVar6);
      if (iVar3 == -1) goto LAB_003d91b0;
    }
  }
LAB_003d91b0:
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 2);
  return param_1;
}


==================================================================

### FUNC 003d9208 (176 bytes) name=FUN_003d9208

long * FUN_003d9208(long *param_1,int *param_2)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  int *piVar4;
  char local_8 [8];
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar4 = (int *)plVar3[2];
    if (piVar4 < (int *)plVar3[3]) {
      iVar2 = *piVar4;
      plVar3[2] = (long)(piVar4 + 1);
    }
    else {
      iVar2 = (**(code **)(*plVar3 + 0x50))();
    }
    if (iVar2 == -1) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 6);
      return param_1;
    }
    *param_2 = iVar2;
  }
  return param_1;
}


==================================================================

### FUNC 003d933c (488 bytes) name=FUN_003d933c

long * FUN_003d933c(long *param_1,int *param_2)

{
  char cVar1;
  uint uVar2;
  int iVar3;
  long *plVar4;
  int *piVar5;
  int *piVar6;
  long *plVar7;
  long lVar8;
  int *piVar9;
  long lVar10;
  char local_10 [8];
  undefined1 auStack_8 [8];
  
  FUN_003d7624(local_10,param_1,0);
  if (local_10[0] == '\0') {
    lVar10 = *param_1;
    uVar2 = 4;
  }
  else {
    lVar10 = *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
    if (lVar10 < 1) {
      lVar10 = 0x7fffffffffffffff;
    }
    FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    plVar4 = (long *)FUN_00401028(auStack_8);
    FUN_003ed708(auStack_8);
    plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((int *)plVar7[2] < (int *)plVar7[3]) {
      iVar3 = *(int *)plVar7[2];
    }
    else {
      iVar3 = (**(code **)(*plVar7 + 0x48))(plVar7);
    }
    lVar8 = 0;
LAB_003d93e0:
    piVar9 = param_2;
    if (lVar8 < lVar10 + -1) {
      while( true ) {
        param_2 = piVar9;
        if (iVar3 == -1) goto LAB_003d94dc;
        cVar1 = (**(code **)(*plVar4 + 0x10))(plVar4,8,iVar3);
        if (cVar1 != '\0') goto LAB_003d9410;
        piVar6 = (int *)plVar7[2];
        lVar8 = lVar8 + 1;
        piVar5 = (int *)plVar7[3];
        param_2 = piVar9 + 1;
        *piVar9 = iVar3;
        if (piVar6 < piVar5) {
          iVar3 = *piVar6;
          plVar7[2] = (long)(piVar6 + 1);
        }
        else {
          iVar3 = (**(code **)(*plVar7 + 0x50))(plVar7);
        }
        if (iVar3 == -1) goto LAB_003d93e0;
        if ((int *)plVar7[3] <= (int *)plVar7[2]) break;
        iVar3 = *(int *)plVar7[2];
        piVar9 = param_2;
        if (lVar10 + -1 <= lVar8) goto LAB_003d94dc;
      }
      iVar3 = (**(code **)(*plVar7 + 0x48))(plVar7);
      goto LAB_003d93e0;
    }
LAB_003d94dc:
    if (iVar3 == -1) {
      lVar10 = *param_1;
      *param_2 = 0;
      uVar2 = 6;
      if (lVar8 != 0) {
        uVar2 = 2;
      }
      *(undefined8 *)((long)param_1 + *(long *)(lVar10 + -0x18) + 0x10) = 0;
    }
    else {
LAB_003d9410:
      lVar10 = *param_1;
      *param_2 = 0;
      *(undefined8 *)((long)param_1 + *(long *)(lVar10 + -0x18) + 0x10) = 0;
      if (lVar8 != 0) {
        return param_1;
      }
      uVar2 = 4;
    }
  }
  lVar10 = (long)param_1 + *(long *)(lVar10 + -0x18);
  FUN_003d2c00(lVar10,uVar2 | *(uint *)(lVar10 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003d95d0 (128 bytes) name=FUN_003d95d0

long * FUN_003d95d0(long *param_1,undefined4 param_2)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = *(long *)(*param_1 + -0x18);
  if (*(char *)((long)param_1 + lVar2 + 0xe4) != '\0') {
    *(undefined4 *)((long)param_1 + lVar2 + 0xe0) = param_2;
    return param_1;
  }
  plVar1 = *(long **)((long)param_1 + lVar2 + 0xf0);
  if (plVar1 != (long *)0x0) {
    (**(code **)(*plVar1 + 0x50))(plVar1,0x20);
    *(undefined4 *)((long)param_1 + lVar2 + 0xe0) = param_2;
    *(undefined1 *)((long)param_1 + lVar2 + 0xe4) = 1;
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003d9650 (28 bytes) name=FUN_003d9650

void FUN_003d9650(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) | param_2;
  return;
}


==================================================================

### FUNC 003d966c (28 bytes) name=FUN_003d966c

void FUN_003d966c(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & (param_2 ^ 0xffffffff);
  return;
}


==================================================================

### FUNC 003d9688 (120 bytes) name=FUN_003d9688

void FUN_003d9688(long *param_1,int param_2)

{
  long lVar1;
  uint uVar2;
  
  lVar1 = *(long *)(*param_1 + -0x18);
  if (param_2 == 8) {
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 0x40;
    return;
  }
  if (param_2 != 10) {
    uVar2 = 8;
    if (param_2 != 0x10) {
      uVar2 = 0;
    }
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         uVar2 | *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5;
    return;
  }
  *(uint *)((long)param_1 + lVar1 + 0x18) = *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 2
  ;
  return;
}


==================================================================

### FUNC 003d9700 (24 bytes) name=FUN_003d9700

void FUN_003d9700(long *param_1,int param_2)

{
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 8) = (long)param_2;
  return;
}


==================================================================

### FUNC 003d9718 (24 bytes) name=FUN_003d9718

void FUN_003d9718(long *param_1,int param_2)

{
                    /* catch() { ... } // from try @ 003d8714 with catch @ 003d9718
                       catch() { ... } // from try @ 003d92f0 with catch @ 003d9718 */
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10) = (long)param_2;
  return;
}


==================================================================

### FUNC 003d9730 (176 bytes) name=FUN_003d9730

long * FUN_003d9730(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
                    /* try { // try from 003d9738 to 004d973b has its CatchHandler @ 003d84a4 */
                    /* catch() { ... } // from try @ 003d860c with catch @ 003d973c
                       catch() { ... } // from try @ 003d8e54 with catch @ 003d973c */
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x20))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
                    /* catch() { ... } // from try @ 003dacd4 with catch @ 003d97a4 */
  return param_1;
}


==================================================================

### FUNC 003d9864 (4 bytes) name=thunk_FUN_003d9730

long * thunk_FUN_003d9730(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x20))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9868 (176 bytes) name=FUN_003d9868

long * FUN_003d9868(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x28))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003d98fc to 004d98ff has its CatchHandler @ 003dace0 */
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d999c (4 bytes) name=thunk_FUN_003d9868

long * thunk_FUN_003d9868(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x28))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d99a0 (176 bytes) name=FUN_003d99a0

long * FUN_003d99a0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9ad4 (4 bytes) name=thunk_FUN_003d99a0

long * thunk_FUN_003d99a0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x18))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9ad8 (176 bytes) name=FUN_003d9ad8

long * FUN_003d9ad8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x30))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9c0c (4 bytes) name=thunk_FUN_003d9ad8

long * thunk_FUN_003d9ad8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x30))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9c10 (176 bytes) name=FUN_003d9c10

long * FUN_003d9c10(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003d9c4c to 004d9c4f has its CatchHandler @ 003dacb4 */
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x10))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9d44 (4 bytes) name=thunk_FUN_003d9c10

long * thunk_FUN_003d9c10(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x10))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9d48 (176 bytes) name=FUN_003d9d48

long * FUN_003d9d48(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x38))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9e7c (4 bytes) name=thunk_FUN_003d9d48

long * thunk_FUN_003d9d48(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x38))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9e80 (176 bytes) name=FUN_003d9e80

long * FUN_003d9e80(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x40))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9fb4 (4 bytes) name=thunk_FUN_003d9e80

long * thunk_FUN_003d9e80(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x40))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003d9fb8 (176 bytes) name=FUN_003d9fb8

long * FUN_003d9fb8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x48))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da0ec (4 bytes) name=thunk_FUN_003d9fb8

long * thunk_FUN_003d9fb8(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x48))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da0f0 (176 bytes) name=FUN_003da0f0

long * FUN_003da0f0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x50))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da224 (4 bytes) name=thunk_FUN_003da0f0

long * thunk_FUN_003da0f0(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x50))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da228 (176 bytes) name=FUN_003da228

long * FUN_003da228(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x58))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da35c (4 bytes) name=thunk_FUN_003da228

long * thunk_FUN_003da228(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x58))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da360 (176 bytes) name=FUN_003da360

long * FUN_003da360(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char local_8 [4];
  uint local_4;
  
  FUN_003d7624(local_8,param_1,0);
  if (local_8[0] != '\0') {
    local_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x60))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&local_4,param_2);
    if (local_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,local_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da494 (4 bytes) name=thunk_FUN_003da360

long * thunk_FUN_003da360(long *param_1,undefined8 param_2)

{
  long lVar1;
  long *plVar2;
  char acStack_8 [4];
  uint uStack_4;
  
  FUN_003d7624(acStack_8,param_1,0);
  if (acStack_8[0] != '\0') {
    uStack_4 = 0;
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar2 = *(long **)(lVar1 + 0x100);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    (**(code **)(*plVar2 + 0x60))
              (plVar2,*(undefined8 *)(lVar1 + 0xe8),0xffffffff,0,0xffffffff,lVar1,&uStack_4,param_2)
    ;
    if (uStack_4 != 0) {
      lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar1,uStack_4 | *(uint *)(lVar1 + 0x20));
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 003da498 (656 bytes) name=FUN_003da498

long * FUN_003da498(long *param_1,undefined1 *param_2,long param_3,uint param_4)

{
  size_t __n;
  byte bVar1;
  uint uVar2;
  void *pvVar3;
  ulong uVar4;
  byte *pbVar5;
  uint uVar6;
  long lVar7;
  size_t __n_00;
  long lVar8;
  byte *pbVar9;
  ulong uVar10;
  long *plVar11;
  undefined1 *__dest;
  void *__s;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] == '\0') {
LAB_003da620:
    uVar6 = 0;
LAB_003da624:
    if (0 < param_3) {
      *param_2 = 0;
    }
    if (param_1[1] == 0) {
      uVar6 = uVar6 | 4;
    }
    else if (uVar6 == 0) {
      return param_1;
    }
    lVar7 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar7,uVar6 | *(uint *)(lVar7 + 0x20));
    return param_1;
  }
  plVar11 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((byte *)plVar11[2] < (byte *)plVar11[3]) {
    uVar2 = (uint)*(byte *)plVar11[2];
  }
  else {
    uVar2 = (**(code **)(*plVar11 + 0x48))(plVar11);
  }
LAB_003da500:
  lVar7 = param_1[1];
  do {
    lVar8 = lVar7 + 1;
    __dest = param_2;
    uVar6 = uVar2;
    if (uVar2 == (param_4 & 0xff) || uVar2 == 0xffffffff) {
LAB_003da5c0:
      if (uVar2 == 0xffffffff) {
        uVar6 = 2;
        goto LAB_003da624;
      }
      uVar6 = 4;
      if ((param_4 & 0xff) != uVar2) goto LAB_003da624;
      uVar4 = plVar11[2];
      uVar10 = plVar11[3];
      param_1[1] = lVar8;
      if (uVar4 < uVar10) {
        uVar6 = 0;
        plVar11[2] = uVar4 + 1;
        goto LAB_003da624;
      }
      (**(code **)(*plVar11 + 0x50))(plVar11);
      goto LAB_003da620;
    }
    while( true ) {
      uVar2 = uVar6;
      param_2 = __dest;
      if (param_3 <= lVar8) goto LAB_003da5c0;
      __s = (void *)plVar11[2];
      __n_00 = (param_3 - lVar7) - 1;
      if (plVar11[3] - (long)__s < (long)__n_00) {
        __n_00 = plVar11[3] - (long)__s;
      }
      if ((long)__n_00 < 2) break;
      pvVar3 = memchr(__s,param_4 & 0xff,__n_00);
      __n = (long)pvVar3 - (long)__s;
      if (pvVar3 == (void *)0x0) {
        __n = __n_00;
      }
      param_2 = __dest + __n;
      memcpy(__dest,__s,__n);
      lVar8 = plVar11[2];
      lVar7 = param_1[1];
      uVar10 = plVar11[3];
      uVar4 = lVar8 + __n;
      plVar11[2] = uVar4;
      lVar7 = __n + lVar7;
      param_1[1] = lVar7;
      if (uVar10 <= uVar4) {
        uVar2 = (**(code **)(*plVar11 + 0x48))(plVar11);
        goto LAB_003da500;
      }
      bVar1 = *(byte *)(lVar8 + __n);
      uVar2 = (uint)bVar1;
      lVar8 = lVar7 + 1;
      __dest = param_2;
      uVar6 = (uint)bVar1;
      if ((uint)bVar1 == (param_4 & 0xff) || bVar1 == 0xffffffff) goto LAB_003da5c0;
    }
    *__dest = (char)uVar2;
    param_2 = __dest + 1;
    pbVar5 = (byte *)plVar11[2];
    pbVar9 = (byte *)plVar11[3];
    param_1[1] = param_1[1] + 1;
    if (pbVar5 < pbVar9) {
      pbVar5 = pbVar5 + 1;
      plVar11[2] = (long)pbVar5;
    }
    else {
      uVar2 = (**(code **)(*plVar11 + 0x50))(plVar11);
      if (uVar2 == 0xffffffff) goto LAB_003da500;
      pbVar5 = (byte *)plVar11[2];
      pbVar9 = (byte *)plVar11[3];
    }
    if (pbVar9 <= pbVar5) break;
    uVar2 = (uint)*pbVar5;
    lVar7 = param_1[1];
  } while( true );
  uVar2 = (**(code **)(*plVar11 + 0x48))(plVar11);
  goto LAB_003da500;
}


==================================================================

### FUNC 003da7b4 (660 bytes) name=FUN_003da7b4

long * FUN_003da7b4(long *param_1,long param_2,uint param_3)

{
  size_t __n;
  size_t sVar1;
  byte bVar2;
  bool bVar3;
  uint uVar4;
  uint uVar5;
  void *pvVar6;
  long *plVar7;
  byte *pbVar8;
  byte *pbVar9;
  long lVar10;
  char local_8 [8];
  
  if (param_3 == 0xffffffff) {
    plVar7 = (long *)FUN_004195b8();
    return plVar7;
  }
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if ((param_2 < 1) || (local_8[0] == '\0')) {
    return param_1;
  }
  plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((byte *)plVar7[2] < (byte *)plVar7[3]) {
    uVar5 = (uint)*(byte *)plVar7[2];
  }
  else {
    uVar5 = (**(code **)(*plVar7 + 0x48))(plVar7);
  }
  lVar10 = param_1[1];
  bVar3 = false;
LAB_003da840:
  do {
    uVar4 = uVar5;
    if (param_3 == uVar5 || uVar5 == 0xffffffff) {
LAB_003da8d0:
      if (bVar3) {
        param_1[1] = 0x7fffffffffffffff;
      }
      if (uVar5 == 0xffffffff) {
        lVar10 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2254(lVar10,*(uint *)(lVar10 + 0x20) | 2);
        return param_1;
      }
      if (param_3 != uVar5) {
        return param_1;
      }
      if (param_1[1] != 0x7fffffffffffffff) {
        param_1[1] = param_1[1] + 1;
      }
      if ((ulong)plVar7[2] < (ulong)plVar7[3]) {
        plVar7[2] = plVar7[2] + 1;
        return param_1;
      }
      (**(code **)(*plVar7 + 0x50))(plVar7);
      return param_1;
    }
    while (uVar5 = uVar4, lVar10 < param_2) {
      pbVar9 = (byte *)plVar7[3];
      pbVar8 = (byte *)plVar7[2];
      __n = param_2 - lVar10;
      if ((long)pbVar9 - (long)pbVar8 < param_2 - lVar10) {
        __n = (long)pbVar9 - (long)pbVar8;
      }
      if ((long)__n < 2) {
        param_1[1] = lVar10 + 1;
        if (pbVar8 < pbVar9) {
          pbVar8 = pbVar8 + 1;
          plVar7[2] = (long)pbVar8;
LAB_003da940:
          if (pbVar9 <= pbVar8) goto LAB_003da954;
          uVar5 = (uint)*pbVar8;
          lVar10 = param_1[1];
        }
        else {
          uVar5 = (**(code **)(*plVar7 + 0x50))(plVar7);
          if (uVar5 != 0xffffffff) {
            pbVar8 = (byte *)plVar7[2];
            pbVar9 = (byte *)plVar7[3];
            goto LAB_003da940;
          }
LAB_003da964:
          lVar10 = param_1[1];
        }
        goto LAB_003da840;
      }
      pvVar6 = memchr(pbVar8,param_3 & 0xff,__n);
      sVar1 = (long)pvVar6 - (long)pbVar8;
      if (pvVar6 == (void *)0x0) {
        sVar1 = __n;
      }
      plVar7[2] = (long)(pbVar8 + sVar1);
      lVar10 = lVar10 + sVar1;
      param_1[1] = lVar10;
      if (pbVar9 <= pbVar8 + sVar1) {
LAB_003da954:
        uVar5 = (**(code **)(*plVar7 + 0x48))(plVar7);
        goto LAB_003da964;
      }
      bVar2 = pbVar8[sVar1];
      uVar5 = (uint)bVar2;
      uVar4 = (uint)bVar2;
      if (param_3 == bVar2 || bVar2 == 0xffffffff) goto LAB_003da8d0;
    }
    if (param_2 != 0x7fffffffffffffff) goto LAB_003da8d0;
    param_1[1] = -0x8000000000000000;
    lVar10 = -0x8000000000000000;
    bVar3 = true;
  } while( true );
}


==================================================================

### FUNC 003daacc (660 bytes) name=FUN_003daacc

long * FUN_003daacc(long *param_1,undefined1 *param_2)

{
  byte *pbVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  ulong uVar6;
  byte *pbVar7;
  void *__src;
  byte *pbVar8;
  long lVar9;
  long lVar10;
  size_t __n;
  long *plVar11;
  undefined1 *__dest;
  long lVar12;
  long lVar13;
  char local_10 [8];
  undefined1 auStack_8 [8];
  
  FUN_003d4724(local_10,param_1,0);
  if (local_10[0] == '\0') {
    lVar13 = *param_1;
    uVar3 = 4;
  }
  else {
    lVar13 = *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
                    /* try { // try from 003dab24 to 004dab27 has its CatchHandler @ 003dacb4 */
    if (lVar13 < 1) {
      lVar13 = 0x7fffffffffffffff;
    }
    FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    lVar5 = FUN_003de994(auStack_8);
    FUN_003ed708(auStack_8);
    plVar11 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar11[2] < (byte *)plVar11[3]) {
      uVar6 = (ulong)*(byte *)plVar11[2];
    }
    else {
                    /* try { // try from 003dad7c to 004dad9b has its CatchHandler @ 003dad48 */
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
    }
    lVar12 = 0;
LAB_003dab70:
    uVar3 = (uint)uVar6;
    __dest = param_2;
    if (lVar12 < lVar13 + -1) {
      while( true ) {
        uVar3 = (uint)uVar6;
        param_2 = __dest;
        if (uVar3 == 0xffffffff) goto LAB_003dac9c;
        lVar10 = *(long *)(lVar5 + 0x30);
        if ((*(byte *)(lVar10 + (uVar6 & 0xff)) >> 3 & 1) != 0) goto LAB_003dab94;
        __src = (void *)plVar11[2];
        lVar9 = (lVar13 - lVar12) + -1;
        if (plVar11[3] - (long)__src < lVar9) {
          lVar9 = plVar11[3] - (long)__src;
        }
        if (lVar9 < 2) {
          *__dest = (char)uVar6;
          param_2 = __dest + 1;
          lVar12 = lVar12 + 1;
          pbVar8 = (byte *)plVar11[3];
          if ((byte *)plVar11[2] < pbVar8) {
            pbVar7 = (byte *)plVar11[2] + 1;
            plVar11[2] = (long)pbVar7;
          }
          else {
            iVar4 = (**(code **)(*plVar11 + 0x50))(plVar11);
                    /* catch() { ... } // from try @ 003dad7c with catch @ 003dad48
                       catch() { ... } // from try @ 003db394 with catch @ 003dad48
                       catch() { ... } // from try @ 003db7e8 with catch @ 003dad48
                       catch() { ... } // from try @ 003dba1c with catch @ 003dad48
                       catch() { ... } // from try @ 003dbba8 with catch @ 003dad48 */
            uVar6 = 0xffffffff;
            if (iVar4 == -1) goto LAB_003dab70;
            pbVar7 = (byte *)plVar11[2];
            pbVar8 = (byte *)plVar11[3];
          }
          if (pbVar7 < pbVar8) {
            uVar6 = (ulong)*pbVar7;
          }
          else {
            uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
          }
          goto LAB_003dab70;
        }
        pbVar8 = (byte *)((long)__src + 1);
        pbVar7 = (byte *)((long)__src + lVar9);
        if (pbVar8 < pbVar7) {
          bVar2 = *(byte *)(lVar10 + (ulong)*(byte *)((long)__src + 1));
                    /* try { // try from 003dacd4 to 004dacd7 has its CatchHandler @ 003d97a4 */
          while (((bVar2 >> 3 & 1) == 0 && (pbVar1 = pbVar8 + 1, pbVar8 = pbVar7, pbVar1 != pbVar7))
                ) {
            bVar2 = *(byte *)(lVar10 + (ulong)*pbVar1);
                    /* catch() { ... } // from try @ 003d98fc with catch @ 003dace0
                       catch() { ... } // from try @ 003da5f8 with catch @ 003dace0 */
            pbVar8 = pbVar1;
          }
        }
        __n = (long)pbVar8 - (long)__src;
        param_2 = __dest + __n;
        lVar12 = lVar12 + __n;
        memcpy(__dest,__src,__n);
        lVar10 = plVar11[2];
        uVar6 = lVar10 + __n;
        plVar11[2] = uVar6;
        if ((ulong)plVar11[3] <= uVar6) break;
        bVar2 = *(byte *)(lVar10 + __n);
        uVar6 = (ulong)bVar2;
        uVar3 = (uint)bVar2;
        __dest = param_2;
        if (lVar13 + -1 <= lVar12) goto LAB_003dac9c;
      }
      uVar6 = (**(code **)(*plVar11 + 0x48))(plVar11);
      goto LAB_003dab70;
    }
LAB_003dac9c:
    if (uVar3 == 0xffffffff) {
      *param_2 = 0;
                    /* catch() { ... } // from try @ 003d9c4c with catch @ 003dacb4
                       catch() { ... } // from try @ 003dab24 with catch @ 003dacb4 */
      lVar13 = *param_1;
      uVar3 = 6;
      if (lVar12 != 0) {
        uVar3 = 2;
      }
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
    }
    else {
LAB_003dab94:
      *param_2 = 0;
      lVar13 = *param_1;
      *(undefined8 *)((long)param_1 + *(long *)(lVar13 + -0x18) + 0x10) = 0;
      if (lVar12 != 0) {
        return param_1;
      }
      uVar3 = 4;
    }
  }
  lVar13 = (long)param_1 + *(long *)(lVar13 + -0x18);
  FUN_003d2254(lVar13,uVar3 | *(uint *)(lVar13 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003dae0c (832 bytes) name=FUN_003dae0c

long * FUN_003dae0c(long *param_1,long *param_2)

{
  byte *pbVar1;
  ulong uVar2;
  byte bVar3;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  byte *pbVar7;
  long lVar8;
  byte *pbVar9;
  long lVar10;
  long lVar11;
  long lVar12;
  ulong uVar13;
  long *plVar14;
  ulong uVar15;
  char local_10 [8];
  undefined1 auStack_8 [8];
  
  FUN_003d4724(local_10,param_1,0);
  if (local_10[0] == '\0') {
    lVar10 = *param_1;
                    /* try { // try from 003dae4c to 004dae4f has its CatchHandler @ 003dbbd8 */
    uVar4 = 4;
  }
  else {
    FUN_00412b08(param_2,0,*(undefined8 *)(*param_2 + -0x18),0);
    uVar15 = *(ulong *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
    if ((long)uVar15 < 1) {
      uVar15 = 0x3ffffffffffffff9;
    }
    FUN_003ece1c(auStack_8,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    lVar10 = FUN_003de994(auStack_8);
    FUN_003ed708(auStack_8);
    plVar14 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar14[2] < (byte *)plVar14[3]) {
      uVar6 = (ulong)*(byte *)plVar14[2];
    }
    else {
      uVar6 = (**(code **)(*plVar14 + 0x48))(plVar14);
      uVar13 = 0;
      if ((int)uVar6 == -1) {
LAB_003db0c8:
        lVar10 = *param_1;
        uVar4 = 6;
        if (uVar13 != 0) {
          uVar4 = 2;
        }
        *(undefined8 *)((long)param_1 + *(long *)(lVar10 + -0x18) + 0x10) = 0;
        goto LAB_003dae50;
      }
    }
    lVar11 = *(long *)(lVar10 + 0x30);
    uVar13 = 0;
    bVar3 = *(byte *)(lVar11 + (uVar6 & 0xff));
    while ((bVar3 >> 3 & 1) == 0) {
      lVar8 = plVar14[2];
      lVar12 = uVar15 - uVar13;
      if (plVar14[3] - lVar8 < (long)(uVar15 - uVar13)) {
        lVar12 = plVar14[3] - lVar8;
      }
                    /* try { // try from 003daf30 to 004daf33 has its CatchHandler @ 003dbc0c */
      if (lVar12 < 2) {
        lVar12 = *param_2;
        lVar11 = *(long *)(lVar12 + -0x18);
        uVar2 = lVar11 + 1;
        if ((*(ulong *)(lVar12 + -0x10) < uVar2) || (0 < *(int *)(lVar12 + -8))) {
          FUN_00410ed8(param_2,uVar2);
          lVar12 = *param_2;
          lVar11 = *(long *)(lVar12 + -0x18);
        }
        *(char *)(lVar12 + lVar11) = (char)uVar6;
        lVar11 = *param_2;
        if ((undefined *)(lVar11 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar11 + -8) = 0;
          *(ulong *)(lVar11 + -0x18) = uVar2;
          *(undefined1 *)(lVar11 + uVar2) = 0;
        }
        uVar13 = uVar13 + 1;
        pbVar9 = (byte *)plVar14[3];
        if ((byte *)plVar14[2] < pbVar9) {
          pbVar7 = (byte *)plVar14[2] + 1;
          plVar14[2] = (long)pbVar7;
        }
        else {
          iVar5 = (**(code **)(*plVar14 + 0x50))(plVar14);
          if (iVar5 == -1) goto LAB_003db0c8;
          pbVar7 = (byte *)plVar14[2];
          pbVar9 = (byte *)plVar14[3];
        }
                    /* try { // try from 003db098 to 004db13f has its CatchHandler @ 003dbbb4 */
        if (pbVar7 < pbVar9) {
          bVar3 = *pbVar7;
          goto LAB_003daf88;
        }
LAB_003db0a8:
        uVar6 = (**(code **)(*plVar14 + 0x48))(plVar14);
        uVar4 = (uint)uVar6;
        if (uVar15 <= uVar13) {
LAB_003dafd8:
          if (uVar4 != 0xffffffff) {
            *(undefined8 *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10) = 0;
                    /* try { // try from 003db024 to 004db027 has its CatchHandler @ 003dbbe8 */
            return param_1;
          }
          lVar10 = *param_1;
          uVar4 = 2;
          *(undefined8 *)((long)param_1 + *(long *)(lVar10 + -0x18) + 0x10) = 0;
                    /* try { // try from 003daff4 to 004daff7 has its CatchHandler @ 003dbbb4 */
          goto LAB_003dae50;
        }
        if (uVar4 == 0xffffffff) goto LAB_003db0c8;
      }
      else {
        pbVar9 = (byte *)(lVar8 + 1);
        pbVar7 = (byte *)(lVar8 + lVar12);
        if (pbVar9 < pbVar7) {
          bVar3 = *(byte *)(lVar11 + (ulong)*(byte *)(lVar8 + 1));
          while (((bVar3 >> 3 & 1) == 0 && (pbVar1 = pbVar9 + 1, pbVar9 = pbVar7, pbVar1 != pbVar7))
                ) {
            bVar3 = *(byte *)(lVar11 + (ulong)*pbVar1);
            pbVar9 = pbVar1;
          }
        }
        lVar12 = (long)pbVar9 - lVar8;
        FUN_00411624(param_2,lVar8,lVar12);
        lVar11 = plVar14[2];
        uVar13 = uVar13 + lVar12;
        uVar6 = lVar11 + lVar12;
        plVar14[2] = uVar6;
        if ((ulong)plVar14[3] <= uVar6) goto LAB_003db0a8;
        bVar3 = *(byte *)(lVar11 + lVar12);
LAB_003daf88:
        uVar6 = (ulong)bVar3;
        uVar4 = (uint)bVar3;
        if (uVar15 <= uVar13) goto LAB_003dafd8;
      }
      lVar11 = *(long *)(lVar10 + 0x30);
      bVar3 = *(byte *)(lVar11 + (uVar6 & 0xff));
    }
    lVar10 = *param_1;
    *(undefined8 *)((long)param_1 + *(long *)(lVar10 + -0x18) + 0x10) = 0;
    if (uVar13 != 0) {
      return param_1;
    }
    uVar4 = 4;
  }
LAB_003dae50:
                    /* try { // try from 003dae54 to 004daebf has its CatchHandler @ 003dbbac */
  lVar10 = (long)param_1 + *(long *)(lVar10 + -0x18);
  FUN_003d2254(lVar10,uVar4 | *(uint *)(lVar10 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003db200 (704 bytes) name=FUN_003db200

long * FUN_003db200(long *param_1,long *param_2,byte param_3)

{
  ulong uVar1;
  size_t sVar2;
  size_t __n;
  uint uVar3;
  uint uVar4;
  int iVar5;
  void *pvVar6;
  long lVar7;
  byte *pbVar8;
  long lVar9;
  byte *pbVar10;
  long *plVar11;
  ulong uVar12;
  void *__s;
  char local_8 [8];
  
  FUN_003d4724(local_8,param_1,1);
  if (local_8[0] != '\0') {
    FUN_00412b08(param_2,0,*(undefined8 *)(*param_2 + -0x18),0);
    plVar11 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar11[2] < (byte *)plVar11[3]) {
      uVar3 = (uint)*(byte *)plVar11[2];
    }
    else {
      uVar3 = (**(code **)(*plVar11 + 0x48))(plVar11);
    }
    uVar12 = 0;
    do {
      while( true ) {
        uVar4 = uVar3;
        if ((uVar4 == 0xffffffff) || (param_3 == uVar4)) {
          if (uVar4 != 0xffffffff) goto LAB_003db3f4;
          uVar3 = 6;
          if (uVar12 != 0) {
            uVar3 = 2;
          }
          goto LAB_003db244;
        }
        __s = (void *)plVar11[2];
        __n = 0x3ffffffffffffff9 - uVar12;
        if (plVar11[3] - (long)__s < (long)(0x3ffffffffffffff9 - uVar12)) {
          __n = plVar11[3] - (long)__s;
        }
        if ((long)__n < 2) break;
        pvVar6 = memchr(__s,(uint)param_3,__n);
        sVar2 = (long)pvVar6 - (long)__s;
        if (pvVar6 == (void *)0x0) {
          sVar2 = __n;
        }
                    /* try { // try from 003db2f4 to 004db2f7 has its CatchHandler @ 003dbbac */
        FUN_00411624(param_2,__s,sVar2);
        lVar7 = plVar11[2];
        uVar12 = uVar12 + sVar2;
        uVar1 = lVar7 + sVar2;
        plVar11[2] = uVar1;
        if (uVar1 < (ulong)plVar11[3]) {
          uVar4 = (uint)*(byte *)(lVar7 + sVar2);
        }
        else {
LAB_003db424:
          uVar4 = (**(code **)(*plVar11 + 0x48))(plVar11);
        }
LAB_003db318:
        uVar3 = uVar4;
        if (0x3ffffffffffffff8 < uVar12) goto LAB_003db3dc;
      }
      lVar9 = *param_2;
      lVar7 = *(long *)(lVar9 + -0x18);
                    /* try { // try from 003db368 to 004db36b has its CatchHandler @ 003dbc14 */
      uVar1 = lVar7 + 1;
      if ((*(ulong *)(lVar9 + -0x10) < uVar1) || (0 < *(int *)(lVar9 + -8))) {
        FUN_00410ed8(param_2,uVar1);
        lVar9 = *param_2;
        lVar7 = *(long *)(lVar9 + -0x18);
      }
                    /* try { // try from 003db394 to 004db3e7 has its CatchHandler @ 003dad48 */
      *(char *)(lVar9 + lVar7) = (char)uVar4;
      lVar7 = *param_2;
      if ((undefined *)(lVar7 + -0x18) != PTR_DAT_00501f30) {
        *(undefined4 *)(lVar7 + -8) = 0;
        *(ulong *)(lVar7 + -0x18) = uVar1;
        *(undefined1 *)(lVar7 + uVar1) = 0;
      }
      uVar12 = uVar12 + 1;
      pbVar10 = (byte *)plVar11[3];
      if ((byte *)plVar11[2] < pbVar10) {
        pbVar8 = (byte *)plVar11[2] + 1;
        plVar11[2] = (long)pbVar8;
      }
      else {
        iVar5 = (**(code **)(*plVar11 + 0x50))(plVar11);
        uVar4 = 0xffffffff;
        if (iVar5 == -1) goto LAB_003db318;
        pbVar8 = (byte *)plVar11[2];
        pbVar10 = (byte *)plVar11[3];
      }
      if (pbVar10 <= pbVar8) goto LAB_003db424;
      uVar4 = (uint)*pbVar8;
      uVar3 = (uint)*pbVar8;
    } while (uVar12 < 0x3ffffffffffffff9);
LAB_003db3dc:
    if (uVar4 == 0xffffffff) {
      uVar3 = 2;
      goto LAB_003db244;
    }
LAB_003db3f4:
    if (param_3 != uVar4) {
      uVar3 = 4;
      goto LAB_003db244;
    }
    if ((ulong)plVar11[2] < (ulong)plVar11[3]) {
      plVar11[2] = plVar11[2] + 1;
    }
    else {
      (**(code **)(*plVar11 + 0x50))(plVar11);
    }
    if (uVar12 != 0xffffffffffffffff) {
      return param_1;
    }
  }
  uVar3 = 4;
LAB_003db244:
  lVar7 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar7,uVar3 | *(uint *)(lVar7 + 0x20));
  return param_1;
}


==================================================================

### FUNC 003db554 (664 bytes) name=FUN_003db554

long * FUN_003db554(long *param_1,wchar_t *param_2,long param_3,wchar_t param_4)

{
  wchar_t wVar1;
  wchar_t *pwVar2;
  ulong uVar3;
  uint uVar4;
  long lVar5;
  size_t __n;
  wchar_t *pwVar6;
  long lVar7;
  ulong uVar8;
  size_t sVar9;
  long *plVar10;
  char local_8 [8];
  
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] == '\0') {
LAB_003db6e0:
    lVar5 = param_1[1];
    uVar4 = 0;
LAB_003db6e8:
    if (0 < param_3) {
      *param_2 = L'\0';
    }
                    /* try { // try from 003db6f4 to 004db6f7 has its CatchHandler @ 003dbc0c */
    if (lVar5 == 0) {
      uVar4 = uVar4 | 4;
    }
    else {
                    /* try { // try from 003db730 to 004db733 has its CatchHandler @ 003dbb28 */
      if (uVar4 == 0) {
                    /* try { // try from 003db738 to 004db73b has its CatchHandler @ 003dbc0c */
        return param_1;
      }
    }
    lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar5,uVar4 | *(uint *)(lVar5 + 0x20));
    return param_1;
  }
  plVar10 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((wchar_t *)plVar10[2] < (wchar_t *)plVar10[3]) {
    wVar1 = *(wchar_t *)plVar10[2];
  }
  else {
                    /* try { // try from 003db7e8 to 004db7eb has its CatchHandler @ 003dad48 */
    wVar1 = (**(code **)(*plVar10 + 0x48))(plVar10);
                    /* try { // try from 003db7f8 to 004db7fb has its CatchHandler @ 003dbbac */
  }
LAB_003db5b8:
  do {
    lVar5 = param_1[1];
LAB_003db5bc:
    lVar7 = lVar5 + 1;
    if (param_4 == wVar1 || wVar1 == L'\xffffffff') {
LAB_003db67c:
      if (wVar1 == L'\xffffffff') {
        uVar4 = 2;
        goto LAB_003db6e8;
      }
      uVar4 = 4;
      if (param_4 != wVar1) goto LAB_003db6e8;
      uVar3 = plVar10[2];
      uVar8 = plVar10[3];
      param_1[1] = lVar7;
      if (uVar3 < uVar8) {
        plVar10[2] = uVar3 + 4;
        uVar4 = 0;
        lVar5 = lVar7;
        goto LAB_003db6e8;
      }
                    /* try { // try from 003db80c to 004db80f has its CatchHandler @ 003dbc14 */
      (**(code **)(*plVar10 + 0x50))(plVar10);
      goto LAB_003db6e0;
    }
    while( true ) {
      if (param_3 <= lVar7) goto LAB_003db67c;
      pwVar6 = (wchar_t *)plVar10[3];
      pwVar2 = (wchar_t *)plVar10[2];
      __n = (param_3 - lVar5) - 1;
      sVar9 = (long)pwVar6 - (long)pwVar2 >> 2;
      if ((long)sVar9 < (long)__n) {
        __n = sVar9;
      }
      if ((long)__n < 2) break;
      pwVar2 = wmemchr(pwVar2,param_4,__n);
      if (pwVar2 != (wchar_t *)0x0) {
        __n = (long)pwVar2 - plVar10[2] >> 2;
      }
      wmemcpy(param_2,(wchar_t *)plVar10[2],__n);
      lVar7 = plVar10[2];
      lVar5 = param_1[1];
      param_2 = param_2 + __n;
      uVar8 = plVar10[3];
      uVar3 = lVar7 + __n * 4;
      plVar10[2] = uVar3;
      lVar5 = __n + lVar5;
      param_1[1] = lVar5;
      if (uVar8 <= uVar3) {
        wVar1 = (**(code **)(*plVar10 + 0x48))(plVar10);
        goto LAB_003db5b8;
      }
      wVar1 = *(wchar_t *)(lVar7 + __n * 4);
      lVar7 = lVar5 + 1;
      if (param_4 == wVar1 || wVar1 == L'\xffffffff') goto LAB_003db67c;
    }
    *param_2 = wVar1;
    param_1[1] = lVar7;
    param_2 = param_2 + 1;
    if (pwVar2 < pwVar6) {
      wVar1 = *pwVar2;
      plVar10[2] = (long)(pwVar2 + 1);
    }
    else {
      wVar1 = (**(code **)(*plVar10 + 0x50))(plVar10);
                    /* try { // try from 003db7c8 to 004db7cb has its CatchHandler @ 003dbbac */
    }
    if (wVar1 == L'\xffffffff') {
      lVar5 = param_1[1];
      wVar1 = L'\xffffffff';
      goto LAB_003db5bc;
    }
                    /* try { // try from 003db774 to 004db783 has its CatchHandler @ 003dbbb4 */
    if ((wchar_t *)plVar10[2] < (wchar_t *)plVar10[3]) {
      wVar1 = *(wchar_t *)plVar10[2];
      lVar5 = param_1[1];
      goto LAB_003db5bc;
    }
                    /* try { // try from 003db7d4 to 004db7d7 has its CatchHandler @ 003dbc14 */
    wVar1 = (**(code **)(*plVar10 + 0x48))(plVar10);
  } while( true );
}


==================================================================

### FUNC 003db878 (664 bytes) name=FUN_003db878

long * FUN_003db878(long *param_1,long param_2,wchar_t param_3)

{
  ulong uVar1;
  bool bVar2;
  wchar_t wVar3;
  wchar_t *pwVar4;
  long lVar5;
  size_t sVar6;
  long lVar7;
  wchar_t *pwVar8;
  ulong uVar9;
  size_t __n;
  long *plVar10;
  char local_8 [8];
  
  if (param_3 == L'\xffffffff') {
    plVar10 = (long *)FUN_00419824();
    return plVar10;
  }
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if ((param_2 < 1) || (local_8[0] == '\0')) {
    return param_1;
  }
  plVar10 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((wchar_t *)plVar10[2] < (wchar_t *)plVar10[3]) {
    wVar3 = *(wchar_t *)plVar10[2];
  }
  else {
                    /* try { // try from 003dbaec to 004dbaef has its CatchHandler @ 003dbc14 */
    wVar3 = (**(code **)(*plVar10 + 0x48))(plVar10);
  }
  lVar5 = param_1[1];
                    /* try { // try from 003db8f0 to 004db8f3 has its CatchHandler @ 003dbc0c */
  bVar2 = false;
LAB_003db8fc:
  do {
    if (param_3 == wVar3 || wVar3 == L'\xffffffff') {
LAB_003db998:
      if (bVar2) {
        param_1[1] = 0x7fffffffffffffff;
      }
      if (wVar3 == L'\xffffffff') {
        lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 2);
                    /* try { // try from 003dbae0 to 004dbae3 has its CatchHandler @ 003dbbac */
        return param_1;
      }
      if (param_3 != wVar3) {
        return param_1;
      }
      if (param_1[1] != 0x7fffffffffffffff) {
        param_1[1] = param_1[1] + 1;
      }
      if ((ulong)plVar10[2] < (ulong)plVar10[3]) {
        plVar10[2] = plVar10[2] + 4;
        return param_1;
      }
      (**(code **)(*plVar10 + 0x50))(plVar10);
      return param_1;
    }
    while (lVar5 < param_2) {
      pwVar8 = (wchar_t *)plVar10[3];
      pwVar4 = (wchar_t *)plVar10[2];
      sVar6 = (long)pwVar8 - (long)pwVar4 >> 2;
      __n = param_2 - lVar5;
      if ((long)sVar6 < param_2 - lVar5) {
        __n = sVar6;
      }
      if ((long)__n < 2) {
                    /* try { // try from 003db9f0 to 004db9f3 has its CatchHandler @ 003dbc14 */
        param_1[1] = lVar5 + 1;
        if (pwVar4 < pwVar8) {
          wVar3 = *pwVar4;
          plVar10[2] = (long)(pwVar4 + 1);
        }
        else {
          wVar3 = (**(code **)(*plVar10 + 0x50))(plVar10);
        }
        if (wVar3 == L'\xffffffff') {
          lVar5 = param_1[1];
          wVar3 = L'\xffffffff';
        }
        else if ((wchar_t *)plVar10[2] < (wchar_t *)plVar10[3]) {
          wVar3 = *(wchar_t *)plVar10[2];
                    /* try { // try from 003dba1c to 004dba1f has its CatchHandler @ 003dad48 */
          lVar5 = param_1[1];
        }
        else {
LAB_003dba24:
          wVar3 = (**(code **)(*plVar10 + 0x48))(plVar10);
          lVar5 = param_1[1];
        }
        goto LAB_003db8fc;
      }
      pwVar4 = wmemchr(pwVar4,param_3,__n);
      lVar7 = plVar10[2];
      if (pwVar4 != (wchar_t *)0x0) {
        __n = (long)pwVar4 - lVar7 >> 2;
      }
      lVar5 = param_1[1];
      uVar1 = lVar7 + __n * 4;
      uVar9 = plVar10[3];
      plVar10[2] = uVar1;
      lVar5 = __n + lVar5;
      param_1[1] = lVar5;
      if (uVar9 <= uVar1) goto LAB_003dba24;
                    /* try { // try from 003db97c to 004db97f has its CatchHandler @ 003dbbac */
      wVar3 = *(wchar_t *)(lVar7 + __n * 4);
      if (param_3 == wVar3 || wVar3 == L'\xffffffff') goto LAB_003db998;
    }
    if (param_2 != 0x7fffffffffffffff) goto LAB_003db998;
    param_1[1] = -0x8000000000000000;
    lVar5 = -0x8000000000000000;
    bVar2 = true;
  } while( true );
}


==================================================================

### FUNC 003dbb94 (716 bytes) name=FUN_003dbb94

long * FUN_003dbb94(long *param_1,long *param_2,wchar_t param_3)

{
  ulong uVar1;
  wchar_t wVar2;
  wchar_t *pwVar3;
  uint uVar4;
  size_t sVar5;
  long lVar6;
  wchar_t *pwVar7;
  long lVar8;
  size_t __n;
  long *plVar9;
  ulong uVar10;
  char local_8 [8];
  
                    /* try { // try from 003dbba8 to 004dbbab has its CatchHandler @ 003dad48 */
                    /* catch() { ... } // from try @ 003dae08 with catch @ 003dbbac
                       catch() { ... } // from try @ 003dae54 with catch @ 003dbbac
                       catch() { ... } // from try @ 003db2f4 with catch @ 003dbbac
                       catch() { ... } // from try @ 003db7c8 with catch @ 003dbbac
                       catch() { ... } // from try @ 003db7f8 with catch @ 003dbbac
                       catch() { ... } // from try @ 003db97c with catch @ 003dbbac
                       catch() { ... } // from try @ 003dbae0 with catch @ 003dbbac */
                    /* catch() { ... } // from try @ 003daff4 with catch @ 003dbbb4
                       catch() { ... } // from try @ 003db098 with catch @ 003dbbb4
                       catch() { ... } // from try @ 003db774 with catch @ 003dbbb4
                       catch() { ... } // from try @ 003db85c with catch @ 003dbbb4 */
  FUN_003d7624(local_8,param_1,1);
  if (local_8[0] != '\0') {
                    /* catch() { ... } // from try @ 003dada0 with catch @ 003dbc14
                       catch() { ... } // from try @ 003db368 with catch @ 003dbc14
                       catch() { ... } // from try @ 003db7d4 with catch @ 003dbc14
                       catch() { ... } // from try @ 003db80c with catch @ 003dbc14
                       catch() { ... } // from try @ 003db9f0 with catch @ 003dbc14
                       catch() { ... } // from try @ 003dbaec with catch @ 003dbc14 */
    FUN_00416540(param_2,0,*(undefined8 *)(*param_2 + -0x18),0);
                    /* catch() { ... } // from try @ 003dbc60 with catch @ 003dbc30
                       catch() { ... } // from try @ 003dc244 with catch @ 003dbc30
                       catch() { ... } // from try @ 003dc508 with catch @ 003dbc30
                       catch() { ... } // from try @ 003dc594 with catch @ 003dbc30 */
    plVar9 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((wchar_t *)plVar9[2] < (wchar_t *)plVar9[3]) {
      wVar2 = *(wchar_t *)plVar9[2];
    }
    else {
      wVar2 = (**(code **)(*plVar9 + 0x48))(plVar9);
                    /* try { // try from 003dbe44 to 004dbe47 has its CatchHandler @ 003dc5a8 */
    }
    uVar10 = 0;
    do {
      while( true ) {
        if ((wVar2 == L'\xffffffff') || (param_3 == wVar2)) {
                    /* try { // try from 003dbd94 to 004dbd97 has its CatchHandler @ 003dc54c */
          if (wVar2 != L'\xffffffff') goto LAB_003dbd9c;
          uVar4 = 6;
          if (uVar10 != 0) {
            uVar4 = 2;
          }
          goto LAB_003dbbd8;
        }
        pwVar7 = (wchar_t *)plVar9[3];
        pwVar3 = (wchar_t *)plVar9[2];
        sVar5 = (long)pwVar7 - (long)pwVar3 >> 2;
                    /* try { // try from 003dbce0 to 004dbce3 has its CatchHandler @ 003dc608 */
        __n = 0xffffffffffffffe - uVar10;
        if ((long)sVar5 < (long)(0xffffffffffffffe - uVar10)) {
          __n = sVar5;
        }
        if ((long)__n < 2) break;
                    /* try { // try from 003dbc60 to 004dbc7f has its CatchHandler @ 003dbc30 */
        pwVar3 = wmemchr(pwVar3,param_3,__n);
        if (pwVar3 != (wchar_t *)0x0) {
          __n = (long)pwVar3 - plVar9[2] >> 2;
        }
                    /* try { // try from 003dbc84 to 004dbca3 has its CatchHandler @ 003dc610 */
        FUN_00418664(param_2,plVar9[2],__n);
        lVar6 = plVar9[2];
        uVar10 = uVar10 + __n;
        uVar1 = lVar6 + __n * 4;
        plVar9[2] = uVar1;
        if (uVar1 < (ulong)plVar9[3]) {
          wVar2 = *(wchar_t *)(lVar6 + __n * 4);
        }
        else {
LAB_003dbdcc:
          wVar2 = (**(code **)(*plVar9 + 0x48))(plVar9);
        }
LAB_003dbca8:
        if (0xffffffffffffffd < uVar10) goto LAB_003dbd84;
      }
      lVar6 = *param_2;
      lVar8 = *(long *)(lVar6 + -0x18);
      uVar1 = lVar8 + 1;
      if ((*(ulong *)(lVar6 + -0x10) < uVar1) || (0 < *(int *)(lVar6 + -8))) {
                    /* try { // try from 003dbd1c to 004dbd1f has its CatchHandler @ 003dc598 */
        FUN_00418208(param_2,uVar1);
        lVar6 = *param_2;
                    /* try { // try from 003dbd24 to 004dbd53 has its CatchHandler @ 003dc608 */
        pwVar3 = (wchar_t *)plVar9[2];
        pwVar7 = (wchar_t *)plVar9[3];
        lVar8 = *(long *)(lVar6 + -0x18);
      }
      *(wchar_t *)(lVar6 + lVar8 * 4) = wVar2;
      if ((ulong *)(lVar6 + -0x18) != (ulong *)PTR_DAT_00501ab8) {
        *(undefined4 *)(lVar6 + -8) = 0;
        *(ulong *)(lVar6 + -0x18) = uVar1;
        *(undefined4 *)(lVar6 + uVar1 * 4) = 0;
      }
      uVar10 = uVar10 + 1;
      if (pwVar3 < pwVar7) {
        wVar2 = *pwVar3;
        plVar9[2] = (long)(pwVar3 + 1);
      }
      else {
        wVar2 = (**(code **)(*plVar9 + 0x50))(plVar9);
      }
      if (wVar2 == L'\xffffffff') goto LAB_003dbca8;
      if ((wchar_t *)plVar9[3] <= (wchar_t *)plVar9[2]) goto LAB_003dbdcc;
      wVar2 = *(wchar_t *)plVar9[2];
    } while (uVar10 < 0xffffffffffffffe);
LAB_003dbd84:
    if (wVar2 == L'\xffffffff') {
      uVar4 = 2;
      goto LAB_003dbbd8;
    }
LAB_003dbd9c:
                    /* try { // try from 003dbd9c to 004dbdfb has its CatchHandler @ 003dc608 */
    if (param_3 != wVar2) {
      uVar4 = 4;
      goto LAB_003dbbd8;
    }
    if ((ulong)plVar9[2] < (ulong)plVar9[3]) {
      plVar9[2] = plVar9[2] + 4;
    }
    else {
      (**(code **)(*plVar9 + 0x50))(plVar9);
    }
    if (uVar10 != 0xffffffffffffffff) {
      return param_1;
    }
  }
  uVar4 = 4;
LAB_003dbbd8:
                    /* catch() { ... } // from try @ 003dae4c with catch @ 003dbbd8 */
  lVar6 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003db024 with catch @ 003dbbe8 */
  FUN_003d2c00(lVar6,uVar4 | *(uint *)(lVar6 + 0x20));
                    /* catch() { ... } // from try @ 003daf30 with catch @ 003dbc0c
                       catch() { ... } // from try @ 003db1e0 with catch @ 003dbc0c
                       catch() { ... } // from try @ 003db6f4 with catch @ 003dbc0c
                       catch() { ... } // from try @ 003db738 with catch @ 003dbc0c
                       catch() { ... } // from try @ 003db828 with catch @ 003dbc0c
                       catch() { ... } // from try @ 003db8f0 with catch @ 003dbc0c */
  return param_1;
}


==================================================================

### FUNC 003dbef4 (160 bytes) name=FUN_003dbef4

void FUN_003dbef4(long *param_1,long *param_2)

{
  undefined8 *puVar1;
  long *plVar2;
  long lVar3;
  long *plVar4;
  
  plVar2 = (long *)*param_1;
  if (plVar2 == param_1) {
    plVar4 = (long *)*param_2;
    if (plVar4 != param_2) {
      puVar1 = (undefined8 *)param_2[1];
      plVar2[1] = (long)puVar1;
      *plVar2 = (long)plVar4;
      *puVar1 = plVar2;
      plVar4[1] = (long)plVar2;
      param_2[1] = (long)param_2;
      *param_2 = (long)param_2;
      return;
    }
  }
  else {
    plVar4 = (long *)*param_2;
    if (plVar4 == param_2) {
      puVar1 = (undefined8 *)param_1[1];
      plVar4[1] = (long)puVar1;
      *plVar4 = (long)plVar2;
      *puVar1 = plVar4;
      plVar2[1] = (long)plVar4;
      param_1[1] = (long)param_1;
      *param_1 = (long)param_1;
      return;
    }
    *param_1 = (long)plVar4;
    *param_2 = (long)plVar2;
    lVar3 = param_1[1];
    param_1[1] = param_2[1];
    param_2[1] = lVar3;
    lVar3 = *param_1;
    *(long **)param_1[1] = param_1;
    *(long **)(lVar3 + 8) = param_1;
    lVar3 = *param_2;
    *(long **)param_2[1] = param_2;
    *(long **)(lVar3 + 8) = param_2;
  }
  return;
}


==================================================================

### FUNC 003dbf94 (52 bytes) name=FUN_003dbf94

void FUN_003dbf94(long param_1,long param_2,long param_3)

{
  long *plVar1;
  long *plVar2;
  long *plVar3;
  
  if (param_1 != param_3) {
    plVar2 = *(long **)(param_3 + 8);
    plVar3 = *(long **)(param_2 + 8);
    plVar1 = *(long **)(param_1 + 8);
    *plVar2 = param_1;
    *plVar3 = param_3;
    *plVar1 = param_2;
    *(long **)(param_1 + 8) = plVar2;
    *(undefined8 *)(param_3 + 8) = *(undefined8 *)(param_2 + 8);
    *(long **)(param_2 + 8) = plVar1;
  }
  return;
}


==================================================================

### FUNC 003dbfc8 (36 bytes) name=FUN_003dbfc8

void FUN_003dbfc8(long *param_1)

{
  long *plVar1;
  long *plVar2;
  
  plVar1 = param_1;
  do {
    plVar2 = (long *)*plVar1;
    *plVar1 = plVar1[1];
    plVar1[1] = (long)plVar2;
    plVar1 = plVar2;
  } while (param_1 != plVar2);
  return;
}


==================================================================

### FUNC 003dbfec (28 bytes) name=FUN_003dbfec

void FUN_003dbfec(long *param_1,long param_2)

{
  param_1[1] = *(long *)(param_2 + 8);
  *param_1 = param_2;
  **(long **)(param_2 + 8) = (long)param_1;
  *(long **)(param_2 + 8) = param_1;
  return;
}


==================================================================

### FUNC 003dc008 (20 bytes) name=FUN_003dc008

void FUN_003dc008(long *param_1)

{
  long lVar1;
  long *plVar2;
  
  plVar2 = (long *)param_1[1];
  lVar1 = *param_1;
  *plVar2 = lVar1;
  *(long **)(lVar1 + 8) = plVar2;
  return;
}


==================================================================

### FUNC 003dc01c (12 bytes) name=FUN_003dc01c

undefined1 FUN_003dc01c(long param_1)

{
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x21);
}


==================================================================

### FUNC 003dc028 (12 bytes) name=FUN_003dc028

undefined1 FUN_003dc028(long param_1)

{
                    /* try { // try from 003dc02c to 004dc0c7 has its CatchHandler @ 003dc5a8 */
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x22);
}


==================================================================

### FUNC 003dc034 (12 bytes) name=FUN_003dc034

undefined4 FUN_003dc034(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x58);
}


==================================================================

### FUNC 003dc040 (12 bytes) name=FUN_003dc040

undefined4 FUN_003dc040(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x5c);
}


==================================================================

### FUNC 003dc04c (12 bytes) name=FUN_003dc04c

undefined4 FUN_003dc04c(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60);
}


==================================================================

### FUNC 003dc058 (12 bytes) name=FUN_003dc058

undefined1 FUN_003dc058(long param_1)

{
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x21);
}


==================================================================

### FUNC 003dc064 (12 bytes) name=FUN_003dc064

undefined1 FUN_003dc064(long param_1)

{
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x22);
}


==================================================================

### FUNC 003dc070 (12 bytes) name=FUN_003dc070

undefined4 FUN_003dc070(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x58);
}


==================================================================

### FUNC 003dc07c (12 bytes) name=FUN_003dc07c

undefined4 FUN_003dc07c(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x5c);
}


==================================================================

### FUNC 003dc088 (12 bytes) name=FUN_003dc088

undefined4 FUN_003dc088(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60);
}


==================================================================

### FUNC 003dc094 (16 bytes) name=FUN_003dc094

void FUN_003dc094(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7e70;
  FUN_003f0114();
  return;
}


==================================================================

### FUNC 003dc0a4 (16 bytes) name=FUN_003dc0a4

void FUN_003dc0a4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7ee0;
  FUN_003f005c();
  return;
}


==================================================================

### FUNC 003dc0b4 (12 bytes) name=FUN_003dc0b4

undefined1 FUN_003dc0b4(long param_1)

{
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x48);
}


==================================================================

### FUNC 003dc0c0 (12 bytes) name=FUN_003dc0c0

undefined1 FUN_003dc0c0(long param_1)

{
  return *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x49);
}


==================================================================

### FUNC 003dc0cc (16 bytes) name=FUN_003dc0cc

void FUN_003dc0cc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7d00;
  FUN_003f0724();
  return;
}


==================================================================

### FUNC 003dc0dc (8 bytes) name=FUN_003dc0dc

undefined8 FUN_003dc0dc(void)

{
  return 0;
}


==================================================================

### FUNC 003dc0e4 (8 bytes) name=FUN_003dc0e4

undefined8 FUN_003dc0e4(void)

{
  return 0;
}


==================================================================

### FUNC 003dc0ec (4 bytes) name=FUN_003dc0ec

void FUN_003dc0ec(void)

{
  return;
}


==================================================================

### FUNC 003dc0f0 (36 bytes) name=FUN_003dc0f0

ulong FUN_003dc0f0(undefined8 param_1,byte *param_2,byte *param_3)

{
  ulong uVar1;
  byte *pbVar2;
  
  uVar1 = 0;
  if (param_2 < param_3) {
    do {
      pbVar2 = param_2 + 1;
      uVar1 = (ulong)*param_2 + (uVar1 >> 0x39 | uVar1 << 7);
      param_2 = pbVar2;
    } while (pbVar2 != param_3);
  }
  return uVar1;
}


==================================================================

### FUNC 003dc114 (16 bytes) name=FUN_003dc114

void FUN_003dc114(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7f50;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc124 (16 bytes) name=FUN_003dc124

void FUN_003dc124(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7f80;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc134 (16 bytes) name=FUN_003dc134

void FUN_003dc134(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7d50;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc144 (16 bytes) name=FUN_003dc144

void FUN_003dc144(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7dd0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc154 (16 bytes) name=FUN_003dc154

void FUN_003dc154(undefined8 *param_1)

{
                    /* try { // try from 003dc15c to 004dc15f has its CatchHandler @ 003dc608 */
  *param_1 = &PTR_FUN_004f7e30;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc164 (16 bytes) name=FUN_003dc164

void FUN_003dc164(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7fb0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc174 (16 bytes) name=FUN_003dc174

void FUN_003dc174(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7fb0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc184 (16 bytes) name=FUN_003dc184

void FUN_003dc184(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8010;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc194 (16 bytes) name=FUN_003dc194

void FUN_003dc194(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8010;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003dc1a4 (48 bytes) name=FUN_003dc1a4

undefined8 FUN_003dc1a4(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
                    /* try { // try from 003dc1d0 to 004dc1d3 has its CatchHandler @ 003dc610 */
  return param_1;
}


==================================================================

### FUNC 003dc1d4 (48 bytes) name=FUN_003dc1d4

undefined8 FUN_003dc1d4(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x28),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc204 (48 bytes) name=FUN_003dc204

undefined8 FUN_003dc204(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x38),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc234 (48 bytes) name=FUN_003dc234

undefined8 FUN_003dc234(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
                    /* try { // try from 003dc244 to 004dc277 has its CatchHandler @ 003dbc30 */
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x48),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc264 (48 bytes) name=FUN_003dc264

undefined8 FUN_003dc264(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
                    /* try { // try from 003dc280 to 004dc283 has its CatchHandler @ 003dc610 */
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
                    /* try { // try from 003dc28c to 004dc28f has its CatchHandler @ 003dc608 */
  return param_1;
}


==================================================================

### FUNC 003dc294 (48 bytes) name=FUN_003dc294

undefined8 FUN_003dc294(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x28),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc2c4 (48 bytes) name=FUN_003dc2c4

undefined8 FUN_003dc2c4(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x38),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc2f4 (48 bytes) name=FUN_003dc2f4

undefined8 FUN_003dc2f4(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x48),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc324 (48 bytes) name=FUN_003dc324

undefined8 FUN_003dc324(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc354 (48 bytes) name=FUN_003dc354

undefined8 FUN_003dc354(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x28),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc384 (48 bytes) name=FUN_003dc384

undefined8 FUN_003dc384(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x38),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003dc3b4 (100 bytes) name=FUN_003dc3b4

void FUN_003dc3b4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f80b0;
  if (*(char *)((long)param_1 + 0x6f) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[5] != (void *)0x0) {
      operator_delete__((void *)param_1[5]);
    }
    if ((void *)param_1[7] != (void *)0x0) {
      operator_delete__((void *)param_1[7]);
    }
    if ((void *)param_1[9] != (void *)0x0) {
      operator_delete__((void *)param_1[9]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc418 (100 bytes) name=FUN_003dc418

void FUN_003dc418(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f80d0;
  if (*(char *)((long)param_1 + 0x6f) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[5] != (void *)0x0) {
      operator_delete__((void *)param_1[5]);
    }
    if ((void *)param_1[7] != (void *)0x0) {
      operator_delete__((void *)param_1[7]);
    }
    if ((void *)param_1[9] != (void *)0x0) {
      operator_delete__((void *)param_1[9]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc47c (88 bytes) name=FUN_003dc47c

void FUN_003dc47c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f80f0;
  if (*(char *)(param_1 + 0x11) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[5] != (void *)0x0) {
      operator_delete__((void *)param_1[5]);
    }
    if ((void *)param_1[7] != (void *)0x0) {
      operator_delete__((void *)param_1[7]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc4d4 (36 bytes) name=FUN_003dc4d4

void FUN_003dc4d4(void *param_1)

{
                    /* try { // try from 003dc4e4 to 004dc4e7 has its CatchHandler @ 003dc5e4 */
  FUN_003dc3b4();
                    /* try { // try from 003dc4f4 to 004dc4f7 has its CatchHandler @ 003dc608 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc4f8 (36 bytes) name=FUN_003dc4f8

void FUN_003dc4f8(void *param_1)

{
                    /* try { // try from 003dc508 to 004dc50b has its CatchHandler @ 003dbc30 */
  FUN_003dc418();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc51c (48 bytes) name=FUN_003dc51c

void FUN_003dc51c(undefined8 *param_1)

{
                    /* try { // try from 003dc51c to 004dc51f has its CatchHandler @ 003dc610 */
  *param_1 = &PTR_FUN_004f7e70;
                    /* try { // try from 003dc538 to 004dc53b has its CatchHandler @ 003dc5a8 */
  FUN_003f0114();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc54c (48 bytes) name=FUN_003dc54c

void FUN_003dc54c(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 003dbd94 with catch @ 003dc54c */
  *param_1 = &PTR_FUN_004f7ee0;
  FUN_003f005c();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc57c (48 bytes) name=FUN_003dc57c

void FUN_003dc57c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7f50;
                    /* try { // try from 003dc594 to 004dc597 has its CatchHandler @ 003dbc30 */
                    /* catch() { ... } // from try @ 003dbd1c with catch @ 003dc598 */
  FUN_003ecdfc();
                    /* catch() { ... } // from try @ 003dbe44 with catch @ 003dc5a8
                       catch() { ... } // from try @ 003dc02c with catch @ 003dc5a8
                       catch() { ... } // from try @ 003dc538 with catch @ 003dc5a8 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc5ac (48 bytes) name=FUN_003dc5ac

void FUN_003dc5ac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7f80;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc5dc (36 bytes) name=FUN_003dc5dc

void FUN_003dc5dc(void *param_1)

{
                    /* catch() { ... } // from try @ 003dbee4 with catch @ 003dc5e4
                       catch() { ... } // from try @ 003dc4e4 with catch @ 003dc5e4 */
  FUN_003dc47c();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc600 (48 bytes) name=FUN_003dc600

void FUN_003dc600(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 003dbce0 with catch @ 003dc608
                       catch() { ... } // from try @ 003dbd24 with catch @ 003dc608
                       catch() { ... } // from try @ 003dbd9c with catch @ 003dc608
                       catch() { ... } // from try @ 003dc15c with catch @ 003dc608
                       catch() { ... } // from try @ 003dc28c with catch @ 003dc608
                       catch() { ... } // from try @ 003dc4f4 with catch @ 003dc608 */
                    /* catch() { ... } // from try @ 003dbc84 with catch @ 003dc610
                       catch() { ... } // from try @ 003dc1d0 with catch @ 003dc610
                       catch() { ... } // from try @ 003dc280 with catch @ 003dc610
                       catch() { ... } // from try @ 003dc51c with catch @ 003dc610 */
  *param_1 = &PTR_FUN_004f7d00;
                    /* catch() { ... } // from try @ 003dc64c with catch @ 003dc618
                       catch() { ... } // from try @ 003dc6c4 with catch @ 003dc618
                       catch() { ... } // from try @ 003dc9ac with catch @ 003dc618
                       catch() { ... } // from try @ 003dcbac with catch @ 003dc618
                       catch() { ... } // from try @ 003dceb4 with catch @ 003dc618
                       catch() { ... } // from try @ 003dcf58 with catch @ 003dc618
                       catch() { ... } // from try @ 003dcf7c with catch @ 003dc618 */
  FUN_003f0724();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc630 (48 bytes) name=FUN_003dc630

void FUN_003dc630(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7d50;
                    /* try { // try from 003dc64c to 004dc683 has its CatchHandler @ 003dc618 */
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc660 (48 bytes) name=FUN_003dc660

void FUN_003dc660(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7dd0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc690 (48 bytes) name=FUN_003dc690

void FUN_003dc690(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7e30;
  FUN_003ecdfc();
                    /* try { // try from 003dc6bc to 004dc6bf has its CatchHandler @ 003dcf6c */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc6c0 (48 bytes) name=FUN_003dc6c0

void FUN_003dc6c0(undefined8 *param_1)

{
                    /* try { // try from 003dc6c4 to 004dc733 has its CatchHandler @ 003dc618 */
  *param_1 = &PTR_FUN_004f7fb0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc6f0 (48 bytes) name=FUN_003dc6f0

void FUN_003dc6f0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7fb0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc720 (48 bytes) name=FUN_003dc720

void FUN_003dc720(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8010;
                    /* try { // try from 003dc738 to 004dc757 has its CatchHandler @ 003dcf80 */
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc750 (48 bytes) name=FUN_003dc750

void FUN_003dc750(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8010;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc780 (48 bytes) name=FUN_003dc780

void FUN_003dc780(undefined8 *param_1)

{
                    /* try { // try from 003dc784 to 004dc787 has its CatchHandler @ 003dcf18 */
  *param_1 = &PTR_FUN_004fd4c0;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc7c4 (56 bytes) name=FUN_003dc7c4

void FUN_003dc7c4(undefined8 *param_1)

{
                    /* try { // try from 003dc7c8 to 004dc7cb has its CatchHandler @ 003dcf5c */
                    /* try { // try from 003dc7d0 to 004dc817 has its CatchHandler @ 003dcf18 */
  *param_1 = &PTR_FUN_004fd4c0;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc810 (48 bytes) name=FUN_003dc810

void FUN_003dc810(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fd4c0;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc854 (56 bytes) name=FUN_003dc854

void FUN_003dc854(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fd4c0;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc8a0 (48 bytes) name=FUN_003dc8a0

void FUN_003dc8a0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7c80;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc8e4 (56 bytes) name=FUN_003dc8e4

void FUN_003dc8e4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7c80;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
                    /* try { // try from 003dc90c to 004dc90f has its CatchHandler @ 003dcf18 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc930 (48 bytes) name=FUN_003dc930

void FUN_003dc930(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f7c80;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dc974 (56 bytes) name=FUN_003dc974

void FUN_003dc974(undefined8 *param_1)

{
                    /* try { // try from 003dc980 to 004dc983 has its CatchHandler @ 003dcf80 */
  *param_1 = &PTR_FUN_004f7c80;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dc9c0 (100 bytes) name=FUN_003dc9c0

void FUN_003dc9c0(undefined8 *param_1)

{
  void *pvVar1;
  void *pvVar2;
  
  pvVar2 = (void *)param_1[4];
  *param_1 = &PTR_FUN_004f7e50;
  pvVar1 = (void *)FUN_003ed4bc();
  if ((pvVar2 != pvVar1) && (pvVar2 != (void *)0x0)) {
    operator_delete__(pvVar2);
  }
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_0041a634(param_1 + 3);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003dca38 (36 bytes) name=FUN_003dca38

void FUN_003dca38(void *param_1)

{
  FUN_003dc9c0();
                    /* try { // try from 003dca4c to 004dca8f has its CatchHandler @ 003dcf88 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dca5c (16 bytes) name=FUN_003dca5c

void FUN_003dca5c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fd560;
  FUN_0041a6b4();
  return;
}


==================================================================

### FUNC 003dca6c (48 bytes) name=FUN_003dca6c

void FUN_003dca6c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fd560;
  FUN_0041a6b4();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003dca9c (68 bytes) name=FUN_003dca9c

void FUN_003dca9c(void *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar2 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 003dcae0 (28 bytes) name=FUN_003dcae0

void FUN_003dcae0(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003dcafc (56 bytes) name=FUN_003dcafc

void FUN_003dcafc(long *param_1,undefined1 param_2)

{
                    /* try { // try from 003dcb0c to 004dcb0f has its CatchHandler @ 003dcf18 */
  FUN_003d14e0();
  (**(code **)(*param_1 + 0x30))(param_1,param_2);
  return;
}


==================================================================

### FUNC 003dcb34 (612 bytes) name=FUN_003dcb34

uint FUN_003dcb34(undefined8 param_1,undefined1 *param_2,undefined1 *param_3,undefined1 *param_4,
                 undefined1 *param_5)

{
  size_t *__s;
  char *pcVar1;
  bool bVar2;
  uint uVar3;
  size_t *psVar4;
  size_t *psVar5;
  size_t sVar6;
  size_t sVar7;
  size_t *__dest;
  size_t sVar8;
  undefined1 auStack_8 [8];
  
  if (param_2 == param_3) {
    __dest = (size_t *)(PTR_DAT_00501f30 + 0x18);
  }
  else {
    if ((param_2 == (undefined1 *)0x0) && (param_3 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    sVar7 = (long)param_3 - (long)param_2;
                    /* try { // try from 003dcb80 to 004dcb83 has its CatchHandler @ 003dcf80 */
    psVar4 = (size_t *)FUN_00412a70(sVar7,0,auStack_8);
    __dest = psVar4 + 3;
    if (sVar7 == 1) {
      *(undefined1 *)(psVar4 + 3) = *param_2;
    }
    else {
                    /* try { // try from 003dcbac to 004dcbaf has its CatchHandler @ 003dc618 */
      memcpy(__dest,param_2,sVar7);
    }
    if (psVar4 != (size_t *)PTR_DAT_00501f30) {
      *(undefined4 *)(psVar4 + 2) = 0;
      *psVar4 = sVar7;
      *(undefined1 *)((long)psVar4 + sVar7 + 0x18) = 0;
    }
  }
  if (param_4 == param_5) {
    psVar4 = (size_t *)(PTR_DAT_00501f30 + 0x18);
  }
  else {
    if ((param_4 == (undefined1 *)0x0) && (param_5 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    sVar7 = (long)param_5 - (long)param_4;
    psVar5 = (size_t *)FUN_00412a70(sVar7,0,auStack_8);
    psVar4 = psVar5 + 3;
    if (sVar7 == 1) {
      *(undefined1 *)(psVar5 + 3) = *param_4;
    }
    else {
      memcpy(psVar4,param_4,sVar7);
    }
    if (psVar5 != (size_t *)PTR_DAT_00501f30) {
      *(undefined4 *)(psVar5 + 2) = 0;
      *psVar5 = sVar7;
      *(undefined1 *)((long)psVar5 + sVar7 + 0x18) = 0;
    }
  }
  sVar8 = __dest[-3];
  sVar7 = psVar4[-3];
  uVar3 = FUN_0041ad04(param_1,__dest,psVar4);
  psVar5 = __dest;
  __s = psVar4;
  while (uVar3 == 0) {
    sVar6 = strlen((char *)psVar5);
    pcVar1 = (char *)((long)psVar5 + sVar6);
    sVar6 = strlen((char *)__s);
    bVar2 = pcVar1 == (char *)((long)__dest + sVar8);
    if ((char *)((long)__s + sVar6) == (char *)((long)psVar4 + sVar7)) {
      uVar3 = (uint)!bVar2;
LAB_003dcc88:
      if (psVar4 + -3 != (size_t *)PTR_DAT_00501f30) goto LAB_003dccf8;
      goto LAB_003dcc98;
    }
    if (bVar2) {
      uVar3 = 0xffffffff;
      goto LAB_003dcc88;
    }
    psVar5 = (size_t *)(pcVar1 + 1);
    __s = (size_t *)((char *)((long)__s + sVar6) + 1);
    uVar3 = FUN_0041ad04(param_1,psVar5,__s);
  }
  if (psVar4 + -3 == (size_t *)PTR_DAT_00501f30) {
LAB_003dcc98:
    if (__dest + -3 != (size_t *)PTR_DAT_00501f30) goto LAB_003dcd14;
  }
  else {
LAB_003dccf8:
    FUN_003dca9c(psVar4 + -3,auStack_8);
    if (__dest + -3 != (size_t *)PTR_DAT_00501f30) {
LAB_003dcd14:
      FUN_003dca9c(__dest + -3,auStack_8);
      return uVar3;
    }
  }
  return uVar3;
}


==================================================================

### FUNC 003dcdc0 (524 bytes) name=FUN_003dcdc0

long * FUN_003dcdc0(long *param_1,undefined8 param_2,undefined1 *param_3,undefined1 *param_4)

{
  size_t *psVar1;
  void *pvVar2;
  ulong uVar3;
  size_t sVar4;
  long lVar5;
  long lVar6;
  size_t sVar7;
  ulong uVar8;
  size_t *__dest;
  undefined1 auStack_8 [8];
  
  __dest = (size_t *)(PTR_DAT_00501f30 + 0x18);
  *param_1 = (long)__dest;
  if (param_3 == param_4) {
                    /* catch() { ... } // from try @ 003dc898 with catch @ 003dcf88
                       catch() { ... } // from try @ 003dca4c with catch @ 003dcf88 */
    sVar7 = 0;
  }
  else {
    if ((param_3 == (undefined1 *)0x0) && (param_4 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    sVar7 = (long)param_4 - (long)param_3;
    psVar1 = (size_t *)FUN_00412a70(sVar7,0,auStack_8);
    __dest = psVar1 + 3;
    if (sVar7 == 1) {
      *(undefined1 *)(psVar1 + 3) = *param_3;
    }
    else {
      memcpy(__dest,param_3,sVar7);
    }
    if (psVar1 != (size_t *)PTR_DAT_00501f30) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = sVar7;
      *(undefined1 *)((long)psVar1 + sVar7 + 0x18) = 0;
    }
  }
  uVar8 = sVar7 << 1;
  sVar7 = __dest[-3];
  pvVar2 = operator_new__(uVar8);
  psVar1 = __dest;
  while( true ) {
    uVar3 = FUN_0041ad2c(param_2,pvVar2,psVar1,uVar8);
    if (uVar8 <= uVar3) {
      uVar8 = uVar3 + 1;
                    /* try { // try from 003dce98 to 004dce9b has its CatchHandler @ 003dcf80 */
      operator_delete__(pvVar2);
      pvVar2 = operator_new__(uVar8);
                    /* try { // try from 003dcea4 to 004dcea7 has its CatchHandler @ 003dcf18 */
                    /* try { // try from 003dceb4 to 004dceb7 has its CatchHandler @ 003dc618 */
      uVar3 = FUN_0041ad2c(param_2,pvVar2,psVar1,uVar8);
    }
                    /* try { // try from 003dcec4 to 004dcec7 has its CatchHandler @ 003dcf18 */
    FUN_00411624(param_1,pvVar2,uVar3);
    sVar4 = strlen((char *)psVar1);
                    /* try { // try from 003dced4 to 004dcf07 has its CatchHandler @ 003dcf80 */
    if ((char *)((long)psVar1 + sVar4) == (char *)((long)__dest + sVar7)) break;
    lVar6 = *param_1;
    psVar1 = (size_t *)((char *)((long)psVar1 + sVar4) + 1);
    lVar5 = *(long *)(lVar6 + -0x18);
    uVar3 = lVar5 + 1;
    if ((*(ulong *)(lVar6 + -0x10) < uVar3) || (0 < *(int *)(lVar6 + -8))) {
                    /* try { // try from 003dcf10 to 004dcf13 has its CatchHandler @ 003dcf18 */
      FUN_00410ed8(param_1,uVar3);
      lVar6 = *param_1;
                    /* catch() { ... } // from try @ 003dc784 with catch @ 003dcf18
                       catch() { ... } // from try @ 003dc7d0 with catch @ 003dcf18
                       catch() { ... } // from try @ 003dc90c with catch @ 003dcf18
                       catch() { ... } // from try @ 003dcb0c with catch @ 003dcf18
                       catch() { ... } // from try @ 003dcea4 with catch @ 003dcf18
                       catch() { ... } // from try @ 003dcec4 with catch @ 003dcf18
                       catch() { ... } // from try @ 003dcf10 with catch @ 003dcf18 */
      lVar5 = *(long *)(lVar6 + -0x18);
    }
    *(undefined1 *)(lVar6 + lVar5) = 0;
    lVar5 = *param_1;
    if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501f30) {
      *(undefined4 *)(lVar5 + -8) = 0;
      *(ulong *)(lVar5 + -0x18) = uVar3;
      *(undefined1 *)(lVar5 + uVar3) = 0;
    }
  }
  operator_delete__(pvVar2);
                    /* try { // try from 003dcf58 to 004dcf5b has its CatchHandler @ 003dc618 */
                    /* catch() { ... } // from try @ 003dc7c8 with catch @ 003dcf5c */
  if (__dest + -3 == (size_t *)PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 003dc6bc with catch @ 003dcf6c */
                    /* try { // try from 003dcf7c to 004dcf7f has its CatchHandler @ 003dc618 */
                    /* catch() { ... } // from try @ 003dc738 with catch @ 003dcf80
                       catch() { ... } // from try @ 003dc980 with catch @ 003dcf80
                       catch() { ... } // from try @ 003dcb80 with catch @ 003dcf80
                       catch() { ... } // from try @ 003dce98 with catch @ 003dcf80
                       catch() { ... } // from try @ 003dced4 with catch @ 003dcf80 */
    return param_1;
  }
  FUN_003dca9c(__dest + -3,auStack_8);
                    /* catch() { ... } // from try @ 003dcfdc with catch @ 003dcfac
                       catch() { ... } // from try @ 003dd2a0 with catch @ 003dcfac
                       catch() { ... } // from try @ 003ddb38 with catch @ 003dcfac
                       catch() { ... } // from try @ 003ddb94 with catch @ 003dcfac */
  return param_1;
}


==================================================================

### FUNC 003dd040 (384 bytes) name=FUN_003dd040

int FUN_003dd040(undefined8 param_1,char *param_2,undefined8 param_3,char *param_4,
                undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8)

{
  int iVar1;
  char *__s1;
  size_t sVar2;
  char *__locale;
  undefined1 *local_e0;
  undefined1 *puStack_d8;
  undefined8 *local_d0;
  undefined8 uStack_c8;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_20 = param_5;
  local_18 = param_6;
  local_10 = param_7;
  local_8 = param_8;
                    /* try { // try from 003dd098 to 004dd09b has its CatchHandler @ 003ddc28 */
  __s1 = setlocale(1,(char *)0x0);
  local_e0 = (undefined1 *)register0x00000008;
  puStack_d8 = (undefined1 *)register0x00000008;
  if ((__s1 != (char *)0x0) && (iVar1 = strcmp(__s1,"C"), iVar1 != 0)) {
    sVar2 = strlen(__s1);
    __locale = operator_new__(sVar2 + 1);
    memcpy(__locale,__s1,sVar2 + 1);
    setlocale(1,"C");
    local_d0 = &local_20;
                    /* try { // try from 003dd160 to 004dd163 has its CatchHandler @ 003ddc04 */
                    /* try { // try from 003dd168 to 004dd16b has its CatchHandler @ 003ddbbc */
    uStack_c8 = 0xffffff80ffffffe0;
    iVar1 = vsprintf(param_2,param_4,&local_e0);
    setlocale(1,__locale);
    operator_delete__(__locale);
    return iVar1;
  }
  local_d0 = &local_20;
                    /* try { // try from 003dd0c8 to 004dd0cb has its CatchHandler @ 003ddbbc */
  uStack_c8 = 0xffffff80ffffffe0;
                    /* try { // try from 003dd0f8 to 004dd0fb has its CatchHandler @ 003ddbf4 */
  iVar1 = vsprintf(param_2,param_4,&local_e0);
                    /* try { // try from 003dd100 to 004dd143 has its CatchHandler @ 003ddbbc */
  return iVar1;
}


==================================================================

### FUNC 003dd1c0 (68 bytes) name=FUN_003dd1c0

void FUN_003dd1c0(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fd450;
  param_1[2] = 0;
  FUN_003efed0(param_1,0,0);
                    /* try { // try from 003dd200 to 004dd203 has its CatchHandler @ 003ddb98 */
  return;
}


==================================================================

### FUNC 003dd218 (68 bytes) name=FUN_003dd218

void FUN_003dd218(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fd450;
  FUN_003efed0(param_1,0,0);
  return;
}


==================================================================

### FUNC 003dd270 (60 bytes) name=FUN_003dd270

void FUN_003dd270(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
                    /* try { // try from 003dd274 to 004dd277 has its CatchHandler @ 003ddb70 */
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fd450;
  FUN_003efed0();
                    /* try { // try from 003dd2a0 to 004dd2f3 has its CatchHandler @ 003dcfac */
  return;
}


==================================================================

### FUNC 003dd2c0 (28 bytes) name=FUN_003dd2c0

void FUN_003dd2c0(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003dd2dc (28 bytes) name=FUN_003dd2dc

void FUN_003dd2dc(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003dd2f8 (44 bytes) name=FUN_003dd2f8

undefined8 FUN_003dd2f8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 003dd324 (44 bytes) name=FUN_003dd324

undefined8 FUN_003dd324(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x28))();
  return param_1;
}


==================================================================

### FUNC 003dd350 (44 bytes) name=FUN_003dd350

undefined8 FUN_003dd350(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 003dd37c (44 bytes) name=FUN_003dd37c

undefined8 FUN_003dd37c(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x38))();
  return param_1;
}


==================================================================

### FUNC 003dd3a8 (28 bytes) name=FUN_003dd3a8

void FUN_003dd3a8(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003dd3c4 (28 bytes) name=FUN_003dd3c4

void FUN_003dd3c4(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003dd3e0 (28 bytes) name=FUN_003dd3e0

void FUN_003dd3e0(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003dd3fc (68 bytes) name=FUN_003dd3fc

void FUN_003dd3fc(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fd3e0;
  param_1[2] = 0;
  FUN_003efd44(param_1,0,0);
  return;
}


==================================================================

### FUNC 003dd454 (68 bytes) name=FUN_003dd454

void FUN_003dd454(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fd3e0;
  FUN_003efd44(param_1,0,0);
  return;
}


==================================================================

### FUNC 003dd4ac (60 bytes) name=FUN_003dd4ac

void FUN_003dd4ac(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fd3e0;
  FUN_003efd44();
  return;
}


==================================================================

### FUNC 003dd4fc (28 bytes) name=FUN_003dd4fc

void FUN_003dd4fc(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003dd518 (28 bytes) name=FUN_003dd518

void FUN_003dd518(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003dd534 (44 bytes) name=FUN_003dd534

undefined8 FUN_003dd534(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 003dd560 (44 bytes) name=FUN_003dd560

undefined8 FUN_003dd560(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x28))();
  return param_1;
}


==================================================================

### FUNC 003dd58c (44 bytes) name=FUN_003dd58c

undefined8 FUN_003dd58c(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 003dd5b8 (44 bytes) name=FUN_003dd5b8

undefined8 FUN_003dd5b8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x38))();
  return param_1;
}


==================================================================

### FUNC 003dd5e4 (28 bytes) name=FUN_003dd5e4

void FUN_003dd5e4(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003dd600 (28 bytes) name=FUN_003dd600

void FUN_003dd600(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003dd61c (28 bytes) name=FUN_003dd61c

void FUN_003dd61c(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003dd638 (112 bytes) name=FUN_003dd638

void FUN_003dd638(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f80b0;
  *(undefined1 *)((long)param_1 + 0x21) = 0;
  *(undefined1 *)((long)param_1 + 0x22) = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  *(undefined4 *)(param_1 + 0xb) = 0;
  *(undefined1 *)((long)param_1 + 0x5c) = 0;
  *(undefined1 *)((long)param_1 + 0x5d) = 0;
  *(undefined1 *)((long)param_1 + 0x5e) = 0;
  *(undefined1 *)((long)param_1 + 0x5f) = 0;
  *(undefined1 *)(param_1 + 0xc) = 0;
  *(undefined1 *)((long)param_1 + 0x61) = 0;
  *(undefined1 *)((long)param_1 + 0x62) = 0;
  *(undefined1 *)((long)param_1 + 99) = 0;
  *(undefined1 *)((long)param_1 + 0x6f) = 0;
  return;
}


==================================================================

### FUNC 003dd6a8 (112 bytes) name=FUN_003dd6a8

void FUN_003dd6a8(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f80d0;
  *(undefined1 *)((long)param_1 + 0x21) = 0;
  *(undefined1 *)((long)param_1 + 0x22) = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  *(undefined4 *)(param_1 + 0xb) = 0;
  *(undefined1 *)((long)param_1 + 0x5c) = 0;
  *(undefined1 *)((long)param_1 + 0x5d) = 0;
  *(undefined1 *)((long)param_1 + 0x5e) = 0;
  *(undefined1 *)((long)param_1 + 0x5f) = 0;
  *(undefined1 *)(param_1 + 0xc) = 0;
  *(undefined1 *)((long)param_1 + 0x61) = 0;
  *(undefined1 *)((long)param_1 + 0x62) = 0;
  *(undefined1 *)((long)param_1 + 99) = 0;
  *(undefined1 *)((long)param_1 + 0x6f) = 0;
  return;
}


==================================================================

### FUNC 003dd718 (192 bytes) name=FUN_003dd718

void FUN_003dd718(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
  *param_1 = &PTR_FUN_004fd450;
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  FUN_003efed0(param_1,0,0);
  *param_1 = &PTR_FUN_004f7e70;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a600(&local_8,param_2,0);
                    /* try { // try from 003dd7bc to 004dd7bf has its CatchHandler @ 003ddb98 */
    FUN_003efed0(param_1,local_8,0);
    FUN_0041a634(&local_8);
                    /* try { // try from 003dd7c8 to 004ddb17 has its CatchHandler @ 003ddb70 */
    return;
  }
  return;
}


==================================================================

### FUNC 003dd800 (192 bytes) name=FUN_003dd800

void FUN_003dd800(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
  *param_1 = &PTR_FUN_004fd3e0;
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  FUN_003efd44(param_1,0,0);
  *param_1 = &PTR_FUN_004f7ee0;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a600(&local_8,param_2,0);
    FUN_003efd44(param_1,local_8,0);
    FUN_0041a634(&local_8);
    return;
  }
  return;
}


==================================================================

### FUNC 003dd8e8 (28 bytes) name=FUN_003dd8e8

void FUN_003dd8e8(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7f50;
  return;
}


==================================================================

### FUNC 003dd904 (48 bytes) name=FUN_003dd904

void FUN_003dd904(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003dd934 (48 bytes) name=FUN_003dd934

void FUN_003dd934(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003dd964 (28 bytes) name=FUN_003dd964

void FUN_003dd964(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7f80;
  return;
}


==================================================================

### FUNC 003dd980 (28 bytes) name=FUN_003dd980

void FUN_003dd980(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003dd99c (28 bytes) name=FUN_003dd99c

void FUN_003dd99c(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003dd9b8 (64 bytes) name=FUN_003dd9b8

void FUN_003dd9b8(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fd390;
  FUN_003f0604(param_1,0);
  return;
}


==================================================================

### FUNC 003dda0c (64 bytes) name=FUN_003dda0c

void FUN_003dda0c(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fd390;
  FUN_003f0604(param_1,0);
  return;
}


==================================================================

### FUNC 003dda60 (60 bytes) name=FUN_003dda60

void FUN_003dda60(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fd390;
  FUN_003f0604();
  return;
}


==================================================================

### FUNC 003ddab0 (28 bytes) name=FUN_003ddab0

void FUN_003ddab0(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003ddacc (28 bytes) name=FUN_003ddacc

void FUN_003ddacc(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003ddae8 (44 bytes) name=FUN_003ddae8

undefined8 FUN_003ddae8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 003ddb14 (44 bytes) name=FUN_003ddb14

undefined8 FUN_003ddb14(undefined8 param_1,long *param_2)

{
                    /* try { // try from 003ddb24 to 004ddb27 has its CatchHandler @ 003ddb98 */
  (**(code **)(*param_2 + 0x28))();
                    /* try { // try from 003ddb38 to 004ddb3b has its CatchHandler @ 003dcfac */
  return param_1;
}


==================================================================

### FUNC 003ddb40 (44 bytes) name=FUN_003ddb40

undefined8 FUN_003ddb40(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 003ddb6c (68 bytes) name=FUN_003ddb6c

void FUN_003ddb6c(undefined8 *param_1,long param_2)

{
                    /* catch() { ... } // from try @ 003dd000 with catch @ 003ddb70
                       catch() { ... } // from try @ 003dd274 with catch @ 003ddb70
                       catch() { ... } // from try @ 003dd7c8 with catch @ 003ddb70 */
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f80f0;
  param_1[5] = 0;
                    /* try { // try from 003ddb94 to 004ddb97 has its CatchHandler @ 003dcfac */
  param_1[6] = 0;
                    /* catch() { ... } // from try @ 003dd024 with catch @ 003ddb98
                       catch() { ... } // from try @ 003dd200 with catch @ 003ddb98
                       catch() { ... } // from try @ 003dd7bc with catch @ 003ddb98
                       catch() { ... } // from try @ 003ddb24 with catch @ 003ddb98 */
  param_1[7] = 0;
  param_1[8] = 0;
  *(undefined1 *)(param_1 + 9) = 0;
  *(undefined1 *)((long)param_1 + 0x49) = 0;
  *(undefined1 *)(param_1 + 0x11) = 0;
  return;
}


==================================================================

### FUNC 003ddbb0 (184 bytes) name=FUN_003ddbb0

void FUN_003ddbb0(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 003dd0c8 with catch @ 003ddbbc
                       catch() { ... } // from try @ 003dd100 with catch @ 003ddbbc
                       catch() { ... } // from try @ 003dd168 with catch @ 003ddbbc */
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fd390;
  param_1[2] = 0;
  FUN_003f0604(param_1,0);
                    /* catch() { ... } // from try @ 003dd0f8 with catch @ 003ddbf4 */
  *param_1 = &PTR_FUN_004f7d00;
                    /* catch() { ... } // from try @ 003dd160 with catch @ 003ddc04 */
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
                    /* catch() { ... } // from try @ 003ddc54 with catch @ 003ddc30
                       catch() { ... } // from try @ 003dddc4 with catch @ 003ddc30
                       catch() { ... } // from try @ 003ddfd4 with catch @ 003ddc30
                       catch() { ... } // from try @ 003de030 with catch @ 003ddc30 */
    FUN_0041a600(&local_8,param_2,0);
    FUN_003f0604(param_1,local_8);
                    /* try { // try from 003ddc54 to 004ddc77 has its CatchHandler @ 003ddc30 */
    FUN_0041a634(&local_8);
    return;
  }
                    /* catch() { ... } // from try @ 003dd098 with catch @ 003ddc28 */
  return;
}


==================================================================

### FUNC 003ddc90 (28 bytes) name=FUN_003ddc90

void FUN_003ddc90(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7d50;
  return;
}


==================================================================

### FUNC 003ddcac (28 bytes) name=FUN_003ddcac

void FUN_003ddcac(long *param_1)

{
                    /* try { // try from 003ddcbc to 004ddcbf has its CatchHandler @ 003de034 */
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003ddcc8 (28 bytes) name=FUN_003ddcc8

void FUN_003ddcc8(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003ddce4 (28 bytes) name=FUN_003ddce4

void FUN_003ddce4(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003ddd00 (28 bytes) name=FUN_003ddd00

void FUN_003ddd00(long *param_1)

{
                    /* try { // try from 003ddd10 to 004ddd13 has its CatchHandler @ 003de004 */
  (**(code **)(*param_1 + 0x28))();
                    /* try { // try from 003ddd18 to 004ddd87 has its CatchHandler @ 003de034 */
  return;
}


==================================================================

### FUNC 003ddd1c (28 bytes) name=FUN_003ddd1c

void FUN_003ddd1c(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 003ddd38 (28 bytes) name=FUN_003ddd38

void FUN_003ddd38(long *param_1)

{
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 003ddd54 (28 bytes) name=FUN_003ddd54

void FUN_003ddd54(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003ddd70 (28 bytes) name=FUN_003ddd70

void FUN_003ddd70(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003ddd8c (28 bytes) name=FUN_003ddd8c

void FUN_003ddd8c(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003ddda8 (28 bytes) name=FUN_003ddda8

void FUN_003ddda8(long *param_1)

{
  (**(code **)(*param_1 + 0x58))();
  return;
}


==================================================================

### FUNC 003dddc4 (28 bytes) name=FUN_003dddc4

void FUN_003dddc4(long *param_1)

{
                    /* try { // try from 003dddc4 to 004dde1f has its CatchHandler @ 003ddc30 */
  (**(code **)(*param_1 + 0x60))();
  return;
}


==================================================================

### FUNC 003ddde0 (28 bytes) name=FUN_003ddde0

void FUN_003ddde0(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7dd0;
  return;
}


==================================================================

### FUNC 003dddfc (28 bytes) name=FUN_003dddfc

void FUN_003dddfc(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003dde18 (28 bytes) name=FUN_003dde18

void FUN_003dde18(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003dde34 (28 bytes) name=FUN_003dde34

void FUN_003dde34(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003dde50 (28 bytes) name=FUN_003dde50

void FUN_003dde50(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 003dde6c (28 bytes) name=FUN_003dde6c

void FUN_003dde6c(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 003dde88 (28 bytes) name=FUN_003dde88

void FUN_003dde88(long *param_1)

{
                    /* try { // try from 003dde88 to 004dde8b has its CatchHandler @ 003de034 */
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 003ddea4 (28 bytes) name=FUN_003ddea4

void FUN_003ddea4(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003ddec0 (28 bytes) name=FUN_003ddec0

void FUN_003ddec0(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003ddedc (76 bytes) name=FUN_003ddedc

void FUN_003ddedc(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004f7e50;
  uVar1 = FUN_003ed4bc();
  param_1[4] = uVar1;
  FUN_003fd7dc(param_1,0);
  return;
}


==================================================================

### FUNC 003ddf3c (76 bytes) name=FUN_003ddf3c

void FUN_003ddf3c(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004f7e50;
  uVar1 = FUN_003ed4bc();
  param_1[4] = uVar1;
  FUN_003fd7dc(param_1,0);
  return;
}


==================================================================

### FUNC 003ddf9c (160 bytes) name=FUN_003ddf9c

void FUN_003ddf9c(undefined8 *param_1,undefined8 param_2,char *param_3,long param_4)

{
  int iVar1;
  char *__s2;
  size_t sVar2;
  void *pvVar3;
  
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004f7e50;
                    /* try { // try from 003ddfd4 to 004ddfd7 has its CatchHandler @ 003ddc30 */
  __s2 = (char *)FUN_003ed4bc();
  iVar1 = strcmp(param_3,__s2);
  if (iVar1 == 0) {
    param_1[4] = __s2;
  }
  else {
    sVar2 = strlen(param_3);
    pvVar3 = operator_new__(sVar2 + 1);
                    /* try { // try from 003de030 to 004de033 has its CatchHandler @ 003ddc30 */
    pvVar3 = memcpy(pvVar3,param_3,sVar2 + 1);
                    /* catch() { ... } // from try @ 003ddcbc with catch @ 003de034
                       catch() { ... } // from try @ 003ddd18 with catch @ 003de034
                       catch() { ... } // from try @ 003dde88 with catch @ 003de034 */
    param_1[4] = pvVar3;
  }
  FUN_003fd7dc(param_1,param_2);
                    /* catch() { ... } // from try @ 003ddd10 with catch @ 003de004 */
  return;
}


==================================================================

### FUNC 003de080 (28 bytes) name=FUN_003de080

void FUN_003de080(long param_1,undefined8 *param_2)

{
                    /* try { // try from 003de088 to 004de08b has its CatchHandler @ 003de040 */
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x10);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x18);
  return;
}


==================================================================

### FUNC 003de09c (28 bytes) name=FUN_003de09c

void FUN_003de09c(long param_1,undefined8 *param_2)

{
                    /* try { // try from 003de0a4 to 004de0a7 has its CatchHandler @ 003de878 */
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x20);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x28);
  return;
}


==================================================================

### FUNC 003de0b8 (28 bytes) name=FUN_003de0b8

void FUN_003de0b8(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x30);
                    /* try { // try from 003de0c4 to 004de0c7 has its CatchHandler @ 003de9d0 */
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x38);
  return;
}


==================================================================

### FUNC 003de0d4 (4 bytes) name=FUN_003de0d4

void FUN_003de0d4(void)

{
  return;
}


==================================================================

### FUNC 003de0d8 (28 bytes) name=FUN_003de0d8

void FUN_003de0d8(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x40);
                    /* try { // try from 003de0ec to 004de0ef has its CatchHandler @ 003de9c8 */
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x48);
  return;
}


==================================================================

### FUNC 003de0f4 (88 bytes) name=FUN_003de0f4

void FUN_003de0f4(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x58);
                    /* try { // try from 003de104 to 004de107 has its CatchHandler @ 003de9a4 */
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x60);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x68);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x70);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x78);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x80);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x88);
  return;
}


==================================================================

### FUNC 003de14c (88 bytes) name=FUN_003de14c

void FUN_003de14c(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x90);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x98);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xa0);
                    /* try { // try from 003de178 to 004de17b has its CatchHandler @ 003de970 */
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xa8);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xb0);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xb8);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xc0);
  return;
}


==================================================================

### FUNC 003de1a4 (148 bytes) name=FUN_003de1a4

void FUN_003de1a4(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 200);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xd0);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xd8);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xe0);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xe8);
                    /* try { // try from 003de1e8 to 004de1eb has its CatchHandler @ 003de99c */
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xf0);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xf8);
  param_2[7] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x100);
  param_2[8] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x108);
  param_2[9] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x110);
                    /* try { // try from 003de224 to 004de227 has its CatchHandler @ 003de994 */
  param_2[10] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x118);
  param_2[0xb] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x120);
  return;
}


==================================================================

### FUNC 003de238 (148 bytes) name=FUN_003de238

void FUN_003de238(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x128);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x130);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x138);
                    /* try { // try from 003de260 to 004de263 has its CatchHandler @ 003de958 */
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x140);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x148);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x150);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x158);
                    /* try { // try from 003de290 to 004de2c3 has its CatchHandler @ 003de8a0 */
  param_2[7] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x160);
  param_2[8] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x168);
  param_2[9] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x170);
  param_2[10] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x178);
  param_2[0xb] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x180);
  return;
}


==================================================================

### FUNC 003de2cc (220 bytes) name=FUN_003de2cc

void FUN_003de2cc(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  param_1[4] = 0;
  *param_1 = &PTR_FUN_004f7e30;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  param_1[0x19] = 0;
  param_1[0x1a] = 0;
  param_1[0x1b] = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  param_1[0x24] = 0;
  param_1[0x25] = 0;
  param_1[0x26] = 0;
  param_1[0x27] = 0;
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  param_1[0x2e] = 0;
  param_1[0x2f] = 0;
  param_1[0x30] = 0;
  *(undefined1 *)(param_1 + 0x31) = 0;
  return;
}


==================================================================

### FUNC 003de3a8 (28 bytes) name=FUN_003de3a8

void FUN_003de3a8(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7fb0;
  return;
}


==================================================================

### FUNC 003de3c4 (28 bytes) name=FUN_003de3c4

void FUN_003de3c4(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003de3e0 (28 bytes) name=FUN_003de3e0

void FUN_003de3e0(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f7fe0;
  return;
}


==================================================================

### FUNC 003de3fc (28 bytes) name=FUN_003de3fc

void FUN_003de3fc(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8010;
  return;
}


==================================================================

### FUNC 003de418 (28 bytes) name=FUN_003de418

void FUN_003de418(long *param_1)

{
                    /* try { // try from 003de428 to 004de42b has its CatchHandler @ 003de958 */
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003de434 (28 bytes) name=FUN_003de434

void FUN_003de434(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003de450 (28 bytes) name=FUN_003de450

void FUN_003de450(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003de46c (28 bytes) name=FUN_003de46c

void FUN_003de46c(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 003de488 (28 bytes) name=FUN_003de488

void FUN_003de488(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
                    /* try { // try from 003de49c to 004de49f has its CatchHandler @ 003de994 */
  return;
}


==================================================================

### FUNC 003de4a4 (28 bytes) name=FUN_003de4a4

void FUN_003de4a4(long *param_1)

{
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 003de4c0 (28 bytes) name=FUN_003de4c0

void FUN_003de4c0(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f8060;
  return;
}


==================================================================

### FUNC 003de4dc (60 bytes) name=FUN_003de4dc

void FUN_003de4dc(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fd4c0;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
                    /* try { // try from 003de510 to 004de513 has its CatchHandler @ 003de99c */
  return;
}


==================================================================

### FUNC 003de52c (60 bytes) name=FUN_003de52c

void FUN_003de52c(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  *param_1 = &PTR_FUN_004fd4c0;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 003de57c (28 bytes) name=FUN_003de57c

void FUN_003de57c(long *param_1)

{
                    /* try { // try from 003de584 to 004de5b3 has its CatchHandler @ 003de9c8 */
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003de598 (28 bytes) name=FUN_003de598

void FUN_003de598(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003de5b4 (44 bytes) name=FUN_003de5b4

undefined8 FUN_003de5b4(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x18))();
  return param_1;
}


==================================================================

### FUNC 003de5e0 (28 bytes) name=FUN_003de5e0

void FUN_003de5e0(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003de5fc (8 bytes) name=FUN_003de5fc

undefined8 FUN_003de5fc(undefined8 param_1,undefined8 *param_2)

{
  return *param_2;
}


==================================================================

### FUNC 003de604 (24 bytes) name=FUN_003de604

long * FUN_003de604(long *param_1)

{
                    /* try { // try from 003de604 to 004de607 has its CatchHandler @ 003de960 */
                    /* try { // try from 003de60c to 004de65b has its CatchHandler @ 003de9c8 */
  *param_1 = (long)(PTR_DAT_00501f30 + 0x18);
  return param_1;
}


==================================================================

### FUNC 003de61c (168 bytes) name=FUN_003de61c

void FUN_003de61c(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 uVar2;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fd4c0;
  uVar2 = FUN_003ed450();
  param_1[2] = uVar2;
  *param_1 = &PTR_FUN_004fd5c0;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 003de708 (144 bytes) name=FUN_003de708

void FUN_003de708(undefined8 *param_1,char *param_2,undefined8 param_3)

{
  int iVar1;
  
  FUN_0041a854(param_1,param_3);
  *param_1 = &PTR_FUN_004fd560;
                    /* try { // try from 003de740 to 004de743 has its CatchHandler @ 003de878 */
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 003de7ac (60 bytes) name=FUN_003de7ac

void FUN_003de7ac(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
                    /* try { // try from 003de7b4 to 004de7b7 has its CatchHandler @ 003de040 */
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f7c80;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
                    /* try { // try from 003de7e0 to 004de7e3 has its CatchHandler @ 003de8a0 */
  return;
}


==================================================================

### FUNC 003de7fc (72 bytes) name=FUN_003de7fc

void FUN_003de7fc(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 local_8;
  
                    /* try { // try from 003de804 to 004de807 has its CatchHandler @ 003de9d0 */
                    /* try { // try from 003de810 to 004de813 has its CatchHandler @ 003de970 */
                    /* try { // try from 003de81c to 004de81f has its CatchHandler @ 003de8a0 */
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f7c80;
  local_8 = param_2;
  uVar1 = FUN_0041a63c(&local_8);
  param_1[2] = uVar1;
                    /* try { // try from 003de840 to 004de843 has its CatchHandler @ 003de99c */
  return;
}


==================================================================

### FUNC 003de844 (28 bytes) name=FUN_003de844

void FUN_003de844(long *param_1)

{
                    /* try { // try from 003de84c to 004de84f has its CatchHandler @ 003de9c8 */
  (**(code **)(*param_1 + 0x10))();
                    /* try { // try from 003de858 to 004de85b has its CatchHandler @ 003de958 */
  return;
}


==================================================================

### FUNC 003de860 (44 bytes) name=FUN_003de860

undefined8 FUN_003de860(undefined8 param_1,long *param_2)

{
                    /* try { // try from 003de864 to 004de867 has its CatchHandler @ 003de994 */
                    /* catch() { ... } // from try @ 003de0a4 with catch @ 003de878
                       catch() { ... } // from try @ 003de740 with catch @ 003de878
                       catch() { ... } // from try @ 003de7f8 with catch @ 003de878 */
  (**(code **)(*param_2 + 0x18))();
  return param_1;
}


==================================================================

### FUNC 003de88c (28 bytes) name=FUN_003de88c

void FUN_003de88c(long *param_1)

{
                    /* try { // try from 003de89c to 004de89f has its CatchHandler @ 003de040 */
  (**(code **)(*param_1 + 0x20))();
                    /* catch() { ... } // from try @ 003de290 with catch @ 003de8a0
                       catch() { ... } // from try @ 003de7e0 with catch @ 003de8a0
                       catch() { ... } // from try @ 003de81c with catch @ 003de8a0 */
  return;
}


==================================================================

### FUNC 003de8a8 (168 bytes) name=FUN_003de8a8

void FUN_003de8a8(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 uVar2;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f7c80;
  uVar2 = FUN_003ed450();
  param_1[2] = uVar2;
  *param_1 = &PTR_FUN_004f7cc0;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 003de994 (104 bytes) name=FUN_003de994

void FUN_003de994(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* catch() { ... } // from try @ 003de224 with catch @ 003de994
                       catch() { ... } // from try @ 003de49c with catch @ 003de994
                       catch() { ... } // from try @ 003de864 with catch @ 003de994 */
                    /* catch() { ... } // from try @ 003de1e8 with catch @ 003de99c
                       catch() { ... } // from try @ 003de510 with catch @ 003de99c
                       catch() { ... } // from try @ 003de840 with catch @ 003de99c */
                    /* catch() { ... } // from try @ 003de104 with catch @ 003de9a4 */
  uVar1 = FUN_003edb10(PTR_DAT_00501da0);
                    /* catch() { ... } // from try @ 003de0ec with catch @ 003de9c8
                       catch() { ... } // from try @ 003de584 with catch @ 003de9c8
                       catch() { ... } // from try @ 003de60c with catch @ 003de9c8
                       catch() { ... } // from try @ 003de84c with catch @ 003de9c8 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
                    /* catch() { ... } // from try @ 003de0c4 with catch @ 003de9d0
                       catch() { ... } // from try @ 003de6cc with catch @ 003de9d0
                       catch() { ... } // from try @ 003de804 with catch @ 003de9d0 */
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,PTR_PTR_00501cf0,0);
    if (lVar2 != 0) {
                    /* catch() { ... } // from try @ 003dea28 with catch @ 003de9f0
                       catch() { ... } // from try @ 003dec9c with catch @ 003de9f0
                       catch() { ... } // from try @ 003ded64 with catch @ 003de9f0 */
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003de9fc (536 bytes) name=FUN_003de9fc

undefined1  [16]
FUN_003de9fc(long *param_1,long *param_2,ulong param_3,long param_4,undefined1 param_5,
            undefined8 param_6,byte *param_7,byte *param_8)

{
  byte *pbVar1;
  byte bVar2;
  char cVar3;
  char cVar4;
  int iVar5;
  long *plVar6;
  char cVar7;
  ulong uVar8;
  undefined1 auVar9 [16];
  
                    /* try { // try from 003dea28 to 004dea2b has its CatchHandler @ 003de9f0 */
  plVar6 = (long *)FUN_003de994(param_4 + 0xd0);
                    /* try { // try from 003dea44 to 004dea47 has its CatchHandler @ 003ded78 */
  uVar8 = param_3 & 0xff;
  while (param_7 != param_8) {
    bVar2 = *param_7;
                    /* try { // try from 003deaf0 to 004deb43 has its CatchHandler @ 003ded68 */
    cVar3 = *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139);
    if (cVar3 == '\0') {
      cVar3 = (**(code **)(*plVar6 + 0x40))(plVar6,bVar2,0);
      if (cVar3 != '\0') {
        *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139) = cVar3;
        goto LAB_003deafc;
      }
LAB_003deb04:
      if ((int)uVar8 != 0) goto LAB_003deae0;
      if ((byte *)param_2[6] <= (byte *)param_2[5]) {
        iVar5 = (**(code **)(*param_2 + 0x68))(param_2);
        uVar8 = (ulong)(iVar5 == -1);
        goto LAB_003deae0;
      }
      *(byte *)param_2[5] = *param_7;
      param_7 = param_7 + 1;
      param_2[5] = param_2[5] + 1;
    }
    else {
LAB_003deafc:
      if (cVar3 != '%') goto LAB_003deb04;
      pbVar1 = param_7 + 1;
      if (param_8 == pbVar1) break;
      bVar2 = param_7[1];
                    /* try { // try from 003dea64 to 004dea67 has its CatchHandler @ 003ded70 */
      cVar3 = *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139);
      if (cVar3 == '\0') {
                    /* try { // try from 003debb4 to 004debb7 has its CatchHandler @ 003ded70 */
        cVar3 = (**(code **)(*plVar6 + 0x40))(plVar6,bVar2,0);
        if (cVar3 != '\0') {
          *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139) = cVar3;
          goto LAB_003dea70;
        }
        cVar7 = '\0';
        param_7 = pbVar1;
        cVar4 = cVar3;
      }
      else {
LAB_003dea70:
        if ((cVar3 == 'O') || (cVar3 == 'E')) {
          pbVar1 = param_7 + 2;
          if (param_8 == pbVar1) break;
          bVar2 = param_7[2];
                    /* try { // try from 003dea94 to 004dea97 has its CatchHandler @ 003ded68 */
          cVar4 = *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139);
          param_7 = pbVar1;
          cVar7 = cVar3;
          if ((cVar4 == '\0') &&
             (cVar4 = (**(code **)(*plVar6 + 0x40))(plVar6,bVar2,0), cVar4 != '\0')) {
            *(char *)((long)plVar6 + (long)(int)(uint)bVar2 + 0x139) = cVar4;
          }
        }
        else {
          cVar7 = '\0';
          param_7 = pbVar1;
          cVar4 = cVar3;
        }
      }
      auVar9 = (**(code **)(*param_1 + 0x10))
                         (param_1,param_2,param_3 & 0xffffffffffffff00 | uVar8,param_4,param_5,
                          param_6,cVar4,cVar7);
      param_2 = auVar9._0_8_;
      uVar8 = auVar9._8_8_ & 0xff;
      param_3 = param_3 & 0xffffffffffffff00;
LAB_003deae0:
      param_7 = param_7 + 1;
                    /* try { // try from 003deae8 to 004deaeb has its CatchHandler @ 003decf4 */
    }
  }
  auVar9._8_8_ = param_3 & 0xffffffffffffff00 | uVar8;
  auVar9._0_8_ = param_2;
  return auVar9;
}


==================================================================

### FUNC 003dec14 (820 bytes) name=FUN_003dec14

undefined1  [16]
FUN_003dec14(undefined8 param_1,long *param_2,ulong param_3,long *param_4,uint param_5,int *param_6,
            int param_7,int param_8,ulong param_9,long param_10,uint *param_11)

{
  byte bVar1;
  int iVar2;
  uint uVar3;
  long *plVar4;
  uint uVar5;
  ulong uVar6;
  ulong uVar7;
  int iVar8;
  ulong uVar9;
  int iVar10;
  int iVar11;
  undefined1 auVar12 [16];
  
                    /* try { // try from 003dec28 to 004dec2b has its CatchHandler @ 003ded78 */
  plVar4 = (long *)FUN_003de994(param_10 + 0xd0);
  uVar9 = param_3 & 0xffffffff;
  if (param_9 == 2) {
    iVar10 = 10;
  }
  else {
    iVar10 = 1000;
    if (param_9 != 4) {
      iVar10 = 1;
    }
  }
  iVar8 = 0;
  uVar7 = 0;
  do {
    if (param_2 == (long *)0x0) {
LAB_003ded38:
      param_2 = (long *)0x0;
      if (param_4 == (long *)0x0) {
LAB_003decbc:
        if (param_9 == uVar7) {
          *param_6 = iVar8;
        }
        else {
                    /* try { // try from 003decc4 to 004decc7 has its CatchHandler @ 003ded78 */
                    /* try { // try from 003decd0 to 004decd3 has its CatchHandler @ 003ded70 */
          if ((uVar7 == 2) && (param_9 == 4)) {
            *param_6 = iVar8 + -100;
          }
          else {
            *param_11 = *param_11 | 4;
          }
        }
        auVar12._8_8_ = param_3 & 0xffffffff00000000 | uVar9;
        auVar12._0_8_ = param_2;
                    /* catch() { ... } // from try @ 003deae8 with catch @ 003decf4 */
        return auVar12;
      }
      iVar11 = 1;
joined_r0x003ded4c:
      iVar2 = 0;
      if (param_5 == 0xffffffff) {
        if ((byte *)param_4[2] < (byte *)param_4[3]) {
          param_5 = (uint)*(byte *)param_4[2];
        }
        else {
          param_5 = (**(code **)(*param_4 + 0x48))(param_4);
          if (param_5 == 0xffffffff) {
            iVar2 = 1;
            param_4 = (long *)0x0;
            goto LAB_003decac;
          }
        }
                    /* try { // try from 003ded64 to 004ded67 has its CatchHandler @ 003de9f0 */
        iVar2 = 0;
                    /* catch() { ... } // from try @ 003dea94 with catch @ 003ded68
                       catch() { ... } // from try @ 003deaf0 with catch @ 003ded68 */
      }
LAB_003decac:
      if ((iVar11 == iVar2) || (param_9 <= uVar7)) goto LAB_003decbc;
      uVar6 = 0xff;
                    /* catch() { ... } // from try @ 003dea64 with catch @ 003ded70
                       catch() { ... } // from try @ 003debb4 with catch @ 003ded70
                       catch() { ... } // from try @ 003decd0 with catch @ 003ded70 */
      uVar3 = 0xff;
      if (param_2 != (long *)0x0) {
                    /* catch() { ... } // from try @ 003dea44 with catch @ 003ded78
                       catch() { ... } // from try @ 003dec28 with catch @ 003ded78
                       catch() { ... } // from try @ 003decc4 with catch @ 003ded78 */
        if ((int)uVar9 == -1) {
          if ((byte *)param_2[2] < (byte *)param_2[3]) {
            uVar9 = (ulong)*(byte *)param_2[2];
          }
          else {
                    /* try { // try from 003deef0 to 004deef3 has its CatchHandler @ 003df118 */
            uVar3 = (**(code **)(*param_2 + 0x48))(param_2);
            uVar9 = (ulong)uVar3;
            if (uVar3 == 0xffffffff) {
              uVar6 = 0xff;
              param_2 = (long *)0x0;
              uVar3 = 0xff;
              goto LAB_003ded88;
            }
          }
        }
        goto LAB_003ded80;
      }
    }
    else {
      if ((int)uVar9 == -1) {
        if ((byte *)param_2[2] < (byte *)param_2[3]) {
          uVar9 = (ulong)*(byte *)param_2[2];
                    /* try { // try from 003dee1c to 004dee1f has its CatchHandler @ 003df198 */
        }
        else {
          uVar3 = (**(code **)(*param_2 + 0x48))(param_2);
          if (uVar3 == 0xffffffff) goto LAB_003ded38;
          uVar9 = (ulong)uVar3;
        }
      }
      iVar11 = 0;
                    /* try { // try from 003dec9c to 004decbb has its CatchHandler @ 003de9f0 */
      if (param_4 != (long *)0x0) goto joined_r0x003ded4c;
      if (param_9 <= uVar7) goto LAB_003decbc;
LAB_003ded80:
                    /* catch() { ... } // from try @ 003dedd0 with catch @ 003ded80
                       catch() { ... } // from try @ 003df04c with catch @ 003ded80
                       catch() { ... } // from try @ 003df178 with catch @ 003ded80 */
      uVar3 = (uint)uVar9 & 0xff;
      uVar6 = uVar9 & 0xff;
    }
LAB_003ded88:
    bVar1 = *(byte *)((long)plVar4 + (long)(int)uVar3 + 0x139);
    uVar5 = (uint)bVar1;
    if (bVar1 == 0) {
      bVar1 = (**(code **)(*plVar4 + 0x40))(plVar4,uVar6,0x2a);
      uVar5 = (uint)bVar1;
      if (uVar5 == 0x2a) goto LAB_003decbc;
      *(byte *)((long)plVar4 + (long)(int)uVar3 + 0x139) = bVar1;
                    /* try { // try from 003dee68 to 004dee6b has its CatchHandler @ 003df184 */
                    /* try { // try from 003dee70 to 004deeaf has its CatchHandler @ 003df198 */
    }
    if (9 < (uVar5 - 0x30 & 0xff)) goto LAB_003decbc;
    iVar8 = iVar8 * 10 + (uVar5 - 0x30);
    if ((param_8 < iVar8 * iVar10) || (iVar8 * iVar10 + iVar10 <= param_7)) goto LAB_003decbc;
                    /* try { // try from 003dedd0 to 004dedd3 has its CatchHandler @ 003ded80 */
    iVar10 = iVar10 / 10;
    if (param_2 != (long *)0x0) {
                    /* try { // try from 003dedec to 004dedef has its CatchHandler @ 003df17c */
      if ((ulong)param_2[2] < (ulong)param_2[3]) {
        uVar9 = 0xffffffff;
        param_2[2] = param_2[2] + 1;
      }
      else {
        uVar9 = 0xffffffff;
        (**(code **)(*param_2 + 0x50))(param_2);
      }
    }
    uVar7 = uVar7 + 1;
  } while( true );
}


==================================================================

### FUNC 003def48 (432 bytes) name=FUN_003def48

undefined1  [16]
FUN_003def48(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  ulong uVar5;
  long *plVar6;
  undefined1 auVar7 [16];
  int local_8;
  int local_4;
  
                    /* try { // try from 003def64 to 004def67 has its CatchHandler @ 003df198 */
  FUN_003de994(param_6 + 0xd0);
  local_4 = 0;
  auVar7 = FUN_003dec14(param_1,param_2,param_3,param_4,param_5,&local_8,0,9999,4,param_6,&local_4);
  plVar6 = auVar7._0_8_;
                    /* try { // try from 003defd8 to 004defdb has its CatchHandler @ 003df17c */
  uVar5 = auVar7._8_8_ & 0xffffffff;
  if (local_4 == 0) {
    if (local_8 < 0) {
      *(int *)(param_8 + 0x14) = local_8 + 100;
    }
    else {
      *(int *)(param_8 + 0x14) = local_8 + -0x76c;
    }
  }
  else {
    *param_7 = *param_7 | 4;
  }
  if (plVar6 == (long *)0x0) {
LAB_003df060:
    plVar6 = (long *)0x0;
    iVar4 = 1;
    if (param_4 != (long *)0x0) goto LAB_003df010;
  }
  else {
    if (auVar7._8_4_ == -1) {
      if ((byte *)plVar6[2] < (byte *)plVar6[3]) {
        uVar5 = (ulong)*(byte *)plVar6[2];
      }
      else {
        uVar3 = (**(code **)(*plVar6 + 0x48))();
        if (uVar3 == 0xffffffff) goto LAB_003df060;
        uVar5 = (ulong)uVar3;
      }
    }
    iVar4 = 0;
    if (param_4 == (long *)0x0) goto LAB_003df024;
LAB_003df010:
    iVar1 = 0;
    if ((int)param_5 == -1) {
                    /* try { // try from 003df07c to 004df07f has its CatchHandler @ 003df17c */
                    /* try { // try from 003df088 to 004df08b has its CatchHandler @ 003df198 */
      if ((ulong)param_4[2] < (ulong)param_4[3]) {
        iVar1 = 0;
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar1 = 1;
        if (iVar2 != -1) {
          iVar1 = 0;
        }
      }
    }
    if (iVar4 != iVar1) goto LAB_003df024;
  }
  *param_7 = *param_7 | 2;
LAB_003df024:
  auVar7._8_8_ = param_3 & 0xffffffff00000000 | uVar5;
  auVar7._0_8_ = plVar6;
                    /* try { // try from 003df04c to 004df073 has its CatchHandler @ 003ded80 */
  return auVar7;
}


==================================================================

### FUNC 003df0f8 (104 bytes) name=FUN_003df0f8

void FUN_003df0f8(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(PTR_DAT_00501e98);
                    /* catch() { ... } // from try @ 003deef0 with catch @ 003df118 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,PTR_PTR_00501e10,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df160 (104 bytes) name=FUN_003df160

void FUN_003df160(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* try { // try from 003df178 to 004df17b has its CatchHandler @ 003ded80 */
  uVar1 = FUN_003edb10(&DAT_005461e8);
                    /* catch() { ... } // from try @ 003dedec with catch @ 003df17c
                       catch() { ... } // from try @ 003defd8 with catch @ 003df17c
                       catch() { ... } // from try @ 003df07c with catch @ 003df17c */
                    /* catch() { ... } // from try @ 003dee68 with catch @ 003df184 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
                    /* catch() { ... } // from try @ 003dee1c with catch @ 003df198
                       catch() { ... } // from try @ 003dee70 with catch @ 003df198
                       catch() { ... } // from try @ 003def64 with catch @ 003df198
                       catch() { ... } // from try @ 003df088 with catch @ 003df198 */
                    /* catch() { ... } // from try @ 003df1e0 with catch @ 003df1a0
                       catch() { ... } // from try @ 003df3d0 with catch @ 003df1a0
                       catch() { ... } // from try @ 003df47c with catch @ 003df1a0 */
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd050,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df1c8 (104 bytes) name=FUN_003df1c8

void FUN_003df1c8(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* try { // try from 003df1e0 to 004df1e3 has its CatchHandler @ 003df1a0 */
  uVar1 = FUN_003edb10(&DAT_00546220);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
                    /* try { // try from 003df210 to 004df213 has its CatchHandler @ 003df488 */
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd080,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df230 (1200 bytes) name=FUN_003df230

void FUN_003df230(long param_1,undefined8 param_2)

{
  undefined8 uVar1;
  char cVar2;
  bool bVar3;
  undefined1 uVar4;
  int iVar5;
  long *plVar6;
  ulong uVar7;
  char *pcVar8;
  void *pvVar9;
  long lVar10;
  int *piVar11;
  undefined8 *puVar12;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
                    /* try { // try from 003df248 to 004df24b has its CatchHandler @ 003df480 */
  *(undefined1 *)(param_1 + 0x88) = 1;
  plVar6 = (long *)FUN_003df1c8(param_2);
                    /* try { // try from 003df270 to 004df273 has its CatchHandler @ 003df418 */
  (**(code **)(*plVar6 + 0x20))(&local_30);
  uVar7 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar7;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_30 + -8);
      *(int *)(local_30 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_30 + -8);
      do {
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
                    /* try { // try from 003df660 to 004df663 has its CatchHandler @ 003df490 */
      operator_delete((undefined *)(local_30 + -0x18));
                    /* catch() { ... } // from try @ 003df4dc with catch @ 003df664
                       catch() { ... } // from try @ 003df574 with catch @ 003df664
                       catch() { ... } // from try @ 003df614 with catch @ 003df664 */
      uVar7 = *(ulong *)(param_1 + 0x18);
    }
    else {
      uVar7 = *(ulong *)(param_1 + 0x18);
    }
  }
  pcVar8 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x20))(&local_28,plVar6);
  FUN_00411998(&local_28,pcVar8,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501f30) {
                    /* try { // try from 003df574 to 004df577 has its CatchHandler @ 003df664 */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_28 + -8);
      *(int *)(local_28 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_28 + -8);
      do {
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
      operator_delete((undefined *)(local_28 + -0x18));
    }
  }
  bVar3 = false;
                    /* try { // try from 003df2e8 to 004df2eb has its CatchHandler @ 003df480 */
  *(char **)(param_1 + 0x10) = pcVar8;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar3 = '\0' < *pcVar8;
  }
  lVar10 = *plVar6;
  *(bool *)(param_1 + 0x20) = bVar3;
  (**(code **)(lVar10 + 0x28))(&local_20,plVar6);
  uVar7 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x30) = uVar7;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_20 + -8);
      *(int *)(local_20 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_20 + -8);
      do {
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
      operator_delete((undefined *)(local_20 + -0x18));
      uVar7 = *(ulong *)(param_1 + 0x30);
    }
    else {
      uVar7 = *(ulong *)(param_1 + 0x30);
    }
  }
  pvVar9 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x28))(&local_18,plVar6);
                    /* try { // try from 003df35c to 004df35f has its CatchHandler @ 003df488 */
  FUN_00411998(&local_18,pvVar9,*(undefined8 *)(param_1 + 0x30),0);
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_18 + -8);
      *(int *)(local_18 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_18 + -8);
      do {
                    /* try { // try from 003df5e8 to 004df60b has its CatchHandler @ 003df490 */
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
      operator_delete((undefined *)(local_18 + -0x18));
    }
  }
  lVar10 = *plVar6;
  *(void **)(param_1 + 0x28) = pvVar9;
  (**(code **)(lVar10 + 0x30))(&local_10,plVar6);
  uVar7 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x40) = uVar7;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_10 + -8);
      *(int *)(local_10 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_10 + -8);
      do {
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
                    /* try { // try from 003df4fc to 004df4ff has its CatchHandler @ 003df61c */
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
                    /* catch() { ... } // from try @ 003df7e8 with catch @ 003df66c
                       catch() { ... } // from try @ 003df844 with catch @ 003df66c */
      operator_delete((undefined *)(local_10 + -0x18));
      uVar7 = *(ulong *)(param_1 + 0x40);
    }
    else {
      uVar7 = *(ulong *)(param_1 + 0x40);
    }
  }
  pvVar9 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x30))(&local_8,plVar6);
                    /* try { // try from 003df3d0 to 004df3fb has its CatchHandler @ 003df1a0 */
  FUN_00411998(&local_8,pvVar9,*(undefined8 *)(param_1 + 0x40),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar11;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar5 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  lVar10 = *plVar6;
  *(void **)(param_1 + 0x38) = pvVar9;
                    /* try { // try from 003df404 to 004df407 has its CatchHandler @ 003df488 */
  uVar4 = (**(code **)(lVar10 + 0x10))(plVar6);
  *(undefined1 *)(param_1 + 0x48) = uVar4;
                    /* try { // try from 003df410 to 004df413 has its CatchHandler @ 003df480 */
                    /* catch() { ... } // from try @ 003df270 with catch @ 003df418 */
  uVar4 = (**(code **)(*plVar6 + 0x18))(plVar6);
  *(undefined1 *)(param_1 + 0x49) = uVar4;
  plVar6 = (long *)FUN_003de994(param_2);
  puVar12 = *(undefined8 **)PTR_PTR_00501d10;
  if ((char)plVar6[7] == '\x01') {
    uVar1 = puVar12[1];
    *(undefined8 *)(param_1 + 0x4a) = *puVar12;
    *(undefined8 *)(param_1 + 0x52) = uVar1;
    uVar1 = puVar12[3];
    *(undefined8 *)(param_1 + 0x5a) = puVar12[2];
    *(undefined8 *)(param_1 + 0x62) = uVar1;
    *(undefined4 *)(param_1 + 0x6a) = *(undefined4 *)(puVar12 + 4);
  }
  else {
    if ((char)plVar6[7] == '\0') {
      FUN_003d14e0();
                    /* try { // try from 003df4dc to 004df4df has its CatchHandler @ 003df664 */
    }
    (**(code **)(*plVar6 + 0x38))
              (plVar6,puVar12,(long)puVar12 + 0x24,(undefined8 *)(param_1 + 0x4a));
  }
                    /* try { // try from 003df47c to 004df47f has its CatchHandler @ 003df1a0 */
                    /* catch() { ... } // from try @ 003df248 with catch @ 003df480
                       catch() { ... } // from try @ 003df2e8 with catch @ 003df480
                       catch() { ... } // from try @ 003df410 with catch @ 003df480 */
  puVar12 = *(undefined8 **)PTR_PTR_00501aa0;
                    /* catch() { ... } // from try @ 003df210 with catch @ 003df488
                       catch() { ... } // from try @ 003df35c with catch @ 003df488
                       catch() { ... } // from try @ 003df404 with catch @ 003df488 */
  if ((char)plVar6[7] == '\x01') {
    uVar1 = puVar12[1];
    *(undefined8 *)(param_1 + 0x6e) = *puVar12;
    *(undefined8 *)(param_1 + 0x76) = uVar1;
                    /* try { // try from 003df614 to 004df617 has its CatchHandler @ 003df664 */
    *(undefined8 *)(param_1 + 0x7e) = puVar12[2];
                    /* catch() { ... } // from try @ 003df4fc with catch @ 003df61c */
    *(undefined2 *)(param_1 + 0x86) = *(undefined2 *)(puVar12 + 3);
  }
  else {
                    /* catch() { ... } // from try @ 003df4c0 with catch @ 003df490
                       catch() { ... } // from try @ 003df5e8 with catch @ 003df490
                       catch() { ... } // from try @ 003df660 with catch @ 003df490 */
    if ((char)plVar6[7] == '\0') {
      FUN_003d14e0(plVar6);
    }
    (**(code **)(*plVar6 + 0x38))
              (plVar6,puVar12,(long)puVar12 + 0x1a,(undefined8 *)(param_1 + 0x6e));
  }
                    /* try { // try from 003df4c0 to 004df4c3 has its CatchHandler @ 003df490 */
  return;
}


==================================================================

### FUNC 003df7c4 (104 bytes) name=FUN_003df7c4

void FUN_003df7c4(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00546210);
                    /* try { // try from 003df7e8 to 004df7f3 has its CatchHandler @ 003df66c */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
                    /* try { // try from 003df7fc to 004df7ff has its CatchHandler @ 003df820 */
                    /* try { // try from 003df808 to 004df80b has its CatchHandler @ 003df848 */
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd0c8,0);
    if (lVar2 != 0) {
                    /* catch() { ... } // from try @ 003df768 with catch @ 003df820
                       catch() { ... } // from try @ 003df7fc with catch @ 003df820 */
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df82c (104 bytes) name=FUN_003df82c

void FUN_003df82c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* try { // try from 003df844 to 004df847 has its CatchHandler @ 003df66c */
  uVar1 = FUN_003edb10(&DAT_00546218);
                    /* catch() { ... } // from try @ 003df6f0 with catch @ 003df848
                       catch() { ... } // from try @ 003df808 with catch @ 003df848 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
                    /* catch() { ... } // from try @ 003df8c8 with catch @ 003df870
                       catch() { ... } // from try @ 003e0a78 with catch @ 003df870
                       catch() { ... } // from try @ 003e0c54 with catch @ 003df870
                       catch() { ... } // from try @ 003e1040 with catch @ 003df870 */
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd0b0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df894 (104 bytes) name=FUN_003df894

void FUN_003df894(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00546238);
                    /* try { // try from 003df8c8 to 004df8cb has its CatchHandler @ 003df870 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd110,0);
                    /* try { // try from 003df8e4 to 004df8e7 has its CatchHandler @ 003e114c */
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003df8fc (1016 bytes) name=FUN_003df8fc

void FUN_003df8fc(long param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  bool bVar3;
  undefined4 uVar4;
  int iVar5;
  long *plVar6;
  ulong uVar7;
  char *pcVar8;
  void *pvVar9;
  long lVar10;
  int *piVar11;
  undefined8 *puVar12;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
                    /* try { // try from 003df904 to 004df907 has its CatchHandler @ 003e115c */
                    /* try { // try from 003df924 to 004df927 has its CatchHandler @ 003e1154 */
  *(undefined1 *)(param_1 + 0x6f) = 1;
  plVar6 = (long *)FUN_003df894(param_2);
  uVar2 = (**(code **)(*plVar6 + 0x10))();
  *(undefined1 *)(param_1 + 0x21) = uVar2;
  uVar2 = (**(code **)(*plVar6 + 0x18))(plVar6);
  *(undefined1 *)(param_1 + 0x22) = uVar2;
  uVar4 = (**(code **)(*plVar6 + 0x40))(plVar6);
  lVar10 = *plVar6;
  *(undefined4 *)(param_1 + 0x58) = uVar4;
  (**(code **)(lVar10 + 0x20))(&local_40,plVar6);
  uVar7 = *(ulong *)(local_40 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar7;
  if ((undefined *)(local_40 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar5 = *(int *)(local_40 + -8);
      *(int *)(local_40 + -8) = iVar5 + -1;
    }
    else {
      piVar11 = (int *)(local_40 + -8);
      do {
        iVar5 = *piVar11;
        cVar1 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar3) {
          *piVar11 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar5 < 1) {
      operator_delete((undefined *)(local_40 + -0x18));
      uVar7 = *(ulong *)(param_1 + 0x18);
    }
    else {
      uVar7 = *(ulong *)(param_1 + 0x18);
    }
  }
  pcVar8 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x20))(&local_38,plVar6);
  FUN_00411998(&local_38,pcVar8,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_38 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_38 + -0x18),&local_8);
  }
  bVar3 = false;
  *(char **)(param_1 + 0x10) = pcVar8;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar3 = '\0' < *pcVar8;
  }
  lVar10 = *plVar6;
  *(bool *)(param_1 + 0x20) = bVar3;
  (**(code **)(lVar10 + 0x28))(&local_30,plVar6);
  uVar7 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x30) = uVar7;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_30 + -0x18),&local_8);
    uVar7 = *(ulong *)(param_1 + 0x30);
  }
  pvVar9 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x28))(&local_28,plVar6);
  FUN_00411998(&local_28,pvVar9,*(undefined8 *)(param_1 + 0x30),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_28 + -0x18),&local_8);
  }
  lVar10 = *plVar6;
  *(void **)(param_1 + 0x28) = pvVar9;
  (**(code **)(lVar10 + 0x30))(&local_20,plVar6);
  uVar7 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x40) = uVar7;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_20 + -0x18),&local_8);
    uVar7 = *(ulong *)(param_1 + 0x40);
  }
  pvVar9 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x30))(&local_18,plVar6);
  FUN_00411998(&local_18,pvVar9,*(undefined8 *)(param_1 + 0x40),0);
                    /* try { // try from 003dfaec to 004dfaef has its CatchHandler @ 003e1144 */
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_18 + -0x18),&local_8);
  }
  lVar10 = *plVar6;
  *(void **)(param_1 + 0x38) = pvVar9;
  (**(code **)(lVar10 + 0x38))(&local_10,plVar6);
  uVar7 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x50) = uVar7;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_10 + -0x18),&local_8);
    uVar7 = *(ulong *)(param_1 + 0x50);
  }
  pvVar9 = operator_new__(uVar7);
  (**(code **)(*plVar6 + 0x38))(&local_8,plVar6);
  FUN_00411998(&local_8,pvVar9,*(undefined8 *)(param_1 + 0x50),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_8 + -0x18),&local_10);
  }
  lVar10 = *plVar6;
  *(void **)(param_1 + 0x48) = pvVar9;
  uVar4 = (**(code **)(lVar10 + 0x48))(plVar6);
                    /* try { // try from 003dfb90 to 004dfd3b has its CatchHandler @ 003e118c */
  *(undefined4 *)(param_1 + 0x5c) = uVar4;
  uVar4 = (**(code **)(*plVar6 + 0x50))(plVar6);
  *(undefined4 *)(param_1 + 0x60) = uVar4;
  plVar6 = (long *)FUN_003de994(param_2);
  puVar12 = *(undefined8 **)PTR_PTR_00501b68;
  if ((char)plVar6[7] == '\x01') {
    *(undefined8 *)(param_1 + 100) = *puVar12;
    *(undefined2 *)(param_1 + 0x6c) = *(undefined2 *)(puVar12 + 1);
    *(undefined1 *)(param_1 + 0x6e) = *(undefined1 *)((long)puVar12 + 10);
  }
  else {
    if ((char)plVar6[7] == '\0') {
      FUN_003d14e0();
    }
    (**(code **)(*plVar6 + 0x38))(plVar6,puVar12,(long)puVar12 + 0xb,param_1 + 100);
  }
  return;
}


==================================================================

### FUNC 003dfe2c (104 bytes) name=FUN_003dfe2c

void FUN_003dfe2c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* try { // try from 003dfe3c to 004dfe3f has its CatchHandler @ 003e1044 */
  uVar1 = FUN_003edb10(&DAT_00546240);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd148,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003dfe94 (952 bytes) name=FUN_003dfe94

void FUN_003dfe94(long param_1,undefined8 param_2)

{
  undefined1 uVar1;
  bool bVar2;
  undefined4 uVar3;
  long *plVar4;
  ulong uVar5;
  char *pcVar6;
  void *pvVar7;
  long lVar8;
  undefined8 *puVar9;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
                    /* try { // try from 003dfeb0 to 004dfeb3 has its CatchHandler @ 003e118c */
  *(undefined1 *)(param_1 + 0x6f) = 1;
  plVar4 = (long *)FUN_003dfe2c(param_2);
  uVar1 = (**(code **)(*plVar4 + 0x10))();
  *(undefined1 *)(param_1 + 0x21) = uVar1;
  uVar1 = (**(code **)(*plVar4 + 0x18))(plVar4);
  *(undefined1 *)(param_1 + 0x22) = uVar1;
  uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);
  lVar8 = *plVar4;
  *(undefined4 *)(param_1 + 0x58) = uVar3;
  (**(code **)(lVar8 + 0x20))(&local_40,plVar4);
  uVar5 = *(ulong *)(local_40 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar5;
  if ((undefined *)(local_40 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_40 + -0x18),&local_8);
    uVar5 = *(ulong *)(param_1 + 0x18);
  }
  pcVar6 = operator_new__(uVar5);
                    /* try { // try from 003dff44 to 004dff7f has its CatchHandler @ 003e0f44 */
  (**(code **)(*plVar4 + 0x20))(&local_38,plVar4);
  FUN_00411998(&local_38,pcVar6,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_38 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_38 + -0x18),&local_8);
  }
  bVar2 = false;
  *(char **)(param_1 + 0x10) = pcVar6;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = '\0' < *pcVar6;
  }
  lVar8 = *plVar4;
  *(bool *)(param_1 + 0x20) = bVar2;
  (**(code **)(lVar8 + 0x28))(&local_30,plVar4);
  uVar5 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x30) = uVar5;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_30 + -0x18),&local_8);
    uVar5 = *(ulong *)(param_1 + 0x30);
  }
  pvVar7 = operator_new__(uVar5);
  (**(code **)(*plVar4 + 0x28))(&local_28,plVar4);
                    /* try { // try from 003dfff0 to 004e0213 has its CatchHandler @ 003e118c */
  FUN_00411998(&local_28,pvVar7,*(undefined8 *)(param_1 + 0x30),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_28 + -0x18),&local_8);
  }
  lVar8 = *plVar4;
  *(void **)(param_1 + 0x28) = pvVar7;
  (**(code **)(lVar8 + 0x30))(&local_20,plVar4);
  uVar5 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x40) = uVar5;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_20 + -0x18),&local_8);
    uVar5 = *(ulong *)(param_1 + 0x40);
  }
  pvVar7 = operator_new__(uVar5);
  (**(code **)(*plVar4 + 0x30))(&local_18,plVar4);
  FUN_00411998(&local_18,pvVar7,*(undefined8 *)(param_1 + 0x40),0);
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_18 + -0x18),&local_8);
  }
  lVar8 = *plVar4;
  *(void **)(param_1 + 0x38) = pvVar7;
  (**(code **)(lVar8 + 0x38))(&local_10,plVar4);
  uVar5 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x50) = uVar5;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_10 + -0x18),&local_8);
    uVar5 = *(ulong *)(param_1 + 0x50);
  }
  pvVar7 = operator_new__(uVar5);
  (**(code **)(*plVar4 + 0x38))(&local_8,plVar4);
  FUN_00411998(&local_8,pvVar7,*(undefined8 *)(param_1 + 0x50),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_003dca9c((undefined *)(local_8 + -0x18),&local_10);
  }
  lVar8 = *plVar4;
  *(void **)(param_1 + 0x48) = pvVar7;
  uVar3 = (**(code **)(lVar8 + 0x48))(plVar4);
  *(undefined4 *)(param_1 + 0x5c) = uVar3;
  uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);
  *(undefined4 *)(param_1 + 0x60) = uVar3;
  plVar4 = (long *)FUN_003de994(param_2);
  puVar9 = *(undefined8 **)PTR_PTR_00501b68;
  if ((char)plVar4[7] == '\x01') {
    *(undefined8 *)(param_1 + 100) = *puVar9;
    *(undefined2 *)(param_1 + 0x6c) = *(undefined2 *)(puVar9 + 1);
                    /* try { // try from 003e0240 to 004e0243 has its CatchHandler @ 003e1194 */
    *(undefined1 *)(param_1 + 0x6e) = *(undefined1 *)((long)puVar9 + 10);
                    /* try { // try from 003e0248 to 004e024b has its CatchHandler @ 003e118c */
  }
  else {
    if ((char)plVar4[7] == '\0') {
      FUN_003d14e0();
    }
    (**(code **)(*plVar4 + 0x38))(plVar4,puVar9,(long)puVar9 + 0xb,param_1 + 100);
  }
  return;
}


==================================================================

### FUNC 003e0384 (104 bytes) name=FUN_003e0384

void FUN_003e0384(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00546228);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd250,0);
                    /* try { // try from 003e03d4 to 004e044f has its CatchHandler @ 003e10d4 */
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e03ec (104 bytes) name=FUN_003e03ec

void FUN_003e03ec(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00546230);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd238,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e0454 (104 bytes) name=FUN_003e0454

void FUN_003e0454(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00546208);
                    /* try { // try from 003e047c to 004e047f has its CatchHandler @ 003e10dc */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd0f8,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e04bc (268 bytes) name=FUN_003e04bc

undefined1  [16]
FUN_003e04bc(undefined8 param_1,long *param_2,char param_3,long param_4,undefined8 param_5,
            undefined8 param_6,char param_7,char param_8)

{
  long *plVar1;
  undefined8 uVar2;
  size_t sVar3;
  long lVar4;
  undefined1 auVar5 [16];
  undefined1 local_88;
  char local_87;
  char local_86;
  undefined1 local_85;
  char acStack_80 [128];
  
                    /* try { // try from 003e04f0 to 004e051b has its CatchHandler @ 003e10d4 */
  plVar1 = (long *)FUN_003de994(param_4 + 0xd0);
  uVar2 = FUN_003e0454(param_4 + 0xd0);
  if ((char)plVar1[7] == '\0') {
    FUN_003d14e0(plVar1);
    local_88 = (**(code **)(*plVar1 + 0x30))(plVar1,0x25);
  }
  else {
    local_88 = *(undefined1 *)((long)plVar1 + 0x5e);
  }
  if (param_8 == '\0') {
    local_86 = '\0';
    local_87 = param_7;
  }
  else {
    local_85 = 0;
    local_86 = param_7;
    local_87 = param_8;
  }
  FUN_003fd708(uVar2,acStack_80,0x80,&local_88,param_6);
  sVar3 = strlen(acStack_80);
  if (param_3 == '\0') {
                    /* try { // try from 003e0564 to 004e0567 has its CatchHandler @ 003e1128 */
                    /* try { // try from 003e056c to 004e056f has its CatchHandler @ 003e10d4 */
    lVar4 = (**(code **)(*param_2 + 0x60))(param_2,acStack_80,(long)(int)sVar3);
    param_3 = (int)sVar3 != lVar4;
  }
  auVar5[8] = param_3;
  auVar5._0_8_ = param_2;
  auVar5._9_7_ = 0;
  return auVar5;
}


==================================================================

### FUNC 003e05c8 (104 bytes) name=FUN_003e05c8

void FUN_003e05c8(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
                    /* try { // try from 003e05e0 to 004e05e3 has its CatchHandler @ 003e118c */
  uVar1 = FUN_003edb10(&DAT_00546200);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd268,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e0630 (104 bytes) name=FUN_003e0630

void FUN_003e0630(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005461f8);
                    /* try { // try from 003e0654 to 004e0657 has its CatchHandler @ 003e1104 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd298,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e0698 (104 bytes) name=FUN_003e0698

void FUN_003e0698(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005461f0);
                    /* try { // try from 003e06c8 to 004e06cb has its CatchHandler @ 003e1070 */
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fd180,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003e0700 (108 bytes) name=FUN_003e0700

bool FUN_003e0700(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(PTR_DAT_00501da0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
                    /* try { // try from 003e073c to 004e073f has its CatchHandler @ 003e1144 */
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,PTR_PTR_00501cf0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e076c (108 bytes) name=FUN_003e076c

bool FUN_003e076c(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(PTR_DAT_00501e98);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
                    /* try { // try from 003e07b0 to 004e07b3 has its CatchHandler @ 003e1068 */
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,PTR_PTR_00501e10,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e07d8 (108 bytes) name=FUN_003e07d8

bool FUN_003e07d8(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005461e8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
                    /* try { // try from 003e0824 to 004e0827 has its CatchHandler @ 003e113c */
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd050,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e0844 (108 bytes) name=FUN_003e0844

bool FUN_003e0844(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546220);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd080,0);
                    /* try { // try from 003e0898 to 004e089b has its CatchHandler @ 003e11a4 */
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e08b0 (108 bytes) name=FUN_003e08b0

bool FUN_003e08b0(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546210);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd0c8,0);
    bVar1 = lVar3 != 0;
  }
                    /* try { // try from 003e090c to 004e090f has its CatchHandler @ 003e1154 */
  return bVar1;
}


==================================================================

### FUNC 003e091c (108 bytes) name=FUN_003e091c

bool FUN_003e091c(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546218);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd0b0,0);
    bVar1 = lVar3 != 0;
  }
                    /* try { // try from 003e0980 to 004e0983 has its CatchHandler @ 003e115c */
  return bVar1;
}


==================================================================

### FUNC 003e0988 (108 bytes) name=FUN_003e0988

bool FUN_003e0988(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546240);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd148,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e09f4 (108 bytes) name=FUN_003e09f4

bool FUN_003e09f4(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
                    /* try { // try from 003e09f4 to 004e09f7 has its CatchHandler @ 003e114c */
  uVar2 = FUN_003edb10(&DAT_00546228);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd250,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e0a60 (108 bytes) name=FUN_003e0a60

bool FUN_003e0a60(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
                    /* try { // try from 003e0a78 to 004e0a7b has its CatchHandler @ 003df870 */
  uVar2 = FUN_003edb10(&DAT_00546230);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd238,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e0acc (108 bytes) name=FUN_003e0acc

bool FUN_003e0acc(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546208);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd0f8,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e0b38 (108 bytes) name=FUN_003e0b38

bool FUN_003e0b38(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00546200);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd268,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 003e0ba4 (108 bytes) name=FUN_003e0ba4

bool FUN_003e0ba4(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
                    /* try { // try from 003e0bac to 004e0bdf has its CatchHandler @ 003e118c */
  uVar2 = FUN_003edb10(&DAT_005461f8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
                    /* try { // try from 003e0be8 to 004e0beb has its CatchHandler @ 003e10d4 */
                    /* try { // try from 003e0bf4 to 004e0bf7 has its CatchHandler @ 003e1104 */
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd298,0);
    bVar1 = lVar3 != 0;
  }
                    /* try { // try from 003e0c00 to 004e0c03 has its CatchHandler @ 003e118c */
                    /* try { // try from 003e0c0c to 004e0c0f has its CatchHandler @ 003e11a4 */
  return bVar1;
}


==================================================================

### FUNC 003e0c10 (108 bytes) name=FUN_003e0c10

bool FUN_003e0c10(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
                    /* try { // try from 003e0c18 to 004e0c1b has its CatchHandler @ 003e113c */
                    /* try { // try from 003e0c24 to 004e0c27 has its CatchHandler @ 003e1068 */
  uVar2 = FUN_003edb10(&DAT_005461f0);
                    /* try { // try from 003e0c30 to 004e0c33 has its CatchHandler @ 003e1144 */
  bVar1 = false;
                    /* try { // try from 003e0c3c to 004e0c3f has its CatchHandler @ 003e1070 */
                    /* try { // try from 003e0c48 to 004e0c4b has its CatchHandler @ 003e118c */
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
                    /* try { // try from 003e0c54 to 004e0c57 has its CatchHandler @ 003df870 */
                    /* try { // try from 003e0c60 to 004e0c63 has its CatchHandler @ 003e114c */
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fd180,0);
    bVar1 = lVar3 != 0;
  }
                    /* try { // try from 003e0c6c to 004e0c6f has its CatchHandler @ 003e115c */
                    /* try { // try from 003e0c78 to 004e0c7b has its CatchHandler @ 003e1154 */
  return bVar1;
}


==================================================================

### FUNC 003e0c7c (2080 bytes) name=FUN_003e0c7c

void FUN_003e0c7c(undefined8 *param_1,undefined1 param_2,byte *param_3,long param_4,
                 undefined8 *param_5,undefined8 *param_6)

{
  undefined1 *puVar1;
  undefined1 *puVar2;
  uint uVar3;
  uint uVar4;
  long lVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  undefined1 *puVar9;
  byte bVar10;
  long lVar11;
  ulong uVar12;
  undefined8 *puVar13;
  undefined8 *puVar14;
  undefined8 uVar15;
  
  bVar10 = *param_3;
                    /* try { // try from 003e0c84 to 004e0c87 has its CatchHandler @ 003e10d4 */
  lVar11 = 0;
  uVar12 = 0;
  uVar6 = (ulong)bVar10;
  while (lVar8 = (long)param_6 - (long)param_5, (long)uVar6 < lVar8) {
    while( true ) {
      if ((char)bVar10 < '\x01') goto LAB_003e0cd4;
      param_6 = (undefined8 *)((long)param_6 - uVar6);
      if (param_4 - 1U <= uVar12) break;
      uVar12 = uVar12 + 1;
      lVar8 = (long)param_6 - (long)param_5;
      bVar10 = param_3[uVar12];
      uVar6 = (ulong)bVar10;
                    /* try { // try from 003e0cd0 to 004e0cd3 has its CatchHandler @ 003e118c */
      if (lVar8 <= (long)uVar6) goto LAB_003e0cd4;
    }
    lVar11 = lVar11 + 1;
  }
LAB_003e0cd4:
  if (param_5 != param_6) {
    puVar1 = (undefined1 *)((long)param_5 + 1);
    puVar2 = (undefined1 *)((long)param_6 + (1 - (long)puVar1));
    if ((puVar2 < (undefined1 *)0x10) || (param_1 < param_5 + 2 && param_5 < param_1 + 2)) {
      lVar5 = 0;
      do {
        *(undefined1 *)((long)param_1 + lVar5) = *(undefined1 *)((long)param_5 + lVar5);
        lVar5 = lVar5 + 1;
      } while (lVar5 != lVar8);
    }
    else {
                    /* try { // try from 003e0d14 to 004e0d17 has its CatchHandler @ 003e10d4 */
      uVar6 = ((ulong)((long)param_6 + (-0xf - (long)puVar1)) >> 4) + 1;
      uVar7 = 0;
      puVar9 = (undefined1 *)(uVar6 * 0x10);
      puVar13 = param_1;
      puVar14 = param_5;
      do {
        uVar15 = *puVar14;
        uVar7 = uVar7 + 1;
        puVar13[1] = puVar14[1];
        *puVar13 = uVar15;
        puVar13 = puVar13 + 2;
        puVar14 = puVar14 + 2;
      } while (uVar7 < uVar6);
                    /* try { // try from 003e0d44 to 004e0d47 has its CatchHandler @ 003e1164 */
                    /* try { // try from 003e0d74 to 004e0d77 has its CatchHandler @ 003e10d4 */
                    /* try { // try from 003e0de0 to 004e0de3 has its CatchHandler @ 003e1068 */
                    /* try { // try from 003e0df4 to 004e0df7 has its CatchHandler @ 003e113c */
                    /* try { // try from 003e0e08 to 004e0e0b has its CatchHandler @ 003e11a4 */
      if ((((((puVar2 != puVar9) &&
             (*(undefined1 *)(param_1 + uVar6 * 2) = *(undefined1 *)(param_5 + uVar6 * 2),
             param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 1)))) &&
            (*(undefined1 *)((long)param_1 + (long)(puVar9 + 1)) =
                  *(undefined1 *)((long)param_5 + (long)(puVar9 + 1)),
            param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 2)))) &&
           ((*(undefined1 *)((long)param_1 + (long)(puVar9 + 2)) =
                  *(undefined1 *)((long)param_5 + (long)(puVar9 + 2)),
            param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 3)) &&
            (*(undefined1 *)((long)param_1 + (long)(puVar9 + 3)) =
                  *(undefined1 *)((long)param_5 + (long)(puVar9 + 3)),
            param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 4)))))) &&
          (*(undefined1 *)((long)param_1 + (long)(puVar9 + 4)) =
                *(undefined1 *)((long)param_5 + (long)(puVar9 + 4)),
          param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 5)))) &&
         (((((*(undefined1 *)((long)param_1 + (long)(puVar9 + 5)) =
                   *(undefined1 *)((long)param_5 + (long)(puVar9 + 5)),
             param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 6)) &&
             (*(undefined1 *)((long)param_1 + (long)(puVar9 + 6)) =
                   *(undefined1 *)((long)param_5 + (long)(puVar9 + 6)),
             param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 7)))) &&
            ((*(undefined1 *)((long)param_1 + (long)(puVar9 + 7)) =
                   *(undefined1 *)((long)param_5 + (long)(puVar9 + 7)),
             param_6 != param_5 + uVar6 * 2 + 1 &&
             (((*(undefined1 *)(param_1 + uVar6 * 2 + 1) = *(undefined1 *)(param_5 + uVar6 * 2 + 1),
               param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 9)) &&
               (*(undefined1 *)((long)param_1 + (long)(puVar9 + 9)) =
                     *(undefined1 *)((long)param_5 + (long)(puVar9 + 9)),
               param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 10)))) &&
              (*(undefined1 *)((long)param_1 + (long)(puVar9 + 10)) =
                    *(undefined1 *)((long)param_5 + (long)(puVar9 + 10)),
              param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 0xb)))))))) &&
           ((*(undefined1 *)((long)param_1 + (long)(puVar9 + 0xb)) =
                  *(undefined1 *)((long)param_5 + (long)(puVar9 + 0xb)),
            param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 0xc)) &&
            (*(undefined1 *)((long)param_1 + (long)(puVar9 + 0xc)) =
                  *(undefined1 *)((long)param_5 + (long)(puVar9 + 0xc)),
            param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 0xd)))))) &&
          (*(undefined1 *)((long)param_1 + (long)(puVar9 + 0xd)) =
                *(undefined1 *)((long)param_5 + (long)(puVar9 + 0xd)),
          param_6 != (undefined8 *)((long)param_5 + (long)(puVar9 + 0xe)))))) {
        *(undefined1 *)((long)param_1 + (long)(puVar9 + 0xe)) =
             *(undefined1 *)((long)param_5 + (long)(puVar9 + 0xe));
      }
    }
    param_1 = (undefined8 *)((long)param_1 + (long)((long)param_6 + (1 - (long)puVar1)));
  }
  while (puVar13 = param_1, lVar11 = lVar11 + -1, lVar11 != -1) {
    *(undefined1 *)puVar13 = param_2;
    param_1 = (undefined8 *)((long)puVar13 + 1);
    bVar10 = param_3[uVar12];
    uVar4 = (uint)bVar10;
    if (uVar4 != 0) {
      if ((param_1 < param_6 + 2 && param_6 < (undefined8 *)((long)puVar13 + 0x11U)) ||
         (uVar4 < 0x10)) {
        lVar8 = 0;
        do {
          lVar5 = lVar8 + 1;
                    /* try { // try from 003e145c to 004e145f has its CatchHandler @ 003e1fb0 */
          *(undefined1 *)((long)puVar13 + lVar8 + 1) = *(undefined1 *)((long)param_6 + lVar8);
          lVar8 = lVar5;
                    /* try { // try from 003e1464 to 004e14a3 has its CatchHandler @ 003e1f10 */
        } while (lVar5 != (ulong)(byte)(bVar10 - 1) + 1);
      }
      else {
        uVar15 = *param_6;
        uVar4 = (uVar4 - 0x10 >> 4 & 0xf) + 1;
        uVar6 = (ulong)uVar4 & 0xf;
        lVar8 = uVar6 * 0x10;
        *(undefined8 *)((long)puVar13 + 9) = param_6[1];
        *param_1 = uVar15;
        if (uVar4 != 1) {
          uVar15 = param_6[2];
          *(undefined8 *)((long)puVar13 + 0x19) = param_6[3];
          *(undefined8 *)((long)puVar13 + 0x11U) = uVar15;
          if (uVar4 != 2) {
            uVar15 = param_6[4];
            *(undefined8 *)((long)puVar13 + 0x29) = param_6[5];
            *(undefined8 *)((long)puVar13 + 0x21) = uVar15;
            if (uVar4 != 3) {
              uVar15 = param_6[6];
              *(undefined8 *)((long)puVar13 + 0x39) = param_6[7];
              *(undefined8 *)((long)puVar13 + 0x31) = uVar15;
              if (uVar4 != 4) {
                uVar15 = param_6[8];
                *(undefined8 *)((long)puVar13 + 0x49) = param_6[9];
                *(undefined8 *)((long)puVar13 + 0x41) = uVar15;
                if (uVar4 != 5) {
                    /* try { // try from 003e1040 to 004e1043 has its CatchHandler @ 003df870 */
                    /* catch() { ... } // from try @ 003dfe3c with catch @ 003e1044 */
                  uVar15 = param_6[10];
                  *(undefined8 *)((long)puVar13 + 0x59) = param_6[0xb];
                  *(undefined8 *)((long)puVar13 + 0x51) = uVar15;
                  if (uVar4 != 6) {
                    uVar15 = param_6[0xc];
                    /* catch() { ... } // from try @ 003e07b0 with catch @ 003e1068
                       catch() { ... } // from try @ 003e0c24 with catch @ 003e1068
                       catch() { ... } // from try @ 003e0de0 with catch @ 003e1068 */
                    *(undefined8 *)((long)puVar13 + 0x69) = param_6[0xd];
                    *(undefined8 *)((long)puVar13 + 0x61) = uVar15;
                    if (uVar4 != 7) {
                    /* catch() { ... } // from try @ 003e06c8 with catch @ 003e1070
                       catch() { ... } // from try @ 003e0c3c with catch @ 003e1070 */
                      uVar15 = param_6[0xe];
                      *(undefined8 *)((long)puVar13 + 0x79) = param_6[0xf];
                      *(undefined8 *)((long)puVar13 + 0x71) = uVar15;
                      if (uVar4 != 8) {
                    /* catch() { ... } // from try @ 003e0360 with catch @ 003e1094 */
                        uVar15 = param_6[0x10];
                        *(undefined8 *)((long)puVar13 + 0x89) = param_6[0x11];
                        *(undefined8 *)((long)puVar13 + 0x81) = uVar15;
                        if (uVar4 != 9) {
                          uVar15 = param_6[0x12];
                          *(undefined8 *)((long)puVar13 + 0x99) = param_6[0x13];
                          *(undefined8 *)((long)puVar13 + 0x91) = uVar15;
                          if (uVar4 != 10) {
                            uVar15 = param_6[0x14];
                            *(undefined8 *)((long)puVar13 + 0xa9) = param_6[0x15];
                            *(undefined8 *)((long)puVar13 + 0xa1) = uVar15;
                            if (uVar4 != 0xb) {
                    /* catch() { ... } // from try @ 003e0330 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e03d4 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e04f0 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e056c with catch @ 003e10d4
                       catch() { ... } // from try @ 003e0be8 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e0c84 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e0d14 with catch @ 003e10d4
                       catch() { ... } // from try @ 003e0d74 with catch @ 003e10d4 */
                    /* catch() { ... } // from try @ 003e047c with catch @ 003e10dc */
                              uVar15 = param_6[0x16];
                              *(undefined8 *)((long)puVar13 + 0xb9) = param_6[0x17];
                              *(undefined8 *)((long)puVar13 + 0xb1) = uVar15;
                              if (uVar4 != 0xc) {
                                uVar15 = param_6[0x18];
                                *(undefined8 *)((long)puVar13 + 0xc9) = param_6[0x19];
                                *(undefined8 *)((long)puVar13 + 0xc1) = uVar15;
                                if (uVar4 != 0xd) {
                    /* catch() { ... } // from try @ 003e0654 with catch @ 003e1104
                       catch() { ... } // from try @ 003e0bf4 with catch @ 003e1104 */
                                  uVar15 = param_6[0x1a];
                                  *(undefined8 *)((long)puVar13 + 0xd9) = param_6[0x1b];
                                  *(undefined8 *)((long)puVar13 + 0xd1) = uVar15;
                                  if (uVar4 == 0xf) {
                                    uVar15 = param_6[0x1c];
                                    *(undefined8 *)((long)puVar13 + 0xe9) = param_6[0x1d];
                                    *(undefined8 *)((long)puVar13 + 0xe1) = uVar15;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
                    /* catch() { ... } // from try @ 003e0564 with catch @ 003e1128 */
        uVar4 = (uint)bVar10 - (uint)lVar8;
                    /* catch() { ... } // from try @ 003e0824 with catch @ 003e113c
                       catch() { ... } // from try @ 003e0c18 with catch @ 003e113c
                       catch() { ... } // from try @ 003e0df4 with catch @ 003e113c */
        if ((uint)bVar10 != (uint)lVar8) {
          *(undefined1 *)(param_1 + uVar6 * 2) = *(undefined1 *)(param_6 + uVar6 * 2);
          if (((uVar4 & 0xff) != 1) &&
             (*(undefined1 *)((long)param_1 + lVar8 + 1) =
                   *(undefined1 *)((long)param_6 + lVar8 + 1), (uVar4 & 0xff) != 2)) {
            uVar3 = uVar4 & 0xff;
            *(undefined1 *)((long)param_1 + lVar8 + 2) = *(undefined1 *)((long)param_6 + lVar8 + 2);
                    /* try { // try from 003e0ecc to 004e0edb has its CatchHandler @ 003e118c */
            if ((uVar3 != 3) &&
               (((*(undefined1 *)((long)param_1 + lVar8 + 3) =
                       *(undefined1 *)((long)param_6 + lVar8 + 3), uVar3 != 4 &&
                 (*(undefined1 *)((long)param_1 + lVar8 + 4) =
                       *(undefined1 *)((long)param_6 + lVar8 + 4), uVar3 != 5)) &&
                (*(undefined1 *)((long)param_1 + lVar8 + 5) =
                      *(undefined1 *)((long)param_6 + lVar8 + 5), uVar3 != 6)))) {
              uVar4 = uVar4 & 0xff;
              *(undefined1 *)((long)param_1 + lVar8 + 6) =
                   *(undefined1 *)((long)param_6 + lVar8 + 6);
                    /* catch() { ... } // from try @ 003dff44 with catch @ 003e0f44 */
              if ((((uVar4 != 7) &&
                   (*(undefined1 *)((long)param_1 + lVar8 + 7) =
                         *(undefined1 *)((long)param_6 + lVar8 + 7), uVar4 != 8)) &&
                  (*(undefined1 *)(param_1 + uVar6 * 2 + 1) =
                        *(undefined1 *)(param_6 + uVar6 * 2 + 1), uVar4 != 9)) &&
                 (((*(undefined1 *)((long)param_1 + lVar8 + 9) =
                         *(undefined1 *)((long)param_6 + lVar8 + 9), uVar4 != 10 &&
                   (*(undefined1 *)((long)param_1 + lVar8 + 10) =
                         *(undefined1 *)((long)param_6 + lVar8 + 10), uVar4 != 0xb)) &&
                  ((*(undefined1 *)((long)param_1 + lVar8 + 0xb) =
                         *(undefined1 *)((long)param_6 + lVar8 + 0xb), uVar4 != 0xc &&
                   ((*(undefined1 *)((long)param_1 + lVar8 + 0xc) =
                          *(undefined1 *)((long)param_6 + lVar8 + 0xc), uVar4 != 0xd &&
                    (*(undefined1 *)((long)param_1 + lVar8 + 0xd) =
                          *(undefined1 *)((long)param_6 + lVar8 + 0xd), uVar4 != 0xe)))))))) {
                *(undefined1 *)((long)param_1 + lVar8 + 0xe) =
                     *(undefined1 *)((long)param_6 + lVar8 + 0xe);
              }
            }
          }
        }
      }
      lVar8 = (ulong)(byte)(bVar10 - 1) + 1;
      param_6 = (undefined8 *)((long)param_6 + lVar8);
      param_1 = (undefined8 *)((long)param_1 + lVar8);
    }
  }
  while (puVar14 = puVar13, uVar12 = uVar12 - 1, uVar12 != 0xffffffffffffffff) {
    *(undefined1 *)puVar14 = param_2;
    puVar13 = (undefined8 *)((long)puVar14 + 1);
    bVar10 = param_3[uVar12];
    uVar4 = (uint)bVar10;
    if (uVar4 != 0) {
                    /* try { // try from 003e1260 to 004e1263 has its CatchHandler @ 003e1fa8 */
      if ((puVar13 < param_6 + 2 && param_6 < (undefined8 *)((long)puVar14 + 0x11U)) ||
         (uVar4 < 0x10)) {
        lVar11 = 0;
        do {
          lVar8 = lVar11 + 1;
          *(undefined1 *)((long)puVar14 + lVar11 + 1) = *(undefined1 *)((long)param_6 + lVar11);
          lVar11 = lVar8;
        } while (lVar8 != (ulong)(byte)(bVar10 - 1) + 1);
      }
      else {
        uVar15 = *param_6;
        uVar4 = (uVar4 - 0x10 >> 4 & 0xf) + 1;
        uVar6 = (ulong)uVar4 & 0xf;
        lVar11 = uVar6 * 0x10;
        *(undefined8 *)((long)puVar14 + 9) = param_6[1];
        *puVar13 = uVar15;
        if (uVar4 != 1) {
          uVar15 = param_6[2];
          *(undefined8 *)((long)puVar14 + 0x19) = param_6[3];
          *(undefined8 *)((long)puVar14 + 0x11U) = uVar15;
          if (uVar4 != 2) {
            uVar15 = param_6[4];
            *(undefined8 *)((long)puVar14 + 0x29) = param_6[5];
            *(undefined8 *)((long)puVar14 + 0x21) = uVar15;
            if (uVar4 != 3) {
              uVar15 = param_6[6];
              *(undefined8 *)((long)puVar14 + 0x39) = param_6[7];
              *(undefined8 *)((long)puVar14 + 0x31) = uVar15;
              if (uVar4 != 4) {
                uVar15 = param_6[8];
                *(undefined8 *)((long)puVar14 + 0x49) = param_6[9];
                *(undefined8 *)((long)puVar14 + 0x41) = uVar15;
                    /* try { // try from 003e1300 to 004e1303 has its CatchHandler @ 003e1f48 */
                if (uVar4 != 5) {
                  uVar15 = param_6[10];
                  *(undefined8 *)((long)puVar14 + 0x59) = param_6[0xb];
                  *(undefined8 *)((long)puVar14 + 0x51) = uVar15;
                  if (uVar4 != 6) {
                    uVar15 = param_6[0xc];
                    *(undefined8 *)((long)puVar14 + 0x69) = param_6[0xd];
                    *(undefined8 *)((long)puVar14 + 0x61) = uVar15;
                    if (uVar4 != 7) {
                      uVar15 = param_6[0xe];
                      *(undefined8 *)((long)puVar14 + 0x79) = param_6[0xf];
                      *(undefined8 *)((long)puVar14 + 0x71) = uVar15;
                      if (uVar4 != 8) {
                        uVar15 = param_6[0x10];
                        *(undefined8 *)((long)puVar14 + 0x89) = param_6[0x11];
                        *(undefined8 *)((long)puVar14 + 0x81) = uVar15;
                        if (uVar4 != 9) {
                          uVar15 = param_6[0x12];
                          *(undefined8 *)((long)puVar14 + 0x99) = param_6[0x13];
                          *(undefined8 *)((long)puVar14 + 0x91) = uVar15;
                          if (uVar4 != 10) {
                            uVar15 = param_6[0x14];
                            *(undefined8 *)((long)puVar14 + 0xa9) = param_6[0x15];
                            *(undefined8 *)((long)puVar14 + 0xa1) = uVar15;
                            if (uVar4 != 0xb) {
                              uVar15 = param_6[0x16];
                    /* try { // try from 003e13a4 to 004e141b has its CatchHandler @ 003e1f10 */
                              *(undefined8 *)((long)puVar14 + 0xb9) = param_6[0x17];
                              *(undefined8 *)((long)puVar14 + 0xb1) = uVar15;
                              if (uVar4 != 0xc) {
                                uVar15 = param_6[0x18];
                                *(undefined8 *)((long)puVar14 + 0xc9) = param_6[0x19];
                                *(undefined8 *)((long)puVar14 + 0xc1) = uVar15;
                                if (uVar4 != 0xd) {
                                  uVar15 = param_6[0x1a];
                                  *(undefined8 *)((long)puVar14 + 0xd9) = param_6[0x1b];
                                  *(undefined8 *)((long)puVar14 + 0xd1) = uVar15;
                                  if (uVar4 == 0xf) {
                                    uVar15 = param_6[0x1c];
                                    *(undefined8 *)((long)puVar14 + 0xe9) = param_6[0x1d];
                                    *(undefined8 *)((long)puVar14 + 0xe1) = uVar15;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        uVar4 = (uint)bVar10 - (uint)lVar11;
        if ((uint)bVar10 != (uint)lVar11) {
                    /* catch() { ... } // from try @ 003df8e4 with catch @ 003e114c
                       catch() { ... } // from try @ 003e09f4 with catch @ 003e114c
                       catch() { ... } // from try @ 003e0c60 with catch @ 003e114c */
          *(undefined1 *)(puVar13 + uVar6 * 2) = *(undefined1 *)(param_6 + uVar6 * 2);
                    /* catch() { ... } // from try @ 003df924 with catch @ 003e1154
                       catch() { ... } // from try @ 003e090c with catch @ 003e1154
                       catch() { ... } // from try @ 003e0c78 with catch @ 003e1154 */
                    /* catch() { ... } // from try @ 003df904 with catch @ 003e115c
                       catch() { ... } // from try @ 003e0980 with catch @ 003e115c
                       catch() { ... } // from try @ 003e0c6c with catch @ 003e115c */
                    /* catch() { ... } // from try @ 003e0d44 with catch @ 003e1164 */
          if (((uVar4 & 0xff) != 1) &&
             (*(undefined1 *)((long)puVar13 + lVar11 + 1) =
                   *(undefined1 *)((long)param_6 + lVar11 + 1), (uVar4 & 0xff) != 2)) {
            uVar3 = uVar4 & 0xff;
            *(undefined1 *)((long)puVar13 + lVar11 + 2) =
                 *(undefined1 *)((long)param_6 + lVar11 + 2);
                    /* catch() { ... } // from try @ 003dfb90 with catch @ 003e118c
                       catch() { ... } // from try @ 003dfeb0 with catch @ 003e118c
                       catch() { ... } // from try @ 003dfff0 with catch @ 003e118c
                       catch() { ... } // from try @ 003e0248 with catch @ 003e118c
                       catch() { ... } // from try @ 003e05e0 with catch @ 003e118c
                       catch() { ... } // from try @ 003e0bac with catch @ 003e118c
                       catch() { ... } // from try @ 003e0c00 with catch @ 003e118c
                       catch() { ... } // from try @ 003e0c48 with catch @ 003e118c
                       catch() { ... } // from try @ 003e0cd0 with catch @ 003e118c
                       catch() { ... } // from try @ 003e0ecc with catch @ 003e118c */
                    /* catch() { ... } // from try @ 003e0240 with catch @ 003e1194 */
                    /* catch() { ... } // from try @ 003e0898 with catch @ 003e11a4
                       catch() { ... } // from try @ 003e0c0c with catch @ 003e11a4
                       catch() { ... } // from try @ 003e0e08 with catch @ 003e11a4 */
            if ((uVar3 != 3) &&
               (((*(undefined1 *)((long)puVar13 + lVar11 + 3) =
                       *(undefined1 *)((long)param_6 + lVar11 + 3), uVar3 != 4 &&
                 (*(undefined1 *)((long)puVar13 + lVar11 + 4) =
                       *(undefined1 *)((long)param_6 + lVar11 + 4), uVar3 != 5)) &&
                (*(undefined1 *)((long)puVar13 + lVar11 + 5) =
                      *(undefined1 *)((long)param_6 + lVar11 + 5), uVar3 != 6)))) {
              uVar4 = uVar4 & 0xff;
              *(undefined1 *)((long)puVar13 + lVar11 + 6) =
                   *(undefined1 *)((long)param_6 + lVar11 + 6);
                    /* catch() { ... } // from try @ 003e1204 with catch @ 003e11c0
                       catch() { ... } // from try @ 003e1c38 with catch @ 003e11c0
                       catch() { ... } // from try @ 003e1f0c with catch @ 003e11c0 */
                    /* try { // try from 003e1204 to 004e1207 has its CatchHandler @ 003e11c0 */
                    /* try { // try from 003e1220 to 004e1223 has its CatchHandler @ 003e1fa0 */
              if ((((uVar4 != 7) &&
                   (*(undefined1 *)((long)puVar13 + lVar11 + 7) =
                         *(undefined1 *)((long)param_6 + lVar11 + 7), uVar4 != 8)) &&
                  (*(undefined1 *)(puVar13 + uVar6 * 2 + 1) =
                        *(undefined1 *)(param_6 + uVar6 * 2 + 1), uVar4 != 9)) &&
                 (((*(undefined1 *)((long)puVar13 + lVar11 + 9) =
                         *(undefined1 *)((long)param_6 + lVar11 + 9), uVar4 != 10 &&
                   (*(undefined1 *)((long)puVar13 + lVar11 + 10) =
                         *(undefined1 *)((long)param_6 + lVar11 + 10), uVar4 != 0xb)) &&
                  ((*(undefined1 *)((long)puVar13 + lVar11 + 0xb) =
                         *(undefined1 *)((long)param_6 + lVar11 + 0xb), uVar4 != 0xc &&
                   ((*(undefined1 *)((long)puVar13 + lVar11 + 0xc) =
                          *(undefined1 *)((long)param_6 + lVar11 + 0xc), uVar4 != 0xd &&
                    (*(undefined1 *)((long)puVar13 + lVar11 + 0xd) =
                          *(undefined1 *)((long)param_6 + lVar11 + 0xd), uVar4 != 0xe)))))))) {
                *(undefined1 *)((long)puVar13 + lVar11 + 0xe) =
                     *(undefined1 *)((long)param_6 + lVar11 + 0xe);
              }
            }
          }
        }
      }
      lVar11 = (ulong)(byte)(bVar10 - 1) + 1;
                    /* try { // try from 003e1240 to 004e1243 has its CatchHandler @ 003e1f98 */
      param_6 = (undefined8 *)((long)param_6 + lVar11);
      puVar13 = (undefined8 *)((long)puVar13 + lVar11);
    }
  }
  return;
}


==================================================================

### FUNC 003e149c (176 bytes) name=FUN_003e149c

void FUN_003e149c(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined1 param_4,
                 void *param_5,undefined8 param_6,long param_7,int *param_8)

{
  void *__dest;
  int iVar1;
  
  if (param_5 != (void *)0x0) {
    iVar1 = (int)param_5 - (int)param_7;
    __dest = (void *)FUN_003e0c7c(param_6,param_4,param_2,param_3,param_7,param_7 + iVar1);
    memcpy(__dest,param_5,(long)(*param_8 - iVar1));
    *param_8 = (*param_8 - iVar1) + ((int)__dest - (int)param_6);
    return;
  }
  iVar1 = FUN_003e0c7c(param_6,param_4,param_2,param_3,param_7,param_7 + *param_8);
  *param_8 = iVar1 - (int)param_6;
                    /* try { // try from 003e1544 to 004e1547 has its CatchHandler @ 003e1f20 */
  return;
}


==================================================================

### FUNC 003e154c (84 bytes) name=FUN_003e154c

void FUN_003e154c(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4,
                 undefined8 param_5,undefined8 param_6,long param_7,int *param_8)

{
  int iVar1;
  
  iVar1 = FUN_003e0c7c(param_6,param_4,param_2,param_3,param_7,param_7 + *param_8);
  *param_8 = iVar1 - (int)param_6;
  return;
}


==================================================================

### FUNC 003e15a0 (1312 bytes) name=FUN_003e15a0

undefined1  [16]
FUN_003e15a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined1 param_5,
            undefined8 *param_6)

{
  uint uVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  byte *pbVar6;
  undefined8 *puVar7;
  ulong uVar8;
  long lVar9;
  byte *pbVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  ulong uVar14;
  undefined1 auVar15 [16];
  undefined1 *local_38;
  undefined1 auStack_20 [8];
  undefined4 local_18 [2];
  undefined *local_10;
  undefined *local_8;
  
  uVar13 = param_3 & 0xff;
  lVar4 = FUN_003de994(param_4 + 0xd0);
                    /* try { // try from 003e15e8 to 004e1617 has its CatchHandler @ 003e1f10 */
  lVar5 = FUN_003edb10(&DAT_00546238);
  lVar9 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar9 + lVar5 * 8);
  if (lVar12 == 0) {
    puVar7 = operator_new(0x70);
                    /* try { // try from 003e19f4 to 004e19f7 has its CatchHandler @ 003e1f48 */
    *(undefined4 *)(puVar7 + 1) = 0;
    *puVar7 = &PTR_FUN_004f80d0;
    puVar7[2] = 0;
    puVar7[3] = 0;
    *(undefined1 *)(puVar7 + 4) = 0;
    *(undefined1 *)((long)puVar7 + 0x21) = 0;
    *(undefined1 *)((long)puVar7 + 0x22) = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
    puVar7[7] = 0;
    puVar7[8] = 0;
    puVar7[9] = 0;
    puVar7[10] = 0;
    *(undefined4 *)(puVar7 + 0xb) = 0;
    *(undefined1 *)((long)puVar7 + 0x5c) = 0;
    *(undefined1 *)((long)puVar7 + 0x5d) = 0;
    *(undefined1 *)((long)puVar7 + 0x5e) = 0;
    *(undefined1 *)((long)puVar7 + 0x5f) = 0;
    *(undefined1 *)(puVar7 + 0xc) = 0;
    *(undefined1 *)((long)puVar7 + 0x61) = 0;
    *(undefined1 *)((long)puVar7 + 0x62) = 0;
    *(undefined1 *)((long)puVar7 + 99) = 0;
    *(undefined1 *)((long)puVar7 + 0x6f) = 0;
    FUN_003df8fc(puVar7,param_4 + 0xd0);
                    /* try { // try from 003e1a68 to 004e1a6b has its CatchHandler @ 003e1f18 */
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar7,lVar5);
    lVar12 = *(long *)(lVar9 + lVar5 * 8);
  }
  pbVar10 = (byte *)*param_6;
  if (*pbVar10 == *(byte *)(lVar12 + 100)) {
    local_18[0] = *(undefined4 *)(lVar12 + 0x60);
    lVar5 = *(long *)(pbVar10 + -0x18);
    local_38 = *(undefined1 **)(lVar12 + 0x48);
    uVar14 = *(ulong *)(lVar12 + 0x50);
    if (lVar5 == 0) goto LAB_003e18ec;
    pbVar10 = pbVar10 + 1;
  }
  else {
    local_18[0] = *(undefined4 *)(lVar12 + 0x5c);
    uVar14 = *(ulong *)(lVar12 + 0x40);
    local_38 = *(undefined1 **)(lVar12 + 0x38);
    lVar5 = *(long *)(pbVar10 + -0x18);
  }
                    /* try { // try from 003e1638 to 004e163b has its CatchHandler @ 003e1ff4 */
  if ((pbVar10 < pbVar10 + lVar5) &&
     (pbVar6 = pbVar10, (*(byte *)(*(long *)(lVar4 + 0x30) + (ulong)*pbVar10) >> 2 & 1) != 0)) {
    do {
      pbVar6 = pbVar6 + 1;
      if (pbVar6 == pbVar10 + lVar5) goto LAB_003e1670;
    } while ((*(byte *)(*(long *)(lVar4 + 0x30) + (ulong)*pbVar6) >> 2 & 1) != 0);
    lVar5 = (long)pbVar6 - (long)pbVar10;
LAB_003e1670:
    if (lVar5 != 0) {
      local_10 = PTR_DAT_00501f30 + 0x18;
      FUN_00410ed8(&local_10,lVar5 << 1);
      iVar3 = *(int *)(lVar12 + 0x58);
      lVar4 = lVar5 - iVar3;
      if (0 < lVar4) {
        if (iVar3 < 0) {
          lVar4 = lVar5;
        }
        if (*(long *)(lVar12 + 0x18) == 0) {
          FUN_00412fdc(&local_10,pbVar10,lVar4);
          iVar3 = *(int *)(lVar12 + 0x58);
        }
        else {
          FUN_00412ec4(&local_10,0,*(undefined8 *)(local_10 + -0x18),lVar4 << 1,0);
          if (-1 < *(int *)(local_10 + -8)) {
                    /* try { // try from 003e16dc to 004e16df has its CatchHandler @ 003e1ffc */
            FUN_00412cf8(&local_10);
          }
          lVar9 = FUN_003e0c7c(local_10,*(undefined1 *)(lVar12 + 0x22),
                               *(undefined8 *)(lVar12 + 0x10),*(undefined8 *)(lVar12 + 0x18),pbVar10
                               ,pbVar10 + lVar4);
          if (-1 < *(int *)(local_10 + -8)) {
            FUN_00412cf8(&local_10);
          }
          uVar8 = lVar9 - (long)local_10;
          if (*(ulong *)(local_10 + -0x18) < uVar8) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                         "basic_string::erase");
          }
          FUN_00412b08(&local_10,uVar8,*(ulong *)(local_10 + -0x18) - uVar8,0);
          iVar3 = *(int *)(lVar12 + 0x58);
        }
      }
      if (0 < iVar3) {
        FUN_004116e0(&local_10,*(undefined1 *)(lVar12 + 0x21));
        if (lVar4 < 0) {
          FUN_0041168c(&local_10,-lVar4,*(undefined1 *)(lVar12 + 0x65));
          FUN_00411624(&local_10,pbVar10,lVar5);
        }
        else {
          FUN_00411624(&local_10,pbVar10 + lVar4,(long)*(int *)(lVar12 + 0x58));
        }
      }
                    /* try { // try from 003e1780 to 004e17db has its CatchHandler @ 003e1ff4 */
      uVar1 = *(uint *)(param_4 + 0x18) & 0xb0;
      if ((*(uint *)(param_4 + 0x18) >> 9 & 1) == 0) {
        lVar4 = 0;
      }
      else {
        lVar4 = *(long *)(lVar12 + 0x30);
      }
      uVar8 = uVar14 + *(long *)(local_10 + -0x18) + lVar4;
      local_8 = PTR_DAT_00501f30 + 0x18;
      FUN_00410ed8(&local_8,uVar8 * 2);
      uVar11 = *(ulong *)(param_4 + 0x10);
      lVar4 = 0;
      bVar2 = uVar8 < uVar11 && uVar1 == 0x10;
      do {
                    /* try { // try from 003e181c to 004e181f has its CatchHandler @ 003e1fc4 */
                    /* try { // try from 003e1824 to 004e1827 has its CatchHandler @ 003e1ff4 */
        switch(*(undefined1 *)((long)local_18 + lVar4)) {
        case 0:
          if (bVar2) {
LAB_003e1990:
            FUN_0041168c(&local_8,uVar11 - uVar8,param_5);
          }
          break;
        case 1:
          if (bVar2) goto LAB_003e1990;
          FUN_004116e0(&local_8,param_5);
          break;
        case 2:
          if ((*(uint *)(param_4 + 0x18) >> 9 & 1) != 0) {
            FUN_00411624(&local_8,*(undefined8 *)(lVar12 + 0x28),*(undefined8 *)(lVar12 + 0x30));
          }
          break;
        case 3:
          if (uVar14 != 0) {
            FUN_004116e0(&local_8,*local_38);
          }
          break;
        case 4:
                    /* try { // try from 003e1980 to 004e1983 has its CatchHandler @ 003e1f50 */
          FUN_00411464(&local_8,&local_10);
        }
        lVar4 = lVar4 + 1;
      } while (lVar4 != 4);
      if (1 < uVar14) {
        FUN_00411624(&local_8,local_38 + 1,uVar14 - 1);
      }
      uVar14 = *(ulong *)(local_8 + -0x18);
      if (uVar14 < uVar11) {
        if (uVar1 == 0x20) {
          FUN_0041168c(&local_8,uVar11 - uVar14,param_5);
          uVar14 = uVar11;
        }
        else {
          FUN_00412ec4(&local_8,0,0,uVar11 - uVar14,param_5);
          uVar14 = uVar11;
        }
      }
                    /* try { // try from 003e1898 to 004e189b has its CatchHandler @ 003e1f10 */
      if (((param_3 & 0xff) == 0) &&
         (lVar4 = (**(code **)(*param_2 + 0x60))(param_2,local_8,(long)(int)uVar14),
         (int)uVar14 != lVar4)) {
        uVar13 = 1;
      }
      if (local_8 + -0x18 != PTR_DAT_00501f30) {
        FUN_003dca9c(local_8 + -0x18,auStack_20);
      }
      if (local_10 + -0x18 != PTR_DAT_00501f30) {
        FUN_003dca9c(local_10 + -0x18,&local_8);
      }
    }
  }
LAB_003e18ec:
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar15._8_8_ = param_3 & 0xffffffffffffff00 | uVar13;
  auVar15._0_8_ = param_2;
                    /* try { // try from 003e190c to 004e190f has its CatchHandler @ 003e1f74 */
  return auVar15;
}


==================================================================

### FUNC 003e1b44 (1312 bytes) name=FUN_003e1b44

undefined1  [16]
FUN_003e1b44(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined1 param_5,
            undefined8 *param_6)

{
  uint uVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  byte *pbVar6;
  undefined8 *puVar7;
  ulong uVar8;
  long lVar9;
  byte *pbVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  ulong uVar14;
  undefined1 auVar15 [16];
  undefined1 *local_38;
  undefined1 auStack_20 [8];
  undefined4 local_18 [2];
  undefined *local_10;
  undefined *local_8;
  
                    /* try { // try from 003e1b50 to 004e1b53 has its CatchHandler @ 003e1f98 */
  uVar13 = param_3 & 0xff;
  lVar4 = FUN_003de994(param_4 + 0xd0);
  lVar5 = FUN_003edb10(&DAT_00546240);
  lVar9 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar9 + lVar5 * 8);
  if (lVar12 == 0) {
    puVar7 = operator_new(0x70);
                    /* catch() { ... } // from try @ 003e1240 with catch @ 003e1f98
                       catch() { ... } // from try @ 003e1b50 with catch @ 003e1f98
                       catch() { ... } // from try @ 003e1d08 with catch @ 003e1f98 */
    *(undefined4 *)(puVar7 + 1) = 0;
                    /* catch() { ... } // from try @ 003e1220 with catch @ 003e1fa0
                       catch() { ... } // from try @ 003e1bc4 with catch @ 003e1fa0
                       catch() { ... } // from try @ 003e1cfc with catch @ 003e1fa0 */
    *puVar7 = &PTR_FUN_004f80b0;
                    /* catch() { ... } // from try @ 003e1260 with catch @ 003e1fa8
                       catch() { ... } // from try @ 003e1adc with catch @ 003e1fa8
                       catch() { ... } // from try @ 003e1d14 with catch @ 003e1fa8 */
    puVar7[2] = 0;
    puVar7[3] = 0;
                    /* catch() { ... } // from try @ 003e145c with catch @ 003e1fb0 */
    *(undefined1 *)(puVar7 + 4) = 0;
    *(undefined1 *)((long)puVar7 + 0x21) = 0;
    *(undefined1 *)((long)puVar7 + 0x22) = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
                    /* catch() { ... } // from try @ 003e181c with catch @ 003e1fc4 */
    puVar7[7] = 0;
    puVar7[8] = 0;
    puVar7[9] = 0;
    puVar7[10] = 0;
    *(undefined4 *)(puVar7 + 0xb) = 0;
    *(undefined1 *)((long)puVar7 + 0x5c) = 0;
    *(undefined1 *)((long)puVar7 + 0x5d) = 0;
    *(undefined1 *)((long)puVar7 + 0x5e) = 0;
    *(undefined1 *)((long)puVar7 + 0x5f) = 0;
    *(undefined1 *)(puVar7 + 0xc) = 0;
    *(undefined1 *)((long)puVar7 + 0x61) = 0;
    *(undefined1 *)((long)puVar7 + 0x62) = 0;
                    /* catch() { ... } // from try @ 003e1638 with catch @ 003e1ff4
                       catch() { ... } // from try @ 003e1780 with catch @ 003e1ff4
                       catch() { ... } // from try @ 003e1824 with catch @ 003e1ff4
                       catch() { ... } // from try @ 003e1e34 with catch @ 003e1ff4 */
    *(undefined1 *)((long)puVar7 + 99) = 0;
    *(undefined1 *)((long)puVar7 + 0x6f) = 0;
                    /* catch() { ... } // from try @ 003e16dc with catch @ 003e1ffc
                       catch() { ... } // from try @ 003e1d80 with catch @ 003e1ffc */
    FUN_003dfe94(puVar7,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar7,lVar5);
    lVar12 = *(long *)(lVar9 + lVar5 * 8);
  }
  pbVar10 = (byte *)*param_6;
  if (*pbVar10 == *(byte *)(lVar12 + 100)) {
    local_18[0] = *(undefined4 *)(lVar12 + 0x60);
    lVar5 = *(long *)(pbVar10 + -0x18);
    local_38 = *(undefined1 **)(lVar12 + 0x48);
    uVar14 = *(ulong *)(lVar12 + 0x50);
    if (lVar5 == 0) goto LAB_003e1e90;
    pbVar10 = pbVar10 + 1;
  }
  else {
    local_18[0] = *(undefined4 *)(lVar12 + 0x5c);
                    /* try { // try from 003e1bc4 to 004e1bc7 has its CatchHandler @ 003e1fa0 */
    uVar14 = *(ulong *)(lVar12 + 0x40);
    local_38 = *(undefined1 **)(lVar12 + 0x38);
    lVar5 = *(long *)(pbVar10 + -0x18);
  }
  if ((pbVar10 < pbVar10 + lVar5) &&
     (pbVar6 = pbVar10, (*(byte *)(*(long *)(lVar4 + 0x30) + (ulong)*pbVar10) >> 2 & 1) != 0)) {
    do {
      pbVar6 = pbVar6 + 1;
      if (pbVar6 == pbVar10 + lVar5) goto LAB_003e1c14;
    } while ((*(byte *)(*(long *)(lVar4 + 0x30) + (ulong)*pbVar6) >> 2 & 1) != 0);
    lVar5 = (long)pbVar6 - (long)pbVar10;
LAB_003e1c14:
    if (lVar5 != 0) {
      local_10 = PTR_DAT_00501f30 + 0x18;
      FUN_00410ed8(&local_10,lVar5 << 1);
                    /* try { // try from 003e1c38 to 004e1cf3 has its CatchHandler @ 003e11c0 */
      iVar3 = *(int *)(lVar12 + 0x58);
      lVar4 = lVar5 - iVar3;
      if (0 < lVar4) {
        if (iVar3 < 0) {
          lVar4 = lVar5;
        }
        if (*(long *)(lVar12 + 0x18) == 0) {
                    /* catch() { ... } // from try @ 003e1300 with catch @ 003e1f48
                       catch() { ... } // from try @ 003e19f4 with catch @ 003e1f48
                       catch() { ... } // from try @ 003e1d2c with catch @ 003e1f48 */
                    /* catch() { ... } // from try @ 003e1980 with catch @ 003e1f50
                       catch() { ... } // from try @ 003e1d38 with catch @ 003e1f50 */
          FUN_00412fdc(&local_10,pbVar10,lVar4);
          iVar3 = *(int *)(lVar12 + 0x58);
        }
        else {
          FUN_00412ec4(&local_10,0,*(undefined8 *)(local_10 + -0x18),lVar4 << 1,0);
          if (-1 < *(int *)(local_10 + -8)) {
            FUN_00412cf8(&local_10);
          }
          lVar9 = FUN_003e0c7c(local_10,*(undefined1 *)(lVar12 + 0x22),
                               *(undefined8 *)(lVar12 + 0x10),*(undefined8 *)(lVar12 + 0x18),pbVar10
                               ,pbVar10 + lVar4);
          if (-1 < *(int *)(local_10 + -8)) {
            FUN_00412cf8(&local_10);
          }
          uVar8 = lVar9 - (long)local_10;
          if (*(ulong *)(local_10 + -0x18) < uVar8) {
                    /* try { // try from 003e20c4 to 004e20c7 has its CatchHandler @ 003e2bc8 */
                    /* WARNING: Subroutine does not return */
            FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                         "basic_string::erase");
          }
          FUN_00412b08(&local_10,uVar8,*(ulong *)(local_10 + -0x18) - uVar8,0);
          iVar3 = *(int *)(lVar12 + 0x58);
        }
      }
      if (0 < iVar3) {
                    /* try { // try from 003e1cfc to 004e1cff has its CatchHandler @ 003e1fa0 */
        FUN_004116e0(&local_10,*(undefined1 *)(lVar12 + 0x21));
        if (lVar4 < 0) {
          FUN_0041168c(&local_10,-lVar4,*(undefined1 *)(lVar12 + 0x65));
                    /* catch() { ... } // from try @ 003e190c with catch @ 003e1f74
                       catch() { ... } // from try @ 003e1d44 with catch @ 003e1f74 */
          FUN_00411624(&local_10,pbVar10,lVar5);
        }
        else {
                    /* try { // try from 003e1d08 to 004e1d0b has its CatchHandler @ 003e1f98 */
          FUN_00411624(&local_10,pbVar10 + lVar4,(long)*(int *)(lVar12 + 0x58));
        }
      }
                    /* try { // try from 003e1d14 to 004e1d17 has its CatchHandler @ 003e1fa8 */
                    /* try { // try from 003e1d20 to 004e1d23 has its CatchHandler @ 003e1f18 */
      uVar1 = *(uint *)(param_4 + 0x18) & 0xb0;
                    /* try { // try from 003e1d2c to 004e1d2f has its CatchHandler @ 003e1f48 */
      if ((*(uint *)(param_4 + 0x18) >> 9 & 1) == 0) {
        lVar4 = 0;
      }
      else {
        lVar4 = *(long *)(lVar12 + 0x30);
      }
                    /* try { // try from 003e1d38 to 004e1d3b has its CatchHandler @ 003e1f50 */
      uVar8 = uVar14 + *(long *)(local_10 + -0x18) + lVar4;
                    /* try { // try from 003e1d44 to 004e1d47 has its CatchHandler @ 003e1f74 */
                    /* try { // try from 003e1d50 to 004e1d5f has its CatchHandler @ 003e1f10 */
      local_8 = PTR_DAT_00501f30 + 0x18;
      FUN_00410ed8(&local_8,uVar8 * 2);
                    /* try { // try from 003e1d68 to 004e1d6b has its CatchHandler @ 003e1f20 */
                    /* try { // try from 003e1d74 to 004e1d77 has its CatchHandler @ 003e1f10 */
      uVar11 = *(ulong *)(param_4 + 0x10);
                    /* try { // try from 003e1d80 to 004e1d83 has its CatchHandler @ 003e1ffc */
      lVar4 = 0;
                    /* try { // try from 003e1d94 to 004e1d97 has its CatchHandler @ 003e1f18 */
      bVar2 = uVar8 < uVar11 && uVar1 == 0x10;
      do {
        switch(*(undefined1 *)((long)local_18 + lVar4)) {
        case 0:
          if (bVar2) {
LAB_003e1f34:
            FUN_0041168c(&local_8,uVar11 - uVar8,param_5);
          }
          break;
        case 1:
          if (bVar2) goto LAB_003e1f34;
                    /* try { // try from 003e1f0c to 004e1f0f has its CatchHandler @ 003e11c0 */
                    /* catch() { ... } // from try @ 003e13a4 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1464 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e15e8 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1898 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1d50 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1d74 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1dd8 with catch @ 003e1f10
                       catch() { ... } // from try @ 003e1e24 with catch @ 003e1f10 */
          FUN_004116e0(&local_8,param_5);
                    /* catch() { ... } // from try @ 003e1a68 with catch @ 003e1f18
                       catch() { ... } // from try @ 003e1d20 with catch @ 003e1f18
                       catch() { ... } // from try @ 003e1d94 with catch @ 003e1f18 */
          break;
        case 2:
          if ((*(uint *)(param_4 + 0x18) >> 9 & 1) != 0) {
            FUN_00411624(&local_8,*(undefined8 *)(lVar12 + 0x28),*(undefined8 *)(lVar12 + 0x30));
          }
          break;
        case 3:
          if (uVar14 != 0) {
            FUN_004116e0(&local_8,*local_38);
          }
          break;
        case 4:
                    /* catch() { ... } // from try @ 003e1544 with catch @ 003e1f20
                       catch() { ... } // from try @ 003e1d68 with catch @ 003e1f20 */
          FUN_00411464(&local_8,&local_10);
        }
        lVar4 = lVar4 + 1;
                    /* try { // try from 003e1dd8 to 004e1ddb has its CatchHandler @ 003e1f10 */
      } while (lVar4 != 4);
      if (1 < uVar14) {
        FUN_00411624(&local_8,local_38 + 1,uVar14 - 1);
      }
      uVar14 = *(ulong *)(local_8 + -0x18);
      if (uVar14 < uVar11) {
        if (uVar1 == 0x20) {
          FUN_0041168c(&local_8,uVar11 - uVar14,param_5);
          uVar14 = uVar11;
                    /* catch() { ... } // from try @ 003e2068 with catch @ 003e2024
                       catch() { ... } // from try @ 003e2934 with catch @ 003e2024
                       catch() { ... } // from try @ 003e29d4 with catch @ 003e2024
                       catch() { ... } // from try @ 003e2bbc with catch @ 003e2024 */
        }
        else {
                    /* try { // try from 003e1e1c to 004e1e1f has its CatchHandler @ 003e1e60 */
                    /* try { // try from 003e1e24 to 004e1e27 has its CatchHandler @ 003e1f10 */
          FUN_00412ec4(&local_8,0,0,uVar11 - uVar14,param_5);
          uVar14 = uVar11;
        }
      }
                    /* try { // try from 003e1e34 to 004e1e37 has its CatchHandler @ 003e1ff4 */
      if (((param_3 & 0xff) == 0) &&
         (lVar4 = (**(code **)(*param_2 + 0x60))(param_2,local_8,(long)(int)uVar14),
         (int)uVar14 != lVar4)) {
        uVar13 = 1;
      }
                    /* catch() { ... } // from try @ 003e1e1c with catch @ 003e1e60 */
      if (local_8 + -0x18 != PTR_DAT_00501f30) {
        FUN_003dca9c(local_8 + -0x18,auStack_20);
      }
      if (local_10 + -0x18 != PTR_DAT_00501f30) {
        FUN_003dca9c(local_10 + -0x18,&local_8);
      }
    }
  }
LAB_003e1e90:
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar15._8_8_ = param_3 & 0xffffffffffffff00 | uVar13;
  auVar15._0_8_ = param_2;
  return auVar15;
}


==================================================================

### FUNC 003e20e8 (520 bytes) name=FUN_003e20e8

undefined1  [16]
FUN_003e20e8(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            char param_5,long param_6,undefined1 param_7)

{
  char cVar1;
  bool bVar2;
  void *pvVar3;
  int iVar4;
  long *plVar5;
  undefined *puVar6;
  int *piVar7;
  size_t __n;
  undefined1 auVar8 [16];
  undefined1 auStack_1400 [4960];
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  void *local_8;
  
  FUN_003ece1c(auStack_10,param_6 + 0xd0);
  plVar5 = (long *)FUN_003de994(auStack_10);
  local_8 = (void *)FUN_003ed450();
                    /* try { // try from 003e2164 to 004e2167 has its CatchHandler @ 003e2c9c */
  iVar4 = FUN_003dd040(param_1,&local_8,auStack_1400,0,"%.*Lf",0);
  __n = (size_t)iVar4;
  FUN_00410b48(&local_8,__n,0,auStack_18);
  if (-1 < *(int *)((long)local_8 + -8)) {
    FUN_00412cf8(&local_8);
  }
  pvVar3 = local_8;
  if ((char)plVar5[7] == '\x01') {
                    /* try { // try from 003e22d0 to 004e230f has its CatchHandler @ 003e2be4 */
    memcpy(local_8,auStack_1400,__n);
  }
  else {
    if ((char)plVar5[7] == '\0') {
      FUN_003d14e0(plVar5);
                    /* try { // try from 003e22c8 to 004e22cb has its CatchHandler @ 003e2bd0 */
    }
    (**(code **)(*plVar5 + 0x38))(plVar5,auStack_1400,auStack_1400 + __n,pvVar3);
  }
  if (param_5 == '\0') {
    auVar8 = FUN_003e1b44(param_2,param_3,param_4,param_6,param_7,&local_8);
    puVar6 = (undefined *)((long)local_8 + -0x18);
    if (puVar6 == PTR_DAT_00501f30) goto LAB_003e2224;
  }
  else {
    auVar8 = FUN_003e15a0(param_2,param_3,param_4,param_6,param_7,&local_8);
                    /* try { // try from 003e2208 to 004e227f has its CatchHandler @ 003e2be4 */
    puVar6 = (undefined *)((long)local_8 + -0x18);
    if (puVar6 == PTR_DAT_00501f30) goto LAB_003e2224;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)((long)local_8 + -8);
    *(int *)((long)local_8 + -8) = iVar4 + -1;
  }
  else {
    piVar7 = (int *)((long)local_8 + -8);
    do {
      iVar4 = *piVar7;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar2) {
        *piVar7 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar4 < 1) {
    operator_delete(puVar6);
  }
LAB_003e2224:
  FUN_003ed708(auStack_10);
  return auVar8;
}


==================================================================

### FUNC 003e232c (68 bytes) name=FUN_003e232c

void FUN_003e232c(void)

{
  char in_w3;
  
  if (in_w3 == '\0') {
    FUN_003e1b44();
    return;
  }
  FUN_003e15a0();
  return;
}


==================================================================

### FUNC 003e2370 (504 bytes) name=FUN_003e2370

void FUN_003e2370(long param_1,byte param_2,char *param_3,char *param_4,long param_5,size_t param_6)

{
  uint uVar1;
  char cVar2;
  char cVar3;
  long *plVar4;
  char *__s;
  size_t __n;
  long lVar5;
  
  uVar1 = *(uint *)(param_1 + 0x18) & 0xb0;
  __n = param_5 - param_6;
  if (uVar1 == 0x20) {
                    /* try { // try from 003e2520 to 004e2523 has its CatchHandler @ 003e2bf4 */
    memcpy(param_3,param_4,param_6);
    memset(param_3 + param_6,(uint)param_2,__n);
    return;
  }
                    /* try { // try from 003e23b0 to 004e23b3 has its CatchHandler @ 003e2c74 */
  lVar5 = 0;
  __s = param_3;
  if (uVar1 != 0x10) goto LAB_003e23b8;
  plVar4 = (long *)FUN_003de994(param_1 + 0xd0);
  if ((char)plVar4[7] == '\0') {
    cVar2 = FUN_003dcafc(plVar4,0x2d);
    cVar3 = *param_4;
    if (cVar3 != cVar2) {
      if ((char)plVar4[7] != '\0') goto LAB_003e240c;
      FUN_003d14e0(plVar4);
      cVar2 = (**(code **)(*plVar4 + 0x30))(plVar4,0x2b);
      cVar3 = *param_4;
      if (cVar3 != cVar2) {
        if ((char)plVar4[7] != '\0') goto LAB_003e2418;
                    /* try { // try from 003e24ac to 004e24d7 has its CatchHandler @ 003e2bf4 */
        FUN_003d14e0(plVar4);
        cVar2 = (**(code **)(*plVar4 + 0x30))(plVar4,0x30);
        cVar3 = *param_4;
        if ((cVar3 == cVar2) && (1 < (long)param_6)) {
          if ((char)plVar4[7] != '\0') goto LAB_003e242c;
          cVar3 = FUN_003dcafc(plVar4,0x78);
          cVar2 = param_4[1];
          if (cVar2 != cVar3) {
            if ((char)plVar4[7] != '\0') goto LAB_003e2440;
            cVar3 = FUN_003dcafc(plVar4,0x58);
            cVar2 = param_4[1];
                    /* try { // try from 003e2518 to 004e251b has its CatchHandler @ 003e2c58 */
            goto LAB_003e2444;
          }
          goto LAB_003e254c;
        }
        goto LAB_003e244c;
      }
    }
  }
  else {
    cVar3 = *param_4;
    if (cVar3 != *(char *)((long)plVar4 + 0x66)) {
LAB_003e240c:
      if (*(char *)((long)plVar4 + 100) != cVar3) {
LAB_003e2418:
        if ((*(char *)((long)plVar4 + 0x69) == cVar3) && (1 < (long)param_6)) {
LAB_003e242c:
          cVar2 = param_4[1];
          if (*(char *)((long)plVar4 + 0xb1) != cVar2) {
LAB_003e2440:
            cVar3 = *(char *)((long)plVar4 + 0x91);
LAB_003e2444:
            if (cVar2 != cVar3) goto LAB_003e244c;
LAB_003e254c:
            cVar3 = *param_4;
          }
          lVar5 = 2;
          *param_3 = cVar3;
          __s = param_3 + 2;
          param_3[1] = param_4[1];
        }
        else {
LAB_003e244c:
          lVar5 = 0;
        }
        goto LAB_003e23b8;
      }
    }
  }
                    /* try { // try from 003e2454 to 004e247f has its CatchHandler @ 003e2be4 */
  __s = param_3 + 1;
  *param_3 = cVar3;
  lVar5 = 1;
LAB_003e23b8:
  memset(__s,(uint)param_2,__n);
  memcpy(__s + __n,param_4 + lVar5,param_6 - lVar5);
  return;
}


==================================================================

### FUNC 003e2568 (64 bytes) name=FUN_003e2568

void FUN_003e2568(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,int *param_7)

{
  FUN_003e2370(param_4,param_2,param_5,param_6,param_3,(long)*param_7);
                    /* try { // try from 003e2594 to 004e2597 has its CatchHandler @ 003e2be4 */
  *param_7 = (int)param_3;
  return;
}


==================================================================

### FUNC 003e25a8 (872 bytes) name=FUN_003e25a8

undefined1  [16]
FUN_003e25a8(undefined8 param_1,undefined8 param_2,long *param_3,char param_4,long param_5,
            undefined1 param_6,undefined1 param_7)

{
  bool bVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long *plVar5;
  void *pvVar6;
  undefined8 *puVar7;
  int iVar8;
  undefined1 *puVar9;
  size_t sVar10;
  size_t sVar11;
  long lVar12;
  undefined1 *puVar13;
  long lVar14;
  undefined1 auVar15 [16];
  int local_1c;
  undefined8 local_18;
  undefined1 auStack_10 [16];
  
  lVar4 = FUN_003edb10(&DAT_00546220);
  lVar14 = *(long *)(*(long *)(param_5 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar14 + lVar4 * 8);
  if (lVar12 == 0) {
    puVar7 = operator_new(0x90);
    *(undefined4 *)(puVar7 + 1) = 0;
    *puVar7 = &PTR_FUN_004f80f0;
    puVar7[2] = 0;
    puVar7[3] = 0;
                    /* try { // try from 003e28c0 to 004e28c3 has its CatchHandler @ 003e2bc0 */
    *(undefined1 *)(puVar7 + 4) = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
    puVar7[7] = 0;
    puVar7[8] = 0;
    *(undefined1 *)(puVar7 + 9) = 0;
    *(undefined1 *)((long)puVar7 + 0x49) = 0;
    *(undefined1 *)(puVar7 + 0x11) = 0;
    FUN_003df230(puVar7,param_5 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_5 + 0xd0),puVar7,lVar4);
    lVar12 = *(long *)(lVar14 + lVar4 * 8);
  }
                    /* try { // try from 003e2608 to 004e260b has its CatchHandler @ 003e2c18 */
  lVar4 = *(long *)(param_5 + 8);
  iVar8 = (int)lVar4;
  if (lVar4 < 0) {
    iVar8 = 6;
    lVar4 = 6;
  }
  FUN_003ee004(param_5,auStack_10,param_7);
  iVar2 = iVar8 + 0x1e;
  if ((*(uint *)(param_5 + 0x18) & 4) != 0) {
    iVar2 = iVar8 + 0x138;
  }
  lVar14 = -((long)iVar2 + 0x1eU & 0xfffffffffffffff0);
  local_18 = FUN_003ed450();
                    /* try { // try from 003e267c to 004e267f has its CatchHandler @ 003e2ca4 */
  local_1c = FUN_003dd040(param_1,&local_18,&stack0xffffffffffffff60 + lVar14,0,auStack_10,lVar4);
  plVar5 = (long *)FUN_003de994(param_5 + 0xd0);
  iVar8 = local_1c;
  sVar10 = (size_t)local_1c;
  lVar4 = -(sVar10 + 0x1e & 0xfffffffffffffff0);
  if ((char)plVar5[7] == '\x01') {
    memcpy(&stack0xffffffffffffff60 + lVar4 + lVar14,&stack0xffffffffffffff60 + lVar14,sVar10);
  }
  else {
    if ((char)plVar5[7] == '\0') {
      FUN_003d14e0();
    }
    (**(code **)(*plVar5 + 0x38))
              (plVar5,&stack0xffffffffffffff60 + lVar14,&stack0xffffffffffffff60 + sVar10 + lVar14,
               &stack0xffffffffffffff60 + lVar4 + lVar14);
                    /* try { // try from 003e26f0 to 004e26f3 has its CatchHandler @ 003e2c9c */
    sVar10 = (size_t)local_1c;
    iVar8 = local_1c;
  }
  pvVar6 = memchr(&stack0xffffffffffffff60 + lVar14,0x2e,sVar10);
  if (pvVar6 == (void *)0x0) {
    puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14;
                    /* try { // try from 003e27d8 to 004e27db has its CatchHandler @ 003e2bc8 */
    if ((*(char *)(lVar12 + 0x20) == '\0') ||
       ((2 < iVar8 &&
        (((puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
          0x39 < (byte)(&stack0xffffffffffffff61)[lVar14] ||
          (puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
          9 < (byte)((&stack0xffffffffffffff62)[lVar14] - 0x30))) ||
         (puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
         (byte)(&stack0xffffffffffffff61)[lVar14] < 0x30)))))) goto LAB_003e2720;
    puVar9 = (undefined1 *)0x0;
  }
  else {
    puVar9 = (undefined1 *)
             ((long)pvVar6 +
             (long)(&stack0xffffffffffffff60 + (lVar4 - (long)&stack0xffffffffffffff60)));
    *(undefined1 *)
     ((long)pvVar6 + (long)(&stack0xffffffffffffff60 + (lVar4 - (long)&stack0xffffffffffffff60))) =
         *(undefined1 *)(lVar12 + 0x48);
    puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14;
    if (*(char *)(lVar12 + 0x20) == '\0') goto LAB_003e2720;
  }
  lVar3 = -(sVar10 * 2 + 0x1e & 0xfffffffffffffff0);
  bVar1 = ((&stack0xffffffffffffff60)[lVar14] - 0x2b & 0xfd) == 0;
  if (bVar1) {
    (&stack0xffffffffffffff60)[lVar3 + lVar4 + lVar14] = (&stack0xffffffffffffff60)[lVar4 + lVar14];
    local_1c = iVar8 + -1;
  }
                    /* try { // try from 003e284c to 004e284f has its CatchHandler @ 003e2bec */
  FUN_003e149c(param_2,*(undefined8 *)(lVar12 + 0x10),*(undefined8 *)(lVar12 + 0x18),
               *(undefined1 *)(lVar12 + 0x49),puVar9,
               &stack0xffffffffffffff60 + (ulong)bVar1 + lVar3 + lVar4 + lVar14,
               &stack0xffffffffffffff60 + (ulong)bVar1 + lVar4 + lVar14,&local_1c);
  local_1c = (uint)bVar1 + local_1c;
  sVar10 = (size_t)local_1c;
  puVar13 = &stack0xffffffffffffff60 + lVar3 + lVar4 + lVar14;
LAB_003e2720:
  lVar4 = *(long *)(param_5 + 0x10);
  sVar11 = sVar10;
  puVar9 = puVar13;
  if ((long)sVar10 < lVar4) {
    lVar12 = -(lVar4 + 0x1eU & 0xfffffffffffffff0);
    puVar9 = puVar13 + lVar12;
    sVar11 = (size_t)(int)lVar4;
    FUN_003e2370(param_5,param_6,(long)puVar13 + lVar12,puVar13,lVar4,sVar10);
    local_1c = (int)lVar4;
  }
                    /* try { // try from 003e2764 to 004e2767 has its CatchHandler @ 003e2c6c */
  *(undefined8 *)(param_5 + 0x10) = 0;
  if (param_4 == '\0') {
    sVar10 = (**(code **)(*param_3 + 0x60))(param_3,puVar9,sVar11);
    param_4 = sVar10 != sVar11;
  }
  auVar15[8] = param_4;
  auVar15._0_8_ = param_3;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 003e2940 (24 bytes) name=FUN_003e2940

void FUN_003e2940(void)

{
  FUN_003e25a8();
  return;
}


==================================================================

### FUNC 003e2958 (852 bytes) name=FUN_003e2958

undefined1  [16]
FUN_003e2958(undefined8 param_1,undefined8 param_2,long *param_3,char param_4,long param_5,
            undefined1 param_6,undefined1 param_7)

{
  bool bVar1;
  long lVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  void *pvVar6;
  undefined8 *puVar7;
  int iVar8;
  undefined1 *puVar9;
  long lVar10;
  size_t sVar11;
  size_t sVar12;
  undefined1 *puVar13;
  long lVar14;
  undefined1 auVar15 [16];
  int local_1c;
  undefined8 local_18;
  undefined1 auStack_10 [16];
  
  lVar4 = FUN_003edb10(&DAT_00546220);
  lVar14 = *(long *)(*(long *)(param_5 + 0xd0) + 0x18);
  lVar10 = *(long *)(lVar14 + lVar4 * 8);
  if (lVar10 == 0) {
    puVar7 = operator_new(0x90);
    *(undefined4 *)(puVar7 + 1) = 0;
    *puVar7 = &PTR_FUN_004f80f0;
    puVar7[2] = 0;
                    /* catch() { ... } // from try @ 003e2518 with catch @ 003e2c58 */
    puVar7[3] = 0;
    *(undefined1 *)(puVar7 + 4) = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
    puVar7[7] = 0;
                    /* catch() { ... } // from try @ 003e2764 with catch @ 003e2c6c
                       catch() { ... } // from try @ 003e2a04 with catch @ 003e2c6c
                       catch() { ... } // from try @ 003e2a54 with catch @ 003e2c6c */
    puVar7[8] = 0;
    *(undefined1 *)(puVar7 + 9) = 0;
                    /* catch() { ... } // from try @ 003e23b0 with catch @ 003e2c74
                       catch() { ... } // from try @ 003e29bc with catch @ 003e2c74 */
    *(undefined1 *)((long)puVar7 + 0x49) = 0;
    *(undefined1 *)(puVar7 + 0x11) = 0;
    FUN_003df230(puVar7,param_5 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_5 + 0xd0),puVar7,lVar4);
    lVar10 = *(long *)(lVar14 + lVar4 * 8);
  }
  lVar4 = *(long *)(param_5 + 8);
                    /* try { // try from 003e29bc to 004e29bf has its CatchHandler @ 003e2c74 */
  iVar8 = (int)lVar4;
                    /* try { // try from 003e29c8 to 004e29cb has its CatchHandler @ 003e2be4 */
  if (lVar4 < 0) {
    iVar8 = 6;
    lVar4 = 6;
  }
                    /* try { // try from 003e29e0 to 004e29e3 has its CatchHandler @ 003e2bc0 */
  FUN_003ee004(param_5,auStack_10,param_7);
  iVar3 = iVar8 + 0x42;
                    /* try { // try from 003e29ec to 004e29ef has its CatchHandler @ 003e2bec */
  if ((*(uint *)(param_5 + 0x18) >> 2 & 1) != 0) {
    iVar3 = iVar8 + 0x1348;
  }
                    /* try { // try from 003e29f8 to 004e29fb has its CatchHandler @ 003e2bc8 */
                    /* try { // try from 003e2a04 to 004e2a07 has its CatchHandler @ 003e2c6c */
  lVar14 = -((long)iVar3 + 0x1eU & 0xfffffffffffffff0);
                    /* try { // try from 003e2a10 to 004e2a13 has its CatchHandler @ 003e2c9c */
  local_18 = FUN_003ed450();
                    /* try { // try from 003e2a1c to 004e2a1f has its CatchHandler @ 003e2ca4 */
                    /* try { // try from 003e2a28 to 004e2a2b has its CatchHandler @ 003e2c18 */
                    /* try { // try from 003e2a34 to 004e2a43 has its CatchHandler @ 003e2be4 */
  local_1c = FUN_003dd040(param_1,&local_18,&stack0xffffffffffffff60 + lVar14,0,auStack_10,lVar4);
  plVar5 = (long *)FUN_003de994(param_5 + 0xd0);
  iVar8 = local_1c;
  sVar11 = (size_t)local_1c;
                    /* try { // try from 003e2a54 to 004e2a57 has its CatchHandler @ 003e2c6c */
  lVar4 = -(sVar11 + 0x1e & 0xfffffffffffffff0);
  if ((char)plVar5[7] == '\x01') {
                    /* catch() { ... } // from try @ 003e2164 with catch @ 003e2c9c
                       catch() { ... } // from try @ 003e26f0 with catch @ 003e2c9c
                       catch() { ... } // from try @ 003e2a10 with catch @ 003e2c9c */
                    /* catch() { ... } // from try @ 003e267c with catch @ 003e2ca4
                       catch() { ... } // from try @ 003e2a1c with catch @ 003e2ca4 */
    memcpy(&stack0xffffffffffffff60 + lVar4 + lVar14,&stack0xffffffffffffff60 + lVar14,sVar11);
  }
  else {
    if ((char)plVar5[7] == '\0') {
      FUN_003d14e0();
    }
    (**(code **)(*plVar5 + 0x38))
              (plVar5,&stack0xffffffffffffff60 + lVar14,&stack0xffffffffffffff60 + sVar11 + lVar14,
               &stack0xffffffffffffff60 + lVar4 + lVar14);
    sVar11 = (size_t)local_1c;
    iVar8 = local_1c;
  }
                    /* try { // try from 003e2a98 to 004e2a9b has its CatchHandler @ 003e2be4 */
  pvVar6 = memchr(&stack0xffffffffffffff60 + lVar14,0x2e,sVar11);
  if (pvVar6 == (void *)0x0) {
    puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14;
    if ((*(char *)(lVar10 + 0x20) == '\0') ||
       ((2 < iVar8 &&
        (((puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
          0x39 < (byte)(&stack0xffffffffffffff61)[lVar14] ||
          (puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
          9 < (byte)((&stack0xffffffffffffff62)[lVar14] - 0x30))) ||
         (puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14,
         (byte)(&stack0xffffffffffffff61)[lVar14] < 0x30)))))) goto LAB_003e2ac0;
    puVar9 = (undefined1 *)0x0;
  }
  else {
    puVar9 = (undefined1 *)
             ((long)pvVar6 +
             (long)(&stack0xffffffffffffff60 + (lVar4 - (long)&stack0xffffffffffffff60)));
    *(undefined1 *)
     ((long)pvVar6 + (long)(&stack0xffffffffffffff60 + (lVar4 - (long)&stack0xffffffffffffff60))) =
         *(undefined1 *)(lVar10 + 0x48);
    puVar13 = &stack0xffffffffffffff60 + lVar4 + lVar14;
    if (*(char *)(lVar10 + 0x20) == '\0') goto LAB_003e2ac0;
  }
  lVar2 = -(sVar11 * 2 + 0x1e & 0xfffffffffffffff0);
                    /* try { // try from 003e2bbc to 004e2bbf has its CatchHandler @ 003e2024 */
  bVar1 = ((&stack0xffffffffffffff60)[lVar14] - 0x2b & 0xfd) == 0;
  if (bVar1) {
                    /* catch() { ... } // from try @ 003e2608 with catch @ 003e2c18
                       catch() { ... } // from try @ 003e2a28 with catch @ 003e2c18 */
    (&stack0xffffffffffffff60)[lVar2 + lVar4 + lVar14] = (&stack0xffffffffffffff60)[lVar4 + lVar14];
    local_1c = iVar8 + -1;
  }
                    /* catch() { ... } // from try @ 003e20c4 with catch @ 003e2bc8
                       catch() { ... } // from try @ 003e27d8 with catch @ 003e2bc8
                       catch() { ... } // from try @ 003e29f8 with catch @ 003e2bc8 */
                    /* catch() { ... } // from try @ 003e22c8 with catch @ 003e2bd0 */
                    /* catch() { ... } // from try @ 003e2208 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e22d0 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e2454 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e2594 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e29c8 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e2a34 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e2a98 with catch @ 003e2be4
                       catch() { ... } // from try @ 003e2aec with catch @ 003e2be4 */
  FUN_003e149c(param_2,*(undefined8 *)(lVar10 + 0x10),*(undefined8 *)(lVar10 + 0x18),
               *(undefined1 *)(lVar10 + 0x49),puVar9,
               &stack0xffffffffffffff60 + (ulong)bVar1 + lVar2 + lVar4 + lVar14,
               &stack0xffffffffffffff60 + (ulong)bVar1 + lVar4 + lVar14,&local_1c);
                    /* catch() { ... } // from try @ 003e20a4 with catch @ 003e2bec
                       catch() { ... } // from try @ 003e284c with catch @ 003e2bec
                       catch() { ... } // from try @ 003e29ec with catch @ 003e2bec */
  local_1c = (uint)bVar1 + local_1c;
                    /* catch() { ... } // from try @ 003e24ac with catch @ 003e2bf4
                       catch() { ... } // from try @ 003e2520 with catch @ 003e2bf4 */
  sVar11 = (size_t)local_1c;
  puVar13 = &stack0xffffffffffffff60 + lVar2 + lVar4 + lVar14;
LAB_003e2ac0:
  lVar4 = *(long *)(param_5 + 0x10);
  sVar12 = sVar11;
  puVar9 = puVar13;
  if ((long)sVar11 < lVar4) {
    lVar10 = -(lVar4 + 0x1eU & 0xfffffffffffffff0);
    puVar9 = puVar13 + lVar10;
                    /* try { // try from 003e2ae4 to 004e2ae7 has its CatchHandler @ 003e2b10 */
                    /* try { // try from 003e2aec to 004e2aef has its CatchHandler @ 003e2be4 */
    sVar12 = (size_t)(int)lVar4;
    FUN_003e2370(param_5,param_6,(long)puVar13 + lVar10,puVar13,lVar4,sVar11);
    local_1c = (int)lVar4;
  }
  *(undefined8 *)(param_5 + 0x10) = 0;
  if (param_4 == '\0') {
                    /* catch() { ... } // from try @ 003e2ae4 with catch @ 003e2b10 */
    sVar11 = (**(code **)(*param_3 + 0x60))(param_3,puVar9,sVar12);
    param_4 = sVar11 != sVar12;
  }
  auVar15[8] = param_4;
  auVar15._0_8_ = param_3;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 003e2cdc (24 bytes) name=FUN_003e2cdc

void FUN_003e2cdc(void)

{
  FUN_003e2958();
  return;
}


==================================================================

### FUNC 003e2cf4 (168 bytes) name=FUN_003e2cf4

int FUN_003e2cf4(undefined1 *param_1,ulong param_2,long param_3,uint param_4,char param_5)

{
  long lVar1;
  ulong uVar2;
  undefined1 *puVar3;
  
  puVar3 = param_1;
  if (param_5 == '\0') {
                    /* catch() { ... } // from try @ 003e2d90 with catch @ 003e2d40
                       catch() { ... } // from try @ 003e3570 with catch @ 003e2d40
                       catch() { ... } // from try @ 003e36cc with catch @ 003e2d40
                       catch() { ... } // from try @ 003e46ec with catch @ 003e2d40
                       catch() { ... } // from try @ 003e57a0 with catch @ 003e2d40 */
    if ((param_4 & 0x4a) == 0x40) {
      do {
        uVar2 = param_2 & 7;
        param_2 = param_2 >> 3;
                    /* try { // try from 003e2d90 to 004e2daf has its CatchHandler @ 003e2d40 */
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined1 *)(param_3 + uVar2 + 4);
      } while (param_2 != 0);
    }
    else {
      lVar1 = 0x14;
      if ((param_4 & 0x4000) == 0) {
        lVar1 = 4;
      }
      do {
        uVar2 = param_2 & 0xf;
        param_2 = param_2 >> 4;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined1 *)(param_3 + lVar1 + uVar2);
      } while (param_2 != 0);
    }
  }
  else {
    do {
      uVar2 = param_2 / 10;
      puVar3 = puVar3 + -1;
      *puVar3 = *(undefined1 *)(param_3 + param_2 % 10 + 4);
      param_2 = uVar2;
    } while (uVar2 != 0);
  }
  return (int)param_1 - (int)puVar3;
}


==================================================================

### FUNC 003e2d9c (624 bytes) name=FUN_003e2d9c

undefined1  [16]
FUN_003e2d9c(undefined8 param_1,long *param_2,char param_3,long param_4,undefined1 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  long lVar13;
  long lVar14;
  undefined1 auVar15 [16];
  undefined1 auStack_b0 [40];
  undefined1 auStack_88 [24];
  
                    /* try { // try from 003e2db4 to 004e2dd3 has its CatchHandler @ 003e5600 */
  lVar9 = FUN_003edb10(&DAT_00546220);
  lVar13 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar14 = *(long *)(lVar13 + lVar9 * 8);
  if (lVar14 == 0) {
    puVar10 = operator_new(0x90);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f80f0;
    puVar10[2] = 0;
    puVar10[3] = 0;
                    /* try { // try from 003e2fbc to 004e2fbf has its CatchHandler @ 003e5788 */
    *(undefined1 *)(puVar10 + 4) = 0;
    puVar10[5] = 0;
                    /* try { // try from 003e2fc4 to 004e300f has its CatchHandler @ 003e59d8 */
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    *(undefined1 *)(puVar10 + 9) = 0;
    *(undefined1 *)((long)puVar10 + 0x49) = 0;
    *(undefined1 *)(puVar10 + 0x11) = 0;
    FUN_003df230(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar9);
    lVar14 = *(long *)(lVar13 + lVar9 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar4 = auStack_b0;
  puVar5 = auStack_b0;
  uVar1 = uVar2 & 0x4a;
  bVar6 = uVar1 != 8;
  bVar7 = uVar1 != 0x40;
  lVar9 = -param_6;
  if ((bVar6 && bVar7) <= (0 < param_6)) {
    lVar9 = param_6;
  }
  iVar8 = FUN_003e2cf4(auStack_88,lVar9,lVar14 + 0x4a,uVar2,bVar6 && bVar7);
  puVar12 = auStack_b0 + (0x28 - iVar8);
  if (*(char *)(lVar14 + 0x20) == '\0') {
    puVar11 = puVar12;
    if (!bVar6 || !bVar7) {
LAB_003e2f4c:
      puVar12 = puVar11;
      if (((uVar2 >> 9 & 1) != 0) && (param_6 != 0)) {
        if (uVar1 == 0x40) {
          iVar8 = iVar8 + 1;
          puVar11[-1] = *(undefined1 *)(lVar14 + 0x4e);
          puVar12 = puVar11 + -1;
        }
        else {
          puVar12 = puVar11 + -2;
          iVar8 = iVar8 + 2;
          puVar11[-1] = *(undefined1 *)(lVar14 + 0x4a + ((ulong)(uVar2 >> 0xe) & 1) + 2);
          *puVar12 = *(undefined1 *)(lVar14 + 0x4e);
        }
      }
      goto LAB_003e2e60;
    }
  }
  else {
                    /* try { // try from 003e2f28 to 004e2f2b has its CatchHandler @ 003e453c */
    lVar9 = -((-(ulong)(iVar8 + 1U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar8 + 1U) << 1) + 0x1e
             & 0xfffffffffffffff0);
    puVar5 = auStack_b0 + lVar9;
    puVar4 = auStack_b0 + lVar9;
                    /* try { // try from 003e2f30 to 004e2f8f has its CatchHandler @ 003e59d8 */
    puVar11 = auStack_b0 + lVar9 + 2;
    iVar8 = FUN_003e0c7c(puVar11,*(undefined1 *)(lVar14 + 0x49),*(undefined8 *)(lVar14 + 0x10),
                         *(undefined8 *)(lVar14 + 0x18),puVar12,puVar12 + iVar8);
    iVar8 = iVar8 - (int)puVar11;
    if (!bVar6 || !bVar7) goto LAB_003e2f4c;
  }
  puVar5 = puVar4;
  if (param_6 < 0) {
    iVar8 = iVar8 + 1;
    puVar11[-1] = *(undefined1 *)(lVar14 + 0x4a);
    puVar12 = puVar11 + -1;
  }
  else {
                    /* try { // try from 003e2e5c to 004e2e5f has its CatchHandler @ 003e59d8 */
    puVar12 = puVar11;
    if ((uVar2 >> 0xb & 1) != 0) {
      iVar8 = iVar8 + 1;
      puVar11[-1] = *(undefined1 *)(lVar14 + 0x4b);
      puVar12 = puVar11 + -1;
    }
  }
LAB_003e2e60:
  lVar14 = *(long *)(param_4 + 0x10);
  lVar13 = (long)iVar8;
  puVar11 = puVar12;
  lVar9 = lVar13;
  if (lVar13 < lVar14) {
    lVar3 = -(lVar14 + 0x1eU & 0xfffffffffffffff0);
    puVar11 = puVar5 + lVar3;
                    /* try { // try from 003e2e8c to 004e2e8f has its CatchHandler @ 003e590c */
                    /* try { // try from 003e2e94 to 004e2ee7 has its CatchHandler @ 003e59d8 */
    lVar9 = (long)(int)lVar14;
    FUN_003e2370(param_4,param_5,(long)puVar5 + lVar3,puVar12,lVar14,lVar13);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar13 = (**(code **)(*param_2 + 0x60))(param_2,puVar11,lVar9);
    param_3 = lVar9 != lVar13;
  }
  auVar15[8] = param_3;
  auVar15._0_8_ = param_2;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 003e303c (540 bytes) name=FUN_003e303c

undefined1  [16]
FUN_003e303c(undefined8 param_1,long *param_2,ulong param_3,long param_4,uint param_5,char param_6)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  undefined8 *puVar4;
  byte extraout_w1;
  ulong uVar5;
  int iVar6;
  size_t __n;
  long lVar7;
  undefined8 uVar8;
  undefined1 auVar9 [16];
  
  uVar1 = *(uint *)(param_4 + 0x18);
  uVar5 = param_3 & 0xff;
  if ((uVar1 & 1) == 0) {
    param_2 = (long *)FUN_003e2d9c();
    uVar5 = (ulong)extraout_w1;
    goto LAB_003e3090;
  }
  lVar2 = FUN_003edb10(&DAT_00546220);
  lVar7 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar3 = *(long *)(lVar7 + lVar2 * 8);
  if (lVar3 == 0) {
    puVar4 = operator_new(0x90);
    *(undefined4 *)(puVar4 + 1) = 0;
    *puVar4 = &PTR_FUN_004f80f0;
    puVar4[2] = 0;
    puVar4[3] = 0;
    *(undefined1 *)(puVar4 + 4) = 0;
    puVar4[5] = 0;
    puVar4[6] = 0;
    puVar4[7] = 0;
    puVar4[8] = 0;
    *(undefined1 *)(puVar4 + 9) = 0;
    *(undefined1 *)((long)puVar4 + 0x49) = 0;
    *(undefined1 *)(puVar4 + 0x11) = 0;
    FUN_003df230(puVar4,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar4,lVar2);
    lVar3 = *(long *)(lVar7 + lVar2 * 8);
    if (param_6 == '\0') goto LAB_003e30e0;
LAB_003e3160:
    uVar8 = *(undefined8 *)(lVar3 + 0x28);
    lVar2 = *(long *)(param_4 + 0x10);
    lVar3 = (long)*(int *)(lVar3 + 0x30);
    if (lVar3 < lVar2) goto LAB_003e30f8;
LAB_003e3178:
    *(undefined8 *)(param_4 + 0x10) = 0;
    if ((char)param_3 != '\0') goto LAB_003e3090;
LAB_003e3180:
    lVar2 = (**(code **)(*param_2 + 0x60))(param_2,uVar8,lVar3);
    uVar5 = (ulong)(lVar3 != lVar2);
  }
  else {
    if (param_6 != '\0') goto LAB_003e3160;
LAB_003e30e0:
                    /* try { // try from 003e30e4 to 004e30e7 has its CatchHandler @ 003e592c */
    uVar8 = *(undefined8 *)(lVar3 + 0x38);
    lVar2 = *(long *)(param_4 + 0x10);
    lVar3 = (long)*(int *)(lVar3 + 0x40);
    if (lVar2 <= lVar3) goto LAB_003e3178;
LAB_003e30f8:
    __n = lVar2 - lVar3;
    lVar2 = -(__n + 0x1e & 0xfffffffffffffff0);
                    /* try { // try from 003e3114 to 004e3117 has its CatchHandler @ 003e591c */
    memset(&stack0xffffffffffffff90 + lVar2,param_5 & 0xff,__n);
                    /* try { // try from 003e311c to 004e31ef has its CatchHandler @ 003e592c */
    *(undefined8 *)(param_4 + 0x10) = 0;
    iVar6 = (int)__n;
    if ((uVar1 & 0xb0) == 0x20) {
      if ((char)param_3 != '\0') goto LAB_003e3090;
      lVar7 = (**(code **)(*param_2 + 0x60))(param_2,uVar8,lVar3);
      if (lVar3 == lVar7) {
        lVar2 = (**(code **)(*param_2 + 0x60))(param_2,&stack0xffffffffffffff90 + lVar2,(long)iVar6)
        ;
        uVar5 = (ulong)(iVar6 != lVar2);
        goto LAB_003e3090;
      }
    }
    else {
      if ((param_3 & 0xff) != 0) goto LAB_003e3090;
      lVar2 = (**(code **)(*param_2 + 0x60))(param_2,&stack0xffffffffffffff90 + lVar2,(long)iVar6);
      if (iVar6 == lVar2) goto LAB_003e3180;
    }
    uVar5 = 1;
  }
LAB_003e3090:
  auVar9._8_8_ = param_3 & 0xffffffffffffff00 | uVar5;
  auVar9._0_8_ = param_2;
  return auVar9;
}


==================================================================

### FUNC 003e3288 (20 bytes) name=FUN_003e3288

void FUN_003e3288(void)

{
                    /* try { // try from 003e3288 to 004e328b has its CatchHandler @ 003e35fc */
                    /* try { // try from 003e3290 to 004e333f has its CatchHandler @ 003e592c */
  FUN_003e2d9c();
  return;
}


==================================================================

### FUNC 003e329c (564 bytes) name=FUN_003e329c

undefined1  [16]
FUN_003e329c(undefined8 param_1,long *param_2,char param_3,long param_4,undefined1 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  int iVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  undefined1 auVar13 [16];
  undefined1 auStack_b0 [40];
  undefined1 auStack_88 [24];
  
  lVar7 = FUN_003edb10(&DAT_00546220);
  lVar11 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar11 + lVar7 * 8);
  if (lVar12 == 0) {
                    /* try { // try from 003e345c to 004e345f has its CatchHandler @ 003e59d8 */
    puVar8 = operator_new(0x90);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f80f0;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined1 *)(puVar8 + 9) = 0;
    *(undefined1 *)((long)puVar8 + 0x49) = 0;
    *(undefined1 *)(puVar8 + 0x11) = 0;
    FUN_003df230(puVar8,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar8,lVar7);
    lVar12 = *(long *)(lVar11 + lVar7 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar5 = auStack_b0;
  puVar4 = auStack_b0;
  uVar1 = uVar2 & 0x4a;
  iVar6 = FUN_003e2cf4(auStack_88,param_6,lVar12 + 0x4a,uVar2,uVar1 != 8 && uVar1 != 0x40);
  puVar9 = auStack_b0 + (0x28 - iVar6);
  if (*(char *)(lVar12 + 0x20) != '\0') {
    lVar7 = -((-(ulong)(iVar6 + 1U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar6 + 1U) << 1) + 0x1e
             & 0xfffffffffffffff0);
    puVar4 = auStack_b0 + lVar7;
    puVar5 = auStack_b0 + lVar7;
    puVar10 = auStack_b0 + lVar7 + 2;
    iVar6 = FUN_003e0c7c(puVar10,*(undefined1 *)(lVar12 + 0x49),*(undefined8 *)(lVar12 + 0x10),
                         *(undefined8 *)(lVar12 + 0x18),puVar9,puVar9 + iVar6);
    iVar6 = iVar6 - (int)puVar10;
    puVar9 = puVar10;
  }
  puVar10 = puVar9;
  if (((uVar1 == 8 || uVar1 == 0x40) && (puVar5 = puVar4, param_6 != 0)) && ((uVar2 >> 9 & 1) != 0))
  {
    if (uVar1 == 0x40) {
      iVar6 = iVar6 + 1;
      puVar9[-1] = *(undefined1 *)(lVar12 + 0x4e);
      puVar10 = puVar9 + -1;
    }
    else {
      puVar10 = puVar9 + -2;
      iVar6 = iVar6 + 2;
      puVar9[-1] = *(undefined1 *)(lVar12 + 0x4a + ((ulong)(uVar2 >> 0xe) & 1) + 2);
      *puVar10 = *(undefined1 *)(lVar12 + 0x4e);
    }
  }
  lVar12 = *(long *)(param_4 + 0x10);
  lVar11 = (long)iVar6;
  puVar9 = puVar10;
  lVar7 = lVar11;
  if (lVar11 < lVar12) {
    lVar3 = -(lVar12 + 0x1eU & 0xfffffffffffffff0);
    puVar9 = puVar5 + lVar3;
    lVar7 = (long)(int)lVar12;
    FUN_003e2370(param_4,param_5,(long)puVar5 + lVar3,puVar10,lVar12,lVar11);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar11 = (**(code **)(*param_2 + 0x60))(param_2,puVar9,lVar7);
    param_3 = lVar7 != lVar11;
  }
  auVar13[8] = param_3;
  auVar13._0_8_ = param_2;
  auVar13._9_7_ = 0;
                    /* try { // try from 003e33d8 to 004e33db has its CatchHandler @ 003e36dc */
  return auVar13;
}


==================================================================

### FUNC 003e3500 (20 bytes) name=FUN_003e3500

void FUN_003e3500(void)

{
  FUN_003e329c();
  return;
}


==================================================================

### FUNC 003e3514 (92 bytes) name=FUN_003e3514

void FUN_003e3514(void)

{
  uint uVar1;
  long in_x3;
  
  uVar1 = *(uint *)(in_x3 + 0x18);
  *(uint *)(in_x3 + 0x18) = uVar1 & 0xffffbfb5 | 0x208;
                    /* try { // try from 003e3544 to 004e3547 has its CatchHandler @ 003e5600 */
  FUN_003e329c();
  *(uint *)(in_x3 + 0x18) = uVar1;
  return;
}


==================================================================

### FUNC 003e3570 (168 bytes) name=FUN_003e3570

int FUN_003e3570(undefined1 *param_1,ulong param_2,long param_3,uint param_4,char param_5)

{
  long lVar1;
  ulong uVar2;
  undefined1 *puVar3;
  
                    /* try { // try from 003e3570 to 004e35c3 has its CatchHandler @ 003e2d40 */
  puVar3 = param_1;
  if (param_5 == '\0') {
    if ((param_4 & 0x4a) == 0x40) {
      do {
                    /* catch() { ... } // from try @ 003e3288 with catch @ 003e35fc */
        uVar2 = param_2 & 7;
        param_2 = param_2 >> 3;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined1 *)(param_3 + uVar2 + 4);
      } while (param_2 != 0);
    }
    else {
      lVar1 = 0x14;
      if ((param_4 & 0x4000) == 0) {
        lVar1 = 4;
      }
      do {
        uVar2 = param_2 & 0xf;
        param_2 = param_2 >> 4;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined1 *)(param_3 + lVar1 + uVar2);
      } while (param_2 != 0);
    }
  }
  else {
    do {
      uVar2 = param_2 / 10;
      puVar3 = puVar3 + -1;
      *puVar3 = *(undefined1 *)(param_3 + param_2 % 10 + 4);
      param_2 = uVar2;
    } while (uVar2 != 0);
  }
  return (int)param_1 - (int)puVar3;
}


==================================================================

### FUNC 003e3618 (624 bytes) name=FUN_003e3618

undefined1  [16]
FUN_003e3618(undefined8 param_1,long *param_2,char param_3,long param_4,undefined1 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  long lVar13;
  long lVar14;
  undefined1 auVar15 [16];
  undefined1 auStack_b0 [40];
  undefined1 auStack_88 [24];
  
  lVar9 = FUN_003edb10(&DAT_00546220);
  lVar13 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar14 = *(long *)(lVar13 + lVar9 * 8);
  if (lVar14 == 0) {
    puVar10 = operator_new(0x90);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f80f0;
    puVar10[2] = 0;
    puVar10[3] = 0;
    *(undefined1 *)(puVar10 + 4) = 0;
    puVar10[5] = 0;
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    *(undefined1 *)(puVar10 + 9) = 0;
    *(undefined1 *)((long)puVar10 + 0x49) = 0;
    *(undefined1 *)(puVar10 + 0x11) = 0;
    FUN_003df230(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar9);
    lVar14 = *(long *)(lVar13 + lVar9 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar4 = auStack_b0;
  puVar5 = auStack_b0;
  uVar1 = uVar2 & 0x4a;
  bVar6 = uVar1 != 8;
  bVar7 = uVar1 != 0x40;
  lVar9 = -param_6;
  if ((bVar6 && bVar7) <= (0 < param_6)) {
    lVar9 = param_6;
  }
  iVar8 = FUN_003e3570(auStack_88,lVar9,lVar14 + 0x4a,uVar2,bVar6 && bVar7);
  puVar12 = auStack_b0 + (0x28 - iVar8);
                    /* try { // try from 003e36cc to 004e36cf has its CatchHandler @ 003e2d40 */
  if (*(char *)(lVar14 + 0x20) == '\0') {
    puVar11 = puVar12;
    if (!bVar6 || !bVar7) {
LAB_003e37c8:
      puVar12 = puVar11;
      if (((uVar2 >> 9 & 1) != 0) && (param_6 != 0)) {
        if (uVar1 == 0x40) {
          iVar8 = iVar8 + 1;
          puVar11[-1] = *(undefined1 *)(lVar14 + 0x4e);
          puVar12 = puVar11 + -1;
        }
        else {
          puVar12 = puVar11 + -2;
          iVar8 = iVar8 + 2;
          puVar11[-1] = *(undefined1 *)(lVar14 + 0x4a + ((ulong)(uVar2 >> 0xe) & 1) + 2);
          *puVar12 = *(undefined1 *)(lVar14 + 0x4e);
        }
      }
      goto LAB_003e36dc;
    }
  }
  else {
    lVar9 = -((-(ulong)(iVar8 + 1U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar8 + 1U) << 1) + 0x1e
             & 0xfffffffffffffff0);
    puVar5 = auStack_b0 + lVar9;
    puVar4 = auStack_b0 + lVar9;
    puVar11 = auStack_b0 + lVar9 + 2;
    iVar8 = FUN_003e0c7c(puVar11,*(undefined1 *)(lVar14 + 0x49),*(undefined8 *)(lVar14 + 0x10),
                         *(undefined8 *)(lVar14 + 0x18),puVar12,puVar12 + iVar8);
    iVar8 = iVar8 - (int)puVar11;
    if (!bVar6 || !bVar7) goto LAB_003e37c8;
  }
                    /* try { // try from 003e36d4 to 004e36d7 has its CatchHandler @ 003e36dc */
  puVar5 = puVar4;
  if (param_6 < 0) {
    iVar8 = iVar8 + 1;
    puVar11[-1] = *(undefined1 *)(lVar14 + 0x4a);
    puVar12 = puVar11 + -1;
  }
  else {
    puVar12 = puVar11;
    if ((uVar2 >> 0xb & 1) != 0) {
      iVar8 = iVar8 + 1;
      puVar11[-1] = *(undefined1 *)(lVar14 + 0x4b);
      puVar12 = puVar11 + -1;
    }
  }
LAB_003e36dc:
                    /* catch() { ... } // from try @ 003e33d8 with catch @ 003e36dc
                       catch() { ... } // from try @ 003e36d4 with catch @ 003e36dc
                       catch() { ... } // from try @ 003e4424 with catch @ 003e36dc */
  lVar14 = *(long *)(param_4 + 0x10);
  lVar13 = (long)iVar8;
                    /* try { // try from 003e36e8 to 004e36eb has its CatchHandler @ 003e59d8 */
  puVar11 = puVar12;
  lVar9 = lVar13;
  if (lVar13 < lVar14) {
                    /* try { // try from 003e36f4 to 004e36f7 has its CatchHandler @ 003e36fc */
                    /* catch() { ... } // from try @ 003e34d0 with catch @ 003e36fc
                       catch() { ... } // from try @ 003e36f4 with catch @ 003e36fc
                       catch() { ... } // from try @ 003e46b4 with catch @ 003e36fc
                       catch() { ... } // from try @ 003e552c with catch @ 003e36fc
                       catch() { ... } // from try @ 003e56d0 with catch @ 003e36fc */
    lVar3 = -(lVar14 + 0x1eU & 0xfffffffffffffff0);
    puVar11 = puVar5 + lVar3;
                    /* try { // try from 003e3708 to 004e370b has its CatchHandler @ 003e5600 */
    lVar9 = (long)(int)lVar14;
    FUN_003e2370(param_4,param_5,(long)puVar5 + lVar3,puVar12,lVar14,lVar13);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar13 = (**(code **)(*param_2 + 0x60))(param_2,puVar11,lVar9);
    param_3 = lVar9 != lVar13;
  }
  auVar15[8] = param_3;
  auVar15._0_8_ = param_2;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 003e38b8 (20 bytes) name=FUN_003e38b8

void FUN_003e38b8(void)

{
  FUN_003e3618();
  return;
}


==================================================================

### FUNC 003e38cc (564 bytes) name=FUN_003e38cc

undefined1  [16]
FUN_003e38cc(undefined8 param_1,long *param_2,char param_3,long param_4,undefined1 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  int iVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  long lVar11;
  long lVar12;
  undefined1 auVar13 [16];
  undefined1 auStack_b0 [40];
  undefined1 auStack_88 [24];
  
  lVar7 = FUN_003edb10(&DAT_00546220);
  lVar11 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar11 + lVar7 * 8);
  if (lVar12 == 0) {
    puVar8 = operator_new(0x90);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f80f0;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined1 *)(puVar8 + 9) = 0;
    *(undefined1 *)((long)puVar8 + 0x49) = 0;
    *(undefined1 *)(puVar8 + 0x11) = 0;
    FUN_003df230(puVar8,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar8,lVar7);
    lVar12 = *(long *)(lVar11 + lVar7 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar5 = auStack_b0;
  puVar4 = auStack_b0;
  uVar1 = uVar2 & 0x4a;
                    /* try { // try from 003e3958 to 004e418f has its CatchHandler @ 003e592c */
  iVar6 = FUN_003e3570(auStack_88,param_6,lVar12 + 0x4a,uVar2,uVar1 != 8 && uVar1 != 0x40);
  puVar9 = auStack_b0 + (0x28 - iVar6);
  if (*(char *)(lVar12 + 0x20) != '\0') {
    lVar7 = -((-(ulong)(iVar6 + 1U >> 0x1f) & 0xfffffffe00000000 | (ulong)(iVar6 + 1U) << 1) + 0x1e
             & 0xfffffffffffffff0);
    puVar4 = auStack_b0 + lVar7;
    puVar5 = auStack_b0 + lVar7;
    puVar10 = auStack_b0 + lVar7 + 2;
    iVar6 = FUN_003e0c7c(puVar10,*(undefined1 *)(lVar12 + 0x49),*(undefined8 *)(lVar12 + 0x10),
                         *(undefined8 *)(lVar12 + 0x18),puVar9,puVar9 + iVar6);
    iVar6 = iVar6 - (int)puVar10;
    puVar9 = puVar10;
  }
  puVar10 = puVar9;
  if (((uVar1 == 8 || uVar1 == 0x40) && (puVar5 = puVar4, param_6 != 0)) && ((uVar2 >> 9 & 1) != 0))
  {
    if (uVar1 == 0x40) {
      iVar6 = iVar6 + 1;
      puVar9[-1] = *(undefined1 *)(lVar12 + 0x4e);
      puVar10 = puVar9 + -1;
    }
    else {
      puVar10 = puVar9 + -2;
      iVar6 = iVar6 + 2;
      puVar9[-1] = *(undefined1 *)(lVar12 + 0x4a + ((ulong)(uVar2 >> 0xe) & 1) + 2);
      *puVar10 = *(undefined1 *)(lVar12 + 0x4e);
    }
  }
  lVar12 = *(long *)(param_4 + 0x10);
  lVar11 = (long)iVar6;
  puVar9 = puVar10;
  lVar7 = lVar11;
  if (lVar11 < lVar12) {
    lVar3 = -(lVar12 + 0x1eU & 0xfffffffffffffff0);
    puVar9 = puVar5 + lVar3;
    lVar7 = (long)(int)lVar12;
    FUN_003e2370(param_4,param_5,(long)puVar5 + lVar3,puVar10,lVar12,lVar11);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar11 = (**(code **)(*param_2 + 0x60))(param_2,puVar9,lVar7);
    param_3 = lVar7 != lVar11;
  }
  auVar13[8] = param_3;
  auVar13._0_8_ = param_2;
  auVar13._9_7_ = 0;
  return auVar13;
}


==================================================================

### FUNC 003e3b30 (20 bytes) name=FUN_003e3b30

void FUN_003e3b30(void)

{
  FUN_003e38cc();
  return;
}


==================================================================

### FUNC 003e3b44 (224 bytes) name=FUN_003e3b44

long FUN_003e3b44(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_00546238);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0x70);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f80d0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  *(undefined1 *)((long)puVar3 + 0x21) = 0;
  *(undefined1 *)((long)puVar3 + 0x22) = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  *(undefined4 *)(puVar3 + 0xb) = 0;
  *(undefined1 *)((long)puVar3 + 0x5c) = 0;
  *(undefined1 *)((long)puVar3 + 0x5d) = 0;
  *(undefined1 *)((long)puVar3 + 0x5e) = 0;
  *(undefined1 *)((long)puVar3 + 0x5f) = 0;
  *(undefined1 *)(puVar3 + 0xc) = 0;
  *(undefined1 *)((long)puVar3 + 0x61) = 0;
  *(undefined1 *)((long)puVar3 + 0x62) = 0;
  *(undefined1 *)((long)puVar3 + 99) = 0;
  *(undefined1 *)((long)puVar3 + 0x6f) = 0;
  FUN_003df8fc(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 003e3c54 (224 bytes) name=FUN_003e3c54

long FUN_003e3c54(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_00546240);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0x70);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f80b0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  *(undefined1 *)((long)puVar3 + 0x21) = 0;
  *(undefined1 *)((long)puVar3 + 0x22) = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  *(undefined4 *)(puVar3 + 0xb) = 0;
  *(undefined1 *)((long)puVar3 + 0x5c) = 0;
  *(undefined1 *)((long)puVar3 + 0x5d) = 0;
  *(undefined1 *)((long)puVar3 + 0x5e) = 0;
  *(undefined1 *)((long)puVar3 + 0x5f) = 0;
  *(undefined1 *)(puVar3 + 0xc) = 0;
  *(undefined1 *)((long)puVar3 + 0x61) = 0;
  *(undefined1 *)((long)puVar3 + 0x62) = 0;
  *(undefined1 *)((long)puVar3 + 99) = 0;
  *(undefined1 *)((long)puVar3 + 0x6f) = 0;
  FUN_003dfe94(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 003e3d64 (180 bytes) name=FUN_003e3d64

long FUN_003e3d64(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_00546220);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0x90);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f80f0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  *(undefined1 *)(puVar3 + 9) = 0;
  *(undefined1 *)((long)puVar3 + 0x49) = 0;
  *(undefined1 *)(puVar3 + 0x11) = 0;
  FUN_003df230(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 003e3e48 (136 bytes) name=FUN_003e3e48

ulong FUN_003e3e48(long *param_1)

{
  ulong uVar1;
  long *plVar2;
  
  plVar2 = (long *)*param_1;
  if (plVar2 == (long *)0x0) {
    uVar1 = 0xffffffff;
  }
  else {
    uVar1 = (ulong)*(uint *)(param_1 + 1);
    if (*(uint *)(param_1 + 1) == 0xffffffff) {
      if ((byte *)plVar2[2] < (byte *)plVar2[3]) {
        uVar1 = (ulong)*(byte *)plVar2[2];
      }
      else {
        uVar1 = (**(code **)(*plVar2 + 0x48))(plVar2);
        if ((int)uVar1 == -1) {
          *param_1 = 0;
          return uVar1;
        }
      }
      *(int *)(param_1 + 1) = (int)uVar1;
      return uVar1;
    }
  }
  return uVar1;
}


==================================================================

### FUNC 003e3ed0 (884 bytes) name=FUN_003e3ed0

undefined1  [16]
FUN_003e3ed0(undefined8 param_1,long *param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,int *param_6,long param_7,long param_8,long param_9,uint *param_10)

{
  long lVar1;
  undefined1 auVar2 [16];
  char cVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  long *plVar9;
  ulong uVar10;
  size_t sVar11;
  uint uVar12;
  long lVar13;
  ulong uVar14;
  ulong uVar15;
  ulong uVar16;
  char *__s;
  undefined8 local_20;
  undefined8 uStack_18;
  long *local_10;
  uint local_8;
  undefined4 uStack_4;
  
  local_8 = (uint)param_3;
  uStack_4 = (undefined4)((ulong)param_3 >> 0x20);
  local_20 = param_4;
  uStack_18 = param_5;
  local_10 = param_2;
  plVar9 = (long *)FUN_003de994(param_9 + 0xd0);
  lVar1 = -(param_8 * 4 + 0x1eU & 0xfffffffffffffff0);
  iVar5 = FUN_003e3e48(&local_10);
  iVar6 = FUN_003e3e48(&local_20);
  if (((iVar5 == -1) != (iVar6 == -1)) && (cVar3 = FUN_003e3e48(&local_10), param_8 != 0)) {
    lVar13 = 0;
    uVar15 = 0;
    do {
      while ((**(char **)(param_7 + lVar13 * 8) != cVar3 &&
             (cVar4 = (**(code **)(*plVar9 + 0x10))(plVar9), cVar3 != cVar4))) {
        lVar13 = lVar13 + 1;
        if (lVar13 == param_8) goto LAB_003e3fc4;
      }
      *(int *)(&stack0xffffffffffffff70 + uVar15 * 4 + lVar1) = (int)lVar13;
      lVar13 = lVar13 + 1;
      uVar15 = uVar15 + 1;
    } while (lVar13 != param_8);
LAB_003e3fc4:
    uVar14 = 0;
joined_r0x003e3fd0:
    if (1 < uVar15) {
      uVar16 = 1;
      uVar10 = strlen(*(char **)(param_7 + (long)*(int *)(&stack0xffffffffffffff70 + lVar1) * 8));
      do {
        lVar13 = uVar16 * 4;
        uVar16 = uVar16 + 1;
        sVar11 = strlen(*(char **)(param_7 +
                                  (long)*(int *)(&stack0xffffffffffffff70 + lVar13 + lVar1) * 8));
        if (sVar11 < uVar10) {
          uVar10 = sVar11;
        }
      } while (uVar16 < uVar15);
      if (local_10 != (long *)0x0) {
        if ((ulong)local_10[2] < (ulong)local_10[3]) {
          local_10[2] = local_10[2] + 1;
        }
        else {
          (**(code **)(*local_10 + 0x50))();
        }
        local_8 = 0xffffffff;
      }
      uVar14 = uVar14 + 1;
      if (uVar10 <= uVar14) goto LAB_003e4190;
      iVar5 = FUN_003e3e48(&local_10);
      iVar6 = FUN_003e3e48(&local_20);
      if ((iVar5 == -1) == (iVar6 == -1)) goto LAB_003e4190;
      uVar16 = 0;
      do {
        while( true ) {
          uVar12 = (uint)*(byte *)(*(long *)(param_7 +
                                            (long)*(int *)(&stack0xffffffffffffff70 +
                                                          uVar16 * 4 + lVar1) * 8) + uVar14);
          if (local_10 == (long *)0x0) break;
          if (local_8 != 0xffffffff) {
            uVar8 = local_8 & 0xff;
            goto LAB_003e4070;
          }
          if ((byte *)local_10[2] < (byte *)local_10[3]) {
            uVar8 = (uint)*(byte *)local_10[2];
          }
          else {
            uVar8 = (**(code **)(*local_10 + 0x48))();
            if (uVar8 == 0xffffffff) {
              local_10 = (long *)0x0;
              uVar8 = 0xff;
              goto LAB_003e4070;
            }
          }
          local_8 = uVar8;
          if (uVar12 != (uVar8 & 0xff)) goto LAB_003e4078;
LAB_003e40d4:
          uVar16 = uVar16 + 1;
          if (uVar15 <= uVar16) goto joined_r0x003e3fd0;
        }
        uVar8 = 0xff;
LAB_003e4070:
        if (uVar12 == uVar8) goto LAB_003e40d4;
LAB_003e4078:
        uVar15 = uVar15 - 1;
        *(undefined4 *)(&stack0xffffffffffffff70 + uVar16 * 4 + lVar1) =
             *(undefined4 *)(&stack0xffffffffffffff70 + uVar15 * 4 + lVar1);
      } while (uVar16 < uVar15);
      goto joined_r0x003e3fd0;
    }
    if (uVar15 == 1) {
      if (local_10 != (long *)0x0) {
        if ((ulong)local_10[2] < (ulong)local_10[3]) {
          local_10[2] = local_10[2] + 1;
        }
        else {
          FUN_003dcae0();
        }
        local_8 = 0xffffffff;
      }
      iVar5 = *(int *)(&stack0xffffffffffffff70 + lVar1);
      __s = *(char **)(param_7 + (long)iVar5 * 8);
      sVar11 = strlen(__s);
      while (uVar14 = uVar14 + 1, uVar14 < sVar11) {
        iVar6 = FUN_003e3e48(&local_10);
        iVar7 = FUN_003e3e48(&local_20);
        if (((iVar6 == -1) == (iVar7 == -1)) ||
           (cVar3 = __s[uVar14], cVar4 = FUN_003e3e48(&local_10), cVar3 != cVar4)) break;
        if (local_10 != (long *)0x0) {
          if ((ulong)local_10[2] < (ulong)local_10[3]) {
            local_10[2] = local_10[2] + 1;
          }
          else {
            FUN_003dcae0();
          }
          local_8 = 0xffffffff;
        }
      }
      if (uVar14 == sVar11) {
        *param_6 = iVar5;
        goto LAB_003e419c;
      }
    }
  }
LAB_003e4190:
  *param_10 = *param_10 | 4;
LAB_003e419c:
  auVar2._8_4_ = local_8;
  auVar2._0_8_ = local_10;
  auVar2._12_4_ = uStack_4;
  return auVar2;
}


==================================================================

### FUNC 003e4244 (1068 bytes) name=FUN_003e4244

undefined1  [16]
FUN_003e4244(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            int *param_6,long param_7,ulong param_8,long param_9,uint *param_10)

{
  long lVar1;
  long lVar2;
  undefined1 auVar3 [16];
  char cVar4;
  char cVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  long *plVar9;
  size_t sVar10;
  ulong uVar11;
  ulong uVar12;
  ulong uVar13;
  ulong *puVar14;
  ulong *puVar15;
  ulong uVar16;
  ulong uVar17;
  long *local_20;
  undefined8 local_18;
  long *local_10;
  uint local_8;
  undefined4 uStack_4;
  
                    /* catch() { ... } // from try @ 003e4224 with catch @ 003e4270 */
  local_8 = (uint)param_3;
  uStack_4 = (undefined4)((ulong)param_3 >> 0x20);
  local_20 = param_4;
  local_18 = param_5;
  local_10 = param_2;
  plVar9 = (long *)FUN_003de994(param_9 + 0xd0);
  lVar1 = -(param_8 * 8 + 0x1e & 0xfffffffffffffff0);
  iVar6 = FUN_003e3e48(&local_10);
  iVar7 = FUN_003e3e48(&local_20);
  if ((iVar6 == -1) == (iVar7 == -1)) {
    uVar17 = 0;
    uVar16 = 0;
    puVar14 = (ulong *)0x0;
    plVar9 = local_10;
  }
  else {
    puVar15 = (ulong *)(param_8 * 2);
    puVar14 = (ulong *)0x0;
    uVar17 = 0;
    cVar4 = FUN_003e3e48(&local_10);
    if (puVar15 == (ulong *)0x0) {
      uVar16 = 0;
      plVar9 = local_10;
    }
    else {
      do {
        while ((**(char **)(param_7 + (long)puVar14 * 8) != cVar4 &&
               (cVar5 = (**(code **)(*plVar9 + 0x10))(plVar9), cVar4 != cVar5))) {
          puVar14 = (ulong *)((long)puVar14 + 1);
          if (puVar14 == puVar15) goto LAB_003e4428;
        }
        *(int *)(&stack0xffffffffffffff80 + uVar17 * 4 + lVar1) = (int)puVar14;
        puVar14 = (ulong *)((long)puVar14 + 1);
        uVar17 = uVar17 + 1;
                    /* try { // try from 003e4424 to 004e4427 has its CatchHandler @ 003e36dc */
      } while (puVar14 != puVar15);
LAB_003e4428:
      if (uVar17 == 0) {
        uVar16 = 0;
        puVar14 = (ulong *)0x0;
        plVar9 = local_10;
      }
      else {
        if (local_10 != (long *)0x0) {
          if ((ulong)local_10[2] < (ulong)local_10[3]) {
            local_10[2] = local_10[2] + 1;
          }
          else {
            FUN_003dcae0(local_10);
          }
          local_8 = 0xffffffff;
        }
        plVar9 = local_10;
        uVar16 = 0;
        lVar2 = -(uVar17 * 8 + 0x1e & 0xfffffffffffffff0);
        puVar14 = (ulong *)(&stack0xffffffffffffff80 + lVar2 + lVar1);
        do {
          sVar10 = strlen(*(char **)(param_7 +
                                    (long)*(int *)(&stack0xffffffffffffff80 + uVar16 * 4 + lVar1) *
                                    8));
          *(size_t *)(&stack0xffffffffffffff80 + uVar16 * 8 + lVar2 + lVar1) = sVar10;
          uVar16 = uVar16 + 1;
        } while (uVar16 != uVar17);
        uVar16 = 1;
      }
    }
  }
  do {
    uVar13 = uVar17;
    if (plVar9 == (long *)0x0) {
LAB_003e4584:
      if (local_20 == (long *)0x0) break;
      iVar6 = 1;
LAB_003e4310:
      iVar7 = 0;
      if ((int)local_18 == -1) {
        if ((byte *)local_20[2] < (byte *)local_20[3]) {
          uVar8 = (uint)*(byte *)local_20[2];
        }
        else {
          uVar8 = (**(code **)(*local_20 + 0x48))();
          if (uVar8 == 0xffffffff) {
            local_20 = (long *)0x0;
            iVar7 = 1;
            goto LAB_003e4320;
          }
        }
        local_18 = CONCAT44(local_18._4_4_,uVar8);
        if (iVar6 == 0) break;
      }
      else {
LAB_003e4320:
        if (iVar7 == iVar6) break;
      }
LAB_003e4328:
      if (local_10 == (long *)0x0) {
        uVar8 = 0xff;
      }
      else if (local_8 == 0xffffffff) {
        if ((byte *)local_10[2] < (byte *)local_10[3]) {
          uVar8 = (uint)*(byte *)local_10[2];
        }
        else {
          uVar8 = (**(code **)(*local_10 + 0x48))(local_10);
          if (uVar8 == 0xffffffff) {
            local_10 = (long *)0x0;
            uVar8 = 0xff;
            goto LAB_003e4340;
          }
        }
        local_8 = uVar8;
        uVar8 = uVar8 & 0xff;
      }
      else {
        uVar8 = local_8 & 0xff;
      }
    }
    else {
      if (local_8 == 0xffffffff) {
                    /* catch() { ... } // from try @ 003e2f28 with catch @ 003e453c */
        if ((byte *)plVar9[2] < (byte *)plVar9[3]) {
          uVar8 = (uint)*(byte *)plVar9[2];
        }
        else {
          uVar8 = (**(code **)(*plVar9 + 0x48))(plVar9);
          if (uVar8 == 0xffffffff) {
            local_10 = (long *)0x0;
            goto LAB_003e4584;
          }
        }
        iVar6 = 0;
                    /* try { // try from 003e4558 to 004e46af has its CatchHandler @ 003e59d8 */
        local_8 = uVar8;
        if (local_20 != (long *)0x0) goto LAB_003e4310;
        goto LAB_003e4328;
      }
      iVar6 = 0;
      if (local_20 != (long *)0x0) goto LAB_003e4310;
      uVar8 = local_8 & 0xff;
    }
LAB_003e4340:
    if (uVar17 == 0) goto LAB_003e450c;
    uVar11 = 0;
    uVar13 = 0;
    do {
      while( true ) {
        if (uVar16 < puVar14[uVar11]) break;
        uVar13 = uVar13 + 1;
LAB_003e435c:
        uVar11 = uVar11 + 1;
        if (uVar17 <= uVar11) goto LAB_003e43a8;
      }
      if (*(byte *)(*(long *)(param_7 +
                             (long)*(int *)(&stack0xffffffffffffff80 + uVar11 * 4 + lVar1) * 8) +
                   uVar16) == uVar8) goto LAB_003e435c;
      uVar17 = uVar17 - 1;
      uVar12 = puVar14[uVar17];
      *(undefined4 *)(&stack0xffffffffffffff80 + uVar11 * 4 + lVar1) =
           *(undefined4 *)(&stack0xffffffffffffff80 + uVar17 * 4 + lVar1);
      puVar14[uVar11] = uVar12;
    } while (uVar11 < uVar17);
LAB_003e43a8:
    if (uVar17 == uVar13) break;
    if (local_10 != (long *)0x0) {
      if ((ulong)local_10[2] < (ulong)local_10[3]) {
        local_8 = 0xffffffff;
        local_10[2] = local_10[2] + 1;
      }
      else {
        (**(code **)(*local_10 + 0x50))(local_10);
        local_8 = 0xffffffff;
      }
    }
    uVar16 = uVar16 + 1;
    plVar9 = local_10;
  } while( true );
  if (uVar13 == 1) {
    uVar17 = *puVar14;
joined_r0x003e45fc:
    if (uVar17 == uVar16) {
LAB_003e4600:
      iVar7 = *(int *)(&stack0xffffffffffffff80 + lVar1);
      iVar6 = iVar7 - (int)param_8;
      if ((ulong)(long)iVar7 < param_8) {
        iVar6 = iVar7;
      }
      *param_6 = iVar6;
      goto LAB_003e4518;
    }
  }
  else if (uVar13 == 2) {
    if (*puVar14 != uVar16) {
      uVar17 = puVar14[1];
      goto joined_r0x003e45fc;
    }
    goto LAB_003e4600;
  }
LAB_003e450c:
  *param_10 = *param_10 | 4;
LAB_003e4518:
  auVar3._8_4_ = local_8;
  auVar3._0_8_ = local_10;
  auVar3._12_4_ = uStack_4;
  return auVar3;
}


==================================================================

### FUNC 003e4670 (584 bytes) name=FUN_003e4670

undefined1  [16]
FUN_003e4670(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  long *plVar7;
  int iVar8;
  undefined1 auVar9 [16];
  undefined4 local_78;
  int local_74;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
                    /* try { // try from 003e46b4 to 004e46cb has its CatchHandler @ 003e36fc */
  lVar4 = FUN_003e0454(param_6 + 0xd0);
  FUN_003de994(param_6 + 0xd0);
  lVar5 = *(long *)(lVar4 + 0x10);
                    /* try { // try from 003e46d0 to 004e46e7 has its CatchHandler @ 003e5600 */
  local_60 = *(undefined8 *)(lVar5 + 0xa0);
                    /* try { // try from 003e46ec to 004e46ef has its CatchHandler @ 003e2d40 */
  local_68 = *(undefined8 *)(lVar5 + 0x98);
  local_70 = *(undefined8 *)(lVar5 + 0x90);
  local_58 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xa8);
  local_50 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xb0);
  local_48 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xb8);
  local_40 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xc0);
  local_38 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x58);
  local_30 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x60);
  local_28 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x68);
  local_20 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x70);
  local_18 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x78);
  local_74 = 0;
  local_10 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x80);
  local_8 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x88);
  auVar9 = FUN_003e4244(param_1,param_2,param_3,param_4,param_5,&local_78,&local_70,7,param_6,
                        &local_74);
  plVar7 = auVar9._0_8_;
  uVar6 = auVar9._8_8_ & 0xffffffff;
  if (local_74 == 0) {
    *(undefined4 *)(param_8 + 0x18) = local_78;
  }
  else {
    *param_7 = *param_7 | 4;
  }
  if (plVar7 == (long *)0x0) {
LAB_003e482c:
    plVar7 = (long *)0x0;
    iVar8 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e47d8;
  }
  else {
    if (auVar9._8_4_ == -1) {
      if ((byte *)plVar7[2] < (byte *)plVar7[3]) {
        uVar6 = (ulong)*(byte *)plVar7[2];
      }
      else {
        uVar3 = (**(code **)(*plVar7 + 0x48))();
        if (uVar3 == 0xffffffff) goto LAB_003e482c;
        uVar6 = (ulong)uVar3;
      }
    }
    iVar8 = 0;
    if (param_4 == (long *)0x0) goto LAB_003e47ec;
LAB_003e47d8:
    iVar1 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[2] < (ulong)param_4[3]) {
        iVar1 = 0;
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar1 = 1;
        if (iVar2 != -1) {
          iVar1 = 0;
        }
      }
    }
    if (iVar8 != iVar1) goto LAB_003e47ec;
  }
  *param_7 = *param_7 | 2;
LAB_003e47ec:
  auVar9._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar9._0_8_ = plVar7;
  return auVar9;
}


==================================================================

### FUNC 003e48b8 (704 bytes) name=FUN_003e48b8

undefined1  [16]
FUN_003e48b8(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long lVar5;
  ulong uVar6;
  long *plVar7;
  int iVar8;
  undefined1 auVar9 [16];
  undefined4 local_c8;
  int local_c4;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar4 = FUN_003e0454(param_6 + 0xd0);
  FUN_003de994(param_6 + 0xd0);
  lVar5 = *(long *)(lVar4 + 0x10);
  local_b0 = *(undefined8 *)(lVar5 + 0x138);
  local_b8 = *(undefined8 *)(lVar5 + 0x130);
  local_c0 = *(undefined8 *)(lVar5 + 0x128);
  local_a8 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x140);
  local_a0 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x148);
  local_98 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x150);
  local_90 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x158);
  local_88 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x160);
  local_80 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x168);
  local_78 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x170);
  local_70 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x178);
  local_68 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x180);
  local_60 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 200);
  local_58 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xd0);
  local_50 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xd8);
  local_48 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xe0);
  local_40 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xe8);
  local_38 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xf0);
  local_30 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0xf8);
  local_28 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x100);
  local_20 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x108);
  local_18 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x110);
  local_10 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x118);
  local_c4 = 0;
  local_8 = *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x120);
  auVar9 = FUN_003e4244(param_1,param_2,param_3,param_4,param_5,&local_c8,&local_c0,0xc,param_6,
                        &local_c4);
  plVar7 = auVar9._0_8_;
  uVar6 = auVar9._8_8_ & 0xffffffff;
  if (local_c4 == 0) {
    *(undefined4 *)(param_8 + 0x10) = local_c8;
  }
  else {
    *param_7 = *param_7 | 4;
  }
  if (plVar7 == (long *)0x0) {
LAB_003e4aec:
    plVar7 = (long *)0x0;
    iVar8 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e4a98;
  }
  else {
    if (auVar9._8_4_ == -1) {
      if ((byte *)plVar7[2] < (byte *)plVar7[3]) {
        uVar6 = (ulong)*(byte *)plVar7[2];
      }
      else {
        uVar3 = (**(code **)(*plVar7 + 0x48))();
        if (uVar3 == 0xffffffff) goto LAB_003e4aec;
        uVar6 = (ulong)uVar3;
      }
    }
    iVar8 = 0;
    if (param_4 == (long *)0x0) goto LAB_003e4aac;
LAB_003e4a98:
    iVar1 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[2] < (ulong)param_4[3]) {
        iVar1 = 0;
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar1 = 1;
        if (iVar2 != -1) {
          iVar1 = 0;
        }
      }
    }
    if (iVar8 != iVar1) goto LAB_003e4aac;
  }
  *param_7 = *param_7 | 2;
LAB_003e4aac:
  auVar9._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar9._0_8_ = plVar7;
  return auVar9;
}


==================================================================

### FUNC 003e4b78 (4064 bytes) name=FUN_003e4b78

undefined1  [16]
FUN_003e4b78(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8,char *param_9)

{
  undefined1 auVar1 [16];
  char cVar2;
  char cVar4;
  uint uVar5;
  byte bVar3;
  int iVar6;
  int iVar7;
  long lVar8;
  long *plVar9;
  size_t sVar10;
  ulong uVar11;
  long lVar12;
  long *plVar13;
  ulong uVar14;
  undefined1 auVar15 [12];
  undefined1 auVar16 [12];
  long *local_90;
  undefined8 local_88;
  undefined1 local_80 [12];
  undefined4 uStack_74;
  uint local_68;
  int local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_80._8_4_ = (undefined4)param_3;
  uStack_74 = (undefined4)((ulong)param_3 >> 0x20);
  local_90 = param_4;
  local_88 = param_5;
  local_80._0_8_ = param_2;
  lVar8 = FUN_003e0454(param_6 + 0xd0);
  uVar14 = 0;
  plVar9 = (long *)FUN_003de994(param_6 + 0xd0);
  sVar10 = strlen(param_9);
  auVar16._8_4_ = local_80._8_4_;
  auVar16._0_8_ = local_80._0_8_;
  local_68 = 0;
LAB_003e4c1c:
  local_80._8_4_ = auVar16._8_4_;
  plVar13 = auVar16._0_8_;
  if (plVar13 == (long *)0x0) {
LAB_003e4d04:
    if (local_90 == (long *)0x0) {
LAB_003e4d48:
      if ((local_68 != 0) || (uVar14 != sVar10)) {
        *param_7 = *param_7 | 4;
      }
      auVar1._8_4_ = local_80._8_4_;
      auVar1._0_8_ = local_80._0_8_;
      auVar1._12_4_ = uStack_74;
      return auVar1;
    }
    iVar6 = 1;
joined_r0x003e4d1c:
    iVar7 = 0;
    if ((int)local_88 == -1) {
      if ((byte *)local_90[2] < (byte *)local_90[3]) {
        uVar5 = (uint)*(byte *)local_90[2];
      }
      else {
        uVar5 = (**(code **)(*local_90 + 0x48))();
        if (uVar5 == 0xffffffff) {
          local_90 = (long *)0x0;
          iVar7 = 1;
          goto LAB_003e4c48;
        }
      }
      local_88 = CONCAT44(local_88._4_4_,uVar5);
      if (iVar6 == 0) goto LAB_003e4d48;
    }
    else {
LAB_003e4c48:
      if (iVar6 == iVar7) goto LAB_003e4d48;
    }
  }
  else {
    uVar5 = local_80._8_4_;
    if (local_80._8_4_ == 0xffffffff) {
      if ((byte *)plVar13[2] < (byte *)plVar13[3]) {
        uVar5 = (uint)*(byte *)plVar13[2];
      }
      else {
        uVar5 = (**(code **)(*plVar13 + 0x48))(plVar13);
        if (uVar5 == 0xffffffff) {
          local_80._0_8_ = (long *)0x0;
          goto LAB_003e4d04;
        }
      }
    }
    local_80._8_4_ = uVar5;
    iVar6 = 0;
    if (local_90 != (long *)0x0) {
      goto joined_r0x003e4d1c;
    }
  }
  if ((sVar10 <= uVar14) || (local_68 != 0)) goto LAB_003e4d48;
  bVar3 = param_9[uVar14];
  cVar2 = *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139);
  if (cVar2 == '\0') {
    cVar2 = (**(code **)(*plVar9 + 0x40))(plVar9,bVar3,0);
    if (cVar2 != '\0') {
      *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139) = cVar2;
      goto LAB_003e4c74;
    }
LAB_003e4d90:
    bVar3 = param_9[uVar14];
    if ((long *)local_80._0_8_ == (long *)0x0) {
LAB_003e4ed0:
      auVar15._4_8_ = 0;
      auVar15._0_4_ = local_80._8_4_;
      auVar16 = auVar15 << 0x40;
      plVar13 = (long *)0x0;
      if (bVar3 == 0xff) {
        uVar14 = uVar14 + 1;
      }
      else {
LAB_003e4db4:
        auVar16._8_4_ = local_80._8_4_;
        auVar16._0_8_ = plVar13;
        uVar14 = uVar14 + 1;
        local_68 = local_68 | 4;
      }
    }
    else {
      if (local_80._8_4_ == 0xffffffff) {
        if (*(byte **)(local_80._0_8_ + 0x10) < *(byte **)(local_80._0_8_ + 0x18)) {
          local_80._8_4_ = ZEXT14(**(byte **)(local_80._0_8_ + 0x10));
          uVar5 = local_80._8_4_;
          goto joined_r0x003e4e5c;
        }
        uVar5 = (**(code **)(*(long *)local_80._0_8_ + 0x48))();
        auVar16._8_4_ = uVar5;
        auVar16._0_8_ = local_80._0_8_;
        if (uVar5 == 0xffffffff) {
          local_80._0_8_ = (long *)0x0;
          goto LAB_003e4ed0;
        }
        plVar13 = (long *)local_80._0_8_;
        local_80._8_4_ = uVar5;
        if ((uint)bVar3 != (uVar5 & 0xff)) goto LAB_003e4db4;
        uVar11 = uVar14;
        if ((long *)local_80._0_8_ == (long *)0x0) goto LAB_003e4ccc;
        uVar11 = *(ulong *)(local_80._0_8_ + 0x10);
        if (uVar11 < *(ulong *)(local_80._0_8_ + 0x18)) goto LAB_003e4e70;
      }
      else {
        uVar5 = local_80._8_4_ & 0xff;
joined_r0x003e4e5c:
        plVar13 = (long *)local_80._0_8_;
        if (bVar3 != uVar5) goto LAB_003e4db4;
        uVar11 = *(ulong *)(local_80._0_8_ + 0x10);
        if (uVar11 < *(ulong *)(local_80._0_8_ + 0x18)) {
LAB_003e4e70:
          *(ulong *)(local_80._0_8_ + 0x10) = uVar11 + 1;
          goto LAB_003e4e7c;
        }
      }
      (**(code **)(*(long *)local_80._0_8_ + 0x50))();
LAB_003e4e7c:
      uVar14 = uVar14 + 1;
      auVar16._8_4_ = 0xffffffff;
      auVar16._0_8_ = local_80._0_8_;
    }
    goto LAB_003e4c1c;
  }
LAB_003e4c74:
  if (cVar2 != '%') goto LAB_003e4d90;
  uVar11 = uVar14 + 1;
  bVar3 = param_9[uVar11];
  cVar2 = *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139);
  if (cVar2 == '\0') {
    cVar2 = (**(code **)(*plVar9 + 0x40))(plVar9);
    if (cVar2 != '\0') {
      *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139) = cVar2;
      goto LAB_003e4c90;
    }
    goto LAB_003e4cc0;
  }
LAB_003e4c90:
  local_64 = 0;
  if ((cVar2 == 'O') || (cVar2 == 'E')) {
    uVar11 = uVar14 + 2;
    bVar3 = param_9[uVar11];
    cVar2 = *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139);
    if (cVar2 != '\0') goto LAB_003e4ca8;
    cVar2 = (**(code **)(*plVar9 + 0x40))(plVar9);
    if (cVar2 != '\0') {
      *(char *)((long)plVar9 + (long)(int)(uint)bVar3 + 0x139) = cVar2;
      goto LAB_003e4ca8;
    }
switchD_003e4ce4_caseD_45:
LAB_003e4cc0:
    auVar16._8_4_ = local_80._8_4_;
    auVar16._0_8_ = local_80._0_8_;
    local_68 = local_68 | 4;
LAB_003e4ccc:
    local_80._0_8_ = auVar16._0_8_;
    uVar14 = uVar11 + 1;
    goto LAB_003e4c1c;
  }
LAB_003e4ca8:
  switch(cVar2) {
  case 'A':
    lVar12 = *(long *)(lVar8 + 0x10);
    local_60 = *(undefined8 *)(lVar12 + 0x58);
    local_58 = *(undefined8 *)(lVar12 + 0x60);
    uVar14 = uVar11 + 1;
    local_50 = *(undefined8 *)(lVar12 + 0x68);
    local_48 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x70);
    local_40 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x78);
    local_38 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x80);
    local_30 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x88);
                    /* catch() { ... } // from try @ 003e2db4 with catch @ 003e5600
                       catch() { ... } // from try @ 003e3544 with catch @ 003e5600
                       catch() { ... } // from try @ 003e3708 with catch @ 003e5600
                       catch() { ... } // from try @ 003e46d0 with catch @ 003e5600
                       catch() { ... } // from try @ 003e56c0 with catch @ 003e5600 */
    auVar16 = FUN_003e3ed0(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 0x18,&local_60,7,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'B':
    lVar12 = *(long *)(lVar8 + 0x10);
    uVar14 = uVar11 + 1;
    local_60 = *(undefined8 *)(lVar12 + 200);
    local_58 = *(undefined8 *)(lVar12 + 0xd0);
    local_50 = *(undefined8 *)(lVar12 + 0xd8);
    local_48 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xe0);
    local_40 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xe8);
    local_38 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xf0);
    local_30 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xf8);
    local_28 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x100);
    local_20 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x108);
    local_18 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x110);
                    /* try { // try from 003e552c to 004e554b has its CatchHandler @ 003e36fc */
    local_10 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x118);
    local_8 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x120);
    auVar16 = FUN_003e3ed0(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 0x10,&local_60,0xc,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'C':
  case 'Y':
  case 'y':
                    /* catch() { ... } // from try @ 003e3114 with catch @ 003e591c */
                    /* catch() { ... } // from try @ 003e30e4 with catch @ 003e592c
                       catch() { ... } // from try @ 003e311c with catch @ 003e592c
                       catch() { ... } // from try @ 003e3290 with catch @ 003e592c
                       catch() { ... } // from try @ 003e3958 with catch @ 003e592c
                       catch() { ... } // from try @ 003e422c with catch @ 003e592c */
                    /* catch() { ... } // from try @ 003e588c with catch @ 003e5934 */
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,&local_64,0,9999,4,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    if (local_68 == 0) {
      if (local_64 < 0) {
        iVar6 = local_64 + 100;
      }
      else {
        iVar6 = local_64 + -0x76c;
      }
      uVar14 = uVar11 + 1;
                    /* try { // try from 003e597c to 004e597f has its CatchHandler @ 003e59d8 */
      *(int *)(param_8 + 0x14) = iVar6;
      goto LAB_003e4c1c;
    }
    break;
  case 'D':
                    /* try { // try from 003e5894 to 004e58cb has its CatchHandler @ 003e59d8 */
    if ((char)plVar9[7] == '\x01') {
      local_60 = DAT_00479960;
                    /* WARNING: Ignoring partial resolution of indirect */
      local_58._0_1_ = DAT_00479968;
    }
    else {
      if ((char)plVar9[7] == '\0') {
                    /* try { // try from 003e5a5c to 004e5a7b has its CatchHandler @ 003e6694 */
        FUN_003d14e0(plVar9);
      }
      (**(code **)(*plVar9 + 0x38))(plVar9,&DAT_00479960,&DAT_00479969,&local_60);
    }
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,&local_60);
    local_80._0_8_ = auVar16._0_8_;
                    /* try { // try from 003e5904 to 004e5907 has its CatchHandler @ 003e59e0 */
                    /* catch() { ... } // from try @ 003e2e8c with catch @ 003e590c */
    goto LAB_003e4c1c;
  default:
    goto switchD_003e4ce4_caseD_45;
  case 'H':
                    /* try { // try from 003e5850 to 004e5853 has its CatchHandler @ 003e59d8 */
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 8,0,0x17,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
                    /* try { // try from 003e588c to 004e588f has its CatchHandler @ 003e5934 */
    goto LAB_003e4c1c;
  case 'I':
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 8,1,0xc,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'M':
                    /* catch() { ... } // from try @ 003e2fbc with catch @ 003e5788 */
                    /* try { // try from 003e57a0 to 004e57a3 has its CatchHandler @ 003e2d40 */
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 4,0,0x3b,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'R':
    if ((char)plVar9[7] == '\x01') {
                    /* WARNING: Ignoring partial resolution of indirect */
      local_60._0_4_ = DAT_00479970;
    }
    else {
      if ((char)plVar9[7] == '\0') {
        FUN_003d14e0(plVar9);
      }
      (**(code **)(*plVar9 + 0x38))(plVar9,&DAT_00479970,&DAT_00479976,&local_60);
    }
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,&local_60);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'S':
                    /* try { // try from 003e56c0 to 004e56c3 has its CatchHandler @ 003e5600 */
                    /* try { // try from 003e56d0 to 004e56d3 has its CatchHandler @ 003e36fc */
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8,0,0x3d,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'T':
    if ((char)plVar9[7] == '\x01') {
      local_60 = DAT_00479978;
                    /* WARNING: Ignoring partial resolution of indirect */
      local_58._0_1_ = DAT_00479980;
    }
    else {
      if ((char)plVar9[7] == '\0') {
        FUN_003d14e0(plVar9);
      }
      (**(code **)(*plVar9 + 0x38))(plVar9,&DAT_00479978,&DAT_00479981,&local_60);
    }
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,&local_60);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'X':
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,
                           *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x20));
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'Z':
    bVar3 = FUN_003e3e48(local_80);
    if ((*(byte *)(plVar9[6] + (ulong)bVar3) & 1) == 0) goto LAB_003e4cc0;
    local_80 = FUN_003e3ed0(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                            local_88,&local_60,PTR_PTR_005018c8,0xe,param_6,&local_68);
    iVar6 = FUN_003e3e48(local_80);
    iVar7 = FUN_003e3e48(&local_90);
    auVar16 = local_80;
    if ((((iVar6 == -1) != (iVar7 == -1)) && (local_68 == 0)) && ((int)local_60 == 0)) {
      cVar2 = FUN_003e3e48(local_80);
      if ((char)plVar9[7] == '\0') {
        cVar4 = FUN_003dcafc(plVar9,0x2d);
      }
      else {
        cVar4 = *(char *)((long)plVar9 + 0x66);
      }
      auVar16 = local_80;
      if (cVar2 != cVar4) {
        cVar2 = FUN_003e3e48(local_80);
        if ((char)plVar9[7] == '\0') {
          cVar4 = FUN_003dcafc(plVar9,0x2b);
          auVar16 = local_80;
        }
        else {
          cVar4 = *(char *)((long)plVar9 + 100);
          auVar16 = local_80;
        }
        if (cVar2 != cVar4) break;
      }
      local_80._8_4_ = auVar16._8_4_;
      local_80._0_8_ = auVar16._0_8_;
      auVar15 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,&local_60,0,0x17,2,param_6,&local_68);
      local_80 = auVar16;
      local_80 = auVar15;
      auVar16 = FUN_003dec14(param_1,auVar15._0_8_,CONCAT44(uStack_74,auVar15._8_4_),local_90,
                             local_88,&local_60,0,0x3b,2,param_6,&local_68);
    }
    break;
  case 'a':
    lVar12 = *(long *)(lVar8 + 0x10);
    local_60 = *(undefined8 *)(lVar12 + 0x90);
    local_58 = *(undefined8 *)(lVar12 + 0x98);
    uVar14 = uVar11 + 1;
    local_50 = *(undefined8 *)(lVar12 + 0xa0);
    local_48 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xa8);
    local_40 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xb0);
    local_38 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xb8);
    local_30 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0xc0);
    auVar16 = FUN_003e3ed0(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 0x18,&local_60,7,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'b':
  case 'h':
    lVar12 = *(long *)(lVar8 + 0x10);
    uVar14 = uVar11 + 1;
    local_60 = *(undefined8 *)(lVar12 + 0x128);
    local_58 = *(undefined8 *)(lVar12 + 0x130);
    local_50 = *(undefined8 *)(lVar12 + 0x138);
    local_48 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x140);
    local_40 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x148);
    local_38 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x150);
    local_30 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x158);
    local_28 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x160);
    local_20 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x168);
    local_18 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x170);
    local_10 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x178);
    local_8 = *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x180);
    auVar16 = FUN_003e3ed0(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 0x10,&local_60,0xc,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'c':
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,
                           *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x30));
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'd':
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_8 + 0xc,1,0x1f,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  case 'e':
    bVar3 = FUN_003e3e48(local_80);
    if ((*(byte *)(plVar9[6] + (ulong)bVar3) >> 3 & 1) == 0) {
                    /* catch() { ... } // from try @ 003e2e5c with catch @ 003e59d8
                       catch() { ... } // from try @ 003e2e94 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e2f30 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e2fc4 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e345c with catch @ 003e59d8
                       catch() { ... } // from try @ 003e36e8 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e4558 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e5850 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e5894 with catch @ 003e59d8
                       catch() { ... } // from try @ 003e597c with catch @ 003e59d8 */
                    /* catch() { ... } // from try @ 003e5904 with catch @ 003e59e0 */
                    /* catch() { ... } // from try @ 003e5a38 with catch @ 003e5a00
                       catch() { ... } // from try @ 003e5d74 with catch @ 003e5a00
                       catch() { ... } // from try @ 003e643c with catch @ 003e5a00
                       catch() { ... } // from try @ 003e6658 with catch @ 003e5a00 */
      uVar14 = uVar11 + 1;
      auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0xc,10,0x1f,2,param_6,&local_68);
      local_80._0_8_ = auVar16._0_8_;
    }
    else {
      if ((long *)local_80._0_8_ != (long *)0x0) {
        if (*(ulong *)(local_80._0_8_ + 0x10) < *(ulong *)(local_80._0_8_ + 0x18)) {
          *(ulong *)(local_80._0_8_ + 0x10) = *(ulong *)(local_80._0_8_ + 0x10) + 1;
        }
        else {
          FUN_003dcae0();
        }
        local_80._8_4_ = 0xffffffff;
      }
      uVar14 = uVar11 + 1;
      auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0xc,1,9,1,param_6,&local_68);
      local_80._0_8_ = auVar16._0_8_;
    }
    goto LAB_003e4c1c;
  case 'm':
    auVar16 = FUN_003dec14(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,&local_64,1,0xc,2,param_6,&local_68);
    local_80._0_8_ = auVar16._0_8_;
    if (local_68 != 0) goto LAB_003e4ccc;
    uVar14 = uVar11 + 1;
    *(int *)(param_8 + 0x10) = local_64 + -1;
    goto LAB_003e4c1c;
  case 'n':
    uVar14 = FUN_003e3e48(local_80);
    cVar2 = *(char *)((long)plVar9 + (uVar14 & 0xff) + 0x139);
    if (cVar2 == '\0') {
                    /* try { // try from 003e5a38 to 004e5a57 has its CatchHandler @ 003e5a00 */
      cVar2 = (**(code **)(*plVar9 + 0x40))(plVar9,uVar14 & 0xffffffff,0);
      if (cVar2 == '\0') goto LAB_003e4cc0;
      *(char *)((long)plVar9 + (uVar14 & 0xff) + 0x139) = cVar2;
    }
    if (cVar2 != '\n') goto LAB_003e4cc0;
LAB_003e5434:
    auVar16._8_4_ = local_80._8_4_;
    auVar16._0_8_ = local_80._0_8_;
    if ((long *)local_80._0_8_ == (long *)0x0) goto LAB_003e4ccc;
    uVar14 = uVar11;
    if (*(ulong *)(local_80._0_8_ + 0x10) < *(ulong *)(local_80._0_8_ + 0x18)) {
      *(ulong *)(local_80._0_8_ + 0x10) = *(ulong *)(local_80._0_8_ + 0x10) + 1;
    }
    else {
      FUN_003dcae0(local_80._0_8_);
                    /* try { // try from 003e5b28 to 004e5b2b has its CatchHandler @ 003e66ec */
    }
    goto LAB_003e4e7c;
  case 't':
    uVar14 = FUN_003e3e48(local_80);
    cVar2 = *(char *)((long)plVar9 + (uVar14 & 0xff) + 0x139);
    if (cVar2 == '\0') {
      cVar2 = (**(code **)(*plVar9 + 0x40))(plVar9,uVar14 & 0xffffffff,0);
      if (cVar2 == '\0') goto LAB_003e4cc0;
                    /* try { // try from 003e59c0 to 004e59c3 has its CatchHandler @ 003e59c8 */
      *(char *)((long)plVar9 + (uVar14 & 0xff) + 0x139) = cVar2;
                    /* catch() { ... } // from try @ 003e59c0 with catch @ 003e59c8 */
    }
    if (cVar2 == '\t') goto LAB_003e5434;
    goto LAB_003e4cc0;
  case 'x':
    uVar14 = uVar11 + 1;
    auVar16 = FUN_003e4b78(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                           local_88,param_6,&local_68,param_8,
                           *(undefined8 *)(*(long *)(lVar8 + 0x10) + 0x10));
    local_80._0_8_ = auVar16._0_8_;
    goto LAB_003e4c1c;
  }
  local_80._0_8_ = auVar16._0_8_;
  uVar14 = uVar11 + 1;
  goto LAB_003e4c1c;
}


==================================================================

### FUNC 003e5b58 (364 bytes) name=FUN_003e5b58

undefined1  [16]
FUN_003e5b58(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,undefined8 param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long *plVar5;
  ulong uVar6;
  int iVar7;
  undefined1 auVar8 [16];
  
                    /* try { // try from 003e5b58 to 004e5b5b has its CatchHandler @ 003e6684 */
                    /* try { // try from 003e5b60 to 004e5bef has its CatchHandler @ 003e66ec */
  lVar4 = FUN_003e0454(param_6 + 0xd0);
  auVar8 = FUN_003e4b78(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,
                        *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x20));
  plVar5 = auVar8._0_8_;
  uVar6 = auVar8._8_8_ & 0xffffffff;
  if (plVar5 == (long *)0x0) {
LAB_003e5c38:
    plVar5 = (long *)0x0;
                    /* try { // try from 003e5c3c to 004e5c63 has its CatchHandler @ 003e665c */
    iVar7 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e5bf8;
  }
  else {
    if (auVar8._8_4_ == -1) {
      if ((byte *)plVar5[2] < (byte *)plVar5[3]) {
        uVar6 = (ulong)*(byte *)plVar5[2];
      }
      else {
        uVar3 = (**(code **)(*plVar5 + 0x48))();
        if (uVar3 == 0xffffffff) goto LAB_003e5c38;
        uVar6 = (ulong)uVar3;
      }
    }
    iVar7 = 0;
    if (param_4 == (long *)0x0) goto LAB_003e5c0c;
LAB_003e5bf8:
    iVar1 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[2] < (ulong)param_4[3]) {
        iVar1 = 0;
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar1 = 1;
        if (iVar2 != -1) {
          iVar1 = 0;
        }
      }
    }
    if (iVar7 != iVar1) goto LAB_003e5c0c;
  }
  *param_7 = *param_7 | 2;
LAB_003e5c0c:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar8._0_8_ = plVar5;
  return auVar8;
}


==================================================================

### FUNC 003e5cc4 (364 bytes) name=FUN_003e5cc4

undefined1  [16]
FUN_003e5cc4(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,undefined8 param_8)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  long lVar4;
  long *plVar5;
  ulong uVar6;
  int iVar7;
  undefined1 auVar8 [16];
  
                    /* try { // try from 003e5cd4 to 004e5cd7 has its CatchHandler @ 003e66ec */
  lVar4 = FUN_003e0454(param_6 + 0xd0);
  auVar8 = FUN_003e4b78(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,
                        *(undefined8 *)(*(long *)(lVar4 + 0x10) + 0x10));
  plVar5 = auVar8._0_8_;
                    /* try { // try from 003e5d48 to 004e5d4b has its CatchHandler @ 003e6694 */
  uVar6 = auVar8._8_8_ & 0xffffffff;
  if (plVar5 == (long *)0x0) {
LAB_003e5da4:
    plVar5 = (long *)0x0;
    iVar7 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e5d64;
  }
  else {
    if (auVar8._8_4_ == -1) {
      if ((byte *)plVar5[2] < (byte *)plVar5[3]) {
        uVar6 = (ulong)*(byte *)plVar5[2];
      }
      else {
        uVar3 = (**(code **)(*plVar5 + 0x48))();
        if (uVar3 == 0xffffffff) goto LAB_003e5da4;
        uVar6 = (ulong)uVar3;
      }
    }
    iVar7 = 0;
    if (param_4 == (long *)0x0) goto LAB_003e5d78;
LAB_003e5d64:
    iVar1 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[2] < (ulong)param_4[3]) {
        iVar1 = 0;
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar1 = 1;
        if (iVar2 != -1) {
          iVar1 = 0;
        }
      }
    }
                    /* try { // try from 003e5d74 to 004e5dc7 has its CatchHandler @ 003e5a00 */
    if (iVar7 != iVar1) goto LAB_003e5d78;
  }
  *param_7 = *param_7 | 2;
LAB_003e5d78:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar8._0_8_ = plVar5;
  return auVar8;
}


==================================================================

### FUNC 003e5e30 (1096 bytes) name=FUN_003e5e30

/* WARNING: Removing unreachable block (ram,0x003e6920) */
/* WARNING: Removing unreachable block (ram,0x003e6aac) */
/* WARNING: Removing unreachable block (ram,0x003e6ac0) */
/* WARNING: Removing unreachable block (ram,0x003e6ac8) */
/* WARNING: Removing unreachable block (ram,0x003e6aec) */
/* WARNING: Removing unreachable block (ram,0x003e6ad8) */
/* WARNING: Removing unreachable block (ram,0x003e6ae4) */
/* WARNING: Removing unreachable block (ram,0x003e6a34) */
/* WARNING: Removing unreachable block (ram,0x003e6a94) */
/* WARNING: Removing unreachable block (ram,0x003e6a3c) */
/* WARNING: Removing unreachable block (ram,0x003e6a40) */
/* WARNING: Removing unreachable block (ram,0x003e6a50) */
/* WARNING: Removing unreachable block (ram,0x003e6a78) */
/* WARNING: Removing unreachable block (ram,0x003e6a84) */
/* WARNING: Removing unreachable block (ram,0x003e6a90) */
/* WARNING: Removing unreachable block (ram,0x003e6410) */
/* WARNING: Removing unreachable block (ram,0x003e68d0) */
/* WARNING: Removing unreachable block (ram,0x003e641c) */
/* WARNING: Removing unreachable block (ram,0x003e6434) */
/* WARNING: Removing unreachable block (ram,0x003e643c) */
/* WARNING: Removing unreachable block (ram,0x003e68dc) */
/* WARNING: Removing unreachable block (ram,0x003e6a9c) */
/* WARNING: Removing unreachable block (ram,0x003e61ac) */
/* WARNING: Removing unreachable block (ram,0x003e61b0) */
/* WARNING: Removing unreachable block (ram,0x003e6aa8) */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003e5e30(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,long param_6,uint *param_7,undefined8 param_8)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  undefined *puVar8;
  long lVar9;
  undefined1 auVar10 [16];
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined1 auStack_28 [8];
  undefined1 auStack_20 [8];
  undefined4 local_18;
  undefined *local_10;
  undefined *local_8;
  
  local_50 = param_4;
  uStack_48 = param_5;
  local_40 = param_2;
  local_38 = param_3;
  FUN_003de994(param_6 + 0xd0);
  lVar7 = FUN_003e3b44(auStack_28,param_6 + 0xd0);
  local_10 = PTR_DAT_00501f30 + 0x18;
  if (*(char *)(lVar7 + 0x20) != '\0') {
    FUN_00410ed8(&local_10,0x20);
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_8,0x20);
  local_18 = *(undefined4 *)(lVar7 + 0x60);
  lVar9 = 0;
  bVar1 = (byte)local_18;
  while( true ) {
    if (bVar1 < 5) {
                    /* WARNING: Could not recover jumptable at 0x003e5f64. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      auVar10 = (*(code *)(&LAB_003e5f68 + (long)*(short *)(&DAT_00479404 + (ulong)bVar1 * 2) * 4))
                          ();
      return auVar10;
    }
    if (3 < (int)lVar9 + 1) break;
    bVar1 = *(byte *)((long)&local_18 + lVar9 + 1);
    lVar9 = lVar9 + 1;
  }
  if ((1 < *(ulong *)(local_8 + -0x18)) && (lVar9 = FUN_004123cc(&local_8,0x30,0), lVar9 != 0)) {
    if (lVar9 == -1) {
      lVar9 = *(long *)(local_8 + -0x18) + -1;
    }
    FUN_00412dc4(&local_8,0,lVar9);
  }
  if (*(long *)(local_10 + -0x18) != 0) {
                    /* try { // try from 003e6920 to 004e6923 has its CatchHandler @ 003e6d5c */
    FUN_004116e0(&local_10,0);
    cVar4 = FUN_003ee0cc(*(undefined8 *)(lVar7 + 0x10),*(undefined8 *)(lVar7 + 0x18),&local_10);
    if (cVar4 == '\0') {
      *param_7 = *param_7 | 4;
    }
  }
  FUN_00411a24(param_8,&local_8);
  iVar5 = FUN_003e3e48(&local_40);
  iVar6 = FUN_003e3e48(&local_50);
  uVar3 = local_38;
  uVar2 = local_40;
                    /* try { // try from 003e61e4 to 004e61e7 has its CatchHandler @ 003e66e4 */
  if ((iVar6 == -1) == (iVar5 == -1)) {
    *param_7 = *param_7 | 2;
    if (local_8 + -0x18 != PTR_DAT_00501f30) goto LAB_003e6b40;
LAB_003e6200:
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_003e6214;
  }
  else {
    if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003e6200;
LAB_003e6b40:
    FUN_003dca9c(local_8 + -0x18,auStack_20);
                    /* try { // try from 003e6b50 to 004e6b53 has its CatchHandler @ 003e6db4 */
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_003e6214;
  }
  FUN_003dca9c(puVar8,&local_8);
LAB_003e6214:
  auVar10._8_8_ = uVar3;
  auVar10._0_8_ = uVar2;
  return auVar10;
}


==================================================================

### FUNC 003e6bbc (1096 bytes) name=FUN_003e6bbc

/* WARNING: Removing unreachable block (ram,0x003e76ac) */
/* WARNING: Removing unreachable block (ram,0x003e7838) */
/* WARNING: Removing unreachable block (ram,0x003e784c) */
/* WARNING: Removing unreachable block (ram,0x003e7854) */
/* WARNING: Removing unreachable block (ram,0x003e7878) */
/* WARNING: Removing unreachable block (ram,0x003e7864) */
/* WARNING: Removing unreachable block (ram,0x003e7870) */
/* WARNING: Removing unreachable block (ram,0x003e77c0) */
/* WARNING: Removing unreachable block (ram,0x003e7820) */
/* WARNING: Removing unreachable block (ram,0x003e77c8) */
/* WARNING: Removing unreachable block (ram,0x003e77cc) */
/* WARNING: Removing unreachable block (ram,0x003e77dc) */
/* WARNING: Removing unreachable block (ram,0x003e7804) */
/* WARNING: Removing unreachable block (ram,0x003e7810) */
/* WARNING: Removing unreachable block (ram,0x003e781c) */
/* WARNING: Removing unreachable block (ram,0x003e719c) */
/* WARNING: Removing unreachable block (ram,0x003e765c) */
/* WARNING: Removing unreachable block (ram,0x003e71a8) */
/* WARNING: Removing unreachable block (ram,0x003e71c0) */
/* WARNING: Removing unreachable block (ram,0x003e71c8) */
/* WARNING: Removing unreachable block (ram,0x003e7668) */
/* WARNING: Removing unreachable block (ram,0x003e7828) */
/* WARNING: Removing unreachable block (ram,0x003e6f38) */
/* WARNING: Removing unreachable block (ram,0x003e6f3c) */
/* WARNING: Removing unreachable block (ram,0x003e7834) */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003e6bbc(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,long param_6,uint *param_7,undefined8 param_8)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  undefined *puVar8;
  long lVar9;
  undefined1 auVar10 [16];
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined1 auStack_28 [8];
  undefined1 auStack_20 [8];
  undefined4 local_18;
  undefined *local_10;
  undefined *local_8;
  
                    /* try { // try from 003e6bc4 to 004e6bc7 has its CatchHandler @ 003e6dac */
  local_50 = param_4;
  uStack_48 = param_5;
  local_40 = param_2;
  local_38 = param_3;
  FUN_003de994(param_6 + 0xd0);
  lVar7 = FUN_003e3c54(auStack_28,param_6 + 0xd0);
                    /* try { // try from 003e6c38 to 004e6c93 has its CatchHandler @ 003e6720 */
  local_10 = PTR_DAT_00501f30 + 0x18;
  if (*(char *)(lVar7 + 0x20) != '\0') {
    FUN_00410ed8(&local_10,0x20);
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_8,0x20);
  local_18 = *(undefined4 *)(lVar7 + 0x60);
  lVar9 = 0;
  bVar1 = (byte)local_18;
                    /* try { // try from 003e6c9c to 004e6c9f has its CatchHandler @ 003e6dac */
                    /* try { // try from 003e6ca8 to 004e6cab has its CatchHandler @ 003e6db4 */
                    /* try { // try from 003e6cb4 to 004e6cb7 has its CatchHandler @ 003e6cfc */
                    /* try { // try from 003e6cc0 to 004e6cc3 has its CatchHandler @ 003e6d5c */
                    /* try { // try from 003e6ccc to 004e6ccf has its CatchHandler @ 003e6da4 */
  while( true ) {
    if (bVar1 < 5) {
                    /* try { // try from 003e6ce0 to 004e6ce3 has its CatchHandler @ 003e6db4 */
                    /* WARNING: Could not recover jumptable at 0x003e6cf0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      auVar10 = (*(code *)(&UNK_003e6cf4 + (long)*(short *)(&DAT_00479410 + (ulong)bVar1 * 2) * 4))
                          ();
      return auVar10;
    }
    if (3 < (int)lVar9 + 1) break;
                    /* catch() { ... } // from try @ 003e6e20 with catch @ 003e6dd0
                       catch() { ... } // from try @ 003e72dc with catch @ 003e6dd0
                       catch() { ... } // from try @ 003e7314 with catch @ 003e6dd0
                       catch() { ... } // from try @ 003e7420 with catch @ 003e6dd0 */
    bVar1 = *(byte *)((long)&local_18 + lVar9 + 1);
    lVar9 = lVar9 + 1;
  }
  if ((1 < *(ulong *)(local_8 + -0x18)) && (lVar9 = FUN_004123cc(&local_8,0x30,0), lVar9 != 0)) {
    if (lVar9 == -1) {
                    /* try { // try from 003e7180 to 004e7183 has its CatchHandler @ 003e7424 */
      lVar9 = *(long *)(local_8 + -0x18) + -1;
    }
    FUN_00412dc4(&local_8,0,lVar9);
  }
  if (*(long *)(local_10 + -0x18) != 0) {
    FUN_004116e0(&local_10,0);
    cVar4 = FUN_003ee0cc(*(undefined8 *)(lVar7 + 0x10),*(undefined8 *)(lVar7 + 0x18),&local_10);
    if (cVar4 == '\0') {
      *param_7 = *param_7 | 4;
    }
  }
  FUN_00411a24(param_8,&local_8);
  iVar5 = FUN_003e3e48(&local_40);
  iVar6 = FUN_003e3e48(&local_50);
  uVar3 = local_38;
  uVar2 = local_40;
  if ((iVar6 == -1) == (iVar5 == -1)) {
    *param_7 = *param_7 | 2;
    if (local_8 + -0x18 != PTR_DAT_00501f30) goto LAB_003e78c4;
LAB_003e6f8c:
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_003e6fa0;
  }
  else {
    if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003e6f8c;
LAB_003e78c4:
                    /* try { // try from 003e78c8 to 004e7aaf has its CatchHandler @ 003e94bc */
    FUN_003dca9c(local_8 + -0x18,auStack_20);
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_003e6fa0;
  }
  FUN_003dca9c(puVar8,&local_8);
LAB_003e6fa0:
  auVar10._8_8_ = uVar3;
  auVar10._0_8_ = uVar2;
  return auVar10;
}


==================================================================

### FUNC 003e7940 (256 bytes) name=FUN_003e7940

undefined1  [16]
FUN_003e7940(undefined8 param_1,undefined8 param_2,ulong param_3,undefined8 param_4,
            undefined8 param_5,char param_6,undefined8 param_7,_Ios_Iostate *param_8,
            longdouble *param_9)

{
  char *pcVar1;
  char cVar2;
  bool bVar3;
  undefined *puVar4;
  int *piVar5;
  int iVar6;
  undefined1 auVar7 [16];
  int *local_8;
  
  puVar4 = PTR_DAT_00501f30;
  pcVar1 = PTR_DAT_00501f30 + 0x18;
  if (param_6 == '\0') {
    auVar7 = FUN_003e6bbc();
  }
  else {
    auVar7 = FUN_003e5e30();
  }
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<long_double>(pcVar1,param_9,param_8,&local_8);
  if (puVar4 != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar6 = *(int *)(puVar4 + 0x10);
      *(int *)(puVar4 + 0x10) = iVar6 + -1;
    }
    else {
      piVar5 = (int *)(puVar4 + 0x10);
      do {
        iVar6 = *piVar5;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar3) {
          *piVar5 = iVar6 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar6 < 1) {
      operator_delete(puVar4);
    }
  }
  auVar7._8_8_ = param_3 & 0xffffffff00000000 | auVar7._8_8_ & 0xffffffff;
  return auVar7;
}


==================================================================

### FUNC 003e7a68 (456 bytes) name=FUN_003e7a68

undefined1  [16]
FUN_003e7a68(undefined8 param_1,undefined8 param_2,ulong param_3,undefined8 param_4,
            undefined8 param_5,char param_6,long param_7,undefined8 param_8,long *param_9)

{
  char cVar1;
  bool bVar2;
  undefined *__src;
  long *plVar3;
  undefined *puVar4;
  int iVar5;
  int *piVar6;
  ulong uVar7;
  size_t __n;
  undefined8 uVar8;
  void *__dest;
  undefined1 auVar9 [16];
  undefined *local_8;
  
  plVar3 = (long *)FUN_003de994(param_7 + 0xd0);
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (param_6 == '\0') {
    auVar9 = FUN_003e6bbc(param_1,param_2,param_3,param_4,param_5,param_7,param_8,&local_8);
    uVar8 = auVar9._0_8_;
    __n = *(size_t *)(local_8 + -0x18);
    uVar7 = param_3 & 0xffffffff00000000 | auVar9._8_8_ & 0xffffffff;
    if (__n != 0) goto LAB_003e7b50;
LAB_003e7afc:
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) goto LAB_003e7b0c;
  }
  else {
    auVar9 = FUN_003e5e30();
    uVar8 = auVar9._0_8_;
                    /* try { // try from 003e7af0 to 004e7af3 has its CatchHandler @ 003e9254 */
    __n = *(size_t *)(local_8 + -0x18);
    uVar7 = param_3 & 0xffffffff00000000 | auVar9._8_8_ & 0xffffffff;
                    /* try { // try from 003e7af8 to 004e7b67 has its CatchHandler @ 003e94bc */
    if (__n == 0) goto LAB_003e7afc;
LAB_003e7b50:
    FUN_004134a0(param_9,__n,0);
    __src = local_8;
    __dest = (void *)*param_9;
    puVar4 = local_8 + __n;
    if (-1 < *(int *)((long)__dest + -8)) {
      FUN_00412cf8(param_9);
      __dest = (void *)*param_9;
    }
                    /* try { // try from 003e7b90 to 004e7b93 has its CatchHandler @ 003e9334 */
    if ((char)plVar3[7] == '\x01') {
      memcpy(__dest,__src,__n);
      goto LAB_003e7afc;
    }
    if ((char)plVar3[7] == '\0') {
      FUN_003d14e0(plVar3);
    }
    (**(code **)(*plVar3 + 0x38))(plVar3,__src,puVar4,__dest);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) goto LAB_003e7b0c;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar5 = *(int *)(local_8 + -8);
    *(int *)(local_8 + -8) = iVar5 + -1;
  }
  else {
    piVar6 = (int *)(local_8 + -8);
    do {
      iVar5 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar5 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
LAB_003e7b0c:
  auVar9._8_8_ = uVar7;
  auVar9._0_8_ = uVar8;
  return auVar9;
}


==================================================================

### FUNC 003e7c58 (3172 bytes) name=FUN_003e7c58

undefined1  [16]
FUN_003e7c58(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,undefined4 *param_7,long *param_8)

{
  bool bVar1;
  long *plVar2;
  undefined8 uVar3;
  bool bVar4;
  bool bVar5;
  char cVar6;
  char cVar7;
  byte bVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  long lVar13;
  long lVar14;
  undefined *puVar15;
  void *pvVar16;
  char cVar17;
  uint uVar18;
  undefined4 uVar19;
  byte *pbVar20;
  ulong uVar21;
  long lVar22;
  undefined1 uVar23;
  undefined1 auVar24 [16];
  long *local_40;
  undefined8 local_38;
  long *local_30;
  undefined8 local_28;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  uVar18 = 0;
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  local_28 = param_3;
  lVar13 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  iVar9 = FUN_003e3e48(&local_30);
  iVar10 = FUN_003e3e48(&local_40);
  if ((iVar9 == -1) != (iVar10 == -1)) {
    bVar8 = FUN_003e3e48(&local_30);
    uVar12 = (uint)bVar8;
    bVar5 = *(byte *)(lVar13 + 0x6f) != bVar8;
    if ((bVar5) && (*(byte *)(lVar13 + 0x6e) != bVar8)) {
      cVar6 = *(char *)(lVar13 + 0x20);
LAB_003e85d8:
      iVar9 = 0;
      bVar5 = false;
      do {
        if ((cVar6 != '\0') && (*(byte *)(lVar13 + 0x49) == uVar12)) {
                    /* try { // try from 003e8504 to 004e852b has its CatchHandler @ 003e9464 */
          bVar1 = false;
          local_8 = PTR_DAT_00501f30 + 0x18;
          goto LAB_003e8510;
        }
        if ((*(byte *)(lVar13 + 0x48) == uVar12) ||
           (bVar8 = *(byte *)(lVar13 + 0x72), bVar8 != uVar12)) {
          bVar1 = false;
          goto LAB_003e7ce8;
        }
        if (bVar5) {
LAB_003e8618:
          if (local_30 == (long *)0x0) goto LAB_003e87b4;
LAB_003e8624:
          if ((ulong)local_30[3] <= (ulong)local_30[2]) {
            (**(code **)(*local_30 + 0x50))();
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
            if (local_30 != (long *)0x0) {
              pbVar20 = (byte *)local_30[2];
              if (pbVar20 < (byte *)local_30[3]) goto LAB_003e8650;
              goto LAB_003e880c;
            }
            goto LAB_003e87b4;
          }
          local_30[2] = local_30[2] + 1;
          pbVar20 = (byte *)local_30[2];
          local_28 = CONCAT44(local_28._4_4_,0xffffffff);
          if (pbVar20 < (byte *)local_30[3]) {
LAB_003e8650:
            uVar18 = (uint)*pbVar20;
          }
          else {
LAB_003e880c:
            uVar18 = (**(code **)(*local_30 + 0x48))();
            if (uVar18 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003e87b4;
            }
          }
          iVar10 = 0;
          local_28 = CONCAT44(local_28._4_4_,uVar18);
          if (local_40 != (long *)0x0) goto LAB_003e8664;
        }
        else {
          lVar14 = *param_8;
          lVar22 = *(long *)(lVar14 + -0x18);
          uVar21 = lVar22 + 1;
          if ((*(ulong *)(lVar14 + -0x10) < uVar21) || (0 < *(int *)(lVar14 + -8))) {
            FUN_00410ed8(param_8,uVar21);
            lVar14 = *param_8;
            lVar22 = *(long *)(lVar14 + -0x18);
          }
          *(undefined1 *)(lVar14 + lVar22) = 0x30;
          lVar14 = *param_8;
          if ((undefined *)(lVar14 + -0x18) == PTR_DAT_00501f30) goto LAB_003e8618;
          *(undefined4 *)(lVar14 + -8) = 0;
          *(ulong *)(lVar14 + -0x18) = uVar21;
          *(undefined1 *)(lVar14 + uVar21) = 0;
          if (local_30 != (long *)0x0) goto LAB_003e8624;
LAB_003e87b4:
          if (local_40 == (long *)0x0) goto LAB_003e871c;
          iVar10 = 1;
LAB_003e8664:
          iVar11 = 0;
          if ((int)local_38 == -1) {
            if ((byte *)local_40[2] < (byte *)local_40[3]) {
              uVar18 = (uint)*(byte *)local_40[2];
            }
            else {
              uVar18 = (**(code **)(*local_40 + 0x48))();
              if (uVar18 == 0xffffffff) {
                local_40 = (long *)0x0;
                iVar11 = 1;
                goto LAB_003e8674;
              }
            }
            local_38 = CONCAT44(local_38._4_4_,uVar18);
            iVar11 = 0;
          }
LAB_003e8674:
          if (iVar11 == iVar10) goto LAB_003e871c;
        }
        iVar9 = iVar9 + 1;
        if (local_30 == (long *)0x0) {
LAB_003e8848:
          uVar12 = 0xff;
        }
        else if ((uint)local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar12 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar12 = (**(code **)(*local_30 + 0x48))(local_30);
            if (uVar12 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003e8848;
            }
          }
          local_28 = CONCAT44(local_28._4_4_,uVar12);
          uVar12 = uVar12 & 0xff;
        }
        else {
          uVar12 = (uint)local_28 & 0xff;
        }
        cVar6 = *(char *)(lVar13 + 0x20);
        bVar5 = true;
      } while( true );
    }
    cVar6 = *(char *)(lVar13 + 0x20);
                    /* try { // try from 003e8540 to 004e86ab has its CatchHandler @ 003e9358 */
    uVar18 = (uint)bVar8;
    if ((cVar6 != '\0') && (*(byte *)(lVar13 + 0x49) == uVar18)) {
      cVar6 = '\x01';
      goto LAB_003e85d8;
    }
    if (*(byte *)(lVar13 + 0x48) == uVar18) goto LAB_003e85d8;
    uVar19 = 0x2d;
    if (!bVar5) {
      uVar19 = 0x2b;
    }
    FUN_004116e0(param_8,uVar19);
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
      }
      else {
        FUN_003dcae0();
      }
      local_28 = CONCAT44(local_28._4_4_,0xffffffff);
    }
    iVar9 = FUN_003e3e48(&local_30);
    iVar10 = FUN_003e3e48(&local_40);
    if ((iVar9 == -1) != (iVar10 == -1)) {
      uVar12 = FUN_003e3e48(&local_30);
      uVar12 = uVar12 & 0xff;
      cVar6 = *(char *)(lVar13 + 0x20);
      goto LAB_003e85d8;
    }
  }
  cVar6 = *(char *)(lVar13 + 0x20);
  iVar9 = 0;
  bVar5 = false;
  bVar1 = true;
  uVar12 = uVar18;
  goto LAB_003e7ce8;
code_r0x003e8074:
  bVar4 = true;
  uVar23 = 0x2d;
  if (*(byte *)(lVar13 + 0x6e) != uVar12) goto LAB_003e7d10;
LAB_003e8088:
  lVar14 = *param_8;
  lVar22 = *(long *)(lVar14 + -0x18);
                    /* try { // try from 003e8094 to 004e8097 has its CatchHandler @ 003e931c */
  uVar21 = lVar22 + 1;
  if ((*(ulong *)(lVar14 + -0x10) < uVar21) || (0 < *(int *)(lVar14 + -8))) {
    FUN_00410ed8(param_8,uVar21);
    lVar14 = *param_8;
    lVar22 = *(long *)(lVar14 + -0x18);
  }
  *(undefined1 *)(lVar14 + lVar22) = uVar23;
  bVar4 = true;
  lVar14 = *param_8;
  if ((undefined *)(lVar14 + -0x18) == PTR_DAT_00501f30) {
LAB_003e7d78:
    if (local_30 != (long *)0x0) goto LAB_003e7d80;
LAB_003e80f0:
    if (local_40 == (long *)0x0) goto LAB_003e7ddc;
    iVar10 = 1;
  }
  else {
LAB_003e80dc:
    *(undefined4 *)(lVar14 + -8) = 0;
    *(ulong *)(lVar14 + -0x18) = uVar21;
    *(undefined1 *)(lVar14 + uVar21) = 0;
    if (local_30 == (long *)0x0) goto LAB_003e80f0;
LAB_003e7d80:
    if ((ulong)local_30[3] <= (ulong)local_30[2]) {
      (**(code **)(*local_30 + 0x50))();
      local_28 = CONCAT44(local_28._4_4_,0xffffffff);
      if (local_30 != (long *)0x0) {
        pbVar20 = (byte *)local_30[2];
        if (pbVar20 < (byte *)local_30[3]) goto LAB_003e7db0;
        goto LAB_003e8440;
      }
      goto LAB_003e80f0;
    }
    local_30[2] = local_30[2] + 1;
    local_28 = CONCAT44(local_28._4_4_,0xffffffff);
    pbVar20 = (byte *)local_30[2];
    if (pbVar20 < (byte *)local_30[3]) {
LAB_003e7db0:
      uVar18 = (uint)*pbVar20;
    }
    else {
LAB_003e8440:
      uVar18 = (**(code **)(*local_30 + 0x48))();
      if (uVar18 == 0xffffffff) {
        local_30 = (long *)0x0;
        goto LAB_003e80f0;
      }
    }
    iVar10 = 0;
    local_28 = CONCAT44(local_28._4_4_,uVar18);
    if (local_40 == (long *)0x0) goto LAB_003e8130;
                    /* try { // try from 003e7dc8 to 004e7ec7 has its CatchHandler @ 003e946c */
  }
  iVar11 = 0;
  if ((int)local_38 == -1) {
                    /* try { // try from 003e8114 to 004e813b has its CatchHandler @ 003e9464 */
    if ((byte *)local_40[2] < (byte *)local_40[3]) {
      uVar18 = (uint)*(byte *)local_40[2];
    }
    else {
      uVar18 = (**(code **)(*local_40 + 0x48))();
      if (uVar18 == 0xffffffff) {
        local_40 = (long *)0x0;
        iVar11 = 1;
        goto LAB_003e7dd4;
      }
    }
    local_38 = CONCAT44(local_38._4_4_,uVar18);
    if (iVar10 == 0) goto LAB_003e7ddc;
  }
  else {
LAB_003e7dd4:
    if (iVar11 == iVar10) goto LAB_003e7ddc;
  }
LAB_003e8130:
  uVar12 = FUN_003e3e48(&local_30);
  uVar12 = uVar12 & 0xff;
  goto LAB_003e7d10;
LAB_003e871c:
                    /* try { // try from 003e871c to 004e88f7 has its CatchHandler @ 003e9464 */
  iVar9 = iVar9 + 1;
  bVar5 = true;
  cVar6 = *(char *)(lVar13 + 0x20);
  bVar1 = true;
  uVar12 = (uint)bVar8;
LAB_003e7ce8:
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar6 != '\0') {
LAB_003e8510:
    FUN_00410ed8(&local_8,0x20);
  }
                    /* try { // try from 003e7cf8 to 004e7cfb has its CatchHandler @ 003e94bc */
  cVar6 = *(char *)(lVar13 + 0x88);
  if (cVar6 == '\0') {
    if (bVar1) {
LAB_003e86e4:
      puVar15 = local_8;
      if (*(long *)(local_8 + -0x18) != 0) {
LAB_003e86f0:
        FUN_004116e0(&local_8,iVar9);
        goto LAB_003e7df8;
      }
      goto LAB_003e7e1c;
    }
    bVar4 = false;
    bVar1 = false;
LAB_003e7d10:
    if ((uVar12 - 0x30 & 0xff) < 10) {
      lVar22 = *param_8;
      lVar14 = *(long *)(lVar22 + -0x18);
      uVar21 = lVar14 + 1;
      if ((*(ulong *)(lVar22 + -0x10) < uVar21) || (0 < *(int *)(lVar22 + -8))) {
        FUN_00410ed8(param_8,uVar21);
        lVar22 = *param_8;
        lVar14 = *(long *)(lVar22 + -0x18);
      }
      *(char *)(lVar22 + lVar14) = (char)(uVar12 - 0x30) + '0';
      bVar5 = true;
      lVar14 = *param_8;
      if ((undefined *)(lVar14 + -0x18) == PTR_DAT_00501f30) goto LAB_003e7d78;
      goto LAB_003e80dc;
    }
    if ((*(byte *)(lVar13 + 0x48) == uVar12) && (bVar1 < (bVar4 ^ 1U))) {
      FUN_004116e0(param_8,0x2e);
      bVar1 = true;
      goto LAB_003e7d78;
    }
                    /* try { // try from 003e7f9c to 004e7f9f has its CatchHandler @ 003e9324 */
                    /* try { // try from 003e7fa4 to 004e7fa7 has its CatchHandler @ 003e931c */
    if (((*(byte *)(lVar13 + 0x80) != uVar12) && (*(byte *)(lVar13 + 0x86) != uVar12)) ||
       (bVar5 <= bVar4)) goto LAB_003e7ddc;
    lVar14 = *param_8;
    lVar22 = *(long *)(lVar14 + -0x18);
    uVar21 = lVar22 + 1;
    if ((*(ulong *)(lVar14 + -0x10) < uVar21) || (0 < *(int *)(lVar14 + -8))) {
      FUN_00410ed8(param_8,uVar21);
      lVar14 = *param_8;
      lVar22 = *(long *)(lVar14 + -0x18);
    }
    *(undefined1 *)(lVar14 + lVar22) = 0x65;
    lVar14 = *param_8;
    if ((undefined *)(lVar14 + -0x18) != PTR_DAT_00501f30) {
      *(undefined4 *)(lVar14 + -8) = 0;
      *(ulong *)(lVar14 + -0x18) = uVar21;
      *(undefined1 *)(lVar14 + uVar21) = 0;
    }
    if (local_30 != (long *)0x0) {
                    /* try { // try from 003e8020 to 004e8023 has its CatchHandler @ 003e9474 */
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
      }
      else {
        (**(code **)(*local_30 + 0x50))();
      }
      local_28 = CONCAT44(local_28._4_4_,0xffffffff);
    }
    iVar10 = FUN_003e3e48(&local_30);
    iVar11 = FUN_003e3e48(&local_40);
    if ((iVar11 == -1) != (iVar10 == -1)) {
      uVar12 = FUN_003e3e48(&local_30);
      uVar12 = uVar12 & 0xff;
      if (*(byte *)(lVar13 + 0x6f) != uVar12) goto code_r0x003e8074;
      uVar23 = 0x2b;
      goto LAB_003e8088;
    }
LAB_003e86a0:
    if (*(long *)(local_8 + -0x18) != 0) {
LAB_003e7df8:
      puVar15 = local_8;
      cVar6 = FUN_003ee0cc(*(undefined8 *)(lVar13 + 0x10),*(undefined8 *)(lVar13 + 0x18),&local_8);
      if (cVar6 == '\0') {
        *param_7 = 4;
      }
      goto LAB_003e7e1c;
    }
    puVar15 = local_8 + -0x18;
    if (puVar15 == PTR_DAT_00501f30) goto LAB_003e7e30;
  }
  else {
    if (bVar1) goto LAB_003e86e4;
    cVar7 = *(char *)(lVar13 + 0x20);
    bVar4 = false;
    bVar1 = false;
LAB_003e7e70:
    if (cVar7 == '\0') goto LAB_003e7e80;
    while (*(byte *)(lVar13 + 0x49) != uVar12) {
LAB_003e7e80:
      if (*(byte *)(lVar13 + 0x48) == uVar12) {
        if ((bVar4 ^ 1U) <= bVar1) goto LAB_003e86a0;
                    /* try { // try from 003e8174 to 004e8177 has its CatchHandler @ 003e937c */
        if (*(long *)(local_8 + -0x18) != 0) {
                    /* try { // try from 003e817c to 004e8373 has its CatchHandler @ 003e9464 */
          FUN_004116e0(&local_8,iVar9);
        }
        lVar14 = *param_8;
        lVar22 = *(long *)(lVar14 + -0x18);
        uVar21 = lVar22 + 1;
        if ((*(ulong *)(lVar14 + -0x10) < uVar21) || (0 < *(int *)(lVar14 + -8))) {
          FUN_00410ed8(param_8,uVar21);
          lVar14 = *param_8;
          lVar22 = *(long *)(lVar14 + -0x18);
        }
        *(undefined1 *)(lVar14 + lVar22) = 0x2e;
        bVar1 = true;
        lVar14 = *param_8;
        if ((undefined *)(lVar14 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar14 + -8) = 0;
          *(ulong *)(lVar14 + -0x18) = uVar21;
          *(undefined1 *)(lVar14 + uVar21) = 0;
        }
        goto joined_r0x003e81ec;
      }
      pvVar16 = memchr((void *)(lVar13 + 0x72),uVar12,10);
      if (pvVar16 != (void *)0x0) {
        lVar22 = *param_8;
        lVar14 = *(long *)(lVar22 + -0x18);
        uVar21 = lVar14 + 1;
        if ((*(ulong *)(lVar22 + -0x10) < uVar21) || (0 < *(int *)(lVar22 + -8))) {
          FUN_00410ed8(param_8,uVar21);
          lVar22 = *param_8;
          lVar14 = *(long *)(lVar22 + -0x18);
        }
        *(char *)(lVar22 + lVar14) = ((char)pvVar16 - (char)(void *)(lVar13 + 0x72)) + '0';
        lVar14 = *param_8;
        if ((undefined *)(lVar14 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar14 + -8) = 0;
          *(ulong *)(lVar14 + -0x18) = uVar21;
          *(undefined1 *)(lVar14 + uVar21) = 0;
        }
        iVar9 = iVar9 + 1;
        bVar5 = true;
        goto joined_r0x003e81ec;
      }
      if (((*(byte *)(lVar13 + 0x80) != uVar12) && (*(byte *)(lVar13 + 0x86) != uVar12)) ||
         (bVar5 <= bVar4)) goto LAB_003e7ddc;
      if ((!bVar1) && (*(long *)(local_8 + -0x18) != 0)) {
        FUN_004116e0(&local_8,iVar9);
      }
      lVar14 = *param_8;
      lVar22 = *(long *)(lVar14 + -0x18);
      uVar21 = lVar22 + 1;
      if ((*(ulong *)(lVar14 + -0x10) < uVar21) || (0 < *(int *)(lVar14 + -8))) {
        FUN_00410ed8(param_8,uVar21);
        lVar14 = *param_8;
        lVar22 = *(long *)(lVar14 + -0x18);
      }
      *(undefined1 *)(lVar14 + lVar22) = 0x65;
      lVar14 = *param_8;
      if ((undefined *)(lVar14 + -0x18) != PTR_DAT_00501f30) {
        *(undefined4 *)(lVar14 + -8) = 0;
        *(ulong *)(lVar14 + -0x18) = uVar21;
        *(undefined1 *)(lVar14 + uVar21) = 0;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          FUN_003dcae0();
        }
        local_28 = CONCAT44(local_28._4_4_,0xffffffff);
      }
      iVar10 = FUN_003e3e48(&local_30);
      iVar11 = FUN_003e3e48(&local_40);
      if ((iVar11 == -1) == (iVar10 == -1)) goto LAB_003e86a0;
      uVar12 = FUN_003e3e48(&local_30);
      uVar12 = uVar12 & 0xff;
      bVar4 = *(byte *)(lVar13 + 0x6f) != uVar12;
      if ((bVar4) && (*(byte *)(lVar13 + 0x6e) != uVar12)) {
        cVar7 = *(char *)(lVar13 + 0x20);
        bVar4 = true;
        goto LAB_003e7e70;
      }
      cVar7 = *(char *)(lVar13 + 0x20);
      if ((cVar7 == '\0') || (*(byte *)(lVar13 + 0x49) != uVar12)) {
                    /* try { // try from 003e839c to 004e839f has its CatchHandler @ 003e938c */
        if (*(byte *)(lVar13 + 0x48) == uVar12) {
          bVar4 = true;
          goto LAB_003e7e70;
        }
        uVar19 = 0x2d;
        if (!bVar4) {
          uVar19 = 0x2b;
        }
        FUN_004116e0(param_8,uVar19);
        bVar4 = true;
        goto joined_r0x003e81ec;
      }
      bVar4 = true;
    }
    if ((bVar4 ^ 1U) <= bVar1) goto LAB_003e86a0;
    if (iVar9 != 0) {
      FUN_004116e0(&local_8,iVar9);
      bVar1 = false;
      iVar9 = 0;
joined_r0x003e81ec:
      if (local_30 == (long *)0x0) {
LAB_003e81f0:
        cVar7 = cVar6;
        if (local_40 == (long *)0x0) goto LAB_003e7ddc;
LAB_003e7f54:
                    /* try { // try from 003e7f58 to 004e7f5b has its CatchHandler @ 003e931c */
        cVar17 = '\0';
        if ((int)local_38 == -1) {
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar18 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar18 = (**(code **)(*local_40 + 0x48))();
            if (uVar18 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar17 = cVar6;
              goto LAB_003e7f64;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar18);
          cVar17 = '\0';
        }
LAB_003e7f64:
        if (cVar17 == cVar7) goto LAB_003e7ddc;
      }
      else {
        if ((ulong)local_30[3] <= (ulong)local_30[2]) {
          (**(code **)(*local_30 + 0x50))();
          local_28 = CONCAT44(local_28._4_4_,0xffffffff);
          if (local_30 != (long *)0x0) {
            pbVar20 = (byte *)local_30[2];
            if (pbVar20 < (byte *)local_30[3]) goto LAB_003e7f40;
            goto LAB_003e83f4;
          }
          goto LAB_003e81f0;
        }
        local_30[2] = local_30[2] + 1;
        local_28._4_4_ = (undefined4)((ulong)local_28 >> 0x20);
        local_28 = CONCAT44(local_28._4_4_,0xffffffff);
        pbVar20 = (byte *)local_30[2];
        if (pbVar20 < (byte *)local_30[3]) {
LAB_003e7f40:
          uVar18 = (uint)*pbVar20;
        }
        else {
LAB_003e83f4:
          uVar18 = (**(code **)(*local_30 + 0x48))();
          if (uVar18 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003e81f0;
          }
        }
        local_28 = CONCAT44(local_28._4_4_,uVar18);
        cVar7 = '\0';
        if (local_40 != (long *)0x0) goto LAB_003e7f54;
      }
      if (local_30 == (long *)0x0) {
LAB_003e8478:
        uVar12 = 0xff;
        cVar7 = *(char *)(lVar13 + 0x20);
      }
      else if ((uint)local_28 == 0xffffffff) {
        if ((byte *)local_30[2] < (byte *)local_30[3]) {
          uVar12 = (uint)*(byte *)local_30[2];
        }
        else {
          uVar12 = (**(code **)(*local_30 + 0x48))();
          if (uVar12 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003e8478;
          }
        }
        local_28 = CONCAT44(local_28._4_4_,uVar12);
        uVar12 = uVar12 & 0xff;
        cVar7 = *(char *)(lVar13 + 0x20);
      }
      else {
        uVar12 = (uint)local_28 & 0xff;
        cVar7 = *(char *)(lVar13 + 0x20);
      }
      goto LAB_003e7e70;
    }
    FUN_00412b08(param_8,0,*(undefined8 *)(*param_8 + -0x18),0);
    bVar1 = false;
LAB_003e7ddc:
    puVar15 = local_8;
    if (*(long *)(local_8 + -0x18) != 0) {
      if ((bVar4 ^ 1U) <= bVar1) goto LAB_003e7df8;
      goto LAB_003e86f0;
    }
LAB_003e7e1c:
    puVar15 = puVar15 + -0x18;
    if (puVar15 == PTR_DAT_00501f30) goto LAB_003e7e30;
  }
  uVar3 = local_28;
  plVar2 = local_30;
  FUN_003dca9c(puVar15,auStack_10);
  local_30 = plVar2;
  local_28 = uVar3;
LAB_003e7e30:
  auVar24._8_8_ = local_28;
  auVar24._0_8_ = local_30;
  return auVar24;
}


==================================================================

### FUNC 003e88e4 (544 bytes) name=FUN_003e88e4

undefined1  [16]
FUN_003e88e4(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,float *param_8)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  char *pcVar8;
  long *plVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  char *local_10;
  int *local_8;
  
  local_10 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_10,0x20);
  auVar11 = FUN_003e7c58(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar8 = local_10;
  plVar9 = auVar11._0_8_;
                    /* try { // try from 003e8968 to 004e896b has its CatchHandler @ 003e931c */
  uVar10 = auVar11._8_8_ & 0xffffffff;
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<float>(pcVar8,param_8,param_7,&local_8);
  if (plVar9 == (long *)0x0) {
LAB_003e8aa0:
                    /* try { // try from 003e8aa0 to 004e8aa3 has its CatchHandler @ 003e931c */
    plVar9 = (long *)0x0;
    iVar4 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e89c0;
    goto LAB_003e8a44;
  }
  if (auVar11._8_4_ == -1) {
    if ((byte *)plVar9[2] < (byte *)plVar9[3]) {
      uVar10 = (ulong)*(byte *)plVar9[2];
    }
    else {
      uVar6 = (**(code **)(*plVar9 + 0x48))(plVar9);
      if (uVar6 == 0xffffffff) goto LAB_003e8aa0;
      uVar10 = (ulong)uVar6;
    }
  }
  iVar4 = 0;
  if (param_4 == (long *)0x0) {
LAB_003e89d4:
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
                    /* try { // try from 003e89dc to 004e89df has its CatchHandler @ 003e946c */
    pcVar8 = local_10 + -0x18;
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e89ec;
  }
  else {
LAB_003e89c0:
    iVar3 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[3] <= (ulong)param_4[2]) {
                    /* try { // try from 003e8ab8 to 004e8abb has its CatchHandler @ 003e94b4 */
        iVar5 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar3 = 1;
        if (iVar5 == -1) goto LAB_003e89cc;
      }
      if (iVar4 != 0) goto LAB_003e89d4;
    }
    else {
LAB_003e89cc:
      if (iVar4 != iVar3) goto LAB_003e89d4;
    }
LAB_003e8a44:
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar8 = local_10 + -0x18;
                    /* try { // try from 003e8a60 to 004e8a63 has its CatchHandler @ 003e949c */
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e89ec;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar4 + -1;
  }
  else {
    piVar7 = (int *)(local_10 + -8);
    do {
      iVar4 = *piVar7;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar2) {
        *piVar7 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar4 < 1) {
    operator_delete(pcVar8);
  }
LAB_003e89ec:
  auVar11._8_8_ = uVar10;
  auVar11._0_8_ = plVar9;
  return auVar11;
}


==================================================================

### FUNC 003e8b2c (544 bytes) name=FUN_003e8b2c

undefined1  [16]
FUN_003e8b2c(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,double *param_8)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  char *pcVar8;
  long *plVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  char *local_10;
  int *local_8;
  
  local_10 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_10,0x20);
                    /* try { // try from 003e8ba8 to 004e8bab has its CatchHandler @ 003e7490 */
  auVar11 = FUN_003e7c58(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar8 = local_10;
  plVar9 = auVar11._0_8_;
                    /* try { // try from 003e8bb8 to 004e8bbb has its CatchHandler @ 003e94bc */
                    /* try { // try from 003e8bc4 to 004e8bc7 has its CatchHandler @ 003e946c */
  uVar10 = auVar11._8_8_ & 0xffffffff;
                    /* try { // try from 003e8bd0 to 004e8bd3 has its CatchHandler @ 003e931c */
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<double>(pcVar8,param_8,param_7,&local_8);
  if (plVar9 == (long *)0x0) {
LAB_003e8ce8:
    plVar9 = (long *)0x0;
    iVar4 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e8c08;
    goto LAB_003e8c8c;
  }
  if (auVar11._8_4_ == -1) {
    if ((byte *)plVar9[2] < (byte *)plVar9[3]) {
      uVar10 = (ulong)*(byte *)plVar9[2];
    }
    else {
      uVar6 = (**(code **)(*plVar9 + 0x48))(plVar9);
      if (uVar6 == 0xffffffff) goto LAB_003e8ce8;
      uVar10 = (ulong)uVar6;
    }
  }
  iVar4 = 0;
  if (param_4 == (long *)0x0) {
LAB_003e8c1c:
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
    pcVar8 = local_10 + -0x18;
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e8c34;
  }
  else {
LAB_003e8c08:
    iVar3 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[3] <= (ulong)param_4[2]) {
        iVar5 = (**(code **)(*param_4 + 0x48))(param_4);
                    /* try { // try from 003e8d08 to 004e8d0b has its CatchHandler @ 003e93e4 */
        iVar3 = 1;
                    /* try { // try from 003e8d10 to 004e8d47 has its CatchHandler @ 003e94bc */
        if (iVar5 == -1) goto LAB_003e8c14;
      }
      if (iVar4 != 0) goto LAB_003e8c1c;
    }
    else {
LAB_003e8c14:
      if (iVar4 != iVar3) goto LAB_003e8c1c;
    }
LAB_003e8c8c:
                    /* try { // try from 003e8c90 to 004e8c93 has its CatchHandler @ 003e9440 */
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
                    /* try { // try from 003e8c9c to 004e8c9f has its CatchHandler @ 003e94bc */
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar8 = local_10 + -0x18;
                    /* try { // try from 003e8cac to 004e8caf has its CatchHandler @ 003e93f4 */
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e8c34;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar4 + -1;
  }
  else {
    piVar7 = (int *)(local_10 + -8);
    do {
      iVar4 = *piVar7;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar2) {
        *piVar7 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
                    /* try { // try from 003e8ccc to 004e8ccf has its CatchHandler @ 003e94bc */
    } while (cVar1 != '\0');
  }
  if (iVar4 < 1) {
    operator_delete(pcVar8);
  }
LAB_003e8c34:
  auVar11._8_8_ = uVar10;
  auVar11._0_8_ = plVar9;
  return auVar11;
}


==================================================================

### FUNC 003e8d74 (544 bytes) name=FUN_003e8d74

undefined1  [16]
FUN_003e8d74(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,longdouble *param_8)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  char *pcVar8;
  long *plVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  char *local_10;
  int *local_8;
  
                    /* try { // try from 003e8d74 to 004e8d77 has its CatchHandler @ 003e93d4 */
                    /* try { // try from 003e8d7c to 004e8d7f has its CatchHandler @ 003e94bc */
                    /* try { // try from 003e8d8c to 004e8d8f has its CatchHandler @ 003e93b0 */
  local_10 = PTR_DAT_00501f30 + 0x18;
                    /* try { // try from 003e8d9c to 004e8d9f has its CatchHandler @ 003e92c0 */
                    /* try { // try from 003e8db8 to 004e8dbb has its CatchHandler @ 003e946c */
  FUN_00410ed8(&local_10,0x20);
  auVar11 = FUN_003e7c58(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar8 = local_10;
  plVar9 = auVar11._0_8_;
                    /* try { // try from 003e8dfc to 004e8dff has its CatchHandler @ 003e92a4 */
                    /* try { // try from 003e8e04 to 004e8e07 has its CatchHandler @ 003e946c */
  uVar10 = auVar11._8_8_ & 0xffffffff;
                    /* try { // try from 003e8e18 to 004e8e1b has its CatchHandler @ 003e9334 */
  local_8 = (int *)FUN_003ed450();
                    /* try { // try from 003e8e28 to 004e8e2b has its CatchHandler @ 003e9418 */
                    /* try { // try from 003e8e34 to 004e8e37 has its CatchHandler @ 003e94bc */
  std::__convert_to_v<long_double>(pcVar8,param_8,param_7,&local_8);
  if (plVar9 == (long *)0x0) {
LAB_003e8f30:
    plVar9 = (long *)0x0;
    iVar4 = 1;
    if (param_4 != (long *)0x0) goto LAB_003e8e50;
    goto LAB_003e8ed4;
  }
                    /* try { // try from 003e8e40 to 004e8e43 has its CatchHandler @ 003e93f4 */
  if (auVar11._8_4_ == -1) {
    if ((byte *)plVar9[2] < (byte *)plVar9[3]) {
      uVar10 = (ulong)*(byte *)plVar9[2];
    }
    else {
      uVar6 = (**(code **)(*plVar9 + 0x48))(plVar9);
      if (uVar6 == 0xffffffff) goto LAB_003e8f30;
      uVar10 = (ulong)uVar6;
    }
  }
  iVar4 = 0;
  if (param_4 == (long *)0x0) {
LAB_003e8e64:
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
    pcVar8 = local_10 + -0x18;
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e8e7c;
  }
  else {
LAB_003e8e50:
    iVar3 = 0;
    if ((int)param_5 == -1) {
      if ((ulong)param_4[3] <= (ulong)param_4[2]) {
        iVar5 = (**(code **)(*param_4 + 0x48))(param_4);
        iVar3 = 1;
        if (iVar5 == -1) goto LAB_003e8e5c;
      }
      if (iVar4 != 0) goto LAB_003e8e64;
    }
    else {
LAB_003e8e5c:
      if (iVar4 != iVar3) goto LAB_003e8e64;
    }
LAB_003e8ed4:
    uVar10 = param_3 & 0xffffffff00000000 | uVar10;
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar8 = local_10 + -0x18;
    if (pcVar8 == PTR_DAT_00501f30) goto LAB_003e8e7c;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar4 + -1;
  }
  else {
                    /* try { // try from 003e8f04 to 004e8f07 has its CatchHandler @ 003e938c */
    piVar7 = (int *)(local_10 + -8);
    do {
      iVar4 = *piVar7;
                    /* try { // try from 003e8f10 to 004e8f13 has its CatchHandler @ 003e9464 */
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar2) {
        *piVar7 = iVar4 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
                    /* try { // try from 003e8f1c to 004e8f1f has its CatchHandler @ 003e93b0 */
  if (iVar4 < 1) {
                    /* try { // try from 003e8f28 to 004e8f2b has its CatchHandler @ 003e9358 */
    operator_delete(pcVar8);
  }
LAB_003e8e7c:
  auVar11._8_8_ = uVar10;
  auVar11._0_8_ = plVar9;
  return auVar11;
}


==================================================================

### FUNC 003e8fbc (2416 bytes) name=FUN_003e8fbc

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003e8fbc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,ulong *param_8)

{
  ulong uVar1;
  ulong uVar2;
  bool bVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  bool bVar6;
  char cVar7;
  bool bVar8;
  bool bVar9;
  byte bVar10;
  char cVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  long lVar17;
  void *pvVar18;
  char cVar19;
  byte *pbVar20;
  ulong uVar21;
  long lVar22;
  uint uVar23;
  ulong uVar24;
  ulong uVar25;
  ulong uVar26;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar17 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar16 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar16 == 0x40) {
    iVar15 = 8;
  }
  else {
    iVar15 = 0x10;
    if (uVar16 != 8) {
      iVar15 = 10;
    }
  }
  iVar12 = FUN_003e3e48(&local_30);
  iVar13 = FUN_003e3e48(&local_40);
  if ((iVar12 == -1) == (iVar13 == -1)) {
    uVar23 = 0;
    bVar9 = false;
LAB_003e96a8:
    cVar11 = *(char *)(lVar17 + 0x20);
    bVar3 = true;
    iVar12 = 0;
    bVar8 = false;
LAB_003e9424:
    if (iVar15 == 0x10) goto LAB_003e942c;
LAB_003e91d0:
                    /* try { // try from 003e91d0 to 004e91d3 has its CatchHandler @ 003e938c */
                    /* try { // try from 003e91dc to 004e91df has its CatchHandler @ 003e9464 */
    uVar25 = (ulong)iVar15;
                    /* try { // try from 003e91e8 to 004e91fb has its CatchHandler @ 003e94bc */
  }
  else {
    bVar10 = FUN_003e3e48(&local_30);
    uVar23 = (uint)bVar10;
    bVar9 = *(byte *)(lVar17 + 0x6e) == bVar10;
    if ((bVar9) || (*(byte *)(lVar17 + 0x6f) == bVar10)) {
      cVar11 = *(char *)(lVar17 + 0x20);
      if ((cVar11 == '\0') || (*(byte *)(lVar17 + 0x49) != bVar10)) {
        if (*(byte *)(lVar17 + 0x48) != bVar10) {
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
                    /* try { // try from 003e90a8 to 004e90ab has its CatchHandler @ 003e92c0 */
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
            }
            local_28 = 0xffffffff;
          }
                    /* try { // try from 003e90b4 to 004e919f has its CatchHandler @ 003e9464 */
          iVar12 = FUN_003e3e48(&local_30);
          iVar13 = FUN_003e3e48(&local_40);
          if ((iVar12 == -1) == (iVar13 == -1)) goto LAB_003e96a8;
          uVar23 = FUN_003e3e48(&local_30);
          uVar23 = uVar23 & 0xff;
          cVar11 = *(char *)(lVar17 + 0x20);
        }
      }
      else {
        cVar11 = '\x01';
      }
    }
    else {
      cVar11 = *(char *)(lVar17 + 0x20);
    }
    iVar12 = 0;
    bVar8 = false;
    do {
      if (((cVar11 != '\0') && (*(byte *)(lVar17 + 0x49) == uVar23)) ||
         (*(byte *)(lVar17 + 0x48) == uVar23)) break;
      if (*(byte *)(lVar17 + 0x72) == uVar23) {
                    /* catch() { ... } // from try @ 003e8114 with catch @ 003e9464
                       catch() { ... } // from try @ 003e817c with catch @ 003e9464
                       catch() { ... } // from try @ 003e8504 with catch @ 003e9464
                       catch() { ... } // from try @ 003e871c with catch @ 003e9464
                       catch() { ... } // from try @ 003e8f10 with catch @ 003e9464
                       catch() { ... } // from try @ 003e90b4 with catch @ 003e9464
                       catch() { ... } // from try @ 003e91c4 with catch @ 003e9464
                       catch() { ... } // from try @ 003e91dc with catch @ 003e9464 */
                    /* catch() { ... } // from try @ 003e7dc8 with catch @ 003e946c
                       catch() { ... } // from try @ 003e89dc with catch @ 003e946c
                       catch() { ... } // from try @ 003e8bc4 with catch @ 003e946c
                       catch() { ... } // from try @ 003e8db8 with catch @ 003e946c
                       catch() { ... } // from try @ 003e8e04 with catch @ 003e946c */
        if ((iVar15 == 10) < bVar8) goto LAB_003e912c;
                    /* catch() { ... } // from try @ 003e8020 with catch @ 003e9474 */
        iVar12 = iVar12 + 1;
        if ((iVar15 == 8) || (bVar8 = true, uVar16 == 0)) {
          iVar12 = 0;
          bVar8 = true;
          iVar15 = 8;
        }
      }
      else {
        if (!bVar8) break;
LAB_003e912c:
        if ((*(byte *)(lVar17 + 0x70) != uVar23) && (*(byte *)(lVar17 + 0x71) != uVar23)) {
                    /* catch() { ... } // from try @ 003e8a60 with catch @ 003e949c
                       catch() { ... } // from try @ 003e8aac with catch @ 003e949c */
          bVar3 = false;
          bVar8 = true;
          goto LAB_003e9424;
        }
        if ((iVar15 != 0x10) && (uVar16 != 0)) {
          bVar3 = false;
          bVar8 = true;
          goto LAB_003e91d0;
        }
        iVar12 = 0;
        bVar8 = false;
        iVar15 = 0x10;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = 0xffffffff;
      }
      iVar13 = FUN_003e3e48(&local_30);
      iVar14 = FUN_003e3e48(&local_40);
      if ((iVar13 == -1) == (iVar14 == -1)) {
        cVar11 = *(char *)(lVar17 + 0x20);
        bVar3 = true;
        goto LAB_003e9424;
      }
                    /* try { // try from 003e91ac to 004e91af has its CatchHandler @ 003e94bc */
      uVar23 = FUN_003e3e48(&local_30);
      uVar23 = uVar23 & 0xff;
                    /* try { // try from 003e91b8 to 004e91bb has its CatchHandler @ 003e9334 */
      cVar11 = *(char *)(lVar17 + 0x20);
    } while (bVar8);
                    /* try { // try from 003e91c4 to 004e91c7 has its CatchHandler @ 003e9464 */
    bVar3 = false;
    if (iVar15 != 0x10) goto LAB_003e91d0;
LAB_003e942c:
    uVar25 = 0x16;
                    /* catch() { ... } // from try @ 003e767c with catch @ 003e9440
                       catch() { ... } // from try @ 003e8c90 with catch @ 003e9440 */
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar11 != '\0') {
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
  }
  local_58 = &local_8;
  uVar26 = (ulong)iVar15;
  cVar11 = *(char *)(lVar17 + 0x88);
                    /* try { // try from 003e9204 to 004e9207 has its CatchHandler @ 003e9418 */
  uVar1 = 0x7fffffffffffffff;
  if (bVar9) {
    uVar1 = 0x8000000000000000;
  }
  uVar2 = 0;
  if (uVar26 != 0) {
    uVar2 = uVar1 / uVar26;
  }
  if (cVar11 == '\0') {
    if (bVar3) {
LAB_003e9914:
      uVar24 = 0;
      bVar6 = false;
      bVar4 = false;
      goto LAB_003e9398;
    }
    uVar24 = 0;
    bVar6 = false;
LAB_003e923c:
    if (10 < uVar25) goto LAB_003e92e8;
LAB_003e9244:
                    /* catch() { ... } // from try @ 003e7af0 with catch @ 003e9254 */
    if ((0x2f < uVar23) && (uVar23 < (int)uVar25 + 0x30U)) {
      uVar16 = uVar23 - 0x30;
LAB_003e925c:
      if (uVar24 <= uVar2) goto LAB_003e9324;
LAB_003e9264:
      bVar6 = true;
      if (local_30 == (long *)0x0) goto LAB_003e9350;
LAB_003e9270:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) {
LAB_003e9734:
          local_28 = 0xffffffff;
          uVar16 = (**(code **)(*local_30 + 0x48))();
          if (uVar16 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003e9350;
          }
          goto LAB_003e92a0;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003e9350;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) goto LAB_003e9734;
      }
      uVar16 = (uint)*pbVar20;
LAB_003e92a0:
                    /* try { // try from 003e92a0 to 004e92a3 has its CatchHandler @ 003e7490 */
                    /* catch() { ... } // from try @ 003e8dfc with catch @ 003e92a4 */
      iVar15 = 0;
      local_28 = uVar16;
      if (local_40 == (long *)0x0) goto LAB_003e92c8;
      iVar13 = 0;
                    /* try { // try from 003e92bc to 004e92bf has its CatchHandler @ 003e7490 */
      if ((int)local_38 == -1) goto LAB_003e936c;
LAB_003e92c0:
                    /* catch() { ... } // from try @ 003e8d9c with catch @ 003e92c0
                       catch() { ... } // from try @ 003e90a8 with catch @ 003e92c0 */
      if (iVar15 != iVar13) {
LAB_003e92c8:
        do {
          if (local_30 == (long *)0x0) {
LAB_003e976c:
            uVar23 = 0xff;
            goto LAB_003e923c;
          }
          if (local_28 == 0xffffffff) {
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar16 = (uint)*(byte *)local_30[2];
            }
            else {
              uVar16 = (**(code **)(*local_30 + 0x48))();
              if (uVar16 == 0xffffffff) {
                    /* try { // try from 003e9768 to 004e976b has its CatchHandler @ 003ea0cc */
                local_30 = (long *)0x0;
                goto LAB_003e976c;
              }
            }
            uVar23 = uVar16 & 0xff;
            local_28 = uVar16;
            goto LAB_003e923c;
          }
          uVar23 = local_28 & 0xff;
          if (uVar25 < 0xb) goto LAB_003e9244;
LAB_003e92e8:
          uVar16 = uVar23 - 0x30;
          if ((uVar16 & 0xff) < 10) goto LAB_003e925c;
          if ((uVar23 - 0x61 & 0xff) < 6) {
            uVar16 = uVar23 - 0x57;
            goto LAB_003e925c;
          }
          if (5 < (uVar23 - 0x41 & 0xff)) goto LAB_003e9774;
                    /* catch() { ... } // from try @ 003e7f58 with catch @ 003e931c
                       catch() { ... } // from try @ 003e7fa4 with catch @ 003e931c
                       catch() { ... } // from try @ 003e8094 with catch @ 003e931c
                       catch() { ... } // from try @ 003e8968 with catch @ 003e931c
                       catch() { ... } // from try @ 003e8aa0 with catch @ 003e931c
                       catch() { ... } // from try @ 003e8bd0 with catch @ 003e931c */
          uVar16 = uVar23 - 0x37;
          if (uVar2 < uVar24) goto LAB_003e9264;
LAB_003e9324:
                    /* catch() { ... } // from try @ 003e7f9c with catch @ 003e9324 */
          uVar21 = uVar24 * uVar26;
                    /* catch() { ... } // from try @ 003e7b90 with catch @ 003e9334
                       catch() { ... } // from try @ 003e8e18 with catch @ 003e9334
                       catch() { ... } // from try @ 003e91b8 with catch @ 003e9334 */
          iVar12 = iVar12 + 1;
          uVar24 = (long)(int)uVar16 + uVar21;
          bVar6 = (bool)(bVar6 | uVar1 - (long)(int)uVar16 < uVar21);
          if (local_30 != (long *)0x0) goto LAB_003e9270;
LAB_003e9350:
          if (local_40 == (long *)0x0) break;
                    /* catch() { ... } // from try @ 003e8540 with catch @ 003e9358
                       catch() { ... } // from try @ 003e8f28 with catch @ 003e9358 */
          iVar15 = 1;
          iVar13 = 0;
          if ((int)local_38 != -1) goto LAB_003e92c0;
LAB_003e936c:
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
                    /* catch() { ... } // from try @ 003e8174 with catch @ 003e937c */
            uVar16 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar16 = (**(code **)(*local_40 + 0x48))();
            if (uVar16 == 0xffffffff) goto code_r0x003e9880;
          }
          local_38 = CONCAT44(local_38._4_4_,uVar16);
                    /* catch() { ... } // from try @ 003e839c with catch @ 003e938c
                       catch() { ... } // from try @ 003e8f04 with catch @ 003e938c
                       catch() { ... } // from try @ 003e91d0 with catch @ 003e938c */
          if (iVar15 == 0) break;
        } while( true );
      }
      goto LAB_003e9390;
    }
  }
  else {
    if (bVar3) goto LAB_003e9914;
                    /* catch() { ... } // from try @ 003e77f4 with catch @ 003e94b4
                       catch() { ... } // from try @ 003e8ab8 with catch @ 003e94b4 */
    uVar24 = 0;
    bVar6 = false;
LAB_003e94bc:
                    /* catch() { ... } // from try @ 003e75b4 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e7720 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e78c8 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e7af8 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e7cf8 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8bb8 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8c9c with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8ccc with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8d10 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8d7c with catch @ 003e94bc
                       catch() { ... } // from try @ 003e8e34 with catch @ 003e94bc
                       catch() { ... } // from try @ 003e91ac with catch @ 003e94bc
                       catch() { ... } // from try @ 003e91e8 with catch @ 003e94bc */
    if ((*(char *)(lVar17 + 0x20) != '\0') && (*(byte *)(lVar17 + 0x49) == uVar23))
    goto LAB_003e95bc;
LAB_003e94d0:
                    /* catch() { ... } // from try @ 003e9d40 with catch @ 003e94e0
                       catch() { ... } // from try @ 003e9f90 with catch @ 003e94e0
                       catch() { ... } // from try @ 003e9fd4 with catch @ 003e94e0
                       catch() { ... } // from try @ 003ea10c with catch @ 003e94e0
                       catch() { ... } // from try @ 003ea120 with catch @ 003e94e0 */
    if ((*(byte *)(lVar17 + 0x48) != uVar23) &&
       (pvVar18 = memchr((void *)(lVar17 + 0x72),uVar23,uVar25), pvVar18 != (void *)0x0)) {
      iVar15 = (int)pvVar18 - (int)(void *)(lVar17 + 0x72);
      if (0xf < iVar15) {
        iVar15 = iVar15 + -6;
      }
      if (uVar2 < uVar24) {
        bVar6 = true;
      }
      else {
        uVar21 = uVar24 * uVar26;
        iVar12 = iVar12 + 1;
        uVar24 = (long)iVar15 + uVar21;
        bVar6 = (bool)(bVar6 | uVar1 - (long)iVar15 < uVar21);
      }
LAB_003e952c:
      if (local_30 == (long *)0x0) goto LAB_003e963c;
LAB_003e9534:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) {
LAB_003e982c:
          local_28 = 0xffffffff;
          uVar16 = (**(code **)(*local_30 + 0x48))();
          if (uVar16 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003e963c;
          }
          goto LAB_003e9568;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
                    /* try { // try from 003e980c to 004e986b has its CatchHandler @ 003ea17c */
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003e963c;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) goto LAB_003e982c;
      }
      uVar16 = (uint)*pbVar20;
LAB_003e9568:
      local_28 = uVar16;
      if (local_40 == (long *)0x0) goto LAB_003e9590;
      cVar7 = '\0';
      do {
        cVar19 = '\0';
        if ((int)local_38 == -1) {
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar16 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar16 = (**(code **)(*local_40 + 0x48))();
            if (uVar16 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar19 = cVar11;
              goto LAB_003e9588;
            }
          }
                    /* try { // try from 003e966c to 004e966f has its CatchHandler @ 003ea124 */
          local_38 = CONCAT44(local_38._4_4_,uVar16);
          cVar19 = '\0';
                    /* try { // try from 003e9674 to 004e96c7 has its CatchHandler @ 003ea17c */
        }
LAB_003e9588:
        if (cVar19 == cVar7) goto LAB_003e9390;
LAB_003e9590:
        if (local_30 == (long *)0x0) {
LAB_003e9864:
          uVar23 = 0xff;
          goto LAB_003e94bc;
        }
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar16 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar16 = (**(code **)(*local_30 + 0x48))();
            if (uVar16 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003e9864;
            }
          }
          uVar23 = uVar16 & 0xff;
          local_28 = uVar16;
          goto LAB_003e94bc;
        }
        uVar23 = local_28 & 0xff;
        if ((*(char *)(lVar17 + 0x20) == '\0') || (*(byte *)(lVar17 + 0x49) != uVar23))
        goto LAB_003e94d0;
LAB_003e95bc:
        if (iVar12 == 0) {
          bVar4 = true;
          iVar12 = 0;
          goto LAB_003e9398;
        }
        lVar22 = *(long *)(local_8 + -0x18);
        uVar21 = lVar22 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar21) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar21);
          lVar22 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar22] = (char)iVar12;
        iVar12 = 0;
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003e952c;
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar21;
                    /* try { // try from 003e9630 to 004e9633 has its CatchHandler @ 003ea17c */
        local_8[uVar21] = 0;
        if (local_30 != (long *)0x0) goto LAB_003e9534;
LAB_003e963c:
        if (local_40 == (long *)0x0) goto LAB_003e9390;
        cVar7 = cVar11;
      } while( true );
    }
  }
LAB_003e9774:
  bVar4 = false;
  if (*(long *)(local_8 + -0x18) != 0) goto LAB_003e9784;
LAB_003e93a4:
                    /* catch() { ... } // from try @ 003e8d8c with catch @ 003e93b0
                       catch() { ... } // from try @ 003e8f1c with catch @ 003e93b0 */
  if ((iVar12 == 0) <= bVar8) goto LAB_003e97cc;
LAB_003e93b8:
  *param_8 = 0;
  *param_7 = 4;
LAB_003e93cc:
  if (bVar3) {
                    /* catch() { ... } // from try @ 003e8d74 with catch @ 003e93d4 */
    *param_7 = *param_7 | 2;
  }
                    /* catch() { ... } // from try @ 003e8d08 with catch @ 003e93e4 */
  auVar5._8_4_ = local_28;
  auVar5._0_8_ = local_30;
  auVar5._12_4_ = uStack_24;
                    /* catch() { ... } // from try @ 003e8cac with catch @ 003e93f4
                       catch() { ... } // from try @ 003e8e40 with catch @ 003e93f4 */
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003dca9c(local_8 + -0x18,auStack_10);
  }
                    /* catch() { ... } // from try @ 003e8e28 with catch @ 003e9418
                       catch() { ... } // from try @ 003e9204 with catch @ 003e9418 */
  return auVar5;
code_r0x003e9880:
  local_40 = (long *)0x0;
  iVar13 = 1;
  goto LAB_003e92c0;
LAB_003e9390:
  bVar4 = false;
  bVar3 = true;
LAB_003e9398:
  if (*(long *)(local_8 + -0x18) == 0) goto LAB_003e93a4;
LAB_003e9784:
  FUN_004116e0(local_58,iVar12);
  cVar11 = FUN_003ee0cc(*(undefined8 *)(lVar17 + 0x10),*(undefined8 *)(lVar17 + 0x18),local_58);
  if (cVar11 == '\0') {
    *param_7 = 4;
  }
  if (((iVar12 == 0) <= bVar8) || (*(long *)(local_8 + -0x18) != 0)) {
LAB_003e97cc:
    if (!bVar4) {
      if (bVar6) {
        uVar25 = 0x7fffffffffffffff;
        if (bVar9) {
          uVar25 = 0x8000000000000000;
        }
        *param_8 = uVar25;
        *param_7 = 4;
      }
      else {
        uVar25 = -uVar24;
        if (!bVar9) {
          uVar25 = uVar24;
        }
        *param_8 = uVar25;
      }
      goto LAB_003e93cc;
    }
  }
  goto LAB_003e93b8;
}


==================================================================

### FUNC 003e9958 (20 bytes) name=FUN_003e9958

void FUN_003e9958(void)

{
  FUN_003e8fbc();
  return;
}


==================================================================

### FUNC 003e996c (1000 bytes) name=FUN_003e996c

undefined1  [16]
FUN_003e996c(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,byte *param_8)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  undefined1 auVar3 [16];
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  long lVar11;
  uint uVar12;
  ulong uVar13;
  long *local_30;
  undefined8 local_28;
  undefined1 local_20 [12];
  undefined4 uStack_14;
  ulong local_8;
  
                    /* try { // try from 003e9978 to 004e997b has its CatchHandler @ 003ea184 */
                    /* try { // try from 003e9980 to 004e9983 has its CatchHandler @ 003ea194 */
  local_20._8_4_ = (undefined4)param_3;
  uStack_14 = (undefined4)((ulong)param_3 >> 0x20);
  local_30 = param_4;
  local_28 = param_5;
  local_20._0_8_ = param_2;
  if ((*(uint *)(param_6 + 0x18) & 1) == 0) {
    local_8 = 0xffffffffffffffff;
    local_20 = FUN_003e8fbc();
    if (local_8 < 2) {
      *param_8 = (byte)local_8 & 1;
    }
    else {
      *param_8 = 1;
      *param_7 = 4;
      iVar8 = FUN_003e3e48(local_20);
      iVar9 = FUN_003e3e48(&local_30);
      if ((iVar8 == -1) == (iVar9 == -1)) {
                    /* try { // try from 003e9a0c to 004e9a0f has its CatchHandler @ 003ea134 */
        *param_7 = *param_7 | 2;
      }
    }
LAB_003e9ca0:
    auVar2._12_4_ = uStack_14;
    auVar2._0_12_ = local_20;
    return auVar2;
  }
  bVar7 = true;
  uVar13 = 0;
  lVar11 = FUN_003e3d64(&local_8,param_6 + 0xd0);
  bVar4 = *(long *)(lVar11 + 0x40) == 0;
  bVar6 = true;
  bVar5 = *(long *)(lVar11 + 0x30) == 0;
LAB_003e9a54:
  if (bVar4 <= (bVar5 ^ 1U)) {
    do {
      if ((long *)local_20._0_8_ == (long *)0x0) {
LAB_003e9c68:
        if (local_30 == (long *)0x0) {
LAB_003e9c1c:
          iVar8 = 1;
          goto joined_r0x003e9c20;
        }
        iVar8 = 1;
LAB_003e9a80:
                    /* try { // try from 003e9a80 to 004e9c9b has its CatchHandler @ 003ea194 */
joined_r0x003e9bf4:
        iVar9 = 0;
        if ((int)local_28 == -1) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar10 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar10 = (**(code **)(*local_30 + 0x48))();
            if (uVar10 == 0xffffffff) {
              local_30 = (long *)0x0;
              iVar9 = 1;
                    /* try { // try from 003e9d40 to 004e9d93 has its CatchHandler @ 003e94e0 */
              goto LAB_003e9a90;
            }
          }
          local_28 = CONCAT44(local_28._4_4_,uVar10);
          if (iVar8 == 0) goto LAB_003e9c1c;
        }
        else {
LAB_003e9a90:
          if (iVar9 == iVar8) goto LAB_003e9c1c;
        }
LAB_003e9a98:
        if ((long *)local_20._0_8_ == (long *)0x0) {
LAB_003e9c90:
          uVar12 = 0xff;
        }
        else {
          if (local_20._8_4_ != 0xffffffff) goto LAB_003e9aac;
          if (*(byte **)(local_20._0_8_ + 0x10) < *(byte **)(local_20._0_8_ + 0x18)) {
            uVar10 = (uint)**(byte **)(local_20._0_8_ + 0x10);
          }
          else {
            uVar10 = (**(code **)(*(long *)local_20._0_8_ + 0x48))();
            if (uVar10 == 0xffffffff) {
              local_20._0_8_ = (long *)0x0;
              goto LAB_003e9c90;
            }
          }
          uVar12 = uVar10 & 0xff;
          local_20._8_4_ = uVar10;
        }
      }
      else {
        if (local_20._8_4_ == 0xffffffff) {
          if (*(byte **)(local_20._0_8_ + 0x10) < *(byte **)(local_20._0_8_ + 0x18)) {
            uVar10 = (uint)**(byte **)(local_20._0_8_ + 0x10);
          }
          else {
            uVar10 = (**(code **)(*(long *)local_20._0_8_ + 0x48))();
            if (uVar10 == 0xffffffff) {
              local_20._0_8_ = (long *)0x0;
              goto LAB_003e9c68;
            }
          }
          iVar8 = 0;
          local_20._8_4_ = uVar10;
          if (local_30 != (long *)0x0) {
            goto joined_r0x003e9bf4;
          }
          goto LAB_003e9a98;
        }
        iVar8 = 0;
        if (local_30 != (long *)0x0) goto LAB_003e9a80;
LAB_003e9aac:
        uVar12 = local_20._8_4_ & 0xff;
      }
      if (!bVar4) {
        bVar6 = *(byte *)(*(long *)(lVar11 + 0x38) + uVar13) == uVar12;
      }
      if (bVar6 < bVar5) break;
      if (!bVar5) {
        bVar7 = *(byte *)(*(long *)(lVar11 + 0x28) + uVar13) == uVar12;
      }
      if ((bVar7 < bVar4) || (bVar7 < (bVar6 ^ 1U))) {
        if ((bVar6) && ((*(ulong *)(lVar11 + 0x40) == uVar13 && (uVar13 != 0)))) {
          *param_8 = 0;
          *param_7 = 0;
          goto LAB_003e9b84;
        }
                    /* try { // try from 003e9d14 to 004e9d17 has its CatchHandler @ 003ea17c */
        *param_8 = 0;
        goto LAB_003e9d18;
      }
      uVar13 = uVar13 + 1;
      if ((long *)local_20._0_8_ != (long *)0x0) {
        if (*(ulong *)(local_20._0_8_ + 0x10) < *(ulong *)(local_20._0_8_ + 0x18)) {
          *(ulong *)(local_20._0_8_ + 0x10) = *(ulong *)(local_20._0_8_ + 0x10) + 1;
        }
        else {
          (**(code **)(*(long *)local_20._0_8_ + 0x50))();
        }
        local_20._8_4_ = 0xffffffff;
      }
      bVar4 = true;
      if (bVar6) {
        bVar4 = *(ulong *)(lVar11 + 0x40) <= uVar13;
      }
      bVar5 = true;
      if (!bVar7) goto LAB_003e9a54;
      bVar5 = *(ulong *)(lVar11 + 0x30) <= uVar13;
      if (!bVar5 < bVar4) break;
    } while( true );
  }
  iVar8 = 0;
joined_r0x003e9c20:
  if (((bVar6) && (*(ulong *)(lVar11 + 0x40) == uVar13)) && (uVar13 != 0)) {
    *param_8 = 0;
    if ((!bVar7) || (*(ulong *)(lVar11 + 0x30) != uVar13)) {
      *param_7 = iVar8 << 1;
      goto LAB_003e9b84;
    }
  }
  else {
    if (((bVar7) && (*(ulong *)(lVar11 + 0x30) == uVar13)) && (uVar13 != 0)) {
      *param_8 = 1;
      *param_7 = iVar8 << 1;
      goto LAB_003e9ca0;
    }
    *param_8 = 0;
    if (iVar8 != 0) {
      *param_7 = 6;
      auVar3._8_4_ = local_20._8_4_;
      auVar3._0_8_ = local_20._0_8_;
      auVar3._12_4_ = uStack_14;
      return auVar3;
    }
  }
LAB_003e9d18:
  *param_7 = 4;
LAB_003e9b84:
  auVar1._8_4_ = local_20._8_4_;
  auVar1._0_8_ = local_20._0_8_;
  auVar1._12_4_ = uStack_14;
  return auVar1;
}


==================================================================

### FUNC 003e9d54 (2460 bytes) name=FUN_003e9d54

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003e9d54(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,short *param_8)

{
  ulong uVar1;
  bool bVar2;
  bool bVar3;
  undefined1 auVar4 [16];
  bool bVar5;
  char cVar6;
  bool bVar7;
  byte bVar8;
  char cVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  long lVar15;
  void *pvVar16;
  char cVar17;
  byte *pbVar18;
  long lVar19;
  uint uVar20;
  ushort uVar21;
  uint uVar22;
  uint uVar23;
  ulong __n;
  uint uVar24;
  int *piVar25;
  ushort local_6c;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar15 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar24 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar24 == 0x40) {
    uVar10 = 8;
  }
  else {
    uVar10 = 0x10;
    if (uVar24 != 8) {
      uVar10 = 10;
    }
  }
  iVar11 = FUN_003e3e48(&local_30);
  iVar12 = FUN_003e3e48(&local_40);
                    /* try { // try from 003e9de4 to 004e9de7 has its CatchHandler @ 003ea194 */
  if ((iVar11 == -1) == (iVar12 == -1)) {
    uVar20 = 0;
    local_6c = 0;
LAB_003ea44c:
    cVar9 = *(char *)(lVar15 + 0x20);
    bVar2 = true;
                    /* try { // try from 003ea454 to 004ea457 has its CatchHandler @ 003eb06c */
    iVar11 = 0;
    bVar7 = false;
LAB_003ea1ac:
    if (uVar10 == 0x10) goto LAB_003ea1b4;
LAB_003e9f68:
                    /* try { // try from 003e9f68 to 004e9f6b has its CatchHandler @ 003ea19c */
                    /* try { // try from 003e9f74 to 004e9f77 has its CatchHandler @ 003ea17c */
    __n = (ulong)(int)uVar10;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 == '\0') goto LAB_003e9f88;
LAB_003ea1d4:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar9 = *(char *)(lVar15 + 0x88);
    uVar24 = 0;
    if (uVar10 != 0) {
      uVar24 = 0xffff / uVar10;
    }
    if (cVar9 != '\0') goto LAB_003ea1f8;
LAB_003e9fa0:
    if (bVar2) {
LAB_003ea6c8:
      uVar21 = 0;
      bVar5 = false;
      bVar3 = false;
      goto LAB_003ea120;
    }
    uVar23 = 0;
    bVar5 = false;
LAB_003e9fc0:
    if (10 < __n) goto LAB_003ea06c;
LAB_003e9fc8:
    uVar21 = (ushort)uVar23;
                    /* try { // try from 003e9fcc to 004e9fcf has its CatchHandler @ 003ea110 */
                    /* try { // try from 003e9fd4 to 004e9fd7 has its CatchHandler @ 003e94e0 */
    if ((0x2f < uVar20) && (uVar20 < (int)__n + 0x30U)) {
      uVar14 = uVar20 - 0x30;
LAB_003e9fe0:
      if (uVar23 <= uVar24) goto LAB_003ea0a8;
LAB_003e9fe8:
      bVar5 = true;
      if (local_30 == (long *)0x0) goto LAB_003ea0d8;
LAB_003e9ff4:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) {
LAB_003ea4d8:
          local_28 = 0xffffffff;
          uVar20 = (**(code **)(*local_30 + 0x48))();
          if (uVar20 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003ea0d8;
          }
          goto LAB_003ea024;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003ea0d8;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) goto LAB_003ea4d8;
      }
      uVar20 = (uint)*pbVar18;
LAB_003ea024:
      iVar12 = 0;
      local_28 = uVar20;
      if (local_40 == (long *)0x0) goto LAB_003ea04c;
      iVar13 = 0;
      if ((int)local_38 == -1) goto LAB_003ea0f4;
LAB_003ea044:
      uVar21 = (ushort)uVar23;
      if (iVar13 != iVar12) {
LAB_003ea04c:
        do {
          if (local_30 == (long *)0x0) {
LAB_003ea588:
            uVar20 = 0xff;
            goto LAB_003e9fc0;
          }
          if (local_28 == 0xffffffff) {
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar14 = (uint)*(byte *)local_30[2];
            }
            else {
              uVar14 = (**(code **)(*local_30 + 0x48))();
              if (uVar14 == 0xffffffff) {
                local_30 = (long *)0x0;
                goto LAB_003ea588;
              }
            }
            uVar20 = uVar14 & 0xff;
            local_28 = uVar14;
            goto LAB_003e9fc0;
          }
                    /* try { // try from 003ea060 to 004ea063 has its CatchHandler @ 003ea19c */
          uVar20 = local_28 & 0xff;
          if (__n < 0xb) goto LAB_003e9fc8;
LAB_003ea06c:
          uVar21 = (ushort)uVar23;
                    /* try { // try from 003ea06c to 004ea06f has its CatchHandler @ 003ea1c0 */
          uVar14 = uVar20 - 0x30;
                    /* try { // try from 003ea078 to 004ea07b has its CatchHandler @ 003ea17c */
          if ((uVar14 & 0xff) < 10) goto LAB_003e9fe0;
                    /* try { // try from 003ea084 to 004ea087 has its CatchHandler @ 003ea0cc */
          if ((uVar20 - 0x61 & 0xff) < 6) {
            uVar14 = uVar20 - 0x57;
            goto LAB_003e9fe0;
          }
                    /* try { // try from 003ea090 to 004ea093 has its CatchHandler @ 003ea17c */
          if (5 < (uVar20 - 0x41 & 0xff)) goto LAB_003ea590;
          uVar14 = uVar20 - 0x37;
          if (uVar24 < uVar23) goto LAB_003e9fe8;
LAB_003ea0a8:
          uVar20 = uVar23 * uVar10;
                    /* try { // try from 003ea0ac to 004ea0af has its CatchHandler @ 003ea194 */
          iVar11 = iVar11 + 1;
          uVar22 = uVar20 & 0xffff;
          uVar23 = uVar22 + uVar14 & 0xffff;
                    /* catch() { ... } // from try @ 003e9768 with catch @ 003ea0cc
                       catch() { ... } // from try @ 003ea084 with catch @ 003ea0cc */
          bVar5 = (bool)(bVar5 | ((uVar20 & 0xffff) != 0xffff - uVar14 &&
                                 (int)(0xffff - uVar14) <= (int)uVar22));
          if (local_30 != (long *)0x0) goto LAB_003e9ff4;
LAB_003ea0d8:
          uVar21 = (ushort)uVar23;
          if (local_40 == (long *)0x0) break;
          iVar12 = 1;
          iVar13 = 0;
          if ((int)local_38 != -1) goto LAB_003ea044;
LAB_003ea0f4:
          uVar21 = (ushort)uVar23;
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar20 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar20 = (**(code **)(*local_40 + 0x48))();
            if (uVar20 == 0xffffffff) goto code_r0x003ea618;
          }
                    /* try { // try from 003ea10c to 004ea10f has its CatchHandler @ 003e94e0 */
          local_38 = CONCAT44(local_38._4_4_,uVar20);
                    /* catch() { ... } // from try @ 003e9fcc with catch @ 003ea110 */
          if (iVar12 == 0) break;
        } while( true );
      }
      goto LAB_003ea118;
    }
  }
  else {
    bVar8 = FUN_003e3e48(&local_30);
    uVar20 = (uint)bVar8;
    local_6c = (ushort)(*(byte *)(lVar15 + 0x6e) == bVar8);
    if ((local_6c == 0) && (*(byte *)(lVar15 + 0x6f) != bVar8)) {
      cVar9 = *(char *)(lVar15 + 0x20);
    }
    else {
                    /* try { // try from 003e9e10 to 004e9e13 has its CatchHandler @ 003ea17c */
      cVar9 = *(char *)(lVar15 + 0x20);
      if ((cVar9 == '\0') || (*(byte *)(lVar15 + 0x49) != bVar8)) {
        if (*(byte *)(lVar15 + 0x48) != bVar8) {
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
            }
            local_28 = 0xffffffff;
          }
          iVar11 = FUN_003e3e48(&local_30);
          iVar12 = FUN_003e3e48(&local_40);
          if ((iVar11 == -1) == (iVar12 == -1)) goto LAB_003ea44c;
          uVar20 = FUN_003e3e48(&local_30);
          uVar20 = uVar20 & 0xff;
          cVar9 = *(char *)(lVar15 + 0x20);
        }
      }
      else {
        cVar9 = '\x01';
      }
    }
    iVar11 = 0;
    bVar7 = false;
    do {
      if (((cVar9 != '\0') && (*(byte *)(lVar15 + 0x49) == uVar20)) ||
         (*(byte *)(lVar15 + 0x48) == uVar20)) break;
                    /* try { // try from 003e9eb4 to 004e9eb7 has its CatchHandler @ 003ea1c0 */
      if (*(byte *)(lVar15 + 0x72) == uVar20) {
        if ((uVar10 == 10) < bVar7) goto LAB_003e9ec4;
        iVar11 = iVar11 + 1;
        if ((uVar10 == 8) || (bVar7 = true, uVar24 == 0)) {
          iVar11 = 0;
          bVar7 = true;
          uVar10 = 8;
        }
      }
      else {
        if (!bVar7) break;
LAB_003e9ec4:
        if ((*(byte *)(lVar15 + 0x70) != uVar20) && (*(byte *)(lVar15 + 0x71) != uVar20)) {
          bVar2 = false;
          bVar7 = true;
          goto LAB_003ea1ac;
        }
        if ((uVar10 != 0x10) && (uVar24 != 0)) {
          bVar2 = false;
          bVar7 = true;
          goto LAB_003e9f68;
        }
        iVar11 = 0;
        bVar7 = false;
        uVar10 = 0x10;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = 0xffffffff;
      }
      iVar12 = FUN_003e3e48(&local_30);
      iVar13 = FUN_003e3e48(&local_40);
      if ((iVar12 == -1) == (iVar13 == -1)) {
        cVar9 = *(char *)(lVar15 + 0x20);
        bVar2 = true;
        goto LAB_003ea1ac;
      }
      uVar20 = FUN_003e3e48(&local_30);
      uVar20 = uVar20 & 0xff;
      cVar9 = *(char *)(lVar15 + 0x20);
                    /* try { // try from 003e9f58 to 004e9f5b has its CatchHandler @ 003ea17c */
    } while (bVar7);
    bVar2 = false;
    if (uVar10 != 0x10) goto LAB_003e9f68;
LAB_003ea1b4:
                    /* catch() { ... } // from try @ 003e9eb4 with catch @ 003ea1c0
                       catch() { ... } // from try @ 003ea06c with catch @ 003ea1c0 */
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 != '\0') goto LAB_003ea1d4;
LAB_003e9f88:
    cVar9 = *(char *)(lVar15 + 0x88);
                    /* try { // try from 003e9f90 to 004e9f93 has its CatchHandler @ 003e94e0 */
    uVar24 = 0;
    if (uVar10 != 0) {
      uVar24 = 0xffff / uVar10;
    }
    if (cVar9 == '\0') goto LAB_003e9fa0;
LAB_003ea1f8:
    local_58 = &local_8;
    if (bVar2) goto LAB_003ea6c8;
                    /* catch() { ... } // from try @ 003ea260 with catch @ 003ea200
                       catch() { ... } // from try @ 003ea904 with catch @ 003ea200
                       catch() { ... } // from try @ 003eaff4 with catch @ 003ea200 */
    uVar23 = 0;
    bVar5 = false;
LAB_003ea20c:
    if ((*(char *)(lVar15 + 0x20) != '\0') && (*(byte *)(lVar15 + 0x49) == uVar20))
    goto LAB_003ea310;
LAB_003ea220:
    uVar21 = (ushort)uVar23;
    if ((*(byte *)(lVar15 + 0x48) != uVar20) &&
       (pvVar16 = memchr((void *)(lVar15 + 0x72),uVar20,__n), pvVar16 != (void *)0x0)) {
      iVar12 = (int)pvVar16 - (int)(void *)(lVar15 + 0x72);
      if (0xf < iVar12) {
        iVar12 = iVar12 + -6;
      }
      if (uVar24 < uVar23) {
        bVar5 = true;
      }
      else {
                    /* try { // try from 003ea260 to 004ea263 has its CatchHandler @ 003ea200 */
        iVar11 = iVar11 + 1;
        bVar5 = (bool)(bVar5 | 0xffff - iVar12 < (int)(uVar23 * uVar10 & 0xffff));
        uVar23 = (uVar23 * uVar10 & 0xffff) + iVar12 & 0xffff;
      }
LAB_003ea280:
      if (local_30 == (long *)0x0) goto LAB_003ea390;
LAB_003ea288:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) {
LAB_003ea5c4:
          local_28 = 0xffffffff;
          uVar20 = (**(code **)(*local_30 + 0x48))();
          if (uVar20 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003ea390;
          }
          goto LAB_003ea2bc;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003ea390;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) goto LAB_003ea5c4;
      }
      uVar20 = (uint)*pbVar18;
LAB_003ea2bc:
      local_28 = uVar20;
      if (local_40 == (long *)0x0) goto LAB_003ea2e4;
      cVar6 = '\0';
      do {
        uVar21 = (ushort)uVar23;
        cVar17 = '\0';
        if ((int)local_38 == -1) {
                    /* try { // try from 003ea3b0 to 004ea3b3 has its CatchHandler @ 003eaff8 */
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar20 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar20 = (**(code **)(*local_40 + 0x48))();
            if (uVar20 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar17 = cVar9;
              goto LAB_003ea2dc;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar20);
          cVar17 = '\0';
        }
LAB_003ea2dc:
        if (cVar17 == cVar6) goto LAB_003ea118;
LAB_003ea2e4:
        if (local_30 == (long *)0x0) {
LAB_003ea5fc:
          uVar20 = 0xff;
          goto LAB_003ea20c;
        }
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar14 = (uint)*(byte *)local_30[2];
          }
          else {
                    /* try { // try from 003ea5ec to 004ea61b has its CatchHandler @ 003eaff8 */
            uVar14 = (**(code **)(*local_30 + 0x48))();
            if (uVar14 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003ea5fc;
            }
          }
          uVar20 = uVar14 & 0xff;
          local_28 = uVar14;
          goto LAB_003ea20c;
        }
        uVar20 = local_28 & 0xff;
        if ((*(char *)(lVar15 + 0x20) == '\0') || (*(byte *)(lVar15 + 0x49) != uVar20))
        goto LAB_003ea220;
LAB_003ea310:
        uVar21 = (ushort)uVar23;
        if (iVar11 == 0) {
          bVar3 = true;
          iVar11 = 0;
          goto LAB_003ea120;
        }
        lVar19 = *(long *)(local_8 + -0x18);
        uVar1 = lVar19 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar1);
          lVar19 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar19] = (char)iVar11;
        iVar11 = 0;
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003ea280;
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar1;
        local_8[uVar1] = 0;
        if (local_30 != (long *)0x0) goto LAB_003ea288;
LAB_003ea390:
        uVar21 = (ushort)uVar23;
        if (local_40 == (long *)0x0) goto LAB_003ea118;
        cVar6 = cVar9;
      } while( true );
    }
  }
LAB_003ea590:
  bVar3 = false;
LAB_003ea120:
                    /* try { // try from 003ea120 to 004ea123 has its CatchHandler @ 003e94e0 */
  local_58 = &local_8;
                    /* catch() { ... } // from try @ 003e966c with catch @ 003ea124 */
  if (*(long *)(local_8 + -0x18) == 0) {
                    /* catch() { ... } // from try @ 003e9a0c with catch @ 003ea134 */
    if ((iVar11 == 0) <= bVar7) {
LAB_003ea54c:
      if (!bVar3) {
        if (bVar5) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = local_6c + (uVar21 ^ -local_6c);
        }
        goto LAB_003ea154;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar11);
    cVar9 = FUN_003ee0cc(*(undefined8 *)(lVar15 + 0x10),*(undefined8 *)(lVar15 + 0x18),local_58);
    if (cVar9 == '\0') {
      *param_7 = 4;
    }
    if (((iVar11 == 0) <= bVar7) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_003ea54c;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_003ea154:
  if (bVar2) {
    *param_7 = *param_7 | 2;
  }
  auVar4._8_4_ = local_28;
  auVar4._0_8_ = local_30;
  auVar4._12_4_ = uStack_24;
                    /* catch() { ... } // from try @ 003e9630 with catch @ 003ea17c
                       catch() { ... } // from try @ 003e9674 with catch @ 003ea17c
                       catch() { ... } // from try @ 003e980c with catch @ 003ea17c
                       catch() { ... } // from try @ 003e9d14 with catch @ 003ea17c
                       catch() { ... } // from try @ 003e9e10 with catch @ 003ea17c
                       catch() { ... } // from try @ 003e9f58 with catch @ 003ea17c
                       catch() { ... } // from try @ 003e9f74 with catch @ 003ea17c
                       catch() { ... } // from try @ 003ea078 with catch @ 003ea17c
                       catch() { ... } // from try @ 003ea090 with catch @ 003ea17c */
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
                    /* try { // try from 003ea67c to 004ea67f has its CatchHandler @ 003eb090 */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar11 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar11 + -1;
    }
    else {
      piVar25 = (int *)(local_8 + -8);
      do {
        iVar11 = *piVar25;
        cVar9 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar25,0x10);
        if (bVar2) {
          *piVar25 = iVar11 + -1;
          cVar9 = ExclusiveMonitorsStatus();
        }
      } while (cVar9 != '\0');
    }
    if (iVar11 < 1) {
      operator_delete(local_8 + -0x18);
    }
  }
                    /* catch() { ... } // from try @ 003e9978 with catch @ 003ea184 */
                    /* catch() { ... } // from try @ 003e9934 with catch @ 003ea194
                       catch() { ... } // from try @ 003e9980 with catch @ 003ea194
                       catch() { ... } // from try @ 003e9a80 with catch @ 003ea194
                       catch() { ... } // from try @ 003e9de4 with catch @ 003ea194
                       catch() { ... } // from try @ 003ea0ac with catch @ 003ea194 */
                    /* catch() { ... } // from try @ 003e9f68 with catch @ 003ea19c
                       catch() { ... } // from try @ 003ea060 with catch @ 003ea19c */
  return auVar4;
code_r0x003ea618:
  local_40 = (long *)0x0;
  iVar13 = 1;
  goto LAB_003ea044;
LAB_003ea118:
  bVar3 = false;
  bVar2 = true;
  goto LAB_003ea120;
}


==================================================================

### FUNC 003ea71c (20 bytes) name=FUN_003ea71c

void FUN_003ea71c(void)

{
  FUN_003e9d54();
  return;
}


==================================================================

### FUNC 003ea730 (2384 bytes) name=FUN_003ea730

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003ea730(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,int *param_8)

{
  ulong uVar1;
  bool bVar2;
  bool bVar3;
  undefined1 auVar4 [16];
  bool bVar5;
  char cVar6;
  bool bVar7;
  byte bVar8;
  char cVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  long lVar15;
  void *pvVar16;
  char cVar17;
  byte *pbVar18;
  long lVar19;
  uint uVar20;
  uint uVar21;
  ulong __n;
  uint uVar22;
  uint local_6c;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar15 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar22 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar22 == 0x40) {
    uVar10 = 8;
  }
  else {
    uVar10 = 0x10;
    if (uVar22 != 8) {
      uVar10 = 10;
    }
  }
  iVar11 = FUN_003e3e48(&local_30);
  iVar12 = FUN_003e3e48(&local_40);
  if ((iVar11 == -1) == (iVar12 == -1)) {
    uVar20 = 0;
    local_6c = 0;
LAB_003eae0c:
                    /* try { // try from 003eae0c to 004eae0f has its CatchHandler @ 003eaff8 */
    cVar9 = *(char *)(lVar15 + 0x20);
    bVar2 = true;
    iVar11 = 0;
    bVar7 = false;
LAB_003eab78:
    if (uVar10 == 0x10) goto LAB_003eab80;
LAB_003ea944:
    __n = (ulong)(int)uVar10;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 == '\0') goto LAB_003ea964;
LAB_003eaba0:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar9 = *(char *)(lVar15 + 0x88);
    uVar22 = 0;
    if (uVar10 != 0) {
      uVar22 = 0xffffffff / uVar10;
    }
    if (cVar9 != '\0') goto LAB_003eabc4;
LAB_003ea97c:
    if (bVar2) {
LAB_003eb068:
      uVar21 = 0;
                    /* catch() { ... } // from try @ 003ea454 with catch @ 003eb06c
                       catch() { ... } // from try @ 003ead50 with catch @ 003eb06c
                       catch() { ... } // from try @ 003eadbc with catch @ 003eb06c
                       catch() { ... } // from try @ 003eae00 with catch @ 003eb06c */
      bVar5 = false;
      bVar3 = false;
      goto LAB_003eaaec;
    }
    uVar21 = 0;
    bVar5 = false;
LAB_003ea998:
    if (10 < __n) goto LAB_003eaa44;
LAB_003ea9a0:
    if ((0x2f < uVar20) && (uVar20 < (int)__n + 0x30U)) {
      uVar14 = uVar20 - 0x30;
LAB_003ea9b8:
      if (uVar21 <= uVar22) goto LAB_003eaa80;
LAB_003ea9c0:
      bVar5 = true;
      if (local_30 == (long *)0x0) goto LAB_003eaaa4;
LAB_003ea9cc:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) {
LAB_003eaea0:
          local_28 = 0xffffffff;
          uVar20 = (**(code **)(*local_30 + 0x48))();
          if (uVar20 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003eaaa4;
          }
          goto LAB_003ea9fc;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003eaaa4;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) goto LAB_003eaea0;
      }
      uVar20 = (uint)*pbVar18;
LAB_003ea9fc:
      iVar12 = 0;
      local_28 = uVar20;
      if (local_40 == (long *)0x0) goto LAB_003eaa24;
      iVar13 = 0;
      if ((int)local_38 == -1) goto LAB_003eaac0;
LAB_003eaa1c:
      if (iVar12 != iVar13) {
LAB_003eaa24:
        do {
          if (local_30 == (long *)0x0) {
LAB_003eaf50:
            uVar20 = 0xff;
            goto LAB_003ea998;
          }
                    /* try { // try from 003eaa2c to 004eaa2f has its CatchHandler @ 003eb034 */
          if (local_28 == 0xffffffff) {
                    /* try { // try from 003eae30 to 004eae33 has its CatchHandler @ 003eb154 */
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar14 = (uint)*(byte *)local_30[2];
            }
            else {
                    /* try { // try from 003eaf3c to 004eaf3f has its CatchHandler @ 003eaff8 */
              uVar14 = (**(code **)(*local_30 + 0x48))();
              if (uVar14 == 0xffffffff) {
                local_30 = (long *)0x0;
                goto LAB_003eaf50;
              }
            }
            uVar20 = uVar14 & 0xff;
            local_28 = uVar14;
            goto LAB_003ea998;
          }
          uVar20 = local_28 & 0xff;
          if (__n < 0xb) goto LAB_003ea9a0;
LAB_003eaa44:
          uVar14 = uVar20 - 0x30;
          if ((uVar14 & 0xff) < 10) goto LAB_003ea9b8;
          if ((uVar20 - 0x61 & 0xff) < 6) {
            uVar14 = uVar20 - 0x57;
            goto LAB_003ea9b8;
          }
                    /* try { // try from 003eaa6c to 004eac0f has its CatchHandler @ 003eb044 */
          if (5 < (uVar20 - 0x41 & 0xff)) goto LAB_003eaf58;
          uVar14 = uVar20 - 0x37;
          if (uVar22 < uVar21) goto LAB_003ea9c0;
LAB_003eaa80:
          uVar20 = uVar21 * uVar10;
          iVar11 = iVar11 + 1;
          uVar21 = uVar14 + uVar20;
          bVar5 = (bool)(bVar5 | ~uVar14 < uVar20);
          if (local_30 != (long *)0x0) goto LAB_003ea9cc;
LAB_003eaaa4:
          if (local_40 == (long *)0x0) break;
          iVar12 = 1;
          iVar13 = 0;
          if ((int)local_38 != -1) goto LAB_003eaa1c;
LAB_003eaac0:
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar20 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar20 = (**(code **)(*local_40 + 0x48))();
            if (uVar20 == 0xffffffff) goto code_r0x003eafe0;
          }
          local_38 = CONCAT44(local_38._4_4_,uVar20);
          if (iVar12 == 0) break;
        } while( true );
      }
      goto LAB_003eaae4;
    }
  }
  else {
    bVar8 = FUN_003e3e48(&local_30);
    uVar20 = (uint)bVar8;
    local_6c = (uint)(*(byte *)(lVar15 + 0x6e) == bVar8);
                    /* try { // try from 003ea7e8 to 004ea7eb has its CatchHandler @ 003eaf94 */
                    /* try { // try from 003eaddc to 004eaddf has its CatchHandler @ 003eaf94 */
    if ((local_6c == 0) && (*(byte *)(lVar15 + 0x6f) != bVar8)) {
                    /* try { // try from 003eade8 to 004eadeb has its CatchHandler @ 003eb02c */
      cVar9 = *(char *)(lVar15 + 0x20);
    }
    else {
      cVar9 = *(char *)(lVar15 + 0x20);
                    /* try { // try from 003eadf4 to 004eadf7 has its CatchHandler @ 003eb0b8 */
      if ((cVar9 == '\0') || (*(byte *)(lVar15 + 0x49) != bVar8)) {
        if (*(byte *)(lVar15 + 0x48) != bVar8) {
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
                    /* catch() { ... } // from try @ 003eac90 with catch @ 003eb054
                       catch() { ... } // from try @ 003eadac with catch @ 003eb054 */
            }
            local_28 = 0xffffffff;
          }
          iVar11 = FUN_003e3e48(&local_30);
          iVar12 = FUN_003e3e48(&local_40);
          if ((iVar11 == -1) == (iVar12 == -1)) goto LAB_003eae0c;
          uVar20 = FUN_003e3e48(&local_30);
                    /* try { // try from 003ea85c to 004ea85f has its CatchHandler @ 003eb0b8 */
          uVar20 = uVar20 & 0xff;
          cVar9 = *(char *)(lVar15 + 0x20);
        }
      }
      else {
        cVar9 = '\x01';
                    /* try { // try from 003eae00 to 004eae03 has its CatchHandler @ 003eb06c */
      }
    }
    iVar11 = 0;
    bVar7 = false;
    do {
      if (((cVar9 != '\0') && (*(byte *)(lVar15 + 0x49) == uVar20)) ||
         (*(byte *)(lVar15 + 0x48) == uVar20)) break;
      if (*(byte *)(lVar15 + 0x72) == uVar20) {
        if ((uVar10 == 10) < bVar7) goto LAB_003ea8a0;
        iVar11 = iVar11 + 1;
                    /* try { // try from 003eadac to 004eadaf has its CatchHandler @ 003eb054 */
        if ((uVar10 == 8) || (bVar7 = true, uVar22 == 0)) {
                    /* try { // try from 003eadbc to 004eadbf has its CatchHandler @ 003eb06c */
          iVar11 = 0;
          bVar7 = true;
          uVar10 = 8;
        }
      }
      else {
        if (!bVar7) break;
LAB_003ea8a0:
        if ((*(byte *)(lVar15 + 0x70) != uVar20) && (*(byte *)(lVar15 + 0x71) != uVar20)) {
                    /* try { // try from 003eadd0 to 004eadd3 has its CatchHandler @ 003eb02c */
          bVar2 = false;
          bVar7 = true;
          goto LAB_003eab78;
        }
        if ((uVar10 != 0x10) && (uVar22 != 0)) {
          bVar2 = false;
          bVar7 = true;
          goto LAB_003ea944;
        }
        iVar11 = 0;
        bVar7 = false;
        uVar10 = 0x10;
      }
      if (local_30 != (long *)0x0) {
                    /* try { // try from 003ea8d8 to 004ea8db has its CatchHandler @ 003eb02c */
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
                    /* catch() { ... } // from try @ 003eaa2c with catch @ 003eb034
                       catch() { ... } // from try @ 003eaf30 with catch @ 003eb034 */
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = 0xffffffff;
      }
      iVar12 = FUN_003e3e48(&local_30);
                    /* try { // try from 003ea904 to 004ea957 has its CatchHandler @ 003ea200 */
      iVar13 = FUN_003e3e48(&local_40);
      if ((iVar12 == -1) == (iVar13 == -1)) {
        cVar9 = *(char *)(lVar15 + 0x20);
        bVar2 = true;
        goto LAB_003eab78;
      }
      uVar20 = FUN_003e3e48(&local_30);
      uVar20 = uVar20 & 0xff;
      cVar9 = *(char *)(lVar15 + 0x20);
    } while (bVar7);
    bVar2 = false;
    if (uVar10 != 0x10) goto LAB_003ea944;
LAB_003eab80:
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 != '\0') goto LAB_003eaba0;
LAB_003ea964:
    cVar9 = *(char *)(lVar15 + 0x88);
    uVar22 = 0;
    if (uVar10 != 0) {
      uVar22 = 0xffffffff / uVar10;
    }
    if (cVar9 == '\0') goto LAB_003ea97c;
LAB_003eabc4:
    local_58 = &local_8;
    if (bVar2) goto LAB_003eb068;
    uVar21 = 0;
    bVar5 = false;
LAB_003eabd8:
    if ((*(char *)(lVar15 + 0x20) != '\0') && (*(byte *)(lVar15 + 0x49) == uVar20))
    goto LAB_003eacd0;
LAB_003eabec:
    if ((*(byte *)(lVar15 + 0x48) != uVar20) &&
       (pvVar16 = memchr((void *)(lVar15 + 0x72),uVar20,__n), pvVar16 != (void *)0x0)) {
      uVar20 = (int)pvVar16 - (int)(void *)(lVar15 + 0x72);
      if (0xf < (int)uVar20) {
        uVar20 = uVar20 - 6;
      }
      if (uVar22 < uVar21) {
        bVar5 = true;
      }
      else {
        uVar14 = uVar21 * uVar10;
        iVar11 = iVar11 + 1;
        uVar21 = uVar20 + uVar14;
        bVar5 = (bool)(bVar5 | ~uVar20 < uVar14);
      }
LAB_003eac40:
      if (local_30 == (long *)0x0) goto LAB_003ead50;
LAB_003eac48:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) {
LAB_003eaf8c:
          local_28 = 0xffffffff;
                    /* try { // try from 003eaf90 to 004eaf93 has its CatchHandler @ 003eb154 */
                    /* catch() { ... } // from try @ 003ea7e8 with catch @ 003eaf94
                       catch() { ... } // from try @ 003eaddc with catch @ 003eaf94 */
          uVar20 = (**(code **)(*local_30 + 0x48))();
          if (uVar20 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003ead50;
          }
          goto LAB_003eac7c;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
                    /* try { // try from 003eaf70 to 004eaf73 has its CatchHandler @ 003eb0e8 */
        if (local_30 == (long *)0x0) goto LAB_003ead50;
        pbVar18 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar18) goto LAB_003eaf8c;
      }
      uVar20 = (uint)*pbVar18;
LAB_003eac7c:
      local_28 = uVar20;
      if (local_40 == (long *)0x0) goto LAB_003eaca4;
      cVar6 = '\0';
                    /* try { // try from 003eac90 to 004eac93 has its CatchHandler @ 003eb054 */
      do {
        cVar17 = '\0';
        if ((int)local_38 == -1) {
                    /* try { // try from 003ead6c to 004ead6f has its CatchHandler @ 003eb044 */
                    /* try { // try from 003ead78 to 004ead7b has its CatchHandler @ 003eb0c0 */
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar20 = (uint)*(byte *)local_40[2];
          }
          else {
                    /* try { // try from 003eaff4 to 004eaff7 has its CatchHandler @ 003ea200 */
            uVar20 = (**(code **)(*local_40 + 0x48))();
                    /* catch() { ... } // from try @ 003ea3b0 with catch @ 003eaff8
                       catch() { ... } // from try @ 003ea5ec with catch @ 003eaff8
                       catch() { ... } // from try @ 003ea6f0 with catch @ 003eaff8
                       catch() { ... } // from try @ 003eacf8 with catch @ 003eaff8
                       catch() { ... } // from try @ 003ead44 with catch @ 003eaff8
                       catch() { ... } // from try @ 003eae0c with catch @ 003eaff8
                       catch() { ... } // from try @ 003eaf3c with catch @ 003eaff8 */
            if (uVar20 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar17 = cVar9;
              goto LAB_003eac9c;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar20);
          cVar17 = '\0';
        }
LAB_003eac9c:
        if (cVar6 == cVar17) goto LAB_003eaae4;
LAB_003eaca4:
        if (local_30 == (long *)0x0) {
LAB_003eafc4:
          uVar20 = 0xff;
          goto LAB_003eabd8;
        }
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar14 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar14 = (**(code **)(*local_30 + 0x48))();
            if (uVar14 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003eafc4;
            }
          }
          uVar20 = uVar14 & 0xff;
          local_28 = uVar14;
          goto LAB_003eabd8;
        }
        uVar20 = local_28 & 0xff;
        if ((*(char *)(lVar15 + 0x20) == '\0') || (*(byte *)(lVar15 + 0x49) != uVar20))
        goto LAB_003eabec;
LAB_003eacd0:
        if (iVar11 == 0) {
          bVar3 = true;
          iVar11 = 0;
          goto LAB_003eaaec;
        }
        lVar19 = *(long *)(local_8 + -0x18);
        uVar1 = lVar19 + 1;
                    /* try { // try from 003eacf8 to 004eacfb has its CatchHandler @ 003eaff8 */
        if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar1);
          lVar19 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar19] = (char)iVar11;
        iVar11 = 0;
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003eac40;
                    /* try { // try from 003ead3c to 004ead3f has its CatchHandler @ 003eb01c */
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar1;
                    /* try { // try from 003ead44 to 004ead47 has its CatchHandler @ 003eaff8 */
        local_8[uVar1] = 0;
        if (local_30 != (long *)0x0) goto LAB_003eac48;
LAB_003ead50:
                    /* try { // try from 003ead50 to 004ead53 has its CatchHandler @ 003eb06c */
        if (local_40 == (long *)0x0) goto LAB_003eaae4;
                    /* try { // try from 003ead60 to 004ead63 has its CatchHandler @ 003eb0c0 */
        cVar6 = cVar9;
      } while( true );
    }
  }
LAB_003eaf58:
  bVar3 = false;
LAB_003eaaec:
  local_58 = &local_8;
  if (*(long *)(local_8 + -0x18) == 0) {
    if ((iVar11 == 0) <= bVar7) {
LAB_003eaf14:
      if (!bVar3) {
        if (bVar5) {
          *param_8 = -1;
                    /* try { // try from 003eaf30 to 004eaf33 has its CatchHandler @ 003eb034 */
          *param_7 = 4;
        }
        else {
                    /* catch() { ... } // from try @ 003ead3c with catch @ 003eb01c */
          *param_8 = (uVar21 ^ -local_6c) + local_6c;
                    /* catch() { ... } // from try @ 003ea8d8 with catch @ 003eb02c
                       catch() { ... } // from try @ 003eadd0 with catch @ 003eb02c
                       catch() { ... } // from try @ 003eade8 with catch @ 003eb02c */
        }
        goto LAB_003eab20;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar11);
    cVar9 = FUN_003ee0cc(*(undefined8 *)(lVar15 + 0x10),*(undefined8 *)(lVar15 + 0x18),local_58);
    if (cVar9 == '\0') {
      *param_7 = 4;
    }
    if (((iVar11 == 0) <= bVar7) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_003eaf14;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_003eab20:
  if (bVar2) {
    *param_7 = *param_7 | 2;
  }
  auVar4._8_4_ = local_28;
  auVar4._0_8_ = local_30;
  auVar4._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 003eaa6c with catch @ 003eb044
                       catch() { ... } // from try @ 003ead6c with catch @ 003eb044 */
    FUN_003dca9c(local_8 + -0x18,auStack_10);
  }
  return auVar4;
code_r0x003eafe0:
  local_40 = (long *)0x0;
  iVar13 = 1;
  goto LAB_003eaa1c;
LAB_003eaae4:
  bVar3 = false;
  bVar2 = true;
  goto LAB_003eaaec;
}


==================================================================

### FUNC 003eb0ac (20 bytes) name=FUN_003eb0ac

void FUN_003eb0ac(void)

{
  FUN_003ea730();
                    /* catch() { ... } // from try @ 003ea85c with catch @ 003eb0b8
                       catch() { ... } // from try @ 003eadf4 with catch @ 003eb0b8 */
  return;
}


==================================================================

### FUNC 003eb0c0 (2384 bytes) name=FUN_003eb0c0

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003eb0c0(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long *param_8)

{
  bool bVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  bool bVar4;
  char cVar5;
  bool bVar6;
  bool bVar7;
  byte bVar8;
  char cVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  void *pvVar15;
  char cVar16;
  byte *pbVar17;
  ulong uVar18;
  long lVar19;
  uint uVar20;
  ulong uVar21;
  ulong __n;
  ulong uVar22;
  ulong uVar23;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
                    /* catch() { ... } // from try @ 003ead60 with catch @ 003eb0c0
                       catch() { ... } // from try @ 003ead78 with catch @ 003eb0c0 */
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
                    /* catch() { ... } // from try @ 003eaf70 with catch @ 003eb0e8 */
                    /* try { // try from 003eb0f8 to 004eb11f has its CatchHandler @ 003eb120 */
  lVar14 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar13 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar13 == 0x40) {
    uVar23 = 8;
  }
  else {
                    /* catch() { ... } // from try @ 003eb0f8 with catch @ 003eb120 */
    uVar23 = 0x10;
    if (uVar13 != 8) {
      uVar23 = 10;
    }
  }
  iVar10 = FUN_003e3e48(&local_30);
  iVar11 = FUN_003e3e48(&local_40);
                    /* catch() { ... } // from try @ 003eae30 with catch @ 003eb154
                       catch() { ... } // from try @ 003eaf90 with catch @ 003eb154 */
  if ((iVar10 == -1) == (iVar11 == -1)) {
    uVar20 = 0;
    bVar7 = false;
LAB_003eb7a4:
    cVar9 = *(char *)(lVar14 + 0x20);
    bVar1 = true;
    iVar10 = 0;
    bVar6 = false;
LAB_003eb50c:
    if ((int)uVar23 == 0x10) goto LAB_003eb514;
LAB_003eb2d4:
    __n = (ulong)(int)uVar23;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 == '\0') goto LAB_003eb2f4;
LAB_003eb534:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar9 = *(char *)(lVar14 + 0x88);
    uVar22 = 0;
    if (uVar23 != 0) {
      uVar22 = 0xffffffffffffffff / uVar23;
    }
    if (cVar9 != '\0') goto LAB_003eb558;
LAB_003eb30c:
    if (bVar1) {
LAB_003eb9f8:
      uVar21 = 0;
      bVar4 = false;
      bVar2 = false;
      goto LAB_003eb480;
    }
                    /* try { // try from 003eb314 to 004eb317 has its CatchHandler @ 003eb438 */
    uVar21 = 0;
                    /* try { // try from 003eb31c to 004eb3fb has its CatchHandler @ 003eb22c */
    bVar4 = false;
LAB_003eb328:
    if (10 < __n) goto LAB_003eb3d4;
LAB_003eb330:
    if ((0x2f < uVar20) && (uVar20 < (int)__n + 0x30U)) {
      uVar13 = uVar20 - 0x30;
LAB_003eb348:
      if (uVar21 <= uVar22) goto LAB_003eb410;
LAB_003eb350:
      bVar4 = true;
      if (local_30 == (long *)0x0) goto LAB_003eb438;
LAB_003eb35c:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar17 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar17) {
LAB_003eb830:
          local_28 = 0xffffffff;
          uVar13 = (**(code **)(*local_30 + 0x48))();
          if (uVar13 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003eb438;
          }
          goto LAB_003eb38c;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
                    /* try { // try from 003eb81c to 004eb81f has its CatchHandler @ 003eb708 */
        if (local_30 == (long *)0x0) goto LAB_003eb438;
        pbVar17 = (byte *)local_30[2];
                    /* catch() { ... } // from try @ 003eb8f4 with catch @ 003eb828
                       catch() { ... } // from try @ 003eb93c with catch @ 003eb828 */
        if ((byte *)local_30[3] <= pbVar17) goto LAB_003eb830;
      }
      uVar13 = (uint)*pbVar17;
LAB_003eb38c:
      iVar11 = 0;
      local_28 = uVar13;
      if (local_40 == (long *)0x0) goto LAB_003eb3b4;
      iVar12 = 0;
      if ((int)local_38 == -1) goto LAB_003eb454;
LAB_003eb3ac:
      if (iVar11 != iVar12) {
LAB_003eb3b4:
        do {
          if (local_30 == (long *)0x0) {
LAB_003eb8e0:
            uVar20 = 0xff;
            goto LAB_003eb328;
          }
          if (local_28 == 0xffffffff) {
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar13 = (uint)*(byte *)local_30[2];
            }
            else {
              uVar13 = (**(code **)(*local_30 + 0x48))();
              if (uVar13 == 0xffffffff) {
                local_30 = (long *)0x0;
                goto LAB_003eb8e0;
              }
            }
                    /* try { // try from 003eb7d4 to 004eb7e7 has its CatchHandler @ 003eb708 */
            uVar20 = uVar13 & 0xff;
            local_28 = uVar13;
            goto LAB_003eb328;
          }
          uVar20 = local_28 & 0xff;
          if (__n < 0xb) goto LAB_003eb330;
LAB_003eb3d4:
          uVar13 = uVar20 - 0x30;
          if ((uVar13 & 0xff) < 10) goto LAB_003eb348;
          if ((uVar20 - 0x61 & 0xff) < 6) {
            uVar13 = uVar20 - 0x57;
            goto LAB_003eb348;
          }
          if (5 < (uVar20 - 0x41 & 0xff)) goto LAB_003eb8e8;
          uVar13 = uVar20 - 0x37;
          if (uVar22 < uVar21) goto LAB_003eb350;
LAB_003eb410:
          iVar10 = iVar10 + 1;
          uVar18 = uVar21 * uVar23;
          uVar21 = (long)(int)uVar13 + uVar18;
          bVar4 = (bool)(bVar4 | (ulong)~(long)(int)uVar13 < uVar18);
          if (local_30 != (long *)0x0) goto LAB_003eb35c;
LAB_003eb438:
                    /* catch() { ... } // from try @ 003eb314 with catch @ 003eb438 */
          if (local_40 == (long *)0x0) break;
          iVar11 = 1;
                    /* try { // try from 003eb448 to 004eb44b has its CatchHandler @ 003eb22c */
          iVar12 = 0;
          if ((int)local_38 != -1) goto LAB_003eb3ac;
LAB_003eb454:
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar13 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar13 = (**(code **)(*local_40 + 0x48))();
            if (uVar13 == 0xffffffff) goto code_r0x003eb970;
          }
          local_38 = CONCAT44(local_38._4_4_,uVar13);
          if (iVar11 == 0) break;
        } while( true );
      }
      goto LAB_003eb478;
    }
  }
  else {
    bVar8 = FUN_003e3e48(&local_30);
    uVar20 = (uint)bVar8;
    bVar7 = *(byte *)(lVar14 + 0x6e) == bVar8;
                    /* try { // try from 003eb774 to 004eb7cb has its CatchHandler @ 003eb7f8 */
    if ((bVar7) || (*(byte *)(lVar14 + 0x6f) == bVar8)) {
      cVar9 = *(char *)(lVar14 + 0x20);
      if ((cVar9 == '\0') || (*(byte *)(lVar14 + 0x49) != bVar8)) {
        if (*(byte *)(lVar14 + 0x48) != bVar8) {
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
            }
            local_28 = 0xffffffff;
          }
          iVar10 = FUN_003e3e48(&local_30);
          iVar11 = FUN_003e3e48(&local_40);
          if ((iVar10 == -1) == (iVar11 == -1)) goto LAB_003eb7a4;
          uVar20 = FUN_003e3e48(&local_30);
          uVar20 = uVar20 & 0xff;
          cVar9 = *(char *)(lVar14 + 0x20);
        }
      }
      else {
        cVar9 = '\x01';
      }
    }
    else {
      cVar9 = *(char *)(lVar14 + 0x20);
    }
    iVar10 = 0;
    bVar6 = false;
    do {
      if (((cVar9 != '\0') && (*(byte *)(lVar14 + 0x49) == uVar20)) ||
         (*(byte *)(lVar14 + 0x48) == uVar20)) break;
      iVar11 = (int)uVar23;
      if (*(byte *)(lVar14 + 0x72) == uVar20) {
        if ((iVar11 == 10) < bVar6) goto LAB_003eb230;
        iVar10 = iVar10 + 1;
        if ((iVar11 == 8) || (bVar6 = true, uVar13 == 0)) {
          iVar10 = 0;
          bVar6 = true;
          uVar23 = 8;
        }
      }
      else {
                    /* catch() { ... } // from try @ 003eb294 with catch @ 003eb22c
                       catch() { ... } // from try @ 003eb31c with catch @ 003eb22c
                       catch() { ... } // from try @ 003eb448 with catch @ 003eb22c */
        if (!bVar6) break;
LAB_003eb230:
        if ((*(byte *)(lVar14 + 0x70) != uVar20) && (*(byte *)(lVar14 + 0x71) != uVar20)) {
          bVar1 = false;
          bVar6 = true;
          goto LAB_003eb50c;
        }
        if ((iVar11 != 0x10) && (uVar13 != 0)) {
          bVar1 = false;
          bVar6 = true;
          goto LAB_003eb2d4;
        }
        iVar10 = 0;
        bVar6 = false;
        uVar23 = 0x10;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = 0xffffffff;
      }
      iVar11 = FUN_003e3e48(&local_30);
                    /* try { // try from 003eb294 to 004eb2c3 has its CatchHandler @ 003eb22c */
      iVar12 = FUN_003e3e48(&local_40);
      if ((iVar11 == -1) == (iVar12 == -1)) {
        cVar9 = *(char *)(lVar14 + 0x20);
        bVar1 = true;
        goto LAB_003eb50c;
      }
      uVar20 = FUN_003e3e48(&local_30);
      uVar20 = uVar20 & 0xff;
      cVar9 = *(char *)(lVar14 + 0x20);
    } while (bVar6);
    bVar1 = false;
    if ((int)uVar23 != 0x10) goto LAB_003eb2d4;
LAB_003eb514:
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 != '\0') goto LAB_003eb534;
LAB_003eb2f4:
    cVar9 = *(char *)(lVar14 + 0x88);
    uVar22 = 0;
    if (uVar23 != 0) {
      uVar22 = 0xffffffffffffffff / uVar23;
    }
    if (cVar9 == '\0') goto LAB_003eb30c;
LAB_003eb558:
    local_58 = &local_8;
    if (bVar1) goto LAB_003eb9f8;
    uVar21 = 0;
    bVar4 = false;
LAB_003eb56c:
    if ((*(char *)(lVar14 + 0x20) != '\0') && (*(byte *)(lVar14 + 0x49) == uVar20))
    goto LAB_003eb668;
LAB_003eb580:
    if ((*(byte *)(lVar14 + 0x48) != uVar20) &&
       (pvVar15 = memchr((void *)(lVar14 + 0x72),uVar20,__n), pvVar15 != (void *)0x0)) {
      iVar11 = (int)pvVar15 - (int)(void *)(lVar14 + 0x72);
      if (0xf < iVar11) {
        iVar11 = iVar11 + -6;
      }
      if (uVar22 < uVar21) {
        bVar4 = true;
      }
      else {
        iVar10 = iVar10 + 1;
        uVar18 = uVar21 * uVar23;
        uVar21 = (long)iVar11 + uVar18;
        bVar4 = (bool)(bVar4 | (ulong)~(long)iVar11 < uVar18);
      }
LAB_003eb5d8:
      if (local_30 == (long *)0x0) goto LAB_003eb6e8;
LAB_003eb5e0:
                    /* catch() { ... } // from try @ 003eb644 with catch @ 003eb5e4
                       catch() { ... } // from try @ 003eb690 with catch @ 003eb5e4
                       catch() { ... } // from try @ 003eb704 with catch @ 003eb5e4 */
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar17 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar17) {
LAB_003eb91c:
          local_28 = 0xffffffff;
          uVar13 = (**(code **)(*local_30 + 0x48))();
          if (uVar13 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003eb6e8;
          }
          goto LAB_003eb614;
        }
      }
      else {
                    /* try { // try from 003eb8f4 to 004eb907 has its CatchHandler @ 003eb828 */
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003eb6e8;
        pbVar17 = (byte *)local_30[2];
                    /* catch() { ... } // from try @ 003eb894 with catch @ 003eb918 */
        if ((byte *)local_30[3] <= pbVar17) goto LAB_003eb91c;
      }
      uVar13 = (uint)*pbVar17;
LAB_003eb614:
      local_28 = uVar13;
      if (local_40 == (long *)0x0) goto LAB_003eb63c;
      cVar5 = '\0';
      do {
        cVar16 = '\0';
        if ((int)local_38 == -1) {
                    /* try { // try from 003eb704 to 004eb707 has its CatchHandler @ 003eb5e4 */
                    /* catch() { ... } // from try @ 003eb7d4 with catch @ 003eb708
                       catch() { ... } // from try @ 003eb81c with catch @ 003eb708 */
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar13 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar13 = (**(code **)(*local_40 + 0x48))();
            if (uVar13 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar16 = cVar9;
              goto LAB_003eb634;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar13);
          cVar16 = '\0';
        }
LAB_003eb634:
        if (cVar5 == cVar16) goto LAB_003eb478;
LAB_003eb63c:
        if (local_30 == (long *)0x0) {
LAB_003eb954:
          uVar20 = 0xff;
          goto LAB_003eb56c;
        }
                    /* try { // try from 003eb644 to 004eb647 has its CatchHandler @ 003eb5e4 */
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar13 = (uint)*(byte *)local_30[2];
          }
          else {
                    /* try { // try from 003eb93c to 004eb93f has its CatchHandler @ 003eb828 */
            uVar13 = (**(code **)(*local_30 + 0x48))();
            if (uVar13 == 0xffffffff) {
                    /* catch() { ... } // from try @ 003eba94 with catch @ 003eb950
                       catch() { ... } // from try @ 003ebadc with catch @ 003eb950 */
              local_30 = (long *)0x0;
              goto LAB_003eb954;
            }
          }
                    /* catch() { ... } // from try @ 003eb774 with catch @ 003eb7f8 */
          uVar20 = uVar13 & 0xff;
          local_28 = uVar13;
          goto LAB_003eb56c;
        }
        uVar20 = local_28 & 0xff;
        if ((*(char *)(lVar14 + 0x20) == '\0') || (*(byte *)(lVar14 + 0x49) != uVar20))
        goto LAB_003eb580;
LAB_003eb668:
        if (iVar10 == 0) {
          bVar2 = true;
          iVar10 = 0;
          goto LAB_003eb480;
        }
        lVar19 = *(long *)(local_8 + -0x18);
        uVar18 = lVar19 + 1;
                    /* try { // try from 003eb688 to 004eb68b has its CatchHandler @ 003eb6f4 */
                    /* try { // try from 003eb690 to 004eb6df has its CatchHandler @ 003eb5e4 */
        if ((*(ulong *)(local_8 + -0x10) < uVar18) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar18);
          lVar19 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar19] = (char)iVar10;
        iVar10 = 0;
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003eb5d8;
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar18;
        local_8[uVar18] = 0;
        if (local_30 != (long *)0x0) goto LAB_003eb5e0;
LAB_003eb6e8:
        if (local_40 == (long *)0x0) goto LAB_003eb478;
                    /* catch() { ... } // from try @ 003eb688 with catch @ 003eb6f4 */
        cVar5 = cVar9;
      } while( true );
    }
  }
LAB_003eb8e8:
  bVar2 = false;
LAB_003eb480:
  local_58 = &local_8;
  if (*(long *)(local_8 + -0x18) == 0) {
    if ((iVar10 == 0) <= bVar6) {
LAB_003eb8a4:
      if (!bVar2) {
        if (bVar4) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = (uVar21 ^ -(ulong)bVar7) + (ulong)bVar7;
                    /* try { // try from 003eb9bc to 004eb9bf has its CatchHandler @ 003ebab8 */
        }
        goto LAB_003eb4b4;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar10);
    cVar9 = FUN_003ee0cc(*(undefined8 *)(lVar14 + 0x10),*(undefined8 *)(lVar14 + 0x18),local_58);
    if (cVar9 == '\0') {
      *param_7 = 4;
    }
                    /* try { // try from 003eb894 to 004eb8eb has its CatchHandler @ 003eb918 */
    if (((iVar10 == 0) <= bVar6) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_003eb8a4;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_003eb4b4:
  if (bVar1) {
    *param_7 = *param_7 | 2;
  }
  auVar3._8_4_ = local_28;
  auVar3._0_8_ = local_30;
  auVar3._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003dca9c(local_8 + -0x18,auStack_10);
  }
  return auVar3;
code_r0x003eb970:
  local_40 = (long *)0x0;
  iVar12 = 1;
  goto LAB_003eb3ac;
LAB_003eb478:
  bVar2 = false;
  bVar1 = true;
  goto LAB_003eb480;
}


==================================================================

### FUNC 003eba3c (20 bytes) name=FUN_003eba3c

void FUN_003eba3c(void)

{
  FUN_003eb0c0();
  return;
}


==================================================================

### FUNC 003eba50 (108 bytes) name=FUN_003eba50

void FUN_003eba50(void)

{
  uint uVar1;
  long in_x5;
  undefined8 *in_x7;
  undefined8 local_8;
  
  uVar1 = *(uint *)(in_x5 + 0x18);
                    /* try { // try from 003eba6c to 004eba6f has its CatchHandler @ 003ebae0 */
                    /* try { // try from 003eba74 to 004eba8b has its CatchHandler @ 003ebab8 */
  *(uint *)(in_x5 + 0x18) = uVar1 & 0xffffffb5 | 8;
  FUN_003eb0c0();
  *(uint *)(in_x5 + 0x18) = uVar1;
                    /* try { // try from 003eba94 to 004ebaa7 has its CatchHandler @ 003eb950 */
  *in_x7 = local_8;
                    /* catch() { ... } // from try @ 003eb9bc with catch @ 003ebab8
                       catch() { ... } // from try @ 003eba74 with catch @ 003ebab8 */
  return;
}


==================================================================

### FUNC 003ebabc (2416 bytes) name=FUN_003ebabc

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003ebabc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,ulong *param_8)

{
  ulong uVar1;
  ulong uVar2;
  bool bVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  bool bVar6;
  char cVar7;
  bool bVar8;
  bool bVar9;
  byte bVar10;
  char cVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  uint uVar16;
  long lVar17;
  void *pvVar18;
  char cVar19;
  byte *pbVar20;
  ulong uVar21;
  long lVar22;
  uint uVar23;
  ulong uVar24;
  ulong uVar25;
  ulong uVar26;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
                    /* try { // try from 003ebadc to 004ebadf has its CatchHandler @ 003eb950 */
                    /* catch() { ... } // from try @ 003eba6c with catch @ 003ebae0 */
  lVar17 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar16 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar16 == 0x40) {
    iVar15 = 8;
  }
  else {
    iVar15 = 0x10;
                    /* catch() { ... } // from try @ 003ebbe8 with catch @ 003ebb20
                       catch() { ... } // from try @ 003ebc30 with catch @ 003ebb20 */
    if (uVar16 != 8) {
      iVar15 = 10;
    }
  }
  iVar12 = FUN_003e3e48(&local_30);
  iVar13 = FUN_003e3e48(&local_40);
  if ((iVar12 == -1) == (iVar13 == -1)) {
    uVar23 = 0;
    bVar9 = false;
LAB_003ec1a8:
    cVar11 = *(char *)(lVar17 + 0x20);
    bVar3 = true;
    iVar12 = 0;
    bVar8 = false;
LAB_003ebf24:
    if (iVar15 == 0x10) goto LAB_003ebf2c;
LAB_003ebcd0:
    uVar25 = (ulong)iVar15;
  }
  else {
    bVar10 = FUN_003e3e48(&local_30);
    uVar23 = (uint)bVar10;
    bVar9 = *(byte *)(lVar17 + 0x6e) == bVar10;
    if ((bVar9) || (*(byte *)(lVar17 + 0x6f) == bVar10)) {
      cVar11 = *(char *)(lVar17 + 0x20);
      if ((cVar11 == '\0') || (*(byte *)(lVar17 + 0x49) != bVar10)) {
        if (*(byte *)(lVar17 + 0x48) != bVar10) {
                    /* try { // try from 003ebb8c to 004ebbdf has its CatchHandler @ 003ebc0c */
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
            }
            local_28 = 0xffffffff;
          }
          iVar12 = FUN_003e3e48(&local_30);
          iVar13 = FUN_003e3e48(&local_40);
          if ((iVar12 == -1) == (iVar13 == -1)) goto LAB_003ec1a8;
          uVar23 = FUN_003e3e48(&local_30);
                    /* try { // try from 003ebbe8 to 004ebbfb has its CatchHandler @ 003ebb20 */
          uVar23 = uVar23 & 0xff;
          cVar11 = *(char *)(lVar17 + 0x20);
        }
      }
      else {
        cVar11 = '\x01';
      }
    }
    else {
      cVar11 = *(char *)(lVar17 + 0x20);
    }
    iVar12 = 0;
    bVar8 = false;
    do {
                    /* catch() { ... } // from try @ 003ebb8c with catch @ 003ebc0c */
      if (((cVar11 != '\0') && (*(byte *)(lVar17 + 0x49) == uVar23)) ||
         (*(byte *)(lVar17 + 0x48) == uVar23)) break;
      if (*(byte *)(lVar17 + 0x72) == uVar23) {
                    /* catch() { ... } // from try @ 003ebeec with catch @ 003ebf6c */
        if ((iVar15 == 10) < bVar8) goto LAB_003ebc2c;
        iVar12 = iVar12 + 1;
        if ((iVar15 == 8) || (bVar8 = true, uVar16 == 0)) {
          iVar12 = 0;
                    /* try { // try from 003ebf90 to 004ebf93 has its CatchHandler @ 003ebe80 */
          bVar8 = true;
          iVar15 = 8;
        }
      }
      else {
        if (!bVar8) break;
LAB_003ebc2c:
                    /* try { // try from 003ebc30 to 004ebc33 has its CatchHandler @ 003ebb20 */
                    /* catch() { ... } // from try @ 003ebd08 with catch @ 003ebc40
                       catch() { ... } // from try @ 003ebd50 with catch @ 003ebc40 */
        if ((*(byte *)(lVar17 + 0x70) != uVar23) && (*(byte *)(lVar17 + 0x71) != uVar23)) {
                    /* catch() { ... } // from try @ 003ec098 with catch @ 003ebfa0
                       catch() { ... } // from try @ 003ec100 with catch @ 003ebfa0 */
          bVar3 = false;
          bVar8 = true;
          goto LAB_003ebf24;
        }
        if ((iVar15 != 0x10) && (uVar16 != 0)) {
          bVar3 = false;
                    /* try { // try from 003ec40c to 004ec40f has its CatchHandler @ 003ec2c0 */
          bVar8 = true;
          goto LAB_003ebcd0;
        }
        iVar12 = 0;
        bVar8 = false;
        iVar15 = 0x10;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
                    /* catch() { ... } // from try @ 003ec370 with catch @ 003ec3e8 */
        }
        local_28 = 0xffffffff;
      }
      iVar13 = FUN_003e3e48(&local_30);
      iVar14 = FUN_003e3e48(&local_40);
      if ((iVar13 == -1) == (iVar14 == -1)) {
        cVar11 = *(char *)(lVar17 + 0x20);
        bVar3 = true;
        goto LAB_003ebf24;
      }
                    /* try { // try from 003ebcac to 004ebcff has its CatchHandler @ 003ebd2c */
      uVar23 = FUN_003e3e48(&local_30);
      uVar23 = uVar23 & 0xff;
      cVar11 = *(char *)(lVar17 + 0x20);
    } while (bVar8);
    bVar3 = false;
    if (iVar15 != 0x10) goto LAB_003ebcd0;
LAB_003ebf2c:
    uVar25 = 0x16;
  }
                    /* try { // try from 003ebf48 to 004ebf5b has its CatchHandler @ 003ebe80 */
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar11 != '\0') {
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
  }
  local_58 = &local_8;
  uVar26 = (ulong)iVar15;
  cVar11 = *(char *)(lVar17 + 0x88);
                    /* try { // try from 003ebd08 to 004ebd1b has its CatchHandler @ 003ebc40 */
  uVar1 = 0x7fffffffffffffff;
  if (bVar9) {
    uVar1 = 0x8000000000000000;
  }
  uVar2 = 0;
  if (uVar26 != 0) {
    uVar2 = uVar1 / uVar26;
  }
  if (cVar11 == '\0') {
    if (bVar3) {
LAB_003ec414:
      uVar24 = 0;
      bVar6 = false;
      bVar4 = false;
                    /* catch() { ... } // from try @ 003ec530 with catch @ 003ec420
                       catch() { ... } // from try @ 003ec584 with catch @ 003ec420 */
      goto LAB_003ebe98;
    }
    uVar24 = 0;
                    /* catch() { ... } // from try @ 003ebcac with catch @ 003ebd2c */
    bVar6 = false;
LAB_003ebd3c:
    if (10 < uVar25) goto LAB_003ebde8;
LAB_003ebd44:
                    /* try { // try from 003ebd50 to 004ebd53 has its CatchHandler @ 003ebc40 */
    if ((0x2f < uVar23) && (uVar23 < (int)uVar25 + 0x30U)) {
      uVar16 = uVar23 - 0x30;
LAB_003ebd5c:
                    /* catch() { ... } // from try @ 003ebe28 with catch @ 003ebd60
                       catch() { ... } // from try @ 003ebe70 with catch @ 003ebd60 */
      if (uVar24 <= uVar2) goto LAB_003ebe24;
LAB_003ebd64:
      bVar6 = true;
      if (local_30 == (long *)0x0) goto LAB_003ebe50;
LAB_003ebd70:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) {
LAB_003ec234:
          local_28 = 0xffffffff;
          uVar16 = (**(code **)(*local_30 + 0x48))();
          if (uVar16 == 0xffffffff) {
            local_30 = (long *)0x0;
                    /* try { // try from 003ec250 to 004ec263 has its CatchHandler @ 003ec120 */
            goto LAB_003ebe50;
          }
          goto LAB_003ebda0;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003ebe50;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) goto LAB_003ec234;
      }
      uVar16 = (uint)*pbVar20;
LAB_003ebda0:
      iVar15 = 0;
      local_28 = uVar16;
      if (local_40 == (long *)0x0) goto LAB_003ebdc8;
      iVar13 = 0;
      if ((int)local_38 == -1) goto LAB_003ebe6c;
LAB_003ebdc0:
      if (iVar15 != iVar13) {
LAB_003ebdc8:
        do {
                    /* try { // try from 003ebdcc to 004ebe1f has its CatchHandler @ 003ebe4c */
          if (local_30 == (long *)0x0) {
LAB_003ec26c:
            uVar23 = 0xff;
            goto LAB_003ebd3c;
          }
          if (local_28 == 0xffffffff) {
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar16 = (uint)*(byte *)local_30[2];
            }
            else {
              uVar16 = (**(code **)(*local_30 + 0x48))();
              if (uVar16 == 0xffffffff) {
                local_30 = (long *)0x0;
                goto LAB_003ec26c;
              }
            }
            uVar23 = uVar16 & 0xff;
            local_28 = uVar16;
            goto LAB_003ebd3c;
          }
          uVar23 = local_28 & 0xff;
          if (uVar25 < 0xb) goto LAB_003ebd44;
LAB_003ebde8:
          uVar16 = uVar23 - 0x30;
          if ((uVar16 & 0xff) < 10) goto LAB_003ebd5c;
          if ((uVar23 - 0x61 & 0xff) < 6) {
            uVar16 = uVar23 - 0x57;
                    /* try { // try from 003ec208 to 004ec247 has its CatchHandler @ 003ec280 */
            goto LAB_003ebd5c;
          }
          if (5 < (uVar23 - 0x41 & 0xff)) goto LAB_003ec274;
          uVar16 = uVar23 - 0x37;
          if (uVar2 < uVar24) goto LAB_003ebd64;
LAB_003ebe24:
                    /* try { // try from 003ebe28 to 004ebe3b has its CatchHandler @ 003ebd60 */
          uVar21 = uVar24 * uVar26;
          iVar12 = iVar12 + 1;
          uVar24 = (long)(int)uVar16 + uVar21;
          bVar6 = (bool)(bVar6 | uVar1 - (long)(int)uVar16 < uVar21);
                    /* catch() { ... } // from try @ 003ebdcc with catch @ 003ebe4c */
          if (local_30 != (long *)0x0) goto LAB_003ebd70;
LAB_003ebe50:
          if (local_40 == (long *)0x0) break;
          iVar15 = 1;
          iVar13 = 0;
          if ((int)local_38 != -1) goto LAB_003ebdc0;
LAB_003ebe6c:
                    /* try { // try from 003ebe70 to 004ebe73 has its CatchHandler @ 003ebd60 */
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar16 = (uint)*(byte *)local_40[2];
          }
          else {
                    /* try { // try from 003ec370 to 004ec3af has its CatchHandler @ 003ec3e8 */
            uVar16 = (**(code **)(*local_40 + 0x48))();
            if (uVar16 == 0xffffffff) goto code_r0x003ec380;
          }
                    /* catch() { ... } // from try @ 003ebf48 with catch @ 003ebe80
                       catch() { ... } // from try @ 003ebf90 with catch @ 003ebe80 */
          local_38 = CONCAT44(local_38._4_4_,uVar16);
          if (iVar15 == 0) break;
        } while( true );
      }
      goto LAB_003ebe90;
    }
  }
  else {
    if (bVar3) goto LAB_003ec414;
    uVar24 = 0;
    bVar6 = false;
LAB_003ebfbc:
    if ((*(char *)(lVar17 + 0x20) != '\0') && (*(byte *)(lVar17 + 0x49) == uVar23))
    goto LAB_003ec0bc;
LAB_003ebfd0:
    if ((*(byte *)(lVar17 + 0x48) != uVar23) &&
       (pvVar18 = memchr((void *)(lVar17 + 0x72),uVar23,uVar25), pvVar18 != (void *)0x0)) {
      iVar15 = (int)pvVar18 - (int)(void *)(lVar17 + 0x72);
      if (0xf < iVar15) {
        iVar15 = iVar15 + -6;
      }
      if (uVar2 < uVar24) {
        bVar6 = true;
      }
      else {
        uVar21 = uVar24 * uVar26;
        iVar12 = iVar12 + 1;
        uVar24 = (long)iVar15 + uVar21;
        bVar6 = (bool)(bVar6 | uVar1 - (long)iVar15 < uVar21);
      }
LAB_003ec02c:
      if (local_30 == (long *)0x0) goto LAB_003ec13c;
LAB_003ec034:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
                    /* try { // try from 003ec050 to 004ec08f has its CatchHandler @ 003ec0dc */
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) {
LAB_003ec32c:
          local_28 = 0xffffffff;
          uVar16 = (**(code **)(*local_30 + 0x48))();
          if (uVar16 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003ec13c;
          }
          goto LAB_003ec068;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003ec13c;
        pbVar20 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar20) goto LAB_003ec32c;
      }
      uVar16 = (uint)*pbVar20;
LAB_003ec068:
      local_28 = uVar16;
      if (local_40 == (long *)0x0) goto LAB_003ec090;
      cVar7 = '\0';
      do {
        cVar19 = '\0';
        if ((int)local_38 == -1) {
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar16 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar16 = (**(code **)(*local_40 + 0x48))();
            if (uVar16 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar19 = cVar11;
              goto LAB_003ec088;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar16);
          cVar19 = '\0';
        }
LAB_003ec088:
        if (cVar19 == cVar7) goto LAB_003ebe90;
LAB_003ec090:
        if (local_30 == (long *)0x0) {
LAB_003ec364:
          uVar23 = 0xff;
          goto LAB_003ebfbc;
        }
                    /* try { // try from 003ec098 to 004ec0ab has its CatchHandler @ 003ebfa0 */
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar16 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar16 = (**(code **)(*local_30 + 0x48))();
            if (uVar16 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003ec364;
            }
          }
          uVar23 = uVar16 & 0xff;
          local_28 = uVar16;
          goto LAB_003ebfbc;
        }
        uVar23 = local_28 & 0xff;
        if ((*(char *)(lVar17 + 0x20) == '\0') || (*(byte *)(lVar17 + 0x49) != uVar23))
        goto LAB_003ebfd0;
LAB_003ec0bc:
        if (iVar12 == 0) {
          bVar4 = true;
          iVar12 = 0;
          goto LAB_003ebe98;
        }
        lVar22 = *(long *)(local_8 + -0x18);
        uVar21 = lVar22 + 1;
                    /* catch() { ... } // from try @ 003ec050 with catch @ 003ec0dc */
        if ((*(ulong *)(local_8 + -0x10) < uVar21) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar21);
                    /* try { // try from 003ec100 to 004ec103 has its CatchHandler @ 003ebfa0 */
          lVar22 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar22] = (char)iVar12;
        iVar12 = 0;
                    /* catch() { ... } // from try @ 003ec250 with catch @ 003ec120
                       catch() { ... } // from try @ 003ec2a4 with catch @ 003ec120 */
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003ec02c;
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar21;
        local_8[uVar21] = 0;
        if (local_30 != (long *)0x0) goto LAB_003ec034;
LAB_003ec13c:
        if (local_40 == (long *)0x0) goto LAB_003ebe90;
        cVar7 = cVar11;
      } while( true );
    }
  }
LAB_003ec274:
  bVar4 = false;
                    /* catch() { ... } // from try @ 003ec208 with catch @ 003ec280 */
  if (*(long *)(local_8 + -0x18) != 0) goto LAB_003ec284;
LAB_003ebea4:
  if ((iVar12 == 0) <= bVar8) goto LAB_003ec2cc;
LAB_003ebeb8:
  *param_8 = 0;
  *param_7 = 4;
LAB_003ebecc:
  if (bVar3) {
    *param_7 = *param_7 | 2;
  }
  auVar5._8_4_ = local_28;
  auVar5._0_8_ = local_30;
  auVar5._12_4_ = uStack_24;
                    /* try { // try from 003ebeec to 004ebf3f has its CatchHandler @ 003ebf6c */
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003dca9c(local_8 + -0x18,auStack_10);
  }
  return auVar5;
code_r0x003ec380:
  local_40 = (long *)0x0;
  iVar13 = 1;
  goto LAB_003ebdc0;
LAB_003ebe90:
  bVar4 = false;
  bVar3 = true;
LAB_003ebe98:
  if (*(long *)(local_8 + -0x18) == 0) goto LAB_003ebea4;
LAB_003ec284:
  FUN_004116e0(local_58,iVar12);
  cVar11 = FUN_003ee0cc(*(undefined8 *)(lVar17 + 0x10),*(undefined8 *)(lVar17 + 0x18),local_58);
                    /* try { // try from 003ec2a4 to 004ec2a7 has its CatchHandler @ 003ec120 */
  if (cVar11 == '\0') {
    *param_7 = 4;
  }
                    /* catch() { ... } // from try @ 003ec3b8 with catch @ 003ec2c0
                       catch() { ... } // from try @ 003ec40c with catch @ 003ec2c0 */
  if (((iVar12 == 0) <= bVar8) || (*(long *)(local_8 + -0x18) != 0)) {
LAB_003ec2cc:
    if (!bVar4) {
      if (bVar6) {
        uVar25 = 0x7fffffffffffffff;
        if (bVar9) {
          uVar25 = 0x8000000000000000;
        }
        *param_8 = uVar25;
        *param_7 = 4;
      }
      else {
                    /* try { // try from 003ec3b8 to 004ec3cb has its CatchHandler @ 003ec2c0 */
        uVar25 = -uVar24;
        if (!bVar9) {
          uVar25 = uVar24;
        }
        *param_8 = uVar25;
      }
      goto LAB_003ebecc;
    }
  }
  goto LAB_003ebeb8;
}


==================================================================

### FUNC 003ec458 (20 bytes) name=FUN_003ec458

void FUN_003ec458(void)

{
  FUN_003ebabc();
  return;
}


==================================================================

### FUNC 003ec46c (2384 bytes) name=FUN_003ec46c

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_003ec46c(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long *param_8)

{
  bool bVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  bool bVar4;
  char cVar5;
  bool bVar6;
  bool bVar7;
  byte bVar8;
  char cVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  void *pvVar15;
  char cVar16;
  byte *pbVar17;
  ulong uVar18;
  long lVar19;
  uint uVar20;
  ulong uVar21;
  ulong __n;
  ulong uVar22;
  ulong uVar23;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  uint local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (uint)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar14 = FUN_003e3d64(auStack_18,param_6 + 0xd0);
  uVar13 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar13 == 0x40) {
    uVar23 = 8;
  }
  else {
    uVar23 = 0x10;
    if (uVar13 != 8) {
      uVar23 = 10;
    }
  }
  iVar10 = FUN_003e3e48(&local_30);
                    /* try { // try from 003ec4e8 to 004ec527 has its CatchHandler @ 003ec560 */
  iVar11 = FUN_003e3e48(&local_40);
  if ((iVar10 == -1) == (iVar11 == -1)) {
    uVar20 = 0;
    bVar7 = false;
LAB_003ecb50:
    cVar9 = *(char *)(lVar14 + 0x20);
    bVar1 = true;
    iVar10 = 0;
    bVar6 = false;
LAB_003ec8b8:
    if ((int)uVar23 == 0x10) goto LAB_003ec8c0;
LAB_003ec680:
    __n = (ulong)(int)uVar23;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 == '\0') goto LAB_003ec6a0;
LAB_003ec8e0:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar9 = *(char *)(lVar14 + 0x88);
    uVar22 = 0;
    if (uVar23 != 0) {
      uVar22 = 0xffffffffffffffff / uVar23;
    }
    if (cVar9 != '\0') goto LAB_003ec904;
LAB_003ec6b8:
    if (bVar1) {
LAB_003ecda4:
      uVar21 = 0;
      bVar4 = false;
      bVar2 = false;
      goto LAB_003ec82c;
    }
    uVar21 = 0;
    bVar4 = false;
LAB_003ec6d4:
    if (10 < __n) goto LAB_003ec780;
LAB_003ec6dc:
    if ((0x2f < uVar20) && (uVar20 < (int)__n + 0x30U)) {
      uVar13 = uVar20 - 0x30;
LAB_003ec6f4:
      if (uVar21 <= uVar22) goto LAB_003ec7bc;
LAB_003ec6fc:
      bVar4 = true;
      if (local_30 == (long *)0x0) goto LAB_003ec7e4;
LAB_003ec708:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
                    /* try { // try from 003ec720 to 004ec723 has its CatchHandler @ 003ec728 */
        pbVar17 = (byte *)local_30[2];
                    /* catch() { ... } // from try @ 003ec664 with catch @ 003ec728
                       catch() { ... } // from try @ 003ec720 with catch @ 003ec728 */
        if ((byte *)local_30[3] <= pbVar17) {
LAB_003ecbdc:
          local_28 = 0xffffffff;
          uVar13 = (**(code **)(*local_30 + 0x48))();
          if (uVar13 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003ec7e4;
          }
          goto LAB_003ec738;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003ec7e4;
        pbVar17 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar17) goto LAB_003ecbdc;
      }
      uVar13 = (uint)*pbVar17;
LAB_003ec738:
      iVar11 = 0;
      local_28 = uVar13;
      if (local_40 == (long *)0x0) goto LAB_003ec760;
                    /* try { // try from 003ec74c to 004ec74f has its CatchHandler @ 003ec5a0 */
      iVar12 = 0;
      if ((int)local_38 == -1) goto LAB_003ec800;
LAB_003ec758:
      if (iVar11 != iVar12) {
LAB_003ec760:
        do {
                    /* catch() { ... } // from try @ 003eca04 with catch @ 003ec760
                       catch() { ... } // from try @ 003ece50 with catch @ 003ec760 */
          if (local_30 == (long *)0x0) {
LAB_003ecc8c:
            uVar20 = 0xff;
            goto LAB_003ec6d4;
          }
          if (local_28 == 0xffffffff) {
            if ((byte *)local_30[2] < (byte *)local_30[3]) {
              uVar13 = (uint)*(byte *)local_30[2];
            }
            else {
              uVar13 = (**(code **)(*local_30 + 0x48))();
              if (uVar13 == 0xffffffff) {
                local_30 = (long *)0x0;
                goto LAB_003ecc8c;
              }
            }
            uVar20 = uVar13 & 0xff;
            local_28 = uVar13;
            goto LAB_003ec6d4;
          }
          uVar20 = local_28 & 0xff;
          if (__n < 0xb) goto LAB_003ec6dc;
LAB_003ec780:
          uVar13 = uVar20 - 0x30;
          if ((uVar13 & 0xff) < 10) goto LAB_003ec6f4;
          if ((uVar20 - 0x61 & 0xff) < 6) {
            uVar13 = uVar20 - 0x57;
            goto LAB_003ec6f4;
          }
          if (5 < (uVar20 - 0x41 & 0xff)) goto LAB_003ecc94;
          uVar13 = uVar20 - 0x37;
          if (uVar22 < uVar21) goto LAB_003ec6fc;
LAB_003ec7bc:
          iVar10 = iVar10 + 1;
          uVar18 = uVar21 * uVar23;
          uVar21 = (long)(int)uVar13 + uVar18;
          bVar4 = (bool)(bVar4 | (ulong)~(long)(int)uVar13 < uVar18);
          if (local_30 != (long *)0x0) goto LAB_003ec708;
LAB_003ec7e4:
          if (local_40 == (long *)0x0) break;
          iVar11 = 1;
          iVar12 = 0;
          if ((int)local_38 != -1) goto LAB_003ec758;
LAB_003ec800:
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar13 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar13 = (**(code **)(*local_40 + 0x48))();
            if (uVar13 == 0xffffffff) goto code_r0x003ecd1c;
          }
          local_38 = CONCAT44(local_38._4_4_,uVar13);
          if (iVar11 == 0) break;
        } while( true );
      }
      goto LAB_003ec824;
    }
  }
  else {
    bVar8 = FUN_003e3e48(&local_30);
    uVar20 = (uint)bVar8;
    bVar7 = *(byte *)(lVar14 + 0x6e) == bVar8;
    if ((bVar7) || (*(byte *)(lVar14 + 0x6f) == bVar8)) {
      cVar9 = *(char *)(lVar14 + 0x20);
      if ((cVar9 == '\0') || (*(byte *)(lVar14 + 0x49) != bVar8)) {
                    /* try { // try from 003ec530 to 004ec543 has its CatchHandler @ 003ec420 */
        if (*(byte *)(lVar14 + 0x48) != bVar8) {
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 1;
            }
            else {
              FUN_003dcae0();
            }
                    /* catch() { ... } // from try @ 003ec4e8 with catch @ 003ec560 */
            local_28 = 0xffffffff;
          }
          iVar10 = FUN_003e3e48(&local_30);
          iVar11 = FUN_003e3e48(&local_40);
                    /* try { // try from 003ec584 to 004ec587 has its CatchHandler @ 003ec420 */
          if ((iVar10 == -1) == (iVar11 == -1)) goto LAB_003ecb50;
          uVar20 = FUN_003e3e48(&local_30);
          uVar20 = uVar20 & 0xff;
          cVar9 = *(char *)(lVar14 + 0x20);
        }
      }
      else {
        cVar9 = '\x01';
      }
    }
    else {
      cVar9 = *(char *)(lVar14 + 0x20);
    }
                    /* catch() { ... } // from try @ 003ec6ac with catch @ 003ec5a0
                       catch() { ... } // from try @ 003ec74c with catch @ 003ec5a0 */
    iVar10 = 0;
    bVar6 = false;
    do {
      if (((cVar9 != '\0') && (*(byte *)(lVar14 + 0x49) == uVar20)) ||
         (*(byte *)(lVar14 + 0x48) == uVar20)) break;
      iVar11 = (int)uVar23;
      if (*(byte *)(lVar14 + 0x72) == uVar20) {
        if ((iVar11 == 10) < bVar6) goto LAB_003ec5dc;
        iVar10 = iVar10 + 1;
        if ((iVar11 == 8) || (bVar6 = true, uVar13 == 0)) {
          iVar10 = 0;
          bVar6 = true;
          uVar23 = 8;
        }
      }
      else {
        if (!bVar6) break;
LAB_003ec5dc:
        if ((*(byte *)(lVar14 + 0x70) != uVar20) && (*(byte *)(lVar14 + 0x71) != uVar20)) {
          bVar1 = false;
          bVar6 = true;
          goto LAB_003ec8b8;
        }
        if ((iVar11 != 0x10) && (uVar13 != 0)) {
          bVar1 = false;
          bVar6 = true;
          goto LAB_003ec680;
        }
        iVar10 = 0;
        bVar6 = false;
        uVar23 = 0x10;
      }
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 1;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = 0xffffffff;
      }
      iVar11 = FUN_003e3e48(&local_30);
      iVar12 = FUN_003e3e48(&local_40);
      if ((iVar11 == -1) == (iVar12 == -1)) {
        cVar9 = *(char *)(lVar14 + 0x20);
        bVar1 = true;
        goto LAB_003ec8b8;
      }
      uVar20 = FUN_003e3e48(&local_30);
                    /* try { // try from 003ec664 to 004ec6a3 has its CatchHandler @ 003ec728 */
      uVar20 = uVar20 & 0xff;
      cVar9 = *(char *)(lVar14 + 0x20);
    } while (bVar6);
    bVar1 = false;
    if ((int)uVar23 != 0x10) goto LAB_003ec680;
LAB_003ec8c0:
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar9 != '\0') goto LAB_003ec8e0;
LAB_003ec6a0:
    cVar9 = *(char *)(lVar14 + 0x88);
                    /* try { // try from 003ec6ac to 004ec6bf has its CatchHandler @ 003ec5a0 */
    uVar22 = 0;
    if (uVar23 != 0) {
      uVar22 = 0xffffffffffffffff / uVar23;
    }
    if (cVar9 == '\0') goto LAB_003ec6b8;
LAB_003ec904:
    local_58 = &local_8;
    if (bVar1) goto LAB_003ecda4;
    uVar21 = 0;
    bVar4 = false;
LAB_003ec918:
    if ((*(char *)(lVar14 + 0x20) != '\0') && (*(byte *)(lVar14 + 0x49) == uVar20))
    goto LAB_003eca14;
LAB_003ec92c:
    if ((*(byte *)(lVar14 + 0x48) != uVar20) &&
       (pvVar15 = memchr((void *)(lVar14 + 0x72),uVar20,__n), pvVar15 != (void *)0x0)) {
      iVar11 = (int)pvVar15 - (int)(void *)(lVar14 + 0x72);
      if (0xf < iVar11) {
        iVar11 = iVar11 + -6;
      }
      if (uVar22 < uVar21) {
        bVar4 = true;
      }
      else {
        iVar10 = iVar10 + 1;
        uVar18 = uVar21 * uVar23;
        uVar21 = (long)iVar11 + uVar18;
        bVar4 = (bool)(bVar4 | (ulong)~(long)iVar11 < uVar18);
      }
LAB_003ec984:
      if (local_30 == (long *)0x0) goto LAB_003eca94;
LAB_003ec98c:
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 1;
        pbVar17 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar17) {
LAB_003eccc8:
          local_28 = 0xffffffff;
          uVar13 = (**(code **)(*local_30 + 0x48))();
          if (uVar13 == 0xffffffff) {
            local_30 = (long *)0x0;
            goto LAB_003eca94;
          }
          goto LAB_003ec9c0;
        }
      }
      else {
        (**(code **)(*local_30 + 0x50))();
        local_28 = 0xffffffff;
        if (local_30 == (long *)0x0) goto LAB_003eca94;
        pbVar17 = (byte *)local_30[2];
        if ((byte *)local_30[3] <= pbVar17) goto LAB_003eccc8;
      }
      uVar13 = (uint)*pbVar17;
LAB_003ec9c0:
      local_28 = uVar13;
      if (local_40 == (long *)0x0) goto LAB_003ec9e8;
      cVar5 = '\0';
      do {
        cVar16 = '\0';
        if ((int)local_38 == -1) {
          if ((byte *)local_40[2] < (byte *)local_40[3]) {
            uVar13 = (uint)*(byte *)local_40[2];
          }
          else {
            uVar13 = (**(code **)(*local_40 + 0x48))();
            if (uVar13 == 0xffffffff) {
              local_40 = (long *)0x0;
              cVar16 = cVar9;
              goto LAB_003ec9e0;
            }
          }
          local_38 = CONCAT44(local_38._4_4_,uVar13);
          cVar16 = '\0';
        }
LAB_003ec9e0:
        if (cVar5 == cVar16) goto LAB_003ec824;
LAB_003ec9e8:
        if (local_30 == (long *)0x0) {
LAB_003ecd00:
          uVar20 = 0xff;
          goto LAB_003ec918;
        }
        if (local_28 == 0xffffffff) {
          if ((byte *)local_30[2] < (byte *)local_30[3]) {
            uVar13 = (uint)*(byte *)local_30[2];
          }
          else {
            uVar13 = (**(code **)(*local_30 + 0x48))();
            if (uVar13 == 0xffffffff) {
              local_30 = (long *)0x0;
              goto LAB_003ecd00;
            }
          }
          uVar20 = uVar13 & 0xff;
          local_28 = uVar13;
          goto LAB_003ec918;
        }
        uVar20 = local_28 & 0xff;
                    /* try { // try from 003eca04 to 004eca17 has its CatchHandler @ 003ec760 */
        if ((*(char *)(lVar14 + 0x20) == '\0') || (*(byte *)(lVar14 + 0x49) != uVar20))
        goto LAB_003ec92c;
LAB_003eca14:
        if (iVar10 == 0) {
          bVar2 = true;
          iVar10 = 0;
          goto LAB_003ec82c;
        }
        lVar19 = *(long *)(local_8 + -0x18);
        uVar18 = lVar19 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar18) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar18);
          lVar19 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar19] = (char)iVar10;
        iVar10 = 0;
                    /* try { // try from 003eca74 to 004ece1f has its CatchHandler @ 003ece54 */
        if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_003ec984;
        *(undefined4 *)(local_8 + -8) = 0;
        *(ulong *)(local_8 + -0x18) = uVar18;
        local_8[uVar18] = 0;
        if (local_30 != (long *)0x0) goto LAB_003ec98c;
LAB_003eca94:
        if (local_40 == (long *)0x0) goto LAB_003ec824;
        cVar5 = cVar9;
      } while( true );
    }
  }
LAB_003ecc94:
  bVar2 = false;
LAB_003ec82c:
  local_58 = &local_8;
  if (*(long *)(local_8 + -0x18) == 0) {
                    /* try { // try from 003ec844 to 004ec847 has its CatchHandler @ 003ece54 */
    if ((iVar10 == 0) <= bVar6) {
LAB_003ecc50:
      if (!bVar2) {
        if (bVar4) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = (uVar21 ^ -(ulong)bVar7) + (ulong)bVar7;
        }
        goto LAB_003ec860;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar10);
    cVar9 = FUN_003ee0cc(*(undefined8 *)(lVar14 + 0x10),*(undefined8 *)(lVar14 + 0x18),local_58);
    if (cVar9 == '\0') {
      *param_7 = 4;
    }
    if (((iVar10 == 0) <= bVar6) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_003ecc50;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_003ec860:
  if (bVar1) {
    *param_7 = *param_7 | 2;
  }
  auVar3._8_4_ = local_28;
  auVar3._0_8_ = local_30;
  auVar3._12_4_ = uStack_24;
                    /* try { // try from 003ec880 to 004ec883 has its CatchHandler @ 003ece24 */
                    /* try { // try from 003ec888 to 004ec9fb has its CatchHandler @ 003ece54 */
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003dca9c(local_8 + -0x18,auStack_10);
  }
  return auVar3;
code_r0x003ecd1c:
  local_40 = (long *)0x0;
  iVar12 = 1;
  goto LAB_003ec758;
LAB_003ec824:
  bVar2 = false;
  bVar1 = true;
  goto LAB_003ec82c;
}


==================================================================

### FUNC 003ecde8 (20 bytes) name=FUN_003ecde8

void FUN_003ecde8(void)

{
  FUN_003ec46c();
  return;
}


==================================================================

### FUNC 003ecdfc (4 bytes) name=FUN_003ecdfc

void FUN_003ecdfc(void)

{
  return;
}


==================================================================

### FUNC 003ece00 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 003ece04 (24 bytes) name=FUN_003ece04

void FUN_003ece04(void)

{
  FUN_0041a600(&DAT_00546278,&LAB_00479a30,0);
  return;
}


==================================================================

### FUNC 003ece1c (56 bytes) name=FUN_003ece1c

void FUN_003ece1c(undefined8 *param_1,undefined8 *param_2)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  piVar3 = (int *)*param_2;
  *param_1 = piVar3;
                    /* catch() { ... } // from try @ 003ec880 with catch @ 003ece24 */
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    return;
  }
  *piVar3 = *piVar3 + 1;
                    /* try { // try from 003ece50 to 004ece53 has its CatchHandler @ 003ec760 */
  return;
}


==================================================================

### FUNC 003ece54 (8 bytes) name=FUN_003ece54

void FUN_003ece54(undefined8 *param_1,undefined8 param_2)

{
                    /* catch() { ... } // from try @ 003ec844 with catch @ 003ece54
                       catch() { ... } // from try @ 003ec888 with catch @ 003ece54
                       catch() { ... } // from try @ 003eca74 with catch @ 003ece54 */
  *param_1 = param_2;
  return;
}


==================================================================

### FUNC 003ece5c (712 bytes) name=FUN_003ece5c

long * FUN_003ece5c(long *param_1,long *param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  int iVar3;
  size_t sVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  ulong uVar8;
  undefined8 *puVar9;
  char *pcVar10;
  
  puVar2 = PTR_DAT_00501f30;
                    /* catch() { ... } // from try @ 003ed024 with catch @ 003ece70
                       catch() { ... } // from try @ 003ed4e0 with catch @ 003ece70 */
  puVar9 = *(undefined8 **)(*param_2 + 0x20);
  *param_1 = (long)(PTR_DAT_00501f30 + 0x18);
  pcVar10 = (char *)*puVar9;
  if (pcVar10 == (char *)0x0) {
    FUN_00412ec4(param_1,0,*(undefined8 *)puVar2,1,0x2a);
  }
  else {
    if (puVar9[1] != 0) {
      uVar8 = 0;
      do {
        puVar1 = puVar9 + uVar8;
        uVar8 = uVar8 + 1;
        iVar3 = strcmp((char *)*puVar1,(char *)puVar9[uVar8]);
        if (4 < uVar8) {
          if (iVar3 == 0) goto LAB_003eced4;
          break;
        }
      } while (iVar3 == 0);
      FUN_00410ed8(param_1,0x80);
      puVar9 = *(undefined8 **)PTR_PTR_00501ea0;
      pcVar10 = (char *)*puVar9;
      sVar4 = strlen(pcVar10);
      FUN_00411624(param_1,pcVar10,sVar4);
      lVar5 = *param_1;
      lVar6 = *(long *)(lVar5 + -0x18);
      uVar8 = lVar6 + 1;
      if ((*(ulong *)(lVar5 + -0x10) < uVar8) || (0 < *(int *)(lVar5 + -8))) {
        FUN_00410ed8(param_1,uVar8);
        lVar5 = *param_1;
        lVar6 = *(long *)(lVar5 + -0x18);
      }
      *(undefined1 *)(lVar5 + lVar6) = 0x3d;
      lVar5 = *param_1;
      if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501f30) {
        *(undefined4 *)(lVar5 + -8) = 0;
        *(ulong *)(lVar5 + -0x18) = uVar8;
        *(undefined1 *)(lVar5 + uVar8) = 0;
      }
      pcVar10 = (char *)**(undefined8 **)(*param_2 + 0x20);
      sVar4 = strlen(pcVar10);
      FUN_00411624(param_1,pcVar10,sVar4);
      lVar5 = 8;
      do {
        lVar6 = *param_1;
        lVar7 = *(long *)(lVar6 + -0x18);
        uVar8 = lVar7 + 1;
                    /* try { // try from 003ecfd8 to 004ed01b has its CatchHandler @ 003ed4bc */
        if ((*(ulong *)(lVar6 + -0x10) < uVar8) || (0 < *(int *)(lVar6 + -8))) {
          FUN_00410ed8(param_1,uVar8);
          lVar6 = *param_1;
          lVar7 = *(long *)(lVar6 + -0x18);
        }
        *(undefined1 *)(lVar6 + lVar7) = 0x3b;
        lVar6 = *param_1;
        if ((undefined *)(lVar6 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar6 + -8) = 0;
          *(ulong *)(lVar6 + -0x18) = uVar8;
          *(undefined1 *)(lVar6 + uVar8) = 0;
        }
        pcVar10 = *(char **)((long)puVar9 + lVar5);
                    /* try { // try from 003ed024 to 004ed037 has its CatchHandler @ 003ece70 */
        sVar4 = strlen(pcVar10);
        FUN_00411624(param_1,pcVar10,sVar4);
        lVar6 = *param_1;
        lVar7 = *(long *)(lVar6 + -0x18);
        uVar8 = lVar7 + 1;
        if ((*(ulong *)(lVar6 + -0x10) < uVar8) || (0 < *(int *)(lVar6 + -8))) {
          FUN_00410ed8(param_1,uVar8);
          lVar6 = *param_1;
          lVar7 = *(long *)(lVar6 + -0x18);
        }
        *(undefined1 *)(lVar6 + lVar7) = 0x3d;
        lVar6 = *param_1;
        if ((undefined *)(lVar6 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar6 + -8) = 0;
          *(ulong *)(lVar6 + -0x18) = uVar8;
          *(undefined1 *)(lVar6 + uVar8) = 0;
        }
        pcVar10 = *(char **)(*(long *)(*param_2 + 0x20) + lVar5);
        sVar4 = strlen(pcVar10);
        FUN_00411624(param_1,pcVar10,sVar4);
        lVar5 = lVar5 + 8;
      } while (lVar5 != 0x30);
                    /* try { // try from 003ed0c0 to 004ed4a3 has its CatchHandler @ 003ed4bc */
      return param_1;
    }
LAB_003eced4:
    sVar4 = strlen(pcVar10);
    FUN_00412fdc(param_1,pcVar10,sVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003ed188 (444 bytes) name=FUN_003ed188

bool FUN_003ed188(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  bool bVar3;
  int iVar4;
  char *__s1;
  char *__s2;
  undefined8 *puVar5;
  void *pvVar6;
  int *piVar7;
  undefined8 *puVar8;
  void *local_10;
  void *local_8;
  
  if (*param_1 == *param_2) {
    return true;
  }
  puVar5 = *(undefined8 **)(*param_1 + 0x20);
  __s1 = (char *)*puVar5;
  if (__s1 != (char *)0x0) {
    puVar8 = *(undefined8 **)(*param_2 + 0x20);
    __s2 = (char *)*puVar8;
    if ((__s2 != (char *)0x0) && (iVar4 = strcmp(__s1,__s2), iVar4 == 0)) {
      if ((puVar5[1] == 0) && (puVar8[1] == 0)) {
        return true;
      }
      FUN_003ece5c(&local_10,param_1);
      FUN_003ece5c(&local_8,param_2);
      pvVar6 = local_10;
      bVar3 = false;
      if (*(size_t *)((long)local_10 + -0x18) == *(size_t *)((long)local_8 + -0x18)) {
        iVar4 = memcmp(local_10,local_8,*(size_t *)((long)local_10 + -0x18));
        bVar3 = iVar4 == 0;
      }
      if ((undefined *)((long)local_8 + -0x18) != PTR_DAT_00501f30) {
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          iVar4 = *(int *)((long)local_8 + -8);
          *(int *)((long)local_8 + -8) = iVar4 + -1;
        }
        else {
          piVar7 = (int *)((long)local_8 + -8);
          do {
            iVar4 = *piVar7;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
            if (bVar2) {
              *piVar7 = iVar4 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        pvVar6 = local_10;
        if (iVar4 < 1) {
          operator_delete((undefined *)((long)local_8 + -0x18));
          pvVar6 = local_10;
        }
      }
      if ((undefined *)((long)pvVar6 + -0x18) != PTR_DAT_00501f30) {
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          iVar4 = *(int *)((long)pvVar6 + -8);
          *(int *)((long)pvVar6 + -8) = iVar4 + -1;
        }
        else {
          piVar7 = (int *)((long)pvVar6 + -8);
          do {
            iVar4 = *piVar7;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
            if (bVar2) {
              *piVar7 = iVar4 + -1;
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        if (iVar4 < 1) {
          operator_delete((undefined *)((long)pvVar6 + -0x18));
        }
      }
      return bVar3;
    }
  }
  return false;
}


==================================================================

### FUNC 003ed3c4 (96 bytes) name=FUN_003ed3c4

void FUN_003ed3c4(uint param_1)

{
  if ((param_1 != 0) && (((param_1 & 0x3f) == 0 || ((param_1 & 0xffffffc0) != 0)))) {
    if (param_1 - 1 < 6) {
                    /* WARNING: Could not recover jumptable at 0x003ed424. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*(code *)(&UNK_003ed428 + (long)(char)(&DAT_00479984)[param_1 - 1] * 4))();
      return;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0040f658("locale::_S_normalize_category category not found");
  }
  return;
}


==================================================================

### FUNC 003ed450 (108 bytes) name=FUN_003ed450

long FUN_003ed450(void)

{
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    if (DAT_00546278 == 0) {
      FUN_0041a600(&DAT_00546278,&LAB_00479a30,0);
    }
  }
  else {
    pthread_once((pthread_once_t *)&DAT_005462a0,FUN_003ece04);
  }
  return DAT_00546278;
}


==================================================================

### FUNC 003ed4bc (12 bytes) name=FUN_003ed4bc

undefined1 * FUN_003ed4bc(void)

{
                    /* catch() { ... } // from try @ 003ecfd8 with catch @ 003ed4bc
                       catch() { ... } // from try @ 003ed0c0 with catch @ 003ed4bc */
  return &LAB_00479a30;
}


==================================================================

### FUNC 003ed4c8 (372 bytes) name=FUN_003ed4c8

void FUN_003ed4c8(long param_1)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  long *plVar4;
  int iVar5;
  ulong uVar6;
  void *pvVar7;
  ulong uVar8;
  long lVar9;
  
  pvVar7 = *(void **)(param_1 + 8);
                    /* try { // try from 003ed4e0 to 004ed4e3 has its CatchHandler @ 003ece70 */
  if (pvVar7 != (void *)0x0) {
    uVar6 = *(ulong *)(param_1 + 0x10);
    if (uVar6 != 0) {
      uVar8 = 0;
      do {
        plVar4 = *(long **)((long)pvVar7 + uVar8 * 8);
        if (plVar4 != (long *)0x0) {
          if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
            iVar5 = (int)plVar4[1];
            *(int *)(plVar4 + 1) = iVar5 + -1;
          }
          else {
            plVar1 = plVar4 + 1;
            do {
              iVar5 = (int)*plVar1;
              cVar2 = '\x01';
              bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar3) {
                *(int *)plVar1 = iVar5 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
          }
          if (iVar5 == 1) {
            (**(code **)(*plVar4 + 8))();
          }
          pvVar7 = *(void **)(param_1 + 8);
          uVar6 = *(ulong *)(param_1 + 0x10);
        }
        uVar8 = uVar8 + 1;
      } while (uVar8 < uVar6);
      if (pvVar7 == (void *)0x0) goto LAB_003ed564;
    }
    operator_delete__(pvVar7);
  }
LAB_003ed564:
  pvVar7 = *(void **)(param_1 + 0x18);
  if (pvVar7 != (void *)0x0) {
    uVar6 = *(ulong *)(param_1 + 0x10);
    if (uVar6 != 0) {
      uVar8 = 0;
      do {
        plVar4 = *(long **)((long)pvVar7 + uVar8 * 8);
        if (plVar4 != (long *)0x0) {
          if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
            iVar5 = (int)plVar4[1];
            *(int *)(plVar4 + 1) = iVar5 + -1;
          }
          else {
            plVar1 = plVar4 + 1;
            do {
              iVar5 = (int)*plVar1;
              cVar2 = '\x01';
              bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
              if (bVar3) {
                *(int *)plVar1 = iVar5 + -1;
                cVar2 = ExclusiveMonitorsStatus();
              }
            } while (cVar2 != '\0');
          }
          if (iVar5 == 1) {
            (**(code **)(*plVar4 + 8))();
          }
          pvVar7 = *(void **)(param_1 + 0x18);
          uVar6 = *(ulong *)(param_1 + 0x10);
        }
        uVar8 = uVar8 + 1;
      } while (uVar8 < uVar6);
      if (pvVar7 == (void *)0x0) goto LAB_003ed5ec;
    }
    operator_delete__(pvVar7);
  }
LAB_003ed5ec:
  pvVar7 = *(void **)(param_1 + 0x20);
  lVar9 = 0;
  if (pvVar7 != (void *)0x0) {
    do {
      if (*(void **)((long)pvVar7 + lVar9) != (void *)0x0) {
        operator_delete__(*(void **)((long)pvVar7 + lVar9));
        pvVar7 = *(void **)(param_1 + 0x20);
      }
      lVar9 = lVar9 + 8;
    } while (lVar9 != 0x30);
    if (pvVar7 != (void *)0x0) {
      operator_delete__(pvVar7);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 003ed668 (160 bytes) name=FUN_003ed668

undefined8 * FUN_003ed668(undefined8 *param_1,undefined8 *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  
  piVar4 = (int *)*param_2;
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    piVar5 = (int *)*param_1;
    *piVar4 = *piVar4 + 1;
    iVar3 = *piVar5;
    *piVar5 = iVar3 + -1;
  }
  else {
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = *piVar4 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
    piVar5 = (int *)*param_1;
    do {
      iVar3 = *piVar5;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar2) {
        *piVar5 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if ((iVar3 == 1) && (piVar5 != (int *)0x0)) {
    FUN_003ed4c8(piVar5);
    operator_delete(piVar5);
  }
  *param_1 = *param_2;
  return param_1;
}


==================================================================

### FUNC 003ed708 (108 bytes) name=FUN_003ed708

void FUN_003ed708(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int *piVar4;
  
  piVar4 = (int *)*param_1;
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar3 = *piVar4;
    *piVar4 = iVar3 + -1;
  }
  else {
    do {
      iVar3 = *piVar4;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar2) {
        *piVar4 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if ((iVar3 == 1) && (piVar4 != (int *)0x0)) {
    FUN_003ed4c8(piVar4);
    operator_delete(piVar4);
    return;
  }
  return;
}


==================================================================

### FUNC 003ed774 (492 bytes) name=FUN_003ed774

void FUN_003ed774(undefined4 *param_1,long param_2,undefined4 param_3)

{
  undefined8 *puVar1;
  int *piVar2;
  char cVar3;
  bool bVar4;
  ulong uVar5;
  void *pvVar6;
  long lVar7;
  undefined8 *puVar8;
  char *__s;
  size_t sVar9;
  ulong uVar10;
  long lVar11;
  
  uVar10 = *(ulong *)(param_2 + 0x10);
  *param_1 = param_3;
  uVar5 = uVar10 << 3;
  *(undefined8 *)(param_1 + 2) = 0;
  if (0xfe0000000000000 < uVar10) {
    uVar5 = 0xffffffffffffffff;
  }
  *(ulong *)(param_1 + 4) = uVar10;
  *(undefined8 *)(param_1 + 6) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  pvVar6 = operator_new__(uVar5);
  uVar10 = *(ulong *)(param_1 + 4);
  *(void **)(param_1 + 2) = pvVar6;
  uVar5 = 0;
  if (uVar10 != 0) {
    lVar11 = 0;
    do {
      *(undefined8 *)((long)pvVar6 + lVar11 * 8) =
           *(undefined8 *)(*(long *)(param_2 + 8) + lVar11 * 8);
      lVar7 = *(long *)(*(long *)(param_1 + 2) + lVar11 * 8);
      if (lVar7 == 0) {
LAB_003ed7f0:
        if (uVar10 <= lVar11 + 1U) goto LAB_003ed838;
      }
      else {
        if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
          piVar2 = (int *)(lVar7 + 8);
          do {
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
            if (bVar4) {
              *piVar2 = *piVar2 + 1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
          uVar10 = *(ulong *)(param_1 + 4);
          goto LAB_003ed7f0;
        }
        *(int *)(lVar7 + 8) = *(int *)(lVar7 + 8) + 1;
        if (uVar10 <= lVar11 + 1U) goto LAB_003ed838;
      }
      lVar11 = lVar11 + 1;
      pvVar6 = *(void **)(param_1 + 2);
    } while( true );
  }
LAB_003ed848:
  pvVar6 = operator_new__(uVar5);
  uVar5 = *(ulong *)(param_1 + 4);
  *(void **)(param_1 + 6) = pvVar6;
  if (uVar5 == 0) {
LAB_003ed8c8:
    puVar8 = operator_new__(0x30);
    *(undefined8 **)(param_1 + 8) = puVar8;
    lVar11 = 0;
    *puVar8 = 0;
    *(undefined8 *)(*(long *)(param_1 + 8) + 8) = 0;
    *(undefined8 *)(*(long *)(param_1 + 8) + 0x10) = 0;
    *(undefined8 *)(*(long *)(param_1 + 8) + 0x18) = 0;
    *(undefined8 *)(*(long *)(param_1 + 8) + 0x20) = 0;
    *(undefined8 *)(*(long *)(param_1 + 8) + 0x28) = 0;
    do {
      __s = *(char **)(*(long *)(param_2 + 0x20) + lVar11);
      if (__s == (char *)0x0) {
        return;
      }
      sVar9 = strlen(__s);
      lVar7 = *(long *)(param_1 + 8);
      pvVar6 = operator_new__(sVar9 + 1);
      *(void **)(lVar7 + lVar11) = pvVar6;
      puVar8 = (undefined8 *)(*(long *)(param_1 + 8) + lVar11);
      puVar1 = (undefined8 *)(*(long *)(param_2 + 0x20) + lVar11);
      lVar11 = lVar11 + 8;
      memcpy((void *)*puVar8,(void *)*puVar1,sVar9 + 1);
    } while (lVar11 != 0x30);
    return;
  }
  lVar11 = 0;
  do {
    *(undefined8 *)((long)pvVar6 + lVar11 * 8) =
         *(undefined8 *)(*(long *)(param_2 + 0x18) + lVar11 * 8);
    lVar7 = *(long *)(*(long *)(param_1 + 6) + lVar11 * 8);
    if (lVar7 == 0) {
LAB_003ed880:
      if (uVar5 <= lVar11 + 1U) goto LAB_003ed8c8;
    }
    else {
      if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
        piVar2 = (int *)(lVar7 + 8);
        do {
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(piVar2,0x10);
          if (bVar4) {
            *piVar2 = *piVar2 + 1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
        uVar5 = *(ulong *)(param_1 + 4);
        goto LAB_003ed880;
      }
      *(int *)(lVar7 + 8) = *(int *)(lVar7 + 8) + 1;
      if (uVar5 <= lVar11 + 1U) goto LAB_003ed8c8;
    }
    lVar11 = lVar11 + 1;
    pvVar6 = *(void **)(param_1 + 6);
  } while( true );
LAB_003ed838:
  uVar5 = uVar10 << 3;
  if (0xfe0000000000000 < uVar10) {
    uVar5 = 0xffffffffffffffff;
  }
  goto LAB_003ed848;
}


==================================================================

### FUNC 003ed980 (356 bytes) name=FUN_003ed980

void FUN_003ed980(long param_1,long *param_2,long param_3)

{
  long *plVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  undefined8 *puVar5;
  long extraout_x1;
  long lVar6;
  
  if ((DAT_00546288 & 1) == 0) {
    iVar4 = __cxa_guard_acquire(&DAT_00546288);
    if (iVar4 == 0) goto LAB_003ed9a0;
    DAT_00546250 = 0;
    DAT_00546258 = 0;
    DAT_00546260 = 0;
    DAT_00546268 = 0;
    DAT_00546270 = 0;
    __cxa_guard_release(&DAT_00546288);
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003eda60;
LAB_003ed9ac:
    iVar4 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00546250);
    if (iVar4 != 0) {
      puVar5 = (undefined8 *)__cxa_allocate_exception(8);
      *puVar5 = &PTR_FUN_004f7ac0;
                    /* WARNING: Subroutine does not return */
      __cxa_throw(puVar5,&PTR_PTR_004fca80,FUN_003cec4c);
    }
    if (*(long *)(*(long *)(param_1 + 0x18) + param_3 * 8) == 0) {
      plVar1 = param_2 + 1;
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(plVar1,0x10);
        if (bVar3) {
          *(int *)plVar1 = (int)*plVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
      *(long **)(*(long *)(param_1 + 0x18) + param_3 * 8) = param_2;
      goto LAB_003ed9f0;
    }
  }
  else {
LAB_003ed9a0:
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) goto LAB_003ed9ac;
LAB_003eda60:
    lVar6 = *(long *)(param_1 + 0x18);
    if (*(long *)(lVar6 + param_3 * 8) == 0) {
      *(int *)(param_2 + 1) = (int)param_2[1] + 1;
      *(long **)(lVar6 + param_3 * 8) = param_2;
      goto LAB_003ed9f0;
    }
  }
  if (param_2 != (long *)0x0) {
    (**(code **)(*param_2 + 8))(param_2);
  }
LAB_003ed9f0:
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    iVar4 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00546250);
    if (iVar4 != 0) {
      FUN_003cecfc();
      if (extraout_x1 != -1) {
                    /* WARNING: Subroutine does not return */
        _Unwind_Resume();
      }
                    /* WARNING: Subroutine does not return */
      __cxa_call_unexpected();
    }
  }
  return;
}


==================================================================

### FUNC 003edb10 (80 bytes) name=FUN_003edb10

long FUN_003edb10(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  
  lVar4 = *param_1;
  if (lVar4 == 0) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = DAT_00546248 + 1;
      DAT_00546248 = iVar3;
    }
    else {
      do {
        iVar3 = DAT_00546248;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(0x546248,0x10);
        if (bVar2) {
          cVar1 = ExclusiveMonitorsStatus();
          DAT_00546248 = DAT_00546248 + 1;
        }
      } while (cVar1 != '\0');
      iVar3 = iVar3 + 1;
    }
    lVar4 = (long)iVar3;
    *param_1 = lVar4;
  }
  return lVar4 + -1;
}


==================================================================

### FUNC 003edb60 (780 bytes) name=FUN_003edb60

void FUN_003edb60(long param_1,undefined8 param_2,long param_3)

{
  int *piVar1;
  ulong uVar2;
  char cVar3;
  bool bVar4;
  ulong uVar5;
  long *plVar6;
  long *plVar7;
  ulong uVar8;
  void *pvVar9;
  long lVar10;
  void *pvVar11;
  int iVar12;
  ulong uVar13;
  undefined8 *puVar14;
  long lVar15;
  long *plVar16;
  ulong uVar17;
  void *pvVar18;
  void *pvVar19;
  
  if (param_3 == 0) {
    return;
  }
  uVar5 = FUN_003edb10(param_2);
  if (*(long *)(param_1 + 0x10) - 1U < uVar5) {
    uVar17 = uVar5 + 4;
    uVar8 = uVar17 * 8;
    if (0xfe0000000000000 < uVar17) {
      uVar8 = 0xffffffffffffffff;
    }
    pvVar18 = *(void **)(param_1 + 8);
    pvVar9 = operator_new__(uVar8);
    uVar8 = *(ulong *)(param_1 + 0x10);
    if (uVar8 != 0) {
      lVar10 = 0;
      do {
        *(undefined8 *)((long)pvVar9 + lVar10) = *(undefined8 *)(*(long *)(param_1 + 8) + lVar10);
        lVar10 = lVar10 + 8;
      } while (lVar10 != uVar8 * 8);
    }
    if (uVar8 < uVar17) {
      lVar10 = uVar17 - uVar8;
      uVar2 = (lVar10 - 2U >> 1) + 1;
      lVar15 = uVar2 * 2;
      if (2 < (uVar5 + 3) - uVar8) {
        uVar13 = 0;
        puVar14 = (undefined8 *)((long)pvVar9 + uVar8 * 8);
        do {
          puVar14[1] = 0;
          *puVar14 = 0;
          uVar13 = uVar13 + 1;
          puVar14 = puVar14 + 2;
        } while (uVar13 < uVar2);
        uVar8 = uVar8 + lVar15;
        if (lVar10 == lVar15) goto LAB_003edd3c;
      }
      *(undefined8 *)((long)pvVar9 + uVar8 * 8) = 0;
      if (uVar8 + 1 < uVar17) {
        *(undefined8 *)((long)pvVar9 + (uVar8 + 1) * 8) = 0;
        if (uVar8 + 2 < uVar17) {
          *(undefined8 *)((long)pvVar9 + (uVar8 + 2) * 8) = 0;
        }
      }
    }
LAB_003edd3c:
    uVar8 = uVar17 * 8;
    pvVar19 = *(void **)(param_1 + 0x18);
    if (0xfe0000000000000 < uVar17) {
      uVar8 = 0xffffffffffffffff;
    }
    pvVar11 = operator_new__(uVar8);
    uVar8 = *(ulong *)(param_1 + 0x10);
    if (uVar8 != 0) {
      lVar10 = 0;
      do {
        *(undefined8 *)((long)pvVar11 + lVar10) =
             *(undefined8 *)(*(long *)(param_1 + 0x18) + lVar10);
        lVar10 = lVar10 + 8;
      } while (lVar10 != uVar8 * 8);
    }
    if (uVar8 < uVar17) {
      lVar10 = uVar17 - uVar8;
      uVar2 = (lVar10 - 2U >> 1) + 1;
      lVar15 = uVar2 * 2;
      if (2 < (uVar5 + 3) - uVar8) {
        uVar13 = 0;
        puVar14 = (undefined8 *)((long)pvVar11 + uVar8 * 8);
        do {
          puVar14[1] = 0;
          *puVar14 = 0;
          uVar13 = uVar13 + 1;
          puVar14 = puVar14 + 2;
        } while (uVar13 < uVar2);
        uVar8 = uVar8 + lVar15;
        if (lVar15 - lVar10 == 0) goto LAB_003edde0;
      }
      *(undefined8 *)((long)pvVar11 + uVar8 * 8) = 0;
      if (uVar8 + 1 < uVar17) {
        *(undefined8 *)((long)pvVar11 + (uVar8 + 1) * 8) = 0;
        if (uVar8 + 2 < uVar17) {
          *(undefined8 *)((long)pvVar11 + (uVar8 + 2) * 8) = 0;
        }
      }
    }
LAB_003edde0:
    *(ulong *)(param_1 + 0x10) = uVar17;
    *(void **)(param_1 + 8) = pvVar9;
    *(void **)(param_1 + 0x18) = pvVar11;
    if (pvVar18 != (void *)0x0) {
      operator_delete__(pvVar18);
    }
    if (pvVar19 == (void *)0x0) goto LAB_003edba0;
    operator_delete__(pvVar19);
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) goto LAB_003edbac;
LAB_003ede10:
    plVar16 = (long *)(*(long *)(param_1 + 8) + uVar5 * 8);
    plVar6 = *(long **)(*(long *)(param_1 + 8) + uVar5 * 8);
    *(int *)(param_3 + 8) = *(int *)(param_3 + 8) + 1;
    if (plVar6 == (long *)0x0) goto LAB_003edbf8;
    iVar12 = (int)plVar6[1];
    *(int *)(plVar6 + 1) = iVar12 + -1;
  }
  else {
LAB_003edba0:
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003ede10;
LAB_003edbac:
    piVar1 = (int *)(param_3 + 8);
    do {
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = *piVar1 + 1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
    plVar16 = (long *)(*(long *)(param_1 + 8) + uVar5 * 8);
    plVar6 = *(long **)(*(long *)(param_1 + 8) + uVar5 * 8);
    plVar7 = plVar6 + 1;
    if (plVar6 == (long *)0x0) goto LAB_003edbf8;
    do {
      iVar12 = (int)*plVar7;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(plVar7,0x10);
      if (bVar4) {
        *(int *)plVar7 = iVar12 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar12 == 1) {
    (**(code **)(*plVar6 + 8))();
  }
LAB_003edbf8:
  uVar5 = *(ulong *)(param_1 + 0x10);
  *plVar16 = param_3;
  if (uVar5 != 0) {
    uVar17 = 0;
    do {
      plVar7 = *(long **)(*(long *)(param_1 + 0x18) + uVar17 * 8);
      if (plVar7 != (long *)0x0) {
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          iVar12 = (int)plVar7[1];
          *(int *)(plVar7 + 1) = iVar12 + -1;
        }
        else {
          plVar16 = plVar7 + 1;
          do {
            iVar12 = (int)*plVar16;
            cVar3 = '\x01';
            bVar4 = (bool)ExclusiveMonitorPass(plVar16,0x10);
            if (bVar4) {
              *(int *)plVar16 = iVar12 + -1;
              cVar3 = ExclusiveMonitorsStatus();
            }
          } while (cVar3 != '\0');
        }
        if (iVar12 == 1) {
          (**(code **)(*plVar7 + 8))();
        }
        uVar5 = *(ulong *)(param_1 + 0x10);
        *(undefined8 *)(*(long *)(param_1 + 0x18) + uVar17 * 8) = 0;
      }
      uVar17 = uVar17 + 1;
    } while (uVar17 < uVar5);
  }
  return;
}


==================================================================

### FUNC 003edeb4 (140 bytes) name=FUN_003edeb4

void FUN_003edeb4(undefined8 param_1,long param_2,long *param_3)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  
  lVar4 = *param_3;
  if (lVar4 == 0) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = DAT_00546248 + 1;
      DAT_00546248 = iVar3;
    }
    else {
      do {
        iVar3 = DAT_00546248;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(0x546248,0x10);
        if (bVar2) {
          cVar1 = ExclusiveMonitorsStatus();
          DAT_00546248 = DAT_00546248 + 1;
        }
      } while (cVar1 != '\0');
      iVar3 = iVar3 + 1;
    }
    lVar4 = (long)iVar3;
    *param_3 = lVar4;
  }
  if ((lVar4 - 1U <= *(long *)(param_2 + 0x10) - 1U) &&
     (lVar4 = *(long *)(*(long *)(param_2 + 8) + (lVar4 - 1U) * 8), lVar4 != 0)) {
    FUN_003edb60(param_1,param_3,lVar4);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f658("locale::_Impl::_M_replace_facet");
}


==================================================================

### FUNC 003edf40 (196 bytes) name=FUN_003edf40

void FUN_003edf40(undefined8 param_1,long param_2,long *param_3)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long *plVar5;
  
  plVar5 = (long *)*param_3;
  while( true ) {
    if (plVar5 == (long *)0x0) {
      return;
    }
    lVar4 = *plVar5;
    if (lVar4 == 0) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = DAT_00546248 + 1;
        DAT_00546248 = iVar3;
      }
      else {
        do {
          iVar3 = DAT_00546248;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(0x546248,0x10);
          if (bVar2) {
            cVar1 = ExclusiveMonitorsStatus();
            DAT_00546248 = DAT_00546248 + 1;
          }
        } while (cVar1 != '\0');
        iVar3 = iVar3 + 1;
      }
      lVar4 = (long)iVar3;
      *plVar5 = lVar4;
    }
    if ((*(long *)(param_2 + 0x10) - 1U < lVar4 - 1U) ||
       (*(long *)(*(long *)(param_2 + 8) + (lVar4 - 1U) * 8) == 0)) break;
    FUN_003edb60(param_1);
    param_3 = param_3 + 1;
    plVar5 = (long *)*param_3;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f658("locale::_Impl::_M_replace_facet");
}


==================================================================

### FUNC 003ee004 (200 bytes) name=FUN_003ee004

void FUN_003ee004(long param_1,undefined1 *param_2,char param_3)

{
  uint uVar1;
  undefined1 uVar2;
  undefined1 *puVar3;
  undefined1 *puVar4;
  
  uVar1 = *(uint *)(param_1 + 0x18);
  *param_2 = 0x25;
  if ((uVar1 >> 0xb & 1) == 0) {
    puVar3 = param_2 + 1;
  }
  else {
    puVar3 = param_2 + 2;
    param_2[1] = 0x2b;
  }
  puVar4 = puVar3;
  if ((uVar1 >> 10 & 1) != 0) {
    puVar4 = puVar3 + 1;
    *puVar3 = 0x23;
  }
  *puVar4 = 0x2e;
  puVar4[1] = 0x2a;
  puVar3 = puVar4 + 2;
  if (param_3 != '\0') {
    puVar3 = puVar4 + 3;
    puVar4[2] = param_3;
  }
  if ((uVar1 & 0x104) != 4) {
    if ((uVar1 & 0x104) != 0x100) {
      uVar2 = 0x47;
      if ((uVar1 & 0x4000) == 0) {
        uVar2 = 0x67;
      }
      *puVar3 = uVar2;
      puVar3[1] = 0;
      return;
    }
    uVar2 = 0x45;
    if ((uVar1 & 0x4000) == 0) {
      uVar2 = 0x65;
    }
    *puVar3 = uVar2;
    puVar3[1] = 0;
    return;
  }
  *puVar3 = 0x66;
  puVar3[1] = 0;
  return;
}


==================================================================

### FUNC 003ee0cc (148 bytes) name=FUN_003ee0cc

bool FUN_003ee0cc(long param_1,long param_2,undefined8 *param_3)

{
  byte *pbVar1;
  byte *pbVar2;
  bool bVar3;
  ulong uVar4;
  byte bVar5;
  bool bVar6;
  ulong uVar7;
  ulong uVar8;
  byte *pbVar9;
  
  pbVar9 = (byte *)*param_3;
  uVar7 = *(long *)(pbVar9 + -0x18) - 1;
  uVar4 = param_2 - 1U;
  if (uVar7 < param_2 - 1U) {
    uVar4 = uVar7;
  }
  if (uVar4 == 0) {
    bVar6 = true;
  }
  else {
    uVar8 = 0;
    do {
      pbVar1 = (byte *)(param_1 + uVar8);
      uVar8 = uVar8 + 1;
      pbVar2 = pbVar9 + uVar7;
      uVar7 = uVar7 - 1;
      bVar6 = *pbVar2 == *pbVar1;
      if (uVar4 <= uVar8) break;
    } while (bVar6);
  }
  bVar5 = *(byte *)(param_1 + uVar4);
  while ((uVar7 != 0 && (bVar3 = bVar6 != false, bVar6 = false, bVar3))) {
    pbVar1 = pbVar9 + uVar7;
    uVar7 = uVar7 - 1;
    bVar6 = *pbVar1 == bVar5;
  }
  if ('\0' < (char)bVar5) {
    bVar6 = (bool)(bVar6 & *pbVar9 <= bVar5);
  }
  return bVar6;
}


==================================================================

### FUNC 003ee160 (2916 bytes) name=FUN_003ee160

void FUN_003ee160(undefined4 *param_1,undefined4 param_2)

{
  long lVar1;
  undefined2 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  long lVar5;
  
  puVar3 = &DAT_005473c0;
  *param_1 = param_2;
  puVar4 = &DAT_00547540;
  lVar1 = 0;
  *(undefined8 *)(param_1 + 4) = 0x1c;
  *(undefined8 *)(param_1 + 8) = 0;
  *(undefined8 **)(param_1 + 2) = &DAT_005473c0;
  *(undefined8 **)(param_1 + 6) = &DAT_00547540;
  while( true ) {
    *(undefined8 *)((long)puVar4 + lVar1) = 0;
    *(undefined8 *)((long)puVar3 + lVar1) = 0;
    lVar1 = lVar1 + 8;
    if (lVar1 == 0xe0) break;
    puVar3 = *(undefined8 **)(param_1 + 2);
    puVar4 = *(undefined8 **)(param_1 + 6);
  }
  *(undefined2 ***)(param_1 + 8) = &DAT_005467e0;
  DAT_005467e0 = &DAT_00546350;
  puVar2 = (undefined2 *)FUN_003ed4bc();
  DAT_00546350 = *puVar2;
  DAT_005467f0 = 0;
  DAT_005467e8 = 0;
  *(undefined8 *)(*(long *)(param_1 + 8) + 0x18) = 0;
  *(undefined8 *)(*(long *)(param_1 + 8) + 0x20) = 0;
  *(undefined8 *)(*(long *)(param_1 + 8) + 0x28) = 0;
  FUN_003d18e8(&DAT_00546970,0,0,1);
  FUN_003edb60(param_1,PTR_DAT_00501da0,&DAT_00546970);
  FUN_0041a854(&DAT_00546710,1);
  FUN_003edb60(param_1,PTR_DAT_00501e98,&DAT_00546710);
  DAT_005474a0 = PTR_DAT_005019b0 + 0x10;
  DAT_005463c0 = PTR_DAT_00501e00 + 0x10;
  DAT_005474a8 = 1;
  DAT_005474b0 = 0;
  DAT_005474b8 = 0;
  DAT_005474c0 = 0;
  DAT_005474c8 = 0;
  DAT_005474d0 = 0;
  DAT_005474d8 = 0;
  DAT_005474e0 = 0;
  DAT_005474e8 = 0;
  DAT_005474e9 = 0;
  DAT_00547528 = 0;
  DAT_005463c8 = 1;
  DAT_005463d0 = &DAT_005474a0;
  FUN_003f0604(&DAT_005463c0,0);
  FUN_003edb60(param_1,PTR_DAT_00501db0,&DAT_005463c0);
  DAT_00547650 = PTR_DAT_00501b70 + 0x10;
  DAT_00547658 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501d20,&DAT_00547650);
  DAT_00546ce0 = PTR_DAT_00501970 + 0x10;
  DAT_00546ce8 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501f98,&DAT_00546ce0);
  DAT_005462b8 = 1;
  DAT_005462b0 = PTR_DAT_00501dd8 + 0x10;
  DAT_005462c0 = FUN_003ed450();
  FUN_003edb60(param_1,PTR_DAT_00501ab0,&DAT_005462b0);
  DAT_005462d0 = PTR_DAT_00501b80 + 0x10;
  DAT_00546c70 = PTR_DAT_00501ac0 + 0x10;
  DAT_005462d8 = 1;
  DAT_005462e0 = 0;
  DAT_005462e8 = 0;
  DAT_005462f0 = 0;
  DAT_005462f1 = 0;
  DAT_005462f2 = 0;
  DAT_005462f8 = 0;
  DAT_00546300 = 0;
  DAT_00546308 = 0;
  DAT_00546310 = 0;
  DAT_00546318 = 0;
  DAT_00546320 = 0;
  DAT_00546328 = 0;
  DAT_0054632c = 0;
  DAT_0054632d = 0;
  DAT_0054632e = 0;
  DAT_0054632f = 0;
  DAT_00546330 = 0;
  DAT_00546331 = 0;
  DAT_00546332 = 0;
  DAT_00546333 = 0;
  DAT_0054633f = 0;
  DAT_00546c78 = 1;
  DAT_00546c80 = &DAT_005462d0;
  FUN_003efed0(&DAT_00546c70,0,0);
  FUN_003edb60(param_1,PTR_DAT_00501c48,&DAT_00546c70);
  DAT_00547310 = PTR_DAT_005018e8 + 0x10;
  DAT_00546c30 = PTR_DAT_00501c40 + 0x10;
  DAT_00547318 = 1;
  DAT_00547320 = 0;
  DAT_00547328 = 0;
  DAT_00547330 = 0;
  DAT_00547331 = 0;
  DAT_00547332 = 0;
  DAT_00547338 = 0;
  DAT_00547340 = 0;
  DAT_00547348 = 0;
  DAT_00547350 = 0;
  DAT_00547358 = 0;
  DAT_00547360 = 0;
  DAT_00547368 = 0;
  DAT_0054736c = 0;
  DAT_0054736d = 0;
  DAT_0054736e = 0;
  DAT_0054736f = 0;
  DAT_00547370 = 0;
  DAT_00547371 = 0;
  DAT_00547372 = 0;
  DAT_00547373 = 0;
  DAT_0054737f = 0;
  DAT_00546c38 = 1;
  DAT_00546c40 = &DAT_00547310;
  FUN_003efd44(&DAT_00546c30,0,0);
  FUN_003edb60(param_1,PTR_DAT_005019e8,&DAT_00546c30);
  DAT_00546be0 = PTR_DAT_00501b50 + 0x10;
  DAT_00546be8 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501958,&DAT_00546be0);
  DAT_005463e0 = PTR_DAT_00501940 + 0x10;
  DAT_005463e8 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501a08,&DAT_005463e0);
  DAT_00546590 = 0;
  DAT_00546588 = 1;
  DAT_00546580 = PTR_DAT_00501da8 + 0x10;
  DAT_00546598 = 0;
  DAT_005465a0 = 0;
  DAT_005465a8 = 0;
  DAT_005465b0 = 0;
  DAT_005465b8 = 0;
  DAT_005465c0 = 0;
  DAT_005465c8 = 0;
  DAT_005465d0 = 0;
  DAT_005465d8 = 0;
  DAT_005465e0 = 0;
  DAT_005465e8 = 0;
  DAT_005465f0 = 0;
  DAT_005465f8 = 0;
  DAT_00546600 = 0;
  DAT_00546608 = 0;
  DAT_00546610 = 0;
  DAT_00546618 = 0;
  DAT_00546620 = 0;
  DAT_00546628 = 0;
  DAT_00546630 = 0;
  DAT_00546638 = 0;
  DAT_00546640 = 0;
  DAT_00546648 = 0;
  DAT_00546650 = 0;
  DAT_00546658 = 0;
  DAT_00546660 = 0;
  DAT_00546668 = 0;
  DAT_00546670 = 0;
  DAT_00546678 = 0;
  DAT_00546680 = 0;
  DAT_00546688 = 0;
  DAT_00546690 = 0;
  DAT_00546698 = 0;
  DAT_005466a0 = 0;
  DAT_005466a8 = 0;
  DAT_005466b0 = 0;
  DAT_005466b8 = 0;
  DAT_005466c0 = 0;
  DAT_005466c8 = 0;
  DAT_005466d0 = 0;
  DAT_005466d8 = 0;
  DAT_005466e0 = 0;
  DAT_005466e8 = 0;
  DAT_005466f0 = 0;
  DAT_005466f8 = 0;
  DAT_00546700 = 0;
  DAT_00546708 = 0;
  FUN_003ddf3c(&DAT_00547620,&DAT_00546580,1);
  FUN_003edb60(param_1,PTR_DAT_005019f8,&DAT_00547620);
  DAT_00547380 = PTR_DAT_00501990 + 0x10;
  DAT_00547388 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501c10,&DAT_00547380);
  DAT_00546c20 = PTR_DAT_00501c58 + 0x10;
  DAT_00546c28 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501d88,&DAT_00546c20);
  FUN_003de4dc(&DAT_005463a0,1);
  FUN_003edb60(param_1,PTR_DAT_00501db8,&DAT_005463a0);
  FUN_003d1690(&DAT_00546cf0,1);
  FUN_003edb60(param_1,PTR_DAT_00501ec0,&DAT_00546cf0);
  FUN_0041a8fc(&DAT_005472f0,1);
  FUN_003edb60(param_1,PTR_DAT_00501df0,&DAT_005472f0);
  DAT_00546820 = PTR_DAT_00501df8 + 0x10;
  DAT_00546380 = PTR_DAT_00501c68 + 0x10;
  DAT_00546828 = 1;
  DAT_00546830 = 0;
  DAT_00546838 = 0;
  DAT_00546840 = 0;
  DAT_00546848 = 0;
  DAT_00546850 = 0;
  DAT_00546858 = 0;
  DAT_00546860 = 0;
  DAT_00546868 = 0;
  DAT_0054686c = 0;
  DAT_00546968 = 0;
  DAT_00546388 = 1;
  DAT_00546390 = &DAT_00546820;
  FUN_003f07dc(&DAT_00546380,0);
  FUN_003edb60(param_1,PTR_DAT_00501a18,&DAT_00546380);
  DAT_00546bf0 = PTR_DAT_00501ee8 + 0x10;
  DAT_00546bf8 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501bb8,&DAT_00546bf0);
  DAT_00546c00 = PTR_DAT_00501a60 + 0x10;
  DAT_00546c08 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501b40,&DAT_00546c00);
                    /* catch() { ... } // from try @ 003eeaac with catch @ 003ee844
                       catch() { ... } // from try @ 003eeb14 with catch @ 003ee844 */
  DAT_00546c58 = 1;
  DAT_00546c50 = PTR_DAT_005019c8 + 0x10;
  DAT_00546c60 = FUN_003ed450();
  FUN_003edb60(param_1,PTR_DAT_00501c18,&DAT_00546c50);
  DAT_00546740 = PTR_DAT_00501d48 + 0x10;
  DAT_00546360 = PTR_DAT_00501cb0 + 0x10;
  DAT_00546748 = 1;
  DAT_00546750 = 0;
  DAT_00546758 = 0;
  DAT_00546760 = 0;
  DAT_00546764 = 0;
  DAT_00546768 = 0;
  DAT_00546770 = 0;
  DAT_00546778 = 0;
  DAT_00546780 = 0;
  DAT_00546788 = 0;
  DAT_00546790 = 0;
  DAT_00546798 = 0;
  DAT_005467a0 = 0;
  DAT_005467a4 = 0;
  DAT_005467a5 = 0;
  DAT_005467a6 = 0;
  DAT_005467a7 = 0;
  DAT_005467a8 = 0;
  DAT_005467a9 = 0;
  DAT_005467aa = 0;
  DAT_005467ab = 0;
  DAT_005467d8 = 0;
  DAT_00546368 = 1;
  DAT_00546370 = &DAT_00546740;
  FUN_003f0330(&DAT_00546360,0,0);
  FUN_003edb60(param_1,PTR_DAT_00501f90,&DAT_00546360);
  DAT_00547240 = PTR_DAT_00501948 + 0x10;
  DAT_00546cc0 = PTR_DAT_00501ed8 + 0x10;
  DAT_00547248 = 1;
  DAT_00547250 = 0;
  DAT_00547258 = 0;
  DAT_00547260 = 0;
  DAT_00547264 = 0;
  DAT_00547268 = 0;
  DAT_00547270 = 0;
  DAT_00547278 = 0;
  DAT_00547280 = 0;
  DAT_00547288 = 0;
  DAT_00547290 = 0;
  DAT_00547298 = 0;
  DAT_005472a0 = 0;
  DAT_005472a4 = 0;
  DAT_005472a5 = 0;
  DAT_005472a6 = 0;
  DAT_005472a7 = 0;
  DAT_005472a8 = 0;
  DAT_005472a9 = 0;
  DAT_005472aa = 0;
  DAT_005472ab = 0;
  DAT_005472d8 = 0;
  DAT_00546cc8 = 1;
  DAT_00546cd0 = &DAT_00547240;
  FUN_003f01cc(&DAT_00546cc0,0,0);
  FUN_003edb60(param_1,PTR_DAT_00501d58,&DAT_00546cc0);
  DAT_00546340 = PTR_DAT_005018f0 + 0x10;
  DAT_00546348 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501f78,&DAT_00546340);
  DAT_005472e0 = PTR_DAT_00501f50 + 0x10;
  DAT_005472e8 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501a48,&DAT_005472e0);
  DAT_00546400 = 0;
  DAT_005463f8 = 1;
  DAT_005463f0 = PTR_DAT_00501930 + 0x10;
  DAT_00546408 = 0;
  DAT_00546410 = 0;
  DAT_00546418 = 0;
  DAT_00546420 = 0;
  DAT_00546428 = 0;
  DAT_00546430 = 0;
  DAT_00546438 = 0;
  DAT_00546440 = 0;
  DAT_00546448 = 0;
                    /* try { // try from 003eeaac to 004eeaaf has its CatchHandler @ 003ee844 */
  DAT_00546450 = 0;
  DAT_00546458 = 0;
  DAT_00546460 = 0;
  DAT_00546468 = 0;
  DAT_00546470 = 0;
                    /* try { // try from 003eeac0 to 004eeac3 has its CatchHandler @ 003eeadc */
  DAT_00546478 = 0;
  DAT_00546480 = 0;
  DAT_00546488 = 0;
  DAT_00546490 = 0;
  DAT_00546498 = 0;
                    /* try { // try from 003eead4 to 004eead7 has its CatchHandler @ 003eeb18 */
  DAT_005464a0 = 0;
  DAT_005464a8 = 0;
                    /* catch() { ... } // from try @ 003eeac0 with catch @ 003eeadc */
  DAT_005464b0 = 0;
  DAT_005464b8 = 0;
  DAT_005464c0 = 0;
  DAT_005464c8 = 0;
  DAT_005464d0 = 0;
  DAT_005464d8 = 0;
  DAT_005464e0 = 0;
  DAT_005464e8 = 0;
  DAT_005464f0 = 0;
  DAT_005464f8 = 0;
  DAT_00546500 = 0;
  DAT_00546508 = 0;
  DAT_00546510 = 0;
  DAT_00546518 = 0;
                    /* try { // try from 003eeb14 to 004eeb17 has its CatchHandler @ 003ee844 */
  DAT_00546520 = 0;
                    /* catch() { ... } // from try @ 003eead4 with catch @ 003eeb18 */
  DAT_00546528 = 0;
  DAT_00546530 = 0;
  DAT_00546538 = 0;
  DAT_00546540 = 0;
  DAT_00546548 = 0;
  DAT_00546550 = 0;
  DAT_00546558 = 0;
                    /* catch() { ... } // from try @ 003eebcc with catch @ 003eeb34 */
  DAT_00546560 = 0;
  DAT_00546568 = 0;
  DAT_00546570 = 0;
  DAT_00546578 = 0;
  FUN_004005d0(&DAT_00546bb0,&DAT_005463f0,1);
  FUN_003edb60(param_1,PTR_DAT_00501a00,&DAT_00546bb0);
                    /* try { // try from 003eeb74 to 004eeb77 has its CatchHandler @ 003eebbc */
  DAT_00546810 = PTR_DAT_00501cb8 + 0x10;
  DAT_00546818 = 1;
  FUN_003edb60(param_1,PTR_DAT_00501880,&DAT_00546810);
  DAT_00547530 = PTR_DAT_00501bc8 + 0x10;
  DAT_00547538 = 1;
                    /* catch() { ... } // from try @ 003eeb74 with catch @ 003eebbc */
  FUN_003edb60(param_1,PTR_DAT_00501dc8,&DAT_00547530);
                    /* try { // try from 003eebcc to 004eebcf has its CatchHandler @ 003eeb34 */
  FUN_00400b70(&DAT_00547220,1);
  FUN_003edb60(param_1,PTR_DAT_00501e18,&DAT_00547220);
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501db0);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_005474a0;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501c48);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_005462d0;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_005019e8);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_00547310;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_005019f8);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_00546580;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501a18);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_00546820;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501f90);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_00546740;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501d58);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_00547240;
  lVar5 = *(long *)(param_1 + 6);
  lVar1 = FUN_003edb10(PTR_DAT_00501a00);
  *(undefined ***)(lVar5 + lVar1 * 8) = &DAT_005463f0;
  return;
}


==================================================================

### FUNC 003eedb4 (68 bytes) name=FUN_003eedb4

void FUN_003eedb4(void)

{
  undefined *puVar1;
  
  FUN_003ee160(&DAT_00546c90,2);
  puVar1 = PTR_DAT_00501bf8;
  *(undefined **)PTR_DAT_00501b98 = &DAT_00546c90;
  *(undefined **)puVar1 = &DAT_00546c90;
  return;
}


==================================================================

### FUNC 003eedf8 (120 bytes) name=FUN_003eedf8

void FUN_003eedf8(void)

{
  undefined *puVar1;
  
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
                    /* catch() { ... } // from try @ 003eee54 with catch @ 003eee10
                       catch() { ... } // from try @ 003ef090 with catch @ 003eee10
                       catch() { ... } // from try @ 003ef208 with catch @ 003eee10 */
    pthread_once((pthread_once_t *)PTR_DAT_00501a58,FUN_003eedb4);
  }
  puVar1 = PTR_DAT_00501b98;
  if (*(long *)PTR_DAT_00501b98 != 0) {
    return;
  }
  FUN_003ee160(&DAT_00546c90,2);
                    /* try { // try from 003eee54 to 004eee57 has its CatchHandler @ 003eee10 */
  *(undefined **)puVar1 = &DAT_00546c90;
  *(undefined **)PTR_DAT_00501bf8 = &DAT_00546c90;
  return;
}


==================================================================

### FUNC 003eee70 (504 bytes) name=FUN_003eee70

undefined8 FUN_003eee70(undefined8 param_1,undefined8 *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  char *pcVar4;
  int *piVar5;
  undefined8 uVar6;
  undefined1 auVar7 [16];
  char *local_8;
  
  FUN_003eedf8();
  if (((DAT_00546730 & 1) == 0) && (iVar3 = __cxa_guard_acquire(&DAT_00546730), iVar3 != 0)) {
    DAT_00547390 = 0;
    DAT_00547398 = 0;
    DAT_005473a0 = 0;
    DAT_005473a8 = 0;
    DAT_005473b0 = 0;
    __cxa_guard_release(&DAT_00546730);
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) goto LAB_003eeeac;
LAB_003eef94:
    piVar5 = (int *)*param_2;
    uVar6 = *(undefined8 *)PTR_DAT_00501bf8;
    *piVar5 = *piVar5 + 1;
LAB_003eeee0:
    *(int **)PTR_DAT_00501bf8 = piVar5;
    FUN_003ece5c(&local_8,param_2);
    iVar3 = FUN_00412830(&local_8,&DAT_00479be8);
    if (iVar3 == 0) {
      pcVar4 = local_8 + -0x18;
      if (pcVar4 == PTR_DAT_00501f30) goto LAB_003eef24;
LAB_003eefdc:
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = *(int *)(local_8 + -8);
        *(int *)(local_8 + -8) = iVar3 + -1;
        if (0 < iVar3) goto LAB_003eef3c;
LAB_003ef000:
                    /* try { // try from 003ef004 to 004ef01f has its CatchHandler @ 003ef19c */
        operator_delete(pcVar4);
        goto LAB_003eef24;
      }
      piVar5 = (int *)(local_8 + -8);
      do {
                    /* try { // try from 003eefe8 to 004eefeb has its CatchHandler @ 003ef20c */
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      if (iVar3 < 1) goto LAB_003ef000;
    }
    else {
      setlocale(6,local_8);
      pcVar4 = local_8 + -0x18;
      if (pcVar4 != PTR_DAT_00501f30) goto LAB_003eefdc;
LAB_003eef24:
                    /* try { // try from 003eef28 to 004eef6f has its CatchHandler @ 003ef21c */
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003eef3c;
    }
    iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547390);
    if (iVar3 == 0) {
LAB_003eef3c:
      FUN_003ece54(param_1,uVar6);
      return param_1;
    }
    auVar7 = FUN_003cecfc();
  }
  else {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_003eef94;
LAB_003eeeac:
    iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00547390);
    if (iVar3 == 0) {
      piVar5 = (int *)*param_2;
      uVar6 = *(undefined8 *)PTR_DAT_00501bf8;
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = *piVar5 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      piVar5 = (int *)*param_2;
      goto LAB_003eeee0;
    }
    uVar6 = FUN_003ceccc();
                    /* try { // try from 003ef04c to 004ef04f has its CatchHandler @ 003ef20c */
    if ((PTR_pthread_create_00501cc8 == (undefined *)0x0) ||
       (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547390), iVar3 == 0))
    goto LAB_003ef030;
    auVar7 = FUN_003cecfc();
  }
  uVar6 = auVar7._0_8_;
  if (auVar7._8_8_ == -1) {
                    /* WARNING: Subroutine does not return */
    __cxa_call_unexpected();
  }
LAB_003ef030:
                    /* WARNING: Subroutine does not return */
  _Unwind_Resume(uVar6);
}


==================================================================

### FUNC 003ef0c4 (164 bytes) name=FUN_003ef0c4

undefined * FUN_003ef0c4(void)

{
  undefined *puVar1;
  
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    pthread_once((pthread_once_t *)PTR_DAT_00501a58,FUN_003eedb4);
  }
  puVar1 = PTR_DAT_00501b98;
                    /* try { // try from 003ef0f8 to 004ef193 has its CatchHandler @ 003ef21c */
  if (*(long *)PTR_DAT_00501b98 != 0) {
    FUN_003ece54(&DAT_00546c10);
    return &DAT_00546c10;
  }
  FUN_003ee160(&DAT_00546c90,2);
  *(undefined **)puVar1 = &DAT_00546c90;
  *(undefined **)PTR_DAT_00501bf8 = &DAT_00546c90;
  FUN_003ece54(&DAT_00546c10,&DAT_00546c90);
  return &DAT_00546c10;
}


==================================================================

### FUNC 003ef168 (436 bytes) name=FUN_003ef168

void FUN_003ef168(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  int *piVar6;
  long extraout_x1;
  long lVar7;
  long extraout_x1_00;
  
  *param_1 = 0;
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
                    /* catch() { ... } // from try @ 003ef004 with catch @ 003ef19c */
    pthread_once((pthread_once_t *)PTR_DAT_00501a58,FUN_003eedb4);
  }
  puVar3 = PTR_DAT_00501b98;
  if (*(long *)PTR_DAT_00501b98 == 0) {
    piVar6 = (int *)&DAT_00546c90;
    FUN_003ee160(&DAT_00546c90,2);
    puVar4 = PTR_DAT_00501bf8;
    *(undefined **)puVar3 = &DAT_00546c90;
    *(undefined **)puVar4 = &DAT_00546c90;
  }
  else {
    piVar6 = *(int **)PTR_DAT_00501bf8;
  }
  *param_1 = piVar6;
  if (*(int **)PTR_DAT_00501b98 == piVar6) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *piVar6 = *piVar6 + 1;
      return;
    }
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = *piVar6 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
                    /* try { // try from 003ef2bc to 004ef2bf has its CatchHandler @ 003ef448 */
    return;
  }
                    /* catch() { ... } // from try @ 003ef418 with catch @ 003ef240
                       catch() { ... } // from try @ 003ef46c with catch @ 003ef240 */
  if (((DAT_00546730 & 1) == 0) && (iVar5 = __cxa_guard_acquire(&DAT_00546730), iVar5 != 0)) {
    DAT_00547390 = 0;
    DAT_00547398 = 0;
    DAT_005473a0 = 0;
    DAT_005473a8 = 0;
    DAT_005473b0 = 0;
    __cxa_guard_release(&DAT_00546730);
  }
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    iVar5 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00547390);
    puVar3 = PTR_DAT_00501bf8;
    if (iVar5 == 0) {
      piVar6 = *(int **)PTR_DAT_00501bf8;
      do {
                    /* try { // try from 003ef208 to 004ef20b has its CatchHandler @ 003eee10 */
                    /* catch() { ... } // from try @ 003eefe8 with catch @ 003ef20c
                       catch() { ... } // from try @ 003ef04c with catch @ 003ef20c */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = *piVar6 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
                    /* catch() { ... } // from try @ 003ef070 with catch @ 003ef214 */
                    /* catch() { ... } // from try @ 003eef28 with catch @ 003ef21c
                       catch() { ... } // from try @ 003ef054 with catch @ 003ef21c
                       catch() { ... } // from try @ 003ef0f8 with catch @ 003ef21c */
      *param_1 = *(undefined8 *)puVar3;
      iVar5 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547390);
      if (iVar5 == 0) {
        return;
      }
      FUN_003cecfc();
      lVar7 = extraout_x1;
    }
    else {
      FUN_003ceccc();
      lVar7 = extraout_x1_00;
    }
    if (lVar7 == -1) {
                    /* WARNING: Subroutine does not return */
      __cxa_call_unexpected();
    }
                    /* WARNING: Subroutine does not return */
    _Unwind_Resume();
  }
  piVar6 = *(int **)PTR_DAT_00501bf8;
  *piVar6 = *piVar6 + 1;
  *param_1 = piVar6;
  return;
}


==================================================================

### FUNC 003ef31c (40 bytes) name=FUN_003ef31c

undefined8 FUN_003ef31c(undefined8 param_1)

{
  undefined8 in_x4;
  
  FUN_00414378(param_1,in_x4);
  return param_1;
}


==================================================================

### FUNC 003ef344 (40 bytes) name=FUN_003ef344

undefined8 FUN_003ef344(undefined8 param_1)

{
  undefined8 in_x4;
  
  FUN_00418c54(param_1,in_x4);
  return param_1;
}


==================================================================

### FUNC 003ef36c (32 bytes) name=FUN_003ef36c

void FUN_003ef36c(long *param_1,undefined8 param_2)

{
                    /* try { // try from 003ef370 to 004ef373 has its CatchHandler @ 003ef4c8 */
  (**(code **)(*param_1 + 0x20))(param_1,param_2,0);
  return;
}


==================================================================

### FUNC 003ef38c (32 bytes) name=FUN_003ef38c

void FUN_003ef38c(long *param_1,undefined8 param_2)

{
                    /* try { // try from 003ef38c to 004ef3a7 has its CatchHandler @ 003ef498 */
  (**(code **)(*param_1 + 0x20))(param_1,param_2,0);
  return;
}


==================================================================

### FUNC 003ef3ac (20 bytes) name=FUN_003ef3ac

void FUN_003ef3ac(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003ef3c0 (20 bytes) name=FUN_003ef3c0

void FUN_003ef3c0(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003ef3d4 (52 bytes) name=FUN_003ef3d4

void FUN_003ef3d4(long *param_1)

{
                    /* try { // try from 003ef3d4 to 004ef3d7 has its CatchHandler @ 003ef4c8 */
                    /* try { // try from 003ef3dc to 004ef3f3 has its CatchHandler @ 003ef470 */
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
                    /* try { // try from 003ef3f8 to 004ef40f has its CatchHandler @ 003ef448 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ef408 (52 bytes) name=FUN_003ef408

void FUN_003ef408(long *param_1)

{
                    /* try { // try from 003ef418 to 004ef42b has its CatchHandler @ 003ef240 */
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ef43c (40 bytes) name=FUN_003ef43c

void FUN_003ef43c(long param_1)

{
  int iVar1;
  
                    /* catch() { ... } // from try @ 003ef2bc with catch @ 003ef448
                       catch() { ... } // from try @ 003ef3f8 with catch @ 003ef448 */
  iVar1 = getc(*(FILE **)(param_1 + 0x40));
  *(int *)(param_1 + 0x48) = iVar1;
  return;
}


==================================================================

### FUNC 003ef464 (40 bytes) name=FUN_003ef464

int FUN_003ef464(long param_1)

{
  int iVar1;
  
                    /* try { // try from 003ef46c to 004ef46f has its CatchHandler @ 003ef240 */
                    /* catch() { ... } // from try @ 003ef3dc with catch @ 003ef470 */
  iVar1 = getc(*(FILE **)(param_1 + 0x40));
  iVar1 = ungetc(iVar1,*(FILE **)(param_1 + 0x40));
  return iVar1;
}


==================================================================

### FUNC 003ef48c (100 bytes) name=FUN_003ef48c

int FUN_003ef48c(long param_1,int param_2)

{
  int iVar1;
  
                    /* catch() { ... } // from try @ 003ef38c with catch @ 003ef498 */
  if (param_2 == -1) {
                    /* catch() { ... } // from try @ 003ef370 with catch @ 003ef4c8
                       catch() { ... } // from try @ 003ef3d4 with catch @ 003ef4c8 */
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 != -1) {
      iVar1 = ungetc(iVar1,*(FILE **)(param_1 + 0x40));
      *(undefined4 *)(param_1 + 0x48) = 0xffffffff;
      return iVar1;
    }
  }
  else {
    iVar1 = ungetc(param_2,*(FILE **)(param_1 + 0x40));
  }
  *(undefined4 *)(param_1 + 0x48) = 0xffffffff;
  return iVar1;
}


==================================================================

### FUNC 003ef4f0 (8 bytes) name=FUN_003ef4f0

int FUN_003ef4f0(long param_1)

{
  int iVar1;
  
  iVar1 = fflush(*(FILE **)(param_1 + 0x40));
  return iVar1;
}


==================================================================

### FUNC 003ef4f8 (8 bytes) name=FUN_003ef4f8

int FUN_003ef4f8(long param_1)

{
  int iVar1;
  
  iVar1 = fflush(*(FILE **)(param_1 + 0x40));
  return iVar1;
}


==================================================================

### FUNC 003ef500 (88 bytes) name=FUN_003ef500

undefined1  [16] FUN_003ef500(long param_1,long param_2,int param_3)

{
  int iVar1;
  ulong uVar2;
  undefined1 auVar3 [16];
  
  iVar1 = 0;
  if ((param_3 != 0) && (iVar1 = 2, param_3 == 1)) {
    iVar1 = 1;
  }
  iVar1 = fseek(*(FILE **)(param_1 + 0x40),param_2,iVar1);
  uVar2 = 0xffffffffffffffff;
  if (iVar1 == 0) {
    uVar2 = ftell(*(FILE **)(param_1 + 0x40));
  }
  auVar3._8_8_ = 0;
  auVar3._0_8_ = uVar2;
  return auVar3;
}


==================================================================

### FUNC 003ef558 (88 bytes) name=FUN_003ef558

undefined1  [16] FUN_003ef558(long param_1,long param_2,int param_3)

{
  int iVar1;
  ulong uVar2;
  undefined1 auVar3 [16];
  
  iVar1 = 0;
  if ((param_3 != 0) && (iVar1 = 2, param_3 == 1)) {
    iVar1 = 1;
  }
  iVar1 = fseek(*(FILE **)(param_1 + 0x40),param_2,iVar1);
  uVar2 = 0xffffffffffffffff;
  if (iVar1 == 0) {
    uVar2 = ftell(*(FILE **)(param_1 + 0x40));
  }
  auVar3._8_8_ = 0;
  auVar3._0_8_ = uVar2;
  return auVar3;
}


==================================================================

### FUNC 003ef5b0 (40 bytes) name=FUN_003ef5b0

void FUN_003ef5b0(long param_1)

{
  wint_t wVar1;
  
  wVar1 = getwc(*(__FILE **)(param_1 + 0x40));
  *(wint_t *)(param_1 + 0x48) = wVar1;
  return;
}


==================================================================

### FUNC 003ef5d8 (116 bytes) name=FUN_003ef5d8

long FUN_003ef5d8(long param_1,long param_2,long param_3)

{
  wint_t wVar1;
  undefined4 uVar2;
  long lVar3;
  
  lVar3 = 0;
  if (param_3 == 0) {
    uVar2 = 0xffffffff;
  }
  else {
    do {
      wVar1 = getwc(*(__FILE **)(param_1 + 0x40));
      if (wVar1 == 0xffffffff) {
        uVar2 = 0xffffffff;
        if (lVar3 == 0) goto LAB_003ef62c;
        break;
      }
      *(wint_t *)(param_2 + lVar3 * 4) = wVar1;
      lVar3 = lVar3 + 1;
    } while (param_3 != lVar3);
    uVar2 = *(undefined4 *)(param_2 + lVar3 * 4 + -4);
  }
LAB_003ef62c:
  *(undefined4 *)(param_1 + 0x48) = uVar2;
  return lVar3;
}


==================================================================

### FUNC 003ef64c (40 bytes) name=FUN_003ef64c

wint_t FUN_003ef64c(long param_1)

{
  wint_t wVar1;
  
  wVar1 = getwc(*(__FILE **)(param_1 + 0x40));
  wVar1 = ungetwc(wVar1,*(__FILE **)(param_1 + 0x40));
  return wVar1;
}


==================================================================

### FUNC 003ef674 (108 bytes) name=FUN_003ef674

wint_t FUN_003ef674(long param_1,wint_t param_2)

{
  wint_t wVar1;
  
  if (param_2 == 0xffffffff) {
    wVar1 = 0xffffffff;
    if (*(wint_t *)(param_1 + 0x48) != 0xffffffff) {
      wVar1 = ungetwc(*(wint_t *)(param_1 + 0x48),*(__FILE **)(param_1 + 0x40));
      *(undefined4 *)(param_1 + 0x48) = 0xffffffff;
      return wVar1;
    }
  }
  else {
    wVar1 = ungetwc(param_2,*(__FILE **)(param_1 + 0x40));
  }
  *(undefined4 *)(param_1 + 0x48) = 0xffffffff;
  return wVar1;
}


==================================================================

### FUNC 003ef6e0 (100 bytes) name=FUN_003ef6e0

long FUN_003ef6e0(long param_1,long param_2,long param_3)

{
  wint_t wVar1;
  long lVar2;
  
  if (param_3 == 0) {
    lVar2 = 0;
  }
  else {
    lVar2 = 0;
    do {
      wVar1 = putwc(*(wchar_t *)(param_2 + lVar2 * 4),*(__FILE **)(param_1 + 0x40));
      if (wVar1 == 0xffffffff) {
        return lVar2;
      }
      lVar2 = lVar2 + 1;
    } while (param_3 != lVar2);
  }
  return lVar2;
}


==================================================================

### FUNC 003ef744 (16 bytes) name=FUN_003ef744

void FUN_003ef744(long param_1,void *param_2,size_t param_3)

{
  fwrite(param_2,1,param_3,*(FILE **)(param_1 + 0x40));
  return;
}


==================================================================

### FUNC 003ef754 (88 bytes) name=FUN_003ef754

void FUN_003ef754(long param_1,void *param_2,size_t param_3)

{
  size_t sVar1;
  
  sVar1 = fread(param_2,1,param_3,*(FILE **)(param_1 + 0x40));
  if (0 < (long)sVar1) {
    *(uint *)(param_1 + 0x48) = (uint)*(byte *)((long)param_2 + (sVar1 - 1));
    return;
  }
  *(undefined4 *)(param_1 + 0x48) = 0xffffffff;
                    /* catch() { ... } // from try @ 003ef7dc with catch @ 003ef7a0
                       catch() { ... } // from try @ 003ef968 with catch @ 003ef7a0
                       catch() { ... } // from try @ 003ef9c4 with catch @ 003ef7a0
                       catch() { ... } // from try @ 003efa1c with catch @ 003ef7a0
                       catch() { ... } // from try @ 003efa74 with catch @ 003ef7a0
                       catch() { ... } // from try @ 003efc6c with catch @ 003ef7a0
                       catch() { ... } // from try @ 003efca8 with catch @ 003ef7a0
                       catch() { ... } // from try @ 003efdb4 with catch @ 003ef7a0 */
  return;
}


==================================================================

### FUNC 003ef7ac (60 bytes) name=FUN_003ef7ac

int FUN_003ef7ac(long param_1,int param_2)

{
  int iVar1;
  
  if (param_2 != -1) {
    iVar1 = putc(param_2,*(FILE **)(param_1 + 0x40));
    return iVar1;
  }
  iVar1 = fflush(*(FILE **)(param_1 + 0x40));
                    /* try { // try from 003ef7dc to 004ef7df has its CatchHandler @ 003ef7a0 */
  return -(uint)(iVar1 != 0);
}


==================================================================

### FUNC 003ef7e8 (60 bytes) name=FUN_003ef7e8

wint_t FUN_003ef7e8(long param_1,wchar_t param_2)

{
  wint_t wVar1;
  int iVar2;
  
  if (param_2 != L'\xffffffff') {
    wVar1 = putwc(param_2,*(__FILE **)(param_1 + 0x40));
    return wVar1;
  }
  iVar2 = fflush(*(FILE **)(param_1 + 0x40));
  return -(uint)(iVar2 != 0);
}


==================================================================

### FUNC 003ef824 (12 bytes) name=FUN_003ef824

void FUN_003ef824(undefined8 param_1,long *param_2)

{
  FUN_003f1ad0(param_1,*param_2,*(undefined8 *)(*param_2 + -0x18));
  return;
}


==================================================================

### FUNC 003ef830 (140 bytes) name=FUN_003ef830

void FUN_003ef830(long *param_1,undefined8 param_2)

{
  undefined1 uVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003ef8b8 to 004ef8bb has its CatchHandler @ 003efe1c */
    FUN_0040f118();
  }
  if ((char)plVar2[7] != '\0') {
    FUN_003db200(param_1,param_2,*(undefined1 *)((long)plVar2 + 0x43));
    return;
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,10);
  FUN_003db200(param_1,param_2,uVar1);
  return;
}


==================================================================

### FUNC 003ef8bc (636 bytes) name=FUN_003ef8bc

long * FUN_003ef8bc(long *param_1,long *param_2)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  long *plVar4;
  long *plVar5;
  long lVar6;
  int *piVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  long lVar11;
  char local_208 [8];
  int local_200 [128];
  
                    /* try { // try from 003ef8d8 to 004ef8fb has its CatchHandler @ 003efdec */
  FUN_003d7624(local_208,param_1,0);
  if (local_208[0] == '\0') {
    lVar9 = *param_1;
    uVar3 = 4;
  }
  else {
                    /* try { // try from 003ef94c to 004ef963 has its CatchHandler @ 003efdc8 */
    FUN_00416540(param_2,0,*(undefined8 *)(*param_2 + -0x18),0);
                    /* try { // try from 003ef968 to 004ef9b3 has its CatchHandler @ 003ef7a0 */
    lVar9 = *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10);
    if (lVar9 < 1) {
      lVar9 = 0xffffffffffffffe;
    }
    FUN_003ece1c(local_200,(long)param_1 + *(long *)(*param_1 + -0x18) + 0xd0);
    plVar4 = (long *)FUN_00401028(local_200);
    FUN_003ed708(local_200);
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((int *)plVar5[2] < (int *)plVar5[3]) {
                    /* try { // try from 003ef9bc to 004ef9bf has its CatchHandler @ 003efcd0 */
      iVar2 = *(int *)plVar5[2];
    }
    else {
      iVar2 = (**(code **)(*plVar5 + 0x48))();
    }
                    /* try { // try from 003ef9c4 to 004efa0b has its CatchHandler @ 003ef7a0 */
    if (iVar2 == -1) {
      lVar10 = 0;
      lVar6 = 0;
    }
    else {
      lVar11 = 0;
      lVar8 = 0;
      do {
        cVar1 = (**(code **)(*plVar4 + 0x10))(plVar4,8,iVar2);
        lVar10 = lVar8;
        lVar6 = lVar11;
        if (cVar1 != '\0') goto LAB_003ef9f0;
        if (lVar8 == 0x80) {
          FUN_00418664(param_2,local_200,0x80);
          lVar10 = 1;
          lVar8 = 0;
        }
        else {
          lVar10 = lVar8 + 1;
        }
        lVar6 = *param_1;
        lVar11 = lVar11 + 1;
        local_200[lVar8] = iVar2;
        plVar5 = *(long **)((long)param_1 + *(long *)(lVar6 + -0x18) + 0xe8);
        piVar7 = (int *)plVar5[2];
        if (piVar7 < (int *)plVar5[3]) {
                    /* try { // try from 003efa68 to 004efa6b has its CatchHandler @ 003efc84 */
          iVar2 = *piVar7;
          plVar5[2] = (long)(piVar7 + 1);
        }
        else {
          iVar2 = (**(code **)(*plVar5 + 0x50))(plVar5);
        }
        lVar6 = lVar9;
                    /* try { // try from 003efa74 to 004efa87 has its CatchHandler @ 003ef7a0 */
        if (iVar2 == -1) {
          iVar2 = -1;
          if (lVar11 == lVar9) goto LAB_003ef9f0;
          break;
        }
        if ((int *)plVar5[2] < (int *)plVar5[3]) {
          iVar2 = *(int *)plVar5[2];
        }
        else {
          iVar2 = (**(code **)(*plVar5 + 0x48))(plVar5);
        }
        if (lVar11 == lVar9) goto LAB_003ef9f0;
        lVar8 = lVar10;
      } while (iVar2 != -1);
      iVar2 = -1;
      lVar6 = lVar11;
    }
LAB_003ef9f0:
    FUN_00418664(param_2,local_200,lVar10);
    if (iVar2 == -1) {
      lVar9 = *param_1;
      uVar3 = 6;
      if (lVar6 != 0) {
        uVar3 = 2;
      }
                    /* try { // try from 003efb14 to 004efb47 has its CatchHandler @ 003efdb8 */
      *(undefined8 *)((long)param_1 + *(long *)(lVar9 + -0x18) + 0x10) = 0;
    }
    else {
      lVar9 = *param_1;
                    /* try { // try from 003efa14 to 004efa17 has its CatchHandler @ 003efcac */
      *(undefined8 *)((long)param_1 + *(long *)(lVar9 + -0x18) + 0x10) = 0;
      if (lVar6 != 0) {
        return param_1;
      }
                    /* try { // try from 003efa1c to 004efa5f has its CatchHandler @ 003ef7a0 */
      uVar3 = 4;
    }
  }
  lVar9 = (long)param_1 + *(long *)(lVar9 + -0x18);
  FUN_003d2c00(lVar9,uVar3 | *(uint *)(lVar9 + 0x20));
                    /* try { // try from 003ef928 to 004ef92b has its CatchHandler @ 003efe1c */
                    /* try { // try from 003ef930 to 004ef947 has its CatchHandler @ 003efcf4 */
  return param_1;
}


==================================================================

### FUNC 003efbec (12 bytes) name=FUN_003efbec

void FUN_003efbec(undefined8 param_1,long *param_2)

{
  FUN_003f41b4(param_1,*param_2,*(undefined8 *)(*param_2 + -0x18));
  return;
}


==================================================================

### FUNC 003efbf8 (84 bytes) name=FUN_003efbf8

void FUN_003efbf8(long *param_1,undefined8 param_2)

{
  undefined4 uVar1;
  long *plVar2;
  
                    /* try { // try from 003efbf8 to 004efbfb has its CatchHandler @ 003efd38 */
                    /* try { // try from 003efc04 to 004efc07 has its CatchHandler @ 003efdd8 */
                    /* try { // try from 003efc0c to 004efc0f has its CatchHandler @ 003efd38 */
                    /* try { // try from 003efc14 to 004efc2b has its CatchHandler @ 003efdd0 */
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar1 = (**(code **)(*plVar2 + 0x50))(plVar2,10);
                    /* try { // try from 003efc30 to 004efc47 has its CatchHandler @ 003efdc0 */
    FUN_003dbb94(param_1,param_2,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003efc4c (108 bytes) name=FUN_003efc4c

void FUN_003efc4c(long *param_1,long param_2)

{
  undefined *puVar1;
  
                    /* try { // try from 003efc4c to 004efc63 has its CatchHandler @ 003efdb8 */
                    /* try { // try from 003efc6c to 004efc7f has its CatchHandler @ 003ef7a0 */
  puVar1 = PTR_DAT_00501bb0 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
                    /* catch() { ... } // from try @ 003efa68 with catch @ 003efc84 */
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  param_1[8] = param_2;
  *param_1 = (long)&PTR_FUN_004fd800;
                    /* try { // try from 003efca8 to 004efcab has its CatchHandler @ 003ef7a0 */
  *(undefined4 *)(param_1 + 9) = 0xffffffff;
                    /* catch() { ... } // from try @ 003efa14 with catch @ 003efcac */
  return;
}


==================================================================

### FUNC 003efcb8 (8 bytes) name=FUN_003efcb8

undefined8 FUN_003efcb8(long param_1)

{
  return *(undefined8 *)(param_1 + 0x40);
}


==================================================================

### FUNC 003efcc0 (108 bytes) name=FUN_003efcc0

void FUN_003efcc0(long *param_1,long param_2)

{
  undefined *puVar1;
  
                    /* catch() { ... } // from try @ 003ef9bc with catch @ 003efcd0 */
  puVar1 = PTR_DAT_00501c78 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
                    /* catch() { ... } // from try @ 003ef930 with catch @ 003efcf4 */
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  param_1[8] = param_2;
  *param_1 = (long)&PTR_FUN_004fd880;
  *(undefined4 *)(param_1 + 9) = 0xffffffff;
  return;
}


==================================================================

### FUNC 003efd2c (8 bytes) name=FUN_003efd2c

undefined8 FUN_003efd2c(long param_1)

{
  return *(undefined8 *)(param_1 + 0x40);
}


==================================================================

### FUNC 003efd34 (16 bytes) name=FUN_003efd34

undefined4 FUN_003efd34(void)

{
                    /* catch() { ... } // from try @ 003efbf8 with catch @ 003efd38
                       catch() { ... } // from try @ 003efc0c with catch @ 003efd38 */
  return *(undefined4 *)PTR_DAT_00501b78;
}


==================================================================

### FUNC 003efd44 (396 bytes) name=FUN_003efd44

void FUN_003efd44(long param_1)

{
  undefined4 uVar1;
  undefined *puVar2;
  long lVar3;
  undefined1 *puVar4;
  long *plVar5;
  
  plVar5 = *(long **)(param_1 + 0x10);
  if (plVar5 == (long *)0x0) {
    plVar5 = operator_new(0x70);
    *(undefined4 *)(plVar5 + 1) = 0;
    puVar2 = PTR_DAT_005018e8;
    plVar5[2] = 0;
    plVar5[3] = 0;
    *plVar5 = (long)(puVar2 + 0x10);
                    /* try { // try from 003efe7c to 004efe7f has its CatchHandler @ 003efe50 */
    *(undefined1 *)(plVar5 + 4) = 0;
    *(undefined1 *)((long)plVar5 + 0x21) = 0;
    *(undefined1 *)((long)plVar5 + 0x22) = 0;
    plVar5[5] = 0;
    plVar5[6] = 0;
    plVar5[7] = 0;
    plVar5[8] = 0;
    plVar5[9] = 0;
    plVar5[10] = 0;
    *(undefined4 *)(plVar5 + 0xb) = 0;
    *(undefined1 *)((long)plVar5 + 0x5c) = 0;
    *(undefined1 *)((long)plVar5 + 0x5d) = 0;
    *(undefined1 *)((long)plVar5 + 0x5e) = 0;
    *(undefined1 *)((long)plVar5 + 0x5f) = 0;
    *(undefined1 *)(plVar5 + 0xc) = 0;
    *(undefined1 *)((long)plVar5 + 0x61) = 0;
    *(undefined1 *)((long)plVar5 + 0x62) = 0;
    *(undefined1 *)((long)plVar5 + 99) = 0;
    *(undefined1 *)((long)plVar5 + 0x6f) = 0;
    *(long **)(param_1 + 0x10) = plVar5;
  }
  *(undefined1 *)((long)plVar5 + 0x21) = 0x2e;
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x22) = 0x2c;
  lVar3 = *(long *)(param_1 + 0x10);
  *(undefined1 **)(lVar3 + 0x10) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x28) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x38) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x48) = &DAT_00472008;
  *(undefined8 *)(lVar3 + 0x18) = 0;
  *(undefined8 *)(lVar3 + 0x30) = 0;
  *(undefined8 *)(lVar3 + 0x40) = 0;
  *(undefined8 *)(lVar3 + 0x50) = 0;
  *(undefined4 *)(lVar3 + 0x58) = 0;
  uVar1 = *(undefined4 *)PTR_DAT_00501b78;
  *(undefined4 *)(lVar3 + 0x5c) = uVar1;
                    /* try { // try from 003efdb4 to 004efdb7 has its CatchHandler @ 003ef7a0 */
  *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60) = uVar1;
                    /* catch() { ... } // from try @ 003efb14 with catch @ 003efdb8
                       catch() { ... } // from try @ 003efc4c with catch @ 003efdb8 */
                    /* catch() { ... } // from try @ 003efc30 with catch @ 003efdc0 */
  puVar4 = *(undefined1 **)PTR_PTR_00501b68;
                    /* catch() { ... } // from try @ 003ef94c with catch @ 003efdc8 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 100) = *puVar4;
                    /* catch() { ... } // from try @ 003efc14 with catch @ 003efdd0 */
                    /* catch() { ... } // from try @ 003efc04 with catch @ 003efdd8 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x65) = puVar4[1];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x66) = puVar4[2];
                    /* catch() { ... } // from try @ 003ef8d8 with catch @ 003efdec */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x67) = puVar4[3];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x68) = puVar4[4];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x69) = puVar4[5];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6a) = puVar4[6];
                    /* catch() { ... } // from try @ 003ef8b8 with catch @ 003efe1c
                       catch() { ... } // from try @ 003ef928 with catch @ 003efe1c */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6b) = puVar4[7];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6c) = puVar4[8];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6d) = puVar4[9];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6e) = puVar4[10];
                    /* catch() { ... } // from try @ 003efe7c with catch @ 003efe50
                       catch() { ... } // from try @ 003effb0 with catch @ 003efe50
                       catch() { ... } // from try @ 003effec with catch @ 003efe50
                       catch() { ... } // from try @ 003f002c with catch @ 003efe50
                       catch() { ... } // from try @ 003f0070 with catch @ 003efe50
                       catch() { ... } // from try @ 003f0290 with catch @ 003efe50
                       catch() { ... } // from try @ 003f02cc with catch @ 003efe50
                       catch() { ... } // from try @ 003f03d8 with catch @ 003efe50 */
  return;
}


==================================================================

### FUNC 003efed0 (396 bytes) name=FUN_003efed0

void FUN_003efed0(long param_1)

{
  undefined4 uVar1;
  undefined *puVar2;
  long lVar3;
  undefined1 *puVar4;
  long *plVar5;
  
  plVar5 = *(long **)(param_1 + 0x10);
  if (plVar5 == (long *)0x0) {
                    /* try { // try from 003effe4 to 004effe7 has its CatchHandler @ 003f02f4 */
    plVar5 = operator_new(0x70);
    *(undefined4 *)(plVar5 + 1) = 0;
    puVar2 = PTR_DAT_00501b80;
                    /* try { // try from 003effec to 004f001b has its CatchHandler @ 003efe50 */
    plVar5[2] = 0;
    plVar5[3] = 0;
    *plVar5 = (long)(puVar2 + 0x10);
    *(undefined1 *)(plVar5 + 4) = 0;
    *(undefined1 *)((long)plVar5 + 0x21) = 0;
    *(undefined1 *)((long)plVar5 + 0x22) = 0;
    plVar5[5] = 0;
    plVar5[6] = 0;
    plVar5[7] = 0;
    plVar5[8] = 0;
                    /* try { // try from 003f0024 to 004f0027 has its CatchHandler @ 003f02d0 */
    plVar5[9] = 0;
    plVar5[10] = 0;
                    /* try { // try from 003f002c to 004f005b has its CatchHandler @ 003efe50 */
    *(undefined4 *)(plVar5 + 0xb) = 0;
    *(undefined1 *)((long)plVar5 + 0x5c) = 0;
    *(undefined1 *)((long)plVar5 + 0x5d) = 0;
    *(undefined1 *)((long)plVar5 + 0x5e) = 0;
    *(undefined1 *)((long)plVar5 + 0x5f) = 0;
    *(undefined1 *)(plVar5 + 0xc) = 0;
    *(undefined1 *)((long)plVar5 + 0x61) = 0;
    *(undefined1 *)((long)plVar5 + 0x62) = 0;
    *(undefined1 *)((long)plVar5 + 99) = 0;
    *(undefined1 *)((long)plVar5 + 0x6f) = 0;
    *(long **)(param_1 + 0x10) = plVar5;
  }
  *(undefined1 *)((long)plVar5 + 0x21) = 0x2e;
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x22) = 0x2c;
  lVar3 = *(long *)(param_1 + 0x10);
  *(undefined1 **)(lVar3 + 0x10) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x28) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x38) = &DAT_00472008;
  *(undefined1 **)(lVar3 + 0x48) = &DAT_00472008;
  *(undefined8 *)(lVar3 + 0x18) = 0;
  *(undefined8 *)(lVar3 + 0x30) = 0;
  *(undefined8 *)(lVar3 + 0x40) = 0;
  *(undefined8 *)(lVar3 + 0x50) = 0;
  *(undefined4 *)(lVar3 + 0x58) = 0;
  uVar1 = *(undefined4 *)PTR_DAT_00501b78;
  *(undefined4 *)(lVar3 + 0x5c) = uVar1;
  *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60) = uVar1;
  puVar4 = *(undefined1 **)PTR_PTR_00501b68;
                    /* try { // try from 003eff58 to 004eff5b has its CatchHandler @ 003f0440 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 100) = *puVar4;
                    /* try { // try from 003eff64 to 004eff67 has its CatchHandler @ 003f0410 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x65) = puVar4[1];
                    /* try { // try from 003eff6c to 004eff6f has its CatchHandler @ 003f0440 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x66) = puVar4[2];
                    /* try { // try from 003eff74 to 004eff8b has its CatchHandler @ 003f0318 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x67) = puVar4[3];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x68) = puVar4[4];
                    /* try { // try from 003eff90 to 004effa7 has its CatchHandler @ 003f03ec */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x69) = puVar4[5];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6a) = puVar4[6];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6b) = puVar4[7];
                    /* try { // try from 003effb0 to 004effdb has its CatchHandler @ 003efe50 */
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6c) = puVar4[8];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6d) = puVar4[9];
  *(undefined1 *)(*(long *)(param_1 + 0x10) + 0x6e) = puVar4[10];
  return;
}


==================================================================

### FUNC 003f005c (68 bytes) name=FUN_003f005c

void FUN_003f005c(long *param_1)

{
                    /* try { // try from 003f0064 to 004f0067 has its CatchHandler @ 003f02a8 */
                    /* try { // try from 003f0070 to 004f0083 has its CatchHandler @ 003efe50 */
  *param_1 = (long)(PTR_DAT_00501c40 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f00b4 (76 bytes) name=FUN_003f00b4

void FUN_003f00b4(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501c40 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f0114 (68 bytes) name=FUN_003f0114

void FUN_003f0114(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501ac0 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f016c (76 bytes) name=FUN_003f016c

void FUN_003f016c(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501ac0 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f01cc (356 bytes) name=FUN_003f01cc

void FUN_003f01cc(long param_1)

{
  undefined4 uVar1;
  undefined *puVar2;
  long lVar3;
  long *plVar4;
  byte *pbVar5;
  
                    /* try { // try from 003f01cc to 004f01cf has its CatchHandler @ 003f035c */
  plVar4 = *(long **)(param_1 + 0x10);
  if (plVar4 == (long *)0x0) {
    plVar4 = operator_new(0xa0);
    *(undefined4 *)(plVar4 + 1) = 0;
    puVar2 = PTR_DAT_00501948;
                    /* try { // try from 003f02cc to 004f02cf has its CatchHandler @ 003efe50 */
    plVar4[2] = 0;
                    /* catch() { ... } // from try @ 003f0024 with catch @ 003f02d0 */
    plVar4[3] = 0;
    *plVar4 = (long)(puVar2 + 0x10);
    *(undefined1 *)(plVar4 + 4) = 0;
    *(undefined4 *)((long)plVar4 + 0x24) = 0;
    *(undefined4 *)(plVar4 + 5) = 0;
    plVar4[6] = 0;
    plVar4[7] = 0;
    plVar4[8] = 0;
                    /* catch() { ... } // from try @ 003effe4 with catch @ 003f02f4 */
    plVar4[9] = 0;
    plVar4[10] = 0;
    plVar4[0xb] = 0;
    *(undefined4 *)(plVar4 + 0xc) = 0;
    *(undefined1 *)((long)plVar4 + 100) = 0;
    *(undefined1 *)((long)plVar4 + 0x65) = 0;
    *(undefined1 *)((long)plVar4 + 0x66) = 0;
    *(undefined1 *)((long)plVar4 + 0x67) = 0;
    *(undefined1 *)(plVar4 + 0xd) = 0;
                    /* catch() { ... } // from try @ 003eff74 with catch @ 003f0318 */
    *(undefined1 *)((long)plVar4 + 0x69) = 0;
    *(undefined1 *)((long)plVar4 + 0x6a) = 0;
    *(undefined1 *)((long)plVar4 + 0x6b) = 0;
    *(undefined1 *)(plVar4 + 0x13) = 0;
    *(long **)(param_1 + 0x10) = plVar4;
  }
                    /* try { // try from 003f01e8 to 004f0203 has its CatchHandler @ 003f03fc */
  *(undefined4 *)((long)plVar4 + 0x24) = 0x2e;
  plVar4[6] = (long)&DAT_00479f78;
  *(undefined4 *)(plVar4 + 5) = 0x2c;
  plVar4[8] = (long)&DAT_00479f78;
  plVar4[10] = (long)&DAT_00479f78;
  plVar4[2] = (long)&DAT_00472008;
  plVar4[3] = 0;
  plVar4[7] = 0;
  plVar4[9] = 0;
  plVar4[0xb] = 0;
  *(undefined4 *)(plVar4 + 0xc) = 0;
                    /* try { // try from 003f0230 to 004f0233 has its CatchHandler @ 003f035c */
  uVar1 = *(undefined4 *)PTR_DAT_00501b78;
  *(undefined4 *)((long)plVar4 + 100) = uVar1;
                    /* try { // try from 003f0238 to 004f024f has its CatchHandler @ 003f03f4 */
  *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x68) = uVar1;
  lVar3 = *(long *)(param_1 + 0x10);
  pbVar5 = *(byte **)PTR_PTR_00501b68;
                    /* try { // try from 003f0254 to 004f026b has its CatchHandler @ 003f03e4 */
  *(uint *)(lVar3 + 0x6c) = (uint)*pbVar5;
  *(uint *)(lVar3 + 0x70) = (uint)pbVar5[1];
  *(uint *)(lVar3 + 0x74) = (uint)pbVar5[2];
  *(uint *)(lVar3 + 0x78) = (uint)pbVar5[3];
                    /* try { // try from 003f0270 to 004f0287 has its CatchHandler @ 003f03dc */
  *(uint *)(lVar3 + 0x7c) = (uint)pbVar5[4];
  *(uint *)(lVar3 + 0x80) = (uint)pbVar5[5];
  *(uint *)(lVar3 + 0x84) = (uint)pbVar5[6];
  *(uint *)(lVar3 + 0x88) = (uint)pbVar5[7];
                    /* try { // try from 003f0290 to 004f02a3 has its CatchHandler @ 003efe50 */
  *(uint *)(lVar3 + 0x8c) = (uint)pbVar5[8];
  *(uint *)(lVar3 + 0x90) = (uint)pbVar5[9];
  *(uint *)(lVar3 + 0x94) = (uint)pbVar5[10];
                    /* catch() { ... } // from try @ 003f0064 with catch @ 003f02a8 */
  return;
}


==================================================================

### FUNC 003f0330 (356 bytes) name=FUN_003f0330

void FUN_003f0330(long param_1)

{
  undefined4 uVar1;
  undefined *puVar2;
  long lVar3;
  long *plVar4;
  byte *pbVar5;
  
  plVar4 = *(long **)(param_1 + 0x10);
  if (plVar4 == (long *)0x0) {
    plVar4 = operator_new(0xa0);
    *(undefined4 *)(plVar4 + 1) = 0;
    puVar2 = PTR_DAT_00501d48;
    plVar4[2] = 0;
    plVar4[3] = 0;
    *plVar4 = (long)(puVar2 + 0x10);
                    /* catch() { ... } // from try @ 003eff58 with catch @ 003f0440
                       catch() { ... } // from try @ 003eff6c with catch @ 003f0440 */
    *(undefined1 *)(plVar4 + 4) = 0;
    *(undefined4 *)((long)plVar4 + 0x24) = 0;
    *(undefined4 *)(plVar4 + 5) = 0;
    plVar4[6] = 0;
    plVar4[7] = 0;
    plVar4[8] = 0;
    plVar4[9] = 0;
    plVar4[10] = 0;
    plVar4[0xb] = 0;
    *(undefined4 *)(plVar4 + 0xc) = 0;
    *(undefined1 *)((long)plVar4 + 100) = 0;
    *(undefined1 *)((long)plVar4 + 0x65) = 0;
    *(undefined1 *)((long)plVar4 + 0x66) = 0;
    *(undefined1 *)((long)plVar4 + 0x67) = 0;
    *(undefined1 *)(plVar4 + 0xd) = 0;
    *(undefined1 *)((long)plVar4 + 0x69) = 0;
    *(undefined1 *)((long)plVar4 + 0x6a) = 0;
    *(undefined1 *)((long)plVar4 + 0x6b) = 0;
    *(undefined1 *)(plVar4 + 0x13) = 0;
    *(long **)(param_1 + 0x10) = plVar4;
  }
  *(undefined4 *)((long)plVar4 + 0x24) = 0x2e;
                    /* catch() { ... } // from try @ 003f01cc with catch @ 003f035c
                       catch() { ... } // from try @ 003f0230 with catch @ 003f035c */
  plVar4[6] = (long)&DAT_00479f78;
  *(undefined4 *)(plVar4 + 5) = 0x2c;
  plVar4[8] = (long)&DAT_00479f78;
  plVar4[10] = (long)&DAT_00479f78;
  plVar4[2] = (long)&DAT_00472008;
  plVar4[3] = 0;
  plVar4[7] = 0;
  plVar4[9] = 0;
  plVar4[0xb] = 0;
  *(undefined4 *)(plVar4 + 0xc) = 0;
  uVar1 = *(undefined4 *)PTR_DAT_00501b78;
  *(undefined4 *)((long)plVar4 + 100) = uVar1;
  *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x68) = uVar1;
  lVar3 = *(long *)(param_1 + 0x10);
  pbVar5 = *(byte **)PTR_PTR_00501b68;
  *(uint *)(lVar3 + 0x6c) = (uint)*pbVar5;
  *(uint *)(lVar3 + 0x70) = (uint)pbVar5[1];
  *(uint *)(lVar3 + 0x74) = (uint)pbVar5[2];
  *(uint *)(lVar3 + 0x78) = (uint)pbVar5[3];
                    /* try { // try from 003f03d8 to 004f03db has its CatchHandler @ 003efe50 */
  *(uint *)(lVar3 + 0x7c) = (uint)pbVar5[4];
                    /* catch() { ... } // from try @ 003f0104 with catch @ 003f03dc
                       catch() { ... } // from try @ 003f0270 with catch @ 003f03dc */
  *(uint *)(lVar3 + 0x80) = (uint)pbVar5[5];
                    /* catch() { ... } // from try @ 003f0254 with catch @ 003f03e4 */
  *(uint *)(lVar3 + 0x84) = (uint)pbVar5[6];
                    /* catch() { ... } // from try @ 003eff90 with catch @ 003f03ec */
  *(uint *)(lVar3 + 0x88) = (uint)pbVar5[7];
                    /* catch() { ... } // from try @ 003f0238 with catch @ 003f03f4 */
  *(uint *)(lVar3 + 0x8c) = (uint)pbVar5[8];
                    /* catch() { ... } // from try @ 003f01e8 with catch @ 003f03fc */
  *(uint *)(lVar3 + 0x90) = (uint)pbVar5[9];
  *(uint *)(lVar3 + 0x94) = (uint)pbVar5[10];
                    /* catch() { ... } // from try @ 003eff64 with catch @ 003f0410 */
  return;
}


==================================================================

### FUNC 003f0494 (68 bytes) name=FUN_003f0494

void FUN_003f0494(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501ed8 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f04ec (76 bytes) name=FUN_003f04ec

void FUN_003f04ec(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501ed8 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f054c (68 bytes) name=FUN_003f054c

void FUN_003f054c(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501cb0 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f05a4 (76 bytes) name=FUN_003f05a4

void FUN_003f05a4(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501cb0 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f0604 (288 bytes) name=FUN_003f0604

void FUN_003f0604(long param_1)

{
  undefined1 *puVar1;
  long lVar2;
  undefined *puVar3;
  long *plVar4;
  long lVar5;
  long lVar6;
  
  plVar4 = *(long **)(param_1 + 0x10);
  if (plVar4 == (long *)0x0) {
    plVar4 = operator_new(0x90);
    *(undefined4 *)(plVar4 + 1) = 0;
    puVar3 = PTR_DAT_005019b0;
                    /* try { // try from 003f06e4 to 004f06e7 has its CatchHandler @ 003f06fc */
    plVar4[2] = 0;
    plVar4[3] = 0;
    *plVar4 = (long)(puVar3 + 0x10);
                    /* catch() { ... } // from try @ 003f06e4 with catch @ 003f06fc */
    *(undefined1 *)(plVar4 + 4) = 0;
    plVar4[5] = 0;
    plVar4[6] = 0;
    plVar4[7] = 0;
                    /* try { // try from 003f070c to 004f070f has its CatchHandler @ 003f0688 */
    plVar4[8] = 0;
                    /* catch() { ... } // from try @ 003f084c with catch @ 003f0710 */
    *(undefined1 *)(plVar4 + 9) = 0;
    *(undefined1 *)((long)plVar4 + 0x49) = 0;
    *(undefined1 *)(plVar4 + 0x11) = 0;
    *(long **)(param_1 + 0x10) = plVar4;
  }
  *(undefined1 *)(plVar4 + 9) = 0x2e;
  plVar4[3] = 0;
  lVar5 = *(long *)(param_1 + 0x10);
  *(undefined1 *)(plVar4 + 4) = 0;
  plVar4[2] = (long)&DAT_00472008;
  *(undefined1 *)(lVar5 + 0x49) = 0x2c;
  lVar5 = 0;
  lVar6 = *(long *)PTR_PTR_00501d10;
  do {
    puVar1 = (undefined1 *)(lVar6 + lVar5);
                    /* try { // try from 003f065c to 004f065f has its CatchHandler @ 003f0674 */
    lVar2 = *(long *)(param_1 + 0x10) + lVar5;
    lVar5 = lVar5 + 1;
    *(undefined1 *)(lVar2 + 0x4a) = *puVar1;
  } while (lVar5 != 0x24);
                    /* catch() { ... } // from try @ 003f065c with catch @ 003f0674 */
  lVar5 = 0;
  lVar6 = *(long *)PTR_PTR_00501aa0;
  do {
                    /* try { // try from 003f0684 to 004f0687 has its CatchHandler @ 003f0600 */
    puVar1 = (undefined1 *)(lVar6 + lVar5);
                    /* catch() { ... } // from try @ 003f070c with catch @ 003f0688 */
    lVar2 = *(long *)(param_1 + 0x10) + lVar5;
    lVar5 = lVar5 + 1;
    *(undefined1 *)(lVar2 + 0x6e) = *puVar1;
  } while (lVar5 != 0x1a);
  lVar5 = *(long *)(param_1 + 0x10);
  *(undefined **)(lVar5 + 0x28) = &DAT_0046d718;
  *(undefined8 *)(lVar5 + 0x30) = 4;
  *(char **)(lVar5 + 0x38) = "false";
  *(undefined8 *)(lVar5 + 0x40) = 5;
  return;
}


==================================================================

### FUNC 003f0724 (68 bytes) name=FUN_003f0724

void FUN_003f0724(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501e00 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f077c (76 bytes) name=FUN_003f077c

void FUN_003f077c(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501e00 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f07dc (612 bytes) name=FUN_003f07dc

void FUN_003f07dc(long param_1)

{
  byte *pbVar1;
  uint3 uVar2;
  undefined *puVar3;
  long lVar4;
  long *plVar5;
  long *plVar6;
  ulong *puVar7;
  ulong *puVar8;
  ulong *puVar9;
  undefined1 uVar10;
  undefined1 uVar11;
  undefined1 uVar12;
  ulong uVar13;
  ulong uVar14;
  long lVar15;
  
  plVar5 = *(long **)(param_1 + 0x10);
  if (plVar5 == (long *)0x0) {
    plVar5 = operator_new(0x150);
    *(undefined4 *)(plVar5 + 1) = 0;
    puVar3 = PTR_DAT_00501df8;
                    /* try { // try from 003f0a00 to 004f0a03 has its CatchHandler @ 003f0a18 */
    plVar5[2] = 0;
    plVar5[3] = 0;
    *plVar5 = (long)(puVar3 + 0x10);
                    /* catch() { ... } // from try @ 003f0a00 with catch @ 003f0a18 */
    *(undefined1 *)(plVar5 + 4) = 0;
    plVar5[5] = 0;
    plVar5[6] = 0;
    plVar5[7] = 0;
                    /* try { // try from 003f0a28 to 004f0a2b has its CatchHandler @ 003f0998 */
    plVar5[8] = 0;
    *(undefined4 *)(plVar5 + 9) = 0;
                    /* catch() { ... } // from try @ 003f0adc with catch @ 003f0a30
                       catch() { ... } // from try @ 003f0b28 with catch @ 003f0a30 */
    *(undefined4 *)((long)plVar5 + 0x4c) = 0;
    *(undefined1 *)(plVar5 + 0x29) = 0;
    *(long **)(param_1 + 0x10) = plVar5;
  }
  plVar5[3] = 0;
  plVar5[2] = (long)&DAT_00472008;
  *(undefined4 *)(plVar5 + 9) = 0x2e;
  *(undefined4 *)((long)plVar5 + 0x4c) = 0x2c;
  *(undefined1 *)(plVar5 + 4) = 0;
  puVar7 = (ulong *)(plVar5 + 10);
  puVar8 = (ulong *)(plVar5 + 0x1c);
                    /* try { // try from 003f0824 to 004f0827 has its CatchHandler @ 003f083c */
  puVar9 = *(ulong **)PTR_PTR_00501d10;
  if ((puVar7 < (ulong *)((long)puVar9 + 0x24U)) && (puVar9 < puVar8)) {
    lVar4 = 0;
    do {
      pbVar1 = (byte *)((long)puVar9 + lVar4);
      lVar4 = lVar4 + 1;
      *(uint *)puVar7 = (uint)*pbVar1;
      puVar7 = (ulong *)((long)puVar7 + 4);
    } while (lVar4 != 0x24);
  }
  else {
                    /* catch() { ... } // from try @ 003f0824 with catch @ 003f083c */
                    /* try { // try from 003f084c to 004f084f has its CatchHandler @ 003f0710 */
    uVar14 = puVar9[1];
    uVar13 = *puVar9;
                    /* catch() { ... } // from try @ 003f0994 with catch @ 003f0850 */
    uVar10 = (undefined1)(uVar13 >> 8);
    uVar11 = (undefined1)(uVar13 >> 0x28);
    uVar2 = CONCAT12((char)(uVar14 >> 8),(short)uVar14) & 0xff00ff;
    uVar12 = (undefined1)(uVar14 >> 0x28);
    plVar5[0xb] = (ulong)CONCAT14((char)(uVar13 >> 0x18),(uint)(byte)(uVar13 >> 0x10));
    *puVar7 = (ulong)((uint6)CONCAT14(uVar10,(uint)CONCAT12(uVar10,(ushort)(byte)uVar13)) &
                     0xffff0000ffff);
    plVar5[0xd] = (ulong)CONCAT14((char)(uVar13 >> 0x38),(uint)(byte)(uVar13 >> 0x30));
    plVar5[0xc] = (ulong)((uint6)CONCAT14(uVar11,(uint)CONCAT12(uVar11,(ushort)(byte)(uVar13 >> 0x20
                                                                                     ))) &
                         0xffff0000ffff);
    plVar5[0xf] = (ulong)CONCAT14((char)(uVar14 >> 0x18),(uint)(byte)(uVar14 >> 0x10));
    plVar5[0xe] = (ulong)((uint6)CONCAT14((char)(uVar2 >> 0x10),(uint)uVar2) & 0xffff0000ffff);
    plVar5[0x11] = (ulong)CONCAT14((char)(uVar14 >> 0x38),(uint)(byte)(uVar14 >> 0x30));
    plVar5[0x10] = (ulong)((uint6)CONCAT14(uVar12,(uint)CONCAT12(uVar12,(ushort)(byte)(uVar14 >>
                                                                                      0x20))) &
                          0xffff0000ffff);
    uVar14 = puVar9[3];
    uVar13 = puVar9[2];
    uVar10 = (undefined1)(uVar13 >> 8);
    uVar11 = (undefined1)(uVar13 >> 0x28);
    uVar2 = CONCAT12((char)(uVar14 >> 8),(short)uVar14) & 0xff00ff;
    uVar12 = (undefined1)(uVar14 >> 0x28);
    plVar5[0x13] = (ulong)CONCAT14((char)(uVar13 >> 0x18),(uint)(byte)(uVar13 >> 0x10));
    plVar5[0x12] = (ulong)((uint6)CONCAT14(uVar10,(uint)CONCAT12(uVar10,(ushort)(byte)uVar13)) &
                          0xffff0000ffff);
    plVar5[0x15] = (ulong)CONCAT14((char)(uVar13 >> 0x38),(uint)(byte)(uVar13 >> 0x30));
    plVar5[0x14] = (ulong)((uint6)CONCAT14(uVar11,(uint)CONCAT12(uVar11,(ushort)(byte)(uVar13 >>
                                                                                      0x20))) &
                          0xffff0000ffff);
    plVar5[0x17] = (ulong)CONCAT14((char)(uVar14 >> 0x18),(uint)(byte)(uVar14 >> 0x10));
    plVar5[0x16] = (ulong)((uint6)CONCAT14((char)(uVar2 >> 0x10),(uint)uVar2) & 0xffff0000ffff);
    plVar5[0x19] = (ulong)CONCAT14((char)(uVar14 >> 0x38),(uint)(byte)(uVar14 >> 0x30));
    plVar5[0x18] = (ulong)((uint6)CONCAT14(uVar12,(uint)CONCAT12(uVar12,(ushort)(byte)(uVar14 >>
                                                                                      0x20))) &
                          0xffff0000ffff);
    *(uint *)(plVar5 + 0x1a) = (uint)(byte)puVar9[4];
    *(uint *)((long)plVar5 + 0xd4) = (uint)*(byte *)((long)puVar9 + 0x21);
    *(uint *)(plVar5 + 0x1b) = (uint)*(byte *)((long)puVar9 + 0x22);
    *(uint *)((long)plVar5 + 0xdc) = (uint)*(byte *)((long)puVar9 + 0x23);
  }
  plVar6 = *(long **)PTR_PTR_00501aa0;
  if ((puVar8 < (ulong *)((long)plVar6 + 0x1aU)) && (plVar6 < plVar5 + 0x29)) {
    lVar4 = 0;
    do {
      pbVar1 = (byte *)((long)plVar6 + lVar4);
      lVar4 = lVar4 + 1;
      *(uint *)puVar8 = (uint)*pbVar1;
      puVar8 = (ulong *)((long)puVar8 + 4);
    } while (lVar4 != 0x1a);
  }
  else {
    lVar15 = plVar6[1];
    lVar4 = *plVar6;
    uVar10 = (undefined1)((ulong)lVar4 >> 8);
    uVar11 = (undefined1)((ulong)lVar4 >> 0x28);
    uVar2 = CONCAT12((char)((ulong)lVar15 >> 8),(short)lVar15) & 0xff00ff;
    uVar12 = (undefined1)((ulong)lVar15 >> 0x28);
    plVar5[0x1d] = (ulong)CONCAT14((char)((ulong)lVar4 >> 0x18),(uint)(byte)((ulong)lVar4 >> 0x10));
    *puVar8 = (ulong)((uint6)CONCAT14(uVar10,(uint)CONCAT12(uVar10,(ushort)(byte)lVar4)) &
                     0xffff0000ffff);
    plVar5[0x1f] = (ulong)CONCAT14((char)((ulong)lVar4 >> 0x38),(uint)(byte)((ulong)lVar4 >> 0x30));
    plVar5[0x1e] = (ulong)((uint6)CONCAT14(uVar11,(uint)CONCAT12(uVar11,(ushort)(byte)((ulong)lVar4
                                                                                      >> 0x20))) &
                          0xffff0000ffff);
    plVar5[0x21] = (ulong)CONCAT14((char)((ulong)lVar15 >> 0x18),(uint)(byte)((ulong)lVar15 >> 0x10)
                                  );
    plVar5[0x20] = (ulong)((uint6)CONCAT14((char)(uVar2 >> 0x10),(uint)uVar2) & 0xffff0000ffff);
    plVar5[0x23] = (ulong)CONCAT14((char)((ulong)lVar15 >> 0x38),(uint)(byte)((ulong)lVar15 >> 0x30)
                                  );
    plVar5[0x22] = (ulong)((uint6)CONCAT14(uVar12,(uint)CONCAT12(uVar12,(ushort)(byte)((ulong)lVar15
                                                                                      >> 0x20))) &
                          0xffff0000ffff);
    *(uint *)(plVar5 + 0x24) = (uint)*(byte *)(plVar6 + 2);
    *(uint *)((long)plVar5 + 0x124) = (uint)*(byte *)((long)plVar6 + 0x11);
    *(uint *)(plVar5 + 0x25) = (uint)*(byte *)((long)plVar6 + 0x12);
    *(uint *)((long)plVar5 + 300) = (uint)*(byte *)((long)plVar6 + 0x13);
    *(uint *)(plVar5 + 0x26) = (uint)*(byte *)((long)plVar6 + 0x14);
    *(uint *)((long)plVar5 + 0x134) = (uint)*(byte *)((long)plVar6 + 0x15);
    *(uint *)(plVar5 + 0x27) = (uint)*(byte *)((long)plVar6 + 0x16);
                    /* try { // try from 003f096c to 004f096f has its CatchHandler @ 003f0984 */
    *(uint *)((long)plVar5 + 0x13c) = (uint)*(byte *)((long)plVar6 + 0x17);
    *(uint *)(plVar5 + 0x28) = (uint)*(byte *)(plVar6 + 3);
    *(uint *)((long)plVar5 + 0x144) = (uint)*(byte *)((long)plVar6 + 0x19);
  }
                    /* catch() { ... } // from try @ 003f096c with catch @ 003f0984 */
  plVar5[5] = (long)&DAT_00479c70;
                    /* try { // try from 003f0994 to 004f0997 has its CatchHandler @ 003f0850 */
  plVar5[6] = 4;
                    /* catch() { ... } // from try @ 003f0a28 with catch @ 003f0998 */
  plVar5[7] = (long)L"false";
  plVar5[8] = 5;
  return;
}


==================================================================

### FUNC 003f0a40 (68 bytes) name=FUN_003f0a40

void FUN_003f0a40(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501c68 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003f0a98 (76 bytes) name=FUN_003f0a98

void FUN_003f0a98(long *param_1)

{
                    /* try { // try from 003f0aac to 004f0aaf has its CatchHandler @ 003f0b04 */
  *param_1 = (long)(PTR_DAT_00501c68 + 0x10);
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
                    /* try { // try from 003f0ad0 to 004f0ad3 has its CatchHandler @ 003f0b2c */
  FUN_003ecdfc(param_1);
                    /* try { // try from 003f0adc to 004f0aef has its CatchHandler @ 003f0a30 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f0af8 (36 bytes) name=FUN_003f0af8

void FUN_003f0af8(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 003f0aac with catch @ 003f0b04 */
  *param_1 = &PTR_FUN_004f8188;
  param_1[1] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 1);
  return;
}


==================================================================

### FUNC 003f0b1c (16 bytes) name=FUN_003f0b1c

void FUN_003f0b1c(long *param_1)

{
                    /* try { // try from 003f0b28 to 004f0b2b has its CatchHandler @ 003f0a30 */
  FUN_003f0af8((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f0b2c (64 bytes) name=FUN_003f0b2c

void FUN_003f0b2c(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 003f0ad0 with catch @ 003f0b2c */
  *param_1 = &PTR_FUN_004f8188;
  param_1[1] = PTR_DAT_00501a40 + 0x10;
                    /* catch() { ... } // from try @ 003f0c00 with catch @ 003f0b58
                       catch() { ... } // from try @ 003f0c50 with catch @ 003f0b58 */
  FUN_003d381c(param_1 + 1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f0b6c (16 bytes) name=FUN_003f0b6c

void FUN_003f0b6c(long *param_1)

{
  FUN_003f0b2c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f0b7c (36 bytes) name=FUN_003f0b7c

void FUN_003f0b7c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f81e8;
  param_1[1] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 1);
  return;
}


==================================================================

### FUNC 003f0ba0 (16 bytes) name=FUN_003f0ba0

void FUN_003f0ba0(long *param_1)

{
  FUN_003f0b7c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f0bb0 (64 bytes) name=FUN_003f0bb0

void FUN_003f0bb0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f81e8;
                    /* try { // try from 003f0bd0 to 004f0bd3 has its CatchHandler @ 003f0c2c */
  param_1[1] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f0bf0 (16 bytes) name=FUN_003f0bf0

void FUN_003f0bf0(long *param_1)

{
                    /* try { // try from 003f0bf0 to 004f0bf3 has its CatchHandler @ 003f0c54 */
  FUN_003f0bb0((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f0c00 (40 bytes) name=FUN_003f0c00

void FUN_003f0c00(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
                    /* try { // try from 003f0c00 to 004f0c17 has its CatchHandler @ 003f0b58 */
  lVar1 = *param_2;
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[1];
  FUN_003d2728((long)param_1 + lVar1,param_3);
  return;
}


==================================================================

### FUNC 003f0c28 (116 bytes) name=FUN_003f0c28

void FUN_003f0c28(undefined8 *param_1,undefined8 param_2)

{
                    /* catch() { ... } // from try @ 003f0bd0 with catch @ 003f0c2c */
  FUN_003d347c(param_1 + 1);
  param_1[0x1c] = 0;
                    /* try { // try from 003f0c50 to 004f0c53 has its CatchHandler @ 003f0b58 */
                    /* catch() { ... } // from try @ 003f0bf0 with catch @ 003f0c54 */
  *(undefined1 *)(param_1 + 0x1d) = 0;
  *(undefined1 *)((long)param_1 + 0xe9) = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  *param_1 = &PTR_FUN_004f8188;
                    /* catch() { ... } // from try @ 003f0db8 with catch @ 003f0c80 */
  param_1[1] = &PTR_FUN_004f81b0;
  FUN_003d2728(param_1 + 1,param_2);
  return;
}


==================================================================

### FUNC 003f0cc0 (24 bytes) name=FUN_003f0cc0

void FUN_003f0cc0(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  return;
}


==================================================================

### FUNC 003f0cd8 (20 bytes) name=FUN_003f0cd8

void FUN_003f0cd8(undefined8 param_1,code *param_2)

{
  (*param_2)();
  return;
}


==================================================================

### FUNC 003f0cec (48 bytes) name=FUN_003f0cec

long * FUN_003f0cec(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003f0d1c (48 bytes) name=FUN_003f0d1c

long * FUN_003f0d1c(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003f0d4c (108 bytes) name=FUN_003f0d4c

void FUN_003f0d4c(long *param_1,undefined8 param_2,long param_3)

{
  long lVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  lVar1 = (**(code **)(*plVar2 + 0x60))(plVar2);
  if (param_3 != lVar1) {
                    /* try { // try from 003f0d90 to 004f0d93 has its CatchHandler @ 003f0da8 */
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f0d90 with catch @ 003f0da8 */
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
    return;
  }
  return;
}


==================================================================

### FUNC 003f0db8 (100 bytes) name=FUN_003f0db8

long * FUN_003f0db8(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  
                    /* try { // try from 003f0db8 to 004f0dbb has its CatchHandler @ 003f0c80 */
                    /* catch() { ... } // from try @ 003f1030 with catch @ 003f0dc0 */
  plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((plVar3 != (long *)0x0) && (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  }
  return param_1;
}


==================================================================

### FUNC 003f0ea0 (196 bytes) name=FUN_003f0ea0

undefined1  [16] FUN_003f0ea0(long *param_1)

{
  undefined8 uVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  
  if ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
                    /* try { // try from 003f0f30 to 004f0f4b has its CatchHandler @ 003f1078 */
    auVar11 = (**(code **)(*plVar5 + 0x20))(plVar5,0,1,0x10);
    uVar2 = auVar11._8_8_;
    uVar1 = auVar11._0_8_;
    uVar4 = uVar2 >> 8 & 0xff;
    uVar6 = uVar2 >> 0x10 & 0xff;
    uVar3 = uVar2 & 0xff;
    uVar7 = uVar2 >> 0x18 & 0xff;
    uVar8 = uVar2 >> 0x20 & 0xff;
    uVar9 = uVar2 >> 0x28 & 0xff;
    uVar10 = uVar2 >> 0x30 & 0xff;
    uVar2 = uVar2 >> 0x38;
  }
  else {
    uVar2 = 0;
    uVar10 = 0;
    uVar9 = 0;
    uVar8 = 0;
    uVar7 = 0;
    uVar6 = 0;
    uVar4 = 0;
    uVar3 = 0;
    uVar1 = 0xffffffffffffffff;
  }
  auVar11._8_8_ =
       uVar3 | uVar4 << 8 | uVar6 << 0x10 | uVar7 << 0x18 | uVar8 << 0x20 | uVar9 << 0x28 |
       uVar10 << 0x30 | uVar2 << 0x38;
  auVar11._0_8_ = uVar1;
                    /* try { // try from 003f0f14 to 004f0f17 has its CatchHandler @ 003f10ac */
  return auVar11;
}


==================================================================

### FUNC 003f0fe8 (136 bytes) name=FUN_003f0fe8

long * FUN_003f0fe8(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  
                    /* try { // try from 003f1030 to 004f1033 has its CatchHandler @ 003f0dc0 */
                    /* catch() { ... } // from try @ 003f0f80 with catch @ 003f1034 */
  if (((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x28))(plVar2,param_2,param_3,0x10), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
                    /* catch() { ... } // from try @ 003f0fb8 with catch @ 003f1020 */
  return param_1;
}


==================================================================

### FUNC 003f10f4 (136 bytes) name=FUN_003f10f4

long * FUN_003f10f4(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  
  if (((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x20))(plVar2,param_2,param_3,0x10), lVar1 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f1200 (40 bytes) name=FUN_003f1200

void FUN_003f1200(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* catch() { ... } // from try @ 003f11f4 with catch @ 003f120c */
  lVar1 = *param_2;
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
                    /* try { // try from 003f121c to 004f121f has its CatchHandler @ 003f10e0 */
                    /* catch() { ... } // from try @ 003f12b4 with catch @ 003f1220 */
  *(long *)((long)param_1 + lVar1) = param_2[1];
  FUN_003d2728((long)param_1 + lVar1,0);
  return;
}


==================================================================

### FUNC 003f1228 (112 bytes) name=FUN_003f1228

void FUN_003f1228(undefined8 *param_1)

{
  FUN_003d347c(param_1 + 1);
  param_1[0x1c] = 0;
  *(undefined1 *)(param_1 + 0x1d) = 0;
  *(undefined1 *)((long)param_1 + 0xe9) = 0;
  param_1[0x1e] = 0;
                    /* try { // try from 003f1264 to 004f1267 has its CatchHandler @ 003f12a4 */
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  *param_1 = &PTR_FUN_004f8188;
                    /* try { // try from 003f127c to 004f127f has its CatchHandler @ 003f12b8 */
  param_1[1] = &PTR_FUN_004f81b0;
                    /* try { // try from 003f1284 to 004f1287 has its CatchHandler @ 003f12a4 */
  FUN_003d2728(param_1 + 1,0);
  return;
}


==================================================================

### FUNC 003f12bc (124 bytes) name=FUN_003f12bc

void FUN_003f12bc(undefined1 *param_1,long *param_2)

{
  long lVar1;
  uint uVar2;
  long lVar3;
  
  lVar3 = *param_2;
                    /* catch() { ... } // from try @ 003f1350 with catch @ 003f12cc */
  *(long **)(param_1 + 8) = param_2;
  lVar1 = *(long *)(lVar3 + -0x18);
  *param_1 = 0;
  lVar1 = (long)param_2 + lVar1;
  if (*(long *)(lVar1 + 0xd8) != 0) {
    uVar2 = *(uint *)(lVar1 + 0x20);
    if (uVar2 != 0) goto LAB_003f1324;
    FUN_003f0db8();
    lVar3 = *param_2;
  }
  lVar1 = (long)param_2 + *(long *)(lVar3 + -0x18);
                    /* try { // try from 003f1308 to 004f130b has its CatchHandler @ 003f1340 */
  uVar2 = *(uint *)(lVar1 + 0x20);
  if (uVar2 == 0) {
    *param_1 = 1;
                    /* try { // try from 003f131c to 004f131f has its CatchHandler @ 003f1354 */
    return;
  }
LAB_003f1324:
                    /* try { // try from 003f1324 to 004f1327 has its CatchHandler @ 003f1340 */
  FUN_003d2254(lVar1,uVar2 | 4);
  return;
}


==================================================================

### FUNC 003f1338 (132 bytes) name=FUN_003f1338

void FUN_003f1338(long param_1)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  
                    /* catch() { ... } // from try @ 003f1308 with catch @ 003f1340
                       catch() { ... } // from try @ 003f1324 with catch @ 003f1340 */
  plVar4 = *(long **)(param_1 + 8);
  lVar3 = *(long *)(*plVar4 + -0x18);
                    /* try { // try from 003f1350 to 004f1353 has its CatchHandler @ 003f12cc */
                    /* catch() { ... } // from try @ 003f131c with catch @ 003f1354 */
                    /* catch() { ... } // from try @ 003f13ec with catch @ 003f1368 */
  if (((((*(uint *)((long)plVar4 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
                    /* try { // try from 003f13a4 to 004f13a7 has its CatchHandler @ 003f13dc */
    lVar3 = (long)*(long **)(param_1 + 8) + *(long *)(**(long **)(param_1 + 8) + -0x18);
                    /* try { // try from 003f13b8 to 004f13bb has its CatchHandler @ 003f13f0 */
    FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
    return;
  }
  return;
}


==================================================================

### FUNC 003f13bc (264 bytes) name=FUN_003f13bc

long * FUN_003f13bc(long *param_1,long param_2)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  uint uVar5;
  undefined1 uStack_11;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f13c0 to 004f13c3 has its CatchHandler @ 003f13dc */
                    /* catch() { ... } // from try @ 003f13a4 with catch @ 003f13dc
                       catch() { ... } // from try @ 003f13c0 with catch @ 003f13dc */
  FUN_003f12bc(local_10,param_1);
                    /* try { // try from 003f13ec to 004f13ef has its CatchHandler @ 003f1368 */
  if ((param_2 == 0) || (local_10[0] == '\0')) {
    if (param_2 != 0) goto LAB_003f1414;
    uVar5 = 1;
  }
  else {
                    /* catch() { ... } // from try @ 003f13b8 with catch @ 003f13f0 */
                    /* catch() { ... } // from try @ 003f1540 with catch @ 003f1404 */
    lVar3 = FUN_003fd410(param_2,*(undefined8 *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)
                         ,&uStack_11);
    uVar5 = 4;
    if (lVar3 != 0) goto LAB_003f1414;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,uVar5 | *(uint *)(lVar3 + 0x20));
LAB_003f1414:
  plVar4 = local_8;
  lVar3 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
    lVar3 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f1564 (288 bytes) name=FUN_003f1564

long * FUN_003f1564(long *param_1,undefined1 param_2)

{
  char cVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  char local_10 [8];
  long *local_8;
  
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((undefined1 *)plVar3[5] < (undefined1 *)plVar3[6]) {
      *(undefined1 *)plVar3[5] = param_2;
      plVar3[5] = plVar3[5] + 1;
    }
    else {
                    /* try { // try from 003f1654 to 004f1657 has its CatchHandler @ 003f166c */
      iVar2 = (**(code **)(*plVar3 + 0x68))(plVar3,param_2);
      if (iVar2 == -1) {
                    /* catch() { ... } // from try @ 003f1654 with catch @ 003f166c */
        lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f167c to 004f167f has its CatchHandler @ 003f1544 */
        FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* catch() { ... } // from try @ 003f17bc with catch @ 003f1680 */
      }
    }
  }
  plVar3 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar3 = *(long **)((long)plVar3 + lVar4 + 0xe8), plVar3 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f1724 (264 bytes) name=FUN_003f1724

long * FUN_003f1724(long *param_1,undefined8 param_2,long param_3)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  char local_10 [8];
  long *local_8;
  
  FUN_003f12bc(local_10,param_1);
  if ((local_10[0] != '\0') &&
     (plVar4 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar3 = (**(code **)(*plVar4 + 0x60))(plVar4,param_2,param_3), param_3 != lVar3)) {
    lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f1794 to 004f1797 has its CatchHandler @ 003f17ac */
    FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
  }
  plVar4 = local_8;
                    /* catch() { ... } // from try @ 003f1794 with catch @ 003f17ac */
  lVar3 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f17bc to 004f17bf has its CatchHandler @ 003f1680 */
                    /* catch() { ... } // from try @ 003f1844 with catch @ 003f17c0 */
  if (((((*(uint *)((long)local_8 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
                    /* try { // try from 003f17fc to 004f17ff has its CatchHandler @ 003f1834 */
    lVar3 = (long)local_8 + *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f1810 to 004f1813 has its CatchHandler @ 003f1848 */
    FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 1);
                    /* try { // try from 003f1818 to 004f181b has its CatchHandler @ 003f1834 */
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f18cc (8 bytes) name=FUN_003f18cc

undefined1 FUN_003f18cc(undefined1 *param_1)

{
                    /* catch() { ... } // from try @ 003f1898 with catch @ 003f18d0
                       catch() { ... } // from try @ 003f18b4 with catch @ 003f18d0 */
  return *param_1;
}


==================================================================

### FUNC 003f18d4 (124 bytes) name=FUN_003f18d4

void FUN_003f18d4(long *param_1)

{
  undefined1 uVar1;
  long *plVar2;
  
                    /* try { // try from 003f18e0 to 004f18e3 has its CatchHandler @ 003f185c */
                    /* catch() { ... } // from try @ 003f18ac with catch @ 003f18e4 */
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
                    /* catch() { ... } // from try @ 003f198c with catch @ 003f18f8 */
  if ((char)plVar2[7] != '\0') {
    FUN_003f1564(param_1,*(undefined1 *)((long)plVar2 + 0x43));
    FUN_003f0db8();
    return;
  }
  FUN_003d14e0(plVar2);
  uVar1 = (**(code **)(*plVar2 + 0x30))(plVar2,10);
  FUN_003f1564(param_1,uVar1);
  FUN_003f0db8();
  return;
}


==================================================================

### FUNC 003f1950 (8 bytes) name=FUN_003f1950

void FUN_003f1950(undefined8 param_1)

{
  FUN_003f1564(param_1,0);
  return;
}


==================================================================

### FUNC 003f1958 (4 bytes) name=thunk_FUN_003f0db8

long * thunk_FUN_003f0db8(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  
  plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((plVar3 != (long *)0x0) && (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  }
  return param_1;
}


==================================================================

### FUNC 003f195c (148 bytes) name=FUN_003f195c

long * FUN_003f195c(long *param_1,undefined1 param_2)

{
  long lVar1;
  long *plVar2;
  
                    /* try { // try from 003f1964 to 004f1967 has its CatchHandler @ 003f197c */
  lVar1 = *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f1964 with catch @ 003f197c */
  if (*(char *)((long)param_1 + lVar1 + 0xe1) != '\0') {
    *(undefined1 *)((long)param_1 + lVar1 + 0xe0) = param_2;
                    /* try { // try from 003f198c to 004f198f has its CatchHandler @ 003f18f8 */
                    /* catch() { ... } // from try @ 003f1ad0 with catch @ 003f1990 */
    return param_1;
  }
  plVar2 = *(long **)((long)param_1 + lVar1 + 0xf0);
  if (plVar2 != (long *)0x0) {
    if ((char)plVar2[7] == '\0') {
      FUN_003d14e0(plVar2);
      (**(code **)(*plVar2 + 0x30))(plVar2,0x20);
    }
    *(undefined1 *)((long)param_1 + lVar1 + 0xe0) = param_2;
    *(undefined1 *)((long)param_1 + lVar1 + 0xe1) = 1;
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003f19f0 (28 bytes) name=FUN_003f19f0

void FUN_003f19f0(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) | param_2;
  return;
}


==================================================================

### FUNC 003f1a0c (28 bytes) name=FUN_003f1a0c

void FUN_003f1a0c(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & (param_2 ^ 0xffffffff);
  return;
}


==================================================================

### FUNC 003f1a28 (120 bytes) name=FUN_003f1a28

void FUN_003f1a28(long *param_1,int param_2)

{
  long lVar1;
  uint uVar2;
  
  lVar1 = *(long *)(*param_1 + -0x18);
  if (param_2 == 8) {
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 0x40;
    return;
  }
  if (param_2 != 10) {
    uVar2 = 8;
    if (param_2 != 0x10) {
      uVar2 = 0;
    }
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         uVar2 | *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5;
    return;
  }
  *(uint *)((long)param_1 + lVar1 + 0x18) = *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 2
  ;
  return;
}


==================================================================

### FUNC 003f1aa0 (24 bytes) name=FUN_003f1aa0

void FUN_003f1aa0(long *param_1,int param_2)

{
                    /* try { // try from 003f1aa8 to 004f1aab has its CatchHandler @ 003f1ac0 */
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 8) = (long)param_2;
  return;
}


==================================================================

### FUNC 003f1ab8 (24 bytes) name=FUN_003f1ab8

void FUN_003f1ab8(long *param_1,int param_2)

{
                    /* catch() { ... } // from try @ 003f1aa8 with catch @ 003f1ac0 */
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10) = (long)param_2;
  return;
}


==================================================================

### FUNC 003f1ad0 (936 bytes) name=FUN_003f1ad0

long * FUN_003f1ad0(long *param_1,undefined8 param_2,long param_3)

{
  bool bVar1;
  char cVar2;
  undefined1 uVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  long lVar7;
  long lVar8;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f1ad0 to 004f1ad3 has its CatchHandler @ 003f1990 */
                    /* catch() { ... } // from try @ 003f1c10 with catch @ 003f1ad4 */
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] == '\0') goto LAB_003f1b50;
  lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
  lVar8 = *(long *)(lVar5 + 0x10);
  if (param_3 < lVar8) {
    bVar1 = (*(uint *)(lVar5 + 0x18) & 0xb0) != 0x20;
    if (bVar1) {
      lVar7 = lVar8 - param_3;
      if (*(char *)(lVar5 + 0xe1) == '\0') {
        plVar6 = *(long **)(lVar5 + 0xf0);
        if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f118();
        }
        if ((char)plVar6[7] == '\0') {
          FUN_003d14e0(plVar6);
          uVar3 = (**(code **)(*plVar6 + 0x30))(plVar6,0x20);
        }
        else {
          uVar3 = *(undefined1 *)((long)plVar6 + 0x59);
        }
        *(undefined1 *)(lVar5 + 0xe0) = uVar3;
                    /* catch() { ... } // from try @ 003f1d3c with catch @ 003f1dd8
                       catch() { ... } // from try @ 003f1da0 with catch @ 003f1dd8 */
        *(undefined1 *)(lVar5 + 0xe1) = 1;
        lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
      }
      else {
        uVar3 = *(undefined1 *)(lVar5 + 0xe0);
      }
      if (0 < lVar7) {
        while( true ) {
          plVar6 = *(long **)(lVar5 + 0xe8);
          if ((undefined1 *)plVar6[5] < (undefined1 *)plVar6[6]) {
            *(undefined1 *)plVar6[5] = uVar3;
            plVar6[5] = plVar6[5] + 1;
          }
          else {
            iVar4 = (**(code **)(*plVar6 + 0x68))(plVar6,uVar3);
            if (iVar4 == -1) {
              lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
              FUN_003d2254(lVar5,*(uint *)(lVar5 + 0x20) | 1);
              lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
              goto LAB_003f1b44;
            }
          }
          lVar7 = lVar7 + -1;
          if (lVar7 == 0) break;
          lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
        }
        lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
      }
    }
LAB_003f1b44:
    if (*(int *)(lVar5 + 0x20) == 0) {
      lVar5 = (**(code **)(**(long **)(lVar5 + 0xe8) + 0x60))
                        (*(long **)(lVar5 + 0xe8),param_2,param_3);
                    /* try { // try from 003f1c60 to 004f1c63 has its CatchHandler @ 003f1c78 */
      if (param_3 != lVar5) {
        lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f1c60 with catch @ 003f1c78 */
        FUN_003d2254(lVar5,*(uint *)(lVar5 + 0x20) | 1);
      }
      if (bVar1) goto LAB_003f1c30;
                    /* try { // try from 003f1c88 to 004f1c8b has its CatchHandler @ 003f1c14 */
                    /* catch() { ... } // from try @ 003f1e04 with catch @ 003f1c8c */
      lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
      if (*(int *)(lVar5 + 0x20) == 0) {
                    /* try { // try from 003f1d3c to 004f1d3f has its CatchHandler @ 003f1dd8 */
        lVar8 = lVar8 - param_3;
        if (*(char *)(lVar5 + 0xe1) == '\0') {
          plVar6 = *(long **)(lVar5 + 0xf0);
          if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f118();
          }
          if ((char)plVar6[7] == '\0') {
            FUN_003d14e0(plVar6);
                    /* try { // try from 003f1e60 to 004f1e63 has its CatchHandler @ 003f1e98 */
            uVar3 = (**(code **)(*plVar6 + 0x30))(plVar6,0x20);
          }
          else {
                    /* try { // try from 003f1e04 to 004f1e07 has its CatchHandler @ 003f1c8c */
            uVar3 = *(undefined1 *)((long)plVar6 + 0x59);
          }
                    /* catch() { ... } // from try @ 003f1da8 with catch @ 003f1e08 */
          *(undefined1 *)(lVar5 + 0xe0) = uVar3;
                    /* catch() { ... } // from try @ 003f1d58 with catch @ 003f1e10 */
          *(undefined1 *)(lVar5 + 0xe1) = 1;
          lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f1ea8 with catch @ 003f1e24 */
        }
        else {
          uVar3 = *(undefined1 *)(lVar5 + 0xe0);
        }
        if (0 < lVar8) {
          while( true ) {
            plVar6 = *(long **)(lVar5 + 0xe8);
            if ((undefined1 *)plVar6[5] < (undefined1 *)plVar6[6]) {
              *(undefined1 *)plVar6[5] = uVar3;
              plVar6[5] = plVar6[5] + 1;
            }
            else {
                    /* try { // try from 003f1da0 to 004f1da3 has its CatchHandler @ 003f1dd8 */
              iVar4 = (**(code **)(*plVar6 + 0x68))(plVar6,uVar3);
                    /* try { // try from 003f1da8 to 004f1dbf has its CatchHandler @ 003f1e08 */
              if (iVar4 == -1) {
                lVar7 = *param_1;
                goto LAB_003f1c18;
              }
            }
            lVar8 = lVar8 + -1;
            lVar7 = *param_1;
            if (lVar8 == 0) break;
            lVar5 = (long)param_1 + *(long *)(lVar7 + -0x18);
          }
          goto LAB_003f1c34;
        }
      }
    }
  }
  else {
                    /* catch() { ... } // from try @ 003f1be8 with catch @ 003f1c00 */
    lVar5 = (**(code **)(**(long **)(lVar5 + 0xe8) + 0x60))
                      (*(long **)(lVar5 + 0xe8),param_2,param_3);
                    /* try { // try from 003f1c10 to 004f1c13 has its CatchHandler @ 003f1ad4 */
    lVar7 = *param_1;
                    /* catch() { ... } // from try @ 003f1c88 with catch @ 003f1c14 */
    if (param_3 != lVar5) {
LAB_003f1c18:
      lVar5 = (long)param_1 + *(long *)(lVar7 + -0x18);
      FUN_003d2254(lVar5,*(uint *)(lVar5 + 0x20) | 1);
LAB_003f1c30:
      lVar7 = *param_1;
    }
LAB_003f1c34:
    lVar5 = (long)param_1 + *(long *)(lVar7 + -0x18);
  }
  *(undefined8 *)(lVar5 + 0x10) = 0;
LAB_003f1b50:
  plVar6 = local_8;
  lVar5 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar5 + 0x18) >> 0xd & 1) != 0) &&
       (cVar2 = std::uncaught_exception(), cVar2 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar5 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar4 = (**(code **)(*plVar6 + 0x30))(), iVar4 == -1)) {
    lVar5 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar5,*(uint *)(lVar5 + 0x20) | 1);
                    /* try { // try from 003f1be8 to 004f1beb has its CatchHandler @ 003f1c00 */
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f1f18 (36 bytes) name=FUN_003f1f18

void FUN_003f1f18(undefined8 param_1,undefined1 param_2)

{
  undefined1 local_1;
  
                    /* try { // try from 003f1f18 to 004f1f1b has its CatchHandler @ 003f1f34 */
  local_1 = param_2;
  FUN_003f1ad0(param_1,&local_1,1);
                    /* catch() { ... } // from try @ 003f1efc with catch @ 003f1f34
                       catch() { ... } // from try @ 003f1f18 with catch @ 003f1f34 */
  return;
}


==================================================================

### FUNC 003f1f3c (36 bytes) name=FUN_003f1f3c

void FUN_003f1f3c(undefined8 param_1,undefined1 param_2)

{
  undefined1 local_1;
  
                    /* try { // try from 003f1f44 to 004f1f47 has its CatchHandler @ 003f1ec0 */
                    /* catch() { ... } // from try @ 003f1f10 with catch @ 003f1f48 */
  local_1 = param_2;
  FUN_003f1ad0(param_1,&local_1,1);
                    /* catch() { ... } // from try @ 003f2094 with catch @ 003f1f5c */
  return;
}


==================================================================

### FUNC 003f1f60 (36 bytes) name=FUN_003f1f60

void FUN_003f1f60(undefined8 param_1,undefined1 param_2)

{
  undefined1 local_1;
  
  local_1 = param_2;
  FUN_003f1ad0(param_1,&local_1,1);
  return;
}


==================================================================

### FUNC 003f1f84 (108 bytes) name=FUN_003f1f84

long * FUN_003f1f84(long *param_1,char *param_2)

{
  long lVar1;
  size_t sVar2;
  
  if (param_2 != (char *)0x0) {
    sVar2 = strlen(param_2);
    FUN_003f1ad0(param_1,param_2,sVar2);
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003f1ff0 (108 bytes) name=FUN_003f1ff0

long * FUN_003f1ff0(long *param_1,char *param_2)

{
  long lVar1;
  size_t sVar2;
  
  if (param_2 != (char *)0x0) {
    sVar2 = strlen(param_2);
    FUN_003f1ad0(param_1,param_2,sVar2);
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003f205c (108 bytes) name=FUN_003f205c

long * FUN_003f205c(long *param_1,char *param_2)

{
  long lVar1;
  size_t sVar2;
  
                    /* try { // try from 003f206c to 004f206f has its CatchHandler @ 003f2084 */
  if (param_2 != (char *)0x0) {
    sVar2 = strlen(param_2);
                    /* catch() { ... } // from try @ 003f206c with catch @ 003f2084 */
    FUN_003f1ad0(param_1,param_2,sVar2);
                    /* try { // try from 003f2094 to 004f2097 has its CatchHandler @ 003f1f5c */
                    /* catch() { ... } // from try @ 003f21d0 with catch @ 003f2098 */
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003f20c8 (400 bytes) name=FUN_003f20c8

long * FUN_003f20c8(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x18))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f21a8 to 004f21ab has its CatchHandler @ 003f21c0 */
                    /* catch() { ... } // from try @ 003f21a8 with catch @ 003f21c0 */
                    /* try { // try from 003f21d0 to 004f21d3 has its CatchHandler @ 003f2098 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
                    /* catch() { ... } // from try @ 003f2310 with catch @ 003f21d4 */
  return param_1;
}


==================================================================

### FUNC 003f22f8 (4 bytes) name=thunk_FUN_003f20c8

long * thunk_FUN_003f20c8(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x18))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f22fc (68 bytes) name=FUN_003f22fc

void FUN_003f22fc(long *param_1,short param_2)

{
  uint uVar1;
  
                    /* catch() { ... } // from try @ 003f22e8 with catch @ 003f2300 */
                    /* try { // try from 003f2310 to 004f2313 has its CatchHandler @ 003f21d4 */
                    /* catch() { ... } // from try @ 003f239c with catch @ 003f2314 */
  uVar1 = *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & 0x4a;
  if ((uVar1 != 8) && (uVar1 != 0x40)) {
    FUN_003f20c8(param_1,(long)param_2);
    return;
  }
  FUN_003f20c8(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f2340 (64 bytes) name=FUN_003f2340

void FUN_003f2340(long *param_1,int param_2)

{
  uint uVar1;
  
                    /* try { // try from 003f2350 to 004f2353 has its CatchHandler @ 003f238c */
  uVar1 = *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & 0x4a;
                    /* try { // try from 003f2368 to 004f236b has its CatchHandler @ 003f23a0 */
  if ((uVar1 != 8) && (uVar1 != 0x40)) {
                    /* try { // try from 003f2370 to 004f2373 has its CatchHandler @ 003f238c */
    FUN_003f20c8(param_1,(long)param_2);
    return;
  }
  FUN_003f20c8(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f2380 (400 bytes) name=FUN_003f2380

long * FUN_003f2380(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f2350 with catch @ 003f238c
                       catch() { ... } // from try @ 003f2370 with catch @ 003f238c */
                    /* try { // try from 003f239c to 004f239f has its CatchHandler @ 003f2314 */
                    /* catch() { ... } // from try @ 003f2368 with catch @ 003f23a0 */
  FUN_003f12bc(local_10,param_1);
                    /* catch() { ... } // from try @ 003f243c with catch @ 003f23b4 */
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
                    /* try { // try from 003f23f0 to 004f23f3 has its CatchHandler @ 003f242c */
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
                    /* try { // try from 003f2408 to 004f240b has its CatchHandler @ 003f2440 */
                    /* try { // try from 003f2410 to 004f2413 has its CatchHandler @ 003f242c */
    (**(code **)(*plVar5 + 0x20))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
                    /* catch() { ... } // from try @ 003f23f0 with catch @ 003f242c
                       catch() { ... } // from try @ 003f2410 with catch @ 003f242c */
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f243c to 004f243f has its CatchHandler @ 003f23b4 */
                    /* catch() { ... } // from try @ 003f2408 with catch @ 003f2440 */
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
                    /* catch() { ... } // from try @ 003f24c0 with catch @ 003f2454 */
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
                    /* catch() { ... } // from try @ 003f2498 with catch @ 003f24b0 */
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f24c0 to 004f24c3 has its CatchHandler @ 003f2454 */
                    /* catch() { ... } // from try @ 003f25fc with catch @ 003f24c4 */
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
                    /* try { // try from 003f2498 to 004f249b has its CatchHandler @ 003f24b0 */
  return param_1;
}


==================================================================

### FUNC 003f25b0 (4 bytes) name=thunk_FUN_003f2380

long * thunk_FUN_003f2380(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x20))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f25b4 (8 bytes) name=FUN_003f25b4

void FUN_003f25b4(undefined8 param_1,undefined2 param_2)

{
  FUN_003f2380(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f25bc (8 bytes) name=FUN_003f25bc

void FUN_003f25bc(undefined8 param_1,undefined4 param_2)

{
  FUN_003f2380(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f25c4 (400 bytes) name=FUN_003f25c4

long * FUN_003f25c4(long *param_1,undefined1 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f25d4 to 004f25d7 has its CatchHandler @ 003f25ec */
                    /* catch() { ... } // from try @ 003f25d4 with catch @ 003f25ec */
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
                    /* try { // try from 003f25fc to 004f25ff has its CatchHandler @ 003f24c4 */
                    /* catch() { ... } // from try @ 003f2740 with catch @ 003f2600 */
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
                    /* catch() { ... } // from try @ 003f2718 with catch @ 003f2730 */
                    /* try { // try from 003f2740 to 004f2743 has its CatchHandler @ 003f2600 */
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
                    /* catch() { ... } // from try @ 003f287c with catch @ 003f2744 */
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x10))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* try { // try from 003f2718 to 004f271b has its CatchHandler @ 003f2730 */
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f27f4 (4 bytes) name=thunk_FUN_003f25c4

long * thunk_FUN_003f25c4(long *param_1,undefined1 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x10))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f27f8 (400 bytes) name=FUN_003f27f8

long * FUN_003f27f8(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
                    /* try { // try from 003f2854 to 004f2857 has its CatchHandler @ 003f286c */
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
                    /* catch() { ... } // from try @ 003f2854 with catch @ 003f286c */
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
                    /* try { // try from 003f287c to 004f287f has its CatchHandler @ 003f2744 */
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
                    /* catch() { ... } // from try @ 003f2ad8 with catch @ 003f2880 */
    (**(code **)(*plVar5 + 0x28))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f2a28 (4 bytes) name=thunk_FUN_003f27f8

long * thunk_FUN_003f27f8(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x28))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f2a2c (400 bytes) name=FUN_003f2a2c

long * FUN_003f2a2c(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
                    /* try { // try from 003f2ba8 to 004f2bab has its CatchHandler @ 003f2cc4 */
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x30))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
                    /* try { // try from 003f2ad8 to 004f2af3 has its CatchHandler @ 003f2880 */
    if ((extraout_w1 & 0xff) != 0) {
                    /* catch() { ... } // from try @ 003f29c4 with catch @ 003f2ae0 */
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f2c88 with catch @ 003f2af4 */
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f2c5c (4 bytes) name=thunk_FUN_003f2a2c

long * thunk_FUN_003f2a2c(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x30))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f2c60 (412 bytes) name=FUN_003f2c60

long * FUN_003f2c60(undefined8 param_1,long *param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f2c88 to 004f2cd7 has its CatchHandler @ 003f2af4 */
  FUN_003f12bc(local_10,param_2);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
                    /* catch() { ... } // from try @ 003f2ba8 with catch @ 003f2cc4 */
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
                    /* catch() { ... } // from try @ 003f2e44 with catch @ 003f2ce0
                       catch() { ... } // from try @ 003f2ec8 with catch @ 003f2ce0 */
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x38))(param_1,plVar5,lVar6,lVar6 == 0,lVar4,uVar2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f2d5c to 004f2d5f has its CatchHandler @ 003f2ecc */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
                    /* try { // try from 003f2d78 to 004f2e0b has its CatchHandler @ 003f2e9c */
  return param_2;
}


==================================================================

### FUNC 003f2e9c (4 bytes) name=thunk_FUN_003f2c60

long * thunk_FUN_003f2c60(undefined8 param_1,long *param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_2);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x38))(param_1,plVar5,lVar6,lVar6 == 0,lVar4,uVar2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
  return param_2;
}


==================================================================

### FUNC 003f2ea0 (8 bytes) name=FUN_003f2ea0

void FUN_003f2ea0(float param_1)

{
  FUN_003f2c60((double)param_1);
  return;
}


==================================================================

### FUNC 003f2ea8 (420 bytes) name=FUN_003f2ea8

long * FUN_003f2ea8(undefined8 param_1,long *param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f2ec8 to 004f2ecb has its CatchHandler @ 003f2ce0 */
                    /* catch() { ... } // from try @ 003f2d5c with catch @ 003f2ecc
                       catch() { ... } // from try @ 003f2e38 with catch @ 003f2ecc */
  FUN_003f12bc(local_10,param_2);
  if (local_10[0] != '\0') {
                    /* catch() { ... } // from try @ 003f2fe8 with catch @ 003f2ef0
                       catch() { ... } // from try @ 003f3034 with catch @ 003f2ef0 */
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
                    /* try { // try from 003f3034 to 004f3037 has its CatchHandler @ 003f2ef0 */
                    /* catch() { ... } // from try @ 003f2fc0 with catch @ 003f3038 */
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x40))(param_1,plVar5,lVar6,lVar6 == 0,lVar4,uVar2);
    if ((extraout_w1 & 0xff) != 0) {
                    /* try { // try from 003f2f64 to 004f2f67 has its CatchHandler @ 003f3010 */
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
                    /* try { // try from 003f2fe8 to 004f2ffb has its CatchHandler @ 003f2ef0 */
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* catch() { ... } // from try @ 003f2f64 with catch @ 003f3010
                       catch() { ... } // from try @ 003f2fc8 with catch @ 003f3010 */
    return param_2;
  }
                    /* try { // try from 003f2fc0 to 004f2fc3 has its CatchHandler @ 003f3038 */
                    /* try { // try from 003f2fc8 to 004f2fdf has its CatchHandler @ 003f3010 */
  return param_2;
}


==================================================================

### FUNC 003f30ec (4 bytes) name=thunk_FUN_003f2ea8

long * thunk_FUN_003f2ea8(undefined8 param_1,long *param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_2);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x40))(param_1,plVar5,lVar6,lVar6 == 0,lVar4,uVar2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
  return param_2;
}


==================================================================

### FUNC 003f30f0 (400 bytes) name=FUN_003f30f0

long * FUN_003f30f0(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f30f8 to 004f30fb has its CatchHandler @ 003f31a4 */
  FUN_003f12bc(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
                    /* try { // try from 003f3154 to 004f3157 has its CatchHandler @ 003f31cc */
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
                    /* try { // try from 003f315c to 004f3173 has its CatchHandler @ 003f31a4 */
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
                    /* try { // try from 003f317c to 004f318f has its CatchHandler @ 003f3080 */
    (**(code **)(*plVar5 + 0x48))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
                    /* catch() { ... } // from try @ 003f30f8 with catch @ 003f31a4
                       catch() { ... } // from try @ 003f315c with catch @ 003f31a4 */
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f31c8 to 004f31cb has its CatchHandler @ 003f3080 */
                    /* catch() { ... } // from try @ 003f3154 with catch @ 003f31cc */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* try { // try from 003f324c to 004f324f has its CatchHandler @ 003f3210 */
    return param_1;
  }
                    /* catch() { ... } // from try @ 003f324c with catch @ 003f3210
                       catch() { ... } // from try @ 003f3390 with catch @ 003f3210
                       catch() { ... } // from try @ 003f34a4 with catch @ 003f3210 */
  return param_1;
}


==================================================================

### FUNC 003f3320 (4 bytes) name=thunk_FUN_003f30f0

long * thunk_FUN_003f30f0(long *param_1,undefined8 param_2)

{
  char cVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  uint extraout_w1;
  long *plVar5;
  long lVar6;
  long *plVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f12bc(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar5 = *(long **)(lVar4 + 0xf8);
    if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar6 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe1) == '\0') {
      plVar7 = *(long **)(lVar4 + 0xf0);
      if (plVar7 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      if ((char)plVar7[7] == '\0') {
        FUN_003d14e0(plVar7);
        uVar2 = (**(code **)(*plVar7 + 0x30))(plVar7,0x20);
      }
      else {
        uVar2 = *(undefined1 *)((long)plVar7 + 0x59);
      }
      *(undefined1 *)(lVar4 + 0xe0) = uVar2;
      *(undefined1 *)(lVar4 + 0xe1) = 1;
    }
    else {
      uVar2 = *(undefined1 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar5 + 0x48))(plVar5,lVar6,lVar6 == 0,lVar4,uVar2,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar5 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar5 = *(long **)((long)plVar5 + lVar4 + 0xe8), plVar5 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar5 + 0x30))(), iVar3 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2254(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f3324 (40 bytes) name=FUN_003f3324

void FUN_003f3324(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[1];
  FUN_003d3008((long)param_1 + lVar1,param_3);
  return;
}


==================================================================

### FUNC 003f334c (116 bytes) name=FUN_003f334c

void FUN_003f334c(undefined8 *param_1,undefined8 param_2)

{
  FUN_003d347c(param_1 + 1);
                    /* try { // try from 003f3370 to 004f3387 has its CatchHandler @ 003f34a8 */
  param_1[0x1c] = 0;
  *(undefined4 *)(param_1 + 0x1d) = 0;
  *(undefined1 *)((long)param_1 + 0xec) = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
                    /* try { // try from 003f3390 to 004f33a3 has its CatchHandler @ 003f3210 */
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  *param_1 = &PTR_FUN_004f81e8;
  param_1[1] = &PTR_FUN_004f8210;
  FUN_003d3008(param_1 + 1,param_2);
  return;
}


==================================================================

### FUNC 003f33e4 (24 bytes) name=FUN_003f33e4

void FUN_003f33e4(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[1];
  return;
}


==================================================================

### FUNC 003f33fc (20 bytes) name=FUN_003f33fc

void FUN_003f33fc(undefined8 param_1,code *param_2)

{
  (*param_2)();
  return;
}


==================================================================

### FUNC 003f3410 (48 bytes) name=FUN_003f3410

long * FUN_003f3410(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
  return param_1;
}


==================================================================

### FUNC 003f3440 (48 bytes) name=FUN_003f3440

long * FUN_003f3440(long *param_1,code *param_2)

{
  (*param_2)((long)param_1 + *(long *)(*param_1 + -0x18));
                    /* catch() { ... } // from try @ 003f3320 with catch @ 003f3464
                       catch() { ... } // from try @ 003f33dc with catch @ 003f3464 */
  return param_1;
}


==================================================================

### FUNC 003f3470 (108 bytes) name=FUN_003f3470

void FUN_003f3470(long *param_1,undefined8 param_2,long param_3)

{
  long lVar1;
  long *plVar2;
  
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  lVar1 = (**(code **)(*plVar2 + 0x60))(plVar2);
                    /* try { // try from 003f34a4 to 004f34a7 has its CatchHandler @ 003f3210 */
                    /* catch() { ... } // from try @ 003f3370 with catch @ 003f34a8 */
  if (param_3 != lVar1) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f34fc with catch @ 003f34c0
                       catch() { ... } // from try @ 003f363c with catch @ 003f34c0
                       catch() { ... } // from try @ 003f3754 with catch @ 003f34c0 */
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 1);
    return;
  }
  return;
}


==================================================================

### FUNC 003f34dc (100 bytes) name=FUN_003f34dc

long * FUN_003f34dc(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  
  plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
                    /* try { // try from 003f34fc to 004f34ff has its CatchHandler @ 003f34c0 */
  if ((plVar3 != (long *)0x0) && (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  }
  return param_1;
}


==================================================================

### FUNC 003f35c4 (196 bytes) name=FUN_003f35c4

undefined1  [16] FUN_003f35c4(long *param_1)

{
  undefined8 uVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  undefined1 auVar11 [16];
  
                    /* try { // try from 003f35cc to 004f3617 has its CatchHandler @ 003f3714 */
  if ((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) {
    plVar5 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    auVar11 = (**(code **)(*plVar5 + 0x20))(plVar5,0,1,0x10);
    uVar2 = auVar11._8_8_;
    uVar1 = auVar11._0_8_;
    uVar4 = uVar2 >> 8 & 0xff;
    uVar6 = uVar2 >> 0x10 & 0xff;
    uVar3 = uVar2 & 0xff;
    uVar7 = uVar2 >> 0x18 & 0xff;
    uVar8 = uVar2 >> 0x20 & 0xff;
    uVar9 = uVar2 >> 0x28 & 0xff;
    uVar10 = uVar2 >> 0x30 & 0xff;
    uVar2 = uVar2 >> 0x38;
  }
  else {
    uVar2 = 0;
    uVar10 = 0;
    uVar9 = 0;
    uVar8 = 0;
    uVar7 = 0;
    uVar6 = 0;
    uVar4 = 0;
    uVar3 = 0;
    uVar1 = 0xffffffffffffffff;
  }
                    /* try { // try from 003f361c to 004f3633 has its CatchHandler @ 003f3758 */
  auVar11._8_8_ =
       uVar3 | uVar4 << 8 | uVar6 << 0x10 | uVar7 << 0x18 | uVar8 << 0x20 | uVar9 << 0x28 |
       uVar10 << 0x30 | uVar2 << 0x38;
  auVar11._0_8_ = uVar1;
                    /* try { // try from 003f363c to 004f364f has its CatchHandler @ 003f34c0 */
  return auVar11;
}


==================================================================

### FUNC 003f370c (136 bytes) name=FUN_003f370c

long * FUN_003f370c(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  
                    /* catch() { ... } // from try @ 003f35cc with catch @ 003f3714
                       catch() { ... } // from try @ 003f3688 with catch @ 003f3714 */
                    /* try { // try from 003f3754 to 004f3757 has its CatchHandler @ 003f34c0 */
                    /* catch() { ... } // from try @ 003f361c with catch @ 003f3758 */
  if (((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x28))(plVar2,param_2,param_3,0x10), lVar1 == -1)) {
                    /* catch() { ... } // from try @ 003f3878 with catch @ 003f3770
                       catch() { ... } // from try @ 003f38c4 with catch @ 003f3770 */
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f3818 (136 bytes) name=FUN_003f3818

long * FUN_003f3818(long *param_1,undefined8 param_2,undefined8 param_3)

{
  long lVar1;
  long *plVar2;
  
                    /* try { // try from 003f3858 to 004f386f has its CatchHandler @ 003f38a0 */
  if (((*(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x20) & 5) == 0) &&
     (plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar1 = (**(code **)(*plVar2 + 0x20))(plVar2,param_2,param_3,0x10), lVar1 == -1)) {
                    /* try { // try from 003f3878 to 004f388b has its CatchHandler @ 003f3770 */
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
    return param_1;
  }
                    /* try { // try from 003f3850 to 004f3853 has its CatchHandler @ 003f38c8 */
  return param_1;
}


==================================================================

### FUNC 003f3924 (40 bytes) name=FUN_003f3924

void FUN_003f3924(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[1];
  FUN_003d3008((long)param_1 + lVar1,0);
  return;
}


==================================================================

### FUNC 003f394c (112 bytes) name=FUN_003f394c

void FUN_003f394c(undefined8 *param_1)

{
  FUN_003d347c(param_1 + 1);
  param_1[0x1c] = 0;
  *(undefined4 *)(param_1 + 0x1d) = 0;
  *(undefined1 *)((long)param_1 + 0xec) = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  *param_1 = &PTR_FUN_004f81e8;
  param_1[1] = &PTR_FUN_004f8210;
  FUN_003d3008(param_1 + 1,0);
  return;
}


==================================================================

### FUNC 003f39e0 (124 bytes) name=FUN_003f39e0

void FUN_003f39e0(undefined1 *param_1,long *param_2)

{
  long lVar1;
  uint uVar2;
  
  lVar1 = *param_2;
  *(long **)(param_1 + 8) = param_2;
  lVar1 = *(long *)(lVar1 + -0x18);
  *param_1 = 0;
  lVar1 = (long)param_2 + lVar1;
  if (*(long *)(lVar1 + 0xd8) != 0) {
    uVar2 = *(uint *)(lVar1 + 0x20);
    if (uVar2 != 0) goto LAB_003f3a48;
    FUN_003f34dc();
    lVar1 = (long)param_2 + *(long *)(*param_2 + -0x18);
  }
  uVar2 = *(uint *)(lVar1 + 0x20);
  if (uVar2 == 0) {
    *param_1 = 1;
    return;
  }
LAB_003f3a48:
  FUN_003d2c00(lVar1,uVar2 | 4);
  return;
}


==================================================================

### FUNC 003f3a5c (132 bytes) name=FUN_003f3a5c

void FUN_003f3a5c(long param_1)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  
  plVar4 = *(long **)(param_1 + 8);
  lVar3 = *(long *)(*plVar4 + -0x18);
  if (((((*(uint *)((long)plVar4 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
    lVar3 = (long)*(long **)(param_1 + 8) + *(long *)(**(long **)(param_1 + 8) + -0x18);
    FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 1);
    return;
  }
  return;
}


==================================================================

### FUNC 003f3ae0 (264 bytes) name=FUN_003f3ae0

long * FUN_003f3ae0(long *param_1,long param_2)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  uint uVar5;
  undefined1 uStack_11;
  char local_10 [8];
  long *local_8;
  
  FUN_003f39e0(local_10,param_1);
  if ((param_2 == 0) || (local_10[0] == '\0')) {
    if (param_2 != 0) goto LAB_003f3b38;
    uVar5 = 1;
  }
  else {
    lVar3 = FUN_003fd5a8(param_2,*(undefined8 *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)
                         ,&uStack_11);
    uVar5 = 4;
    if (lVar3 != 0) goto LAB_003f3b38;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,uVar5 | *(uint *)(lVar3 + 0x20));
LAB_003f3b38:
                    /* catch() { ... } // from try @ 003f3c1c with catch @ 003f3b38 */
  plVar4 = local_8;
  lVar3 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
                    /* try { // try from 003f3bb8 to 004f3bbb has its CatchHandler @ 003f3bec */
                    /* try { // try from 003f3bc0 to 004f3bd7 has its CatchHandler @ 003f3c20 */
    lVar3 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f3c88 (288 bytes) name=FUN_003f3c88

long * FUN_003f3c88(long *param_1,int param_2)

{
  char cVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  int *piVar5;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f3ca8 to 004f3cab has its CatchHandler @ 003f3cdc */
  FUN_003f39e0(local_10,param_1);
                    /* try { // try from 003f3cb0 to 004f3cc7 has its CatchHandler @ 003f3d10 */
  if (local_10[0] != '\0') {
    plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar5 = (int *)plVar3[5];
    if (piVar5 < (int *)plVar3[6]) {
      *piVar5 = param_2;
                    /* catch() { ... } // from try @ 003f3ca8 with catch @ 003f3cdc */
      plVar3[5] = (long)(piVar5 + 1);
    }
    else {
                    /* try { // try from 003f3d98 to 004f3d9b has its CatchHandler @ 003f3dcc */
      param_2 = (**(code **)(*plVar3 + 0x68))(plVar3,param_2);
                    /* try { // try from 003f3da0 to 004f3db7 has its CatchHandler @ 003f3e00 */
    }
    if (param_2 == -1) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar3 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f3d0c to 004f3d0f has its CatchHandler @ 003f3c28 */
                    /* catch() { ... } // from try @ 003f3cb0 with catch @ 003f3d10 */
                    /* catch() { ... } // from try @ 003f3dfc with catch @ 003f3d18 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar3 = *(long **)((long)plVar3 + lVar4 + 0xe8), plVar3 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f3e48 (264 bytes) name=FUN_003f3e48

long * FUN_003f3e48(long *param_1,undefined8 param_2,long param_3)

{
  char cVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f3e54 to 004f3e57 has its CatchHandler @ 003f3e6c */
                    /* catch() { ... } // from try @ 003f3e54 with catch @ 003f3e6c */
  FUN_003f39e0(local_10,param_1);
                    /* try { // try from 003f3e7c to 004f3e7f has its CatchHandler @ 003f3e08 */
                    /* catch() { ... } // from try @ 003f3ef4 with catch @ 003f3e80 */
  if ((local_10[0] != '\0') &&
     (plVar4 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8),
     lVar3 = (**(code **)(*plVar4 + 0x60))(plVar4,param_2,param_3), param_3 != lVar3)) {
    lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 1);
  }
  plVar4 = local_8;
                    /* try { // try from 003f3ecc to 004f3ecf has its CatchHandler @ 003f3ee4 */
  lVar3 = *(long *)(*local_8 + -0x18);
                    /* catch() { ... } // from try @ 003f3ecc with catch @ 003f3ee4 */
                    /* try { // try from 003f3ef4 to 004f3ef7 has its CatchHandler @ 003f3e80 */
                    /* catch() { ... } // from try @ 003f3fec with catch @ 003f3ef8 */
  if (((((*(uint *)((long)local_8 + lVar3 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar4 = *(long **)((long)plVar4 + lVar3 + 0xe8), plVar4 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar4 + 0x30))(), iVar2 == -1)) {
    lVar3 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f3ff0 (8 bytes) name=FUN_003f3ff0

undefined1 FUN_003f3ff0(undefined1 *param_1)

{
                    /* catch() { ... } // from try @ 003f3f90 with catch @ 003f3ff0 */
  return *param_1;
}


==================================================================

### FUNC 003f3ff8 (80 bytes) name=FUN_003f3ff8

void FUN_003f3ff8(long *param_1)

{
  undefined4 uVar1;
  long *plVar2;
  
                    /* catch() { ... } // from try @ 003f40f0 with catch @ 003f3ff8 */
  plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar2 != (long *)0x0) {
    uVar1 = (**(code **)(*plVar2 + 0x50))(plVar2,10);
    FUN_003f3c88(param_1,uVar1);
    FUN_003f34dc();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003f4048 (8 bytes) name=FUN_003f4048

void FUN_003f4048(undefined8 param_1)

{
  FUN_003f3c88(param_1,0);
  return;
}


==================================================================

### FUNC 003f4050 (4 bytes) name=thunk_FUN_003f34dc

long * thunk_FUN_003f34dc(long *param_1)

{
  long lVar1;
  int iVar2;
  long *plVar3;
  
  plVar3 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((plVar3 != (long *)0x0) && (iVar2 = (**(code **)(*plVar3 + 0x30))(), iVar2 == -1)) {
    lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  }
  return param_1;
}


==================================================================

### FUNC 003f4054 (128 bytes) name=FUN_003f4054

long * FUN_003f4054(long *param_1,undefined4 param_2)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = *(long *)(*param_1 + -0x18);
  if (*(char *)((long)param_1 + lVar2 + 0xe4) != '\0') {
    *(undefined4 *)((long)param_1 + lVar2 + 0xe0) = param_2;
                    /* try { // try from 003f408c to 004f408f has its CatchHandler @ 003f40c0 */
                    /* try { // try from 003f4094 to 004f40ab has its CatchHandler @ 003f40f4 */
    return param_1;
  }
  plVar1 = *(long **)((long)param_1 + lVar2 + 0xf0);
  if (plVar1 != (long *)0x0) {
    (**(code **)(*plVar1 + 0x50))(plVar1,0x20);
    *(undefined4 *)((long)param_1 + lVar2 + 0xe0) = param_2;
    *(undefined1 *)((long)param_1 + lVar2 + 0xe4) = 1;
                    /* catch() { ... } // from try @ 003f408c with catch @ 003f40c0 */
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 003f40d4 (28 bytes) name=FUN_003f40d4

void FUN_003f40d4(long *param_1,uint param_2)

{
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) | param_2;
  return;
}


==================================================================

### FUNC 003f40f0 (28 bytes) name=FUN_003f40f0

void FUN_003f40f0(long *param_1,uint param_2)

{
                    /* try { // try from 003f40f0 to 004f40f3 has its CatchHandler @ 003f3ff8 */
                    /* catch() { ... } // from try @ 003f4094 with catch @ 003f40f4 */
                    /* catch() { ... } // from try @ 003f41f4 with catch @ 003f40fc */
  *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) =
       *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & (param_2 ^ 0xffffffff);
  return;
}


==================================================================

### FUNC 003f410c (120 bytes) name=FUN_003f410c

void FUN_003f410c(long *param_1,int param_2)

{
  long lVar1;
  uint uVar2;
  
  lVar1 = *(long *)(*param_1 + -0x18);
  if (param_2 == 8) {
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 0x40;
    return;
  }
  if (param_2 != 10) {
    uVar2 = 8;
    if (param_2 != 0x10) {
      uVar2 = 0;
    }
    *(uint *)((long)param_1 + lVar1 + 0x18) =
         uVar2 | *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5;
    return;
  }
  *(uint *)((long)param_1 + lVar1 + 0x18) = *(uint *)((long)param_1 + lVar1 + 0x18) & 0xffffffb5 | 2
  ;
  return;
}


==================================================================

### FUNC 003f4184 (24 bytes) name=FUN_003f4184

void FUN_003f4184(long *param_1,int param_2)

{
                    /* try { // try from 003f4190 to 004f4193 has its CatchHandler @ 003f41c4 */
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 8) = (long)param_2;
                    /* try { // try from 003f4198 to 004f41af has its CatchHandler @ 003f41f8 */
  return;
}


==================================================================

### FUNC 003f419c (24 bytes) name=FUN_003f419c

void FUN_003f419c(long *param_1,int param_2)

{
  *(long *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x10) = (long)param_2;
  return;
}


==================================================================

### FUNC 003f41b4 (896 bytes) name=FUN_003f41b4

long * FUN_003f41b4(long *param_1,undefined8 param_2,long param_3)

{
  bool bVar1;
  char cVar2;
  int iVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  int *piVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f4190 with catch @ 003f41c4 */
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] == '\0') goto LAB_003f4234;
                    /* try { // try from 003f41f4 to 004f41f7 has its CatchHandler @ 003f40fc */
                    /* catch() { ... } // from try @ 003f4198 with catch @ 003f41f8 */
  lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f4300 with catch @ 003f4200 */
  lVar10 = *(long *)(lVar5 + 0x10);
  if (param_3 < lVar10) {
    bVar1 = (*(uint *)(lVar5 + 0x18) & 0xb0) != 0x20;
    if (bVar1) {
      lVar9 = lVar10 - param_3;
      if (*(char *)(lVar5 + 0xe4) == '\0') {
        plVar6 = *(long **)(lVar5 + 0xf0);
        if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f118();
        }
        iVar3 = (**(code **)(*plVar6 + 0x50))(plVar6,0x20);
        lVar8 = *param_1;
        *(int *)(lVar5 + 0xe0) = iVar3;
        *(undefined1 *)(lVar5 + 0xe4) = 1;
        lVar5 = (long)param_1 + *(long *)(lVar8 + -0x18);
                    /* try { // try from 003f44e8 to 004f44eb has its CatchHandler @ 003f4574 */
      }
      else {
        iVar3 = *(int *)(lVar5 + 0xe0);
      }
      if (0 < lVar9) {
        while( true ) {
          plVar6 = *(long **)(lVar5 + 0xe8);
          piVar7 = (int *)plVar6[5];
          if (piVar7 < (int *)plVar6[6]) {
            *piVar7 = iVar3;
            plVar6[5] = (long)(piVar7 + 1);
            iVar4 = iVar3;
          }
          else {
            iVar4 = (**(code **)(*plVar6 + 0x68))(plVar6,iVar3);
          }
          lVar5 = *param_1;
          if (iVar4 == -1) {
            lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
            FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 1);
                    /* try { // try from 003f4484 to 004f4487 has its CatchHandler @ 003f4574 */
            lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
            goto LAB_003f4228;
          }
          lVar9 = lVar9 + -1;
          if (lVar9 == 0) break;
          lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
        }
        lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
      }
    }
LAB_003f4228:
    if (*(int *)(lVar5 + 0x20) == 0) {
      lVar5 = (**(code **)(**(long **)(lVar5 + 0xe8) + 0x60))
                        (*(long **)(lVar5 + 0xe8),param_2,param_3);
      if (param_3 != lVar5) {
        lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
        FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 1);
      }
      if (bVar1) goto LAB_003f4314;
      lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
      if (*(int *)(lVar5 + 0x20) == 0) {
        lVar10 = lVar10 - param_3;
        if (*(char *)(lVar5 + 0xe4) == '\0') {
                    /* try { // try from 003f44f0 to 004f4507 has its CatchHandler @ 003f4524 */
          plVar6 = *(long **)(lVar5 + 0xf0);
          if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_0040f118();
          }
          iVar3 = (**(code **)(*plVar6 + 0x50))(plVar6,0x20);
          lVar9 = *param_1;
                    /* try { // try from 003f4510 to 004f4513 has its CatchHandler @ 003f4310 */
          *(int *)(lVar5 + 0xe0) = iVar3;
          *(undefined1 *)(lVar5 + 0xe4) = 1;
          lVar5 = (long)param_1 + *(long *)(lVar9 + -0x18);
                    /* catch() { ... } // from try @ 003f44f0 with catch @ 003f4524 */
        }
        else {
          iVar3 = *(int *)(lVar5 + 0xe0);
        }
        if (0 < lVar10) {
          while( true ) {
            plVar6 = *(long **)(lVar5 + 0xe8);
            piVar7 = (int *)plVar6[5];
            if (piVar7 < (int *)plVar6[6]) {
                    /* try { // try from 003f43a0 to 004f43a3 has its CatchHandler @ 003f454c */
              *piVar7 = iVar3;
              plVar6[5] = (long)(piVar7 + 1);
              iVar4 = iVar3;
            }
            else {
              iVar4 = (**(code **)(*plVar6 + 0x68))(plVar6,iVar3);
            }
                    /* try { // try from 003f43ac to 004f43bf has its CatchHandler @ 003f4310 */
            lVar5 = *param_1;
            if (iVar4 == -1) {
              lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
                    /* try { // try from 003f44a0 to 004f44bb has its CatchHandler @ 003f4598 */
              FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 1);
              goto LAB_003f4314;
            }
            lVar10 = lVar10 + -1;
            if (lVar10 == 0) break;
            lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
          }
          goto LAB_003f4318;
        }
      }
    }
  }
  else {
    lVar10 = (**(code **)(**(long **)(lVar5 + 0xe8) + 0x60))
                       (*(long **)(lVar5 + 0xe8),param_2,param_3);
    lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f4300 to 004f4303 has its CatchHandler @ 003f4200 */
    if (param_3 != lVar10) {
                    /* catch() { ... } // from try @ 003f42a4 with catch @ 003f4304 */
                    /* catch() { ... } // from try @ 003f43ac with catch @ 003f4310
                       catch() { ... } // from try @ 003f4510 with catch @ 003f4310
                       catch() { ... } // from try @ 003f4548 with catch @ 003f4310
                       catch() { ... } // from try @ 003f4570 with catch @ 003f4310 */
      FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 1);
LAB_003f4314:
      lVar5 = *param_1;
LAB_003f4318:
      lVar5 = (long)param_1 + *(long *)(lVar5 + -0x18);
    }
  }
  *(undefined8 *)(lVar5 + 0x10) = 0;
LAB_003f4234:
  plVar6 = local_8;
  lVar5 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar5 + 0x18) >> 0xd & 1) != 0) &&
       (cVar2 = std::uncaught_exception(), cVar2 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar5 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar3 = (**(code **)(*plVar6 + 0x30))(), iVar3 == -1)) {
                    /* try { // try from 003f429c to 004f429f has its CatchHandler @ 003f42d0 */
    lVar5 = (long)local_8 + *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f42a4 to 004f42bb has its CatchHandler @ 003f4304 */
    FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 1);
                    /* catch() { ... } // from try @ 003f429c with catch @ 003f42d0 */
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f45d4 (36 bytes) name=FUN_003f45d4

void FUN_003f45d4(undefined8 param_1,undefined4 param_2)

{
  undefined4 local_4;
  
  local_4 = param_2;
  FUN_003f41b4(param_1,&local_4,1);
  return;
}


==================================================================

### FUNC 003f45f8 (88 bytes) name=FUN_003f45f8

void FUN_003f45f8(long *param_1,undefined1 param_2)

{
  long *plVar1;
  undefined4 local_4;
  
  plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
  if (plVar1 != (long *)0x0) {
    local_4 = (**(code **)(*plVar1 + 0x50))();
    FUN_003f41b4(param_1,&local_4,1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118(0,param_2);
}


==================================================================

### FUNC 003f4650 (108 bytes) name=FUN_003f4650

long * FUN_003f4650(long *param_1,wchar_t *param_2)

{
  long lVar1;
  size_t sVar2;
  
  if (param_2 != (wchar_t *)0x0) {
    sVar2 = wcslen(param_2);
                    /* try { // try from 003f4670 to 004f4673 has its CatchHandler @ 003f46a4 */
                    /* try { // try from 003f4678 to 004f468f has its CatchHandler @ 003f46d8 */
    FUN_003f41b4(param_1,param_2,sVar2);
    return param_1;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f4670 with catch @ 003f46a4 */
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 1);
  return param_1;
}


==================================================================

### FUNC 003f46bc (248 bytes) name=FUN_003f46bc

long * FUN_003f46bc(long *param_1,char *param_2)

{
  char *pcVar1;
  long lVar2;
  undefined4 uVar3;
  size_t sVar4;
  ulong uVar5;
  undefined4 *puVar6;
  long *plVar7;
  char cVar8;
  undefined4 *puVar9;
  
                    /* try { // try from 003f46d4 to 004f46d7 has its CatchHandler @ 003f45c0 */
                    /* catch() { ... } // from try @ 003f4678 with catch @ 003f46d8 */
  if (param_2 == (char *)0x0) {
                    /* try { // try from 003f4794 to 004f47af has its CatchHandler @ 003f4840 */
    lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 1);
  }
  else {
                    /* catch() { ... } // from try @ 003f47e8 with catch @ 003f46e0
                       catch() { ... } // from try @ 003f483c with catch @ 003f46e0 */
    sVar4 = strlen(param_2);
    uVar5 = sVar4 << 2;
    if (0x1fc0000000000000 < sVar4) {
      uVar5 = 0xffffffffffffffff;
    }
    puVar6 = operator_new__(uVar5);
    if (sVar4 != 0) {
      cVar8 = *param_2;
      plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
      if (plVar7 != (long *)0x0) {
        pcVar1 = param_2 + sVar4;
        puVar9 = puVar6;
        do {
          param_2 = param_2 + 1;
          uVar3 = (**(code **)(*plVar7 + 0x50))(plVar7,cVar8);
          *puVar9 = uVar3;
          if (param_2 == pcVar1) goto LAB_003f4760;
          puVar9 = puVar9 + 1;
          cVar8 = *param_2;
          plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xf0);
        } while (plVar7 != (long *)0x0);
      }
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
LAB_003f4760:
    FUN_003f41b4(param_1,puVar6,sVar4);
    operator_delete__(puVar6);
  }
                    /* try { // try from 003f4778 to 004f477b has its CatchHandler @ 003f4818 */
  return param_1;
}


==================================================================

### FUNC 003f4854 (372 bytes) name=FUN_003f4854

long * FUN_003f4854(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f48a4 with catch @ 003f4860
                       catch() { ... } // from try @ 003f49ec with catch @ 003f4860
                       catch() { ... } // from try @ 003f4b58 with catch @ 003f4860 */
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
                    /* try { // try from 003f48a4 to 004f48a7 has its CatchHandler @ 003f4860 */
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
                    /* try { // try from 003f4978 to 004f49cb has its CatchHandler @ 003f4b18 */
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x18))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4a68 (4 bytes) name=thunk_FUN_003f4854

long * thunk_FUN_003f4854(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x18))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4a6c (68 bytes) name=FUN_003f4a6c

void FUN_003f4a6c(long *param_1,short param_2)

{
  uint uVar1;
  
  uVar1 = *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & 0x4a;
  if ((uVar1 != 8) && (uVar1 != 0x40)) {
    FUN_003f4854(param_1,(long)param_2);
    return;
  }
  FUN_003f4854(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f4ab0 (64 bytes) name=FUN_003f4ab0

void FUN_003f4ab0(long *param_1,int param_2)

{
  uint uVar1;
  
  uVar1 = *(uint *)((long)param_1 + *(long *)(*param_1 + -0x18) + 0x18) & 0x4a;
  if ((uVar1 != 8) && (uVar1 != 0x40)) {
    FUN_003f4854(param_1,(long)param_2);
    return;
  }
  FUN_003f4854(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f4af0 (372 bytes) name=FUN_003f4af0

long * FUN_003f4af0(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f4978 with catch @ 003f4b18
                       catch() { ... } // from try @ 003f4a2c with catch @ 003f4b18 */
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003f4c90 to 004f4cdf has its CatchHandler @ 003f4ec4 */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
                    /* try { // try from 003f4b58 to 004f4b5b has its CatchHandler @ 003f4860 */
                    /* catch() { ... } // from try @ 003f49d0 with catch @ 003f4b5c */
    (**(code **)(*plVar6 + 0x20))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
                    /* catch() { ... } // from try @ 003f4bc0 with catch @ 003f4b80
                       catch() { ... } // from try @ 003f4d04 with catch @ 003f4b80
                       catch() { ... } // from try @ 003f4dd8 with catch @ 003f4b80
                       catch() { ... } // from try @ 003f4ec0 with catch @ 003f4b80 */
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f4bc0 to 004f4bc3 has its CatchHandler @ 003f4b80 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4d04 (4 bytes) name=thunk_FUN_003f4af0

long * thunk_FUN_003f4af0(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x20))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4d08 (8 bytes) name=FUN_003f4d08

void FUN_003f4d08(undefined8 param_1,undefined2 param_2)

{
  FUN_003f4af0(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f4d10 (8 bytes) name=FUN_003f4d10

void FUN_003f4d10(undefined8 param_1,undefined4 param_2)

{
  FUN_003f4af0(param_1,param_2);
  return;
}


==================================================================

### FUNC 003f4d18 (372 bytes) name=FUN_003f4d18

long * FUN_003f4d18(long *param_1,undefined1 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f4d5c to 004f4d5f has its CatchHandler @ 003f4ec4 */
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
                    /* try { // try from 003f4e2c to 004f4e8b has its CatchHandler @ 003f4ec4 */
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x10))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f4dd8 to 004f4ddb has its CatchHandler @ 003f4b80 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4f2c (4 bytes) name=thunk_FUN_003f4d18

long * thunk_FUN_003f4d18(long *param_1,undefined1 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x10))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f4f30 (372 bytes) name=FUN_003f4f30

long * FUN_003f4f30(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f4f74 to 004f4f77 has its CatchHandler @ 003f501c */
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
                    /* try { // try from 003f5040 to 004f5043 has its CatchHandler @ 003f4f00 */
                    /* catch() { ... } // from try @ 003f4fcc with catch @ 003f5044 */
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x28))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 003f4fcc to 004f4fcf has its CatchHandler @ 003f5044 */
                    /* try { // try from 003f4fd4 to 004f4feb has its CatchHandler @ 003f501c */
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f4ff4 to 004f5007 has its CatchHandler @ 003f4f00 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* catch() { ... } // from try @ 003f50a8 with catch @ 003f5090
                       catch() { ... } // from try @ 003f5148 with catch @ 003f5090
                       catch() { ... } // from try @ 003f5190 with catch @ 003f5090 */
    return param_1;
  }
                    /* catch() { ... } // from try @ 003f4f74 with catch @ 003f501c
                       catch() { ... } // from try @ 003f4fd4 with catch @ 003f501c */
  return param_1;
}


==================================================================

### FUNC 003f5144 (4 bytes) name=thunk_FUN_003f4f30

long * thunk_FUN_003f4f30(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x28))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f5148 (372 bytes) name=FUN_003f5148

long * FUN_003f5148(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
                    /* try { // try from 003f5148 to 004f515b has its CatchHandler @ 003f5090 */
                    /* catch() { ... } // from try @ 003f513c with catch @ 003f516c */
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
                    /* try { // try from 003f5190 to 004f5193 has its CatchHandler @ 003f5090 */
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
                    /* catch() { ... } // from try @ 003f5274 with catch @ 003f52e8 */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
                    /* try { // try from 003f5274 to 004f5277 has its CatchHandler @ 003f52e8 */
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
                    /* catch() { ... } // from try @ 003f529c with catch @ 003f51b0
                       catch() { ... } // from try @ 003f52e4 with catch @ 003f51b0 */
    (**(code **)(*plVar6 + 0x30))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f521c to 004f521f has its CatchHandler @ 003f52c0 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
                    /* try { // try from 003f527c to 004f5293 has its CatchHandler @ 003f52c0 */
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
                    /* try { // try from 003f529c to 004f52af has its CatchHandler @ 003f51b0 */
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f535c (4 bytes) name=thunk_FUN_003f5148

long * thunk_FUN_003f5148(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x30))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f5360 (372 bytes) name=FUN_003f5360

long * FUN_003f5360(undefined8 param_1,long *param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
  FUN_003f39e0(local_10,param_2);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
                    /* catch() { ... } // from try @ 003f559c with catch @ 003f5470 */
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x38))(param_1,plVar6,lVar7,lVar7 == 0,lVar4,uVar3);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
                    /* try { // try from 003f5408 to 004f540b has its CatchHandler @ 003f5438 */
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f5414 to 004f5427 has its CatchHandler @ 003f5330 */
                    /* catch() { ... } // from try @ 003f5408 with catch @ 003f5438 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
                    /* try { // try from 003f545c to 004f545f has its CatchHandler @ 003f5330 */
  return param_2;
}


==================================================================

### FUNC 003f5574 (4 bytes) name=thunk_FUN_003f5360

long * thunk_FUN_003f5360(undefined8 param_1,long *param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_2);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x38))(param_1,plVar6,lVar7,lVar7 == 0,lVar4,uVar3);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
  return param_2;
}


==================================================================

### FUNC 003f5578 (8 bytes) name=FUN_003f5578

void FUN_003f5578(float param_1)

{
  FUN_003f5360((double)param_1);
  return;
}


==================================================================

### FUNC 003f5580 (380 bytes) name=FUN_003f5580

long * FUN_003f5580(undefined8 param_1,long *param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f5574 with catch @ 003f558c */
                    /* try { // try from 003f559c to 004f559f has its CatchHandler @ 003f5470 */
                    /* catch() { ... } // from try @ 003f5680 with catch @ 003f55a0 */
  FUN_003f39e0(local_10,param_2);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
                    /* catch() { ... } // from try @ 003f57b8 with catch @ 003f568c */
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x40))(param_1,plVar6,lVar7,lVar7 == 0,lVar4,uVar3);
    if ((extraout_w1 & 0xff) != 0) {
                    /* try { // try from 003f561c to 004f561f has its CatchHandler @ 003f5650 */
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
                    /* try { // try from 003f5624 to 004f563b has its CatchHandler @ 003f5684 */
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
                    /* catch() { ... } // from try @ 003f561c with catch @ 003f5650 */
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
                    /* try { // try from 003f5680 to 004f5683 has its CatchHandler @ 003f55a0 */
                    /* catch() { ... } // from try @ 003f5624 with catch @ 003f5684 */
  return param_2;
}


==================================================================

### FUNC 003f579c (4 bytes) name=thunk_FUN_003f5580

long * thunk_FUN_003f5580(undefined8 param_1,long *param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_2);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x40))(param_1,plVar6,lVar7,lVar7 == 0,lVar4,uVar3);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_2 + *(long *)(*param_2 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_2;
  }
  return param_2;
}


==================================================================

### FUNC 003f57a0 (372 bytes) name=FUN_003f57a0

long * FUN_003f57a0(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char local_10 [8];
  long *local_8;
  
                    /* catch() { ... } // from try @ 003f5790 with catch @ 003f57a8 */
                    /* try { // try from 003f57b8 to 004f57bb has its CatchHandler @ 003f568c */
                    /* catch() { ... } // from try @ 003f58e8 with catch @ 003f57bc */
  FUN_003f39e0(local_10,param_1);
  if (local_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
                    /* try { // try from 003f58c0 to 004f58c3 has its CatchHandler @ 003f58d8 */
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x48))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = local_8;
  lVar4 = *(long *)(*local_8 + -0x18);
  if (((((*(uint *)((long)local_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
                    /* catch() { ... } // from try @ 003f58c0 with catch @ 003f58d8 */
    lVar4 = (long)local_8 + *(long *)(*local_8 + -0x18);
                    /* try { // try from 003f58e8 to 004f58eb has its CatchHandler @ 003f57bc */
                    /* catch() { ... } // from try @ 003f5a18 with catch @ 003f58ec */
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f59b4 (4 bytes) name=thunk_FUN_003f57a0

long * thunk_FUN_003f57a0(long *param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long lVar4;
  long *plVar5;
  uint extraout_w1;
  long *plVar6;
  long lVar7;
  char acStack_10 [8];
  long *plStack_8;
  
  FUN_003f39e0(acStack_10,param_1);
  if (acStack_10[0] != '\0') {
    lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
    plVar6 = *(long **)(lVar4 + 0xf8);
    if (plVar6 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    lVar7 = *(long *)(lVar4 + 0xe8);
    if (*(char *)(lVar4 + 0xe4) == '\0') {
      plVar5 = *(long **)(lVar4 + 0xf0);
      if (plVar5 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f118();
      }
      uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5,0x20);
      *(undefined4 *)(lVar4 + 0xe0) = uVar3;
      *(undefined1 *)(lVar4 + 0xe4) = 1;
    }
    else {
      uVar3 = *(undefined4 *)(lVar4 + 0xe0);
    }
    (**(code **)(*plVar6 + 0x48))(plVar6,lVar7,lVar7 == 0,lVar4,uVar3,param_2);
    if ((extraout_w1 & 0xff) != 0) {
      lVar4 = (long)param_1 + *(long *)(*param_1 + -0x18);
      FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    }
  }
  plVar6 = plStack_8;
  lVar4 = *(long *)(*plStack_8 + -0x18);
  if (((((*(uint *)((long)plStack_8 + lVar4 + 0x18) >> 0xd & 1) != 0) &&
       (cVar1 = std::uncaught_exception(), cVar1 == '\0')) &&
      (plVar6 = *(long **)((long)plVar6 + lVar4 + 0xe8), plVar6 != (long *)0x0)) &&
     (iVar2 = (**(code **)(*plVar6 + 0x30))(), iVar2 == -1)) {
    lVar4 = (long)plStack_8 + *(long *)(*plStack_8 + -0x18);
    FUN_003d2c00(lVar4,*(uint *)(lVar4 + 0x20) | 1);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 003f59b8 (56 bytes) name=FUN_003f59b8

long FUN_003f59b8(long param_1)

{
  ulong uVar1;
  ulong uVar2;
  
  if ((*(uint *)(param_1 + 0x40) >> 3 & 1) != 0) {
    uVar2 = *(ulong *)(param_1 + 0x28);
    uVar1 = *(ulong *)(param_1 + 0x18);
    if ((uVar2 != 0) && (uVar1 < uVar2)) {
      *(ulong *)(param_1 + 0x18) = uVar2;
      uVar1 = uVar2;
    }
    return uVar1 - *(long *)(param_1 + 0x10);
  }
  return -1;
}


==================================================================

### FUNC 003f59f0 (68 bytes) name=FUN_003f59f0

ulong FUN_003f59f0(long param_1)

{
  byte *pbVar1;
  byte *pbVar2;
  
                    /* try { // try from 003f59f0 to 004f59f3 has its CatchHandler @ 003f5a08 */
  if ((*(uint *)(param_1 + 0x40) >> 3 & 1) != 0) {
    pbVar1 = *(byte **)(param_1 + 0x28);
    pbVar2 = *(byte **)(param_1 + 0x18);
                    /* catch() { ... } // from try @ 003f59f0 with catch @ 003f5a08 */
    if ((pbVar1 != (byte *)0x0) && (pbVar2 < pbVar1)) {
      *(byte **)(param_1 + 0x18) = pbVar1;
      pbVar2 = pbVar1;
    }
    if (*(byte **)(param_1 + 0x10) < pbVar2) {
                    /* try { // try from 003f5a18 to 004f5a1b has its CatchHandler @ 003f58ec */
                    /* catch() { ... } // from try @ 003f5b48 with catch @ 003f5a1c */
      return (ulong)**(byte **)(param_1 + 0x10);
    }
  }
  return 0xffffffff;
}


==================================================================

### FUNC 003f5a34 (104 bytes) name=FUN_003f5a34

uint FUN_003f5a34(long param_1,uint param_2)

{
  bool bVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(param_1 + 0x10);
  if (*(ulong *)(param_1 + 8) < uVar2) {
    if (param_2 == 0xffffffff) {
      *(ulong *)(param_1 + 0x10) = uVar2 - 1;
      return 0;
    }
    bVar1 = (uint)*(byte *)(uVar2 - 1) == (param_2 & 0xff);
    if ((bVar1) || ((*(uint *)(param_1 + 0x40) >> 4 & 1) != 0)) {
      *(ulong *)(param_1 + 0x10) = uVar2 - 1;
      if (bVar1) {
        return param_2;
      }
      *(char *)(uVar2 - 1) = (char)param_2;
      return param_2;
    }
  }
  return 0xffffffff;
}


==================================================================

### FUNC 003f5a9c (392 bytes) name=FUN_003f5a9c

undefined1  [16] FUN_003f5a9c(long param_1,ulong param_2,int param_3,uint param_4)

{
  ulong uVar1;
  uint uVar2;
  bool bVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  ulong uVar8;
  long lVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  
  uVar2 = *(uint *)(param_1 + 0x40) & 8;
  bVar3 = (param_4 & uVar2) == 0;
  bVar4 = (*(uint *)(param_1 + 0x40) & 0x10 & param_4) != 0;
  bVar5 = param_3 == 1;
  bVar6 = (param_4 & 0x10) != 0;
  bVar7 = (param_4 & 8) == 0;
  if (bVar3 || bVar6) {
    lVar9 = *(long *)(param_1 + 0x20);
    if (((lVar9 != 0) || (param_2 == 0)) && ((bVar4 && bVar7 || (!bVar5 && (!bVar3 && bVar4)))))
    goto LAB_003f5b1c;
  }
  else {
    lVar9 = *(long *)(param_1 + 8);
    if ((lVar9 != 0) || (param_2 == 0)) {
LAB_003f5b1c:
      uVar8 = *(ulong *)(param_1 + 0x28);
                    /* try { // try from 003f5b20 to 004f5b23 has its CatchHandler @ 003f5b38 */
      if ((uVar8 != 0) && (*(ulong *)(param_1 + 0x18) < uVar8)) {
        if (uVar2 == 0) {
          *(ulong *)(param_1 + 8) = uVar8;
          *(ulong *)(param_1 + 0x10) = uVar8;
        }
        *(ulong *)(param_1 + 0x18) = uVar8;
      }
                    /* catch() { ... } // from try @ 003f5b20 with catch @ 003f5b38 */
      if (param_3 == 1) {
        uVar8 = param_2 + (uVar8 - lVar9);
        param_2 = param_2 + (*(long *)(param_1 + 0x10) - lVar9);
      }
      else {
        uVar8 = param_2;
                    /* try { // try from 003f5b48 to 004f5b4b has its CatchHandler @ 003f5a1c */
        if (param_3 == 2) {
          param_2 = param_2 + (*(long *)(param_1 + 0x18) - lVar9);
          uVar8 = param_2;
        }
      }
                    /* catch() { ... } // from try @ 003f5c78 with catch @ 003f5b4c */
      if ((((long)param_2 < 0) || ((bVar5 || (bVar3 || !bVar4)) && (bVar3 || bVar6))) ||
         (*(long *)(param_1 + 0x18) - lVar9 < (long)param_2)) {
        param_2 = 0xffffffffffffffff;
      }
      else {
        *(ulong *)(param_1 + 0x10) = *(long *)(param_1 + 8) + param_2;
      }
      if (((-1 < (long)uVar8) && (!bVar5 && (!bVar3 && bVar4) || bVar4 && bVar7)) &&
         ((long)uVar8 <= *(long *)(param_1 + 0x18) - lVar9)) {
        lVar9 = *(long *)(param_1 + 0x20);
        for (uVar1 = uVar8; 0x7fffffff < (long)uVar1; uVar1 = uVar1 - 0x7fffffff) {
          lVar9 = lVar9 + 0x7fffffff;
        }
        *(long *)(param_1 + 0x28) = lVar9 + (int)uVar1;
        auVar11._8_8_ = 0;
        auVar11._0_8_ = uVar8;
        return auVar11;
      }
      goto LAB_003f5afc;
    }
  }
  param_2 = 0xffffffffffffffff;
LAB_003f5afc:
  auVar10._8_8_ = 0;
  auVar10._0_8_ = param_2;
  return auVar10;
}


==================================================================

### FUNC 003f5c24 (308 bytes) name=FUN_003f5c24

undefined1  [16] FUN_003f5c24(long param_1,long param_2,ulong param_3,uint param_4)

{
  uint uVar1;
  bool bVar2;
  bool bVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  ulong uVar12;
  undefined1 auVar13 [16];
  
  uVar1 = *(uint *)(param_1 + 0x40) & 8;
  bVar2 = (param_4 & uVar1) == 0;
  bVar3 = (*(uint *)(param_1 + 0x40) & 0x10 & param_4) != 0;
  if (bVar2) {
    lVar6 = *(long *)(param_1 + 0x20);
    if (((lVar6 != 0) || (param_2 == 0)) && (bVar3)) goto LAB_003f5cb4;
  }
  else {
    lVar6 = *(long *)(param_1 + 8);
                    /* try { // try from 003f5c50 to 004f5c53 has its CatchHandler @ 003f5c68 */
    if ((lVar6 != 0) || (param_2 == 0)) {
LAB_003f5cb4:
      uVar4 = *(ulong *)(param_1 + 0x28);
      if ((uVar4 != 0) && (*(ulong *)(param_1 + 0x18) < uVar4)) {
        if (uVar1 == 0) {
          *(ulong *)(param_1 + 8) = uVar4;
          *(ulong *)(param_1 + 0x10) = uVar4;
          *(ulong *)(param_1 + 0x18) = uVar4;
        }
        else {
          *(ulong *)(param_1 + 0x18) = uVar4;
        }
      }
      if ((-1 < param_2) && (param_2 <= *(long *)(param_1 + 0x18) - lVar6)) {
        if (!bVar2) {
          *(long *)(param_1 + 0x10) = *(long *)(param_1 + 8) + param_2;
        }
        if (bVar3) {
          lVar6 = *(long *)(param_1 + 0x20);
          *(long *)(param_1 + 0x28) = lVar6;
          for (lVar5 = param_2; 0x7fffffff < lVar5; lVar5 = lVar5 + -0x7fffffff) {
            lVar6 = lVar6 + 0x7fffffff;
          }
          *(long *)(param_1 + 0x28) = lVar6 + (int)lVar5;
        }
        uVar12 = param_3 & 0xff;
        uVar11 = param_3 >> 8 & 0xff;
        uVar10 = param_3 >> 0x10 & 0xff;
        uVar9 = param_3 >> 0x18 & 0xff;
        uVar8 = param_3 >> 0x20 & 0xff;
        uVar7 = param_3 >> 0x28 & 0xff;
        uVar4 = param_3 >> 0x30 & 0xff;
                    /* try { // try from 003f5d40 to 004f5d43 has its CatchHandler @ 003f5df8 */
        param_3 = param_3 >> 0x38;
        goto LAB_003f5c78;
      }
    }
  }
  param_3 = 0;
  uVar4 = 0;
  uVar7 = 0;
  uVar8 = 0;
  uVar9 = 0;
                    /* catch() { ... } // from try @ 003f5c50 with catch @ 003f5c68 */
  uVar10 = 0;
  uVar11 = 0;
  uVar12 = 0;
  param_2 = -1;
LAB_003f5c78:
                    /* try { // try from 003f5c78 to 004f5c7b has its CatchHandler @ 003f5b4c */
                    /* catch() { ... } // from try @ 003f5dcc with catch @ 003f5c80
                       catch() { ... } // from try @ 003f5e3c with catch @ 003f5c80 */
  auVar13._8_8_ =
       uVar12 | uVar11 << 8 | uVar10 << 0x10 | uVar9 << 0x18 | uVar8 << 0x20 | uVar7 << 0x28 |
       uVar4 << 0x30 | param_3 << 0x38;
  auVar13._0_8_ = param_2;
  return auVar13;
}


==================================================================

### FUNC 003f5d58 (60 bytes) name=FUN_003f5d58

long FUN_003f5d58(long param_1)

{
  ulong uVar1;
  ulong uVar2;
  
                    /* try { // try from 003f5d5c to 004f5d77 has its CatchHandler @ 003f5e48 */
  if ((*(uint *)(param_1 + 0x40) >> 3 & 1) != 0) {
    uVar2 = *(ulong *)(param_1 + 0x28);
    uVar1 = *(ulong *)(param_1 + 0x18);
    if ((uVar2 != 0) && (uVar1 < uVar2)) {
      *(ulong *)(param_1 + 0x18) = uVar2;
      uVar1 = uVar2;
    }
    return (long)(uVar1 - *(long *)(param_1 + 0x10)) >> 2;
  }
  return -1;
}


==================================================================

### FUNC 003f5d94 (96 bytes) name=FUN_003f5d94

int FUN_003f5d94(long param_1,int param_2)

{
  bool bVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(param_1 + 0x10);
  if (*(ulong *)(param_1 + 8) < uVar2) {
    if (param_2 == -1) {
      *(ulong *)(param_1 + 0x10) = uVar2 - 4;
      return 0;
    }
    bVar1 = *(int *)(uVar2 - 4) == param_2;
                    /* try { // try from 003f5dcc to 004f5ddf has its CatchHandler @ 003f5c80 */
    if ((bVar1) || ((*(uint *)(param_1 + 0x40) >> 4 & 1) != 0)) {
      *(ulong *)(param_1 + 0x10) = uVar2 - 4;
      if (bVar1) {
        return param_2;
      }
      *(int *)(uVar2 - 4) = param_2;
      return param_2;
    }
  }
                    /* try { // try from 003f5da4 to 004f5da7 has its CatchHandler @ 003f5df8 */
                    /* try { // try from 003f5dac to 004f5dc3 has its CatchHandler @ 003f5e40 */
  return -1;
}


==================================================================

### FUNC 003f5df4 (376 bytes) name=FUN_003f5df4

undefined1  [16] FUN_003f5df4(long param_1,ulong param_2,int param_3,uint param_4)

{
  ulong uVar1;
  uint uVar2;
  bool bVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  ulong uVar8;
  long lVar9;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  
                    /* catch() { ... } // from try @ 003f5d40 with catch @ 003f5df8
                       catch() { ... } // from try @ 003f5da4 with catch @ 003f5df8 */
  uVar2 = *(uint *)(param_1 + 0x40) & 8;
  bVar3 = (param_4 & uVar2) == 0;
  bVar4 = (*(uint *)(param_1 + 0x40) & 0x10 & param_4) != 0;
  bVar5 = param_3 == 1;
  bVar6 = (param_4 & 0x10) != 0;
  bVar7 = (param_4 & 8) == 0;
                    /* try { // try from 003f5e3c to 004f5e3f has its CatchHandler @ 003f5c80 */
                    /* catch() { ... } // from try @ 003f5dac with catch @ 003f5e40 */
  if (bVar3 || bVar6) {
    lVar9 = *(long *)(param_1 + 0x20);
                    /* catch() { ... } // from try @ 003f5f98 with catch @ 003f5e70 */
    if (((lVar9 != 0) || (param_2 == 0)) && ((bVar4 && bVar7 || (!bVar5 && (!bVar3 && bVar4)))))
    goto LAB_003f5e74;
  }
  else {
    lVar9 = *(long *)(param_1 + 8);
                    /* catch() { ... } // from try @ 003f5d5c with catch @ 003f5e48 */
    if ((lVar9 != 0) || (param_2 == 0)) {
LAB_003f5e74:
      uVar8 = *(ulong *)(param_1 + 0x28);
      if ((uVar8 != 0) && (*(ulong *)(param_1 + 0x18) < uVar8)) {
        if (uVar2 == 0) {
          *(ulong *)(param_1 + 8) = uVar8;
          *(ulong *)(param_1 + 0x10) = uVar8;
        }
        *(ulong *)(param_1 + 0x18) = uVar8;
      }
      if (param_3 == 1) {
        uVar8 = param_2 + ((long)(uVar8 - lVar9) >> 2);
        param_2 = param_2 + (*(long *)(param_1 + 0x10) - lVar9 >> 2);
      }
      else {
        uVar8 = param_2;
        if (param_3 == 2) {
          param_2 = param_2 + (*(long *)(param_1 + 0x18) - lVar9 >> 2);
          uVar8 = param_2;
        }
      }
      if ((((long)param_2 < 0) || ((bVar5 || (bVar3 || !bVar4)) && (bVar3 || bVar6))) ||
         (*(long *)(param_1 + 0x18) - lVar9 >> 2 < (long)param_2)) {
        param_2 = 0xffffffffffffffff;
      }
      else {
        *(ulong *)(param_1 + 0x10) = *(long *)(param_1 + 8) + param_2 * 4;
      }
      if (((-1 < (long)uVar8) && (!bVar5 && (!bVar3 && bVar4) || bVar4 && bVar7)) &&
         ((long)uVar8 <= *(long *)(param_1 + 0x18) - lVar9 >> 2)) {
        lVar9 = *(long *)(param_1 + 0x20);
        for (uVar1 = uVar8; 0x7fffffff < (long)uVar1; uVar1 = uVar1 - 0x7fffffff) {
          lVar9 = lVar9 + 0x1fffffffc;
        }
        *(ulong *)(param_1 + 0x28) = lVar9 + uVar1 * 4;
        auVar11._8_8_ = 0;
        auVar11._0_8_ = uVar8;
        return auVar11;
      }
      goto LAB_003f5e54;
    }
  }
  param_2 = 0xffffffffffffffff;
LAB_003f5e54:
  auVar10._8_8_ = 0;
  auVar10._0_8_ = param_2;
  return auVar10;
}


==================================================================

### FUNC 003f5f6c (332 bytes) name=FUN_003f5f6c

undefined1  [16] FUN_003f5f6c(long param_1,long param_2,ulong param_3,uint param_4)

{
  uint uVar1;
  bool bVar2;
  bool bVar3;
  ulong uVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  ulong uVar12;
  undefined1 auVar13 [16];
  
                    /* try { // try from 003f5f70 to 004f5f73 has its CatchHandler @ 003f5f88 */
  uVar1 = *(uint *)(param_1 + 0x40) & 8;
  bVar2 = (param_4 & uVar1) == 0;
  bVar3 = (*(uint *)(param_1 + 0x40) & 0x10 & param_4) != 0;
                    /* catch() { ... } // from try @ 003f5f70 with catch @ 003f5f88 */
  if (bVar2) {
    lVar5 = *(long *)(param_1 + 0x20);
    if (((lVar5 != 0) || (param_2 == 0)) && (bVar3)) goto LAB_003f5ffc;
  }
  else {
    lVar5 = *(long *)(param_1 + 8);
                    /* try { // try from 003f5f98 to 004f5f9b has its CatchHandler @ 003f5e70 */
    if ((lVar5 != 0) || (param_2 == 0)) {
LAB_003f5ffc:
      uVar4 = *(ulong *)(param_1 + 0x28);
      if ((uVar4 != 0) && (*(ulong *)(param_1 + 0x18) < uVar4)) {
        if (uVar1 == 0) {
          *(ulong *)(param_1 + 8) = uVar4;
          *(ulong *)(param_1 + 0x10) = uVar4;
          *(ulong *)(param_1 + 0x18) = uVar4;
        }
        else {
          *(ulong *)(param_1 + 0x18) = uVar4;
        }
      }
      if ((-1 < param_2) && (param_2 <= *(long *)(param_1 + 0x18) - lVar5 >> 2)) {
        if (!bVar2) {
          *(long *)(param_1 + 0x10) = *(long *)(param_1 + 8) + param_2 * 4;
        }
        if (bVar3) {
          lVar7 = *(long *)(param_1 + 0x20);
          *(long *)(param_1 + 0x28) = lVar7;
          for (lVar5 = param_2; 0x7fffffff < lVar5; lVar5 = lVar5 + -0x7fffffff) {
            lVar7 = lVar7 + 0x1fffffffc;
          }
          *(long *)(param_1 + 0x28) = lVar7 + lVar5 * 4;
        }
        uVar12 = param_3 & 0xff;
        uVar11 = param_3 >> 8 & 0xff;
        uVar10 = param_3 >> 0x10 & 0xff;
        uVar9 = param_3 >> 0x18 & 0xff;
        uVar8 = param_3 >> 0x20 & 0xff;
        uVar6 = param_3 >> 0x28 & 0xff;
        uVar4 = param_3 >> 0x30 & 0xff;
        param_3 = param_3 >> 0x38;
                    /* try { // try from 003f609c to 004f609f has its CatchHandler @ 003f60b4 */
        goto LAB_003f5fc0;
      }
    }
  }
                    /* catch() { ... } // from try @ 003f60c4 with catch @ 003f5f9c */
  param_3 = 0;
  uVar4 = 0;
  uVar6 = 0;
  uVar8 = 0;
  uVar9 = 0;
  uVar10 = 0;
  uVar11 = 0;
  uVar12 = 0;
  param_2 = -1;
LAB_003f5fc0:
  auVar13._8_8_ =
       uVar12 | uVar11 << 8 | uVar10 << 0x10 | uVar9 << 0x18 | uVar8 << 0x20 | uVar6 << 0x28 |
       uVar4 << 0x30 | param_3 << 0x38;
  auVar13._0_8_ = param_2;
  return auVar13;
}


==================================================================

### FUNC 003f60b8 (64 bytes) name=FUN_003f60b8

undefined4 FUN_003f60b8(long param_1)

{
  undefined4 *puVar1;
  undefined4 *puVar2;
  
  if ((*(uint *)(param_1 + 0x40) >> 3 & 1) != 0) {
                    /* catch() { ... } // from try @ 003f61f0 with catch @ 003f60c8 */
    puVar1 = *(undefined4 **)(param_1 + 0x28);
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    if ((puVar1 != (undefined4 *)0x0) && (puVar2 < puVar1)) {
      *(undefined4 **)(param_1 + 0x18) = puVar1;
      puVar2 = puVar1;
    }
    if (*(undefined4 **)(param_1 + 0x10) < puVar2) {
      return **(undefined4 **)(param_1 + 0x10);
    }
  }
                    /* try { // try from 003f60c4 to 004f60c7 has its CatchHandler @ 003f5f9c */
  return 0xffffffff;
}


==================================================================

### FUNC 003f60f8 (168 bytes) name=FUN_003f60f8

size_t * FUN_003f60f8(undefined1 *param_1,long param_2)

{
  size_t *psVar1;
  size_t *__dest;
  size_t __n;
  
  __n = param_2 - (long)param_1;
  psVar1 = (size_t *)FUN_00412a70(__n,0);
  __dest = psVar1 + 3;
  if (__n == 1) {
    *(undefined1 *)(psVar1 + 3) = *param_1;
  }
  else {
    __dest = memcpy(__dest,param_1,__n);
  }
  if (psVar1 == (size_t *)PTR_DAT_00501f30) {
    return __dest;
  }
  *(undefined4 *)(psVar1 + 2) = 0;
  *psVar1 = __n;
  *(undefined1 *)((long)psVar1 + __n + 0x18) = 0;
  return __dest;
}


==================================================================

### FUNC 003f61a0 (180 bytes) name=FUN_003f61a0

wchar_t * FUN_003f61a0(wchar_t *param_1,long param_2)

{
  wchar_t *__s1;
  size_t *psVar1;
  size_t __n;
  
  __n = param_2 - (long)param_1 >> 2;
                    /* try { // try from 003f61c8 to 004f61cb has its CatchHandler @ 003f61e0 */
  psVar1 = (size_t *)FUN_004164a8(__n,0);
  __s1 = (wchar_t *)(psVar1 + 3);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_1;
  }
  else {
                    /* catch() { ... } // from try @ 003f61c8 with catch @ 003f61e0 */
    wmemcpy(__s1,param_1,__n);
                    /* try { // try from 003f61f0 to 004f61f3 has its CatchHandler @ 003f60c8 */
                    /* catch() { ... } // from try @ 003f631c with catch @ 003f61f4 */
  }
  if (psVar1 == (size_t *)PTR_DAT_00501ab8) {
    return __s1;
  }
  *(undefined4 *)(psVar1 + 2) = 0;
  *psVar1 = __n;
  *(undefined4 *)((long)psVar1 + (param_2 - (long)param_1) + 0x18) = 0;
  return __s1;
}


==================================================================

### FUNC 003f6254 (156 bytes) name=FUN_003f6254

void FUN_003f6254(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = (long)&PTR_FUN_004fda10;
  lVar4 = param_1[9];
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003f62f0 (156 bytes) name=FUN_003f62f0

void FUN_003f62f0(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* try { // try from 003f62f4 to 004f62f7 has its CatchHandler @ 003f630c */
                    /* catch() { ... } // from try @ 003f62f4 with catch @ 003f630c */
  *param_1 = (long)&PTR_FUN_004fdc50;
  lVar4 = param_1[9];
                    /* try { // try from 003f631c to 004f631f has its CatchHandler @ 003f61f4 */
                    /* catch() { ... } // from try @ 003f6448 with catch @ 003f6320 */
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003f638c (164 bytes) name=FUN_003f638c

void FUN_003f638c(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = (long)&PTR_FUN_004fda10;
  lVar4 = param_1[9];
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
                    /* try { // try from 003f6420 to 004f6423 has its CatchHandler @ 003f6438 */
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f6430 (164 bytes) name=FUN_003f6430

void FUN_003f6430(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* catch() { ... } // from try @ 003f6420 with catch @ 003f6438 */
                    /* try { // try from 003f6448 to 004f644b has its CatchHandler @ 003f6320 */
                    /* catch() { ... } // from try @ 003f6574 with catch @ 003f644c */
  *param_1 = (long)&PTR_FUN_004fdc50;
  lVar4 = param_1[9];
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f64d4 (204 bytes) name=FUN_003f64d4

void FUN_003f64d4(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8478;
  param_1[0xb] = &PTR_FUN_004f84a0;
  lVar4 = param_1[10];
  param_1[1] = &PTR_FUN_004fdc50;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
                    /* catch() { ... } // from try @ 003f654c with catch @ 003f6564 */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
                    /* try { // try from 003f6574 to 004f6577 has its CatchHandler @ 003f644c */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
                    /* catch() { ... } // from try @ 003f65e0 with catch @ 003f6578 */
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[1] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 8);
  param_1[0xb] = PTR_DAT_00501ea8 + 0x10;
                    /* try { // try from 003f654c to 004f654f has its CatchHandler @ 003f6564 */
  FUN_003d381c(param_1 + 0xb);
  return;
}


==================================================================

### FUNC 003f65a0 (16 bytes) name=FUN_003f65a0

void FUN_003f65a0(long *param_1)

{
  FUN_003f64d4((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f65b0 (204 bytes) name=FUN_003f65b0

void FUN_003f65b0(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* try { // try from 003f65b8 to 004f65bb has its CatchHandler @ 003f65d0 */
  *param_1 = &PTR_FUN_004f82c8;
                    /* catch() { ... } // from try @ 003f65b8 with catch @ 003f65d0 */
  param_1[0xb] = &PTR_FUN_004f82f0;
                    /* try { // try from 003f65e0 to 004f65e3 has its CatchHandler @ 003f6578 */
  lVar4 = param_1[10];
                    /* catch() { ... } // from try @ 003f664c with catch @ 003f65e4 */
  param_1[1] = &PTR_FUN_004fda10;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 003f6624 with catch @ 003f663c */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
                    /* try { // try from 003f664c to 004f664f has its CatchHandler @ 003f65e4 */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 8);
                    /* try { // try from 003f6624 to 004f6627 has its CatchHandler @ 003f663c */
  param_1[0xb] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xb);
  return;
}


==================================================================

### FUNC 003f667c (16 bytes) name=FUN_003f667c

void FUN_003f667c(long *param_1)

{
  FUN_003f65b0((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f668c (204 bytes) name=FUN_003f668c

void FUN_003f668c(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8258;
  param_1[0xc] = &PTR_FUN_004f8280;
  lVar4 = param_1[0xb];
  param_1[2] = &PTR_FUN_004fda10;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
                    /* catch() { ... } // from try @ 003f67ac with catch @ 003f673c */
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[2] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0xc] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xc);
  return;
}


==================================================================

### FUNC 003f6758 (16 bytes) name=FUN_003f6758

void FUN_003f6758(long *param_1)

{
  FUN_003f668c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6768 (204 bytes) name=FUN_003f6768

void FUN_003f6768(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* try { // try from 003f6784 to 004f6787 has its CatchHandler @ 003f679c */
  *param_1 = &LAB_004f8408;
  param_1[0xc] = &PTR_FUN_004f8430;
  lVar4 = param_1[0xb];
                    /* catch() { ... } // from try @ 003f6784 with catch @ 003f679c */
  param_1[2] = &PTR_FUN_004fdc50;
                    /* try { // try from 003f67ac to 004f67af has its CatchHandler @ 003f673c */
                    /* catch() { ... } // from try @ 003f6820 with catch @ 003f67b0 */
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
                    /* try { // try from 003f67f8 to 004f67fb has its CatchHandler @ 003f6810 */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
                    /* catch() { ... } // from try @ 003f6894 with catch @ 003f6824 */
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
                    /* catch() { ... } // from try @ 003f67f8 with catch @ 003f6810 */
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
                    /* try { // try from 003f6820 to 004f6823 has its CatchHandler @ 003f67b0 */
    }
  }
  param_1[2] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0xc] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0xc);
  return;
}


==================================================================

### FUNC 003f6834 (16 bytes) name=FUN_003f6834

void FUN_003f6834(long *param_1)

{
  FUN_003f6768((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6844 (212 bytes) name=FUN_003f6844

void FUN_003f6844(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8478;
                    /* try { // try from 003f686c to 004f686f has its CatchHandler @ 003f6884 */
  param_1[0xb] = &PTR_FUN_004f84a0;
  lVar4 = param_1[10];
  param_1[1] = &PTR_FUN_004fdc50;
                    /* catch() { ... } // from try @ 003f686c with catch @ 003f6884 */
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
                    /* try { // try from 003f6908 to 004f690b has its CatchHandler @ 003f6898 */
      iVar3 = *(int *)(lVar4 + -8);
                    /* catch() { ... } // from try @ 003f6a18 with catch @ 003f6910
                       catch() { ... } // from try @ 003f6a64 with catch @ 003f6910 */
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
                    /* try { // try from 003f68e0 to 004f68e3 has its CatchHandler @ 003f68f8 */
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
                    /* catch() { ... } // from try @ 003f68e0 with catch @ 003f68f8 */
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
                    /* try { // try from 003f6894 to 004f6897 has its CatchHandler @ 003f6824 */
                    /* catch() { ... } // from try @ 003f6908 with catch @ 003f6898 */
  param_1[1] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 8);
  param_1[0xb] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0xb);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f6918 (16 bytes) name=FUN_003f6918

void FUN_003f6918(long *param_1)

{
  FUN_003f6844((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6928 (212 bytes) name=FUN_003f6928

void FUN_003f6928(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f82c8;
  param_1[0xb] = &PTR_FUN_004f82f0;
  lVar4 = param_1[10];
  param_1[1] = &PTR_FUN_004fda10;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
                    /* try { // try from 003f69c4 to 004f69df has its CatchHandler @ 003f6a68 */
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 8);
  param_1[0xb] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xb);
                    /* try { // try from 003f69a8 to 004f69ab has its CatchHandler @ 003f6a40 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f69fc (16 bytes) name=FUN_003f69fc

void FUN_003f69fc(long *param_1)

{
  FUN_003f6928((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6a0c (212 bytes) name=FUN_003f6a0c

void FUN_003f6a0c(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* try { // try from 003f6a0c to 004f6a0f has its CatchHandler @ 003f6a40 */
                    /* try { // try from 003f6a18 to 004f6a2b has its CatchHandler @ 003f6910 */
  *param_1 = &PTR_FUN_004f8258;
  param_1[0xc] = &PTR_FUN_004f8280;
  lVar4 = param_1[0xb];
                    /* catch() { ... } // from try @ 003f69a8 with catch @ 003f6a40
                       catch() { ... } // from try @ 003f6a0c with catch @ 003f6a40 */
  param_1[2] = &PTR_FUN_004fda10;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
                    /* try { // try from 003f6a64 to 004f6a67 has its CatchHandler @ 003f6910 */
                    /* catch() { ... } // from try @ 003f69c4 with catch @ 003f6a68 */
  param_1[2] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0xc] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xc);
  operator_delete(param_1);
                    /* catch() { ... } // from try @ 003f6bb8 with catch @ 003f6a90 */
  return;
}


==================================================================

### FUNC 003f6ae0 (16 bytes) name=FUN_003f6ae0

void FUN_003f6ae0(long *param_1)

{
  FUN_003f6a0c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6af0 (212 bytes) name=FUN_003f6af0

void FUN_003f6af0(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &LAB_004f8408;
  param_1[0xc] = &PTR_FUN_004f8430;
  lVar4 = param_1[0xb];
  param_1[2] = &PTR_FUN_004fdc50;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
                    /* try { // try from 003f6bb8 to 004f6bbb has its CatchHandler @ 003f6a90 */
                    /* catch() { ... } // from try @ 003f6ce4 with catch @ 003f6bbc */
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
                    /* try { // try from 003f6b90 to 004f6b93 has its CatchHandler @ 003f6ba8 */
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
                    /* catch() { ... } // from try @ 003f6b90 with catch @ 003f6ba8 */
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[2] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0xc] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0xc);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f6bc4 (16 bytes) name=FUN_003f6bc4

void FUN_003f6bc4(long *param_1)

{
  FUN_003f6af0((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6bd4 (216 bytes) name=FUN_003f6bd4

void FUN_003f6bd4(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8368;
  param_1[0xd] = &PTR_FUN_004f83b8;
  lVar4 = param_1[0xc];
  param_1[2] = &PTR_FUN_004f8390;
  param_1[3] = &PTR_FUN_004fda10;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[3] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0xd] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xd);
  return;
}


==================================================================

### FUNC 003f6cac (8 bytes) name=FUN_003f6cac

void FUN_003f6cac(long param_1)

{
  FUN_003f6bd4(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 003f6cb4 (16 bytes) name=FUN_003f6cb4

void FUN_003f6cb4(long *param_1)

{
                    /* try { // try from 003f6cbc to 004f6cbf has its CatchHandler @ 003f6cd4 */
  FUN_003f6bd4((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6cc4 (216 bytes) name=FUN_003f6cc4

void FUN_003f6cc4(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* catch() { ... } // from try @ 003f6cbc with catch @ 003f6cd4 */
  *param_1 = &PTR_FUN_004f8518;
                    /* try { // try from 003f6ce4 to 004f6ce7 has its CatchHandler @ 003f6bbc */
                    /* catch() { ... } // from try @ 003f6e10 with catch @ 003f6ce8 */
  param_1[0xd] = &PTR_FUN_004f8568;
  lVar4 = param_1[0xc];
  param_1[2] = &PTR_FUN_004f8540;
  param_1[3] = &PTR_FUN_004fdc50;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  param_1[3] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0xd] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0xd);
  return;
}


==================================================================

### FUNC 003f6d9c (8 bytes) name=FUN_003f6d9c

void FUN_003f6d9c(long param_1)

{
  FUN_003f6cc4(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 003f6da4 (16 bytes) name=FUN_003f6da4

void FUN_003f6da4(long *param_1)

{
  FUN_003f6cc4((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6db4 (224 bytes) name=FUN_003f6db4

void FUN_003f6db4(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8368;
  param_1[0xd] = &PTR_FUN_004f83b8;
  lVar4 = param_1[0xc];
                    /* try { // try from 003f6de8 to 004f6deb has its CatchHandler @ 003f6e00 */
  param_1[2] = &PTR_FUN_004f8390;
  param_1[3] = &PTR_FUN_004fda10;
                    /* catch() { ... } // from try @ 003f6de8 with catch @ 003f6e00 */
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
                    /* try { // try from 003f6e10 to 004f6e13 has its CatchHandler @ 003f6ce8 */
                    /* catch() { ... } // from try @ 003f6f3c with catch @ 003f6e14 */
  param_1[3] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0xd] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0xd);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003f6e94 (8 bytes) name=FUN_003f6e94

void FUN_003f6e94(long param_1)

{
  FUN_003f6db4(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 003f6e9c (16 bytes) name=FUN_003f6e9c

void FUN_003f6e9c(long *param_1)

{
  FUN_003f6db4((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6eac (224 bytes) name=FUN_003f6eac

void FUN_003f6eac(undefined8 *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *param_1 = &PTR_FUN_004f8518;
  param_1[0xd] = &PTR_FUN_004f8568;
  lVar4 = param_1[0xc];
  param_1[2] = &PTR_FUN_004f8540;
  param_1[3] = &PTR_FUN_004fdc50;
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
                    /* try { // try from 003f6f14 to 004f6f17 has its CatchHandler @ 003f6f2c */
  param_1[3] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 10);
                    /* catch() { ... } // from try @ 003f6f14 with catch @ 003f6f2c */
  param_1[0xd] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0xd);
  operator_delete(param_1);
                    /* try { // try from 003f6f3c to 004f6f3f has its CatchHandler @ 003f6e14 */
                    /* catch() { ... } // from try @ 003f7068 with catch @ 003f6f40 */
  return;
}


==================================================================

### FUNC 003f6f8c (8 bytes) name=FUN_003f6f8c

void FUN_003f6f8c(long param_1)

{
  FUN_003f6eac(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 003f6f94 (16 bytes) name=FUN_003f6f94

void FUN_003f6f94(long *param_1)

{
  FUN_003f6eac((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 003f6fa4 (124 bytes) name=FUN_003f6fa4

void FUN_003f6fa4(long *param_1,undefined4 param_2)

{
  undefined *puVar1;
  
  puVar1 = PTR_DAT_00501bb0 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  *param_1 = (long)&PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 8) = param_2;
  param_1[9] = (long)(PTR_DAT_00501f30 + 0x18);
  return;
}


==================================================================

### FUNC 003f8018 (356 bytes) name=FUN_003f8018

long * FUN_003f8018(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
                    /* try { // try from 003f801c to 004f801f has its CatchHandler @ 003f8034 */
                    /* catch() { ... } // from try @ 003f801c with catch @ 003f8034 */
  local_8 = PTR_DAT_00501f30 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x28);
                    /* try { // try from 003f8044 to 004f8047 has its CatchHandler @ 003f7f20 */
  if (uVar6 == 0) {
    FUN_004144f8(param_1,param_2 + 0x48);
    return param_1;
                    /* try { // try from 003f8144 to 004f8147 has its CatchHandler @ 003f815c */
  }
                    /* catch() { ... } // from try @ 003f816c with catch @ 003f8048 */
  uVar8 = *(ulong *)(param_2 + 0x18);
  uVar3 = *(ulong *)(param_2 + 0x20);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar6,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
                    /* catch() { ... } // from try @ 003f82c0 with catch @ 003f8170
                       catch() { ... } // from try @ 003f8330 with catch @ 003f8170 */
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f8124;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar8,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f8124;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003f8124:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003f81cc (168 bytes) name=FUN_003f81cc

void FUN_003f81cc(long param_1,long param_2,long param_3,long param_4)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  
  lVar3 = *(long *)(param_1 + 0x48);
  uVar1 = *(uint *)(param_1 + 0x40) >> 3;
  lVar2 = param_2 + *(long *)(lVar3 + -0x18);
  if (param_2 == lVar3) {
    lVar3 = param_2 + *(long *)(lVar3 + -0x10);
  }
  else {
    lVar2 = lVar2 + param_3;
    param_3 = 0;
    lVar3 = lVar2;
  }
  if ((uVar1 & 1) != 0) {
    *(long *)(param_1 + 8) = param_2;
    *(long *)(param_1 + 0x10) = param_2 + param_3;
    *(long *)(param_1 + 0x18) = lVar2;
  }
  if ((*(uint *)(param_1 + 0x40) & 0x10) != 0) {
    *(long *)(param_1 + 0x28) = param_2;
    *(long *)(param_1 + 0x20) = param_2;
    *(long *)(param_1 + 0x30) = lVar3;
    for (; 0x7fffffff < param_4; param_4 = param_4 + -0x7fffffff) {
      param_2 = param_2 + 0x7fffffff;
                    /* try { // try from 003f8234 to 004f8237 has its CatchHandler @ 003f82ec */
    }
    *(long *)(param_1 + 0x28) = param_2 + (int)param_4;
                    /* try { // try from 003f8250 to 004f826b has its CatchHandler @ 003f833c */
    if ((uVar1 & 1) == 0) {
      *(long *)(param_1 + 8) = lVar2;
      *(long *)(param_1 + 0x10) = lVar2;
      *(long *)(param_1 + 0x18) = lVar2;
    }
  }
  return;
}


==================================================================

### FUNC 003f8274 (32 bytes) name=FUN_003f8274

void FUN_003f8274(long param_1,uint param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 0x40) = param_2;
  uVar1 = 0;
  if ((param_2 & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18);
  }
  FUN_003f81cc(param_1,*(long *)(param_1 + 0x48),0,uVar1);
  return;
}


==================================================================

### FUNC 003f8294 (76 bytes) name=FUN_003f8294

void FUN_003f8294(long param_1,long *param_2)

{
  undefined8 uVar1;
  
                    /* try { // try from 003f8298 to 004f829b has its CatchHandler @ 003f82ec */
                    /* try { // try from 003f82a0 to 004f82b7 has its CatchHandler @ 003f8334 */
  FUN_00412fdc(param_1 + 0x48,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
                    /* try { // try from 003f82c0 to 004f82d3 has its CatchHandler @ 003f8170 */
  if ((*(uint *)(param_1 + 0x40) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18);
  }
  FUN_003f81cc(param_1,*(long *)(param_1 + 0x48),0,uVar1);
  return;
}


==================================================================

### FUNC 003f82e0 (100 bytes) name=FUN_003f82e0

long FUN_003f82e0(long param_1,long param_2,long param_3)

{
                    /* catch() { ... } // from try @ 003f8234 with catch @ 003f82ec
                       catch() { ... } // from try @ 003f8298 with catch @ 003f82ec */
  if ((param_2 != 0) && (-1 < param_3)) {
    FUN_00412b08(param_1 + 0x48,0,*(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18),0);
    FUN_003f81cc(param_1,param_2,param_3,0);
  }
                    /* try { // try from 003f8330 to 004f8333 has its CatchHandler @ 003f8170 */
                    /* catch() { ... } // from try @ 003f82a0 with catch @ 003f8334 */
                    /* catch() { ... } // from try @ 003f8250 with catch @ 003f833c */
  return param_1;
}


==================================================================

### FUNC 003f8344 (172 bytes) name=FUN_003f8344

void FUN_003f8344(long *param_1,long *param_2,uint param_3)

{
  undefined *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
                    /* catch() { ... } // from try @ 003f83e8 with catch @ 003f8360
                       catch() { ... } // from try @ 003f8430 with catch @ 003f8360 */
  puVar1 = PTR_DAT_00501bb0 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  lVar2 = *param_2;
  *(undefined4 *)(param_1 + 8) = 0;
  uVar3 = *(undefined8 *)(lVar2 + -0x18);
  *param_1 = (long)&PTR_FUN_004fda10;
  FUN_004108cc(param_1 + 9,lVar2,uVar3,auStack_8);
  *(uint *)(param_1 + 8) = param_3;
  uVar3 = 0;
                    /* try { // try from 003f83cc to 004f83df has its CatchHandler @ 003f840c */
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[9] + -0x18);
  }
  FUN_003f81cc(param_1,param_1[9],0,uVar3);
                    /* try { // try from 003f83e8 to 004f83fb has its CatchHandler @ 003f8360 */
  return;
}


==================================================================

### FUNC 003f8410 (508 bytes) name=FUN_003f8410

int FUN_003f8410(long param_1,int param_2)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  ulong uVar4;
  int *piVar5;
  ulong uVar6;
  int iVar7;
  undefined1 *puVar8;
  undefined *local_8;
  
                    /* try { // try from 003f8430 to 004f8433 has its CatchHandler @ 003f8360 */
  if ((*(uint *)(param_1 + 0x40) >> 4 & 1) == 0) {
    return -1;
  }
  if (param_2 == -1) {
    return 0;
  }
  puVar8 = *(undefined1 **)(param_1 + 0x28);
  lVar3 = *(long *)(*(long *)(param_1 + 0x48) + -0x10);
  bVar2 = puVar8 < *(undefined1 **)(param_1 + 0x30);
  if (bVar2 < (lVar3 == 0x3ffffffffffffff9)) {
    return -1;
  }
  if (bVar2) {
    *puVar8 = (char)param_2;
    goto LAB_003f8478;
  }
  uVar4 = lVar3 * 2;
  if (uVar4 < 0x200) {
    uVar4 = 0x200;
LAB_003f84ac:
                    /* catch() { ... } // from try @ 003f8500 with catch @ 003f84ac
                       catch() { ... } // from try @ 003f8650 with catch @ 003f84ac
                       catch() { ... } // from try @ 003f86d4 with catch @ 003f84ac */
    uVar6 = uVar4;
  }
  else {
    uVar6 = 0x3ffffffffffffff9;
    if (uVar4 < 0x3ffffffffffffffa) goto LAB_003f84ac;
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_8,uVar6);
  lVar3 = *(long *)(param_1 + 0x20);
  if (lVar3 != 0) {
    FUN_00412fdc(&local_8,lVar3,*(long *)(param_1 + 0x30) - lVar3);
  }
  lVar3 = *(long *)(local_8 + -0x18);
  uVar4 = lVar3 + 1;
                    /* try { // try from 003f8500 to 004f8503 has its CatchHandler @ 003f84ac */
  if ((*(ulong *)(local_8 + -0x10) < uVar4) || (0 < *(int *)(local_8 + -8))) {
    FUN_00410ed8(&local_8,uVar4);
    lVar3 = *(long *)(local_8 + -0x18);
  }
  local_8[lVar3] = (char)param_2;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    *(undefined4 *)(local_8 + -8) = 0;
    *(ulong *)(local_8 + -0x18) = uVar4;
    local_8[uVar4] = 0;
  }
                    /* try { // try from 003f8534 to 004f8623 has its CatchHandler @ 003f86c4 */
  FUN_00411a24(param_1 + 0x48,&local_8);
  FUN_003f81cc(param_1,*(undefined8 *)(param_1 + 0x48),
               *(long *)(param_1 + 0x10) - *(long *)(param_1 + 8),
               *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20));
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar7 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar7 + -1;
    }
    else {
      piVar5 = (int *)(local_8 + -8);
      do {
        iVar7 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar7 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar7 < 1) {
      operator_delete(local_8 + -0x18);
    }
  }
LAB_003f8478:
  *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;
  return param_2;
}


==================================================================

### FUNC 003f8634 (44 bytes) name=FUN_003f8634

void FUN_003f8634(long param_1)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(param_1 + 0x28);
  if ((uVar1 != 0) && (*(ulong *)(param_1 + 0x18) < uVar1)) {
    if ((*(uint *)(param_1 + 0x40) >> 3 & 1) == 0) {
                    /* try { // try from 003f8650 to 004f8653 has its CatchHandler @ 003f84ac */
      *(ulong *)(param_1 + 8) = uVar1;
      *(ulong *)(param_1 + 0x10) = uVar1;
    }
    *(ulong *)(param_1 + 0x18) = uVar1;
  }
  return;
}


==================================================================

### FUNC 003f8660 (76 bytes) name=FUN_003f8660

void FUN_003f8660(long param_1,long param_2,undefined8 param_3,long param_4)

{
  *(long *)(param_1 + 0x28) = param_2;
  *(long *)(param_1 + 0x20) = param_2;
  *(undefined8 *)(param_1 + 0x30) = param_3;
  for (; 0x7fffffff < param_4; param_4 = param_4 + -0x7fffffff) {
    param_2 = param_2 + 0x7fffffff;
  }
  *(long *)(param_1 + 0x28) = param_2 + (int)param_4;
  return;
}


==================================================================

### FUNC 003f86ac (236 bytes) name=FUN_003f86ac

void FUN_003f86ac(long *param_1,long *param_2,uint param_3)

{
  long lVar1;
  
                    /* catch() { ... } // from try @ 003f8534 with catch @ 003f86c4 */
  lVar1 = param_2[1];
                    /* try { // try from 003f86d4 to 004f86d7 has its CatchHandler @ 003f84ac */
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)(PTR_DAT_00501bb0 + 0x10);
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  param_1[2] = (long)&PTR_FUN_004fda10;
  *(uint *)(param_1 + 10) = param_3 | 8;
  lVar1 = *(long *)(*param_1 + -0x18);
  param_1[0xb] = (long)(PTR_DAT_00501f30 + 0x18);
  FUN_003d2728((long)param_1 + lVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 003f87f0 (268 bytes) name=FUN_003f87f0

void FUN_003f87f0(undefined8 *param_1,uint param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xc;
  FUN_003d347c(puVar1);
  param_1[0x27] = 0;
  *(undefined1 *)(param_1 + 0x28) = 0;
  *(undefined1 *)((long)param_1 + 0x141) = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  *param_1 = &DAT_004fda98;
  param_1[1] = 0;
  param_1[0xc] = &DAT_004fdac0;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f8258;
  param_1[0xc] = &PTR_FUN_004f8280;
  puVar2 = PTR_DAT_00501bb0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[2] = puVar2 + 0x10;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  param_1[2] = &PTR_FUN_004fda10;
  *(uint *)(param_1 + 10) = param_2 | 8;
  param_1[0xb] = PTR_DAT_00501f30 + 0x18;
  FUN_003d2728(puVar1);
  return;
}


==================================================================

### FUNC 003f8960 (292 bytes) name=FUN_003f8960

void FUN_003f8960(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  lVar1 = param_2[1];
  lVar2 = *(long *)(lVar1 + -0x18);
  *param_1 = lVar1;
  *(long *)((long)param_1 + lVar2) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)(PTR_DAT_00501bb0 + 0x10);
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  lVar1 = *param_3;
  param_1[2] = (long)&PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 10) = 0;
  FUN_004108cc(param_1 + 0xb,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 10) = param_4 | 8;
  uVar3 = 0;
  if ((param_4 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xb] + -0x18);
  }
  FUN_003f81cc(param_1 + 2,param_1[0xb],0,uVar3);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 2);
  return;
}


==================================================================

### FUNC 003f8b00 (320 bytes) name=FUN_003f8b00

void FUN_003f8b00(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xc;
  FUN_003d347c(puVar1);
  param_1[0x27] = 0;
  *(undefined1 *)(param_1 + 0x28) = 0;
  *(undefined1 *)((long)param_1 + 0x141) = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  *param_1 = &DAT_004fda98;
  param_1[1] = 0;
  param_1[0xc] = &DAT_004fdac0;
  FUN_003d2728(puVar1,0);
                    /* catch() { ... } // from try @ 003f8cd8 with catch @ 003f8b80
                       catch() { ... } // from try @ 003f8d48 with catch @ 003f8b80 */
  *param_1 = &PTR_FUN_004f8258;
  param_1[0xc] = &PTR_FUN_004f8280;
  param_1[2] = PTR_DAT_00501bb0 + 0x10;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  lVar2 = *param_2;
  param_1[2] = &PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 10) = 0;
  FUN_004108cc(param_1 + 0xb,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 10) = param_3 | 8;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xb] + -0x18);
  }
  FUN_003f81cc(param_1 + 2,param_1[0xb],0,uVar3);
  FUN_003d2728(puVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 003f8cc8 (200 bytes) name=FUN_003f8cc8

void FUN_003f8cc8(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
                    /* try { // try from 003f8cd8 to 004f8ceb has its CatchHandler @ 003f8b80 */
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[0xb];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  param_1[2] = (long)&PTR_FUN_004fda10;
                    /* catch() { ... } // from try @ 003f8c4c with catch @ 003f8d04
                       catch() { ... } // from try @ 003f8cb0 with catch @ 003f8d04 */
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501f30) {
                    /* catch() { ... } // from try @ 003f8cb8 with catch @ 003f8d4c */
                    /* catch() { ... } // from try @ 003f8c68 with catch @ 003f8d54 */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
                    /* catch() { ... } // from try @ 003f8e88 with catch @ 003f8d80
                       catch() { ... } // from try @ 003f8ed4 with catch @ 003f8d80 */
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[2] = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 9);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[2];
                    /* try { // try from 003f8d48 to 004f8d4b has its CatchHandler @ 003f8b80 */
  return;
}


==================================================================

### FUNC 003f8d90 (8 bytes) name=FUN_003f8d90

long FUN_003f8d90(long param_1)

{
  return param_1 + 0x10;
}


==================================================================

### FUNC 003f8d98 (356 bytes) name=FUN_003f8d98

long * FUN_003f8d98(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_8 = PTR_DAT_00501f30 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x38);
  if (uVar6 == 0) {
    FUN_004144f8(param_1,param_2 + 0x58);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x28);
  uVar3 = *(ulong *)(param_2 + 0x30);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar6,auStack_18);
    }
                    /* try { // try from 003f8e18 to 004f8e1b has its CatchHandler @ 003f8eb0 */
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
                    /* try { // try from 003f8e34 to 004f8e4f has its CatchHandler @ 003f8ed8 */
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f8ea4;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar8,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
                    /* try { // try from 003f8e7c to 004f8e7f has its CatchHandler @ 003f8eb0 */
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
                    /* try { // try from 003f8e88 to 004f8e9b has its CatchHandler @ 003f8d80 */
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f8ea4;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003f8ea4:
  if (iVar5 < 1) {
                    /* catch() { ... } // from try @ 003f8e18 with catch @ 003f8eb0
                       catch() { ... } // from try @ 003f8e7c with catch @ 003f8eb0 */
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003f8f4c (80 bytes) name=FUN_003f8f4c

void FUN_003f8f4c(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00412fdc(param_1 + 0x58,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x50) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x58) + -0x18);
  }
                    /* catch() { ... } // from try @ 003f8fc0 with catch @ 003f8f94
                       catch() { ... } // from try @ 003f91c4 with catch @ 003f8f94
                       catch() { ... } // from try @ 003f9254 with catch @ 003f8f94 */
  FUN_003f81cc(param_1 + 0x10,*(long *)(param_1 + 0x58),0,uVar1);
  return;
}


==================================================================

### FUNC 003f8f9c (228 bytes) name=FUN_003f8f9c

void FUN_003f8f9c(long *param_1,long *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = param_2[1];
                    /* try { // try from 003f8fc0 to 004f8fc3 has its CatchHandler @ 003f8f94 */
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d2728((long)param_1 + lVar1,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)(PTR_DAT_00501bb0 + 0x10);
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  param_1[1] = (long)&PTR_FUN_004fda10;
  *(uint *)(param_1 + 9) = param_3 | 0x10;
  lVar1 = *(long *)(*param_1 + -0x18);
  param_1[10] = (long)(PTR_DAT_00501f30 + 0x18);
  FUN_003d2728((long)param_1 + lVar1,param_1 + 1);
  return;
}


==================================================================

### FUNC 003f90d8 (264 bytes) name=FUN_003f90d8

void FUN_003f90d8(undefined8 *param_1,uint param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xb;
  FUN_003d347c(puVar1);
  param_1[0x26] = 0;
  *(undefined1 *)(param_1 + 0x27) = 0;
  *(undefined1 *)((long)param_1 + 0x139) = 0;
                    /* try { // try from 003f911c to 004f911f has its CatchHandler @ 003f91f0 */
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  *param_1 = &DAT_004fdae8;
                    /* try { // try from 003f9138 to 004f9153 has its CatchHandler @ 003f9268 */
  param_1[0xb] = &DAT_004fdb10;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f82c8;
  param_1[0xb] = &PTR_FUN_004f82f0;
  puVar2 = PTR_DAT_00501bb0;
  param_1[2] = 0;
                    /* try { // try from 003f9180 to 004f9183 has its CatchHandler @ 003f91f0 */
  param_1[3] = 0;
  param_1[1] = puVar2 + 0x10;
                    /* try { // try from 003f9188 to 004f919f has its CatchHandler @ 003f9260 */
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
                    /* try { // try from 003f91a4 to 004f91bb has its CatchHandler @ 003f9258 */
  param_1[1] = &PTR_FUN_004fda10;
  *(uint *)(param_1 + 9) = param_2 | 0x10;
  param_1[10] = PTR_DAT_00501f30 + 0x18;
                    /* try { // try from 003f91c4 to 004f91d7 has its CatchHandler @ 003f8f94 */
  FUN_003d2728(puVar1);
  return;
}


==================================================================

### FUNC 003f9244 (284 bytes) name=FUN_003f9244

void FUN_003f9244(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined1 auStack_8 [8];
  
                    /* try { // try from 003f9254 to 004f9257 has its CatchHandler @ 003f8f94 */
                    /* catch() { ... } // from try @ 003f91a4 with catch @ 003f9258 */
                    /* catch() { ... } // from try @ 003f9188 with catch @ 003f9260 */
  lVar1 = param_2[1];
                    /* catch() { ... } // from try @ 003f9138 with catch @ 003f9268 */
  *param_1 = lVar1;
                    /* catch() { ... } // from try @ 003f92ac with catch @ 003f9278
                       catch() { ... } // from try @ 003f9448 with catch @ 003f9278
                       catch() { ... } // from try @ 003f94e0 with catch @ 003f9278 */
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d2728((long)param_1 + lVar1,0);
  lVar1 = *param_2;
                    /* try { // try from 003f92ac to 004f92df has its CatchHandler @ 003f9278 */
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)(PTR_DAT_00501bb0 + 0x10);
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  lVar1 = *param_3;
  param_1[1] = (long)&PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 9) = 0;
  FUN_004108cc(param_1 + 10,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 9) = param_4 | 0x10;
  uVar2 = 0;
  if ((param_4 & 3) != 0) {
    uVar2 = *(undefined8 *)(param_1[10] + -0x18);
  }
  FUN_003f81cc(param_1 + 1,param_1[10],0,uVar2);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 1);
  return;
}


==================================================================

### FUNC 003f93dc (316 bytes) name=FUN_003f93dc

void FUN_003f93dc(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xb;
                    /* try { // try from 003f9408 to 004f940b has its CatchHandler @ 003f947c */
  FUN_003d347c(puVar1);
                    /* try { // try from 003f9410 to 004f9427 has its CatchHandler @ 003f94ec */
  param_1[0x26] = 0;
  *(undefined1 *)(param_1 + 0x27) = 0;
  *(undefined1 *)((long)param_1 + 0x139) = 0;
  param_1[0x28] = 0;
                    /* try { // try from 003f942c to 004f9443 has its CatchHandler @ 003f94e4 */
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  *param_1 = &DAT_004fdae8;
                    /* try { // try from 003f9448 to 004f945f has its CatchHandler @ 003f9278 */
  param_1[0xb] = &DAT_004fdb10;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f82c8;
  param_1[0xb] = &PTR_FUN_004f82f0;
                    /* catch() { ... } // from try @ 003f93a4 with catch @ 003f947c
                       catch() { ... } // from try @ 003f9408 with catch @ 003f947c */
  param_1[1] = PTR_DAT_00501bb0 + 0x10;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  lVar2 = *param_2;
  param_1[1] = &PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 9) = 0;
  FUN_004108cc(param_1 + 10,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 9) = param_3 | 0x10;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
                    /* try { // try from 003f94e0 to 004f94e3 has its CatchHandler @ 003f9278 */
    uVar3 = *(undefined8 *)(param_1[10] + -0x18);
  }
                    /* catch() { ... } // from try @ 003f942c with catch @ 003f94e4 */
                    /* catch() { ... } // from try @ 003f9410 with catch @ 003f94ec */
  FUN_003f81cc(param_1 + 1,param_1[10],0,uVar3);
                    /* catch() { ... } // from try @ 003f93c0 with catch @ 003f94f4 */
  FUN_003d2728(puVar1,param_1 + 1);
                    /* catch() { ... } // from try @ 003f9628 with catch @ 003f9504 */
  return;
}


==================================================================

### FUNC 003f95a0 (200 bytes) name=FUN_003f95a0

void FUN_003f95a0(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[10];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  param_1[1] = (long)&PTR_FUN_004fda10;
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501f30) {
                    /* try { // try from 003f9628 to 004f962b has its CatchHandler @ 003f9504 */
                    /* catch() { ... } // from try @ 003f974c with catch @ 003f962c */
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[1] = (long)(PTR_DAT_00501bb0 + 0x10);
                    /* try { // try from 003f9600 to 004f9603 has its CatchHandler @ 003f9618 */
  FUN_003ed708(param_1 + 8);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[2];
                    /* catch() { ... } // from try @ 003f9600 with catch @ 003f9618 */
  return;
}


==================================================================

### FUNC 003f9668 (8 bytes) name=FUN_003f9668

long FUN_003f9668(long param_1)

{
  return param_1 + 8;
}


==================================================================

### FUNC 003f9670 (356 bytes) name=FUN_003f9670

long * FUN_003f9670(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_8 = PTR_DAT_00501f30 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x30);
  if (uVar6 == 0) {
    FUN_004144f8(param_1,param_2 + 0x50);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x20);
  uVar3 = *(ulong *)(param_2 + 0x28);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar6,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
                    /* try { // try from 003f97c8 to 004f97cb has its CatchHandler @ 003f992c */
                    /* try { // try from 003f97d0 to 004f98d7 has its CatchHandler @ 003f9974 */
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f977c;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar8,auStack_18);
    }
                    /* catch() { ... } // from try @ 003f9724 with catch @ 003f973c */
    FUN_004144f8(param_1,&local_8);
                    /* try { // try from 003f974c to 004f974f has its CatchHandler @ 003f962c */
                    /* catch() { ... } // from try @ 003f995c with catch @ 003f9750 */
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003f977c;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003f977c:
  if (iVar5 < 1) {
                    /* try { // try from 003f9784 to 004f97b3 has its CatchHandler @ 003f9974 */
    operator_delete(puVar4);
  }
                    /* try { // try from 003f9724 to 004f9727 has its CatchHandler @ 003f973c */
  return param_1;
}


==================================================================

### FUNC 003f9824 (80 bytes) name=FUN_003f9824

void FUN_003f9824(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00412fdc(param_1 + 0x50,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x48) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x50) + -0x18);
  }
  FUN_003f81cc(param_1 + 8,*(long *)(param_1 + 0x50),0,uVar1);
  return;
}


==================================================================

### FUNC 003f9874 (300 bytes) name=FUN_003f9874

void FUN_003f9874(long *param_1,long *param_2,undefined4 param_3)

{
  undefined *puVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = param_2[4];
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
  FUN_003d2728((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
                    /* try { // try from 003f98ec to 004f98ef has its CatchHandler @ 003f9960 */
  *param_1 = lVar2;
                    /* try { // try from 003f98f4 to 004f9927 has its CatchHandler @ 003f9974 */
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
                    /* catch() { ... } // from try @ 003f97c8 with catch @ 003f992c */
  param_1[2] = param_2[9];
  puVar1 = PTR_DAT_00501bb0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[3] = (long)(puVar1 + 0x10);
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
                    /* try { // try from 003f995c to 004f995f has its CatchHandler @ 003f9750 */
  *(undefined4 *)(param_1 + 0xb) = param_3;
                    /* catch() { ... } // from try @ 003f98ec with catch @ 003f9960 */
  param_1[3] = (long)&PTR_FUN_004fda10;
  lVar2 = *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 003f9784 with catch @ 003f9974
                       catch() { ... } // from try @ 003f97d0 with catch @ 003f9974
                       catch() { ... } // from try @ 003f98f4 with catch @ 003f9974 */
                    /* catch() { ... } // from try @ 003f9ab0 with catch @ 003f997c */
  param_1[0xc] = (long)(PTR_DAT_00501f30 + 0x18);
  FUN_003d2728((long)param_1 + lVar2,param_1 + 3);
  return;
}


==================================================================

### FUNC 003f9a08 (312 bytes) name=FUN_003f9a08

void FUN_003f9a08(undefined8 *param_1,undefined4 param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xd;
  FUN_003d347c(puVar1);
  param_1[0x28] = 0;
  *(undefined1 *)(param_1 + 0x29) = 0;
  *(undefined1 *)((long)param_1 + 0x149) = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  *param_1 = &DAT_004fdb88;
  param_1[1] = 0;
  param_1[0xd] = &DAT_004fdbb0;
  FUN_003d2728(puVar1,0);
                    /* try { // try from 003f9a88 to 004f9a8b has its CatchHandler @ 003f9aa0 */
  param_1[2] = &DAT_004fdb38;
  param_1[0xd] = &DAT_004fdb60;
  FUN_003d2728(puVar1,0);
                    /* catch() { ... } // from try @ 003f9a88 with catch @ 003f9aa0 */
  *param_1 = &PTR_FUN_004f8368;
                    /* try { // try from 003f9ab0 to 004f9ab3 has its CatchHandler @ 003f997c */
                    /* catch() { ... } // from try @ 003f9bf4 with catch @ 003f9ab4 */
  param_1[0xd] = &PTR_FUN_004f83b8;
  param_1[2] = &PTR_FUN_004f8390;
  puVar2 = PTR_DAT_00501bb0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[3] = puVar2 + 0x10;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  param_1[3] = &PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 0xb) = param_2;
  param_1[0xc] = PTR_DAT_00501f30 + 0x18;
  FUN_003d2728(puVar1);
  return;
}


==================================================================

### FUNC 003f9bb4 (356 bytes) name=FUN_003f9bb4

void FUN_003f9bb4(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
                    /* try { // try from 003f9bcc to 004f9bcf has its CatchHandler @ 003f9be4 */
  lVar1 = param_2[2];
                    /* catch() { ... } // from try @ 003f9bcc with catch @ 003f9be4 */
  lVar2 = *(long *)(lVar1 + -0x18);
  *param_1 = lVar1;
                    /* try { // try from 003f9bf4 to 004f9bf7 has its CatchHandler @ 003f9ab4 */
  *(long *)((long)param_1 + lVar2) = param_2[3];
                    /* catch() { ... } // from try @ 003f9d2c with catch @ 003f9bf8 */
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[4];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[5];
  FUN_003d2728((long)param_1 + lVar1 + 0x10,0);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)(PTR_DAT_00501bb0 + 0x10);
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  lVar1 = *param_3;
  param_1[3] = (long)&PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 0xb) = 0;
  FUN_004108cc(param_1 + 0xc,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 0xb) = param_4;
  uVar3 = 0;
  if ((param_4 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xc] + -0x18);
  }
  FUN_003f81cc(param_1 + 3,param_1[0xc],0,uVar3);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 3);
                    /* try { // try from 003f9d04 to 004f9d07 has its CatchHandler @ 003f9d1c */
  return;
}


==================================================================

### FUNC 003f9da4 (364 bytes) name=FUN_003f9da4

void FUN_003f9da4(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xd;
  FUN_003d347c(puVar1);
  param_1[0x28] = 0;
  *(undefined1 *)(param_1 + 0x29) = 0;
  *(undefined1 *)((long)param_1 + 0x149) = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  *param_1 = &DAT_004fdb88;
  param_1[1] = 0;
  param_1[0xd] = &DAT_004fdbb0;
  FUN_003d2728(puVar1,0);
  param_1[2] = &DAT_004fdb38;
  param_1[0xd] = &DAT_004fdb60;
                    /* try { // try from 003f9e3c to 004f9e3f has its CatchHandler @ 003f9e54 */
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f8368;
                    /* catch() { ... } // from try @ 003f9e3c with catch @ 003f9e54 */
  param_1[0xd] = &PTR_FUN_004f83b8;
                    /* try { // try from 003f9e64 to 004f9e67 has its CatchHandler @ 003f9d30 */
                    /* catch() { ... } // from try @ 003f9fa8 with catch @ 003f9e68 */
  param_1[2] = &PTR_FUN_004f8390;
  param_1[3] = PTR_DAT_00501bb0 + 0x10;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  lVar2 = *param_2;
  param_1[3] = &PTR_FUN_004fda10;
  *(undefined4 *)(param_1 + 0xb) = 0;
  FUN_004108cc(param_1 + 0xc,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 0xb) = param_3;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xc] + -0x18);
  }
  FUN_003f81cc(param_1 + 3,param_1[0xc],0,uVar3);
  FUN_003d2728(puVar1,param_1 + 3);
  return;
}


==================================================================

### FUNC 003f9fac (260 bytes) name=FUN_003f9fac

void FUN_003f9fac(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
                    /* catch() { ... } // from try @ 003fa0e0 with catch @ 003f9fac */
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[0xc];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)&PTR_FUN_004fda10;
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[3] = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 10);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar4 = param_2[4];
  param_1[2] = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18) + 0x10) = param_2[5];
  lVar4 = param_2[2];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  return;
}


==================================================================

### FUNC 003fa0b0 (8 bytes) name=FUN_003fa0b0

long FUN_003fa0b0(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 003fa0b8 (356 bytes) name=FUN_003fa0b8

long * FUN_003fa0b8(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
                    /* try { // try from 003fa0b8 to 004fa0bb has its CatchHandler @ 003fa0d0 */
                    /* catch() { ... } // from try @ 003fa0b8 with catch @ 003fa0d0 */
  local_8 = PTR_DAT_00501f30 + 0x18;
  *param_1 = (long)local_8;
                    /* try { // try from 003fa0e0 to 004fa0e3 has its CatchHandler @ 003f9fac */
  uVar6 = *(ulong *)(param_2 + 0x40);
                    /* catch() { ... } // from try @ 003fa218 with catch @ 003fa0e4 */
  if (uVar6 == 0) {
    FUN_004144f8(param_1,param_2 + 0x60);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x30);
  uVar3 = *(ulong *)(param_2 + 0x38);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar6,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
                    /* try { // try from 003fa218 to 004fa21b has its CatchHandler @ 003fa0e4 */
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
                    /* catch() { ... } // from try @ 003fa35c with catch @ 003fa21c */
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fa1c4;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f60f8(uVar3,uVar8,auStack_18);
    }
    FUN_004144f8(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501f30) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fa1c4;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003fa1c4:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003fa26c (80 bytes) name=FUN_003fa26c

void FUN_003fa26c(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00412fdc(param_1 + 0x60,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x58) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x60) + -0x18);
  }
  FUN_003f81cc(param_1 + 0x18,*(long *)(param_1 + 0x60),0,uVar1);
  return;
}


==================================================================

### FUNC 003fa2bc (116 bytes) name=FUN_003fa2bc

void FUN_003fa2bc(long *param_1,undefined4 param_2)

{
  undefined *puVar1;
  
  puVar1 = PTR_DAT_00501c78 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  *param_1 = (long)&PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 8) = param_2;
  param_1[9] = (long)(PTR_DAT_00501ab8 + 0x18);
  return;
}


==================================================================

### FUNC 003fa330 (356 bytes) name=FUN_003fa330

long * FUN_003fa330(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
                    /* try { // try from 003fa334 to 004fa337 has its CatchHandler @ 003fa34c */
                    /* catch() { ... } // from try @ 003fa334 with catch @ 003fa34c */
  local_8 = PTR_DAT_00501ab8 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x28);
                    /* try { // try from 003fa35c to 004fa35f has its CatchHandler @ 003fa21c */
  if (uVar6 == 0) {
    FUN_00418ce4(param_1,param_2 + 0x48);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x18);
  uVar3 = *(ulong *)(param_2 + 0x20);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar6,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fa43c;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar8,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fa43c;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003fa43c:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003fa4e4 (172 bytes) name=FUN_003fa4e4

void FUN_003fa4e4(long param_1,long param_2,long param_3,long param_4)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  
  lVar3 = *(long *)(param_1 + 0x48);
  uVar1 = *(uint *)(param_1 + 0x40) >> 3;
  lVar2 = param_2 + *(long *)(lVar3 + -0x18) * 4;
  if (param_2 == lVar3) {
    lVar3 = param_2 + *(long *)(lVar3 + -0x10) * 4;
  }
  else {
    lVar2 = lVar2 + param_3 * 4;
    param_3 = 0;
    lVar3 = lVar2;
  }
  if ((uVar1 & 1) != 0) {
    *(long *)(param_1 + 8) = param_2;
    *(long *)(param_1 + 0x10) = param_2 + param_3 * 4;
    *(long *)(param_1 + 0x18) = lVar2;
  }
  if ((*(uint *)(param_1 + 0x40) & 0x10) != 0) {
    *(long *)(param_1 + 0x28) = param_2;
    *(long *)(param_1 + 0x20) = param_2;
    *(long *)(param_1 + 0x30) = lVar3;
    for (; 0x7fffffff < param_4; param_4 = param_4 + -0x7fffffff) {
      param_2 = param_2 + 0x1fffffffc;
    }
    *(long *)(param_1 + 0x28) = param_2 + (long)(int)param_4 * 4;
    if ((uVar1 & 1) == 0) {
      *(long *)(param_1 + 8) = lVar2;
      *(long *)(param_1 + 0x10) = lVar2;
      *(long *)(param_1 + 0x18) = lVar2;
    }
  }
  return;
}


==================================================================

### FUNC 003fa590 (32 bytes) name=FUN_003fa590

void FUN_003fa590(long param_1,uint param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 0x40) = param_2;
  uVar1 = 0;
  if ((param_2 & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18);
  }
  FUN_003fa4e4(param_1,*(long *)(param_1 + 0x48),0,uVar1);
  return;
}


==================================================================

### FUNC 003fa5b0 (76 bytes) name=FUN_003fa5b0

void FUN_003fa5b0(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00416a24(param_1 + 0x48,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x40) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18);
  }
  FUN_003fa4e4(param_1,*(long *)(param_1 + 0x48),0,uVar1);
  return;
}


==================================================================

### FUNC 003fa5fc (100 bytes) name=FUN_003fa5fc

long FUN_003fa5fc(long param_1,long param_2,long param_3)

{
  if ((param_2 != 0) && (-1 < param_3)) {
    FUN_00416540(param_1 + 0x48,0,*(undefined8 *)(*(long *)(param_1 + 0x48) + -0x18),0);
    FUN_003fa4e4(param_1,param_2,param_3,0);
  }
  return param_1;
}


==================================================================

### FUNC 003fa660 (172 bytes) name=FUN_003fa660

void FUN_003fa660(long *param_1,long *param_2,uint param_3)

{
  undefined *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = PTR_DAT_00501c78 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar1;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  lVar2 = *param_2;
  *(undefined4 *)(param_1 + 8) = 0;
  uVar3 = *(undefined8 *)(lVar2 + -0x18);
  *param_1 = (long)&PTR_FUN_004fdc50;
  FUN_00417e14(param_1 + 9,lVar2,uVar3,auStack_8);
  *(uint *)(param_1 + 8) = param_3;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[9] + -0x18);
  }
  FUN_003fa4e4(param_1,param_1[9],0,uVar3);
  return;
}


==================================================================

### FUNC 003fa72c (504 bytes) name=FUN_003fa72c

int FUN_003fa72c(long param_1,int param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  int iVar4;
  int *piVar5;
  long lVar6;
  ulong uVar7;
  undefined *local_8;
  
  if ((*(uint *)(param_1 + 0x40) >> 4 & 1) == 0) {
    return -1;
  }
  if (param_2 == -1) {
    return 0;
  }
  piVar5 = *(int **)(param_1 + 0x28);
  lVar6 = *(long *)(*(long *)(param_1 + 0x48) + -0x10);
  bVar2 = piVar5 < *(int **)(param_1 + 0x30);
  if (bVar2 < (lVar6 == 0xffffffffffffffe)) {
    return -1;
  }
  if (bVar2) {
    *piVar5 = param_2;
    goto LAB_003fa78c;
  }
  uVar7 = lVar6 * 2;
  if (uVar7 < 0x200) {
    uVar7 = 0x200;
LAB_003fa7bc:
    uVar3 = uVar7;
  }
  else {
    uVar3 = 0xffffffffffffffe;
    if (uVar7 < 0xfffffffffffffff) goto LAB_003fa7bc;
  }
  local_8 = PTR_DAT_00501ab8 + 0x18;
  FUN_00418208(&local_8,uVar3);
  lVar6 = *(long *)(param_1 + 0x20);
  if (lVar6 != 0) {
    FUN_00416a24(&local_8,lVar6,*(long *)(param_1 + 0x30) - lVar6 >> 2);
  }
  lVar6 = *(long *)(local_8 + -0x18);
  uVar7 = lVar6 + 1;
  if ((*(ulong *)(local_8 + -0x10) < uVar7) || (0 < *(int *)(local_8 + -8))) {
    FUN_00418208(&local_8,uVar7);
    lVar6 = *(long *)(local_8 + -0x18);
  }
  *(int *)(local_8 + lVar6 * 4) = param_2;
  if (local_8 + -0x18 != PTR_DAT_00501ab8) {
    *(undefined4 *)(local_8 + -8) = 0;
    *(ulong *)(local_8 + -0x18) = uVar7;
    *(undefined4 *)(local_8 + uVar7 * 4) = 0;
  }
  FUN_00415584(param_1 + 0x48,&local_8);
  FUN_003fa4e4(param_1,*(undefined8 *)(param_1 + 0x48),
               *(long *)(param_1 + 0x10) - *(long *)(param_1 + 8) >> 2,
               *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20) >> 2);
  if (local_8 + -0x18 != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar4 + -1;
    }
    else {
      piVar5 = (int *)(local_8 + -8);
      do {
        iVar4 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete(local_8 + -0x18);
      piVar5 = *(int **)(param_1 + 0x28);
      goto LAB_003fa78c;
    }
  }
  piVar5 = *(int **)(param_1 + 0x28);
LAB_003fa78c:
  *(int **)(param_1 + 0x28) = piVar5 + 1;
  return param_2;
}


==================================================================

### FUNC 003fa94c (44 bytes) name=FUN_003fa94c

void FUN_003fa94c(long param_1)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(param_1 + 0x28);
  if ((uVar1 != 0) && (*(ulong *)(param_1 + 0x18) < uVar1)) {
    if ((*(uint *)(param_1 + 0x40) >> 3 & 1) == 0) {
      *(ulong *)(param_1 + 8) = uVar1;
      *(ulong *)(param_1 + 0x10) = uVar1;
    }
    *(ulong *)(param_1 + 0x18) = uVar1;
  }
  return;
}


==================================================================

### FUNC 003fa978 (64 bytes) name=FUN_003fa978

void FUN_003fa978(long param_1,long param_2,undefined8 param_3,long param_4)

{
  *(long *)(param_1 + 0x28) = param_2;
  *(long *)(param_1 + 0x20) = param_2;
  *(undefined8 *)(param_1 + 0x30) = param_3;
  for (; 0x7fffffff < param_4; param_4 = param_4 + -0x7fffffff) {
    param_2 = param_2 + 0x1fffffffc;
  }
  *(long *)(param_1 + 0x28) = param_2 + (long)(int)param_4 * 4;
  return;
}


==================================================================

### FUNC 003fa9b8 (236 bytes) name=FUN_003fa9b8

void FUN_003fa9b8(long *param_1,long *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)(PTR_DAT_00501c78 + 0x10);
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  param_1[2] = (long)&PTR_FUN_004fdc50;
  *(uint *)(param_1 + 10) = param_3 | 8;
  lVar1 = *(long *)(*param_1 + -0x18);
  param_1[0xb] = (long)(PTR_DAT_00501ab8 + 0x18);
  FUN_003d3008((long)param_1 + lVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 003faafc (268 bytes) name=FUN_003faafc

void FUN_003faafc(undefined8 *param_1,uint param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xc;
  FUN_003d347c(puVar1);
  param_1[0x27] = 0;
  *(undefined4 *)(param_1 + 0x28) = 0;
  *(undefined1 *)((long)param_1 + 0x144) = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  *param_1 = &DAT_004fdcd8;
  param_1[1] = 0;
  param_1[0xc] = &DAT_004fdd00;
  FUN_003d3008(puVar1,0);
  *param_1 = &LAB_004f8408;
  param_1[0xc] = &PTR_FUN_004f8430;
  puVar2 = PTR_DAT_00501c78;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[2] = puVar2 + 0x10;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  param_1[2] = &PTR_FUN_004fdc50;
  *(uint *)(param_1 + 10) = param_2 | 8;
  param_1[0xb] = PTR_DAT_00501ab8 + 0x18;
  FUN_003d3008(puVar1);
  return;
}


==================================================================

### FUNC 003fac6c (292 bytes) name=FUN_003fac6c

void FUN_003fac6c(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  lVar1 = param_2[1];
  lVar2 = *(long *)(lVar1 + -0x18);
  *param_1 = lVar1;
  *(long *)((long)param_1 + lVar2) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)(PTR_DAT_00501c78 + 0x10);
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  lVar1 = *param_3;
  param_1[2] = (long)&PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 10) = 0;
  FUN_00417e14(param_1 + 0xb,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 10) = param_4 | 8;
  uVar3 = 0;
  if ((param_4 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xb] + -0x18);
  }
  FUN_003fa4e4(param_1 + 2,param_1[0xb],0,uVar3);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 2);
  return;
}


==================================================================

### FUNC 003fae0c (320 bytes) name=FUN_003fae0c

void FUN_003fae0c(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xc;
  FUN_003d347c(puVar1);
  param_1[0x27] = 0;
  *(undefined4 *)(param_1 + 0x28) = 0;
  *(undefined1 *)((long)param_1 + 0x144) = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  *param_1 = &DAT_004fdcd8;
  param_1[1] = 0;
  param_1[0xc] = &DAT_004fdd00;
  FUN_003d3008(puVar1,0);
  *param_1 = &LAB_004f8408;
  param_1[0xc] = &PTR_FUN_004f8430;
  param_1[2] = PTR_DAT_00501c78 + 0x10;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  FUN_003ef168(param_1 + 9);
  lVar2 = *param_2;
  param_1[2] = &PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 10) = 0;
  FUN_00417e14(param_1 + 0xb,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 10) = param_3 | 8;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xb] + -0x18);
  }
  FUN_003fa4e4(param_1 + 2,param_1[0xb],0,uVar3);
  FUN_003d3008(puVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 003fafd4 (200 bytes) name=FUN_003fafd4

void FUN_003fafd4(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[0xb];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  param_1[2] = (long)&PTR_FUN_004fdc50;
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[2] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 9);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 003fb09c (8 bytes) name=FUN_003fb09c

long FUN_003fb09c(long param_1)

{
  return param_1 + 0x10;
}


==================================================================

### FUNC 003fb0a4 (356 bytes) name=FUN_003fb0a4

long * FUN_003fb0a4(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_8 = PTR_DAT_00501ab8 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x38);
  if (uVar6 == 0) {
    FUN_00418ce4(param_1,param_2 + 0x58);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x28);
  uVar3 = *(ulong *)(param_2 + 0x30);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar6,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fb1b0;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar8,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fb1b0;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003fb1b0:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003fb258 (80 bytes) name=FUN_003fb258

void FUN_003fb258(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00416a24(param_1 + 0x58,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x50) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x58) + -0x18);
  }
  FUN_003fa4e4(param_1 + 0x10,*(long *)(param_1 + 0x58),0,uVar1);
  return;
}


==================================================================

### FUNC 003fb2a8 (228 bytes) name=FUN_003fb2a8

void FUN_003fb2a8(long *param_1,long *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d3008((long)param_1 + lVar1,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)(PTR_DAT_00501c78 + 0x10);
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  param_1[1] = (long)&PTR_FUN_004fdc50;
  *(uint *)(param_1 + 9) = param_3 | 0x10;
  lVar1 = *(long *)(*param_1 + -0x18);
  param_1[10] = (long)(PTR_DAT_00501ab8 + 0x18);
  FUN_003d3008((long)param_1 + lVar1,param_1 + 1);
  return;
}


==================================================================

### FUNC 003fb3e4 (264 bytes) name=FUN_003fb3e4

void FUN_003fb3e4(undefined8 *param_1,uint param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xb;
  FUN_003d347c(puVar1);
  param_1[0x26] = 0;
  *(undefined4 *)(param_1 + 0x27) = 0;
  *(undefined1 *)((long)param_1 + 0x13c) = 0;
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  *param_1 = &DAT_004fdd28;
  param_1[0xb] = &DAT_004fdd50;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f8478;
  param_1[0xb] = &PTR_FUN_004f84a0;
  puVar2 = PTR_DAT_00501c78;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[1] = puVar2 + 0x10;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  param_1[1] = &PTR_FUN_004fdc50;
  *(uint *)(param_1 + 9) = param_2 | 0x10;
  param_1[10] = PTR_DAT_00501ab8 + 0x18;
  FUN_003d3008(puVar1);
  return;
}


==================================================================

### FUNC 003fb550 (284 bytes) name=FUN_003fb550

void FUN_003fb550(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  undefined8 uVar2;
  undefined1 auStack_8 [8];
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d3008((long)param_1 + lVar1,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)(PTR_DAT_00501c78 + 0x10);
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  lVar1 = *param_3;
  param_1[1] = (long)&PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 9) = 0;
  FUN_00417e14(param_1 + 10,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 9) = param_4 | 0x10;
  uVar2 = 0;
  if ((param_4 & 3) != 0) {
    uVar2 = *(undefined8 *)(param_1[10] + -0x18);
  }
  FUN_003fa4e4(param_1 + 1,param_1[10],0,uVar2);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 1);
  return;
}


==================================================================

### FUNC 003fb6e8 (316 bytes) name=FUN_003fb6e8

void FUN_003fb6e8(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xb;
  FUN_003d347c(puVar1);
  param_1[0x26] = 0;
  *(undefined4 *)(param_1 + 0x27) = 0;
  *(undefined1 *)((long)param_1 + 0x13c) = 0;
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  *param_1 = &DAT_004fdd28;
  param_1[0xb] = &DAT_004fdd50;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f8478;
  param_1[0xb] = &PTR_FUN_004f84a0;
  param_1[1] = PTR_DAT_00501c78 + 0x10;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_003ef168(param_1 + 8);
  lVar2 = *param_2;
  param_1[1] = &PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 9) = 0;
  FUN_00417e14(param_1 + 10,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 9) = param_3 | 0x10;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[10] + -0x18);
  }
  FUN_003fa4e4(param_1 + 1,param_1[10],0,uVar3);
  FUN_003d3008(puVar1,param_1 + 1);
  return;
}


==================================================================

### FUNC 003fb8ac (200 bytes) name=FUN_003fb8ac

void FUN_003fb8ac(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[10];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  param_1[1] = (long)&PTR_FUN_004fdc50;
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[1] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 8);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 003fb974 (8 bytes) name=FUN_003fb974

long FUN_003fb974(long param_1)

{
  return param_1 + 8;
}


==================================================================

### FUNC 003fb97c (356 bytes) name=FUN_003fb97c

long * FUN_003fb97c(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_8 = PTR_DAT_00501ab8 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x30);
  if (uVar6 == 0) {
    FUN_00418ce4(param_1,param_2 + 0x50);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x20);
  uVar3 = *(ulong *)(param_2 + 0x28);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar6,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fba88;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar8,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fba88;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003fba88:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003fbb30 (80 bytes) name=FUN_003fbb30

void FUN_003fbb30(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00416a24(param_1 + 0x50,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x48) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x50) + -0x18);
  }
  FUN_003fa4e4(param_1 + 8,*(long *)(param_1 + 0x50),0,uVar1);
  return;
}


==================================================================

### FUNC 003fbb80 (300 bytes) name=FUN_003fbb80

void FUN_003fbb80(long *param_1,long *param_2,undefined4 param_3)

{
  undefined *puVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = param_2[4];
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
  FUN_003d3008((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  puVar1 = PTR_DAT_00501c78;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[3] = (long)(puVar1 + 0x10);
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  *(undefined4 *)(param_1 + 0xb) = param_3;
  param_1[3] = (long)&PTR_FUN_004fdc50;
  lVar2 = *(long *)(*param_1 + -0x18);
  param_1[0xc] = (long)(PTR_DAT_00501ab8 + 0x18);
  FUN_003d3008((long)param_1 + lVar2,param_1 + 3);
  return;
}


==================================================================

### FUNC 003fbd14 (312 bytes) name=FUN_003fbd14

void FUN_003fbd14(undefined8 *param_1,undefined4 param_2)

{
  undefined8 *puVar1;
  undefined *puVar2;
  
  puVar1 = param_1 + 0xd;
  FUN_003d347c(puVar1);
  param_1[0x28] = 0;
  *(undefined4 *)(param_1 + 0x29) = 0;
  *(undefined1 *)((long)param_1 + 0x14c) = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  *param_1 = &DAT_004fddc8;
  param_1[1] = 0;
  param_1[0xd] = &DAT_004fddf0;
  FUN_003d3008(puVar1,0);
  param_1[2] = &DAT_004fdd78;
  param_1[0xd] = &DAT_004fdda0;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f8518;
  param_1[0xd] = &PTR_FUN_004f8568;
  param_1[2] = &PTR_FUN_004f8540;
  puVar2 = PTR_DAT_00501c78;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[3] = puVar2 + 0x10;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  param_1[3] = &PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 0xb) = param_2;
  param_1[0xc] = PTR_DAT_00501ab8 + 0x18;
  FUN_003d3008(puVar1);
  return;
}


==================================================================

### FUNC 003fbec0 (356 bytes) name=FUN_003fbec0

void FUN_003fbec0(long *param_1,long *param_2,long *param_3,uint param_4)

{
  long lVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  lVar1 = param_2[2];
  lVar2 = *(long *)(lVar1 + -0x18);
  *param_1 = lVar1;
  *(long *)((long)param_1 + lVar2) = param_2[3];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[4];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[5];
  FUN_003d3008((long)param_1 + lVar1 + 0x10,0);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)(PTR_DAT_00501c78 + 0x10);
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  lVar1 = *param_3;
  param_1[3] = (long)&PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 0xb) = 0;
  FUN_00417e14(param_1 + 0xc,lVar1,*(undefined8 *)(lVar1 + -0x18),auStack_8);
  *(uint *)(param_1 + 0xb) = param_4;
  uVar3 = 0;
  if ((param_4 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xc] + -0x18);
  }
  FUN_003fa4e4(param_1 + 3,param_1[0xc],0,uVar3);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 3);
  return;
}


==================================================================

### FUNC 003fc0b0 (364 bytes) name=FUN_003fc0b0

void FUN_003fc0b0(undefined8 *param_1,long *param_2,uint param_3)

{
  undefined8 *puVar1;
  long lVar2;
  undefined8 uVar3;
  undefined1 auStack_8 [8];
  
  puVar1 = param_1 + 0xd;
  FUN_003d347c(puVar1);
  param_1[0x28] = 0;
  *(undefined4 *)(param_1 + 0x29) = 0;
  *(undefined1 *)((long)param_1 + 0x14c) = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  *param_1 = &DAT_004fddc8;
  param_1[1] = 0;
  param_1[0xd] = &DAT_004fddf0;
  FUN_003d3008(puVar1,0);
  param_1[2] = &DAT_004fdd78;
  param_1[0xd] = &DAT_004fdda0;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f8518;
  param_1[0xd] = &PTR_FUN_004f8568;
  param_1[2] = &PTR_FUN_004f8540;
  param_1[3] = PTR_DAT_00501c78 + 0x10;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  FUN_003ef168(param_1 + 10);
  lVar2 = *param_2;
  param_1[3] = &PTR_FUN_004fdc50;
  *(undefined4 *)(param_1 + 0xb) = 0;
  FUN_00417e14(param_1 + 0xc,lVar2,*(undefined8 *)(lVar2 + -0x18),auStack_8);
  *(uint *)(param_1 + 0xb) = param_3;
  uVar3 = 0;
  if ((param_3 & 3) != 0) {
    uVar3 = *(undefined8 *)(param_1[0xc] + -0x18);
  }
  FUN_003fa4e4(param_1 + 3,param_1[0xc],0,uVar3);
  FUN_003d3008(puVar1,param_1 + 3);
  return;
}


==================================================================

### FUNC 003fc2b8 (260 bytes) name=FUN_003fc2b8

void FUN_003fc2b8(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  
  lVar4 = *param_2;
  *param_1 = lVar4;
  lVar5 = param_1[0xc];
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)&PTR_FUN_004fdc50;
  if ((undefined *)(lVar5 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar5 + -8);
      *(int *)(lVar5 + -8) = iVar3 + -1;
    }
    else {
      piVar6 = (int *)(lVar5 + -8);
      do {
        iVar3 = *piVar6;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
        if (bVar2) {
          *piVar6 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar5 + -0x18));
    }
  }
  param_1[3] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 10);
  lVar4 = param_2[1];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar4 = param_2[4];
  param_1[2] = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18) + 0x10) = param_2[5];
  lVar4 = param_2[2];
  *param_1 = lVar4;
  *(long *)((long)param_1 + *(long *)(lVar4 + -0x18)) = param_2[3];
  return;
}


==================================================================

### FUNC 003fc3bc (8 bytes) name=FUN_003fc3bc

long FUN_003fc3bc(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 003fc3c4 (356 bytes) name=FUN_003fc3c4

long * FUN_003fc3c4(long *param_1,long param_2)

{
  char cVar1;
  bool bVar2;
  ulong uVar3;
  undefined *puVar4;
  int iVar5;
  ulong uVar6;
  int *piVar7;
  ulong uVar8;
  undefined1 auStack_18 [16];
  undefined *local_8;
  
  local_8 = PTR_DAT_00501ab8 + 0x18;
  *param_1 = (long)local_8;
  uVar6 = *(ulong *)(param_2 + 0x40);
  if (uVar6 == 0) {
    FUN_00418ce4(param_1,param_2 + 0x60);
    return param_1;
  }
  uVar8 = *(ulong *)(param_2 + 0x30);
  uVar3 = *(ulong *)(param_2 + 0x38);
  if (uVar8 < uVar6) {
    if (uVar6 != uVar3) {
      if (uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar6,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fc4d0;
    }
  }
  else {
    if (uVar8 != uVar3) {
      if ((uVar3 == 0) && (uVar8 != 0)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f180("basic_string::_S_construct null not valid");
      }
      local_8 = (undefined *)FUN_003f61a0(uVar3,uVar8,auStack_18);
    }
    FUN_00418ce4(param_1,&local_8);
    puVar4 = local_8 + -0x18;
    if (puVar4 == PTR_DAT_00501ab8) {
      return param_1;
    }
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      piVar7 = (int *)(local_8 + -8);
      do {
        iVar5 = *piVar7;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
        if (bVar2) {
          *piVar7 = iVar5 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
      goto LAB_003fc4d0;
    }
  }
  iVar5 = *(int *)(local_8 + -8);
  *(int *)(local_8 + -8) = iVar5 + -1;
LAB_003fc4d0:
  if (iVar5 < 1) {
    operator_delete(puVar4);
  }
  return param_1;
}


==================================================================

### FUNC 003fc578 (80 bytes) name=FUN_003fc578

void FUN_003fc578(long param_1,long *param_2)

{
  undefined8 uVar1;
  
  FUN_00416a24(param_1 + 0x60,*param_2,*(undefined8 *)(*param_2 + -0x18));
  uVar1 = 0;
  if ((*(uint *)(param_1 + 0x58) & 3) != 0) {
    uVar1 = *(undefined8 *)(*(long *)(param_1 + 0x60) + -0x18);
  }
  FUN_003fa4e4(param_1 + 0x18,*(long *)(param_1 + 0x60),0,uVar1);
  return;
}


==================================================================

### FUNC 003fc5c8 (4 bytes) name=FUN_003fc5c8

void FUN_003fc5c8(void)

{
  return;
}


==================================================================

### FUNC 003fc5cc (4 bytes) name=FUN_003fc5cc

void FUN_003fc5cc(void)

{
  return;
}


==================================================================

### FUNC 003fc5d0 (12 bytes) name=FUN_003fc5d0

undefined1  [16] FUN_003fc5d0(void)

{
  return ZEXT816(0xffffffffffffffff);
}


==================================================================

### FUNC 003fc5dc (12 bytes) name=FUN_003fc5dc

undefined1  [16] FUN_003fc5dc(void)

{
  return ZEXT816(0xffffffffffffffff);
}


==================================================================

### FUNC 003fc5e8 (8 bytes) name=FUN_003fc5e8

undefined8 FUN_003fc5e8(void)

{
  return 0;
}


==================================================================

### FUNC 003fc5f0 (8 bytes) name=FUN_003fc5f0

undefined8 FUN_003fc5f0(void)

{
  return 0;
}


==================================================================

### FUNC 003fc5f8 (8 bytes) name=FUN_003fc5f8

undefined8 FUN_003fc5f8(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc600 (60 bytes) name=FUN_003fc600

ulong FUN_003fc600(long *param_1)

{
  ulong uVar1;
  
  uVar1 = (**(code **)(*param_1 + 0x48))();
  if ((int)uVar1 != -1) {
    uVar1 = (ulong)*(byte *)param_1[2];
    param_1[2] = (long)((byte *)param_1[2] + 1);
  }
  return uVar1;
}


==================================================================

### FUNC 003fc63c (8 bytes) name=FUN_003fc63c

undefined8 FUN_003fc63c(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc644 (8 bytes) name=FUN_003fc644

undefined8 FUN_003fc644(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc64c (4 bytes) name=FUN_003fc64c

void FUN_003fc64c(void)

{
  return;
}


==================================================================

### FUNC 003fc650 (4 bytes) name=FUN_003fc650

void FUN_003fc650(void)

{
  return;
}


==================================================================

### FUNC 003fc654 (12 bytes) name=FUN_003fc654

undefined1  [16] FUN_003fc654(void)

{
  return ZEXT816(0xffffffffffffffff);
}


==================================================================

### FUNC 003fc660 (12 bytes) name=FUN_003fc660

undefined1  [16] FUN_003fc660(void)

{
  return ZEXT816(0xffffffffffffffff);
}


==================================================================

### FUNC 003fc66c (8 bytes) name=FUN_003fc66c

undefined8 FUN_003fc66c(void)

{
  return 0;
}


==================================================================

### FUNC 003fc674 (8 bytes) name=FUN_003fc674

undefined8 FUN_003fc674(void)

{
  return 0;
}


==================================================================

### FUNC 003fc67c (8 bytes) name=FUN_003fc67c

undefined8 FUN_003fc67c(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc684 (8 bytes) name=FUN_003fc684

undefined8 FUN_003fc684(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc68c (8 bytes) name=FUN_003fc68c

undefined8 FUN_003fc68c(void)

{
  return 0xffffffff;
}


==================================================================

### FUNC 003fc694 (16 bytes) name=FUN_003fc694

void FUN_003fc694(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8590;
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003fc6a4 (16 bytes) name=FUN_003fc6a4

void FUN_003fc6a4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8610;
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 003fc6b4 (48 bytes) name=FUN_003fc6b4

void FUN_003fc6b4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8590;
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fc6e4 (48 bytes) name=FUN_003fc6e4

void FUN_003fc6e4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8610;
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fc714 (220 bytes) name=FUN_003fc714

long FUN_003fc714(long *param_1,undefined1 *param_2,long param_3)

{
  size_t __n;
  size_t sVar1;
  long lVar2;
  int iVar3;
  void *__src;
  long lVar4;
  
  lVar4 = 0;
  if (param_3 < 1) {
    return 0;
  }
  __src = (void *)param_1[2];
  lVar2 = 0;
  sVar1 = param_1[3] - (long)__src;
  while( true ) {
    if (sVar1 != 0) {
      __n = param_3 + lVar2;
      if ((long)sVar1 < param_3 + lVar2) {
        __n = sVar1;
      }
      lVar4 = lVar4 + __n;
      memcpy(param_2,__src,__n);
      param_1[2] = param_1[2] + __n;
      if (param_3 <= lVar4) {
        return lVar4;
      }
      param_2 = param_2 + __n;
    }
    iVar3 = (**(code **)(*param_1 + 0x50))(param_1);
    if (iVar3 == -1) {
      return lVar4;
    }
    lVar4 = lVar4 + 1;
    *param_2 = (char)iVar3;
    if (param_3 <= lVar4) break;
    __src = (void *)param_1[2];
    lVar2 = -lVar4;
    sVar1 = param_1[3] - (long)__src;
    param_2 = param_2 + 1;
  }
  return lVar4;
}


==================================================================

### FUNC 003fc7f0 (216 bytes) name=FUN_003fc7f0

long FUN_003fc7f0(long *param_1,undefined1 *param_2,long param_3)

{
  size_t __n;
  long lVar1;
  int iVar2;
  size_t sVar3;
  void *__dest;
  long lVar4;
  undefined1 *puVar5;
  
  lVar4 = 0;
  if (0 < param_3) {
    __dest = (void *)param_1[5];
    lVar1 = 0;
    sVar3 = param_1[6] - (long)__dest;
    puVar5 = param_2;
    if (sVar3 != 0) goto LAB_003fc880;
    while( true ) {
      do {
        param_2 = puVar5 + 1;
        iVar2 = (**(code **)(*param_1 + 0x68))(param_1,*puVar5);
        if (iVar2 == -1) {
          return lVar4;
        }
        lVar4 = lVar4 + 1;
        if (param_3 <= lVar4) {
          return lVar4;
        }
        __dest = (void *)param_1[5];
        lVar1 = -lVar4;
        sVar3 = param_1[6] - (long)__dest;
        puVar5 = param_2;
      } while (sVar3 == 0);
LAB_003fc880:
      __n = param_3 + lVar1;
      if ((long)sVar3 < param_3 + lVar1) {
        __n = sVar3;
      }
      lVar4 = lVar4 + __n;
      memcpy(__dest,param_2,__n);
      param_1[5] = param_1[5] + __n;
      if (param_3 <= lVar4) break;
      puVar5 = param_2 + __n;
    }
  }
  return lVar4;
}


==================================================================

### FUNC 003fc8c8 (204 bytes) name=FUN_003fc8c8

long FUN_003fc8c8(long *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  wchar_t wVar1;
  size_t sVar2;
  long lVar3;
  
  lVar3 = 0;
  if (0 < param_3) {
    do {
      sVar2 = param_1[3] - param_1[2] >> 2;
      __n = param_3 - lVar3;
      if ((long)sVar2 < param_3 - lVar3) {
        __n = sVar2;
      }
      if (sVar2 != 0) {
        lVar3 = lVar3 + __n;
        wmemcpy(param_2,(wchar_t *)param_1[2],__n);
        param_1[2] = param_1[2] + __n * 4;
        if (param_3 <= lVar3) {
          return lVar3;
        }
        param_2 = param_2 + __n;
      }
      wVar1 = (**(code **)(*param_1 + 0x50))(param_1);
      if (wVar1 == L'\xffffffff') {
        return lVar3;
      }
      lVar3 = lVar3 + 1;
      *param_2 = wVar1;
      param_2 = param_2 + 1;
    } while (lVar3 < param_3);
  }
  return lVar3;
}


==================================================================

### FUNC 003fc994 (200 bytes) name=FUN_003fc994

long FUN_003fc994(long *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  int iVar1;
  size_t sVar2;
  long lVar3;
  
  lVar3 = 0;
  if (param_3 < 1) {
    return 0;
  }
  while( true ) {
    sVar2 = param_1[6] - param_1[5] >> 2;
    __n = param_3 - lVar3;
    if ((long)sVar2 < param_3 - lVar3) {
      __n = sVar2;
    }
    if (sVar2 != 0) {
      lVar3 = lVar3 + __n;
      wmemcpy((wchar_t *)param_1[5],param_2,__n);
      param_1[5] = param_1[5] + __n * 4;
      if (param_3 <= lVar3) {
        return lVar3;
      }
      param_2 = param_2 + __n;
    }
    iVar1 = (**(code **)(*param_1 + 0x68))(param_1,*param_2);
    if (iVar1 == -1) break;
    lVar3 = lVar3 + 1;
    param_2 = param_2 + 1;
    if (param_3 <= lVar3) {
      return lVar3;
    }
  }
  return lVar3;
}


==================================================================

### FUNC 003fca5c (64 bytes) name=FUN_003fca5c

undefined4 FUN_003fca5c(long *param_1)

{
  int iVar1;
  undefined4 uVar2;
  
  iVar1 = (**(code **)(*param_1 + 0x48))();
  uVar2 = 0xffffffff;
  if (iVar1 != -1) {
    uVar2 = *(undefined4 *)param_1[2];
    param_1[2] = (long)((undefined4 *)param_1[2] + 1);
  }
  return uVar2;
}


==================================================================

### FUNC 003fca9c (96 bytes) name=FUN_003fca9c

undefined8 FUN_003fca9c(undefined8 param_1,long *param_2,undefined8 param_3)

{
  FUN_003ece1c(param_1,param_2 + 7);
  (**(code **)(*param_2 + 0x10))(param_2,param_3);
  FUN_003ed668(param_2 + 7,param_3);
  return param_1;
}


==================================================================

### FUNC 003fcb10 (40 bytes) name=FUN_003fcb10

undefined8 FUN_003fcb10(undefined8 param_1,long param_2)

{
  FUN_003ece1c(param_1,param_2 + 0x38);
  return param_1;
}


==================================================================

### FUNC 003fcb38 (28 bytes) name=FUN_003fcb38

void FUN_003fcb38(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003fcb54 (28 bytes) name=FUN_003fcb54

void FUN_003fcb54(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003fcb70 (28 bytes) name=FUN_003fcb70

void FUN_003fcb70(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 003fcb8c (28 bytes) name=FUN_003fcb8c

void FUN_003fcb8c(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 003fcba8 (52 bytes) name=FUN_003fcba8

long FUN_003fcba8(long *param_1)

{
  long lVar1;
  
  lVar1 = param_1[3] - param_1[2];
  if (lVar1 == 0) {
    lVar1 = (**(code **)(*param_1 + 0x38))();
  }
  return lVar1;
}


==================================================================

### FUNC 003fcbdc (120 bytes) name=FUN_003fcbdc

ulong FUN_003fcbdc(long *param_1)

{
  int iVar1;
  ulong uVar2;
  byte *pbVar3;
  byte *pbVar4;
  
  pbVar4 = (byte *)param_1[3];
  if ((byte *)param_1[2] < pbVar4) {
    pbVar3 = (byte *)param_1[2] + 1;
    param_1[2] = (long)pbVar3;
  }
  else {
    iVar1 = (**(code **)(*param_1 + 0x50))();
    if (iVar1 == -1) {
      return 0xffffffff;
    }
    pbVar3 = (byte *)param_1[2];
    pbVar4 = (byte *)param_1[3];
  }
  if (pbVar3 < pbVar4) {
    uVar2 = (ulong)*pbVar3;
  }
  else {
    uVar2 = (**(code **)(*param_1 + 0x48))(param_1);
  }
  return uVar2;
}


==================================================================

### FUNC 003fcc54 (64 bytes) name=FUN_003fcc54

ulong FUN_003fcc54(long *param_1)

{
  byte bVar1;
  ulong uVar2;
  byte *pbVar3;
  
  pbVar3 = (byte *)param_1[2];
  if (pbVar3 < (byte *)param_1[3]) {
    bVar1 = *pbVar3;
    param_1[2] = (long)(pbVar3 + 1);
    return (ulong)bVar1;
  }
  uVar2 = (**(code **)(*param_1 + 0x50))();
  return uVar2;
}


==================================================================

### FUNC 003fcc94 (56 bytes) name=FUN_003fcc94

ulong FUN_003fcc94(long *param_1)

{
  ulong uVar1;
  
  if ((byte *)param_1[2] < (byte *)param_1[3]) {
    return (ulong)*(byte *)param_1[2];
  }
  uVar1 = (**(code **)(*param_1 + 0x48))();
  return uVar1;
}


==================================================================

### FUNC 003fcccc (28 bytes) name=FUN_003fcccc

void FUN_003fcccc(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003fcce8 (80 bytes) name=FUN_003fcce8

ulong FUN_003fcce8(long *param_1,char param_2)

{
  ulong uVar1;
  
  uVar1 = param_1[2];
  if (((ulong)param_1[1] < uVar1) && (*(char *)(uVar1 - 1) == param_2)) {
    param_1[2] = uVar1 - 1;
    return (ulong)*(byte *)(uVar1 - 1);
  }
  uVar1 = (**(code **)(*param_1 + 0x58))();
  return uVar1;
}


==================================================================

### FUNC 003fcd38 (72 bytes) name=FUN_003fcd38

ulong FUN_003fcd38(long *param_1)

{
  ulong uVar1;
  
  uVar1 = param_1[2];
  if ((ulong)param_1[1] < uVar1) {
    param_1[2] = uVar1 - 1;
    return (ulong)*(byte *)(uVar1 - 1);
  }
  uVar1 = (**(code **)(*param_1 + 0x58))(param_1,0xffffffff);
  return uVar1;
}


==================================================================

### FUNC 003fcd80 (80 bytes) name=FUN_003fcd80

ulong FUN_003fcd80(long *param_1,byte param_2)

{
  ulong uVar1;
  
  if ((byte *)param_1[5] < (byte *)param_1[6]) {
    *(byte *)param_1[5] = param_2;
    param_1[5] = param_1[5] + 1;
    return (ulong)param_2;
  }
  uVar1 = (**(code **)(*param_1 + 0x68))();
  return uVar1;
}


==================================================================

### FUNC 003fcdd0 (28 bytes) name=FUN_003fcdd0

void FUN_003fcdd0(long *param_1)

{
  (**(code **)(*param_1 + 0x60))();
  return;
}


==================================================================

### FUNC 003fcdec (48 bytes) name=FUN_003fcdec

void FUN_003fcdec(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8590;
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  return;
}


==================================================================

### FUNC 003fce1c (8 bytes) name=FUN_003fce1c

undefined8 FUN_003fce1c(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 003fce24 (8 bytes) name=FUN_003fce24

undefined8 FUN_003fce24(long param_1)

{
  return *(undefined8 *)(param_1 + 0x10);
}


==================================================================

### FUNC 003fce2c (8 bytes) name=FUN_003fce2c

undefined8 FUN_003fce2c(long param_1)

{
  return *(undefined8 *)(param_1 + 0x18);
}


==================================================================

### FUNC 003fce34 (16 bytes) name=FUN_003fce34

void FUN_003fce34(long param_1,int param_2)

{
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 0x10) + (long)param_2;
  return;
}


==================================================================

### FUNC 003fce44 (16 bytes) name=FUN_003fce44

void FUN_003fce44(long param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  *(undefined8 *)(param_1 + 8) = param_2;
  *(undefined8 *)(param_1 + 0x10) = param_3;
  *(undefined8 *)(param_1 + 0x18) = param_4;
  return;
}


==================================================================

### FUNC 003fce54 (8 bytes) name=FUN_003fce54

undefined8 FUN_003fce54(long param_1)

{
  return *(undefined8 *)(param_1 + 0x20);
}


==================================================================

### FUNC 003fce5c (8 bytes) name=FUN_003fce5c

undefined8 FUN_003fce5c(long param_1)

{
  return *(undefined8 *)(param_1 + 0x28);
}


==================================================================

### FUNC 003fce64 (8 bytes) name=FUN_003fce64

undefined8 FUN_003fce64(long param_1)

{
  return *(undefined8 *)(param_1 + 0x30);
}


==================================================================

### FUNC 003fce6c (16 bytes) name=FUN_003fce6c

void FUN_003fce6c(long param_1,int param_2)

{
  *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + (long)param_2;
  return;
}


==================================================================

### FUNC 003fce7c (16 bytes) name=FUN_003fce7c

void FUN_003fce7c(long param_1,undefined8 param_2,undefined8 param_3)

{
  *(undefined8 *)(param_1 + 0x30) = param_3;
  *(undefined8 *)(param_1 + 0x28) = param_2;
  *(undefined8 *)(param_1 + 0x20) = param_2;
  return;
}


==================================================================

### FUNC 003fce8c (60 bytes) name=FUN_003fce8c

void FUN_003fce8c(long *param_1)

{
  if ((ulong)param_1[2] < (ulong)param_1[3]) {
    param_1[2] = param_1[2] + 1;
    return;
  }
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003fcec8 (16 bytes) name=FUN_003fcec8

void FUN_003fcec8(long param_1,long param_2)

{
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 0x10) + param_2;
  return;
}


==================================================================

### FUNC 003fced8 (16 bytes) name=FUN_003fced8

void FUN_003fced8(long param_1,long param_2)

{
  *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + param_2;
  return;
}


==================================================================

### FUNC 003fcee8 (80 bytes) name=FUN_003fcee8

void FUN_003fcee8(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  
  uVar4 = *(undefined8 *)(param_2 + 8);
  uVar3 = *(undefined8 *)(param_2 + 0x10);
  uVar2 = *(undefined8 *)(param_2 + 0x18);
  uVar1 = *(undefined8 *)(param_2 + 0x20);
  param_1[5] = *(undefined8 *)(param_2 + 0x28);
  *param_1 = &PTR_FUN_004f8590;
  param_1[6] = *(undefined8 *)(param_2 + 0x28);
  param_1[1] = uVar4;
  param_1[2] = uVar3;
  param_1[3] = uVar2;
  param_1[4] = uVar1;
  FUN_003ece1c(param_1 + 7,param_2 + 0x38);
  return;
}


==================================================================

### FUNC 003fcf38 (4 bytes) name=FUN_003fcf38

void FUN_003fcf38(void)

{
  return;
}


==================================================================

### FUNC 003fcf3c (24 bytes) name=FUN_003fcf3c

void FUN_003fcf3c(undefined8 param_1,undefined8 param_2)

{
  undefined1 uStack_1;
  
  FUN_003fd410(param_1,param_2,&uStack_1);
  return;
}


==================================================================

### FUNC 003fcf54 (96 bytes) name=FUN_003fcf54

undefined8 FUN_003fcf54(undefined8 param_1,long *param_2,undefined8 param_3)

{
  FUN_003ece1c(param_1,param_2 + 7);
  (**(code **)(*param_2 + 0x10))(param_2,param_3);
  FUN_003ed668(param_2 + 7,param_3);
  return param_1;
}


==================================================================

### FUNC 003fcfc8 (40 bytes) name=FUN_003fcfc8

undefined8 FUN_003fcfc8(undefined8 param_1,long param_2)

{
  FUN_003ece1c(param_1,param_2 + 0x38);
  return param_1;
}


==================================================================

### FUNC 003fcff0 (28 bytes) name=FUN_003fcff0

void FUN_003fcff0(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003fd00c (28 bytes) name=FUN_003fd00c

void FUN_003fd00c(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 003fd028 (28 bytes) name=FUN_003fd028

void FUN_003fd028(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 003fd044 (28 bytes) name=FUN_003fd044

void FUN_003fd044(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 003fd060 (56 bytes) name=FUN_003fd060

long FUN_003fd060(long *param_1)

{
  long lVar1;
  
  lVar1 = param_1[3] - param_1[2] >> 2;
  if (lVar1 == 0) {
    lVar1 = (**(code **)(*param_1 + 0x38))();
  }
  return lVar1;
}


==================================================================

### FUNC 003fd098 (116 bytes) name=FUN_003fd098

ulong FUN_003fd098(long *param_1)

{
  ulong uVar1;
  uint *puVar2;
  
  puVar2 = (uint *)param_1[2];
  if (puVar2 < (uint *)param_1[3]) {
    uVar1 = (ulong)*puVar2;
    param_1[2] = (long)(puVar2 + 1);
  }
  else {
    uVar1 = (**(code **)(*param_1 + 0x50))();
  }
  if ((int)uVar1 != -1) {
    if ((uint *)param_1[2] < (uint *)param_1[3]) {
      uVar1 = (ulong)*(uint *)param_1[2];
    }
    else {
      uVar1 = (**(code **)(*param_1 + 0x48))(param_1);
    }
  }
  return uVar1;
}


==================================================================

### FUNC 003fd10c (64 bytes) name=FUN_003fd10c

ulong FUN_003fd10c(long *param_1)

{
  uint uVar1;
  ulong uVar2;
  uint *puVar3;
  
  puVar3 = (uint *)param_1[2];
  if (puVar3 < (uint *)param_1[3]) {
    uVar1 = *puVar3;
    param_1[2] = (long)(puVar3 + 1);
    return (ulong)uVar1;
  }
  uVar2 = (**(code **)(*param_1 + 0x50))();
  return uVar2;
}


==================================================================

### FUNC 003fd14c (56 bytes) name=FUN_003fd14c

ulong FUN_003fd14c(long *param_1)

{
  ulong uVar1;
  
  if ((uint *)param_1[2] < (uint *)param_1[3]) {
    return (ulong)*(uint *)param_1[2];
  }
  uVar1 = (**(code **)(*param_1 + 0x48))();
  return uVar1;
}


==================================================================

### FUNC 003fd184 (28 bytes) name=FUN_003fd184

void FUN_003fd184(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003fd1a0 (80 bytes) name=FUN_003fd1a0

void FUN_003fd1a0(long *param_1,int param_2)

{
  ulong uVar1;
  
  uVar1 = param_1[2];
  if (((ulong)param_1[1] < uVar1) && (*(int *)(uVar1 - 4) == param_2)) {
    param_1[2] = uVar1 - 4;
    return;
  }
  (**(code **)(*param_1 + 0x58))(param_1);
  return;
}


==================================================================

### FUNC 003fd1f0 (72 bytes) name=FUN_003fd1f0

ulong FUN_003fd1f0(long *param_1)

{
  uint uVar1;
  ulong uVar2;
  
  uVar2 = param_1[2];
  if ((ulong)param_1[1] < uVar2) {
    uVar1 = *(uint *)(uVar2 - 4);
    param_1[2] = uVar2 - 4;
    return (ulong)uVar1;
  }
  uVar2 = (**(code **)(*param_1 + 0x58))(param_1,0xffffffff);
  return uVar2;
}


==================================================================

### FUNC 003fd238 (84 bytes) name=FUN_003fd238

undefined4 FUN_003fd238(long *param_1,undefined4 param_2)

{
  undefined4 uVar1;
  undefined4 *puVar2;
  
  puVar2 = (undefined4 *)param_1[5];
  if (puVar2 < (undefined4 *)param_1[6]) {
    *puVar2 = param_2;
    param_1[5] = (long)(puVar2 + 1);
    return param_2;
  }
  uVar1 = (**(code **)(*param_1 + 0x68))();
  return uVar1;
}


==================================================================

### FUNC 003fd28c (28 bytes) name=FUN_003fd28c

void FUN_003fd28c(long *param_1)

{
  (**(code **)(*param_1 + 0x60))();
  return;
}


==================================================================

### FUNC 003fd2a8 (48 bytes) name=FUN_003fd2a8

void FUN_003fd2a8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8610;
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(param_1 + 7);
  return;
}


==================================================================

### FUNC 003fd2d8 (8 bytes) name=FUN_003fd2d8

undefined8 FUN_003fd2d8(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 003fd2e0 (8 bytes) name=FUN_003fd2e0

undefined8 FUN_003fd2e0(long param_1)

{
  return *(undefined8 *)(param_1 + 0x10);
}


==================================================================

### FUNC 003fd2e8 (8 bytes) name=FUN_003fd2e8

undefined8 FUN_003fd2e8(long param_1)

{
  return *(undefined8 *)(param_1 + 0x18);
}


==================================================================

### FUNC 003fd2f0 (16 bytes) name=FUN_003fd2f0

void FUN_003fd2f0(long param_1,int param_2)

{
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 0x10) + (long)param_2 * 4;
  return;
}


==================================================================

### FUNC 003fd300 (16 bytes) name=FUN_003fd300

void FUN_003fd300(long param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  *(undefined8 *)(param_1 + 8) = param_2;
  *(undefined8 *)(param_1 + 0x10) = param_3;
  *(undefined8 *)(param_1 + 0x18) = param_4;
  return;
}


==================================================================

### FUNC 003fd310 (8 bytes) name=FUN_003fd310

undefined8 FUN_003fd310(long param_1)

{
  return *(undefined8 *)(param_1 + 0x20);
}


==================================================================

### FUNC 003fd318 (8 bytes) name=FUN_003fd318

undefined8 FUN_003fd318(long param_1)

{
  return *(undefined8 *)(param_1 + 0x28);
}


==================================================================

### FUNC 003fd320 (8 bytes) name=FUN_003fd320

undefined8 FUN_003fd320(long param_1)

{
  return *(undefined8 *)(param_1 + 0x30);
}


==================================================================

### FUNC 003fd328 (16 bytes) name=FUN_003fd328

void FUN_003fd328(long param_1,int param_2)

{
  *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + (long)param_2 * 4;
  return;
}


==================================================================

### FUNC 003fd338 (16 bytes) name=FUN_003fd338

void FUN_003fd338(long param_1,undefined8 param_2,undefined8 param_3)

{
  *(undefined8 *)(param_1 + 0x30) = param_3;
  *(undefined8 *)(param_1 + 0x28) = param_2;
  *(undefined8 *)(param_1 + 0x20) = param_2;
  return;
}


==================================================================

### FUNC 003fd348 (60 bytes) name=FUN_003fd348

void FUN_003fd348(long *param_1)

{
  if ((ulong)param_1[2] < (ulong)param_1[3]) {
    param_1[2] = param_1[2] + 4;
    return;
  }
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003fd384 (16 bytes) name=FUN_003fd384

void FUN_003fd384(long param_1,long param_2)

{
  *(long *)(param_1 + 0x10) = *(long *)(param_1 + 0x10) + param_2 * 4;
  return;
}


==================================================================

### FUNC 003fd394 (16 bytes) name=FUN_003fd394

void FUN_003fd394(long param_1,long param_2)

{
  *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + param_2 * 4;
  return;
}


==================================================================

### FUNC 003fd3a4 (80 bytes) name=FUN_003fd3a4

void FUN_003fd3a4(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  
  uVar4 = *(undefined8 *)(param_2 + 8);
  uVar3 = *(undefined8 *)(param_2 + 0x10);
  uVar2 = *(undefined8 *)(param_2 + 0x18);
  uVar1 = *(undefined8 *)(param_2 + 0x20);
  param_1[5] = *(undefined8 *)(param_2 + 0x28);
  *param_1 = &PTR_FUN_004f8610;
  param_1[6] = *(undefined8 *)(param_2 + 0x28);
  param_1[1] = uVar4;
  param_1[2] = uVar3;
  param_1[3] = uVar2;
  param_1[4] = uVar1;
  FUN_003ece1c(param_1 + 7,param_2 + 0x38);
  return;
}


==================================================================

### FUNC 003fd3f4 (4 bytes) name=FUN_003fd3f4

void FUN_003fd3f4(void)

{
  return;
}


==================================================================

### FUNC 003fd3f8 (24 bytes) name=FUN_003fd3f8

void FUN_003fd3f8(undefined8 param_1,undefined8 param_2)

{
  undefined1 uStack_1;
  
  FUN_003fd5a8(param_1,param_2,&uStack_1);
  return;
}


==================================================================

### FUNC 003fd410 (408 bytes) name=FUN_003fd410

long FUN_003fd410(long *param_1,long *param_2,undefined1 *param_3)

{
  uint uVar1;
  int iVar2;
  long lVar3;
  byte *pbVar4;
  undefined1 uVar5;
  byte *pbVar6;
  long lVar7;
  long lVar8;
  
  pbVar6 = (byte *)param_1[3];
  pbVar4 = (byte *)param_1[2];
  *param_3 = 1;
  if (pbVar4 < pbVar6) {
    uVar1 = (uint)*pbVar4;
  }
  else {
    uVar1 = (**(code **)(*param_1 + 0x48))();
    if (uVar1 == 0xffffffff) {
      return 0;
    }
    pbVar4 = (byte *)param_1[2];
    pbVar6 = (byte *)param_1[3];
  }
  uVar5 = (undefined1)uVar1;
  lVar7 = (long)pbVar6 - (long)pbVar4;
  lVar8 = 0;
  if (lVar7 < 2) goto LAB_003fd4b8;
LAB_003fd45c:
  lVar3 = (**(code **)(*param_2 + 0x60))(param_2,pbVar4,lVar7);
  lVar8 = lVar8 + lVar3;
  param_1[2] = param_1[2] + lVar3;
  if (lVar3 < lVar7) {
LAB_003fd544:
    *param_3 = 0;
    return lVar8;
  }
  do {
    uVar1 = (**(code **)(*param_1 + 0x48))(param_1);
    if (uVar1 == 0xffffffff) {
      return lVar8;
    }
    pbVar6 = (byte *)param_1[3];
    pbVar4 = (byte *)param_1[2];
    while( true ) {
      uVar5 = (undefined1)uVar1;
      lVar7 = (long)pbVar6 - (long)pbVar4;
      if (1 < lVar7) goto LAB_003fd45c;
LAB_003fd4b8:
      if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {
        *(undefined1 *)param_2[5] = uVar5;
        param_2[5] = param_2[5] + 1;
      }
      else {
        iVar2 = (**(code **)(*param_2 + 0x68))(param_2,uVar5);
        if (iVar2 == -1) goto LAB_003fd544;
      }
      lVar8 = lVar8 + 1;
      pbVar6 = (byte *)param_1[3];
      if ((byte *)param_1[2] < pbVar6) {
        pbVar4 = (byte *)param_1[2] + 1;
        param_1[2] = (long)pbVar4;
      }
      else {
        iVar2 = (**(code **)(*param_1 + 0x50))(param_1);
        if (iVar2 == -1) {
          return lVar8;
        }
        pbVar4 = (byte *)param_1[2];
        pbVar6 = (byte *)param_1[3];
      }
      if (pbVar6 <= pbVar4) break;
      uVar1 = (uint)*pbVar4;
      pbVar4 = (byte *)param_1[2];
    }
  } while( true );
}


==================================================================

### FUNC 003fd5a8 (352 bytes) name=FUN_003fd5a8

long FUN_003fd5a8(long *param_1,long *param_2,undefined1 *param_3)

{
  int iVar1;
  long lVar2;
  int *piVar3;
  int *piVar4;
  long lVar5;
  long lVar6;
  
  piVar4 = (int *)param_1[3];
  piVar3 = (int *)param_1[2];
  *param_3 = 1;
  if (piVar3 < piVar4) {
    iVar1 = *piVar3;
  }
  else {
    iVar1 = (**(code **)(*param_1 + 0x48))();
  }
  lVar6 = 0;
  do {
    while( true ) {
      if (iVar1 == -1) {
        return lVar6;
      }
      lVar5 = param_1[3] - param_1[2] >> 2;
      if (lVar5 < 2) break;
      lVar2 = (**(code **)(*param_2 + 0x60))(param_2,param_1[2],lVar5);
      lVar6 = lVar6 + lVar2;
      param_1[2] = param_1[2] + lVar2 * 4;
      if (lVar2 < lVar5) {
LAB_003fd6c4:
        *param_3 = 0;
        return lVar6;
      }
LAB_003fd620:
      iVar1 = (**(code **)(*param_1 + 0x48))(param_1);
    }
    piVar3 = (int *)param_2[5];
    if (piVar3 < (int *)param_2[6]) {
      *piVar3 = iVar1;
      param_2[5] = (long)(piVar3 + 1);
    }
    else {
      iVar1 = (**(code **)(*param_2 + 0x68))(param_2,iVar1);
      if (iVar1 == -1) goto LAB_003fd6c4;
    }
    piVar3 = (int *)param_1[2];
    lVar6 = lVar6 + 1;
    if (piVar3 < (int *)param_1[3]) {
      iVar1 = *piVar3;
      param_1[2] = (long)(piVar3 + 1);
    }
    else {
      iVar1 = (**(code **)(*param_1 + 0x50))(param_1);
    }
    if (iVar1 == -1) {
      return lVar6;
    }
    if ((int *)param_1[3] <= (int *)param_1[2]) goto LAB_003fd620;
    iVar1 = *(int *)param_1[2];
  } while( true );
}


==================================================================

### FUNC 003fd708 (196 bytes) name=FUN_003fd708

void FUN_003fd708(long param_1,char *param_2,size_t param_3,char *param_4,tm *param_5)

{
  char *__s;
  size_t sVar1;
  char *__locale;
  
  __s = setlocale(6,(char *)0x0);
  if (__s == (char *)0x0) {
    __locale = (char *)0x0;
  }
  else {
    sVar1 = strlen(__s);
    __locale = operator_new__(sVar1 + 1);
    memcpy(__locale,__s,sVar1 + 1);
    setlocale(6,*(char **)(param_1 + 0x20));
  }
  sVar1 = strftime(param_2,param_3,param_4,param_5);
  setlocale(6,__locale);
  if (__locale != (char *)0x0) {
    operator_delete__(__locale);
  }
  if (sVar1 == 0) {
    *param_2 = '\0';
  }
  return;
}


==================================================================

### FUNC 003fd7dc (792 bytes) name=FUN_003fd7dc

void FUN_003fd7dc(long param_1)

{
  undefined *puVar1;
  long *plVar2;
  
  plVar2 = *(long **)(param_1 + 0x10);
  if (plVar2 == (long *)0x0) {
    plVar2 = operator_new(400);
    *(undefined4 *)(plVar2 + 1) = 0;
    puVar1 = PTR_DAT_00501da8;
    plVar2[2] = 0;
    plVar2[3] = 0;
    *plVar2 = (long)(puVar1 + 0x10);
    plVar2[4] = 0;
    plVar2[5] = 0;
    plVar2[6] = 0;
    plVar2[7] = 0;
    plVar2[8] = 0;
    plVar2[9] = 0;
    plVar2[10] = 0;
    plVar2[0xb] = 0;
    plVar2[0xc] = 0;
    plVar2[0xd] = 0;
    plVar2[0xe] = 0;
    plVar2[0xf] = 0;
    plVar2[0x10] = 0;
    plVar2[0x11] = 0;
    plVar2[0x12] = 0;
    plVar2[0x13] = 0;
    plVar2[0x14] = 0;
    plVar2[0x15] = 0;
    plVar2[0x16] = 0;
    plVar2[0x17] = 0;
    plVar2[0x18] = 0;
    plVar2[0x19] = 0;
    plVar2[0x1a] = 0;
    plVar2[0x1b] = 0;
    plVar2[0x1c] = 0;
    plVar2[0x1d] = 0;
    plVar2[0x1e] = 0;
    plVar2[0x1f] = 0;
    plVar2[0x20] = 0;
    plVar2[0x21] = 0;
    plVar2[0x22] = 0;
    plVar2[0x23] = 0;
    plVar2[0x24] = 0;
    plVar2[0x25] = 0;
    plVar2[0x26] = 0;
    plVar2[0x27] = 0;
    plVar2[0x28] = 0;
    plVar2[0x29] = 0;
    plVar2[0x2a] = 0;
    plVar2[0x2b] = 0;
    plVar2[0x2c] = 0;
    plVar2[0x2d] = 0;
    plVar2[0x2e] = 0;
    plVar2[0x2f] = 0;
    plVar2[0x30] = 0;
    *(undefined1 *)(plVar2 + 0x31) = 0;
    *(long **)(param_1 + 0x10) = plVar2;
  }
  plVar2[6] = (long)&DAT_00472008;
  plVar2[7] = (long)&DAT_00472008;
  plVar2[10] = (long)&DAT_00472008;
  plVar2[0xb] = (long)"Sunday";
  plVar2[4] = (long)&DAT_00479978;
  plVar2[0xc] = (long)"Monday";
  plVar2[5] = (long)&DAT_00479978;
  plVar2[0xd] = (long)"Tuesday";
  plVar2[0xe] = (long)"Wednesday";
  plVar2[0xf] = (long)"Thursday";
  plVar2[8] = (long)&DAT_0047a318;
  plVar2[0x10] = (long)"Friday";
  plVar2[0x11] = (long)"Saturday";
  plVar2[0x12] = (long)&DAT_0047a378;
  plVar2[0x13] = (long)&DAT_0047a380;
  plVar2[0x14] = (long)&DAT_0047a388;
  plVar2[0x15] = (long)&DAT_0047a390;
  plVar2[2] = (long)&DAT_00479960;
  plVar2[0x16] = (long)&DAT_0047a398;
  plVar2[3] = (long)&DAT_00479960;
  plVar2[0x17] = (long)&DAT_0047a3a0;
  plVar2[0x18] = (long)&DAT_0047a3a8;
  plVar2[9] = (long)&DAT_0047a320;
  plVar2[0x19] = (long)"January";
  plVar2[0x1d] = (long)&DAT_0047a3d8;
  plVar2[0x1a] = (long)"February";
  plVar2[0x1b] = (long)"March";
  plVar2[0x1c] = (long)"April";
  plVar2[0x1e] = (long)&DAT_0047a3e0;
  plVar2[0x1f] = (long)&DAT_0047a3e8;
  plVar2[0x20] = (long)"August";
  plVar2[0x21] = (long)"September";
  plVar2[0x22] = (long)"October";
  plVar2[0x23] = (long)"November";
  plVar2[0x29] = (long)&DAT_0047a3d8;
  plVar2[0x24] = (long)"December";
  plVar2[0x25] = (long)&DAT_0047a430;
  plVar2[0x26] = (long)&DAT_0047a438;
  plVar2[0x27] = (long)&DAT_0047a440;
  plVar2[0x28] = (long)&DAT_0047a448;
  plVar2[0x2a] = (long)&DAT_0047a450;
  plVar2[0x2b] = (long)&DAT_0047a458;
  plVar2[0x2c] = (long)&DAT_0047a460;
  plVar2[0x2d] = (long)&DAT_0047a468;
  plVar2[0x2e] = (long)&DAT_0047a470;
  plVar2[0x2f] = (long)&DAT_0047a478;
  plVar2[0x30] = (long)&DAT_0047a480;
  return;
}


==================================================================

### FUNC 003fdaf4 (224 bytes) name=FUN_003fdaf4

void FUN_003fdaf4(long param_1,wchar_t *param_2,size_t param_3,wchar_t *param_4,tm *param_5)

{
  char *__s;
  size_t sVar1;
  char *__locale;
  
  __s = setlocale(6,(char *)0x0);
  if (__s == (char *)0x0) {
    sVar1 = wcsftime(param_2,param_3,param_4,param_5);
    setlocale(6,(char *)0x0);
  }
  else {
    sVar1 = strlen(__s);
    __locale = operator_new__(sVar1 + 1);
    memcpy(__locale,__s,sVar1 + 1);
    setlocale(6,*(char **)(param_1 + 0x20));
    sVar1 = wcsftime(param_2,param_3,param_4,param_5);
    setlocale(6,__locale);
    operator_delete__(__locale);
  }
  if (sVar1 == 0) {
    *param_2 = L'\0';
  }
  return;
}


==================================================================

### FUNC 003fdbe4 (792 bytes) name=FUN_003fdbe4

void FUN_003fdbe4(long param_1)

{
  undefined *puVar1;
  long *plVar2;
  
  plVar2 = *(long **)(param_1 + 0x10);
  if (plVar2 == (long *)0x0) {
    plVar2 = operator_new(400);
    *(undefined4 *)(plVar2 + 1) = 0;
    puVar1 = PTR_DAT_00501930;
    plVar2[2] = 0;
    plVar2[3] = 0;
    *plVar2 = (long)(puVar1 + 0x10);
    plVar2[4] = 0;
    plVar2[5] = 0;
    plVar2[6] = 0;
    plVar2[7] = 0;
    plVar2[8] = 0;
    plVar2[9] = 0;
    plVar2[10] = 0;
    plVar2[0xb] = 0;
    plVar2[0xc] = 0;
    plVar2[0xd] = 0;
    plVar2[0xe] = 0;
    plVar2[0xf] = 0;
    plVar2[0x10] = 0;
    plVar2[0x11] = 0;
    plVar2[0x12] = 0;
    plVar2[0x13] = 0;
    plVar2[0x14] = 0;
    plVar2[0x15] = 0;
    plVar2[0x16] = 0;
    plVar2[0x17] = 0;
    plVar2[0x18] = 0;
    plVar2[0x19] = 0;
    plVar2[0x1a] = 0;
    plVar2[0x1b] = 0;
    plVar2[0x1c] = 0;
    plVar2[0x1d] = 0;
    plVar2[0x1e] = 0;
    plVar2[0x1f] = 0;
    plVar2[0x20] = 0;
    plVar2[0x21] = 0;
    plVar2[0x22] = 0;
    plVar2[0x23] = 0;
    plVar2[0x24] = 0;
    plVar2[0x25] = 0;
    plVar2[0x26] = 0;
    plVar2[0x27] = 0;
    plVar2[0x28] = 0;
    plVar2[0x29] = 0;
    plVar2[0x2a] = 0;
    plVar2[0x2b] = 0;
    plVar2[0x2c] = 0;
    plVar2[0x2d] = 0;
    plVar2[0x2e] = 0;
    plVar2[0x2f] = 0;
    plVar2[0x30] = 0;
    *(undefined1 *)(plVar2 + 0x31) = 0;
    *(long **)(param_1 + 0x10) = plVar2;
  }
  plVar2[6] = (long)&DAT_00479f78;
  plVar2[7] = (long)&DAT_00479f78;
  plVar2[10] = (long)&DAT_00479f78;
  plVar2[0xb] = (long)&DAT_00479f90;
  plVar2[4] = (long)&DAT_00479f48;
  plVar2[0xc] = (long)L"Monday";
  plVar2[5] = (long)&DAT_00479f48;
  plVar2[0xd] = (long)L"Tuesday";
  plVar2[0xe] = (long)L"Wednesday";
  plVar2[0xf] = (long)L"Thursday";
  plVar2[8] = (long)&DAT_00479f70;
  plVar2[0x10] = (long)L"Friday";
  plVar2[0x11] = (long)&LAB_0047a060;
  plVar2[0x12] = (long)&DAT_0047a088;
  plVar2[0x13] = (long)&DAT_0047a098;
  plVar2[0x14] = (long)&DAT_0047a0a8;
  plVar2[0x15] = (long)&DAT_0047a0b8;
  plVar2[2] = (long)&DAT_00479f20;
  plVar2[0x16] = (long)&DAT_0047a0c8;
  plVar2[3] = (long)&DAT_00479f20;
  plVar2[0x17] = (long)&DAT_0047a0d8;
  plVar2[0x18] = (long)&DAT_0047a0e8;
  plVar2[9] = (long)&DAT_00479f80;
  plVar2[0x19] = (long)L"January";
  plVar2[0x1d] = (long)&DAT_0047a170;
  plVar2[0x1a] = (long)L"February";
  plVar2[0x1b] = (long)L"March";
  plVar2[0x1c] = (long)L"April";
  plVar2[0x1e] = (long)&DAT_0047a180;
  plVar2[0x1f] = (long)&DAT_0047a198;
  plVar2[0x20] = (long)L"August";
  plVar2[0x21] = (long)L"September";
  plVar2[0x22] = (long)L"October";
  plVar2[0x23] = (long)L"November";
  plVar2[0x29] = (long)&DAT_0047a170;
  plVar2[0x24] = (long)&DAT_0047a240;
  plVar2[0x25] = (long)&DAT_0047a268;
  plVar2[0x26] = (long)&DAT_0047a278;
  plVar2[0x27] = (long)&DAT_0047a288;
  plVar2[0x28] = (long)&DAT_0047a298;
  plVar2[0x2a] = (long)&DAT_0047a2a8;
  plVar2[0x2b] = (long)&DAT_0047a2b8;
  plVar2[0x2c] = (long)&DAT_0047a2c8;
  plVar2[0x2d] = (long)&DAT_0047a2d8;
  plVar2[0x2e] = (long)&DAT_0047a2e8;
  plVar2[0x2f] = (long)&DAT_0047a2f8;
  plVar2[0x30] = (long)&DAT_0047a308;
  return;
}


==================================================================

### FUNC 003fdefc (96 bytes) name=FUN_003fdefc

void FUN_003fdefc(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)(param_1 + 0x18);
  lVar2 = *(long *)(lVar1 + 0x10);
  *(long *)(param_1 + 0x18) = lVar2;
  if (lVar2 != 0) {
    *(long *)(lVar2 + 8) = param_1;
  }
  *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(param_1 + 8);
  if (*param_2 != param_1) {
    lVar2 = *(long *)(param_1 + 8);
    if (*(long *)(lVar2 + 0x10) == param_1) {
      *(long *)(lVar2 + 0x10) = lVar1;
    }
    else {
      *(long *)(lVar2 + 0x18) = lVar1;
    }
    *(long *)(lVar1 + 0x10) = param_1;
    *(long *)(param_1 + 8) = lVar1;
    return;
  }
  *param_2 = lVar1;
  *(long *)(lVar1 + 0x10) = param_1;
  *(long *)(param_1 + 8) = lVar1;
  return;
}


==================================================================

### FUNC 003fdf5c (96 bytes) name=FUN_003fdf5c

void FUN_003fdf5c(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)(param_1 + 0x10);
  lVar2 = *(long *)(lVar1 + 0x18);
  *(long *)(param_1 + 0x10) = lVar2;
  if (lVar2 != 0) {
    *(long *)(lVar2 + 8) = param_1;
  }
  *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(param_1 + 8);
  if (*param_2 != param_1) {
    lVar2 = *(long *)(param_1 + 8);
    if (*(long *)(lVar2 + 0x18) == param_1) {
      *(long *)(lVar2 + 0x18) = lVar1;
    }
    else {
      *(long *)(lVar2 + 0x10) = lVar1;
    }
    *(long *)(lVar1 + 0x18) = param_1;
    *(long *)(param_1 + 8) = lVar1;
    return;
  }
  *param_2 = lVar1;
  *(long *)(lVar1 + 0x18) = param_1;
  *(long *)(param_1 + 8) = lVar1;
  return;
}


==================================================================

### FUNC 003fdfbc (96 bytes) name=FUN_003fdfbc

long FUN_003fdfbc(long param_1)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *(long *)(param_1 + 0x18);
  if (*(long *)(param_1 + 0x18) != 0) {
    do {
      lVar1 = lVar2;
      lVar2 = *(long *)(lVar1 + 0x10);
    } while (lVar2 != 0);
    return lVar1;
  }
  lVar2 = *(long *)(param_1 + 8);
  if (param_1 == *(long *)(lVar2 + 0x18)) {
    do {
      lVar1 = lVar2;
      lVar2 = *(long *)(lVar1 + 8);
    } while (*(long *)(lVar2 + 0x18) == lVar1);
    if (lVar2 == *(long *)(lVar1 + 0x18)) {
      lVar2 = lVar1;
    }
    return lVar2;
  }
  return lVar2;
}


==================================================================

### FUNC 003fe01c (96 bytes) name=FUN_003fe01c

long FUN_003fe01c(long param_1)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *(long *)(param_1 + 0x18);
  if (*(long *)(param_1 + 0x18) != 0) {
    do {
      lVar1 = lVar2;
      lVar2 = *(long *)(lVar1 + 0x10);
    } while (lVar2 != 0);
    return lVar1;
  }
  lVar2 = *(long *)(param_1 + 8);
  if (param_1 == *(long *)(lVar2 + 0x18)) {
    do {
      lVar1 = lVar2;
      lVar2 = *(long *)(lVar1 + 8);
    } while (*(long *)(lVar2 + 0x18) == lVar1);
    if (lVar2 == *(long *)(lVar1 + 0x18)) {
      lVar2 = lVar1;
    }
    return lVar2;
  }
  return lVar2;
}


==================================================================

### FUNC 003fe07c (112 bytes) name=FUN_003fe07c

long FUN_003fe07c(int *param_1)

{
  bool bVar1;
  long lVar2;
  long lVar3;
  
  if ((*param_1 == 0) && (param_1 == *(int **)(*(long *)(param_1 + 2) + 8))) {
    return *(long *)(param_1 + 6);
  }
  lVar3 = *(long *)(param_1 + 4);
  if (*(long *)(param_1 + 4) != 0) {
    do {
      lVar2 = lVar3;
      lVar3 = *(long *)(lVar2 + 0x18);
    } while (lVar3 != 0);
    return lVar2;
  }
  lVar3 = *(long *)(param_1 + 2);
  if (param_1 != *(int **)(lVar3 + 0x10)) {
    return lVar3;
  }
  do {
    lVar2 = *(long *)(lVar3 + 8);
    bVar1 = *(long *)(lVar2 + 0x10) == lVar3;
    lVar3 = lVar2;
  } while (bVar1);
  return lVar2;
}


==================================================================

### FUNC 003fe0ec (112 bytes) name=FUN_003fe0ec

long FUN_003fe0ec(int *param_1)

{
  bool bVar1;
  long lVar2;
  long lVar3;
  
  if ((*param_1 == 0) && (param_1 == *(int **)(*(long *)(param_1 + 2) + 8))) {
    return *(long *)(param_1 + 6);
  }
  lVar3 = *(long *)(param_1 + 4);
  if (*(long *)(param_1 + 4) != 0) {
    do {
      lVar2 = lVar3;
      lVar3 = *(long *)(lVar2 + 0x18);
    } while (lVar3 != 0);
    return lVar2;
  }
  lVar3 = *(long *)(param_1 + 2);
  if (param_1 != *(int **)(lVar3 + 0x10)) {
    return lVar3;
  }
  do {
    lVar2 = *(long *)(lVar3 + 8);
    bVar1 = *(long *)(lVar2 + 0x10) == lVar3;
    lVar3 = lVar2;
  } while (bVar1);
  return lVar2;
}


==================================================================

### FUNC 003fe15c (96 bytes) name=FUN_003fe15c

void FUN_003fe15c(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)(param_1 + 0x18);
  lVar2 = *(long *)(lVar1 + 0x10);
  *(long *)(param_1 + 0x18) = lVar2;
  if (lVar2 != 0) {
    *(long *)(lVar2 + 8) = param_1;
  }
  *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(param_1 + 8);
  if (param_1 != *param_2) {
    lVar2 = *(long *)(param_1 + 8);
    if (param_1 == *(long *)(lVar2 + 0x10)) {
      *(long *)(lVar2 + 0x10) = lVar1;
    }
    else {
      *(long *)(lVar2 + 0x18) = lVar1;
    }
    *(long *)(lVar1 + 0x10) = param_1;
    *(long *)(param_1 + 8) = lVar1;
    return;
  }
  *param_2 = lVar1;
  *(long *)(lVar1 + 0x10) = param_1;
  *(long *)(param_1 + 8) = lVar1;
  return;
}


==================================================================

### FUNC 003fe1bc (96 bytes) name=FUN_003fe1bc

void FUN_003fe1bc(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar1 = *(long *)(param_1 + 0x10);
  lVar2 = *(long *)(lVar1 + 0x18);
  *(long *)(param_1 + 0x10) = lVar2;
  if (lVar2 != 0) {
    *(long *)(lVar2 + 8) = param_1;
  }
  *(undefined8 *)(lVar1 + 8) = *(undefined8 *)(param_1 + 8);
  if (param_1 != *param_2) {
    lVar2 = *(long *)(param_1 + 8);
    if (param_1 == *(long *)(lVar2 + 0x18)) {
      *(long *)(lVar2 + 0x18) = lVar1;
    }
    else {
      *(long *)(lVar2 + 0x10) = lVar1;
    }
    *(long *)(lVar1 + 0x18) = param_1;
    *(long *)(param_1 + 8) = lVar1;
    return;
  }
  *param_2 = lVar1;
  *(long *)(lVar1 + 0x18) = param_1;
  *(long *)(param_1 + 8) = lVar1;
  return;
}


==================================================================

### FUNC 003fe21c (448 bytes) name=FUN_003fe21c

void FUN_003fe21c(char param_1,int *param_2,long param_3,long param_4)

{
  long lVar1;
  int *piVar2;
  long lVar3;
  int *piVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  
  *(long *)(param_2 + 2) = param_3;
  param_2[4] = 0;
  param_2[5] = 0;
  param_2[6] = 0;
  param_2[7] = 0;
  lVar1 = param_4 + 8;
  *param_2 = 0;
  if (param_1 == '\0') {
    *(int **)(param_3 + 0x18) = param_2;
    if (*(long *)(param_4 + 0x18) == param_3) {
      *(int **)(param_4 + 0x18) = param_2;
    }
  }
  else {
    *(int **)(param_3 + 0x10) = param_2;
    if (param_3 == param_4) {
      *(int **)(param_4 + 8) = param_2;
      *(int **)(param_4 + 0x18) = param_2;
    }
    else if (*(long *)(param_4 + 0x10) == param_3) {
      *(int **)(param_4 + 0x10) = param_2;
    }
  }
  piVar4 = *(int **)(param_4 + 8);
  do {
    while( true ) {
      if ((param_2 == piVar4) || (piVar7 = *(int **)(param_2 + 2), *piVar7 != 0)) {
        *piVar4 = 1;
        return;
      }
      piVar6 = *(int **)(piVar7 + 2);
      piVar2 = *(int **)(piVar6 + 4);
      if (piVar7 == piVar2) break;
      if ((piVar2 == (int *)0x0) || (*piVar2 != 0)) {
        piVar4 = piVar7;
        if (*(int **)(piVar7 + 4) == param_2) {
          FUN_003fdf5c(piVar7,lVar1);
          piVar4 = *(int **)(piVar7 + 2);
          param_2 = piVar7;
        }
        lVar5 = *(long *)(piVar6 + 6);
        *piVar4 = 1;
        *piVar6 = 0;
        lVar3 = *(long *)(lVar5 + 0x10);
        *(long *)(piVar6 + 6) = lVar3;
        if (lVar3 != 0) {
          *(int **)(lVar3 + 8) = piVar6;
        }
        *(undefined8 *)(lVar5 + 8) = *(undefined8 *)(piVar6 + 2);
        if (piVar6 == *(int **)(param_4 + 8)) {
          *(long *)(param_4 + 8) = lVar5;
        }
        else {
          lVar3 = *(long *)(piVar6 + 2);
          if (piVar6 == *(int **)(lVar3 + 0x10)) {
            *(long *)(lVar3 + 0x10) = lVar5;
          }
          else {
            *(long *)(lVar3 + 0x18) = lVar5;
          }
        }
        *(int **)(lVar5 + 0x10) = piVar6;
        *(long *)(piVar6 + 2) = lVar5;
        piVar4 = *(int **)(param_4 + 8);
      }
      else {
LAB_003fe2a4:
        *piVar7 = 1;
        *piVar2 = 1;
        *piVar6 = 0;
        param_2 = piVar6;
      }
    }
    piVar2 = *(int **)(piVar6 + 6);
    if ((piVar2 != (int *)0x0) && (*piVar2 == 0)) goto LAB_003fe2a4;
    piVar4 = piVar7;
    if (*(int **)(piVar7 + 6) == param_2) {
      FUN_003fdefc(piVar7,lVar1);
      piVar4 = *(int **)(piVar7 + 2);
      param_2 = piVar7;
    }
    *piVar4 = 1;
    *piVar6 = 0;
    FUN_003fdf5c(piVar6,lVar1);
    piVar4 = *(int **)(param_4 + 8);
  } while( true );
}


==================================================================

### FUNC 003fe3dc (944 bytes) name=FUN_003fe3dc

int * FUN_003fe3dc(int *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  
  piVar4 = *(int **)(param_1 + 4);
  if (piVar4 == (int *)0x0) {
    piVar7 = *(int **)(param_1 + 6);
  }
  else {
    piVar5 = *(int **)(param_1 + 6);
    piVar6 = piVar5;
    piVar7 = piVar4;
    if (piVar5 != (int *)0x0) {
      do {
        piVar1 = piVar6;
        piVar6 = *(int **)(piVar1 + 4);
      } while (*(int **)(piVar1 + 4) != (int *)0x0);
      piVar7 = *(int **)(piVar1 + 6);
      if (param_1 != piVar1) {
        *(int **)(piVar4 + 2) = piVar1;
        *(int **)(piVar1 + 4) = piVar4;
        piVar4 = piVar1;
        if (piVar5 != piVar1) {
          piVar4 = *(int **)(piVar1 + 2);
          piVar6 = piVar4;
          if (piVar7 != (int *)0x0) {
            *(int **)(piVar7 + 2) = piVar4;
            piVar6 = *(int **)(piVar1 + 2);
          }
          *(int **)(piVar6 + 4) = piVar7;
          *(int **)(piVar1 + 6) = piVar5;
          *(int **)(*(long *)(param_1 + 6) + 8) = piVar1;
        }
        if (*(int **)(param_2 + 8) == param_1) {
          *(int **)(param_2 + 8) = piVar1;
          lVar3 = *(long *)(param_1 + 2);
        }
        else {
          lVar3 = *(long *)(param_1 + 2);
          if (*(int **)(lVar3 + 0x10) == param_1) {
            *(int **)(lVar3 + 0x10) = piVar1;
          }
          else {
            *(int **)(lVar3 + 0x18) = piVar1;
          }
        }
        iVar2 = *piVar1;
        *piVar1 = *param_1;
        *(long *)(piVar1 + 2) = lVar3;
        *param_1 = iVar2;
        goto LAB_003fe498;
      }
    }
  }
  piVar4 = *(int **)(param_1 + 2);
  if (piVar7 != (int *)0x0) {
    *(int **)(piVar7 + 2) = piVar4;
  }
  if (*(int **)(param_2 + 8) == param_1) {
    *(int **)(param_2 + 8) = piVar7;
  }
  else {
    lVar3 = *(long *)(param_1 + 2);
    if (*(int **)(lVar3 + 0x10) == param_1) {
      *(int **)(lVar3 + 0x10) = piVar7;
    }
    else {
      *(int **)(lVar3 + 0x18) = piVar7;
    }
  }
  if (*(int **)(param_2 + 0x10) == param_1) {
    piVar6 = piVar7;
    if (*(long *)(param_1 + 6) == 0) {
      *(undefined8 *)(param_2 + 0x10) = *(undefined8 *)(param_1 + 2);
    }
    else {
      do {
        piVar5 = piVar6;
        piVar6 = *(int **)(piVar5 + 4);
      } while (piVar6 != (int *)0x0);
      *(int **)(param_2 + 0x10) = piVar5;
    }
  }
  if (*(int **)(param_2 + 0x18) == param_1) {
    piVar6 = piVar7;
    if (*(long *)(param_1 + 4) == 0) {
      *(undefined8 *)(param_2 + 0x18) = *(undefined8 *)(param_1 + 2);
      iVar2 = *param_1;
    }
    else {
      do {
        piVar5 = piVar6;
        piVar6 = *(int **)(piVar5 + 6);
      } while (piVar6 != (int *)0x0);
      iVar2 = *param_1;
      *(int **)(param_2 + 0x18) = piVar5;
    }
  }
  else {
    iVar2 = *param_1;
  }
LAB_003fe498:
  lVar3 = param_2 + 8;
  if (iVar2 == 0) {
    return param_1;
  }
LAB_003fe4e0:
  do {
    piVar6 = piVar7;
    if (*(int **)(param_2 + 8) == piVar7) {
LAB_003fe594:
      if (piVar6 == (int *)0x0) {
        return param_1;
      }
LAB_003fe598:
      *piVar6 = 1;
      return param_1;
    }
    if ((piVar7 != (int *)0x0) && (*piVar7 != 1)) goto LAB_003fe598;
    piVar6 = *(int **)(piVar4 + 4);
    if (piVar6 == piVar7) {
      piVar7 = *(int **)(piVar4 + 6);
      if (*piVar7 == 0) {
        *piVar7 = 1;
        *piVar4 = 0;
        FUN_003fdefc(piVar4,lVar3);
        piVar7 = *(int **)(piVar4 + 6);
      }
      piVar5 = *(int **)(piVar7 + 4);
      if ((piVar5 == (int *)0x0) || (*piVar5 == 1)) {
        piVar1 = *(int **)(piVar7 + 6);
        if ((piVar1 == (int *)0x0) || (*piVar1 == 1)) {
          *piVar7 = 0;
          piVar7 = piVar4;
          piVar4 = *(int **)(piVar4 + 2);
          goto LAB_003fe4e0;
        }
LAB_003fe56c:
        *piVar7 = *piVar4;
        *piVar4 = 1;
LAB_003fe580:
        *piVar1 = 1;
      }
      else {
        piVar1 = *(int **)(piVar7 + 6);
        if ((piVar1 != (int *)0x0) && (*piVar1 != 1)) goto LAB_003fe56c;
        *piVar5 = 1;
        *piVar7 = 0;
        FUN_003fdf5c(piVar7,lVar3);
        piVar1 = *(int **)(*(int **)(piVar4 + 6) + 6);
        **(int **)(piVar4 + 6) = *piVar4;
        *piVar4 = 1;
        if (piVar1 != (int *)0x0) goto LAB_003fe580;
      }
      FUN_003fdefc(piVar4,lVar3);
      goto LAB_003fe594;
    }
    if (*piVar6 == 0) {
      *piVar6 = 1;
      *piVar4 = 0;
      FUN_003fdf5c(piVar4,lVar3);
      piVar6 = *(int **)(piVar4 + 4);
    }
    piVar5 = *(int **)(piVar6 + 6);
    if ((piVar5 != (int *)0x0) && (*piVar5 != 1)) {
      piVar1 = *(int **)(piVar6 + 4);
      if ((piVar1 == (int *)0x0) || (*piVar1 == 1)) {
        *piVar5 = 1;
        *piVar6 = 0;
        FUN_003fdefc(piVar6,lVar3);
        piVar1 = *(int **)(*(int **)(piVar4 + 4) + 4);
        **(int **)(piVar4 + 4) = *piVar4;
        *piVar4 = 1;
        if (piVar1 != (int *)0x0) goto LAB_003fe5e8;
      }
      else {
LAB_003fe5d8:
        *piVar6 = *piVar4;
        *piVar4 = 1;
LAB_003fe5e8:
        *piVar1 = 1;
      }
      FUN_003fdf5c(piVar4,lVar3);
      piVar6 = piVar7;
      if (piVar7 == (int *)0x0) {
        return param_1;
      }
      goto LAB_003fe598;
    }
    piVar1 = *(int **)(piVar6 + 4);
    if ((piVar1 != (int *)0x0) && (*piVar1 != 1)) goto LAB_003fe5d8;
    piVar5 = *(int **)(piVar4 + 2);
    *piVar6 = 0;
    piVar7 = piVar4;
    piVar4 = piVar5;
  } while( true );
}


==================================================================

### FUNC 003fe78c (52 bytes) name=FUN_003fe78c

int FUN_003fe78c(int *param_1,int *param_2)

{
  int iVar1;
  
  if (param_1 != (int *)0x0) {
    iVar1 = 0;
    while( true ) {
      if (*param_1 == 1) {
        iVar1 = iVar1 + 1;
      }
      if (param_1 == param_2) break;
      param_1 = *(int **)(param_1 + 2);
    }
    return iVar1;
  }
  return 0;
}


==================================================================

### FUNC 003fe7c0 (12 bytes) name=FUN_003fe7c0

undefined4 FUN_003fe7c0(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x24);
}


==================================================================

### FUNC 003fe7cc (12 bytes) name=FUN_003fe7cc

undefined4 FUN_003fe7cc(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x28);
}


==================================================================

### FUNC 003fe7d8 (12 bytes) name=FUN_003fe7d8

undefined4 FUN_003fe7d8(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60);
}


==================================================================

### FUNC 003fe7e4 (12 bytes) name=FUN_003fe7e4

undefined4 FUN_003fe7e4(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 100);
}


==================================================================

### FUNC 003fe7f0 (12 bytes) name=FUN_003fe7f0

undefined4 FUN_003fe7f0(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x68);
}


==================================================================

### FUNC 003fe7fc (12 bytes) name=FUN_003fe7fc

undefined4 FUN_003fe7fc(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x24);
}


==================================================================

### FUNC 003fe808 (12 bytes) name=FUN_003fe808

undefined4 FUN_003fe808(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x28);
}


==================================================================

### FUNC 003fe814 (12 bytes) name=FUN_003fe814

undefined4 FUN_003fe814(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x60);
}


==================================================================

### FUNC 003fe820 (12 bytes) name=FUN_003fe820

undefined4 FUN_003fe820(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 100);
}


==================================================================

### FUNC 003fe82c (12 bytes) name=FUN_003fe82c

undefined4 FUN_003fe82c(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x68);
}


==================================================================

### FUNC 003fe838 (16 bytes) name=FUN_003fe838

void FUN_003fe838(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8880;
  FUN_003f054c();
  return;
}


==================================================================

### FUNC 003fe848 (16 bytes) name=FUN_003fe848

void FUN_003fe848(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f88f0;
  FUN_003f0494();
  return;
}


==================================================================

### FUNC 003fe858 (12 bytes) name=FUN_003fe858

undefined4 FUN_003fe858(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x48);
}


==================================================================

### FUNC 003fe864 (12 bytes) name=FUN_003fe864

undefined4 FUN_003fe864(long param_1)

{
  return *(undefined4 *)(*(long *)(param_1 + 0x10) + 0x4c);
}


==================================================================

### FUNC 003fe870 (16 bytes) name=FUN_003fe870

void FUN_003fe870(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8710;
  FUN_003f0a40();
  return;
}


==================================================================

### FUNC 003fe880 (8 bytes) name=FUN_003fe880

undefined8 FUN_003fe880(void)

{
  return 0;
}


==================================================================

### FUNC 003fe888 (8 bytes) name=FUN_003fe888

undefined8 FUN_003fe888(void)

{
  return 0;
}


==================================================================

### FUNC 003fe890 (4 bytes) name=FUN_003fe890

void FUN_003fe890(void)

{
  return;
}


==================================================================

### FUNC 003fe894 (36 bytes) name=FUN_003fe894

ulong FUN_003fe894(undefined8 param_1,uint *param_2,uint *param_3)

{
  ulong uVar1;
  
  uVar1 = 0;
  for (; param_2 < param_3; param_2 = param_2 + 1) {
    uVar1 = (ulong)*param_2 + (uVar1 >> 0x39 | uVar1 << 7);
  }
  return uVar1;
}


==================================================================

### FUNC 003fe8b8 (16 bytes) name=FUN_003fe8b8

void FUN_003fe8b8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8960;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe8c8 (16 bytes) name=FUN_003fe8c8

void FUN_003fe8c8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8990;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe8d8 (16 bytes) name=FUN_003fe8d8

void FUN_003fe8d8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8760;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe8e8 (16 bytes) name=FUN_003fe8e8

void FUN_003fe8e8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f87e0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe8f8 (16 bytes) name=FUN_003fe8f8

void FUN_003fe8f8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8840;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe908 (16 bytes) name=FUN_003fe908

void FUN_003fe908(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f89c0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe918 (16 bytes) name=FUN_003fe918

void FUN_003fe918(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f89c0;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe928 (16 bytes) name=FUN_003fe928

void FUN_003fe928(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8a20;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe938 (16 bytes) name=FUN_003fe938

void FUN_003fe938(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8a20;
  FUN_003ecdfc();
  return;
}


==================================================================

### FUNC 003fe948 (48 bytes) name=FUN_003fe948

undefined8 FUN_003fe948(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fe978 (48 bytes) name=FUN_003fe978

undefined8 FUN_003fe978(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fe9a8 (48 bytes) name=FUN_003fe9a8

undefined8 FUN_003fe9a8(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_00410a08(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x10),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fe9d8 (48 bytes) name=FUN_003fe9d8

undefined8 FUN_003fe9d8(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x30),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fea08 (48 bytes) name=FUN_003fea08

undefined8 FUN_003fea08(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x40),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fea38 (48 bytes) name=FUN_003fea38

undefined8 FUN_003fea38(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x50),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fea68 (48 bytes) name=FUN_003fea68

undefined8 FUN_003fea68(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x30),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003fea98 (48 bytes) name=FUN_003fea98

undefined8 FUN_003fea98(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x40),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003feac8 (48 bytes) name=FUN_003feac8

undefined8 FUN_003feac8(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x50),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003feaf8 (48 bytes) name=FUN_003feaf8

undefined8 FUN_003feaf8(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x28),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003feb28 (48 bytes) name=FUN_003feb28

undefined8 FUN_003feb28(undefined8 param_1,long param_2)

{
  undefined1 auStack_8 [8];
  
  FUN_0041786c(param_1,*(undefined8 *)(*(long *)(param_2 + 0x10) + 0x38),auStack_8);
  return param_1;
}


==================================================================

### FUNC 003feb58 (100 bytes) name=FUN_003feb58

void FUN_003feb58(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8ac0;
  if (*(char *)(param_1 + 0x13) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[6] != (void *)0x0) {
      operator_delete__((void *)param_1[6]);
    }
    if ((void *)param_1[8] != (void *)0x0) {
      operator_delete__((void *)param_1[8]);
    }
    if ((void *)param_1[10] != (void *)0x0) {
      operator_delete__((void *)param_1[10]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003febbc (100 bytes) name=FUN_003febbc

void FUN_003febbc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8ae0;
  if (*(char *)(param_1 + 0x13) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[6] != (void *)0x0) {
      operator_delete__((void *)param_1[6]);
    }
    if ((void *)param_1[8] != (void *)0x0) {
      operator_delete__((void *)param_1[8]);
    }
    if ((void *)param_1[10] != (void *)0x0) {
      operator_delete__((void *)param_1[10]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003fec20 (88 bytes) name=FUN_003fec20

void FUN_003fec20(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8b00;
  if (*(char *)(param_1 + 0x29) != '\0') {
    if ((void *)param_1[2] != (void *)0x0) {
      operator_delete__((void *)param_1[2]);
    }
    if ((void *)param_1[5] != (void *)0x0) {
      operator_delete__((void *)param_1[5]);
    }
    if ((void *)param_1[7] != (void *)0x0) {
      operator_delete__((void *)param_1[7]);
    }
  }
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003fec78 (36 bytes) name=FUN_003fec78

void FUN_003fec78(void *param_1)

{
  FUN_003feb58();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fec9c (36 bytes) name=FUN_003fec9c

void FUN_003fec9c(void *param_1)

{
  FUN_003febbc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fecc0 (48 bytes) name=FUN_003fecc0

void FUN_003fecc0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8880;
  FUN_003f054c();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fecf0 (48 bytes) name=FUN_003fecf0

void FUN_003fecf0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f88f0;
  FUN_003f0494();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fed20 (48 bytes) name=FUN_003fed20

void FUN_003fed20(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8960;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fed50 (48 bytes) name=FUN_003fed50

void FUN_003fed50(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8990;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fed80 (36 bytes) name=FUN_003fed80

void FUN_003fed80(void *param_1)

{
  FUN_003fec20();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003feda4 (48 bytes) name=FUN_003feda4

void FUN_003feda4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8710;
  FUN_003f0a40();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fedd4 (48 bytes) name=FUN_003fedd4

void FUN_003fedd4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8760;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fee04 (48 bytes) name=FUN_003fee04

void FUN_003fee04(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f87e0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fee34 (48 bytes) name=FUN_003fee34

void FUN_003fee34(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8840;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fee64 (48 bytes) name=FUN_003fee64

void FUN_003fee64(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f89c0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fee94 (48 bytes) name=FUN_003fee94

void FUN_003fee94(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f89c0;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003feec4 (48 bytes) name=FUN_003feec4

void FUN_003feec4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8a20;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003feef4 (48 bytes) name=FUN_003feef4

void FUN_003feef4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8a20;
  FUN_003ecdfc();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fef24 (48 bytes) name=FUN_003fef24

void FUN_003fef24(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe390;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003fef68 (56 bytes) name=FUN_003fef68

void FUN_003fef68(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe390;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003fefb4 (48 bytes) name=FUN_003fefb4

void FUN_003fefb4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe390;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003feff8 (56 bytes) name=FUN_003feff8

void FUN_003feff8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe390;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ff044 (48 bytes) name=FUN_003ff044

void FUN_003ff044(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8690;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003ff088 (56 bytes) name=FUN_003ff088

void FUN_003ff088(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8690;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ff0d4 (48 bytes) name=FUN_003ff0d4

void FUN_003ff0d4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8690;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003ff118 (56 bytes) name=FUN_003ff118

void FUN_003ff118(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8690;
  FUN_0041a634(param_1 + 2);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ff164 (100 bytes) name=FUN_003ff164

void FUN_003ff164(undefined8 *param_1)

{
  void *pvVar1;
  void *pvVar2;
  
  pvVar2 = (void *)param_1[4];
  *param_1 = &PTR_FUN_004f8860;
  pvVar1 = (void *)FUN_003ed4bc();
  if ((pvVar2 != pvVar1) && (pvVar2 != (void *)0x0)) {
    operator_delete__(pvVar2);
  }
  if ((long *)param_1[2] != (long *)0x0) {
    (**(code **)(*(long *)param_1[2] + 8))();
  }
  FUN_0041a634(param_1 + 3);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 003ff1dc (36 bytes) name=FUN_003ff1dc

void FUN_003ff1dc(void *param_1)

{
  FUN_003ff164();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ff200 (16 bytes) name=FUN_003ff200

void FUN_003ff200(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe430;
  FUN_0041a718();
  return;
}


==================================================================

### FUNC 003ff210 (48 bytes) name=FUN_003ff210

void FUN_003ff210(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe430;
  FUN_0041a718();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 003ff240 (28 bytes) name=FUN_003ff240

void FUN_003ff240(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003ff25c (68 bytes) name=FUN_003ff25c

void FUN_003ff25c(void *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar2 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 003ff2a0 (696 bytes) name=FUN_003ff2a0

uint FUN_003ff2a0(undefined8 param_1,wchar_t *param_2,wchar_t *param_3,wchar_t *param_4,
                 wchar_t *param_5)

{
  char cVar1;
  bool bVar2;
  wchar_t *__s;
  uint uVar3;
  size_t *psVar4;
  size_t sVar5;
  wchar_t wVar6;
  wchar_t *__s1;
  size_t sVar7;
  wchar_t *pwVar8;
  wchar_t *pwVar9;
  long lVar10;
  undefined1 auStack_8 [8];
  
  if (param_2 == param_3) {
    __s1 = (wchar_t *)(PTR_DAT_00501ab8 + 0x18);
  }
  else {
    if ((param_2 == (wchar_t *)0x0) && (param_3 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    sVar7 = (long)param_3 - (long)param_2 >> 2;
    psVar4 = (size_t *)FUN_004164a8(sVar7,0,auStack_8);
    __s1 = (wchar_t *)(psVar4 + 3);
    if (sVar7 == 1) {
      *(wchar_t *)(psVar4 + 3) = *param_2;
    }
    else {
      wmemcpy(__s1,param_2,sVar7);
    }
    if (psVar4 != (size_t *)PTR_DAT_00501ab8) {
      *(undefined4 *)(psVar4 + 2) = 0;
      *psVar4 = sVar7;
      *(undefined4 *)((long)psVar4 + ((long)param_3 - (long)param_2) + 0x18) = 0;
    }
  }
  if (param_4 == param_5) {
    pwVar9 = (wchar_t *)(PTR_DAT_00501ab8 + 0x18);
    sVar7 = *(size_t *)PTR_DAT_00501ab8;
  }
  else {
    if ((param_4 == (wchar_t *)0x0) && (param_5 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    sVar7 = (long)param_5 - (long)param_4 >> 2;
    psVar4 = (size_t *)FUN_004164a8(sVar7,0,auStack_8);
    pwVar9 = (wchar_t *)(psVar4 + 3);
    if (sVar7 == 1) {
      *(wchar_t *)(psVar4 + 3) = *param_4;
    }
    else {
      wmemcpy(pwVar9,param_4,sVar7);
    }
    if (psVar4 == (size_t *)PTR_DAT_00501ab8) {
      sVar7 = *psVar4;
    }
    else {
      *(undefined4 *)(psVar4 + 2) = 0;
      *psVar4 = sVar7;
      *(undefined4 *)((long)psVar4 + ((long)param_5 - (long)param_4) + 0x18) = 0;
    }
  }
  lVar10 = *(long *)(__s1 + -6);
  uVar3 = FUN_0041ad3c(param_1,__s1,pwVar9);
  pwVar8 = __s1;
  __s = pwVar9;
  do {
    if (uVar3 != 0) {
      if (pwVar9 + -6 != (wchar_t *)PTR_DAT_00501ab8) {
LAB_003ff46c:
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          wVar6 = pwVar9[-2];
          pwVar9[-2] = wVar6 + L'\xffffffff';
        }
        else {
          pwVar8 = pwVar9 + -2;
          do {
            wVar6 = *pwVar8;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(pwVar8,0x10);
            if (bVar2) {
              *pwVar8 = wVar6 + L'\xffffffff';
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        if (wVar6 < L'\x01') {
          operator_delete(pwVar9 + -6);
        }
      }
LAB_003ff40c:
      if (__s1 + -6 != (wchar_t *)PTR_DAT_00501ab8) {
        if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
          wVar6 = __s1[-2];
          __s1[-2] = wVar6 + L'\xffffffff';
        }
        else {
          pwVar9 = __s1 + -2;
          do {
            wVar6 = *pwVar9;
            cVar1 = '\x01';
            bVar2 = (bool)ExclusiveMonitorPass(pwVar9,0x10);
            if (bVar2) {
              *pwVar9 = wVar6 + L'\xffffffff';
              cVar1 = ExclusiveMonitorsStatus();
            }
          } while (cVar1 != '\0');
        }
        if (wVar6 < L'\x01') {
          operator_delete(__s1 + -6);
        }
      }
      return uVar3;
    }
    sVar5 = wcslen(pwVar8);
    pwVar8 = pwVar8 + sVar5;
    sVar5 = wcslen(__s);
    if (__s + sVar5 == pwVar9 + sVar7) {
      uVar3 = (uint)(pwVar8 != __s1 + lVar10);
LAB_003ff3fc:
      if (pwVar9 + -6 != (wchar_t *)PTR_DAT_00501ab8) goto LAB_003ff46c;
      goto LAB_003ff40c;
    }
    if (pwVar8 == __s1 + lVar10) {
      uVar3 = 0xffffffff;
      goto LAB_003ff3fc;
    }
    pwVar8 = pwVar8 + 1;
    __s = __s + sVar5 + 1;
    uVar3 = FUN_0041ad3c(param_1,pwVar8,__s);
  } while( true );
}


==================================================================

### FUNC 003ff580 (608 bytes) name=FUN_003ff580

long * FUN_003ff580(long *param_1,undefined8 param_2,wchar_t *param_3,wchar_t *param_4)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  wchar_t wVar4;
  size_t *psVar5;
  ulong uVar6;
  void *pvVar7;
  long lVar8;
  size_t sVar9;
  wchar_t *__s;
  long lVar10;
  ulong uVar11;
  wchar_t *pwVar12;
  wchar_t *__s1;
  undefined1 auStack_8 [8];
  
  puVar3 = PTR_DAT_00501ab8;
  __s1 = (wchar_t *)(PTR_DAT_00501ab8 + 0x18);
  *param_1 = (long)__s1;
  if (param_3 == param_4) {
    uVar11 = 0;
    pwVar12 = __s1 + *(long *)puVar3;
  }
  else {
    if ((param_3 == (wchar_t *)0x0) && (param_4 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    lVar10 = (long)param_4 - (long)param_3;
    sVar9 = lVar10 >> 2;
    psVar5 = (size_t *)FUN_004164a8(sVar9,0,auStack_8);
    __s1 = (wchar_t *)(psVar5 + 3);
    if (sVar9 == 1) {
      *(wchar_t *)(psVar5 + 3) = *param_3;
    }
    else {
      wmemcpy(__s1,param_3,sVar9);
    }
    if (psVar5 == (size_t *)PTR_DAT_00501ab8) {
      sVar9 = *psVar5;
    }
    else {
      *(undefined4 *)(psVar5 + 2) = 0;
      *psVar5 = sVar9;
      *(undefined4 *)((long)psVar5 + lVar10 + 0x18) = 0;
    }
    uVar11 = lVar10 >> 1;
    pwVar12 = __s1 + sVar9;
    uVar6 = 0xffffffffffffffff;
    if (0x1fc0000000000000 < uVar11) goto LAB_003ff634;
  }
  uVar6 = uVar11 << 2;
LAB_003ff634:
  pvVar7 = operator_new__(uVar6);
  __s = __s1;
  while( true ) {
    uVar6 = FUN_0041ad64(param_2,pvVar7,__s,uVar11);
    if (uVar11 <= uVar6) {
      uVar11 = uVar6 + 1;
      operator_delete__(pvVar7);
      uVar6 = uVar11 * 4;
      if (0x1fc0000000000000 < uVar11) {
        uVar6 = 0xffffffffffffffff;
      }
      pvVar7 = operator_new__(uVar6);
      uVar6 = FUN_0041ad64(param_2,pvVar7,__s,uVar11);
    }
    FUN_00418664(param_1,pvVar7,uVar6);
    sVar9 = wcslen(__s);
    if (__s + sVar9 == pwVar12) break;
    lVar8 = *param_1;
    __s = __s + sVar9 + 1;
    lVar10 = *(long *)(lVar8 + -0x18);
    uVar6 = lVar10 + 1;
    if ((*(ulong *)(lVar8 + -0x10) < uVar6) || (0 < *(int *)(lVar8 + -8))) {
      FUN_00418208(param_1,uVar6);
      lVar8 = *param_1;
      lVar10 = *(long *)(lVar8 + -0x18);
    }
    *(undefined4 *)(lVar8 + lVar10 * 4) = 0;
    if ((ulong *)(lVar8 + -0x18) != (ulong *)PTR_DAT_00501ab8) {
      *(undefined4 *)(lVar8 + -8) = 0;
      *(ulong *)(lVar8 + -0x18) = uVar6;
      *(undefined4 *)(lVar8 + uVar6 * 4) = 0;
    }
  }
  operator_delete__(pvVar7);
  if (__s1 + -6 != (wchar_t *)PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      wVar4 = __s1[-2];
      __s1[-2] = wVar4 + L'\xffffffff';
    }
    else {
      pwVar12 = __s1 + -2;
      do {
        wVar4 = *pwVar12;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(pwVar12,0x10);
        if (bVar2) {
          *pwVar12 = wVar4 + L'\xffffffff';
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (wVar4 < L'\x01') {
      operator_delete(__s1 + -6);
    }
  }
  return param_1;
}


==================================================================

### FUNC 003ff854 (68 bytes) name=FUN_003ff854

void FUN_003ff854(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fe320;
  param_1[2] = 0;
  FUN_003f0330(param_1,0,0);
  return;
}


==================================================================

### FUNC 003ff8ac (68 bytes) name=FUN_003ff8ac

void FUN_003ff8ac(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fe320;
  FUN_003f0330(param_1,0,0);
  return;
}


==================================================================

### FUNC 003ff904 (60 bytes) name=FUN_003ff904

void FUN_003ff904(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fe320;
  FUN_003f0330();
  return;
}


==================================================================

### FUNC 003ff954 (28 bytes) name=FUN_003ff954

void FUN_003ff954(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003ff970 (28 bytes) name=FUN_003ff970

void FUN_003ff970(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003ff98c (44 bytes) name=FUN_003ff98c

undefined8 FUN_003ff98c(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 003ff9b8 (44 bytes) name=FUN_003ff9b8

undefined8 FUN_003ff9b8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x28))();
  return param_1;
}


==================================================================

### FUNC 003ff9e4 (44 bytes) name=FUN_003ff9e4

undefined8 FUN_003ff9e4(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 003ffa10 (44 bytes) name=FUN_003ffa10

undefined8 FUN_003ffa10(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x38))();
  return param_1;
}


==================================================================

### FUNC 003ffa3c (28 bytes) name=FUN_003ffa3c

void FUN_003ffa3c(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003ffa58 (28 bytes) name=FUN_003ffa58

void FUN_003ffa58(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003ffa74 (28 bytes) name=FUN_003ffa74

void FUN_003ffa74(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003ffa90 (68 bytes) name=FUN_003ffa90

void FUN_003ffa90(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fe2b0;
  param_1[2] = 0;
  FUN_003f01cc(param_1,0,0);
  return;
}


==================================================================

### FUNC 003ffae8 (68 bytes) name=FUN_003ffae8

void FUN_003ffae8(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fe2b0;
  FUN_003f01cc(param_1,0,0);
  return;
}


==================================================================

### FUNC 003ffb40 (60 bytes) name=FUN_003ffb40

void FUN_003ffb40(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fe2b0;
  FUN_003f01cc();
  return;
}


==================================================================

### FUNC 003ffb90 (28 bytes) name=FUN_003ffb90

void FUN_003ffb90(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003ffbac (28 bytes) name=FUN_003ffbac

void FUN_003ffbac(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003ffbc8 (44 bytes) name=FUN_003ffbc8

undefined8 FUN_003ffbc8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 003ffbf4 (44 bytes) name=FUN_003ffbf4

undefined8 FUN_003ffbf4(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x28))();
  return param_1;
}


==================================================================

### FUNC 003ffc20 (44 bytes) name=FUN_003ffc20

undefined8 FUN_003ffc20(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 003ffc4c (44 bytes) name=FUN_003ffc4c

undefined8 FUN_003ffc4c(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x38))();
  return param_1;
}


==================================================================

### FUNC 003ffc78 (28 bytes) name=FUN_003ffc78

void FUN_003ffc78(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 003ffc94 (28 bytes) name=FUN_003ffc94

void FUN_003ffc94(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 003ffcb0 (28 bytes) name=FUN_003ffcb0

void FUN_003ffcb0(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 003ffccc (112 bytes) name=FUN_003ffccc

void FUN_003ffccc(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f8ac0;
  *(undefined4 *)((long)param_1 + 0x24) = 0;
  *(undefined4 *)(param_1 + 5) = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined1 *)((long)param_1 + 100) = 0;
  *(undefined1 *)((long)param_1 + 0x65) = 0;
  *(undefined1 *)((long)param_1 + 0x66) = 0;
  *(undefined1 *)((long)param_1 + 0x67) = 0;
  *(undefined1 *)(param_1 + 0xd) = 0;
  *(undefined1 *)((long)param_1 + 0x69) = 0;
  *(undefined1 *)((long)param_1 + 0x6a) = 0;
  *(undefined1 *)((long)param_1 + 0x6b) = 0;
  *(undefined1 *)(param_1 + 0x13) = 0;
  return;
}


==================================================================

### FUNC 003ffd3c (112 bytes) name=FUN_003ffd3c

void FUN_003ffd3c(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f8ae0;
  *(undefined4 *)((long)param_1 + 0x24) = 0;
  *(undefined4 *)(param_1 + 5) = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined1 *)((long)param_1 + 100) = 0;
  *(undefined1 *)((long)param_1 + 0x65) = 0;
  *(undefined1 *)((long)param_1 + 0x66) = 0;
  *(undefined1 *)((long)param_1 + 0x67) = 0;
  *(undefined1 *)(param_1 + 0xd) = 0;
  *(undefined1 *)((long)param_1 + 0x69) = 0;
  *(undefined1 *)((long)param_1 + 0x6a) = 0;
  *(undefined1 *)((long)param_1 + 0x6b) = 0;
  *(undefined1 *)(param_1 + 0x13) = 0;
  return;
}


==================================================================

### FUNC 003ffdac (192 bytes) name=FUN_003ffdac

void FUN_003ffdac(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
  *param_1 = &PTR_FUN_004fe320;
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  FUN_003f0330(param_1,0,0);
  *param_1 = &PTR_FUN_004f8880;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a600(&local_8,param_2,0);
    FUN_003f0330(param_1,local_8,0);
    FUN_0041a634(&local_8);
    return;
  }
  return;
}


==================================================================

### FUNC 003ffe94 (192 bytes) name=FUN_003ffe94

void FUN_003ffe94(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
  *param_1 = &PTR_FUN_004fe2b0;
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  FUN_003f01cc(param_1,0,0);
  *param_1 = &PTR_FUN_004f88f0;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a600(&local_8,param_2,0);
    FUN_003f01cc(param_1,local_8,0);
    FUN_0041a634(&local_8);
    return;
  }
  return;
}


==================================================================

### FUNC 003fff7c (28 bytes) name=FUN_003fff7c

void FUN_003fff7c(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8960;
  return;
}


==================================================================

### FUNC 003fff98 (48 bytes) name=FUN_003fff98

void FUN_003fff98(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 003fffc8 (48 bytes) name=FUN_003fffc8

void FUN_003fffc8(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 003ffff8 (28 bytes) name=FUN_003ffff8

void FUN_003ffff8(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8990;
  return;
}


==================================================================

### FUNC 00400014 (28 bytes) name=FUN_00400014

void FUN_00400014(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400030 (28 bytes) name=FUN_00400030

void FUN_00400030(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 0040004c (64 bytes) name=FUN_0040004c

void FUN_0040004c(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fe260;
  FUN_003f07dc(param_1,0);
  return;
}


==================================================================

### FUNC 004000a0 (64 bytes) name=FUN_004000a0

void FUN_004000a0(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004fe260;
  FUN_003f07dc(param_1,0);
  return;
}


==================================================================

### FUNC 004000f4 (60 bytes) name=FUN_004000f4

void FUN_004000f4(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004fe260;
  FUN_003f07dc();
  return;
}


==================================================================

### FUNC 00400144 (28 bytes) name=FUN_00400144

void FUN_00400144(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400160 (28 bytes) name=FUN_00400160

void FUN_00400160(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 0040017c (44 bytes) name=FUN_0040017c

undefined8 FUN_0040017c(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x20))();
  return param_1;
}


==================================================================

### FUNC 004001a8 (44 bytes) name=FUN_004001a8

undefined8 FUN_004001a8(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x28))();
  return param_1;
}


==================================================================

### FUNC 004001d4 (44 bytes) name=FUN_004001d4

undefined8 FUN_004001d4(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x30))();
  return param_1;
}


==================================================================

### FUNC 00400200 (68 bytes) name=FUN_00400200

void FUN_00400200(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  *(undefined1 *)(param_1 + 4) = 0;
  *param_1 = &PTR_FUN_004f8b00;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  *(undefined4 *)(param_1 + 9) = 0;
  *(undefined4 *)((long)param_1 + 0x4c) = 0;
  *(undefined1 *)(param_1 + 0x29) = 0;
  return;
}


==================================================================

### FUNC 00400244 (184 bytes) name=FUN_00400244

void FUN_00400244(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 local_8;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fe260;
  param_1[2] = 0;
  FUN_003f07dc(param_1,0);
  *param_1 = &PTR_FUN_004f8710;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a600(&local_8,param_2,0);
    FUN_003f07dc(param_1,local_8);
    FUN_0041a634(&local_8);
    return;
  }
  return;
}


==================================================================

### FUNC 00400324 (28 bytes) name=FUN_00400324

void FUN_00400324(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8760;
  return;
}


==================================================================

### FUNC 00400340 (28 bytes) name=FUN_00400340

void FUN_00400340(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 0040035c (28 bytes) name=FUN_0040035c

void FUN_0040035c(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 00400378 (28 bytes) name=FUN_00400378

void FUN_00400378(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 00400394 (28 bytes) name=FUN_00400394

void FUN_00400394(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 004003b0 (28 bytes) name=FUN_004003b0

void FUN_004003b0(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 004003cc (28 bytes) name=FUN_004003cc

void FUN_004003cc(long *param_1)

{
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 004003e8 (28 bytes) name=FUN_004003e8

void FUN_004003e8(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 00400404 (28 bytes) name=FUN_00400404

void FUN_00400404(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 00400420 (28 bytes) name=FUN_00400420

void FUN_00400420(long *param_1)

{
  (**(code **)(*param_1 + 0x50))();
  return;
}


==================================================================

### FUNC 0040043c (28 bytes) name=FUN_0040043c

void FUN_0040043c(long *param_1)

{
  (**(code **)(*param_1 + 0x58))();
  return;
}


==================================================================

### FUNC 00400458 (28 bytes) name=FUN_00400458

void FUN_00400458(long *param_1)

{
  (**(code **)(*param_1 + 0x60))();
  return;
}


==================================================================

### FUNC 00400474 (28 bytes) name=FUN_00400474

void FUN_00400474(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f87e0;
  return;
}


==================================================================

### FUNC 00400490 (28 bytes) name=FUN_00400490

void FUN_00400490(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 004004ac (28 bytes) name=FUN_004004ac

void FUN_004004ac(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 004004c8 (28 bytes) name=FUN_004004c8

void FUN_004004c8(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 004004e4 (28 bytes) name=FUN_004004e4

void FUN_004004e4(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 00400500 (28 bytes) name=FUN_00400500

void FUN_00400500(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 0040051c (28 bytes) name=FUN_0040051c

void FUN_0040051c(long *param_1)

{
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 00400538 (28 bytes) name=FUN_00400538

void FUN_00400538(long *param_1)

{
  (**(code **)(*param_1 + 0x40))();
  return;
}


==================================================================

### FUNC 00400554 (28 bytes) name=FUN_00400554

void FUN_00400554(long *param_1)

{
  (**(code **)(*param_1 + 0x48))();
  return;
}


==================================================================

### FUNC 00400570 (76 bytes) name=FUN_00400570

void FUN_00400570(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004f8860;
  uVar1 = FUN_003ed4bc();
  param_1[4] = uVar1;
  FUN_003fdbe4(param_1,0);
  return;
}


==================================================================

### FUNC 004005d0 (76 bytes) name=FUN_004005d0

void FUN_004005d0(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  param_1[2] = param_2;
  *param_1 = &PTR_FUN_004f8860;
  uVar1 = FUN_003ed4bc();
  param_1[4] = uVar1;
  FUN_003fdbe4(param_1,0);
  return;
}


==================================================================

### FUNC 00400630 (160 bytes) name=FUN_00400630

void FUN_00400630(undefined8 *param_1,undefined8 param_2,char *param_3,long param_4)

{
  int iVar1;
  char *__s2;
  size_t sVar2;
  void *pvVar3;
  
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  param_1[2] = 0;
  *param_1 = &PTR_FUN_004f8860;
  __s2 = (char *)FUN_003ed4bc();
  iVar1 = strcmp(param_3,__s2);
  if (iVar1 == 0) {
    param_1[4] = __s2;
  }
  else {
    sVar2 = strlen(param_3);
    pvVar3 = operator_new__(sVar2 + 1);
    pvVar3 = memcpy(pvVar3,param_3,sVar2 + 1);
    param_1[4] = pvVar3;
  }
  FUN_003fdbe4(param_1,param_2);
  return;
}


==================================================================

### FUNC 00400714 (28 bytes) name=FUN_00400714

void FUN_00400714(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x10);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x18);
  return;
}


==================================================================

### FUNC 00400730 (28 bytes) name=FUN_00400730

void FUN_00400730(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x20);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x28);
  return;
}


==================================================================

### FUNC 0040074c (28 bytes) name=FUN_0040074c

void FUN_0040074c(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x30);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x38);
  return;
}


==================================================================

### FUNC 00400768 (4 bytes) name=FUN_00400768

void FUN_00400768(void)

{
  return;
}


==================================================================

### FUNC 0040076c (28 bytes) name=FUN_0040076c

void FUN_0040076c(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x40);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x48);
  return;
}


==================================================================

### FUNC 00400788 (88 bytes) name=FUN_00400788

void FUN_00400788(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x58);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x60);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x68);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x70);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x78);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x80);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x88);
  return;
}


==================================================================

### FUNC 004007e0 (88 bytes) name=FUN_004007e0

void FUN_004007e0(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x90);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x98);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xa0);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xa8);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xb0);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xb8);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xc0);
  return;
}


==================================================================

### FUNC 00400838 (148 bytes) name=FUN_00400838

void FUN_00400838(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 200);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xd0);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xd8);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xe0);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xe8);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xf0);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0xf8);
  param_2[7] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x100);
  param_2[8] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x108);
  param_2[9] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x110);
  param_2[10] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x118);
  param_2[0xb] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x120);
  return;
}


==================================================================

### FUNC 004008cc (148 bytes) name=FUN_004008cc

void FUN_004008cc(long param_1,undefined8 *param_2)

{
  *param_2 = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x128);
  param_2[1] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x130);
  param_2[2] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x138);
  param_2[3] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x140);
  param_2[4] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x148);
  param_2[5] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x150);
  param_2[6] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x158);
  param_2[7] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x160);
  param_2[8] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x168);
  param_2[9] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x170);
  param_2[10] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x178);
  param_2[0xb] = *(undefined8 *)(*(long *)(param_1 + 0x10) + 0x180);
  return;
}


==================================================================

### FUNC 00400960 (220 bytes) name=FUN_00400960

void FUN_00400960(undefined8 *param_1,long param_2)

{
  param_1[2] = 0;
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  param_1[3] = 0;
  param_1[4] = 0;
  *param_1 = &PTR_FUN_004f8840;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  param_1[0x19] = 0;
  param_1[0x1a] = 0;
  param_1[0x1b] = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  param_1[0x24] = 0;
  param_1[0x25] = 0;
  param_1[0x26] = 0;
  param_1[0x27] = 0;
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  param_1[0x2e] = 0;
  param_1[0x2f] = 0;
  param_1[0x30] = 0;
  *(undefined1 *)(param_1 + 0x31) = 0;
  return;
}


==================================================================

### FUNC 00400a3c (28 bytes) name=FUN_00400a3c

void FUN_00400a3c(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f89c0;
  return;
}


==================================================================

### FUNC 00400a58 (28 bytes) name=FUN_00400a58

void FUN_00400a58(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400a74 (28 bytes) name=FUN_00400a74

void FUN_00400a74(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f89f0;
  return;
}


==================================================================

### FUNC 00400a90 (28 bytes) name=FUN_00400a90

void FUN_00400a90(undefined8 *param_1,long param_2)

{
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8a20;
  return;
}


==================================================================

### FUNC 00400aac (28 bytes) name=FUN_00400aac

void FUN_00400aac(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400ac8 (28 bytes) name=FUN_00400ac8

void FUN_00400ac8(long *param_1)

{
  (**(code **)(*param_1 + 0x18))();
  return;
}


==================================================================

### FUNC 00400ae4 (28 bytes) name=FUN_00400ae4

void FUN_00400ae4(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 00400b00 (28 bytes) name=FUN_00400b00

void FUN_00400b00(long *param_1)

{
  (**(code **)(*param_1 + 0x28))();
  return;
}


==================================================================

### FUNC 00400b1c (28 bytes) name=FUN_00400b1c

void FUN_00400b1c(long *param_1)

{
  (**(code **)(*param_1 + 0x30))();
  return;
}


==================================================================

### FUNC 00400b38 (28 bytes) name=FUN_00400b38

void FUN_00400b38(long *param_1)

{
  (**(code **)(*param_1 + 0x38))();
  return;
}


==================================================================

### FUNC 00400b54 (28 bytes) name=FUN_00400b54

void FUN_00400b54(undefined8 *param_1,undefined8 param_2,long param_3)

{
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f8a70;
  return;
}


==================================================================

### FUNC 00400b70 (60 bytes) name=FUN_00400b70

void FUN_00400b70(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fe390;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 00400bc0 (60 bytes) name=FUN_00400bc0

void FUN_00400bc0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_4 != 0);
  *param_1 = &PTR_FUN_004fe390;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 00400c10 (28 bytes) name=FUN_00400c10

void FUN_00400c10(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400c2c (28 bytes) name=FUN_00400c2c

void FUN_00400c2c(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400c48 (44 bytes) name=FUN_00400c48

undefined8 FUN_00400c48(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x18))();
  return param_1;
}


==================================================================

### FUNC 00400c74 (28 bytes) name=FUN_00400c74

void FUN_00400c74(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 00400c90 (8 bytes) name=FUN_00400c90

undefined8 FUN_00400c90(undefined8 param_1,undefined8 *param_2)

{
  return *param_2;
}


==================================================================

### FUNC 00400c98 (24 bytes) name=FUN_00400c98

long * FUN_00400c98(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501ab8 + 0x18);
  return param_1;
}


==================================================================

### FUNC 00400cb0 (168 bytes) name=FUN_00400cb0

void FUN_00400cb0(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 uVar2;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fe390;
  uVar2 = FUN_003ed450();
  param_1[2] = uVar2;
  *param_1 = &PTR_FUN_004fe490;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 00400d9c (144 bytes) name=FUN_00400d9c

void FUN_00400d9c(undefined8 *param_1,char *param_2,undefined8 param_3)

{
  int iVar1;
  
  FUN_0041a8fc(param_1,param_3);
  *param_1 = &PTR_FUN_004fe430;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 00400e40 (60 bytes) name=FUN_00400e40

void FUN_00400e40(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004f8690;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 00400e90 (72 bytes) name=FUN_00400e90

void FUN_00400e90(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 local_8;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f8690;
  local_8 = param_2;
  uVar1 = FUN_0041a63c(&local_8);
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 00400ed8 (28 bytes) name=FUN_00400ed8

void FUN_00400ed8(long *param_1)

{
  (**(code **)(*param_1 + 0x10))();
  return;
}


==================================================================

### FUNC 00400ef4 (44 bytes) name=FUN_00400ef4

undefined8 FUN_00400ef4(undefined8 param_1,long *param_2)

{
  (**(code **)(*param_2 + 0x18))();
  return param_1;
}


==================================================================

### FUNC 00400f20 (28 bytes) name=FUN_00400f20

void FUN_00400f20(long *param_1)

{
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### FUNC 00400f3c (168 bytes) name=FUN_00400f3c

void FUN_00400f3c(undefined8 *param_1,char *param_2,long param_3)

{
  int iVar1;
  undefined8 uVar2;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004f8690;
  uVar2 = FUN_003ed450();
  param_1[2] = uVar2;
  *param_1 = &PTR_FUN_004f86d0;
  iVar1 = strcmp(param_2,"C");
  if ((iVar1 != 0) && (iVar1 = strcmp(param_2,"POSIX"), iVar1 != 0)) {
    FUN_0041a634(param_1 + 2);
    FUN_0041a600(param_1 + 2,param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 00401028 (104 bytes) name=FUN_00401028

void FUN_00401028(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(PTR_DAT_00501ec0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,PTR_PTR_005018a8,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401090 (440 bytes) name=FUN_00401090

undefined1  [16]
FUN_00401090(long *param_1,undefined8 param_2,ulong param_3,long param_4,undefined4 param_5,
            undefined8 param_6,int *param_7,int *param_8)

{
  long *plVar1;
  char cVar2;
  int iVar4;
  char cVar3;
  long *plVar5;
  int *piVar6;
  char cVar7;
  ulong uVar8;
  undefined1 auVar9 [16];
  undefined1 auVar10 [16];
  
  auVar9._8_8_ = param_3;
  auVar9._0_8_ = param_2;
  plVar5 = (long *)FUN_00401028(param_4 + 0xd0);
  while( true ) {
    plVar1 = auVar9._0_8_;
    uVar8 = auVar9._8_8_ & 0xff;
    while( true ) {
      if (param_7 == param_8) goto LAB_004011f8;
      cVar2 = (**(code **)(*plVar5 + 0x60))(plVar5,*param_7,0);
      if (cVar2 == '%') break;
      iVar4 = *param_7;
      if ((int)uVar8 == 0) {
        piVar6 = (int *)plVar1[5];
        if (piVar6 < (int *)plVar1[6]) {
          *piVar6 = iVar4;
          plVar1[5] = (long)(piVar6 + 1);
        }
        else {
          iVar4 = (**(code **)(*plVar1 + 0x68))(plVar1);
        }
        uVar8 = (ulong)(iVar4 == -1);
      }
      param_7 = param_7 + 1;
    }
    piVar6 = param_7 + 1;
    if (param_8 == piVar6) break;
    cVar2 = (**(code **)(*plVar5 + 0x60))(plVar5,param_7[1],0);
    if ((cVar2 == 'O') || (cVar2 == 'E')) {
      piVar6 = param_7 + 2;
      if (param_8 == piVar6) break;
      cVar3 = (**(code **)(*plVar5 + 0x60))(plVar5,param_7[2],0);
      cVar7 = cVar2;
    }
    else {
      cVar7 = '\0';
      cVar3 = cVar2;
    }
    param_7 = piVar6 + 1;
    auVar9 = (**(code **)(*param_1 + 0x10))
                       (param_1,plVar1,param_3 & 0xffffffffffffff00 | uVar8,param_4,param_5,param_6,
                        cVar3,cVar7);
    param_3 = param_3 & 0xffffffffffffff00;
  }
LAB_004011f8:
  auVar10._8_8_ = param_3 & 0xffffffffffffff00 | uVar8;
  auVar10._0_8_ = plVar1;
  return auVar10;
}


==================================================================

### FUNC 00401248 (740 bytes) name=FUN_00401248

undefined1  [16]
FUN_00401248(undefined8 param_1,long *param_2,ulong param_3,long *param_4,int param_5,int *param_6,
            int param_7,int param_8,ulong param_9,long param_10,uint *param_11)

{
  uint uVar1;
  long *plVar2;
  ulong uVar3;
  ulong uVar4;
  bool bVar5;
  bool bVar6;
  ulong uVar7;
  int iVar8;
  int iVar9;
  undefined1 auVar10 [16];
  
  plVar2 = (long *)FUN_00401028(param_10 + 0xd0);
  uVar3 = param_3 & 0xffffffff;
  if (param_9 == 2) {
    iVar9 = 10;
  }
  else {
    iVar9 = 1000;
    if (param_9 != 4) {
      iVar9 = 1;
    }
  }
  iVar8 = 0;
  uVar7 = 0;
  do {
    if (param_2 == (long *)0x0) {
LAB_00401340:
      param_2 = (long *)0x0;
      if (param_4 == (long *)0x0) {
joined_r0x004012f0:
        if (param_9 == uVar7) {
          *param_6 = iVar8;
        }
        else if ((uVar7 == 2) && (param_9 == 4)) {
          *param_6 = iVar8 + -100;
        }
        else {
          *param_11 = *param_11 | 4;
        }
        auVar10._8_8_ = param_3 & 0xffffffff00000000 | uVar3;
        auVar10._0_8_ = param_2;
        return auVar10;
      }
      bVar5 = true;
      bVar6 = true;
joined_r0x00401350:
      if (param_5 == -1) {
        if ((int *)param_4[2] < (int *)param_4[3]) {
          param_5 = *(int *)param_4[2];
        }
        else {
          param_5 = (**(code **)(*param_4 + 0x48))(param_4);
        }
        bVar6 = bVar5;
        if (param_5 == -1) {
          param_4 = (long *)0x0;
        }
      }
      if (((param_5 == -1) == bVar6) || (param_9 <= uVar7)) goto joined_r0x004012f0;
      if (param_2 == (long *)0x0) {
        uVar4 = 0xffffffff;
      }
      else {
        uVar4 = uVar3;
        if ((int)uVar3 == -1) {
          if ((uint *)param_2[2] < (uint *)param_2[3]) {
            uVar1 = *(uint *)param_2[2];
          }
          else {
            uVar1 = (**(code **)(*param_2 + 0x48))(param_2);
          }
          uVar4 = (ulong)uVar1;
          uVar3 = uVar4;
          if (uVar1 == 0xffffffff) {
            param_2 = (long *)0x0;
          }
        }
      }
    }
    else {
      uVar4 = uVar3;
      if ((int)uVar3 == -1) {
        if ((uint *)param_2[2] < (uint *)param_2[3]) {
          uVar1 = *(uint *)param_2[2];
        }
        else {
          uVar1 = (**(code **)(*param_2 + 0x48))(param_2);
        }
        if (uVar1 == 0xffffffff) goto LAB_00401340;
        uVar4 = (ulong)uVar1;
      }
      uVar3 = uVar4;
      if (param_4 != (long *)0x0) {
        bVar5 = false;
        bVar6 = false;
        goto joined_r0x00401350;
      }
      if (param_9 <= uVar7) goto joined_r0x004012f0;
    }
    uVar1 = (**(code **)(*plVar2 + 0x60))(plVar2,uVar4,0x2a);
    uVar1 = (uVar1 & 0xff) - 0x30;
    if (9 < (uVar1 & 0xff)) goto joined_r0x004012f0;
    iVar8 = iVar8 * 10 + uVar1;
    if ((param_8 < iVar8 * iVar9) || (iVar8 * iVar9 + iVar9 <= param_7)) goto joined_r0x004012f0;
    iVar9 = iVar9 / 10;
    if (param_2 == (long *)0x0) {
      uVar7 = uVar7 + 1;
    }
    else {
      if ((ulong)param_2[2] < (ulong)param_2[3]) {
        param_2[2] = param_2[2] + 4;
      }
      else {
        (**(code **)(*param_2 + 0x50))(param_2);
      }
      uVar3 = 0xffffffff;
      uVar7 = uVar7 + 1;
    }
  } while( true );
}


==================================================================

### FUNC 0040152c (432 bytes) name=FUN_0040152c

undefined1  [16]
FUN_0040152c(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  uint uVar1;
  int iVar2;
  bool bVar3;
  long *plVar4;
  ulong uVar5;
  undefined1 auVar6 [16];
  int local_8;
  int local_4;
  
  FUN_00401028(param_6 + 0xd0);
  local_4 = 0;
  auVar6 = FUN_00401248(param_1,param_2,param_3,param_4,param_5,&local_8,0,9999,4,param_6,&local_4);
  plVar4 = auVar6._0_8_;
  uVar5 = auVar6._8_8_ & 0xffffffff;
  if (local_4 == 0) {
    if (local_8 < 0) {
      *(int *)(param_8 + 0x14) = local_8 + 100;
    }
    else {
      *(int *)(param_8 + 0x14) = local_8 + -0x76c;
    }
    if (plVar4 == (long *)0x0) goto LAB_0040164c;
LAB_004015e4:
    if (auVar6._8_4_ == -1) {
      if ((uint *)plVar4[2] < (uint *)plVar4[3]) {
        uVar1 = *(uint *)plVar4[2];
      }
      else {
        uVar1 = (**(code **)(*plVar4 + 0x48))();
      }
      if (uVar1 == 0xffffffff) goto LAB_0040164c;
      uVar5 = (ulong)uVar1;
    }
    bVar3 = false;
    if (param_4 == (long *)0x0) goto LAB_00401610;
LAB_004015f4:
    iVar2 = (int)param_5;
    if (iVar2 == -1) {
      if ((int *)param_4[2] < (int *)param_4[3]) {
        iVar2 = *(int *)param_4[2];
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
      }
    }
    if ((iVar2 == -1) != bVar3) goto LAB_00401610;
  }
  else {
    *param_7 = *param_7 | 4;
    if (plVar4 != (long *)0x0) goto LAB_004015e4;
LAB_0040164c:
    plVar4 = (long *)0x0;
    bVar3 = true;
    if (param_4 != (long *)0x0) goto LAB_004015f4;
  }
  *param_7 = *param_7 | 2;
LAB_00401610:
  auVar6._8_8_ = param_3 & 0xffffffff00000000 | uVar5;
  auVar6._0_8_ = plVar4;
  return auVar6;
}


==================================================================

### FUNC 004016dc (104 bytes) name=FUN_004016dc

void FUN_004016dc(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(PTR_DAT_00501df0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,PTR_PTR_00501cd0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401744 (104 bytes) name=FUN_00401744

void FUN_00401744(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476c0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdea0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 004017ac (104 bytes) name=FUN_004017ac

void FUN_004017ac(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476f8);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdf08,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401814 (1092 bytes) name=FUN_00401814

void FUN_00401814(long param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  undefined4 uVar3;
  int iVar4;
  long *plVar5;
  ulong uVar6;
  char *pcVar7;
  ulong uVar8;
  void *pvVar9;
  long lVar10;
  int *piVar11;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
  *(undefined1 *)(param_1 + 0x148) = 1;
  plVar5 = (long *)FUN_004017ac(param_2);
  (**(code **)(*plVar5 + 0x20))(&local_30);
  uVar6 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar6;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_30 + -8);
      *(int *)(local_30 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_30 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_30 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
  }
  pcVar7 = operator_new__(uVar6);
  (**(code **)(*plVar5 + 0x20))(&local_28,plVar5);
  FUN_00411998(&local_28,pcVar7,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_28 + -8);
      *(int *)(local_28 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_28 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_28 + -0x18));
    }
  }
  bVar2 = false;
  *(char **)(param_1 + 0x10) = pcVar7;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = '\0' < *pcVar7;
  }
  lVar10 = *plVar5;
  *(bool *)(param_1 + 0x20) = bVar2;
  (**(code **)(lVar10 + 0x28))(&local_20,plVar5);
  uVar6 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x30) = uVar6;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_20 + -8);
      *(int *)(local_20 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_20 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_20 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x30);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x30);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x28))(&local_18,plVar5);
  FUN_004154f8(&local_18,pvVar9,*(undefined8 *)(param_1 + 0x30),0);
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_18 + -8);
      *(int *)(local_18 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_18 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_18 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x28) = pvVar9;
  (**(code **)(lVar10 + 0x30))(&local_10,plVar5);
  uVar6 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x40) = uVar6;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_10 + -8);
      *(int *)(local_10 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_10 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_10 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x40);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x40);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x30))(&local_8,plVar5);
  FUN_004154f8(&local_8,pvVar9,*(undefined8 *)(param_1 + 0x40),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_8 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x38) = pvVar9;
  uVar3 = (**(code **)(lVar10 + 0x10))(plVar5);
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x48) = uVar3;
  uVar3 = (**(code **)(lVar10 + 0x18))(plVar5);
  *(undefined4 *)(param_1 + 0x4c) = uVar3;
  plVar5 = (long *)FUN_00401028(param_2);
  (**(code **)(*plVar5 + 0x58))
            (plVar5,*(long *)PTR_PTR_00501d10,*(long *)PTR_PTR_00501d10 + 0x24,param_1 + 0x50);
  (**(code **)(*plVar5 + 0x58))
            (plVar5,*(long *)PTR_PTR_00501aa0,*(long *)PTR_PTR_00501aa0 + 0x1a,param_1 + 0xe0);
  return;
}


==================================================================

### FUNC 00401d3c (104 bytes) name=FUN_00401d3c

void FUN_00401d3c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476e8);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdf50,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401da4 (104 bytes) name=FUN_00401da4

void FUN_00401da4(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476f0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdf38,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401e0c (104 bytes) name=FUN_00401e0c

void FUN_00401e0c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00547710);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdf98,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00401e74 (1400 bytes) name=FUN_00401e74

void FUN_00401e74(long param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  undefined4 uVar3;
  int iVar4;
  long *plVar5;
  ulong uVar6;
  char *pcVar7;
  ulong uVar8;
  void *pvVar9;
  long lVar10;
  int *piVar11;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
  *(undefined1 *)(param_1 + 0x98) = 1;
  plVar5 = (long *)FUN_00401e0c(param_2);
  uVar3 = (**(code **)(*plVar5 + 0x10))();
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x24) = uVar3;
  uVar3 = (**(code **)(lVar10 + 0x18))(plVar5);
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x28) = uVar3;
  uVar3 = (**(code **)(lVar10 + 0x40))(plVar5);
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x60) = uVar3;
  (**(code **)(lVar10 + 0x20))(&local_40,plVar5);
  uVar6 = *(ulong *)(local_40 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar6;
  if ((undefined *)(local_40 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_40 + -8);
      *(int *)(local_40 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_40 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_40 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
  }
  pcVar7 = operator_new__(uVar6);
  (**(code **)(*plVar5 + 0x20))(&local_38,plVar5);
  FUN_00411998(&local_38,pcVar7,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_38 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_38 + -8);
      *(int *)(local_38 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_38 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_38 + -0x18));
    }
  }
  bVar2 = false;
  *(char **)(param_1 + 0x10) = pcVar7;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = '\0' < *pcVar7;
  }
  lVar10 = *plVar5;
  *(bool *)(param_1 + 0x20) = bVar2;
  (**(code **)(lVar10 + 0x28))(&local_30,plVar5);
  uVar6 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x38) = uVar6;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_30 + -8);
      *(int *)(local_30 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_30 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_30 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x38);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x38);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x28))(&local_28,plVar5);
  FUN_004154f8(&local_28,pvVar9,*(undefined8 *)(param_1 + 0x38),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_28 + -8);
      *(int *)(local_28 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_28 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_28 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x30) = pvVar9;
  (**(code **)(lVar10 + 0x30))(&local_20,plVar5);
  uVar6 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x48) = uVar6;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_20 + -8);
      *(int *)(local_20 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_20 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_20 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x48);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x48);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x30))(&local_18,plVar5);
  FUN_004154f8(&local_18,pvVar9,*(undefined8 *)(param_1 + 0x48),0);
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_18 + -8);
      *(int *)(local_18 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_18 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_18 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x40) = pvVar9;
  (**(code **)(lVar10 + 0x38))(&local_10,plVar5);
  uVar6 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x58) = uVar6;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_10 + -8);
      *(int *)(local_10 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_10 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_10 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x58);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x58);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x38))(&local_8,plVar5);
  FUN_004154f8(&local_8,pvVar9,*(undefined8 *)(param_1 + 0x58),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_8 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x50) = pvVar9;
  uVar3 = (**(code **)(lVar10 + 0x48))(plVar5);
  *(undefined4 *)(param_1 + 100) = uVar3;
  uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5);
  *(undefined4 *)(param_1 + 0x68) = uVar3;
  plVar5 = (long *)FUN_00401028(param_2);
  (**(code **)(*plVar5 + 0x58))
            (plVar5,*(long *)PTR_PTR_00501b68,*(long *)PTR_PTR_00501b68 + 0xb,param_1 + 0x6c);
  return;
}


==================================================================

### FUNC 0040252c (104 bytes) name=FUN_0040252c

void FUN_0040252c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00547718);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdfd0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402594 (1400 bytes) name=FUN_00402594

void FUN_00402594(long param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  undefined4 uVar3;
  int iVar4;
  long *plVar5;
  ulong uVar6;
  char *pcVar7;
  ulong uVar8;
  void *pvVar9;
  long lVar10;
  int *piVar11;
  long local_40;
  long local_38;
  long local_30;
  long local_28;
  long local_20;
  long local_18;
  long local_10;
  long local_8;
  
  *(undefined1 *)(param_1 + 0x98) = 1;
  plVar5 = (long *)FUN_0040252c(param_2);
  uVar3 = (**(code **)(*plVar5 + 0x10))();
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x24) = uVar3;
  uVar3 = (**(code **)(lVar10 + 0x18))(plVar5);
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x28) = uVar3;
  uVar3 = (**(code **)(lVar10 + 0x40))(plVar5);
  lVar10 = *plVar5;
  *(undefined4 *)(param_1 + 0x60) = uVar3;
  (**(code **)(lVar10 + 0x20))(&local_40,plVar5);
  uVar6 = *(ulong *)(local_40 + -0x18);
  *(ulong *)(param_1 + 0x18) = uVar6;
  if ((undefined *)(local_40 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_40 + -8);
      *(int *)(local_40 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_40 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_40 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x18);
    }
  }
  pcVar7 = operator_new__(uVar6);
  (**(code **)(*plVar5 + 0x20))(&local_38,plVar5);
  FUN_00411998(&local_38,pcVar7,*(undefined8 *)(param_1 + 0x18),0);
  if ((undefined *)(local_38 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_38 + -8);
      *(int *)(local_38 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_38 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_38 + -0x18));
    }
  }
  bVar2 = false;
  *(char **)(param_1 + 0x10) = pcVar7;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = '\0' < *pcVar7;
  }
  lVar10 = *plVar5;
  *(bool *)(param_1 + 0x20) = bVar2;
  (**(code **)(lVar10 + 0x28))(&local_30,plVar5);
  uVar6 = *(ulong *)(local_30 + -0x18);
  *(ulong *)(param_1 + 0x38) = uVar6;
  if ((undefined *)(local_30 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_30 + -8);
      *(int *)(local_30 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_30 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_30 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x38);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x38);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x28))(&local_28,plVar5);
  FUN_004154f8(&local_28,pvVar9,*(undefined8 *)(param_1 + 0x38),0);
  if ((undefined *)(local_28 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_28 + -8);
      *(int *)(local_28 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_28 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_28 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x30) = pvVar9;
  (**(code **)(lVar10 + 0x30))(&local_20,plVar5);
  uVar6 = *(ulong *)(local_20 + -0x18);
  *(ulong *)(param_1 + 0x48) = uVar6;
  if ((undefined *)(local_20 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_20 + -8);
      *(int *)(local_20 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_20 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_20 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x48);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x48);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x30))(&local_18,plVar5);
  FUN_004154f8(&local_18,pvVar9,*(undefined8 *)(param_1 + 0x48),0);
  if ((undefined *)(local_18 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_18 + -8);
      *(int *)(local_18 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_18 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_18 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x40) = pvVar9;
  (**(code **)(lVar10 + 0x38))(&local_10,plVar5);
  uVar6 = *(ulong *)(local_10 + -0x18);
  *(ulong *)(param_1 + 0x58) = uVar6;
  if ((undefined *)(local_10 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_10 + -8);
      *(int *)(local_10 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_10 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_10 + -0x18));
      uVar6 = *(ulong *)(param_1 + 0x58);
    }
    else {
      uVar6 = *(ulong *)(param_1 + 0x58);
    }
  }
  uVar8 = uVar6 << 2;
  if (0x1fc0000000000000 < uVar6) {
    uVar8 = 0xffffffffffffffff;
  }
  pvVar9 = operator_new__(uVar8);
  (**(code **)(*plVar5 + 0x38))(&local_8,plVar5);
  FUN_004154f8(&local_8,pvVar9,*(undefined8 *)(param_1 + 0x58),0);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501ab8) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar4 + -1;
    }
    else {
      piVar11 = (int *)(local_8 + -8);
      do {
        iVar4 = *piVar11;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar11,0x10);
        if (bVar2) {
          *piVar11 = iVar4 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  lVar10 = *plVar5;
  *(void **)(param_1 + 0x50) = pvVar9;
  uVar3 = (**(code **)(lVar10 + 0x48))(plVar5);
  *(undefined4 *)(param_1 + 100) = uVar3;
  uVar3 = (**(code **)(*plVar5 + 0x50))(plVar5);
  *(undefined4 *)(param_1 + 0x68) = uVar3;
  plVar5 = (long *)FUN_00401028(param_2);
  (**(code **)(*plVar5 + 0x58))
            (plVar5,*(long *)PTR_PTR_00501b68,*(long *)PTR_PTR_00501b68 + 0xb,param_1 + 0x6c);
  return;
}


==================================================================

### FUNC 00402c4c (104 bytes) name=FUN_00402c4c

void FUN_00402c4c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00547700);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fe0d8,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402cb4 (104 bytes) name=FUN_00402cb4

void FUN_00402cb4(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_00547708);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fe0c0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402d1c (104 bytes) name=FUN_00402d1c

void FUN_00402d1c(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476e0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fdf80,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402d84 (244 bytes) name=FUN_00402d84

undefined1  [16]
FUN_00402d84(undefined8 param_1,long *param_2,char param_3,long param_4,undefined8 param_5,
            undefined8 param_6,byte param_7,byte param_8)

{
  long *plVar1;
  undefined8 uVar2;
  size_t sVar3;
  long lVar4;
  undefined1 auVar5 [16];
  undefined4 local_210;
  uint local_20c;
  uint local_208;
  undefined4 local_204;
  wchar_t awStack_200 [128];
  
  plVar1 = (long *)FUN_00401028(param_4 + 0xd0);
  uVar2 = FUN_00402d1c(param_4 + 0xd0);
  local_210 = (**(code **)(*plVar1 + 0x50))(plVar1,0x25);
  if (param_8 == 0) {
    local_208 = 0;
  }
  else {
    local_204 = 0;
    local_208 = (uint)param_7;
    param_7 = param_8;
  }
  local_20c = (uint)param_7;
  FUN_003fdaf4(uVar2,awStack_200,0x80,&local_210,param_6);
  sVar3 = wcslen(awStack_200);
  if (param_3 == '\0') {
    lVar4 = (**(code **)(*param_2 + 0x60))(param_2,awStack_200,(long)(int)sVar3);
    param_3 = (int)sVar3 != lVar4;
  }
  auVar5[8] = param_3;
  auVar5._0_8_ = param_2;
  auVar5._9_7_ = 0;
  return auVar5;
}


==================================================================

### FUNC 00402e78 (104 bytes) name=FUN_00402e78

void FUN_00402e78(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476d8);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fe0f0,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402ee0 (104 bytes) name=FUN_00402ee0

void FUN_00402ee0(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476d0);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fe120,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402f48 (104 bytes) name=FUN_00402f48

void FUN_00402f48(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_003edb10(&DAT_005476c8);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = __dynamic_cast(lVar2,PTR_PTR_00501e48,&PTR_PTR_004fe008,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f118();
}


==================================================================

### FUNC 00402fb0 (108 bytes) name=FUN_00402fb0

bool FUN_00402fb0(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(PTR_DAT_00501ec0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,PTR_PTR_005018a8,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 0040301c (108 bytes) name=FUN_0040301c

bool FUN_0040301c(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(PTR_DAT_00501df0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,PTR_PTR_00501cd0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 00403088 (108 bytes) name=FUN_00403088

bool FUN_00403088(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476c0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdea0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 004030f4 (108 bytes) name=FUN_004030f4

bool FUN_004030f4(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476f8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdf08,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 00403160 (108 bytes) name=FUN_00403160

bool FUN_00403160(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476e8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdf50,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 004031cc (108 bytes) name=FUN_004031cc

bool FUN_004031cc(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476f0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdf38,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 00403238 (108 bytes) name=FUN_00403238

bool FUN_00403238(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00547718);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdfd0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 004032a4 (108 bytes) name=FUN_004032a4

bool FUN_004032a4(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00547700);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fe0d8,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 00403310 (108 bytes) name=FUN_00403310

bool FUN_00403310(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_00547708);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fe0c0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 0040337c (108 bytes) name=FUN_0040337c

bool FUN_0040337c(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476e0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fdf80,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 004033e8 (108 bytes) name=FUN_004033e8

bool FUN_004033e8(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476d8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fe0f0,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 00403454 (108 bytes) name=FUN_00403454

bool FUN_00403454(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476d0);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fe120,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 004034c0 (108 bytes) name=FUN_004034c0

bool FUN_004034c0(long *param_1)

{
  bool bVar1;
  ulong uVar2;
  long lVar3;
  
  uVar2 = FUN_003edb10(&DAT_005476c8);
  bVar1 = false;
  if ((uVar2 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar3 = *(long *)(*(long *)(*param_1 + 8) + uVar2 * 8), lVar3 != 0)) {
    lVar3 = __dynamic_cast(lVar3,PTR_PTR_00501e48,&PTR_PTR_004fe008,0);
    bVar1 = lVar3 != 0;
  }
  return bVar1;
}


==================================================================

### FUNC 0040352c (856 bytes) name=FUN_0040352c

void FUN_0040352c(undefined8 *param_1,undefined4 param_2,byte *param_3,long param_4,
                 undefined8 *param_5,undefined8 *param_6)

{
  uint uVar1;
  uint uVar2;
  bool bVar3;
  byte bVar4;
  undefined8 *puVar5;
  uint uVar6;
  long lVar7;
  undefined8 *puVar8;
  long lVar9;
  undefined8 *puVar10;
  byte bVar11;
  uint uVar12;
  uint uVar13;
  ulong uVar14;
  ulong uVar15;
  undefined8 *puVar16;
  ulong uVar17;
  ulong uVar18;
  undefined8 uVar19;
  
  bVar11 = *param_3;
  lVar9 = 0;
  uVar18 = 0;
  uVar17 = (ulong)bVar11;
  while ((long)uVar17 < (long)param_6 - (long)param_5 >> 2) {
    while( true ) {
      if ((char)bVar11 < '\x01') goto LAB_00403580;
      param_6 = (undefined8 *)((long)param_6 + (ulong)bVar11 * -4);
      if (param_4 - 1U <= uVar18) break;
      uVar18 = uVar18 + 1;
      bVar11 = param_3[uVar18];
      uVar17 = (ulong)bVar11;
      if ((long)param_6 - (long)param_5 >> 2 <= (long)uVar17) goto LAB_00403580;
    }
    lVar9 = lVar9 + 1;
  }
LAB_00403580:
  if (param_5 == param_6) goto LAB_00403710;
  puVar5 = (undefined8 *)((long)param_5 + 4);
  uVar14 = (ulong)((long)param_6 - (long)puVar5) >> 2;
  uVar17 = uVar14 + 1;
  puVar8 = param_1;
  if ((uVar17 < 9) || (param_1 < param_5 + 2 && param_5 < param_1 + 2)) {
    do {
      bVar3 = puVar5 != param_6;
      *(undefined4 *)puVar8 = *(undefined4 *)((long)puVar5 + -4);
      puVar5 = (undefined8 *)((long)puVar5 + 4);
      puVar8 = (undefined8 *)((long)puVar8 + 4);
    } while (bVar3);
  }
  else {
    uVar14 = (uVar14 - 3 >> 2) + 1;
    uVar15 = 0;
    puVar5 = param_1;
    puVar8 = param_5;
    do {
      uVar19 = *puVar8;
      uVar15 = uVar15 + 1;
      puVar5[1] = puVar8[1];
      *puVar5 = uVar19;
      puVar5 = puVar5 + 2;
      puVar8 = puVar8 + 2;
    } while (uVar15 < uVar14);
    lVar7 = uVar14 * 0x10;
    if (((uVar17 != uVar14 * 4) &&
        (*(undefined4 *)(param_1 + uVar14 * 2) = *(undefined4 *)(param_5 + uVar14 * 2),
        param_6 != (undefined8 *)((long)param_5 + lVar7 + 4))) &&
       (*(undefined4 *)((long)param_1 + lVar7 + 4) = *(undefined4 *)((long)param_5 + lVar7 + 4),
       param_6 != param_5 + uVar14 * 2 + 1)) {
      *(undefined4 *)(param_1 + uVar14 * 2 + 1) = *(undefined4 *)(param_5 + uVar14 * 2 + 1);
    }
  }
  puVar5 = (undefined8 *)((long)param_1 + uVar17 * 4);
  lVar9 = lVar9 + -1;
  if (lVar9 == -1) {
LAB_004037fc:
    while (puVar8 = puVar5, uVar18 = uVar18 - 1, uVar18 != 0xffffffffffffffff) {
      *(undefined4 *)puVar8 = param_2;
      puVar5 = (undefined8 *)((long)puVar8 + 4);
      bVar11 = param_3[uVar18];
      if (bVar11 != 0) {
        puVar10 = puVar5;
        puVar16 = param_6;
        bVar4 = bVar11;
        if ((puVar5 < param_6 + 2 && param_6 < (undefined8 *)((long)puVar8 + 0x14U)) ||
           (uVar6 = (uint)bVar11, bVar11 < 9)) {
          do {
            bVar4 = bVar4 - 1;
            *(undefined4 *)puVar10 = *(undefined4 *)puVar16;
            puVar10 = (undefined8 *)((long)puVar10 + 4);
            puVar16 = (undefined8 *)((long)puVar16 + 4);
          } while (bVar4 != 0);
        }
        else {
          uVar13 = (uVar6 - 4 >> 2 & 0x3f) + 1;
          uVar12 = 0;
          uVar2 = uVar13 & 0x3f;
          uVar1 = uVar2 * 4;
          puVar8 = puVar5;
          puVar10 = param_6;
          do {
            uVar19 = *puVar10;
            uVar12 = uVar12 + 1;
            puVar8[1] = puVar10[1];
            *puVar8 = uVar19;
            puVar8 = puVar8 + 2;
            puVar10 = puVar10 + 2;
          } while ((uVar12 & 0xff) < uVar13);
          lVar9 = (ulong)uVar1 * 4;
          if (uVar6 != uVar1) {
            uVar6 = uVar6 + uVar2 * -4 & 0xff;
            *(undefined4 *)((long)puVar5 + (ulong)uVar1 * 4) =
                 *(undefined4 *)((long)param_6 + (ulong)uVar1 * 4);
            if ((uVar6 != 1) &&
               (*(undefined4 *)((long)puVar5 + lVar9 + 4) =
                     *(undefined4 *)((long)param_6 + lVar9 + 4), uVar6 != 2)) {
              *(undefined4 *)((long)puVar5 + lVar9 + 8) = *(undefined4 *)((long)param_6 + lVar9 + 8)
              ;
            }
          }
        }
        lVar9 = ((ulong)(byte)(bVar11 - 1) + 1) * 4;
        param_6 = (undefined8 *)((long)param_6 + lVar9);
        puVar5 = (undefined8 *)((long)puVar5 + lVar9);
      }
    }
    return;
  }
  *(undefined4 *)puVar5 = param_2;
  param_1 = (undefined8 *)((long)puVar5 + 4);
  uVar6 = (uint)param_3[uVar18];
  if (param_3[uVar18] == 0) goto LAB_00403710;
  do {
    puVar8 = param_1;
    puVar10 = param_6;
    uVar13 = uVar6;
    if ((param_1 < param_6 + 2 && param_6 < (undefined8 *)((long)puVar5 + 0x14U)) || (uVar6 < 9)) {
      do {
        uVar12 = uVar13 - 1;
        *(undefined4 *)puVar8 = *(undefined4 *)puVar10;
        puVar8 = (undefined8 *)((long)puVar8 + 4);
        puVar10 = (undefined8 *)((long)puVar10 + 4);
        uVar13 = uVar12 & 0xff;
      } while ((uVar12 & 0xff) != 0);
    }
    else {
      uVar13 = (uVar6 - 4 >> 2 & 0x3f) + 1;
      uVar12 = 0;
      uVar2 = uVar13 & 0x3f;
      uVar1 = uVar2 * 4;
      puVar5 = param_1;
      puVar8 = param_6;
      do {
        uVar19 = *puVar8;
        uVar12 = uVar12 + 1;
        puVar5[1] = puVar8[1];
        *puVar5 = uVar19;
        puVar5 = puVar5 + 2;
        puVar8 = puVar8 + 2;
      } while ((uVar12 & 0xff) < uVar13);
      lVar7 = (ulong)uVar1 * 4;
      if (uVar6 != uVar1) {
        uVar13 = uVar6 + uVar2 * -4 & 0xff;
        *(undefined4 *)((long)param_1 + (ulong)uVar1 * 4) =
             *(undefined4 *)((long)param_6 + (ulong)uVar1 * 4);
        if ((uVar13 != 1) &&
           (*(undefined4 *)((long)param_1 + lVar7 + 4) = *(undefined4 *)((long)param_6 + lVar7 + 4),
           uVar13 != 2)) {
          *(undefined4 *)((long)param_1 + lVar7 + 8) = *(undefined4 *)((long)param_6 + lVar7 + 8);
        }
      }
    }
    lVar7 = ((ulong)(byte)((char)uVar6 - 1) + 1) * 4;
    param_6 = (undefined8 *)((long)param_6 + lVar7);
    param_1 = (undefined8 *)((long)param_1 + lVar7);
LAB_00403710:
    do {
      puVar5 = param_1;
      lVar9 = lVar9 + -1;
      if (lVar9 == -1) goto LAB_004037fc;
      *(undefined4 *)puVar5 = param_2;
      param_1 = (undefined8 *)((long)puVar5 + 4);
      uVar6 = (uint)param_3[uVar18];
    } while (uVar6 == 0);
  } while( true );
}


==================================================================

### FUNC 00403884 (188 bytes) name=FUN_00403884

void FUN_00403884(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4,
                 wchar_t *param_5,long param_6,long param_7,int *param_8)

{
  wchar_t *__s1;
  long lVar1;
  int iVar2;
  
  if (param_5 != (wchar_t *)0x0) {
    iVar2 = (int)((long)param_5 - param_7 >> 2);
    __s1 = (wchar_t *)
           FUN_0040352c(param_6,param_4,param_2,param_3,param_7,param_7 + (long)iVar2 * 4);
    wmemcpy(__s1,param_5,(long)(*param_8 - iVar2));
    *param_8 = (*param_8 - iVar2) + (int)((long)__s1 - param_6 >> 2);
    return;
  }
  lVar1 = FUN_0040352c(param_6,param_4,param_2,param_3,param_7,param_7 + (long)*param_8 * 4);
  *param_8 = (int)((ulong)(lVar1 - param_6) >> 2);
  return;
}


==================================================================

### FUNC 00403940 (88 bytes) name=FUN_00403940

void FUN_00403940(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4,
                 undefined8 param_5,long param_6,long param_7,int *param_8)

{
  long lVar1;
  
  lVar1 = FUN_0040352c(param_6,param_4,param_2,param_3,param_7,param_7 + (long)*param_8 * 4);
  *param_8 = (int)(lVar1 - param_6 >> 2);
  return;
}


==================================================================

### FUNC 00403998 (1696 bytes) name=FUN_00403998

undefined1  [16]
FUN_00403998(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,
            undefined8 *param_6)

{
  ulong uVar1;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  ulong uVar11;
  long lVar12;
  int *piVar13;
  ulong uVar14;
  ulong uVar15;
  long lVar16;
  ulong uVar17;
  undefined1 auVar18 [16];
  undefined4 *local_40;
  undefined4 local_18 [2];
  undefined *local_10;
  undefined *local_8;
  
  uVar15 = param_3 & 0xff;
  plVar7 = (long *)FUN_00401028(param_4 + 0xd0);
  lVar8 = FUN_003edb10(&DAT_00547710);
  lVar16 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar16 + lVar8 * 8);
  if (lVar12 == 0) {
    puVar10 = operator_new(0xa0);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f8ae0;
    puVar10[2] = 0;
    puVar10[3] = 0;
    *(undefined1 *)(puVar10 + 4) = 0;
    *(undefined4 *)((long)puVar10 + 0x24) = 0;
    *(undefined4 *)(puVar10 + 5) = 0;
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    puVar10[9] = 0;
    puVar10[10] = 0;
    puVar10[0xb] = 0;
    *(undefined4 *)(puVar10 + 0xc) = 0;
    *(undefined1 *)((long)puVar10 + 100) = 0;
    *(undefined1 *)((long)puVar10 + 0x65) = 0;
    *(undefined1 *)((long)puVar10 + 0x66) = 0;
    *(undefined1 *)((long)puVar10 + 0x67) = 0;
    *(undefined1 *)(puVar10 + 0xd) = 0;
    *(undefined1 *)((long)puVar10 + 0x69) = 0;
    *(undefined1 *)((long)puVar10 + 0x6a) = 0;
    *(undefined1 *)((long)puVar10 + 0x6b) = 0;
    *(undefined1 *)(puVar10 + 0x13) = 0;
    FUN_00401e74(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar8);
    lVar12 = *(long *)(lVar16 + lVar8 * 8);
  }
  piVar13 = (int *)*param_6;
  if (*piVar13 == *(int *)(lVar12 + 0x6c)) {
    lVar8 = *(long *)(piVar13 + -6);
    local_18[0] = *(undefined4 *)(lVar12 + 0x68);
    local_40 = *(undefined4 **)(lVar12 + 0x50);
    if (lVar8 != 0) {
      piVar13 = piVar13 + 1;
    }
    uVar17 = *(ulong *)(lVar12 + 0x58);
  }
  else {
    local_18[0] = *(undefined4 *)(lVar12 + 100);
    uVar17 = *(ulong *)(lVar12 + 0x48);
    local_40 = *(undefined4 **)(lVar12 + 0x40);
    lVar8 = *(long *)(piVar13 + -6);
  }
  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,4,piVar13,piVar13 + lVar8);
  lVar8 = lVar8 - (long)piVar13 >> 2;
  if (lVar8 != 0) {
    local_10 = PTR_DAT_00501ab8 + 0x18;
    FUN_00418208(&local_10,lVar8 << 1);
    iVar6 = *(int *)(lVar12 + 0x60);
    lVar16 = lVar8 - iVar6;
    if (0 < lVar16) {
      if (iVar6 < 0) {
        lVar16 = lVar8;
      }
      if (*(long *)(lVar12 + 0x18) == 0) {
        FUN_00416a24(&local_10,piVar13,lVar16);
        iVar6 = *(int *)(lVar12 + 0x60);
      }
      else {
        FUN_0041690c(&local_10,0,*(undefined8 *)(local_10 + -0x18),lVar16 << 1,0);
        if (-1 < *(int *)(local_10 + -8)) {
          FUN_0041673c(&local_10);
        }
        lVar9 = FUN_0040352c(local_10,*(undefined4 *)(lVar12 + 0x28),*(undefined8 *)(lVar12 + 0x10),
                             *(undefined8 *)(lVar12 + 0x18),piVar13,piVar13 + lVar16);
        if (-1 < *(int *)(local_10 + -8)) {
          FUN_0041673c(&local_10);
        }
        uVar11 = lVar9 - (long)local_10 >> 2;
        if (*(ulong *)(local_10 + -0x18) < uVar11) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase");
        }
        FUN_00416540(&local_10,uVar11,*(ulong *)(local_10 + -0x18) - uVar11,0);
        iVar6 = *(int *)(lVar12 + 0x60);
      }
    }
    if (0 < iVar6) {
      uVar3 = *(undefined4 *)(lVar12 + 0x24);
      lVar9 = *(long *)(local_10 + -0x18);
      uVar11 = lVar9 + 1;
      if ((*(ulong *)(local_10 + -0x10) < uVar11) || (0 < *(int *)(local_10 + -8))) {
        FUN_00418208(&local_10,uVar11);
        lVar9 = *(long *)(local_10 + -0x18);
      }
      *(undefined4 *)(local_10 + lVar9 * 4) = uVar3;
      if (local_10 + -0x18 != PTR_DAT_00501ab8) {
        *(undefined4 *)(local_10 + -8) = 0;
        *(ulong *)(local_10 + -0x18) = uVar11;
        *(undefined4 *)(local_10 + uVar11 * 4) = 0;
      }
      if (lVar16 < 0) {
        FUN_0041885c(&local_10,-lVar16,*(undefined4 *)(lVar12 + 0x70));
        FUN_00418664(&local_10,piVar13,lVar8);
      }
      else {
        FUN_00418664(&local_10,piVar13 + lVar16,(long)*(int *)(lVar12 + 0x60));
      }
    }
    uVar2 = *(uint *)(param_4 + 0x18) & 0xb0;
    if ((*(uint *)(param_4 + 0x18) >> 9 & 1) == 0) {
      lVar8 = 0;
    }
    else {
      lVar8 = *(long *)(lVar12 + 0x38);
    }
    uVar11 = uVar17 + *(long *)(local_10 + -0x18) + lVar8;
    local_8 = PTR_DAT_00501ab8 + 0x18;
    FUN_00418208(&local_8,uVar11 * 2);
    uVar14 = *(ulong *)(param_4 + 0x10);
    lVar8 = 0;
    bVar5 = uVar11 < uVar14 && uVar2 == 0x10;
    do {
      switch(*(undefined1 *)((long)local_18 + lVar8)) {
      case 0:
        if (bVar5) {
LAB_00403e24:
          FUN_0041885c(&local_8,uVar14 - uVar11,param_5);
        }
        break;
      case 1:
        if (bVar5) goto LAB_00403e24;
        lVar16 = *(long *)(local_8 + -0x18);
        uVar1 = lVar16 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
          FUN_00418208(&local_8,uVar1);
          lVar16 = *(long *)(local_8 + -0x18);
        }
        *(undefined4 *)(local_8 + lVar16 * 4) = param_5;
        if (local_8 + -0x18 != PTR_DAT_00501ab8) {
          *(undefined4 *)(local_8 + -8) = 0;
          *(ulong *)(local_8 + -0x18) = uVar1;
          *(undefined4 *)(local_8 + uVar1 * 4) = 0;
        }
        break;
      case 2:
        if ((*(uint *)(param_4 + 0x18) >> 9 & 1) != 0) {
          FUN_00418664(&local_8,*(undefined8 *)(lVar12 + 0x30),*(undefined8 *)(lVar12 + 0x38));
        }
        break;
      case 3:
        if (uVar17 != 0) {
          uVar3 = *local_40;
          lVar16 = *(long *)(local_8 + -0x18);
          uVar1 = lVar16 + 1;
          if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
            FUN_00418208(&local_8,uVar1);
            lVar16 = *(long *)(local_8 + -0x18);
          }
          *(undefined4 *)(local_8 + lVar16 * 4) = uVar3;
          if (local_8 + -0x18 != PTR_DAT_00501ab8) {
            *(undefined4 *)(local_8 + -8) = 0;
            *(ulong *)(local_8 + -0x18) = uVar1;
            *(undefined4 *)(local_8 + uVar1 * 4) = 0;
          }
        }
        break;
      case 4:
        FUN_00418364(&local_8,&local_10);
      }
      lVar8 = lVar8 + 1;
    } while (lVar8 != 4);
    if (1 < uVar17) {
      FUN_00418664(&local_8,local_40 + 1,uVar17 - 1);
    }
    uVar17 = *(ulong *)(local_8 + -0x18);
    if (uVar17 < uVar14) {
      if (uVar2 == 0x20) {
        FUN_0041885c(&local_8,uVar14 - uVar17,param_5);
        uVar17 = uVar14;
      }
      else {
        FUN_0041690c(&local_8,0,0,uVar14 - uVar17,param_5);
        uVar17 = uVar14;
      }
    }
    if (((param_3 & 0xff) == 0) &&
       (lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_8,(long)(int)uVar17),
       (int)uVar17 != lVar8)) {
      uVar15 = 1;
    }
    if (local_8 + -0x18 != PTR_DAT_00501ab8) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = *(int *)(local_8 + -8);
        *(int *)(local_8 + -8) = iVar6 + -1;
      }
      else {
        piVar13 = (int *)(local_8 + -8);
        do {
          iVar6 = *piVar13;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar5) {
            *piVar13 = iVar6 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (iVar6 < 1) {
        operator_delete(local_8 + -0x18);
      }
    }
    if (local_10 + -0x18 != PTR_DAT_00501ab8) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = *(int *)(local_10 + -8);
        *(int *)(local_10 + -8) = iVar6 + -1;
      }
      else {
        piVar13 = (int *)(local_10 + -8);
        do {
          iVar6 = *piVar13;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar5) {
            *piVar13 = iVar6 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (iVar6 < 1) {
        operator_delete(local_10 + -0x18);
      }
    }
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar18._8_8_ = param_3 & 0xffffffffffffff00 | uVar15;
  auVar18._0_8_ = param_2;
  return auVar18;
}


==================================================================

### FUNC 004040b4 (1696 bytes) name=FUN_004040b4

undefined1  [16]
FUN_004040b4(undefined8 param_1,long *param_2,ulong param_3,long param_4,undefined4 param_5,
            undefined8 *param_6)

{
  ulong uVar1;
  uint uVar2;
  undefined4 uVar3;
  char cVar4;
  bool bVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  ulong uVar11;
  long lVar12;
  int *piVar13;
  ulong uVar14;
  ulong uVar15;
  long lVar16;
  ulong uVar17;
  undefined1 auVar18 [16];
  undefined4 *local_40;
  undefined4 local_18 [2];
  undefined *local_10;
  undefined *local_8;
  
  uVar15 = param_3 & 0xff;
  plVar7 = (long *)FUN_00401028(param_4 + 0xd0);
  lVar8 = FUN_003edb10(&DAT_00547718);
  lVar16 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar16 + lVar8 * 8);
  if (lVar12 == 0) {
    puVar10 = operator_new(0xa0);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f8ac0;
    puVar10[2] = 0;
    puVar10[3] = 0;
    *(undefined1 *)(puVar10 + 4) = 0;
    *(undefined4 *)((long)puVar10 + 0x24) = 0;
    *(undefined4 *)(puVar10 + 5) = 0;
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    puVar10[9] = 0;
    puVar10[10] = 0;
    puVar10[0xb] = 0;
    *(undefined4 *)(puVar10 + 0xc) = 0;
    *(undefined1 *)((long)puVar10 + 100) = 0;
    *(undefined1 *)((long)puVar10 + 0x65) = 0;
    *(undefined1 *)((long)puVar10 + 0x66) = 0;
    *(undefined1 *)((long)puVar10 + 0x67) = 0;
    *(undefined1 *)(puVar10 + 0xd) = 0;
    *(undefined1 *)((long)puVar10 + 0x69) = 0;
    *(undefined1 *)((long)puVar10 + 0x6a) = 0;
    *(undefined1 *)((long)puVar10 + 0x6b) = 0;
    *(undefined1 *)(puVar10 + 0x13) = 0;
    FUN_00402594(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar8);
    lVar12 = *(long *)(lVar16 + lVar8 * 8);
  }
  piVar13 = (int *)*param_6;
  if (*piVar13 == *(int *)(lVar12 + 0x6c)) {
    lVar8 = *(long *)(piVar13 + -6);
    local_18[0] = *(undefined4 *)(lVar12 + 0x68);
    local_40 = *(undefined4 **)(lVar12 + 0x50);
    if (lVar8 != 0) {
      piVar13 = piVar13 + 1;
    }
    uVar17 = *(ulong *)(lVar12 + 0x58);
  }
  else {
    local_18[0] = *(undefined4 *)(lVar12 + 100);
    uVar17 = *(ulong *)(lVar12 + 0x48);
    local_40 = *(undefined4 **)(lVar12 + 0x40);
    lVar8 = *(long *)(piVar13 + -6);
  }
  lVar8 = (**(code **)(*plVar7 + 0x28))(plVar7,4,piVar13,piVar13 + lVar8);
  lVar8 = lVar8 - (long)piVar13 >> 2;
  if (lVar8 != 0) {
    local_10 = PTR_DAT_00501ab8 + 0x18;
    FUN_00418208(&local_10,lVar8 << 1);
    iVar6 = *(int *)(lVar12 + 0x60);
    lVar16 = lVar8 - iVar6;
    if (0 < lVar16) {
      if (iVar6 < 0) {
        lVar16 = lVar8;
      }
      if (*(long *)(lVar12 + 0x18) == 0) {
        FUN_00416a24(&local_10,piVar13,lVar16);
        iVar6 = *(int *)(lVar12 + 0x60);
      }
      else {
        FUN_0041690c(&local_10,0,*(undefined8 *)(local_10 + -0x18),lVar16 << 1,0);
        if (-1 < *(int *)(local_10 + -8)) {
          FUN_0041673c(&local_10);
        }
        lVar9 = FUN_0040352c(local_10,*(undefined4 *)(lVar12 + 0x28),*(undefined8 *)(lVar12 + 0x10),
                             *(undefined8 *)(lVar12 + 0x18),piVar13,piVar13 + lVar16);
        if (-1 < *(int *)(local_10 + -8)) {
          FUN_0041673c(&local_10);
        }
        uVar11 = lVar9 - (long)local_10 >> 2;
        if (*(ulong *)(local_10 + -0x18) < uVar11) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase");
        }
        FUN_00416540(&local_10,uVar11,*(ulong *)(local_10 + -0x18) - uVar11,0);
        iVar6 = *(int *)(lVar12 + 0x60);
      }
    }
    if (0 < iVar6) {
      uVar3 = *(undefined4 *)(lVar12 + 0x24);
      lVar9 = *(long *)(local_10 + -0x18);
      uVar11 = lVar9 + 1;
      if ((*(ulong *)(local_10 + -0x10) < uVar11) || (0 < *(int *)(local_10 + -8))) {
        FUN_00418208(&local_10,uVar11);
        lVar9 = *(long *)(local_10 + -0x18);
      }
      *(undefined4 *)(local_10 + lVar9 * 4) = uVar3;
      if (local_10 + -0x18 != PTR_DAT_00501ab8) {
        *(undefined4 *)(local_10 + -8) = 0;
        *(ulong *)(local_10 + -0x18) = uVar11;
        *(undefined4 *)(local_10 + uVar11 * 4) = 0;
      }
      if (lVar16 < 0) {
        FUN_0041885c(&local_10,-lVar16,*(undefined4 *)(lVar12 + 0x70));
        FUN_00418664(&local_10,piVar13,lVar8);
      }
      else {
        FUN_00418664(&local_10,piVar13 + lVar16,(long)*(int *)(lVar12 + 0x60));
      }
    }
    uVar2 = *(uint *)(param_4 + 0x18) & 0xb0;
    if ((*(uint *)(param_4 + 0x18) >> 9 & 1) == 0) {
      lVar8 = 0;
    }
    else {
      lVar8 = *(long *)(lVar12 + 0x38);
    }
    uVar11 = uVar17 + *(long *)(local_10 + -0x18) + lVar8;
    local_8 = PTR_DAT_00501ab8 + 0x18;
    FUN_00418208(&local_8,uVar11 * 2);
    uVar14 = *(ulong *)(param_4 + 0x10);
    lVar8 = 0;
    bVar5 = uVar11 < uVar14 && uVar2 == 0x10;
    do {
      switch(*(undefined1 *)((long)local_18 + lVar8)) {
      case 0:
        if (bVar5) {
LAB_00404540:
          FUN_0041885c(&local_8,uVar14 - uVar11,param_5);
        }
        break;
      case 1:
        if (bVar5) goto LAB_00404540;
        lVar16 = *(long *)(local_8 + -0x18);
        uVar1 = lVar16 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
          FUN_00418208(&local_8,uVar1);
          lVar16 = *(long *)(local_8 + -0x18);
        }
        *(undefined4 *)(local_8 + lVar16 * 4) = param_5;
        if (local_8 + -0x18 != PTR_DAT_00501ab8) {
          *(undefined4 *)(local_8 + -8) = 0;
          *(ulong *)(local_8 + -0x18) = uVar1;
          *(undefined4 *)(local_8 + uVar1 * 4) = 0;
        }
        break;
      case 2:
        if ((*(uint *)(param_4 + 0x18) >> 9 & 1) != 0) {
          FUN_00418664(&local_8,*(undefined8 *)(lVar12 + 0x30),*(undefined8 *)(lVar12 + 0x38));
        }
        break;
      case 3:
        if (uVar17 != 0) {
          uVar3 = *local_40;
          lVar16 = *(long *)(local_8 + -0x18);
          uVar1 = lVar16 + 1;
          if ((*(ulong *)(local_8 + -0x10) < uVar1) || (0 < *(int *)(local_8 + -8))) {
            FUN_00418208(&local_8,uVar1);
            lVar16 = *(long *)(local_8 + -0x18);
          }
          *(undefined4 *)(local_8 + lVar16 * 4) = uVar3;
          if (local_8 + -0x18 != PTR_DAT_00501ab8) {
            *(undefined4 *)(local_8 + -8) = 0;
            *(ulong *)(local_8 + -0x18) = uVar1;
            *(undefined4 *)(local_8 + uVar1 * 4) = 0;
          }
        }
        break;
      case 4:
        FUN_00418364(&local_8,&local_10);
      }
      lVar8 = lVar8 + 1;
    } while (lVar8 != 4);
    if (1 < uVar17) {
      FUN_00418664(&local_8,local_40 + 1,uVar17 - 1);
    }
    uVar17 = *(ulong *)(local_8 + -0x18);
    if (uVar17 < uVar14) {
      if (uVar2 == 0x20) {
        FUN_0041885c(&local_8,uVar14 - uVar17,param_5);
        uVar17 = uVar14;
      }
      else {
        FUN_0041690c(&local_8,0,0,uVar14 - uVar17,param_5);
        uVar17 = uVar14;
      }
    }
    if (((param_3 & 0xff) == 0) &&
       (lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_8,(long)(int)uVar17),
       (int)uVar17 != lVar8)) {
      uVar15 = 1;
    }
    if (local_8 + -0x18 != PTR_DAT_00501ab8) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = *(int *)(local_8 + -8);
        *(int *)(local_8 + -8) = iVar6 + -1;
      }
      else {
        piVar13 = (int *)(local_8 + -8);
        do {
          iVar6 = *piVar13;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar5) {
            *piVar13 = iVar6 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (iVar6 < 1) {
        operator_delete(local_8 + -0x18);
      }
    }
    if (local_10 + -0x18 != PTR_DAT_00501ab8) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = *(int *)(local_10 + -8);
        *(int *)(local_10 + -8) = iVar6 + -1;
      }
      else {
        piVar13 = (int *)(local_10 + -8);
        do {
          iVar6 = *piVar13;
          cVar4 = '\x01';
          bVar5 = (bool)ExclusiveMonitorPass(piVar13,0x10);
          if (bVar5) {
            *piVar13 = iVar6 + -1;
            cVar4 = ExclusiveMonitorsStatus();
          }
        } while (cVar4 != '\0');
      }
      if (iVar6 < 1) {
        operator_delete(local_10 + -0x18);
      }
    }
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar18._8_8_ = param_3 & 0xffffffffffffff00 | uVar15;
  auVar18._0_8_ = param_2;
  return auVar18;
}


==================================================================

### FUNC 004047d0 (468 bytes) name=FUN_004047d0

undefined1  [16]
FUN_004047d0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            char param_5,long param_6,undefined4 param_7)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long *plVar4;
  undefined *puVar5;
  int *piVar6;
  undefined1 auVar7 [16];
  undefined1 auStack_1400 [4960];
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  FUN_003ece1c(auStack_10,param_6 + 0xd0);
  plVar4 = (long *)FUN_00401028(auStack_10);
  local_8 = FUN_003ed450();
  iVar3 = FUN_003dd040(param_1,&local_8,auStack_1400,0,"%.*Lf",0);
  FUN_00417644(&local_8,(long)iVar3,0,auStack_18);
  if (-1 < *(int *)(local_8 + -8)) {
    FUN_0041673c(&local_8);
  }
  (**(code **)(*plVar4 + 0x58))(plVar4,auStack_1400,auStack_1400 + iVar3,local_8);
  if (param_5 == '\0') {
    auVar7 = FUN_004040b4(param_2,param_3,param_4,param_6,param_7,&local_8);
    puVar5 = (undefined *)(local_8 + -0x18);
    if (puVar5 == PTR_DAT_00501ab8) goto LAB_004048f4;
  }
  else {
    auVar7 = FUN_00403998(param_2,param_3,param_4,param_6,param_7,&local_8);
    puVar5 = (undefined *)(local_8 + -0x18);
    if (puVar5 == PTR_DAT_00501ab8) goto LAB_004048f4;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar3 = *(int *)(local_8 + -8);
    *(int *)(local_8 + -8) = iVar3 + -1;
  }
  else {
    piVar6 = (int *)(local_8 + -8);
    do {
      iVar3 = *piVar6;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
      if (bVar2) {
        *piVar6 = iVar3 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar3 < 1) {
    operator_delete(puVar5);
  }
LAB_004048f4:
  FUN_003ed708(auStack_10);
  return auVar7;
}


==================================================================

### FUNC 004049e0 (64 bytes) name=FUN_004049e0

void FUN_004049e0(void)

{
  char in_w3;
  
  if (in_w3 == '\0') {
    FUN_004040b4();
    return;
  }
  FUN_00403998();
  return;
}


==================================================================

### FUNC 00404a20 (476 bytes) name=FUN_00404a20

void FUN_00404a20(long param_1,wchar_t param_2,wchar_t *param_3,wchar_t *param_4,long param_5,
                 size_t param_6)

{
  uint uVar1;
  wchar_t wVar2;
  wchar_t wVar3;
  long *plVar4;
  wchar_t *__s;
  size_t __n;
  long lVar5;
  long lVar6;
  
  uVar1 = *(uint *)(param_1 + 0x18) & 0xb0;
  __n = param_5 - param_6;
  if (uVar1 == 0x20) {
    wmemcpy(param_3,param_4,param_6);
    wmemset(param_3 + param_6,param_2,__n);
    return;
  }
  if (uVar1 != 0x10) goto LAB_00404a5c;
  plVar4 = (long *)FUN_00401028(param_1 + 0xd0);
  wVar2 = (**(code **)(*plVar4 + 0x50))(plVar4,0x2d);
  wVar3 = *param_4;
  if (wVar3 != wVar2) {
    wVar2 = (**(code **)(*plVar4 + 0x50))(plVar4,0x2b);
    wVar3 = *param_4;
    if (wVar3 != wVar2) {
      wVar3 = (**(code **)(*plVar4 + 0x50))(plVar4,0x30);
      if ((*param_4 == wVar3) && (1 < (long)param_6)) {
        wVar3 = (**(code **)(*plVar4 + 0x50))(plVar4,0x78);
        if (param_4[1] != wVar3) {
          wVar3 = (**(code **)(*plVar4 + 0x50))(plVar4,0x58);
          if (param_4[1] != wVar3) goto LAB_00404a5c;
        }
        __s = param_3 + 2;
        lVar6 = 8;
        lVar5 = 2;
        *param_3 = *param_4;
        param_3[1] = param_4[1];
      }
      else {
LAB_00404a5c:
        lVar6 = 0;
        lVar5 = 0;
        __s = param_3;
      }
      goto LAB_00404a64;
    }
  }
  __s = param_3 + 1;
  *param_3 = wVar3;
  lVar6 = 4;
  lVar5 = 1;
LAB_00404a64:
  wmemset(__s,param_2,__n);
  wmemcpy(__s + __n,(wchar_t *)((long)param_4 + lVar6),param_6 - lVar5);
  return;
}


==================================================================

### FUNC 00404bfc (64 bytes) name=FUN_00404bfc

void FUN_00404bfc(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,int *param_7)

{
  FUN_00404a20(param_4,param_2,param_5,param_6,param_3,(long)*param_7);
  *param_7 = (int)param_3;
  return;
}


==================================================================

### FUNC 00404c3c (808 bytes) name=FUN_00404c3c

undefined1  [16]
FUN_00404c3c(undefined8 param_1,undefined8 param_2,long *param_3,char param_4,long param_5,
            undefined4 param_6,undefined1 param_7)

{
  bool bVar1;
  int iVar2;
  char cVar3;
  long lVar4;
  long lVar5;
  long *plVar6;
  void *pvVar7;
  undefined8 *puVar8;
  int iVar9;
  undefined1 *puVar10;
  long lVar11;
  size_t sVar12;
  size_t sVar13;
  undefined1 *puVar14;
  long lVar15;
  long lVar16;
  undefined1 auVar17 [16];
  int local_1c;
  undefined8 local_18;
  undefined1 auStack_10 [16];
  
  lVar5 = FUN_003edb10(&DAT_005476f8);
  lVar16 = *(long *)(*(long *)(param_5 + 0xd0) + 0x18);
  lVar15 = *(long *)(lVar16 + lVar5 * 8);
  if (lVar15 == 0) {
    puVar8 = operator_new(0x150);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f8b00;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined4 *)(puVar8 + 9) = 0;
    *(undefined4 *)((long)puVar8 + 0x4c) = 0;
    *(undefined1 *)(puVar8 + 0x29) = 0;
    FUN_00401814(puVar8,param_5 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_5 + 0xd0),puVar8,lVar5);
    lVar15 = *(long *)(lVar16 + lVar5 * 8);
  }
  lVar5 = *(long *)(param_5 + 8);
  iVar9 = (int)lVar5;
  if (lVar5 < 0) {
    iVar9 = 6;
    lVar5 = 6;
  }
  FUN_003ee004(param_5,auStack_10,param_7);
  iVar2 = iVar9 + 0x1e;
  if ((*(uint *)(param_5 + 0x18) & 4) != 0) {
    iVar2 = iVar9 + 0x138;
  }
  lVar16 = -((long)iVar2 + 0x1eU & 0xfffffffffffffff0);
  local_18 = FUN_003ed450();
  local_1c = FUN_003dd040(param_1,&local_18,&stack0xffffffffffffff60 + lVar16,0,auStack_10,lVar5);
  plVar6 = (long *)FUN_00401028(param_5 + 0xd0);
  lVar5 = -((long)local_1c * 4 + 0x1eU & 0xfffffffffffffff0);
  (**(code **)(*plVar6 + 0x58))
            (plVar6,&stack0xffffffffffffff60 + lVar16,&stack0xffffffffffffff60 + local_1c + lVar16,
             &stack0xffffffffffffff60 + lVar5 + lVar16);
  iVar9 = local_1c;
  sVar12 = (size_t)local_1c;
  pvVar7 = memchr(&stack0xffffffffffffff60 + lVar16,0x2e,sVar12);
  if (pvVar7 == (void *)0x0) {
    puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar16;
    if ((*(char *)(lVar15 + 0x20) == '\0') ||
       ((2 < iVar9 &&
        (((puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar16,
          0x39 < (byte)(&stack0xffffffffffffff61)[lVar16] ||
          (puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar16,
          9 < (byte)((&stack0xffffffffffffff62)[lVar16] - 0x30))) ||
         (puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar16,
         (byte)(&stack0xffffffffffffff61)[lVar16] < 0x30)))))) goto LAB_00404d9c;
    puVar10 = (undefined1 *)0x0;
  }
  else {
    cVar3 = *(char *)(lVar15 + 0x20);
    puVar10 = &stack0xffffffffffffff60 +
              ((long)pvVar7 - (long)(&stack0xffffffffffffff60 + lVar16)) * 4 + lVar5 + lVar16;
    *(undefined4 *)
     (&stack0xffffffffffffff60 +
     ((long)pvVar7 - (long)(&stack0xffffffffffffff60 + lVar16)) * 4 + lVar5 + lVar16) =
         *(undefined4 *)(lVar15 + 0x48);
    puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar16;
    if (cVar3 == '\0') goto LAB_00404d9c;
  }
  lVar4 = -(sVar12 * 8 + 0x1e & 0xfffffffffffffff0);
  bVar1 = ((&stack0xffffffffffffff60)[lVar16] - 0x2b & 0xfd) == 0;
  if (bVar1) {
    *(undefined4 *)(&stack0xffffffffffffff60 + lVar4 + lVar5 + lVar16) =
         *(undefined4 *)(&stack0xffffffffffffff60 + lVar5 + lVar16);
    lVar11 = 4;
    local_1c = iVar9 + -1;
  }
  else {
    lVar11 = 0;
  }
  FUN_00403884(param_2,*(undefined8 *)(lVar15 + 0x10),*(undefined8 *)(lVar15 + 0x18),
               *(undefined4 *)(lVar15 + 0x4c),puVar10,
               &stack0xffffffffffffff60 + lVar11 + lVar4 + lVar5 + lVar16,
               &stack0xffffffffffffff60 + lVar11 + lVar5 + lVar16,&local_1c);
  local_1c = (uint)bVar1 + local_1c;
  sVar12 = (size_t)local_1c;
  puVar14 = &stack0xffffffffffffff60 + lVar4 + lVar5 + lVar16;
LAB_00404d9c:
  lVar5 = *(long *)(param_5 + 0x10);
  sVar13 = sVar12;
  puVar10 = puVar14;
  if ((long)sVar12 < lVar5) {
    lVar15 = -(lVar5 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar10 = puVar14 + lVar15;
    sVar13 = (size_t)(int)lVar5;
    FUN_00404a20(param_5,param_6,(long)puVar14 + lVar15,puVar14,lVar5,sVar12);
    local_1c = (int)lVar5;
  }
  *(undefined8 *)(param_5 + 0x10) = 0;
  if (param_4 == '\0') {
    sVar12 = (**(code **)(*param_3 + 0x60))(param_3,puVar10,sVar13);
    param_4 = sVar13 != sVar12;
  }
  auVar17[8] = param_4;
  auVar17._0_8_ = param_3;
  auVar17._9_7_ = 0;
  return auVar17;
}


==================================================================

### FUNC 00404f94 (24 bytes) name=FUN_00404f94

void FUN_00404f94(void)

{
  FUN_00404c3c();
  return;
}


==================================================================

### FUNC 00404fac (788 bytes) name=FUN_00404fac

undefined1  [16]
FUN_00404fac(undefined8 param_1,undefined8 param_2,long *param_3,char param_4,long param_5,
            undefined4 param_6,undefined1 param_7)

{
  bool bVar1;
  char cVar2;
  long lVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  void *pvVar7;
  undefined8 *puVar8;
  int iVar9;
  undefined1 *puVar10;
  long lVar11;
  size_t sVar12;
  size_t sVar13;
  undefined1 *puVar14;
  long lVar15;
  long lVar16;
  undefined1 auVar17 [16];
  int local_1c;
  undefined8 local_18;
  undefined1 auStack_10 [16];
  
  lVar5 = FUN_003edb10(&DAT_005476f8);
  lVar15 = *(long *)(*(long *)(param_5 + 0xd0) + 0x18);
  lVar16 = *(long *)(lVar15 + lVar5 * 8);
  if (lVar16 == 0) {
    puVar8 = operator_new(0x150);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f8b00;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined4 *)(puVar8 + 9) = 0;
    *(undefined4 *)((long)puVar8 + 0x4c) = 0;
    *(undefined1 *)(puVar8 + 0x29) = 0;
    FUN_00401814(puVar8,param_5 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_5 + 0xd0),puVar8,lVar5);
    lVar16 = *(long *)(lVar15 + lVar5 * 8);
  }
  lVar5 = *(long *)(param_5 + 8);
  iVar9 = (int)lVar5;
  if (lVar5 < 0) {
    iVar9 = 6;
    lVar5 = 6;
  }
  FUN_003ee004(param_5,auStack_10,param_7);
  iVar4 = iVar9 + 0x42;
  if ((*(uint *)(param_5 + 0x18) >> 2 & 1) != 0) {
    iVar4 = iVar9 + 0x1348;
  }
  lVar15 = -((long)iVar4 + 0x1eU & 0xfffffffffffffff0);
  local_18 = FUN_003ed450();
  local_1c = FUN_003dd040(param_1,&local_18,&stack0xffffffffffffff60 + lVar15,0,auStack_10,lVar5);
  plVar6 = (long *)FUN_00401028(param_5 + 0xd0);
  lVar5 = -((long)local_1c * 4 + 0x1eU & 0xfffffffffffffff0);
  (**(code **)(*plVar6 + 0x58))
            (plVar6,&stack0xffffffffffffff60 + lVar15,&stack0xffffffffffffff60 + local_1c + lVar15,
             &stack0xffffffffffffff60 + lVar5 + lVar15);
  iVar9 = local_1c;
  sVar12 = (size_t)local_1c;
  pvVar7 = memchr(&stack0xffffffffffffff60 + lVar15,0x2e,sVar12);
  if (pvVar7 == (void *)0x0) {
    puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar15;
    if ((*(char *)(lVar16 + 0x20) == '\0') ||
       ((2 < iVar9 &&
        (((puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar15,
          0x39 < (byte)(&stack0xffffffffffffff61)[lVar15] ||
          (puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar15,
          9 < (byte)((&stack0xffffffffffffff62)[lVar15] - 0x30))) ||
         (puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar15,
         (byte)(&stack0xffffffffffffff61)[lVar15] < 0x30)))))) goto LAB_004050fc;
    puVar10 = (undefined1 *)0x0;
  }
  else {
    cVar2 = *(char *)(lVar16 + 0x20);
    puVar10 = &stack0xffffffffffffff60 +
              ((long)pvVar7 - (long)(&stack0xffffffffffffff60 + lVar15)) * 4 + lVar5 + lVar15;
    *(undefined4 *)
     (&stack0xffffffffffffff60 +
     ((long)pvVar7 - (long)(&stack0xffffffffffffff60 + lVar15)) * 4 + lVar5 + lVar15) =
         *(undefined4 *)(lVar16 + 0x48);
    puVar14 = &stack0xffffffffffffff60 + lVar5 + lVar15;
    if (cVar2 == '\0') goto LAB_004050fc;
  }
  lVar3 = -(sVar12 * 8 + 0x1e & 0xfffffffffffffff0);
  bVar1 = ((&stack0xffffffffffffff60)[lVar15] - 0x2b & 0xfd) == 0;
  if (bVar1) {
    *(undefined4 *)(&stack0xffffffffffffff60 + lVar3 + lVar5 + lVar15) =
         *(undefined4 *)(&stack0xffffffffffffff60 + lVar5 + lVar15);
    lVar11 = 4;
    local_1c = iVar9 + -1;
  }
  else {
    lVar11 = 0;
  }
  FUN_00403884(param_2,*(undefined8 *)(lVar16 + 0x10),*(undefined8 *)(lVar16 + 0x18),
               *(undefined4 *)(lVar16 + 0x4c),puVar10,
               &stack0xffffffffffffff60 + lVar11 + lVar3 + lVar5 + lVar15,
               &stack0xffffffffffffff60 + lVar11 + lVar5 + lVar15,&local_1c);
  local_1c = (uint)bVar1 + local_1c;
  sVar12 = (size_t)local_1c;
  puVar14 = &stack0xffffffffffffff60 + lVar3 + lVar5 + lVar15;
LAB_004050fc:
  lVar5 = *(long *)(param_5 + 0x10);
  sVar13 = sVar12;
  puVar10 = puVar14;
  if ((long)sVar12 < lVar5) {
    lVar15 = -(lVar5 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar10 = puVar14 + lVar15;
    sVar13 = (size_t)(int)lVar5;
    FUN_00404a20(param_5,param_6,(long)puVar14 + lVar15,puVar14,lVar5,sVar12);
    local_1c = (int)lVar5;
  }
  *(undefined8 *)(param_5 + 0x10) = 0;
  if (param_4 == '\0') {
    sVar12 = (**(code **)(*param_3 + 0x60))(param_3,puVar10,sVar13);
    param_4 = sVar13 != sVar12;
  }
  auVar17[8] = param_4;
  auVar17._0_8_ = param_3;
  auVar17._9_7_ = 0;
  return auVar17;
}


==================================================================

### FUNC 004052f0 (24 bytes) name=FUN_004052f0

void FUN_004052f0(void)

{
  FUN_00404fac();
  return;
}


==================================================================

### FUNC 00405308 (172 bytes) name=FUN_00405308

ulong FUN_00405308(undefined4 *param_1,ulong param_2,long param_3,uint param_4,char param_5)

{
  long lVar1;
  ulong uVar2;
  undefined4 *puVar3;
  
  puVar3 = param_1;
  if (param_5 == '\0') {
    if ((param_4 & 0x4a) == 0x40) {
      do {
        uVar2 = param_2 & 7;
        param_2 = param_2 >> 3;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined4 *)(param_3 + (uVar2 + 4) * 4);
      } while (param_2 != 0);
    }
    else {
      lVar1 = 0x14;
      if ((param_4 & 0x4000) == 0) {
        lVar1 = 4;
      }
      do {
        uVar2 = param_2 & 0xf;
        param_2 = param_2 >> 4;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined4 *)(param_3 + (uVar2 + lVar1) * 4);
      } while (param_2 != 0);
    }
  }
  else {
    do {
      uVar2 = param_2 / 10;
      puVar3 = puVar3 + -1;
      *puVar3 = *(undefined4 *)(param_3 + (param_2 % 10 + 4) * 4);
      param_2 = uVar2;
    } while (uVar2 != 0);
  }
  return (ulong)((long)param_1 - (long)puVar3) >> 2;
}


==================================================================

### FUNC 004053b4 (632 bytes) name=FUN_004053b4

undefined1  [16]
FUN_004053b4(undefined8 param_1,long *param_2,char param_3,long param_4,undefined4 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  undefined4 *puVar12;
  long lVar13;
  long lVar14;
  undefined1 auVar15 [16];
  undefined4 auStack_120 [40];
  undefined1 auStack_80 [16];
  
  lVar9 = FUN_003edb10(&DAT_005476f8);
  lVar13 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar14 = *(long *)(lVar13 + lVar9 * 8);
  if (lVar14 == 0) {
    puVar10 = operator_new(0x150);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f8b00;
    puVar10[2] = 0;
    puVar10[3] = 0;
    *(undefined1 *)(puVar10 + 4) = 0;
    puVar10[5] = 0;
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    *(undefined4 *)(puVar10 + 9) = 0;
    *(undefined4 *)((long)puVar10 + 0x4c) = 0;
    *(undefined1 *)(puVar10 + 0x29) = 0;
    FUN_00401814(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar9);
    lVar14 = *(long *)(lVar13 + lVar9 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar4 = auStack_120;
  puVar5 = auStack_120;
  uVar1 = uVar2 & 0x4a;
  bVar6 = uVar1 != 8;
  bVar7 = uVar1 != 0x40;
  lVar9 = -param_6;
  if ((bVar6 && bVar7) <= (0 < param_6)) {
    lVar9 = param_6;
  }
  iVar8 = FUN_00405308(auStack_80,lVar9,lVar14 + 0x50,uVar2,bVar6 && bVar7);
  puVar11 = auStack_120 + (0x28 - iVar8);
  if (*(char *)(lVar14 + 0x20) == '\0') {
    puVar12 = puVar11;
    if (!bVar6 || !bVar7) {
LAB_0040556c:
      puVar11 = puVar12;
      if (((uVar2 >> 9 & 1) != 0) && (param_6 != 0)) {
        if (uVar1 == 0x40) {
          iVar8 = iVar8 + 1;
          puVar12[-1] = *(undefined4 *)(lVar14 + 0x60);
          puVar11 = puVar12 + -1;
        }
        else {
          puVar11 = puVar12 + -2;
          iVar8 = iVar8 + 2;
          puVar12[-1] = *(undefined4 *)(lVar14 + 0x50 + (((ulong)(uVar2 >> 0xe) & 1) + 2) * 4);
          *puVar11 = *(undefined4 *)(lVar14 + 0x60);
        }
      }
      goto LAB_00405474;
    }
  }
  else {
    lVar9 = -((-(ulong)(iVar8 + 1U >> 0x1f) & 0xfffffff800000000 | (ulong)(iVar8 + 1U) << 3) + 0x1e
             & 0xfffffffffffffff0);
    puVar5 = (undefined4 *)((long)auStack_120 + lVar9);
    puVar4 = (undefined4 *)((long)auStack_120 + lVar9);
    puVar12 = (undefined4 *)((long)auStack_120 + lVar9 + 8);
    lVar9 = FUN_0040352c(puVar12,*(undefined4 *)(lVar14 + 0x4c),*(undefined8 *)(lVar14 + 0x10),
                         *(undefined8 *)(lVar14 + 0x18),puVar11,puVar11 + iVar8);
    iVar8 = (int)((ulong)(lVar9 - (long)puVar12) >> 2);
    if (!bVar6 || !bVar7) goto LAB_0040556c;
  }
  puVar5 = puVar4;
  if (param_6 < 0) {
    iVar8 = iVar8 + 1;
    puVar12[-1] = *(undefined4 *)(lVar14 + 0x50);
    puVar11 = puVar12 + -1;
  }
  else {
    puVar11 = puVar12;
    if ((uVar2 >> 0xb & 1) != 0) {
      iVar8 = iVar8 + 1;
      puVar12[-1] = *(undefined4 *)(lVar14 + 0x54);
      puVar11 = puVar12 + -1;
    }
  }
LAB_00405474:
  lVar13 = *(long *)(param_4 + 0x10);
  lVar14 = (long)iVar8;
  puVar12 = puVar11;
  lVar9 = lVar14;
  if (lVar14 < lVar13) {
    lVar3 = -(lVar13 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar12 = (undefined4 *)((long)puVar5 + lVar3);
    lVar9 = (long)(int)lVar13;
    FUN_00404a20(param_4,param_5,(long)puVar5 + lVar3,puVar11,lVar13,lVar14);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar13 = (**(code **)(*param_2 + 0x60))(param_2,puVar12,lVar9);
    param_3 = lVar13 != lVar9;
  }
  auVar15[8] = param_3;
  auVar15._0_8_ = param_2;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 0040565c (540 bytes) name=FUN_0040565c

undefined1  [16]
FUN_0040565c(undefined8 param_1,long *param_2,ulong param_3,long param_4,wchar_t param_5,
            char param_6)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  undefined8 *puVar4;
  byte extraout_w1;
  ulong uVar5;
  int iVar6;
  size_t __n;
  long lVar7;
  undefined8 uVar8;
  undefined1 auVar9 [16];
  
  uVar1 = *(uint *)(param_4 + 0x18);
  uVar5 = param_3 & 0xff;
  if ((uVar1 & 1) == 0) {
    param_2 = (long *)FUN_004053b4();
    uVar5 = (ulong)extraout_w1;
    goto LAB_004056ac;
  }
  lVar2 = FUN_003edb10(&DAT_005476f8);
  lVar7 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar3 = *(long *)(lVar7 + lVar2 * 8);
  if (lVar3 == 0) {
    puVar4 = operator_new(0x150);
    *(undefined4 *)(puVar4 + 1) = 0;
    *puVar4 = &PTR_FUN_004f8b00;
    puVar4[2] = 0;
    puVar4[3] = 0;
    *(undefined1 *)(puVar4 + 4) = 0;
    puVar4[5] = 0;
    puVar4[6] = 0;
    puVar4[7] = 0;
    puVar4[8] = 0;
    *(undefined4 *)(puVar4 + 9) = 0;
    *(undefined4 *)((long)puVar4 + 0x4c) = 0;
    *(undefined1 *)(puVar4 + 0x29) = 0;
    FUN_00401814(puVar4,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar4,lVar2);
    lVar3 = *(long *)(lVar7 + lVar2 * 8);
    if (param_6 == '\0') goto LAB_004056fc;
LAB_00405780:
    uVar8 = *(undefined8 *)(lVar3 + 0x28);
    lVar2 = *(long *)(param_4 + 0x10);
    lVar3 = (long)*(int *)(lVar3 + 0x30);
    if (lVar3 < lVar2) goto LAB_00405714;
LAB_00405798:
    *(undefined8 *)(param_4 + 0x10) = 0;
    if ((char)param_3 != '\0') goto LAB_004056ac;
LAB_004057a0:
    lVar2 = (**(code **)(*param_2 + 0x60))(param_2,uVar8,lVar3);
    uVar5 = (ulong)(lVar3 != lVar2);
  }
  else {
    if (param_6 != '\0') goto LAB_00405780;
LAB_004056fc:
    uVar8 = *(undefined8 *)(lVar3 + 0x38);
    lVar2 = *(long *)(param_4 + 0x10);
    lVar3 = (long)*(int *)(lVar3 + 0x40);
    if (lVar2 <= lVar3) goto LAB_00405798;
LAB_00405714:
    __n = lVar2 - lVar3;
    lVar2 = -(__n * 4 + 0x1e & 0xfffffffffffffff0);
    wmemset((wchar_t *)(&stack0xffffffffffffff90 + lVar2),param_5,__n);
    *(undefined8 *)(param_4 + 0x10) = 0;
    iVar6 = (int)__n;
    if ((uVar1 & 0xb0) == 0x20) {
      if ((char)param_3 != '\0') goto LAB_004056ac;
      lVar7 = (**(code **)(*param_2 + 0x60))(param_2,uVar8,lVar3);
      if (lVar3 == lVar7) {
        lVar2 = (**(code **)(*param_2 + 0x60))(param_2,&stack0xffffffffffffff90 + lVar2,(long)iVar6)
        ;
        uVar5 = (ulong)(iVar6 != lVar2);
        goto LAB_004056ac;
      }
    }
    else {
      if ((param_3 & 0xff) != 0) goto LAB_004056ac;
      lVar2 = (**(code **)(*param_2 + 0x60))(param_2,&stack0xffffffffffffff90 + lVar2,(long)iVar6);
      if (iVar6 == lVar2) goto LAB_004057a0;
    }
    uVar5 = 1;
  }
LAB_004056ac:
  auVar9._8_8_ = param_3 & 0xffffffffffffff00 | uVar5;
  auVar9._0_8_ = param_2;
  return auVar9;
}


==================================================================

### FUNC 004058a8 (20 bytes) name=FUN_004058a8

void FUN_004058a8(void)

{
  FUN_004053b4();
  return;
}


==================================================================

### FUNC 004058bc (572 bytes) name=FUN_004058bc

undefined1  [16]
FUN_004058bc(undefined8 param_1,long *param_2,char param_3,long param_4,undefined4 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  int iVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  long lVar11;
  long lVar12;
  undefined1 auVar13 [16];
  undefined4 auStack_120 [40];
  undefined1 auStack_80 [16];
  
  lVar7 = FUN_003edb10(&DAT_005476f8);
  lVar11 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar11 + lVar7 * 8);
  if (lVar12 == 0) {
    puVar8 = operator_new(0x150);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f8b00;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined4 *)(puVar8 + 9) = 0;
    *(undefined4 *)((long)puVar8 + 0x4c) = 0;
    *(undefined1 *)(puVar8 + 0x29) = 0;
    FUN_00401814(puVar8,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar8,lVar7);
    lVar12 = *(long *)(lVar11 + lVar7 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar5 = auStack_120;
  puVar4 = auStack_120;
  uVar1 = uVar2 & 0x4a;
  iVar6 = FUN_00405308(auStack_80,param_6,lVar12 + 0x50,uVar2,uVar1 != 8 && uVar1 != 0x40);
  puVar10 = auStack_120 + (0x28 - iVar6);
  if (*(char *)(lVar12 + 0x20) != '\0') {
    lVar7 = -((-(ulong)(iVar6 + 1U >> 0x1f) & 0xfffffff800000000 | (ulong)(iVar6 + 1U) << 3) + 0x1e
             & 0xfffffffffffffff0);
    puVar4 = (undefined4 *)((long)auStack_120 + lVar7);
    puVar5 = (undefined4 *)((long)auStack_120 + lVar7);
    puVar9 = (undefined4 *)((long)auStack_120 + lVar7 + 8);
    lVar7 = FUN_0040352c(puVar9,*(undefined4 *)(lVar12 + 0x4c),*(undefined8 *)(lVar12 + 0x10),
                         *(undefined8 *)(lVar12 + 0x18),puVar10,puVar10 + iVar6);
    iVar6 = (int)((ulong)(lVar7 - (long)puVar9) >> 2);
    puVar10 = puVar9;
  }
  puVar9 = puVar10;
  if (((uVar1 == 8 || uVar1 == 0x40) && (puVar5 = puVar4, param_6 != 0)) && ((uVar2 >> 9 & 1) != 0))
  {
    if (uVar1 == 0x40) {
      iVar6 = iVar6 + 1;
      puVar10[-1] = *(undefined4 *)(lVar12 + 0x60);
      puVar9 = puVar10 + -1;
    }
    else {
      puVar9 = puVar10 + -2;
      iVar6 = iVar6 + 2;
      puVar10[-1] = *(undefined4 *)(lVar12 + 0x50 + (((ulong)(uVar2 >> 0xe) & 1) + 2) * 4);
      *puVar9 = *(undefined4 *)(lVar12 + 0x60);
    }
  }
  lVar11 = *(long *)(param_4 + 0x10);
  lVar12 = (long)iVar6;
  puVar10 = puVar9;
  lVar7 = lVar12;
  if (lVar12 < lVar11) {
    lVar3 = -(lVar11 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar10 = (undefined4 *)((long)puVar5 + lVar3);
    lVar7 = (long)(int)lVar11;
    FUN_00404a20(param_4,param_5,(long)puVar5 + lVar3,puVar9,lVar11,lVar12);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar11 = (**(code **)(*param_2 + 0x60))(param_2,puVar10,lVar7);
    param_3 = lVar7 != lVar11;
  }
  auVar13[8] = param_3;
  auVar13._0_8_ = param_2;
  auVar13._9_7_ = 0;
  return auVar13;
}


==================================================================

### FUNC 00405b28 (20 bytes) name=FUN_00405b28

void FUN_00405b28(void)

{
  FUN_004058bc();
  return;
}


==================================================================

### FUNC 00405b3c (92 bytes) name=FUN_00405b3c

void FUN_00405b3c(void)

{
  uint uVar1;
  long in_x3;
  
  uVar1 = *(uint *)(in_x3 + 0x18);
  *(uint *)(in_x3 + 0x18) = uVar1 & 0xffffbfb5 | 0x208;
  FUN_004058bc();
  *(uint *)(in_x3 + 0x18) = uVar1;
  return;
}


==================================================================

### FUNC 00405b98 (172 bytes) name=FUN_00405b98

ulong FUN_00405b98(undefined4 *param_1,ulong param_2,long param_3,uint param_4,char param_5)

{
  long lVar1;
  ulong uVar2;
  undefined4 *puVar3;
  
  puVar3 = param_1;
  if (param_5 == '\0') {
    if ((param_4 & 0x4a) == 0x40) {
      do {
        uVar2 = param_2 & 7;
        param_2 = param_2 >> 3;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined4 *)(param_3 + (uVar2 + 4) * 4);
      } while (param_2 != 0);
    }
    else {
      lVar1 = 0x14;
      if ((param_4 & 0x4000) == 0) {
        lVar1 = 4;
      }
      do {
        uVar2 = param_2 & 0xf;
        param_2 = param_2 >> 4;
        puVar3 = puVar3 + -1;
        *puVar3 = *(undefined4 *)(param_3 + (uVar2 + lVar1) * 4);
      } while (param_2 != 0);
    }
  }
  else {
    do {
      uVar2 = param_2 / 10;
      puVar3 = puVar3 + -1;
      *puVar3 = *(undefined4 *)(param_3 + (param_2 % 10 + 4) * 4);
      param_2 = uVar2;
    } while (uVar2 != 0);
  }
  return (ulong)((long)param_1 - (long)puVar3) >> 2;
}


==================================================================

### FUNC 00405c44 (632 bytes) name=FUN_00405c44

undefined1  [16]
FUN_00405c44(undefined8 param_1,long *param_2,char param_3,long param_4,undefined4 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined4 *puVar11;
  undefined4 *puVar12;
  long lVar13;
  long lVar14;
  undefined1 auVar15 [16];
  undefined4 auStack_120 [40];
  undefined1 auStack_80 [16];
  
  lVar9 = FUN_003edb10(&DAT_005476f8);
  lVar13 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar14 = *(long *)(lVar13 + lVar9 * 8);
  if (lVar14 == 0) {
    puVar10 = operator_new(0x150);
    *(undefined4 *)(puVar10 + 1) = 0;
    *puVar10 = &PTR_FUN_004f8b00;
    puVar10[2] = 0;
    puVar10[3] = 0;
    *(undefined1 *)(puVar10 + 4) = 0;
    puVar10[5] = 0;
    puVar10[6] = 0;
    puVar10[7] = 0;
    puVar10[8] = 0;
    *(undefined4 *)(puVar10 + 9) = 0;
    *(undefined4 *)((long)puVar10 + 0x4c) = 0;
    *(undefined1 *)(puVar10 + 0x29) = 0;
    FUN_00401814(puVar10,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar10,lVar9);
    lVar14 = *(long *)(lVar13 + lVar9 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar4 = auStack_120;
  puVar5 = auStack_120;
  uVar1 = uVar2 & 0x4a;
  bVar6 = uVar1 != 8;
  bVar7 = uVar1 != 0x40;
  lVar9 = -param_6;
  if ((bVar6 && bVar7) <= (0 < param_6)) {
    lVar9 = param_6;
  }
  iVar8 = FUN_00405b98(auStack_80,lVar9,lVar14 + 0x50,uVar2,bVar6 && bVar7);
  puVar11 = auStack_120 + (0x28 - iVar8);
  if (*(char *)(lVar14 + 0x20) == '\0') {
    puVar12 = puVar11;
    if (!bVar6 || !bVar7) {
LAB_00405dfc:
      puVar11 = puVar12;
      if (((uVar2 >> 9 & 1) != 0) && (param_6 != 0)) {
        if (uVar1 == 0x40) {
          iVar8 = iVar8 + 1;
          puVar12[-1] = *(undefined4 *)(lVar14 + 0x60);
          puVar11 = puVar12 + -1;
        }
        else {
          puVar11 = puVar12 + -2;
          iVar8 = iVar8 + 2;
          puVar12[-1] = *(undefined4 *)(lVar14 + 0x50 + (((ulong)(uVar2 >> 0xe) & 1) + 2) * 4);
          *puVar11 = *(undefined4 *)(lVar14 + 0x60);
        }
      }
      goto LAB_00405d04;
    }
  }
  else {
    lVar9 = -((-(ulong)(iVar8 + 1U >> 0x1f) & 0xfffffff800000000 | (ulong)(iVar8 + 1U) << 3) + 0x1e
             & 0xfffffffffffffff0);
    puVar5 = (undefined4 *)((long)auStack_120 + lVar9);
    puVar4 = (undefined4 *)((long)auStack_120 + lVar9);
    puVar12 = (undefined4 *)((long)auStack_120 + lVar9 + 8);
    lVar9 = FUN_0040352c(puVar12,*(undefined4 *)(lVar14 + 0x4c),*(undefined8 *)(lVar14 + 0x10),
                         *(undefined8 *)(lVar14 + 0x18),puVar11,puVar11 + iVar8);
    iVar8 = (int)((ulong)(lVar9 - (long)puVar12) >> 2);
    if (!bVar6 || !bVar7) goto LAB_00405dfc;
  }
  puVar5 = puVar4;
  if (param_6 < 0) {
    iVar8 = iVar8 + 1;
    puVar12[-1] = *(undefined4 *)(lVar14 + 0x50);
    puVar11 = puVar12 + -1;
  }
  else {
    puVar11 = puVar12;
    if ((uVar2 >> 0xb & 1) != 0) {
      iVar8 = iVar8 + 1;
      puVar12[-1] = *(undefined4 *)(lVar14 + 0x54);
      puVar11 = puVar12 + -1;
    }
  }
LAB_00405d04:
  lVar13 = *(long *)(param_4 + 0x10);
  lVar14 = (long)iVar8;
  puVar12 = puVar11;
  lVar9 = lVar14;
  if (lVar14 < lVar13) {
    lVar3 = -(lVar13 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar12 = (undefined4 *)((long)puVar5 + lVar3);
    lVar9 = (long)(int)lVar13;
    FUN_00404a20(param_4,param_5,(long)puVar5 + lVar3,puVar11,lVar13,lVar14);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar13 = (**(code **)(*param_2 + 0x60))(param_2,puVar12,lVar9);
    param_3 = lVar13 != lVar9;
  }
  auVar15[8] = param_3;
  auVar15._0_8_ = param_2;
  auVar15._9_7_ = 0;
  return auVar15;
}


==================================================================

### FUNC 00405eec (20 bytes) name=FUN_00405eec

void FUN_00405eec(void)

{
  FUN_00405c44();
  return;
}


==================================================================

### FUNC 00405f00 (572 bytes) name=FUN_00405f00

undefined1  [16]
FUN_00405f00(undefined8 param_1,long *param_2,char param_3,long param_4,undefined4 param_5,
            long param_6)

{
  uint uVar1;
  uint uVar2;
  long lVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  int iVar6;
  long lVar7;
  undefined8 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  long lVar11;
  long lVar12;
  undefined1 auVar13 [16];
  undefined4 auStack_120 [40];
  undefined1 auStack_80 [16];
  
  lVar7 = FUN_003edb10(&DAT_005476f8);
  lVar11 = *(long *)(*(long *)(param_4 + 0xd0) + 0x18);
  lVar12 = *(long *)(lVar11 + lVar7 * 8);
  if (lVar12 == 0) {
    puVar8 = operator_new(0x150);
    *(undefined4 *)(puVar8 + 1) = 0;
    *puVar8 = &PTR_FUN_004f8b00;
    puVar8[2] = 0;
    puVar8[3] = 0;
    *(undefined1 *)(puVar8 + 4) = 0;
    puVar8[5] = 0;
    puVar8[6] = 0;
    puVar8[7] = 0;
    puVar8[8] = 0;
    *(undefined4 *)(puVar8 + 9) = 0;
    *(undefined4 *)((long)puVar8 + 0x4c) = 0;
    *(undefined1 *)(puVar8 + 0x29) = 0;
    FUN_00401814(puVar8,param_4 + 0xd0);
    FUN_003ed980(*(undefined8 *)(param_4 + 0xd0),puVar8,lVar7);
    lVar12 = *(long *)(lVar11 + lVar7 * 8);
  }
  uVar2 = *(uint *)(param_4 + 0x18);
  puVar5 = auStack_120;
  puVar4 = auStack_120;
  uVar1 = uVar2 & 0x4a;
  iVar6 = FUN_00405b98(auStack_80,param_6,lVar12 + 0x50,uVar2,uVar1 != 8 && uVar1 != 0x40);
  puVar10 = auStack_120 + (0x28 - iVar6);
  if (*(char *)(lVar12 + 0x20) != '\0') {
    lVar7 = -((-(ulong)(iVar6 + 1U >> 0x1f) & 0xfffffff800000000 | (ulong)(iVar6 + 1U) << 3) + 0x1e
             & 0xfffffffffffffff0);
    puVar4 = (undefined4 *)((long)auStack_120 + lVar7);
    puVar5 = (undefined4 *)((long)auStack_120 + lVar7);
    puVar9 = (undefined4 *)((long)auStack_120 + lVar7 + 8);
    lVar7 = FUN_0040352c(puVar9,*(undefined4 *)(lVar12 + 0x4c),*(undefined8 *)(lVar12 + 0x10),
                         *(undefined8 *)(lVar12 + 0x18),puVar10,puVar10 + iVar6);
    iVar6 = (int)((ulong)(lVar7 - (long)puVar9) >> 2);
    puVar10 = puVar9;
  }
  puVar9 = puVar10;
  if (((uVar1 == 8 || uVar1 == 0x40) && (puVar5 = puVar4, param_6 != 0)) && ((uVar2 >> 9 & 1) != 0))
  {
    if (uVar1 == 0x40) {
      iVar6 = iVar6 + 1;
      puVar10[-1] = *(undefined4 *)(lVar12 + 0x60);
      puVar9 = puVar10 + -1;
    }
    else {
      puVar9 = puVar10 + -2;
      iVar6 = iVar6 + 2;
      puVar10[-1] = *(undefined4 *)(lVar12 + 0x50 + (((ulong)(uVar2 >> 0xe) & 1) + 2) * 4);
      *puVar9 = *(undefined4 *)(lVar12 + 0x60);
    }
  }
  lVar11 = *(long *)(param_4 + 0x10);
  lVar12 = (long)iVar6;
  puVar10 = puVar9;
  lVar7 = lVar12;
  if (lVar12 < lVar11) {
    lVar3 = -(lVar11 * 4 + 0x1eU & 0xfffffffffffffff0);
    puVar10 = (undefined4 *)((long)puVar5 + lVar3);
    lVar7 = (long)(int)lVar11;
    FUN_00404a20(param_4,param_5,(long)puVar5 + lVar3,puVar9,lVar11,lVar12);
  }
  *(undefined8 *)(param_4 + 0x10) = 0;
  if (param_3 == '\0') {
    lVar11 = (**(code **)(*param_2 + 0x60))(param_2,puVar10,lVar7);
    param_3 = lVar7 != lVar11;
  }
  auVar13[8] = param_3;
  auVar13._0_8_ = param_2;
  auVar13._9_7_ = 0;
  return auVar13;
}


==================================================================

### FUNC 0040616c (20 bytes) name=FUN_0040616c

void FUN_0040616c(void)

{
  FUN_00405f00();
  return;
}


==================================================================

### FUNC 00406180 (224 bytes) name=FUN_00406180

long FUN_00406180(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_00547710);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0xa0);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f8ae0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  *(undefined4 *)((long)puVar3 + 0x24) = 0;
  *(undefined4 *)(puVar3 + 5) = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  puVar3[0xb] = 0;
  *(undefined4 *)(puVar3 + 0xc) = 0;
  *(undefined1 *)((long)puVar3 + 100) = 0;
  *(undefined1 *)((long)puVar3 + 0x65) = 0;
  *(undefined1 *)((long)puVar3 + 0x66) = 0;
  *(undefined1 *)((long)puVar3 + 0x67) = 0;
  *(undefined1 *)(puVar3 + 0xd) = 0;
  *(undefined1 *)((long)puVar3 + 0x69) = 0;
  *(undefined1 *)((long)puVar3 + 0x6a) = 0;
  *(undefined1 *)((long)puVar3 + 0x6b) = 0;
  *(undefined1 *)(puVar3 + 0x13) = 0;
  FUN_00401e74(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 00406290 (224 bytes) name=FUN_00406290

long FUN_00406290(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_00547718);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0xa0);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f8ac0;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  *(undefined4 *)((long)puVar3 + 0x24) = 0;
  *(undefined4 *)(puVar3 + 5) = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  puVar3[9] = 0;
  puVar3[10] = 0;
  puVar3[0xb] = 0;
  *(undefined4 *)(puVar3 + 0xc) = 0;
  *(undefined1 *)((long)puVar3 + 100) = 0;
  *(undefined1 *)((long)puVar3 + 0x65) = 0;
  *(undefined1 *)((long)puVar3 + 0x66) = 0;
  *(undefined1 *)((long)puVar3 + 0x67) = 0;
  *(undefined1 *)(puVar3 + 0xd) = 0;
  *(undefined1 *)((long)puVar3 + 0x69) = 0;
  *(undefined1 *)((long)puVar3 + 0x6a) = 0;
  *(undefined1 *)((long)puVar3 + 0x6b) = 0;
  *(undefined1 *)(puVar3 + 0x13) = 0;
  FUN_00402594(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 004063a0 (180 bytes) name=FUN_004063a0

long FUN_004063a0(undefined8 param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  undefined8 *puVar3;
  long lVar4;
  
  lVar1 = FUN_003edb10(&DAT_005476f8);
  lVar4 = *(long *)(*param_2 + 0x18);
  lVar2 = *(long *)(lVar4 + lVar1 * 8);
  if (lVar2 != 0) {
    return lVar2;
  }
  puVar3 = operator_new(0x150);
  *(undefined4 *)(puVar3 + 1) = 0;
  *puVar3 = &PTR_FUN_004f8b00;
  puVar3[2] = 0;
  puVar3[3] = 0;
  *(undefined1 *)(puVar3 + 4) = 0;
  puVar3[5] = 0;
  puVar3[6] = 0;
  puVar3[7] = 0;
  puVar3[8] = 0;
  *(undefined4 *)(puVar3 + 9) = 0;
  *(undefined4 *)((long)puVar3 + 0x4c) = 0;
  *(undefined1 *)(puVar3 + 0x29) = 0;
  FUN_00401814(puVar3,param_2);
  FUN_003ed980(*param_2,puVar3,lVar1);
  return *(long *)(lVar4 + lVar1 * 8);
}


==================================================================

### FUNC 00406484 (148 bytes) name=FUN_00406484

ulong FUN_00406484(long *param_1)

{
  ulong uVar1;
  long *plVar2;
  
  plVar2 = (long *)*param_1;
  if (plVar2 == (long *)0x0) {
    return 0xffffffff;
  }
  if (*(uint *)(param_1 + 1) != 0xffffffff) {
    return (ulong)*(uint *)(param_1 + 1);
  }
  if ((uint *)plVar2[2] < (uint *)plVar2[3]) {
    uVar1 = (ulong)*(uint *)plVar2[2];
  }
  else {
    uVar1 = (**(code **)(*plVar2 + 0x48))(plVar2);
  }
  if ((int)uVar1 != -1) {
    *(int *)(param_1 + 1) = (int)uVar1;
    return uVar1;
  }
  *param_1 = 0;
  return uVar1;
}


==================================================================

### FUNC 00406518 (892 bytes) name=FUN_00406518

undefined1  [16]
FUN_00406518(undefined8 param_1,long *param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,int *param_6,long param_7,long param_8,long param_9,uint *param_10)

{
  wchar_t wVar1;
  long lVar2;
  undefined1 auVar3 [16];
  int iVar4;
  int iVar5;
  int iVar6;
  wchar_t wVar7;
  long *plVar8;
  ulong uVar9;
  size_t sVar10;
  ulong uVar11;
  long lVar12;
  ulong uVar13;
  wchar_t *__s;
  ulong uVar14;
  undefined8 local_20;
  undefined8 uStack_18;
  long *local_10;
  int local_8;
  undefined4 uStack_4;
  
  local_8 = (int)param_3;
  uStack_4 = (undefined4)((ulong)param_3 >> 0x20);
  local_20 = param_4;
  uStack_18 = param_5;
  local_10 = param_2;
  plVar8 = (long *)FUN_00401028(param_9 + 0xd0);
  lVar2 = -(param_8 * 4 + 0x1eU & 0xfffffffffffffff0);
  iVar4 = FUN_00406484(&local_10);
  iVar5 = FUN_00406484(&local_20);
  if (((iVar4 == -1) != (iVar5 == -1)) && (iVar4 = FUN_00406484(&local_10), param_8 != 0)) {
    lVar12 = 0;
    uVar11 = 0;
    do {
      while ((iVar5 = **(int **)(param_7 + lVar12 * 8), iVar4 == iVar5 ||
             (iVar5 = (**(code **)(*plVar8 + 0x30))(plVar8,iVar5), iVar4 == iVar5))) {
        *(int *)(&stack0xffffffffffffff60 + uVar11 * 4 + lVar2) = (int)lVar12;
        lVar12 = lVar12 + 1;
        uVar11 = uVar11 + 1;
        if (lVar12 == param_8) goto LAB_00406610;
      }
      lVar12 = lVar12 + 1;
    } while (lVar12 != param_8);
LAB_00406610:
    uVar14 = 0;
joined_r0x0040661c:
    if (1 < uVar11) {
      uVar13 = 1;
      uVar9 = wcslen(*(wchar_t **)(param_7 + (long)*(int *)(&stack0xffffffffffffff60 + lVar2) * 8));
      do {
        lVar12 = uVar13 * 4;
        uVar13 = uVar13 + 1;
        sVar10 = wcslen(*(wchar_t **)
                         (param_7 + (long)*(int *)(&stack0xffffffffffffff60 + lVar12 + lVar2) * 8));
        if (sVar10 < uVar9) {
          uVar9 = sVar10;
        }
      } while (uVar13 < uVar11);
      if (local_10 != (long *)0x0) {
        if ((ulong)local_10[2] < (ulong)local_10[3]) {
          local_10[2] = local_10[2] + 4;
        }
        else {
          (**(code **)(*local_10 + 0x50))();
        }
        local_8 = -1;
      }
      uVar14 = uVar14 + 1;
      if (uVar9 <= uVar14) goto LAB_004067b8;
      iVar4 = FUN_00406484(&local_10);
      iVar5 = FUN_00406484(&local_20);
      if ((iVar4 == -1) == (iVar5 == -1)) goto LAB_004067b8;
      uVar13 = 0;
      do {
        while( true ) {
          iVar4 = *(int *)(*(long *)(param_7 +
                                    (long)*(int *)(&stack0xffffffffffffff60 + uVar13 * 4 + lVar2) *
                                    8) + uVar14 * 4);
          if (local_10 == (long *)0x0) {
            iVar5 = -1;
          }
          else {
            iVar5 = local_8;
            if (local_8 == -1) {
              if ((int *)local_10[2] < (int *)local_10[3]) {
                iVar5 = *(int *)local_10[2];
              }
              else {
                iVar5 = (**(code **)(*local_10 + 0x48))(local_10);
              }
              if (iVar5 == -1) {
                local_10 = (long *)0x0;
              }
              else {
                local_8 = iVar5;
              }
            }
          }
          if (iVar4 != iVar5) break;
          uVar13 = uVar13 + 1;
          if (uVar11 <= uVar13) goto joined_r0x0040661c;
        }
        uVar11 = uVar11 - 1;
        *(undefined4 *)(&stack0xffffffffffffff60 + uVar13 * 4 + lVar2) =
             *(undefined4 *)(&stack0xffffffffffffff60 + uVar11 * 4 + lVar2);
      } while (uVar13 < uVar11);
      goto joined_r0x0040661c;
    }
    if (uVar11 == 1) {
      if (local_10 != (long *)0x0) {
        if ((ulong)local_10[2] < (ulong)local_10[3]) {
          local_10[2] = local_10[2] + 4;
        }
        else {
          FUN_003ff240();
        }
        local_8 = -1;
      }
      iVar4 = *(int *)(&stack0xffffffffffffff60 + lVar2);
      __s = *(wchar_t **)(param_7 + (long)iVar4 * 8);
      sVar10 = wcslen(__s);
      while (uVar14 = uVar14 + 1, uVar14 < sVar10) {
        iVar5 = FUN_00406484(&local_10);
        iVar6 = FUN_00406484(&local_20);
        if (((iVar5 == -1) == (iVar6 == -1)) ||
           (wVar1 = __s[uVar14], wVar7 = FUN_00406484(&local_10), wVar7 != wVar1)) break;
        if (local_10 != (long *)0x0) {
          if ((ulong)local_10[2] < (ulong)local_10[3]) {
            local_10[2] = local_10[2] + 4;
          }
          else {
            FUN_003ff240();
          }
          local_8 = -1;
        }
      }
      if (uVar14 == sVar10) {
        *param_6 = iVar4;
        goto LAB_004067c4;
      }
    }
  }
LAB_004067b8:
  *param_10 = *param_10 | 4;
LAB_004067c4:
  auVar3._8_4_ = local_8;
  auVar3._0_8_ = local_10;
  auVar3._12_4_ = uStack_4;
  return auVar3;
}


==================================================================

### FUNC 00406894 (1040 bytes) name=FUN_00406894

undefined1  [16]
FUN_00406894(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            int *param_6,long param_7,ulong param_8,long param_9,uint *param_10)

{
  long lVar1;
  undefined1 auVar2 [16];
  int iVar3;
  int iVar4;
  long *plVar5;
  size_t sVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  long lVar10;
  long lVar11;
  ulong *puVar12;
  ulong uVar13;
  ulong uVar14;
  long *local_20;
  undefined8 local_18;
  long *local_10;
  int local_8;
  undefined4 uStack_4;
  
  local_8 = (int)param_3;
  uStack_4 = (undefined4)((ulong)param_3 >> 0x20);
  local_20 = param_4;
  local_18 = param_5;
  local_10 = param_2;
  plVar5 = (long *)FUN_00401028(param_9 + 0xd0);
  lVar1 = -(param_8 * 8 + 0x1e & 0xfffffffffffffff0);
  iVar3 = FUN_00406484(&local_10);
  iVar4 = FUN_00406484(&local_20);
  if ((iVar3 == -1) != (iVar4 == -1)) {
    lVar11 = param_8 * 2;
    iVar3 = FUN_00406484(&local_10);
    if (lVar11 != 0) {
      lVar10 = 0;
      uVar14 = 0;
      do {
        while ((iVar4 = **(int **)(param_7 + lVar10 * 8), iVar3 == iVar4 ||
               (iVar4 = (**(code **)(*plVar5 + 0x30))(plVar5,iVar4), iVar3 == iVar4))) {
          *(int *)(&stack0xffffffffffffff70 + uVar14 * 4 + lVar1) = (int)lVar10;
          lVar10 = lVar10 + 1;
          uVar14 = uVar14 + 1;
          if (lVar10 == lVar11) goto LAB_0040698c;
        }
        lVar10 = lVar10 + 1;
      } while (lVar10 != lVar11);
LAB_0040698c:
      if (uVar14 != 0) {
        if (local_10 != (long *)0x0) {
          if ((ulong)local_10[2] < (ulong)local_10[3]) {
            local_10[2] = local_10[2] + 4;
          }
          else {
            FUN_003ff240();
          }
          local_8 = -1;
        }
        uVar13 = 0;
        lVar11 = -(uVar14 * 8 + 0x1e & 0xfffffffffffffff0);
        puVar12 = (ulong *)(&stack0xffffffffffffff70 + lVar11 + lVar1);
        do {
          sVar6 = wcslen(*(wchar_t **)
                          (param_7 +
                          (long)*(int *)(&stack0xffffffffffffff70 + uVar13 * 4 + lVar1) * 8));
          *(size_t *)(&stack0xffffffffffffff70 + uVar13 * 8 + lVar11 + lVar1) = sVar6;
          uVar13 = uVar13 + 1;
        } while (uVar13 != uVar14);
        uVar13 = 1;
        lVar11 = 4;
        goto LAB_00406a04;
      }
    }
  }
  uVar13 = 0;
  uVar14 = 0;
  puVar12 = (ulong *)0x0;
  lVar11 = 0;
LAB_00406a04:
  if (local_10 == (long *)0x0) goto LAB_00406ae8;
LAB_00406a08:
  if (local_8 == -1) {
    if ((int *)local_10[2] < (int *)local_10[3]) {
      iVar3 = *(int *)local_10[2];
    }
    else {
      iVar3 = (**(code **)(*local_10 + 0x48))();
    }
    if (iVar3 == -1) {
      local_10 = (long *)0x0;
      goto LAB_00406ae8;
    }
    local_8 = iVar3;
    if (local_20 == (long *)0x0) goto LAB_00406a38;
  }
  else {
    iVar3 = local_8;
    if (local_20 == (long *)0x0) goto LAB_00406a4c;
  }
  iVar4 = 0;
  iVar3 = 0;
  if ((int)local_18 == -1) goto LAB_00406b04;
LAB_00406a30:
  if (iVar3 != iVar4) {
LAB_00406a38:
    do {
      if (local_10 == (long *)0x0) {
        iVar3 = -1;
      }
      else {
        iVar3 = local_8;
        if (local_8 == -1) {
          if ((int *)local_10[2] < (int *)local_10[3]) {
            iVar3 = *(int *)local_10[2];
          }
          else {
            iVar3 = (**(code **)(*local_10 + 0x48))();
          }
          if (iVar3 == -1) {
            local_10 = (long *)0x0;
          }
          else {
            local_8 = iVar3;
          }
        }
      }
LAB_00406a4c:
      if (uVar14 == 0) goto LAB_00406b40;
      uVar8 = 0;
      uVar9 = 0;
      do {
        while( true ) {
          if (uVar13 < puVar12[uVar8]) break;
          uVar9 = uVar9 + 1;
LAB_00406a64:
          uVar8 = uVar8 + 1;
          if (uVar14 <= uVar8) goto LAB_00406ab0;
        }
        if (*(int *)(*(long *)(param_7 +
                              (long)*(int *)(&stack0xffffffffffffff70 + uVar8 * 4 + lVar1) * 8) +
                    lVar11) == iVar3) goto LAB_00406a64;
        uVar14 = uVar14 - 1;
        uVar7 = puVar12[uVar14];
        *(undefined4 *)(&stack0xffffffffffffff70 + uVar8 * 4 + lVar1) =
             *(undefined4 *)(&stack0xffffffffffffff70 + uVar14 * 4 + lVar1);
        puVar12[uVar8] = uVar7;
      } while (uVar8 < uVar14);
LAB_00406ab0:
      if (uVar14 == uVar9) break;
      if (local_10 != (long *)0x0) {
        if ((ulong)local_10[2] < (ulong)local_10[3]) {
          local_10[2] = local_10[2] + 4;
        }
        else {
          (**(code **)(*local_10 + 0x50))();
        }
        local_8 = -1;
      }
      uVar13 = uVar13 + 1;
      lVar11 = lVar11 + 4;
      if (local_10 != (long *)0x0) goto LAB_00406a08;
LAB_00406ae8:
      if (local_20 == (long *)0x0) break;
      iVar4 = 1;
      iVar3 = 0;
      if ((int)local_18 != -1) goto LAB_00406a30;
LAB_00406b04:
      if ((int *)local_20[2] < (int *)local_20[3]) {
        iVar3 = *(int *)local_20[2];
      }
      else {
        iVar3 = (**(code **)(*local_20 + 0x48))();
      }
      if (iVar3 == -1) goto LAB_00406bf8;
      local_18 = CONCAT44(local_18._4_4_,iVar3);
      if (iVar4 == 0) break;
    } while( true );
  }
  if (uVar14 == 1) {
    uVar14 = *puVar12;
joined_r0x00406c94:
    if (uVar14 == uVar13) {
LAB_00406c38:
      iVar4 = *(int *)(&stack0xffffffffffffff70 + lVar1);
      iVar3 = iVar4 - (int)param_8;
      if ((ulong)(long)iVar4 < param_8) {
        iVar3 = iVar4;
      }
      *param_6 = iVar3;
      goto LAB_00406b4c;
    }
  }
  else if (uVar14 == 2) {
    if (*puVar12 != uVar13) {
      uVar14 = puVar12[1];
      goto joined_r0x00406c94;
    }
    goto LAB_00406c38;
  }
LAB_00406b40:
  *param_10 = *param_10 | 4;
LAB_00406b4c:
  auVar2._8_4_ = local_8;
  auVar2._0_8_ = local_10;
  auVar2._12_4_ = uStack_4;
  return auVar2;
LAB_00406bf8:
  local_20 = (long *)0x0;
  iVar3 = 1;
  goto LAB_00406a30;
}


==================================================================

### FUNC 00406ca4 (584 bytes) name=FUN_00406ca4

undefined1  [16]
FUN_00406ca4(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  uint uVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long *plVar5;
  ulong uVar6;
  bool bVar7;
  undefined1 auVar8 [16];
  undefined4 local_78;
  int local_74;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar3 = FUN_00402d1c(param_6 + 0xd0);
  FUN_00401028(param_6 + 0xd0);
  lVar4 = *(long *)(lVar3 + 0x10);
  local_60 = *(undefined8 *)(lVar4 + 0xa0);
  local_68 = *(undefined8 *)(lVar4 + 0x98);
  local_70 = *(undefined8 *)(lVar4 + 0x90);
  local_58 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xa8);
  local_50 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xb0);
  local_48 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xb8);
  local_40 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xc0);
  local_38 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x58);
  local_30 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x60);
  local_28 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x68);
  local_20 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x70);
  local_18 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x78);
  local_74 = 0;
  local_10 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x80);
  local_8 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x88);
  auVar8 = FUN_00406894(param_1,param_2,param_3,param_4,param_5,&local_78,&local_70,7,param_6,
                        &local_74);
  plVar5 = auVar8._0_8_;
  uVar6 = auVar8._8_8_ & 0xffffffff;
  if (local_74 == 0) {
    *(undefined4 *)(param_8 + 0x18) = local_78;
    if (plVar5 == (long *)0x0) goto LAB_00406e68;
LAB_00406dfc:
    if (auVar8._8_4_ == -1) {
      if ((uint *)plVar5[2] < (uint *)plVar5[3]) {
        uVar1 = *(uint *)plVar5[2];
      }
      else {
        uVar1 = (**(code **)(*plVar5 + 0x48))();
      }
      if (uVar1 == 0xffffffff) goto LAB_00406e68;
      uVar6 = (ulong)uVar1;
    }
    bVar7 = false;
    if (param_4 == (long *)0x0) goto LAB_00406e28;
LAB_00406e0c:
    iVar2 = (int)param_5;
    if (iVar2 == -1) {
      if ((int *)param_4[2] < (int *)param_4[3]) {
        iVar2 = *(int *)param_4[2];
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
      }
    }
    if ((iVar2 == -1) != bVar7) goto LAB_00406e28;
  }
  else {
    *param_7 = *param_7 | 4;
    if (plVar5 != (long *)0x0) goto LAB_00406dfc;
LAB_00406e68:
    plVar5 = (long *)0x0;
    bVar7 = true;
    if (param_4 != (long *)0x0) goto LAB_00406e0c;
  }
  *param_7 = *param_7 | 2;
LAB_00406e28:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar8._0_8_ = plVar5;
  return auVar8;
}


==================================================================

### FUNC 00406eec (704 bytes) name=FUN_00406eec

undefined1  [16]
FUN_00406eec(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8)

{
  uint uVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  long *plVar5;
  ulong uVar6;
  bool bVar7;
  undefined1 auVar8 [16];
  undefined4 local_c8;
  int local_c4;
  undefined8 local_c0;
  undefined8 local_b8;
  undefined8 local_b0;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined8 local_90;
  undefined8 local_88;
  undefined8 local_80;
  undefined8 local_78;
  undefined8 local_70;
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  lVar3 = FUN_00402d1c(param_6 + 0xd0);
  FUN_00401028(param_6 + 0xd0);
  lVar4 = *(long *)(lVar3 + 0x10);
  local_b0 = *(undefined8 *)(lVar4 + 0x138);
  local_b8 = *(undefined8 *)(lVar4 + 0x130);
  local_c0 = *(undefined8 *)(lVar4 + 0x128);
  local_a8 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x140);
  local_a0 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x148);
  local_98 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x150);
  local_90 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x158);
  local_88 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x160);
  local_80 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x168);
  local_78 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x170);
  local_70 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x178);
  local_68 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x180);
  local_60 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 200);
  local_58 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xd0);
  local_50 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xd8);
  local_48 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xe0);
  local_40 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xe8);
  local_38 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xf0);
  local_30 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0xf8);
  local_28 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x100);
  local_20 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x108);
  local_18 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x110);
  local_10 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x118);
  local_c4 = 0;
  local_8 = *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x120);
  auVar8 = FUN_00406894(param_1,param_2,param_3,param_4,param_5,&local_c8,&local_c0,0xc,param_6,
                        &local_c4);
  plVar5 = auVar8._0_8_;
  uVar6 = auVar8._8_8_ & 0xffffffff;
  if (local_c4 == 0) {
    *(undefined4 *)(param_8 + 0x10) = local_c8;
    if (plVar5 == (long *)0x0) goto LAB_00407128;
LAB_004070bc:
    if (auVar8._8_4_ == -1) {
      if ((uint *)plVar5[2] < (uint *)plVar5[3]) {
        uVar1 = *(uint *)plVar5[2];
      }
      else {
        uVar1 = (**(code **)(*plVar5 + 0x48))();
      }
      if (uVar1 == 0xffffffff) goto LAB_00407128;
      uVar6 = (ulong)uVar1;
    }
    bVar7 = false;
    if (param_4 == (long *)0x0) goto LAB_004070e8;
LAB_004070cc:
    iVar2 = (int)param_5;
    if (iVar2 == -1) {
      if ((int *)param_4[2] < (int *)param_4[3]) {
        iVar2 = *(int *)param_4[2];
      }
      else {
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
      }
    }
    if ((iVar2 == -1) != bVar7) goto LAB_004070e8;
  }
  else {
    *param_7 = *param_7 | 4;
    if (plVar5 != (long *)0x0) goto LAB_004070bc;
LAB_00407128:
    plVar5 = (long *)0x0;
    bVar7 = true;
    if (param_4 != (long *)0x0) goto LAB_004070cc;
  }
  *param_7 = *param_7 | 2;
LAB_004070e8:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar6;
  auVar8._0_8_ = plVar5;
  return auVar8;
}


==================================================================

### FUNC 004071ac (3756 bytes) name=FUN_004071ac

undefined1  [16]
FUN_004071ac(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long param_8,wchar_t *param_9)

{
  wchar_t wVar1;
  undefined1 auVar2 [16];
  undefined1 auVar3 [12];
  undefined1 auVar4 [12];
  char cVar5;
  int iVar6;
  undefined4 uVar9;
  int iVar7;
  wchar_t wVar8;
  long lVar10;
  long *plVar11;
  size_t sVar12;
  long lVar13;
  long lVar14;
  size_t sVar15;
  undefined1 auVar16 [12];
  long *local_90;
  undefined8 local_88;
  undefined1 local_80 [12];
  undefined4 uStack_74;
  uint local_68;
  int local_64;
  undefined8 local_60;
  undefined8 local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_80._8_4_ = (undefined4)param_3;
  uStack_74 = (undefined4)((ulong)param_3 >> 0x20);
  local_90 = param_4;
  local_88 = param_5;
  local_80._0_8_ = param_2;
  lVar10 = FUN_00402d1c(param_6 + 0xd0);
  sVar15 = 0;
  plVar11 = (long *)FUN_00401028(param_6 + 0xd0);
  sVar12 = wcslen(param_9);
  auVar16._8_4_ = local_80._8_4_;
  auVar16._0_8_ = local_80._0_8_;
  local_68 = 0;
  if ((long *)local_80._0_8_ == (long *)0x0) goto LAB_004072f4;
LAB_00407254:
  local_80._8_4_ = auVar16._8_4_;
  if (local_80._8_4_ == -1) {
    if (*(int **)(local_80._0_8_ + 0x10) < *(int **)(local_80._0_8_ + 0x18)) {
      iVar6 = **(int **)(local_80._0_8_ + 0x10);
      local_80 = auVar16;
    }
    else {
      iVar6 = (**(code **)(*(long *)local_80._0_8_ + 0x48))(local_80._0_8_);
      local_80 = auVar16;
    }
    auVar16._8_4_ = iVar6;
    auVar16._0_8_ = local_80._0_8_;
    if (iVar6 == -1) {
      auVar3._4_8_ = 0;
      auVar3._0_4_ = local_80._8_4_;
      auVar16 = auVar3 << 0x40;
      goto LAB_004072f4;
    }
  }
  iVar6 = 0;
  local_80 = auVar16;
  if (local_90 == (long *)0x0) goto LAB_00407284;
  iVar7 = 0;
  if ((int)local_88 == -1) goto LAB_00407310;
LAB_0040727c:
  if (iVar6 == iVar7) {
LAB_00407340:
    if ((local_68 != 0) || (sVar15 != sVar12)) {
      *param_7 = *param_7 | 4;
    }
    auVar2._12_4_ = uStack_74;
    auVar2._0_12_ = local_80;
    return auVar2;
  }
LAB_00407284:
  do {
    if ((sVar12 <= sVar15) || (local_68 != 0)) goto LAB_00407340;
    cVar5 = (**(code **)(*plVar11 + 0x60))(plVar11,param_9[sVar15],0);
    if (cVar5 != '%') {
      wVar1 = param_9[sVar15];
      auVar16 = local_80;
      if ((long *)local_80._0_8_ == (long *)0x0) {
LAB_0040741c:
        local_80._0_8_ = (long *)0x0;
        if (wVar1 == L'\xffffffff') {
          sVar15 = sVar15 + 1;
        }
        else {
LAB_004072e0:
          local_68 = local_68 | 4;
LAB_004072ec:
          sVar15 = sVar15 + 1;
        }
      }
      else {
        if (local_80._8_4_ == L'\xffffffff') {
          if (*(wchar_t **)(local_80._0_8_ + 0x10) < *(wchar_t **)(local_80._0_8_ + 0x18)) {
            wVar8 = **(wchar_t **)(local_80._0_8_ + 0x10);
          }
          else {
            wVar8 = (**(code **)(*(long *)local_80._0_8_ + 0x48))();
          }
          auVar16._8_4_ = wVar8;
          auVar16._0_8_ = local_80._0_8_;
          if (wVar8 == L'\xffffffff') {
            auVar4._4_8_ = 0;
            auVar4._0_4_ = local_80._8_4_;
            auVar16 = auVar4 << 0x40;
            goto LAB_0040741c;
          }
          if (wVar1 != wVar8) goto LAB_004072e0;
          if ((long *)local_80._0_8_ != (long *)0x0) goto LAB_0040746c;
          goto LAB_004072ec;
        }
        if (wVar1 != local_80._8_4_) goto LAB_004072e0;
LAB_0040746c:
        local_80._0_8_ = auVar16._0_8_;
        if (*(ulong *)(local_80._0_8_ + 0x10) < *(ulong *)(local_80._0_8_ + 0x18)) {
          *(ulong *)(local_80._0_8_ + 0x10) = *(ulong *)(local_80._0_8_ + 0x10) + 4;
        }
        else {
          lVar14 = *(long *)local_80._0_8_;
          local_80 = auVar16;
          (**(code **)(lVar14 + 0x50))();
        }
        sVar15 = sVar15 + 1;
        auVar16._8_4_ = 0xffffffff;
        auVar16._0_8_ = local_80._0_8_;
      }
      goto LAB_004072f0;
    }
    lVar14 = sVar15 + 1;
    cVar5 = (**(code **)(*plVar11 + 0x60))(plVar11,param_9[sVar15 + 1],0);
    local_64 = 0;
    if ((cVar5 == 'O') || (cVar5 == 'E')) {
      lVar14 = sVar15 + 2;
      cVar5 = (**(code **)(*plVar11 + 0x60))(plVar11,param_9[sVar15 + 2],0);
    }
    switch(cVar5) {
    case 'A':
      lVar13 = *(long *)(lVar10 + 0x10);
      local_60 = *(undefined8 *)(lVar13 + 0x58);
      local_58 = *(undefined8 *)(lVar13 + 0x60);
      local_50 = *(undefined8 *)(lVar13 + 0x68);
      local_48 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x70);
      local_40 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x78);
      local_38 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x80);
      local_30 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x88);
      auVar16 = FUN_00406518(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0x18,&local_60,7,param_6,&local_68);
      break;
    case 'B':
      lVar13 = *(long *)(lVar10 + 0x10);
      local_60 = *(undefined8 *)(lVar13 + 200);
      local_58 = *(undefined8 *)(lVar13 + 0xd0);
      local_50 = *(undefined8 *)(lVar13 + 0xd8);
      local_48 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xe0);
      local_40 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xe8);
      local_38 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xf0);
      local_30 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xf8);
      local_28 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x100);
      local_20 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x108);
      local_18 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x110);
      local_10 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x118);
      local_8 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x120);
      auVar16 = FUN_00406518(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0x10,&local_60,0xc,param_6,&local_68);
      break;
    case 'C':
    case 'Y':
    case 'y':
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,&local_64,0,9999,4,param_6,&local_68);
      if (local_68 == 0) {
        if (local_64 < 0) {
          iVar6 = local_64 + 100;
        }
        else {
          iVar6 = local_64 + -0x76c;
        }
        *(int *)(param_8 + 0x14) = iVar6;
      }
      break;
    case 'D':
      (**(code **)(*plVar11 + 0x58))(plVar11,&DAT_00479960,&DAT_00479969,&local_60);
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,&local_60);
                    /* catch() { ... } // from try @ 00407874 with catch @ 0040779c
                       catch() { ... } // from try @ 004078d4 with catch @ 0040779c
                       catch() { ... } // from try @ 004078fc with catch @ 0040779c
                       catch() { ... } // from try @ 00407990 with catch @ 0040779c */
      break;
    default:
switchD_00407414_caseD_45:
      auVar16 = local_80;
      goto LAB_004073ec;
    case 'H':
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 8,0,0x17,2,param_6,&local_68);
      break;
    case 'I':
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 8,1,0xc,2,param_6,&local_68);
      break;
    case 'M':
                    /* try { // try from 00407874 to 00507877 has its CatchHandler @ 0040779c */
                    /* try { // try from 00407880 to 00507883 has its CatchHandler @ 0040796c */
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 4,0,0x3b,2,param_6,&local_68);
      break;
    case 'R':
                    /* try { // try from 004078d4 to 005078d7 has its CatchHandler @ 0040779c */
      (**(code **)(*plVar11 + 0x58))(plVar11,&DAT_00479970,&DAT_00479976,&local_60);
                    /* try { // try from 004078f4 to 005078f7 has its CatchHandler @ 00407980 */
                    /* try { // try from 004078fc to 0050797f has its CatchHandler @ 0040779c */
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,&local_60);
      break;
    case 'S':
                    /* catch() { ... } // from try @ 00407880 with catch @ 0040796c */
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8,0,0x3d,2,param_6,&local_68);
                    /* catch() { ... } // from try @ 004078f4 with catch @ 00407980 */
      break;
    case 'T':
                    /* try { // try from 00407990 to 00507993 has its CatchHandler @ 0040779c */
      (**(code **)(*plVar11 + 0x58))(plVar11,&DAT_00479978,&DAT_00479981,&local_60);
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,&local_60);
      break;
    case 'X':
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,
                             *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x20));
      break;
    case 'Z':
      uVar9 = FUN_00406484(local_80);
      cVar5 = (**(code **)(*plVar11 + 0x10))(plVar11,1,uVar9);
      if (cVar5 == '\0') goto switchD_00407414_caseD_45;
      auVar16 = FUN_00406518(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,&local_60,PTR_PTR_00501e80,0xe,param_6,&local_68);
      local_80 = auVar16;
      iVar6 = FUN_00406484(local_80);
      iVar7 = FUN_00406484(&local_90);
      auVar16 = local_80;
      if ((((iVar6 == -1) != (iVar7 == -1)) && (local_68 == 0)) && ((int)local_60 == 0)) {
        iVar6 = FUN_00406484(local_80);
        iVar7 = (**(code **)(*plVar11 + 0x50))(plVar11,0x2d);
        if (iVar6 != iVar7) {
          iVar6 = FUN_00406484(local_80);
          iVar7 = (**(code **)(*plVar11 + 0x50))(plVar11,0x2b);
          auVar16 = local_80;
          if (iVar6 != iVar7) break;
        }
        auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                               local_88,&local_60,0,0x17,2,param_6,&local_68);
        local_80 = auVar16;
        auVar16 = FUN_00401248(param_1,auVar16._0_8_,CONCAT44(uStack_74,auVar16._8_4_),local_90,
                               local_88,&local_60,0,0x3b,2,param_6,&local_68);
      }
      break;
    case 'a':
      lVar13 = *(long *)(lVar10 + 0x10);
      local_60 = *(undefined8 *)(lVar13 + 0x90);
      local_58 = *(undefined8 *)(lVar13 + 0x98);
      local_50 = *(undefined8 *)(lVar13 + 0xa0);
      local_48 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xa8);
      local_40 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xb0);
      local_38 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xb8);
      local_30 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0xc0);
      auVar16 = FUN_00406518(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0x18,&local_60,7,param_6,&local_68);
      break;
    case 'b':
    case 'h':
      lVar13 = *(long *)(lVar10 + 0x10);
      local_60 = *(undefined8 *)(lVar13 + 0x128);
      local_58 = *(undefined8 *)(lVar13 + 0x130);
      local_50 = *(undefined8 *)(lVar13 + 0x138);
      local_48 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x140);
      local_40 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x148);
      local_38 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x150);
      local_30 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x158);
      local_28 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x160);
      local_20 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x168);
      local_18 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x170);
      local_10 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x178);
      local_8 = *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x180);
      auVar16 = FUN_00406518(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0x10,&local_60,0xc,param_6,&local_68);
      break;
    case 'c':
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,
                             *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x30));
      break;
    case 'd':
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_8 + 0xc,1,0x1f,2,param_6,&local_68);
      break;
    case 'e':
      uVar9 = FUN_00406484(local_80);
      cVar5 = (**(code **)(*plVar11 + 0x10))(plVar11,8,uVar9);
      if (cVar5 == '\0') {
        auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                               local_88,param_8 + 0xc,10,0x1f,2,param_6,&local_68);
      }
      else {
        if (local_80._0_8_ != 0) {
          if (*(ulong *)(local_80._0_8_ + 0x10) < *(ulong *)(local_80._0_8_ + 0x18)) {
            *(ulong *)(local_80._0_8_ + 0x10) = *(ulong *)(local_80._0_8_ + 0x10) + 4;
          }
          else {
            FUN_003ff240();
          }
          local_80._8_4_ = 0xffffffff;
        }
        auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                               local_88,param_8 + 0xc,1,9,1,param_6,&local_68);
      }
      break;
    case 'm':
      auVar16 = FUN_00401248(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,&local_64,1,0xc,2,param_6,&local_68);
      if (local_68 == 0) {
        *(int *)(param_8 + 0x10) = local_64 + -1;
      }
      break;
    case 'n':
      uVar9 = FUN_00406484(local_80);
      cVar5 = (**(code **)(*plVar11 + 0x60))(plVar11,uVar9,0);
      auVar16 = local_80;
      if (cVar5 != '\n') goto LAB_004073ec;
LAB_00407f68:
      local_80._0_8_ = auVar16._0_8_;
      if (local_80._0_8_ != 0) {
        if (*(ulong *)(local_80._0_8_ + 0x10) < *(ulong *)(local_80._0_8_ + 0x18)) {
          *(ulong *)(local_80._0_8_ + 0x10) = *(ulong *)(local_80._0_8_ + 0x10) + 4;
        }
        else {
          FUN_003ff240(local_80._0_8_);
          local_80 = auVar16;
        }
        auVar16._8_4_ = 0xffffffff;
        auVar16._0_8_ = local_80._0_8_;
      }
      break;
    case 't':
      uVar9 = FUN_00406484(local_80);
      cVar5 = (**(code **)(*plVar11 + 0x60))(plVar11,uVar9,0);
      auVar16 = local_80;
      if (cVar5 == '\t') goto LAB_00407f68;
LAB_004073ec:
      local_68 = local_68 | 4;
      break;
    case 'x':
      auVar16 = FUN_004071ac(param_1,local_80._0_8_,CONCAT44(uStack_74,local_80._8_4_),local_90,
                             local_88,param_6,&local_68,param_8,
                             *(undefined8 *)(*(long *)(lVar10 + 0x10) + 0x10));
    }
    local_80._0_8_ = auVar16._0_8_;
    sVar15 = lVar14 + 1;
LAB_004072f0:
    if ((long *)local_80._0_8_ != (long *)0x0) goto LAB_00407254;
LAB_004072f4:
    local_80 = auVar16;
    if (local_90 == (long *)0x0) goto LAB_00407340;
    iVar6 = 1;
    iVar7 = 0;
    if ((int)local_88 != -1) goto LAB_0040727c;
LAB_00407310:
    local_80 = auVar16;
    if ((int *)local_90[2] < (int *)local_90[3]) {
      iVar7 = *(int *)local_90[2];
    }
    else {
      iVar7 = (**(code **)(*local_90 + 0x48))();
    }
    if (iVar7 == -1) break;
    local_88 = CONCAT44(local_88._4_4_,iVar7);
    if (iVar6 == 0) goto LAB_00407340;
  } while( true );
  local_90 = (long *)0x0;
  iVar7 = 1;
  goto LAB_0040727c;
}


==================================================================

### FUNC 00408058 (392 bytes) name=FUN_00408058

undefined1  [16]
FUN_00408058(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,undefined8 param_8)

{
  uint uVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  ulong uVar5;
  bool bVar6;
  bool bVar7;
  undefined1 auVar8 [16];
  
  lVar3 = FUN_00402d1c(param_6 + 0xd0);
  auVar8 = FUN_004071ac(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,
                        *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x20));
  plVar4 = auVar8._0_8_;
  uVar5 = auVar8._8_8_ & 0xffffffff;
  iVar2 = (int)param_5;
  if (plVar4 == (long *)0x0) {
LAB_004081a0:
    plVar4 = (long *)0x0;
    bVar7 = true;
    bVar6 = true;
    if (param_4 != (long *)0x0) goto joined_r0x004081b4;
  }
  else {
    if (auVar8._8_4_ == -1) {
      if ((uint *)plVar4[2] < (uint *)plVar4[3]) {
        uVar1 = *(uint *)plVar4[2];
      }
      else {
        uVar1 = (**(code **)(*plVar4 + 0x48))();
      }
      if (uVar1 == 0xffffffff) goto LAB_004081a0;
      uVar5 = (ulong)uVar1;
    }
    if (param_4 == (long *)0x0) goto LAB_00408114;
    bVar7 = false;
    bVar6 = false;
joined_r0x004081b4:
    if (iVar2 == -1) {
      if ((int *)param_4[2] < (int *)param_4[3]) {
        if ((*(int *)param_4[2] == -1) != bVar7) goto LAB_00408114;
        goto LAB_00408164;
      }
      iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
      bVar6 = bVar7;
    }
    if ((iVar2 == -1) != bVar6) goto LAB_00408114;
  }
LAB_00408164:
  *param_7 = *param_7 | 2;
LAB_00408114:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar5;
  auVar8._0_8_ = plVar4;
  return auVar8;
}


==================================================================

### FUNC 004081e0 (392 bytes) name=FUN_004081e0

undefined1  [16]
FUN_004081e0(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,undefined8 param_8)

{
  uint uVar1;
  int iVar2;
  long lVar3;
  long *plVar4;
  ulong uVar5;
  bool bVar6;
  bool bVar7;
  undefined1 auVar8 [16];
  
  lVar3 = FUN_00402d1c(param_6 + 0xd0);
  auVar8 = FUN_004071ac(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,
                        *(undefined8 *)(*(long *)(lVar3 + 0x10) + 0x10));
  plVar4 = auVar8._0_8_;
  uVar5 = auVar8._8_8_ & 0xffffffff;
  iVar2 = (int)param_5;
  if (plVar4 == (long *)0x0) {
LAB_00408328:
    plVar4 = (long *)0x0;
    bVar7 = true;
    bVar6 = true;
    if (param_4 != (long *)0x0) goto joined_r0x0040833c;
  }
  else {
    if (auVar8._8_4_ == -1) {
      if ((uint *)plVar4[2] < (uint *)plVar4[3]) {
        uVar1 = *(uint *)plVar4[2];
      }
      else {
        uVar1 = (**(code **)(*plVar4 + 0x48))();
      }
      if (uVar1 == 0xffffffff) goto LAB_00408328;
      uVar5 = (ulong)uVar1;
    }
    if (param_4 == (long *)0x0) goto LAB_0040829c;
    bVar7 = false;
    bVar6 = false;
joined_r0x0040833c:
    if (iVar2 == -1) {
      if ((int *)param_4[2] < (int *)param_4[3]) {
        if ((*(int *)param_4[2] == -1) != bVar7) goto LAB_0040829c;
        goto LAB_004082ec;
      }
      iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
      bVar6 = bVar7;
    }
    if ((iVar2 == -1) != bVar6) goto LAB_0040829c;
  }
LAB_004082ec:
  *param_7 = *param_7 | 2;
LAB_0040829c:
  auVar8._8_8_ = param_3 & 0xffffffff00000000 | uVar5;
  auVar8._0_8_ = plVar4;
  return auVar8;
}


==================================================================

### FUNC 00408368 (1116 bytes) name=FUN_00408368

/* WARNING: Removing unreachable block (ram,0x00408e64) */
/* WARNING: Removing unreachable block (ram,0x00409024) */
/* WARNING: Removing unreachable block (ram,0x00409038) */
/* WARNING: Removing unreachable block (ram,0x00409040) */
/* WARNING: Removing unreachable block (ram,0x00409064) */
/* WARNING: Removing unreachable block (ram,0x00409050) */
/* WARNING: Removing unreachable block (ram,0x0040905c) */
/* WARNING: Removing unreachable block (ram,0x00408fac) */
/* WARNING: Removing unreachable block (ram,0x0040900c) */
/* WARNING: Removing unreachable block (ram,0x00408fb4) */
/* WARNING: Removing unreachable block (ram,0x00408fb8) */
/* WARNING: Removing unreachable block (ram,0x00408fc8) */
/* WARNING: Removing unreachable block (ram,0x00408ff0) */
/* WARNING: Removing unreachable block (ram,0x00408ffc) */
/* WARNING: Removing unreachable block (ram,0x00409008) */
/* WARNING: Removing unreachable block (ram,0x00408980) */
/* WARNING: Removing unreachable block (ram,0x00408e14) */
/* WARNING: Removing unreachable block (ram,0x0040898c) */
/* WARNING: Removing unreachable block (ram,0x004089a4) */
/* WARNING: Removing unreachable block (ram,0x004089ac) */
/* WARNING: Removing unreachable block (ram,0x00408e20) */
/* WARNING: Removing unreachable block (ram,0x00409014) */
/* WARNING: Removing unreachable block (ram,0x00408698) */
/* WARNING: Removing unreachable block (ram,0x0040869c) */
/* WARNING: Removing unreachable block (ram,0x00409020) */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_00408368(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,long param_6,uint *param_7,undefined8 param_8)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  undefined *puVar8;
  long lVar9;
  undefined1 auVar10 [16];
  long local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined1 auStack_28 [8];
  undefined1 auStack_20 [8];
  undefined4 local_18;
  undefined *local_10;
  undefined *local_8;
  
  local_50 = param_4;
  uStack_48 = param_5;
  local_40 = param_2;
  local_38 = param_3;
  FUN_00401028(param_6 + 0xd0);
  lVar7 = FUN_00406290(auStack_28,param_6 + 0xd0);
  local_10 = PTR_DAT_00501f30 + 0x18;
  if (*(char *)(lVar7 + 0x20) != '\0') {
    FUN_00410ed8(&local_10,0x20);
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_8,0x20);
  local_58 = 0;
  local_18 = *(undefined4 *)(lVar7 + 0x68);
  bVar1 = (byte)local_18;
  while( true ) {
    if (bVar1 < 5) {
                    /* WARNING: Could not recover jumptable at 0x004084a0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      auVar10 = (*(code *)(&UNK_004084a4 + (long)*(short *)(&DAT_0047a508 + (ulong)bVar1 * 2) * 4))
                          ();
      return auVar10;
    }
    if (3 < (int)local_58 + 1) break;
    bVar1 = *(byte *)((long)&local_18 + local_58 + 1);
    local_58 = local_58 + 1;
  }
  if ((1 < *(ulong *)(local_8 + -0x18)) && (lVar9 = FUN_004123cc(&local_8,0x30,0), lVar9 != 0)) {
    if (lVar9 == -1) {
      lVar9 = *(long *)(local_8 + -0x18) + -1;
    }
    FUN_00412dc4(&local_8,0,lVar9);
  }
  if (*(long *)(local_10 + -0x18) != 0) {
    FUN_004116e0(&local_10,0);
    cVar4 = FUN_003ee0cc(*(undefined8 *)(lVar7 + 0x10),*(undefined8 *)(lVar7 + 0x18),&local_10);
    if (cVar4 == '\0') {
      *param_7 = *param_7 | 4;
    }
  }
  FUN_00411a24(param_8,&local_8);
  iVar5 = FUN_00406484(&local_40);
  iVar6 = FUN_00406484(&local_50);
  uVar3 = local_38;
  uVar2 = local_40;
  if ((iVar6 == -1) == (iVar5 == -1)) {
    *param_7 = *param_7 | 2;
    if (local_8 + -0x18 != PTR_DAT_00501f30) goto LAB_004090b8;
LAB_004086ec:
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_00408700;
  }
  else {
    if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_004086ec;
LAB_004090b8:
    FUN_003ff25c(local_8 + -0x18,auStack_20);
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_00408700;
  }
  FUN_003ff25c(puVar8,&local_8);
LAB_00408700:
  auVar10._8_8_ = uVar3;
  auVar10._0_8_ = uVar2;
  return auVar10;
}


==================================================================

### FUNC 00409134 (512 bytes) name=FUN_00409134

/* WARNING: Removing unreachable block (ram,0x00409c30) */
/* WARNING: Removing unreachable block (ram,0x00409df0) */
/* WARNING: Removing unreachable block (ram,0x00409e04) */
/* WARNING: Removing unreachable block (ram,0x00409e0c) */
/* WARNING: Removing unreachable block (ram,0x00409e30) */
/* WARNING: Removing unreachable block (ram,0x00409e1c) */
/* WARNING: Removing unreachable block (ram,0x00409e28) */
/* WARNING: Removing unreachable block (ram,0x00409d78) */
/* WARNING: Removing unreachable block (ram,0x00409dd8) */
/* WARNING: Removing unreachable block (ram,0x00409d80) */
/* WARNING: Removing unreachable block (ram,0x00409d84) */
/* WARNING: Removing unreachable block (ram,0x00409d94) */
/* WARNING: Removing unreachable block (ram,0x00409dbc) */
/* WARNING: Removing unreachable block (ram,0x00409dc8) */
/* WARNING: Removing unreachable block (ram,0x00409dd4) */
/* WARNING: Removing unreachable block (ram,0x0040974c) */
/* WARNING: Removing unreachable block (ram,0x00409be0) */
/* WARNING: Removing unreachable block (ram,0x00409758) */
/* WARNING: Removing unreachable block (ram,0x00409770) */
/* WARNING: Removing unreachable block (ram,0x00409778) */
/* WARNING: Removing unreachable block (ram,0x00409bec) */
/* WARNING: Removing unreachable block (ram,0x00409de0) */
/* WARNING: Removing unreachable block (ram,0x00409464) */
/* WARNING: Removing unreachable block (ram,0x00409468) */
/* WARNING: Removing unreachable block (ram,0x00409dec) */
/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_00409134(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 param_5,long param_6,uint *param_7,undefined8 param_8)

{
  byte bVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  long lVar7;
  undefined *puVar8;
  long lVar9;
  undefined1 auVar10 [16];
  long local_58;
  undefined8 local_50;
  undefined8 uStack_48;
  undefined8 local_40;
  undefined8 uStack_38;
  undefined1 auStack_28 [8];
  undefined1 auStack_20 [8];
  undefined4 local_18;
  undefined *local_10;
  undefined *local_8;
  
  local_50 = param_4;
  uStack_48 = param_5;
  local_40 = param_2;
  uStack_38 = param_3;
  FUN_00401028(param_6 + 0xd0);
  lVar7 = FUN_00406180(auStack_28,param_6 + 0xd0);
  local_10 = PTR_DAT_00501f30 + 0x18;
  if (*(char *)(lVar7 + 0x20) != '\0') {
    FUN_00410ed8(&local_10,0x20);
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_8,0x20);
  local_58 = 0;
  local_18 = *(undefined4 *)(lVar7 + 0x68);
  bVar1 = (byte)local_18;
  while( true ) {
    if (bVar1 < 5) {
                    /* WARNING: Could not recover jumptable at 0x0040926c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      auVar10 = (*(code *)(&UNK_00409270 + (long)*(short *)(&DAT_0047a514 + (ulong)bVar1 * 2) * 4))
                          ();
      return auVar10;
    }
    if (3 < (int)local_58 + 1) break;
    bVar1 = *(byte *)((long)&local_18 + local_58 + 1);
    local_58 = local_58 + 1;
  }
  if ((1 < *(ulong *)(local_8 + -0x18)) && (lVar9 = FUN_004123cc(&local_8,0x30,0), lVar9 != 0)) {
    if (lVar9 == -1) {
      lVar9 = *(long *)(local_8 + -0x18) + -1;
    }
    FUN_00412dc4(&local_8,0,lVar9);
  }
  if (*(long *)(local_10 + -0x18) != 0) {
    FUN_004116e0(&local_10,0);
    cVar4 = FUN_003ee0cc(*(undefined8 *)(lVar7 + 0x10),*(undefined8 *)(lVar7 + 0x18),&local_10);
    if (cVar4 == '\0') {
      *param_7 = *param_7 | 4;
    }
  }
  FUN_00411a24(param_8,&local_8);
  iVar5 = FUN_00406484(&local_40);
  iVar6 = FUN_00406484(&local_50);
  uVar3 = uStack_38;
  uVar2 = local_40;
  if ((iVar6 == -1) == (iVar5 == -1)) {
    *param_7 = *param_7 | 2;
    if (local_8 + -0x18 != PTR_DAT_00501f30) goto LAB_00409e7c;
LAB_004094b8:
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_004094cc;
  }
  else {
    if (local_8 + -0x18 == PTR_DAT_00501f30) goto LAB_004094b8;
LAB_00409e7c:
    FUN_003ff25c(local_8 + -0x18,auStack_20);
    puVar8 = local_10 + -0x18;
    if (puVar8 == PTR_DAT_00501f30) goto LAB_004094cc;
  }
  FUN_003ff25c(puVar8,&local_8);
LAB_004094cc:
  auVar10._8_8_ = uVar3;
  auVar10._0_8_ = uVar2;
  return auVar10;
}


==================================================================

### FUNC 00409650 (1376 bytes) name=__bss_start__

undefined1  [16] __bss_start__(long param_1)

{
  byte bVar1;
  undefined1 uVar2;
  bool bVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  wchar_t __c;
  wchar_t *pwVar7;
  long *plVar8;
  long lVar9;
  int iVar10;
  uint uVar11;
  ulong uVar12;
  ulong uVar13;
  long lVar14;
  ulong unaff_x19;
  undefined8 uVar15;
  uint unaff_w21;
  undefined8 uVar16;
  long *unaff_x22;
  undefined4 unaff_w24;
  long unaff_x25;
  long unaff_x26;
  wchar_t *unaff_x27;
  long unaff_x28;
  long unaff_x29;
  undefined1 auVar17 [16];
  
  do {
    *(undefined1 *)(param_1 + unaff_x19) = 0;
    do {
      unaff_w21 = unaff_w21 + 1;
      while( true ) {
        plVar8 = *(long **)(unaff_x29 + 0xe0);
        if (plVar8 == (long *)0x0) break;
        uVar12 = plVar8[2];
        if (uVar12 < (ulong)plVar8[3]) {
          *(undefined4 *)(unaff_x29 + 0xe8) = unaff_w24;
          plVar8[2] = uVar12 + 4;
        }
        else {
          (**(code **)(*plVar8 + 0x50))();
          plVar8 = *(long **)(unaff_x29 + 0xe0);
          *(undefined4 *)(unaff_x29 + 0xe8) = unaff_w24;
        }
        if (plVar8 == (long *)0x0) break;
        __c = *(wchar_t *)(unaff_x29 + 0xe8);
        if (__c == L'\xffffffff') {
          if ((int *)plVar8[2] < (int *)plVar8[3]) {
            iVar5 = *(int *)plVar8[2];
          }
          else {
            iVar5 = (**(code **)(*plVar8 + 0x48))();
          }
          if (iVar5 == -1) {
            *(undefined8 *)(unaff_x29 + 0xe0) = 0;
            break;
          }
          plVar8 = *(long **)(unaff_x29 + 0xd0);
          *(int *)(unaff_x29 + 0xe8) = iVar5;
          if (plVar8 != (long *)0x0) goto LAB_00409518;
          goto LAB_00409530;
        }
        plVar8 = *(long **)(unaff_x29 + 0xd0);
        if (plVar8 != (long *)0x0) {
LAB_00409518:
          iVar6 = 0;
          iVar5 = *(int *)(unaff_x29 + 0xd8);
          goto joined_r0x00409524;
        }
LAB_00409544:
        pwVar7 = wmemchr(unaff_x27,__c,10);
        if (pwVar7 != (wchar_t *)0x0) goto LAB_00409558;
LAB_00409954:
        if ((*(wchar_t *)(unaff_x25 + 0x24) == __c) && (*(int *)(unaff_x29 + 0xb4) == 0)) {
          if (*(int *)(unaff_x25 + 0x60) < 1) goto LAB_00409634;
          *(uint *)(unaff_x29 + 0xb0) = unaff_w21;
          unaff_w21 = 0;
          *(undefined4 *)(unaff_x29 + 0xb4) = 1;
        }
        else {
          if ((*(char *)(unaff_x25 + 0x20) == '\0') ||
             ((*(wchar_t *)(unaff_x25 + 0x28) != __c || (*(int *)(unaff_x29 + 0xb4) != 0))))
          goto LAB_00409634;
          if (unaff_w21 == 0) {
            bVar3 = false;
            goto LAB_00409638;
          }
          lVar9 = **(long **)(unaff_x29 + 0xb8);
          lVar14 = *(long *)(lVar9 + -0x18);
          uVar12 = lVar14 + 1;
          if ((*(ulong *)(lVar9 + -0x10) < uVar12) || (0 < *(int *)(lVar9 + -8))) {
            plVar8 = *(long **)(unaff_x29 + 0xb8);
            FUN_00410ed8(plVar8,uVar12);
            lVar9 = *plVar8;
            lVar14 = *(long *)(lVar9 + -0x18);
          }
          *(char *)(lVar9 + lVar14) = (char)unaff_w21;
          unaff_w21 = 0;
          lVar9 = **(long **)(unaff_x29 + 0xb8);
          if (lVar9 + -0x18 != *(long *)(unaff_x28 + 0xf30)) {
            *(undefined4 *)(lVar9 + -8) = 0;
            *(ulong *)(lVar9 + -0x18) = uVar12;
            *(undefined1 *)(lVar9 + uVar12) = 0;
          }
        }
      }
      plVar8 = *(long **)(unaff_x29 + 0xd0);
      if (plVar8 == (long *)0x0) {
LAB_00409634:
        bVar3 = true;
LAB_00409638:
        if (*(long *)(*unaff_x22 + -0x18) == 0) goto LAB_00409468;
        if (bVar3) {
          while (*(int *)(unaff_x29 + 200) + 1 < 4) {
            *(long *)(unaff_x29 + 200) = *(long *)(unaff_x29 + 200) + 1;
            bVar1 = *(byte *)(*(long *)(unaff_x29 + 0xa0) + *(long *)(unaff_x29 + 200));
            if (bVar1 < 5) {
                    /* WARNING: Could not recover jumptable at 0x0040926c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
              auVar17 = (*(code *)(&UNK_00409270 +
                                  (long)*(short *)(*(long *)(unaff_x29 + 0x98) + (ulong)bVar1 * 2) *
                                  4))();
              return auVar17;
            }
            bVar3 = true;
          }
        }
        if ((bool)(bVar3 & 1 < *(ulong *)(unaff_x29 + 0xa8))) {
          if (*(int *)(unaff_x29 + 0x74) == 0) {
            lVar9 = *(long *)(unaff_x25 + 0x40);
          }
          else {
            lVar9 = *(long *)(unaff_x25 + 0x50);
          }
          uVar12 = 1;
          while( true ) {
            iVar5 = FUN_00406484(unaff_x29 + 0xe0);
            iVar6 = FUN_00406484(unaff_x29 + 0xd0);
            if ((((iVar5 == -1) == (iVar6 == -1)) || (*(ulong *)(unaff_x29 + 0xa8) <= uVar12)) ||
               (iVar5 = FUN_00406484(unaff_x29 + 0xe0), iVar5 != *(int *)(lVar9 + uVar12 * 4)))
            break;
            plVar8 = *(long **)(unaff_x29 + 0xe0);
            if (plVar8 != (long *)0x0) {
              uVar13 = plVar8[2];
              if (uVar13 < (ulong)plVar8[3]) {
                *(undefined4 *)(unaff_x29 + 0xe8) = 0xffffffff;
                plVar8[2] = uVar13 + 4;
              }
              else {
                (**(code **)(*plVar8 + 0x50))();
                *(undefined4 *)(unaff_x29 + 0xe8) = 0xffffffff;
              }
            }
            uVar12 = uVar12 + 1;
          }
          if (uVar12 == *(ulong *)(unaff_x29 + 0xa8)) goto LAB_004096fc;
LAB_00409468:
          **(uint **)(unaff_x29 + 0x90) = **(uint **)(unaff_x29 + 0x90) | 4;
        }
        else {
          if (!bVar3) goto LAB_00409468;
LAB_004096fc:
          if ((1 < *(ulong *)(*(long *)(unaff_x29 + 0x118) + -0x18)) &&
             (lVar9 = FUN_004123cc(), lVar9 != 0)) {
            FUN_00412dc4();
          }
          if (*(int *)(unaff_x29 + 0x74) != 0) {
            if (*(int *)(*(char **)(unaff_x29 + 0x118) + -8) < 0) {
              if (**(char **)(unaff_x29 + 0x118) != '0') goto LAB_00409bec;
            }
            else {
              FUN_00412cf8();
              if (**(char **)(unaff_x29 + 0x118) != '0') {
                if (-1 < *(int *)(*(char **)(unaff_x29 + 0x118) + -8)) {
                  FUN_00412cf8();
                }
LAB_00409bec:
                FUN_00412ec4();
                *(undefined4 *)(*(long *)(unaff_x29 + 0x118) + -8) = 0xffffffff;
              }
            }
          }
          if (*(long *)(*(long *)(unaff_x29 + 0x110) + -0x18) != 0) {
            uVar15 = *(undefined8 *)(unaff_x29 + 0xb8);
            uVar11 = unaff_w21 & 0xff;
            if (*(int *)(unaff_x29 + 0xb4) != 0) {
              uVar11 = (uint)*(byte *)(unaff_x29 + 0xb0);
            }
            FUN_004116e0(uVar15,uVar11);
            cVar4 = FUN_003ee0cc(*(undefined8 *)(unaff_x25 + 0x10),*(undefined8 *)(unaff_x25 + 0x18)
                                 ,uVar15);
            if (cVar4 == '\0') {
              **(uint **)(unaff_x29 + 0x90) = **(uint **)(unaff_x29 + 0x90) | 4;
            }
          }
          if ((*(int *)(unaff_x29 + 0xb4) != 0) && (*(uint *)(unaff_x25 + 0x60) != unaff_w21))
          goto LAB_00409468;
          FUN_00411a24(*(undefined8 *)(unaff_x29 + 0x60));
        }
        iVar5 = FUN_00406484(unaff_x29 + 0xe0);
        iVar6 = FUN_00406484(unaff_x29 + 0xd0);
        if ((iVar6 == -1) == (iVar5 == -1)) {
          uVar15 = *(undefined8 *)(unaff_x29 + 0xe0);
          uVar16 = *(undefined8 *)(unaff_x29 + 0xe8);
          **(uint **)(unaff_x29 + 0x90) = **(uint **)(unaff_x29 + 0x90) | 2;
          lVar9 = *(long *)(unaff_x29 + 0x118) + -0x18;
          if (lVar9 == *(long *)(unaff_x28 + 0xf30)) goto LAB_004094b8;
LAB_00409e7c:
          FUN_003ff25c(lVar9,unaff_x29 + 0x100);
          if (*(long *)(unaff_x29 + 0x110) + -0x18 == *(long *)(unaff_x28 + 0xf30))
          goto LAB_004094cc;
        }
        else {
          lVar9 = *(long *)(unaff_x29 + 0x118) + -0x18;
          uVar15 = *(undefined8 *)(unaff_x29 + 0xe0);
          uVar16 = *(undefined8 *)(unaff_x29 + 0xe8);
          if (lVar9 != *(long *)(unaff_x28 + 0xf30)) goto LAB_00409e7c;
LAB_004094b8:
          if (*(long *)(unaff_x29 + 0x110) + -0x18 == *(long *)(unaff_x28 + 0xf30))
          goto LAB_004094cc;
        }
        FUN_003ff25c();
LAB_004094cc:
        auVar17._8_8_ = uVar16;
        auVar17._0_8_ = uVar15;
        return auVar17;
      }
      iVar5 = *(int *)(unaff_x29 + 0xd8);
      iVar6 = 1;
joined_r0x00409524:
      iVar10 = 0;
      if (iVar5 == -1) {
        if ((int *)plVar8[2] < (int *)plVar8[3]) {
          iVar5 = *(int *)plVar8[2];
        }
        else {
          iVar5 = (**(code **)(*plVar8 + 0x48))();
        }
        if (iVar5 != -1) {
          *(int *)(unaff_x29 + 0xd8) = iVar5;
          if (iVar6 != 0) goto LAB_00409530;
          goto LAB_00409634;
        }
        *(undefined8 *)(unaff_x29 + 0xd0) = 0;
        iVar10 = 1;
      }
      if (iVar10 == iVar6) goto LAB_00409634;
LAB_00409530:
      plVar8 = *(long **)(unaff_x29 + 0xe0);
      if (plVar8 != (long *)0x0) {
        __c = *(wchar_t *)(unaff_x29 + 0xe8);
        if (__c == L'\xffffffff') {
          if ((wchar_t *)plVar8[2] < (wchar_t *)plVar8[3]) {
            __c = *(wchar_t *)plVar8[2];
          }
          else {
            __c = (**(code **)(*plVar8 + 0x48))();
          }
          if (__c == L'\xffffffff') {
            *(undefined8 *)(unaff_x29 + 0xe0) = 0;
          }
          else {
            *(wchar_t *)(unaff_x29 + 0xe8) = __c;
          }
        }
        goto LAB_00409544;
      }
      __c = L'\xffffffff';
      pwVar7 = wmemchr(unaff_x27,L'\xffffffff',10);
      if (pwVar7 == (wchar_t *)0x0) goto LAB_00409954;
LAB_00409558:
      lVar9 = *unaff_x22;
      lVar14 = *(long *)(lVar9 + -0x18);
      unaff_x19 = lVar14 + 1;
      uVar2 = *(undefined1 *)
               (**(long **)(unaff_x26 + 0xb68) + ((long)pwVar7 - *(long *)(unaff_x29 + 0xc0) >> 2));
      if ((*(ulong *)(lVar9 + -0x10) < unaff_x19) || (0 < *(int *)(lVar9 + -8))) {
        FUN_00410ed8();
        lVar9 = *unaff_x22;
        lVar14 = *(long *)(lVar9 + -0x18);
      }
      *(undefined1 *)(lVar9 + lVar14) = uVar2;
      param_1 = *unaff_x22;
    } while (param_1 + -0x18 == *(long *)(unaff_x28 + 0xf30));
    *(undefined4 *)(param_1 + -8) = 0;
    *(ulong *)(param_1 + -0x18) = unaff_x19;
  } while( true );
}


==================================================================

### FUNC 00409ef8 (256 bytes) name=FUN_00409ef8

undefined1  [16]
FUN_00409ef8(undefined8 param_1,undefined8 param_2,ulong param_3,undefined8 param_4,
            undefined8 param_5,char param_6,undefined8 param_7,_Ios_Iostate *param_8,
            longdouble *param_9)

{
  char *pcVar1;
  char cVar2;
  bool bVar3;
  undefined *puVar4;
  int *piVar5;
  int iVar6;
  undefined1 auVar7 [16];
  int *local_8;
  
  puVar4 = PTR_DAT_00501f30;
  pcVar1 = PTR_DAT_00501f30 + 0x18;
  if (param_6 == '\0') {
    auVar7 = FUN_00408368();
  }
  else {
    auVar7 = FUN_00409134();
  }
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<long_double>(pcVar1,param_9,param_8,&local_8);
  if (puVar4 != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar6 = *(int *)(puVar4 + 0x10);
      *(int *)(puVar4 + 0x10) = iVar6 + -1;
    }
    else {
      piVar5 = (int *)(puVar4 + 0x10);
      do {
        iVar6 = *piVar5;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar3) {
          *piVar5 = iVar6 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar6 < 1) {
                    /* catch() { ... } // from try @ 0040a010 with catch @ 00409fdc
                       catch() { ... } // from try @ 0040a088 with catch @ 00409fdc
                       catch() { ... } // from try @ 0040a0ec with catch @ 00409fdc
                       catch() { ... } // from try @ 0040a104 with catch @ 00409fdc
                       catch() { ... } // from try @ 0040a118 with catch @ 00409fdc */
      operator_delete(puVar4);
    }
  }
  auVar7._8_8_ = param_3 & 0xffffffff00000000 | auVar7._8_8_ & 0xffffffff;
  return auVar7;
}


==================================================================

### FUNC 0040a020 (392 bytes) name=FUN_0040a020

undefined1  [16]
FUN_0040a020(undefined8 param_1,undefined8 param_2,ulong param_3,undefined8 param_4,
            undefined8 param_5,char param_6,long param_7,undefined8 param_8,long *param_9)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  long *plVar4;
  undefined *puVar5;
  int iVar6;
  int *piVar7;
  long lVar8;
  long lVar9;
  ulong uVar10;
  undefined8 uVar11;
  undefined1 auVar12 [16];
  undefined *local_8;
  
  plVar4 = (long *)FUN_00401028(param_7 + 0xd0);
  local_8 = PTR_DAT_00501f30 + 0x18;
                    /* try { // try from 0040a080 to 0050a083 has its CatchHandler @ 0040a0f4 */
                    /* try { // try from 0040a088 to 0050a0ab has its CatchHandler @ 00409fdc */
  if (param_6 == '\0') {
    auVar12 = FUN_00408368(param_1,param_2,param_3,param_4,param_5,param_7,param_8,&local_8);
    uVar11 = auVar12._0_8_;
                    /* try { // try from 0040a0e4 to 0050a0e7 has its CatchHandler @ 0040a108 */
                    /* try { // try from 0040a0ec to 0050a0ef has its CatchHandler @ 00409fdc */
                    /* catch() { ... } // from try @ 0040a080 with catch @ 0040a0f4 */
    lVar9 = *(long *)(local_8 + -0x18);
    uVar10 = param_3 & 0xffffffff00000000 | auVar12._8_8_ & 0xffffffff;
    if (lVar9 != 0) goto LAB_0040a100;
LAB_0040a0b0:
    puVar5 = local_8 + -0x18;
    if (puVar5 == PTR_DAT_00501f30) goto LAB_0040a0c0;
  }
  else {
    auVar12 = FUN_00409134();
    uVar11 = auVar12._0_8_;
    lVar9 = *(long *)(local_8 + -0x18);
    uVar10 = param_3 & 0xffffffff00000000 | auVar12._8_8_ & 0xffffffff;
    if (lVar9 == 0) goto LAB_0040a0b0;
LAB_0040a100:
                    /* try { // try from 0040a104 to 0050a107 has its CatchHandler @ 00409fdc */
                    /* catch() { ... } // from try @ 0040a0e4 with catch @ 0040a108 */
    FUN_00418884(param_9,lVar9,0);
    puVar3 = local_8;
                    /* try { // try from 0040a118 to 0050a11b has its CatchHandler @ 00409fdc */
    lVar8 = *param_9;
    puVar5 = local_8 + lVar9;
    if (-1 < *(int *)(lVar8 + -8)) {
      FUN_0041673c(param_9);
      lVar8 = *param_9;
    }
    (**(code **)(*plVar4 + 0x58))(plVar4,puVar3,puVar5,lVar8);
    puVar5 = local_8 + -0x18;
    if (puVar5 == PTR_DAT_00501f30) goto LAB_0040a0c0;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar6 = *(int *)(local_8 + -8);
    *(int *)(local_8 + -8) = iVar6 + -1;
  }
  else {
    piVar7 = (int *)(local_8 + -8);
    do {
      iVar6 = *piVar7;
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar7,0x10);
      if (bVar2) {
        *piVar7 = iVar6 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar6 < 1) {
    operator_delete(puVar5);
  }
LAB_0040a0c0:
  auVar12._8_8_ = uVar10;
  auVar12._0_8_ = uVar11;
  return auVar12;
}


==================================================================

### FUNC 0040a1d0 (3000 bytes) name=FUN_0040a1d0

undefined1  [16]
FUN_0040a1d0(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,undefined4 *param_7,long *param_8)

{
  bool bVar1;
  long *plVar2;
  undefined8 uVar3;
  bool bVar4;
  bool bVar5;
  char cVar6;
  char cVar7;
  int iVar8;
  int iVar9;
  wchar_t __c;
  int iVar10;
  wchar_t wVar11;
  long lVar12;
  long lVar13;
  undefined *puVar14;
  wchar_t *pwVar15;
  char cVar16;
  undefined4 uVar17;
  ulong uVar18;
  long lVar19;
  undefined1 uVar20;
  uint uVar21;
  undefined1 auVar22 [16];
  long *local_40;
  undefined8 local_38;
  long *local_30;
  undefined8 local_28;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  wVar11 = L'\0';
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  local_28 = param_3;
  lVar12 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  iVar8 = FUN_00406484(&local_30);
  iVar9 = FUN_00406484(&local_40);
  if ((iVar8 == -1) != (iVar9 == -1)) {
    wVar11 = FUN_00406484(&local_30);
    bVar5 = wVar11 != *(wchar_t *)(lVar12 + 0xe4);
    if ((bVar5) && (wVar11 != *(wchar_t *)(lVar12 + 0xe0))) {
      cVar6 = *(char *)(lVar12 + 0x20);
      __c = wVar11;
LAB_0040aad0:
      iVar8 = 0;
      bVar5 = false;
      do {
        if ((cVar6 != '\0') && (*(wchar_t *)(lVar12 + 0x4c) == __c)) {
          bVar1 = false;
          local_8 = PTR_DAT_00501f30 + 0x18;
          goto LAB_0040aa0c;
        }
        if ((*(wchar_t *)(lVar12 + 0x48) == __c) ||
           (wVar11 = *(wchar_t *)(lVar12 + 0xf0), wVar11 != __c)) {
          bVar1 = false;
          goto LAB_0040a260;
        }
        if (!bVar5) {
          lVar13 = *param_8;
          lVar19 = *(long *)(lVar13 + -0x18);
          uVar18 = lVar19 + 1;
          if ((*(ulong *)(lVar13 + -0x10) < uVar18) || (0 < *(int *)(lVar13 + -8))) {
            FUN_00410ed8(param_8,uVar18);
            lVar13 = *param_8;
            lVar19 = *(long *)(lVar13 + -0x18);
          }
          *(undefined1 *)(lVar13 + lVar19) = 0x30;
          lVar13 = *param_8;
          if ((undefined *)(lVar13 + -0x18) != PTR_DAT_00501f30) {
            *(undefined4 *)(lVar13 + -8) = 0;
            *(ulong *)(lVar13 + -0x18) = uVar18;
            *(undefined1 *)(lVar13 + uVar18) = 0;
          }
        }
        iVar8 = iVar8 + 1;
        if (local_30 == (long *)0x0) {
LAB_0040ac54:
          if (local_40 == (long *)0x0) goto LAB_0040ac2c;
          iVar10 = 1;
joined_r0x0040ac6c:
          iVar9 = 0;
          if ((int)local_38 == -1) {
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar9 = *(int *)local_40[2];
            }
            else {
              iVar9 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar9 == -1) {
              local_40 = (long *)0x0;
              iVar9 = 1;
            }
            else {
              local_38 = CONCAT44(local_38._4_4_,iVar9);
              iVar9 = 0;
            }
          }
          if (iVar10 == iVar9) goto LAB_0040ac2c;
        }
        else {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
            if (local_30 == (long *)0x0) goto LAB_0040ac54;
          }
          if ((int *)local_30[2] < (int *)local_30[3]) {
            iVar9 = *(int *)local_30[2];
          }
          else {
            iVar9 = (**(code **)(*local_30 + 0x48))();
          }
          if (iVar9 == -1) {
            local_30 = (long *)0x0;
            goto LAB_0040ac54;
          }
          iVar10 = 0;
          local_28 = CONCAT44(local_28._4_4_,iVar9);
          if (local_40 != (long *)0x0) {
            goto joined_r0x0040ac6c;
          }
        }
        bVar5 = true;
        __c = FUN_00406484(&local_30);
        cVar6 = *(char *)(lVar12 + 0x20);
      } while( true );
    }
    cVar6 = *(char *)(lVar12 + 0x20);
    if ((cVar6 != '\0') && (wVar11 == *(wchar_t *)(lVar12 + 0x4c))) {
      cVar6 = '\x01';
      __c = *(wchar_t *)(lVar12 + 0x4c);
      goto LAB_0040aad0;
    }
    __c = *(wchar_t *)(lVar12 + 0x48);
    if (wVar11 == *(wchar_t *)(lVar12 + 0x48)) goto LAB_0040aad0;
    uVar17 = 0x2d;
    if (!bVar5) {
      uVar17 = 0x2b;
    }
    FUN_004116e0(param_8,uVar17);
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = CONCAT44(local_28._4_4_,0xffffffff);
    }
    iVar8 = FUN_00406484(&local_30);
    iVar9 = FUN_00406484(&local_40);
    if ((iVar8 == -1) != (iVar9 == -1)) {
      __c = FUN_00406484(&local_30);
      cVar6 = *(char *)(lVar12 + 0x20);
      goto LAB_0040aad0;
    }
  }
  cVar6 = *(char *)(lVar12 + 0x20);
  iVar8 = 0;
  bVar5 = false;
  bVar1 = true;
  __c = wVar11;
  goto LAB_0040a260;
LAB_0040ac2c:
  bVar5 = true;
  cVar6 = *(char *)(lVar12 + 0x20);
  bVar1 = true;
  __c = wVar11;
LAB_0040a260:
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar6 != '\0') {
LAB_0040aa0c:
    FUN_00410ed8(&local_8,0x20);
  }
  cVar6 = *(char *)(lVar12 + 0x148);
  if (cVar6 == '\0') {
    if (!bVar1) {
      bVar4 = false;
      bVar1 = false;
LAB_0040a288:
      uVar21 = __c + L'\xffffffd0';
      if (9 < uVar21) goto LAB_0040a55c;
LAB_0040a294:
      lVar19 = *param_8;
      lVar13 = *(long *)(lVar19 + -0x18);
      uVar18 = lVar13 + 1;
      if ((*(ulong *)(lVar19 + -0x10) < uVar18) || (0 < *(int *)(lVar19 + -8))) {
        FUN_00410ed8(param_8,uVar18);
        lVar19 = *param_8;
        lVar13 = *(long *)(lVar19 + -0x18);
      }
      *(char *)(lVar19 + lVar13) = (char)uVar21 + '0';
      bVar5 = true;
      lVar13 = *param_8;
      if ((undefined *)(lVar13 + -0x18) != PTR_DAT_00501f30) goto LAB_0040a6ac;
LAB_0040a2ec:
      if (local_30 == (long *)0x0) goto LAB_0040a6c0;
      do {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
          local_28 = CONCAT44(local_28._4_4_,0xffffffff);
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = CONCAT44(local_28._4_4_,0xffffffff);
          if (local_30 == (long *)0x0) goto LAB_0040a6c0;
        }
        if ((int *)local_30[2] < (int *)local_30[3]) {
          iVar9 = *(int *)local_30[2];
        }
        else {
          iVar9 = (**(code **)(*local_30 + 0x48))();
        }
        if (iVar9 == -1) {
          local_30 = (long *)0x0;
          goto LAB_0040a6c0;
        }
        iVar10 = 0;
        local_28 = CONCAT44(local_28._4_4_,iVar9);
        if (local_40 == (long *)0x0) goto LAB_0040a544;
        while( true ) {
          iVar9 = 0;
          if ((int)local_38 == -1) {
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar9 = *(int *)local_40[2];
            }
            else {
              iVar9 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar9 == -1) {
              local_40 = (long *)0x0;
              iVar9 = 1;
            }
            else {
              local_38 = CONCAT44(local_38._4_4_,iVar9);
              iVar9 = 0;
            }
          }
          if (iVar9 == iVar10) goto LAB_0040a358;
LAB_0040a544:
          __c = FUN_00406484(&local_30);
          uVar21 = __c + L'\xffffffd0';
          if (uVar21 < 10) goto LAB_0040a294;
LAB_0040a55c:
          if ((*(wchar_t *)(lVar12 + 0x48) == __c) && (bVar1 < (bVar4 ^ 1U))) {
            FUN_004116e0(param_8,0x2e);
            bVar1 = true;
            goto LAB_0040a2ec;
          }
          if (((*(wchar_t *)(lVar12 + 0x128) != __c) && (*(wchar_t *)(lVar12 + 0x140) != __c)) ||
             (bVar5 <= bVar4)) goto LAB_0040a358;
          lVar13 = *param_8;
          lVar19 = *(long *)(lVar13 + -0x18);
          uVar18 = lVar19 + 1;
          if ((*(ulong *)(lVar13 + -0x10) < uVar18) || (0 < *(int *)(lVar13 + -8))) {
            FUN_00410ed8(param_8,uVar18);
            lVar13 = *param_8;
            lVar19 = *(long *)(lVar13 + -0x18);
          }
          *(undefined1 *)(lVar13 + lVar19) = 0x65;
          lVar13 = *param_8;
          if ((undefined *)(lVar13 + -0x18) != PTR_DAT_00501f30) {
            *(undefined4 *)(lVar13 + -8) = 0;
            *(ulong *)(lVar13 + -0x18) = uVar18;
            *(undefined1 *)(lVar13 + uVar18) = 0;
          }
          if (local_30 != (long *)0x0) {
            if ((ulong)local_30[2] < (ulong)local_30[3]) {
              local_30[2] = local_30[2] + 4;
            }
            else {
              (**(code **)(*local_30 + 0x50))();
            }
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
          }
          iVar9 = FUN_00406484(&local_30);
          iVar10 = FUN_00406484(&local_40);
          if ((iVar10 == -1) == (iVar9 == -1)) goto LAB_0040ab90;
          __c = FUN_00406484(&local_30);
          if (__c == *(wchar_t *)(lVar12 + 0xe4)) {
            uVar20 = 0x2b;
          }
          else {
            bVar4 = true;
            uVar20 = 0x2d;
            if (__c != *(wchar_t *)(lVar12 + 0xe0)) goto LAB_0040a288;
          }
          lVar13 = *param_8;
          lVar19 = *(long *)(lVar13 + -0x18);
          uVar18 = lVar19 + 1;
          if ((*(ulong *)(lVar13 + -0x10) < uVar18) || (0 < *(int *)(lVar13 + -8))) {
            FUN_00410ed8(param_8,uVar18);
            lVar13 = *param_8;
            lVar19 = *(long *)(lVar13 + -0x18);
          }
          *(undefined1 *)(lVar13 + lVar19) = uVar20;
          bVar4 = true;
          lVar13 = *param_8;
          if ((undefined *)(lVar13 + -0x18) == PTR_DAT_00501f30) goto LAB_0040a2ec;
LAB_0040a6ac:
          *(undefined4 *)(lVar13 + -8) = 0;
          *(ulong *)(lVar13 + -0x18) = uVar18;
          *(undefined1 *)(lVar13 + uVar18) = 0;
          if (local_30 != (long *)0x0) break;
LAB_0040a6c0:
          if (local_40 == (long *)0x0) goto LAB_0040a358;
          iVar10 = 1;
        }
      } while( true );
    }
LAB_0040abf0:
    puVar14 = local_8;
    if (*(long *)(local_8 + -0x18) != 0) {
LAB_0040abfc:
      FUN_004116e0(&local_8,iVar8);
LAB_0040a374:
      puVar14 = local_8;
      cVar6 = FUN_003ee0cc(*(undefined8 *)(lVar12 + 0x10),*(undefined8 *)(lVar12 + 0x18),&local_8);
      if (cVar6 == '\0') {
        *param_7 = 4;
      }
    }
LAB_0040a398:
    puVar14 = puVar14 + -0x18;
    if (puVar14 == PTR_DAT_00501f30) goto LAB_0040a3ac;
  }
  else {
    if (bVar1) goto LAB_0040abf0;
    cVar7 = *(char *)(lVar12 + 0x20);
    bVar4 = false;
    bVar1 = false;
LAB_0040a3ec:
    if ((cVar7 != '\0') && (__c == *(wchar_t *)(lVar12 + 0x4c))) {
      if ((bVar4 ^ 1U) <= bVar1) goto LAB_0040ab90;
      if (iVar8 != 0) {
        FUN_004116e0(&local_8,iVar8);
        bVar1 = false;
        iVar8 = 0;
LAB_0040a4c4:
        if (local_30 == (long *)0x0) {
LAB_0040a78c:
          if (local_40 == (long *)0x0) goto LAB_0040a358;
          cVar7 = cVar6;
joined_r0x0040a7a4:
          cVar16 = '\0';
          if ((int)local_38 == -1) {
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar9 = *(int *)local_40[2];
            }
            else {
              iVar9 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar9 == -1) {
              local_40 = (long *)0x0;
              cVar16 = cVar6;
            }
            else {
              local_38 = CONCAT44(local_38._4_4_,iVar9);
              cVar16 = '\0';
            }
          }
          if (cVar7 == cVar16) goto LAB_0040a358;
        }
        else {
LAB_0040a4cc:
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
          }
          else {
            (**(code **)(*local_30 + 0x50))();
            local_28 = CONCAT44(local_28._4_4_,0xffffffff);
            if (local_30 == (long *)0x0) goto LAB_0040a78c;
          }
          if ((int *)local_30[2] < (int *)local_30[3]) {
            iVar9 = *(int *)local_30[2];
          }
          else {
            iVar9 = (**(code **)(*local_30 + 0x48))();
          }
          if (iVar9 == -1) {
            local_30 = (long *)0x0;
            goto LAB_0040a78c;
          }
          cVar7 = '\0';
          local_28 = CONCAT44(local_28._4_4_,iVar9);
          if (local_40 != (long *)0x0) {
            goto joined_r0x0040a7a4;
          }
        }
        __c = FUN_00406484(&local_30);
        cVar7 = *(char *)(lVar12 + 0x20);
        goto LAB_0040a3ec;
      }
      FUN_00412b08(param_8,0,*(undefined8 *)(*param_8 + -0x18),0);
      bVar1 = false;
LAB_0040a358:
      puVar14 = local_8;
      if (*(long *)(local_8 + -0x18) != 0) {
        if ((bVar4 ^ 1U) <= bVar1) goto LAB_0040a374;
        goto LAB_0040abfc;
      }
      goto LAB_0040a398;
    }
    if (__c != *(wchar_t *)(lVar12 + 0x48)) {
      pwVar15 = wmemchr((wchar_t *)(lVar12 + 0xf0),__c,10);
      if (pwVar15 != (wchar_t *)0x0) {
        lVar19 = *param_8;
        lVar13 = *(long *)(lVar19 + -0x18);
        uVar18 = lVar13 + 1;
        if ((*(ulong *)(lVar19 + -0x10) < uVar18) || (0 < *(int *)(lVar19 + -8))) {
          FUN_00410ed8(param_8,uVar18);
          lVar19 = *param_8;
          lVar13 = *(long *)(lVar19 + -0x18);
        }
        *(char *)(lVar19 + lVar13) = (char)((long)pwVar15 - (lVar12 + 0xf0) >> 2) + '0';
        lVar13 = *param_8;
        if ((undefined *)(lVar13 + -0x18) != PTR_DAT_00501f30) {
          *(undefined4 *)(lVar13 + -8) = 0;
          *(ulong *)(lVar13 + -0x18) = uVar18;
          *(undefined1 *)(lVar13 + uVar18) = 0;
        }
        iVar8 = iVar8 + 1;
        bVar5 = true;
        if (local_30 != (long *)0x0) goto LAB_0040a4cc;
        goto LAB_0040a78c;
      }
      if (((__c != *(wchar_t *)(lVar12 + 0x128)) && (__c != *(wchar_t *)(lVar12 + 0x140))) ||
         (bVar5 <= bVar4)) goto LAB_0040a358;
      if ((!bVar1) && (*(long *)(local_8 + -0x18) != 0)) {
        FUN_004116e0(&local_8,iVar8);
      }
      FUN_004116e0(param_8,0x65);
      if (local_30 != (long *)0x0) {
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
        }
        local_28 = CONCAT44(local_28._4_4_,0xffffffff);
      }
      iVar9 = FUN_00406484(&local_30);
      iVar10 = FUN_00406484(&local_40);
      if ((iVar10 == -1) == (iVar9 == -1)) goto LAB_0040ab90;
      __c = FUN_00406484(&local_30);
      bVar4 = __c == *(wchar_t *)(lVar12 + 0xe4);
      if ((bVar4) || (__c == *(wchar_t *)(lVar12 + 0xe0))) {
        cVar7 = *(char *)(lVar12 + 0x20);
        if ((cVar7 == '\0') || (__c != *(wchar_t *)(lVar12 + 0x4c))) {
          if (__c != *(wchar_t *)(lVar12 + 0x48)) {
            uVar17 = 0x2d;
            if (bVar4) {
              uVar17 = 0x2b;
            }
            FUN_004116e0(param_8,uVar17);
            bVar4 = true;
            goto LAB_0040a4c4;
          }
          goto LAB_0040a8c4;
        }
        cVar7 = '\x01';
        bVar4 = true;
      }
      else {
        cVar7 = *(char *)(lVar12 + 0x20);
LAB_0040a8c4:
        bVar4 = true;
      }
      goto LAB_0040a3ec;
    }
    if (bVar1 < (bVar4 ^ 1U)) {
      lVar13 = *(long *)(local_8 + -0x18);
      if (lVar13 != 0) {
        uVar18 = lVar13 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar18) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(&local_8,uVar18);
          lVar13 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar13] = (char)iVar8;
        if (local_8 + -0x18 != PTR_DAT_00501f30) {
          *(undefined4 *)(local_8 + -8) = 0;
          *(ulong *)(local_8 + -0x18) = uVar18;
          local_8[uVar18] = 0;
        }
      }
      lVar13 = *param_8;
      lVar19 = *(long *)(lVar13 + -0x18);
      uVar18 = lVar19 + 1;
      if ((*(ulong *)(lVar13 + -0x10) < uVar18) || (0 < *(int *)(lVar13 + -8))) {
        FUN_00410ed8(param_8,uVar18);
        lVar13 = *param_8;
        lVar19 = *(long *)(lVar13 + -0x18);
      }
      *(undefined1 *)(lVar13 + lVar19) = 0x2e;
      bVar1 = true;
      lVar13 = *param_8;
      if ((undefined *)(lVar13 + -0x18) != PTR_DAT_00501f30) {
        *(undefined4 *)(lVar13 + -8) = 0;
        *(ulong *)(lVar13 + -0x18) = uVar18;
        *(undefined1 *)(lVar13 + uVar18) = 0;
      }
      goto LAB_0040a4c4;
    }
LAB_0040ab90:
    if (*(long *)(local_8 + -0x18) != 0) goto LAB_0040a374;
    puVar14 = local_8 + -0x18;
    if (puVar14 == PTR_DAT_00501f30) goto LAB_0040a3ac;
  }
  uVar3 = local_28;
  plVar2 = local_30;
  FUN_003ff25c(puVar14,auStack_10);
  local_30 = plVar2;
  local_28 = uVar3;
LAB_0040a3ac:
  auVar22._8_8_ = local_28;
  auVar22._0_8_ = local_30;
  return auVar22;
}


==================================================================

### FUNC 0040adb0 (564 bytes) name=FUN_0040adb0

undefined1  [16]
FUN_0040adb0(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,float *param_8)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  int *piVar4;
  bool bVar5;
  bool bVar6;
  char *pcVar7;
  long *plVar8;
  ulong uVar9;
  undefined1 auVar10 [16];
  char *local_10;
  int *local_8;
  
  local_10 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_10,0x20);
  auVar10 = FUN_0040a1d0(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar7 = local_10;
  plVar8 = auVar10._0_8_;
  uVar9 = auVar10._8_8_ & 0xffffffff;
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<float>(pcVar7,param_8,param_7,&local_8);
  iVar2 = (int)param_5;
  if (plVar8 == (long *)0x0) {
LAB_0040af90:
    plVar8 = (long *)0x0;
    bVar6 = true;
    bVar5 = true;
    if (param_4 != (long *)0x0) goto joined_r0x0040afa4;
LAB_0040af08:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040aec0;
  }
  else {
    if (auVar10._8_4_ == -1) {
      if ((uint *)plVar8[2] < (uint *)plVar8[3]) {
        uVar3 = *(uint *)plVar8[2];
      }
      else {
        uVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
      }
      if (uVar3 == 0xffffffff) goto LAB_0040af90;
      uVar9 = (ulong)uVar3;
    }
    if (param_4 != (long *)0x0) {
      bVar6 = false;
      bVar5 = false;
joined_r0x0040afa4:
      if (iVar2 == -1) {
        if ((int *)param_4[2] < (int *)param_4[3]) {
          if ((*(int *)param_4[2] == -1) == bVar6) goto LAB_0040af08;
          goto LAB_0040aea8;
        }
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        bVar5 = bVar6;
      }
      if ((iVar2 == -1) == bVar5) goto LAB_0040af08;
    }
LAB_0040aea8:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040aec0;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar2 + -1;
  }
  else {
    piVar4 = (int *)(local_10 + -8);
    do {
      iVar2 = *piVar4;
      cVar1 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar5) {
        *piVar4 = iVar2 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(pcVar7);
  }
LAB_0040aec0:
  auVar10._8_8_ = uVar9;
  auVar10._0_8_ = plVar8;
  return auVar10;
}


==================================================================

### FUNC 0040b00c (564 bytes) name=FUN_0040b00c

undefined1  [16]
FUN_0040b00c(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,double *param_8)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  int *piVar4;
  bool bVar5;
  bool bVar6;
  char *pcVar7;
  long *plVar8;
  ulong uVar9;
  undefined1 auVar10 [16];
  char *local_10;
  int *local_8;
  
  local_10 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_10,0x20);
  auVar10 = FUN_0040a1d0(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar7 = local_10;
  plVar8 = auVar10._0_8_;
  uVar9 = auVar10._8_8_ & 0xffffffff;
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<double>(pcVar7,param_8,param_7,&local_8);
  iVar2 = (int)param_5;
  if (plVar8 == (long *)0x0) {
LAB_0040b1ec:
    plVar8 = (long *)0x0;
    bVar6 = true;
    bVar5 = true;
    if (param_4 != (long *)0x0) goto joined_r0x0040b200;
LAB_0040b164:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040b11c;
  }
  else {
    if (auVar10._8_4_ == -1) {
      if ((uint *)plVar8[2] < (uint *)plVar8[3]) {
        uVar3 = *(uint *)plVar8[2];
      }
      else {
        uVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
      }
      if (uVar3 == 0xffffffff) goto LAB_0040b1ec;
      uVar9 = (ulong)uVar3;
    }
    if (param_4 != (long *)0x0) {
      bVar6 = false;
      bVar5 = false;
joined_r0x0040b200:
      if (iVar2 == -1) {
        if ((int *)param_4[2] < (int *)param_4[3]) {
          if ((*(int *)param_4[2] == -1) == bVar6) goto LAB_0040b164;
          goto LAB_0040b104;
        }
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        bVar5 = bVar6;
      }
      if ((iVar2 == -1) == bVar5) goto LAB_0040b164;
    }
LAB_0040b104:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040b11c;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar2 + -1;
  }
  else {
    piVar4 = (int *)(local_10 + -8);
    do {
      iVar2 = *piVar4;
      cVar1 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar5) {
        *piVar4 = iVar2 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(pcVar7);
  }
LAB_0040b11c:
  auVar10._8_8_ = uVar9;
  auVar10._0_8_ = plVar8;
  return auVar10;
}


==================================================================

### FUNC 0040b268 (564 bytes) name=FUN_0040b268

undefined1  [16]
FUN_0040b268(undefined8 param_1,undefined8 param_2,ulong param_3,long *param_4,undefined8 param_5,
            undefined8 param_6,_Ios_Iostate *param_7,longdouble *param_8)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  int *piVar4;
  bool bVar5;
  bool bVar6;
  char *pcVar7;
  long *plVar8;
  ulong uVar9;
  undefined1 auVar10 [16];
  char *local_10;
  int *local_8;
  
  local_10 = PTR_DAT_00501f30 + 0x18;
  FUN_00410ed8(&local_10,0x20);
  auVar10 = FUN_0040a1d0(param_1,param_2,param_3,param_4,param_5,param_6,param_7,&local_10);
  pcVar7 = local_10;
  plVar8 = auVar10._0_8_;
  uVar9 = auVar10._8_8_ & 0xffffffff;
  local_8 = (int *)FUN_003ed450();
  std::__convert_to_v<long_double>(pcVar7,param_8,param_7,&local_8);
  iVar2 = (int)param_5;
  if (plVar8 == (long *)0x0) {
LAB_0040b448:
    plVar8 = (long *)0x0;
    bVar6 = true;
    bVar5 = true;
    if (param_4 != (long *)0x0) goto joined_r0x0040b45c;
LAB_0040b3c0:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    *(uint *)param_7 = *(uint *)param_7 | 2;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040b378;
  }
  else {
    if (auVar10._8_4_ == -1) {
      if ((uint *)plVar8[2] < (uint *)plVar8[3]) {
        uVar3 = *(uint *)plVar8[2];
      }
      else {
        uVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
      }
      if (uVar3 == 0xffffffff) goto LAB_0040b448;
      uVar9 = (ulong)uVar3;
    }
    if (param_4 != (long *)0x0) {
      bVar6 = false;
      bVar5 = false;
joined_r0x0040b45c:
      if (iVar2 == -1) {
        if ((int *)param_4[2] < (int *)param_4[3]) {
          if ((*(int *)param_4[2] == -1) == bVar6) goto LAB_0040b3c0;
          goto LAB_0040b360;
        }
        iVar2 = (**(code **)(*param_4 + 0x48))(param_4);
        bVar5 = bVar6;
      }
      if ((iVar2 == -1) == bVar5) goto LAB_0040b3c0;
    }
LAB_0040b360:
    uVar9 = param_3 & 0xffffffff00000000 | uVar9;
    pcVar7 = local_10 + -0x18;
    if (pcVar7 == PTR_DAT_00501f30) goto LAB_0040b378;
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)(local_10 + -8);
    *(int *)(local_10 + -8) = iVar2 + -1;
  }
  else {
    piVar4 = (int *)(local_10 + -8);
    do {
      iVar2 = *piVar4;
      cVar1 = '\x01';
      bVar5 = (bool)ExclusiveMonitorPass(piVar4,0x10);
      if (bVar5) {
        *piVar4 = iVar2 + -1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(pcVar7);
  }
LAB_0040b378:
  auVar10._8_8_ = uVar9;
  auVar10._0_8_ = plVar8;
  return auVar10;
}


==================================================================

### FUNC 0040b4c4 (2288 bytes) name=FUN_0040b4c4

undefined1  [16]
FUN_0040b4c4(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,ulong *param_8)

{
  ulong uVar1;
  ulong uVar2;
  bool bVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  bool bVar6;
  bool bVar7;
  wchar_t wVar8;
  bool bVar9;
  char cVar10;
  int iVar11;
  int iVar12;
  wchar_t wVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  wchar_t *pwVar19;
  char cVar20;
  ulong uVar21;
  char cVar22;
  ulong uVar23;
  ulong uVar24;
  ulong uVar25;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar17 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar15 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar15 == 0x40) {
    iVar16 = 8;
  }
  else {
    iVar16 = 0x10;
    if (uVar15 != 8) {
      iVar16 = 10;
    }
  }
  iVar11 = FUN_00406484(&local_30);
  iVar12 = FUN_00406484(&local_40);
  if ((iVar11 == -1) == (iVar12 == -1)) {
    wVar13 = L'\0';
    bVar9 = false;
  }
  else {
    wVar13 = FUN_00406484(&local_30);
    bVar9 = wVar13 == *(wchar_t *)(lVar17 + 0xe0);
                    /* try { // try from 0040bb8c to 0050bbc7 has its CatchHandler @ 0040bb2c */
    if ((!bVar9) && (wVar13 != *(wchar_t *)(lVar17 + 0xe4))) {
      cVar10 = *(char *)(lVar17 + 0x20);
LAB_0040b5f8:
      iVar11 = 0;
      bVar7 = false;
      do {
        if (((cVar10 != '\0') && (*(wchar_t *)(lVar17 + 0x4c) == wVar13)) ||
           (*(wchar_t *)(lVar17 + 0x48) == wVar13)) {
LAB_0040bd4c:
          bVar3 = false;
          goto joined_r0x0040ba28;
        }
        if (*(wchar_t *)(lVar17 + 0xf0) == wVar13) {
          if ((iVar16 == 10) < bVar7) goto LAB_0040b634;
          iVar11 = iVar11 + 1;
          if ((iVar16 == 8) || (bVar7 = true, uVar15 == 0)) {
            iVar11 = 0;
            bVar7 = true;
            iVar16 = 8;
          }
        }
        else {
          if (!bVar7) goto LAB_0040bd4c;
LAB_0040b634:
          if ((*(wchar_t *)(lVar17 + 0xe8) != wVar13) && (*(wchar_t *)(lVar17 + 0xec) != wVar13)) {
            bVar7 = true;
            bVar3 = false;
            goto joined_r0x0040ba28;
          }
          if ((iVar16 != 0x10) && (uVar15 != 0)) {
            bVar3 = false;
            bVar7 = true;
            goto LAB_0040b6e0;
          }
          iVar11 = 0;
          bVar7 = false;
          iVar16 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar12 = FUN_00406484(&local_30);
        iVar14 = FUN_00406484(&local_40);
        if ((iVar12 == -1) == (iVar14 == -1)) {
          cVar10 = *(char *)(lVar17 + 0x20);
          bVar3 = true;
          goto joined_r0x0040ba28;
        }
        wVar13 = FUN_00406484(&local_30);
        if (!bVar7) goto LAB_0040bda8;
        cVar10 = *(char *)(lVar17 + 0x20);
      } while( true );
    }
    cVar10 = *(char *)(lVar17 + 0x20);
    if ((cVar10 != '\0') && (wVar13 == *(wchar_t *)(lVar17 + 0x4c))) {
      cVar10 = '\x01';
      goto LAB_0040b5f8;
    }
    if (wVar13 == *(wchar_t *)(lVar17 + 0x48)) goto LAB_0040b5f8;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar11 = FUN_00406484(&local_30);
    iVar12 = FUN_00406484(&local_40);
    if ((iVar11 == -1) != (iVar12 == -1)) {
      wVar13 = FUN_00406484(&local_30);
      cVar10 = *(char *)(lVar17 + 0x20);
      goto LAB_0040b5f8;
    }
  }
  cVar10 = *(char *)(lVar17 + 0x20);
  bVar3 = true;
  iVar11 = 0;
  bVar7 = false;
joined_r0x0040ba28:
  if (iVar16 == 0x10) {
    uVar24 = 0x16;
  }
  else {
LAB_0040b6e0:
    uVar24 = (ulong)iVar16;
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar10 != '\0') {
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
  }
  local_58 = &local_8;
  uVar25 = (ulong)iVar16;
  cVar10 = *(char *)(lVar17 + 0x148);
  uVar1 = 0x7fffffffffffffff;
  if (bVar9) {
    uVar1 = 0x8000000000000000;
  }
  uVar2 = 0;
  if (uVar25 != 0) {
    uVar2 = uVar1 / uVar25;
  }
  if (cVar10 == '\0') {
    uVar23 = 0;
    bVar6 = false;
    if (!bVar3) {
LAB_0040b748:
      if (10 < uVar24) goto LAB_0040b81c;
LAB_0040b750:
      if ((0x2f < (uint)wVar13) && ((uint)wVar13 < (uint)((int)uVar24 + L'0'))) {
        uVar15 = wVar13 + L'\xffffffd0';
LAB_0040b768:
        if (uVar23 <= uVar2) goto LAB_0040b84c;
LAB_0040b770:
        bVar6 = true;
        if (local_30 == (long *)0x0) goto LAB_0040b878;
LAB_0040b77c:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
                    /* try { // try from 0040bc6c to 0050bc6f has its CatchHandler @ 0040bc90 */
          (**(code **)(*local_30 + 0x50))();
                    /* try { // try from 0040bc74 to 0050bc77 has its CatchHandler @ 0040bb2c */
          local_28 = L'\xffffffff';
                    /* catch() { ... } // from try @ 0040bbf4 with catch @ 0040bc7c */
          if (local_30 == (long *)0x0) goto LAB_0040b878;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040b878;
        }
        iVar16 = 0;
        local_28 = wVar13;
        if (local_40 == (long *)0x0) goto LAB_0040b7dc;
        iVar12 = 0;
        if ((int)local_38 == -1) goto LAB_0040b894;
LAB_0040b7d4:
        do {
          if (iVar12 == iVar16) goto LAB_0040b8c0;
LAB_0040b7dc:
          while( true ) {
            wVar13 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar13 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040b748;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar13 = *(wchar_t *)local_30[2];
            }
            else {
              wVar13 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar13 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040b748;
            }
            local_28 = wVar13;
            if (uVar24 < 0xb) goto LAB_0040b750;
LAB_0040b81c:
            uVar15 = wVar13 + L'\xffffffd0';
            if (uVar15 < 10) goto LAB_0040b768;
            if ((uint)(wVar13 + L'\xffffff9f') < 6) {
              uVar15 = wVar13 + L'\xffffffa9';
              goto LAB_0040b768;
            }
            if (5 < (uint)(wVar13 + L'\xffffffbf')) goto LAB_0040b980;
            uVar15 = wVar13 + L'\xffffffc9';
            if (uVar2 < uVar23) goto LAB_0040b770;
LAB_0040b84c:
            uVar21 = uVar23 * uVar25;
            iVar11 = iVar11 + 1;
            uVar23 = (long)(int)uVar15 + uVar21;
            bVar6 = (bool)(bVar6 | uVar1 - (long)(int)uVar15 < uVar21);
            if (local_30 != (long *)0x0) goto LAB_0040b77c;
LAB_0040b878:
            if (local_40 == (long *)0x0) goto LAB_0040b8c0;
            iVar16 = 1;
            iVar12 = 0;
            if ((int)local_38 != -1) goto LAB_0040b7d4;
LAB_0040b894:
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar12 = *(int *)local_40[2];
            }
            else {
              iVar12 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar12 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar12);
            if (iVar16 == 0) goto LAB_0040b8c0;
          }
          local_40 = (long *)0x0;
          iVar12 = 1;
        } while( true );
      }
    }
LAB_0040b980:
    bVar4 = false;
  }
  else {
    if (!bVar3) {
      uVar23 = 0;
      bVar6 = false;
      wVar8 = local_28;
LAB_0040ba6c:
      local_28 = wVar8;
      if ((*(char *)(lVar17 + 0x20) == '\0') || (wVar13 != *(wchar_t *)(lVar17 + 0x4c))) {
        if ((wVar13 == *(wchar_t *)(lVar17 + 0x48)) ||
           (pwVar19 = wmemchr((wchar_t *)(lVar17 + 0xf0),wVar13,uVar24), pwVar19 == (wchar_t *)0x0))
        goto LAB_0040b980;
        iVar16 = (int)((long)pwVar19 - (lVar17 + 0xf0) >> 2);
        if (0xf < iVar16) {
          iVar16 = iVar16 + -6;
        }
        if (uVar23 <= uVar2) {
          uVar21 = uVar23 * uVar25;
          iVar11 = iVar11 + 1;
          uVar23 = (long)iVar16 + uVar21;
          bVar6 = (bool)(bVar6 | uVar1 - (long)iVar16 < uVar21);
          goto LAB_0040bae0;
        }
        bVar6 = true;
        if (local_30 != (long *)0x0) goto LAB_0040bae8;
LAB_0040bbf0:
                    /* try { // try from 0040bbf4 to 0050bbf7 has its CatchHandler @ 0040bc7c */
        if (local_40 == (long *)0x0) goto LAB_0040b8c0;
        cVar22 = cVar10;
                    /* try { // try from 0040bbfc to 0050bc33 has its CatchHandler @ 0040bb2c */
joined_r0x0040bc08:
        cVar20 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar16 = *(int *)local_40[2];
          }
          else {
            iVar16 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar16 == -1) {
            local_40 = (long *)0x0;
            cVar20 = cVar10;
                    /* try { // try from 0040bc8c to 0050bc8f has its CatchHandler @ 0040bb2c */
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar16);
            cVar20 = '\0';
          }
        }
        if (cVar20 == cVar22) goto LAB_0040b8c0;
      }
      else {
        if (iVar11 == 0) {
          bVar4 = true;
          goto LAB_0040b984;
        }
        FUN_004116e0(local_58,iVar11);
        iVar11 = 0;
LAB_0040bae0:
        if (local_30 == (long *)0x0) goto LAB_0040bbf0;
LAB_0040bae8:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
                    /* try { // try from 0040bca0 to 0050bca3 has its CatchHandler @ 0040bb2c */
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040bbf0;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
                    /* catch() { ... } // from try @ 0040bc6c with catch @ 0040bc90 */
          local_30 = (long *)0x0;
          goto LAB_0040bbf0;
        }
        cVar22 = '\0';
                    /* catch() { ... } // from try @ 0040bb8c with catch @ 0040bb2c
                       catch() { ... } // from try @ 0040bbfc with catch @ 0040bb2c
                       catch() { ... } // from try @ 0040bc74 with catch @ 0040bb2c
                       catch() { ... } // from try @ 0040bc8c with catch @ 0040bb2c
                       catch() { ... } // from try @ 0040bca0 with catch @ 0040bb2c */
        local_28 = wVar13;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040bc08;
        }
      }
      wVar8 = local_28;
      wVar13 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar13 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        wVar8 = wVar13;
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar8 = local_28;
        }
      }
      goto LAB_0040ba6c;
    }
    uVar23 = 0;
    bVar6 = false;
    bVar4 = false;
  }
LAB_0040b984:
  lVar18 = *(long *)(local_8 + -0x18);
joined_r0x0040b8d0:
  if (lVar18 == 0) {
    if ((iVar11 == 0) <= bVar7) {
LAB_0040b9a4:
      if (!bVar4) {
        if (bVar6) {
          uVar24 = 0x7fffffffffffffff;
          if (bVar9) {
            uVar24 = 0x8000000000000000;
          }
          *param_8 = uVar24;
          *param_7 = 4;
        }
        else {
          uVar24 = -uVar23;
          if (!bVar9) {
            uVar24 = uVar23;
          }
          *param_8 = uVar24;
        }
        goto LAB_0040b930;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar11);
    cVar10 = FUN_003ee0cc(*(undefined8 *)(lVar17 + 0x10),*(undefined8 *)(lVar17 + 0x18),local_58);
    if (cVar10 == '\0') {
      *param_7 = 4;
    }
    if (((iVar11 == 0) <= bVar7) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040b9a4;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040b930:
  if (bVar3) {
    *param_7 = *param_7 | 2;
  }
  auVar5._8_4_ = local_28;
  auVar5._0_8_ = local_30;
  auVar5._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar5;
LAB_0040bda8:
  cVar10 = *(char *)(lVar17 + 0x20);
  bVar3 = false;
  goto joined_r0x0040ba28;
LAB_0040b8c0:
  bVar4 = false;
  bVar3 = true;
  lVar18 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040b8d0;
}


==================================================================

### FUNC 0040bde0 (20 bytes) name=FUN_0040bde0

void FUN_0040bde0(void)

{
  FUN_0040b4c4();
  return;
}


==================================================================

### FUNC 0040bdf4 (1016 bytes) name=FUN_0040bdf4

undefined1  [16]
FUN_0040bdf4(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,byte *param_8)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  undefined1 auVar3 [16];
  bool bVar4;
  bool bVar5;
  bool bVar6;
  bool bVar7;
  int iVar8;
  int iVar9;
  long lVar10;
  ulong uVar11;
  long *local_30;
  undefined8 local_28;
  undefined1 local_20 [12];
  undefined4 uStack_14;
  ulong local_8;
  
  local_20._8_4_ = (undefined4)param_3;
  uStack_14 = (undefined4)((ulong)param_3 >> 0x20);
  local_30 = param_4;
  local_28 = param_5;
  local_20._0_8_ = param_2;
  if ((*(uint *)(param_6 + 0x18) & 1) == 0) {
    local_8 = 0xffffffffffffffff;
    local_20 = FUN_0040b4c4();
    if (local_8 < 2) {
      *param_8 = (byte)local_8 & 1;
    }
    else {
      *param_8 = 1;
      *param_7 = 4;
      iVar8 = FUN_00406484(local_20);
      iVar9 = FUN_00406484(&local_30);
      if ((iVar8 == -1) == (iVar9 == -1)) {
        *param_7 = *param_7 | 2;
      }
    }
    goto LAB_0040c11c;
  }
  bVar7 = true;
  uVar11 = 0;
  lVar10 = FUN_004063a0(&local_8,param_6 + 0xd0);
  bVar4 = *(long *)(lVar10 + 0x40) == 0;
  bVar6 = true;
  bVar5 = *(long *)(lVar10 + 0x30) == 0;
LAB_0040bedc:
  if (bVar4 <= (bVar5 ^ 1U)) {
    do {
      if ((long *)local_20._0_8_ == (long *)0x0) {
LAB_0040c030:
        if (local_30 != (long *)0x0) {
          iVar8 = 1;
joined_r0x0040c048:
          iVar9 = 0;
          if ((int)local_28 == -1) {
            if ((int *)local_30[2] < (int *)local_30[3]) {
              iVar9 = *(int *)local_30[2];
            }
            else {
              iVar9 = (**(code **)(*local_30 + 0x48))(local_30);
            }
            if (iVar9 != -1) {
              local_28 = CONCAT44(local_28._4_4_,iVar9);
              if (iVar8 != 0) goto LAB_0040bf20;
              goto LAB_0040c078;
            }
            local_30 = (long *)0x0;
            iVar9 = 1;
          }
          if (iVar8 != iVar9) goto LAB_0040bf20;
        }
LAB_0040c078:
        iVar8 = 1;
        if (bVar6) goto LAB_0040c0c8;
        goto LAB_0040bfe0;
      }
      if (local_20._8_4_ == -1) {
        if (*(int **)(local_20._0_8_ + 0x10) < *(int **)(local_20._0_8_ + 0x18)) {
          iVar8 = **(int **)(local_20._0_8_ + 0x10);
        }
        else {
          iVar8 = (**(code **)(*(long *)local_20._0_8_ + 0x48))(local_20._0_8_);
        }
        if (iVar8 == -1) {
          local_20._0_8_ = (long *)0x0;
          goto LAB_0040c030;
        }
        local_20._8_4_ = iVar8;
        if (local_30 != (long *)0x0) goto LAB_0040bf08;
LAB_0040bf20:
        iVar8 = -1;
        iVar9 = local_20._8_4_;
        if (((long *)local_20._0_8_ != (long *)0x0) &&
           (iVar8 = local_20._8_4_, local_20._8_4_ == -1)) {
          if (*(int **)(local_20._0_8_ + 0x10) < *(int **)(local_20._0_8_ + 0x18)) {
            iVar8 = **(int **)(local_20._0_8_ + 0x10);
          }
          else {
            iVar8 = (**(code **)(*(long *)local_20._0_8_ + 0x48))(local_20._0_8_);
          }
          iVar9 = iVar8;
          if (iVar8 == -1) {
            local_20._0_8_ = (long *)0x0;
            iVar9 = local_20._8_4_;
          }
        }
      }
      else {
        iVar8 = local_20._8_4_;
        iVar9 = local_20._8_4_;
        if (local_30 != (long *)0x0) {
LAB_0040bf08:
          iVar8 = 0;
          goto joined_r0x0040c048;
        }
      }
      local_20._8_4_ = iVar9;
      if (!bVar4) {
        bVar6 = *(int *)(*(long *)(lVar10 + 0x38) + uVar11 * 4) == iVar8;
      }
      if (bVar6 < bVar5) break;
      if (!bVar5) {
        bVar7 = *(int *)(*(long *)(lVar10 + 0x28) + uVar11 * 4) == iVar8;
      }
      if ((bVar7 < bVar4) || (bVar7 < (bVar6 ^ 1U))) {
        if ((!bVar6) || ((*(ulong *)(lVar10 + 0x40) != uVar11 || (uVar11 == 0)))) {
          *param_8 = 0;
          goto LAB_0040c194;
        }
        *param_8 = 0;
        *param_7 = 0;
        goto LAB_0040c0f4;
      }
      uVar11 = uVar11 + 1;
      if ((long *)local_20._0_8_ != (long *)0x0) {
        if (*(ulong *)(local_20._0_8_ + 0x10) < *(ulong *)(local_20._0_8_ + 0x18)) {
          *(ulong *)(local_20._0_8_ + 0x10) = *(ulong *)(local_20._0_8_ + 0x10) + 4;
        }
        else {
          (**(code **)(*(long *)local_20._0_8_ + 0x50))();
        }
        local_20._8_4_ = -1;
      }
      bVar4 = true;
      if (bVar6) {
        bVar4 = *(ulong *)(lVar10 + 0x40) <= uVar11;
      }
      bVar5 = true;
      if (!bVar7) goto LAB_0040bedc;
      bVar5 = *(ulong *)(lVar10 + 0x30) <= uVar11;
      if (!bVar5 < bVar4) break;
    } while( true );
  }
  iVar8 = 0;
  if (bVar6) {
LAB_0040c0c8:
    if ((uVar11 != *(ulong *)(lVar10 + 0x40)) || (uVar11 == 0)) goto LAB_0040bfe0;
    *param_8 = 0;
    if ((!bVar7) || (uVar11 != *(ulong *)(lVar10 + 0x30))) {
      *param_7 = iVar8 << 1;
      goto LAB_0040c0f4;
    }
  }
  else {
LAB_0040bfe0:
    if (((bVar7) && (*(ulong *)(lVar10 + 0x30) == uVar11)) && (uVar11 != 0)) {
      *param_8 = 1;
      *param_7 = iVar8 << 1;
LAB_0040c11c:
      auVar2._12_4_ = uStack_14;
      auVar2._0_12_ = local_20;
      return auVar2;
    }
    *param_8 = 0;
    if (iVar8 != 0) {
      *param_7 = 6;
      auVar3._8_4_ = local_20._8_4_;
      auVar3._0_8_ = local_20._0_8_;
      auVar3._12_4_ = uStack_14;
      return auVar3;
    }
  }
LAB_0040c194:
  *param_7 = 4;
LAB_0040c0f4:
  auVar1._8_4_ = local_20._8_4_;
  auVar1._0_8_ = local_20._0_8_;
  auVar1._12_4_ = uStack_14;
  return auVar1;
}


==================================================================

### FUNC 0040c1ec (2288 bytes) name=FUN_0040c1ec

undefined1  [16]
FUN_0040c1ec(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,short *param_8)

{
  uint uVar1;
  bool bVar2;
  bool bVar3;
  undefined1 auVar4 [16];
  bool bVar5;
  bool bVar6;
  wchar_t wVar7;
  char cVar8;
  ushort uVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  wchar_t wVar13;
  int iVar14;
  uint uVar15;
  long lVar16;
  long lVar17;
  wchar_t *pwVar18;
  char cVar19;
  char cVar20;
  ushort uVar21;
  uint uVar22;
  uint uVar23;
  ulong __n;
  uint uVar24;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar16 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar24 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar24 == 0x40) {
    uVar10 = 8;
  }
  else {
    uVar10 = 0x10;
    if (uVar24 != 8) {
      uVar10 = 10;
    }
  }
  iVar11 = FUN_00406484(&local_30);
  iVar12 = FUN_00406484(&local_40);
  if ((iVar11 == -1) == (iVar12 == -1)) {
    wVar13 = L'\0';
    uVar9 = 0;
  }
  else {
    wVar13 = FUN_00406484(&local_30);
    uVar9 = (ushort)(wVar13 == *(wchar_t *)(lVar16 + 0xe0));
    if ((uVar9 == 0) && (wVar13 != *(wchar_t *)(lVar16 + 0xe4))) {
      cVar8 = *(char *)(lVar16 + 0x20);
LAB_0040c320:
      iVar11 = 0;
      bVar6 = false;
      do {
        if (((cVar8 != '\0') && (*(wchar_t *)(lVar16 + 0x4c) == wVar13)) ||
           (*(wchar_t *)(lVar16 + 0x48) == wVar13)) {
LAB_0040ca74:
          bVar2 = false;
          goto joined_r0x0040c730;
        }
        if (*(wchar_t *)(lVar16 + 0xf0) == wVar13) {
          if ((uVar10 == 10) < bVar6) goto LAB_0040c35c;
          iVar11 = iVar11 + 1;
          if ((uVar10 == 8) || (bVar6 = true, uVar24 == 0)) {
            iVar11 = 0;
            bVar6 = true;
            uVar10 = 8;
          }
        }
        else {
          if (!bVar6) goto LAB_0040ca74;
LAB_0040c35c:
          if ((*(wchar_t *)(lVar16 + 0xe8) != wVar13) && (*(wchar_t *)(lVar16 + 0xec) != wVar13)) {
            bVar6 = true;
            bVar2 = false;
            goto joined_r0x0040c730;
          }
          if ((uVar10 != 0x10) && (uVar24 != 0)) {
            bVar2 = false;
            bVar6 = true;
            goto LAB_0040c408;
          }
          iVar11 = 0;
          bVar6 = false;
          uVar10 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar12 = FUN_00406484(&local_30);
        iVar14 = FUN_00406484(&local_40);
        if ((iVar12 == -1) == (iVar14 == -1)) {
          cVar8 = *(char *)(lVar16 + 0x20);
          bVar2 = true;
          goto joined_r0x0040c730;
        }
        wVar13 = FUN_00406484(&local_30);
        if (!bVar6) goto LAB_0040cad0;
        cVar8 = *(char *)(lVar16 + 0x20);
      } while( true );
    }
    cVar8 = *(char *)(lVar16 + 0x20);
    if ((cVar8 != '\0') && (wVar13 == *(wchar_t *)(lVar16 + 0x4c))) {
      cVar8 = '\x01';
      goto LAB_0040c320;
    }
    if (wVar13 == *(wchar_t *)(lVar16 + 0x48)) goto LAB_0040c320;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar11 = FUN_00406484(&local_30);
    iVar12 = FUN_00406484(&local_40);
    if ((iVar11 == -1) != (iVar12 == -1)) {
      wVar13 = FUN_00406484(&local_30);
      cVar8 = *(char *)(lVar16 + 0x20);
      goto LAB_0040c320;
    }
  }
  cVar8 = *(char *)(lVar16 + 0x20);
  bVar2 = true;
  iVar11 = 0;
  bVar6 = false;
joined_r0x0040c730:
  if (uVar10 == 0x10) {
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 == '\0') goto LAB_0040c428;
LAB_0040c754:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar8 = *(char *)(lVar16 + 0x148);
    uVar24 = 0;
    if (uVar10 != 0) {
      uVar24 = 0xffff / uVar10;
    }
    if (cVar8 == '\0') goto LAB_0040c440;
LAB_0040c778:
    local_58 = &local_8;
    if (!bVar2) {
      uVar23 = 0;
      bVar5 = false;
      wVar7 = local_28;
LAB_0040c78c:
      local_28 = wVar7;
      uVar21 = (ushort)uVar23;
      if ((*(char *)(lVar16 + 0x20) == '\0') || (wVar13 != *(wchar_t *)(lVar16 + 0x4c))) {
        if ((wVar13 == *(wchar_t *)(lVar16 + 0x48)) ||
           (pwVar18 = wmemchr((wchar_t *)(lVar16 + 0xf0),wVar13,__n), pwVar18 == (wchar_t *)0x0))
        goto LAB_0040c6a4;
        iVar12 = (int)((long)pwVar18 - (lVar16 + 0xf0) >> 2);
        if (0xf < iVar12) {
          iVar12 = iVar12 + -6;
        }
        if (uVar23 <= uVar24) {
          iVar11 = iVar11 + 1;
          bVar5 = (bool)(bVar5 | 0xffff - iVar12 < (int)(uVar23 * uVar10 & 0xffff));
          uVar23 = (uVar23 * uVar10 & 0xffff) + iVar12 & 0xffff;
          goto LAB_0040c804;
        }
        bVar5 = true;
        if (local_30 != (long *)0x0) goto LAB_0040c80c;
LAB_0040c918:
        uVar21 = (ushort)uVar23;
        if (local_40 == (long *)0x0) goto LAB_0040c5d8;
        cVar20 = cVar8;
joined_r0x0040c930:
        uVar21 = (ushort)uVar23;
        cVar19 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar12 = *(int *)local_40[2];
          }
          else {
            iVar12 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar12 == -1) {
            local_40 = (long *)0x0;
            cVar19 = cVar8;
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar12);
            cVar19 = '\0';
          }
        }
        if (cVar19 == cVar20) goto LAB_0040c5d8;
      }
      else {
        if (iVar11 == 0) {
          bVar3 = true;
          goto LAB_0040c6a8;
        }
        FUN_004116e0(local_58,iVar11);
        iVar11 = 0;
LAB_0040c804:
        if (local_30 == (long *)0x0) goto LAB_0040c918;
LAB_0040c80c:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040c918;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040c918;
        }
        cVar20 = '\0';
        local_28 = wVar13;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040c930;
        }
      }
      wVar7 = local_28;
      wVar13 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar13 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        wVar7 = wVar13;
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar7 = local_28;
        }
      }
      goto LAB_0040c78c;
    }
    uVar21 = 0;
    bVar5 = false;
    bVar3 = false;
  }
  else {
LAB_0040c408:
    __n = (ulong)(int)uVar10;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 != '\0') goto LAB_0040c754;
LAB_0040c428:
    cVar8 = *(char *)(lVar16 + 0x148);
    uVar24 = 0;
    if (uVar10 != 0) {
      uVar24 = 0xffff / uVar10;
    }
    if (cVar8 != '\0') goto LAB_0040c778;
LAB_0040c440:
    uVar23 = 0;
    uVar21 = 0;
    bVar5 = false;
    if (!bVar2) {
LAB_0040c45c:
      if (10 < __n) goto LAB_0040c530;
LAB_0040c464:
      uVar21 = (ushort)uVar23;
      if ((0x2f < (uint)wVar13) && ((uint)wVar13 < (uint)((int)__n + L'0'))) {
        uVar15 = wVar13 + L'\xffffffd0';
LAB_0040c47c:
        if (uVar23 <= uVar24) goto LAB_0040c560;
LAB_0040c484:
        bVar5 = true;
        if (local_30 == (long *)0x0) goto LAB_0040c590;
LAB_0040c490:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040c590;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040c590;
        }
        iVar12 = 0;
        local_28 = wVar13;
        if (local_40 == (long *)0x0) goto LAB_0040c4f0;
        iVar14 = 0;
        if ((int)local_38 == -1) goto LAB_0040c5ac;
LAB_0040c4e8:
        do {
          uVar21 = (ushort)uVar23;
          if (iVar14 == iVar12) goto LAB_0040c5d8;
LAB_0040c4f0:
          while( true ) {
            wVar13 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar13 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040c45c;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar13 = *(wchar_t *)local_30[2];
            }
            else {
              wVar13 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar13 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040c45c;
            }
            local_28 = wVar13;
            if (__n < 0xb) goto LAB_0040c464;
LAB_0040c530:
            uVar21 = (ushort)uVar23;
            uVar15 = wVar13 + L'\xffffffd0';
            if (uVar15 < 10) goto LAB_0040c47c;
            if ((uint)(wVar13 + L'\xffffff9f') < 6) {
              uVar15 = wVar13 + L'\xffffffa9';
              goto LAB_0040c47c;
            }
            if (5 < (uint)(wVar13 + L'\xffffffbf')) goto LAB_0040c6a4;
            uVar15 = wVar13 + L'\xffffffc9';
            if (uVar24 < uVar23) goto LAB_0040c484;
LAB_0040c560:
            uVar1 = uVar23 * uVar10;
            iVar11 = iVar11 + 1;
            uVar22 = uVar1 & 0xffff;
            uVar23 = uVar22 + uVar15 & 0xffff;
            bVar5 = (bool)(bVar5 | ((uVar1 & 0xffff) != 0xffff - uVar15 &&
                                   (int)(0xffff - uVar15) <= (int)uVar22));
            if (local_30 != (long *)0x0) goto LAB_0040c490;
LAB_0040c590:
            uVar21 = (ushort)uVar23;
            if (local_40 == (long *)0x0) goto LAB_0040c5d8;
            iVar12 = 1;
            iVar14 = 0;
            if ((int)local_38 != -1) goto LAB_0040c4e8;
LAB_0040c5ac:
            uVar21 = (ushort)uVar23;
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar14 = *(int *)local_40[2];
            }
            else {
              iVar14 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar14 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar14);
            if (iVar12 == 0) goto LAB_0040c5d8;
          }
          local_40 = (long *)0x0;
          iVar14 = 1;
        } while( true );
      }
    }
LAB_0040c6a4:
    bVar3 = false;
  }
LAB_0040c6a8:
  lVar17 = *(long *)(local_8 + -0x18);
joined_r0x0040c5e8:
  if (lVar17 == 0) {
    if ((iVar11 == 0) <= bVar6) {
LAB_0040c634:
      if (!bVar3) {
        if (bVar5) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = uVar9 + (uVar21 ^ -uVar9);
        }
        goto LAB_0040c654;
      }
    }
  }
  else {
    local_58 = &local_8;
    FUN_004116e0(local_58,iVar11);
    cVar8 = FUN_003ee0cc(*(undefined8 *)(lVar16 + 0x10),*(undefined8 *)(lVar16 + 0x18),local_58);
    if (cVar8 == '\0') {
      *param_7 = 4;
    }
    if (((iVar11 == 0) <= bVar6) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040c634;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040c654:
  if (bVar2) {
    *param_7 = *param_7 | 2;
  }
  auVar4._8_4_ = local_28;
  auVar4._0_8_ = local_30;
  auVar4._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar4;
LAB_0040cad0:
  cVar8 = *(char *)(lVar16 + 0x20);
  bVar2 = false;
  goto joined_r0x0040c730;
LAB_0040c5d8:
  bVar3 = false;
  bVar2 = true;
  lVar17 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040c5e8;
}


==================================================================

### FUNC 0040cb08 (20 bytes) name=FUN_0040cb08

void FUN_0040cb08(void)

{
  FUN_0040c1ec();
  return;
}


==================================================================

### FUNC 0040cb1c (2268 bytes) name=FUN_0040cb1c

undefined1  [16]
FUN_0040cb1c(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,int *param_8)

{
  uint uVar1;
  bool bVar2;
  bool bVar3;
  undefined1 auVar4 [16];
  bool bVar5;
  bool bVar6;
  wchar_t wVar7;
  char cVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  wchar_t wVar12;
  int iVar13;
  uint uVar14;
  long lVar15;
  long lVar16;
  wchar_t *pwVar17;
  char cVar18;
  char cVar19;
  uint uVar20;
  ulong __n;
  uint uVar21;
  uint local_6c;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar15 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar21 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar21 == 0x40) {
    uVar9 = 8;
  }
  else {
    uVar9 = 0x10;
    if (uVar21 != 8) {
      uVar9 = 10;
    }
  }
  iVar10 = FUN_00406484(&local_30);
  iVar11 = FUN_00406484(&local_40);
  if ((iVar10 == -1) == (iVar11 == -1)) {
    wVar12 = L'\0';
    local_6c = 0;
  }
  else {
    wVar12 = FUN_00406484(&local_30);
    local_6c = (uint)(wVar12 == *(wchar_t *)(lVar15 + 0xe0));
    if ((local_6c == 0) && (wVar12 != *(wchar_t *)(lVar15 + 0xe4))) {
      cVar8 = *(char *)(lVar15 + 0x20);
LAB_0040cc50:
      iVar10 = 0;
      bVar6 = false;
      do {
        if (((cVar8 != '\0') && (*(wchar_t *)(lVar15 + 0x4c) == wVar12)) ||
           (*(wchar_t *)(lVar15 + 0x48) == wVar12)) {
LAB_0040d390:
          bVar2 = false;
          goto joined_r0x0040d050;
        }
        if (*(wchar_t *)(lVar15 + 0xf0) == wVar12) {
          if ((uVar9 == 10) < bVar6) goto LAB_0040cc8c;
          iVar10 = iVar10 + 1;
          if ((uVar9 == 8) || (bVar6 = true, uVar21 == 0)) {
            iVar10 = 0;
            bVar6 = true;
            uVar9 = 8;
          }
        }
        else {
          if (!bVar6) goto LAB_0040d390;
LAB_0040cc8c:
          if ((*(wchar_t *)(lVar15 + 0xe8) != wVar12) && (*(wchar_t *)(lVar15 + 0xec) != wVar12)) {
            bVar6 = true;
            bVar2 = false;
            goto joined_r0x0040d050;
          }
          if ((uVar9 != 0x10) && (uVar21 != 0)) {
            bVar2 = false;
            bVar6 = true;
            goto LAB_0040cd38;
          }
          iVar10 = 0;
          bVar6 = false;
          uVar9 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar11 = FUN_00406484(&local_30);
        iVar13 = FUN_00406484(&local_40);
        if ((iVar11 == -1) == (iVar13 == -1)) {
          cVar8 = *(char *)(lVar15 + 0x20);
          bVar2 = true;
          goto joined_r0x0040d050;
        }
        wVar12 = FUN_00406484(&local_30);
        if (!bVar6) goto LAB_0040d3ec;
        cVar8 = *(char *)(lVar15 + 0x20);
      } while( true );
    }
    cVar8 = *(char *)(lVar15 + 0x20);
    if ((cVar8 != '\0') && (wVar12 == *(wchar_t *)(lVar15 + 0x4c))) {
      cVar8 = '\x01';
      goto LAB_0040cc50;
    }
    if (wVar12 == *(wchar_t *)(lVar15 + 0x48)) goto LAB_0040cc50;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar10 = FUN_00406484(&local_30);
    iVar11 = FUN_00406484(&local_40);
    if ((iVar10 == -1) != (iVar11 == -1)) {
      wVar12 = FUN_00406484(&local_30);
      cVar8 = *(char *)(lVar15 + 0x20);
      goto LAB_0040cc50;
    }
  }
  cVar8 = *(char *)(lVar15 + 0x20);
  bVar2 = true;
  iVar10 = 0;
  bVar6 = false;
joined_r0x0040d050:
  if (uVar9 == 0x10) {
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 == '\0') goto LAB_0040cd58;
LAB_0040d074:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar8 = *(char *)(lVar15 + 0x148);
    uVar21 = 0;
    if (uVar9 != 0) {
      uVar21 = 0xffffffff / uVar9;
    }
    if (cVar8 == '\0') goto LAB_0040cd70;
LAB_0040d098:
    local_58 = &local_8;
    if (!bVar2) {
      uVar20 = 0;
      bVar5 = false;
      wVar7 = local_28;
LAB_0040d0ac:
      local_28 = wVar7;
      if ((*(char *)(lVar15 + 0x20) == '\0') || (wVar12 != *(wchar_t *)(lVar15 + 0x4c))) {
        if ((wVar12 == *(wchar_t *)(lVar15 + 0x48)) ||
           (pwVar17 = wmemchr((wchar_t *)(lVar15 + 0xf0),wVar12,__n), pwVar17 == (wchar_t *)0x0))
        goto LAB_0040cfc4;
        uVar14 = (uint)((long)pwVar17 - (lVar15 + 0xf0) >> 2);
        if (0xf < (int)uVar14) {
          uVar14 = uVar14 - 6;
        }
        if (uVar20 <= uVar21) {
          uVar1 = uVar20 * uVar9;
          iVar10 = iVar10 + 1;
          uVar20 = uVar14 + uVar1;
          bVar5 = (bool)(bVar5 | ~uVar14 < uVar1);
          goto LAB_0040d118;
        }
        bVar5 = true;
        if (local_30 != (long *)0x0) goto LAB_0040d120;
LAB_0040d22c:
        if (local_40 == (long *)0x0) goto LAB_0040cef8;
        cVar19 = cVar8;
joined_r0x0040d244:
        cVar18 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar11 = *(int *)local_40[2];
          }
          else {
            iVar11 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar11 == -1) {
            local_40 = (long *)0x0;
            cVar18 = cVar8;
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar11);
            cVar18 = '\0';
          }
        }
        if (cVar18 == cVar19) goto LAB_0040cef8;
      }
      else {
        if (iVar10 == 0) {
          bVar3 = true;
          goto LAB_0040cfc8;
        }
        FUN_004116e0(local_58,iVar10);
        iVar10 = 0;
LAB_0040d118:
        if (local_30 == (long *)0x0) goto LAB_0040d22c;
LAB_0040d120:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040d22c;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar12 = *(wchar_t *)local_30[2];
        }
        else {
          wVar12 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar12 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040d22c;
        }
        cVar19 = '\0';
        local_28 = wVar12;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040d244;
        }
      }
      wVar7 = local_28;
      wVar12 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar12 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar12 = *(wchar_t *)local_30[2];
        }
        else {
          wVar12 = (**(code **)(*local_30 + 0x48))();
        }
        wVar7 = wVar12;
        if (wVar12 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar7 = local_28;
        }
      }
      goto LAB_0040d0ac;
    }
    uVar20 = 0;
    bVar5 = false;
    bVar3 = false;
  }
  else {
LAB_0040cd38:
    __n = (ulong)(int)uVar9;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 != '\0') goto LAB_0040d074;
LAB_0040cd58:
    cVar8 = *(char *)(lVar15 + 0x148);
    uVar21 = 0;
    if (uVar9 != 0) {
      uVar21 = 0xffffffff / uVar9;
    }
    if (cVar8 != '\0') goto LAB_0040d098;
LAB_0040cd70:
    uVar20 = 0;
    bVar5 = false;
    if (!bVar2) {
LAB_0040cd88:
      if (10 < __n) goto LAB_0040ce5c;
LAB_0040cd90:
      if ((0x2f < (uint)wVar12) && ((uint)wVar12 < (uint)((int)__n + L'0'))) {
        uVar14 = wVar12 + L'\xffffffd0';
LAB_0040cda8:
        if (uVar20 <= uVar21) goto LAB_0040ce8c;
LAB_0040cdb0:
        bVar5 = true;
        if (local_30 == (long *)0x0) goto LAB_0040ceb0;
LAB_0040cdbc:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040ceb0;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar12 = *(wchar_t *)local_30[2];
        }
        else {
          wVar12 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar12 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040ceb0;
        }
        iVar11 = 0;
        local_28 = wVar12;
        if (local_40 == (long *)0x0) goto LAB_0040ce1c;
        iVar13 = 0;
        if ((int)local_38 == -1) goto LAB_0040cecc;
LAB_0040ce14:
        do {
          if (iVar13 == iVar11) goto LAB_0040cef8;
LAB_0040ce1c:
          while( true ) {
            wVar12 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar12 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040cd88;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar12 = *(wchar_t *)local_30[2];
            }
            else {
              wVar12 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar12 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040cd88;
            }
            local_28 = wVar12;
            if (__n < 0xb) goto LAB_0040cd90;
LAB_0040ce5c:
            uVar14 = wVar12 + L'\xffffffd0';
            if (uVar14 < 10) goto LAB_0040cda8;
            if ((uint)(wVar12 + L'\xffffff9f') < 6) {
              uVar14 = wVar12 + L'\xffffffa9';
              goto LAB_0040cda8;
            }
            if (5 < (uint)(wVar12 + L'\xffffffbf')) goto LAB_0040cfc4;
            uVar14 = wVar12 + L'\xffffffc9';
            if (uVar21 < uVar20) goto LAB_0040cdb0;
LAB_0040ce8c:
            uVar1 = uVar20 * uVar9;
            iVar10 = iVar10 + 1;
            uVar20 = uVar14 + uVar1;
            bVar5 = (bool)(bVar5 | ~uVar14 < uVar1);
            if (local_30 != (long *)0x0) goto LAB_0040cdbc;
LAB_0040ceb0:
            if (local_40 == (long *)0x0) goto LAB_0040cef8;
            iVar11 = 1;
            iVar13 = 0;
            if ((int)local_38 != -1) goto LAB_0040ce14;
LAB_0040cecc:
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar13 = *(int *)local_40[2];
            }
            else {
              iVar13 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar13 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar13);
            if (iVar11 == 0) goto LAB_0040cef8;
          }
          local_40 = (long *)0x0;
          iVar13 = 1;
        } while( true );
      }
    }
LAB_0040cfc4:
    bVar3 = false;
  }
LAB_0040cfc8:
  lVar16 = *(long *)(local_8 + -0x18);
joined_r0x0040cf08:
  if (lVar16 == 0) {
    if ((iVar10 == 0) <= bVar6) {
LAB_0040cf54:
      if (!bVar3) {
        if (bVar5) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = (uVar20 ^ -local_6c) + local_6c;
        }
        goto LAB_0040cf74;
      }
    }
  }
  else {
    local_58 = &local_8;
    FUN_004116e0(local_58,iVar10);
    cVar8 = FUN_003ee0cc(*(undefined8 *)(lVar15 + 0x10),*(undefined8 *)(lVar15 + 0x18),local_58);
    if (cVar8 == '\0') {
      *param_7 = 4;
    }
    if (((iVar10 == 0) <= bVar6) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040cf54;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040cf74:
  if (bVar2) {
    *param_7 = *param_7 | 2;
  }
  auVar4._8_4_ = local_28;
  auVar4._0_8_ = local_30;
  auVar4._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar4;
LAB_0040d3ec:
  cVar8 = *(char *)(lVar15 + 0x20);
  bVar2 = false;
  goto joined_r0x0040d050;
LAB_0040cef8:
  bVar3 = false;
  bVar2 = true;
  lVar16 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040cf08;
}


==================================================================

### FUNC 0040d424 (20 bytes) name=FUN_0040d424

void FUN_0040d424(void)

{
  FUN_0040cb1c();
  return;
}


==================================================================

### FUNC 0040d438 (2268 bytes) name=FUN_0040d438

undefined1  [16]
FUN_0040d438(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long *param_8)

{
  bool bVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  bool bVar4;
  bool bVar5;
  wchar_t wVar6;
  bool bVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  wchar_t wVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  wchar_t *pwVar16;
  char cVar17;
  ulong uVar18;
  char cVar19;
  ulong uVar20;
  ulong __n;
  ulong uVar21;
  ulong uVar22;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar14 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar13 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar13 == 0x40) {
    uVar22 = 8;
  }
  else {
    uVar22 = 0x10;
    if (uVar13 != 8) {
      uVar22 = 10;
    }
  }
  iVar9 = FUN_00406484(&local_30);
  iVar10 = FUN_00406484(&local_40);
  if ((iVar9 == -1) == (iVar10 == -1)) {
    wVar11 = L'\0';
    bVar7 = false;
  }
  else {
    wVar11 = FUN_00406484(&local_30);
    bVar7 = wVar11 == *(wchar_t *)(lVar14 + 0xe0);
    if ((!bVar7) && (wVar11 != *(wchar_t *)(lVar14 + 0xe4))) {
      cVar8 = *(char *)(lVar14 + 0x20);
LAB_0040d56c:
      iVar9 = 0;
      bVar5 = false;
      do {
        if (((cVar8 != '\0') && (*(wchar_t *)(lVar14 + 0x4c) == wVar11)) ||
           (*(wchar_t *)(lVar14 + 0x48) == wVar11)) {
LAB_0040dcac:
          bVar1 = false;
          goto LAB_0040d64c;
        }
        iVar10 = (int)uVar22;
        if (*(wchar_t *)(lVar14 + 0xf0) == wVar11) {
          if ((iVar10 == 10) < bVar5) goto LAB_0040d5a8;
          iVar9 = iVar9 + 1;
          if ((iVar10 == 8) || (bVar5 = true, uVar13 == 0)) {
            iVar9 = 0;
            bVar5 = true;
            uVar22 = 8;
          }
        }
        else {
          if (!bVar5) goto LAB_0040dcac;
LAB_0040d5a8:
          if ((*(wchar_t *)(lVar14 + 0xe8) != wVar11) && (*(wchar_t *)(lVar14 + 0xec) != wVar11)) {
            bVar5 = true;
            bVar1 = false;
            goto joined_r0x0040d970;
          }
          if ((iVar10 != 0x10) && (uVar13 != 0)) {
            bVar1 = false;
            bVar5 = true;
            goto LAB_0040d654;
          }
          iVar9 = 0;
          bVar5 = false;
          uVar22 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar10 = FUN_00406484(&local_30);
        iVar12 = FUN_00406484(&local_40);
        if ((iVar10 == -1) == (iVar12 == -1)) {
          cVar8 = *(char *)(lVar14 + 0x20);
          bVar1 = true;
          goto LAB_0040d64c;
        }
        wVar11 = FUN_00406484(&local_30);
        if (!bVar5) goto LAB_0040dd08;
        cVar8 = *(char *)(lVar14 + 0x20);
      } while( true );
    }
    cVar8 = *(char *)(lVar14 + 0x20);
    if ((cVar8 != '\0') && (wVar11 == *(wchar_t *)(lVar14 + 0x4c))) {
      cVar8 = '\x01';
      goto LAB_0040d56c;
    }
    if (wVar11 == *(wchar_t *)(lVar14 + 0x48)) goto LAB_0040d56c;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar9 = FUN_00406484(&local_30);
    iVar10 = FUN_00406484(&local_40);
    if ((iVar9 == -1) != (iVar10 == -1)) {
      wVar11 = FUN_00406484(&local_30);
      cVar8 = *(char *)(lVar14 + 0x20);
      goto LAB_0040d56c;
    }
  }
  cVar8 = *(char *)(lVar14 + 0x20);
  bVar1 = true;
  iVar9 = 0;
  bVar5 = false;
LAB_0040d64c:
  iVar10 = (int)uVar22;
joined_r0x0040d970:
  if (iVar10 == 0x10) {
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 == '\0') goto LAB_0040d674;
LAB_0040d994:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar8 = *(char *)(lVar14 + 0x148);
    uVar21 = 0;
    if (uVar22 != 0) {
      uVar21 = 0xffffffffffffffff / uVar22;
    }
    if (cVar8 == '\0') goto LAB_0040d68c;
LAB_0040d9b8:
    local_58 = &local_8;
    if (!bVar1) {
      uVar20 = 0;
      bVar4 = false;
      wVar6 = local_28;
LAB_0040d9cc:
      local_28 = wVar6;
      if ((*(char *)(lVar14 + 0x20) == '\0') || (wVar11 != *(wchar_t *)(lVar14 + 0x4c))) {
        if ((wVar11 == *(wchar_t *)(lVar14 + 0x48)) ||
           (pwVar16 = wmemchr((wchar_t *)(lVar14 + 0xf0),wVar11,__n), pwVar16 == (wchar_t *)0x0))
        goto LAB_0040d8e4;
        iVar10 = (int)((long)pwVar16 - (lVar14 + 0xf0) >> 2);
        if (0xf < iVar10) {
          iVar10 = iVar10 + -6;
        }
        if (uVar20 <= uVar21) {
          iVar9 = iVar9 + 1;
          uVar18 = uVar20 * uVar22;
          uVar20 = (long)iVar10 + uVar18;
          bVar4 = (bool)(bVar4 | (ulong)~(long)iVar10 < uVar18);
          goto LAB_0040da3c;
        }
        bVar4 = true;
        if (local_30 != (long *)0x0) goto LAB_0040da44;
LAB_0040db50:
        if (local_40 == (long *)0x0) goto LAB_0040d818;
        cVar19 = cVar8;
joined_r0x0040db68:
        cVar17 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar10 = *(int *)local_40[2];
          }
          else {
            iVar10 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar10 == -1) {
            local_40 = (long *)0x0;
            cVar17 = cVar8;
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar10);
            cVar17 = '\0';
          }
        }
        if (cVar17 == cVar19) goto LAB_0040d818;
      }
      else {
        if (iVar9 == 0) {
          bVar2 = true;
          goto LAB_0040d8e8;
        }
        FUN_004116e0(local_58,iVar9);
        iVar9 = 0;
LAB_0040da3c:
        if (local_30 == (long *)0x0) goto LAB_0040db50;
LAB_0040da44:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040db50;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040db50;
        }
        cVar19 = '\0';
        local_28 = wVar11;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040db68;
        }
      }
      wVar6 = local_28;
      wVar11 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar11 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        wVar6 = wVar11;
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar6 = local_28;
        }
      }
      goto LAB_0040d9cc;
    }
    uVar20 = 0;
    bVar4 = false;
    bVar2 = false;
  }
  else {
LAB_0040d654:
    __n = (ulong)(int)uVar22;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 != '\0') goto LAB_0040d994;
LAB_0040d674:
    cVar8 = *(char *)(lVar14 + 0x148);
    uVar21 = 0;
    if (uVar22 != 0) {
      uVar21 = 0xffffffffffffffff / uVar22;
    }
    if (cVar8 != '\0') goto LAB_0040d9b8;
LAB_0040d68c:
    uVar20 = 0;
    bVar4 = false;
    if (!bVar1) {
LAB_0040d6a4:
      if (10 < __n) goto LAB_0040d778;
LAB_0040d6ac:
      if ((0x2f < (uint)wVar11) && ((uint)wVar11 < (uint)((int)__n + L'0'))) {
        uVar13 = wVar11 + L'\xffffffd0';
LAB_0040d6c4:
        if (uVar20 <= uVar21) goto LAB_0040d7a8;
LAB_0040d6cc:
        bVar4 = true;
        if (local_30 == (long *)0x0) goto LAB_0040d7d0;
LAB_0040d6d8:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040d7d0;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040d7d0;
        }
        iVar10 = 0;
        local_28 = wVar11;
        if (local_40 == (long *)0x0) goto LAB_0040d738;
        iVar12 = 0;
        if ((int)local_38 == -1) goto LAB_0040d7ec;
LAB_0040d730:
        do {
          if (iVar12 == iVar10) goto LAB_0040d818;
LAB_0040d738:
          while( true ) {
            wVar11 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar11 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040d6a4;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar11 = *(wchar_t *)local_30[2];
            }
            else {
              wVar11 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar11 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040d6a4;
            }
            local_28 = wVar11;
            if (__n < 0xb) goto LAB_0040d6ac;
LAB_0040d778:
            uVar13 = wVar11 + L'\xffffffd0';
            if (uVar13 < 10) goto LAB_0040d6c4;
            if ((uint)(wVar11 + L'\xffffff9f') < 6) {
              uVar13 = wVar11 + L'\xffffffa9';
              goto LAB_0040d6c4;
            }
            if (5 < (uint)(wVar11 + L'\xffffffbf')) goto LAB_0040d8e4;
            uVar13 = wVar11 + L'\xffffffc9';
            if (uVar21 < uVar20) goto LAB_0040d6cc;
LAB_0040d7a8:
            iVar9 = iVar9 + 1;
            uVar18 = uVar20 * uVar22;
            uVar20 = (long)(int)uVar13 + uVar18;
            bVar4 = (bool)(bVar4 | (ulong)~(long)(int)uVar13 < uVar18);
            if (local_30 != (long *)0x0) goto LAB_0040d6d8;
LAB_0040d7d0:
            if (local_40 == (long *)0x0) goto LAB_0040d818;
            iVar10 = 1;
            iVar12 = 0;
            if ((int)local_38 != -1) goto LAB_0040d730;
LAB_0040d7ec:
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar12 = *(int *)local_40[2];
            }
            else {
              iVar12 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar12 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar12);
            if (iVar10 == 0) goto LAB_0040d818;
          }
          local_40 = (long *)0x0;
          iVar12 = 1;
        } while( true );
      }
    }
LAB_0040d8e4:
    bVar2 = false;
  }
LAB_0040d8e8:
  lVar15 = *(long *)(local_8 + -0x18);
joined_r0x0040d828:
  if (lVar15 == 0) {
    if ((iVar9 == 0) <= bVar5) {
LAB_0040d874:
      if (!bVar2) {
        if (bVar4) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = (uVar20 ^ -(ulong)bVar7) + (ulong)bVar7;
        }
        goto LAB_0040d894;
      }
    }
  }
  else {
    local_58 = &local_8;
    FUN_004116e0(local_58,iVar9);
    cVar8 = FUN_003ee0cc(*(undefined8 *)(lVar14 + 0x10),*(undefined8 *)(lVar14 + 0x18),local_58);
    if (cVar8 == '\0') {
      *param_7 = 4;
    }
    if (((iVar9 == 0) <= bVar5) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040d874;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040d894:
  if (bVar1) {
    *param_7 = *param_7 | 2;
  }
  auVar3._8_4_ = local_28;
  auVar3._0_8_ = local_30;
  auVar3._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar3;
LAB_0040dd08:
  cVar8 = *(char *)(lVar14 + 0x20);
  bVar1 = false;
  goto LAB_0040d64c;
LAB_0040d818:
  bVar2 = false;
  bVar1 = true;
  lVar15 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040d828;
}


==================================================================

### FUNC 0040dd40 (20 bytes) name=FUN_0040dd40

void FUN_0040dd40(void)

{
  FUN_0040d438();
  return;
}


==================================================================

### FUNC 0040dd54 (108 bytes) name=FUN_0040dd54

void FUN_0040dd54(void)

{
  uint uVar1;
  long in_x5;
  undefined8 *in_x7;
  undefined8 local_8;
  
  uVar1 = *(uint *)(in_x5 + 0x18);
  *(uint *)(in_x5 + 0x18) = uVar1 & 0xffffffb5 | 8;
  FUN_0040d438();
  *(uint *)(in_x5 + 0x18) = uVar1;
  *in_x7 = local_8;
  return;
}


==================================================================

### FUNC 0040ddc0 (2388 bytes) name=FUN_0040ddc0

/* WARNING: Restarted to delay deadcode elimination for space: stack */

undefined1  [16]
FUN_0040ddc0(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,ulong *param_8)

{
  ulong uVar1;
  ulong uVar2;
  bool bVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  bool bVar6;
  bool bVar7;
  wchar_t wVar8;
  bool bVar9;
  char cVar10;
  int iVar11;
  int iVar12;
  wchar_t wVar13;
  int iVar14;
  uint uVar15;
  int iVar16;
  long lVar17;
  long lVar18;
  wchar_t *pwVar19;
  char cVar20;
  ulong uVar21;
  char cVar22;
  ulong uVar23;
  ulong uVar24;
  ulong uVar25;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar17 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar15 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar15 == 0x40) {
    iVar16 = 8;
  }
  else {
    iVar16 = 0x10;
    if (uVar15 != 8) {
      iVar16 = 10;
    }
  }
  iVar11 = FUN_00406484(&local_30);
  iVar12 = FUN_00406484(&local_40);
  if ((iVar11 == -1) == (iVar12 == -1)) {
    wVar13 = L'\0';
    bVar9 = false;
  }
  else {
    wVar13 = FUN_00406484(&local_30);
    bVar9 = wVar13 == *(wchar_t *)(lVar17 + 0xe0);
    if ((!bVar9) && (wVar13 != *(wchar_t *)(lVar17 + 0xe4))) {
      cVar10 = *(char *)(lVar17 + 0x20);
LAB_0040def4:
      iVar11 = 0;
      bVar7 = false;
      do {
        if (((cVar10 != '\0') && (*(wchar_t *)(lVar17 + 0x4c) == wVar13)) ||
           (*(wchar_t *)(lVar17 + 0x48) == wVar13)) {
LAB_0040e6ac:
          bVar3 = false;
          goto joined_r0x0040e324;
        }
        if (*(wchar_t *)(lVar17 + 0xf0) == wVar13) {
          if ((iVar16 == 10) < bVar7) goto LAB_0040df30;
          iVar11 = iVar11 + 1;
          if ((iVar16 == 8) || (bVar7 = true, uVar15 == 0)) {
            iVar11 = 0;
            bVar7 = true;
            iVar16 = 8;
          }
        }
        else {
          if (!bVar7) goto LAB_0040e6ac;
LAB_0040df30:
          if ((*(wchar_t *)(lVar17 + 0xe8) != wVar13) && (*(wchar_t *)(lVar17 + 0xec) != wVar13)) {
            bVar7 = true;
            bVar3 = false;
            goto joined_r0x0040e324;
          }
          if ((iVar16 != 0x10) && (uVar15 != 0)) {
            bVar3 = false;
            bVar7 = true;
            goto LAB_0040dfdc;
          }
          iVar11 = 0;
          bVar7 = false;
          iVar16 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar12 = FUN_00406484(&local_30);
        iVar14 = FUN_00406484(&local_40);
        if ((iVar12 == -1) == (iVar14 == -1)) {
          cVar10 = *(char *)(lVar17 + 0x20);
          bVar3 = true;
          goto joined_r0x0040e324;
        }
        wVar13 = FUN_00406484(&local_30);
        if (!bVar7) goto LAB_0040e708;
        cVar10 = *(char *)(lVar17 + 0x20);
      } while( true );
    }
    cVar10 = *(char *)(lVar17 + 0x20);
    if ((cVar10 != '\0') && (wVar13 == *(wchar_t *)(lVar17 + 0x4c))) {
      cVar10 = '\x01';
      goto LAB_0040def4;
    }
    if (wVar13 == *(wchar_t *)(lVar17 + 0x48)) goto LAB_0040def4;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar11 = FUN_00406484(&local_30);
    iVar12 = FUN_00406484(&local_40);
    if ((iVar11 == -1) != (iVar12 == -1)) {
      wVar13 = FUN_00406484(&local_30);
      cVar10 = *(char *)(lVar17 + 0x20);
      goto LAB_0040def4;
    }
  }
  cVar10 = *(char *)(lVar17 + 0x20);
  bVar3 = true;
  iVar11 = 0;
  bVar7 = false;
joined_r0x0040e324:
  if (iVar16 == 0x10) {
    uVar24 = 0x16;
  }
  else {
LAB_0040dfdc:
    uVar24 = (ulong)iVar16;
  }
  local_8 = PTR_DAT_00501f30 + 0x18;
  if (cVar10 != '\0') {
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
  }
  local_58 = &local_8;
  uVar25 = (ulong)iVar16;
  cVar10 = *(char *)(lVar17 + 0x148);
  uVar1 = 0x7fffffffffffffff;
  if (bVar9) {
    uVar1 = 0x8000000000000000;
  }
  uVar2 = 0;
  if (uVar25 != 0) {
    uVar2 = uVar1 / uVar25;
  }
  if (cVar10 == '\0') {
    uVar23 = 0;
    bVar6 = false;
    if (!bVar3) {
LAB_0040e044:
      if (10 < uVar24) goto LAB_0040e118;
LAB_0040e04c:
      if ((0x2f < (uint)wVar13) && ((uint)wVar13 < (uint)((int)uVar24 + L'0'))) {
        uVar15 = wVar13 + L'\xffffffd0';
LAB_0040e064:
        if (uVar23 <= uVar2) goto LAB_0040e148;
LAB_0040e06c:
        bVar6 = true;
        if (local_30 == (long *)0x0) goto LAB_0040e174;
LAB_0040e078:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040e174;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040e174;
        }
        iVar16 = 0;
        local_28 = wVar13;
        if (local_40 == (long *)0x0) goto LAB_0040e0d8;
        iVar12 = 0;
        if ((int)local_38 == -1) goto LAB_0040e190;
LAB_0040e0d0:
        do {
          if (iVar12 == iVar16) goto LAB_0040e1bc;
LAB_0040e0d8:
          while( true ) {
            wVar13 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar13 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040e044;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar13 = *(wchar_t *)local_30[2];
            }
            else {
              wVar13 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar13 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040e044;
            }
            local_28 = wVar13;
            if (uVar24 < 0xb) goto LAB_0040e04c;
LAB_0040e118:
            uVar15 = wVar13 + L'\xffffffd0';
            if (uVar15 < 10) goto LAB_0040e064;
            if ((uint)(wVar13 + L'\xffffff9f') < 6) {
              uVar15 = wVar13 + L'\xffffffa9';
              goto LAB_0040e064;
            }
            if (5 < (uint)(wVar13 + L'\xffffffbf')) goto LAB_0040e27c;
            uVar15 = wVar13 + L'\xffffffc9';
            if (uVar2 < uVar23) goto LAB_0040e06c;
LAB_0040e148:
            uVar21 = uVar23 * uVar25;
            iVar11 = iVar11 + 1;
            uVar23 = (long)(int)uVar15 + uVar21;
            bVar6 = (bool)(bVar6 | uVar1 - (long)(int)uVar15 < uVar21);
            if (local_30 != (long *)0x0) goto LAB_0040e078;
LAB_0040e174:
            if (local_40 == (long *)0x0) goto LAB_0040e1bc;
            iVar16 = 1;
            iVar12 = 0;
            if ((int)local_38 != -1) goto LAB_0040e0d0;
LAB_0040e190:
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar12 = *(int *)local_40[2];
            }
            else {
              iVar12 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar12 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar12);
            if (iVar16 == 0) goto LAB_0040e1bc;
          }
          local_40 = (long *)0x0;
          iVar12 = 1;
        } while( true );
      }
    }
LAB_0040e27c:
    bVar4 = false;
  }
  else {
    if (!bVar3) {
      uVar23 = 0;
      bVar6 = false;
      wVar8 = local_28;
LAB_0040e368:
      local_28 = wVar8;
      if ((*(char *)(lVar17 + 0x20) == '\0') || (wVar13 != *(wchar_t *)(lVar17 + 0x4c))) {
        if ((wVar13 == *(wchar_t *)(lVar17 + 0x48)) ||
           (pwVar19 = wmemchr((wchar_t *)(lVar17 + 0xf0),wVar13,uVar24), pwVar19 == (wchar_t *)0x0))
        goto LAB_0040e27c;
        iVar16 = (int)((long)pwVar19 - (lVar17 + 0xf0) >> 2);
        if (0xf < iVar16) {
          iVar16 = iVar16 + -6;
        }
        if (uVar23 <= uVar2) {
          uVar21 = uVar23 * uVar25;
          iVar11 = iVar11 + 1;
          uVar23 = (long)iVar16 + uVar21;
          bVar6 = (bool)(bVar6 | uVar1 - (long)iVar16 < uVar21);
          goto LAB_0040e3dc;
        }
        bVar6 = true;
        if (local_30 != (long *)0x0) goto LAB_0040e3e4;
LAB_0040e4ec:
        if (local_40 == (long *)0x0) goto LAB_0040e1bc;
        cVar22 = cVar10;
joined_r0x0040e504:
        cVar20 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar16 = *(int *)local_40[2];
          }
          else {
            iVar16 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar16 == -1) {
            local_40 = (long *)0x0;
            cVar20 = cVar10;
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar16);
            cVar20 = '\0';
          }
        }
        if (cVar20 == cVar22) goto LAB_0040e1bc;
      }
      else {
        if (iVar11 == 0) {
          bVar4 = true;
          goto LAB_0040e280;
        }
        lVar18 = *(long *)(local_8 + -0x18);
        uVar21 = lVar18 + 1;
        if ((*(ulong *)(local_8 + -0x10) < uVar21) || (0 < *(int *)(local_8 + -8))) {
          FUN_00410ed8(local_58,uVar21);
          lVar18 = *(long *)(local_8 + -0x18);
        }
        local_8[lVar18] = (char)iVar11;
        iVar11 = 0;
        if (local_8 + -0x18 != PTR_DAT_00501f30) {
          *(undefined4 *)(local_8 + -8) = 0;
          *(ulong *)(local_8 + -0x18) = uVar21;
          local_8[uVar21] = 0;
        }
LAB_0040e3dc:
        if (local_30 == (long *)0x0) goto LAB_0040e4ec;
LAB_0040e3e4:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040e4ec;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040e4ec;
        }
        cVar22 = '\0';
        local_28 = wVar13;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040e504;
        }
      }
      wVar8 = local_28;
      wVar13 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar13 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar13 = *(wchar_t *)local_30[2];
        }
        else {
          wVar13 = (**(code **)(*local_30 + 0x48))();
        }
        wVar8 = wVar13;
        if (wVar13 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar8 = local_28;
        }
      }
      goto LAB_0040e368;
    }
    uVar23 = 0;
    bVar6 = false;
    bVar4 = false;
  }
LAB_0040e280:
  lVar18 = *(long *)(local_8 + -0x18);
joined_r0x0040e1cc:
  if (lVar18 == 0) {
    if ((iVar11 == 0) <= bVar7) {
LAB_0040e2a0:
      if (!bVar4) {
        if (bVar6) {
          uVar24 = 0x7fffffffffffffff;
          if (bVar9) {
            uVar24 = 0x8000000000000000;
          }
          *param_8 = uVar24;
          *param_7 = 4;
        }
        else {
          uVar24 = -uVar23;
          if (!bVar9) {
            uVar24 = uVar23;
          }
          *param_8 = uVar24;
        }
        goto LAB_0040e22c;
      }
    }
  }
  else {
    FUN_004116e0(local_58,iVar11);
    cVar10 = FUN_003ee0cc(*(undefined8 *)(lVar17 + 0x10),*(undefined8 *)(lVar17 + 0x18),local_58);
    if (cVar10 == '\0') {
      *param_7 = 4;
    }
    if (((iVar11 == 0) <= bVar7) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040e2a0;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040e22c:
  if (bVar3) {
    *param_7 = *param_7 | 2;
  }
  auVar5._8_4_ = local_28;
  auVar5._0_8_ = local_30;
  auVar5._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar5;
LAB_0040e708:
  cVar10 = *(char *)(lVar17 + 0x20);
  bVar3 = false;
  goto joined_r0x0040e324;
LAB_0040e1bc:
  bVar4 = false;
  bVar3 = true;
  lVar18 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040e1cc;
}


==================================================================

### FUNC 0040e740 (20 bytes) name=FUN_0040e740

void FUN_0040e740(void)

{
  FUN_0040ddc0();
  return;
}


==================================================================

### FUNC 0040e754 (2268 bytes) name=FUN_0040e754

undefined1  [16]
FUN_0040e754(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4,undefined8 param_5,
            long param_6,uint *param_7,long *param_8)

{
  bool bVar1;
  bool bVar2;
  undefined1 auVar3 [16];
  bool bVar4;
  bool bVar5;
  wchar_t wVar6;
  bool bVar7;
  char cVar8;
  int iVar9;
  int iVar10;
  wchar_t wVar11;
  int iVar12;
  uint uVar13;
  long lVar14;
  long lVar15;
  wchar_t *pwVar16;
  char cVar17;
  ulong uVar18;
  char cVar19;
  ulong uVar20;
  ulong __n;
  ulong uVar21;
  ulong uVar22;
  undefined **local_58;
  long *local_40;
  undefined8 local_38;
  long *local_30;
  wchar_t local_28;
  undefined4 uStack_24;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined *local_8;
  
  local_28 = (wchar_t)param_3;
  uStack_24 = (undefined4)((ulong)param_3 >> 0x20);
  local_40 = param_4;
  local_38 = param_5;
  local_30 = param_2;
  lVar14 = FUN_004063a0(auStack_18,param_6 + 0xd0);
  uVar13 = *(uint *)(param_6 + 0x18) & 0x4a;
  if (uVar13 == 0x40) {
    uVar22 = 8;
  }
  else {
    uVar22 = 0x10;
    if (uVar13 != 8) {
      uVar22 = 10;
    }
  }
  iVar9 = FUN_00406484(&local_30);
  iVar10 = FUN_00406484(&local_40);
  if ((iVar9 == -1) == (iVar10 == -1)) {
    wVar11 = L'\0';
    bVar7 = false;
  }
  else {
    wVar11 = FUN_00406484(&local_30);
    bVar7 = wVar11 == *(wchar_t *)(lVar14 + 0xe0);
    if ((!bVar7) && (wVar11 != *(wchar_t *)(lVar14 + 0xe4))) {
      cVar8 = *(char *)(lVar14 + 0x20);
LAB_0040e888:
      iVar9 = 0;
      bVar5 = false;
      do {
        if (((cVar8 != '\0') && (*(wchar_t *)(lVar14 + 0x4c) == wVar11)) ||
           (*(wchar_t *)(lVar14 + 0x48) == wVar11)) {
LAB_0040efc8:
          bVar1 = false;
          goto LAB_0040e968;
        }
        iVar10 = (int)uVar22;
        if (*(wchar_t *)(lVar14 + 0xf0) == wVar11) {
          if ((iVar10 == 10) < bVar5) goto LAB_0040e8c4;
          iVar9 = iVar9 + 1;
          if ((iVar10 == 8) || (bVar5 = true, uVar13 == 0)) {
            iVar9 = 0;
            bVar5 = true;
            uVar22 = 8;
          }
        }
        else {
          if (!bVar5) goto LAB_0040efc8;
LAB_0040e8c4:
          if ((*(wchar_t *)(lVar14 + 0xe8) != wVar11) && (*(wchar_t *)(lVar14 + 0xec) != wVar11)) {
            bVar5 = true;
            bVar1 = false;
            goto joined_r0x0040ec8c;
          }
          if ((iVar10 != 0x10) && (uVar13 != 0)) {
            bVar1 = false;
            bVar5 = true;
            goto LAB_0040e970;
          }
          iVar9 = 0;
          bVar5 = false;
          uVar22 = 0x10;
        }
        if (local_30 != (long *)0x0) {
          if ((ulong)local_30[2] < (ulong)local_30[3]) {
            local_30[2] = local_30[2] + 4;
          }
          else {
            (**(code **)(*local_30 + 0x50))();
          }
          local_28 = L'\xffffffff';
        }
        iVar10 = FUN_00406484(&local_30);
        iVar12 = FUN_00406484(&local_40);
        if ((iVar10 == -1) == (iVar12 == -1)) {
          cVar8 = *(char *)(lVar14 + 0x20);
          bVar1 = true;
          goto LAB_0040e968;
        }
        wVar11 = FUN_00406484(&local_30);
        if (!bVar5) goto LAB_0040f024;
        cVar8 = *(char *)(lVar14 + 0x20);
      } while( true );
    }
    cVar8 = *(char *)(lVar14 + 0x20);
    if ((cVar8 != '\0') && (wVar11 == *(wchar_t *)(lVar14 + 0x4c))) {
      cVar8 = '\x01';
      goto LAB_0040e888;
    }
    if (wVar11 == *(wchar_t *)(lVar14 + 0x48)) goto LAB_0040e888;
    if (local_30 != (long *)0x0) {
      if ((ulong)local_30[2] < (ulong)local_30[3]) {
        local_30[2] = local_30[2] + 4;
      }
      else {
        FUN_003ff240();
      }
      local_28 = L'\xffffffff';
    }
    iVar9 = FUN_00406484(&local_30);
    iVar10 = FUN_00406484(&local_40);
    if ((iVar9 == -1) != (iVar10 == -1)) {
      wVar11 = FUN_00406484(&local_30);
      cVar8 = *(char *)(lVar14 + 0x20);
      goto LAB_0040e888;
    }
  }
  cVar8 = *(char *)(lVar14 + 0x20);
  bVar1 = true;
  iVar9 = 0;
  bVar5 = false;
LAB_0040e968:
  iVar10 = (int)uVar22;
joined_r0x0040ec8c:
  if (iVar10 == 0x10) {
    __n = 0x16;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 == '\0') goto LAB_0040e990;
LAB_0040ecb0:
    local_58 = &local_8;
    FUN_00410ed8(local_58,0x20);
    cVar8 = *(char *)(lVar14 + 0x148);
    uVar21 = 0;
    if (uVar22 != 0) {
      uVar21 = 0xffffffffffffffff / uVar22;
    }
    if (cVar8 == '\0') goto LAB_0040e9a8;
LAB_0040ecd4:
    local_58 = &local_8;
    if (!bVar1) {
      uVar20 = 0;
      bVar4 = false;
      wVar6 = local_28;
LAB_0040ece8:
      local_28 = wVar6;
      if ((*(char *)(lVar14 + 0x20) == '\0') || (wVar11 != *(wchar_t *)(lVar14 + 0x4c))) {
        if ((wVar11 == *(wchar_t *)(lVar14 + 0x48)) ||
           (pwVar16 = wmemchr((wchar_t *)(lVar14 + 0xf0),wVar11,__n), pwVar16 == (wchar_t *)0x0))
        goto LAB_0040ec00;
        iVar10 = (int)((long)pwVar16 - (lVar14 + 0xf0) >> 2);
        if (0xf < iVar10) {
          iVar10 = iVar10 + -6;
        }
        if (uVar20 <= uVar21) {
          iVar9 = iVar9 + 1;
          uVar18 = uVar20 * uVar22;
          uVar20 = (long)iVar10 + uVar18;
          bVar4 = (bool)(bVar4 | (ulong)~(long)iVar10 < uVar18);
          goto LAB_0040ed58;
        }
        bVar4 = true;
        if (local_30 != (long *)0x0) goto LAB_0040ed60;
LAB_0040ee6c:
        if (local_40 == (long *)0x0) goto LAB_0040eb34;
        cVar19 = cVar8;
joined_r0x0040ee84:
        cVar17 = '\0';
        if ((int)local_38 == -1) {
          if ((int *)local_40[2] < (int *)local_40[3]) {
            iVar10 = *(int *)local_40[2];
          }
          else {
            iVar10 = (**(code **)(*local_40 + 0x48))();
          }
          if (iVar10 == -1) {
            local_40 = (long *)0x0;
            cVar17 = cVar8;
          }
          else {
            local_38 = CONCAT44(local_38._4_4_,iVar10);
            cVar17 = '\0';
          }
        }
        if (cVar17 == cVar19) goto LAB_0040eb34;
      }
      else {
        if (iVar9 == 0) {
          bVar2 = true;
          goto LAB_0040ec04;
        }
        FUN_004116e0(local_58,iVar9);
        iVar9 = 0;
LAB_0040ed58:
        if (local_30 == (long *)0x0) goto LAB_0040ee6c;
LAB_0040ed60:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040ee6c;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040ee6c;
        }
        cVar19 = '\0';
        local_28 = wVar11;
        if (local_40 != (long *)0x0) {
          goto joined_r0x0040ee84;
        }
      }
      wVar6 = local_28;
      wVar11 = L'\xffffffff';
      if ((local_30 != (long *)0x0) && (wVar11 = local_28, local_28 == L'\xffffffff')) {
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        wVar6 = wVar11;
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          wVar6 = local_28;
        }
      }
      goto LAB_0040ece8;
    }
    uVar20 = 0;
    bVar4 = false;
    bVar2 = false;
  }
  else {
LAB_0040e970:
    __n = (ulong)(int)uVar22;
    local_8 = PTR_DAT_00501f30 + 0x18;
    if (cVar8 != '\0') goto LAB_0040ecb0;
LAB_0040e990:
    cVar8 = *(char *)(lVar14 + 0x148);
    uVar21 = 0;
    if (uVar22 != 0) {
      uVar21 = 0xffffffffffffffff / uVar22;
    }
    if (cVar8 != '\0') goto LAB_0040ecd4;
LAB_0040e9a8:
    uVar20 = 0;
    bVar4 = false;
    if (!bVar1) {
LAB_0040e9c0:
      if (10 < __n) goto LAB_0040ea94;
LAB_0040e9c8:
      if ((0x2f < (uint)wVar11) && ((uint)wVar11 < (uint)((int)__n + L'0'))) {
        uVar13 = wVar11 + L'\xffffffd0';
LAB_0040e9e0:
        if (uVar20 <= uVar21) goto LAB_0040eac4;
LAB_0040e9e8:
        bVar4 = true;
        if (local_30 == (long *)0x0) goto LAB_0040eaec;
LAB_0040e9f4:
        if ((ulong)local_30[2] < (ulong)local_30[3]) {
          local_30[2] = local_30[2] + 4;
        }
        else {
          (**(code **)(*local_30 + 0x50))();
          local_28 = L'\xffffffff';
          if (local_30 == (long *)0x0) goto LAB_0040eaec;
        }
        local_28 = L'\xffffffff';
        if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
          wVar11 = *(wchar_t *)local_30[2];
        }
        else {
          wVar11 = (**(code **)(*local_30 + 0x48))();
        }
        if (wVar11 == L'\xffffffff') {
          local_30 = (long *)0x0;
          goto LAB_0040eaec;
        }
        iVar10 = 0;
        local_28 = wVar11;
        if (local_40 == (long *)0x0) goto LAB_0040ea54;
        iVar12 = 0;
        if ((int)local_38 == -1) goto LAB_0040eb08;
LAB_0040ea4c:
        do {
          if (iVar12 == iVar10) goto LAB_0040eb34;
LAB_0040ea54:
          while( true ) {
            wVar11 = L'\xffffffff';
            if ((local_30 == (long *)0x0) || (wVar11 = local_28, local_28 != L'\xffffffff'))
            goto LAB_0040e9c0;
            if ((wchar_t *)local_30[2] < (wchar_t *)local_30[3]) {
              wVar11 = *(wchar_t *)local_30[2];
            }
            else {
              wVar11 = (**(code **)(*local_30 + 0x48))();
            }
            if (wVar11 == L'\xffffffff') {
              local_30 = (long *)0x0;
              goto LAB_0040e9c0;
            }
            local_28 = wVar11;
            if (__n < 0xb) goto LAB_0040e9c8;
LAB_0040ea94:
            uVar13 = wVar11 + L'\xffffffd0';
            if (uVar13 < 10) goto LAB_0040e9e0;
            if ((uint)(wVar11 + L'\xffffff9f') < 6) {
              uVar13 = wVar11 + L'\xffffffa9';
              goto LAB_0040e9e0;
            }
            if (5 < (uint)(wVar11 + L'\xffffffbf')) goto LAB_0040ec00;
            uVar13 = wVar11 + L'\xffffffc9';
            if (uVar21 < uVar20) goto LAB_0040e9e8;
LAB_0040eac4:
            iVar9 = iVar9 + 1;
            uVar18 = uVar20 * uVar22;
            uVar20 = (long)(int)uVar13 + uVar18;
            bVar4 = (bool)(bVar4 | (ulong)~(long)(int)uVar13 < uVar18);
            if (local_30 != (long *)0x0) goto LAB_0040e9f4;
LAB_0040eaec:
            if (local_40 == (long *)0x0) goto LAB_0040eb34;
            iVar10 = 1;
            iVar12 = 0;
            if ((int)local_38 != -1) goto LAB_0040ea4c;
LAB_0040eb08:
            if ((int *)local_40[2] < (int *)local_40[3]) {
              iVar12 = *(int *)local_40[2];
            }
            else {
              iVar12 = (**(code **)(*local_40 + 0x48))();
            }
            if (iVar12 == -1) break;
            local_38 = CONCAT44(local_38._4_4_,iVar12);
            if (iVar10 == 0) goto LAB_0040eb34;
          }
          local_40 = (long *)0x0;
          iVar12 = 1;
        } while( true );
      }
    }
LAB_0040ec00:
    bVar2 = false;
  }
LAB_0040ec04:
  lVar15 = *(long *)(local_8 + -0x18);
joined_r0x0040eb44:
  if (lVar15 == 0) {
    if ((iVar9 == 0) <= bVar5) {
LAB_0040eb90:
      if (!bVar2) {
        if (bVar4) {
          *param_8 = -1;
          *param_7 = 4;
        }
        else {
          *param_8 = (uVar20 ^ -(ulong)bVar7) + (ulong)bVar7;
        }
        goto LAB_0040ebb0;
      }
    }
  }
  else {
    local_58 = &local_8;
    FUN_004116e0(local_58,iVar9);
    cVar8 = FUN_003ee0cc(*(undefined8 *)(lVar14 + 0x10),*(undefined8 *)(lVar14 + 0x18),local_58);
    if (cVar8 == '\0') {
      *param_7 = 4;
    }
    if (((iVar9 == 0) <= bVar5) || (*(long *)(local_8 + -0x18) != 0)) goto LAB_0040eb90;
  }
  *param_8 = 0;
  *param_7 = 4;
LAB_0040ebb0:
  if (bVar1) {
    *param_7 = *param_7 | 2;
  }
  auVar3._8_4_ = local_28;
  auVar3._0_8_ = local_30;
  auVar3._12_4_ = uStack_24;
  if (local_8 + -0x18 != PTR_DAT_00501f30) {
    FUN_003ff25c(local_8 + -0x18,auStack_10);
  }
  return auVar3;
LAB_0040f024:
  cVar8 = *(char *)(lVar14 + 0x20);
  bVar1 = false;
  goto LAB_0040e968;
LAB_0040eb34:
  bVar2 = false;
  bVar1 = true;
  lVar15 = *(long *)(local_8 + -0x18);
  goto joined_r0x0040eb44;
}


==================================================================

### FUNC 0040f05c (20 bytes) name=FUN_0040f05c

void FUN_0040f05c(void)

{
  FUN_0040e754();
  return;
}


==================================================================

### FUNC 0040f070 (64 bytes) name=FUN_0040f070

void FUN_0040f070(void *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar4 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar4 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar4 = *piVar1;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar3) {
        *piVar1 = iVar4 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
  }
  if (0 < iVar4) {
    return;
  }
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040f0b0 (52 bytes) name=FUN_0040f0b0

void FUN_0040f0b0(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_00501b18 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501ef8,PTR__bad_exception_00501a70);
}


==================================================================

### FUNC 0040f0e4 (52 bytes) name=FUN_0040f0e4

void FUN_0040f0e4(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_00501dd0 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501950,PTR__bad_alloc_005019e0);
}


==================================================================

### FUNC 0040f118 (52 bytes) name=FUN_0040f118

void FUN_0040f118(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_005018d8 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501d68,PTR__bad_cast_00501b20);
}


==================================================================

### FUNC 0040f14c (52 bytes) name=FUN_0040f14c

void FUN_0040f14c(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_00501a98 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501c60,PTR__bad_typeid_00501af0);
}


==================================================================

### FUNC 0040f180 (120 bytes) name=FUN_0040f180

void FUN_0040f180(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c798(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501ba8,PTR_FUN_00501f40);
}


==================================================================

### FUNC 0040f234 (120 bytes) name=FUN_0040f234

void FUN_0040f234(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c7d8(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501f88,PTR_FUN_00501d98);
}


==================================================================

### FUNC 0040f2e8 (120 bytes) name=FUN_0040f2e8

void FUN_0040f2e8(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c824(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501fe8,PTR_FUN_00501920);
}


==================================================================

### FUNC 0040f39c (120 bytes) name=FUN_0040f39c

void FUN_0040f39c(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c870(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501c70,PTR_FUN_00501a90);
}


==================================================================

### FUNC 0040f450 (120 bytes) name=FUN_0040f450

void FUN_0040f450(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c8bc(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501960,PTR_FUN_005018f8);
}


==================================================================

### FUNC 0040f504 (280 bytes) name=FUN_0040f504

void FUN_0040f504(char *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 param_8)

{
  long lVar1;
  size_t sVar2;
  undefined8 uVar3;
  undefined1 *local_120;
  undefined1 *puStack_118;
  undefined1 *local_110;
  undefined8 uStack_108;
  undefined1 auStack_f8 [8];
  undefined1 auStack_f0 [8];
  long local_e8;
  undefined1 auStack_40 [8];
  undefined8 local_38;
  undefined8 local_30;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  undefined8 local_10;
  undefined8 local_8;
  
  local_38 = param_2;
  local_30 = param_3;
  local_28 = param_4;
  local_20 = param_5;
  local_18 = param_6;
  local_10 = param_7;
  local_8 = param_8;
  sVar2 = strlen(param_1);
  lVar1 = -(sVar2 + 0x21e & 0xfffffffffffffff0);
  local_110 = auStack_40;
  uStack_108 = 0xffffff80ffffffc8;
  local_120 = (undefined1 *)register0x00000008;
  puStack_118 = (undefined1 *)register0x00000008;
  FUN_004101f0(&stack0xfffffffffffffeb0 + lVar1,sVar2 + 0x200,param_1,&local_120);
  uVar3 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_e8,&stack0xfffffffffffffeb0 + lVar1,auStack_f8);
  FUN_0041c8bc(uVar3,&local_e8);
  if ((undefined *)(local_e8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_e8 + -0x18),auStack_f0);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar3,PTR_PTR_00501960,PTR_FUN_005018f8);
}


==================================================================

### FUNC 0040f658 (120 bytes) name=FUN_0040f658

void FUN_0040f658(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c908(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501bc0,PTR_FUN_00501d28);
}


==================================================================

### FUNC 0040f70c (120 bytes) name=FUN_0040f70c

void FUN_0040f70c(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c948(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_005018e0,PTR_FUN_00501ec8);
}


==================================================================

### FUNC 0040f7c0 (120 bytes) name=FUN_0040f7c0

void FUN_0040f7c0(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c994(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501978,PTR_FUN_00501ef0);
}


==================================================================

### FUNC 0040f874 (120 bytes) name=FUN_0040f874

void FUN_0040f874(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041c9e0(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501a88,PTR_FUN_00501c98);
}


==================================================================

### FUNC 0040f928 (120 bytes) name=FUN_0040f928

void FUN_0040f928(undefined8 param_1)

{
  undefined8 uVar1;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  uVar1 = __cxa_allocate_exception(0x10);
  FUN_00410a08(&local_8,param_1,auStack_18);
  FUN_0041b554(uVar1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501be0,PTR_FUN_005019b8);
}


==================================================================

### FUNC 0040f9b4 (160 bytes) name=FUN_0040f9b4

void FUN_0040f9b4(undefined4 param_1)

{
  undefined *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  long *plVar4;
  long *plVar5;
  undefined1 auStack_10 [8];
  long local_8;
  
  plVar4 = (long *)__cxa_allocate_exception(0x20);
  plVar5 = (long *)FUN_0041507c();
  (**(code **)(*plVar5 + 0x18))(&local_8,plVar5,param_1);
  FUN_0041c908(plVar4,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_10);
  }
  *(undefined4 *)(plVar4 + 2) = param_1;
  puVar3 = PTR_PTR_00501f20;
  puVar2 = PTR_FUN_00501d78;
  puVar1 = PTR_DAT_00501d00 + 0x10;
  plVar4[3] = (long)plVar5;
  *plVar4 = (long)puVar1;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar4,puVar3,puVar2);
}


==================================================================

### FUNC 0040fa90 (160 bytes) name=FUN_0040fa90

void FUN_0040fa90(undefined4 param_1)

{
  undefined *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  long *plVar4;
  long lVar5;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  long local_8;
  
  plVar4 = (long *)__cxa_allocate_exception(0x20);
  lVar5 = FUN_0040fec4();
  FUN_00410a08(&local_8,"std::future_error",auStack_10);
  FUN_0041c798(plVar4,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    FUN_0040f070((undefined *)(local_8 + -0x18),auStack_18);
  }
  *(undefined4 *)(plVar4 + 2) = param_1;
  puVar3 = PTR_FUN_00501e40;
  puVar2 = PTR_PTR_00501980;
  puVar1 = PTR_DAT_00501aa8 + 0x10;
  plVar4[3] = lVar5;
  *plVar4 = (long)puVar1;
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar4,puVar2,puVar3);
}


==================================================================

### FUNC 0040fb6c (52 bytes) name=FUN_0040fb6c

void FUN_0040fb6c(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_DAT_00501f38 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_PTR_00501988,PTR_FUN_00501888);
}


==================================================================

### FUNC 0040fba0 (64 bytes) name=FUN_0040fba0

void FUN_0040fba0(undefined4 param_1)

{
  undefined8 uVar1;
  
  uVar1 = __cxa_allocate_exception(0x18);
  FUN_0040ffc4(uVar1,param_1);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(uVar1,PTR_PTR_00501c90,PTR_FUN_00501d60);
}


==================================================================

### FUNC 0040fbf4 (12 bytes) name=FUN_0040fbf4

char * FUN_0040fbf4(void)

{
  return "bad_function_call";
}


==================================================================

### FUNC 0040fc00 (16 bytes) name=FUN_0040fc00

void FUN_0040fc00(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f8b20;
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0040fc10 (48 bytes) name=FUN_0040fc10

void FUN_0040fc10(exception *param_1)

{
  *(undefined ***)param_1 = &PTR_FUN_004f8b20;
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040fc40 (12 bytes) name=FUN_0040fc40

char * FUN_0040fc40(void)

{
  return "future";
}


==================================================================

### FUNC 0040fc4c (20 bytes) name=FUN_0040fc4c

void FUN_0040fc4c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe540;
  FUN_00415068();
  return;
}


==================================================================

### FUNC 0040fc60 (52 bytes) name=FUN_0040fc60

void FUN_0040fc60(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe540;
  FUN_00415068();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040fc94 (16 bytes) name=FUN_0040fc94

void FUN_0040fc94(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8b50;
  FUN_0041bd78();
  return;
}


==================================================================

### FUNC 0040fca4 (48 bytes) name=FUN_0040fca4

void FUN_0040fca4(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8b50;
  FUN_0041bd78();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040fcd4 (248 bytes) name=FUN_0040fcd4

long * FUN_0040fcd4(long *param_1,undefined8 param_2,undefined4 param_3)

{
  *param_1 = (long)(PTR_DAT_00501f30 + 0x18);
  switch(param_3) {
  case 1:
    FUN_00412fdc(param_1,"Future already retrieved",0x18);
    return param_1;
  case 2:
    FUN_00412fdc(param_1,"Promise already satisfied",0x19);
    return param_1;
  case 3:
    FUN_00412fdc(param_1,"No associated state",0x13);
    return param_1;
  case 4:
    FUN_00412fdc(param_1,"Broken promise",0xe);
    return param_1;
  default:
    FUN_00412fdc(param_1,"Unknown error",0xd);
    return param_1;
  }
}


==================================================================

### FUNC 0040fe30 (148 bytes) name=FUN_0040fe30

long FUN_0040fe30(long param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int *piVar4;
  long local_8;
  
  (**(code **)(**(long **)(param_1 + 0x18) + 0x18))
            (&local_8,*(long **)(param_1 + 0x18),*(undefined4 *)(param_1 + 0x10));
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar3 + -1;
    }
    else {
      piVar4 = (int *)(local_8 + -8);
      do {
        iVar3 = *piVar4;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  return local_8;
}


==================================================================

### FUNC 0040fec4 (112 bytes) name=FUN_0040fec4

undefined ** FUN_0040fec4(void)

{
  int iVar1;
  
  if (((DAT_00547720 & 1) == 0) && (iVar1 = __cxa_guard_acquire(&DAT_00547720), iVar1 != 0)) {
    __cxa_guard_release(&DAT_00547720);
    __cxa_atexit(FUN_0040fc4c,&PTR_PTR_00509620,&DAT_00502000);
    return &PTR_PTR_00509620;
  }
  return &PTR_PTR_00509620;
}


==================================================================

### FUNC 0040ff34 (16 bytes) name=FUN_0040ff34

void FUN_0040ff34(undefined8 *param_1)

{
  *param_1 = &PTR___cxa_pure_virtual_004fe510;
  std::__exception_ptr::exception_ptr::exception_ptr((exception_ptr *)(param_1 + 1));
  return;
}


==================================================================

### FUNC 0040ff44 (16 bytes) name=FUN_0040ff44

void FUN_0040ff44(undefined8 *param_1)

{
  *param_1 = &PTR___cxa_pure_virtual_004fe510;
  std::__exception_ptr::exception_ptr::~exception_ptr((exception_ptr *)(param_1 + 1));
  return;
}


==================================================================

### FUNC 0040ff54 (48 bytes) name=FUN_0040ff54

void FUN_0040ff54(undefined8 *param_1)

{
  *param_1 = &PTR___cxa_pure_virtual_004fe510;
  std::__exception_ptr::exception_ptr::~exception_ptr((exception_ptr *)(param_1 + 1));
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040ff84 (16 bytes) name=FUN_0040ff84

void FUN_0040ff84(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe5c0;
  FUN_0041be04();
  return;
}


==================================================================

### FUNC 0040ff94 (48 bytes) name=FUN_0040ff94

void FUN_0040ff94(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe5c0;
  FUN_0041be04();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0040ffc4 (184 bytes) name=FUN_0040ffc4

void FUN_0040ffc4(undefined8 *param_1,undefined4 param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int *piVar4;
  undefined1 auStack_18 [16];
  long local_8;
  
  FUN_00410a08(&local_8,"regex_error",auStack_18);
  FUN_0041c908(param_1,&local_8);
  if ((undefined *)(local_8 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(local_8 + -8);
      *(int *)(local_8 + -8) = iVar3 + -1;
    }
    else {
      piVar4 = (int *)(local_8 + -8);
      do {
        iVar3 = *piVar4;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(local_8 + -0x18));
    }
  }
  *(undefined4 *)(param_1 + 2) = param_2;
  *param_1 = &PTR_FUN_004fe5c0;
  return;
}


==================================================================

### FUNC 004100e4 (120 bytes) name=FUN_004100e4

void FUN_004100e4(void *param_1,long param_2)

{
  long lVar1;
  void *__src;
  size_t __n;
  undefined1 auStack_70 [59];
  undefined1 auStack_35 [53];
  
  __n = param_2 - (long)param_1;
  __src = memcpy(auStack_70,
                 "not enough space for format expansion (Please submit full bug report at http://gcc.gnu.org/bugs.html):\n    "
                 ,0x6c);
  lVar1 = -(__n + 0x8a & 0xfffffffffffffff0);
  memcpy(&stack0xffffffffffffff60 + lVar1,__src,0x6b);
  memcpy(auStack_35 + lVar1,param_1,__n);
  auStack_35[__n + lVar1] = 0;
                    /* WARNING: Subroutine does not return */
  FUN_0040f180(&stack0xffffffffffffff60 + lVar1);
}


==================================================================

### FUNC 0041015c (148 bytes) name=FUN_0041015c

ulong FUN_0041015c(void *param_1,ulong param_2,ulong param_3)

{
  size_t __n;
  ulong uVar1;
  undefined1 *puVar2;
  long lVar3;
  ulong uVar4;
  undefined1 local_39 [25];
  
  lVar3 = *(long *)PTR_PTR_00501d10;
  puVar2 = local_39 + 1;
  do {
    uVar1 = param_3 / 10;
    puVar2 = puVar2 + -1;
    *puVar2 = *(undefined1 *)(lVar3 + param_3 % 10 + 4);
    param_3 = uVar1;
  } while (uVar1 != 0);
  uVar1 = (long)(local_39 + 1) - (long)puVar2;
  uVar4 = uVar1 & 0xffffffff;
  __n = (size_t)(int)uVar1;
  if (param_2 < __n) {
    uVar4 = 0xffffffff;
  }
  else {
    memcpy(param_1,local_39 + (1 - __n),__n);
  }
  return uVar4;
}


==================================================================

### FUNC 004101f0 (400 bytes) name=FUN_004101f0

long FUN_004101f0(char *param_1,long param_2,char *param_3,undefined8 *param_4)

{
  char *pcVar1;
  char cVar2;
  char cVar3;
  int iVar4;
  char *pcVar5;
  char *pcVar6;
  undefined8 *puVar8;
  undefined8 *puVar9;
  int iVar10;
  long lVar11;
  char *pcVar7;
  
  pcVar1 = param_1 + param_2 + -1;
  puVar8 = (undefined8 *)*param_4;
  lVar11 = param_4[1];
  iVar10 = *(int *)(param_4 + 3);
  pcVar6 = param_1;
LAB_00410238:
  do {
    cVar3 = *param_3;
    while( true ) {
      if (cVar3 == '\0') {
        *pcVar6 = '\0';
        return (long)pcVar6 - (long)param_1;
      }
      puVar9 = puVar8;
      if (pcVar6 < pcVar1) break;
LAB_0041031c:
      while( true ) {
        FUN_004100e4(param_1,pcVar6);
LAB_00410328:
        iVar4 = iVar10 + 8;
        if (iVar4 < 1) {
          puVar8 = (undefined8 *)(lVar11 + iVar10);
          iVar10 = iVar4;
        }
        else {
          puVar8 = puVar9;
          puVar9 = (undefined8 *)((long)puVar9 + 0xfU & 0xfffffffffffffff8);
          iVar10 = iVar4;
        }
LAB_00410288:
        pcVar5 = (char *)*puVar8;
        cVar3 = *pcVar5;
        pcVar7 = pcVar6;
        if (cVar3 == '\0') break;
        do {
          pcVar6 = pcVar7 + 1;
          *pcVar7 = cVar3;
          pcVar5 = pcVar5 + 1;
          cVar3 = *pcVar5;
          if (cVar3 == '\0') goto LAB_004102ac;
          pcVar7 = pcVar6;
        } while (pcVar6 != pcVar1);
      }
LAB_004102ac:
      param_3 = param_3 + 2;
      cVar3 = *param_3;
      puVar8 = puVar9;
    }
    if (cVar3 != '%') {
LAB_0041022c:
      *pcVar6 = cVar3;
      param_3 = param_3 + 1;
      pcVar6 = pcVar6 + 1;
      goto LAB_00410238;
    }
    cVar2 = param_3[1];
    if (cVar2 == 's') {
      if (iVar10 < 0) goto LAB_00410328;
      puVar9 = (undefined8 *)((long)puVar8 + 0xfU & 0xfffffffffffffff8);
      goto LAB_00410288;
    }
    if (cVar2 != 'z') {
      param_3 = param_3 + (cVar2 == '%');
      goto LAB_0041022c;
    }
    if (param_3[2] != 'u') goto LAB_0041022c;
    if (iVar10 < 0) {
      iVar4 = iVar10 + 8;
      if (iVar4 < 1) {
        puVar9 = (undefined8 *)(lVar11 + iVar10);
        iVar10 = iVar4;
      }
      else {
        puVar8 = (undefined8 *)((long)puVar8 + 0xfU & 0xfffffffffffffff8);
        iVar10 = iVar4;
      }
    }
    else {
      puVar8 = (undefined8 *)((long)puVar8 + 0xfU & 0xfffffffffffffff8);
    }
    iVar4 = FUN_0041015c(pcVar6,(long)pcVar1 - (long)pcVar6,*puVar9);
    puVar9 = puVar8;
    if (iVar4 < 1) goto LAB_0041031c;
    pcVar6 = pcVar6 + iVar4;
    param_3 = param_3 + 3;
  } while( true );
}


==================================================================

### FUNC 00410380 (68 bytes) name=FUN_00410380

void FUN_00410380(void *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar2 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 004103c4 (8 bytes) name=FUN_004103c4

undefined8 FUN_004103c4(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004103cc (12 bytes) name=FUN_004103cc

undefined8 FUN_004103cc(undefined8 *param_1,undefined8 param_2)

{
  *param_1 = param_2;
  return param_2;
}


==================================================================

### FUNC 004103d8 (12 bytes) name=FUN_004103d8

long FUN_004103d8(long *param_1)

{
  return *param_1 + -0x18;
}


==================================================================

### FUNC 004103e4 (8 bytes) name=FUN_004103e4

undefined8 FUN_004103e4(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004103ec (16 bytes) name=FUN_004103ec

long FUN_004103ec(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18);
}


==================================================================

### FUNC 004103fc (56 bytes) name=FUN_004103fc

void FUN_004103fc(long *param_1,ulong param_2,undefined8 param_3)

{
  if (param_2 <= *(ulong *)(*param_1 + -0x18)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",param_3,param_2);
}


==================================================================

### FUNC 00410434 (56 bytes) name=FUN_00410434

void FUN_00410434(long *param_1,long param_2,ulong param_3,undefined8 param_4)

{
  if (param_3 <= (ulong)((0x3ffffffffffffff9 - *(long *)(*param_1 + -0x18)) + param_2)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c(param_4);
}


==================================================================

### FUNC 0041046c (24 bytes) name=FUN_0041046c

ulong FUN_0041046c(long *param_1,long param_2,ulong param_3)

{
  ulong uVar1;
  
  uVar1 = *(long *)(*param_1 + -0x18) - param_2;
  if (param_3 < uVar1) {
    uVar1 = param_3;
  }
  return uVar1;
}


==================================================================

### FUNC 00410484 (36 bytes) name=FUN_00410484

bool FUN_00410484(ulong *param_1,ulong param_2)

{
  bool bVar1;
  ulong uVar2;
  
  uVar2 = *param_1;
  bVar1 = true;
  if (uVar2 <= param_2) {
    bVar1 = uVar2 + *(long *)(uVar2 - 0x18) < param_2;
  }
  return bVar1;
}


==================================================================

### FUNC 004104a8 (28 bytes) name=FUN_004104a8

void FUN_004104a8(undefined1 *param_1,undefined1 *param_2,size_t param_3)

{
  if (param_3 != 1) {
    memcpy(param_1,param_2,param_3);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 004104c4 (28 bytes) name=FUN_004104c4

void FUN_004104c4(undefined1 *param_1,undefined1 *param_2,size_t param_3)

{
  if (param_3 != 1) {
    memmove(param_1,param_2,param_3);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 004104e0 (32 bytes) name=FUN_004104e0

void FUN_004104e0(byte *param_1,size_t param_2,byte param_3)

{
  if (param_2 != 1) {
    memset(param_1,(uint)param_3,param_2);
    return;
  }
  *param_1 = param_3;
  return;
}


==================================================================

### FUNC 00410500 (32 bytes) name=FUN_00410500

void FUN_00410500(undefined1 *param_1,undefined1 *param_2,long param_3)

{
  if (param_3 - (long)param_2 != 1) {
    memcpy(param_1,param_2,param_3 - (long)param_2);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00410520 (32 bytes) name=FUN_00410520

void FUN_00410520(undefined1 *param_1,undefined1 *param_2,long param_3)

{
  if (param_3 - (long)param_2 != 1) {
    memcpy(param_1,param_2,param_3 - (long)param_2);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00410540 (32 bytes) name=FUN_00410540

void FUN_00410540(undefined1 *param_1,undefined1 *param_2,long param_3)

{
  if (param_3 - (long)param_2 != 1) {
    memcpy(param_1,param_2,param_3 - (long)param_2);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00410560 (32 bytes) name=FUN_00410560

void FUN_00410560(undefined1 *param_1,undefined1 *param_2,long param_3)

{
  if (param_3 - (long)param_2 != 1) {
    memcpy(param_1,param_2,param_3 - (long)param_2);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00410580 (40 bytes) name=FUN_00410580

undefined4 FUN_00410580(long param_1,long param_2)

{
  undefined4 uVar1;
  
  param_1 = param_1 - param_2;
  if (0x7fffffff < param_1) {
    return 0x7fffffff;
  }
  uVar1 = 0x80000000;
  if (-0x80000001 < param_1) {
    uVar1 = (undefined4)param_1;
  }
  return uVar1;
}


==================================================================

### FUNC 004105a8 (12 bytes) name=FUN_004105a8

undefined8 * FUN_004105a8(void)

{
  return &DAT_00547730;
}


==================================================================

### FUNC 004105b4 (16 bytes) name=FUN_004105b4

void FUN_004105b4(undefined8 *param_1)

{
  *param_1 = &DAT_00547748;
  return;
}


==================================================================

### FUNC 004105c4 (16 bytes) name=FUN_004105c4

void FUN_004105c4(undefined8 *param_1)

{
  *param_1 = &DAT_00547748;
  return;
}


==================================================================

### FUNC 004105d4 (380 bytes) name=FUN_004105d4

void FUN_004105d4(undefined8 *param_1,long *param_2,ulong param_3,ulong param_4)

{
  void *__src;
  void *pvVar1;
  ulong uVar2;
  ulong *puVar3;
  ulong *__dest;
  ulong uVar4;
  long lVar5;
  
  lVar5 = *param_2;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                 "basic_string::basic_string",param_3,uVar4);
  }
  __src = (void *)(lVar5 + param_3);
  uVar2 = uVar4 - param_3;
  if (param_4 < uVar4 - param_3) {
    uVar2 = param_4;
  }
  pvVar1 = (void *)(lVar5 + uVar2 + param_3);
  if (__src == pvVar1) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((pvVar1 != (void *)0x0) && (__src == (void *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  uVar4 = (long)pvVar1 - (long)__src;
  if (0x3ffffffffffffff9 < uVar4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((uVar4 + 0x39 < 0x1001) || (uVar4 == 0)) {
    puVar3 = operator_new(uVar4 + 0x19);
    puVar3[1] = uVar4;
    *(undefined4 *)(puVar3 + 2) = 0;
    __dest = puVar3 + 3;
    if (uVar4 == 1) {
      *(undefined1 *)(puVar3 + 3) = *(undefined1 *)(lVar5 + param_3);
      goto LAB_004106a8;
    }
  }
  else {
    uVar2 = (uVar4 + 0x1000) - (uVar4 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar2) {
      uVar2 = 0x3ffffffffffffff9;
    }
    puVar3 = operator_new(uVar2 + 0x19);
    __dest = puVar3 + 3;
    puVar3[1] = uVar2;
    *(undefined4 *)(puVar3 + 2) = 0;
  }
  __dest = memcpy(__dest,__src,uVar4);
LAB_004106a8:
  if (puVar3 != &DAT_00547730) {
    *puVar3 = uVar4;
    *(undefined1 *)((long)puVar3 + uVar4 + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00410750 (380 bytes) name=FUN_00410750

void FUN_00410750(undefined8 *param_1,long *param_2,ulong param_3,ulong param_4)

{
  void *__src;
  void *pvVar1;
  ulong uVar2;
  ulong *puVar3;
  ulong *__dest;
  ulong uVar4;
  long lVar5;
  
  lVar5 = *param_2;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                 "basic_string::basic_string",param_3,uVar4);
  }
  __src = (void *)(lVar5 + param_3);
  uVar2 = uVar4 - param_3;
  if (param_4 < uVar4 - param_3) {
    uVar2 = param_4;
  }
  pvVar1 = (void *)(lVar5 + uVar2 + param_3);
  if (__src == pvVar1) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((pvVar1 != (void *)0x0) && (__src == (void *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  uVar4 = (long)pvVar1 - (long)__src;
  if (0x3ffffffffffffff9 < uVar4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((uVar4 + 0x39 < 0x1001) || (uVar4 == 0)) {
    puVar3 = operator_new(uVar4 + 0x19);
    puVar3[1] = uVar4;
    *(undefined4 *)(puVar3 + 2) = 0;
    __dest = puVar3 + 3;
    if (uVar4 == 1) {
      *(undefined1 *)(puVar3 + 3) = *(undefined1 *)(lVar5 + param_3);
      goto LAB_00410824;
    }
  }
  else {
    uVar2 = (uVar4 + 0x1000) - (uVar4 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar2) {
      uVar2 = 0x3ffffffffffffff9;
    }
    puVar3 = operator_new(uVar2 + 0x19);
    __dest = puVar3 + 3;
    puVar3[1] = uVar2;
    *(undefined4 *)(puVar3 + 2) = 0;
  }
  __dest = memcpy(__dest,__src,uVar4);
LAB_00410824:
  if (puVar3 != &DAT_00547730) {
    *puVar3 = uVar4;
    *(undefined1 *)((long)puVar3 + uVar4 + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 004108cc (316 bytes) name=FUN_004108cc

void FUN_004108cc(undefined8 *param_1,undefined1 *param_2,ulong param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  
  if (param_2 == param_2 + param_3) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((param_2 + param_3 != (undefined1 *)0x0) && (param_2 == (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  if (0x3ffffffffffffff9 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_3 - 0xfc8 < 0xffffffffffffefff) {
    uVar1 = (param_3 + 0x1000) - (param_3 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  else {
    puVar2 = operator_new(param_3 + 0x19);
    puVar2[1] = param_3;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (param_3 == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_2;
      goto LAB_0041097c;
    }
  }
  __dest = memcpy(__dest,param_2,param_3);
LAB_0041097c:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = param_3;
    *(undefined1 *)((long)puVar2 + param_3 + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00410a08 (320 bytes) name=FUN_00410a08

void FUN_00410a08(undefined8 *param_1,char *param_2)

{
  size_t __n;
  size_t sVar1;
  size_t *psVar2;
  size_t *__dest;
  
  if (param_2 == (char *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = strlen(param_2);
  if (__n == 0) {
    *param_1 = &DAT_00547748;
    return;
  }
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (__n - 0xfc8 < 0xffffffffffffefff) {
    sVar1 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < sVar1) {
      sVar1 = 0x3ffffffffffffff9;
    }
    psVar2 = operator_new(sVar1 + 0x19);
    __dest = psVar2 + 3;
    psVar2[1] = sVar1;
    *(undefined4 *)(psVar2 + 2) = 0;
  }
  else {
    psVar2 = operator_new(__n + 0x19);
    psVar2[1] = __n;
    *(undefined4 *)(psVar2 + 2) = 0;
    __dest = psVar2 + 3;
    if (__n == 1) {
      *(char *)(psVar2 + 3) = *param_2;
      goto LAB_00410ab0;
    }
  }
  __dest = memcpy(__dest,param_2,__n);
LAB_00410ab0:
  if (psVar2 != &DAT_00547730) {
    *psVar2 = __n;
    *(undefined1 *)((long)psVar2 + __n + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00410b48 (260 bytes) name=FUN_00410b48

void FUN_00410b48(undefined8 *param_1,ulong param_2,byte param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__s;
  
  if (param_2 == 0) {
    __s = (ulong *)&DAT_00547748;
    goto LAB_00410b74;
  }
  if (0x3ffffffffffffff9 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_2 + 0x39 < 0x1001) {
    puVar2 = operator_new(param_2 + 0x19);
    puVar2[1] = param_2;
    *(undefined4 *)(puVar2 + 2) = 0;
    __s = puVar2 + 3;
    if (param_2 != 1) goto LAB_00410be4;
    *(byte *)(puVar2 + 3) = param_3;
  }
  else {
    uVar1 = (param_2 + 0x1000) - (param_2 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __s = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
LAB_00410be4:
    __s = memset(__s,(uint)param_3,param_2);
  }
  if (puVar2 != &DAT_00547730) {
    *puVar2 = param_2;
    *(undefined1 *)((long)puVar2 + param_2 + 0x18) = 0;
  }
LAB_00410b74:
  *param_1 = __s;
  return;
}


==================================================================

### FUNC 00410c4c (24 bytes) name=FUN_00410c4c

void FUN_00410c4c(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  *param_2 = &DAT_00547748;
  return;
}


==================================================================

### FUNC 00410c64 (316 bytes) name=FUN_00410c64

void FUN_00410c64(undefined8 *param_1,undefined1 *param_2,ulong param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  
  if (param_2 == param_2 + param_3) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((param_2 + param_3 != (undefined1 *)0x0) && (param_2 == (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  if (0x3ffffffffffffff9 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_3 - 0xfc8 < 0xffffffffffffefff) {
    uVar1 = (param_3 + 0x1000) - (param_3 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  else {
    puVar2 = operator_new(param_3 + 0x19);
    puVar2[1] = param_3;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (param_3 == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_2;
      goto LAB_00410d14;
    }
  }
  __dest = memcpy(__dest,param_2,param_3);
LAB_00410d14:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = param_3;
    *(undefined1 *)((long)puVar2 + param_3 + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00410da0 (88 bytes) name=FUN_00410da0

void FUN_00410da0(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  lVar4 = *param_1;
  if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547730) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined8 *)(lVar4 + -0x18));
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00410df8 (48 bytes) name=FUN_00410df8

void FUN_00410df8(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 00410e28 (8 bytes) name=FUN_00410e28

undefined8 FUN_00410e28(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00410e30 (16 bytes) name=FUN_00410e30

long FUN_00410e30(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18);
}


==================================================================

### FUNC 00410e40 (24 bytes) name=FUN_00410e40

long * FUN_00410e40(long *param_1,long *param_2)

{
  *param_1 = *param_2 + *(long *)(*param_2 + -0x18);
  return param_1;
}


==================================================================

### FUNC 00410e58 (16 bytes) name=FUN_00410e58

undefined8 * FUN_00410e58(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  return param_1;
}


==================================================================

### FUNC 00410e68 (8 bytes) name=FUN_00410e68

undefined8 FUN_00410e68(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00410e70 (16 bytes) name=FUN_00410e70

long FUN_00410e70(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18);
}


==================================================================

### FUNC 00410e80 (24 bytes) name=FUN_00410e80

long * FUN_00410e80(long *param_1,long *param_2)

{
  *param_1 = *param_2 + *(long *)(*param_2 + -0x18);
  return param_1;
}


==================================================================

### FUNC 00410e98 (16 bytes) name=FUN_00410e98

undefined8 * FUN_00410e98(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  return param_1;
}


==================================================================

### FUNC 00410ea8 (12 bytes) name=FUN_00410ea8

undefined8 FUN_00410ea8(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x18);
}


==================================================================

### FUNC 00410eb4 (12 bytes) name=FUN_00410eb4

undefined8 FUN_00410eb4(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x18);
}


==================================================================

### FUNC 00410ec0 (12 bytes) name=FUN_00410ec0

undefined8 FUN_00410ec0(void)

{
  return 0x3ffffffffffffff9;
}


==================================================================

### FUNC 00410ecc (12 bytes) name=FUN_00410ecc

undefined8 FUN_00410ecc(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x10);
}


==================================================================

### FUNC 00410ed8 (396 bytes) name=FUN_00410ed8

void FUN_00410ed8(long *param_1,ulong param_2)

{
  char cVar1;
  bool bVar2;
  long *plVar3;
  long lVar4;
  int *piVar5;
  int iVar6;
  size_t __n;
  undefined1 *__src;
  ulong uVar7;
  
  __src = (undefined1 *)*param_1;
  uVar7 = *(ulong *)(__src + -0x10);
  if ((param_2 != uVar7) || (0 < *(int *)(__src + -8))) {
    if (param_2 < *(ulong *)(__src + -0x18)) {
      param_2 = *(ulong *)(__src + -0x18);
    }
    if (0x3ffffffffffffff9 < param_2) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f39c("basic_string::_S_create");
    }
    if (uVar7 < param_2) {
      if (param_2 < uVar7 << 1) {
        param_2 = uVar7 << 1;
      }
      if ((0x1000 < param_2 + 0x39) && (uVar7 < param_2)) {
        param_2 = (param_2 + 0x1000) - (param_2 + 0x39 & 0xfff);
        if (0x3ffffffffffffff9 < param_2) {
          param_2 = 0x3ffffffffffffff9;
        }
      }
    }
    plVar3 = operator_new(param_2 + 0x19);
    __n = *(size_t *)(__src + -0x18);
    plVar3[1] = param_2;
    *(undefined4 *)(plVar3 + 2) = 0;
    lVar4 = 0;
    if (__n != 0) {
      if (__n == 1) {
        *(undefined1 *)(plVar3 + 3) = *__src;
        lVar4 = *(long *)(__src + -0x18);
      }
      else {
        memcpy(plVar3 + 3,__src,__n);
        lVar4 = *(long *)(__src + -0x18);
      }
    }
    if (plVar3 != &DAT_00547730) {
      *plVar3 = lVar4;
      *(undefined1 *)((long)plVar3 + lVar4 + 0x18) = 0;
    }
    lVar4 = *param_1;
    if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = *(int *)(lVar4 + -8);
        *(int *)(lVar4 + -8) = iVar6 + -1;
      }
      else {
        piVar5 = (int *)(lVar4 + -8);
        do {
          iVar6 = *piVar5;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = iVar6 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar6 < 1) {
        operator_delete((undefined8 *)(lVar4 + -0x18));
      }
    }
    *param_1 = (long)(plVar3 + 3);
  }
  return;
}


==================================================================

### FUNC 00411064 (52 bytes) name=FUN_00411064

void FUN_00411064(long *param_1)

{
  if (*(ulong *)(*param_1 + -0x10) <= *(ulong *)(*param_1 + -0x18)) {
    return;
  }
  FUN_00410ed8(param_1,0);
  return;
}


==================================================================

### FUNC 004110a4 (328 bytes) name=FUN_004110a4

undefined8 FUN_004110a4(undefined8 *param_1,undefined1 *param_2,ulong param_3)

{
  ulong uVar1;
  undefined1 *__dest;
  long lVar2;
  undefined1 *puVar3;
  
  puVar3 = (undefined1 *)*param_1;
  lVar2 = *(long *)(puVar3 + -0x18);
  if (0x3ffffffffffffff9U - lVar2 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::append");
  }
  uVar1 = param_3 + lVar2;
  if ((*(ulong *)(puVar3 + -0x10) < uVar1) || (0 < *(int *)(puVar3 + -8))) {
    if ((puVar3 <= param_2) && (param_2 <= puVar3 + lVar2)) {
      lVar2 = (long)param_2 - (long)puVar3;
      FUN_00410ed8(param_1,uVar1);
      puVar3 = (undefined1 *)*param_1;
      param_2 = puVar3 + lVar2;
      lVar2 = *(long *)(puVar3 + -0x18);
      __dest = puVar3 + lVar2;
      goto joined_r0x0041119c;
    }
    FUN_00410ed8(param_1,uVar1);
    puVar3 = (undefined1 *)*param_1;
    lVar2 = *(long *)(puVar3 + -0x18);
  }
  __dest = puVar3 + lVar2;
joined_r0x0041119c:
  if (param_3 == 1) {
    puVar3[lVar2] = *param_2;
    puVar3 = (undefined1 *)*param_1;
  }
  else {
    memcpy(__dest,param_2,param_3);
    puVar3 = (undefined1 *)*param_1;
  }
  if (puVar3 == &DAT_00547748) {
    return 0;
  }
  *(ulong *)(puVar3 + -0x18) = uVar1;
  *(undefined4 *)(puVar3 + -8) = 0;
  puVar3[uVar1] = 0;
  return 0;
}


==================================================================

### FUNC 004111ec (260 bytes) name=FUN_004111ec

undefined8 FUN_004111ec(long *param_1,ulong param_2,byte param_3)

{
  ulong uVar1;
  void *__s;
  long lVar2;
  undefined1 *puVar3;
  long lVar4;
  
  lVar2 = *param_1;
  lVar4 = *(long *)(lVar2 + -0x18);
  if (0x3ffffffffffffff9U - lVar4 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::append");
  }
  uVar1 = param_2 + lVar4;
  if ((*(ulong *)(lVar2 + -0x10) < uVar1) || (0 < *(int *)(lVar2 + -8))) {
    FUN_00410ed8(param_1,uVar1);
    lVar2 = *param_1;
    lVar4 = *(long *)(lVar2 + -0x18);
    __s = (void *)(lVar2 + lVar4);
  }
  else {
    __s = (void *)(lVar2 + lVar4);
  }
  if (param_2 == 1) {
    *(byte *)(lVar2 + lVar4) = param_3;
    puVar3 = (undefined1 *)*param_1;
  }
  else {
    memset(__s,(uint)param_3,param_2);
    puVar3 = (undefined1 *)*param_1;
  }
  if (puVar3 == &DAT_00547748) {
    return 0;
  }
  *(ulong *)(puVar3 + -0x18) = uVar1;
  *(undefined4 *)(puVar3 + -8) = 0;
  puVar3[uVar1] = 0;
  return 0;
}


==================================================================

### FUNC 004112f0 (20 bytes) name=FUN_004112f0

bool FUN_004112f0(long *param_1)

{
  return *(long *)(*param_1 + -0x18) == 0;
}


==================================================================

### FUNC 00411304 (12 bytes) name=FUN_00411304

long FUN_00411304(long *param_1,long param_2)

{
  return *param_1 + param_2;
}


==================================================================

### FUNC 00411310 (48 bytes) name=FUN_00411310

long FUN_00411310(long *param_1,ulong param_2)

{
  if (param_2 < *(ulong *)(*param_1 + -0x18)) {
    return *param_1 + param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)");
}


==================================================================

### FUNC 00411340 (8 bytes) name=FUN_00411340

undefined8 FUN_00411340(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00411348 (20 bytes) name=FUN_00411348

long FUN_00411348(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18) + -1;
}


==================================================================

### FUNC 0041135c (64 bytes) name=FUN_0041135c

undefined8 FUN_0041135c(undefined8 param_1,char *param_2)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  if (sVar1 != 0) {
    FUN_004110a4(param_1,param_2,sVar1);
  }
  return param_1;
}


==================================================================

### FUNC 0041139c (160 bytes) name=FUN_0041139c

long * FUN_0041139c(long *param_1,undefined1 param_2)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  undefined1 *puVar4;
  
  lVar2 = *param_1;
  lVar3 = *(long *)(lVar2 + -0x18);
  uVar1 = lVar3 + 1;
  if ((*(ulong *)(lVar2 + -0x10) < uVar1) || (0 < *(int *)(lVar2 + -8))) {
    FUN_00410ed8(param_1,uVar1);
    lVar2 = *param_1;
    lVar3 = *(long *)(lVar2 + -0x18);
  }
  *(undefined1 *)(lVar2 + lVar3) = param_2;
  puVar4 = (undefined1 *)*param_1;
  if (puVar4 == &DAT_00547748) {
    return param_1;
  }
  *(ulong *)(puVar4 + -0x18) = uVar1;
  *(undefined4 *)(puVar4 + -8) = 0;
  puVar4[uVar1] = 0;
  return param_1;
}


==================================================================

### FUNC 0041143c (40 bytes) name=FUN_0041143c

undefined8 FUN_0041143c(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_004110a4();
  }
  return param_1;
}


==================================================================

### FUNC 00411464 (192 bytes) name=FUN_00411464

long * FUN_00411464(long *param_1,undefined8 *param_2)

{
  ulong uVar1;
  undefined1 *puVar2;
  long lVar3;
  long lVar4;
  size_t __n;
  
  puVar2 = (undefined1 *)*param_2;
  __n = *(size_t *)(puVar2 + -0x18);
  if (__n != 0) {
    lVar4 = *param_1;
    lVar3 = *(long *)(lVar4 + -0x18);
    uVar1 = lVar3 + __n;
    if ((*(ulong *)(lVar4 + -0x10) < uVar1) || (0 < *(int *)(lVar4 + -8))) {
      FUN_00410ed8(param_1,uVar1);
      lVar4 = *param_1;
      puVar2 = (undefined1 *)*param_2;
      lVar3 = *(long *)(lVar4 + -0x18);
    }
    if (__n == 1) {
      *(undefined1 *)(lVar4 + lVar3) = *puVar2;
    }
    else {
      memcpy((void *)(lVar4 + lVar3),puVar2,__n);
    }
    puVar2 = (undefined1 *)*param_1;
    if (puVar2 != &DAT_00547748) {
      *(undefined4 *)(puVar2 + -8) = 0;
      *(ulong *)(puVar2 + -0x18) = uVar1;
      puVar2[uVar1] = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00411524 (4 bytes) name=thunk_FUN_00411464

long * thunk_FUN_00411464(long *param_1,undefined8 *param_2)

{
  ulong uVar1;
  undefined1 *puVar2;
  long lVar3;
  long lVar4;
  size_t __n;
  
  puVar2 = (undefined1 *)*param_2;
  __n = *(size_t *)(puVar2 + -0x18);
  if (__n != 0) {
    lVar4 = *param_1;
    lVar3 = *(long *)(lVar4 + -0x18);
    uVar1 = lVar3 + __n;
    if ((*(ulong *)(lVar4 + -0x10) < uVar1) || (0 < *(int *)(lVar4 + -8))) {
      FUN_00410ed8(param_1,uVar1);
      lVar4 = *param_1;
      puVar2 = (undefined1 *)*param_2;
      lVar3 = *(long *)(lVar4 + -0x18);
    }
    if (__n == 1) {
      *(undefined1 *)(lVar4 + lVar3) = *puVar2;
    }
    else {
      memcpy((void *)(lVar4 + lVar3),puVar2,__n);
    }
    puVar2 = (undefined1 *)*param_1;
    if (puVar2 != &DAT_00547748) {
      *(undefined4 *)(puVar2 + -8) = 0;
      *(ulong *)(puVar2 + -0x18) = uVar1;
      puVar2[uVar1] = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00411528 (252 bytes) name=FUN_00411528

long * FUN_00411528(long *param_1,long *param_2,ulong param_3,ulong param_4)

{
  size_t __n;
  undefined1 *puVar1;
  long lVar2;
  long lVar3;
  ulong uVar4;
  long lVar5;
  
  lVar5 = *param_2;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::append",
                 param_3,uVar4);
  }
  __n = uVar4 - param_3;
  if (param_4 < uVar4 - param_3) {
    __n = param_4;
  }
  if (__n != 0) {
    lVar2 = *param_1;
    lVar3 = *(long *)(lVar2 + -0x18);
    uVar4 = __n + lVar3;
    if ((*(ulong *)(lVar2 + -0x10) < uVar4) || (0 < *(int *)(lVar2 + -8))) {
      FUN_00410ed8(param_1,uVar4);
      lVar2 = *param_1;
      lVar5 = *param_2;
      lVar3 = *(long *)(lVar2 + -0x18);
    }
    if (__n == 1) {
      *(undefined1 *)(lVar2 + lVar3) = *(undefined1 *)(lVar5 + param_3);
    }
    else {
      memcpy((void *)(lVar2 + lVar3),(void *)(lVar5 + param_3),__n);
    }
    puVar1 = (undefined1 *)*param_1;
    if (puVar1 != &DAT_00547748) {
      *(undefined4 *)(puVar1 + -8) = 0;
      *(ulong *)(puVar1 + -0x18) = uVar4;
      puVar1[uVar4] = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00411624 (40 bytes) name=FUN_00411624

undefined8 FUN_00411624(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_004110a4();
  }
  return param_1;
}


==================================================================

### FUNC 0041164c (64 bytes) name=FUN_0041164c

undefined8 FUN_0041164c(undefined8 param_1,char *param_2)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  if (sVar1 != 0) {
    FUN_004110a4(param_1,param_2,sVar1);
  }
  return param_1;
}


==================================================================

### FUNC 0041168c (44 bytes) name=FUN_0041168c

undefined8 FUN_0041168c(undefined8 param_1,long param_2,undefined1 param_3)

{
  if (param_2 != 0) {
    FUN_004111ec(param_1,param_2,param_3);
  }
  return param_1;
}


==================================================================

### FUNC 004116b8 (40 bytes) name=FUN_004116b8

undefined8 FUN_004116b8(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_004110a4();
  }
  return param_1;
}


==================================================================

### FUNC 004116e0 (152 bytes) name=FUN_004116e0

void FUN_004116e0(long *param_1,undefined1 param_2)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  undefined1 *puVar4;
  
  lVar2 = *param_1;
  lVar3 = *(long *)(lVar2 + -0x18);
  uVar1 = lVar3 + 1;
  if ((*(ulong *)(lVar2 + -0x10) < uVar1) || (0 < *(int *)(lVar2 + -8))) {
    FUN_00410ed8(param_1,uVar1);
    lVar2 = *param_1;
    lVar3 = *(long *)(lVar2 + -0x18);
  }
  *(undefined1 *)(lVar2 + lVar3) = param_2;
  puVar4 = (undefined1 *)*param_1;
  if (puVar4 == &DAT_00547748) {
    return;
  }
  *(ulong *)(puVar4 + -0x18) = uVar1;
  *(undefined4 *)(puVar4 + -8) = 0;
  puVar4[uVar1] = 0;
  return;
}


==================================================================

### FUNC 00411778 (48 bytes) name=FUN_00411778

void FUN_00411778(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 004117a8 (248 bytes) name=FUN_004117a8

ulong * FUN_004117a8(ulong param_1,byte param_2)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__s;
  
  if (param_1 == 0) {
    return (ulong *)&DAT_00547748;
  }
  if (0x3ffffffffffffff9 < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_1 + 0x39 < 0x1001) {
    puVar2 = operator_new(param_1 + 0x19);
    puVar2[1] = param_1;
    *(undefined4 *)(puVar2 + 2) = 0;
    __s = puVar2 + 3;
    if (param_1 == 1) {
      *(byte *)(puVar2 + 3) = param_2;
      goto LAB_0041184c;
    }
  }
  else {
    uVar1 = (param_1 + 0x1000) - (param_1 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __s = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __s = memset(__s,(uint)param_2,param_1);
LAB_0041184c:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = param_1;
    *(undefined1 *)((long)puVar2 + param_1 + 0x18) = 0;
  }
  return __s;
}


==================================================================

### FUNC 004118a0 (248 bytes) name=FUN_004118a0

ulong * FUN_004118a0(ulong param_1,byte param_2)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__s;
  
  if (param_1 == 0) {
    return (ulong *)&DAT_00547748;
  }
  if (0x3ffffffffffffff9 < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_1 + 0x39 < 0x1001) {
    puVar2 = operator_new(param_1 + 0x19);
    puVar2[1] = param_1;
    *(undefined4 *)(puVar2 + 2) = 0;
    __s = puVar2 + 3;
    if (param_1 == 1) {
      *(byte *)(puVar2 + 3) = param_2;
      goto LAB_00411944;
    }
  }
  else {
    uVar1 = (param_1 + 0x1000) - (param_1 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __s = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __s = memset(__s,(uint)param_2,param_1);
LAB_00411944:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = param_1;
    *(undefined1 *)((long)puVar2 + param_1 + 0x18) = 0;
  }
  return __s;
}


==================================================================

### FUNC 00411998 (140 bytes) name=FUN_00411998

size_t FUN_00411998(long *param_1,undefined1 *param_2,ulong param_3,ulong param_4)

{
  size_t __n;
  ulong uVar1;
  long lVar2;
  
  lVar2 = *param_1;
  uVar1 = *(ulong *)(lVar2 + -0x18);
  if (uVar1 < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::copy",
                 param_4,uVar1);
  }
  __n = uVar1 - param_4;
  if (param_3 < uVar1 - param_4) {
    __n = param_3;
  }
  if (__n != 0) {
    if (__n == 1) {
      *param_2 = *(undefined1 *)(lVar2 + param_4);
      return 1;
    }
    memcpy(param_2,(void *)(lVar2 + param_4),__n);
  }
  return __n;
}


==================================================================

### FUNC 00411a24 (48 bytes) name=FUN_00411a24

void FUN_00411a24(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 00411a54 (8 bytes) name=FUN_00411a54

undefined8 FUN_00411a54(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00411a5c (8 bytes) name=FUN_00411a5c

undefined8 FUN_00411a5c(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00411a64 (8 bytes) name=FUN_00411a64

undefined8 FUN_00411a64(undefined8 param_1)

{
  return param_1;
}


==================================================================

### FUNC 00411a6c (188 bytes) name=FUN_00411a6c

ulong FUN_00411a6c(long *param_1,char *param_2,ulong param_3,ulong param_4)

{
  char cVar1;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  long lVar5;
  
  lVar5 = *param_1;
  uVar3 = *(ulong *)(lVar5 + -0x18);
  if (param_4 == 0) {
    uVar4 = param_3;
    if (uVar3 < param_3) {
      uVar4 = 0xffffffffffffffff;
    }
  }
  else {
    uVar4 = 0xffffffffffffffff;
    if ((param_4 <= uVar3) && (param_3 <= uVar3 - param_4)) {
      cVar1 = *param_2;
      uVar4 = param_3;
      do {
        uVar4 = uVar4 + 1;
        if ((*(char *)(lVar5 + param_3) == cVar1) &&
           (iVar2 = memcmp((void *)(lVar5 + uVar4),param_2 + 1,param_4 - 1), iVar2 == 0)) {
          return param_3;
        }
        param_3 = param_3 + 1;
      } while (uVar4 <= uVar3 - param_4);
      uVar4 = 0xffffffffffffffff;
    }
  }
  return uVar4;
}


==================================================================

### FUNC 00411b28 (196 bytes) name=FUN_00411b28

ulong FUN_00411b28(long *param_1,undefined8 *param_2,ulong param_3)

{
  char cVar1;
  int iVar2;
  ulong uVar3;
  char *pcVar4;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  
  pcVar4 = (char *)*param_2;
  lVar7 = *param_1;
  uVar3 = *(ulong *)(pcVar4 + -0x18);
  uVar5 = *(ulong *)(lVar7 + -0x18);
  if (uVar3 == 0) {
    uVar6 = param_3;
    if (uVar5 < param_3) {
      uVar6 = 0xffffffffffffffff;
    }
  }
  else {
    uVar6 = 0xffffffffffffffff;
    if ((uVar3 <= uVar5) && (param_3 <= uVar5 - uVar3)) {
      cVar1 = *pcVar4;
      uVar6 = param_3;
      do {
        uVar6 = uVar6 + 1;
        if ((*(char *)(lVar7 + param_3) == cVar1) &&
           (iVar2 = memcmp((void *)(lVar7 + uVar6),pcVar4 + 1,uVar3 - 1), iVar2 == 0)) {
          return param_3;
        }
        param_3 = param_3 + 1;
      } while (uVar6 <= uVar5 - uVar3);
      uVar6 = 0xffffffffffffffff;
    }
  }
  return uVar6;
}


==================================================================

### FUNC 00411bec (216 bytes) name=FUN_00411bec

ulong FUN_00411bec(long *param_1,char *param_2,ulong param_3)

{
  char cVar1;
  int iVar2;
  size_t sVar3;
  ulong uVar4;
  ulong uVar5;
  long lVar6;
  
  sVar3 = strlen(param_2);
  lVar6 = *param_1;
  uVar4 = *(ulong *)(lVar6 + -0x18);
  if (sVar3 == 0) {
    uVar5 = param_3;
    if (uVar4 < param_3) {
      uVar5 = 0xffffffffffffffff;
    }
  }
  else {
    uVar5 = 0xffffffffffffffff;
    if ((sVar3 <= uVar4) && (param_3 <= uVar4 - sVar3)) {
      cVar1 = *param_2;
      uVar5 = param_3;
      do {
        uVar5 = uVar5 + 1;
        if ((*(char *)(lVar6 + param_3) == cVar1) &&
           (iVar2 = memcmp((void *)(lVar6 + uVar5),param_2 + 1,sVar3 - 1), iVar2 == 0)) {
          return param_3;
        }
        param_3 = param_3 + 1;
      } while (uVar5 <= uVar4 - sVar3);
      uVar5 = 0xffffffffffffffff;
    }
  }
  return uVar5;
}


==================================================================

### FUNC 00411cc4 (84 bytes) name=FUN_00411cc4

long FUN_00411cc4(long *param_1,byte param_2,ulong param_3)

{
  void *pvVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(ulong *)(lVar2 + -0x18) <= param_3) {
    return -1;
  }
  pvVar1 = memchr((void *)(lVar2 + param_3),(uint)param_2,*(ulong *)(lVar2 + -0x18) - param_3);
  lVar2 = (long)pvVar1 - lVar2;
  if (pvVar1 == (void *)0x0) {
    lVar2 = -1;
  }
  return lVar2;
}


==================================================================

### FUNC 00411d18 (148 bytes) name=FUN_00411d18

ulong FUN_00411d18(long *param_1,undefined8 *param_2,ulong param_3)

{
  bool bVar1;
  int iVar2;
  ulong uVar3;
  ulong __n;
  void *__s2;
  long lVar4;
  
  __s2 = (void *)*param_2;
  lVar4 = *param_1;
  __n = *(ulong *)((long)__s2 + -0x18);
  uVar3 = *(ulong *)(lVar4 + -0x18);
  if (uVar3 < __n) {
    return 0xffffffffffffffff;
  }
  uVar3 = uVar3 - __n;
  if (uVar3 < param_3) {
    param_3 = uVar3;
  }
  do {
    iVar2 = memcmp((void *)(lVar4 + param_3),__s2,__n);
    if (iVar2 == 0) {
      return param_3;
    }
    bVar1 = param_3 != 0;
    param_3 = param_3 - 1;
  } while (bVar1);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00411dac (148 bytes) name=FUN_00411dac

ulong FUN_00411dac(long *param_1,void *param_2,ulong param_3,ulong param_4)

{
  bool bVar1;
  int iVar2;
  ulong uVar3;
  long lVar4;
  
  lVar4 = *param_1;
  uVar3 = *(ulong *)(lVar4 + -0x18);
  if (uVar3 < param_4) {
    return 0xffffffffffffffff;
  }
  uVar3 = uVar3 - param_4;
  if (param_3 < uVar3) {
    uVar3 = param_3;
  }
  do {
    iVar2 = memcmp((void *)(lVar4 + uVar3),param_2,param_4);
    if (iVar2 == 0) {
      return uVar3;
    }
    bVar1 = uVar3 != 0;
    uVar3 = uVar3 - 1;
  } while (bVar1);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00411e40 (168 bytes) name=FUN_00411e40

ulong FUN_00411e40(long *param_1,char *param_2,ulong param_3)

{
  bool bVar1;
  int iVar2;
  size_t __n;
  ulong uVar3;
  long lVar4;
  
  __n = strlen(param_2);
  lVar4 = *param_1;
  uVar3 = *(ulong *)(lVar4 + -0x18);
  if (uVar3 < __n) {
    return 0xffffffffffffffff;
  }
  uVar3 = uVar3 - __n;
  if (param_3 < uVar3) {
    uVar3 = param_3;
  }
  do {
    iVar2 = memcmp((void *)(lVar4 + uVar3),param_2,__n);
    if (iVar2 == 0) {
      return uVar3;
    }
    bVar1 = uVar3 != 0;
    uVar3 = uVar3 - 1;
  } while (bVar1);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00411ee8 (72 bytes) name=FUN_00411ee8

void FUN_00411ee8(long *param_1,char param_2,ulong param_3)

{
  char *pcVar1;
  ulong uVar2;
  long lVar3;
  
  lVar3 = *(long *)(*param_1 + -0x18);
  if (lVar3 != 0) {
    uVar2 = lVar3 - 1;
    if (uVar2 < param_3) {
      param_3 = uVar2;
    }
    do {
      if (param_3 == 0xffffffffffffffff) {
        return;
      }
      pcVar1 = (char *)(*param_1 + param_3);
      param_3 = param_3 - 1;
    } while (*pcVar1 != param_2);
  }
  return;
}


==================================================================

### FUNC 00411f30 (140 bytes) name=FUN_00411f30

ulong FUN_00411f30(long *param_1,void *param_2,ulong param_3,size_t param_4)

{
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  
  if (param_4 != 0) {
    lVar2 = *param_1;
    uVar3 = *(ulong *)(lVar2 + -0x18);
    for (; param_3 < uVar3; param_3 = param_3 + 1) {
      pvVar1 = memchr(param_2,(uint)*(byte *)(lVar2 + param_3),param_4);
      if (pvVar1 != (void *)0x0) {
        return param_3;
      }
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00411fbc (12 bytes) name=FUN_00411fbc

void FUN_00411fbc(void)

{
  FUN_00411f30();
  return;
}


==================================================================

### FUNC 00411fc8 (60 bytes) name=FUN_00411fc8

void FUN_00411fc8(undefined8 param_1,char *param_2,undefined8 param_3)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  FUN_00411f30(param_1,param_2,param_3,sVar1);
  return;
}


==================================================================

### FUNC 00412004 (84 bytes) name=FUN_00412004

long FUN_00412004(long *param_1,byte param_2,ulong param_3)

{
  void *pvVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(ulong *)(lVar2 + -0x18) <= param_3) {
    return -1;
  }
  pvVar1 = memchr((void *)(lVar2 + param_3),(uint)param_2,*(ulong *)(lVar2 + -0x18) - param_3);
  lVar2 = (long)pvVar1 - lVar2;
  if (pvVar1 == (void *)0x0) {
    lVar2 = -1;
  }
  return lVar2;
}


==================================================================

### FUNC 00412058 (128 bytes) name=FUN_00412058

ulong FUN_00412058(long *param_1,undefined8 *param_2,ulong param_3)

{
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  void *__s;
  size_t __n;
  long lVar4;
  
  __s = (void *)*param_2;
  lVar4 = *param_1;
  __n = *(size_t *)((long)__s + -0x18);
  lVar2 = *(long *)(lVar4 + -0x18);
  if ((__n != 0) && (lVar2 != 0)) {
    uVar3 = lVar2 - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    do {
      pvVar1 = memchr(__s,(uint)*(byte *)(lVar4 + param_3),__n);
      if (pvVar1 != (void *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
    } while (param_3 != 0xffffffffffffffff);
    return 0xffffffffffffffff;
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004120d8 (128 bytes) name=FUN_004120d8

ulong FUN_004120d8(long *param_1,void *param_2,ulong param_3,size_t param_4)

{
  bool bVar1;
  long lVar2;
  ulong uVar3;
  void *pvVar4;
  long lVar5;
  
  lVar5 = *param_1;
  lVar2 = *(long *)(lVar5 + -0x18);
  if ((param_4 != 0) && (lVar2 != 0)) {
    uVar3 = lVar2 - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    do {
      pvVar4 = memchr(param_2,(uint)*(byte *)(lVar5 + param_3),param_4);
      if (pvVar4 != (void *)0x0) {
        return param_3;
      }
      bVar1 = param_3 != 0;
      param_3 = param_3 - 1;
    } while (bVar1);
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00412158 (148 bytes) name=FUN_00412158

ulong FUN_00412158(long *param_1,char *param_2,ulong param_3)

{
  size_t __n;
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  
  __n = strlen(param_2);
  lVar4 = *param_1;
  lVar2 = *(long *)(lVar4 + -0x18);
  if ((__n != 0) && (lVar2 != 0)) {
    uVar3 = lVar2 - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    do {
      pvVar1 = memchr(param_2,(uint)*(byte *)(lVar4 + param_3),__n);
      if (pvVar1 != (void *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
    } while (param_3 != 0xffffffffffffffff);
    return 0xffffffffffffffff;
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004121ec (72 bytes) name=FUN_004121ec

void FUN_004121ec(long *param_1,char param_2,ulong param_3)

{
  char *pcVar1;
  ulong uVar2;
  long lVar3;
  
  lVar3 = *(long *)(*param_1 + -0x18);
  if (lVar3 != 0) {
    uVar2 = lVar3 - 1;
    if (uVar2 < param_3) {
      param_3 = uVar2;
    }
    do {
      if (param_3 == 0xffffffffffffffff) {
        return;
      }
      pcVar1 = (char *)(*param_1 + param_3);
      param_3 = param_3 - 1;
    } while (*pcVar1 != param_2);
  }
  return;
}


==================================================================

### FUNC 00412234 (132 bytes) name=FUN_00412234

ulong FUN_00412234(long *param_1,undefined8 *param_2,ulong param_3)

{
  void *pvVar1;
  void *__s;
  long lVar2;
  ulong uVar3;
  size_t __n;
  
  lVar2 = *param_1;
  __s = (void *)*param_2;
  uVar3 = *(ulong *)(lVar2 + -0x18);
  __n = *(size_t *)((long)__s + -0x18);
  while( true ) {
    if (uVar3 <= param_3) {
      return 0xffffffffffffffff;
    }
    pvVar1 = memchr(__s,(uint)*(byte *)(lVar2 + param_3),__n);
    if (pvVar1 == (void *)0x0) break;
    param_3 = param_3 + 1;
  }
  return param_3;
}


==================================================================

### FUNC 004122b8 (132 bytes) name=FUN_004122b8

ulong FUN_004122b8(long *param_1,void *param_2,ulong param_3,size_t param_4)

{
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  
  lVar2 = *param_1;
  uVar3 = *(ulong *)(lVar2 + -0x18);
  while( true ) {
    if (uVar3 <= param_3) {
      return 0xffffffffffffffff;
    }
    pvVar1 = memchr(param_2,(uint)*(byte *)(lVar2 + param_3),param_4);
    if (pvVar1 == (void *)0x0) break;
    param_3 = param_3 + 1;
  }
  return param_3;
}


==================================================================

### FUNC 0041233c (144 bytes) name=FUN_0041233c

ulong FUN_0041233c(long *param_1,char *param_2,ulong param_3)

{
  size_t __n;
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  
  __n = strlen(param_2);
  lVar2 = *param_1;
  uVar3 = *(ulong *)(lVar2 + -0x18);
  while( true ) {
    if (uVar3 <= param_3) {
      return 0xffffffffffffffff;
    }
    pvVar1 = memchr(param_2,(uint)*(byte *)(lVar2 + param_3),__n);
    if (pvVar1 == (void *)0x0) break;
    param_3 = param_3 + 1;
  }
  return param_3;
}


==================================================================

### FUNC 004123cc (76 bytes) name=FUN_004123cc

ulong FUN_004123cc(long *param_1,char param_2,ulong param_3)

{
  char *pcVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (param_3 < *(ulong *)(lVar2 + -0x18)) {
    pcVar1 = (char *)(lVar2 + param_3);
    while( true ) {
      if (*pcVar1 != param_2) {
        return param_3;
      }
      param_3 = param_3 + 1;
      if (*(ulong *)(lVar2 + -0x18) <= param_3) break;
      param_2 = *(char *)(lVar2 + param_3);
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00412418 (124 bytes) name=FUN_00412418

ulong FUN_00412418(long *param_1,undefined8 *param_2,ulong param_3)

{
  ulong uVar1;
  void *pvVar2;
  long lVar3;
  void *__s;
  long lVar4;
  size_t __n;
  
  lVar4 = *param_1;
  __s = (void *)*param_2;
  lVar3 = *(long *)(lVar4 + -0x18);
  __n = *(size_t *)((long)__s + -0x18);
  if (lVar3 == 0) {
    return 0xffffffffffffffff;
  }
  uVar1 = lVar3 - 1;
  if (uVar1 < param_3) {
    param_3 = uVar1;
  }
  do {
    pvVar2 = memchr(__s,(uint)*(byte *)(lVar4 + param_3),__n);
    if (pvVar2 == (void *)0x0) {
      return param_3;
    }
    param_3 = param_3 - 1;
  } while (param_3 != 0xffffffffffffffff);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00412494 (144 bytes) name=FUN_00412494

ulong FUN_00412494(long *param_1,void *param_2,ulong param_3,size_t param_4)

{
  ulong uVar1;
  bool bVar2;
  void *pvVar3;
  long lVar4;
  long lVar5;
  
  lVar5 = *param_1;
  lVar4 = *(long *)(lVar5 + -0x18);
  if (lVar4 == 0) {
    return 0xffffffffffffffff;
  }
  uVar1 = lVar4 - 1;
  if (uVar1 < param_3) {
    param_3 = uVar1;
  }
  do {
    pvVar3 = memchr(param_2,(uint)*(byte *)(lVar5 + param_3),param_4);
    if (pvVar3 == (void *)0x0) {
      return param_3;
    }
    bVar2 = param_3 != 0;
    param_3 = param_3 - 1;
  } while (bVar2);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00412524 (144 bytes) name=FUN_00412524

ulong FUN_00412524(long *param_1,char *param_2,ulong param_3)

{
  ulong uVar1;
  size_t __n;
  void *pvVar2;
  long lVar3;
  long lVar4;
  
  __n = strlen(param_2);
  lVar4 = *param_1;
  lVar3 = *(long *)(lVar4 + -0x18);
  if (lVar3 == 0) {
    return 0xffffffffffffffff;
  }
  uVar1 = lVar3 - 1;
  if (uVar1 < param_3) {
    param_3 = uVar1;
  }
  do {
    pvVar2 = memchr(param_2,(uint)*(byte *)(lVar4 + param_3),__n);
    if (pvVar2 == (void *)0x0) {
      return param_3;
    }
    param_3 = param_3 - 1;
  } while (param_3 != 0xffffffffffffffff);
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004125b4 (76 bytes) name=FUN_004125b4

ulong FUN_004125b4(long *param_1,char param_2,ulong param_3)

{
  ulong uVar1;
  bool bVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = 0xffffffffffffffff;
  lVar4 = *(long *)(*param_1 + -0x18);
  if (lVar4 != 0) {
    uVar1 = lVar4 - 1;
    uVar3 = param_3;
    if (uVar1 < param_3) {
      uVar3 = uVar1;
    }
    while (*(char *)(*param_1 + uVar3) == param_2) {
      bVar2 = uVar3 == 0;
      uVar3 = uVar3 - 1;
      if (bVar2) {
        return 0xffffffffffffffff;
      }
    }
  }
  return uVar3;
}


==================================================================

### FUNC 00412600 (100 bytes) name=FUN_00412600

undefined8 FUN_00412600(undefined8 param_1,long *param_2,ulong param_3,undefined8 param_4)

{
  if (param_3 <= *(ulong *)(*param_2 + -0x18)) {
    FUN_004105d4(param_1,param_2,param_3,param_4);
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::substr",
               param_3,*(ulong *)(*param_2 + -0x18));
}


==================================================================

### FUNC 00412664 (104 bytes) name=FUN_00412664

int FUN_00412664(undefined8 *param_1,undefined8 *param_2)

{
  size_t __n;
  int iVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  
  uVar4 = *(ulong *)((long)*param_2 + -0x18);
  uVar2 = *(ulong *)((long)*param_1 + -0x18);
  __n = uVar4;
  if (uVar2 < uVar4) {
    __n = uVar2;
  }
  iVar1 = memcmp((void *)*param_1,(void *)*param_2,__n);
  if (iVar1 == 0) {
    iVar1 = 0x7fffffff;
    lVar3 = uVar2 - uVar4;
    if (lVar3 < 0x80000000) {
      iVar1 = -0x80000000;
      if (-0x80000001 < lVar3) {
        iVar1 = (int)lVar3;
      }
      return iVar1;
    }
  }
  return iVar1;
}


==================================================================

### FUNC 004126cc (156 bytes) name=FUN_004126cc

int FUN_004126cc(long *param_1,ulong param_2,ulong param_3,undefined8 *param_4)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar3);
  }
  uVar1 = uVar3 - param_2;
  if (param_3 < uVar3 - param_2) {
    uVar1 = param_3;
  }
  uVar3 = *(ulong *)((long)*param_4 + -0x18);
  __n = uVar1;
  if (uVar3 < uVar1) {
    __n = uVar3;
  }
  iVar2 = memcmp((void *)(*param_1 + param_2),(void *)*param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar4 = uVar1 - uVar3;
    if (lVar4 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar2 = (int)lVar4;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00412768 (200 bytes) name=FUN_00412768

int FUN_00412768(long *param_1,ulong param_2,ulong param_3,long *param_4,ulong param_5,ulong param_6
                )

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  long lVar5;
  
  uVar4 = *(ulong *)(*param_1 + -0x18);
  if (uVar4 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar4);
  }
  uVar3 = *(ulong *)(*param_4 + -0x18);
  if (param_5 <= uVar3) {
    uVar3 = uVar3 - param_5;
    uVar1 = uVar4 - param_2;
    if (param_3 < uVar4 - param_2) {
      uVar1 = param_3;
    }
    if (param_6 < uVar3) {
      uVar3 = param_6;
    }
    __n = uVar1;
    if (uVar3 < uVar1) {
      __n = uVar3;
    }
    iVar2 = memcmp((void *)(*param_1 + param_2),(void *)(*param_4 + param_5),__n);
    if (iVar2 == 0) {
      iVar2 = 0x7fffffff;
      lVar5 = uVar1 - uVar3;
      if (lVar5 < 0x80000000) {
        iVar2 = -0x80000000;
        if (-0x80000001 < lVar5) {
          iVar2 = (int)lVar5;
        }
        return iVar2;
      }
    }
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
               param_5);
}


==================================================================

### FUNC 00412830 (124 bytes) name=FUN_00412830

int FUN_00412830(undefined8 *param_1,char *param_2)

{
  size_t __n;
  int iVar1;
  size_t sVar2;
  ulong uVar3;
  long lVar4;
  void *__s1;
  
  __s1 = (void *)*param_1;
  sVar2 = strlen(param_2);
  uVar3 = *(ulong *)((long)__s1 + -0x18);
  __n = sVar2;
  if (uVar3 < sVar2) {
    __n = uVar3;
  }
  iVar1 = memcmp(__s1,param_2,__n);
  if (iVar1 == 0) {
    iVar1 = 0x7fffffff;
    lVar4 = uVar3 - sVar2;
    if (lVar4 < 0x80000000) {
      iVar1 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar1 = (int)lVar4;
      }
      return iVar1;
    }
  }
  return iVar1;
}


==================================================================

### FUNC 004128ac (180 bytes) name=FUN_004128ac

int FUN_004128ac(long *param_1,ulong param_2,ulong param_3,char *param_4)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  size_t sVar3;
  ulong uVar4;
  long lVar5;
  
  lVar5 = *param_1;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar4);
  }
  uVar1 = uVar4 - param_2;
  if (param_3 < uVar4 - param_2) {
    uVar1 = param_3;
  }
  sVar3 = strlen(param_4);
  __n = sVar3;
  if (uVar1 < sVar3) {
    __n = uVar1;
  }
  iVar2 = memcmp((void *)(lVar5 + param_2),param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar5 = uVar1 - sVar3;
    if (lVar5 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar5) {
        iVar2 = (int)lVar5;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00412960 (156 bytes) name=FUN_00412960

int FUN_00412960(long *param_1,ulong param_2,ulong param_3,void *param_4,ulong param_5)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar3);
  }
  uVar1 = uVar3 - param_2;
  if (param_3 < uVar3 - param_2) {
    uVar1 = param_3;
  }
  __n = uVar1;
  if (param_5 < uVar1) {
    __n = param_5;
  }
  iVar2 = memcmp((void *)(*param_1 + param_2),param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar4 = uVar1 - param_5;
    if (lVar4 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar2 = (int)lVar4;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 004129fc (8 bytes) name=FUN_004129fc

void FUN_004129fc(undefined8 *param_1,undefined8 param_2)

{
  *param_1 = param_2;
  return;
}


==================================================================

### FUNC 00412a04 (12 bytes) name=FUN_00412a04

undefined8 * FUN_00412a04(void)

{
  return &DAT_00547730;
}


==================================================================

### FUNC 00412a10 (12 bytes) name=FUN_00412a10

uint FUN_00412a10(long param_1)

{
  return *(uint *)(param_1 + 0x10) >> 0x1f;
}


==================================================================

### FUNC 00412a1c (16 bytes) name=FUN_00412a1c

bool FUN_00412a1c(long param_1)

{
  return 0 < *(int *)(param_1 + 0x10);
}


==================================================================

### FUNC 00412a2c (12 bytes) name=FUN_00412a2c

void FUN_00412a2c(long param_1)

{
  *(undefined4 *)(param_1 + 0x10) = 0xffffffff;
  return;
}


==================================================================

### FUNC 00412a38 (8 bytes) name=FUN_00412a38

void FUN_00412a38(long param_1)

{
  *(undefined4 *)(param_1 + 0x10) = 0;
  return;
}


==================================================================

### FUNC 00412a40 (40 bytes) name=FUN_00412a40

void FUN_00412a40(long *param_1,long param_2)

{
  if (param_1 == &DAT_00547730) {
    return;
  }
  *(undefined4 *)(param_1 + 2) = 0;
  *param_1 = param_2;
  *(undefined1 *)((long)param_1 + param_2 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 00412a68 (8 bytes) name=FUN_00412a68

long FUN_00412a68(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 00412a70 (152 bytes) name=FUN_00412a70

void FUN_00412a70(ulong param_1,ulong param_2)

{
  void *pvVar1;
  
  if (0x3ffffffffffffff9 < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_2 < param_1) {
    if (param_1 < param_2 << 1) {
      param_1 = param_2 << 1;
    }
    if ((0x1000 < param_1 + 0x39) && (param_2 < param_1)) {
      param_1 = (param_1 + 0x1000) - (param_1 + 0x39 & 0xfff);
      if (0x3ffffffffffffff9 < param_1) {
        param_1 = 0x3ffffffffffffff9;
      }
    }
  }
  pvVar1 = operator_new(param_1 + 0x19);
  *(ulong *)((long)pvVar1 + 8) = param_1;
  *(undefined4 *)((long)pvVar1 + 0x10) = 0;
  return;
}


==================================================================

### FUNC 00412b08 (496 bytes) name=FUN_00412b08

void FUN_00412b08(long *param_1,size_t param_2,long param_3,long param_4)

{
  ulong uVar1;
  char cVar2;
  bool bVar3;
  undefined8 *puVar4;
  long lVar5;
  int *piVar6;
  int iVar7;
  undefined8 *puVar8;
  size_t __n;
  undefined1 auStack_8 [8];
  
  puVar8 = (undefined8 *)*param_1;
  uVar1 = (param_4 - param_3) + puVar8[-3];
  __n = (puVar8[-3] - param_2) - param_3;
  if (((ulong)puVar8[-2] < uVar1) || (0 < *(int *)(puVar8 + -1))) {
    puVar4 = (undefined8 *)FUN_00412a70(uVar1,puVar8[-2],auStack_8);
    if (param_2 != 0) {
      if (param_2 == 1) {
        *(undefined1 *)(puVar4 + 3) = *(undefined1 *)*param_1;
      }
      else {
        memcpy(puVar4 + 3,(undefined1 *)*param_1,param_2);
      }
    }
    if (__n != 0) {
      param_4 = param_2 + 0x18 + param_4;
      if (__n == 1) {
        *(undefined1 *)((long)puVar4 + param_4) = *(undefined1 *)(*param_1 + param_3 + param_2);
      }
      else {
        memcpy((void *)((long)puVar4 + param_4),(void *)(*param_1 + param_3 + param_2),__n);
      }
    }
    puVar8 = puVar4 + 3;
    lVar5 = *param_1;
    if ((undefined8 *)(lVar5 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar7 = *(int *)(lVar5 + -8);
        *(int *)(lVar5 + -8) = iVar7 + -1;
      }
      else {
        piVar6 = (int *)(lVar5 + -8);
        do {
          iVar7 = *piVar6;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(piVar6,0x10);
          if (bVar3) {
            *piVar6 = iVar7 + -1;
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (iVar7 < 1) {
        operator_delete((undefined8 *)(lVar5 + -0x18));
      }
    }
    *param_1 = (long)puVar8;
    if (puVar4 == &DAT_00547730) {
      return;
    }
  }
  else {
    if ((param_3 != param_4) && (__n != 0)) {
      if (__n == 1) {
        *(undefined1 *)((long)puVar8 + param_4 + param_2) =
             *(undefined1 *)((long)puVar8 + param_3 + param_2);
        puVar8 = (undefined8 *)*param_1;
      }
      else {
        memmove((void *)((long)puVar8 + param_4 + param_2),
                (void *)((long)puVar8 + param_3 + param_2),__n);
        puVar8 = (undefined8 *)*param_1;
      }
    }
    if (puVar8 == (undefined8 *)&DAT_00547748) {
      return;
    }
  }
  puVar8[-3] = uVar1;
  *(undefined4 *)(puVar8 + -1) = 0;
  *(undefined1 *)((long)puVar8 + uVar1) = 0;
  return;
}


==================================================================

### FUNC 00412cf8 (92 bytes) name=FUN_00412cf8

void FUN_00412cf8(undefined8 *param_1)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if (puVar1 != &DAT_00547748) {
    if (0 < *(int *)(puVar1 + -8)) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return;
}


==================================================================

### FUNC 00412d54 (92 bytes) name=FUN_00412d54

void FUN_00412d54(undefined8 *param_1)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return;
}


==================================================================

### FUNC 00412db0 (20 bytes) name=FUN_00412db0

void FUN_00412db0(long *param_1)

{
  FUN_00412b08(param_1,0,*(undefined8 *)(*param_1 + -0x18),0);
  return;
}


==================================================================

### FUNC 00412dc4 (96 bytes) name=FUN_00412dc4

long * FUN_00412dc4(long *param_1,ulong param_2,ulong param_3)

{
  ulong uVar1;
  
  if (param_2 <= *(ulong *)(*param_1 + -0x18)) {
    uVar1 = *(ulong *)(*param_1 + -0x18) - param_2;
    if (param_3 < uVar1) {
      uVar1 = param_3;
    }
    FUN_00412b08(param_1,param_2,uVar1,0);
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",
               param_2);
}


==================================================================

### FUNC 00412e24 (68 bytes) name=FUN_00412e24

long FUN_00412e24(long *param_1,long param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  FUN_00412b08(param_1,param_2 - lVar2,1,0);
  lVar1 = *param_1;
  *(undefined4 *)(lVar1 + -8) = 0xffffffff;
  return lVar1 + (param_2 - lVar2);
}


==================================================================

### FUNC 00412e68 (92 bytes) name=FUN_00412e68

long FUN_00412e68(long *param_1,long param_2,long param_3)

{
  long lVar1;
  long lVar2;
  
  if (param_3 - param_2 == 0) {
    return param_2;
  }
  lVar2 = *param_1;
  FUN_00412b08(param_1,param_2 - lVar2,param_3 - param_2,0);
  lVar1 = *param_1;
  *(undefined4 *)(lVar1 + -8) = 0xffffffff;
  return lVar1 + (param_2 - lVar2);
}


==================================================================

### FUNC 00412ec4 (156 bytes) name=FUN_00412ec4

long * FUN_00412ec4(long *param_1,long param_2,long param_3,ulong param_4,byte param_5)

{
  if ((ulong)((0x3ffffffffffffff9 - *(long *)(*param_1 + -0x18)) + param_3) < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux");
  }
  FUN_00412b08();
  if (param_4 != 0) {
    if (param_4 == 1) {
      *(byte *)(*param_1 + param_2) = param_5;
      return param_1;
    }
    memset((void *)(*param_1 + param_2),(uint)param_5,param_4);
  }
  return param_1;
}


==================================================================

### FUNC 00412f60 (124 bytes) name=FUN_00412f60

long * FUN_00412f60(long *param_1,long param_2,undefined8 param_3,undefined1 *param_4,size_t param_5
                   )

{
  FUN_00412b08();
  if (param_5 != 0) {
    if (param_5 == 1) {
      *(undefined1 *)(*param_1 + param_2) = *param_4;
      return param_1;
    }
    memcpy((void *)(*param_1 + param_2),param_4,param_5);
  }
  return param_1;
}


==================================================================

### FUNC 00412fdc (296 bytes) name=FUN_00412fdc

undefined8 * FUN_00412fdc(undefined8 *param_1,undefined1 *param_2,size_t param_3)

{
  undefined1 *__dest;
  undefined8 *puVar1;
  
  __dest = (undefined1 *)*param_1;
  puVar1 = (undefined8 *)(__dest + -0x18);
  if (0x3ffffffffffffff9 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::assign");
  }
  if (((param_2 < __dest) || (__dest + *(long *)(__dest + -0x18) < param_2)) ||
     (0 < *(int *)(__dest + -8))) {
    FUN_00412b08(param_1,0,*(long *)(__dest + -0x18),param_3);
    if (param_3 == 0) {
      return param_1;
    }
    if (param_3 != 1) {
      memcpy((undefined1 *)*param_1,param_2,param_3);
      return param_1;
    }
    *(undefined1 *)*param_1 = *param_2;
    return param_1;
  }
  if ((ulong)((long)param_2 - (long)__dest) < param_3) {
    if (param_2 == __dest) goto LAB_00413094;
    if (param_3 != 1) {
      memmove(__dest,param_2,param_3);
      __dest = (undefined1 *)*param_1;
      puVar1 = (undefined8 *)(__dest + -0x18);
      goto LAB_00413094;
    }
  }
  else if (param_3 != 1) {
    memcpy(__dest,param_2,param_3);
    __dest = (undefined1 *)*param_1;
    puVar1 = (undefined8 *)(__dest + -0x18);
    goto LAB_00413094;
  }
  *__dest = *param_2;
  __dest = (undefined1 *)*param_1;
  puVar1 = (undefined8 *)(__dest + -0x18);
LAB_00413094:
  if (puVar1 != &DAT_00547730) {
    *(undefined4 *)(__dest + -8) = 0;
    *(size_t *)(__dest + -0x18) = param_3;
    __dest[param_3] = 0;
  }
  return param_1;
}


==================================================================

### FUNC 00413104 (36 bytes) name=FUN_00413104

undefined8 FUN_00413104(undefined8 param_1)

{
  FUN_00412fdc();
  return param_1;
}


==================================================================

### FUNC 00413128 (76 bytes) name=FUN_00413128

void FUN_00413128(undefined8 param_1,long *param_2,ulong param_3,ulong param_4)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_2 + -0x18);
  if (param_3 <= uVar2) {
    uVar1 = uVar2 - param_3;
    if (param_4 < uVar2 - param_3) {
      uVar1 = param_4;
    }
    FUN_00412fdc(param_1,*param_2 + param_3,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::assign",
               param_3,uVar2);
}


==================================================================

### FUNC 00413174 (52 bytes) name=FUN_00413174

void FUN_00413174(undefined8 param_1,char *param_2)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  FUN_00412fdc(param_1,param_2,sVar1);
  return;
}


==================================================================

### FUNC 004131a8 (52 bytes) name=FUN_004131a8

void FUN_004131a8(undefined8 param_1,char *param_2)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  FUN_00412fdc(param_1,param_2,sVar1);
  return;
}


==================================================================

### FUNC 004131dc (4 bytes) name=thunk_FUN_00412fdc

undefined8 * thunk_FUN_00412fdc(undefined8 *param_1,undefined1 *param_2,size_t param_3)

{
  undefined1 *__dest;
  undefined8 *puVar1;
  
  __dest = (undefined1 *)*param_1;
  puVar1 = (undefined8 *)(__dest + -0x18);
  if (0x3ffffffffffffff9 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::assign");
  }
  if (((param_2 < __dest) || (__dest + *(long *)(__dest + -0x18) < param_2)) ||
     (0 < *(int *)(__dest + -8))) {
    FUN_00412b08(param_1,0,*(long *)(__dest + -0x18),param_3);
    if (param_3 == 0) {
      return param_1;
    }
    if (param_3 != 1) {
      memcpy((undefined1 *)*param_1,param_2,param_3);
      return param_1;
    }
    *(undefined1 *)*param_1 = *param_2;
    return param_1;
  }
  if ((ulong)((long)param_2 - (long)__dest) < param_3) {
    if (param_2 == __dest) goto LAB_00413094;
    if (param_3 != 1) {
      memmove(__dest,param_2,param_3);
      __dest = (undefined1 *)*param_1;
      puVar1 = (undefined8 *)(__dest + -0x18);
      goto LAB_00413094;
    }
  }
  else if (param_3 != 1) {
    memcpy(__dest,param_2,param_3);
    __dest = (undefined1 *)*param_1;
    puVar1 = (undefined8 *)(__dest + -0x18);
    goto LAB_00413094;
  }
  *__dest = *param_2;
  __dest = (undefined1 *)*param_1;
  puVar1 = (undefined8 *)(__dest + -0x18);
LAB_00413094:
  if (puVar1 != &DAT_00547730) {
    *(undefined4 *)(__dest + -8) = 0;
    *(size_t *)(__dest + -0x18) = param_3;
    __dest[param_3] = 0;
  }
  return param_1;
}


==================================================================

### FUNC 004131e0 (476 bytes) name=FUN_004131e0

long * FUN_004131e0(long *param_1,ulong param_2,undefined1 *param_3,ulong param_4)

{
  undefined1 *__src;
  long lVar1;
  undefined1 *__dest;
  ulong uVar2;
  undefined1 *puVar3;
  size_t __n;
  
  puVar3 = (undefined1 *)*param_1;
  uVar2 = *(ulong *)(puVar3 + -0x18);
  if (uVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
                 param_2,uVar2);
  }
  if (param_4 <= 0x3ffffffffffffff9 - uVar2) {
    if (((param_3 < puVar3) || (puVar3 + uVar2 < param_3)) || (0 < *(int *)(puVar3 + -8))) {
      FUN_00412b08(param_1,param_2,0,param_4);
      if (param_4 != 0) {
        if (param_4 == 1) {
          *(undefined1 *)(*param_1 + param_2) = *param_3;
        }
        else {
          memcpy((void *)(*param_1 + param_2),param_3,param_4);
        }
      }
    }
    else {
      FUN_00412b08(param_1,param_2,0);
      lVar1 = *param_1;
      __src = param_3 + (lVar1 - (long)puVar3);
      __dest = (undefined1 *)(lVar1 + param_2);
      if (__src + param_4 <= __dest) {
        if (param_4 != 1) {
          memcpy(__dest,__src,param_4);
          return param_1;
        }
        *(undefined1 *)(lVar1 + param_2) = param_3[lVar1 - (long)puVar3];
        return param_1;
      }
      if (__src < __dest) {
        __n = (long)__dest - (long)__src;
        if (__n == 1) {
          *(undefined1 *)(lVar1 + param_2) = param_3[lVar1 - (long)puVar3];
        }
        else {
          __dest = memcpy(__dest,__src,__n);
        }
        if (param_4 - __n == 1) {
          __dest[__n] = __dest[param_4];
        }
        else {
          memcpy(__dest + __n,__dest + param_4,param_4 - __n);
        }
      }
      else if (param_4 == 1) {
        *(undefined1 *)(lVar1 + param_2) = __src[1];
      }
      else {
        memcpy(__dest,__src + param_4,param_4);
      }
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::insert");
}


==================================================================

### FUNC 004133bc (12 bytes) name=FUN_004133bc

void FUN_004133bc(long *param_1,long param_2)

{
  FUN_004131e0(param_1,param_2 - *param_1);
  return;
}


==================================================================

### FUNC 004133c8 (76 bytes) name=FUN_004133c8

void FUN_004133c8(undefined8 param_1,undefined8 param_2,long *param_3,ulong param_4,ulong param_5)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_3 + -0x18);
  if (param_4 <= uVar2) {
    uVar1 = uVar2 - param_4;
    if (param_5 < uVar2 - param_4) {
      uVar1 = param_5;
    }
    FUN_004131e0(param_1,param_2,*param_3 + param_4,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
               param_4,uVar2);
}


==================================================================

### FUNC 00413414 (60 bytes) name=FUN_00413414

void FUN_00413414(undefined8 param_1,undefined8 param_2,char *param_3)

{
  size_t sVar1;
  
  sVar1 = strlen(param_3);
  FUN_004131e0(param_1,param_2,param_3,sVar1);
  return;
}


==================================================================

### FUNC 00413450 (12 bytes) name=FUN_00413450

void FUN_00413450(void)

{
  FUN_004131e0();
  return;
}


==================================================================

### FUNC 0041345c (68 bytes) name=FUN_0041345c

void FUN_0041345c(long *param_1)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(*param_1 + -0x18) - 1;
  if (uVar1 <= *(ulong *)(*param_1 + -0x18)) {
    FUN_00412b08(param_1,uVar1,1,0);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase");
}


==================================================================

### FUNC 004134a0 (100 bytes) name=FUN_004134a0

void FUN_004134a0(long *param_1,ulong param_2,undefined1 param_3)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(*param_1 + -0x18);
  if (0x3ffffffffffffff9 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::resize",param_2,param_3);
  }
  if (uVar1 < param_2) {
    if (param_2 - uVar1 != 0) {
      FUN_004111ec(param_1,param_2 - uVar1);
      return;
    }
  }
  else if (param_2 < uVar1) {
    FUN_00412b08(param_1,param_2,uVar1 - param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 00413504 (8 bytes) name=FUN_00413504

void FUN_00413504(undefined8 param_1,undefined8 param_2)

{
  FUN_004134a0(param_1,param_2,0);
  return;
}


==================================================================

### FUNC 0041350c (96 bytes) name=FUN_0041350c

undefined1 * FUN_0041350c(undefined8 *param_1)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1;
}


==================================================================

### FUNC 0041356c (96 bytes) name=FUN_0041356c

undefined1 * FUN_0041356c(undefined8 *param_1)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1;
}


==================================================================

### FUNC 004135cc (100 bytes) name=FUN_004135cc

undefined1 * FUN_004135cc(undefined8 *param_1,long param_2)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + param_2;
}


==================================================================

### FUNC 00413630 (108 bytes) name=FUN_00413630

undefined8 * FUN_00413630(undefined8 *param_1,undefined8 *param_2)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_2;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_2,0,0,0);
      puVar1 = (undefined1 *)*param_2;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  *param_1 = puVar1;
  return param_1;
}


==================================================================

### FUNC 0041369c (100 bytes) name=FUN_0041369c

undefined1 * FUN_0041369c(undefined8 *param_1)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + *(long *)(puVar1 + -0x18);
}


==================================================================

### FUNC 00413700 (116 bytes) name=FUN_00413700

undefined8 * FUN_00413700(undefined8 *param_1,undefined8 *param_2)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_2;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_2,0,0,0);
      puVar1 = (undefined1 *)*param_2;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  *param_1 = puVar1 + *(long *)(puVar1 + -0x18);
  return param_1;
}


==================================================================

### FUNC 00413774 (104 bytes) name=FUN_00413774

undefined1 * FUN_00413774(undefined8 *param_1)

{
  undefined1 *puVar1;
  long lVar2;
  
  puVar1 = (undefined1 *)*param_1;
  lVar2 = *(long *)(puVar1 + -0x18);
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00412b08(param_1,0,0,0);
      puVar1 = (undefined1 *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + lVar2 + -1;
}


==================================================================

### FUNC 004137dc (124 bytes) name=FUN_004137dc

undefined1 * FUN_004137dc(undefined8 *param_1,ulong param_2)

{
  undefined1 *puVar1;
  
  puVar1 = (undefined1 *)*param_1;
  if (param_2 < *(ulong *)(puVar1 + -0x18)) {
    if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547748)) {
      if (*(int *)(puVar1 + -8) != 0) {
        FUN_00412b08(param_1,0,0,0);
        puVar1 = (undefined1 *)*param_1;
      }
      *(undefined4 *)(puVar1 + -8) = 0xffffffff;
    }
    return puVar1 + param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)");
}


==================================================================

### FUNC 00413858 (64 bytes) name=FUN_00413858

long * FUN_00413858(long *param_1,undefined1 param_2)

{
  FUN_00412b08(param_1,0,*(undefined8 *)(*param_1 + -0x18),1);
  *(undefined1 *)*param_1 = param_2;
  return param_1;
}


==================================================================

### FUNC 00413898 (120 bytes) name=FUN_00413898

long FUN_00413898(long *param_1,long param_2,undefined1 param_3)

{
  long lVar1;
  
  param_2 = param_2 - *param_1;
  if (*(long *)(*param_1 + -0x18) != 0x3ffffffffffffff9) {
    FUN_00412b08(param_1,param_2,0,1);
    *(undefined1 *)(*param_1 + param_2) = param_3;
    lVar1 = *param_1;
    *(undefined4 *)(lVar1 + -8) = 0xffffffff;
    return lVar1 + param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux");
}


==================================================================

### FUNC 00413910 (148 bytes) name=FUN_00413910

long * FUN_00413910(long *param_1,size_t param_2,byte param_3)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(*param_1 + -0x18);
  if (0x3ffffffffffffff9 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux",*param_1,uVar1);
  }
  FUN_00412b08(param_1,0,uVar1,param_2);
  if (param_2 != 0) {
    if (param_2 == 1) {
      *(byte *)*param_1 = param_3;
      return param_1;
    }
    memset((byte *)*param_1,(uint)param_3,param_2);
  }
  return param_1;
}


==================================================================

### FUNC 004139a4 (192 bytes) name=FUN_004139a4

long * FUN_004139a4(long *param_1,ulong param_2,ulong param_3,byte param_4)

{
  if (*(ulong *)(*param_1 + -0x18) < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
                 param_2);
  }
  if (param_3 <= 0x3ffffffffffffff9 - *(ulong *)(*param_1 + -0x18)) {
    FUN_00412b08(param_1,param_2,0,param_3);
    if (param_3 != 0) {
      if (param_3 == 1) {
        *(byte *)(*param_1 + param_2) = param_4;
        return param_1;
      }
      memset((void *)(*param_1 + param_2),(uint)param_4,param_3);
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux");
}


==================================================================

### FUNC 00413a64 (164 bytes) name=FUN_00413a64

long * FUN_00413a64(long *param_1,long param_2,long param_3,ulong param_4,byte param_5)

{
  long lVar1;
  
  lVar1 = param_2 - *param_1;
  if ((ulong)((0x3ffffffffffffff9 - *(long *)(*param_1 + -0x18)) + (param_3 - param_2)) < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux");
  }
  FUN_00412b08(param_1,lVar1);
  if (param_4 != 0) {
    if (param_4 == 1) {
      *(byte *)(*param_1 + lVar1) = param_5;
      return param_1;
    }
    memset((void *)(*param_1 + lVar1),(uint)param_5,param_4);
  }
  return param_1;
}


==================================================================

### FUNC 00413b08 (204 bytes) name=FUN_00413b08

long * FUN_00413b08(long *param_1,ulong param_2,ulong param_3,ulong param_4,byte param_5)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_1 + -0x18);
  if (uVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
                 param_2,uVar2);
  }
  uVar1 = uVar2 - param_2;
  if (param_3 < uVar2 - param_2) {
    uVar1 = param_3;
  }
  if (param_4 <= (0x3ffffffffffffff9 - uVar2) + uVar1) {
    FUN_00412b08();
    if (param_4 != 0) {
      if (param_4 == 1) {
        *(byte *)(*param_1 + param_2) = param_5;
        return param_1;
      }
      memset((void *)(*param_1 + param_2),(uint)param_5,param_4);
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux");
}


==================================================================

### FUNC 00413bd4 (152 bytes) name=FUN_00413bd4

void FUN_00413bd4(long *param_1,long param_2,ulong param_3,byte param_4)

{
  param_2 = param_2 - *param_1;
  if (0x3ffffffffffffff9U - *(long *)(*param_1 + -0x18) < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux");
  }
  FUN_00412b08(param_1,param_2,0,param_3);
  if (param_3 != 0) {
    if (param_3 != 1) {
      memset((void *)(*param_1 + param_2),(uint)param_4,param_3);
      return;
    }
    *(byte *)(*param_1 + param_2) = param_4;
  }
  return;
}


==================================================================

### FUNC 00413c6c (708 bytes) name=FUN_00413c6c

long * FUN_00413c6c(long *param_1,ulong param_2,ulong param_3,undefined1 *param_4,ulong param_5)

{
  undefined1 *puVar1;
  ulong uVar2;
  char cVar3;
  bool bVar4;
  long lVar5;
  int iVar6;
  ulong *puVar7;
  undefined1 *puVar8;
  long lVar9;
  ulong uVar10;
  ulong *__dest;
  undefined1 auStack_8 [8];
  
  puVar8 = (undefined1 *)*param_1;
  uVar10 = *(ulong *)(puVar8 + -0x18);
  if (uVar10 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
                 param_2);
  }
  uVar2 = uVar10 - param_2;
  if (param_3 < uVar10 - param_2) {
    uVar2 = param_3;
  }
  if ((0x3ffffffffffffff9 - uVar10) + uVar2 < param_5) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::replace");
  }
  if (((param_4 < puVar8) || (puVar8 + uVar10 < param_4)) || (0 < *(int *)(puVar8 + -8))) {
    FUN_00412b08(param_1,param_2,uVar2,param_5);
    if (param_5 != 0) {
      if (param_5 == 1) {
        *(undefined1 *)(*param_1 + param_2) = *param_4;
      }
      else {
        memcpy((void *)(*param_1 + param_2),param_4,param_5);
      }
    }
    return param_1;
  }
  puVar1 = param_4 + param_5;
  if (puVar8 + param_2 < puVar1) {
    if (param_4 < puVar8 + uVar2 + param_2) {
      if (param_4 == puVar1) {
        __dest = (ulong *)&DAT_00547748;
      }
      else {
        if ((puVar1 != (undefined1 *)0x0) && (param_4 == (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f180("basic_string::_S_construct null not valid");
        }
        puVar7 = (ulong *)FUN_00412a70(param_5,0,auStack_8);
        __dest = puVar7 + 3;
        if (param_5 == 1) {
          *(undefined1 *)(puVar7 + 3) = *param_4;
        }
        else {
          memcpy(__dest,param_4,param_5);
        }
        if (puVar7 != &DAT_00547730) {
          *(undefined4 *)(puVar7 + 2) = 0;
          *puVar7 = param_5;
          *(undefined1 *)((long)puVar7 + param_5 + 0x18) = 0;
        }
      }
      FUN_00412b08(param_1,param_2,uVar2,param_5);
      if (param_5 != 0) {
        if (param_5 == 1) {
          *(char *)(*param_1 + param_2) = (char)*__dest;
        }
        else {
          memcpy((void *)(*param_1 + param_2),__dest,param_5);
        }
      }
      if (__dest + -3 == &DAT_00547730) {
        return param_1;
      }
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar6 = (int)__dest[-1];
        *(int *)(__dest + -1) = iVar6 + -1;
      }
      else {
        puVar7 = __dest + -1;
        do {
          iVar6 = (int)*puVar7;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(puVar7,0x10);
          if (bVar4) {
            *(int *)puVar7 = iVar6 + -1;
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (0 < iVar6) {
        return param_1;
      }
      operator_delete(__dest + -3);
      return param_1;
    }
    lVar5 = (param_5 - (long)puVar8) - uVar2;
  }
  else {
    lVar5 = -(long)puVar8;
  }
  FUN_00412b08(param_1,param_2,uVar2,param_5);
  lVar9 = *param_1;
  if (param_5 != 1) {
    memcpy((void *)(lVar9 + param_2),param_4 + lVar9 + lVar5,param_5);
    return param_1;
  }
  *(undefined1 *)(lVar9 + param_2) = param_4[lVar9 + lVar5];
  return param_1;
}


==================================================================

### FUNC 00413f54 (12 bytes) name=FUN_00413f54

void FUN_00413f54(void)

{
  FUN_00413c6c();
  return;
}


==================================================================

### FUNC 00413f60 (76 bytes) name=FUN_00413f60

void FUN_00413f60(void)

{
  long *in_x3;
  ulong in_x4;
  
  if (in_x4 <= *(ulong *)(*in_x3 + -0x18)) {
    FUN_00413c6c();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
               in_x4,*(ulong *)(*in_x3 + -0x18));
}


==================================================================

### FUNC 00413fac (68 bytes) name=FUN_00413fac

void FUN_00413fac(undefined8 param_1,undefined8 param_2,undefined8 param_3,char *param_4)

{
  size_t sVar1;
  
  sVar1 = strlen(param_4);
  FUN_00413c6c(param_1,param_2,param_3,param_4,sVar1);
  return;
}


==================================================================

### FUNC 00413ff0 (16 bytes) name=FUN_00413ff0

void FUN_00413ff0(long *param_1,long param_2,long param_3)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2);
  return;
}


==================================================================

### FUNC 00414000 (24 bytes) name=FUN_00414000

void FUN_00414000(long *param_1,long param_2,long param_3,long *param_4)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,*param_4,
               *(undefined8 *)(*param_4 + -0x18));
  return;
}


==================================================================

### FUNC 00414018 (80 bytes) name=FUN_00414018

void FUN_00414018(long *param_1,long param_2,long param_3,char *param_4)

{
  size_t sVar1;
  
  sVar1 = strlen(param_4);
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,param_4,sVar1);
  return;
}


==================================================================

### FUNC 00414068 (20 bytes) name=FUN_00414068

void FUN_00414068(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,param_4,param_5 - param_4);
  return;
}


==================================================================

### FUNC 0041407c (20 bytes) name=FUN_0041407c

void FUN_0041407c(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,param_4,param_5 - param_4);
  return;
}


==================================================================

### FUNC 00414090 (16 bytes) name=FUN_00414090

void FUN_00414090(long *param_1,long param_2,long param_3)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2);
  return;
}


==================================================================

### FUNC 004140a0 (20 bytes) name=FUN_004140a0

void FUN_004140a0(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,param_4,param_5 - param_4);
  return;
}


==================================================================

### FUNC 004140b4 (20 bytes) name=FUN_004140b4

void FUN_004140b4(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00413c6c(param_1,param_2 - *param_1,param_3 - param_2,param_4,param_5 - param_4);
  return;
}


==================================================================

### FUNC 004140c8 (220 bytes) name=FUN_004140c8

size_t * FUN_004140c8(size_t *param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  size_t *psVar3;
  size_t *psVar4;
  size_t __n;
  size_t sVar5;
  
  if ((int)param_1[2] < 0) {
    psVar3 = (size_t *)FUN_00412a70(*param_1,param_1[1],param_2);
    __n = *param_1;
    psVar4 = psVar3 + 3;
    sVar5 = 0;
    if (__n != 0) {
      psVar4 = psVar3 + 3;
      if (__n == 1) {
        *(char *)(psVar3 + 3) = (char)param_1[3];
        sVar5 = *param_1;
      }
      else {
        psVar4 = memcpy(psVar4,param_1 + 3,__n);
        sVar5 = *param_1;
      }
    }
    if (psVar3 != &DAT_00547730) {
      *(undefined4 *)(psVar3 + 2) = 0;
      *psVar3 = sVar5;
      *(undefined1 *)((long)psVar3 + sVar5 + 0x18) = 0;
    }
  }
  else {
    if (param_1 != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(param_1 + 2) = (int)param_1[2] + 1;
      }
      else {
        psVar4 = param_1 + 2;
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(psVar4,0x10);
          if (bVar2) {
            *(int *)psVar4 = (int)*psVar4 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
    }
    psVar4 = param_1 + 3;
  }
  return psVar4;
}


==================================================================

### FUNC 004141a4 (80 bytes) name=FUN_004141a4

void FUN_004141a4(undefined8 *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (param_1 != &DAT_00547730) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(param_1 + 2);
      *(int *)(param_1 + 2) = iVar4 + -1;
    }
    else {
      piVar1 = (int *)(param_1 + 2);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete(param_1);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 004141f4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 004141f8 (76 bytes) name=FUN_004141f8

undefined8 * FUN_004141f8(undefined8 *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  
  if (param_1 != &DAT_00547730) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(param_1 + 2) = *(int *)(param_1 + 2) + 1;
    }
    else {
      piVar1 = (int *)(param_1 + 2);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  return param_1 + 3;
}


==================================================================

### FUNC 00414244 (308 bytes) name=FUN_00414244

size_t * FUN_00414244(size_t *param_1,undefined8 param_2,long param_3)

{
  size_t *psVar1;
  size_t *__dest;
  ulong uVar2;
  size_t __n;
  size_t sVar3;
  ulong uVar4;
  
  uVar2 = param_1[1];
  uVar4 = param_3 + *param_1;
  if (0x3ffffffffffffff9 < uVar4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((uVar2 < uVar4) && (uVar4 < uVar2 << 1)) {
    uVar4 = uVar2 << 1;
  }
  if ((0x1000 < uVar4 + 0x39) && (uVar2 < uVar4)) {
    uVar4 = (uVar4 + 0x1000) - (uVar4 + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar4) {
      uVar4 = 0x3ffffffffffffff9;
    }
  }
  psVar1 = operator_new(uVar4 + 0x19);
  __n = *param_1;
  __dest = psVar1 + 3;
  psVar1[1] = uVar4;
  *(undefined4 *)(psVar1 + 2) = 0;
  sVar3 = 0;
  if (__n != 0) {
    __dest = psVar1 + 3;
    if (__n == 1) {
      *(char *)(psVar1 + 3) = (char)param_1[3];
      sVar3 = *param_1;
    }
    else {
      __dest = memcpy(__dest,param_1 + 3,__n);
      sVar3 = *param_1;
    }
  }
  if (psVar1 != &DAT_00547730) {
    *psVar1 = sVar3;
    *(undefined1 *)((long)psVar1 + sVar3 + 0x18) = 0;
    return __dest;
  }
  return __dest;
}


==================================================================

### FUNC 00414378 (144 bytes) name=FUN_00414378

void FUN_00414378(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  long lVar4;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_2;
  if (*(int *)(lVar4 + -8) < 0) {
    lVar4 = FUN_00414244((undefined8 *)(lVar4 + -0x18),auStack_8,0);
    *param_1 = lVar4;
    return;
  }
  if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547730) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(lVar4 + -8) = *(int *)(lVar4 + -8) + 1;
    }
    else {
      piVar3 = (int *)(lVar4 + -8);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  *param_1 = lVar4;
  return;
}


==================================================================

### FUNC 00414408 (240 bytes) name=FUN_00414408

long * FUN_00414408(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  long lVar6;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_1;
  lVar6 = *param_2;
  if (lVar4 != lVar6) {
    if (*(int *)(lVar6 + -8) < 0) {
      lVar6 = FUN_00414244((undefined8 *)(lVar6 + -0x18),auStack_8,0);
      lVar4 = *param_1;
    }
    else if ((undefined8 *)(lVar6 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar6 + -8) = *(int *)(lVar6 + -8) + 1;
      }
      else {
        piVar5 = (int *)(lVar6 + -8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = *piVar5 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        lVar4 = *param_1;
      }
    }
    if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = *(int *)(lVar4 + -8);
        *(int *)(lVar4 + -8) = iVar3 + -1;
      }
      else {
        piVar5 = (int *)(lVar4 + -8);
        do {
          iVar3 = *piVar5;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = iVar3 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar3 < 1) {
        operator_delete((undefined8 *)(lVar4 + -0x18));
      }
    }
    *param_1 = lVar6;
  }
  return param_1;
}


==================================================================

### FUNC 004144f8 (240 bytes) name=FUN_004144f8

long * FUN_004144f8(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  long lVar6;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_1;
  lVar6 = *param_2;
  if (lVar4 != lVar6) {
    if (*(int *)(lVar6 + -8) < 0) {
      lVar6 = FUN_00414244((undefined8 *)(lVar6 + -0x18),auStack_8,0);
      lVar4 = *param_1;
    }
    else if ((undefined8 *)(lVar6 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar6 + -8) = *(int *)(lVar6 + -8) + 1;
      }
      else {
        piVar5 = (int *)(lVar6 + -8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = *piVar5 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        lVar4 = *param_1;
      }
    }
    if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547730) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = *(int *)(lVar4 + -8);
        *(int *)(lVar4 + -8) = iVar3 + -1;
      }
      else {
        piVar5 = (int *)(lVar4 + -8);
        do {
          iVar3 = *piVar5;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = iVar3 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar3 < 1) {
        operator_delete((undefined8 *)(lVar4 + -0x18));
      }
    }
    *param_1 = lVar6;
  }
  return param_1;
}


==================================================================

### FUNC 004145e8 (120 bytes) name=FUN_004145e8

undefined8 * FUN_004145e8(undefined8 *param_1,char *param_2,long *param_3)

{
  size_t sVar1;
  
  sVar1 = strlen(param_2);
  *param_1 = &DAT_00547748;
  FUN_00410ed8(param_1,sVar1 + *(long *)(*param_3 + -0x18));
  if (sVar1 != 0) {
    FUN_004110a4(param_1,param_2,sVar1);
  }
  FUN_00411464(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 00414688 (108 bytes) name=FUN_00414688

undefined8 * FUN_00414688(undefined8 *param_1,undefined1 param_2,long *param_3)

{
  *param_1 = &DAT_00547748;
  FUN_00410ed8(param_1,*(long *)(*param_3 + -0x18) + 1);
  FUN_004111ec(param_1,1,param_2);
  FUN_00411464(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 0041471c (152 bytes) name=FUN_0041471c

long * FUN_0041471c(long *param_1,long *param_2,undefined8 param_3)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  int *piVar4;
  undefined1 auStack_8 [8];
  
  lVar3 = *param_2;
  if (*(int *)(lVar3 + -8) < 0) {
    lVar3 = FUN_00414244((undefined8 *)(lVar3 + -0x18),auStack_8,0);
  }
  else if ((undefined8 *)(lVar3 + -0x18) != &DAT_00547730) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(lVar3 + -8) = *(int *)(lVar3 + -8) + 1;
    }
    else {
      piVar4 = (int *)(lVar3 + -8);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  *param_1 = lVar3;
  FUN_00411464(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 004147dc (308 bytes) name=FUN_004147dc

void FUN_004147dc(undefined8 *param_1,undefined1 *param_2,undefined1 *param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  ulong __n;
  
  if (param_2 == param_3) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((param_2 == (undefined1 *)0x0) && (param_3 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_3 - (long)param_2;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar2 = operator_new(__n + 0x19);
    puVar2[1] = __n;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_2;
      goto LAB_00414884;
    }
  }
  else {
    uVar1 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __dest = memcpy(__dest,param_2,__n);
LAB_00414884:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = __n;
    *(undefined1 *)((long)puVar2 + __n + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00414910 (308 bytes) name=FUN_00414910

void FUN_00414910(undefined8 *param_1,undefined1 *param_2,undefined1 *param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  ulong __n;
  
  if (param_2 == param_3) {
    *param_1 = &DAT_00547748;
    return;
  }
  if ((param_2 == (undefined1 *)0x0) && (param_3 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_3 - (long)param_2;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar2 = operator_new(__n + 0x19);
    puVar2[1] = __n;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_2;
      goto LAB_004149b8;
    }
  }
  else {
    uVar1 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __dest = memcpy(__dest,param_2,__n);
LAB_004149b8:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = __n;
    *(undefined1 *)((long)puVar2 + __n + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00414a44 (288 bytes) name=FUN_00414a44

void FUN_00414a44(undefined8 *param_1,undefined1 *param_2,undefined1 *param_3)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  ulong __n;
  
  if (param_2 == param_3) {
    *param_1 = &DAT_00547748;
    return;
  }
  __n = (long)param_3 - (long)param_2;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar2 = operator_new(__n + 0x19);
    puVar2[1] = __n;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_2;
      goto LAB_00414ad8;
    }
  }
  else {
    uVar1 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __dest = memcpy(__dest,param_2,__n);
LAB_00414ad8:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = __n;
    *(undefined1 *)((long)puVar2 + __n + 0x18) = 0;
  }
  *param_1 = __dest;
  return;
}


==================================================================

### FUNC 00414b64 (280 bytes) name=FUN_00414b64

ulong * FUN_00414b64(undefined1 *param_1,undefined1 *param_2)

{
  ulong uVar1;
  ulong *puVar2;
  ulong *__dest;
  ulong __n;
  
  if (param_1 == param_2) {
    return (ulong *)&DAT_00547748;
  }
  __n = (long)param_2 - (long)param_1;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar2 = operator_new(__n + 0x19);
    puVar2[1] = __n;
    *(undefined4 *)(puVar2 + 2) = 0;
    __dest = puVar2 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar2 + 3) = *param_1;
      goto LAB_00414bf4;
    }
  }
  else {
    uVar1 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar1) {
      uVar1 = 0x3ffffffffffffff9;
    }
    puVar2 = operator_new(uVar1 + 0x19);
    __dest = puVar2 + 3;
    puVar2[1] = uVar1;
    *(undefined4 *)(puVar2 + 2) = 0;
  }
  __dest = memcpy(__dest,param_1,__n);
LAB_00414bf4:
  if (puVar2 != &DAT_00547730) {
    *puVar2 = __n;
    *(undefined1 *)((long)puVar2 + __n + 0x18) = 0;
  }
  return __dest;
}


==================================================================

### FUNC 00414c7c (304 bytes) name=FUN_00414c7c

ulong * FUN_00414c7c(undefined1 *param_1,undefined1 *param_2)

{
  ulong *puVar1;
  ulong *__dest;
  ulong __n;
  ulong uVar2;
  
  if (param_1 == param_2) {
    return (ulong *)&DAT_00547748;
  }
  if ((param_1 == (undefined1 *)0x0) && (param_2 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_2 - (long)param_1;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar1 = operator_new(__n + 0x19);
    puVar1[1] = __n;
    *(undefined4 *)(puVar1 + 2) = 0;
    __dest = puVar1 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar1 + 3) = *param_1;
      goto LAB_00414d24;
    }
  }
  else {
    uVar2 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar2) {
      uVar2 = 0x3ffffffffffffff9;
    }
    puVar1 = operator_new(uVar2 + 0x19);
    __dest = puVar1 + 3;
    puVar1[1] = uVar2;
    *(undefined4 *)(puVar1 + 2) = 0;
  }
  __dest = memcpy(__dest,param_1,__n);
LAB_00414d24:
  if (puVar1 != &DAT_00547730) {
    *puVar1 = __n;
    *(undefined1 *)((long)puVar1 + __n + 0x18) = 0;
  }
  return __dest;
}


==================================================================

### FUNC 00414dac (304 bytes) name=FUN_00414dac

ulong * FUN_00414dac(undefined1 *param_1,undefined1 *param_2)

{
  ulong *puVar1;
  ulong *__dest;
  ulong __n;
  ulong uVar2;
  
  if (param_1 == param_2) {
    return (ulong *)&DAT_00547748;
  }
  if ((param_1 == (undefined1 *)0x0) && (param_2 != (undefined1 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_2 - (long)param_1;
  if (0x3ffffffffffffff9 < __n) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if ((__n + 0x39 < 0x1001) || (__n == 0)) {
    puVar1 = operator_new(__n + 0x19);
    puVar1[1] = __n;
    *(undefined4 *)(puVar1 + 2) = 0;
    __dest = puVar1 + 3;
    if (__n == 1) {
      *(undefined1 *)(puVar1 + 3) = *param_1;
      goto LAB_00414e54;
    }
  }
  else {
    uVar2 = (__n + 0x1000) - (__n + 0x39 & 0xfff);
    if (0x3ffffffffffffff9 < uVar2) {
      uVar2 = 0x3ffffffffffffff9;
    }
    puVar1 = operator_new(uVar2 + 0x19);
    __dest = puVar1 + 3;
    puVar1[1] = uVar2;
    *(undefined4 *)(puVar1 + 2) = 0;
  }
  __dest = memcpy(__dest,param_1,__n);
LAB_00414e54:
  if (puVar1 != &DAT_00547730) {
    *puVar1 = __n;
    *(undefined1 *)((long)puVar1 + __n + 0x18) = 0;
  }
  return __dest;
}


==================================================================

### FUNC 00414edc (20 bytes) name=FUN_00414edc

bool FUN_00414edc(long *param_1,long *param_2)

{
  return *param_1 == *param_2;
}


==================================================================

### FUNC 00414ef0 (20 bytes) name=FUN_00414ef0

bool FUN_00414ef0(long *param_1,long *param_2)

{
  return *param_1 == *param_2;
}


==================================================================

### FUNC 00414f04 (12 bytes) name=FUN_00414f04

char * FUN_00414f04(void)

{
  return "generic";
}


==================================================================

### FUNC 00414f10 (12 bytes) name=FUN_00414f10

char * FUN_00414f10(void)

{
  return "system";
}


==================================================================

### FUNC 00414f1c (16 bytes) name=FUN_00414f1c

undefined4 FUN_00414f1c(undefined8 param_1,undefined4 param_2)

{
  return param_2;
}


==================================================================

### FUNC 00414f2c (80 bytes) name=FUN_00414f2c

bool FUN_00414f2c(long *param_1,undefined8 param_2,int *param_3)

{
  int iVar1;
  long extraout_x1;
  
  iVar1 = (**(code **)(*param_1 + 0x20))();
  if (*(long *)(param_3 + 2) != extraout_x1) {
    return false;
  }
  return *param_3 == iVar1;
}


==================================================================

### FUNC 00414f7c (44 bytes) name=FUN_00414f7c

bool FUN_00414f7c(long param_1,int *param_2,int param_3)

{
  if (*(long *)(param_2 + 2) != param_1) {
    return false;
  }
  return *param_2 == param_3;
}


==================================================================

### FUNC 00414fa8 (4 bytes) name=FUN_00414fa8

void FUN_00414fa8(void)

{
  return;
}


==================================================================

### FUNC 00414fac (4 bytes) name=FUN_00414fac

void FUN_00414fac(void)

{
  return;
}


==================================================================

### FUNC 00414fb0 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 00414fb4 (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 00414fb8 (56 bytes) name=FUN_00414fb8

undefined8 FUN_00414fb8(undefined8 param_1,undefined8 param_2,int param_3)

{
  char *pcVar1;
  undefined1 auStack_8 [8];
  
  pcVar1 = strerror(param_3);
  FUN_00410a08(param_1,pcVar1,auStack_8);
  return param_1;
}


==================================================================

### FUNC 00414ff0 (56 bytes) name=FUN_00414ff0

undefined8 FUN_00414ff0(undefined8 param_1,undefined8 param_2,int param_3)

{
  char *pcVar1;
  undefined1 auStack_8 [8];
  
  pcVar1 = strerror(param_3);
  FUN_00410a08(param_1,pcVar1,auStack_8);
  return param_1;
}


==================================================================

### FUNC 00415028 (16 bytes) name=FUN_00415028

void FUN_00415028(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe670;
  FUN_0041be04();
  return;
}


==================================================================

### FUNC 00415038 (48 bytes) name=FUN_00415038

void FUN_00415038(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004fe670;
  FUN_0041be04();
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00415068 (4 bytes) name=FUN_00415068

void FUN_00415068(void)

{
  return;
}


==================================================================

### FUNC 0041506c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 00415070 (12 bytes) name=FUN_00415070

undefined ** FUN_00415070(void)

{
  return &PTR_PTR_00509630;
}


==================================================================

### FUNC 0041507c (12 bytes) name=FUN_0041507c

undefined ** FUN_0041507c(void)

{
  return &PTR_PTR_00509628;
}


==================================================================

### FUNC 00415088 (40 bytes) name=FUN_00415088

void FUN_00415088(undefined4 *param_1)

{
  (**(code **)(**(long **)(param_1 + 2) + 0x20))(*(long **)(param_1 + 2),*param_1);
  return;
}


==================================================================

### FUNC 004150b0 (68 bytes) name=FUN_004150b0

void FUN_004150b0(void *param_1)

{
  int *piVar1;
  int iVar2;
  char cVar3;
  bool bVar4;
  
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    iVar2 = *(int *)((long)param_1 + 0x10);
    *(int *)((long)param_1 + 0x10) = iVar2 + -1;
  }
  else {
    piVar1 = (int *)((long)param_1 + 0x10);
    do {
      iVar2 = *piVar1;
      cVar3 = '\x01';
      bVar4 = (bool)ExclusiveMonitorPass(piVar1,0x10);
      if (bVar4) {
        *piVar1 = iVar2 + -1;
        cVar3 = ExclusiveMonitorsStatus();
      }
    } while (cVar3 != '\0');
  }
  if (iVar2 < 1) {
    operator_delete(param_1);
    return;
  }
  return;
}


==================================================================

### FUNC 004150f4 (8 bytes) name=FUN_004150f4

undefined8 FUN_004150f4(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004150fc (12 bytes) name=FUN_004150fc

undefined8 FUN_004150fc(undefined8 *param_1,undefined8 param_2)

{
  *param_1 = param_2;
  return param_2;
}


==================================================================

### FUNC 00415108 (12 bytes) name=FUN_00415108

long FUN_00415108(long *param_1)

{
  return *param_1 + -0x18;
}


==================================================================

### FUNC 00415114 (8 bytes) name=FUN_00415114

undefined8 FUN_00415114(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 0041511c (16 bytes) name=FUN_0041511c

long FUN_0041511c(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18) * 4;
}


==================================================================

### FUNC 0041512c (56 bytes) name=FUN_0041512c

void FUN_0041512c(long *param_1,ulong param_2,undefined8 param_3)

{
  if (param_2 <= *(ulong *)(*param_1 + -0x18)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",param_3,param_2);
}


==================================================================

### FUNC 00415164 (52 bytes) name=FUN_00415164

void FUN_00415164(long *param_1,long param_2,ulong param_3,undefined8 param_4)

{
  if (param_3 <= (ulong)((0xffffffffffffffe - *(long *)(*param_1 + -0x18)) + param_2)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c(param_4);
}


==================================================================

### FUNC 00415198 (24 bytes) name=FUN_00415198

ulong FUN_00415198(long *param_1,long param_2,ulong param_3)

{
  ulong uVar1;
  
  uVar1 = *(long *)(*param_1 + -0x18) - param_2;
  if (param_3 < uVar1) {
    uVar1 = param_3;
  }
  return uVar1;
}


==================================================================

### FUNC 004151b0 (36 bytes) name=FUN_004151b0

bool FUN_004151b0(ulong *param_1,ulong param_2)

{
  bool bVar1;
  ulong uVar2;
  
  uVar2 = *param_1;
  bVar1 = true;
  if (uVar2 <= param_2) {
    bVar1 = uVar2 + *(long *)(uVar2 - 0x18) * 4 < param_2;
  }
  return bVar1;
}


==================================================================

### FUNC 004151d4 (28 bytes) name=FUN_004151d4

void FUN_004151d4(wchar_t *param_1,wchar_t *param_2,size_t param_3)

{
  if (param_3 != 1) {
    wmemcpy(param_1,param_2,param_3);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 004151f0 (28 bytes) name=FUN_004151f0

void FUN_004151f0(wchar_t *param_1,wchar_t *param_2,size_t param_3)

{
  if (param_3 != 1) {
    wmemmove(param_1,param_2,param_3);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 0041520c (32 bytes) name=FUN_0041520c

void FUN_0041520c(wchar_t *param_1,size_t param_2,wchar_t param_3)

{
  if (param_2 != 1) {
    wmemset(param_1,param_3,param_2);
    return;
  }
  *param_1 = param_3;
  return;
}


==================================================================

### FUNC 0041522c (36 bytes) name=FUN_0041522c

void FUN_0041522c(wchar_t *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  
  __n = param_3 - (long)param_2 >> 2;
  if (__n != 1) {
    wmemcpy(param_1,param_2,__n);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00415250 (36 bytes) name=FUN_00415250

void FUN_00415250(wchar_t *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  
  __n = param_3 - (long)param_2 >> 2;
  if (__n != 1) {
    wmemcpy(param_1,param_2,__n);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00415274 (36 bytes) name=FUN_00415274

void FUN_00415274(wchar_t *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  
  __n = param_3 - (long)param_2 >> 2;
  if (__n != 1) {
    wmemcpy(param_1,param_2,__n);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 00415298 (36 bytes) name=FUN_00415298

void FUN_00415298(wchar_t *param_1,wchar_t *param_2,long param_3)

{
  size_t __n;
  
  __n = param_3 - (long)param_2 >> 2;
  if (__n != 1) {
    wmemcpy(param_1,param_2,__n);
    return;
  }
  *param_1 = *param_2;
  return;
}


==================================================================

### FUNC 004152bc (40 bytes) name=FUN_004152bc

undefined4 FUN_004152bc(long param_1,long param_2)

{
  undefined4 uVar1;
  
  param_1 = param_1 - param_2;
  if (0x7fffffff < param_1) {
    return 0x7fffffff;
  }
  uVar1 = 0x80000000;
  if (-0x80000001 < param_1) {
    uVar1 = (undefined4)param_1;
  }
  return uVar1;
}


==================================================================

### FUNC 004152e4 (12 bytes) name=FUN_004152e4

undefined8 * FUN_004152e4(void)

{
  return &DAT_00547750;
}


==================================================================

### FUNC 004152f0 (16 bytes) name=FUN_004152f0

void FUN_004152f0(undefined8 *param_1)

{
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 00415300 (16 bytes) name=FUN_00415300

void FUN_00415300(undefined8 *param_1)

{
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 00415310 (24 bytes) name=FUN_00415310

void FUN_00415310(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  *param_2 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 00415328 (88 bytes) name=FUN_00415328

void FUN_00415328(long *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  lVar4 = *param_1;
  if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547750) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined8 *)(lVar4 + -0x18));
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00415380 (48 bytes) name=FUN_00415380

void FUN_00415380(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 004153b0 (8 bytes) name=FUN_004153b0

undefined8 FUN_004153b0(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004153b8 (16 bytes) name=FUN_004153b8

long FUN_004153b8(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18) * 4;
}


==================================================================

### FUNC 004153c8 (24 bytes) name=FUN_004153c8

long * FUN_004153c8(long *param_1,long *param_2)

{
  *param_1 = *param_2 + *(long *)(*param_2 + -0x18) * 4;
  return param_1;
}


==================================================================

### FUNC 004153e0 (16 bytes) name=FUN_004153e0

undefined8 * FUN_004153e0(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  return param_1;
}


==================================================================

### FUNC 004153f0 (8 bytes) name=FUN_004153f0

undefined8 FUN_004153f0(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004153f8 (16 bytes) name=FUN_004153f8

long FUN_004153f8(long *param_1)

{
  return *param_1 + *(long *)(*param_1 + -0x18) * 4;
}


==================================================================

### FUNC 00415408 (24 bytes) name=FUN_00415408

long * FUN_00415408(long *param_1,long *param_2)

{
  *param_1 = *param_2 + *(long *)(*param_2 + -0x18) * 4;
  return param_1;
}


==================================================================

### FUNC 00415420 (16 bytes) name=FUN_00415420

undefined8 * FUN_00415420(undefined8 *param_1,undefined8 *param_2)

{
  *param_1 = *param_2;
  return param_1;
}


==================================================================

### FUNC 00415430 (12 bytes) name=FUN_00415430

undefined8 FUN_00415430(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x18);
}


==================================================================

### FUNC 0041543c (12 bytes) name=FUN_0041543c

undefined8 FUN_0041543c(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x18);
}


==================================================================

### FUNC 00415448 (8 bytes) name=FUN_00415448

undefined8 FUN_00415448(void)

{
  return 0xffffffffffffffe;
}


==================================================================

### FUNC 00415450 (12 bytes) name=FUN_00415450

undefined8 FUN_00415450(long *param_1)

{
  return *(undefined8 *)(*param_1 + -0x10);
}


==================================================================

### FUNC 0041545c (20 bytes) name=FUN_0041545c

bool FUN_0041545c(long *param_1)

{
  return *(long *)(*param_1 + -0x18) == 0;
}


==================================================================

### FUNC 00415470 (12 bytes) name=FUN_00415470

long FUN_00415470(long *param_1,long param_2)

{
  return *param_1 + param_2 * 4;
}


==================================================================

### FUNC 0041547c (48 bytes) name=FUN_0041547c

long FUN_0041547c(long *param_1,ulong param_2)

{
  if (param_2 < *(ulong *)(*param_1 + -0x18)) {
    return *param_1 + param_2 * 4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)");
}


==================================================================

### FUNC 004154ac (8 bytes) name=FUN_004154ac

undefined8 FUN_004154ac(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004154b4 (20 bytes) name=FUN_004154b4

long FUN_004154b4(long *param_1)

{
  return *param_1 + (*(long *)(*param_1 + -0x18) + -1) * 4;
}


==================================================================

### FUNC 004154c8 (48 bytes) name=FUN_004154c8

void FUN_004154c8(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 004154f8 (140 bytes) name=FUN_004154f8

size_t FUN_004154f8(long *param_1,wchar_t *param_2,ulong param_3,ulong param_4)

{
  size_t __n;
  ulong uVar1;
  long lVar2;
  
  lVar2 = *param_1;
  uVar1 = *(ulong *)(lVar2 + -0x18);
  if (uVar1 < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::copy",
                 param_4,uVar1);
  }
  __n = uVar1 - param_4;
  if (param_3 < uVar1 - param_4) {
    __n = param_3;
  }
  if (__n != 0) {
    if (__n == 1) {
      *param_2 = *(wchar_t *)(lVar2 + param_4 * 4);
      return 1;
    }
    wmemcpy(param_2,(wchar_t *)(lVar2 + param_4 * 4),__n);
  }
  return __n;
}


==================================================================

### FUNC 00415584 (48 bytes) name=FUN_00415584

void FUN_00415584(long *param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (*(int *)(lVar2 + -8) < 0) {
    *(undefined4 *)(lVar2 + -8) = 0;
  }
  lVar1 = *param_2;
  if (*(int *)(lVar1 + -8) < 0) {
    *(undefined4 *)(lVar1 + -8) = 0;
  }
  *param_1 = lVar1;
  *param_2 = lVar2;
  return;
}


==================================================================

### FUNC 004155b4 (8 bytes) name=FUN_004155b4

undefined8 FUN_004155b4(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004155bc (8 bytes) name=FUN_004155bc

undefined8 FUN_004155bc(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 004155c4 (8 bytes) name=FUN_004155c4

undefined8 FUN_004155c4(undefined8 param_1)

{
  return param_1;
}


==================================================================

### FUNC 004155cc (212 bytes) name=FUN_004155cc

ulong FUN_004155cc(long *param_1,wchar_t *param_2,ulong param_3,ulong param_4)

{
  bool bVar1;
  int iVar2;
  wchar_t *__s1;
  ulong uVar3;
  ulong uVar4;
  
  uVar4 = *(ulong *)(*param_1 + -0x18);
  if (param_4 == 0) {
    if (uVar4 < param_3) {
      param_3 = 0xffffffffffffffff;
    }
    return param_3;
  }
  if ((param_4 <= uVar4) && (param_3 <= uVar4 - param_4)) {
    __s1 = (wchar_t *)(*param_1 + (param_3 + 1) * 4);
    uVar3 = param_3 + 1;
    do {
      if ((__s1[-1] == *param_2) && (iVar2 = wmemcmp(__s1,param_2 + 1,param_4 - 1), iVar2 == 0)) {
        return uVar3 - 1;
      }
      __s1 = __s1 + 1;
      bVar1 = uVar3 <= uVar4 - param_4;
      uVar3 = uVar3 + 1;
    } while (bVar1);
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004156a0 (12 bytes) name=FUN_004156a0

void FUN_004156a0(void)

{
  FUN_004155cc();
  return;
}


==================================================================

### FUNC 004156ac (60 bytes) name=FUN_004156ac

void FUN_004156ac(undefined8 param_1,wchar_t *param_2,undefined8 param_3)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  FUN_004155cc(param_1,param_2,param_3,sVar1);
  return;
}


==================================================================

### FUNC 004156e8 (80 bytes) name=FUN_004156e8

long FUN_004156e8(long *param_1,wchar_t param_2,ulong param_3)

{
  wchar_t *pwVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if ((param_3 < *(ulong *)(lVar2 + -0x18)) &&
     (pwVar1 = wmemchr((wchar_t *)(lVar2 + param_3 * 4),param_2,*(ulong *)(lVar2 + -0x18) - param_3)
     , pwVar1 != (wchar_t *)0x0)) {
    return (long)pwVar1 - lVar2 >> 2;
  }
  return -1;
}


==================================================================

### FUNC 00415738 (136 bytes) name=FUN_00415738

ulong FUN_00415738(long *param_1,undefined8 *param_2,ulong param_3)

{
  bool bVar1;
  int iVar2;
  ulong uVar3;
  wchar_t *__s1;
  ulong __n;
  wchar_t *__s2;
  
  __s2 = (wchar_t *)*param_2;
  uVar3 = *(ulong *)(*param_1 + -0x18);
  __n = *(ulong *)(__s2 + -6);
  if (__n <= uVar3) {
    uVar3 = uVar3 - __n;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    __s1 = (wchar_t *)(*param_1 + param_3 * 4);
    do {
      iVar2 = wmemcmp(__s1,__s2,__n);
      if (iVar2 == 0) {
        return param_3;
      }
      bVar1 = param_3 != 0;
      param_3 = param_3 - 1;
      __s1 = __s1 + -1;
    } while (bVar1);
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004157c0 (136 bytes) name=FUN_004157c0

ulong FUN_004157c0(long *param_1,wchar_t *param_2,ulong param_3,ulong param_4)

{
  bool bVar1;
  int iVar2;
  ulong uVar3;
  wchar_t *__s1;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (param_4 <= uVar3) {
    uVar3 = uVar3 - param_4;
    if (param_3 < uVar3) {
      uVar3 = param_3;
    }
    __s1 = (wchar_t *)(*param_1 + uVar3 * 4);
    do {
      iVar2 = wmemcmp(__s1,param_2,param_4);
      if (iVar2 == 0) {
        return uVar3;
      }
      bVar1 = uVar3 != 0;
      uVar3 = uVar3 - 1;
      __s1 = __s1 + -1;
    } while (bVar1);
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415848 (156 bytes) name=FUN_00415848

ulong FUN_00415848(long *param_1,wchar_t *param_2,ulong param_3)

{
  bool bVar1;
  int iVar2;
  size_t __n;
  ulong uVar3;
  wchar_t *__s1;
  
  __n = wcslen(param_2);
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (__n <= uVar3) {
    uVar3 = uVar3 - __n;
    if (param_3 < uVar3) {
      uVar3 = param_3;
    }
    __s1 = (wchar_t *)(*param_1 + uVar3 * 4);
    do {
      iVar2 = wmemcmp(__s1,param_2,__n);
      if (iVar2 == 0) {
        return uVar3;
      }
      bVar1 = uVar3 != 0;
      uVar3 = uVar3 - 1;
      __s1 = __s1 + -1;
    } while (bVar1);
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004158e4 (68 bytes) name=FUN_004158e4

void FUN_004158e4(long *param_1,int param_2,ulong param_3)

{
  ulong uVar1;
  long lVar2;
  
  lVar2 = *(long *)(*param_1 + -0x18);
  if (lVar2 != 0) {
    uVar1 = lVar2 - 1;
    if (uVar1 < param_3) {
      param_3 = uVar1;
    }
    do {
      if (param_3 == 0xffffffffffffffff) {
        return;
      }
      lVar2 = param_3 * 4;
      param_3 = param_3 - 1;
    } while (*(int *)(*param_1 + lVar2) != param_2);
  }
  return;
}


==================================================================

### FUNC 00415928 (152 bytes) name=FUN_00415928

ulong FUN_00415928(long *param_1,wchar_t *param_2,ulong param_3,size_t param_4)

{
  long lVar1;
  wchar_t *pwVar2;
  long lVar3;
  
  if ((param_4 != 0) && (lVar1 = *param_1, param_3 < *(ulong *)(lVar1 + -0x18))) {
    lVar3 = param_3 << 2;
    do {
      pwVar2 = (wchar_t *)(lVar1 + lVar3);
      lVar3 = lVar3 + 4;
      pwVar2 = wmemchr(param_2,*pwVar2,param_4);
      if (pwVar2 != (wchar_t *)0x0) {
        return param_3;
      }
      lVar1 = *param_1;
      param_3 = param_3 + 1;
    } while (param_3 < *(ulong *)(lVar1 + -0x18));
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 004159c0 (12 bytes) name=FUN_004159c0

void FUN_004159c0(void)

{
  FUN_00415928();
  return;
}


==================================================================

### FUNC 004159cc (60 bytes) name=FUN_004159cc

void FUN_004159cc(undefined8 param_1,wchar_t *param_2,undefined8 param_3)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  FUN_00415928(param_1,param_2,param_3,sVar1);
  return;
}


==================================================================

### FUNC 00415a08 (80 bytes) name=FUN_00415a08

long FUN_00415a08(long *param_1,wchar_t param_2,ulong param_3)

{
  wchar_t *pwVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if ((param_3 < *(ulong *)(lVar2 + -0x18)) &&
     (pwVar1 = wmemchr((wchar_t *)(lVar2 + param_3 * 4),param_2,*(ulong *)(lVar2 + -0x18) - param_3)
     , pwVar1 != (wchar_t *)0x0)) {
    return (long)pwVar1 - lVar2 >> 2;
  }
  return -1;
}


==================================================================

### FUNC 00415a58 (156 bytes) name=FUN_00415a58

ulong FUN_00415a58(long *param_1,undefined8 *param_2,ulong param_3)

{
  wchar_t *pwVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  wchar_t *__s;
  size_t __n;
  
  __s = (wchar_t *)*param_2;
  lVar2 = *param_1;
  __n = *(size_t *)(__s + -6);
  if ((__n != 0) && (*(long *)(lVar2 + -0x18) != 0)) {
    uVar3 = *(long *)(lVar2 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar1 = (wchar_t *)(lVar2 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar1 = wmemchr(__s,*pwVar1,__n);
      if (pwVar1 != (wchar_t *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
      if (param_3 == 0xffffffffffffffff) break;
      lVar2 = *param_1;
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415af4 (136 bytes) name=FUN_00415af4

ulong FUN_00415af4(long *param_1,wchar_t *param_2,ulong param_3,size_t param_4)

{
  wchar_t *pwVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  
  lVar2 = *param_1;
  if ((param_4 == 0) || (*(long *)(lVar2 + -0x18) == 0)) {
LAB_00415b18:
    param_3 = 0xffffffffffffffff;
  }
  else {
    uVar3 = *(long *)(lVar2 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar1 = (wchar_t *)(lVar2 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar1 = wmemchr(param_2,*pwVar1,param_4);
      if (pwVar1 != (wchar_t *)0x0) break;
      if (param_3 == 0) goto LAB_00415b18;
      lVar2 = *param_1;
      param_3 = param_3 - 1;
    }
  }
  return param_3;
}


==================================================================

### FUNC 00415b7c (172 bytes) name=FUN_00415b7c

ulong FUN_00415b7c(long *param_1,wchar_t *param_2,ulong param_3)

{
  size_t __n;
  long lVar1;
  wchar_t *pwVar2;
  ulong uVar3;
  long lVar4;
  
  __n = wcslen(param_2);
  lVar1 = *param_1;
  if ((__n != 0) && (*(long *)(lVar1 + -0x18) != 0)) {
    uVar3 = *(long *)(lVar1 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar2 = (wchar_t *)(lVar1 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar2 = wmemchr(param_2,*pwVar2,__n);
      if (pwVar2 != (wchar_t *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
      if (param_3 == 0xffffffffffffffff) break;
      lVar1 = *param_1;
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415c28 (68 bytes) name=FUN_00415c28

void FUN_00415c28(long *param_1,int param_2,ulong param_3)

{
  ulong uVar1;
  long lVar2;
  
  lVar2 = *(long *)(*param_1 + -0x18);
  if (lVar2 != 0) {
    uVar1 = lVar2 - 1;
    if (uVar1 < param_3) {
      param_3 = uVar1;
    }
    do {
      if (param_3 == 0xffffffffffffffff) {
        return;
      }
      lVar2 = param_3 * 4;
      param_3 = param_3 - 1;
    } while (param_2 != *(int *)(*param_1 + lVar2));
  }
  return;
}


==================================================================

### FUNC 00415c6c (152 bytes) name=FUN_00415c6c

ulong FUN_00415c6c(long *param_1,undefined8 *param_2,ulong param_3)

{
  long lVar1;
  wchar_t *pwVar2;
  long lVar3;
  wchar_t *__s;
  size_t __n;
  
  lVar1 = *param_1;
  __s = (wchar_t *)*param_2;
  lVar3 = param_3 << 2;
  __n = *(size_t *)(__s + -6);
  if (param_3 < *(ulong *)(lVar1 + -0x18)) {
    do {
      pwVar2 = (wchar_t *)(lVar1 + lVar3);
      lVar3 = lVar3 + 4;
      pwVar2 = wmemchr(__s,*pwVar2,__n);
      if (pwVar2 == (wchar_t *)0x0) {
        return param_3;
      }
      lVar1 = *param_1;
      param_3 = param_3 + 1;
    } while (param_3 < *(ulong *)(lVar1 + -0x18));
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415d04 (152 bytes) name=FUN_00415d04

ulong FUN_00415d04(long *param_1,wchar_t *param_2,ulong param_3,size_t param_4)

{
  long lVar1;
  wchar_t *pwVar2;
  long lVar3;
  
  lVar1 = *param_1;
  lVar3 = param_3 << 2;
  if (param_3 < *(ulong *)(lVar1 + -0x18)) {
    do {
      pwVar2 = (wchar_t *)(lVar1 + lVar3);
      lVar3 = lVar3 + 4;
      pwVar2 = wmemchr(param_2,*pwVar2,param_4);
      if (pwVar2 == (wchar_t *)0x0) {
        return param_3;
      }
      lVar1 = *param_1;
      param_3 = param_3 + 1;
    } while (param_3 < *(ulong *)(lVar1 + -0x18));
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415d9c (160 bytes) name=FUN_00415d9c

ulong FUN_00415d9c(long *param_1,wchar_t *param_2,ulong param_3)

{
  size_t __n;
  long lVar1;
  wchar_t *pwVar2;
  long lVar3;
  
  lVar3 = param_3 << 2;
  __n = wcslen(param_2);
  lVar1 = *param_1;
  if (param_3 < *(ulong *)(lVar1 + -0x18)) {
    do {
      pwVar2 = (wchar_t *)(lVar1 + lVar3);
      lVar3 = lVar3 + 4;
      pwVar2 = wmemchr(param_2,*pwVar2,__n);
      if (pwVar2 == (wchar_t *)0x0) {
        return param_3;
      }
      lVar1 = *param_1;
      param_3 = param_3 + 1;
    } while (param_3 < *(ulong *)(lVar1 + -0x18));
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415e3c (72 bytes) name=FUN_00415e3c

ulong FUN_00415e3c(long *param_1,int param_2,ulong param_3)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  if (param_3 < *(ulong *)(lVar2 + -0x18)) {
    lVar1 = param_3 * 4;
    while( true ) {
      if (*(int *)(lVar2 + lVar1) != param_2) {
        return param_3;
      }
      param_3 = param_3 + 1;
      if (*(ulong *)(lVar2 + -0x18) <= param_3) break;
      param_2 = *(int *)(lVar2 + param_3 * 4);
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415e84 (152 bytes) name=FUN_00415e84

ulong FUN_00415e84(long *param_1,undefined8 *param_2,ulong param_3)

{
  wchar_t *pwVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  wchar_t *__s;
  size_t __n;
  
  __s = (wchar_t *)*param_2;
  lVar2 = *param_1;
  __n = *(size_t *)(__s + -6);
  if (*(long *)(lVar2 + -0x18) != 0) {
    uVar3 = *(long *)(lVar2 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar1 = (wchar_t *)(lVar2 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar1 = wmemchr(__s,*pwVar1,__n);
      if (pwVar1 == (wchar_t *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
      if (param_3 == 0xffffffffffffffff) break;
      lVar2 = *param_1;
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00415f1c (132 bytes) name=FUN_00415f1c

ulong FUN_00415f1c(long *param_1,wchar_t *param_2,ulong param_3,size_t param_4)

{
  wchar_t *pwVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  
  lVar2 = *param_1;
  if (*(long *)(lVar2 + -0x18) == 0) {
LAB_00415f3c:
    param_3 = 0xffffffffffffffff;
  }
  else {
    uVar3 = *(long *)(lVar2 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar1 = (wchar_t *)(lVar2 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar1 = wmemchr(param_2,*pwVar1,param_4);
      if (pwVar1 == (wchar_t *)0x0) break;
      if (param_3 == 0) goto LAB_00415f3c;
      lVar2 = *param_1;
      param_3 = param_3 - 1;
    }
  }
  return param_3;
}


==================================================================

### FUNC 00415fa0 (168 bytes) name=FUN_00415fa0

ulong FUN_00415fa0(long *param_1,wchar_t *param_2,ulong param_3)

{
  size_t __n;
  long lVar1;
  wchar_t *pwVar2;
  ulong uVar3;
  long lVar4;
  
  __n = wcslen(param_2);
  lVar1 = *param_1;
  if (*(long *)(lVar1 + -0x18) != 0) {
    uVar3 = *(long *)(lVar1 + -0x18) - 1;
    if (uVar3 < param_3) {
      param_3 = uVar3;
    }
    lVar4 = param_3 << 2;
    while( true ) {
      pwVar2 = (wchar_t *)(lVar1 + lVar4);
      lVar4 = lVar4 + -4;
      pwVar2 = wmemchr(param_2,*pwVar2,__n);
      if (pwVar2 == (wchar_t *)0x0) {
        return param_3;
      }
      param_3 = param_3 - 1;
      if (param_3 == 0xffffffffffffffff) break;
      lVar1 = *param_1;
    }
  }
  return 0xffffffffffffffff;
}


==================================================================

### FUNC 00416048 (72 bytes) name=FUN_00416048

ulong FUN_00416048(long *param_1,int param_2,ulong param_3)

{
  ulong uVar1;
  bool bVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = 0xffffffffffffffff;
  lVar4 = *(long *)(*param_1 + -0x18);
  if (lVar4 != 0) {
    uVar1 = lVar4 - 1;
    uVar3 = param_3;
    if (uVar1 < param_3) {
      uVar3 = uVar1;
    }
    while (*(int *)(*param_1 + uVar3 * 4) == param_2) {
      bVar2 = uVar3 == 0;
      uVar3 = uVar3 - 1;
      if (bVar2) {
        return 0xffffffffffffffff;
      }
    }
  }
  return uVar3;
}


==================================================================

### FUNC 00416090 (104 bytes) name=FUN_00416090

int FUN_00416090(undefined8 *param_1,undefined8 *param_2)

{
  size_t __n;
  int iVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  
  uVar4 = *(ulong *)((wchar_t *)*param_2 + -6);
  uVar2 = *(ulong *)((wchar_t *)*param_1 + -6);
  __n = uVar4;
  if (uVar2 < uVar4) {
    __n = uVar2;
  }
  iVar1 = wmemcmp((wchar_t *)*param_1,(wchar_t *)*param_2,__n);
  if (iVar1 == 0) {
    iVar1 = 0x7fffffff;
    lVar3 = uVar2 - uVar4;
    if (lVar3 < 0x80000000) {
      iVar1 = -0x80000000;
      if (-0x80000001 < lVar3) {
        iVar1 = (int)lVar3;
      }
      return iVar1;
    }
  }
  return iVar1;
}


==================================================================

### FUNC 004160f8 (156 bytes) name=FUN_004160f8

int FUN_004160f8(long *param_1,ulong param_2,ulong param_3,undefined8 *param_4)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar3);
  }
  uVar1 = uVar3 - param_2;
  if (param_3 < uVar3 - param_2) {
    uVar1 = param_3;
  }
  uVar3 = *(ulong *)((wchar_t *)*param_4 + -6);
  __n = uVar1;
  if (uVar3 < uVar1) {
    __n = uVar3;
  }
  iVar2 = wmemcmp((wchar_t *)(*param_1 + param_2 * 4),(wchar_t *)*param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar4 = uVar1 - uVar3;
    if (lVar4 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar2 = (int)lVar4;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00416194 (200 bytes) name=FUN_00416194

int FUN_00416194(long *param_1,ulong param_2,ulong param_3,long *param_4,ulong param_5,ulong param_6
                )

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  ulong uVar4;
  long lVar5;
  
  uVar4 = *(ulong *)(*param_1 + -0x18);
  if (uVar4 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar4);
  }
  uVar3 = *(ulong *)(*param_4 + -0x18);
  if (param_5 <= uVar3) {
    uVar3 = uVar3 - param_5;
    uVar1 = uVar4 - param_2;
    if (param_3 < uVar4 - param_2) {
      uVar1 = param_3;
    }
    if (param_6 < uVar3) {
      uVar3 = param_6;
    }
    __n = uVar1;
    if (uVar3 < uVar1) {
      __n = uVar3;
    }
    iVar2 = wmemcmp((wchar_t *)(*param_1 + param_2 * 4),(wchar_t *)(*param_4 + param_5 * 4),__n);
    if (iVar2 == 0) {
      iVar2 = 0x7fffffff;
      lVar5 = uVar1 - uVar3;
      if (lVar5 < 0x80000000) {
        iVar2 = -0x80000000;
        if (-0x80000001 < lVar5) {
          iVar2 = (int)lVar5;
        }
        return iVar2;
      }
    }
    return iVar2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
               param_5);
}


==================================================================

### FUNC 0041625c (128 bytes) name=FUN_0041625c

int FUN_0041625c(long *param_1,wchar_t *param_2)

{
  size_t __n;
  int iVar1;
  size_t sVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  sVar2 = wcslen(param_2);
  __n = sVar2;
  if (uVar3 < sVar2) {
    __n = uVar3;
  }
  iVar1 = wmemcmp((wchar_t *)*param_1,param_2,__n);
  if (iVar1 == 0) {
    iVar1 = 0x7fffffff;
    lVar4 = uVar3 - sVar2;
    if (lVar4 < 0x80000000) {
      iVar1 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar1 = (int)lVar4;
      }
      return iVar1;
    }
  }
  return iVar1;
}


==================================================================

### FUNC 004162dc (188 bytes) name=FUN_004162dc

int FUN_004162dc(long *param_1,ulong param_2,ulong param_3,wchar_t *param_4)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  size_t sVar3;
  ulong uVar4;
  long lVar5;
  
  uVar4 = *(ulong *)(*param_1 + -0x18);
  if (uVar4 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar4);
  }
  uVar1 = uVar4 - param_2;
  if (param_3 < uVar4 - param_2) {
    uVar1 = param_3;
  }
  sVar3 = wcslen(param_4);
  __n = sVar3;
  if (uVar1 < sVar3) {
    __n = uVar1;
  }
  iVar2 = wmemcmp((wchar_t *)(*param_1 + param_2 * 4),param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar5 = uVar1 - sVar3;
    if (lVar5 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar5) {
        iVar2 = (int)lVar5;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00416398 (156 bytes) name=FUN_00416398

int FUN_00416398(long *param_1,ulong param_2,ulong param_3,wchar_t *param_4,ulong param_5)

{
  ulong uVar1;
  size_t __n;
  int iVar2;
  ulong uVar3;
  long lVar4;
  
  uVar3 = *(ulong *)(*param_1 + -0x18);
  if (uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::compare",
                 param_2,uVar3);
  }
  uVar1 = uVar3 - param_2;
  if (param_3 < uVar3 - param_2) {
    uVar1 = param_3;
  }
  __n = uVar1;
  if (param_5 < uVar1) {
    __n = param_5;
  }
  iVar2 = wmemcmp((wchar_t *)(*param_1 + param_2 * 4),param_4,__n);
  if (iVar2 == 0) {
    iVar2 = 0x7fffffff;
    lVar4 = uVar1 - param_5;
    if (lVar4 < 0x80000000) {
      iVar2 = -0x80000000;
      if (-0x80000001 < lVar4) {
        iVar2 = (int)lVar4;
      }
      return iVar2;
    }
  }
  return iVar2;
}


==================================================================

### FUNC 00416434 (8 bytes) name=FUN_00416434

void FUN_00416434(undefined8 *param_1,undefined8 param_2)

{
  *param_1 = param_2;
  return;
}


==================================================================

### FUNC 0041643c (12 bytes) name=FUN_0041643c

undefined8 * FUN_0041643c(void)

{
  return &DAT_00547750;
}


==================================================================

### FUNC 00416448 (12 bytes) name=FUN_00416448

uint FUN_00416448(long param_1)

{
  return *(uint *)(param_1 + 0x10) >> 0x1f;
}


==================================================================

### FUNC 00416454 (16 bytes) name=FUN_00416454

bool FUN_00416454(long param_1)

{
  return 0 < *(int *)(param_1 + 0x10);
}


==================================================================

### FUNC 00416464 (12 bytes) name=FUN_00416464

void FUN_00416464(long param_1)

{
  *(undefined4 *)(param_1 + 0x10) = 0xffffffff;
  return;
}


==================================================================

### FUNC 00416470 (8 bytes) name=FUN_00416470

void FUN_00416470(long param_1)

{
  *(undefined4 *)(param_1 + 0x10) = 0;
  return;
}


==================================================================

### FUNC 00416478 (40 bytes) name=FUN_00416478

void FUN_00416478(long *param_1,long param_2)

{
  if (param_1 == &DAT_00547750) {
    return;
  }
  *(undefined4 *)(param_1 + 2) = 0;
  *param_1 = param_2;
  *(undefined4 *)((long)param_1 + param_2 * 4 + 0x18) = 0;
  return;
}


==================================================================

### FUNC 004164a0 (8 bytes) name=FUN_004164a0

long FUN_004164a0(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 004164a8 (152 bytes) name=FUN_004164a8

void FUN_004164a8(ulong param_1,ulong param_2)

{
  long lVar1;
  void *pvVar2;
  ulong uVar3;
  
  if (0xffffffffffffffe < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_S_create");
  }
  if (param_2 < param_1) {
    if (param_1 < param_2 << 1) {
      param_1 = param_2 << 1;
    }
    lVar1 = (param_1 + 1) * 4;
    uVar3 = lVar1 + 0x38;
    if ((uVar3 < 0x1001) || (param_1 <= param_2)) {
      uVar3 = lVar1 + 0x18;
      goto LAB_00416514;
    }
    param_1 = param_1 + (0x1000 - (uVar3 & 0xfff) >> 2);
    if (0xffffffffffffffe < param_1) {
      param_1 = 0xffffffffffffffe;
    }
  }
  uVar3 = param_1 * 4 + 0x1c;
LAB_00416514:
  pvVar2 = operator_new(uVar3);
  *(ulong *)((long)pvVar2 + 8) = param_1;
  *(undefined4 *)((long)pvVar2 + 0x10) = 0;
  return;
}


==================================================================

### FUNC 00416540 (508 bytes) name=FUN_00416540

void FUN_00416540(long *param_1,size_t param_2,long param_3,long param_4)

{
  long lVar1;
  ulong uVar2;
  char cVar3;
  bool bVar4;
  undefined8 *puVar5;
  wchar_t wVar6;
  wchar_t *__s2;
  wchar_t *pwVar7;
  undefined8 *puVar8;
  size_t __n;
  undefined1 auStack_8 [8];
  
  puVar8 = (undefined8 *)*param_1;
  uVar2 = (param_4 - param_3) + puVar8[-3];
  __n = (puVar8[-3] - param_2) - param_3;
  if (((ulong)puVar8[-2] < uVar2) || (0 < *(int *)(puVar8 + -1))) {
    puVar5 = (undefined8 *)FUN_004164a8(uVar2,puVar8[-2],auStack_8);
    if (param_2 == 0) {
      __s2 = (wchar_t *)*param_1;
    }
    else {
      __s2 = (wchar_t *)*param_1;
      if (param_2 == 1) {
        *(wchar_t *)(puVar5 + 3) = *__s2;
      }
      else {
        wmemcpy((wchar_t *)(puVar5 + 3),__s2,param_2);
        __s2 = (wchar_t *)*param_1;
      }
    }
    if (__n != 0) {
      lVar1 = (param_4 + param_2) * 4 + 0x18;
      if (__n == 1) {
        *(wchar_t *)((long)puVar5 + lVar1) = __s2[param_3 + param_2];
      }
      else {
        wmemcpy((wchar_t *)((long)puVar5 + lVar1),__s2 + param_3 + param_2,__n);
        __s2 = (wchar_t *)*param_1;
      }
    }
    puVar8 = puVar5 + 3;
    if (__s2 + -6 != (wchar_t *)&DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        wVar6 = __s2[-2];
        __s2[-2] = wVar6 + L'\xffffffff';
      }
      else {
        pwVar7 = __s2 + -2;
        do {
          wVar6 = *pwVar7;
          cVar3 = '\x01';
          bVar4 = (bool)ExclusiveMonitorPass(pwVar7,0x10);
          if (bVar4) {
            *pwVar7 = wVar6 + L'\xffffffff';
            cVar3 = ExclusiveMonitorsStatus();
          }
        } while (cVar3 != '\0');
      }
      if (wVar6 < L'\x01') {
        operator_delete(__s2 + -6);
      }
    }
    *param_1 = (long)puVar8;
    if (puVar5 == &DAT_00547750) {
      return;
    }
  }
  else {
    if ((param_3 != param_4) && (__n != 0)) {
      if (__n == 1) {
        *(undefined4 *)((long)puVar8 + (param_4 + param_2) * 4) =
             *(undefined4 *)((long)puVar8 + (param_3 + param_2) * 4);
      }
      else {
        wmemmove((wchar_t *)((long)puVar8 + (param_4 + param_2) * 4),
                 (wchar_t *)((long)puVar8 + (param_3 + param_2) * 4),__n);
        puVar8 = (undefined8 *)*param_1;
      }
    }
    if (puVar8 == (undefined8 *)&DAT_00547768) {
      return;
    }
  }
  puVar8[-3] = uVar2;
  *(undefined4 *)(puVar8 + -1) = 0;
  *(undefined4 *)((long)puVar8 + uVar2 * 4) = 0;
  return;
}


==================================================================

### FUNC 0041673c (92 bytes) name=FUN_0041673c

void FUN_0041673c(undefined8 *param_1)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if (puVar1 != &DAT_00547768) {
    if (0 < *(int *)(puVar1 + -8)) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return;
}


==================================================================

### FUNC 00416798 (92 bytes) name=FUN_00416798

void FUN_00416798(undefined8 *param_1)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return;
}


==================================================================

### FUNC 004167f4 (20 bytes) name=FUN_004167f4

void FUN_004167f4(long *param_1)

{
  FUN_00416540(param_1,0,*(undefined8 *)(*param_1 + -0x18),0);
  return;
}


==================================================================

### FUNC 00416808 (96 bytes) name=FUN_00416808

long * FUN_00416808(long *param_1,ulong param_2,ulong param_3)

{
  ulong uVar1;
  
  if (param_2 <= *(ulong *)(*param_1 + -0x18)) {
    uVar1 = *(ulong *)(*param_1 + -0x18) - param_2;
    if (param_3 < uVar1) {
      uVar1 = param_3;
    }
    FUN_00416540(param_1,param_2,uVar1,0);
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase",
               param_2);
}


==================================================================

### FUNC 00416868 (68 bytes) name=FUN_00416868

long FUN_00416868(long *param_1,long param_2)

{
  long lVar1;
  long lVar2;
  
  lVar2 = *param_1;
  FUN_00416540(param_1,param_2 - lVar2 >> 2,1,0);
  lVar1 = *param_1;
  *(undefined4 *)(lVar1 + -8) = 0xffffffff;
  return lVar1 + (param_2 - lVar2);
}


==================================================================

### FUNC 004168ac (96 bytes) name=FUN_004168ac

long FUN_004168ac(long *param_1,long param_2,long param_3)

{
  long lVar1;
  long lVar2;
  
  lVar1 = param_3 - param_2 >> 2;
  if (lVar1 == 0) {
    return param_2;
  }
  lVar2 = *param_1;
  FUN_00416540(param_1,param_2 - lVar2 >> 2,lVar1,0);
  lVar1 = *param_1;
  *(undefined4 *)(lVar1 + -8) = 0xffffffff;
  return lVar1 + (param_2 - lVar2);
}


==================================================================

### FUNC 0041690c (156 bytes) name=FUN_0041690c

long * FUN_0041690c(long *param_1,long param_2,long param_3,ulong param_4,wchar_t param_5)

{
  if ((ulong)((0xffffffffffffffe - *(long *)(*param_1 + -0x18)) + param_3) < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux");
  }
  FUN_00416540();
  if (param_4 != 0) {
    if (param_4 == 1) {
      *(wchar_t *)(*param_1 + param_2 * 4) = param_5;
      return param_1;
    }
    wmemset((wchar_t *)(*param_1 + param_2 * 4),param_5,param_4);
  }
  return param_1;
}


==================================================================

### FUNC 004169a8 (124 bytes) name=FUN_004169a8

long * FUN_004169a8(long *param_1,long param_2,undefined8 param_3,wchar_t *param_4,size_t param_5)

{
  FUN_00416540();
  if (param_5 != 0) {
    if (param_5 == 1) {
      *(wchar_t *)(*param_1 + param_2 * 4) = *param_4;
      return param_1;
    }
    wmemcpy((wchar_t *)(*param_1 + param_2 * 4),param_4,param_5);
  }
  return param_1;
}


==================================================================

### FUNC 00416a24 (288 bytes) name=FUN_00416a24

undefined8 * FUN_00416a24(undefined8 *param_1,wchar_t *param_2,size_t param_3)

{
  wchar_t *__s1;
  ulong uVar1;
  wchar_t *pwVar2;
  
  __s1 = (wchar_t *)*param_1;
  pwVar2 = __s1 + -6;
  if (0xffffffffffffffe < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::assign");
  }
  if (((param_2 < __s1) || (__s1 + *(long *)(__s1 + -6) < param_2)) || (L'\0' < __s1[-2])) {
    FUN_00416540(param_1,0,*(long *)(__s1 + -6),param_3);
    if (param_3 == 0) {
      return param_1;
    }
    if (param_3 != 1) {
      wmemcpy((wchar_t *)*param_1,param_2,param_3);
      return param_1;
    }
    *(wchar_t *)*param_1 = *param_2;
    return param_1;
  }
  uVar1 = (long)param_2 - (long)__s1 >> 2;
  if (uVar1 < param_3) {
    if (uVar1 == 0) goto LAB_00416ad4;
    if (param_3 != 1) {
      wmemmove(__s1,param_2,param_3);
      __s1 = (wchar_t *)*param_1;
      pwVar2 = __s1 + -6;
      goto LAB_00416ad4;
    }
  }
  else if (param_3 != 1) {
    wmemcpy(__s1,param_2,param_3);
    __s1 = (wchar_t *)*param_1;
    pwVar2 = __s1 + -6;
    goto LAB_00416ad4;
  }
  *__s1 = *param_2;
LAB_00416ad4:
  if (pwVar2 != (wchar_t *)&DAT_00547750) {
    __s1[-2] = L'\0';
    *(size_t *)(__s1 + -6) = param_3;
    __s1[param_3] = L'\0';
  }
  return param_1;
}


==================================================================

### FUNC 00416b44 (36 bytes) name=FUN_00416b44

undefined8 FUN_00416b44(undefined8 param_1)

{
  FUN_00416a24();
  return param_1;
}


==================================================================

### FUNC 00416b68 (76 bytes) name=FUN_00416b68

void FUN_00416b68(undefined8 param_1,long *param_2,ulong param_3,ulong param_4)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_2 + -0x18);
  if (param_3 <= uVar2) {
    uVar1 = uVar2 - param_3;
    if (param_4 < uVar2 - param_3) {
      uVar1 = param_4;
    }
    FUN_00416a24(param_1,*param_2 + param_3 * 4,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::assign",
               param_3,uVar2);
}


==================================================================

### FUNC 00416bb4 (52 bytes) name=FUN_00416bb4

void FUN_00416bb4(undefined8 param_1,wchar_t *param_2)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  FUN_00416a24(param_1,param_2,sVar1);
  return;
}


==================================================================

### FUNC 00416be8 (52 bytes) name=FUN_00416be8

void FUN_00416be8(undefined8 param_1,wchar_t *param_2)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  FUN_00416a24(param_1,param_2,sVar1);
  return;
}


==================================================================

### FUNC 00416c1c (4 bytes) name=thunk_FUN_00416a24

undefined8 * thunk_FUN_00416a24(undefined8 *param_1,wchar_t *param_2,size_t param_3)

{
  wchar_t *__s1;
  ulong uVar1;
  wchar_t *pwVar2;
  
  __s1 = (wchar_t *)*param_1;
  pwVar2 = __s1 + -6;
  if (0xffffffffffffffe < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::assign");
  }
  if (((param_2 < __s1) || (__s1 + *(long *)(__s1 + -6) < param_2)) || (L'\0' < __s1[-2])) {
    FUN_00416540(param_1,0,*(long *)(__s1 + -6),param_3);
    if (param_3 == 0) {
      return param_1;
    }
    if (param_3 != 1) {
      wmemcpy((wchar_t *)*param_1,param_2,param_3);
      return param_1;
    }
    *(wchar_t *)*param_1 = *param_2;
    return param_1;
  }
  uVar1 = (long)param_2 - (long)__s1 >> 2;
  if (uVar1 < param_3) {
    if (uVar1 == 0) goto LAB_00416ad4;
    if (param_3 != 1) {
      wmemmove(__s1,param_2,param_3);
      __s1 = (wchar_t *)*param_1;
      pwVar2 = __s1 + -6;
      goto LAB_00416ad4;
    }
  }
  else if (param_3 != 1) {
    wmemcpy(__s1,param_2,param_3);
    __s1 = (wchar_t *)*param_1;
    pwVar2 = __s1 + -6;
    goto LAB_00416ad4;
  }
  *__s1 = *param_2;
LAB_00416ad4:
  if (pwVar2 != (wchar_t *)&DAT_00547750) {
    __s1[-2] = L'\0';
    *(size_t *)(__s1 + -6) = param_3;
    __s1[param_3] = L'\0';
  }
  return param_1;
}


==================================================================

### FUNC 00416c20 (492 bytes) name=FUN_00416c20

long * FUN_00416c20(long *param_1,ulong param_2,wchar_t *param_3,ulong param_4)

{
  wchar_t *__s2;
  wchar_t *__s1;
  long lVar1;
  ulong uVar2;
  wchar_t *pwVar3;
  size_t __n;
  long lVar4;
  
  pwVar3 = (wchar_t *)*param_1;
  uVar2 = *(ulong *)(pwVar3 + -6);
  if (uVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
                 param_2,uVar2);
  }
  if (param_4 <= 0xffffffffffffffe - uVar2) {
    if (((param_3 < pwVar3) || (pwVar3 + uVar2 < param_3)) || (L'\0' < pwVar3[-2])) {
      FUN_00416540(param_1,param_2,0,param_4);
      if (param_4 != 0) {
        if (param_4 == 1) {
          *(wchar_t *)(*param_1 + param_2 * 4) = *param_3;
        }
        else {
          wmemcpy((wchar_t *)(*param_1 + param_2 * 4),param_3,param_4);
        }
      }
    }
    else {
      FUN_00416540(param_1,param_2,0);
      lVar1 = *param_1;
      __s2 = (wchar_t *)((long)param_3 + (lVar1 - (long)pwVar3));
      __s1 = (wchar_t *)(lVar1 + param_2 * 4);
      if (__s2 + param_4 <= __s1) {
        if (param_4 != 1) {
          wmemcpy(__s1,__s2,param_4);
          return param_1;
        }
        *(undefined4 *)(lVar1 + param_2 * 4) =
             *(undefined4 *)((long)param_3 + (lVar1 - (long)pwVar3));
        return param_1;
      }
      if (__s2 < __s1) {
        lVar4 = (long)__s1 - (long)__s2;
        __n = lVar4 >> 2;
        if (__n == 1) {
          *(undefined4 *)(lVar1 + param_2 * 4) =
               *(undefined4 *)((long)param_3 + (lVar1 - (long)pwVar3));
        }
        else {
          wmemcpy(__s1,__s2,__n);
        }
        if (param_4 - __n == 1) {
          *(wchar_t *)((long)__s1 + lVar4) = __s1[param_4];
        }
        else {
          wmemcpy((wchar_t *)((long)__s1 + lVar4),__s1 + param_4,param_4 - __n);
        }
      }
      else if (param_4 == 1) {
        *(wchar_t *)(lVar1 + param_2 * 4) = __s2[1];
      }
      else {
        wmemcpy(__s1,__s2 + param_4,param_4);
      }
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::insert");
}


==================================================================

### FUNC 00416e0c (16 bytes) name=FUN_00416e0c

void FUN_00416e0c(long *param_1,long param_2)

{
  FUN_00416c20(param_1,param_2 - *param_1 >> 2);
  return;
}


==================================================================

### FUNC 00416e1c (76 bytes) name=FUN_00416e1c

void FUN_00416e1c(undefined8 param_1,undefined8 param_2,long *param_3,ulong param_4,ulong param_5)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_3 + -0x18);
  if (param_4 <= uVar2) {
    uVar1 = uVar2 - param_4;
    if (param_5 < uVar2 - param_4) {
      uVar1 = param_5;
    }
    FUN_00416c20(param_1,param_2,*param_3 + param_4 * 4,uVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
               param_4,uVar2);
}


==================================================================

### FUNC 00416e68 (60 bytes) name=FUN_00416e68

void FUN_00416e68(undefined8 param_1,undefined8 param_2,wchar_t *param_3)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_3);
  FUN_00416c20(param_1,param_2,param_3,sVar1);
  return;
}


==================================================================

### FUNC 00416ea4 (12 bytes) name=FUN_00416ea4

void FUN_00416ea4(void)

{
  FUN_00416c20();
  return;
}


==================================================================

### FUNC 00416eb0 (68 bytes) name=FUN_00416eb0

void FUN_00416eb0(long *param_1)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(*param_1 + -0x18) - 1;
  if (uVar1 <= *(ulong *)(*param_1 + -0x18)) {
    FUN_00416540(param_1,uVar1,1,0);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::erase");
}


==================================================================

### FUNC 00416ef4 (96 bytes) name=FUN_00416ef4

undefined * FUN_00416ef4(undefined8 *param_1)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1;
}


==================================================================

### FUNC 00416f54 (108 bytes) name=FUN_00416f54

undefined8 * FUN_00416f54(undefined8 *param_1,undefined8 *param_2)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_2;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_2,0,0,0);
      puVar1 = (undefined *)*param_2;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  *param_1 = puVar1;
  return param_1;
}


==================================================================

### FUNC 00416fc0 (96 bytes) name=FUN_00416fc0

undefined * FUN_00416fc0(undefined8 *param_1)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1;
}


==================================================================

### FUNC 00417020 (100 bytes) name=FUN_00417020

undefined * FUN_00417020(undefined8 *param_1,long param_2)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + param_2 * 4;
}


==================================================================

### FUNC 00417084 (100 bytes) name=FUN_00417084

undefined * FUN_00417084(undefined8 *param_1)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + *(long *)(puVar1 + -0x18) * 4;
}


==================================================================

### FUNC 004170e8 (116 bytes) name=FUN_004170e8

undefined8 * FUN_004170e8(undefined8 *param_1,undefined8 *param_2)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_2;
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_2,0,0,0);
      puVar1 = (undefined *)*param_2;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  *param_1 = puVar1 + *(long *)(puVar1 + -0x18) * 4;
  return param_1;
}


==================================================================

### FUNC 0041715c (104 bytes) name=FUN_0041715c

undefined * FUN_0041715c(undefined8 *param_1)

{
  undefined *puVar1;
  long lVar2;
  
  puVar1 = (undefined *)*param_1;
  lVar2 = *(long *)(puVar1 + -0x18);
  if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
    if (*(int *)(puVar1 + -8) != 0) {
      FUN_00416540(param_1,0,0,0);
      puVar1 = (undefined *)*param_1;
    }
    *(undefined4 *)(puVar1 + -8) = 0xffffffff;
  }
  return puVar1 + (lVar2 + -1) * 4;
}


==================================================================

### FUNC 004171c4 (124 bytes) name=FUN_004171c4

undefined * FUN_004171c4(undefined8 *param_1,ulong param_2)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)*param_1;
  if (param_2 < *(ulong *)(puVar1 + -0x18)) {
    if ((-1 < *(int *)(puVar1 + -8)) && (puVar1 != &DAT_00547768)) {
      if (*(int *)(puVar1 + -8) != 0) {
        FUN_00416540(param_1,0,0,0);
        puVar1 = (undefined *)*param_1;
      }
      *(undefined4 *)(puVar1 + -8) = 0xffffffff;
    }
    return puVar1 + param_2 * 4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)");
}


==================================================================

### FUNC 00417240 (64 bytes) name=FUN_00417240

long * FUN_00417240(long *param_1,undefined4 param_2)

{
  FUN_00416540(param_1,0,*(undefined8 *)(*param_1 + -0x18),1);
  *(undefined4 *)*param_1 = param_2;
  return param_1;
}


==================================================================

### FUNC 00417280 (112 bytes) name=FUN_00417280

long FUN_00417280(long *param_1,long param_2,undefined4 param_3)

{
  long lVar1;
  
  param_2 = param_2 - *param_1;
  if (*(long *)(*param_1 + -0x18) != 0xffffffffffffffe) {
    FUN_00416540(param_1,param_2 >> 2,0,1);
    lVar1 = *param_1;
    *(undefined4 *)(lVar1 + param_2) = param_3;
    *(undefined4 *)(lVar1 + -8) = 0xffffffff;
    return lVar1 + param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux",param_2 >> 2);
}


==================================================================

### FUNC 004172f0 (144 bytes) name=FUN_004172f0

long * FUN_004172f0(long *param_1,size_t param_2,wchar_t param_3)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(*param_1 + -0x18);
  if (0xffffffffffffffe < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux",*param_1,uVar1);
  }
  FUN_00416540(param_1,0,uVar1,param_2);
  if (param_2 != 0) {
    if (param_2 == 1) {
      *(wchar_t *)*param_1 = param_3;
      return param_1;
    }
    wmemset((wchar_t *)*param_1,param_3,param_2);
  }
  return param_1;
}


==================================================================

### FUNC 00417380 (188 bytes) name=FUN_00417380

long * FUN_00417380(long *param_1,ulong param_2,ulong param_3,wchar_t param_4)

{
  if (*(ulong *)(*param_1 + -0x18) < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::insert",
                 param_2);
  }
  if (param_3 <= 0xffffffffffffffe - *(ulong *)(*param_1 + -0x18)) {
    FUN_00416540(param_1,param_2,0,param_3);
    if (param_3 != 0) {
      if (param_3 == 1) {
        *(wchar_t *)(*param_1 + param_2 * 4) = param_4;
        return param_1;
      }
      wmemset((wchar_t *)(*param_1 + param_2 * 4),param_4,param_3);
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux");
}


==================================================================

### FUNC 0041743c (168 bytes) name=FUN_0041743c

long * FUN_0041743c(long *param_1,long param_2,long param_3,ulong param_4,wchar_t param_5)

{
  long lVar1;
  
  lVar1 = param_2 - *param_1;
  if ((ulong)((0xffffffffffffffe - *(long *)(*param_1 + -0x18)) + (param_3 - param_2 >> 2)) <
      param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux",lVar1 >> 2);
  }
  FUN_00416540();
  if (param_4 != 0) {
    if (param_4 == 1) {
      *(wchar_t *)(*param_1 + lVar1) = param_5;
      return param_1;
    }
    wmemset((wchar_t *)(*param_1 + lVar1),param_5,param_4);
  }
  return param_1;
}


==================================================================

### FUNC 004174e4 (204 bytes) name=FUN_004174e4

long * FUN_004174e4(long *param_1,ulong param_2,ulong param_3,ulong param_4,wchar_t param_5)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar2 = *(ulong *)(*param_1 + -0x18);
  if (uVar2 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
                 param_2,uVar2);
  }
  uVar1 = uVar2 - param_2;
  if (param_3 < uVar2 - param_2) {
    uVar1 = param_3;
  }
  if (param_4 <= (0xffffffffffffffe - uVar2) + uVar1) {
    FUN_00416540();
    if (param_4 != 0) {
      if (param_4 == 1) {
        *(wchar_t *)(*param_1 + param_2 * 4) = param_5;
        return param_1;
      }
      wmemset((wchar_t *)(*param_1 + param_2 * 4),param_5,param_4);
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f39c("basic_string::_M_replace_aux");
}


==================================================================

### FUNC 004175b0 (148 bytes) name=FUN_004175b0

void FUN_004175b0(long *param_1,long param_2,ulong param_3,wchar_t param_4)

{
  param_2 = param_2 - *param_1;
  if (0xffffffffffffffeU - *(long *)(*param_1 + -0x18) < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::_M_replace_aux",param_2 >> 2);
  }
  FUN_00416540(param_1,param_2 >> 2,0,param_3);
  if (param_3 != 0) {
    if (param_3 != 1) {
      wmemset((wchar_t *)(*param_1 + param_2),param_4,param_3);
      return;
    }
    *(wchar_t *)(*param_1 + param_2) = param_4;
  }
  return;
}


==================================================================

### FUNC 00417644 (160 bytes) name=FUN_00417644

void FUN_00417644(undefined8 *param_1,size_t param_2,wchar_t param_3,undefined8 param_4)

{
  size_t *psVar1;
  wchar_t *__s;
  
  if (param_2 == 0) {
    __s = (wchar_t *)&DAT_00547768;
  }
  else {
    psVar1 = (size_t *)FUN_004164a8(param_2,0,param_4);
    __s = (wchar_t *)(psVar1 + 3);
    if (param_2 == 1) {
      *(wchar_t *)(psVar1 + 3) = param_3;
    }
    else {
      wmemset(__s,param_3,param_2);
    }
    if (psVar1 != &DAT_00547750) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = param_2;
      *(undefined4 *)((long)psVar1 + param_2 * 4 + 0x18) = 0;
    }
  }
  *param_1 = __s;
  return;
}


==================================================================

### FUNC 004176e4 (292 bytes) name=FUN_004176e4

void FUN_004176e4(undefined8 *param_1,long *param_2,ulong param_3,ulong param_4)

{
  wchar_t *__s2;
  wchar_t *pwVar1;
  ulong uVar2;
  size_t *psVar3;
  ulong uVar4;
  long lVar5;
  size_t __n;
  undefined1 auStack_8 [8];
  
  lVar5 = *param_2;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                 "basic_string::basic_string",param_3,uVar4);
  }
  __s2 = (wchar_t *)(lVar5 + param_3 * 4);
  uVar2 = uVar4 - param_3;
  if (param_4 < uVar4 - param_3) {
    uVar2 = param_4;
  }
  pwVar1 = (wchar_t *)(lVar5 + (uVar2 + param_3) * 4);
  if (__s2 != pwVar1) {
    if ((pwVar1 != (wchar_t *)0x0) && (__s2 == (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    __n = (long)pwVar1 - (long)__s2 >> 2;
    psVar3 = (size_t *)FUN_004164a8(__n,0,auStack_8);
    if (__n == 1) {
      *(undefined4 *)(psVar3 + 3) = *(undefined4 *)(lVar5 + param_3 * 4);
    }
    else {
      wmemcpy((wchar_t *)(psVar3 + 3),__s2,__n);
    }
    if (psVar3 != &DAT_00547750) {
      *(undefined4 *)(psVar3 + 2) = 0;
      *psVar3 = __n;
      *(undefined4 *)((long)psVar3 + ((long)pwVar1 - (long)__s2) + 0x18) = 0;
    }
    *param_1 = psVar3 + 3;
    return;
  }
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 00417808 (100 bytes) name=FUN_00417808

undefined8 FUN_00417808(undefined8 param_1,long *param_2,ulong param_3,undefined8 param_4)

{
  if (param_3 <= *(ulong *)(*param_2 + -0x18)) {
    FUN_004176e4(param_1,param_2,param_3,param_4);
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::substr",
               param_3,*(ulong *)(*param_2 + -0x18));
}


==================================================================

### FUNC 0041786c (220 bytes) name=FUN_0041786c

void FUN_0041786c(undefined8 *param_1,wchar_t *param_2,undefined8 param_3)

{
  size_t sVar1;
  size_t *psVar2;
  long lVar3;
  
  if (param_2 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  sVar1 = wcslen(param_2);
  lVar3 = sVar1 * 4;
  if (lVar3 != 0) {
    sVar1 = lVar3 >> 2;
    psVar2 = (size_t *)FUN_004164a8(sVar1,0,param_3);
    if (sVar1 == 1) {
      *(wchar_t *)(psVar2 + 3) = *param_2;
    }
    else {
      wmemcpy((wchar_t *)(psVar2 + 3),param_2,sVar1);
    }
    if (psVar2 != &DAT_00547750) {
      *(undefined4 *)(psVar2 + 2) = 0;
      *psVar2 = sVar1;
      *(undefined4 *)((long)psVar2 + lVar3 + 0x18) = 0;
    }
    *param_1 = psVar2 + 3;
    return;
  }
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 00417948 (736 bytes) name=FUN_00417948

ulong * FUN_00417948(ulong *param_1,ulong param_2,ulong param_3,wchar_t *param_4,ulong param_5)

{
  ulong uVar1;
  char cVar2;
  bool bVar3;
  wchar_t wVar4;
  size_t *psVar5;
  wchar_t *pwVar6;
  ulong uVar7;
  long lVar8;
  wchar_t *pwVar9;
  size_t __n;
  undefined1 auStack_8 [8];
  
  pwVar6 = (wchar_t *)*param_1;
  uVar7 = *(ulong *)(pwVar6 + -6);
  if (uVar7 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
                 param_2);
  }
  uVar1 = uVar7 - param_2;
  if (param_3 < uVar7 - param_2) {
    uVar1 = param_3;
  }
  if ((0xffffffffffffffe - uVar7) + uVar1 < param_5) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::replace");
  }
  if (((param_4 < pwVar6) || (pwVar6 + uVar7 < param_4)) || (L'\0' < pwVar6[-2])) {
    FUN_00416540(param_1,param_2,uVar1,param_5);
    if (param_5 != 0) {
      if (param_5 == 1) {
        *(wchar_t *)(*param_1 + param_2 * 4) = *param_4;
      }
      else {
        wmemcpy((wchar_t *)(*param_1 + param_2 * 4),param_4,param_5);
      }
    }
    return param_1;
  }
  pwVar9 = param_4 + param_5;
  if (pwVar6 + param_2 < pwVar9) {
    if (param_4 < pwVar6 + uVar1 + param_2) {
      if (param_4 == pwVar9) {
        pwVar6 = (wchar_t *)&DAT_00547768;
      }
      else {
        if ((pwVar9 != (wchar_t *)0x0) && (param_4 == (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
          FUN_0040f180("basic_string::_S_construct null not valid");
        }
        __n = (long)(param_5 * 4) >> 2;
        psVar5 = (size_t *)FUN_004164a8(__n,0,auStack_8);
        pwVar6 = (wchar_t *)(psVar5 + 3);
        if (__n == 1) {
          *(wchar_t *)(psVar5 + 3) = *param_4;
        }
        else {
          wmemcpy(pwVar6,param_4,__n);
        }
        if (psVar5 != &DAT_00547750) {
          *(undefined4 *)(psVar5 + 2) = 0;
          *psVar5 = __n;
          *(undefined4 *)((long)psVar5 + param_5 * 4 + 0x18) = 0;
        }
      }
      FUN_00416540(param_1,param_2,uVar1,param_5);
      if (param_5 != 0) {
        if (param_5 == 1) {
          *(wchar_t *)(*param_1 + param_2 * 4) = *pwVar6;
        }
        else {
          wmemcpy((wchar_t *)(*param_1 + param_2 * 4),pwVar6,param_5);
        }
      }
      if (pwVar6 + -6 == (wchar_t *)&DAT_00547750) {
        return param_1;
      }
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        wVar4 = pwVar6[-2];
        pwVar6[-2] = wVar4 + L'\xffffffff';
      }
      else {
        pwVar9 = pwVar6 + -2;
        do {
          wVar4 = *pwVar9;
          cVar2 = '\x01';
          bVar3 = (bool)ExclusiveMonitorPass(pwVar9,0x10);
          if (bVar3) {
            *pwVar9 = wVar4 + L'\xffffffff';
            cVar2 = ExclusiveMonitorsStatus();
          }
        } while (cVar2 != '\0');
      }
      if (L'\0' < wVar4) {
        return param_1;
      }
      operator_delete(pwVar6 + -6);
      return param_1;
    }
    lVar8 = (param_5 + ((long)param_4 - (long)pwVar6 >> 2)) - uVar1;
  }
  else {
    lVar8 = (long)param_4 - (long)pwVar6 >> 2;
  }
  FUN_00416540(param_1,param_2,uVar1,param_5);
  uVar7 = *param_1;
  if (param_5 != 1) {
    wmemcpy((wchar_t *)(uVar7 + param_2 * 4),(wchar_t *)(uVar7 + lVar8 * 4),param_5);
    return param_1;
  }
  *(undefined4 *)(uVar7 + param_2 * 4) = *(undefined4 *)(uVar7 + lVar8 * 4);
  return param_1;
}


==================================================================

### FUNC 00417c4c (12 bytes) name=FUN_00417c4c

void FUN_00417c4c(void)

{
  FUN_00417948();
  return;
}


==================================================================

### FUNC 00417c58 (76 bytes) name=FUN_00417c58

void FUN_00417c58(void)

{
  long *in_x3;
  ulong in_x4;
  
  if (in_x4 <= *(ulong *)(*in_x3 + -0x18)) {
    FUN_00417948();
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::replace",
               in_x4,*(ulong *)(*in_x3 + -0x18));
}


==================================================================

### FUNC 00417ca4 (68 bytes) name=FUN_00417ca4

void FUN_00417ca4(undefined8 param_1,undefined8 param_2,undefined8 param_3,wchar_t *param_4)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_4);
  FUN_00417948(param_1,param_2,param_3,param_4,sVar1);
  return;
}


==================================================================

### FUNC 00417ce8 (24 bytes) name=FUN_00417ce8

void FUN_00417ce8(long *param_1,long param_2,long param_3)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2);
  return;
}


==================================================================

### FUNC 00417d00 (32 bytes) name=FUN_00417d00

void FUN_00417d00(long *param_1,long param_2,long param_3,long *param_4)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,*param_4,
               *(undefined8 *)(*param_4 + -0x18));
  return;
}


==================================================================

### FUNC 00417d20 (88 bytes) name=FUN_00417d20

void FUN_00417d20(long *param_1,long param_2,long param_3,wchar_t *param_4)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_4);
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,sVar1);
  return;
}


==================================================================

### FUNC 00417d78 (32 bytes) name=FUN_00417d78

void FUN_00417d78(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,param_5 - param_4 >> 2
              );
  return;
}


==================================================================

### FUNC 00417d98 (32 bytes) name=FUN_00417d98

void FUN_00417d98(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,param_5 - param_4 >> 2
              );
  return;
}


==================================================================

### FUNC 00417db8 (28 bytes) name=FUN_00417db8

void FUN_00417db8(long *param_1,long param_2,long param_3,undefined8 param_4,long param_5)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,(param_5 << 2) >> 2);
  return;
}


==================================================================

### FUNC 00417dd4 (32 bytes) name=FUN_00417dd4

void FUN_00417dd4(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,param_5 - param_4 >> 2
              );
  return;
}


==================================================================

### FUNC 00417df4 (32 bytes) name=FUN_00417df4

void FUN_00417df4(long *param_1,long param_2,long param_3,long param_4,long param_5)

{
  FUN_00417948(param_1,param_2 - *param_1 >> 2,param_3 - param_2 >> 2,param_4,param_5 - param_4 >> 2
              );
  return;
}


==================================================================

### FUNC 00417e14 (220 bytes) name=FUN_00417e14

void FUN_00417e14(undefined8 *param_1,wchar_t *param_2,long param_3,undefined8 param_4)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_2 == param_2 + param_3) {
    *param_1 = &DAT_00547768;
    return;
  }
  if ((param_2 + param_3 != (wchar_t *)0x0) && (param_2 == (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = param_3 * 4 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0,param_4);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_2;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_2,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + param_3 * 4 + 0x18) = 0;
  }
  *param_1 = psVar1 + 3;
  return;
}


==================================================================

### FUNC 00417ef0 (220 bytes) name=FUN_00417ef0

void FUN_00417ef0(undefined8 *param_1,wchar_t *param_2,long param_3,undefined8 param_4)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_2 == param_2 + param_3) {
    *param_1 = &DAT_00547768;
    return;
  }
  if ((param_2 + param_3 != (wchar_t *)0x0) && (param_2 == (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = param_3 * 4 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0,param_4);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_2;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_2,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + param_3 * 4 + 0x18) = 0;
  }
  *param_1 = psVar1 + 3;
  return;
}


==================================================================

### FUNC 00417fcc (292 bytes) name=FUN_00417fcc

void FUN_00417fcc(undefined8 *param_1,long *param_2,ulong param_3,ulong param_4,undefined8 param_5)

{
  wchar_t *__s2;
  wchar_t *pwVar1;
  ulong uVar2;
  size_t *psVar3;
  ulong uVar4;
  long lVar5;
  size_t __n;
  
  lVar5 = *param_2;
  uVar4 = *(ulong *)(lVar5 + -0x18);
  if (uVar4 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)",
                 "basic_string::basic_string",param_3,uVar4);
  }
  __s2 = (wchar_t *)(lVar5 + param_3 * 4);
  uVar2 = uVar4 - param_3;
  if (param_4 < uVar4 - param_3) {
    uVar2 = param_4;
  }
  pwVar1 = (wchar_t *)(lVar5 + (uVar2 + param_3) * 4);
  if (__s2 != pwVar1) {
    if ((pwVar1 != (wchar_t *)0x0) && (__s2 == (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f180("basic_string::_S_construct null not valid");
    }
    __n = (long)pwVar1 - (long)__s2 >> 2;
    psVar3 = (size_t *)FUN_004164a8(__n,0,param_5);
    if (__n == 1) {
      *(undefined4 *)(psVar3 + 3) = *(undefined4 *)(lVar5 + param_3 * 4);
    }
    else {
      wmemcpy((wchar_t *)(psVar3 + 3),__s2,__n);
    }
    if (psVar3 != &DAT_00547750) {
      *(undefined4 *)(psVar3 + 2) = 0;
      *psVar3 = __n;
      *(undefined4 *)((long)psVar3 + ((long)pwVar1 - (long)__s2) + 0x18) = 0;
    }
    *param_1 = psVar3 + 3;
    return;
  }
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 004180f0 (140 bytes) name=FUN_004180f0

wchar_t * FUN_004180f0(size_t param_1,wchar_t param_2)

{
  size_t *psVar1;
  wchar_t *__s;
  
  if (param_1 == 0) {
    __s = (wchar_t *)&DAT_00547768;
  }
  else {
    psVar1 = (size_t *)FUN_004164a8(param_1,0);
    __s = (wchar_t *)(psVar1 + 3);
    if (param_1 == 1) {
      *(wchar_t *)(psVar1 + 3) = param_2;
    }
    else {
      wmemset(__s,param_2,param_1);
    }
    if (psVar1 != &DAT_00547750) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = param_1;
      *(undefined4 *)((long)psVar1 + param_1 * 4 + 0x18) = 0;
    }
  }
  return __s;
}


==================================================================

### FUNC 0041817c (140 bytes) name=FUN_0041817c

wchar_t * FUN_0041817c(size_t param_1,wchar_t param_2)

{
  size_t *psVar1;
  wchar_t *__s;
  
  if (param_1 == 0) {
    __s = (wchar_t *)&DAT_00547768;
  }
  else {
    psVar1 = (size_t *)FUN_004164a8(param_1,0);
    __s = (wchar_t *)(psVar1 + 3);
    if (param_1 == 1) {
      *(wchar_t *)(psVar1 + 3) = param_2;
    }
    else {
      wmemset(__s,param_2,param_1);
    }
    if (psVar1 != &DAT_00547750) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = param_1;
      *(undefined4 *)((long)psVar1 + param_1 * 4 + 0x18) = 0;
    }
  }
  return __s;
}


==================================================================

### FUNC 00418208 (284 bytes) name=FUN_00418208

void FUN_00418208(long *param_1,ulong param_2)

{
  char cVar1;
  bool bVar2;
  size_t *psVar3;
  int iVar4;
  size_t __n;
  long lVar5;
  int *piVar6;
  wchar_t *__s2;
  undefined1 auStack_8 [8];
  
  __s2 = (wchar_t *)*param_1;
  if ((param_2 != *(ulong *)(__s2 + -4)) || (L'\0' < __s2[-2])) {
    if (param_2 < *(ulong *)(__s2 + -6)) {
      param_2 = *(ulong *)(__s2 + -6);
    }
    psVar3 = (size_t *)FUN_004164a8(param_2,*(ulong *)(__s2 + -4),auStack_8);
    __n = *(size_t *)(__s2 + -6);
    if (__n != 0) {
      if (__n == 1) {
        *(wchar_t *)(psVar3 + 3) = *__s2;
      }
      else {
        wmemcpy((wchar_t *)(psVar3 + 3),__s2,__n);
        __n = *(size_t *)(__s2 + -6);
      }
    }
    if (psVar3 != &DAT_00547750) {
      *(undefined4 *)(psVar3 + 2) = 0;
      *psVar3 = __n;
      *(undefined4 *)((long)psVar3 + __n * 4 + 0x18) = 0;
    }
    lVar5 = *param_1;
    if ((undefined8 *)(lVar5 + -0x18) != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar4 = *(int *)(lVar5 + -8);
        *(int *)(lVar5 + -8) = iVar4 + -1;
      }
      else {
        piVar6 = (int *)(lVar5 + -8);
        do {
          iVar4 = *piVar6;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar6,0x10);
          if (bVar2) {
            *piVar6 = iVar4 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar4 < 1) {
        operator_delete((undefined8 *)(lVar5 + -0x18));
      }
    }
    *param_1 = (long)(psVar3 + 3);
  }
  return;
}


==================================================================

### FUNC 00418324 (52 bytes) name=FUN_00418324

void FUN_00418324(long *param_1)

{
  if (*(ulong *)(*param_1 + -0x10) <= *(ulong *)(*param_1 + -0x18)) {
    return;
  }
  FUN_00418208(param_1,0);
  return;
}


==================================================================

### FUNC 00418364 (192 bytes) name=FUN_00418364

undefined8 * FUN_00418364(undefined8 *param_1,long *param_2)

{
  ulong uVar1;
  wchar_t *__s2;
  long lVar2;
  undefined *puVar3;
  size_t __n;
  
  __s2 = (wchar_t *)*param_2;
  __n = *(size_t *)(__s2 + -6);
  if (__n != 0) {
    puVar3 = (undefined *)*param_1;
    lVar2 = *(long *)(puVar3 + -0x18);
    uVar1 = lVar2 + __n;
    if ((*(ulong *)(puVar3 + -0x10) < uVar1) || (0 < *(int *)(puVar3 + -8))) {
      FUN_00418208(param_1,uVar1);
      puVar3 = (undefined *)*param_1;
      __s2 = (wchar_t *)*param_2;
      lVar2 = *(long *)(puVar3 + -0x18);
    }
    if (__n == 1) {
      *(wchar_t *)(puVar3 + lVar2 * 4) = *__s2;
    }
    else {
      wmemcpy((wchar_t *)(puVar3 + lVar2 * 4),__s2,__n);
      puVar3 = (undefined *)*param_1;
    }
    if (puVar3 != &DAT_00547768) {
      *(undefined4 *)(puVar3 + -8) = 0;
      *(ulong *)(puVar3 + -0x18) = uVar1;
      *(undefined4 *)(puVar3 + uVar1 * 4) = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00418424 (4 bytes) name=thunk_FUN_00418364

undefined8 * thunk_FUN_00418364(undefined8 *param_1,long *param_2)

{
  ulong uVar1;
  wchar_t *__s2;
  long lVar2;
  undefined *puVar3;
  size_t __n;
  
  __s2 = (wchar_t *)*param_2;
  __n = *(size_t *)(__s2 + -6);
  if (__n != 0) {
    puVar3 = (undefined *)*param_1;
    lVar2 = *(long *)(puVar3 + -0x18);
    uVar1 = lVar2 + __n;
    if ((*(ulong *)(puVar3 + -0x10) < uVar1) || (0 < *(int *)(puVar3 + -8))) {
      FUN_00418208(param_1,uVar1);
      puVar3 = (undefined *)*param_1;
      __s2 = (wchar_t *)*param_2;
      lVar2 = *(long *)(puVar3 + -0x18);
    }
    if (__n == 1) {
      *(wchar_t *)(puVar3 + lVar2 * 4) = *__s2;
    }
    else {
      wmemcpy((wchar_t *)(puVar3 + lVar2 * 4),__s2,__n);
      puVar3 = (undefined *)*param_1;
    }
    if (puVar3 != &DAT_00547768) {
      *(undefined4 *)(puVar3 + -8) = 0;
      *(ulong *)(puVar3 + -0x18) = uVar1;
      *(undefined4 *)(puVar3 + uVar1 * 4) = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00418428 (252 bytes) name=FUN_00418428

undefined8 * FUN_00418428(undefined8 *param_1,long *param_2,ulong param_3,ulong param_4)

{
  size_t __n;
  undefined *puVar1;
  long lVar2;
  ulong uVar3;
  long lVar4;
  
  lVar4 = *param_2;
  uVar3 = *(ulong *)(lVar4 + -0x18);
  if (uVar3 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f504("%s: __pos (which is %zu) > this->size() (which is %zu)","basic_string::append",
                 param_3,uVar3);
  }
  __n = uVar3 - param_3;
  if (param_4 < uVar3 - param_3) {
    __n = param_4;
  }
  if (__n != 0) {
    puVar1 = (undefined *)*param_1;
    lVar2 = *(long *)(puVar1 + -0x18);
    uVar3 = __n + lVar2;
    if ((*(ulong *)(puVar1 + -0x10) < uVar3) || (0 < *(int *)(puVar1 + -8))) {
      FUN_00418208(param_1,uVar3);
      puVar1 = (undefined *)*param_1;
      lVar4 = *param_2;
      lVar2 = *(long *)(puVar1 + -0x18);
    }
    if (__n == 1) {
      *(undefined4 *)(puVar1 + lVar2 * 4) = *(undefined4 *)(lVar4 + param_3 * 4);
    }
    else {
      wmemcpy((wchar_t *)(puVar1 + lVar2 * 4),(wchar_t *)(lVar4 + param_3 * 4),__n);
      puVar1 = (undefined *)*param_1;
    }
    if (puVar1 != &DAT_00547768) {
      *(undefined4 *)(puVar1 + -8) = 0;
      *(ulong *)(puVar1 + -0x18) = uVar3;
      *(undefined4 *)(puVar1 + uVar3 * 4) = 0;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00418524 (320 bytes) name=FUN_00418524

undefined8 FUN_00418524(undefined8 *param_1,wchar_t *param_2,ulong param_3)

{
  ulong uVar1;
  wchar_t *__s1;
  long lVar2;
  wchar_t *pwVar3;
  
  pwVar3 = (wchar_t *)*param_1;
  lVar2 = *(long *)(pwVar3 + -6);
  if (0xffffffffffffffeU - lVar2 < param_3) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::append");
  }
  uVar1 = param_3 + lVar2;
  if ((*(ulong *)(pwVar3 + -4) < uVar1) || (L'\0' < pwVar3[-2])) {
    if ((pwVar3 <= param_2) && (param_2 <= pwVar3 + lVar2)) {
      lVar2 = (long)param_2 - (long)pwVar3;
      FUN_00418208(param_1,uVar1);
      pwVar3 = (wchar_t *)*param_1;
      param_2 = (wchar_t *)((long)pwVar3 + lVar2);
      lVar2 = *(long *)(pwVar3 + -6);
      __s1 = pwVar3 + lVar2;
      goto joined_r0x00418614;
    }
    FUN_00418208(param_1,uVar1);
    pwVar3 = (wchar_t *)*param_1;
    lVar2 = *(long *)(pwVar3 + -6);
  }
  __s1 = pwVar3 + lVar2;
joined_r0x00418614:
  if (param_3 == 1) {
    pwVar3[lVar2] = *param_2;
  }
  else {
    wmemcpy(__s1,param_2,param_3);
    pwVar3 = (wchar_t *)*param_1;
  }
  if (pwVar3 == (wchar_t *)&DAT_00547768) {
    return 0;
  }
  *(ulong *)(pwVar3 + -6) = uVar1;
  pwVar3[-2] = L'\0';
  pwVar3[uVar1] = L'\0';
  return 0;
}


==================================================================

### FUNC 00418664 (40 bytes) name=FUN_00418664

undefined8 FUN_00418664(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_00418524();
  }
  return param_1;
}


==================================================================

### FUNC 0041868c (40 bytes) name=FUN_0041868c

undefined8 FUN_0041868c(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_00418524();
  }
  return param_1;
}


==================================================================

### FUNC 004186b4 (64 bytes) name=FUN_004186b4

undefined8 FUN_004186b4(undefined8 param_1,wchar_t *param_2)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  if (sVar1 != 0) {
    FUN_00418524(param_1,param_2,sVar1);
  }
  return param_1;
}


==================================================================

### FUNC 004186f4 (64 bytes) name=FUN_004186f4

undefined8 FUN_004186f4(undefined8 param_1,wchar_t *param_2)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  if (sVar1 != 0) {
    FUN_00418524(param_1,param_2,sVar1);
  }
  return param_1;
}


==================================================================

### FUNC 00418734 (40 bytes) name=FUN_00418734

undefined8 FUN_00418734(undefined8 param_1,undefined8 param_2,long param_3)

{
  if (param_3 != 0) {
    FUN_00418524();
  }
  return param_1;
}


==================================================================

### FUNC 0041875c (256 bytes) name=FUN_0041875c

undefined8 FUN_0041875c(undefined8 *param_1,ulong param_2,wchar_t param_3)

{
  ulong uVar1;
  wchar_t *__s;
  undefined *puVar2;
  long lVar3;
  
  puVar2 = (undefined *)*param_1;
  lVar3 = *(long *)(puVar2 + -0x18);
  if (0xffffffffffffffeU - lVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::append");
  }
  uVar1 = param_2 + lVar3;
  if ((*(ulong *)(puVar2 + -0x10) < uVar1) || (0 < *(int *)(puVar2 + -8))) {
    FUN_00418208(param_1,uVar1);
    puVar2 = (undefined *)*param_1;
    lVar3 = *(long *)(puVar2 + -0x18);
    __s = (wchar_t *)(puVar2 + lVar3 * 4);
  }
  else {
    __s = (wchar_t *)(puVar2 + lVar3 * 4);
  }
  if (param_2 == 1) {
    *(wchar_t *)(puVar2 + lVar3 * 4) = param_3;
  }
  else {
    wmemset(__s,param_3,param_2);
    puVar2 = (undefined *)*param_1;
  }
  if (puVar2 == &DAT_00547768) {
    return 0;
  }
  *(ulong *)(puVar2 + -0x18) = uVar1;
  *(undefined4 *)(puVar2 + -8) = 0;
  *(undefined4 *)(puVar2 + uVar1 * 4) = 0;
  return 0;
}


==================================================================

### FUNC 0041885c (40 bytes) name=FUN_0041885c

undefined8 FUN_0041885c(undefined8 param_1,long param_2)

{
  if (param_2 != 0) {
    FUN_0041875c();
  }
  return param_1;
}


==================================================================

### FUNC 00418884 (92 bytes) name=FUN_00418884

void FUN_00418884(long *param_1,ulong param_2)

{
  ulong uVar1;
  
  uVar1 = *(ulong *)(*param_1 + -0x18);
  if (0xffffffffffffffe < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f39c("basic_string::resize");
  }
  if (uVar1 < param_2) {
    if (param_2 - uVar1 != 0) {
      FUN_0041875c(param_1,param_2 - uVar1);
      return;
    }
  }
  else if (param_2 < uVar1) {
    FUN_00416540(param_1,param_2,uVar1 - param_2,0);
    return;
  }
  return;
}


==================================================================

### FUNC 004188e0 (8 bytes) name=FUN_004188e0

void FUN_004188e0(undefined8 param_1,undefined8 param_2)

{
  FUN_00418884(param_1,param_2,0);
  return;
}


==================================================================

### FUNC 004188e8 (148 bytes) name=FUN_004188e8

void FUN_004188e8(undefined8 *param_1,undefined4 param_2)

{
  ulong uVar1;
  undefined *puVar2;
  long lVar3;
  
  puVar2 = (undefined *)*param_1;
  lVar3 = *(long *)(puVar2 + -0x18);
  uVar1 = lVar3 + 1;
  if ((*(ulong *)(puVar2 + -0x10) < uVar1) || (0 < *(int *)(puVar2 + -8))) {
    FUN_00418208(param_1,uVar1);
    puVar2 = (undefined *)*param_1;
    lVar3 = *(long *)(puVar2 + -0x18);
  }
  *(undefined4 *)(puVar2 + lVar3 * 4) = param_2;
  if (puVar2 == &DAT_00547768) {
    return;
  }
  *(ulong *)(puVar2 + -0x18) = uVar1;
  *(undefined4 *)(puVar2 + -8) = 0;
  *(undefined4 *)(puVar2 + uVar1 * 4) = 0;
  return;
}


==================================================================

### FUNC 0041897c (156 bytes) name=FUN_0041897c

undefined8 * FUN_0041897c(undefined8 *param_1,undefined4 param_2)

{
  ulong uVar1;
  undefined *puVar2;
  long lVar3;
  
  puVar2 = (undefined *)*param_1;
  lVar3 = *(long *)(puVar2 + -0x18);
  uVar1 = lVar3 + 1;
  if ((*(ulong *)(puVar2 + -0x10) < uVar1) || (0 < *(int *)(puVar2 + -8))) {
    FUN_00418208(param_1,uVar1);
    puVar2 = (undefined *)*param_1;
    lVar3 = *(long *)(puVar2 + -0x18);
  }
  *(undefined4 *)(puVar2 + lVar3 * 4) = param_2;
  if (puVar2 == &DAT_00547768) {
    return param_1;
  }
  *(ulong *)(puVar2 + -0x18) = uVar1;
  *(undefined4 *)(puVar2 + -8) = 0;
  *(undefined4 *)(puVar2 + uVar1 * 4) = 0;
  return param_1;
}


==================================================================

### FUNC 00418a18 (228 bytes) name=FUN_00418a18

size_t * FUN_00418a18(size_t *param_1,undefined8 param_2)

{
  char cVar1;
  bool bVar2;
  size_t *psVar3;
  size_t __n;
  
  if ((int)param_1[2] < 0) {
    psVar3 = (size_t *)FUN_004164a8(*param_1,param_1[1],param_2);
    __n = *param_1;
    if (__n != 0) {
      if (__n == 1) {
        *(int *)(psVar3 + 3) = (int)param_1[3];
      }
      else {
        wmemcpy((wchar_t *)(psVar3 + 3),(wchar_t *)(param_1 + 3),__n);
        __n = *param_1;
      }
    }
    param_1 = psVar3 + 3;
    if (psVar3 != &DAT_00547750) {
      *(undefined4 *)(psVar3 + 2) = 0;
      *psVar3 = __n;
      *(undefined4 *)((long)psVar3 + __n * 4 + 0x18) = 0;
    }
  }
  else {
    if (param_1 != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(param_1 + 2) = (int)param_1[2] + 1;
      }
      else {
        psVar3 = param_1 + 2;
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(psVar3,0x10);
          if (bVar2) {
            *(int *)psVar3 = (int)*psVar3 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
    }
    param_1 = param_1 + 3;
  }
  return param_1;
}


==================================================================

### FUNC 00418afc (80 bytes) name=FUN_00418afc

void FUN_00418afc(undefined8 *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  int iVar4;
  
  if (param_1 != &DAT_00547750) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar4 = *(int *)(param_1 + 2);
      *(int *)(param_1 + 2) = iVar4 + -1;
    }
    else {
      piVar1 = (int *)(param_1 + 2);
      do {
        iVar4 = *piVar1;
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = iVar4 + -1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
    if (iVar4 < 1) {
      operator_delete(param_1);
      return;
    }
  }
  return;
}


==================================================================

### FUNC 00418b4c (4 bytes) name=operator.delete

void operator_delete(void *param_1)

{
  (*(code *)PTR_operator_delete_004ff6e0)();
  return;
}


==================================================================

### FUNC 00418b50 (76 bytes) name=FUN_00418b50

undefined8 * FUN_00418b50(undefined8 *param_1)

{
  int *piVar1;
  char cVar2;
  bool bVar3;
  
  if (param_1 != &DAT_00547750) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(param_1 + 2) = *(int *)(param_1 + 2) + 1;
    }
    else {
      piVar1 = (int *)(param_1 + 2);
      do {
        cVar2 = '\x01';
        bVar3 = (bool)ExclusiveMonitorPass(piVar1,0x10);
        if (bVar3) {
          *piVar1 = *piVar1 + 1;
          cVar2 = ExclusiveMonitorsStatus();
        }
      } while (cVar2 != '\0');
    }
  }
  return param_1 + 3;
}


==================================================================

### FUNC 00418b9c (184 bytes) name=FUN_00418b9c

size_t * FUN_00418b9c(size_t *param_1,undefined8 param_2,long param_3)

{
  size_t *psVar1;
  size_t __n;
  
  psVar1 = (size_t *)FUN_004164a8(param_3 + *param_1,param_1[1],param_2);
  __n = *param_1;
  if (__n != 0) {
    if (__n == 1) {
      *(int *)(psVar1 + 3) = (int)param_1[3];
    }
    else {
      wmemcpy((wchar_t *)(psVar1 + 3),(wchar_t *)(param_1 + 3),__n);
      __n = *param_1;
    }
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + __n * 4 + 0x18) = 0;
    return psVar1 + 3;
  }
  return (size_t *)&DAT_00547768;
}


==================================================================

### FUNC 00418c54 (144 bytes) name=FUN_00418c54

void FUN_00418c54(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  long lVar4;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_2;
  if (*(int *)(lVar4 + -8) < 0) {
    lVar4 = FUN_00418b9c((undefined8 *)(lVar4 + -0x18),auStack_8,0);
    *param_1 = lVar4;
    return;
  }
  if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547750) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(lVar4 + -8) = *(int *)(lVar4 + -8) + 1;
    }
    else {
      piVar3 = (int *)(lVar4 + -8);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
        if (bVar2) {
          *piVar3 = *piVar3 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  *param_1 = lVar4;
  return;
}


==================================================================

### FUNC 00418ce4 (240 bytes) name=FUN_00418ce4

long * FUN_00418ce4(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  long lVar6;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_1;
  lVar6 = *param_2;
  if (lVar4 != lVar6) {
    if (*(int *)(lVar6 + -8) < 0) {
      lVar6 = FUN_00418b9c((undefined8 *)(lVar6 + -0x18),auStack_8,0);
      lVar4 = *param_1;
    }
    else if ((undefined8 *)(lVar6 + -0x18) != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar6 + -8) = *(int *)(lVar6 + -8) + 1;
      }
      else {
        piVar5 = (int *)(lVar6 + -8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = *piVar5 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        lVar4 = *param_1;
      }
    }
    if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = *(int *)(lVar4 + -8);
        *(int *)(lVar4 + -8) = iVar3 + -1;
      }
      else {
        piVar5 = (int *)(lVar4 + -8);
        do {
          iVar3 = *piVar5;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = iVar3 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar3 < 1) {
        operator_delete((undefined8 *)(lVar4 + -0x18));
      }
    }
    *param_1 = lVar6;
  }
  return param_1;
}


==================================================================

### FUNC 00418dd4 (240 bytes) name=FUN_00418dd4

long * FUN_00418dd4(long *param_1,long *param_2)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  long lVar6;
  undefined1 auStack_8 [8];
  
  lVar4 = *param_1;
  lVar6 = *param_2;
  if (lVar4 != lVar6) {
    if (*(int *)(lVar6 + -8) < 0) {
      lVar6 = FUN_00418b9c((undefined8 *)(lVar6 + -0x18),auStack_8,0);
      lVar4 = *param_1;
    }
    else if ((undefined8 *)(lVar6 + -0x18) != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        *(int *)(lVar6 + -8) = *(int *)(lVar6 + -8) + 1;
      }
      else {
        piVar5 = (int *)(lVar6 + -8);
        do {
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = *piVar5 + 1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
        lVar4 = *param_1;
      }
    }
    if ((undefined8 *)(lVar4 + -0x18) != &DAT_00547750) {
      if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
        iVar3 = *(int *)(lVar4 + -8);
        *(int *)(lVar4 + -8) = iVar3 + -1;
      }
      else {
        piVar5 = (int *)(lVar4 + -8);
        do {
          iVar3 = *piVar5;
          cVar1 = '\x01';
          bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
          if (bVar2) {
            *piVar5 = iVar3 + -1;
            cVar1 = ExclusiveMonitorsStatus();
          }
        } while (cVar1 != '\0');
      }
      if (iVar3 < 1) {
        operator_delete((undefined8 *)(lVar4 + -0x18));
      }
    }
    *param_1 = lVar6;
  }
  return param_1;
}


==================================================================

### FUNC 00418ec4 (120 bytes) name=FUN_00418ec4

undefined8 * FUN_00418ec4(undefined8 *param_1,wchar_t *param_2,long *param_3)

{
  size_t sVar1;
  
  sVar1 = wcslen(param_2);
  *param_1 = &DAT_00547768;
  FUN_00418208(param_1,sVar1 + *(long *)(*param_3 + -0x18));
  if (sVar1 != 0) {
    FUN_00418524(param_1,param_2,sVar1);
  }
  FUN_00418364(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 00418f64 (108 bytes) name=FUN_00418f64

undefined8 * FUN_00418f64(undefined8 *param_1,undefined4 param_2,long *param_3)

{
  *param_1 = &DAT_00547768;
  FUN_00418208(param_1,*(long *)(*param_3 + -0x18) + 1);
  FUN_0041875c(param_1,1,param_2);
                    /* catch() { ... } // from try @ 00419918 with catch @ 00418fb0 */
  FUN_00418364(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 00418ff8 (152 bytes) name=FUN_00418ff8

long * FUN_00418ff8(long *param_1,long *param_2,undefined8 param_3)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  int *piVar4;
  undefined1 auStack_8 [8];
  
  lVar3 = *param_2;
  if (*(int *)(lVar3 + -8) < 0) {
    lVar3 = FUN_00418b9c((undefined8 *)(lVar3 + -0x18),auStack_8,0);
  }
  else if ((undefined8 *)(lVar3 + -0x18) != &DAT_00547750) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      *(int *)(lVar3 + -8) = *(int *)(lVar3 + -8) + 1;
    }
    else {
      piVar4 = (int *)(lVar3 + -8);
      do {
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar4,0x10);
        if (bVar2) {
          *piVar4 = *piVar4 + 1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
  }
  *param_1 = lVar3;
  FUN_00418364(param_1,param_3);
  return param_1;
}


==================================================================

### FUNC 004190b8 (216 bytes) name=FUN_004190b8

void FUN_004190b8(undefined8 *param_1,wchar_t *param_2,wchar_t *param_3,undefined8 param_4)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_2 == param_3) {
    *param_1 = &DAT_00547768;
    return;
  }
  if ((param_2 == (wchar_t *)0x0) && (param_3 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_3 - (long)param_2 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0,param_4);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_2;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_2,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + ((long)param_3 - (long)param_2) + 0x18) = 0;
  }
  *param_1 = psVar1 + 3;
  return;
}


==================================================================

### FUNC 00419190 (216 bytes) name=FUN_00419190

void FUN_00419190(undefined8 *param_1,wchar_t *param_2,wchar_t *param_3,undefined8 param_4)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_2 == param_3) {
    *param_1 = &DAT_00547768;
    return;
  }
  if ((param_2 == (wchar_t *)0x0) && (param_3 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_3 - (long)param_2 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0,param_4);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_2;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_2,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + ((long)param_3 - (long)param_2) + 0x18) = 0;
  }
  *param_1 = psVar1 + 3;
  return;
}


==================================================================

### FUNC 00419268 (196 bytes) name=FUN_00419268

void FUN_00419268(undefined8 *param_1,wchar_t *param_2,wchar_t *param_3,undefined8 param_4)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_2 != param_3) {
    __n = (long)param_3 - (long)param_2 >> 2;
    psVar1 = (size_t *)FUN_004164a8(__n,0,param_4);
    if (__n == 1) {
      *(wchar_t *)(psVar1 + 3) = *param_2;
    }
    else {
      wmemcpy((wchar_t *)(psVar1 + 3),param_2,__n);
    }
    if (psVar1 != &DAT_00547750) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = __n;
      *(undefined4 *)((long)psVar1 + ((long)param_3 - (long)param_2) + 0x18) = 0;
    }
    *param_1 = psVar1 + 3;
    return;
  }
  *param_1 = &DAT_00547768;
  return;
}


==================================================================

### FUNC 0041932c (188 bytes) name=FUN_0041932c

wchar_t * FUN_0041932c(wchar_t *param_1,wchar_t *param_2)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_1 != param_2) {
    __n = (long)param_2 - (long)param_1 >> 2;
    psVar1 = (size_t *)FUN_004164a8(__n,0);
    if (__n == 1) {
      *(wchar_t *)(psVar1 + 3) = *param_1;
    }
    else {
      wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);
    }
    if (psVar1 != &DAT_00547750) {
      *(undefined4 *)(psVar1 + 2) = 0;
      *psVar1 = __n;
      *(undefined4 *)((long)psVar1 + ((long)param_2 - (long)param_1) + 0x18) = 0;
    }
    return (wchar_t *)(psVar1 + 3);
  }
  return (wchar_t *)&DAT_00547768;
}


==================================================================

### FUNC 004193e8 (212 bytes) name=FUN_004193e8

wchar_t * FUN_004193e8(wchar_t *param_1,wchar_t *param_2)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_1 == param_2) {
    return (wchar_t *)&DAT_00547768;
  }
  if ((param_1 == (wchar_t *)0x0) && (param_2 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_2 - (long)param_1 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_1;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + ((long)param_2 - (long)param_1) + 0x18) = 0;
  }
  return (wchar_t *)(psVar1 + 3);
}


==================================================================

### FUNC 004194bc (212 bytes) name=FUN_004194bc

wchar_t * FUN_004194bc(wchar_t *param_1,wchar_t *param_2)

{
  size_t *psVar1;
  size_t __n;
  
  if (param_1 == param_2) {
    return (wchar_t *)&DAT_00547768;
  }
  if ((param_1 == (wchar_t *)0x0) && (param_2 != (wchar_t *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f180("basic_string::_S_construct null not valid");
  }
  __n = (long)param_2 - (long)param_1 >> 2;
  psVar1 = (size_t *)FUN_004164a8(__n,0);
  if (__n == 1) {
    *(wchar_t *)(psVar1 + 3) = *param_1;
  }
  else {
    wmemcpy((wchar_t *)(psVar1 + 3),param_1,__n);
  }
  if (psVar1 != &DAT_00547750) {
    *(undefined4 *)(psVar1 + 2) = 0;
    *psVar1 = __n;
    *(undefined4 *)((long)psVar1 + ((long)param_2 - (long)param_1) + 0x18) = 0;
  }
  return (wchar_t *)(psVar1 + 3);
}


==================================================================

### FUNC 00419590 (20 bytes) name=FUN_00419590

bool FUN_00419590(long *param_1,long *param_2)

{
  return *param_1 == *param_2;
}


==================================================================

### FUNC 004195a4 (20 bytes) name=FUN_004195a4

bool FUN_004195a4(long *param_1,long *param_2)

{
  return *param_1 == *param_2;
}


==================================================================

### FUNC 004195b8 (492 bytes) name=FUN_004195b8

long * FUN_004195b8(long *param_1,long param_2)

{
  long lVar1;
  bool bVar2;
  uint uVar3;
  byte *pbVar4;
  long lVar5;
  byte *pbVar6;
  long *plVar7;
  char local_8 [8];
  
  if (param_2 == 1) {
    plVar7 = (long *)FUN_003d5548();
    return plVar7;
  }
  param_1[1] = 0;
  FUN_003d4724(local_8,param_1,1);
  if ((param_2 < 1) || (local_8[0] == '\0')) {
    return param_1;
  }
  plVar7 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((byte *)plVar7[2] < (byte *)plVar7[3]) {
    uVar3 = (uint)*(byte *)plVar7[2];
  }
  else {
    uVar3 = (**(code **)(*plVar7 + 0x48))(plVar7);
  }
  lVar5 = param_1[1];
  bVar2 = false;
  while( true ) {
    while (param_2 <= lVar5) {
      if ((uVar3 == 0xffffffff) || (param_2 != 0x7fffffffffffffff)) goto LAB_004196f0;
      param_1[1] = -0x8000000000000000;
      bVar2 = true;
      lVar5 = -0x8000000000000000;
    }
    if (uVar3 == 0xffffffff) break;
    pbVar6 = (byte *)plVar7[3];
    pbVar4 = (byte *)plVar7[2];
    lVar1 = param_2 - lVar5;
    if ((long)pbVar6 - (long)pbVar4 < param_2 - lVar5) {
      lVar1 = (long)pbVar6 - (long)pbVar4;
    }
    if (lVar1 < 2) {
      param_1[1] = lVar5 + 1;
      if (pbVar6 <= pbVar4) {
        uVar3 = (**(code **)(*plVar7 + 0x50))(plVar7);
        if (uVar3 != 0xffffffff) {
          pbVar4 = (byte *)plVar7[2];
          pbVar6 = (byte *)plVar7[3];
          goto LAB_00419750;
        }
        goto LAB_00419774;
      }
      pbVar4 = pbVar4 + 1;
      plVar7[2] = (long)pbVar4;
LAB_00419750:
      if (pbVar6 <= pbVar4) goto LAB_00419764;
      uVar3 = (uint)*pbVar4;
      lVar5 = param_1[1];
    }
    else {
      plVar7[2] = (long)(pbVar4 + lVar1);
      lVar5 = lVar5 + lVar1;
      param_1[1] = lVar5;
      if (pbVar4 + lVar1 < pbVar6) {
        uVar3 = (uint)pbVar4[lVar1];
      }
      else {
LAB_00419764:
        uVar3 = (**(code **)(*plVar7 + 0x48))(plVar7);
LAB_00419774:
        lVar5 = param_1[1];
      }
    }
  }
LAB_004196f0:
  if (bVar2) {
    param_1[1] = 0x7fffffffffffffff;
  }
  if (uVar3 == 0xffffffff) {
    lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2254(lVar5,*(uint *)(lVar5 + 0x20) | 2);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 00419824 (496 bytes) name=FUN_00419824

long * FUN_00419824(long *param_1,long param_2)

{
  long lVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  int *piVar6;
  int *piVar7;
  long *plVar8;
  char local_8 [8];
  
  if (param_2 == 1) {
    plVar8 = (long *)FUN_003d8380();
    return plVar8;
  }
  param_1[1] = 0;
  FUN_003d7624(local_8,param_1,1);
  if ((param_2 < 1) || (local_8[0] == '\0')) {
    return param_1;
  }
  plVar8 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
  if ((int *)plVar8[2] < (int *)plVar8[3]) {
    iVar3 = *(int *)plVar8[2];
  }
  else {
    iVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
  }
  lVar5 = param_1[1];
  bVar2 = false;
  while( true ) {
    while (param_2 <= lVar5) {
      if ((iVar3 == -1) || (param_2 != 0x7fffffffffffffff)) goto LAB_00419960;
      param_1[1] = -0x8000000000000000;
                    /* try { // try from 00419918 to 0051991b has its CatchHandler @ 00418fb0 */
      bVar2 = true;
      lVar5 = -0x8000000000000000;
    }
    if (iVar3 == -1) break;
    piVar7 = (int *)plVar8[3];
    piVar6 = (int *)plVar8[2];
    lVar4 = (long)piVar7 - (long)piVar6 >> 2;
                    /* try { // try from 004198c8 to 005198cb has its CatchHandler @ 004198f8 */
    lVar1 = param_2 - lVar5;
    if (lVar4 < param_2 - lVar5) {
      lVar1 = lVar4;
    }
    if (lVar1 < 2) {
      param_1[1] = lVar5 + 1;
      if (piVar6 < piVar7) {
        iVar3 = *piVar6;
        plVar8[2] = (long)(piVar6 + 1);
      }
      else {
        iVar3 = (**(code **)(*plVar8 + 0x50))(plVar8);
      }
      if (iVar3 == -1) goto LAB_004199f4;
      if ((int *)plVar8[3] <= (int *)plVar8[2]) goto LAB_004199e4;
      iVar3 = *(int *)plVar8[2];
      lVar5 = param_1[1];
    }
    else {
      plVar8[2] = (long)(piVar6 + lVar1);
      lVar5 = lVar5 + lVar1;
      param_1[1] = lVar5;
      if (piVar6 + lVar1 < piVar7) {
        iVar3 = piVar6[lVar1];
                    /* catch() { ... } // from try @ 004198c8 with catch @ 004198f8 */
      }
      else {
LAB_004199e4:
        iVar3 = (**(code **)(*plVar8 + 0x48))(plVar8);
LAB_004199f4:
        lVar5 = param_1[1];
      }
    }
  }
LAB_00419960:
  if (bVar2) {
    param_1[1] = 0x7fffffffffffffff;
  }
  if (iVar3 == -1) {
    lVar5 = (long)param_1 + *(long *)(*param_1 + -0x18);
    FUN_003d2c00(lVar5,*(uint *)(lVar5 + 0x20) | 2);
    return param_1;
  }
  return param_1;
}


==================================================================

### FUNC 00419a94 (12 bytes) name=what

/* std::bad_alloc::what() const */

char * std::bad_alloc::what(void)

{
  return "std::bad_alloc";
}


==================================================================

### FUNC 00419aa0 (20 bytes) name=~bad_alloc

/* std::bad_alloc::~bad_alloc() */

void __thiscall std::bad_alloc::~bad_alloc(bad_alloc *this)

{
  *(undefined **)this = PTR_vtable_00501dd0 + 0x10;
  exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 00419ab4 (36 bytes) name=~bad_alloc

/* std::bad_alloc::~bad_alloc() */

void __thiscall std::bad_alloc::~bad_alloc(bad_alloc *this)

{
  ~bad_alloc(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00419ad8 (12 bytes) name=what

/* std::bad_cast::what() const */

char * std::bad_cast::what(void)

{
  return "std::bad_cast";
}


==================================================================

### FUNC 00419ae4 (20 bytes) name=~bad_cast

/* std::bad_cast::~bad_cast() */

void __thiscall std::bad_cast::~bad_cast(bad_cast *this)

{
  *(undefined **)this = PTR_vtable_005018d8 + 0x10;
  exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 00419af8 (36 bytes) name=~bad_cast

/* std::bad_cast::~bad_cast() */

void __thiscall std::bad_cast::~bad_cast(bad_cast *this)

{
  ~bad_cast(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00419b1c (12 bytes) name=what

/* std::bad_typeid::what() const */

char * std::bad_typeid::what(void)

{
  return "std::bad_typeid";
}


==================================================================

### FUNC 00419b28 (20 bytes) name=~bad_typeid

/* std::bad_typeid::~bad_typeid() */

void __thiscall std::bad_typeid::~bad_typeid(bad_typeid *this)

{
  *(undefined **)this = PTR_vtable_00501a98 + 0x10;
  exception::~exception((exception *)this);
  return;
}


==================================================================

### FUNC 00419b3c (36 bytes) name=~bad_typeid

/* std::bad_typeid::~bad_typeid() */

void __thiscall std::bad_typeid::~bad_typeid(bad_typeid *this)

{
  ~bad_typeid(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 00419b60 (304 bytes) name=__dynamic_cast

long __dynamic_cast(long *param_1,undefined8 param_2,long *param_3,long param_4)

{
  uint uVar1;
  long *plVar2;
  long local_18;
  uint local_10;
  uint local_c;
  uint local_8;
  undefined4 local_4;
  
  plVar2 = *(long **)(*param_1 + -8);
  local_18 = 0;
  local_10 = 0;
  local_c = 0;
  local_8 = 0;
  local_4 = 0x10;
  (**(code **)(*plVar2 + 0x38))
            (plVar2,param_4,6,param_3,(long)param_1 + *(long *)(*param_1 + -0x10),param_2,param_1,
             &local_18);
  if (local_18 != 0) {
    if ((local_8 & 6) == 6) {
      return local_18;
    }
    if ((local_c & local_10 & 6) == 6) {
      return local_18;
    }
    if (((local_c & 5) != 4) && (local_8 == 0)) {
      if (param_4 < 0) {
        if ((param_4 != -2) &&
           (uVar1 = (**(code **)(*param_3 + 0x40))(param_3,param_4,local_18,param_2,param_1),
           (uVar1 & 6) == 6)) {
          return local_18;
        }
      }
      else if (param_1 == (long *)(local_18 + param_4)) {
                    /* catch() { ... } // from try @ 0041a5e8 with catch @ 00419c80 */
        return local_18;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00419c90 (52 bytes) name=__cxa_bad_cast

void __cxa_bad_cast(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_005018d8 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501d68,PTR__bad_cast_00501b20);
}


==================================================================

### FUNC 00419cc4 (52 bytes) name=__cxa_bad_typeid

void __cxa_bad_typeid(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_00501a98 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501c60,PTR__bad_typeid_00501af0);
}


==================================================================

### FUNC 00419cf8 (52 bytes) name=__cxa_throw_bad_array_new_length

void __cxa_throw_bad_array_new_length(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_00501c30 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501b00,PTR__bad_array_new_length_00501de0);
}


==================================================================

### FUNC 00419d2c (52 bytes) name=__cxa_throw_bad_array_length

void __cxa_throw_bad_array_length(void)

{
  long *plVar1;
  
  plVar1 = (long *)__cxa_allocate_exception(8);
  *plVar1 = (long)(PTR_vtable_005019f0 + 0x10);
                    /* WARNING: Subroutine does not return */
  __cxa_throw(plVar1,PTR_typeinfo_00501f80,PTR__bad_array_length_00501ae8);
}


==================================================================

### FUNC 00419d60 (68 bytes) name=FUN_00419d60

void FUN_00419d60(long *param_1)

{
  if ((param_1 != (long *)0x0) && (__cxa_begin_catch(), *param_1 + 0xb8b1aabcbcd4d500U < 2)) {
                    /* WARNING: Subroutine does not return */
    __cxxabiv1::__terminate((_func_void *)param_1[-7]);
  }
                    /* WARNING: Subroutine does not return */
  std::terminate();
}


==================================================================

### FUNC 00419da4 (4 bytes) name=_M_safe_bool_dummy

/* std::__exception_ptr::exception_ptr::_M_safe_bool_dummy() */

void std::__exception_ptr::exception_ptr::_M_safe_bool_dummy(void)

{
  return;
}


==================================================================

### FUNC 00419da8 (108 bytes) name=FUN_00419da8

void FUN_00419da8(uint param_1,long param_2)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  int *piVar4;
  long lVar5;
  
  lVar5 = *(long *)(param_2 + -0x50);
  if (1 < param_1) {
                    /* WARNING: Subroutine does not return */
    __cxxabiv1::__terminate(*(_func_void **)(lVar5 + -0x58));
  }
  __cxa_free_dependent_exception(param_2 + -0x50);
  piVar4 = (int *)(lVar5 + -0x80);
  do {
    iVar1 = *piVar4;
    cVar2 = '\x01';
    bVar3 = (bool)ExclusiveMonitorPass(piVar4,0x10);
    if (bVar3) {
      *piVar4 = iVar1 + -1;
      cVar2 = ExclusiveMonitorsStatus();
    }
  } while (cVar2 != '\0');
  if (iVar1 + -1 == 0) {
    if (*(code **)(lVar5 + -0x68) != (code *)0x0) {
      (**(code **)(lVar5 + -0x68))(lVar5);
    }
    __cxa_free_exception(lVar5);
    return;
  }
  return;
}


==================================================================

### FUNC 00419e14 (8 bytes) name=exception_ptr

/* std::__exception_ptr::exception_ptr::exception_ptr() */

void __thiscall std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00419e1c (8 bytes) name=exception_ptr

/* std::__exception_ptr::exception_ptr::exception_ptr(void
   (std::__exception_ptr::exception_ptr::*)()) */

void __thiscall
std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this,_func_void *param_1)

{
  *(undefined8 *)this = 0;
  return;
}


==================================================================

### FUNC 00419e24 (32 bytes) name=_M_addref

/* std::__exception_ptr::exception_ptr::_M_addref() */

void __thiscall std::__exception_ptr::exception_ptr::_M_addref(exception_ptr *this)

{
  char cVar1;
  bool bVar2;
  int *piVar3;
  
  if (*(long *)this != 0) {
    piVar3 = (int *)(*(long *)this + -0x80);
    do {
      cVar1 = '\x01';
      bVar2 = (bool)ExclusiveMonitorPass(piVar3,0x10);
      if (bVar2) {
        *piVar3 = *piVar3 + 1;
        cVar1 = ExclusiveMonitorsStatus();
      }
    } while (cVar1 != '\0');
  }
  return;
}


==================================================================

### FUNC 00419e44 (8 bytes) name=exception_ptr

/* std::__exception_ptr::exception_ptr::exception_ptr(void*) */

void __thiscall
std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this,void *param_1)

{
  *(void **)this = param_1;
  _M_addref(this);
  return;
}


==================================================================

### FUNC 00419e4c (12 bytes) name=exception_ptr

/* std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr const&) */

void __thiscall
std::__exception_ptr::exception_ptr::exception_ptr(exception_ptr *this,exception_ptr *param_1)

{
  *(undefined8 *)this = *(undefined8 *)param_1;
  _M_addref(this);
  return;
}


==================================================================

### FUNC 00419e58 (88 bytes) name=_M_release

/* std::__exception_ptr::exception_ptr::_M_release() */

void __thiscall std::__exception_ptr::exception_ptr::_M_release(exception_ptr *this)

{
  int iVar1;
  char cVar2;
  bool bVar3;
  long lVar4;
  int *piVar5;
  
  lVar4 = *(long *)this;
  if (lVar4 != 0) {
    piVar5 = (int *)(lVar4 + -0x80);
    do {
      iVar1 = *piVar5;
      cVar2 = '\x01';
      bVar3 = (bool)ExclusiveMonitorPass(piVar5,0x10);
      if (bVar3) {
        *piVar5 = iVar1 + -1;
        cVar2 = ExclusiveMonitorsStatus();
      }
    } while (cVar2 != '\0');
    if (iVar1 + -1 == 0) {
      if (*(code **)(lVar4 + -0x68) != (code *)0x0) {
        (**(code **)(lVar4 + -0x68))(*(undefined8 *)this);
      }
      __cxa_free_exception(*(undefined8 *)this);
      *(undefined8 *)this = 0;
    }
  }
  return;
}


==================================================================

### FUNC 00419eb0 (4 bytes) name=~exception_ptr

/* std::__exception_ptr::exception_ptr::~exception_ptr() */

void __thiscall std::__exception_ptr::exception_ptr::~exception_ptr(exception_ptr *this)

{
  (*(code *)PTR__M_release_00500cf8)();
  return;
}


==================================================================

### FUNC 00419eb4 (8 bytes) name=_M_get

/* std::__exception_ptr::exception_ptr::_M_get() const */

undefined8 __thiscall std::__exception_ptr::exception_ptr::_M_get(exception_ptr *this)

{
  return *(undefined8 *)this;
}


==================================================================

### FUNC 00419ebc (20 bytes) name=swap

/* std::__exception_ptr::exception_ptr::swap(std::__exception_ptr::exception_ptr&) */

void __thiscall
std::__exception_ptr::exception_ptr::swap(exception_ptr *this,exception_ptr *param_1)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)this;
  *(undefined8 *)this = *(undefined8 *)param_1;
  *(undefined8 *)param_1 = uVar1;
  return;
}


==================================================================

### FUNC 00419ed0 (64 bytes) name=operator=

/* std::__exception_ptr::exception_ptr::TEMPNAMEPLACEHOLDERVALUE(std::__exception_ptr::exception_ptr
   const&) */

exception_ptr * __thiscall
std::__exception_ptr::exception_ptr::operator=(exception_ptr *this,exception_ptr *param_1)

{
  exception_ptr aeStack_8 [8];
  
  exception_ptr(aeStack_8,param_1);
  swap(aeStack_8,this);
  ~exception_ptr(aeStack_8);
  return this;
}


==================================================================

### FUNC 00419f10 (16 bytes) name=operator!

/* std::__exception_ptr::exception_ptr::TEMPNAMEPLACEHOLDERVALUE() const */

bool __thiscall std::__exception_ptr::exception_ptr::operator!(exception_ptr *this)

{
  return *(long *)this == 0;
}


==================================================================

### FUNC 00419f20 (36 bytes) name=operator.cast.to.function.pointer

/* std::__exception_ptr::exception_ptr::operator void (std::__exception_ptr::exception_ptr::*)()()
   const */

_func_void * __thiscall
std::__exception_ptr::exception_ptr::operator_cast_to_function_pointer(exception_ptr *this)

{
  if (*(long *)this != 0) {
    return (_func_void *)PTR__M_safe_bool_dummy_00501d38;
  }
  return (_func_void *)0x0;
}


==================================================================

### FUNC 00419f44 (12 bytes) name=__cxa_exception_type

/* std::__exception_ptr::exception_ptr::__cxa_exception_type() const */

undefined8 __thiscall std::__exception_ptr::exception_ptr::__cxa_exception_type(exception_ptr *this)

{
  return *(undefined8 *)(*(long *)this + -0x70);
}


==================================================================

### FUNC 00419f50 (20 bytes) name=operator==

/* std::__exception_ptr::TEMPNAMEPLACEHOLDERVALUE(std::__exception_ptr::exception_ptr const&,
   std::__exception_ptr::exception_ptr const&) */

bool std::__exception_ptr::operator==(exception_ptr *param_1,exception_ptr *param_2)

{
  return *(long *)param_1 == *(long *)param_2;
}


==================================================================

### FUNC 00419f64 (28 bytes) name=operator!=

/* std::__exception_ptr::TEMPNAMEPLACEHOLDERVALUE(std::__exception_ptr::exception_ptr const&,
   std::__exception_ptr::exception_ptr const&) */

byte std::__exception_ptr::operator!=(exception_ptr *param_1,exception_ptr *param_2)

{
  byte bVar1;
  
  bVar1 = operator==(param_1,param_2);
  return bVar1 ^ 1;
}


==================================================================

### FUNC 00419f80 (124 bytes) name=current_exception

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::current_exception() */

void std::current_exception(void)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  exception_ptr *in_x8;
  
  puVar1 = (undefined8 *)__cxa_get_globals();
  puVar1 = (undefined8 *)*puVar1;
  if ((puVar1 != (undefined8 *)0x0) && (puVar1[10] + 0xb8b1aabcbcd4d500 < 2)) {
    puVar2 = puVar1 + 0xe;
    if ((puVar1[10] & 1) != 0) {
      puVar2 = (undefined8 *)*puVar1;
    }
    __exception_ptr::exception_ptr::exception_ptr(in_x8,puVar2);
    return;
  }
  __exception_ptr::exception_ptr::exception_ptr(in_x8);
  return;
}


==================================================================

### FUNC 00419ffc (124 bytes) name=rethrow_exception

/* std::rethrow_exception(std::__exception_ptr::exception_ptr) */

void std::rethrow_exception(exception_ptr *param_1)

{
  char cVar1;
  bool bVar2;
  long lVar3;
  long *plVar4;
  int *piVar5;
  
  lVar3 = __exception_ptr::exception_ptr::_M_get(param_1);
  plVar4 = (long *)__cxa_allocate_dependent_exception();
  piVar5 = (int *)(lVar3 + -0x80);
  *plVar4 = lVar3;
  do {
    cVar1 = '\x01';
    bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
    if (bVar2) {
      *piVar5 = *piVar5 + 1;
      cVar1 = ExclusiveMonitorsStatus();
    }
  } while (cVar1 != '\0');
  lVar3 = get_unexpected();
  plVar4[2] = lVar3;
  lVar3 = get_terminate();
  plVar4[3] = lVar3;
  plVar4[10] = 0x474e5543432b2b01;
  plVar4[0xb] = (long)FUN_00419da8;
  _Unwind_RaiseException(plVar4 + 10);
  __cxa_begin_catch(plVar4 + 10);
                    /* WARNING: Subroutine does not return */
  terminate();
}


==================================================================

### FUNC 0041a078 (28 bytes) name=set_new_handler

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::set_new_handler(void (*)()) */

_func_void * std::set_new_handler(_func_void *param_1)

{
  char cVar1;
  bool bVar2;
  _func_void *p_Var3;
  
  do {
    p_Var3 = DAT_00547770;
    cVar1 = '\x01';
    bVar2 = (bool)ExclusiveMonitorPass(0x547770,0x10);
    if (bVar2) {
      cVar1 = ExclusiveMonitorsStatus();
      DAT_00547770 = param_1;
    }
  } while (cVar1 != '\0');
  return p_Var3;
}


==================================================================

### FUNC 0041a094 (16 bytes) name=get_new_handler

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::get_new_handler() */

undefined8 std::get_new_handler(void)

{
  return DAT_00547770;
}


==================================================================

### FUNC 0041a0a4 (384 bytes) name=__verbose_terminate_handler

/* WARNING: Removing unreachable block (ram,0x0041a194) */
/* WARNING: Removing unreachable block (ram,0x0041a228) */
/* WARNING: Removing unreachable block (ram,0x0041a1a8) */
/* __gnu_cxx::__verbose_terminate_handler() */

void __gnu_cxx::__verbose_terminate_handler(void)

{
  FILE *__s;
  long lVar1;
  char *pcVar2;
  char *__s_00;
  size_t __n;
  
  if (DAT_00547778 == '\0') {
    DAT_00547778 = '\x01';
    lVar1 = __cxa_current_exception_type();
    if (lVar1 != 0) {
      pcVar2 = *(char **)(lVar1 + 8);
      if (*pcVar2 == '*') {
        pcVar2 = pcVar2 + 1;
      }
      __s_00 = (char *)__cxa_demangle(pcVar2,0,0);
      __s = (FILE *)(PTR___sF_00501a80 + 0x130);
      fwrite("terminate called after throwing an instance of \'",1,0x30,__s);
      fputs(pcVar2,__s);
      do {
        fwrite(&DAT_0047ae60,1,2,(FILE *)(PTR___sF_00501a80 + 0x130));
        __cxa_rethrow();
        fputs(__s_00,__s);
      } while( true );
    }
    pcVar2 = "terminate called without an active exception\n";
    __n = 0x2d;
  }
  else {
    __n = 0x1d;
    pcVar2 = "terminate called recursively\n";
  }
  fwrite(pcVar2,1,__n,(FILE *)(PTR___sF_00501a80 + 0x130));
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 0041a234 (260 bytes) name=__convert_to_v<float>

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* void std::__convert_to_v<float>(char const*, float&, std::_Ios_Iostate&, int* const&) */

void std::__convert_to_v<float>(char *param_1,float *param_2,_Ios_Iostate *param_3,int **param_4)

{
  char *__s;
  size_t sVar1;
  char *__locale;
  float fVar2;
  float fVar3;
  char *local_8;
  
  __s = setlocale(6,(char *)0x0);
  if (__s == (char *)0x0) {
    __locale = (char *)0x0;
  }
  else {
    sVar1 = strlen(__s);
    __locale = operator_new__(sVar1 + 1);
    memcpy(__locale,__s,sVar1 + 1);
    setlocale(6,"C");
  }
  fVar2 = strtof(param_1,&local_8);
  *param_2 = fVar2;
  if ((local_8 == param_1) || (*local_8 != '\0')) {
    *param_2 = 0.0;
    *(undefined4 *)param_3 = 4;
  }
  else if ((DAT_0041a348 < fVar2) || (fVar2 < DAT_0041a34c)) {
    fVar3 = DAT_0041a348;
    if (fVar2 <= 0.0) {
      fVar3 = DAT_0041a34c;
    }
    *param_2 = fVar3;
    *(undefined4 *)param_3 = 4;
  }
  setlocale(6,__locale);
  if (__locale != (char *)0x0) {
    operator_delete__(__locale);
  }
  return;
}


==================================================================

### FUNC 0041a350 (260 bytes) name=__convert_to_v<double>

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* void std::__convert_to_v<double>(char const*, double&, std::_Ios_Iostate&, int* const&) */

void std::__convert_to_v<double>(char *param_1,double *param_2,_Ios_Iostate *param_3,int **param_4)

{
  char *__s;
  size_t sVar1;
  char *__locale;
  double dVar2;
  double dVar3;
  char *local_8;
  
  __s = setlocale(6,(char *)0x0);
  if (__s == (char *)0x0) {
    __locale = (char *)0x0;
  }
  else {
    sVar1 = strlen(__s);
    __locale = operator_new__(sVar1 + 1);
    memcpy(__locale,__s,sVar1 + 1);
    setlocale(6,"C");
  }
  dVar2 = strtod(param_1,&local_8);
  *param_2 = dVar2;
  if ((local_8 == param_1) || (*local_8 != '\0')) {
    *param_2 = 0.0;
    *(undefined4 *)param_3 = 4;
  }
  else if ((DAT_0041a468 < dVar2) || (dVar2 < DAT_0041a470)) {
    dVar3 = DAT_0041a468;
    if (dVar2 <= 0.0) {
      dVar3 = DAT_0041a470;
    }
    *param_2 = dVar3;
    *(undefined4 *)param_3 = 4;
  }
  setlocale(6,__locale);
  if (__locale != (char *)0x0) {
    operator_delete__(__locale);
  }
  return;
}


==================================================================

### FUNC 0041a480 (308 bytes) name=__convert_to_v<long_double>

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* void std::__convert_to_v<long double>(char const*, long double&, std::_Ios_Iostate&, int* const&)
    */

void std::__convert_to_v<long_double>
               (char *param_1,longdouble *param_2,_Ios_Iostate *param_3,int **param_4)

{
  longdouble lVar1;
  int iVar2;
  char *__s;
  size_t sVar3;
  char *__locale;
  double dVar4;
  longdouble lVar5;
  longdouble extraout_var;
  longdouble lVar6;
  char *local_8;
  
  __s = setlocale(6,(char *)0x0);
  if (__s == (char *)0x0) {
    __locale = (char *)0x0;
  }
  else {
    sVar3 = strlen(__s);
    __locale = operator_new__(sVar3 + 1);
    memcpy(__locale,__s,sVar3 + 1);
    setlocale(6,"C");
  }
  dVar4 = strtold(param_1,&local_8);
  param_2[1] = extraout_var;
  *param_2 = (longdouble)dVar4;
  lVar1 = _DAT_0041a5f0;
  lVar6 = _UNK_0041a5d8;
  lVar5 = _DAT_0041a5d0;
  if ((local_8 == param_1) || (*local_8 != '\0')) {
    param_2[1] = _UNK_0041a5f8;
    *param_2 = lVar1;
    *(undefined4 *)param_3 = 4;
  }
  else {
    iVar2 = __getf2();
    if (iVar2 < 1) {
      iVar2 = __lttf2(dVar4,_DAT_0041a5e0);
      if (-1 < iVar2) goto LAB_0041a518;
    }
    iVar2 = __getf2(dVar4,_DAT_0041a5f0);
    if (iVar2 < 1) {
      lVar5 = _DAT_0041a5e0;
      lVar6 = _DAT_0041a5e8;
    }
    param_2[1] = lVar6;
    *param_2 = lVar5;
                    /* try { // try from 0041a598 to 0051a59b has its CatchHandler @ 0041a5c8 */
    *(undefined4 *)param_3 = 4;
  }
LAB_0041a518:
  setlocale(6,__locale);
  if (__locale != (char *)0x0) {
    operator_delete__(__locale);
  }
  return;
}


==================================================================

### FUNC 0041a600 (52 bytes) name=FUN_0041a600

void FUN_0041a600(undefined8 *param_1,char *param_2)

{
  int iVar1;
  
  *param_1 = 0;
  iVar1 = strcmp(param_2,"C");
  if (iVar1 == 0) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0040f658("locale::facet::_S_create_c_locale name not valid");
}


==================================================================

### FUNC 0041a634 (8 bytes) name=FUN_0041a634

void FUN_0041a634(undefined8 *param_1)

{
  *param_1 = 0;
  return;
}


==================================================================

### FUNC 0041a63c (8 bytes) name=FUN_0041a63c

undefined8 FUN_0041a63c(void)

{
  return 0;
}


==================================================================

### FUNC 0041a644 (8 bytes) name=FUN_0041a644

undefined8 FUN_0041a644(void)

{
  return 0;
}


==================================================================

### FUNC 0041a64c (16 bytes) name=FUN_0041a64c

undefined8
FUN_0041a64c(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 *param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  *param_5 = param_3;
  *param_8 = param_6;
  return 3;
}


==================================================================

### FUNC 0041a65c (12 bytes) name=FUN_0041a65c

undefined8
FUN_0041a65c(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 *param_5)

{
  *param_5 = param_3;
  return 3;
}


==================================================================

### FUNC 0041a668 (16 bytes) name=FUN_0041a668

undefined8
FUN_0041a668(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 *param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  *param_5 = param_3;
  *param_8 = param_6;
  return 3;
}


==================================================================

### FUNC 0041a678 (8 bytes) name=FUN_0041a678

undefined8 FUN_0041a678(void)

{
  return 1;
}


==================================================================

### FUNC 0041a680 (8 bytes) name=FUN_0041a680

undefined8 FUN_0041a680(void)

{
  return 1;
}


==================================================================

### FUNC 0041a688 (16 bytes) name=FUN_0041a688

ulong FUN_0041a688(undefined8 param_1,undefined8 param_2,long param_3,long param_4,ulong param_5)

{
  ulong uVar1;
  
  uVar1 = param_4 - param_3;
  if (param_5 < (ulong)(param_4 - param_3)) {
    uVar1 = param_5;
  }
  return uVar1;
}


==================================================================

### FUNC 0041a698 (8 bytes) name=FUN_0041a698

undefined8 FUN_0041a698(void)

{
  return 1;
}


==================================================================

### FUNC 0041a6a0 (12 bytes) name=FUN_0041a6a0

undefined8
FUN_0041a6a0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
            undefined8 *param_5)

{
  *param_5 = param_3;
  return 3;
}


==================================================================

### FUNC 0041a6ac (8 bytes) name=FUN_0041a6ac

undefined8 FUN_0041a6ac(void)

{
  return 0;
}


==================================================================

### FUNC 0041a6b4 (64 bytes) name=FUN_0041a6b4

void FUN_0041a6b4(long *param_1)

{
  *param_1 = (long)&DAT_004f8c60;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501c38 + 0x10);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 0041a718 (64 bytes) name=FUN_0041a718

void FUN_0041a718(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fe7f0;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501ce8 + 0x10);
  FUN_003ecdfc(param_1);
  return;
}


==================================================================

### FUNC 0041a77c (72 bytes) name=FUN_0041a77c

void FUN_0041a77c(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fe7f0;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501ce8 + 0x10);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041a7e8 (72 bytes) name=FUN_0041a7e8

void FUN_0041a7e8(long *param_1)

{
  *param_1 = (long)&DAT_004f8c60;
  FUN_0041a634(param_1 + 2);
  *param_1 = (long)(PTR_DAT_00501c38 + 0x10);
  FUN_003ecdfc(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041a854 (60 bytes) name=FUN_0041a854

void FUN_0041a854(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &DAT_004f8c60;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 0041a8b4 (72 bytes) name=FUN_0041a8b4

void FUN_0041a8b4(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 local_8;
  
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &DAT_004f8c60;
  local_8 = param_2;
  uVar1 = FUN_0041a63c(&local_8);
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 0041a8fc (60 bytes) name=FUN_0041a8fc

void FUN_0041a8fc(undefined8 *param_1,long param_2)

{
  undefined8 uVar1;
  
  *(uint *)(param_1 + 1) = (uint)(param_2 != 0);
  *param_1 = &PTR_FUN_004fe7f0;
  uVar1 = FUN_003ed450();
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 0041a95c (72 bytes) name=FUN_0041a95c

void FUN_0041a95c(undefined8 *param_1,undefined8 param_2,long param_3)

{
  undefined8 uVar1;
  undefined8 local_8;
  
                    /* catch() { ... } // from try @ 0041b0d4 with catch @ 0041a960 */
  *(uint *)(param_1 + 1) = (uint)(param_3 != 0);
  *param_1 = &PTR_FUN_004fe7f0;
  local_8 = param_2;
  uVar1 = FUN_0041a63c(&local_8);
  param_1[2] = uVar1;
  return;
}


==================================================================

### FUNC 0041a9a4 (340 bytes) name=FUN_0041a9a4

undefined1
FUN_0041a9a4(undefined8 param_1,mbstate_t *param_2,wchar_t *param_3,wchar_t *param_4,ulong *param_5,
            char *param_6,char *param_7,ulong *param_8)

{
  undefined1 uVar1;
  size_t sVar2;
  char acStack_10 [8];
  mbstate_t local_8;
  
  local_8 = *param_2;
  sVar2 = __ctype_get_mb_cur_max();
  if (param_6 + (sVar2 * ((long)param_4 - (long)param_3 >> 2) - (long)param_7) == (char *)0x0) {
    if (param_3 < param_4) {
      do {
        sVar2 = wcrtomb(param_6,*param_3,&local_8);
        if (sVar2 == 0xffffffffffffffff) goto LAB_0041aa74;
        param_3 = param_3 + 1;
        *param_2 = local_8;
        param_6 = param_6 + sVar2;
      } while (param_3 < param_4);
    }
    uVar1 = 0;
  }
  else {
    uVar1 = param_3 < param_4;
    if (param_3 < param_4) {
      if (param_6 < param_7) {
        do {
          sVar2 = wcrtomb(acStack_10,*param_3,&local_8);
          if (sVar2 == 0xffffffffffffffff) goto LAB_0041aa74;
          if ((ulong)((long)param_7 - (long)param_6) < sVar2) {
            uVar1 = 1;
            goto LAB_0041aa78;
          }
          memcpy(param_6,acStack_10,sVar2);
          param_6 = param_6 + sVar2;
          *param_2 = local_8;
          param_3 = param_3 + 1;
        } while ((param_6 < param_7) && (param_3 < param_4));
        uVar1 = param_3 < param_4;
      }
    }
  }
LAB_0041aa78:
  *param_5 = (ulong)param_3;
  *param_8 = (ulong)param_6;
  return uVar1;
LAB_0041aa74:
  uVar1 = 2;
  goto LAB_0041aa78;
}


==================================================================

### FUNC 0041aaf8 (244 bytes) name=FUN_0041aaf8

undefined1
FUN_0041aaf8(undefined8 param_1,mbstate_t *param_2,char *param_3,char *param_4,ulong *param_5,
            wchar_t *param_6,wchar_t *param_7,ulong *param_8)

{
  undefined1 uVar1;
  size_t sVar2;
  mbstate_t local_8;
  
  uVar1 = param_3 < param_4;
  local_8 = *param_2;
  if (((bool)uVar1) && (param_6 < param_7)) {
    while (sVar2 = mbrtowc(param_6,param_3,(long)param_4 - (long)param_3,&local_8),
          sVar2 != 0xffffffffffffffff) {
      if (sVar2 == 0xfffffffffffffffe) {
        *param_5 = (ulong)param_3;
        *param_8 = (ulong)param_6;
        return 1;
      }
      if (sVar2 == 0) {
        *param_6 = L'\0';
        sVar2 = 1;
      }
      param_3 = param_3 + sVar2;
      *param_2 = local_8;
      param_6 = param_6 + 1;
      uVar1 = param_3 < param_4;
      if ((!(bool)uVar1) || (param_7 <= param_6)) goto LAB_0041aba8;
    }
    uVar1 = 2;
  }
LAB_0041aba8:
  *param_5 = (ulong)param_3;
  *param_8 = (ulong)param_6;
  return uVar1;
}


==================================================================

### FUNC 0041abec (28 bytes) name=FUN_0041abec

bool FUN_0041abec(void)

{
  size_t sVar1;
  
  sVar1 = __ctype_get_mb_cur_max();
  return sVar1 == 1;
}


==================================================================

### FUNC 0041ac18 (20 bytes) name=FUN_0041ac18

void FUN_0041ac18(void)

{
  __ctype_get_mb_cur_max();
  return;
}


==================================================================

### FUNC 0041ac3c (200 bytes) name=FUN_0041ac3c

int FUN_0041ac3c(undefined8 param_1,mbstate_t *param_2,char *param_3,char *param_4,long param_5)

{
  size_t sVar1;
  int iVar2;
  mbstate_t local_8;
  
  local_8 = *param_2;
  iVar2 = 0;
  if ((param_3 < param_4) && (param_5 != 0)) {
    while (sVar1 = mbrtowc((wchar_t *)0x0,param_3,(long)param_4 - (long)param_3,&local_8),
          1 < sVar1 + 2) {
      if (sVar1 == 0) {
        param_3 = param_3 + 1;
        *param_2 = local_8;
        iVar2 = iVar2 + 1;
      }
      else {
        param_3 = param_3 + sVar1;
        *param_2 = local_8;
        iVar2 = (int)sVar1 + iVar2;
      }
      if (param_4 <= param_3) {
        return iVar2;
      }
      param_5 = param_5 + -1;
      if (param_5 == 0) {
        return iVar2;
      }
    }
  }
  return iVar2;
}


==================================================================

### FUNC 0041ad04 (40 bytes) name=FUN_0041ad04

uint FUN_0041ad04(undefined8 param_1,char *param_2,char *param_3)

{
  int iVar1;
  
  iVar1 = strcoll(param_2,param_3);
  return (uint)(iVar1 != 0) | iVar1 >> 0x1e;
}


==================================================================

### FUNC 0041ad2c (16 bytes) name=FUN_0041ad2c

void FUN_0041ad2c(undefined8 param_1,char *param_2,char *param_3,size_t param_4)

{
  strxfrm(param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0041ad3c (40 bytes) name=FUN_0041ad3c

uint FUN_0041ad3c(undefined8 param_1,wchar_t *param_2,wchar_t *param_3)

{
  int iVar1;
  
  iVar1 = wcscoll(param_2,param_3);
  return (uint)(iVar1 != 0) | iVar1 >> 0x1e;
}


==================================================================

### FUNC 0041ad64 (16 bytes) name=FUN_0041ad64

void FUN_0041ad64(undefined8 param_1,wchar_t *param_2,wchar_t *param_3,size_t param_4)

{
  wcsxfrm(param_2,param_3,param_4);
  return;
}


==================================================================

### FUNC 0041ad74 (76 bytes) name=FUN_0041ad74

void FUN_0041ad74(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501f70 + 0x10);
  FUN_0041e6c8();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 0041adf4 (76 bytes) name=FUN_0041adf4

void FUN_0041adf4(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501938 + 0x10);
  FUN_00422248();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 0041ae74 (84 bytes) name=FUN_0041ae74

void FUN_0041ae74(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501f70 + 0x10);
  FUN_0041e6c8();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041aefc (84 bytes) name=FUN_0041aefc

void FUN_0041aefc(long *param_1)

{
  *param_1 = (long)(PTR_DAT_00501938 + 0x10);
  FUN_00422248();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041af84 (156 bytes) name=FUN_0041af84

undefined1 FUN_0041af84(ulong *param_1,ulong param_2)

{
  ulong *puVar1;
  ulong uVar2;
  undefined1 local_1;
  
  if (param_1[8] != 0) {
    return *(undefined1 *)(param_1[8] + param_2);
  }
  do {
    puVar1 = param_1;
code_r0x0041afb4:
    switch((char)puVar1[7]) {
    case '\0':
      return *(undefined1 *)(puVar1[0xe] + param_2);
    case '\x01':
      uVar2 = *(ulong *)puVar1[0xe];
      param_1 = (ulong *)puVar1[0xe];
      if (uVar2 <= param_2) {
        param_2 = param_2 - uVar2;
        param_1 = (ulong *)puVar1[0xf];
      }
      break;
    case '\x02':
    case '\x03':
      (**(code **)(*(long *)puVar1[0xe] + 0x10))((long *)puVar1[0xe],param_2,1,&local_1);
      return local_1;
    default:
      goto code_r0x0041afb4;
    }
  } while( true );
}


==================================================================

### FUNC 0041b020 (44 bytes) name=FUN_0041b020

void FUN_0041b020(undefined8 *param_1)

{
  FUN_0041e124();
  *param_1 = &PTR_FUN_004fe880;
  return;
}


==================================================================

### FUNC 0041b04c (172 bytes) name=FUN_0041b04c

void FUN_0041b04c(undefined8 *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  char cVar1;
  undefined8 uVar2;
  
  FUN_0041e124();
  *param_1 = &PTR_FUN_004fe880;
                    /* try { // try from 0041b084 to 0051b087 has its CatchHandler @ 0041b0b4 */
  FUN_004322fc(param_1 + 0xd,param_2,param_3);
  cVar1 = FUN_00432400(param_1 + 0xd);
  if (cVar1 == '\0') {
    return;
  }
                    /* catch() { ... } // from try @ 0041b084 with catch @ 0041b0b4 */
  *(undefined4 *)(param_1 + 0xf) = param_3;
  param_1[0x14] = param_4;
  FUN_0041e2b0(param_1);
  uVar2 = param_1[0x13];
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  param_1[1] = uVar2;
                    /* try { // try from 0041b0d4 to 0051b0d7 has its CatchHandler @ 0041a960 */
  param_1[2] = uVar2;
  param_1[3] = uVar2;
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  return;
}


==================================================================

### FUNC 0041b10c (168 bytes) name=FUN_0041b10c

void FUN_0041b10c(undefined8 *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  char cVar1;
  undefined8 uVar2;
  
  FUN_0041e124();
  *param_1 = &PTR_FUN_004fe880;
  FUN_0043227c(param_1 + 0xd,param_2,param_3);
  cVar1 = FUN_00432400(param_1 + 0xd);
  if (cVar1 == '\0') {
    return;
  }
  *(undefined4 *)(param_1 + 0xf) = param_3;
  param_1[0x14] = param_4;
  FUN_0041e2b0(param_1);
  uVar2 = param_1[0x13];
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  param_1[1] = uVar2;
  param_1[2] = uVar2;
  param_1[3] = uVar2;
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  return;
}


==================================================================

### FUNC 0041b1c8 (8 bytes) name=FUN_0041b1c8

void FUN_0041b1c8(long param_1)

{
  FUN_00432410(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 0041b1d0 (8 bytes) name=FUN_0041b1d0

void FUN_0041b1d0(long param_1)

{
  FUN_00432438(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 0041b1d8 (156 bytes) name=FUN_0041b1d8

undefined4 FUN_0041b1d8(ulong *param_1,ulong param_2)

{
  ulong *puVar1;
  ulong uVar2;
  undefined4 local_4;
  
  if (param_1[8] != 0) {
    return *(undefined4 *)(param_1[8] + param_2 * 4);
  }
  do {
    puVar1 = param_1;
code_r0x0041b208:
    switch((char)puVar1[7]) {
    case '\0':
      return *(undefined4 *)(puVar1[0xe] + param_2 * 4);
    case '\x01':
      uVar2 = *(ulong *)puVar1[0xe];
      param_1 = (ulong *)puVar1[0xe];
      if (uVar2 <= param_2) {
        param_2 = param_2 - uVar2;
        param_1 = (ulong *)puVar1[0xf];
      }
      break;
    case '\x02':
    case '\x03':
      (**(code **)(*(long *)puVar1[0xe] + 0x10))((long *)puVar1[0xe],param_2,1,&local_4);
      return local_4;
    default:
      goto code_r0x0041b208;
    }
  } while( true );
}


==================================================================

### FUNC 0041b274 (44 bytes) name=FUN_0041b274

void FUN_0041b274(undefined8 *param_1)

{
  FUN_00421348();
  *param_1 = &PTR_FUN_004fe900;
  return;
}


==================================================================

### FUNC 0041b2a0 (172 bytes) name=FUN_0041b2a0

void FUN_0041b2a0(undefined8 *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  char cVar1;
  undefined8 uVar2;
  
  FUN_00421348();
  *param_1 = &PTR_FUN_004fe900;
  FUN_004322fc(param_1 + 0xd,param_2,param_3);
  cVar1 = FUN_00432400(param_1 + 0xd);
  if (cVar1 == '\0') {
    return;
  }
  *(undefined4 *)(param_1 + 0xf) = param_3;
  param_1[0x14] = param_4;
  FUN_004214d4(param_1);
  uVar2 = param_1[0x13];
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  param_1[1] = uVar2;
  param_1[2] = uVar2;
  param_1[3] = uVar2;
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  return;
}


==================================================================

### FUNC 0041b360 (168 bytes) name=FUN_0041b360

void FUN_0041b360(undefined8 *param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  char cVar1;
  undefined8 uVar2;
  
  FUN_00421348();
  *param_1 = &PTR_FUN_004fe900;
  FUN_0043227c(param_1 + 0xd,param_2,param_3);
  cVar1 = FUN_00432400(param_1 + 0xd);
  if (cVar1 == '\0') {
    return;
  }
  *(undefined4 *)(param_1 + 0xf) = param_3;
  param_1[0x14] = param_4;
  FUN_004214d4(param_1);
  uVar2 = param_1[0x13];
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  param_1[1] = uVar2;
  param_1[2] = uVar2;
  param_1[3] = uVar2;
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  return;
}


==================================================================

### FUNC 0041b41c (8 bytes) name=FUN_0041b41c

void FUN_0041b41c(long param_1)

{
  FUN_00432410(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 0041b424 (8 bytes) name=FUN_0041b424

void FUN_0041b424(long param_1)

{
  FUN_00432438(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 0041b42c (8 bytes) name=FUN_0041b42c

undefined8 FUN_0041b42c(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 0041b434 (140 bytes) name=FUN_0041b434

void FUN_0041b434(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8cc0;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
                    /* catch() { ... } // from try @ 0041ba84 with catch @ 0041b470 */
  return;
}


==================================================================

### FUNC 0041b4c0 (148 bytes) name=FUN_0041b4c0

void FUN_0041b4c0(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8cc0;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041b554 (44 bytes) name=FUN_0041b554

void FUN_0041b554(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8cc0;
  FUN_00414378(param_1 + 1);
  return;
}


==================================================================

### FUNC 0041b5a8 (28 bytes) name=FUN_0041b5a8

void FUN_0041b5a8(long param_1)

{
  *(undefined **)(param_1 + 0x18) = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x18);
  return;
}


==================================================================

### FUNC 0041b5c4 (8 bytes) name=FUN_0041b5c4

void FUN_0041b5c4(long param_1)

{
  FUN_0041b5a8(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041b5cc (16 bytes) name=FUN_0041b5cc

void FUN_0041b5cc(long *param_1)

{
  FUN_0041b5a8((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041b5dc (56 bytes) name=FUN_0041b5dc

void FUN_0041b5dc(void *param_1)

{
  *(undefined **)((long)param_1 + 0x18) = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c((long)param_1 + 0x18);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041b614 (8 bytes) name=FUN_0041b614

void FUN_0041b614(long param_1)

{
  FUN_0041b5dc(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041b61c (16 bytes) name=FUN_0041b61c

void FUN_0041b61c(long *param_1)

{
  FUN_0041b5dc((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041b62c (28 bytes) name=FUN_0041b62c

void FUN_0041b62c(long param_1)

{
  *(undefined **)(param_1 + 0x18) = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x18);
  return;
}


==================================================================

### FUNC 0041b648 (8 bytes) name=FUN_0041b648

void FUN_0041b648(long param_1)

{
  FUN_0041b62c(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041b650 (16 bytes) name=FUN_0041b650

void FUN_0041b650(long *param_1)

{
  FUN_0041b62c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041b660 (56 bytes) name=FUN_0041b660

void FUN_0041b660(void *param_1)

{
  *(undefined **)((long)param_1 + 0x18) = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c((long)param_1 + 0x18);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041b698 (8 bytes) name=FUN_0041b698

void FUN_0041b698(long param_1)

{
  FUN_0041b660(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041b6a0 (16 bytes) name=FUN_0041b6a0

void FUN_0041b6a0(long *param_1)

{
  FUN_0041b660((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041b6b0 (4 bytes) name=FUN_0041b6b0

void FUN_0041b6b0(void)

{
  return;
}


==================================================================

### FUNC 0041b6b4 (144 bytes) name=FUN_0041b6b4

void FUN_0041b6b4(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),param_3);
  lVar1 = param_2[3];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[4];
  FUN_003d2728((long)param_1 + lVar1 + 0x10,param_3);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  return;
}


==================================================================

### FUNC 0041b75c (192 bytes) name=FUN_0041b75c

void FUN_0041b75c(undefined8 *param_1,undefined8 param_2)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 3;
  FUN_003d347c(puVar1);
  param_1[0x1e] = 0;
  *(undefined1 *)(param_1 + 0x1f) = 0;
  *(undefined1 *)((long)param_1 + 0xf9) = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  *param_1 = &DAT_004fea68;
  param_1[1] = 0;
  param_1[3] = &DAT_004fea90;
  FUN_003d2728(puVar1,param_2);
  param_1[2] = &DAT_004fea18;
  param_1[3] = &DAT_004fea40;
  FUN_003d2728(puVar1,param_2);
  *param_1 = &PTR_FUN_004f8d38;
  param_1[3] = &PTR_FUN_004f8d88;
  param_1[2] = &PTR_FUN_004f8d60;
  return;
}


==================================================================

### FUNC 0041b840 (76 bytes) name=FUN_0041b840

void FUN_0041b840(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  lVar1 = param_2[3];
  param_1[2] = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18) + 0x10) = param_2[4];
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 0041b88c (136 bytes) name=FUN_0041b88c

void FUN_0041b88c(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[3];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[4];
  FUN_003d2728((long)param_1 + lVar1 + 0x10,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  return;
}


==================================================================

### FUNC 0041b92c (188 bytes) name=FUN_0041b92c

void FUN_0041b92c(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 3;
  FUN_003d347c(puVar1);
  param_1[0x1e] = 0;
  *(undefined1 *)(param_1 + 0x1f) = 0;
  *(undefined1 *)((long)param_1 + 0xf9) = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  *param_1 = &DAT_004fea68;
  param_1[1] = 0;
  param_1[3] = &DAT_004fea90;
  FUN_003d2728(puVar1,0);
  param_1[2] = &DAT_004fea18;
  param_1[3] = &DAT_004fea40;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f8d38;
  param_1[3] = &PTR_FUN_004f8d88;
  param_1[2] = &PTR_FUN_004f8d60;
  return;
}


==================================================================

### FUNC 0041ba0c (4 bytes) name=FUN_0041ba0c

void FUN_0041ba0c(void)

{
  return;
}


==================================================================

### FUNC 0041ba10 (144 bytes) name=FUN_0041ba10

void FUN_0041ba10(long *param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
                    /* try { // try from 0041ba34 to 0051ba37 has its CatchHandler @ 0041ba64 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),param_3);
  lVar1 = param_2[3];
  param_1[2] = lVar1;
                    /* catch() { ... } // from try @ 0041ba34 with catch @ 0041ba64 */
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[4];
  FUN_003d3008((long)param_1 + lVar1 + 0x10,param_3);
  lVar1 = *param_2;
  *param_1 = lVar1;
                    /* try { // try from 0041ba84 to 0051ba87 has its CatchHandler @ 0041b470 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  return;
}


==================================================================

### FUNC 0041bab8 (192 bytes) name=FUN_0041bab8

void FUN_0041bab8(undefined8 *param_1,undefined8 param_2)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 3;
  FUN_003d347c(puVar1);
  param_1[0x1e] = 0;
  *(undefined4 *)(param_1 + 0x1f) = 0;
  *(undefined1 *)((long)param_1 + 0xfc) = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  *param_1 = &DAT_004feb08;
  param_1[1] = 0;
  param_1[3] = &DAT_004feb30;
  FUN_003d3008(puVar1,param_2);
  param_1[2] = &DAT_004feab8;
  param_1[3] = &DAT_004feae0;
  FUN_003d3008(puVar1,param_2);
  *param_1 = &PTR_FUN_004f8df8;
  param_1[3] = &PTR_FUN_004f8e48;
  param_1[2] = &DAT_004f8e20;
  return;
}


==================================================================

### FUNC 0041bb9c (76 bytes) name=FUN_0041bb9c

void FUN_0041bb9c(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  lVar1 = param_2[3];
  param_1[2] = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18) + 0x10) = param_2[4];
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 0041bbe8 (136 bytes) name=FUN_0041bbe8

void FUN_0041bbe8(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[3];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[4];
  FUN_003d3008((long)param_1 + lVar1 + 0x10,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[5];
  param_1[2] = param_2[6];
  return;
}


==================================================================

### FUNC 0041bc88 (188 bytes) name=FUN_0041bc88

void FUN_0041bc88(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 3;
  FUN_003d347c(puVar1);
  param_1[0x1e] = 0;
  *(undefined4 *)(param_1 + 0x1f) = 0;
  *(undefined1 *)((long)param_1 + 0xfc) = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  *param_1 = &DAT_004feb08;
  param_1[1] = 0;
  param_1[3] = &DAT_004feb30;
  FUN_003d3008(puVar1,0);
  param_1[2] = &DAT_004feab8;
  param_1[3] = &DAT_004feae0;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f8df8;
  param_1[3] = &PTR_FUN_004f8e48;
  param_1[2] = &DAT_004f8e20;
  return;
}


==================================================================

### FUNC 0041bd68 (8 bytes) name=FUN_0041bd68

undefined8 FUN_0041bd68(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 0041bd70 (8 bytes) name=FUN_0041bd70

undefined8 FUN_0041bd70(long param_1)

{
  return *(undefined8 *)(param_1 + 8);
}


==================================================================

### FUNC 0041bd78 (140 bytes) name=FUN_0041bd78

void FUN_0041bd78(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041be04 (140 bytes) name=FUN_0041be04

void FUN_0041be04(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
                    /* catch() { ... } // from try @ 0041c37c with catch @ 0041be20 */
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041be90 (140 bytes) name=FUN_0041be90

void FUN_0041be90(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041bf1c (140 bytes) name=FUN_0041bf1c

void FUN_0041bf1c(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041bfa8 (140 bytes) name=FUN_0041bfa8

void FUN_0041bfa8(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041c034 (140 bytes) name=FUN_0041c034

void FUN_0041c034(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041c0c0 (140 bytes) name=FUN_0041c0c0

void FUN_0041c0c0(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041c14c (140 bytes) name=FUN_0041c14c

void FUN_0041c14c(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041c1d8 (140 bytes) name=FUN_0041c1d8

void FUN_0041c1d8(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  return;
}


==================================================================

### FUNC 0041c264 (148 bytes) name=FUN_0041c264

void FUN_0041c264(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c2f8 (148 bytes) name=FUN_0041c2f8

void FUN_0041c2f8(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
                    /* try { // try from 0041c37c to 0051c37f has its CatchHandler @ 0041be20 */
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
                    /* catch() { ... } // from try @ 0041c32c with catch @ 0041c35c */
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
                    /* try { // try from 0041c32c to 0051c32f has its CatchHandler @ 0041c35c */
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c38c (148 bytes) name=FUN_0041c38c

void FUN_0041c38c(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c420 (148 bytes) name=FUN_0041c420

void FUN_0041c420(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8f60;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c4b4 (148 bytes) name=FUN_0041c4b4

void FUN_0041c4b4(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c548 (148 bytes) name=FUN_0041c548

void FUN_0041c548(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c5dc (148 bytes) name=FUN_0041c5dc

void FUN_0041c5dc(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c670 (148 bytes) name=FUN_0041c670

void FUN_0041c670(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
                    /* catch() { ... } // from try @ 0041ce64 with catch @ 0041c6f0 */
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c704 (148 bytes) name=FUN_0041c704

void FUN_0041c704(exception *param_1)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  long lVar4;
  int *piVar5;
  
  *(undefined ***)param_1 = &PTR_FUN_004f8e70;
  lVar4 = *(long *)(param_1 + 8);
  if ((undefined *)(lVar4 + -0x18) != PTR_DAT_00501f30) {
    if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
      iVar3 = *(int *)(lVar4 + -8);
      *(int *)(lVar4 + -8) = iVar3 + -1;
    }
    else {
      piVar5 = (int *)(lVar4 + -8);
      do {
        iVar3 = *piVar5;
        cVar1 = '\x01';
        bVar2 = (bool)ExclusiveMonitorPass(piVar5,0x10);
        if (bVar2) {
          *piVar5 = iVar3 + -1;
          cVar1 = ExclusiveMonitorsStatus();
        }
      } while (cVar1 != '\0');
    }
    if (iVar3 < 1) {
      operator_delete((undefined *)(lVar4 + -0x18));
    }
  }
  std::exception::~exception(param_1);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041c798 (44 bytes) name=FUN_0041c798

void FUN_0041c798(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8e70;
  FUN_00414378(param_1 + 1);
  return;
}


==================================================================

### FUNC 0041c7d8 (56 bytes) name=FUN_0041c7d8

void FUN_0041c7d8(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8e70;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8ea0;
  return;
}


==================================================================

### FUNC 0041c824 (56 bytes) name=FUN_0041c824

void FUN_0041c824(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8e70;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8ed0;
  return;
}


==================================================================

### FUNC 0041c870 (56 bytes) name=FUN_0041c870

void FUN_0041c870(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8e70;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8f00;
  return;
}


==================================================================

### FUNC 0041c8bc (56 bytes) name=FUN_0041c8bc

void FUN_0041c8bc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8e70;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8f30;
  return;
}


==================================================================

### FUNC 0041c908 (44 bytes) name=FUN_0041c908

void FUN_0041c908(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8f60;
  FUN_00414378(param_1 + 1);
  return;
}


==================================================================

### FUNC 0041c948 (56 bytes) name=FUN_0041c948

void FUN_0041c948(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8f60;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8f90;
  return;
}


==================================================================

### FUNC 0041c994 (56 bytes) name=FUN_0041c994

void FUN_0041c994(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8f60;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8fc0;
  return;
}


==================================================================

### FUNC 0041c9e0 (56 bytes) name=FUN_0041c9e0

void FUN_0041c9e0(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f8f60;
  FUN_00414378(param_1 + 1);
  *param_1 = &PTR_FUN_004f8ff0;
  return;
}


==================================================================

### FUNC 0041ca2c (116 bytes) name=FUN_0041ca2c

long FUN_0041ca2c(long param_1,long param_2,long param_3)

{
  char cVar1;
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 == '\0') {
    if ((param_2 == 0) && (param_3 == 0)) {
      *(undefined8 *)(param_1 + 0xa0) = 1;
    }
    else if ((param_2 != 0) && (0 < param_3)) {
      *(long *)(param_1 + 0x98) = param_2;
      *(long *)(param_1 + 0xa0) = param_3;
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0041caa0 (116 bytes) name=FUN_0041caa0

long FUN_0041caa0(long param_1,long param_2,long param_3)

{
  char cVar1;
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 == '\0') {
    if ((param_2 == 0) && (param_3 == 0)) {
      *(undefined8 *)(param_1 + 0xa0) = 1;
    }
    else if ((param_2 != 0) && (0 < param_3)) {
      *(long *)(param_1 + 0x98) = param_2;
      *(long *)(param_1 + 0xa0) = param_3;
      return param_1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 0041cb14 (176 bytes) name=FUN_0041cb14

long FUN_0041cb14(long param_1)

{
  long lVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  
  if ((*(uint *)(param_1 + 0x78) >> 3 & 1) != 0) {
    cVar2 = FUN_00432400(param_1 + 0x68);
    if (cVar2 != '\0') {
      lVar5 = *(long *)(param_1 + 0x18) - *(long *)(param_1 + 0x10);
      if (*(long **)(param_1 + 200) != (long *)0x0) {
        iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x28))();
        if (-1 < iVar3) {
          lVar4 = FUN_004326b0(param_1 + 0x68);
          iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x40))(*(long **)(param_1 + 200));
          lVar1 = 0;
          if ((long)iVar3 != 0) {
            lVar1 = lVar4 / (long)iVar3;
          }
          lVar5 = lVar5 + lVar1;
        }
        return lVar5;
      }
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
  }
  return -1;
}


==================================================================

### FUNC 0041cbc4 (180 bytes) name=FUN_0041cbc4

long FUN_0041cbc4(long param_1)

{
  long lVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  
  if ((*(uint *)(param_1 + 0x78) >> 3 & 1) != 0) {
    cVar2 = FUN_00432400(param_1 + 0x68);
    if (cVar2 != '\0') {
      lVar5 = *(long *)(param_1 + 0x18) - *(long *)(param_1 + 0x10) >> 2;
      if (*(long **)(param_1 + 200) != (long *)0x0) {
        iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x28))();
        if (-1 < iVar3) {
          lVar4 = FUN_004326b0(param_1 + 0x68);
          iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x40))(*(long **)(param_1 + 200));
          lVar1 = 0;
          if ((long)iVar3 != 0) {
            lVar1 = lVar4 / (long)iVar3;
          }
          lVar5 = lVar5 + lVar1;
        }
        return lVar5;
      }
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
  }
  return -1;
}


==================================================================

### FUNC 0041cc78 (64 bytes) name=FUN_0041cc78

int FUN_0041cc78(long *param_1)

{
  int iVar1;
  
  iVar1 = 0;
  if ((ulong)param_1[4] < (ulong)param_1[5]) {
    iVar1 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    iVar1 = -(uint)(iVar1 == -1);
  }
  return iVar1;
}


==================================================================

### FUNC 0041ccb8 (64 bytes) name=FUN_0041ccb8

int FUN_0041ccb8(long *param_1)

{
  int iVar1;
  
  iVar1 = 0;
  if ((ulong)param_1[4] < (ulong)param_1[5]) {
    iVar1 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    iVar1 = -(uint)(iVar1 == -1);
  }
  return iVar1;
}


==================================================================

### FUNC 0041ccf8 (364 bytes) name=FUN_0041ccf8

uint FUN_0041ccf8(long *param_1,uint param_2)

{
  char cVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  undefined1 *puVar5;
  long lVar6;
  
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    return 0xffffffff;
  }
  if (*(char *)((long)param_1 + 0xaa) == '\0') {
    uVar4 = param_1[2];
    cVar1 = (char)param_1[0x18];
    if ((ulong)param_1[1] < uVar4) {
      param_1[2] = uVar4 - 1;
      uVar3 = (uint)*(byte *)(uVar4 - 1);
      goto LAB_0041cd48;
    }
  }
  else {
    iVar2 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    if (iVar2 == -1) {
      return 0xffffffff;
    }
    lVar6 = param_1[0x13];
    cVar1 = (char)param_1[0x18];
    param_1[1] = lVar6;
    param_1[2] = lVar6;
    param_1[3] = lVar6;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xaa) = 0;
  }
  lVar6 = (**(code **)(*param_1 + 0x20))(param_1,0xffffffffffffffff,1,0x18);
  if (lVar6 == -1) {
    return 0xffffffff;
  }
  uVar3 = (**(code **)(*param_1 + 0x48))(param_1);
  if (uVar3 == 0xffffffff) {
    return 0xffffffff;
  }
LAB_0041cd48:
  if ((param_2 == 0xffffffff) < (param_2 == uVar3)) {
    return param_2;
  }
  if (param_2 != 0xffffffff) {
    if (cVar1 != '\0') {
      return 0xffffffff;
    }
                    /* try { // try from 0041ce14 to 0051ce17 has its CatchHandler @ 0041ce44 */
    if ((char)param_1[0x18] == '\0') {
      puVar5 = (undefined1 *)((long)param_1 + 0xab);
      lVar6 = param_1[2];
      param_1[0x17] = param_1[3];
                    /* catch() { ... } // from try @ 0041ce14 with catch @ 0041ce44 */
      param_1[1] = (long)puVar5;
      param_1[2] = (long)puVar5;
      param_1[0x16] = lVar6;
      param_1[3] = (long)param_1 + 0xac;
      *(undefined1 *)(param_1 + 0x18) = 1;
    }
    else {
      puVar5 = (undefined1 *)param_1[2];
    }
    *(undefined1 *)((long)param_1 + 0xa9) = 1;
    *puVar5 = (char)param_2;
    return param_2;
  }
  return 0;
}


==================================================================

### FUNC 0041ce64 (364 bytes) name=FUN_0041ce64

int FUN_0041ce64(long *param_1,int param_2)

{
  int iVar1;
  ulong uVar2;
  int *piVar3;
  long lVar4;
  char cVar5;
  
                    /* try { // try from 0041ce64 to 0051ce67 has its CatchHandler @ 0041c6f0 */
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    return -1;
  }
  if (*(char *)((long)param_1 + 0xaa) == '\0') {
    uVar2 = param_1[2];
    cVar5 = (char)param_1[0x18];
    if ((ulong)param_1[1] < uVar2) {
      iVar1 = *(int *)(uVar2 - 4);
      param_1[2] = uVar2 - 4;
      goto LAB_0041ceb4;
    }
  }
  else {
    iVar1 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    if (iVar1 == -1) {
      return -1;
    }
    lVar4 = param_1[0x13];
    cVar5 = (char)param_1[0x18];
    param_1[1] = lVar4;
    param_1[2] = lVar4;
    param_1[3] = lVar4;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xaa) = 0;
  }
  lVar4 = (**(code **)(*param_1 + 0x20))(param_1,0xffffffffffffffff,1,0x18);
  if (lVar4 == -1) {
    return -1;
  }
  iVar1 = (**(code **)(*param_1 + 0x48))(param_1);
  if (iVar1 == -1) {
    return -1;
  }
LAB_0041ceb4:
  if ((param_2 == -1) < (param_2 == iVar1)) {
    return param_2;
  }
  if (param_2 != -1) {
    if (cVar5 != '\0') {
      return -1;
    }
    if ((char)param_1[0x18] == '\0') {
      piVar3 = (int *)((long)param_1 + 0xac);
      lVar4 = param_1[2];
      param_1[0x17] = param_1[3];
      param_1[1] = (long)piVar3;
      param_1[2] = (long)piVar3;
      param_1[0x16] = lVar4;
      param_1[3] = (long)(param_1 + 0x16);
      *(undefined1 *)(param_1 + 0x18) = 1;
    }
    else {
      piVar3 = (int *)param_1[2];
    }
    *(undefined1 *)((long)param_1 + 0xa9) = 1;
    *piVar3 = param_2;
    return param_2;
  }
  return 0;
}


==================================================================

### FUNC 0041cfd0 (352 bytes) name=FUN_0041cfd0

long FUN_0041cfd0(long param_1,undefined8 param_2,long param_3)

{
  uint uVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  
  uVar1 = *(uint *)(param_1 + 0x78);
  if (*(long **)(param_1 + 200) == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x30))();
  if (((cVar2 == '\0') || ((uVar1 & 0x11) == 0)) || (*(char *)(param_1 + 0xa9) != '\0')) {
LAB_0041d0a8:
    lVar4 = FUN_003fc7f0(param_1,param_2,param_3);
    return lVar4;
  }
  lVar3 = *(long *)(param_1 + 0x30) - *(long *)(param_1 + 0x28);
  lVar4 = lVar3;
  if ((*(char *)(param_1 + 0xaa) == '\0') &&
     (lVar4 = *(ulong *)(param_1 + 0xa0) - 1, *(ulong *)(param_1 + 0xa0) < 2)) {
    lVar4 = lVar3;
  }
  if (0x3ff < lVar4) {
    lVar4 = 0x400;
  }
  if (param_3 < lVar4) goto LAB_0041d0a8;
  lVar3 = *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20);
  lVar4 = FUN_00432584(param_1 + 0x68,*(long *)(param_1 + 0x20),lVar3,param_2,param_3);
  if (lVar4 != lVar3 + param_3) goto LAB_0041d08c;
  if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
    uVar6 = *(undefined8 *)(param_1 + 0x98);
    *(undefined8 *)(param_1 + 8) = uVar6;
    *(undefined8 *)(param_1 + 0x10) = uVar6;
    *(undefined8 *)(param_1 + 0x18) = uVar6;
LAB_0041d0e0:
    *(undefined8 *)(param_1 + 0x28) = 0;
    *(undefined8 *)(param_1 + 0x20) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
  }
  else {
    lVar5 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar5;
    *(long *)(param_1 + 0x10) = lVar5;
    *(long *)(param_1 + 0x18) = lVar5;
    if (*(ulong *)(param_1 + 0xa0) < 2) goto LAB_0041d0e0;
    *(long *)(param_1 + 0x28) = lVar5;
    *(long *)(param_1 + 0x20) = lVar5;
    *(ulong *)(param_1 + 0x30) = lVar5 + (*(ulong *)(param_1 + 0xa0) - 1);
  }
  *(undefined1 *)(param_1 + 0xaa) = 1;
LAB_0041d08c:
  lVar5 = lVar4 - lVar3;
  if (lVar4 <= lVar3) {
    lVar5 = 0;
  }
  return lVar5;
}


==================================================================

### FUNC 0041d130 (360 bytes) name=FUN_0041d130

long FUN_0041d130(long param_1,undefined8 param_2,long param_3)

{
  uint uVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  
  uVar1 = *(uint *)(param_1 + 0x78);
  if (*(long **)(param_1 + 200) == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x30))();
  if (((cVar2 == '\0') || ((uVar1 & 0x11) == 0)) || (*(char *)(param_1 + 0xa9) != '\0')) {
LAB_0041d210:
    lVar4 = FUN_003fc994(param_1,param_2,param_3);
    return lVar4;
  }
  lVar3 = *(long *)(param_1 + 0x30) - *(long *)(param_1 + 0x28) >> 2;
  lVar4 = lVar3;
  if ((*(char *)(param_1 + 0xaa) == '\0') &&
     (lVar4 = *(ulong *)(param_1 + 0xa0) - 1, *(ulong *)(param_1 + 0xa0) < 2)) {
    lVar4 = lVar3;
  }
  if (0x3ff < lVar4) {
    lVar4 = 0x400;
  }
  if (param_3 < lVar4) goto LAB_0041d210;
  lVar3 = *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20) >> 2;
  lVar4 = FUN_00432584(param_1 + 0x68,*(long *)(param_1 + 0x20),lVar3,param_2,param_3);
                    /* catch() { ... } // from try @ 0041d814 with catch @ 0041d1f0 */
  if (lVar4 != lVar3 + param_3) goto LAB_0041d1f4;
  if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
    uVar6 = *(undefined8 *)(param_1 + 0x98);
    *(undefined8 *)(param_1 + 8) = uVar6;
    *(undefined8 *)(param_1 + 0x10) = uVar6;
    *(undefined8 *)(param_1 + 0x18) = uVar6;
LAB_0041d248:
    *(undefined8 *)(param_1 + 0x28) = 0;
    *(undefined8 *)(param_1 + 0x20) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
  }
  else {
    lVar5 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar5;
    *(long *)(param_1 + 0x10) = lVar5;
    *(long *)(param_1 + 0x18) = lVar5;
    if (*(ulong *)(param_1 + 0xa0) < 2) goto LAB_0041d248;
    *(long *)(param_1 + 0x28) = lVar5;
    *(long *)(param_1 + 0x20) = lVar5;
    *(ulong *)(param_1 + 0x30) = lVar5 + *(ulong *)(param_1 + 0xa0) * 4 + -4;
  }
  *(undefined1 *)(param_1 + 0xaa) = 1;
LAB_0041d1f4:
  lVar5 = lVar4 - lVar3;
  if (lVar4 <= lVar3) {
    lVar5 = 0;
  }
  return lVar5;
}


==================================================================

### FUNC 0041d298 (1144 bytes) name=FUN_0041d298

ulong FUN_0041d298(long *param_1)

{
  bool bVar1;
  char cVar2;
  int iVar3;
  byte *pbVar4;
  size_t sVar5;
  byte *pbVar6;
  void *pvVar7;
  byte *pbVar8;
  long lVar9;
  ulong uVar10;
  size_t sVar11;
  ulong uVar12;
  ulong uVar13;
  void *local_8;
  
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    return 0xffffffff;
  }
  if (*(char *)((long)param_1 + 0xaa) == '\0') {
    pbVar4 = (byte *)param_1[2];
  }
  else {
    uVar12 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    if ((int)uVar12 == -1) {
      return uVar12;
    }
    pbVar4 = (byte *)param_1[0x13];
    param_1[1] = (long)pbVar4;
    param_1[2] = (long)pbVar4;
    param_1[3] = (long)pbVar4;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xaa) = 0;
  }
  if ((char)param_1[0x18] == '\0') {
    pbVar8 = (byte *)param_1[3];
    pbVar6 = pbVar4;
  }
  else {
    pbVar6 = (byte *)param_1[0x16];
    pbVar8 = (byte *)param_1[0x17];
    if ((byte *)param_1[1] != pbVar4) {
      pbVar6 = pbVar6 + 1;
    }
    param_1[1] = param_1[0x13];
    param_1[0x16] = (long)pbVar6;
    param_1[2] = (long)pbVar6;
    param_1[3] = (long)pbVar8;
    *(undefined1 *)(param_1 + 0x18) = 0;
  }
  if (pbVar6 < pbVar8) goto LAB_0041d3c4;
  if ((ulong)param_1[0x14] < 2) {
    uVar12 = 1;
  }
  else {
    uVar12 = param_1[0x14] - 1;
  }
  if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
  if (cVar2 == '\0') {
    iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x28))((long *)param_1[0x19]);
    if (iVar3 < 1) {
      iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x40))((long *)param_1[0x19]);
      uVar13 = (uVar12 - 1) + (long)iVar3;
      uVar10 = uVar12;
    }
    else {
      uVar13 = (long)iVar3 * uVar12;
      uVar10 = uVar13;
    }
    sVar5 = param_1[0x1d] - param_1[0x1c];
    lVar9 = uVar10 - sVar5;
    if ((long)uVar10 <= (long)sVar5) {
      lVar9 = 0;
    }
    if (((*(char *)((long)param_1 + 0xa9) != '\0') && (param_1[3] == param_1[1])) && (sVar5 != 0)) {
      lVar9 = 0;
    }
    if (param_1[0x1b] < (long)uVar13) {
      pvVar7 = operator_new__(uVar13);
      sVar11 = 0;
      if (sVar5 != 0) {
        memcpy(pvVar7,(void *)param_1[0x1c],sVar5);
        sVar11 = sVar5;
      }
      if ((void *)param_1[0x1a] != (void *)0x0) {
        operator_delete__((void *)param_1[0x1a]);
      }
      param_1[0x1a] = (long)pvVar7;
      param_1[0x1b] = uVar13;
    }
    else if (sVar5 == 0) {
      pvVar7 = (void *)param_1[0x1a];
      sVar11 = 0;
    }
    else {
      memmove((void *)param_1[0x1a],(void *)param_1[0x1c],sVar5);
      pvVar7 = (void *)param_1[0x1a];
      sVar11 = sVar5;
    }
    uVar13 = (long)pvVar7 + sVar11;
    param_1[0x1c] = (long)pvVar7;
    param_1[0x1d] = uVar13;
    iVar3 = 0;
    *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x84);
    sVar5 = 0;
    if (0 < lVar9) goto LAB_0041d570;
    bVar1 = false;
    do {
      pvVar7 = (void *)param_1[1];
      local_8 = pvVar7;
      if ((ulong)param_1[0x1c] < uVar13) {
        iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x20))
                          ((long *)param_1[0x19],(long)param_1 + 0x84,param_1[0x1c],uVar13,
                           param_1 + 0x1c,pvVar7,(long)pvVar7 + uVar12,&local_8);
        pvVar7 = (void *)param_1[1];
        if (iVar3 == 3) goto LAB_0041d5d8;
LAB_0041d548:
        sVar5 = (long)local_8 - (long)pvVar7;
        if (iVar3 == 2) goto LAB_0041d38c;
      }
      else {
        if (iVar3 != 3) goto LAB_0041d548;
LAB_0041d5d8:
        uVar13 = param_1[0x1d] - param_1[0x1a];
        sVar5 = uVar12;
        if (uVar13 < uVar12) {
          sVar5 = uVar13;
        }
        memcpy(pvVar7,(void *)param_1[0x1a],sVar5);
        param_1[0x1c] = param_1[0x1a] + sVar5;
      }
      if ((sVar5 == 0) <= bVar1) goto LAB_0041d38c;
      uVar13 = param_1[0x1d];
      lVar9 = 1;
LAB_0041d570:
      if (param_1[0x1b] < (long)((uVar13 - param_1[0x1a]) + lVar9)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f928("basic_filebuf::underflow codecvt::max_length() is not valid");
      }
      lVar9 = FUN_004324c0(param_1 + 0xd,uVar13,lVar9);
      if (lVar9 == 0) {
        bVar1 = true;
      }
      else {
        bVar1 = false;
        if (lVar9 == -1) goto LAB_0041d38c;
      }
      uVar13 = param_1[0x1d] + lVar9;
      param_1[0x1d] = uVar13;
    } while( true );
  }
  sVar5 = FUN_004324c0(param_1 + 0xd,param_1[1],uVar12);
  if (sVar5 == 0) {
    iVar3 = 0;
    if ((*(uint *)(param_1 + 0xf) >> 4 & 1) != 0) {
      lVar9 = param_1[0x13];
      param_1[1] = lVar9;
      param_1[2] = lVar9;
      param_1[3] = lVar9;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined1 *)((long)param_1 + 0xa9) = 0;
      return 0xffffffff;
    }
    goto LAB_0041d334;
  }
  if ((long)sVar5 < 1) goto LAB_0041d620;
LAB_0041d394:
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    pbVar6 = (byte *)param_1[0x13];
    param_1[1] = (long)pbVar6;
    param_1[2] = (long)pbVar6;
    param_1[3] = (long)pbVar6;
  }
  else {
    pbVar6 = (byte *)param_1[0x13];
    param_1[1] = (long)pbVar6;
    param_1[2] = (long)pbVar6;
    param_1[3] = (long)(pbVar6 + sVar5);
  }
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  *(undefined1 *)((long)param_1 + 0xa9) = 1;
LAB_0041d3c4:
  return (ulong)*pbVar6;
LAB_0041d38c:
  if ((long)sVar5 < 1) {
    if (!bVar1) {
      if (iVar3 == 2) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f928("basic_filebuf::underflow invalid byte sequence in file");
      }
LAB_0041d620:
                    /* WARNING: Subroutine does not return */
      FUN_0040f928(&DAT_0047b680);
    }
LAB_0041d334:
    lVar9 = param_1[0x13];
    param_1[1] = lVar9;
    param_1[2] = lVar9;
    param_1[3] = lVar9;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xa9) = 0;
    if (iVar3 != 1) {
      return 0xffffffff;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0040f928("basic_filebuf::underflow incomplete character in file");
  }
  goto LAB_0041d394;
}


==================================================================

### FUNC 0041d710 (1156 bytes) name=FUN_0041d710

ulong FUN_0041d710(long *param_1)

{
  bool bVar1;
  char cVar2;
  int iVar3;
  uint *puVar4;
  size_t sVar5;
  void *__dest;
  uint *puVar6;
  long lVar7;
  uint *puVar8;
  wchar_t *__s1;
  ulong uVar9;
  size_t sVar10;
  ulong uVar11;
  ulong uVar12;
  wchar_t *local_8;
  
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    return 0xffffffff;
  }
  if (*(char *)((long)param_1 + 0xaa) == '\0') {
    puVar4 = (uint *)param_1[2];
  }
  else {
    uVar11 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    if ((int)uVar11 == -1) {
      return uVar11;
    }
    puVar4 = (uint *)param_1[0x13];
    param_1[1] = (long)puVar4;
    param_1[2] = (long)puVar4;
    param_1[3] = (long)puVar4;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xaa) = 0;
  }
  if ((char)param_1[0x18] == '\0') {
    puVar6 = (uint *)param_1[3];
  }
  else {
    puVar8 = (uint *)param_1[1];
    puVar6 = (uint *)param_1[0x17];
    param_1[1] = param_1[0x13];
    puVar4 = (uint *)(param_1[0x16] + (ulong)(puVar8 != puVar4) * 4);
    param_1[3] = (long)puVar6;
    param_1[0x16] = (long)puVar4;
    param_1[2] = (long)puVar4;
    *(undefined1 *)(param_1 + 0x18) = 0;
  }
  if (puVar4 < puVar6) goto LAB_0041d83c;
  if ((ulong)param_1[0x14] < 2) {
    uVar11 = 1;
  }
  else {
    uVar11 = param_1[0x14] - 1;
  }
  if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
  if (cVar2 == '\0') {
    iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x28))((long *)param_1[0x19]);
    if (iVar3 < 1) {
      iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x40))((long *)param_1[0x19]);
      uVar12 = (uVar11 - 1) + (long)iVar3;
      uVar9 = uVar11;
    }
    else {
      uVar12 = (long)iVar3 * uVar11;
      uVar9 = uVar12;
    }
    sVar5 = param_1[0x1d] - param_1[0x1c];
    lVar7 = uVar9 - sVar5;
    if ((long)uVar9 <= (long)sVar5) {
      lVar7 = 0;
    }
    if (((*(char *)((long)param_1 + 0xa9) != '\0') && (param_1[3] == param_1[1])) && (sVar5 != 0)) {
      lVar7 = 0;
    }
    if (param_1[0x1b] < (long)uVar12) {
      __dest = operator_new__(uVar12);
      sVar10 = 0;
      if (sVar5 != 0) {
        memcpy(__dest,(void *)param_1[0x1c],sVar5);
        sVar10 = sVar5;
      }
      if ((void *)param_1[0x1a] != (void *)0x0) {
        operator_delete__((void *)param_1[0x1a]);
      }
      param_1[0x1a] = (long)__dest;
      param_1[0x1b] = uVar12;
    }
    else if (sVar5 == 0) {
      __dest = (void *)param_1[0x1a];
      sVar10 = 0;
    }
    else {
                    /* catch() { ... } // from try @ 0041dae4 with catch @ 0041db28 */
      memmove((void *)param_1[0x1a],(void *)param_1[0x1c],sVar5);
                    /* try { // try from 0041db38 to 0051db3b has its CatchHandler @ 0041d9dc */
      __dest = (void *)param_1[0x1a];
      sVar10 = sVar5;
                    /* catch() { ... } // from try @ 0041dbc4 with catch @ 0041db3c
                       catch() { ... } // from try @ 0041dc78 with catch @ 0041db3c
                       catch() { ... } // from try @ 0041dce0 with catch @ 0041db3c
                       catch() { ... } // from try @ 0041dd08 with catch @ 0041db3c
                       catch() { ... } // from try @ 0041dd1c with catch @ 0041db3c */
    }
    uVar12 = (long)__dest + sVar10;
    param_1[0x1c] = (long)__dest;
    param_1[0x1d] = uVar12;
    *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x84);
    iVar3 = 0;
    sVar5 = 0;
    if (0 < lVar7) goto LAB_0041d9f4;
    bVar1 = false;
    do {
      __s1 = (wchar_t *)param_1[1];
      local_8 = __s1;
      if ((ulong)param_1[0x1c] < uVar12) {
        iVar3 = (**(code **)(*(long *)param_1[0x19] + 0x20))
                          ((long *)param_1[0x19],(long)param_1 + 0x84,param_1[0x1c],uVar12,
                           param_1 + 0x1c,__s1,__s1 + uVar11,&local_8);
        __s1 = (wchar_t *)param_1[1];
        if (iVar3 == 3) goto LAB_0041da5c;
LAB_0041d9c8:
        sVar5 = (long)local_8 - (long)__s1 >> 2;
        if (iVar3 == 2) goto LAB_0041d804;
      }
      else {
        if (iVar3 != 3) goto LAB_0041d9c8;
LAB_0041da5c:
        uVar12 = param_1[0x1d] - param_1[0x1a];
        sVar5 = uVar11;
        if (uVar12 < uVar11) {
          sVar5 = uVar12;
        }
        wmemcpy(__s1,(wchar_t *)param_1[0x1a],sVar5);
        param_1[0x1c] = param_1[0x1a] + sVar5;
      }
                    /* catch() { ... } // from try @ 0041da1c with catch @ 0041d9dc
                       catch() { ... } // from try @ 0041daec with catch @ 0041d9dc
                       catch() { ... } // from try @ 0041db38 with catch @ 0041d9dc */
      if ((sVar5 == 0) <= bVar1) goto LAB_0041d804;
      uVar12 = param_1[0x1d];
      lVar7 = 1;
LAB_0041d9f4:
      if (param_1[0x1b] < (long)((uVar12 - param_1[0x1a]) + lVar7)) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f928("basic_filebuf::underflow codecvt::max_length() is not valid");
      }
      lVar7 = FUN_004324c0(param_1 + 0xd,uVar12,lVar7);
                    /* try { // try from 0041da1c to 0051daa3 has its CatchHandler @ 0041d9dc */
      if (lVar7 == 0) {
        bVar1 = true;
      }
      else {
        bVar1 = false;
        if (lVar7 == -1) goto LAB_0041d804;
      }
      uVar12 = param_1[0x1d] + lVar7;
      param_1[0x1d] = uVar12;
    } while( true );
  }
  sVar5 = FUN_004324c0(param_1 + 0xd,param_1[1],uVar11);
  if (sVar5 == 0) {
    iVar3 = 0;
    if ((*(uint *)(param_1 + 0xf) >> 4 & 1) != 0) {
      lVar7 = param_1[0x13];
      param_1[1] = lVar7;
      param_1[2] = lVar7;
      param_1[3] = lVar7;
                    /* try { // try from 0041dae4 to 0051dae7 has its CatchHandler @ 0041db28 */
      param_1[5] = 0;
      param_1[4] = 0;
                    /* try { // try from 0041daec to 0051db07 has its CatchHandler @ 0041d9dc */
      param_1[6] = 0;
      *(undefined1 *)((long)param_1 + 0xa9) = 0;
      return 0xffffffff;
    }
    goto LAB_0041d7ac;
  }
  if ((long)sVar5 < 1) goto LAB_0041daa4;
LAB_0041d80c:
  if ((*(uint *)(param_1 + 0xf) >> 3 & 1) == 0) {
    puVar4 = (uint *)param_1[0x13];
    param_1[1] = (long)puVar4;
    param_1[2] = (long)puVar4;
    param_1[3] = (long)puVar4;
  }
  else {
                    /* try { // try from 0041d814 to 0051d817 has its CatchHandler @ 0041d1f0 */
    puVar4 = (uint *)param_1[0x13];
    param_1[1] = (long)puVar4;
    param_1[2] = (long)puVar4;
    param_1[3] = (long)(puVar4 + sVar5);
  }
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
  *(undefined1 *)((long)param_1 + 0xa9) = 1;
LAB_0041d83c:
  return (ulong)*puVar4;
LAB_0041d804:
  if ((long)sVar5 < 1) {
    if (!bVar1) {
      if (iVar3 == 2) {
                    /* WARNING: Subroutine does not return */
        FUN_0040f928("basic_filebuf::underflow invalid byte sequence in file");
      }
LAB_0041daa4:
                    /* WARNING: Subroutine does not return */
      FUN_0040f928(&DAT_0047b680);
    }
LAB_0041d7ac:
    lVar7 = param_1[0x13];
    param_1[1] = lVar7;
    param_1[2] = lVar7;
    param_1[3] = lVar7;
                    /* try { // try from 0041d7c4 to 0051d7c7 has its CatchHandler @ 0041d7f4 */
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xa9) = 0;
    if (iVar3 != 1) {
                    /* catch() { ... } // from try @ 0041d7c4 with catch @ 0041d7f4 */
      return 0xffffffff;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0040f928("basic_filebuf::underflow incomplete character in file");
  }
  goto LAB_0041d80c;
}


==================================================================

### FUNC 0041db94 (644 bytes) name=FUN_0041db94

long FUN_0041db94(long *param_1,wchar_t *param_2,long param_3)

{
  uint uVar1;
  char cVar2;
  int iVar3;
  wchar_t *pwVar4;
  long lVar5;
  wchar_t *pwVar6;
  size_t __n;
  long lVar7;
  
  if ((char)param_1[0x18] == '\0') {
    lVar7 = 0;
    if (*(char *)((long)param_1 + 0xaa) != '\0') {
                    /* try { // try from 0041dcd8 to 0051dcdb has its CatchHandler @ 0041dd0c */
      iVar3 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
                    /* try { // try from 0041dce0 to 0051dcef has its CatchHandler @ 0041db3c */
      if (iVar3 == -1) {
        return 0;
      }
      lVar5 = param_1[0x13];
      param_1[1] = lVar5;
      param_1[2] = lVar5;
      param_1[3] = lVar5;
                    /* catch() { ... } // from try @ 0041dc70 with catch @ 0041dcf8 */
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined1 *)((long)param_1 + 0xaa) = 0;
                    /* try { // try from 0041dd08 to 0051dd0b has its CatchHandler @ 0041db3c */
    }
  }
  else {
    pwVar4 = (wchar_t *)param_1[2];
                    /* try { // try from 0041dbc4 to 0051dc43 has its CatchHandler @ 0041db3c */
    if (param_3 < 1) {
      lVar7 = 0;
      pwVar6 = (wchar_t *)param_1[1];
    }
    else {
      pwVar6 = (wchar_t *)param_1[1];
      if (pwVar4 == pwVar6) {
        param_3 = param_3 + -1;
        lVar7 = 1;
        *param_2 = *pwVar4;
        pwVar4 = pwVar4 + 1;
        param_2 = param_2 + 1;
      }
      else {
        lVar7 = 0;
      }
    }
    lVar5 = param_1[0x16] + (ulong)(pwVar6 != pwVar4) * 4;
    param_1[1] = param_1[0x13];
    param_1[0x16] = lVar5;
    param_1[2] = lVar5;
    param_1[3] = param_1[0x17];
    *(undefined1 *)(param_1 + 0x18) = 0;
  }
  uVar1 = *(uint *)(param_1 + 0xf);
  if ((ulong)param_1[0x14] < 2) {
    lVar5 = 1;
  }
  else {
    lVar5 = param_1[0x14] - 1;
  }
  if (param_3 <= lVar5) {
LAB_0041dd0c:
                    /* catch() { ... } // from try @ 0041dcd8 with catch @ 0041dd0c */
    lVar5 = FUN_003fc8c8(param_1,param_2,param_3);
                    /* try { // try from 0041dd1c to 0051dd1f has its CatchHandler @ 0041db3c */
                    /* catch() { ... } // from try @ 0041de60 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041df68 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e050 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e29c with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e430 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e48c with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e5c0 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e5d4 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e670 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e684 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e698 with catch @ 0041dd20
                       catch() { ... } // from try @ 0041e6ac with catch @ 0041dd20 */
    return lVar7 + lVar5;
  }
  if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
  if ((cVar2 == '\0') || ((uVar1 >> 3 & 1) == 0)) goto LAB_0041dd0c;
  lVar5 = param_1[3] - param_1[2];
  __n = lVar5 >> 2;
  pwVar4 = param_2;
  if (__n != 0) {
    lVar7 = lVar7 + __n;
    param_3 = param_3 - __n;
    pwVar4 = (wchar_t *)((long)param_2 + lVar5);
    wmemcpy(param_2,(wchar_t *)param_1[2],__n);
    param_1[2] = param_1[2] + lVar5;
  }
  while( true ) {
                    /* try { // try from 0041dc70 to 0051dc73 has its CatchHandler @ 0041dcf8 */
                    /* try { // try from 0041dc78 to 0051dc9f has its CatchHandler @ 0041db3c */
    lVar5 = FUN_004324c0(param_1 + 0xd,pwVar4,param_3);
    if (lVar5 == -1) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_filebuf::xsgetn error reading the file");
    }
    if (lVar5 == 0) break;
    param_3 = param_3 - lVar5;
    lVar7 = lVar7 + lVar5;
    if (param_3 == 0) goto LAB_0041dd88;
    pwVar4 = pwVar4 + lVar5;
  }
  if (param_3 != 0) {
    lVar5 = param_1[0x13];
    param_1[1] = lVar5;
    param_1[2] = lVar5;
    param_1[3] = lVar5;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xa9) = 0;
    return lVar7;
  }
LAB_0041dd88:
  if ((*(uint *)(param_1 + 0xf) & 0x11) == 0) {
    lVar5 = param_1[0x13];
    param_1[1] = lVar5;
    param_1[2] = lVar5;
    param_1[3] = lVar5;
  }
  else {
    lVar5 = param_1[0x13];
    param_1[1] = lVar5;
    param_1[2] = lVar5;
    param_1[3] = lVar5;
    if (1 < (ulong)param_1[0x14]) {
      param_1[5] = lVar5;
      param_1[4] = lVar5;
      param_1[6] = lVar5 + param_1[0x14] * 4 + -4;
      goto LAB_0041ddb4;
    }
  }
  param_1[5] = 0;
  param_1[4] = 0;
  param_1[6] = 0;
LAB_0041ddb4:
  *(undefined1 *)((long)param_1 + 0xa9) = 1;
  return lVar7;
}


==================================================================

### FUNC 0041de18 (664 bytes) name=FUN_0041de18

long FUN_0041de18(long *param_1,undefined1 *param_2,long param_3)

{
  uint uVar1;
  size_t __n;
  char cVar2;
  int iVar3;
  undefined1 *puVar4;
  undefined1 *puVar5;
  long lVar6;
  long lVar7;
  
  if ((char)param_1[0x18] == '\0') {
    lVar7 = 0;
    if (*(char *)((long)param_1 + 0xaa) != '\0') {
      iVar3 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
                    /* try { // try from 0041df60 to 0051df63 has its CatchHandler @ 0041e674 */
      if (iVar3 == -1) {
        return 0;
      }
      lVar6 = param_1[0x13];
                    /* try { // try from 0041df68 to 0051dfff has its CatchHandler @ 0041dd20 */
      param_1[1] = lVar6;
      param_1[2] = lVar6;
      param_1[3] = lVar6;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined1 *)((long)param_1 + 0xaa) = 0;
    }
  }
  else {
    puVar4 = (undefined1 *)param_1[2];
    if (param_3 < 1) {
      lVar7 = 0;
      puVar5 = (undefined1 *)param_1[1];
    }
    else {
      puVar5 = (undefined1 *)param_1[1];
      if (puVar4 == puVar5) {
        lVar7 = 1;
        *param_2 = *puVar4;
        param_3 = param_3 + -1;
        param_2 = param_2 + 1;
        puVar4 = (undefined1 *)(param_1[2] + 1);
        param_1[2] = (long)puVar4;
        if ((char)param_1[0x18] == '\0') goto LAB_0041de84;
        puVar5 = (undefined1 *)param_1[1];
      }
      else {
        lVar7 = 0;
      }
    }
    lVar6 = param_1[0x16];
                    /* try { // try from 0041de60 to 0051df37 has its CatchHandler @ 0041dd20 */
    if (puVar4 != puVar5) {
      lVar6 = lVar6 + 1;
    }
    param_1[1] = param_1[0x13];
    param_1[0x16] = lVar6;
    param_1[2] = lVar6;
    param_1[3] = param_1[0x17];
    *(undefined1 *)(param_1 + 0x18) = 0;
  }
LAB_0041de84:
  uVar1 = *(uint *)(param_1 + 0xf);
  if ((ulong)param_1[0x14] < 2) {
    lVar6 = 1;
  }
  else {
    lVar6 = param_1[0x14] - 1;
  }
  if (param_3 <= lVar6) {
LAB_0041df88:
    lVar6 = FUN_003fc714(param_1,param_2,param_3);
    return lVar7 + lVar6;
  }
  if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
  if ((cVar2 == '\0') || ((uVar1 >> 3 & 1) == 0)) goto LAB_0041df88;
  __n = param_1[3] - param_1[2];
  puVar4 = param_2;
  if (__n != 0) {
    puVar4 = param_2 + __n;
    lVar7 = lVar7 + __n;
    memcpy(param_2,(void *)param_1[2],__n);
    param_3 = param_3 - __n;
    param_1[2] = param_1[2] + __n;
  }
  while( true ) {
    lVar6 = FUN_004324c0(param_1 + 0xd,puVar4,param_3);
    if (lVar6 == -1) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_filebuf::xsgetn error reading the file");
    }
    if (lVar6 == 0) break;
    param_3 = param_3 - lVar6;
    lVar7 = lVar7 + lVar6;
    if (param_3 == 0) goto LAB_0041e020;
    puVar4 = puVar4 + lVar6;
  }
  if (param_3 != 0) {
    lVar6 = param_1[0x13];
    param_1[1] = lVar6;
    param_1[2] = lVar6;
    param_1[3] = lVar6;
    param_1[5] = 0;
    param_1[4] = 0;
    param_1[6] = 0;
    *(undefined1 *)((long)param_1 + 0xa9) = 0;
    return lVar7;
  }
LAB_0041e020:
  if ((*(uint *)(param_1 + 0xf) & 0x11) == 0) {
    lVar6 = param_1[0x13];
    param_1[1] = lVar6;
    param_1[2] = lVar6;
    param_1[3] = lVar6;
  }
  else {
    lVar6 = param_1[0x13];
    param_1[1] = lVar6;
    param_1[2] = lVar6;
    param_1[3] = lVar6;
    if (1 < (ulong)param_1[0x14]) {
      param_1[5] = lVar6;
      param_1[4] = lVar6;
      param_1[6] = lVar6 + (param_1[0x14] - 1U);
      goto LAB_0041e04c;
    }
  }
  param_1[5] = 0;
  param_1[4] = 0;
                    /* try { // try from 0041e048 to 0051e04b has its CatchHandler @ 0041e660 */
  param_1[6] = 0;
LAB_0041e04c:
                    /* try { // try from 0041e050 to 0051e253 has its CatchHandler @ 0041dd20 */
  *(undefined1 *)((long)param_1 + 0xa9) = 1;
  return lVar7;
}


==================================================================

### FUNC 0041e0b0 (56 bytes) name=FUN_0041e0b0

void FUN_0041e0b0(long param_1)

{
  undefined8 uVar1;
  
  if (*(char *)(param_1 + 0xc0) == '\0') {
    uVar1 = *(undefined8 *)(param_1 + 0x10);
    *(long *)(param_1 + 8) = param_1 + 0xab;
    *(long *)(param_1 + 0x10) = param_1 + 0xab;
    *(undefined8 *)(param_1 + 0xb0) = uVar1;
    *(undefined8 *)(param_1 + 0xb8) = *(undefined8 *)(param_1 + 0x18);
    *(long *)(param_1 + 0x18) = param_1 + 0xac;
    *(undefined1 *)(param_1 + 0xc0) = 1;
  }
  return;
}


==================================================================

### FUNC 0041e0e8 (60 bytes) name=FUN_0041e0e8

void FUN_0041e0e8(long param_1)

{
  long lVar1;
  
  if (*(char *)(param_1 + 0xc0) != '\0') {
    lVar1 = *(long *)(param_1 + 0xb0);
    if (*(long *)(param_1 + 0x10) != *(long *)(param_1 + 8)) {
      lVar1 = lVar1 + 1;
    }
    *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
    *(long *)(param_1 + 0xb0) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
    *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
    *(undefined1 *)(param_1 + 0xc0) = 0;
  }
  return;
}


==================================================================

### FUNC 0041e124 (348 bytes) name=FUN_0041e124

void FUN_0041e124(long *param_1)

{
  long *plVar1;
  undefined *puVar2;
  char cVar3;
  long lVar4;
  
  plVar1 = param_1 + 7;
  puVar2 = PTR_DAT_00501bb0 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar2;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(plVar1);
  *param_1 = (long)&PTR_FUN_004fecf0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[0xc] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  FUN_00432208(param_1 + 0xd,param_1 + 8);
  *(undefined4 *)(param_1 + 0xf) = 0;
  *(undefined1 *)((long)param_1 + 0x7c) = 0;
  param_1[0x14] = 0x400;
  *(undefined1 *)((long)param_1 + 0x7d) = 0;
  *(undefined1 *)((long)param_1 + 0x7e) = 0;
  *(undefined1 *)((long)param_1 + 0x7f) = 0;
  *(undefined1 *)(param_1 + 0x10) = 0;
  *(undefined1 *)((long)param_1 + 0x81) = 0;
  *(undefined1 *)((long)param_1 + 0x82) = 0;
  *(undefined1 *)((long)param_1 + 0x83) = 0;
  *(undefined1 *)((long)param_1 + 0x84) = 0;
  *(undefined1 *)((long)param_1 + 0x85) = 0;
  *(undefined1 *)((long)param_1 + 0x86) = 0;
  *(undefined1 *)((long)param_1 + 0x87) = 0;
  *(undefined1 *)(param_1 + 0x11) = 0;
  *(undefined1 *)((long)param_1 + 0x89) = 0;
  *(undefined1 *)((long)param_1 + 0x8a) = 0;
  *(undefined1 *)((long)param_1 + 0x8b) = 0;
  *(undefined1 *)((long)param_1 + 0x8c) = 0;
  *(undefined1 *)((long)param_1 + 0x8d) = 0;
  *(undefined1 *)((long)param_1 + 0x8e) = 0;
  *(undefined1 *)((long)param_1 + 0x8f) = 0;
  *(undefined1 *)(param_1 + 0x12) = 0;
  *(undefined1 *)((long)param_1 + 0x91) = 0;
  *(undefined1 *)((long)param_1 + 0x92) = 0;
  *(undefined1 *)((long)param_1 + 0x93) = 0;
  param_1[0x13] = 0;
  *(undefined1 *)(param_1 + 0x15) = 0;
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  *(undefined1 *)((long)param_1 + 0xab) = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  *(undefined1 *)(param_1 + 0x18) = 0;
  param_1[0x19] = 0;
  param_1[0x1a] = 0;
  param_1[0x1b] = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  cVar3 = FUN_003e076c(plVar1);
  if (cVar3 == '\0') {
    return;
  }
  lVar4 = FUN_003df0f8(plVar1);
  param_1[0x19] = lVar4;
  return;
}


==================================================================

### FUNC 0041e2a8 (8 bytes) name=FUN_0041e2a8

void FUN_0041e2a8(long param_1)

{
  FUN_00432400(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 0041e2b0 (68 bytes) name=FUN_0041e2b0

void FUN_0041e2b0(long param_1)

{
  void *pvVar1;
  
  if ((*(char *)(param_1 + 0xa8) == '\0') && (*(long *)(param_1 + 0x98) == 0)) {
    pvVar1 = operator_new__(*(ulong *)(param_1 + 0xa0));
    *(void **)(param_1 + 0x98) = pvVar1;
    *(undefined1 *)(param_1 + 0xa8) = 1;
  }
  return;
}


==================================================================

### FUNC 0041e2f4 (84 bytes) name=FUN_0041e2f4

void FUN_0041e2f4(long param_1)

{
  if (*(char *)(param_1 + 0xa8) != '\0') {
    if (*(void **)(param_1 + 0x98) != (void *)0x0) {
      operator_delete__(*(void **)(param_1 + 0x98));
    }
    *(undefined8 *)(param_1 + 0x98) = 0;
    *(undefined1 *)(param_1 + 0xa8) = 0;
  }
  if (*(void **)(param_1 + 0xd0) != (void *)0x0) {
    operator_delete__(*(void **)(param_1 + 0xd0));
  }
  *(undefined8 *)(param_1 + 0xd0) = 0;
  *(undefined8 *)(param_1 + 0xd8) = 0;
  *(undefined8 *)(param_1 + 0xe0) = 0;
  *(undefined8 *)(param_1 + 0xe8) = 0;
  return;
}


==================================================================

### FUNC 0041e348 (388 bytes) name=FUN_0041e348

bool FUN_0041e348(long param_1,long param_2,long param_3)

{
  long lVar1;
  long lVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long local_10;
  undefined8 local_8;
  
  if (*(long **)(param_1 + 200) == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x30))();
  if (cVar3 == '\0') {
    iVar4 = (**(code **)(**(long **)(param_1 + 200) + 0x40))(*(long **)(param_1 + 200));
                    /* try { // try from 0041e3b8 to 0051e3c7 has its CatchHandler @ 0041e64c */
                    /* try { // try from 0041e3d0 to 0051e3d3 has its CatchHandler @ 0041e638 */
    lVar1 = -(iVar4 * param_3 + 0x1eU & 0xfffffffffffffff0);
    uVar5 = (**(code **)(**(long **)(param_1 + 200) + 0x10))
                      (*(long **)(param_1 + 200),param_1 + 0x84,param_2,param_2 + param_3,&local_8,
                       &stack0xffffffffffffff90 + lVar1,
                       &stack0xffffffffffffff90 + iVar4 * param_3 + lVar1,&local_10);
    lVar2 = local_10;
    if (uVar5 < 2) {
      param_3 = local_10 - (long)(&stack0xffffffffffffff90 + lVar1);
      lVar6 = FUN_00432544(param_1 + 0x68,&stack0xffffffffffffff90 + lVar1,param_3);
      if ((param_3 == lVar6) && ((uVar5 & 1) != 0)) {
                    /* try { // try from 0041e484 to 0051e487 has its CatchHandler @ 0041e69c */
                    /* try { // try from 0041e48c to 0051e48f has its CatchHandler @ 0041dd20 */
        iVar4 = (**(code **)(**(long **)(param_1 + 200) + 0x10))
                          (*(long **)(param_1 + 200),param_1 + 0x84,local_8,
                           *(undefined8 *)(param_1 + 0x28),&local_8,&stack0xffffffffffffff90 + lVar1
                           ,lVar2,&local_10);
        if (iVar4 == 2) goto LAB_0041e4bc;
        param_3 = local_10 - (long)(&stack0xffffffffffffff90 + lVar1);
        lVar6 = FUN_00432544(param_1 + 0x68,&stack0xffffffffffffff90 + lVar1,param_3);
      }
      goto LAB_0041e418;
    }
    if (uVar5 != 3) {
LAB_0041e4bc:
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_filebuf::_M_convert_to_external conversion error");
    }
  }
  lVar6 = FUN_00432544(param_1 + 0x68,param_2,param_3);
LAB_0041e418:
                    /* try { // try from 0041e430 to 0051e433 has its CatchHandler @ 0041dd20 */
  return lVar6 == param_3;
}


==================================================================

### FUNC 0041e4cc (144 bytes) name=FUN_0041e4cc

int FUN_0041e4cc(long param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  
                    /* try { // try from 0041e4d8 to 0051e4ff has its CatchHandler @ 0041e64c */
  cVar1 = (**(code **)(**(long **)(param_1 + 200) + 0x30))(*(long **)(param_1 + 200));
  if (cVar1 != '\0') {
    return (int)*(undefined8 *)(param_1 + 0x10) - (int)*(undefined8 *)(param_1 + 0x18);
  }
                    /* try { // try from 0041e538 to 0051e53b has its CatchHandler @ 0041e56c */
  iVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x38))
                    (*(long **)(param_1 + 200),param_2,*(undefined8 *)(param_1 + 0xd0),
                     *(undefined8 *)(param_1 + 0xe0),
                     *(long *)(param_1 + 0x10) - *(long *)(param_1 + 8));
                    /* try { // try from 0041e540 to 0051e543 has its CatchHandler @ 0041e64c */
  return ((int)*(undefined8 *)(param_1 + 0xd0) + iVar2) - (int)*(undefined8 *)(param_1 + 0xe8);
}


==================================================================

### FUNC 0041e55c (364 bytes) name=FUN_0041e55c

bool FUN_0041e55c(long *param_1)

{
  bool bVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long local_88;
  undefined1 auStack_80 [128];
  
                    /* catch() { ... } // from try @ 0041e538 with catch @ 0041e56c */
  bVar1 = true;
  if ((ulong)param_1[4] < (ulong)param_1[5]) {
                    /* try { // try from 0041e6ac to 0051e6af has its CatchHandler @ 0041dd20 */
                    /* catch() { ... } // from try @ 0041e7d0 with catch @ 0041e6b0
                       catch() { ... } // from try @ 0041e808 with catch @ 0041e6b0
                       catch() { ... } // from try @ 0041e9b8 with catch @ 0041e6b0
                       catch() { ... } // from try @ 0041e9e0 with catch @ 0041e6b0
                       catch() { ... } // from try @ 0041e9f4 with catch @ 0041e6b0 */
    iVar4 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    bVar1 = iVar4 != -1;
  }
  if (*(char *)((long)param_1 + 0xaa) != '\0') {
    if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
    bVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
                    /* try { // try from 0041e5b0 to 0051e5b3 has its CatchHandler @ 0041e5c8 */
    if (bVar2 < bVar1) {
      lVar5 = 0;
                    /* try { // try from 0041e5c0 to 0051e5c3 has its CatchHandler @ 0041dd20 */
                    /* catch() { ... } // from try @ 0041e5b0 with catch @ 0041e5c8
                       catch() { ... } // from try @ 0041e5ec with catch @ 0041e5c8
                       catch() { ... } // from try @ 0041e630 with catch @ 0041e5c8 */
      while( true ) {
                    /* try { // try from 0041e5ec to 0051e5ef has its CatchHandler @ 0041e5c8 */
        uVar3 = (**(code **)(*(long *)param_1[0x19] + 0x18))
                          ((long *)param_1[0x19],(long)param_1 + 0x84,auStack_80,&stack0x00000000,
                           &local_88);
        if (uVar3 == 2) {
                    /* try { // try from 0041e684 to 0051e687 has its CatchHandler @ 0041dd20 */
                    /* catch() { ... } // from try @ 0041e294 with catch @ 0041e688 */
          return false;
        }
        if (uVar3 < 2) {
          lVar6 = local_88 - (long)auStack_80;
          if (lVar6 < 1) break;
                    /* try { // try from 0041e670 to 0051e673 has its CatchHandler @ 0041dd20 */
                    /* catch() { ... } // from try @ 0041df60 with catch @ 0041e674 */
          lVar5 = FUN_00432544(param_1 + 0xd,auStack_80,lVar6);
          if (lVar6 != lVar5) {
            return false;
          }
        }
                    /* try { // try from 0041e5d4 to 0051e5d7 has its CatchHandler @ 0041dd20 */
        if ((lVar5 < 1) || (uVar3 != 1)) break;
        if (bVar1 == false) {
                    /* try { // try from 0041e698 to 0051e69b has its CatchHandler @ 0041dd20 */
                    /* catch() { ... } // from try @ 0041e484 with catch @ 0041e69c */
          return false;
        }
      }
                    /* try { // try from 0041e628 to 0051e62b has its CatchHandler @ 0041e650 */
      if (bVar1 == false) {
        return false;
      }
                    /* try { // try from 0041e630 to 0051e633 has its CatchHandler @ 0041e5c8 */
                    /* catch() { ... } // from try @ 0041e3d0 with catch @ 0041e638 */
      iVar4 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
      return iVar4 != -1;
    }
  }
                    /* catch() { ... } // from try @ 0041e3b8 with catch @ 0041e64c
                       catch() { ... } // from try @ 0041e4d8 with catch @ 0041e64c
                       catch() { ... } // from try @ 0041e540 with catch @ 0041e64c */
                    /* catch() { ... } // from try @ 0041e628 with catch @ 0041e650 */
                    /* catch() { ... } // from try @ 0041e048 with catch @ 0041e660 */
  return bVar1;
}


==================================================================

### FUNC 0041e6c8 (228 bytes) name=FUN_0041e6c8

long FUN_0041e6c8(long param_1)

{
  char cVar1;
  long lVar2;
  undefined8 uVar3;
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 != '\0') {
    cVar1 = FUN_0041e55c(param_1);
    *(undefined4 *)(param_1 + 0x78) = 0;
    *(undefined1 *)(param_1 + 0xc0) = 0;
    if (*(char *)(param_1 + 0xa8) != '\0') {
      if (*(void **)(param_1 + 0x98) != (void *)0x0) {
        operator_delete__(*(void **)(param_1 + 0x98));
      }
      *(undefined8 *)(param_1 + 0x98) = 0;
      *(undefined1 *)(param_1 + 0xa8) = 0;
    }
    if (*(void **)(param_1 + 0xd0) != (void *)0x0) {
      operator_delete__(*(void **)(param_1 + 0xd0));
    }
    uVar3 = *(undefined8 *)(param_1 + 0x98);
    *(undefined8 *)(param_1 + 0xd0) = 0;
    *(undefined8 *)(param_1 + 0xd8) = 0;
    *(undefined8 *)(param_1 + 0xe0) = 0;
    *(undefined8 *)(param_1 + 0xe8) = 0;
    *(undefined1 *)(param_1 + 0xa9) = 0;
    *(undefined1 *)(param_1 + 0xaa) = 0;
    *(undefined8 *)(param_1 + 8) = uVar3;
    *(undefined8 *)(param_1 + 0x10) = uVar3;
    *(undefined8 *)(param_1 + 0x18) = uVar3;
    *(undefined8 *)(param_1 + 0x28) = 0;
    *(undefined8 *)(param_1 + 0x20) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined8 *)(param_1 + 0x84) = *(undefined8 *)(param_1 + 0x7c);
    *(undefined8 *)(param_1 + 0x8c) = *(undefined8 *)(param_1 + 0x7c);
    lVar2 = FUN_00432440(param_1 + 0x68);
    if ((lVar2 != 0) && (cVar1 == '\x01')) {
      return param_1;
    }
  }
  return 0;
}


==================================================================

### FUNC 0041e864 (76 bytes) name=FUN_0041e864

void FUN_0041e864(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fecf0;
  FUN_0041e6c8();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 0041e8b0 (84 bytes) name=FUN_0041e8b0

void FUN_0041e8b0(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fecf0;
  FUN_0041e6c8();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041e904 (128 bytes) name=FUN_0041e904

void FUN_0041e904(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f9048;
  param_1[2] = &PTR_FUN_004fecf0;
  param_1[0x20] = &PTR_FUN_004f9070;
  FUN_0041e6c8(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
  param_1[2] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0x20] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x20);
  return;
}


==================================================================

### FUNC 0041e984 (16 bytes) name=FUN_0041e984

void FUN_0041e984(long *param_1)

{
  FUN_0041e904((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041e994 (136 bytes) name=FUN_0041e994

void FUN_0041e994(undefined8 *param_1)

{
                    /* try { // try from 0041e9b0 to 0051e9b3 has its CatchHandler @ 0041e9d0 */
                    /* try { // try from 0041e9b8 to 0051e9bb has its CatchHandler @ 0041e6b0 */
  *param_1 = &PTR_FUN_004f9048;
  param_1[2] = &PTR_FUN_004fecf0;
  param_1[0x20] = &PTR_FUN_004f9070;
                    /* catch() { ... } // from try @ 0041e9b0 with catch @ 0041e9d0 */
  FUN_0041e6c8(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
                    /* try { // try from 0041e9e0 to 0051e9e3 has its CatchHandler @ 0041e6b0 */
                    /* catch() { ... } // from try @ 0041e800 with catch @ 0041e9e4 */
  param_1[2] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 9);
                    /* try { // try from 0041e9f4 to 0051e9f7 has its CatchHandler @ 0041e6b0 */
                    /* catch() { ... } // from try @ 0041eaa0 with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041ed94 with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041ee04 with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041eebc with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041ef4c with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041ef60 with catch @ 0041e9f8
                       catch() { ... } // from try @ 0041ef74 with catch @ 0041e9f8 */
  param_1[0x20] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x20);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041ea1c (16 bytes) name=FUN_0041ea1c

void FUN_0041ea1c(long *param_1)

{
  FUN_0041e994((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041ea2c (128 bytes) name=FUN_0041ea2c

void FUN_0041ea2c(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f90b8;
  param_1[0x1f] = &PTR_FUN_004f90e0;
  param_1[1] = &PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 1);
  FUN_00432214(param_1 + 0xe);
  param_1[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 8);
  param_1[0x1f] = PTR_DAT_00501a40 + 0x10;
                    /* try { // try from 0041eaa0 to 0051ed43 has its CatchHandler @ 0041e9f8 */
  FUN_003d381c(param_1 + 0x1f);
  return;
}


==================================================================

### FUNC 0041eaac (16 bytes) name=FUN_0041eaac

void FUN_0041eaac(long *param_1)

{
  FUN_0041ea2c((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041eabc (136 bytes) name=FUN_0041eabc

void FUN_0041eabc(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f90b8;
  param_1[0x1f] = &PTR_FUN_004f90e0;
  param_1[1] = &PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 1);
  FUN_00432214(param_1 + 0xe);
  param_1[1] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 8);
  param_1[0x1f] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x1f);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041eb44 (16 bytes) name=FUN_0041eb44

void FUN_0041eb44(long *param_1)

{
  FUN_0041eabc((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041eb54 (140 bytes) name=FUN_0041eb54

void FUN_0041eb54(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f9158;
  param_1[2] = &PTR_FUN_004f9180;
  param_1[0x21] = &PTR_FUN_004f91a8;
  param_1[3] = &PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
  param_1[3] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0x21] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x21);
  return;
}


==================================================================

### FUNC 0041ebe0 (8 bytes) name=FUN_0041ebe0

void FUN_0041ebe0(long param_1)

{
  FUN_0041eb54(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041ebe8 (16 bytes) name=FUN_0041ebe8

void FUN_0041ebe8(long *param_1)

{
  FUN_0041eb54((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041ebf8 (264 bytes) name=FUN_0041ebf8

long * FUN_0041ebf8(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  char cVar2;
  void *pvVar3;
  long lVar4;
  
  plVar1 = param_1 + 0xd;
  cVar2 = FUN_00432400(plVar1);
  if (cVar2 == '\0') {
    FUN_00432394(plVar1,param_2,param_3,0x1b4);
    cVar2 = FUN_00432400(plVar1);
    if (cVar2 != '\0') {
      if ((char)param_1[0x15] == '\0') {
        pvVar3 = (void *)param_1[0x13];
        if (pvVar3 == (void *)0x0) {
          pvVar3 = operator_new__(param_1[0x14]);
          param_1[0x13] = (long)pvVar3;
          *(undefined1 *)(param_1 + 0x15) = 1;
        }
      }
      else {
        pvVar3 = (void *)param_1[0x13];
      }
      *(uint *)(param_1 + 0xf) = param_3;
      *(undefined1 *)((long)param_1 + 0xa9) = 0;
      *(undefined1 *)((long)param_1 + 0xaa) = 0;
      param_1[1] = (long)pvVar3;
      param_1[2] = (long)pvVar3;
      param_1[3] = (long)pvVar3;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined8 *)((long)param_1 + 0x84) = *(undefined8 *)((long)param_1 + 0x7c);
      *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x7c);
      if (((param_3 >> 1 & 1) == 0) ||
         (lVar4 = (**(code **)(*param_1 + 0x20))(param_1,0,2,param_3), lVar4 != -1)) {
        return param_1;
      }
      FUN_0041e6c8(param_1);
    }
  }
  return (long *)0x0;
}


==================================================================

### FUNC 0041ed00 (8 bytes) name=FUN_0041ed00

void FUN_0041ed00(undefined8 param_1,undefined8 *param_2)

{
  FUN_0041ebf8(param_1,*param_2);
  return;
}


==================================================================

### FUNC 0041ed08 (148 bytes) name=FUN_0041ed08

void FUN_0041ed08(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f9158;
  param_1[2] = &PTR_FUN_004f9180;
  param_1[0x21] = &PTR_FUN_004f91a8;
  param_1[3] = &PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
  param_1[3] = PTR_DAT_00501bb0 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0x21] = PTR_DAT_00501a40 + 0x10;
  FUN_003d381c(param_1 + 0x21);
                    /* try { // try from 0041ed8c to 0051ed8f has its CatchHandler @ 0041ef50 */
                    /* try { // try from 0041ed94 to 0051edcf has its CatchHandler @ 0041e9f8 */
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 0041ed9c (8 bytes) name=FUN_0041ed9c

void FUN_0041ed9c(long param_1)

{
  FUN_0041ed08(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 0041eda4 (16 bytes) name=FUN_0041eda4

void FUN_0041eda4(long *param_1)

{
  FUN_0041ed08((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 0041edb4 (272 bytes) name=FUN_0041edb4

undefined1  [16] FUN_0041edb4(long param_1,undefined8 param_2,undefined8 param_3,ulong param_4)

{
  char cVar1;
  long lVar2;
  undefined8 uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  
  cVar1 = FUN_0041e55c();
  if (cVar1 == '\0') {
    uVar4 = 0;
    uVar5 = 0;
    uVar6 = 0;
    uVar7 = 0;
    uVar8 = 0;
    uVar9 = 0;
                    /* try { // try from 0041edfc to 0051edff has its CatchHandler @ 0041ef64 */
    uVar10 = 0;
    uVar11 = 0;
                    /* try { // try from 0041ee04 to 0051ee73 has its CatchHandler @ 0041e9f8 */
    lVar2 = -1;
  }
  else {
    lVar2 = FUN_00432660(param_1 + 0x68,param_2,param_3);
    if (lVar2 == -1) {
      uVar4 = 0;
      uVar5 = 0;
      uVar6 = 0;
      uVar7 = 0;
      uVar8 = 0;
                    /* try { // try from 0041eeb4 to 0051eeb7 has its CatchHandler @ 0041ef3c */
      uVar9 = 0;
      uVar10 = 0;
                    /* try { // try from 0041eebc to 0051eedb has its CatchHandler @ 0041e9f8 */
      uVar11 = 0;
    }
    else {
      uVar3 = *(undefined8 *)(param_1 + 0x98);
      uVar11 = param_4 & 0xff;
      uVar10 = param_4 >> 8 & 0xff;
      *(undefined8 *)(param_1 + 0xe8) = *(undefined8 *)(param_1 + 0xd0);
      uVar9 = param_4 >> 0x10 & 0xff;
      *(undefined8 *)(param_1 + 0xe0) = *(undefined8 *)(param_1 + 0xd0);
      uVar8 = param_4 >> 0x18 & 0xff;
      *(undefined1 *)(param_1 + 0xa9) = 0;
      uVar7 = param_4 >> 0x20 & 0xff;
      *(undefined1 *)(param_1 + 0xaa) = 0;
      uVar6 = param_4 >> 0x28 & 0xff;
      *(undefined8 *)(param_1 + 8) = uVar3;
      uVar5 = param_4 >> 0x30 & 0xff;
      *(undefined8 *)(param_1 + 0x10) = uVar3;
      uVar4 = param_4 >> 0x38;
      *(undefined8 *)(param_1 + 0x18) = uVar3;
      *(undefined8 *)(param_1 + 0x28) = 0;
      *(undefined8 *)(param_1 + 0x20) = 0;
      *(undefined8 *)(param_1 + 0x30) = 0;
      *(ulong *)(param_1 + 0x84) = param_4;
    }
  }
  auVar12._8_8_ =
       uVar11 | uVar10 << 8 | uVar9 << 0x10 | uVar8 << 0x18 | uVar7 << 0x20 | uVar6 << 0x28 |
       uVar5 << 0x30 | uVar4 << 0x38;
  auVar12._0_8_ = lVar2;
  return auVar12;
}


==================================================================

### FUNC 0041eec4 (552 bytes) name=FUN_0041eec4

int FUN_0041eec4(long param_1,int param_2)

{
  bool bVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  undefined1 *puVar6;
  undefined1 *puVar7;
  undefined1 local_1;
  
  if ((*(uint *)(param_1 + 0x78) & 0x11) != 0) {
    if (*(char *)(param_1 + 0xa9) != '\0') {
      if (*(char *)(param_1 + 0xc0) != '\0') {
        lVar4 = *(long *)(param_1 + 0xb0);
        if (*(long *)(param_1 + 0x10) != *(long *)(param_1 + 8)) {
          lVar4 = lVar4 + 1;
        }
        *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
        *(long *)(param_1 + 0xb0) = lVar4;
        *(long *)(param_1 + 0x10) = lVar4;
        *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
        *(undefined1 *)(param_1 + 0xc0) = 0;
      }
      iVar3 = FUN_0041e4cc(param_1,param_1 + 0x8c);
      lVar4 = FUN_0041edb4(param_1,(long)iVar3,1,*(undefined8 *)(param_1 + 0x8c));
      if (lVar4 == -1) {
        return -1;
      }
    }
    puVar6 = *(undefined1 **)(param_1 + 0x20);
    bVar1 = param_2 != -1;
    puVar7 = *(undefined1 **)(param_1 + 0x28);
    local_1 = (undefined1)param_2;
    if (puVar6 < puVar7) {
      if (bVar1) {
                    /* catch() { ... } // from try @ 0041eeb4 with catch @ 0041ef3c */
        *puVar7 = local_1;
        puVar6 = *(undefined1 **)(param_1 + 0x20);
        puVar7 = (undefined1 *)(*(long *)(param_1 + 0x28) + 1);
                    /* try { // try from 0041ef4c to 0051ef4f has its CatchHandler @ 0041e9f8 */
        *(undefined1 **)(param_1 + 0x28) = puVar7;
      }
                    /* catch() { ... } // from try @ 0041ed8c with catch @ 0041ef50 */
      cVar2 = FUN_0041e348(param_1,puVar6,(long)puVar7 - (long)puVar6);
                    /* try { // try from 0041ef60 to 0051ef63 has its CatchHandler @ 0041e9f8 */
      if (cVar2 != '\0') {
        if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
          uVar5 = *(undefined8 *)(param_1 + 0x98);
          *(undefined8 *)(param_1 + 8) = uVar5;
          *(undefined8 *)(param_1 + 0x10) = uVar5;
          *(undefined8 *)(param_1 + 0x18) = uVar5;
        }
        else {
          lVar4 = *(long *)(param_1 + 0x98);
          *(long *)(param_1 + 8) = lVar4;
          *(long *)(param_1 + 0x10) = lVar4;
          *(long *)(param_1 + 0x18) = lVar4;
          if (1 < *(ulong *)(param_1 + 0xa0)) {
            *(long *)(param_1 + 0x28) = lVar4;
            *(long *)(param_1 + 0x20) = lVar4;
            *(ulong *)(param_1 + 0x30) = lVar4 + (*(ulong *)(param_1 + 0xa0) - 1);
            goto LAB_0041efd8;
          }
        }
        *(undefined8 *)(param_1 + 0x28) = 0;
        *(undefined8 *)(param_1 + 0x20) = 0;
                    /* try { // try from 0041f074 to 0051f077 has its CatchHandler @ 0041ef78 */
        *(undefined8 *)(param_1 + 0x30) = 0;
LAB_0041efd8:
        if (param_2 == -1) {
          param_2 = 0;
        }
        return param_2;
      }
    }
    else {
                    /* catch() { ... } // from try @ 0041f074 with catch @ 0041ef78
                       catch() { ... } // from try @ 0041f0c8 with catch @ 0041ef78
                       catch() { ... } // from try @ 0041f3f8 with catch @ 0041ef78
                       catch() { ... } // from try @ 0041f41c with catch @ 0041ef78
                       catch() { ... } // from try @ 0041f430 with catch @ 0041ef78 */
      if (1 < *(ulong *)(param_1 + 0xa0)) {
        if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
          uVar5 = *(undefined8 *)(param_1 + 0x98);
          *(undefined8 *)(param_1 + 8) = uVar5;
          *(undefined8 *)(param_1 + 0x10) = uVar5;
          *(undefined8 *)(param_1 + 0x18) = uVar5;
                    /* try { // try from 0041f0c0 to 0051f0c3 has its CatchHandler @ 0041f420 */
          *(undefined8 *)(param_1 + 0x28) = 0;
          *(undefined8 *)(param_1 + 0x20) = 0;
                    /* try { // try from 0041f0c8 to 0051f3b7 has its CatchHandler @ 0041ef78 */
          *(undefined8 *)(param_1 + 0x30) = 0;
        }
        else {
          lVar4 = *(long *)(param_1 + 0x98);
          *(long *)(param_1 + 8) = lVar4;
          *(long *)(param_1 + 0x10) = lVar4;
          *(long *)(param_1 + 0x18) = lVar4;
          *(long *)(param_1 + 0x28) = lVar4;
          *(long *)(param_1 + 0x20) = lVar4;
          *(ulong *)(param_1 + 0x30) = lVar4 + (*(ulong *)(param_1 + 0xa0) - 1);
        }
        *(undefined1 *)(param_1 + 0xaa) = 1;
        if (bVar1) {
          **(undefined1 **)(param_1 + 0x28) = local_1;
          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;
        }
        goto LAB_0041efd8;
      }
      if ((!bVar1) || (cVar2 = FUN_0041e348(param_1,&local_1,1), cVar2 != '\0')) {
        *(undefined1 *)(param_1 + 0xaa) = 1;
        if (param_2 == -1) {
          param_2 = 0;
        }
        return param_2;
      }
    }
  }
                    /* catch() { ... } // from try @ 0041edfc with catch @ 0041ef64 */
                    /* try { // try from 0041ef74 to 0051ef77 has its CatchHandler @ 0041e9f8 */
  return -1;
}


==================================================================

### FUNC 0041f0ec (472 bytes) name=FUN_0041f0ec

undefined1  [16] FUN_0041f0ec(long param_1,long param_2,int param_3)

{
  byte bVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  bool bVar6;
  long lVar7;
  undefined8 uVar8;
  undefined1 auVar9 [16];
  undefined8 local_8;
  
  if (*(long **)(param_1 + 200) == (long *)0x0) {
LAB_0041f138:
    bVar6 = true;
    lVar5 = 0;
  }
  else {
    iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x28))();
    lVar5 = (long)iVar3;
    if (iVar3 < 0) goto LAB_0041f138;
    bVar6 = iVar3 < 1;
  }
  lVar7 = -1;
  bVar1 = FUN_00432400(param_1 + 0x68);
  uVar8 = 0;
  if (bVar1 <= (byte)(bVar6 & param_2 != 0)) goto LAB_0041f1c8;
  if (((param_2 != 0) || (param_3 != 1)) ||
     ((*(char *)(param_1 + 0xaa) != '\0' &&
      (cVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x30))(*(long **)(param_1 + 200)),
      cVar2 == '\0')))) {
    if (*(char *)(param_1 + 0xc0) != '\0') {
      lVar4 = *(long *)(param_1 + 0xb0);
      if (*(long *)(param_1 + 0x10) != *(long *)(param_1 + 8)) {
        lVar4 = lVar4 + 1;
      }
      *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
      *(long *)(param_1 + 0xb0) = lVar4;
      *(long *)(param_1 + 0x10) = lVar4;
      *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
      *(undefined1 *)(param_1 + 0xc0) = 0;
    }
    local_8 = *(undefined8 *)(param_1 + 0x7c);
    lVar5 = lVar5 * param_2;
    if ((param_3 != 1) || (*(char *)(param_1 + 0xa9) == '\0')) goto LAB_0041f224;
    bVar6 = false;
LAB_0041f298:
    local_8 = *(undefined8 *)(param_1 + 0x8c);
    iVar3 = FUN_0041e4cc(param_1);
    lVar5 = lVar5 + iVar3;
    if (!bVar6) {
LAB_0041f224:
      auVar9 = FUN_0041edb4(param_1,lVar5,param_3,local_8);
      return auVar9;
    }
  }
  else {
    local_8 = *(undefined8 *)(param_1 + 0x7c);
    if (*(char *)(param_1 + 0xa9) != '\0') {
      bVar6 = true;
      lVar5 = 0;
      goto LAB_0041f298;
    }
    lVar5 = 0;
  }
  if (*(char *)(param_1 + 0xaa) != '\0') {
    lVar5 = *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20);
  }
  lVar4 = FUN_00432660(param_1 + 0x68,0,1);
  if (lVar4 != -1) {
    lVar7 = lVar4 + lVar5;
    uVar8 = local_8;
  }
LAB_0041f1c8:
  auVar9._8_8_ = uVar8;
  auVar9._0_8_ = lVar7;
  return auVar9;
}


==================================================================

### FUNC 0041f2c4 (240 bytes) name=FUN_0041f2c4

undefined1  [16] FUN_0041f2c4(long param_1,undefined8 param_2,undefined8 param_3)

{
  char cVar1;
  undefined8 uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 == '\0') {
    uVar4 = 0;
    uVar5 = 0;
    uVar6 = 0;
    uVar7 = 0;
    uVar8 = 0;
    uVar9 = 0;
    uVar10 = 0;
    uVar11 = 0;
    uVar2 = 0xffffffffffffffff;
  }
  else {
    if (*(char *)(param_1 + 0xc0) != '\0') {
      lVar3 = *(long *)(param_1 + 0xb0);
      if (*(long *)(param_1 + 0x10) != *(long *)(param_1 + 8)) {
        lVar3 = lVar3 + 1;
      }
      *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
      *(long *)(param_1 + 0xb0) = lVar3;
      *(long *)(param_1 + 0x10) = lVar3;
      *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
      *(undefined1 *)(param_1 + 0xc0) = 0;
    }
    auVar12 = FUN_0041edb4(param_1,param_2,0,param_3);
    uVar4 = auVar12._8_8_;
    uVar2 = auVar12._0_8_;
    uVar11 = uVar4 & 0xff;
    uVar10 = uVar4 >> 8 & 0xff;
    uVar9 = uVar4 >> 0x10 & 0xff;
    uVar8 = uVar4 >> 0x18 & 0xff;
    uVar7 = uVar4 >> 0x20 & 0xff;
    uVar6 = uVar4 >> 0x28 & 0xff;
    uVar5 = uVar4 >> 0x30 & 0xff;
    uVar4 = uVar4 >> 0x38;
  }
  auVar12._8_8_ =
       uVar11 | uVar10 << 8 | uVar9 << 0x10 | uVar8 << 0x18 | uVar7 << 0x20 | uVar6 << 0x28 |
       uVar5 << 0x30 | uVar4 << 0x38;
  auVar12._0_8_ = uVar2;
  return auVar12;
}


==================================================================

### FUNC 0041f3b4 (484 bytes) name=FUN_0041f3b4

void FUN_0041f3b4(long *param_1,undefined8 param_2)

{
  void *__src;
  size_t __n;
  char cVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  size_t sVar5;
  
  cVar1 = FUN_003e076c(param_2);
  if (cVar1 == '\0') {
                    /* try { // try from 0041f4f8 to 0051f4fb has its CatchHandler @ 0041f440 */
    plVar3 = (long *)0x0;
  }
  else {
    plVar3 = (long *)FUN_003df0f8(param_2);
  }
                    /* try { // try from 0041f3f0 to 0051f3f3 has its CatchHandler @ 0041f40c */
  cVar1 = FUN_00432400(param_1 + 0xd);
                    /* try { // try from 0041f3f8 to 0051f3fb has its CatchHandler @ 0041ef78 */
  if ((cVar1 == '\0') ||
     ((*(char *)((long)param_1 + 0xa9) == '\0' && (*(char *)((long)param_1 + 0xaa) == '\0'))))
  goto LAB_0041f3fc;
                    /* try { // try from 0041f41c to 0051f41f has its CatchHandler @ 0041ef78 */
                    /* catch() { ... } // from try @ 0041f0c0 with catch @ 0041f420 */
  if ((long *)param_1[0x19] == (long *)0x0) {
LAB_0041f594:
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  iVar2 = (**(code **)(*(long *)param_1[0x19] + 0x28))();
                    /* try { // try from 0041f430 to 0051f433 has its CatchHandler @ 0041ef78 */
  if (iVar2 == -1) {
LAB_0041f49c:
    param_1[0x19] = 0;
    return;
  }
  if (*(char *)((long)param_1 + 0xa9) == '\0') {
    if (*(char *)((long)param_1 + 0xaa) != '\0') {
      cVar1 = FUN_0041e55c(param_1);
      if (cVar1 == '\0') goto LAB_0041f49c;
      lVar4 = param_1[0x13];
      param_1[1] = lVar4;
      param_1[2] = lVar4;
      param_1[3] = lVar4;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
    }
  }
  else {
                    /* catch() { ... } // from try @ 0041f4f8 with catch @ 0041f440
                       catch() { ... } // from try @ 0041f808 with catch @ 0041f440
                       catch() { ... } // from try @ 0041f930 with catch @ 0041f440
                       catch() { ... } // from try @ 0041f9a0 with catch @ 0041f440
                       catch() { ... } // from try @ 0041fa3c with catch @ 0041f440
                       catch() { ... } // from try @ 0041faa4 with catch @ 0041f440
                       catch() { ... } // from try @ 0041fc4c with catch @ 0041f440
                       catch() { ... } // from try @ 0041fc60 with catch @ 0041f440 */
    if ((long *)param_1[0x19] == (long *)0x0) goto LAB_0041f594;
    cVar1 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
    if (cVar1 == '\0') {
      lVar4 = param_1[0x1a];
      iVar2 = (**(code **)(*(long *)param_1[0x19] + 0x38))
                        ((long *)param_1[0x19],(long)param_1 + 0x8c,lVar4,param_1[0x1c],
                         param_1[2] - param_1[1]);
      __src = (void *)(lVar4 + iVar2);
      param_1[0x1c] = (long)__src;
      __n = param_1[0x1d] - (long)__src;
      sVar5 = 0;
      if (__n != 0) {
        memmove((void *)param_1[0x1a],__src,__n);
        sVar5 = __n;
      }
      lVar4 = param_1[0x13];
      param_1[0x1c] = param_1[0x1a];
      param_1[0x1d] = param_1[0x1a] + sVar5;
      param_1[1] = lVar4;
      param_1[2] = lVar4;
      param_1[3] = lVar4;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined8 *)((long)param_1 + 0x84) = *(undefined8 *)((long)param_1 + 0x7c);
      *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x7c);
    }
    else if (((plVar3 != (long *)0x0) &&
             (cVar1 = (**(code **)(*plVar3 + 0x30))(plVar3), cVar1 == '\0')) &&
            (lVar4 = (**(code **)(*param_1 + 0x20))(param_1,0,1,(int)param_1[0xf]), lVar4 == -1))
    goto LAB_0041f49c;
  }
LAB_0041f3fc:
  param_1[0x19] = (long)plVar3;
                    /* catch() { ... } // from try @ 0041f3f0 with catch @ 0041f40c */
  return;
}


==================================================================

### FUNC 0041f598 (128 bytes) name=FUN_0041f598

void FUN_0041f598(long param_1,long param_2)

{
  long lVar1;
  
  if (((*(uint *)(param_1 + 0x78) >> 3 & 1) == 0) || (param_2 < 1)) {
    lVar1 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
                    /* try { // try from 0041f610 to 0051f77b has its CatchHandler @ 0041fc1c */
    *(long *)(param_1 + 0x18) = lVar1;
  }
  else {
    lVar1 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
    *(long *)(param_1 + 0x18) = lVar1 + param_2;
  }
  if (((param_2 == 0) && ((*(uint *)(param_1 + 0x78) & 0x11) != 0)) &&
     (1 < *(ulong *)(param_1 + 0xa0))) {
    *(long *)(param_1 + 0x28) = lVar1;
    *(long *)(param_1 + 0x20) = lVar1;
    *(ulong *)(param_1 + 0x30) = lVar1 + (*(ulong *)(param_1 + 0xa0) - 1);
    return;
  }
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  return;
}


==================================================================

### FUNC 0041f618 (132 bytes) name=FUN_0041f618

void FUN_0041f618(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  FUN_0041e124(param_1 + 2);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 2);
  return;
}


==================================================================

### FUNC 0041f6f4 (164 bytes) name=FUN_0041f6f4

void FUN_0041f6f4(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 0x20;
  FUN_003d347c(puVar1);
  param_1[0x3b] = 0;
  *(undefined1 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e1) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = &DAT_004fed78;
  param_1[1] = 0;
  param_1[0x20] = &DAT_004feda0;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f9048;
  param_1[0x20] = &PTR_FUN_004f9070;
  FUN_0041e124(param_1 + 2);
  FUN_003d2728(puVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 0041f7f8 (236 bytes) name=FUN_0041f7f8

void FUN_0041f7f8(long *param_1,long *param_2,undefined8 param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
                    /* try { // try from 0041f808 to 0051f80b has its CatchHandler @ 0041f440 */
  plVar1 = param_1 + 2;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,param_3,param_4 | 8);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0041f93c (268 bytes) name=FUN_0041f93c

void FUN_0041f93c(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x20;
  FUN_003d347c(plVar1);
  param_1[0x3b] = 0;
  *(undefined1 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e1) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = (long)&DAT_004fed78;
                    /* try { // try from 0041f998 to 0051f99b has its CatchHandler @ 0041fc64 */
                    /* try { // try from 0041f9a0 to 0051f9f3 has its CatchHandler @ 0041f440 */
  param_1[1] = 0;
  param_1[0x20] = (long)&DAT_004feda0;
  FUN_003d2728(plVar1,0);
  plVar2 = param_1 + 2;
  *param_1 = (long)&PTR_FUN_004f9048;
  param_1[0x20] = (long)&PTR_FUN_004f9070;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
  lVar3 = FUN_0041ebf8(plVar2,param_2,param_3 | 8);
  if (lVar3 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
                    /* try { // try from 0041fa34 to 0051fa37 has its CatchHandler @ 0041fc50 */
                    /* try { // try from 0041fa3c to 0051fa6f has its CatchHandler @ 0041f440 */
  return;
}


==================================================================

### FUNC 0041faa8 (236 bytes) name=FUN_0041faa8

void FUN_0041faa8(long *param_1,long *param_2,undefined8 *param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 2;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,*param_3,param_4 | 8);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0041fbec (268 bytes) name=FUN_0041fbec

void FUN_0041fbec(long *param_1,undefined8 *param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x20;
  FUN_003d347c(plVar1);
  param_1[0x3b] = 0;
                    /* catch() { ... } // from try @ 0041f610 with catch @ 0041fc1c
                       catch() { ... } // from try @ 0041f920 with catch @ 0041fc1c */
  *(undefined1 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e1) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
                    /* catch() { ... } // from try @ 0041fa9c with catch @ 0041fc3c */
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = (long)&DAT_004fed78;
                    /* try { // try from 0041fc4c to 0051fc4f has its CatchHandler @ 0041f440 */
                    /* catch() { ... } // from try @ 0041fa34 with catch @ 0041fc50 */
  param_1[1] = 0;
  param_1[0x20] = (long)&DAT_004feda0;
  FUN_003d2728(plVar1,0);
                    /* try { // try from 0041fc60 to 0051fc63 has its CatchHandler @ 0041f440 */
  plVar2 = param_1 + 2;
                    /* catch() { ... } // from try @ 0041f998 with catch @ 0041fc64 */
  *param_1 = (long)&PTR_FUN_004f9048;
                    /* catch() { ... } // from try @ 0041f7b4 with catch @ 0041fc74
                       catch() { ... } // from try @ 0041f914 with catch @ 0041fc74 */
  param_1[0x20] = (long)&PTR_FUN_004f9070;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
  lVar3 = FUN_0041ebf8(plVar2,*param_2,param_3 | 8);
  if (lVar3 != 0) {
                    /* catch() { ... } // from try @ 0041fcec with catch @ 0041fcb0
                       catch() { ... } // from try @ 0041fd30 with catch @ 0041fcb0
                       catch() { ... } // from try @ 0041ff14 with catch @ 0041fcb0 */
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
                    /* try { // try from 0041fcec to 0051fcef has its CatchHandler @ 0041fcb0 */
  return;
}


==================================================================

### FUNC 0041fd58 (128 bytes) name=FUN_0041fd58

void FUN_0041fd58(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)&PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
  param_1[2] = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 9);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 0041fdd8 (8 bytes) name=FUN_0041fdd8

long FUN_0041fdd8(long param_1)

{
  return param_1 + 0x10;
}


==================================================================

### FUNC 0041fde0 (8 bytes) name=FUN_0041fde0

void FUN_0041fde0(long param_1)

{
  FUN_00432400(param_1 + 0x78);
  return;
}


==================================================================

### FUNC 0041fde8 (8 bytes) name=FUN_0041fde8

void FUN_0041fde8(long param_1)

{
  FUN_00432400(param_1 + 0x78);
  return;
}


==================================================================

### FUNC 0041fdf0 (96 bytes) name=FUN_0041fdf0

void FUN_0041fdf0(long *param_1,undefined8 param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_0041ebf8(param_1 + 2,param_2,param_3 | 8);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0041fe50 (100 bytes) name=FUN_0041fe50

void FUN_0041fe50(long *param_1,undefined8 *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_0041ebf8(param_1 + 2,*param_2,param_3 | 8);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0041feb4 (76 bytes) name=FUN_0041feb4

void FUN_0041feb4(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_0041e6c8(param_1 + 2);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0041ff00 (124 bytes) name=FUN_0041ff00

void FUN_0041ff00(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* catch() { ... } // from try @ 0041fd28 with catch @ 0041ff04 */
                    /* try { // try from 0041ff14 to 0051ff17 has its CatchHandler @ 0041fcb0 */
                    /* catch() { ... } // from try @ 0041ff84 with catch @ 0041ff18
                       catch() { ... } // from try @ 0041ffd8 with catch @ 0041ff18
                       catch() { ... } // from try @ 0042011c with catch @ 0041ff18
                       catch() { ... } // from try @ 004201ec with catch @ 0041ff18
                       catch() { ... } // from try @ 00420200 with catch @ 0041ff18 */
  lVar1 = param_2[1];
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d2728((long)param_1 + lVar1,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  FUN_0041e124(param_1 + 1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 1);
  return;
}


==================================================================

### FUNC 0041ffd4 (160 bytes) name=FUN_0041ffd4

void FUN_0041ffd4(undefined8 *param_1)

{
  undefined8 *puVar1;
  
                    /* try { // try from 0041ffd8 to 0052001f has its CatchHandler @ 0041ff18 */
  puVar1 = param_1 + 0x1f;
  FUN_003d347c(puVar1);
  param_1[0x3a] = 0;
  *(undefined1 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1d9) = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = &DAT_004fedc8;
  param_1[0x1f] = &DAT_004fedf0;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f90b8;
  param_1[0x1f] = &PTR_FUN_004f90e0;
  FUN_0041e124(param_1 + 1);
  FUN_003d2728(puVar1,param_1 + 1);
  return;
}


==================================================================

### FUNC 004200d4 (228 bytes) name=FUN_004200d4

void FUN_004200d4(long *param_1,long *param_2,undefined8 param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 1;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2) = param_2[2];
  FUN_003d2728((long)param_1 + lVar2,0);
                    /* try { // try from 0042011c to 0052016f has its CatchHandler @ 0041ff18 */
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,param_3,param_4 | 0x10);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
                    /* try { // try from 004201b4 to 005201b7 has its CatchHandler @ 004201c8 */
  return;
}


==================================================================

### FUNC 00420210 (264 bytes) name=FUN_00420210

void FUN_00420210(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
                    /* catch() { ... } // from try @ 00420350 with catch @ 00420210
                       catch() { ... } // from try @ 00420550 with catch @ 00420210
                       catch() { ... } // from try @ 004205e8 with catch @ 00420210
                       catch() { ... } // from try @ 00420620 with catch @ 00420210
                       catch() { ... } // from try @ 00420694 with catch @ 00420210
                       catch() { ... } // from try @ 004206b0 with catch @ 00420210 */
  plVar1 = param_1 + 0x1f;
  FUN_003d347c(plVar1);
  param_1[0x3a] = 0;
  *(undefined1 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1d9) = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = (long)&DAT_004fedc8;
  param_1[0x1f] = (long)&DAT_004fedf0;
  FUN_003d2728(plVar1,0);
  plVar2 = param_1 + 1;
  *param_1 = (long)&PTR_FUN_004f90b8;
  param_1[0x1f] = (long)&PTR_FUN_004f90e0;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
  lVar3 = FUN_0041ebf8(plVar2,param_2,param_3 | 0x10);
  if (lVar3 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420378 (228 bytes) name=FUN_00420378

void FUN_00420378(long *param_1,long *param_2,undefined8 *param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 1;
                    /* try { // try from 00420394 to 00520397 has its CatchHandler @ 00420698 */
  lVar2 = param_2[1];
  *param_1 = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
                    /* try { // try from 004203b4 to 005203b7 has its CatchHandler @ 00420654 */
  *(long *)((long)param_1 + lVar2) = param_2[2];
  FUN_003d2728((long)param_1 + lVar2,0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,*param_3,param_4 | 0x10);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
                    /* try { // try from 00420428 to 0052042b has its CatchHandler @ 00420698 */
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004204b4 (264 bytes) name=FUN_004204b4

void FUN_004204b4(long *param_1,undefined8 *param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x1f;
  FUN_003d347c(plVar1);
  param_1[0x3a] = 0;
  *(undefined1 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1d9) = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = (long)&DAT_004fedc8;
  param_1[0x1f] = (long)&DAT_004fedf0;
  FUN_003d2728(plVar1,0);
  plVar2 = param_1 + 1;
  *param_1 = (long)&PTR_FUN_004f90b8;
  param_1[0x1f] = (long)&PTR_FUN_004f90e0;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
                    /* try { // try from 00420550 to 005205a3 has its CatchHandler @ 00420210 */
  lVar3 = FUN_0041ebf8(plVar2,*param_2,param_3 | 0x10);
  if (lVar3 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0042061c (128 bytes) name=FUN_0042061c

void FUN_0042061c(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* try { // try from 00420620 to 00520623 has its CatchHandler @ 00420210 */
                    /* try { // try from 0042062c to 00520643 has its CatchHandler @ 00420698 */
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)&PTR_FUN_004fecf0;
                    /* catch() { ... } // from try @ 004203b4 with catch @ 00420654 */
  FUN_0041e6c8(param_1 + 1);
  FUN_00432214(param_1 + 0xe);
  param_1[1] = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 8);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
                    /* try { // try from 00420694 to 00520697 has its CatchHandler @ 00420210 */
                    /* catch() { ... } // from try @ 00420394 with catch @ 00420698
                       catch() { ... } // from try @ 00420428 with catch @ 00420698
                       catch() { ... } // from try @ 004205c4 with catch @ 00420698
                       catch() { ... } // from try @ 0042062c with catch @ 00420698 */
  return;
}


==================================================================

### FUNC 0042069c (8 bytes) name=FUN_0042069c

long FUN_0042069c(long param_1)

{
                    /* catch() { ... } // from try @ 00420618 with catch @ 004206a0 */
  return param_1 + 8;
}


==================================================================

### FUNC 004206a4 (8 bytes) name=FUN_004206a4

void FUN_004206a4(long param_1)

{
  FUN_00432400(param_1 + 0x70);
  return;
}


==================================================================

### FUNC 004206ac (8 bytes) name=FUN_004206ac

void FUN_004206ac(long param_1)

{
                    /* try { // try from 004206b0 to 005206b3 has its CatchHandler @ 00420210 */
  FUN_00432400(param_1 + 0x70);
  return;
}


==================================================================

### FUNC 004206b4 (96 bytes) name=FUN_004206b4

void FUN_004206b4(long *param_1,undefined8 param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_0041ebf8(param_1 + 1,param_2,param_3 | 0x10);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420714 (100 bytes) name=FUN_00420714

void FUN_00420714(long *param_1,undefined8 *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_0041ebf8(param_1 + 1,*param_2,param_3 | 0x10);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420778 (76 bytes) name=FUN_00420778

void FUN_00420778(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_0041e6c8(param_1 + 1);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004207c4 (204 bytes) name=FUN_004207c4

void FUN_004207c4(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* catch() { ... } // from try @ 00420808 with catch @ 004207cc
                       catch() { ... } // from try @ 004208b4 with catch @ 004207cc
                       catch() { ... } // from try @ 004208cc with catch @ 004207cc */
  lVar1 = param_2[2];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[4];
                    /* try { // try from 00420808 to 0052087f has its CatchHandler @ 004207cc */
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[5];
  FUN_003d2728((long)param_1 + lVar1 + 0x10,0);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  FUN_0041e124(param_1 + 3);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 3);
  return;
}


==================================================================

### FUNC 004208fc (212 bytes) name=FUN_004208fc

void FUN_004208fc(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 0x21;
  FUN_003d347c(puVar1);
  param_1[0x3c] = 0;
  *(undefined1 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1e9) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = &DAT_004fee68;
                    /* try { // try from 00420950 to 00520953 has its CatchHandler @ 004209e8 */
  param_1[1] = 0;
  param_1[0x21] = &DAT_004fee90;
  FUN_003d2728(puVar1,0);
  param_1[2] = &DAT_004fee18;
  param_1[0x21] = &DAT_004fee40;
  FUN_003d2728(puVar1,0);
  *param_1 = &PTR_FUN_004f9158;
  param_1[0x21] = &PTR_FUN_004f91a8;
  param_1[2] = &PTR_FUN_004f9180;
  FUN_0041e124(param_1 + 3);
  FUN_003d2728(puVar1,param_1 + 3);
                    /* try { // try from 004209c4 to 005209e3 has its CatchHandler @ 004208d0 */
  return;
}


==================================================================

### FUNC 00420a4c (308 bytes) name=FUN_00420a4c

void FUN_00420a4c(long *param_1,long *param_2,undefined8 param_3,undefined4 param_4)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
                    /* try { // try from 00420a78 to 00520a7b has its CatchHandler @ 00420a10 */
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar2 + -0x18),0);
                    /* try { // try from 00420a98 to 00520a9b has its CatchHandler @ 004210f0 */
  lVar2 = param_2[4];
                    /* try { // try from 00420aa0 to 00520ad3 has its CatchHandler @ 00420a10 */
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
  FUN_003d2728((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
  plVar1 = param_1 + 3;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
  *param_1 = lVar2;
                    /* try { // try from 00420af0 to 00520af3 has its CatchHandler @ 00421104 */
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
                    /* try { // try from 00420af8 to 00520b7f has its CatchHandler @ 00420a10 */
  param_1[2] = param_2[9];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,param_3,param_4);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420bec (316 bytes) name=FUN_00420bec

void FUN_00420bec(long *param_1,undefined8 param_2,undefined4 param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x21;
  FUN_003d347c(plVar1);
  param_1[0x3c] = 0;
  *(undefined1 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1e9) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = (long)&DAT_004fee68;
  param_1[1] = 0;
  param_1[0x21] = (long)&DAT_004fee90;
  FUN_003d2728(plVar1,0);
  param_1[2] = (long)&DAT_004fee18;
  param_1[0x21] = (long)&DAT_004fee40;
  FUN_003d2728(plVar1,0);
  plVar2 = param_1 + 3;
  *param_1 = (long)&PTR_FUN_004f9158;
  param_1[0x21] = (long)&PTR_FUN_004f91a8;
  param_1[2] = (long)&PTR_FUN_004f9180;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
  lVar3 = FUN_0041ebf8(plVar2,param_2,param_3);
  if (lVar3 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420da0 (308 bytes) name=FUN_00420da0

void FUN_00420da0(long *param_1,long *param_2,undefined8 *param_3,undefined4 param_4)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d2728((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = param_2[4];
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
                    /* try { // try from 00420e0c to 00520e0f has its CatchHandler @ 004210cc */
  FUN_003d2728((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
  plVar1 = param_1 + 3;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
                    /* try { // try from 00420e38 to 00520e3b has its CatchHandler @ 00420a10 */
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  FUN_0041e124(plVar1);
  FUN_003d2728((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_0041ebf8(plVar1,*param_3,param_4);
  if (lVar2 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00420f40 (316 bytes) name=FUN_00420f40

void FUN_00420f40(long *param_1,undefined8 *param_2,undefined4 param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x21;
  FUN_003d347c(plVar1);
  param_1[0x3c] = 0;
  *(undefined1 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1e9) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = (long)&DAT_004fee68;
  param_1[1] = 0;
  param_1[0x21] = (long)&DAT_004fee90;
  FUN_003d2728(plVar1,0);
  param_1[2] = (long)&DAT_004fee18;
  param_1[0x21] = (long)&DAT_004fee40;
  FUN_003d2728(plVar1,0);
  plVar2 = param_1 + 3;
  *param_1 = (long)&PTR_FUN_004f9158;
  param_1[0x21] = (long)&PTR_FUN_004f91a8;
                    /* try { // try from 00420ff8 to 00520ffb has its CatchHandler @ 00420a10 */
  param_1[2] = (long)&PTR_FUN_004f9180;
  FUN_0041e124(plVar2);
  FUN_003d2728(plVar1,plVar2);
  lVar3 = FUN_0041ebf8(plVar2,*param_2,param_3);
  if (lVar3 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
                    /* try { // try from 00421044 to 00521047 has its CatchHandler @ 004210a8 */
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 00421058 to 0052105b has its CatchHandler @ 00420a10 */
  FUN_003d2254(lVar3,*(uint *)(lVar3 + 0x20) | 4);
                    /* try { // try from 0042106c to 0052106f has its CatchHandler @ 004210a8 */
  return;
}


==================================================================

### FUNC 004210f4 (188 bytes) name=FUN_004210f4

void FUN_004210f4(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* try { // try from 00421100 to 00521103 has its CatchHandler @ 00420a10 */
                    /* catch() { ... } // from try @ 00420af0 with catch @ 00421104 */
  lVar1 = *param_2;
  *param_1 = lVar1;
                    /* try { // try from 00421114 to 00521117 has its CatchHandler @ 00420a10 */
                    /* catch() { ... } // from try @ 00420b9c with catch @ 00421118 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)&PTR_FUN_004fecf0;
  FUN_0041e6c8(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
                    /* catch() { ... } // from try @ 004211dc with catch @ 00421150
                       catch() { ... } // from try @ 00421220 with catch @ 00421150
                       catch() { ... } // from try @ 00421880 with catch @ 00421150
                       catch() { ... } // from try @ 004218cc with catch @ 00421150
                       catch() { ... } // from try @ 00422008 with catch @ 00421150
                       catch() { ... } // from try @ 0042205c with catch @ 00421150
                       catch() { ... } // from try @ 00422698 with catch @ 00421150
                       catch() { ... } // from try @ 00422764 with catch @ 00421150
                       catch() { ... } // from try @ 00422964 with catch @ 00421150
                       catch() { ... } // from try @ 0042299c with catch @ 00421150
                       catch() { ... } // from try @ 004229f4 with catch @ 00421150
                       catch() { ... } // from try @ 00422ab4 with catch @ 00421150 */
  param_1[3] = (long)(PTR_DAT_00501bb0 + 0x10);
  FUN_003ed708(param_1 + 10);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = param_2[4];
  param_1[2] = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18) + 0x10) = param_2[5];
  lVar1 = param_2[2];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  return;
}


==================================================================

### FUNC 004211b0 (8 bytes) name=FUN_004211b0

long FUN_004211b0(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 004211b8 (8 bytes) name=FUN_004211b8

void FUN_004211b8(long param_1)

{
  FUN_00432400(param_1 + 0x80);
  return;
}


==================================================================

### FUNC 004211c0 (8 bytes) name=FUN_004211c0

void FUN_004211c0(long param_1)

{
  FUN_00432400(param_1 + 0x80);
  return;
}


==================================================================

### FUNC 004211c8 (92 bytes) name=FUN_004211c8

void FUN_004211c8(long *param_1)

{
  long lVar1;
  
                    /* try { // try from 004211dc to 005211df has its CatchHandler @ 00421150 */
  lVar1 = FUN_0041ebf8(param_1 + 3);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 00421218 to 0052121b has its CatchHandler @ 00422a3c */
                    /* try { // try from 00421220 to 00521223 has its CatchHandler @ 00421150 */
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00421224 (96 bytes) name=FUN_00421224

void FUN_00421224(long *param_1,undefined8 *param_2)

{
  long lVar1;
  
  lVar1 = FUN_0041ebf8(param_1 + 3,*param_2);
  if (lVar1 != 0) {
    FUN_003d2254((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00421284 (76 bytes) name=FUN_00421284

void FUN_00421284(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_0041e6c8(param_1 + 3);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2254(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004212d0 (56 bytes) name=FUN_004212d0

void FUN_004212d0(long param_1)

{
  undefined8 uVar1;
  
  if (*(char *)(param_1 + 0xc0) == '\0') {
    uVar1 = *(undefined8 *)(param_1 + 0x10);
    *(long *)(param_1 + 8) = param_1 + 0xac;
    *(long *)(param_1 + 0x10) = param_1 + 0xac;
    *(undefined8 *)(param_1 + 0xb0) = uVar1;
    *(undefined8 *)(param_1 + 0xb8) = *(undefined8 *)(param_1 + 0x18);
    *(long *)(param_1 + 0x18) = param_1 + 0xb0;
    *(undefined1 *)(param_1 + 0xc0) = 1;
  }
  return;
}


==================================================================

### FUNC 00421308 (64 bytes) name=FUN_00421308

void FUN_00421308(long param_1)

{
  long lVar1;
  
  if (*(char *)(param_1 + 0xc0) != '\0') {
    lVar1 = *(long *)(param_1 + 8);
    *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
    lVar1 = *(long *)(param_1 + 0xb0) + (ulong)(*(long *)(param_1 + 0x10) != lVar1) * 4;
    *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
    *(long *)(param_1 + 0xb0) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
    *(undefined1 *)(param_1 + 0xc0) = 0;
  }
  return;
}


==================================================================

### FUNC 00421348 (348 bytes) name=FUN_00421348

void FUN_00421348(long *param_1)

{
  long *plVar1;
  undefined *puVar2;
  char cVar3;
  long lVar4;
  
  plVar1 = param_1 + 7;
  puVar2 = PTR_DAT_00501c78 + 0x10;
  param_1[1] = 0;
  *param_1 = (long)puVar2;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  FUN_003ef168(plVar1);
  *param_1 = (long)&PTR_FUN_004fef30;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[0xc] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  FUN_00432208(param_1 + 0xd,param_1 + 8);
  *(undefined4 *)(param_1 + 0xf) = 0;
  *(undefined1 *)((long)param_1 + 0x7c) = 0;
  param_1[0x14] = 0x400;
  *(undefined1 *)((long)param_1 + 0x7d) = 0;
  *(undefined1 *)((long)param_1 + 0x7e) = 0;
  *(undefined1 *)((long)param_1 + 0x7f) = 0;
  *(undefined1 *)(param_1 + 0x10) = 0;
  *(undefined1 *)((long)param_1 + 0x81) = 0;
  *(undefined1 *)((long)param_1 + 0x82) = 0;
  *(undefined1 *)((long)param_1 + 0x83) = 0;
  *(undefined1 *)((long)param_1 + 0x84) = 0;
  *(undefined1 *)((long)param_1 + 0x85) = 0;
  *(undefined1 *)((long)param_1 + 0x86) = 0;
  *(undefined1 *)((long)param_1 + 0x87) = 0;
  *(undefined1 *)(param_1 + 0x11) = 0;
  *(undefined1 *)((long)param_1 + 0x89) = 0;
  *(undefined1 *)((long)param_1 + 0x8a) = 0;
  *(undefined1 *)((long)param_1 + 0x8b) = 0;
  *(undefined1 *)((long)param_1 + 0x8c) = 0;
  *(undefined1 *)((long)param_1 + 0x8d) = 0;
  *(undefined1 *)((long)param_1 + 0x8e) = 0;
  *(undefined1 *)((long)param_1 + 0x8f) = 0;
  *(undefined1 *)(param_1 + 0x12) = 0;
  *(undefined1 *)((long)param_1 + 0x91) = 0;
  *(undefined1 *)((long)param_1 + 0x92) = 0;
  *(undefined1 *)((long)param_1 + 0x93) = 0;
  param_1[0x13] = 0;
  *(undefined1 *)(param_1 + 0x15) = 0;
  *(undefined1 *)((long)param_1 + 0xa9) = 0;
  *(undefined1 *)((long)param_1 + 0xaa) = 0;
  *(undefined4 *)((long)param_1 + 0xac) = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  *(undefined1 *)(param_1 + 0x18) = 0;
  param_1[0x19] = 0;
  param_1[0x1a] = 0;
  param_1[0x1b] = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  cVar3 = FUN_0040301c(plVar1);
  if (cVar3 == '\0') {
    return;
  }
  lVar4 = FUN_004016dc(plVar1);
  param_1[0x19] = lVar4;
  return;
}


==================================================================

### FUNC 004214cc (8 bytes) name=FUN_004214cc

void FUN_004214cc(long param_1)

{
  FUN_00432400(param_1 + 0x68);
  return;
}


==================================================================

### FUNC 004214d4 (92 bytes) name=FUN_004214d4

void FUN_004214d4(long param_1)

{
  ulong uVar1;
  void *pvVar2;
  
  if ((*(char *)(param_1 + 0xa8) == '\0') && (*(long *)(param_1 + 0x98) == 0)) {
    uVar1 = *(ulong *)(param_1 + 0xa0) << 2;
    if (0x1fc0000000000000 < *(ulong *)(param_1 + 0xa0)) {
      uVar1 = 0xffffffffffffffff;
    }
    pvVar2 = operator_new__(uVar1);
    *(void **)(param_1 + 0x98) = pvVar2;
    *(undefined1 *)(param_1 + 0xa8) = 1;
    return;
  }
  return;
}


==================================================================

### FUNC 00421530 (84 bytes) name=FUN_00421530

void FUN_00421530(long param_1)

{
  if (*(char *)(param_1 + 0xa8) != '\0') {
    if (*(void **)(param_1 + 0x98) != (void *)0x0) {
      operator_delete__(*(void **)(param_1 + 0x98));
    }
    *(undefined8 *)(param_1 + 0x98) = 0;
    *(undefined1 *)(param_1 + 0xa8) = 0;
  }
  if (*(void **)(param_1 + 0xd0) != (void *)0x0) {
    operator_delete__(*(void **)(param_1 + 0xd0));
  }
  *(undefined8 *)(param_1 + 0xd0) = 0;
  *(undefined8 *)(param_1 + 0xd8) = 0;
  *(undefined8 *)(param_1 + 0xe0) = 0;
  *(undefined8 *)(param_1 + 0xe8) = 0;
  return;
}


==================================================================

### FUNC 00421584 (388 bytes) name=FUN_00421584

bool FUN_00421584(long param_1,long param_2,long param_3)

{
  long lVar1;
  long lVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  long lVar6;
  long local_10;
  undefined8 local_8;
  
  if (*(long **)(param_1 + 200) == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  cVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x30))();
  if (cVar3 == '\0') {
    iVar4 = (**(code **)(**(long **)(param_1 + 200) + 0x40))(*(long **)(param_1 + 200));
    lVar1 = -(iVar4 * param_3 + 0x1eU & 0xfffffffffffffff0);
    uVar5 = (**(code **)(**(long **)(param_1 + 200) + 0x10))
                      (*(long **)(param_1 + 200),param_1 + 0x84,param_2,param_2 + param_3 * 4,
                       &local_8,&stack0xffffffffffffff90 + lVar1,
                       &stack0xffffffffffffff90 + iVar4 * param_3 + lVar1,&local_10);
    lVar2 = local_10;
    if (uVar5 < 2) {
      param_3 = local_10 - (long)(&stack0xffffffffffffff90 + lVar1);
      lVar6 = FUN_00432544(param_1 + 0x68,&stack0xffffffffffffff90 + lVar1,param_3);
                    /* try { // try from 004216a0 to 0052179f has its CatchHandler @ 00422a88 */
      if ((param_3 == lVar6) && ((uVar5 & 1) != 0)) {
        iVar4 = (**(code **)(**(long **)(param_1 + 200) + 0x10))
                          (*(long **)(param_1 + 200),param_1 + 0x84,local_8,
                           *(undefined8 *)(param_1 + 0x28),&local_8,&stack0xffffffffffffff90 + lVar1
                           ,lVar2,&local_10);
        if (iVar4 == 2) goto LAB_004216f8;
        param_3 = local_10 - (long)(&stack0xffffffffffffff90 + lVar1);
        lVar6 = FUN_00432544(param_1 + 0x68,&stack0xffffffffffffff90 + lVar1,param_3);
      }
      goto LAB_00421654;
    }
    if (uVar5 != 3) {
LAB_004216f8:
                    /* WARNING: Subroutine does not return */
      FUN_0040f928("basic_filebuf::_M_convert_to_external conversion error");
    }
  }
  lVar6 = FUN_00432544(param_1 + 0x68,param_2,param_3);
LAB_00421654:
  return lVar6 == param_3;
}


==================================================================

### FUNC 00421708 (152 bytes) name=FUN_00421708

ulong FUN_00421708(long param_1,undefined8 param_2)

{
  char cVar1;
  int iVar2;
  
  cVar1 = (**(code **)(**(long **)(param_1 + 200) + 0x30))(*(long **)(param_1 + 200));
  if (cVar1 != '\0') {
    return (ulong)(*(long *)(param_1 + 0x10) - *(long *)(param_1 + 0x18)) >> 2;
  }
  iVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x38))
                    (*(long **)(param_1 + 200),param_2,*(undefined8 *)(param_1 + 0xd0),
                     *(undefined8 *)(param_1 + 0xe0),
                     *(long *)(param_1 + 0x10) - *(long *)(param_1 + 8) >> 2);
  return (ulong)(uint)(((int)*(undefined8 *)(param_1 + 0xd0) + iVar2) -
                      (int)*(undefined8 *)(param_1 + 0xe8));
}


==================================================================

### FUNC 004217a0 (364 bytes) name=FUN_004217a0

bool FUN_004217a0(long *param_1)

{
  bool bVar1;
  byte bVar2;
  uint uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long local_88;
  undefined1 auStack_80 [128];
  
  bVar1 = true;
  if ((ulong)param_1[4] < (ulong)param_1[5]) {
    iVar4 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
    bVar1 = iVar4 != -1;
  }
  if (*(char *)((long)param_1 + 0xaa) != '\0') {
    if ((long *)param_1[0x19] == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0040f118();
    }
                    /* try { // try from 004217e8 to 005217eb has its CatchHandler @ 00422a60 */
    bVar2 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
                    /* try { // try from 004217f0 to 0052180f has its CatchHandler @ 00422a88 */
    if (bVar2 < bVar1) {
      lVar5 = 0;
      while( true ) {
                    /* try { // try from 0042183c to 0052183f has its CatchHandler @ 00422a4c */
                    /* try { // try from 00421844 to 00521847 has its CatchHandler @ 00422a88 */
        uVar3 = (**(code **)(*(long *)param_1[0x19] + 0x18))
                          ((long *)param_1[0x19],(long)param_1 + 0x84,auStack_80,&stack0x00000000,
                           &local_88);
        if (uVar3 == 2) {
                    /* try { // try from 004218cc to 005218cf has its CatchHandler @ 00421150 */
          return false;
        }
        if (uVar3 < 2) {
          lVar6 = local_88 - (long)auStack_80;
          if (lVar6 < 1) break;
          lVar5 = FUN_00432544(param_1 + 0xd,auStack_80,lVar6);
                    /* try { // try from 004218c4 to 005218c7 has its CatchHandler @ 004229e4 */
          if (lVar6 != lVar5) {
            return false;
          }
        }
        if ((lVar5 < 1) || (uVar3 != 1)) break;
        if (bVar1 == false) {
          return false;
        }
      }
      if (bVar1 == false) {
        return false;
      }
                    /* try { // try from 00421880 to 00521883 has its CatchHandler @ 00421150 */
      iVar4 = (**(code **)(*param_1 + 0x68))(param_1,0xffffffff);
      return iVar4 != -1;
    }
  }
  return bVar1;
}


==================================================================

### FUNC 0042190c (272 bytes) name=FUN_0042190c

undefined1  [16] FUN_0042190c(long param_1,undefined8 param_2,undefined8 param_3,ulong param_4)

{
  char cVar1;
  long lVar2;
  undefined8 uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  
  cVar1 = FUN_004217a0();
  if (cVar1 == '\0') {
    uVar4 = 0;
    uVar5 = 0;
    uVar6 = 0;
    uVar7 = 0;
    uVar8 = 0;
    uVar9 = 0;
    uVar10 = 0;
    uVar11 = 0;
    lVar2 = -1;
  }
  else {
    lVar2 = FUN_00432660(param_1 + 0x68,param_2,param_3);
    if (lVar2 == -1) {
      uVar4 = 0;
      uVar5 = 0;
      uVar6 = 0;
      uVar7 = 0;
      uVar8 = 0;
      uVar9 = 0;
      uVar10 = 0;
      uVar11 = 0;
    }
    else {
      uVar3 = *(undefined8 *)(param_1 + 0x98);
      uVar11 = param_4 & 0xff;
      uVar10 = param_4 >> 8 & 0xff;
      *(undefined8 *)(param_1 + 0xe8) = *(undefined8 *)(param_1 + 0xd0);
      uVar9 = param_4 >> 0x10 & 0xff;
      *(undefined8 *)(param_1 + 0xe0) = *(undefined8 *)(param_1 + 0xd0);
      uVar8 = param_4 >> 0x18 & 0xff;
      *(undefined1 *)(param_1 + 0xa9) = 0;
      uVar7 = param_4 >> 0x20 & 0xff;
      *(undefined1 *)(param_1 + 0xaa) = 0;
      uVar6 = param_4 >> 0x28 & 0xff;
      *(undefined8 *)(param_1 + 8) = uVar3;
      uVar5 = param_4 >> 0x30 & 0xff;
      *(undefined8 *)(param_1 + 0x10) = uVar3;
      uVar4 = param_4 >> 0x38;
      *(undefined8 *)(param_1 + 0x18) = uVar3;
      *(undefined8 *)(param_1 + 0x28) = 0;
      *(undefined8 *)(param_1 + 0x20) = 0;
      *(undefined8 *)(param_1 + 0x30) = 0;
      *(ulong *)(param_1 + 0x84) = param_4;
    }
  }
  auVar12._8_8_ =
       uVar11 | uVar10 << 8 | uVar9 << 0x10 | uVar8 << 0x18 | uVar7 << 0x20 | uVar6 << 0x28 |
       uVar5 << 0x30 | uVar4 << 0x38;
  auVar12._0_8_ = lVar2;
  return auVar12;
}


==================================================================

### FUNC 00421a1c (524 bytes) name=FUN_00421a1c

int FUN_00421a1c(long param_1,int param_2)

{
  bool bVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  int *piVar6;
  int *piVar7;
  int *piVar8;
  int local_4;
  
  if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
    return -1;
  }
  if (*(char *)(param_1 + 0xa9) != '\0') {
    if (*(char *)(param_1 + 0xc0) != '\0') {
      lVar4 = *(long *)(param_1 + 8);
      *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
      lVar4 = *(long *)(param_1 + 0xb0) + (ulong)(*(long *)(param_1 + 0x10) != lVar4) * 4;
      *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
      *(long *)(param_1 + 0xb0) = lVar4;
      *(long *)(param_1 + 0x10) = lVar4;
      *(undefined1 *)(param_1 + 0xc0) = 0;
    }
    iVar3 = FUN_00421708(param_1,param_1 + 0x8c);
    lVar4 = FUN_0042190c(param_1,(long)iVar3,1,*(undefined8 *)(param_1 + 0x8c));
    if (lVar4 == -1) {
      return -1;
    }
  }
  piVar6 = *(int **)(param_1 + 0x20);
  bVar1 = param_2 == -1;
  piVar7 = *(int **)(param_1 + 0x28);
  if (piVar7 <= piVar6) {
    if (*(ulong *)(param_1 + 0xa0) < 2) {
      if (bVar1) {
        param_2 = 0;
      }
      else {
        local_4 = param_2;
        cVar2 = FUN_00421584(param_1,&local_4,1);
        if (cVar2 == '\0') {
          return -1;
        }
      }
      *(undefined1 *)(param_1 + 0xaa) = 1;
      return param_2;
    }
    if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
      uVar5 = *(undefined8 *)(param_1 + 0x98);
      *(undefined8 *)(param_1 + 8) = uVar5;
      *(undefined8 *)(param_1 + 0x10) = uVar5;
      *(undefined8 *)(param_1 + 0x18) = uVar5;
      *(undefined8 *)(param_1 + 0x28) = 0;
      *(undefined8 *)(param_1 + 0x20) = 0;
      *(undefined8 *)(param_1 + 0x30) = 0;
    }
    else {
      lVar4 = *(long *)(param_1 + 0x98);
      *(long *)(param_1 + 8) = lVar4;
      *(long *)(param_1 + 0x10) = lVar4;
      *(long *)(param_1 + 0x18) = lVar4;
      *(long *)(param_1 + 0x28) = lVar4;
      *(long *)(param_1 + 0x20) = lVar4;
      *(ulong *)(param_1 + 0x30) = lVar4 + *(ulong *)(param_1 + 0xa0) * 4 + -4;
    }
    *(undefined1 *)(param_1 + 0xaa) = 1;
    if (bVar1) {
      return 0;
    }
    piVar6 = *(int **)(param_1 + 0x28);
    *piVar6 = param_2;
    *(int **)(param_1 + 0x28) = piVar6 + 1;
    return param_2;
  }
  piVar8 = piVar7;
  if (!bVar1) {
    piVar8 = piVar7 + 1;
    *piVar7 = param_2;
    *(int **)(param_1 + 0x28) = piVar8;
  }
  cVar2 = FUN_00421584(param_1,piVar6,(long)piVar8 - (long)piVar6 >> 2);
  if (cVar2 == '\0') {
    return -1;
  }
  if ((*(uint *)(param_1 + 0x78) & 0x11) == 0) {
    uVar5 = *(undefined8 *)(param_1 + 0x98);
    *(undefined8 *)(param_1 + 8) = uVar5;
    *(undefined8 *)(param_1 + 0x10) = uVar5;
                    /* try { // try from 00421c14 to 00521c17 has its CatchHandler @ 004229a0 */
    *(undefined8 *)(param_1 + 0x18) = uVar5;
  }
  else {
    lVar4 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar4;
    *(long *)(param_1 + 0x10) = lVar4;
    *(long *)(param_1 + 0x18) = lVar4;
    if (1 < *(ulong *)(param_1 + 0xa0)) {
      *(long *)(param_1 + 0x28) = lVar4;
      *(long *)(param_1 + 0x20) = lVar4;
      *(ulong *)(param_1 + 0x30) = lVar4 + *(ulong *)(param_1 + 0xa0) * 4 + -4;
      goto LAB_00421b84;
    }
  }
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
LAB_00421b84:
                    /* try { // try from 00421b84 to 00521ba3 has its CatchHandler @ 004229c0 */
  if (bVar1) {
    param_2 = 0;
  }
  return param_2;
}


==================================================================

### FUNC 00421c28 (480 bytes) name=FUN_00421c28

undefined1  [16] FUN_00421c28(long param_1,long param_2,int param_3)

{
  byte bVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  bool bVar6;
  long lVar7;
  undefined8 uVar8;
  undefined1 auVar9 [16];
  undefined8 local_8;
  
  if (*(long **)(param_1 + 200) == (long *)0x0) {
LAB_00421c74:
    bVar6 = true;
    lVar5 = 0;
  }
  else {
    iVar3 = (**(code **)(**(long **)(param_1 + 200) + 0x28))();
    lVar5 = (long)iVar3;
    if (iVar3 < 0) goto LAB_00421c74;
    bVar6 = iVar3 < 1;
  }
  lVar7 = -1;
  bVar1 = FUN_00432400(param_1 + 0x68);
  uVar8 = 0;
  if (bVar1 <= (byte)(bVar6 & param_2 != 0)) goto LAB_00421d08;
  if (((param_2 != 0) || (param_3 != 1)) ||
     ((*(char *)(param_1 + 0xaa) != '\0' &&
      (cVar2 = (**(code **)(**(long **)(param_1 + 200) + 0x30))(*(long **)(param_1 + 200)),
      cVar2 == '\0')))) {
    if (*(char *)(param_1 + 0xc0) != '\0') {
      lVar4 = *(long *)(param_1 + 8);
      *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
      lVar4 = *(long *)(param_1 + 0xb0) + (ulong)(*(long *)(param_1 + 0x10) != lVar4) * 4;
      *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
      *(long *)(param_1 + 0xb0) = lVar4;
      *(long *)(param_1 + 0x10) = lVar4;
      *(undefined1 *)(param_1 + 0xc0) = 0;
    }
    local_8 = *(undefined8 *)(param_1 + 0x7c);
    lVar5 = lVar5 * param_2;
    if ((param_3 != 1) || (*(char *)(param_1 + 0xa9) == '\0')) goto LAB_00421d64;
    bVar6 = false;
LAB_00421ddc:
    local_8 = *(undefined8 *)(param_1 + 0x8c);
    iVar3 = FUN_00421708(param_1);
    lVar5 = lVar5 + iVar3;
    if (!bVar6) {
LAB_00421d64:
      auVar9 = FUN_0042190c(param_1,lVar5,param_3,local_8);
      return auVar9;
    }
  }
  else {
    local_8 = *(undefined8 *)(param_1 + 0x7c);
    if (*(char *)(param_1 + 0xa9) != '\0') {
      bVar6 = true;
      lVar5 = 0;
      goto LAB_00421ddc;
    }
    lVar5 = 0;
  }
  if (*(char *)(param_1 + 0xaa) != '\0') {
    lVar5 = *(long *)(param_1 + 0x28) - *(long *)(param_1 + 0x20) >> 2;
  }
  lVar4 = FUN_00432660(param_1 + 0x68,0,1);
  if (lVar4 != -1) {
    lVar7 = lVar4 + lVar5;
    uVar8 = local_8;
  }
LAB_00421d08:
  auVar9._8_8_ = uVar8;
  auVar9._0_8_ = lVar7;
  return auVar9;
}


==================================================================

### FUNC 00421e08 (244 bytes) name=FUN_00421e08

undefined1  [16] FUN_00421e08(long param_1,undefined8 param_2,undefined8 param_3)

{
  char cVar1;
  undefined8 uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  undefined1 auVar12 [16];
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 == '\0') {
    uVar4 = 0;
    uVar5 = 0;
    uVar6 = 0;
    uVar7 = 0;
    uVar8 = 0;
    uVar9 = 0;
    uVar10 = 0;
    uVar11 = 0;
    uVar2 = 0xffffffffffffffff;
  }
  else {
    if (*(char *)(param_1 + 0xc0) != '\0') {
      lVar3 = *(long *)(param_1 + 8);
      *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_1 + 0x98);
      lVar3 = *(long *)(param_1 + 0xb0) + (ulong)(*(long *)(param_1 + 0x10) != lVar3) * 4;
      *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(param_1 + 0xb8);
      *(long *)(param_1 + 0xb0) = lVar3;
      *(long *)(param_1 + 0x10) = lVar3;
      *(undefined1 *)(param_1 + 0xc0) = 0;
    }
    auVar12 = FUN_0042190c(param_1,param_2,0,param_3);
    uVar4 = auVar12._8_8_;
    uVar2 = auVar12._0_8_;
    uVar11 = uVar4 & 0xff;
    uVar10 = uVar4 >> 8 & 0xff;
    uVar9 = uVar4 >> 0x10 & 0xff;
    uVar8 = uVar4 >> 0x18 & 0xff;
    uVar7 = uVar4 >> 0x20 & 0xff;
    uVar6 = uVar4 >> 0x28 & 0xff;
    uVar5 = uVar4 >> 0x30 & 0xff;
    uVar4 = uVar4 >> 0x38;
  }
  auVar12._8_8_ =
       uVar11 | uVar10 << 8 | uVar9 << 0x10 | uVar8 << 0x18 | uVar7 << 0x20 | uVar6 << 0x28 |
       uVar5 << 0x30 | uVar4 << 0x38;
  auVar12._0_8_ = uVar2;
  return auVar12;
}


==================================================================

### FUNC 00421efc (488 bytes) name=FUN_00421efc

void FUN_00421efc(long *param_1,undefined8 param_2)

{
  void *__src;
  size_t __n;
  char cVar1;
  int iVar2;
  long *plVar3;
  long lVar4;
  size_t sVar5;
  
                    /* try { // try from 00421f10 to 00521f13 has its CatchHandler @ 004229f8 */
  cVar1 = FUN_0040301c(param_2);
  if (cVar1 == '\0') {
    plVar3 = (long *)0x0;
  }
  else {
    plVar3 = (long *)FUN_004016dc(param_2);
  }
  cVar1 = FUN_00432400(param_1 + 0xd);
  if ((cVar1 == '\0') ||
     ((*(char *)((long)param_1 + 0xa9) == '\0' && (*(char *)((long)param_1 + 0xaa) == '\0'))))
  goto LAB_00421f44;
  if ((long *)param_1[0x19] == (long *)0x0) {
LAB_004220e0:
                    /* WARNING: Subroutine does not return */
    FUN_0040f118();
  }
  iVar2 = (**(code **)(*(long *)param_1[0x19] + 0x28))();
  if (iVar2 == -1) {
LAB_00421fe4:
    param_1[0x19] = 0;
    return;
  }
                    /* try { // try from 00421f84 to 00521f87 has its CatchHandler @ 00422a88 */
  if (*(char *)((long)param_1 + 0xa9) == '\0') {
                    /* try { // try from 00422008 to 0052200b has its CatchHandler @ 00421150 */
    if (*(char *)((long)param_1 + 0xaa) != '\0') {
      cVar1 = FUN_004217a0(param_1);
      if (cVar1 == '\0') goto LAB_00421fe4;
      lVar4 = param_1[0x13];
      param_1[1] = lVar4;
      param_1[2] = lVar4;
      param_1[3] = lVar4;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
    }
  }
  else {
    if ((long *)param_1[0x19] == (long *)0x0) goto LAB_004220e0;
    cVar1 = (**(code **)(*(long *)param_1[0x19] + 0x30))();
    if (cVar1 == '\0') {
                    /* try { // try from 00422054 to 00522057 has its CatchHandler @ 00422aa4 */
                    /* try { // try from 0042205c to 0052215b has its CatchHandler @ 00421150 */
      lVar4 = param_1[0x1a];
      iVar2 = (**(code **)(*(long *)param_1[0x19] + 0x38))
                        ((long *)param_1[0x19],(long)param_1 + 0x8c,lVar4,param_1[0x1c],
                         param_1[2] - param_1[1] >> 2);
      __src = (void *)(lVar4 + iVar2);
      param_1[0x1c] = (long)__src;
      __n = param_1[0x1d] - (long)__src;
      sVar5 = 0;
      if (__n != 0) {
        memmove((void *)param_1[0x1a],__src,__n);
        sVar5 = __n;
      }
      lVar4 = param_1[0x13];
      param_1[0x1c] = param_1[0x1a];
      param_1[0x1d] = param_1[0x1a] + sVar5;
      param_1[1] = lVar4;
      param_1[2] = lVar4;
      param_1[3] = lVar4;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined8 *)((long)param_1 + 0x84) = *(undefined8 *)((long)param_1 + 0x7c);
      *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x7c);
    }
    else if (((plVar3 != (long *)0x0) &&
             (cVar1 = (**(code **)(*plVar3 + 0x30))(plVar3), cVar1 == '\0')) &&
            (lVar4 = (**(code **)(*param_1 + 0x20))(param_1,0,1,(int)param_1[0xf]), lVar4 == -1))
    goto LAB_00421fe4;
  }
LAB_00421f44:
  param_1[0x19] = (long)plVar3;
  return;
}


==================================================================

### FUNC 004220e4 (128 bytes) name=FUN_004220e4

void FUN_004220e4(long param_1,long param_2)

{
  long lVar1;
  
  if (((*(uint *)(param_1 + 0x78) >> 3 & 1) == 0) || (param_2 < 1)) {
    lVar1 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
    *(long *)(param_1 + 0x18) = lVar1;
  }
  else {
    lVar1 = *(long *)(param_1 + 0x98);
    *(long *)(param_1 + 8) = lVar1;
    *(long *)(param_1 + 0x10) = lVar1;
    *(long *)(param_1 + 0x18) = lVar1 + param_2 * 4;
  }
  if (((param_2 == 0) && ((*(uint *)(param_1 + 0x78) & 0x11) != 0)) &&
     (1 < *(ulong *)(param_1 + 0xa0))) {
    *(long *)(param_1 + 0x28) = lVar1;
    *(long *)(param_1 + 0x20) = lVar1;
    *(ulong *)(param_1 + 0x30) = lVar1 + *(ulong *)(param_1 + 0xa0) * 4 + -4;
    return;
  }
  *(undefined8 *)(param_1 + 0x28) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  return;
}


==================================================================

### FUNC 00422164 (8 bytes) name=FUN_00422164

long FUN_00422164(long param_1)

{
  return param_1 + 0x10;
}


==================================================================

### FUNC 0042216c (8 bytes) name=FUN_0042216c

void FUN_0042216c(long param_1)

{
  FUN_00432400(param_1 + 0x78);
  return;
}


==================================================================

### FUNC 00422174 (8 bytes) name=FUN_00422174

void FUN_00422174(long param_1)

{
  FUN_00432400(param_1 + 0x78);
  return;
}


==================================================================

### FUNC 0042217c (8 bytes) name=FUN_0042217c

long FUN_0042217c(long param_1)

{
  return param_1 + 8;
}


==================================================================

### FUNC 00422184 (8 bytes) name=FUN_00422184

void FUN_00422184(long param_1)

{
  FUN_00432400(param_1 + 0x70);
  return;
}


==================================================================

### FUNC 0042218c (8 bytes) name=FUN_0042218c

void FUN_0042218c(long param_1)

{
  FUN_00432400(param_1 + 0x70);
  return;
}


==================================================================

### FUNC 00422194 (8 bytes) name=FUN_00422194

long FUN_00422194(long param_1)

{
  return param_1 + 0x18;
}


==================================================================

### FUNC 0042219c (8 bytes) name=FUN_0042219c

void FUN_0042219c(long param_1)

{
  FUN_00432400(param_1 + 0x80);
  return;
}


==================================================================

### FUNC 004221a4 (8 bytes) name=FUN_004221a4

void FUN_004221a4(long param_1)

{
  FUN_00432400(param_1 + 0x80);
  return;
}


==================================================================

### FUNC 004221ac (156 bytes) name=FUN_004221ac

void FUN_004221ac(long *param_1)

{
  long lVar1;
  undefined8 uVar2;
  long lVar3;
  
  lVar3 = *param_1;
  *(undefined4 *)(lVar3 + 0x78) = 0;
  *(undefined1 *)(lVar3 + 0xc0) = 0;
  if (*(char *)(lVar3 + 0xa8) != '\0') {
    if (*(void **)(lVar3 + 0x98) != (void *)0x0) {
      operator_delete__(*(void **)(lVar3 + 0x98));
    }
    *(undefined8 *)(lVar3 + 0x98) = 0;
    *(undefined1 *)(lVar3 + 0xa8) = 0;
  }
  if (*(void **)(lVar3 + 0xd0) != (void *)0x0) {
    operator_delete__(*(void **)(lVar3 + 0xd0));
  }
  lVar1 = *param_1;
  *(undefined8 *)(lVar3 + 0xd0) = 0;
  *(undefined8 *)(lVar3 + 0xd8) = 0;
  *(undefined8 *)(lVar3 + 0xe0) = 0;
  *(undefined8 *)(lVar3 + 0xe8) = 0;
                    /* try { // try from 00422208 to 0052220b has its CatchHandler @ 004229a0 */
  *(undefined8 *)(lVar1 + 0x84) = *(undefined8 *)(lVar1 + 0x7c);
  uVar2 = *(undefined8 *)(lVar1 + 0x98);
  lVar3 = *param_1;
  *(undefined1 *)(lVar1 + 0xa9) = 0;
  *(undefined1 *)(lVar1 + 0xaa) = 0;
  *(undefined8 *)(lVar1 + 8) = uVar2;
  *(undefined8 *)(lVar1 + 0x10) = uVar2;
  *(undefined8 *)(lVar1 + 0x18) = uVar2;
  *(undefined8 *)(lVar1 + 0x28) = 0;
  *(undefined8 *)(lVar1 + 0x20) = 0;
  *(undefined8 *)(lVar1 + 0x30) = 0;
  *(undefined8 *)(lVar3 + 0x8c) = *(undefined8 *)(lVar3 + 0x84);
  return;
}


==================================================================

### FUNC 00422248 (240 bytes) name=FUN_00422248

long FUN_00422248(long param_1)

{
  char cVar1;
  long lVar2;
  undefined8 uVar3;
  
  cVar1 = FUN_00432400(param_1 + 0x68);
  if (cVar1 != '\0') {
    cVar1 = FUN_004217a0(param_1);
    *(undefined4 *)(param_1 + 0x78) = 0;
    *(undefined1 *)(param_1 + 0xc0) = 0;
    if (*(char *)(param_1 + 0xa8) != '\0') {
      if (*(void **)(param_1 + 0x98) != (void *)0x0) {
                    /* try { // try from 00422314 to 00522317 has its CatchHandler @ 00422928 */
        operator_delete__(*(void **)(param_1 + 0x98));
      }
      *(undefined8 *)(param_1 + 0x98) = 0;
      *(undefined1 *)(param_1 + 0xa8) = 0;
    }
    if (*(void **)(param_1 + 0xd0) != (void *)0x0) {
      operator_delete__(*(void **)(param_1 + 0xd0));
    }
    *(undefined8 *)(param_1 + 0xd0) = 0;
    *(undefined8 *)(param_1 + 0xd8) = 0;
    *(undefined8 *)(param_1 + 0xe0) = 0;
    *(undefined8 *)(param_1 + 0xe8) = 0;
    uVar3 = *(undefined8 *)(param_1 + 0x98);
    *(undefined1 *)(param_1 + 0xa9) = 0;
    *(undefined1 *)(param_1 + 0xaa) = 0;
    *(undefined8 *)(param_1 + 8) = uVar3;
    *(undefined8 *)(param_1 + 0x10) = uVar3;
    *(undefined8 *)(param_1 + 0x18) = uVar3;
    *(undefined8 *)(param_1 + 0x28) = 0;
    *(undefined8 *)(param_1 + 0x20) = 0;
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined8 *)(param_1 + 0x84) = *(undefined8 *)(param_1 + 0x7c);
    *(undefined8 *)(param_1 + 0x8c) = *(undefined8 *)(param_1 + 0x7c);
    lVar2 = FUN_00432440(param_1 + 0x68);
    if ((lVar2 != 0) && (cVar1 == '\x01')) {
      return param_1;
    }
  }
  return 0;
}


==================================================================

### FUNC 00422388 (76 bytes) name=FUN_00422388

void FUN_00422388(long *param_1)

{
                    /* try { // try from 00422388 to 0052238b has its CatchHandler @ 00422a80 */
                    /* try { // try from 004223a4 to 005223a7 has its CatchHandler @ 004229a0 */
  *param_1 = (long)&PTR_FUN_004fef30;
  FUN_00422248();
  FUN_00432214(param_1 + 0xd);
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  return;
}


==================================================================

### FUNC 004223d4 (84 bytes) name=FUN_004223d4

void FUN_004223d4(long *param_1)

{
  *param_1 = (long)&PTR_FUN_004fef30;
  FUN_00422248();
                    /* try { // try from 004223f8 to 005223fb has its CatchHandler @ 00422a70 */
  FUN_00432214(param_1 + 0xd);
                    /* try { // try from 00422400 to 00522403 has its CatchHandler @ 004229a0 */
  *param_1 = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 7);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00422428 (132 bytes) name=FUN_00422428

void FUN_00422428(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  FUN_00421348(param_1 + 2);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 2);
                    /* try { // try from 004224a0 to 005224a3 has its CatchHandler @ 004229c0 */
  return;
}


==================================================================

### FUNC 00422504 (164 bytes) name=FUN_00422504

void FUN_00422504(undefined8 *param_1)

{
  undefined8 *puVar1;
  
                    /* try { // try from 00422508 to 0052250b has its CatchHandler @ 00422a90 */
                    /* try { // try from 00422510 to 005225d3 has its CatchHandler @ 00422a88 */
  puVar1 = param_1 + 0x20;
  FUN_003d347c(puVar1);
  param_1[0x3b] = 0;
  *(undefined4 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e4) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = &DAT_004fefb8;
  param_1[1] = 0;
  param_1[0x20] = &LAB_004fefe0;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f91f8;
  param_1[0x20] = &PTR_FUN_004f9220;
  FUN_00421348(param_1 + 2);
  FUN_003d3008(puVar1,param_1 + 2);
  return;
}


==================================================================

### FUNC 00422608 (128 bytes) name=FUN_00422608

void FUN_00422608(long *param_1,long *param_2)

{
  long lVar1;
  
                    /* try { // try from 00422610 to 00522613 has its CatchHandler @ 004229c0 */
  lVar1 = *param_2;
                    /* try { // try from 00422624 to 00522627 has its CatchHandler @ 004229f8 */
  *param_1 = lVar1;
                    /* try { // try from 00422630 to 00522633 has its CatchHandler @ 00422a88 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[2] = (long)&PTR_FUN_004fef30;
  FUN_00422248(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
  param_1[2] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 9);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
  return;
}


==================================================================

### FUNC 00422688 (128 bytes) name=FUN_00422688

void FUN_00422688(undefined8 *param_1)

{
                    /* try { // try from 00422698 to 0052269b has its CatchHandler @ 00421150 */
                    /* try { // try from 004226a8 to 005226ab has its CatchHandler @ 00422978 */
  *param_1 = &PTR_FUN_004f91f8;
  param_1[2] = &PTR_FUN_004fef30;
  param_1[0x20] = &PTR_FUN_004f9220;
  FUN_00422248(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
  param_1[2] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0x20] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x20);
  return;
}


==================================================================

### FUNC 00422708 (16 bytes) name=FUN_00422708

void FUN_00422708(long *param_1)

{
  FUN_00422688((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 00422718 (136 bytes) name=FUN_00422718

void FUN_00422718(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f91f8;
  param_1[2] = &PTR_FUN_004fef30;
  param_1[0x20] = &PTR_FUN_004f9220;
  FUN_00422248(param_1 + 2);
  FUN_00432214(param_1 + 0xf);
                    /* try { // try from 00422764 to 005227b7 has its CatchHandler @ 00421150 */
  param_1[2] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 9);
  param_1[0x20] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x20);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 004227a0 (16 bytes) name=FUN_004227a0

void FUN_004227a0(long *param_1)

{
  FUN_00422718((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 004227b0 (124 bytes) name=FUN_004227b0

void FUN_004227b0(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[1];
  *param_1 = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1) = param_2[2];
  FUN_003d3008((long)param_1 + lVar1,0);
  lVar1 = *param_2;
  *param_1 = lVar1;
                    /* try { // try from 004227f8 to 005227fb has its CatchHandler @ 004229a0 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  FUN_00421348(param_1 + 1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 1);
  return;
}


==================================================================

### FUNC 00422884 (160 bytes) name=FUN_00422884

void FUN_00422884(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  puVar1 = param_1 + 0x1f;
  FUN_003d347c(puVar1);
  param_1[0x3a] = 0;
  *(undefined4 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1dc) = 0;
                    /* try { // try from 004228b4 to 005228b7 has its CatchHandler @ 00422a80 */
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = &DAT_004ff008;
  param_1[0x1f] = &LAB_004ff030;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f9268;
  param_1[0x1f] = &PTR_FUN_004f9290;
  FUN_00421348(param_1 + 1);
                    /* try { // try from 00422908 to 0052290b has its CatchHandler @ 00422968 */
                    /* try { // try from 00422910 to 00522913 has its CatchHandler @ 00422a80 */
  FUN_003d3008(puVar1,param_1 + 1);
  return;
}


==================================================================

### FUNC 00422984 (128 bytes) name=FUN_00422984

void FUN_00422984(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
                    /* try { // try from 0042299c to 0052299f has its CatchHandler @ 00421150 */
                    /* catch() { ... } // from try @ 00421c14 with catch @ 004229a0
                       catch() { ... } // from try @ 00422208 with catch @ 004229a0
                       catch() { ... } // from try @ 004223a4 with catch @ 004229a0
                       catch() { ... } // from try @ 00422400 with catch @ 004229a0
                       catch() { ... } // from try @ 00422604 with catch @ 004229a0
                       catch() { ... } // from try @ 004227f8 with catch @ 004229a0
                       catch() { ... } // from try @ 0042284c with catch @ 004229a0 */
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = (long)&PTR_FUN_004fef30;
  FUN_00422248(param_1 + 1);
                    /* catch() { ... } // from try @ 00421b84 with catch @ 004229c0
                       catch() { ... } // from try @ 004224a0 with catch @ 004229c0
                       catch() { ... } // from try @ 00422610 with catch @ 004229c0 */
  FUN_00432214(param_1 + 0xe);
  param_1[1] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 8);
                    /* catch() { ... } // from try @ 004218c4 with catch @ 004229e4 */
  lVar1 = param_2[1];
  *param_1 = lVar1;
                    /* try { // try from 004229f4 to 005229f7 has its CatchHandler @ 00421150 */
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[2];
                    /* catch() { ... } // from try @ 00421f10 with catch @ 004229f8
                       catch() { ... } // from try @ 00422624 with catch @ 004229f8 */
  return;
}


==================================================================

### FUNC 00422a04 (128 bytes) name=FUN_00422a04

void FUN_00422a04(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f9268;
  param_1[0x1f] = &PTR_FUN_004f9290;
                    /* catch() { ... } // from try @ 00421218 with catch @ 00422a3c */
  param_1[1] = &PTR_FUN_004fef30;
  FUN_00422248(param_1 + 1);
  FUN_00432214(param_1 + 0xe);
                    /* catch() { ... } // from try @ 0042183c with catch @ 00422a4c */
  param_1[1] = PTR_DAT_00501c78 + 0x10;
                    /* catch() { ... } // from try @ 004217e8 with catch @ 00422a60 */
  FUN_003ed708(param_1 + 8);
                    /* catch() { ... } // from try @ 004223f8 with catch @ 00422a70 */
  param_1[0x1f] = PTR_DAT_00501ea8 + 0x10;
                    /* catch() { ... } // from try @ 00422388 with catch @ 00422a80
                       catch() { ... } // from try @ 00422860 with catch @ 00422a80
                       catch() { ... } // from try @ 004228b4 with catch @ 00422a80
                       catch() { ... } // from try @ 00422910 with catch @ 00422a80 */
  FUN_003d381c(param_1 + 0x1f);
  return;
}


==================================================================

### FUNC 00422a84 (16 bytes) name=FUN_00422a84

void FUN_00422a84(long *param_1)

{
                    /* catch() { ... } // from try @ 004216a0 with catch @ 00422a88
                       catch() { ... } // from try @ 004217f0 with catch @ 00422a88
                       catch() { ... } // from try @ 00421844 with catch @ 00422a88
                       catch() { ... } // from try @ 00421f84 with catch @ 00422a88
                       catch() { ... } // from try @ 004224c4 with catch @ 00422a88
                       catch() { ... } // from try @ 00422510 with catch @ 00422a88
                       catch() { ... } // from try @ 00422630 with catch @ 00422a88 */
                    /* catch() { ... } // from try @ 00422508 with catch @ 00422a90 */
  FUN_00422a04((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 00422a94 (136 bytes) name=FUN_00422a94

void FUN_00422a94(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 00422054 with catch @ 00422aa4 */
                    /* try { // try from 00422ab4 to 00522ab7 has its CatchHandler @ 00421150 */
                    /* catch() { ... } // from try @ 00422844 with catch @ 00422ab8 */
  *param_1 = &PTR_FUN_004f9268;
  param_1[0x1f] = &PTR_FUN_004f9290;
  param_1[1] = &PTR_FUN_004fef30;
  FUN_00422248(param_1 + 1);
  FUN_00432214(param_1 + 0xe);
  param_1[1] = PTR_DAT_00501c78 + 0x10;
                    /* catch() { ... } // from try @ 00422be0 with catch @ 00422af0
                       catch() { ... } // from try @ 00422c24 with catch @ 00422af0
                       catch() { ... } // from try @ 00422c74 with catch @ 00422af0 */
  FUN_003ed708(param_1 + 8);
  param_1[0x1f] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x1f);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00422b1c (16 bytes) name=FUN_00422b1c

void FUN_00422b1c(long *param_1)

{
  FUN_00422a94((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 00422b2c (204 bytes) name=FUN_00422b2c

void FUN_00422b2c(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = param_2[2];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar1 + -0x18),0);
  lVar1 = param_2[4];
  param_1[2] = lVar1;
  lVar1 = *(long *)(lVar1 + -0x18);
  *(long *)((long)param_1 + lVar1 + 0x10) = param_2[5];
  FUN_003d3008((long)param_1 + lVar1 + 0x10,0);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  FUN_00421348(param_1 + 3);
                    /* try { // try from 00422be0 to 00522be3 has its CatchHandler @ 00422af0 */
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),param_1 + 3);
  return;
}


==================================================================

### FUNC 00422c64 (212 bytes) name=FUN_00422c64

void FUN_00422c64(undefined8 *param_1)

{
  undefined8 *puVar1;
  
                    /* catch() { ... } // from try @ 00422c1c with catch @ 00422c64 */
  puVar1 = param_1 + 0x21;
                    /* try { // try from 00422c74 to 00522c77 has its CatchHandler @ 00422af0 */
                    /* catch() { ... } // from try @ 00422ccc with catch @ 00422c78
                       catch() { ... } // from try @ 00422d10 with catch @ 00422c78
                       catch() { ... } // from try @ 00422e8c with catch @ 00422c78 */
  FUN_003d347c(puVar1);
  param_1[0x3c] = 0;
  *(undefined4 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1ec) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = &DAT_004ff0a8;
  param_1[1] = 0;
  param_1[0x21] = &LAB_004ff0d0;
  FUN_003d3008(puVar1,0);
                    /* try { // try from 00422ccc to 00522ccf has its CatchHandler @ 00422c78 */
  param_1[2] = &DAT_004ff058;
  param_1[0x21] = &DAT_004ff080;
  FUN_003d3008(puVar1,0);
  *param_1 = &PTR_FUN_004f9308;
                    /* try { // try from 00422d08 to 00522d0b has its CatchHandler @ 00422e7c */
  param_1[0x21] = &PTR_FUN_004f9358;
                    /* try { // try from 00422d10 to 00522d4f has its CatchHandler @ 00422c78 */
  param_1[2] = &PTR_FUN_004f9330;
  FUN_00421348(param_1 + 3);
  FUN_003d3008(puVar1,param_1 + 3);
  return;
}


==================================================================

### FUNC 00422db4 (188 bytes) name=FUN_00422db4

void FUN_00422db4(long *param_1,long *param_2)

{
  long lVar1;
  
  lVar1 = *param_2;
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  param_1[3] = (long)&PTR_FUN_004fef30;
  FUN_00422248(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
  param_1[3] = (long)(PTR_DAT_00501c78 + 0x10);
  FUN_003ed708(param_1 + 10);
  lVar1 = param_2[1];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar1 = param_2[4];
  param_1[2] = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18) + 0x10) = param_2[5];
  lVar1 = param_2[2];
  *param_1 = lVar1;
  *(long *)((long)param_1 + *(long *)(lVar1 + -0x18)) = param_2[3];
  return;
}


==================================================================

### FUNC 00422e70 (140 bytes) name=FUN_00422e70

void FUN_00422e70(undefined8 *param_1)

{
                    /* catch() { ... } // from try @ 00422d08 with catch @ 00422e7c */
                    /* try { // try from 00422e8c to 00522e8f has its CatchHandler @ 00422c78 */
                    /* catch() { ... } // from try @ 00423134 with catch @ 00422e90
                       catch() { ... } // from try @ 00423344 with catch @ 00422e90 */
  *param_1 = &PTR_FUN_004f9308;
  param_1[2] = &PTR_FUN_004f9330;
  param_1[0x21] = &PTR_FUN_004f9358;
  param_1[3] = &PTR_FUN_004fef30;
  FUN_00422248(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
  param_1[3] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0x21] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x21);
  return;
}


==================================================================

### FUNC 00422efc (8 bytes) name=FUN_00422efc

void FUN_00422efc(long param_1)

{
  FUN_00422e70(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 00422f04 (16 bytes) name=FUN_00422f04

void FUN_00422f04(long *param_1)

{
  FUN_00422e70((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 00422f14 (280 bytes) name=FUN_00422f14

long * FUN_00422f14(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  char cVar2;
  void *pvVar3;
  ulong uVar4;
  long lVar5;
  
  plVar1 = param_1 + 0xd;
  cVar2 = FUN_00432400(plVar1);
  if (cVar2 == '\0') {
    FUN_00432394(plVar1,param_2,param_3,0x1b4);
    cVar2 = FUN_00432400(plVar1);
    if (cVar2 != '\0') {
      if ((char)param_1[0x15] == '\0') {
        pvVar3 = (void *)param_1[0x13];
        if (pvVar3 == (void *)0x0) {
          uVar4 = param_1[0x14] << 2;
          if (0x1fc0000000000000 < (ulong)param_1[0x14]) {
            uVar4 = 0xffffffffffffffff;
          }
          pvVar3 = operator_new__(uVar4);
          param_1[0x13] = (long)pvVar3;
          *(undefined1 *)(param_1 + 0x15) = 1;
        }
      }
      else {
        pvVar3 = (void *)param_1[0x13];
      }
      *(uint *)(param_1 + 0xf) = param_3;
      *(undefined1 *)((long)param_1 + 0xa9) = 0;
      *(undefined1 *)((long)param_1 + 0xaa) = 0;
      param_1[1] = (long)pvVar3;
      param_1[2] = (long)pvVar3;
      param_1[3] = (long)pvVar3;
      param_1[5] = 0;
      param_1[4] = 0;
      param_1[6] = 0;
      *(undefined8 *)((long)param_1 + 0x84) = *(undefined8 *)((long)param_1 + 0x7c);
      *(undefined8 *)((long)param_1 + 0x8c) = *(undefined8 *)((long)param_1 + 0x7c);
                    /* try { // try from 00422fa4 to 00522fa7 has its CatchHandler @ 00423348 */
                    /* try { // try from 00423000 to 00523003 has its CatchHandler @ 00423350 */
                    /* try { // try from 00423008 to 005230bf has its CatchHandler @ 00423348 */
      if (((param_3 >> 1 & 1) == 0) ||
         (lVar5 = (**(code **)(*param_1 + 0x20))(param_1,0,2,param_3), lVar5 != -1)) {
        return param_1;
      }
      FUN_00422248(param_1);
    }
  }
  return (long *)0x0;
}


==================================================================

### FUNC 0042302c (8 bytes) name=FUN_0042302c

void FUN_0042302c(undefined8 param_1,undefined8 *param_2)

{
  FUN_00422f14(param_1,*param_2);
  return;
}


==================================================================

### FUNC 00423034 (100 bytes) name=FUN_00423034

void FUN_00423034(long *param_1,undefined8 *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_00422f14(param_1 + 2,*param_2,param_3 | 8);
  if (lVar1 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423098 (100 bytes) name=FUN_00423098

void FUN_00423098(long *param_1,undefined8 *param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_00422f14(param_1 + 1,*param_2,param_3 | 0x10);
  if (lVar1 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 004230ec to 005230ef has its CatchHandler @ 00423380 */
                    /* try { // try from 004230f4 to 005230f7 has its CatchHandler @ 00423348 */
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004230fc (96 bytes) name=FUN_004230fc

void FUN_004230fc(long *param_1,undefined8 *param_2)

{
  long lVar1;
  
  lVar1 = FUN_00422f14(param_1 + 3,*param_2);
  if (lVar1 != 0) {
                    /* try { // try from 00423134 to 00523137 has its CatchHandler @ 00422e90 */
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0042315c (96 bytes) name=FUN_0042315c

void FUN_0042315c(long *param_1,undefined8 param_2,uint param_3)

{
  long lVar1;
  
  lVar1 = FUN_00422f14(param_1 + 2,param_2,param_3 | 8);
  if (lVar1 != 0) {
                    /* try { // try from 00423184 to 00523187 has its CatchHandler @ 00423348 */
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004231bc (96 bytes) name=FUN_004231bc

void FUN_004231bc(long *param_1,undefined8 param_2,uint param_3)

{
  long lVar1;
  
                    /* try { // try from 004231c0 to 005231c3 has its CatchHandler @ 0042331c */
                    /* try { // try from 004231c8 to 00523253 has its CatchHandler @ 00423348 */
  lVar1 = FUN_00422f14(param_1 + 1,param_2,param_3 | 0x10);
  if (lVar1 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0042321c (92 bytes) name=FUN_0042321c

void FUN_0042321c(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_00422f14(param_1 + 3);
  if (lVar1 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423278 (236 bytes) name=FUN_00423278

void FUN_00423278(long *param_1,long *param_2,undefined8 *param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 2;
                    /* try { // try from 00423294 to 00523297 has its CatchHandler @ 00423370 */
  lVar2 = param_2[1];
                    /* try { // try from 0042329c to 005232bb has its CatchHandler @ 00423348 */
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,*param_3,param_4 | 8);
  if (lVar2 != 0) {
                    /* try { // try from 0042330c to 0052330f has its CatchHandler @ 00423360 */
                    /* try { // try from 00423314 to 00523317 has its CatchHandler @ 00423348 */
                    /* catch() { ... } // from try @ 004231c0 with catch @ 0042331c */
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* try { // try from 00423344 to 00523347 has its CatchHandler @ 00422e90 */
                    /* catch() { ... } // from try @ 00422fa4 with catch @ 00423348
                       catch() { ... } // from try @ 00423008 with catch @ 00423348
                       catch() { ... } // from try @ 004230f4 with catch @ 00423348
                       catch() { ... } // from try @ 00423184 with catch @ 00423348
                       catch() { ... } // from try @ 004231c8 with catch @ 00423348
                       catch() { ... } // from try @ 0042329c with catch @ 00423348
                       catch() { ... } // from try @ 00423314 with catch @ 00423348 */
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
                    /* catch() { ... } // from try @ 00423000 with catch @ 00423350 */
                    /* catch() { ... } // from try @ 0042330c with catch @ 00423360 */
  return;
}


==================================================================

### FUNC 004233bc (268 bytes) name=FUN_004233bc

void FUN_004233bc(long *param_1,undefined8 *param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x20;
  FUN_003d347c(plVar1);
  param_1[0x3b] = 0;
  *(undefined4 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e4) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = (long)&DAT_004fefb8;
  param_1[1] = 0;
  param_1[0x20] = (long)&LAB_004fefe0;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 2;
  *param_1 = (long)&PTR_FUN_004f91f8;
  param_1[0x20] = (long)&PTR_FUN_004f9220;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,*param_2,param_3 | 8);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
                    /* catch() { ... } // from try @ 00423500 with catch @ 004234ac
                       catch() { ... } // from try @ 00423528 with catch @ 004234ac
                       catch() { ... } // from try @ 004235c0 with catch @ 004234ac
                       catch() { ... } // from try @ 004245e0 with catch @ 004234ac
                       catch() { ... } // from try @ 004245f4 with catch @ 004234ac */
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423528 (228 bytes) name=FUN_00423528

void FUN_00423528(long *param_1,long *param_2,undefined8 *param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
                    /* try { // try from 00423528 to 00523577 has its CatchHandler @ 004234ac */
  plVar1 = param_1 + 1;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2) = param_2[2];
  FUN_003d3008((long)param_1 + lVar2,0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,*param_3,param_4 | 0x10);
  if (lVar2 != 0) {
                    /* try { // try from 004235b8 to 005235bb has its CatchHandler @ 004245d0 */
                    /* try { // try from 004235c0 to 00524333 has its CatchHandler @ 004234ac */
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423664 (264 bytes) name=FUN_00423664

void FUN_00423664(long *param_1,undefined8 *param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x1f;
  FUN_003d347c(plVar1);
  param_1[0x3a] = 0;
  *(undefined4 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1dc) = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = (long)&DAT_004ff008;
  param_1[0x1f] = (long)&LAB_004ff030;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 1;
  *param_1 = (long)&PTR_FUN_004f9268;
  param_1[0x1f] = (long)&PTR_FUN_004f9290;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,*param_2,param_3 | 0x10);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004237cc (308 bytes) name=FUN_004237cc

void FUN_004237cc(long *param_1,long *param_2,undefined8 *param_3,undefined4 param_4)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = param_2[4];
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
  FUN_003d3008((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
  plVar1 = param_1 + 3;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,*param_3,param_4);
  if (lVar2 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 0042396c (316 bytes) name=FUN_0042396c

void FUN_0042396c(long *param_1,undefined8 *param_2,undefined4 param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x21;
  FUN_003d347c(plVar1);
  param_1[0x3c] = 0;
  *(undefined4 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1ec) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = (long)&DAT_004ff0a8;
  param_1[1] = 0;
  param_1[0x21] = (long)&LAB_004ff0d0;
  FUN_003d3008(plVar1,0);
  param_1[2] = (long)&DAT_004ff058;
  param_1[0x21] = (long)&DAT_004ff080;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 3;
  *param_1 = (long)&PTR_FUN_004f9308;
  param_1[0x21] = (long)&PTR_FUN_004f9358;
  param_1[2] = (long)&PTR_FUN_004f9330;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,*param_2,param_3);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423b20 (236 bytes) name=FUN_00423b20

void FUN_00423b20(long *param_1,long *param_2,undefined8 param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 2;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[2];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,param_3,param_4 | 8);
  if (lVar2 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423c64 (268 bytes) name=FUN_00423c64

void FUN_00423c64(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x20;
  FUN_003d347c(plVar1);
  param_1[0x3b] = 0;
  *(undefined4 *)(param_1 + 0x3c) = 0;
  *(undefined1 *)((long)param_1 + 0x1e4) = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  *param_1 = (long)&DAT_004fefb8;
  param_1[1] = 0;
  param_1[0x20] = (long)&LAB_004fefe0;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 2;
  *param_1 = (long)&PTR_FUN_004f91f8;
  param_1[0x20] = (long)&PTR_FUN_004f9220;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,param_2,param_3 | 8);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423dd0 (228 bytes) name=FUN_00423dd0

void FUN_00423dd0(long *param_1,long *param_2,undefined8 param_3,uint param_4)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = param_1 + 1;
  lVar2 = param_2[1];
  *param_1 = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2) = param_2[2];
  FUN_003d3008((long)param_1 + lVar2,0);
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,param_3,param_4 | 0x10);
  if (lVar2 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00423f0c (264 bytes) name=FUN_00423f0c

void FUN_00423f0c(long *param_1,undefined8 param_2,uint param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x1f;
  FUN_003d347c(plVar1);
  param_1[0x3a] = 0;
  *(undefined4 *)(param_1 + 0x3b) = 0;
  *(undefined1 *)((long)param_1 + 0x1dc) = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  *param_1 = (long)&DAT_004ff008;
  param_1[0x1f] = (long)&LAB_004ff030;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 1;
  *param_1 = (long)&PTR_FUN_004f9268;
  param_1[0x1f] = (long)&PTR_FUN_004f9290;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,param_2,param_3 | 0x10);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00424074 (308 bytes) name=FUN_00424074

void FUN_00424074(long *param_1,long *param_2,undefined8 param_3,undefined4 param_4)

{
  long *plVar1;
  long lVar2;
  
  lVar2 = param_2[2];
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[3];
  param_1[1] = 0;
  FUN_003d3008((long)param_1 + *(long *)(lVar2 + -0x18),0);
  lVar2 = param_2[4];
  param_1[2] = lVar2;
  lVar2 = *(long *)(lVar2 + -0x18);
  *(long *)((long)param_1 + lVar2 + 0x10) = param_2[5];
  FUN_003d3008((long)param_1 + lVar2 + 0x10,0);
  lVar2 = param_2[1];
  plVar1 = param_1 + 3;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[6];
  param_1[2] = param_2[7];
  lVar2 = *param_2;
  *param_1 = lVar2;
  *(long *)((long)param_1 + *(long *)(lVar2 + -0x18)) = param_2[8];
  param_1[2] = param_2[9];
  FUN_00421348(plVar1);
  FUN_003d3008((long)param_1 + *(long *)(*param_1 + -0x18),plVar1);
  lVar2 = FUN_00422f14(plVar1,param_3,param_4);
  if (lVar2 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar2 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar2,*(uint *)(lVar2 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00424214 (316 bytes) name=FUN_00424214

void FUN_00424214(long *param_1,undefined8 param_2,undefined4 param_3)

{
  long *plVar1;
  long *plVar2;
  long lVar3;
  
  plVar1 = param_1 + 0x21;
  FUN_003d347c(plVar1);
  param_1[0x3c] = 0;
  *(undefined4 *)(param_1 + 0x3d) = 0;
  *(undefined1 *)((long)param_1 + 0x1ec) = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  *param_1 = (long)&DAT_004ff0a8;
  param_1[1] = 0;
  param_1[0x21] = (long)&LAB_004ff0d0;
  FUN_003d3008(plVar1,0);
  param_1[2] = (long)&DAT_004ff058;
  param_1[0x21] = (long)&DAT_004ff080;
  FUN_003d3008(plVar1,0);
  plVar2 = param_1 + 3;
  *param_1 = (long)&PTR_FUN_004f9308;
  param_1[0x21] = (long)&PTR_FUN_004f9358;
  param_1[2] = (long)&PTR_FUN_004f9330;
  FUN_00421348(plVar2);
  FUN_003d3008(plVar1,plVar2);
  lVar3 = FUN_00422f14(plVar2,param_2,param_3);
  if (lVar3 != 0) {
    FUN_003d2c00((long)param_1 + *(long *)(*param_1 + -0x18),0);
    return;
  }
  lVar3 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar3,*(uint *)(lVar3 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004243c8 (76 bytes) name=FUN_004243c8

void FUN_004243c8(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_00422248(param_1 + 2);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00424414 (76 bytes) name=FUN_00424414

void FUN_00424414(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_00422248(param_1 + 1);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 00424460 (76 bytes) name=FUN_00424460

void FUN_00424460(long *param_1)

{
  long lVar1;
  
  lVar1 = FUN_00422248(param_1 + 3);
  if (lVar1 != 0) {
    return;
  }
  lVar1 = (long)param_1 + *(long *)(*param_1 + -0x18);
  FUN_003d2c00(lVar1,*(uint *)(lVar1 + 0x20) | 4);
  return;
}


==================================================================

### FUNC 004244ac (148 bytes) name=FUN_004244ac

void FUN_004244ac(undefined8 *param_1)

{
  *param_1 = &PTR_FUN_004f9308;
  param_1[2] = &PTR_FUN_004f9330;
  param_1[0x21] = &PTR_FUN_004f9358;
  param_1[3] = &PTR_FUN_004fef30;
  FUN_00422248(param_1 + 3);
  FUN_00432214(param_1 + 0x10);
  param_1[3] = PTR_DAT_00501c78 + 0x10;
  FUN_003ed708(param_1 + 10);
  param_1[0x21] = PTR_DAT_00501ea8 + 0x10;
  FUN_003d381c(param_1 + 0x21);
  operator_delete(param_1);
  return;
}


==================================================================

### FUNC 00424540 (8 bytes) name=FUN_00424540

void FUN_00424540(long param_1)

{
  FUN_004244ac(param_1 + -0x10);
  return;
}


==================================================================

### FUNC 00424548 (16 bytes) name=FUN_00424548

void FUN_00424548(long *param_1)

{
  FUN_004244ac((long)param_1 + *(long *)(*param_1 + -0x18));
  return;
}


==================================================================

### FUNC 00424558 (12 bytes) name=what

/* std::bad_array_length::what() const */

undefined * std::bad_array_length::what(void)

{
  return &DAT_0047b740;
}


==================================================================

### FUNC 00424564 (20 bytes) name=~bad_array_length

/* std::bad_array_length::~bad_array_length() */

void __thiscall std::bad_array_length::~bad_array_length(bad_array_length *this)

{
  *(undefined **)this = PTR_vtable_005019f0 + 0x10;
  bad_alloc::~bad_alloc((bad_alloc *)this);
  return;
}


==================================================================

### FUNC 00424578 (36 bytes) name=~bad_array_length

/* std::bad_array_length::~bad_array_length() */

void __thiscall std::bad_array_length::~bad_array_length(bad_array_length *this)

{
  ~bad_array_length(this);
  operator_delete(this);
  return;
}


==================================================================

### FUNC 0042459c (12 bytes) name=what

/* std::bad_array_new_length::what() const */

char * std::bad_array_new_length::what(void)

{
  return "std::bad_array_new_length";
}


==================================================================

### FUNC 004245a8 (20 bytes) name=~bad_array_new_length

/* std::bad_array_new_length::~bad_array_new_length() */

void __thiscall std::bad_array_new_length::~bad_array_new_length(bad_array_new_length *this)

{
  *(undefined **)this = PTR_vtable_00501c30 + 0x10;
  bad_alloc::~bad_alloc((bad_alloc *)this);
  return;
}


==================================================================

### FUNC 004245bc (36 bytes) name=~bad_array_new_length

/* std::bad_array_new_length::~bad_array_new_length() */

void __thiscall std::bad_array_new_length::~bad_array_new_length(bad_array_new_length *this)

{
  ~bad_array_new_length(this);
                    /* catch() { ... } // from try @ 004235b8 with catch @ 004245d0 */
  operator_delete(this);
  return;
}


==================================================================

### FUNC 004245e0 (160 bytes) name=FUN_004245e0

long FUN_004245e0(long param_1,undefined4 param_2,long param_3,long param_4)

{
  long lVar1;
  int iVar2;
  
                    /* catch() { ... } // from try @ 00424618 with catch @ 00424604
                       catch() { ... } // from try @ 004246b4 with catch @ 00424604
                       catch() { ... } // from try @ 004247c0 with catch @ 00424604
                       catch() { ... } // from try @ 004247d8 with catch @ 00424604
                       catch() { ... } // from try @ 004247ec with catch @ 00424604 */
  switch(param_2) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 0xb:
  case 0x21:
  case 0x2b:
  case 0x2d:
  case 0x36:
  case 0x37:
  case 0x38:
  case 0x39:
  case 0x3a:
  case 0x3c:
  case 0x3d:
  case 0x3f:
  case 0x4b:
  case 0x4c:
    if (param_3 == 0) {
      return 0;
    }
  case 0x2a:
  case 0x30:
    if (param_4 == 0) {
LAB_004245f0:
                    /* try { // try from 004245f4 to 005245f7 has its CatchHandler @ 004234ac */
      return 0;
    }
    iVar2 = *(int *)(param_1 + 0x28);
    if (*(int *)(param_1 + 0x2c) <= iVar2) {
      return 0;
    }
    break;
  default:
    goto LAB_004245f0;
  case 9:
  case 10:
  case 0xc:
  case 0xd:
  case 0xe:
  case 0xf:
  case 0x10:
  case 0x11:
  case 0x12:
  case 0x13:
  case 0x14:
  case 0x15:
  case 0x16:
  case 0x17:
  case 0x22:
  case 0x23:
  case 0x24:
  case 0x25:
  case 0x26:
  case 0x28:
  case 0x33:
  case 0x34:
  case 0x35:
  case 0x3b:
  case 0x3e:
  case 0x42:
  case 0x43:
  case 0x44:
  case 0x48:
  case 0x49:
  case 0x4a:
    if (param_3 == 0) {
      return 0;
    }
  case 0x19:
  case 0x1a:
  case 0x1b:
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
  case 0x20:
  case 0x29:
  case 0x2e:
  case 0x2f:
    iVar2 = *(int *)(param_1 + 0x28);
                    /* try { // try from 00424618 to 00524653 has its CatchHandler @ 00424604 */
    if (*(int *)(param_1 + 0x2c) <= iVar2) {
      return 0;
    }
  }
  *(int *)(param_1 + 0x28) = iVar2 + 1;
  lVar1 = *(long *)(param_1 + 0x20) + (long)iVar2 * 0x18;
  if (lVar1 != 0) {
    *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18) = param_2;
    *(long *)(lVar1 + 8) = param_3;
    *(long *)(lVar1 + 0x10) = param_4;
    return lVar1;
  }
  return 0;
}


==================================================================

### FUNC 00424680 (96 bytes) name=FUN_00424680

long FUN_00424680(long param_1,long param_2,int param_3)

{
  long lVar1;
  int iVar2;
  
  iVar2 = *(int *)(param_1 + 0x28);
  if (iVar2 < *(int *)(param_1 + 0x2c)) {
    *(int *)(param_1 + 0x28) = iVar2 + 1;
    lVar1 = *(long *)(param_1 + 0x20) + (long)iVar2 * 0x18;
                    /* try { // try from 004246ac to 005246af has its CatchHandler @ 004247dc */
                    /* try { // try from 004246b4 to 0052471f has its CatchHandler @ 00424604 */
    if ((lVar1 != 0 && param_2 != 0) && (param_3 != 0)) {
      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18) = 0;
      *(long *)(lVar1 + 8) = param_2;
      *(int *)(lVar1 + 0x10) = param_3;
      return lVar1;
    }
  }
  return 0;
}


==================================================================

### FUNC 004246e0 (432 bytes) name=FUN_004246e0

long * FUN_004246e0(long param_1,long *param_2,int param_3)

{
  int iVar1;
  char cVar2;
  long lVar3;
  char *pcVar4;
  int *piVar5;
  undefined4 uVar6;
  long *plVar7;
  
  pcVar4 = *(char **)(param_1 + 0x18);
  cVar2 = *pcVar4;
  plVar7 = param_2;
  do {
    if ((cVar2 == 'V') || (cVar2 == 'r')) {
      *(char **)(param_1 + 0x18) = pcVar4 + 1;
      if (cVar2 != 'r') {
        if (cVar2 != 'V') goto LAB_00424744;
                    /* try { // try from 004247ec to 005247ef has its CatchHandler @ 00424604 */
                    /* catch() { ... } // from try @ 00424804 with catch @ 004247f0
                       catch() { ... } // from try @ 00424868 with catch @ 004247f0
                       catch() { ... } // from try @ 004248d4 with catch @ 004247f0 */
        uVar6 = 0x1d;
        if (param_3 == 0) {
          uVar6 = 0x1a;
        }
        *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 9;
        goto LAB_00424758;
      }
      uVar6 = 0x1c;
      if (param_3 == 0) {
        uVar6 = 0x19;
      }
      *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 9;
      lVar3 = FUN_004245e0(param_1,uVar6,0,0);
                    /* try { // try from 004247c0 to 005247c3 has its CatchHandler @ 00424604 */
      *plVar7 = lVar3;
    }
    else {
      if (cVar2 != 'K') {
                    /* try { // try from 00424804 to 00524827 has its CatchHandler @ 004247f0 */
        if ((param_3 == 0) && (cVar2 == 'F')) {
          while (param_2 != plVar7) {
            piVar5 = (int *)*param_2;
            iVar1 = *piVar5;
            if (iVar1 == 0x1a) {
              *piVar5 = 0x1d;
                    /* try { // try from 00424860 to 00524863 has its CatchHandler @ 004248c4 */
            }
            else if (iVar1 == 0x1b) {
              *piVar5 = 0x1e;
            }
            else if (iVar1 == 0x19) {
              *piVar5 = 0x1c;
            }
            param_2 = (long *)(piVar5 + 2);
          }
        }
                    /* try { // try from 00424868 to 0052486b has its CatchHandler @ 004247f0 */
        return plVar7;
      }
      *(char **)(param_1 + 0x18) = pcVar4 + 1;
LAB_00424744:
      uVar6 = 0x1e;
                    /* try { // try from 0042474c to 0052474f has its CatchHandler @ 004247c8 */
      if (param_3 == 0) {
        uVar6 = 0x1b;
      }
      *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 6;
LAB_00424758:
      lVar3 = FUN_004245e0(param_1,uVar6,0,0);
      *plVar7 = lVar3;
    }
    if (lVar3 == 0) {
                    /* catch() { ... } // from try @ 0042474c with catch @ 004247c8 */
                    /* try { // try from 004247d8 to 005247db has its CatchHandler @ 00424604 */
                    /* catch() { ... } // from try @ 004246ac with catch @ 004247dc */
      return (long *)0x0;
    }
    pcVar4 = *(char **)(param_1 + 0x18);
    plVar7 = (long *)(lVar3 + 8);
    cVar2 = *pcVar4;
  } while( true );
}


==================================================================

### FUNC 00424890 (704 bytes) name=FUN_00424890

long FUN_00424890(long param_1,int param_2)

{
  long lVar1;
  undefined4 uVar2;
  byte bVar3;
  uint uVar4;
  long lVar5;
  uint uVar6;
  char *pcVar7;
  undefined *puVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  byte *pbVar12;
  long lVar13;
  uint uVar14;
  int iVar15;
  undefined8 uVar16;
  long lVar17;
  
  pcVar7 = *(char **)(param_1 + 0x18);
  if (*pcVar7 != 'S') {
    return 0;
  }
  *(char **)(param_1 + 0x18) = pcVar7 + 1;
  if (pcVar7[1] != '\0') {
    *(char **)(param_1 + 0x18) = pcVar7 + 2;
                    /* catch() { ... } // from try @ 00424860 with catch @ 004248c4 */
    bVar3 = pcVar7[1];
    uVar6 = (uint)bVar3;
    uVar14 = bVar3 - 0x30;
                    /* try { // try from 004248d4 to 005248d7 has its CatchHandler @ 004247f0 */
                    /* catch() { ... } // from try @ 004248f4 with catch @ 004248d8
                       catch() { ... } // from try @ 004249b8 with catch @ 004248d8
                       catch() { ... } // from try @ 00424a30 with catch @ 004248d8
                       catch() { ... } // from try @ 00424ac0 with catch @ 004248d8
                       catch() { ... } // from try @ 00424b44 with catch @ 004248d8
                       catch() { ... } // from try @ 00424bd4 with catch @ 004248d8
                       catch() { ... } // from try @ 00424c84 with catch @ 004248d8
                       catch() { ... } // from try @ 00424d14 with catch @ 004248d8
                       catch() { ... } // from try @ 00424d80 with catch @ 004248d8
                       catch() { ... } // from try @ 00424f0c with catch @ 004248d8
                       catch() { ... } // from try @ 00424fc4 with catch @ 004248d8
                       catch() { ... } // from try @ 00425008 with catch @ 004248d8
                       catch() { ... } // from try @ 00425074 with catch @ 004248d8
                       catch() { ... } // from try @ 00425108 with catch @ 004248d8
                       catch() { ... } // from try @ 00425154 with catch @ 004248d8
                       catch() { ... } // from try @ 00425168 with catch @ 004248d8
                       catch() { ... } // from try @ 0042517c with catch @ 004248d8
                       catch() { ... } // from try @ 00425190 with catch @ 004248d8
                       catch() { ... } // from try @ 004251a4 with catch @ 004248d8
                       catch() { ... } // from try @ 004251b8 with catch @ 004248d8
                       catch() { ... } // from try @ 004251cc with catch @ 004248d8
                       catch() { ... } // from try @ 004251e0 with catch @ 004248d8
                       catch() { ... } // from try @ 004251f4 with catch @ 004248d8
                       catch() { ... } // from try @ 00425208 with catch @ 004248d8
                       catch() { ... } // from try @ 0042521c with catch @ 004248d8
                       catch() { ... } // from try @ 00425230 with catch @ 004248d8
                       catch() { ... } // from try @ 00425244 with catch @ 004248d8 */
    if (((uVar14 & 0xff) < 10) || (bVar3 == 0x5f)) {
      if (bVar3 == 0x5f) {
        uVar4 = 0;
        goto LAB_004249cc;
      }
    }
    else {
                    /* try { // try from 00424b3c to 00524b3f has its CatchHandler @ 00425158 */
                    /* try { // try from 00424b44 to 00524b93 has its CatchHandler @ 004248d8 */
      if (0x19 < (byte)(bVar3 + 0xbf)) goto LAB_0042495c;
    }
    uVar9 = 0;
    do {
                    /* try { // try from 004248f4 to 00524977 has its CatchHandler @ 004248d8 */
      uVar4 = (uVar9 * 0x24 + uVar6) - 0x37;
      if ((uVar14 & 0xff) < 10) {
        uVar4 = (uVar9 * 0x24 + uVar6) - 0x30;
      }
      else if (0x19 < (uVar6 - 0x41 & 0xff)) {
        return 0;
      }
      uVar6 = 0;
      if (uVar4 < uVar9) {
        return 0;
      }
      pbVar12 = *(byte **)(param_1 + 0x18);
      if (*pbVar12 != 0) {
        *(byte **)(param_1 + 0x18) = pbVar12 + 1;
        uVar6 = (uint)*pbVar12;
        if (uVar6 == 0x5f) goto LAB_004249c8;
      }
      uVar14 = uVar6 - 0x30;
      uVar9 = uVar4;
    } while( true );
  }
  uVar6 = 0;
LAB_0042495c:
  uVar14 = *(uint *)(param_1 + 0x10) >> 3 & 1;
  if (uVar14 < (param_2 != 0)) {
    uVar14 = (uint)((byte)(**(char **)(param_1 + 0x18) + 0xbdU) < 2);
  }
  if (uVar6 == 0x74) {
    puVar8 = &UNK_004f9790;
  }
  else if (uVar6 == 0x61) {
    puVar8 = &UNK_004f97c8;
  }
  else if (uVar6 == 0x62) {
    puVar8 = &UNK_004f9800;
  }
  else if (uVar6 == 0x73) {
    puVar8 = &UNK_004f9838;
  }
  else if (uVar6 == 0x69) {
    puVar8 = &UNK_004f9870;
  }
  else if (uVar6 == 0x6f) {
    puVar8 = &UNK_004f98a8;
  }
  else {
    if (uVar6 != 100) {
      return 0;
    }
                    /* try { // try from 004249b0 to 005249b3 has its CatchHandler @ 00425220 */
    puVar8 = &LAB_004f98e0;
                    /* try { // try from 004249b8 to 005249ef has its CatchHandler @ 004248d8 */
  }
  lVar5 = *(long *)(puVar8 + 0x28);
                    /* try { // try from 00424a28 to 00524a2b has its CatchHandler @ 004251bc */
  if (lVar5 == 0) {
    iVar15 = *(int *)(param_1 + 0x2c);
    iVar10 = *(int *)(param_1 + 0x28);
  }
  else {
    iVar10 = *(int *)(param_1 + 0x28);
                    /* try { // try from 00424a30 to 00524a7f has its CatchHandler @ 004248d8 */
    iVar15 = *(int *)(param_1 + 0x2c);
    uVar2 = *(undefined4 *)(puVar8 + 0x30);
    lVar17 = 0;
    if (iVar10 < iVar15) {
      lVar13 = (long)iVar10;
      iVar10 = iVar10 + 1;
      *(int *)(param_1 + 0x28) = iVar10;
      lVar1 = *(long *)(param_1 + 0x20) + lVar13 * 0x18;
      if (lVar1 != 0) {
        *(undefined4 *)(*(long *)(param_1 + 0x20) + lVar13 * 0x18) = 0x18;
        *(long *)(lVar1 + 8) = lVar5;
        *(undefined4 *)(lVar1 + 0x10) = uVar2;
        lVar17 = lVar1;
      }
    }
    *(long *)(param_1 + 0x48) = lVar17;
  }
  if (uVar14 == 0) {
    uVar16 = *(undefined8 *)(puVar8 + 8);
    iVar11 = *(int *)(puVar8 + 0x10);
  }
  else {
    uVar16 = *(undefined8 *)(puVar8 + 0x18);
    iVar11 = *(int *)(puVar8 + 0x20);
  }
  *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + iVar11;
  if (iVar15 <= iVar10) {
    return 0;
  }
  *(int *)(param_1 + 0x28) = iVar10 + 1;
  lVar5 = *(long *)(param_1 + 0x20) + (long)iVar10 * 0x18;
                    /* try { // try from 00424ab8 to 00524abb has its CatchHandler @ 004251a8 */
  if (lVar5 != 0) {
                    /* try { // try from 00424ac0 to 00524b03 has its CatchHandler @ 004248d8 */
    *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar10 * 0x18) = 0x18;
    *(undefined8 *)(lVar5 + 8) = uVar16;
    *(int *)(lVar5 + 0x10) = iVar11;
    return lVar5;
  }
  return 0;
LAB_004249c8:
  uVar4 = uVar4 + 1;
LAB_004249cc:
  if (*(uint *)(param_1 + 0x38) <= uVar4) {
    return 0;
  }
  lVar5 = *(long *)(*(long *)(param_1 + 0x30) + (ulong)uVar4 * 8);
  *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + 1;
  return lVar5;
}


==================================================================

### FUNC 00424b50 (204 bytes) name=FUN_00424b50

void FUN_00424b50(int *param_1,int *param_2,undefined4 *param_3)

{
  int *piVar1;
  
  if (param_3 == (undefined4 *)0x0) {
switchD_00424ba4_caseD_5:
    return;
  }
  do {
    switch(*param_3) {
    case 1:
    case 2:
    case 3:
    case 9:
    case 10:
    case 0xb:
    case 0xc:
    case 0xd:
    case 0xe:
    case 0xf:
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x19:
    case 0x1a:
    case 0x1b:
    case 0x1c:
    case 0x1d:
    case 0x1e:
    case 0x1f:
    case 0x20:
    case 0x21:
    case 0x22:
    case 0x25:
    case 0x26:
    case 0x28:
    case 0x29:
    case 0x2a:
    case 0x2b:
    case 0x2c:
    case 0x2d:
    case 0x2e:
    case 0x2f:
    case 0x30:
    case 0x33:
    case 0x34:
    case 0x35:
    case 0x36:
    case 0x37:
    case 0x38:
    case 0x39:
    case 0x3a:
    case 0x3b:
    case 0x3c:
    case 0x3d:
    case 0x3e:
    case 0x3f:
    case 0x42:
    case 0x48:
    case 0x49:
    case 0x4a:
    case 0x4b:
    case 0x4c:
switchD_00424ba4_caseD_1:
      piVar1 = *(int **)(param_3 + 2);
      break;
    case 4:
      *param_1 = *param_1 + 1;
      piVar1 = *(int **)(param_3 + 2);
      break;
    default:
      goto switchD_00424ba4_caseD_5;
    case 7:
    case 8:
    case 0x32:
      param_3 = *(undefined4 **)(param_3 + 4);
      goto joined_r0x00424bc4;
    case 0x23:
    case 0x24:
                    /* try { // try from 00424bcc to 00524bcf has its CatchHandler @ 004251d0 */
      piVar1 = *(int **)(param_3 + 2);
                    /* try { // try from 00424bd4 to 00524c43 has its CatchHandler @ 004248d8 */
      if (*piVar1 == 5) {
        *param_2 = *param_2 + 1;
        goto switchD_00424ba4_caseD_1;
      }
      break;
    case 0x43:
    case 0x44:
    case 0x45:
    case 0x46:
      param_3 = *(undefined4 **)(param_3 + 2);
      goto joined_r0x00424bc4;
    }
    FUN_00424b50(param_1,param_2,piVar1);
    param_3 = *(undefined4 **)(param_3 + 4);
joined_r0x00424bc4:
    if (param_3 == (undefined4 *)0x0) {
      return;
    }
  } while( true );
}


==================================================================

### FUNC 00424c1c (120 bytes) name=FUN_00424c1c

void FUN_00424c1c(undefined1 *param_1,undefined1 param_2)

{
  long lVar1;
  
  lVar1 = *(long *)(param_1 + 0x100);
  if (lVar1 != 0xff) {
    *(long *)(param_1 + 0x100) = lVar1 + 1;
    param_1[lVar1] = param_2;
    param_1[0x108] = param_2;
    return;
  }
  param_1[0xff] = 0;
  (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
  *(undefined8 *)(param_1 + 0x100) = 1;
                    /* try { // try from 00424c7c to 00524c7f has its CatchHandler @ 0042516c */
  *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
  *param_1 = param_2;
                    /* try { // try from 00424c84 to 00524cc3 has its CatchHandler @ 004248d8 */
  param_1[0x108] = param_2;
  return;
}


==================================================================

### FUNC 00424c94 (136 bytes) name=FUN_00424c94

long FUN_00424c94(long *param_1)

{
  ulong uVar1;
  bool bVar2;
  byte *pbVar3;
  ulong uVar4;
  byte bVar5;
  ulong uVar6;
  
  pbVar3 = (byte *)*param_1;
  bVar5 = *pbVar3;
  bVar2 = bVar5 == 0x6e;
  if (bVar2) {
    *param_1 = (long)(pbVar3 + 1);
    uVar6 = 0xffffffffffffffff;
                    /* try { // try from 00424d0c to 00524d0f has its CatchHandler @ 004251f8 */
    bVar5 = pbVar3[1];
  }
  else {
    uVar6 = 0;
  }
  if ((byte)(bVar5 - 0x30) < 10) {
    pbVar3 = (byte *)*param_1;
    uVar4 = 0;
    do {
      pbVar3 = pbVar3 + 1;
      *param_1 = (long)pbVar3;
      uVar1 = (ulong)bVar5;
      bVar5 = *pbVar3;
      uVar4 = (uVar4 * 10 + uVar1) - 0x30;
    } while ((byte)(bVar5 - 0x30) < 10);
  }
  else {
                    /* try { // try from 00424d14 to 00524d3f has its CatchHandler @ 004248d8 */
    uVar4 = 0;
  }
  return (uVar4 ^ uVar6) + (ulong)bVar2;
}


==================================================================

### FUNC 00424d1c (124 bytes) name=FUN_00424d1c

undefined8 FUN_00424d1c(long param_1,ulong *param_2)

{
  uint uVar1;
  ulong uVar2;
  int *piVar3;
  int iVar4;
  
  if (*(long *)(param_1 + 0x120) == 0) {
    *(undefined4 *)(param_1 + 0x130) = 1;
  }
  else {
    piVar3 = *(int **)(*(long *)(*(long *)(param_1 + 0x120) + 8) + 0x10);
    uVar2 = *param_2 & 0xffffffff;
    if ((piVar3 != (int *)0x0) && (*piVar3 == 0x2f)) {
      iVar4 = (int)*param_2;
      if (iVar4 < 1) {
                    /* try { // try from 00424d78 to 00524d7b has its CatchHandler @ 00425234 */
        if (iVar4 != 0) {
          return 0;
        }
      }
      else {
        do {
          piVar3 = *(int **)(piVar3 + 4);
          uVar1 = (int)uVar2 - 1;
          uVar2 = (ulong)uVar1;
          if (piVar3 == (int *)0x0) {
            return 0;
          }
          if (*piVar3 != 0x2f) {
            return 0;
          }
        } while (uVar1 != 0);
      }
                    /* try { // try from 00424d80 to 00524ecb has its CatchHandler @ 004248d8 */
      return *(undefined8 *)(piVar3 + 2);
    }
  }
  return 0;
}


==================================================================

### FUNC 00424d98 (152 bytes) name=FUN_00424d98

int * FUN_00424d98(undefined8 param_1,undefined4 *param_2)

{
  int *piVar1;
  
  while (param_2 != (undefined4 *)0x0) {
    switch(*param_2) {
    case 0:
    case 6:
    case 0x18:
    case 0x27:
    case 0x31:
    case 0x40:
    case 0x45:
    case 0x47:
    case 0x4a:
    case 0x4b:
      goto LAB_00424de4;
    default:
      piVar1 = (int *)FUN_00424d98(param_1,*(undefined8 *)(param_2 + 2));
      if (piVar1 != (int *)0x0) {
        return piVar1;
      }
    case 7:
    case 8:
    case 0x32:
      param_2 = *(undefined4 **)(param_2 + 4);
      break;
    case 5:
      piVar1 = (int *)FUN_00424d1c(param_1,param_2 + 2);
      if (piVar1 == (int *)0x0) {
        return (int *)0x0;
      }
      if (*piVar1 != 0x2f) {
        return (int *)0x0;
      }
      return piVar1;
    }
  }
LAB_00424de4:
  return (int *)0x0;
}


==================================================================

### FUNC 00424e30 (240 bytes) name=FUN_00424e30

void FUN_00424e30(void *param_1,size_t param_2,long *param_3)

{
  ulong uVar1;
  void *pvVar2;
  size_t __size;
  
  __size = param_3[2];
  uVar1 = param_3[1] + 1 + param_2;
  if (__size < uVar1) {
    if ((int)param_3[3] != 0) {
      return;
    }
    if ((__size != 0) || (__size = 2, 2 < uVar1)) {
      do {
        __size = __size * 2;
      } while (__size < uVar1);
    }
    pvVar2 = realloc((void *)*param_3,__size);
    if (pvVar2 == (void *)0x0) {
                    /* try { // try from 00424f04 to 00524f07 has its CatchHandler @ 004251e4 */
      free((void *)*param_3);
      *param_3 = 0;
                    /* try { // try from 00424f0c to 00524f43 has its CatchHandler @ 004248d8 */
      param_3[1] = 0;
      param_3[2] = 0;
      *(undefined4 *)(param_3 + 3) = 1;
      return;
    }
    *param_3 = (long)pvVar2;
    param_3[2] = __size;
  }
  if ((int)param_3[3] != 0) {
    return;
  }
  memcpy((void *)(*param_3 + param_3[1]),param_1,param_2);
  *(undefined1 *)(*param_3 + param_2 + param_3[1]) = 0;
  param_3[1] = param_3[1] + param_2;
  return;
}


==================================================================

### FUNC 00424f20 (180 bytes) name=FUN_00424f20

void FUN_00424f20(char *param_1,char *param_2)

{
  char *pcVar1;
  char cVar2;
  size_t sVar3;
  long lVar4;
  
  sVar3 = strlen(param_2);
  if (sVar3 != 0) {
    pcVar1 = param_2 + sVar3;
    lVar4 = *(long *)(param_1 + 0x100);
    do {
                    /* try { // try from 00424f7c to 00524f7f has its CatchHandler @ 0042520c */
      while (cVar2 = *param_2, lVar4 == 0xff) {
        param_2 = param_2 + 1;
        param_1[0xff] = '\0';
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        param_1[0x100] = '\x01';
        param_1[0x101] = '\0';
        param_1[0x102] = '\0';
        param_1[0x103] = '\0';
        param_1[0x104] = '\0';
        param_1[0x105] = '\0';
        param_1[0x106] = '\0';
        param_1[0x107] = '\0';
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        *param_1 = cVar2;
        param_1[0x108] = cVar2;
        lVar4 = 1;
        if (param_2 == pcVar1) {
          return;
        }
      }
      *(long *)(param_1 + 0x100) = lVar4 + 1;
      param_2 = param_2 + 1;
      param_1[lVar4] = cVar2;
      param_1[0x108] = cVar2;
      lVar4 = lVar4 + 1;
    } while (param_2 != pcVar1);
  }
                    /* try { // try from 00424fc4 to 00524fc7 has its CatchHandler @ 004248d8 */
  return;
}


==================================================================

### FUNC 00424fd4 (340 bytes) name=FUN_00424fd4

long FUN_00424fd4(long param_1,int param_2)

{
  char cVar1;
  int iVar2;
  long lVar3;
  void *__s1;
  
  lVar3 = (long)param_2;
  __s1 = *(void **)(param_1 + 0x18);
  if (lVar3 <= *(long *)(param_1 + 8) - (long)__s1) {
                    /* try { // try from 00425000 to 00525003 has its CatchHandler @ 00425180 */
    *(long *)(param_1 + 0x18) = (long)__s1 + lVar3;
                    /* try { // try from 00425008 to 00525033 has its CatchHandler @ 004248d8 */
    if (((*(uint *)(param_1 + 0x10) >> 2 & 1) != 0) && (*(char *)((long)__s1 + lVar3) == '$')) {
      *(long *)(param_1 + 0x18) = (long)__s1 + lVar3 + 1;
    }
    if ((((9 < param_2) && (iVar2 = memcmp(__s1,"_GLOBAL_",8), iVar2 == 0)) &&
        ((cVar1 = *(char *)((long)__s1 + 8), cVar1 == '_' || cVar1 == '.' || (cVar1 == '$')))) &&
       (*(char *)((long)__s1 + 9) == 'N')) {
                    /* try { // try from 00425100 to 00525103 has its CatchHandler @ 00425144 */
                    /* try { // try from 00425108 to 0052510b has its CatchHandler @ 004248d8 */
      *(int *)(param_1 + 0x50) = (*(int *)(param_1 + 0x50) + 0x16) - param_2;
      lVar3 = FUN_00424680(param_1,"(anonymous namespace)",0x15);
      return lVar3;
    }
    iVar2 = *(int *)(param_1 + 0x28);
    if (iVar2 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 0042506c to 0052506f has its CatchHandler @ 00425194 */
                    /* try { // try from 00425074 to 005250c7 has its CatchHandler @ 004248d8 */
      *(int *)(param_1 + 0x28) = iVar2 + 1;
      lVar3 = *(long *)(param_1 + 0x20) + (long)iVar2 * 0x18;
      if ((param_2 != 0 && __s1 != (void *)0x0) && (lVar3 != 0)) {
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18) = 0;
        *(void **)(lVar3 + 8) = __s1;
        *(int *)(lVar3 + 0x10) = param_2;
        return lVar3;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00425128 (204 bytes) name=FUN_00425128

void FUN_00425128(char *param_1,undefined8 param_2)

{
  char cVar1;
  size_t sVar2;
  long lVar3;
  size_t sVar4;
  char local_20 [32];
  
                    /* catch() { ... } // from try @ 00425100 with catch @ 00425144 */
                    /* try { // try from 00425154 to 00525157 has its CatchHandler @ 004248d8 */
  sprintf(local_20,"%ld",param_2);
                    /* catch() { ... } // from try @ 00424b3c with catch @ 00425158 */
  sVar2 = strlen(local_20);
  if (sVar2 != 0) {
                    /* try { // try from 00425168 to 0052516b has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 00424c7c with catch @ 0042516c */
    sVar4 = 0;
    lVar3 = *(long *)(param_1 + 0x100);
    do {
                    /* try { // try from 00425190 to 00525193 has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 0042506c with catch @ 00425194 */
      while (cVar1 = local_20[sVar4], lVar3 == 0xff) {
                    /* try { // try from 004251a4 to 005251a7 has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 00424ab8 with catch @ 004251a8 */
        sVar4 = sVar4 + 1;
        param_1[0xff] = '\0';
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 004251b8 to 005251bb has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 00424a28 with catch @ 004251bc */
        param_1[0x100] = '\x01';
        param_1[0x101] = '\0';
        param_1[0x102] = '\0';
        param_1[0x103] = '\0';
        param_1[0x104] = '\0';
        param_1[0x105] = '\0';
        param_1[0x106] = '\0';
        param_1[0x107] = '\0';
                    /* try { // try from 004251cc to 005251cf has its CatchHandler @ 004248d8 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
                    /* catch() { ... } // from try @ 00424bcc with catch @ 004251d0 */
        *param_1 = cVar1;
        param_1[0x108] = cVar1;
        lVar3 = 1;
        if (sVar4 == sVar2) {
          return;
        }
      }
      *(long *)(param_1 + 0x100) = lVar3 + 1;
                    /* try { // try from 0042517c to 0052517f has its CatchHandler @ 004248d8 */
      sVar4 = sVar4 + 1;
                    /* catch() { ... } // from try @ 00425000 with catch @ 00425180 */
      param_1[lVar3] = cVar1;
      param_1[0x108] = cVar1;
      lVar3 = lVar3 + 1;
    } while (sVar4 != sVar2);
  }
                    /* try { // try from 004251e0 to 005251e3 has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 00424f04 with catch @ 004251e4 */
  return;
}


==================================================================

### FUNC 004251f4 (168 bytes) name=FUN_004251f4

undefined8 FUN_004251f4(long param_1)

{
  byte bVar1;
  bool bVar2;
  undefined8 uVar3;
  byte *pbVar4;
  long lVar5;
  ulong uVar6;
  
                    /* try { // try from 004251f4 to 005251f7 has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 00424d0c with catch @ 004251f8 */
  pbVar4 = *(byte **)(param_1 + 0x18);
                    /* try { // try from 00425208 to 0052520b has its CatchHandler @ 004248d8 */
  bVar1 = *pbVar4;
                    /* catch() { ... } // from try @ 00424f7c with catch @ 0042520c */
  bVar2 = bVar1 == 0x6e;
  if (bVar2) {
    *(byte **)(param_1 + 0x18) = pbVar4 + 1;
                    /* catch() { ... } // from try @ 004252a4 with catch @ 00425288
                       catch() { ... } // from try @ 0042546c with catch @ 00425288
                       catch() { ... } // from try @ 00425680 with catch @ 00425288
                       catch() { ... } // from try @ 004257f0 with catch @ 00425288
                       catch() { ... } // from try @ 0042588c with catch @ 00425288
                       catch() { ... } // from try @ 004258f8 with catch @ 00425288
                       catch() { ... } // from try @ 0042590c with catch @ 00425288
                       catch() { ... } // from try @ 00425920 with catch @ 00425288
                       catch() { ... } // from try @ 00425934 with catch @ 00425288 */
    bVar1 = pbVar4[1];
  }
                    /* try { // try from 0042521c to 0052521f has its CatchHandler @ 004248d8 */
                    /* catch() { ... } // from try @ 004249b0 with catch @ 00425220 */
  if ((byte)(bVar1 - 0x30) < 10) {
    pbVar4 = *(byte **)(param_1 + 0x18);
    lVar5 = 0;
    do {
      pbVar4 = pbVar4 + 1;
      uVar6 = (ulong)bVar1;
                    /* try { // try from 00425230 to 00525233 has its CatchHandler @ 004248d8 */
      *(byte **)(param_1 + 0x18) = pbVar4;
                    /* catch() { ... } // from try @ 00424d78 with catch @ 00425234 */
      bVar1 = *pbVar4;
                    /* try { // try from 00425244 to 00525247 has its CatchHandler @ 004248d8 */
      lVar5 = lVar5 * 10 + uVar6 + -0x30;
    } while ((byte)(bVar1 - 0x30) < 10);
    if ((0 < lVar5) && (!bVar2)) {
      uVar3 = FUN_00424fd4();
      *(undefined8 *)(param_1 + 0x48) = uVar3;
      return uVar3;
    }
  }
  return 0;
}


==================================================================

### FUNC 0042529c (140 bytes) name=FUN_0042529c

long FUN_0042529c(long param_1)

{
  long lVar1;
  long lVar2;
  byte *pbVar3;
  byte bVar4;
  
  pbVar3 = *(byte **)(param_1 + 0x18);
  bVar4 = *pbVar3;
                    /* try { // try from 004252a4 to 0052542b has its CatchHandler @ 00425288 */
  if (bVar4 != 0x5f) {
    if ((bVar4 != 0x6e) && ((byte)(bVar4 - 0x30) < 10)) {
      lVar1 = 0;
      do {
        pbVar3 = pbVar3 + 1;
        *(byte **)(param_1 + 0x18) = pbVar3;
        lVar2 = lVar1 * 10 + (ulong)bVar4;
        bVar4 = *pbVar3;
        lVar1 = lVar2 + -0x30;
      } while ((byte)(bVar4 - 0x30) < 10);
      lVar2 = lVar2 + -0x2f;
      if (bVar4 == 0x5f) goto LAB_00425318;
    }
    return -1;
  }
  lVar2 = 0;
LAB_00425318:
  *(byte **)(param_1 + 0x18) = pbVar3 + 1;
  return lVar2;
}


==================================================================

### FUNC 00425328 (164 bytes) name=FUN_00425328

ulong FUN_00425328(long param_1)

{
  long lVar1;
  bool bVar2;
  char *pcVar3;
  long lVar4;
  byte *pbVar5;
  byte bVar6;
  
  pcVar3 = *(char **)(param_1 + 0x18);
  if (*pcVar3 == '_') {
    pbVar5 = (byte *)(pcVar3 + 1);
    *(byte **)(param_1 + 0x18) = pbVar5;
    bVar6 = pcVar3[1];
    if (bVar6 == 0x6e) {
      pbVar5 = (byte *)(pcVar3 + 2);
      *(byte **)(param_1 + 0x18) = pbVar5;
      bVar6 = pcVar3[2];
      if (9 < (byte)(bVar6 - 0x30)) {
        return 1;
      }
      bVar2 = true;
    }
    else {
      if (9 < (byte)(bVar6 - 0x30)) {
        return 1;
      }
      bVar2 = false;
    }
    lVar4 = 0;
    do {
      pbVar5 = pbVar5 + 1;
      *(byte **)(param_1 + 0x18) = pbVar5;
      lVar1 = lVar4 * 10 + (ulong)bVar6;
      bVar6 = *pbVar5;
      lVar4 = lVar1 + -0x30;
    } while ((byte)(bVar6 - 0x30) < 10);
    if (bVar2) {
      return lVar1 - 0x31U >> 0x3f;
    }
  }
  return 1;
}


==================================================================

### FUNC 004253cc (236 bytes) name=FUN_004253cc

long FUN_004253cc(long param_1)

{
  int iVar1;
  byte *pbVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  byte bVar6;
  char *pcVar7;
  
  pcVar7 = *(char **)(param_1 + 0x18);
  if (*pcVar7 != 'T') {
    return 0;
  }
  pbVar5 = (byte *)(pcVar7 + 1);
  *(byte **)(param_1 + 0x18) = pbVar5;
  bVar6 = pcVar7[1];
  if (bVar6 == 0x5f) {
    lVar4 = 0;
  }
  else {
    if (bVar6 == 0x6e) {
      return 0;
    }
    if (9 < (byte)(bVar6 - 0x30)) {
      return 0;
    }
    lVar3 = 0;
    pbVar2 = (byte *)(pcVar7 + 2);
    do {
      pbVar5 = pbVar2;
      *(byte **)(param_1 + 0x18) = pbVar5;
      lVar4 = lVar3 * 10 + (ulong)bVar6;
      bVar6 = *pbVar5;
      lVar3 = lVar4 + -0x30;
      pbVar2 = pbVar5 + 1;
    } while ((byte)(bVar6 - 0x30) < 10);
    lVar4 = lVar4 + -0x2f;
    if (bVar6 != 0x5f) {
      return 0;
    }
  }
  iVar1 = *(int *)(param_1 + 0x28);
                    /* try { // try from 00425464 to 00525467 has its CatchHandler @ 00425924 */
  *(byte **)(param_1 + 0x18) = pbVar5 + 1;
                    /* try { // try from 0042546c to 0052563f has its CatchHandler @ 00425288 */
  *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + 1;
  if (iVar1 < *(int *)(param_1 + 0x2c)) {
    *(int *)(param_1 + 0x28) = iVar1 + 1;
    lVar3 = *(long *)(param_1 + 0x20) + (long)iVar1 * 0x18;
    if (lVar3 != 0) {
      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18) = 5;
      *(long *)(lVar3 + 8) = lVar4;
      return lVar3;
    }
  }
  return 0;
}


==================================================================

### FUNC 004254b8 (236 bytes) name=FUN_004254b8

undefined8 FUN_004254b8(long param_1,uint param_2)

{
  byte *pbVar1;
  char *pcVar2;
  char *pcVar3;
  char cVar4;
  
  if (param_2 == 0) {
    pbVar1 = *(byte **)(param_1 + 0x18);
    if (*pbVar1 == 0) {
      return 0;
    }
    *(byte **)(param_1 + 0x18) = pbVar1 + 1;
    param_2 = (uint)*pbVar1;
  }
  if (param_2 == 0x68) {
    pcVar3 = *(char **)(param_1 + 0x18);
    cVar4 = *pcVar3;
    pcVar2 = pcVar3;
    if (cVar4 == 'n') {
      pcVar2 = pcVar3 + 1;
      *(char **)(param_1 + 0x18) = pcVar2;
      cVar4 = pcVar3[1];
    }
    if ((byte)(cVar4 - 0x30U) < 10) {
      do {
        pcVar2 = pcVar2 + 1;
        *(char **)(param_1 + 0x18) = pcVar2;
        cVar4 = *pcVar2;
      } while ((byte)(cVar4 - 0x30U) < 10);
      goto LAB_00425538;
    }
  }
  else {
    if (param_2 != 0x76) {
      return 0;
    }
    FUN_00424c94(param_1 + 0x18);
    if (**(char **)(param_1 + 0x18) != '_') {
      return 0;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
    FUN_00424c94(param_1 + 0x18);
    pcVar2 = *(char **)(param_1 + 0x18);
  }
  cVar4 = *pcVar2;
LAB_00425538:
  if (cVar4 != '_') {
    return 0;
  }
  *(char **)(param_1 + 0x18) = pcVar2 + 1;
  return 1;
}


==================================================================

### FUNC 004255a4 (5356 bytes) name=FUN_004255a4

long FUN_004255a4(long param_1)

{
  undefined4 uVar1;
  byte bVar2;
  char cVar3;
  int iVar4;
  long lVar5;
  int *piVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  int *piVar9;
  undefined8 uVar10;
  int *piVar11;
  char *pcVar12;
  long *plVar13;
  undefined8 uVar14;
  long lVar15;
  char *pcVar16;
  undefined8 *puVar17;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  long local_8;
  
  pcVar12 = *(char **)(param_1 + 0x18);
  uVar14 = *(undefined8 *)(param_1 + 0x48);
  if (1 < (byte)(*pcVar12 + 0xb7U)) {
    return 0;
  }
  pcVar16 = pcVar12 + 1;
  *(char **)(param_1 + 0x18) = pcVar16;
  cVar3 = pcVar12[1];
  if (cVar3 == 'E') {
    *(char **)(param_1 + 0x18) = pcVar12 + 2;
    uVar14 = FUN_004245e0(param_1,0x2f,0,0);
    return uVar14;
  }
  plVar13 = &local_8;
  local_8 = 0;
LAB_00425614:
  switch(cVar3) {
  case 'I':
  case 'J':
    lVar5 = FUN_004255a4(param_1);
    break;
  default:
    lVar5 = FUN_004271e4(param_1);
    break;
  case 'L':
    lVar5 = FUN_00429d84(param_1);
    break;
  case 'X':
    pcVar12 = pcVar16 + 1;
    uVar1 = *(undefined4 *)(param_1 + 0x54);
    *(char **)(param_1 + 0x18) = pcVar12;
    *(undefined4 *)(param_1 + 0x54) = 1;
    cVar3 = pcVar16[1];
    if (cVar3 == 'L') {
      lVar5 = FUN_00429d84(param_1);
      pcVar12 = *(char **)(param_1 + 0x18);
    }
    else if (cVar3 == 'T') {
      lVar5 = FUN_004253cc(param_1);
                    /* catch() { ... } // from try @ 00425884 with catch @ 004258e8 */
      pcVar12 = *(char **)(param_1 + 0x18);
    }
    else if (cVar3 == 's') {
      if (pcVar16[2] == 'r') {
        *(char **)(param_1 + 0x18) = pcVar16 + 3;
        uVar7 = FUN_004271e4(param_1);
        uVar8 = FUN_00428b90(param_1);
        if (**(char **)(param_1 + 0x18) == 'I') {
          uVar10 = FUN_004255a4(param_1);
          uVar8 = FUN_004245e0(param_1,4,uVar8,uVar10);
        }
        lVar5 = FUN_004245e0(param_1,1,uVar7,uVar8);
        pcVar12 = *(char **)(param_1 + 0x18);
      }
      else {
        if (pcVar16[2] != 'p') goto LAB_00425700;
        *(char **)(param_1 + 0x18) = pcVar16 + 3;
        uVar7 = FUN_00429efc(param_1);
        lVar5 = FUN_004245e0(param_1,0x4a,uVar7,0);
        pcVar12 = *(char **)(param_1 + 0x18);
      }
    }
    else {
      if (cVar3 == 'f') {
        if (pcVar16[2] != 'p') goto LAB_00425700;
        *(char **)(param_1 + 0x18) = pcVar16 + 3;
        if (pcVar16[3] == 'T') {
          lVar15 = 0;
          *(char **)(param_1 + 0x18) = pcVar16 + 4;
        }
        else {
          iVar4 = FUN_0042529c(param_1);
          lVar15 = (long)(iVar4 + 1);
                    /* try { // try from 00425b54 to 00525b57 has its CatchHandler @ 00425fe4 */
          if (iVar4 + 1 == 0) {
            pcVar12 = *(char **)(param_1 + 0x18);
            goto LAB_0042580c;
          }
        }
                    /* try { // try from 00425884 to 00525887 has its CatchHandler @ 004258e8 */
        iVar4 = *(int *)(param_1 + 0x28);
                    /* try { // try from 0042588c to 0052588f has its CatchHandler @ 00425288 */
        if (iVar4 < *(int *)(param_1 + 0x2c)) {
          *(int *)(param_1 + 0x28) = iVar4 + 1;
          lVar5 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
          if (lVar5 != 0) {
            *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
            *(long *)(lVar5 + 8) = lVar15;
            pcVar12 = *(char **)(param_1 + 0x18);
            goto LAB_004257ac;
          }
        }
        goto switchD_00425a68_default;
      }
      if ((byte)(cVar3 - 0x30U) < 10) {
LAB_0042578c:
        lVar5 = FUN_00428b90(param_1);
        pcVar12 = *(char **)(param_1 + 0x18);
        if (lVar5 != 0) {
          if (*pcVar12 == 'I') {
                    /* try { // try from 00425a6c to 00525aa3 has its CatchHandler @ 00425938 */
            uVar7 = FUN_004255a4(param_1);
            lVar5 = FUN_004245e0(param_1,4,lVar5,uVar7);
            pcVar12 = *(char **)(param_1 + 0x18);
          }
          goto LAB_004257ac;
        }
      }
      else {
        if (cVar3 == 'o') {
          if (pcVar16[2] == 'n') {
            *(char **)(param_1 + 0x18) = pcVar16 + 3;
            goto LAB_0042578c;
          }
        }
        else if (((cVar3 == 't') || (cVar3 == 'i')) && (pcVar16[2] == 'l')) {
          uVar7 = 0;
          if (cVar3 == 't') {
            uVar7 = FUN_004271e4(param_1);
            pcVar12 = *(char **)(param_1 + 0x18);
          }
          *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    /* try { // try from 00425a28 to 00525a2b has its CatchHandler @ 00425938 */
          uVar8 = FUN_00426a90(param_1,0x45);
          lVar5 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
          pcVar12 = *(char **)(param_1 + 0x18);
          goto LAB_004257ac;
        }
LAB_00425700:
        piVar6 = (int *)FUN_0042899c(param_1);
        if (piVar6 != (int *)0x0) {
          iVar4 = *piVar6;
          if (iVar4 == 0x31) {
            puVar17 = *(undefined8 **)(piVar6 + 2);
                    /* try { // try from 004258f8 to 005258fb has its CatchHandler @ 00425288 */
                    /* catch() { ... } // from try @ 00425678 with catch @ 004258fc */
            pcVar12 = (char *)*puVar17;
                    /* try { // try from 0042590c to 0052590f has its CatchHandler @ 00425288 */
                    /* catch() { ... } // from try @ 004257e8 with catch @ 00425910 */
            *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar17 + 2) + -2;
            iVar4 = strcmp(pcVar12,"st");
            if (iVar4 == 0) {
              uVar7 = FUN_004271e4(param_1);
LAB_00425adc:
                    /* try { // try from 00425adc to 00525adf has its CatchHandler @ 00425fbc */
                    /* try { // try from 00425ae4 to 00525b1b has its CatchHandler @ 00425938 */
              lVar5 = FUN_004245e0(param_1,0x36,piVar6,uVar7);
              pcVar12 = *(char **)(param_1 + 0x18);
              goto LAB_004257ac;
            }
                    /* try { // try from 00425920 to 00525923 has its CatchHandler @ 00425288 */
                    /* catch() { ... } // from try @ 00425464 with catch @ 00425924 */
                    /* try { // try from 00425934 to 00525937 has its CatchHandler @ 00425288 */
                    /* catch() { ... } // from try @ 0042594c with catch @ 00425938
                       catch() { ... } // from try @ 00425a28 with catch @ 00425938
                       catch() { ... } // from try @ 00425a6c with catch @ 00425938
                       catch() { ... } // from try @ 00425ae4 with catch @ 00425938
                       catch() { ... } // from try @ 00425b74 with catch @ 00425938
                       catch() { ... } // from try @ 00425bb8 with catch @ 00425938
                       catch() { ... } // from try @ 00425cb8 with catch @ 00425938
                       catch() { ... } // from try @ 00425d54 with catch @ 00425938
                       catch() { ... } // from try @ 00425dac with catch @ 00425938
                       catch() { ... } // from try @ 00425e00 with catch @ 00425938
                       catch() { ... } // from try @ 00425e7c with catch @ 00425938
                       catch() { ... } // from try @ 00425ec0 with catch @ 00425938
                       catch() { ... } // from try @ 00425f24 with catch @ 00425938
                       catch() { ... } // from try @ 00425f40 with catch @ 00425938
                       catch() { ... } // from try @ 00425f54 with catch @ 00425938
                       catch() { ... } // from try @ 00425f68 with catch @ 00425938
                       catch() { ... } // from try @ 00425f7c with catch @ 00425938
                       catch() { ... } // from try @ 00425f90 with catch @ 00425938
                       catch() { ... } // from try @ 00425fa4 with catch @ 00425938
                       catch() { ... } // from try @ 00425fb8 with catch @ 00425938
                       catch() { ... } // from try @ 00425fcc with catch @ 00425938
                       catch() { ... } // from try @ 00425fe0 with catch @ 00425938
                       catch() { ... } // from try @ 00425ff4 with catch @ 00425938
                       catch() { ... } // from try @ 00426008 with catch @ 00425938
                       catch() { ... } // from try @ 0042601c with catch @ 00425938 */
            switch(*(undefined4 *)((long)puVar17 + 0x14)) {
            case 0:
              goto switchD_00425a68_caseD_0;
            case 1:
              cVar3 = *pcVar12;
                    /* try { // try from 00425b74 to 00525b77 has its CatchHandler @ 00425938 */
              if (((cVar3 == 'm') || (cVar3 == 'p')) && (pcVar12[1] == cVar3)) {
                if (**(char **)(param_1 + 0x18) != '_') {
                  uVar7 = FUN_00429efc(param_1);
                  uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
                    /* try { // try from 00425bb0 to 00525bb3 has its CatchHandler @ 00425fa8 */
                  goto LAB_00425adc;
                }
                *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
              }
              goto switchD_00425a68_caseD_1;
            case 2:
              goto switchD_00425940_caseD_2;
            case 3:
              goto switchD_00425940_caseD_3;
            }
          }
          else if (iVar4 == 0x32) {
                    /* try { // try from 00425a64 to 00525a67 has its CatchHandler @ 00425f80 */
            switch(piVar6[2]) {
            case 0:
switchD_00425a68_caseD_0:
              lVar5 = FUN_004245e0(param_1,0x35,piVar6,0);
                    /* try { // try from 00425a08 to 00525a0b has its CatchHandler @ 00425fd0 */
              pcVar12 = *(char **)(param_1 + 0x18);
              goto LAB_004257ac;
            case 1:
              goto switchD_00425a68_caseD_1;
            case 2:
              pcVar12 = (char *)0x0;
switchD_00425940_caseD_2:
                    /* try { // try from 0042594c to 005259cf has its CatchHandler @ 00425938 */
                    /* try { // try from 00425e60 to 00525e63 has its CatchHandler @ 00425f58 */
              if ((((char *)**(undefined8 **)(piVar6 + 2))[1] == 'c') &&
                 ((cVar3 = *(char *)**(undefined8 **)(piVar6 + 2), (byte)(cVar3 + 0x8eU) < 2 ||
                  ((byte)(cVar3 + 0x9dU) < 2)))) {
                    /* try { // try from 00425e7c to 00525e7f has its CatchHandler @ 00425938 */
                uVar7 = FUN_004271e4(param_1);
              }
              else {
                uVar7 = FUN_00429efc(param_1);
              }
              iVar4 = strcmp(pcVar12,"cl");
              if (iVar4 == 0) {
                    /* try { // try from 00425cb8 to 00525cbb has its CatchHandler @ 00425938 */
                uVar8 = FUN_00426a90(param_1,0x45);
              }
              else {
                iVar4 = strcmp(pcVar12,"dt");
                if ((iVar4 == 0) || (iVar4 = strcmp(pcVar12,"pt"), iVar4 == 0)) {
                  uVar8 = FUN_00428b90(param_1);
                  if (**(char **)(param_1 + 0x18) == 'I') {
                    uVar10 = FUN_004255a4(param_1);
                    /* try { // try from 00425eb8 to 00525ebb has its CatchHandler @ 00425f6c */
                    /* try { // try from 00425ec0 to 00525ee3 has its CatchHandler @ 00425938 */
                    uVar8 = FUN_004245e0(param_1,4,uVar8,uVar10);
                  }
                }
                else {
                  uVar8 = FUN_00429efc(param_1);
                }
              }
              uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
              lVar5 = FUN_004245e0(param_1,0x37,piVar6,uVar7);
              pcVar12 = *(char **)(param_1 + 0x18);
              goto LAB_004257ac;
            case 3:
                    /* try { // try from 004257e8 to 005257eb has its CatchHandler @ 00425910 */
              pcVar12 = (char *)0x0;
switchD_00425940_caseD_3:
                    /* try { // try from 004257f0 to 0052584b has its CatchHandler @ 00425288 */
              iVar4 = strcmp(pcVar12,"qu");
              if (iVar4 == 0) {
                local_18 = FUN_00429efc(param_1);
                pcVar12 = *(char **)(param_1 + 0x18);
                cVar3 = *pcVar12;
                if (cVar3 == 'L') {
                  piVar9 = (int *)FUN_00429d84(param_1);
                  pcVar12 = *(char **)(param_1 + 0x18);
                  cVar3 = *pcVar12;
LAB_00425d9c:
                  if (cVar3 == 'L') {
                    lVar5 = FUN_00429d84(param_1);
                  }
                  else if (cVar3 == 'T') {
                    lVar5 = FUN_004253cc(param_1);
                  }
                  else {
                    /* try { // try from 00425dac to 00525daf has its CatchHandler @ 00425938 */
                    if (cVar3 == 's') {
                      if (pcVar12[1] == 'r') {
                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                        uVar7 = FUN_004271e4(param_1);
                        uVar8 = FUN_00428b90(param_1);
                        if (**(char **)(param_1 + 0x18) == 'I') {
                          uVar10 = FUN_004255a4(param_1);
                          uVar8 = FUN_004245e0(param_1,4,uVar8,uVar10);
                        }
                        lVar5 = FUN_004245e0(param_1,1,uVar7,uVar8);
                      }
                      else {
                        if (pcVar12[1] != 'p') goto LAB_00425df4;
                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                        uVar7 = FUN_00429efc(param_1);
                        lVar5 = FUN_004245e0(param_1,0x4a,uVar7,0);
                      }
                    }
                    else if (cVar3 == 'f') {
                    /* try { // try from 00425fb8 to 00525fbb has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425adc with catch @ 00425fbc */
                      if (pcVar12[1] == 'p') {
                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    /* try { // try from 00425fcc to 00525fcf has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425a08 with catch @ 00425fd0 */
                        if (pcVar12[2] == 'T') {
                          lVar15 = 0;
                          *(char **)(param_1 + 0x18) = pcVar12 + 3;
                        }
                        else {
                          iVar4 = FUN_0042529c(param_1);
                          if (iVar4 + 1 == 0) goto LAB_00426254;
                          lVar15 = (long)(iVar4 + 1);
                        }
                    /* try { // try from 00425fe0 to 00525fe3 has its CatchHandler @ 00425938 */
                        iVar4 = *(int *)(param_1 + 0x28);
                    /* catch() { ... } // from try @ 00425b54 with catch @ 00425fe4 */
                        lVar5 = 0;
                        if (iVar4 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 00425ff4 to 00525ff7 has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425d90 with catch @ 00425ff8 */
                    /* try { // try from 00426008 to 0052600b has its CatchHandler @ 00425938 */
                          *(int *)(param_1 + 0x28) = iVar4 + 1;
                    /* catch() { ... } // from try @ 00425df8 with catch @ 0042600c */
                          lVar5 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
                          if (lVar5 != 0) {
                            *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
                    /* try { // try from 0042601c to 0052601f has its CatchHandler @ 00425938 */
                            *(long *)(lVar5 + 8) = lVar15;
                          }
                        }
                      }
                      else {
LAB_00425df4:
                    /* try { // try from 00425df8 to 00525dfb has its CatchHandler @ 0042600c */
                        piVar11 = (int *)FUN_0042899c(param_1);
                    /* try { // try from 00425e00 to 00525e27 has its CatchHandler @ 00425938 */
                        if (piVar11 == (int *)0x0) {
LAB_00426254:
                          lVar5 = 0;
                        }
                        else {
                          iVar4 = *piVar11;
                          if (iVar4 == 0x31) {
                            puVar17 = *(undefined8 **)(piVar11 + 2);
                            pcVar12 = (char *)*puVar17;
                            *(int *)(param_1 + 0x50) =
                                 *(int *)(param_1 + 0x50) + *(int *)(puVar17 + 2) + -2;
                            iVar4 = strcmp(pcVar12,"st");
                            if (iVar4 != 0) {
                              lVar5 = 0;
                              switch(*(undefined4 *)((long)puVar17 + 0x14)) {
                              case 0:
                                goto switchD_004261e8_caseD_0;
                              case 1:
                                goto switchD_00426250_caseD_1;
                              case 2:
                                goto switchD_00426250_caseD_2;
                              case 3:
                                goto switchD_00426250_caseD_3;
                              default:
                                goto switchD_004261e8_default;
                              }
                            }
                            uVar7 = FUN_004271e4(param_1);
                          }
                          else {
                            if (iVar4 == 0x32) {
                              lVar5 = 0;
                              switch(piVar11[2]) {
                              case 0:
switchD_004261e8_caseD_0:
                                lVar5 = FUN_004245e0(param_1,0x35,piVar11,0);
                                break;
                              case 1:
                                goto switchD_004261e8_caseD_1;
                              case 2:
                                pcVar12 = (char *)0x0;
switchD_00426250_caseD_2:
                                if (((char *)**(undefined8 **)(piVar11 + 2))[1] == 'c') {
                                  cVar3 = *(char *)**(undefined8 **)(piVar11 + 2);
                                  bVar2 = cVar3 + 0x8e;
                                  if ((1 < bVar2) && (1 < (byte)(cVar3 + 0x9dU))) goto LAB_0042650c;
                                  local_20 = FUN_004271e4(param_1,bVar2,pcVar12,0);
                                }
                                else {
LAB_0042650c:
                                  local_20 = FUN_00429efc(param_1);
                                }
                                iVar4 = strcmp(pcVar12,"cl");
                                if (iVar4 == 0) {
                                  uVar7 = FUN_00426a90(param_1,0x45);
                                }
                                else {
                                  iVar4 = strcmp(pcVar12,"dt");
                                  if ((iVar4 == 0) || (iVar4 = strcmp(pcVar12,"pt"), iVar4 == 0)) {
                                    uVar7 = FUN_00428b90(param_1);
                                    if (**(char **)(param_1 + 0x18) == 'I') {
                                      uVar8 = FUN_004255a4(param_1);
                                      uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
                                    }
                                  }
                                  else {
                                    uVar7 = FUN_00429efc(param_1);
                                  }
                                }
                                uVar7 = FUN_004245e0(param_1,0x38,local_20,uVar7);
                                lVar5 = FUN_004245e0(param_1,0x37,piVar11,uVar7);
                                break;
                              case 3:
                                pcVar12 = (char *)0x0;
switchD_00426250_caseD_3:
                                iVar4 = strcmp(pcVar12,"qu");
                                if (iVar4 == 0) {
                                  local_20 = FUN_00429efc(param_1);
                                  local_28 = FUN_00429efc(param_1);
                                  uVar7 = FUN_00429efc(param_1);
                                }
                                else {
                                  if ((*pcVar12 != 'n') ||
                                     ((pcVar12[1] != 'a' && (pcVar12[1] != 'w'))))
                                  goto LAB_00426254;
                                  local_20 = FUN_00426a90(param_1,0x5f);
                                  local_28 = FUN_004271e4(param_1);
                    /* try { // try from 0042660c to 0052660f has its CatchHandler @ 004266bc */
                                  pcVar12 = *(char **)(param_1 + 0x18);
                                  cVar3 = *pcVar12;
                    /* try { // try from 00426614 to 00526653 has its CatchHandler @ 0042631c */
                                  if (cVar3 != 'E') {
                                    if (cVar3 == 'p') {
                    /* try { // try from 004268e4 to 005268e7 has its CatchHandler @ 00426ab4 */
                                      lVar5 = 0;
                    /* try { // try from 004268ec to 0052696b has its CatchHandler @ 0042670c */
                                      if (pcVar12[1] == 'i') {
                                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                                        uVar7 = FUN_00426a90(param_1,0x45);
                                        goto LAB_00426644;
                                      }
                                    }
                                    else {
                                      if (cVar3 != 'i') goto LAB_00426254;
                                      lVar5 = 0;
                                      if (pcVar12[1] == 'l') {
                                        uVar7 = FUN_00429efc(param_1);
                                        goto LAB_00426644;
                                      }
                                    }
                                    break;
                                  }
                                  uVar7 = 0;
                                  *(char **)(param_1 + 0x18) = pcVar12 + 1;
                                }
LAB_00426644:
                                uVar7 = FUN_004245e0(param_1,0x3b,local_28,uVar7);
                                uVar7 = FUN_004245e0(param_1,0x3a,local_20,uVar7);
                                lVar5 = FUN_004245e0(param_1,0x39,piVar11,uVar7);
                              }
                              goto switchD_004261e8_default;
                            }
                            if (iVar4 != 0x33) goto LAB_00426254;
                            if (**(char **)(param_1 + 0x18) == '_') {
                              *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                              uVar7 = FUN_00426a90(param_1,0x45);
                              goto LAB_00425e3c;
                            }
switchD_004261e8_caseD_1:
                            uVar7 = FUN_00429efc(param_1);
                          }
LAB_00425e3c:
                          lVar5 = FUN_004245e0(param_1,0x36,piVar11,uVar7);
                        }
                      }
                    }
                    else {
                      if (9 < (byte)(cVar3 - 0x30U)) {
                        if (cVar3 != 'o') goto LAB_00425dd4;
                        if (pcVar12[1] != 'n') goto LAB_00425df4;
                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                      }
                      lVar5 = FUN_00428b90(param_1);
                      if ((lVar5 != 0) && (**(char **)(param_1 + 0x18) == 'I')) {
                        uVar7 = FUN_004255a4(param_1);
                    /* try { // try from 00425f1c to 00525f1f has its CatchHandler @ 00425f44 */
                    /* try { // try from 00425f24 to 00525f27 has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425cf4 with catch @ 00425f30 */
                        lVar5 = FUN_004245e0(param_1,4,lVar5,uVar7);
                      }
                    }
                  }
                }
                else {
                  if (cVar3 == 'T') {
                    piVar9 = (int *)FUN_004253cc(param_1);
                    pcVar12 = *(char **)(param_1 + 0x18);
                    cVar3 = *pcVar12;
                    goto LAB_00425d9c;
                  }
                    /* try { // try from 00425cf4 to 00525cf7 has its CatchHandler @ 00425f30 */
                  if (cVar3 == 's') {
                    if (pcVar12[1] == 'r') {
                    /* try { // try from 004266e0 to 005266e3 has its CatchHandler @ 0042631c */
                    /* catch() { ... } // from try @ 004263d8 with catch @ 004266e4 */
                      *(char **)(param_1 + 0x18) = pcVar12 + 2;
                      piVar9 = (int *)FUN_004271e4(param_1);
                    /* try { // try from 004266f4 to 005266f7 has its CatchHandler @ 0042631c */
                      uVar7 = FUN_00428b90(param_1);
                    /* catch() { ... } // from try @ 0042668c with catch @ 004266f8 */
                    /* try { // try from 00426708 to 0052670b has its CatchHandler @ 0042631c */
                    /* catch() { ... } // from try @ 00426724 with catch @ 0042670c
                       catch() { ... } // from try @ 004267e4 with catch @ 0042670c
                       catch() { ... } // from try @ 004268ec with catch @ 0042670c
                       catch() { ... } // from try @ 004269ac with catch @ 0042670c
                       catch() { ... } // from try @ 00426a10 with catch @ 0042670c
                       catch() { ... } // from try @ 00426a9c with catch @ 0042670c
                       catch() { ... } // from try @ 00426ab0 with catch @ 0042670c
                       catch() { ... } // from try @ 00426ac4 with catch @ 0042670c
                       catch() { ... } // from try @ 00426ad8 with catch @ 0042670c
                       catch() { ... } // from try @ 00426aec with catch @ 0042670c */
                      if (**(char **)(param_1 + 0x18) != 'I') {
                        piVar9 = (int *)FUN_004245e0(param_1,1,piVar9,uVar7);
                    /* try { // try from 00426724 to 00526793 has its CatchHandler @ 0042670c */
                        pcVar12 = *(char **)(param_1 + 0x18);
                        cVar3 = *pcVar12;
                        goto LAB_00425d9c;
                      }
                      uVar8 = FUN_004255a4(param_1);
                      uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
                      uVar8 = 1;
                    /* try { // try from 004267dc to 005267df has its CatchHandler @ 00426aa0 */
                      goto LAB_00425d88;
                    }
                    if (pcVar12[1] != 'p') goto LAB_00425d38;
                    *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    piVar9 = (int *)FUN_00429efc(param_1);
                    uVar7 = 0x4a;
LAB_004260dc:
                    piVar11 = (int *)FUN_004245e0(param_1,uVar7,piVar9,0);
LAB_004260e8:
                    piVar9 = piVar11;
                    pcVar12 = *(char **)(param_1 + 0x18);
LAB_004260ec:
                    cVar3 = *pcVar12;
                    goto LAB_00425d9c;
                  }
                  if (cVar3 == 'f') {
                    if (pcVar12[1] != 'p') goto LAB_00425d38;
                    *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    if (pcVar12[2] == 'T') {
                      pcVar12 = pcVar12 + 3;
                      lVar5 = 0;
                      *(char **)(param_1 + 0x18) = pcVar12;
                    }
                    else {
                      iVar4 = FUN_0042529c(param_1);
                    /* try { // try from 00426330 to 0052639f has its CatchHandler @ 0042631c */
                      pcVar12 = *(char **)(param_1 + 0x18);
                      if (iVar4 + 1 == 0) {
LAB_004260f8:
                        piVar9 = (int *)0x0;
                        cVar3 = *pcVar12;
                        goto LAB_00425d9c;
                      }
                      lVar5 = (long)(iVar4 + 1);
                    }
                    iVar4 = *(int *)(param_1 + 0x28);
                    if (iVar4 < *(int *)(param_1 + 0x2c)) {
                      *(int *)(param_1 + 0x28) = iVar4 + 1;
                      piVar9 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18);
                      if (piVar9 == (int *)0x0) goto LAB_004260ec;
                      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
                      *(long *)(piVar9 + 2) = lVar5;
                    /* catch() { ... } // from try @ 00426330 with catch @ 0042631c
                       catch() { ... } // from try @ 004263e0 with catch @ 0042631c
                       catch() { ... } // from try @ 0042646c with catch @ 0042631c
                       catch() { ... } // from try @ 00426614 with catch @ 0042631c
                       catch() { ... } // from try @ 00426694 with catch @ 0042631c
                       catch() { ... } // from try @ 004266cc with catch @ 0042631c
                       catch() { ... } // from try @ 004266e0 with catch @ 0042631c
                       catch() { ... } // from try @ 004266f4 with catch @ 0042631c
                       catch() { ... } // from try @ 00426708 with catch @ 0042631c */
                      cVar3 = *pcVar12;
                    }
                    else {
                      cVar3 = *pcVar12;
                      piVar9 = (int *)0x0;
                    }
                    goto LAB_00425d9c;
                  }
                  if ((byte)(cVar3 - 0x30U) < 10) {
LAB_00425f50:
                    /* try { // try from 00425f54 to 00525f57 has its CatchHandler @ 00425938 */
                    piVar9 = (int *)FUN_00428b90(param_1);
                    /* catch() { ... } // from try @ 00425e60 with catch @ 00425f58 */
                    pcVar12 = *(char **)(param_1 + 0x18);
                    cVar3 = *pcVar12;
                    /* try { // try from 00425f68 to 00525f6b has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425eb8 with catch @ 00425f6c */
                    if ((piVar9 != (int *)0x0) && (cVar3 == 'I')) {
                      uVar7 = FUN_004255a4(param_1);
                    /* try { // try from 00425f7c to 00525f7f has its CatchHandler @ 00425938 */
                      uVar8 = 4;
                    /* catch() { ... } // from try @ 00425a64 with catch @ 00425f80 */
                      goto LAB_00425d88;
                    }
                    goto LAB_00425d9c;
                  }
                  if (cVar3 == 'o') {
                    /* try { // try from 00425f40 to 00525f43 has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425f1c with catch @ 00425f44 */
                    if (pcVar12[1] == 'n') {
                      *(char **)(param_1 + 0x18) = pcVar12 + 2;
                      goto LAB_00425f50;
                    }
                  }
                  else if (((cVar3 == 't') || (cVar3 == 'i')) && (pcVar12[1] == 'l')) {
                    uVar7 = 0;
                    if (cVar3 == 't') {
                      uVar7 = FUN_004271e4(param_1);
                      pcVar12 = *(char **)(param_1 + 0x18);
                    }
                    *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    uVar8 = FUN_00426a90(param_1,0x45);
                    piVar9 = (int *)FUN_004245e0(param_1,0x30,uVar7,uVar8);
                    pcVar12 = *(char **)(param_1 + 0x18);
                    cVar3 = *pcVar12;
                    goto LAB_00425d9c;
                  }
LAB_00425d38:
                  piVar9 = (int *)FUN_0042899c(param_1);
                  piVar11 = (int *)0x0;
                  if (piVar9 == (int *)0x0) goto LAB_004260e8;
                  iVar4 = *piVar9;
                  if (iVar4 == 0x31) {
                    puVar17 = *(undefined8 **)(piVar9 + 2);
                    pcVar12 = (char *)*puVar17;
                    *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar17 + 2) + -2
                    ;
                    iVar4 = strcmp(pcVar12,"st");
                    if (iVar4 != 0) {
                      switch(*(undefined4 *)((long)puVar17 + 0x14)) {
                      case 0:
                        goto switchD_00426168_caseD_0;
                      case 1:
                        goto switchD_004262d4_caseD_1;
                      case 2:
                        goto switchD_004262d4_caseD_2;
                      case 3:
                        goto switchD_004262d4_caseD_3;
                      default:
                        goto switchD_00426168_default;
                      }
                    }
                    uVar7 = FUN_004271e4(param_1);
                    uVar8 = 0x36;
                    goto LAB_00425d88;
                  }
                    /* try { // try from 00425d54 to 00525d57 has its CatchHandler @ 00425938 */
                  if (iVar4 != 0x32) {
                    if (iVar4 == 0x33) {
                      if (**(char **)(param_1 + 0x18) != '_') goto switchD_00426168_caseD_1;
                      *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                      uVar7 = FUN_00426a90(param_1,0x45);
                      goto LAB_00425d80;
                    }
switchD_00426168_default:
                    pcVar12 = *(char **)(param_1 + 0x18);
                    goto LAB_004260f8;
                  }
                  switch(piVar9[2]) {
                  case 0:
switchD_00426168_caseD_0:
                    uVar7 = 0x35;
                    goto LAB_004260dc;
                  case 1:
                    goto switchD_00426168_caseD_1;
                  case 2:
                    pcVar12 = (char *)0x0;
switchD_004262d4_caseD_2:
                    if ((((char *)**(undefined8 **)(piVar9 + 2))[1] == 'c') &&
                       ((cVar3 = *(char *)**(undefined8 **)(piVar9 + 2), (byte)(cVar3 + 0x8eU) < 2
                        || ((byte)(cVar3 + 0x9dU) < 2)))) {
                      local_20 = FUN_004271e4(param_1);
                    }
                    else {
                      local_20 = FUN_00429efc(param_1);
                    }
                    iVar4 = strcmp(pcVar12,"cl");
                    if (iVar4 == 0) {
                      uVar7 = FUN_00426a90(param_1,0x45);
                    }
                    else {
                      iVar4 = strcmp(pcVar12,"dt");
                      if ((iVar4 == 0) || (iVar4 = strcmp(pcVar12,"pt"), iVar4 == 0)) {
                        uVar7 = FUN_00428b90(param_1);
                        if (**(char **)(param_1 + 0x18) == 'I') {
                          uVar8 = FUN_004255a4(param_1);
                          uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
                        }
                      }
                      else {
                    /* try { // try from 00426a08 to 00526a0b has its CatchHandler @ 00426a8c */
                        uVar7 = FUN_00429efc(param_1);
                    /* try { // try from 00426a10 to 00526a43 has its CatchHandler @ 0042670c */
                      }
                    }
                    uVar7 = FUN_004245e0(param_1,0x38,local_20,uVar7);
                    uVar8 = 0x37;
                    /* try { // try from 004263d8 to 005263db has its CatchHandler @ 004266e4 */
                    goto LAB_00425d88;
                  case 3:
                    pcVar12 = (char *)0x0;
switchD_004262d4_caseD_3:
                    iVar4 = strcmp(pcVar12,"qu");
                    if (iVar4 == 0) {
                    /* try { // try from 004267e4 to 005268a3 has its CatchHandler @ 0042670c */
                      local_20 = FUN_00429efc(param_1);
                      uVar7 = FUN_00429efc(param_1);
                      uVar8 = FUN_00429efc(param_1);
LAB_004264bc:
                      uVar7 = FUN_004245e0(param_1,0x3b,uVar7,uVar8);
                      uVar7 = FUN_004245e0(param_1,0x3a,local_20,uVar7);
                      uVar8 = 0x39;
                      goto LAB_00425d88;
                    }
                    /* try { // try from 00426464 to 00526467 has its CatchHandler @ 004266d0 */
                    if ((*pcVar12 != 'n') || ((pcVar12[1] != 'a' && (pcVar12[1] != 'w'))))
                    goto switchD_00426168_default;
                    /* try { // try from 0042646c to 005265d3 has its CatchHandler @ 0042631c */
                    local_20 = FUN_00426a90(param_1,0x5f);
                    uVar7 = FUN_004271e4(param_1);
                    pcVar12 = *(char **)(param_1 + 0x18);
                    cVar3 = *pcVar12;
                    if (cVar3 == 'E') {
                      uVar8 = 0;
                      *(char **)(param_1 + 0x18) = pcVar12 + 1;
                      goto LAB_004264bc;
                    }
                    if (cVar3 == 'p') {
                      if (pcVar12[1] == 'i') {
                        *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    /* try { // try from 004269a4 to 005269a7 has its CatchHandler @ 00426ac8 */
                        uVar8 = FUN_00426a90(param_1,0x45);
                    /* try { // try from 004269ac to 005269cf has its CatchHandler @ 0042670c */
                        goto LAB_004264bc;
                      }
                    }
                    else {
                      if (cVar3 != 'i') {
                        piVar9 = (int *)0x0;
                        goto LAB_00425d9c;
                      }
                      if (pcVar12[1] == 'l') {
                        uVar8 = FUN_00429efc(param_1);
                        goto LAB_004264bc;
                      }
                    }
                    piVar9 = (int *)0x0;
LAB_00425dd4:
                    if (((cVar3 != 't') && (cVar3 != 'i')) || (pcVar12[1] != 'l'))
                    goto LAB_00425df4;
                    uVar7 = 0;
                    if (cVar3 == 't') {
                      uVar7 = FUN_004271e4(param_1);
                    }
                    *(long *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) + 2;
                    uVar8 = FUN_00426a90(param_1,0x45);
                    lVar5 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
                    break;
                  default:
                    goto switchD_00426168_default;
                  }
                }
              }
              else {
                    /* try { // try from 00425bb8 to 00525bff has its CatchHandler @ 00425938 */
                if ((*pcVar12 != 'n') || ((pcVar12[1] != 'a' && (pcVar12[1] != 'w')))) break;
                local_18 = FUN_00426a90(param_1,0x5f);
                piVar9 = (int *)FUN_004271e4(param_1);
                pcVar12 = *(char **)(param_1 + 0x18);
                cVar3 = *pcVar12;
                if (cVar3 != 'E') {
                  if (cVar3 == 'p') {
                    lVar5 = 0;
                    /* try { // try from 00425f90 to 00525f93 has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425c38 with catch @ 00425f94 */
                    if (pcVar12[1] == 'i') {
                      *(char **)(param_1 + 0x18) = pcVar12 + 2;
                    /* try { // try from 00425fa4 to 00525fa7 has its CatchHandler @ 00425938 */
                    /* catch() { ... } // from try @ 00425bb0 with catch @ 00425fa8 */
                      lVar5 = FUN_00426a90(param_1,0x45);
                      goto switchD_004261e8_default;
                    }
                  }
                  else {
                    lVar5 = 0;
                    if ((cVar3 == 'i') && (pcVar12[1] == 'l')) {
                      lVar5 = FUN_00429efc(param_1);
                      goto switchD_004261e8_default;
                    }
                  }
                  goto LAB_004257ac;
                }
                lVar5 = 0;
                *(char **)(param_1 + 0x18) = pcVar12 + 1;
              }
switchD_004261e8_default:
              uVar7 = FUN_004245e0(param_1,0x3b,piVar9,lVar5);
                    /* try { // try from 00425c38 to 00525c3b has its CatchHandler @ 00425f94 */
              uVar7 = FUN_004245e0(param_1,0x3a,local_18,uVar7);
              lVar5 = FUN_004245e0(param_1,0x39,piVar6,uVar7);
              pcVar12 = *(char **)(param_1 + 0x18);
              goto LAB_004257ac;
            }
          }
          else if (iVar4 == 0x33) {
            if (**(char **)(param_1 + 0x18) == '_') {
              *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
              uVar7 = FUN_00426a90(param_1,0x45);
              goto LAB_00425adc;
            }
switchD_00425a68_caseD_1:
            uVar7 = FUN_00429efc(param_1);
            goto LAB_00425adc;
          }
        }
switchD_00425a68_default:
        pcVar12 = *(char **)(param_1 + 0x18);
      }
LAB_0042580c:
      lVar5 = 0;
    }
LAB_004257ac:
    *(undefined4 *)(param_1 + 0x54) = uVar1;
    if (*pcVar12 != 'E') {
      return 0;
    }
    *(char **)(param_1 + 0x18) = pcVar12 + 1;
  }
  if (lVar5 == 0) {
    return 0;
  }
  lVar5 = FUN_004245e0(param_1,0x2f,lVar5,0);
  *plVar13 = lVar5;
  if (lVar5 == 0) {
    return 0;
  }
  pcVar16 = *(char **)(param_1 + 0x18);
  plVar13 = (long *)(lVar5 + 0x10);
  cVar3 = *pcVar16;
  if (cVar3 == 'E') {
    *(undefined8 *)(param_1 + 0x48) = uVar14;
    *(char **)(param_1 + 0x18) = pcVar16 + 1;
                    /* try { // try from 00425678 to 0052567b has its CatchHandler @ 004258fc */
                    /* try { // try from 00425680 to 005257af has its CatchHandler @ 00425288 */
    return local_8;
  }
  goto LAB_00425614;
switchD_004262d4_caseD_1:
  cVar3 = *pcVar12;
                    /* try { // try from 004263e0 to 0052642b has its CatchHandler @ 0042631c */
  if (((cVar3 == 'm') || (cVar3 == 'p')) && (pcVar12[1] == cVar3)) {
    if (**(char **)(param_1 + 0x18) != '_') {
      uVar7 = FUN_00429efc(param_1);
      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
      uVar8 = 0x36;
      goto LAB_00425d88;
    }
                    /* try { // try from 00426a84 to 00526a87 has its CatchHandler @ 00426adc */
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                    /* catch() { ... } // from try @ 00426a08 with catch @ 00426a8c */
  }
switchD_00426168_caseD_1:
  uVar7 = FUN_00429efc(param_1);
LAB_00425d80:
  uVar8 = 0x36;
LAB_00425d88:
  piVar9 = (int *)FUN_004245e0(param_1,uVar8,piVar9,uVar7);
                    /* try { // try from 00425d90 to 00525d93 has its CatchHandler @ 00425ff8 */
  pcVar12 = *(char **)(param_1 + 0x18);
  cVar3 = *pcVar12;
  goto LAB_00425d9c;
switchD_00426250_caseD_1:
  cVar3 = *pcVar12;
                    /* try { // try from 0042668c to 0052668f has its CatchHandler @ 004266f8 */
                    /* try { // try from 00426694 to 00526697 has its CatchHandler @ 0042631c */
  if (((cVar3 == 'm') || (cVar3 == 'p')) && (pcVar12[1] == cVar3)) {
    cVar3 = **(char **)(param_1 + 0x18);
    if (cVar3 != '_') {
                    /* catch() { ... } // from try @ 0042660c with catch @ 004266bc */
      uVar7 = FUN_00429efc(param_1,cVar3,pcVar12,0);
                    /* try { // try from 004266cc to 005266cf has its CatchHandler @ 0042631c */
                    /* catch() { ... } // from try @ 00426464 with catch @ 004266d0 */
      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
      goto LAB_00425e3c;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_004261e8_caseD_1;
}


==================================================================

### FUNC 00426a90 (1876 bytes) name=FUN_00426a90

undefined8 FUN_00426a90(long param_1,char param_2)

{
  undefined4 uVar1;
  char cVar2;
  int iVar3;
  int *piVar4;
  undefined8 uVar5;
  long lVar6;
  long lVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  char *pcVar10;
  long *plVar11;
  undefined8 *puVar12;
  long local_8;
  
                    /* try { // try from 00426a9c to 00526a9f has its CatchHandler @ 0042670c */
                    /* catch() { ... } // from try @ 004267dc with catch @ 00426aa0 */
  pcVar10 = *(char **)(param_1 + 0x18);
                    /* try { // try from 00426ab0 to 00526ab3 has its CatchHandler @ 0042670c */
                    /* catch() { ... } // from try @ 004268e4 with catch @ 00426ab4 */
  plVar11 = &local_8;
  local_8 = 0;
                    /* try { // try from 00426ac4 to 00526ac7 has its CatchHandler @ 0042670c */
                    /* catch() { ... } // from try @ 004269a4 with catch @ 00426ac8 */
  if (*pcVar10 == param_2) {
    *(char **)(param_1 + 0x18) = pcVar10 + 1;
    uVar5 = FUN_004245e0(param_1,0x2e,0,0);
    return uVar5;
  }
  do {
    uVar1 = *(undefined4 *)(param_1 + 0x54);
                    /* try { // try from 00426aec to 00526aef has its CatchHandler @ 0042670c */
    *(undefined4 *)(param_1 + 0x54) = 1;
                    /* catch() { ... } // from try @ 00426b10 with catch @ 00426af0
                       catch() { ... } // from try @ 00426bdc with catch @ 00426af0
                       catch() { ... } // from try @ 00426d9c with catch @ 00426af0
                       catch() { ... } // from try @ 00426e68 with catch @ 00426af0
                       catch() { ... } // from try @ 00426f04 with catch @ 00426af0
                       catch() { ... } // from try @ 00426f48 with catch @ 00426af0
                       catch() { ... } // from try @ 00427044 with catch @ 00426af0
                       catch() { ... } // from try @ 00427124 with catch @ 00426af0
                       catch() { ... } // from try @ 004274b4 with catch @ 00426af0
                       catch() { ... } // from try @ 00427574 with catch @ 00426af0
                       catch() { ... } // from try @ 00427694 with catch @ 00426af0
                       catch() { ... } // from try @ 004277b8 with catch @ 00426af0
                       catch() { ... } // from try @ 004277fc with catch @ 00426af0
                       catch() { ... } // from try @ 004278cc with catch @ 00426af0
                       catch() { ... } // from try @ 0042790c with catch @ 00426af0
                       catch() { ... } // from try @ 004279f4 with catch @ 00426af0
                       catch() { ... } // from try @ 00427a50 with catch @ 00426af0
                       catch() { ... } // from try @ 00427a78 with catch @ 00426af0
                       catch() { ... } // from try @ 00427a8c with catch @ 00426af0
                       catch() { ... } // from try @ 00427aa0 with catch @ 00426af0
                       catch() { ... } // from try @ 00427ab4 with catch @ 00426af0
                       catch() { ... } // from try @ 00427ac8 with catch @ 00426af0
                       catch() { ... } // from try @ 00427adc with catch @ 00426af0
                       catch() { ... } // from try @ 00427af0 with catch @ 00426af0
                       catch() { ... } // from try @ 00427b04 with catch @ 00426af0
                       catch() { ... } // from try @ 00427b2c with catch @ 00426af0
                       catch() { ... } // from try @ 00427b50 with catch @ 00426af0
                       catch() { ... } // from try @ 00427b98 with catch @ 00426af0
                       catch() { ... } // from try @ 00427bac with catch @ 00426af0
                       catch() { ... } // from try @ 00427bd0 with catch @ 00426af0
                       catch() { ... } // from try @ 00427be4 with catch @ 00426af0 */
    cVar2 = *pcVar10;
    if (cVar2 == 'L') {
      lVar6 = FUN_00429d84(param_1);
LAB_00426c54:
      *(undefined4 *)(param_1 + 0x54) = uVar1;
      if (lVar6 == 0) {
        return 0;
      }
    }
    else {
      if (cVar2 == 'T') {
        lVar6 = FUN_004253cc(param_1);
        goto LAB_00426c54;
      }
      if (cVar2 == 's') {
        if (pcVar10[1] == 'r') {
          *(char **)(param_1 + 0x18) = pcVar10 + 2;
          uVar5 = FUN_004271e4(param_1);
          uVar8 = FUN_00428b90(param_1);
          if (**(char **)(param_1 + 0x18) == 'I') {
            uVar9 = FUN_004255a4(param_1);
                    /* try { // try from 0042711c to 0052711f has its CatchHandler @ 00427aa4 */
                    /* try { // try from 00427124 to 00527463 has its CatchHandler @ 00426af0 */
            uVar8 = FUN_004245e0(param_1,4,uVar8,uVar9);
          }
          lVar6 = FUN_004245e0(param_1,1,uVar5,uVar8);
        }
        else {
          if (pcVar10[1] != 'p') goto LAB_00426b44;
          *(char **)(param_1 + 0x18) = pcVar10 + 2;
          uVar5 = FUN_00429efc(param_1);
          lVar6 = FUN_004245e0(param_1,0x4a,uVar5,0);
        }
        goto LAB_00426c54;
      }
                    /* try { // try from 00426b10 to 00526b9b has its CatchHandler @ 00426af0 */
      if (cVar2 == 'f') {
        if (pcVar10[1] != 'p') goto LAB_00426b44;
        *(char **)(param_1 + 0x18) = pcVar10 + 2;
        if (pcVar10[2] == 'T') {
          lVar7 = 0;
          *(char **)(param_1 + 0x18) = pcVar10 + 3;
        }
        else {
          iVar3 = FUN_0042529c(param_1);
          if (iVar3 + 1 == 0) goto switchD_00426de8_default;
          lVar7 = (long)(iVar3 + 1);
        }
        iVar3 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar3) goto switchD_00426de8_default;
        *(int *)(param_1 + 0x28) = iVar3 + 1;
        lVar6 = *(long *)(param_1 + 0x20) + (long)iVar3 * 0x18;
        if (lVar6 == 0) goto switchD_00426de8_default;
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar3 * 0x18) = 6;
        *(long *)(lVar6 + 8) = lVar7;
      }
      else {
        if (9 < (byte)(cVar2 - 0x30U)) {
          if (cVar2 == 'o') {
            if (pcVar10[1] == 'n') {
              *(char **)(param_1 + 0x18) = pcVar10 + 2;
              goto LAB_00426bb8;
            }
          }
          else if (((cVar2 == 't') || (cVar2 == 'i')) && (pcVar10[1] == 'l')) {
            uVar5 = 0;
            if (cVar2 == 't') {
              uVar5 = FUN_004271e4(param_1);
              pcVar10 = *(char **)(param_1 + 0x18);
            }
                    /* try { // try from 00426d9c to 00526e27 has its CatchHandler @ 00426af0 */
            *(char **)(param_1 + 0x18) = pcVar10 + 2;
            uVar8 = FUN_00426a90(param_1,0x45);
            lVar6 = FUN_004245e0(param_1,0x30,uVar5,uVar8);
            goto LAB_00426c54;
          }
LAB_00426b44:
          piVar4 = (int *)FUN_0042899c(param_1);
          if (piVar4 == (int *)0x0) goto switchD_00426de8_default;
          iVar3 = *piVar4;
          if (iVar3 == 0x31) {
            puVar12 = *(undefined8 **)(piVar4 + 2);
            pcVar10 = (char *)*puVar12;
            *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar12 + 2) + -2;
            iVar3 = strcmp(pcVar10,"st");
            if (iVar3 != 0) {
              switch(*(undefined4 *)((long)puVar12 + 0x14)) {
              case 0:
                goto switchD_00426de8_caseD_0;
              case 1:
                goto switchD_00426e10_caseD_1;
              case 2:
                goto switchD_00426e10_caseD_2;
              case 3:
                goto switchD_00426e10_caseD_3;
              default:
                goto switchD_00426de8_default;
              }
            }
            uVar5 = FUN_004271e4(param_1);
          }
          else {
            if (iVar3 == 0x32) {
              switch(piVar4[2]) {
              case 0:
switchD_00426de8_caseD_0:
                lVar6 = FUN_004245e0(param_1,0x35,piVar4,0);
                goto LAB_00426c54;
              case 1:
                goto switchD_00426de8_caseD_1;
              case 2:
                pcVar10 = (char *)0x0;
switchD_00426e10_caseD_2:
                    /* try { // try from 00426f04 to 00526f07 has its CatchHandler @ 00426af0 */
                if ((((char *)**(undefined8 **)(piVar4 + 2))[1] == 'c') &&
                   ((cVar2 = *(char *)**(undefined8 **)(piVar4 + 2), (byte)(cVar2 + 0x8eU) < 2 ||
                    ((byte)(cVar2 + 0x9dU) < 2)))) {
                  uVar5 = FUN_004271e4(param_1);
                }
                else {
                  uVar5 = FUN_00429efc(param_1);
                }
                iVar3 = strcmp(pcVar10,"cl");
                if (iVar3 == 0) {
                  uVar8 = FUN_00426a90(param_1,0x45);
                }
                else {
                  iVar3 = strcmp(pcVar10,"dt");
                    /* try { // try from 00426f40 to 00526f43 has its CatchHandler @ 00427ab8 */
                    /* try { // try from 00426f48 to 00527003 has its CatchHandler @ 00426af0 */
                  if ((iVar3 == 0) || (iVar3 = strcmp(pcVar10,"pt"), iVar3 == 0)) {
                    uVar8 = FUN_00428b90(param_1);
                    if (**(char **)(param_1 + 0x18) == 'I') {
                      uVar9 = FUN_004255a4(param_1);
                      uVar8 = FUN_004245e0(param_1,4,uVar8,uVar9);
                    }
                  }
                  else {
                    uVar8 = FUN_00429efc(param_1);
                  }
                }
                uVar5 = FUN_004245e0(param_1,0x38,uVar5,uVar8);
                lVar6 = FUN_004245e0(param_1,0x37,piVar4,uVar5);
                goto LAB_00426c54;
              case 3:
                pcVar10 = (char *)0x0;
switchD_00426e10_caseD_3:
                iVar3 = strcmp(pcVar10,"qu");
                if (iVar3 == 0) {
                  uVar5 = FUN_00429efc(param_1);
                  uVar8 = FUN_00429efc(param_1);
                  uVar9 = FUN_00429efc(param_1);
                }
                else {
                    /* try { // try from 00426e60 to 00526e63 has its CatchHandler @ 00427b54 */
                  if ((*pcVar10 != 'n') || ((pcVar10[1] != 'a' && (pcVar10[1] != 'w'))))
                  goto switchD_00426de8_default;
                    /* try { // try from 00426e68 to 00526e6b has its CatchHandler @ 00426af0 */
                  uVar5 = FUN_00426a90(param_1,0x5f);
                  uVar8 = FUN_004271e4(param_1);
                  pcVar10 = *(char **)(param_1 + 0x18);
                  cVar2 = *pcVar10;
                  if (cVar2 == 'E') {
                    uVar9 = 0;
                    *(char **)(param_1 + 0x18) = pcVar10 + 1;
                  }
                  else if (cVar2 == 'p') {
                    if (pcVar10[1] != 'i') goto switchD_00426de8_default;
                    *(char **)(param_1 + 0x18) = pcVar10 + 2;
                    uVar9 = FUN_00426a90(param_1,0x45);
                  }
                  else {
                    if ((cVar2 != 'i') || (pcVar10[1] != 'l')) {
switchD_00426de8_default:
                      *(undefined4 *)(param_1 + 0x54) = uVar1;
                      return 0;
                    /* try { // try from 00426d70 to 00526d73 has its CatchHandler @ 00427b64 */
                    }
                    uVar9 = FUN_00429efc(param_1);
                  }
                }
                uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar9);
                    /* try { // try from 00426ecc to 00526ecf has its CatchHandler @ 00427b30 */
                uVar5 = FUN_004245e0(param_1,0x3a,uVar5,uVar8);
                lVar6 = FUN_004245e0(param_1,0x39,piVar4,uVar5);
                goto LAB_00426c54;
              default:
                goto switchD_00426de8_default;
              }
            }
            if (iVar3 != 0x33) goto switchD_00426de8_default;
            if (**(char **)(param_1 + 0x18) == '_') {
              *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
              uVar5 = FUN_00426a90(param_1,0x45);
              goto LAB_00426b8c;
            }
switchD_00426de8_caseD_1:
            uVar5 = FUN_00429efc(param_1);
          }
LAB_00426b8c:
          lVar6 = FUN_004245e0(param_1,0x36,piVar4,uVar5);
          goto LAB_00426c54;
        }
LAB_00426bb8:
        lVar6 = FUN_00428b90(param_1);
        if (lVar6 == 0) goto switchD_00426de8_default;
                    /* try { // try from 00426bd4 to 00526bd7 has its CatchHandler @ 00427ae0 */
        if (**(char **)(param_1 + 0x18) == 'I') {
          uVar5 = FUN_004255a4(param_1);
          lVar6 = FUN_004245e0(param_1,4,lVar6,uVar5);
          goto LAB_00426c54;
        }
      }
      *(undefined4 *)(param_1 + 0x54) = uVar1;
    }
                    /* try { // try from 00426bdc to 00526d43 has its CatchHandler @ 00426af0 */
    lVar6 = FUN_004245e0(param_1,0x2e,lVar6,0);
    *plVar11 = lVar6;
    if (lVar6 == 0) {
      return 0;
    }
    pcVar10 = *(char **)(param_1 + 0x18);
    plVar11 = (long *)(lVar6 + 0x10);
    if (*pcVar10 == param_2) {
      *(char **)(param_1 + 0x18) = pcVar10 + 1;
      return local_8;
    }
  } while( true );
switchD_00426e10_caseD_1:
  cVar2 = *pcVar10;
                    /* try { // try from 0042703c to 0052703f has its CatchHandler @ 00427b88 */
  if (((cVar2 == 'm') || (cVar2 == 'p')) && (pcVar10[1] == cVar2)) {
                    /* try { // try from 00427044 to 005270e3 has its CatchHandler @ 00426af0 */
    if (**(char **)(param_1 + 0x18) != '_') {
      uVar5 = FUN_00429efc(param_1);
      uVar5 = FUN_004245e0(param_1,0x38,uVar5,uVar5);
      goto LAB_00426b8c;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_00426de8_caseD_1;
}


==================================================================

### FUNC 004271e4 (5800 bytes) name=FUN_004271e4

int * FUN_004271e4(long param_1)

{
  bool bVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  int iVar6;
  byte bVar7;
  char cVar8;
  code *pcVar9;
  uint uVar10;
  int iVar11;
  long *plVar12;
  int *piVar13;
  undefined8 uVar14;
  long lVar15;
  ulong uVar16;
  undefined8 uVar17;
  undefined8 uVar18;
  ushort uVar19;
  long lVar20;
  byte *pbVar21;
  byte *pbVar22;
  byte *pbVar23;
  char *pcVar24;
  int *local_8;
  
  pbVar22 = *(byte **)(param_1 + 0x18);
  bVar7 = *pbVar22;
  if ((bVar7 == 0x56 || bVar7 == 0x72) || (uVar10 = (uint)bVar7, uVar10 == 0x4b)) {
    plVar12 = (long *)FUN_004246e0(param_1,&local_8,0);
    if (plVar12 == (long *)0x0) {
      return (int *)0x0;
    }
    if (**(char **)(param_1 + 0x18) == 'F') {
      piVar13 = (int *)FUN_0042a564(param_1);
      *plVar12 = (long)piVar13;
    }
    else {
      piVar13 = (int *)FUN_004271e4();
      *plVar12 = (long)piVar13;
    }
    if (piVar13 == (int *)0x0) {
      return (int *)0x0;
    }
    if (*piVar13 - 0x1fU < 2) {
      lVar20 = *(long *)(piVar13 + 2);
      *(int **)(piVar13 + 2) = local_8;
      local_8 = (int *)*plVar12;
      *plVar12 = lVar20;
    }
    if (local_8 == (int *)0x0) {
      return (int *)0x0;
    }
    iVar11 = *(int *)(param_1 + 0x38);
    if (*(int *)(param_1 + 0x3c) <= iVar11) {
      return (int *)0x0;
    }
    *(int **)(*(long *)(param_1 + 0x30) + (long)iVar11 * 8) = local_8;
    *(int *)(param_1 + 0x38) = iVar11 + 1;
    return local_8;
  }
  switch(uVar10) {
  case 0x30:
  case 0x31:
  case 0x32:
  case 0x33:
  case 0x34:
  case 0x35:
  case 0x36:
  case 0x37:
  case 0x38:
  case 0x39:
  case 0x4e:
  case 0x5a:
    local_8 = (int *)FUN_00429114(param_1);
    break;
  default:
    goto switchD_00427260_caseD_3a;
  case 0x41:
    pbVar21 = pbVar22 + 1;
    *(byte **)(param_1 + 0x18) = pbVar21;
    if (pbVar22[1] == 0x5f) {
                    /* try { // try from 00427b98 to 00527b9b has its CatchHandler @ 00426af0 */
      lVar20 = 0;
    }
    else {
      if ((byte)(pbVar22[1] - 0x30) < 10) {
        pbVar22 = pbVar22 + 2;
        do {
          pbVar23 = pbVar22;
          *(byte **)(param_1 + 0x18) = pbVar23;
          pbVar22 = pbVar23 + 1;
        } while ((byte)(*pbVar23 - 0x30) < 10);
        lVar20 = FUN_00424680(param_1,pbVar21,(int)pbVar23 - (int)pbVar21);
joined_r0x00427cbc:
        if (lVar20 == 0) goto LAB_00427408;
        pbVar21 = *(byte **)(param_1 + 0x18);
      }
      else {
        uVar2 = *(undefined4 *)(param_1 + 0x54);
        *(undefined4 *)(param_1 + 0x54) = 1;
                    /* catch() { ... } // from try @ 00427c1c with catch @ 00427c00
                       catch() { ... } // from try @ 00427dc0 with catch @ 00427c00
                       catch() { ... } // from try @ 00427e2c with catch @ 00427c00
                       catch() { ... } // from try @ 00427f4c with catch @ 00427c00
                       catch() { ... } // from try @ 004280cc with catch @ 00427c00
                       catch() { ... } // from try @ 004280f4 with catch @ 00427c00 */
        bVar7 = pbVar22[1];
        if (bVar7 == 0x4c) {
          lVar20 = FUN_00429d84(param_1);
LAB_00427cb8:
          *(undefined4 *)(param_1 + 0x54) = uVar2;
          goto joined_r0x00427cbc;
        }
        if (bVar7 == 0x54) {
          lVar20 = FUN_004253cc(param_1);
          goto LAB_00427cb8;
        }
        if (bVar7 == 0x73) {
          if (pbVar22[2] == 0x72) {
            *(byte **)(param_1 + 0x18) = pbVar22 + 3;
            uVar14 = FUN_004271e4(param_1);
            uVar17 = FUN_00428b90(param_1);
                    /* try { // try from 00428318 to 00528337 has its CatchHandler @ 0042811c */
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar18 = FUN_004255a4(param_1);
              uVar17 = FUN_004245e0(param_1,4,uVar17,uVar18);
              lVar20 = FUN_004245e0(param_1,1,uVar14,uVar17);
            }
            else {
              lVar20 = FUN_004245e0(param_1,1,uVar14,uVar17);
                    /* try { // try from 00428340 to 00528343 has its CatchHandler @ 00428570 */
            }
          }
          else {
            if (pbVar22[2] != 0x70) goto LAB_00427c5c;
            *(byte **)(param_1 + 0x18) = pbVar22 + 3;
            uVar14 = FUN_00429efc(param_1);
            lVar20 = FUN_004245e0(param_1,0x4a,uVar14,0);
          }
          goto LAB_00427cb8;
        }
                    /* try { // try from 00427c1c to 00527d3b has its CatchHandler @ 00427c00 */
        if (bVar7 != 0x66) {
          if ((byte)(bVar7 - 0x30) < 10) {
LAB_00427d30:
            lVar20 = FUN_00428b90(param_1);
            if (lVar20 != 0) {
              pbVar21 = *(byte **)(param_1 + 0x18);
                    /* try { // try from 00427d4c to 00527d4f has its CatchHandler @ 004280d0 */
              if (*pbVar21 != 0x49) {
                *(undefined4 *)(param_1 + 0x54) = uVar2;
                goto LAB_004273f8;
              }
              uVar14 = FUN_004255a4(param_1);
              lVar20 = FUN_004245e0(param_1,4,lVar20,uVar14);
              goto LAB_00427cb8;
            }
          }
          else {
            if (bVar7 == 0x6f) {
              if (pbVar22[2] == 0x6e) {
                *(byte **)(param_1 + 0x18) = pbVar22 + 3;
                goto LAB_00427d30;
              }
            }
            else if (((bVar7 == 0x74) || (bVar7 == 0x69)) && (pbVar22[2] == 0x6c)) {
              uVar14 = 0;
              if (bVar7 == 0x74) {
                uVar14 = FUN_004271e4(param_1);
              }
                    /* try { // try from 004281a8 to 005281ab has its CatchHandler @ 00428588 */
              *(long *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) + 2;
              uVar17 = FUN_00426a90(param_1,0x45);
              lVar20 = FUN_004245e0(param_1,0x30,uVar14,uVar17);
              goto LAB_00427cb8;
            }
LAB_00427c5c:
            piVar13 = (int *)FUN_0042899c(param_1);
            if (piVar13 != (int *)0x0) {
              iVar11 = *piVar13;
              if (iVar11 == 0x31) {
                pcVar24 = (char *)**(undefined8 **)(piVar13 + 2);
                *(int *)(param_1 + 0x50) =
                     *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(piVar13 + 2) + 2) + -2;
                iVar11 = strcmp(pcVar24,"st");
                if (iVar11 == 0) {
                  uVar14 = FUN_004271e4(param_1);
LAB_00427ca4:
                  lVar20 = FUN_004245e0(param_1,0x36,piVar13,uVar14);
                  goto LAB_00427cb8;
                }
                    /* try { // try from 00428204 to 00528207 has its CatchHandler @ 00428578 */
                    /* try { // try from 0042820c to 00528233 has its CatchHandler @ 00428588 */
                switch(*(undefined4 *)(*(long *)(piVar13 + 2) + 0x14)) {
                case 0:
                  goto switchD_00427ff4_caseD_0;
                case 1:
                  cVar8 = *pcVar24;
                  if (((cVar8 == 'm') || (cVar8 == 'p')) && (pcVar24[1] == cVar8)) {
                    if (**(char **)(param_1 + 0x18) != '_') {
                      uVar14 = FUN_00429efc(param_1);
                      uVar14 = FUN_004245e0(param_1,0x38,uVar14,uVar14);
                      goto LAB_00427ca4;
                    }
                    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                  }
                  goto switchD_00427ff4_caseD_1;
                case 2:
                  goto switchD_00428220_caseD_2;
                case 3:
                  goto switchD_00428220_caseD_3;
                }
              }
              else if (iVar11 == 0x32) {
                switch(piVar13[2]) {
                case 0:
switchD_00427ff4_caseD_0:
                  lVar20 = FUN_004245e0(param_1,0x35,piVar13,0);
                  goto LAB_00427cb8;
                case 1:
                  goto switchD_00427ff4_caseD_1;
                case 2:
                  pcVar24 = (char *)0x0;
switchD_00428220_caseD_2:
                    /* try { // try from 004280f4 to 005280f7 has its CatchHandler @ 00427c00 */
                  if ((((char *)**(undefined8 **)(piVar13 + 2))[1] == 'c') &&
                     ((cVar8 = *(char *)**(undefined8 **)(piVar13 + 2), (byte)(cVar8 + 0x8eU) < 2 ||
                      ((byte)(cVar8 + 0x9dU) < 2)))) {
                    uVar14 = FUN_004271e4(param_1);
                  }
                  else {
                    /* catch() { ... } // from try @ 00427e00 with catch @ 004280f8 */
                    uVar14 = FUN_00429efc(param_1);
                  }
                  iVar11 = strcmp(pcVar24,"cl");
                  if (iVar11 == 0) {
                    /* try { // try from 004284c0 to 005284c3 has its CatchHandler @ 00428520 */
                    uVar17 = FUN_00426a90(param_1,0x45);
                    /* try { // try from 004284c8 to 005284d3 has its CatchHandler @ 00428588 */
                  }
                  else {
                    /* catch() { ... } // from try @ 00428138 with catch @ 0042811c
                       catch() { ... } // from try @ 00428318 with catch @ 0042811c
                       catch() { ... } // from try @ 004284f4 with catch @ 0042811c
                       catch() { ... } // from try @ 0042856c with catch @ 0042811c */
                    iVar11 = strcmp(pcVar24,"dt");
                    /* try { // try from 00428138 to 00528157 has its CatchHandler @ 0042811c */
                    if ((iVar11 == 0) || (iVar11 = strcmp(pcVar24,"pt"), iVar11 == 0)) {
                      uVar17 = FUN_00428b90(param_1);
                      if (**(char **)(param_1 + 0x18) == 'I') {
                        uVar18 = FUN_004255a4(param_1);
                        uVar17 = FUN_004245e0(param_1,4,uVar17,uVar18);
                      }
                    }
                    else {
                      uVar17 = FUN_00429efc(param_1);
                    }
                  }
                  uVar14 = FUN_004245e0(param_1,0x38,uVar14,uVar17);
                    /* try { // try from 00428174 to 00528177 has its CatchHandler @ 00428570 */
                  lVar20 = FUN_004245e0(param_1,0x37,piVar13,uVar14);
                  goto LAB_00427cb8;
                case 3:
                  pcVar24 = (char *)0x0;
switchD_00428220_caseD_3:
                  iVar11 = strcmp(pcVar24,"qu");
                  if (iVar11 == 0) {
                    uVar14 = FUN_00429efc(param_1);
                    uVar17 = FUN_00429efc(param_1);
                    uVar18 = FUN_00429efc(param_1);
LAB_0042809c:
                    uVar17 = FUN_004245e0(param_1,0x3b,uVar17,uVar18);
                    /* catch() { ... } // from try @ 00427f44 with catch @ 004280bc */
                    uVar14 = FUN_004245e0(param_1,0x3a,uVar14,uVar17);
                    /* try { // try from 004280cc to 005280cf has its CatchHandler @ 00427c00 */
                    /* catch() { ... } // from try @ 00427d4c with catch @ 004280d0 */
                    lVar20 = FUN_004245e0(param_1,0x39,piVar13,uVar14);
                    goto LAB_00427cb8;
                  }
                  if ((*pcVar24 == 'n') && ((pcVar24[1] == 'a' || (pcVar24[1] == 'w')))) {
                    uVar14 = FUN_00426a90(param_1,0x5f);
                    uVar17 = FUN_004271e4(param_1);
                    pcVar24 = *(char **)(param_1 + 0x18);
                    cVar8 = *pcVar24;
                    if (cVar8 == 'E') {
                      uVar18 = 0;
                      *(char **)(param_1 + 0x18) = pcVar24 + 1;
                      goto LAB_0042809c;
                    }
                    if (cVar8 == 'p') {
                      if (pcVar24[1] == 'i') {
                        *(char **)(param_1 + 0x18) = pcVar24 + 2;
                        uVar18 = FUN_00426a90(param_1,0x45);
                        goto LAB_0042809c;
                      }
                    }
                    else if ((cVar8 == 'i') && (pcVar24[1] == 'l')) {
                      uVar18 = FUN_00429efc(param_1);
                      goto LAB_0042809c;
                    }
                  }
                }
              }
              else if (iVar11 == 0x33) {
                if (**(char **)(param_1 + 0x18) == '_') {
                  *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                  uVar14 = FUN_00426a90(param_1,0x45);
                  goto LAB_00427ca4;
                }
switchD_00427ff4_caseD_1:
                uVar14 = FUN_00429efc(param_1);
                goto LAB_00427ca4;
              }
            }
          }
switchD_00427ff4_default:
                    /* try { // try from 00427f44 to 00527f47 has its CatchHandler @ 004280bc */
          *(undefined4 *)(param_1 + 0x54) = uVar2;
                    /* try { // try from 00427f4c to 005280b7 has its CatchHandler @ 00427c00 */
          goto LAB_00427408;
        }
                    /* try { // try from 00427dc0 to 00527def has its CatchHandler @ 00427c00 */
        if (pbVar22[2] != 0x70) goto LAB_00427c5c;
        *(byte **)(param_1 + 0x18) = pbVar22 + 3;
        if (pbVar22[3] == 0x54) {
          iVar11 = 0;
          *(byte **)(param_1 + 0x18) = pbVar22 + 4;
        }
        else {
          iVar11 = FUN_0042529c(param_1);
          iVar11 = iVar11 + 1;
          if (iVar11 == 0) goto switchD_00427ff4_default;
        }
        iVar6 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar6) goto switchD_00427ff4_default;
                    /* try { // try from 00427e00 to 00527e03 has its CatchHandler @ 004280f8 */
        *(int *)(param_1 + 0x28) = iVar6 + 1;
        lVar20 = *(long *)(param_1 + 0x20) + (long)iVar6 * 0x18;
        if (lVar20 == 0) goto switchD_00427ff4_default;
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar6 * 0x18) = 6;
        *(long *)(lVar20 + 8) = (long)iVar11;
        *(undefined4 *)(param_1 + 0x54) = uVar2;
                    /* try { // try from 00427e2c to 00527efb has its CatchHandler @ 00427c00 */
        pbVar21 = *(byte **)(param_1 + 0x18);
      }
LAB_004273f8:
      if (*pbVar21 != 0x5f) goto LAB_00427408;
    }
                    /* catch() { ... } // from try @ 004277f4 with catch @ 00427b9c */
    *(byte **)(param_1 + 0x18) = pbVar21 + 1;
                    /* try { // try from 00427bac to 00527baf has its CatchHandler @ 00426af0 */
    uVar14 = FUN_004271e4(param_1);
                    /* catch() { ... } // from try @ 004278a8 with catch @ 00427bb0 */
                    /* catch() { ... } // from try @ 004277b0 with catch @ 00427bc0 */
    local_8 = (int *)FUN_004245e0(param_1,0x2a,lVar20,uVar14);
    break;
  case 0x43:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x25,uVar14,0);
    break;
  case 0x44:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    if (pbVar22[1] == 0) {
      return (int *)0x0;
    }
    *(byte **)(param_1 + 0x18) = pbVar22 + 2;
                    /* try { // try from 004274ac to 005274af has its CatchHandler @ 00427af4 */
                    /* try { // try from 004274b4 to 00527523 has its CatchHandler @ 00426af0 */
    switch(pbVar22[1]) {
    case 0x46:
                    /* catch() { ... } // from try @ 00426bd4 with catch @ 00427ae0 */
      iVar11 = *(int *)(param_1 + 0x28);
      if (*(int *)(param_1 + 0x2c) <= iVar11) {
        uRam0000000000000000 = 0;
                    /* WARNING: Does not return */
        pcVar9 = (code *)SoftwareBreakpoint(1000,0x427d1c);
        (*pcVar9)();
      }
                    /* try { // try from 00427af0 to 00527af3 has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 004274ac with catch @ 00427af4 */
                    /* try { // try from 00427b04 to 00527b07 has its CatchHandler @ 00426af0 */
      *(int *)(param_1 + 0x28) = iVar11 + 1;
                    /* catch() { ... } // from try @ 00427980 with catch @ 00427b08 */
      local_8 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x2c;
                    /* try { // try from 00427b2c to 00527b2f has its CatchHandler @ 00426af0 */
      bVar1 = (byte)(pbVar22[2] - 0x30) < 10;
                    /* catch() { ... } // from try @ 00426ecc with catch @ 00427b30 */
      *(ushort *)(local_8 + 4) = (ushort)bVar1;
      if (bVar1) {
        FUN_00424c94(param_1 + 0x18);
      }
      piVar13 = local_8;
      uVar14 = FUN_004271e4(param_1);
      *(undefined8 *)(piVar13 + 2) = uVar14;
      if (*(long *)(local_8 + 2) == 0) {
        return (int *)0x0;
      }
                    /* try { // try from 00427b50 to 00527b53 has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 00426e60 with catch @ 00427b54 */
      FUN_00424c94(param_1 + 0x18);
      pcVar24 = *(char **)(param_1 + 0x18);
      uVar19 = 0;
                    /* catch() { ... } // from try @ 00426d70 with catch @ 00427b64 */
      if (*pcVar24 != '\0') {
        *(char **)(param_1 + 0x18) = pcVar24 + 1;
        uVar19 = (ushort)(*pcVar24 == 's');
      }
      *(ushort *)((long)local_8 + 0x12) = uVar19;
      return local_8;
    default:
      goto switchD_00427260_caseD_3a;
    case 0x54:
    case 0x74:
      uVar2 = *(undefined4 *)(param_1 + 0x54);
      *(undefined4 *)(param_1 + 0x54) = 1;
      bVar7 = pbVar22[2];
      if (bVar7 == 0x4c) {
        lVar20 = FUN_00429d84(param_1);
      }
      else {
                    /* try { // try from 004279f4 to 005279f7 has its CatchHandler @ 00426af0 */
        if (bVar7 == 0x54) {
          lVar20 = FUN_004253cc(param_1);
        }
        else if (bVar7 == 0x73) {
          if (pbVar22[3] == 0x72) {
            *(byte **)(param_1 + 0x18) = pbVar22 + 4;
            uVar14 = FUN_004271e4(param_1);
            uVar17 = FUN_00428b90(param_1);
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar18 = FUN_004255a4(param_1);
                    /* catch() { ... } // from try @ 00428694 with catch @ 004287f8 */
              uVar17 = FUN_004245e0(param_1,4,uVar17,uVar18);
                    /* try { // try from 00428808 to 0052880b has its CatchHandler @ 004285cc */
                    /* catch() { ... } // from try @ 00428820 with catch @ 0042880c
                       catch() { ... } // from try @ 004288d0 with catch @ 0042880c
                       catch() { ... } // from try @ 004289f0 with catch @ 0042880c
                       catch() { ... } // from try @ 00428a5c with catch @ 0042880c
                       catch() { ... } // from try @ 00428a78 with catch @ 0042880c
                       catch() { ... } // from try @ 00428a8c with catch @ 0042880c
                       catch() { ... } // from try @ 00428aa0 with catch @ 0042880c */
              lVar20 = FUN_004245e0(param_1,1,uVar14,uVar17);
            }
            else {
              lVar20 = FUN_004245e0(param_1,1,uVar14,uVar17);
            }
          }
          else {
            if (pbVar22[3] != 0x70) goto LAB_00427a40;
            *(byte **)(param_1 + 0x18) = pbVar22 + 4;
            uVar14 = FUN_00429efc(param_1);
            lVar20 = FUN_004245e0(param_1,0x4a,uVar14,0);
          }
        }
        else if (bVar7 == 0x66) {
          if (pbVar22[3] != 0x70) goto LAB_00427a40;
          *(byte **)(param_1 + 0x18) = pbVar22 + 4;
          if (pbVar22[4] == 0x54) {
            iVar11 = 0;
            *(byte **)(param_1 + 0x18) = pbVar22 + 5;
          }
          else {
                    /* try { // try from 004282a4 to 005282a7 has its CatchHandler @ 00428570 */
            iVar11 = FUN_0042529c(param_1);
            iVar11 = iVar11 + 1;
            if (iVar11 == 0) goto LAB_004282b0;
          }
          iVar6 = *(int *)(param_1 + 0x28);
          if (*(int *)(param_1 + 0x2c) <= iVar6) goto LAB_004282b0;
          *(int *)(param_1 + 0x28) = iVar6 + 1;
          lVar15 = *(long *)(param_1 + 0x20) + (long)iVar6 * 0x18;
          lVar20 = 0;
          if (lVar15 != 0) {
            *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar6 * 0x18) = 6;
            *(long *)(lVar15 + 8) = (long)iVar11;
            lVar20 = lVar15;
          }
        }
        else {
          if ((byte)(bVar7 - 0x30) < 10) {
LAB_00427e48:
            lVar20 = FUN_00428b90(param_1);
            if (lVar20 != 0) {
              if (**(char **)(param_1 + 0x18) == 'I') {
                uVar14 = FUN_004255a4(param_1);
                lVar20 = FUN_004245e0(param_1,4,lVar20,uVar14);
              }
              goto switchD_004284b4_default;
            }
          }
          else {
            if (bVar7 == 0x6f) {
              if (pbVar22[3] == 0x6e) {
                *(byte **)(param_1 + 0x18) = pbVar22 + 4;
                goto LAB_00427e48;
              }
            }
            else if (((bVar7 == 0x74) || (bVar7 == 0x69)) && (pbVar22[3] == 0x6c)) {
              uVar14 = 0;
              if (bVar7 == 0x74) {
                uVar14 = FUN_004271e4(param_1);
              }
              *(long *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) + 2;
              uVar17 = FUN_00426a90(param_1,0x45);
              lVar20 = FUN_004245e0(param_1,0x30,uVar14,uVar17);
              goto switchD_004284b4_default;
            }
LAB_00427a40:
            piVar13 = (int *)FUN_0042899c(param_1);
                    /* try { // try from 00427a48 to 00527a4b has its CatchHandler @ 00427bd4 */
            if (piVar13 != (int *)0x0) {
                    /* try { // try from 00427a50 to 00527a53 has its CatchHandler @ 00426af0 */
              iVar11 = *piVar13;
              if (iVar11 == 0x31) {
                pcVar24 = (char *)**(undefined8 **)(piVar13 + 2);
                *(int *)(param_1 + 0x50) =
                     *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(piVar13 + 2) + 2) + -2;
                iVar11 = strcmp(pcVar24,"st");
                if (iVar11 != 0) {
                  lVar20 = 0;
                  switch(*(undefined4 *)(*(long *)(piVar13 + 2) + 0x14)) {
                  case 0:
                    goto switchD_004284b4_caseD_0;
                  case 1:
                    goto switchD_0042829c_caseD_1;
                  case 2:
                    goto switchD_0042829c_caseD_2;
                  case 3:
                    goto switchD_0042829c_caseD_3;
                  default:
                    goto switchD_004284b4_default;
                  }
                }
                uVar14 = FUN_004271e4(param_1);
              }
              else {
                if (iVar11 == 0x32) {
                    /* try { // try from 00428490 to 00528493 has its CatchHandler @ 00428588 */
                  lVar20 = 0;
                  switch(piVar13[2]) {
                  case 0:
switchD_004284b4_caseD_0:
                    /* try { // try from 0042869c to 0052869f has its CatchHandler @ 004285cc */
                    lVar20 = FUN_004245e0(param_1,0x35,piVar13,0);
                    break;
                  case 1:
                    goto switchD_004284b4_caseD_1;
                  case 2:
                    pcVar24 = (char *)0x0;
switchD_0042829c_caseD_2:
                    if (((char *)**(undefined8 **)(piVar13 + 2))[1] == 'c') {
                      cVar8 = *(char *)**(undefined8 **)(piVar13 + 2);
                      bVar7 = cVar8 + 0x8e;
                      if ((1 < bVar7) && (1 < (byte)(cVar8 + 0x9dU))) goto LAB_004284e4;
                      uVar14 = FUN_004271e4(param_1,bVar7,0);
                    }
                    else {
LAB_004284e4:
                      uVar14 = FUN_00429efc(param_1);
                    }
                    /* try { // try from 004284f4 to 005284f7 has its CatchHandler @ 0042811c */
                    iVar11 = strcmp(pcVar24,"cl");
                    if (iVar11 == 0) {
                      uVar17 = FUN_00426a90(param_1,0x45);
                    }
                    else {
                      iVar11 = strcmp(pcVar24,"dt");
                    /* catch() { ... } // from try @ 004284c0 with catch @ 00428520 */
                      if ((iVar11 == 0) || (iVar11 = strcmp(pcVar24,"pt"), iVar11 == 0)) {
                        uVar17 = FUN_00428b90(param_1);
                        if (**(char **)(param_1 + 0x18) == 'I') {
                          uVar18 = FUN_004255a4(param_1);
                          uVar17 = FUN_004245e0(param_1,4,uVar17,uVar18);
                        }
                      }
                      else {
                        uVar17 = FUN_00429efc(param_1);
                      }
                    }
                    uVar14 = FUN_004245e0(param_1,0x38,uVar14,uVar17);
                    /* try { // try from 0042856c to 0052856f has its CatchHandler @ 0042811c */
                    lVar20 = FUN_004245e0(param_1,0x37,piVar13,uVar14);
                    /* catch() { ... } // from try @ 00428174 with catch @ 00428570
                       catch() { ... } // from try @ 004282a4 with catch @ 00428570
                       catch() { ... } // from try @ 00428340 with catch @ 00428570 */
                    break;
                  case 3:
                    /* catch() { ... } // from try @ 004285dc with catch @ 004285cc
                       catch() { ... } // from try @ 0042869c with catch @ 004285cc
                       catch() { ... } // from try @ 00428808 with catch @ 004285cc */
                    pcVar24 = (char *)0x0;
switchD_0042829c_caseD_3:
                    /* try { // try from 004285dc to 0052864b has its CatchHandler @ 004285cc */
                    iVar11 = strcmp(pcVar24,"qu");
                    if (iVar11 == 0) {
                      uVar14 = FUN_00429efc(param_1);
                      uVar17 = FUN_00429efc(param_1);
                      uVar18 = FUN_00429efc(param_1);
                    }
                    else {
                      if ((*pcVar24 != 'n') || ((pcVar24[1] != 'a' && (pcVar24[1] != 'w'))))
                      goto LAB_004282b0;
                      uVar14 = FUN_00426a90(param_1,0x5f);
                      uVar17 = FUN_004271e4(param_1);
                      pcVar24 = *(char **)(param_1 + 0x18);
                      cVar8 = *pcVar24;
                      if (cVar8 != 'E') {
                        if (cVar8 == 'p') {
                          if (pcVar24[1] == 'i') {
                            *(char **)(param_1 + 0x18) = pcVar24 + 2;
                            uVar18 = FUN_00426a90(param_1,0x45);
                            goto LAB_00428654;
                          }
                        }
                        else if ((cVar8 == 'i') && (pcVar24[1] == 'l')) {
                          uVar18 = FUN_00429efc(param_1);
                          goto LAB_00428654;
                        }
                        goto LAB_004282b0;
                      }
                      uVar18 = 0;
                      *(char **)(param_1 + 0x18) = pcVar24 + 1;
                    }
LAB_00428654:
                    uVar17 = FUN_004245e0(param_1,0x3b,uVar17,uVar18);
                    uVar14 = FUN_004245e0(param_1,0x3a,uVar14,uVar17);
                    lVar20 = FUN_004245e0(param_1,0x39,piVar13,uVar14);
                    /* try { // try from 00428694 to 00528697 has its CatchHandler @ 004287f8 */
                  }
                  goto switchD_004284b4_default;
                }
                    /* catch() { ... } // from try @ 00427904 with catch @ 00427a68 */
                if (iVar11 != 0x33) goto LAB_004282b0;
                    /* try { // try from 00427a78 to 00527a7b has its CatchHandler @ 00426af0 */
                if (**(char **)(param_1 + 0x18) == '_') {
                    /* try { // try from 00428820 to 0052887f has its CatchHandler @ 0042880c */
                  *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                  uVar14 = FUN_00426a90(param_1,0x45);
                  goto LAB_00427a88;
                }
switchD_004284b4_caseD_1:
                    /* catch() { ... } // from try @ 0042756c with catch @ 00427a7c */
                uVar14 = FUN_00429efc(param_1);
              }
LAB_00427a88:
                    /* try { // try from 00427a8c to 00527a8f has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 0042796c with catch @ 00427a90 */
              lVar20 = FUN_004245e0(param_1,0x36,piVar13,uVar14);
              goto switchD_004284b4_default;
            }
          }
LAB_004282b0:
          lVar20 = 0;
        }
      }
switchD_004284b4_default:
      *(undefined4 *)(param_1 + 0x54) = uVar2;
                    /* try { // try from 00427aa0 to 00527aa3 has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 0042711c with catch @ 00427aa4 */
      local_8 = (int *)FUN_004245e0(param_1,0x42,lVar20,0);
                    /* try { // try from 00427ab4 to 00527ab7 has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 00426f40 with catch @ 00427ab8 */
      if (local_8 == (int *)0x0) {
        return (int *)0x0;
      }
      pcVar24 = *(char **)(param_1 + 0x18);
      if (*pcVar24 == '\0') {
        return (int *)0x0;
      }
                    /* try { // try from 00427ac8 to 00527acb has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 0042768c with catch @ 00427acc */
      *(char **)(param_1 + 0x18) = pcVar24 + 1;
      if (*pcVar24 != 'E') {
        return (int *)0x0;
      }
      goto LAB_00427348;
    case 0x61:
      piVar13 = (int *)FUN_00424680(param_1,&DAT_0047bc68,4);
      return piVar13;
    case 100:
      iVar11 = *(int *)(param_1 + 0x28);
                    /* try { // try from 0042796c to 0052796f has its CatchHandler @ 00427a90 */
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 00427980 to 00527983 has its CatchHandler @ 00427b08 */
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
          *(undefined ***)(piVar13 + 2) = &PTR_s_decimal64_004f96d0;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 9;
          return piVar13;
        }
      }
      break;
    case 0x65:
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
          *(undefined ***)(piVar13 + 2) = &PTR_s_decimal128_004f96f0;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 10;
          return piVar13;
        }
      }
      break;
    case 0x66:
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
                    /* try { // try from 004277f4 to 005277f7 has its CatchHandler @ 00427b9c */
        if (piVar13 != (int *)0x0) {
                    /* try { // try from 004277fc to 0052785f has its CatchHandler @ 00426af0 */
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
          *(undefined ***)(piVar13 + 2) = &PTR_s_decimal32_004f96b0;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 9;
          return piVar13;
        }
      }
      break;
    case 0x68:
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
                    /* try { // try from 004277b0 to 005277b3 has its CatchHandler @ 00427bc0 */
          *(undefined ***)(piVar13 + 2) = &PTR_DAT_004f9710;
                    /* try { // try from 004277b8 to 005277cf has its CatchHandler @ 00426af0 */
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 4;
          return piVar13;
        }
      }
      break;
    case 0x69:
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
          *(undefined ***)(piVar13 + 2) = &PTR_DAT_004f9750;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 8;
          return piVar13;
        }
      }
      break;
    case 0x6e:
                    /* try { // try from 0042790c to 00527923 has its CatchHandler @ 00426af0 */
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
          *(undefined ***)(piVar13 + 2) = &PTR_LAB_004f9770;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 0x11;
          return piVar13;
        }
      }
      break;
    case 0x70:
      uVar14 = FUN_004271e4(param_1);
      local_8 = (int *)FUN_004245e0(param_1,0x4a,uVar14,0);
                    /* try { // try from 00427904 to 00527907 has its CatchHandler @ 00427a68 */
      goto LAB_00427344;
    case 0x73:
      iVar11 = *(int *)(param_1 + 0x28);
      if (iVar11 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 004278a8 to 005278ab has its CatchHandler @ 00427bb0 */
        *(int *)(param_1 + 0x28) = iVar11 + 1;
        piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
        if (piVar13 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
                    /* try { // try from 004278cc to 005278cf has its CatchHandler @ 00426af0 */
          *(undefined ***)(piVar13 + 2) = &PTR_s_char16_t_004f9730;
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 8;
          return piVar13;
        }
      }
      break;
    case 0x76:
      local_8 = (int *)FUN_0042a694(param_1);
      goto LAB_00427344;
    }
LAB_00427b88:
                    /* catch() { ... } // from try @ 0042703c with catch @ 00427b88 */
    local_8 = (int *)0x0;
                    /* WARNING: Does not return */
    pcVar9 = (code *)SoftwareBreakpoint(1000,0x427b98);
    (*pcVar9)();
  case 0x46:
    local_8 = (int *)FUN_0042a564(param_1);
    break;
  case 0x47:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x26,uVar14,0);
    break;
  case 0x4d:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    lVar20 = FUN_004271e4(param_1);
    if ((lVar20 == 0) || (lVar15 = FUN_004271e4(param_1), lVar15 == 0)) {
LAB_00427408:
      local_8 = (int *)0x0;
    }
    else {
      local_8 = (int *)FUN_004245e0(param_1,0x2b,lVar20,lVar15);
    }
    break;
  case 0x4f:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x24,uVar14,0);
    break;
  case 0x50:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x22,uVar14,0);
    break;
  case 0x52:
                    /* try { // try from 0042756c to 0052756f has its CatchHandler @ 00427a7c */
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
                    /* try { // try from 00427574 to 0052764b has its CatchHandler @ 00426af0 */
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x23,uVar14,0);
    break;
  case 0x53:
    bVar7 = pbVar22[1];
    if (((9 < (byte)(bVar7 - 0x30)) && (bVar7 != 0x5f)) && (0x19 < (byte)(bVar7 + 0xbf))) {
                    /* try { // try from 00427bd0 to 00527bd3 has its CatchHandler @ 00426af0 */
                    /* catch() { ... } // from try @ 00427a48 with catch @ 00427bd4 */
      local_8 = (int *)FUN_00429114(param_1);
      if (local_8 == (int *)0x0) {
        return (int *)0x0;
      }
                    /* try { // try from 00427be4 to 00527be7 has its CatchHandler @ 00426af0 */
      if (*local_8 == 0x18) {
        return local_8;
      }
      goto LAB_00427348;
    }
    local_8 = (int *)FUN_00424890(param_1,0);
    if (**(char **)(param_1 + 0x18) != 'I') {
      return local_8;
    }
LAB_004275f0:
    piVar13 = local_8;
    uVar14 = FUN_004255a4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,4,piVar13,uVar14);
    break;
  case 0x54:
    local_8 = (int *)FUN_004253cc(param_1);
    pcVar24 = *(char **)(param_1 + 0x18);
    if (*pcVar24 == 'I') {
      if (*(int *)(param_1 + 0x58) == 0) {
        if (local_8 == (int *)0x0) {
          return (int *)0x0;
        }
        iVar11 = *(int *)(param_1 + 0x38);
        if (*(int *)(param_1 + 0x3c) <= iVar11) {
          return (int *)0x0;
        }
        *(int **)(*(long *)(param_1 + 0x30) + (long)iVar11 * 8) = local_8;
        *(int *)(param_1 + 0x38) = iVar11 + 1;
        goto LAB_004275f0;
      }
      uVar2 = *(undefined4 *)(param_1 + 0x28);
      uVar3 = *(undefined4 *)(param_1 + 0x38);
      uVar4 = *(undefined4 *)(param_1 + 0x40);
      uVar5 = *(undefined4 *)(param_1 + 0x50);
      uVar14 = FUN_004255a4(param_1);
      if (**(char **)(param_1 + 0x18) == 'I') {
        if (local_8 == (int *)0x0) {
          return (int *)0x0;
        }
        iVar11 = *(int *)(param_1 + 0x38);
        if (*(int *)(param_1 + 0x3c) <= iVar11) {
          return (int *)0x0;
        }
        *(int **)(*(long *)(param_1 + 0x30) + (long)iVar11 * 8) = local_8;
        *(int *)(param_1 + 0x38) = iVar11 + 1;
        local_8 = (int *)FUN_004245e0(param_1,4,local_8,uVar14);
      }
      else {
        *(char **)(param_1 + 0x18) = pcVar24;
        *(undefined4 *)(param_1 + 0x28) = uVar2;
        *(undefined4 *)(param_1 + 0x38) = uVar3;
        *(undefined4 *)(param_1 + 0x40) = uVar4;
        *(undefined4 *)(param_1 + 0x50) = uVar5;
      }
    }
    break;
  case 0x55:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    local_8 = (int *)FUN_004251f4(param_1);
    uVar14 = FUN_004271e4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x21,uVar14,local_8);
    break;
  case 0x61:
  case 0x62:
  case 99:
  case 100:
  case 0x65:
  case 0x66:
  case 0x67:
  case 0x68:
  case 0x69:
  case 0x6a:
  case 0x6c:
  case 0x6d:
  case 0x6e:
  case 0x6f:
  case 0x73:
  case 0x74:
  case 0x76:
  case 0x77:
  case 0x78:
  case 0x79:
  case 0x7a:
    iVar11 = *(int *)(param_1 + 0x28);
    uVar16 = -(ulong)(uVar10 - 0x61 >> 0x1f) & 0xffffffe000000000 | (ulong)(uVar10 - 0x61) << 5;
    if (iVar11 < *(int *)(param_1 + 0x2c)) {
      *(int *)(param_1 + 0x28) = iVar11 + 1;
                    /* try { // try from 0042768c to 0052768f has its CatchHandler @ 00427acc */
      piVar13 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18);
      if (piVar13 != (int *)0x0) {
                    /* try { // try from 00427694 to 0052777b has its CatchHandler @ 00426af0 */
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar11 * 0x18) = 0x27;
        *(undefined **)(piVar13 + 2) = &UNK_004f9370 + uVar16;
        iVar11 = *(int *)(&DAT_004f9378 + uVar16);
        *(byte **)(param_1 + 0x18) = pbVar22 + 1;
        *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + iVar11;
        return piVar13;
      }
    }
    goto LAB_00427b88;
  case 0x75:
    *(byte **)(param_1 + 0x18) = pbVar22 + 1;
    uVar14 = FUN_004251f4(param_1);
    local_8 = (int *)FUN_004245e0(param_1,0x28,uVar14,0);
  }
LAB_00427344:
  if (local_8 != (int *)0x0) {
LAB_00427348:
    iVar11 = *(int *)(param_1 + 0x38);
    if (iVar11 < *(int *)(param_1 + 0x3c)) {
      *(int **)(*(long *)(param_1 + 0x30) + (long)iVar11 * 8) = local_8;
      *(int *)(param_1 + 0x38) = iVar11 + 1;
      return local_8;
    }
  }
switchD_00427260_caseD_3a:
  return (int *)0x0;
switchD_0042829c_caseD_1:
                    /* catch() { ... } // from try @ 00428204 with catch @ 00428578 */
  cVar8 = *pcVar24;
                    /* catch() { ... } // from try @ 004281a8 with catch @ 00428588
                       catch() { ... } // from try @ 0042820c with catch @ 00428588
                       catch() { ... } // from try @ 00428490 with catch @ 00428588
                       catch() { ... } // from try @ 004284c8 with catch @ 00428588 */
  if (((cVar8 == 'm') || (cVar8 == 'p')) && (pcVar24[1] == cVar8)) {
    cVar8 = **(char **)(param_1 + 0x18);
    if (cVar8 != '_') {
      uVar14 = FUN_00429efc(param_1,cVar8,0);
      uVar14 = FUN_004245e0(param_1,0x38,uVar14,uVar14);
      goto LAB_00427a88;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_004284b4_caseD_1;
}


==================================================================

### FUNC 0042888c (272 bytes) name=FUN_0042888c

long FUN_0042888c(long param_1)

{
  char cVar1;
  long lVar2;
  char *pcVar3;
  long *plVar4;
  long local_8;
  
  pcVar3 = *(char **)(param_1 + 0x18);
  local_8 = 0;
  cVar1 = *pcVar3;
                    /* try { // try from 004288c8 to 005288cb has its CatchHandler @ 00428a68 */
  if ((cVar1 != 'E' && cVar1 != '\0') && (plVar4 = &local_8, cVar1 != '.')) {
    while (((cVar1 != 'O' && (cVar1 != 'R')) || (pcVar3[1] != 'E'))) {
      lVar2 = FUN_004271e4(param_1);
      if (lVar2 == 0) {
        return 0;
      }
                    /* try { // try from 004288d0 to 005289a7 has its CatchHandler @ 0042880c */
      lVar2 = FUN_004245e0(param_1,0x2e,lVar2,0);
      *plVar4 = lVar2;
      plVar4 = (long *)(lVar2 + 0x10);
      if (lVar2 == 0) {
        return 0;
      }
      pcVar3 = *(char **)(param_1 + 0x18);
      cVar1 = *pcVar3;
      if ((cVar1 == 'E' || cVar1 == '\0') || (cVar1 == '.')) break;
    }
    if (local_8 != 0) {
      if (*(long *)(local_8 + 0x10) != 0) {
        return local_8;
      }
      if (**(int **)(local_8 + 8) == 0x27) {
        lVar2 = *(long *)(*(int **)(local_8 + 8) + 2);
        if (*(int *)(lVar2 + 0x1c) == 9) {
          *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) - *(int *)(lVar2 + 8);
          *(undefined8 *)(local_8 + 8) = 0;
          return local_8;
        }
        return local_8;
      }
      return local_8;
    }
  }
  return 0;
}


==================================================================

### FUNC 0042899c (500 bytes) name=FUN_0042899c

long FUN_0042899c(long param_1)

{
  int iVar1;
  long lVar2;
  undefined4 uVar3;
  byte bVar4;
  uint uVar5;
  undefined8 uVar6;
  long lVar7;
  byte *pbVar8;
  int iVar9;
  int iVar10;
  byte bVar11;
  byte bVar12;
  
  pbVar8 = *(byte **)(param_1 + 0x18);
  if (*pbVar8 == 0) {
    bVar12 = 0;
    bVar11 = 0;
  }
  else {
    *(byte **)(param_1 + 0x18) = pbVar8 + 1;
    bVar11 = *pbVar8;
    if (pbVar8[1] == 0) {
      bVar12 = 0;
                    /* try { // try from 00428a54 to 00528a57 has its CatchHandler @ 00428a90 */
    }
    else {
                    /* try { // try from 00428a5c to 00528a5f has its CatchHandler @ 0042880c */
      *(byte **)(param_1 + 0x18) = pbVar8 + 2;
                    /* catch() { ... } // from try @ 004288c8 with catch @ 00428a68 */
      bVar12 = pbVar8[1];
      if (bVar11 == 0x76) {
        uVar5 = bVar12 - 0x30;
        if ((uVar5 & 0xff) < 10) {
          lVar7 = FUN_004251f4();
          iVar9 = *(int *)(param_1 + 0x28);
          if (*(int *)(param_1 + 0x2c) <= iVar9) {
            return 0;
          }
          *(int *)(param_1 + 0x28) = iVar9 + 1;
          lVar2 = *(long *)(param_1 + 0x20) + (long)iVar9 * 0x18;
          if (lVar7 == 0) {
            return 0;
          }
          if (lVar2 == 0) {
            return 0;
          }
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar9 * 0x18) = 0x32;
          *(uint *)(lVar2 + 8) = uVar5;
          *(long *)(lVar2 + 0x10) = lVar7;
          return lVar2;
        }
      }
      else {
                    /* try { // try from 00428a78 to 00528a7b has its CatchHandler @ 0042880c */
                    /* catch() { ... } // from try @ 004289e8 with catch @ 00428a7c */
        if ((bVar12 == 0x76) && (bVar11 == 99)) {
          uVar3 = *(undefined4 *)(param_1 + 0x58);
                    /* try { // try from 00428a8c to 00528a8f has its CatchHandler @ 0042880c */
                    /* catch() { ... } // from try @ 00428a54 with catch @ 00428a90 */
          *(uint *)(param_1 + 0x58) = (uint)(*(int *)(param_1 + 0x54) == 0);
          uVar6 = FUN_004271e4();
                    /* try { // try from 00428aa0 to 00528aa3 has its CatchHandler @ 0042880c */
          if (*(int *)(param_1 + 0x58) == 0) {
                    /* try { // try from 00428b34 to 00528b37 has its CatchHandler @ 00428ce8 */
            lVar7 = FUN_004245e0(param_1,0x33,uVar6,0);
            *(undefined4 *)(param_1 + 0x58) = uVar3;
                    /* try { // try from 00428b3c to 00528c27 has its CatchHandler @ 00428aa4 */
          }
          else {
                    /* catch() { ... } // from try @ 00428ab8 with catch @ 00428aa4
                       catch() { ... } // from try @ 00428b3c with catch @ 00428aa4
                       catch() { ... } // from try @ 00428c70 with catch @ 00428aa4
                       catch() { ... } // from try @ 00428cdc with catch @ 00428aa4
                       catch() { ... } // from try @ 00428cf8 with catch @ 00428aa4
                       catch() { ... } // from try @ 00428d0c with catch @ 00428aa4
                       catch() { ... } // from try @ 00428d20 with catch @ 00428aa4 */
            lVar7 = FUN_004245e0(param_1,0x34,uVar6,0);
            *(undefined4 *)(param_1 + 0x58) = uVar3;
          }
                    /* try { // try from 00428ab8 to 00528b17 has its CatchHandler @ 00428aa4 */
          return lVar7;
        }
      }
    }
  }
  iVar10 = 0x3d;
  iVar9 = 0;
  do {
    iVar1 = iVar9 + (iVar10 - iVar9) / 2;
                    /* try { // try from 004289e8 to 005289eb has its CatchHandler @ 00428a7c */
                    /* try { // try from 004289f0 to 00528a13 has its CatchHandler @ 0042880c */
    bVar4 = *(&PTR_DAT_004f9918)[(long)iVar1 * 3];
    if (bVar11 == bVar4) {
      bVar4 = (&PTR_DAT_004f9918)[(long)iVar1 * 3][1];
      if (bVar12 == bVar4) {
        iVar9 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar9) {
          return 0;
        }
        *(int *)(param_1 + 0x28) = iVar9 + 1;
        lVar7 = *(long *)(param_1 + 0x20) + (long)iVar9 * 0x18;
        if (lVar7 != 0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar9 * 0x18) = 0x31;
          *(undefined ***)(lVar7 + 8) = &PTR_DAT_004f9918 + (long)iVar1 * 3;
          return lVar7;
        }
        return 0;
      }
      if (bVar4 <= bVar12) goto LAB_00428a34;
    }
    else if (bVar4 <= bVar11) {
LAB_00428a34:
      iVar9 = iVar1 + 1;
      iVar1 = iVar10;
    }
    iVar10 = iVar1;
    if (iVar9 == iVar10) {
      return 0;
    }
  } while( true );
}


==================================================================

### FUNC 00428b90 (1412 bytes) name=FUN_00428b90

int * FUN_00428b90(long param_1)

{
  int iVar1;
  byte bVar2;
  int iVar3;
  undefined8 uVar4;
  int *piVar5;
  long lVar6;
  char *pcVar7;
  char *pcVar8;
  ulong uVar9;
  char cVar10;
  byte *pbVar11;
  bool bVar12;
  int *local_8;
  
  pcVar8 = *(char **)(param_1 + 0x18);
  cVar10 = *pcVar8;
  if ((byte)(cVar10 - 0x30U) < 10) {
    local_8 = (int *)FUN_004251f4();
                    /* try { // try from 00428cd4 to 00528cd7 has its CatchHandler @ 00428d10 */
    pcVar7 = *(char **)(param_1 + 0x18);
                    /* try { // try from 00428cdc to 00528cdf has its CatchHandler @ 00428aa4 */
    cVar10 = *pcVar7;
    goto joined_r0x00428ce8;
  }
  if ((byte)(cVar10 + 0x9fU) < 0x1a) {
                    /* try { // try from 00428d20 to 00528d23 has its CatchHandler @ 00428aa4 */
    local_8 = (int *)FUN_0042899c();
                    /* catch() { ... } // from try @ 00428d38 with catch @ 00428d24
                       catch() { ... } // from try @ 00428db8 with catch @ 00428d24
                       catch() { ... } // from try @ 00428e20 with catch @ 00428d24
                       catch() { ... } // from try @ 00428ea0 with catch @ 00428d24
                       catch() { ... } // from try @ 00428f2c with catch @ 00428d24
                       catch() { ... } // from try @ 00429010 with catch @ 00428d24
                       catch() { ... } // from try @ 0042907c with catch @ 00428d24
                       catch() { ... } // from try @ 004290a0 with catch @ 00428d24
                       catch() { ... } // from try @ 004290b4 with catch @ 00428d24
                       catch() { ... } // from try @ 004290c8 with catch @ 00428d24
                       catch() { ... } // from try @ 004290dc with catch @ 00428d24
                       catch() { ... } // from try @ 004290f0 with catch @ 00428d24
                       catch() { ... } // from try @ 00429104 with catch @ 00428d24 */
    if ((local_8 != (int *)0x0) && (*local_8 == 0x31)) {
      pcVar8 = (char *)**(undefined8 **)(local_8 + 2);
      *(int *)(param_1 + 0x50) =
           *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(local_8 + 2) + 2) + 7;
      iVar3 = strcmp(pcVar8,"li");
      if (iVar3 == 0) {
        uVar4 = FUN_004251f4(param_1);
        local_8 = (int *)FUN_004245e0(param_1,0x36,local_8,uVar4);
      }
    }
                    /* try { // try from 00428d38 to 00528d93 has its CatchHandler @ 00428d24 */
    pcVar7 = *(char **)(param_1 + 0x18);
    cVar10 = *pcVar7;
    goto joined_r0x00428ce8;
  }
  if (1 < (byte)(cVar10 + 0xbdU)) {
    if (cVar10 == 'L') {
      *(char **)(param_1 + 0x18) = pcVar8 + 1;
      local_8 = (int *)FUN_004251f4();
                    /* try { // try from 00428e98 to 00528e9b has its CatchHandler @ 004290e0 */
      if (local_8 == (int *)0x0) {
        return (int *)0x0;
      }
                    /* try { // try from 00428ea0 to 00528eeb has its CatchHandler @ 00428d24 */
      iVar3 = FUN_00425328(param_1);
      if (iVar3 == 0) {
        return (int *)0x0;
      }
      cVar10 = **(char **)(param_1 + 0x18);
      pcVar7 = *(char **)(param_1 + 0x18);
      goto joined_r0x00428ce8;
    }
    if (cVar10 != 'U') {
      return (int *)0x0;
    }
    if (pcVar8[1] == 'l') {
      pcVar7 = pcVar8 + 1;
      *(char **)(param_1 + 0x18) = pcVar7;
      cVar10 = pcVar8[1];
      if (cVar10 == 'l') {
        *(char **)(param_1 + 0x18) = pcVar8 + 2;
        lVar6 = FUN_0042888c();
        pcVar7 = *(char **)(param_1 + 0x18);
        if (lVar6 == 0) goto LAB_00428f1c;
        cVar10 = *pcVar7;
                    /* try { // try from 00428db0 to 00528db3 has its CatchHandler @ 004290b8 */
        if (cVar10 == 'E') {
                    /* try { // try from 00428db8 to 00528ddf has its CatchHandler @ 00428d24 */
          *(char **)(param_1 + 0x18) = pcVar7 + 1;
          if (pcVar7[1] == '_') {
            pcVar8 = pcVar7 + 2;
            iVar3 = 0;
            *(char **)(param_1 + 0x18) = pcVar8;
          }
          else {
            if (pcVar7[1] == 'n') {
              return (int *)0x0;
            }
            local_8 = (int *)0x0;
            iVar3 = FUN_00424c94(param_1 + 0x18);
            pcVar7 = *(char **)(param_1 + 0x18);
            cVar10 = *pcVar7;
            if (cVar10 != '_') goto joined_r0x00428ce8;
            iVar3 = iVar3 + 1;
            pcVar8 = pcVar7 + 1;
            *(char **)(param_1 + 0x18) = pcVar8;
            if (iVar3 < 0) {
              cVar10 = pcVar7[1];
              pcVar7 = pcVar8;
              local_8 = (int *)0x0;
              goto joined_r0x00428ce8;
            }
          }
          iVar1 = *(int *)(param_1 + 0x28);
          if (iVar1 < *(int *)(param_1 + 0x2c)) {
            *(int *)(param_1 + 0x28) = iVar1 + 1;
            local_8 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18);
            if (local_8 != (int *)0x0) {
              *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18) = 0x45;
              *(long *)(local_8 + 2) = lVar6;
              local_8[4] = iVar3;
              iVar3 = *(int *)(param_1 + 0x38);
              if (iVar3 < *(int *)(param_1 + 0x3c)) goto LAB_00428e70;
            }
          }
          cVar10 = *pcVar8;
          local_8 = (int *)0x0;
          pcVar7 = pcVar8;
          goto joined_r0x00428ce8;
        }
      }
    }
    else {
      if (pcVar8[1] != 't') {
        return (int *)0x0;
      }
      pcVar7 = pcVar8 + 1;
      *(char **)(param_1 + 0x18) = pcVar7;
      cVar10 = pcVar8[1];
      if (cVar10 == 't') {
                    /* try { // try from 00428e18 to 00528e1b has its CatchHandler @ 004290f4 */
        *(char **)(param_1 + 0x18) = pcVar8 + 2;
        lVar6 = FUN_0042529c();
                    /* try { // try from 00428e20 to 00528e5f has its CatchHandler @ 00428d24 */
        if ((-1 < lVar6) && (iVar3 = *(int *)(param_1 + 0x28), iVar3 < *(int *)(param_1 + 0x2c))) {
          *(int *)(param_1 + 0x28) = iVar3 + 1;
          local_8 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar3 * 0x18);
          if (local_8 != (int *)0x0) {
            *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar3 * 0x18) = 0x47;
            *(long *)(local_8 + 2) = lVar6;
            iVar3 = *(int *)(param_1 + 0x38);
            if (iVar3 < *(int *)(param_1 + 0x3c)) {
LAB_00428e70:
              *(int **)(*(long *)(param_1 + 0x30) + (long)iVar3 * 8) = local_8;
              *(int *)(param_1 + 0x38) = iVar3 + 1;
              cVar10 = **(char **)(param_1 + 0x18);
              pcVar7 = *(char **)(param_1 + 0x18);
              goto joined_r0x00428ce8;
            }
          }
        }
        pcVar7 = *(char **)(param_1 + 0x18);
LAB_00428f1c:
        cVar10 = *pcVar7;
        local_8 = (int *)0x0;
                    /* try { // try from 00428f24 to 00528f27 has its CatchHandler @ 004290cc */
        goto joined_r0x00428ce8;
      }
    }
    local_8 = (int *)0x0;
    goto joined_r0x00428ce8;
  }
  piVar5 = *(int **)(param_1 + 0x48);
  if ((piVar5 == (int *)0x0) || ((*piVar5 != 0 && (*piVar5 != 0x18)))) {
    if (cVar10 != 'C') {
      if (cVar10 != 'D') {
        return (int *)0x0;
      }
      goto LAB_00428f4c;
    }
LAB_00429060:
                    /* try { // try from 00429074 to 00529077 has its CatchHandler @ 004290a4 */
                    /* try { // try from 0042907c to 0052907f has its CatchHandler @ 00428d24 */
    switch(pcVar8[1]) {
    case '1':
      iVar3 = 1;
      break;
    case '2':
      iVar3 = 2;
      break;
    case '3':
                    /* try { // try from 004290f0 to 005290f3 has its CatchHandler @ 00428d24 */
      iVar3 = 3;
                    /* catch() { ... } // from try @ 00428e18 with catch @ 004290f4 */
      break;
    case '4':
      iVar3 = 4;
      break;
    case '5':
                    /* catch() { ... } // from try @ 00428e98 with catch @ 004290e0 */
      iVar3 = 5;
      break;
    default:
switchD_00428f70_caseD_33:
      return (int *)0x0;
    }
    iVar1 = *(int *)(param_1 + 0x28);
                    /* catch() { ... } // from try @ 00429008 with catch @ 00429090 */
    pcVar7 = pcVar8 + 2;
    *(char **)(param_1 + 0x18) = pcVar7;
                    /* try { // try from 004290a0 to 005290a3 has its CatchHandler @ 00428d24 */
    if (iVar1 < *(int *)(param_1 + 0x2c)) {
                    /* catch() { ... } // from try @ 00429074 with catch @ 004290a4 */
                    /* try { // try from 004290b4 to 005290b7 has its CatchHandler @ 00428d24 */
                    /* catch() { ... } // from try @ 00428db0 with catch @ 004290b8 */
      *(int *)(param_1 + 0x28) = iVar1 + 1;
      local_8 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18);
      if ((local_8 != (int *)0x0) && (piVar5 != (int *)0x0)) {
                    /* try { // try from 004290c8 to 005290cb has its CatchHandler @ 00428d24 */
                    /* catch() { ... } // from try @ 00428f24 with catch @ 004290cc */
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18) = 7;
        local_8[2] = iVar3;
        *(int **)(local_8 + 4) = piVar5;
        cVar10 = pcVar8[2];
                    /* try { // try from 004290dc to 005290df has its CatchHandler @ 00428d24 */
        goto joined_r0x00428ce8;
      }
    }
  }
  else {
                    /* try { // try from 00428f2c to 00528fcf has its CatchHandler @ 00428d24 */
    *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + piVar5[4];
    cVar10 = *pcVar8;
    if (cVar10 == 'C') goto LAB_00429060;
    if (cVar10 != 'D') {
      local_8 = (int *)0x0;
      pcVar7 = pcVar8;
      goto joined_r0x00428ce8;
    }
LAB_00428f4c:
    switch(pcVar8[1]) {
    case '0':
      iVar3 = 1;
      break;
    case '1':
      iVar3 = 2;
      break;
    case '2':
      iVar3 = 3;
      break;
    default:
      goto switchD_00428f70_caseD_33;
    case '4':
      iVar3 = 4;
      break;
    case '5':
      iVar3 = 5;
    }
    iVar1 = *(int *)(param_1 + 0x28);
    pcVar7 = pcVar8 + 2;
    *(char **)(param_1 + 0x18) = pcVar7;
    if (iVar1 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 00429008 to 0052900b has its CatchHandler @ 00429090 */
      *(int *)(param_1 + 0x28) = iVar1 + 1;
                    /* try { // try from 00429010 to 00529033 has its CatchHandler @ 00428d24 */
      local_8 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18);
      if ((local_8 != (int *)0x0) && (piVar5 != (int *)0x0)) {
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar1 * 0x18) = 8;
        local_8[2] = iVar3;
        *(int **)(local_8 + 4) = piVar5;
        cVar10 = pcVar8[2];
        goto joined_r0x00428ce8;
      }
    }
  }
  pcVar7 = pcVar8 + 2;
  cVar10 = *pcVar7;
                    /* try { // try from 00429104 to 00529107 has its CatchHandler @ 00428d24 */
  local_8 = (int *)0x0;
                    /* catch() { ... } // from try @ 0042911c with catch @ 00429108
                       catch() { ... } // from try @ 0042919c with catch @ 00429108
                       catch() { ... } // from try @ 00429204 with catch @ 00429108
                       catch() { ... } // from try @ 0042927c with catch @ 00429108
                       catch() { ... } // from try @ 00429308 with catch @ 00429108
                       catch() { ... } // from try @ 004293dc with catch @ 00429108
                       catch() { ... } // from try @ 00429448 with catch @ 00429108
                       catch() { ... } // from try @ 0042946c with catch @ 00429108
                       catch() { ... } // from try @ 00429480 with catch @ 00429108
                       catch() { ... } // from try @ 00429494 with catch @ 00429108
                       catch() { ... } // from try @ 004294a8 with catch @ 00429108
                       catch() { ... } // from try @ 004294bc with catch @ 00429108
                       catch() { ... } // from try @ 004294d0 with catch @ 00429108 */
joined_r0x00428ce8:
                    /* catch() { ... } // from try @ 00428b34 with catch @ 00428ce8 */
  if (cVar10 != 'B') {
    return local_8;
  }
  do {
    *(char **)(param_1 + 0x18) = pcVar7 + 1;
    bVar12 = false;
    bVar2 = pcVar7[1];
    if (bVar2 == 0x6e) {
                    /* try { // try from 00428cf8 to 00528cfb has its CatchHandler @ 00428aa4 */
                    /* catch() { ... } // from try @ 00428c68 with catch @ 00428cfc */
      *(char **)(param_1 + 0x18) = pcVar7 + 2;
      bVar12 = true;
      bVar2 = pcVar7[2];
                    /* try { // try from 00428d0c to 00528d0f has its CatchHandler @ 00428aa4 */
                    /* catch() { ... } // from try @ 00428cd4 with catch @ 00428d10 */
      if ((byte)(bVar2 - 0x30) < 10) goto LAB_00428c48;
LAB_00428d18:
      uVar4 = 0;
    }
    else {
      if (9 < (byte)(bVar2 - 0x30)) goto LAB_00428d18;
LAB_00428c48:
      pbVar11 = *(byte **)(param_1 + 0x18);
      lVar6 = 0;
      do {
        pbVar11 = pbVar11 + 1;
        uVar9 = (ulong)bVar2;
        *(byte **)(param_1 + 0x18) = pbVar11;
        bVar2 = *pbVar11;
                    /* try { // try from 00428c68 to 00528c6b has its CatchHandler @ 00428cfc */
        lVar6 = lVar6 * 10 + uVar9 + -0x30;
                    /* try { // try from 00428c70 to 00528c93 has its CatchHandler @ 00428aa4 */
      } while ((byte)(bVar2 - 0x30) < 10);
      if ((lVar6 < 1) || (bVar12)) goto LAB_00428d18;
      uVar4 = FUN_00424fd4(param_1);
      *(undefined8 *)(param_1 + 0x48) = uVar4;
    }
    local_8 = (int *)FUN_004245e0(param_1,0x4b,local_8,uVar4);
    pcVar7 = *(char **)(param_1 + 0x18);
    if (*pcVar7 != 'B') {
      return local_8;
    }
  } while( true );
}


==================================================================

### FUNC 00429114 (1452 bytes) name=FUN_00429114

long FUN_00429114(long param_1)

{
  int iVar1;
  int iVar2;
  long lVar3;
  char *pcVar4;
  long *plVar5;
  int *piVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  char *pcVar9;
  long lVar10;
  int *piVar11;
  undefined1 *puVar12;
  char cVar13;
  long lVar14;
  long local_8;
  
                    /* try { // try from 0042911c to 00529177 has its CatchHandler @ 00429108 */
  puVar12 = *(undefined1 **)(param_1 + 0x18);
  switch(*puVar12) {
  case 0x4e:
    *(undefined1 **)(param_1 + 0x18) = puVar12 + 1;
    plVar5 = (long *)FUN_004246e0(param_1,&local_8,1);
    if (plVar5 == (long *)0x0) {
      return 0;
    }
    pcVar4 = *(char **)(param_1 + 0x18);
    cVar13 = *pcVar4;
                    /* try { // try from 00429274 to 00529277 has its CatchHandler @ 004294ac */
                    /* try { // try from 0042927c to 005292c7 has its CatchHandler @ 00429108 */
    if (cVar13 == 'O') {
      uVar8 = 0x20;
      iVar1 = *(int *)(param_1 + 0x50) + 3;
    }
    else {
      lVar3 = 0;
      if (cVar13 != 'R') {
        lVar14 = 0;
        goto LAB_00429290;
      }
      uVar8 = 0x1f;
      iVar1 = *(int *)(param_1 + 0x50) + 2;
    }
    *(int *)(param_1 + 0x50) = iVar1;
    *(char **)(param_1 + 0x18) = pcVar4 + 1;
                    /* try { // try from 00429588 to 0052958b has its CatchHandler @ 004296cc */
                    /* try { // try from 00429590 to 005295f3 has its CatchHandler @ 0042950c */
    lVar14 = 0;
    lVar3 = FUN_004245e0(param_1,uVar8,0,0);
    pcVar4 = *(char **)(param_1 + 0x18);
    cVar13 = *pcVar4;
LAB_00429290:
    do {
      if (cVar13 == '\0') {
LAB_00429518:
        *plVar5 = 0;
        return 0;
                    /* try { // try from 00429520 to 00529547 has its CatchHandler @ 0042950c */
      }
      pcVar9 = pcVar4;
      if (cVar13 == 'D') {
        if ((pcVar4[1] & 0xdfU) == 0x54) {
          lVar10 = FUN_004271e4();
          goto LAB_00429500;
        }
                    /* catch() { ... } // from try @ 00429520 with catch @ 0042950c
                       catch() { ... } // from try @ 00429590 with catch @ 0042950c
                       catch() { ... } // from try @ 00429628 with catch @ 0042950c
                       catch() { ... } // from try @ 00429698 with catch @ 0042950c
                       catch() { ... } // from try @ 004296b4 with catch @ 0042950c
                       catch() { ... } // from try @ 004296c8 with catch @ 0042950c
                       catch() { ... } // from try @ 004296dc with catch @ 0042950c */
        lVar10 = FUN_00428b90(param_1);
        goto LAB_00429500;
      }
      do {
        if ((((byte)(cVar13 - 0x30U) < 10) || ((byte)(cVar13 + 0x9fU) < 0x1a)) ||
           ((cVar13 == 'C' || cVar13 == 'U' || (cVar13 == 'L')))) {
                    /* try { // try from 0042946c to 0052946f has its CatchHandler @ 00429108 */
                    /* catch() { ... } // from try @ 00429440 with catch @ 00429470 */
          lVar10 = FUN_00428b90(param_1);
          if (lVar14 != 0) goto LAB_0042947c;
LAB_00429490:
                    /* try { // try from 00429494 to 00529497 has its CatchHandler @ 00429108 */
          if (cVar13 == 'S') goto LAB_004294cc;
        }
        else {
          if (cVar13 == 'S') {
            lVar10 = FUN_00424890(param_1,1);
            if (lVar14 != 0) {
LAB_0042947c:
              uVar8 = 1;
LAB_00429480:
                    /* try { // try from 00429480 to 00529483 has its CatchHandler @ 00429108 */
                    /* catch() { ... } // from try @ 00429194 with catch @ 00429484 */
              lVar10 = FUN_004245e0(param_1,uVar8,lVar14,lVar10);
              goto LAB_00429490;
            }
            pcVar4 = *(char **)(param_1 + 0x18);
            cVar13 = *pcVar4;
            lVar14 = lVar10;
            goto LAB_00429290;
          }
          if (cVar13 == 'I') {
            if (lVar14 != 0) {
              lVar10 = FUN_004255a4(param_1);
              uVar8 = 4;
              goto LAB_00429480;
            }
            goto LAB_00429518;
          }
          if (cVar13 != 'T') {
            if (cVar13 == 'E') {
              *plVar5 = lVar14;
              if (lVar14 == 0) {
                return 0;
              }
                    /* try { // try from 00429690 to 00529693 has its CatchHandler @ 004296b8 */
              if (lVar3 != 0) {
                    /* try { // try from 00429698 to 0052969b has its CatchHandler @ 0042950c */
                *(long *)(lVar3 + 8) = local_8;
                local_8 = lVar3;
              }
                    /* catch() { ... } // from try @ 00429620 with catch @ 004296a4 */
              if (**(char **)(param_1 + 0x18) == 'E') {
                    /* try { // try from 004296b4 to 005296b7 has its CatchHandler @ 0042950c */
                    /* catch() { ... } // from try @ 00429690 with catch @ 004296b8 */
                *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                return local_8;
              }
              return 0;
            }
                    /* try { // try from 00429300 to 00529303 has its CatchHandler @ 00429498 */
            if ((cVar13 != 'M') || (lVar14 == 0)) goto LAB_00429518;
                    /* try { // try from 00429308 to 0052939b has its CatchHandler @ 00429108 */
            pcVar4 = pcVar9 + 1;
            *(char **)(param_1 + 0x18) = pcVar4;
            cVar13 = pcVar9[1];
            goto LAB_00429290;
          }
          lVar10 = FUN_004253cc(param_1);
LAB_00429500:
          if (lVar14 != 0) goto LAB_0042947c;
        }
                    /* catch() { ... } // from try @ 00429300 with catch @ 00429498 */
        pcVar9 = *(char **)(param_1 + 0x18);
        cVar13 = *pcVar9;
        lVar14 = lVar10;
      } while (cVar13 == 'E');
                    /* try { // try from 004294a8 to 005294ab has its CatchHandler @ 00429108 */
                    /* catch() { ... } // from try @ 00429274 with catch @ 004294ac */
      if ((lVar10 == 0) || (iVar1 = *(int *)(param_1 + 0x38), *(int *)(param_1 + 0x3c) <= iVar1))
      goto LAB_00429518;
                    /* try { // try from 004294bc to 005294bf has its CatchHandler @ 00429108 */
                    /* catch() { ... } // from try @ 004291fc with catch @ 004294c0 */
      *(long *)(*(long *)(param_1 + 0x30) + (long)iVar1 * 8) = lVar10;
      *(int *)(param_1 + 0x38) = iVar1 + 1;
LAB_004294cc:
      pcVar4 = *(char **)(param_1 + 0x18);
                    /* try { // try from 004294d0 to 005294d3 has its CatchHandler @ 00429108 */
      cVar13 = *pcVar4;
      lVar14 = lVar10;
    } while( true );
  default:
    lVar3 = FUN_00428b90(param_1);
    if (**(char **)(param_1 + 0x18) == 'I') {
      if (lVar3 == 0) {
        return 0;
      }
      iVar1 = *(int *)(param_1 + 0x38);
      if (*(int *)(param_1 + 0x3c) <= iVar1) {
        return 0;
      }
                    /* try { // try from 00429440 to 00529443 has its CatchHandler @ 00429470 */
      *(long *)(*(long *)(param_1 + 0x30) + (long)iVar1 * 8) = lVar3;
                    /* try { // try from 00429448 to 0052944b has its CatchHandler @ 00429108 */
      *(int *)(param_1 + 0x38) = iVar1 + 1;
      uVar8 = FUN_004255a4(param_1);
                    /* catch() { ... } // from try @ 004293d4 with catch @ 0042945c */
      lVar3 = FUN_004245e0(param_1,4,lVar3,uVar8);
    }
    break;
  case 0x53:
                    /* try { // try from 004291fc to 005291ff has its CatchHandler @ 004294c0 */
    if (puVar12[1] == 't') {
      *(undefined1 **)(param_1 + 0x18) = puVar12 + 2;
      uVar8 = FUN_00424680(param_1,&DAT_0047bc88,3);
      uVar7 = FUN_00428b90(param_1);
                    /* try { // try from 004293d4 to 005293d7 has its CatchHandler @ 0042945c */
      lVar3 = FUN_004245e0(param_1,1,uVar8,uVar7);
                    /* try { // try from 004293dc to 005293ff has its CatchHandler @ 00429108 */
      *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 3;
      if (**(char **)(param_1 + 0x18) != 'I') {
        return lVar3;
      }
      if (lVar3 == 0) {
        return 0;
      }
      iVar1 = *(int *)(param_1 + 0x38);
      if (*(int *)(param_1 + 0x3c) <= iVar1) {
        return 0;
      }
      *(long *)(*(long *)(param_1 + 0x30) + (long)iVar1 * 8) = lVar3;
      *(int *)(param_1 + 0x38) = iVar1 + 1;
    }
    else {
                    /* try { // try from 00429204 to 0052923b has its CatchHandler @ 00429108 */
      lVar3 = FUN_00424890(param_1,0);
      if (**(char **)(param_1 + 0x18) != 'I') {
        return lVar3;
      }
    }
    uVar8 = FUN_004255a4(param_1);
    lVar3 = FUN_004245e0(param_1,4,lVar3,uVar8);
    break;
  case 0x55:
    lVar3 = FUN_00428b90(param_1);
    return lVar3;
  case 0x5a:
                    /* try { // try from 00429194 to 00529197 has its CatchHandler @ 00429484 */
    *(undefined1 **)(param_1 + 0x18) = puVar12 + 1;
                    /* try { // try from 0042919c to 005291c3 has its CatchHandler @ 00429108 */
    uVar8 = FUN_004296c0(param_1,0);
    pcVar4 = *(char **)(param_1 + 0x18);
    if (*pcVar4 != 'E') {
      return 0;
    }
    *(char **)(param_1 + 0x18) = pcVar4 + 1;
    if (pcVar4[1] == 's') {
      *(char **)(param_1 + 0x18) = pcVar4 + 2;
      iVar1 = FUN_00425328(param_1);
      if (iVar1 == 0) {
        return 0;
      }
      piVar6 = (int *)FUN_00424680(param_1,&LAB_0047bc78,0xe);
    }
    else if (pcVar4[1] == 'd') {
      *(char **)(param_1 + 0x18) = pcVar4 + 2;
      iVar1 = FUN_0042529c(param_1);
      if (iVar1 < 0) {
        return 0;
      }
      piVar11 = (int *)FUN_00429114(param_1);
      if ((((piVar11 != (int *)0x0) && (*piVar11 != 0x45)) && (*piVar11 != 0x47)) &&
         (iVar2 = FUN_00425328(param_1), iVar2 == 0)) {
        return 0;
      }
      iVar2 = *(int *)(param_1 + 0x28);
      piVar6 = (int *)0x0;
      if (iVar2 < *(int *)(param_1 + 0x2c)) {
                    /* try { // try from 00429620 to 00529623 has its CatchHandler @ 004296a4 */
        *(int *)(param_1 + 0x28) = iVar2 + 1;
                    /* try { // try from 00429628 to 00529657 has its CatchHandler @ 0042950c */
        piVar6 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18);
        if (piVar6 != (int *)0x0) {
          *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18) = 0x46;
          piVar6[4] = iVar1;
          *(int **)(piVar6 + 2) = piVar11;
        }
      }
    }
    else {
      piVar6 = (int *)FUN_00429114(param_1);
      if (((piVar6 != (int *)0x0) && (*piVar6 != 0x45)) &&
         ((*piVar6 != 0x47 && (iVar1 = FUN_00425328(param_1), iVar1 == 0)))) {
        return 0;
      }
    }
    lVar3 = FUN_004245e0(param_1,2,uVar8,piVar6);
    return lVar3;
  }
  return lVar3;
}


==================================================================

### FUNC 004296c0 (1732 bytes) name=FUN_004296c0

uint * FUN_004296c0(long param_1,int param_2)

{
  uint *puVar1;
  char cVar2;
  byte bVar3;
  int iVar4;
  uint uVar5;
  uint *puVar6;
  long lVar7;
  int *piVar8;
  undefined8 uVar9;
  char *pcVar10;
  long lVar11;
  uint *puVar12;
  ulong uVar13;
  char *pcVar14;
  
                    /* try { // try from 004296c8 to 005296cb has its CatchHandler @ 0042950c */
  pcVar10 = *(char **)(param_1 + 0x18);
                    /* catch() { ... } // from try @ 00429588 with catch @ 004296cc */
                    /* try { // try from 004296dc to 005296df has its CatchHandler @ 0042950c */
                    /* catch() { ... } // from try @ 004296f4 with catch @ 004296e0
                       catch() { ... } // from try @ 0042975c with catch @ 004296e0
                       catch() { ... } // from try @ 00429800 with catch @ 004296e0
                       catch() { ... } // from try @ 00429870 with catch @ 004296e0
                       catch() { ... } // from try @ 0042988c with catch @ 004296e0
                       catch() { ... } // from try @ 004298a0 with catch @ 004296e0
                       catch() { ... } // from try @ 004298b4 with catch @ 004296e0 */
  if ((*pcVar10 != 'T') && (*pcVar10 != 'G')) {
                    /* try { // try from 004296f4 to 0052971b has its CatchHandler @ 004296e0 */
    puVar6 = (uint *)FUN_00429114();
    if ((puVar6 != (uint *)0x0) && ((param_2 != 0 && ((*(uint *)(param_1 + 0x10) & 1) == 0)))) {
      for (; *puVar6 - 0x1c < 5; puVar6 = *(uint **)(puVar6 + 2)) {
      }
      if (*puVar6 == 2) {
        piVar8 = *(int **)(puVar6 + 4);
        iVar4 = *piVar8;
        while (iVar4 - 0x1cU < 5) {
          piVar8 = *(int **)(piVar8 + 2);
          iVar4 = *piVar8;
        }
        *(int **)(puVar6 + 4) = piVar8;
      }
      return puVar6;
    }
    cVar2 = **(char **)(param_1 + 0x18);
    if (cVar2 == 'E' || cVar2 == '\0') {
      return puVar6;
    }
    puVar12 = puVar6;
    if (puVar6 == (uint *)0x0) {
      return (uint *)0x0;
    }
    do {
      uVar5 = *puVar12;
      if (uVar5 == 4) {
        puVar12 = *(uint **)(puVar12 + 2);
        goto joined_r0x00429808;
      }
    } while (((3 < uVar5) && (uVar5 - 0x1c < 5)) &&
            (puVar1 = puVar12 + 2, puVar12 = *(uint **)puVar1, *(uint **)puVar1 != (uint *)0x0
                    /* try { // try from 00429754 to 00529757 has its CatchHandler @ 004298a4 */));
LAB_0042975c:
                    /* try { // try from 0042975c to 005297bf has its CatchHandler @ 004296e0 */
    if (cVar2 == 'J') goto LAB_00429cac;
    lVar11 = 0;
    goto LAB_0042984c;
  }
  iVar4 = *(int *)(param_1 + 0x50);
  *(int *)(param_1 + 0x50) = iVar4 + 0x14;
  if (*pcVar10 == 'T') {
    *(char **)(param_1 + 0x18) = pcVar10 + 1;
    if (pcVar10[1] == '\0') {
      return (uint *)0x0;
    }
    *(char **)(param_1 + 0x18) = pcVar10 + 2;
    switch(pcVar10[1]) {
    case 'C':
      lVar11 = FUN_004271e4(param_1);
                    /* try { // try from 00429bd8 to 00529ccf has its CatchHandler @ 00429a98 */
      lVar7 = FUN_00424c94(param_1 + 0x18);
      if (lVar7 < 0) {
        return (uint *)0x0;
      }
      if (**(char **)(param_1 + 0x18) != '_') {
        return (uint *)0x0;
      }
      *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 0xb;
      *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + 5;
      break;
    default:
      return (uint *)0x0;
    case 'F':
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 0xe;
      lVar11 = 0;
      break;
    case 'H':
      puVar6 = (uint *)FUN_00429114(param_1);
      uVar9 = 0x14;
      lVar11 = 0;
      break;
    case 'I':
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 0xc;
      lVar11 = 0;
      break;
    case 'J':
      puVar6 = (uint *)FUN_004271e4(param_1);
                    /* try { // try from 00429b64 to 00529b67 has its CatchHandler @ 00429f80 */
      uVar9 = 0x12;
      lVar11 = 0;
      break;
    case 'S':
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 0xd;
      lVar11 = 0;
      break;
    case 'T':
                    /* try { // try from 00429b1c to 00529b57 has its CatchHandler @ 00429a98 */
      *(int *)(param_1 + 0x50) = iVar4 + 10;
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 10;
      lVar11 = 0;
      break;
    case 'V':
      *(int *)(param_1 + 0x50) = iVar4 + 0xf;
      puVar6 = (uint *)FUN_004271e4(param_1);
      uVar9 = 9;
      lVar11 = 0;
                    /* try { // try from 00429b14 to 00529b17 has its CatchHandler @ 00429fcc */
      break;
    case 'W':
      puVar6 = (uint *)FUN_00429114(param_1);
      uVar9 = 0x15;
      lVar11 = 0;
      break;
    case 'c':
      iVar4 = FUN_004254b8(param_1,0);
      if (iVar4 == 0) {
        return (uint *)0x0;
      }
      iVar4 = FUN_004254b8(param_1,0);
      if (iVar4 == 0) {
        return (uint *)0x0;
      }
      puVar6 = (uint *)FUN_004296c0(param_1,0);
      uVar9 = 0x11;
      lVar11 = 0;
      break;
    case 'h':
      iVar4 = FUN_004254b8(param_1,0x68);
      if (iVar4 == 0) {
        return (uint *)0x0;
      }
      puVar6 = (uint *)FUN_004296c0(param_1,0);
      uVar9 = 0xf;
      lVar11 = 0;
      break;
    case 'v':
      iVar4 = FUN_004254b8(param_1,0x76);
      if (iVar4 == 0) {
        return (uint *)0x0;
      }
      puVar6 = (uint *)FUN_004296c0(param_1,0);
      uVar9 = 0x10;
      lVar11 = 0;
    }
    goto LAB_00429880;
  }
  if (*pcVar10 != 'G') {
    return (uint *)0x0;
  }
  *(char **)(param_1 + 0x18) = pcVar10 + 1;
                    /* try { // try from 004298a0 to 005298a3 has its CatchHandler @ 004296e0 */
  if (pcVar10[1] == '\0') {
    return (uint *)0x0;
  }
                    /* catch() { ... } // from try @ 00429754 with catch @ 004298a4 */
  *(char **)(param_1 + 0x18) = pcVar10 + 2;
                    /* try { // try from 004298b4 to 005298b7 has its CatchHandler @ 004296e0 */
                    /* catch() { ... } // from try @ 004298c8 with catch @ 004298b8
                       catch() { ... } // from try @ 0042992c with catch @ 004298b8
                       catch() { ... } // from try @ 00429954 with catch @ 004298b8 */
                    /* try { // try from 004298c8 to 005298eb has its CatchHandler @ 004298b8 */
  switch(pcVar10[1]) {
  case 'A':
                    /* try { // try from 00429a6c to 00529a6f has its CatchHandler @ 004299f8 */
    puVar6 = (uint *)FUN_004296c0(param_1,0);
    uVar9 = 0x17;
    lVar11 = 0;
                    /* catch() { ... } // from try @ 00429a64 with catch @ 00429a84 */
    break;
  default:
                    /* try { // try from 004297f8 to 005297fb has its CatchHandler @ 0042987c */
                    /* try { // try from 00429800 to 0052982f has its CatchHandler @ 004296e0 */
    return (uint *)0x0;
  case 'R':
    puVar6 = (uint *)FUN_00429114(param_1);
                    /* try { // try from 00429a08 to 00529a2b has its CatchHandler @ 004299f8 */
    iVar4 = *(int *)(param_1 + 0x28);
    if (iVar4 < *(int *)(param_1 + 0x2c)) {
      *(int *)(param_1 + 0x28) = iVar4 + 1;
      lVar11 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
      if (lVar11 == 0) goto LAB_00429d68;
      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 0x41;
      uVar9 = FUN_00424c94(param_1 + 0x18);
      *(undefined8 *)(lVar11 + 8) = uVar9;
    }
    else {
LAB_00429d68:
      lVar11 = 0;
                    /* try { // try from 00429d6c to 00529dc7 has its CatchHandler @ 00429fa8 */
    }
    uVar9 = 0x16;
                    /* try { // try from 00429a64 to 00529a67 has its CatchHandler @ 00429a84 */
    break;
  case 'T':
                    /* try { // try from 00429a94 to 00529a97 has its CatchHandler @ 004299f8 */
                    /* catch() { ... } // from try @ 00429ab4 with catch @ 00429a98
                       catch() { ... } // from try @ 00429b1c with catch @ 00429a98
                       catch() { ... } // from try @ 00429bd8 with catch @ 00429a98
                       catch() { ... } // from try @ 00429df0 with catch @ 00429a98
                       catch() { ... } // from try @ 00429fa4 with catch @ 00429a98 */
    if ((pcVar10[2] == '\0') || (*(char **)(param_1 + 0x18) = pcVar10 + 3, pcVar10[2] != 'n')) {
      puVar6 = (uint *)FUN_004296c0(param_1,0);
      uVar9 = 0x48;
      lVar11 = 0;
    }
    else {
      puVar6 = (uint *)FUN_004296c0(param_1,0);
                    /* try { // try from 00429ab4 to 00529af7 has its CatchHandler @ 00429a98 */
      uVar9 = 0x49;
      lVar11 = 0;
    }
    break;
  case 'V':
                    /* catch() { ... } // from try @ 004299c4 with catch @ 004299e4 */
    puVar6 = (uint *)FUN_00429114(param_1);
    uVar9 = 0x13;
                    /* try { // try from 004299f4 to 005299f7 has its CatchHandler @ 00429958 */
                    /* catch() { ... } // from try @ 00429a08 with catch @ 004299f8
                       catch() { ... } // from try @ 00429a6c with catch @ 004299f8
                       catch() { ... } // from try @ 00429a94 with catch @ 004299f8 */
    lVar11 = 0;
    break;
  case 'r':
    lVar11 = FUN_00424c94(param_1 + 0x18);
    if (lVar11 < 2) {
      return (uint *)0x0;
    }
                    /* try { // try from 00429924 to 00529927 has its CatchHandler @ 00429944 */
    pcVar10 = *(char **)(param_1 + 0x18);
                    /* try { // try from 0042992c to 0052992f has its CatchHandler @ 004298b8 */
    if (*pcVar10 == '\0') {
      return (uint *)0x0;
    }
    pcVar14 = pcVar10 + 1;
    *(char **)(param_1 + 0x18) = pcVar14;
    if (*pcVar10 != '_') {
      return (uint *)0x0;
    }
                    /* catch() { ... } // from try @ 00429924 with catch @ 00429944 */
    lVar11 = lVar11 + -1;
    puVar12 = (uint *)0x0;
    do {
                    /* try { // try from 00429954 to 00529957 has its CatchHandler @ 004298b8 */
      if (*pcVar14 == '\0') {
        return (uint *)0x0;
      }
                    /* catch() { ... } // from try @ 00429968 with catch @ 00429958
                       catch() { ... } // from try @ 004299cc with catch @ 00429958
                       catch() { ... } // from try @ 004299f4 with catch @ 00429958 */
      uVar13 = 0;
      if (*pcVar14 == '$') {
        bVar3 = pcVar14[1];
        uVar5 = (uint)bVar3;
        if (bVar3 == 0x53) {
          uVar5 = 0x2f;
        }
        else if (bVar3 == 0x5f) {
          uVar5 = 0x2e;
        }
        else {
                    /* try { // try from 00429cd8 to 00529d13 has its CatchHandler @ 00429fa8 */
          if (bVar3 != 0x24) {
            return (uint *)0x0;
          }
        }
        iVar4 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar4) {
LAB_00429d70:
          *(long *)(param_1 + 0x18) = *(long *)(param_1 + 0x18) + 2;
          return (uint *)0x0;
        }
        *(int *)(param_1 + 0x28) = iVar4 + 1;
        puVar6 = (uint *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18);
        if (puVar6 == (uint *)0x0) goto LAB_00429d70;
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 0x40;
        lVar7 = -2;
        puVar6[2] = uVar5;
        pcVar14 = (char *)(*(long *)(param_1 + 0x18) + 2);
        *(char **)(param_1 + 0x18) = pcVar14;
      }
      else {
        do {
          uVar13 = uVar13 + 1;
                    /* try { // try from 00429968 to 0052998b has its CatchHandler @ 00429958 */
          if ((lVar11 <= (long)uVar13) || (pcVar14[uVar13] == '\0')) break;
        } while (pcVar14[uVar13] != '$');
        lVar7 = -uVar13;
        puVar6 = (uint *)FUN_00424680(param_1,pcVar14,uVar13 & 0xffffffff);
        pcVar14 = (char *)(*(long *)(param_1 + 0x18) + uVar13);
        *(char **)(param_1 + 0x18) = pcVar14;
        if (puVar6 == (uint *)0x0) {
          return (uint *)0x0;
        }
      }
      lVar11 = lVar11 + lVar7;
                    /* try { // try from 004299c4 to 005299c7 has its CatchHandler @ 004299e4 */
      if ((puVar12 != (uint *)0x0) &&
         (puVar6 = (uint *)FUN_004245e0(param_1,0x3f,puVar12), puVar6 == (uint *)0x0)) {
        return (uint *)0x0;
      }
                    /* try { // try from 004299cc to 005299cf has its CatchHandler @ 00429958 */
      puVar12 = puVar6;
    } while (0 < lVar11);
    uVar9 = 0x3e;
    lVar11 = 0;
  }
  goto LAB_00429880;
joined_r0x00429808:
  if (puVar12 == (uint *)0x0) goto LAB_00429834;
  uVar5 = *puVar12;
  if (8 < uVar5) {
    if (uVar5 == 0x34) goto LAB_0042975c;
    goto LAB_00429834;
  }
  if (6 < uVar5) goto LAB_0042975c;
  if (1 < uVar5 - 1) goto LAB_00429834;
  puVar12 = *(uint **)(puVar12 + 4);
  goto joined_r0x00429808;
LAB_00429834:
  if (cVar2 == 'J') {
LAB_00429cac:
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  lVar11 = FUN_004271e4(param_1);
  if (lVar11 == 0) {
LAB_00429d60:
    lVar11 = 0;
                    /* try { // try from 00429d64 to 00529d67 has its CatchHandler @ 00429fdc */
  }
  else {
LAB_0042984c:
    lVar7 = FUN_0042888c(param_1);
    if (lVar7 == 0) goto LAB_00429d60;
                    /* try { // try from 00429868 to 0052986b has its CatchHandler @ 00429890 */
    lVar11 = FUN_004245e0(param_1,0x29,lVar11,lVar7);
                    /* try { // try from 00429870 to 00529873 has its CatchHandler @ 004296e0 */
  }
  uVar9 = 3;
                    /* catch() { ... } // from try @ 004297f8 with catch @ 0042987c */
LAB_00429880:
                    /* try { // try from 0042988c to 0052988f has its CatchHandler @ 004296e0 */
                    /* catch() { ... } // from try @ 00429868 with catch @ 00429890 */
  puVar6 = (uint *)FUN_004245e0(param_1,uVar9,puVar6,lVar11);
  return puVar6;
}


==================================================================

### FUNC 00429d84 (376 bytes) name=FUN_00429d84

undefined8 FUN_00429d84(long param_1)

{
  int *piVar1;
  undefined8 uVar2;
  char cVar3;
  char *pcVar4;
  int iVar5;
  char *pcVar6;
  undefined8 uVar7;
  
  pcVar6 = *(char **)(param_1 + 0x18);
  if (*pcVar6 != 'L') {
    return 0;
  }
  pcVar4 = pcVar6 + 1;
  *(char **)(param_1 + 0x18) = pcVar4;
  if (pcVar6[1] == 'Z') {
    cVar3 = 'Z';
  }
  else {
    if (pcVar6[1] != '_') {
      piVar1 = (int *)FUN_004271e4();
      if (piVar1 == (int *)0x0) {
        return 0;
      }
                    /* try { // try from 00429df0 to 00529f43 has its CatchHandler @ 00429a98 */
      if ((*piVar1 == 0x27) && (*(int *)(*(long *)(piVar1 + 2) + 0x1c) != 0)) {
        *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) - *(int *)(*(long *)(piVar1 + 2) + 8);
      }
      pcVar4 = *(char **)(param_1 + 0x18);
      uVar7 = 0x3c;
      cVar3 = *pcVar4;
      pcVar6 = pcVar4;
      if (cVar3 == 'n') {
        pcVar6 = pcVar4 + 1;
        *(char **)(param_1 + 0x18) = pcVar6;
        uVar7 = 0x3d;
        cVar3 = pcVar4[1];
      }
      pcVar4 = pcVar6;
      if (cVar3 == 'E') {
        iVar5 = 0;
      }
      else {
        do {
          if (cVar3 == '\0') {
            return 0;
          }
          pcVar4 = pcVar4 + 1;
          *(char **)(param_1 + 0x18) = pcVar4;
          cVar3 = *pcVar4;
        } while (cVar3 != 'E');
        iVar5 = (int)pcVar4 - (int)pcVar6;
      }
      uVar2 = FUN_00424680(param_1,pcVar6,iVar5);
      uVar7 = FUN_004245e0(param_1,uVar7,piVar1,uVar2);
      pcVar4 = *(char **)(param_1 + 0x18);
      cVar3 = *pcVar4;
      goto LAB_00429e5c;
    }
    pcVar4 = pcVar6 + 2;
    *(char **)(param_1 + 0x18) = pcVar4;
    cVar3 = pcVar6[2];
  }
  uVar7 = 0;
  if (cVar3 == 'Z') {
    *(char **)(param_1 + 0x18) = pcVar4 + 1;
    uVar7 = FUN_004296c0(param_1,0);
    pcVar4 = *(char **)(param_1 + 0x18);
    cVar3 = *pcVar4;
  }
LAB_00429e5c:
  if (cVar3 != 'E') {
    return 0;
  }
  *(char **)(param_1 + 0x18) = pcVar4 + 1;
  return uVar7;
}


==================================================================

### FUNC 00429efc (1640 bytes) name=FUN_00429efc

int * FUN_00429efc(long param_1)

{
  char cVar1;
  int iVar2;
  int *piVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  char *pcVar7;
  long lVar8;
  undefined8 *puVar9;
  
  pcVar7 = *(char **)(param_1 + 0x18);
  cVar1 = *pcVar7;
  if (cVar1 == 'L') {
    piVar3 = (int *)FUN_00429d84();
    return piVar3;
  }
  if (cVar1 == 'T') {
    piVar3 = (int *)FUN_004253cc();
    return piVar3;
  }
  if (cVar1 == 's') {
    if (pcVar7[1] == 'r') {
      *(char **)(param_1 + 0x18) = pcVar7 + 2;
      piVar3 = (int *)FUN_004271e4();
      uVar4 = FUN_00428b90(param_1);
      if (**(char **)(param_1 + 0x18) == 'I') {
        uVar6 = FUN_004255a4(param_1);
        uVar4 = FUN_004245e0(param_1,4,uVar4,uVar6);
      }
      uVar6 = 1;
      goto LAB_00429fec;
    }
    if (pcVar7[1] == 'p') {
      *(char **)(param_1 + 0x18) = pcVar7 + 2;
      piVar3 = (int *)FUN_00429efc();
      uVar6 = 0x4a;
      uVar4 = 0;
      goto LAB_0042a128;
    }
  }
  else if (cVar1 == 'f') {
                    /* try { // try from 0042a000 to 0052a033 has its CatchHandler @ 00429fec */
    if (pcVar7[1] == 'p') {
      *(char **)(param_1 + 0x18) = pcVar7 + 2;
      if (pcVar7[2] == 'T') {
        lVar8 = 0;
        *(char **)(param_1 + 0x18) = pcVar7 + 3;
      }
      else {
        iVar2 = FUN_0042529c();
        lVar8 = (long)(iVar2 + 1);
        if (iVar2 + 1 == 0) {
          return (int *)0x0;
        }
      }
      iVar2 = *(int *)(param_1 + 0x28);
      if (*(int *)(param_1 + 0x2c) <= iVar2) {
        return (int *)0x0;
      }
                    /* try { // try from 0042a050 to 0052a053 has its CatchHandler @ 0042a364 */
      *(int *)(param_1 + 0x28) = iVar2 + 1;
      piVar3 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18);
                    /* try { // try from 0042a058 to 0052a08f has its CatchHandler @ 00429fec */
      if (piVar3 == (int *)0x0) {
        return (int *)0x0;
      }
      *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar2 * 0x18) = 6;
      *(long *)(piVar3 + 2) = lVar8;
      return piVar3;
    }
  }
  else {
    if ((byte)(cVar1 - 0x30U) < 10) {
LAB_00429f48:
      piVar3 = (int *)FUN_00428b90(param_1);
      if (piVar3 == (int *)0x0) {
        return (int *)0x0;
      }
      if (**(char **)(param_1 + 0x18) != 'I') {
        return piVar3;
      }
      uVar4 = FUN_004255a4(param_1);
      uVar6 = 4;
      goto LAB_0042a128;
    }
    if (cVar1 == 'o') {
      if (pcVar7[1] == 'n') {
        *(char **)(param_1 + 0x18) = pcVar7 + 2;
        goto LAB_00429f48;
      }
    }
    else {
                    /* catch() { ... } // from try @ 00429b64 with catch @ 00429f80 */
      if (((cVar1 == 't') || (cVar1 == 'i')) && (pcVar7[1] == 'l')) {
        piVar3 = (int *)0x0;
        if (cVar1 == 't') {
          piVar3 = (int *)FUN_004271e4(param_1);
          pcVar7 = *(char **)(param_1 + 0x18);
        }
        *(char **)(param_1 + 0x18) = pcVar7 + 2;
        uVar4 = FUN_00426a90(param_1,0x45);
        uVar6 = 0x30;
        goto LAB_0042a128;
      }
    }
  }
  piVar3 = (int *)FUN_0042899c(param_1);
                    /* try { // try from 00429fa4 to 00529fa7 has its CatchHandler @ 00429a98 */
  if (piVar3 == (int *)0x0) {
    return (int *)0x0;
  }
                    /* catch() { ... } // from try @ 00429cd8 with catch @ 00429fa8
                       catch() { ... } // from try @ 00429d6c with catch @ 00429fa8 */
  iVar2 = *piVar3;
  if (iVar2 == 0x31) {
    puVar9 = *(undefined8 **)(piVar3 + 2);
                    /* try { // try from 0042a0ac to 0052a0af has its CatchHandler @ 0042a33c */
    pcVar7 = (char *)*puVar9;
    *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar9 + 2) + -2;
    iVar2 = strcmp(pcVar7,"st");
    if (iVar2 != 0) {
                    /* try { // try from 0042a0d8 to 0052a327 has its CatchHandler @ 00429fec */
      switch(*(undefined4 *)((long)puVar9 + 0x14)) {
      case 0:
        goto switchD_0042a190_caseD_0;
      case 1:
        goto switchD_0042a214_caseD_1;
      case 2:
        goto switchD_0042a214_caseD_2;
      case 3:
        goto switchD_0042a214_caseD_3;
      default:
        goto switchD_0042a190_default;
      }
    }
    uVar4 = FUN_004271e4(param_1);
  }
  else {
    if (iVar2 == 0x32) {
      switch(piVar3[2]) {
      case 0:
switchD_0042a190_caseD_0:
        uVar6 = 0x35;
        uVar4 = 0;
LAB_0042a128:
        piVar3 = (int *)FUN_004245e0(param_1,uVar6,piVar3,uVar4);
        return piVar3;
      case 1:
        goto switchD_0042a190_caseD_1;
      case 2:
        pcVar7 = (char *)0x0;
switchD_0042a214_caseD_2:
        if ((((char *)**(undefined8 **)(piVar3 + 2))[1] == 'c') &&
           ((cVar1 = *(char *)**(undefined8 **)(piVar3 + 2), (byte)(cVar1 + 0x8eU) < 2 ||
            ((byte)(cVar1 + 0x9dU) < 2)))) {
          uVar4 = FUN_004271e4(param_1);
        }
        else {
          uVar4 = FUN_00429efc(param_1);
        }
        iVar2 = strcmp(pcVar7,"cl");
        if (iVar2 == 0) {
          uVar6 = FUN_00426a90(param_1,0x45);
                    /* try { // try from 0042a460 to 0052a6c7 has its CatchHandler @ 0042a374 */
        }
        else {
          iVar2 = strcmp(pcVar7,"dt");
                    /* catch() { ... } // from try @ 0042a0ac with catch @ 0042a33c */
          if ((iVar2 == 0) || (iVar2 = strcmp(pcVar7,"pt"), iVar2 == 0)) {
            uVar6 = FUN_00428b90(param_1);
                    /* try { // try from 0042a360 to 0052a363 has its CatchHandler @ 00429fec */
                    /* catch() { ... } // from try @ 0042a050 with catch @ 0042a364 */
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar5 = FUN_004255a4(param_1);
              uVar6 = FUN_004245e0(param_1,4,uVar6,uVar5);
            }
          }
          else {
            uVar6 = FUN_00429efc(param_1);
          }
        }
                    /* catch() { ... } // from try @ 0042a388 with catch @ 0042a374
                       catch() { ... } // from try @ 0042a3e0 with catch @ 0042a374
                       catch() { ... } // from try @ 0042a460 with catch @ 0042a374
                       catch() { ... } // from try @ 0042a6fc with catch @ 0042a374 */
        uVar4 = FUN_004245e0(param_1,0x38,uVar4,uVar6);
        uVar6 = 0x37;
                    /* try { // try from 0042a388 to 0052a3bb has its CatchHandler @ 0042a374 */
        goto LAB_00429fec;
      case 3:
        pcVar7 = (char *)0x0;
switchD_0042a214_caseD_3:
        iVar2 = strcmp(pcVar7,"qu");
        if (iVar2 == 0) {
          uVar4 = FUN_00429efc(param_1);
                    /* try { // try from 0042a434 to 0052a437 has its CatchHandler @ 0042a6d8 */
          uVar6 = FUN_00429efc(param_1);
          uVar5 = FUN_00429efc(param_1);
        }
        else {
          if (*pcVar7 != 'n') {
            return (int *)0x0;
          }
          if ((pcVar7[1] != 'a') && (pcVar7[1] != 'w')) {
            return (int *)0x0;
          }
          uVar4 = FUN_00426a90(param_1,0x5f);
          uVar6 = FUN_004271e4(param_1);
          pcVar7 = *(char **)(param_1 + 0x18);
          cVar1 = *pcVar7;
          if (cVar1 == 'E') {
            uVar5 = 0;
            *(char **)(param_1 + 0x18) = pcVar7 + 1;
          }
          else if (cVar1 == 'p') {
            if (pcVar7[1] != 'i') {
              return (int *)0x0;
            }
            *(char **)(param_1 + 0x18) = pcVar7 + 2;
            uVar5 = FUN_00426a90(param_1,0x45);
          }
          else {
            if ((cVar1 != 'i') || (pcVar7[1] != 'l')) {
switchD_0042a190_default:
              return (int *)0x0;
            }
            uVar5 = FUN_00429efc(param_1);
          }
        }
        uVar6 = FUN_004245e0(param_1,0x3b,uVar6,uVar5);
        uVar4 = FUN_004245e0(param_1,0x3a,uVar4,uVar6);
        uVar6 = 0x39;
        goto LAB_00429fec;
      default:
        goto switchD_0042a190_default;
      }
    }
    if (iVar2 != 0x33) {
      return (int *)0x0;
    }
                    /* catch() { ... } // from try @ 00429b14 with catch @ 00429fcc */
    if (**(char **)(param_1 + 0x18) == '_') {
      *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
      uVar4 = FUN_00426a90(param_1,0x45);
      goto LAB_00429fe0;
    }
switchD_0042a190_caseD_1:
    uVar4 = FUN_00429efc(param_1);
                    /* catch() { ... } // from try @ 00429d64 with catch @ 00429fdc */
  }
LAB_00429fe0:
  uVar6 = 0x36;
LAB_00429fec:
                    /* catch() { ... } // from try @ 0042a000 with catch @ 00429fec
                       catch() { ... } // from try @ 0042a058 with catch @ 00429fec
                       catch() { ... } // from try @ 0042a0d8 with catch @ 00429fec
                       catch() { ... } // from try @ 0042a360 with catch @ 00429fec */
  piVar3 = (int *)FUN_004245e0(param_1,uVar6,piVar3,uVar4);
  return piVar3;
switchD_0042a214_caseD_1:
  cVar1 = *pcVar7;
  if (((cVar1 == 'm') || (cVar1 == 'p')) && (pcVar7[1] == cVar1)) {
                    /* try { // try from 0042a3d8 to 0052a3db has its CatchHandler @ 0042a700 */
    if (**(char **)(param_1 + 0x18) != '_') {
                    /* try { // try from 0042a3e0 to 0052a417 has its CatchHandler @ 0042a374 */
      uVar4 = FUN_00429efc(param_1);
      uVar4 = FUN_004245e0(param_1,0x38,uVar4,uVar4);
      goto LAB_00429fe0;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_0042a190_caseD_1;
}


==================================================================

### FUNC 0042a564 (304 bytes) name=FUN_0042a564

undefined8 FUN_0042a564(long param_1)

{
  char *pcVar1;
  char cVar2;
  int iVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  char *pcVar7;
  undefined8 uVar8;
  
  pcVar7 = *(char **)(param_1 + 0x18);
  if (*pcVar7 == 'F') {
    pcVar1 = pcVar7 + 1;
    *(char **)(param_1 + 0x18) = pcVar1;
    cVar2 = pcVar7[1];
    if (cVar2 == 'Y') {
      pcVar1 = pcVar7 + 2;
      *(char **)(param_1 + 0x18) = pcVar1;
      cVar2 = pcVar7[2];
    }
    if (cVar2 == 'J') {
      *(char **)(param_1 + 0x18) = pcVar1 + 1;
    }
    lVar4 = FUN_004271e4();
    if ((lVar4 == 0) || (lVar5 = FUN_0042888c(param_1), lVar5 == 0)) {
      uVar6 = 0;
    }
    else {
      uVar6 = FUN_004245e0(param_1,0x29,lVar4,lVar5);
    }
    pcVar7 = *(char **)(param_1 + 0x18);
    cVar2 = *pcVar7;
    if (cVar2 == 'O') {
      uVar8 = 0x20;
      iVar3 = *(int *)(param_1 + 0x50) + 3;
    }
    else {
      if (cVar2 != 'R') {
        if (cVar2 != 'E') {
          return 0;
        }
        goto LAB_0042a604;
      }
      uVar8 = 0x1f;
      iVar3 = *(int *)(param_1 + 0x50) + 2;
    }
    *(int *)(param_1 + 0x50) = iVar3;
    *(char **)(param_1 + 0x18) = pcVar7 + 1;
    uVar6 = FUN_004245e0(param_1,uVar8,uVar6,0);
    pcVar7 = *(char **)(param_1 + 0x18);
    if (*pcVar7 == 'E') {
LAB_0042a604:
      *(char **)(param_1 + 0x18) = pcVar7 + 1;
      return uVar6;
    }
  }
  return 0;
}


==================================================================

### FUNC 0042a694 (10036 bytes) name=FUN_0042a694

undefined8 FUN_0042a694(long param_1)

{
  undefined4 uVar1;
  byte bVar2;
  bool bVar3;
  int iVar4;
  int iVar5;
  ulong uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long lVar9;
  int *piVar10;
  char *pcVar11;
  int *piVar12;
  long lVar13;
  char *pcVar14;
  int *piVar15;
  undefined8 uVar16;
  char cVar17;
  byte *pbVar18;
  byte *pbVar19;
  ulong uVar20;
  undefined8 *puVar21;
  
  pbVar19 = *(byte **)(param_1 + 0x18);
  if (*pbVar19 != 0x5f) {
    iVar5 = *(int *)(param_1 + 0x28);
    if (*(int *)(param_1 + 0x2c) <= iVar5) {
      return 0;
    }
                    /* catch() { ... } // from try @ 0042a434 with catch @ 0042a6d8 */
    *(int *)(param_1 + 0x28) = iVar5 + 1;
    lVar9 = *(long *)(param_1 + 0x20) + (long)iVar5 * 0x18;
    if (lVar9 == 0) {
      return 0;
    }
    *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 0x18) = 0x41;
                    /* try { // try from 0042a6fc to 0052a6ff has its CatchHandler @ 0042a374 */
    bVar2 = *pbVar19;
                    /* catch() { ... } // from try @ 0042a3d8 with catch @ 0042a700 */
    bVar3 = bVar2 == 0x6e;
    if (bVar3) {
      pbVar18 = pbVar19 + 1;
      *(byte **)(param_1 + 0x18) = pbVar18;
      uVar20 = 0xffffffffffffffff;
      bVar2 = pbVar19[1];
    }
    else {
      uVar20 = 0;
      pbVar18 = pbVar19;
    }
    uVar6 = 0;
                    /* catch() { ... } // from try @ 0042a744 with catch @ 0042a71c
                       catch() { ... } // from try @ 0042a7b0 with catch @ 0042a71c
                       catch() { ... } // from try @ 0042a918 with catch @ 0042a71c
                       catch() { ... } // from try @ 0042ab4c with catch @ 0042a71c
                       catch() { ... } // from try @ 0042ab78 with catch @ 0042a71c
                       catch() { ... } // from try @ 0042ab8c with catch @ 0042a71c */
    while ((byte)(bVar2 - 0x30) < 10) {
      pbVar18 = pbVar18 + 1;
      *(byte **)(param_1 + 0x18) = pbVar18;
      uVar6 = (uVar6 * 10 + (ulong)bVar2) - 0x30;
      bVar2 = *pbVar18;
                    /* try { // try from 0042a744 to 0052a767 has its CatchHandler @ 0042a71c */
    }
    *(ulong *)(lVar9 + 8) = (ulong)bVar3 + (uVar6 ^ uVar20);
    goto LAB_0042a760;
  }
  pbVar18 = pbVar19 + 1;
  uVar1 = *(undefined4 *)(param_1 + 0x54);
  *(byte **)(param_1 + 0x18) = pbVar18;
  *(undefined4 *)(param_1 + 0x54) = 1;
  bVar2 = pbVar19[1];
  if (bVar2 == 0x4c) {
    lVar9 = FUN_00429d84();
  }
  else if (bVar2 == 0x54) {
    lVar9 = FUN_004253cc();
  }
  else if (bVar2 == 0x73) {
    if (pbVar19[2] == 0x72) {
      *(byte **)(param_1 + 0x18) = pbVar19 + 3;
      uVar7 = FUN_004271e4();
      uVar8 = FUN_00428b90(param_1);
      if (**(char **)(param_1 + 0x18) == 'I') {
        uVar16 = FUN_004255a4(param_1);
                    /* try { // try from 0042b1a4 to 0052b313 has its CatchHandler @ 0042afc8 */
        uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
        lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
      }
      else {
        lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
      }
    }
    else {
                    /* try { // try from 0042a8a4 to 0052a8a7 has its CatchHandler @ 0042ab54 */
      if (pbVar19[2] != 0x70) goto LAB_0042a8ac;
      *(byte **)(param_1 + 0x18) = pbVar19 + 3;
      uVar7 = FUN_00429efc();
      lVar9 = FUN_004245e0(param_1,0x4a,uVar7,0);
    }
  }
  else {
    if (bVar2 == 0x66) {
      if (pbVar19[2] == 0x70) {
        *(byte **)(param_1 + 0x18) = pbVar19 + 3;
        if (pbVar19[3] == 0x54) {
          lVar13 = 0;
          *(byte **)(param_1 + 0x18) = pbVar19 + 4;
        }
        else {
          iVar5 = FUN_0042529c();
          if (iVar5 + 1 == 0) goto switchD_0042aaac_default;
          lVar13 = (long)(iVar5 + 1);
        }
        iVar5 = *(int *)(param_1 + 0x28);
        if (iVar5 < *(int *)(param_1 + 0x2c)) {
          *(int *)(param_1 + 0x28) = iVar5 + 1;
          lVar9 = *(long *)(param_1 + 0x20) + (long)iVar5 * 0x18;
          if (lVar9 != 0) {
            *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar5 * 0x18) = 6;
            *(long *)(lVar9 + 8) = lVar13;
            *(undefined4 *)(param_1 + 0x54) = uVar1;
            pbVar18 = *(byte **)(param_1 + 0x18);
            goto LAB_0042a760;
          }
        }
        goto switchD_0042aaac_default;
      }
    }
    else {
      if ((byte)(bVar2 - 0x30) < 10) {
LAB_0042a9f0:
        lVar9 = FUN_00428b90(param_1);
        if (lVar9 == 0) goto switchD_0042aaac_default;
        pbVar18 = *(byte **)(param_1 + 0x18);
        if (*pbVar18 != 0x49) {
          *(undefined4 *)(param_1 + 0x54) = uVar1;
          goto LAB_0042a760;
        }
        uVar7 = FUN_004255a4(param_1);
        lVar9 = FUN_004245e0(param_1,4,lVar9,uVar7);
        goto LAB_0042a86c;
      }
                    /* try { // try from 0042a814 to 0052a827 has its CatchHandler @ 0042ab54 */
      if (bVar2 == 0x6f) {
        if (pbVar19[2] == 0x6e) {
          *(byte **)(param_1 + 0x18) = pbVar19 + 3;
          goto LAB_0042a9f0;
        }
      }
      else {
                    /* try { // try from 0042a830 to 0052a833 has its CatchHandler @ 0042ab90 */
        if (((bVar2 == 0x74) || (bVar2 == 0x69)) && (pbVar19[2] == 0x6c)) {
          uVar7 = 0;
          if (bVar2 == 0x74) {
            uVar7 = FUN_004271e4(param_1);
            pbVar18 = *(byte **)(param_1 + 0x18);
          }
          *(byte **)(param_1 + 0x18) = pbVar18 + 2;
          uVar8 = FUN_00426a90(param_1,0x45);
          lVar9 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
          goto LAB_0042a86c;
        }
      }
    }
LAB_0042a8ac:
    piVar10 = (int *)FUN_0042899c(param_1);
    if (piVar10 == (int *)0x0) goto switchD_0042aaac_default;
    iVar5 = *piVar10;
    if (iVar5 == 0x31) {
      puVar21 = *(undefined8 **)(piVar10 + 2);
                    /* try { // try from 0042ad44 to 0052ad97 has its CatchHandler @ 0042abb8 */
      pcVar11 = (char *)*puVar21;
      *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar21 + 2) + -2;
      iVar4 = strcmp(pcVar11,"st");
      if (iVar4 != 0) {
        switch(*(undefined4 *)((long)puVar21 + 0x14)) {
        case 0:
switchD_0042aaac_caseD_0:
          lVar9 = FUN_004245e0(param_1,0x35,piVar10,0);
          goto LAB_0042a86c;
        case 1:
          cVar17 = *pcVar11;
          if (((cVar17 != 'm') && (cVar17 != 'p')) || (pcVar11[1] != cVar17))
          goto switchD_0042aaac_caseD_1;
          pcVar11 = *(char **)(param_1 + 0x18);
          bVar3 = true;
          cVar17 = *pcVar11;
          if (cVar17 != '_') goto LAB_0042a8f4;
          pcVar11 = pcVar11 + 1;
          *(char **)(param_1 + 0x18) = pcVar11;
          goto LAB_0042ade4;
        case 2:
switchD_0042ad88_caseD_2:
                    /* try { // try from 0042abcc to 0052abeb has its CatchHandler @ 0042abb8 */
          if ((((char *)**(undefined8 **)(piVar10 + 2))[1] == 'c') &&
             ((cVar17 = *(char *)**(undefined8 **)(piVar10 + 2), (byte)(cVar17 + 0x8eU) < 2 ||
              ((byte)(cVar17 + 0x9dU) < 2)))) {
            lVar9 = FUN_004271e4(param_1);
                    /* try { // try from 0042af54 to 0052af57 has its CatchHandler @ 0042abb8 */
          }
          else {
            pcVar14 = *(char **)(param_1 + 0x18);
            cVar17 = *pcVar14;
            if (cVar17 == 'L') {
              lVar9 = FUN_00429d84(param_1);
            }
            else if (cVar17 == 'T') {
              lVar9 = FUN_004253cc(param_1);
                    /* try { // try from 0042ba74 to 0052ba77 has its CatchHandler @ 0042ba4c */
            }
            else if (cVar17 == 's') {
              if (pcVar14[1] == 'r') {
                *(char **)(param_1 + 0x18) = pcVar14 + 2;
                uVar7 = FUN_004271e4(param_1);
                uVar8 = FUN_00428b90(param_1);
                if (**(char **)(param_1 + 0x18) == 'I') {
                  uVar16 = FUN_004255a4(param_1);
                  uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
                  lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
                }
                else {
                  lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
                }
              }
              else {
                if (pcVar14[1] != 'p') goto LAB_0042ac3c;
                *(char **)(param_1 + 0x18) = pcVar14 + 2;
                uVar7 = FUN_00429efc(param_1);
                lVar9 = FUN_004245e0(param_1,0x4a,uVar7,0);
              }
            }
            else {
              if (cVar17 == 'f') {
                    /* try { // try from 0042b410 to 0052b413 has its CatchHandler @ 0042b7a0 */
                if (pcVar14[1] != 'p') goto LAB_0042ac3c;
                    /* try { // try from 0042b418 to 0052b47b has its CatchHandler @ 0042b7d0 */
                *(char **)(param_1 + 0x18) = pcVar14 + 2;
                if (pcVar14[2] == 'T') {
                  iVar5 = 0;
                  *(char **)(param_1 + 0x18) = pcVar14 + 3;
                }
                else {
                  iVar5 = FUN_0042529c(param_1);
                  iVar5 = iVar5 + 1;
                  if (iVar5 == 0) goto switchD_0042c9c0_default;
                }
                iVar4 = *(int *)(param_1 + 0x28);
                if (iVar4 < *(int *)(param_1 + 0x2c)) {
                  *(int *)(param_1 + 0x28) = iVar4 + 1;
                  lVar9 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
                  if (lVar9 != 0) {
                    *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
                    *(long *)(lVar9 + 8) = (long)iVar5;
                  }
                  goto LAB_0042ac9c;
                }
              }
              else if ((byte)(cVar17 - 0x30U) < 10) {
LAB_0042b288:
                lVar9 = FUN_00428b90(param_1);
                if (lVar9 != 0) {
                  if (**(char **)(param_1 + 0x18) == 'I') {
                    uVar7 = FUN_004255a4(param_1);
                    lVar9 = FUN_004245e0(param_1,4,lVar9,uVar7);
                  }
                  goto LAB_0042ac9c;
                }
              }
              else {
                if (cVar17 == 'o') {
                  if (pcVar14[1] == 'n') {
                    *(char **)(param_1 + 0x18) = pcVar14 + 2;
                    goto LAB_0042b288;
                  }
                }
                else {
                    /* try { // try from 0042ac30 to 0052ac33 has its CatchHandler @ 0042af9c */
                  if (((cVar17 == 't') || (cVar17 == 'i')) && (pcVar14[1] == 'l')) {
                    uVar7 = 0;
                    if (cVar17 == 't') {
                      uVar7 = FUN_004271e4(param_1);
                      pcVar14 = *(char **)(param_1 + 0x18);
                    }
                    /* try { // try from 0042ba98 to 0052ba9b has its CatchHandler @ 0042bb2c */
                    *(char **)(param_1 + 0x18) = pcVar14 + 2;
                    uVar8 = FUN_00426a90(param_1,0x45);
                    lVar9 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
                    goto LAB_0042ac9c;
                  }
                }
LAB_0042ac3c:
                piVar12 = (int *)FUN_0042899c(param_1);
                if (piVar12 != (int *)0x0) {
                  iVar5 = *piVar12;
                    /* try { // try from 0042ac50 to 0052ac53 has its CatchHandler @ 0042afa4 */
                  if (iVar5 == 0x31) {
                    puVar21 = *(undefined8 **)(piVar12 + 2);
                    pcVar14 = (char *)*puVar21;
                    /* catch() { ... } // from try @ 0042b968 with catch @ 0042ba24 */
                    *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar21 + 2) + -2
                    ;
                    iVar5 = strcmp(pcVar14,"st");
                    if (iVar5 == 0) {
                      uVar7 = FUN_004271e4(param_1);
LAB_0042c930:
                      lVar9 = FUN_004245e0(param_1,0x36,piVar12,uVar7);
                      goto LAB_0042ac9c;
                    }
                    switch(*(undefined4 *)((long)puVar21 + 0x14)) {
                    case 0:
                      goto switchD_0042c9c0_caseD_0;
                    case 1:
                      cVar17 = *pcVar14;
                    /* try { // try from 0042cc70 to 0052cc73 has its CatchHandler @ 0042cfac */
                      if (((cVar17 == 'm') || (cVar17 == 'p')) && (pcVar14[1] == cVar17)) {
                        if (**(char **)(param_1 + 0x18) != '_') {
                          uVar7 = FUN_00429efc(param_1);
                          uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
                          goto LAB_0042c930;
                        }
                    /* try { // try from 0042cd40 to 0052cd43 has its CatchHandler @ 0042cfac */
                        *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                      }
                      goto switchD_0042c9c0_caseD_1;
                    case 2:
                      goto switchD_0042ba64_caseD_2;
                    case 3:
                      goto switchD_0042ba64_caseD_3;
                    }
                  }
                  else if (iVar5 == 0x32) {
                    /* try { // try from 0042c9a0 to 0052c9cb has its CatchHandler @ 0042cfd0 */
                    switch(piVar12[2]) {
                    case 0:
switchD_0042c9c0_caseD_0:
                      lVar9 = FUN_004245e0(param_1,0x35,piVar12,0);
                      goto LAB_0042ac9c;
                    case 1:
switchD_0042c9c0_caseD_1:
                      uVar7 = FUN_00429efc(param_1);
                      goto LAB_0042ac84;
                    case 2:
                      pcVar14 = (char *)0x0;
switchD_0042ba64_caseD_2:
                    /* try { // try from 0042ca0c to 0052ca0f has its CatchHandler @ 0042cf84 */
                    /* try { // try from 0042cafc to 0052caff has its CatchHandler @ 0042ce94 */
                      if ((((char *)**(undefined8 **)(piVar12 + 2))[1] == 'c') &&
                         ((cVar17 = *(char *)**(undefined8 **)(piVar12 + 2),
                          (byte)(cVar17 + 0x8eU) < 2 || ((byte)(cVar17 + 0x9dU) < 2)))) {
                    /* try { // try from 0042cb04 to 0052cb7f has its CatchHandler @ 0042cfd0 */
                        uVar7 = FUN_004271e4(param_1);
                      }
                      else {
                    /* try { // try from 0042ca14 to 0052ca47 has its CatchHandler @ 0042cfd0 */
                        uVar7 = FUN_00429efc(param_1);
                      }
                      iVar5 = strcmp(pcVar14,"cl");
                      if (iVar5 == 0) {
                        uVar8 = FUN_00426a90(param_1,0x45);
                      }
                      else {
                        iVar5 = strcmp(pcVar14,"dt");
                        if ((iVar5 == 0) || (iVar5 = strcmp(pcVar14,"pt"), iVar5 == 0)) {
                          uVar8 = FUN_00428b90(param_1);
                          if (**(char **)(param_1 + 0x18) == 'I') {
                            uVar16 = FUN_004255a4(param_1);
                            uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
                          }
                        }
                        else {
                          uVar8 = FUN_00429efc(param_1);
                        }
                      }
                    /* try { // try from 0042ca98 to 0052ca9b has its CatchHandler @ 0042cf98 */
                    /* try { // try from 0042caa0 to 0052cacf has its CatchHandler @ 0042cfd0 */
                      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
                      lVar9 = FUN_004245e0(param_1,0x37,piVar12,uVar7);
                      goto LAB_0042ac9c;
                    case 3:
                      pcVar14 = (char *)0x0;
switchD_0042ba64_caseD_3:
                      iVar5 = strcmp(pcVar14,"qu");
                      if (iVar5 == 0) {
                        uVar7 = FUN_00429efc(param_1);
                    /* try { // try from 0042cbfc to 0052cbff has its CatchHandler @ 0042cfc8 */
                        uVar8 = FUN_00429efc(param_1);
                        uVar16 = FUN_00429efc(param_1);
LAB_0042cba8:
                        uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar16);
                        uVar7 = FUN_004245e0(param_1,0x3a,uVar7,uVar8);
                        lVar9 = FUN_004245e0(param_1,0x39,piVar12,uVar7);
                        goto LAB_0042ac9c;
                      }
                      if ((*pcVar14 == 'n') && ((pcVar14[1] == 'a' || (pcVar14[1] == 'w')))) {
                        uVar7 = FUN_00426a90(param_1,0x5f);
                        uVar8 = FUN_004271e4(param_1);
                        pcVar14 = *(char **)(param_1 + 0x18);
                        cVar17 = *pcVar14;
                        if (cVar17 == 'E') {
                          uVar16 = 0;
                          *(char **)(param_1 + 0x18) = pcVar14 + 1;
                          goto LAB_0042cba8;
                        }
                        if (cVar17 == 'p') {
                          if (pcVar14[1] == 'i') {
                            *(char **)(param_1 + 0x18) = pcVar14 + 2;
                            uVar16 = FUN_00426a90(param_1,0x45);
                            goto LAB_0042cba8;
                          }
                        }
                        else if ((cVar17 == 'i') && (pcVar14[1] == 'l')) {
                          uVar16 = FUN_00429efc(param_1);
                          goto LAB_0042cba8;
                        }
                      }
                    }
                  }
                  else if (iVar5 == 0x33) {
                    if (**(char **)(param_1 + 0x18) != '_') goto switchD_0042c9c0_caseD_1;
                    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                    uVar7 = FUN_00426a90(param_1,0x45);
                    /* try { // try from 0042c998 to 0052c99b has its CatchHandler @ 0042cfb4 */
LAB_0042ac84:
                    lVar9 = FUN_004245e0(param_1,0x36,piVar12,uVar7);
                    goto LAB_0042ac9c;
                  }
                }
              }
switchD_0042c9c0_default:
              lVar9 = 0;
            }
          }
LAB_0042ac9c:
          iVar5 = strcmp(pcVar11,"cl");
          if (iVar5 == 0) {
            uVar7 = FUN_00426a90(param_1,0x45);
          }
          else {
            iVar5 = strcmp(pcVar11,"dt");
                    /* try { // try from 0042acc4 to 0052acc7 has its CatchHandler @ 0042af9c */
            if ((iVar5 == 0) || (iVar5 = strcmp(pcVar11,"pt"), iVar5 == 0)) {
              uVar7 = FUN_00428b90(param_1);
              if (**(char **)(param_1 + 0x18) == 'I') {
                uVar8 = FUN_004255a4(param_1);
                uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
              }
            }
            else {
              uVar7 = FUN_00429efc(param_1);
            }
          }
          uVar7 = FUN_004245e0(param_1,0x38,lVar9,uVar7);
          lVar9 = FUN_004245e0(param_1,0x37,piVar10,uVar7);
          goto LAB_0042a86c;
        case 3:
          goto switchD_0042ad88_caseD_3;
        default:
          goto switchD_0042aaac_default;
        }
      }
      uVar7 = FUN_004271e4(param_1);
LAB_0042a9c0:
      lVar9 = FUN_004245e0(param_1,0x36,piVar10,uVar7);
    }
    else {
      if (iVar5 == 0x32) {
        switch(piVar10[2]) {
        case 0:
          goto switchD_0042aaac_caseD_0;
        case 1:
          goto switchD_0042aaac_caseD_1;
        case 2:
          pcVar11 = (char *)0x0;
          goto switchD_0042ad88_caseD_2;
        case 3:
          pcVar11 = (char *)0x0;
          goto switchD_0042ad88_caseD_3;
        default:
          goto switchD_0042aaac_default;
        }
      }
      if (iVar5 != 0x33) goto switchD_0042aaac_default;
switchD_0042aaac_caseD_1:
      pcVar11 = *(char **)(param_1 + 0x18);
      if (iVar5 == 0x33) {
        cVar17 = *pcVar11;
        bVar3 = false;
        if (cVar17 != '_') goto LAB_0042a8f4;
        *(char **)(param_1 + 0x18) = pcVar11 + 1;
        lVar9 = FUN_00426a90(param_1,0x45);
      }
      else {
LAB_0042ade4:
        cVar17 = *pcVar11;
        bVar3 = false;
LAB_0042a8f4:
        if (cVar17 == 'L') {
          lVar9 = FUN_00429d84(param_1);
        }
        else if (cVar17 == 'T') {
          lVar9 = FUN_004253cc(param_1);
        }
        else if (cVar17 == 's') {
          if (pcVar11[1] == 'r') {
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar7 = FUN_004271e4(param_1);
            uVar8 = FUN_00428b90(param_1);
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar16 = FUN_004255a4(param_1);
              uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
              lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
            }
            else {
              lVar9 = FUN_004245e0(param_1,1,uVar7,uVar8);
            }
          }
          else {
            if (pcVar11[1] != 'p') goto LAB_0042a94c;
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar7 = FUN_00429efc(param_1);
            lVar9 = FUN_004245e0(param_1,0x4a,uVar7,0);
          }
        }
        else if (cVar17 == 'f') {
          if (pcVar11[1] != 'p') goto LAB_0042a94c;
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
          if (pcVar11[2] == 'T') {
            iVar5 = 0;
            *(char **)(param_1 + 0x18) = pcVar11 + 3;
          }
          else {
            iVar5 = FUN_0042529c(param_1);
            iVar5 = iVar5 + 1;
            if (iVar5 == 0) goto LAB_0042b848;
          }
          iVar4 = *(int *)(param_1 + 0x28);
          lVar9 = 0;
          if (iVar4 < *(int *)(param_1 + 0x2c)) {
            *(int *)(param_1 + 0x28) = iVar4 + 1;
            lVar9 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
            if (lVar9 != 0) {
              *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
              *(long *)(lVar9 + 8) = (long)iVar5;
            }
          }
        }
        else {
                    /* try { // try from 0042a918 to 0052a943 has its CatchHandler @ 0042a71c */
          if ((byte)(cVar17 - 0x30U) < 10) {
LAB_0042aeb4:
            lVar9 = FUN_00428b90(param_1);
                    /* try { // try from 0042aebc to 0052aebf has its CatchHandler @ 0042af6c */
                    /* try { // try from 0042aec4 to 0052af47 has its CatchHandler @ 0042af9c */
            if ((lVar9 != 0) && (**(char **)(param_1 + 0x18) == 'I')) {
              uVar7 = FUN_004255a4(param_1);
              lVar9 = FUN_004245e0(param_1,4,lVar9,uVar7);
            }
          }
          else {
            if (cVar17 == 'o') {
              if (pcVar11[1] == 'n') {
                *(char **)(param_1 + 0x18) = pcVar11 + 2;
                goto LAB_0042aeb4;
              }
            }
            else if (((cVar17 == 't') || (cVar17 == 'i')) && (pcVar11[1] == 'l')) {
              uVar7 = 0;
              if (cVar17 == 't') {
                uVar7 = FUN_004271e4(param_1);
                pcVar11 = *(char **)(param_1 + 0x18);
              }
              *(char **)(param_1 + 0x18) = pcVar11 + 2;
              uVar8 = FUN_00426a90(param_1,0x45);
              lVar9 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
              goto switchD_0042b7dc_default;
            }
LAB_0042a94c:
            piVar12 = (int *)FUN_0042899c(param_1);
            if (piVar12 == (int *)0x0) {
LAB_0042b848:
              lVar9 = 0;
            }
            else {
              iVar5 = *piVar12;
              if (iVar5 == 0x31) {
                puVar21 = *(undefined8 **)(piVar12 + 2);
                    /* catch() { ... } // from try @ 0042b824 with catch @ 0042b7f0
                       catch() { ... } // from try @ 0042b8d8 with catch @ 0042b7f0
                       catch() { ... } // from try @ 0042b91c with catch @ 0042b7f0 */
                pcVar11 = (char *)*puVar21;
                *(int *)(param_1 + 0x50) = *(int *)(param_1 + 0x50) + *(int *)(puVar21 + 2) + -2;
                iVar5 = strcmp(pcVar11,"st");
                if (iVar5 != 0) {
                  lVar9 = 0;
                    /* try { // try from 0042b824 to 0052b827 has its CatchHandler @ 0042b7f0 */
                  switch(*(undefined4 *)((long)puVar21 + 0x14)) {
                  case 0:
                    goto switchD_0042b7dc_caseD_0;
                  case 1:
                    goto switchD_0042b834_caseD_1;
                  case 2:
                    goto switchD_0042b834_caseD_2;
                  case 3:
                    goto switchD_0042b834_caseD_3;
                  default:
                    goto switchD_0042b7dc_default;
                  }
                }
                uVar7 = FUN_004271e4(param_1);
              }
              else {
                if (iVar5 == 0x32) {
                  lVar9 = 0;
                    /* try { // try from 0042b7cc to 0052b7cf has its CatchHandler @ 0042b360 */
                    /* catch() { ... } // from try @ 0042b3e0 with catch @ 0042b7d0
                       catch() { ... } // from try @ 0042b418 with catch @ 0042b7d0 */
                  switch(piVar12[2]) {
                  case 0:
switchD_0042b7dc_caseD_0:
                    lVar9 = FUN_004245e0(param_1,0x35,piVar12,0);
                    /* try { // try from 0042b864 to 0052b867 has its CatchHandler @ 0042b8f8 */
                    break;
                  case 1:
                    goto switchD_0042b7dc_caseD_1;
                  case 2:
                    pcVar11 = (char *)0x0;
switchD_0042b834_caseD_2:
                    /* catch() { ... } // from try @ 0042ba98 with catch @ 0042bb2c */
                    if ((((char *)**(undefined8 **)(piVar12 + 2))[1] == 'c') &&
                       ((cVar17 = *(char *)**(undefined8 **)(piVar12 + 2),
                        (byte)(cVar17 + 0x8eU) < 2 || ((byte)(cVar17 + 0x9dU) < 2)))) {
                      uVar7 = FUN_004271e4(param_1);
                    }
                    else {
                      uVar7 = FUN_00429efc(param_1);
                    }
                    iVar5 = strcmp(pcVar11,"cl");
                    if (iVar5 == 0) {
                    /* try { // try from 0042bb0c to 0052bb27 has its CatchHandler @ 0042ba4c */
                      uVar8 = FUN_00426a90(param_1,0x45);
                    }
                    else {
                      iVar5 = strcmp(pcVar11,"dt");
                      if ((iVar5 == 0) || (iVar5 = strcmp(pcVar11,"pt"), iVar5 == 0)) {
                        uVar8 = FUN_00428b90(param_1);
                    /* try { // try from 0042b8d8 to 0052b8f3 has its CatchHandler @ 0042b7f0 */
                        if (**(char **)(param_1 + 0x18) == 'I') {
                          uVar16 = FUN_004255a4(param_1);
                    /* catch() { ... } // from try @ 0042b864 with catch @ 0042b8f8 */
                          uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
                        }
                      }
                      else {
                        uVar8 = FUN_00429efc(param_1);
                    /* try { // try from 0042bba4 to 0052bba7 has its CatchHandler @ 0042bf8c */
                      }
                    }
                    uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
                    /* try { // try from 0042b91c to 0052b91f has its CatchHandler @ 0042b7f0 */
                    /* catch() { ... } // from try @ 0042b948 with catch @ 0042b920
                       catch() { ... } // from try @ 0042b9f4 with catch @ 0042b920
                       catch() { ... } // from try @ 0042ba48 with catch @ 0042b920 */
                    lVar9 = FUN_004245e0(param_1,0x37,piVar12,uVar7);
                    break;
                  case 3:
                    pcVar11 = (char *)0x0;
switchD_0042b834_caseD_3:
                    /* try { // try from 0042b948 to 0052b94b has its CatchHandler @ 0042b920 */
                    iVar5 = strcmp(pcVar11,"qu");
                    if (iVar5 == 0) {
                      uVar7 = FUN_00429efc(param_1);
                      uVar8 = FUN_00429efc(param_1);
                      uVar16 = FUN_00429efc(param_1);
                    }
                    else {
                    /* try { // try from 0042b968 to 0052b96b has its CatchHandler @ 0042ba24 */
                      if ((*pcVar11 != 'n') || ((pcVar11[1] != 'a' && (pcVar11[1] != 'w'))))
                      goto LAB_0042b848;
                      uVar7 = FUN_00426a90(param_1,0x5f);
                      uVar8 = FUN_004271e4(param_1);
                      pcVar11 = *(char **)(param_1 + 0x18);
                      cVar17 = *pcVar11;
                      if (cVar17 != 'E') {
                        if (cVar17 == 'p') {
                          lVar9 = 0;
                          if (pcVar11[1] == 'i') {
                            *(char **)(param_1 + 0x18) = pcVar11 + 2;
                            uVar16 = FUN_00426a90(param_1,0x45);
                            goto LAB_0042b9c4;
                          }
                        }
                        else {
                          if (cVar17 != 'i') goto LAB_0042b848;
                          lVar9 = 0;
                          if (pcVar11[1] == 'l') {
                            uVar16 = FUN_00429efc(param_1);
                            goto LAB_0042b9c4;
                          }
                        }
                        break;
                      }
                      uVar16 = 0;
                      *(char **)(param_1 + 0x18) = pcVar11 + 1;
                    }
LAB_0042b9c4:
                    uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar16);
                    uVar7 = FUN_004245e0(param_1,0x3a,uVar7,uVar8);
                    /* try { // try from 0042b9f4 to 0052ba1f has its CatchHandler @ 0042b920 */
                    lVar9 = FUN_004245e0(param_1,0x39,piVar12,uVar7);
                  }
                  goto switchD_0042b7dc_default;
                }
                if (iVar5 != 0x33) goto LAB_0042b848;
                if (**(char **)(param_1 + 0x18) == '_') {
                  *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                  uVar7 = FUN_00426a90(param_1,0x45);
                  goto LAB_0042a994;
                }
switchD_0042b7dc_caseD_1:
                uVar7 = FUN_00429efc(param_1);
              }
LAB_0042a994:
              lVar9 = FUN_004245e0(param_1,0x36,piVar12,uVar7);
            }
          }
        }
switchD_0042b7dc_default:
        if (bVar3) {
          uVar7 = FUN_004245e0(param_1,0x38,lVar9,lVar9);
          goto LAB_0042a9c0;
        }
      }
                    /* try { // try from 0042ae78 to 0052ae7b has its CatchHandler @ 0042af9c */
      lVar9 = FUN_004245e0(param_1,0x36,piVar10,lVar9);
    }
  }
LAB_0042a86c:
  *(undefined4 *)(param_1 + 0x54) = uVar1;
  if (lVar9 == 0) {
    return 0;
  }
  pbVar18 = *(byte **)(param_1 + 0x18);
LAB_0042a760:
  if (*pbVar18 != 0x5f) {
    return 0;
  }
  *(byte **)(param_1 + 0x18) = pbVar18 + 1;
  uVar7 = FUN_004271e4(param_1);
                    /* try { // try from 0042a7a8 to 0052a7ab has its CatchHandler @ 0042ab7c */
                    /* try { // try from 0042a7b0 to 0052a7d7 has its CatchHandler @ 0042a71c */
  uVar7 = FUN_004245e0(param_1,0x2d,lVar9,uVar7);
  return uVar7;
switchD_0042ad88_caseD_3:
  iVar5 = strcmp(pcVar11,"qu");
  if (iVar5 == 0) {
    pcVar11 = *(char **)(param_1 + 0x18);
    cVar17 = *pcVar11;
    if (cVar17 == 'L') {
      piVar12 = (int *)FUN_00429d84(param_1);
      pcVar11 = *(char **)(param_1 + 0x18);
      cVar17 = *pcVar11;
LAB_0042b01c:
      if (cVar17 == 'L') {
        lVar9 = FUN_00429d84(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b0d8;
      }
      if (cVar17 == 'T') {
        lVar9 = FUN_004253cc(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b0d8;
      }
      if (cVar17 == 's') {
        if (pcVar11[1] == 'r') {
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
                    /* try { // try from 0042bf64 to 0052bf67 has its CatchHandler @ 0042bb54 */
          piVar15 = (int *)FUN_004271e4(param_1);
                    /* catch() { ... } // from try @ 0042bc8c with catch @ 0042bf68
                       catch() { ... } // from try @ 0042bd24 with catch @ 0042bf68
                       catch() { ... } // from try @ 0042bedc with catch @ 0042bf68 */
                    /* catch() { ... } // from try @ 0042bc38 with catch @ 0042bf70 */
          uVar7 = FUN_00428b90(param_1);
                    /* catch() { ... } // from try @ 0042bbe4 with catch @ 0042bf84
                       catch() { ... } // from try @ 0042bc40 with catch @ 0042bf84
                       catch() { ... } // from try @ 0042bd98 with catch @ 0042bf84
                       catch() { ... } // from try @ 0042bed0 with catch @ 0042bf84 */
          if (**(char **)(param_1 + 0x18) == 'I') {
            uVar8 = FUN_004255a4(param_1);
            uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
            uVar8 = 1;
            goto LAB_0042b0c4;
          }
                    /* catch() { ... } // from try @ 0042bba4 with catch @ 0042bf8c
                       catch() { ... } // from try @ 0042be0c with catch @ 0042bf8c
                       catch() { ... } // from try @ 0042bec4 with catch @ 0042bf8c */
                    /* catch() { ... } // from try @ 0042bfe4 with catch @ 0042bf98
                       catch() { ... } // from try @ 0042c0b0 with catch @ 0042bf98
                       catch() { ... } // from try @ 0042c3b0 with catch @ 0042bf98 */
          lVar9 = FUN_004245e0(param_1,1,piVar15,uVar7);
          pcVar11 = *(char **)(param_1 + 0x18);
          cVar17 = *pcVar11;
        }
        else {
          if (pcVar11[1] != 'p') goto LAB_0042b074;
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
          piVar15 = (int *)FUN_00429efc(param_1);
          uVar7 = 0x4a;
LAB_0042b6bc:
          lVar9 = FUN_004245e0(param_1,uVar7,piVar15,0);
LAB_0042b6c8:
          pcVar11 = *(char **)(param_1 + 0x18);
          cVar17 = *pcVar11;
        }
        goto LAB_0042b0d8;
      }
      if (cVar17 != 'f') {
        if (9 < (byte)(cVar17 - 0x30U)) {
          if (cVar17 != 'o') goto LAB_0042b054;
          if (pcVar11[1] != 'n') goto LAB_0042b074;
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
        }
                    /* try { // try from 0042b340 to 0052b343 has its CatchHandler @ 0042afc8 */
        lVar9 = FUN_00428b90(param_1);
                    /* catch() { ... } // from try @ 0042b0c0 with catch @ 0042b344 */
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        if ((lVar9 != 0) && (cVar17 == 'I')) {
                    /* catch() { ... } // from try @ 0042b384 with catch @ 0042b360
                       catch() { ... } // from try @ 0042b4fc with catch @ 0042b360
                       catch() { ... } // from try @ 0042b7cc with catch @ 0042b360 */
          uVar7 = FUN_004255a4(param_1);
          lVar9 = FUN_004245e0(param_1,4,lVar9,uVar7);
          pcVar11 = *(char **)(param_1 + 0x18);
          cVar17 = *pcVar11;
                    /* try { // try from 0042b384 to 0052b3a7 has its CatchHandler @ 0042b360 */
        }
        goto LAB_0042b0d8;
      }
      if (pcVar11[1] == 'p') {
        *(char **)(param_1 + 0x18) = pcVar11 + 2;
        if (pcVar11[2] == 'T') {
          iVar5 = 0;
          *(char **)(param_1 + 0x18) = pcVar11 + 3;
        }
        else {
          iVar5 = FUN_0042529c(param_1);
          iVar5 = iVar5 + 1;
          if (iVar5 == 0) goto switchD_0042c544_default;
        }
        iVar4 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar4) goto switchD_0042c544_default;
        *(int *)(param_1 + 0x28) = iVar4 + 1;
        lVar9 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
        if (lVar9 == 0) goto LAB_0042b6c8;
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
        *(long *)(lVar9 + 8) = (long)iVar5;
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b0d8;
      }
LAB_0042b074:
      piVar15 = (int *)FUN_0042899c(param_1);
      if (piVar15 == (int *)0x0) {
switchD_0042c544_default:
        pcVar11 = *(char **)(param_1 + 0x18);
        lVar9 = 0;
        cVar17 = *pcVar11;
        goto LAB_0042b0d8;
      }
      iVar5 = *piVar15;
      if (iVar5 == 0x31) {
                    /* try { // try from 0042cce4 to 0052cce7 has its CatchHandler @ 0042c3c0 */
        pcVar11 = (char *)**(undefined8 **)(piVar15 + 2);
        *(int *)(param_1 + 0x50) =
             *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(piVar15 + 2) + 2) + -2;
        iVar5 = strcmp(pcVar11,"st");
        if (iVar5 != 0) {
                    /* try { // try from 0042cd1c to 0052cd1f has its CatchHandler @ 0042cf60 */
                    /* try { // try from 0042cd28 to 0052cd2b has its CatchHandler @ 0042cfc8 */
                    /* try { // try from 0042cd34 to 0052cd37 has its CatchHandler @ 0042c3c0 */
          switch(*(undefined4 *)(*(long *)(piVar15 + 2) + 0x14)) {
          case 0:
            goto switchD_0042c544_caseD_0;
          case 1:
            cVar17 = *pcVar11;
                    /* try { // try from 0042cd4c to 0052cd4f has its CatchHandler @ 0042cf60 */
                    /* try { // try from 0042cd5c to 0052cd5f has its CatchHandler @ 0042cf00 */
            if (((cVar17 == 'm') || (cVar17 == 'p')) && (pcVar11[1] == cVar17)) {
                    /* try { // try from 0042cd6c to 0052cd6f has its CatchHandler @ 0042cf28 */
              if (**(char **)(param_1 + 0x18) != '_') {
                uVar7 = FUN_00429efc(param_1);
                    /* try { // try from 0042cd88 to 0052cd8b has its CatchHandler @ 0042cfd0 */
                uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
                uVar8 = 0x36;
                goto LAB_0042b0c4;
              }
                    /* try { // try from 0042cdc0 to 0052cdf3 has its CatchHandler @ 0042cfd0 */
              *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
            }
            goto switchD_0042c544_caseD_1;
          case 2:
            goto switchD_0042cd38_caseD_2;
          case 3:
            goto switchD_0042cd38_caseD_3;
          }
          goto switchD_0042c544_default;
        }
        uVar7 = FUN_004271e4(param_1);
        uVar8 = 0x36;
                    /* try { // try from 0042cdb8 to 0052cdbb has its CatchHandler @ 0042cf4c */
LAB_0042b0c4:
                    /* try { // try from 0042b0c8 to 0052b0cb has its CatchHandler @ 0042b318 */
        lVar9 = FUN_004245e0(param_1,uVar8,piVar15,uVar7);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b0d8;
      }
      if (iVar5 != 0x32) {
        if (iVar5 != 0x33) goto switchD_0042c544_default;
        if (**(char **)(param_1 + 0x18) != '_') goto switchD_0042c544_caseD_1;
        *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
        uVar7 = FUN_00426a90(param_1,0x45);
LAB_0042b0bc:
                    /* try { // try from 0042b0c0 to 0052b0c3 has its CatchHandler @ 0042b344 */
        uVar8 = 0x36;
        goto LAB_0042b0c4;
      }
      switch(piVar15[2]) {
      case 0:
switchD_0042c544_caseD_0:
        uVar7 = 0x35;
        goto LAB_0042b6bc;
      case 1:
switchD_0042c544_caseD_1:
        uVar7 = FUN_00429efc(param_1);
        goto LAB_0042b0bc;
      case 2:
        pcVar11 = (char *)0x0;
switchD_0042cd38_caseD_2:
        if ((((char *)**(undefined8 **)(piVar15 + 2))[1] == 'c') &&
           ((cVar17 = *(char *)**(undefined8 **)(piVar15 + 2), (byte)(cVar17 + 0x8eU) < 2 ||
            ((byte)(cVar17 + 0x9dU) < 2)))) {
          uVar7 = FUN_004271e4(param_1);
        }
        else {
          uVar7 = FUN_00429efc(param_1);
        }
        iVar5 = strcmp(pcVar11,"cl");
        if (iVar5 == 0) {
          uVar8 = FUN_00426a90(param_1,0x45);
        }
        else {
          iVar5 = strcmp(pcVar11,"dt");
          if ((iVar5 == 0) || (iVar5 = strcmp(pcVar11,"pt"), iVar5 == 0)) {
            uVar8 = FUN_00428b90(param_1);
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar16 = FUN_004255a4(param_1);
              uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
            }
          }
          else {
            uVar8 = FUN_00429efc(param_1);
          }
        }
        uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
        uVar8 = 0x37;
        goto LAB_0042b0c4;
      case 3:
        pcVar11 = (char *)0x0;
switchD_0042cd38_caseD_3:
        iVar5 = strcmp(pcVar11,"qu");
        if (iVar5 == 0) {
          uVar7 = FUN_00429efc(param_1);
          uVar8 = FUN_00429efc(param_1);
          uVar16 = FUN_00429efc(param_1);
LAB_0042c7a0:
          uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar16);
          uVar7 = FUN_004245e0(param_1,0x3a,uVar7,uVar8);
          uVar8 = 0x39;
          goto LAB_0042b0c4;
        }
        if ((*pcVar11 != 'n') || ((pcVar11[1] != 'a' && (pcVar11[1] != 'w'))))
        goto switchD_0042c544_default;
        uVar7 = FUN_00426a90(param_1,0x5f);
        uVar8 = FUN_004271e4(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        if (cVar17 == 'E') {
          uVar16 = 0;
          *(char **)(param_1 + 0x18) = pcVar11 + 1;
          goto LAB_0042c7a0;
        }
        if (cVar17 == 'p') {
          if (pcVar11[1] == 'i') {
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar16 = FUN_00426a90(param_1,0x45);
            goto LAB_0042c7a0;
          }
        }
        else {
          if (cVar17 != 'i') {
            lVar9 = 0;
            goto LAB_0042b0d8;
          }
          if (pcVar11[1] == 'l') {
            uVar16 = FUN_00429efc(param_1);
            goto LAB_0042c7a0;
          }
        }
        lVar9 = 0;
        break;
      default:
        goto switchD_0042c544_default;
      }
LAB_0042b110:
      if (((cVar17 != 't') && (cVar17 != 'i')) || (pcVar11[1] != 'l')) goto LAB_0042b130;
      uVar7 = 0;
      if (cVar17 == 't') {
        uVar7 = FUN_004271e4(param_1);
                    /* try { // try from 0042bfe4 to 0052c05f has its CatchHandler @ 0042bf98 */
        pcVar11 = *(char **)(param_1 + 0x18);
      }
      *(char **)(param_1 + 0x18) = pcVar11 + 2;
      uVar8 = FUN_00426a90(param_1,0x45);
      lVar13 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
    }
    else {
                    /* catch() { ... } // from try @ 0042aebc with catch @ 0042af6c */
      if (cVar17 == 'T') {
        piVar12 = (int *)FUN_004253cc(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b01c;
      }
      if (cVar17 == 's') {
        if (pcVar11[1] == 'r') {
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
          piVar15 = (int *)FUN_004271e4(param_1);
          uVar7 = FUN_00428b90(param_1);
                    /* try { // try from 0042c0a8 to 0052c0ab has its CatchHandler @ 0042c3a0 */
                    /* try { // try from 0042c0b0 to 0052c357 has its CatchHandler @ 0042bf98 */
          if (**(char **)(param_1 + 0x18) != 'I') {
            piVar12 = (int *)FUN_004245e0(param_1,1,piVar15,uVar7);
            pcVar11 = *(char **)(param_1 + 0x18);
            cVar17 = *pcVar11;
            goto LAB_0042b01c;
          }
          uVar8 = FUN_004255a4(param_1);
          uVar7 = FUN_004245e0(param_1,4,uVar7,uVar8);
          uVar8 = 1;
          goto LAB_0042b008;
        }
        if (pcVar11[1] != 'p') goto LAB_0042afb8;
        *(char **)(param_1 + 0x18) = pcVar11 + 2;
        piVar15 = (int *)FUN_00429efc(param_1);
        uVar7 = 0x4a;
LAB_0042b7a0:
                    /* catch() { ... } // from try @ 0042b410 with catch @ 0042b7a0 */
        piVar12 = (int *)FUN_004245e0(param_1,uVar7,piVar15,0);
LAB_0042b7ac:
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b01c;
      }
      if (cVar17 == 'f') {
        if (pcVar11[1] != 'p') goto LAB_0042afb8;
        *(char **)(param_1 + 0x18) = pcVar11 + 2;
        if (pcVar11[2] == 'T') {
          iVar5 = 0;
          *(char **)(param_1 + 0x18) = pcVar11 + 3;
        }
        else {
          iVar5 = FUN_0042529c(param_1);
          iVar5 = iVar5 + 1;
          if (iVar5 == 0) goto switchD_0042c218_default;
        }
        iVar4 = *(int *)(param_1 + 0x28);
        if (*(int *)(param_1 + 0x2c) <= iVar4) goto switchD_0042c218_default;
        *(int *)(param_1 + 0x28) = iVar4 + 1;
        piVar12 = (int *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18);
        if (piVar12 == (int *)0x0) goto LAB_0042b7ac;
        *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
        *(long *)(piVar12 + 2) = (long)iVar5;
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        goto LAB_0042b01c;
      }
      if ((byte)(cVar17 - 0x30U) < 10) {
LAB_0042b39c:
        piVar12 = (int *)FUN_00428b90(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        if ((piVar12 != (int *)0x0) && (cVar17 == 'I')) {
          uVar7 = FUN_004255a4(param_1);
          uVar8 = 4;
          piVar15 = piVar12;
          goto LAB_0042b008;
        }
        goto LAB_0042b01c;
      }
      if (cVar17 == 'o') {
        if (pcVar11[1] == 'n') {
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
          goto LAB_0042b39c;
        }
      }
      else {
                    /* try { // try from 0042af98 to 0052af9b has its CatchHandler @ 0042abb8 */
                    /* catch() { ... } // from try @ 0042ac30 with catch @ 0042af9c
                       catch() { ... } // from try @ 0042acc4 with catch @ 0042af9c
                       catch() { ... } // from try @ 0042ae78 with catch @ 0042af9c
                       catch() { ... } // from try @ 0042aec4 with catch @ 0042af9c */
                    /* catch() { ... } // from try @ 0042ac50 with catch @ 0042afa4 */
        if (((cVar17 == 't') || (cVar17 == 'i')) && (pcVar11[1] == 'l')) {
          uVar7 = 0;
          if (cVar17 == 't') {
            uVar7 = FUN_004271e4(param_1);
            pcVar11 = *(char **)(param_1 + 0x18);
          }
          *(char **)(param_1 + 0x18) = pcVar11 + 2;
          uVar8 = FUN_00426a90(param_1,0x45);
          piVar12 = (int *)FUN_004245e0(param_1,0x30,uVar7,uVar8);
          pcVar11 = *(char **)(param_1 + 0x18);
          cVar17 = *pcVar11;
          goto LAB_0042b01c;
        }
      }
LAB_0042afb8:
      piVar15 = (int *)FUN_0042899c(param_1);
      piVar12 = (int *)0x0;
      if (piVar15 == (int *)0x0) goto LAB_0042b7ac;
                    /* catch() { ... } // from try @ 0042affc with catch @ 0042afc8
                       catch() { ... } // from try @ 0042b1a4 with catch @ 0042afc8
                       catch() { ... } // from try @ 0042b340 with catch @ 0042afc8 */
      iVar5 = *piVar15;
      if (iVar5 == 0x31) {
        pcVar11 = (char *)**(undefined8 **)(piVar15 + 2);
        *(int *)(param_1 + 0x50) =
             *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(piVar15 + 2) + 2) + -2;
        iVar5 = strcmp(pcVar11,"st");
        if (iVar5 != 0) {
          switch(*(undefined4 *)(*(long *)(piVar15 + 2) + 0x14)) {
          case 0:
            goto switchD_0042c218_caseD_0;
          case 1:
            goto switchD_0042c59c_caseD_1;
          case 2:
            goto switchD_0042c59c_caseD_2;
          case 3:
            goto switchD_0042c59c_caseD_3;
          default:
            goto switchD_0042c218_default;
          }
        }
        uVar7 = FUN_004271e4(param_1);
        uVar8 = 0x36;
        goto LAB_0042b008;
      }
      if (iVar5 != 0x32) {
        if (iVar5 == 0x33) {
          if (**(char **)(param_1 + 0x18) != '_') goto switchD_0042c218_caseD_1;
          *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
          uVar7 = FUN_00426a90(param_1,0x45);
          goto LAB_0042b000;
        }
switchD_0042c218_default:
        pcVar11 = *(char **)(param_1 + 0x18);
        piVar12 = (int *)0x0;
        cVar17 = *pcVar11;
        goto LAB_0042b01c;
      }
      switch(piVar15[2]) {
      case 0:
switchD_0042c218_caseD_0:
        uVar7 = 0x35;
        goto LAB_0042b7a0;
      case 1:
        goto switchD_0042c218_caseD_1;
      case 2:
        pcVar11 = (char *)0x0;
switchD_0042c59c_caseD_2:
        if ((((char *)**(undefined8 **)(piVar15 + 2))[1] == 'c') &&
           ((cVar17 = *(char *)**(undefined8 **)(piVar15 + 2), (byte)(cVar17 + 0x8eU) < 2 ||
            ((byte)(cVar17 + 0x9dU) < 2)))) {
          uVar7 = FUN_004271e4(param_1);
        }
        else {
          uVar7 = FUN_00429efc(param_1);
        }
        iVar5 = strcmp(pcVar11,"cl");
        if (iVar5 == 0) {
          uVar8 = FUN_00426a90(param_1,0x45);
        }
        else {
          iVar5 = strcmp(pcVar11,"dt");
          if ((iVar5 == 0) || (iVar5 = strcmp(pcVar11,"pt"), iVar5 == 0)) {
            uVar8 = FUN_00428b90(param_1);
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar16 = FUN_004255a4(param_1);
              uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
            }
          }
          else {
            uVar8 = FUN_00429efc(param_1);
          }
        }
        uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
        uVar8 = 0x37;
        goto LAB_0042b008;
      case 3:
        pcVar11 = (char *)0x0;
switchD_0042c59c_caseD_3:
        iVar5 = strcmp(pcVar11,"qu");
        if (iVar5 == 0) {
          uVar7 = FUN_00429efc(param_1);
          uVar8 = FUN_00429efc(param_1);
          uVar16 = FUN_00429efc(param_1);
LAB_0042c404:
          uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar16);
                    /* try { // try from 0042c41c to 0052c41f has its CatchHandler @ 0042c3c0 */
          uVar7 = FUN_004245e0(param_1,0x3a,uVar7,uVar8);
          uVar8 = 0x39;
                    /* try { // try from 0042c438 to 0052c43b has its CatchHandler @ 0042cfac */
          goto LAB_0042b008;
        }
                    /* catch() { ... } // from try @ 0042c0a8 with catch @ 0042c3a0 */
                    /* try { // try from 0042c3b0 to 0052c3b3 has its CatchHandler @ 0042bf98 */
        if ((*pcVar11 != 'n') || ((pcVar11[1] != 'a' && (pcVar11[1] != 'w'))))
        goto switchD_0042c218_default;
        uVar7 = FUN_00426a90(param_1,0x5f);
                    /* catch() { ... } // from try @ 0042c41c with catch @ 0042c3c0
                       catch() { ... } // from try @ 0042cce4 with catch @ 0042c3c0
                       catch() { ... } // from try @ 0042cd34 with catch @ 0042c3c0
                       catch() { ... } // from try @ 0042cefc with catch @ 0042c3c0 */
        uVar8 = FUN_004271e4(param_1);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
        if (cVar17 == 'E') {
          uVar16 = 0;
                    /* try { // try from 0042c49c to 0052c94f has its CatchHandler @ 0042cfd0 */
          *(char **)(param_1 + 0x18) = pcVar11 + 1;
          goto LAB_0042c404;
        }
        if (cVar17 == 'p') {
          if (pcVar11[1] == 'i') {
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar16 = FUN_00426a90(param_1,0x45);
            goto LAB_0042c404;
          }
        }
        else {
          if (cVar17 != 'i') {
            piVar12 = (int *)0x0;
            goto LAB_0042b01c;
          }
          if (pcVar11[1] == 'l') {
            uVar16 = FUN_00429efc(param_1);
            goto LAB_0042c404;
          }
        }
        piVar12 = (int *)0x0;
LAB_0042b054:
                    /* try { // try from 0042b06c to 0052b06f has its CatchHandler @ 0042b318 */
        if (((cVar17 != 't') && (cVar17 != 'i')) || (pcVar11[1] != 'l')) goto LAB_0042b074;
        uVar7 = 0;
        if (cVar17 == 't') {
          uVar7 = FUN_004271e4(param_1);
          pcVar11 = *(char **)(param_1 + 0x18);
        }
        *(char **)(param_1 + 0x18) = pcVar11 + 2;
        uVar8 = FUN_00426a90(param_1,0x45);
        lVar9 = FUN_004245e0(param_1,0x30,uVar7,uVar8);
        pcVar11 = *(char **)(param_1 + 0x18);
        cVar17 = *pcVar11;
LAB_0042b0d8:
        if (cVar17 == 'L') {
          lVar13 = FUN_00429d84(param_1);
        }
        else if (cVar17 == 'T') {
          lVar13 = FUN_004253cc(param_1);
        }
        else if (cVar17 == 's') {
          if (pcVar11[1] == 'r') {
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar7 = FUN_004271e4(param_1);
            uVar8 = FUN_00428b90(param_1);
            if (**(char **)(param_1 + 0x18) == 'I') {
              uVar16 = FUN_004255a4(param_1);
              uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
              lVar13 = FUN_004245e0(param_1,1,uVar7,uVar8);
            }
            else {
              lVar13 = FUN_004245e0(param_1,1,uVar7,uVar8);
            }
          }
          else {
            if (pcVar11[1] != 'p') goto LAB_0042b130;
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            uVar7 = FUN_00429efc(param_1);
            lVar13 = FUN_004245e0(param_1,0x4a,uVar7,0);
          }
        }
        else if (cVar17 == 'f') {
          if (pcVar11[1] == 'p') {
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
            if (pcVar11[2] == 'T') {
              iVar5 = 0;
              *(char **)(param_1 + 0x18) = pcVar11 + 3;
            }
            else {
              iVar5 = FUN_0042529c(param_1);
              iVar5 = iVar5 + 1;
              if (iVar5 == 0) goto LAB_0042bc80;
            }
            iVar4 = *(int *)(param_1 + 0x28);
                    /* try { // try from 0042b4fc to 0052b787 has its CatchHandler @ 0042b360 */
            lVar13 = 0;
            if (iVar4 < *(int *)(param_1 + 0x2c)) {
              *(int *)(param_1 + 0x28) = iVar4 + 1;
              lVar13 = *(long *)(param_1 + 0x20) + (long)iVar4 * 0x18;
              if (lVar13 != 0) {
                *(undefined4 *)(*(long *)(param_1 + 0x20) + (long)iVar4 * 0x18) = 6;
                *(long *)(lVar13 + 8) = (long)iVar5;
              }
            }
          }
          else {
LAB_0042b130:
            piVar15 = (int *)FUN_0042899c(param_1);
            if (piVar15 == (int *)0x0) {
LAB_0042bc80:
              lVar13 = 0;
            }
            else {
              iVar5 = *piVar15;
              if (iVar5 == 0x31) {
                pcVar11 = (char *)**(undefined8 **)(piVar15 + 2);
                    /* try { // try from 0042bc38 to 0052bc3b has its CatchHandler @ 0042bf70 */
                *(int *)(param_1 + 0x50) =
                     *(int *)(param_1 + 0x50) + *(int *)(*(undefined8 **)(piVar15 + 2) + 2) + -2;
                iVar5 = strcmp(pcVar11,"st");
                    /* try { // try from 0042bc40 to 0052bc63 has its CatchHandler @ 0042bf84 */
                if (iVar5 != 0) {
                  lVar13 = 0;
                  switch(*(undefined4 *)(*(long *)(piVar15 + 2) + 0x14)) {
                  case 0:
                    goto switchD_0042bc10_caseD_0;
                  case 1:
                    goto switchD_0042bc6c_caseD_1;
                  case 2:
                    goto switchD_0042bc6c_caseD_2;
                  case 3:
                    goto switchD_0042bc6c_caseD_3;
                  default:
                    goto switchD_0042bc10_default;
                  }
                }
                uVar7 = FUN_004271e4(param_1);
              }
              else {
                if (iVar5 == 0x32) {
                  lVar13 = 0;
                  switch(piVar15[2]) {
                  case 0:
switchD_0042bc10_caseD_0:
                    /* try { // try from 0042be0c to 0052be0f has its CatchHandler @ 0042bf8c */
                    lVar13 = FUN_004245e0(param_1,0x35,piVar15,0);
                    break;
                  case 1:
                    goto switchD_0042bc10_caseD_1;
                  case 2:
                    pcVar11 = (char *)0x0;
switchD_0042bc6c_caseD_2:
                    /* try { // try from 0042bc8c to 0052bc8f has its CatchHandler @ 0042bf68 */
                    if ((((char *)**(undefined8 **)(piVar15 + 2))[1] == 'c') &&
                       ((cVar17 = *(char *)**(undefined8 **)(piVar15 + 2),
                        (byte)(cVar17 + 0x8eU) < 2 || ((byte)(cVar17 + 0x9dU) < 2)))) {
                      uVar7 = FUN_004271e4(param_1);
                    /* try { // try from 0042bd98 to 0052bd9b has its CatchHandler @ 0042bf84 */
                    }
                    else {
                      uVar7 = FUN_00429efc(param_1);
                    }
                    /* try { // try from 0042bcb0 to 0052bcb3 has its CatchHandler @ 0042bee4 */
                    iVar5 = strcmp(pcVar11,"cl");
                    if (iVar5 == 0) {
                      uVar8 = FUN_00426a90(param_1,0x45);
                    }
                    else {
                      iVar5 = strcmp(pcVar11,"dt");
                      if ((iVar5 == 0) || (iVar5 = strcmp(pcVar11,"pt"), iVar5 == 0)) {
                        uVar8 = FUN_00428b90(param_1);
                        if (**(char **)(param_1 + 0x18) == 'I') {
                          uVar16 = FUN_004255a4(param_1);
                          uVar8 = FUN_004245e0(param_1,4,uVar8,uVar16);
                        }
                      }
                      else {
                        uVar8 = FUN_00429efc(param_1);
                      }
                    }
                    /* try { // try from 0042bd24 to 0052bd27 has its CatchHandler @ 0042bf68 */
                    uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar8);
                    lVar13 = FUN_004245e0(param_1,0x37,piVar15,uVar7);
                    break;
                  case 3:
                    pcVar11 = (char *)0x0;
switchD_0042bc6c_caseD_3:
                    iVar5 = strcmp(pcVar11,"qu");
                    if (iVar5 == 0) {
                      uVar7 = FUN_00429efc(param_1);
                      uVar8 = FUN_00429efc(param_1);
                      uVar16 = FUN_00429efc(param_1);
                    }
                    else {
                      if ((*pcVar11 != 'n') || ((pcVar11[1] != 'a' && (pcVar11[1] != 'w'))))
                      goto LAB_0042bc80;
                      uVar7 = FUN_00426a90(param_1,0x5f);
                      uVar8 = FUN_004271e4(param_1);
                      pcVar11 = *(char **)(param_1 + 0x18);
                      cVar17 = *pcVar11;
                    /* try { // try from 0042be80 to 0052bebb has its CatchHandler @ 0042bb54 */
                      if (cVar17 != 'E') {
                        if (cVar17 == 'p') {
                          lVar13 = 0;
                          if (pcVar11[1] == 'i') {
                            *(char **)(param_1 + 0x18) = pcVar11 + 2;
                            uVar16 = FUN_00426a90(param_1,0x45);
                            goto LAB_0042beac;
                          }
                        }
                        else {
                          if (cVar17 != 'i') goto LAB_0042bc80;
                          lVar13 = 0;
                          if (pcVar11[1] == 'l') {
                            uVar16 = FUN_00429efc(param_1);
                            goto LAB_0042beac;
                          }
                        }
                        break;
                      }
                      uVar16 = 0;
                      *(char **)(param_1 + 0x18) = pcVar11 + 1;
                    }
LAB_0042beac:
                    uVar8 = FUN_004245e0(param_1,0x3b,uVar8,uVar16);
                    /* try { // try from 0042bec4 to 0052bec7 has its CatchHandler @ 0042bf8c */
                    /* try { // try from 0042bed0 to 0052bed3 has its CatchHandler @ 0042bf84 */
                    uVar7 = FUN_004245e0(param_1,0x3a,uVar7,uVar8);
                    /* try { // try from 0042bedc to 0052bedf has its CatchHandler @ 0042bf68 */
                    /* catch() { ... } // from try @ 0042bcb0 with catch @ 0042bee4 */
                    lVar13 = FUN_004245e0(param_1,0x39,piVar15,uVar7);
                  }
                  break;
                }
                if (iVar5 != 0x33) goto LAB_0042bc80;
                if (**(char **)(param_1 + 0x18) == '_') {
                  *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
                  uVar7 = FUN_00426a90(param_1,0x45);
                  goto LAB_0042b178;
                }
switchD_0042bc10_caseD_1:
                uVar7 = FUN_00429efc(param_1);
              }
LAB_0042b178:
              lVar13 = FUN_004245e0(param_1,0x36,piVar15,uVar7);
            }
          }
        }
        else {
          if (9 < (byte)(cVar17 - 0x30U)) {
            if (cVar17 != 'o') goto LAB_0042b110;
            if (pcVar11[1] != 'n') goto LAB_0042b130;
            *(char **)(param_1 + 0x18) = pcVar11 + 2;
          }
          lVar13 = FUN_00428b90(param_1);
          if ((lVar13 != 0) && (**(char **)(param_1 + 0x18) == 'I')) {
            uVar7 = FUN_004255a4(param_1);
                    /* catch() { ... } // from try @ 0042b06c with catch @ 0042b318
                       catch() { ... } // from try @ 0042b0c8 with catch @ 0042b318 */
            lVar13 = FUN_004245e0(param_1,4,lVar13,uVar7);
          }
        }
        break;
      default:
        goto switchD_0042c218_default;
      }
    }
  }
  else {
                    /* try { // try from 0042ab18 to 0052ab1b has its CatchHandler @ 0042ab54 */
    if ((*pcVar11 != 'n') || ((pcVar11[1] != 'a' && (pcVar11[1] != 'w'))))
    goto switchD_0042aaac_default;
    piVar12 = (int *)FUN_00426a90(param_1,0x5f);
    lVar9 = FUN_004271e4(param_1);
    pcVar11 = *(char **)(param_1 + 0x18);
                    /* try { // try from 0042ab4c to 0052ab4f has its CatchHandler @ 0042a71c */
    cVar17 = *pcVar11;
                    /* catch() { ... } // from try @ 0042a814 with catch @ 0042ab54
                       catch() { ... } // from try @ 0042a8a4 with catch @ 0042ab54
                       catch() { ... } // from try @ 0042ab18 with catch @ 0042ab54 */
    if (cVar17 == 'E') {
      lVar13 = 0;
      *(char **)(param_1 + 0x18) = pcVar11 + 1;
                    /* try { // try from 0042b3e0 to 0052b3e3 has its CatchHandler @ 0042b7d0 */
    }
    else if (cVar17 == 'p') {
      if (pcVar11[1] != 'i') goto switchD_0042aaac_default;
      *(char **)(param_1 + 0x18) = pcVar11 + 2;
      lVar13 = FUN_00426a90(param_1,0x45);
    }
    else {
      if ((cVar17 != 'i') || (pcVar11[1] != 'l')) {
switchD_0042aaac_default:
        *(undefined4 *)(param_1 + 0x54) = uVar1;
        return 0;
      }
                    /* try { // try from 0042ab78 to 0052ab7b has its CatchHandler @ 0042a71c */
      lVar13 = FUN_00429efc(param_1);
                    /* catch() { ... } // from try @ 0042a7a8 with catch @ 0042ab7c */
    }
  }
switchD_0042bc10_default:
                    /* try { // try from 0042ab8c to 0052ab8f has its CatchHandler @ 0042a71c */
                    /* catch() { ... } // from try @ 0042a830 with catch @ 0042ab90 */
  uVar7 = FUN_004245e0(param_1,0x3b,lVar9,lVar13);
  uVar7 = FUN_004245e0(param_1,0x3a,piVar12,uVar7);
                    /* catch() { ... } // from try @ 0042abcc with catch @ 0042abb8
                       catch() { ... } // from try @ 0042ad44 with catch @ 0042abb8
                       catch() { ... } // from try @ 0042af54 with catch @ 0042abb8
                       catch() { ... } // from try @ 0042af98 with catch @ 0042abb8 */
  lVar9 = FUN_004245e0(param_1,0x39,piVar10,uVar7);
  goto LAB_0042a86c;
switchD_0042c59c_caseD_1:
  cVar17 = *pcVar11;
  if (((cVar17 == 'm') || (cVar17 == 'p')) && (pcVar11[1] == cVar17)) {
    if (**(char **)(param_1 + 0x18) != '_') {
      uVar7 = FUN_00429efc(param_1);
      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
      uVar8 = 0x36;
      goto LAB_0042b008;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
switchD_0042c218_caseD_1:
  uVar7 = FUN_00429efc(param_1);
                    /* try { // try from 0042affc to 0052b01f has its CatchHandler @ 0042afc8 */
LAB_0042b000:
  uVar8 = 0x36;
LAB_0042b008:
  piVar12 = (int *)FUN_004245e0(param_1,uVar8,piVar15,uVar7);
  pcVar11 = *(char **)(param_1 + 0x18);
  cVar17 = *pcVar11;
  goto LAB_0042b01c;
switchD_0042bc6c_caseD_1:
  cVar17 = *pcVar11;
  if (((cVar17 == 'm') || (cVar17 == 'p')) && (pcVar11[1] == cVar17)) {
    if (**(char **)(param_1 + 0x18) != '_') {
      uVar7 = FUN_00429efc(param_1);
      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
      goto LAB_0042b178;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_0042bc10_caseD_1;
switchD_0042b834_caseD_1:
  cVar17 = *pcVar11;
                    /* try { // try from 0042bb50 to 0052bb53 has its CatchHandler @ 0042ba4c */
                    /* catch() { ... } // from try @ 0042bb88 with catch @ 0042bb54
                       catch() { ... } // from try @ 0042be80 with catch @ 0042bb54
                       catch() { ... } // from try @ 0042bf64 with catch @ 0042bb54 */
  if (((cVar17 == 'm') || (cVar17 == 'p')) && (pcVar11[1] == cVar17)) {
    if (**(char **)(param_1 + 0x18) != '_') {
      uVar7 = FUN_00429efc(param_1);
                    /* try { // try from 0042bb88 to 0052bb8b has its CatchHandler @ 0042bb54 */
      uVar7 = FUN_004245e0(param_1,0x38,uVar7,uVar7);
      goto LAB_0042a994;
    }
    *(char **)(param_1 + 0x18) = *(char **)(param_1 + 0x18) + 1;
  }
  goto switchD_0042b7dc_caseD_1;
}


==================================================================

### FUNC 0042cdc8 (14860 bytes) name=FUN_0042cdc8

void FUN_0042cdc8(undefined1 *param_1,uint param_2,int *param_3)

{
  char *pcVar1;
  byte *pbVar2;
  int *piVar3;
  undefined1 uVar4;
  char cVar5;
  bool bVar6;
  int iVar7;
  long lVar8;
  long *plVar9;
  int *piVar10;
  long lVar11;
  char *pcVar12;
  size_t sVar13;
  undefined8 *puVar14;
  int iVar15;
  uint uVar16;
  long lVar17;
  long lVar18;
  long lVar19;
  int *piVar20;
  undefined8 *puVar21;
  long *plVar22;
  long **pplVar23;
  long **pplVar24;
  ulong uVar25;
  byte bVar26;
  int iVar27;
  size_t sVar28;
  undefined1 *puVar29;
  byte *pbVar30;
  byte *pbVar31;
  uint uVar32;
  undefined8 unaff_x22;
  ulong uVar33;
  ulong uVar34;
  undefined8 uVar35;
  undefined8 uVar36;
  long local_90;
  int *local_88;
  long *local_80;
  int *local_78;
  long local_70 [2];
  long **local_60;
  int *local_58;
  long local_50 [2];
  long ***local_40;
  int *local_38;
  undefined4 local_30;
  undefined4 uStack_2c;
  long local_28;
  long *local_20;
  int *local_18;
  ulong local_10;
  long local_8;
  
  if (param_3 == (int *)0x0) goto LAB_0042ce44;
  if (*(int *)(param_1 + 0x130) != 0) {
    return;
  }
  iVar7 = *param_3;
                    /* try { // try from 0042cdfc to 0052cdff has its CatchHandler @ 0042cf28 */
  switch(iVar7) {
  case 0:
    if ((param_2 >> 2 & 1) == 0) {
      iVar7 = param_3[4];
      lVar11 = *(long *)(param_3 + 2);
      if ((long)iVar7 != 0) {
        lVar19 = 0;
        lVar18 = *(long *)(param_1 + 0x100);
        do {
          uVar4 = *(undefined1 *)(lVar11 + lVar19);
          if (lVar18 == 0xff) {
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            lVar8 = 1;
            lVar18 = 0;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          }
          else {
            lVar8 = lVar18 + 1;
          }
          *(long *)(param_1 + 0x100) = lVar8;
          lVar19 = lVar19 + 1;
          param_1[lVar18] = uVar4;
                    /* catch() { ... } // from try @ 0042cafc with catch @ 0042ce94 */
          param_1[0x108] = uVar4;
          lVar18 = lVar8;
        } while (iVar7 != lVar19);
      }
    }
    else {
      pbVar30 = *(byte **)(param_3 + 2);
      pbVar2 = pbVar30 + param_3[4];
      while (pbVar30 < pbVar2) {
                    /* try { // try from 0042f4d4 to 0052f4d7 has its CatchHandler @ 0042f334 */
        bVar26 = *pbVar30;
        if (((3 < (long)pbVar2 - (long)pbVar30) && (bVar26 == 0x5f)) &&
           ((pbVar30[1] == 0x5f &&
            ((bVar26 = 0x5f, pbVar30[2] == 0x55 && (pbVar31 = pbVar30 + 3, pbVar31 < pbVar2)))))) {
          uVar34 = 0;
          do {
            bVar26 = *pbVar31;
            uVar16 = (uint)bVar26;
            uVar32 = uVar16 - 0x30;
            if (9 < (uVar32 & 0xff)) {
              if ((uVar16 - 0x41 & 0xff) < 6) {
                    /* try { // try from 0042f518 to 0052f51b has its CatchHandler @ 0042f5c8 */
                uVar32 = uVar16 - 0x37;
              }
              else {
                if (5 < (uVar16 - 0x61 & 0xff)) {
                  if (((pbVar31 < pbVar2) && (bVar26 == 0x5f)) && (uVar34 < 0x100)) {
                    lVar11 = *(long *)(param_1 + 0x100);
                    if (lVar11 == 0xff) {
                      param_1[0xff] = 0;
                      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                      *(undefined8 *)(param_1 + 0x100) = 0;
                      lVar11 = 0;
                      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
                    }
                    *(long *)(param_1 + 0x100) = lVar11 + 1;
                    param_1[lVar11] = (char)uVar34;
                    param_1[0x108] = (char)uVar34;
                    goto LAB_0042f4c4;
                  }
                  break;
                }
                uVar32 = bVar26 - 0x57;
              }
            }
            pbVar31 = pbVar31 + 1;
                    /* try { // try from 0042f520 to 0052f5b3 has its CatchHandler @ 0042f334 */
            uVar34 = (long)(int)uVar32 + uVar34 * 0x10;
          } while (pbVar31 != pbVar2);
          bVar26 = 0x5f;
        }
        lVar11 = *(long *)(param_1 + 0x100);
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar19 = 1;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar19 = lVar11 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar19;
        param_1[lVar11] = bVar26;
        param_1[0x108] = bVar26;
        pbVar31 = pbVar30;
LAB_0042f4c4:
        pbVar30 = pbVar31 + 1;
      }
    }
    break;
  case 1:
  case 2:
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    if ((param_2 >> 2 & 1) == 0) {
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        *param_1 = 0x3a;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_0042cf18:
        lVar11 = lVar19 + 1;
      }
      else {
        lVar19 = lVar11 + 1;
                    /* try { // try from 0042cefc to 0052ceff has its CatchHandler @ 0042c3c0 */
        *(long *)(param_1 + 0x100) = lVar19;
                    /* catch() { ... } // from try @ 0042cd5c with catch @ 0042cf00
                       catch() { ... } // from try @ 0042ce14 with catch @ 0042cf00 */
        param_1[lVar11] = 0x3a;
        param_1[0x108] = 0x3a;
        if (lVar19 != 0xff) goto LAB_0042cf18;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 1;
        lVar19 = 0;
                    /* try { // try from 0042e774 to 0052e777 has its CatchHandler @ 0042e660 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar19] = 0x3a;
      param_1[0x108] = 0x3a;
    }
    else {
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x2e;
      param_1[0x108] = 0x2e;
    }
                    /* catch() { ... } // from try @ 0042cd6c with catch @ 0042cf28
                       catch() { ... } // from try @ 0042cdfc with catch @ 0042cf28 */
    piVar10 = *(int **)(param_3 + 4);
    if (*piVar10 == 0x46) {
      FUN_00424f20(param_1,&DAT_0047bc90);
      FUN_00425128(param_1,(long)(piVar10[4] + 1));
      FUN_00424f20(param_1,&DAT_0047bca0);
      piVar10 = *(int **)(piVar10 + 2);
    }
    FUN_0042cdc8(param_1,param_2,piVar10);
    break;
  case 3:
    uVar36 = *(undefined8 *)(param_1 + 0x128);
                    /* catch() { ... } // from try @ 0042cdb8 with catch @ 0042cf4c */
    *(undefined8 *)(param_1 + 0x128) = 0;
    piVar10 = *(int **)(param_3 + 2);
    if (piVar10 != (int *)0x0) {
      iVar7 = *piVar10;
                    /* catch() { ... } // from try @ 0042cd1c with catch @ 0042cf60
                       catch() { ... } // from try @ 0042cd4c with catch @ 0042cf60 */
      lVar11 = *(long *)(param_1 + 0x120);
      local_80 = (long *)0x0;
      *(long ***)(param_1 + 0x128) = &local_80;
      local_78 = piVar10;
      local_70[0]._0_4_ = 0;
      local_70[1] = lVar11;
      if (iVar7 - 0x1cU < 5) {
                    /* catch() { ... } // from try @ 0042ca0c with catch @ 0042cf84 */
        piVar10 = *(int **)(piVar10 + 2);
        if (piVar10 != (int *)0x0) {
          iVar7 = *piVar10;
          local_60 = &local_80;
                    /* catch() { ... } // from try @ 0042ca98 with catch @ 0042cf98 */
          *(long ****)(param_1 + 0x128) = &local_60;
          local_58 = piVar10;
          local_50[0]._0_4_ = 0;
                    /* catch() { ... } // from try @ 0042c438 with catch @ 0042cfac
                       catch() { ... } // from try @ 0042cc70 with catch @ 0042cfac
                       catch() { ... } // from try @ 0042cd40 with catch @ 0042cfac */
          local_50[1] = lVar11;
          if (4 < iVar7 - 0x1cU) {
            uVar34 = 2;
            goto LAB_00430434;
          }
                    /* catch() { ... } // from try @ 0042c998 with catch @ 0042cfb4 */
          piVar10 = *(int **)(piVar10 + 2);
          if (piVar10 != (int *)0x0) {
            iVar7 = *piVar10;
                    /* catch() { ... } // from try @ 0042cbfc with catch @ 0042cfc8
                       catch() { ... } // from try @ 0042cd28 with catch @ 0042cfc8 */
            local_40 = &local_60;
                    /* catch() { ... } // from try @ 0042c49c with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042c9a0 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042ca14 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042caa0 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042cb04 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042cd88 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042cdc0 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042ce08 with catch @ 0042cfd0
                       catch() { ... } // from try @ 0042ce20 with catch @ 0042cfd0 */
            local_38 = piVar10;
            *(long **)(param_1 + 0x128) = local_50 + 2;
            local_30 = 0;
            local_28 = lVar11;
            if (4 < iVar7 - 0x1cU) {
              uVar34 = 3;
              goto LAB_00430434;
            }
            piVar10 = *(int **)(piVar10 + 2);
            if (piVar10 != (int *)0x0) {
                    /* catch() { ... } // from try @ 0042d020 with catch @ 0042cff0
                       catch() { ... } // from try @ 0042d048 with catch @ 0042cff0
                       catch() { ... } // from try @ 0042d0d8 with catch @ 0042cff0 */
              iVar7 = *piVar10;
              local_20 = local_50 + 2;
              local_18 = piVar10;
              *(long ***)(param_1 + 0x128) = &local_20;
              local_10 = local_10 & 0xffffffff00000000;
              local_8 = lVar11;
              if (4 < iVar7 - 0x1cU) {
                uVar34 = 4;
                goto LAB_00430434;
              }
            }
          }
        }
      }
      else {
        uVar34 = 1;
LAB_00430434:
        uVar33 = uVar34;
        if (iVar7 == 4) {
                    /* try { // try from 0043065c to 0053065f has its CatchHandler @ 00430608 */
          *(long **)(param_1 + 0x120) = &local_90;
          local_90 = lVar11;
          local_88 = piVar10;
LAB_00430554:
          FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
          if (*piVar10 == 4) {
            *(long *)(param_1 + 0x120) = local_90;
          }
          iVar7 = (int)uVar33;
          uVar32 = iVar7 - 1;
          if ((int)local_70[(ulong)uVar32 * 4] == 0) {
                    /* catch() { ... } // from try @ 00430518 with catch @ 004305f4 */
            FUN_00424c1c(param_1,0x20);
                    /* try { // try from 00430604 to 00530607 has its CatchHandler @ 00430484 */
                    /* catch() { ... } // from try @ 0043065c with catch @ 00430608
                       catch() { ... } // from try @ 004306a8 with catch @ 00430608
                       catch() { ... } // from try @ 004307ac with catch @ 00430608 */
            FUN_004307d4(param_1,param_2,(&local_78)[(ulong)uVar32 * 4]);
          }
          if (uVar32 != 0) {
            uVar32 = iVar7 - 2;
            if ((int)local_70[(ulong)uVar32 * 4] == 0) {
              FUN_00424c1c(param_1,0x20);
              FUN_004307d4(param_1,param_2,(&local_78)[(ulong)uVar32 * 4]);
            }
            if (uVar32 != 0) {
              uVar32 = iVar7 - 3;
              if ((int)local_70[(ulong)uVar32 * 4] == 0) {
                FUN_00424c1c(param_1,0x20);
                FUN_004307d4(param_1,param_2,(&local_78)[(ulong)uVar32 * 4]);
              }
              if ((uVar32 != 0) && ((int)local_70[0] == 0)) {
                FUN_00424c1c(param_1,0x20);
                FUN_004307d4(param_1,param_2,local_78);
                *(undefined8 *)(param_1 + 0x128) = uVar36;
                return;
              }
            }
          }
          *(undefined8 *)(param_1 + 0x128) = uVar36;
          return;
        }
        if (iVar7 != 2) goto LAB_00430554;
        piVar20 = *(int **)(piVar10 + 4);
        if (*piVar20 == 0x46) {
          piVar20 = *(int **)(piVar20 + 2);
        }
        if (4 < *piVar20 - 0x1cU) goto LAB_00430554;
        iVar7 = (int)uVar34;
        if (iVar7 != 4) {
          uVar33 = (ulong)(iVar7 - 1);
                    /* catch() { ... } // from try @ 004303a8 with catch @ 00430470 */
          pplVar23 = &local_80 + uVar34 * 4;
          *(long ***)(param_1 + 0x128) = pplVar23;
          pplVar24 = &local_80 + uVar33 * 4;
                    /* try { // try from 00430480 to 00530483 has its CatchHandler @ 0043031c */
          uVar25 = (ulong)(iVar7 + 1U);
                    /* catch() { ... } // from try @ 004304d4 with catch @ 00430484
                       catch() { ... } // from try @ 00430520 with catch @ 00430484
                       catch() { ... } // from try @ 00430604 with catch @ 00430484 */
          piVar3 = (&local_78)[uVar33 * 4];
          *pplVar23 = *pplVar24;
          (&local_78)[uVar34 * 4] = piVar3;
          lVar19 = local_70[uVar33 * 4 + 1];
          local_70[uVar34 * 4] = local_70[uVar33 * 4];
          local_70[uVar34 * 4 + 1] = lVar19;
          (&local_80)[uVar34 * 4] = (long *)pplVar24;
          (&local_78)[uVar33 * 4] = piVar20;
          *(undefined4 *)(local_70 + uVar33 * 4) = 0;
          local_70[uVar33 * 4 + 1] = lVar11;
          piVar20 = *(int **)(piVar20 + 2);
          uVar33 = uVar25;
          if (4 < *piVar20 - 0x1cU) goto LAB_00430554;
          if (iVar7 + 1U != 4) {
            uVar33 = (ulong)(iVar7 + 2U);
            pplVar24 = &local_80 + uVar25 * 4;
            *(long ***)(param_1 + 0x128) = pplVar24;
            piVar3 = (&local_78)[uVar34 * 4];
                    /* try { // try from 004304d4 to 005304d7 has its CatchHandler @ 00430484 */
            *pplVar24 = *pplVar23;
            (&local_78)[uVar25 * 4] = piVar3;
            lVar19 = local_70[uVar34 * 4 + 1];
            local_70[uVar25 * 4] = local_70[uVar34 * 4];
            local_70[uVar25 * 4 + 1] = lVar19;
            (&local_80)[uVar25 * 4] = (long *)pplVar23;
            (&local_78)[uVar34 * 4] = piVar20;
            *(undefined4 *)(local_70 + uVar34 * 4) = 0;
            local_70[uVar34 * 4 + 1] = lVar11;
            piVar20 = *(int **)(piVar20 + 2);
            if (4 < *piVar20 - 0x1cU) goto LAB_00430554;
            if (iVar7 + 2U != 4) {
              local_10 = CONCAT44(uStack_2c,local_30);
              local_18 = local_38;
                    /* try { // try from 00430518 to 0053051b has its CatchHandler @ 004305f4 */
              local_20 = local_50 + 2;
                    /* try { // try from 00430520 to 005305ab has its CatchHandler @ 00430484 */
              local_8 = local_28;
              *(long ***)(param_1 + 0x128) = &local_20;
              local_30 = 0;
              if (4 < **(int **)(piVar20 + 2) - 0x1cU) {
                uVar33 = 4;
                local_38 = piVar20;
                local_28 = lVar11;
                goto LAB_00430554;
              }
            }
          }
        }
      }
    }
    *(undefined4 *)(param_1 + 0x130) = 1;
    break;
  case 4:
    uVar36 = *(undefined8 *)(param_1 + 0x160);
    uVar35 = *(undefined8 *)(param_1 + 0x128);
    *(int **)(param_1 + 0x160) = param_3;
    *(undefined8 *)(param_1 + 0x128) = 0;
    piVar10 = *(int **)(param_3 + 2);
    if (((((param_2 >> 2 & 1) == 0) || (*piVar10 != 0)) || (piVar10[4] != 6)) ||
       (iVar7 = strncmp(*(char **)(piVar10 + 2),"JArray",6), iVar7 != 0)) {
      FUN_0042cdc8(param_1,param_2,piVar10);
      if (param_1[0x108] == '<') {
        FUN_00424c1c(param_1,0x20);
      }
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x3c;
      param_1[0x108] = 0x3c;
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
      if (param_1[0x108] == '>') {
        FUN_00424c1c(param_1,0x20);
      }
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x3e;
      param_1[0x108] = 0x3e;
    }
    else {
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
      FUN_00424f20(param_1,&DAT_00470b38);
    }
    *(undefined8 *)(param_1 + 0x128) = uVar35;
    *(undefined8 *)(param_1 + 0x160) = uVar36;
    break;
  case 5:
    piVar10 = (int *)FUN_00424d1c(param_1,param_3 + 2);
    if (piVar10 != (int *)0x0) {
      if (*piVar10 != 0x2f) {
LAB_0042dfe0:
        puVar21 = *(undefined8 **)(param_1 + 0x120);
        *(undefined8 *)(param_1 + 0x120) = *puVar21;
        FUN_0042cdc8(param_1,param_2);
        *(undefined8 **)(param_1 + 0x120) = puVar21;
        return;
      }
      iVar7 = *(int *)(param_1 + 0x134);
      while (0 < iVar7) {
        piVar10 = *(int **)(piVar10 + 4);
        iVar7 = iVar7 + -1;
                    /* try { // try from 0042f46c to 0052f46f has its CatchHandler @ 0042f5a0 */
        if ((piVar10 == (int *)0x0) || (*piVar10 != 0x2f)) goto LAB_0042ce44;
      }
      if ((iVar7 == 0) && (*(long *)(piVar10 + 2) != 0)) goto LAB_0042dfe0;
    }
    goto LAB_0042ce44;
  case 6:
    lVar19 = *(long *)(param_3 + 2);
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar19 != 0) {
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x7b;
        lVar11 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x70;
LAB_0042eebc:
        lVar18 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar18;
        param_1[lVar11] = 0x61;
        param_1[0x108] = 0x61;
        if (lVar18 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x72;
          lVar11 = 2;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          param_1[1] = 0x6d;
        }
        else {
LAB_0042eed8:
          lVar8 = lVar18 + 1;
          *(long *)(param_1 + 0x100) = lVar8;
          param_1[lVar18] = 0x72;
          param_1[0x108] = 0x72;
          if (lVar8 != 0xff) goto LAB_0042eef4;
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x6d;
          lVar11 = 1;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
      }
      else {
        lVar18 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar18;
        param_1[lVar11] = 0x7b;
        param_1[0x108] = 0x7b;
        if (lVar18 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x70;
          lVar18 = 2;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          param_1[1] = 0x61;
          goto LAB_0042eed8;
        }
        lVar11 = lVar11 + 2;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar18] = 0x70;
        param_1[0x108] = 0x70;
        if (lVar11 != 0xff) goto LAB_0042eebc;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x61;
        lVar8 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x72;
LAB_0042eef4:
        lVar11 = lVar8 + 1;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar8] = 0x6d;
        param_1[0x108] = 0x6d;
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar18 = 1;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          goto LAB_0042ef14;
        }
      }
      lVar18 = lVar11 + 1;
LAB_0042ef14:
      *(long *)(param_1 + 0x100) = lVar18;
      param_1[lVar11] = 0x23;
      param_1[0x108] = 0x23;
      sVar28 = 0;
      sprintf((char *)&local_80,"%ld",lVar19);
      sVar13 = strlen((char *)&local_80);
      lVar11 = *(long *)(param_1 + 0x100);
      lVar19 = lVar11;
      if (sVar13 != 0) {
        do {
          cVar5 = *(char *)((long)&local_80 + sVar28);
          if (lVar19 == 0xff) {
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            lVar11 = 1;
            lVar19 = 0;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          }
          else {
            lVar11 = lVar19 + 1;
          }
          *(long *)(param_1 + 0x100) = lVar11;
          sVar28 = sVar28 + 1;
          param_1[lVar19] = cVar5;
          param_1[0x108] = cVar5;
          lVar19 = lVar11;
        } while (sVar28 != sVar13);
      }
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x7d;
      param_1[0x108] = 0x7d;
      return;
    }
                    /* try { // try from 0042d804 to 0052d807 has its CatchHandler @ 0042dbc4 */
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 0x74;
      lVar11 = 2;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x68;
LAB_0042d844:
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x69;
      param_1[0x108] = 0x69;
                    /* try { // try from 0042d85c to 0052d86b has its CatchHandler @ 0042db98 */
      if (lVar19 != 0xff) goto LAB_0042d860;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar11 = 1;
      lVar19 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
                    /* try { // try from 0042d80c to 0052d80f has its CatchHandler @ 0042d100 */
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x74;
      param_1[0x108] = 0x74;
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x68;
        lVar19 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x69;
      }
      else {
        lVar11 = lVar11 + 2;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar19] = 0x68;
        param_1[0x108] = 0x68;
        if (lVar11 != 0xff) goto LAB_0042d844;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x69;
        lVar19 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
LAB_0042d860:
      lVar11 = lVar19 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar11;
    param_1[lVar19] = 0x73;
    param_1[0x108] = 0x73;
    break;
  case 7:
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    break;
  case 8:
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x7e;
    param_1[0x108] = 0x7e;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    break;
  case 9:
                    /* try { // try from 0042df58 to 0052df5b has its CatchHandler @ 0042de70 */
    pcVar12 = "vtable for ";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
                    /* try { // try from 0042df9c to 0052dfc7 has its CatchHandler @ 0042e230 */
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
                    /* try { // try from 0042df74 to 0052df77 has its CatchHandler @ 0042e208 */
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 10:
    puVar29 = &DAT_0047bcc0;
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      uVar4 = *puVar29;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      puVar29 = puVar29 + 1;
      param_1[lVar11] = uVar4;
      param_1[0x108] = uVar4;
      lVar11 = lVar19;
    } while (puVar29 != &LAB_0047bcc8);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0xb:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "construction vtable for "[lVar11];
      if (lVar19 == 0xff) {
                    /* try { // try from 0042e134 to 0052e137 has its CatchHandler @ 0042e254 */
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 0042e13c to 0052e13f has its CatchHandler @ 0042de70 */
        lVar18 = 1;
        lVar19 = 0;
                    /* try { // try from 0042e14c to 0052e14f has its CatchHandler @ 0042e208 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x18);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar11 = 2;
      *param_1 = 0x2d;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x69;
LAB_0042ec90:
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x6e;
      param_1[0x108] = 0x6e;
      if (lVar19 != 0xff) goto LAB_0042ecac;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar11 = 1;
      lVar19 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x2d;
      param_1[0x108] = 0x2d;
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x69;
        lVar19 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x6e;
      }
      else {
        lVar11 = lVar11 + 2;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar19] = 0x69;
        param_1[0x108] = 0x69;
        if (lVar11 != 0xff) goto LAB_0042ec90;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x6e;
        lVar19 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
LAB_0042ecac:
      lVar11 = lVar19 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar11;
    param_1[lVar19] = 0x2d;
    param_1[0x108] = 0x2d;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    break;
  case 0xc:
    pcVar12 = "typeinfo for ";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
                    /* try { // try from 0042e9dc to 0052e9df has its CatchHandler @ 0042e660 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
                    /* catch() { ... } // from try @ 0042e790 with catch @ 0042e9e0
                       catch() { ... } // from try @ 0042e860 with catch @ 0042e9e0
                       catch() { ... } // from try @ 0042e960 with catch @ 0042e9e0 */
    break;
  case 0xd:
                    /* try { // try from 0042d2ac to 0052d2af has its CatchHandler @ 0042dc00 */
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
                    /* try { // try from 0042d2b4 to 0052d30b has its CatchHandler @ 0042d100 */
    do {
      uVar4 = (&LAB_0047bd00)[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = uVar4;
      param_1[0x108] = uVar4;
      lVar19 = lVar18;
    } while (lVar11 != 0x12);
                    /* try { // try from 0042e9c8 to 0052e9cb has its CatchHandler @ 0042e660 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
                    /* catch() { ... } // from try @ 0042e948 with catch @ 0042e9cc */
    break;
  case 0xe:
    pcVar12 = "typeinfo fn for ";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
                    /* try { // try from 0042d34c to 0052d34f has its CatchHandler @ 0042dbd8 */
      cVar5 = *pcVar12;
                    /* try { // try from 0042d354 to 0052d7cf has its CatchHandler @ 0042d100 */
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0xf:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "non-virtual thunk to "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x15);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x10:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "virtual thunk to "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x11);
                    /* catch() { ... } // from try @ 0042e7b8 with catch @ 0042e988 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x11:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "covariant return thunk to "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x1a);
                    /* try { // try from 0042e96c to 0052e96f has its CatchHandler @ 0042e660 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x12:
    pcVar12 = "java Class for ";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
                    /* try { // try from 0042e960 to 0052e963 has its CatchHandler @ 0042e9e0 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x13:
    FUN_00424f20(param_1,"guard variable for ");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x14:
    FUN_00424f20(param_1,"TLS init function for ");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x15:
    FUN_00424f20(param_1,"TLS wrapper function for ");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x16:
    FUN_00424f20(param_1,"reference temporary #");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    FUN_00424f20(param_1," for ");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x17:
    FUN_00424f20(param_1,"hidden alias for ");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x18:
    iVar7 = param_3[4];
    lVar11 = *(long *)(param_3 + 2);
    if ((long)iVar7 != 0) {
      lVar19 = 0;
      lVar18 = *(long *)(param_1 + 0x100);
      do {
        uVar4 = *(undefined1 *)(lVar11 + lVar19);
        if (lVar18 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar8 = 1;
          lVar18 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar8 = lVar18 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar8;
        lVar19 = lVar19 + 1;
        param_1[lVar18] = uVar4;
        param_1[0x108] = uVar4;
        lVar18 = lVar8;
      } while (iVar7 != lVar19);
    }
    break;
  case 0x19:
  case 0x1a:
  case 0x1b:
    local_80 = *(long **)(param_1 + 0x128);
    plVar22 = local_80;
    if (local_80 == (long *)0x0) {
      local_80 = (long *)0x0;
      bVar6 = false;
    }
    else {
      do {
        if ((int)plVar22[2] == 0) {
          if (2 < *(int *)plVar22[1] - 0x19U) break;
          if (iVar7 == *(int *)plVar22[1]) {
            FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
            return;
          }
        }
        plVar22 = (long *)*plVar22;
      } while (plVar22 != (long *)0x0);
      bVar6 = false;
    }
    goto LAB_0042d6c4;
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
  case 0x20:
  case 0x21:
  case 0x22:
  case 0x25:
  case 0x26:
    local_80 = *(long **)(param_1 + 0x128);
    bVar6 = false;
LAB_0042d6c4:
    local_70[1] = *(long *)(param_1 + 0x120);
    *(long ***)(param_1 + 0x128) = &local_80;
LAB_0042d6e0:
    lVar11 = *(long *)(param_3 + 2);
    local_78 = param_3;
LAB_0042d6e4:
    piVar10 = local_78;
    local_70[0]._0_4_ = 0;
    FUN_0042cdc8(param_1,param_2,lVar11);
    if ((int)local_70[0] == 0) {
      FUN_004307d4(param_1,param_2,piVar10);
    }
    *(long **)(param_1 + 0x128) = local_80;
    if (bVar6) {
      *(undefined8 *)(param_1 + 0x120) = unaff_x22;
    }
    break;
  case 0x23:
  case 0x24:
    piVar10 = *(int **)(param_3 + 2);
    bVar6 = false;
    iVar7 = *piVar10;
    if (iVar7 == 5) {
      uVar32 = *(uint *)(param_1 + 0x148);
      puVar21 = *(undefined8 **)(param_1 + 0x140);
      if ((int)uVar32 < 1) {
LAB_0042f18c:
        if (*(int *)(param_1 + 0x14c) <= (int)uVar32) {
LAB_004306b8:
          *(undefined4 *)(param_1 + 0x130) = 1;
          return;
        }
        uVar34 = -(ulong)(uVar32 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar32 << 4;
        plVar22 = *(long **)(param_1 + 0x120);
        *(uint *)(param_1 + 0x148) = uVar32 + 1;
        *(int **)((long)puVar21 + uVar34) = piVar10;
        puVar21 = (undefined8 *)((long)puVar21 + uVar34 + 8);
        if (plVar22 != (long *)0x0) {
          uVar32 = *(uint *)(param_1 + 0x158);
          iVar7 = *(int *)(param_1 + 0x15c);
          if ((int)uVar32 < iVar7) {
            uVar34 = -(ulong)(uVar32 >> 0x1f) & 0xfffffff000000000 | (ulong)uVar32 << 4;
            puVar14 = puVar21;
            iVar27 = uVar32 + 1;
            do {
              iVar15 = iVar27;
              puVar21 = (undefined8 *)(*(long *)(param_1 + 0x150) + uVar34);
              puVar21[1] = plVar22[1];
              *puVar14 = puVar21;
              plVar22 = (long *)*plVar22;
              if (plVar22 == (long *)0x0) {
                *(int *)(param_1 + 0x158) = iVar15;
                goto LAB_0042f210;
              }
              uVar34 = uVar34 + 0x10;
              puVar14 = puVar21;
              iVar27 = iVar15 + 1;
            } while (iVar15 + 1 != iVar7 + 1);
            *(int *)(param_1 + 0x158) = iVar15;
          }
          goto LAB_004306b8;
        }
LAB_0042f210:
        *puVar21 = 0;
        bVar6 = false;
        piVar10 = (int *)FUN_00424d1c(param_1,piVar10 + 2);
        if (piVar10 == (int *)0x0) goto LAB_0042ce44;
LAB_0042f3d0:
        iVar7 = *piVar10;
        if (iVar7 != 0x2f) goto LAB_0042d720;
        iVar7 = *(int *)(param_1 + 0x134);
        while (0 < iVar7) {
          piVar10 = *(int **)(piVar10 + 4);
          iVar7 = iVar7 + -1;
                    /* try { // try from 0042f3f8 to 0052f3fb has its CatchHandler @ 0042f5b4 */
          if ((piVar10 == (int *)0x0) || (*piVar10 != 0x2f)) goto LAB_0042ce3c;
        }
                    /* try { // try from 0042f404 to 0052f45b has its CatchHandler @ 0042f334 */
        if ((iVar7 == 0) && (piVar10 = *(int **)(piVar10 + 2), piVar10 != (int *)0x0)) {
          iVar7 = *piVar10;
          goto LAB_0042d720;
        }
LAB_0042ce3c:
        if (!bVar6) goto LAB_0042ce44;
      }
      else {
        puVar14 = puVar21;
        if (piVar10 != (int *)*puVar21) {
          do {
            puVar14 = puVar14 + 2;
            if (puVar14 == puVar21 + ((ulong)(uVar32 - 1) + 1) * 2) goto LAB_0042f18c;
          } while (piVar10 != (int *)*puVar14);
        }
        unaff_x22 = *(undefined8 *)(param_1 + 0x120);
        *(undefined8 *)(param_1 + 0x120) = puVar14[1];
        bVar6 = true;
                    /* try { // try from 0042f3c4 to 0052f3c7 has its CatchHandler @ 0042f334 */
        piVar10 = (int *)FUN_00424d1c(param_1,piVar10 + 2);
        if (piVar10 != (int *)0x0) goto LAB_0042f3d0;
      }
      *(undefined8 *)(param_1 + 0x120) = unaff_x22;
LAB_0042ce44:
      *(undefined4 *)(param_1 + 0x130) = 1;
      return;
    }
LAB_0042d720:
    if ((iVar7 == 0x23) || (*param_3 == iVar7)) {
      local_80 = *(long **)(param_1 + 0x128);
      param_3 = piVar10;
      goto LAB_0042d6c4;
    }
    if (iVar7 != 0x24) {
      local_80 = *(long **)(param_1 + 0x128);
      goto LAB_0042d6c4;
    }
    lVar11 = *(long *)(piVar10 + 2);
    local_80 = *(long **)(param_1 + 0x128);
    local_70[1] = *(long *)(param_1 + 0x120);
    *(long ***)(param_1 + 0x128) = &local_80;
    local_78 = param_3;
    if (lVar11 == 0) goto LAB_0042d6e0;
    goto LAB_0042d6e4;
  case 0x27:
                    /* try { // try from 0042d020 to 0052d023 has its CatchHandler @ 0042cff0 */
    if ((param_2 >> 2 & 1) == 0) {
      lVar11 = (long)(int)(*(long **)(param_3 + 2))[1];
      lVar19 = **(long **)(param_3 + 2);
      if (lVar11 != 0) {
        lVar18 = 0;
        lVar8 = *(long *)(param_1 + 0x100);
        do {
          uVar4 = *(undefined1 *)(lVar19 + lVar18);
          if (lVar8 == 0xff) {
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            lVar17 = 1;
            lVar8 = 0;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          }
          else {
                    /* try { // try from 0042d040 to 0052d043 has its CatchHandler @ 0042d0c8 */
            lVar17 = lVar8 + 1;
          }
                    /* try { // try from 0042d048 to 0052d0c3 has its CatchHandler @ 0042cff0 */
          *(long *)(param_1 + 0x100) = lVar17;
          lVar18 = lVar18 + 1;
          param_1[lVar8] = uVar4;
          param_1[0x108] = uVar4;
          lVar8 = lVar17;
        } while (lVar11 != lVar18);
      }
    }
    else {
      lVar11 = (long)*(int *)(*(long *)(param_3 + 2) + 0x18);
      lVar19 = *(long *)(*(long *)(param_3 + 2) + 0x10);
      if (lVar11 != 0) {
        lVar18 = 0;
        lVar8 = *(long *)(param_1 + 0x100);
        do {
          uVar4 = *(undefined1 *)(lVar19 + lVar18);
          if (lVar8 == 0xff) {
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            lVar17 = 1;
            lVar8 = 0;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          }
          else {
            lVar17 = lVar8 + 1;
          }
          *(long *)(param_1 + 0x100) = lVar17;
          lVar18 = lVar18 + 1;
          param_1[lVar8] = uVar4;
          param_1[0x108] = uVar4;
          lVar8 = lVar17;
        } while (lVar11 != lVar18);
      }
    }
    break;
  case 0x28:
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x29:
    if ((param_2 >> 5 & 1) == 0) {
      if ((*(long *)(param_3 + 2) != 0) && ((param_2 >> 6 & 1) == 0)) {
        local_80 = *(long **)(param_1 + 0x128);
        *(long ***)(param_1 + 0x128) = &local_80;
        local_70[1] = *(long *)(param_1 + 0x120);
        local_70[0]._0_4_ = 0;
        local_78 = param_3;
        FUN_0042cdc8(param_1,param_2 & 0xffffff9f,*(undefined8 *)(param_3 + 2));
        *(long **)(param_1 + 0x128) = local_80;
        if ((int)local_70[0] != 0) {
          return;
        }
        FUN_00424c1c(param_1,0x20);
      }
                    /* catch() { ... } // from try @ 0042d040 with catch @ 0042d0c8 */
      FUN_00431630(param_1,param_2 & 0xffffff9f,param_3 + 4,*(undefined8 *)(param_1 + 0x128));
    }
    else {
      FUN_00431630(param_1,param_2 & 0xffffff9f,param_3 + 4,*(undefined8 *)(param_1 + 0x128));
      if (*(long *)(param_3 + 2) != 0) {
        FUN_0042cdc8(param_1,param_2 & 0xffffff9f);
      }
    }
    break;
  case 0x2a:
                    /* try { // try from 0042d0d8 to 0052d0db has its CatchHandler @ 0042cff0 */
    plVar22 = *(long **)(param_1 + 0x128);
    local_70[1] = *(long *)(param_1 + 0x120);
    *(long ***)(param_1 + 0x128) = &local_80;
    local_70[0]._0_4_ = 0;
                    /* catch() { ... } // from try @ 0042d158 with catch @ 0042d100
                       catch() { ... } // from try @ 0042d1ac with catch @ 0042d100
                       catch() { ... } // from try @ 0042d2b4 with catch @ 0042d100
                       catch() { ... } // from try @ 0042d354 with catch @ 0042d100
                       catch() { ... } // from try @ 0042d80c with catch @ 0042d100
                       catch() { ... } // from try @ 0042d9c4 with catch @ 0042d100
                       catch() { ... } // from try @ 0042da54 with catch @ 0042d100
                       catch() { ... } // from try @ 0042db58 with catch @ 0042d100
                       catch() { ... } // from try @ 0042db94 with catch @ 0042d100
                       catch() { ... } // from try @ 0042dbc0 with catch @ 0042d100
                       catch() { ... } // from try @ 0042dbd4 with catch @ 0042d100
                       catch() { ... } // from try @ 0042dbe8 with catch @ 0042d100
                       catch() { ... } // from try @ 0042dbfc with catch @ 0042d100
                       catch() { ... } // from try @ 0042dc10 with catch @ 0042d100
                       catch() { ... } // from try @ 0042dc4c with catch @ 0042d100 */
    local_80 = plVar22;
    if ((plVar22 == (long *)0x0) || (2 < *(int *)plVar22[1] - 0x19U)) {
      local_78 = param_3;
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
      *(long **)(param_1 + 0x128) = plVar22;
      if ((int)local_70[0] != 0) {
        return;
      }
    }
    else {
      plVar9 = plVar22;
      pplVar23 = &local_80;
      uVar34 = 1;
      do {
        pplVar24 = pplVar23;
        uVar33 = uVar34;
        if ((int)plVar9[2] == 0) {
          if (3 < (uint)uVar34) {
            *(undefined4 *)(param_1 + 0x130) = 1;
            return;
          }
          uVar33 = (ulong)((uint)uVar34 + 1);
          pplVar24 = &local_80 + uVar34 * 4;
                    /* try { // try from 0042d158 to 0052d15b has its CatchHandler @ 0042d100 */
          piVar10 = (int *)plVar9[1];
          *pplVar24 = (long *)*plVar9;
          (&local_78)[uVar34 * 4] = piVar10;
          lVar11 = plVar9[3];
          local_70[uVar34 * 4] = plVar9[2];
          local_70[uVar34 * 4 + 1] = lVar11;
          (&local_80)[uVar34 * 4] = (long *)pplVar23;
          *(long ***)(param_1 + 0x128) = pplVar24;
          *(undefined4 *)(plVar9 + 2) = 1;
        }
        plVar9 = (long *)*plVar9;
      } while ((plVar9 != (long *)0x0) &&
              (pplVar23 = pplVar24, uVar34 = uVar33, *(int *)plVar9[1] - 0x19U < 3));
      local_78 = param_3;
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
      *(long **)(param_1 + 0x128) = plVar22;
      if ((int)local_70[0] != 0) {
        return;
      }
                    /* try { // try from 0042d1a4 to 0052d1a7 has its CatchHandler @ 0042dbec */
      if ((int)uVar33 != 1) {
        do {
          uVar32 = (int)uVar33 - 1;
          uVar33 = (ulong)uVar32;
                    /* try { // try from 0042d1ac to 0052d273 has its CatchHandler @ 0042d100 */
          FUN_004307d4(param_1,param_2,(&local_78)[uVar33 * 4]);
        } while (uVar32 != 1);
        plVar22 = *(long **)(param_1 + 0x128);
      }
    }
    FUN_00431368(param_1,param_2,param_3 + 2,plVar22);
    break;
  case 0x2b:
  case 0x2d:
    local_80 = *(long **)(param_1 + 0x128);
    *(long ***)(param_1 + 0x128) = &local_80;
    local_70[1] = *(long *)(param_1 + 0x120);
    local_70[0]._0_4_ = 0;
    local_78 = param_3;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    if ((int)local_70[0] == 0) {
      FUN_004307d4(param_1,param_2,param_3);
    }
    *(long **)(param_1 + 0x128) = local_80;
    break;
  case 0x2c:
    if (*(short *)((long)param_3 + 0x12) != 0) {
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 2;
        *param_1 = 0x5f;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x53;
LAB_0042f0c8:
        lVar19 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar19;
        param_1[lVar11] = 0x61;
        param_1[0x108] = 0x61;
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x74;
          lVar11 = 1;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          goto LAB_0042f100;
        }
LAB_0042f0e4:
        lVar11 = lVar19 + 1;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar19] = 0x74;
        param_1[0x108] = 0x74;
        if (lVar11 != 0xff) goto LAB_0042f100;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar19;
        param_1[lVar11] = 0x5f;
        param_1[0x108] = 0x5f;
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x53;
          lVar19 = 2;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
                    /* try { // try from 00430364 to 00530367 has its CatchHandler @ 0043031c */
          param_1[1] = 0x61;
          goto LAB_0042f0e4;
        }
        lVar11 = lVar11 + 2;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar19] = 0x53;
        param_1[0x108] = 0x53;
                    /* catch() { ... } // from try @ 0042f320 with catch @ 0042f0c0 */
        if (lVar11 != 0xff) goto LAB_0042f0c8;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x61;
        lVar11 = 2;
                    /* catch() { ... } // from try @ 00430364 with catch @ 0043031c
                       catch() { ... } // from try @ 004303b0 with catch @ 0043031c
                       catch() { ... } // from try @ 00430480 with catch @ 0043031c */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x74;
LAB_0042f100:
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x20;
      param_1[0x108] = 0x20;
    }
    if (*(undefined **)(*(long *)(param_3 + 2) + 8) == &UNK_004f9470) {
      lVar11 = *(long *)(param_1 + 0x100);
    }
    else {
      FUN_0042cdc8(param_1,param_2);
      lVar19 = *(long *)(param_1 + 0x100);
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar11 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar19] = 0x20;
      param_1[0x108] = 0x20;
    }
    if ((short)param_3[4] == 0) {
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 2;
        *param_1 = 0x5f;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x46;
LAB_0042ede4:
        lVar19 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar19;
        param_1[lVar11] = 0x72;
        param_1[0x108] = 0x72;
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x61;
          lVar11 = 2;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          param_1[1] = 99;
        }
        else {
LAB_0042ee00:
          lVar18 = lVar19 + 1;
          *(long *)(param_1 + 0x100) = lVar18;
          param_1[lVar19] = 0x61;
          param_1[0x108] = 0x61;
          if (lVar18 != 0xff) goto LAB_0042ee1c;
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 99;
          lVar11 = 1;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
      }
      else {
        lVar19 = lVar11 + 1;
        *(long *)(param_1 + 0x100) = lVar19;
        param_1[lVar11] = 0x5f;
        param_1[0x108] = 0x5f;
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *param_1 = 0x46;
          lVar19 = 2;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          param_1[1] = 0x72;
          goto LAB_0042ee00;
        }
        lVar11 = lVar11 + 2;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar19] = 0x46;
        param_1[0x108] = 0x46;
        if (lVar11 != 0xff) goto LAB_0042ede4;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x72;
        lVar18 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x61;
LAB_0042ee1c:
        lVar11 = lVar18 + 1;
        *(long *)(param_1 + 0x100) = lVar11;
        param_1[lVar18] = 99;
        param_1[0x108] = 99;
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar19 = 1;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          goto LAB_0042ee3c;
        }
      }
      lVar19 = lVar11 + 1;
LAB_0042ee3c:
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x74;
      param_1[0x108] = 0x74;
      return;
    }
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar11 = 2;
      *param_1 = 0x5f;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x41;
LAB_0042e358:
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 99;
      param_1[0x108] = 99;
                    /* try { // try from 0042e36c to 0052e36f has its CatchHandler @ 0042e600 */
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 99;
        lVar11 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x75;
      }
      else {
LAB_0042e374:
        lVar18 = lVar19 + 1;
        *(long *)(param_1 + 0x100) = lVar18;
        param_1[lVar19] = 99;
        param_1[0x108] = 99;
        if (lVar18 != 0xff) goto LAB_0042e390;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x75;
        lVar11 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
LAB_0042e3ac:
      lVar19 = lVar11 + 1;
    }
    else {
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x5f;
      param_1[0x108] = 0x5f;
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x41;
        lVar19 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 99;
        goto LAB_0042e374;
      }
      lVar11 = lVar11 + 2;
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar19] = 0x41;
      param_1[0x108] = 0x41;
                    /* try { // try from 0042e350 to 0052e353 has its CatchHandler @ 0042e268 */
      if (lVar11 != 0xff) goto LAB_0042e358;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 99;
      lVar18 = 2;
      param_1[1] = 99;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_0042e390:
      lVar11 = lVar18 + 1;
                    /* try { // try from 0042e394 to 0052e3bf has its CatchHandler @ 0042e628 */
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar18] = 0x75;
      param_1[0x108] = 0x75;
      if (lVar11 != 0xff) goto LAB_0042e3ac;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x6d;
    param_1[0x108] = 0x6d;
    break;
  case 0x2e:
  case 0x2f:
    if (*(long *)(param_3 + 2) != 0) {
      FUN_0042cdc8(param_1,param_2);
    }
                    /* try { // try from 0042e1ec to 0052e1ef has its CatchHandler @ 0042e254 */
    if (*(long *)(param_3 + 4) != 0) {
      uVar33 = *(ulong *)(param_1 + 0x100);
                    /* try { // try from 0042e1f4 to 0052e1f7 has its CatchHandler @ 0042de70 */
      uVar34 = uVar33;
      if (0xfd < uVar33) {
        param_1[uVar33] = 0;
        uVar34 = 0;
        (**(code **)(param_1 + 0x110))(param_1,uVar33,*(undefined8 *)(param_1 + 0x118));
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      param_1[uVar34] = 0x2c;
                    /* catch() { ... } // from try @ 0042df74 with catch @ 0042e208
                       catch() { ... } // from try @ 0042e044 with catch @ 0042e208
                       catch() { ... } // from try @ 0042e14c with catch @ 0042e208 */
      *(ulong *)(param_1 + 0x100) = uVar34 + 2;
      param_1[uVar34 + 1] = 0x20;
      param_1[0x108] = 0x20;
      lVar11 = *(long *)(param_1 + 0x138);
                    /* try { // try from 0042e22c to 0052e22f has its CatchHandler @ 0042de70 */
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
                    /* catch() { ... } // from try @ 0042df9c with catch @ 0042e230 */
      if ((*(long *)(param_1 + 0x138) == lVar11) && (*(long *)(param_1 + 0x100) == uVar34 + 2)) {
        *(ulong *)(param_1 + 0x100) = uVar34;
      }
    }
    break;
  case 0x30:
                    /* catch() { ... } // from try @ 0042e134 with catch @ 0042e254
                       catch() { ... } // from try @ 0042e1ec with catch @ 0042e254 */
    uVar36 = *(undefined8 *)(param_3 + 4);
    if (*(long *)(param_3 + 2) != 0) {
                    /* try { // try from 0042e264 to 0052e267 has its CatchHandler @ 0042de70 */
      FUN_0042cdc8(param_1,param_2);
    }
                    /* catch() { ... } // from try @ 0042e350 with catch @ 0042e268
                       catch() { ... } // from try @ 0042e468 with catch @ 0042e268
                       catch() { ... } // from try @ 0042e534 with catch @ 0042e268
                       catch() { ... } // from try @ 0042e5b8 with catch @ 0042e268
                       catch() { ... } // from try @ 0042e5ec with catch @ 0042e268
                       catch() { ... } // from try @ 0042e624 with catch @ 0042e268
                       catch() { ... } // from try @ 0042e65c with catch @ 0042e268 */
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x7b;
    param_1[0x108] = 0x7b;
    FUN_0042cdc8(param_1,param_2,uVar36);
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
                    /* try { // try from 0042f5c4 to 0052f5c7 has its CatchHandler @ 0042f334 */
                    /* catch() { ... } // from try @ 0042f518 with catch @ 0042f5c8 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 0042f5d8 to 0052f5db has its CatchHandler @ 0042f334 */
      lVar19 = 1;
                    /* catch() { ... } // from try @ 0042f760 with catch @ 0042f5e0
                       catch() { ... } // from try @ 0042f8bc with catch @ 0042f5e0 */
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x7d;
    param_1[0x108] = 0x7d;
    break;
  case 0x31:
    lVar19 = *(long *)(param_3 + 2);
    pcVar12 = "operator";
    iVar7 = *(int *)(lVar19 + 0x10);
    lVar11 = *(long *)(param_1 + 0x100);
    do {
                    /* try { // try from 0042e044 to 0052e047 has its CatchHandler @ 0042e208 */
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar11 = 0;
                    /* try { // try from 0042e070 to 0052e10b has its CatchHandler @ 0042de70 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar18;
    } while (pcVar12 != "");
    pcVar12 = *(char **)(lVar19 + 8);
    if ((byte)(*pcVar12 + 0x9fU) < 0x1a) {
      if (lVar18 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18 + 1;
      param_1[lVar18] = 0x20;
      param_1[0x108] = 0x20;
      pcVar12 = *(char **)(lVar19 + 8);
    }
    lVar11 = (long)iVar7;
                    /* try { // try from 0042e8d4 to 0052e91f has its CatchHandler @ 0042e660 */
    if (pcVar12[lVar11 + -1] == ' ') {
                    /* try { // try from 0042e950 to 0052e953 has its CatchHandler @ 0042e660 */
      lVar11 = (long)(iVar7 + -1);
    }
    if (lVar11 != 0) {
      pcVar1 = pcVar12 + lVar11;
      lVar11 = *(long *)(param_1 + 0x100);
      do {
        cVar5 = *pcVar12;
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar19 = 1;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
                    /* try { // try from 0042e948 to 0052e94b has its CatchHandler @ 0042e9cc */
        }
        else {
          lVar19 = lVar11 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar19;
        pcVar12 = pcVar12 + 1;
        param_1[lVar11] = cVar5;
        param_1[0x108] = cVar5;
        lVar11 = lVar19;
      } while (pcVar12 != pcVar1);
    }
    break;
  case 0x32:
                    /* try { // try from 0042e544 to 0052e547 has its CatchHandler @ 0042e600 */
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "operator "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 9);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    break;
  default:
                    /* try { // try from 0042ce08 to 0052ce0b has its CatchHandler @ 0042cfd0 */
    *(undefined4 *)(param_1 + 0x130) = 1;
    break;
  case 0x34:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "operator "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 9);
    if (*(int **)(param_1 + 0x160) != (int *)0x0) {
      local_80 = *(long **)(param_1 + 0x120);
      *(long ***)(param_1 + 0x120) = &local_80;
      local_78 = *(int **)(param_1 + 0x160);
    }
    if (**(int **)(param_3 + 2) == 4) {
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(*(int **)(param_3 + 2) + 2));
      if (*(long *)(param_1 + 0x160) != 0) {
        *(long **)(param_1 + 0x120) = local_80;
      }
                    /* catch() { ... } // from try @ 0042f2a4 with catch @ 0042f2fc */
      if (param_1[0x108] == '<') {
        lVar11 = *(long *)(param_1 + 0x100);
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *(undefined8 *)(param_1 + 0x100) = 0;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        *(long *)(param_1 + 0x100) = lVar11 + 1;
                    /* try { // try from 004303a8 to 005303ab has its CatchHandler @ 00430470 */
        param_1[lVar11] = 0x20;
        param_1[0x108] = 0x20;
                    /* try { // try from 004303b0 to 0053043b has its CatchHandler @ 0043031c */
      }
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      *(long *)(param_1 + 0x100) = lVar11 + 1;
      param_1[lVar11] = 0x3c;
                    /* try { // try from 0042f320 to 0052f323 has its CatchHandler @ 0042f0c0 */
      param_1[0x108] = 0x3c;
                    /* catch() { ... } // from try @ 0042f3c4 with catch @ 0042f334
                       catch() { ... } // from try @ 0042f404 with catch @ 0042f334
                       catch() { ... } // from try @ 0042f4d4 with catch @ 0042f334
                       catch() { ... } // from try @ 0042f520 with catch @ 0042f334
                       catch() { ... } // from try @ 0042f5c4 with catch @ 0042f334
                       catch() { ... } // from try @ 0042f5d8 with catch @ 0042f334 */
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(*(long *)(param_3 + 2) + 0x10));
      if (param_1[0x108] == '>') {
        lVar11 = *(long *)(param_1 + 0x100);
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          *(undefined8 *)(param_1 + 0x100) = 0;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        *(long *)(param_1 + 0x100) = lVar11 + 1;
        param_1[lVar11] = 0x20;
        param_1[0x108] = 0x20;
      }
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      *(long *)(param_1 + 0x100) = lVar11 + 1;
      param_1[lVar11] = 0x3e;
      param_1[0x108] = 0x3e;
    }
    else {
      FUN_0042cdc8(param_1,param_2);
      if (*(long *)(param_1 + 0x160) != 0) {
        *(long **)(param_1 + 0x120) = local_80;
      }
    }
    break;
  case 0x35:
                    /* try { // try from 0042e52c to 0052e52f has its CatchHandler @ 0042e64c */
                    /* try { // try from 0042e534 to 0052e537 has its CatchHandler @ 0042e268 */
    FUN_004318e0(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x36:
    piVar20 = *(int **)(param_3 + 2);
    piVar10 = *(int **)(param_3 + 4);
    if (*piVar20 == 0x31) {
      pcVar12 = (char *)**(undefined8 **)(piVar20 + 2);
      iVar7 = strcmp(pcVar12,"ad");
      if (iVar7 == 0) {
        iVar7 = *piVar10;
        if (iVar7 != 3) goto LAB_0042f258;
        if ((**(int **)(piVar10 + 2) == 1) && (**(int **)(piVar10 + 4) == 0x29)) {
          piVar10 = *(int **)(piVar10 + 2);
        }
      }
      else {
        iVar7 = *piVar10;
LAB_0042f258:
        if (iVar7 == 0x38) {
          FUN_004319b4(param_1,param_2,*(undefined8 *)(piVar10 + 2));
                    /* try { // try from 004306a0 to 005306a3 has its CatchHandler @ 0043079c */
                    /* try { // try from 004306a8 to 00530743 has its CatchHandler @ 00430608 */
          FUN_004318e0(param_1,param_2,piVar20);
          return;
        }
      }
      FUN_004318e0(param_1,param_2,piVar20);
      iVar7 = strcmp(pcVar12,"gs");
      if (iVar7 == 0) {
        FUN_0042cdc8(param_1,param_2,piVar10);
        return;
      }
      iVar7 = strcmp(pcVar12,"st");
      if (iVar7 == 0) {
        FUN_00424c1c(param_1,0x28);
                    /* try { // try from 0042f2a4 to 0052f2a7 has its CatchHandler @ 0042f2fc */
        FUN_0042cdc8(param_1,param_2,piVar10);
        lVar11 = *(long *)(param_1 + 0x100);
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        *(long *)(param_1 + 0x100) = lVar11 + 1;
        param_1[lVar11] = 0x29;
        param_1[0x108] = 0x29;
        return;
      }
    }
    else if (*piVar20 == 0x33) {
      lVar11 = *(long *)(param_1 + 0x100);
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      *(long *)(param_1 + 0x100) = lVar11 + 1;
      param_1[lVar11] = 0x28;
      param_1[0x108] = 0x28;
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(piVar20 + 2));
      FUN_00424c1c(param_1,0x29);
    }
    else {
      FUN_004318e0(param_1,param_2,piVar20);
    }
    FUN_004319b4(param_1,param_2,piVar10);
    break;
  case 0x37:
    piVar10 = *(int **)(param_3 + 4);
    if (*piVar10 != 0x38) goto LAB_0042ce44;
                    /* try { // try from 0042e5b8 to 0052e5bb has its CatchHandler @ 0042e268 */
    puVar21 = *(undefined8 **)(*(int **)(param_3 + 2) + 2);
    pcVar12 = (char *)*puVar21;
    if ((pcVar12[1] == 'c') && (((byte)(*pcVar12 + 0x8eU) < 2 || ((byte)(*pcVar12 + 0x9dU) < 2)))) {
      FUN_004318e0(param_1,param_2);
      FUN_00424c1c(param_1,0x3c);
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(*(long *)(param_3 + 4) + 8));
      FUN_00424f20(param_1,&DAT_0047bf38);
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(*(long *)(param_3 + 4) + 0x10));
      FUN_00424c1c(param_1,0x29);
    }
    else {
                    /* try { // try from 0042e790 to 0052e793 has its CatchHandler @ 0042e9e0 */
      if ((**(int **)(param_3 + 2) == 0x31) &&
         ((*(int *)(puVar21 + 2) == 1 && (*(char *)puVar21[1] == '>')))) {
        FUN_00424c1c(param_1,0x28);
        piVar10 = *(int **)(param_3 + 4);
        pcVar12 = (char *)**(undefined8 **)(*(long *)(param_3 + 2) + 8);
      }
                    /* try { // try from 0042e5e4 to 0052e5e7 has its CatchHandler @ 0042e64c */
      iVar7 = strcmp(pcVar12,"cl");
                    /* try { // try from 0042e5ec to 0052e5ef has its CatchHandler @ 0042e268 */
      piVar10 = *(int **)(piVar10 + 2);
      if ((iVar7 == 0) && (*piVar10 == 3)) {
        if (**(int **)(piVar10 + 4) != 0x29) {
          *(undefined4 *)(param_1 + 0x130) = 1;
        }
        FUN_004319b4(param_1,param_2,*(undefined8 *)(piVar10 + 2));
      }
      else {
                    /* catch() { ... } // from try @ 0042e36c with catch @ 0042e600
                       catch() { ... } // from try @ 0042e43c with catch @ 0042e600
                       catch() { ... } // from try @ 0042e544 with catch @ 0042e600 */
        FUN_004319b4(param_1,param_2);
      }
      lVar11 = *(long *)(param_3 + 2);
      pcVar12 = (char *)**(undefined8 **)(lVar11 + 8);
                    /* try { // try from 0042e624 to 0052e627 has its CatchHandler @ 0042e268 */
      iVar7 = strcmp(pcVar12,"ix");
                    /* catch() { ... } // from try @ 0042e394 with catch @ 0042e628 */
      if (iVar7 == 0) {
        FUN_00424c1c(param_1,0x5b);
        FUN_0042cdc8(param_1,param_2,*(undefined8 *)(*(long *)(param_3 + 4) + 0x10));
        FUN_00424c1c(param_1,0x5d);
      }
      else {
        iVar7 = strcmp(pcVar12,"cl");
        if (iVar7 != 0) {
          FUN_004318e0(param_1,param_2,lVar11);
        }
                    /* catch() { ... } // from try @ 0042e52c with catch @ 0042e64c
                       catch() { ... } // from try @ 0042e5e4 with catch @ 0042e64c */
        FUN_004319b4(param_1,param_2,*(undefined8 *)(*(long *)(param_3 + 4) + 0x10));
      }
                    /* try { // try from 0042e65c to 0052e65f has its CatchHandler @ 0042e268 */
                    /* catch() { ... } // from try @ 0042e774 with catch @ 0042e660
                       catch() { ... } // from try @ 0042e8d4 with catch @ 0042e660
                       catch() { ... } // from try @ 0042e950 with catch @ 0042e660
                       catch() { ... } // from try @ 0042e96c with catch @ 0042e660
                       catch() { ... } // from try @ 0042e9c8 with catch @ 0042e660
                       catch() { ... } // from try @ 0042e9dc with catch @ 0042e660 */
      if (((**(int **)(param_3 + 2) == 0x31) &&
          (lVar11 = *(long *)(*(int **)(param_3 + 2) + 2), *(int *)(lVar11 + 0x10) == 1)) &&
         (**(char **)(lVar11 + 8) == '>')) {
        FUN_00424c1c(param_1,0x29);
      }
    }
    break;
  case 0x38:
    *(undefined4 *)(param_1 + 0x130) = 1;
    break;
  case 0x39:
    piVar10 = *(int **)(param_3 + 4);
    if ((*piVar10 != 0x3a) || (piVar20 = *(int **)(piVar10 + 4), *piVar20 != 0x3b))
    goto LAB_0042ce44;
    lVar18 = *(long *)(param_3 + 2);
    lVar11 = *(long *)(piVar10 + 2);
                    /* try { // try from 0042e43c to 0052e43f has its CatchHandler @ 0042e600 */
    uVar36 = *(undefined8 *)(piVar20 + 2);
    lVar19 = *(long *)(piVar20 + 4);
    iVar7 = strcmp((char *)**(undefined8 **)(lVar18 + 8),"qu");
    if (iVar7 == 0) {
      FUN_004319b4(param_1,param_2);
      FUN_004318e0(param_1,param_2,lVar18);
      FUN_004319b4(param_1,param_2,uVar36);
      FUN_00424f20(param_1,&DAT_0047be80);
      FUN_004319b4(param_1,param_2,lVar19);
    }
    else {
                    /* try { // try from 0042e468 to 0052e503 has its CatchHandler @ 0042e268 */
      FUN_00424f20(param_1,&DAT_0047be88);
      if (*(long *)(lVar11 + 8) != 0) {
        FUN_004319b4(param_1,param_2);
        FUN_00424c1c(param_1,0x20);
      }
      FUN_0042cdc8(param_1,param_2,uVar36);
      if (lVar19 != 0) {
        FUN_004319b4(param_1,param_2,lVar19);
      }
    }
    break;
  case 0x3a:
  case 0x3b:
    *(undefined4 *)(param_1 + 0x130) = 1;
    break;
  case 0x3c:
  case 0x3d:
    uVar32 = 0;
    if ((**(int **)(param_3 + 2) == 0x27) &&
       (uVar32 = *(uint *)(*(long *)(*(int **)(param_3 + 2) + 2) + 0x1c), uVar32 != 0)) {
      if (uVar32 < 7) {
        if (**(int **)(param_3 + 4) == 0) {
          if (iVar7 == 0x3d) {
                    /* catch() { ... } // from try @ 004308a8 with catch @ 004307b0
                       catch() { ... } // from try @ 00430958 with catch @ 004307b0
                       catch() { ... } // from try @ 00430974 with catch @ 004307b0 */
            FUN_00424c1c(param_1,0x2d);
          }
          FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
          switch(uVar32) {
          case 2:
            FUN_00424c1c(param_1,0x75);
            return;
          case 3:
            FUN_00424c1c(param_1,0x6c);
            return;
          case 4:
            FUN_00424f20(param_1,&DAT_0047be90);
            return;
          case 5:
            FUN_00424f20(param_1,&DAT_0047be98);
            return;
          case 6:
            FUN_00424f20(param_1,&DAT_0047bea0);
            return;
          default:
            return;
          }
        }
      }
      else if ((((uVar32 == 7) && (piVar10 = *(int **)(param_3 + 4), *piVar10 == 0)) &&
               (piVar10[4] == 1)) && (iVar7 == 0x3c)) {
        if (**(char **)(piVar10 + 2) == '0') {
          FUN_00424f20(param_1,"false");
          return;
        }
        if (**(char **)(piVar10 + 2) == '1') {
                    /* catch() { ... } // from try @ 004306a0 with catch @ 0043079c */
          FUN_00424f20(param_1,&DAT_0046d718);
          return;
                    /* try { // try from 004307ac to 005307af has its CatchHandler @ 00430608 */
        }
      }
    }
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x28;
    param_1[0x108] = 0x28;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x29;
    param_1[0x108] = 0x29;
    if (*param_3 == 0x3d) {
      FUN_00424c1c(param_1,0x2d);
    }
    if (uVar32 == 8) {
      FUN_00424c1c(param_1,0x5b);
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
      FUN_00424c1c(param_1,0x5d);
    }
    else {
      FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    }
    break;
  case 0x3e:
    pcVar12 = "java resource ";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
                    /* try { // try from 0042db50 to 0052db53 has its CatchHandler @ 0042db84 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x3f:
                    /* try { // try from 0042db58 to 0052db5b has its CatchHandler @ 0042d100 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
                    /* try { // try from 0042db68 to 0052db6b has its CatchHandler @ 0042dc14 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    break;
  case 0x40:
    lVar11 = *(long *)(param_1 + 0x100);
    iVar7 = param_3[2];
                    /* try { // try from 0042d968 to 0052d96b has its CatchHandler @ 0042dc14 */
    if (lVar11 == 0xff) {
                    /* try { // try from 0042f814 to 0052f8a7 has its CatchHandler @ 0042f8a8 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = (char)iVar7;
    param_1[0x108] = (char)iVar7;
    break;
  case 0x41:
    sprintf((char *)&local_80,"%ld",*(undefined8 *)(param_3 + 2));
    sVar28 = strlen((char *)&local_80);
    if (sVar28 != 0) {
      sVar13 = 0;
      lVar11 = *(long *)(param_1 + 0x100);
      do {
        cVar5 = *(char *)((long)&local_80 + sVar13);
        if (lVar11 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar19 = 1;
          lVar11 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar19 = lVar11 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar19;
        sVar13 = sVar13 + 1;
                    /* try { // try from 0042d9c4 to 0052da1b has its CatchHandler @ 0042d100 */
        param_1[lVar11] = cVar5;
        param_1[0x108] = cVar5;
        lVar11 = lVar19;
      } while (sVar13 != sVar28);
    }
    break;
  case 0x42:
    pcVar12 = "decltype (";
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = *pcVar12;
                    /* try { // try from 0042da4c to 0052da4f has its CatchHandler @ 0042dc3c */
      if (lVar11 == 0xff) {
                    /* try { // try from 0042da54 to 0052db07 has its CatchHandler @ 0042d100 */
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
      param_1[lVar11] = cVar5;
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
                    /* catch() { ... } // from try @ 0042f46c with catch @ 0042f5a0 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
                    /* catch() { ... } // from try @ 0042f3f8 with catch @ 0042f5b4 */
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x29;
    param_1[0x108] = 0x29;
    break;
  case 0x43:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "global constructors keyed to "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x1d);
                    /* try { // try from 0042e860 to 0052e863 has its CatchHandler @ 0042e9e0 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x44:
                    /* catch() { ... } // from try @ 0042db50 with catch @ 0042db84 */
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "global destructors keyed to "[lVar11];
      if (lVar19 == 0xff) {
                    /* try { // try from 0042dbc0 to 0052dbc3 has its CatchHandler @ 0042d100 */
                    /* catch() { ... } // from try @ 0042d804 with catch @ 0042dbc4 */
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 0042dbd4 to 0052dbd7 has its CatchHandler @ 0042d100 */
        lVar18 = 1;
                    /* catch() { ... } // from try @ 0042d34c with catch @ 0042dbd8 */
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
                    /* try { // try from 0042db94 to 0052db97 has its CatchHandler @ 0042d100 */
        lVar18 = lVar19 + 1;
      }
                    /* catch() { ... } // from try @ 0042d85c with catch @ 0042db98 */
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x1c);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x45:
                    /* try { // try from 0042dbe8 to 0052dbeb has its CatchHandler @ 0042d100 */
                    /* catch() { ... } // from try @ 0042d1a4 with catch @ 0042dbec */
    pcVar12 = "{lambda(";
    lVar11 = *(long *)(param_1 + 0x100);
                    /* try { // try from 0042dbfc to 0052dbff has its CatchHandler @ 0042d100 */
    do {
      cVar5 = *pcVar12;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
                    /* catch() { ... } // from try @ 0042da4c with catch @ 0042dc3c */
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
                    /* try { // try from 0042dc4c to 0052dc4f has its CatchHandler @ 0042d100 */
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
                    /* catch() { ... } // from try @ 0042d2ac with catch @ 0042dc00 */
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      pcVar12 = pcVar12 + 1;
                    /* try { // try from 0042dc10 to 0052dc13 has its CatchHandler @ 0042d100 */
      param_1[lVar11] = cVar5;
                    /* catch() { ... } // from try @ 0042d968 with catch @ 0042dc14
                       catch() { ... } // from try @ 0042db68 with catch @ 0042dc14 */
      param_1[0x108] = cVar5;
      lVar11 = lVar19;
    } while (pcVar12 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
                    /* try { // try from 0042eb0c to 0052eb0f has its CatchHandler @ 0042ea84 */
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      *param_1 = 0x29;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_0042eb30:
      lVar11 = lVar19 + 1;
    }
    else {
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x29;
      param_1[0x108] = 0x29;
      if (lVar19 != 0xff) goto LAB_0042eb30;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar11 = 1;
      lVar19 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    *(long *)(param_1 + 0x100) = lVar11;
    param_1[lVar19] = 0x23;
    param_1[0x108] = 0x23;
                    /* try { // try from 0042eb50 to 0052eb53 has its CatchHandler @ 0042eb64 */
    sVar28 = 0;
                    /* try { // try from 0042eb58 to 0052eb5b has its CatchHandler @ 0042ea84 */
    sprintf((char *)&local_80,"%ld",(long)(param_3[4] + 1));
                    /* catch() { ... } // from try @ 0042eb50 with catch @ 0042eb64 */
    sVar13 = strlen((char *)&local_80);
    lVar11 = *(long *)(param_1 + 0x100);
                    /* try { // try from 0042eb74 to 0052eb77 has its CatchHandler @ 0042ea84 */
    lVar19 = lVar11;
    if (sVar13 != 0) {
      do {
        cVar5 = *(char *)((long)&local_80 + sVar28);
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar11 = 1;
          lVar19 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar11 = lVar19 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar11;
        sVar28 = sVar28 + 1;
        param_1[lVar19] = cVar5;
        param_1[0x108] = cVar5;
        lVar19 = lVar11;
      } while (sVar28 != sVar13);
    }
    if (lVar11 == 0xff) {
                    /* try { // try from 0042f760 to 0052f7fb has its CatchHandler @ 0042f5e0 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x7d;
    param_1[0x108] = 0x7d;
    break;
  case 0x47:
    puVar29 = &DAT_0047bf18;
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      uVar4 = *puVar29;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      puVar29 = puVar29 + 1;
      param_1[lVar11] = uVar4;
      param_1[0x108] = uVar4;
      lVar11 = lVar19;
    } while (puVar29 != (undefined1 *)0x47bf26);
    sVar28 = 0;
    sprintf((char *)&local_80,"%ld",*(long *)(param_3 + 2) + 1);
    sVar13 = strlen((char *)&local_80);
    lVar11 = *(long *)(param_1 + 0x100);
    lVar19 = lVar11;
    if (sVar13 != 0) {
      do {
        cVar5 = *(char *)((long)&local_80 + sVar28);
        if (lVar19 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar11 = 1;
          lVar19 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar11 = lVar19 + 1;
        }
                    /* catch() { ... } // from try @ 0042eb0c with catch @ 0042ea84
                       catch() { ... } // from try @ 0042eb58 with catch @ 0042ea84
                       catch() { ... } // from try @ 0042eb74 with catch @ 0042ea84 */
        *(long *)(param_1 + 0x100) = lVar11;
        sVar28 = sVar28 + 1;
        param_1[lVar19] = cVar5;
        param_1[0x108] = cVar5;
        lVar19 = lVar11;
      } while (sVar28 != sVar13);
    }
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x7d;
    param_1[0x108] = 0x7d;
    break;
  case 0x48:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "transaction clone for "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x16);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x49:
    lVar11 = 0;
    lVar19 = *(long *)(param_1 + 0x100);
    do {
      cVar5 = "non-transaction clone for "[lVar11];
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar18 = 1;
        lVar19 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar18 = lVar19 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar18;
      lVar11 = lVar11 + 1;
      param_1[lVar19] = cVar5;
      param_1[0x108] = cVar5;
      lVar19 = lVar18;
    } while (lVar11 != 0x1a);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    break;
  case 0x4a:
    iVar7 = 0;
    piVar10 = (int *)FUN_00424d98(param_1,*(undefined8 *)(param_3 + 2));
    if (piVar10 == (int *)0x0) {
      FUN_004319b4(param_1,param_2,*(undefined8 *)(param_3 + 2));
      FUN_00424f20(param_1,&DAT_00471a90);
    }
    else {
      do {
        if ((*piVar10 != 0x2f) || (*(long *)(piVar10 + 2) == 0)) {
          uVar36 = *(undefined8 *)(param_3 + 2);
          if (iVar7 == 0) {
            return;
          }
          goto LAB_0042ddd8;
        }
        piVar10 = *(int **)(piVar10 + 4);
        iVar7 = iVar7 + 1;
      } while (piVar10 != (int *)0x0);
      uVar36 = *(undefined8 *)(param_3 + 2);
LAB_0042ddd8:
      iVar27 = 0;
      do {
        *(int *)(param_1 + 0x134) = iVar27;
        FUN_0042cdc8(param_1,param_2,uVar36);
        if (iVar27 < iVar7 + -1) {
          lVar11 = *(long *)(param_1 + 0x100);
          if (lVar11 == 0xff) {
                    /* try { // try from 0042e7b8 to 0052e7e3 has its CatchHandler @ 0042e988 */
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            *param_1 = 0x2c;
            lVar19 = 1;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_0042de28:
            lVar11 = lVar19 + 1;
          }
          else {
            lVar19 = lVar11 + 1;
            *(long *)(param_1 + 0x100) = lVar19;
            param_1[lVar11] = 0x2c;
            param_1[0x108] = 0x2c;
            if (lVar19 != 0xff) goto LAB_0042de28;
            param_1[0xff] = 0;
            (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
            lVar11 = 1;
            lVar19 = 0;
            *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
          }
          *(long *)(param_1 + 0x100) = lVar11;
          param_1[lVar19] = 0x20;
          param_1[0x108] = 0x20;
        }
        iVar27 = iVar27 + 1;
      } while (iVar27 != iVar7);
    }
    break;
  case 0x4b:
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 0x5b;
      lVar11 = 2;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x61;
LAB_0042dea0:
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
      param_1[lVar11] = 0x62;
      param_1[0x108] = 0x62;
      if (lVar19 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x69;
        lVar11 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        goto LAB_0042ded8;
      }
LAB_0042debc:
      lVar11 = lVar19 + 1;
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar19] = 0x69;
      param_1[0x108] = 0x69;
      if (lVar11 != 0xff) goto LAB_0042ded8;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
      *(long *)(param_1 + 0x100) = lVar19;
                    /* catch() { ... } // from try @ 0042df58 with catch @ 0042de70
                       catch() { ... } // from try @ 0042e070 with catch @ 0042de70
                       catch() { ... } // from try @ 0042e13c with catch @ 0042de70
                       catch() { ... } // from try @ 0042e1c0 with catch @ 0042de70
                       catch() { ... } // from try @ 0042e1f4 with catch @ 0042de70
                       catch() { ... } // from try @ 0042e22c with catch @ 0042de70
                       catch() { ... } // from try @ 0042e264 with catch @ 0042de70 */
      param_1[lVar11] = 0x5b;
      param_1[0x108] = 0x5b;
      if (lVar19 == 0xff) {
                    /* catch() { ... } // from try @ 0042f814 with catch @ 0042f8a8 */
        param_1[0xff] = 0;
                    /* try { // try from 0042f8bc to 0052f8bf has its CatchHandler @ 0042f5e0 */
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x61;
        lVar19 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x62;
        goto LAB_0042debc;
      }
      lVar11 = lVar11 + 2;
      *(long *)(param_1 + 0x100) = lVar11;
      param_1[lVar19] = 0x61;
      param_1[0x108] = 0x61;
      if (lVar11 != 0xff) goto LAB_0042dea0;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 0x62;
      lVar11 = 2;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x69;
LAB_0042ded8:
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x3a;
    param_1[0x108] = 0x3a;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x5d;
    param_1[0x108] = 0x5d;
    break;
  case 0x4c:
    puVar29 = &DAT_0047bf28;
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar11 = *(long *)(param_1 + 0x100);
    do {
      uVar4 = *puVar29;
      if (lVar11 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 0042e1c0 to 0052e1c3 has its CatchHandler @ 0042de70 */
        lVar19 = 1;
        lVar11 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar19 = lVar11 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar19;
      puVar29 = puVar29 + 1;
      param_1[lVar11] = uVar4;
      param_1[0x108] = uVar4;
      lVar11 = lVar19;
    } while (puVar29 != &LAB_0047bf30);
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 4));
    lVar11 = *(long *)(param_1 + 0x100);
    if (lVar11 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar19 = 1;
      lVar11 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar19 = lVar11 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar19;
    param_1[lVar11] = 0x5d;
    param_1[0x108] = 0x5d;
  }
                    /* try { // try from 0042ce14 to 0052ce17 has its CatchHandler @ 0042cf00 */
                    /* try { // try from 0042ce20 to 0052ce23 has its CatchHandler @ 0042cfd0 */
  return;
}


==================================================================

### FUNC 004307d4 (2176 bytes) name=FUN_004307d4

void FUN_004307d4(undefined1 *param_1,uint param_2,undefined4 *param_3)

{
  char cVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined1 uVar5;
  char *pcVar6;
  
  switch(*param_3) {
  case 3:
    param_3 = *(undefined4 **)(param_3 + 2);
    goto LAB_00430810;
  default:
    goto LAB_00430810;
  case 0x19:
  case 0x1c:
    lVar2 = 0;
    lVar3 = *(long *)(param_1 + 0x100);
    do {
      cVar1 = " restrict"[lVar2];
      if (lVar3 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar4 = 1;
        lVar3 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar4 = lVar3 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar4;
      lVar2 = lVar2 + 1;
      param_1[lVar3] = cVar1;
      param_1[0x108] = cVar1;
      lVar3 = lVar4;
    } while (lVar2 != 9);
    break;
  case 0x1a:
  case 0x1d:
    lVar2 = 0;
    lVar3 = *(long *)(param_1 + 0x100);
    do {
      cVar1 = " volatile"[lVar2];
                    /* catch() { ... } // from try @ 00430950 with catch @ 00430964 */
      if (lVar3 == 0xff) {
                    /* try { // try from 00430974 to 00530977 has its CatchHandler @ 004307b0 */
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar4 = 1;
        lVar3 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar4 = lVar3 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar4;
      lVar2 = lVar2 + 1;
      param_1[lVar3] = cVar1;
                    /* try { // try from 00430950 to 00530953 has its CatchHandler @ 00430964 */
      param_1[0x108] = cVar1;
      lVar3 = lVar4;
                    /* try { // try from 00430958 to 0053095b has its CatchHandler @ 004307b0 */
    } while (lVar2 != 9);
    break;
  case 0x1b:
  case 0x1e:
    lVar2 = *(long *)(param_1 + 0x100);
    if (lVar2 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 0x20;
      lVar2 = 2;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 99;
LAB_004309dc:
      lVar3 = lVar2 + 1;
      *(long *)(param_1 + 0x100) = lVar3;
      param_1[lVar2] = 0x6f;
      param_1[0x108] = 0x6f;
      if (lVar3 == 0xff) {
        param_1[0xff] = 0;
        uVar5 = 0x74;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x6e;
        lVar3 = 2;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        param_1[1] = 0x73;
      }
      else {
LAB_004309f8:
        lVar2 = lVar3 + 1;
        *(long *)(param_1 + 0x100) = lVar2;
        param_1[lVar3] = 0x6e;
        param_1[0x108] = 0x6e;
        if (lVar2 != 0xff) goto LAB_00430a14;
        uVar5 = 0x74;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x73;
        lVar3 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      goto LAB_00430af8;
    }
    lVar3 = lVar2 + 1;
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x20;
    param_1[0x108] = 0x20;
    if (lVar3 == 0xff) {
                    /* try { // try from 00430d5c to 00530dcb has its CatchHandler @ 00430c98 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      *param_1 = 99;
      lVar3 = 2;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      param_1[1] = 0x6f;
      goto LAB_004309f8;
    }
    lVar2 = lVar2 + 2;
    *(long *)(param_1 + 0x100) = lVar2;
    param_1[lVar3] = 99;
    param_1[0x108] = 99;
                    /* catch() { ... } // from try @ 00430a20 with catch @ 004309d8
                       catch() { ... } // from try @ 00430a6c with catch @ 004309d8
                       catch() { ... } // from try @ 00430b20 with catch @ 004309d8 */
    if (lVar2 != 0xff) goto LAB_004309dc;
                    /* catch() { ... } // from try @ 00430f78 with catch @ 00430f38
                       catch() { ... } // from try @ 0043143c with catch @ 00430f38
                       catch() { ... } // from try @ 0043145c with catch @ 00430f38 */
    param_1[0xff] = 0;
    (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
    *param_1 = 0x6f;
    lVar2 = 2;
    *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    param_1[1] = 0x6e;
LAB_00430a14:
    lVar3 = lVar2 + 1;
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x73;
                    /* try { // try from 00430a20 to 00530a23 has its CatchHandler @ 004309d8 */
    param_1[0x108] = 0x73;
    uVar5 = 0x74;
    if (lVar3 != 0xff) goto LAB_00430af8;
    goto LAB_00430a30;
  case 0x1f:
    lVar3 = *(long *)(param_1 + 0x100);
                    /* try { // try from 00430a64 to 00530a67 has its CatchHandler @ 00430b10 */
    if (lVar3 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar2 = 1;
      lVar3 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
                    /* try { // try from 00430a6c to 00530ae7 has its CatchHandler @ 004309d8 */
      lVar2 = lVar3 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar2;
    param_1[lVar3] = 0x20;
    param_1[0x108] = 0x20;
    goto LAB_00430a80;
  case 0x20:
    lVar3 = *(long *)(param_1 + 0x100);
    if (lVar3 == 0xff) {
                    /* try { // try from 00430e28 to 00530e2b has its CatchHandler @ 00430c98 */
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar2 = 1;
      lVar3 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar2 = lVar3 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar2;
    param_1[lVar3] = 0x20;
    param_1[0x108] = 0x20;
    goto LAB_00430ad0;
  case 0x21:
    lVar2 = *(long *)(param_1 + 0x100);
                    /* try { // try from 00430b20 to 00530b23 has its CatchHandler @ 004309d8 */
                    /* catch() { ... } // from try @ 00430b74 with catch @ 00430b24
                       catch() { ... } // from try @ 00430bc0 with catch @ 00430b24
                       catch() { ... } // from try @ 00430c94 with catch @ 00430b24 */
    if (lVar2 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                    /* try { // try from 00430f78 to 005313f7 has its CatchHandler @ 00430f38 */
      lVar3 = 1;
      lVar2 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar3 = lVar2 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x20;
    param_1[0x108] = 0x20;
    param_3 = *(undefined4 **)(param_3 + 4);
LAB_00430810:
    FUN_0042cdc8(param_1,param_2,param_3);
    return;
  case 0x22:
    if ((param_2 >> 2 & 1) == 0) {
      lVar2 = *(long *)(param_1 + 0x100);
      if (lVar2 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar3 = 1;
        lVar2 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar3 = lVar2 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar3;
      param_1[lVar2] = 0x2a;
      param_1[0x108] = 0x2a;
    }
    break;
  case 0x23:
                    /* try { // try from 00430b74 to 00530b77 has its CatchHandler @ 00430b24 */
    lVar2 = *(long *)(param_1 + 0x100);
LAB_00430a80:
    if (lVar2 == 0xff) {
                    /* try { // try from 00430e04 to 00530e07 has its CatchHandler @ 00430e18 */
      param_1[0xff] = 0;
                    /* try { // try from 00430e0c to 00530e0f has its CatchHandler @ 00430c98 */
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar3 = 1;
                    /* catch() { ... } // from try @ 00430e04 with catch @ 00430e18 */
      lVar2 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar3 = lVar2 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x26;
    param_1[0x108] = 0x26;
    break;
  case 0x24:
    lVar2 = *(long *)(param_1 + 0x100);
LAB_00430ad0:
    if (lVar2 == 0xff) {
      uVar5 = 0x26;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar3 = 1;
      *param_1 = 0x26;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar3 = lVar2 + 1;
      *(long *)(param_1 + 0x100) = lVar3;
      param_1[lVar2] = 0x26;
      param_1[0x108] = 0x26;
      uVar5 = 0x26;
      if (lVar3 == 0xff) {
LAB_00430a30:
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,lVar3,*(undefined8 *)(param_1 + 0x118));
        lVar2 = 1;
        lVar3 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        goto LAB_00430afc;
      }
    }
LAB_00430af8:
    lVar2 = lVar3 + 1;
LAB_00430afc:
    *(long *)(param_1 + 0x100) = lVar2;
    param_1[lVar3] = uVar5;
    param_1[0x108] = uVar5;
                    /* catch() { ... } // from try @ 00430a64 with catch @ 00430b10 */
    return;
  case 0x25:
    pcVar6 = "complex ";
    lVar2 = *(long *)(param_1 + 0x100);
    do {
                    /* try { // try from 00430bc0 to 00530c47 has its CatchHandler @ 00430b24 */
      cVar1 = *pcVar6;
      if (lVar2 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar3 = 1;
        lVar2 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar3 = lVar2 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar3;
      pcVar6 = pcVar6 + 1;
      param_1[lVar2] = cVar1;
      param_1[0x108] = cVar1;
      lVar2 = lVar3;
                    /* try { // try from 00430bb8 to 00530bbb has its CatchHandler @ 00430c84 */
    } while (pcVar6 != "");
    break;
  case 0x26:
    pcVar6 = "imaginary ";
    lVar2 = *(long *)(param_1 + 0x100);
    do {
      cVar1 = *pcVar6;
      if (lVar2 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar3 = 1;
        lVar2 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar3 = lVar2 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar3;
      pcVar6 = pcVar6 + 1;
      param_1[lVar2] = cVar1;
      param_1[0x108] = cVar1;
      lVar2 = lVar3;
    } while (pcVar6 != "");
    break;
  case 0x2b:
    if (param_1[0x108] != '(') {
      lVar2 = *(long *)(param_1 + 0x100);
      if (lVar2 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar3 = 1;
        lVar2 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar3 = lVar2 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar3;
                    /* catch() { ... } // from try @ 00430bb8 with catch @ 00430c84 */
      param_1[lVar2] = 0x20;
      param_1[0x108] = 0x20;
    }
                    /* try { // try from 00430c94 to 00530c97 has its CatchHandler @ 00430b24 */
                    /* catch() { ... } // from try @ 00430d5c with catch @ 00430c98
                       catch() { ... } // from try @ 00430e0c with catch @ 00430c98
                       catch() { ... } // from try @ 00430e28 with catch @ 00430c98 */
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar2 = *(long *)(param_1 + 0x100);
    if (lVar2 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar2 = 2;
      *param_1 = 0x3a;
      param_1[1] = 0x3a;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_00430ce4:
      lVar3 = lVar2 + 1;
    }
    else {
      lVar3 = lVar2 + 1;
      *(long *)(param_1 + 0x100) = lVar3;
      param_1[lVar2] = 0x3a;
      param_1[0x108] = 0x3a;
      if (lVar3 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *param_1 = 0x3a;
        lVar2 = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        goto LAB_00430ce4;
      }
      lVar2 = lVar2 + 2;
      *(long *)(param_1 + 0x100) = lVar2;
      param_1[lVar3] = 0x3a;
      param_1[0x108] = 0x3a;
      if (lVar2 != 0xff) goto LAB_00430ce4;
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar3 = 1;
      lVar2 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x2a;
    param_1[0x108] = 0x2a;
    break;
  case 0x2d:
    pcVar6 = " __vector(";
    lVar2 = *(long *)(param_1 + 0x100);
    do {
      cVar1 = *pcVar6;
      if (lVar2 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar3 = 1;
        lVar2 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
                    /* try { // try from 004308a8 to 00530917 has its CatchHandler @ 004307b0 */
      }
      else {
        lVar3 = lVar2 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar3;
      pcVar6 = pcVar6 + 1;
      param_1[lVar2] = cVar1;
      param_1[0x108] = cVar1;
      lVar2 = lVar3;
    } while (pcVar6 != "");
    FUN_0042cdc8(param_1,param_2,*(undefined8 *)(param_3 + 2));
    lVar2 = *(long *)(param_1 + 0x100);
    if (lVar2 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar3 = 1;
      lVar2 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar3 = lVar2 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar3;
    param_1[lVar2] = 0x29;
    param_1[0x108] = 0x29;
  }
  return;
}


==================================================================

### FUNC 00431054 (788 bytes) name=FUN_00431054

void FUN_00431054(undefined1 *param_1,uint param_2,undefined8 *param_3,int param_4)

{
  undefined1 uVar1;
  int iVar2;
  long lVar3;
  long lVar4;
  int *piVar5;
  undefined8 uVar6;
  undefined1 *puVar7;
  undefined8 uVar8;
  
  if (param_3 != (undefined8 *)0x0) {
    iVar2 = *(int *)(param_1 + 0x130);
    while (iVar2 == 0) {
      if (*(int *)(param_3 + 2) == 0) {
        piVar5 = (int *)param_3[1];
        iVar2 = *piVar5;
        if ((param_4 != 0) || (4 < iVar2 - 0x1cU)) {
          *(undefined4 *)(param_3 + 2) = 1;
          uVar8 = *(undefined8 *)(param_1 + 0x120);
          *(undefined8 *)(param_1 + 0x120) = param_3[3];
          if (iVar2 == 0x29) {
            FUN_00431630(param_1,param_2,piVar5 + 4,*param_3);
            *(undefined8 *)(param_1 + 0x120) = uVar8;
            return;
          }
          if (iVar2 == 0x2a) {
            FUN_00431368(param_1,param_2,piVar5 + 2,*param_3);
            *(undefined8 *)(param_1 + 0x120) = uVar8;
            return;
          }
          if (iVar2 == 2) {
            uVar6 = *(undefined8 *)(param_1 + 0x128);
            *(undefined8 *)(param_1 + 0x128) = 0;
            FUN_0042cdc8(param_1,param_2,*(undefined8 *)(piVar5 + 2));
            *(undefined8 *)(param_1 + 0x128) = uVar6;
            lVar3 = *(long *)(param_1 + 0x100);
            if ((param_2 >> 2 & 1) != 0) {
              if (lVar3 == 0xff) {
                param_1[0xff] = 0;
                (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                lVar4 = 1;
                lVar3 = 0;
                *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
              }
              else {
                lVar4 = lVar3 + 1;
              }
              *(long *)(param_1 + 0x100) = lVar4;
              param_1[lVar3] = 0x2e;
              param_1[0x108] = 0x2e;
              goto LAB_004311e8;
            }
            if (lVar3 == 0xff) {
              param_1[0xff] = 0;
              (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
              lVar4 = 1;
              *param_1 = 0x3a;
              *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_004311bc:
              lVar3 = lVar4 + 1;
            }
            else {
              lVar4 = lVar3 + 1;
              *(long *)(param_1 + 0x100) = lVar4;
              param_1[lVar3] = 0x3a;
              param_1[0x108] = 0x3a;
              if (lVar4 != 0xff) goto LAB_004311bc;
              param_1[0xff] = 0;
              (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
              lVar3 = 1;
              lVar4 = 0;
              *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
            }
            *(long *)(param_1 + 0x100) = lVar3;
            param_1[lVar4] = 0x3a;
            param_1[0x108] = 0x3a;
LAB_004311e8:
            piVar5 = *(int **)(param_3[1] + 0x10);
            iVar2 = *piVar5;
            if (iVar2 != 0x46) goto LAB_00431208;
            puVar7 = &DAT_0047bc90;
            lVar3 = *(long *)(param_1 + 0x100);
            do {
              uVar1 = *puVar7;
              if (lVar3 == 0xff) {
                param_1[0xff] = 0;
                (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
                lVar4 = 1;
                lVar3 = 0;
                *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
              }
              else {
                lVar4 = lVar3 + 1;
              }
              *(long *)(param_1 + 0x100) = lVar4;
              puVar7 = puVar7 + 1;
              param_1[lVar3] = uVar1;
              param_1[0x108] = uVar1;
              lVar3 = lVar4;
            } while (puVar7 != (undefined1 *)0x47bc9d);
            FUN_00425128(param_1,(long)(piVar5[4] + 1));
            FUN_00424f20(param_1,&DAT_0047bca0);
            do {
              piVar5 = *(int **)(piVar5 + 2);
              iVar2 = *piVar5;
LAB_00431208:
            } while (iVar2 - 0x1cU < 5);
            FUN_0042cdc8(param_1,param_2,piVar5);
            *(undefined8 *)(param_1 + 0x120) = uVar8;
            return;
          }
          FUN_004307d4(param_1,param_2);
          *(undefined8 *)(param_1 + 0x120) = uVar8;
        }
      }
      param_3 = (undefined8 *)*param_3;
      if (param_3 == (undefined8 *)0x0) {
        return;
      }
      iVar2 = *(int *)(param_1 + 0x130);
    }
  }
  return;
}


==================================================================

### FUNC 00431368 (712 bytes) name=FUN_00431368

void FUN_00431368(undefined1 *param_1,undefined4 param_2,long *param_3,long *param_4)

{
  long *plVar1;
  long lVar2;
  long lVar3;
  
  plVar1 = param_4;
  if (param_4 != (long *)0x0) {
    do {
      if ((int)plVar1[2] == 0) {
                    /* try { // try from 00431430 to 00531433 has its CatchHandler @ 0043144c */
                    /* try { // try from 0043143c to 0053143f has its CatchHandler @ 00430f38 */
        if (*(int *)plVar1[1] == 0x2a) {
          FUN_00431054(param_1,param_2,param_4,0);
                    /* try { // try from 004314c8 to 0053169f has its CatchHandler @ 00431460 */
          lVar3 = *(long *)(param_1 + 0x100);
          goto joined_r0x004314d0;
        }
        lVar3 = *(long *)(param_1 + 0x100);
        if (lVar3 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar2 = 1;
          *param_1 = 0x20;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
LAB_0043146c:
          lVar3 = lVar2 + 1;
        }
        else {
                    /* catch() { ... } // from try @ 00431430 with catch @ 0043144c */
          lVar2 = lVar3 + 1;
          *(long *)(param_1 + 0x100) = lVar2;
          param_1[lVar3] = 0x20;
                    /* try { // try from 0043145c to 0053145f has its CatchHandler @ 00430f38 */
          param_1[0x108] = 0x20;
                    /* catch() { ... } // from try @ 004314c8 with catch @ 00431460
                       catch() { ... } // from try @ 004316e0 with catch @ 00431460
                       catch() { ... } // from try @ 0043174c with catch @ 00431460
                       catch() { ... } // from try @ 004317ac with catch @ 00431460
                       catch() { ... } // from try @ 004317c4 with catch @ 00431460
                       catch() { ... } // from try @ 004317d8 with catch @ 00431460
                       catch() { ... } // from try @ 004317ec with catch @ 00431460 */
          if (lVar2 != 0xff) goto LAB_0043146c;
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar3 = 1;
          lVar2 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        *(long *)(param_1 + 0x100) = lVar3;
        param_1[lVar2] = 0x28;
        param_1[0x108] = 0x28;
        FUN_00431054(param_1,param_2,param_4,0);
        lVar3 = *(long *)(param_1 + 0x100);
        lVar2 = lVar3 + 1;
        if (lVar3 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar2 = 1;
          lVar3 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        *(long *)(param_1 + 0x100) = lVar2;
        param_1[lVar3] = 0x29;
        param_1[0x108] = 0x29;
        goto LAB_004313b4;
      }
      plVar1 = (long *)*plVar1;
    } while (plVar1 != (long *)0x0);
    FUN_00431054(param_1,param_2,param_4,0);
  }
  lVar2 = *(long *)(param_1 + 0x100);
LAB_004313b4:
  if (lVar2 == 0xff) {
    param_1[0xff] = 0;
    (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
    lVar3 = 1;
    lVar2 = 0;
    *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
  }
  else {
    lVar3 = lVar2 + 1;
  }
  *(long *)(param_1 + 0x100) = lVar3;
  param_1[lVar2] = 0x20;
  param_1[0x108] = 0x20;
joined_r0x004314d0:
  if (lVar3 == 0xff) {
    param_1[0xff] = 0;
    (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
    *param_1 = 0x5b;
    param_1[0x108] = 0x5b;
    lVar2 = 1;
    lVar3 = *param_3;
    *(undefined8 *)(param_1 + 0x100) = 1;
    *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    if (lVar3 == 0) goto LAB_0043140c;
LAB_004313f4:
    FUN_0042cdc8(param_1,param_2);
    lVar2 = *(long *)(param_1 + 0x100);
  }
  else {
    lVar2 = lVar3 + 1;
    *(long *)(param_1 + 0x100) = lVar2;
    param_1[lVar3] = 0x5b;
    param_1[0x108] = 0x5b;
    if (*param_3 != 0) goto LAB_004313f4;
  }
  if (lVar2 == 0xff) {
    param_1[0xff] = 0;
    (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
    *(undefined8 *)(param_1 + 0x100) = 1;
    *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    *param_1 = 0x5d;
    param_1[0x108] = 0x5d;
    return;
  }
LAB_0043140c:
  *(long *)(param_1 + 0x100) = lVar2 + 1;
  param_1[lVar2] = 0x5d;
  param_1[0x108] = 0x5d;
  return;
}


==================================================================

### FUNC 00431630 (688 bytes) name=FUN_00431630

void FUN_00431630(undefined1 *param_1,undefined4 param_2,long *param_3,long *param_4)

{
  int iVar1;
  byte bVar2;
  long *plVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  
  if (param_4 != (long *)0x0) {
    iVar1 = (int)param_4[2];
    plVar3 = param_4;
joined_r0x0043165c:
    if (iVar1 == 0) {
      switch(*(undefined4 *)plVar3[1]) {
      case 0x19:
      case 0x1a:
      case 0x1b:
      case 0x21:
      case 0x25:
      case 0x26:
      case 0x2b:
        bVar2 = param_1[0x108];
LAB_00431740:
                    /* try { // try from 00431744 to 00531747 has its CatchHandler @ 004317dc */
        if (bVar2 == 0x20) goto LAB_004317ac;
        lVar5 = *(long *)(param_1 + 0x100);
                    /* try { // try from 0043174c to 0053176b has its CatchHandler @ 00431460 */
        if (lVar5 == 0xff) {
          param_1[0xff] = 0;
          (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
          lVar4 = 1;
          lVar5 = 0;
          *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        }
        else {
          lVar4 = lVar5 + 1;
        }
        *(long *)(param_1 + 0x100) = lVar4;
        param_1[lVar5] = 0x20;
        param_1[0x108] = 0x20;
        if (lVar4 != 0xff) goto LAB_004317b8;
LAB_00431770:
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,lVar4,*(undefined8 *)(param_1 + 0x118));
        lVar5 = 1;
        lVar4 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        break;
      default:
        plVar3 = (long *)*plVar3;
        if (plVar3 != (long *)0x0) goto code_r0x00431698;
        goto LAB_004316a0;
      case 0x22:
      case 0x23:
      case 0x24:
        bVar2 = param_1[0x108];
                    /* try { // try from 004317a4 to 005317a7 has its CatchHandler @ 004317c8 */
        if ((bVar2 & 0xfd) != 0x28) goto LAB_00431740;
LAB_004317ac:
                    /* try { // try from 004317ac to 005317af has its CatchHandler @ 00431460 */
        lVar4 = *(long *)(param_1 + 0x100);
                    /* catch() { ... } // from try @ 004316d8 with catch @ 004317b4 */
        if (lVar4 == 0xff) goto LAB_00431770;
LAB_004317b8:
        lVar5 = lVar4 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar5;
                    /* try { // try from 004317c4 to 005317c7 has its CatchHandler @ 00431460 */
      param_1[lVar4] = 0x28;
                    /* catch() { ... } // from try @ 004317a4 with catch @ 004317c8 */
      param_1[0x108] = 0x28;
      uVar6 = *(undefined8 *)(param_1 + 0x128);
                    /* try { // try from 004317d8 to 005317db has its CatchHandler @ 00431460 */
                    /* catch() { ... } // from try @ 00431744 with catch @ 004317dc */
      *(undefined8 *)(param_1 + 0x128) = 0;
      FUN_00431054(param_1,param_2,param_4,0);
      lVar4 = *(long *)(param_1 + 0x100);
                    /* try { // try from 004317ec to 005317ef has its CatchHandler @ 00431460 */
      if (lVar4 == 0xff) {
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        lVar5 = 1;
        lVar4 = 0;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      }
      else {
        lVar5 = lVar4 + 1;
      }
      *(long *)(param_1 + 0x100) = lVar5;
      param_1[lVar4] = 0x29;
      param_1[0x108] = 0x29;
      goto joined_r0x004316c4;
    }
  }
LAB_004316a0:
  uVar6 = *(undefined8 *)(param_1 + 0x128);
  *(undefined8 *)(param_1 + 0x128) = 0;
  FUN_00431054(param_1,param_2,param_4,0);
  lVar5 = *(long *)(param_1 + 0x100);
joined_r0x004316c4:
  if (lVar5 == 0xff) {
    param_1[0xff] = 0;
    (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
    *param_1 = 0x28;
    param_1[0x108] = 0x28;
    lVar4 = 1;
    lVar5 = *param_3;
    *(undefined8 *)(param_1 + 0x100) = 1;
    *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    if (lVar5 != 0) goto LAB_004316e4;
  }
  else {
    lVar4 = lVar5 + 1;
    *(long *)(param_1 + 0x100) = lVar4;
    param_1[lVar5] = 0x28;
                    /* try { // try from 004316d8 to 005316db has its CatchHandler @ 004317b4 */
    param_1[0x108] = 0x28;
                    /* try { // try from 004316e0 to 0053170b has its CatchHandler @ 00431460 */
    if (*param_3 != 0) {
LAB_004316e4:
      FUN_0042cdc8(param_1,param_2);
      lVar4 = *(long *)(param_1 + 0x100);
    }
    if (lVar4 == 0xff) {
      param_1[0xff] = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar5 = 1;
      lVar4 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
      goto LAB_00431700;
    }
  }
  lVar5 = lVar4 + 1;
LAB_00431700:
  *(long *)(param_1 + 0x100) = lVar5;
  param_1[lVar4] = 0x29;
  param_1[0x108] = 0x29;
  FUN_00431054(param_1,param_2,param_4,1);
  *(undefined8 *)(param_1 + 0x128) = uVar6;
  return;
code_r0x00431698:
  iVar1 = *(int *)(plVar3 + 2);
  goto joined_r0x0043165c;
}


==================================================================

### FUNC 004318e0 (212 bytes) name=FUN_004318e0

void FUN_004318e0(undefined1 *param_1,undefined8 param_2,int *param_3)

{
  undefined1 uVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  
  if (*param_3 != 0x31) {
    FUN_0042cdc8();
    return;
  }
  lVar4 = (long)*(int *)(*(long *)(param_3 + 2) + 0x10);
  lVar5 = *(long *)(*(long *)(param_3 + 2) + 8);
  if (lVar4 != 0) {
    lVar3 = 0;
    lVar2 = *(long *)(param_1 + 0x100);
    do {
      while (uVar1 = *(undefined1 *)(lVar5 + lVar3), lVar2 == 0xff) {
        lVar3 = lVar3 + 1;
        param_1[0xff] = 0;
        (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
        *(undefined8 *)(param_1 + 0x100) = 1;
        *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
        *param_1 = uVar1;
        param_1[0x108] = uVar1;
        lVar2 = 1;
        if (lVar4 == lVar3) {
          return;
        }
      }
      *(long *)(param_1 + 0x100) = lVar2 + 1;
      lVar3 = lVar3 + 1;
      param_1[lVar2] = uVar1;
      param_1[0x108] = uVar1;
      lVar2 = lVar2 + 1;
    } while (lVar4 != lVar3);
  }
  return;
}


==================================================================

### FUNC 004319b4 (264 bytes) name=FUN_004319b4

void FUN_004319b4(long param_1,undefined4 param_2,uint *param_3)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  
  uVar1 = *param_3;
  if ((uVar1 != 0x30 && 1 < uVar1) && (uVar1 != 6)) {
    lVar3 = *(long *)(param_1 + 0x100);
    if (lVar3 == 0xff) {
      *(undefined1 *)(param_1 + 0xff) = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar2 = 1;
      lVar3 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar2 = lVar3 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar2;
    *(undefined1 *)(param_1 + lVar3) = 0x28;
    *(undefined1 *)(param_1 + 0x108) = 0x28;
    FUN_0042cdc8(param_1,param_2,param_3);
    lVar3 = *(long *)(param_1 + 0x100);
    if (lVar3 == 0xff) {
      *(undefined1 *)(param_1 + 0xff) = 0;
      (**(code **)(param_1 + 0x110))(param_1,0xff,*(undefined8 *)(param_1 + 0x118));
      lVar2 = 1;
      lVar3 = 0;
      *(long *)(param_1 + 0x138) = *(long *)(param_1 + 0x138) + 1;
    }
    else {
      lVar2 = lVar3 + 1;
    }
    *(long *)(param_1 + 0x100) = lVar2;
    *(undefined1 *)(param_1 + lVar3) = 0x29;
    *(undefined1 *)(param_1 + 0x108) = 0x29;
    return;
  }
  FUN_0042cdc8(param_1);
  return;
}


==================================================================

### FUNC 00431abc (1092 bytes) name=FUN_00431abc

bool FUN_00431abc(char *param_1,code *param_2,undefined8 param_3)

{
  char *pcVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  code *pcVar6;
  char cVar7;
  int iVar8;
  int iVar9;
  size_t sVar10;
  undefined8 uVar11;
  long lVar12;
  undefined4 uVar13;
  char *pcVar14;
  char *local_1c8;
  char *local_1c0;
  uint local_1b8;
  char *local_1b0;
  undefined1 *local_1a8;
  undefined4 local_1a0;
  int local_19c;
  undefined1 *local_198;
  undefined4 local_190;
  int local_18c;
  undefined4 local_188;
  undefined8 local_180;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170;
  undefined1 auStack_168 [256];
  long local_68;
  undefined1 local_60;
  code *local_58;
  undefined8 local_50;
  undefined8 local_48;
  undefined8 local_40;
  int local_38;
  undefined4 local_34;
  undefined8 local_30;
  undefined1 *local_28;
  undefined4 local_20;
  uint local_1c;
  undefined1 *local_18;
  undefined4 local_10;
  uint local_c [3];
  
  cVar7 = *param_1;
  if ((cVar7 == '_') && (param_1[1] == 'Z')) {
    iVar9 = 1;
  }
  else {
    iVar9 = 0;
    iVar8 = strncmp(param_1,"_GLOBAL_",8);
    if ((iVar8 == 0) && ((cVar2 = param_1[8], cVar2 == '_' || cVar2 == '.' || (cVar2 == '$')))) {
      cVar2 = param_1[9];
      if (((cVar2 == 'I') || (iVar9 = 0, cVar2 == 'D')) &&
         ((iVar9 = 0, param_1[10] == '_' && (iVar9 = 2, cVar2 != 'I')))) {
        iVar9 = 3;
      }
    }
  }
  sVar10 = strlen(param_1);
  local_18c = (int)sVar10;
  local_19c = local_18c << 1;
  local_1c0 = param_1 + sVar10;
  lVar3 = -((long)local_19c * 0x18 + 0x10);
  local_1a8 = &stack0xfffffffffffffde0 + lVar3;
  local_1b8 = 0x11;
  lVar4 = -((-(sVar10 >> 0x1f & 1) & 0xfffffff800000000 | (sVar10 & 0xffffffff) << 3) + 0x16 &
           0xfffffffffffffff0);
  local_198 = &stack0xfffffffffffffde0 + lVar4 + lVar3;
  local_1a0 = 0;
  local_190 = 0;
  local_188 = 0;
  local_180 = 0;
  local_178 = 0;
  local_174 = 0;
  local_170 = 0;
  local_1c8 = param_1;
  if (iVar9 == 1) {
    if (cVar7 != '_') {
      return false;
    }
    if (param_1[1] != 'Z') {
      return false;
    }
    local_1b0 = param_1 + 2;
    lVar12 = FUN_004296c0(&local_1c8,1);
    if ((local_1b8 & 1) == 0) {
LAB_00431edc:
      cVar7 = *local_1b0;
    }
    else {
      while (pcVar1 = local_1b0, cVar7 = *local_1b0, cVar7 == '.') {
        cVar7 = local_1b0[1];
        if (((byte)(cVar7 + 0x9fU) < 0x1a) || (cVar7 == '_')) {
          cVar7 = local_1b0[2];
          pcVar14 = local_1b0 + 2;
          if (0x19 < (byte)(cVar7 + 0x9fU)) goto LAB_00431ed0;
          do {
            do {
              pcVar14 = pcVar14 + 1;
              cVar7 = *pcVar14;
                    /* try { // try from 00431ecc to 00531ecf has its CatchHandler @ 004320f8 */
            } while ((byte)(cVar7 + 0x9fU) < 0x1a);
LAB_00431ed0:
          } while (cVar7 == '_');
        }
        else {
          if (9 < (byte)(cVar7 - 0x30U)) goto LAB_00431edc;
          cVar7 = *local_1b0;
          pcVar14 = local_1b0;
        }
        while (cVar7 == '.') {
          while( true ) {
            if (9 < (byte)(pcVar14[1] - 0x30U)) goto LAB_00431e60;
            cVar7 = pcVar14[2];
            pcVar14 = pcVar14 + 2;
            if (9 < (byte)(cVar7 - 0x30U)) break;
            do {
              pcVar14 = pcVar14 + 1;
            } while ((byte)(*pcVar14 - 0x30U) < 10);
            if (*pcVar14 != '.') goto LAB_00431e60;
          }
        }
LAB_00431e60:
        iVar8 = (int)local_1b0;
        local_1b0 = pcVar14;
        uVar11 = FUN_00424680(&local_1c8,pcVar1,(int)pcVar14 - iVar8);
        lVar12 = FUN_004245e0(&local_1c8,0x4c,lVar12,uVar11);
      }
    }
  }
  else if (iVar9 == 0) {
    local_1b0 = param_1;
    local_1a8 = &stack0xfffffffffffffde0 + lVar3;
    local_198 = &stack0xfffffffffffffde0 + lVar4 + lVar3;
    lVar12 = FUN_004271e4(&local_1c8);
    cVar7 = *local_1b0;
  }
  else {
    pcVar1 = param_1 + 0xb;
    uVar13 = 0x43;
    if (iVar9 != 2) {
      uVar13 = 0x44;
    }
    if ((param_1[0xb] == '_') && (param_1[0xc] == 'Z')) {
      local_1b0 = param_1 + 0xd;
      local_1a8 = &stack0xfffffffffffffde0 + lVar3;
      local_198 = &stack0xfffffffffffffde0 + lVar4 + lVar3;
      uVar11 = FUN_004296c0(&local_1c8,0);
    }
    else {
      local_1b0 = pcVar1;
      local_1a8 = &stack0xfffffffffffffde0 + lVar3;
      local_198 = &stack0xfffffffffffffde0 + lVar4 + lVar3;
      sVar10 = strlen(pcVar1);
      uVar11 = FUN_00424680(&local_1c8,pcVar1,sVar10);
    }
    lVar12 = FUN_004245e0(&local_1c8,uVar13,uVar11,0);
    pcVar1 = local_1b0;
    sVar10 = strlen(local_1b0);
    local_1b0 = pcVar1 + sVar10;
    cVar7 = pcVar1[sVar10];
  }
  if ((cVar7 == '\0') && (lVar12 != 0)) {
    local_68 = 0;
    local_60 = 0;
    local_48 = 0;
    local_40 = 0;
    local_34 = 0;
    local_30 = 0;
    local_38 = 0;
    local_28 = (undefined1 *)0x0;
    local_20 = 0;
    local_1c = 0;
    local_18 = (undefined1 *)0x0;
    local_10 = 0;
    local_c[0] = 0;
    local_58 = param_2;
    local_50 = param_3;
    FUN_00424b50(local_c,&local_1c,lVar12);
    local_c[1] = 0;
    local_c[2] = 0;
                    /* catch() { ... } // from try @ 00431d18 with catch @ 00431cb0
                       catch() { ... } // from try @ 00431fc0 with catch @ 00431cb0
                       catch() { ... } // from try @ 00431ff8 with catch @ 00431cb0
                       catch() { ... } // from try @ 00432068 with catch @ 00431cb0
                       catch() { ... } // from try @ 004320c8 with catch @ 00431cb0
                       catch() { ... } // from try @ 004320e0 with catch @ 00431cb0
                       catch() { ... } // from try @ 004320f4 with catch @ 00431cb0
                       catch() { ... } // from try @ 00432134 with catch @ 00431cb0 */
    local_c[0] = local_1c * local_c[0];
    lVar5 = -((-(ulong)(local_1c >> 0x1f) & 0xfffffff000000000 | (ulong)local_1c << 4) + 0x10);
    local_28 = &stack0xfffffffffffffde0 + lVar5 + lVar4 + lVar3;
    local_18 = &stack0xfffffffffffffde0 +
               ((lVar5 + lVar4 + lVar3) -
               ((-(ulong)(local_c[0] >> 0x1f) & 0xfffffff000000000 | (ulong)local_c[0] << 4) + 0x10)
               );
    FUN_0042cdc8(auStack_168,0x11,lVar12);
    uVar11 = local_50;
    pcVar6 = local_58;
    lVar3 = local_68;
    auStack_168[local_68] = 0;
    (*pcVar6)(auStack_168,lVar3,uVar11);
                    /* try { // try from 00431d18 to 00531e5f has its CatchHandler @ 00431cb0 */
    return local_38 == 0;
  }
  return false;
}


==================================================================

### FUNC 00431f00 (348 bytes) name=__cxa_demangle

char * __cxa_demangle(long param_1,char *param_2,ulong *param_3,undefined4 *param_4)

{
  int iVar1;
  size_t sVar2;
  char *__src;
  ulong uVar3;
  char *local_20;
  undefined8 local_18;
  ulong local_10;
  int local_8;
  
  if ((param_1 == 0) || ((param_2 != (char *)0x0 && (param_3 == (ulong *)0x0)))) {
    if (param_4 == (undefined4 *)0x0) {
                    /* try { // try from 00431ff8 to 00532027 has its CatchHandler @ 00431cb0 */
      return (char *)0x0;
    }
    *param_4 = 0xfffffffd;
  }
  else {
    local_20 = (char *)0x0;
    local_18 = 0;
    local_10 = 0;
    local_8 = 0;
    iVar1 = FUN_00431abc(param_1,FUN_00424e30,&local_20);
    __src = local_20;
    if (iVar1 == 0) {
      free(local_20);
                    /* try { // try from 00431ff0 to 00531ff3 has its CatchHandler @ 00432124 */
      if (param_4 == (undefined4 *)0x0) {
        return (char *)0x0;
      }
    }
    else {
      uVar3 = 1;
      if (local_8 == 0) {
        uVar3 = local_10;
      }
      if (local_20 != (char *)0x0) {
        if (param_2 == (char *)0x0) {
          if (param_3 != (ulong *)0x0) {
            *param_3 = uVar3;
          }
        }
        else {
          sVar2 = strlen(local_20);
          if (sVar2 < *param_3) {
            memcpy(param_2,__src,sVar2 + 1);
            free(__src);
            __src = param_2;
          }
          else {
            free(param_2);
            *param_3 = uVar3;
          }
        }
                    /* try { // try from 00431fc0 to 00531fc3 has its CatchHandler @ 00431cb0 */
        if (param_4 == (undefined4 *)0x0) {
          return __src;
        }
        *param_4 = 0;
        return __src;
      }
      if (param_4 == (undefined4 *)0x0) {
        return (char *)0x0;
      }
      if (uVar3 == 1) {
        *param_4 = 0xffffffff;
        return (char *)0x0;
      }
    }
    *param_4 = 0xfffffffe;
  }
  return (char *)0x0;
}


==================================================================

### FUNC 0043205c (48 bytes) name=__gcclibcxx_demangle_callback

undefined4 __gcclibcxx_demangle_callback(long param_1,long param_2)

{
  int iVar1;
  undefined4 uVar2;
  
                    /* try { // try from 00432060 to 00532063 has its CatchHandler @ 004320d0 */
                    /* try { // try from 00432068 to 00532087 has its CatchHandler @ 00431cb0 */
  if ((param_1 == 0) || (param_2 == 0)) {
    uVar2 = 0xfffffffd;
  }
  else {
    iVar1 = FUN_00431abc();
    uVar2 = 0xfffffffe;
    if (iVar1 != 0) {
      uVar2 = 0;
    }
  }
  return uVar2;
}


==================================================================

### FUNC 0043208c (60 bytes) name=__cxa_current_exception_type

long __cxa_current_exception_type(void)

{
  long *plVar1;
  long lVar2;
  
  plVar1 = (long *)__cxa_get_globals();
  plVar1 = (long *)*plVar1;
  if (plVar1 == (long *)0x0) {
                    /* try { // try from 004320c0 to 005320c3 has its CatchHandler @ 004320e4 */
    lVar2 = 0;
  }
  else {
    if ((plVar1[10] & 1U) != 0) {
      plVar1 = (long *)(*plVar1 + -0x70);
    }
    lVar2 = *plVar1;
  }
  return lVar2;
}


==================================================================

### FUNC 004320c8 (196 bytes) name=FUN_004320c8

char * FUN_004320c8(uint param_1)

{
                    /* try { // try from 004320c8 to 005320cb has its CatchHandler @ 00431cb0 */
                    /* catch() { ... } // from try @ 004320c0 with catch @ 004320e4 */
                    /* try { // try from 004320f4 to 00532123 has its CatchHandler @ 00431cb0 */
                    /* catch() { ... } // from try @ 00431ecc with catch @ 004320f8 */
                    /* catch() { ... } // from try @ 00432060 with catch @ 004320d0 */
  switch(param_1 & 0x3d) {
  case 1:
  case 0x11:
                    /* try { // try from 00432134 to 00532137 has its CatchHandler @ 00431cb0 */
    return "a";
  default:
                    /* try { // try from 004320e0 to 005320e3 has its CatchHandler @ 00431cb0 */
    return (char *)0x0;
  case 5:
  case 0x15:
    return "ab";
  case 8:
    return "r";
  case 9:
  case 0x19:
    return "a+";
  case 0xc:
    return "rb";
  case 0xd:
  case 0x1d:
    return "a+b";
  case 0x10:
  case 0x30:
    return "w";
  case 0x14:
  case 0x34:
                    /* catch() { ... } // from try @ 00431ff0 with catch @ 00432124 */
    return "wb";
  case 0x18:
                    /* catch() { ... } // from try @ 00432190 with catch @ 00432164
                       catch() { ... } // from try @ 00432240 with catch @ 00432164
                       catch() { ... } // from try @ 00432348 with catch @ 00432164
                       catch() { ... } // from try @ 00432490 with catch @ 00432164
                       catch() { ... } // from try @ 004324a4 with catch @ 00432164 */
    return "r+";
  case 0x1c:
    return "r+b";
  case 0x38:
    return "w+";
  case 0x3c:
    return "w+b";
  }
}


==================================================================

### FUNC 0043218c (124 bytes) name=FUN_0043218c

size_t FUN_0043218c(int param_1,void *param_2,size_t param_3)

{
  ssize_t sVar1;
  int *piVar2;
  size_t __n;
  
                    /* try { // try from 00432190 to 005321eb has its CatchHandler @ 00432164 */
  __n = param_3;
  do {
    while (sVar1 = write(param_1,param_2,__n), sVar1 == -1) {
      piVar2 = (int *)__errno();
      if (*piVar2 != 4) {
        return param_3 - __n;
      }
    }
    __n = __n - sVar1;
    param_2 = (void *)((long)param_2 + sVar1);
  } while (__n != 0);
  return param_3;
}


==================================================================

### FUNC 00432208 (12 bytes) name=FUN_00432208

void FUN_00432208(undefined8 *param_1)

{
  *param_1 = 0;
  *(undefined1 *)(param_1 + 1) = 0;
  return;
}


==================================================================

### FUNC 00432214 (104 bytes) name=FUN_00432214

void FUN_00432214(undefined8 *param_1)

{
  int iVar1;
  int *piVar2;
  FILE *__stream;
  
  __stream = (FILE *)*param_1;
  if ((__stream != (FILE *)0x0) && (*(char *)(param_1 + 1) != '\0')) {
                    /* try { // try from 00432234 to 00532237 has its CatchHandler @ 00432494 */
    piVar2 = (int *)__errno();
                    /* try { // try from 00432240 to 005322ef has its CatchHandler @ 00432164 */
    *piVar2 = 0;
    iVar1 = fclose(__stream);
    while ((iVar1 != 0 && (*piVar2 == 4))) {
      iVar1 = fclose((FILE *)*param_1);
    }
  }
  return;
}


==================================================================

### FUNC 0043227c (128 bytes) name=FUN_0043227c

long * FUN_0043227c(long *param_1,long param_2)

{
  int iVar1;
  int *piVar2;
  FILE *__stream;
  
  if ((param_2 != 0) && (*param_1 == 0)) {
    piVar2 = (int *)__errno();
    __stream = (FILE *)0x0;
    *piVar2 = 0;
    while( true ) {
      iVar1 = fflush(__stream);
      if (iVar1 == 0) {
        *param_1 = param_2;
        *(undefined1 *)(param_1 + 1) = 0;
        return param_1;
      }
      if (*piVar2 != 4) break;
      __stream = (FILE *)*param_1;
    }
  }
  return (long *)0x0;
}


==================================================================

### FUNC 004322fc (136 bytes) name=FUN_004322fc

long * FUN_004322fc(long *param_1,int param_2,undefined4 param_3)

{
  char *__modes;
  FILE *__stream;
  
  __modes = (char *)FUN_004320c8(param_3);
  if ((__modes != (char *)0x0) && (*param_1 == 0)) {
    __stream = fdopen(param_2,__modes);
                    /* try { // try from 00432340 to 00532343 has its CatchHandler @ 00432480 */
    *param_1 = (long)__stream;
    if (__stream != (FILE *)0x0) {
                    /* try { // try from 00432348 to 00532463 has its CatchHandler @ 00432164 */
      *(undefined1 *)(param_1 + 1) = 1;
      if (param_2 != 0) {
        return param_1;
      }
      setvbuf(__stream,(char *)0x0,2,0);
      return param_1;
    }
  }
  return (long *)0x0;
}


==================================================================

### FUNC 00432394 (108 bytes) name=FUN_00432394

long * FUN_00432394(long *param_1,char *param_2,undefined4 param_3)

{
  char *__modes;
  FILE *pFVar1;
  
  __modes = (char *)FUN_004320c8(param_3);
  if ((__modes != (char *)0x0) && (*param_1 == 0)) {
    pFVar1 = fopen(param_2,__modes);
    *param_1 = (long)pFVar1;
    if (pFVar1 != (FILE *)0x0) {
      *(undefined1 *)(param_1 + 1) = 1;
      return param_1;
    }
  }
  return (long *)0x0;
}


==================================================================

### FUNC 00432400 (16 bytes) name=FUN_00432400

bool FUN_00432400(long *param_1)

{
  return *param_1 != 0;
}


==================================================================

### FUNC 00432410 (24 bytes) name=FUN_00432410

int FUN_00432410(undefined8 *param_1)

{
  int iVar1;
  
  iVar1 = fileno((FILE *)*param_1);
  return iVar1;
}


==================================================================

### FUNC 00432438 (8 bytes) name=FUN_00432438

undefined8 FUN_00432438(undefined8 *param_1)

{
  return *param_1;
}


==================================================================

### FUNC 00432440 (128 bytes) name=FUN_00432440

long * FUN_00432440(long *param_1)

{
  int iVar1;
  int *piVar2;
  FILE *__stream;
  
  __stream = (FILE *)*param_1;
  if (__stream == (FILE *)0x0) {
                    /* try { // try from 00432490 to 00532493 has its CatchHandler @ 00432164 */
                    /* catch() { ... } // from try @ 00432234 with catch @ 00432494 */
    return (long *)0x0;
  }
  if ((char)param_1[1] != '\0') {
    piVar2 = (int *)__errno();
    *piVar2 = 0;
    while (iVar1 = fclose(__stream), iVar1 != 0) {
                    /* catch() { ... } // from try @ 00432340 with catch @ 00432480 */
      if (*piVar2 != 4) {
        *param_1 = 0;
        return (long *)0x0;
      }
      __stream = (FILE *)*param_1;
    }
  }
  *param_1 = 0;
                    /* try { // try from 004324a4 to 005324a7 has its CatchHandler @ 00432164 */
                    /* catch() { ... } // from try @ 004324e8 with catch @ 004324a8
                       catch() { ... } // from try @ 00432584 with catch @ 004324a8
                       catch() { ... } // from try @ 004329a0 with catch @ 004324a8 */
  return param_1;
}


==================================================================

### FUNC 004324c0 (116 bytes) name=FUN_004324c0

ssize_t FUN_004324c0(undefined8 *param_1,void *param_2,size_t param_3)

{
  int __fd;
  ssize_t sVar1;
  int *piVar2;
  
  do {
    __fd = fileno((FILE *)*param_1);
                    /* try { // try from 004324e8 to 0053252b has its CatchHandler @ 004324a8 */
    sVar1 = read(__fd,param_2,param_3);
    if (sVar1 != -1) {
      return sVar1;
    }
    piVar2 = (int *)__errno();
  } while (*piVar2 == 4);
  return -1;
}


==================================================================

### FUNC 00432544 (48 bytes) name=FUN_00432544

void FUN_00432544(undefined8 *param_1,undefined8 param_2,undefined8 param_3)

{
  int iVar1;
  
  iVar1 = fileno((FILE *)*param_1);
  FUN_0043218c(iVar1,param_2,param_3);
  return;
}


==================================================================

### FUNC 00432584 (220 bytes) name=FUN_00432584

long FUN_00432584(undefined8 param_1,void *param_2,size_t param_3,long param_4,long param_5)

{
  long lVar1;
  long lVar2;
  int __fd;
  ssize_t sVar3;
  long lVar4;
  int *piVar5;
  long lVar6;
  iovec local_20;
  long local_10;
  long local_8;
  
                    /* try { // try from 00432584 to 005328bf has its CatchHandler @ 004324a8 */
  lVar1 = param_3 + param_5;
  __fd = FUN_00432410();
  lVar6 = lVar1;
  local_10 = param_4;
  local_8 = param_5;
  do {
    while( true ) {
      local_20.iov_base = param_2;
      local_20.iov_len = param_3;
      sVar3 = writev(__fd,&local_20,2);
      lVar4 = (long)(int)sVar3;
      if (lVar4 == -1) break;
      lVar6 = lVar6 - lVar4;
      param_2 = (void *)((long)param_2 + lVar4);
      if (lVar6 == 0) goto LAB_00432644;
      lVar2 = lVar4 - param_3;
      param_3 = param_3 - lVar4;
      if (-1 < lVar2) {
        lVar4 = FUN_0043218c(__fd,param_4 + lVar2,param_5 - lVar2);
        return lVar1 - (lVar6 - lVar4);
      }
    }
    piVar5 = (int *)__errno();
  } while (*piVar5 == 4);
LAB_00432644:
  return lVar1 - lVar6;
}


==================================================================

### FUNC 00432660 (52 bytes) name=FUN_00432660

void FUN_00432660(undefined8 *param_1,__off_t param_2,int param_3)

{
  int __fd;
  
  __fd = fileno((FILE *)*param_1);
  lseek(__fd,param_2,param_3);
  return;
}


==================================================================

### FUNC 004326a8 (8 bytes) name=FUN_004326a8

int FUN_004326a8(undefined8 *param_1)

{
  int iVar1;
  
  iVar1 = fflush((FILE *)*param_1);
  return iVar1;
}


==================================================================

### FUNC 004326b0 (200 bytes) name=FUN_004326b0

long FUN_004326b0(undefined8 *param_1)

{
  int iVar1;
  __off_t _Var2;
  int local_8c;
  pollfd local_88;
  uint local_70;
  long local_50;
  
  local_8c = 0;
  iVar1 = fileno((FILE *)*param_1);
  iVar1 = ioctl(iVar1,0x541b,&local_8c);
  if ((iVar1 == 0) && (-1 < local_8c)) {
    return (long)local_8c;
  }
  local_88.fd = FUN_00432410(param_1);
  local_88.events = 1;
  iVar1 = poll(&local_88,1,0);
  if (0 < iVar1) {
    iVar1 = FUN_00432410(param_1);
    iVar1 = fstat(iVar1,(stat *)&stack0xffffffffffffff80);
    if ((iVar1 == 0) && ((local_70 & 0xf000) == 0x8000)) {
      iVar1 = FUN_00432410(param_1);
      _Var2 = lseek(iVar1,0,1);
      return local_50 - _Var2;
    }
  }
  return 0;
}


==================================================================

### FUNC 00432788 (316 bytes) name=__getf2

undefined4 __getf2(undefined1 param_1 [16],undefined1 param_2 [16])

{
  undefined8 uVar1;
  bool bVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  bool bVar6;
  undefined4 uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  ulong uVar12;
  ulong uVar13;
  
  uVar13 = param_2._8_8_;
  uVar12 = param_2._0_8_;
  uVar11 = param_1._8_8_;
  uVar10 = param_1._0_8_;
  uVar1 = fpcr;
  uVar8 = uVar11 >> 0x30 & 0x7fff;
  uVar4 = uVar11 & 0xffffffffffff;
  uVar5 = uVar13 & 0xffffffffffff;
  uVar9 = uVar13 >> 0x30 & 0x7fff;
  if (uVar8 == 0x7fff) {
    if (uVar4 != 0 || uVar10 != 0) goto LAB_00432894;
    bVar6 = false;
    if (uVar9 == 0x7fff) goto LAB_004327e4;
  }
  else {
    if (uVar9 == 0x7fff) {
LAB_004327e4:
      if (uVar5 != 0 || uVar12 != 0) {
LAB_00432894:
        __sfp_handle_exceptions(1);
        return 0xfffffffe;
      }
    }
    bVar6 = false;
    if (uVar8 == 0) {
      bVar6 = uVar4 == 0 && uVar10 == 0;
    }
  }
  bVar2 = uVar9 == 0 && (uVar5 == 0 && uVar12 == 0);
  if ((bool)(bVar2 & bVar6)) {
    return 0;
  }
  uVar3 = uVar13 >> 0x3f;
  if (!bVar6) {
    uVar3 = -((long)uVar11 >> 0x3f);
    if (((bVar2) || (uVar3 != uVar13 >> 0x3f)) || (uVar9 < uVar8)) {
LAB_00432860:
      if (uVar3 == 0) {
        return 1;
      }
      return 0xffffffff;
    }
    if (uVar9 <= uVar8) {
      if ((uVar5 < uVar4) || ((uVar4 == uVar5 && (uVar12 < uVar10)))) goto LAB_00432860;
      if ((uVar5 <= uVar4) && ((uVar4 != uVar5 || (uVar12 <= uVar10)))) {
        return 0;
      }
    }
  }
  uVar7 = 0xffffffff;
  if (uVar3 != 0) {
    uVar7 = 1;
  }
  return uVar7;
}


==================================================================

### FUNC 004328c4 (316 bytes) name=__lttf2

undefined4 __lttf2(undefined1 param_1 [16],undefined1 param_2 [16])

{
  undefined8 uVar1;
  bool bVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  bool bVar6;
  undefined4 uVar7;
  ulong uVar8;
  ulong uVar9;
  ulong uVar10;
  ulong uVar11;
  ulong uVar12;
  ulong uVar13;
  
  uVar13 = param_2._8_8_;
  uVar12 = param_2._0_8_;
  uVar11 = param_1._8_8_;
  uVar10 = param_1._0_8_;
  uVar1 = fpcr;
  uVar8 = uVar11 >> 0x30 & 0x7fff;
  uVar4 = uVar11 & 0xffffffffffff;
  uVar5 = uVar13 & 0xffffffffffff;
  uVar9 = uVar13 >> 0x30 & 0x7fff;
  if (uVar8 == 0x7fff) {
    if (uVar4 != 0 || uVar10 != 0) goto LAB_004329d0;
    bVar6 = false;
    if (uVar9 == 0x7fff) goto LAB_00432920;
  }
  else {
    if (uVar9 == 0x7fff) {
LAB_00432920:
      if (uVar5 != 0 || uVar12 != 0) {
LAB_004329d0:
        __sfp_handle_exceptions(1);
        return 2;
      }
    }
    bVar6 = false;
    if (uVar8 == 0) {
      bVar6 = uVar4 == 0 && uVar10 == 0;
    }
  }
  bVar2 = uVar9 == 0 && (uVar5 == 0 && uVar12 == 0);
  if ((bool)(bVar2 & bVar6)) {
    return 0;
  }
  uVar3 = uVar13 >> 0x3f;
  if (!bVar6) {
    uVar3 = -((long)uVar11 >> 0x3f);
    if (((bVar2) || (uVar3 != uVar13 >> 0x3f)) || (uVar9 < uVar8)) {
LAB_0043299c:
                    /* try { // try from 004329a0 to 005329a3 has its CatchHandler @ 004324a8 */
      if (uVar3 == 0) {
        return 1;
      }
      return 0xffffffff;
    }
    if (uVar9 <= uVar8) {
                    /* catch() { ... } // from try @ 00432574 with catch @ 00432990 */
      if ((uVar5 < uVar4) || ((uVar4 == uVar5 && (uVar12 < uVar10)))) goto LAB_0043299c;
      if ((uVar5 <= uVar4) && ((uVar4 != uVar5 || (uVar12 <= uVar10)))) {
        return 0;
      }
    }
  }
  uVar7 = 0xffffffff;
  if (uVar3 != 0) {
    uVar7 = 1;
  }
  return uVar7;
}


==================================================================

### FUNC 00432a00 (40 bytes) name=FUN_00432a00

void FUN_00432a00(byte *param_1,ulong *param_2)

{
  byte bVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  
  uVar3 = 0;
                    /* try { // try from 00432a04 to 00532a07 has its CatchHandler @ 004329c0 */
  uVar4 = 0;
  do {
    bVar1 = *param_1;
    uVar2 = uVar4 & 0x3f;
    uVar4 = (ulong)((int)uVar4 + 7);
    uVar3 = uVar3 | ((ulong)bVar1 & 0x7f) << uVar2;
    param_1 = param_1 + 1;
  } while ((char)bVar1 < '\0');
  *param_2 = uVar3;
  return;
}


==================================================================

### FUNC 00432a28 (64 bytes) name=FUN_00432a28

void FUN_00432a28(byte *param_1,ulong *param_2)

{
  uint uVar1;
  byte bVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar4 = 0;
  uVar5 = 0;
  do {
    bVar2 = *param_1;
    uVar3 = uVar5 & 0x3f;
    uVar1 = (int)uVar5 + 7;
    uVar5 = (ulong)uVar1;
    uVar4 = uVar4 | ((ulong)bVar2 & 0x7f) << uVar3;
    param_1 = param_1 + 1;
  } while ((char)bVar2 < '\0');
                    /* try { // try from 00432a50 to 00532a53 has its CatchHandler @ 00432aac */
  if ((uVar1 < 0x40) && ((bVar2 >> 6 & 1) != 0)) {
                    /* try { // try from 00432a58 to 00532a8f has its CatchHandler @ 004329c0 */
    uVar4 = -1L << (uVar5 & 0x3f) | uVar4;
  }
  *param_2 = uVar4;
  return;
}


==================================================================

### FUNC 00432a68 (240 bytes) name=FUN_00432a68

ulong * FUN_00432a68(byte param_1,ulong *param_2,ulong *param_3,ulong *param_4)

{
  ulong *puVar1;
  ulong *local_8;
  
  if (param_1 == 0x50) {
    local_8 = (ulong *)((long)param_3 + 7U & 0xfffffffffffffff8);
    puVar1 = local_8 + 1;
    local_8 = (ulong *)*local_8;
  }
  else {
                    /* catch() { ... } // from try @ 00432a50 with catch @ 00432aac */
                    /* try { // try from 00432abc to 00532abf has its CatchHandler @ 004329c0 */
    switch(param_1 & 0xf) {
    case 0:
    case 4:
    case 0xc:
      puVar1 = param_3 + 1;
      local_8 = (ulong *)*param_3;
      break;
    case 1:
                    /* catch() { ... } // from try @ 00432cac with catch @ 00432ac8
                       catch() { ... } // from try @ 00432d10 with catch @ 00432ac8
                       catch() { ... } // from try @ 00432d58 with catch @ 00432ac8 */
      puVar1 = (ulong *)FUN_00432a00(param_3,&local_8);
      break;
    case 2:
      puVar1 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong *)(ulong)(ushort)*param_3;
      break;
    case 3:
      puVar1 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong *)(ulong)(uint)*param_3;
      break;
    default:
                    /* WARNING: Subroutine does not return */
      abort();
    case 9:
      puVar1 = (ulong *)FUN_00432a28(param_3,&local_8);
      break;
    case 10:
      puVar1 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong *)(long)(short)*param_3;
      break;
    case 0xb:
      puVar1 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong *)(long)(int)(uint)*param_3;
    }
    if (local_8 != (ulong *)0x0) {
      if ((param_1 & 0x70) != 0x10) {
        param_3 = param_2;
      }
      local_8 = (ulong *)((long)local_8 + (long)param_3);
      if ((char)param_1 < '\0') {
        local_8 = (ulong *)*local_8;
      }
    }
  }
  *param_4 = (ulong)local_8;
  return puVar1;
}


==================================================================

### FUNC 00432b58 (276 bytes) name=FUN_00432b58

void FUN_00432b58(void)

{
  DAT_00547790 = 8;
  DAT_00547791 = 8;
  DAT_00547792 = 8;
  DAT_00547793 = 8;
  DAT_00547794 = 8;
  DAT_00547795 = 8;
  DAT_00547796 = 8;
  DAT_00547797 = 8;
  DAT_00547798 = 8;
  DAT_00547799 = 8;
  DAT_0054779a = 8;
  DAT_0054779b = 8;
  DAT_0054779c = 8;
  DAT_0054779d = 8;
  DAT_0054779e = 8;
  DAT_0054779f = 8;
  DAT_005477a0 = 8;
  DAT_005477a1 = 8;
  DAT_005477a2 = 8;
  DAT_005477a3 = 8;
  DAT_005477a4 = 8;
  DAT_005477a5 = 8;
  DAT_005477a6 = 8;
  DAT_005477a7 = 8;
  DAT_005477a8 = 8;
  DAT_005477a9 = 8;
  DAT_005477aa = 8;
  DAT_005477ab = 8;
  DAT_005477ac = 8;
  DAT_005477ad = 8;
  DAT_005477ae = 8;
  DAT_005477af = 8;
  DAT_005477d0 = 8;
  DAT_005477d1 = 8;
  DAT_005477d2 = 8;
  DAT_005477d3 = 8;
  DAT_005477d4 = 8;
  DAT_005477d5 = 8;
  DAT_005477d6 = 8;
  DAT_005477d7 = 8;
  DAT_005477d8 = 8;
  DAT_005477d9 = 8;
  DAT_005477da = 8;
  DAT_005477db = 8;
  DAT_005477dc = 8;
  DAT_005477dd = 8;
  DAT_005477de = 8;
  DAT_005477df = 8;
  DAT_005477e0 = 8;
  DAT_005477e1 = 8;
  DAT_005477e2 = 8;
  DAT_005477e3 = 8;
  DAT_005477e4 = 8;
  DAT_005477e5 = 8;
  DAT_005477e6 = 8;
  DAT_005477e7 = 8;
  DAT_005477e8 = 8;
  DAT_005477e9 = 8;
  DAT_005477ea = 8;
  DAT_005477eb = 8;
  DAT_005477ec = 8;
  DAT_005477ed = 8;
  DAT_005477ee = 8;
  DAT_005477ef = 8;
  DAT_005477f0 = 8;
  return;
}


==================================================================

### FUNC 00432c6c (60 bytes) name=FUN_00432c6c

void FUN_00432c6c(long param_1,undefined8 param_2,undefined8 *param_3)

{
  if (DAT_005477af == '\b') {
    *param_3 = param_2;
    if ((*(ulong *)(param_1 + 0x340) >> 0x3e & 1) != 0) {
      *(undefined1 *)(param_1 + 0x377) = 0;
    }
    *(undefined8 **)(param_1 + 0xf8) = param_3;
    return;
  }
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 00432ca8 (88 bytes) name=_Unwind_GetGR

undefined8 * _Unwind_GetGR(long param_1,int param_2)

{
  undefined8 *puVar1;
  
                    /* try { // try from 00432cac to 00532caf has its CatchHandler @ 00432ac8 */
  if (param_2 < 0x62) {
    puVar1 = *(undefined8 **)(param_1 + (long)param_2 * 8);
    if (((*(ulong *)(param_1 + 0x340) >> 0x3e & 1) == 0) ||
       (*(char *)(param_1 + param_2 + 0x358) == '\0')) {
      if ((&DAT_00547790)[param_2] != '\b') goto LAB_00432cb8;
      puVar1 = (undefined8 *)*puVar1;
    }
    return puVar1;
  }
LAB_00432cb8:
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 00432d00 (268 bytes) name=FUN_00432d00

long FUN_00432d00(long param_1,long param_2)

{
  undefined8 *__dest;
  undefined8 *__src;
  long lVar1;
  undefined1 auStack_8 [8];
  
                    /* try { // try from 00432d08 to 00532d0b has its CatchHandler @ 00432d48 */
                    /* try { // try from 00432d10 to 00532d13 has its CatchHandler @ 00432ac8 */
  if ((((*(ulong *)(param_2 + 0x340) >> 0x3e & 1) == 0) || (*(char *)(param_2 + 0x377) == '\0')) &&
     (*(long *)(param_2 + 0xf8) == 0)) {
    FUN_00432c6c(param_2,*(undefined8 *)(param_2 + 0x310),auStack_8);
  }
  lVar1 = 0;
  while( true ) {
                    /* catch() { ... } // from try @ 00432d08 with catch @ 00432d48 */
    __dest = *(undefined8 **)(param_1 + lVar1 * 8);
    __src = *(undefined8 **)(param_2 + lVar1 * 8);
                    /* try { // try from 00432d58 to 00532d5b has its CatchHandler @ 00432ac8 */
    if (*(char *)(param_1 + lVar1 + 0x358) != '\0') break;
    if ((*(char *)(param_2 + lVar1 + 0x358) == '\0') || (__dest == (undefined8 *)0x0)) {
      if ((__dest != (undefined8 *)0x0 && __src != (undefined8 *)0x0) && (__src != __dest)) {
        memcpy(__dest,__src,(ulong)(byte)(&DAT_00547790)[lVar1]);
      }
    }
    else {
      if ((&DAT_00547790)[lVar1] != '\b') break;
      *__dest = __src;
    }
    lVar1 = lVar1 + 1;
    if (lVar1 == 0x61) {
      if ((((*(ulong *)(param_1 + 0x340) >> 0x3e & 1) == 0) ||
          (lVar1 = 0, *(char *)(param_1 + 0x377) == '\0')) &&
         (lVar1 = 0, *(long *)(param_1 + 0xf8) == 0)) {
        lVar1 = _Unwind_GetGR(param_2,0x1f);
        lVar1 = (lVar1 - *(long *)(param_1 + 0x310)) + *(long *)(param_2 + 0x350);
      }
      return lVar1;
    }
  }
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### FUNC 00432e0c (8 bytes) name=_Unwind_GetCFA

undefined8 _Unwind_GetCFA(long param_1)

{
  return *(undefined8 *)(param_1 + 0x310);
}


==================================================================

### FUNC 00432e14 (88 bytes) name=_Unwind_SetGR

void _Unwind_SetGR(long param_1,int param_2,undefined8 param_3)

{
  if (0x61 < param_2) {
LAB_00432e24:
                    /* WARNING: Subroutine does not return */
    abort();
  }
  if (((*(ulong *)(param_1 + 0x340) >> 0x3e & 1) == 0) ||
     (*(char *)(param_1 + param_2 + 0x358) == '\0')) {
    if ((&DAT_00547790)[param_2] != '\b') goto LAB_00432e24;
    **(undefined8 **)(param_1 + (long)param_2 * 8) = param_3;
  }
  else {
    *(undefined8 *)(param_1 + (long)param_2 * 8) = param_3;
  }
  return;
}


==================================================================

### FUNC 00432e6c (8 bytes) name=_Unwind_GetIP

undefined8 _Unwind_GetIP(long param_1)

{
  return *(undefined8 *)(param_1 + 0x318);
}


==================================================================

### FUNC 00432e74 (20 bytes) name=_Unwind_GetIPInfo

undefined8 _Unwind_GetIPInfo(long param_1,uint *param_2)

{
  undefined8 uVar1;
  
  uVar1 = *(undefined8 *)(param_1 + 0x318);
  *param_2 = (uint)((ulong)*(undefined8 *)(param_1 + 0x340) >> 0x3f);
  return uVar1;
}


==================================================================

### FUNC 00432e88 (8 bytes) name=_Unwind_SetIP

void _Unwind_SetIP(long param_1,undefined8 param_2)

{
  *(undefined8 *)(param_1 + 0x318) = param_2;
  return;
}


==================================================================

### FUNC 00432e90 (8 bytes) name=_Unwind_GetLanguageSpecificData

undefined8 _Unwind_GetLanguageSpecificData(long param_1)

{
  return *(undefined8 *)(param_1 + 800);
}


==================================================================

### FUNC 00432e98 (8 bytes) name=_Unwind_GetRegionStart

undefined8 _Unwind_GetRegionStart(long param_1)

{
  return *(undefined8 *)(param_1 + 0x338);
}


==================================================================

### FUNC 00432ea0 (40 bytes) name=_Unwind_FindEnclosingFunction

undefined8 _Unwind_FindEnclosingFunction(long param_1)

{
  long lVar1;
  undefined1 auStack_18 [16];
  undefined8 local_8;
  
  lVar1 = _Unwind_Find_FDE(param_1 + -1,auStack_18);
  if (lVar1 == 0) {
    local_8 = 0;
  }
  return local_8;
}


==================================================================

### FUNC 00432ec8 (8 bytes) name=_Unwind_GetDataRelBase

undefined8 _Unwind_GetDataRelBase(long param_1)

{
  return *(undefined8 *)(param_1 + 0x330);
}


==================================================================

### FUNC 00432ed0 (8 bytes) name=_Unwind_GetTextRelBase

undefined8 _Unwind_GetTextRelBase(long param_1)

{
  return *(undefined8 *)(param_1 + 0x328);
}


==================================================================

### FUNC 00432ed8 (120 bytes) name=FUN_00432ed8

undefined8 FUN_00432ed8(byte param_1,undefined8 param_2)

{
  byte bVar1;
  undefined8 uVar2;
  
  if (param_1 != 0xff) {
    bVar1 = param_1 & 0x70;
    if (bVar1 == 0x20) {
      uVar2 = _Unwind_GetTextRelBase(param_2);
      return uVar2;
    }
    if (bVar1 < 0x21) {
      if (((param_1 & 0x70) != 0) && (bVar1 != 0x10)) {
LAB_00432f40:
                    /* WARNING: Subroutine does not return */
        abort();
      }
    }
    else {
      if (bVar1 == 0x40) {
        uVar2 = _Unwind_GetRegionStart();
        return uVar2;
      }
      if (bVar1 != 0x50) {
        if (bVar1 == 0x30) {
          uVar2 = _Unwind_GetDataRelBase();
          return uVar2;
        }
        goto LAB_00432f40;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00432f50 (1272 bytes) name=FUN_00432f50

void FUN_00432f50(byte *param_1,byte *param_2,long param_3,void *param_4)

{
  byte bVar1;
  byte bVar2;
  undefined1 uVar3;
  undefined1 *puVar4;
  byte *pbVar5;
  void *pvVar6;
  long lVar7;
  undefined8 uVar8;
  long lVar9;
  ulong uVar10;
  long lVar11;
  ulong uVar12;
  long *plVar13;
  undefined4 uVar14;
  undefined1 *puVar15;
  undefined1 *puVar16;
  ulong local_18;
  long local_10;
  long local_8;
  
  puVar4 = &stack0xffffffffffffff70;
  *(undefined8 *)((long)param_4 + 0x620) = 0;
  puVar16 = (undefined1 *)0x0;
  do {
    if ((param_2 <= param_1) ||
       (uVar12 = *(ulong *)((long)param_4 + 0x648),
       (ulong)(*(long *)(param_3 + 0x318) - (*(long *)(param_3 + 0x340) >> 0x3f)) <= uVar12)) {
      return;
    }
    bVar2 = *param_1;
    uVar10 = (ulong)bVar2;
    pbVar5 = param_1 + 1;
    bVar1 = bVar2 & 0xc0;
    if (bVar1 == 0x40) {
      *(ulong *)((long)param_4 + 0x648) =
           uVar12 + (uVar10 & 0x3f) * *(long *)((long)param_4 + 0x660);
      goto switchD_00433024_caseD_0;
    }
    if (bVar1 == 0x80) {
      local_18 = uVar10 & 0x3f;
LAB_004330b8:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_10);
      lVar11 = *(long *)((long)param_4 + 0x658);
      lVar9 = local_10;
LAB_00433278:
      if (0x61 < local_18) goto switchD_00433024_caseD_0;
      lVar7 = local_18 * 0x10;
      *(undefined4 *)((long)param_4 + lVar7 + 8) = 1;
      lVar9 = lVar9 * lVar11;
      goto LAB_00433414;
    }
    if (bVar1 == 0xc0) {
      *(undefined4 *)((long)param_4 + (uVar10 & 0x3f) * 0x10 + 8) = 0;
      goto switchD_00433024_caseD_0;
    }
    switch(bVar2) {
    case 0:
      break;
    case 1:
      uVar3 = *(undefined1 *)((long)param_4 + 0x670);
      uVar8 = FUN_00432ed8(uVar3,param_3);
      pbVar5 = (byte *)FUN_00432a68(uVar3,uVar8,pbVar5,&local_8);
                    /* catch() { ... } // from try @ 004330e0 with catch @ 0043305c
                       catch() { ... } // from try @ 00433168 with catch @ 0043305c
                       catch() { ... } // from try @ 00433188 with catch @ 0043305c */
      *(long *)((long)param_4 + 0x648) = local_8;
      break;
    case 2:
      *(ulong *)((long)param_4 + 0x648) =
           uVar12 + (ulong)param_1[1] * *(long *)((long)param_4 + 0x660);
      pbVar5 = param_1 + 2;
      break;
    case 3:
      *(ulong *)((long)param_4 + 0x648) =
           uVar12 + (ulong)*(ushort *)(param_1 + 1) * *(long *)((long)param_4 + 0x660);
      pbVar5 = param_1 + 3;
      break;
    case 4:
      *(ulong *)((long)param_4 + 0x648) =
           uVar12 + (ulong)*(uint *)(param_1 + 1) * *(long *)((long)param_4 + 0x660);
      pbVar5 = param_1 + 5;
      break;
    case 5:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_18);
      goto LAB_004330b8;
    case 6:
    case 8:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_18);
                    /* try { // try from 004330e0 to 0053311f has its CatchHandler @ 0043305c */
      if (local_18 < 0x62) {
        *(undefined4 *)((long)param_4 + local_18 * 0x10 + 8) = 0;
      }
      break;
    case 7:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_18);
      if (local_18 < 0x62) {
        *(undefined4 *)((long)param_4 + local_18 * 0x10 + 8) = 6;
      }
      break;
    case 9:
      uVar8 = FUN_00432a00(pbVar5,&local_18);
      pbVar5 = (byte *)FUN_00432a00(uVar8,&local_8);
      if (local_18 < 0x62) {
        lVar7 = local_18 * 0x10;
        *(undefined4 *)((long)param_4 + lVar7 + 8) = 2;
        lVar9 = local_8;
        goto LAB_00433414;
      }
      break;
    case 10:
                    /* try { // try from 00433160 to 00533163 has its CatchHandler @ 00433178 */
      if (puVar16 == (undefined1 *)0x0) {
        puVar15 = puVar4 + -0x660;
        puVar4 = puVar4 + -0x660;
      }
      else {
                    /* try { // try from 00433168 to 0053316b has its CatchHandler @ 0043305c */
        puVar15 = puVar4;
        puVar4 = puVar16;
        puVar16 = *(undefined1 **)(puVar16 + 0x620);
      }
                    /* catch() { ... } // from try @ 00433160 with catch @ 00433178 */
      pvVar6 = memcpy(puVar4,param_4,0x648);
                    /* try { // try from 00433188 to 0053318b has its CatchHandler @ 0043305c */
      *(void **)((long)param_4 + 0x620) = pvVar6;
      puVar4 = puVar15;
      break;
    case 0xb:
      puVar15 = *(undefined1 **)((long)param_4 + 0x620);
      memcpy(param_4,puVar15,0x648);
      *(undefined1 **)(puVar15 + 0x620) = puVar16;
      puVar16 = puVar15;
      break;
    case 0xc:
      uVar8 = FUN_00432a00(pbVar5,&local_10);
      *(long *)((long)param_4 + 0x630) = local_10;
      pbVar5 = (byte *)FUN_00432a00(uVar8,&local_10);
      *(long *)((long)param_4 + 0x628) = local_10;
      goto LAB_004331fc;
    case 0xd:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_10);
      *(long *)((long)param_4 + 0x630) = local_10;
LAB_004331fc:
      *(undefined4 *)((long)param_4 + 0x640) = 1;
      break;
    case 0xe:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_10);
      lVar9 = local_10;
      goto LAB_004332c8;
    case 0xf:
      *(byte **)((long)param_4 + 0x638) = pbVar5;
      *(undefined4 *)((long)param_4 + 0x640) = 2;
      goto LAB_00433378;
    case 0x10:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_18);
      if (local_18 < 0x62) {
        uVar14 = 3;
LAB_00433370:
        *(undefined4 *)((long)param_4 + local_18 * 0x10 + 8) = uVar14;
        *(byte **)((long)param_4 + local_18 * 0x10) = pbVar5;
      }
      goto LAB_00433378;
    case 0x11:
      uVar8 = FUN_00432a00(pbVar5,&local_18);
      pbVar5 = (byte *)FUN_00432a28(uVar8,&local_8);
      lVar11 = *(long *)((long)param_4 + 0x658);
      lVar9 = local_8;
      goto LAB_00433278;
    case 0x12:
      uVar8 = FUN_00432a00(pbVar5,&local_10);
      *(long *)((long)param_4 + 0x630) = local_10;
      pbVar5 = (byte *)FUN_00432a28(uVar8,&local_8);
      *(undefined4 *)((long)param_4 + 0x640) = 1;
      goto LAB_004332bc;
    case 0x13:
      pbVar5 = (byte *)FUN_00432a28(pbVar5,&local_8);
LAB_004332bc:
      lVar9 = local_8 * *(long *)((long)param_4 + 0x658);
LAB_004332c8:
      *(long *)((long)param_4 + 0x628) = lVar9;
      break;
    case 0x14:
      uVar8 = FUN_00432a00(pbVar5,&local_18);
      pbVar5 = (byte *)FUN_00432a00(uVar8,&local_10);
      lVar11 = *(long *)((long)param_4 + 0x658);
      lVar9 = local_10;
      goto LAB_00433328;
    case 0x15:
      uVar8 = FUN_00432a00(pbVar5,&local_18);
      pbVar5 = (byte *)FUN_00432a28(uVar8,&local_8);
      lVar11 = *(long *)((long)param_4 + 0x658);
      lVar9 = local_8;
LAB_00433328:
      if (local_18 < 0x62) {
        lVar7 = local_18 * 0x10;
        *(undefined4 *)((long)param_4 + lVar7 + 8) = 4;
        lVar9 = lVar9 * lVar11;
LAB_00433414:
        *(long *)((long)param_4 + lVar7) = lVar9;
      }
      break;
    case 0x16:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_18);
      if (local_18 < 0x62) {
        uVar14 = 5;
        goto LAB_00433370;
      }
LAB_00433378:
      lVar9 = FUN_00432a00(pbVar5,&local_10);
      pbVar5 = (byte *)(lVar9 + local_10);
      break;
    default:
                    /* WARNING: Subroutine does not return */
      abort();
    case 0x2d:
      lVar9 = 0x10;
      local_18 = 0x10;
      lVar7 = 0;
      plVar13 = (long *)((long)param_4 + 0x100);
      do {
        *(undefined4 *)(plVar13 + 1) = 1;
        lVar9 = lVar9 + 1;
        *plVar13 = lVar7;
        lVar7 = lVar7 + 8;
        plVar13 = plVar13 + 2;
      } while (lVar9 != 0x20);
      break;
    case 0x2e:
      pbVar5 = (byte *)FUN_00432a00(pbVar5,&local_10);
      *(long *)(param_3 + 0x350) = local_10;
      break;
    case 0x2f:
      uVar8 = FUN_00432a00(pbVar5,&local_18);
      pbVar5 = (byte *)FUN_00432a00(uVar8,&local_10);
      lVar9 = *(long *)((long)param_4 + 0x658);
      if (local_18 < 0x62) {
        lVar7 = local_18 * 0x10;
        *(undefined4 *)((long)param_4 + lVar7 + 8) = 1;
        lVar9 = -(lVar9 * local_10);
        goto LAB_00433414;
      }
    }
switchD_00433024_caseD_0:
    param_1 = pbVar5;
  } while( true );
}


==================================================================

### FUNC 00433448 (1060 bytes) name=FUN_00433448

undefined8 FUN_00433448(long param_1,long *param_2)

{
  byte bVar1;
  char cVar2;
  uint *puVar3;
  long lVar4;
  int *piVar5;
  size_t sVar6;
  long *plVar7;
  byte *pbVar8;
  byte *pbVar9;
  long lVar10;
  undefined8 uVar11;
  ulong uVar12;
  int iVar13;
  long *plVar14;
  long lVar15;
  uint *puVar16;
  char *pcVar17;
  ulong local_18;
  long local_10;
  long local_8;
  char *pcVar18;
  
  memset(param_2,0,0x680);
  *(undefined8 *)(param_1 + 0x350) = 0;
  *(undefined8 *)(param_1 + 800) = 0;
  if (*(long *)(param_1 + 0x318) == 0) {
    return 5;
  }
  puVar3 = (uint *)_Unwind_Find_FDE(*(long *)(param_1 + 0x318) +
                                    (-1 - (*(long *)(param_1 + 0x340) >> 0x3f)),param_1 + 0x328);
  if (puVar3 == (uint *)0x0) {
    if (**(int **)(param_1 + 0x318) != -0x2d7fee98) {
      return 5;
    }
    if ((*(int **)(param_1 + 0x318))[1] != -0x2bffffff) {
      return 5;
    }
    lVar15 = *(long *)(param_1 + 0x310);
    param_2[0xc6] = 0x1f;
    *(undefined4 *)(param_2 + 200) = 1;
    lVar10 = lVar15 + 0x130;
    param_2[0xc5] = 0x130;
    lVar4 = 8;
    plVar7 = param_2;
    do {
      *(undefined4 *)(plVar7 + 1) = 1;
      *plVar7 = lVar4;
      lVar4 = lVar4 + 8;
      plVar7 = plVar7 + 2;
    } while (lVar4 != 0x100);
    for (piVar5 = (int *)(lVar15 + 0x250); *piVar5 != 0;
        piVar5 = (int *)((long)piVar5 + (ulong)(uint)piVar5[1])) {
      if (*piVar5 == 0x46508001) {
        plVar7 = param_2 + 0x80;
        do {
          *(undefined4 *)(plVar7 + 1) = 1;
          plVar14 = plVar7 + 2;
          *plVar7 = (long)piVar5 + ((-0x3f0 - lVar10) - (long)param_2) + (long)plVar7;
          plVar7 = plVar14;
        } while (plVar14 != param_2 + 0xc0);
      }
    }
    *(undefined1 *)((long)param_2 + 0x673) = 1;
    param_2[0x3e] = (lVar15 + 0x230) - lVar10;
    *(undefined4 *)(param_2 + 0x3f) = 1;
    *(undefined4 *)(param_2 + 0xc1) = 4;
    param_2[0xc0] = *(long *)(lVar15 + 0x238) - lVar10;
    param_2[0xcd] = 0x60;
LAB_00433844:
    uVar11 = 0;
  }
  else {
    puVar16 = (uint *)((long)puVar3 + (4 - (long)(int)puVar3[1]));
    param_2[0xc9] = *(long *)(param_1 + 0x338);
    pcVar18 = (char *)((long)puVar16 + 9);
    sVar6 = strlen(pcVar18);
    plVar14 = (long *)(pcVar18 + sVar6 + 1);
    plVar7 = plVar14;
    if ((*(char *)((long)puVar16 + 9) == 'e') && (*(char *)((long)puVar16 + 10) == 'h')) {
      plVar7 = plVar14 + 1;
      pcVar18 = (char *)((long)puVar16 + 0xb);
      param_2[0xcf] = *plVar14;
    }
    if ((byte)puVar16[2] < 4) {
LAB_00433620:
      uVar11 = FUN_00432a00(plVar7,&local_18);
      param_2[0xcc] = local_18;
      pbVar8 = (byte *)FUN_00432a28(uVar11,&local_10);
      param_2[0xcb] = local_10;
      if ((char)puVar16[2] == '\x01') {
        pbVar9 = pbVar8 + 1;
        uVar12 = (ulong)*pbVar8;
      }
      else {
        pbVar9 = (byte *)FUN_00432a00(pbVar8,&local_18);
        uVar12 = local_18;
      }
      param_2[0xcd] = uVar12;
      *(undefined1 *)((long)param_2 + 0x671) = 0xff;
      pbVar8 = (byte *)0x0;
      if (*pcVar18 == 'z') {
        pcVar18 = pcVar18 + 1;
        pbVar9 = (byte *)FUN_00432a00(pbVar9,&local_18);
        *(undefined1 *)((long)param_2 + 0x672) = 1;
        pbVar8 = pbVar9 + local_18;
      }
      while( true ) {
        pcVar17 = pcVar18 + 1;
        cVar2 = *pcVar18;
        if (cVar2 == '\0') break;
        pcVar18 = pcVar17;
        if (cVar2 == 'L') {
          *(byte *)((long)param_2 + 0x671) = *pbVar9;
LAB_004336dc:
          pbVar9 = pbVar9 + 1;
        }
        else {
          if (cVar2 == 'R') {
            *(byte *)(param_2 + 0xce) = *pbVar9;
            goto LAB_004336dc;
          }
          if (cVar2 == 'P') {
            bVar1 = *pbVar9;
            uVar11 = FUN_00432ed8(bVar1,param_1);
            pbVar9 = (byte *)FUN_00432a68(bVar1,uVar11,pbVar9 + 1,&local_8);
            param_2[0xca] = local_8;
          }
          else {
            if (cVar2 != 'S') goto LAB_0043374c;
            *(undefined1 *)((long)param_2 + 0x673) = 1;
          }
        }
      }
      if (pbVar8 == (byte *)0x0) {
        pbVar8 = pbVar9;
      }
LAB_0043374c:
      if (pbVar8 != (byte *)0x0) {
        FUN_00432f50(pbVar8,(long)puVar16 + (ulong)*puVar16 + 4,param_1,param_2);
        if (*(byte *)(param_2 + 0xce) == 0xff) {
          iVar13 = 0;
        }
        else {
          switch(*(byte *)(param_2 + 0xce) & 7) {
          case 0:
          case 4:
            iVar13 = 8;
            break;
          default:
                    /* WARNING: Subroutine does not return */
            abort();
          case 2:
            iVar13 = 2;
            break;
          case 3:
            iVar13 = 4;
          }
        }
        lVar4 = 0;
        lVar10 = (long)puVar3 + (ulong)(uint)(iVar13 << 1) + 8;
        if (*(char *)((long)param_2 + 0x672) != '\0') {
          lVar10 = FUN_00432a00(lVar10,&local_8);
          lVar4 = lVar10 + local_8;
        }
        cVar2 = *(char *)((long)param_2 + 0x671);
        if (cVar2 != -1) {
          uVar11 = FUN_00432ed8(cVar2,param_1);
          lVar10 = FUN_00432a68(cVar2,uVar11,lVar10,&local_8);
          *(long *)(param_1 + 800) = local_8;
        }
        if (lVar4 == 0) {
          lVar4 = lVar10;
        }
        FUN_00432f50(lVar4,(long)puVar3 + (ulong)*puVar3 + 4,param_1,param_2);
        goto LAB_00433844;
      }
    }
    else if (((char)*plVar7 == '\b') && (*(char *)((long)plVar7 + 1) == '\0')) {
      plVar7 = (long *)((long)plVar7 + 2);
      goto LAB_00433620;
    }
    uVar11 = 3;
  }
  return uVar11;
}


==================================================================

### FUNC 0043386c (1460 bytes) name=FUN_0043386c

/* WARNING: Restarted to delay deadcode elimination for space: stack */

ulong FUN_0043386c(byte *param_1,byte *param_2,undefined8 param_3,ulong param_4)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  ulong uVar4;
  undefined8 uVar5;
  long lVar6;
  ulong uVar7;
  ulong *puVar8;
  byte *pbVar9;
  ulong uVar10;
  uint uVar11;
  uint uVar12;
  int local_220 [2];
  ulong local_218;
  ulong local_210;
  ulong local_208;
  ulong local_200 [64];
  uint uVar13;
  
  local_200[0] = param_4;
  uVar11 = 1;
LAB_004338bc:
  pbVar9 = param_1;
  if (param_2 <= pbVar9) {
    if (uVar11 != 0) {
      return local_200[(int)(uVar11 - 1)];
    }
switchD_00433c78_caseD_3:
                    /* WARNING: Subroutine does not return */
    abort();
  }
  bVar1 = *pbVar9;
  param_1 = pbVar9 + 1;
  uVar12 = (uint)bVar1;
  uVar13 = (uint)bVar1;
  if (bVar1 < 0x21) {
    if (bVar1 < 0x1f) {
      if (uVar13 == 0x10) {
        param_1 = (byte *)FUN_00432a00(param_1,&local_218);
        uVar4 = local_218;
      }
      else if (uVar13 < 0x11) {
        if (uVar13 == 10) {
          uVar4 = (ulong)*(ushort *)(pbVar9 + 1);
                    /* catch() { ... } // from try @ 00433f04 with catch @ 00433ac0
                       catch() { ... } // from try @ 0043435c with catch @ 00433ac0
                       catch() { ... } // from try @ 00434794 with catch @ 00433ac0
                       catch() { ... } // from try @ 00434810 with catch @ 00433ac0
                       catch() { ... } // from try @ 0043489c with catch @ 00433ac0 */
LAB_00433ac8:
          param_1 = pbVar9 + 3;
        }
        else if (uVar13 < 0xb) {
          if (uVar12 == 6) goto LAB_00433c04;
          if (uVar12 < 7) {
            if (bVar1 != 3) goto switchD_00433c78_caseD_3;
            param_1 = pbVar9 + 9;
            uVar4 = *(ulong *)(pbVar9 + 1);
          }
          else {
            param_1 = pbVar9 + 2;
            if (uVar12 == 8) {
              uVar4 = (ulong)pbVar9[1];
            }
            else {
              if (uVar12 != 9) goto switchD_00433c78_caseD_3;
              uVar4 = (long)(char)pbVar9[1];
            }
          }
        }
        else {
          if (uVar13 == 0xd) {
            uVar4 = (ulong)*(int *)(pbVar9 + 1);
          }
          else {
            if (0xd < uVar13) {
              param_1 = pbVar9 + 9;
              if ((bVar1 == 0xe) || (bVar1 == 0xf)) {
                uVar4 = *(ulong *)(pbVar9 + 1);
                goto LAB_00433ddc;
              }
              goto switchD_00433c78_caseD_3;
            }
            if (bVar1 == 0xb) {
              uVar4 = (ulong)*(short *)(pbVar9 + 1);
              goto LAB_00433ac8;
            }
            if (bVar1 != 0xc) goto switchD_00433c78_caseD_3;
            uVar4 = (ulong)*(uint *)(pbVar9 + 1);
          }
          param_1 = pbVar9 + 5;
        }
      }
      else if (uVar13 == 0x15) {
        local_210 = (ulong)pbVar9[1];
        param_1 = pbVar9 + 2;
        if ((long)(int)(uVar11 - 1) <= (long)local_210) goto switchD_00433c78_caseD_3;
        uVar4 = local_200[(long)(int)(uVar11 - 1) - local_210];
      }
      else {
        if (0x15 < uVar13) {
          if (uVar13 == 0x19) goto LAB_00433c04;
          if (0x19 < uVar13) goto LAB_00433cc8;
          iVar3 = uVar11 - 1;
          iVar2 = uVar11 - 2;
          if (uVar13 == 0x16) {
            if ((int)uVar11 < 2) goto switchD_00433c78_caseD_3;
            uVar4 = local_200[iVar3];
            local_200[iVar3] = local_200[iVar2];
            local_200[iVar2] = uVar4;
          }
          else {
            if ((uVar13 != 0x17) || ((int)uVar11 < 3)) goto switchD_00433c78_caseD_3;
            uVar4 = local_200[iVar3];
            uVar10 = local_200[(int)(uVar11 - 3)];
            local_200[iVar3] = local_200[iVar2];
            local_200[iVar2] = uVar10;
            local_200[(int)(uVar11 - 3)] = uVar4;
          }
          goto LAB_004338bc;
        }
        if (uVar13 == 0x12) {
          if (uVar11 == 0) goto switchD_00433c78_caseD_3;
          iVar3 = uVar11 - 1;
        }
        else {
          if (uVar13 < 0x12) {
            param_1 = (byte *)FUN_00432a28(param_1,&local_208);
            uVar4 = local_208;
            goto LAB_00433ddc;
          }
          if (uVar13 == 0x13) {
            if (uVar11 == 0) goto switchD_00433c78_caseD_3;
            uVar11 = uVar11 - 1;
            goto LAB_004338bc;
          }
          if ((uVar13 != 0x14) || ((int)uVar11 < 2)) goto switchD_00433c78_caseD_3;
          iVar3 = uVar11 - 2;
        }
        uVar4 = local_200[iVar3];
      }
    }
    else {
LAB_00433c04:
      if (uVar11 == 0) goto switchD_00433c78_caseD_3;
      uVar11 = uVar11 - 1;
      puVar8 = (ulong *)local_200[(int)uVar11];
      if (uVar12 == 0x1f) {
        uVar4 = -(long)puVar8;
      }
      else if (uVar12 < 0x20) {
        if (uVar12 == 6) {
switchD_00433c78_caseD_8:
          uVar4 = *puVar8;
        }
        else {
          if (bVar1 != 0x19) goto switchD_00433c78_caseD_3;
          uVar4 = ((ulong)puVar8 ^ (long)puVar8 >> 0x3f) - ((long)puVar8 >> 0x3f);
        }
      }
      else if (uVar12 == 0x23) {
        param_1 = (byte *)FUN_00432a00(param_1,&local_218);
        uVar4 = (long)puVar8 + local_218;
      }
      else if (uVar12 == 0x94) {
        param_1 = pbVar9 + 2;
        switch(pbVar9[1]) {
        case 1:
          uVar4 = (ulong)(byte)*puVar8;
          break;
        case 2:
          uVar4 = (ulong)(ushort)*puVar8;
          break;
        default:
          goto switchD_00433c78_caseD_3;
        case 4:
          uVar4 = (ulong)(uint)*puVar8;
          break;
        case 8:
          goto switchD_00433c78_caseD_8;
        }
      }
      else {
        if (uVar12 != 0x20) goto switchD_00433c78_caseD_3;
        uVar4 = ~(ulong)puVar8;
      }
    }
  }
  else if (uVar13 < 0x50) {
    if (0x2f < uVar12) {
      uVar4 = (ulong)(uVar12 - 0x30);
      goto LAB_00433ddc;
    }
    if (0x27 < uVar12) {
      if (uVar13 < 0x2f) {
        if (0x28 < uVar13) goto LAB_00433cc8;
        if (uVar11 == 0) goto switchD_00433c78_caseD_3;
        uVar11 = uVar11 - 1;
        param_1 = pbVar9 + 3;
        if (local_200[(int)uVar11] != 0) {
          param_1 = pbVar9 + 3 + *(short *)(pbVar9 + 1);
        }
      }
      else {
        param_1 = pbVar9 + (long)*(short *)(pbVar9 + 1) + 3;
      }
      goto LAB_004338bc;
    }
    if ((uVar13 < 0x24) && (0x22 < uVar13)) goto LAB_00433c04;
LAB_00433cc8:
    if ((int)uVar11 < 2) goto switchD_00433c78_caseD_3;
    uVar12 = uVar11 - 2;
    uVar7 = local_200[(int)uVar12];
    uVar10 = local_200[(int)(uVar11 - 1)];
    uVar11 = uVar12;
    switch(bVar1) {
    case 0x1a:
      uVar4 = uVar10 & uVar7;
      break;
    case 0x1b:
      uVar4 = 0;
      if (uVar10 != 0) {
        uVar4 = (long)uVar7 / (long)uVar10;
      }
      break;
    case 0x1c:
      uVar4 = uVar7 - uVar10;
      break;
    case 0x1d:
      uVar4 = 0;
      if (uVar10 != 0) {
        uVar4 = uVar7 / uVar10;
      }
      uVar4 = uVar7 - uVar4 * uVar10;
      break;
    case 0x1e:
      uVar4 = uVar10 * uVar7;
      break;
    default:
      goto switchD_00433c78_caseD_3;
    case 0x21:
      uVar4 = uVar10 | uVar7;
      break;
    case 0x22:
      uVar4 = uVar10 + uVar7;
      break;
    case 0x24:
      uVar4 = uVar7 << (uVar10 & 0x3f);
      break;
    case 0x25:
      uVar4 = uVar7 >> (uVar10 & 0x3f);
      break;
    case 0x26:
      uVar4 = (long)uVar7 >> (uVar10 & 0x3f);
      break;
    case 0x27:
      uVar4 = uVar10 ^ uVar7;
      break;
    case 0x29:
      uVar4 = (ulong)(uVar7 == uVar10);
      break;
    case 0x2a:
      uVar4 = (ulong)((long)uVar10 <= (long)uVar7);
      break;
    case 0x2b:
      uVar4 = (ulong)((long)uVar10 < (long)uVar7);
      break;
    case 0x2c:
      uVar4 = (ulong)((long)uVar7 <= (long)uVar10);
      break;
    case 0x2d:
      uVar4 = (ulong)((long)uVar7 < (long)uVar10);
      break;
    case 0x2e:
      uVar4 = (ulong)(uVar7 != uVar10);
    }
  }
  else {
    if (uVar13 != 0x90) {
      if (uVar13 < 0x91) {
        if (bVar1 < 0x70) {
          iVar3 = uVar12 - 0x50;
          goto LAB_00433b30;
        }
        param_1 = (byte *)FUN_00432a28(param_1,&local_210);
        lVar6 = _Unwind_GetGR(param_3,uVar13 - 0x70);
      }
      else {
        if (uVar13 == 0x94) goto LAB_00433c04;
        if (0x94 < uVar13) {
          if (uVar13 != 0x96) {
            if (uVar13 == 0xf1) {
              bVar1 = pbVar9[1];
              uVar5 = FUN_00432ed8(bVar1,param_3);
              param_1 = (byte *)FUN_00432a68(bVar1,uVar5,pbVar9 + 2,&local_208);
              uVar4 = local_208;
              goto LAB_00433ddc;
            }
            goto switchD_00433c78_caseD_3;
          }
          goto LAB_004338bc;
        }
        if (bVar1 != 0x92) goto switchD_00433c78_caseD_3;
        uVar5 = FUN_00432a00(param_1,local_220);
        param_1 = (byte *)FUN_00432a28(uVar5,&local_210);
        lVar6 = _Unwind_GetGR(param_3,local_220[0]);
      }
      uVar4 = lVar6 + local_210;
      goto LAB_00433ddc;
    }
    param_1 = (byte *)FUN_00432a00(param_1,local_220);
    iVar3 = local_220[0];
LAB_00433b30:
    uVar4 = _Unwind_GetGR(param_3,iVar3);
  }
LAB_00433ddc:
  if (0x3f < uVar11) goto switchD_00433c78_caseD_3;
  local_200[(int)uVar11] = uVar4;
  uVar11 = uVar11 + 1;
  goto LAB_004338bc;
}


==================================================================

### FUNC 00433e20 (524 bytes) name=FUN_00433e20

void FUN_00433e20(void *param_1,long *param_2)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  undefined1 *puVar5;
  long *plVar6;
  undefined1 auStack_3d0 [8];
  long local_3c8;
  long alStack_3c0 [31];
  long local_2c8;
  ulong local_80;
  char acStack_68 [31];
  char local_49;
  
  memcpy(alStack_3c0,param_1,0x3c0);
  if ((((local_80 >> 0x3e & 1) == 0) || (local_49 == '\0')) && (local_2c8 == 0)) {
    FUN_00432c6c(alStack_3c0,*(undefined8 *)((long)param_1 + 0x310),auStack_3d0);
  }
  if ((*(ulong *)((long)param_1 + 0x340) >> 0x3e & 1) != 0) {
    *(undefined1 *)((long)param_1 + 0x377) = 0;
  }
  lVar2 = param_2[200];
  *(undefined8 *)((long)param_1 + 0xf8) = 0;
  if ((int)lVar2 == 1) {
    lVar2 = _Unwind_GetGR(alStack_3c0,(int)param_2[0xc6]);
    lVar2 = lVar2 + param_2[0xc5];
  }
  else {
    if ((int)lVar2 != 2) {
LAB_00433f68:
                    /* WARNING: Subroutine does not return */
      abort();
    }
    lVar2 = FUN_00432a00(param_2[199],&local_3c8);
    lVar2 = FUN_0043386c(lVar2,lVar2 + local_3c8,alStack_3c0,0);
  }
  *(long *)((long)param_1 + 0x310) = lVar2;
  puVar5 = (undefined1 *)((long)param_1 + 0x358);
  lVar4 = 0;
                    /* try { // try from 00433f04 to 005342c3 has its CatchHandler @ 00433ac0 */
  plVar6 = param_2;
  do {
    switch((int)plVar6[1]) {
    case 1:
      lVar3 = lVar2 + *plVar6;
      break;
    case 2:
      if (acStack_68[(int)*plVar6] != '\0') {
        lVar3 = _Unwind_GetGR(alStack_3c0);
        goto LAB_00433f58;
      }
      lVar3 = alStack_3c0[(int)*plVar6];
      break;
    case 3:
      lVar3 = FUN_00432a00(*plVar6,&local_3c8);
      lVar3 = FUN_0043386c(lVar3,lVar3 + local_3c8,alStack_3c0,lVar2);
      break;
    case 4:
      lVar3 = lVar2 + *plVar6;
      goto LAB_00433f58;
    case 5:
      lVar3 = FUN_00432a00(*plVar6,&local_3c8);
      lVar3 = FUN_0043386c(lVar3,lVar3 + local_3c8,alStack_3c0,lVar2);
LAB_00433f58:
      if ((byte)(&DAT_00547790)[lVar4] < 9) {
        *puVar5 = 1;
        goto LAB_00433fd8;
      }
      goto LAB_00433f68;
    default:
      goto switchD_00433f30_default;
    }
    if ((*(ulong *)((long)param_1 + 0x340) >> 0x3e & 1) != 0) {
      *puVar5 = 0;
    }
LAB_00433fd8:
    *(long *)((long)param_1 + lVar4 * 8) = lVar3;
switchD_00433f30_default:
    lVar4 = lVar4 + 1;
    plVar6 = plVar6 + 2;
    puVar5 = puVar5 + 1;
    if (lVar4 == 0x62) {
      uVar1 = *(ulong *)((long)param_1 + 0x340) & 0x7fffffffffffffff;
      if (*(char *)((long)param_2 + 0x673) != '\0') {
        uVar1 = *(ulong *)((long)param_1 + 0x340) | 0x8000000000000000;
      }
      *(ulong *)((long)param_1 + 0x340) = uVar1;
      return;
    }
  } while( true );
}


==================================================================

### FUNC 0043402c (220 bytes) name=FUN_0043402c

void FUN_0043402c(void *param_1,undefined8 param_2,undefined8 param_3)

{
  int iVar1;
  undefined8 unaff_x30;
  undefined1 auStack_688 [8];
  undefined1 auStack_680 [1576];
  undefined8 local_58;
  undefined8 local_50;
  undefined4 local_40;
  
  memset(param_1,0,0x3c0);
  *(undefined8 *)((long)param_1 + 0x318) = unaff_x30;
  *(undefined8 *)((long)param_1 + 0x340) = 0x4000000000000000;
  iVar1 = FUN_00433448(param_1,auStack_680);
  if (iVar1 != 0) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  if (((PTR_pthread_create_00501cc8 == (undefined *)0x0) ||
      (iVar1 = pthread_once((pthread_once_t *)&DAT_005477f4,FUN_00432b58), iVar1 != 0)) &&
     (DAT_00547790 == '\0')) {
    FUN_00432b58();
  }
  FUN_00432c6c(param_1,param_2,auStack_688);
  local_58 = 0;
  local_40 = 1;
  local_50 = 0x1f;
  FUN_00433e20(param_1,auStack_680);
  *(undefined8 *)((long)param_1 + 0x318) = param_3;
  return;
}


==================================================================

### FUNC 00434108 (76 bytes) name=FUN_00434108

void FUN_00434108(long param_1,long param_2)

{
  undefined8 uVar1;
  
  FUN_00433e20();
  if (*(int *)(param_2 + *(long *)(param_2 + 0x668) * 0x10 + 8) == 6) {
    *(undefined8 *)(param_1 + 0x318) = 0;
  }
  else {
    uVar1 = _Unwind_GetGR(param_1);
    *(undefined8 *)(param_1 + 0x318) = uVar1;
  }
  return;
}


==================================================================

### FUNC 00434154 (192 bytes) name=FUN_00434154

undefined8 FUN_00434154(undefined8 *param_1,long param_2)

{
  int iVar1;
  long lVar2;
  undefined8 uVar3;
  uint uVar4;
  undefined1 auStack_680 [1616];
  code *local_30;
  
  do {
    iVar1 = FUN_00433448(param_2,auStack_680);
    lVar2 = _Unwind_GetCFA(param_2);
    uVar4 = 4;
    if (lVar2 + (*(long *)(param_2 + 0x340) >> 0x3f) != param_1[3]) {
      uVar4 = 0;
    }
    if (iVar1 != 0) {
      return 2;
    }
    if (local_30 != (code *)0x0) {
      uVar3 = (*local_30)(1,uVar4 | 2,*param_1,param_1,param_2);
      if ((int)uVar3 == 7) {
        return uVar3;
      }
      if ((int)uVar3 != 8) {
        return 2;
      }
    }
    if (uVar4 != 0) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
    FUN_00434108(param_2,auStack_680);
  } while( true );
}


==================================================================

### FUNC 00434214 (236 bytes) name=FUN_00434214

undefined4 FUN_00434214(undefined8 *param_1,undefined8 param_2)

{
  int iVar1;
  int iVar2;
  code *pcVar3;
  undefined8 uVar4;
  undefined4 uVar5;
  undefined1 auStack_680 [1616];
  code *local_30;
  
  pcVar3 = (code *)param_1[2];
  uVar4 = param_1[3];
  while( true ) {
    iVar1 = FUN_00433448(param_2,auStack_680);
    if ((iVar1 != 5) && (iVar1 != 0)) {
      return 2;
    }
    uVar5 = 0x1a;
    if (iVar1 != 5) {
      uVar5 = 10;
    }
    iVar2 = (*pcVar3)(1,uVar5,*param_1,param_1,param_2,uVar4);
    if (iVar2 != 0) break;
    if (iVar1 == 5) {
      return 5;
    }
    if (local_30 != (code *)0x0) {
      iVar1 = (*local_30)(1,10,*param_1,param_1,param_2);
      if (iVar1 == 7) {
        return 7;
      }
      if (iVar1 != 8) {
        return 2;
      }
    }
    FUN_00434108(param_2,auStack_680);
  }
  return 2;
}


==================================================================

### FUNC 00434300 (244 bytes) name=__frame_state_for

long __frame_state_for(long param_1,long param_2)

{
  char cVar1;
  int iVar2;
  char *pcVar3;
  undefined8 *puVar4;
  long lVar5;
  char *pcVar6;
  undefined1 auStack_a40 [792];
  long local_728;
  undefined8 local_700;
  undefined8 local_6f0;
  undefined8 local_680;
  char local_678 [1568];
  undefined8 local_58;
  undefined2 local_50;
  int local_40;
  undefined2 local_18;
  undefined8 local_8;
  
                    /* try { // try from 00434320 to 00534323 has its CatchHandler @ 00434798 */
  memset(auStack_a40,0,0x3c0);
                    /* try { // try from 00434334 to 00534337 has its CatchHandler @ 004348a8 */
  local_700 = 0x4000000000000000;
  local_728 = param_1 + 1;
                    /* try { // try from 00434348 to 0053434b has its CatchHandler @ 004348e4 */
  iVar2 = FUN_00433448(auStack_a40,&local_680);
  lVar5 = 0;
                    /* try { // try from 0043435c to 0053435f has its CatchHandler @ 00433ac0 */
  if ((iVar2 == 0) && (local_40 != 2)) {
    pcVar3 = local_678;
    pcVar6 = (char *)(param_2 + 0x334);
    puVar4 = (undefined8 *)(param_2 + 0x20);
    do {
      cVar1 = *pcVar3;
      *pcVar6 = cVar1;
      if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
        *puVar4 = *(undefined8 *)(pcVar3 + -8);
      }
      else {
        *puVar4 = 0;
      }
      pcVar3 = pcVar3 + 0x10;
      pcVar6 = pcVar6 + 1;
      puVar4 = puVar4 + 1;
    } while (pcVar3 != (char *)&local_58);
    *(undefined8 *)(param_2 + 0x10) = local_58;
    *(undefined2 *)(param_2 + 0x330) = local_50;
    *(undefined2 *)(param_2 + 0x332) = local_18;
    *(undefined8 *)(param_2 + 0x18) = local_6f0;
    *(undefined8 *)(param_2 + 8) = local_8;
    lVar5 = param_2;
  }
  return lVar5;
}


==================================================================

### FUNC 004343f4 (4 bytes) name=FUN_004343f4

void FUN_004343f4(void)

{
  return;
}


==================================================================

### FUNC 004343f8 (376 bytes) name=_Unwind_RaiseException

undefined1  [16] _Unwind_RaiseException(undefined8 *param_1,undefined8 param_2)

{
  undefined1 auVar1 [16];
  int iVar2;
  long lVar3;
  undefined1 auStack_e00 [960];
  undefined1 auStack_a40 [784];
  undefined8 local_730;
  undefined8 local_728;
  long local_700;
  undefined1 auStack_680 [1616];
  code *local_30;
  
  FUN_0043402c(auStack_e00,&stack0x00000000);
  memcpy(auStack_a40,auStack_e00,0x3c0);
  do {
    iVar2 = FUN_00433448(auStack_a40,auStack_680);
    if ((iVar2 == 5) || (iVar2 != 0)) goto LAB_00434530;
    if (local_30 != (code *)0x0) {
      iVar2 = (*local_30)(1,1,*param_1,param_1,auStack_a40);
      if (iVar2 == 6) {
        param_1[2] = 0;
        lVar3 = _Unwind_GetCFA(auStack_a40);
        param_1[3] = lVar3 + (local_700 >> 0x3f);
        memcpy(auStack_a40,auStack_e00,0x3c0);
        iVar2 = FUN_00434154(param_1,auStack_a40);
        if (iVar2 == 7) {
          FUN_00432d00(auStack_e00,auStack_a40);
          FUN_004343f4(local_730,local_728);
        }
LAB_00434530:
        auVar1._8_8_ = param_2;
        auVar1._0_8_ = param_1;
        return auVar1;
      }
      if (iVar2 != 8) goto LAB_00434530;
    }
    FUN_00434108(auStack_a40,auStack_680);
  } while( true );
}


==================================================================

### FUNC 00434570 (244 bytes) name=_Unwind_ForcedUnwind

undefined1  [16] _Unwind_ForcedUnwind(long param_1,undefined8 param_2,undefined8 param_3)

{
  undefined1 auVar1 [16];
  int iVar2;
  undefined1 auStack_780 [960];
  undefined1 auStack_3c0 [784];
  undefined8 local_b0;
  undefined8 local_a8;
  
  FUN_0043402c(auStack_780,&stack0x00000000);
  memcpy(auStack_3c0,auStack_780,0x3c0);
  *(undefined8 *)(param_1 + 0x10) = param_2;
  *(undefined8 *)(param_1 + 0x18) = param_3;
  iVar2 = FUN_00434214(param_1,auStack_3c0);
  if (iVar2 == 7) {
    FUN_00432d00(auStack_780,auStack_3c0);
    FUN_004343f4(local_b0,local_a8);
  }
  auVar1._8_8_ = param_2;
  auVar1._0_8_ = param_1;
                    /* try { // try from 00434638 to 0053464b has its CatchHandler @ 004348a0 */
                    /* try { // try from 0043465c to 0053465f has its CatchHandler @ 0043483c */
  return auVar1;
}


==================================================================

### FUNC 00434664 (252 bytes) name=_Unwind_Resume

undefined1  [16] _Unwind_Resume(long param_1,undefined8 param_2)

{
  undefined1 auVar1 [16];
  int iVar2;
  undefined1 auStack_780 [960];
  undefined1 auStack_3c0 [784];
  undefined8 local_b0;
  undefined8 local_a8;
  
                    /* try { // try from 00434668 to 005346d7 has its CatchHandler @ 004348a0 */
  FUN_0043402c(auStack_780,&stack0x00000000);
  memcpy(auStack_3c0,auStack_780,0x3c0);
  if (*(long *)(param_1 + 0x10) == 0) {
    iVar2 = FUN_00434154(param_1,auStack_3c0);
  }
  else {
                    /* try { // try from 004346e8 to 005346eb has its CatchHandler @ 00434978 */
    iVar2 = FUN_00434214(param_1,auStack_3c0);
  }
  if (iVar2 != 7) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
                    /* try { // try from 004346fc to 005346ff has its CatchHandler @ 00434934 */
  FUN_00432d00(auStack_780,auStack_3c0);
                    /* try { // try from 00434708 to 0053470b has its CatchHandler @ 004348a0 */
  FUN_004343f4(local_b0,local_a8);
  auVar1._8_8_ = param_2;
  auVar1._0_8_ = param_1;
  return auVar1;
}


==================================================================

### FUNC 00434760 (248 bytes) name=_Unwind_Resume_or_Rethrow

undefined1  [16] _Unwind_Resume_or_Rethrow(long param_1,undefined8 param_2)

{
  undefined1 auVar1 [16];
  int iVar2;
  undefined1 auStack_780 [960];
  undefined1 auStack_3c0 [784];
  undefined8 local_b0;
  undefined8 local_a8;
  
                    /* try { // try from 00434794 to 00534797 has its CatchHandler @ 00433ac0 */
                    /* catch() { ... } // from try @ 00434320 with catch @ 00434798 */
  if (*(long *)(param_1 + 0x10) == 0) {
    _Unwind_RaiseException();
                    /* try { // try from 004347ac to 005347d3 has its CatchHandler @ 004347d4 */
  }
  else {
    FUN_0043402c(auStack_780,&stack0x00000000);
                    /* catch() { ... } // from try @ 004347ac with catch @ 004347d4 */
    memcpy(auStack_3c0,auStack_780,0x3c0);
    iVar2 = FUN_00434214(param_1,auStack_3c0);
    if (iVar2 != 7) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
                    /* try { // try from 004347f0 to 00534803 has its CatchHandler @ 00434804 */
    FUN_00432d00(auStack_780,auStack_3c0);
                    /* catch() { ... } // from try @ 004347f0 with catch @ 00434804
                       catch() { ... } // from try @ 00434834 with catch @ 00434804 */
    FUN_004343f4(local_b0,local_a8);
                    /* try { // try from 00434810 to 00534813 has its CatchHandler @ 00433ac0 */
                    /* catch() { ... } // from try @ 004348bc with catch @ 00434814 */
  }
  auVar1._8_8_ = param_2;
  auVar1._0_8_ = param_1;
                    /* try { // try from 00434834 to 00534837 has its CatchHandler @ 00434804 */
                    /* catch() { ... } // from try @ 0043465c with catch @ 0043483c */
                    /* try { // try from 0043484c to 00534873 has its CatchHandler @ 00434874 */
  return auVar1;
}


==================================================================

### FUNC 00434858 (36 bytes) name=_Unwind_DeleteException

void _Unwind_DeleteException(long param_1)

{
  if (*(code **)(param_1 + 8) != (code *)0x0) {
    (**(code **)(param_1 + 8))(1,param_1);
  }
                    /* catch() { ... } // from try @ 0043484c with catch @ 00434874 */
  return;
}


==================================================================

### FUNC 0043487c (208 bytes) name=_Unwind_Backtrace

undefined8 _Unwind_Backtrace(code *param_1,undefined8 param_2)

{
  int iVar1;
  int iVar2;
  undefined1 auStack_a40 [960];
  undefined1 auStack_680 [1664];
  
                    /* try { // try from 0043489c to 0053489f has its CatchHandler @ 00433ac0 */
                    /* catch() { ... } // from try @ 00434638 with catch @ 004348a0
                       catch() { ... } // from try @ 00434668 with catch @ 004348a0
                       catch() { ... } // from try @ 00434708 with catch @ 004348a0 */
                    /* catch() { ... } // from try @ 00434334 with catch @ 004348a8 */
                    /* try { // try from 004348bc to 005348e3 has its CatchHandler @ 00434814 */
  FUN_0043402c(auStack_a40,&stack0x00000000);
                    /* catch() { ... } // from try @ 00434348 with catch @ 004348e4 */
  while (((iVar1 = FUN_00433448(auStack_a40,auStack_680), iVar1 == 5 || (iVar1 == 0)) &&
         (iVar2 = (*param_1)(auStack_a40,param_2), iVar2 == 0))) {
                    /* try { // try from 004348f8 to 0053491f has its CatchHandler @ 00434920 */
    if (iVar1 == 5) {
                    /* catch() { ... } // from try @ 004348f8 with catch @ 00434920 */
                    /* catch() { ... } // from try @ 004346fc with catch @ 00434934 */
                    /* try { // try from 00434944 to 0053496b has its CatchHandler @ 0043496c */
      return 5;
    }
    FUN_00434108(auStack_a40,auStack_680);
  }
  return 3;
}


==================================================================

### FUNC 0043494c (40 bytes) name=FUN_0043494c

void FUN_0043494c(byte *param_1,ulong *param_2)

{
  byte bVar1;
  ulong uVar2;
  ulong uVar3;
  ulong uVar4;
  
  uVar3 = 0;
  uVar4 = 0;
  do {
    bVar1 = *param_1;
    uVar2 = uVar4 & 0x3f;
    uVar4 = (ulong)((int)uVar4 + 7);
    uVar3 = uVar3 | ((ulong)bVar1 & 0x7f) << uVar2;
    param_1 = param_1 + 1;
  } while ((char)bVar1 < '\0');
                    /* catch() { ... } // from try @ 00434944 with catch @ 0043496c */
  *param_2 = uVar3;
  return;
}


==================================================================

### FUNC 00434974 (64 bytes) name=FUN_00434974

void FUN_00434974(byte *param_1,ulong *param_2)

{
  uint uVar1;
  byte bVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar4 = 0;
                    /* catch() { ... } // from try @ 004346e8 with catch @ 00434978 */
  uVar5 = 0;
  do {
    bVar2 = *param_1;
    uVar3 = uVar5 & 0x3f;
                    /* try { // try from 00434988 to 005349af has its CatchHandler @ 004349b0 */
    uVar1 = (int)uVar5 + 7;
    uVar5 = (ulong)uVar1;
    uVar4 = uVar4 | ((ulong)bVar2 & 0x7f) << uVar3;
    param_1 = param_1 + 1;
  } while ((char)bVar2 < '\0');
  if ((uVar1 < 0x40) && ((bVar2 >> 6 & 1) != 0)) {
    uVar4 = -1L << (uVar5 & 0x3f) | uVar4;
  }
  *param_2 = uVar4;
                    /* catch() { ... } // from try @ 00434988 with catch @ 004349b0 */
  return;
}


==================================================================

### FUNC 004349b4 (28 bytes) name=FUN_004349b4

int FUN_004349b4(undefined8 param_1,long param_2,long param_3)

{
  int iVar1;
  
                    /* catch() { ... } // from try @ 004349f0 with catch @ 004349c0
                       catch() { ... } // from try @ 00434a9c with catch @ 004349c0
                       catch() { ... } // from try @ 00435248 with catch @ 004349c0
                       catch() { ... } // from try @ 004353c4 with catch @ 004349c0
                       catch() { ... } // from try @ 00435728 with catch @ 004349c0
                       catch() { ... } // from try @ 00435a5c with catch @ 004349c0
                       catch() { ... } // from try @ 00435d48 with catch @ 004349c0
                       catch() { ... } // from try @ 004360b0 with catch @ 004349c0
                       catch() { ... } // from try @ 004362a8 with catch @ 004349c0
                       catch() { ... } // from try @ 00436370 with catch @ 004349c0
                       catch() { ... } // from try @ 004363b4 with catch @ 004349c0
                       catch() { ... } // from try @ 00436590 with catch @ 004349c0
                       catch() { ... } // from try @ 0043669c with catch @ 004349c0
                       catch() { ... } // from try @ 00436770 with catch @ 004349c0
                       catch() { ... } // from try @ 004368ec with catch @ 004349c0
                       catch() { ... } // from try @ 00436914 with catch @ 004349c0 */
  iVar1 = -(uint)(*(ulong *)(param_2 + 8) < *(ulong *)(param_3 + 8));
  if (*(ulong *)(param_3 + 8) < *(ulong *)(param_2 + 8)) {
    iVar1 = 1;
  }
  return iVar1;
}


==================================================================

### FUNC 004349d0 (192 bytes) name=FUN_004349d0

void FUN_004349d0(undefined8 param_1,code *param_2,long param_3,ulong param_4,int param_5)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined8 uVar4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  
  iVar3 = (int)param_4;
                    /* try { // try from 004349f0 to 00534a4b has its CatchHandler @ 004349c0 */
  while( true ) {
    uVar1 = iVar3 * 2 + 1;
    uVar5 = (ulong)uVar1;
    if (param_5 <= (int)uVar1) {
      return;
    }
    uVar2 = iVar3 * 2 + 2;
    if ((int)uVar2 < param_5) {
      uVar5 = -(ulong)(uVar1 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
      iVar3 = (*param_2)(param_1,*(undefined8 *)(param_3 + uVar5),
                         *(undefined8 *)(param_3 + uVar5 + 8));
      if (iVar3 < 0) {
        uVar1 = uVar2;
      }
      uVar5 = (ulong)uVar1;
    }
    uVar6 = -(param_4 >> 0x1f & 1) & 0xfffffff800000000 | (param_4 & 0xffffffff) << 3;
    uVar7 = -(uVar5 >> 0x1f) & 0xfffffff800000000 | uVar5 << 3;
    iVar3 = (*param_2)(param_1,*(undefined8 *)(param_3 + uVar6),*(undefined8 *)(param_3 + uVar7));
    if (-1 < iVar3) break;
    uVar4 = *(undefined8 *)(param_3 + uVar6);
    *(undefined8 *)(param_3 + uVar6) = *(undefined8 *)(param_3 + uVar7);
    *(undefined8 *)(param_3 + uVar7) = uVar4;
    iVar3 = (int)uVar5;
    param_4 = uVar5;
  }
  return;
}


==================================================================

### FUNC 00434a90 (180 bytes) name=FUN_00434a90

void FUN_00434a90(undefined8 param_1,undefined8 param_2,long param_3)

{
  long lVar1;
  long lVar2;
  uint uVar3;
  undefined8 uVar4;
  int iVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  
                    /* try { // try from 00434a94 to 00534a97 has its CatchHandler @ 004369c0 */
                    /* try { // try from 00434a9c to 00534e0b has its CatchHandler @ 004349c0 */
  uVar6 = *(ulong *)(param_3 + 8);
  lVar2 = param_3 + 0x10;
  uVar7 = uVar6 >> 1;
  while( true ) {
    uVar3 = (int)uVar7 - 1;
    uVar7 = (ulong)uVar3;
    if ((int)uVar3 < 0) break;
    FUN_004349d0(param_1,param_2,lVar2,uVar3,uVar6 & 0xffffffff);
  }
  lVar8 = 0;
  iVar5 = (int)uVar6 + -1;
  lVar1 = lVar2 + (long)iVar5 * 8;
  for (; 0 < iVar5; iVar5 = iVar5 + -1) {
    uVar4 = *(undefined8 *)(param_3 + 0x10);
    *(undefined8 *)(param_3 + 0x10) = *(undefined8 *)(lVar1 + lVar8);
    *(undefined8 *)(lVar1 + lVar8) = uVar4;
    lVar8 = lVar8 + -8;
    FUN_004349d0(param_1,param_2,lVar2,0,iVar5);
  }
  return;
}


==================================================================

### FUNC 00434b44 (96 bytes) name=FUN_00434b44

undefined8 FUN_00434b44(byte param_1)

{
  undefined8 uVar1;
  
  if (param_1 == 0xff) {
    uVar1 = 0;
  }
  else {
    switch(param_1 & 7) {
    case 0:
    case 4:
      uVar1 = 8;
      break;
    default:
                    /* WARNING: Subroutine does not return */
      abort();
    case 2:
      uVar1 = 2;
      break;
    case 3:
      uVar1 = 4;
    }
  }
  return uVar1;
}


==================================================================

### FUNC 00434ba4 (96 bytes) name=FUN_00434ba4

undefined8 FUN_00434ba4(byte param_1,long param_2)

{
  byte bVar1;
  bool bVar2;
  
  if (param_1 != 0xff) {
    bVar1 = param_1 & 0x70;
    if (bVar1 == 0x20) {
      return *(undefined8 *)(param_2 + 8);
    }
    if (bVar1 < 0x21) {
      bVar2 = bVar1 == 0x10;
      if ((param_1 & 0x70) == 0) {
        return 0;
      }
    }
    else {
      if (bVar1 == 0x30) {
        return *(undefined8 *)(param_2 + 0x10);
      }
      bVar2 = bVar1 == 0x50;
    }
    if (!bVar2) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
  }
  return 0;
}


==================================================================

### FUNC 00434c04 (96 bytes) name=FUN_00434c04

undefined8 FUN_00434c04(byte param_1,long param_2)

{
  byte bVar1;
  bool bVar2;
  
  if (param_1 != 0xff) {
    bVar1 = param_1 & 0x70;
    if (bVar1 == 0x20) {
      return *(undefined8 *)(param_2 + 8);
    }
    if (bVar1 < 0x21) {
      bVar2 = bVar1 == 0x10;
      if ((param_1 & 0x70) == 0) {
        return 0;
      }
    }
    else {
      if (bVar1 == 0x30) {
        return *(undefined8 *)(param_2 + 0x10);
      }
      bVar2 = bVar1 == 0x50;
    }
    if (!bVar2) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
  }
  return 0;
}


==================================================================

### FUNC 00434c64 (240 bytes) name=FUN_00434c64

ulong * FUN_00434c64(byte param_1,ulong *param_2,ulong *param_3,ulong *param_4)

{
  ulong *puVar1;
  ulong *local_8;
  
  if (param_1 == 0x50) {
    local_8 = (ulong *)((long)param_3 + 7U & 0xfffffffffffffff8);
    puVar1 = local_8 + 1;
    local_8 = (ulong *)*local_8;
  }
  else {
    switch(param_1 & 0xf) {
    case 0:
    case 4:
    case 0xc:
      puVar1 = param_3 + 1;
      local_8 = (ulong *)*param_3;
      break;
    case 1:
      puVar1 = (ulong *)FUN_0043494c(param_3,&local_8);
      break;
    case 2:
      puVar1 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong *)(ulong)(ushort)*param_3;
      break;
    case 3:
      puVar1 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong *)(ulong)(uint)*param_3;
      break;
    default:
                    /* WARNING: Subroutine does not return */
      abort();
    case 9:
      puVar1 = (ulong *)FUN_00434974(param_3,&local_8);
      break;
    case 10:
      puVar1 = (ulong *)((long)param_3 + 2);
      local_8 = (ulong *)(long)(short)*param_3;
      break;
    case 0xb:
      puVar1 = (ulong *)((long)param_3 + 4);
      local_8 = (ulong *)(long)(int)(uint)*param_3;
    }
    if (local_8 != (ulong *)0x0) {
      if ((param_1 & 0x70) != 0x10) {
        param_3 = param_2;
      }
      local_8 = (ulong *)((long)local_8 + (long)param_3);
      if ((char)param_1 < '\0') {
        local_8 = (ulong *)*local_8;
      }
    }
  }
  *param_4 = (ulong)local_8;
  return puVar1;
}


==================================================================

### FUNC 00434d54 (144 bytes) name=FUN_00434d54

int FUN_00434d54(long param_1,long param_2,long param_3)

{
  int iVar1;
  ushort uVar2;
  undefined8 uVar3;
  ulong local_10;
  ulong local_8;
  
  uVar2 = *(ushort *)(param_1 + 0x20) >> 3 & 0xff;
  uVar3 = FUN_00434ba4(uVar2,param_1);
  FUN_00434c64(uVar2,uVar3,param_2 + 8,&local_10);
  FUN_00434c64(*(ushort *)(param_1 + 0x20) >> 3,uVar3,param_3 + 8,&local_8);
  iVar1 = -(uint)(local_10 < local_8);
  if (local_8 < local_10) {
    iVar1 = 1;
  }
  return iVar1;
}


==================================================================

### FUNC 00434de4 (252 bytes) name=FUN_00434de4

byte FUN_00434de4(long param_1)

{
  char cVar1;
  byte bVar2;
  size_t sVar3;
  undefined8 uVar4;
  long lVar5;
  byte *pbVar6;
  char *pcVar7;
  char *pcVar8;
  undefined1 auStack_18 [8];
  undefined1 auStack_10 [8];
  undefined1 auStack_8 [8];
  
  pcVar8 = (char *)(param_1 + 9);
  sVar3 = strlen(pcVar8);
  pcVar7 = pcVar8 + sVar3 + 1;
  if (3 < *(byte *)(param_1 + 8)) {
    if (pcVar8[sVar3 + 1] != '\b') {
      return 0xff;
    }
    if (pcVar7[1] != '\0') {
      return 0xff;
    }
    pcVar7 = pcVar7 + 2;
  }
  if (*(char *)(param_1 + 9) == 'z') {
    uVar4 = FUN_0043494c(pcVar7,auStack_10);
    lVar5 = FUN_00434974(uVar4,auStack_8);
    if (*(char *)(param_1 + 8) == '\x01') {
      lVar5 = lVar5 + 1;
    }
    else {
      lVar5 = FUN_0043494c(lVar5,auStack_10);
    }
    pbVar6 = (byte *)FUN_0043494c(lVar5,auStack_10);
    for (pcVar8 = (char *)(param_1 + 10); cVar1 = *pcVar8, cVar1 != 'R'; pcVar8 = pcVar8 + 1) {
      if (cVar1 == 'P') {
        pbVar6 = (byte *)FUN_00434c64(*pbVar6 & 0x7f,0,pbVar6 + 1,auStack_18);
      }
      else {
        if (cVar1 != 'L') goto LAB_00434e3c;
        pbVar6 = pbVar6 + 1;
      }
                    /* try { // try from 00434ed0 to 00534edf has its CatchHandler @ 004369f4 */
    }
    bVar2 = *pbVar6;
  }
  else {
LAB_00434e3c:
    bVar2 = 0;
  }
  return bVar2;
}


==================================================================

### FUNC 00434ee0 (352 bytes) name=FUN_00434ee0

uint * FUN_00434ee0(long param_1,uint *param_2,long param_3)

{
  undefined8 uVar1;
  long lVar2;
  ulong uVar3;
  undefined8 uVar4;
  ulong uVar5;
  long lVar6;
  ulong uVar7;
  ulong local_10;
  ulong local_8;
  
  uVar3 = (ulong)(*(ushort *)(param_1 + 0x20) >> 3);
  uVar7 = uVar3 & 0xff;
  uVar1 = FUN_00434ba4(uVar3 & 0xff,param_1);
  lVar2 = 0;
  do {
    if (*param_2 == 0) {
      return (uint *)0x0;
    }
    if (param_2[1] != 0) {
      lVar6 = lVar2;
      if (((*(byte *)(param_1 + 0x20) >> 2 & 1) != 0) &&
         (lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]), lVar6 != lVar2)) {
        uVar3 = FUN_00434de4(lVar6);
        uVar7 = uVar3 & 0xffffffff;
        uVar1 = FUN_00434ba4(uVar3,param_1);
      }
                    /* try { // try from 00434f74 to 00534f77 has its CatchHandler @ 004369d0 */
      if ((uint)uVar7 == 0) {
        local_10 = *(ulong *)(param_2 + 2);
        local_8 = *(ulong *)(param_2 + 4);
        uVar3 = local_10;
      }
      else {
        uVar4 = FUN_00434c64(uVar7 & 0xff,uVar1,param_2 + 2,&local_10);
        FUN_00434c64((uint)uVar7 & 0xf,0,uVar4,&local_8);
        uVar3 = FUN_00434b44(uVar7 & 0xff);
        uVar5 = 0xffffffffffffffff;
        if ((uVar3 & 0xffffffff) < 8) {
          uVar5 = (1L << ((uVar3 & 7) << 3)) - 1;
        }
        uVar3 = uVar5 & local_10;
      }
      lVar2 = lVar6;
      if ((uVar3 != 0) && (param_3 - local_10 < local_8)) {
        return param_2;
      }
    }
    param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);
  } while( true );
}


==================================================================

### FUNC 00435040 (16 bytes) name=FUN_00435040

void FUN_00435040(long param_1)

{
                    /* try { // try from 00435040 to 0053520f has its CatchHandler @ 00436a90 */
  FUN_00434de4((param_1 + 4) - (long)*(int *)(param_1 + 4));
  return;
}


==================================================================

### FUNC 00435050 (1052 bytes) name=FUN_00435050

undefined8 FUN_00435050(ulong *param_1,ulong param_2,ulong *param_3)

{
  long lVar1;
  char cVar2;
  int iVar3;
  bool bVar4;
  byte bVar5;
  undefined1 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  ulong uVar9;
  ulong *puVar10;
  undefined8 *puVar11;
  ulong uVar12;
  ulong *puVar13;
  ulong uVar14;
  ulong *puVar15;
  int *piVar16;
  ulong uVar17;
  int *piVar18;
  ulong *puVar19;
  int *piVar20;
  int *piVar21;
  ulong uVar22;
  undefined8 local_40;
  ulong local_38;
  long local_30;
  ulong local_28;
  ulong local_20;
  undefined8 local_18;
  undefined8 local_10;
  
  piVar16 = (int *)param_1[2];
  uVar17 = *param_1;
  if ((param_2 < 0x30) || ((int)param_3[5] == 0)) {
    if (param_2 < 0x1a) {
      return 0xffffffff;
    }
  }
  else {
    if ((param_1[4] == DAT_00509648) && (param_1[5] == DAT_005477f8)) {
      puVar19 = DAT_00547800;
      puVar13 = (ulong *)0x0;
      puVar15 = (ulong *)0x0;
      while (puVar10 = puVar19, puVar10 != (ulong *)0x0) {
        if ((*puVar10 <= *param_3) && (*param_3 < puVar10[1])) {
          uVar17 = puVar10[2];
          piVar18 = (int *)puVar10[3];
          if (puVar10 != DAT_00547800) {
            puVar15[5] = puVar10[5];
            puVar10[5] = (ulong)DAT_00547800;
            DAT_00547800 = puVar10;
          }
          goto LAB_00435260;
        }
        puVar13 = puVar10;
        if (*puVar10 == 0 && puVar10[1] == 0) break;
        puVar19 = (ulong *)puVar10[5];
        if (puVar19 != (ulong *)0x0) {
          puVar15 = puVar10;
        }
      }
      goto LAB_00435180;
    }
    puVar11 = &DAT_00547838;
    DAT_00509648 = param_1[4];
    DAT_005477f8 = param_1[5];
    do {
      puVar11[-6] = 0;
      puVar11[-5] = 0;
      puVar11[-1] = puVar11;
      puVar11 = puVar11 + 6;
    } while (puVar11 != (undefined8 *)0x5479b8);
    DAT_00547980 = 0;
    DAT_00547800 = &DAT_00547808;
    *(undefined4 *)(param_3 + 5) = 0;
  }
  puVar15 = (ulong *)0x0;
  puVar13 = (ulong *)0x0;
LAB_00435180:
  uVar22 = (ulong)(ushort)param_1[3];
  uVar9 = 0;
  uVar14 = 0;
  bVar4 = false;
  piVar21 = (int *)0x0;
  piVar18 = (int *)0x0;
  while (uVar22 = uVar22 - 1, uVar22 != 0xffffffffffffffff) {
    iVar3 = *piVar16;
    piVar20 = piVar18;
    if (iVar3 == 1) {
      uVar12 = uVar17 + *(long *)(piVar16 + 4);
      if ((uVar12 <= *param_3) && (*param_3 < uVar12 + *(long *)(piVar16 + 10))) {
        bVar4 = true;
        uVar9 = uVar12 + *(long *)(piVar16 + 10);
        uVar14 = uVar12;
      }
    }
    else {
      piVar20 = piVar16;
      if ((iVar3 != 0x6474e550) && (piVar20 = piVar18, iVar3 == 2)) {
        piVar21 = piVar16;
      }
    }
    piVar16 = piVar16 + 0xe;
    piVar18 = piVar20;
  }
  if (!bVar4) {
    return 0;
  }
  if (param_2 >= 0x30) {
    if ((puVar15 != (ulong *)0x0) && (puVar13 != (ulong *)0x0)) {
      puVar15[5] = puVar13[5];
      puVar13[5] = (ulong)DAT_00547800;
      DAT_00547800 = puVar13;
    }
    puVar13 = DAT_00547800;
                    /* try { // try from 00435248 to 0053529b has its CatchHandler @ 004349c0 */
    DAT_00547800[2] = uVar17;
    puVar13[3] = (ulong)piVar18;
    puVar13[4] = (ulong)piVar21;
    *puVar13 = uVar14;
    puVar13[1] = uVar9;
  }
LAB_00435260:
  if (piVar18 == (int *)0x0) {
    return 0;
  }
  lVar1 = uVar17 + *(long *)(piVar18 + 4);
  if (*(char *)(uVar17 + *(long *)(piVar18 + 4)) != '\x01') {
    return 1;
  }
  uVar6 = *(undefined1 *)(lVar1 + 1);
  uVar7 = FUN_00434c04(uVar6,param_3);
  uVar7 = FUN_00434c64(uVar6,uVar7,lVar1 + 4,&local_40);
  cVar2 = *(char *)(lVar1 + 2);
                    /* try { // try from 004352a8 to 005352ab has its CatchHandler @ 00436a6c */
                    /* try { // try from 004352b4 to 005352b7 has its CatchHandler @ 00436a90 */
  if ((cVar2 != -1) && (*(char *)(lVar1 + 3) == ';')) {
                    /* try { // try from 004352c0 to 005352c3 has its CatchHandler @ 00436a6c */
    uVar8 = FUN_00434c04(cVar2,param_3);
    piVar16 = (int *)FUN_00434c64(cVar2,uVar8,uVar7,&local_38);
    if (local_38 == 0) {
      return 1;
    }
    if (((ulong)piVar16 & 3) == 0) {
      uVar17 = *param_3;
      if (uVar17 < (ulong)(lVar1 + *piVar16)) {
        return 1;
      }
      uVar9 = local_38 - 1;
      if (uVar17 < (ulong)(lVar1 + piVar16[uVar9 * 2])) {
        uVar14 = 0;
        uVar22 = uVar9;
        do {
          uVar12 = uVar22;
          if (uVar12 <= uVar14) {
                    /* WARNING: Subroutine does not return */
            abort();
          }
          uVar9 = uVar12 + uVar14 >> 1;
          uVar22 = uVar9;
        } while ((uVar17 < (ulong)(lVar1 + piVar16[uVar9 * 2])) ||
                (uVar14 = uVar9 + 1, uVar22 = uVar12,
                (ulong)(lVar1 + piVar16[uVar9 * 2 + 2]) <= uVar17));
      }
      uVar17 = lVar1 + piVar16[uVar9 * 2 + 1];
      bVar5 = FUN_00435040(uVar17);
      uVar14 = FUN_00434b44(bVar5);
      FUN_00434c64(bVar5 & 0xf,0,uVar17 + (uVar14 & 0xffffffff) + 8,&local_30);
      iVar3 = piVar16[uVar9 * 2];
                    /* try { // try from 004353c4 to 005355cb has its CatchHandler @ 004349c0 */
      if (*param_3 < (ulong)(lVar1 + iVar3 + local_30)) {
        param_3[4] = uVar17;
      }
      param_3[3] = lVar1 + iVar3;
      return 1;
    }
  }
  local_28 = param_3[1];
  local_20 = param_3[2];
  local_10 = 4;
  local_30 = 0;
  local_18 = local_40;
  uVar17 = FUN_00434ee0(&local_30,local_40,*param_3);
  param_3[4] = uVar17;
  if (uVar17 != 0) {
    uVar6 = FUN_00435040();
    uVar7 = FUN_00434c04(uVar6,param_3);
    FUN_00434c64(uVar6,uVar7,param_3[4] + 8,&local_38);
    param_3[3] = local_38;
  }
  return 1;
}


==================================================================

### FUNC 0043546c (156 bytes) name=FUN_0043546c

int FUN_0043546c(undefined8 param_1,long param_2,long param_3)

{
  int iVar1;
  undefined1 uVar2;
  undefined8 uVar3;
  ulong local_10;
  ulong local_8;
  
  uVar2 = FUN_00435040(param_2);
  uVar3 = FUN_00434ba4(uVar2,param_1);
  FUN_00434c64(uVar2,uVar3,param_2 + 8,&local_10);
  uVar2 = FUN_00435040(param_3);
  uVar3 = FUN_00434ba4(uVar2,param_1);
  FUN_00434c64(uVar2,uVar3,param_3 + 8,&local_8);
  iVar1 = -(uint)(local_10 < local_8);
  if (local_8 < local_10) {
    iVar1 = 1;
  }
  return iVar1;
}


==================================================================

### FUNC 00435508 (352 bytes) name=FUN_00435508

long FUN_00435508(ulong *param_1,uint *param_2)

{
  ushort uVar1;
  uint uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  long lVar6;
  long lVar7;
  undefined8 uVar8;
  ulong local_8;
  
  uVar8 = 0;
  uVar2 = 0;
  lVar7 = 0;
  lVar3 = 0;
  do {
    if (*param_2 == 0) {
      return lVar7;
    }
    if (param_2[1] != 0) {
      lVar6 = (long)param_2 + (4 - (long)(int)param_2[1]);
      if (lVar6 != lVar3) {
        uVar2 = FUN_00434de4(lVar6);
        if (uVar2 == 0xff) {
          return -1;
        }
        uVar8 = FUN_00434ba4((char)uVar2,param_1);
        uVar1 = (ushort)param_1[4];
        lVar3 = lVar6;
        if ((uVar1 & 0x7f8) == 0x7f8) {
          *(ushort *)(param_1 + 4) = uVar1 & 0xf800 | uVar1 & 7 | (ushort)((uVar2 & 0xff) << 3);
        }
        else if ((uVar1 >> 3 & 0xff) != uVar2) {
          *(byte *)(param_1 + 4) = (byte)param_1[4] | 4;
        }
      }
      FUN_00434c64(uVar2 & 0xff,uVar8,param_2 + 2,&local_8);
                    /* try { // try from 004355e8 to 005355f7 has its CatchHandler @ 00436a98 */
      uVar4 = FUN_00434b44(uVar2 & 0xff);
      uVar5 = 0xffffffffffffffff;
      if ((uVar4 & 0xffffffff) < 8) {
        uVar5 = (1L << ((uVar4 & 7) << 3)) - 1;
      }
      if (((uVar5 & local_8) != 0) && (lVar7 = lVar7 + 1, local_8 < *param_1)) {
        *param_1 = local_8;
      }
    }
    param_2 = (uint *)((long)param_2 + (ulong)*param_2 + 4);
  } while( true );
}


==================================================================

### FUNC 00435668 (308 bytes) name=FUN_00435668

void FUN_00435668(long param_1,long *param_2,uint *param_3)

{
  undefined8 uVar1;
  long lVar2;
  ulong uVar3;
  ulong uVar4;
  long lVar5;
  long lVar6;
  ulong uVar7;
  ulong local_8;
  
  uVar3 = (ulong)(*(ushort *)(param_1 + 0x20) >> 3);
  uVar7 = uVar3 & 0xff;
  uVar1 = FUN_00434ba4(uVar3 & 0xff,param_1);
  lVar2 = 0;
  for (; *param_3 != 0; param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)) {
    if (param_3[1] != 0) {
      lVar6 = lVar2;
      if (((*(byte *)(param_1 + 0x20) >> 2 & 1) != 0) &&
         (lVar6 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar6 != lVar2)) {
        uVar3 = FUN_00434de4(lVar6);
        uVar7 = uVar3 & 0xffffffff;
        uVar1 = FUN_00434ba4(uVar3,param_1);
      }
      if ((int)uVar7 == 0) {
        uVar3 = *(ulong *)(param_3 + 2);
      }
      else {
        FUN_00434c64(uVar7 & 0xff,uVar1,param_3 + 2,&local_8);
        uVar4 = FUN_00434b44(uVar7 & 0xff);
                    /* try { // try from 00435728 to 0053591b has its CatchHandler @ 004349c0 */
        uVar3 = 0xffffffffffffffff;
        if ((uVar4 & 0xffffffff) < 8) {
          uVar3 = (1L << ((uVar4 & 7) << 3)) - 1;
        }
        uVar3 = uVar3 & local_8;
      }
      lVar2 = lVar6;
      if ((uVar3 != 0) && (lVar6 = *param_2, lVar6 != 0)) {
        lVar5 = *(long *)(lVar6 + 8);
        *(long *)(lVar6 + 8) = lVar5 + 1;
        *(uint **)(lVar6 + (lVar5 + 2) * 8) = param_3;
      }
    }
  }
  return;
}


==================================================================

### FUNC 0043579c (1392 bytes) name=FUN_0043579c

long FUN_0043579c(ulong *param_1,ulong param_2)

{
  ushort uVar1;
  ushort uVar2;
  ulong *puVar3;
  void *pvVar4;
  byte bVar5;
  uint uVar6;
  int iVar7;
  undefined8 uVar8;
  undefined8 uVar9;
  long lVar10;
  ulong uVar11;
  long *plVar12;
  size_t __size;
  ulong uVar13;
  ulong *puVar14;
  ulong *puVar15;
  code *pcVar16;
  ulong uVar17;
  ulong *puVar18;
  long lVar19;
  ulong uVar20;
  ulong *puVar21;
  ulong local_18;
  ulong *local_10;
  void *local_8;
  
  if (((byte)param_1[4] & 1) != 0) goto LAB_004357c8;
  uVar17 = (ulong)((uint)param_1[4] >> 0xb);
  if (uVar17 == 0) {
    if (((byte)param_1[4] >> 1 & 1) == 0) {
      uVar17 = FUN_00435508(param_1,param_1[3]);
      if (uVar17 != 0xffffffffffffffff) goto LAB_00435840;
LAB_00435800:
      param_1[4] = 0;
      *(undefined2 *)(param_1 + 4) = 0x7f8;
      param_1[3] = (ulong)&DAT_00547990;
    }
    else {
      for (plVar12 = (long *)param_1[3]; *plVar12 != 0; plVar12 = plVar12 + 1) {
        lVar10 = FUN_00435508(param_1);
        if (lVar10 == -1) goto LAB_00435800;
        uVar17 = uVar17 + lVar10;
      }
LAB_00435840:
      if (((uint)uVar17 & 0x1fffff) == uVar17) {
        uVar6 = (uint)param_1[4] & 0x7ff | (uint)uVar17 << 0xb;
      }
      else {
        uVar6 = (uint)param_1[4] & 0x7ff;
      }
      *(uint *)(param_1 + 4) = uVar6;
      if (uVar17 != 0) goto LAB_00435868;
    }
  }
  else {
LAB_00435868:
    __size = (uVar17 + 2) * 8;
    local_10 = malloc(__size);
    if (local_10 != (ulong *)0x0) {
      local_10[1] = 0;
      local_8 = malloc(__size);
      if (local_8 != (void *)0x0) {
        *(undefined8 *)((long)local_8 + 8) = 0;
      }
      if (((byte)param_1[4] >> 1 & 1) == 0) {
        FUN_00435668(param_1,&local_10,param_1[3]);
      }
      else {
        for (plVar12 = (long *)param_1[3]; *plVar12 != 0; plVar12 = plVar12 + 1) {
          FUN_00435668(param_1,&local_10);
        }
      }
      pvVar4 = local_8;
      puVar3 = local_10;
      if ((local_10 != (ulong *)0x0) && (local_10[1] != uVar17)) {
LAB_00435bc0:
                    /* WARNING: Subroutine does not return */
        abort();
      }
      if (((byte)param_1[4] >> 2 & 1) == 0) {
        if ((param_1[4] & 0x7f8) == 0) {
          pcVar16 = FUN_004349b4;
        }
        else {
          pcVar16 = FUN_00434d54;
        }
      }
      else {
        pcVar16 = FUN_0043546c;
      }
      if (local_8 == (void *)0x0) {
        FUN_00434a90(param_1,pcVar16,local_10);
      }
      else {
        puVar18 = local_10 + 2;
        uVar20 = local_10[1];
        puVar14 = &DAT_00547988;
        puVar21 = puVar18;
        for (uVar13 = 0; uVar13 != uVar20; uVar13 = uVar13 + 1) {
                    /* try { // try from 00435c28 to 00535c37 has its CatchHandler @ 004368f0 */
          while ((puVar14 != &DAT_00547988 &&
                 (iVar7 = (*pcVar16)(param_1,*puVar21,*puVar14), iVar7 < 0))) {
            puVar15 = *(ulong **)((long)pvVar4 + (long)puVar14 + (0x10 - (long)puVar18));
            *(undefined8 *)((long)pvVar4 + (long)puVar14 + (0x10 - (long)puVar18)) = 0;
            puVar14 = puVar15;
          }
          *(ulong **)((long)pvVar4 + uVar13 * 8 + 0x10) = puVar14;
          puVar14 = puVar21;
          puVar21 = puVar21 + 1;
        }
        lVar10 = 0;
        uVar13 = 0;
        for (uVar11 = 0; uVar11 != uVar20; uVar11 = uVar11 + 1) {
          if (*(long *)((long)pvVar4 + uVar11 * 8 + 0x10) == 0) {
            lVar19 = lVar10 + 2;
            lVar10 = lVar10 + 1;
            *(ulong *)((long)pvVar4 + lVar19 * 8) = *puVar18;
          }
          else {
            lVar19 = uVar13 + 2;
            uVar13 = uVar13 + 1;
            puVar3[lVar19] = *puVar18;
          }
          puVar18 = puVar18 + 1;
        }
        puVar3[1] = uVar13;
        *(long *)((long)pvVar4 + 8) = lVar10;
        if (*(long *)((long)local_8 + 8) + local_10[1] != uVar17) goto LAB_00435bc0;
        FUN_00434a90(param_1,pcVar16);
        pvVar4 = local_8;
        puVar3 = local_10;
        lVar10 = *(long *)((long)local_8 + 8);
        if (lVar10 != 0) {
          uVar17 = local_10[1];
          lVar19 = lVar10 << 3;
          do {
            lVar10 = lVar10 + -1;
            uVar13 = *(ulong *)((long)pvVar4 + lVar19 + 8);
            puVar18 = puVar3 + uVar17;
            while (uVar17 != 0) {
              iVar7 = (*pcVar16)(param_1,puVar18[1],uVar13);
              if (iVar7 < 1) break;
              *(ulong *)((long)(puVar18 + -1) + lVar19 + 0x10) = puVar18[1];
              uVar17 = uVar17 - 1;
              puVar18 = puVar18 + -1;
            }
            lVar19 = lVar19 + -8;
            puVar3[lVar10 + uVar17 + 2] = uVar13;
          } while (lVar10 != 0);
                    /* try { // try from 00435944 to 00535953 has its CatchHandler @ 00436a48 */
          puVar3[1] = puVar3[1] + *(long *)((long)pvVar4 + 8);
        }
        free(local_8);
      }
      *local_10 = param_1[3];
      param_1[3] = (ulong)local_10;
      *(byte *)(param_1 + 4) = (byte)param_1[4] | 1;
    }
  }
  if (param_2 < *param_1) {
    return 0;
  }
LAB_004357c8:
  bVar5 = (byte)param_1[4];
  if ((bVar5 & 1) == 0) {
    if ((bVar5 >> 1 & 1) == 0) {
      lVar10 = FUN_00434ee0(param_1,param_1[3],param_2);
      return lVar10;
    }
    for (plVar12 = (long *)param_1[3]; *plVar12 != 0; plVar12 = plVar12 + 1) {
      lVar10 = FUN_00434ee0(param_1,*plVar12,param_2);
      if (lVar10 != 0) {
        return lVar10;
      }
    }
  }
  else if ((bVar5 >> 2 & 1) == 0) {
    if (((ushort)param_1[4] & 0x7f8) == 0) {
      uVar17 = 0;
      uVar13 = *(ulong *)(param_1[3] + 8);
      while (uVar20 = uVar13, uVar17 < uVar20) {
        uVar13 = uVar20 + uVar17 >> 1;
        lVar10 = *(long *)(param_1[3] + (uVar13 + 2) * 8);
                    /* try { // try from 00435a5c to 00535c07 has its CatchHandler @ 004349c0 */
        if (*(ulong *)(lVar10 + 8) <= param_2) {
          if (param_2 < *(ulong *)(lVar10 + 8) + *(long *)(lVar10 + 0x10)) {
            return lVar10;
          }
          uVar17 = uVar13 + 1;
          uVar13 = uVar20;
        }
      }
    }
    else {
      uVar1 = (ushort)param_1[4] >> 3;
      uVar2 = uVar1 & 0xff;
      uVar20 = param_1[3];
      uVar17 = 0;
      uVar8 = FUN_00434ba4(uVar2,param_1);
      uVar13 = *(ulong *)(uVar20 + 8);
      while (uVar11 = uVar13, uVar17 < uVar11) {
        uVar13 = uVar11 + uVar17 >> 1;
        lVar10 = *(long *)(uVar20 + (uVar13 + 2) * 8);
        uVar9 = FUN_00434c64(uVar2,uVar8,lVar10 + 8,&local_18);
        FUN_00434c64(uVar1 & 0xf,0,uVar9,&local_10);
        if (local_18 <= param_2) {
          if (param_2 < local_18 + (long)local_10) {
            return lVar10;
          }
          uVar17 = uVar13 + 1;
          uVar13 = uVar11;
        }
      }
    }
  }
  else {
    uVar20 = param_1[3];
    uVar17 = 0;
    uVar13 = *(ulong *)(uVar20 + 8);
    while (uVar11 = uVar13, uVar17 < uVar11) {
      uVar13 = uVar11 + uVar17 >> 1;
      lVar10 = *(long *)(uVar20 + (uVar13 + 2) * 8);
      bVar5 = FUN_00435040(lVar10);
      uVar8 = FUN_00434ba4(bVar5,param_1);
      uVar8 = FUN_00434c64(bVar5,uVar8,lVar10 + 8,&local_18);
      FUN_00434c64(bVar5 & 0xf,0,uVar8,&local_10);
      if (local_18 <= param_2) {
        if (param_2 < local_18 + (long)local_10) {
          return lVar10;
        }
        uVar17 = uVar13 + 1;
        uVar13 = uVar11;
      }
    }
  }
  return 0;
}


==================================================================

### FUNC 00435d0c (156 bytes) name=__register_frame_info_bases

int * __register_frame_info_bases
                (int *param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  
  if ((param_1 != (int *)0x0) && (*param_1 != 0)) {
    *param_2 = 0xffffffffffffffff;
    param_2[4] = 0;
    param_2[3] = param_1;
                    /* try { // try from 00435d48 to 00535f7f has its CatchHandler @ 004349c0 */
    param_2[1] = param_3;
    param_2[2] = param_4;
    *(undefined2 *)(param_2 + 4) = 0x7f8;
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      pthread_mutex_lock((pthread_mutex_t *)&DAT_00547998);
    }
    param_1 = (int *)&DAT_005477f8;
    param_2[5] = DAT_005479c0;
    DAT_005479c0 = param_2;
    if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
      uVar1 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547998);
      return (int *)(ulong)uVar1;
    }
  }
  return param_1;
}


==================================================================

### FUNC 00435da8 (12 bytes) name=__register_frame_info

void __register_frame_info(undefined8 param_1,undefined8 param_2)

{
  __register_frame_info_bases(param_1,param_2,0,0);
  return;
}


==================================================================

### FUNC 00435db4 (64 bytes) name=__register_frame

void __register_frame(int *param_1)

{
  void *pvVar1;
  
  if (*param_1 != 0) {
    pvVar1 = malloc(0x30);
    __register_frame_info(param_1,pvVar1);
    return;
  }
  return;
}


==================================================================

### FUNC 00435df4 (148 bytes) name=__register_frame_info_table_bases

int __register_frame_info_table_bases
              (undefined8 param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  int iVar1;
  
  param_2[4] = 0;
  param_2[3] = param_1;
  *(undefined1 *)(param_2 + 4) = 2;
  param_2[1] = param_3;
  *param_2 = 0xffffffffffffffff;
  param_2[2] = param_4;
  *(ushort *)(param_2 + 4) = *(ushort *)(param_2 + 4) | 0x7f8;
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_00547998);
  }
  param_2[5] = DAT_005479c0;
  DAT_005479c0 = param_2;
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    iVar1 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547998);
    return iVar1;
  }
  return 0x5477f8;
}


==================================================================

### FUNC 00435e88 (12 bytes) name=__register_frame_info_table

void __register_frame_info_table(undefined8 param_1,undefined8 param_2)

{
  __register_frame_info_table_bases(param_1,param_2,0,0);
  return;
}


==================================================================

### FUNC 00435e94 (44 bytes) name=__register_frame_table

void __register_frame_table(undefined8 param_1)

{
  void *pvVar1;
  
  pvVar1 = malloc(0x30);
  __register_frame_info_table(param_1,pvVar1);
  return;
}


==================================================================

### FUNC 00435ec0 (256 bytes) name=__deregister_frame_info_bases

long __deregister_frame_info_bases(int *param_1)

{
  long *plVar1;
  long lVar2;
  
  if ((param_1 == (int *)0x0) || (*param_1 == 0)) {
    return 0;
  }
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_00547998);
  }
  plVar1 = &DAT_005479c0;
  for (lVar2 = DAT_005479c0; lVar2 != 0; lVar2 = *(long *)(lVar2 + 0x28)) {
    if (*(int **)(lVar2 + 0x18) == param_1) goto LAB_00435f50;
    plVar1 = (long *)(lVar2 + 0x28);
  }
  plVar1 = &DAT_005479c8;
  while (lVar2 = *plVar1, lVar2 != 0) {
    if ((*(byte *)(lVar2 + 0x20) & 1) == 0) {
      if (*(int **)(lVar2 + 0x18) == param_1) goto LAB_00435f50;
    }
    else if ((int *)**(undefined8 **)(lVar2 + 0x18) == param_1) {
      *plVar1 = *(long *)(lVar2 + 0x28);
      free(*(void **)(lVar2 + 0x18));
      goto LAB_00435fa4;
    }
    plVar1 = (long *)(lVar2 + 0x28);
  }
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) goto LAB_00435fa0;
LAB_00435f90:
  pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547998);
  if (lVar2 != 0) {
    return lVar2;
  }
LAB_00435fa0:
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00435fa0 to 00535faf has its CatchHandler @ 00436948 */
  abort();
LAB_00435f50:
  *plVar1 = *(long *)(lVar2 + 0x28);
LAB_00435fa4:
  if (PTR_pthread_create_00501cc8 == (undefined *)0x0) {
    return lVar2;
  }
  goto LAB_00435f90;
}


==================================================================

### FUNC 00435fc0 (4 bytes) name=__deregister_frame_info

void __deregister_frame_info(void)

{
  (*(code *)PTR___deregister_frame_info_bases_004ffd80)();
  return;
}


==================================================================

### FUNC 00435fc4 (36 bytes) name=__deregister_frame

void __deregister_frame(int *param_1)

{
  void *__ptr;
  
  if (*param_1 != 0) {
    __ptr = (void *)__deregister_frame_info();
    free(__ptr);
    return;
  }
  return;
}


==================================================================

### FUNC 00435fe8 (452 bytes) name=_Unwind_Find_FDE

long _Unwind_Find_FDE(ulong param_1,ulong *param_2)

{
  ulong uVar1;
  undefined1 uVar2;
  int iVar3;
  long lVar4;
  undefined8 uVar5;
  ulong *puVar6;
  ulong *puVar7;
  ulong *puVar8;
  ulong local_30;
  ulong local_28;
  ulong local_20;
  ulong local_18;
  long local_10;
  undefined4 local_8;
  
  puVar8 = DAT_005479c8;
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_00547998);
    puVar8 = DAT_005479c8;
  }
  for (; puVar8 != (ulong *)0x0; puVar8 = (ulong *)puVar8[5]) {
    if (*puVar8 <= param_1) {
      lVar4 = FUN_0043579c(puVar8,param_1);
      if (lVar4 != 0) goto LAB_00436184;
      break;
    }
  }
  do {
    puVar8 = DAT_005479c0;
    if (DAT_005479c0 == (ulong *)0x0) {
      lVar4 = 0;
      if (PTR_pthread_create_00501cc8 != (undefined *)0x0) goto LAB_004360c4;
      goto LAB_00436128;
    }
    DAT_005479c0 = (ulong *)DAT_005479c0[5];
    lVar4 = FUN_0043579c(puVar8,param_1);
    puVar7 = (ulong *)&DAT_005479c8;
    for (puVar6 = DAT_005479c8; (puVar6 != (ulong *)0x0 && (*puVar8 <= *puVar6));
        puVar6 = (ulong *)puVar6[5]) {
      puVar7 = puVar6 + 5;
    }
    puVar8[5] = (ulong)puVar6;
    *puVar7 = (ulong)puVar8;
                    /* try { // try from 004360b0 to 0053611f has its CatchHandler @ 004349c0 */
  } while (lVar4 == 0);
LAB_00436184:
  if (PTR_pthread_create_00501cc8 != (undefined *)0x0) {
LAB_004360c4:
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_00547998);
    if (lVar4 == 0) {
LAB_00436128:
      local_8 = 1;
      local_28 = 0;
      local_20 = 0;
      local_18 = 0;
      local_10 = 0;
      local_30 = param_1;
      iVar3 = dl_iterate_phdr(FUN_00435050,&local_30);
      if (iVar3 < 0) {
        return 0;
      }
      if (local_10 == 0) {
        return 0;
      }
      *param_2 = local_28;
      param_2[1] = local_20;
      local_30 = local_18;
      goto LAB_0043617c;
    }
  }
  *param_2 = puVar8[1];
  uVar1 = puVar8[4];
  param_2[1] = puVar8[2];
  uVar2 = (undefined1)((ushort)puVar8[4] >> 3);
  if (((byte)uVar1 >> 2 & 1) != 0) {
    uVar2 = FUN_00435040(lVar4);
  }
  uVar5 = FUN_00434ba4(uVar2,puVar8);
  FUN_00434c64(uVar2,uVar5,lVar4 + 8,&local_30);
  local_10 = lVar4;
LAB_0043617c:
  param_2[2] = local_30;
  return local_10;
}


==================================================================

### FUNC 004361ac (96 bytes) name=__sfp_handle_exceptions

ulong __sfp_handle_exceptions(ulong param_1)

{
  undefined8 uVar1;
  uint uVar2;
  
  uVar2 = (uint)param_1;
  if ((param_1 & 1) != 0) {
    uVar1 = fpsr;
  }
  if ((uVar2 >> 1 & 1) != 0) {
    uVar1 = fpsr;
  }
  if ((uVar2 >> 2 & 1) != 0) {
    uVar1 = fpsr;
  }
  if ((uVar2 >> 3 & 1) != 0) {
    uVar1 = fpsr;
  }
  if ((uVar2 >> 4 & 1) != 0) {
    param_1 = fpsr;
  }
  return param_1;
}


==================================================================

### FUNC 00548000 (1 bytes) name=strerror

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strerror(int __errnum)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548008 (1 bytes) name=memcpy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memcpy(void *__dest,void *__src,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548010 (1 bytes) name=fopen

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

FILE * fopen(char *__filename,char *__modes)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548018 (1 bytes) name=gettimeofday

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int gettimeofday(timeval *__tv,__timezone_ptr_t __tz)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548020 (1 bytes) name=cos

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double cos(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548028 (1 bytes) name=writev

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t writev(int __fd,iovec *__iovec,int __count)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548030 (1 bytes) name=memchr

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memchr(void *__s,int __c,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548038 (1 bytes) name=gzclose

/* WARNING: Control flow encountered bad instruction data */

void gzclose(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548040 (1 bytes) name=asprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int asprintf(char **__ptr,char *__fmt,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548048 (1 bytes) name=opendir

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

DIR * opendir(char *__name)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548050 (1 bytes) name=__ctype_get_mb_cur_max

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t __ctype_get_mb_cur_max(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548058 (1 bytes) name=sin

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double sin(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548060 (1 bytes) name=logf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float logf(float __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548068 (1 bytes) name=strncpy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strncpy(char *__dest,char *__src,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548070 (1 bytes) name=usleep

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int usleep(__useconds_t __useconds)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548078 (1 bytes) name=towlower

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t towlower(wint_t __wc)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548080 (1 bytes) name=mbrtowc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t mbrtowc(wchar_t *__pwc,char *__s,size_t __n,mbstate_t *__p)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548088 (1 bytes) name=btowc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t btowc(int __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548090 (1 bytes) name=getwc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t getwc(__FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548098 (1 bytes) name=pthread_mutex_destroy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_destroy(pthread_mutex_t *__mutex)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480a0 (1 bytes) name=close

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int close(int __fd)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480a8 (1 bytes) name=pthread_mutexattr_settype

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_settype(pthread_mutexattr_t *__attr,int __kind)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480b0 (1 bytes) name=wmemmove

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemmove(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480b8 (1 bytes) name=getenv

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * getenv(char *__name)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480c0 (1 bytes) name=strftime

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strftime(char *__s,size_t __maxsize,char *__format,tm *__tp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480c8 (1 bytes) name=gzgets

/* WARNING: Control flow encountered bad instruction data */

void gzgets(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480d0 (1 bytes) name=pthread_join

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_join(pthread_t __th,void **__thread_return)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480d8 (1 bytes) name=fcntl

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fcntl(int __fd,int __cmd,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480e0 (1 bytes) name=pthread_mutex_trylock

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_trylock(pthread_mutex_t *__mutex)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480e8 (1 bytes) name=wcslen

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcslen(wchar_t *__s)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480f0 (1 bytes) name=__android_log_write

/* WARNING: Control flow encountered bad instruction data */

void __android_log_write(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005480f8 (1 bytes) name=clock_gettime

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int clock_gettime(clockid_t __clock_id,timespec *__tp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548100 (1 bytes) name=readlink

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t readlink(char *__path,char *__buf,size_t __len)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548108 (1 bytes) name=sscanf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int sscanf(char *__s,char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548110 (1 bytes) name=free

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void free(void *__ptr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548118 (1 bytes) name=sqrt

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double sqrt(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548120 (1 bytes) name=fread

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t fread(void *__ptr,size_t __size,size_t __n,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548128 (1 bytes) name=strchr

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strchr(char *__s,int __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548130 (1 bytes) name=strtold

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double strtold(char *__nptr,char **__endptr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548138 (1 bytes) name=calloc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * calloc(size_t __nmemb,size_t __size)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548140 (1 bytes) name=pthread_key_delete

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_key_delete(pthread_key_t __key)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548148 (1 bytes) name=mkdir

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int mkdir(char *__path,__mode_t __mode)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548150 (1 bytes) name=strcmp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strcmp(char *__s1,char *__s2)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548158 (1 bytes) name=AndroidBitmap_lockPixels

/* WARNING: Control flow encountered bad instruction data */

void AndroidBitmap_lockPixels(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548160 (1 bytes) name=malloc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * malloc(size_t __size)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548168 (1 bytes) name=strxfrm

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strxfrm(char *__dest,char *__src,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548170 (1 bytes) name=wmemset

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemset(wchar_t *__s,wchar_t __c,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548178 (1 bytes) name=nanosleep

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int nanosleep(timespec *__requested_time,timespec *__remaining)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548180 (1 bytes) name=pthread_cond_destroy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_destroy(pthread_cond_t *__cond)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548188 (1 bytes) name=isxdigit

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int isxdigit(int param_1)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548190 (1 bytes) name=sprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int sprintf(char *__s,char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548198 (1 bytes) name=log10

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double log10(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481a8 (1 bytes) name=pthread_setspecific

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_setspecific(pthread_key_t __key,void *__pointer)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481b0 (1 bytes) name=read

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t read(int __fd,void *__buf,size_t __nbytes)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481b8 (1 bytes) name=memmove

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memmove(void *__dest,void *__src,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481c0 (1 bytes) name=pthread_once

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_once(pthread_once_t *__once_control,__init_routine *__init_routine)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481c8 (1 bytes) name=__google_potentially_blocking_region_end

/* WARNING: Control flow encountered bad instruction data */

void __google_potentially_blocking_region_end(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481d0 (1 bytes) name=feof

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int feof(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481d8 (1 bytes) name=strlen

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t strlen(char *__s)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481e0 (1 bytes) name=wcscoll

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wcscoll(wchar_t *__s1,wchar_t *__s2)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481e8 (1 bytes) name=atan2

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double atan2(double __y,double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481f0 (1 bytes) name=access

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int access(char *__name,int __type)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005481f8 (1 bytes) name=gettid

/* WARNING: Control flow encountered bad instruction data */

void gettid(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548200 (1 bytes) name=strstr

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strstr(char *__haystack,char *__needle)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548208 (1 bytes) name=pthread_mutexattr_destroy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_destroy(pthread_mutexattr_t *__attr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548210 (1 bytes) name=fclose

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fclose(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548218 (1 bytes) name=realloc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * realloc(void *__ptr,size_t __size)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548220 (1 bytes) name=iswctype

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int iswctype(wint_t __wc,wctype_t __desc)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548228 (1 bytes) name=gzeof

/* WARNING: Control flow encountered bad instruction data */

void gzeof(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548230 (1 bytes) name=strtod

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double strtod(char *__nptr,char **__endptr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548238 (1 bytes) name=wcsftime

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcsftime(wchar_t *__s,size_t __maxsize,wchar_t *__format,tm *__tp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548240 (1 bytes) name=munmap

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int munmap(void *__addr,size_t __len)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548248 (1 bytes) name=fprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fprintf(FILE *__stream,char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548250 (1 bytes) name=wctype

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wctype_t wctype(char *__property)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548258 (1 bytes) name=putc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int putc(int __c,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548260 (1 bytes) name=pow

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double pow(double __x,double __y)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548268 (1 bytes) name=strncmp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strncmp(char *__s1,char *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548270 (1 bytes) name=fputc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fputc(int __c,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548278 (1 bytes) name=lrintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long lrintf(float __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548280 (1 bytes) name=wmemcpy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemcpy(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548288 (1 bytes) name=log

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double log(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548290 (1 bytes) name=exp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double exp(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548298 (1 bytes) name=snprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int snprintf(char *__s,size_t __maxlen,char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482a0 (1 bytes) name=getc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int getc(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482a8 (1 bytes) name=pthread_attr_setdetachstate

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_setdetachstate(pthread_attr_t *__attr,int __detachstate)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482b0 (1 bytes) name=strtol

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long strtol(char *__nptr,char **__endptr,int __base)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482b8 (1 bytes) name=__android_log_print

/* WARNING: Control flow encountered bad instruction data */

void __android_log_print(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482c0 (1 bytes) name=ftell

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long ftell(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482c8 (1 bytes) name=remove

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int remove(char *__filename)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482d0 (1 bytes) name=towupper

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t towupper(wint_t __wc)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482d8 (1 bytes) name=pthread_mutex_unlock

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_unlock(pthread_mutex_t *__mutex)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482e0 (1 bytes) name=dlsym

/* WARNING: Control flow encountered bad instruction data */

void dlsym(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482e8 (1 bytes) name=strcoll

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int strcoll(char *__s1,char *__s2)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482f0 (1 bytes) name=pthread_cond_wait

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_wait(pthread_cond_t *__cond,pthread_mutex_t *__mutex)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005482f8 (1 bytes) name=putwc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t putwc(wchar_t __wc,__FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548300 (1 bytes) name=gzputs

/* WARNING: Control flow encountered bad instruction data */

void gzputs(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548308 (1 bytes) name=wctob

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wctob(wint_t __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548310 (1 bytes) name=poll

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int poll(pollfd *__fds,nfds_t __nfds,int __timeout)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548318 (1 bytes) name=pthread_cond_timedwait

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_timedwait(pthread_cond_t *__cond,pthread_mutex_t *__mutex,timespec *__abstime)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548320 (1 bytes) name=pthread_create

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_create(pthread_t *__newthread,pthread_attr_t *__attr,__start_routine *__start_routine,
                  void *__arg)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548328 (1 bytes) name=pthread_cond_broadcast

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_broadcast(pthread_cond_t *__cond)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548330 (1 bytes) name=fwrite

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t fwrite(void *__ptr,size_t __size,size_t __n,FILE *__s)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548338 (1 bytes) name=mmap

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * mmap(void *__addr,size_t __len,int __prot,int __flags,int __fd,__off_t __offset)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548340 (1 bytes) name=strcpy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strcpy(char *__dest,char *__src)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548348 (1 bytes) name=fileno

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fileno(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548350 (1 bytes) name=vsnprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int vsnprintf(char *__s,size_t __maxlen,char *__format,__gnuc_va_list __arg)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548358 (1 bytes) name=lrint

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long lrint(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548360 (1 bytes) name=wmemcmp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int wmemcmp(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548368 (1 bytes) name=syscall

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

long syscall(long __sysno,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548370 (1 bytes) name=memset

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * memset(void *__s,int __c,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548378 (1 bytes) name=pthread_mutex_init

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_init(pthread_mutex_t *__mutex,pthread_mutexattr_t *__mutexattr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548380 (1 bytes) name=fdopen

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

FILE * fdopen(int __fd,char *__modes)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548388 (1 bytes) name=dlopen

/* WARNING: Control flow encountered bad instruction data */

void dlopen(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548390 (1 bytes) name=pthread_cond_signal

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_signal(pthread_cond_t *__cond)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548398 (1 bytes) name=__google_potentially_blocking_region_begin

/* WARNING: Control flow encountered bad instruction data */

void __google_potentially_blocking_region_begin(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483a0 (1 bytes) name=gzrewind

/* WARNING: Control flow encountered bad instruction data */

void gzrewind(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483a8 (1 bytes) name=stat

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int stat(char *__file,stat *__buf)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483b0 (1 bytes) name=pthread_getspecific

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void * pthread_getspecific(pthread_key_t __key)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483b8 (1 bytes) name=wmemchr

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wchar_t * wmemchr(wchar_t *__s,wchar_t __c,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483c0 (1 bytes) name=acos

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double acos(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483c8 (1 bytes) name=ioctl

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int ioctl(int __fd,ulong __request,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483d0 (1 bytes) name=abort

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void abort(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483d8 (1 bytes) name=__cxa_atexit

/* WARNING: Control flow encountered bad instruction data */

void __cxa_atexit(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483e0 (1 bytes) name=atoi

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int atoi(char *__nptr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483e8 (1 bytes) name=fseek

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fseek(FILE *__stream,long __off,int __whence)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483f0 (1 bytes) name=sqrtf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float sqrtf(float __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005483f8 (1 bytes) name=setvbuf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int setvbuf(FILE *__stream,char *__buf,int __modes,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548400 (1 bytes) name=gzopen

/* WARNING: Control flow encountered bad instruction data */

void gzopen(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548408 (1 bytes) name=printf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int printf(char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548410 (1 bytes) name=AndroidBitmap_unlockPixels

/* WARNING: Control flow encountered bad instruction data */

void AndroidBitmap_unlockPixels(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548418 (1 bytes) name=memcmp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int memcmp(void *__s1,void *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548420 (1 bytes) name=write

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

ssize_t write(int __fd,void *__buf,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548428 (1 bytes) name=__errno

/* WARNING: Control flow encountered bad instruction data */

void __errno(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548438 (1 bytes) name=tolower

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int tolower(int __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548440 (1 bytes) name=pthread_mutexattr_init

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutexattr_init(pthread_mutexattr_t *__attr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548448 (1 bytes) name=wcrtomb

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcrtomb(char *__s,wchar_t __wc,mbstate_t *__ps)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548450 (1 bytes) name=ungetc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int ungetc(int __c,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548458 (1 bytes) name=pthread_mutex_lock

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_mutex_lock(pthread_mutex_t *__mutex)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548460 (1 bytes) name=toupper

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int toupper(int __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548468 (1 bytes) name=pthread_attr_destroy

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_destroy(pthread_attr_t *__attr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548470 (1 bytes) name=readdir

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

dirent * readdir(DIR *__dirp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548478 (1 bytes) name=__cxa_finalize

/* WARNING: Control flow encountered bad instruction data */

void __cxa_finalize(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548480 (1 bytes) name=localtime

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

tm * localtime(time_t *__timer)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548488 (1 bytes) name=fflush

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fflush(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548490 (1 bytes) name=pthread_key_create

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_key_create(pthread_key_t *__key,__destr_function *__destr_function)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548498 (1 bytes) name=pipe

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pipe(int *__pipedes)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484a0 (1 bytes) name=lseek

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

__off_t lseek(int __fd,__off_t __offset,int __whence)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484a8 (1 bytes) name=atan

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

double atan(double __x)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484b0 (1 bytes) name=time

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

time_t time(time_t *__timer)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484b8 (1 bytes) name=pthread_attr_init

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_attr_init(pthread_attr_t *__attr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484c0 (1 bytes) name=uname

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int uname(utsname *__name)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484c8 (1 bytes) name=__stack_chk_fail

/* WARNING: Control flow encountered bad instruction data */

void __stack_chk_fail(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484d0 (1 bytes) name=wcsxfrm

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

size_t wcsxfrm(wchar_t *__s1,wchar_t *__s2,size_t __n)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484d8 (1 bytes) name=strtof

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

float strtof(char *__nptr,char **__endptr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484e0 (1 bytes) name=fputs

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fputs(char *__s,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484e8 (1 bytes) name=rewind

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

void rewind(FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484f0 (1 bytes) name=fgets

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * fgets(char *__s,int __n,FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 005484f8 (1 bytes) name=ungetwc

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

wint_t ungetwc(wint_t __wc,__FILE *__stream)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548500 (1 bytes) name=pthread_cond_init

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int pthread_cond_init(pthread_cond_t *__cond,pthread_condattr_t *__cond_attr)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548508 (1 bytes) name=mkstemp

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int mkstemp(char *__template)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548510 (1 bytes) name=AndroidBitmap_getInfo

/* WARNING: Control flow encountered bad instruction data */

void AndroidBitmap_getInfo(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548518 (1 bytes) name=setlocale

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * setlocale(int __category,char *__locale)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548520 (1 bytes) name=dl_iterate_phdr

/* WARNING: Control flow encountered bad instruction data */

void dl_iterate_phdr(void)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548528 (1 bytes) name=vsprintf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int vsprintf(char *__s,char *__format,__gnuc_va_list __arg)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548530 (1 bytes) name=open

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int open(char *__file,int __oflag,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548538 (1 bytes) name=fscanf

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fscanf(FILE *__stream,char *__format,...)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548540 (1 bytes) name=strdup

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strdup(char *__s)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548548 (1 bytes) name=strrchr

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

char * strrchr(char *__s,int __c)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548550 (1 bytes) name=localtime_r

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

tm * localtime_r(time_t *__timer,tm *__tp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548558 (1 bytes) name=closedir

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int closedir(DIR *__dirp)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

### FUNC 00548560 (1 bytes) name=fstat

/* WARNING: Control flow encountered bad instruction data */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */

int fstat(int __fd,stat *__buf)

{
                    /* WARNING: Bad instruction - Truncating control flow here */
  halt_baddata();
}


==================================================================

